summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:07:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:07:13 +0000
commit636c7dc17286d93d788c741d15fd756aeda066d5 (patch)
treee7ae158cc54f591041a061b9865bcae51854f15c
parentInitial commit. (diff)
downloadapt-636c7dc17286d93d788c741d15fd756aeda066d5.tar.xz
apt-636c7dc17286d93d788c741d15fd756aeda066d5.zip
Adding upstream version 1.8.2.3.upstream/1.8.2.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--.clang-format25
-rw-r--r--.gitlab-ci.yml36
-rw-r--r--.travis.yml23
-rw-r--r--AUTHORS63
-rw-r--r--CMake/CheckCxxTarget.cmake35
-rw-r--r--CMake/Documentation.cmake328
-rw-r--r--CMake/FindBerkeleyDB.cmake59
-rw-r--r--CMake/FindIconv.cmake20
-rw-r--r--CMake/FindLFS.cmake148
-rw-r--r--CMake/FindLZ4.cmake25
-rw-r--r--CMake/FindLZMA.cmake25
-rw-r--r--CMake/FindSeccomp.cmake25
-rw-r--r--CMake/FindSystemd.cmake24
-rw-r--r--CMake/FindUdev.cmake25
-rw-r--r--CMake/FindZstd.cmake25
-rw-r--r--CMake/Misc.cmake101
-rw-r--r--CMake/Translations.cmake185
-rw-r--r--CMake/apti18n.h.in29
-rw-r--r--CMake/config.h.in90
-rw-r--r--CMake/endian.h.in9
-rwxr-xr-xCMake/run_if_exists.sh16
-rw-r--r--CMake/statvfs.h.in13
-rw-r--r--CMake/vendor_substitute.cmake8
-rw-r--r--CMakeLists.txt260
-rw-r--r--COPYING22
-rw-r--r--COPYING.GPL339
-rw-r--r--Dockerfile12
-rw-r--r--README.md215
-rw-r--r--abicheck/apt_build.xml.in12
-rw-r--r--abicheck/apt_installed.xml.in11
-rwxr-xr-xabicheck/run_abi_test22
-rw-r--r--apt-inst/CMakeLists.txt28
-rw-r--r--apt-inst/contrib/arfile.cc179
-rw-r--r--apt-inst/contrib/arfile.h69
-rw-r--r--apt-inst/contrib/extracttar.cc329
-rw-r--r--apt-inst/contrib/extracttar.h61
-rw-r--r--apt-inst/deb/debfile.cc265
-rw-r--r--apt-inst/deb/debfile.h95
-rw-r--r--apt-inst/dirstream.cc118
-rw-r--r--apt-inst/dirstream.h57
-rw-r--r--apt-inst/dpkg-diffs.txt5
-rw-r--r--apt-inst/extract.cc514
-rw-r--r--apt-inst/extract.h49
-rw-r--r--apt-inst/filelist.cc586
-rw-r--r--apt-inst/filelist.h312
-rw-r--r--apt-pkg/CMakeLists.txt76
-rw-r--r--apt-pkg/acquire-item.cc4078
-rw-r--r--apt-pkg/acquire-item.h1250
-rw-r--r--apt-pkg/acquire-method.cc565
-rw-r--r--apt-pkg/acquire-method.h140
-rw-r--r--apt-pkg/acquire-worker.cc964
-rw-r--r--apt-pkg/acquire-worker.h339
-rw-r--r--apt-pkg/acquire.cc1486
-rw-r--r--apt-pkg/acquire.h886
-rw-r--r--apt-pkg/algorithms.cc1418
-rw-r--r--apt-pkg/algorithms.h162
-rw-r--r--apt-pkg/aptconfiguration.cc483
-rw-r--r--apt-pkg/aptconfiguration.h128
-rw-r--r--apt-pkg/cachefile.cc363
-rw-r--r--apt-pkg/cachefile.h95
-rw-r--r--apt-pkg/cachefilter.cc264
-rw-r--r--apt-pkg/cachefilter.h150
-rw-r--r--apt-pkg/cacheiterators.h531
-rw-r--r--apt-pkg/cacheset.cc934
-rw-r--r--apt-pkg/cacheset.h1229
-rw-r--r--apt-pkg/cdrom.cc1000
-rw-r--r--apt-pkg/cdrom.h135
-rw-r--r--apt-pkg/clean.cc151
-rw-r--r--apt-pkg/clean.h49
-rw-r--r--apt-pkg/contrib/cdromutl.cc293
-rw-r--r--apt-pkg/contrib/cdromutl.h25
-rw-r--r--apt-pkg/contrib/cmndline.cc445
-rw-r--r--apt-pkg/contrib/cmndline.h118
-rw-r--r--apt-pkg/contrib/configuration.cc1209
-rw-r--r--apt-pkg/contrib/configuration.h155
-rw-r--r--apt-pkg/contrib/crc-16.cc77
-rw-r--r--apt-pkg/contrib/crc-16.h19
-rw-r--r--apt-pkg/contrib/error.cc244
-rw-r--r--apt-pkg/contrib/error.h365
-rw-r--r--apt-pkg/contrib/fileutl.cc3443
-rw-r--r--apt-pkg/contrib/fileutl.h305
-rw-r--r--apt-pkg/contrib/gpgv.cc580
-rw-r--r--apt-pkg/contrib/gpgv.h92
-rw-r--r--apt-pkg/contrib/hashes.cc408
-rw-r--r--apt-pkg/contrib/hashes.h250
-rw-r--r--apt-pkg/contrib/hashsum.cc52
-rw-r--r--apt-pkg/contrib/hashsum_template.h141
-rw-r--r--apt-pkg/contrib/macros.h173
-rw-r--r--apt-pkg/contrib/md5.cc279
-rw-r--r--apt-pkg/contrib/md5.h58
-rw-r--r--apt-pkg/contrib/mmap.cc502
-rw-r--r--apt-pkg/contrib/mmap.h120
-rw-r--r--apt-pkg/contrib/netrc.cc195
-rw-r--r--apt-pkg/contrib/netrc.h39
-rw-r--r--apt-pkg/contrib/progress.cc221
-rw-r--r--apt-pkg/contrib/progress.h89
-rw-r--r--apt-pkg/contrib/proxy.cc97
-rw-r--r--apt-pkg/contrib/proxy.h16
-rw-r--r--apt-pkg/contrib/sha1.cc273
-rw-r--r--apt-pkg/contrib/sha1.h47
-rw-r--r--apt-pkg/contrib/sha2.h108
-rw-r--r--apt-pkg/contrib/sha256.h8
-rw-r--r--apt-pkg/contrib/sha2_internal.cc1089
-rw-r--r--apt-pkg/contrib/sha2_internal.h188
-rw-r--r--apt-pkg/contrib/sptr.h74
-rw-r--r--apt-pkg/contrib/srvrec.cc204
-rw-r--r--apt-pkg/contrib/srvrec.h54
-rw-r--r--apt-pkg/contrib/string_view.h132
-rw-r--r--apt-pkg/contrib/strutl.cc1840
-rw-r--r--apt-pkg/contrib/strutl.h245
-rw-r--r--apt-pkg/contrib/weakptr.h64
-rw-r--r--apt-pkg/deb/debindexfile.cc431
-rw-r--r--apt-pkg/deb/debindexfile.h197
-rw-r--r--apt-pkg/deb/deblistparser.cc1066
-rw-r--r--apt-pkg/deb/deblistparser.h159
-rw-r--r--apt-pkg/deb/debmetaindex.cc1316
-rw-r--r--apt-pkg/deb/debmetaindex.h78
-rw-r--r--apt-pkg/deb/debrecords.cc227
-rw-r--r--apt-pkg/deb/debrecords.h92
-rw-r--r--apt-pkg/deb/debsrcrecords.cc324
-rw-r--r--apt-pkg/deb/debsrcrecords.h68
-rw-r--r--apt-pkg/deb/debsystem.cc485
-rw-r--r--apt-pkg/deb/debsystem.h61
-rw-r--r--apt-pkg/deb/debversion.cc279
-rw-r--r--apt-pkg/deb/debversion.h41
-rw-r--r--apt-pkg/deb/dpkgpm.cc2491
-rw-r--r--apt-pkg/deb/dpkgpm.h144
-rw-r--r--apt-pkg/depcache.cc2040
-rw-r--r--apt-pkg/depcache.h528
-rw-r--r--apt-pkg/edsp.cc1505
-rw-r--r--apt-pkg/edsp.h275
-rw-r--r--apt-pkg/edsp/edspindexfile.cc129
-rw-r--r--apt-pkg/edsp/edspindexfile.h62
-rw-r--r--apt-pkg/edsp/edsplistparser.cc178
-rw-r--r--apt-pkg/edsp/edsplistparser.h64
-rw-r--r--apt-pkg/edsp/edspsystem.cc166
-rw-r--r--apt-pkg/edsp/edspsystem.h67
-rw-r--r--apt-pkg/indexcopy.cc796
-rw-r--r--apt-pkg/indexcopy.h129
-rw-r--r--apt-pkg/indexfile.cc412
-rw-r--r--apt-pkg/indexfile.h229
-rw-r--r--apt-pkg/init.cc289
-rw-r--r--apt-pkg/init.h32
-rw-r--r--apt-pkg/install-progress.cc425
-rw-r--r--apt-pkg/install-progress.h176
-rw-r--r--apt-pkg/metaindex.cc176
-rw-r--r--apt-pkg/metaindex.h131
-rw-r--r--apt-pkg/orderlist.cc1138
-rw-r--r--apt-pkg/orderlist.h127
-rw-r--r--apt-pkg/packagemanager.cc1186
-rw-r--r--apt-pkg/packagemanager.h153
-rw-r--r--apt-pkg/pkgcache.cc1108
-rw-r--r--apt-pkg/pkgcache.h831
-rw-r--r--apt-pkg/pkgcachegen.cc1860
-rw-r--r--apt-pkg/pkgcachegen.h252
-rw-r--r--apt-pkg/pkgrecords.cc79
-rw-r--r--apt-pkg/pkgrecords.h115
-rw-r--r--apt-pkg/pkgsystem.cc113
-rw-r--r--apt-pkg/pkgsystem.h141
-rw-r--r--apt-pkg/policy.cc442
-rw-r--r--apt-pkg/policy.h96
-rw-r--r--apt-pkg/prettyprinters.cc123
-rw-r--r--apt-pkg/prettyprinters.h37
-rw-r--r--apt-pkg/sourcelist.cc643
-rw-r--r--apt-pkg/sourcelist.h144
-rw-r--r--apt-pkg/srcrecords.cc182
-rw-r--r--apt-pkg/srcrecords.h120
-rw-r--r--apt-pkg/statechanges.cc227
-rw-r--r--apt-pkg/statechanges.h58
-rw-r--r--apt-pkg/tagfile-compat.cc75
-rw-r--r--apt-pkg/tagfile-keys.list83
-rw-r--r--apt-pkg/tagfile-order.c113
-rw-r--r--apt-pkg/tagfile.cc1210
-rw-r--r--apt-pkg/tagfile.h241
-rw-r--r--apt-pkg/update.cc133
-rw-r--r--apt-pkg/update.h22
-rw-r--r--apt-pkg/upgrade.cc301
-rw-r--r--apt-pkg/upgrade.h35
-rw-r--r--apt-pkg/version.cc44
-rw-r--r--apt-pkg/version.h60
-rw-r--r--apt-pkg/versionmatch.cc290
-rw-r--r--apt-pkg/versionmatch.h80
-rw-r--r--apt-private/CMakeLists.txt26
-rw-r--r--apt-private/acqprogress.cc366
-rw-r--r--apt-private/acqprogress.h45
-rw-r--r--apt-private/private-cachefile.cc118
-rw-r--r--apt-private/private-cachefile.h72
-rw-r--r--apt-private/private-cacheset.cc372
-rw-r--r--apt-private/private-cacheset.h126
-rw-r--r--apt-private/private-cmndline.cc577
-rw-r--r--apt-private/private-cmndline.h41
-rw-r--r--apt-private/private-depends.cc151
-rw-r--r--apt-private/private-depends.h11
-rw-r--r--apt-private/private-download.cc378
-rw-r--r--apt-private/private-download.h38
-rw-r--r--apt-private/private-install.cc1111
-rw-r--r--apt-private/private-install.h75
-rw-r--r--apt-private/private-json-hooks.cc431
-rw-r--r--apt-private/private-json-hooks.h14
-rw-r--r--apt-private/private-list.cc155
-rw-r--r--apt-private/private-list.h11
-rw-r--r--apt-private/private-main.cc90
-rw-r--r--apt-private/private-main.h16
-rw-r--r--apt-private/private-moo.cc200
-rw-r--r--apt-private/private-moo.h10
-rw-r--r--apt-private/private-output.cc801
-rw-r--r--apt-private/private-output.h116
-rw-r--r--apt-private/private-search.cc349
-rw-r--r--apt-private/private-search.h12
-rw-r--r--apt-private/private-show.cc580
-rw-r--r--apt-private/private-show.h22
-rw-r--r--apt-private/private-source.cc820
-rw-r--r--apt-private/private-source.h11
-rw-r--r--apt-private/private-sources.cc105
-rw-r--r--apt-private/private-sources.h10
-rw-r--r--apt-private/private-unmet.cc120
-rw-r--r--apt-private/private-unmet.h10
-rw-r--r--apt-private/private-update.cc147
-rw-r--r--apt-private/private-update.h10
-rw-r--r--apt-private/private-upgrade.cc66
-rw-r--r--apt-private/private-upgrade.h13
-rw-r--r--apt-private/private-utils.cc98
-rw-r--r--apt-private/private-utils.h10
-rw-r--r--cmdline/CMakeLists.txt59
-rw-r--r--cmdline/apt-cache.cc1151
-rw-r--r--cmdline/apt-cdrom.cc235
-rw-r--r--cmdline/apt-config.cc144
-rw-r--r--cmdline/apt-dump-solver.cc185
-rw-r--r--cmdline/apt-extracttemplates.cc335
-rw-r--r--cmdline/apt-extracttemplates.h49
-rw-r--r--cmdline/apt-get.cc446
-rw-r--r--cmdline/apt-helper.cc271
-rw-r--r--cmdline/apt-internal-planner.cc195
-rw-r--r--cmdline/apt-internal-solver.cc213
-rw-r--r--cmdline/apt-key.in827
-rw-r--r--cmdline/apt-mark.cc447
-rwxr-xr-xcmdline/apt-report-mirror-failure29
-rw-r--r--cmdline/apt-sortpkgs.cc165
-rw-r--r--cmdline/apt.cc121
-rw-r--r--completions/CMakeLists.txt4
-rw-r--r--completions/bash/apt227
-rw-r--r--doc/CMakeLists.txt98
-rw-r--r--doc/Doxyfile.in2313
-rw-r--r--doc/acquire-additional-files.md325
-rw-r--r--doc/apt-cache.8.xml392
-rw-r--r--doc/apt-cdrom.8.xml161
-rw-r--r--doc/apt-config.8.xml118
-rw-r--r--doc/apt-extracttemplates.1.xml76
-rw-r--r--doc/apt-ftparchive.1.xml627
-rw-r--r--doc/apt-get.8.xml648
-rw-r--r--doc/apt-key.8.xml216
-rw-r--r--doc/apt-mark.8.xml163
-rw-r--r--doc/apt-secure.8.xml272
-rw-r--r--doc/apt-sortpkgs.1.xml69
-rw-r--r--doc/apt-transport-http.1.xml138
-rw-r--r--doc/apt-transport-https.1.xml133
-rw-r--r--doc/apt-transport-mirror.1.xml150
-rw-r--r--doc/apt-verbatim.ent490
-rw-r--r--doc/apt.8.xml177
-rw-r--r--doc/apt.conf.5.xml1272
-rw-r--r--doc/apt.ent243
-rw-r--r--doc/apt_auth.conf.5.xml138
-rw-r--r--doc/apt_preferences.5.xml723
-rw-r--r--doc/design.dbk439
-rw-r--r--doc/docbook-html-style.xsl.cmake.in40
-rw-r--r--doc/docbook-text-style.xsl.cmake.in70
-rw-r--r--doc/dpkg-tech.dbk870
-rw-r--r--doc/examples/CMakeLists.txt4
-rw-r--r--doc/examples/apt-ftparchive.conf46
-rw-r--r--doc/examples/apt.conf31
-rw-r--r--doc/examples/configure-index824
-rw-r--r--doc/examples/ftp-archive.conf81
-rw-r--r--doc/examples/preferences11
-rw-r--r--doc/external-dependency-solver-protocol.md377
-rw-r--r--doc/external-installation-planner-protocol.md301
-rw-r--r--doc/files.dbk393
-rw-r--r--doc/guide.dbk561
-rw-r--r--doc/json-hooks-protocol.md159
-rw-r--r--doc/libapt-pkg2_to_3.txt90
-rw-r--r--doc/manpage-style.xsl.cmake.in18
-rw-r--r--doc/method.dbk732
-rw-r--r--doc/offline.dbk248
-rw-r--r--doc/po/apt-doc.pot8805
-rw-r--r--doc/po/de.po12701
-rw-r--r--doc/po/es.po12771
-rw-r--r--doc/po/fr.po13672
-rw-r--r--doc/po/header.pot.txt3
-rw-r--r--doc/po/it.po14510
-rw-r--r--doc/po/ja.po12001
-rw-r--r--doc/po/nl.po13482
-rw-r--r--doc/po/pl.po11783
-rw-r--r--doc/po/pt.po13093
-rw-r--r--doc/po/pt_BR.po9319
-rw-r--r--doc/po4a.conf48
-rw-r--r--doc/progress-reporting.md76
-rw-r--r--doc/sources.list.5.xml586
-rw-r--r--doc/srv-records-support.md22
-rw-r--r--doc/style.txt75
-rw-r--r--doc/xml.add5
-rw-r--r--dselect/CMakeLists.txt4
-rw-r--r--dselect/desc.apt9
-rwxr-xr-xdselect/install111
-rw-r--r--dselect/names1
-rwxr-xr-xdselect/setup286
-rwxr-xr-xdselect/update48
-rw-r--r--ftparchive/CMakeLists.txt13
-rw-r--r--ftparchive/apt-ftparchive.cc1058
-rw-r--r--ftparchive/apt-ftparchive.h26
-rw-r--r--ftparchive/byhash.cc61
-rw-r--r--ftparchive/byhash.h25
-rw-r--r--ftparchive/cachedb.cc582
-rw-r--r--ftparchive/cachedb.h195
-rw-r--r--ftparchive/contents.cc409
-rw-r--r--ftparchive/contents.h92
-rw-r--r--ftparchive/multicompress.cc363
-rw-r--r--ftparchive/multicompress.h62
-rw-r--r--ftparchive/override.cc288
-rw-r--r--ftparchive/override.h48
-rw-r--r--ftparchive/sources.cc60
-rw-r--r--ftparchive/sources.h24
-rw-r--r--ftparchive/writer.cc1205
-rw-r--r--ftparchive/writer.h208
-rwxr-xr-xgit-clang-format.sh10
-rw-r--r--methods/CMakeLists.txt33
-rw-r--r--methods/aptmethod.h547
-rw-r--r--methods/basehttp.cc909
-rw-r--r--methods/basehttp.h173
-rw-r--r--methods/cdrom.cc290
-rw-r--r--methods/connect.cc1052
-rw-r--r--methods/connect.h49
-rw-r--r--methods/copy.cc94
-rw-r--r--methods/file.cc134
-rw-r--r--methods/ftp.cc1188
-rw-r--r--methods/ftp.h91
-rw-r--r--methods/gpgv.cc522
-rw-r--r--methods/http.cc1051
-rw-r--r--methods/http.h142
-rw-r--r--methods/mirror.cc406
-rw-r--r--methods/rfc2553emu.cc244
-rw-r--r--methods/rfc2553emu.h112
-rw-r--r--methods/rred.cc788
-rw-r--r--methods/rsh.cc547
-rw-r--r--methods/rsh.h75
-rw-r--r--methods/store.cc147
-rw-r--r--mirror-failure.py23
-rw-r--r--po/CMakeLists.txt52
-rw-r--r--po/apt-all.pot3613
-rw-r--r--po/ar.po3849
-rw-r--r--po/ast.po4345
-rw-r--r--po/bg.po4467
-rw-r--r--po/bs.po3724
-rw-r--r--po/ca.po4042
-rw-r--r--po/cs.po4484
-rw-r--r--po/cy.po4371
-rw-r--r--po/da.po3971
-rw-r--r--po/de.po4625
-rw-r--r--po/dz.po4301
-rw-r--r--po/el.po4334
-rw-r--r--po/es.po5062
-rw-r--r--po/eu.po4264
-rw-r--r--po/fi.po4290
-rw-r--r--po/fr.po4679
-rw-r--r--po/gl.po4368
-rw-r--r--po/he.po2836
-rw-r--r--po/hu.po4476
-rw-r--r--po/it.po4027
-rw-r--r--po/ja.po3981
-rw-r--r--po/km.po4301
-rw-r--r--po/ko.po4261
-rw-r--r--po/ku.po3789
-rw-r--r--po/lt.po3987
-rw-r--r--po/mr.po4259
-rw-r--r--po/nb.po4409
-rw-r--r--po/ne.po4268
-rw-r--r--po/nl.po4543
-rw-r--r--po/nn.po4292
-rw-r--r--po/pl.po4495
-rw-r--r--po/pt.po4600
-rw-r--r--po/pt_BR.po4403
-rw-r--r--po/ro.po4346
-rw-r--r--po/ru.po4565
-rw-r--r--po/sk.po4376
-rw-r--r--po/sl.po4382
-rw-r--r--po/sv.po4511
-rw-r--r--po/th.po4317
-rw-r--r--po/tl.po4341
-rw-r--r--po/tr.po4368
-rw-r--r--po/uk.po4498
-rw-r--r--po/vi.po4488
-rw-r--r--po/zh_CN.po4364
-rw-r--r--po/zh_TW.po4197
-rwxr-xr-xprepare-release378
-rw-r--r--shippable.yml18
-rw-r--r--test/CMakeLists.txt2
-rw-r--r--test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order67
-rw-r--r--test/integration/Packages-bug-591882-conkeror1787
-rw-r--r--test/integration/Packages-bug-593360-modifiers-in-names42
-rw-r--r--test/integration/Packages-bug-598669-install-postfix-gets-exim-heavy30
-rw-r--r--test/integration/Packages-bug-605394-versioned-or-groups71
-rw-r--r--test/integration/Packages-bug-723705-tagfile-truncates-fields167
-rw-r--r--test/integration/Packages-bug-lp1347721-dpkg-ordering445
-rw-r--r--test/integration/Packages-github-23-too-long-dependency-line17
-rw-r--r--test/integration/Packages-hashsum-verification18
-rw-r--r--test/integration/Packages-pdiff-usage36
-rw-r--r--test/integration/Packages-pdiff-usage-new39
-rw-r--r--test/integration/Packages-policy-pinning12
-rw-r--r--test/integration/Packages-releasefile-verification20
-rw-r--r--test/integration/Packages-releasefile-verification-new23
-rw-r--r--test/integration/Packages-ubuntu-bug-6149931819
-rw-r--r--test/integration/Packages-xorg-break-providers52
-rw-r--r--test/integration/apt.pem49
-rw-r--r--test/integration/cachedb-lp1274466-old-format.dbbin0 -> 8192 bytes
-rwxr-xr-xtest/integration/create-test-data60
-rw-r--r--test/integration/deb-bug-330162-encoded-tar-header.debbin0 -> 544 bytes
-rw-r--r--test/integration/deb-lp1274466-cachedb.debbin0 -> 1270 bytes
-rw-r--r--test/integration/framework2156
-rwxr-xr-xtest/integration/header-compilation26
-rw-r--r--test/integration/joesixpack.pubbin0 -> 639 bytes
-rw-r--r--test/integration/joesixpack.secbin0 -> 1290 bytes
-rw-r--r--test/integration/keyrings/test-archive-keyring.pubbin0 -> 979 bytes
-rw-r--r--test/integration/keyrings/test-archive-keyring.secbin0 -> 1642 bytes
-rw-r--r--test/integration/keyrings/test-master-keyring.pubbin0 -> 1199 bytes
-rw-r--r--test/integration/keyrings/test-master-keyring.secbin0 -> 2501 bytes
-rw-r--r--test/integration/marvinparanoid.pubbin0 -> 624 bytes
-rw-r--r--test/integration/marvinparanoid.secbin0 -> 1275 bytes
-rw-r--r--test/integration/rexexpired.pubbin0 -> 1191 bytes
-rw-r--r--test/integration/rexexpired.secbin0 -> 2493 bytes
-rwxr-xr-xtest/integration/run-tests164
-rw-r--r--test/integration/sebastiansubkey.master.secbin0 -> 4829 bytes
-rw-r--r--test/integration/sebastiansubkey.pubbin0 -> 2567 bytes
-rw-r--r--test/integration/sebastiansubkey.secbin0 -> 3546 bytes
-rwxr-xr-xtest/integration/skip-acquire-same-repository-multiple-times85
-rwxr-xr-xtest/integration/skip-apt-download-progress48
-rwxr-xr-xtest/integration/skip-apt-dropprivs32
-rwxr-xr-xtest/integration/skip-avoid-avoiding-breaks-predepends21
-rwxr-xr-xtest/integration/skip-bug-601016-description-translation133
-rwxr-xr-xtest/integration/skip-bug-711456-apt-cdrom-multiple-cds-multiarch47
-rwxr-xr-xtest/integration/skip-method-http-socks-client181
-rw-r--r--test/integration/status-bug-590438-broken-provides-thanks-to-remove-order97
-rw-r--r--test/integration/status-bug-591882-conkeror1357
-rw-r--r--test/integration/status-bug-598669-install-postfix-gets-exim-heavy30
-rw-r--r--test/integration/status-bug-601961-install-info42
-rw-r--r--test/integration/status-bug-605394-versioned-or-groups34
-rw-r--r--test/integration/status-bug-612557-garbage-upgrade34
-rw-r--r--test/integration/status-bug-613420-new-garbage-dependency22
-rw-r--r--test/integration/status-bug-723705-tagfile-truncates-fields62
-rw-r--r--test/integration/status-bug-lp1347721-dpkg-ordering1942
-rw-r--r--test/integration/status-github-23-too-long-dependency-line12
-rw-r--r--test/integration/status-ubuntu-bug-6149935894
-rw-r--r--test/integration/status-xorg-break-providers22
-rwxr-xr-xtest/integration/test-00-commands-have-help101
-rwxr-xr-xtest/integration/test-acquire-binary-all142
-rwxr-xr-xtest/integration/test-acquire-same-file-multiple-times90
-rwxr-xr-xtest/integration/test-allow98
-rwxr-xr-xtest/integration/test-allow-scores-for-all-dependency-types179
-rwxr-xr-xtest/integration/test-apt-acquire-additional-files246
-rwxr-xr-xtest/integration/test-apt-acquire-additional-files-duplicates105
-rwxr-xr-xtest/integration/test-apt-by-hash-update107
-rwxr-xr-xtest/integration/test-apt-cache183
-rwxr-xr-xtest/integration/test-apt-cache-remapping47
-rwxr-xr-xtest/integration/test-apt-cache-showsrc31
-rwxr-xr-xtest/integration/test-apt-cdrom158
-rwxr-xr-xtest/integration/test-apt-cli-json-hooks209
-rwxr-xr-xtest/integration/test-apt-cli-list93
-rwxr-xr-xtest/integration/test-apt-cli-search79
-rwxr-xr-xtest/integration/test-apt-cli-show111
-rwxr-xr-xtest/integration/test-apt-cli-update23
-rwxr-xr-xtest/integration/test-apt-cli-upgrade32
-rwxr-xr-xtest/integration/test-apt-config50
-rwxr-xr-xtest/integration/test-apt-edit-sources39
-rwxr-xr-xtest/integration/test-apt-extracttemplates78
-rwxr-xr-xtest/integration/test-apt-ftparchive64
-rwxr-xr-xtest/integration/test-apt-ftparchive-by-hash70
-rwxr-xr-xtest/integration/test-apt-ftparchive-cachedb103
-rwxr-xr-xtest/integration/test-apt-ftparchive-cachedb-lp127446659
-rwxr-xr-xtest/integration/test-apt-ftparchive-notautomatic54
-rwxr-xr-xtest/integration/test-apt-ftparchive-src-cachedb191
-rwxr-xr-xtest/integration/test-apt-get-autoremove238
-rwxr-xr-xtest/integration/test-apt-get-build-dep149
-rwxr-xr-xtest/integration/test-apt-get-build-dep-file209
-rwxr-xr-xtest/integration/test-apt-get-changelog139
-rwxr-xr-xtest/integration/test-apt-get-clean88
-rwxr-xr-xtest/integration/test-apt-get-download113
-rwxr-xr-xtest/integration/test-apt-get-install-deb245
-rwxr-xr-xtest/integration/test-apt-get-install-virtual-pkgs64
-rwxr-xr-xtest/integration/test-apt-get-source-arch68
-rwxr-xr-xtest/integration/test-apt-get-source-authenticated33
-rwxr-xr-xtest/integration/test-apt-get-source-multisources29
-rwxr-xr-xtest/integration/test-apt-get-update-sourceslist-warning45
-rwxr-xr-xtest/integration/test-apt-get-update-unauth-warning94
-rwxr-xr-xtest/integration/test-apt-get-upgrade144
-rwxr-xr-xtest/integration/test-apt-helper132
-rwxr-xr-xtest/integration/test-apt-helper-cat-file46
-rwxr-xr-xtest/integration/test-apt-https-no-redirect48
-rwxr-xr-xtest/integration/test-apt-install-file-reltag94
-rwxr-xr-xtest/integration/test-apt-keep-downloaded-pkgs54
-rwxr-xr-xtest/integration/test-apt-key428
-rwxr-xr-xtest/integration/test-apt-key-net-update41
-rwxr-xr-xtest/integration/test-apt-key-used-in-maintainerscript43
-rwxr-xr-xtest/integration/test-apt-mark154
-rwxr-xr-xtest/integration/test-apt-move-and-forget-manual-sections31
-rwxr-xr-xtest/integration/test-apt-never-markauto-sections86
-rwxr-xr-xtest/integration/test-apt-progress-fd80
-rwxr-xr-xtest/integration/test-apt-progress-fd-conffile42
-rwxr-xr-xtest/integration/test-apt-progress-fd-deb82258
-rwxr-xr-xtest/integration/test-apt-progress-fd-error25
-rwxr-xr-xtest/integration/test-apt-redirect-loop20
-rwxr-xr-xtest/integration/test-apt-showlist-orgroup-in-recommends200
-rwxr-xr-xtest/integration/test-apt-source-and-build-dep250
-rwxr-xr-xtest/integration/test-apt-sources-deb822361
-rwxr-xr-xtest/integration/test-apt-tagfile-fields-order82
-rwxr-xr-xtest/integration/test-apt-translation-has-no-packages35
-rwxr-xr-xtest/integration/test-apt-update-disappeared-component45
-rwxr-xr-xtest/integration/test-apt-update-empty-files47
-rwxr-xr-xtest/integration/test-apt-update-expected-size99
-rwxr-xr-xtest/integration/test-apt-update-failure-propagation90
-rwxr-xr-xtest/integration/test-apt-update-file79
-rwxr-xr-xtest/integration/test-apt-update-filesize-mismatch54
-rwxr-xr-xtest/integration/test-apt-update-hashsum-mismatch39
-rwxr-xr-xtest/integration/test-apt-update-hooks49
-rwxr-xr-xtest/integration/test-apt-update-ims192
-rwxr-xr-xtest/integration/test-apt-update-nofallback274
-rwxr-xr-xtest/integration/test-apt-update-not-modified183
-rwxr-xr-xtest/integration/test-apt-update-releaseinfo-changes94
-rwxr-xr-xtest/integration/test-apt-update-reporting35
-rwxr-xr-xtest/integration/test-apt-update-rollback219
-rwxr-xr-xtest/integration/test-apt-update-simple33
-rwxr-xr-xtest/integration/test-apt-update-stale44
-rwxr-xr-xtest/integration/test-apt-update-transactions85
-rwxr-xr-xtest/integration/test-apt-update-unauth80
-rwxr-xr-xtest/integration/test-apt-update-weak-hashes202
-rwxr-xr-xtest/integration/test-architecture-specification-parsing120
-rwxr-xr-xtest/integration/test-authentication-basic127
-rwxr-xr-xtest/integration/test-bug-254770-segfault-if-cache-not-buildable64
-rwxr-xr-xtest/integration/test-bug-330162-encoded-tar-header11
-rwxr-xr-xtest/integration/test-bug-407511-fail-invalid-default-release66
-rwxr-xr-xtest/integration/test-bug-470115-new-and-tighten-recommends174
-rwxr-xr-xtest/integration/test-bug-507998-dist-upgrade-recommends26
-rwxr-xr-xtest/integration/test-bug-543966-downgrade-below-1000-pin90
-rwxr-xr-xtest/integration/test-bug-549968-install-depends-of-not-installed28
-rwxr-xr-xtest/integration/test-bug-590041-prefer-non-virtual-packages54
-rwxr-xr-xtest/integration/test-bug-590438-broken-provides-thanks-to-remove-order96
-rwxr-xr-xtest/integration/test-bug-591882-conkeror77
-rwxr-xr-xtest/integration/test-bug-593360-modifiers-in-names69
-rwxr-xr-xtest/integration/test-bug-595691-empty-and-broken-archive-files64
-rwxr-xr-xtest/integration/test-bug-596498-trusted-unsigned-repo75
-rwxr-xr-xtest/integration/test-bug-598669-install-postfix-gets-exim-heavy19
-rwxr-xr-xtest/integration/test-bug-601961-install-info38
-rwxr-xr-xtest/integration/test-bug-602412-dequote-redirect64
-rwxr-xr-xtest/integration/test-bug-604222-new-and-autoremove121
-rwxr-xr-xtest/integration/test-bug-604401-files-are-directories67
-rwxr-xr-xtest/integration/test-bug-605394-versioned-or-groups30
-rwxr-xr-xtest/integration/test-bug-611729-mark-as-manual96
-rwxr-xr-xtest/integration/test-bug-612099-multiarch-conflicts225
-rwxr-xr-xtest/integration/test-bug-612557-garbage-upgrade60
-rwxr-xr-xtest/integration/test-bug-612958-use-dpkg-multiarch-config83
-rwxr-xr-xtest/integration/test-bug-613420-new-garbage-dependency56
-rwxr-xr-xtest/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted68
-rwxr-xr-xtest/integration/test-bug-618288-multiarch-same-lockstep41
-rwxr-xr-xtest/integration/test-bug-618848-always-respect-user-requests32
-rwxr-xr-xtest/integration/test-bug-623443-fail-on-bad-proxies34
-rwxr-xr-xtest/integration/test-bug-624218-Translation-file-handling171
-rwxr-xr-xtest/integration/test-bug-632221-cross-dependency-satisfaction348
-rwxr-xr-xtest/integration/test-bug-633350-do-not-kill-last-char-in-Release16
-rwxr-xr-xtest/integration/test-bug-64141-install-dependencies-for-on-hold46
-rwxr-xr-xtest/integration/test-bug-657695-resolver-breaks-on-virtuals52
-rwxr-xr-xtest/integration/test-bug-661537-build-profiles-support161
-rwxr-xr-xtest/integration/test-bug-673536-pre-depends-breaks-loop36
-rwxr-xr-xtest/integration/test-bug-675449-essential-are-protected103
-rwxr-xr-xtest/integration/test-bug-679371-apt-get-autoclean-multiarch27
-rwxr-xr-xtest/integration/test-bug-680041-apt-mark-holds-correctly76
-rwxr-xr-xtest/integration/test-bug-683786-build-dep-on-virtual-packages107
-rwxr-xr-xtest/integration/test-bug-686346-package-missing-architecture113
-rwxr-xr-xtest/integration/test-bug-689582-100-char-long-path-names35
-rwxr-xr-xtest/integration/test-bug-691453-apt-cache-search-multi-pattern33
-rwxr-xr-xtest/integration/test-bug-709560-set-candidate-release36
-rwxr-xr-xtest/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch152
-rwxr-xr-xtest/integration/test-bug-712435-missing-descriptions162
-rwxr-xr-xtest/integration/test-bug-717891-abolute-uris-for-proxies53
-rwxr-xr-xtest/integration/test-bug-718329-support-data.tar-uncompressed34
-rwxr-xr-xtest/integration/test-bug-719263-print-uris-removes-authentication42
-rwxr-xr-xtest/integration/test-bug-720597-build-dep-purge65
-rwxr-xr-xtest/integration/test-bug-722207-print-uris-even-if-very-quiet31
-rwxr-xr-xtest/integration/test-bug-723586-any-stripped-in-single-arch54
-rwxr-xr-xtest/integration/test-bug-723705-tagfile-truncates-fields33
-rwxr-xr-xtest/integration/test-bug-728500-tempdir23
-rwxr-xr-xtest/integration/test-bug-732746-preferences32
-rwxr-xr-xtest/integration/test-bug-733028-gpg-resource-limit25
-rwxr-xr-xtest/integration/test-bug-734922-apt-showsrc-duplicate25
-rwxr-xr-xtest/integration/test-bug-735967-lib32-to-i386-unavailable91
-rwxr-xr-xtest/integration/test-bug-737130-multicompress-file-modes30
-rwxr-xr-xtest/integration/test-bug-738785-switch-protocol50
-rwxr-xr-xtest/integration/test-bug-740843-versioned-up-down-breaks57
-rwxr-xr-xtest/integration/test-bug-745036-new-foreign-invalidates-cache27
-rwxr-xr-xtest/integration/test-bug-745046-candidate-propagation-fails39
-rwxr-xr-xtest/integration/test-bug-747261-arch-specific-conflicts46
-rwxr-xr-xtest/integration/test-bug-753297-upgradable35
-rwxr-xr-xtest/integration/test-bug-758153-versioned-provides-support387
-rwxr-xr-xtest/integration/test-bug-762160-relpath17
-rwxr-xr-xtest/integration/test-bug-767891-force-essential-important100
-rwxr-xr-xtest/integration/test-bug-769609-triggers-still-pending-after-run75
-rwxr-xr-xtest/integration/test-bug-770291-reinstall98
-rwxr-xr-xtest/integration/test-bug-778375-server-has-no-reason-phrase43
-rwxr-xr-xtest/integration/test-bug-782777-single-arch-weirdness72
-rwxr-xr-xtest/integration/test-bug-796070-downgrade-realpkg23
-rwxr-xr-xtest/integration/test-bug-796070-downgrade-simulate67
-rwxr-xr-xtest/integration/test-bug-807012-mixed-case-package-names21
-rwxr-xr-xtest/integration/test-bug-814139-pickup-of-different-cache-states60
-rwxr-xr-xtest/integration/test-bug-818628-unreadable-source94
-rwxr-xr-xtest/integration/test-bug-82965127
-rwxr-xr-xtest/integration/test-bug-835094-configure-before-purge44
-rwxr-xr-xtest/integration/test-bug-838779-untrusted-to-trusted-Release-hit48
-rwxr-xr-xtest/integration/test-bug-841874-warning-for-mismatching-distribution49
-rwxr-xr-xtest/integration/test-bug-869859-retry-downloads55
-rwxr-xr-xtest/integration/test-bug-870675-hang-on-unsupported-method26
-rwxr-xr-xtest/integration/test-bug-872963-apt-ftparchive-disable-hashes40
-rwxr-xr-xtest/integration/test-bug-879591-dont-warn-for-hidden-but-good-components25
-rwxr-xr-xtest/integration/test-bug-921685-binary-detached-signature22
-rwxr-xr-xtest/integration/test-bug-lp1347721-dpkg-ordering11
-rwxr-xr-xtest/integration/test-bug-lp1445239-download-loop28
-rwxr-xr-xtest/integration/test-bug-lp1550741-heisestate48
-rwxr-xr-xtest/integration/test-bug-lp1562402-nomark-removals-as-keep39
-rwxr-xr-xtest/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative58
-rwxr-xr-xtest/integration/test-bug-multiarch-upgrade29
-rwxr-xr-xtest/integration/test-cachecontainer-architecture-specification123
-rwxr-xr-xtest/integration/test-compressed-indexes180
-rwxr-xr-xtest/integration/test-conflicts-loop33
-rwxr-xr-xtest/integration/test-conflicts-real-multiarch-same50
-rwxr-xr-xtest/integration/test-crossgrades82
-rwxr-xr-xtest/integration/test-cve-2013-1051-InRelease-parsing71
-rwxr-xr-xtest/integration/test-cve-2018-0501-mirror-alternatives31
-rwxr-xr-xtest/integration/test-cve-2019-3462-Release.gpg-payload43
-rwxr-xr-xtest/integration/test-cve-2019-3462-dequote-injection66
-rwxr-xr-xtest/integration/test-cve-2020-2735025
-rwxr-xr-xtest/integration/test-different-methods-for-same-source35
-rwxr-xr-xtest/integration/test-disappearing-packages92
-rwxr-xr-xtest/integration/test-dpkg-assert-multi-arch104
-rwxr-xr-xtest/integration/test-dpkg-normalization44
-rwxr-xr-xtest/integration/test-dpkg-path35
-rwxr-xr-xtest/integration/test-essential-force-loopbreak54
-rwxr-xr-xtest/integration/test-external-dependency-solver-protocol294
-rwxr-xr-xtest/integration/test-external-installation-planner-protocol93
-rwxr-xr-xtest/integration/test-failing-maintainer-scripts91
-rwxr-xr-xtest/integration/test-frontend-lock80
-rwxr-xr-xtest/integration/test-github-111-invalid-armember88
-rwxr-xr-xtest/integration/test-github-23-too-long-dependency-line17
-rwxr-xr-xtest/integration/test-handle-redirect-as-used-mirror-change94
-rwxr-xr-xtest/integration/test-handling-broken-orgroups108
-rwxr-xr-xtest/integration/test-hashsum-verification82
-rwxr-xr-xtest/integration/test-http-pipeline-messup56
-rwxr-xr-xtest/integration/test-ignore-provides-if-versioned-breaks150
-rwxr-xr-xtest/integration/test-ignore-provides-if-versioned-conflicts150
-rwxr-xr-xtest/integration/test-implicit-conflicts-real-not-virtual56
-rwxr-xr-xtest/integration/test-kernel-helper-autoremove181
-rwxr-xr-xtest/integration/test-method-connect13
-rwxr-xr-xtest/integration/test-method-gpgv185
-rwxr-xr-xtest/integration/test-method-mirror255
-rwxr-xr-xtest/integration/test-method-rred197
-rwxr-xr-xtest/integration/test-multiarch-allowed302
-rwxr-xr-xtest/integration/test-multiarch-foreign287
-rwxr-xr-xtest/integration/test-no-fds-leaked-to-maintainer-scripts179
-rwxr-xr-xtest/integration/test-package-reinstallation23
-rwxr-xr-xtest/integration/test-packages-require-authorization61
-rwxr-xr-xtest/integration/test-parse-all-archs-into-cache93
-rwxr-xr-xtest/integration/test-partial-file-support157
-rwxr-xr-xtest/integration/test-pdiff-usage417
-rwxr-xr-xtest/integration/test-pin-non-existent-package75
-rwxr-xr-xtest/integration/test-policy-pinning433
-rwxr-xr-xtest/integration/test-prefer-higher-priority-providers106
-rwxr-xr-xtest/integration/test-prefer-native-architecture-over-higher-priority25
-rwxr-xr-xtest/integration/test-prevent-markinstall-multiarch-same-versionscrew130
-rwxr-xr-xtest/integration/test-provides-gone-with-upgrade27
-rwxr-xr-xtest/integration/test-release-candidate-switching443
-rwxr-xr-xtest/integration/test-releasefile-date46
-rwxr-xr-xtest/integration/test-releasefile-date-older104
-rwxr-xr-xtest/integration/test-releasefile-valid-until57
-rwxr-xr-xtest/integration/test-releasefile-verification505
-rwxr-xr-xtest/integration/test-releasefile-verification-noflat25
-rwxr-xr-xtest/integration/test-resolve-by-keep-new-recommends21
-rwxr-xr-xtest/integration/test-security-no-remote-status30
-rwxr-xr-xtest/integration/test-signed-by-option33
-rwxr-xr-xtest/integration/test-sourceslist-arch-plusminus-options94
-rwxr-xr-xtest/integration/test-sourceslist-lang-plusminus-options88
-rwxr-xr-xtest/integration/test-sourceslist-target-plusminus-options128
-rwxr-xr-xtest/integration/test-sourceslist-trusted-options218
-rwxr-xr-xtest/integration/test-specific-architecture-dependencies324
-rwxr-xr-xtest/integration/test-srcrecord35
-rwxr-xr-xtest/integration/test-suggest-installed-multiarch-silbing79
-rwxr-xr-xtest/integration/test-ubuntu-bug-1078697-missing-source-hashes38
-rwxr-xr-xtest/integration/test-ubuntu-bug-1098738-apt-get-source-md5sum444
-rwxr-xr-xtest/integration/test-ubuntu-bug-1130419-prefer-installed-ma-same-siblings104
-rwxr-xr-xtest/integration/test-ubuntu-bug-1304403-obsolete-priority-standard50
-rwxr-xr-xtest/integration/test-ubuntu-bug-1549819-empty-arch-list13
-rwxr-xr-xtest/integration/test-ubuntu-bug-1651923-requote-https-uri19
-rwxr-xr-xtest/integration/test-ubuntu-bug-346386-apt-get-update-paywall102
-rwxr-xr-xtest/integration/test-ubuntu-bug-365611-long-package-names15
-rwxr-xr-xtest/integration/test-ubuntu-bug-61499359
-rwxr-xr-xtest/integration/test-ubuntu-bug-761175-remove-purge88
-rwxr-xr-xtest/integration/test-ubuntu-bug-784473-InRelease-one-message-only36
-rwxr-xr-xtest/integration/test-ubuntu-bug-802901-multiarch-early-remove24
-rwxr-xr-xtest/integration/test-ubuntu-bug-806274-install-suggests81
-rwxr-xr-xtest/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first45
-rwxr-xr-xtest/integration/test-ubuntu-bug-859188-multiarch-reinstall27
-rwxr-xr-xtest/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering22
-rwxr-xr-xtest/integration/test-unpack-different-version-unpacked121
-rwxr-xr-xtest/integration/test-very-tight-loop-configure-with-unpacking-new-packages63
-rwxr-xr-xtest/integration/test-xorg-break-providers45
-rw-r--r--test/interactive-helper/CMakeLists.txt17
-rw-r--r--test/interactive-helper/aptdropprivs.cc27
-rw-r--r--test/interactive-helper/aptwebserver.cc1083
-rw-r--r--test/interactive-helper/createdeb-cve-2020-27350.cc325
-rw-r--r--test/interactive-helper/extract-control.cc45
-rw-r--r--test/interactive-helper/libnoprofile.c44
-rw-r--r--test/interactive-helper/mthdcat.cc22
-rw-r--r--test/interactive-helper/networkless-install-fixes/README5
-rw-r--r--test/interactive-helper/networkless-install-fixes/sources.test.list25
-rwxr-xr-xtest/interactive-helper/networkless-install-fixes/test.sh25
-rw-r--r--test/interactive-helper/rpmver.cc118
-rw-r--r--test/interactive-helper/teestream.h62
-rw-r--r--test/interactive-helper/test_fileutl.cc44
-rw-r--r--test/interactive-helper/test_udevcdrom.cc23
-rw-r--r--test/interactive-helper/testdeb.cc51
-rw-r--r--test/libapt/CMakeLists.txt44
-rw-r--r--test/libapt/acqprogress_test.cc178
-rwxr-xr-xtest/libapt/apt-proxy-script9
-rw-r--r--test/libapt/authconf_test.cc223
-rw-r--r--test/libapt/cachefilter_test.cc119
-rw-r--r--test/libapt/cdrom_test.cc114
-rw-r--r--test/libapt/cdromfindpackages_test.cc125
-rw-r--r--test/libapt/commandline_test.cc238
-rw-r--r--test/libapt/compareversion_test.cc182
-rw-r--r--test/libapt/configuration_test.cc234
-rw-r--r--test/libapt/extracttar_test.cc41
-rw-r--r--test/libapt/file-helpers.cc83
-rw-r--r--test/libapt/file-helpers.h29
-rw-r--r--test/libapt/fileutl_test.cc408
-rw-r--r--test/libapt/getarchitectures_test.cc77
-rw-r--r--test/libapt/getlanguages_test.cc241
-rw-r--r--test/libapt/getlistoffilesindir_test.cc114
-rw-r--r--test/libapt/globalerror_test.cc169
-rw-r--r--test/libapt/gtest_runner.cc26
-rw-r--r--test/libapt/hashsums_test.cc392
-rw-r--r--test/libapt/indexcopytosourcelist_test.cc109
-rw-r--r--test/libapt/install_progress_test.cc25
-rw-r--r--test/libapt/openmaybeclearsignedfile_test.cc485
-rw-r--r--test/libapt/parsedepends_test.cc280
-rw-r--r--test/libapt/priority_test.cc16
-rw-r--r--test/libapt/sourcelist_test.cc39
-rw-r--r--test/libapt/srvrecs_test.cc85
-rw-r--r--test/libapt/stringview_test.cc90
-rw-r--r--test/libapt/strutil_test.cc363
-rw-r--r--test/libapt/tagfile_test.cc287
-rw-r--r--test/libapt/tagsection_test.cc270
-rw-r--r--test/libapt/teestream_test.cc39
-rw-r--r--test/libapt/uri_test.cc216
-rwxr-xr-xtest/thread-safety/not-thread-safe.sh7
-rw-r--r--test/thread-safety/thread-check-internal.txt3
-rw-r--r--test/thread-safety/thread-check.txt91
-rw-r--r--triehash/.travis.yml14
-rw-r--r--triehash/LICENSE.md17
-rw-r--r--triehash/README.md58
-rw-r--r--triehash/tests/framework.sh84
-rwxr-xr-xtriehash/tests/run-tests.sh22
-rwxr-xr-xtriehash/tests/test-basic245
-rwxr-xr-xtriehash/tests/test-case-insensitive109
-rwxr-xr-xtriehash/tests/test-enum-include-name-flags129
-rwxr-xr-xtriehash/tests/test-multi-byte-level427
-rwxr-xr-xtriehash/triehash.pl691
-rw-r--r--vendor/CMakeLists.txt37
-rw-r--r--vendor/README72
-rw-r--r--vendor/blankon/apt-vendor.ent17
-rw-r--r--vendor/blankon/sources.list.in10
-rw-r--r--vendor/debian/apt-vendor.ent19
-rw-r--r--vendor/debian/sources.list.in7
-rwxr-xr-xvendor/getinfo83
-rw-r--r--vendor/raspbian/apt-vendor.ent13
-rw-r--r--vendor/raspbian/sources.list.in6
-rw-r--r--vendor/steamos/apt-vendor.ent15
-rw-r--r--vendor/steamos/sources.list.in3
-rw-r--r--vendor/ubuntu/apt-vendor.ent20
-rw-r--r--vendor/ubuntu/apt.conf-01-vendor-ubuntu1
-rw-r--r--vendor/ubuntu/sources.list.in10
782 files changed, 470759 insertions, 0 deletions
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..c2989f8
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,25 @@
+Language: Cpp
+# BasedOnStyle
+
+TabWidth: 8
+UseTab: Always
+IndentWidth: 3
+ContinuationIndentWidth: 3
+ColumnLimit: 0
+BreakBeforeBraces: Allman
+AccessModifierOffset: 0
+IncludeCategories:
+ - Regex: 'apti18n.h'
+ Priority: 9999
+ - Regex: 'apt-[^/]*/'
+ Priority: 20
+ - Regex: '^"'
+ Priority: 10
+ - Regex: 'config.h'
+ Priority: 0
+ - Regex: '(zlib|bzlib|lzma|lz4frame|gtest/gtest|db|gnutls/.*)\.h'
+ Priority: 30
+ - Regex: '\.h'
+ Priority: 100
+ - Regex: '.*'
+ Priority: 99
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..2126c3d
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,36 @@
+image: debian:buster
+variables:
+ DEBIAN_FRONTEND: noninteractive
+
+test as root:
+ stage: test
+ script:
+ - adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000
+ - rm -f /etc/dpkg/dpkg.cfg.d/excludes
+ - apt-get update
+ - apt-get install -qq build-essential expect gcovr sudo
+ - chmod -R o+rwX $PWD
+ - ./prepare-release travis-ci
+ - sudo -u travis mkdir build
+ - sudo -u travis env -C build cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja ..
+ - sudo -u travis ninja -C build
+ - CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test
+ - unbuffer ./test/integration/run-tests -q -j 4
+ - gcovr
+
+test as user:
+ stage: test
+ script:
+ - adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000
+ - rm -f /etc/dpkg/dpkg.cfg.d/excludes
+ - apt-get update
+ - apt-get install -qq build-essential expect gcovr sudo
+ - chmod 755 /root
+ - chmod -R o+rwX $PWD
+ - ./prepare-release travis-ci
+ - sudo -u travis mkdir build
+ - sudo -u travis env -C build cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja ..
+ - sudo -u travis ninja -C build
+ - sudo -u travis CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test
+ - sudo -u travis unbuffer ./test/integration/run-tests -q -j 4
+ - sudo -u travis gcovr
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..c010e13
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,23 @@
+language: cpp
+cache: ccache
+sudo: required
+services:
+ - docker
+env:
+ global:
+ - DEBIAN_FRONTEND=noninteractive
+ matrix:
+ - USER=travis CMAKE_FLAGS=
+ - USER=root CMAKE_FLAGS=-DWITH_DOC=OFF
+install:
+ - sed -i -e "s#1000#$(id -u)#g" Dockerfile
+ - docker build --tag=apt-ci .
+before_script:
+ - docker run --rm -w $PWD -v $HOME/.ccache:$HOME/.ccache -v $PWD:$PWD --user=travis apt-ci sh -e -c "mkdir build && cd build && env PATH=/usr/lib/ccache:\$PATH cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja $CMAKE_FLAGS .."
+ - docker run --rm -w $PWD -v $HOME/.ccache:$HOME/.ccache -v $PWD:$PWD --user=travis apt-ci ninja -C build
+script:
+ - docker run --rm -w $PWD -v $PWD:$PWD --user=travis apt-ci env CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test
+ - docker run --rm -w $PWD -v $PWD:$PWD --user=travis apt-ci env DESTDIR=$PWD/rootdir chronic ninja -C build install
+ - docker run --rm -w $PWD -v $PWD:$PWD --user=$USER --tmpfs /tmp:suid,exec apt-ci unbuffer ./test/integration/run-tests -qq -j 4
+after_script:
+ - docker run --rm -w $PWD/build -v $PWD:$PWD --user=$USER `bash <(curl -s https://codecov.io/env)` apt-ci bash -c 'bash <(curl -s https://codecov.io/bash)'
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..cce31e6
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,63 @@
+The project contributors:
+
+Michael Vogt <mvo@debian.org>
+- Development, bug fixes
+
+David Kalnischkies <kalnischkies+debian@gmail.com>
+- Development, bug fixes
+
+Julian Andres Klode
+- Development, bug fixes
+
+Past Contributors:
+
+Robert Collins <robert.collins@canonical.com>
+- Change the package index Info methods to allow apt-cache policy to be useful
+ when using several different archives on the same host.
+
+Christian Perrier <bubulle@debian.org>
+- Translations hero/coordinator
+
+Eugene V. Lyubimkin
+- Development, bug fixes
+
+Otavio Salvador
+- Development, bug fixes
+
+Luca Bruno
+- Development, bug fixes
+
+CVS:jgg Jason Gunthorpe <jgg@debian.org>
+- The Mad Cow incarnate
+
+CVS:mdz Matt Zimmerman <mdz@debian.org>
+- Ongoing maintenance and coordination of development
+
+CVS:piefel Michael Piefel <piefel@debian.org>
+- i18n and l10n
+
+CVS:che Ben Gertzfield <che@debian.org>
+- Packaging and Releases
+
+CVS:bod Brendan O'Dea <bod@debian.org>
+- Perl Bindings
+
+CVS:tausq Randolph Chung <tausq@debian.org>
+- Patches, Fixes, Debugging, GUIs and Releases
+
+Isaac Jones <ijones@syntaxpolice.org> and Colin Walters <walters@debian.org>
+ Initial implementation of authentication support (Release.gpg)
+
+Brian White <bcwhite@verisim.com> - Project originator
+Tom Lees <tom@lpsg.demon.co.uk> - DPKG documentation and ideas
+Behan Webster <behanw@verisim.com> - Original GUI design
+Scott Ellis <storm@gate.net> - Original packaging and beta releases
+Branden Robinson <branden@purdue.edu> - Man Page Documentation
+Manoj Srivastava <srivasta@datasync.com> - 1st Generation FTP method and
+ dselect setup script
+Adam Heath <doogie@debian.org> - 2nd Generation FTP method author
+Ben Collins <bcollins@debian.org> - Initial RSH method
+Many other bug reports through the Debian Bug system
+
+NOTE: The ChangeLog generator will parse for names and email addresses. The
+'CVS:<name>' tag should indicate who this pair refers to.
diff --git a/CMake/CheckCxxTarget.cmake b/CMake/CheckCxxTarget.cmake
new file mode 100644
index 0000000..373c0be
--- /dev/null
+++ b/CMake/CheckCxxTarget.cmake
@@ -0,0 +1,35 @@
+# CMake support for target-based function multiversioning
+#
+# Copyright (C) 2019 Canonical Ltd
+#
+# Author: Julian Andres Klode <jak@debian.org>.
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
+function(check_cxx_target var target code)
+ check_cxx_source_compiles(
+ "
+ __attribute__((target(\"${target}\"))) static int foo() { ${code} return 1; }
+ __attribute__((target(\"default\"))) static int foo() { ${code} return 0; }
+ int main() { return foo(); }
+ " ${var})
+endfunction()
diff --git a/CMake/Documentation.cmake b/CMake/Documentation.cmake
new file mode 100644
index 0000000..d8a2d2c
--- /dev/null
+++ b/CMake/Documentation.cmake
@@ -0,0 +1,328 @@
+# po4a/docbook documentation support for CMake
+# - see documentation of add_docbook()
+#
+# Copyright (C) 2016 Julian Andres Klode <jak@debian.org>.
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
+find_path(DOCBOOK_XSL manpages/docbook.xsl
+ # Debian
+ /usr/share/xml/docbook/stylesheet/docbook-xsl
+ /usr/share/xml/docbook/stylesheet/nwalsh
+ # OpenSUSE
+ /usr/share/xml/docbook/stylesheet/nwalsh/current
+ # Arch
+ /usr/share/xml/docbook/xsl-stylesheets
+ # Fedora
+ /usr/share/sgml/docbook/xsl-stylesheets
+ # Fink
+ ${CMAKE_INSTALL_PREFIX}/share/xml/xsl/docbook-xsl
+ # FreeBSD
+ ${CMAKE_INSTALL_PREFIX}/share/xsl/docbook/
+ NO_DEFAULT_PATH)
+
+if(NOT DOCBOOK_XSL)
+ message(FATAL_ERROR "Could not find docbook xsl")
+endif()
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docbook-text-style.xsl.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/docbook-text-style.xsl)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docbook-html-style.xsl.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/docbook-html-style.xsl)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/manpage-style.xsl.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/manpage-style.xsl)
+
+
+# Split up a string of the form DOCUMENT[.DOCUMENT][.LANGUAGE][.SECTION].EXTENSION
+#
+# There might be up to two parts in the document name. The language must be
+# a two char language code like de, or a 5 char code of the form de_DE.
+function(po4a_components doc lang sec ext translated_full_document)
+ get_filename_component(name ${translated_full_document} NAME)
+ string(REPLACE "." ";" name "${name}") # Make it a list
+
+ list(GET name 0 _doc) # First element is always the document
+ list(GET name 1 _lang) # Second *might* be a language
+ list(GET name -2 _sec) # Second-last *might* be a section
+ list(GET name -1 _ext) # Last element is always the file type
+
+ # If the language code is neither a file type, nor a section, nor a language
+ # assume it is part of the file name and use the next component as the lang.
+ if(_lang AND NOT _lang MATCHES "^(xml|dbk|[0-9]|[a-z][a-z]|[a-z][a-z]_[A-Z][A-Z])$")
+ set(_doc "${_doc}.${_lang}")
+ list(GET name 2 _lang)
+ endif()
+ # If no language is present, we get a section; both not present => type
+ if(_lang MATCHES "xml|dbk|[0-9]")
+ set(_lang "")
+ endif()
+ if(NOT _sec MATCHES "^[0-9]$") # A (manpage) section must be a number
+ set(_sec "")
+ endif()
+
+ set(${doc} ${_doc} PARENT_SCOPE)
+ set(${lang} ${_lang} PARENT_SCOPE)
+ set(${sec} ${_sec} PARENT_SCOPE)
+ set(${ext} ${_ext} PARENT_SCOPE)
+endfunction()
+
+
+# Process one document
+function(po4a_one stamp_out out full_document language deps)
+ path_join(full_path "${CMAKE_CURRENT_SOURCE_DIR}" "${full_document}")
+ if (full_document MATCHES "\.ent$")
+ set(dest "${language}/${full_document}")
+ set(full_dest "${dest}")
+ else()
+ po4a_components(document _ section ext "${full_document}")
+
+ # Calculate target file name
+ set(dest "${language}/${document}.${language}")
+ if(section)
+ set(dest "${dest}.${section}")
+ endif()
+ set(full_dest "${dest}.${ext}")
+ endif()
+
+ # po4a might drop files not translated enough, so build a stamp file
+ set(stamp ${CMAKE_CURRENT_BINARY_DIR}/${dest}.po4a-stamp)
+ add_custom_command(
+ OUTPUT ${stamp}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${language}
+ COMMAND po4a --previous --no-backups
+ --package-name='${PROJECT_NAME}-doc'
+ --package-version='${PACKAGE_VERSION}'
+ --msgid-bugs-address='${PACKAGE_MAIL}'
+ --translate-only ${full_dest}
+ --srcdir ${CMAKE_CURRENT_SOURCE_DIR}
+ --destdir ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/po4a.conf
+ COMMAND ${CMAKE_COMMAND} -E touch ${stamp}
+ COMMENT "Generating ${full_dest} (or dropping it)"
+ DEPENDS ${full_document} ${deps} po/${language}.po
+ )
+ # Return result
+ set(${stamp_out} ${stamp} PARENT_SCOPE)
+ set(${out} ${CMAKE_CURRENT_BINARY_DIR}/${full_dest} PARENT_SCOPE)
+endfunction()
+
+function(xsltproc_one)
+ set(generated "")
+ set(options HTML TEXT MANPAGE)
+ set(oneValueArgs STAMP STAMP_OUT FULL_DOCUMENT)
+ set(multiValueArgs INSTALL DEPENDS)
+ cmake_parse_arguments(DOC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ po4a_components(document language section ext "${DOC_FULL_DOCUMENT}")
+
+ # Default parameters
+ set(params
+ --nonet
+ --xinclude
+ --stringparam chunk.quietly yes
+ --stringparam man.output.quietly yes
+ --path ${PROJECT_SOURCE_DIR}/vendor/${CURRENT_VENDOR}/
+ --path ${CMAKE_CURRENT_SOURCE_DIR}/
+ )
+
+ # Parameters if localized
+ if(language)
+ list(APPEND params -stringparam l10n.gentext.default.language ${language})
+ endif()
+
+ path_join(full_input_path ${CMAKE_CURRENT_SOURCE_DIR} ${DOC_FULL_DOCUMENT})
+
+ if (DOC_MANPAGE)
+ if (language)
+ set(manpage_output "${CMAKE_CURRENT_BINARY_DIR}/${language}/${document}.${section}")
+ else()
+ set(manpage_output "${CMAKE_CURRENT_BINARY_DIR}/${document}.${section}")
+ endif()
+ set(manpage_stylesheet "${CMAKE_CURRENT_BINARY_DIR}/manpage-style.xsl")
+ set(manpage_params)
+
+ install(FILES ${manpage_output}
+ DESTINATION ${CMAKE_INSTALL_MANDIR}/${language}/man${section}
+ OPTIONAL)
+ endif()
+ if (DOC_HTML)
+ if (language)
+ set(html_output "${CMAKE_CURRENT_BINARY_DIR}/${language}/${document}.${language}.html")
+ else()
+ set(html_output "${CMAKE_CURRENT_BINARY_DIR}/${document}.html")
+ endif()
+ set(html_params --stringparam base.dir ${html_output})
+ set(html_stylesheet "${CMAKE_CURRENT_BINARY_DIR}/docbook-html-style.xsl")
+ install(DIRECTORY ${html_output}
+ DESTINATION ${DOC_INSTALL}
+ OPTIONAL)
+
+ endif()
+ if (DOC_TEXT)
+ if (language)
+ set(text_output "${CMAKE_CURRENT_BINARY_DIR}/${language}/${document}.${language}.text")
+ else()
+ set(text_output "${CMAKE_CURRENT_BINARY_DIR}/${document}.text")
+ endif()
+ set(text_params --stringparam base.dir ${text_output})
+ set(text_stylesheet "${CMAKE_CURRENT_BINARY_DIR}/docbook-text-style.xsl")
+
+ file(RELATIVE_PATH text_output_relative ${CMAKE_CURRENT_BINARY_DIR} ${text_output})
+
+ add_custom_command(OUTPUT ${text_output}.w3m-stamp
+ COMMAND ${PROJECT_SOURCE_DIR}/CMake/run_if_exists.sh
+ --stdout ${text_output}
+ ${text_output}.html
+ env LC_ALL=C.UTF-8 w3m -cols 78 -dump
+ -o display_charset=UTF-8
+ -no-graph -T text/html ${text_output}.html
+ COMMAND ${CMAKE_COMMAND} -E touch ${text_output}.w3m-stamp
+ COMMENT "Generating ${text_output_relative} (if not dropped by po4a)"
+ DEPENDS "${text_output}.html.xsltproc-stamp"
+ )
+ list(APPEND generated ${text_output}.w3m-stamp)
+
+ install(FILES ${text_output}
+ DESTINATION ${DOC_INSTALL}
+ OPTIONAL)
+ set(text_output "${text_output}.html")
+ endif()
+
+ foreach(type in manpage html text)
+ if (NOT ${type}_output)
+ continue()
+ endif()
+
+ set(output ${${type}_output})
+ set(stylesheet ${${type}_stylesheet})
+ set(type_params ${${type}_params})
+ file(RELATIVE_PATH output_relative ${CMAKE_CURRENT_BINARY_DIR} ${output})
+
+ add_custom_command(OUTPUT ${output}.xsltproc-stamp
+ COMMAND ${PROJECT_SOURCE_DIR}/CMake/run_if_exists.sh
+ ${full_input_path}
+ xsltproc ${params} ${type_params} -o ${output}
+ ${stylesheet}
+ ${full_input_path}
+ COMMAND ${CMAKE_COMMAND} -E touch ${output}.xsltproc-stamp
+ COMMENT "Generating ${output_relative} (if not dropped by po4a)"
+ DEPENDS ${DOC_STAMP} ${DOC_DEPENDS})
+
+ list(APPEND generated ${output}.xsltproc-stamp)
+ endforeach()
+
+ set(${DOC_STAMP_OUT} ${generated} PARENT_SCOPE)
+endfunction()
+
+
+# add_docbook(Name [ALL] [HTML] [TEXT] [MANPAGE]
+# [INSTALL install dir]
+# [DEPENDS depend ...]
+# [DOCUMENTS documents ...]
+# [LINGUAS lingua ...])
+#
+# Generate a target called name with all the documents being converted to
+# the chosen output formats and translated to the chosen languages using po4a.
+#
+# For the translation support, the po4a.conf must be written so that
+# translations for a document guide.xml are written to LANG/guide.LANG.xml,
+# and for a manual page man.5.xml to a file called LANG/man.LANG.5.xml.
+#
+# The guide and manual page names may also contain a second component separated
+# by a dot, it must however not be a valid language code.
+#
+# Note that po4a might chose not to generate a translated manual page for a
+# given language if the translation rate is not high enough. We deal with this
+# by creating stamp files.
+function(add_docbook target)
+ set(generated "")
+ set(options HTML TEXT MANPAGE ALL)
+ set(oneValueArgs)
+ set(multiValueArgs INSTALL DOCUMENTS LINGUAS TRANSLATED_ENTITIES DEPENDS)
+ cmake_parse_arguments(DOC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if (DOC_HTML)
+ list(APPEND formats HTML)
+ endif()
+ if (DOC_TEXT)
+ list(APPEND formats TEXT)
+ endif()
+ if (DOC_MANPAGE)
+ list(APPEND formats MANPAGE)
+ endif()
+
+ foreach(document ${DOC_TRANSLATED_ENTITIES})
+ foreach(lang ${DOC_LINGUAS})
+ po4a_one(po4a_stamp po4a_out ${document} "${lang}" "")
+ list(APPEND DOC_DEPENDS ${po4a_stamp})
+ endforeach()
+ endforeach()
+
+ foreach(document ${DOC_DOCUMENTS})
+ foreach(lang ${DOC_LINGUAS})
+ po4a_one(po4a_stamp po4a_out ${document} "${lang}" "${DOC_DEPENDS}")
+ xsltproc_one(STAMP_OUT xslt_stamp
+ STAMP ${po4a_stamp}
+ FULL_DOCUMENT ${po4a_out}
+ INSTALL ${DOC_INSTALL}
+ ${formats})
+
+ list(APPEND stamps ${xslt_stamp})
+ endforeach()
+ xsltproc_one(STAMP_OUT xslt_stamp
+ STAMP ${document}
+ FULL_DOCUMENT ${document}
+ INSTALL ${DOC_INSTALL}
+ ${formats})
+
+ list(APPEND stamps ${xslt_stamp})
+ endforeach()
+
+ if (DOC_ALL)
+ add_custom_target(${target} ALL DEPENDS ${stamps})
+ else()
+ add_custom_target(${target} DEPENDS ${stamps})
+ endif()
+endfunction()
+
+# Add an update-po4a target
+function(add_update_po4a target pot header)
+ set(WRITE_HEADER "")
+
+ if (header)
+ set(WRITE_HEADER
+ COMMAND sed -n "/^\#$/,$p" ${pot} > ${pot}.headerfree
+ COMMAND cat ${header} ${pot}.headerfree > ${pot}
+ COMMAND rm ${pot}.headerfree
+ )
+ endif()
+ add_custom_target(${target}
+ COMMAND po4a --previous --no-backups --force --no-translations
+ --msgmerge-opt --add-location=file
+ --porefs noline,wrap
+ --package-name=${PROJECT_NAME}-doc --package-version=${PACKAGE_VERSION}
+ --msgid-bugs-address=${PACKAGE_MAIL} po4a.conf
+ ${WRITE_HEADER}
+ VERBATIM
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+endfunction()
diff --git a/CMake/FindBerkeleyDB.cmake b/CMake/FindBerkeleyDB.cmake
new file mode 100644
index 0000000..34bc3b0
--- /dev/null
+++ b/CMake/FindBerkeleyDB.cmake
@@ -0,0 +1,59 @@
+# - Try to find Berkeley DB
+# Once done this will define
+#
+# BERKELEY_DB_FOUND - system has Berkeley DB
+# BERKELEY_DB_INCLUDE_DIRS - the Berkeley DB include directory
+# BERKELEY_DB_LIBRARIES - Link these to use Berkeley DB
+# BERKELEY_DB_DEFINITIONS - Compiler switches required for using Berkeley DB
+
+# Copyright (c) 2006, Alexander Dymo, <adymo@kdevelop.org>
+# Copyright (c) 2016, Julian Andres Klode <jak@debian.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+# We need NO_DEFAULT_PATH here, otherwise CMake helpfully picks up the wrong
+# db.h on BSD systems instead of the Berkeley DB one.
+find_path(BERKELEY_DB_INCLUDE_DIRS db.h
+ ${CMAKE_INSTALL_FULL_INCLUDEDIR}/db5
+ /usr/local/include/db5
+ /usr/include/db5
+
+ ${CMAKE_INSTALL_FULL_INCLUDEDIR}/db4
+ /usr/local/include/db4
+ /usr/include/db4
+
+ ${CMAKE_INSTALL_FULL_INCLUDEDIR}
+ /usr/local/include
+ /usr/include
+
+ NO_DEFAULT_PATH
+)
+
+find_library(BERKELEY_DB_LIBRARIES NAMES db db-5)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Berkeley "Could not find Berkeley DB >= 4.1" BERKELEY_DB_INCLUDE_DIRS BERKELEY_DB_LIBRARIES)
+# show the BERKELEY_DB_INCLUDE_DIRS and BERKELEY_DB_LIBRARIES variables only in the advanced view
+mark_as_advanced(BERKELEY_DB_INCLUDE_DIRS BERKELEY_DB_LIBRARIES)
diff --git a/CMake/FindIconv.cmake b/CMake/FindIconv.cmake
new file mode 100644
index 0000000..67046d9
--- /dev/null
+++ b/CMake/FindIconv.cmake
@@ -0,0 +1,20 @@
+find_path(ICONV_INCLUDE_DIR NAMES iconv.h)
+
+find_library(ICONV_LIBRARY NAMES iconv)
+if (ICONV_LIBRARY)
+ set(ICONV_SYMBOL_FOUND "${ICONV_LIBRARY}")
+else()
+ check_function_exists(iconv_open ICONV_SYMBOL_FOUND)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Iconv DEFAULT_MESSAGE ICONV_INCLUDE_DIR ICONV_SYMBOL_FOUND)
+
+if(ICONV_LIBRARY)
+ set(ICONV_LIBRARIES "${ICONV_LIBRARY}")
+else()
+ set(ICONV_LIBRARIES)
+endif()
+set(ICONV_INCLUDE_DIRS "${ICONV_INCLUDE_DIR}")
+
+mark_as_advanced(ICONV_LIBRARY ICONV_INCLUDE_DIR)
diff --git a/CMake/FindLFS.cmake b/CMake/FindLFS.cmake
new file mode 100644
index 0000000..e1fcf96
--- /dev/null
+++ b/CMake/FindLFS.cmake
@@ -0,0 +1,148 @@
+# CMake support for large files
+#
+# Copyright (C) 2016 Julian Andres Klode <jak@debian.org>.
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+#
+# This defines the following variables
+#
+# LFS_DEFINITIONS - List of definitions to pass to add_definitions()
+# LFS_COMPILE_OPTIONS - List of definitions to pass to add_compile_options()
+# LFS_LIBRARIES - List of libraries and linker flags
+# LFS_FOUND - If there is Large files support
+#
+
+include(CheckCXXSourceCompiles)
+include(FindPackageHandleStandardArgs)
+
+# Test program to check for LFS. Requires that off_t has at least 8 byte large
+set(_lfs_test_source
+ "
+ #include <sys/types.h>
+ typedef char my_static_assert[sizeof(off_t) >= 8 ? 1 : -1];
+ int main(void) { return 0; }
+ "
+)
+
+# Check if the given options are needed
+#
+# This appends to the variables _lfs_cppflags, _lfs_cflags, and _lfs_ldflags,
+# it also sets LFS_FOUND to 1 if it works.
+function(_lfs_check_compiler_option var options definitions libraries)
+ set(CMAKE_REQUIRED_QUIET 1)
+ set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} ${options})
+ set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${definitions})
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_DEFINITIONS} ${libraries})
+
+ message(STATUS "Looking for LFS support using ${options} ${definitions} ${libraries}")
+ check_cxx_source_compiles("${_lfs_test_source}" ${var})
+
+ if(${var})
+ message(STATUS "Looking for LFS support using ${options} ${definitions} ${libraries} - found")
+ set(_lfs_cppflags ${_lfs_cppflags} ${definitions} PARENT_SCOPE)
+ set(_lfs_cflags ${_lfs_cflags} ${options} PARENT_SCOPE)
+ set(_lfs_ldflags ${_lfs_ldflags} ${libraries} PARENT_SCOPE)
+ set(LFS_FOUND TRUE PARENT_SCOPE)
+ else()
+ message(STATUS "Looking for LFS support using ${options} ${definitions} ${libraries} - not found")
+ endif()
+endfunction()
+
+# Check for the availability of LFS.
+# The cases handled are:
+#
+# * Native LFS
+# * Output of getconf LFS_CFLAGS; getconf LFS_LIBS; getconf LFS_LDFLAGS
+# * Preprocessor flag -D_FILE_OFFSET_BITS=64
+# * Preprocessor flag -D_LARGE_FILES
+#
+function(_lfs_check)
+ set(_lfs_cflags)
+ set(_lfs_cppflags)
+ set(_lfs_ldflags)
+ set(_lfs_libs)
+ set(CMAKE_REQUIRED_QUIET 1)
+ message(STATUS "Looking for native LFS support")
+ check_cxx_source_compiles("${_lfs_test_source}" lfs_native)
+ if (lfs_native)
+ message(STATUS "Looking for native LFS support - found")
+ set(LFS_FOUND TRUE)
+ else()
+ message(STATUS "Looking for native LFS support - not found")
+ endif()
+
+ if (NOT LFS_FOUND)
+ # Check using getconf. If getconf fails, don't worry, the check in
+ # _lfs_check_compiler_option will fail as well.
+ execute_process(COMMAND getconf LFS_CFLAGS
+ OUTPUT_VARIABLE _lfs_cflags_raw
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET)
+ execute_process(COMMAND getconf LFS_LIBS
+ OUTPUT_VARIABLE _lfs_libs_tmp
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET)
+ execute_process(COMMAND getconf LFS_LDFLAGS
+ OUTPUT_VARIABLE _lfs_ldflags_tmp
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET)
+
+ separate_arguments(_lfs_cflags_raw)
+ separate_arguments(_lfs_ldflags_tmp)
+ separate_arguments(_lfs_libs_tmp)
+
+ # Move -D flags to the place they are supposed to be
+ foreach(flag ${_lfs_cflags_raw})
+ if (flag MATCHES "-D.*")
+ list(APPEND _lfs_cppflags_tmp ${flag})
+ else()
+ list(APPEND _lfs_cflags_tmp ${flag})
+ endif()
+ endforeach()
+
+ # Check if the flags we received (if any) produce working LFS support
+ _lfs_check_compiler_option(lfs_getconf_works
+ "${_lfs_cflags_tmp}"
+ "${_lfs_cppflags_tmp}"
+ "${_lfs_libs_tmp};${_lfs_ldflags_tmp}")
+ endif()
+
+ if(NOT LFS_FOUND) # IRIX stuff
+ _lfs_check_compiler_option(lfs_need_n32 "-n32" "" "")
+ endif()
+ if(NOT LFS_FOUND) # Linux and friends
+ _lfs_check_compiler_option(lfs_need_file_offset_bits "" "-D_FILE_OFFSET_BITS=64" "")
+ endif()
+ if(NOT LFS_FOUND) # AIX
+ _lfs_check_compiler_option(lfs_need_large_files "" "-D_LARGE_FILES=1" "")
+ endif()
+
+ set(LFS_DEFINITIONS ${_lfs_cppflags} CACHE STRING "Extra definitions for large file support")
+ set(LFS_COMPILE_OPTIONS ${_lfs_cflags} CACHE STRING "Extra definitions for large file support")
+ set(LFS_LIBRARIES ${_lfs_libs} ${_lfs_ldflags} CACHE STRING "Extra definitions for large file support")
+ set(LFS_FOUND ${LFS_FOUND} CACHE INTERNAL "Found LFS")
+endfunction()
+
+if (NOT LFS_FOUND)
+ _lfs_check()
+endif()
+
+find_package_handle_standard_args(LFS "Could not find LFS. Set LFS_DEFINITIONS, LFS_COMPILE_OPTIONS, LFS_LIBRARIES." LFS_FOUND)
diff --git a/CMake/FindLZ4.cmake b/CMake/FindLZ4.cmake
new file mode 100644
index 0000000..597f520
--- /dev/null
+++ b/CMake/FindLZ4.cmake
@@ -0,0 +1,25 @@
+# - Try to find LZ4
+# Once done, this will define
+#
+# LZ4_FOUND - system has LZ4
+# LZ4_INCLUDE_DIRS - the LZ4 include directories
+# LZ4_LIBRARIES - the LZ4 library
+find_package(PkgConfig)
+
+pkg_check_modules(LZ4_PKGCONF liblz4)
+
+find_path(LZ4_INCLUDE_DIRS
+ NAMES lz4frame.h
+ PATHS ${LZ4_PKGCONF_INCLUDE_DIRS}
+)
+
+
+find_library(LZ4_LIBRARIES
+ NAMES lz4
+ PATHS ${LZ4_PKGCONF_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LZ4 DEFAULT_MSG LZ4_INCLUDE_DIRS LZ4_LIBRARIES)
+
+mark_as_advanced(LZ4_INCLUDE_DIRS LZ4_LIBRARIES)
diff --git a/CMake/FindLZMA.cmake b/CMake/FindLZMA.cmake
new file mode 100644
index 0000000..6abc4fa
--- /dev/null
+++ b/CMake/FindLZMA.cmake
@@ -0,0 +1,25 @@
+# - Try to find LZMA
+# Once done, this will define
+#
+# LZMA_FOUND - system has LZMA
+# LZMA_INCLUDE_DIRS - the LZMA include directories
+# LZMA_LIBRARIES - the LZMA library
+find_package(PkgConfig)
+
+pkg_check_modules(LZMA_PKGCONF liblzma)
+
+find_path(LZMA_INCLUDE_DIRS
+ NAMES lzma.h
+ PATHS ${LZMA_PKGCONF_INCLUDE_DIRS}
+)
+
+
+find_library(LZMA_LIBRARIES
+ NAMES lzma
+ PATHS ${LZMA_PKGCONF_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LZMA DEFAULT_MSG LZMA_INCLUDE_DIRS LZMA_LIBRARIES)
+
+mark_as_advanced(LZMA_INCLUDE_DIRS LZMA_LIBRARIES)
diff --git a/CMake/FindSeccomp.cmake b/CMake/FindSeccomp.cmake
new file mode 100644
index 0000000..5cfd13a
--- /dev/null
+++ b/CMake/FindSeccomp.cmake
@@ -0,0 +1,25 @@
+# - Try to find SECCOMP
+# Once done, this will define
+#
+# SECCOMP_FOUND - system has SECCOMP
+# SECCOMP_INCLUDE_DIRS - the SECCOMP include directories
+# SECCOMP_LIBRARIES - the SECCOMP library
+find_package(PkgConfig)
+
+pkg_check_modules(SECCOMP_PKGCONF libseccomp)
+
+find_path(SECCOMP_INCLUDE_DIRS
+ NAMES seccomp.h
+ PATHS ${SECCOMP_PKGCONF_INCLUDE_DIRS}
+)
+
+
+find_library(SECCOMP_LIBRARIES
+ NAMES seccomp
+ PATHS ${SECCOMP_PKGCONF_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(SECCOMP DEFAULT_MSG SECCOMP_INCLUDE_DIRS SECCOMP_LIBRARIES)
+
+mark_as_advanced(SECCOMP_INCLUDE_DIRS SECCOMP_LIBRARIES)
diff --git a/CMake/FindSystemd.cmake b/CMake/FindSystemd.cmake
new file mode 100644
index 0000000..1c7a7de
--- /dev/null
+++ b/CMake/FindSystemd.cmake
@@ -0,0 +1,24 @@
+# - Try to find SYSTEMD
+# Once done, this will define
+#
+# SYSTEMD_FOUND - system has SYSTEMD
+# SYSTEMD_INCLUDE_DIRS - the SYSTEMD include directories
+# SYSTEMD_LIBRARIES - the SYSTEMD library
+find_package(PkgConfig)
+
+pkg_check_modules(SYSTEMD_PKGCONF libsystemd)
+
+find_path(SYSTEMD_INCLUDE_DIRS
+ NAMES systemd/sd-bus.h
+ PATHS ${SYSTEMD_PKGCONF_INCLUDE_DIRS}
+)
+
+find_library(SYSTEMD_LIBRARIES
+ NAMES systemd
+ PATHS ${SYSTEMD_PKGCONF_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Systemd DEFAULT_MSG SYSTEMD_INCLUDE_DIRS SYSTEMD_LIBRARIES)
+
+mark_as_advanced(SYSTEMD_INCLUDE_DIRS SYSTEMD_LIBRARIES)
diff --git a/CMake/FindUdev.cmake b/CMake/FindUdev.cmake
new file mode 100644
index 0000000..e416c43
--- /dev/null
+++ b/CMake/FindUdev.cmake
@@ -0,0 +1,25 @@
+# - Try to find UDEV
+# Once done, this will define
+#
+# UDEV_FOUND - system has UDEV
+# UDEV_INCLUDE_DIRS - the UDEV include directories
+# UDEV_LIBRARIES - the UDEV library
+find_package(PkgConfig)
+
+pkg_check_modules(UDEV_PKGCONF libudev)
+
+find_path(UDEV_INCLUDE_DIRS
+ NAMES libudev.h
+ PATHS ${UDEV_PKGCONF_INCLUDE_DIRS}
+)
+
+
+find_library(UDEV_LIBRARIES
+ NAMES udev
+ PATHS ${UDEV_PKGCONF_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Udev DEFAULT_MSG UDEV_INCLUDE_DIRS UDEV_LIBRARIES)
+
+mark_as_advanced(UDEV_INCLUDE_DIRS UDEV_LIBRARIES)
diff --git a/CMake/FindZstd.cmake b/CMake/FindZstd.cmake
new file mode 100644
index 0000000..6811804
--- /dev/null
+++ b/CMake/FindZstd.cmake
@@ -0,0 +1,25 @@
+# - Try to find ZSTD
+# Once done, this will define
+#
+# ZSTD_FOUND - system has ZSTD
+# ZSTD_INCLUDE_DIRS - the ZSTD include directories
+# ZSTD_LIBRARIES - the ZSTD library
+find_package(PkgConfig)
+
+pkg_check_modules(ZSTD_PKGCONF libzstd)
+
+find_path(ZSTD_INCLUDE_DIRS
+ NAMES zstd.h
+ PATHS ${ZSTD_PKGCONF_INCLUDE_DIRS}
+)
+
+
+find_library(ZSTD_LIBRARIES
+ NAMES zstd
+ PATHS ${ZSTD_PKGCONF_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(ZSTD DEFAULT_MSG ZSTD_INCLUDE_DIRS ZSTD_LIBRARIES)
+
+mark_as_advanced(ZSTD_INCLUDE_DIRS ZSTD_LIBRARIES)
diff --git a/CMake/Misc.cmake b/CMake/Misc.cmake
new file mode 100644
index 0000000..6ad0b94
--- /dev/null
+++ b/CMake/Misc.cmake
@@ -0,0 +1,101 @@
+include(CheckCXXCompilerFlag)
+
+# Flatten our header structure
+function(flatify target headers)
+ foreach(header ${headers})
+ get_filename_component(tgt ${header} NAME)
+ configure_file(${header} ${target}/${tgt} COPYONLY)
+ endforeach(header ${headers})
+endfunction()
+
+
+function(add_optional_compile_options flags)
+ foreach(flag ${flags})
+ check_cxx_compiler_flag(-${flag} have-compiler-flag:-${flag})
+ if (have-compiler-flag:-${flag})
+ add_compile_options("-${flag}")
+ endif()
+ endforeach()
+endfunction()
+
+# Substitute vendor references in a file
+function(add_vendor_file)
+ set(options)
+ set(oneValueArgs OUTPUT INPUT MODE)
+ set(multiValueArgs VARIABLES)
+ cmake_parse_arguments(AVF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ set(in ${CMAKE_CURRENT_SOURCE_DIR}/${AVF_INPUT})
+ set(out ${CMAKE_CURRENT_BINARY_DIR}/${AVF_OUTPUT})
+
+ add_custom_command(
+ OUTPUT ${out}
+ COMMAND ${CMAKE_COMMAND} -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
+ "-DVARS=${AVF_VARIABLES}"
+ -DCURRENT_VENDOR=${CURRENT_VENDOR}
+ -DIN=${in}
+ -DOUT=${out}
+ -P ${PROJECT_SOURCE_DIR}/CMake/vendor_substitute.cmake
+ COMMAND chmod ${AVF_MODE} ${out}
+ DEPENDS ${in}
+ ${PROJECT_SOURCE_DIR}/doc/apt-verbatim.ent
+ ${PROJECT_SOURCE_DIR}/vendor/${CURRENT_VENDOR}/apt-vendor.ent
+ ${PROJECT_SOURCE_DIR}/vendor/getinfo
+ ${PROJECT_SOURCE_DIR}/CMake/vendor_substitute.cmake
+ VERBATIM
+ )
+
+ # Would like to use ${AVF_OUTPUT} as target name, but then ninja gets
+ # cycles.
+ add_custom_target(vendor-${AVF_OUTPUT} ALL DEPENDS ${out})
+endfunction()
+
+# Add symbolic links to a file
+function(add_slaves destination master)
+ set(slaves "")
+ foreach(slave ${ARGN})
+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${slave}
+ COMMAND ${CMAKE_COMMAND} -E create_symlink ${master} ${CMAKE_CURRENT_BINARY_DIR}/${slave})
+ list(APPEND slaves ${CMAKE_CURRENT_BINARY_DIR}/${slave})
+ endforeach()
+
+ STRING(REPLACE "/" "-" master "${master}")
+ add_custom_target(${master}-slaves ALL DEPENDS ${slaves})
+ install(FILES ${slaves} DESTINATION ${destination})
+endfunction()
+
+# Generates a simple version script versioning everything with current SOVERSION
+function(add_version_script target)
+ get_target_property(soversion ${target} SOVERSION)
+ set(script "${CMAKE_CURRENT_BINARY_DIR}/${target}.versionscript")
+ string(REPLACE "-" "" name "${target}_${soversion}")
+ string(TOUPPER "${name}" name)
+ add_custom_command(OUTPUT "${script}"
+ COMMAND echo "${name} {global: *; };" > "${script}"
+ VERBATIM )
+ add_custom_target(${target}-versionscript DEPENDS "${script}")
+ target_link_libraries(${target} PRIVATE -Wl,-version-script="${script}")
+ add_dependencies(${target} ${target}-versionscript)
+endfunction()
+
+function(path_join out path1 path2)
+ string(SUBSTRING ${path2} 0 1 init_char)
+ if ("${init_char}" STREQUAL "/")
+ set(${out} "${path2}" PARENT_SCOPE)
+ else()
+ set(${out} "${path1}/${path2}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+# install_empty_directories(path ...)
+#
+# Creates empty directories in the install destination dir. Paths may be
+# absolute or relative; in the latter case, the value of CMAKE_INSTALL_PREFIX
+# is prepended.
+function(install_empty_directories)
+ foreach(path ${ARGN})
+ path_join(full_path "${CMAKE_INSTALL_PREFIX}" "${path}")
+ INSTALL(CODE "MESSAGE(STATUS \"Creating directory: \$ENV{DESTDIR}${full_path}\")"
+ CODE "FILE(MAKE_DIRECTORY \$ENV{DESTDIR}${full_path})")
+ endforeach()
+endfunction()
diff --git a/CMake/Translations.cmake b/CMake/Translations.cmake
new file mode 100644
index 0000000..54a635a
--- /dev/null
+++ b/CMake/Translations.cmake
@@ -0,0 +1,185 @@
+# translations.cmake - Translations using APT's translation system.
+# Copyright (C) 2009, 2016 Julian Andres Klode <jak@debian.org>
+
+function(apt_add_translation_domain)
+ set(options)
+ set(oneValueArgs DOMAIN)
+ set(multiValueArgs TARGETS SCRIPTS EXCLUDE_LANGUAGES)
+ cmake_parse_arguments(NLS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+ # Build the list of source files of the target
+ set(files "")
+ set(abs_files "")
+ set(scripts "")
+ set(abs_scripts "")
+ set(mofiles)
+ set(targets ${NLS_TARGETS})
+ set(domain ${NLS_DOMAIN})
+ set(xgettext_params
+ --add-comments
+ --foreign
+ --package-name=${PROJECT_NAME}
+ --package-version=${PACKAGE_VERSION}
+ --msgid-bugs-address=${PACKAGE_MAIL}
+ )
+ foreach(source ${NLS_SCRIPTS})
+ path_join(file "${CMAKE_CURRENT_SOURCE_DIR}" "${source}")
+ file(RELATIVE_PATH relfile ${PROJECT_SOURCE_DIR} ${file})
+ list(APPEND scripts ${relfile})
+ list(APPEND abs_scripts ${file})
+ endforeach()
+ foreach(target ${targets})
+ get_target_property(source_dir ${target} SOURCE_DIR)
+ get_target_property(sources ${target} SOURCES)
+ foreach(source ${sources})
+ if (source MATCHES TARGET_OBJECTS)
+ continue()
+ endif()
+ path_join(file "${source_dir}" "${source}")
+ file(RELATIVE_PATH relfile ${PROJECT_SOURCE_DIR} ${file})
+ set(files ${files} ${relfile})
+ set(abs_files ${abs_files} ${file})
+ endforeach()
+
+ target_compile_definitions(${target} PRIVATE -DAPT_DOMAIN="${domain}")
+ endforeach()
+
+ if("${scripts}" STREQUAL "")
+ set(sh_pot "/dev/null")
+ else()
+ set(sh_pot ${CMAKE_CURRENT_BINARY_DIR}/${domain}.sh.pot)
+ # Create the template for this specific sub-domain
+ add_custom_command (OUTPUT ${sh_pot}
+ COMMAND xgettext ${xgettext_params} -L Shell
+ -o ${sh_pot} ${scripts}
+ DEPENDS ${abs_scripts}
+ VERBATIM
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ )
+ endif()
+
+
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${domain}.c.pot
+ COMMAND xgettext ${xgettext_params} -k_ -kN_
+ --keyword=P_:1,2
+ -o ${CMAKE_CURRENT_BINARY_DIR}/${domain}.c.pot ${files}
+ DEPENDS ${abs_files}
+ VERBATIM
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ )
+
+ # We are building a ${domain}.pot with a header for launchpad, but we also
+ # build a ${domain.pot}-tmp as a byproduct. The msgfmt command than depend
+ # on the byproduct while their target depends on the output, so that msgfmt
+ # does not have to be rerun if nothing in the template changed.
+ #
+ # Make sure the .pot-tmp has no line numbers, to avoid useless rebuilding
+ # of .mo files.
+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot
+ BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot-tmp
+ COMMAND msgcomm --more-than=0 --omit-header --sort-by-file --add-location=file
+ ${sh_pot}
+ ${CMAKE_CURRENT_BINARY_DIR}/${domain}.c.pot
+ --output=${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot-tmp0
+ COMMAND msgcomm --more-than=0 --sort-by-file
+ ${sh_pot}
+ ${CMAKE_CURRENT_BINARY_DIR}/${domain}.c.pot
+ --output=${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot
+ COMMAND cmake -E copy_if_different
+ ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot-tmp0
+ ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot-tmp
+ DEPENDS ${sh_pot}
+ ${CMAKE_CURRENT_BINARY_DIR}/${domain}.c.pot
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ )
+
+ # We need a target to depend on otherwise, the msgmerge might not get called
+ # with the make generator
+ add_custom_target(nls-${domain}-template DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot)
+
+ # Build .mo files
+ file(GLOB translations "${PROJECT_SOURCE_DIR}/po/*.po")
+ list(SORT translations)
+ foreach(file ${translations})
+ get_filename_component(langcode ${file} NAME_WE)
+ if ("${langcode}" IN_LIST NLS_EXCLUDE_LANGUAGES)
+ continue()
+ endif()
+ set(outdir ${CMAKE_CURRENT_BINARY_DIR}/locale/${langcode}/LC_MESSAGES)
+ file(MAKE_DIRECTORY ${outdir})
+ # Command to merge and compile the messages. As explained in the custom
+ # command for msgcomm, this depends on byproduct to avoid reruns
+ add_custom_command(OUTPUT ${outdir}/${domain}.po
+ COMMAND msgmerge -qo ${outdir}/${domain}.po ${file} ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot-tmp
+ DEPENDS ${file} ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot-tmp
+ )
+ add_custom_command(OUTPUT ${outdir}/${domain}.mo
+ COMMAND msgfmt --statistics -o ${outdir}/${domain}.mo ${outdir}/${domain}.po
+ DEPENDS ${outdir}/${domain}.po
+ )
+
+ set(mofiles ${mofiles} ${outdir}/${domain}.mo)
+ install(FILES ${outdir}/${domain}.mo
+ DESTINATION "${CMAKE_INSTALL_LOCALEDIR}/${langcode}/LC_MESSAGES")
+ endforeach(file ${translations})
+
+ add_custom_target(nls-${domain} ALL DEPENDS ${mofiles} nls-${domain}-template)
+endfunction()
+
+# Usage: apt_add_update_po(output domain [domain ...])
+function(apt_add_update_po)
+ set(options)
+ set(oneValueArgs TEMPLATE)
+ set(multiValueArgs DOMAINS EXCLUDE_LANGUAGES)
+ cmake_parse_arguments(NLS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+ set(output ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_TEMPLATE}.pot)
+ foreach(domain ${NLS_DOMAINS})
+ list(APPEND potfiles ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot)
+ endforeach()
+
+ get_filename_component(master_name ${output} NAME_WE)
+ add_custom_target(nls-${master_name}
+ COMMAND msgcomm --sort-by-file --add-location=file
+ --more-than=0 --output=${output}
+ ${potfiles}
+ DEPENDS ${potfiles})
+
+ file(GLOB translations "${PROJECT_SOURCE_DIR}/po/*.po")
+ if (NOT TARGET update-po)
+ add_custom_target(update-po)
+ endif()
+ foreach(translation ${translations})
+ get_filename_component(langcode ${translation} NAME_WE)
+ if ("${langcode}" IN_LIST NLS_EXCLUDE_LANGUAGES)
+ continue()
+ endif()
+ add_custom_target(update-po-${langcode}
+ COMMAND msgmerge -q --previous --update --backup=none ${translation} ${output}
+ DEPENDS nls-${master_name}
+ )
+ add_dependencies(update-po update-po-${langcode})
+ endforeach()
+ add_dependencies(update-po nls-${master_name})
+endfunction()
+
+function(apt_add_po_statistics excluded)
+ add_custom_target(statistics)
+ file(GLOB translations "${PROJECT_SOURCE_DIR}/po/*.po")
+ foreach(translation ${translations})
+ get_filename_component(langcode ${translation} NAME_WE)
+ if ("${langcode}" IN_LIST excluded)
+ add_custom_command(
+ TARGET statistics PRE_BUILD
+ COMMAND printf "%-6s " "${langcode}:"
+ COMMAND echo "ignored"
+ VERBATIM
+ )
+ continue()
+ endif()
+ add_custom_command(
+ TARGET statistics PRE_BUILD
+ COMMAND printf "%-6s " "${langcode}:"
+ COMMAND msgfmt --statistics -o /dev/null ${translation}
+ VERBATIM
+ )
+ endforeach()
+endfunction()
diff --git a/CMake/apti18n.h.in b/CMake/apti18n.h.in
new file mode 100644
index 0000000..1929795
--- /dev/null
+++ b/CMake/apti18n.h.in
@@ -0,0 +1,29 @@
+// -*- mode: cpp; mode: fold -*-
+/* Internationalization macros for apt. This header should be included last
+ in each C file. */
+
+// Set by autoconf
+#cmakedefine USE_NLS
+
+#ifdef USE_NLS
+// apt will use the gettext implementation of the C library
+#include <libintl.h>
+#include <locale.h>
+# ifdef APT_DOMAIN
+# define _(x) dgettext(APT_DOMAIN,x)
+# define P_(msg,plural,n) dngettext(APT_DOMAIN,msg,plural,n)
+# else
+# define _(x) gettext(x)
+# define P_(msg,plural,n) ngettext(msg,plural,n)
+# endif
+# define N_(x) x
+#else
+// apt will not use any gettext
+# define setlocale(a, b)
+# define textdomain(a)
+# define bindtextdomain(a, b)
+# define _(x) x
+# define P_(msg,plural,n) (n == 1 ? msg : plural)
+# define N_(x) x
+# define dgettext(d, m) m
+#endif
diff --git a/CMake/config.h.in b/CMake/config.h.in
new file mode 100644
index 0000000..a9528cc
--- /dev/null
+++ b/CMake/config.h.in
@@ -0,0 +1,90 @@
+/* Define if your processor stores words with the most significant
+ byte first (like Motorola and SPARC, unlike Intel and VAX). */
+#cmakedefine WORDS_BIGENDIAN
+
+/* Define if we have the timegm() function */
+#cmakedefine HAVE_TIMEGM
+
+/* Define if we have the zlib library for gzip */
+#cmakedefine HAVE_ZLIB
+
+/* Define if we have the bz2 library for bzip2 */
+#cmakedefine HAVE_BZ2
+
+/* Define if we have the lzma library for lzma/xz */
+#cmakedefine HAVE_LZMA
+
+/* Define if we have the lz4 library for lz4 */
+#cmakedefine HAVE_LZ4
+
+/* Define if we have the zstd library for zst */
+#cmakedefine HAVE_ZSTD
+
+/* Define if we have the systemd library */
+#cmakedefine HAVE_SYSTEMD
+
+/* Define if we have the udev library */
+#cmakedefine HAVE_UDEV
+
+/* Define if we have the seccomp library */
+#cmakedefine HAVE_SECCOMP
+
+/* These two are used by the statvfs shim for glibc2.0 and bsd */
+/* Define if we have sys/vfs.h */
+#cmakedefine HAVE_VFS_H
+#cmakedefine HAVE_STRUCT_STATFS_F_TYPE
+
+/* Define if we have sys/mount.h */
+#cmakedefine HAVE_MOUNT_H
+
+/* Define if we have sys/endian.h */
+#cmakedefine HAVE_SYS_ENDIAN_H
+
+/* Define if we have machine/endian.h */
+#cmakedefine HAVE_MACHINE_ENDIAN_H
+
+/* Check for getresuid() function and similar ones */
+#cmakedefine HAVE_GETRESUID
+#cmakedefine HAVE_GETRESGID
+#cmakedefine HAVE_SETRESUID
+#cmakedefine HAVE_SETRESGID
+
+/* Check for ptsname_r() */
+#cmakedefine HAVE_PTSNAME_R
+
+/* Define the arch name string */
+#define COMMON_ARCH "${COMMON_ARCH}"
+
+/* The package name string */
+#define PACKAGE "${PACKAGE}"
+
+/* The version number string */
+#define PACKAGE_VERSION "${PACKAGE_VERSION}"
+
+/* The mail address to reach upstream */
+#define PACKAGE_MAIL "${PACKAGE_MAIL}"
+
+/* Various directories */
+#cmakedefine CMAKE_INSTALL_FULL_BINDIR "${CMAKE_INSTALL_FULL_BINDIR}"
+#cmakedefine STATE_DIR "${STATE_DIR}"
+#cmakedefine CACHE_DIR "${CACHE_DIR}"
+#cmakedefine LOG_DIR "${LOG_DIR}"
+#cmakedefine CONF_DIR "${CONF_DIR}"
+#cmakedefine LIBEXEC_DIR "${LIBEXEC_DIR}"
+#cmakedefine BIN_DIR "${BIN_DIR}"
+#cmakedefine DPKG_DATADIR "${DPKG_DATADIR}"
+
+/* Group of the root user */
+#cmakedefine ROOT_GROUP "${ROOT_GROUP}"
+
+/* defined if __builtin_ia32_crc32{s,d}i() exists in an sse4.2 target */
+#cmakedefine HAVE_FMV_SSE42_AND_CRC32
+#cmakedefine HAVE_FMV_SSE42_AND_CRC32DI
+
+#define APT_8_CLEANER_HEADERS
+#define APT_9_CLEANER_HEADERS
+#define APT_10_CLEANER_HEADERS
+#define APT_15_CLEANER_HEADERS
+
+/* unrolling is faster combined with an optimizing compiler */
+#define SHA2_UNROLL_TRANSFORM
diff --git a/CMake/endian.h.in b/CMake/endian.h.in
new file mode 100644
index 0000000..1d9198c
--- /dev/null
+++ b/CMake/endian.h.in
@@ -0,0 +1,9 @@
+#include <config.h>
+
+#ifdef HAVE_MACHINE_ENDIAN_H
+#include <machine/endian.h>
+#endif
+#ifdef HAVE_SYS_ENDIAN_H
+#include <sys/types.h>
+#include <sys/endian.h>
+#endif
diff --git a/CMake/run_if_exists.sh b/CMake/run_if_exists.sh
new file mode 100755
index 0000000..97edd4c
--- /dev/null
+++ b/CMake/run_if_exists.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+# Small helper for running a command
+out=""
+if [ "$1" = "--stdout" ]; then
+ out="$2"
+ shift 2
+fi
+
+if [ -e "$1" ]; then
+ shift
+ if [ "$out" ]; then
+ exec "$@" > $out
+ else
+ exec "$@"
+ fi
+fi
diff --git a/CMake/statvfs.h.in b/CMake/statvfs.h.in
new file mode 100644
index 0000000..d0ec238
--- /dev/null
+++ b/CMake/statvfs.h.in
@@ -0,0 +1,13 @@
+/* Compatibility for systems with out Single Unix Spec statvfs */
+#include <config.h>
+
+#ifdef HAVE_VFS_H
+#include <sys/vfs.h>
+#endif
+
+#ifdef HAVE_MOUNT_H
+#include <sys/param.h>
+#include <sys/mount.h>
+#endif
+
+#define statvfs statfs
diff --git a/CMake/vendor_substitute.cmake b/CMake/vendor_substitute.cmake
new file mode 100644
index 0000000..71449c9
--- /dev/null
+++ b/CMake/vendor_substitute.cmake
@@ -0,0 +1,8 @@
+file(READ ${IN} input)
+foreach(variable ${VARS})
+ execute_process(COMMAND ${PROJECT_SOURCE_DIR}/vendor/getinfo
+ --vendor ${CURRENT_VENDOR} ${variable}
+ OUTPUT_VARIABLE value OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE "&${variable};" "${value}" input "${input}")
+endforeach()
+file(WRITE ${OUT} "${input}")
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..bbc39dc
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,260 @@
+# Copyright (C) 2009, 2016 Julian Andres Klode <jak@debian.org>.
+# Licensed under the same terms as APT; i.e. GPL 2 or later.
+
+# set minimum version
+project(apt)
+cmake_minimum_required(VERSION 3.4.0)
+# Generic header locations
+include_directories(${PROJECT_BINARY_DIR}/include)
+
+
+enable_testing()
+
+option(WITH_DOC "Build documentation." ON)
+option(USE_NLS "Localisation support." ON)
+
+set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake")
+
+# Add coverage target
+set(CMAKE_CXX_FLAGS_COVERAGE "-g -fprofile-arcs -ftest-coverage")
+set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "-lgcov")
+set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "-lgcov")
+
+# Work around bug in GNUInstallDirs
+if (EXISTS "/etc/debian_version")
+ set(CMAKE_INSTALL_LIBEXECDIR "lib")
+endif()
+
+# Include stuff
+include(Misc)
+include(CheckIncludeFiles)
+include(CheckFunctionExists)
+include(CheckStructHasMember)
+include(GNUInstallDirs)
+include(TestBigEndian)
+find_package(Threads REQUIRED)
+find_package(LFS REQUIRED)
+find_package(Iconv REQUIRED)
+
+find_package(Perl REQUIRED)
+
+if(USE_NLS)
+ find_package(Intl REQUIRED)
+ link_libraries(${Intl_LIBRARIES})
+ include_directories(${Intl_INCLUDE_DIRS})
+endif()
+
+# Add large file support
+add_compile_options(${LFS_COMPILE_OPTIONS})
+add_definitions(${LFS_DEFINITIONS})
+link_libraries(${LFS_LIBRARIES})
+
+# Set compiler flags
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
+
+add_optional_compile_options(Wall)
+add_optional_compile_options(Wextra)
+add_optional_compile_options(Wcast-align)
+add_optional_compile_options(Wlogical-op)
+add_optional_compile_options(Wredundant-decls)
+add_optional_compile_options(Wmissing-declarations)
+add_optional_compile_options(Wunsafe-loop-optimizations)
+add_optional_compile_options(Wctor-dtor-privacy)
+add_optional_compile_options(Wdisabled-optimization)
+add_optional_compile_options(Winit-self)
+add_optional_compile_options(Wmissing-include-dirs)
+add_optional_compile_options(Wnoexcept)
+add_optional_compile_options(Wsign-promo)
+add_optional_compile_options(Wundef)
+add_optional_compile_options(Wdouble-promotion)
+
+# apt-ftparchive dependencies
+find_package(BerkeleyDB REQUIRED)
+if (BERKELEY_DB_FOUND)
+ set(HAVE_BDB 1)
+endif()
+
+find_package(GnuTLS REQUIRED)
+if (GNUTLS_FOUND)
+ set(HAVE_GNUTLS 1)
+endif()
+
+# (De)Compressor libraries
+find_package(ZLIB REQUIRED)
+if (ZLIB_FOUND)
+ set(HAVE_ZLIB 1)
+endif()
+
+
+find_package(BZip2 REQUIRED)
+if (BZIP2_FOUND)
+ set(HAVE_BZ2 1)
+endif()
+
+find_package(LZMA REQUIRED)
+if (LZMA_FOUND)
+ set(HAVE_LZMA 1)
+endif()
+
+
+find_package(LZ4 REQUIRED)
+if (LZ4_FOUND)
+ set(HAVE_LZ4 1)
+endif()
+
+find_package(Zstd)
+if (ZSTD_FOUND)
+ set(HAVE_ZSTD 1)
+endif()
+
+
+find_package(Udev)
+if (UDEV_FOUND)
+ set(HAVE_UDEV 1)
+endif()
+
+find_package(Systemd)
+if (SYSTEMD_FOUND)
+ set(HAVE_SYSTEMD 1)
+endif()
+
+find_package(Seccomp)
+if (SECCOMP_FOUND)
+ set(HAVE_SECCOMP 1)
+endif()
+
+# Mount()ing and stat()ing and friends
+check_symbol_exists(statfs sys/vfs.h HAVE_VFS_H)
+check_include_files(sys/params.h HAVE_PARAMS_H)
+check_symbol_exists(statfs sys/mount.h HAVE_MOUNT_H)
+if (NOT HAVE_VFS_H AND NOT HAVE_MOUNT_H)
+ message(FATAL_ERROR "Can find neither statvfs() nor statfs()")
+endif()
+
+check_function_exists(statvfs HAVE_STATVFS)
+if (NOT HAVE_STATVFS)
+ configure_file(CMake/statvfs.h.in ${PROJECT_BINARY_DIR}/include/sys/statvfs.h COPYONLY)
+endif()
+
+CHECK_STRUCT_HAS_MEMBER("struct statfs" f_type sys/vfs.h HAVE_STRUCT_STATFS_F_TYPE)
+
+# Other checks
+check_function_exists(getresuid HAVE_GETRESUID)
+check_function_exists(getresgid HAVE_GETRESGID)
+check_function_exists(setresuid HAVE_SETRESUID)
+check_function_exists(setresgid HAVE_SETRESGID)
+check_function_exists(ptsname_r HAVE_PTSNAME_R)
+check_function_exists(timegm HAVE_TIMEGM)
+test_big_endian(WORDS_BIGENDIAN)
+
+# FreeBSD
+add_definitions(-D_WITH_GETLINE=1)
+
+CHECK_INCLUDE_FILES(machine/endian.h HAVE_MACHINE_ENDIAN_H)
+CHECK_INCLUDE_FILES(sys/endian.h HAVE_SYS_ENDIAN_H)
+CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
+if (NOT HAVE_ENDIAN_H)
+ if (HAVE_MACHINE_ENDIAN_H OR HAVE_SYS_ENDIAN_H)
+ configure_file(CMake/endian.h.in ${PROJECT_BINARY_DIR}/include/endian.h)
+ else()
+ message(FATAL_ERROR "Cannot find endian.h")
+ endif()
+endif()
+
+
+include(CheckTypeSize)
+set(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
+check_type_size("sig_t" SIG_T LANGUAGE "CXX")
+check_type_size("sighandler_t" SIGHANDLER_T LANGUAGE "CXX")
+set(CMAKE_EXTRA_INCLUDE_FILES)
+if (NOT HAVE_SIGHANDLER_T)
+ if (HAVE_SIG_T)
+ add_definitions(-Dsighandler_t=sig_t)
+ else()
+ message(FATAL_ERROR "Platform defines neither sig_t nor sighandler_t")
+ endif()
+endif()
+
+# Handle resolving
+check_function_exists(res_init HAVE_LIBC_RESOLV)
+if(HAVE_LIBC_RESOLV)
+ set(RESOLV_LIBRARIES)
+else()
+ set(RESOLV_LIBRARIES -lresolv)
+endif()
+
+# Check multiversioning
+include(CheckCxxTarget)
+check_cxx_target(HAVE_FMV_SSE42_AND_CRC32 "sse4.2" "__builtin_ia32_crc32si(0, 1llu);")
+check_cxx_target(HAVE_FMV_SSE42_AND_CRC32DI "sse4.2" "__builtin_ia32_crc32di(0, 1llu);")
+
+# Configure some variables like package, version and architecture.
+set(PACKAGE ${PROJECT_NAME})
+set(PACKAGE_MAIL "APT Development Team <deity@lists.debian.org>")
+set(PACKAGE_VERSION "1.8.2.3")
+
+if (NOT DEFINED DPKG_DATADIR)
+ execute_process(COMMAND ${PERL_EXECUTABLE} -MDpkg -e "print $Dpkg::DATADIR;"
+ OUTPUT_VARIABLE DPKG_DATADIR_CMD OUTPUT_STRIP_TRAILING_WHITESPACE)
+ message(STATUS "Found dpkg data dir: ${DPKG_DATADIR_CMD}")
+ set(DPKG_DATADIR "${DPKG_DATADIR_CMD}" CACHE PATH "dpkg data directory")
+endif()
+if (NOT DEFINED COMMON_ARCH)
+ execute_process(COMMAND dpkg-architecture -qDEB_HOST_ARCH
+ OUTPUT_VARIABLE COMMON_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif()
+if (NOT DEFINED ROOT_GROUP)
+ execute_process(COMMAND id -gn root
+ OUTPUT_VARIABLE ROOT_GROUP OUTPUT_STRIP_TRAILING_WHITESPACE)
+ message(STATUS "Found root group: ${ROOT_GROUP}")
+endif()
+set(ROOT_GROUP "${ROOT_GROUP}" CACHE STRING "Group of root (e.g.: wheel or root)")
+
+# Set various directories
+set(STATE_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/apt" CACHE PATH "Your /var/lib/apt")
+set(CACHE_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/cache/apt" CACHE PATH "Your /var/cache/apt")
+set(LOG_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/apt" CACHE PATH "Your /var/log/apt")
+set(CONF_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/apt" CACHE PATH "Your /etc/apt")
+set(LIBEXEC_DIR "${CMAKE_INSTALL_FULL_LIBEXECDIR}/apt" CACHE PATH "Your /usr/libexec/apt")
+set(BIN_DIR "${CMAKE_INSTALL_FULL_BINDIR}")
+
+
+# Configure our configuration headers (config.h and apti18n.h)
+configure_file(CMake/config.h.in ${PROJECT_BINARY_DIR}/include/config.h)
+configure_file(CMake/apti18n.h.in ${PROJECT_BINARY_DIR}/include/apti18n.h)
+
+# Add our subdirectories
+add_subdirectory(vendor)
+add_subdirectory(apt-pkg)
+add_subdirectory(apt-private)
+add_subdirectory(apt-inst)
+add_subdirectory(cmdline)
+add_subdirectory(completions)
+add_subdirectory(doc)
+add_subdirectory(dselect)
+add_subdirectory(ftparchive)
+add_subdirectory(methods)
+add_subdirectory(test)
+
+if (USE_NLS)
+add_subdirectory(po)
+
+# Link update-po4a into the update-po target
+add_dependencies(update-po update-po4a)
+endif()
+
+# Create our directories.
+install_empty_directories(
+ ${CONF_DIR}/apt.conf.d
+ ${CONF_DIR}/auth.conf.d
+ ${CONF_DIR}/preferences.d
+ ${CONF_DIR}/sources.list.d
+ ${CONF_DIR}/trusted.gpg.d
+ ${CACHE_DIR}/archives/partial
+ ${STATE_DIR}/lists/partial
+ ${STATE_DIR}/mirrors/partial
+ ${STATE_DIR}/periodic
+ ${LOG_DIR}
+)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..2f9ab10
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,22 @@
+Apt is copyright 1997, 1998, 1999 Jason Gunthorpe and others.
+Apt is currently developed by APT Development Team <deity@lists.debian.org>.
+
+License: GPLv2+
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+See /usr/share/common-licenses/GPL-2, or
+<http://www.gnu.org/copyleft/gpl.txt> for the terms of the latest version
+of the GNU General Public License.
diff --git a/COPYING.GPL b/COPYING.GPL
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/COPYING.GPL
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..49934e4
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,12 @@
+FROM debian:buster
+COPY . /tmp
+WORKDIR /tmp
+RUN sed -i s#://deb.debian.org#://cdn-fastly.deb.debian.org# /etc/apt/sources.list \
+ && apt-get update \
+ && adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000 \
+ && env DEBIAN_FRONTEND=noninteractive apt-get install build-essential ccache ninja-build expect curl git -q -y \
+ && env DEBIAN_FRONTEND=noninteractive ./prepare-release travis-ci \
+ && dpkg-reconfigure ccache \
+ && rm -f /etc/dpkg/dpkg.cfg.d/excludes \
+ && rm -r /tmp/* \
+ && apt-get clean
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8a8b3b6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,215 @@
+APT
+===
+
+apt is the main commandline package manager for Debian and its derivatives.
+It provides commandline tools for searching and managing as well as querying
+information about packages as well as low-level access to all features
+provided by the libapt-pkg and libapt-inst libraries which higher-level
+package managers can depend upon.
+
+Included tools are:
+
+* **apt-get** for retrieval of packages and information about them
+ from authenticated sources and for installation, upgrade and
+ removal of packages together with their dependencies
+* **apt-cache** for querying available information about installed
+ as well as installable packages
+* **apt-cdrom** to use removable media as a source for packages
+* **apt-config** as an interface to the configuration settings
+* **apt-key** as an interface to manage authentication keys
+* **apt-extracttemplates** to be used by debconf to prompt for configuration
+ questions before installation
+* **apt-ftparchive** creates Packages and other index files
+ needed to publish an archive of debian packages
+* **apt-sortpkgs** is a Packages/Sources file normalizer
+* **apt** is a high-level commandline interface for better interactive usage
+
+The libraries libapt-pkg and libapt-inst are also maintained as part of this project,
+alongside various additional binaries like the acquire-methods used by them.
+Bindings for Python ([python-apt](https://tracker.debian.org/pkg/python-apt)) and
+Perl ([libapt-pkg-perl](https://tracker.debian.org/pkg/libapt-pkg-perl)) are available as separated projects.
+
+Discussion happens mostly on [the mailinglist](mailto:deity@lists.debian.org) ([archive](https://lists.debian.org/deity/)) and on [IRC](irc://irc.oftc.net/debian-apt).
+Our bugtracker as well as a general overview can be found at the [Debian Tracker page](https://tracker.debian.org/pkg/apt).
+
+
+Contributing
+------------
+APT is maintained in git, the official repository being located at
+[https://salsa.debian.org/apt-team/apt](https://salsa.debian.org/apt-team/apt),
+but also available at other locations like [GitHub](https://github.com/Debian/apt).
+
+The default branch is `master`, other branches targeted at different
+derivatives and releases being used as needed. Various topic branches in
+different stages of completion might be branched of from those, which you
+are encouraged to do as well.
+
+### Coding
+
+APT uses cmake. To start building, you need to run
+
+ cmake <path to source directory>
+
+from a build directory. For example, if you want to build in the source tree,
+run:
+
+ cmake .
+
+Then you can use make as you normally would (pass -j <count> to perform <count>
+jobs in parallel).
+
+You can also use the Ninja generator of cmake, to do that pass
+ -G Ninja
+to the cmake invocation, and then use ninja instead of make.
+
+The source code uses in most parts a relatively uncommon indent convention,
+namely 3 spaces with 8 space tab (see [doc/style.txt](https://anonscm.debian.org/git/apt/apt.git/tree/doc/style.txt) for more on this).
+Adhering to it avoids unnecessary code-churn destroying history (aka: `git blame`)
+and you are therefore encouraged to write patches in this style.
+Your editor can surely help you with this, for vim the settings would be
+`setlocal shiftwidth=3 noexpandtab tabstop=8`
+(the later two are the default configuration and could therefore be omitted).
+
+### Translations
+
+While we welcome contributions here, we highly encourage you to contact the [Debian Internationalization (i18n) team](https://wiki.debian.org/Teams/I18n).
+Various language teams have formed which can help you creating, maintaining
+and improving a translation, while we could only do a basic syntax check of the
+file format…
+
+Further more, Translating APT is split into two independent parts:
+The program translation, meaning the messages printed by the tools,
+as well as the manpages and other documentation shipped with APT.
+
+### Bug triage
+
+Software tools like APT which are used by thousands of users every
+day have a steady flow of incoming bugreports. Not all of them are really
+bugs in APT: It can be packaging bugs like failing maintainer scripts a
+user reports against apt, because apt was the command he executed leading
+to this failure or various wishlist items for new features. Given enough time
+also the occasional duplicate enters the system.
+Our bugtracker is therefore full with open bugreports which are waiting for you! ;)
+
+Testing
+-------
+
+### Manual execution
+
+When you make changes and want to run them manually, you can just do so. CMake
+automatically inserts an rpath so the binaries find the correct libraries.
+
+Note that you have to invoke CMake with the right install prefix set (e.g.
+`-DCMAKE_INSTALL_PREFIX=/usr`) to have your build find and use the right files
+by default or alternatively set the locations at runtime via an `APT_CONFIG`
+configuration file.
+
+### Integration tests
+
+There is an extensive integration testsuite available which can be run via:
+
+ $ ./test/integration/run-tests
+
+Each test can also be run individually as well. The tests are very noisy by
+default, especially so while running all of them it might be beneficial to
+enabling quiet (`-q`) or very quiet (`-qq`) mode. The tests can also be run in
+parallel via `-j X` where `X` is the number of jobs to run.
+
+While these tests are not executed at package build-time as they require
+additional dependencies, the repository contains the configuration needed to
+run them on [Travis CI](https://travis-ci.org/) and
+[Shippable](https://shippable.com/) as well as via autopkgtests e.g. on
+[Debian Continuous Integration](https://ci.debian.net/packages/a/apt/).
+
+A testcase here is a shellscript embedded in a framework creating an environment in which
+apt tools can be used naturally without root-rights to test every aspect of its behavior
+itself as well as in conjunction with dpkg and other tools while working with packages.
+
+
+### Unit tests
+
+These tests are gtest-dev based, executed by ctest, reside in `./test/libapt`
+and can be run with `make test`. They are executed at package build-time, but
+not by `make`. CTest by default does not show the output of tests, even if they
+failed, so to see more details you can also run them with `ctest --verbose`.
+
+Debugging
+---------
+
+APT does many things, so there is no central debug mode which could be
+activated. It uses instead various config-options to activate debug output
+in certain areas. The following describes some common scenarios and generally
+useful options, but is in no way exhaustive.
+
+Note that you should *NEVER* use these settings as root to avoid accidents.
+Simulation mode (`-s`) is usually sufficient to help you run apt as a non-root user.
+
+### Using different state files
+
+If a dependency solver bug is reported, but can't be reproduced by the
+triager easily, it is beneficial to ask the reporter for the
+`/var/lib/dpkg/status` file, which includes the packages installed on the
+system and in which version. Such a file can then be used via the option
+`dir::state::status`. Beware of different architecture settings!
+Bugreports usually include this information in the template. Assuming you
+already have the `Packages` files for the architecture (see `sources.list`
+manpage for the `arch=` option) you can change to a different architecture
+with a config file like:
+
+ APT::Architecture "arch1";
+ #clear APT::Architectures;
+ APT:: Architectures { "arch1"; "arch2"; }
+
+If a certain mirror state is needed, see if you can reproduce it with [snapshot.debian.org](http://snapshot.debian.org/).
+Your sources.list file (`dir::etc::sourcelist`) has to be correctly mention the repository,
+but if it does, you can use different downloaded archive state files via `dir::state::lists`.
+
+In case manually vs. automatically installed matters, you can ask the reporter for
+the `/var/lib/apt/extended_states` file and use it with `dir::state::extended_states`.
+
+### Dependency resolution
+
+APT works in its internal resolver in two stages: First all packages are visited
+and marked for installation, keep back or removal. Option `Debug::pkgDepCache::Marker`
+shows this. This also decides which packages are to be installed to satisfy dependencies,
+which can be seen by `Debug::pkgDepCache::AutoInstall`. After this is done, we might
+be in a situation in which two packages want to be installed, but only on of them can be.
+It is the job of the pkgProblemResolver to decide which of two packages 'wins' and can
+therefore decide what has to happen. You can see the contenders as well as their fight and
+the resulting resolution with `Debug::pkgProblemResolver`.
+
+### Downloading files
+
+Various binaries (called 'methods') are tasked with downloading files. The Acquire system
+talks to them via simple text protocol. Depending on which side you want to see, either
+`Debug::pkgAcquire::Worker` or `Debug::Acquire::http` (or similar) will show the messages.
+
+The integration tests use a simple self-built webserver which also logs. If you find that
+the http(s) methods do not behave like they should be try to implement this behavior in the
+webserver for simpler and more controlled testing.
+
+### Installation order
+
+Dependencies are solved, packages downloaded: Everything read for the installation!
+The last step in the chain is often forgotten, but still very important:
+Packages have to be installed in a particular order so that their dependencies are
+satisfied, but at the same time you don't want to install very important and optional
+packages at the same time if possible, so that a broken optional package does not
+block the correct installation of very important packages. Which option to use depends on
+if you are interested in the topology sorting (`Debug::pkgOrderList`), the dependency-aware
+cycle and unconfigured prevention (`Debug::pkgPackageManager`) or the actual calls
+to dpkg (`Debug::pkgDpkgPm`).
+
+
+Additional documentation
+------------------------
+
+Many more things could and should be said about APT and its usage but are more
+targeted at developers of related programs or only of special interest.
+
+* [Protocol specification of APTs communication with external dependency solvers (EDSP)](./doc/external-dependency-solver-protocol.md)
+* [Protocol specification of APTs communication with external installation planners (EIPP)](./doc/external-installation-planner-protocol.md)
+* [Howto use and configure APT to acquire additional files in 'update' operations](./doc/acquire-additional-files.md)
+* [Download and package installation progress reporting details](./doc/progress-reporting.md)
+* [Remarks on DNS SRV record support in APT](./doc/srv-records-support.md)
+* [Protocol specification of APT interfacing with external hooks via JSON](./doc/json-hooks-protocol.md)
diff --git a/abicheck/apt_build.xml.in b/abicheck/apt_build.xml.in
new file mode 100644
index 0000000..32886d9
--- /dev/null
+++ b/abicheck/apt_build.xml.in
@@ -0,0 +1,12 @@
+<version>
+ build-branch
+</version>
+
+ <headers>
+ @build_path@/include/apt-pkg
+ </headers>
+
+ <libs>
+ @build_path@/apt-pkg/
+ @build_path@/apt-inst/
+ </libs>
diff --git a/abicheck/apt_installed.xml.in b/abicheck/apt_installed.xml.in
new file mode 100644
index 0000000..c3ddd08
--- /dev/null
+++ b/abicheck/apt_installed.xml.in
@@ -0,0 +1,11 @@
+<version>
+ installed
+</version>
+
+<headers>
+ /usr/include/apt-pkg/
+</headers>
+
+<libs>
+ @installed_libapt@
+</libs>
diff --git a/abicheck/run_abi_test b/abicheck/run_abi_test
new file mode 100755
index 0000000..491616b
--- /dev/null
+++ b/abicheck/run_abi_test
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# ensure we are in the abibreak subdirectory
+cd "$(readlink -f $(dirname $0))"
+
+if [ ! -d ../build ]; then
+ echo "../build missing, did you run make?"
+ exit 1
+fi
+
+if ! command -v abi-compliance-checker 2>/dev/null >&2; then
+ echo "Please install the 'abi-compliance-checker' package"
+ exit 1
+fi
+
+LIBPATH=$(find /usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH) -type f -regex '.*/libapt-\(pkg\|inst\)\.so\..*' -printf %p\\\\n)
+sed s#@installed_libapt@#$LIBPATH# apt_installed.xml.in > apt_installed.xml
+
+BUILDPATH=$(readlink -f ../build)
+sed s#@build_path@#$BUILDPATH# apt_build.xml.in > apt_build.xml
+
+abi-compliance-checker -l apt -d1 apt_installed.xml -d2 apt_build.xml $@
diff --git a/apt-inst/CMakeLists.txt b/apt-inst/CMakeLists.txt
new file mode 100644
index 0000000..31da115
--- /dev/null
+++ b/apt-inst/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Include apt-pkg directly, as some files have #include <system.h>
+include_directories(${PROJECT_BINARY_DIR}/include/apt-pkg)
+
+# Set the version of the library
+set(MAJOR 2.0)
+set(MINOR 0)
+set(APT_INST_MAJOR ${MAJOR} PARENT_SCOPE)
+
+# Definition of the C++ files used to build the library - note that this
+# is expanded at CMake time, so you have to rerun cmake if you add or remove
+# a file (you can just run cmake . in the build directory)
+file(GLOB_RECURSE library "*.cc")
+file(GLOB_RECURSE headers "*.h")
+
+# Create a library using the C++ files
+add_library(apt-inst SHARED ${library})
+
+# Link the library and set the SONAME
+target_link_libraries(apt-inst PUBLIC apt-pkg ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(apt-inst PRIVATE ${CMAKE_THREAD_LIBS_INIT})
+set_target_properties(apt-inst PROPERTIES VERSION ${MAJOR}.${MINOR})
+set_target_properties(apt-inst PROPERTIES SOVERSION ${MAJOR})
+add_version_script(apt-inst)
+
+# Install the library and the headers
+install(TARGETS apt-inst LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(FILES ${headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/apt-pkg)
+flatify(${PROJECT_BINARY_DIR}/include/apt-pkg/ "${headers}")
diff --git a/apt-inst/contrib/arfile.cc b/apt-inst/contrib/arfile.cc
new file mode 100644
index 0000000..6d4a1f1
--- /dev/null
+++ b/apt-inst/contrib/arfile.cc
@@ -0,0 +1,179 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ AR File - Handle an 'AR' archive
+
+ AR Archives have plain text headers at the start of each file
+ section. The headers are aligned on a 2 byte boundary.
+
+ Information about the structure of AR files can be found in ar(5)
+ on a BSD system, or in the binutils source.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/arfile.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <string>
+#include <string.h>
+#include <sys/types.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+struct ARArchive::MemberHeader
+{
+ char Name[16];
+ char MTime[12];
+ char UID[6];
+ char GID[6];
+ char Mode[8];
+ char Size[10];
+ char Magic[2];
+};
+
+// ARArchive::ARArchive - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+ARArchive::ARArchive(FileFd &File) : List(0), File(File)
+{
+ LoadHeaders();
+}
+ /*}}}*/
+// ARArchive::~ARArchive - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+ARArchive::~ARArchive()
+{
+ while (List != 0)
+ {
+ Member *Tmp = List;
+ List = List->Next;
+ delete Tmp;
+ }
+}
+ /*}}}*/
+// ARArchive::LoadHeaders - Load the headers from each file /*{{{*/
+// ---------------------------------------------------------------------
+/* AR files are structured with a 8 byte magic string followed by a 60
+ byte plain text header then the file data, another header, data, etc */
+bool ARArchive::LoadHeaders()
+{
+ off_t Left = File.Size();
+
+ // Check the magic byte
+ char Magic[8];
+ if (File.Read(Magic,sizeof(Magic)) == false)
+ return false;
+ if (memcmp(Magic,"!<arch>\012",sizeof(Magic)) != 0)
+ return _error->Error(_("Invalid archive signature"));
+ Left -= sizeof(Magic);
+
+ // Read the member list
+ while (Left > 0)
+ {
+ MemberHeader Head;
+ if (File.Read(&Head,sizeof(Head)) == false)
+ return _error->Error(_("Error reading archive member header"));
+ Left -= sizeof(Head);
+
+ // Convert all of the integer members
+ Member *Memb = new Member();
+ if (StrToNum(Head.MTime,Memb->MTime,sizeof(Head.MTime)) == false ||
+ StrToNum(Head.UID,Memb->UID,sizeof(Head.UID)) == false ||
+ StrToNum(Head.GID,Memb->GID,sizeof(Head.GID)) == false ||
+ StrToNum(Head.Mode,Memb->Mode,sizeof(Head.Mode),8) == false ||
+ StrToNum(Head.Size,Memb->Size,sizeof(Head.Size)) == false)
+ {
+ delete Memb;
+ return _error->Error(_("Invalid archive member header"));
+ }
+
+ if (Left < 0 || Memb->Size > static_cast<unsigned long long>(Left))
+ {
+ delete Memb;
+ return _error->Error(_("Invalid archive member header"));
+ }
+ // Check for an extra long name string
+ if (memcmp(Head.Name,"#1/",3) == 0)
+ {
+ char S[300];
+ unsigned long Len;
+ if (StrToNum(Head.Name+3,Len,sizeof(Head.Size)-3) == false ||
+ Len >= sizeof(S))
+ {
+ delete Memb;
+ return _error->Error(_("Invalid archive member header"));
+ }
+
+ if (Len > Memb->Size)
+ {
+ delete Memb;
+ return _error->Error(_("Invalid archive member header"));
+ }
+
+ if (File.Read(S,Len) == false)
+ {
+ delete Memb;
+ return false;
+ }
+ S[Len] = 0;
+ Memb->Name = S;
+ Memb->Size -= Len;
+ Left -= Len;
+ }
+ else
+ {
+ unsigned int I = sizeof(Head.Name) - 1;
+ for (; Head.Name[I] == ' ' || Head.Name[I] == '/'; I--)
+ {
+ if (I == 0)
+ {
+ delete Memb;
+ return _error->Error(_("Invalid archive member header"));
+ }
+ }
+ Memb->Name = std::string(Head.Name,I+1);
+ }
+
+ // Account for the AR header alignment
+ off_t Skip = Memb->Size % 2;
+
+ // Add it to the list
+ Memb->Next = List;
+ List = Memb;
+ Memb->Start = File.Tell();
+ if (File.Skip(Memb->Size + Skip) == false)
+ return false;
+ if (Left < (off_t)(Memb->Size + Skip))
+ return _error->Error(_("Archive is too short"));
+ Left -= Memb->Size + Skip;
+ }
+ if (Left != 0)
+ return _error->Error(_("Failed to read the archive headers"));
+
+ return true;
+}
+ /*}}}*/
+// ARArchive::FindMember - Find a name in the member list /*{{{*/
+// ---------------------------------------------------------------------
+/* Find a member with the given name */
+const ARArchive::Member *ARArchive::FindMember(const char *Name) const
+{
+ const Member *Res = List;
+ while (Res != 0)
+ {
+ if (Res->Name == Name)
+ return Res;
+ Res = Res->Next;
+ }
+
+ return 0;
+}
+ /*}}}*/
diff --git a/apt-inst/contrib/arfile.h b/apt-inst/contrib/arfile.h
new file mode 100644
index 0000000..8124208
--- /dev/null
+++ b/apt-inst/contrib/arfile.h
@@ -0,0 +1,69 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ AR File - Handle an 'AR' archive
+
+ This is a reader for the usual 4.4 BSD AR format. It allows raw
+ stream access to a single member at a time. Basically all this class
+ provides is header parsing and verification. It is up to the client
+ to correctly make use of the stream start/stop points.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_ARFILE_H
+#define PKGLIB_ARFILE_H
+
+#include <apt-pkg/macros.h>
+#include <string>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
+
+class FileFd;
+
+class ARArchive
+{
+ struct MemberHeader;
+ public:
+ struct Member;
+
+ protected:
+
+ // Linked list of members
+ Member *List;
+
+ bool LoadHeaders();
+
+ public:
+
+ // The stream file
+ FileFd &File;
+
+ // Locate a member by name
+ const Member *FindMember(const char *Name) const;
+ inline Member *Members() { return List; }
+
+ ARArchive(FileFd &File);
+ ~ARArchive();
+};
+
+// A member of the archive
+struct ARArchive::Member
+{
+ // Fields from the header
+ std::string Name;
+ unsigned long MTime;
+ unsigned long UID;
+ unsigned long GID;
+ unsigned long Mode;
+ unsigned long long Size;
+
+ // Location of the data.
+ unsigned long long Start;
+ Member *Next;
+
+ Member() : Start(0), Next(0) {};
+};
+
+#endif
diff --git a/apt-inst/contrib/extracttar.cc b/apt-inst/contrib/extracttar.cc
new file mode 100644
index 0000000..cbee4d1
--- /dev/null
+++ b/apt-inst/contrib/extracttar.cc
@@ -0,0 +1,329 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Extract a Tar - Tar Extractor
+
+ Some performance measurements showed that zlib performed quite poorly
+ in comparison to a forked gzip process. This tar extractor makes use
+ of the fact that dup'd file descriptors have the same seek pointer
+ and that gzip will not read past the end of a compressed stream,
+ even if there is more data. We use the dup property to track extraction
+ progress and the gzip feature to just feed gzip a fd in the middle
+ of an AR file.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/extracttar.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <iostream>
+#include <string>
+#include <fcntl.h>
+#include <signal.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// The on disk header for a tar file.
+struct ExtractTar::TarHeader
+{
+ char Name[100];
+ char Mode[8];
+ char UserID[8];
+ char GroupID[8];
+ char Size[12];
+ char MTime[12];
+ char Checksum[8];
+ char LinkFlag;
+ char LinkName[100];
+ char MagicNumber[8];
+ char UserName[32];
+ char GroupName[32];
+ char Major[8];
+ char Minor[8];
+};
+
+// We need to read long names (names and link targets) into memory, so let's
+// have a limit (shamelessly stolen from libarchive) to avoid people OOMing
+// us with large streams.
+static const unsigned long long APT_LONGNAME_LIMIT = 1048576llu;
+
+// A file size limit that we allow extracting. Currently, that's 128 GB.
+// We also should leave some wiggle room for code adding files to it, and
+// possibly conversion for signed, so this should not be larger than like 2**62.
+static const unsigned long long APT_FILESIZE_LIMIT = 1llu << 37;
+
+// ExtractTar::ExtractTar - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+ExtractTar::ExtractTar(FileFd &Fd,unsigned long long Max,string DecompressionProgram)
+ : File(Fd), MaxInSize(Max), DecompressProg(DecompressionProgram)
+{
+ GZPid = -1;
+ Eof = false;
+}
+ /*}}}*/
+// ExtractTar::ExtractTar - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+ExtractTar::~ExtractTar()
+{
+ // Error close
+ Done();
+}
+ /*}}}*/
+// ExtractTar::Done - Reap the gzip sub process /*{{{*/
+bool ExtractTar::Done(bool)
+{
+ return Done();
+}
+bool ExtractTar::Done()
+{
+ return InFd.Close();
+}
+ /*}}}*/
+// ExtractTar::StartGzip - Startup gzip /*{{{*/
+// ---------------------------------------------------------------------
+/* This creates a gzip sub process that has its input as the file itself.
+ If this tar file is embedded into something like an ar file then
+ gzip will efficiently ignore the extra bits. */
+bool ExtractTar::StartGzip()
+{
+ if (DecompressProg.empty())
+ {
+ InFd.OpenDescriptor(File.Fd(), FileFd::ReadOnly, FileFd::None, false);
+ return true;
+ }
+
+ std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+ std::vector<APT::Configuration::Compressor>::const_iterator compressor = compressors.begin();
+ for (; compressor != compressors.end(); ++compressor) {
+ if (compressor->Name == DecompressProg) {
+ return InFd.OpenDescriptor(File.Fd(), FileFd::ReadOnly, *compressor, false);
+ }
+ }
+
+ return _error->Error(_("Cannot find a configured compressor for '%s'"),
+ DecompressProg.c_str());
+
+}
+ /*}}}*/
+// ExtractTar::Go - Perform extraction /*{{{*/
+// ---------------------------------------------------------------------
+/* This reads each 512 byte block from the archive and extracts the header
+ information into the Item structure. Then it resolves the UID/GID and
+ invokes the correct processing function. */
+bool ExtractTar::Go(pkgDirStream &Stream)
+{
+ if (StartGzip() == false)
+ return false;
+
+ // Loop over all blocks
+ string LastLongLink, ItemLink;
+ string LastLongName, ItemName;
+ while (1)
+ {
+ bool BadRecord = false;
+ unsigned char Block[512];
+ if (InFd.Read(Block,sizeof(Block),true) == false)
+ return false;
+
+ if (InFd.Eof() == true)
+ break;
+
+ // Get the checksum
+ TarHeader *Tar = (TarHeader *)Block;
+ unsigned long CheckSum;
+ if (StrToNum(Tar->Checksum,CheckSum,sizeof(Tar->Checksum),8) == false)
+ return _error->Error(_("Corrupted archive"));
+
+ /* Compute the checksum field. The actual checksum is blanked out
+ with spaces so it is not included in the computation */
+ unsigned long NewSum = 0;
+ memset(Tar->Checksum,' ',sizeof(Tar->Checksum));
+ for (int I = 0; I != sizeof(Block); I++)
+ NewSum += Block[I];
+
+ /* Check for a block of nulls - in this case we kill gzip, GNU tar
+ does this.. */
+ if (NewSum == ' '*sizeof(Tar->Checksum))
+ return Done();
+
+ if (NewSum != CheckSum)
+ return _error->Error(_("Tar checksum failed, archive corrupted"));
+
+ // Decode all of the fields
+ pkgDirStream::Item Itm;
+ if (StrToNum(Tar->Mode,Itm.Mode,sizeof(Tar->Mode),8) == false ||
+ (Base256ToNum(Tar->UserID,Itm.UID,8) == false &&
+ StrToNum(Tar->UserID,Itm.UID,sizeof(Tar->UserID),8) == false) ||
+ (Base256ToNum(Tar->GroupID,Itm.GID,8) == false &&
+ StrToNum(Tar->GroupID,Itm.GID,sizeof(Tar->GroupID),8) == false) ||
+ (Base256ToNum(Tar->Size,Itm.Size,12) == false &&
+ StrToNum(Tar->Size,Itm.Size,sizeof(Tar->Size),8) == false) ||
+ (Base256ToNum(Tar->MTime,Itm.MTime,12) == false &&
+ StrToNum(Tar->MTime,Itm.MTime,sizeof(Tar->MTime),8) == false) ||
+ StrToNum(Tar->Major,Itm.Major,sizeof(Tar->Major),8) == false ||
+ StrToNum(Tar->Minor,Itm.Minor,sizeof(Tar->Minor),8) == false)
+ return _error->Error(_("Corrupted archive"));
+
+ // Security check. Prevents overflows below the code when rounding up in skip/copy code,
+ // and provides modest protection against decompression bombs.
+ if (Itm.Size > APT_FILESIZE_LIMIT)
+ return _error->Error("Tar member too large: %llu > %llu bytes", Itm.Size, APT_FILESIZE_LIMIT);
+
+ // Grab the filename and link target: use last long name if one was
+ // set, otherwise use the header value as-is, but remember that it may
+ // fill the entire 100-byte block and needs to be zero-terminated.
+ // See Debian Bug #689582.
+ if (LastLongName.empty() == false)
+ Itm.Name = (char *)LastLongName.c_str();
+ else
+ Itm.Name = (char *)ItemName.assign(Tar->Name, sizeof(Tar->Name)).c_str();
+ if (Itm.Name[0] == '.' && Itm.Name[1] == '/' && Itm.Name[2] != 0)
+ Itm.Name += 2;
+
+ if (LastLongLink.empty() == false)
+ Itm.LinkTarget = (char *)LastLongLink.c_str();
+ else
+ Itm.LinkTarget = (char *)ItemLink.assign(Tar->LinkName, sizeof(Tar->LinkName)).c_str();
+
+ // Convert the type over
+ switch (Tar->LinkFlag)
+ {
+ case NormalFile0:
+ case NormalFile:
+ Itm.Type = pkgDirStream::Item::File;
+ break;
+
+ case HardLink:
+ Itm.Type = pkgDirStream::Item::HardLink;
+ break;
+
+ case SymbolicLink:
+ Itm.Type = pkgDirStream::Item::SymbolicLink;
+ break;
+
+ case CharacterDevice:
+ Itm.Type = pkgDirStream::Item::CharDevice;
+ break;
+
+ case BlockDevice:
+ Itm.Type = pkgDirStream::Item::BlockDevice;
+ break;
+
+ case Directory:
+ Itm.Type = pkgDirStream::Item::Directory;
+ break;
+
+ case FIFO:
+ Itm.Type = pkgDirStream::Item::FIFO;
+ break;
+
+ case GNU_LongLink:
+ {
+ unsigned long long Length = Itm.Size;
+ unsigned char Block[512];
+ if (Length > APT_LONGNAME_LIMIT)
+ return _error->Error("Long name to large: %llu bytes > %llu bytes", Length, APT_LONGNAME_LIMIT);
+ while (Length > 0)
+ {
+ if (InFd.Read(Block,sizeof(Block),true) == false)
+ return false;
+ if (Length <= sizeof(Block))
+ {
+ LastLongLink.append(Block,Block+sizeof(Block));
+ break;
+ }
+ LastLongLink.append(Block,Block+sizeof(Block));
+ Length -= sizeof(Block);
+ }
+ continue;
+ }
+
+ case GNU_LongName:
+ {
+ unsigned long long Length = Itm.Size;
+ unsigned char Block[512];
+ if (Length > APT_LONGNAME_LIMIT)
+ return _error->Error("Long name to large: %llu bytes > %llu bytes", Length, APT_LONGNAME_LIMIT);
+ while (Length > 0)
+ {
+ if (InFd.Read(Block,sizeof(Block),true) == false)
+ return false;
+ if (Length < sizeof(Block))
+ {
+ LastLongName.append(Block,Block+sizeof(Block));
+ break;
+ }
+ LastLongName.append(Block,Block+sizeof(Block));
+ Length -= sizeof(Block);
+ }
+ continue;
+ }
+
+ default:
+ BadRecord = true;
+ _error->Warning(_("Unknown TAR header type %u"), (unsigned)Tar->LinkFlag);
+ break;
+ }
+
+ int Fd = -1;
+ if (BadRecord == false)
+ if (Stream.DoItem(Itm,Fd) == false)
+ return false;
+
+ // Copy the file over the FD
+ unsigned long long Size = Itm.Size;
+ while (Size != 0)
+ {
+ unsigned char Junk[32*1024];
+ unsigned long Read = min(Size, (unsigned long long)sizeof(Junk));
+ if (InFd.Read(Junk,((Read+511)/512)*512) == false)
+ return false;
+
+ if (BadRecord == false)
+ {
+ if (Fd > 0)
+ {
+ if (write(Fd,Junk,Read) != (signed)Read)
+ return Stream.Fail(Itm,Fd);
+ }
+ else
+ {
+ /* An Fd of -2 means to send to a special processing
+ function */
+ if (Fd == -2)
+ if (Stream.Process(Itm,Junk,Read,Itm.Size - Size) == false)
+ return Stream.Fail(Itm,Fd);
+ }
+ }
+
+ Size -= Read;
+ }
+
+ // And finish up
+ if (BadRecord == false)
+ if (Stream.FinishedFile(Itm,Fd) == false)
+ return false;
+
+ LastLongName.erase();
+ LastLongLink.erase();
+ }
+
+ return Done();
+}
+ /*}}}*/
diff --git a/apt-inst/contrib/extracttar.h b/apt-inst/contrib/extracttar.h
new file mode 100644
index 0000000..c0b340e
--- /dev/null
+++ b/apt-inst/contrib/extracttar.h
@@ -0,0 +1,61 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Extract a Tar - Tar Extractor
+
+ The tar extractor takes an ordinary gzip compressed tar stream from
+ the given file and explodes it, passing the individual items to the
+ given Directory Stream for processing.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_EXTRACTTAR_H
+#define PKGLIB_EXTRACTTAR_H
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/macros.h>
+
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/dirstream.h>
+#include <algorithm>
+using std::min;
+#endif
+
+class pkgDirStream;
+
+class ExtractTar
+{
+ protected:
+
+ struct TarHeader;
+
+ // The varios types items can be
+ enum ItemType {NormalFile0 = '\0',NormalFile = '0',HardLink = '1',
+ SymbolicLink = '2',CharacterDevice = '3',
+ BlockDevice = '4',Directory = '5',FIFO = '6',
+ GNU_LongLink = 'K',GNU_LongName = 'L'};
+
+ FileFd &File;
+ unsigned long long MaxInSize;
+ int GZPid;
+ FileFd InFd;
+ bool Eof;
+ std::string DecompressProg;
+
+ // Fork and reap gzip
+ bool StartGzip();
+ bool Done();
+ APT_DEPRECATED_MSG("Parameter Force is ignored, use Done() instead.") bool Done(bool Force);
+
+ public:
+
+ bool Go(pkgDirStream &Stream);
+
+ ExtractTar(FileFd &Fd,unsigned long long Max,std::string DecompressionProgram);
+ virtual ~ExtractTar();
+};
+
+#endif
diff --git a/apt-inst/deb/debfile.cc b/apt-inst/deb/debfile.cc
new file mode 100644
index 0000000..bef0cd0
--- /dev/null
+++ b/apt-inst/deb/debfile.cc
@@ -0,0 +1,265 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Archive File (.deb)
+
+ .DEB archives are AR files containing two tars and an empty marker
+ member called 'debian-binary'. The two tars contain the meta data and
+ the actual archive contents. Thus this class is a very simple wrapper
+ around ar/tar to simply extract the right tar files.
+
+ It also uses the deb package list parser to parse the control file
+ into the cache.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/arfile.h>
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/extracttar.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <string>
+#include <vector>
+#include <string.h>
+#include <sys/stat.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// DebFile::debDebFile - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Open the AR file and check for consistency */
+debDebFile::debDebFile(FileFd &File) : File(File), AR(File)
+{
+ if (_error->PendingError() == true)
+ return;
+
+ if (!CheckMember("debian-binary")) {
+ _error->Error(_("This is not a valid DEB archive, missing '%s' member"), "debian-binary");
+ return;
+ }
+
+ if (!CheckMember("control.tar") &&
+ !CheckMember("control.tar.gz") &&
+ !CheckMember("control.tar.xz") &&
+ !CheckMember("control.tar.zst"))
+ {
+ _error->Error(_("This is not a valid DEB archive, missing '%s' member"), "control.tar");
+ return;
+ }
+
+ if (!CheckMember("data.tar") &&
+ !CheckMember("data.tar.gz") &&
+ !CheckMember("data.tar.bz2") &&
+ !CheckMember("data.tar.lzma") &&
+ !CheckMember("data.tar.xz") &&
+ !CheckMember("data.tar.zst"))
+ {
+ _error->Error(_("This is not a valid DEB archive, missing '%s' member"), "data.tar");
+ return;
+ }
+}
+ /*}}}*/
+// DebFile::CheckMember - Check if a named member is in the archive /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to check for a correct deb and to give nicer error messages
+ for people playing around. */
+bool debDebFile::CheckMember(const char *Name)
+{
+ if (AR.FindMember(Name) == 0)
+ return false;
+ return true;
+}
+ /*}}}*/
+// DebFile::GotoMember - Jump to a Member /*{{{*/
+// ---------------------------------------------------------------------
+/* Jump in the file to the start of a named member and return the information
+ about that member. The caller can then read from the file up to the
+ returned size. Note, since this relies on the file position this is
+ a destructive operation, it also changes the last returned Member
+ structure - so don't nest them! */
+const ARArchive::Member *debDebFile::GotoMember(const char *Name)
+{
+ // Get the archive member and positition the file
+ const ARArchive::Member *Member = AR.FindMember(Name);
+ if (Member == 0)
+ {
+ return 0;
+ }
+ if (File.Seek(Member->Start) == false)
+ return 0;
+
+ return Member;
+}
+ /*}}}*/
+// DebFile::ExtractTarMember - Extract the contents of a tar member /*{{{*/
+// ---------------------------------------------------------------------
+/* Simple wrapper around tar.. */
+bool debDebFile::ExtractTarMember(pkgDirStream &Stream,const char *Name)
+{
+ // Get the archive member
+ const ARArchive::Member *Member = NULL;
+ std::string Compressor;
+
+ std::vector<APT::Configuration::Compressor> compressor = APT::Configuration::getCompressors();
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+ c != compressor.end(); ++c)
+ {
+ Member = AR.FindMember(std::string(Name).append(c->Extension).c_str());
+ if (Member == NULL)
+ continue;
+ Compressor = c->Name;
+ break;
+ }
+
+ if (Member == NULL)
+ Member = AR.FindMember(std::string(Name).c_str());
+
+ if (Member == NULL)
+ {
+ std::string ext = std::string(Name) + ".{";
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+ c != compressor.end(); ++c) {
+ if (!c->Extension.empty())
+ ext.append(c->Extension.substr(1));
+ }
+ ext.append("}");
+ return _error->Error(_("Internal error, could not locate member %s"), ext.c_str());
+ }
+
+ if (File.Seek(Member->Start) == false)
+ return false;
+
+ // Prepare Tar
+ ExtractTar Tar(File,Member->Size,Compressor);
+ if (_error->PendingError() == true)
+ return false;
+ return Tar.Go(Stream);
+}
+ /*}}}*/
+// DebFile::ExtractArchive - Extract the archive data itself /*{{{*/
+// ---------------------------------------------------------------------
+/* Simple wrapper around DebFile::ExtractTarMember. */
+bool debDebFile::ExtractArchive(pkgDirStream &Stream)
+{
+ return ExtractTarMember(Stream, "data.tar");
+}
+ /*}}}*/
+
+// DebFile::ControlExtract::DoItem - Control Tar Extraction /*{{{*/
+// ---------------------------------------------------------------------
+/* This directory stream handler for the control tar handles extracting
+ it into the temporary meta directory. It only extracts files, it does
+ not create directories, links or anything else. */
+bool debDebFile::ControlExtract::DoItem(Item &Itm,int &Fd)
+{
+ if (Itm.Type != Item::File)
+ return true;
+
+ /* Cleanse the file name, prevent people from trying to unpack into
+ absolute paths, .., etc */
+ for (char *I = Itm.Name; *I != 0; I++)
+ if (*I == '/')
+ *I = '_';
+
+ /* Force the ownership to be root and ensure correct permissions,
+ go-w, the rest are left untouched */
+ Itm.UID = 0;
+ Itm.GID = 0;
+ Itm.Mode &= ~(S_IWGRP | S_IWOTH);
+
+ return pkgDirStream::DoItem(Itm,Fd);
+}
+ /*}}}*/
+
+// MemControlExtract::DoItem - Check if it is the control file /*{{{*/
+// ---------------------------------------------------------------------
+/* This sets up to extract the control block member file into a memory
+ block of just the right size. All other files go into the bit bucket. */
+
+// Upper size limit for control files. Two reasons for having a limit here:
+//
+// 1. We read those files into memory and want to avoid being killed by OOM
+//
+// 2. We allocate (Itm.Size+2)-large arrays, so this can overflow if Itm.Size
+// becomes 2**64-2 or larger. This is obviously
+//
+// 64 MiB seems like a terribly large size that everyone should be happy with.
+static const unsigned long long DEB_CONTROL_SIZE_LIMIT = 64 * 1024 * 1024;
+bool debDebFile::MemControlExtract::DoItem(Item &Itm,int &Fd)
+{
+ // At the control file, allocate buffer memory.
+ if (Member == Itm.Name)
+ {
+ if (Itm.Size > DEB_CONTROL_SIZE_LIMIT)
+ return _error->Error("Control file too large: %llu > %llu bytes", Itm.Size, DEB_CONTROL_SIZE_LIMIT);
+ delete [] Control;
+ Control = new char[Itm.Size+2];
+ IsControl = true;
+ Fd = -2; // Signal to pass to Process
+ Length = Itm.Size;
+ }
+ else
+ IsControl = false;
+
+ return true;
+}
+ /*}}}*/
+// MemControlExtract::Process - Process extracting the control file /*{{{*/
+// ---------------------------------------------------------------------
+/* Just memcopy the block from the tar extractor and put it in the right
+ place in the pre-allocated memory block. */
+bool debDebFile::MemControlExtract::Process(Item &/*Itm*/,const unsigned char *Data,
+ unsigned long long Size,unsigned long long Pos)
+{
+ memcpy(Control + Pos, Data,Size);
+ return true;
+}
+ /*}}}*/
+// MemControlExtract::Read - Read the control information from the deb /*{{{*/
+// ---------------------------------------------------------------------
+/* This uses the internal tar extractor to fetch the control file, and then
+ it parses it into a tag section parser. */
+bool debDebFile::MemControlExtract::Read(debDebFile &Deb)
+{
+ if (Deb.ExtractTarMember(*this, "control.tar") == false)
+ return false;
+
+ if (Control == 0)
+ return true;
+
+ Control[Length] = '\n';
+ Control[Length+1] = '\n';
+ if (Section.Scan(Control,Length+2) == false)
+ return _error->Error(_("Unparsable control file"));
+ return true;
+}
+ /*}}}*/
+// MemControlExtract::TakeControl - Parse a memory block /*{{{*/
+// ---------------------------------------------------------------------
+/* The given memory block is loaded into the parser and parsed as a control
+ record. */
+bool debDebFile::MemControlExtract::TakeControl(const void *Data,unsigned long long Size)
+{
+ if (Size > DEB_CONTROL_SIZE_LIMIT)
+ return _error->Error("Control file too large: %llu > %llu bytes", Size, DEB_CONTROL_SIZE_LIMIT);
+
+ delete [] Control;
+ Control = new char[Size+2];
+ Length = Size;
+ memcpy(Control,Data,Size);
+
+ Control[Length] = '\n';
+ Control[Length+1] = '\n';
+ return Section.Scan(Control,Length+2);
+}
+ /*}}}*/
+
diff --git a/apt-inst/deb/debfile.h b/apt-inst/deb/debfile.h
new file mode 100644
index 0000000..23a76bf
--- /dev/null
+++ b/apt-inst/deb/debfile.h
@@ -0,0 +1,95 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Archive File (.deb)
+
+ This Class handles all the operations performed directly on .deb
+ files. It makes use of the AR and TAR classes to give the necessary
+ external interface.
+
+ There are only two things that can be done with a raw package,
+ extract it's control information and extract the contents itself.
+
+ This should probably subclass an as-yet unwritten super class to
+ produce a generic archive mechanism.
+
+ The memory control file extractor is useful to extract a single file
+ into memory from the control.tar.gz
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBFILE_H
+#define PKGLIB_DEBFILE_H
+
+#include <apt-pkg/arfile.h>
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/tagfile.h>
+
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/md5.h>
+#endif
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/pkgcache.h>
+#endif
+
+class FileFd;
+
+class debDebFile
+{
+ protected:
+
+ FileFd &File;
+ ARArchive AR;
+
+ bool CheckMember(const char *Name);
+
+ public:
+ class ControlExtract;
+ class MemControlExtract;
+
+ bool ExtractTarMember(pkgDirStream &Stream, const char *Name);
+ bool ExtractArchive(pkgDirStream &Stream);
+ const ARArchive::Member *GotoMember(const char *Name);
+ inline FileFd &GetFile() {return File;};
+
+ debDebFile(FileFd &File);
+};
+
+class debDebFile::ControlExtract : public pkgDirStream
+{
+ public:
+
+ virtual bool DoItem(Item &Itm,int &Fd) APT_OVERRIDE;
+};
+
+class debDebFile::MemControlExtract : public pkgDirStream
+{
+ bool IsControl;
+
+ public:
+
+ char *Control;
+ pkgTagSection Section;
+ unsigned long Length;
+ std::string Member;
+
+ // Members from DirStream
+ virtual bool DoItem(Item &Itm,int &Fd) APT_OVERRIDE;
+ virtual bool Process(Item &Itm,const unsigned char *Data,
+ unsigned long long Size,unsigned long long Pos) APT_OVERRIDE;
+
+ // Helpers
+ bool Read(debDebFile &Deb);
+ bool TakeControl(const void *Data,unsigned long long Size);
+
+ MemControlExtract() : IsControl(false), Control(0), Length(0), Member("control") {};
+ MemControlExtract(std::string Member) : IsControl(false), Control(0), Length(0), Member(Member) {};
+ ~MemControlExtract() {delete [] Control;};
+};
+ /*}}}*/
+
+#endif
diff --git a/apt-inst/dirstream.cc b/apt-inst/dirstream.cc
new file mode 100644
index 0000000..d6cf0ab
--- /dev/null
+++ b/apt-inst/dirstream.cc
@@ -0,0 +1,118 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Directory Stream
+
+ This class provides a simple basic extractor that can be used for
+ a number of purposes.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/error.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <apti18n.h>
+ /*}}}*/
+
+// DirStream::DoItem - Process an item /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a very simple extractor, it does not deal with things like
+ overwriting directories with files and so on. */
+bool pkgDirStream::DoItem(Item &Itm,int &Fd)
+{
+ switch (Itm.Type)
+ {
+ case Item::File:
+ {
+ /* Open the output file, NDELAY is used to prevent this from
+ blowing up on device special files.. */
+ int iFd = open(Itm.Name,O_NDELAY|O_WRONLY|O_CREAT|O_TRUNC|O_APPEND,
+ Itm.Mode);
+ if (iFd < 0)
+ return _error->Errno("open",_("Failed to write file %s"),
+ Itm.Name);
+
+ // fchmod deals with umask and fchown sets the ownership
+ if (fchmod(iFd,Itm.Mode) != 0)
+ {
+ close(iFd);
+ return _error->Errno("fchmod",_("Failed to write file %s"), Itm.Name);
+ }
+ if (fchown(iFd,Itm.UID,Itm.GID) != 0 && errno != EPERM)
+ {
+ close(iFd);
+ return _error->Errno("fchown",_("Failed to write file %s"), Itm.Name);
+ }
+ Fd = iFd;
+ return true;
+ }
+
+ case Item::HardLink:
+ case Item::SymbolicLink:
+ case Item::CharDevice:
+ case Item::BlockDevice:
+ case Item::Directory:
+ {
+ struct stat Buf;
+ // check if the dir is already there, if so return true
+ if (stat(Itm.Name,&Buf) == 0)
+ {
+ if(S_ISDIR(Buf.st_mode))
+ return true;
+ // something else is there already, return false
+ return false;
+ }
+ // nothing here, create the dir
+ if(mkdir(Itm.Name,Itm.Mode) < 0)
+ return false;
+ return true;
+ }
+ case Item::FIFO:
+ break;
+ }
+
+ return true;
+}
+ /*}}}*/
+// DirStream::FinishedFile - Finished processing a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgDirStream::FinishedFile(Item &Itm,int Fd)
+{
+ if (Fd < 0)
+ return true;
+
+ /* Set the modification times. The only way it can fail is if someone
+ has futzed with our file, which is intolerable :> */
+ struct timeval times[2];
+ times[0].tv_sec = times[1].tv_sec = Itm.MTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ if (utimes(Itm.Name, times) != 0)
+ _error->Errno("utimes", "Failed to set modification time for %s",Itm.Name);
+
+ if (close(Fd) != 0)
+ return _error->Errno("close",_("Failed to close file %s"),Itm.Name);
+ return true;
+}
+ /*}}}*/
+// DirStream::Fail - Failed processing a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgDirStream::Fail(Item &/*Itm*/, int Fd)
+{
+ if (Fd < 0)
+ return true;
+
+ close(Fd);
+ return false;
+}
+ /*}}}*/
diff --git a/apt-inst/dirstream.h b/apt-inst/dirstream.h
new file mode 100644
index 0000000..0f0e348
--- /dev/null
+++ b/apt-inst/dirstream.h
@@ -0,0 +1,57 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Directory Stream
+
+ When unpacking the contents of the archive are passed into a directory
+ stream class for analysis and processing. The class controls all aspects
+ of actually writing the directory stream from disk. The low level
+ archive handlers are only responsible for decoding the archive format
+ and sending events (via method calls) to the specified directory
+ stream.
+
+ When unpacking a real file the archive handler is passed back a file
+ handle to write the data to, this is to support strange
+ archives+unpacking methods. If that fd is -1 then the file data is
+ simply ignored.
+
+ The provided defaults do the 'Right Thing' for a normal unpacking
+ process (ie 'tar')
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DIRSTREAM_H
+#define PKGLIB_DIRSTREAM_H
+
+#include <apt-pkg/macros.h>
+
+class pkgDirStream
+{
+ public:
+
+ // All possible information about a component
+ struct Item
+ {
+ enum Type_t {File, HardLink, SymbolicLink, CharDevice, BlockDevice,
+ Directory, FIFO} Type;
+ char *Name;
+ char *LinkTarget;
+ unsigned long Mode;
+ unsigned long UID;
+ unsigned long GID;
+ unsigned long long Size;
+ unsigned long MTime;
+ unsigned long Major;
+ unsigned long Minor;
+ };
+
+ virtual bool DoItem(Item &Itm,int &Fd);
+ virtual bool Fail(Item &Itm,int Fd);
+ virtual bool FinishedFile(Item &Itm,int Fd);
+ virtual bool Process(Item &/*Itm*/,const unsigned char * /*Data*/,
+ unsigned long long /*Size*/,unsigned long long /*Pos*/) {return true;};
+ virtual ~pkgDirStream() {};
+};
+
+#endif
diff --git a/apt-inst/dpkg-diffs.txt b/apt-inst/dpkg-diffs.txt
new file mode 100644
index 0000000..d161055
--- /dev/null
+++ b/apt-inst/dpkg-diffs.txt
@@ -0,0 +1,5 @@
+- Replacing directories with files
+ dpkg permits this with the weak condition that the directory is owned only
+ by the package. APT requires that the directory have no files that are not
+ owned by the package. Replaces are specifically not checked to prevent
+ file list corruption.
diff --git a/apt-inst/extract.cc b/apt-inst/extract.cc
new file mode 100644
index 0000000..35fa015
--- /dev/null
+++ b/apt-inst/extract.cc
@@ -0,0 +1,514 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Archive Extraction Directory Stream
+
+ Extraction for each file is a bit of an involved process. Each object
+ undergoes an atomic backup, overwrite, erase sequence. First the
+ object is unpacked to '.dpkg.new' then the original is hardlinked to
+ '.dpkg.tmp' and finally the new object is renamed to overwrite the old
+ one. From an external perspective the file never ceased to exist.
+ After the archive has been successfully unpacked the .dpkg.tmp files
+ are erased. A failure causes all the .dpkg.tmp files to be restored.
+
+ Decisions about unpacking go like this:
+ - Store the original filename in the file listing
+ - Resolve any diversions that would effect this file, all checks
+ below apply to the diverted name, not the real one.
+ - Resolve any symlinked configuration files.
+ - If the existing file does not exist then .dpkg-tmp is checked for.
+ [Note, this is reduced to only check if a file was expected to be
+ there]
+ - If the existing link/file is not a directory then it is replaced
+ regardless
+ - If the existing link/directory is being replaced by a directory then
+ absolutely nothing happens.
+ - If the existing link/directory is being replaced by a link then
+ absolutely nothing happens.
+ - If the existing link/directory is being replaced by a non-directory
+ then this will abort if the package is not the sole owner of the
+ directory. [Note, this is changed to not happen if the directory
+ non-empty - that is, it only includes files that are part of this
+ package - prevents removing user files accidentally.]
+ - If the non-directory exists in the listing database and it
+ does not belong to the current package then an overwrite condition
+ is invoked.
+
+ As we unpack we record the file list differences in the FL cache. If
+ we need to unroll the FL cache knows which files have been unpacked
+ and can undo. When we need to erase then it knows which files have not
+ been unpacked.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/debversion.h>
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/extract.h>
+#include <apt-pkg/filelist.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <iostream>
+#include <string>
+#include <dirent.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+static const char *TempExt = "dpkg-tmp";
+//static const char *NewExt = "dpkg-new";
+
+// Extract::pkgExtract - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgExtract::pkgExtract(pkgFLCache &FLCache,pkgCache::VerIterator Ver) :
+ FLCache(FLCache), Ver(Ver)
+{
+ FLPkg = FLCache.GetPkg(Ver.ParentPkg().Name(),true);
+ if (FLPkg.end() == true)
+ return;
+ Debug = true;
+}
+ /*}}}*/
+// Extract::DoItem - Handle a single item from the stream /*{{{*/
+// ---------------------------------------------------------------------
+/* This performs the setup for the extraction.. */
+bool pkgExtract::DoItem(Item &Itm, int &/*Fd*/)
+{
+ /* Strip any leading/trailing /s from the filename, then copy it to the
+ temp buffer and re-apply the leading / We use a class variable
+ to store the new filename for use by the three extraction funcs */
+ char *End = FileName+1;
+ const char *I = Itm.Name;
+ for (; *I != 0 && *I == '/'; I++);
+ *FileName = '/';
+ for (; *I != 0 && End < FileName + sizeof(FileName); I++, End++)
+ *End = *I;
+ if (End + 20 >= FileName + sizeof(FileName))
+ return _error->Error(_("The path %s is too long"),Itm.Name);
+ for (; End > FileName && End[-1] == '/'; End--);
+ *End = 0;
+ Itm.Name = FileName;
+
+ /* Lookup the file. Nde is the file [group] we are going to write to and
+ RealNde is the actual node we are manipulating. Due to diversions
+ they may be entirely different. */
+ pkgFLCache::NodeIterator Nde = FLCache.GetNode(Itm.Name,End,0,false,false);
+ pkgFLCache::NodeIterator RealNde = Nde;
+
+ // See if the file is already in the file listing
+ unsigned long FileGroup = RealNde->File;
+ for (; RealNde.end() == false && FileGroup == RealNde->File; RealNde++)
+ if (RealNde.RealPackage() == FLPkg)
+ break;
+
+ // Nope, create an entry
+ if (RealNde.end() == true)
+ {
+ RealNde = FLCache.GetNode(Itm.Name,End,FLPkg.Offset(),true,false);
+ if (RealNde.end() == true)
+ return false;
+ RealNde->Flags |= pkgFLCache::Node::NewFile;
+ }
+
+ /* Check if this entry already was unpacked. The only time this should
+ ever happen is if someone has hacked tar to support capabilities, in
+ which case this needs to be modified anyhow.. */
+ if ((RealNde->Flags & pkgFLCache::Node::Unpacked) ==
+ pkgFLCache::Node::Unpacked)
+ return _error->Error(_("Unpacking %s more than once"),Itm.Name);
+
+ if (Nde.end() == true)
+ Nde = RealNde;
+
+ /* Consider a diverted file - We are not permitted to divert directories,
+ but everything else is fair game (including conf files!) */
+ if ((Nde->Flags & pkgFLCache::Node::Diversion) != 0)
+ {
+ if (Itm.Type == Item::Directory)
+ return _error->Error(_("The directory %s is diverted"),Itm.Name);
+
+ /* A package overwriting a diversion target is just the same as
+ overwriting a normally owned file and is checked for below in
+ the overwrites mechanism */
+
+ /* If this package is trying to overwrite the target of a diversion,
+ that is never, ever permitted */
+ pkgFLCache::DiverIterator Div = Nde.Diversion();
+ if (Div.DivertTo() == Nde)
+ return _error->Error(_("The package is trying to write to the "
+ "diversion target %s/%s"),Nde.DirN(),Nde.File());
+
+ // See if it is us and we are following it in the right direction
+ if (Div->OwnerPkg != FLPkg.Offset() && Div.DivertFrom() == Nde)
+ {
+ Nde = Div.DivertTo();
+ End = FileName + snprintf(FileName,sizeof(FileName)-20,"%s/%s",
+ Nde.DirN(),Nde.File());
+ if (End <= FileName)
+ return _error->Error(_("The diversion path is too long"));
+ }
+ }
+
+ // Deal with symlinks and conf files
+ if ((RealNde->Flags & pkgFLCache::Node::NewConfFile) ==
+ pkgFLCache::Node::NewConfFile)
+ {
+ string Res = flNoLink(Itm.Name);
+ if (Res.length() > sizeof(FileName))
+ return _error->Error(_("The path %s is too long"),Res.c_str());
+ if (Debug == true)
+ clog << "Followed conf file from " << FileName << " to " << Res << endl;
+ Itm.Name = strcpy(FileName,Res.c_str());
+ }
+
+ /* Get information about the existing file, and attempt to restore
+ a backup if it does not exist */
+ struct stat LExisting;
+ bool EValid = false;
+ if (lstat(Itm.Name,&LExisting) != 0)
+ {
+ // This is bad news.
+ if (errno != ENOENT)
+ return _error->Errno("stat",_("Failed to stat %s"),Itm.Name);
+
+ // See if we can recover the backup file
+ if (Nde.end() == false)
+ {
+ char Temp[sizeof(FileName)];
+ snprintf(Temp,sizeof(Temp),"%s.%s",Itm.Name,TempExt);
+ if (rename(Temp,Itm.Name) != 0 && errno != ENOENT)
+ return _error->Errno("rename",_("Failed to rename %s to %s"),
+ Temp,Itm.Name);
+ if (stat(Itm.Name,&LExisting) != 0)
+ {
+ if (errno != ENOENT)
+ return _error->Errno("stat",_("Failed to stat %s"),Itm.Name);
+ }
+ else
+ EValid = true;
+ }
+ }
+ else
+ EValid = true;
+
+ /* If the file is a link we need to stat its destination, get the
+ existing file modes */
+ struct stat Existing = LExisting;
+ if (EValid == true && S_ISLNK(Existing.st_mode))
+ {
+ if (stat(Itm.Name,&Existing) != 0)
+ {
+ if (errno != ENOENT)
+ return _error->Errno("stat",_("Failed to stat %s"),Itm.Name);
+ Existing = LExisting;
+ }
+ }
+
+ // We pretend a non-existing file looks like it is a normal file
+ if (EValid == false)
+ Existing.st_mode = S_IFREG;
+
+ /* Okay, at this point 'Existing' is the stat information for the
+ real non-link file */
+
+ /* The only way this can be a no-op is if a directory is being
+ replaced by a directory or by a link */
+ if (S_ISDIR(Existing.st_mode) != 0 &&
+ (Itm.Type == Item::Directory || Itm.Type == Item::SymbolicLink))
+ return true;
+
+ /* Non-Directory being replaced by non-directory. We check for over
+ writes here. */
+ if (Nde.end() == false)
+ {
+ if (HandleOverwrites(Nde) == false)
+ return false;
+ }
+
+ /* Directory being replaced by a non-directory - this needs to see if
+ the package is the owner and then see if the directory would be
+ empty after the package is removed [ie no user files will be
+ erased] */
+ if (S_ISDIR(Existing.st_mode) != 0)
+ {
+ if (CheckDirReplace(Itm.Name) == false)
+ return _error->Error(_("The directory %s is being replaced by a non-directory"),Itm.Name);
+ }
+
+ if (Debug == true)
+ clog << "Extract " << string(Itm.Name,End) << endl;
+/* if (Count != 0)
+ return _error->Error(_("Done"));*/
+
+ return true;
+}
+ /*}}}*/
+// Extract::Finished - Sequence finished, erase the temp files /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+APT_PURE bool pkgExtract::Finished()
+{
+ return true;
+}
+ /*}}}*/
+// Extract::Aborted - Sequence aborted, undo all our unpacking /*{{{*/
+// ---------------------------------------------------------------------
+/* This undoes everything that was done by all calls to the DoItem method
+ and restores the File Listing cache to its original form. It bases its
+ actions on the flags value for each node in the cache. */
+bool pkgExtract::Aborted()
+{
+ if (Debug == true)
+ clog << "Aborted, backing out" << endl;
+
+ pkgFLCache::NodeIterator Files = FLPkg.Files();
+ map_ptrloc *Last = &FLPkg->Files;
+
+ /* Loop over all files, restore those that have been unpacked from their
+ dpkg-tmp entries */
+ while (Files.end() == false)
+ {
+ // Locate the hash bucket for the node and locate its group head
+ pkgFLCache::NodeIterator Nde(FLCache,FLCache.HashNode(Files));
+ for (; Nde.end() == false && Files->File != Nde->File; Nde++);
+ if (Nde.end() == true)
+ return _error->Error(_("Failed to locate node in its hash bucket"));
+
+ if (snprintf(FileName,sizeof(FileName)-20,"%s/%s",
+ Nde.DirN(),Nde.File()) <= 0)
+ return _error->Error(_("The path is too long"));
+
+ // Deal with diversions
+ if ((Nde->Flags & pkgFLCache::Node::Diversion) != 0)
+ {
+ pkgFLCache::DiverIterator Div = Nde.Diversion();
+
+ // See if it is us and we are following it in the right direction
+ if (Div->OwnerPkg != FLPkg.Offset() && Div.DivertFrom() == Nde)
+ {
+ Nde = Div.DivertTo();
+ if (snprintf(FileName,sizeof(FileName)-20,"%s/%s",
+ Nde.DirN(),Nde.File()) <= 0)
+ return _error->Error(_("The diversion path is too long"));
+ }
+ }
+
+ // Deal with overwrites+replaces
+ for (; Nde.end() == false && Files->File == Nde->File; Nde++)
+ {
+ if ((Nde->Flags & pkgFLCache::Node::Replaced) ==
+ pkgFLCache::Node::Replaced)
+ {
+ if (Debug == true)
+ clog << "De-replaced " << FileName << " from " << Nde.RealPackage()->Name << endl;
+ Nde->Flags &= ~pkgFLCache::Node::Replaced;
+ }
+ }
+
+ // Undo the change in the filesystem
+ if (Debug == true)
+ clog << "Backing out " << FileName;
+
+ // Remove a new node
+ if ((Files->Flags & pkgFLCache::Node::NewFile) ==
+ pkgFLCache::Node::NewFile)
+ {
+ if (Debug == true)
+ clog << " [new node]" << endl;
+ pkgFLCache::Node *Tmp = Files;
+ Files++;
+ *Last = Tmp->NextPkg;
+ Tmp->NextPkg = 0;
+
+ FLCache.DropNode(Tmp - FLCache.NodeP);
+ }
+ else
+ {
+ if (Debug == true)
+ clog << endl;
+
+ Last = &Files->NextPkg;
+ Files++;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// Extract::Fail - Extraction of a file Failed /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgExtract::Fail(Item &Itm,int Fd)
+{
+ return pkgDirStream::Fail(Itm,Fd);
+}
+ /*}}}*/
+// Extract::FinishedFile - Finished a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgExtract::FinishedFile(Item &Itm,int Fd)
+{
+ return pkgDirStream::FinishedFile(Itm,Fd);
+}
+ /*}}}*/
+// Extract::HandleOverwrites - See if a replaces covers this overwrite /*{{{*/
+// ---------------------------------------------------------------------
+/* Check if the file is in a package that is being replaced by this
+ package or if the file is being overwritten. Note that if the file
+ is really a directory but it has been erased from the filesystem
+ this will fail with an overwrite message. This is a limitation of the
+ dpkg file information format.
+
+ XX If a new package installs and another package replaces files in this
+ package what should we do? */
+bool pkgExtract::HandleOverwrites(pkgFLCache::NodeIterator Nde,
+ bool DiverCheck)
+{
+ pkgFLCache::NodeIterator TmpNde = Nde;
+ unsigned long DiverOwner = 0;
+ unsigned long FileGroup = Nde->File;
+ for (; Nde.end() == false && FileGroup == Nde->File; Nde++)
+ {
+ if ((Nde->Flags & pkgFLCache::Node::Diversion) != 0)
+ {
+ /* Store the diversion owner if this is the forward direction
+ of the diversion */
+ if (DiverCheck == true)
+ DiverOwner = Nde.Diversion()->OwnerPkg;
+ continue;
+ }
+
+ pkgFLCache::PkgIterator FPkg(FLCache,Nde.RealPackage());
+ if (FPkg.end() == true || FPkg == FLPkg)
+ continue;
+
+ /* This tests trips when we are checking a diversion to see
+ if something has already been diverted by this diversion */
+ if (FPkg.Offset() == DiverOwner)
+ continue;
+
+ // Now see if this package matches one in a replace depends
+ pkgCache::DepIterator Dep = Ver.DependsList();
+ bool Ok = false;
+ for (; Dep.end() == false; ++Dep)
+ {
+ if (Dep->Type != pkgCache::Dep::Replaces)
+ continue;
+
+ // Does the replaces apply to this package?
+ if (strcmp(Dep.TargetPkg().Name(),FPkg.Name()) != 0)
+ continue;
+
+ /* Check the version for match. I do not think CurrentVer can be
+ 0 if we are here.. */
+ pkgCache::PkgIterator Pkg = Dep.TargetPkg();
+ if (Pkg->CurrentVer == 0)
+ {
+ _error->Warning(_("Overwrite package match with no version for %s"),Pkg.Name());
+ continue;
+ }
+
+ // Replaces is met
+ if (debVS.CheckDep(Pkg.CurrentVer().VerStr(),Dep->CompareOp,Dep.TargetVer()) == true)
+ {
+ if (Debug == true)
+ clog << "Replaced file " << Nde.DirN() << '/' << Nde.File() << " from " << Pkg.Name() << endl;
+ Nde->Flags |= pkgFLCache::Node::Replaced;
+ Ok = true;
+ break;
+ }
+ }
+
+ // Negative Hit
+ if (Ok == false)
+ return _error->Error(_("File %s/%s overwrites the one in the package %s"),
+ Nde.DirN(),Nde.File(),FPkg.Name());
+ }
+
+ /* If this is a diversion we might have to recurse to process
+ the other side of it */
+ if ((TmpNde->Flags & pkgFLCache::Node::Diversion) != 0)
+ {
+ pkgFLCache::DiverIterator Div = TmpNde.Diversion();
+ if (Div.DivertTo() == TmpNde)
+ return HandleOverwrites(Div.DivertFrom(),true);
+ }
+
+ return true;
+}
+ /*}}}*/
+// Extract::CheckDirReplace - See if this directory can be erased /*{{{*/
+// ---------------------------------------------------------------------
+/* If this directory is owned by a single package and that package is
+ replacing it with something non-directoryish then dpkg allows this.
+ We increase the requirement to be that the directory is non-empty after
+ the package is removed */
+bool pkgExtract::CheckDirReplace(string Dir,unsigned int Depth)
+{
+ // Looping?
+ if (Depth > 40)
+ return false;
+
+ if (Dir[Dir.size() - 1] != '/')
+ Dir += '/';
+
+ DIR *D = opendir(Dir.c_str());
+ if (D == 0)
+ return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
+
+ string File;
+ for (struct dirent *Dent = readdir(D); Dent != 0; Dent = readdir(D))
+ {
+ // Skip some files
+ if (strcmp(Dent->d_name,".") == 0 ||
+ strcmp(Dent->d_name,"..") == 0)
+ continue;
+
+ // Look up the node
+ File = Dir + Dent->d_name;
+ pkgFLCache::NodeIterator Nde = FLCache.GetNode(File.c_str(),
+ File.c_str() + File.length(),0,false,false);
+
+ // The file is not owned by this package
+ if (Nde.end() != false || Nde.RealPackage() != FLPkg)
+ {
+ closedir(D);
+ return false;
+ }
+
+ // See if it is a directory
+ struct stat St;
+ if (lstat(File.c_str(),&St) != 0)
+ {
+ closedir(D);
+ return _error->Errno("lstat",_("Unable to stat %s"),File.c_str());
+ }
+
+ // Recurse down directories
+ if (S_ISDIR(St.st_mode) != 0)
+ {
+ if (CheckDirReplace(File,Depth + 1) == false)
+ {
+ closedir(D);
+ return false;
+ }
+ }
+ }
+
+ // No conflicts
+ closedir(D);
+ return true;
+}
+ /*}}}*/
diff --git a/apt-inst/extract.h b/apt-inst/extract.h
new file mode 100644
index 0000000..4b4c8d7
--- /dev/null
+++ b/apt-inst/extract.h
@@ -0,0 +1,49 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Archive Extraction Directory Stream
+
+ This Directory Stream implements extraction of an archive into the
+ filesystem. It makes the choices on what files should be unpacked and
+ replaces as well as guiding the actual unpacking.
+
+ When the unpacking sequence is completed one of the two functions,
+ Finished or Aborted must be called.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_EXTRACT_H
+#define PKGLIB_EXTRACT_H
+
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/filelist.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+
+class pkgExtract : public pkgDirStream
+{
+ pkgFLCache &FLCache;
+ pkgCache::VerIterator Ver;
+ pkgFLCache::PkgIterator FLPkg;
+ char FileName[1024];
+ bool Debug;
+
+ bool HandleOverwrites(pkgFLCache::NodeIterator Nde,
+ bool DiverCheck = false);
+ bool CheckDirReplace(std::string Dir,unsigned int Depth = 0);
+
+ public:
+
+ virtual bool DoItem(Item &Itm,int &Fd) APT_OVERRIDE;
+ virtual bool Fail(Item &Itm,int Fd) APT_OVERRIDE;
+ virtual bool FinishedFile(Item &Itm,int Fd) APT_OVERRIDE;
+
+ bool Finished();
+ bool Aborted();
+
+ pkgExtract(pkgFLCache &FLCache,pkgCache::VerIterator Ver);
+};
+
+#endif
diff --git a/apt-inst/filelist.cc b/apt-inst/filelist.cc
new file mode 100644
index 0000000..44b97d0
--- /dev/null
+++ b/apt-inst/filelist.cc
@@ -0,0 +1,586 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ File Listing - Manages a Cache of File -> Package names.
+
+ Diversions add some significant complexity to the system. To keep
+ storage space down in the very special case of a diverted file no
+ extra bytes are allocated in the Node structure. Instead a diversion
+ is inserted directly into the hash table and its flag bit set. Every
+ lookup for that filename will always return the diversion.
+
+ The hash buckets are stored in sorted form, with diversions having
+ the highest sort order. Identical files are assigned the same file
+ pointer, thus after a search all of the nodes owning that file can be
+ found by iterating down the bucket.
+
+ Re-updates of diversions (another extremely special case) are done by
+ marking all diversions as untouched, then loading the entire diversion
+ list again, touching each diversion and then finally going back and
+ releasing all untouched diversions. It is assumed that the diversion
+ table will always be quite small and be a very irregular case.
+
+ Diversions that are user-installed are represented by a package with
+ an empty name string.
+
+ Conf files are handled like diversions by changing the meaning of the
+ Pointer field to point to a conf file entry - again to reduce over
+ head for a special case.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/filelist.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <string.h>
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// FlCache::Header::Header - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Initialize the header variables. These are the defaults used when
+ creating new caches */
+pkgFLCache::Header::Header()
+{
+ Signature = 0xEA3F1295;
+
+ /* Whenever the structures change the major version should be bumped,
+ whenever the generator changes the minor version should be bumped. */
+ MajorVersion = 1;
+ MinorVersion = 0;
+ Dirty = true;
+
+ HeaderSz = sizeof(pkgFLCache::Header);
+ NodeSz = sizeof(pkgFLCache::Node);
+ DirSz = sizeof(pkgFLCache::Directory);
+ PackageSz = sizeof(pkgFLCache::Package);
+ DiversionSz = sizeof(pkgFLCache::Diversion);
+ ConfFileSz = sizeof(pkgFLCache::ConfFile);
+
+ NodeCount = 0;
+ DirCount = 0;
+ PackageCount = 0;
+ DiversionCount = 0;
+ ConfFileCount = 0;
+ HashSize = 1 << 14;
+
+ FileHash = 0;
+ DirTree = 0;
+ Packages = 0;
+ Diversions = 0;
+ UniqNodes = 0;
+ memset(Pools,0,sizeof(Pools));
+}
+ /*}}}*/
+// FLCache::Header::CheckSizes - Check if the two headers have same *sz /*{{{*/
+// ---------------------------------------------------------------------
+/* Compare to make sure we are matching versions */
+APT_PURE bool pkgFLCache::Header::CheckSizes(Header &Against) const
+{
+ if (HeaderSz == Against.HeaderSz &&
+ NodeSz == Against.NodeSz &&
+ DirSz == Against.DirSz &&
+ DiversionSz == Against.DiversionSz &&
+ PackageSz == Against.PackageSz &&
+ ConfFileSz == Against.ConfFileSz)
+ return true;
+ return false;
+}
+ /*}}}*/
+
+// FLCache::pkgFLCache - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* If this is a new cache then a new header and hash table are instantaited
+ otherwise the existing ones are mearly attached */
+pkgFLCache::pkgFLCache(DynamicMMap &Map) : Map(Map)
+{
+ if (_error->PendingError() == true)
+ return;
+
+ LastTreeLookup = 0;
+ LastLookupSize = 0;
+
+ // Apply the typecasts
+ HeaderP = (Header *)Map.Data();
+ NodeP = (Node *)Map.Data();
+ DirP = (Directory *)Map.Data();
+ DiverP = (Diversion *)Map.Data();
+ PkgP = (Package *)Map.Data();
+ ConfP = (ConfFile *)Map.Data();
+ StrP = (char *)Map.Data();
+ AnyP = (unsigned char *)Map.Data();
+
+ // New mapping, create the basic cache structures
+ if (Map.Size() == 0)
+ {
+ Map.RawAllocate(sizeof(pkgFLCache::Header));
+ *HeaderP = pkgFLCache::Header();
+ HeaderP->FileHash = Map.RawAllocate(sizeof(pkgFLCache::Node)*HeaderP->HashSize,
+ sizeof(pkgFLCache::Node))/sizeof(pkgFLCache::Node);
+ }
+
+ FileHash = NodeP + HeaderP->FileHash;
+
+ // Setup the dynamic map manager
+ HeaderP->Dirty = true;
+ Map.Sync(0,sizeof(pkgFLCache::Header));
+ Map.UsePools(*HeaderP->Pools,sizeof(HeaderP->Pools)/sizeof(HeaderP->Pools[0]));
+}
+ /*}}}*/
+// FLCache::TreeLookup - Perform a lookup in a generic tree /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a simple generic tree lookup. The first three entries of
+ the Directory structure are used as a template, but any other similar
+ structure could be used in it's place. */
+map_ptrloc pkgFLCache::TreeLookup(map_ptrloc *Base,const char *Text,
+ const char *TextEnd,unsigned long Size,
+ unsigned int *Count,bool Insert)
+{
+ pkgFLCache::Directory *Dir;
+
+ // Check our last entry cache
+ if (LastTreeLookup != 0 && LastLookupSize == Size)
+ {
+ Dir = (pkgFLCache::Directory *)(AnyP + LastTreeLookup*Size);
+ if (stringcmp(Text,TextEnd,StrP + Dir->Name) == 0)
+ return LastTreeLookup;
+ }
+
+ while (1)
+ {
+ // Allocate a new one
+ if (*Base == 0)
+ {
+ if (Insert == false)
+ return 0;
+
+ *Base = Map.Allocate(Size);
+ if (*Base == 0)
+ return 0;
+
+ (*Count)++;
+ Dir = (pkgFLCache::Directory *)(AnyP + *Base*Size);
+ Dir->Name = Map.WriteString(Text,TextEnd - Text);
+ LastTreeLookup = *Base;
+ LastLookupSize = Size;
+ return *Base;
+ }
+
+ // Compare this node
+ Dir = (pkgFLCache::Directory *)(AnyP + *Base*Size);
+ int Res = stringcmp(Text,TextEnd,StrP + Dir->Name);
+ if (Res == 0)
+ {
+ LastTreeLookup = *Base;
+ LastLookupSize = Size;
+ return *Base;
+ }
+
+ if (Res > 0)
+ Base = &Dir->Left;
+ if (Res < 0)
+ Base = &Dir->Right;
+ }
+}
+ /*}}}*/
+// FLCache::PrintTree - Print out a tree /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a simple generic tree dumper, meant for debugging. */
+void pkgFLCache::PrintTree(map_ptrloc Base,unsigned long Size)
+{
+ if (Base == 0)
+ return;
+
+ pkgFLCache::Directory *Dir = (pkgFLCache::Directory *)(AnyP + Base*Size);
+ PrintTree(Dir->Left,Size);
+ cout << (StrP + Dir->Name) << endl;
+ PrintTree(Dir->Right,Size);
+}
+ /*}}}*/
+// FLCache::GetPkg - Get a package pointer /*{{{*/
+// ---------------------------------------------------------------------
+/* Locate a package by name in it's tree, this is just a wrapper for
+ TreeLookup */
+pkgFLCache::PkgIterator pkgFLCache::GetPkg(const char *Name,const char *NameEnd,
+ bool Insert)
+{
+ if (NameEnd == 0)
+ NameEnd = Name + strlen(Name);
+
+ map_ptrloc Pos = TreeLookup(&HeaderP->Packages,Name,NameEnd,
+ sizeof(pkgFLCache::Package),
+ &HeaderP->PackageCount,Insert);
+ if (Pos == 0)
+ return pkgFLCache::PkgIterator();
+ return pkgFLCache::PkgIterator(*this,PkgP + Pos);
+}
+ /*}}}*/
+// FLCache::GetNode - Get the node associated with the filename /*{{{*/
+// ---------------------------------------------------------------------
+/* Lookup a node in the hash table. If Insert is true then a new node is
+ always inserted. The hash table can have multiple instances of a
+ single name available. A search returns the first. It is important
+ that additions for the same name insert after the first entry of
+ the name group. */
+pkgFLCache::NodeIterator pkgFLCache::GetNode(const char *Name,
+ const char *NameEnd,
+ map_ptrloc Loc,
+ bool Insert,bool Divert)
+{
+ // Split the name into file and directory, hashing as it is copied
+ const char *File = Name;
+ unsigned long HashPos = 0;
+ for (const char *I = Name; I < NameEnd; I++)
+ {
+ HashPos = 1637*HashPos + *I;
+ if (*I == '/')
+ File = I;
+ }
+
+ // Search for it
+ Node *Hash = NodeP + HeaderP->FileHash + (HashPos % HeaderP->HashSize);
+ int Res = 0;
+ map_ptrloc FilePtr = 0;
+ while (Hash->Pointer != 0)
+ {
+ // Compare
+ Res = stringcmp(File+1,NameEnd,StrP + Hash->File);
+ if (Res == 0)
+ Res = stringcmp(Name,File,StrP + DirP[Hash->Dir].Name);
+
+ // Diversion?
+ if (Res == 0 && Insert == true)
+ {
+ /* Dir and File match exactly, we need to reuse the file name
+ when we link it in */
+ FilePtr = Hash->File;
+ Res = Divert - ((Hash->Flags & Node::Diversion) == Node::Diversion);
+ }
+
+ // Is a match
+ if (Res == 0)
+ {
+ if (Insert == false)
+ return NodeIterator(*this,Hash);
+
+ // Only one diversion per name!
+ if (Divert == true)
+ return NodeIterator(*this,Hash);
+ break;
+ }
+
+ // Out of sort order
+ if (Res > 0)
+ break;
+
+ if (Hash->Next != 0)
+ Hash = NodeP + Hash->Next;
+ else
+ break;
+ }
+
+ // Fail, not found
+ if (Insert == false)
+ return NodeIterator(*this);
+
+ // Find a directory node
+ map_ptrloc Dir = TreeLookup(&HeaderP->DirTree,Name,File,
+ sizeof(pkgFLCache::Directory),
+ &HeaderP->DirCount,true);
+ if (Dir == 0)
+ return NodeIterator(*this);
+
+ // Allocate a new node
+ if (Hash->Pointer != 0)
+ {
+ // Overwrite or append
+ if (Res > 0)
+ {
+ Node *Next = NodeP + Map.Allocate(sizeof(*Hash));
+ if (Next == NodeP)
+ return NodeIterator(*this);
+ *Next = *Hash;
+ Hash->Next = Next - NodeP;
+ }
+ else
+ {
+ unsigned long NewNext = Map.Allocate(sizeof(*Hash));
+ if (NewNext == 0)
+ return NodeIterator(*this);
+ NodeP[NewNext].Next = Hash->Next;
+ Hash->Next = NewNext;
+ Hash = NodeP + Hash->Next;
+ }
+ }
+
+ // Insert into the new item
+ Hash->Dir = Dir;
+ Hash->Pointer = Loc;
+ Hash->Flags = 0;
+ if (Divert == true)
+ Hash->Flags |= Node::Diversion;
+
+ if (FilePtr != 0)
+ Hash->File = FilePtr;
+ else
+ {
+ HeaderP->UniqNodes++;
+ Hash->File = Map.WriteString(File+1,NameEnd - File-1);
+ }
+
+ // Link the node to the package list
+ if (Divert == false && Loc == 0)
+ {
+ Hash->Next = PkgP[Loc].Files;
+ PkgP[Loc].Files = Hash - NodeP;
+ }
+
+ HeaderP->NodeCount++;
+ return NodeIterator(*this,Hash);
+}
+ /*}}}*/
+// FLCache::HashNode - Return the hash bucket for the node /*{{{*/
+// ---------------------------------------------------------------------
+/* This is one of two hashing functions. The other is inlined into the
+ GetNode routine. */
+APT_PURE pkgFLCache::Node *pkgFLCache::HashNode(NodeIterator const &Nde)
+{
+ // Hash the node
+ unsigned long HashPos = 0;
+ for (const char *I = Nde.DirN(); *I != 0; I++)
+ HashPos = 1637*HashPos + *I;
+ HashPos = 1637*HashPos + '/';
+ for (const char *I = Nde.File(); *I != 0; I++)
+ HashPos = 1637*HashPos + *I;
+ return NodeP + HeaderP->FileHash + (HashPos % HeaderP->HashSize);
+}
+ /*}}}*/
+// FLCache::DropNode - Drop a node from the hash table /*{{{*/
+// ---------------------------------------------------------------------
+/* This erases a node from the hash table. Note that this does not unlink
+ the node from the package linked list. */
+void pkgFLCache::DropNode(map_ptrloc N)
+{
+ if (N == 0)
+ return;
+
+ NodeIterator Nde(*this,NodeP + N);
+
+ if (Nde->NextPkg != 0)
+ _error->Warning(_("DropNode called on still linked node"));
+
+ // Locate it in the hash table
+ Node *Last = 0;
+ Node *Hash = HashNode(Nde);
+ while (Hash->Pointer != 0)
+ {
+ // Got it
+ if (Hash == Nde)
+ {
+ // Top of the bucket..
+ if (Last == 0)
+ {
+ Hash->Pointer = 0;
+ if (Hash->Next == 0)
+ return;
+ *Hash = NodeP[Hash->Next];
+ // Release Hash->Next
+ return;
+ }
+ Last->Next = Hash->Next;
+ // Release Hash
+ return;
+ }
+
+ Last = Hash;
+ if (Hash->Next != 0)
+ Hash = NodeP + Hash->Next;
+ else
+ break;
+ }
+
+ _error->Error(_("Failed to locate the hash element!"));
+}
+ /*}}}*/
+// FLCache::BeginDiverLoad - Start reading new diversions /*{{{*/
+// ---------------------------------------------------------------------
+/* Tag all the diversions as untouched */
+void pkgFLCache::BeginDiverLoad()
+{
+ for (DiverIterator I = DiverBegin(); I.end() == false; I++)
+ I->Flags = 0;
+}
+ /*}}}*/
+// FLCache::FinishDiverLoad - Finish up a new diversion load /*{{{*/
+// ---------------------------------------------------------------------
+/* This drops any untouched diversions. In effect removing any diversions
+ that where not loaded (ie missing from the diversion file) */
+void pkgFLCache::FinishDiverLoad()
+{
+ map_ptrloc *Cur = &HeaderP->Diversions;
+ while (*Cur != 0)
+ {
+ Diversion *Div = DiverP + *Cur;
+ if ((Div->Flags & Diversion::Touched) == Diversion::Touched)
+ {
+ Cur = &Div->Next;
+ continue;
+ }
+
+ // Purge!
+ DropNode(Div->DivertTo);
+ DropNode(Div->DivertFrom);
+ *Cur = Div->Next;
+ }
+}
+ /*}}}*/
+// FLCache::AddDiversion - Add a new diversion /*{{{*/
+// ---------------------------------------------------------------------
+/* Add a new diversion to the diverion tables and make sure that it is
+ unique and non-chaining. */
+bool pkgFLCache::AddDiversion(PkgIterator const &Owner,
+ const char *From,const char *To)
+{
+ /* Locate the two hash nodes we are going to manipulate. If there
+ are pre-existing diversions then they will be returned */
+ NodeIterator FromN = GetNode(From,From+strlen(From),0,true,true);
+ NodeIterator ToN = GetNode(To,To+strlen(To),0,true,true);
+ if (FromN.end() == true || ToN.end() == true)
+ return _error->Error(_("Failed to allocate diversion"));
+
+ // Should never happen
+ if ((FromN->Flags & Node::Diversion) != Node::Diversion ||
+ (ToN->Flags & Node::Diversion) != Node::Diversion)
+ return _error->Error(_("Internal error in AddDiversion"));
+
+ // Now, try to reclaim an existing diversion..
+ map_ptrloc Diver = 0;
+ if (FromN->Pointer != 0)
+ Diver = FromN->Pointer;
+
+ /* Make sure from and to point to the same diversion, if they don't
+ then we are trying to intermix diversions - very bad */
+ if (ToN->Pointer != 0 && ToN->Pointer != Diver)
+ {
+ // It could be that the other diversion is no longer in use
+ if ((DiverP[ToN->Pointer].Flags & Diversion::Touched) == Diversion::Touched)
+ return _error->Error(_("Trying to overwrite a diversion, %s -> %s and %s/%s"),
+ From,To,ToN.File(),ToN.Dir().Name());
+
+ // We can erase it.
+ Diversion *Div = DiverP + ToN->Pointer;
+ ToN->Pointer = 0;
+
+ if (Div->DivertTo == ToN.Offset())
+ Div->DivertTo = 0;
+ if (Div->DivertFrom == ToN.Offset())
+ Div->DivertFrom = 0;
+
+ // This diversion will be cleaned up by FinishDiverLoad
+ }
+
+ // Allocate a new diversion
+ if (Diver == 0)
+ {
+ Diver = Map.Allocate(sizeof(Diversion));
+ if (Diver == 0)
+ return false;
+ DiverP[Diver].Next = HeaderP->Diversions;
+ HeaderP->Diversions = Diver;
+ HeaderP->DiversionCount++;
+ }
+
+ // Can only have one diversion of the same files
+ Diversion *Div = DiverP + Diver;
+ if ((Div->Flags & Diversion::Touched) == Diversion::Touched)
+ return _error->Error(_("Double add of diversion %s -> %s"),From,To);
+
+ // Setup the From/To links
+ if (Div->DivertFrom != FromN.Offset() && Div->DivertFrom != ToN.Offset())
+ DropNode(Div->DivertFrom);
+ Div->DivertFrom = FromN.Offset();
+ if (Div->DivertTo != FromN.Offset() && Div->DivertTo != ToN.Offset())
+ DropNode(Div->DivertTo);
+ Div->DivertTo = ToN.Offset();
+
+ // Link it to the two nodes
+ FromN->Pointer = Diver;
+ ToN->Pointer = Diver;
+
+ // And the package
+ Div->OwnerPkg = Owner.Offset();
+ Div->Flags |= Diversion::Touched;
+
+ return true;
+}
+ /*}}}*/
+// FLCache::AddConfFile - Add a new configuration file /*{{{*/
+// ---------------------------------------------------------------------
+/* This simply adds a new conf file node to the hash table. This is only
+ used by the status file reader. It associates a hash with each conf
+ file entry that exists in the status file and the list file for
+ the proper package. Duplicate conf files (across packages) are left
+ up to other routines to deal with. */
+bool pkgFLCache::AddConfFile(const char *Name,const char *NameEnd,
+ PkgIterator const &Owner,
+ const unsigned char *Sum)
+{
+ NodeIterator Nde = GetNode(Name,NameEnd,0,false,false);
+ if (Nde.end() == true)
+ return true;
+
+ unsigned long File = Nde->File;
+ for (; Nde->File == File && Nde.end() == false; Nde++)
+ {
+ if (Nde.RealPackage() != Owner)
+ continue;
+
+ if ((Nde->Flags & Node::ConfFile) == Node::ConfFile)
+ return _error->Error(_("Duplicate conf file %s/%s"),Nde.DirN(),Nde.File());
+
+ // Allocate a new conf file structure
+ map_ptrloc Conf = Map.Allocate(sizeof(ConfFile));
+ if (Conf == 0)
+ return false;
+ ConfP[Conf].OwnerPkg = Owner.Offset();
+ memcpy(ConfP[Conf].MD5,Sum,sizeof(ConfP[Conf].MD5));
+
+ Nde->Pointer = Conf;
+ Nde->Flags |= Node::ConfFile;
+ return true;
+ }
+
+ /* This means the conf file has been replaced, but the entry in the
+ status file was not updated */
+ return true;
+}
+ /*}}}*/
+
+// NodeIterator::RealPackage - Return the package for this node /*{{{*/
+// ---------------------------------------------------------------------
+/* Since the package pointer is indirected in all sorts of interesting ways
+ this is used to get a pointer to the owning package */
+APT_PURE pkgFLCache::Package *pkgFLCache::NodeIterator::RealPackage() const
+{
+ if (Nde->Pointer == 0)
+ return 0;
+
+ if ((Nde->Flags & Node::ConfFile) == Node::ConfFile)
+ return Owner->PkgP + Owner->ConfP[Nde->Pointer].OwnerPkg;
+
+ // Diversions are ignored
+ if ((Nde->Flags & Node::Diversion) == Node::Diversion)
+ return 0;
+
+ return Owner->PkgP + Nde->Pointer;
+}
+ /*}}}*/
diff --git a/apt-inst/filelist.h b/apt-inst/filelist.h
new file mode 100644
index 0000000..7fe43de
--- /dev/null
+++ b/apt-inst/filelist.h
@@ -0,0 +1,312 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ File Listing - Manages a Cache of File -> Package names.
+
+ This is identical to the Package cache, except that the generator
+ (which is much simpler) is integrated directly into the main class,
+ and it has been designed to handle live updates.
+
+ The storage content of the class is maintained in a memory map and is
+ written directly to the file system. Performance is traded against
+ space to give something that performs well and remains small.
+ The average per file usage is 32 bytes which yields about a meg every
+ 36k files. Directory paths are collected into a binary tree and stored
+ only once, this offsets the cost of the hash nodes enough to keep
+ memory usage slightly less than the sum of the filenames.
+
+ The file names are stored into a fixed size chained hash table that is
+ linked to the package name and to the directory component.
+
+ Each file node has a set of associated flags that indicate the current
+ state of the file.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_FILELIST_H
+#define PKGLIB_FILELIST_H
+
+#include <apt-pkg/mmap.h>
+
+#include <cstring>
+#include <string>
+
+class pkgFLCache
+{
+ public:
+ struct Header;
+ struct Node;
+ struct Directory;
+ struct Package;
+ struct Diversion;
+ struct ConfFile;
+
+ class NodeIterator;
+ class DirIterator;
+ class PkgIterator;
+ class DiverIterator;
+
+ protected:
+ std::string CacheFile;
+ DynamicMMap &Map;
+ map_ptrloc LastTreeLookup;
+ unsigned long LastLookupSize;
+
+ // Helpers for the addition algorithms
+ map_ptrloc TreeLookup(map_ptrloc *Base,const char *Text,const char *TextEnd,
+ unsigned long Size,unsigned int *Count = 0,
+ bool Insert = false);
+
+ public:
+
+ // Pointers to the arrays of items
+ Header *HeaderP;
+ Node *NodeP;
+ Directory *DirP;
+ Package *PkgP;
+ Diversion *DiverP;
+ ConfFile *ConfP;
+ char *StrP;
+ unsigned char *AnyP;
+
+ // Quick accessors
+ Node *FileHash;
+
+ // Accessors
+ Header &Head() {return *HeaderP;};
+ void PrintTree(map_ptrloc Base,unsigned long Size);
+
+ // Add/Find things
+ PkgIterator GetPkg(const char *Name,const char *End,bool Insert);
+ inline PkgIterator GetPkg(const char *Name,bool Insert);
+ NodeIterator GetNode(const char *Name,
+ const char *NameEnd,
+ map_ptrloc Loc,
+ bool Insert,bool Divert);
+ Node *HashNode(NodeIterator const &N);
+ void DropNode(map_ptrloc Node);
+
+ inline DiverIterator DiverBegin();
+
+ // Diversion control
+ void BeginDiverLoad();
+ void FinishDiverLoad();
+ bool AddDiversion(PkgIterator const &Owner,const char *From,
+ const char *To);
+ bool AddConfFile(const char *Name,const char *NameEnd,
+ PkgIterator const &Owner,const unsigned char *Sum);
+
+ pkgFLCache(DynamicMMap &Map);
+// ~pkgFLCache();
+};
+
+struct pkgFLCache::Header
+{
+ // Signature information
+ unsigned long Signature;
+ short MajorVersion;
+ short MinorVersion;
+ bool Dirty;
+
+ // Size of structure values
+ unsigned HeaderSz;
+ unsigned NodeSz;
+ unsigned DirSz;
+ unsigned PackageSz;
+ unsigned DiversionSz;
+ unsigned ConfFileSz;
+
+ // Structure Counts;
+ unsigned int NodeCount;
+ unsigned int DirCount;
+ unsigned int PackageCount;
+ unsigned int DiversionCount;
+ unsigned int ConfFileCount;
+ unsigned int HashSize;
+ unsigned long UniqNodes;
+
+ // Offsets
+ map_ptrloc FileHash;
+ map_ptrloc DirTree;
+ map_ptrloc Packages;
+ map_ptrloc Diversions;
+
+ /* Allocation pools, there should be one of these for each structure
+ excluding the header */
+ DynamicMMap::Pool Pools[5];
+
+ bool CheckSizes(Header &Against) const;
+ Header();
+};
+
+/* The bit field is used to advoid incurring an extra 4 bytes x 40000,
+ Pointer is the most infrequently used member of the structure */
+struct pkgFLCache::Node
+{
+ map_ptrloc Dir; // Dir
+ map_ptrloc File; // String
+ unsigned Pointer:24; // Package/Diversion/ConfFile
+ unsigned Flags:8; // Package
+ map_ptrloc Next; // Node
+ map_ptrloc NextPkg; // Node
+
+ enum Flags {Diversion = (1<<0),ConfFile = (1<<1),
+ NewConfFile = (1<<2),NewFile = (1<<3),
+ Unpacked = (1<<4),Replaced = (1<<5)};
+};
+
+struct pkgFLCache::Directory
+{
+ map_ptrloc Left; // Directory
+ map_ptrloc Right; // Directory
+ map_ptrloc Name; // String
+};
+
+struct pkgFLCache::Package
+{
+ map_ptrloc Left; // Package
+ map_ptrloc Right; // Package
+ map_ptrloc Name; // String
+ map_ptrloc Files; // Node
+};
+
+struct pkgFLCache::Diversion
+{
+ map_ptrloc OwnerPkg; // Package
+ map_ptrloc DivertFrom; // Node
+ map_ptrloc DivertTo; // String
+
+ map_ptrloc Next; // Diversion
+ unsigned long Flags;
+
+ enum Flags {Touched = (1<<0)};
+};
+
+struct pkgFLCache::ConfFile
+{
+ map_ptrloc OwnerPkg; // Package
+ unsigned char MD5[16];
+};
+
+class pkgFLCache::PkgIterator
+{
+ Package *Pkg;
+ pkgFLCache *Owner;
+
+ public:
+
+ inline bool end() const {return Owner == 0 || Pkg == Owner->PkgP?true:false;}
+
+ // Accessors
+ inline Package *operator ->() {return Pkg;}
+ inline Package const *operator ->() const {return Pkg;}
+ inline Package const &operator *() const {return *Pkg;}
+ inline operator Package *() {return Pkg == Owner->PkgP?0:Pkg;}
+ inline operator Package const *() const {return Pkg == Owner->PkgP?0:Pkg;}
+
+ inline unsigned long Offset() const {return Pkg - Owner->PkgP;}
+ inline const char *Name() const {return Pkg->Name == 0?0:Owner->StrP + Pkg->Name;}
+ inline pkgFLCache::NodeIterator Files() const;
+
+ PkgIterator() : Pkg(0), Owner(0) {}
+ PkgIterator(pkgFLCache &Owner,Package *Trg) : Pkg(Trg), Owner(&Owner) {}
+};
+
+class pkgFLCache::DirIterator
+{
+ Directory *Dir;
+ pkgFLCache *Owner;
+
+ public:
+
+ // Accessors
+ inline Directory *operator ->() {return Dir;}
+ inline Directory const *operator ->() const {return Dir;}
+ inline Directory const &operator *() const {return *Dir;}
+ inline operator Directory *() {return Dir == Owner->DirP?0:Dir;}
+ inline operator Directory const *() const {return Dir == Owner->DirP?0:Dir;}
+
+ inline const char *Name() const {return Dir->Name == 0?0:Owner->StrP + Dir->Name;}
+
+ DirIterator() : Dir(0), Owner(0) {}
+ DirIterator(pkgFLCache &Owner,Directory *Trg) : Dir(Trg), Owner(&Owner) {}
+};
+
+class pkgFLCache::DiverIterator
+{
+ Diversion *Diver;
+ pkgFLCache *Owner;
+
+ public:
+
+ // Iteration
+ void operator ++(int) {if (Diver != Owner->DiverP) Diver = Owner->DiverP + Diver->Next;}
+ inline void operator ++() {operator ++(0);}
+ inline bool end() const {return Owner == 0 || Diver == Owner->DiverP;}
+
+ // Accessors
+ inline Diversion *operator ->() {return Diver;}
+ inline Diversion const *operator ->() const {return Diver;}
+ inline Diversion const &operator *() const {return *Diver;}
+ inline operator Diversion *() {return Diver == Owner->DiverP?0:Diver;}
+ inline operator Diversion const *() const {return Diver == Owner->DiverP?0:Diver;}
+
+ inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Diver->OwnerPkg);}
+ inline NodeIterator DivertFrom() const;
+ inline NodeIterator DivertTo() const;
+
+ DiverIterator() : Diver(0), Owner(0) {};
+ DiverIterator(pkgFLCache &Owner,Diversion *Trg) : Diver(Trg), Owner(&Owner) {}
+};
+
+class pkgFLCache::NodeIterator
+{
+ Node *Nde;
+ enum {NdePkg, NdeHash} Type;
+ pkgFLCache *Owner;
+
+ public:
+
+ // Iteration
+ void operator ++(int) {if (Nde != Owner->NodeP) Nde = Owner->NodeP +
+ (Type == NdePkg?Nde->NextPkg:Nde->Next);}
+ inline void operator ++() {operator ++(0);}
+ inline bool end() const {return Owner == 0 || Nde == Owner->NodeP;}
+
+ // Accessors
+ inline Node *operator ->() {return Nde;}
+ inline Node const *operator ->() const {return Nde;}
+ inline Node const &operator *() const {return *Nde;}
+ inline operator Node *() {return Nde == Owner->NodeP?0:Nde;}
+ inline operator Node const *() const {return Nde == Owner->NodeP?0:Nde;}
+ inline unsigned long Offset() const {return Nde - Owner->NodeP;}
+ inline DirIterator Dir() const {return DirIterator(*Owner,Owner->DirP + Nde->Dir);}
+ inline DiverIterator Diversion() const {return DiverIterator(*Owner,Owner->DiverP + Nde->Pointer);}
+ inline const char *File() const {return Nde->File == 0?0:Owner->StrP + Nde->File;}
+ inline const char *DirN() const {return Owner->StrP + Owner->DirP[Nde->Dir].Name;}
+ Package *RealPackage() const;
+
+ NodeIterator() : Nde(0), Type(NdeHash), Owner(0) {};
+ NodeIterator(pkgFLCache &Owner) : Nde(Owner.NodeP), Type(NdeHash), Owner(&Owner) {}
+ NodeIterator(pkgFLCache &Owner,Node *Trg) : Nde(Trg), Type(NdeHash), Owner(&Owner) {}
+ NodeIterator(pkgFLCache &Owner,Node *Trg,Package *) : Nde(Trg), Type(NdePkg), Owner(&Owner) {}
+};
+
+/* Inlines with forward references that cannot be included directly in their
+ respsective classes */
+inline pkgFLCache::NodeIterator pkgFLCache::DiverIterator::DivertFrom() const
+ {return NodeIterator(*Owner,Owner->NodeP + Diver->DivertFrom);}
+inline pkgFLCache::NodeIterator pkgFLCache::DiverIterator::DivertTo() const
+ {return NodeIterator(*Owner,Owner->NodeP + Diver->DivertTo);}
+
+inline pkgFLCache::NodeIterator pkgFLCache::PkgIterator::Files() const
+ {return NodeIterator(*Owner,Owner->NodeP + Pkg->Files,Pkg);}
+
+inline pkgFLCache::DiverIterator pkgFLCache::DiverBegin()
+ {return DiverIterator(*this,DiverP + HeaderP->Diversions);}
+
+inline pkgFLCache::PkgIterator pkgFLCache::GetPkg(const char *Name,bool Insert)
+ {return GetPkg(Name,Name+strlen(Name),Insert);}
+
+#endif
diff --git a/apt-pkg/CMakeLists.txt b/apt-pkg/CMakeLists.txt
new file mode 100644
index 0000000..ce73c6a
--- /dev/null
+++ b/apt-pkg/CMakeLists.txt
@@ -0,0 +1,76 @@
+# Include apt-pkg directly, as some files have #include <system.h>
+include_directories(${PROJECT_BINARY_DIR}/include/apt-pkg)
+
+add_definitions("-DAPT_PKG_EXPOSE_STRING_VIEW")
+
+file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/apt-pkg/)
+execute_process(COMMAND ${PERL_EXECUTABLE} ${PROJECT_SOURCE_DIR}/triehash/triehash.pl
+ --ignore-case
+ --header ${PROJECT_BINARY_DIR}/include/apt-pkg/tagfile-keys.h
+ --code ${CMAKE_CURRENT_BINARY_DIR}/tagfile-keys.cc
+ --enum-class
+ --enum-name pkgTagSection::Key
+ --function-name pkgTagHash
+ --include "<apt-pkg/tagfile.h>"
+ ${CMAKE_CURRENT_SOURCE_DIR}/tagfile-keys.list)
+set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "tagfile-keys.list")
+
+
+# Set the version of the library
+execute_process(COMMAND awk -v ORS=. "/^\#define APT_PKG_M/ {print \$3}"
+ COMMAND sed "s/\\.\$//"
+ INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/contrib/macros.h
+ OUTPUT_VARIABLE MAJOR OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND grep "^#define APT_PKG_RELEASE"
+ COMMAND cut -d " " -f 3
+ INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/contrib/macros.h
+ OUTPUT_VARIABLE MINOR OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+message(STATUS "Building libapt-pkg ${MAJOR} (release ${MINOR})")
+set(APT_PKG_MAJOR ${MAJOR} PARENT_SCOPE) # exporting for methods/CMakeLists.txt
+
+# Definition of the C++ files used to build the library - note that this
+# is expanded at CMake time, so you have to rerun cmake if you add or remove
+# a file (you can just run cmake . in the build directory)
+file(GLOB_RECURSE library "*.cc" "${CMAKE_CURRENT_BINARY_DIR}/tagfile-keys.cc")
+file(GLOB_RECURSE headers "*.h")
+
+# Create a library using the C++ files
+add_library(apt-pkg SHARED ${library})
+add_dependencies(apt-pkg apt-pkg-versionscript)
+# Link the library and set the SONAME
+target_include_directories(apt-pkg
+ PRIVATE ${ZLIB_INCLUDE_DIRS}
+ ${BZIP2_INCLUDE_DIR}
+ ${LZMA_INCLUDE_DIRS}
+ ${LZ4_INCLUDE_DIRS}
+ $<$<BOOL:${ZSTD_FOUND}>:${ZSTD_INCLUDE_DIRS}>
+ $<$<BOOL:${UDEV_FOUND}>:${UDEV_INCLUDE_DIRS}>
+ $<$<BOOL:${SYSTEMD_FOUND}>:${SYSTEMD_INCLUDE_DIRS}>
+ ${ICONV_INCLUDE_DIRS}
+)
+
+target_link_libraries(apt-pkg
+ PRIVATE -lutil ${CMAKE_DL_LIBS} ${RESOLV_LIBRARIES}
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${ZLIB_LIBRARIES}
+ ${BZIP2_LIBRARIES}
+ ${LZMA_LIBRARIES}
+ ${LZ4_LIBRARIES}
+ $<$<BOOL:${ZSTD_FOUND}>:${ZSTD_LIBRARIES}>
+ $<$<BOOL:${UDEV_FOUND}>:${UDEV_LIBRARIES}>
+ $<$<BOOL:${SYSTEMD_FOUND}>:${SYSTEMD_LIBRARIES}>
+ ${ICONV_LIBRARIES}
+)
+set_target_properties(apt-pkg PROPERTIES VERSION ${MAJOR}.${MINOR})
+set_target_properties(apt-pkg PROPERTIES SOVERSION ${MAJOR})
+add_version_script(apt-pkg)
+
+# Install the library and the header files
+install(TARGETS apt-pkg LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(FILES ${headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/apt-pkg)
+flatify(${PROJECT_BINARY_DIR}/include/apt-pkg/ "${headers}")
+
+if(CMAKE_BUILD_TYPE STREQUAL "Coverage")
+ target_link_libraries(apt-pkg PUBLIC noprofile)
+endif()
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
new file mode 100644
index 0000000..606c949
--- /dev/null
+++ b/apt-pkg/acquire-item.cc
@@ -0,0 +1,4078 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Item - Item to acquire
+
+ Each item can download to exactly one file at a time. This means you
+ cannot create an item that fetches two uri's to two files at the same
+ time. The pkgAcqIndex class creates a second class upon instantiation
+ to fetch the other index files because of this.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire-worker.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/netrc.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <algorithm>
+#include <ctime>
+#include <chrono>
+#include <iostream>
+#include <memory>
+#include <numeric>
+#include <random>
+#include <sstream>
+#include <string>
+#include <unordered_set>
+#include <vector>
+#include <errno.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+static std::string GetPartialFileName(std::string const &file) /*{{{*/
+{
+ std::string DestFile = _config->FindDir("Dir::State::lists") + "partial/";
+ DestFile += file;
+ return DestFile;
+}
+ /*}}}*/
+static std::string GetPartialFileNameFromURI(std::string const &uri) /*{{{*/
+{
+ return GetPartialFileName(URItoFileName(uri));
+}
+ /*}}}*/
+static std::string GetFinalFileNameFromURI(std::string const &uri) /*{{{*/
+{
+ return _config->FindDir("Dir::State::lists") + URItoFileName(uri);
+}
+ /*}}}*/
+static std::string GetKeepCompressedFileName(std::string file, IndexTarget const &Target)/*{{{*/
+{
+ if (Target.KeepCompressed == false)
+ return file;
+
+ std::string const KeepCompressedAs = Target.Option(IndexTarget::KEEPCOMPRESSEDAS);
+ if (KeepCompressedAs.empty() == false)
+ {
+ std::string const ext = KeepCompressedAs.substr(0, KeepCompressedAs.find(' '));
+ if (ext != "uncompressed")
+ file.append(".").append(ext);
+ }
+ return file;
+}
+ /*}}}*/
+static std::string GetMergeDiffsPatchFileName(std::string const &Final, std::string const &Patch)/*{{{*/
+{
+ // rred expects the patch as $FinalFile.ed.$patchname.gz
+ return Final + ".ed." + Patch + ".gz";
+}
+ /*}}}*/
+static std::string GetDiffsPatchFileName(std::string const &Final) /*{{{*/
+{
+ // rred expects the patch as $FinalFile.ed
+ return Final + ".ed";
+}
+ /*}}}*/
+static std::string GetExistingFilename(std::string const &File) /*{{{*/
+{
+ if (RealFileExists(File))
+ return File;
+ for (auto const &type : APT::Configuration::getCompressorExtensions())
+ {
+ std::string const Final = File + type;
+ if (RealFileExists(Final))
+ return Final;
+ }
+ return "";
+}
+ /*}}}*/
+static std::string GetDiffIndexFileName(std::string const &Name) /*{{{*/
+{
+ return Name + ".diff/Index";
+}
+ /*}}}*/
+static std::string GetDiffIndexURI(IndexTarget const &Target) /*{{{*/
+{
+ return Target.URI + ".diff/Index";
+}
+ /*}}}*/
+
+static void ReportMirrorFailureToCentral(pkgAcquire::Item const &I, std::string const &FailCode, std::string const &Details)/*{{{*/
+{
+ // we only act if a mirror was used at all
+ if(I.UsedMirror.empty())
+ return;
+#if 0
+ std::cerr << "\nReportMirrorFailure: "
+ << UsedMirror
+ << " Uri: " << DescURI()
+ << " FailCode: "
+ << FailCode << std::endl;
+#endif
+ string const report = _config->Find("Methods::Mirror::ProblemReporting",
+ LIBEXEC_DIR "/apt-report-mirror-failure");
+ if(!FileExists(report))
+ return;
+
+ std::vector<char const*> const Args = {
+ report.c_str(),
+ I.UsedMirror.c_str(),
+ I.DescURI().c_str(),
+ FailCode.c_str(),
+ Details.c_str(),
+ NULL
+ };
+
+ pid_t pid = ExecFork();
+ if(pid < 0)
+ {
+ _error->Error("ReportMirrorFailure Fork failed");
+ return;
+ }
+ else if(pid == 0)
+ {
+ execvp(Args[0], (char**)Args.data());
+ std::cerr << "Could not exec " << Args[0] << std::endl;
+ _exit(100);
+ }
+ if(!ExecWait(pid, "report-mirror-failure"))
+ _error->Warning("Couldn't report problem to '%s'", report.c_str());
+}
+ /*}}}*/
+
+static APT_NONNULL(2) bool MessageInsecureRepository(bool const isError, char const * const msg, std::string const &repo)/*{{{*/
+{
+ std::string m;
+ strprintf(m, msg, repo.c_str());
+ if (isError)
+ {
+ _error->Error("%s", m.c_str());
+ _error->Notice("%s", _("Updating from such a repository can't be done securely, and is therefore disabled by default."));
+ }
+ else
+ {
+ _error->Warning("%s", m.c_str());
+ _error->Notice("%s", _("Data from such a repository can't be authenticated and is therefore potentially dangerous to use."));
+ }
+ _error->Notice("%s", _("See apt-secure(8) manpage for repository creation and user configuration details."));
+ return false;
+}
+ /*}}}*/
+// AllowInsecureRepositories /*{{{*/
+enum class InsecureType { UNSIGNED, WEAK, NORELEASE };
+static bool TargetIsAllowedToBe(IndexTarget const &Target, InsecureType const type)
+{
+ if (_config->FindB("Acquire::AllowInsecureRepositories"))
+ return true;
+
+ if (Target.OptionBool(IndexTarget::ALLOW_INSECURE))
+ return true;
+
+ switch (type)
+ {
+ case InsecureType::UNSIGNED: break;
+ case InsecureType::NORELEASE: break;
+ case InsecureType::WEAK:
+ if (_config->FindB("Acquire::AllowWeakRepositories"))
+ return true;
+ if (Target.OptionBool(IndexTarget::ALLOW_WEAK))
+ return true;
+ break;
+ }
+ return false;
+}
+static bool APT_NONNULL(3, 4, 5) AllowInsecureRepositories(InsecureType const msg, std::string const &repo,
+ metaIndex const * const MetaIndexParser, pkgAcqMetaClearSig * const TransactionManager, pkgAcquire::Item * const I)
+{
+ // we skip weak downgrades as its unlikely that a repository gets really weaker –
+ // its more realistic that apt got pickier in a newer version
+ if (msg != InsecureType::WEAK)
+ {
+ std::string const FinalInRelease = TransactionManager->GetFinalFilename();
+ std::string const FinalReleasegpg = FinalInRelease.substr(0, FinalInRelease.length() - strlen("InRelease")) + "Release.gpg";
+ if (RealFileExists(FinalReleasegpg) || RealFileExists(FinalInRelease))
+ {
+ char const * msgstr = nullptr;
+ switch (msg)
+ {
+ case InsecureType::UNSIGNED: msgstr = _("The repository '%s' is no longer signed."); break;
+ case InsecureType::NORELEASE: msgstr = _("The repository '%s' no longer has a Release file."); break;
+ case InsecureType::WEAK: /* unreachable */ break;
+ }
+ if (_config->FindB("Acquire::AllowDowngradeToInsecureRepositories") ||
+ TransactionManager->Target.OptionBool(IndexTarget::ALLOW_DOWNGRADE_TO_INSECURE))
+ {
+ // meh, the users wants to take risks (we still mark the packages
+ // from this repository as unauthenticated)
+ _error->Warning(msgstr, repo.c_str());
+ _error->Warning(_("This is normally not allowed, but the option "
+ "Acquire::AllowDowngradeToInsecureRepositories was "
+ "given to override it."));
+ } else {
+ MessageInsecureRepository(true, msgstr, repo);
+ TransactionManager->AbortTransaction();
+ I->Status = pkgAcquire::Item::StatError;
+ return false;
+ }
+ }
+ }
+
+ if(MetaIndexParser->GetTrusted() == metaIndex::TRI_YES)
+ return true;
+
+ char const * msgstr = nullptr;
+ switch (msg)
+ {
+ case InsecureType::UNSIGNED: msgstr = _("The repository '%s' is not signed."); break;
+ case InsecureType::NORELEASE: msgstr = _("The repository '%s' does not have a Release file."); break;
+ case InsecureType::WEAK: msgstr = _("The repository '%s' provides only weak security information."); break;
+ }
+
+ if (TargetIsAllowedToBe(TransactionManager->Target, msg) == true)
+ {
+ MessageInsecureRepository(false, msgstr, repo);
+ return true;
+ }
+
+ MessageInsecureRepository(true, msgstr, repo);
+ TransactionManager->AbortTransaction();
+ I->Status = pkgAcquire::Item::StatError;
+ return false;
+}
+ /*}}}*/
+static HashStringList GetExpectedHashesFromFor(metaIndex * const Parser, std::string const &MetaKey)/*{{{*/
+{
+ if (Parser == NULL)
+ return HashStringList();
+ metaIndex::checkSum * const R = Parser->Lookup(MetaKey);
+ if (R == NULL)
+ return HashStringList();
+ return R->Hashes;
+}
+ /*}}}*/
+
+class pkgAcquire::Item::Private /*{{{*/
+{
+public:
+ struct AlternateURI
+ {
+ std::string URI;
+ std::unordered_map<std::string, std::string> changefields;
+ AlternateURI(std::string &&u, decltype(changefields) &&cf) : URI(u), changefields(cf) {}
+ };
+ std::list<AlternateURI> AlternativeURIs;
+ std::vector<std::string> BadAlternativeSites;
+ std::vector<std::string> PastRedirections;
+ std::unordered_map<std::string, std::string> CustomFields;
+ unsigned int Retries;
+
+ Private() : Retries(_config->FindI("Acquire::Retries", 0))
+ {
+ }
+};
+ /*}}}*/
+
+// all ::HashesRequired and ::GetExpectedHashes implementations /*{{{*/
+/* ::GetExpectedHashes is abstract and has to be implemented by all subclasses.
+ It is best to implement it as broadly as possible, while ::HashesRequired defaults
+ to true and should be as restrictive as possible for false cases. Note that if
+ a hash is returned by ::GetExpectedHashes it must match. Only if it doesn't
+ ::HashesRequired is called to evaluate if its okay to have no hashes. */
+APT_PURE bool pkgAcqTransactionItem::HashesRequired() const
+{
+ /* signed repositories obviously have a parser and good hashes.
+ unsigned repositories, too, as even if we can't trust them for security,
+ we can at least trust them for integrity of the download itself.
+ Only repositories without a Release file can (obviously) not have
+ hashes – and they are very uncommon and strongly discouraged */
+ if (TransactionManager->MetaIndexParser->GetLoadedSuccessfully() != metaIndex::TRI_YES)
+ return false;
+ if (TargetIsAllowedToBe(Target, InsecureType::WEAK))
+ {
+ /* If we allow weak hashes, we check that we have some (weak) and then
+ declare hashes not needed. That will tip us in the right direction
+ as if hashes exist, they will be used, even if not required */
+ auto const hsl = GetExpectedHashes();
+ if (hsl.usable())
+ return true;
+ if (hsl.empty() == false)
+ return false;
+ }
+ return true;
+}
+HashStringList pkgAcqTransactionItem::GetExpectedHashes() const
+{
+ return GetExpectedHashesFor(GetMetaKey());
+}
+
+APT_PURE bool pkgAcqMetaBase::HashesRequired() const
+{
+ // Release and co have no hashes 'by design'.
+ return false;
+}
+HashStringList pkgAcqMetaBase::GetExpectedHashes() const
+{
+ return HashStringList();
+}
+
+APT_PURE bool pkgAcqIndexDiffs::HashesRequired() const
+{
+ /* We can't check hashes of rred result as we don't know what the
+ hash of the file will be. We just know the hash of the patch(es),
+ the hash of the file they will apply on and the hash of the resulting
+ file. */
+ if (State == StateFetchDiff)
+ return true;
+ return false;
+}
+HashStringList pkgAcqIndexDiffs::GetExpectedHashes() const
+{
+ if (State == StateFetchDiff)
+ return available_patches[0].download_hashes;
+ return HashStringList();
+}
+
+APT_PURE bool pkgAcqIndexMergeDiffs::HashesRequired() const
+{
+ /* @see #pkgAcqIndexDiffs::HashesRequired, with the difference that
+ we can check the rred result after all patches are applied as
+ we know the expected result rather than potentially apply more patches */
+ if (State == StateFetchDiff)
+ return true;
+ return State == StateApplyDiff;
+}
+HashStringList pkgAcqIndexMergeDiffs::GetExpectedHashes() const
+{
+ if (State == StateFetchDiff)
+ return patch.download_hashes;
+ else if (State == StateApplyDiff)
+ return GetExpectedHashesFor(Target.MetaKey);
+ return HashStringList();
+}
+
+APT_PURE bool pkgAcqArchive::HashesRequired() const
+{
+ return LocalSource == false;
+}
+HashStringList pkgAcqArchive::GetExpectedHashes() const
+{
+ // figured out while parsing the records
+ return ExpectedHashes;
+}
+
+APT_PURE bool pkgAcqFile::HashesRequired() const
+{
+ // supplied as parameter at creation time, so the caller decides
+ return ExpectedHashes.usable();
+}
+HashStringList pkgAcqFile::GetExpectedHashes() const
+{
+ return ExpectedHashes;
+}
+ /*}}}*/
+// Acquire::Item::QueueURI and specialisations from child classes /*{{{*/
+bool pkgAcquire::Item::QueueURI(pkgAcquire::ItemDesc &Item)
+{
+ Owner->Enqueue(Item);
+ return true;
+}
+/* The idea here is that an item isn't queued if it exists on disk and the
+ transition manager was a hit as this means that the files it contains
+ the checksums for can't be updated either (or they are and we are asking
+ for a hashsum mismatch to happen which helps nobody) */
+bool pkgAcqTransactionItem::QueueURI(pkgAcquire::ItemDesc &Item)
+{
+ if (TransactionManager->State != TransactionStarted)
+ {
+ if (_config->FindB("Debug::Acquire::Transaction", false))
+ std::clog << "Skip " << Target.URI << " as transaction was already dealt with!" << std::endl;
+ return false;
+ }
+ std::string const FinalFile = GetFinalFilename();
+ if (TransactionManager->IMSHit == true && FileExists(FinalFile) == true)
+ {
+ PartialFile = DestFile = FinalFile;
+ Status = StatDone;
+ return false;
+ }
+ // this ensures we rewrite only once and only the first step
+ auto const OldBaseURI = Target.Option(IndexTarget::BASE_URI);
+ if (OldBaseURI.empty() || APT::String::Startswith(Item.URI, OldBaseURI) == false)
+ return pkgAcquire::Item::QueueURI(Item);
+ // the given URI is our last resort
+ PushAlternativeURI(std::string(Item.URI), {}, false);
+ // If we got the InRelease file via a mirror, pick all indexes directly from this mirror, too
+ std::string SameMirrorURI;
+ if (TransactionManager->BaseURI.empty() == false && TransactionManager->UsedMirror.empty() == false &&
+ URI::SiteOnly(Item.URI) != URI::SiteOnly(TransactionManager->BaseURI))
+ {
+ auto ExtraPath = Item.URI.substr(OldBaseURI.length());
+ auto newURI = flCombine(TransactionManager->BaseURI, std::move(ExtraPath));
+ if (IsGoodAlternativeURI(newURI))
+ {
+ SameMirrorURI = std::move(newURI);
+ PushAlternativeURI(std::string(SameMirrorURI), {}, false);
+ }
+ }
+ // add URI and by-hash based on it
+ if (AcquireByHash())
+ {
+ // if we use the mirror transport, ask it for by-hash uris
+ // we need to stick to the same mirror only for non-unique filenames
+ auto const sameMirrorException = [&]() {
+ if (Item.URI.find("mirror") == std::string::npos)
+ return false;
+ ::URI uri(Item.URI);
+ return uri.Access == "mirror" || APT::String::Startswith(uri.Access, "mirror+") ||
+ APT::String::Endswith(uri.Access, "+mirror") || uri.Access.find("+mirror+") != std::string::npos;
+ }();
+ if (sameMirrorException)
+ SameMirrorURI.clear();
+ // now add the actual by-hash uris
+ auto const Expected = GetExpectedHashes();
+ auto const TargetHash = Expected.find(nullptr);
+ auto const PushByHashURI = [&](std::string U) {
+ if (unlikely(TargetHash == nullptr))
+ return false;
+ auto const trailing_slash = U.find_last_of("/");
+ if (unlikely(trailing_slash == std::string::npos))
+ return false;
+ auto byhashSuffix = "/by-hash/" + TargetHash->HashType() + "/" + TargetHash->HashValue();
+ U.replace(trailing_slash, U.length() - trailing_slash, std::move(byhashSuffix));
+ PushAlternativeURI(std::move(U), {}, false);
+ return true;
+ };
+ PushByHashURI(Item.URI);
+ if (SameMirrorURI.empty() == false && PushByHashURI(SameMirrorURI) == false)
+ SameMirrorURI.clear();
+ }
+ // the last URI added is the first one tried
+ if (unlikely(PopAlternativeURI(Item.URI) == false))
+ return false;
+ if (SameMirrorURI.empty() == false)
+ {
+ UsedMirror = TransactionManager->UsedMirror;
+ if (Item.Description.find(" ") != string::npos)
+ Item.Description.replace(0, Item.Description.find(" "), UsedMirror);
+ }
+ return pkgAcquire::Item::QueueURI(Item);
+}
+/* The transition manager InRelease itself (or its older sisters-in-law
+ Release & Release.gpg) is always queued as this allows us to rerun gpgv
+ on it to verify that we aren't stalled with old files */
+bool pkgAcqMetaBase::QueueURI(pkgAcquire::ItemDesc &Item)
+{
+ return pkgAcquire::Item::QueueURI(Item);
+}
+/* the Diff/Index needs to queue also the up-to-date complete index file
+ to ensure that the list cleaner isn't eating it */
+bool pkgAcqDiffIndex::QueueURI(pkgAcquire::ItemDesc &Item)
+{
+ if (pkgAcqTransactionItem::QueueURI(Item) == true)
+ return true;
+ QueueOnIMSHit();
+ return false;
+}
+ /*}}}*/
+// Acquire::Item::GetFinalFilename and specialisations for child classes /*{{{*/
+std::string pkgAcquire::Item::GetFinalFilename() const
+{
+ // Beware: Desc.URI is modified by redirections
+ return GetFinalFileNameFromURI(Desc.URI);
+}
+std::string pkgAcqDiffIndex::GetFinalFilename() const
+{
+ std::string const FinalFile = GetFinalFileNameFromURI(GetDiffIndexURI(Target));
+ // we don't want recompress, so lets keep whatever we got
+ if (CurrentCompressionExtension == "uncompressed")
+ return FinalFile;
+ return FinalFile + "." + CurrentCompressionExtension;
+}
+std::string pkgAcqIndex::GetFinalFilename() const
+{
+ std::string const FinalFile = GetFinalFileNameFromURI(Target.URI);
+ return GetKeepCompressedFileName(FinalFile, Target);
+}
+std::string pkgAcqMetaSig::GetFinalFilename() const
+{
+ return GetFinalFileNameFromURI(Target.URI);
+}
+std::string pkgAcqBaseIndex::GetFinalFilename() const
+{
+ return GetFinalFileNameFromURI(Target.URI);
+}
+std::string pkgAcqMetaBase::GetFinalFilename() const
+{
+ return GetFinalFileNameFromURI(Target.URI);
+}
+std::string pkgAcqArchive::GetFinalFilename() const
+{
+ return _config->FindDir("Dir::Cache::Archives") + flNotDir(StoreFilename);
+}
+ /*}}}*/
+// pkgAcqTransactionItem::GetMetaKey and specialisations for child classes /*{{{*/
+std::string pkgAcqTransactionItem::GetMetaKey() const
+{
+ return Target.MetaKey;
+}
+std::string pkgAcqIndex::GetMetaKey() const
+{
+ if (Stage == STAGE_DECOMPRESS_AND_VERIFY || CurrentCompressionExtension == "uncompressed")
+ return Target.MetaKey;
+ return Target.MetaKey + "." + CurrentCompressionExtension;
+}
+std::string pkgAcqDiffIndex::GetMetaKey() const
+{
+ auto const metakey = GetDiffIndexFileName(Target.MetaKey);
+ if (CurrentCompressionExtension == "uncompressed")
+ return metakey;
+ return metakey + "." + CurrentCompressionExtension;
+}
+ /*}}}*/
+//pkgAcqTransactionItem::TransactionState and specialisations for child classes /*{{{*/
+bool pkgAcqTransactionItem::TransactionState(TransactionStates const state)
+{
+ bool const Debug = _config->FindB("Debug::Acquire::Transaction", false);
+ switch(state)
+ {
+ case TransactionStarted: _error->Fatal("Item %s changed to invalid transaction start state!", Target.URI.c_str()); break;
+ case TransactionAbort:
+ if(Debug == true)
+ std::clog << " Cancel: " << DestFile << std::endl;
+ if (Status == pkgAcquire::Item::StatIdle)
+ {
+ Status = pkgAcquire::Item::StatDone;
+ Dequeue();
+ }
+ break;
+ case TransactionCommit:
+ if(PartialFile.empty() == false)
+ {
+ bool sameFile = (PartialFile == DestFile);
+ // we use symlinks on IMS-Hit to avoid copies
+ if (RealFileExists(DestFile))
+ {
+ struct stat Buf;
+ if (lstat(PartialFile.c_str(), &Buf) != -1)
+ {
+ if (S_ISLNK(Buf.st_mode) && Buf.st_size > 0)
+ {
+ char partial[Buf.st_size + 1];
+ ssize_t const sp = readlink(PartialFile.c_str(), partial, Buf.st_size);
+ if (sp == -1)
+ _error->Errno("pkgAcqTransactionItem::TransactionState-sp", _("Failed to readlink %s"), PartialFile.c_str());
+ else
+ {
+ partial[sp] = '\0';
+ sameFile = (DestFile == partial);
+ }
+ }
+ }
+ else
+ _error->Errno("pkgAcqTransactionItem::TransactionState-stat", _("Failed to stat %s"), PartialFile.c_str());
+ }
+ if (sameFile == false)
+ {
+ // ensure that even without lists-cleanup all compressions are nuked
+ std::string FinalFile = GetFinalFileNameFromURI(Target.URI);
+ if (FileExists(FinalFile))
+ {
+ if(Debug == true)
+ std::clog << "rm " << FinalFile << " # " << DescURI() << std::endl;
+ if (RemoveFile("TransactionStates-Cleanup", FinalFile) == false)
+ return false;
+ }
+ for (auto const &ext: APT::Configuration::getCompressorExtensions())
+ {
+ auto const Final = FinalFile + ext;
+ if (FileExists(Final))
+ {
+ if(Debug == true)
+ std::clog << "rm " << Final << " # " << DescURI() << std::endl;
+ if (RemoveFile("TransactionStates-Cleanup", Final) == false)
+ return false;
+ }
+ }
+ if(Debug == true)
+ std::clog << "mv " << PartialFile << " -> "<< DestFile << " # " << DescURI() << std::endl;
+ if (Rename(PartialFile, DestFile) == false)
+ return false;
+ }
+ else if(Debug == true)
+ std::clog << "keep " << PartialFile << " # " << DescURI() << std::endl;
+
+ } else {
+ if(Debug == true)
+ std::clog << "rm " << DestFile << " # " << DescURI() << std::endl;
+ if (RemoveFile("TransItem::TransactionCommit", DestFile) == false)
+ return false;
+ }
+ break;
+ }
+ return true;
+}
+bool pkgAcqMetaBase::TransactionState(TransactionStates const state)
+{
+ // Do not remove InRelease on IMSHit of Release.gpg [yes, this is very edgecasey]
+ if (TransactionManager->IMSHit == false)
+ return pkgAcqTransactionItem::TransactionState(state);
+ return true;
+}
+bool pkgAcqIndex::TransactionState(TransactionStates const state)
+{
+ if (pkgAcqTransactionItem::TransactionState(state) == false)
+ return false;
+
+ switch (state)
+ {
+ case TransactionStarted: _error->Fatal("AcqIndex %s changed to invalid transaction start state!", Target.URI.c_str()); break;
+ case TransactionAbort:
+ if (Stage == STAGE_DECOMPRESS_AND_VERIFY)
+ {
+ // keep the compressed file, but drop the decompressed
+ EraseFileName.clear();
+ if (PartialFile.empty() == false && flExtension(PartialFile) != CurrentCompressionExtension)
+ RemoveFile("TransactionAbort", PartialFile);
+ }
+ break;
+ case TransactionCommit:
+ if (EraseFileName.empty() == false)
+ RemoveFile("AcqIndex::TransactionCommit", EraseFileName);
+ break;
+ }
+ return true;
+}
+bool pkgAcqDiffIndex::TransactionState(TransactionStates const state)
+{
+ if (pkgAcqTransactionItem::TransactionState(state) == false)
+ return false;
+
+ switch (state)
+ {
+ case TransactionStarted: _error->Fatal("Item %s changed to invalid transaction start state!", Target.URI.c_str()); break;
+ case TransactionCommit:
+ break;
+ case TransactionAbort:
+ std::string const Partial = GetPartialFileNameFromURI(Target.URI);
+ RemoveFile("TransactionAbort", Partial);
+ break;
+ }
+
+ return true;
+}
+ /*}}}*/
+// pkgAcqTransactionItem::AcquireByHash and specialisations for child classes /*{{{*/
+bool pkgAcqTransactionItem::AcquireByHash() const
+{
+ if (TransactionManager->MetaIndexParser == nullptr)
+ return false;
+ auto const useByHashConf = Target.Option(IndexTarget::BY_HASH);
+ if (useByHashConf == "force")
+ return true;
+ return StringToBool(useByHashConf) == true && TransactionManager->MetaIndexParser->GetSupportsAcquireByHash();
+}
+// pdiff patches have a unique name already, no need for by-hash
+bool pkgAcqIndexMergeDiffs::AcquireByHash() const
+{
+ return false;
+}
+bool pkgAcqIndexDiffs::AcquireByHash() const
+{
+ return false;
+}
+ /*}}}*/
+
+class APT_HIDDEN NoActionItem : public pkgAcquire::Item /*{{{*/
+/* The sole purpose of this class is having an item which does nothing to
+ reach its done state to prevent cleanup deleting the mentioned file.
+ Handy in cases in which we know we have the file already, like IMS-Hits. */
+{
+ IndexTarget const Target;
+ public:
+ virtual std::string DescURI() const APT_OVERRIDE {return Target.URI;};
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE {return HashStringList();};
+
+ NoActionItem(pkgAcquire * const Owner, IndexTarget const &Target) :
+ pkgAcquire::Item(Owner), Target(Target)
+ {
+ Status = StatDone;
+ DestFile = GetFinalFileNameFromURI(Target.URI);
+ }
+ NoActionItem(pkgAcquire * const Owner, IndexTarget const &Target, std::string const &FinalFile) :
+ pkgAcquire::Item(Owner), Target(Target)
+ {
+ Status = StatDone;
+ DestFile = FinalFile;
+ }
+};
+ /*}}}*/
+class APT_HIDDEN CleanupItem : public pkgAcqTransactionItem /*{{{*/
+/* This class ensures that a file which was configured but isn't downloaded
+ for various reasons isn't kept in an old version in the lists directory.
+ In a way its the reverse of NoActionItem as it helps with removing files
+ even if the lists-cleanup is deactivated. */
+{
+ public:
+ virtual std::string DescURI() const APT_OVERRIDE {return Target.URI;};
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE {return HashStringList();};
+
+ CleanupItem(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager, IndexTarget const &Target) :
+ pkgAcqTransactionItem(Owner, TransactionManager, Target)
+ {
+ Status = StatDone;
+ DestFile = GetFinalFileNameFromURI(Target.URI);
+ }
+ bool TransactionState(TransactionStates const state) APT_OVERRIDE
+ {
+ switch (state)
+ {
+ case TransactionStarted:
+ break;
+ case TransactionAbort:
+ break;
+ case TransactionCommit:
+ if (_config->FindB("Debug::Acquire::Transaction", false) == true)
+ std::clog << "rm " << DestFile << " # " << DescURI() << std::endl;
+ if (RemoveFile("TransItem::TransactionCommit", DestFile) == false)
+ return false;
+ break;
+ }
+ return true;
+ }
+};
+ /*}}}*/
+
+// Acquire::Item::Item - Constructor /*{{{*/
+APT_IGNORE_DEPRECATED_PUSH
+pkgAcquire::Item::Item(pkgAcquire * const owner) :
+ FileSize(0), PartialSize(0), Mode(0), ID(0), Complete(false), Local(false),
+ QueueCounter(0), ExpectedAdditionalItems(0), Owner(owner), d(new Private())
+{
+ Owner->Add(this);
+ Status = StatIdle;
+}
+APT_IGNORE_DEPRECATED_POP
+ /*}}}*/
+// Acquire::Item::~Item - Destructor /*{{{*/
+pkgAcquire::Item::~Item()
+{
+ Owner->Remove(this);
+ delete d;
+}
+ /*}}}*/
+std::string pkgAcquire::Item::Custom600Headers() const /*{{{*/
+{
+ std::ostringstream header;
+ for (auto const &f : d->CustomFields)
+ if (f.second.empty() == false)
+ header << '\n'
+ << f.first << ": " << f.second;
+ return header.str();
+}
+ /*}}}*/
+std::unordered_map<std::string, std::string> &pkgAcquire::Item::ModifyCustomFields() /*{{{*/
+{
+ return d->CustomFields;
+}
+ /*}}}*/
+bool pkgAcquire::Item::PopAlternativeURI(std::string &NewURI) /*{{{*/
+{
+ if (d->AlternativeURIs.empty())
+ return false;
+ auto const AltUri = d->AlternativeURIs.front();
+ d->AlternativeURIs.pop_front();
+ NewURI = AltUri.URI;
+ auto &CustomFields = ModifyCustomFields();
+ for (auto const &f : AltUri.changefields)
+ {
+ if (f.second.empty())
+ CustomFields.erase(f.first);
+ else
+ CustomFields[f.first] = f.second;
+ }
+ return true;
+}
+ /*}}}*/
+bool pkgAcquire::Item::IsGoodAlternativeURI(std::string const &AltUri) const/*{{{*/
+{
+ return std::find(d->PastRedirections.cbegin(), d->PastRedirections.cend(), AltUri) == d->PastRedirections.cend() &&
+ std::find(d->BadAlternativeSites.cbegin(), d->BadAlternativeSites.cend(), URI::SiteOnly(AltUri)) == d->BadAlternativeSites.cend();
+}
+ /*}}}*/
+void pkgAcquire::Item::PushAlternativeURI(std::string &&NewURI, std::unordered_map<std::string, std::string> &&fields, bool const at_the_back) /*{{{*/
+{
+ if (IsGoodAlternativeURI(NewURI) == false)
+ return;
+ if (at_the_back)
+ d->AlternativeURIs.emplace_back(std::move(NewURI), std::move(fields));
+ else
+ d->AlternativeURIs.emplace_front(std::move(NewURI), std::move(fields));
+}
+ /*}}}*/
+void pkgAcquire::Item::RemoveAlternativeSite(std::string &&OldSite) /*{{{*/
+{
+ d->AlternativeURIs.erase(std::remove_if(d->AlternativeURIs.begin(), d->AlternativeURIs.end(),
+ [&](decltype(*d->AlternativeURIs.cbegin()) AltUri) {
+ return URI::SiteOnly(AltUri.URI) == OldSite;
+ }),
+ d->AlternativeURIs.end());
+ d->BadAlternativeSites.push_back(std::move(OldSite));
+}
+ /*}}}*/
+unsigned int &pkgAcquire::Item::ModifyRetries() /*{{{*/
+{
+ return d->Retries;
+}
+ /*}}}*/
+std::string pkgAcquire::Item::ShortDesc() const /*{{{*/
+{
+ return DescURI();
+}
+ /*}}}*/
+void pkgAcquire::Item::Finished() /*{{{*/
+{
+}
+ /*}}}*/
+APT_PURE pkgAcquire * pkgAcquire::Item::GetOwner() const /*{{{*/
+{
+ return Owner;
+}
+ /*}}}*/
+APT_PURE pkgAcquire::ItemDesc &pkgAcquire::Item::GetItemDesc() /*{{{*/
+{
+ return Desc;
+}
+ /*}}}*/
+APT_PURE bool pkgAcquire::Item::IsTrusted() const /*{{{*/
+{
+ return false;
+}
+ /*}}}*/
+// Acquire::Item::Failed - Item failed to download /*{{{*/
+// ---------------------------------------------------------------------
+/* We return to an idle state if there are still other queues that could
+ fetch this object */
+static void formatHashsum(std::ostream &out, HashString const &hs)
+{
+ auto const type = hs.HashType();
+ if (type == "Checksum-FileSize")
+ out << " - Filesize";
+ else
+ out << " - " << type;
+ out << ':' << hs.HashValue();
+ if (hs.usable() == false)
+ out << " [weak]";
+ out << std::endl;
+}
+void pkgAcquire::Item::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)
+{
+ if (QueueCounter <= 1)
+ {
+ /* This indicates that the file is not available right now but might
+ be sometime later. If we do a retry cycle then this should be
+ retried [CDROMs] */
+ if (Cnf != NULL && Cnf->LocalOnly == true &&
+ StringToBool(LookupTag(Message,"Transient-Failure"),false) == true)
+ {
+ Status = StatIdle;
+ Dequeue();
+ return;
+ }
+
+ switch (Status)
+ {
+ case StatIdle:
+ case StatFetching:
+ case StatDone:
+ Status = StatError;
+ break;
+ case StatAuthError:
+ case StatError:
+ case StatTransientNetworkError:
+ break;
+ }
+ Complete = false;
+ Dequeue();
+ }
+
+ FailMessage(Message);
+
+ if (QueueCounter > 1)
+ Status = StatIdle;
+}
+void pkgAcquire::Item::FailMessage(string const &Message)
+{
+ string const FailReason = LookupTag(Message, "FailReason");
+ enum { MAXIMUM_SIZE_EXCEEDED, HASHSUM_MISMATCH, WEAK_HASHSUMS, REDIRECTION_LOOP, OTHER } failreason = OTHER;
+ if ( FailReason == "MaximumSizeExceeded")
+ failreason = MAXIMUM_SIZE_EXCEEDED;
+ else if ( FailReason == "WeakHashSums")
+ failreason = WEAK_HASHSUMS;
+ else if (FailReason == "RedirectionLoop")
+ failreason = REDIRECTION_LOOP;
+ else if (Status == StatAuthError)
+ failreason = HASHSUM_MISMATCH;
+
+ if(ErrorText.empty())
+ {
+ std::ostringstream out;
+ switch (failreason)
+ {
+ case HASHSUM_MISMATCH:
+ out << _("Hash Sum mismatch") << std::endl;
+ break;
+ case WEAK_HASHSUMS:
+ out << _("Insufficient information available to perform this download securely") << std::endl;
+ break;
+ case REDIRECTION_LOOP:
+ out << "Redirection loop encountered" << std::endl;
+ break;
+ case MAXIMUM_SIZE_EXCEEDED:
+ out << LookupTag(Message, "Message") << std::endl;
+ break;
+ case OTHER:
+ out << LookupTag(Message, "Message");
+ break;
+ }
+
+ if (Status == StatAuthError)
+ {
+ auto const ExpectedHashes = GetExpectedHashes();
+ if (ExpectedHashes.empty() == false)
+ {
+ out << "Hashes of expected file:" << std::endl;
+ for (auto const &hs: ExpectedHashes)
+ formatHashsum(out, hs);
+ }
+ if (failreason == HASHSUM_MISMATCH)
+ {
+ out << "Hashes of received file:" << std::endl;
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ std::string const tagname = std::string(*type) + "-Hash";
+ std::string const hashsum = LookupTag(Message, tagname.c_str());
+ if (hashsum.empty() == false)
+ formatHashsum(out, HashString(*type, hashsum));
+ }
+ }
+ auto const lastmod = LookupTag(Message, "Last-Modified", "");
+ if (lastmod.empty() == false)
+ out << "Last modification reported: " << lastmod << std::endl;
+ }
+ ErrorText = out.str();
+ }
+
+ switch (failreason)
+ {
+ case MAXIMUM_SIZE_EXCEEDED: RenameOnError(MaximumSizeExceeded); break;
+ case HASHSUM_MISMATCH: RenameOnError(HashSumMismatch); break;
+ case WEAK_HASHSUMS: break;
+ case REDIRECTION_LOOP: break;
+ case OTHER: break;
+ }
+
+ if (FailReason.empty() == false)
+ ReportMirrorFailureToCentral(*this, FailReason, ErrorText);
+ else
+ ReportMirrorFailureToCentral(*this, ErrorText, ErrorText);
+}
+ /*}}}*/
+// Acquire::Item::Start - Item has begun to download /*{{{*/
+// ---------------------------------------------------------------------
+/* Stash status and the file size. Note that setting Complete means
+ sub-phases of the acquire process such as decompresion are operating */
+void pkgAcquire::Item::Start(string const &/*Message*/, unsigned long long const Size)
+{
+ Status = StatFetching;
+ ErrorText.clear();
+ if (FileSize == 0 && Complete == false)
+ FileSize = Size;
+}
+ /*}}}*/
+// Acquire::Item::VerifyDone - check if Item was downloaded OK /*{{{*/
+/* Note that hash-verification is 'hardcoded' in acquire-worker and has
+ * already passed if this method is called. */
+bool pkgAcquire::Item::VerifyDone(std::string const &Message,
+ pkgAcquire::MethodConfig const * const /*Cnf*/)
+{
+ std::string const FileName = LookupTag(Message,"Filename");
+ if (FileName.empty() == true)
+ {
+ Status = StatError;
+ ErrorText = "Method gave a blank filename";
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
+// Acquire::Item::Done - Item downloaded OK /*{{{*/
+void pkgAcquire::Item::Done(string const &/*Message*/, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const /*Cnf*/)
+{
+ // We just downloaded something..
+ if (FileSize == 0)
+ {
+ unsigned long long const downloadedSize = Hashes.FileSize();
+ if (downloadedSize != 0)
+ {
+ FileSize = downloadedSize;
+ }
+ }
+ Status = StatDone;
+ ErrorText.clear();
+ Dequeue();
+}
+ /*}}}*/
+// Acquire::Item::Rename - Rename a file /*{{{*/
+// ---------------------------------------------------------------------
+/* This helper function is used by a lot of item methods as their final
+ step */
+bool pkgAcquire::Item::Rename(string const &From,string const &To)
+{
+ if (From == To || rename(From.c_str(),To.c_str()) == 0)
+ return true;
+
+ std::string S;
+ strprintf(S, _("rename failed, %s (%s -> %s)."), strerror(errno),
+ From.c_str(),To.c_str());
+ Status = StatError;
+ if (ErrorText.empty())
+ ErrorText = S;
+ else
+ ErrorText = ErrorText + ": " + S;
+ return false;
+}
+ /*}}}*/
+void pkgAcquire::Item::Dequeue() /*{{{*/
+{
+ d->AlternativeURIs.clear();
+ Owner->Dequeue(this);
+}
+ /*}}}*/
+bool pkgAcquire::Item::RenameOnError(pkgAcquire::Item::RenameOnErrorState const error)/*{{{*/
+{
+ if (RealFileExists(DestFile))
+ Rename(DestFile, DestFile + ".FAILED");
+
+ std::string errtext;
+ switch (error)
+ {
+ case HashSumMismatch:
+ errtext = _("Hash Sum mismatch");
+ break;
+ case SizeMismatch:
+ errtext = _("Size mismatch");
+ Status = StatAuthError;
+ break;
+ case InvalidFormat:
+ errtext = _("Invalid file format");
+ Status = StatError;
+ // do not report as usually its not the mirrors fault, but Portal/Proxy
+ break;
+ case SignatureError:
+ errtext = _("Signature error");
+ Status = StatError;
+ break;
+ case NotClearsigned:
+ strprintf(errtext, _("Clearsigned file isn't valid, got '%s' (does the network require authentication?)"), "NOSPLIT");
+ Status = StatAuthError;
+ break;
+ case MaximumSizeExceeded:
+ // the method is expected to report a good error for this
+ break;
+ case PDiffError:
+ // no handling here, done by callers
+ break;
+ }
+ if (ErrorText.empty())
+ ErrorText = errtext;
+ return false;
+}
+ /*}}}*/
+void pkgAcquire::Item::SetActiveSubprocess(const std::string &subprocess)/*{{{*/
+{
+ ActiveSubprocess = subprocess;
+ APT_IGNORE_DEPRECATED_PUSH
+ Mode = ActiveSubprocess.c_str();
+ APT_IGNORE_DEPRECATED_POP
+}
+ /*}}}*/
+// Acquire::Item::ReportMirrorFailure /*{{{*/
+void pkgAcquire::Item::ReportMirrorFailure(std::string const &FailCode)
+{
+ ReportMirrorFailureToCentral(*this, FailCode, FailCode);
+}
+ /*}}}*/
+std::string pkgAcquire::Item::HashSum() const /*{{{*/
+{
+ HashStringList const hashes = GetExpectedHashes();
+ HashString const * const hs = hashes.find(NULL);
+ return hs != NULL ? hs->toStr() : "";
+}
+ /*}}}*/
+bool pkgAcquire::Item::IsRedirectionLoop(std::string const &NewURI) /*{{{*/
+{
+ // store can fail due to permission errors and the item will "loop" then
+ if (APT::String::Startswith(NewURI, "store:"))
+ return false;
+ if (d->PastRedirections.empty())
+ {
+ d->PastRedirections.push_back(NewURI);
+ return false;
+ }
+ auto const LastURI = std::prev(d->PastRedirections.end());
+ // redirections to the same file are a way of restarting/resheduling,
+ // individual methods will have to make sure that they aren't looping this way
+ if (*LastURI == NewURI)
+ return false;
+ if (std::find(d->PastRedirections.begin(), LastURI, NewURI) != LastURI)
+ return true;
+ d->PastRedirections.push_back(NewURI);
+ return false;
+}
+ /*}}}*/
+int pkgAcquire::Item::Priority() /*{{{*/
+{
+ // Stage 0: Files requested by methods
+ // - they will usually not end up here, but if they do we make sure
+ // to get them as soon as possible as they are probably blocking
+ // the processing of files by the requesting method
+ if (dynamic_cast<pkgAcqAuxFile *>(this) != nullptr)
+ return 5000;
+ // Stage 1: Meta indices and diff indices
+ // - those need to be fetched first to have progress reporting working
+ // for the rest
+ if (dynamic_cast<pkgAcqMetaSig*>(this) != nullptr
+ || dynamic_cast<pkgAcqMetaBase*>(this) != nullptr
+ || dynamic_cast<pkgAcqDiffIndex*>(this) != nullptr)
+ return 1000;
+ // Stage 2: Diff files
+ // - fetch before complete indexes so we can apply the diffs while fetching
+ // larger files.
+ if (dynamic_cast<pkgAcqIndexDiffs*>(this) != nullptr ||
+ dynamic_cast<pkgAcqIndexMergeDiffs*>(this) != nullptr)
+ return 800;
+
+ // Stage 3: The rest - complete index files and other stuff
+ return 500;
+}
+ /*}}}*/
+
+pkgAcqTransactionItem::pkgAcqTransactionItem(pkgAcquire * const Owner, /*{{{*/
+ pkgAcqMetaClearSig * const transactionManager, IndexTarget const &target) :
+ pkgAcquire::Item(Owner), d(NULL), Target(target), TransactionManager(transactionManager)
+{
+ if (TransactionManager != this)
+ TransactionManager->Add(this);
+ ModifyCustomFields() = {
+ {"Target-Site", Target.Option(IndexTarget::SITE)},
+ {"Target-Repo-URI", Target.Option(IndexTarget::REPO_URI)},
+ {"Target-Base-URI", Target.Option(IndexTarget::BASE_URI)},
+ {"Target-Component", Target.Option(IndexTarget::COMPONENT)},
+ {"Target-Release", Target.Option(IndexTarget::RELEASE)},
+ {"Target-Architecture", Target.Option(IndexTarget::ARCHITECTURE)},
+ {"Target-Language", Target.Option(IndexTarget::LANGUAGE)},
+ {"Target-Type", "index"},
+ };
+}
+ /*}}}*/
+pkgAcqTransactionItem::~pkgAcqTransactionItem() /*{{{*/
+{
+}
+ /*}}}*/
+HashStringList pkgAcqTransactionItem::GetExpectedHashesFor(std::string const &MetaKey) const /*{{{*/
+{
+ return GetExpectedHashesFromFor(TransactionManager->MetaIndexParser, MetaKey);
+}
+ /*}}}*/
+
+static void LoadLastMetaIndexParser(pkgAcqMetaClearSig * const TransactionManager, std::string const &FinalRelease, std::string const &FinalInRelease)/*{{{*/
+{
+ if (TransactionManager->IMSHit == true)
+ return;
+ if (RealFileExists(FinalInRelease) || RealFileExists(FinalRelease))
+ {
+ TransactionManager->LastMetaIndexParser = TransactionManager->MetaIndexParser->UnloadedClone();
+ if (TransactionManager->LastMetaIndexParser != NULL)
+ {
+ _error->PushToStack();
+ if (RealFileExists(FinalInRelease))
+ TransactionManager->LastMetaIndexParser->Load(FinalInRelease, NULL);
+ else
+ TransactionManager->LastMetaIndexParser->Load(FinalRelease, NULL);
+ // its unlikely to happen, but if what we have is bad ignore it
+ if (_error->PendingError())
+ {
+ delete TransactionManager->LastMetaIndexParser;
+ TransactionManager->LastMetaIndexParser = NULL;
+ }
+ _error->RevertToStack();
+ }
+ }
+}
+ /*}}}*/
+
+// AcqMetaBase - Constructor /*{{{*/
+pkgAcqMetaBase::pkgAcqMetaBase(pkgAcquire * const Owner,
+ pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &DataTarget)
+: pkgAcqTransactionItem(Owner, TransactionManager, DataTarget), d(NULL),
+ AuthPass(false), IMSHit(false), State(TransactionStarted)
+{
+}
+ /*}}}*/
+// AcqMetaBase::Add - Add a item to the current Transaction /*{{{*/
+void pkgAcqMetaBase::Add(pkgAcqTransactionItem * const I)
+{
+ Transaction.push_back(I);
+}
+ /*}}}*/
+// AcqMetaBase::AbortTransaction - Abort the current Transaction /*{{{*/
+void pkgAcqMetaBase::AbortTransaction()
+{
+ if(_config->FindB("Debug::Acquire::Transaction", false) == true)
+ std::clog << "AbortTransaction: " << TransactionManager << std::endl;
+
+ switch (TransactionManager->State)
+ {
+ case TransactionStarted: break;
+ case TransactionAbort: _error->Fatal("Transaction %s was already aborted and is aborted again", TransactionManager->Target.URI.c_str()); return;
+ case TransactionCommit: _error->Fatal("Transaction %s was already aborted and is now committed", TransactionManager->Target.URI.c_str()); return;
+ }
+ TransactionManager->State = TransactionAbort;
+ TransactionManager->ExpectedAdditionalItems = 0;
+
+ // ensure the toplevel is in error state too
+ for (std::vector<pkgAcqTransactionItem*>::iterator I = Transaction.begin();
+ I != Transaction.end(); ++I)
+ {
+ (*I)->ExpectedAdditionalItems = 0;
+ if ((*I)->Status != pkgAcquire::Item::StatFetching)
+ (*I)->Dequeue();
+ (*I)->TransactionState(TransactionAbort);
+ }
+ Transaction.clear();
+}
+ /*}}}*/
+// AcqMetaBase::TransactionHasError - Check for errors in Transaction /*{{{*/
+APT_PURE bool pkgAcqMetaBase::TransactionHasError() const
+{
+ for (std::vector<pkgAcqTransactionItem*>::const_iterator I = Transaction.begin();
+ I != Transaction.end(); ++I)
+ {
+ switch((*I)->Status) {
+ case StatDone: break;
+ case StatIdle: break;
+ case StatAuthError: return true;
+ case StatError: return true;
+ case StatTransientNetworkError: return true;
+ case StatFetching: break;
+ }
+ }
+ return false;
+}
+ /*}}}*/
+// AcqMetaBase::CommitTransaction - Commit a transaction /*{{{*/
+void pkgAcqMetaBase::CommitTransaction()
+{
+ if(_config->FindB("Debug::Acquire::Transaction", false) == true)
+ std::clog << "CommitTransaction: " << this << std::endl;
+
+ switch (TransactionManager->State)
+ {
+ case TransactionStarted: break;
+ case TransactionAbort: _error->Fatal("Transaction %s was already committed and is now aborted", TransactionManager->Target.URI.c_str()); return;
+ case TransactionCommit: _error->Fatal("Transaction %s was already committed and is again committed", TransactionManager->Target.URI.c_str()); return;
+ }
+ TransactionManager->State = TransactionCommit;
+
+ // move new files into place *and* remove files that are not
+ // part of the transaction but are still on disk
+ for (std::vector<pkgAcqTransactionItem*>::iterator I = Transaction.begin();
+ I != Transaction.end(); ++I)
+ {
+ (*I)->TransactionState(TransactionCommit);
+ }
+ Transaction.clear();
+}
+ /*}}}*/
+// AcqMetaBase::TransactionStageCopy - Stage a file for copying /*{{{*/
+void pkgAcqMetaBase::TransactionStageCopy(pkgAcqTransactionItem * const I,
+ const std::string &From,
+ const std::string &To)
+{
+ I->PartialFile = From;
+ I->DestFile = To;
+}
+ /*}}}*/
+// AcqMetaBase::TransactionStageRemoval - Stage a file for removal /*{{{*/
+void pkgAcqMetaBase::TransactionStageRemoval(pkgAcqTransactionItem * const I,
+ const std::string &FinalFile)
+{
+ I->PartialFile = "";
+ I->DestFile = FinalFile;
+}
+ /*}}}*/
+// AcqMetaBase::GenerateAuthWarning - Check gpg authentication error /*{{{*/
+/* This method is called from ::Failed handlers. If it returns true,
+ no fallback to other files or modi is performed */
+bool pkgAcqMetaBase::CheckStopAuthentication(pkgAcquire::Item * const I, const std::string &Message)
+{
+ string const Final = I->GetFinalFilename();
+ std::string const GPGError = LookupTag(Message, "Message");
+ if (FileExists(Final))
+ {
+ I->Status = StatTransientNetworkError;
+ _error->Warning(_("An error occurred during the signature verification. "
+ "The repository is not updated and the previous index files will be used. "
+ "GPG error: %s: %s"),
+ Desc.Description.c_str(),
+ GPGError.c_str());
+ RunScripts("APT::Update::Auth-Failure");
+ return true;
+ } else if (LookupTag(Message,"Message").find("NODATA") != string::npos) {
+ /* Invalid signature file, reject (LP: #346386) (Closes: #627642) */
+ _error->Error(_("GPG error: %s: %s"),
+ Desc.Description.c_str(),
+ GPGError.c_str());
+ I->Status = StatAuthError;
+ return true;
+ } else {
+ _error->Warning(_("GPG error: %s: %s"),
+ Desc.Description.c_str(),
+ GPGError.c_str());
+ }
+ // gpgv method failed
+ ReportMirrorFailureToCentral(*this, "GPGFailure", GPGError);
+ return false;
+}
+ /*}}}*/
+// AcqMetaBase::Custom600Headers - Get header for AcqMetaBase /*{{{*/
+// ---------------------------------------------------------------------
+string pkgAcqMetaBase::Custom600Headers() const
+{
+ std::string Header = pkgAcqTransactionItem::Custom600Headers();
+ Header.append("\nIndex-File: true");
+ std::string MaximumSize;
+ strprintf(MaximumSize, "\nMaximum-Size: %i",
+ _config->FindI("Acquire::MaxReleaseFileSize", 10*1000*1000));
+ Header += MaximumSize;
+
+ string const FinalFile = GetFinalFilename();
+ struct stat Buf;
+ if (stat(FinalFile.c_str(),&Buf) == 0)
+ Header += "\nLast-Modified: " + TimeRFC1123(Buf.st_mtime, false);
+
+ return Header;
+}
+ /*}}}*/
+// AcqMetaBase::QueueForSignatureVerify /*{{{*/
+void pkgAcqMetaBase::QueueForSignatureVerify(pkgAcqTransactionItem * const I, std::string const &File, std::string const &Signature)
+{
+ AuthPass = true;
+ I->Desc.URI = "gpgv:" + Signature;
+ I->DestFile = File;
+ QueueURI(I->Desc);
+ I->SetActiveSubprocess("gpgv");
+}
+ /*}}}*/
+// AcqMetaBase::CheckDownloadDone /*{{{*/
+bool pkgAcqMetaBase::CheckDownloadDone(pkgAcqTransactionItem * const I, const std::string &Message, HashStringList const &Hashes) const
+{
+ // We have just finished downloading a Release file (it is not
+ // verified yet)
+
+ // Save the final base URI we got this Release file from
+ if (I->UsedMirror.empty() == false && _config->FindB("Acquire::SameMirrorForAllIndexes", true))
+ {
+ auto InReleasePath = Target.Option(IndexTarget::INRELEASE_PATH);
+ if (InReleasePath.empty())
+ InReleasePath = "InRelease";
+
+ if (APT::String::Endswith(I->Desc.URI, InReleasePath))
+ {
+ TransactionManager->BaseURI = I->Desc.URI.substr(0, I->Desc.URI.length() - InReleasePath.length());
+ TransactionManager->UsedMirror = I->UsedMirror;
+ }
+ else if (APT::String::Endswith(I->Desc.URI, "Release"))
+ {
+ TransactionManager->BaseURI = I->Desc.URI.substr(0, I->Desc.URI.length() - strlen("Release"));
+ TransactionManager->UsedMirror = I->UsedMirror;
+ }
+ }
+
+ std::string const FileName = LookupTag(Message,"Filename");
+ if (FileName != I->DestFile && RealFileExists(I->DestFile) == false)
+ {
+ I->Local = true;
+ I->Desc.URI = "copy:" + FileName;
+ I->QueueURI(I->Desc);
+ return false;
+ }
+
+ // make sure to verify against the right file on I-M-S hit
+ bool IMSHit = StringToBool(LookupTag(Message,"IMS-Hit"), false);
+ if (IMSHit == false && Hashes.usable())
+ {
+ // detect IMS-Hits servers haven't detected by Hash comparison
+ std::string const FinalFile = I->GetFinalFilename();
+ if (RealFileExists(FinalFile) && Hashes.VerifyFile(FinalFile) == true)
+ {
+ IMSHit = true;
+ RemoveFile("CheckDownloadDone", I->DestFile);
+ }
+ }
+
+ if(IMSHit == true)
+ {
+ // for simplicity, the transaction manager is always InRelease
+ // even if it doesn't exist.
+ TransactionManager->IMSHit = true;
+ I->PartialFile = I->DestFile = I->GetFinalFilename();
+ }
+
+ // set Item to complete as the remaining work is all local (verify etc)
+ I->Complete = true;
+
+ return true;
+}
+ /*}}}*/
+bool pkgAcqMetaBase::CheckAuthDone(string const &Message, pkgAcquire::MethodConfig const *const Cnf) /*{{{*/
+{
+ /* If we work with a recent version of our gpgv method, we expect that it tells us
+ which key(s) have signed the file so stuff like CVE-2018-0501 is harder in the future */
+ if (Cnf->Version != "1.0" && LookupTag(Message, "Signed-By").empty())
+ {
+ std::string errmsg;
+ strprintf(errmsg, "Internal Error: Signature on %s seems good, but expected details are missing! (%s)", Target.URI.c_str(), "Signed-By");
+ if (ErrorText.empty())
+ ErrorText = errmsg;
+ Status = StatAuthError;
+ return _error->Error("%s", errmsg.c_str());
+ }
+
+ // At this point, the gpgv method has succeeded, so there is a
+ // valid signature from a key in the trusted keyring. We
+ // perform additional verification of its contents, and use them
+ // to verify the indexes we are about to download
+ if (_config->FindB("Debug::pkgAcquire::Auth", false))
+ std::cerr << "Signature verification succeeded: " << DestFile << std::endl;
+
+ if (TransactionManager->IMSHit == false)
+ {
+ // open the last (In)Release if we have it
+ std::string const FinalFile = GetFinalFilename();
+ std::string FinalRelease;
+ std::string FinalInRelease;
+ if (APT::String::Endswith(FinalFile, "InRelease"))
+ {
+ FinalInRelease = FinalFile;
+ FinalRelease = FinalFile.substr(0, FinalFile.length() - strlen("InRelease")) + "Release";
+ }
+ else
+ {
+ FinalInRelease = FinalFile.substr(0, FinalFile.length() - strlen("Release")) + "InRelease";
+ FinalRelease = FinalFile;
+ }
+ LoadLastMetaIndexParser(TransactionManager, FinalRelease, FinalInRelease);
+ }
+
+ bool const GoodAuth = TransactionManager->MetaIndexParser->Load(DestFile, &ErrorText);
+ if (GoodAuth == false && AllowInsecureRepositories(InsecureType::WEAK, Target.Description, TransactionManager->MetaIndexParser, TransactionManager, this) == false)
+ {
+ Status = StatAuthError;
+ return false;
+ }
+
+ if (!VerifyVendor(Message))
+ {
+ Status = StatAuthError;
+ return false;
+ }
+
+ // Download further indexes with verification
+ TransactionManager->QueueIndexes(GoodAuth);
+
+ return GoodAuth;
+}
+ /*}}}*/
+void pkgAcqMetaClearSig::QueueIndexes(bool const verify) /*{{{*/
+{
+ // at this point the real Items are loaded in the fetcher
+ ExpectedAdditionalItems = 0;
+
+ std::unordered_set<std::string> targetsSeen, componentsSeen;
+ bool const hasReleaseFile = TransactionManager->MetaIndexParser != NULL;
+ bool hasHashes = true;
+ auto IndexTargets = TransactionManager->MetaIndexParser->GetIndexTargets();
+ if (hasReleaseFile && verify == false)
+ hasHashes = std::any_of(IndexTargets.begin(), IndexTargets.end(),
+ [&](IndexTarget const &Target) { return TransactionManager->MetaIndexParser->Exists(Target.MetaKey); });
+ if (_config->FindB("Acquire::IndexTargets::Randomized", true) && likely(IndexTargets.empty() == false))
+ {
+ /* For fallback handling and to have some reasonable progress information
+ we can't randomize everything, but at least the order in the same type
+ can be as we shouldn't be telling the mirrors (and everyone else watching)
+ which is native/foreign arch, specific order of preference of translations, … */
+ auto range_start = IndexTargets.begin();
+ auto seed = (std::chrono::high_resolution_clock::now().time_since_epoch() / std::chrono::nanoseconds(1)) ^ getpid();
+ std::default_random_engine g(seed);
+ do {
+ auto const type = range_start->Option(IndexTarget::CREATED_BY);
+ auto const range_end = std::find_if_not(range_start, IndexTargets.end(),
+ [&type](IndexTarget const &T) { return type == T.Option(IndexTarget::CREATED_BY); });
+ std::shuffle(range_start, range_end, g);
+ range_start = range_end;
+ } while (range_start != IndexTargets.end());
+ }
+ /* Collect all components for which files exist to prevent apt from warning users
+ about "hidden" components for which not all files exist like main/debian-installer
+ and Translation files */
+ if (hasReleaseFile == true)
+ for (auto const &Target : IndexTargets)
+ if (TransactionManager->MetaIndexParser->Exists(Target.MetaKey))
+ {
+ auto component = Target.Option(IndexTarget::COMPONENT);
+ if (component.empty() == false)
+ componentsSeen.emplace(std::move(component));
+ }
+
+ for (auto&& Target: IndexTargets)
+ {
+ // if we have seen a target which is created-by a target this one here is declared a
+ // fallback to, we skip acquiring the fallback (but we make sure we clean up)
+ if (targetsSeen.find(Target.Option(IndexTarget::FALLBACK_OF)) != targetsSeen.end())
+ {
+ targetsSeen.emplace(Target.Option(IndexTarget::CREATED_BY));
+ new CleanupItem(Owner, TransactionManager, Target);
+ continue;
+ }
+ // all is an implementation detail. Users shouldn't use this as arch
+ // We need this support trickery here as e.g. Debian has binary-all files already,
+ // but arch:all packages are still in the arch:any files, so we would waste precious
+ // download time, bandwidth and diskspace for nothing, BUT Debian doesn't feature all
+ // in the set of supported architectures, so we can filter based on this property rather
+ // than invent an entirely new flag we would need to carry for all of eternity.
+ if (hasReleaseFile && Target.Option(IndexTarget::ARCHITECTURE) == "all")
+ {
+ if (TransactionManager->MetaIndexParser->IsArchitectureAllSupportedFor(Target) == false)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ continue;
+ }
+ }
+
+ bool trypdiff = Target.OptionBool(IndexTarget::PDIFFS);
+ if (hasReleaseFile == true)
+ {
+ if (TransactionManager->MetaIndexParser->Exists(Target.MetaKey) == false)
+ {
+ auto const component = Target.Option(IndexTarget::COMPONENT);
+ if (component.empty() == false &&
+ componentsSeen.find(component) == std::end(componentsSeen) &&
+ TransactionManager->MetaIndexParser->HasSupportForComponent(component) == false)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ _error->Warning(_("Skipping acquire of configured file '%s' as repository '%s' doesn't have the component '%s' (component misspelt in sources.list?)"),
+ Target.MetaKey.c_str(), TransactionManager->Target.Description.c_str(), component.c_str());
+ continue;
+
+ }
+
+ // optional targets that we do not have in the Release file are skipped
+ if (hasHashes == true && Target.IsOptional)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ continue;
+ }
+
+ std::string const &arch = Target.Option(IndexTarget::ARCHITECTURE);
+ if (arch.empty() == false)
+ {
+ if (TransactionManager->MetaIndexParser->IsArchitectureSupported(arch) == false)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ _error->Notice(_("Skipping acquire of configured file '%s' as repository '%s' doesn't support architecture '%s'"),
+ Target.MetaKey.c_str(), TransactionManager->Target.Description.c_str(), arch.c_str());
+ continue;
+ }
+ // if the architecture is officially supported but currently no packages for it available,
+ // ignore silently as this is pretty much the same as just shipping an empty file.
+ // if we don't know which architectures are supported, we do NOT ignore it to notify user about this
+ if (hasHashes == true && TransactionManager->MetaIndexParser->IsArchitectureSupported("*undefined*") == false)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ continue;
+ }
+ }
+
+ if (hasHashes == true)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ _error->Warning(_("Skipping acquire of configured file '%s' as repository '%s' does not seem to provide it (sources.list entry misspelt?)"),
+ Target.MetaKey.c_str(), TransactionManager->Target.Description.c_str());
+ continue;
+ }
+ else
+ {
+ new pkgAcqIndex(Owner, TransactionManager, Target);
+ continue;
+ }
+ }
+ else if (verify)
+ {
+ auto const hashes = GetExpectedHashesFor(Target.MetaKey);
+ if (hashes.empty() == false)
+ {
+ if (hashes.usable() == false && TargetIsAllowedToBe(TransactionManager->Target, InsecureType::WEAK) == false)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ _error->Warning(_("Skipping acquire of configured file '%s' as repository '%s' provides only weak security information for it"),
+ Target.MetaKey.c_str(), TransactionManager->Target.Description.c_str());
+ continue;
+ }
+ // empty files are skipped as acquiring the very small compressed files is a waste of time
+ else if (hashes.FileSize() == 0)
+ {
+ new CleanupItem(Owner, TransactionManager, Target);
+ targetsSeen.emplace(Target.Option(IndexTarget::CREATED_BY));
+ continue;
+ }
+ }
+ }
+
+ // autoselect the compression method
+ std::vector<std::string> types = VectorizeString(Target.Option(IndexTarget::COMPRESSIONTYPES), ' ');
+ types.erase(std::remove_if(types.begin(), types.end(), [&](std::string const &t) {
+ if (t == "uncompressed")
+ return TransactionManager->MetaIndexParser->Exists(Target.MetaKey) == false;
+ std::string const MetaKey = Target.MetaKey + "." + t;
+ return TransactionManager->MetaIndexParser->Exists(MetaKey) == false;
+ }), types.end());
+ if (types.empty() == false)
+ {
+ std::ostringstream os;
+ std::copy(types.begin(), types.end()-1, std::ostream_iterator<std::string>(os, " "));
+ os << *types.rbegin();
+ Target.Options["COMPRESSIONTYPES"] = os.str();
+ }
+ else
+ Target.Options["COMPRESSIONTYPES"].clear();
+
+ std::string filename = GetExistingFilename(GetFinalFileNameFromURI(Target.URI));
+ if (filename.empty() == false)
+ {
+ // if the Release file is a hit and we have an index it must be the current one
+ if (TransactionManager->IMSHit == true)
+ ;
+ else if (TransactionManager->LastMetaIndexParser != NULL)
+ {
+ // see if the file changed since the last Release file
+ // we use the uncompressed files as we might compress differently compared to the server,
+ // so the hashes might not match, even if they contain the same data.
+ HashStringList const newFile = GetExpectedHashesFromFor(TransactionManager->MetaIndexParser, Target.MetaKey);
+ HashStringList const oldFile = GetExpectedHashesFromFor(TransactionManager->LastMetaIndexParser, Target.MetaKey);
+ if (newFile != oldFile)
+ filename.clear();
+ }
+ else
+ filename.clear();
+ }
+ else
+ trypdiff = false; // no file to patch
+
+ if (filename.empty() == false)
+ {
+ new NoActionItem(Owner, Target, filename);
+ std::string const idxfilename = GetFinalFileNameFromURI(GetDiffIndexURI(Target));
+ if (FileExists(idxfilename))
+ new NoActionItem(Owner, Target, idxfilename);
+ targetsSeen.emplace(Target.Option(IndexTarget::CREATED_BY));
+ continue;
+ }
+
+ // check if we have patches available
+ trypdiff &= TransactionManager->MetaIndexParser->Exists(GetDiffIndexFileName(Target.MetaKey));
+ }
+ else
+ {
+ // if we have no file to patch, no point in trying
+ trypdiff &= (GetExistingFilename(GetFinalFileNameFromURI(Target.URI)).empty() == false);
+ }
+
+ // no point in patching from local sources
+ if (trypdiff)
+ {
+ std::string const proto = Target.URI.substr(0, strlen("file:/"));
+ if (proto == "file:/" || proto == "copy:/" || proto == "cdrom:")
+ trypdiff = false;
+ }
+
+ // Queue the Index file (Packages, Sources, Translation-$foo, …)
+ targetsSeen.emplace(Target.Option(IndexTarget::CREATED_BY));
+ if (trypdiff)
+ new pkgAcqDiffIndex(Owner, TransactionManager, Target);
+ else
+ new pkgAcqIndex(Owner, TransactionManager, Target);
+ }
+}
+ /*}}}*/
+bool pkgAcqMetaBase::VerifyVendor(string const &) /*{{{*/
+{
+ if (TransactionManager->MetaIndexParser->GetValidUntil() > 0)
+ {
+ time_t const invalid_since = time(NULL) - TransactionManager->MetaIndexParser->GetValidUntil();
+ if (invalid_since > 0)
+ {
+ std::string errmsg;
+ strprintf(errmsg,
+ // TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+ // the time since then the file is invalid - formatted in the same way as in
+ // the download progress display (e.g. 7d 3h 42min 1s)
+ _("Release file for %s is expired (invalid since %s). "
+ "Updates for this repository will not be applied."),
+ Target.URI.c_str(), TimeToStr(invalid_since).c_str());
+ if (ErrorText.empty())
+ ErrorText = errmsg;
+ return _error->Error("%s", errmsg.c_str());
+ }
+ }
+
+ if (TransactionManager->MetaIndexParser->GetNotBefore() > 0)
+ {
+ time_t const invalid_for = TransactionManager->MetaIndexParser->GetNotBefore() - time(nullptr);
+ if (invalid_for > 0)
+ {
+ std::string errmsg;
+ strprintf(errmsg,
+ // TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+ // the time until the file will be valid - formatted in the same way as in
+ // the download progress display (e.g. 7d 3h 42min 1s)
+ _("Release file for %s is not valid yet (invalid for another %s). "
+ "Updates for this repository will not be applied."),
+ Target.URI.c_str(), TimeToStr(invalid_for).c_str());
+ if (ErrorText.empty())
+ ErrorText = errmsg;
+ return _error->Error("%s", errmsg.c_str());
+ }
+ }
+
+ /* Did we get a file older than what we have? This is a last minute IMS hit and doubles
+ as a prevention of downgrading us to older (still valid) files */
+ if (TransactionManager->IMSHit == false && TransactionManager->LastMetaIndexParser != NULL &&
+ TransactionManager->LastMetaIndexParser->GetDate() > TransactionManager->MetaIndexParser->GetDate())
+ {
+ TransactionManager->IMSHit = true;
+ RemoveFile("VerifyVendor", DestFile);
+ PartialFile = DestFile = GetFinalFilename();
+ // load the 'old' file in the 'new' one instead of flipping pointers as
+ // the new one isn't owned by us, while the old one is so cleanup would be confused.
+ TransactionManager->MetaIndexParser->swapLoad(TransactionManager->LastMetaIndexParser);
+ delete TransactionManager->LastMetaIndexParser;
+ TransactionManager->LastMetaIndexParser = NULL;
+ }
+
+ if (_config->FindB("Debug::pkgAcquire::Auth", false))
+ {
+ std::cerr << "Got Codename: " << TransactionManager->MetaIndexParser->GetCodename() << std::endl;
+ std::cerr << "Got Suite: " << TransactionManager->MetaIndexParser->GetSuite() << std::endl;
+ std::cerr << "Expecting Dist: " << TransactionManager->MetaIndexParser->GetExpectedDist() << std::endl;
+ }
+
+ // One day that might become fatal…
+ auto const ExpectedDist = TransactionManager->MetaIndexParser->GetExpectedDist();
+ auto const NowCodename = TransactionManager->MetaIndexParser->GetCodename();
+ if (TransactionManager->MetaIndexParser->CheckDist(ExpectedDist) == false)
+ _error->Warning(_("Conflicting distribution: %s (expected %s but got %s)"),
+ Desc.Description.c_str(), ExpectedDist.c_str(), NowCodename.c_str());
+
+ // changed info potentially breaks user config like pinning
+ if (TransactionManager->LastMetaIndexParser != nullptr)
+ {
+ std::vector<pkgAcquireStatus::ReleaseInfoChange> Changes;
+ auto const AllowInfoChange = _config->FindB("Acquire::AllowReleaseInfoChange", false);
+ auto const quietInfoChange = _config->FindB("quiet::ReleaseInfoChange", false);
+ struct {
+ char const * const Type;
+ bool const Allowed;
+ decltype(&metaIndex::GetOrigin) const Getter;
+ } checkers[] = {
+ { "Origin", AllowInfoChange, &metaIndex::GetOrigin },
+ { "Label", AllowInfoChange, &metaIndex::GetLabel },
+ { "Version", true, &metaIndex::GetVersion }, // numbers change all the time, that is okay
+ { "Suite", true, &metaIndex::GetSuite },
+ { "Codename", AllowInfoChange, &metaIndex::GetCodename },
+ { nullptr, false, nullptr }
+ };
+ auto const CheckReleaseInfo = [&](char const * const Type, bool const AllowChange, decltype(checkers[0].Getter) const Getter) {
+ std::string const Last = (TransactionManager->LastMetaIndexParser->*Getter)();
+ std::string const Now = (TransactionManager->MetaIndexParser->*Getter)();
+ if (Last == Now)
+ return;
+ auto const Allow = _config->FindB(std::string("Acquire::AllowReleaseInfoChange::").append(Type), AllowChange);
+ if (Allow == true && _config->FindB(std::string("quiet::ReleaseInfoChange::").append(Type), quietInfoChange) == true)
+ return;
+ std::string msg;
+ strprintf(msg, _("Repository '%s' changed its '%s' value from '%s' to '%s'"),
+ Desc.Description.c_str(), Type, Last.c_str(), Now.c_str());
+ Changes.push_back({Type, std::move(Last), std::move(Now), std::move(msg), Allow});
+ };
+ for (short i = 0; checkers[i].Type != nullptr; ++i)
+ CheckReleaseInfo(checkers[i].Type, checkers[i].Allowed, checkers[i].Getter);
+
+ {
+ auto const Last = TransactionManager->LastMetaIndexParser->GetDefaultPin();
+ auto const Now = TransactionManager->MetaIndexParser->GetDefaultPin();
+ if (Last != Now)
+ {
+ auto const Allow = _config->FindB("Acquire::AllowReleaseInfoChange::DefaultPin", AllowInfoChange);
+ if (Allow == false || _config->FindB("quiet::ReleaseInfoChange::DefaultPin", quietInfoChange) == false)
+ {
+ std::string msg;
+ strprintf(msg, _("Repository '%s' changed its default priority for %s from %hi to %hi."),
+ Desc.Description.c_str(), "apt_preferences(5)", Last, Now);
+ Changes.push_back({"DefaultPin", std::to_string(Last), std::to_string(Now), std::move(msg), Allow});
+ }
+ }
+ }
+ if (Changes.empty() == false)
+ {
+ auto const notes = TransactionManager->MetaIndexParser->GetReleaseNotes();
+ if (notes.empty() == false)
+ {
+ std::string msg;
+ // TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+ strprintf(msg, _("More information about this can be found online in the Release notes at: %s"), notes.c_str());
+ Changes.push_back({"Release-Notes", "", std::move(notes), std::move(msg), true});
+ }
+ if (std::any_of(Changes.begin(),Changes.end(),[](pkgAcquireStatus::ReleaseInfoChange const &c) { return c.DefaultAction == false; }))
+ {
+ std::string msg;
+ // TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+ strprintf(msg, _("This must be accepted explicitly before updates for "
+ "this repository can be applied. See %s manpage for details."), "apt-secure(8)");
+ Changes.push_back({"Confirmation", "", "", std::move(msg), true});
+ }
+
+ }
+ if (Owner->Log == nullptr)
+ return pkgAcquireStatus::ReleaseInfoChangesAsGlobalErrors(std::move(Changes));
+ return Owner->Log->ReleaseInfoChanges(TransactionManager->LastMetaIndexParser, TransactionManager->MetaIndexParser, std::move(Changes));
+ }
+ return true;
+}
+ /*}}}*/
+pkgAcqMetaBase::~pkgAcqMetaBase()
+{
+}
+
+pkgAcqMetaClearSig::pkgAcqMetaClearSig(pkgAcquire * const Owner, /*{{{*/
+ IndexTarget const &ClearsignedTarget,
+ IndexTarget const &DetachedDataTarget, IndexTarget const &DetachedSigTarget,
+ metaIndex * const MetaIndexParser) :
+ pkgAcqMetaIndex(Owner, this, ClearsignedTarget, DetachedSigTarget),
+ d(NULL), DetachedDataTarget(DetachedDataTarget),
+ MetaIndexParser(MetaIndexParser), LastMetaIndexParser(NULL)
+{
+ // index targets + (worst case:) Release/Release.gpg
+ ExpectedAdditionalItems = std::numeric_limits<decltype(ExpectedAdditionalItems)>::max();
+ TransactionManager->Add(this);
+}
+ /*}}}*/
+pkgAcqMetaClearSig::~pkgAcqMetaClearSig() /*{{{*/
+{
+ if (LastMetaIndexParser != NULL)
+ delete LastMetaIndexParser;
+}
+ /*}}}*/
+// pkgAcqMetaClearSig::Custom600Headers - Insert custom request headers /*{{{*/
+string pkgAcqMetaClearSig::Custom600Headers() const
+{
+ string Header = pkgAcqMetaBase::Custom600Headers();
+ Header += "\nFail-Ignore: true";
+ std::string const key = TransactionManager->MetaIndexParser->GetSignedBy();
+ if (key.empty() == false)
+ Header += "\nSigned-By: " + key;
+
+ return Header;
+}
+ /*}}}*/
+void pkgAcqMetaClearSig::Finished() /*{{{*/
+{
+ if(_config->FindB("Debug::Acquire::Transaction", false) == true)
+ std::clog << "Finished: " << DestFile <<std::endl;
+ if(TransactionManager->State == TransactionStarted &&
+ TransactionManager->TransactionHasError() == false)
+ TransactionManager->CommitTransaction();
+}
+ /*}}}*/
+bool pkgAcqMetaClearSig::VerifyDone(std::string const &Message, /*{{{*/
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ if (Item::VerifyDone(Message, Cnf) == false)
+ return false;
+
+ if (FileExists(DestFile) && !StartsWithGPGClearTextSignature(DestFile))
+ return RenameOnError(NotClearsigned);
+
+ return true;
+}
+ /*}}}*/
+// pkgAcqMetaClearSig::Done - We got a file /*{{{*/
+void pkgAcqMetaClearSig::Done(std::string const &Message,
+ HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ Item::Done(Message, Hashes, Cnf);
+
+ if(AuthPass == false)
+ {
+ if(CheckDownloadDone(this, Message, Hashes) == true)
+ QueueForSignatureVerify(this, DestFile, DestFile);
+ return;
+ }
+ else if (CheckAuthDone(Message, Cnf) == true)
+ {
+ if (TransactionManager->IMSHit == false)
+ TransactionManager->TransactionStageCopy(this, DestFile, GetFinalFilename());
+ else if (RealFileExists(GetFinalFilename()) == false)
+ {
+ // We got an InRelease file IMSHit, but we haven't one, which means
+ // we had a valid Release/Release.gpg combo stepping in, which we have
+ // to 'acquire' now to ensure list cleanup isn't removing them
+ new NoActionItem(Owner, DetachedDataTarget);
+ new NoActionItem(Owner, DetachedSigTarget);
+ }
+ }
+ else if (Status != StatAuthError)
+ {
+ string const FinalFile = GetFinalFileNameFromURI(DetachedDataTarget.URI);
+ string const OldFile = GetFinalFilename();
+ if (TransactionManager->IMSHit == false)
+ TransactionManager->TransactionStageCopy(this, DestFile, FinalFile);
+ else if (RealFileExists(OldFile) == false)
+ new NoActionItem(Owner, DetachedDataTarget);
+ else
+ TransactionManager->TransactionStageCopy(this, OldFile, FinalFile);
+ }
+}
+ /*}}}*/
+void pkgAcqMetaClearSig::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf) /*{{{*/
+{
+ Item::Failed(Message, Cnf);
+
+ if (AuthPass == false)
+ {
+ if (Status == StatTransientNetworkError)
+ {
+ TransactionManager->AbortTransaction();
+ return;
+ }
+ auto const failreason = LookupTag(Message, "FailReason");
+ auto const httperror = "HttpError";
+ if (Status == StatAuthError ||
+ Target.Option(IndexTarget::INRELEASE_PATH).empty() == false || /* do not fallback if InRelease was requested */
+ (strncmp(failreason.c_str(), httperror, strlen(httperror)) == 0 &&
+ failreason != "HttpError404"))
+ {
+ // if we expected a ClearTextSignature (InRelease) but got a network
+ // error or got a file, but it wasn't valid, we end up here (see VerifyDone).
+ // As these is usually called by web-portals we do not try Release/Release.gpg
+ // as this is going to fail anyway and instead abort our try (LP#346386)
+ _error->PushToStack();
+ _error->Error(_("Failed to fetch %s %s"), Target.URI.c_str(), ErrorText.c_str());
+ if (Target.Option(IndexTarget::INRELEASE_PATH).empty() == true && AllowInsecureRepositories(InsecureType::UNSIGNED, Target.Description, TransactionManager->MetaIndexParser, TransactionManager, this) == true)
+ _error->RevertToStack();
+ else
+ return;
+ }
+
+ // Queue the 'old' InRelease file for removal if we try Release.gpg
+ // as otherwise the file will stay around and gives a false-auth
+ // impression (CVE-2012-0214)
+ TransactionManager->TransactionStageRemoval(this, GetFinalFilename());
+ Status = StatDone;
+
+ new pkgAcqMetaIndex(Owner, TransactionManager, DetachedDataTarget, DetachedSigTarget);
+ }
+ else
+ {
+ if(CheckStopAuthentication(this, Message))
+ return;
+
+ if(AllowInsecureRepositories(InsecureType::UNSIGNED, Target.Description, TransactionManager->MetaIndexParser, TransactionManager, this) == true)
+ {
+ Status = StatDone;
+
+ /* InRelease files become Release files, otherwise
+ * they would be considered as trusted later on */
+ string const FinalRelease = GetFinalFileNameFromURI(DetachedDataTarget.URI);
+ string const PartialRelease = GetPartialFileNameFromURI(DetachedDataTarget.URI);
+ string const FinalReleasegpg = GetFinalFileNameFromURI(DetachedSigTarget.URI);
+ string const FinalInRelease = GetFinalFilename();
+ Rename(DestFile, PartialRelease);
+ TransactionManager->TransactionStageCopy(this, PartialRelease, FinalRelease);
+ LoadLastMetaIndexParser(TransactionManager, FinalRelease, FinalInRelease);
+
+ // we parse the indexes here because at this point the user wanted
+ // a repository that may potentially harm him
+ if (TransactionManager->MetaIndexParser->Load(PartialRelease, &ErrorText) == false || VerifyVendor(Message) == false)
+ /* expired Release files are still a problem you need extra force for */;
+ else
+ TransactionManager->QueueIndexes(true);
+ }
+ }
+}
+ /*}}}*/
+
+pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire * const Owner, /*{{{*/
+ pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &DataTarget,
+ IndexTarget const &DetachedSigTarget) :
+ pkgAcqMetaBase(Owner, TransactionManager, DataTarget), d(NULL),
+ DetachedSigTarget(DetachedSigTarget)
+{
+ if(_config->FindB("Debug::Acquire::Transaction", false) == true)
+ std::clog << "New pkgAcqMetaIndex with TransactionManager "
+ << this->TransactionManager << std::endl;
+
+ DestFile = GetPartialFileNameFromURI(DataTarget.URI);
+
+ // Create the item
+ Desc.Description = DataTarget.Description;
+ Desc.Owner = this;
+ Desc.ShortDesc = DataTarget.ShortDesc;
+
+ // Rewrite the description URI if INRELEASE_PATH was specified so
+ // we download the specified file instead.
+ auto InReleasePath = DataTarget.Option(IndexTarget::INRELEASE_PATH);
+ if (InReleasePath.empty() == false && APT::String::Endswith(DataTarget.URI, "/InRelease"))
+ {
+ Desc.URI = DataTarget.URI.substr(0, DataTarget.URI.size() - strlen("InRelease")) + InReleasePath;
+ }
+ else
+ {
+ Desc.URI = DataTarget.URI;
+ }
+
+ QueueURI(Desc);
+}
+ /*}}}*/
+void pkgAcqMetaIndex::Done(string const &Message, /*{{{*/
+ HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cfg)
+{
+ Item::Done(Message,Hashes,Cfg);
+
+ if(CheckDownloadDone(this, Message, Hashes))
+ {
+ // we have a Release file, now download the Signature, all further
+ // verify/queue for additional downloads will be done in the
+ // pkgAcqMetaSig::Done() code
+ new pkgAcqMetaSig(Owner, TransactionManager, DetachedSigTarget, this);
+ }
+}
+ /*}}}*/
+// pkgAcqMetaIndex::Failed - no Release file present /*{{{*/
+void pkgAcqMetaIndex::Failed(string const &Message,
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ pkgAcquire::Item::Failed(Message, Cnf);
+ Status = StatDone;
+
+ // No Release file was present so fall
+ // back to queueing Packages files without verification
+ // only allow going further if the user explicitly wants it
+ if(AllowInsecureRepositories(InsecureType::NORELEASE, Target.Description, TransactionManager->MetaIndexParser, TransactionManager, this) == true)
+ {
+ // ensure old Release files are removed
+ TransactionManager->TransactionStageRemoval(this, GetFinalFilename());
+
+ // queue without any kind of hashsum support
+ TransactionManager->QueueIndexes(false);
+ }
+}
+ /*}}}*/
+std::string pkgAcqMetaIndex::DescURI() const /*{{{*/
+{
+ return Target.URI;
+}
+ /*}}}*/
+pkgAcqMetaIndex::~pkgAcqMetaIndex() {}
+
+// AcqMetaSig::AcqMetaSig - Constructor /*{{{*/
+pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire * const Owner,
+ pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target,
+ pkgAcqMetaIndex * const MetaIndex) :
+ pkgAcqTransactionItem(Owner, TransactionManager, Target), d(NULL), MetaIndex(MetaIndex)
+{
+ DestFile = GetPartialFileNameFromURI(Target.URI);
+
+ // remove any partial downloaded sig-file in partial/.
+ // it may confuse proxies and is too small to warrant a
+ // partial download anyway
+ RemoveFile("pkgAcqMetaSig", DestFile);
+
+ // set the TransactionManager
+ if(_config->FindB("Debug::Acquire::Transaction", false) == true)
+ std::clog << "New pkgAcqMetaSig with TransactionManager "
+ << TransactionManager << std::endl;
+
+ // Create the item
+ Desc.Description = Target.Description;
+ Desc.Owner = this;
+ Desc.ShortDesc = Target.ShortDesc;
+ Desc.URI = Target.URI;
+
+ // If we got a hit for Release, we will get one for Release.gpg too (or obscure errors),
+ // so we skip the download step and go instantly to verification
+ if (TransactionManager->IMSHit == true && RealFileExists(GetFinalFilename()))
+ {
+ Complete = true;
+ Status = StatDone;
+ PartialFile = DestFile = GetFinalFilename();
+ MetaIndexFileSignature = DestFile;
+ MetaIndex->QueueForSignatureVerify(this, MetaIndex->DestFile, DestFile);
+ }
+ else
+ QueueURI(Desc);
+}
+ /*}}}*/
+pkgAcqMetaSig::~pkgAcqMetaSig() /*{{{*/
+{
+}
+ /*}}}*/
+// pkgAcqMetaSig::Custom600Headers - Insert custom request headers /*{{{*/
+std::string pkgAcqMetaSig::Custom600Headers() const
+{
+ std::string Header = pkgAcqTransactionItem::Custom600Headers();
+ std::string const key = TransactionManager->MetaIndexParser->GetSignedBy();
+ if (key.empty() == false)
+ Header += "\nSigned-By: " + key;
+ return Header;
+}
+ /*}}}*/
+// AcqMetaSig::Done - The signature was downloaded/verified /*{{{*/
+void pkgAcqMetaSig::Done(string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cfg)
+{
+ if (MetaIndexFileSignature.empty() == false)
+ {
+ DestFile = MetaIndexFileSignature;
+ MetaIndexFileSignature.clear();
+ }
+ Item::Done(Message, Hashes, Cfg);
+
+ if(MetaIndex->AuthPass == false)
+ {
+ if(MetaIndex->CheckDownloadDone(this, Message, Hashes) == true)
+ {
+ // destfile will be modified to point to MetaIndexFile for the
+ // gpgv method, so we need to save it here
+ MetaIndexFileSignature = DestFile;
+ MetaIndex->QueueForSignatureVerify(this, MetaIndex->DestFile, DestFile);
+ }
+ return;
+ }
+ else if (MetaIndex->CheckAuthDone(Message, Cfg) == true)
+ {
+ auto const Releasegpg = GetFinalFilename();
+ auto const Release = MetaIndex->GetFinalFilename();
+ // if this is an IMS-Hit on Release ensure we also have the Release.gpg file stored
+ // (previously an unknown pubkey) – but only if the Release file exists locally (unlikely
+ // event of InRelease removed from the mirror causing fallback but still an IMS-Hit)
+ if (TransactionManager->IMSHit == false ||
+ (FileExists(Releasegpg) == false && FileExists(Release) == true))
+ {
+ TransactionManager->TransactionStageCopy(this, DestFile, Releasegpg);
+ TransactionManager->TransactionStageCopy(MetaIndex, MetaIndex->DestFile, Release);
+ }
+ }
+ else if (MetaIndex->Status != StatAuthError)
+ {
+ std::string const FinalFile = MetaIndex->GetFinalFilename();
+ if (TransactionManager->IMSHit == false)
+ TransactionManager->TransactionStageCopy(MetaIndex, MetaIndex->DestFile, FinalFile);
+ else
+ TransactionManager->TransactionStageCopy(MetaIndex, FinalFile, FinalFile);
+ }
+}
+ /*}}}*/
+void pkgAcqMetaSig::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)/*{{{*/
+{
+ Item::Failed(Message,Cnf);
+
+ // check if we need to fail at this point
+ if (MetaIndex->AuthPass == true && MetaIndex->CheckStopAuthentication(this, Message))
+ return;
+
+ // ensures that a Release.gpg file in the lists/ is removed by the transaction
+ TransactionManager->TransactionStageRemoval(this, DestFile);
+
+ // only allow going further if the user explicitly wants it
+ if (AllowInsecureRepositories(InsecureType::UNSIGNED, MetaIndex->Target.Description, TransactionManager->MetaIndexParser, TransactionManager, this) == true)
+ {
+ string const FinalRelease = MetaIndex->GetFinalFilename();
+ string const FinalInRelease = TransactionManager->GetFinalFilename();
+ LoadLastMetaIndexParser(TransactionManager, FinalRelease, FinalInRelease);
+
+ // we parse the indexes here because at this point the user wanted
+ // a repository that may potentially harm him
+ bool const GoodLoad = TransactionManager->MetaIndexParser->Load(MetaIndex->DestFile, &ErrorText);
+ if (MetaIndex->VerifyVendor(Message) == false)
+ /* expired Release files are still a problem you need extra force for */;
+ else
+ TransactionManager->QueueIndexes(GoodLoad);
+
+ TransactionManager->TransactionStageCopy(MetaIndex, MetaIndex->DestFile, FinalRelease);
+ }
+ else if (TransactionManager->IMSHit == false)
+ Rename(MetaIndex->DestFile, MetaIndex->DestFile + ".FAILED");
+
+ // FIXME: this is used often (e.g. in pkgAcqIndexTrans) so refactor
+ if (Cnf->LocalOnly == true ||
+ StringToBool(LookupTag(Message,"Transient-Failure"),false) == false)
+ {
+ // Ignore this
+ Status = StatDone;
+ }
+}
+ /*}}}*/
+
+
+// AcqBaseIndex - Constructor /*{{{*/
+pkgAcqBaseIndex::pkgAcqBaseIndex(pkgAcquire * const Owner,
+ pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target)
+: pkgAcqTransactionItem(Owner, TransactionManager, Target), d(NULL)
+{
+}
+ /*}}}*/
+void pkgAcqBaseIndex::Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf)/*{{{*/
+{
+ pkgAcquire::Item::Failed(Message, Cnf);
+ if (Status != StatAuthError)
+ return;
+
+ ErrorText.append("Release file created at: ");
+ auto const timespec = TransactionManager->MetaIndexParser->GetDate();
+ if (timespec == 0)
+ ErrorText.append("<unknown>");
+ else
+ ErrorText.append(TimeRFC1123(timespec, true));
+ ErrorText.append("\n");
+}
+ /*}}}*/
+pkgAcqBaseIndex::~pkgAcqBaseIndex() {}
+
+// AcqDiffIndex::AcqDiffIndex - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Get the DiffIndex file first and see if there are patches available
+ * If so, create a pkgAcqIndexDiffs fetcher that will get and apply the
+ * patches. If anything goes wrong in that process, it will fall back to
+ * the original packages file
+ */
+pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire * const Owner,
+ pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target)
+ : pkgAcqIndex(Owner, TransactionManager, Target, true), d(NULL), diffs(NULL)
+{
+ // FIXME: Magic number as an upper bound on pdiffs we will reasonably acquire
+ ExpectedAdditionalItems = 40;
+ Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
+
+ CompressionExtensions.clear();
+ {
+ std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+ if (types.empty() == false)
+ {
+ std::ostringstream os;
+ std::copy_if(types.begin(), types.end()-1, std::ostream_iterator<std::string>(os, " "), [&](std::string const type) {
+ if (type == "uncompressed")
+ return true;
+ return TransactionManager->MetaIndexParser->Exists(GetDiffIndexFileName(Target.MetaKey) + '.' + type);
+ });
+ os << *types.rbegin();
+ CompressionExtensions = os.str();
+ }
+ }
+ Init(GetDiffIndexURI(Target), GetDiffIndexFileName(Target.Description), Target.ShortDesc);
+
+ if(Debug)
+ std::clog << "pkgAcqDiffIndex: " << Desc.URI << std::endl;
+}
+ /*}}}*/
+void pkgAcqDiffIndex::QueueOnIMSHit() const /*{{{*/
+{
+ // list cleanup needs to know that this file as well as the already
+ // present index is ours, so we create an empty diff to save it for us
+ new pkgAcqIndexDiffs(Owner, TransactionManager, Target);
+}
+ /*}}}*/
+static bool RemoveFileForBootstrapLinking(std::string &ErrorText, std::string const &For, std::string const &Boot)/*{{{*/
+{
+ if (FileExists(Boot) && RemoveFile("Bootstrap-linking", Boot) == false)
+ {
+ strprintf(ErrorText, "Bootstrap for patching %s by removing stale %s failed!", For.c_str(), Boot.c_str());
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/
+{
+ available_patches.clear();
+ ExpectedAdditionalItems = 0;
+ // failing here is fine: our caller will take care of trying to
+ // get the complete file if patching fails
+ if(Debug)
+ std::clog << "pkgAcqDiffIndex::ParseIndexDiff() " << IndexDiffFile
+ << std::endl;
+
+ FileFd Fd(IndexDiffFile, FileFd::ReadOnly, FileFd::Extension);
+ pkgTagFile TF(&Fd);
+ if (Fd.IsOpen() == false || Fd.Failed())
+ return false;
+
+ pkgTagSection Tags;
+ if(unlikely(TF.Step(Tags) == false))
+ return false;
+
+ HashStringList ServerHashes;
+ unsigned long long ServerSize = 0;
+
+ auto const &posix = std::locale::classic();
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ std::string tagname = *type;
+ tagname.append("-Current");
+ std::string const tmp = Tags.FindS(tagname.c_str());
+ if (tmp.empty() == true)
+ continue;
+
+ string hash;
+ unsigned long long size;
+ std::stringstream ss(tmp);
+ ss.imbue(posix);
+ ss >> hash >> size;
+ if (unlikely(hash.empty() == true))
+ continue;
+ if (unlikely(ServerSize != 0 && ServerSize != size))
+ continue;
+ ServerHashes.push_back(HashString(*type, hash));
+ ServerSize = size;
+ }
+
+ if (ServerHashes.usable() == false)
+ {
+ ErrorText = "Did not find a good hashsum in the index";
+ return false;
+ }
+
+ std::string const CurrentPackagesFile = GetFinalFileNameFromURI(Target.URI);
+ HashStringList const TargetFileHashes = GetExpectedHashesFor(Target.MetaKey);
+ if (TargetFileHashes.usable() == false || ServerHashes != TargetFileHashes)
+ {
+ ErrorText = "Index has different hashes than parser (probably older)";
+ return false;
+ }
+
+ HashStringList LocalHashes;
+ // try avoiding calculating the hash here as this is costly
+ if (TransactionManager->LastMetaIndexParser != NULL)
+ LocalHashes = GetExpectedHashesFromFor(TransactionManager->LastMetaIndexParser, Target.MetaKey);
+ if (LocalHashes.usable() == false)
+ {
+ FileFd fd(CurrentPackagesFile, FileFd::ReadOnly, FileFd::Auto);
+ Hashes LocalHashesCalc(ServerHashes);
+ LocalHashesCalc.AddFD(fd);
+ LocalHashes = LocalHashesCalc.GetHashStringList();
+ }
+
+ if (ServerHashes == LocalHashes)
+ {
+ available_patches.clear();
+ return true;
+ }
+
+ if(Debug)
+ std::clog << "Server-Current: " << ServerHashes.find(NULL)->toStr() << " and we start at "
+ << CurrentPackagesFile << " " << LocalHashes.FileSize() << " " << LocalHashes.find(NULL)->toStr() << std::endl;
+
+ // historically, older hashes have more info than newer ones, so start
+ // collecting with older ones first to avoid implementing complicated
+ // information merging techniques… a failure is after all always
+ // recoverable with a complete file and hashes aren't changed that often.
+ std::vector<char const *> types;
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ types.push_back(*type);
+
+ // parse all of (provided) history
+ bool firstAcceptedHashes = true;
+ for (auto type = types.crbegin(); type != types.crend(); ++type)
+ {
+ if (LocalHashes.find(*type) == NULL)
+ continue;
+
+ std::string tagname = *type;
+ tagname.append("-History");
+ std::string const tmp = Tags.FindS(tagname.c_str());
+ if (tmp.empty() == true)
+ continue;
+
+ string hash, filename;
+ unsigned long long size;
+ std::stringstream ss(tmp);
+ ss.imbue(posix);
+
+ while (ss >> hash >> size >> filename)
+ {
+ if (unlikely(hash.empty() == true || filename.empty() == true))
+ continue;
+
+ // see if we have a record for this file already
+ std::vector<DiffInfo>::iterator cur = available_patches.begin();
+ for (; cur != available_patches.end(); ++cur)
+ {
+ if (cur->file != filename)
+ continue;
+ cur->result_hashes.push_back(HashString(*type, hash));
+ break;
+ }
+ if (cur != available_patches.end())
+ continue;
+ if (firstAcceptedHashes == true)
+ {
+ DiffInfo next;
+ next.file = filename;
+ next.result_hashes.push_back(HashString(*type, hash));
+ next.result_hashes.FileSize(size);
+ available_patches.push_back(next);
+ }
+ else
+ {
+ if (Debug == true)
+ std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": File " << filename
+ << " wasn't in the list for the first parsed hash! (history)" << std::endl;
+ break;
+ }
+ }
+ firstAcceptedHashes = false;
+ }
+
+ if (unlikely(available_patches.empty() == true))
+ {
+ ErrorText = "Couldn't find any patches for the patch series";
+ return false;
+ }
+
+ for (auto type = types.crbegin(); type != types.crend(); ++type)
+ {
+ if (LocalHashes.find(*type) == NULL)
+ continue;
+
+ std::string tagname = *type;
+ tagname.append("-Patches");
+ std::string const tmp = Tags.FindS(tagname.c_str());
+ if (tmp.empty() == true)
+ continue;
+
+ string hash, filename;
+ unsigned long long size;
+ std::stringstream ss(tmp);
+ ss.imbue(posix);
+
+ while (ss >> hash >> size >> filename)
+ {
+ if (unlikely(hash.empty() == true || filename.empty() == true))
+ continue;
+
+ // see if we have a record for this file already
+ std::vector<DiffInfo>::iterator cur = available_patches.begin();
+ for (; cur != available_patches.end(); ++cur)
+ {
+ if (cur->file != filename)
+ continue;
+ if (cur->patch_hashes.empty())
+ cur->patch_hashes.FileSize(size);
+ cur->patch_hashes.push_back(HashString(*type, hash));
+ break;
+ }
+ if (cur != available_patches.end())
+ continue;
+ if (Debug == true)
+ std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": File " << filename
+ << " wasn't in the list for the first parsed hash! (patches)" << std::endl;
+ break;
+ }
+ }
+
+ for (auto type = types.crbegin(); type != types.crend(); ++type)
+ {
+ std::string tagname = *type;
+ tagname.append("-Download");
+ std::string const tmp = Tags.FindS(tagname.c_str());
+ if (tmp.empty() == true)
+ continue;
+
+ string hash, filename;
+ unsigned long long size;
+ std::stringstream ss(tmp);
+ ss.imbue(posix);
+
+ // FIXME: all of pdiff supports only .gz compressed patches
+ while (ss >> hash >> size >> filename)
+ {
+ if (unlikely(hash.empty() == true || filename.empty() == true))
+ continue;
+ if (unlikely(APT::String::Endswith(filename, ".gz") == false))
+ continue;
+ filename.erase(filename.length() - 3);
+
+ // see if we have a record for this file already
+ std::vector<DiffInfo>::iterator cur = available_patches.begin();
+ for (; cur != available_patches.end(); ++cur)
+ {
+ if (cur->file != filename)
+ continue;
+ if (cur->download_hashes.empty())
+ cur->download_hashes.FileSize(size);
+ cur->download_hashes.push_back(HashString(*type, hash));
+ break;
+ }
+ if (cur != available_patches.end())
+ continue;
+ if (Debug == true)
+ std::clog << "pkgAcqDiffIndex: " << IndexDiffFile << ": File " << filename
+ << " wasn't in the list for the first parsed hash! (download)" << std::endl;
+ break;
+ }
+ }
+
+
+ bool foundStart = false;
+ for (std::vector<DiffInfo>::iterator cur = available_patches.begin();
+ cur != available_patches.end(); ++cur)
+ {
+ if (LocalHashes != cur->result_hashes)
+ continue;
+
+ available_patches.erase(available_patches.begin(), cur);
+ foundStart = true;
+ break;
+ }
+
+ if (foundStart == false || unlikely(available_patches.empty() == true))
+ {
+ ErrorText = "Couldn't find the start of the patch series";
+ return false;
+ }
+
+ for (auto const &patch: available_patches)
+ if (patch.result_hashes.usable() == false ||
+ patch.patch_hashes.usable() == false ||
+ patch.download_hashes.usable() == false)
+ {
+ strprintf(ErrorText, "Provides no usable hashes for %s", patch.file.c_str());
+ return false;
+ }
+
+ // patching with too many files is rather slow compared to a fast download
+ unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 0);
+ if (fileLimit != 0 && fileLimit < available_patches.size())
+ {
+ strprintf(ErrorText, "Need %lu diffs, but limit is %lu", available_patches.size(), fileLimit);
+ return false;
+ }
+
+ // calculate the size of all patches we have to get
+ unsigned short const sizeLimitPercent = _config->FindI("Acquire::PDiffs::SizeLimit", 100);
+ if (sizeLimitPercent > 0)
+ {
+ unsigned long long downloadSize = std::accumulate(available_patches.begin(),
+ available_patches.end(), 0llu, [](unsigned long long const T, DiffInfo const &I) {
+ return T + I.download_hashes.FileSize();
+ });
+ if (downloadSize != 0)
+ {
+ unsigned long long downloadSizeIdx = 0;
+ auto const types = VectorizeString(Target.Option(IndexTarget::COMPRESSIONTYPES), ' ');
+ for (auto const &t : types)
+ {
+ std::string MetaKey = Target.MetaKey;
+ if (t != "uncompressed")
+ MetaKey += '.' + t;
+ HashStringList const hsl = GetExpectedHashesFor(MetaKey);
+ if (unlikely(hsl.usable() == false))
+ continue;
+ downloadSizeIdx = hsl.FileSize();
+ break;
+ }
+ unsigned long long const sizeLimit = downloadSizeIdx * sizeLimitPercent;
+ if ((sizeLimit/100) < downloadSize)
+ {
+ strprintf(ErrorText, "Need %llu compressed bytes, but limit is %llu and original is %llu", downloadSize, (sizeLimit/100), downloadSizeIdx);
+ return false;
+ }
+ }
+ }
+
+ /* decide if we should download patches one by one or in one go:
+ The first is good if the server merges patches, but many don't so client
+ based merging can be attempt in which case the second is better.
+ "bad things" will happen if patches are merged on the server,
+ but client side merging is attempt as well */
+ pdiff_merge = _config->FindB("Acquire::PDiffs::Merge", true);
+ if (pdiff_merge == true)
+ {
+ // reprepro adds this flag if it has merged patches on the server
+ std::string const precedence = Tags.FindS("X-Patch-Precedence");
+ pdiff_merge = (precedence != "merged");
+ }
+
+ // clean the plate
+ {
+ std::string const Final = GetExistingFilename(CurrentPackagesFile);
+ if (unlikely(Final.empty())) // because we wouldn't be called in such a case
+ return false;
+ std::string const PartialFile = GetPartialFileNameFromURI(Target.URI);
+ std::string const PatchedFile = GetKeepCompressedFileName(PartialFile + "-patched", Target);
+ if (RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile) == false ||
+ RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile) == false)
+ return false;
+ for (auto const &ext : APT::Configuration::getCompressorExtensions())
+ {
+ if (RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile + ext) == false ||
+ RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile + ext) == false)
+ return false;
+ }
+ std::string const Ext = Final.substr(CurrentPackagesFile.length());
+ std::string const Partial = PartialFile + Ext;
+ if (symlink(Final.c_str(), Partial.c_str()) != 0)
+ {
+ strprintf(ErrorText, "Bootstrap for patching by linking %s to %s failed!", Final.c_str(), Partial.c_str());
+ return false;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+void pkgAcqDiffIndex::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)/*{{{*/
+{
+ if (CommonFailed(GetDiffIndexURI(Target), Message, Cnf))
+ return;
+
+ RenameOnError(PDiffError);
+ Status = StatDone;
+ ExpectedAdditionalItems = 0;
+
+ if(Debug)
+ std::clog << "pkgAcqDiffIndex failed: " << Desc.URI << " with " << Message << std::endl
+ << "Falling back to normal index file acquire" << std::endl;
+
+ new pkgAcqIndex(Owner, TransactionManager, Target);
+}
+ /*}}}*/
+bool pkgAcqDiffIndex::VerifyDone(std::string const &Message, pkgAcquire::MethodConfig const * const)/*{{{*/
+{
+ string const FinalFile = GetFinalFilename();
+ if(StringToBool(LookupTag(Message,"IMS-Hit"),false))
+ DestFile = FinalFile;
+
+ if (ParseDiffIndex(DestFile))
+ return true;
+
+ Status = StatError;
+ if (ErrorText.empty())
+ ErrorText = "Couldn't parse pdiff index";
+ return false;
+}
+ /*}}}*/
+void pkgAcqDiffIndex::Done(string const &Message,HashStringList const &Hashes, /*{{{*/
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ if(Debug)
+ std::clog << "pkgAcqDiffIndex::Done(): " << Desc.URI << std::endl;
+
+ Item::Done(Message, Hashes, Cnf);
+
+ if (available_patches.empty())
+ {
+ // we have the same sha1 as the server so we are done here
+ if(Debug)
+ std::clog << "pkgAcqDiffIndex: Package file is up-to-date" << std::endl;
+ QueueOnIMSHit();
+ }
+ else
+ {
+ if (pdiff_merge == false)
+ new pkgAcqIndexDiffs(Owner, TransactionManager, Target, available_patches);
+ else
+ {
+ diffs = new std::vector<pkgAcqIndexMergeDiffs*>(available_patches.size());
+ for(size_t i = 0; i < available_patches.size(); ++i)
+ (*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, TransactionManager,
+ Target,
+ available_patches[i],
+ diffs);
+ }
+ }
+
+ TransactionManager->TransactionStageCopy(this, DestFile, GetFinalFilename());
+
+ Complete = true;
+ Status = StatDone;
+ Dequeue();
+
+ return;
+}
+ /*}}}*/
+pkgAcqDiffIndex::~pkgAcqDiffIndex()
+{
+ if (diffs != NULL)
+ delete diffs;
+}
+
+// AcqIndexDiffs::AcqIndexDiffs - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* The package diff is added to the queue. one object is constructed
+ * for each diff and the index
+ */
+pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire *const Owner,
+ pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target,
+ vector<DiffInfo> const &diffs)
+ : pkgAcqBaseIndex(Owner, TransactionManager, Target),
+ available_patches(diffs)
+{
+ DestFile = GetKeepCompressedFileName(GetPartialFileNameFromURI(Target.URI), Target);
+
+ Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
+
+ Desc.Owner = this;
+ Desc.ShortDesc = Target.ShortDesc;
+
+ if(available_patches.empty() == true)
+ {
+ // we are done (yeah!), check hashes against the final file
+ DestFile = GetKeepCompressedFileName(GetFinalFileNameFromURI(Target.URI), Target);
+ Finish(true);
+ }
+ else
+ {
+ State = StateFetchDiff;
+ QueueNextDiff();
+ }
+}
+ /*}}}*/
+void pkgAcqIndexDiffs::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)/*{{{*/
+{
+ pkgAcqBaseIndex::Failed(Message,Cnf);
+ Status = StatDone;
+
+ DestFile = GetKeepCompressedFileName(GetPartialFileNameFromURI(Target.URI), Target);
+ if(Debug)
+ std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << " with " << Message << std::endl
+ << "Falling back to normal index file acquire " << std::endl;
+ RenameOnError(PDiffError);
+ std::string const patchname = GetDiffsPatchFileName(DestFile);
+ if (RealFileExists(patchname))
+ Rename(patchname, patchname + ".FAILED");
+ std::string const UnpatchedFile = GetExistingFilename(GetPartialFileNameFromURI(Target.URI));
+ if (UnpatchedFile.empty() == false && FileExists(UnpatchedFile))
+ Rename(UnpatchedFile, UnpatchedFile + ".FAILED");
+ new pkgAcqIndex(Owner, TransactionManager, Target);
+ Finish();
+}
+ /*}}}*/
+// Finish - helper that cleans the item out of the fetcher queue /*{{{*/
+void pkgAcqIndexDiffs::Finish(bool allDone)
+{
+ if(Debug)
+ std::clog << "pkgAcqIndexDiffs::Finish(): "
+ << allDone << " "
+ << Desc.URI << std::endl;
+
+ // we restore the original name, this is required, otherwise
+ // the file will be cleaned
+ if(allDone)
+ {
+ std::string const Final = GetKeepCompressedFileName(GetFinalFilename(), Target);
+ TransactionManager->TransactionStageCopy(this, DestFile, Final);
+
+ // this is for the "real" finish
+ Complete = true;
+ Status = StatDone;
+ Dequeue();
+ if(Debug)
+ std::clog << "\n\nallDone: " << DestFile << "\n" << std::endl;
+ return;
+ }
+ else
+ DestFile.clear();
+
+ if(Debug)
+ std::clog << "Finishing: " << Desc.URI << std::endl;
+ Complete = false;
+ Status = StatDone;
+ Dequeue();
+ return;
+}
+ /*}}}*/
+bool pkgAcqIndexDiffs::QueueNextDiff() /*{{{*/
+{
+ // calc sha1 of the just patched file
+ std::string const PartialFile = GetExistingFilename(GetPartialFileNameFromURI(Target.URI));
+ if(unlikely(PartialFile.empty()))
+ {
+ Failed("Message: The file " + GetPartialFileNameFromURI(Target.URI) + " isn't available", NULL);
+ return false;
+ }
+
+ FileFd fd(PartialFile, FileFd::ReadOnly, FileFd::Extension);
+ Hashes LocalHashesCalc;
+ LocalHashesCalc.AddFD(fd);
+ HashStringList const LocalHashes = LocalHashesCalc.GetHashStringList();
+
+ if(Debug)
+ std::clog << "QueueNextDiff: " << PartialFile << " (" << LocalHashes.find(NULL)->toStr() << ")" << std::endl;
+
+ HashStringList const TargetFileHashes = GetExpectedHashesFor(Target.MetaKey);
+ if (unlikely(LocalHashes.usable() == false || TargetFileHashes.usable() == false))
+ {
+ Failed("Local/Expected hashes are not usable for " + PartialFile, NULL);
+ return false;
+ }
+
+ // final file reached before all patches are applied
+ if(LocalHashes == TargetFileHashes)
+ {
+ Finish(true);
+ return true;
+ }
+
+ // remove all patches until the next matching patch is found
+ // this requires the Index file to be ordered
+ available_patches.erase(available_patches.begin(),
+ std::find_if(available_patches.begin(), available_patches.end(), [&](DiffInfo const &I) {
+ return I.result_hashes == LocalHashes;
+ }));
+
+ // error checking and falling back if no patch was found
+ if(available_patches.empty() == true)
+ {
+ Failed("No patches left to reach target for " + PartialFile, NULL);
+ return false;
+ }
+
+ // queue the right diff
+ Desc.URI = Target.URI + ".diff/" + available_patches[0].file + ".gz";
+ Desc.Description = Target.Description + " " + available_patches[0].file + string(".pdiff");
+ DestFile = GetKeepCompressedFileName(GetPartialFileNameFromURI(Target.URI + ".diff/" + available_patches[0].file), Target);
+
+ if(Debug)
+ std::clog << "pkgAcqIndexDiffs::QueueNextDiff(): " << Desc.URI << std::endl;
+
+ QueueURI(Desc);
+
+ return true;
+}
+ /*}}}*/
+void pkgAcqIndexDiffs::Done(string const &Message, HashStringList const &Hashes, /*{{{*/
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ if (Debug)
+ std::clog << "pkgAcqIndexDiffs::Done(): " << Desc.URI << std::endl;
+
+ Item::Done(Message, Hashes, Cnf);
+
+ std::string const UncompressedUnpatchedFile = GetPartialFileNameFromURI(Target.URI);
+ std::string const UnpatchedFile = GetExistingFilename(UncompressedUnpatchedFile);
+ std::string const PatchFile = GetDiffsPatchFileName(UnpatchedFile);
+ std::string const PatchedFile = GetKeepCompressedFileName(UncompressedUnpatchedFile, Target);
+
+ switch (State)
+ {
+ // success in downloading a diff, enter ApplyDiff state
+ case StateFetchDiff:
+ Rename(DestFile, PatchFile);
+ DestFile = GetKeepCompressedFileName(UncompressedUnpatchedFile + "-patched", Target);
+ if(Debug)
+ std::clog << "Sending to rred method: " << UnpatchedFile << std::endl;
+ State = StateApplyDiff;
+ Local = true;
+ Desc.URI = "rred:" + UnpatchedFile;
+ QueueURI(Desc);
+ SetActiveSubprocess("rred");
+ return;
+ // success in download/apply a diff, queue next (if needed)
+ case StateApplyDiff:
+ // remove the just applied patch and base file
+ available_patches.erase(available_patches.begin());
+ RemoveFile("pkgAcqIndexDiffs::Done", PatchFile);
+ RemoveFile("pkgAcqIndexDiffs::Done", UnpatchedFile);
+ if(Debug)
+ std::clog << "Moving patched file in place: " << std::endl
+ << DestFile << " -> " << PatchedFile << std::endl;
+ Rename(DestFile, PatchedFile);
+
+ // see if there is more to download
+ if(available_patches.empty() == false)
+ {
+ new pkgAcqIndexDiffs(Owner, TransactionManager, Target, available_patches);
+ Finish();
+ } else {
+ DestFile = PatchedFile;
+ Finish(true);
+ }
+ return;
+ }
+}
+ /*}}}*/
+std::string pkgAcqIndexDiffs::Custom600Headers() const /*{{{*/
+{
+ if(State != StateApplyDiff)
+ return pkgAcqBaseIndex::Custom600Headers();
+ std::ostringstream patchhashes;
+ for (auto && hs : available_patches[0].result_hashes)
+ patchhashes << "\nStart-" << hs.HashType() << "-Hash: " << hs.HashValue();
+ for (auto && hs : available_patches[0].patch_hashes)
+ patchhashes << "\nPatch-0-" << hs.HashType() << "-Hash: " << hs.HashValue();
+ patchhashes << pkgAcqBaseIndex::Custom600Headers();
+ return patchhashes.str();
+}
+ /*}}}*/
+pkgAcqIndexDiffs::~pkgAcqIndexDiffs() {}
+
+// AcqIndexMergeDiffs::AcqIndexMergeDiffs - Constructor /*{{{*/
+pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire *const Owner,
+ pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target,
+ DiffInfo const &patch,
+ std::vector<pkgAcqIndexMergeDiffs *> const *const allPatches)
+ : pkgAcqBaseIndex(Owner, TransactionManager, Target),
+ patch(patch), allPatches(allPatches), State(StateFetchDiff)
+{
+ Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
+
+ Desc.Owner = this;
+ Desc.ShortDesc = Target.ShortDesc;
+ Desc.URI = Target.URI + ".diff/" + patch.file + ".gz";
+ Desc.Description = Target.Description + " " + patch.file + ".pdiff";
+ DestFile = GetPartialFileNameFromURI(Target.URI + ".diff/" + patch.file + ".gz");
+
+ if(Debug)
+ std::clog << "pkgAcqIndexMergeDiffs: " << Desc.URI << std::endl;
+
+ QueueURI(Desc);
+}
+ /*}}}*/
+void pkgAcqIndexMergeDiffs::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)/*{{{*/
+{
+ if(Debug)
+ std::clog << "pkgAcqIndexMergeDiffs failed: " << Desc.URI << " with " << Message << std::endl;
+
+ pkgAcqBaseIndex::Failed(Message,Cnf);
+ Status = StatDone;
+
+ // check if we are the first to fail, otherwise we are done here
+ State = StateDoneDiff;
+ for (std::vector<pkgAcqIndexMergeDiffs *>::const_iterator I = allPatches->begin();
+ I != allPatches->end(); ++I)
+ if ((*I)->State == StateErrorDiff)
+ {
+ State = StateErrorDiff;
+ return;
+ }
+
+ // first failure means we should fallback
+ State = StateErrorDiff;
+ if (Debug)
+ std::clog << "Falling back to normal index file acquire" << std::endl;
+ RenameOnError(PDiffError);
+ std::string const UnpatchedFile = GetExistingFilename(GetPartialFileNameFromURI(Target.URI));
+ if (UnpatchedFile.empty() == false && FileExists(UnpatchedFile))
+ Rename(UnpatchedFile, UnpatchedFile + ".FAILED");
+ DestFile.clear();
+ new pkgAcqIndex(Owner, TransactionManager, Target);
+}
+ /*}}}*/
+void pkgAcqIndexMergeDiffs::Done(string const &Message, HashStringList const &Hashes, /*{{{*/
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ if(Debug)
+ std::clog << "pkgAcqIndexMergeDiffs::Done(): " << Desc.URI << std::endl;
+
+ Item::Done(Message, Hashes, Cnf);
+
+ if (std::any_of(allPatches->begin(), allPatches->end(),
+ [](pkgAcqIndexMergeDiffs const * const P) { return P->State == StateErrorDiff; }))
+ {
+ if(Debug)
+ std::clog << "Another patch failed already, no point in processing this one." << std::endl;
+ State = StateErrorDiff;
+ return;
+ }
+
+ std::string const UncompressedUnpatchedFile = GetPartialFileNameFromURI(Target.URI);
+ std::string const UnpatchedFile = GetExistingFilename(UncompressedUnpatchedFile);
+ if (UnpatchedFile.empty())
+ {
+ _error->Fatal("Unpatched file %s doesn't exist (anymore)!", UncompressedUnpatchedFile.c_str());
+ State = StateErrorDiff;
+ return;
+ }
+ std::string const PatchFile = GetMergeDiffsPatchFileName(UnpatchedFile, patch.file);
+ std::string const PatchedFile = GetKeepCompressedFileName(UncompressedUnpatchedFile, Target);
+
+ switch (State)
+ {
+ case StateFetchDiff:
+ Rename(DestFile, PatchFile);
+
+ // check if this is the last completed diff
+ State = StateDoneDiff;
+ for (std::vector<pkgAcqIndexMergeDiffs *>::const_iterator I = allPatches->begin();
+ I != allPatches->end(); ++I)
+ if ((*I)->State != StateDoneDiff)
+ {
+ if(Debug)
+ std::clog << "Not the last done diff in the batch: " << Desc.URI << std::endl;
+ return;
+ }
+ // this is the last completed diff, so we are ready to apply now
+ DestFile = GetKeepCompressedFileName(UncompressedUnpatchedFile + "-patched", Target);
+ if(Debug)
+ std::clog << "Sending to rred method: " << UnpatchedFile << std::endl;
+ State = StateApplyDiff;
+ Local = true;
+ Desc.URI = "rred:" + UnpatchedFile;
+ QueueURI(Desc);
+ SetActiveSubprocess("rred");
+ return;
+ case StateApplyDiff:
+ // success in download & apply all diffs, finialize and clean up
+ if(Debug)
+ std::clog << "Queue patched file in place: " << std::endl
+ << DestFile << " -> " << PatchedFile << std::endl;
+
+ // queue for copy by the transaction manager
+ TransactionManager->TransactionStageCopy(this, DestFile, GetKeepCompressedFileName(GetFinalFilename(), Target));
+
+ // ensure the ed's are gone regardless of list-cleanup
+ for (std::vector<pkgAcqIndexMergeDiffs *>::const_iterator I = allPatches->begin();
+ I != allPatches->end(); ++I)
+ RemoveFile("pkgAcqIndexMergeDiffs::Done", GetMergeDiffsPatchFileName(UnpatchedFile, (*I)->patch.file));
+ RemoveFile("pkgAcqIndexMergeDiffs::Done", UnpatchedFile);
+
+ // all set and done
+ Complete = true;
+ if(Debug)
+ std::clog << "allDone: " << DestFile << "\n" << std::endl;
+ return;
+ case StateDoneDiff: _error->Fatal("Done called for %s which is in an invalid Done state", PatchFile.c_str()); break;
+ case StateErrorDiff: _error->Fatal("Done called for %s which is in an invalid Error state", PatchFile.c_str()); break;
+ }
+}
+ /*}}}*/
+std::string pkgAcqIndexMergeDiffs::Custom600Headers() const /*{{{*/
+{
+ if(State != StateApplyDiff)
+ return pkgAcqBaseIndex::Custom600Headers();
+ std::ostringstream patchhashes;
+ unsigned int seen_patches = 0;
+ for (auto && hs : (*allPatches)[0]->patch.result_hashes)
+ patchhashes << "\nStart-" << hs.HashType() << "-Hash: " << hs.HashValue();
+ for (std::vector<pkgAcqIndexMergeDiffs *>::const_iterator I = allPatches->begin();
+ I != allPatches->end(); ++I)
+ {
+ HashStringList const ExpectedHashes = (*I)->patch.patch_hashes;
+ for (HashStringList::const_iterator hs = ExpectedHashes.begin(); hs != ExpectedHashes.end(); ++hs)
+ patchhashes << "\nPatch-" << std::to_string(seen_patches) << "-" << hs->HashType() << "-Hash: " << hs->HashValue();
+ ++seen_patches;
+ }
+ patchhashes << pkgAcqBaseIndex::Custom600Headers();
+ return patchhashes.str();
+}
+ /*}}}*/
+pkgAcqIndexMergeDiffs::~pkgAcqIndexMergeDiffs() {}
+
+// AcqIndex::AcqIndex - Constructor /*{{{*/
+pkgAcqIndex::pkgAcqIndex(pkgAcquire * const Owner,
+ pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target, bool const Derived)
+ : pkgAcqBaseIndex(Owner, TransactionManager, Target), d(NULL), Stage(STAGE_DOWNLOAD),
+ CompressionExtensions(Target.Option(IndexTarget::COMPRESSIONTYPES))
+{
+ if (Derived)
+ return;
+ Init(Target.URI, Target.Description, Target.ShortDesc);
+
+ if(_config->FindB("Debug::Acquire::Transaction", false) == true)
+ std::clog << "New pkgIndex with TransactionManager "
+ << TransactionManager << std::endl;
+}
+ /*}}}*/
+// AcqIndex::Init - deferred Constructor /*{{{*/
+void pkgAcqIndex::Init(string const &URI, string const &URIDesc,
+ string const &ShortDesc)
+{
+ Stage = STAGE_DOWNLOAD;
+
+ DestFile = GetPartialFileNameFromURI(URI);
+ size_t const nextExt = CompressionExtensions.find(' ');
+ if (nextExt == std::string::npos)
+ {
+ CurrentCompressionExtension = CompressionExtensions;
+ CompressionExtensions.clear();
+ }
+ else
+ {
+ CurrentCompressionExtension = CompressionExtensions.substr(0, nextExt);
+ CompressionExtensions = CompressionExtensions.substr(nextExt+1);
+ }
+
+ if (CurrentCompressionExtension == "uncompressed")
+ {
+ Desc.URI = URI;
+ }
+ else if (unlikely(CurrentCompressionExtension.empty()))
+ return;
+ else
+ {
+ Desc.URI = URI + '.' + CurrentCompressionExtension;
+ DestFile = DestFile + '.' + CurrentCompressionExtension;
+ }
+
+ // store file size of the download to ensure the fetcher gives
+ // accurate progress reporting
+ FileSize = GetExpectedHashes().FileSize();
+
+ Desc.Description = URIDesc;
+ Desc.Owner = this;
+ Desc.ShortDesc = ShortDesc;
+
+ QueueURI(Desc);
+}
+ /*}}}*/
+// AcqIndex::Custom600Headers - Insert custom request headers /*{{{*/
+// ---------------------------------------------------------------------
+/* The only header we use is the last-modified header. */
+string pkgAcqIndex::Custom600Headers() const
+{
+
+ string msg = "\nIndex-File: true";
+
+ if (TransactionManager->LastMetaIndexParser == NULL)
+ {
+ std::string const Final = GetFinalFilename();
+
+ struct stat Buf;
+ if (stat(Final.c_str(),&Buf) == 0)
+ msg += "\nLast-Modified: " + TimeRFC1123(Buf.st_mtime, false);
+ }
+
+ if(Target.IsOptional)
+ msg += "\nFail-Ignore: true";
+
+ return msg;
+}
+ /*}}}*/
+// AcqIndex::Failed - getting the indexfile failed /*{{{*/
+bool pkgAcqIndex::CommonFailed(std::string const &TargetURI,
+ std::string const &Message, pkgAcquire::MethodConfig const *const Cnf)
+{
+ pkgAcqBaseIndex::Failed(Message,Cnf);
+ // authorisation matches will not be fixed by other compression types
+ if (Status != StatAuthError)
+ {
+ if (CompressionExtensions.empty() == false)
+ {
+ Init(TargetURI, Desc.Description, Desc.ShortDesc);
+ Status = StatIdle;
+ return true;
+ }
+ }
+ return false;
+}
+void pkgAcqIndex::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)
+{
+ if (CommonFailed(Target.URI, Message, Cnf))
+ return;
+
+ if(Target.IsOptional && GetExpectedHashes().empty() && Stage == STAGE_DOWNLOAD)
+ Status = StatDone;
+ else
+ TransactionManager->AbortTransaction();
+}
+ /*}}}*/
+// AcqIndex::Done - Finished a fetch /*{{{*/
+// ---------------------------------------------------------------------
+/* This goes through a number of states.. On the initial fetch the
+ method could possibly return an alternate filename which points
+ to the uncompressed version of the file. If this is so the file
+ is copied into the partial directory. In all other cases the file
+ is decompressed with a compressed uri. */
+void pkgAcqIndex::Done(string const &Message,
+ HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cfg)
+{
+ Item::Done(Message,Hashes,Cfg);
+
+ switch(Stage)
+ {
+ case STAGE_DOWNLOAD:
+ StageDownloadDone(Message);
+ break;
+ case STAGE_DECOMPRESS_AND_VERIFY:
+ StageDecompressDone();
+ break;
+ }
+}
+ /*}}}*/
+// AcqIndex::StageDownloadDone - Queue for decompress and verify /*{{{*/
+void pkgAcqIndex::StageDownloadDone(string const &Message)
+{
+ Local = true;
+ Complete = true;
+
+ std::string const AltFilename = LookupTag(Message,"Alt-Filename");
+ std::string Filename = LookupTag(Message,"Filename");
+
+ // we need to verify the file against the current Release file again
+ // on if-modfied-since hit to avoid a stale attack against us
+ if(StringToBool(LookupTag(Message,"IMS-Hit"),false) == true)
+ {
+ // copy FinalFile into partial/ so that we check the hash again
+ string const FinalFile = GetExistingFilename(GetFinalFileNameFromURI(Target.URI));
+ if (symlink(FinalFile.c_str(), DestFile.c_str()) != 0)
+ _error->WarningE("pkgAcqIndex::StageDownloadDone", "Symlinking final file %s back to %s failed", FinalFile.c_str(), DestFile.c_str());
+ else
+ {
+ EraseFileName = DestFile;
+ Filename = DestFile;
+ }
+ Stage = STAGE_DECOMPRESS_AND_VERIFY;
+ Desc.URI = "store:" + Filename;
+ QueueURI(Desc);
+ SetActiveSubprocess(::URI(Desc.URI).Access);
+ return;
+ }
+ // methods like file:// give us an alternative (uncompressed) file
+ else if (Target.KeepCompressed == false && AltFilename.empty() == false)
+ {
+ Filename = AltFilename;
+ EraseFileName.clear();
+ }
+ // Methods like e.g. "file:" will give us a (compressed) FileName that is
+ // not the "DestFile" we set, in this case we uncompress from the local file
+ else if (Filename != DestFile && RealFileExists(DestFile) == false)
+ {
+ // symlinking ensures that the filename can be used for compression detection
+ // that is e.g. needed for by-hash which has no extension over file
+ if (symlink(Filename.c_str(),DestFile.c_str()) != 0)
+ _error->WarningE("pkgAcqIndex::StageDownloadDone", "Symlinking file %s to %s failed", Filename.c_str(), DestFile.c_str());
+ else
+ {
+ EraseFileName = DestFile;
+ Filename = DestFile;
+ }
+ }
+
+ Stage = STAGE_DECOMPRESS_AND_VERIFY;
+ DestFile = GetKeepCompressedFileName(GetPartialFileNameFromURI(Target.URI), Target);
+ if (Filename != DestFile && flExtension(Filename) == flExtension(DestFile))
+ Desc.URI = "copy:" + Filename;
+ else
+ Desc.URI = "store:" + Filename;
+ if (DestFile == Filename)
+ {
+ if (CurrentCompressionExtension == "uncompressed")
+ return StageDecompressDone();
+ DestFile = "/dev/null";
+ }
+
+ if (EraseFileName.empty() && Filename != AltFilename)
+ EraseFileName = Filename;
+
+ // queue uri for the next stage
+ QueueURI(Desc);
+ SetActiveSubprocess(::URI(Desc.URI).Access);
+}
+ /*}}}*/
+// AcqIndex::StageDecompressDone - Final verification /*{{{*/
+void pkgAcqIndex::StageDecompressDone()
+{
+ if (DestFile == "/dev/null")
+ DestFile = GetKeepCompressedFileName(GetPartialFileNameFromURI(Target.URI), Target);
+
+ // Done, queue for rename on transaction finished
+ TransactionManager->TransactionStageCopy(this, DestFile, GetFinalFilename());
+}
+ /*}}}*/
+pkgAcqIndex::~pkgAcqIndex() {}
+
+// AcqArchive::AcqArchive - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* This just sets up the initial fetch environment and queues the first
+ possibilitiy */
+APT_IGNORE_DEPRECATED_PUSH
+pkgAcqArchive::pkgAcqArchive(pkgAcquire *const Owner, pkgSourceList *const Sources,
+ pkgRecords *const Recs, pkgCache::VerIterator const &Version,
+ string &StoreFilename) : Item(Owner), d(NULL), LocalSource(false), Version(Version), Sources(Sources), Recs(Recs),
+ StoreFilename(StoreFilename), Vf(),
+ Trusted(false)
+{
+ if (Version.Arch() == 0)
+ {
+ _error->Error(_("I wasn't able to locate a file for the %s package. "
+ "This might mean you need to manually fix this package. "
+ "(due to missing arch)"),
+ Version.ParentPkg().FullName().c_str());
+ return;
+ }
+
+ // check if we have one trusted source for the package. if so, switch
+ // to "TrustedOnly" mode - but only if not in AllowUnauthenticated mode
+ bool const allowUnauth = _config->FindB("APT::Get::AllowUnauthenticated", false);
+ bool const debugAuth = _config->FindB("Debug::pkgAcquire::Auth", false);
+ bool seenUntrusted = false;
+ for (pkgCache::VerFileIterator i = Version.FileList(); i.end() == false; ++i)
+ {
+ pkgIndexFile *Index;
+ if (Sources->FindIndex(i.File(),Index) == false)
+ continue;
+
+ if (debugAuth == true)
+ std::cerr << "Checking index: " << Index->Describe()
+ << "(Trusted=" << Index->IsTrusted() << ")" << std::endl;
+
+ if (Index->IsTrusted() == true)
+ {
+ Trusted = true;
+ if (allowUnauth == false)
+ break;
+ }
+ else
+ seenUntrusted = true;
+ }
+
+ // "allow-unauthenticated" restores apts old fetching behaviour
+ // that means that e.g. unauthenticated file:// uris are higher
+ // priority than authenticated http:// uris
+ if (allowUnauth == true && seenUntrusted == true)
+ Trusted = false;
+
+ StoreFilename.clear();
+ std::set<string> targetComponents, targetCodenames, targetSuites;
+ std::vector<std::unique_ptr<FileFd>> authconfs;
+ for (auto Vf = Version.FileList(); Vf.end() == false; ++Vf)
+ {
+ auto const PkgF = Vf.File();
+ if (unlikely(PkgF.end()))
+ continue;
+ if (PkgF.Flagged(pkgCache::Flag::NotSource))
+ continue;
+ if (PkgF.Flagged(pkgCache::Flag::PackagesRequireAuthorization) && !IsAuthorized(PkgF, authconfs))
+ continue;
+ pkgIndexFile *Index;
+ if (Sources->FindIndex(PkgF, Index) == false)
+ continue;
+ if (Trusted && Index->IsTrusted() == false)
+ continue;
+
+ pkgRecords::Parser &Parse = Recs->Lookup(Vf);
+ // collect the hashes from the indexes
+ auto hsl = Parse.Hashes();
+ if (ExpectedHashes.empty())
+ ExpectedHashes = hsl;
+ else
+ {
+ // bad things will likely happen, but the user might be "lucky" still
+ // if the sources provide the same hashtypes (so that they aren't mixed)
+ for (auto const &hs : hsl)
+ if (ExpectedHashes.push_back(hs) == false)
+ {
+ _error->Warning("Sources disagree on hashes for supposely identical version '%s' of '%s'.",
+ Version.VerStr(), Version.ParentPkg().FullName(false).c_str());
+ break;
+ }
+ }
+ // only allow local volatile sources to have no hashes
+ if (PkgF.Flagged(pkgCache::Flag::LocalSource))
+ LocalSource = true;
+ else if (hsl.empty())
+ continue;
+
+ std::string poolfilename = Parse.FileName();
+ if (poolfilename.empty())
+ continue;
+
+ std::remove_reference<decltype(ModifyCustomFields())>::type fields;
+ {
+ auto const debIndex = dynamic_cast<pkgDebianIndexTargetFile const *const>(Index);
+ if (debIndex != nullptr)
+ {
+ auto const IT = debIndex->GetIndexTarget();
+ fields.emplace("Target-Repo-URI", IT.Option(IndexTarget::REPO_URI));
+ fields.emplace("Target-Release", IT.Option(IndexTarget::RELEASE));
+ fields.emplace("Target-Site", IT.Option(IndexTarget::SITE));
+ }
+ }
+ fields.emplace("Target-Base-URI", Index->ArchiveURI(""));
+ if (PkgF->Component != 0)
+ fields.emplace("Target-Component", PkgF.Component());
+ auto const RelF = PkgF.ReleaseFile();
+ if (RelF.end() == false)
+ {
+ if (RelF->Codename != 0)
+ fields.emplace("Target-Codename", RelF.Codename());
+ if (RelF->Archive != 0)
+ fields.emplace("Target-Suite", RelF.Archive());
+ }
+ fields.emplace("Target-Architecture", Version.Arch());
+ fields.emplace("Target-Type", flExtension(poolfilename));
+
+ if (StoreFilename.empty())
+ {
+ /* We pick a filename based on the information we have for the version,
+ but we don't know what extension such a file should have, so we look
+ at the filenames used online and assume that they are the same for
+ all repositories containing this file */
+ StoreFilename = QuoteString(Version.ParentPkg().Name(), "_:") + '_' +
+ QuoteString(Version.VerStr(), "_:") + '_' +
+ QuoteString(Version.Arch(), "_:.") +
+ "." + flExtension(poolfilename);
+
+ Desc.URI = Index->ArchiveURI(poolfilename);
+ Desc.Description = Index->ArchiveInfo(Version);
+ Desc.Owner = this;
+ Desc.ShortDesc = Version.ParentPkg().FullName(true);
+ auto &customfields = ModifyCustomFields();
+ for (auto const &f : fields)
+ customfields[f.first] = f.second;
+ FileSize = Version->Size;
+ }
+ else
+ PushAlternativeURI(Index->ArchiveURI(poolfilename), std::move(fields), true);
+ }
+ if (StoreFilename.empty())
+ {
+ _error->Error(_("Can't find a source to download version '%s' of '%s'"),
+ Version.VerStr(), Version.ParentPkg().FullName(false).c_str());
+ return;
+ }
+
+ // Check if we already downloaded the file
+ struct stat Buf;
+ auto FinalFile = _config->FindDir("Dir::Cache::Archives") + flNotDir(StoreFilename);
+ if (stat(FinalFile.c_str(), &Buf) == 0)
+ {
+ // Make sure the size matches
+ if ((unsigned long long)Buf.st_size == Version->Size)
+ {
+ Complete = true;
+ Local = true;
+ Status = StatDone;
+ StoreFilename = DestFile = FinalFile;
+ return;
+ }
+
+ /* Hmm, we have a file and its size does not match, this shouldn't
+ happen.. */
+ RemoveFile("pkgAcqArchive::QueueNext", FinalFile);
+ }
+
+ // Check the destination file
+ DestFile = _config->FindDir("Dir::Cache::Archives") + "partial/" + flNotDir(StoreFilename);
+ if (stat(DestFile.c_str(), &Buf) == 0)
+ {
+ // Hmm, the partial file is too big, erase it
+ if ((unsigned long long)Buf.st_size > Version->Size)
+ RemoveFile("pkgAcqArchive::QueueNext", DestFile);
+ else
+ PartialSize = Buf.st_size;
+ }
+
+ // Disables download of archives - useful if no real installation follows,
+ // e.g. if we are just interested in proposed installation order
+ if (_config->FindB("Debug::pkgAcqArchive::NoQueue", false) == true)
+ {
+ Complete = true;
+ Local = true;
+ Status = StatDone;
+ StoreFilename = DestFile = FinalFile;
+ return;
+ }
+
+ // Create the item
+ Local = false;
+ QueueURI(Desc);
+}
+APT_IGNORE_DEPRECATED_POP
+ /*}}}*/
+bool pkgAcqArchive::QueueNext() /*{{{*/
+{
+ return false;
+}
+ /*}}}*/
+// AcqArchive::Done - Finished fetching /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqArchive::Done(string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cfg)
+{
+ Item::Done(Message, Hashes, Cfg);
+
+ // Grab the output filename
+ std::string const FileName = LookupTag(Message,"Filename");
+ if (DestFile != FileName && RealFileExists(DestFile) == false)
+ {
+ StoreFilename = DestFile = FileName;
+ Local = true;
+ Complete = true;
+ return;
+ }
+
+ // Done, move it into position
+ string const FinalFile = GetFinalFilename();
+ Rename(DestFile,FinalFile);
+ StoreFilename = DestFile = FinalFile;
+ Complete = true;
+}
+ /*}}}*/
+// AcqArchive::Failed - Failure handler /*{{{*/
+// ---------------------------------------------------------------------
+/* Here we try other sources */
+void pkgAcqArchive::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)
+{
+ Item::Failed(Message,Cnf);
+}
+ /*}}}*/
+APT_PURE bool pkgAcqArchive::IsTrusted() const /*{{{*/
+{
+ return Trusted;
+}
+ /*}}}*/
+void pkgAcqArchive::Finished() /*{{{*/
+{
+ if (Status == pkgAcquire::Item::StatDone &&
+ Complete == true)
+ return;
+ StoreFilename = string();
+}
+ /*}}}*/
+std::string pkgAcqArchive::DescURI() const /*{{{*/
+{
+ return Desc.URI;
+}
+ /*}}}*/
+std::string pkgAcqArchive::ShortDesc() const /*{{{*/
+{
+ return Desc.ShortDesc;
+}
+ /*}}}*/
+pkgAcqArchive::~pkgAcqArchive() {}
+
+// AcqChangelog::pkgAcqChangelog - Constructors /*{{{*/
+class pkgAcqChangelog::Private
+{
+ public:
+ std::string FinalFile;
+};
+pkgAcqChangelog::pkgAcqChangelog(pkgAcquire * const Owner, pkgCache::VerIterator const &Ver,
+ std::string const &DestDir, std::string const &DestFilename) :
+ pkgAcquire::Item(Owner), d(new pkgAcqChangelog::Private()), SrcName(Ver.SourcePkgName()), SrcVersion(Ver.SourceVerStr())
+{
+ Desc.URI = URI(Ver);
+ Init(DestDir, DestFilename);
+}
+// some parameters are char* here as they come likely from char* interfaces – which can also return NULL
+pkgAcqChangelog::pkgAcqChangelog(pkgAcquire * const Owner, pkgCache::RlsFileIterator const &RlsFile,
+ char const * const Component, char const * const SrcName, char const * const SrcVersion,
+ const string &DestDir, const string &DestFilename) :
+ pkgAcquire::Item(Owner), d(new pkgAcqChangelog::Private()), SrcName(SrcName), SrcVersion(SrcVersion)
+{
+ Desc.URI = URI(RlsFile, Component, SrcName, SrcVersion);
+ Init(DestDir, DestFilename);
+}
+pkgAcqChangelog::pkgAcqChangelog(pkgAcquire * const Owner,
+ std::string const &URI, char const * const SrcName, char const * const SrcVersion,
+ const string &DestDir, const string &DestFilename) :
+ pkgAcquire::Item(Owner), d(new pkgAcqChangelog::Private()), SrcName(SrcName), SrcVersion(SrcVersion)
+{
+ Desc.URI = URI;
+ Init(DestDir, DestFilename);
+}
+void pkgAcqChangelog::Init(std::string const &DestDir, std::string const &DestFilename)
+{
+ if (Desc.URI.empty())
+ {
+ Status = StatError;
+ // TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+ strprintf(ErrorText, _("Changelog unavailable for %s=%s"), SrcName.c_str(), SrcVersion.c_str());
+ // Let the error message print something sensible rather than "Failed to fetch /"
+ if (DestFilename.empty())
+ DestFile = SrcName + ".changelog";
+ else
+ DestFile = DestFilename;
+ Desc.URI = "changelog:/" + DestFile;
+ return;
+ }
+
+ std::string DestFileName;
+ if (DestFilename.empty())
+ DestFileName = flCombine(DestFile, SrcName + ".changelog");
+ else
+ DestFileName = flCombine(DestFile, DestFilename);
+
+ std::string const SandboxUser = _config->Find("APT::Sandbox::User");
+ std::string const systemTemp = GetTempDir(SandboxUser);
+ char tmpname[1000];
+ snprintf(tmpname, sizeof(tmpname), "%s/apt-changelog-XXXXXX", systemTemp.c_str());
+ if (NULL == mkdtemp(tmpname))
+ {
+ _error->Errno("mkdtemp", "mkdtemp failed in changelog acquire of %s %s", SrcName.c_str(), SrcVersion.c_str());
+ Status = StatError;
+ return;
+ }
+ TemporaryDirectory = tmpname;
+
+ ChangeOwnerAndPermissionOfFile("pkgAcqChangelog::Init", TemporaryDirectory.c_str(),
+ SandboxUser.c_str(), ROOT_GROUP, 0700);
+
+ DestFile = flCombine(TemporaryDirectory, DestFileName);
+ if (DestDir.empty() == false)
+ {
+ d->FinalFile = flCombine(DestDir, DestFileName);
+ if (RealFileExists(d->FinalFile))
+ {
+ FileFd file1, file2;
+ if (file1.Open(DestFile, FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive) &&
+ file2.Open(d->FinalFile, FileFd::ReadOnly) && CopyFile(file2, file1))
+ {
+ ChangeOwnerAndPermissionOfFile("pkgAcqChangelog::Init", DestFile.c_str(), "root", ROOT_GROUP, 0644);
+ struct timeval times[2];
+ times[0].tv_sec = times[1].tv_sec = file2.ModificationTime();
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(DestFile.c_str(), times);
+ }
+ }
+ }
+
+ Desc.ShortDesc = "Changelog";
+ strprintf(Desc.Description, "%s %s %s Changelog", URI::SiteOnly(Desc.URI).c_str(), SrcName.c_str(), SrcVersion.c_str());
+ Desc.Owner = this;
+ QueueURI(Desc);
+}
+ /*}}}*/
+std::string pkgAcqChangelog::URI(pkgCache::VerIterator const &Ver) /*{{{*/
+{
+ std::string const confOnline = "Acquire::Changelogs::AlwaysOnline";
+ bool AlwaysOnline = _config->FindB(confOnline, false);
+ if (AlwaysOnline == false)
+ for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; ++VF)
+ {
+ pkgCache::PkgFileIterator const PF = VF.File();
+ if (PF.Flagged(pkgCache::Flag::NotSource) || PF->Release == 0)
+ continue;
+ pkgCache::RlsFileIterator const RF = PF.ReleaseFile();
+ if (RF->Origin != 0 && _config->FindB(confOnline + "::Origin::" + RF.Origin(), false))
+ {
+ AlwaysOnline = true;
+ break;
+ }
+ }
+ if (AlwaysOnline == false)
+ {
+ pkgCache::PkgIterator const Pkg = Ver.ParentPkg();
+ if (Pkg->CurrentVer != 0 && Pkg.CurrentVer() == Ver)
+ {
+ std::string const root = _config->FindDir("Dir");
+ std::string const basename = root + std::string("usr/share/doc/") + Pkg.Name() + "/changelog";
+ std::string const debianname = basename + ".Debian";
+ if (FileExists(debianname))
+ return "copy://" + debianname;
+ else if (FileExists(debianname + ".gz"))
+ return "store://" + debianname + ".gz";
+ else if (FileExists(basename))
+ return "copy://" + basename;
+ else if (FileExists(basename + ".gz"))
+ return "store://" + basename + ".gz";
+ }
+ }
+
+ char const * const SrcName = Ver.SourcePkgName();
+ char const * const SrcVersion = Ver.SourceVerStr();
+ // find the first source for this version which promises a changelog
+ for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; ++VF)
+ {
+ pkgCache::PkgFileIterator const PF = VF.File();
+ if (PF.Flagged(pkgCache::Flag::NotSource) || PF->Release == 0)
+ continue;
+ pkgCache::RlsFileIterator const RF = PF.ReleaseFile();
+ std::string const uri = URI(RF, PF.Component(), SrcName, SrcVersion);
+ if (uri.empty())
+ continue;
+ return uri;
+ }
+ return "";
+}
+std::string pkgAcqChangelog::URITemplate(pkgCache::RlsFileIterator const &Rls)
+{
+ if (Rls.end() == true || (Rls->Label == 0 && Rls->Origin == 0))
+ return "";
+ std::string const serverConfig = "Acquire::Changelogs::URI";
+ std::string server;
+#define APT_EMPTY_SERVER \
+ if (server.empty() == false) \
+ { \
+ if (server != "no") \
+ return server; \
+ return ""; \
+ }
+#define APT_CHECK_SERVER(X, Y) \
+ if (Rls->X != 0) \
+ { \
+ std::string const specialServerConfig = serverConfig + "::" + Y + #X + "::" + Rls.X(); \
+ server = _config->Find(specialServerConfig); \
+ APT_EMPTY_SERVER \
+ }
+ // this way e.g. Debian-Security can fallback to Debian
+ APT_CHECK_SERVER(Label, "Override::")
+ APT_CHECK_SERVER(Origin, "Override::")
+
+ if (RealFileExists(Rls.FileName()))
+ {
+ _error->PushToStack();
+ FileFd rf;
+ /* This can be costly. A caller wanting to get millions of URIs might
+ want to do this on its own once and use Override settings.
+ We don't do this here as Origin/Label are not as unique as they
+ should be so this could produce request order-dependent anomalies */
+ if (OpenMaybeClearSignedFile(Rls.FileName(), rf) == true)
+ {
+ pkgTagFile TagFile(&rf, rf.Size());
+ pkgTagSection Section;
+ if (TagFile.Step(Section) == true)
+ server = Section.FindS("Changelogs");
+ }
+ _error->RevertToStack();
+ APT_EMPTY_SERVER
+ }
+
+ APT_CHECK_SERVER(Label, "")
+ APT_CHECK_SERVER(Origin, "")
+#undef APT_CHECK_SERVER
+#undef APT_EMPTY_SERVER
+ return "";
+}
+std::string pkgAcqChangelog::URI(pkgCache::RlsFileIterator const &Rls,
+ char const * const Component, char const * const SrcName,
+ char const * const SrcVersion)
+{
+ return URI(URITemplate(Rls), Component, SrcName, SrcVersion);
+}
+std::string pkgAcqChangelog::URI(std::string const &Template,
+ char const * const Component, char const * const SrcName,
+ char const * const SrcVersion)
+{
+ if (Template.find("@CHANGEPATH@") == std::string::npos)
+ return "";
+
+ // the path is: COMPONENT/SRC/SRCNAME/SRCNAME_SRCVER, e.g. main/a/apt/apt_1.1 or contrib/liba/libapt/libapt_2.0
+ std::string Src = SrcName;
+ std::string path = APT::String::Startswith(SrcName, "lib") ? Src.substr(0, 4) : Src.substr(0,1);
+ path.append("/").append(Src).append("/");
+ path.append(Src).append("_").append(StripEpoch(SrcVersion));
+ // we omit component for releases without one (= flat-style repositories)
+ if (Component != NULL && strlen(Component) != 0)
+ path = std::string(Component) + "/" + path;
+
+ return SubstVar(Template, "@CHANGEPATH@", path);
+}
+ /*}}}*/
+// AcqChangelog::Failed - Failure handler /*{{{*/
+void pkgAcqChangelog::Failed(string const &Message, pkgAcquire::MethodConfig const * const Cnf)
+{
+ Item::Failed(Message,Cnf);
+
+ std::string errText;
+ // TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+ strprintf(errText, _("Changelog unavailable for %s=%s"), SrcName.c_str(), SrcVersion.c_str());
+
+ // Error is probably something techy like 404 Not Found
+ if (ErrorText.empty())
+ ErrorText = errText;
+ else
+ ErrorText = errText + " (" + ErrorText + ")";
+}
+ /*}}}*/
+// AcqChangelog::Done - Item downloaded OK /*{{{*/
+void pkgAcqChangelog::Done(string const &Message,HashStringList const &CalcHashes,
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ Item::Done(Message,CalcHashes,Cnf);
+ if (d->FinalFile.empty() == false)
+ {
+ if (RemoveFile("pkgAcqChangelog::Done", d->FinalFile) == false ||
+ Rename(DestFile, d->FinalFile) == false)
+ Status = StatError;
+ }
+
+ Complete = true;
+}
+ /*}}}*/
+pkgAcqChangelog::~pkgAcqChangelog() /*{{{*/
+{
+ if (TemporaryDirectory.empty() == false)
+ {
+ RemoveFile("~pkgAcqChangelog", DestFile);
+ rmdir(TemporaryDirectory.c_str());
+ }
+ delete d;
+}
+ /*}}}*/
+
+// AcqFile::pkgAcqFile - Constructor /*{{{*/
+APT_IGNORE_DEPRECATED_PUSH
+pkgAcqFile::pkgAcqFile(pkgAcquire *const Owner, string const &URI, HashStringList const &Hashes,
+ unsigned long long const Size, string const &Dsc, string const &ShortDesc,
+ const string &DestDir, const string &DestFilename,
+ bool const IsIndexFile) : Item(Owner), d(NULL), Retries(0), IsIndexFile(IsIndexFile), ExpectedHashes(Hashes)
+{
+ if(!DestFilename.empty())
+ DestFile = DestFilename;
+ else if(!DestDir.empty())
+ DestFile = DestDir + "/" + flNotDir(URI);
+ else
+ DestFile = flNotDir(URI);
+
+ // Create the item
+ Desc.URI = URI;
+ Desc.Description = Dsc;
+ Desc.Owner = this;
+
+ // Set the short description to the archive component
+ Desc.ShortDesc = ShortDesc;
+
+ // Get the transfer sizes
+ FileSize = Size;
+ struct stat Buf;
+ if (stat(DestFile.c_str(),&Buf) == 0)
+ {
+ // Hmm, the partial file is too big, erase it
+ if ((Size > 0) && (unsigned long long)Buf.st_size > Size)
+ RemoveFile("pkgAcqFile", DestFile);
+ else
+ PartialSize = Buf.st_size;
+ }
+
+ QueueURI(Desc);
+}
+APT_IGNORE_DEPRECATED_POP
+ /*}}}*/
+// AcqFile::Done - Item downloaded OK /*{{{*/
+void pkgAcqFile::Done(string const &Message,HashStringList const &CalcHashes,
+ pkgAcquire::MethodConfig const * const Cnf)
+{
+ Item::Done(Message,CalcHashes,Cnf);
+
+ std::string const FileName = LookupTag(Message,"Filename");
+ Complete = true;
+
+ // The files timestamp matches
+ if (StringToBool(LookupTag(Message,"IMS-Hit"),false) == true)
+ return;
+
+ // We have to copy it into place
+ if (RealFileExists(DestFile.c_str()) == false)
+ {
+ Local = true;
+ if (_config->FindB("Acquire::Source-Symlinks",true) == false ||
+ Cnf->Removable == true)
+ {
+ Desc.URI = "copy:" + FileName;
+ QueueURI(Desc);
+ return;
+ }
+
+ // Erase the file if it is a symlink so we can overwrite it
+ struct stat St;
+ if (lstat(DestFile.c_str(),&St) == 0)
+ {
+ if (S_ISLNK(St.st_mode) != 0)
+ RemoveFile("pkgAcqFile::Done", DestFile);
+ }
+
+ // Symlink the file
+ if (symlink(FileName.c_str(),DestFile.c_str()) != 0)
+ {
+ _error->PushToStack();
+ _error->Errno("pkgAcqFile::Done", "Symlinking file %s failed", DestFile.c_str());
+ std::stringstream msg;
+ _error->DumpErrors(msg, GlobalError::DEBUG, false);
+ _error->RevertToStack();
+ ErrorText = msg.str();
+ Status = StatError;
+ Complete = false;
+ }
+ }
+}
+ /*}}}*/
+void pkgAcqFile::Failed(string const &Message, pkgAcquire::MethodConfig const *const Cnf) /*{{{*/
+{
+ // FIXME: Remove this pointless overload on next ABI break
+ Item::Failed(Message, Cnf);
+}
+ /*}}}*/
+string pkgAcqFile::Custom600Headers() const /*{{{*/
+{
+ if (IsIndexFile)
+ return "\nIndex-File: true";
+ return "";
+}
+ /*}}}*/
+pkgAcqFile::~pkgAcqFile() {}
+
+void pkgAcqAuxFile::Failed(std::string const &Message, pkgAcquire::MethodConfig const *const Cnf) /*{{{*/
+{
+ pkgAcqFile::Failed(Message, Cnf);
+ if (Status == StatIdle)
+ return;
+ if (RealFileExists(DestFile))
+ Rename(DestFile, DestFile + ".FAILED");
+ Worker->ReplyAux(Desc);
+}
+ /*}}}*/
+void pkgAcqAuxFile::Done(std::string const &Message, HashStringList const &CalcHashes, /*{{{*/
+ pkgAcquire::MethodConfig const *const Cnf)
+{
+ pkgAcqFile::Done(Message, CalcHashes, Cnf);
+ if (Status == StatDone)
+ Worker->ReplyAux(Desc);
+ else if (Status == StatAuthError || Status == StatError)
+ Worker->ReplyAux(Desc);
+}
+ /*}}}*/
+std::string pkgAcqAuxFile::Custom600Headers() const /*{{{*/
+{
+ if (MaximumSize == 0)
+ return pkgAcqFile::Custom600Headers();
+ std::string maxsize;
+ strprintf(maxsize, "\nMaximum-Size: %llu", MaximumSize);
+ return pkgAcqFile::Custom600Headers().append(maxsize);
+}
+ /*}}}*/
+void pkgAcqAuxFile::Finished() /*{{{*/
+{
+ auto dirname = flCombine(_config->FindDir("Dir::State::lists"), "auxfiles/");
+ if (APT::String::Startswith(DestFile, dirname))
+ {
+ // the file is never returned by method requesting it, so fix up the permission now
+ if (FileExists(DestFile))
+ {
+ ChangeOwnerAndPermissionOfFile("pkgAcqAuxFile", DestFile.c_str(), "root", ROOT_GROUP, 0644);
+ if (Status == StatDone)
+ return;
+ }
+ }
+ else
+ {
+ dirname = flNotFile(DestFile);
+ RemoveFile("pkgAcqAuxFile::Finished", DestFile);
+ RemoveFile("pkgAcqAuxFile::Finished", DestFile + ".FAILED");
+ rmdir(dirname.c_str());
+ }
+ DestFile.clear();
+}
+ /*}}}*/
+// GetAuxFileNameFromURI /*{{{*/
+static std::string GetAuxFileNameFromURIInLists(std::string const &uri)
+{
+ // check if we have write permission for our usual location.
+ auto const dirname = flCombine(_config->FindDir("Dir::State::lists"), "auxfiles/");
+ char const * const filetag = ".apt-acquire-privs-test.XXXXXX";
+ std::string const tmpfile_tpl = flCombine(dirname, filetag);
+ std::unique_ptr<char, decltype(std::free) *> tmpfile { strdup(tmpfile_tpl.c_str()), std::free };
+ int const fd = mkstemp(tmpfile.get());
+ if (fd == -1)
+ return "";
+ RemoveFile("GetAuxFileNameFromURI", tmpfile.get());
+ close(fd);
+ return flCombine(dirname, URItoFileName(uri));
+}
+static std::string GetAuxFileNameFromURI(std::string const &uri)
+{
+ auto const lists = GetAuxFileNameFromURIInLists(uri);
+ if (lists.empty() == false)
+ return lists;
+
+ std::string tmpdir_tpl;
+ strprintf(tmpdir_tpl, "%s/apt-auxfiles-XXXXXX", GetTempDir().c_str());
+ std::unique_ptr<char, decltype(std::free) *> tmpdir { strndup(tmpdir_tpl.data(), tmpdir_tpl.length()), std::free };
+ if (mkdtemp(tmpdir.get()) == nullptr)
+ {
+ _error->Errno("GetAuxFileNameFromURI", "mkdtemp of %s failed", tmpdir.get());
+ return flCombine("/nonexistent/auxfiles/", URItoFileName(uri));
+ }
+ chmod(tmpdir.get(), 0755);
+ auto const filename = flCombine(tmpdir.get(), URItoFileName(uri));
+ _error->PushToStack();
+ FileFd in(flCombine(flCombine(_config->FindDir("Dir::State::lists"), "auxfiles/"), URItoFileName(uri)), FileFd::ReadOnly);
+ if (in.IsOpen())
+ {
+ FileFd out(filename, FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive);
+ CopyFile(in, out);
+ ChangeOwnerAndPermissionOfFile("GetAuxFileNameFromURI", filename.c_str(), "root", ROOT_GROUP, 0644);
+ }
+ _error->RevertToStack();
+ return filename;
+}
+ /*}}}*/
+pkgAcqAuxFile::pkgAcqAuxFile(pkgAcquire::Item *const Owner, pkgAcquire::Worker *const Worker,
+ std::string const &ShortDesc, std::string const &Desc, std::string const &URI,
+ HashStringList const &Hashes, unsigned long long const MaximumSize) : pkgAcqFile(Owner->GetOwner(), URI, Hashes, Hashes.FileSize(), Desc, ShortDesc, "", GetAuxFileNameFromURI(URI), false),
+ Owner(Owner), Worker(Worker), MaximumSize(MaximumSize)
+{
+ /* very bad failures can happen while constructing which causes
+ us to hang as the aux request is never answered (e.g. method not available)
+ Ideally we catch failures earlier, but a safe guard can't hurt. */
+ if (Status == pkgAcquire::Item::StatIdle || Status == pkgAcquire::Item::StatFetching)
+ return;
+ Failed(std::string("400 URI Failure\n") +
+ "URI: " + URI + "\n" +
+ "Filename: " + DestFile,
+ nullptr);
+}
+pkgAcqAuxFile::~pkgAcqAuxFile() {}
diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h
new file mode 100644
index 0000000..70651d9
--- /dev/null
+++ b/apt-pkg/acquire-item.h
@@ -0,0 +1,1250 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Item - Item to acquire
+
+ When an item is instantiated it will add it self to the local list in
+ the Owner Acquire class. Derived classes will then call QueueURI to
+ register all the URI's they wish to fetch at the initial moment.
+
+ Three item classes are provided to provide functionality for
+ downloading of Index, Translation and Packages files.
+
+ A Archive class is provided for downloading .deb files. It does Hash
+ checking and source location as well as a retry algorithm.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_ACQUIRE_ITEM_H
+#define PKGLIB_ACQUIRE_ITEM_H
+
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/weakptr.h>
+
+#include <map>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/sourcelist.h>
+#endif
+
+/** \addtogroup acquire
+ * @{
+ *
+ * \file acquire-item.h
+ */
+
+class pkgRecords;
+class pkgSourceList;
+class pkgAcqMetaClearSig;
+class pkgAcqIndexMergeDiffs;
+class metaIndex;
+
+class pkgAcquire::Item : public WeakPointable /*{{{*/
+/** \brief Represents the process by which a pkgAcquire object should
+ * retrieve a file or a collection of files.
+ *
+ * By convention, Item subclasses should insert themselves into the
+ * acquire queue when they are created by calling QueueURI(), and
+ * remove themselves by calling Dequeue() when either Done() or
+ * Failed() is invoked. Item objects are also responsible for
+ * notifying the download progress indicator (accessible via
+ * #Owner->Log) of their status.
+ *
+ * \see pkgAcquire
+ */
+{
+ public:
+
+ /** \brief The current status of this item. */
+ enum ItemState
+ {
+ /** \brief The item is waiting to be downloaded. */
+ StatIdle,
+
+ /** \brief The item is currently being downloaded. */
+ StatFetching,
+
+ /** \brief The item has been successfully downloaded. */
+ StatDone,
+
+ /** \brief An error was encountered while downloading this
+ * item.
+ */
+ StatError,
+
+ /** \brief The item was downloaded but its authenticity could
+ * not be verified.
+ */
+ StatAuthError,
+
+ /** \brief The item was could not be downloaded because of
+ * a transient network error (e.g. network down)
+ */
+ StatTransientNetworkError,
+ } Status;
+
+ /** \brief Contains a textual description of the error encountered
+ * if #ItemState is #StatError or #StatAuthError.
+ */
+ std::string ErrorText;
+
+ /** \brief The size of the object to fetch. */
+ unsigned long long FileSize;
+
+ /** \brief How much of the object was already fetched. */
+ unsigned long long PartialSize;
+
+ /** \brief If not \b NULL, contains the name of a subprocess that
+ * is operating on this object (for instance, "gzip" or "gpgv").
+ */
+ APT_DEPRECATED_MSG("Use the std::string member ActiveSubprocess instead") const char *Mode;
+
+ /** \brief contains the name of the subprocess that is operating on this object
+ * (for instance, "gzip", "rred" or "gpgv"). This is obsoleting #Mode from above
+ * as it can manage the lifetime of included string properly. */
+ std::string ActiveSubprocess;
+
+ /** \brief A client-supplied unique identifier.
+ *
+ * This field is initialized to 0; it is meant to be filled in by
+ * clients that wish to use it to uniquely identify items.
+ *
+ * APT progress reporting will store an ID there as shown in "Get:42 …"
+ */
+ unsigned long ID;
+
+ /** \brief If \b true, the entire object has been successfully fetched.
+ *
+ * Subclasses should set this to \b true when appropriate.
+ */
+ bool Complete;
+
+ /** \brief If \b true, the URI of this object is "local".
+ *
+ * The only effect of this field is to exclude the object from the
+ * download progress indicator's overall statistics.
+ */
+ bool Local;
+
+ std::string UsedMirror;
+
+ /** \brief The number of fetch queues into which this item has been
+ * inserted.
+ *
+ * There is one queue for each source from which an item could be
+ * downloaded.
+ *
+ * \sa pkgAcquire
+ */
+ unsigned int QueueCounter;
+
+ /** \brief The number of additional fetch items that are expected
+ * once this item is done.
+ *
+ * Some items like pkgAcqMeta{Index,Sig} will queue additional
+ * items. This variable can be set by the methods if it knows
+ * in advance how many items to expect to get a more accurate
+ * progress.
+ */
+ unsigned int ExpectedAdditionalItems;
+
+ /** \brief The name of the file into which the retrieved object
+ * will be written.
+ */
+ std::string DestFile;
+
+ /** \brief Invoked by the acquire worker when the object couldn't
+ * be fetched.
+ *
+ * This is a branch of the continuation of the fetch process.
+ *
+ * \param Message An RFC822-formatted message from the acquire
+ * method describing what went wrong. Use LookupTag() to parse
+ * it.
+ *
+ * \param Cnf The method via which the worker tried to fetch this object.
+ *
+ * \sa pkgAcqMethod
+ */
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf);
+ APT_HIDDEN void FailMessage(std::string const &Message);
+
+ /** \brief Invoked by the acquire worker to check if the successfully
+ * fetched object is also the objected we wanted to have.
+ *
+ * Note that the object might \e not have been written to
+ * DestFile; check for the presence of an Alt-Filename entry in
+ * Message to find the file to which it was really written.
+ *
+ * This is called before Done is called and can prevent it by returning
+ * \b false which will result in Failed being called instead.
+ *
+ * You should prefer to use this method over calling Failed() from Done()
+ * as this has e.g. the wrong progress reporting.
+ *
+ * \param Message Data from the acquire method. Use LookupTag()
+ * to parse it.
+ * \param Cnf The method via which the object was fetched.
+ *
+ * \sa pkgAcqMethod
+ */
+ virtual bool VerifyDone(std::string const &Message,
+ pkgAcquire::MethodConfig const * const Cnf);
+
+ /** \brief Invoked by the acquire worker when the object was
+ * fetched successfully.
+ *
+ * Note that the object might \e not have been written to
+ * DestFile; check for the presence of an Alt-Filename entry in
+ * Message to find the file to which it was really written.
+ *
+ * Done is often used to switch from one stage of the processing
+ * to the next (e.g. fetching, unpacking, copying). It is one
+ * branch of the continuation of the fetch process.
+ *
+ * \param Message Data from the acquire method. Use LookupTag()
+ * to parse it.
+ * \param Hashes The HashSums of the object that was fetched.
+ * \param Cnf The method via which the object was fetched.
+ *
+ * \sa pkgAcqMethod
+ */
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf);
+
+ /** \brief Invoked when the worker starts to fetch this object.
+ *
+ * \param Message RFC822-formatted data from the worker process.
+ * Use LookupTag() to parse it.
+ *
+ * \param Hashes The expected hashes of the object being fetched.
+ *
+ * \sa pkgAcqMethod
+ */
+ virtual void Start(std::string const &Message, unsigned long long const Size);
+
+ /** \brief Custom headers to be sent to the fetch process.
+ *
+ * \return a string containing RFC822-style headers that are to be
+ * inserted into the 600 URI Acquire message sent to the fetch
+ * subprocess. The headers are inserted after a newline-less
+ * line, so they should (if nonempty) have a leading newline and
+ * no trailing newline.
+ */
+ virtual std::string Custom600Headers() const;
+ // Retries should really be a member of the Item, but can't be for ABI reasons
+ APT_HIDDEN unsigned int &ModifyRetries();
+ // this is more a hack than a proper external interface, hence hidden
+ APT_HIDDEN std::unordered_map<std::string, std::string> &ModifyCustomFields();
+ // this isn't the super nicest interface either…
+ APT_HIDDEN bool PopAlternativeURI(std::string &NewURI);
+ APT_HIDDEN bool IsGoodAlternativeURI(std::string const &AltUri) const;
+ APT_HIDDEN void PushAlternativeURI(std::string &&NewURI, std::unordered_map<std::string, std::string> &&fields, bool const at_the_back);
+ APT_HIDDEN void RemoveAlternativeSite(std::string &&OldSite);
+
+ /** \brief A "descriptive" URI-like string.
+ *
+ * \return a URI that should be used to describe what is being fetched.
+ */
+ virtual std::string DescURI() const = 0;
+ /** \brief Short item description.
+ *
+ * \return a brief description of the object being fetched.
+ */
+ virtual std::string ShortDesc() const;
+
+ /** \brief Invoked by the worker when the download is completely done. */
+ virtual void Finished();
+
+ /** \return HashSums the DestFile is supposed to have in this stage */
+ virtual HashStringList GetExpectedHashes() const = 0;
+ /** \return the 'best' hash for display proposes like --print-uris */
+ std::string HashSum() const;
+
+ /** \return if having no hashes is a hard failure or not
+ *
+ * Idealy this is always \b true for every subclass, but thanks to
+ * historical grow we don't have hashes for all files in all cases
+ * in all steps, so it is slightly more complicated than it should be.
+ */
+ virtual bool HashesRequired() const { return true; }
+
+ /** \return the acquire process with which this item is associated. */
+ pkgAcquire *GetOwner() const;
+ pkgAcquire::ItemDesc &GetItemDesc();
+
+ /** \return \b true if this object is being fetched from a trusted source. */
+ virtual bool IsTrusted() const;
+
+ /** \brief Report mirror problem
+ *
+ * This allows reporting mirror failures back to a centralized
+ * server. The apt-report-mirror-failure script is called for this
+ *
+ * \param FailCode A short failure string that is send
+ */
+ APT_DEPRECATED_MSG("Item::Failed does this for you") void ReportMirrorFailure(std::string const &FailCode);
+
+ /** \brief Set the name of the current active subprocess
+ *
+ * See also #ActiveSubprocess
+ */
+ void SetActiveSubprocess(std::string const &subprocess);
+
+ /** \brief Initialize an item.
+ *
+ * Adds the item to the list of items known to the acquire
+ * process, but does not place it into any fetch queues (you must
+ * manually invoke QueueURI() to do so).
+ *
+ * \param Owner The new owner of this item.
+ */
+ explicit Item(pkgAcquire * const Owner);
+
+ /** \brief Remove this item from its owner's queue by invoking
+ * pkgAcquire::Remove.
+ */
+ virtual ~Item();
+
+ bool APT_HIDDEN IsRedirectionLoop(std::string const &NewURI);
+ /** \brief The priority of the item, used for queuing */
+ int APT_HIDDEN Priority();
+
+ protected:
+ /** \brief The acquire object with which this item is associated. */
+ pkgAcquire * const Owner;
+
+ /** \brief The item that is currently being downloaded. */
+ pkgAcquire::ItemDesc Desc;
+
+ enum RenameOnErrorState {
+ HashSumMismatch,
+ SizeMismatch,
+ InvalidFormat,
+ SignatureError,
+ NotClearsigned,
+ MaximumSizeExceeded,
+ PDiffError,
+ };
+
+ /** \brief Rename failed file and set error
+ *
+ * \param state respresenting the error we encountered
+ */
+ bool RenameOnError(RenameOnErrorState const state);
+
+ /** \brief Insert this item into its owner's queue.
+ *
+ * The method is designed to check if the request would end
+ * in an IMSHit and if it determines that it would, it isn't
+ * queueing the Item and instead sets it to completion instantly.
+ *
+ * \param Item Metadata about this item (its URI and
+ * description).
+ * \return true if the item was inserted, false if IMSHit was detected
+ */
+ virtual bool QueueURI(ItemDesc &Item);
+
+ /** \brief Remove this item from its owner's queue. */
+ void Dequeue();
+
+ /** \brief Rename a file without modifying its timestamp.
+ *
+ * Many item methods call this as their final action.
+ *
+ * \param From The file to be renamed.
+ *
+ * \param To The new name of \a From. If \a To exists it will be
+ * overwritten. If \a From and \a To are equal nothing happens.
+ */
+ bool Rename(std::string const &From, std::string const &To);
+
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const;
+
+ private:
+ class Private;
+ Private * const d;
+
+ friend class pkgAcqMetaBase;
+ friend class pkgAcqMetaClearSig;
+};
+ /*}}}*/
+class APT_HIDDEN pkgAcqTransactionItem: public pkgAcquire::Item /*{{{*/
+/** \brief baseclass for the indexes files to manage them all together */
+{
+ void * const d;
+ protected:
+ HashStringList GetExpectedHashesFor(std::string const &MetaKey) const;
+
+ bool QueueURI(pkgAcquire::ItemDesc &Item) APT_OVERRIDE;
+
+ public:
+ IndexTarget const Target;
+
+ /** \brief storge name until a transaction is finished */
+ std::string PartialFile;
+
+ /** \brief TransactionManager */
+ pkgAcqMetaClearSig * const TransactionManager;
+
+ enum TransactionStates {
+ TransactionStarted,
+ TransactionCommit,
+ TransactionAbort,
+ };
+ virtual bool TransactionState(TransactionStates const state);
+
+ virtual std::string DescURI() const APT_OVERRIDE { return Target.URI; }
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
+ virtual std::string GetMetaKey() const;
+ virtual bool HashesRequired() const APT_OVERRIDE;
+ virtual bool AcquireByHash() const;
+
+ pkgAcqTransactionItem(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager, IndexTarget const &Target) APT_NONNULL(2, 3);
+ virtual ~pkgAcqTransactionItem();
+
+ friend class pkgAcqMetaBase;
+ friend class pkgAcqMetaClearSig;
+};
+ /*}}}*/
+class APT_HIDDEN pkgAcqMetaBase : public pkgAcqTransactionItem /*{{{*/
+/** \brief the manager of a transaction */
+{
+ void * const d;
+ protected:
+ std::vector<pkgAcqTransactionItem*> Transaction;
+
+ /** \brief If \b true, the index's signature is currently being verified.
+ */
+ bool AuthPass;
+
+ /** \brief Called when a file is finished being retrieved.
+ *
+ * If the file was not downloaded to DestFile, a copy process is
+ * set up to copy it to DestFile; otherwise, Complete is set to \b
+ * true and the file is moved to its final location.
+ *
+ * \param Message The message block received from the fetch
+ * subprocess.
+ */
+ bool CheckDownloadDone(pkgAcqTransactionItem * const I, const std::string &Message, HashStringList const &Hashes) const;
+
+ /** \brief Queue the downloaded Signature for verification */
+ void QueueForSignatureVerify(pkgAcqTransactionItem * const I, std::string const &File, std::string const &Signature);
+
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+
+ /** \brief Called when authentication succeeded.
+ *
+ * Sanity-checks the authenticated file, queues up the individual
+ * index files for download, and saves the signature in the lists
+ * directory next to the authenticated list file.
+ *
+ * \param Message The message block received from the fetch
+ * subprocess.
+ * \param Cnf The method and its configuration which handled the request
+ */
+ bool CheckAuthDone(std::string const &Message, pkgAcquire::MethodConfig const *const Cnf);
+
+ /** Check if the current item should fail at this point */
+ bool CheckStopAuthentication(pkgAcquire::Item * const I, const std::string &Message);
+
+ /** \brief Check that the release file is a release file for the
+ * correct distribution.
+ *
+ * \return \b true if no fatal errors were encountered.
+ */
+ bool VerifyVendor(std::string const &Message);
+
+ virtual bool TransactionState(TransactionStates const state) APT_OVERRIDE;
+
+ public:
+ // This refers more to the Transaction-Manager than the actual file
+ bool IMSHit;
+ TransactionStates State;
+ std::string BaseURI;
+
+ virtual bool QueueURI(pkgAcquire::ItemDesc &Item) APT_OVERRIDE;
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
+ virtual bool HashesRequired() const APT_OVERRIDE;
+
+ // transaction code
+ void Add(pkgAcqTransactionItem * const I);
+ void AbortTransaction();
+ bool TransactionHasError() const;
+ void CommitTransaction();
+
+ /** \brief Stage (queue) a copy action when the transaction is committed
+ */
+ void TransactionStageCopy(pkgAcqTransactionItem * const I,
+ const std::string &From,
+ const std::string &To);
+ /** \brief Stage (queue) a removal action when the transaction is committed
+ */
+ void TransactionStageRemoval(pkgAcqTransactionItem * const I, const std::string &FinalFile);
+
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const APT_OVERRIDE;
+
+ pkgAcqMetaBase(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &DataTarget) APT_NONNULL(2, 3);
+ virtual ~pkgAcqMetaBase();
+};
+ /*}}}*/
+/** \brief An item that is responsible for downloading the meta-index {{{
+ * file (i.e., Release) itself and verifying its signature.
+ *
+ * Once the download and verification are complete, the downloads of
+ * the individual index files are queued up using pkgAcqDiffIndex.
+ * If the meta-index file had a valid signature, the expected hashsums
+ * of the index files will be the md5sums listed in the meta-index;
+ * otherwise, the expected hashsums will be "" (causing the
+ * authentication of the index files to be bypassed).
+ */
+class APT_HIDDEN pkgAcqMetaIndex : public pkgAcqMetaBase
+{
+ void * const d;
+ protected:
+ IndexTarget const DetachedSigTarget;
+
+ /** \brief delayed constructor */
+ void Init(std::string const &URIDesc, std::string const &ShortDesc);
+
+ public:
+ virtual std::string DescURI() const APT_OVERRIDE;
+
+ // Specialized action members
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+
+ /** \brief Create a new pkgAcqMetaIndex. */
+ pkgAcqMetaIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &DataTarget, IndexTarget const &DetachedSigTarget) APT_NONNULL(2, 3);
+ virtual ~pkgAcqMetaIndex();
+
+ friend class pkgAcqMetaSig;
+};
+ /*}}}*/
+/** \brief An acquire item that downloads the detached signature {{{
+ * of a meta-index (Release) file, then queues up the release
+ * file itself.
+ *
+ * \todo Why protected members?
+ *
+ * \sa pkgAcqMetaIndex
+ */
+class APT_HIDDEN pkgAcqMetaSig : public pkgAcqTransactionItem
+{
+ void * const d;
+
+ pkgAcqMetaIndex * const MetaIndex;
+
+ /** \brief The file we use to verify the MetaIndexFile with (not always set!) */
+ std::string MetaIndexFileSignature;
+
+ protected:
+
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const APT_OVERRIDE;
+
+ public:
+ virtual bool HashesRequired() const APT_OVERRIDE { return false; }
+
+ // Specialized action members
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+
+ /** \brief Create a new pkgAcqMetaSig. */
+ pkgAcqMetaSig(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target, pkgAcqMetaIndex * const MetaIndex) APT_NONNULL(2, 3, 5);
+ virtual ~pkgAcqMetaSig();
+};
+ /*}}}*/
+/** \brief An item responsible for downloading clearsigned metaindexes {{{*/
+class APT_HIDDEN pkgAcqMetaClearSig : public pkgAcqMetaIndex
+{
+ void * const d;
+ IndexTarget const DetachedDataTarget;
+
+ public:
+ /** \brief A package-system-specific parser for the meta-index file. */
+ metaIndex *MetaIndexParser;
+ metaIndex *LastMetaIndexParser;
+
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+ virtual bool VerifyDone(std::string const &Message, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Finished() APT_OVERRIDE;
+
+ /** \brief Starts downloading the individual index files.
+ *
+ * \param verify If \b true, only indices whose expected hashsum
+ * can be determined from the meta-index will be downloaded, and
+ * the hashsums of indices will be checked (reporting
+ * #StatAuthError if there is a mismatch). If verify is \b false,
+ * no hashsum checking will be performed.
+ */
+ void QueueIndexes(bool const verify);
+
+ /** \brief Create a new pkgAcqMetaClearSig. */
+ pkgAcqMetaClearSig(pkgAcquire * const Owner,
+ IndexTarget const &ClearsignedTarget,
+ IndexTarget const &DetachedDataTarget,
+ IndexTarget const &DetachedSigTarget,
+ metaIndex * const MetaIndexParser);
+ virtual ~pkgAcqMetaClearSig();
+};
+ /*}}}*/
+/** \brief Common base class for all classes that deal with fetching indexes {{{*/
+class APT_HIDDEN pkgAcqBaseIndex : public pkgAcqTransactionItem
+{
+ void * const d;
+
+ public:
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const APT_OVERRIDE;
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+
+ pkgAcqBaseIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target) APT_NONNULL(2, 3);
+ virtual ~pkgAcqBaseIndex();
+};
+ /*}}}*/
+/** \brief An acquire item that is responsible for fetching an index {{{
+ * file (e.g., Packages or Sources).
+ *
+ * \sa pkgAcqDiffIndex, pkgAcqIndexDiffs, pkgAcqIndexTrans
+ *
+ * \todo Why does pkgAcqIndex have protected members?
+ */
+class APT_HIDDEN pkgAcqIndex : public pkgAcqBaseIndex
+{
+ void * const d;
+
+ protected:
+
+ /** \brief The stages the method goes through
+ *
+ * The method first downloads the indexfile, then its decompressed (or
+ * copied) and verified
+ */
+ enum AllStages {
+ STAGE_DOWNLOAD,
+ STAGE_DECOMPRESS_AND_VERIFY,
+ };
+ AllStages Stage;
+
+ /** \brief Handle what needs to be done when the download is done */
+ void StageDownloadDone(std::string const &Message);
+
+ /** \brief Handle what needs to be done when the decompression/copy is
+ * done
+ */
+ void StageDecompressDone();
+
+ /** \brief If \b set, this partially downloaded file will be
+ * removed when the download completes.
+ */
+ std::string EraseFileName;
+
+ /** \brief The compression-related file extensions that are being
+ * added to the downloaded file one by one if first fails (e.g., "gz bz2").
+ */
+ std::string CompressionExtensions;
+
+ /** \brief The actual compression extension currently used */
+ std::string CurrentCompressionExtension;
+
+ /** \brief Do the changes needed to fetch via AptByHash (if needed) */
+ void InitByHashIfNeeded();
+
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const APT_OVERRIDE;
+
+ virtual bool TransactionState(TransactionStates const state) APT_OVERRIDE;
+
+ public:
+ // Specialized action members
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;};
+ virtual std::string GetMetaKey() const APT_OVERRIDE;
+
+ pkgAcqIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target, bool const Derived = false) APT_NONNULL(2, 3);
+ virtual ~pkgAcqIndex();
+
+ protected:
+ APT_HIDDEN void Init(std::string const &URI, std::string const &URIDesc,
+ std::string const &ShortDesc);
+ APT_HIDDEN bool CommonFailed(std::string const &TargetURI,
+ std::string const &Message, pkgAcquire::MethodConfig const *const Cnf);
+};
+ /*}}}*/
+struct APT_HIDDEN DiffInfo { /*{{{*/
+ /** The filename of the diff. */
+ std::string file;
+
+ /** The hashes of the file after the diff is applied */
+ HashStringList result_hashes;
+
+ /** The hashes of the diff */
+ HashStringList patch_hashes;
+
+ /** The hashes of the compressed diff */
+ HashStringList download_hashes;
+};
+ /*}}}*/
+/** \brief An item that is responsible for fetching an index file of {{{
+ * package list diffs and starting the package list's download.
+ *
+ * This item downloads the Index file and parses it, then enqueues
+ * additional downloads of either the individual patches (using
+ * pkgAcqIndexDiffs) or the entire Packages file (using pkgAcqIndex).
+ *
+ * \sa pkgAcqIndexDiffs, pkgAcqIndex
+ */
+class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex
+{
+ void * const d;
+ std::vector<pkgAcqIndexMergeDiffs*> * diffs;
+ std::vector<DiffInfo> available_patches;
+ bool pdiff_merge;
+
+ protected:
+ /** \brief If \b true, debugging information will be written to std::clog. */
+ bool Debug;
+
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const APT_OVERRIDE;
+
+ virtual bool QueueURI(pkgAcquire::ItemDesc &Item) APT_OVERRIDE;
+
+ virtual bool TransactionState(TransactionStates const state) APT_OVERRIDE;
+ public:
+ // Specialized action members
+ virtual void Failed(std::string const &Message, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual bool VerifyDone(std::string const &Message, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE {return Target.URI + "Index";};
+ virtual std::string GetMetaKey() const APT_OVERRIDE;
+
+ /** \brief Parse the Index file for a set of Packages diffs.
+ *
+ * Parses the Index file and creates additional download items as
+ * necessary.
+ *
+ * \param IndexDiffFile The name of the Index file.
+ *
+ * \return \b true if the Index file was successfully parsed, \b
+ * false otherwise.
+ */
+ bool ParseDiffIndex(std::string const &IndexDiffFile);
+
+ /** \brief Create a new pkgAcqDiffIndex.
+ *
+ * \param Owner The Acquire object that owns this item.
+ *
+ * \param URI The URI of the list file to download.
+ *
+ * \param URIDesc A long description of the list file to download.
+ *
+ * \param ShortDesc A short description of the list file to download.
+ */
+ pkgAcqDiffIndex(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
+ IndexTarget const &Target) APT_NONNULL(2, 3);
+ virtual ~pkgAcqDiffIndex();
+ private:
+ APT_HIDDEN void QueueOnIMSHit() const;
+};
+ /*}}}*/
+/** \brief An item that is responsible for fetching client-merge patches {{{
+ * that need to be applied to a given package index file.
+ *
+ * Instead of downloading and applying each patch one by one like its
+ * sister #pkgAcqIndexDiffs this class will download all patches at once
+ * and call rred with all the patches downloaded once. Rred will then
+ * merge and apply them in one go, which should be a lot faster – but is
+ * incompatible with server-based merges of patches like reprepro can do.
+ *
+ * \sa pkgAcqDiffIndex, pkgAcqIndex
+ */
+class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
+{
+ protected:
+
+ /** \brief If \b true, debugging output will be written to
+ * std::clog.
+ */
+ bool Debug;
+
+ /** \brief information about the current patch */
+ struct DiffInfo const patch;
+
+ /** \brief list of all download items for the patches */
+ std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches;
+
+ /** The current status of this patch. */
+ enum DiffState
+ {
+ /** \brief The diff is currently being fetched. */
+ StateFetchDiff,
+
+ /** \brief The diff is currently being applied. */
+ StateApplyDiff,
+
+ /** \brief the work with this diff is done */
+ StateDoneDiff,
+
+ /** \brief something bad happened and fallback was triggered */
+ StateErrorDiff
+ } State;
+
+ public:
+ /** \brief Called when the patch file failed to be downloaded.
+ *
+ * This method will fall back to downloading the whole index file
+ * outright; its arguments are ignored.
+ */
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE {return Target.URI + "Index";};
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
+ virtual bool HashesRequired() const APT_OVERRIDE;
+ virtual bool AcquireByHash() const APT_OVERRIDE;
+
+ /** \brief Create an index merge-diff item.
+ *
+ * \param Owner The pkgAcquire object that owns this item.
+ * \param TransactionManager responsible for this item
+ * \param Target we intend to built via pdiff patching
+ * \param baseURI is the URI used for the Index, but stripped down to Target
+ * \param DiffInfo of the patch in question
+ * \param patch contains infos about the patch this item is supposed
+ * to download which were read from the index
+ * \param allPatches contains all related items so that each item can
+ * check if it was the last one to complete the download step
+ */
+ pkgAcqIndexMergeDiffs(pkgAcquire *const Owner, pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target, DiffInfo const &patch,
+ std::vector<pkgAcqIndexMergeDiffs *> const *const allPatches) APT_NONNULL(2, 3, 6);
+ virtual ~pkgAcqIndexMergeDiffs();
+};
+ /*}}}*/
+/** \brief An item that is responsible for fetching server-merge patches {{{
+ * that need to be applied to a given package index file.
+ *
+ * After downloading and applying a single patch, this item will
+ * enqueue a new pkgAcqIndexDiffs to download and apply the remaining
+ * patches. If no patch can be found that applies to an intermediate
+ * file or if one of the patches cannot be downloaded, falls back to
+ * downloading the entire package index file using pkgAcqIndex.
+ *
+ * \sa pkgAcqDiffIndex, pkgAcqIndex
+ */
+class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
+{
+ private:
+
+ /** \brief Queue up the next diff download.
+ *
+ * Search for the next available diff that applies to the file
+ * that currently exists on disk, and enqueue it by calling
+ * QueueURI().
+ *
+ * \return \b true if an applicable diff was found, \b false
+ * otherwise.
+ */
+ APT_HIDDEN bool QueueNextDiff();
+
+ /** \brief Handle tasks that must be performed after the item
+ * finishes downloading.
+ *
+ * Dequeues the item and checks the resulting file's hashsums
+ * against ExpectedHashes after the last patch was applied.
+ * There is no need to check the md5/sha1 after a "normal"
+ * patch because QueueNextDiff() will check the sha1 later.
+ *
+ * \param allDone If \b true, the file was entirely reconstructed,
+ * and its md5sum is verified.
+ */
+ APT_HIDDEN void Finish(bool const allDone=false);
+
+ protected:
+
+ /** \brief If \b true, debugging output will be written to
+ * std::clog.
+ */
+ bool Debug;
+
+ /** The patches that remain to be downloaded, including the patch
+ * being downloaded right now. This list should be ordered so
+ * that each diff appears before any diff that depends on it.
+ *
+ * \todo These are indexed by sha1sum; why not use some sort of
+ * dictionary instead of relying on ordering and stripping them
+ * off the front?
+ */
+ std::vector<DiffInfo> available_patches;
+
+ /** The current status of this patch. */
+ enum DiffState
+ {
+ /** \brief The diff is currently being fetched. */
+ StateFetchDiff,
+
+ /** \brief The diff is currently being applied. */
+ StateApplyDiff
+ } State;
+
+ public:
+
+ /** \brief Called when the patch file failed to be downloaded.
+ *
+ * This method will fall back to downloading the whole index file
+ * outright; its arguments are ignored.
+ */
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE {return Target.URI + "IndexDiffs";};
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
+ virtual bool HashesRequired() const APT_OVERRIDE;
+ virtual bool AcquireByHash() const APT_OVERRIDE;
+
+ /** \brief Create an index diff item.
+ *
+ * After filling in its basic fields, this invokes Finish(true) if
+ * \a diffs is empty, or QueueNextDiff() otherwise.
+ *
+ * \param Owner The pkgAcquire object that owns this item.
+ * \param TransactionManager responsible for this item
+ * \param Target we want to built via pdiff patching
+ * \param baseURI is the URI used for the Index, but stripped down to Target
+ * \param diffs The remaining diffs from the index of diffs. They
+ * should be ordered so that each diff appears before any diff
+ * that depends on it.
+ */
+ pkgAcqIndexDiffs(pkgAcquire *const Owner, pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target,
+ std::vector<DiffInfo> const &diffs = std::vector<DiffInfo>()) APT_NONNULL(2, 3);
+ virtual ~pkgAcqIndexDiffs();
+};
+ /*}}}*/
+/** \brief An item that is responsible for fetching a package file. {{{
+ *
+ * If the package file already exists in the cache, nothing will be
+ * done.
+ */
+class pkgAcqArchive : public pkgAcquire::Item
+{
+ void * const d;
+
+ bool LocalSource;
+ HashStringList ExpectedHashes;
+
+ protected:
+ /** \brief The package version being fetched. */
+ pkgCache::VerIterator Version;
+
+ /** \brief The list of sources from which to pick archives to
+ * download this package from.
+ */
+ pkgSourceList *Sources;
+
+ /** \brief A package records object, used to look up the file
+ * corresponding to each version of the package.
+ */
+ pkgRecords *Recs;
+
+ /** \brief A location in which the actual filename of the package
+ * should be stored.
+ */
+ std::string &StoreFilename;
+
+ /** \brief The next file for this version to try to download. */
+ APT_DEPRECATED_MSG("Unused member")
+ pkgCache::VerFileIterator Vf;
+
+ /** \brief How many (more) times to try to find a new source from
+ * which to download this package version if it fails.
+ *
+ * Set from Acquire::Retries.
+ */
+ APT_DEPRECATED_MSG("Unused member. See pkgAcqItem::Retries.")
+ unsigned int Retries;
+
+ /** \brief \b true if this version file is being downloaded from a
+ * trusted source.
+ */
+ bool Trusted;
+
+ /** \brief Queue up the next available file for this version. */
+ bool QueueNext();
+
+ /** \brief Get the full pathname of the final file for the current URI */
+ virtual std::string GetFinalFilename() const APT_OVERRIDE;
+
+ public:
+
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE;
+ virtual std::string ShortDesc() const APT_OVERRIDE;
+ virtual void Finished() APT_OVERRIDE;
+ virtual bool IsTrusted() const APT_OVERRIDE;
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
+ virtual bool HashesRequired() const APT_OVERRIDE;
+
+ /** \brief Create a new pkgAcqArchive.
+ *
+ * \param Owner The pkgAcquire object with which this item is
+ * associated.
+ *
+ * \param Sources The sources from which to download version
+ * files.
+ *
+ * \param Recs A package records object, used to look up the file
+ * corresponding to each version of the package.
+ *
+ * \param Version The package version to download.
+ *
+ * \param[out] StoreFilename A location in which the actual filename of
+ * the package should be stored. It will be set to a guessed
+ * basename in the constructor, and filled in with a fully
+ * qualified filename once the download finishes.
+ */
+ pkgAcqArchive(pkgAcquire * const Owner,pkgSourceList * const Sources,
+ pkgRecords * const Recs,pkgCache::VerIterator const &Version,
+ std::string &StoreFilename);
+ virtual ~pkgAcqArchive();
+};
+ /*}}}*/
+/** \brief Retrieve the changelog for the given version {{{
+ *
+ * Downloads the changelog to a temporary file it will also remove again
+ * while it is deconstructed or downloads it to a named location.
+ */
+class pkgAcqChangelog : public pkgAcquire::Item
+{
+ class Private;
+ Private * const d;
+ std::string TemporaryDirectory;
+ std::string const SrcName;
+ std::string const SrcVersion;
+
+ public:
+ // we will never have hashes for changelogs.
+ // If you need verified ones, download the deb and extract the changelog.
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE { return HashStringList(); }
+ virtual bool HashesRequired() const APT_OVERRIDE { return false; }
+
+ // Specialized action members
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &CalcHashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;};
+
+ /** returns the URI to the changelog of this version
+ *
+ * @param Ver is the version to get the changelog for
+ * @return the URI which will be used to acquire the changelog
+ */
+ static std::string URI(pkgCache::VerIterator const &Ver);
+
+ /** returns the URI to the changelog of this version
+ *
+ * \param Rls is the Release file the package comes from
+ * \param Component in which the package resides, can be empty
+ * \param SrcName is the source package name
+ * \param SrcVersion is the source package version
+ * @return the URI which will be used to acquire the changelog
+ */
+ static std::string URI(pkgCache::RlsFileIterator const &Rls,
+ char const * const Component, char const * const SrcName,
+ char const * const SrcVersion);
+
+ /** returns the URI to the changelog of this version
+ *
+ * \param Template URI where @CHANGEPATH@ has to be filled in
+ * \param Component in which the package resides, can be empty
+ * \param SrcName is the source package name
+ * \param SrcVersion is the source package version
+ * @return the URI which will be used to acquire the changelog
+ */
+ static std::string URI(std::string const &Template,
+ char const * const Component, char const * const SrcName,
+ char const * const SrcVersion);
+
+ /** returns the URI template for this release file
+ *
+ * \param Rls is a Release file
+ * @return the URI template to use for this release file
+ */
+ static std::string URITemplate(pkgCache::RlsFileIterator const &Rls);
+
+ /** \brief Create a new pkgAcqChangelog object.
+ *
+ * \param Owner The pkgAcquire object with which this object is
+ * associated.
+ * \param Ver is the version to get the changelog for
+ * \param DestDir The directory the file should be downloaded into.
+ * Will be an autocreated (and cleaned up) temporary directory if not set.
+ * \param DestFilename The filename the file should have in #DestDir
+ * Defaults to sourcepackagename.changelog if not set.
+ */
+ pkgAcqChangelog(pkgAcquire * const Owner, pkgCache::VerIterator const &Ver,
+ std::string const &DestDir="", std::string const &DestFilename="");
+
+ /** \brief Create a new pkgAcqChangelog object.
+ *
+ * \param Owner The pkgAcquire object with which this object is
+ * associated.
+ * \param Rls is the Release file the package comes from
+ * \param Component in which the package resides, can be empty
+ * \param SrcName is the source package name
+ * \param SrcVersion is the source package version
+ * \param DestDir The directory the file should be downloaded into.
+ * Will be an autocreated (and cleaned up) temporary directory if not set.
+ * \param DestFilename The filename the file should have in #DestDir
+ * Defaults to sourcepackagename.changelog if not set.
+ */
+ pkgAcqChangelog(pkgAcquire * const Owner, pkgCache::RlsFileIterator const &Rls,
+ char const * const Component, char const * const SrcName, char const * const SrcVersion,
+ std::string const &DestDir="", std::string const &DestFilename="");
+
+ /** \brief Create a new pkgAcqChangelog object.
+ *
+ * \param Owner The pkgAcquire object with which this object is
+ * associated.
+ * \param URI is to be used to get the changelog
+ * \param SrcName is the source package name
+ * \param SrcVersion is the source package version
+ * \param DestDir The directory the file should be downloaded into.
+ * Will be an autocreated (and cleaned up) temporary directory if not set.
+ * \param DestFilename The filename the file should have in #DestDir
+ * Defaults to sourcepackagename.changelog if not set.
+ */
+ pkgAcqChangelog(pkgAcquire * const Owner, std::string const &URI,
+ char const * const SrcName, char const * const SrcVersion,
+ std::string const &DestDir="", std::string const &DestFilename="");
+
+ virtual ~pkgAcqChangelog();
+
+private:
+ APT_HIDDEN void Init(std::string const &DestDir, std::string const &DestFilename);
+};
+ /*}}}*/
+/** \brief Retrieve an arbitrary file to the current directory. {{{
+ *
+ * The file is retrieved even if it is accessed via a URL type that
+ * normally is a NOP, such as "file". If the download fails, the
+ * partial file is renamed to get a ".FAILED" extension.
+ */
+class pkgAcqFile : public pkgAcquire::Item
+{
+ void * const d;
+
+ /** \brief How many times to retry the download, set from
+ * Acquire::Retries.
+ */
+ APT_DEPRECATED_MSG("Unused member. See pkgAcqItem::Retries.")
+ unsigned int Retries;
+
+ /** \brief Should this file be considered a index file */
+ bool IsIndexFile;
+
+ HashStringList const ExpectedHashes;
+ public:
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
+ virtual bool HashesRequired() const APT_OVERRIDE;
+
+ // Specialized action members
+ virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &CalcHashes,
+ pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE;
+ virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;};
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+
+ /** \brief Create a new pkgAcqFile object.
+ *
+ * \param Owner The pkgAcquire object with which this object is
+ * associated.
+ *
+ * \param URI The URI to download.
+ *
+ * \param Hashes The hashsums of the file to download, if they are known;
+ * otherwise empty list.
+ *
+ * \param Size The size of the file to download, if it is known;
+ * otherwise 0.
+ *
+ * \param Desc A description of the file being downloaded.
+ *
+ * \param ShortDesc A brief description of the file being
+ * downloaded.
+ *
+ * \param DestDir The directory the file should be downloaded into.
+ *
+ * \param DestFilename The filename+path the file is downloaded to.
+ *
+ * \param IsIndexFile The file is considered a IndexFile and cache-control
+ * headers like "cache-control: max-age=0" are send
+ *
+ * If DestFilename is empty, download to DestDir/\<basename\> if
+ * DestDir is non-empty, $CWD/\<basename\> otherwise. If
+ * DestFilename is NOT empty, DestDir is ignored and DestFilename
+ * is the absolute name to which the file should be downloaded.
+ */
+
+ pkgAcqFile(pkgAcquire * const Owner, std::string const &URI, HashStringList const &Hashes, unsigned long long const Size,
+ std::string const &Desc, std::string const &ShortDesc,
+ std::string const &DestDir="", std::string const &DestFilename="",
+ bool const IsIndexFile=false);
+ virtual ~pkgAcqFile();
+};
+ /*}}}*/
+class APT_HIDDEN pkgAcqAuxFile : public pkgAcqFile /*{{{*/
+{
+ pkgAcquire::Item *const Owner;
+ pkgAcquire::Worker *const Worker;
+ unsigned long long MaximumSize;
+
+ public:
+ virtual void Failed(std::string const &Message, pkgAcquire::MethodConfig const *const Cnf) APT_OVERRIDE;
+ virtual void Done(std::string const &Message, HashStringList const &CalcHashes,
+ pkgAcquire::MethodConfig const *const Cnf) APT_OVERRIDE;
+ virtual std::string Custom600Headers() const APT_OVERRIDE;
+ virtual void Finished() APT_OVERRIDE;
+
+ pkgAcqAuxFile(pkgAcquire::Item *const Owner, pkgAcquire::Worker *const Worker,
+ std::string const &ShortDesc, std::string const &Desc, std::string const &URI,
+ HashStringList const &Hashes, unsigned long long const MaximumSize);
+ virtual ~pkgAcqAuxFile();
+};
+ /*}}}*/
+/** @} */
+
+#endif
diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc
new file mode 100644
index 0000000..ae5ae4a
--- /dev/null
+++ b/apt-pkg/acquire-method.cc
@@ -0,0 +1,565 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Method
+
+ This is a skeleton class that implements most of the functionality
+ of a method and some useful functions to make method implementation
+ simpler. The methods all derive this and specialize it. The most
+ complex implementation is the http method which needs to provide
+ pipelining, it runs the message engine at the same time it is
+ downloading files..
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-method.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/sha2.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <iostream>
+#include <iterator>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+ /*}}}*/
+
+using namespace std;
+
+// poor mans unordered_map::try_emplace for C++11 as it is a C++17 feature /*{{{*/
+template <typename Arg>
+static void try_emplace(std::unordered_map<std::string, std::string> &fields, std::string &&name, Arg &&value)
+{
+ if (fields.find(name) == fields.end())
+ fields.emplace(std::move(name), std::forward<Arg>(value));
+}
+ /*}}}*/
+
+// AcqMethod::pkgAcqMethod - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* This constructs the initialization text */
+pkgAcqMethod::pkgAcqMethod(const char *Ver,unsigned long Flags)
+{
+ std::unordered_map<std::string, std::string> fields;
+ try_emplace(fields, "Version", Ver);
+ if ((Flags & SingleInstance) == SingleInstance)
+ try_emplace(fields, "Single-Instance", "true");
+
+ if ((Flags & Pipeline) == Pipeline)
+ try_emplace(fields, "Pipeline", "true");
+
+ if ((Flags & SendConfig) == SendConfig)
+ try_emplace(fields, "Send-Config", "true");
+
+ if ((Flags & LocalOnly) == LocalOnly)
+ try_emplace(fields, "Local-Only", "true");
+
+ if ((Flags & NeedsCleanup) == NeedsCleanup)
+ try_emplace(fields, "Needs-Cleanup", "true");
+
+ if ((Flags & Removable) == Removable)
+ try_emplace(fields, "Removable", "true");
+
+ if ((Flags & AuxRequests) == AuxRequests)
+ try_emplace(fields, "AuxRequests", "true");
+
+ SendMessage("100 Capabilities", std::move(fields));
+
+ SetNonBlock(STDIN_FILENO,true);
+
+ Queue = 0;
+ QueueBack = 0;
+}
+ /*}}}*/
+void pkgAcqMethod::SendMessage(std::string const &header, std::unordered_map<std::string, std::string> &&fields) /*{{{*/
+{
+ auto CheckKey = [](std::string const &str) {
+ // Space, hyphen-minus, and alphanum are allowed for keys/headers.
+ return str.find_first_not_of(" -0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") == std::string::npos;
+ };
+
+ auto CheckValue = [](std::string const &str) {
+ return std::all_of(str.begin(), str.end(), [](unsigned char c) -> bool {
+ return c > 127 // unicode
+ || (c > 31 && c < 127) // printable chars
+ || c == '\n' || c == '\t'; // special whitespace
+ });
+ };
+
+ auto Error = [this]() {
+ _error->Error("SECURITY: Message contains control characters, rejecting.");
+ _error->DumpErrors();
+ SendMessage("400 URI Failure", {{"URI", "<UNKNOWN>"}, {"Message", "SECURITY: Message contains control characters, rejecting."}});
+ abort();
+ };
+
+ if (!CheckKey(header))
+ return Error();
+
+ for (auto const &f : fields)
+ {
+ if (!CheckKey(f.first))
+ return Error();
+ if (!CheckValue(f.second))
+ return Error();
+ }
+
+ std::cout << header << '\n';
+ for (auto const &f : fields)
+ {
+ if (f.second.empty())
+ continue;
+ std::cout << f.first << ": ";
+ auto const lines = VectorizeString(f.second, '\n');
+ if (likely(lines.empty() == false))
+ {
+ std::copy(lines.begin(), std::prev(lines.end()), std::ostream_iterator<std::string>(std::cout, "\n "));
+ std::cout << *lines.rbegin();
+ }
+ std::cout << '\n';
+ }
+ std::cout << '\n'
+ << std::flush;
+}
+ /*}}}*/
+// AcqMethod::Fail - A fetch has failed /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqMethod::Fail(bool Transient)
+{
+ string Err = "Undetermined Error";
+ if (_error->empty() == false)
+ {
+ Err.clear();
+ while (_error->empty() == false)
+ {
+ std::string msg;
+ if (_error->PopMessage(msg))
+ {
+ if (Err.empty() == false)
+ Err.append("\n");
+ Err.append(msg);
+ }
+ }
+ }
+ Fail(Err, Transient);
+}
+ /*}}}*/
+// AcqMethod::Fail - A fetch has failed /*{{{*/
+void pkgAcqMethod::Fail(string Err,bool Transient)
+{
+ // Strip out junk from the error messages
+ std::transform(Err.begin(), Err.end(), Err.begin(), [](char const c) {
+ if (c == '\r' || c == '\n')
+ return ' ';
+ return c;
+ });
+ if (IP.empty() == false && _config->FindB("Acquire::Failure::ShowIP", true) == true)
+ Err.append(" ").append(IP);
+
+ std::unordered_map<std::string, std::string> fields;
+ if (Queue != nullptr)
+ try_emplace(fields, "URI", Queue->Uri);
+ else
+ try_emplace(fields, "URI", "<UNKNOWN>");
+ try_emplace(fields, "Message", Err);
+
+ if(FailReason.empty() == false)
+ try_emplace(fields, "FailReason", FailReason);
+ if (UsedMirror.empty() == false)
+ try_emplace(fields, "UsedMirror", UsedMirror);
+ if (Transient == true)
+ try_emplace(fields, "Transient-Failure", "true");
+
+ SendMessage("400 URI Failure", std::move(fields));
+
+ if (Queue != nullptr)
+ Dequeue();
+}
+ /*}}}*/
+// AcqMethod::DropPrivsOrDie - Drop privileges or die /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqMethod::DropPrivsOrDie()
+{
+ if (!DropPrivileges()) {
+ Fail(false);
+ exit(112); /* call the european emergency number */
+ }
+}
+
+ /*}}}*/
+// AcqMethod::URIStart - Indicate a download is starting /*{{{*/
+void pkgAcqMethod::URIStart(FetchResult &Res)
+{
+ if (Queue == 0)
+ abort();
+
+ std::unordered_map<std::string, std::string> fields;
+ try_emplace(fields, "URI", Queue->Uri);
+ if (Res.Size != 0)
+ try_emplace(fields, "Size", std::to_string(Res.Size));
+ if (Res.LastModified != 0)
+ try_emplace(fields, "Last-Modified", TimeRFC1123(Res.LastModified, true));
+ if (Res.ResumePoint != 0)
+ try_emplace(fields, "Resume-Point", std::to_string(Res.ResumePoint));
+ if (UsedMirror.empty() == false)
+ try_emplace(fields, "UsedMirror", UsedMirror);
+
+ SendMessage("200 URI Start", std::move(fields));
+}
+ /*}}}*/
+// AcqMethod::URIDone - A URI is finished /*{{{*/
+static void printHashStringList(std::unordered_map<std::string, std::string> &fields, std::string const &Prefix, HashStringList const &list)
+{
+ for (auto const &hash : list)
+ {
+ // very old compatibility name for MD5Sum
+ if (hash.HashType() == "MD5Sum")
+ try_emplace(fields, Prefix + "MD5-Hash", hash.HashValue());
+ try_emplace(fields, Prefix + hash.HashType() + "-Hash", hash.HashValue());
+ }
+}
+void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
+{
+ if (Queue == 0)
+ abort();
+
+ std::unordered_map<std::string, std::string> fields;
+ try_emplace(fields, "URI", Queue->Uri);
+ if (Res.Filename.empty() == false)
+ try_emplace(fields, "Filename", Res.Filename);
+ if (Res.Size != 0)
+ try_emplace(fields, "Size", std::to_string(Res.Size));
+ if (Res.LastModified != 0)
+ try_emplace(fields, "Last-Modified", TimeRFC1123(Res.LastModified, true));
+ printHashStringList(fields, "", Res.Hashes);
+
+ if (UsedMirror.empty() == false)
+ try_emplace(fields, "UsedMirror", UsedMirror);
+ if (Res.GPGVOutput.empty() == false)
+ {
+ std::ostringstream os;
+ std::copy(Res.GPGVOutput.begin(), Res.GPGVOutput.end() - 1, std::ostream_iterator<std::string>(os, "\n"));
+ os << *Res.GPGVOutput.rbegin();
+ try_emplace(fields, "GPGVOutput", os.str());
+ }
+ if (Res.ResumePoint != 0)
+ try_emplace(fields, "Resume-Point", std::to_string(Res.ResumePoint));
+ if (Res.IMSHit == true)
+ try_emplace(fields, "IMS-Hit", "true");
+
+ if (Alt != nullptr)
+ {
+ if (Alt->Filename.empty() == false)
+ try_emplace(fields, "Alt-Filename", Alt->Filename);
+ if (Alt->Size != 0)
+ try_emplace(fields, "Alt-Size", std::to_string(Alt->Size));
+ if (Alt->LastModified != 0)
+ try_emplace(fields, "Alt-Last-Modified", TimeRFC1123(Alt->LastModified, true));
+ if (Alt->IMSHit == true)
+ try_emplace(fields, "Alt-IMS-Hit", "true");
+ printHashStringList(fields, "Alt-", Alt->Hashes);
+ }
+
+ SendMessage("201 URI Done", std::move(fields));
+ Dequeue();
+}
+ /*}}}*/
+// AcqMethod::MediaFail - Synchronous request for new media /*{{{*/
+// ---------------------------------------------------------------------
+/* This sends a 403 Media Failure message to the APT and waits for it
+ to be ackd */
+bool pkgAcqMethod::MediaFail(string Required,string Drive)
+{
+ fprintf(stdout, "403 Media Failure\nMedia: %s\nDrive: %s\n",
+ Required.c_str(),Drive.c_str());
+ std::cout << "\n" << std::flush;
+
+ vector<string> MyMessages;
+
+ /* Here we read messages until we find a 603, each non 603 message is
+ appended to the main message list for later processing */
+ while (1)
+ {
+ if (WaitFd(STDIN_FILENO) == false)
+ return false;
+
+ if (ReadMessages(STDIN_FILENO,MyMessages) == false)
+ return false;
+
+ string Message = MyMessages.front();
+ MyMessages.erase(MyMessages.begin());
+
+ // Fetch the message number
+ char *End;
+ int Number = strtol(Message.c_str(),&End,10);
+ if (End == Message.c_str())
+ {
+ cerr << "Malformed message!" << endl;
+ exit(100);
+ }
+
+ // Change ack
+ if (Number == 603)
+ {
+ while (MyMessages.empty() == false)
+ {
+ Messages.push_back(MyMessages.front());
+ MyMessages.erase(MyMessages.begin());
+ }
+
+ return !StringToBool(LookupTag(Message,"Failed"),false);
+ }
+
+ Messages.push_back(Message);
+ }
+}
+ /*}}}*/
+// AcqMethod::Configuration - Handle the configuration message /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses each configuration entry and puts it into the _config
+ Configuration class. */
+bool pkgAcqMethod::Configuration(string Message)
+{
+ ::Configuration &Cnf = *_config;
+
+ const char *I = Message.c_str();
+ const char *MsgEnd = I + Message.length();
+
+ unsigned int Length = strlen("Config-Item");
+ for (; I + Length < MsgEnd; I++)
+ {
+ // Not a config item
+ if (I[Length] != ':' || stringcasecmp(I,I+Length,"Config-Item") != 0)
+ continue;
+
+ I += Length + 1;
+
+ for (; I < MsgEnd && *I == ' '; I++);
+ const char *Equals = (const char*) memchr(I, '=', MsgEnd - I);
+ if (Equals == NULL)
+ return false;
+ const char *End = (const char*) memchr(Equals, '\n', MsgEnd - Equals);
+ if (End == NULL)
+ End = MsgEnd;
+
+ Cnf.Set(DeQuoteString(string(I,Equals-I)),
+ DeQuoteString(string(Equals+1,End-Equals-1)));
+ I = End;
+ }
+
+ return true;
+}
+ /*}}}*/
+// AcqMethod::Run - Run the message engine /*{{{*/
+// ---------------------------------------------------------------------
+/* Fetch any messages and execute them. In single mode it returns 1 if
+ there are no more available messages - any other result is a
+ fatal failure code! */
+int pkgAcqMethod::Run(bool Single)
+{
+ while (1)
+ {
+ // Block if the message queue is empty
+ if (Messages.empty() == true)
+ {
+ if (Single == false)
+ if (WaitFd(STDIN_FILENO) == false)
+ break;
+ if (ReadMessages(STDIN_FILENO,Messages) == false)
+ break;
+ }
+
+ // Single mode exits if the message queue is empty
+ if (Single == true && Messages.empty() == true)
+ return -1;
+
+ string Message = Messages.front();
+ Messages.erase(Messages.begin());
+
+ // Fetch the message number
+ char *End;
+ int Number = strtol(Message.c_str(),&End,10);
+ if (End == Message.c_str())
+ {
+ cerr << "Malformed message!" << endl;
+ return 100;
+ }
+
+ switch (Number)
+ {
+ case 601:
+ if (Configuration(Message) == false)
+ return 100;
+ break;
+
+ case 600:
+ {
+ FetchItem *Tmp = new FetchItem;
+
+ Tmp->Uri = LookupTag(Message,"URI");
+ Tmp->Proxy(LookupTag(Message, "Proxy"));
+ Tmp->DestFile = LookupTag(Message,"FileName");
+ if (RFC1123StrToTime(LookupTag(Message,"Last-Modified").c_str(),Tmp->LastModified) == false)
+ Tmp->LastModified = 0;
+ Tmp->IndexFile = StringToBool(LookupTag(Message,"Index-File"),false);
+ Tmp->FailIgnore = StringToBool(LookupTag(Message,"Fail-Ignore"),false);
+ Tmp->ExpectedHashes = HashStringList();
+ for (char const * const * t = HashString::SupportedHashes(); *t != NULL; ++t)
+ {
+ std::string tag = "Expected-";
+ tag.append(*t);
+ std::string const hash = LookupTag(Message, tag.c_str());
+ if (hash.empty() == false)
+ Tmp->ExpectedHashes.push_back(HashString(*t, hash));
+ }
+ char *End;
+ if (Tmp->ExpectedHashes.FileSize() > 0)
+ Tmp->MaximumSize = Tmp->ExpectedHashes.FileSize();
+ else
+ Tmp->MaximumSize = strtoll(LookupTag(Message, "Maximum-Size", "0").c_str(), &End, 10);
+ Tmp->Next = 0;
+
+ // Append it to the list
+ FetchItem **I = &Queue;
+ for (; *I != 0; I = &(*I)->Next);
+ *I = Tmp;
+ if (QueueBack == 0)
+ QueueBack = Tmp;
+
+ // Notify that this item is to be fetched.
+ if (URIAcquire(Message, Tmp) == false)
+ Fail();
+
+ break;
+ }
+ }
+ }
+
+ Exit();
+ return 0;
+}
+ /*}}}*/
+// AcqMethod::PrintStatus - privately really send a log/status message /*{{{*/
+void pkgAcqMethod::PrintStatus(char const * const header, const char* Format,
+ va_list &args) const
+{
+ string CurrentURI = "<UNKNOWN>";
+ if (Queue != 0)
+ CurrentURI = Queue->Uri;
+ if (UsedMirror.empty() == true)
+ fprintf(stdout, "%s\nURI: %s\nMessage: ",
+ header, CurrentURI.c_str());
+ else
+ fprintf(stdout, "%s\nURI: %s\nUsedMirror: %s\nMessage: ",
+ header, CurrentURI.c_str(), UsedMirror.c_str());
+ vfprintf(stdout,Format,args);
+ std::cout << "\n\n" << std::flush;
+}
+ /*}}}*/
+// AcqMethod::Log - Send a log message /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqMethod::Log(const char *Format,...)
+{
+ va_list args;
+ va_start(args,Format);
+ PrintStatus("101 Log", Format, args);
+ va_end(args);
+}
+ /*}}}*/
+// AcqMethod::Status - Send a status message /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqMethod::Status(const char *Format,...)
+{
+ va_list args;
+ va_start(args,Format);
+ PrintStatus("102 Status", Format, args);
+ va_end(args);
+}
+ /*}}}*/
+// AcqMethod::Redirect - Send a redirect message /*{{{*/
+// ---------------------------------------------------------------------
+/* This method sends the redirect message and dequeues the item as
+ * the worker will enqueue again later on to the right queue */
+void pkgAcqMethod::Redirect(const string &NewURI)
+{
+ if (NewURI.find_first_not_of(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~") != std::string::npos)
+ {
+ _error->Error("SECURITY: URL redirect target contains control characters, rejecting.");
+ Fail();
+ return;
+ }
+ std::unordered_map<std::string, std::string> fields;
+ try_emplace(fields, "URI", Queue->Uri);
+ try_emplace(fields, "New-URI", NewURI);
+ SendMessage("103 Redirect", std::move(fields));
+ Dequeue();
+}
+ /*}}}*/
+// AcqMethod::FetchResult::FetchResult - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcqMethod::FetchResult::FetchResult() : LastModified(0),
+ IMSHit(false), Size(0), ResumePoint(0), d(NULL)
+{
+}
+ /*}}}*/
+// AcqMethod::FetchResult::TakeHashes - Load hashes /*{{{*/
+// ---------------------------------------------------------------------
+/* This hides the number of hashes we are supporting from the caller.
+ It just deals with the hash class. */
+void pkgAcqMethod::FetchResult::TakeHashes(class Hashes &Hash)
+{
+ Hashes = Hash.GetHashStringList();
+}
+ /*}}}*/
+void pkgAcqMethod::Dequeue() { /*{{{*/
+ FetchItem const * const Tmp = Queue;
+ Queue = Queue->Next;
+ if (Tmp == QueueBack)
+ QueueBack = Queue;
+ delete Tmp;
+}
+ /*}}}*/
+pkgAcqMethod::~pkgAcqMethod() {}
+
+struct pkgAcqMethod::FetchItem::Private
+{
+ std::string Proxy;
+};
+
+pkgAcqMethod::FetchItem::FetchItem() : Next(nullptr), DestFileFd(-1), LastModified(0), IndexFile(false),
+ FailIgnore(false), MaximumSize(0), d(new Private)
+{}
+
+std::string pkgAcqMethod::FetchItem::Proxy()
+{
+ return d->Proxy;
+}
+
+void pkgAcqMethod::FetchItem::Proxy(std::string const &Proxy)
+{
+ d->Proxy = Proxy;
+}
+
+pkgAcqMethod::FetchItem::~FetchItem() { delete d; }
+
+pkgAcqMethod::FetchResult::~FetchResult() {}
diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h
new file mode 100644
index 0000000..664b95c
--- /dev/null
+++ b/apt-pkg/acquire-method.h
@@ -0,0 +1,140 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Method - Method helper class + functions
+
+ These functions are designed to be used within the method task to
+ ease communication with APT.
+
+ ##################################################################### */
+ /*}}}*/
+
+/** \addtogroup acquire
+ * @{
+ *
+ * \file acquire-method.h
+ */
+
+#ifndef PKGLIB_ACQUIRE_METHOD_H
+#define PKGLIB_ACQUIRE_METHOD_H
+
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/macros.h>
+
+#include <stdarg.h>
+#include <time.h>
+
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
+#endif
+
+class pkgAcqMethod
+{
+ protected:
+
+ struct FetchItem
+ {
+ FetchItem *Next;
+
+ std::string Uri;
+ std::string DestFile;
+ int DestFileFd;
+ time_t LastModified;
+ bool IndexFile;
+ bool FailIgnore;
+ HashStringList ExpectedHashes;
+ // a maximum size we will download, this can be the exact filesize
+ // for when we know it or a arbitrary limit when we don't know the
+ // filesize (like a InRelease file)
+ unsigned long long MaximumSize;
+
+ FetchItem();
+ virtual ~FetchItem();
+ std::string Proxy(); // For internal use only.
+ void Proxy(std::string const &Proxy) APT_HIDDEN;
+
+ private:
+ struct Private;
+ Private *const d;
+ };
+
+ struct FetchResult
+ {
+ HashStringList Hashes;
+ std::vector<std::string> GPGVOutput;
+ time_t LastModified;
+ bool IMSHit;
+ std::string Filename;
+ unsigned long long Size;
+ unsigned long long ResumePoint;
+
+ void TakeHashes(class Hashes &Hash);
+ FetchResult();
+ virtual ~FetchResult();
+ private:
+ void * const d;
+ };
+
+ // State
+ std::vector<std::string> Messages;
+ FetchItem *Queue;
+ FetchItem *QueueBack;
+ std::string FailReason;
+ std::string UsedMirror;
+ std::string IP;
+
+ // Handlers for messages
+ virtual bool Configuration(std::string Message);
+ virtual bool Fetch(FetchItem * /*Item*/) {return true;};
+ virtual bool URIAcquire(std::string const &/*Message*/, FetchItem *Itm) { return Fetch(Itm); };
+
+ // Outgoing messages
+ void Fail(bool Transient = false);
+ inline void Fail(const char *Why, bool Transient = false) {Fail(std::string(Why),Transient);};
+ virtual void Fail(std::string Why, bool Transient = false);
+ virtual void URIStart(FetchResult &Res);
+ virtual void URIDone(FetchResult &Res,FetchResult *Alt = 0);
+ void SendMessage(std::string const &header, std::unordered_map<std::string, std::string> &&fields);
+
+ bool MediaFail(std::string Required,std::string Drive);
+ virtual void Exit() {};
+
+ void PrintStatus(char const * const header, const char* Format, va_list &args) const;
+
+ public:
+ enum CnfFlags
+ {
+ SingleInstance = (1 << 0),
+ Pipeline = (1 << 1),
+ SendConfig = (1 << 2),
+ LocalOnly = (1 << 3),
+ NeedsCleanup = (1 << 4),
+ Removable = (1 << 5),
+ AuxRequests = (1 << 6)
+ };
+
+ void Log(const char *Format,...);
+ void Status(const char *Format,...);
+
+ void Redirect(const std::string &NewURI);
+
+ int Run(bool Single = false);
+ inline void SetFailReason(std::string Msg) {FailReason = Msg;};
+ inline void SetIP(std::string aIP) {IP = aIP;};
+
+ pkgAcqMethod(const char *Ver,unsigned long Flags = 0);
+ virtual ~pkgAcqMethod();
+ void DropPrivsOrDie();
+ private:
+ APT_HIDDEN void Dequeue();
+};
+
+/** @} */
+
+#endif
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
new file mode 100644
index 0000000..b361861
--- /dev/null
+++ b/apt-pkg/acquire-worker.cc
@@ -0,0 +1,964 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Worker
+
+ The worker process can startup either as a Configuration prober
+ or as a queue runner. As a configuration prober it only reads the
+ configuration message and
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire-worker.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/proxy.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <sstream>
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// Worker::Worker - Constructor for Queue startup /*{{{*/
+pkgAcquire::Worker::Worker(Queue *Q, MethodConfig *Cnf, pkgAcquireStatus *log) :
+ d(NULL), OwnerQ(Q), Log(log), Config(Cnf), Access(Cnf->Access),
+ CurrentItem(nullptr), CurrentSize(0), TotalSize(0)
+{
+ Construct();
+}
+ /*}}}*/
+// Worker::Worker - Constructor for method config startup /*{{{*/
+pkgAcquire::Worker::Worker(MethodConfig *Cnf) : Worker(nullptr, Cnf, nullptr)
+{
+}
+ /*}}}*/
+// Worker::Construct - Constructor helper /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcquire::Worker::Construct()
+{
+ NextQueue = 0;
+ NextAcquire = 0;
+ Process = -1;
+ InFd = -1;
+ OutFd = -1;
+ OutReady = false;
+ InReady = false;
+ Debug = _config->FindB("Debug::pkgAcquire::Worker",false);
+}
+ /*}}}*/
+// Worker::~Worker - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcquire::Worker::~Worker()
+{
+ close(InFd);
+ close(OutFd);
+
+ if (Process > 0)
+ {
+ /* Closing of stdin is the signal to exit and die when the process
+ indicates it needs cleanup */
+ if (Config->NeedsCleanup == false)
+ kill(Process,SIGINT);
+ ExecWait(Process,Access.c_str(),true);
+ }
+}
+ /*}}}*/
+// Worker::Start - Start the worker process /*{{{*/
+// ---------------------------------------------------------------------
+/* This forks the method and inits the communication channel */
+bool pkgAcquire::Worker::Start()
+{
+ // Get the method path
+ constexpr char const * const methodsDir = "Dir::Bin::Methods";
+ std::string const confItem = std::string(methodsDir) + "::" + Access;
+ std::string Method;
+ if (_config->Exists(confItem))
+ Method = _config->FindFile(confItem.c_str());
+ else if (Access == "ftp" || Access == "rsh" || Access == "ssh")
+ return _error->Error(_("The method '%s' is unsupported and disabled by default. Consider switching to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."), Access.c_str(), Access.c_str(), Access.c_str());
+ else
+ Method = _config->FindDir(methodsDir) + Access;
+ if (FileExists(Method) == false)
+ {
+ if (flNotDir(Method) == "false")
+ {
+ _error->Error(_("The method '%s' is explicitly disabled via configuration."), Access.c_str());
+ if (Access == "http" || Access == "https")
+ _error->Notice(_("If you meant to use Tor remember to use %s instead of %s."), ("tor+" + Access).c_str(), Access.c_str());
+ return false;
+ }
+ _error->Error(_("The method driver %s could not be found."),Method.c_str());
+ std::string const A(Access.cbegin(), std::find(Access.cbegin(), Access.cend(), '+'));
+ std::string pkg;
+ strprintf(pkg, "apt-transport-%s", A.c_str());
+ _error->Notice(_("Is the package %s installed?"), pkg.c_str());
+ return false;
+ }
+ std::string const Calling = _config->FindDir(methodsDir) + Access;
+
+ if (Debug == true)
+ {
+ std::clog << "Starting method '" << Calling << "'";
+ if (Calling != Method)
+ std::clog << " ( via " << Method << " )";
+ std::clog << endl;
+ }
+
+ // Create the pipes
+ int Pipes[4] = {-1,-1,-1,-1};
+ if (pipe(Pipes) != 0 || pipe(Pipes+2) != 0)
+ {
+ _error->Errno("pipe","Failed to create IPC pipe to subprocess");
+ for (int I = 0; I != 4; I++)
+ close(Pipes[I]);
+ return false;
+ }
+ for (int I = 0; I != 4; I++)
+ SetCloseExec(Pipes[I],true);
+
+ // Fork off the process
+ Process = ExecFork();
+ if (Process == 0)
+ {
+ // Setup the FDs
+ dup2(Pipes[1],STDOUT_FILENO);
+ dup2(Pipes[2],STDIN_FILENO);
+ SetCloseExec(STDOUT_FILENO,false);
+ SetCloseExec(STDIN_FILENO,false);
+ SetCloseExec(STDERR_FILENO,false);
+
+ const char * const Args[] = { Calling.c_str(), nullptr };
+ execv(Method.c_str() ,const_cast<char **>(Args));
+ std::cerr << "Failed to exec method " << Calling << " ( via " << Method << ")" << endl;
+ _exit(100);
+ }
+
+ // Fix up our FDs
+ InFd = Pipes[0];
+ OutFd = Pipes[3];
+ SetNonBlock(Pipes[0],true);
+ SetNonBlock(Pipes[3],true);
+ close(Pipes[1]);
+ close(Pipes[2]);
+ OutReady = false;
+ InReady = true;
+
+ // Read the configuration data
+ if (WaitFd(InFd) == false ||
+ ReadMessages() == false)
+ return _error->Error(_("Method %s did not start correctly"),Method.c_str());
+
+ RunMessages();
+ if (OwnerQ != 0)
+ SendConfiguration();
+
+ return true;
+}
+ /*}}}*/
+// Worker::ReadMessages - Read all pending messages into the list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgAcquire::Worker::ReadMessages()
+{
+ if (::ReadMessages(InFd,MessageQueue) == false)
+ return MethodFailure();
+ return true;
+}
+ /*}}}*/
+// Worker::RunMessage - Empty the message queue /*{{{*/
+// ---------------------------------------------------------------------
+/* This takes the messages from the message queue and runs them through
+ the parsers in order. */
+enum class APT_HIDDEN MessageType
+{
+ CAPABILITIES = 100,
+ LOG = 101,
+ STATUS = 102,
+ REDIRECT = 103,
+ WARNING = 104,
+ URI_START = 200,
+ URI_DONE = 201,
+ AUX_REQUEST = 351,
+ URI_FAILURE = 400,
+ GENERAL_FAILURE = 401,
+ MEDIA_CHANGE = 403
+};
+static bool isDoomedItem(pkgAcquire::Item const * const Itm)
+{
+ auto const TransItm = dynamic_cast<pkgAcqTransactionItem const * const>(Itm);
+ if (TransItm == nullptr)
+ return false;
+ return TransItm->TransactionManager->State != pkgAcqTransactionItem::TransactionStarted;
+}
+static HashStringList GetHashesFromMessage(std::string const &Prefix, std::string const &Message)
+{
+ HashStringList hsl;
+ for (char const *const *type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ std::string const tagname = Prefix + *type + "-Hash";
+ std::string const hashsum = LookupTag(Message, tagname.c_str());
+ if (hashsum.empty() == false)
+ hsl.push_back(HashString(*type, hashsum));
+ }
+ return hsl;
+}
+static void APT_NONNULL(3) ChangeSiteIsMirrorChange(std::string const &NewURI, pkgAcquire::ItemDesc &desc, pkgAcquire::Item *const Owner)
+{
+ if (URI::SiteOnly(NewURI) == URI::SiteOnly(desc.URI))
+ return;
+
+ auto const firstSpace = desc.Description.find(" ");
+ if (firstSpace != std::string::npos)
+ {
+ std::string const OldSite = desc.Description.substr(0, firstSpace);
+ if (likely(APT::String::Startswith(desc.URI, OldSite)))
+ {
+ std::string const OldExtra = desc.URI.substr(OldSite.length() + 1);
+ if (likely(APT::String::Endswith(NewURI, OldExtra)))
+ {
+ std::string const NewSite = NewURI.substr(0, NewURI.length() - OldExtra.length());
+ Owner->UsedMirror = URI::ArchiveOnly(NewSite);
+ desc.Description.replace(0, firstSpace, Owner->UsedMirror);
+ }
+ }
+ }
+}
+bool pkgAcquire::Worker::RunMessages()
+{
+ while (MessageQueue.empty() == false)
+ {
+ string Message = MessageQueue.front();
+ MessageQueue.erase(MessageQueue.begin());
+
+ if (Debug == true)
+ clog << " <- " << Access << ':' << QuoteString(Message,"\n") << endl;
+
+ // Fetch the message number
+ char *End;
+ MessageType const Number = static_cast<MessageType>(strtoul(Message.c_str(),&End,10));
+ if (End == Message.c_str())
+ return _error->Error("Invalid message from method %s: %s",Access.c_str(),Message.c_str());
+
+ string URI = LookupTag(Message,"URI");
+ pkgAcquire::Queue::QItem *Itm = NULL;
+ if (URI.empty() == false)
+ Itm = OwnerQ->FindItem(URI,this);
+
+ if (Itm != NULL)
+ {
+ // update used mirror
+ string UsedMirror = LookupTag(Message,"UsedMirror", "");
+ if (UsedMirror.empty() == false)
+ {
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
+ (*O)->UsedMirror = UsedMirror;
+
+ if (Itm->Description.find(" ") != string::npos)
+ Itm->Description.replace(0, Itm->Description.find(" "), UsedMirror);
+ }
+ }
+
+ // Determine the message number and dispatch
+ switch (Number)
+ {
+ case MessageType::CAPABILITIES:
+ if (Capabilities(Message) == false)
+ return _error->Error("Unable to process Capabilities message from %s",Access.c_str());
+ break;
+
+ case MessageType::LOG:
+ if (Debug == true)
+ clog << " <- (log) " << LookupTag(Message,"Message") << endl;
+ break;
+
+ case MessageType::STATUS:
+ Status = LookupTag(Message,"Message");
+ break;
+
+ case MessageType::REDIRECT:
+ {
+ if (Itm == nullptr)
+ {
+ _error->Error("Method gave invalid 103 Redirect message");
+ break;
+ }
+
+ std::string const NewURI = LookupTag(Message,"New-URI",URI.c_str());
+ Itm->URI = NewURI;
+ auto const AltUris = VectorizeString(LookupTag(Message, "Alternate-URIs"), '\n');
+
+ ItemDone();
+
+ // Change the status so that it can be dequeued
+ for (auto const &O: Itm->Owners)
+ O->Status = pkgAcquire::Item::StatIdle;
+ // Mark the item as done (taking care of all queues)
+ // and then put it in the main queue again
+ std::vector<Item*> const ItmOwners = Itm->Owners;
+ OwnerQ->ItemDone(Itm);
+ Itm = nullptr;
+ for (auto const &Owner: ItmOwners)
+ {
+ for (auto alt = AltUris.crbegin(); alt != AltUris.crend(); ++alt)
+ Owner->PushAlternativeURI(std::string(*alt), {}, false);
+
+ pkgAcquire::ItemDesc &desc = Owner->GetItemDesc();
+ // for a simplified retry a method might redirect without URI change
+ // see also IsRedirectionLoop implementation
+ if (desc.URI != NewURI)
+ {
+ auto newuri = NewURI;
+ if (Owner->IsGoodAlternativeURI(newuri) == false && Owner->PopAlternativeURI(newuri) == false)
+ newuri.clear();
+ if (newuri.empty() || Owner->IsRedirectionLoop(newuri))
+ {
+ std::string msg = Message;
+ msg.append("\nFailReason: RedirectionLoop");
+ Owner->Failed(msg, Config);
+ if (Log != nullptr)
+ Log->Fail(Owner->GetItemDesc());
+ continue;
+ }
+
+ if (Log != nullptr)
+ Log->Done(desc);
+
+ ChangeSiteIsMirrorChange(NewURI, desc, Owner);
+ desc.URI = NewURI;
+ }
+ if (isDoomedItem(Owner) == false)
+ OwnerQ->Owner->Enqueue(desc);
+ }
+ break;
+ }
+
+ case MessageType::WARNING:
+ _error->Warning("%s: %s", Itm ? Itm->Owner ? Itm->Owner->DescURI().c_str() : Access.c_str() : Access.c_str(), LookupTag(Message, "Message").c_str());
+ break;
+
+ case MessageType::URI_START:
+ {
+ if (Itm == nullptr)
+ {
+ _error->Error("Method gave invalid 200 URI Start message");
+ break;
+ }
+
+ CurrentItem = Itm;
+ CurrentSize = 0;
+ TotalSize = strtoull(LookupTag(Message,"Size","0").c_str(), NULL, 10);
+ ResumePoint = strtoull(LookupTag(Message,"Resume-Point","0").c_str(), NULL, 10);
+ for (auto const Owner: Itm->Owners)
+ {
+ Owner->Start(Message, TotalSize);
+ // Display update before completion
+ if (Log != nullptr)
+ {
+ if (Log->MorePulses == true)
+ Log->Pulse(Owner->GetOwner());
+ Log->Fetch(Owner->GetItemDesc());
+ }
+ }
+
+ break;
+ }
+
+ case MessageType::URI_DONE:
+ {
+ if (Itm == nullptr)
+ {
+ _error->Error("Method gave invalid 201 URI Done message");
+ break;
+ }
+
+ PrepareFiles("201::URIDone", Itm);
+
+ // Display update before completion
+ if (Log != 0 && Log->MorePulses == true)
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
+ Log->Pulse((*O)->GetOwner());
+
+ HashStringList ReceivedHashes;
+ {
+ std::string const givenfilename = LookupTag(Message, "Filename");
+ std::string const filename = givenfilename.empty() ? Itm->Owner->DestFile : givenfilename;
+ // see if we got hashes to verify
+ ReceivedHashes = GetHashesFromMessage("", Message);
+ // not all methods always sent Hashes our way
+ if (ReceivedHashes.usable() == false)
+ {
+ HashStringList const ExpectedHashes = Itm->GetExpectedHashes();
+ if (ExpectedHashes.usable() == true && RealFileExists(filename))
+ {
+ Hashes calc(ExpectedHashes);
+ FileFd file(filename, FileFd::ReadOnly, FileFd::None);
+ calc.AddFD(file);
+ ReceivedHashes = calc.GetHashStringList();
+ }
+ }
+
+ // only local files can refer other filenames and counting them as fetched would be unfair
+ if (Log != NULL && Itm->Owner->Complete == false && Itm->Owner->Local == false && givenfilename == filename)
+ Log->Fetched(ReceivedHashes.FileSize(),atoi(LookupTag(Message,"Resume-Point","0").c_str()));
+ }
+
+ std::vector<Item*> const ItmOwners = Itm->Owners;
+ OwnerQ->ItemDone(Itm);
+ Itm = NULL;
+
+ bool const isIMSHit = StringToBool(LookupTag(Message,"IMS-Hit"),false) ||
+ StringToBool(LookupTag(Message,"Alt-IMS-Hit"),false);
+ auto const forcedHash = _config->Find("Acquire::ForceHash");
+ for (auto const Owner: ItmOwners)
+ {
+ HashStringList const ExpectedHashes = Owner->GetExpectedHashes();
+ if(_config->FindB("Debug::pkgAcquire::Auth", false) == true)
+ {
+ std::clog << "201 URI Done: " << Owner->DescURI() << endl
+ << "ReceivedHash:" << endl;
+ for (HashStringList::const_iterator hs = ReceivedHashes.begin(); hs != ReceivedHashes.end(); ++hs)
+ std::clog << "\t- " << hs->toStr() << std::endl;
+ std::clog << "ExpectedHash:" << endl;
+ for (HashStringList::const_iterator hs = ExpectedHashes.begin(); hs != ExpectedHashes.end(); ++hs)
+ std::clog << "\t- " << hs->toStr() << std::endl;
+ std::clog << endl;
+ }
+
+ // decide if what we got is what we expected
+ bool consideredOkay = false;
+ if ((forcedHash.empty() && ExpectedHashes.empty() == false) ||
+ (forcedHash.empty() == false && ExpectedHashes.usable()))
+ {
+ if (ReceivedHashes.empty())
+ {
+ /* IMS-Hits can't be checked here as we will have uncompressed file,
+ but the hashes for the compressed file. What we have was good through
+ so all we have to ensure later is that we are not stalled. */
+ consideredOkay = isIMSHit;
+ }
+ else if (ReceivedHashes == ExpectedHashes)
+ consideredOkay = true;
+ else
+ consideredOkay = false;
+
+ }
+ else
+ consideredOkay = !Owner->HashesRequired();
+
+ if (consideredOkay == true)
+ consideredOkay = Owner->VerifyDone(Message, Config);
+ else // hashsum mismatch
+ Owner->Status = pkgAcquire::Item::StatAuthError;
+
+
+ if (consideredOkay == true)
+ {
+ if (isDoomedItem(Owner) == false)
+ Owner->Done(Message, ReceivedHashes, Config);
+ if (Log != nullptr)
+ {
+ if (isIMSHit)
+ Log->IMSHit(Owner->GetItemDesc());
+ else
+ Log->Done(Owner->GetItemDesc());
+ }
+ }
+ else
+ {
+ auto SavedDesc = Owner->GetItemDesc();
+ if (isDoomedItem(Owner) == false)
+ {
+ if (Message.find("\nFailReason:") == std::string::npos)
+ {
+ if (ReceivedHashes != ExpectedHashes)
+ Message.append("\nFailReason: HashSumMismatch");
+ else
+ Message.append("\nFailReason: WeakHashSums");
+ }
+ Owner->Failed(Message,Config);
+ }
+ if (Log != nullptr)
+ Log->Fail(SavedDesc);
+ }
+ }
+ ItemDone();
+ break;
+ }
+
+ case MessageType::AUX_REQUEST:
+ {
+ if (Itm == nullptr)
+ {
+ _error->Error("Method gave invalid Aux Request message");
+ break;
+ }
+ else if (Config->GetAuxRequests() == false)
+ {
+ std::vector<Item *> const ItmOwners = Itm->Owners;
+ Message.append("\nMessage: Method tried to make an Aux Request while not being allowed to do them");
+ OwnerQ->ItemDone(Itm);
+ Itm = nullptr;
+ HandleFailure(ItmOwners, Config, Log, Message, false, false);
+ ItemDone();
+
+ std::string Msg = "600 URI Acquire\n";
+ Msg.reserve(200);
+ Msg += "URI: " + LookupTag(Message, "Aux-URI", "");
+ Msg += "\nFilename: /nonexistent/auxrequest.blocked";
+ Msg += "\n\n";
+ if (Debug == true)
+ clog << " -> " << Access << ':' << QuoteString(Msg, "\n") << endl;
+ OutQueue += Msg;
+ OutReady = true;
+ break;
+ }
+
+ auto maxsizestr = LookupTag(Message, "MaximumSize", "");
+ unsigned long long const MaxSize = maxsizestr.empty() ? 0 : strtoull(maxsizestr.c_str(), nullptr, 10);
+ new pkgAcqAuxFile(Itm->Owner, this, LookupTag(Message, "Aux-ShortDesc", ""),
+ LookupTag(Message, "Aux-Description", ""), LookupTag(Message, "Aux-URI", ""),
+ GetHashesFromMessage("Aux-", Message), MaxSize);
+ break;
+ }
+
+ case MessageType::URI_FAILURE:
+ {
+ if (Itm == nullptr)
+ {
+ std::string const msg = LookupTag(Message,"Message");
+ _error->Error("Method gave invalid 400 URI Failure message: %s", msg.c_str());
+ break;
+ }
+
+ PrepareFiles("400::URIFailure", Itm);
+
+ // Display update before completion
+ if (Log != nullptr && Log->MorePulses == true)
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
+ Log->Pulse((*O)->GetOwner());
+
+ std::vector<Item*> const ItmOwners = Itm->Owners;
+ OwnerQ->ItemDone(Itm);
+ Itm = nullptr;
+
+ bool errTransient = false, errAuthErr = false;
+ if (StringToBool(LookupTag(Message, "Transient-Failure"), false) == true)
+ errTransient = true;
+ else
+ {
+ std::string const failReason = LookupTag(Message, "FailReason");
+ {
+ auto const reasons = { "Timeout", "ConnectionRefused",
+ "ConnectionTimedOut", "ResolveFailure", "TmpResolveFailure" };
+ errTransient = std::find(std::begin(reasons), std::end(reasons), failReason) != std::end(reasons);
+ }
+ if (errTransient == false)
+ {
+ auto const reasons = { "HashSumMismatch", "WeakHashSums", "MaximumSizeExceeded" };
+ errAuthErr = std::find(std::begin(reasons), std::end(reasons), failReason) != std::end(reasons);
+ }
+ }
+ HandleFailure(ItmOwners, Config, Log, Message, errTransient, errAuthErr);
+ ItemDone();
+
+ break;
+ }
+
+ case MessageType::GENERAL_FAILURE:
+ _error->Error("Method %s General failure: %s",Access.c_str(),LookupTag(Message,"Message").c_str());
+ break;
+
+ case MessageType::MEDIA_CHANGE:
+ MediaChange(Message);
+ break;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+void pkgAcquire::Worker::HandleFailure(std::vector<pkgAcquire::Item *> const &ItmOwners, /*{{{*/
+ pkgAcquire::MethodConfig *const Config, pkgAcquireStatus *const Log,
+ std::string const &Message, bool const errTransient, bool const errAuthErr)
+{
+ for (auto const Owner : ItmOwners)
+ {
+ std::string NewURI;
+ if (errTransient == true && Config->LocalOnly == false && Owner->ModifyRetries() != 0)
+ {
+ --Owner->ModifyRetries();
+ Owner->FailMessage(Message);
+ auto SavedDesc = Owner->GetItemDesc();
+ if (Log != nullptr)
+ Log->Fail(SavedDesc);
+ if (isDoomedItem(Owner) == false)
+ OwnerQ->Owner->Enqueue(SavedDesc);
+ }
+ else
+ {
+ if (errAuthErr)
+ Owner->RemoveAlternativeSite(URI::SiteOnly(Owner->GetItemDesc().URI));
+ if (Owner->PopAlternativeURI(NewURI))
+ {
+ Owner->FailMessage(Message);
+ auto &desc = Owner->GetItemDesc();
+ if (Log != nullptr)
+ Log->Fail(desc);
+ ChangeSiteIsMirrorChange(NewURI, desc, Owner);
+ desc.URI = NewURI;
+ if (isDoomedItem(Owner) == false)
+ OwnerQ->Owner->Enqueue(desc);
+ }
+ else
+ {
+ if (errAuthErr && Owner->GetExpectedHashes().empty() == false)
+ Owner->Status = pkgAcquire::Item::StatAuthError;
+ else if (errTransient)
+ Owner->Status = pkgAcquire::Item::StatTransientNetworkError;
+ auto SavedDesc = Owner->GetItemDesc();
+ if (isDoomedItem(Owner) == false)
+ Owner->Failed(Message, Config);
+ if (Log != nullptr)
+ Log->Fail(SavedDesc);
+ }
+ }
+ }
+}
+ /*}}}*/
+// Worker::Capabilities - 100 Capabilities handler /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses the capabilities message and dumps it into the configuration
+ structure. */
+bool pkgAcquire::Worker::Capabilities(string Message)
+{
+ if (Config == 0)
+ return true;
+
+ Config->Version = LookupTag(Message,"Version");
+ Config->SingleInstance = StringToBool(LookupTag(Message,"Single-Instance"),false);
+ Config->Pipeline = StringToBool(LookupTag(Message,"Pipeline"),false);
+ Config->SendConfig = StringToBool(LookupTag(Message,"Send-Config"),false);
+ Config->LocalOnly = StringToBool(LookupTag(Message,"Local-Only"),false);
+ Config->NeedsCleanup = StringToBool(LookupTag(Message,"Needs-Cleanup"),false);
+ Config->Removable = StringToBool(LookupTag(Message,"Removable"),false);
+ Config->SetAuxRequests(StringToBool(LookupTag(Message, "AuxRequests"), false));
+
+ // Some debug text
+ if (Debug == true)
+ {
+ clog << "Configured access method " << Config->Access << endl;
+ clog << "Version:" << Config->Version << " SingleInstance:" << Config->SingleInstance << " Pipeline:" << Config->Pipeline << " SendConfig:" << Config->SendConfig << " LocalOnly: " << Config->LocalOnly << " NeedsCleanup: " << Config->NeedsCleanup << " Removable: " << Config->Removable << " AuxRequests: " << Config->GetAuxRequests() << endl;
+ }
+
+ return true;
+}
+ /*}}}*/
+// Worker::MediaChange - Request a media change /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgAcquire::Worker::MediaChange(string Message)
+{
+ int status_fd = _config->FindI("APT::Status-Fd",-1);
+ if(status_fd > 0)
+ {
+ string Media = LookupTag(Message,"Media");
+ string Drive = LookupTag(Message,"Drive");
+ ostringstream msg,status;
+ ioprintf(msg,_("Please insert the disc labeled: "
+ "'%s' "
+ "in the drive '%s' and press [Enter]."),
+ Media.c_str(),Drive.c_str());
+ status << "media-change: " // message
+ << Media << ":" // media
+ << Drive << ":" // drive
+ << msg.str() // l10n message
+ << endl;
+
+ std::string const dlstatus = status.str();
+ FileFd::Write(status_fd, dlstatus.c_str(), dlstatus.size());
+ }
+
+ if (Log == 0 || Log->MediaChange(LookupTag(Message,"Media"),
+ LookupTag(Message,"Drive")) == false)
+ {
+ char S[300];
+ snprintf(S,sizeof(S),"603 Media Changed\nFailed: true\n\n");
+ if (Debug == true)
+ clog << " -> " << Access << ':' << QuoteString(S,"\n") << endl;
+ OutQueue += S;
+ OutReady = true;
+ return true;
+ }
+
+ char S[300];
+ snprintf(S,sizeof(S),"603 Media Changed\n\n");
+ if (Debug == true)
+ clog << " -> " << Access << ':' << QuoteString(S,"\n") << endl;
+ OutQueue += S;
+ OutReady = true;
+ return true;
+}
+ /*}}}*/
+// Worker::SendConfiguration - Send the config to the method /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgAcquire::Worker::SendConfiguration()
+{
+ if (Config->SendConfig == false)
+ return true;
+
+ if (OutFd == -1)
+ return false;
+
+ /* Write out all of the configuration directives by walking the
+ configuration tree */
+ std::ostringstream Message;
+ Message << "601 Configuration\n";
+ _config->Dump(Message, NULL, "Config-Item: %F=%V\n", false);
+ Message << '\n';
+
+ if (Debug == true)
+ clog << " -> " << Access << ':' << QuoteString(Message.str(),"\n") << endl;
+ OutQueue += Message.str();
+ OutReady = true;
+
+ return true;
+}
+ /*}}}*/
+// Worker::QueueItem - Add an item to the outbound queue /*{{{*/
+// ---------------------------------------------------------------------
+/* Send a URI Acquire message to the method */
+bool pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem *Item)
+{
+ if (OutFd == -1)
+ return false;
+
+ if (isDoomedItem(Item->Owner))
+ return true;
+
+ Item->SyncDestinationFiles();
+
+ string Message = "600 URI Acquire\n";
+ Message.reserve(300);
+ Message += "URI: " + Item->URI;
+ Message += "\nFilename: " + Item->Owner->DestFile;
+
+ URI URL = Item->URI;
+ // FIXME: We should not hard code proxy protocols here.
+ if (URL.Access == "http" || URL.Access == "https")
+ {
+ AutoDetectProxy(URL);
+ if (_config->Exists("Acquire::" + URL.Access + "::proxy::" + URL.Host))
+ {
+ Message += "\nProxy: " + _config->Find("Acquire::" + URL.Access + "::proxy::" + URL.Host);
+ }
+ }
+
+ HashStringList const hsl = Item->GetExpectedHashes();
+ for (HashStringList::const_iterator hs = hsl.begin(); hs != hsl.end(); ++hs)
+ Message += "\nExpected-" + hs->HashType() + ": " + hs->HashValue();
+
+ Message += Item->Custom600Headers();
+
+ if (hsl.FileSize() == 0 && Message.find("\nMaximum-Size: ") == std::string::npos)
+ {
+ unsigned long long FileSize = Item->GetMaximumSize();
+ if(FileSize > 0)
+ {
+ string MaximumSize;
+ strprintf(MaximumSize, "%llu", FileSize);
+ Message += "\nMaximum-Size: " + MaximumSize;
+ }
+ }
+
+ Message += "\n\n";
+
+ if (RealFileExists(Item->Owner->DestFile))
+ {
+ std::string const SandboxUser = _config->Find("APT::Sandbox::User");
+ ChangeOwnerAndPermissionOfFile("Item::QueueURI", Item->Owner->DestFile.c_str(),
+ SandboxUser.c_str(), ROOT_GROUP, 0600);
+ }
+
+ if (Debug == true)
+ clog << " -> " << Access << ':' << QuoteString(Message,"\n") << endl;
+ OutQueue += Message;
+ OutReady = true;
+
+ return true;
+}
+ /*}}}*/
+// Worker::ReplyAux - reply to an aux request from this worker /*{{{*/
+bool pkgAcquire::Worker::ReplyAux(pkgAcquire::ItemDesc const &Item)
+{
+ if (OutFd == -1)
+ return false;
+
+ if (isDoomedItem(Item.Owner))
+ return true;
+
+ string Message = "600 URI Acquire\n";
+ Message.reserve(200);
+ Message += "URI: " + Item.URI;
+ if (RealFileExists(Item.Owner->DestFile))
+ {
+ if (Item.Owner->Status == pkgAcquire::Item::StatDone)
+ {
+ std::string const SandboxUser = _config->Find("APT::Sandbox::User");
+ ChangeOwnerAndPermissionOfFile("Worker::ReplyAux", Item.Owner->DestFile.c_str(),
+ SandboxUser.c_str(), ROOT_GROUP, 0600);
+ Message += "\nFilename: " + Item.Owner->DestFile;
+ }
+ else
+ {
+ // we end up here in case we would need root-rights to delete a file,
+ // but we run the command as non-root… (yes, it is unlikely)
+ Message += "\nFilename: " + flCombine("/nonexistent", Item.Owner->DestFile);
+ }
+ }
+ else
+ Message += "\nFilename: " + Item.Owner->DestFile;
+ Message += "\n\n";
+
+ if (Debug == true)
+ clog << " -> " << Access << ':' << QuoteString(Message, "\n") << endl;
+ OutQueue += Message;
+ OutReady = true;
+
+ return true;
+}
+ /*}}}*/
+// Worker::OutFdRead - Out bound FD is ready /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgAcquire::Worker::OutFdReady()
+{
+ int Res;
+ do
+ {
+ Res = write(OutFd,OutQueue.c_str(),OutQueue.length());
+ }
+ while (Res < 0 && errno == EINTR);
+
+ if (Res <= 0)
+ return MethodFailure();
+
+ OutQueue.erase(0,Res);
+ if (OutQueue.empty() == true)
+ OutReady = false;
+
+ return true;
+}
+ /*}}}*/
+// Worker::InFdRead - In bound FD is ready /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgAcquire::Worker::InFdReady()
+{
+ if (ReadMessages() == false)
+ return false;
+ RunMessages();
+ return true;
+}
+ /*}}}*/
+// Worker::MethodFailure - Called when the method fails /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called when the method is believed to have failed, probably because
+ read returned -1. */
+bool pkgAcquire::Worker::MethodFailure()
+{
+ _error->Error("Method %s has died unexpectedly!",Access.c_str());
+
+ // do not reap the child here to show meaningful error to the user
+ ExecWait(Process,Access.c_str(),false);
+ Process = -1;
+ close(InFd);
+ close(OutFd);
+ InFd = -1;
+ OutFd = -1;
+ OutReady = false;
+ InReady = false;
+ OutQueue = string();
+ MessageQueue.erase(MessageQueue.begin(),MessageQueue.end());
+
+ return false;
+}
+ /*}}}*/
+// Worker::Pulse - Called periodically /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcquire::Worker::Pulse()
+{
+ if (CurrentItem == 0)
+ return;
+
+ struct stat Buf;
+ if (stat(CurrentItem->Owner->DestFile.c_str(),&Buf) != 0)
+ return;
+ CurrentSize = Buf.st_size;
+}
+ /*}}}*/
+// Worker::ItemDone - Called when the current item is finished /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcquire::Worker::ItemDone()
+{
+ CurrentItem = 0;
+ CurrentSize = 0;
+ TotalSize = 0;
+ Status = string();
+}
+ /*}}}*/
+void pkgAcquire::Worker::PrepareFiles(char const * const caller, pkgAcquire::Queue::QItem const * const Itm)/*{{{*/
+{
+ if (RealFileExists(Itm->Owner->DestFile))
+ {
+ ChangeOwnerAndPermissionOfFile(caller, Itm->Owner->DestFile.c_str(), "root", ROOT_GROUP, 0644);
+ std::string const filename = Itm->Owner->DestFile;
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
+ {
+ pkgAcquire::Item const * const Owner = *O;
+ if (Owner->DestFile == filename || filename == "/dev/null")
+ continue;
+ RemoveFile("PrepareFiles", Owner->DestFile);
+ if (link(filename.c_str(), Owner->DestFile.c_str()) != 0)
+ {
+ // different mounts can't happen for us as we download to lists/ by default,
+ // but if the system is reused by others the locations can potentially be on
+ // different disks, so use symlink as poor-men replacement.
+ // FIXME: Real copying as last fallback, but that is costly, so offload to a method preferable
+ if (symlink(filename.c_str(), Owner->DestFile.c_str()) != 0)
+ _error->Error("Can't create (sym)link of file %s to %s", filename.c_str(), Owner->DestFile.c_str());
+ }
+ }
+ }
+ else
+ {
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
+ RemoveFile("PrepareFiles", (*O)->DestFile);
+ }
+}
+ /*}}}*/
diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h
new file mode 100644
index 0000000..11e54b0
--- /dev/null
+++ b/apt-pkg/acquire-worker.h
@@ -0,0 +1,339 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Worker - Worker process manager
+
+ Each worker class is associated with exactly one subprocess.
+
+ ##################################################################### */
+ /*}}}*/
+
+/** \addtogroup acquire
+ * @{
+ *
+ * \file acquire-worker.h
+ */
+
+#ifndef PKGLIB_ACQUIRE_WORKER_H
+#define PKGLIB_ACQUIRE_WORKER_H
+
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/weakptr.h>
+
+#include <string>
+#include <vector>
+#include <sys/types.h>
+
+/** \brief A fetch subprocess.
+ *
+ * A worker process is responsible for one stage of the fetch. This
+ * class encapsulates the communications protocol between the master
+ * process and the worker, from the master end.
+ *
+ * Each worker is intrinsically placed on two linked lists. The
+ * Queue list (maintained in the #NextQueue variable) is maintained
+ * by the pkgAcquire::Queue class; it represents the set of workers
+ * assigned to a particular queue. The Acquire list (maintained in
+ * the #NextAcquire variable) is maintained by the pkgAcquire class;
+ * it represents the set of active workers for a particular
+ * pkgAcquire object.
+ *
+ * \todo Like everything else in the Acquire system, this has way too
+ * many protected items.
+ *
+ * \sa pkgAcqMethod, pkgAcquire::Item, pkgAcquire
+ */
+class pkgAcquire::Worker : public WeakPointable
+{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ friend class pkgAcquire;
+
+ protected:
+ friend class Queue;
+
+ /** \brief The next link on the Queue list.
+ *
+ * \todo This is always NULL; is it just for future use?
+ */
+ Worker *NextQueue;
+
+ /** \brief The next link on the Acquire list. */
+ Worker *NextAcquire;
+
+ /** \brief The Queue with which this worker is associated. */
+ Queue *OwnerQ;
+
+ /** \brief The download progress indicator to which progress
+ * messages should be sent.
+ */
+ pkgAcquireStatus *Log;
+
+ /** \brief The configuration of this method. On startup, the
+ * target of this pointer is filled in with basic data about the
+ * method, as reported by the worker.
+ */
+ MethodConfig *Config;
+
+ /** \brief The access method to be used by this worker.
+ *
+ * \todo Doesn't this duplicate Config->Access?
+ */
+ std::string Access;
+
+ /** \brief The PID of the subprocess. */
+ pid_t Process;
+
+ /** \brief A file descriptor connected to the standard output of
+ * the subprocess.
+ *
+ * Used to read messages and data from the subprocess.
+ */
+ int InFd;
+
+ /** \brief A file descriptor connected to the standard input of the
+ * subprocess.
+ *
+ * Used to send commands and configuration data to the subprocess.
+ */
+ int OutFd;
+
+ /** \brief The socket to send SCM_RIGHTS message through
+ */
+ int PrivSepSocketFd;
+ int PrivSepSocketFdChild;
+
+ /** \brief Set to \b true if the worker is in a state in which it
+ * might generate data or command responses.
+ *
+ * \todo Is this right? It's a guess.
+ */
+ bool InReady;
+
+ /** \brief Set to \b true if the worker is in a state in which it
+ * is legal to send commands to it.
+ *
+ * \todo Is this right?
+ */
+ bool OutReady;
+
+ /** If \b true, debugging output will be sent to std::clog. */
+ bool Debug;
+
+ /** \brief The raw text values of messages received from the
+ * worker, in sequence.
+ */
+ std::vector<std::string> MessageQueue;
+
+ /** \brief Buffers pending writes to the subprocess.
+ *
+ * \todo Wouldn't a std::dequeue be more appropriate?
+ */
+ std::string OutQueue;
+
+ /** \brief Common code for the constructor.
+ *
+ * Initializes NextQueue and NextAcquire to NULL; Process, InFd,
+ * and OutFd to -1, OutReady and InReady to \b false, and Debug
+ * from _config.
+ */
+ void Construct();
+
+ /** \brief Retrieve any available messages from the subprocess.
+ *
+ * The messages are retrieved as in \link strutl.h ReadMessages()\endlink, and
+ * #MethodFailure() is invoked if an error occurs; in particular,
+ * if the pipe to the subprocess dies unexpectedly while a message
+ * is being read.
+ *
+ * \return \b true if the messages were successfully read, \b
+ * false otherwise.
+ */
+ bool ReadMessages();
+
+ /** \brief Parse and dispatch pending messages.
+ *
+ * This dispatches the message in a manner appropriate for its
+ * type.
+ *
+ * \todo Several message types lack separate handlers.
+ *
+ * \sa Capabilities(), SendConfiguration(), MediaChange()
+ */
+ bool RunMessages();
+
+ /** \brief Read and dispatch any pending messages from the
+ * subprocess.
+ *
+ * \return \b false if the subprocess died unexpectedly while a
+ * message was being transmitted.
+ */
+ bool InFdReady();
+
+ /** \brief Send any pending commands to the subprocess.
+ *
+ * This method will fail if there is no pending output.
+ *
+ * \return \b true if all commands were succeeded, \b false if an
+ * error occurred (in which case MethodFailure() will be invoked).
+ */
+ bool OutFdReady();
+
+ /** \brief Handle a 100 Capabilities response from the subprocess.
+ *
+ * \param Message the raw text of the message from the subprocess.
+ *
+ * The message will be parsed and its contents used to fill
+ * #Config. If #Config is NULL, this routine is a NOP.
+ *
+ * \return \b true.
+ */
+ bool Capabilities(std::string Message);
+
+ /** \brief Send a 601 Configuration message (containing the APT
+ * configuration) to the subprocess.
+ *
+ * The APT configuration will be send to the subprocess in a
+ * message of the following form:
+ *
+ * <pre>
+ * 601 Configuration
+ * Config-Item: Fully-Qualified-Item=Val
+ * Config-Item: Fully-Qualified-Item=Val
+ * ...
+ * </pre>
+ *
+ * \return \b true if the command was successfully sent, \b false
+ * otherwise.
+ */
+ bool SendConfiguration();
+
+ /** \brief Handle a 403 Media Change message.
+ *
+ * \param Message the raw text of the message; the Media field
+ * indicates what type of media should be changed, and the Drive
+ * field indicates where the media is located.
+ *
+ * Invokes pkgAcquireStatus::MediaChange(Media, Drive) to ask the
+ * user to swap disks; informs the subprocess of the result (via
+ * 603 Media Changed, with the Failed field set to \b true if the
+ * user cancelled the media change).
+ */
+ bool MediaChange(std::string Message);
+
+ /** \brief Invoked when the worked process dies unexpectedly.
+ *
+ * Waits for the subprocess to terminate and generates an error if
+ * it terminated abnormally, then closes and blanks out all file
+ * descriptors. Discards all pending messages from the
+ * subprocess.
+ *
+ * \return \b false.
+ */
+ bool MethodFailure();
+
+ /** \brief Invoked when a fetch job is completed, either
+ * successfully or unsuccessfully.
+ *
+ * Resets the status information for the worker process.
+ */
+ void ItemDone();
+
+ public:
+
+ /** \brief The queue entry that is currently being downloaded. */
+ pkgAcquire::Queue::QItem *CurrentItem;
+
+ /** \brief The most recent status string received from the
+ * subprocess.
+ */
+ std::string Status;
+
+ /** \brief How many bytes of the file have been downloaded. Zero
+ * if the current progress of the file cannot be determined.
+ */
+ unsigned long long CurrentSize;
+
+ /** \brief The total number of bytes to be downloaded. Zero if the
+ * total size of the final is unknown.
+ */
+ unsigned long long TotalSize;
+
+ /** \brief How much of the file was already downloaded prior to
+ * starting this worker.
+ */
+ unsigned long long ResumePoint;
+
+ /** \brief Tell the subprocess to download the given item.
+ *
+ * \param Item the item to queue up.
+ * \return \b true if the item was successfully enqueued.
+ *
+ * Queues up a 600 URI Acquire message for the given item to be
+ * sent at the next possible moment. Does \e not flush the output
+ * queue.
+ */
+ bool QueueItem(pkgAcquire::Queue::QItem *Item);
+ APT_HIDDEN bool ReplyAux(pkgAcquire::ItemDesc const &Item);
+
+ /** \brief Start up the worker and fill in #Config.
+ *
+ * Reads the first message from the worker, which is assumed to be
+ * a 100 Capabilities message.
+ *
+ * \return \b true if all operations completed successfully.
+ */
+ bool Start();
+
+ /** \brief Update the worker statistics (CurrentSize, TotalSize,
+ * etc).
+ */
+ void Pulse();
+
+ /** \return The fetch method configuration. */
+ inline const MethodConfig *GetConf() const {return Config;};
+
+ /** \brief Create a new Worker to download files.
+ *
+ * \param OwnerQ The queue into which this worker should be
+ * placed.
+ *
+ * \param Config A location in which to store information about
+ * the fetch method.
+ *
+ * \param Log The download progress indicator that should be used
+ * to report the progress of this worker.
+ */
+ Worker(Queue *OwnerQ,MethodConfig *Config,pkgAcquireStatus *Log);
+
+ /** \brief Create a new Worker that should just retrieve
+ * information about the fetch method.
+ *
+ * Nothing in particular forces you to refrain from actually
+ * downloading stuff, but the various status callbacks won't be
+ * invoked.
+ *
+ * \param Config A location in which to store information about
+ * the fetch method.
+ */
+ explicit Worker(MethodConfig *Config);
+
+ /** \brief Clean up this worker.
+ *
+ * Closes the file descriptors; if MethodConfig::NeedsCleanup is
+ * \b false, also rudely interrupts the worker with a SIGINT.
+ */
+ virtual ~Worker();
+
+private:
+ APT_HIDDEN void PrepareFiles(char const * const caller, pkgAcquire::Queue::QItem const * const Itm);
+ APT_HIDDEN void HandleFailure(std::vector<pkgAcquire::Item *> const &ItmOwners,
+ pkgAcquire::MethodConfig *const Config, pkgAcquireStatus *const Log,
+ std::string const &Message, bool const errTransient, bool const errAuthErr);
+};
+
+/** @} */
+
+#endif
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc
new file mode 100644
index 0000000..541785b
--- /dev/null
+++ b/apt-pkg/acquire.cc
@@ -0,0 +1,1486 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire - File Acquiration
+
+ The core element for the schedule system is the concept of a named
+ queue. Each queue is unique and each queue has a name derived from the
+ URI. The degree of paralization can be controlled by how the queue
+ name is derived from the URI.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire-worker.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <chrono>
+#include <iomanip>
+#include <iostream>
+#include <memory>
+#include <numeric>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <cmath>
+
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/select.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// Acquire::pkgAcquire - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* We grab some runtime state from the configuration space */
+pkgAcquire::pkgAcquire() : LockFD(-1), d(NULL), Queues(0), Workers(0), Configs(0), Log(NULL), ToFetch(0),
+ Debug(_config->FindB("Debug::pkgAcquire",false)),
+ Running(false)
+{
+ Initialize();
+}
+pkgAcquire::pkgAcquire(pkgAcquireStatus *Progress) : LockFD(-1), d(NULL), Queues(0), Workers(0),
+ Configs(0), Log(NULL), ToFetch(0),
+ Debug(_config->FindB("Debug::pkgAcquire",false)),
+ Running(false)
+{
+ Initialize();
+ SetLog(Progress);
+}
+void pkgAcquire::Initialize()
+{
+ string const Mode = _config->Find("Acquire::Queue-Mode","host");
+ if (strcasecmp(Mode.c_str(),"host") == 0)
+ QueueMode = QueueHost;
+ if (strcasecmp(Mode.c_str(),"access") == 0)
+ QueueMode = QueueAccess;
+}
+ /*}}}*/
+// Acquire::GetLock - lock directory and prepare for action /*{{{*/
+static bool SetupAPTPartialDirectory(std::string const &grand, std::string const &parent, std::string const &postfix, mode_t const mode)
+{
+ if (_config->FindB("Debug::SetupAPTPartialDirectory::AssumeGood", false))
+ return true;
+ std::string const partial = parent + postfix;
+ bool const partialExists = DirectoryExists(partial);
+ if (partialExists == false)
+ {
+ mode_t const old_umask = umask(S_IWGRP | S_IWOTH);
+ bool const creation_fail = (CreateAPTDirectoryIfNeeded(grand, partial) == false &&
+ CreateAPTDirectoryIfNeeded(parent, partial) == false);
+ umask(old_umask);
+ if (creation_fail == true)
+ return false;
+ }
+
+ std::string const SandboxUser = _config->Find("APT::Sandbox::User");
+ if (getuid() == 0)
+ {
+ if (SandboxUser.empty() == false && SandboxUser != "root") // if we aren't root, we can't chown, so don't try it
+ {
+ struct passwd const * const pw = getpwnam(SandboxUser.c_str());
+ struct group const * const gr = getgrnam(ROOT_GROUP);
+ if (pw != NULL && gr != NULL)
+ {
+ // chown the partial dir
+ if(chown(partial.c_str(), pw->pw_uid, gr->gr_gid) != 0)
+ _error->WarningE("SetupAPTPartialDirectory", "chown to %s:root of directory %s failed", SandboxUser.c_str(), partial.c_str());
+ }
+ }
+ if (chmod(partial.c_str(), mode) != 0)
+ _error->WarningE("SetupAPTPartialDirectory", "chmod 0700 of directory %s failed", partial.c_str());
+
+ }
+ else if (chmod(partial.c_str(), mode) != 0)
+ {
+ // if we haven't created the dir and aren't root, it is kinda expected that chmod doesn't work
+ if (partialExists == false)
+ _error->WarningE("SetupAPTPartialDirectory", "chmod 0700 of directory %s failed", partial.c_str());
+ }
+
+ _error->PushToStack();
+ // remove 'old' FAILED files to stop us from collecting them for no reason
+ for (auto const &Failed: GetListOfFilesInDir(partial, "FAILED", false, false))
+ RemoveFile("SetupAPTPartialDirectory", Failed);
+ _error->RevertToStack();
+
+ return true;
+}
+bool pkgAcquire::Setup(pkgAcquireStatus *Progress, string const &Lock)
+{
+ Log = Progress;
+ if (Lock.empty())
+ {
+ string const listDir = _config->FindDir("Dir::State::lists");
+ if (SetupAPTPartialDirectory(_config->FindDir("Dir::State"), listDir, "partial", 0700) == false)
+ return _error->Errno("Acquire", _("List directory %s is missing."), (listDir + "partial").c_str());
+ if (SetupAPTPartialDirectory(_config->FindDir("Dir::State"), listDir, "auxfiles", 0755) == false)
+ {
+ // not being able to create lists/auxfiles isn't critical as we will use a tmpdir then
+ }
+ string const archivesDir = _config->FindDir("Dir::Cache::Archives");
+ if (SetupAPTPartialDirectory(_config->FindDir("Dir::Cache"), archivesDir, "partial", 0700) == false)
+ return _error->Errno("Acquire", _("Archives directory %s is missing."), (archivesDir + "partial").c_str());
+ return true;
+ }
+ return GetLock(Lock);
+}
+bool pkgAcquire::GetLock(std::string const &Lock)
+{
+ if (Lock.empty() == true)
+ return false;
+
+ // check for existence and possibly create auxiliary directories
+ string const listDir = _config->FindDir("Dir::State::lists");
+ string const archivesDir = _config->FindDir("Dir::Cache::Archives");
+
+ if (Lock == listDir)
+ {
+ if (SetupAPTPartialDirectory(_config->FindDir("Dir::State"), listDir, "partial", 0700) == false)
+ return _error->Errno("Acquire", _("List directory %s is missing."), (listDir + "partial").c_str());
+ }
+ if (Lock == archivesDir)
+ {
+ if (SetupAPTPartialDirectory(_config->FindDir("Dir::Cache"), archivesDir, "partial", 0700) == false)
+ return _error->Errno("Acquire", _("Archives directory %s is missing."), (archivesDir + "partial").c_str());
+ }
+ if (Lock == listDir || Lock == archivesDir)
+ {
+ if (SetupAPTPartialDirectory(_config->FindDir("Dir::State"), listDir, "auxfiles", 0755) == false)
+ {
+ // not being able to create lists/auxfiles isn't critical as we will use a tmpdir then
+ }
+ }
+
+ if (_config->FindB("Debug::NoLocking", false) == true)
+ return true;
+
+ // Lock the directory this acquire object will work in
+ if (LockFD != -1)
+ close(LockFD);
+ LockFD = ::GetLock(flCombine(Lock, "lock"));
+ if (LockFD == -1)
+ return _error->Error(_("Unable to lock directory %s"), Lock.c_str());
+
+ return true;
+}
+ /*}}}*/
+// Acquire::~pkgAcquire - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Free our memory, clean up the queues (destroy the workers) */
+pkgAcquire::~pkgAcquire()
+{
+ Shutdown();
+
+ if (LockFD != -1)
+ close(LockFD);
+
+ while (Configs != 0)
+ {
+ MethodConfig *Jnk = Configs;
+ Configs = Configs->Next;
+ delete Jnk;
+ }
+}
+ /*}}}*/
+// Acquire::Shutdown - Clean out the acquire object /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcquire::Shutdown()
+{
+ while (Items.empty() == false)
+ {
+ if (Items[0]->Status == Item::StatFetching)
+ Items[0]->Status = Item::StatError;
+ delete Items[0];
+ }
+
+ while (Queues != 0)
+ {
+ Queue *Jnk = Queues;
+ Queues = Queues->Next;
+ delete Jnk;
+ }
+}
+ /*}}}*/
+// Acquire::Add - Add a new item /*{{{*/
+// ---------------------------------------------------------------------
+/* This puts an item on the acquire list. This list is mainly for tracking
+ item status */
+void pkgAcquire::Add(Item *Itm)
+{
+ Items.push_back(Itm);
+}
+ /*}}}*/
+// Acquire::Remove - Remove a item /*{{{*/
+// ---------------------------------------------------------------------
+/* Remove an item from the acquire list. This is usually not used.. */
+void pkgAcquire::Remove(Item *Itm)
+{
+ Dequeue(Itm);
+
+ for (ItemIterator I = Items.begin(); I != Items.end();)
+ {
+ if (*I == Itm)
+ {
+ Items.erase(I);
+ I = Items.begin();
+ }
+ else
+ ++I;
+ }
+}
+ /*}}}*/
+// Acquire::Add - Add a worker /*{{{*/
+// ---------------------------------------------------------------------
+/* A list of workers is kept so that the select loop can direct their FD
+ usage. */
+void pkgAcquire::Add(Worker *Work)
+{
+ Work->NextAcquire = Workers;
+ Workers = Work;
+}
+ /*}}}*/
+// Acquire::Remove - Remove a worker /*{{{*/
+// ---------------------------------------------------------------------
+/* A worker has died. This can not be done while the select loop is running
+ as it would require that RunFds could handling a changing list state and
+ it can't.. */
+void pkgAcquire::Remove(Worker *Work)
+{
+ if (Running == true)
+ abort();
+
+ Worker **I = &Workers;
+ for (; *I != 0;)
+ {
+ if (*I == Work)
+ *I = (*I)->NextAcquire;
+ else
+ I = &(*I)->NextAcquire;
+ }
+}
+ /*}}}*/
+// Acquire::Enqueue - Queue an URI for fetching /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the entry point for an item. An item calls this function when
+ it is constructed which creates a queue (based on the current queue
+ mode) and puts the item in that queue. If the system is running then
+ the queue might be started. */
+static bool CheckForBadItemAndFailIt(pkgAcquire::Item * const Item,
+ pkgAcquire::MethodConfig const * const Config, pkgAcquireStatus * const Log)
+{
+ auto SavedDesc = Item->GetItemDesc();
+ if (Item->IsRedirectionLoop(SavedDesc.URI))
+ {
+ std::string const Message = "400 URI Failure"
+ "\nURI: " + SavedDesc.URI +
+ "\nFilename: " + Item->DestFile +
+ "\nFailReason: RedirectionLoop";
+
+ Item->Status = pkgAcquire::Item::StatError;
+ Item->Failed(Message, Config);
+ if (Log != nullptr)
+ Log->Fail(SavedDesc);
+ return true;
+ }
+
+ HashStringList const hsl = Item->GetExpectedHashes();
+ if (hsl.usable() == false && Item->HashesRequired() &&
+ _config->Exists("Acquire::ForceHash") == false)
+ {
+ std::string const Message = "400 URI Failure"
+ "\nURI: " + SavedDesc.URI +
+ "\nFilename: " + Item->DestFile +
+ "\nFailReason: WeakHashSums";
+
+ Item->Status = pkgAcquire::Item::StatAuthError;
+ Item->Failed(Message, Config);
+ if (Log != nullptr)
+ Log->Fail(SavedDesc);
+ return true;
+ }
+ return false;
+}
+void pkgAcquire::Enqueue(ItemDesc &Item)
+{
+ // Determine which queue to put the item in
+ const MethodConfig *Config;
+ string Name = QueueName(Item.URI,Config);
+ if (Name.empty() == true)
+ {
+ Item.Owner->Status = pkgAcquire::Item::StatError;
+ return;
+ }
+
+ /* the check for running avoids that we produce errors
+ in logging before we actually have started, which would
+ be easier to implement but would confuse users/implementations
+ so we check the items skipped here in #Startup */
+ if (Running && CheckForBadItemAndFailIt(Item.Owner, Config, Log))
+ return;
+
+ // Find the queue structure
+ Queue *I = Queues;
+ for (; I != 0 && I->Name != Name; I = I->Next);
+ if (I == 0)
+ {
+ I = new Queue(Name,this);
+ I->Next = Queues;
+ Queues = I;
+
+ if (Running == true)
+ I->Startup();
+ }
+
+ // See if this is a local only URI
+ if (Config->LocalOnly == true && Item.Owner->Complete == false)
+ Item.Owner->Local = true;
+ Item.Owner->Status = Item::StatIdle;
+
+ // Queue it into the named queue
+ if(I->Enqueue(Item))
+ ToFetch++;
+
+ // Some trace stuff
+ if (Debug == true)
+ {
+ clog << "Fetching " << Item.URI << endl;
+ clog << " to " << Item.Owner->DestFile << endl;
+ clog << " Queue is: " << Name << endl;
+ }
+}
+ /*}}}*/
+// Acquire::Dequeue - Remove an item from all queues /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called when an item is finished being fetched. It removes it
+ from all the queues */
+void pkgAcquire::Dequeue(Item *Itm)
+{
+ Queue *I = Queues;
+ bool Res = false;
+ if (Debug == true)
+ clog << "Dequeuing " << Itm->DestFile << endl;
+
+ for (; I != 0; I = I->Next)
+ {
+ if (I->Dequeue(Itm))
+ {
+ Res = true;
+ if (Debug == true)
+ clog << "Dequeued from " << I->Name << endl;
+ }
+ }
+
+ if (Res == true)
+ ToFetch--;
+}
+ /*}}}*/
+// Acquire::QueueName - Return the name of the queue for this URI /*{{{*/
+// ---------------------------------------------------------------------
+/* The string returned depends on the configuration settings and the
+ method parameters. Given something like http://foo.org/bar it can
+ return http://foo.org or http */
+string pkgAcquire::QueueName(string Uri,MethodConfig const *&Config)
+{
+ URI U(Uri);
+
+ Config = GetConfig(U.Access);
+ if (Config == 0)
+ return string();
+
+ /* Single-Instance methods get exactly one queue per URI. This is
+ also used for the Access queue method */
+ if (Config->SingleInstance == true || QueueMode == QueueAccess)
+ return U.Access;
+
+ string AccessSchema = U.Access + ':';
+ string FullQueueName;
+
+ if (U.Host.empty())
+ {
+ long existing = 0;
+ // check how many queues exist already and reuse empty ones
+ for (Queue const *I = Queues; I != 0; I = I->Next)
+ if (I->Name.compare(0, AccessSchema.length(), AccessSchema) == 0)
+ {
+ if (I->Items == nullptr)
+ return I->Name;
+ ++existing;
+ }
+
+#ifdef _SC_NPROCESSORS_ONLN
+ long cpuCount = sysconf(_SC_NPROCESSORS_ONLN) * 2;
+#else
+ long cpuCount = 10;
+#endif
+ cpuCount = _config->FindI("Acquire::QueueHost::Limit", cpuCount);
+
+ if (cpuCount <= 0 || existing < cpuCount)
+ strprintf(FullQueueName, "%s%ld", AccessSchema.c_str(), existing);
+ else
+ {
+ long const randomQueue = random() % cpuCount;
+ strprintf(FullQueueName, "%s%ld", AccessSchema.c_str(), randomQueue);
+ }
+
+ if (Debug)
+ clog << "Chose random queue " << FullQueueName << " for " << Uri << endl;
+ } else
+ {
+ FullQueueName = AccessSchema + U.Host;
+ }
+ unsigned int Instances = 0, SchemaLength = AccessSchema.length();
+
+ Queue *I = Queues;
+ for (; I != 0; I = I->Next) {
+ // if the queue already exists, re-use it
+ if (I->Name == FullQueueName)
+ return FullQueueName;
+
+ if (I->Name.compare(0, SchemaLength, AccessSchema) == 0)
+ Instances++;
+ }
+
+ if (Debug) {
+ clog << "Found " << Instances << " instances of " << U.Access << endl;
+ }
+
+ if (Instances >= static_cast<decltype(Instances)>(_config->FindI("Acquire::QueueHost::Limit",10)))
+ return U.Access;
+
+ return FullQueueName;
+}
+ /*}}}*/
+// Acquire::GetConfig - Fetch the configuration information /*{{{*/
+// ---------------------------------------------------------------------
+/* This locates the configuration structure for an access method. If
+ a config structure cannot be found a Worker will be created to
+ retrieve it */
+pkgAcquire::MethodConfig *pkgAcquire::GetConfig(string Access)
+{
+ // Search for an existing config
+ MethodConfig *Conf;
+ for (Conf = Configs; Conf != 0; Conf = Conf->Next)
+ if (Conf->Access == Access)
+ return Conf;
+
+ // Create the new config class
+ Conf = new MethodConfig;
+ Conf->Access = Access;
+
+ // Create the worker to fetch the configuration
+ Worker Work(Conf);
+ if (Work.Start() == false)
+ {
+ delete Conf;
+ return nullptr;
+ }
+ Conf->Next = Configs;
+ Configs = Conf;
+
+ /* if a method uses DownloadLimit, we switch to SingleInstance mode */
+ if(_config->FindI("Acquire::"+Access+"::Dl-Limit",0) > 0)
+ Conf->SingleInstance = true;
+
+ return Conf;
+}
+ /*}}}*/
+// Acquire::SetFds - Deal with readable FDs /*{{{*/
+// ---------------------------------------------------------------------
+/* Collect FDs that have activity monitors into the fd sets */
+void pkgAcquire::SetFds(int &Fd,fd_set *RSet,fd_set *WSet)
+{
+ for (Worker *I = Workers; I != 0; I = I->NextAcquire)
+ {
+ if (I->InReady == true && I->InFd >= 0)
+ {
+ if (Fd < I->InFd)
+ Fd = I->InFd;
+ FD_SET(I->InFd,RSet);
+ }
+ if (I->OutReady == true && I->OutFd >= 0)
+ {
+ if (Fd < I->OutFd)
+ Fd = I->OutFd;
+ FD_SET(I->OutFd,WSet);
+ }
+ }
+}
+ /*}}}*/
+// Acquire::RunFds - compatibility remove on next abi/api break /*{{{*/
+void pkgAcquire::RunFds(fd_set *RSet,fd_set *WSet)
+{
+ RunFdsSane(RSet, WSet);
+}
+ /*}}}*/
+// Acquire::RunFdsSane - Deal with active FDs /*{{{*/
+// ---------------------------------------------------------------------
+/* Dispatch active FDs over to the proper workers. It is very important
+ that a worker never be erased while this is running! The queue class
+ should never erase a worker except during shutdown processing. */
+bool pkgAcquire::RunFdsSane(fd_set *RSet,fd_set *WSet)
+{
+ bool Res = true;
+
+ for (Worker *I = Workers; I != 0; I = I->NextAcquire)
+ {
+ if (I->InFd >= 0 && FD_ISSET(I->InFd,RSet) != 0)
+ Res &= I->InFdReady();
+ if (I->OutFd >= 0 && FD_ISSET(I->OutFd,WSet) != 0)
+ Res &= I->OutFdReady();
+ }
+
+ return Res;
+}
+ /*}}}*/
+// Acquire::Run - Run the fetch sequence /*{{{*/
+// ---------------------------------------------------------------------
+/* This runs the queues. It manages a select loop for all of the
+ Worker tasks. The workers interact with the queues and items to
+ manage the actual fetch. */
+static bool IsAccessibleBySandboxUser(std::string const &filename, bool const ReadWrite)
+{
+ // you would think this is easily to answer with faccessat, right? Wrong!
+ // It e.g. gets groups wrong, so the only thing which works reliable is trying
+ // to open the file we want to open later on…
+ if (unlikely(filename.empty()))
+ return true;
+
+ if (ReadWrite == false)
+ {
+ errno = 0;
+ // can we read a file? Note that non-existing files are "fine"
+ int const fd = open(filename.c_str(), O_RDONLY | O_CLOEXEC);
+ if (fd == -1 && errno == EACCES)
+ return false;
+ close(fd);
+ return true;
+ }
+ else
+ {
+ // the file might not exist yet and even if it does we will fix permissions,
+ // so important is here just that the directory it is in allows that
+ std::string const dirname = flNotFile(filename);
+ if (unlikely(dirname.empty()))
+ return true;
+
+ char const * const filetag = ".apt-acquire-privs-test.XXXXXX";
+ std::string const tmpfile_tpl = flCombine(dirname, filetag);
+ std::unique_ptr<char, decltype(std::free) *> tmpfile { strdup(tmpfile_tpl.c_str()), std::free };
+ int const fd = mkstemp(tmpfile.get());
+ if (fd == -1 && errno == EACCES)
+ return false;
+ RemoveFile("IsAccessibleBySandboxUser", tmpfile.get());
+ close(fd);
+ return true;
+ }
+}
+static void CheckDropPrivsMustBeDisabled(pkgAcquire const &Fetcher)
+{
+ if(getuid() != 0)
+ return;
+
+ std::string const SandboxUser = _config->Find("APT::Sandbox::User");
+ if (SandboxUser.empty() || SandboxUser == "root")
+ return;
+
+ struct passwd const * const pw = getpwnam(SandboxUser.c_str());
+ if (pw == NULL)
+ {
+ _error->Warning(_("No sandbox user '%s' on the system, can not drop privileges"), SandboxUser.c_str());
+ _config->Set("APT::Sandbox::User", "");
+ return;
+ }
+
+ gid_t const old_euid = geteuid();
+ gid_t const old_egid = getegid();
+
+ long const ngroups_max = sysconf(_SC_NGROUPS_MAX);
+ std::unique_ptr<gid_t[]> old_gidlist(new gid_t[ngroups_max]);
+ if (unlikely(old_gidlist == NULL))
+ return;
+ ssize_t old_gidlist_nr;
+ if ((old_gidlist_nr = getgroups(ngroups_max, old_gidlist.get())) < 0)
+ {
+ _error->FatalE("getgroups", "getgroups %lu failed", ngroups_max);
+ old_gidlist[0] = 0;
+ old_gidlist_nr = 1;
+ }
+ if (setgroups(1, &pw->pw_gid))
+ _error->FatalE("setgroups", "setgroups %u failed", pw->pw_gid);
+
+ if (setegid(pw->pw_gid) != 0)
+ _error->FatalE("setegid", "setegid %u failed", pw->pw_gid);
+ if (seteuid(pw->pw_uid) != 0)
+ _error->FatalE("seteuid", "seteuid %u failed", pw->pw_uid);
+
+ for (pkgAcquire::ItemCIterator I = Fetcher.ItemsBegin();
+ I != Fetcher.ItemsEnd(); ++I)
+ {
+ // no need to drop privileges for a complete file
+ if ((*I)->Complete == true || (*I)->Status != pkgAcquire::Item::StatIdle)
+ continue;
+
+ // if destination file is inaccessible all hope is lost for privilege dropping
+ if (IsAccessibleBySandboxUser((*I)->DestFile, true) == false)
+ {
+ _error->WarningE("pkgAcquire::Run", _("Download is performed unsandboxed as root as file '%s' couldn't be accessed by user '%s'."),
+ (*I)->DestFile.c_str(), SandboxUser.c_str());
+ _config->Set("APT::Sandbox::User", "");
+ break;
+ }
+
+ // if its the source file (e.g. local sources) we might be lucky
+ // by dropping the dropping only for some methods.
+ URI const source = (*I)->DescURI();
+ if (source.Access == "file" || source.Access == "copy")
+ {
+ std::string const conf = "Binary::" + source.Access + "::APT::Sandbox::User";
+ if (_config->Exists(conf) == true)
+ continue;
+
+ if (IsAccessibleBySandboxUser(source.Path, false) == false)
+ {
+ _error->NoticeE("pkgAcquire::Run", _("Download is performed unsandboxed as root as file '%s' couldn't be accessed by user '%s'."),
+ source.Path.c_str(), SandboxUser.c_str());
+ _config->CndSet("Binary::file::APT::Sandbox::User", "root");
+ _config->CndSet("Binary::copy::APT::Sandbox::User", "root");
+ }
+ }
+ }
+
+ if (seteuid(old_euid) != 0)
+ _error->FatalE("seteuid", "seteuid %u failed", old_euid);
+ if (setegid(old_egid) != 0)
+ _error->FatalE("setegid", "setegid %u failed", old_egid);
+ if (setgroups(old_gidlist_nr, old_gidlist.get()))
+ _error->FatalE("setgroups", "setgroups %u failed", 0);
+}
+pkgAcquire::RunResult pkgAcquire::Run(int PulseIntervall)
+{
+ _error->PushToStack();
+ CheckDropPrivsMustBeDisabled(*this);
+
+ Running = true;
+
+ for (Queue *I = Queues; I != 0; I = I->Next)
+ I->Startup();
+
+ if (Log != 0)
+ Log->Start();
+
+ bool WasCancelled = false;
+
+ // Run till all things have been acquired
+ struct timeval tv;
+ tv.tv_sec = 0;
+ tv.tv_usec = PulseIntervall;
+ while (ToFetch > 0)
+ {
+ fd_set RFds;
+ fd_set WFds;
+ int Highest = 0;
+ FD_ZERO(&RFds);
+ FD_ZERO(&WFds);
+ SetFds(Highest,&RFds,&WFds);
+
+ int Res;
+ do
+ {
+ Res = select(Highest+1,&RFds,&WFds,0,&tv);
+ }
+ while (Res < 0 && errno == EINTR);
+
+ if (Res < 0)
+ {
+ _error->Errno("select","Select has failed");
+ break;
+ }
+
+ if(RunFdsSane(&RFds,&WFds) == false)
+ break;
+
+ // Timeout, notify the log class
+ if (Res == 0 || (Log != 0 && Log->Update == true))
+ {
+ tv.tv_usec = PulseIntervall;
+ for (Worker *I = Workers; I != 0; I = I->NextAcquire)
+ I->Pulse();
+ if (Log != 0 && Log->Pulse(this) == false)
+ {
+ WasCancelled = true;
+ break;
+ }
+ }
+ }
+
+ if (Log != 0)
+ Log->Stop();
+
+ // Shut down the acquire bits
+ Running = false;
+ for (Queue *I = Queues; I != 0; I = I->Next)
+ I->Shutdown(false);
+
+ // Shut down the items
+ for (ItemIterator I = Items.begin(); I != Items.end(); ++I)
+ (*I)->Finished();
+
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ if (newError)
+ return Failed;
+ if (WasCancelled)
+ return Cancelled;
+ return Continue;
+}
+ /*}}}*/
+// Acquire::Bump - Called when an item is dequeued /*{{{*/
+// ---------------------------------------------------------------------
+/* This routine bumps idle queues in hopes that they will be able to fetch
+ the dequeued item */
+void pkgAcquire::Bump()
+{
+ for (Queue *I = Queues; I != 0; I = I->Next)
+ I->Bump();
+}
+ /*}}}*/
+// Acquire::WorkerStep - Step to the next worker /*{{{*/
+// ---------------------------------------------------------------------
+/* Not inlined to advoid including acquire-worker.h */
+pkgAcquire::Worker *pkgAcquire::WorkerStep(Worker *I)
+{
+ return I->NextAcquire;
+}
+ /*}}}*/
+// Acquire::Clean - Cleans a directory /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a bit simplistic, it looks at every file in the dir and sees
+ if it is part of the download set. */
+bool pkgAcquire::Clean(string Dir)
+{
+ // non-existing directories are by definition clean…
+ if (DirectoryExists(Dir) == false)
+ return true;
+
+ if(Dir == "/")
+ return _error->Error(_("Clean of %s is not supported"), Dir.c_str());
+
+ int const dirfd = open(Dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC);
+ if (dirfd == -1)
+ return _error->Errno("open",_("Unable to read %s"),Dir.c_str());
+ DIR * const D = fdopendir(dirfd);
+ if (D == nullptr)
+ return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
+
+ for (struct dirent *E = readdir(D); E != nullptr; E = readdir(D))
+ {
+ // Skip some entries
+ if (strcmp(E->d_name, "lock") == 0 ||
+ strcmp(E->d_name, "partial") == 0 ||
+ strcmp(E->d_name, "auxfiles") == 0 ||
+ strcmp(E->d_name, "lost+found") == 0 ||
+ strcmp(E->d_name, ".") == 0 ||
+ strcmp(E->d_name, "..") == 0)
+ continue;
+
+ // Look in the get list and if not found nuke
+ if (std::any_of(Items.cbegin(), Items.cend(),
+ [&E](pkgAcquire::Item const * const I) {
+ return flNotDir(I->DestFile) == E->d_name;
+ }) == false)
+ {
+ RemoveFileAt("pkgAcquire::Clean", dirfd, E->d_name);
+ }
+ }
+ closedir(D);
+ return true;
+}
+ /*}}}*/
+// Acquire::TotalNeeded - Number of bytes to fetch /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the total number of bytes needed */
+APT_PURE unsigned long long pkgAcquire::TotalNeeded()
+{
+ return std::accumulate(ItemsBegin(), ItemsEnd(), 0llu,
+ [](unsigned long long const T, Item const * const I) {
+ return T + I->FileSize;
+ });
+}
+ /*}}}*/
+// Acquire::FetchNeeded - Number of bytes needed to get /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the number of bytes that is not local */
+APT_PURE unsigned long long pkgAcquire::FetchNeeded()
+{
+ return std::accumulate(ItemsBegin(), ItemsEnd(), 0llu,
+ [](unsigned long long const T, Item const * const I) {
+ if (I->Local == false)
+ return T + I->FileSize;
+ else
+ return T;
+ });
+}
+ /*}}}*/
+// Acquire::PartialPresent - Number of partial bytes we already have /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the number of bytes that is not local */
+APT_PURE unsigned long long pkgAcquire::PartialPresent()
+{
+ return std::accumulate(ItemsBegin(), ItemsEnd(), 0llu,
+ [](unsigned long long const T, Item const * const I) {
+ if (I->Local == false)
+ return T + I->PartialSize;
+ else
+ return T;
+ });
+}
+ /*}}}*/
+// Acquire::UriBegin - Start iterator for the uri list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcquire::UriIterator pkgAcquire::UriBegin()
+{
+ return UriIterator(Queues);
+}
+ /*}}}*/
+// Acquire::UriEnd - End iterator for the uri list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcquire::UriIterator pkgAcquire::UriEnd()
+{
+ return UriIterator(0);
+}
+ /*}}}*/
+// Acquire::MethodConfig::MethodConfig - Constructor /*{{{*/
+class pkgAcquire::MethodConfig::Private
+{
+ public:
+ bool AuxRequests = false;
+};
+pkgAcquire::MethodConfig::MethodConfig() : d(new Private()), Next(0), SingleInstance(false),
+ Pipeline(false), SendConfig(false), LocalOnly(false), NeedsCleanup(false),
+ Removable(false)
+{
+}
+ /*}}}*/
+bool pkgAcquire::MethodConfig::GetAuxRequests() const /*{{{*/
+{
+ return d->AuxRequests;
+}
+ /*}}}*/
+void pkgAcquire::MethodConfig::SetAuxRequests(bool const value) /*{{{*/
+{
+ d->AuxRequests = value;
+}
+ /*}}}*/
+// Queue::Queue - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcquire::Queue::Queue(string const &name,pkgAcquire * const owner) : d(NULL), Next(0),
+ Name(name), Items(0), Workers(0), Owner(owner), PipeDepth(0), MaxPipeDepth(1)
+{
+}
+ /*}}}*/
+// Queue::~Queue - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcquire::Queue::~Queue()
+{
+ Shutdown(true);
+
+ while (Items != 0)
+ {
+ QItem *Jnk = Items;
+ Items = Items->Next;
+ delete Jnk;
+ }
+}
+ /*}}}*/
+// Queue::Enqueue - Queue an item to the queue /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgAcquire::Queue::Enqueue(ItemDesc &Item)
+{
+ // MetaKeysMatch checks whether the two items have no non-matching
+ // meta-keys. If the items are not transaction items, it returns
+ // true, so other items can still be merged.
+ auto MetaKeysMatch = [](pkgAcquire::ItemDesc const &A, pkgAcquire::Queue::QItem const *B) {
+ auto OwnerA = dynamic_cast<pkgAcqTransactionItem*>(A.Owner);
+ if (OwnerA == nullptr)
+ return true;
+
+ for (auto const & OwnerBUncast : B->Owners) {
+ auto OwnerB = dynamic_cast<pkgAcqTransactionItem*>(OwnerBUncast);
+
+ if (OwnerB != nullptr && OwnerA->GetMetaKey() != OwnerB->GetMetaKey())
+ return false;
+ }
+ return true;
+ };
+ QItem **OptimalI = &Items;
+ QItem **I = &Items;
+ // move to the end of the queue and check for duplicates here
+ for (; *I != 0; ) {
+ if (Item.URI == (*I)->URI && MetaKeysMatch(Item, *I))
+ {
+ if (_config->FindB("Debug::pkgAcquire::Worker",false) == true)
+ std::cerr << " @ Queue: Action combined for " << Item.URI << " and " << (*I)->URI << std::endl;
+ (*I)->Owners.push_back(Item.Owner);
+ Item.Owner->Status = (*I)->Owner->Status;
+ return false;
+ }
+ // Determine the optimal position to insert: before anything with a
+ // higher priority.
+ int priority = (*I)->GetPriority();
+
+ I = &(*I)->Next;
+ if (priority >= Item.Owner->Priority()) {
+ OptimalI = I;
+ }
+ }
+
+
+ // Create a new item
+ QItem *Itm = new QItem;
+ *Itm = Item;
+ Itm->Next = *OptimalI;
+ *OptimalI = Itm;
+
+ Item.Owner->QueueCounter++;
+ if (Items->Next == 0)
+ Cycle();
+ return true;
+}
+ /*}}}*/
+// Queue::Dequeue - Remove an item from the queue /*{{{*/
+// ---------------------------------------------------------------------
+/* We return true if we hit something */
+bool pkgAcquire::Queue::Dequeue(Item *Owner)
+{
+ if (Owner->Status == pkgAcquire::Item::StatFetching)
+ return _error->Error("Tried to dequeue a fetching object");
+
+ bool Res = false;
+
+ QItem **I = &Items;
+ for (; *I != 0;)
+ {
+ if (Owner == (*I)->Owner)
+ {
+ QItem *Jnk= *I;
+ *I = (*I)->Next;
+ Owner->QueueCounter--;
+ delete Jnk;
+ Res = true;
+ }
+ else
+ I = &(*I)->Next;
+ }
+
+ return Res;
+}
+ /*}}}*/
+// Queue::Startup - Start the worker processes /*{{{*/
+// ---------------------------------------------------------------------
+/* It is possible for this to be called with a pre-existing set of
+ workers. */
+bool pkgAcquire::Queue::Startup()
+{
+ if (Workers == 0)
+ {
+ URI U(Name);
+ pkgAcquire::MethodConfig * const Cnf = Owner->GetConfig(U.Access);
+ if (unlikely(Cnf == nullptr))
+ return false;
+
+ // now-running twin of the pkgAcquire::Enqueue call
+ for (QItem *I = Items; I != 0; )
+ {
+ auto const INext = I->Next;
+ for (auto &&O: I->Owners)
+ CheckForBadItemAndFailIt(O, Cnf, Owner->Log);
+ // if an item failed, it will be auto-dequeued invalidation our I here
+ I = INext;
+ }
+
+ Workers = new Worker(this,Cnf,Owner->Log);
+ Owner->Add(Workers);
+ if (Workers->Start() == false)
+ return false;
+
+ /* When pipelining we commit 10 items. This needs to change when we
+ added other source retry to have cycle maintain a pipeline depth
+ on its own. */
+ if (Cnf->Pipeline == true)
+ MaxPipeDepth = _config->FindI("Acquire::Max-Pipeline-Depth",10);
+ else
+ MaxPipeDepth = 1;
+ }
+
+ return Cycle();
+}
+ /*}}}*/
+// Queue::Shutdown - Shutdown the worker processes /*{{{*/
+// ---------------------------------------------------------------------
+/* If final is true then all workers are eliminated, otherwise only workers
+ that do not need cleanup are removed */
+bool pkgAcquire::Queue::Shutdown(bool Final)
+{
+ // Delete all of the workers
+ pkgAcquire::Worker **Cur = &Workers;
+ while (*Cur != 0)
+ {
+ pkgAcquire::Worker *Jnk = *Cur;
+ if (Final == true || Jnk->GetConf()->NeedsCleanup == false)
+ {
+ *Cur = Jnk->NextQueue;
+ Owner->Remove(Jnk);
+ delete Jnk;
+ }
+ else
+ Cur = &(*Cur)->NextQueue;
+ }
+
+ return true;
+}
+ /*}}}*/
+// Queue::FindItem - Find a URI in the item list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcquire::Queue::QItem *pkgAcquire::Queue::FindItem(string URI,pkgAcquire::Worker *Owner)
+{
+ for (QItem *I = Items; I != 0; I = I->Next)
+ if (I->URI == URI && I->Worker == Owner)
+ return I;
+ return 0;
+}
+ /*}}}*/
+// Queue::ItemDone - Item has been completed /*{{{*/
+// ---------------------------------------------------------------------
+/* The worker signals this which causes the item to be removed from the
+ queue. If this is the last queue instance then it is removed from the
+ main queue too.*/
+bool pkgAcquire::Queue::ItemDone(QItem *Itm)
+{
+ PipeDepth--;
+ for (QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
+ {
+ if ((*O)->Status == pkgAcquire::Item::StatFetching)
+ (*O)->Status = pkgAcquire::Item::StatDone;
+ }
+
+ if (Itm->Owner->QueueCounter <= 1)
+ Owner->Dequeue(Itm->Owner);
+ else
+ {
+ Dequeue(Itm->Owner);
+ Owner->Bump();
+ }
+
+ return Cycle();
+}
+ /*}}}*/
+// Queue::Cycle - Queue new items into the method /*{{{*/
+// ---------------------------------------------------------------------
+/* This locates a new idle item and sends it to the worker. If pipelining
+ is enabled then it keeps the pipe full. */
+bool pkgAcquire::Queue::Cycle()
+{
+ if (Items == 0 || Workers == 0)
+ return true;
+
+ if (PipeDepth < 0)
+ return _error->Error("Pipedepth failure");
+
+ // Look for a queable item
+ QItem *I = Items;
+ int ActivePriority = 0;
+ while (PipeDepth < static_cast<decltype(PipeDepth)>(MaxPipeDepth))
+ {
+ for (; I != 0; I = I->Next) {
+ if (I->Owner->Status == pkgAcquire::Item::StatFetching)
+ ActivePriority = std::max(ActivePriority, I->GetPriority());
+ if (I->Owner->Status == pkgAcquire::Item::StatIdle)
+ break;
+ }
+
+ // Nothing to do, queue is idle.
+ if (I == 0)
+ return true;
+
+ // This item has a lower priority than stuff in the pipeline, pretend
+ // the queue is idle
+ if (I->GetPriority() < ActivePriority)
+ return true;
+ I->Worker = Workers;
+ for (auto const &O: I->Owners)
+ O->Status = pkgAcquire::Item::StatFetching;
+ PipeDepth++;
+ if (Workers->QueueItem(I) == false)
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
+// Queue::Bump - Fetch any pending objects if we are idle /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called when an item in multiple queues is dequeued */
+void pkgAcquire::Queue::Bump()
+{
+ Cycle();
+}
+ /*}}}*/
+HashStringList pkgAcquire::Queue::QItem::GetExpectedHashes() const /*{{{*/
+{
+ /* each Item can have multiple owners and each owner might have different
+ hashes, even if that is unlikely in practice and if so at least some
+ owners will later fail. There is one situation through which is not a
+ failure and still needs this handling: Two owners who expect the same
+ file, but one owner only knows the SHA1 while the other only knows SHA256. */
+ HashStringList superhsl;
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Owners.begin(); O != Owners.end(); ++O)
+ {
+ HashStringList const hsl = (*O)->GetExpectedHashes();
+ // we merge both lists - if we find disagreement send no hashes
+ HashStringList::const_iterator hs = hsl.begin();
+ for (; hs != hsl.end(); ++hs)
+ if (superhsl.push_back(*hs) == false)
+ break;
+ if (hs != hsl.end())
+ {
+ superhsl.clear();
+ break;
+ }
+ }
+ return superhsl;
+}
+ /*}}}*/
+APT_PURE unsigned long long pkgAcquire::Queue::QItem::GetMaximumSize() const /*{{{*/
+{
+ unsigned long long Maximum = std::numeric_limits<unsigned long long>::max();
+ for (auto const &O: Owners)
+ {
+ if (O->FileSize == 0)
+ continue;
+ Maximum = std::min(Maximum, O->FileSize);
+ }
+ if (Maximum == std::numeric_limits<unsigned long long>::max())
+ return 0;
+ return Maximum;
+}
+ /*}}}*/
+APT_PURE int pkgAcquire::Queue::QItem::GetPriority() const /*{{{*/
+{
+ int Priority = 0;
+ for (auto const &O: Owners)
+ Priority = std::max(Priority, O->Priority());
+
+ return Priority;
+}
+ /*}}}*/
+void pkgAcquire::Queue::QItem::SyncDestinationFiles() const /*{{{*/
+{
+ /* ensure that the first owner has the best partial file of all and
+ the rest have (potentially dangling) symlinks to it so that
+ everything (like progress reporting) finds it easily */
+ std::string superfile = Owner->DestFile;
+ off_t supersize = 0;
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Owners.begin(); O != Owners.end(); ++O)
+ {
+ if ((*O)->DestFile == superfile)
+ continue;
+ struct stat file;
+ if (lstat((*O)->DestFile.c_str(),&file) == 0)
+ {
+ if ((file.st_mode & S_IFREG) == 0)
+ RemoveFile("SyncDestinationFiles", (*O)->DestFile);
+ else if (supersize < file.st_size)
+ {
+ supersize = file.st_size;
+ RemoveFile("SyncDestinationFiles", superfile);
+ rename((*O)->DestFile.c_str(), superfile.c_str());
+ }
+ else
+ RemoveFile("SyncDestinationFiles", (*O)->DestFile);
+ if (symlink(superfile.c_str(), (*O)->DestFile.c_str()) != 0)
+ {
+ ; // not a problem per-se and no real alternative
+ }
+ }
+ }
+}
+ /*}}}*/
+std::string pkgAcquire::Queue::QItem::Custom600Headers() const /*{{{*/
+{
+ /* The others are relatively easy to merge, but this one?
+ Lets not merge and see how far we can run with it…
+ Likely, nobody will ever notice as all the items will
+ be of the same class and hence generate the same headers. */
+ return Owner->Custom600Headers();
+}
+ /*}}}*/
+
+// AcquireStatus::pkgAcquireStatus - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgAcquireStatus::pkgAcquireStatus() : d(NULL), Percent(-1), Update(true), MorePulses(false)
+{
+ Start();
+}
+ /*}}}*/
+// AcquireStatus::Pulse - Called periodically /*{{{*/
+// ---------------------------------------------------------------------
+/* This computes some internal state variables for the derived classes to
+ use. It generates the current downloaded bytes and total bytes to download
+ as well as the current CPS estimate. */
+static struct timeval GetTimevalFromSteadyClock()
+{
+ auto const Time = std::chrono::steady_clock::now().time_since_epoch();
+ auto const Time_sec = std::chrono::duration_cast<std::chrono::seconds>(Time);
+ auto const Time_usec = std::chrono::duration_cast<std::chrono::microseconds>(Time - Time_sec);
+ return { Time_sec.count(), Time_usec.count() };
+}
+bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
+{
+ TotalBytes = 0;
+ CurrentBytes = 0;
+ TotalItems = 0;
+ CurrentItems = 0;
+
+ // Compute the total number of bytes to fetch
+ unsigned int Unknown = 0;
+ unsigned int Count = 0;
+ bool ExpectAdditionalItems = false;
+ for (pkgAcquire::ItemCIterator I = Owner->ItemsBegin();
+ I != Owner->ItemsEnd();
+ ++I, ++Count)
+ {
+ TotalItems++;
+ if ((*I)->Status == pkgAcquire::Item::StatDone)
+ ++CurrentItems;
+
+ // do we expect to acquire more files than we know of yet?
+ if ((*I)->ExpectedAdditionalItems > 0)
+ ExpectAdditionalItems = true;
+
+ TotalBytes += (*I)->FileSize;
+ if ((*I)->Complete == true)
+ CurrentBytes += (*I)->FileSize;
+ if ((*I)->FileSize == 0 && (*I)->Complete == false)
+ ++Unknown;
+ }
+
+ // Compute the current completion
+ unsigned long long ResumeSize = 0;
+ for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
+ I = Owner->WorkerStep(I))
+ {
+ if (I->CurrentItem != 0 && I->CurrentItem->Owner->Complete == false)
+ {
+ CurrentBytes += I->CurrentSize;
+ ResumeSize += I->ResumePoint;
+
+ // Files with unknown size always have 100% completion
+ if (I->CurrentItem->Owner->FileSize == 0 &&
+ I->CurrentItem->Owner->Complete == false)
+ TotalBytes += I->CurrentSize;
+ }
+ }
+
+ // Normalize the figures and account for unknown size downloads
+ if (TotalBytes <= 0)
+ TotalBytes = 1;
+ if (Unknown == Count)
+ TotalBytes = Unknown;
+
+ // Wha?! Is not supposed to happen.
+ if (CurrentBytes > TotalBytes)
+ CurrentBytes = TotalBytes;
+
+ // Compute the CPS
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+
+ if ((NewTime.tv_sec - Time.tv_sec == 6 && NewTime.tv_usec > Time.tv_usec) ||
+ NewTime.tv_sec - Time.tv_sec > 6)
+ {
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - Time.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_usec - Time.tv_usec);
+
+ // Compute the CPS value
+ if (Delta < std::chrono::milliseconds(10))
+ CurrentCPS = 0;
+ else
+ CurrentCPS = ((CurrentBytes - ResumeSize) - LastBytes)/ Delta.count();
+ LastBytes = CurrentBytes - ResumeSize;
+ ElapsedTime = llround(Delta.count());
+ Time = NewTime;
+ }
+
+ double const OldPercent = Percent;
+ // calculate the percentage, if we have too little data assume 1%
+ if (ExpectAdditionalItems)
+ Percent = 0;
+ else
+ // use both files and bytes because bytes can be unreliable
+ Percent = (0.8 * (CurrentBytes/double(TotalBytes)*100.0) +
+ 0.2 * (CurrentItems/double(TotalItems)*100.0));
+
+ // debug
+ if (_config->FindB("Debug::acquire::progress", false) == true)
+ {
+ std::clog
+ << "["
+ << std::setw(5) << std::setprecision(4) << std::showpoint << Percent
+ << "]"
+ << " Bytes: "
+ << SizeToStr(CurrentBytes) << " / " << SizeToStr(TotalBytes)
+ << " # Files: "
+ << CurrentItems << " / " << TotalItems
+ << std::endl;
+ }
+
+ double const DiffPercent = Percent - OldPercent;
+ if (DiffPercent < 0.001 && _config->FindB("Acquire::Progress::Diffpercent", false) == true)
+ return true;
+
+ int fd = _config->FindI("APT::Status-Fd",-1);
+ if(fd > 0)
+ {
+ ostringstream status;
+
+ unsigned long long ETA = 0;
+ if(CurrentCPS > 0 && TotalBytes > CurrentBytes)
+ ETA = (TotalBytes - CurrentBytes) / CurrentCPS;
+
+ std::string msg;
+ long i = CurrentItems < TotalItems ? CurrentItems + 1 : CurrentItems;
+ // only show the ETA if it makes sense
+ if (ETA > 0 && ETA < std::chrono::seconds(std::chrono::hours(24 * 2)).count())
+ strprintf(msg, _("Retrieving file %li of %li (%s remaining)"), i, TotalItems, TimeToStr(ETA).c_str());
+ else
+ strprintf(msg, _("Retrieving file %li of %li"), i, TotalItems);
+
+ // build the status str
+ std::ostringstream str;
+ str.imbue(std::locale::classic());
+ str.precision(4);
+ str << "dlstatus" << ':' << std::fixed << i << ':' << Percent << ':' << msg << '\n';
+ auto const dlstatus = str.str();
+ FileFd::Write(fd, dlstatus.data(), dlstatus.size());
+ }
+
+ return true;
+}
+ /*}}}*/
+// AcquireStatus::Start - Called when the download is started /*{{{*/
+// ---------------------------------------------------------------------
+/* We just reset the counters */
+void pkgAcquireStatus::Start()
+{
+ Time = StartTime = GetTimevalFromSteadyClock();
+ LastBytes = 0;
+ CurrentCPS = 0;
+ CurrentBytes = 0;
+ TotalBytes = 0;
+ FetchedBytes = 0;
+ ElapsedTime = 0;
+ TotalItems = 0;
+ CurrentItems = 0;
+}
+ /*}}}*/
+// AcquireStatus::Stop - Finished downloading /*{{{*/
+// ---------------------------------------------------------------------
+/* This accurately computes the elapsed time and the total overall CPS. */
+void pkgAcquireStatus::Stop()
+{
+ // Compute the CPS and elapsed time
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_usec - StartTime.tv_usec);
+
+ // Compute the CPS value
+ if (Delta < std::chrono::milliseconds(10))
+ CurrentCPS = 0;
+ else
+ CurrentCPS = FetchedBytes / Delta.count();
+ LastBytes = CurrentBytes;
+ ElapsedTime = llround(Delta.count());
+}
+ /*}}}*/
+// AcquireStatus::Fetched - Called when a byte set has been fetched /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to get accurate final transfer rate reporting. */
+void pkgAcquireStatus::Fetched(unsigned long long Size,unsigned long long Resume)
+{
+ FetchedBytes += Size - Resume;
+}
+ /*}}}*/
+bool pkgAcquireStatus::ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes)/*{{{*/
+{
+ auto const virt = dynamic_cast<pkgAcquireStatus2*>(this);
+ if (virt != nullptr)
+ return virt->ReleaseInfoChanges(LastRelease, CurrentRelease, std::move(Changes));
+ return ReleaseInfoChangesAsGlobalErrors(std::move(Changes));
+}
+ /*}}}*/
+bool pkgAcquireStatus::ReleaseInfoChangesAsGlobalErrors(std::vector<ReleaseInfoChange> &&Changes)/*{{{*/
+{
+ bool AllOkay = true;
+ for (auto const &c: Changes)
+ if (c.DefaultAction)
+ _error->Notice("%s", c.Message.c_str());
+ else
+ {
+ _error->Error("%s", c.Message.c_str());
+ AllOkay = false;
+ }
+ return AllOkay;
+}
+ /*}}}*/
+bool pkgAcquireStatus2::ReleaseInfoChanges(metaIndex const * const, metaIndex const * const, std::vector<ReleaseInfoChange> &&Changes)
+{
+ return ReleaseInfoChangesAsGlobalErrors(std::move(Changes));
+}
+pkgAcquireStatus2::pkgAcquireStatus2() : pkgAcquireStatus() {}
+pkgAcquireStatus2::~pkgAcquireStatus2() {}
+
+
+pkgAcquire::UriIterator::UriIterator(pkgAcquire::Queue *Q) : d(NULL), CurQ(Q), CurItem(0)
+{
+ while (CurItem == 0 && CurQ != 0)
+ {
+ CurItem = CurQ->Items;
+ CurQ = CurQ->Next;
+ }
+}
+
+pkgAcquire::UriIterator::~UriIterator() {}
+pkgAcquire::MethodConfig::~MethodConfig() {}
+pkgAcquireStatus::~pkgAcquireStatus() {}
diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h
new file mode 100644
index 0000000..1cf4da5
--- /dev/null
+++ b/apt-pkg/acquire.h
@@ -0,0 +1,886 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire - File Acquiration
+
+ This module contains the Acquire system. It is responsible for bringing
+ files into the local pathname space. It deals with URIs for files and
+ URI handlers responsible for downloading or finding the URIs.
+
+ Each file to download is represented by an Acquire::Item class subclassed
+ into a specialization. The Item class can add itself to several URI
+ acquire queues each prioritized by the download scheduler. When the
+ system is run the proper URI handlers are spawned and the acquire
+ queues are fed into the handlers by the schedular until the queues are
+ empty. This allows for an Item to be downloaded from an alternate source
+ if the first try turns out to fail. It also allows concurrent downloading
+ of multiple items from multiple sources as well as dynamic balancing
+ of load between the sources.
+
+ Schedualing of downloads is done on a first ask first get basis. This
+ preserves the order of the download as much as possible. And means the
+ fastest source will tend to process the largest number of files.
+
+ Internal methods and queues for performing gzip decompression,
+ md5sum hashing and file copying are provided to allow items to apply
+ a number of transformations to the data files they are working with.
+
+ ##################################################################### */
+ /*}}}*/
+
+/** \defgroup acquire Acquire system {{{
+ *
+ * \brief The Acquire system is responsible for retrieving files from
+ * local or remote URIs and postprocessing them (for instance,
+ * verifying their authenticity). The core class in this system is
+ * pkgAcquire, which is responsible for managing the download queues
+ * during the download. There is at least one download queue for
+ * each supported protocol; protocols such as http may provide one
+ * queue per host.
+ *
+ * Each file to download is represented by a subclass of
+ * pkgAcquire::Item. The files add themselves to the download
+ * queue(s) by providing their URI information to
+ * pkgAcquire::Item::QueueURI, which calls pkgAcquire::Enqueue.
+ *
+ * Once the system is set up, the Run method will spawn subprocesses
+ * to handle the enqueued URIs; the scheduler will then take items
+ * from the queues and feed them into the handlers until the queues
+ * are empty.
+ *
+ * \todo Acquire supports inserting an object into several queues at
+ * once, but it is not clear what its behavior in this case is, and
+ * no subclass of pkgAcquire::Item seems to actually use this
+ * capability.
+ */ /*}}}*/
+
+/** \addtogroup acquire
+ *
+ * @{
+ *
+ * \file acquire.h
+ */
+
+#ifndef PKGLIB_ACQUIRE_H
+#define PKGLIB_ACQUIRE_H
+
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/weakptr.h>
+
+#include <string>
+#include <vector>
+
+#include <stddef.h>
+#include <sys/select.h>
+#include <sys/time.h>
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <unistd.h>
+#endif
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+using std::string;
+#endif
+
+class pkgAcquireStatus;
+class metaIndex;
+
+/** \brief The core download scheduler. {{{
+ *
+ * This class represents an ongoing download. It manages the lists
+ * of active and pending downloads and handles setting up and tearing
+ * down download-related structures.
+ *
+ * \todo Why all the protected data items and methods?
+ */
+class pkgAcquire
+{
+ private:
+ /** \brief FD of the Lock file we acquire in Setup (if any) */
+ int LockFD;
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ public:
+
+ class Item;
+ class Queue;
+ class Worker;
+ struct MethodConfig;
+ struct ItemDesc;
+ friend class Item;
+ friend class pkgAcqMetaBase;
+ friend class Queue;
+
+ typedef std::vector<Item *>::iterator ItemIterator;
+ typedef std::vector<Item *>::const_iterator ItemCIterator;
+
+ protected:
+
+ /** \brief A list of items to download.
+ *
+ * This is built monotonically as items are created and only
+ * emptied when the download shuts down.
+ */
+ std::vector<Item *> Items;
+
+ /** \brief The head of the list of active queues.
+ *
+ * \todo why a hand-managed list of queues instead of std::list or
+ * std::set?
+ */
+ Queue *Queues;
+
+ /** \brief The head of the list of active workers.
+ *
+ * \todo why a hand-managed list of workers instead of std::list
+ * or std::set?
+ */
+ Worker *Workers;
+
+ /** \brief The head of the list of acquire method configurations.
+ *
+ * Each protocol (http, ftp, gzip, etc) via which files can be
+ * fetched can have a representation in this list. The
+ * configuration data is filled in by parsing the 100 Capabilities
+ * string output by a method on startup (see
+ * pkgAcqMethod::pkgAcqMethod and pkgAcquire::GetConfig).
+ *
+ * \todo why a hand-managed config dictionary instead of std::map?
+ */
+ MethodConfig *Configs;
+
+ /** \brief The progress indicator for this download. */
+ pkgAcquireStatus *Log;
+
+ /** \brief The number of files which are to be fetched. */
+ unsigned long ToFetch;
+
+ // Configurable parameters for the scheduler
+
+ /** \brief Represents the queuing strategy for remote URIs. */
+ enum QueueStrategy {
+ /** \brief Generate one queue for each protocol/host combination; downloads from
+ * multiple hosts can proceed in parallel.
+ */
+ QueueHost,
+ /** \brief Generate a single queue for each protocol; serialize
+ * downloads from multiple hosts.
+ */
+ QueueAccess} QueueMode;
+
+ /** \brief If \b true, debugging information will be dumped to std::clog. */
+ bool const Debug;
+ /** \brief If \b true, a download is currently in progress. */
+ bool Running;
+
+ /** \brief Add the given item to the list of items. */
+ void Add(Item *Item);
+
+ /** \brief Remove the given item from the list of items. */
+ void Remove(Item *Item);
+
+ /** \brief Add the given worker to the list of workers. */
+ void Add(Worker *Work);
+
+ /** \brief Remove the given worker from the list of workers. */
+ void Remove(Worker *Work);
+
+ /** \brief Insert the given fetch request into the appropriate queue.
+ *
+ * \param Item The URI to download and the item to download it
+ * for. Copied by value into the queue; no reference to Item is
+ * retained.
+ */
+ void Enqueue(ItemDesc &Item);
+
+ /** \brief Remove all fetch requests for this item from all queues. */
+ void Dequeue(Item *Item);
+
+ /** \brief Determine the fetch method and queue of a URI.
+ *
+ * \param URI The URI to fetch.
+ *
+ * \param[out] Config A location in which to place the method via
+ * which the URI is to be fetched.
+ *
+ * \return the string-name of the queue in which a fetch request
+ * for the given URI should be placed.
+ */
+ std::string QueueName(std::string URI,MethodConfig const *&Config);
+
+ /** \brief Build up the set of file descriptors upon which select() should
+ * block.
+ *
+ * The default implementation inserts the file descriptors
+ * corresponding to active downloads.
+ *
+ * \param[out] Fd The largest file descriptor in the generated sets.
+ *
+ * \param[out] RSet The set of file descriptors that should be
+ * watched for input.
+ *
+ * \param[out] WSet The set of file descriptors that should be
+ * watched for output.
+ */
+ virtual void SetFds(int &Fd,fd_set *RSet,fd_set *WSet);
+
+ /** Handle input from and output to file descriptors which select()
+ * has determined are ready. The default implementation
+ * dispatches to all active downloads.
+ *
+ * \param RSet The set of file descriptors that are ready for
+ * input.
+ *
+ * \param WSet The set of file descriptors that are ready for
+ * output.
+ *
+ * \return false if there is an error condition on one of the fds
+ */
+ bool RunFdsSane(fd_set *RSet,fd_set *WSet);
+
+ // just here for compatibility, needs to be removed on the next
+ // ABI/API break. RunFdsSane() is what should be used as it
+ // returns if there is an error condition on one of the fds
+ virtual void RunFds(fd_set *RSet,fd_set *WSet);
+
+ /** \brief Check for idle queues with ready-to-fetch items.
+ *
+ * Called by pkgAcquire::Queue::Done each time an item is dequeued
+ * but remains on some queues; i.e., another queue should start
+ * fetching it.
+ */
+ void Bump();
+
+ public:
+
+ /** \brief Retrieve information about a fetch method by name.
+ *
+ * \param Access The name of the method to look up.
+ *
+ * \return the method whose name is Access, or \b NULL if no such method exists.
+ */
+ MethodConfig *GetConfig(std::string Access);
+
+ /** \brief Provides information on how a download terminated. */
+ enum RunResult {
+ /** \brief All files were fetched successfully. */
+ Continue,
+
+ /** \brief Some files failed to download. */
+ Failed,
+
+ /** \brief The download was cancelled by the user (i.e., #Log's
+ * pkgAcquireStatus::Pulse() method returned \b false).
+ */
+ Cancelled};
+
+ /** \brief Download all the items that have been Add()ed to this
+ * download process.
+ *
+ * This method will block until the download completes, invoking
+ * methods on #Log to report on the progress of the download.
+ *
+ * \param PulseInterval The method pkgAcquireStatus::Pulse will be
+ * invoked on #Log at intervals of PulseInterval milliseconds.
+ *
+ * \return the result of the download.
+ */
+ RunResult Run(int PulseInterval=500000);
+
+ /** \brief Remove all items from this download process, terminate
+ * all download workers, and empty all queues.
+ */
+ void Shutdown();
+
+ /** \brief Get the first Worker object.
+ *
+ * \return the first active worker in this download process.
+ */
+ inline Worker *WorkersBegin() {return Workers;};
+
+ /** \brief Advance to the next Worker object.
+ *
+ * \return the worker immediately following I, or \b NULL if none
+ * exists.
+ */
+ Worker *WorkerStep(Worker *I) APT_PURE;
+
+ /** \brief Get the head of the list of items. */
+ inline ItemIterator ItemsBegin() {return Items.begin();};
+ inline ItemCIterator ItemsBegin() const {return Items.begin();};
+
+ /** \brief Get the end iterator of the list of items. */
+ inline ItemIterator ItemsEnd() {return Items.end();};
+ inline ItemCIterator ItemsEnd() const {return Items.end();};
+
+ // Iterate over queued Item URIs
+ class UriIterator;
+ /** \brief Get the head of the list of enqueued item URIs.
+ *
+ * This iterator will step over every element of every active
+ * queue.
+ */
+ UriIterator UriBegin();
+ /** \brief Get the end iterator of the list of enqueued item URIs. */
+ UriIterator UriEnd();
+
+ /** Deletes each entry in the given directory that is not being
+ * downloaded by this object. For instance, when downloading new
+ * list files, calling Clean() will delete the old ones.
+ *
+ * \param Dir The directory to be cleaned out.
+ *
+ * \return \b true if the directory exists and is readable.
+ */
+ bool Clean(std::string Dir);
+
+ /** \return the total size in bytes of all the items included in
+ * this download.
+ */
+ unsigned long long TotalNeeded();
+
+ /** \return the size in bytes of all non-local items included in
+ * this download.
+ */
+ unsigned long long FetchNeeded();
+
+ /** \return the amount of data to be fetched that is already
+ * present on the filesystem.
+ */
+ unsigned long long PartialPresent();
+
+ /** \brief Delayed constructor
+ *
+ * \param Progress indicator associated with this download or
+ * \b NULL for none. This object is not owned by the
+ * download process and will not be deleted when the pkgAcquire
+ * object is destroyed. Naturally, it should live for at least as
+ * long as the pkgAcquire object does.
+ * \param Lock defines a lock file that should be acquired to ensure
+ * only one Acquire class is in action at the time or an empty string
+ * if no lock file should be used. If set also all needed directories
+ * will be created.
+ */
+ APT_DEPRECATED_MSG("Use constructors, .SetLog and .GetLock as needed") bool Setup(pkgAcquireStatus *Progress = NULL, std::string const &Lock = "");
+
+ void SetLog(pkgAcquireStatus *Progress) { Log = Progress; }
+
+ /** \brief acquire lock and perform directory setup
+ *
+ * \param Lock defines a lock file that should be acquired to ensure
+ * only one Acquire class is in action at the time or an empty string
+ * if no lock file should be used. If set also all needed directories
+ * will be created and setup.
+ */
+ bool GetLock(std::string const &Lock);
+
+ /** \brief Construct a new pkgAcquire. */
+ explicit pkgAcquire(pkgAcquireStatus *Log);
+ pkgAcquire();
+
+ /** \brief Destroy this pkgAcquire object.
+ *
+ * Destroys all queue, method, and item objects associated with
+ * this download.
+ */
+ virtual ~pkgAcquire();
+
+ private:
+ APT_HIDDEN void Initialize();
+};
+
+/** \brief Represents a single download source from which an item
+ * should be downloaded.
+ *
+ * An item may have several associated ItemDescs over its lifetime.
+ */
+struct pkgAcquire::ItemDesc : public WeakPointable
+{
+ /** \brief URI from which to download this item. */
+ std::string URI;
+ /** \brief description of this item. */
+ std::string Description;
+ /** \brief shorter description of this item. */
+ std::string ShortDesc;
+ /** \brief underlying item which is to be downloaded. */
+ Item *Owner;
+};
+ /*}}}*/
+/** \brief A single download queue in a pkgAcquire object. {{{
+ *
+ * \todo Why so many protected values?
+ */
+class pkgAcquire::Queue
+{
+ friend class pkgAcquire;
+ friend class pkgAcquire::UriIterator;
+ friend class pkgAcquire::Worker;
+
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ /** \brief The next queue in the pkgAcquire object's list of queues. */
+ Queue *Next;
+
+ protected:
+
+ /** \brief A single item placed in this queue. */
+ struct QItem : public ItemDesc
+ {
+ /** \brief The next item in the queue. */
+ QItem *Next;
+ /** \brief The worker associated with this item, if any. */
+ pkgAcquire::Worker *Worker;
+
+ /** \brief The underlying items interested in the download */
+ std::vector<Item*> Owners;
+
+ typedef std::vector<Item*>::const_iterator owner_iterator;
+
+ /** \brief Assign the ItemDesc portion of this QItem from
+ * another ItemDesc
+ */
+ void operator =(pkgAcquire::ItemDesc const &I)
+ {
+ URI = I.URI;
+ Description = I.Description;
+ ShortDesc = I.ShortDesc;
+ Owners.clear();
+ Owners.push_back(I.Owner);
+ Owner = I.Owner;
+ };
+
+ /** @return the sum of all expected hashes by all owners */
+ HashStringList GetExpectedHashes() const;
+
+ /** @return smallest maximum size of all owners */
+ unsigned long long GetMaximumSize() const;
+
+ /** \brief get partial files in order */
+ void SyncDestinationFiles() const;
+
+ /** @return the custom headers to use for this item */
+ std::string Custom600Headers() const;
+ /** @return the maximum priority of this item */
+ int APT_HIDDEN GetPriority() const;
+ };
+
+ /** \brief The name of this queue. */
+ std::string Name;
+
+ /** \brief The head of the list of items contained in this queue.
+ *
+ * \todo why a by-hand list instead of an STL structure?
+ */
+ QItem *Items;
+
+ /** \brief The head of the list of workers associated with this queue.
+ *
+ * \todo This is plural because support exists in Queue for
+ * multiple workers. However, it does not appear that there is
+ * any way to actually associate more than one worker with a
+ * queue.
+ *
+ * \todo Why not just use a std::set?
+ */
+ pkgAcquire::Worker *Workers;
+
+ /** \brief the download scheduler with which this queue is associated. */
+ pkgAcquire *Owner;
+
+ /** \brief The number of entries in this queue that are currently
+ * being downloaded.
+ */
+ signed long PipeDepth;
+
+ /** \brief The maximum number of entries that this queue will
+ * attempt to download at once.
+ */
+ unsigned long MaxPipeDepth;
+
+ public:
+
+ /** \brief Insert the given fetch request into this queue.
+ *
+ * \return \b true if the queuing was successful. May return
+ * \b false if the Item is already in the queue
+ */
+ bool Enqueue(ItemDesc &Item);
+
+ /** \brief Remove all fetch requests for the given item from this queue.
+ *
+ * \return \b true if at least one request was removed from the queue.
+ */
+ bool Dequeue(Item *Owner);
+
+ /** \brief Locate an item in this queue.
+ *
+ * \param URI A URI to match against.
+ * \param Owner A pkgAcquire::Worker to match against.
+ *
+ * \return the first item in the queue whose URI is #URI and that
+ * is being downloaded by #Owner.
+ */
+ QItem *FindItem(std::string URI,pkgAcquire::Worker *Owner) APT_PURE;
+
+ /** Presumably this should start downloading an item?
+ *
+ * \todo Unimplemented. Implement it or remove?
+ */
+ bool ItemStart(QItem *Itm,unsigned long long Size);
+
+ /** \brief Remove the given item from this queue and set its state
+ * to pkgAcquire::Item::StatDone.
+ *
+ * If this is the only queue containing the item, the item is also
+ * removed from the main queue by calling pkgAcquire::Dequeue.
+ *
+ * \param Itm The item to remove.
+ *
+ * \return \b true if no errors are encountered.
+ */
+ bool ItemDone(QItem *Itm);
+
+ /** \brief Start the worker process associated with this queue.
+ *
+ * If a worker process is already associated with this queue,
+ * this is equivalent to calling Cycle().
+ *
+ * \return \b true if the startup was successful.
+ */
+ bool Startup();
+
+ /** \brief Shut down the worker process associated with this queue.
+ *
+ * \param Final If \b true, then the process is stopped unconditionally.
+ * Otherwise, it is only stopped if it does not need cleanup
+ * as indicated by the pkgAcqMethod::NeedsCleanup member of
+ * its configuration.
+ *
+ * \return \b true.
+ */
+ bool Shutdown(bool Final);
+
+ /** \brief Send idle items to the worker process.
+ *
+ * Fills up the pipeline by inserting idle items into the worker's queue.
+ */
+ bool Cycle();
+
+ /** \brief Check for items that could be enqueued.
+ *
+ * Call this after an item placed in multiple queues has gone from
+ * the pkgAcquire::Item::StatFetching state to the
+ * pkgAcquire::Item::StatIdle state, to possibly refill an empty queue.
+ * This is an alias for Cycle().
+ *
+ * \todo Why both this and Cycle()? Are they expected to be
+ * different someday?
+ */
+ void Bump();
+
+ /** \brief Create a new Queue.
+ *
+ * \param Name The name of the new queue.
+ * \param Owner The download process that owns the new queue.
+ */
+ Queue(std::string const &Name,pkgAcquire * const Owner);
+
+ /** Shut down all the worker processes associated with this queue
+ * and empty the queue.
+ */
+ virtual ~Queue();
+};
+ /*}}}*/
+/** \brief Iterates over all the URIs being fetched by a pkgAcquire object. {{{*/
+class pkgAcquire::UriIterator
+{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ /** The next queue to iterate over. */
+ pkgAcquire::Queue *CurQ;
+ /** The item that we currently point at. */
+ pkgAcquire::Queue::QItem *CurItem;
+
+ public:
+
+ inline void operator ++() {operator ++(0);};
+
+ void operator ++(int)
+ {
+ CurItem = CurItem->Next;
+ while (CurItem == 0 && CurQ != 0)
+ {
+ CurItem = CurQ->Items;
+ CurQ = CurQ->Next;
+ }
+ };
+
+ inline pkgAcquire::Queue::QItem const *operator ->() const {return CurItem;};
+ inline bool operator !=(UriIterator const &rhs) const {return rhs.CurQ != CurQ || rhs.CurItem != CurItem;};
+ inline bool operator ==(UriIterator const &rhs) const {return rhs.CurQ == CurQ && rhs.CurItem == CurItem;};
+
+ /** \brief Create a new UriIterator.
+ *
+ * \param Q The queue over which this UriIterator should iterate.
+ */
+ explicit UriIterator(pkgAcquire::Queue *Q);
+ virtual ~UriIterator();
+};
+ /*}}}*/
+/** \brief Information about the properties of a single acquire method. {{{*/
+struct pkgAcquire::MethodConfig
+{
+ class Private;
+ /** \brief dpointer placeholder (for later in case we need it) */
+ Private *const d;
+
+ /** \brief The next link on the acquire method list.
+ *
+ * \todo Why not an STL container?
+ */
+ MethodConfig *Next;
+
+ /** \brief The name of this acquire method (e.g., http). */
+ std::string Access;
+
+ /** \brief The implementation version of this acquire method. */
+ std::string Version;
+
+ /** \brief If \b true, only one download queue should be created for this
+ * method.
+ */
+ bool SingleInstance;
+
+ /** \brief If \b true, this method supports pipelined downloading. */
+ bool Pipeline;
+
+ /** \brief If \b true, the worker process should send the entire
+ * APT configuration tree to the fetch subprocess when it starts
+ * up.
+ */
+ bool SendConfig;
+
+ /** \brief If \b true, this fetch method does not require network access;
+ * all files are to be acquired from the local disk.
+ */
+ bool LocalOnly;
+
+ /** \brief If \b true, the subprocess has to carry out some cleanup
+ * actions before shutting down.
+ *
+ * For instance, the cdrom method needs to unmount the CD after it
+ * finishes.
+ */
+ bool NeedsCleanup;
+
+ /** \brief If \b true, this fetch method acquires files from removable media. */
+ bool Removable;
+
+ /** \brief Set up the default method parameters.
+ *
+ * All fields are initialized to NULL, "", or \b false as
+ * appropriate.
+ */
+ MethodConfig();
+
+ APT_HIDDEN bool GetAuxRequests() const;
+ APT_HIDDEN void SetAuxRequests(bool const value);
+
+ virtual ~MethodConfig();
+};
+ /*}}}*/
+/** \brief A monitor object for downloads controlled by the pkgAcquire class. {{{
+ *
+ * \todo Why protected members?
+ */
+class pkgAcquireStatus
+{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ protected:
+
+ /** \brief The last time at which this monitor object was updated. */
+ struct timeval Time;
+
+ /** \brief The time at which the download started. */
+ struct timeval StartTime;
+
+ /** \brief The number of bytes fetched as of the previous call to
+ * pkgAcquireStatus::Pulse, including local items.
+ */
+ unsigned long long LastBytes;
+
+ /** \brief The current rate of download as of the most recent call
+ * to pkgAcquireStatus::Pulse, in bytes per second.
+ */
+ unsigned long long CurrentCPS;
+
+ /** \brief The number of bytes fetched as of the most recent call
+ * to pkgAcquireStatus::Pulse, including local items.
+ */
+ unsigned long long CurrentBytes;
+
+ /** \brief The total number of bytes that need to be fetched.
+ *
+ * \warning This member is inaccurate, as new items might be
+ * enqueued while the download is in progress!
+ */
+ unsigned long long TotalBytes;
+
+ /** \brief The total number of bytes accounted for by items that
+ * were successfully fetched.
+ */
+ unsigned long long FetchedBytes;
+
+ /** \brief The amount of time that has elapsed since the download
+ * started.
+ */
+ unsigned long long ElapsedTime;
+
+ /** \brief The total number of items that need to be fetched.
+ *
+ * \warning This member is inaccurate, as new items might be
+ * enqueued while the download is in progress!
+ */
+ unsigned long TotalItems;
+
+ /** \brief The number of items that have been successfully downloaded. */
+ unsigned long CurrentItems;
+
+ /** \brief The estimated percentage of the download (0-100)
+ */
+ double Percent;
+
+ public:
+
+ /** \brief If \b true, the download scheduler should call Pulse()
+ * at the next available opportunity.
+ */
+ bool Update;
+
+ /** \brief If \b true, extra Pulse() invocations will be performed.
+ *
+ * With this option set, Pulse() will be called every time that a
+ * download item starts downloading, finishes downloading, or
+ * terminates with an error.
+ */
+ bool MorePulses;
+
+ /** \brief Invoked when a local or remote file has been completely fetched.
+ *
+ * \param Size The size of the file fetched.
+ *
+ * \param ResumePoint How much of the file was already fetched.
+ */
+ virtual void Fetched(unsigned long long Size,unsigned long long ResumePoint);
+
+ /** \brief Invoked when the user should be prompted to change the
+ * inserted removable media.
+ *
+ * This method should not return until the user has confirmed to
+ * the user interface that the media change is complete.
+ *
+ * \param Media The name of the media type that should be changed.
+ *
+ * \param Drive The identifying name of the drive whose media
+ * should be changed.
+ *
+ * \return \b true if the user confirms the media change, \b
+ * false if it is cancelled.
+ *
+ * \todo This is a horrible blocking monster; it should be CPSed
+ * with prejudice.
+ */
+ virtual bool MediaChange(std::string Media,std::string Drive) = 0;
+
+ struct ReleaseInfoChange
+ {
+ std::string Type; /*!< Type of the change like "Origin", "Codename", "Version", … */
+ std::string From; /*!< old value */
+ std::string To; /*!< new value */
+ std::string Message; /*!< translated message describing the change */
+ bool DefaultAction; /*!< true if the change is informational, false if it must be explicitly confirmed */
+ };
+ /** \brief ask the user for confirmation of changes to infos about a repository
+ *
+ * This method should present the user with a choice of accepting the change
+ * or not and indicate the user opinion via the return value. If DefaultAction is true
+ * it is acceptable to only notify the user about the change, but to accept the change
+ * automatically on behalf of the user.
+ *
+ * The default implementation will fail if any Change has DefaultAction == false. Regardless of
+ * success it will print for each change the message attached to it via GlobalError either as an
+ * error (if DefaultAction == false) or as a notice otherwise.
+ *
+ * \b Note: To keep ABI compatibility for now this method isn't marked as
+ * virtual, but you can derive your class from #pkgAcquireStatus2 which has it
+ * marked as virtual. TODO on next ABI break: merge both classes.
+ *
+ * @param LastRelease can be used to extract further information from the previous Release file
+ * @param CurrentRelease can be used to extract further information from the current Release file
+ * @param Changes is an array of changes alongside explanatory messages
+ * which should be presented in some way to the user.
+ * @return \b true if all changes are accepted by user, otherwise or if user can't be asked \b false
+ */
+ bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes);
+ APT_HIDDEN static bool ReleaseInfoChangesAsGlobalErrors(std::vector<ReleaseInfoChange> &&Changes);
+
+ /** \brief Invoked when an item is confirmed to be up-to-date.
+
+ * For instance, when an HTTP download is informed that the file on
+ * the server was not modified.
+ */
+ virtual void IMSHit(pkgAcquire::ItemDesc &/*Itm*/) {};
+
+ /** \brief Invoked when some of an item's data is fetched. */
+ virtual void Fetch(pkgAcquire::ItemDesc &/*Itm*/) {};
+
+ /** \brief Invoked when an item is successfully and completely fetched. */
+ virtual void Done(pkgAcquire::ItemDesc &/*Itm*/) {};
+
+ /** \brief Invoked when the process of fetching an item encounters
+ * a fatal error.
+ */
+ virtual void Fail(pkgAcquire::ItemDesc &/*Itm*/) {};
+
+ /** \brief Periodically invoked while the Acquire process is underway.
+ *
+ * Subclasses should first call pkgAcquireStatus::Pulse(), then
+ * update their status output. The download process is blocked
+ * while Pulse() is being called.
+ *
+ * \return \b false if the user asked to cancel the whole Acquire process.
+ *
+ * \see pkgAcquire::Run
+ */
+ virtual bool Pulse(pkgAcquire *Owner);
+
+ /** \brief Invoked when the Acquire process starts running. */
+ virtual void Start();
+
+ /** \brief Invoked when the Acquire process stops running. */
+ virtual void Stop();
+
+ /** \brief Initialize all counters to 0 and the time to the current time. */
+ pkgAcquireStatus();
+ virtual ~pkgAcquireStatus();
+};
+class pkgAcquireStatus2: public pkgAcquireStatus
+{
+public:
+ virtual bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes);
+
+ pkgAcquireStatus2();
+ virtual ~pkgAcquireStatus2();
+};
+ /*}}}*/
+/** @} */
+
+#endif
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
new file mode 100644
index 0000000..bb0e2f8
--- /dev/null
+++ b/apt-pkg/algorithms.cc
@@ -0,0 +1,1418 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Algorithms - A set of misc algorithms
+
+ The pkgProblemResolver class has become insanely complex and
+ very sophisticated, it handles every test case I have thrown at it
+ to my satisfaction. Understanding exactly why all the steps the class
+ does are required is difficult and changing though not very risky
+ may result in other cases not working.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/dpkgpm.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/prettyprinters.h>
+
+#include <cstdlib>
+#include <iostream>
+#include <string>
+#include <utility>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+class APT_HIDDEN pkgSimulatePrivate
+{
+public:
+ std::vector<pkgDPkgPM::Item> List;
+};
+// Simulate::Simulate - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* The legacy translations here of input Pkg iterators is obsolete,
+ this is not necessary since the pkgCaches are fully shared now. */
+pkgSimulate::pkgSimulate(pkgDepCache *Cache) : pkgPackageManager(Cache),
+ d(new pkgSimulatePrivate()), iPolicy(Cache),
+ Sim(&Cache->GetCache(),&iPolicy),
+ group(Sim)
+{
+ Sim.Init(0);
+ auto PackageCount = Cache->Head().PackageCount;
+ Flags = new unsigned char[PackageCount];
+ memset(Flags,0,sizeof(*Flags)*PackageCount);
+
+ // Fake a filename so as not to activate the media swapping
+ string Jnk = "SIMULATE";
+ for (decltype(PackageCount) I = 0; I != PackageCount; ++I)
+ FileNames[I] = Jnk;
+}
+ /*}}}*/
+// Simulate::~Simulate - Destructor /*{{{*/
+pkgSimulate::~pkgSimulate()
+{
+ delete[] Flags;
+ delete d;
+}
+ /*}}}*/
+// Simulate::Describe - Describe a package /*{{{*/
+// ---------------------------------------------------------------------
+/* Parameter Current == true displays the current package version,
+ Parameter Candidate == true displays the candidate package version */
+void pkgSimulate::Describe(PkgIterator Pkg,ostream &out,bool Current,bool Candidate)
+{
+ VerIterator Ver(Sim);
+
+ out << Pkg.FullName(true);
+
+ if (Current == true)
+ {
+ Ver = Pkg.CurrentVer();
+ if (Ver.end() == false)
+ out << " [" << Ver.VerStr() << ']';
+ }
+
+ if (Candidate == true)
+ {
+ Ver = Sim[Pkg].CandidateVerIter(Sim);
+ if (Ver.end() == true)
+ return;
+
+ out << " (" << Ver.VerStr() << ' ' << Ver.RelStr() << ')';
+ }
+}
+ /*}}}*/
+// Simulate::Install - Simulate unpacking of a package /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSimulate::Install(PkgIterator iPkg,string File)
+{
+ if (iPkg.end() || File.empty())
+ return false;
+ d->List.emplace_back(pkgDPkgPM::Item::Install, iPkg, File);
+ return true;
+}
+bool pkgSimulate::RealInstall(PkgIterator iPkg,string /*File*/)
+{
+ // Adapt the iterator
+ PkgIterator Pkg = Sim.FindPkg(iPkg.Name(), iPkg.Arch());
+ Flags[Pkg->ID] = 1;
+
+ cout << "Inst ";
+ Describe(Pkg,cout,true,true);
+ Sim.MarkInstall(Pkg,false);
+
+ // Look for broken conflicts+predepends.
+ for (PkgIterator I = Sim.PkgBegin(); I.end() == false; ++I)
+ {
+ if (Sim[I].InstallVer == 0)
+ continue;
+
+ for (DepIterator D = Sim[I].InstVerIter(Sim).DependsList(); D.end() == false;)
+ {
+ DepIterator Start;
+ DepIterator End;
+ D.GlobOr(Start,End);
+ if (Start.IsNegative() == true ||
+ End->Type == pkgCache::Dep::PreDepends)
+ {
+ if ((Sim[End] & pkgDepCache::DepGInstall) == 0)
+ {
+ cout << " [" << I.FullName(false) << " on " << Start.TargetPkg().FullName(false) << ']';
+ if (Start->Type == pkgCache::Dep::Conflicts)
+ _error->Error("Fatal, conflicts violated %s",I.FullName(false).c_str());
+ }
+ }
+ }
+ }
+
+ if (Sim.BrokenCount() != 0)
+ ShortBreaks();
+ else
+ cout << endl;
+ return true;
+}
+ /*}}}*/
+// Simulate::Configure - Simulate configuration of a Package /*{{{*/
+// ---------------------------------------------------------------------
+/* This is not an accurate simulation of relatity, we should really not
+ install the package.. For some investigations it may be necessary
+ however. */
+bool pkgSimulate::Configure(PkgIterator iPkg)
+{
+ if (iPkg.end())
+ return false;
+ d->List.emplace_back(pkgDPkgPM::Item::Configure, iPkg);
+ return true;
+}
+bool pkgSimulate::RealConfigure(PkgIterator iPkg)
+{
+ // Adapt the iterator
+ PkgIterator Pkg = Sim.FindPkg(iPkg.Name(), iPkg.Arch());
+
+ Flags[Pkg->ID] = 2;
+
+ if (Sim[Pkg].InstBroken() == true)
+ {
+ cout << "Conf " << Pkg.FullName(false) << " broken" << endl;
+
+ Sim.Update();
+
+ // Print out each package and the failed dependencies
+ for (pkgCache::DepIterator D = Sim[Pkg].InstVerIter(Sim).DependsList(); D.end() == false; ++D)
+ {
+ if (Sim.IsImportantDep(D) == false ||
+ (Sim[D] & pkgDepCache::DepInstall) != 0)
+ continue;
+
+ if (D->Type == pkgCache::Dep::Obsoletes)
+ cout << " Obsoletes:" << D.TargetPkg().FullName(false);
+ else if (D->Type == pkgCache::Dep::Conflicts)
+ cout << " Conflicts:" << D.TargetPkg().FullName(false);
+ else if (D->Type == pkgCache::Dep::DpkgBreaks)
+ cout << " Breaks:" << D.TargetPkg().FullName(false);
+ else
+ cout << " Depends:" << D.TargetPkg().FullName(false);
+ }
+ cout << endl;
+
+ _error->Error("Conf Broken %s",Pkg.FullName(false).c_str());
+ }
+ else
+ {
+ cout << "Conf ";
+ Describe(Pkg,cout,false,true);
+ }
+
+ if (Sim.BrokenCount() != 0)
+ ShortBreaks();
+ else
+ cout << endl;
+
+ return true;
+}
+ /*}}}*/
+// Simulate::Remove - Simulate the removal of a package /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSimulate::Remove(PkgIterator iPkg,bool Purge)
+{
+ if (iPkg.end())
+ return false;
+ d->List.emplace_back(Purge ? pkgDPkgPM::Item::Purge : pkgDPkgPM::Item::Remove, iPkg);
+ return true;
+}
+bool pkgSimulate::RealRemove(PkgIterator iPkg,bool Purge)
+{
+ // Adapt the iterator
+ PkgIterator Pkg = Sim.FindPkg(iPkg.Name(), iPkg.Arch());
+ if (Pkg.end() == true)
+ {
+ std::cerr << (Purge ? "Purg" : "Remv") << " invalid package " << iPkg.FullName() << std::endl;
+ return false;
+ }
+
+ Flags[Pkg->ID] = 3;
+ Sim.MarkDelete(Pkg);
+
+ if (Purge == true)
+ cout << "Purg ";
+ else
+ cout << "Remv ";
+ Describe(Pkg,cout,true,false);
+
+ if (Sim.BrokenCount() != 0)
+ ShortBreaks();
+ else
+ cout << endl;
+
+ return true;
+}
+ /*}}}*/
+// Simulate::ShortBreaks - Print out a short line describing all breaks /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgSimulate::ShortBreaks()
+{
+ cout << " [";
+ for (PkgIterator I = Sim.PkgBegin(); I.end() == false; ++I)
+ {
+ if (Sim[I].InstBroken() == true)
+ {
+ if (Flags[I->ID] == 0)
+ cout << I.FullName(false) << ' ';
+/* else
+ cout << I.Name() << "! ";*/
+ }
+ }
+ cout << ']' << endl;
+}
+ /*}}}*/
+bool pkgSimulate::Go2(APT::Progress::PackageManager *) /*{{{*/
+{
+ if (pkgDPkgPM::ExpandPendingCalls(d->List, Cache) == false)
+ return false;
+ for (auto && I : d->List)
+ switch (I.Op)
+ {
+ case pkgDPkgPM::Item::Install:
+ if (RealInstall(I.Pkg, I.File) == false)
+ return false;
+ break;
+ case pkgDPkgPM::Item::Configure:
+ if (RealConfigure(I.Pkg) == false)
+ return false;
+ break;
+ case pkgDPkgPM::Item::Remove:
+ if (RealRemove(I.Pkg, false) == false)
+ return false;
+ break;
+ case pkgDPkgPM::Item::Purge:
+ if (RealRemove(I.Pkg, true) == false)
+ return false;
+ break;
+ case pkgDPkgPM::Item::ConfigurePending:
+ case pkgDPkgPM::Item::TriggersPending:
+ case pkgDPkgPM::Item::RemovePending:
+ case pkgDPkgPM::Item::PurgePending:
+ return _error->Error("Internal error, simulation encountered unexpected pending item");
+ }
+ return true;
+}
+ /*}}}*/
+// ApplyStatus - Adjust for non-ok packages /*{{{*/
+// ---------------------------------------------------------------------
+/* We attempt to change the state of the all packages that have failed
+ installation toward their real state. The ordering code will perform
+ the necessary calculations to deal with the problems. */
+bool pkgApplyStatus(pkgDepCache &Cache)
+{
+ pkgDepCache::ActionGroup group(Cache);
+
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (I->VersionList == 0)
+ continue;
+
+ // Only choice for a ReInstReq package is to reinstall
+ if (I->InstState == pkgCache::State::ReInstReq ||
+ I->InstState == pkgCache::State::HoldReInstReq)
+ {
+ if (I->CurrentVer != 0 && I.CurrentVer().Downloadable() == true)
+ Cache.MarkKeep(I, false, false);
+ else
+ {
+ // Is this right? Will dpkg choke on an upgrade?
+ if (Cache[I].CandidateVer != 0 &&
+ Cache[I].CandidateVerIter(Cache).Downloadable() == true)
+ Cache.MarkInstall(I, false, 0, false);
+ else
+ return _error->Error(_("The package %s needs to be reinstalled, "
+ "but I can't find an archive for it."),I.FullName(true).c_str());
+ }
+
+ continue;
+ }
+
+ switch (I->CurrentState)
+ {
+ /* This means installation failed somehow - it does not need to be
+ re-unpacked (probably) */
+ case pkgCache::State::UnPacked:
+ case pkgCache::State::HalfConfigured:
+ case pkgCache::State::TriggersAwaited:
+ case pkgCache::State::TriggersPending:
+ if ((I->CurrentVer != 0 && I.CurrentVer().Downloadable() == true) ||
+ I.State() != pkgCache::PkgIterator::NeedsUnpack)
+ Cache.MarkKeep(I, false, false);
+ else
+ {
+ if (Cache[I].CandidateVer != 0 &&
+ Cache[I].CandidateVerIter(Cache).Downloadable() == true)
+ Cache.MarkInstall(I, true, 0, false);
+ else
+ Cache.MarkDelete(I, false, 0, false);
+ }
+ break;
+
+ // This means removal failed
+ case pkgCache::State::HalfInstalled:
+ Cache.MarkDelete(I, false, 0, false);
+ break;
+
+ default:
+ if (I->InstState != pkgCache::State::Ok)
+ return _error->Error("The package %s is not ok and I "
+ "don't know how to fix it!",I.FullName(false).c_str());
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// FixBroken - Fix broken packages /*{{{*/
+// ---------------------------------------------------------------------
+/* This autoinstalls every broken package and then runs the problem resolver
+ on the result. */
+bool pkgFixBroken(pkgDepCache &Cache)
+{
+ pkgDepCache::ActionGroup group(Cache);
+
+ // Auto upgrade all broken packages
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ if (Cache[I].NowBroken() == true)
+ Cache.MarkInstall(I, true, 0, false);
+
+ /* Fix packages that are in a NeedArchive state but don't have a
+ downloadable install version */
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (I.State() != pkgCache::PkgIterator::NeedsUnpack ||
+ Cache[I].Delete() == true)
+ continue;
+
+ if (Cache[I].InstVerIter(Cache).Downloadable() == false)
+ continue;
+
+ Cache.MarkInstall(I, true, 0, false);
+ }
+
+ pkgProblemResolver Fix(&Cache);
+ return Fix.Resolve(true);
+}
+ /*}}}*/
+// ProblemResolver::pkgProblemResolver - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgProblemResolver::pkgProblemResolver(pkgDepCache *pCache) : d(NULL), Cache(*pCache)
+{
+ // Allocate memory
+ auto const Size = Cache.Head().PackageCount;
+ Scores = new int[Size];
+ Flags = new unsigned char[Size];
+ memset(Flags,0,sizeof(*Flags)*Size);
+
+ // Set debug to true to see its decision logic
+ Debug = _config->FindB("Debug::pkgProblemResolver",false);
+}
+ /*}}}*/
+// ProblemResolver::~pkgProblemResolver - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgProblemResolver::~pkgProblemResolver()
+{
+ delete [] Scores;
+ delete [] Flags;
+}
+ /*}}}*/
+// ProblemResolver::ScoreSort - Sort the list by score /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+int pkgProblemResolver::ScoreSort(Package const *A,Package const *B)
+{
+ if (Scores[A->ID] > Scores[B->ID])
+ return -1;
+ if (Scores[A->ID] < Scores[B->ID])
+ return 1;
+ return 0;
+}
+ /*}}}*/
+// ProblemResolver::MakeScores - Make the score table /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgProblemResolver::MakeScores()
+{
+ auto const Size = Cache.Head().PackageCount;
+ memset(Scores,0,sizeof(*Scores)*Size);
+
+ // maps to pkgCache::State::VerPriority:
+ // Required Important Standard Optional Extra
+ int PrioMap[] = {
+ 0,
+ _config->FindI("pkgProblemResolver::Scores::Required",3),
+ _config->FindI("pkgProblemResolver::Scores::Important",2),
+ _config->FindI("pkgProblemResolver::Scores::Standard",1),
+ _config->FindI("pkgProblemResolver::Scores::Optional",-1),
+ _config->FindI("pkgProblemResolver::Scores::Extra",-2)
+ };
+ int PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
+ int PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
+ int DepMap[] = {
+ 0,
+ _config->FindI("pkgProblemResolver::Scores::Depends",1),
+ _config->FindI("pkgProblemResolver::Scores::PreDepends",1),
+ _config->FindI("pkgProblemResolver::Scores::Suggests",0),
+ _config->FindI("pkgProblemResolver::Scores::Recommends",1),
+ _config->FindI("pkgProblemResolver::Scores::Conflicts",-1),
+ _config->FindI("pkgProblemResolver::Scores::Replaces",0),
+ _config->FindI("pkgProblemResolver::Scores::Obsoletes",0),
+ _config->FindI("pkgProblemResolver::Scores::Breaks",-1),
+ _config->FindI("pkgProblemResolver::Scores::Enhances",0)
+ };
+ int AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
+ int AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
+
+ if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
+ clog << "Settings used to calculate pkgProblemResolver::Scores::" << endl
+ << " Required => " << PrioMap[pkgCache::State::Required] << endl
+ << " Important => " << PrioMap[pkgCache::State::Important] << endl
+ << " Standard => " << PrioMap[pkgCache::State::Standard] << endl
+ << " Optional => " << PrioMap[pkgCache::State::Optional] << endl
+ << " Extra => " << PrioMap[pkgCache::State::Extra] << endl
+ << " Essentials => " << PrioEssentials << endl
+ << " InstalledAndNotObsolete => " << PrioInstalledAndNotObsolete << endl
+ << " Pre-Depends => " << DepMap[pkgCache::Dep::PreDepends] << endl
+ << " Depends => " << DepMap[pkgCache::Dep::Depends] << endl
+ << " Recommends => " << DepMap[pkgCache::Dep::Recommends] << endl
+ << " Suggests => " << DepMap[pkgCache::Dep::Suggests] << endl
+ << " Conflicts => " << DepMap[pkgCache::Dep::Conflicts] << endl
+ << " Breaks => " << DepMap[pkgCache::Dep::DpkgBreaks] << endl
+ << " Replaces => " << DepMap[pkgCache::Dep::Replaces] << endl
+ << " Obsoletes => " << DepMap[pkgCache::Dep::Obsoletes] << endl
+ << " Enhances => " << DepMap[pkgCache::Dep::Enhances] << endl
+ << " AddProtected => " << AddProtected << endl
+ << " AddEssential => " << AddEssential << endl;
+
+ // Generate the base scores for a package based on its properties
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (Cache[I].InstallVer == 0)
+ continue;
+
+ int &Score = Scores[I->ID];
+
+ /* This is arbitrary, it should be high enough to elevate an
+ essantial package above most other packages but low enough
+ to allow an obsolete essential packages to be removed by
+ a conflicts on a powerful normal package (ie libc6) */
+ if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential
+ || (I->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important)
+ Score += PrioEssentials;
+
+ pkgCache::VerIterator const InstVer = Cache[I].InstVerIter(Cache);
+ // We apply priorities only to downloadable packages, all others are prio:extra
+ // as an obsolete prio:standard package can't be that standard anymore…
+ if (InstVer->Priority <= pkgCache::State::Extra && InstVer.Downloadable() == true)
+ Score += PrioMap[InstVer->Priority];
+ else
+ Score += PrioMap[pkgCache::State::Extra];
+
+ /* This helps to fix oddball problems with conflicting packages
+ on the same level. We enhance the score of installed packages
+ if those are not obsolete */
+ if (I->CurrentVer != 0 && Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable())
+ Score += PrioInstalledAndNotObsolete;
+
+ // propagate score points along dependencies
+ for (pkgCache::DepIterator D = InstVer.DependsList(); D.end() == false; ++D)
+ {
+ if (DepMap[D->Type] == 0)
+ continue;
+ pkgCache::PkgIterator const T = D.TargetPkg();
+ if (D->Version != 0)
+ {
+ pkgCache::VerIterator const IV = Cache[T].InstVerIter(Cache);
+ if (IV.end() == true || D.IsSatisfied(IV) == false)
+ continue;
+ }
+ Scores[T->ID] += DepMap[D->Type];
+ }
+ }
+
+ // Copy the scores to advoid additive looping
+ std::unique_ptr<int[]> OldScores(new int[Size]);
+ memcpy(OldScores.get(),Scores,sizeof(*Scores)*Size);
+
+ /* Now we cause 1 level of dependency inheritance, that is we add the
+ score of the packages that depend on the target Package. This
+ fortifies high scoring packages */
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (Cache[I].InstallVer == 0)
+ continue;
+
+ for (pkgCache::DepIterator D = I.RevDependsList(); D.end() == false; ++D)
+ {
+ // Only do it for the install version
+ if ((pkgCache::Version *)D.ParentVer() != Cache[D.ParentPkg()].InstallVer ||
+ (D->Type != pkgCache::Dep::Depends &&
+ D->Type != pkgCache::Dep::PreDepends &&
+ D->Type != pkgCache::Dep::Recommends))
+ continue;
+
+ // Do not propagate negative scores otherwise
+ // an extra (-2) package might score better than an optional (-1)
+ if (OldScores[D.ParentPkg()->ID] > 0)
+ Scores[I->ID] += OldScores[D.ParentPkg()->ID];
+ }
+ }
+
+ /* Now we propagate along provides. This makes the packages that
+ provide important packages extremely important */
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ for (pkgCache::PrvIterator P = I.ProvidesList(); P.end() == false; ++P)
+ {
+ // Only do it once per package
+ if ((pkgCache::Version *)P.OwnerVer() != Cache[P.OwnerPkg()].InstallVer)
+ continue;
+ Scores[P.OwnerPkg()->ID] += abs(Scores[I->ID] - OldScores[I->ID]);
+ }
+ }
+
+ /* Protected things are pushed really high up. This number should put them
+ ahead of everything */
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if ((Flags[I->ID] & Protected) != 0)
+ Scores[I->ID] += AddProtected;
+ if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential ||
+ (I->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important)
+ Scores[I->ID] += AddEssential;
+ }
+}
+ /*}}}*/
+// ProblemResolver::DoUpgrade - Attempt to upgrade this package /*{{{*/
+// ---------------------------------------------------------------------
+/* This goes through and tries to reinstall packages to make this package
+ installable */
+bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
+{
+ pkgDepCache::ActionGroup group(Cache);
+
+ if ((Flags[Pkg->ID] & Upgradable) == 0 || Cache[Pkg].Upgradable() == false)
+ return false;
+ if ((Flags[Pkg->ID] & Protected) == Protected)
+ return false;
+
+ Flags[Pkg->ID] &= ~Upgradable;
+
+ bool WasKept = Cache[Pkg].Keep();
+ Cache.MarkInstall(Pkg, false, 0, false);
+
+ // This must be a virtual package or something like that.
+ if (Cache[Pkg].InstVerIter(Cache).end() == true)
+ return false;
+
+ // Isolate the problem dependency
+ bool Fail = false;
+ for (pkgCache::DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList(); D.end() == false;)
+ {
+ // Compute a single dependency element (glob or)
+ pkgCache::DepIterator Start = D;
+ pkgCache::DepIterator End = D;
+ for (bool LastOR = true; D.end() == false && LastOR == true;)
+ {
+ LastOR = (D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or;
+ ++D;
+ if (LastOR == true)
+ End = D;
+ }
+
+ // We only worry about critical deps.
+ if (End.IsCritical() != true)
+ continue;
+
+ // Iterate over all the members in the or group
+ while (1)
+ {
+ // Dep is ok now
+ if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
+ break;
+
+ // Do not change protected packages
+ PkgIterator P = Start.SmartTargetPkg();
+ if ((Flags[P->ID] & Protected) == Protected)
+ {
+ if (Debug == true)
+ clog << " Reinst Failed because of protected " << P.FullName(false) << endl;
+ Fail = true;
+ }
+ else
+ {
+ // Upgrade the package if the candidate version will fix the problem.
+ if ((Cache[Start] & pkgDepCache::DepCVer) == pkgDepCache::DepCVer)
+ {
+ if (DoUpgrade(P) == false)
+ {
+ if (Debug == true)
+ clog << " Reinst Failed because of " << P.FullName(false) << endl;
+ Fail = true;
+ }
+ else
+ {
+ Fail = false;
+ break;
+ }
+ }
+ else
+ {
+ /* We let the algorithm deal with conflicts on its next iteration,
+ it is much smarter than us */
+ if (Start.IsNegative() == true)
+ break;
+
+ if (Debug == true)
+ clog << " Reinst Failed early because of " << Start.TargetPkg().FullName(false) << endl;
+ Fail = true;
+ }
+ }
+
+ if (Start == End)
+ break;
+ ++Start;
+ }
+ if (Fail == true)
+ break;
+ }
+
+ // Undo our operations - it might be smart to undo everything this did..
+ if (Fail == true)
+ {
+ if (WasKept == true)
+ Cache.MarkKeep(Pkg, false, false);
+ else
+ Cache.MarkDelete(Pkg, false, 0, false);
+ return false;
+ }
+
+ if (Debug == true)
+ clog << " Re-Instated " << Pkg.FullName(false) << endl;
+ return true;
+}
+ /*}}}*/
+// ProblemResolver::Resolve - calls a resolver to fix the situation /*{{{*/
+bool pkgProblemResolver::Resolve(bool BrokenFix, OpProgress * const Progress)
+{
+ std::string const solver = _config->Find("APT::Solver", "internal");
+ auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, 0, Progress);
+ if (solver != "internal")
+ return ret;
+ return ResolveInternal(BrokenFix);
+}
+ /*}}}*/
+// ProblemResolver::ResolveInternal - Run the resolution pass /*{{{*/
+// ---------------------------------------------------------------------
+/* This routines works by calculating a score for each package. The score
+ is derived by considering the package's priority and all reverse
+ dependents giving an integer that reflects the amount of breakage that
+ adjusting the package will inflict.
+
+ It goes from highest score to lowest and corrects all of the breaks by
+ keeping or removing the dependent packages. If that fails then it removes
+ the package itself and goes on. The routine should be able to intelligently
+ go from any broken state to a fixed state.
+
+ The BrokenFix flag enables a mode where the algorithm tries to
+ upgrade packages to advoid problems. */
+bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
+{
+ pkgDepCache::ActionGroup group(Cache);
+
+ // Record which packages are marked for install
+ bool Again = false;
+ do
+ {
+ Again = false;
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (Cache[I].Install() == true)
+ Flags[I->ID] |= PreInstalled;
+ else
+ {
+ if (Cache[I].InstBroken() == true && BrokenFix == true)
+ {
+ Cache.MarkInstall(I, false, 0, false);
+ if (Cache[I].Install() == true)
+ Again = true;
+ }
+
+ Flags[I->ID] &= ~PreInstalled;
+ }
+ Flags[I->ID] |= Upgradable;
+ }
+ }
+ while (Again == true);
+
+ if (Debug == true) {
+ clog << "Starting pkgProblemResolver with broken count: "
+ << Cache.BrokenCount() << endl;
+ }
+
+ MakeScores();
+
+ auto const Size = Cache.Head().PackageCount;
+
+ /* We have to order the packages so that the broken fixing pass
+ operates from highest score to lowest. This prevents problems when
+ high score packages cause the removal of lower score packages that
+ would cause the removal of even lower score packages. */
+ std::unique_ptr<pkgCache::Package *[]> PList(new pkgCache::Package *[Size]);
+ pkgCache::Package **PEnd = PList.get();
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ *PEnd++ = I;
+
+ std::sort(PList.get(), PEnd, [this](Package *a, Package *b) { return ScoreSort(a, b) < 0; });
+
+ if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
+ {
+ clog << "Show Scores" << endl;
+ for (pkgCache::Package **K = PList.get(); K != PEnd; K++)
+ if (Scores[(*K)->ID] != 0)
+ {
+ pkgCache::PkgIterator Pkg(Cache,*K);
+ clog << Scores[(*K)->ID] << ' ' << APT::PrettyPkg(&Cache, Pkg) << std::endl;
+ }
+ }
+
+ if (Debug == true) {
+ clog << "Starting 2 pkgProblemResolver with broken count: "
+ << Cache.BrokenCount() << endl;
+ }
+
+ /* Now consider all broken packages. For each broken package we either
+ remove the package or fix it's problem. We do this once, it should
+ not be possible for a loop to form (that is a < b < c and fixing b by
+ changing a breaks c) */
+ bool Change = true;
+ bool const TryFixByInstall = _config->FindB("pkgProblemResolver::FixByInstall", true);
+ std::vector<PackageKill> KillList;
+ for (int Counter = 0; Counter != 10 && Change == true; Counter++)
+ {
+ Change = false;
+ for (pkgCache::Package **K = PList.get(); K != PEnd; K++)
+ {
+ pkgCache::PkgIterator I(Cache,*K);
+
+ /* We attempt to install this and see if any breaks result,
+ this takes care of some strange cases */
+ if (Cache[I].CandidateVer != Cache[I].InstallVer &&
+ I->CurrentVer != 0 && Cache[I].InstallVer != 0 &&
+ (Flags[I->ID] & PreInstalled) != 0 &&
+ (Flags[I->ID] & Protected) == 0 &&
+ (Flags[I->ID] & ReInstateTried) == 0)
+ {
+ if (Debug == true)
+ clog << " Try to Re-Instate (" << Counter << ") " << I.FullName(false) << endl;
+ auto const OldBreaks = Cache.BrokenCount();
+ pkgCache::Version *OldVer = Cache[I].InstallVer;
+ Flags[I->ID] &= ReInstateTried;
+
+ Cache.MarkInstall(I, false, 0, false);
+ if (Cache[I].InstBroken() == true ||
+ OldBreaks < Cache.BrokenCount())
+ {
+ if (OldVer == 0)
+ Cache.MarkDelete(I, false, 0, false);
+ else
+ Cache.MarkKeep(I, false, false);
+ }
+ else
+ if (Debug == true)
+ clog << "Re-Instated " << I.FullName(false) << " (" << OldBreaks << " vs " << Cache.BrokenCount() << ')' << endl;
+ }
+
+ if (Cache[I].InstallVer == 0 || Cache[I].InstBroken() == false)
+ continue;
+
+ if (Debug == true)
+ clog << "Investigating (" << Counter << ") " << APT::PrettyPkg(&Cache, I) << endl;
+
+ // Isolate the problem dependency
+ bool InOr = false;
+ pkgCache::DepIterator Start;
+ pkgCache::DepIterator End;
+ size_t OldSize = 0;
+
+ KillList.resize(0);
+
+ enum {OrRemove,OrKeep} OrOp = OrRemove;
+ for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList();
+ D.end() == false || InOr == true;)
+ {
+ // Compute a single dependency element (glob or)
+ if (Start == End)
+ {
+ // Decide what to do
+ if (InOr == true && OldSize == KillList.size())
+ {
+ if (OrOp == OrRemove)
+ {
+ if ((Flags[I->ID] & Protected) != Protected)
+ {
+ if (Debug == true)
+ clog << " Or group remove for " << I.FullName(false) << endl;
+ Cache.MarkDelete(I, false, 0, false);
+ Change = true;
+ }
+ }
+ else if (OrOp == OrKeep)
+ {
+ if (Debug == true)
+ clog << " Or group keep for " << I.FullName(false) << endl;
+ Cache.MarkKeep(I, false, false);
+ Change = true;
+ }
+ }
+
+ /* We do an extra loop (as above) to finalize the or group
+ processing */
+ InOr = false;
+ OrOp = OrRemove;
+ D.GlobOr(Start,End);
+ if (Start.end() == true)
+ break;
+
+ // We only worry about critical deps.
+ if (End.IsCritical() != true)
+ continue;
+
+ InOr = Start != End;
+ OldSize = KillList.size();
+ }
+ else
+ {
+ ++Start;
+ // We only worry about critical deps.
+ if (Start.IsCritical() != true)
+ continue;
+ }
+
+ // Dep is ok
+ if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
+ {
+ InOr = false;
+ continue;
+ }
+
+ if (Debug == true)
+ clog << "Broken " << APT::PrettyDep(&Cache, Start) << endl;
+
+ /* Look across the version list. If there are no possible
+ targets then we keep the package and bail. This is necessary
+ if a package has a dep on another package that can't be found */
+ std::unique_ptr<pkgCache::Version *[]> VList(Start.AllTargets());
+ if (VList[0] == 0 && (Flags[I->ID] & Protected) != Protected &&
+ Start.IsNegative() == false &&
+ Cache[I].NowBroken() == false)
+ {
+ if (InOr == true)
+ {
+ /* No keep choice because the keep being OK could be the
+ result of another element in the OR group! */
+ continue;
+ }
+
+ Change = true;
+ Cache.MarkKeep(I, false, false);
+ break;
+ }
+
+ bool Done = false;
+ for (pkgCache::Version **V = VList.get(); *V != 0; V++)
+ {
+ pkgCache::VerIterator Ver(Cache,*V);
+ pkgCache::PkgIterator Pkg = Ver.ParentPkg();
+
+ /* This is a conflicts, and the version we are looking
+ at is not the currently selected version of the
+ package, which means it is not necessary to
+ remove/keep */
+ if (Cache[Pkg].InstallVer != Ver && Start.IsNegative() == true)
+ {
+ if (Debug)
+ clog << " Conflicts//Breaks against version "
+ << Ver.VerStr() << " for " << Pkg.Name()
+ << " but that is not InstVer, ignoring"
+ << endl;
+ continue;
+ }
+
+ if (Debug == true)
+ clog << " Considering " << Pkg.FullName(false) << ' ' << Scores[Pkg->ID] <<
+ " as a solution to " << I.FullName(false) << ' ' << Scores[I->ID] << endl;
+
+ /* Try to fix the package under consideration rather than
+ fiddle with the VList package */
+ if (Scores[I->ID] <= Scores[Pkg->ID] ||
+ ((Cache[Start] & pkgDepCache::DepNow) == 0 &&
+ End.IsNegative() == false))
+ {
+ // Try a little harder to fix protected packages..
+ if ((Flags[I->ID] & Protected) == Protected)
+ {
+ if (DoUpgrade(Pkg) == true)
+ {
+ if (Scores[Pkg->ID] > Scores[I->ID])
+ Scores[Pkg->ID] = Scores[I->ID];
+ break;
+ }
+
+ continue;
+ }
+
+ /* See if a keep will do, unless the package is protected,
+ then installing it will be necessary */
+ bool Installed = Cache[I].Install();
+ Cache.MarkKeep(I, false, false);
+ if (Cache[I].InstBroken() == false)
+ {
+ // Unwind operation will be keep now
+ if (OrOp == OrRemove)
+ OrOp = OrKeep;
+
+ // Restore
+ if (InOr == true && Installed == true)
+ Cache.MarkInstall(I, false, 0, false);
+
+ if (Debug == true)
+ clog << " Holding Back " << I.FullName(false) << " rather than change " << Start.TargetPkg().FullName(false) << endl;
+ }
+ else
+ {
+ if (BrokenFix == false || DoUpgrade(I) == false)
+ {
+ // Consider other options
+ if (InOr == false || Cache[I].Garbage == true)
+ {
+ if (Debug == true)
+ clog << " Removing " << I.FullName(false) << " rather than change " << Start.TargetPkg().FullName(false) << endl;
+ Cache.MarkDelete(I, false, 0, false);
+ if (Counter > 1 && Scores[Pkg->ID] > Scores[I->ID])
+ Scores[I->ID] = Scores[Pkg->ID];
+ }
+ else if (TryFixByInstall == true &&
+ Start.TargetPkg()->CurrentVer == 0 &&
+ Cache[Start.TargetPkg()].Delete() == false &&
+ (Flags[Start.TargetPkg()->ID] & ToRemove) != ToRemove &&
+ Cache.GetCandidateVersion(Start.TargetPkg()).end() == false)
+ {
+ /* Before removing or keeping the package with the broken dependency
+ try instead to install the first not previously installed package
+ solving this dependency. This helps every time a previous solver
+ is removed by the resolver because of a conflict or alike but it is
+ dangerous as it could trigger new breaks/conflicts… */
+ if (Debug == true)
+ clog << " Try Installing " << APT::PrettyPkg(&Cache, Start.TargetPkg()) << " before changing " << I.FullName(false) << std::endl;
+ auto const OldBroken = Cache.BrokenCount();
+ Cache.MarkInstall(Start.TargetPkg(), true, 1, false);
+ // FIXME: we should undo the complete MarkInstall process here
+ if (Cache[Start.TargetPkg()].InstBroken() == true || Cache.BrokenCount() > OldBroken)
+ Cache.MarkDelete(Start.TargetPkg(), false, 1, false);
+ }
+ }
+ }
+
+ Change = true;
+ Done = true;
+ break;
+ }
+ else
+ {
+ if (Start->Type == pkgCache::Dep::DpkgBreaks)
+ {
+ // first, try upgradring the package, if that
+ // does not help, the breaks goes onto the
+ // kill list
+ //
+ // FIXME: use DoUpgrade(Pkg) instead?
+ if (Cache[End] & pkgDepCache::DepGCVer)
+ {
+ if (Debug)
+ clog << " Upgrading " << Pkg.FullName(false) << " due to Breaks field in " << I.FullName(false) << endl;
+ Cache.MarkInstall(Pkg, false, 0, false);
+ continue;
+ }
+ }
+
+ // Skip adding to the kill list if it is protected
+ if ((Flags[Pkg->ID] & Protected) != 0)
+ continue;
+
+ if (Debug == true)
+ clog << " Added " << Pkg.FullName(false) << " to the remove list" << endl;
+
+ KillList.push_back({Pkg, End});
+
+ if (Start.IsNegative() == false)
+ break;
+ }
+ }
+
+ // Hm, nothing can possibly satisfy this dep. Nuke it.
+ if (VList[0] == 0 &&
+ Start.IsNegative() == false &&
+ (Flags[I->ID] & Protected) != Protected)
+ {
+ bool Installed = Cache[I].Install();
+ Cache.MarkKeep(I);
+ if (Cache[I].InstBroken() == false)
+ {
+ // Unwind operation will be keep now
+ if (OrOp == OrRemove)
+ OrOp = OrKeep;
+
+ // Restore
+ if (InOr == true && Installed == true)
+ Cache.MarkInstall(I, false, 0, false);
+
+ if (Debug == true)
+ clog << " Holding Back " << I.FullName(false) << " because I can't find " << Start.TargetPkg().FullName(false) << endl;
+ }
+ else
+ {
+ if (Debug == true)
+ clog << " Removing " << I.FullName(false) << " because I can't find " << Start.TargetPkg().FullName(false) << endl;
+ if (InOr == false)
+ Cache.MarkDelete(I, false, 0, false);
+ }
+
+ Change = true;
+ Done = true;
+ }
+
+ // Try some more
+ if (InOr == true)
+ continue;
+
+ if (Done == true)
+ break;
+ }
+
+ // Apply the kill list now
+ if (Cache[I].InstallVer != 0)
+ {
+ for (auto J = KillList.begin(); J != KillList.end(); J++)
+ {
+ Change = true;
+ if ((Cache[J->Dep] & pkgDepCache::DepGNow) == 0)
+ {
+ if (J->Dep.IsNegative() == true)
+ {
+ if (Debug == true)
+ clog << " Fixing " << I.FullName(false) << " via remove of " << J->Pkg.FullName(false) << endl;
+ Cache.MarkDelete(J->Pkg, false, 0, false);
+ }
+ }
+ else
+ {
+ if (Debug == true)
+ clog << " Fixing " << I.FullName(false) << " via keep of " << J->Pkg.FullName(false) << endl;
+ Cache.MarkKeep(J->Pkg, false, false);
+ }
+
+ if (Counter > 1)
+ {
+ if (Scores[I->ID] > Scores[J->Pkg->ID])
+ Scores[J->Pkg->ID] = Scores[I->ID];
+ }
+ }
+ }
+ }
+ }
+
+ if (Debug == true)
+ clog << "Done" << endl;
+
+ if (Cache.BrokenCount() != 0)
+ {
+ // See if this is the result of a hold
+ pkgCache::PkgIterator I = Cache.PkgBegin();
+ for (;I.end() != true; ++I)
+ {
+ if (Cache[I].InstBroken() == false)
+ continue;
+ if ((Flags[I->ID] & Protected) != Protected)
+ return _error->Error(_("Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages."));
+ }
+ return _error->Error(_("Unable to correct problems, you have held broken packages."));
+ }
+
+ // set the auto-flags (mvo: I'm not sure if we _really_ need this)
+ pkgCache::PkgIterator I = Cache.PkgBegin();
+ for (;I.end() != true; ++I) {
+ if (Cache[I].NewInstall() && !(Flags[I->ID] & PreInstalled)) {
+ if(_config->FindB("Debug::pkgAutoRemove",false)) {
+ std::clog << "Resolve installed new pkg: " << I.FullName(false)
+ << " (now marking it as auto)" << std::endl;
+ }
+ Cache[I].Flags |= pkgCache::Flag::Auto;
+ }
+ }
+
+
+ return true;
+}
+ /*}}}*/
+// ProblemResolver::BreaksInstOrPolicy - Check if the given pkg is broken/*{{{*/
+// ---------------------------------------------------------------------
+/* This checks if the given package is broken either by a hard dependency
+ (InstBroken()) or by introducing a new policy breakage e.g. new
+ unsatisfied recommends for a package that was in "policy-good" state
+
+ Note that this is not perfect as it will ignore further breakage
+ for already broken policy (recommends)
+*/
+bool pkgProblemResolver::InstOrNewPolicyBroken(pkgCache::PkgIterator I)
+{
+ // a broken install is always a problem
+ if (Cache[I].InstBroken() == true)
+ {
+ if (Debug == true)
+ std::clog << " Dependencies are not satisfied for " << APT::PrettyPkg(&Cache, I) << std::endl;
+ return true;
+ }
+
+ // a newly broken policy (recommends/suggests) is a problem
+ if (Cache[I].NowPolicyBroken() == false &&
+ Cache[I].InstPolicyBroken() == true)
+ {
+ if (Debug == true)
+ std::clog << " Policy breaks with upgrade of " << APT::PrettyPkg(&Cache, I) << std::endl;
+ return true;
+ }
+
+ return false;
+}
+ /*}}}*/
+// ProblemResolver::ResolveByKeep - Resolve problems using keep /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the work horse of the soft upgrade routine. It is very gentle
+ in that it does not install or remove any packages. It is assumed that the
+ system was non-broken previously. */
+bool pkgProblemResolver::ResolveByKeep(OpProgress * const Progress)
+{
+ std::string const solver = _config->Find("APT::Solver", "internal");
+ constexpr auto flags = EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_NEW_INSTALL | EDSP::Request::FORBID_REMOVE;
+ auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, flags, Progress);
+ if (solver != "internal")
+ return ret;
+ return ResolveByKeepInternal();
+}
+ /*}}}*/
+// ProblemResolver::ResolveByKeepInternal - Resolve problems using keep /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the work horse of the soft upgrade routine. It is very gentle
+ in that it does not install or remove any packages. It is assumed that the
+ system was non-broken previously. */
+bool pkgProblemResolver::ResolveByKeepInternal()
+{
+ pkgDepCache::ActionGroup group(Cache);
+
+ MakeScores();
+
+ /* We have to order the packages so that the broken fixing pass
+ operates from highest score to lowest. This prevents problems when
+ high score packages cause the removal of lower score packages that
+ would cause the removal of even lower score packages. */
+ auto Size = Cache.Head().PackageCount;
+ pkgCache::Package **PList = new pkgCache::Package *[Size];
+ pkgCache::Package **PEnd = PList;
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ *PEnd++ = I;
+
+ std::sort(PList,PEnd,[this](Package *a, Package *b) { return ScoreSort(a, b) < 0; });
+
+
+ if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
+ {
+ clog << "Show Scores" << endl;
+ for (pkgCache::Package **K = PList; K != PEnd; K++)
+ if (Scores[(*K)->ID] != 0)
+ {
+ pkgCache::PkgIterator Pkg(Cache,*K);
+ clog << Scores[(*K)->ID] << ' ' << APT::PrettyPkg(&Cache, Pkg) << std::endl;
+ }
+ }
+
+ if (Debug == true)
+ clog << "Entering ResolveByKeep" << endl;
+
+ // Consider each broken package
+ pkgCache::Package **LastStop = 0;
+ for (pkgCache::Package **K = PList; K != PEnd; K++)
+ {
+ pkgCache::PkgIterator I(Cache,*K);
+
+ if (Cache[I].InstallVer == 0)
+ continue;
+
+ if (InstOrNewPolicyBroken(I) == false)
+ continue;
+
+ /* Keep the package. If this works then great, otherwise we have
+ to be significantly more aggressive and manipulate its dependencies */
+ if ((Flags[I->ID] & Protected) == 0)
+ {
+ if (Debug == true)
+ clog << "Keeping package " << I.FullName(false) << endl;
+ Cache.MarkKeep(I, false, false);
+ if (InstOrNewPolicyBroken(I) == false)
+ {
+ K = PList - 1;
+ continue;
+ }
+ }
+
+ // Isolate the problem dependencies
+ for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false;)
+ {
+ DepIterator Start;
+ DepIterator End;
+ D.GlobOr(Start,End);
+
+ // We only worry about critical deps.
+ if (End.IsCritical() != true)
+ continue;
+
+ // Dep is ok
+ if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
+ continue;
+
+ /* Hm, the group is broken.. I suppose the best thing to do is to
+ is to try every combination of keep/not-keep for the set, but that's
+ slow, and this never happens, just be conservative and assume the
+ list of ors is in preference and keep till it starts to work. */
+ while (true)
+ {
+ if (Debug == true)
+ clog << "Package " << I.FullName(false) << " " << APT::PrettyDep(&Cache, Start) << endl;
+
+ // Look at all the possible provides on this package
+ std::unique_ptr<pkgCache::Version *[]> VList(Start.AllTargets());
+ for (pkgCache::Version **V = VList.get(); *V != 0; V++)
+ {
+ pkgCache::VerIterator Ver(Cache,*V);
+ pkgCache::PkgIterator Pkg = Ver.ParentPkg();
+
+ // It is not keepable
+ if (Cache[Pkg].InstallVer == 0 ||
+ Pkg->CurrentVer == 0)
+ continue;
+
+ if ((Flags[I->ID] & Protected) == 0)
+ {
+ if (Debug == true)
+ clog << " Keeping Package " << Pkg.FullName(false) << " due to " << Start.DepType() << endl;
+ Cache.MarkKeep(Pkg, false, false);
+ }
+
+ if (InstOrNewPolicyBroken(I) == false)
+ break;
+ }
+
+ if (InstOrNewPolicyBroken(I) == false)
+ break;
+
+ if (Start == End)
+ break;
+ ++Start;
+ }
+
+ if (InstOrNewPolicyBroken(I) == false)
+ break;
+ }
+
+ if (InstOrNewPolicyBroken(I) == true)
+ continue;
+
+ // Restart again.
+ if (K == LastStop) {
+ // I is an iterator based off our temporary package list,
+ // so copy the name we need before deleting the temporary list
+ std::string const LoopingPackage = I.FullName(false);
+ delete[] PList;
+ return _error->Error("Internal Error, pkgProblemResolver::ResolveByKeep is looping on package %s.", LoopingPackage.c_str());
+ }
+ LastStop = K;
+ K = PList - 1;
+ }
+
+ delete[] PList;
+ return true;
+}
+ /*}}}*/
+// ProblemResolver::InstallProtect - deprecated cpu-eating no-op /*{{{*/
+// ---------------------------------------------------------------------
+/* Actions issued with FromUser bit set are protected from further
+ modification (expect by other calls with FromUser set) nowadays , so we
+ don't need to reissue actions here, they are already set in stone. */
+void pkgProblemResolver::InstallProtect()
+{
+ pkgDepCache::ActionGroup group(Cache);
+
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if ((Flags[I->ID] & Protected) == Protected)
+ {
+ if ((Flags[I->ID] & ToRemove) == ToRemove)
+ Cache.MarkDelete(I);
+ else
+ {
+ // preserve the information whether the package was auto
+ // or manually installed
+ bool autoInst = (Cache[I].Flags & pkgCache::Flag::Auto);
+ Cache.MarkInstall(I, false, 0, !autoInst);
+ }
+ }
+ }
+}
+ /*}}}*/
+// PrioSortList - Sort a list of versions by priority /*{{{*/
+// ---------------------------------------------------------------------
+/* This is meant to be used in conjunction with AllTargets to get a list
+ of versions ordered by preference. */
+
+struct PrioComp {
+ pkgCache &PrioCache;
+
+ explicit PrioComp(pkgCache &PrioCache) : PrioCache(PrioCache) {
+ }
+
+ bool operator() (pkgCache::Version * const &A, pkgCache::Version * const &B) {
+ return compare(A, B) < 0;
+ }
+
+ int compare(pkgCache::Version * const &A, pkgCache::Version * const &B) {
+ pkgCache::VerIterator L(PrioCache,A);
+ pkgCache::VerIterator R(PrioCache,B);
+
+ if ((L.ParentPkg()->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential &&
+ (R.ParentPkg()->Flags & pkgCache::Flag::Essential) != pkgCache::Flag::Essential)
+ return 1;
+ if ((L.ParentPkg()->Flags & pkgCache::Flag::Essential) != pkgCache::Flag::Essential &&
+ (R.ParentPkg()->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ return -1;
+
+ if ((L.ParentPkg()->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important &&
+ (R.ParentPkg()->Flags & pkgCache::Flag::Important) != pkgCache::Flag::Important)
+ return 1;
+ if ((L.ParentPkg()->Flags & pkgCache::Flag::Important) != pkgCache::Flag::Important &&
+ (R.ParentPkg()->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important)
+ return -1;
+
+ if (L->Priority != R->Priority)
+ return R->Priority - L->Priority;
+ return strcmp(L.ParentPkg().Name(),R.ParentPkg().Name());
+ }
+};
+
+void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List)
+{
+ unsigned long Count = 0;
+ for (pkgCache::Version **I = List; *I != 0; I++)
+ Count++;
+ std::sort(List,List+Count,PrioComp(Cache));
+}
+ /*}}}*/
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h
new file mode 100644
index 0000000..c5c9f4c
--- /dev/null
+++ b/apt-pkg/algorithms.h
@@ -0,0 +1,162 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Algorithms - A set of misc algorithms
+
+ This simulate class displays what the ordering code has done and
+ analyses it with a fresh new dependency cache. In this way we can
+ see all of the effects of an upgrade run.
+
+ pkgDistUpgrade computes an upgrade that causes as many packages as
+ possible to move to the newest version.
+
+ pkgApplyStatus sets the target state based on the content of the status
+ field in the status file. It is important to get proper crash recovery.
+
+ pkgFixBroken corrects a broken system so that it is in a sane state.
+
+ pkgAllUpgrade attempts to upgade as many packages as possible but
+ without installing new packages.
+
+ The problem resolver class contains a number of complex algorithms
+ to try to best-guess an upgrade state. It solves the problem of
+ maximizing the number of install state packages while having no broken
+ packages.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_ALGORITHMS_H
+#define PKGLIB_ALGORITHMS_H
+
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <iostream>
+#include <string>
+
+#include <apt-pkg/macros.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/acquire.h>
+using std::ostream;
+#endif
+
+#ifndef APT_9_CLEANER_HEADERS
+// include pkg{DistUpgrade,AllUpgrade,MiniizeUpgrade} here for compatibility
+#include <apt-pkg/update.h>
+#include <apt-pkg/upgrade.h>
+#endif
+
+
+class pkgSimulatePrivate;
+class pkgSimulate : public pkgPackageManager /*{{{*/
+{
+ pkgSimulatePrivate * const d;
+ protected:
+
+ class Policy : public pkgDepCache::Policy
+ {
+ pkgDepCache *Cache;
+ public:
+
+ virtual VerIterator GetCandidateVer(PkgIterator const &Pkg) APT_OVERRIDE
+ {
+ return (*Cache)[Pkg].CandidateVerIter(*Cache);
+ }
+
+ explicit Policy(pkgDepCache *Cache) : Cache(Cache) {};
+ };
+
+ unsigned char *Flags;
+
+ Policy iPolicy;
+ pkgDepCache Sim;
+ pkgDepCache::ActionGroup group;
+
+ // The Actual installation implementation
+ virtual bool Install(PkgIterator Pkg,std::string File) APT_OVERRIDE;
+ virtual bool Configure(PkgIterator Pkg) APT_OVERRIDE;
+ virtual bool Remove(PkgIterator Pkg,bool Purge) APT_OVERRIDE;
+
+ // FIXME: trick to avoid ABI break for virtual reimplementation; fix on next ABI break
+public:
+ APT_HIDDEN bool Go2(APT::Progress::PackageManager * progress);
+
+private:
+ APT_HIDDEN void ShortBreaks();
+ APT_HIDDEN void Describe(PkgIterator iPkg,std::ostream &out,bool Current,bool Candidate);
+ APT_HIDDEN bool RealInstall(PkgIterator Pkg,std::string File);
+ APT_HIDDEN bool RealConfigure(PkgIterator Pkg);
+ APT_HIDDEN bool RealRemove(PkgIterator Pkg,bool Purge);
+
+ public:
+
+ explicit pkgSimulate(pkgDepCache *Cache);
+ virtual ~pkgSimulate();
+};
+ /*}}}*/
+class pkgProblemResolver /*{{{*/
+{
+ private:
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ pkgDepCache &Cache;
+ typedef pkgCache::PkgIterator PkgIterator;
+ typedef pkgCache::VerIterator VerIterator;
+ typedef pkgCache::DepIterator DepIterator;
+ typedef pkgCache::PrvIterator PrvIterator;
+ typedef pkgCache::Version Version;
+ typedef pkgCache::Package Package;
+
+ enum Flags {Protected = (1 << 0), PreInstalled = (1 << 1),
+ Upgradable = (1 << 2), ReInstateTried = (1 << 3),
+ ToRemove = (1 << 4)};
+ int *Scores;
+ unsigned char *Flags;
+ bool Debug;
+
+ // Sort stuff
+ APT_HIDDEN int ScoreSort(Package const *A, Package const *B) APT_PURE;
+
+ struct PackageKill
+ {
+ PkgIterator Pkg;
+ DepIterator Dep;
+ };
+
+ APT_HIDDEN void MakeScores();
+ APT_HIDDEN bool DoUpgrade(pkgCache::PkgIterator Pkg);
+
+ protected:
+ bool InstOrNewPolicyBroken(pkgCache::PkgIterator Pkg);
+
+ public:
+
+ inline void Protect(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= Protected; Cache.MarkProtected(Pkg);};
+ inline void Remove(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= ToRemove;};
+ inline void Clear(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] &= ~(Protected | ToRemove);};
+
+ // Try to intelligently resolve problems by installing and removing packages
+ bool Resolve(bool BrokenFix = false, OpProgress * const Progress = NULL);
+ APT_HIDDEN bool ResolveInternal(bool const BrokenFix = false);
+
+ // Try to resolve problems only by using keep
+ bool ResolveByKeep(OpProgress * const Progress = NULL);
+ APT_HIDDEN bool ResolveByKeepInternal();
+
+ APT_DEPRECATED_MSG("NOOP as MarkInstall enforces not overriding FromUser markings") void InstallProtect();
+
+ explicit pkgProblemResolver(pkgDepCache *Cache);
+ virtual ~pkgProblemResolver();
+};
+ /*}}}*/
+bool pkgApplyStatus(pkgDepCache &Cache);
+bool pkgFixBroken(pkgDepCache &Cache);
+
+void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List);
+
+
+#endif
diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc
new file mode 100644
index 0000000..61e53ec
--- /dev/null
+++ b/apt-pkg/aptconfiguration.cc
@@ -0,0 +1,483 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Provide access methods to various configuration settings,
+ setup defaults and returns validate settings.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+ /*}}}*/
+namespace APT {
+// setDefaultConfigurationForCompressors /*{{{*/
+static void setDefaultConfigurationForCompressors() {
+ // Set default application paths to check for optional compression types
+ _config->CndSet("Dir::Bin::gzip", "/bin/gzip");
+ _config->CndSet("Dir::Bin::bzip2", "/bin/bzip2");
+ _config->CndSet("Dir::Bin::xz", "/usr/bin/xz");
+ _config->CndSet("Dir::Bin::lz4", "/usr/bin/lz4");
+ _config->CndSet("Dir::Bin::zstd", "/usr/bin/zstd");
+ if (FileExists(_config->Find("Dir::Bin::xz")) == true) {
+ _config->Set("Dir::Bin::lzma", _config->Find("Dir::Bin::xz"));
+ _config->Set("APT::Compressor::lzma::Binary", "xz");
+ if (_config->Exists("APT::Compressor::lzma::CompressArg") == false) {
+ _config->Set("APT::Compressor::lzma::CompressArg::", "--format=lzma");
+ _config->Set("APT::Compressor::lzma::CompressArg::", "-6");
+ }
+ if (_config->Exists("APT::Compressor::lzma::UncompressArg") == false) {
+ _config->Set("APT::Compressor::lzma::UncompressArg::", "--format=lzma");
+ _config->Set("APT::Compressor::lzma::UncompressArg::", "-d");
+ }
+ } else {
+ _config->CndSet("Dir::Bin::lzma", "/usr/bin/lzma");
+ if (_config->Exists("APT::Compressor::lzma::CompressArg") == false) {
+ _config->Set("APT::Compressor::lzma::CompressArg::", "--suffix=");
+ _config->Set("APT::Compressor::lzma::CompressArg::", "-6");
+ }
+ if (_config->Exists("APT::Compressor::lzma::UncompressArg") == false) {
+ _config->Set("APT::Compressor::lzma::UncompressArg::", "--suffix=");
+ _config->Set("APT::Compressor::lzma::UncompressArg::", "-d");
+ }
+ }
+ // setup the defaults for the compressiontypes => method mapping
+ _config->CndSet("Acquire::CompressionTypes::xz","xz");
+ _config->CndSet("Acquire::CompressionTypes::bz2","bzip2");
+ _config->CndSet("Acquire::CompressionTypes::lzma","lzma");
+ _config->CndSet("Acquire::CompressionTypes::gz","gzip");
+ _config->CndSet("Acquire::CompressionTypes::lz4","lz4");
+ _config->CndSet("Acquire::CompressionTypes::zst", "zstd");
+}
+ /*}}}*/
+// getCompressionTypes - Return Vector of usable compressiontypes /*{{{*/
+// ---------------------------------------------------------------------
+/* return a vector of compression types in the preferred order. */
+std::vector<std::string>
+const Configuration::getCompressionTypes(bool const &Cached) {
+ static std::vector<std::string> types;
+ if (types.empty() == false) {
+ if (Cached == true)
+ return types;
+ else
+ types.clear();
+ }
+
+ std::vector<APT::Configuration::Compressor> const compressors = getCompressors();
+
+ // load the order setting into our vector
+ std::vector<std::string> const order = _config->FindVector("Acquire::CompressionTypes::Order");
+ for (std::vector<std::string>::const_iterator o = order.begin();
+ o != order.end(); ++o) {
+ if ((*o).empty() == true)
+ continue;
+ // ignore types we have no method ready to use
+ std::string const method = std::string("Acquire::CompressionTypes::").append(*o);
+ if (_config->Exists(method) == false)
+ continue;
+ // ignore types we have no app ready to use
+ std::string const app = _config->Find(method);
+ if (std::find_if(compressors.begin(), compressors.end(), [&app](APT::Configuration::Compressor const &c) {
+ return c.Name == app;
+ }) == compressors.end())
+ continue;
+ types.push_back(*o);
+ }
+
+ // move again over the option tree to add all missing compression types
+ ::Configuration::Item const *Types = _config->Tree("Acquire::CompressionTypes");
+ if (Types != 0)
+ Types = Types->Child;
+
+ for (; Types != 0; Types = Types->Next) {
+ if (Types->Tag == "Order" || Types->Tag.empty() == true)
+ continue;
+ // ignore types we already have in the vector
+ if (std::find(types.begin(),types.end(),Types->Tag) != types.end())
+ continue;
+ // ignore types we have no app ready to use
+ if (std::find_if(compressors.begin(), compressors.end(), [&Types](APT::Configuration::Compressor const &c) {
+ return c.Name == Types->Value;
+ }) == compressors.end())
+ continue;
+ types.push_back(Types->Tag);
+ }
+
+ // add the special "uncompressed" type
+ if (std::find(types.begin(), types.end(), "uncompressed") == types.end())
+ {
+ std::string const uncompr = _config->Find("Dir::Bin::uncompressed", "");
+ if (uncompr.empty() == true || FileExists(uncompr) == true)
+ types.push_back("uncompressed");
+ }
+
+ return types;
+}
+ /*}}}*/
+// GetLanguages - Return Vector of Language Codes /*{{{*/
+// ---------------------------------------------------------------------
+/* return a vector of language codes in the preferred order.
+ the special word "environment" will be replaced with the long and the short
+ code of the local settings and it will be insured that this will not add
+ duplicates. So in an german local the setting "environment, de_DE, en, de"
+ will result in "de_DE, de, en".
+ The special word "none" is the stopcode for the not-All code vector */
+std::vector<std::string> const Configuration::getLanguages(bool const &All,
+ bool const &Cached, char const ** const Locale) {
+ using std::string;
+
+ // The detection is boring and has a lot of cornercases,
+ // so we cache the results to calculated it only once.
+ std::vector<string> static allCodes;
+ std::vector<string> static codes;
+
+ // we have something in the cache
+ if (codes.empty() == false || allCodes.empty() == false) {
+ if (Cached == true) {
+ if(All == true && allCodes.empty() == false)
+ return allCodes;
+ else
+ return codes;
+ } else {
+ allCodes.clear();
+ codes.clear();
+ }
+ }
+
+ // Include all Language codes we have a Translation file for in /var/lib/apt/lists
+ // so they will be all included in the Cache.
+ std::vector<string> builtin;
+ DIR *D = opendir(_config->FindDir("Dir::State::lists").c_str());
+ if (D != NULL) {
+ builtin.push_back("none");
+ for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D)) {
+ string const name = SubstVar(Ent->d_name, "%5f", "_");
+ size_t const foundDash = name.rfind("-");
+ size_t const foundUnderscore = name.rfind("_", foundDash);
+ if (foundDash == string::npos || foundUnderscore == string::npos ||
+ foundDash <= foundUnderscore ||
+ name.substr(foundUnderscore+1, foundDash-(foundUnderscore+1)) != "Translation")
+ continue;
+ string const c = name.substr(foundDash+1);
+ if (unlikely(c.empty() == true) || c == "en")
+ continue;
+ // Skip unusual files, like backups or that alike
+ string::const_iterator s = c.begin();
+ for (;s != c.end(); ++s) {
+ if (isalpha(*s) == 0 && *s != '_')
+ break;
+ }
+ if (s != c.end())
+ continue;
+ if (std::find(builtin.begin(), builtin.end(), c) != builtin.end())
+ continue;
+ builtin.push_back(c);
+ }
+ closedir(D);
+ }
+
+ // FIXME: Remove support for the old APT::Acquire::Translation
+ // it was undocumented and so it should be not very widthly used
+ string const oldAcquire = _config->Find("APT::Acquire::Translation","");
+ if (oldAcquire.empty() == false && oldAcquire != "environment") {
+ // TRANSLATORS: the two %s are APT configuration options
+ _error->Notice("Option '%s' is deprecated. Please use '%s' instead, see 'man 5 apt.conf' for details.",
+ "APT::Acquire::Translation", "Acquire::Languages");
+ if (oldAcquire != "none")
+ codes.push_back(oldAcquire);
+ codes.push_back("en");
+ allCodes = codes;
+ for (std::vector<string>::const_iterator b = builtin.begin();
+ b != builtin.end(); ++b)
+ if (std::find(allCodes.begin(), allCodes.end(), *b) == allCodes.end())
+ allCodes.push_back(*b);
+ if (All == true)
+ return allCodes;
+ else
+ return codes;
+ }
+
+ // get the environment language codes: LC_MESSAGES (and later LANGUAGE)
+ // we extract both, a long and a short code and then we will
+ // check if we actually need both (rare) or if the short is enough
+ string const envMsg = string(Locale == 0 ? ::setlocale(LC_MESSAGES, NULL) : *Locale);
+ size_t const lenShort = (envMsg.find('_') != string::npos) ? envMsg.find('_') : 2;
+ size_t const lenLong = (envMsg.find_first_of(".@") != string::npos) ? envMsg.find_first_of(".@") : (lenShort + 3);
+
+ string const envLong = envMsg.substr(0,lenLong);
+ string const envShort = envLong.substr(0,lenShort);
+
+ // It is very likely we will need the environment codes later,
+ // so let us generate them now from LC_MESSAGES and LANGUAGE
+ std::vector<string> environment;
+ if (envShort != "C") {
+ // take care of LC_MESSAGES
+ if (envLong != envShort)
+ environment.push_back(envLong);
+ environment.push_back(envShort);
+ // take care of LANGUAGE
+ const char *language_env = getenv("LANGUAGE") == 0 ? "" : getenv("LANGUAGE");
+ string envLang = Locale == 0 ? language_env : *(Locale+1);
+ if (envLang.empty() == false) {
+ std::vector<string> env = VectorizeString(envLang,':');
+ short addedLangs = 0; // add a maximum of 3 fallbacks from the environment
+ for (std::vector<string>::const_iterator e = env.begin();
+ e != env.end() && addedLangs < 3; ++e) {
+ if (unlikely(e->empty() == true) || *e == "en")
+ continue;
+ if (*e == envLong || *e == envShort)
+ continue;
+ if (std::find(environment.begin(), environment.end(), *e) != environment.end())
+ continue;
+ ++addedLangs;
+ environment.push_back(*e);
+ }
+ }
+ } else {
+ // cornercase: LANG=C, so we use only "en" Translation
+ environment.push_back("en");
+ }
+
+ std::vector<string> const lang = _config->FindVector("Acquire::Languages", "environment,en");
+ // the configs define the order, so add the environment
+ // then needed and ensure the codes are not listed twice.
+ bool noneSeen = false;
+ for (std::vector<string>::const_iterator l = lang.begin();
+ l != lang.end(); ++l) {
+ if (*l == "environment") {
+ for (std::vector<string>::const_iterator e = environment.begin();
+ e != environment.end(); ++e) {
+ if (std::find(allCodes.begin(), allCodes.end(), *e) != allCodes.end())
+ continue;
+ if (noneSeen == false)
+ codes.push_back(*e);
+ allCodes.push_back(*e);
+ }
+ continue;
+ } else if (*l == "none") {
+ noneSeen = true;
+ continue;
+ } else if (std::find(allCodes.begin(), allCodes.end(), *l) != allCodes.end())
+ continue;
+
+ if (noneSeen == false)
+ codes.push_back(*l);
+ allCodes.push_back(*l);
+ }
+
+ if (allCodes.empty() == false) {
+ for (std::vector<string>::const_iterator b = builtin.begin();
+ b != builtin.end(); ++b)
+ if (std::find(allCodes.begin(), allCodes.end(), *b) == allCodes.end())
+ allCodes.push_back(*b);
+ } else {
+ // "none" was forced
+ allCodes.push_back("none");
+ }
+
+ if (All == true)
+ return allCodes;
+ else
+ return codes;
+}
+ /*}}}*/
+// checkLanguage - are we interested in the given Language? /*{{{*/
+bool Configuration::checkLanguage(std::string Lang, bool const All) {
+ // the empty Language is always interesting as it is the original
+ if (Lang.empty() == true)
+ return true;
+ // filenames are encoded, so undo this
+ Lang = SubstVar(Lang, "%5f", "_");
+ std::vector<std::string> const langs = getLanguages(All, true);
+ return (std::find(langs.begin(), langs.end(), Lang) != langs.end());
+}
+ /*}}}*/
+// getArchitectures - Return Vector of preferred Architectures /*{{{*/
+std::vector<std::string> const Configuration::getArchitectures(bool const &Cached) {
+ using std::string;
+
+ std::vector<string> static archs;
+ if (likely(Cached == true) && archs.empty() == false)
+ return archs;
+
+ string const arch = _config->Find("APT::Architecture");
+ archs = _config->FindVector("APT::Architectures");
+
+ if (archs.empty() == true && _system != nullptr)
+ archs = _system->ArchitecturesSupported();
+
+ if (archs.empty() == true ||
+ std::find(archs.begin(), archs.end(), arch) == archs.end())
+ archs.insert(archs.begin(), arch);
+
+ // erase duplicates and empty strings
+ for (std::vector<string>::reverse_iterator a = archs.rbegin();
+ a != archs.rend(); ++a) {
+ if (a->empty() == true || std::find(a + 1, archs.rend(), *a) != archs.rend())
+ archs.erase(a.base()-1);
+ if (a == archs.rend())
+ break;
+ }
+
+ return archs;
+}
+ /*}}}*/
+// checkArchitecture - are we interested in the given Architecture? /*{{{*/
+bool Configuration::checkArchitecture(std::string const &Arch) {
+ if (Arch == "all")
+ return true;
+ std::vector<std::string> const archs = getArchitectures(true);
+ return (std::find(archs.begin(), archs.end(), Arch) != archs.end());
+}
+ /*}}}*/
+// getCompressors - Return Vector of usealbe compressors /*{{{*/
+// ---------------------------------------------------------------------
+/* return a vector of compressors used by apt-ftparchive in the
+ multicompress functionality or to detect data.tar files */
+std::vector<APT::Configuration::Compressor>
+const Configuration::getCompressors(bool const Cached) {
+ static std::vector<APT::Configuration::Compressor> compressors;
+ if (compressors.empty() == false) {
+ if (Cached == true)
+ return compressors;
+ else
+ compressors.clear();
+ }
+
+ setDefaultConfigurationForCompressors();
+
+ std::vector<std::string> CompressorsDone;
+# define APT_ADD_COMPRESSOR(NAME, EXT, BINARY, ARG, DEARG, COST) \
+ { CompressorsDone.push_back(NAME); compressors.emplace_back(NAME, EXT, BINARY, ARG, DEARG, COST); }
+ APT_ADD_COMPRESSOR(".", "", "", nullptr, nullptr, 0)
+ if (_config->Exists("Dir::Bin::zstd") == false || FileExists(_config->Find("Dir::Bin::zstd")) == true)
+ APT_ADD_COMPRESSOR("zstd", ".zst", "zstd", "-19", "-d", 60)
+#ifdef HAVE_ZSTD
+ else
+ APT_ADD_COMPRESSOR("zstd", ".zst", "false", nullptr, nullptr, 60)
+#endif
+ if (_config->Exists("Dir::Bin::lz4") == false || FileExists(_config->Find("Dir::Bin::lz4")) == true)
+ APT_ADD_COMPRESSOR("lz4",".lz4","lz4","-1","-d",50)
+#ifdef HAVE_LZ4
+ else
+ APT_ADD_COMPRESSOR("lz4",".lz4","false", nullptr, nullptr, 50)
+#endif
+ if (_config->Exists("Dir::Bin::gzip") == false || FileExists(_config->Find("Dir::Bin::gzip")) == true)
+ APT_ADD_COMPRESSOR("gzip",".gz","gzip","-6n","-d",100)
+#ifdef HAVE_ZLIB
+ else
+ APT_ADD_COMPRESSOR("gzip",".gz","false", nullptr, nullptr, 100)
+#endif
+ if (_config->Exists("Dir::Bin::xz") == false || FileExists(_config->Find("Dir::Bin::xz")) == true)
+ APT_ADD_COMPRESSOR("xz",".xz","xz","-6","-d",200)
+#ifdef HAVE_LZMA
+ else
+ APT_ADD_COMPRESSOR("xz",".xz","false", nullptr, nullptr, 200)
+#endif
+ if (_config->Exists("Dir::Bin::bzip2") == false || FileExists(_config->Find("Dir::Bin::bzip2")) == true)
+ APT_ADD_COMPRESSOR("bzip2",".bz2","bzip2","-6","-d",300)
+#ifdef HAVE_BZ2
+ else
+ APT_ADD_COMPRESSOR("bzip2",".bz2","false", nullptr, nullptr, 300)
+#endif
+ if (_config->Exists("Dir::Bin::lzma") == false || FileExists(_config->Find("Dir::Bin::lzma")) == true)
+ APT_ADD_COMPRESSOR("lzma",".lzma","lzma","-6","-d",400)
+#ifdef HAVE_LZMA
+ else
+ APT_ADD_COMPRESSOR("lzma",".lzma","false", nullptr, nullptr, 400)
+#endif
+
+ std::vector<std::string> const comp = _config->FindVector("APT::Compressor", "", true);
+ for (auto const &c: comp)
+ {
+ if (c.empty() || std::find(CompressorsDone.begin(), CompressorsDone.end(), c) != CompressorsDone.end())
+ continue;
+ compressors.push_back(Compressor(c.c_str(), std::string(".").append(c).c_str(), c.c_str(), nullptr, nullptr, 1000));
+ }
+
+ return compressors;
+}
+ /*}}}*/
+// getCompressorExtensions - supported data.tar extensions /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+std::vector<std::string> const Configuration::getCompressorExtensions() {
+ std::vector<APT::Configuration::Compressor> const compressors = getCompressors();
+ std::vector<std::string> ext;
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressors.begin();
+ c != compressors.end(); ++c)
+ if (c->Extension.empty() == false && c->Extension != ".")
+ ext.push_back(c->Extension);
+ return ext;
+}
+ /*}}}*/
+// Compressor constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+Configuration::Compressor::Compressor(char const *name, char const *extension,
+ char const *binary,
+ char const *compressArg, char const *uncompressArg,
+ unsigned short const cost) {
+ std::string const config = std::string("APT::Compressor::").append(name).append("::");
+ Name = _config->Find(std::string(config).append("Name"), name);
+ Extension = _config->Find(std::string(config).append("Extension"), extension);
+ Binary = _config->Find(std::string(config).append("Binary"), binary);
+ Cost = _config->FindI(std::string(config).append("Cost"), cost);
+ std::string const compConf = std::string(config).append("CompressArg");
+ if (_config->Exists(compConf) == true)
+ CompressArgs = _config->FindVector(compConf);
+ else if (compressArg != NULL)
+ CompressArgs.push_back(compressArg);
+ std::string const uncompConf = std::string(config).append("UncompressArg");
+ if (_config->Exists(uncompConf) == true)
+ UncompressArgs = _config->FindVector(uncompConf);
+ else if (uncompressArg != NULL)
+ UncompressArgs.push_back(uncompressArg);
+}
+ /*}}}*/
+// getBuildProfiles - return a vector of enabled build profiles /*{{{*/
+std::vector<std::string> const Configuration::getBuildProfiles() {
+ // order is: override value (~= commandline), environment variable, list (~= config file)
+ std::string profiles_env = getenv("DEB_BUILD_PROFILES") == 0 ? "" : getenv("DEB_BUILD_PROFILES");
+ if (profiles_env.empty() == false) {
+ profiles_env = SubstVar(profiles_env, " ", ",");
+ std::string const bp = _config->Find("APT::Build-Profiles");
+ _config->Clear("APT::Build-Profiles");
+ if (bp.empty() == false)
+ _config->Set("APT::Build-Profiles", bp);
+ }
+ return _config->FindVector("APT::Build-Profiles", profiles_env);
+}
+std::string const Configuration::getBuildProfilesString() {
+ std::vector<std::string> profiles = getBuildProfiles();
+ if (profiles.empty() == true)
+ return "";
+ std::vector<std::string>::const_iterator p = profiles.begin();
+ std::string list = *p;
+ for (++p; p != profiles.end(); ++p)
+ list.append(",").append(*p);
+ return list;
+}
+ /*}}}*/
+}
diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h
new file mode 100644
index 0000000..34621a2
--- /dev/null
+++ b/apt-pkg/aptconfiguration.h
@@ -0,0 +1,128 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/** \class APT::Configuration
+ * \brief Provide access methods to various configuration settings
+ *
+ * This class and their methods providing a layer around the usual access
+ * methods with _config to ensure that settings are correct and to be able
+ * to set defaults without the need to recheck it in every method again.
+ */
+ /*}}}*/
+#ifndef APT_CONFIGURATION_H
+#define APT_CONFIGURATION_H
+// Include Files /*{{{*/
+#include <limits>
+#include <string>
+#include <vector>
+ /*}}}*/
+namespace APT {
+namespace Configuration { /*{{{*/
+ /** \brief Returns a vector of usable Compression Types
+ *
+ * Files can be compressed in various ways to decrease the size of the
+ * download. Therefore the Acquiremethods support a few compression types
+ * and some archives provide also a few different types. This option
+ * group exists to give the user the choice to prefer one type over the
+ * other (some compression types are very resource intensive - great if you
+ * have a limited download, bad if you have a really lowpowered hardware.)
+ *
+ * This method ensures that the defaults are set and checks at runtime
+ * if the type can be used. E.g. the current default is to prefer bzip2
+ * over lzma and gz - if the bzip2 binary is not available it has not much
+ * sense in downloading the bz2 file, therefore we will not return bz2 as
+ * a usable compression type. The availability is checked with the settings
+ * in the Dir::Bin group.
+ *
+ * \param Cached saves the result so we need to calculated it only once
+ * this parameter should only be used for testing purposes.
+ *
+ * \return a vector of the compression types in the preferred usage order
+ */
+ std::vector<std::string> const getCompressionTypes(bool const &Cached = true);
+
+ /** \brief Returns a vector of Language Codes
+ *
+ * Languages can be defined with their two or five chars long code.
+ * This methods handles the various ways to set the preferred codes,
+ * honors the environment and ensures that the codes are not listed twice.
+ *
+ * The special word "environment" will be replaced with the long and the short
+ * code of the local settings and it will be insured that this will not add
+ * duplicates. So in an german local the setting "environment, de_DE, en, de"
+ * will result in "de_DE, de, en".
+ *
+ * Another special word is "none" which separates the preferred from all codes
+ * in this setting. So setting and method can be used to get codes the user want
+ * to see or to get all language codes APT (should) have Translations available.
+ *
+ * \param All return all codes or only codes for languages we want to use
+ * \param Cached saves the result so we need to calculated it only once
+ * this parameter should only be used for testing purposes.
+ * \param Locale don't get the locale from the system but use this one instead
+ * this parameter should only be used for testing purposes.
+ *
+ * \return a vector of (all) Language Codes in the preferred usage order
+ */
+ std::vector<std::string> const getLanguages(bool const &All = false,
+ bool const &Cached = true, char const ** const Locale = 0);
+
+ /** \brief Are we interested in the given Language?
+ *
+ * \param Lang is the language we want to check
+ * \param All defines if we check against all codes or only against used codes
+ * \return true if we are interested, false otherwise
+ */
+ bool checkLanguage(std::string Lang, bool const All = false);
+
+ /** \brief Returns a vector of Architectures we support
+ *
+ * \param Cached saves the result so we need to calculated it only once
+ * this parameter should only be used for testing purposes.
+ *
+ * \return a vector of Architectures in preferred order
+ */
+ std::vector<std::string> const getArchitectures(bool const &Cached = true);
+
+ /** \brief Are we interested in the given Architecture?
+ *
+ * \param Arch we want to check
+ * \return true if we are interested, false otherwise
+ */
+ bool checkArchitecture(std::string const &Arch);
+
+ /** \brief Representation of supported compressors */
+ struct Compressor {
+ std::string Name;
+ std::string Extension;
+ std::string Binary;
+ std::vector<std::string> CompressArgs;
+ std::vector<std::string> UncompressArgs;
+ unsigned short Cost;
+
+ Compressor(char const *name, char const *extension, char const *binary,
+ char const *compressArg, char const *uncompressArg,
+ unsigned short const cost);
+ Compressor() : Cost(std::numeric_limits<unsigned short>::max()) {};
+ };
+
+ /** \brief Return a vector of Compressors supported for data.tar's
+ *
+ * \param Cached saves the result so we need to calculated it only once
+ * this parameter should only be used for testing purposes.
+ *
+ * \return a vector of Compressors
+ */
+ std::vector<Compressor> const getCompressors(bool const Cached = true);
+
+ /** \brief Return a vector of extensions supported for data.tar's */
+ std::vector<std::string> const getCompressorExtensions();
+
+ /** \return Return a vector of enabled build profile specifications */
+ std::vector<std::string> const getBuildProfiles();
+ /** \return Return a comma-separated list of enabled build profile specifications */
+ std::string const getBuildProfilesString();
+ /*}}}*/
+}
+ /*}}}*/
+}
+#endif
diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc
new file mode 100644
index 0000000..9a1a6cf
--- /dev/null
+++ b/apt-pkg/cachefile.cc
@@ -0,0 +1,363 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CacheFile - Simple wrapper class for opening, generating and whatnot
+
+ This class implements a simple 2 line mechanism to open various sorts
+ of caches. It can operate as root, as not root, show progress and so on,
+ it transparently handles everything necessary.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/sourcelist.h>
+
+#include <memory>
+#include <string>
+#include <vector>
+#include <string.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+struct pkgCacheFile::Private
+{
+ bool WithLock = false;
+};
+
+// CacheFile::CacheFile - Constructor /*{{{*/
+pkgCacheFile::pkgCacheFile() : d(new Private()), ExternOwner(false), Map(NULL), Cache(NULL),
+ DCache(NULL), SrcList(NULL), Policy(NULL)
+{
+}
+pkgCacheFile::pkgCacheFile(pkgDepCache * const Owner) : d(new Private()), ExternOwner(true),
+ Map(&Owner->GetCache().GetMap()), Cache(&Owner->GetCache()),
+ DCache(Owner), SrcList(NULL), Policy(NULL)
+{
+}
+ /*}}}*/
+// CacheFile::~CacheFile - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgCacheFile::~pkgCacheFile()
+{
+ if (ExternOwner == false)
+ {
+ delete DCache;
+ delete Cache;
+ delete Map;
+ }
+ delete Policy;
+ delete SrcList;
+ if (d->WithLock == true)
+ _system->UnLock(true);
+
+ delete d;
+}
+ /*}}}*/
+// CacheFile::BuildCaches - Open and build the cache files /*{{{*/
+class APT_HIDDEN ScopedErrorMerge {
+public:
+ ScopedErrorMerge() { _error->PushToStack(); }
+ ~ScopedErrorMerge() { _error->MergeWithStack(); }
+};
+
+bool pkgCacheFile::BuildCaches(OpProgress *Progress, bool WithLock)
+{
+ std::unique_ptr<pkgCache> Cache;
+ std::unique_ptr<MMap> Map;
+
+ if (this->Cache != NULL)
+ return true;
+
+ ScopedErrorMerge sem;
+ if (_config->FindB("pkgCacheFile::Generate", true) == false)
+ {
+ FileFd file(_config->FindFile("Dir::Cache::pkgcache"), FileFd::ReadOnly);
+ if (file.IsOpen() == false || file.Failed())
+ return false;
+ Map.reset(new MMap(file, MMap::Public|MMap::ReadOnly));
+ if (unlikely(Map->validData() == false))
+ return false;
+ Cache.reset(new pkgCache(Map.get()));
+ if (_error->PendingError() == true)
+ return false;
+
+ this->Cache = Cache.release();
+ this->Map = Map.release();
+ return true;
+ }
+
+ if (WithLock == true)
+ {
+ if (_system->Lock() == false)
+ return false;
+ d->WithLock = true;
+ }
+
+ if (_error->PendingError() == true)
+ return false;
+
+ if (BuildSourceList(Progress) == false)
+ return false;
+
+ // Read the caches
+ MMap *TmpMap = nullptr;
+ pkgCache *TmpCache = nullptr;
+ bool Res = pkgCacheGenerator::MakeStatusCache(*SrcList,Progress,&TmpMap, &TmpCache, true);
+ Map.reset(TmpMap);
+ Cache.reset(TmpCache);
+ if (Progress != NULL)
+ Progress->Done();
+ if (Res == false)
+ return _error->Error(_("The package lists or status file could not be parsed or opened."));
+
+ /* This sux, remove it someday */
+ if (_error->PendingError() == true)
+ _error->Warning(_("You may want to run apt-get update to correct these problems"));
+
+ if (Cache == nullptr)
+ Cache.reset(new pkgCache(Map.get()));
+ if (_error->PendingError() == true)
+ return false;
+ this->Map = Map.release();
+ this->Cache = Cache.release();
+
+ return true;
+}
+ /*}}}*/
+// CacheFile::BuildSourceList - Open and build all relevant sources.list/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgCacheFile::BuildSourceList(OpProgress * /*Progress*/)
+{
+ std::unique_ptr<pkgSourceList> SrcList;
+ if (this->SrcList != NULL)
+ return true;
+
+ SrcList.reset(new pkgSourceList());
+ if (SrcList->ReadMainList() == false)
+ return _error->Error(_("The list of sources could not be read."));
+ this->SrcList = SrcList.release();
+ return true;
+}
+ /*}}}*/
+// CacheFile::BuildPolicy - Open and build all relevant preferences /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgCacheFile::BuildPolicy(OpProgress * /*Progress*/)
+{
+ std::unique_ptr<pkgPolicy> Policy;
+ if (this->Policy != NULL)
+ return true;
+
+ Policy.reset(new pkgPolicy(Cache));
+ if (_error->PendingError() == true)
+ return false;
+
+ ReadPinFile(*Policy);
+ ReadPinDir(*Policy);
+
+ this->Policy = Policy.release();
+ return _error->PendingError() == false;
+}
+ /*}}}*/
+// CacheFile::BuildDepCache - Open and build the dependency cache /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgCacheFile::BuildDepCache(OpProgress *Progress)
+{
+ if (BuildCaches(Progress, false) == false)
+ return false;
+
+ std::unique_ptr<pkgDepCache> DCache;
+ if (this->DCache != NULL)
+ return true;
+
+ if (BuildPolicy(Progress) == false)
+ return false;
+
+ DCache.reset(new pkgDepCache(Cache,Policy));
+ if (_error->PendingError() == true)
+ return false;
+ if (DCache->Init(Progress) == false)
+ return false;
+
+ this->DCache = DCache.release();
+ return true;
+}
+ /*}}}*/
+// CacheFile::Open - Open the cache files, creating if necessary /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgCacheFile::Open(OpProgress *Progress, bool WithLock)
+{
+ if (BuildCaches(Progress,WithLock) == false)
+ return false;
+
+ if (BuildPolicy(Progress) == false)
+ return false;
+
+ if (BuildDepCache(Progress) == false)
+ return false;
+
+ if (Progress != NULL)
+ Progress->Done();
+ if (_error->PendingError() == true)
+ return false;
+
+ return true;
+}
+ /*}}}*/
+bool pkgCacheFile::AddIndexFile(pkgIndexFile * const File) /*{{{*/
+{
+ if (SrcList == NULL)
+ if (BuildSourceList() == false)
+ return false;
+ SrcList->AddVolatileFile(File);
+
+ if (Cache == nullptr || File->HasPackages() == false || File->Exists() == false)
+ return true;
+
+ if (File->FindInCache(*Cache).end() == false)
+ return _error->Warning("Duplicate sources.list entry %s",
+ File->Describe().c_str());
+
+ if (ExternOwner == false)
+ {
+ delete DCache;
+ delete Cache;
+ }
+ delete Policy;
+ DCache = NULL;
+ Policy = NULL;
+ Cache = NULL;
+
+ if (ExternOwner == false)
+ {
+ // a dynamic mmap means that we have build at least parts of the cache
+ // in memory – which we might or might not have written to disk.
+ // Throwing away would therefore be a very costly operation we want to avoid
+ DynamicMMap * dynmmap = dynamic_cast<DynamicMMap*>(Map);
+ if (dynmmap != nullptr)
+ {
+ {
+ pkgCacheGenerator Gen(dynmmap, nullptr);
+ if (Gen.Start() == false || File->Merge(Gen, nullptr) == false)
+ return false;
+ }
+ Cache = new pkgCache(Map);
+ if (_error->PendingError() == true) {
+ delete Cache;
+ Cache = nullptr;
+ return false;
+ }
+ return true;
+ }
+ else
+ {
+ delete Map;
+ Map = NULL;
+ }
+ }
+ else
+ {
+ ExternOwner = false;
+ Map = NULL;
+ }
+ _system->UnLock(true);
+ return true;
+}
+ /*}}}*/
+// CacheFile::RemoveCaches - remove all cache files from disk /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgCacheFile::RemoveCaches()
+{
+ std::string const pkgcache = _config->FindFile("Dir::cache::pkgcache");
+ std::string const srcpkgcache = _config->FindFile("Dir::cache::srcpkgcache");
+
+ if (pkgcache.empty() == false && RealFileExists(pkgcache) == true)
+ RemoveFile("RemoveCaches", pkgcache);
+ if (srcpkgcache.empty() == false && RealFileExists(srcpkgcache) == true)
+ RemoveFile("RemoveCaches", srcpkgcache);
+ if (pkgcache.empty() == false)
+ {
+ std::string cachedir = flNotFile(pkgcache);
+ std::string cachefile = flNotDir(pkgcache);
+ if (cachedir.empty() != true && cachefile.empty() != true && DirectoryExists(cachedir) == true)
+ {
+ cachefile.append(".");
+ std::vector<std::string> caches = GetListOfFilesInDir(cachedir, false);
+ for (std::vector<std::string>::const_iterator file = caches.begin(); file != caches.end(); ++file)
+ {
+ std::string nuke = flNotDir(*file);
+ if (strncmp(cachefile.c_str(), nuke.c_str(), cachefile.length()) != 0)
+ continue;
+ RemoveFile("RemoveCaches", *file);
+ }
+ }
+ }
+
+ if (srcpkgcache.empty() == true)
+ return;
+
+ std::string cachedir = flNotFile(srcpkgcache);
+ std::string cachefile = flNotDir(srcpkgcache);
+ if (cachedir.empty() == true || cachefile.empty() == true || DirectoryExists(cachedir) == false)
+ return;
+ cachefile.append(".");
+ std::vector<std::string> caches = GetListOfFilesInDir(cachedir, false);
+ for (std::vector<std::string>::const_iterator file = caches.begin(); file != caches.end(); ++file)
+ {
+ std::string nuke = flNotDir(*file);
+ if (strncmp(cachefile.c_str(), nuke.c_str(), cachefile.length()) != 0)
+ continue;
+ RemoveFile("RemoveCaches", *file);
+ }
+}
+ /*}}}*/
+// CacheFile::Close - close the cache files /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgCacheFile::Close()
+{
+ if (ExternOwner == false)
+ {
+ delete DCache;
+ delete Cache;
+ delete Map;
+ }
+ else
+ ExternOwner = false;
+ delete Policy;
+ delete SrcList;
+ if (d->WithLock == true)
+ {
+ _system->UnLock(true);
+ d->WithLock = false;
+ }
+
+ Map = NULL;
+ DCache = NULL;
+ Policy = NULL;
+ Cache = NULL;
+ SrcList = NULL;
+}
+ /*}}}*/
diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h
new file mode 100644
index 0000000..ed5d5c5
--- /dev/null
+++ b/apt-pkg/cachefile.h
@@ -0,0 +1,95 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CacheFile - Simple wrapper class for opening, generating and whatnot
+
+ This class implements a simple 2 line mechanism to open various sorts
+ of caches. It can operate as root, as not root, show progress and so on,
+ it transparently handles everything necessary.
+
+ This means it can rebuild caches from the source list and instantiates
+ and prepares the standard policy mechanism.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_CACHEFILE_H
+#define PKGLIB_CACHEFILE_H
+
+#include <stddef.h>
+
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/sourcelist.h>
+#endif
+
+class MMap;
+class pkgPolicy;
+class pkgSourceList;
+class pkgIndexFile;
+class OpProgress;
+
+class pkgCacheFile
+{
+ struct Private;
+ /** \brief dpointer placeholder (for later in case we need it) */
+ Private *const d;
+ bool ExternOwner;
+
+ protected:
+ MMap *Map;
+ pkgCache *Cache;
+ pkgDepCache *DCache;
+ pkgSourceList *SrcList;
+
+ public:
+ pkgPolicy *Policy;
+
+ // We look pretty much exactly like a pointer to a dep cache
+ inline operator pkgCache &() const {return *Cache;};
+ inline operator pkgCache *() const {return Cache;};
+ inline operator pkgDepCache &() const {return *DCache;};
+ inline operator pkgDepCache *() const {return DCache;};
+ inline operator pkgPolicy &() const {return *Policy;};
+ inline operator pkgPolicy *() const {return Policy;};
+ inline operator pkgSourceList &() const {return *SrcList;};
+ inline operator pkgSourceList *() const {return SrcList;};
+ inline pkgDepCache *operator ->() const {return DCache;};
+ inline pkgDepCache &operator *() const {return *DCache;};
+ inline pkgDepCache::StateCache &operator [](pkgCache::PkgIterator const &I) const {return (*DCache)[I];};
+ inline unsigned char &operator [](pkgCache::DepIterator const &I) const {return (*DCache)[I];};
+
+ bool BuildCaches(OpProgress *Progress = NULL,bool WithLock = true);
+ APT_DEPRECATED_MSG("Pass Progress in as a pointer") bool BuildCaches(OpProgress &Progress,bool const &WithLock = true) { return BuildCaches(&Progress, WithLock); };
+ bool BuildSourceList(OpProgress *Progress = NULL);
+ bool BuildPolicy(OpProgress *Progress = NULL);
+ bool BuildDepCache(OpProgress *Progress = NULL);
+ bool Open(OpProgress *Progress = NULL, bool WithLock = true);
+ inline bool ReadOnlyOpen(OpProgress *Progress = NULL) { return Open(Progress, false); };
+ APT_DEPRECATED_MSG("Pass Progress in as a pointer") bool Open(OpProgress &Progress,bool const &WithLock = true) { return Open(&Progress, WithLock); };
+ static void RemoveCaches();
+ void Close();
+
+ bool AddIndexFile(pkgIndexFile * const File);
+
+ inline pkgCache* GetPkgCache() { BuildCaches(NULL, false); return Cache; };
+ inline pkgDepCache* GetDepCache() { BuildDepCache(); return DCache; };
+ inline pkgPolicy* GetPolicy() { BuildPolicy(); return Policy; };
+ inline pkgSourceList* GetSourceList() { BuildSourceList(); return SrcList; };
+
+ inline bool IsPkgCacheBuilt() const { return (Cache != NULL); };
+ inline bool IsDepCacheBuilt() const { return (DCache != NULL); };
+ inline bool IsPolicyBuilt() const { return (Policy != NULL); };
+ inline bool IsSrcListBuilt() const { return (SrcList != NULL); };
+
+ pkgCacheFile();
+ explicit pkgCacheFile(pkgDepCache * const Owner);
+ virtual ~pkgCacheFile();
+};
+
+#endif
diff --git a/apt-pkg/cachefilter.cc b/apt-pkg/cachefilter.cc
new file mode 100644
index 0000000..eadbb98
--- /dev/null
+++ b/apt-pkg/cachefilter.cc
@@ -0,0 +1,264 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/** \file cachefilter.h
+ Collection of functor classes */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cachefilter.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <string>
+#include <unordered_map>
+#include <fnmatch.h>
+#include <regex.h>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+namespace APT {
+
+APT_HIDDEN std::unordered_map<std::string, std::vector<std::string>> ArchToTupleMap;
+
+namespace CacheFilter {
+Matcher::~Matcher() {}
+PackageMatcher::~PackageMatcher() {}
+
+// Name matches RegEx /*{{{*/
+PackageNameMatchesRegEx::PackageNameMatchesRegEx(std::string const &Pattern) {
+ pattern = new regex_t;
+ int const Res = regcomp(pattern, Pattern.c_str(), REG_EXTENDED | REG_ICASE | REG_NOSUB);
+ if (Res == 0)
+ return;
+
+ delete pattern;
+ pattern = NULL;
+ char Error[300];
+ regerror(Res, pattern, Error, sizeof(Error));
+ _error->Error(_("Regex compilation error - %s"), Error);
+}
+bool PackageNameMatchesRegEx::operator() (pkgCache::PkgIterator const &Pkg) {
+ if (unlikely(pattern == NULL))
+ return false;
+ else
+ return regexec(pattern, Pkg.Name(), 0, 0, 0) == 0;
+}
+bool PackageNameMatchesRegEx::operator() (pkgCache::GrpIterator const &Grp) {
+ if (unlikely(pattern == NULL))
+ return false;
+ else
+ return regexec(pattern, Grp.Name(), 0, 0, 0) == 0;
+}
+PackageNameMatchesRegEx::~PackageNameMatchesRegEx() {
+ if (pattern == NULL)
+ return;
+ regfree(pattern);
+ delete pattern;
+}
+ /*}}}*/
+// Name matches Fnmatch /*{{{*/
+PackageNameMatchesFnmatch::PackageNameMatchesFnmatch(std::string const &Pattern) :
+ Pattern(Pattern) {}
+bool PackageNameMatchesFnmatch::operator() (pkgCache::PkgIterator const &Pkg) {
+ return fnmatch(Pattern.c_str(), Pkg.Name(), FNM_CASEFOLD) == 0;
+}
+bool PackageNameMatchesFnmatch::operator() (pkgCache::GrpIterator const &Grp) {
+ return fnmatch(Pattern.c_str(), Grp.Name(), FNM_CASEFOLD) == 0;
+}
+ /*}}}*/
+// Architecture matches <abi>-<libc>-<kernel>-<cpu> specification /*{{{*/
+//----------------------------------------------------------------------
+
+static std::vector<std::string> ArchToTuple(std::string arch) {
+ // Strip leading linux- from arch if present
+ // dpkg says this may disappear in the future
+ if (APT::String::Startswith(arch, std::string("linux-")))
+ arch = arch.substr(6);
+
+ auto it = ArchToTupleMap.find(arch);
+ if (it != ArchToTupleMap.end())
+ {
+ std::vector<std::string> result = it->second;
+ // Hack in support for triplets
+ if (result.size() == 3)
+ result.emplace(result.begin(), "base");
+ return result;
+ } else
+ {
+ return {};
+ }
+}
+
+static std::vector<std::string> PatternToTuple(std::string const &arch) {
+ std::vector<std::string> tuple = VectorizeString(arch, '-');
+ if (std::find(tuple.begin(), tuple.end(), std::string("any")) != tuple.end() ||
+ std::find(arch.begin(), arch.end(), '*') != arch.end()) {
+ while (tuple.size() < 4) {
+ tuple.emplace(tuple.begin(), "any");
+ }
+ return tuple;
+ } else
+ return ArchToTuple(arch);
+}
+
+/* The complete architecture, consisting of <abi>-<libc>-<kernel>-<cpu>. */
+static std::string CompleteArch(std::string const &arch, bool const isPattern) {
+ auto tuple = isPattern ? PatternToTuple(arch) : ArchToTuple(arch);
+
+ // Bah, the commandline will try and pass us stuff like amd64- -- we need
+ // that not to match an architecture, but the code below would turn it into
+ // a valid tuple. Let's just use an invalid tuple here.
+ if (APT::String::Endswith(arch, "-") || APT::String::Startswith(arch, "-"))
+ return "invalid-invalid-invalid-invalid";
+
+ if (tuple.empty()) {
+ // Fallback for unknown architectures
+ // Patterns never fail if they contain wildcards, so by this point, arch
+ // has no wildcards.
+ tuple = VectorizeString(arch, '-');
+ switch (tuple.size()) {
+ case 1:
+ tuple.emplace(tuple.begin(), "linux");
+ /* fall through */
+ case 2:
+ tuple.emplace(tuple.begin(), "gnu");
+ /* fall through */
+ case 3:
+ tuple.emplace(tuple.begin(), "base");
+ /* fall through */
+ break;
+ }
+ }
+
+ std::replace(tuple.begin(), tuple.end(), std::string("any"), std::string("*"));
+ return APT::String::Join(tuple, "-");
+}
+PackageArchitectureMatchesSpecification::PackageArchitectureMatchesSpecification(std::string const &pattern, bool const pisPattern) :
+ literal(pattern), complete(CompleteArch(pattern, pisPattern)), isPattern(pisPattern) {
+}
+bool PackageArchitectureMatchesSpecification::operator() (char const * const &arch) {
+ if (strcmp(literal.c_str(), arch) == 0 ||
+ strcmp(complete.c_str(), arch) == 0)
+ return true;
+ std::string const pkgarch = CompleteArch(arch, !isPattern);
+ if (isPattern == true)
+ return fnmatch(complete.c_str(), pkgarch.c_str(), 0) == 0;
+ return fnmatch(pkgarch.c_str(), complete.c_str(), 0) == 0;
+}
+bool PackageArchitectureMatchesSpecification::operator() (pkgCache::PkgIterator const &Pkg) {
+ return (*this)(Pkg.Arch());
+}
+PackageArchitectureMatchesSpecification::~PackageArchitectureMatchesSpecification() {
+}
+ /*}}}*/
+// Package is new install /*{{{*/
+PackageIsNewInstall::PackageIsNewInstall(pkgCacheFile * const Cache) : Cache(Cache) {}
+APT_PURE bool PackageIsNewInstall::operator() (pkgCache::PkgIterator const &Pkg) {
+ return (*Cache)[Pkg].NewInstall();
+}
+PackageIsNewInstall::~PackageIsNewInstall() {}
+ /*}}}*/
+// Generica like True, False, NOT, AND, OR /*{{{*/
+APT_PURE bool TrueMatcher::operator() (pkgCache::PkgIterator const &) { return true; }
+APT_PURE bool TrueMatcher::operator() (pkgCache::GrpIterator const &) { return true; }
+APT_PURE bool TrueMatcher::operator() (pkgCache::VerIterator const &) { return true; }
+
+APT_PURE bool FalseMatcher::operator() (pkgCache::PkgIterator const &) { return false; }
+APT_PURE bool FalseMatcher::operator() (pkgCache::GrpIterator const &) { return false; }
+APT_PURE bool FalseMatcher::operator() (pkgCache::VerIterator const &) { return false; }
+
+NOTMatcher::NOTMatcher(Matcher * const matcher) : matcher(matcher) {}
+bool NOTMatcher::operator() (pkgCache::PkgIterator const &Pkg) { return ! (*matcher)(Pkg); }
+bool NOTMatcher::operator() (pkgCache::GrpIterator const &Grp) { return ! (*matcher)(Grp); }
+bool NOTMatcher::operator() (pkgCache::VerIterator const &Ver) { return ! (*matcher)(Ver); }
+NOTMatcher::~NOTMatcher() { delete matcher; }
+
+ANDMatcher::ANDMatcher() {}
+ANDMatcher::ANDMatcher(Matcher * const matcher1) {
+ AND(matcher1);
+}
+ANDMatcher::ANDMatcher(Matcher * const matcher1, Matcher * const matcher2) {
+ AND(matcher1).AND(matcher2);
+}
+ANDMatcher::ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3) {
+ AND(matcher1).AND(matcher2).AND(matcher3);
+}
+ANDMatcher::ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4) {
+ AND(matcher1).AND(matcher2).AND(matcher3).AND(matcher4);
+}
+ANDMatcher::ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5) {
+ AND(matcher1).AND(matcher2).AND(matcher3).AND(matcher4).AND(matcher5);
+}
+ANDMatcher& ANDMatcher::AND(Matcher * const matcher) { matchers.push_back(matcher); return *this; }
+bool ANDMatcher::operator() (pkgCache::PkgIterator const &Pkg) {
+ for (std::vector<Matcher *>::const_iterator M = matchers.begin(); M != matchers.end(); ++M)
+ if ((**M)(Pkg) == false)
+ return false;
+ return true;
+}
+bool ANDMatcher::operator() (pkgCache::GrpIterator const &Grp) {
+ for (std::vector<Matcher *>::const_iterator M = matchers.begin(); M != matchers.end(); ++M)
+ if ((**M)(Grp) == false)
+ return false;
+ return true;
+}
+bool ANDMatcher::operator() (pkgCache::VerIterator const &Ver) {
+ for (std::vector<Matcher *>::const_iterator M = matchers.begin(); M != matchers.end(); ++M)
+ if ((**M)(Ver) == false)
+ return false;
+ return true;
+}
+ANDMatcher::~ANDMatcher() {
+ for (std::vector<Matcher *>::iterator M = matchers.begin(); M != matchers.end(); ++M)
+ delete *M;
+}
+
+ORMatcher::ORMatcher() {}
+ORMatcher::ORMatcher(Matcher * const matcher1) {
+ OR(matcher1);
+}
+ORMatcher::ORMatcher(Matcher * const matcher1, Matcher * const matcher2) {
+ OR(matcher1).OR(matcher2);
+}
+ORMatcher::ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3) {
+ OR(matcher1).OR(matcher2).OR(matcher3);
+}
+ORMatcher::ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4) {
+ OR(matcher1).OR(matcher2).OR(matcher3).OR(matcher4);
+}
+ORMatcher::ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5) {
+ OR(matcher1).OR(matcher2).OR(matcher3).OR(matcher4).OR(matcher5);
+}
+ORMatcher& ORMatcher::OR(Matcher * const matcher) { matchers.push_back(matcher); return *this; }
+bool ORMatcher::operator() (pkgCache::PkgIterator const &Pkg) {
+ for (std::vector<Matcher *>::const_iterator M = matchers.begin(); M != matchers.end(); ++M)
+ if ((**M)(Pkg) == true)
+ return true;
+ return false;
+}
+bool ORMatcher::operator() (pkgCache::GrpIterator const &Grp) {
+ for (std::vector<Matcher *>::const_iterator M = matchers.begin(); M != matchers.end(); ++M)
+ if ((**M)(Grp) == true)
+ return true;
+ return false;
+}
+bool ORMatcher::operator() (pkgCache::VerIterator const &Ver) {
+ for (std::vector<Matcher *>::const_iterator M = matchers.begin(); M != matchers.end(); ++M)
+ if ((**M)(Ver) == true)
+ return true;
+ return false;
+}
+ORMatcher::~ORMatcher() {
+ for (std::vector<Matcher *>::iterator M = matchers.begin(); M != matchers.end(); ++M)
+ delete *M;
+}
+ /*}}}*/
+
+}
+}
diff --git a/apt-pkg/cachefilter.h b/apt-pkg/cachefilter.h
new file mode 100644
index 0000000..8a6c013
--- /dev/null
+++ b/apt-pkg/cachefilter.h
@@ -0,0 +1,150 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/** \file cachefilter.h
+ Collection of functor classes */
+ /*}}}*/
+#ifndef APT_CACHEFILTER_H
+#define APT_CACHEFILTER_H
+// Include Files /*{{{*/
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+#include <vector>
+
+#include <regex.h>
+
+class pkgCacheFile;
+ /*}}}*/
+namespace APT {
+namespace CacheFilter {
+
+class Matcher {
+public:
+ virtual bool operator() (pkgCache::PkgIterator const &/*Pkg*/) = 0;
+ virtual bool operator() (pkgCache::GrpIterator const &/*Grp*/) = 0;
+ virtual bool operator() (pkgCache::VerIterator const &/*Ver*/) = 0;
+ virtual ~Matcher();
+};
+
+class PackageMatcher : public Matcher {
+public:
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE = 0;
+ virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE { return (*this)(Ver.ParentPkg()); }
+ virtual bool operator() (pkgCache::GrpIterator const &/*Grp*/) APT_OVERRIDE { return false; }
+ virtual ~PackageMatcher();
+};
+
+// Generica like True, False, NOT, AND, OR /*{{{*/
+class TrueMatcher : public Matcher {
+public:
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
+};
+
+class FalseMatcher : public Matcher {
+public:
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
+};
+
+class NOTMatcher : public Matcher {
+ Matcher * const matcher;
+public:
+ explicit NOTMatcher(Matcher * const matcher);
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
+ virtual ~NOTMatcher();
+};
+
+class ANDMatcher : public Matcher {
+ std::vector<Matcher *> matchers;
+public:
+ // 5 ought to be enough for everybody… c++11 variadic templates would be nice
+ ANDMatcher();
+ explicit ANDMatcher(Matcher * const matcher1);
+ ANDMatcher(Matcher * const matcher1, Matcher * const matcher2);
+ ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3);
+ ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4);
+ ANDMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5);
+ ANDMatcher& AND(Matcher * const matcher);
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
+ virtual ~ANDMatcher();
+};
+class ORMatcher : public Matcher {
+ std::vector<Matcher *> matchers;
+public:
+ // 5 ought to be enough for everybody… c++11 variadic templates would be nice
+ ORMatcher();
+ explicit ORMatcher(Matcher * const matcher1);
+ ORMatcher(Matcher * const matcher1, Matcher * const matcher2);
+ ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3);
+ ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4);
+ ORMatcher(Matcher * const matcher1, Matcher * const matcher2, Matcher * const matcher3, Matcher * const matcher4, Matcher * const matcher5);
+ ORMatcher& OR(Matcher * const matcher);
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE;
+ virtual ~ORMatcher();
+};
+ /*}}}*/
+class PackageNameMatchesRegEx : public PackageMatcher { /*{{{*/
+ regex_t* pattern;
+public:
+ explicit PackageNameMatchesRegEx(std::string const &Pattern);
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
+ virtual ~PackageNameMatchesRegEx();
+};
+ /*}}}*/
+class PackageNameMatchesFnmatch : public PackageMatcher { /*{{{*/
+ const std::string Pattern;
+public:
+ explicit PackageNameMatchesFnmatch(std::string const &Pattern);
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE;
+ virtual ~PackageNameMatchesFnmatch() {};
+};
+ /*}}}*/
+class PackageArchitectureMatchesSpecification : public PackageMatcher { /*{{{*/
+/** \class PackageArchitectureMatchesSpecification
+ \brief matching against architecture specification strings
+
+ The strings are of the format <libc>-<kernel>-<cpu> where either component,
+ or the whole string, can be the wildcard "any" as defined in
+ debian-policy §11.1 "Architecture specification strings".
+
+ Examples: i386, mipsel, musl-linux-amd64, linux-any, any-amd64, any */
+ std::string literal;
+ std::string complete;
+ bool isPattern;
+public:
+ /** \brief matching against architecture specification strings
+ *
+ * @param pattern is the architecture specification string
+ * @param isPattern defines if the given \b pattern is a
+ * architecture specification pattern to match others against
+ * or if it is the fixed string and matched against patterns
+ */
+ PackageArchitectureMatchesSpecification(std::string const &pattern, bool const isPattern = true);
+ bool operator() (char const * const &arch);
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual ~PackageArchitectureMatchesSpecification();
+};
+ /*}}}*/
+class PackageIsNewInstall : public PackageMatcher { /*{{{*/
+ pkgCacheFile * const Cache;
+public:
+ explicit PackageIsNewInstall(pkgCacheFile * const Cache);
+ virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual ~PackageIsNewInstall();
+};
+ /*}}}*/
+
+}
+}
+#endif
diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h
new file mode 100644
index 0000000..2085306
--- /dev/null
+++ b/apt-pkg/cacheiterators.h
@@ -0,0 +1,531 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Cache Iterators - Iterators for navigating the cache structure
+
+ The iterators all provides ++,==,!=,->,* and end for their type.
+ The end function can be used to tell if the list has been fully
+ traversed.
+
+ Unlike STL iterators these contain helper functions to access the data
+ that is being iterated over. This is because the data structures can't
+ be formed in a manner that is intuitive to use and also mmapable.
+
+ For each variable in the target structure that would need a translation
+ to be accessed correctly a translating function of the same name is
+ present in the iterator. If applicable the translating function will
+ return an iterator.
+
+ The DepIterator can iterate over two lists, a list of 'version depends'
+ or a list of 'package reverse depends'. The type is determined by the
+ structure passed to the constructor, which should be the structure
+ that has the depends pointer as a member. The provide iterator has the
+ same system.
+
+ This header is not user includable, please use apt-pkg/pkgcache.h
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_CACHEITERATORS_H
+#define PKGLIB_CACHEITERATORS_H
+#ifndef __PKGLIB_IN_PKGCACHE_H
+#warning apt-pkg/cacheiterators.h should not be included directly, include apt-pkg/pkgcache.h instead
+#endif
+#include <apt-pkg/macros.h>
+
+#include <iosfwd>
+#include <iterator>
+#include <string>
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+#include <apt-pkg/string_view.h>
+#endif
+
+#include <string.h>
+
+// abstract Iterator template /*{{{*/
+/* This template provides the very basic iterator methods we
+ need to have for doing some walk-over-the-cache magic */
+template<typename Str, typename Itr> class pkgCache::Iterator :
+ public std::iterator<std::forward_iterator_tag, Str> {
+ /** \brief Returns the Pointer for this struct in the owner
+ * The implementation of this method should be pretty short
+ * as it will only return the Pointer into the mmap stored
+ * in the owner but the name of this pointer is different for
+ * each structure and we want to abstract here at least for the
+ * basic methods from the actual structure.
+ * \return Pointer to the first structure of this type
+ */
+ Str* OwnerPointer() const { return static_cast<Itr const*>(this)->OwnerPointer(); }
+
+ protected:
+ Str *S;
+ pkgCache *Owner;
+
+ public:
+ // Iteration
+ inline bool end() const {return Owner == 0 || S == OwnerPointer();}
+
+ // Comparison
+ inline bool operator ==(const Itr &B) const {return S == B.S;}
+ inline bool operator !=(const Itr &B) const {return S != B.S;}
+
+ // Accessors
+ inline Str *operator ->() {return S;}
+ inline Str const *operator ->() const {return S;}
+ inline operator Str *() {return S == OwnerPointer() ? 0 : S;}
+ inline operator Str const *() const {return S == OwnerPointer() ? 0 : S;}
+ inline Str &operator *() {return *S;}
+ inline Str const &operator *() const {return *S;}
+ inline pkgCache *Cache() const {return Owner;}
+
+ // Mixed stuff
+ inline bool IsGood() const { return S && Owner && ! end();}
+ inline unsigned long Index() const {return S - OwnerPointer();}
+
+ void ReMap(void const * const oldMap, void const * const newMap) {
+ if (Owner == 0 || S == 0)
+ return;
+ S += static_cast<Str const *>(newMap) - static_cast<Str const *>(oldMap);
+ }
+
+ // Constructors - look out for the variable assigning
+ inline Iterator() : S(0), Owner(0) {}
+ inline Iterator(pkgCache &Owner,Str *T = 0) : S(T), Owner(&Owner) {}
+};
+ /*}}}*/
+// Group Iterator /*{{{*/
+/* Packages with the same name are collected in a Group so someone only
+ interest in package names can iterate easily over the names, so the
+ different architectures can be treated as of the "same" package
+ (apt internally treat them as totally different packages) */
+class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> {
+ long HashIndex;
+
+ public:
+ inline Group* OwnerPointer() const {
+ return (Owner != 0) ? Owner->GrpP : 0;
+ }
+
+ // This constructor is the 'begin' constructor, never use it.
+ explicit inline GrpIterator(pkgCache &Owner) : Iterator<Group, GrpIterator>(Owner), HashIndex(-1) {
+ S = OwnerPointer();
+ operator++();
+ }
+
+ GrpIterator& operator++();
+ inline GrpIterator operator++(int) { GrpIterator const tmp(*this); operator++(); return tmp; }
+
+ inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}
+ inline PkgIterator PackageList() const;
+ PkgIterator FindPkg(std::string Arch = "any") const;
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN PkgIterator FindPkg(APT::StringView Arch = APT::StringView("any", 3)) const;
+ APT_HIDDEN PkgIterator FindPkg(const char *Arch) const;
+#endif
+ /** \brief find the package with the "best" architecture
+
+ The best architecture is either the "native" or the first
+ in the list of Architectures which is not an end-Pointer
+
+ \param PreferNonVirtual tries to respond with a non-virtual package
+ and only if this fails returns the best virtual package */
+ PkgIterator FindPreferredPkg(bool const &PreferNonVirtual = true) const;
+ PkgIterator NextPkg(PkgIterator const &Pkg) const;
+
+ // Constructors
+ inline GrpIterator(pkgCache &Owner, Group *Trg) : Iterator<Group, GrpIterator>(Owner, Trg), HashIndex(0) {
+ if (S == 0)
+ S = OwnerPointer();
+ }
+ inline GrpIterator() : Iterator<Group, GrpIterator>(), HashIndex(0) {}
+
+};
+ /*}}}*/
+// Package Iterator /*{{{*/
+class pkgCache::PkgIterator: public Iterator<Package, PkgIterator> {
+ long HashIndex;
+
+ public:
+ inline Package* OwnerPointer() const {
+ return (Owner != 0) ? Owner->PkgP : 0;
+ }
+
+ // This constructor is the 'begin' constructor, never use it.
+ explicit inline PkgIterator(pkgCache &Owner) : Iterator<Package, PkgIterator>(Owner), HashIndex(-1) {
+ S = OwnerPointer();
+ operator++();
+ }
+
+ PkgIterator& operator++();
+ inline PkgIterator operator++(int) { PkgIterator const tmp(*this); operator++(); return tmp; }
+
+ enum OkState {NeedsNothing,NeedsUnpack,NeedsConfigure};
+
+ // Accessors
+ inline const char *Name() const { return Group().Name(); }
+ // Versions have sections - and packages can have different versions with different sections
+ // so this interface is broken by design. Run as fast as you can to Version.Section().
+ APT_DEPRECATED_MSG("Use the .Section method of VerIterator instead") inline const char *Section() const;
+ inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge ||
+ (S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);}
+ inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;}
+ inline APT_PURE GrpIterator Group() const { return GrpIterator(*Owner, Owner->GrpP + S->Group);}
+
+ inline VerIterator VersionList() const APT_PURE;
+ inline VerIterator CurrentVer() const APT_PURE;
+ inline DepIterator RevDependsList() const APT_PURE;
+ inline PrvIterator ProvidesList() const APT_PURE;
+ OkState State() const APT_PURE;
+ APT_DEPRECATED_MSG("This method does not respect apt_preferences! Use pkgDepCache::GetCandidateVersion(Pkg)") const char *CandVersion() const APT_PURE;
+ const char *CurVersion() const APT_PURE;
+
+ //Nice printable representation
+ APT_DEPRECATED_MSG("Use APT::PrettyPkg instead") friend std::ostream& operator <<(std::ostream& out, PkgIterator i);
+ std::string FullName(bool const &Pretty = false) const;
+
+ // Constructors
+ inline PkgIterator(pkgCache &Owner,Package *Trg) : Iterator<Package, PkgIterator>(Owner, Trg), HashIndex(0) {
+ if (S == 0)
+ S = OwnerPointer();
+ }
+ inline PkgIterator() : Iterator<Package, PkgIterator>(), HashIndex(0) {}
+};
+ /*}}}*/
+// Version Iterator /*{{{*/
+class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
+ public:
+ inline Version* OwnerPointer() const {
+ return (Owner != 0) ? Owner->VerP : 0;
+ }
+
+ // Iteration
+ inline VerIterator& operator++() {if (S != Owner->VerP) S = Owner->VerP + S->NextVer; return *this;}
+ inline VerIterator operator++(int) { VerIterator const tmp(*this); operator++(); return tmp; }
+
+ // Comparison
+ int CompareVer(const VerIterator &B) const;
+ /** \brief compares two version and returns if they are similar
+
+ This method should be used to identify if two pseudo versions are
+ referring to the same "real" version */
+ inline bool SimilarVer(const VerIterator &B) const {
+ return (B.end() == false && S->Hash == B->Hash && strcmp(VerStr(), B.VerStr()) == 0);
+ }
+
+ // Accessors
+ inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;}
+ inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;}
+ /** \brief source package name this version comes from
+ Always contains the name, even if it is the same as the binary name */
+ inline const char *SourcePkgName() const {return Owner->StrP + S->SourcePkgName;}
+ /** \brief source version this version comes from
+ Always contains the version string, even if it is the same as the binary version */
+ inline const char *SourceVerStr() const {return Owner->StrP + S->SourceVerStr;}
+ inline const char *Arch() const {
+ if ((S->MultiArch & pkgCache::Version::All) == pkgCache::Version::All)
+ return "all";
+ return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
+ }
+ inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);}
+
+ inline DescIterator DescriptionList() const;
+ DescIterator TranslatedDescription() const;
+ inline DepIterator DependsList() const;
+ inline PrvIterator ProvidesList() const;
+ inline VerFileIterator FileList() const;
+ bool Downloadable() const;
+ inline const char *PriorityType() const {return Owner->Priority(S->Priority);}
+ const char *MultiArchType() const APT_PURE;
+ std::string RelStr() const;
+
+ bool Automatic() const;
+ VerFileIterator NewestFile() const;
+
+ inline VerIterator(pkgCache &Owner,Version *Trg = 0) : Iterator<Version, VerIterator>(Owner, Trg) {
+ if (S == 0)
+ S = OwnerPointer();
+ }
+ inline VerIterator() : Iterator<Version, VerIterator>() {}
+};
+ /*}}}*/
+// Description Iterator /*{{{*/
+class pkgCache::DescIterator : public Iterator<Description, DescIterator> {
+ public:
+ inline Description* OwnerPointer() const {
+ return (Owner != 0) ? Owner->DescP : 0;
+ }
+
+ // Iteration
+ inline DescIterator& operator++() {if (S != Owner->DescP) S = Owner->DescP + S->NextDesc; return *this;}
+ inline DescIterator operator++(int) { DescIterator const tmp(*this); operator++(); return tmp; }
+
+ // Comparison
+ int CompareDesc(const DescIterator &B) const;
+
+ // Accessors
+ inline const char *LanguageCode() const {return Owner->StrP + S->language_code;}
+ inline const char *md5() const {return Owner->StrP + S->md5sum;}
+ inline DescFileIterator FileList() const;
+
+ inline DescIterator() : Iterator<Description, DescIterator>() {}
+ inline DescIterator(pkgCache &Owner,Description *Trg = 0) : Iterator<Description, DescIterator>(Owner, Trg) {
+ if (S == 0)
+ S = Owner.DescP;
+ }
+};
+ /*}}}*/
+// Dependency iterator /*{{{*/
+class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
+ enum {DepVer, DepRev} Type;
+ DependencyData * S2;
+
+ public:
+ inline Dependency* OwnerPointer() const {
+ return (Owner != 0) ? Owner->DepP : 0;
+ }
+
+ // Iteration
+ DepIterator& operator++();
+ inline DepIterator operator++(int) { DepIterator const tmp(*this); operator++(); return tmp; }
+
+ // Accessors
+ inline const char *TargetVer() const {return S2->Version == 0?0:Owner->StrP + S2->Version;}
+ inline PkgIterator TargetPkg() const {return PkgIterator(*Owner,Owner->PkgP + S2->Package);}
+ inline PkgIterator SmartTargetPkg() const {PkgIterator R(*Owner,0);SmartTargetPkg(R);return R;}
+ inline VerIterator ParentVer() const {return VerIterator(*Owner,Owner->VerP + S->ParentVer);}
+ inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);}
+ inline bool Reverse() const {return Type == DepRev;}
+ bool IsCritical() const APT_PURE;
+ bool IsNegative() const APT_PURE;
+ bool IsIgnorable(PrvIterator const &Prv) const APT_PURE;
+ bool IsIgnorable(PkgIterator const &Pkg) const APT_PURE;
+ /* MultiArch can be translated to SingleArch for an resolver and we did so,
+ by adding dependencies to help the resolver understand the problem, but
+ sometimes it is needed to identify these to ignore them… */
+ inline bool IsMultiArchImplicit() const APT_PURE {
+ return (S2->CompareOp & pkgCache::Dep::MultiArchImplicit) == pkgCache::Dep::MultiArchImplicit;
+ }
+ /* This covers additionally negative dependencies, which aren't arch-specific,
+ but change architecture nonetheless as a Conflicts: foo does applies for all archs */
+ bool IsImplicit() const APT_PURE;
+
+ bool IsSatisfied(VerIterator const &Ver) const APT_PURE;
+ bool IsSatisfied(PrvIterator const &Prv) const APT_PURE;
+ void GlobOr(DepIterator &Start,DepIterator &End);
+ Version **AllTargets() const;
+ bool SmartTargetPkg(PkgIterator &Result) const;
+ inline const char *CompType() const {return Owner->CompType(S2->CompareOp);}
+ inline const char *DepType() const {return Owner->DepType(S2->Type);}
+
+ // overrides because we are special
+ struct DependencyProxy
+ {
+ map_stringitem_t &Version;
+ map_pointer_t &Package;
+ map_id_t &ID;
+ unsigned char &Type;
+ unsigned char &CompareOp;
+ map_pointer_t &ParentVer;
+ map_pointer_t &DependencyData;
+ map_pointer_t &NextRevDepends;
+ map_pointer_t &NextDepends;
+ map_pointer_t &NextData;
+ DependencyProxy const * operator->() const { return this; }
+ DependencyProxy * operator->() { return this; }
+ };
+ inline DependencyProxy operator->() const {return (DependencyProxy) { S2->Version, S2->Package, S->ID, S2->Type, S2->CompareOp, S->ParentVer, S->DependencyData, S->NextRevDepends, S->NextDepends, S2->NextData };}
+ inline DependencyProxy operator->() {return (DependencyProxy) { S2->Version, S2->Package, S->ID, S2->Type, S2->CompareOp, S->ParentVer, S->DependencyData, S->NextRevDepends, S->NextDepends, S2->NextData };}
+ void ReMap(void const * const oldMap, void const * const newMap)
+ {
+ Iterator<Dependency, DepIterator>::ReMap(oldMap, newMap);
+ if (Owner == 0 || S == 0 || S2 == 0)
+ return;
+ S2 += static_cast<DependencyData const *>(newMap) - static_cast<DependencyData const *>(oldMap);
+ }
+
+ //Nice printable representation
+ APT_DEPRECATED_MSG("Use APT::PrettyDep instead") friend std::ostream& operator <<(std::ostream& out, DepIterator D);
+
+ inline DepIterator(pkgCache &Owner, Dependency *Trg, Version* = 0) :
+ Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepVer), S2(Trg == 0 ? Owner.DepDataP : (Owner.DepDataP + Trg->DependencyData)) {
+ if (S == 0)
+ S = Owner.DepP;
+ }
+ inline DepIterator(pkgCache &Owner, Dependency *Trg, Package*) :
+ Iterator<Dependency, DepIterator>(Owner, Trg), Type(DepRev), S2(Trg == 0 ? Owner.DepDataP : (Owner.DepDataP + Trg->DependencyData)) {
+ if (S == 0)
+ S = Owner.DepP;
+ }
+ inline DepIterator() : Iterator<Dependency, DepIterator>(), Type(DepVer), S2(0) {}
+};
+ /*}}}*/
+// Provides iterator /*{{{*/
+class pkgCache::PrvIterator : public Iterator<Provides, PrvIterator> {
+ enum {PrvVer, PrvPkg} Type;
+
+ public:
+ inline Provides* OwnerPointer() const {
+ return (Owner != 0) ? Owner->ProvideP : 0;
+ }
+
+ // Iteration
+ inline PrvIterator& operator ++() {if (S != Owner->ProvideP) S = Owner->ProvideP +
+ (Type == PrvVer?S->NextPkgProv:S->NextProvides); return *this;}
+ inline PrvIterator operator++(int) { PrvIterator const tmp(*this); operator++(); return tmp; }
+
+ // Accessors
+ inline const char *Name() const {return ParentPkg().Name();}
+ inline const char *ProvideVersion() const {return S->ProvideVersion == 0?0:Owner->StrP + S->ProvideVersion;}
+ inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);}
+ inline VerIterator OwnerVer() const {return VerIterator(*Owner,Owner->VerP + S->Version);}
+ inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->Version].ParentPkg);}
+
+ /* MultiArch can be translated to SingleArch for an resolver and we did so,
+ by adding provides to help the resolver understand the problem, but
+ sometimes it is needed to identify these to ignore them… */
+ bool IsMultiArchImplicit() const APT_PURE
+ { return (S->Flags & pkgCache::Flag::MultiArchImplicit) == pkgCache::Flag::MultiArchImplicit; }
+
+
+ inline PrvIterator() : Iterator<Provides, PrvIterator>(), Type(PrvVer) {}
+ inline PrvIterator(pkgCache &Owner, Provides *Trg, Version*) :
+ Iterator<Provides, PrvIterator>(Owner, Trg), Type(PrvVer) {
+ if (S == 0)
+ S = Owner.ProvideP;
+ }
+ inline PrvIterator(pkgCache &Owner, Provides *Trg, Package*) :
+ Iterator<Provides, PrvIterator>(Owner, Trg), Type(PrvPkg) {
+ if (S == 0)
+ S = Owner.ProvideP;
+ }
+};
+ /*}}}*/
+// Release file /*{{{*/
+class pkgCache::RlsFileIterator : public Iterator<ReleaseFile, RlsFileIterator> {
+ public:
+ inline ReleaseFile* OwnerPointer() const {
+ return (Owner != 0) ? Owner->RlsFileP : 0;
+ }
+
+ // Iteration
+ inline RlsFileIterator& operator++() {if (S != Owner->RlsFileP) S = Owner->RlsFileP + S->NextFile;return *this;}
+ inline RlsFileIterator operator++(int) { RlsFileIterator const tmp(*this); operator++(); return tmp; }
+
+ // Accessors
+ inline const char *FileName() const {return S->FileName == 0?0:Owner->StrP + S->FileName;}
+ inline const char *Archive() const {return S->Archive == 0?0:Owner->StrP + S->Archive;}
+ inline const char *Version() const {return S->Version == 0?0:Owner->StrP + S->Version;}
+ inline const char *Origin() const {return S->Origin == 0?0:Owner->StrP + S->Origin;}
+ inline const char *Codename() const {return S->Codename ==0?0:Owner->StrP + S->Codename;}
+ inline const char *Label() const {return S->Label == 0?0:Owner->StrP + S->Label;}
+ inline const char *Site() const {return S->Site == 0?0:Owner->StrP + S->Site;}
+ inline bool Flagged(pkgCache::Flag::ReleaseFileFlags const flag) const {return (S->Flags & flag) == flag; }
+
+ APT_DEPRECATED_MSG("Can be remove without replacement; it is a no-op")
+ bool IsOk();
+ std::string RelStr();
+
+ // Constructors
+ inline RlsFileIterator() : Iterator<ReleaseFile, RlsFileIterator>() {}
+ explicit inline RlsFileIterator(pkgCache &Owner) : Iterator<ReleaseFile, RlsFileIterator>(Owner, Owner.RlsFileP) {}
+ inline RlsFileIterator(pkgCache &Owner,ReleaseFile *Trg) : Iterator<ReleaseFile, RlsFileIterator>(Owner, Trg) {}
+};
+ /*}}}*/
+// Package file /*{{{*/
+class pkgCache::PkgFileIterator : public Iterator<PackageFile, PkgFileIterator> {
+ public:
+ inline PackageFile* OwnerPointer() const {
+ return (Owner != 0) ? Owner->PkgFileP : 0;
+ }
+
+ // Iteration
+ inline PkgFileIterator& operator++() {if (S != Owner->PkgFileP) S = Owner->PkgFileP + S->NextFile; return *this;}
+ inline PkgFileIterator operator++(int) { PkgFileIterator const tmp(*this); operator++(); return tmp; }
+
+ // Accessors
+ inline const char *FileName() const {return S->FileName == 0?0:Owner->StrP + S->FileName;}
+ inline pkgCache::RlsFileIterator ReleaseFile() const {return RlsFileIterator(*Owner, Owner->RlsFileP + S->Release);}
+ inline const char *Archive() const {return S->Release == 0 ? Component() : ReleaseFile().Archive();}
+ inline const char *Version() const {return S->Release == 0 ? NULL : ReleaseFile().Version();}
+ inline const char *Origin() const {return S->Release == 0 ? NULL : ReleaseFile().Origin();}
+ inline const char *Codename() const {return S->Release == 0 ? NULL : ReleaseFile().Codename();}
+ inline const char *Label() const {return S->Release == 0 ? NULL : ReleaseFile().Label();}
+ inline const char *Site() const {return S->Release == 0 ? NULL : ReleaseFile().Site();}
+ inline bool Flagged(pkgCache::Flag::ReleaseFileFlags const flag) const {return S->Release== 0 ? false : ReleaseFile().Flagged(flag);}
+ inline bool Flagged(pkgCache::Flag::PkgFFlags const flag) const {return (S->Flags & flag) == flag;}
+ inline const char *Component() const {return S->Component == 0?0:Owner->StrP + S->Component;}
+ inline const char *Architecture() const {return S->Architecture == 0?0:Owner->StrP + S->Architecture;}
+ inline const char *IndexType() const {return S->IndexType == 0?0:Owner->StrP + S->IndexType;}
+
+ APT_DEPRECATED_MSG("Can be remove without replacement; it is a no-op")
+ bool IsOk();
+ std::string RelStr();
+
+ // Constructors
+ inline PkgFileIterator() : Iterator<PackageFile, PkgFileIterator>() {}
+ explicit inline PkgFileIterator(pkgCache &Owner) : Iterator<PackageFile, PkgFileIterator>(Owner, Owner.PkgFileP) {}
+ inline PkgFileIterator(pkgCache &Owner,PackageFile *Trg) : Iterator<PackageFile, PkgFileIterator>(Owner, Trg) {}
+};
+ /*}}}*/
+// Version File /*{{{*/
+class pkgCache::VerFileIterator : public pkgCache::Iterator<VerFile, VerFileIterator> {
+ public:
+ inline VerFile* OwnerPointer() const {
+ return (Owner != 0) ? Owner->VerFileP : 0;
+ }
+
+ // Iteration
+ inline VerFileIterator& operator++() {if (S != Owner->VerFileP) S = Owner->VerFileP + S->NextFile; return *this;}
+ inline VerFileIterator operator++(int) { VerFileIterator const tmp(*this); operator++(); return tmp; }
+
+ // Accessors
+ inline PkgFileIterator File() const {return PkgFileIterator(*Owner,S->File + Owner->PkgFileP);}
+
+ inline VerFileIterator() : Iterator<VerFile, VerFileIterator>() {}
+ inline VerFileIterator(pkgCache &Owner,VerFile *Trg) : Iterator<VerFile, VerFileIterator>(Owner, Trg) {}
+};
+ /*}}}*/
+// Description File /*{{{*/
+class pkgCache::DescFileIterator : public Iterator<DescFile, DescFileIterator> {
+ public:
+ inline DescFile* OwnerPointer() const {
+ return (Owner != 0) ? Owner->DescFileP : 0;
+ }
+
+ // Iteration
+ inline DescFileIterator& operator++() {if (S != Owner->DescFileP) S = Owner->DescFileP + S->NextFile; return *this;}
+ inline DescFileIterator operator++(int) { DescFileIterator const tmp(*this); operator++(); return tmp; }
+
+ // Accessors
+ inline PkgFileIterator File() const {return PkgFileIterator(*Owner,S->File + Owner->PkgFileP);}
+
+ inline DescFileIterator() : Iterator<DescFile, DescFileIterator>() {}
+ inline DescFileIterator(pkgCache &Owner,DescFile *Trg) : Iterator<DescFile, DescFileIterator>(Owner, Trg) {}
+};
+ /*}}}*/
+// Inlined Begin functions can't be in the class because of order problems /*{{{*/
+inline pkgCache::PkgIterator pkgCache::GrpIterator::PackageList() const
+ {return PkgIterator(*Owner,Owner->PkgP + S->FirstPackage);}
+inline pkgCache::VerIterator pkgCache::PkgIterator::VersionList() const
+ {return VerIterator(*Owner,Owner->VerP + S->VersionList);}
+inline pkgCache::VerIterator pkgCache::PkgIterator::CurrentVer() const
+ {return VerIterator(*Owner,Owner->VerP + S->CurrentVer);}
+inline pkgCache::DepIterator pkgCache::PkgIterator::RevDependsList() const
+ {return DepIterator(*Owner,Owner->DepP + S->RevDepends,S);}
+inline pkgCache::PrvIterator pkgCache::PkgIterator::ProvidesList() const
+ {return PrvIterator(*Owner,Owner->ProvideP + S->ProvidesList,S);}
+inline pkgCache::DescIterator pkgCache::VerIterator::DescriptionList() const
+ {return DescIterator(*Owner,Owner->DescP + S->DescriptionList);}
+inline pkgCache::PrvIterator pkgCache::VerIterator::ProvidesList() const
+ {return PrvIterator(*Owner,Owner->ProvideP + S->ProvidesList,S);}
+inline pkgCache::DepIterator pkgCache::VerIterator::DependsList() const
+ {return DepIterator(*Owner,Owner->DepP + S->DependsList,S);}
+inline pkgCache::VerFileIterator pkgCache::VerIterator::FileList() const
+ {return VerFileIterator(*Owner,Owner->VerFileP + S->FileList);}
+inline pkgCache::DescFileIterator pkgCache::DescIterator::FileList() const
+ {return DescFileIterator(*Owner,Owner->DescFileP + S->FileList);}
+APT_DEPRECATED_MSG("Use the .Section method of VerIterator instead") inline const char * pkgCache::PkgIterator::Section() const
+ {return S->VersionList == 0 ? 0 : VersionList().Section();}
+ /*}}}*/
+#endif
diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc
new file mode 100644
index 0000000..670cdba
--- /dev/null
+++ b/apt-pkg/cacheset.cc
@@ -0,0 +1,934 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Simple wrapper around a std::set to provide a similar interface to
+ a set of cache structures as to the complete set of all structures
+ in the pkgCache. Currently only Package is supported.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cachefilter.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/versionmatch.h>
+
+#include <list>
+#include <string>
+#include <vector>
+#include <regex.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+namespace APT {
+// PackageFrom - selecting the appropriate method for package selection /*{{{*/
+bool CacheSetHelper::PackageFrom(enum PkgSelector const select, PackageContainerInterface * const pci,
+ pkgCacheFile &Cache, std::string const &pattern) {
+ switch (select) {
+ case UNKNOWN: return false;
+ case REGEX: return PackageFromRegEx(pci, Cache, pattern);
+ case TASK: return PackageFromTask(pci, Cache, pattern);
+ case FNMATCH: return PackageFromFnmatch(pci, Cache, pattern);
+ case PACKAGENAME: return PackageFromPackageName(pci, Cache, pattern);
+ case STRING: return PackageFromString(pci, Cache, pattern);
+ }
+ return false;
+}
+ /*}}}*/
+// PackageFromTask - Return all packages in the cache from a specific task /*{{{*/
+bool CacheSetHelper::PackageFromTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern) {
+ size_t const archfound = pattern.find_last_of(':');
+ std::string arch = "native";
+ if (archfound != std::string::npos) {
+ arch = pattern.substr(archfound+1);
+ pattern.erase(archfound);
+ }
+
+ if (pattern[pattern.length() -1] != '^')
+ return false;
+ pattern.erase(pattern.length()-1);
+
+ if (unlikely(Cache.GetPkgCache() == 0 || Cache.GetDepCache() == 0))
+ return false;
+
+ bool const wasEmpty = pci->empty();
+ if (wasEmpty == true)
+ pci->setConstructor(CacheSetHelper::TASK);
+
+ // get the records
+ pkgRecords Recs(Cache);
+
+ // build regexp for the task
+ regex_t Pattern;
+ char S[300];
+ snprintf(S, sizeof(S), "^Task:.*[, ]%s([, ]|$)", pattern.c_str());
+ if(regcomp(&Pattern,S, REG_EXTENDED | REG_NOSUB | REG_NEWLINE) != 0) {
+ _error->Error("Failed to compile task regexp");
+ return false;
+ }
+
+ bool found = false;
+ for (pkgCache::GrpIterator Grp = Cache->GrpBegin(); Grp.end() == false; ++Grp) {
+ pkgCache::PkgIterator Pkg = Grp.FindPkg(arch);
+ if (Pkg.end() == true)
+ continue;
+ pkgCache::VerIterator ver = Cache[Pkg].CandidateVerIter(Cache);
+ if(ver.end() == true)
+ continue;
+
+ pkgRecords::Parser &parser = Recs.Lookup(ver.FileList());
+ const char *start, *end;
+ parser.GetRec(start,end);
+ unsigned int const length = end - start;
+ if (unlikely(length == 0))
+ continue;
+ char buf[length];
+ strncpy(buf, start, length);
+ buf[length-1] = '\0';
+ if (regexec(&Pattern, buf, 0, 0, 0) != 0)
+ continue;
+
+ pci->insert(Pkg);
+ showPackageSelection(Pkg, CacheSetHelper::TASK, pattern);
+ found = true;
+ }
+ regfree(&Pattern);
+
+ if (found == false) {
+ canNotFindPackage(CacheSetHelper::TASK, pci, Cache, pattern);
+ pci->setConstructor(CacheSetHelper::UNKNOWN);
+ return false;
+ }
+
+ if (wasEmpty == false && pci->getConstructor() != CacheSetHelper::UNKNOWN)
+ pci->setConstructor(CacheSetHelper::UNKNOWN);
+
+ return true;
+}
+ /*}}}*/
+// PackageFromRegEx - Return all packages in the cache matching a pattern /*{{{*/
+bool CacheSetHelper::PackageFromRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern) {
+ static const char * const isregex = ".?+*|[^$";
+ if (pattern.find_first_of(isregex) == std::string::npos)
+ return false;
+
+ bool const wasEmpty = pci->empty();
+ if (wasEmpty == true)
+ pci->setConstructor(CacheSetHelper::REGEX);
+
+ size_t archfound = pattern.find_last_of(':');
+ std::string arch = "native";
+ if (archfound != std::string::npos) {
+ arch = pattern.substr(archfound+1);
+ if (arch.find_first_of(isregex) == std::string::npos)
+ pattern.erase(archfound);
+ else
+ arch = "native";
+ }
+
+ if (unlikely(Cache.GetPkgCache() == 0))
+ return false;
+
+ APT::CacheFilter::PackageNameMatchesRegEx regexfilter(pattern);
+
+ bool found = false;
+ for (pkgCache::GrpIterator Grp = Cache.GetPkgCache()->GrpBegin(); Grp.end() == false; ++Grp) {
+ if (regexfilter(Grp) == false)
+ continue;
+ pkgCache::PkgIterator Pkg = Grp.FindPkg(arch);
+ if (Pkg.end() == true) {
+ if (archfound == std::string::npos)
+ Pkg = Grp.FindPreferredPkg(true);
+ if (Pkg.end() == true)
+ continue;
+ }
+
+ pci->insert(Pkg);
+ showPackageSelection(Pkg, CacheSetHelper::REGEX, pattern);
+ found = true;
+ }
+
+ if (found == false) {
+ canNotFindPackage(CacheSetHelper::REGEX, pci, Cache, pattern);
+ pci->setConstructor(CacheSetHelper::UNKNOWN);
+ return false;
+ }
+
+ if (wasEmpty == false && pci->getConstructor() != CacheSetHelper::UNKNOWN)
+ pci->setConstructor(CacheSetHelper::UNKNOWN);
+
+ return true;
+}
+ /*}}}*/
+// PackageFromFnmatch - Returns the package defined by this fnmatch /*{{{*/
+bool CacheSetHelper::PackageFromFnmatch(PackageContainerInterface * const pci,
+ pkgCacheFile &Cache, std::string pattern)
+{
+ static const char * const isfnmatch = ".?*[]!";
+ if (pattern.find_first_of(isfnmatch) == std::string::npos)
+ return false;
+
+ bool const wasEmpty = pci->empty();
+ if (wasEmpty == true)
+ pci->setConstructor(CacheSetHelper::FNMATCH);
+
+ size_t archfound = pattern.find_last_of(':');
+ std::string arch = "native";
+ if (archfound != std::string::npos) {
+ arch = pattern.substr(archfound+1);
+ if (arch.find_first_of(isfnmatch) == std::string::npos)
+ pattern.erase(archfound);
+ else
+ arch = "native";
+ }
+
+ if (unlikely(Cache.GetPkgCache() == 0))
+ return false;
+
+ APT::CacheFilter::PackageNameMatchesFnmatch filter(pattern);
+
+ bool found = false;
+ for (pkgCache::GrpIterator Grp = Cache.GetPkgCache()->GrpBegin(); Grp.end() == false; ++Grp) {
+ if (filter(Grp) == false)
+ continue;
+ pkgCache::PkgIterator Pkg = Grp.FindPkg(arch);
+ if (Pkg.end() == true) {
+ if (archfound == std::string::npos)
+ Pkg = Grp.FindPreferredPkg(true);
+ if (Pkg.end() == true)
+ continue;
+ }
+
+ pci->insert(Pkg);
+ showPackageSelection(Pkg, CacheSetHelper::FNMATCH, pattern);
+ found = true;
+ }
+
+ if (found == false) {
+ canNotFindPackage(CacheSetHelper::FNMATCH, pci, Cache, pattern);
+ pci->setConstructor(CacheSetHelper::UNKNOWN);
+ return false;
+ }
+
+ if (wasEmpty == false && pci->getConstructor() != CacheSetHelper::UNKNOWN)
+ pci->setConstructor(CacheSetHelper::UNKNOWN);
+
+ return true;
+}
+ /*}}}*/
+// PackageFromName - Returns the package defined by this string /*{{{*/
+pkgCache::PkgIterator CacheSetHelper::PackageFromName(pkgCacheFile &Cache,
+ std::string const &str) {
+ std::string pkg = str;
+ size_t archfound = pkg.find_last_of(':');
+ std::string arch;
+ if (archfound != std::string::npos) {
+ arch = pkg.substr(archfound+1);
+ pkg.erase(archfound);
+ }
+
+ if (Cache.GetPkgCache() == 0)
+ return pkgCache::PkgIterator(Cache, 0);
+
+ pkgCache::PkgIterator Pkg(Cache, 0);
+ if (arch.empty() == true) {
+ pkgCache::GrpIterator Grp = Cache.GetPkgCache()->FindGrp(pkg);
+ if (Grp.end() == false)
+ Pkg = Grp.FindPreferredPkg();
+ } else
+ Pkg = Cache.GetPkgCache()->FindPkg(pkg, arch);
+
+ if (Pkg.end() == true)
+ return canNotFindPkgName(Cache, str);
+ return Pkg;
+}
+ /*}}}*/
+// PackageFromPackageName - Returns the package defined by this string /*{{{*/
+bool CacheSetHelper::PackageFromPackageName(PackageContainerInterface * const pci, pkgCacheFile &Cache,
+ std::string pkg) {
+ if (unlikely(Cache.GetPkgCache() == 0))
+ return false;
+
+ std::string const pkgstring = pkg;
+ size_t const archfound = pkg.find_last_of(':');
+ std::string arch;
+ if (archfound != std::string::npos) {
+ arch = pkg.substr(archfound+1);
+ pkg.erase(archfound);
+ if (arch == "all" || arch == "native")
+ arch = _config->Find("APT::Architecture");
+ }
+
+ pkgCache::GrpIterator Grp = Cache.GetPkgCache()->FindGrp(pkg);
+ if (Grp.end() == false) {
+ if (arch.empty() == true) {
+ pkgCache::PkgIterator Pkg = Grp.FindPreferredPkg();
+ if (Pkg.end() == false)
+ {
+ pci->insert(Pkg);
+ return true;
+ }
+ } else {
+ bool found = false;
+ // for 'linux-any' return the first package matching, for 'linux-*' return all matches
+ bool const isGlobal = arch.find('*') != std::string::npos;
+ APT::CacheFilter::PackageArchitectureMatchesSpecification pams(arch);
+ for (pkgCache::PkgIterator Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg)) {
+ if (pams(Pkg) == false)
+ continue;
+ pci->insert(Pkg);
+ found = true;
+ if (isGlobal == false)
+ break;
+ }
+ if (found == true)
+ return true;
+ }
+ }
+
+ pkgCache::PkgIterator Pkg = canNotFindPkgName(Cache, pkgstring);
+ if (Pkg.end() == true)
+ return false;
+
+ pci->insert(Pkg);
+ return true;
+}
+ /*}}}*/
+// PackageFromString - Return all packages matching a specific string /*{{{*/
+bool CacheSetHelper::PackageFromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &str) {
+ bool found = true;
+ _error->PushToStack();
+
+ if (PackageFrom(CacheSetHelper::PACKAGENAME, pci, Cache, str) == false &&
+ PackageFrom(CacheSetHelper::TASK, pci, Cache, str) == false &&
+ // FIXME: hm, hm, regexp/fnmatch incompatible?
+ PackageFrom(CacheSetHelper::FNMATCH, pci, Cache, str) == false &&
+ PackageFrom(CacheSetHelper::REGEX, pci, Cache, str) == false)
+ {
+ canNotFindPackage(CacheSetHelper::PACKAGENAME, pci, Cache, str);
+ found = false;
+ }
+
+ if (found == true)
+ _error->RevertToStack();
+ else
+ _error->MergeWithStack();
+ return found;
+}
+ /*}}}*/
+// PackageFromCommandLine - Return all packages specified on commandline /*{{{*/
+bool CacheSetHelper::PackageFromCommandLine(PackageContainerInterface * const pci, pkgCacheFile &Cache, const char **cmdline) {
+ bool found = false;
+ for (const char **I = cmdline; *I != 0; ++I)
+ found |= PackageFrom(CacheSetHelper::STRING, pci, Cache, *I);
+ return found;
+}
+ /*}}}*/
+// FromModifierCommandLine - helper doing the work for PKG:GroupedFromCommandLine /*{{{*/
+bool CacheSetHelper::PackageFromModifierCommandLine(unsigned short &modID, PackageContainerInterface * const pci,
+ pkgCacheFile &Cache, const char * cmdline,
+ std::list<PkgModifier> const &mods) {
+ std::string str = cmdline;
+ unsigned short fallback = modID;
+ bool modifierPresent = false;
+ for (std::list<PkgModifier>::const_iterator mod = mods.begin();
+ mod != mods.end(); ++mod) {
+ size_t const alength = strlen(mod->Alias);
+ switch(mod->Pos) {
+ case PkgModifier::POSTFIX:
+ if (str.compare(str.length() - alength, alength,
+ mod->Alias, 0, alength) != 0)
+ continue;
+ str.erase(str.length() - alength);
+ modID = mod->ID;
+ break;
+ case PkgModifier::PREFIX:
+ continue;
+ case PkgModifier::NONE:
+ continue;
+ }
+ modifierPresent = true;
+ break;
+ }
+ if (modifierPresent == true) {
+ bool const errors = showErrors(false);
+ bool const found = PackageFrom(PACKAGENAME, pci, Cache, cmdline);
+ showErrors(errors);
+ if (found == true) {
+ modID = fallback;
+ return true;
+ }
+ }
+ return PackageFrom(CacheSetHelper::PACKAGENAME, pci, Cache, str);
+}
+ /*}}}*/
+// FromModifierCommandLine - helper doing the work for VER:GroupedFromCommandLine /*{{{*/
+bool VersionContainerInterface::FromModifierCommandLine(unsigned short &modID,
+ VersionContainerInterface * const vci,
+ pkgCacheFile &Cache, const char * cmdline,
+ std::list<Modifier> const &mods,
+ CacheSetHelper &helper) {
+ CacheSetHelper::VerSelector select = CacheSetHelper::NEWEST;
+ std::string str = cmdline;
+ if (unlikely(str.empty() == true))
+ return false;
+ bool modifierPresent = false;
+ unsigned short fallback = modID;
+ for (std::list<Modifier>::const_iterator mod = mods.begin();
+ mod != mods.end(); ++mod) {
+ if (modID == fallback && mod->ID == fallback)
+ select = mod->SelectVersion;
+ size_t const alength = strlen(mod->Alias);
+ switch(mod->Pos) {
+ case Modifier::POSTFIX:
+ if (str.length() <= alength ||
+ str.compare(str.length() - alength, alength, mod->Alias, 0, alength) != 0)
+ continue;
+ str.erase(str.length() - alength);
+ modID = mod->ID;
+ select = mod->SelectVersion;
+ break;
+ case Modifier::PREFIX:
+ continue;
+ case Modifier::NONE:
+ continue;
+ }
+ modifierPresent = true;
+ break;
+ }
+ if (modifierPresent == true) {
+ bool const errors = helper.showErrors(false);
+ bool const found = VersionContainerInterface::FromString(vci, Cache, cmdline, select, helper, true);
+ helper.showErrors(errors);
+ if (found == true) {
+ modID = fallback;
+ return true;
+ }
+ }
+ return FromString(vci, Cache, str, select, helper);
+}
+ /*}}}*/
+// FromCommandLine - Return all versions specified on commandline /*{{{*/
+bool VersionContainerInterface::FromCommandLine(VersionContainerInterface * const vci,
+ pkgCacheFile &Cache, const char **cmdline,
+ CacheSetHelper::VerSelector const fallback,
+ CacheSetHelper &helper) {
+ bool found = false;
+ for (const char **I = cmdline; *I != 0; ++I)
+ found |= VersionContainerInterface::FromString(vci, Cache, *I, fallback, helper);
+ return found;
+}
+ /*}}}*/
+// FromString - Returns all versions spedcified by a string /*{{{*/
+bool VersionContainerInterface::FromString(VersionContainerInterface * const vci,
+ pkgCacheFile &Cache, std::string pkg,
+ CacheSetHelper::VerSelector const fallback,
+ CacheSetHelper &helper,
+ bool const onlyFromName) {
+ std::string ver;
+ bool verIsRel = false;
+ size_t const vertag = pkg.find_last_of("/=");
+ if (vertag != std::string::npos) {
+ ver = pkg.substr(vertag+1);
+ verIsRel = (pkg[vertag] == '/');
+ pkg.erase(vertag);
+ }
+
+ PackageSet pkgset;
+ if (onlyFromName == false)
+ helper.PackageFrom(CacheSetHelper::STRING, &pkgset, Cache, pkg);
+ else {
+ helper.PackageFrom(CacheSetHelper::PACKAGENAME, &pkgset, Cache, pkg);
+ }
+
+ bool errors = true;
+ if (pkgset.getConstructor() != CacheSetHelper::UNKNOWN)
+ errors = helper.showErrors(false);
+
+ bool found = false;
+ for (PackageSet::const_iterator P = pkgset.begin();
+ P != pkgset.end(); ++P) {
+ if (vertag == std::string::npos) {
+ found |= VersionContainerInterface::FromPackage(vci, Cache, P, fallback, helper);
+ continue;
+ }
+ pkgCache::VerIterator V;
+ if (ver == "installed")
+ V = getInstalledVer(Cache, P, helper);
+ else if (ver == "candidate")
+ V = getCandidateVer(Cache, P, helper);
+ else if (ver == "newest") {
+ if (P->VersionList != 0)
+ V = P.VersionList();
+ else
+ V = helper.canNotGetVersion(CacheSetHelper::NEWEST, Cache, P);
+ } else {
+ pkgVersionMatch Match(ver, (verIsRel == true ? pkgVersionMatch::Release :
+ pkgVersionMatch::Version));
+ V = Match.Find(P);
+ if (V.end() == true) {
+ if (verIsRel == true)
+ _error->Error(_("Release '%s' for '%s' was not found"),
+ ver.c_str(), P.FullName(true).c_str());
+ else
+ _error->Error(_("Version '%s' for '%s' was not found"),
+ ver.c_str(), P.FullName(true).c_str());
+ continue;
+ }
+ }
+ if (V.end() == true)
+ continue;
+ if (verIsRel == true)
+ helper.showVersionSelection(P, V, CacheSetHelper::RELEASE, ver);
+ else
+ helper.showVersionSelection(P, V, CacheSetHelper::VERSIONNUMBER, ver);
+ vci->insert(V);
+ found = true;
+ }
+ if (pkgset.getConstructor() != CacheSetHelper::UNKNOWN)
+ helper.showErrors(errors);
+ return found;
+}
+ /*}}}*/
+// FromPackage - versions from package based on fallback /*{{{*/
+bool VersionContainerInterface::FromPackage(VersionContainerInterface * const vci,
+ pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &P,
+ CacheSetHelper::VerSelector const fallback,
+ CacheSetHelper &helper) {
+ pkgCache::VerIterator V;
+ bool showErrors;
+ bool found = false;
+ switch(fallback) {
+ case CacheSetHelper::ALL:
+ if (P->VersionList != 0)
+ for (V = P.VersionList(); V.end() != true; ++V)
+ found |= vci->insert(V);
+ else
+ helper.canNotFindVersion(CacheSetHelper::ALL, vci, Cache, P);
+ break;
+ case CacheSetHelper::CANDANDINST:
+ found |= vci->insert(getInstalledVer(Cache, P, helper));
+ found |= vci->insert(getCandidateVer(Cache, P, helper));
+ break;
+ case CacheSetHelper::CANDIDATE:
+ found |= vci->insert(getCandidateVer(Cache, P, helper));
+ break;
+ case CacheSetHelper::INSTALLED:
+ found |= vci->insert(getInstalledVer(Cache, P, helper));
+ break;
+ case CacheSetHelper::CANDINST:
+ showErrors = helper.showErrors(false);
+ V = getCandidateVer(Cache, P, helper);
+ if (V.end() == true)
+ V = getInstalledVer(Cache, P, helper);
+ helper.showErrors(showErrors);
+ if (V.end() == false)
+ found |= vci->insert(V);
+ else
+ helper.canNotFindVersion(CacheSetHelper::CANDINST, vci, Cache, P);
+ break;
+ case CacheSetHelper::INSTCAND:
+ showErrors = helper.showErrors(false);
+ V = getInstalledVer(Cache, P, helper);
+ if (V.end() == true)
+ V = getCandidateVer(Cache, P, helper);
+ helper.showErrors(showErrors);
+ if (V.end() == false)
+ found |= vci->insert(V);
+ else
+ helper.canNotFindVersion(CacheSetHelper::INSTCAND, vci, Cache, P);
+ break;
+ case CacheSetHelper::NEWEST:
+ if (P->VersionList != 0)
+ found |= vci->insert(P.VersionList());
+ else
+ helper.canNotFindVersion(CacheSetHelper::NEWEST, vci, Cache, P);
+ break;
+ case CacheSetHelper::RELEASE:
+ case CacheSetHelper::VERSIONNUMBER:
+ // both make no sense here, so always false
+ return false;
+ }
+ return found;
+}
+ /*}}}*/
+// FromDependency - versions satisfying a given dependency /*{{{*/
+bool VersionContainerInterface::FromDependency(VersionContainerInterface * const vci,
+ pkgCacheFile &Cache,
+ pkgCache::DepIterator const &D,
+ CacheSetHelper::VerSelector const selector,
+ CacheSetHelper &helper)
+{
+ bool found = false;
+ switch(selector) {
+ case CacheSetHelper::ALL:
+ {
+ pkgCache::PkgIterator const T = D.TargetPkg();
+ for (pkgCache::VerIterator Ver = T.VersionList(); Ver.end() == false; ++Ver)
+ {
+ if (D.IsSatisfied(Ver) == true)
+ {
+ vci->insert(Ver);
+ found = true;
+ }
+ for (pkgCache::PrvIterator Prv = T.ProvidesList(); Prv.end() != true; ++Prv)
+ {
+ pkgCache::VerIterator const V = Prv.OwnerVer();
+ if (unlikely(V.end() == true) || D.IsSatisfied(Prv) == false)
+ continue;
+ vci->insert(V);
+ found = true;
+ }
+ }
+ return found;
+ }
+ case CacheSetHelper::CANDANDINST:
+ {
+ found = FromDependency(vci, Cache, D, CacheSetHelper::CANDIDATE, helper);
+ found &= FromDependency(vci, Cache, D, CacheSetHelper::INSTALLED, helper);
+ return found;
+ }
+ case CacheSetHelper::CANDIDATE:
+ {
+ pkgCache::PkgIterator const T = D.TargetPkg();
+ pkgCache::VerIterator const Cand = Cache[T].CandidateVerIter(Cache);
+ if (Cand.end() == false && D.IsSatisfied(Cand) == true)
+ {
+ vci->insert(Cand);
+ found = true;
+ }
+ for (pkgCache::PrvIterator Prv = T.ProvidesList(); Prv.end() != true; ++Prv)
+ {
+ pkgCache::VerIterator const V = Prv.OwnerVer();
+ pkgCache::VerIterator const Cand = Cache[Prv.OwnerPkg()].CandidateVerIter(Cache);
+ if (Cand.end() == true || V != Cand || D.IsSatisfied(Prv) == false)
+ continue;
+ vci->insert(Cand);
+ found = true;
+ }
+ return found;
+ }
+ case CacheSetHelper::INSTALLED:
+ {
+ pkgCache::PkgIterator const T = D.TargetPkg();
+ pkgCache::VerIterator const Cand = T.CurrentVer();
+ if (Cand.end() == false && D.IsSatisfied(Cand) == true)
+ {
+ vci->insert(Cand);
+ found = true;
+ }
+ for (pkgCache::PrvIterator Prv = T.ProvidesList(); Prv.end() != true; ++Prv)
+ {
+ pkgCache::VerIterator const V = Prv.OwnerVer();
+ pkgCache::VerIterator const Cand = Prv.OwnerPkg().CurrentVer();
+ if (Cand.end() == true || V != Cand || D.IsSatisfied(Prv) == false)
+ continue;
+ vci->insert(Cand);
+ found = true;
+ }
+ return found;
+ }
+ case CacheSetHelper::CANDINST:
+ return FromDependency(vci, Cache, D, CacheSetHelper::CANDIDATE, helper) ||
+ FromDependency(vci, Cache, D, CacheSetHelper::INSTALLED, helper);
+ case CacheSetHelper::INSTCAND:
+ return FromDependency(vci, Cache, D, CacheSetHelper::INSTALLED, helper) ||
+ FromDependency(vci, Cache, D, CacheSetHelper::CANDIDATE, helper);
+ case CacheSetHelper::NEWEST:
+ {
+ pkgCache::PkgIterator const T = D.TargetPkg();
+ pkgCache::VerIterator const Cand = T.VersionList();
+ if (Cand.end() == false && D.IsSatisfied(Cand) == true)
+ {
+ vci->insert(Cand);
+ found = true;
+ }
+ for (pkgCache::PrvIterator Prv = T.ProvidesList(); Prv.end() != true; ++Prv)
+ {
+ pkgCache::VerIterator const V = Prv.OwnerVer();
+ pkgCache::VerIterator const Cand = Prv.OwnerPkg().VersionList();
+ if (Cand.end() == true || V != Cand || D.IsSatisfied(Prv) == false)
+ continue;
+ vci->insert(Cand);
+ found = true;
+ }
+ return found;
+ }
+ case CacheSetHelper::RELEASE:
+ case CacheSetHelper::VERSIONNUMBER:
+ // both make no sense here, so always false
+ return false;
+ }
+ return found;
+}
+ /*}}}*/
+// getCandidateVer - Returns the candidate version of the given package /*{{{*/
+pkgCache::VerIterator VersionContainerInterface::getCandidateVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper) {
+ pkgCache::VerIterator Cand;
+ if (Cache.IsDepCacheBuilt() == true) {
+ Cand = Cache[Pkg].CandidateVerIter(Cache);
+ } else if (unlikely(Cache.GetPolicy() == nullptr)) {
+ return pkgCache::VerIterator(Cache);
+ } else {
+ Cand = Cache.GetPolicy()->GetCandidateVer(Pkg);
+ }
+ if (Cand.end() == true)
+ return helper.canNotGetVersion(CacheSetHelper::CANDIDATE, Cache, Pkg);
+ return Cand;
+}
+ /*}}}*/
+// getInstalledVer - Returns the installed version of the given package /*{{{*/
+pkgCache::VerIterator VersionContainerInterface::getInstalledVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper) {
+ if (Pkg->CurrentVer == 0)
+ return helper.canNotGetVersion(CacheSetHelper::INSTALLED, Cache, Pkg);
+ return Pkg.CurrentVer();
+}
+ /*}}}*/
+
+// canNotFindPackage - with the given selector and pattern /*{{{*/
+void CacheSetHelper::canNotFindPackage(enum PkgSelector const select,
+ PackageContainerInterface * const pci, pkgCacheFile &Cache,
+ std::string const &pattern) {
+ switch (select) {
+APT_IGNORE_DEPRECATED_PUSH
+ case REGEX: canNotFindRegEx(pci, Cache, pattern); break;
+ case TASK: canNotFindTask(pci, Cache, pattern); break;
+ case FNMATCH: canNotFindFnmatch(pci, Cache, pattern); break;
+ case PACKAGENAME: canNotFindPackage(pci, Cache, pattern); break;
+ case STRING: canNotFindPackage(pci, Cache, pattern); break;
+ case UNKNOWN: break;
+APT_IGNORE_DEPRECATED_POP
+ }
+}
+// canNotFindTask - handle the case no package is found for a task /*{{{*/
+void CacheSetHelper::canNotFindTask(PackageContainerInterface * const /*pci*/, pkgCacheFile &/*Cache*/, std::string pattern) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Couldn't find task '%s'"), pattern.c_str());
+}
+ /*}}}*/
+// canNotFindRegEx - handle the case no package is found by a regex /*{{{*/
+void CacheSetHelper::canNotFindRegEx(PackageContainerInterface * const /*pci*/, pkgCacheFile &/*Cache*/, std::string pattern) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Couldn't find any package by regex '%s'"), pattern.c_str());
+}
+ /*}}}*/
+// canNotFindFnmatch - handle the case no package is found by a fnmatch /*{{{*/
+ void CacheSetHelper::canNotFindFnmatch(PackageContainerInterface * const /*pci*/, pkgCacheFile &/*Cache*/, std::string pattern) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Couldn't find any package by glob '%s'"), pattern.c_str());
+}
+ /*}}}*/
+// canNotFindPackage - handle the case no package is found from a string/*{{{*/
+void CacheSetHelper::canNotFindPackage(PackageContainerInterface * const /*pci*/, pkgCacheFile &/*Cache*/, std::string const &/*str*/) {
+}
+ /*}}}*/
+ /*}}}*/
+// canNotFindPkgName - handle the case no package has this name /*{{{*/
+pkgCache::PkgIterator CacheSetHelper::canNotFindPkgName(pkgCacheFile &Cache,
+ std::string const &str) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Unable to locate package %s"), str.c_str());
+ return pkgCache::PkgIterator(Cache, 0);
+}
+ /*}}}*/
+// canNotFindVersion - for package by selector /*{{{*/
+void CacheSetHelper::canNotFindVersion(enum VerSelector const select, VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg)
+{
+ switch (select) {
+APT_IGNORE_DEPRECATED_PUSH
+ case ALL: canNotFindAllVer(vci, Cache, Pkg); break;
+ case INSTCAND: canNotFindInstCandVer(vci, Cache, Pkg); break;
+ case CANDINST: canNotFindCandInstVer(vci, Cache, Pkg); break;
+ case NEWEST: canNotFindNewestVer(Cache, Pkg); break;
+ case CANDIDATE: canNotFindCandidateVer(Cache, Pkg); break;
+ case INSTALLED: canNotFindInstalledVer(Cache, Pkg); break;
+APT_IGNORE_DEPRECATED_POP
+ case CANDANDINST: canNotGetCandInstVer(Cache, Pkg); break;
+ case RELEASE:
+ case VERSIONNUMBER:
+ // invalid in this branch
+ break;
+ }
+}
+// canNotFindAllVer /*{{{*/
+void CacheSetHelper::canNotFindAllVer(VersionContainerInterface * const /*vci*/, pkgCacheFile &/*Cache*/,
+ pkgCache::PkgIterator const &Pkg) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Can't select versions from package '%s' as it is purely virtual"), Pkg.FullName(true).c_str());
+}
+ /*}}}*/
+// canNotFindInstCandVer /*{{{*/
+void CacheSetHelper::canNotFindInstCandVer(VersionContainerInterface * const /*vci*/, pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg) {
+ canNotGetInstCandVer(Cache, Pkg);
+}
+ /*}}}*/
+// canNotFindInstCandVer /*{{{*/
+void CacheSetHelper::canNotFindCandInstVer(VersionContainerInterface * const /*vci*/, pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg) {
+ canNotGetCandInstVer(Cache, Pkg);
+}
+ /*}}}*/
+ /*}}}*/
+// canNotGetVersion - for package by selector /*{{{*/
+pkgCache::VerIterator CacheSetHelper::canNotGetVersion(enum VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) {
+ switch (select) {
+APT_IGNORE_DEPRECATED_PUSH
+ case NEWEST: return canNotFindNewestVer(Cache, Pkg);
+ case CANDIDATE: return canNotFindCandidateVer(Cache, Pkg);
+ case INSTALLED: return canNotFindInstalledVer(Cache, Pkg);
+APT_IGNORE_DEPRECATED_POP
+ case CANDINST: return canNotGetCandInstVer(Cache, Pkg);
+ case INSTCAND: return canNotGetInstCandVer(Cache, Pkg);
+ case ALL:
+ case CANDANDINST:
+ case RELEASE:
+ case VERSIONNUMBER:
+ // invalid in this branch
+ return pkgCache::VerIterator(Cache, 0);
+ }
+ return pkgCache::VerIterator(Cache, 0);
+}
+// canNotFindNewestVer /*{{{*/
+pkgCache::VerIterator CacheSetHelper::canNotFindNewestVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Can't select newest version from package '%s' as it is purely virtual"), Pkg.FullName(true).c_str());
+ return pkgCache::VerIterator(Cache, 0);
+}
+ /*}}}*/
+// canNotFindCandidateVer /*{{{*/
+pkgCache::VerIterator CacheSetHelper::canNotFindCandidateVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Can't select candidate version from package %s as it has no candidate"), Pkg.FullName(true).c_str());
+ return pkgCache::VerIterator(Cache, 0);
+}
+ /*}}}*/
+// canNotFindInstalledVer /*{{{*/
+pkgCache::VerIterator CacheSetHelper::canNotFindInstalledVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Can't select installed version from package %s as it is not installed"), Pkg.FullName(true).c_str());
+ return pkgCache::VerIterator(Cache, 0);
+}
+ /*}}}*/
+// canNotFindInstCandVer /*{{{*/
+pkgCache::VerIterator CacheSetHelper::canNotGetInstCandVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Can't select installed nor candidate version from package '%s' as it has neither of them"), Pkg.FullName(true).c_str());
+ return pkgCache::VerIterator(Cache, 0);
+}
+ /*}}}*/
+// canNotFindInstCandVer /*{{{*/
+pkgCache::VerIterator CacheSetHelper::canNotGetCandInstVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg) {
+ if (ShowError == true)
+ _error->Insert(ErrorType, _("Can't select installed nor candidate version from package '%s' as it has neither of them"), Pkg.FullName(true).c_str());
+ return pkgCache::VerIterator(Cache, 0);
+}
+ /*}}}*/
+ /*}}}*/
+// showPackageSelection - by selector and given pattern /*{{{*/
+void CacheSetHelper::showPackageSelection(pkgCache::PkgIterator const &pkg, enum PkgSelector const select,
+ std::string const &pattern) {
+ switch (select) {
+APT_IGNORE_DEPRECATED_PUSH
+ case REGEX: showRegExSelection(pkg, pattern); break;
+ case TASK: showTaskSelection(pkg, pattern); break;
+ case FNMATCH: showFnmatchSelection(pkg, pattern); break;
+APT_IGNORE_DEPRECATED_POP
+ case PACKAGENAME: /* no surprises here */ break;
+ case STRING: /* handled by the special cases */ break;
+ case UNKNOWN: break;
+ }
+}
+// showTaskSelection /*{{{*/
+void CacheSetHelper::showTaskSelection(pkgCache::PkgIterator const &/*pkg*/,
+ std::string const &/*pattern*/) {
+}
+ /*}}}*/
+// showRegExSelection /*{{{*/
+void CacheSetHelper::showRegExSelection(pkgCache::PkgIterator const &/*pkg*/,
+ std::string const &/*pattern*/) {
+}
+ /*}}}*/
+// showFnmatchSelection /*{{{*/
+void CacheSetHelper::showFnmatchSelection(pkgCache::PkgIterator const &/*pkg*/,
+ std::string const &/*pattern*/) {
+}
+ /*}}}*/
+ /*}}}*/
+// showVersionSelection /*{{{*/
+void CacheSetHelper::showVersionSelection(pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver, enum VerSelector const select, std::string const &pattern) {
+ switch (select) {
+APT_IGNORE_DEPRECATED_PUSH
+ case RELEASE:
+ showSelectedVersion(Pkg, Ver, pattern, true);
+ break;
+ case VERSIONNUMBER:
+ showSelectedVersion(Pkg, Ver, pattern, false);
+ break;
+APT_IGNORE_DEPRECATED_POP
+ case NEWEST:
+ case CANDIDATE:
+ case INSTALLED:
+ case CANDINST:
+ case INSTCAND:
+ case ALL:
+ case CANDANDINST:
+ // not really surprises, but in fact: just not implemented
+ break;
+ }
+}
+void CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const &/*Pkg*/,
+ pkgCache::VerIterator const /*Ver*/,
+ std::string const &/*ver*/,
+ bool const /*verIsRel*/) {
+}
+ /*}}}*/
+
+CacheSetHelper::CacheSetHelper(bool const ShowError, GlobalError::MsgType ErrorType) :
+ ShowError(ShowError), ErrorType(ErrorType), d(NULL) {}
+CacheSetHelper::~CacheSetHelper() {}
+
+PackageContainerInterface::PackageContainerInterface() : ConstructedBy(CacheSetHelper::UNKNOWN), d(NULL) {}
+PackageContainerInterface::PackageContainerInterface(CacheSetHelper::PkgSelector const by) : ConstructedBy(by), d(NULL) {}
+PackageContainerInterface& PackageContainerInterface::operator=(PackageContainerInterface const &other) {
+ if (this != &other)
+ this->ConstructedBy = other.ConstructedBy;
+ return *this;
+}
+PackageContainerInterface::~PackageContainerInterface() {}
+
+PackageUniverse::PackageUniverse(pkgCache * const Owner) : _cont(Owner), d(NULL) {}
+PackageUniverse::PackageUniverse(pkgCacheFile * const Owner) : _cont(Owner->GetPkgCache()), d(NULL) {}
+PackageUniverse::~PackageUniverse() {}
+
+VersionContainerInterface::VersionContainerInterface() : d(NULL) {}
+VersionContainerInterface& VersionContainerInterface::operator=(VersionContainerInterface const &) {
+ return *this;
+}
+
+VersionContainerInterface::~VersionContainerInterface() {}
+}
diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h
new file mode 100644
index 0000000..b00fc73
--- /dev/null
+++ b/apt-pkg/cacheset.h
@@ -0,0 +1,1229 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/** \file cacheset.h
+ Wrappers around std::set to have set::iterators which behave
+ similar to the Iterators of the cache structures.
+
+ Provides also a few helper methods which work with these sets */
+ /*}}}*/
+#ifndef APT_CACHESET_H
+#define APT_CACHESET_H
+// Include Files /*{{{*/
+#include <fstream>
+#include <map>
+#include <set>
+#if __cplusplus >= 201103L
+#include <forward_list>
+#include <initializer_list>
+#include <unordered_set>
+#endif
+#include <algorithm>
+#include <deque>
+#include <iterator>
+#include <list>
+#include <string>
+#include <vector>
+
+#include <stddef.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/cachefile.h>
+#endif
+#ifndef APT_10_CLEANER_HEADERS
+#include <iostream>
+#endif
+ /*}}}*/
+
+class pkgCacheFile;
+
+namespace APT {
+class PackageContainerInterface;
+class VersionContainerInterface;
+
+class CacheSetHelper { /*{{{*/
+/** \class APT::CacheSetHelper
+ Simple base class with a lot of virtual methods which can be overridden
+ to alter the behavior or the output of the CacheSets.
+
+ This helper is passed around by the static methods in the CacheSets and
+ used every time they hit an error condition or something could be
+ printed out.
+*/
+public: /*{{{*/
+ CacheSetHelper(bool const ShowError = true,
+ GlobalError::MsgType ErrorType = GlobalError::ERROR);
+ virtual ~CacheSetHelper();
+
+ enum PkgSelector { UNKNOWN, REGEX, TASK, FNMATCH, PACKAGENAME, STRING };
+
+ virtual bool PackageFrom(enum PkgSelector const select, PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern);
+
+ virtual bool PackageFromCommandLine(PackageContainerInterface * const pci, pkgCacheFile &Cache, const char **cmdline);
+
+ struct PkgModifier {
+ enum Position { NONE, PREFIX, POSTFIX };
+ unsigned short ID;
+ const char * const Alias;
+ Position Pos;
+ PkgModifier (unsigned short const &id, const char * const alias, Position const &pos) : ID(id), Alias(alias), Pos(pos) {}
+ };
+ virtual bool PackageFromModifierCommandLine(unsigned short &modID, PackageContainerInterface * const pci,
+ pkgCacheFile &Cache, const char * cmdline,
+ std::list<PkgModifier> const &mods);
+
+ APT_DEPRECATED_MSG("use .PackageFrom(PACKAGENAME, …) instead") pkgCache::PkgIterator PackageFromName(pkgCacheFile &Cache, std::string const &pattern);
+
+ /** \brief be notified about the package being selected via pattern
+ *
+ * Main use is probably to show a message to the user what happened
+ *
+ * \param pkg is the package which was selected
+ * \param select is the selection method which choose the package
+ * \param pattern is the string used by the selection method to pick the package
+ */
+ virtual void showPackageSelection(pkgCache::PkgIterator const &pkg, PkgSelector const select, std::string const &pattern);
+ // use the method above instead, react only on the type you need and let the base handle the rest if need be
+ // this allows us to add new selection methods without breaking the ABI constantly with new virtual methods
+ APT_DEPRECATED_MSG("override .showPackageSelection and select with switch") virtual void showTaskSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern);
+ APT_DEPRECATED_MSG("override .showPackageSelection and select with switch") virtual void showRegExSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern);
+ APT_DEPRECATED_MSG("override .showPackageSelection and select with switch") virtual void showFnmatchSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern);
+
+ /** \brief be notified if a package can't be found via pattern
+ *
+ * Can be used to show a message as well as to try something else to make it match
+ *
+ * \param select is the method tried for selection
+ * \param pci is the container the package should be inserted in
+ * \param Cache is the package universe available
+ * \param pattern is the string not matching anything
+ */
+ virtual void canNotFindPackage(enum PkgSelector const select, PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern);
+ // same as above for showPackageSelection
+ APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+ APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+ APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+ APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindPackage(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &str);
+
+ /** \brief specifies which version(s) we want to refer to */
+ enum VerSelector {
+ /** by release string */
+ RELEASE,
+ /** by version number string */
+ VERSIONNUMBER,
+ /** All versions */
+ ALL,
+ /** Candidate and installed version */
+ CANDANDINST,
+ /** Candidate version */
+ CANDIDATE,
+ /** Installed version */
+ INSTALLED,
+ /** Candidate or if non installed version */
+ CANDINST,
+ /** Installed or if non candidate version */
+ INSTCAND,
+ /** Newest version */
+ NEWEST
+ };
+
+ /** \brief be notified about the version being selected via pattern
+ *
+ * Main use is probably to show a message to the user what happened
+ * Note that at the moment this method is only called for RELEASE
+ * and VERSION selections, not for the others.
+ *
+ * \param Pkg is the package which was selected for
+ * \param Ver is the version selected
+ * \param select is the selection method which choose the version
+ * \param pattern is the string used by the selection method to pick the version
+ */
+ virtual void showVersionSelection(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver,
+ enum VerSelector const select, std::string const &pattern);
+ APT_DEPRECATED_MSG("use .showVersionSelection instead, similar to .showPackageSelection") virtual void showSelectedVersion(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const Ver,
+ std::string const &ver, bool const verIsRel);
+
+ /** \brief be notified if a version can't be found for a package
+ *
+ * Main use is probably to show a message to the user what happened
+ *
+ * \param select is the method tried for selection
+ * \param vci is the container the version should be inserted in
+ * \param Cache is the package universe available
+ * \param Pkg is the package we wanted a version from
+ */
+ virtual void canNotFindVersion(enum VerSelector const select, VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg);
+ APT_DEPRECATED_MSG("override .canNotFindVersion and select via switch") virtual void canNotFindAllVer(VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg);
+ APT_DEPRECATED_MSG("override .canNotFindVersion and select via switch") virtual void canNotFindInstCandVer(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg);
+ APT_DEPRECATED_MSG("override .canNotFindVersion and select via switch") virtual void canNotFindCandInstVer(VersionContainerInterface * const vci,
+ pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg);
+
+ // the difference between canNotFind and canNotGet is that the later is more low-level
+ // and called from other places: In this case looking into the code is the only real answer…
+ virtual pkgCache::VerIterator canNotGetVersion(enum VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg);
+ APT_DEPRECATED_MSG("override .canNotGetVersion and select via switch") virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg);
+ APT_DEPRECATED_MSG("override .canNotGetVersion and select via switch") virtual pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg);
+ APT_DEPRECATED_MSG("override .canNotGetVersion and select via switch") virtual pkgCache::VerIterator canNotFindInstalledVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg);
+
+ virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str);
+
+ bool showErrors() const { return ShowError; }
+ bool showErrors(bool const newValue) { if (ShowError == newValue) return ShowError; else return ((ShowError = newValue) == false); }
+ GlobalError::MsgType errorType() const { return ErrorType; }
+ GlobalError::MsgType errorType(GlobalError::MsgType const &newValue)
+ {
+ if (ErrorType == newValue) return ErrorType;
+ else {
+ GlobalError::MsgType const &oldValue = ErrorType;
+ ErrorType = newValue;
+ return oldValue;
+ }
+ }
+
+ /*}}}*/
+protected:
+ bool ShowError;
+ GlobalError::MsgType ErrorType;
+
+ pkgCache::VerIterator canNotGetInstCandVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg);
+ pkgCache::VerIterator canNotGetCandInstVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg);
+
+ bool PackageFromTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+ bool PackageFromRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+ bool PackageFromFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+ bool PackageFromPackageName(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+ bool PackageFromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern);
+private:
+ void * const d;
+}; /*}}}*/
+// Iterator templates for our Containers /*{{{*/
+template<typename Interface, typename Master, typename iterator_type, typename container_iterator, typename container_value> class Container_iterator_base :
+ public std::iterator<typename std::iterator_traits<container_iterator>::iterator_category, container_value>,
+ public Interface::template iterator_base<iterator_type>
+{
+protected:
+ container_iterator _iter;
+public:
+ explicit Container_iterator_base(container_iterator i) : _iter(i) {}
+ inline container_value operator*(void) const { return static_cast<iterator_type const*>(this)->getType(); };
+ operator container_iterator(void) const { return _iter; }
+ inline iterator_type& operator++() { ++_iter; return static_cast<iterator_type&>(*this); }
+ inline iterator_type operator++(int) { iterator_type tmp(*this); operator++(); return tmp; }
+ inline iterator_type operator+(typename container_iterator::difference_type const &n) { return iterator_type(_iter + n); }
+ inline iterator_type operator+=(typename container_iterator::difference_type const &n) { _iter += n; return static_cast<iterator_type&>(*this); }
+ inline iterator_type& operator--() { --_iter;; return static_cast<iterator_type&>(*this); }
+ inline iterator_type operator--(int) { iterator_type tmp(*this); operator--(); return tmp; }
+ inline iterator_type operator-(typename container_iterator::difference_type const &n) { return iterator_type(_iter - n); }
+ inline typename container_iterator::difference_type operator-(iterator_type const &b) { return (_iter - b._iter); }
+ inline iterator_type operator-=(typename container_iterator::difference_type const &n) { _iter -= n; return static_cast<iterator_type&>(*this); }
+ inline bool operator!=(iterator_type const &i) const { return _iter != i._iter; }
+ inline bool operator==(iterator_type const &i) const { return _iter == i._iter; }
+ inline bool operator<(iterator_type const &i) const { return _iter < i._iter; }
+ inline bool operator>(iterator_type const &i) const { return _iter > i._iter; }
+ inline bool operator<=(iterator_type const &i) const { return _iter <= i._iter; }
+ inline bool operator>=(iterator_type const &i) const { return _iter >= i._iter; }
+ inline typename container_iterator::reference operator[](typename container_iterator::difference_type const &n) const { return _iter[n]; }
+
+ friend std::ostream& operator<<(std::ostream& out, iterator_type i) { return operator<<(out, *i); }
+ friend Master;
+};
+template<class Interface, class Container, class Master> class Container_const_iterator :
+ public Container_iterator_base<Interface, Master, Container_const_iterator<Interface, Container, Master>, typename Container::const_iterator, typename Container::value_type>
+{
+ typedef Container_const_iterator<Interface, Container, Master> iterator_type;
+ typedef typename Container::const_iterator container_iterator;
+public:
+ explicit Container_const_iterator(container_iterator i) :
+ Container_iterator_base<Interface, Master, iterator_type, container_iterator, typename Container::value_type>(i) {}
+
+ inline typename Container::value_type getType(void) const { return *this->_iter; }
+};
+template<class Interface, class Container, class Master> class Container_iterator :
+ public Container_iterator_base<Interface, Master, Container_iterator<Interface, Container, Master>, typename Container::iterator, typename Container::value_type>
+{
+ typedef Container_iterator<Interface, Container, Master> iterator_type;
+ typedef typename Container::iterator container_iterator;
+public:
+ explicit Container_iterator(container_iterator i) :
+ Container_iterator_base<Interface, Master, iterator_type, container_iterator, typename Container::value_type>(i) {}
+
+ operator typename Master::const_iterator() { return typename Master::const_iterator(this->_iter); }
+ inline iterator_type& operator=(iterator_type const &i) { this->_iter = i._iter; return static_cast<iterator_type&>(*this); }
+ inline iterator_type& operator=(container_iterator const &i) { this->_iter = i; return static_cast<iterator_type&>(*this); }
+ inline typename Container::iterator::reference operator*(void) const { return *this->_iter; }
+
+ inline typename Container::value_type getType(void) const { return *this->_iter; }
+};
+template<class Interface, class Container, class Master> class Container_const_reverse_iterator :
+ public Container_iterator_base<Interface, Master, Container_const_reverse_iterator<Interface, Container, Master>, typename Container::const_reverse_iterator, typename Container::value_type>
+{
+ typedef Container_const_reverse_iterator<Interface, Container, Master> iterator_type;
+ typedef typename Container::const_reverse_iterator container_iterator;
+public:
+ explicit Container_const_reverse_iterator(container_iterator i) :
+ Container_iterator_base<Interface, Master, iterator_type, container_iterator, typename Container::value_type>(i) {}
+
+ inline typename Container::value_type getType(void) const { return *this->_iter; }
+};
+template<class Interface, class Container, class Master> class Container_reverse_iterator :
+ public Container_iterator_base<Interface, Master, Container_reverse_iterator<Interface, Container, Master>, typename Container::reverse_iterator, typename Container::value_type>
+{
+ typedef Container_reverse_iterator<Interface, Container, Master> iterator_type;
+ typedef typename Container::reverse_iterator container_iterator;
+public:
+ explicit Container_reverse_iterator(container_iterator i) :
+ Container_iterator_base<Interface, Master, iterator_type, container_iterator, typename Container::value_type>(i) {}
+
+ operator typename Master::const_iterator() { return typename Master::const_iterator(this->_iter); }
+ inline iterator_type& operator=(iterator_type const &i) { this->_iter = i._iter; return static_cast<iterator_type&>(*this); }
+ inline iterator_type& operator=(container_iterator const &i) { this->_iter = i; return static_cast<iterator_type&>(*this); }
+ inline typename Container::reverse_iterator::reference operator*(void) const { return *this->_iter; }
+
+ inline typename Container::value_type getType(void) const { return *this->_iter; }
+};
+ /*}}}*/
+class PackageContainerInterface { /*{{{*/
+/** \class PackageContainerInterface
+
+ * Interface ensuring that all operations can be executed on the yet to
+ * define concrete PackageContainer - access to all methods is possible,
+ * but in general the wrappers provided by the PackageContainer template
+ * are nicer to use.
+
+ * This class mostly protects use from the need to write all implementation
+ * of the methods working on containers in the template */
+public:
+ template<class Itr> class iterator_base { /*{{{*/
+ pkgCache::PkgIterator getType() const { return static_cast<Itr const*>(this)->getType(); };
+ public:
+ operator pkgCache::PkgIterator(void) const { return getType(); }
+
+ inline const char *Name() const {return getType().Name(); }
+ inline std::string FullName(bool const Pretty) const { return getType().FullName(Pretty); }
+ inline std::string FullName() const { return getType().FullName(); }
+ APT_DEPRECATED_MSG("Use the .Section method of VerIterator instead") inline const char *Section() const {
+ APT_IGNORE_DEPRECATED_PUSH
+ return getType().Section();
+ APT_IGNORE_DEPRECATED_POP
+ }
+ inline bool Purge() const {return getType().Purge(); }
+ inline const char *Arch() const {return getType().Arch(); }
+ inline pkgCache::GrpIterator Group() const { return getType().Group(); }
+ inline pkgCache::VerIterator VersionList() const { return getType().VersionList(); }
+ inline pkgCache::VerIterator CurrentVer() const { return getType().CurrentVer(); }
+ inline pkgCache::DepIterator RevDependsList() const { return getType().RevDependsList(); }
+ inline pkgCache::PrvIterator ProvidesList() const { return getType().ProvidesList(); }
+ inline pkgCache::PkgIterator::OkState State() const { return getType().State(); }
+ APT_DEPRECATED_MSG("This method does not respect apt_preferences! Use pkgDepCache::GetCandidateVersion(Pkg)") inline const char *CandVersion() const { return getType().CandVersion(); }
+ inline const char *CurVersion() const { return getType().CurVersion(); }
+ inline pkgCache *Cache() const { return getType().Cache(); }
+ inline unsigned long Index() const {return getType().Index();}
+ // we have only valid iterators here
+ inline bool end() const { return false; }
+
+ inline pkgCache::Package const * operator->() const {return &*getType();}
+ };
+ /*}}}*/
+
+ virtual bool insert(pkgCache::PkgIterator const &P) = 0;
+ virtual bool empty() const = 0;
+ virtual void clear() = 0;
+ virtual size_t size() const = 0;
+
+ enum APT_DEPRECATED_MSG("Use CacheSetHelper::PkgSelector instead") Constructor { UNKNOWN = CacheSetHelper::UNKNOWN,
+ REGEX = CacheSetHelper::REGEX,
+ TASK = CacheSetHelper::TASK,
+ FNMATCH = CacheSetHelper::FNMATCH };
+APT_IGNORE_DEPRECATED_PUSH
+ void setConstructor(Constructor const by) { ConstructedBy = (CacheSetHelper::PkgSelector)by; }
+APT_IGNORE_DEPRECATED_POP
+
+ void setConstructor(CacheSetHelper::PkgSelector const by) { ConstructedBy = by; }
+ CacheSetHelper::PkgSelector getConstructor() const { return ConstructedBy; }
+ PackageContainerInterface();
+ explicit PackageContainerInterface(CacheSetHelper::PkgSelector const by);
+ PackageContainerInterface& operator=(PackageContainerInterface const &other);
+ virtual ~PackageContainerInterface();
+
+ APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::TASK, …) instead") static bool FromTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
+ return helper.PackageFrom(CacheSetHelper::TASK, pci, Cache, pattern); }
+ APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::REGEX, …) instead") static bool FromRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
+ return helper.PackageFrom(CacheSetHelper::REGEX, pci, Cache, pattern); }
+ APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::FNMATCH, …) instead") static bool FromFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
+ return helper.PackageFrom(CacheSetHelper::FNMATCH, pci, Cache, pattern); }
+ APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::PACKAGENAME, …) instead") static bool FromGroup(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
+ return helper.PackageFrom(CacheSetHelper::PACKAGENAME, pci, Cache, pattern); }
+ APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::STRING, …) instead") static bool FromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+ return helper.PackageFrom(CacheSetHelper::STRING, pci, Cache, pattern); }
+ APT_DEPRECATED_MSG("Use helper.PackageFromCommandLine instead") static bool FromCommandLine(PackageContainerInterface * const pci, pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper) {
+ return helper.PackageFromCommandLine(pci, Cache, cmdline); }
+
+ APT_DEPRECATED_MSG("enum moved to CacheSetHelper::PkgModifier") typedef CacheSetHelper::PkgModifier Modifier;
+
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Use helper.PackageFromName instead") static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+ return helper.PackageFromName(Cache, pattern); }
+ APT_DEPRECATED_MSG("Use helper.PackageFromModifierCommandLine instead") static bool FromModifierCommandLine(unsigned short &modID, PackageContainerInterface * const pci,
+ pkgCacheFile &Cache, const char * cmdline,
+ std::list<Modifier> const &mods, CacheSetHelper &helper) {
+ return helper.PackageFromModifierCommandLine(modID, pci, Cache, cmdline, mods); }
+APT_IGNORE_DEPRECATED_POP
+
+private:
+ CacheSetHelper::PkgSelector ConstructedBy;
+ void * const d;
+};
+ /*}}}*/
+template<class Container> class PackageContainer : public PackageContainerInterface {/*{{{*/
+/** \class APT::PackageContainer
+
+ Simple wrapper around a container class like std::set to provide a similar
+ interface to a set of packages as to the complete set of all packages in the
+ pkgCache. */
+ Container _cont;
+public: /*{{{*/
+ /** \brief smell like a pkgCache::PkgIterator */
+ typedef Container_const_iterator<PackageContainerInterface, Container, PackageContainer> const_iterator;
+ typedef Container_iterator<PackageContainerInterface, Container, PackageContainer> iterator;
+ typedef Container_const_reverse_iterator<PackageContainerInterface, Container, PackageContainer> const_reverse_iterator;
+ typedef Container_reverse_iterator<PackageContainerInterface, Container, PackageContainer> reverse_iterator;
+ typedef typename Container::value_type value_type;
+ typedef typename Container::pointer pointer;
+ typedef typename Container::const_pointer const_pointer;
+ typedef typename Container::reference reference;
+ typedef typename Container::const_reference const_reference;
+ typedef typename Container::difference_type difference_type;
+ typedef typename Container::size_type size_type;
+ typedef typename Container::allocator_type allocator_type;
+
+ bool insert(pkgCache::PkgIterator const &P) APT_OVERRIDE { if (P.end() == true) return false; _cont.insert(P); return true; }
+ template<class Cont> void insert(PackageContainer<Cont> const &pkgcont) { _cont.insert((typename Cont::const_iterator)pkgcont.begin(), (typename Cont::const_iterator)pkgcont.end()); }
+ void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); }
+
+ bool empty() const APT_OVERRIDE { return _cont.empty(); }
+ void clear() APT_OVERRIDE { return _cont.clear(); }
+ size_t size() const APT_OVERRIDE { return _cont.size(); }
+#if __GNUC__ >= 5 || (__GNUC_MINOR__ >= 9 && __GNUC__ >= 4)
+ iterator erase( const_iterator pos ) { return iterator(_cont.erase(pos._iter)); }
+ iterator erase( const_iterator first, const_iterator last ) { return iterator(_cont.erase(first._iter, last._iter)); }
+#else
+ iterator erase( iterator pos ) { return iterator(_cont.erase(pos._iter)); }
+ iterator erase( iterator first, iterator last ) { return iterator(_cont.erase(first._iter, last._iter)); }
+#endif
+ const_iterator begin() const { return const_iterator(_cont.begin()); }
+ const_iterator end() const { return const_iterator(_cont.end()); }
+ const_reverse_iterator rbegin() const { return const_reverse_iterator(_cont.rbegin()); }
+ const_reverse_iterator rend() const { return const_reverse_iterator(_cont.rend()); }
+#if __cplusplus >= 201103L
+ const_iterator cbegin() const { return const_iterator(_cont.cbegin()); }
+ const_iterator cend() const { return const_iterator(_cont.cend()); }
+ const_reverse_iterator crbegin() const { return const_reverse_iterator(_cont.crbegin()); }
+ const_reverse_iterator crend() const { return const_reverse_iterator(_cont.crend()); }
+#endif
+ iterator begin() { return iterator(_cont.begin()); }
+ iterator end() { return iterator(_cont.end()); }
+ reverse_iterator rbegin() { return reverse_iterator(_cont.rbegin()); }
+ reverse_iterator rend() { return reverse_iterator(_cont.rend()); }
+ const_iterator find(pkgCache::PkgIterator const &P) const { return const_iterator(_cont.find(P)); }
+
+ PackageContainer() : PackageContainerInterface(CacheSetHelper::UNKNOWN) {}
+ explicit PackageContainer(CacheSetHelper::PkgSelector const &by) : PackageContainerInterface(by) {}
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Construct with a CacheSetHelper::PkgSelector instead") explicit PackageContainer(Constructor const &by) : PackageContainerInterface((CacheSetHelper::PkgSelector)by) {}
+APT_IGNORE_DEPRECATED_POP
+ template<typename Itr> PackageContainer(Itr first, Itr last) : PackageContainerInterface(CacheSetHelper::UNKNOWN), _cont(first, last) {}
+#if __cplusplus >= 201103L
+ PackageContainer(std::initializer_list<value_type> list) : PackageContainerInterface(CacheSetHelper::UNKNOWN), _cont(list) {}
+ void push_back(value_type&& P) { _cont.emplace_back(std::move(P)); }
+ template<typename... Args> void emplace_back(Args&&... args) { _cont.emplace_back(std::forward<Args>(args)...); }
+#endif
+ void push_back(const value_type& P) { _cont.push_back(P); }
+
+ /** \brief sort all included versions with given comparer
+
+ Some containers are sorted by default, some are not and can't be,
+ but a few like std::vector can be sorted if need be, so this can be
+ specialized in later on. The default is that this will fail though.
+ Specifically, already sorted containers like std::set will return
+ false as well as there is no easy way to check that the given comparer
+ would sort in the same way the set is currently sorted
+
+ \return \b true if the set was sorted, \b false if not. */
+ template<class Compare> bool sort(Compare /*Comp*/) { return false; }
+
+ /** \brief returns all packages in the cache who belong to the given task
+
+ A simple helper responsible for search for all members of a task
+ in the cache. Optional it prints a notice about the
+ packages chosen cause of the given task.
+ \param Cache the packages are in
+ \param pattern name of the task
+ \param helper responsible for error and message handling */
+ static PackageContainer FromTask(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+ PackageContainer cont(CacheSetHelper::TASK);
+ helper.PackageFrom(CacheSetHelper::TASK, &cont, Cache, pattern);
+ return cont;
+ }
+ static PackageContainer FromTask(pkgCacheFile &Cache, std::string const &pattern) {
+ CacheSetHelper helper;
+ return FromTask(Cache, pattern, helper);
+ }
+
+ /** \brief returns all packages in the cache whose name matches a given pattern
+
+ A simple helper responsible for executing a regular expression on all
+ package names in the cache. Optional it prints a notice about the
+ packages chosen cause of the given package.
+ \param Cache the packages are in
+ \param pattern regular expression for package names
+ \param helper responsible for error and message handling */
+ static PackageContainer FromRegEx(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+ PackageContainer cont(CacheSetHelper::REGEX);
+ helper.PackageFrom(CacheSetHelper::REGEX, &cont, Cache, pattern);
+ return cont;
+ }
+
+ static PackageContainer FromRegEx(pkgCacheFile &Cache, std::string const &pattern) {
+ CacheSetHelper helper;
+ return FromRegEx(Cache, pattern, helper);
+ }
+
+ static PackageContainer FromFnmatch(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+ PackageContainer cont(CacheSetHelper::FNMATCH);
+ helper.PackageFrom(CacheSetHelper::FNMATCH, &cont, Cache, pattern);
+ return cont;
+ }
+ static PackageContainer FromFnMatch(pkgCacheFile &Cache, std::string const &pattern) {
+ CacheSetHelper helper;
+ return FromFnmatch(Cache, pattern, helper);
+ }
+
+APT_IGNORE_DEPRECATED_PUSH
+ /** \brief returns a package specified by a string
+
+ \param Cache the package is in
+ \param pattern String the package name should be extracted from
+ \param helper responsible for error and message handling */
+ APT_DEPRECATED_MSG("Use helper.PackageFromName instead") static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+ return helper.PackageFromName(Cache, pattern);
+ }
+ APT_DEPRECATED_MSG("Use helper.PackageFromName instead") static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern) {
+ CacheSetHelper helper;
+ return FromName(Cache, pattern, helper);
+ }
+APT_IGNORE_DEPRECATED_POP
+
+ /** \brief returns all packages specified by a string
+
+ \param Cache the packages are in
+ \param pattern String the package name(s) should be extracted from
+ \param helper responsible for error and message handling */
+ static PackageContainer FromString(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+ PackageContainer cont;
+ helper.PackageFrom(CacheSetHelper::PACKAGENAME, &cont, Cache, pattern);
+ return cont;
+ }
+ static PackageContainer FromString(pkgCacheFile &Cache, std::string const &pattern) {
+ CacheSetHelper helper;
+ return FromString(Cache, pattern, helper);
+ }
+
+ /** \brief returns all packages specified on the commandline
+
+ Get all package names from the commandline and executes regex's if needed.
+ No special package command is supported, just plain names.
+ \param Cache the packages are in
+ \param cmdline Command line the package names should be extracted from
+ \param helper responsible for error and message handling */
+ static PackageContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper) {
+ PackageContainer cont;
+ helper.PackageFromCommandLine(&cont, Cache, cmdline);
+ return cont;
+ }
+ static PackageContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
+ CacheSetHelper helper;
+ return FromCommandLine(Cache, cmdline, helper);
+ }
+
+ /** \brief group packages by a action modifiers
+
+ At some point it is needed to get from the same commandline
+ different package sets grouped by a modifier. Take
+ apt-get install apt awesome-
+ as an example.
+ \param Cache the packages are in
+ \param cmdline Command line the package names should be extracted from
+ \param mods list of modifiers the method should accept
+ \param fallback the default modifier group for a package
+ \param helper responsible for error and message handling */
+ static std::map<unsigned short, PackageContainer> GroupedFromCommandLine(
+ pkgCacheFile &Cache,
+ const char **cmdline,
+ std::list<CacheSetHelper::PkgModifier> const &mods,
+ unsigned short const &fallback,
+ CacheSetHelper &helper) {
+ std::map<unsigned short, PackageContainer> pkgsets;
+ for (const char **I = cmdline; *I != 0; ++I) {
+ unsigned short modID = fallback;
+ PackageContainer pkgset;
+ helper.PackageFromModifierCommandLine(modID, &pkgset, Cache, *I, mods);
+ pkgsets[modID].insert(pkgset);
+ }
+ return pkgsets;
+ }
+ static std::map<unsigned short, PackageContainer> GroupedFromCommandLine(
+ pkgCacheFile &Cache,
+ const char **cmdline,
+ std::list<CacheSetHelper::PkgModifier> const &mods,
+ unsigned short const &fallback) {
+ CacheSetHelper helper;
+ return GroupedFromCommandLine(Cache, cmdline,
+ mods, fallback, helper);
+ }
+ /*}}}*/
+}; /*}}}*/
+// various specialisations for PackageContainer /*{{{*/
+template<> template<class Cont> void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(PackageContainer<Cont> const &pkgcont) {
+ for (typename PackageContainer<Cont>::const_iterator p = pkgcont.begin(); p != pkgcont.end(); ++p)
+ _cont.push_back(*p);
+}
+#if __cplusplus >= 201103L
+template<> template<class Cont> void PackageContainer<std::forward_list<pkgCache::PkgIterator> >::insert(PackageContainer<Cont> const &pkgcont) {
+ for (typename PackageContainer<Cont>::const_iterator p = pkgcont.begin(); p != pkgcont.end(); ++p)
+ _cont.push_front(*p);
+}
+#endif
+template<> template<class Cont> void PackageContainer<std::deque<pkgCache::PkgIterator> >::insert(PackageContainer<Cont> const &pkgcont) {
+ for (typename PackageContainer<Cont>::const_iterator p = pkgcont.begin(); p != pkgcont.end(); ++p)
+ _cont.push_back(*p);
+}
+template<> template<class Cont> void PackageContainer<std::vector<pkgCache::PkgIterator> >::insert(PackageContainer<Cont> const &pkgcont) {
+ for (typename PackageContainer<Cont>::const_iterator p = pkgcont.begin(); p != pkgcont.end(); ++p)
+ _cont.push_back(*p);
+}
+// these are 'inline' as otherwise the linker has problems with seeing these untemplated
+// specializations again and again - but we need to see them, so that library users can use them
+template<> inline bool PackageContainer<std::list<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator const &P) {
+ if (P.end() == true)
+ return false;
+ _cont.push_back(P);
+ return true;
+}
+#if __cplusplus >= 201103L
+template<> inline bool PackageContainer<std::forward_list<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator const &P) {
+ if (P.end() == true)
+ return false;
+ _cont.push_front(P);
+ return true;
+}
+#endif
+template<> inline bool PackageContainer<std::deque<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator const &P) {
+ if (P.end() == true)
+ return false;
+ _cont.push_back(P);
+ return true;
+}
+template<> inline bool PackageContainer<std::vector<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator const &P) {
+ if (P.end() == true)
+ return false;
+ _cont.push_back(P);
+ return true;
+}
+template<> inline void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator p = begin; p != end; ++p)
+ _cont.push_back(*p);
+}
+#if __cplusplus >= 201103L
+template<> inline void PackageContainer<std::forward_list<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator p = begin; p != end; ++p)
+ _cont.push_front(*p);
+}
+#endif
+template<> inline void PackageContainer<std::deque<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator p = begin; p != end; ++p)
+ _cont.push_back(*p);
+}
+template<> inline void PackageContainer<std::vector<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator p = begin; p != end; ++p)
+ _cont.push_back(*p);
+}
+#if APT_GCC_VERSION < 0x409
+template<> inline PackageContainer<std::set<pkgCache::PkgIterator> >::iterator PackageContainer<std::set<pkgCache::PkgIterator> >::erase(iterator i) {
+ _cont.erase(i._iter);
+ return end();
+}
+template<> inline PackageContainer<std::set<pkgCache::PkgIterator> >::iterator PackageContainer<std::set<pkgCache::PkgIterator> >::erase(iterator first, iterator last) {
+ _cont.erase(first, last);
+ return end();
+}
+#endif
+template<> template<class Compare> inline bool PackageContainer<std::vector<pkgCache::PkgIterator> >::sort(Compare Comp) {
+ std::sort(_cont.begin(), _cont.end(), Comp);
+ return true;
+}
+template<> template<class Compare> inline bool PackageContainer<std::list<pkgCache::PkgIterator> >::sort(Compare Comp) {
+ _cont.sort(Comp);
+ return true;
+}
+#if __cplusplus >= 201103L
+template<> template<class Compare> inline bool PackageContainer<std::forward_list<pkgCache::PkgIterator> >::sort(Compare Comp) {
+ _cont.sort(Comp);
+ return true;
+}
+#endif
+template<> template<class Compare> inline bool PackageContainer<std::deque<pkgCache::PkgIterator> >::sort(Compare Comp) {
+ std::sort(_cont.begin(), _cont.end(), Comp);
+ return true;
+}
+ /*}}}*/
+
+// class PackageUniverse - pkgCache as PackageContainerInterface /*{{{*/
+/** \class PackageUniverse
+
+ Wraps around our usual pkgCache, so that it can be stuffed into methods
+ expecting a PackageContainer.
+
+ The wrapping is read-only in practice modeled by making erase and co
+ private methods. */
+class APT_PUBLIC PackageUniverse : public PackageContainerInterface {
+ pkgCache * const _cont;
+ void * const d;
+public:
+ class const_iterator : public APT::Container_iterator_base<APT::PackageContainerInterface, PackageUniverse, PackageUniverse::const_iterator, pkgCache::PkgIterator, pkgCache::PkgIterator>
+ {
+ public:
+ explicit const_iterator(pkgCache::PkgIterator i):
+ Container_iterator_base<APT::PackageContainerInterface, PackageUniverse, PackageUniverse::const_iterator, pkgCache::PkgIterator, pkgCache::PkgIterator>(i) {}
+
+ inline pkgCache::PkgIterator getType(void) const { return _iter; }
+ };
+ typedef const_iterator iterator;
+ typedef pkgCache::PkgIterator value_type;
+ typedef typename pkgCache::PkgIterator* pointer;
+ typedef typename pkgCache::PkgIterator const* const_pointer;
+ typedef const pkgCache::PkgIterator& const_reference;
+ typedef const_reference reference;
+ typedef const_iterator::difference_type difference_type;
+ typedef std::make_unsigned<const_iterator::difference_type>::type size_type;
+
+
+ bool empty() const APT_OVERRIDE { return false; }
+ size_t size() const APT_OVERRIDE { return _cont->Head().PackageCount; }
+
+ const_iterator begin() const { return const_iterator(_cont->PkgBegin()); }
+ const_iterator end() const { return const_iterator(_cont->PkgEnd()); }
+ const_iterator cbegin() const { return const_iterator(_cont->PkgBegin()); }
+ const_iterator cend() const { return const_iterator(_cont->PkgEnd()); }
+ iterator begin() { return iterator(_cont->PkgBegin()); }
+ iterator end() { return iterator(_cont->PkgEnd()); }
+
+ pkgCache * data() const { return _cont; }
+
+ explicit PackageUniverse(pkgCache * const Owner);
+ explicit PackageUniverse(pkgCacheFile * const Owner);
+ virtual ~PackageUniverse();
+
+private:
+ APT_HIDDEN bool insert(pkgCache::PkgIterator const &) APT_OVERRIDE { return true; }
+ template<class Cont> APT_HIDDEN void insert(PackageContainer<Cont> const &) { }
+ APT_HIDDEN void insert(const_iterator, const_iterator) { }
+
+ APT_HIDDEN void clear() APT_OVERRIDE { }
+ APT_HIDDEN iterator erase( const_iterator pos );
+ APT_HIDDEN iterator erase( const_iterator first, const_iterator last );
+};
+ /*}}}*/
+typedef PackageContainer<std::set<pkgCache::PkgIterator> > PackageSet;
+#if __cplusplus >= 201103L
+typedef PackageContainer<std::unordered_set<pkgCache::PkgIterator> > PackageUnorderedSet;
+typedef PackageContainer<std::forward_list<pkgCache::PkgIterator> > PackageForwardList;
+#endif
+typedef PackageContainer<std::list<pkgCache::PkgIterator> > PackageList;
+typedef PackageContainer<std::deque<pkgCache::PkgIterator> > PackageDeque;
+typedef PackageContainer<std::vector<pkgCache::PkgIterator> > PackageVector;
+
+class VersionContainerInterface { /*{{{*/
+/** \class APT::VersionContainerInterface
+
+ Same as APT::PackageContainerInterface, just for Versions */
+public:
+ /** \brief smell like a pkgCache::VerIterator */
+ template<class Itr> class iterator_base { /*{{{*/
+ pkgCache::VerIterator getType() const { return static_cast<Itr const*>(this)->getType(); };
+ public:
+ operator pkgCache::VerIterator(void) { return getType(); }
+
+ inline pkgCache *Cache() const { return getType().Cache(); }
+ inline unsigned long Index() const {return getType().Index();}
+ inline int CompareVer(const pkgCache::VerIterator &B) const { return getType().CompareVer(B); }
+ inline const char *VerStr() const { return getType().VerStr(); }
+ inline const char *Section() const { return getType().Section(); }
+ inline const char *Arch() const { return getType().Arch(); }
+ inline pkgCache::PkgIterator ParentPkg() const { return getType().ParentPkg(); }
+ inline pkgCache::DescIterator DescriptionList() const { return getType().DescriptionList(); }
+ inline pkgCache::DescIterator TranslatedDescription() const { return getType().TranslatedDescription(); }
+ inline pkgCache::DepIterator DependsList() const { return getType().DependsList(); }
+ inline pkgCache::PrvIterator ProvidesList() const { return getType().ProvidesList(); }
+ inline pkgCache::VerFileIterator FileList() const { return getType().FileList(); }
+ inline bool Downloadable() const { return getType().Downloadable(); }
+ inline const char *PriorityType() const { return getType().PriorityType(); }
+ inline std::string RelStr() const { return getType().RelStr(); }
+ inline bool Automatic() const { return getType().Automatic(); }
+ inline pkgCache::VerFileIterator NewestFile() const { return getType().NewestFile(); }
+ // we have only valid iterators here
+ inline bool end() const { return false; }
+
+ inline pkgCache::Version const * operator->() const { return &*getType(); }
+ };
+ /*}}}*/
+
+ virtual bool insert(pkgCache::VerIterator const &V) = 0;
+ virtual bool empty() const = 0;
+ virtual void clear() = 0;
+ virtual size_t size() const = 0;
+
+ /** \brief specifies which version(s) will be returned if non is given */
+ enum APT_DEPRECATED_MSG("enum moved to CacheSetHelper::VerSelector instead") Version {
+ ALL = CacheSetHelper::ALL,
+ CANDANDINST = CacheSetHelper::CANDANDINST,
+ CANDIDATE = CacheSetHelper::CANDIDATE,
+ INSTALLED = CacheSetHelper::INSTALLED,
+ CANDINST = CacheSetHelper::CANDINST,
+ INSTCAND = CacheSetHelper::INSTCAND,
+ NEWEST = CacheSetHelper::NEWEST
+ };
+
+ struct Modifier {
+ unsigned short const ID;
+ const char * const Alias;
+ enum Position { NONE, PREFIX, POSTFIX } const Pos;
+ enum CacheSetHelper::VerSelector const SelectVersion;
+ Modifier (unsigned short const &id, const char * const alias, Position const &pos,
+ enum CacheSetHelper::VerSelector const select) : ID(id), Alias(alias), Pos(pos),
+ SelectVersion(select) {}
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Construct with a CacheSetHelper::VerSelector instead") Modifier(unsigned short const &id, const char * const alias, Position const &pos,
+ Version const &select) : ID(id), Alias(alias), Pos(pos),
+ SelectVersion((CacheSetHelper::VerSelector)select) {}
+APT_IGNORE_DEPRECATED_POP
+ };
+
+ static bool FromCommandLine(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+ const char **cmdline, CacheSetHelper::VerSelector const fallback,
+ CacheSetHelper &helper);
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromCommandLine(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+ const char **cmdline, Version const &fallback,
+ CacheSetHelper &helper) {
+ return FromCommandLine(vci, Cache, cmdline, (CacheSetHelper::VerSelector)fallback, helper);
+ }
+APT_IGNORE_DEPRECATED_POP
+
+ static bool FromString(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+ std::string pkg, CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper,
+ bool const onlyFromName = false);
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromString(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+ std::string pkg, Version const &fallback, CacheSetHelper &helper,
+ bool const onlyFromName = false) {
+ return FromString(vci, Cache, pkg, (CacheSetHelper::VerSelector)fallback, helper, onlyFromName);
+ }
+APT_IGNORE_DEPRECATED_POP
+
+ static bool FromPackage(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &P, CacheSetHelper::VerSelector const fallback,
+ CacheSetHelper &helper);
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromPackage(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &P, Version const &fallback,
+ CacheSetHelper &helper) {
+ return FromPackage(vci, Cache, P, (CacheSetHelper::VerSelector)fallback, helper);
+ }
+APT_IGNORE_DEPRECATED_POP
+
+ static bool FromModifierCommandLine(unsigned short &modID,
+ VersionContainerInterface * const vci,
+ pkgCacheFile &Cache, const char * cmdline,
+ std::list<Modifier> const &mods,
+ CacheSetHelper &helper);
+
+
+ static bool FromDependency(VersionContainerInterface * const vci,
+ pkgCacheFile &Cache,
+ pkgCache::DepIterator const &D,
+ CacheSetHelper::VerSelector const selector,
+ CacheSetHelper &helper);
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromDependency(VersionContainerInterface * const vci,
+ pkgCacheFile &Cache,
+ pkgCache::DepIterator const &D,
+ Version const &selector,
+ CacheSetHelper &helper) {
+ return FromDependency(vci, Cache, D, (CacheSetHelper::VerSelector)selector, helper);
+ }
+APT_IGNORE_DEPRECATED_POP
+
+ VersionContainerInterface();
+ VersionContainerInterface& operator=(VersionContainerInterface const &other);
+ virtual ~VersionContainerInterface();
+private:
+ void * const d;
+
+protected: /*{{{*/
+
+ /** \brief returns the candidate version of the package
+
+ \param Cache to be used to query for information
+ \param Pkg we want the candidate version from this package
+ \param helper used in this container instance */
+ static pkgCache::VerIterator getCandidateVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper);
+
+ /** \brief returns the installed version of the package
+
+ \param Cache to be used to query for information
+ \param Pkg we want the installed version from this package
+ \param helper used in this container instance */
+ static pkgCache::VerIterator getInstalledVer(pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper);
+ /*}}}*/
+};
+ /*}}}*/
+template<class Container> class VersionContainer : public VersionContainerInterface {/*{{{*/
+/** \class APT::VersionContainer
+
+ Simple wrapper around a container class like std::set to provide a similar
+ interface to a set of versions as to the complete set of all versions in the
+ pkgCache. */
+ Container _cont;
+public: /*{{{*/
+
+ typedef Container_const_iterator<VersionContainerInterface, Container, VersionContainer> const_iterator;
+ typedef Container_iterator<VersionContainerInterface, Container, VersionContainer> iterator;
+ typedef Container_const_reverse_iterator<VersionContainerInterface, Container, VersionContainer> const_reverse_iterator;
+ typedef Container_reverse_iterator<VersionContainerInterface, Container, VersionContainer> reverse_iterator;
+ typedef typename Container::value_type value_type;
+ typedef typename Container::pointer pointer;
+ typedef typename Container::const_pointer const_pointer;
+ typedef typename Container::reference reference;
+ typedef typename Container::const_reference const_reference;
+ typedef typename Container::difference_type difference_type;
+ typedef typename Container::size_type size_type;
+ typedef typename Container::allocator_type allocator_type;
+
+ bool insert(pkgCache::VerIterator const &V) APT_OVERRIDE { if (V.end() == true) return false; _cont.insert(V); return true; }
+ template<class Cont> void insert(VersionContainer<Cont> const &vercont) { _cont.insert((typename Cont::const_iterator)vercont.begin(), (typename Cont::const_iterator)vercont.end()); }
+ void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); }
+ bool empty() const APT_OVERRIDE { return _cont.empty(); }
+ void clear() APT_OVERRIDE { return _cont.clear(); }
+ size_t size() const APT_OVERRIDE { return _cont.size(); }
+#if APT_GCC_VERSION >= 0x409
+ iterator erase( const_iterator pos ) { return iterator(_cont.erase(pos._iter)); }
+ iterator erase( const_iterator first, const_iterator last ) { return iterator(_cont.erase(first._iter, last._iter)); }
+#else
+ iterator erase( iterator pos ) { return iterator(_cont.erase(pos._iter)); }
+ iterator erase( iterator first, iterator last ) { return iterator(_cont.erase(first._iter, last._iter)); }
+#endif
+ const_iterator begin() const { return const_iterator(_cont.begin()); }
+ const_iterator end() const { return const_iterator(_cont.end()); }
+ const_reverse_iterator rbegin() const { return const_reverse_iterator(_cont.rbegin()); }
+ const_reverse_iterator rend() const { return const_reverse_iterator(_cont.rend()); }
+#if __cplusplus >= 201103L
+ const_iterator cbegin() const { return const_iterator(_cont.cbegin()); }
+ const_iterator cend() const { return const_iterator(_cont.cend()); }
+ const_reverse_iterator crbegin() const { return const_reverse_iterator(_cont.crbegin()); }
+ const_reverse_iterator crend() const { return const_reverse_iterator(_cont.crend()); }
+#endif
+ iterator begin() { return iterator(_cont.begin()); }
+ iterator end() { return iterator(_cont.end()); }
+ reverse_iterator rbegin() { return reverse_iterator(_cont.rbegin()); }
+ reverse_iterator rend() { return reverse_iterator(_cont.rend()); }
+ const_iterator find(pkgCache::VerIterator const &V) const { return const_iterator(_cont.find(V)); }
+
+ VersionContainer() : VersionContainerInterface() {}
+ template<typename Itr> VersionContainer(Itr first, Itr last) : VersionContainerInterface(), _cont(first, last) {}
+#if __cplusplus >= 201103L
+ VersionContainer(std::initializer_list<value_type> list) : VersionContainerInterface(), _cont(list) {}
+ void push_back(value_type&& P) { _cont.emplace_back(std::move(P)); }
+ template<typename... Args> void emplace_back(Args&&... args) { _cont.emplace_back(std::forward<Args>(args)...); }
+#endif
+ void push_back(const value_type& P) { _cont.push_back(P); }
+
+ /** \brief sort all included versions with given comparer
+
+ Some containers are sorted by default, some are not and can't be,
+ but a few like std::vector can be sorted if need be, so this can be
+ specialized in later on. The default is that this will fail though.
+ Specifically, already sorted containers like std::set will return
+ false as well as there is no easy way to check that the given comparer
+ would sort in the same way the set is currently sorted
+
+ \return \b true if the set was sorted, \b false if not. */
+ template<class Compare> bool sort(Compare /*Comp*/) { return false; }
+
+ /** \brief returns all versions specified on the commandline
+
+ Get all versions from the commandline, uses given default version if
+ non specifically requested and executes regex's if needed on names.
+ \param Cache the packages and versions are in
+ \param cmdline Command line the versions should be extracted from
+ \param fallback version specification
+ \param helper responsible for error and message handling */
+ static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
+ CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromCommandLine(&vercon, Cache, cmdline, fallback, helper);
+ return vercon;
+ }
+ static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
+ CacheSetHelper::VerSelector const fallback) {
+ CacheSetHelper helper;
+ return FromCommandLine(Cache, cmdline, fallback, helper);
+ }
+ static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
+ return FromCommandLine(Cache, cmdline, CacheSetHelper::CANDINST);
+ }
+ static VersionContainer FromString(pkgCacheFile &Cache, std::string const &pkg,
+ CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper,
+ bool const /*onlyFromName = false*/) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromString(&vercon, Cache, pkg, fallback, helper);
+ return vercon;
+ }
+ static VersionContainer FromString(pkgCacheFile &Cache, std::string pkg,
+ CacheSetHelper::VerSelector const fallback) {
+ CacheSetHelper helper;
+ return FromString(Cache, pkg, fallback, helper);
+ }
+ static VersionContainer FromString(pkgCacheFile &Cache, std::string pkg) {
+ return FromString(Cache, pkg, CacheSetHelper::CANDINST);
+ }
+APT_IGNORE_DEPRECATED_PUSH
+ static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
+ Version const &fallback, CacheSetHelper &helper) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromCommandLine(&vercon, Cache, cmdline, (CacheSetHelper::VerSelector)fallback, helper);
+ return vercon;
+ }
+ static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
+ Version const &fallback) {
+ CacheSetHelper helper;
+ return FromCommandLine(Cache, cmdline, (CacheSetHelper::VerSelector)fallback, helper);
+ }
+ static VersionContainer FromString(pkgCacheFile &Cache, std::string const &pkg,
+ Version const &fallback, CacheSetHelper &helper,
+ bool const /*onlyFromName = false*/) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromString(&vercon, Cache, pkg, (CacheSetHelper::VerSelector)fallback, helper);
+ return vercon;
+ }
+ static VersionContainer FromString(pkgCacheFile &Cache, std::string pkg,
+ Version const &fallback) {
+ CacheSetHelper helper;
+ return FromString(Cache, pkg, (CacheSetHelper::VerSelector)fallback, helper);
+ }
+APT_IGNORE_DEPRECATED_POP
+
+ /** \brief returns all versions specified for the package
+
+ \param Cache the package and versions are in
+ \param P the package in question
+ \param fallback the version(s) you want to get
+ \param helper the helper used for display and error handling */
+ static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
+ CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromPackage(&vercon, Cache, P, fallback, helper);
+ return vercon;
+ }
+ static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
+ CacheSetHelper::VerSelector const fallback) {
+ CacheSetHelper helper;
+ return FromPackage(Cache, P, fallback, helper);
+ }
+APT_IGNORE_DEPRECATED_PUSH
+ static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
+ Version const &fallback, CacheSetHelper &helper) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromPackage(&vercon, Cache, P, (CacheSetHelper::VerSelector)fallback, helper);
+ return vercon;
+ }
+ static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
+ Version const &fallback) {
+ CacheSetHelper helper;
+ return FromPackage(Cache, P, (CacheSetHelper::VerSelector)fallback, helper);
+ }
+APT_IGNORE_DEPRECATED_POP
+ static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P) {
+ return FromPackage(Cache, P, CacheSetHelper::CANDIDATE);
+ }
+
+ static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
+ pkgCacheFile &Cache,
+ const char **cmdline,
+ std::list<Modifier> const &mods,
+ unsigned short const fallback,
+ CacheSetHelper &helper) {
+ std::map<unsigned short, VersionContainer> versets;
+ for (const char **I = cmdline; *I != 0; ++I) {
+ unsigned short modID = fallback;
+ VersionContainer verset;
+ VersionContainerInterface::FromModifierCommandLine(modID, &verset, Cache, *I, mods, helper);
+ versets[modID].insert(verset);
+ }
+ return versets;
+
+ }
+ static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
+ pkgCacheFile &Cache, const char **cmdline,
+ std::list<Modifier> const &mods,
+ unsigned short const fallback) {
+ CacheSetHelper helper;
+ return GroupedFromCommandLine(Cache, cmdline,
+ mods, fallback, helper);
+ }
+
+ static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D,
+ CacheSetHelper::VerSelector const selector, CacheSetHelper &helper) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromDependency(&vercon, Cache, D, selector, helper);
+ return vercon;
+ }
+ static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D,
+ CacheSetHelper::VerSelector const selector) {
+ CacheSetHelper helper;
+ return FromDependency(Cache, D, selector, helper);
+ }
+APT_IGNORE_DEPRECATED_PUSH
+ static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D,
+ Version const &selector, CacheSetHelper &helper) {
+ VersionContainer vercon;
+ VersionContainerInterface::FromDependency(&vercon, Cache, D, (CacheSetHelper::VerSelector)selector, helper);
+ return vercon;
+ }
+ static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D,
+ Version const &selector) {
+ CacheSetHelper helper;
+ return FromDependency(Cache, D, (CacheSetHelper::VerSelector)selector, helper);
+ }
+APT_IGNORE_DEPRECATED_POP
+ static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D) {
+ return FromDependency(Cache, D, CacheSetHelper::CANDIDATE);
+ }
+ /*}}}*/
+}; /*}}}*/
+// various specialisations for VersionContainer /*{{{*/
+template<> template<class Cont> void VersionContainer<std::list<pkgCache::VerIterator> >::insert(VersionContainer<Cont> const &vercont) {
+ for (typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
+ _cont.push_back(*v);
+}
+#if __cplusplus >= 201103L
+template<> template<class Cont> void VersionContainer<std::forward_list<pkgCache::VerIterator> >::insert(VersionContainer<Cont> const &vercont) {
+ for (typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
+ _cont.push_front(*v);
+}
+#endif
+template<> template<class Cont> void VersionContainer<std::deque<pkgCache::VerIterator> >::insert(VersionContainer<Cont> const &vercont) {
+ for (typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
+ _cont.push_back(*v);
+}
+template<> template<class Cont> void VersionContainer<std::vector<pkgCache::VerIterator> >::insert(VersionContainer<Cont> const &vercont) {
+ for (typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
+ _cont.push_back(*v);
+}
+// these are 'inline' as otherwise the linker has problems with seeing these untemplated
+// specializations again and again - but we need to see them, so that library users can use them
+template<> inline bool VersionContainer<std::list<pkgCache::VerIterator> >::insert(pkgCache::VerIterator const &V) {
+ if (V.end() == true)
+ return false;
+ _cont.push_back(V);
+ return true;
+}
+#if __cplusplus >= 201103L
+template<> inline bool VersionContainer<std::forward_list<pkgCache::VerIterator> >::insert(pkgCache::VerIterator const &V) {
+ if (V.end() == true)
+ return false;
+ _cont.push_front(V);
+ return true;
+}
+#endif
+template<> inline bool VersionContainer<std::deque<pkgCache::VerIterator> >::insert(pkgCache::VerIterator const &V) {
+ if (V.end() == true)
+ return false;
+ _cont.push_back(V);
+ return true;
+}
+template<> inline bool VersionContainer<std::vector<pkgCache::VerIterator> >::insert(pkgCache::VerIterator const &V) {
+ if (V.end() == true)
+ return false;
+ _cont.push_back(V);
+ return true;
+}
+template<> inline void VersionContainer<std::list<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator v = begin; v != end; ++v)
+ _cont.push_back(*v);
+}
+#if __cplusplus >= 201103L
+template<> inline void VersionContainer<std::forward_list<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator v = begin; v != end; ++v)
+ _cont.push_front(*v);
+}
+#endif
+template<> inline void VersionContainer<std::deque<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator v = begin; v != end; ++v)
+ _cont.push_back(*v);
+}
+template<> inline void VersionContainer<std::vector<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
+ for (const_iterator v = begin; v != end; ++v)
+ _cont.push_back(*v);
+}
+#if APT_GCC_VERSION < 0x409
+template<> inline VersionContainer<std::set<pkgCache::VerIterator> >::iterator VersionContainer<std::set<pkgCache::VerIterator> >::erase(iterator i) {
+ _cont.erase(i._iter);
+ return end();
+}
+template<> inline VersionContainer<std::set<pkgCache::VerIterator> >::iterator VersionContainer<std::set<pkgCache::VerIterator> >::erase(iterator first, iterator last) {
+ _cont.erase(first, last);
+ return end();
+}
+#endif
+template<> template<class Compare> inline bool VersionContainer<std::vector<pkgCache::VerIterator> >::sort(Compare Comp) {
+ std::sort(_cont.begin(), _cont.end(), Comp);
+ return true;
+}
+template<> template<class Compare> inline bool VersionContainer<std::list<pkgCache::VerIterator> >::sort(Compare Comp) {
+ _cont.sort(Comp);
+ return true;
+}
+#if __cplusplus >= 201103L
+template<> template<class Compare> inline bool VersionContainer<std::forward_list<pkgCache::VerIterator> >::sort(Compare Comp) {
+ _cont.sort(Comp);
+ return true;
+}
+#endif
+template<> template<class Compare> inline bool VersionContainer<std::deque<pkgCache::VerIterator> >::sort(Compare Comp) {
+ std::sort(_cont.begin(), _cont.end(), Comp);
+ return true;
+}
+ /*}}}*/
+
+typedef VersionContainer<std::set<pkgCache::VerIterator> > VersionSet;
+#if __cplusplus >= 201103L
+typedef VersionContainer<std::unordered_set<pkgCache::VerIterator> > VersionUnorderedSet;
+typedef VersionContainer<std::forward_list<pkgCache::VerIterator> > VersionForwardList;
+#endif
+typedef VersionContainer<std::list<pkgCache::VerIterator> > VersionList;
+typedef VersionContainer<std::deque<pkgCache::VerIterator> > VersionDeque;
+typedef VersionContainer<std::vector<pkgCache::VerIterator> > VersionVector;
+}
+#endif
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
new file mode 100644
index 0000000..151608b
--- /dev/null
+++ b/apt-pkg/cdrom.cc
@@ -0,0 +1,1000 @@
+/*
+ */
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cdrom.h>
+#include <apt-pkg/cdromutl.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexcopy.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <dirent.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+
+#ifdef HAVE_UDEV
+#include <libudev.h>
+#endif
+
+using namespace std;
+
+// FindPackages - Find the package files on the CDROM /*{{{*/
+// ---------------------------------------------------------------------
+/* We look over the cdrom for package files. This is a recursive
+ search that short circuits when it his a package file in the dir.
+ This speeds it up greatly as the majority of the size is in the
+ binary-* sub dirs. */
+bool pkgCdrom::FindPackages(string CD,
+ vector<string> &List,
+ vector<string> &SList,
+ vector<string> &SigList,
+ vector<string> &TransList,
+ string &InfoDir, pkgCdromStatus *log,
+ unsigned int Depth)
+{
+ static ino_t Inodes[9];
+ DIR *D;
+
+ // if we have a look we "pulse" now
+ if(log)
+ log->Update();
+
+ if (Depth >= 7)
+ return true;
+
+ if (CD[CD.length()-1] != '/')
+ CD += '/';
+
+ if (chdir(CD.c_str()) != 0)
+ return _error->Errno("chdir","Unable to change to %s",CD.c_str());
+
+ // Look for a .disk subdirectory
+ if (InfoDir.empty() == true)
+ {
+ if (DirectoryExists(".disk") == true)
+ InfoDir = InfoDir + CD + ".disk/";
+ }
+
+ // Don't look into directories that have been marked to ignore.
+ if (RealFileExists(".aptignr") == true)
+ return true;
+
+ /* Check _first_ for a signature file as apt-cdrom assumes that all files
+ under a Packages/Source file are in control of that file and stops
+ the scanning
+ */
+ if (RealFileExists("Release.gpg") == true || RealFileExists("InRelease") == true)
+ {
+ SigList.push_back(CD);
+ }
+
+ /* Aha! We found some package files. We assume that everything under
+ this dir is controlled by those package files so we don't look down
+ anymore */
+ std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+ c != compressor.end(); ++c)
+ {
+ if (RealFileExists(std::string("Packages").append(c->Extension).c_str()) == false)
+ continue;
+
+ if (_config->FindB("Debug::aptcdrom",false) == true)
+ std::clog << "Found Packages in " << CD << std::endl;
+ List.push_back(CD);
+
+ // Continue down if thorough is given
+ if (_config->FindB("APT::CDROM::Thorough",false) == false)
+ return true;
+ break;
+ }
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+ c != compressor.end(); ++c)
+ {
+ if (RealFileExists(std::string("Sources").append(c->Extension).c_str()) == false)
+ continue;
+
+ if (_config->FindB("Debug::aptcdrom",false) == true)
+ std::clog << "Found Sources in " << CD << std::endl;
+ SList.push_back(CD);
+
+ // Continue down if thorough is given
+ if (_config->FindB("APT::CDROM::Thorough",false) == false)
+ return true;
+ break;
+ }
+
+ // see if we find translation indices
+ if (DirectoryExists("i18n") == true)
+ {
+ D = opendir("i18n");
+ for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D))
+ {
+ if(strncmp(Dir->d_name, "Translation-", strlen("Translation-")) != 0)
+ continue;
+ string file = Dir->d_name;
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+ c != compressor.end(); ++c)
+ {
+ string fileext = flExtension(file);
+ if (file == fileext)
+ fileext.clear();
+ else if (fileext.empty() == false)
+ fileext = "." + fileext;
+
+ if (c->Extension == fileext)
+ {
+ if (_config->FindB("Debug::aptcdrom",false) == true)
+ std::clog << "Found translation " << Dir->d_name << " in " << CD << "i18n/" << std::endl;
+ file.erase(file.size() - fileext.size());
+ TransList.push_back(CD + "i18n/" + file);
+ break;
+ }
+ }
+ }
+ closedir(D);
+ }
+
+ D = opendir(".");
+ if (D == 0)
+ return _error->Errno("opendir","Unable to read %s",CD.c_str());
+
+ // Run over the directory
+ for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D))
+ {
+ // Skip some files..
+ if (strcmp(Dir->d_name,".") == 0 ||
+ strcmp(Dir->d_name,"..") == 0 ||
+ strcmp(Dir->d_name,".disk") == 0 ||
+ strcmp(Dir->d_name,"debian-installer") == 0)
+ continue;
+
+ // See if the name is a sub directory
+ struct stat Buf;
+ if (stat(Dir->d_name,&Buf) != 0)
+ continue;
+
+ if (S_ISDIR(Buf.st_mode) == 0)
+ continue;
+
+ unsigned int I;
+ for (I = 0; I != Depth; I++)
+ if (Inodes[I] == Buf.st_ino)
+ break;
+ if (I != Depth)
+ continue;
+
+ // Store the inodes weve seen
+ Inodes[Depth] = Buf.st_ino;
+
+ // Descend
+ if (FindPackages(CD + Dir->d_name,List,SList,SigList,TransList,InfoDir,log,Depth+1) == false)
+ break;
+
+ if (chdir(CD.c_str()) != 0)
+ {
+ _error->Errno("chdir","Unable to change to %s", CD.c_str());
+ closedir(D);
+ return false;
+ }
+ };
+
+ closedir(D);
+
+ return !_error->PendingError();
+}
+ /*}}}*/
+// Score - We compute a 'score' for a path /*{{{*/
+// ---------------------------------------------------------------------
+/* Paths are scored based on how close they come to what I consider
+ normal. That is ones that have 'dist' 'stable' 'testing' will score
+ higher than ones without. */
+int pkgCdrom::Score(string Path)
+{
+ int Res = 0;
+ if (Path.find("stable/") != string::npos)
+ Res += 29;
+ if (Path.find("/binary-") != string::npos)
+ Res += 20;
+ if (Path.find("testing/") != string::npos)
+ Res += 28;
+ if (Path.find("unstable/") != string::npos)
+ Res += 27;
+ if (Path.find("/dists/") != string::npos)
+ Res += 40;
+ if (Path.find("/main/") != string::npos)
+ Res += 20;
+ if (Path.find("/contrib/") != string::npos)
+ Res += 20;
+ if (Path.find("/non-free/") != string::npos)
+ Res += 20;
+ if (Path.find("/non-US/") != string::npos)
+ Res += 20;
+ if (Path.find("/source/") != string::npos)
+ Res += 10;
+ if (Path.find("/debian/") != string::npos)
+ Res -= 10;
+
+ // check for symlinks in the patch leading to the actual file
+ // a symlink gets a big penalty
+ struct stat Buf;
+ string statPath = flNotFile(Path);
+ string cdromPath = _config->FindDir("Acquire::cdrom::mount");
+ while(statPath != cdromPath && statPath != "./") {
+ statPath.resize(statPath.size()-1); // remove the trailing '/'
+ if (lstat(statPath.c_str(),&Buf) == 0) {
+ if(S_ISLNK(Buf.st_mode)) {
+ Res -= 60;
+ break;
+ }
+ }
+ statPath = flNotFile(statPath); // descent
+ }
+
+ return Res;
+}
+ /*}}}*/
+// DropBinaryArch - Dump dirs with a string like /binary-<foo>/ /*{{{*/
+// ---------------------------------------------------------------------
+/* Here we drop everything that is not this machines arch */
+bool pkgCdrom::DropBinaryArch(vector<string> &List)
+{
+
+ for (unsigned int I = 0; I < List.size(); I++)
+ {
+ const char *Str = List[I].c_str();
+ const char *Start, *End;
+ if ((Start = strstr(Str,"/binary-")) == 0)
+ continue;
+
+ // Between Start and End is the architecture
+ Start += 8;
+ if ((End = strstr(Start,"/")) != 0 && Start != End &&
+ APT::Configuration::checkArchitecture(string(Start, End)) == true)
+ continue; // okay, architecture is accepted
+
+ // not accepted -> Erase it
+ List.erase(List.begin() + I);
+ --I; // the next entry is at the same index after the erase
+ }
+
+ return true;
+}
+ /*}}}*/
+// DropTranslation - Dump unwanted Translation-<lang> files /*{{{*/
+// ---------------------------------------------------------------------
+/* Here we drop everything that is not configured in Acquire::Languages */
+bool pkgCdrom::DropTranslation(vector<string> &List)
+{
+ for (unsigned int I = 0; I < List.size(); I++)
+ {
+ const char *Start;
+ if ((Start = strstr(List[I].c_str(), "/Translation-")) == NULL)
+ continue;
+ Start += strlen("/Translation-");
+
+ if (APT::Configuration::checkLanguage(Start, true) == true)
+ continue;
+
+ // not accepted -> Erase it
+ List.erase(List.begin() + I);
+ --I; // the next entry is at the same index after the erase
+ }
+
+ return true;
+}
+ /*}}}*/
+// DropRepeats - Drop repeated files resulting from symlinks /*{{{*/
+// ---------------------------------------------------------------------
+/* Here we go and stat every file that we found and strip dup inodes. */
+bool pkgCdrom::DropRepeats(vector<string> &List,const char *Name)
+{
+ bool couldFindAllFiles = true;
+ // Get a list of all the inodes
+ ino_t *Inodes = new ino_t[List.size()];
+ for (unsigned int I = 0; I != List.size(); ++I)
+ {
+ struct stat Buf;
+ bool found = false;
+
+ std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+ c != compressor.end(); ++c)
+ {
+ std::string const filename = List[I] + Name + c->Extension;
+ if (stat(filename.c_str(), &Buf) != 0)
+ continue;
+ Inodes[I] = Buf.st_ino;
+ found = true;
+ break;
+ }
+
+ if (found == false)
+ {
+ _error->Errno("stat","Failed to stat %s%s",List[I].c_str(), Name);
+ couldFindAllFiles = false;
+ Inodes[I] = 0;
+ }
+ }
+
+ // Look for dups
+ for (unsigned int I = 0; I != List.size(); I++)
+ {
+ if (Inodes[I] == 0)
+ continue;
+ for (unsigned int J = I+1; J < List.size(); J++)
+ {
+ // No match
+ if (Inodes[J] == 0 || Inodes[J] != Inodes[I])
+ continue;
+
+ // We score the two paths.. and erase one
+ int ScoreA = Score(List[I]);
+ int ScoreB = Score(List[J]);
+ if (ScoreA < ScoreB)
+ {
+ List[I] = string();
+ break;
+ }
+
+ List[J] = string();
+ }
+ }
+ delete[] Inodes;
+
+ // Wipe erased entries
+ for (unsigned int I = 0; I < List.size();)
+ {
+ if (List[I].empty() == false)
+ I++;
+ else
+ List.erase(List.begin()+I);
+ }
+
+ return couldFindAllFiles;
+}
+ /*}}}*/
+// ReduceSourceList - Takes the path list and reduces it /*{{{*/
+// ---------------------------------------------------------------------
+/* This takes the list of source list expressed entries and collects
+ similar ones to form a single entry for each dist */
+void pkgCdrom::ReduceSourcelist(string /*CD*/,vector<string> &List)
+{
+ sort(List.begin(),List.end());
+
+ // Collect similar entries
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ // Find a space..
+ string::size_type Space = (*I).find(' ');
+ if (Space == string::npos)
+ continue;
+ string::size_type SSpace = (*I).find(' ',Space + 1);
+ if (SSpace == string::npos)
+ continue;
+
+ string Word1 = string(*I,Space,SSpace-Space);
+ string Prefix = string(*I,0,Space);
+ string Component = string(*I,SSpace);
+ for (vector<string>::iterator J = List.begin(); J != I; ++J)
+ {
+ // Find a space..
+ string::size_type Space2 = (*J).find(' ');
+ if (Space2 == string::npos)
+ continue;
+ string::size_type SSpace2 = (*J).find(' ',Space2 + 1);
+ if (SSpace2 == string::npos)
+ continue;
+
+ if (string(*J,0,Space2) != Prefix)
+ continue;
+ if (string(*J,Space2,SSpace2-Space2) != Word1)
+ continue;
+
+ string Component2 = string(*J, SSpace2) + " ";
+ if (Component2.find(Component + " ") == std::string::npos)
+ *J += Component;
+ I->clear();
+ }
+ }
+
+ // Wipe erased entries
+ for (unsigned int I = 0; I < List.size();)
+ {
+ if (List[I].empty() == false)
+ I++;
+ else
+ List.erase(List.begin()+I);
+ }
+}
+ /*}}}*/
+// WriteDatabase - Write the CDROM Database file /*{{{*/
+// ---------------------------------------------------------------------
+/* We rewrite the configuration class associated with the cdrom database. */
+bool pkgCdrom::WriteDatabase(Configuration &Cnf)
+{
+ string DFile = _config->FindFile("Dir::State::cdroms");
+ string NewFile = DFile + ".new";
+
+ RemoveFile("WriteDatabase", NewFile);
+ ofstream Out(NewFile.c_str());
+ if (!Out)
+ return _error->Errno("ofstream::ofstream",
+ "Failed to open %s.new",DFile.c_str());
+
+ /* Write out all of the configuration directives by walking the
+ configuration tree */
+ Cnf.Dump(Out, NULL, "%F \"%v\";\n", false);
+
+ Out.close();
+
+ if (FileExists(DFile) == true)
+ rename(DFile.c_str(), (DFile + '~').c_str());
+ if (rename(NewFile.c_str(),DFile.c_str()) != 0)
+ return _error->Errno("rename","Failed to rename %s.new to %s",
+ DFile.c_str(),DFile.c_str());
+
+ return true;
+}
+ /*}}}*/
+// WriteSourceList - Write an updated sourcelist /*{{{*/
+// ---------------------------------------------------------------------
+/* This reads the old source list and copies it into the new one. It
+ appends the new CDROM entries just after the first block of comments.
+ This places them first in the file. It also removes any old entries
+ that were the same. */
+bool pkgCdrom::WriteSourceList(string Name,vector<string> &List,bool Source)
+{
+ if (List.empty() == true)
+ return true;
+
+ string File = _config->FindFile("Dir::Etc::sourcelist");
+
+ // Open the stream for reading
+ ifstream F((FileExists(File)?File.c_str():"/dev/null"),
+ ios::in );
+ if (F.fail() == true)
+ return _error->Errno("ifstream::ifstream","Opening %s",File.c_str());
+
+ string NewFile = File + ".new";
+ RemoveFile("WriteDatabase", NewFile);
+ ofstream Out(NewFile.c_str());
+ if (!Out)
+ return _error->Errno("ofstream::ofstream",
+ "Failed to open %s.new",File.c_str());
+
+ // Create a short uri without the path
+ string ShortURI = "cdrom:[" + Name + "]/";
+ string ShortURI2 = "cdrom:" + Name + "/"; // For Compatibility
+
+ string Type;
+ if (Source == true)
+ Type = "deb-src";
+ else
+ Type = "deb";
+
+ char Buffer[300];
+ int CurLine = 0;
+ bool First = true;
+ while (F.eof() == false)
+ {
+ F.getline(Buffer,sizeof(Buffer));
+ CurLine++;
+ if (F.fail() && !F.eof())
+ return _error->Error(_("Line %u too long in source list %s."),
+ CurLine,File.c_str());
+ _strtabexpand(Buffer,sizeof(Buffer));
+ _strstrip(Buffer);
+
+ // Comment or blank
+ if (Buffer[0] == '#' || Buffer[0] == 0)
+ {
+ Out << Buffer << endl;
+ continue;
+ }
+
+ if (First == true)
+ {
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ string::size_type Space = (*I).find(' ');
+ if (Space == string::npos)
+ return _error->Error("Internal error");
+ Out << Type << " cdrom:[" << Name << "]/" << string(*I,0,Space) <<
+ " " << string(*I,Space+1) << endl;
+ }
+ }
+ First = false;
+
+ // Grok it
+ string cType;
+ string URI;
+ const char *C = Buffer;
+ if (ParseQuoteWord(C,cType) == false ||
+ ParseQuoteWord(C,URI) == false)
+ {
+ Out << Buffer << endl;
+ continue;
+ }
+
+ // Emit lines like this one
+ if (cType != Type || (string(URI,0,ShortURI.length()) != ShortURI &&
+ string(URI,0,ShortURI.length()) != ShortURI2))
+ {
+ Out << Buffer << endl;
+ continue;
+ }
+ }
+
+ // Just in case the file was empty
+ if (First == true)
+ {
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ string::size_type Space = (*I).find(' ');
+ if (Space == string::npos)
+ return _error->Error("Internal error");
+
+ Out << "deb cdrom:[" << Name << "]/" << string(*I,0,Space) <<
+ " " << string(*I,Space+1) << endl;
+ }
+ }
+
+ Out.close();
+
+ rename(File.c_str(), (File + '~').c_str());
+ if (rename(NewFile.c_str(),File.c_str()) != 0)
+ return _error->Errno("rename","Failed to rename %s.new to %s",
+ File.c_str(),File.c_str());
+
+ return true;
+}
+ /*}}}*/
+bool pkgCdrom::UnmountCDROM(std::string const &CDROM, pkgCdromStatus * const log)/*{{{*/
+{
+ if (_config->FindB("APT::CDROM::NoMount",false) == true)
+ return true;
+ if (log != NULL)
+ log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
+ return UnmountCdrom(CDROM);
+}
+ /*}}}*/
+bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, std::string &ident, pkgCdromStatus * const log, bool const interactive)/*{{{*/
+{
+ // Startup
+ CDROM = _config->FindDir("Acquire::cdrom::mount");
+ if (CDROM[0] == '.')
+ CDROM= SafeGetCWD() + '/' + CDROM;
+
+ if (log != NULL)
+ {
+ string msg;
+ log->SetTotal(STEP_LAST);
+ strprintf(msg, _("Using CD-ROM mount point %s\n"), CDROM.c_str());
+ log->Update(msg, STEP_PREPARE);
+ }
+
+ // Unmount the CD and get the user to put in the one they want
+ if (_config->FindB("APT::CDROM::NoMount", false) == false)
+ {
+ if (interactive == true)
+ {
+ UnmountCDROM(CDROM, log);
+
+ if(log != NULL)
+ {
+ log->Update(_("Waiting for disc...\n"), STEP_WAIT);
+ if(!log->ChangeCdrom()) {
+ // user aborted
+ return false;
+ }
+ }
+ }
+
+ // Mount the new CDROM
+ if(log != NULL)
+ log->Update(_("Mounting CD-ROM...\n"), STEP_MOUNT);
+
+ if (MountCdrom(CDROM) == false)
+ return _error->Error("Failed to mount the cdrom.");
+ }
+
+ if (IsMounted(CDROM) == false)
+ return _error->Error("Failed to mount the cdrom.");
+
+ // Hash the CD to get an ID
+ if (log != NULL)
+ log->Update(_("Identifying... "), STEP_IDENT);
+
+ if (IdentCdrom(CDROM,ident) == false)
+ {
+ ident = "";
+ if (log != NULL)
+ log->Update("\n");
+ UnmountCDROM(CDROM, NULL);
+ return false;
+ }
+
+ if (log != NULL)
+ {
+ string msg;
+ strprintf(msg, "[%s]\n", ident.c_str());
+ log->Update(msg);
+ }
+
+ // Read the database
+ string DFile = _config->FindFile("Dir::State::cdroms");
+ if (FileExists(DFile) == true)
+ {
+ if (ReadConfigFile(Database,DFile) == false)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return _error->Error("Unable to read the cdrom database %s",
+ DFile.c_str());
+ }
+ }
+ return true;
+}
+ /*}}}*/
+bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) /*{{{*/
+{
+ Configuration Database;
+ std::string CDROM;
+ if (MountAndIdentCDROM(Database, CDROM, ident, log, false) == false)
+ return false;
+
+ if (log != NULL)
+ {
+ string msg;
+ strprintf(msg, _("Stored label: %s\n"),
+ Database.Find("CD::"+ident).c_str());
+ log->Update(msg);
+ }
+
+ // Unmount and finish
+ UnmountCDROM(CDROM, log);
+ return true;
+}
+ /*}}}*/
+bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/
+{
+ Configuration Database;
+ std::string ID, CDROM;
+ if (MountAndIdentCDROM(Database, CDROM, ID, log, true) == false)
+ return false;
+
+ if(log != NULL)
+ log->Update(_("Scanning disc for index files...\n"),STEP_SCAN);
+
+ // Get the CD structure
+ vector<string> List;
+ vector<string> SourceList;
+ vector<string> SigList;
+ vector<string> TransList;
+ string StartDir = SafeGetCWD();
+ string InfoDir;
+ if (FindPackages(CDROM,List,SourceList, SigList,TransList,InfoDir,log) == false)
+ {
+ if (log != NULL)
+ log->Update("\n");
+ UnmountCDROM(CDROM, NULL);
+ return false;
+ }
+
+ if (chdir(StartDir.c_str()) != 0)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return _error->Errno("chdir","Unable to change to %s", StartDir.c_str());
+ }
+
+ if (_config->FindB("Debug::aptcdrom",false) == true)
+ {
+ cout << "I found (binary):" << endl;
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ cout << *I << endl;
+ cout << "I found (source):" << endl;
+ for (vector<string>::iterator I = SourceList.begin(); I != SourceList.end(); ++I)
+ cout << *I << endl;
+ cout << "I found (Signatures):" << endl;
+ for (vector<string>::iterator I = SigList.begin(); I != SigList.end(); ++I)
+ cout << *I << endl;
+ }
+
+ //log->Update(_("Cleaning package lists..."), STEP_CLEAN);
+
+ // Fix up the list
+ DropBinaryArch(List);
+ DropRepeats(List,"Packages");
+ DropRepeats(SourceList,"Sources");
+ // FIXME: We ignore stat() errors here as we usually have only one of those in use
+ // This has little potential to drop 'valid' stat() errors as we know that one of these
+ // files need to exist, but it would be better if we would check it here
+ _error->PushToStack();
+ DropRepeats(SigList,"Release.gpg");
+ DropRepeats(SigList,"InRelease");
+ _error->RevertToStack();
+ DropRepeats(TransList,"");
+ if (_config->FindB("APT::CDROM::DropTranslation", true) == true)
+ DropTranslation(TransList);
+ if(log != NULL) {
+ string msg;
+ strprintf(msg, _("Found %zu package indexes, %zu source indexes, "
+ "%zu translation indexes and %zu signatures\n"),
+ List.size(), SourceList.size(), TransList.size(),
+ SigList.size());
+ log->Update(msg, STEP_SCAN);
+ }
+
+ if (List.empty() == true && SourceList.empty() == true)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return _error->Error(_("Unable to locate any package files, perhaps this is not a Debian Disc or the wrong architecture?"));
+ }
+
+ // Check if the CD is in the database
+ string Name;
+ if (Database.Exists("CD::" + ID) == false ||
+ _config->FindB("APT::CDROM::Rename",false) == true)
+ {
+ // Try to use the CDs label if at all possible
+ if (InfoDir.empty() == false &&
+ FileExists(InfoDir + "/info") == true)
+ {
+ ifstream F((InfoDir + "/info").c_str());
+ if (F.good() == true)
+ getline(F,Name);
+
+ if (Name.empty() == false)
+ {
+ // Escape special characters
+ string::iterator J = Name.begin();
+ for (; J != Name.end(); ++J)
+ if (*J == '"' || *J == ']' || *J == '[')
+ *J = '_';
+
+ if(log != NULL)
+ {
+ string msg;
+ strprintf(msg, _("Found label '%s'\n"), Name.c_str());
+ log->Update(msg);
+ }
+ Database.Set("CD::" + ID + "::Label",Name);
+ }
+ }
+
+ if (_config->FindB("APT::CDROM::Rename",false) == true ||
+ Name.empty() == true)
+ {
+ if(log == NULL)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return _error->Error("No disc name found and no way to ask for it");
+ }
+
+ while(true) {
+ if(!log->AskCdromName(Name)) {
+ // user canceld
+ UnmountCDROM(CDROM, NULL);
+ return false;
+ }
+ cout << "Name: '" << Name << "'" << endl;
+
+ if (Name.empty() == false &&
+ Name.find('"') == string::npos &&
+ Name.find('[') == string::npos &&
+ Name.find(']') == string::npos)
+ break;
+ log->Update(_("That is not a valid name, try again.\n"));
+ }
+ }
+ }
+ else
+ Name = Database.Find("CD::" + ID);
+
+ // Escape special characters
+ string::iterator J = Name.begin();
+ for (; J != Name.end(); ++J)
+ if (*J == '"' || *J == ']' || *J == '[')
+ *J = '_';
+
+ Database.Set("CD::" + ID,Name);
+ if(log != NULL)
+ {
+ string msg;
+ strprintf(msg, _("This disc is called: \n'%s'\n"), Name.c_str());
+ log->Update(msg);
+ log->Update(_("Copying package lists..."), STEP_COPY);
+ }
+
+ // check for existence and possibly create state directory for copying
+ string const listDir = _config->FindDir("Dir::State::lists");
+ string const partialListDir = listDir + "partial/";
+ mode_t const mode = umask(S_IWGRP | S_IWOTH);
+ bool const creation_fail = (CreateAPTDirectoryIfNeeded(_config->FindDir("Dir::State"), partialListDir) == false &&
+ CreateAPTDirectoryIfNeeded(listDir, partialListDir) == false);
+ umask(mode);
+ if (creation_fail == true)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return _error->Errno("cdrom", _("List directory %s is missing."), (listDir + "partial").c_str());
+ }
+
+ // take care of the signatures and copy them if they are ok
+ // (we do this before PackageCopy as it modifies "List" and "SourceList")
+ SigVerify SignVerify;
+ SignVerify.CopyAndVerify(CDROM, Name, SigList, List, SourceList);
+
+ // Copy the package files to the state directory
+ PackageCopy Copy;
+ SourceCopy SrcCopy;
+ TranslationsCopy TransCopy;
+ if (Copy.CopyPackages(CDROM,Name,List, log) == false ||
+ SrcCopy.CopyPackages(CDROM,Name,SourceList, log) == false ||
+ TransCopy.CopyTranslations(CDROM,Name,TransList, log) == false)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return false;
+ }
+
+ // reduce the List so that it takes less space in sources.list
+ ReduceSourcelist(CDROM,List);
+ ReduceSourcelist(CDROM,SourceList);
+
+ // Write the database and sourcelist
+ if (_config->FindB("APT::cdrom::NoAct",false) == false)
+ {
+ if (WriteDatabase(Database) == false)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return false;
+ }
+
+ if(log != NULL)
+ log->Update(_("Writing new source list\n"), STEP_WRITE);
+ if (WriteSourceList(Name,List,false) == false ||
+ WriteSourceList(Name,SourceList,true) == false)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return false;
+ }
+ }
+
+ // Print the sourcelist entries
+ if(log != NULL)
+ log->Update(_("Source list entries for this disc are:\n"));
+
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ string::size_type Space = (*I).find(' ');
+ if (Space == string::npos)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return _error->Error("Internal error");
+ }
+
+ if(log != NULL)
+ {
+ stringstream msg;
+ msg << "deb cdrom:[" << Name << "]/" << string(*I,0,Space) <<
+ " " << string(*I,Space+1) << endl;
+ log->Update(msg.str());
+ }
+ }
+
+ for (vector<string>::iterator I = SourceList.begin(); I != SourceList.end(); ++I)
+ {
+ string::size_type Space = (*I).find(' ');
+ if (Space == string::npos)
+ {
+ UnmountCDROM(CDROM, NULL);
+ return _error->Error("Internal error");
+ }
+
+ if(log != NULL) {
+ stringstream msg;
+ msg << "deb-src cdrom:[" << Name << "]/" << string(*I,0,Space) <<
+ " " << string(*I,Space+1) << endl;
+ log->Update(msg.str());
+ }
+ }
+
+ // Unmount and finish
+ UnmountCDROM(CDROM, log);
+ return true;
+}
+ /*}}}*/
+
+pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/
+ : d(NULL)
+{
+}
+ /*}}}*/
+
+bool pkgUdevCdromDevices::Dlopen() /*{{{*/
+{
+ return true;
+}
+ /*}}}*/
+// convenience interface, this will just call ScanForRemovable /*{{{*/
+vector<CdromDevice> pkgUdevCdromDevices::Scan()
+{
+ bool CdromOnly = _config->FindB("APT::cdrom::CdromOnly", true);
+ return ScanForRemovable(CdromOnly);
+}
+ /*}}}*/
+vector<CdromDevice> pkgUdevCdromDevices::ScanForRemovable(bool CdromOnly)/*{{{*/
+{
+ vector<CdromDevice> cdrom_devices;
+#ifdef HAVE_UDEV
+ struct udev_enumerate *enumerate;
+ struct udev_list_entry *l, *devices;
+ struct udev *udev_ctx;
+
+ udev_ctx = udev_new();
+ enumerate = udev_enumerate_new (udev_ctx);
+ if (CdromOnly)
+ udev_enumerate_add_match_property(enumerate, "ID_CDROM", "1");
+ else {
+ udev_enumerate_add_match_sysattr(enumerate, "removable", "1");
+ }
+
+ udev_enumerate_scan_devices (enumerate);
+ devices = udev_enumerate_get_list_entry (enumerate);
+ for (l = devices; l != NULL; l = udev_list_entry_get_next (l))
+ {
+ CdromDevice cdrom;
+ struct udev_device *udevice;
+ udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerate), udev_list_entry_get_name (l));
+ if (udevice == NULL)
+ continue;
+ const char* devnode = udev_device_get_devnode(udevice);
+
+ // try fstab_dir first
+ string mountpath;
+ const char* mp = udev_device_get_property_value(udevice, "FSTAB_DIR");
+ if (mp)
+ mountpath = string(mp);
+ else
+ mountpath = FindMountPointForDevice(devnode);
+
+ // fill in the struct
+ cdrom.DeviceName = string(devnode);
+ if (mountpath != "") {
+ cdrom.MountPath = mountpath;
+ string s = mountpath;
+ cdrom.Mounted = IsMounted(s);
+ } else {
+ cdrom.Mounted = false;
+ cdrom.MountPath = "";
+ }
+ cdrom_devices.push_back(cdrom);
+ }
+#endif
+ return cdrom_devices;
+}
+ /*}}}*/
+
+pkgUdevCdromDevices::~pkgUdevCdromDevices() /*{{{*/
+{
+}
+ /*}}}*/
+
+pkgCdromStatus::pkgCdromStatus() : d(NULL), totalSteps(0) {}
+pkgCdromStatus::~pkgCdromStatus() {}
+
+pkgCdrom::pkgCdrom() : d(NULL) {}
+pkgCdrom::~pkgCdrom() {}
diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h
new file mode 100644
index 0000000..6bc2b34
--- /dev/null
+++ b/apt-pkg/cdrom.h
@@ -0,0 +1,135 @@
+#ifndef PKGLIB_CDROM_H
+#define PKGLIB_CDROM_H
+
+#include <apt-pkg/macros.h>
+
+#include <string>
+#include <vector>
+
+#include <stddef.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/init.h>
+using namespace std;
+#endif
+
+class Configuration;
+class OpProgress;
+
+class pkgCdromStatus /*{{{*/
+{
+ void * const d;
+ protected:
+ int totalSteps;
+
+ public:
+ pkgCdromStatus();
+ virtual ~pkgCdromStatus();
+
+ // total steps
+ virtual void SetTotal(int total) { totalSteps = total; };
+ // update steps, will be called regularly as a "pulse"
+ virtual void Update(std::string text="", int current=0) = 0;
+
+ // ask for cdrom insert
+ virtual bool ChangeCdrom() = 0;
+ // ask for cdrom name
+ virtual bool AskCdromName(std::string &Name) = 0;
+ // Progress indicator for the Index rewriter
+ virtual OpProgress* GetOpProgress() {return NULL; };
+};
+ /*}}}*/
+class pkgCdrom /*{{{*/
+{
+ protected:
+ enum {
+ STEP_PREPARE = 1,
+ STEP_UNMOUNT,
+ STEP_WAIT,
+ STEP_MOUNT,
+ STEP_IDENT,
+ STEP_SCAN,
+ STEP_COPY,
+ STEP_WRITE,
+ STEP_UNMOUNT3,
+ STEP_LAST
+ };
+
+
+ bool FindPackages(std::string CD,
+ std::vector<std::string> &List,
+ std::vector<std::string> &SList,
+ std::vector<std::string> &SigList,
+ std::vector<std::string> &TransList,
+ std::string &InfoDir, pkgCdromStatus *log,
+ unsigned int Depth = 0);
+ bool DropBinaryArch(std::vector<std::string> &List);
+ bool DropRepeats(std::vector<std::string> &List,const char *Name);
+ bool DropTranslation(std::vector<std::string> &List);
+ void ReduceSourcelist(std::string CD,std::vector<std::string> &List);
+ bool WriteDatabase(Configuration &Cnf);
+ bool WriteSourceList(std::string Name,std::vector<std::string> &List,bool Source);
+ int Score(std::string Path);
+
+ public:
+ bool Ident(std::string &ident, pkgCdromStatus *log);
+ bool Add(pkgCdromStatus *log);
+
+ pkgCdrom();
+ virtual ~pkgCdrom();
+
+ private:
+ void * const d;
+
+ APT_HIDDEN bool MountAndIdentCDROM(Configuration &Database, std::string &CDROM,
+ std::string &ident, pkgCdromStatus * const log, bool const interactive);
+ APT_HIDDEN bool UnmountCDROM(std::string const &CDROM, pkgCdromStatus * const log);
+};
+ /*}}}*/
+
+
+// class that uses libudev to find cdrom/removable devices dynamically
+struct CdromDevice /*{{{*/
+{
+ std::string DeviceName;
+ bool Mounted;
+ std::string MountPath;
+};
+ /*}}}*/
+class pkgUdevCdromDevices /*{{{*/
+{
+ void * const d;
+
+ protected:
+ // old libudev dlopen structure, not used anymore, but can't break ABI
+ void *_padding;
+ struct _padding *(*_padding__new)(void);
+ int (*_padding__enumerate_add_match_property)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value);
+ int (*_padding__enumerate_scan_devices)(struct _padding_enumerate *_padding_enumerate);
+ struct _padding_list_entry *(*_padding__enumerate_get_list_entry)(struct _padding_enumerate *_padding_enumerate);
+ struct _padding_device *(*_padding__device_new_from_syspath)(struct _padding *_padding, const char *syspath);
+ struct _padding *(*_padding__enumerate_get__padding)(struct _padding_enumerate *_padding_enumerate);
+ const char *(*_padding__list_entry_get_name)(struct _padding_list_entry *list_entry);
+ const char *(*_padding__device_get_devnode)(struct _padding_device *_padding_device);
+ struct _padding_enumerate *(*_padding__enumerate_new)(struct _padding *_padding);
+ struct _padding_list_entry *(*_padding__list_entry_get_next)(struct _padding_list_entry *list_entry);
+ const char *(*_padding__device_get_property_value)(struct _padding_device *_padding_device, const char *key);
+ int (*_padding__enumerate_add_match_sysattr)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value);
+ // end lib_padding dlopen
+
+ public:
+ pkgUdevCdromDevices();
+ virtual ~pkgUdevCdromDevices();
+
+ // try to open
+ bool Dlopen();
+
+ // convenience interface, this will just call ScanForRemovable
+ // with "APT::cdrom::CdromOnly"
+ std::vector<CdromDevice> Scan();
+
+ std::vector<CdromDevice> ScanForRemovable(bool CdromOnly);
+};
+ /*}}}*/
+
+#endif
diff --git a/apt-pkg/clean.cc b/apt-pkg/clean.cc
new file mode 100644
index 0000000..f335554
--- /dev/null
+++ b/apt-pkg/clean.cc
@@ -0,0 +1,151 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Clean - Clean out downloaded directories
+
+ ##################################################################### */
+ /*}}}*/
+// Includes /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/clean.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/strutl.h>
+
+#include <string>
+#include <dirent.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+// ArchiveCleaner::Go - Perform smart cleanup of the archive /*{{{*/
+// ---------------------------------------------------------------------
+/* Scan the directory for files to erase, we check the version information
+ against our database to see if it is interesting */
+bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache)
+{
+ bool CleanInstalled = _config->FindB("APT::Clean-Installed",true);
+
+ if(Dir == "/")
+ return _error->Error(_("Clean of %s is not supported"), Dir.c_str());
+
+ // non-existing directories are always clean
+ // we do not check for a directory explicitly to support symlinks
+ if (FileExists(Dir) == false)
+ return true;
+
+ auto const withoutChangingDir = dynamic_cast<pkgArchiveCleaner2*>(this);
+ int const dirfd = open(Dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC);
+ if (dirfd == -1)
+ return _error->Errno("open",_("Unable to read %s"),Dir.c_str());
+ std::string CWD;
+ if (withoutChangingDir == nullptr)
+ {
+ CWD = SafeGetCWD();
+ if (fchdir(dirfd) != 0)
+ return _error->Errno("fchdir",_("Unable to change to %s"),Dir.c_str());
+ }
+ DIR * const D = fdopendir(dirfd);
+ if (D == nullptr)
+ return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
+
+ for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D))
+ {
+ // Skip some files..
+ if (strcmp(Dir->d_name, "lock") == 0 ||
+ strcmp(Dir->d_name, "partial") == 0 ||
+ strcmp(Dir->d_name, "auxfiles") == 0 ||
+ strcmp(Dir->d_name, "lost+found") == 0 ||
+ strcmp(Dir->d_name, ".") == 0 ||
+ strcmp(Dir->d_name, "..") == 0)
+ continue;
+
+ struct stat St;
+ if (fstatat(dirfd, Dir->d_name,&St, 0) != 0)
+ {
+ _error->Errno("stat",_("Unable to stat %s."),Dir->d_name);
+ closedir(D);
+ return false;
+ }
+
+ // Grab the package name
+ const char *I = Dir->d_name;
+ for (; *I != 0 && *I != '_';I++);
+ if (*I != '_')
+ continue;
+ std::string Pkg = DeQuoteString(std::string(Dir->d_name,I-Dir->d_name));
+
+ // Grab the version
+ const char *Start = I + 1;
+ for (I = Start; *I != 0 && *I != '_';I++);
+ if (*I != '_')
+ continue;
+ std::string Ver = DeQuoteString(std::string(Start,I-Start));
+
+ // Grab the arch
+ Start = I + 1;
+ for (I = Start; *I != 0 && *I != '.' ;I++);
+ if (*I != '.')
+ continue;
+ std::string const Arch = DeQuoteString(std::string(Start,I-Start));
+
+ // ignore packages of unconfigured architectures
+ if (APT::Configuration::checkArchitecture(Arch) == false)
+ continue;
+
+ // Lookup the package
+ pkgCache::PkgIterator P = Cache.FindPkg(Pkg, Arch);
+ if (P.end() != true)
+ {
+ pkgCache::VerIterator V = P.VersionList();
+ for (; V.end() == false; ++V)
+ {
+ // See if we can fetch this version at all
+ bool IsFetchable = false;
+ for (pkgCache::VerFileIterator J = V.FileList();
+ J.end() == false; ++J)
+ {
+ if (CleanInstalled == true &&
+ J.File().Flagged(pkgCache::Flag::NotSource))
+ continue;
+ IsFetchable = true;
+ break;
+ }
+
+ // See if this version matches the file
+ if (IsFetchable == true && Ver == V.VerStr())
+ break;
+ }
+
+ // We found a match, keep the file
+ if (V.end() == false)
+ continue;
+ }
+
+ if (withoutChangingDir == nullptr)
+ {
+ APT_IGNORE_DEPRECATED_PUSH
+ Erase(Dir->d_name, Pkg, Ver, St);
+ APT_IGNORE_DEPRECATED_POP
+ }
+ else
+ withoutChangingDir->Erase(dirfd, Dir->d_name, Pkg, Ver, St);
+ }
+ closedir(D);
+ if (withoutChangingDir == nullptr && chdir(CWD.c_str()) != 0)
+ return _error->Errno("chdir", _("Unable to change to %s"),Dir.c_str());
+ return true;
+}
+ /*}}}*/
+
+pkgArchiveCleaner::pkgArchiveCleaner() : d(NULL) {}
+pkgArchiveCleaner::~pkgArchiveCleaner() {}
diff --git a/apt-pkg/clean.h b/apt-pkg/clean.h
new file mode 100644
index 0000000..d6490a0
--- /dev/null
+++ b/apt-pkg/clean.h
@@ -0,0 +1,49 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Clean - Clean out downloaded directories
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APTPKG_CLEAN_H
+#define APTPKG_CLEAN_H
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/pkgcache.h>
+#endif
+
+#include <string>
+
+#include <apt-pkg/macros.h>
+
+class pkgCache;
+
+class pkgArchiveCleaner
+{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ protected:
+
+ APT_DEPRECATED_MSG("Use pkgArchiveCleaner2 to avoid CWD expectations and chdir") virtual void Erase(const char * /*File*/,std::string /*Pkg*/,std::string /*Ver*/,struct stat & /*St*/) {};
+
+ public:
+
+ bool Go(std::string Dir,pkgCache &Cache);
+
+ pkgArchiveCleaner();
+ virtual ~pkgArchiveCleaner();
+};
+// TODO: merge classes and "erase" the old way
+class pkgArchiveCleaner2: public pkgArchiveCleaner
+{
+ friend class pkgArchiveCleaner;
+protected:
+ using pkgArchiveCleaner::Erase;
+ virtual void Erase(int const dirfd, char const * const File,
+ std::string const &Pkg,std::string const &Ver,
+ struct stat const &St) = 0;
+};
+
+#endif
diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc
new file mode 100644
index 0000000..9db3980
--- /dev/null
+++ b/apt-pkg/contrib/cdromutl.cc
@@ -0,0 +1,293 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CDROM Utilities - Some functions to manipulate CDROM mounts.
+
+ These are here for the cdrom method and apt-cdrom.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cdromutl.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <dirent.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using std::string;
+
+// IsMounted - Returns true if the mount point is mounted /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a simple algorithm that should always work, we stat the mount point
+ and the '..' file in the mount point and see if they are on the same device.
+ By definition if they are the same then it is not mounted. This should
+ account for symlinked mount points as well. */
+bool IsMounted(string &Path)
+{
+ if (Path.empty() == true)
+ return false;
+
+ // Need that trailing slash for directories
+ if (Path[Path.length() - 1] != '/')
+ Path += '/';
+
+ // if the path has a ".disk" directory we treat it as mounted
+ // this way even extracted copies of disks are recognized
+ if (DirectoryExists(Path + ".disk/") == true)
+ return true;
+
+ /* First we check if the path is actually mounted, we do this by
+ stating the path and the previous directory (careful of links!)
+ and comparing their device fields. */
+ struct stat Buf,Buf2;
+ if (stat(Path.c_str(),&Buf) != 0 ||
+ stat((Path + "../").c_str(),&Buf2) != 0)
+ return _error->Errno("stat",_("Unable to stat the mount point %s"),Path.c_str());
+
+ if (Buf.st_dev == Buf2.st_dev)
+ return false;
+ return true;
+}
+ /*}}}*/
+// UnmountCdrom - Unmount a cdrom /*{{{*/
+// ---------------------------------------------------------------------
+/* Forking umount works much better than the umount syscall which can
+ leave /etc/mtab inconsitant. We drop all messages this produces. */
+bool UnmountCdrom(string Path)
+{
+ // do not generate errors, even if the mountpoint does not exist
+ // the mountpoint might be auto-created by the mount command
+ // and a non-existing mountpoint is surely not mounted
+ _error->PushToStack();
+ bool const mounted = IsMounted(Path);
+ _error->RevertToStack();
+ if (mounted == false)
+ return true;
+
+ for (int i=0;i<3;i++)
+ {
+
+ int Child = ExecFork();
+
+ // The child
+ if (Child == 0)
+ {
+ // Make all the fds /dev/null
+ int const null_fd = open("/dev/null",O_RDWR);
+ for (int I = 0; I != 3; ++I)
+ dup2(null_fd, I);
+
+ if (_config->Exists("Acquire::cdrom::"+Path+"::UMount") == true)
+ {
+ if (system(_config->Find("Acquire::cdrom::"+Path+"::UMount").c_str()) != 0)
+ _exit(100);
+ _exit(0);
+ }
+ else
+ {
+ const char * const Args[] = {
+ "umount",
+ Path.c_str(),
+ nullptr
+ };
+ execvp(Args[0], const_cast<char **>(Args));
+ _exit(100);
+ }
+ }
+
+ // if it can not be umounted, give it a bit more time
+ // this can happen when auto-mount magic or fs/cdrom prober attack
+ if (ExecWait(Child,"umount",true) == true)
+ return true;
+ sleep(1);
+ }
+
+ return false;
+}
+ /*}}}*/
+// MountCdrom - Mount a cdrom /*{{{*/
+// ---------------------------------------------------------------------
+/* We fork mount and drop all messages */
+bool MountCdrom(string Path, string DeviceName)
+{
+ // do not generate errors, even if the mountpoint does not exist
+ // the mountpoint might be auto-created by the mount command
+ _error->PushToStack();
+ bool const mounted = IsMounted(Path);
+ _error->RevertToStack();
+ if (mounted == true)
+ return true;
+
+ int Child = ExecFork();
+
+ // The child
+ if (Child == 0)
+ {
+ // Make all the fds /dev/null
+ int const null_fd = open("/dev/null",O_RDWR);
+ for (int I = 0; I != 3; ++I)
+ dup2(null_fd, I);
+
+ if (_config->Exists("Acquire::cdrom::"+Path+"::Mount") == true)
+ {
+ if (system(_config->Find("Acquire::cdrom::"+Path+"::Mount").c_str()) != 0)
+ _exit(100);
+ _exit(0);
+ }
+ else
+ {
+ const char *Args[10];
+ Args[0] = "mount";
+ if (DeviceName == "")
+ {
+ Args[1] = Path.c_str();
+ Args[2] = 0;
+ } else {
+ Args[1] = DeviceName.c_str();
+ Args[2] = Path.c_str();
+ Args[3] = 0;
+ }
+ execvp(Args[0],(char **)Args);
+ _exit(100);
+ }
+ }
+
+ // Wait for mount
+ return ExecWait(Child,"mount",true);
+}
+ /*}}}*/
+// IdentCdrom - Generate a unique string for this CD /*{{{*/
+// ---------------------------------------------------------------------
+/* We convert everything we hash into a string, this prevents byte size/order
+ from effecting the outcome. */
+bool IdentCdrom(string CD,string &Res,unsigned int Version)
+{
+ MD5Summation Hash;
+ bool writable_media = false;
+
+ int dirfd = open(CD.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC);
+ if (dirfd == -1)
+ return _error->Errno("open",_("Unable to read %s"),CD.c_str());
+
+ // if we are on a writable medium (like a usb-stick) that is just
+ // used like a cdrom don't use "." as it will constantly change,
+ // use .disk instead
+ if (faccessat(dirfd, ".", W_OK, 0) == 0)
+ {
+ int diskfd = openat(dirfd, "./.disk", O_RDONLY | O_DIRECTORY | O_CLOEXEC, 0);
+ if (diskfd != -1)
+ {
+ close(dirfd);
+ dirfd = diskfd;
+ writable_media = true;
+ CD = CD.append("/.disk");
+ if (_config->FindB("Debug::aptcdrom",false) == true)
+ std::clog << "Found writable cdrom, using alternative path: " << CD
+ << std::endl;
+ }
+ }
+
+ DIR * const D = fdopendir(dirfd);
+ if (D == nullptr)
+ return _error->Errno("opendir",_("Unable to read %s"),CD.c_str());
+
+ /* Run over the directory, we assume that the reader order will never
+ change as the media is read-only. In theory if the kernel did
+ some sort of wacked caching this might not be true.. */
+ for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D))
+ {
+ // Skip some files..
+ if (strcmp(Dir->d_name,".") == 0 ||
+ strcmp(Dir->d_name,"..") == 0)
+ continue;
+
+ std::string S;
+ if (Version <= 1)
+ S = std::to_string(Dir->d_ino);
+ else
+ {
+ struct stat Buf;
+ if (fstatat(dirfd, Dir->d_name, &Buf, 0) != 0)
+ continue;
+ S = std::to_string(Buf.st_mtime);
+ }
+
+ Hash.Add(S.c_str());
+ Hash.Add(Dir->d_name);
+ }
+
+ // Some stats from the fsys
+ std::string S;
+ if (_config->FindB("Debug::identcdrom",false) == false)
+ {
+ struct statvfs Buf;
+ if (fstatvfs(dirfd, &Buf) != 0)
+ return _error->Errno("statfs",_("Failed to stat the cdrom"));
+
+ // We use a kilobyte block size to avoid overflow
+ S = std::to_string(Buf.f_blocks * (Buf.f_bsize / 1024));
+ if (writable_media == false)
+ S.append(" ").append(std::to_string(Buf.f_bfree * (Buf.f_bsize / 1024)));
+ Hash.Add(S.c_str(), S.length());
+ strprintf(S, "-%u", Version);
+ }
+ else
+ strprintf(S, "-%u.debug", Version);
+
+ closedir(D);
+ Res = Hash.Result().Value().append(std::move(S));
+ return true;
+}
+ /*}}}*/
+// FindMountPointForDevice - Find mountpoint for the given device /*{{{*/
+string FindMountPointForDevice(const char *devnode)
+{
+ // this is the order that mount uses as well
+ std::vector<std::string> const mounts = _config->FindVector("Dir::state::MountPoints", "/etc/mtab,/proc/mount");
+
+ for (std::vector<std::string>::const_iterator m = mounts.begin(); m != mounts.end(); ++m)
+ if (FileExists(*m) == true)
+ {
+ char * line = NULL;
+ size_t line_len = 0;
+ FILE * f = fopen(m->c_str(), "r");
+ while(getline(&line, &line_len, f) != -1)
+ {
+ char * out[] = { NULL, NULL, NULL };
+ TokSplitString(' ', line, out, 3);
+ if (out[2] != NULL || out[1] == NULL || out[0] == NULL)
+ continue;
+ if (strcmp(out[0], devnode) != 0)
+ continue;
+ fclose(f);
+ // unescape the \0XXX chars in the path
+ string mount_point = out[1];
+ free(line);
+ return DeEscapeString(mount_point);
+ }
+ fclose(f);
+ free(line);
+ }
+
+ return string();
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/cdromutl.h b/apt-pkg/contrib/cdromutl.h
new file mode 100644
index 0000000..4e07e42
--- /dev/null
+++ b/apt-pkg/contrib/cdromutl.h
@@ -0,0 +1,25 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CDROM Utilities - Some functions to manipulate CDROM mounts.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_CDROMUTL_H
+#define PKGLIB_CDROMUTL_H
+
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
+// mount cdrom, DeviceName (e.g. /dev/sr0) is optional
+bool MountCdrom(std::string Path, std::string DeviceName="");
+bool UnmountCdrom(std::string Path);
+bool IdentCdrom(std::string CD,std::string &Res,unsigned int Version = 2);
+bool IsMounted(std::string &Path);
+std::string FindMountPointForDevice(const char *device);
+
+#endif
diff --git a/apt-pkg/contrib/cmndline.cc b/apt-pkg/contrib/cmndline.cc
new file mode 100644
index 0000000..b2a96ca
--- /dev/null
+++ b/apt-pkg/contrib/cmndline.cc
@@ -0,0 +1,445 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Command Line Class - Sophisticated command line parser
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe <jgg@debian.org>.
+
+ ##################################################################### */
+ /*}}}*/
+// Include files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/strutl.h>
+
+#include <string>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+// CommandLine::CommandLine - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+CommandLine::CommandLine(Args *AList,Configuration *Conf) : ArgList(AList),
+ Conf(Conf), FileList(0)
+{
+}
+CommandLine::CommandLine() : ArgList(NULL), Conf(NULL), FileList(0)
+{
+}
+ /*}}}*/
+// CommandLine::~CommandLine - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+CommandLine::~CommandLine()
+{
+ delete [] FileList;
+}
+ /*}}}*/
+// CommandLine::GetCommand - return the first non-option word /*{{{*/
+char const * CommandLine::GetCommand(Dispatch const * const Map,
+ unsigned int const argc, char const * const * const argv)
+{
+ // if there is a -- on the line there must be the word we search for either
+ // before it (as -- marks the end of the options) or right after it (as we can't
+ // decide if the command is actually an option, given that in theory, you could
+ // have parameters named like commands)
+ for (size_t i = 1; i < argc; ++i)
+ {
+ if (strcmp(argv[i], "--") != 0)
+ continue;
+ // check if command is before --
+ for (size_t k = 1; k < i; ++k)
+ for (size_t j = 0; Map[j].Match != NULL; ++j)
+ if (strcmp(argv[k], Map[j].Match) == 0)
+ return Map[j].Match;
+ // see if the next token after -- is the command
+ ++i;
+ if (i < argc)
+ for (size_t j = 0; Map[j].Match != NULL; ++j)
+ if (strcmp(argv[i], Map[j].Match) == 0)
+ return Map[j].Match;
+ // we found a --, but not a command
+ return NULL;
+ }
+ // no --, so search for the first word matching a command
+ // FIXME: How like is it that an option parameter will be also a valid Match ?
+ for (size_t i = 1; i < argc; ++i)
+ {
+ if (*(argv[i]) == '-')
+ continue;
+ for (size_t j = 0; Map[j].Match != NULL; ++j)
+ if (strcmp(argv[i], Map[j].Match) == 0)
+ return Map[j].Match;
+ }
+ return NULL;
+}
+ /*}}}*/
+// CommandLine::Parse - Main action member /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CommandLine::Parse(int argc,const char **argv)
+{
+ delete [] FileList;
+ FileList = new const char *[argc];
+ const char **Files = FileList;
+ int I;
+ for (I = 1; I != argc; I++)
+ {
+ const char *Opt = argv[I];
+
+ // It is not an option
+ if (*Opt != '-')
+ {
+ *Files++ = Opt;
+ continue;
+ }
+
+ Opt++;
+
+ // Double dash signifies the end of option processing
+ if (*Opt == '-' && Opt[1] == 0)
+ {
+ I++;
+ break;
+ }
+
+ // Single dash is a short option
+ if (*Opt != '-')
+ {
+ // Iterate over each letter
+ while (*Opt != 0)
+ {
+ // Search for the option
+ Args *A;
+ for (A = ArgList; A->end() == false && A->ShortOpt != *Opt; A++);
+ if (A->end() == true)
+ return _error->Error(_("Command line option '%c' [from %s] is not understood in combination with the other options."),*Opt,argv[I]);
+
+ if (HandleOpt(I,argc,argv,Opt,A) == false)
+ return false;
+ if (*Opt != 0)
+ Opt++;
+ }
+ continue;
+ }
+
+ Opt++;
+
+ // Match up to a = against the list
+ Args *A;
+ const char *OptEnd = strchrnul(Opt, '=');
+ for (A = ArgList; A->end() == false &&
+ (A->LongOpt == 0 || stringcasecmp(Opt,OptEnd,A->LongOpt) != 0);
+ ++A);
+
+ // Failed, look for a word after the first - (no-foo)
+ bool PreceedMatch = false;
+ if (A->end() == true)
+ {
+ Opt = (const char*) memchr(Opt, '-', OptEnd - Opt);
+ if (Opt == NULL)
+ return _error->Error(_("Command line option %s is not understood in combination with the other options"),argv[I]);
+ Opt++;
+
+ for (A = ArgList; A->end() == false &&
+ (A->LongOpt == 0 || stringcasecmp(Opt,OptEnd,A->LongOpt) != 0);
+ ++A);
+
+ // Failed again..
+ if (A->end() == true && OptEnd - Opt != 1)
+ return _error->Error(_("Command line option %s is not understood in combination with the other options"),argv[I]);
+
+ // The option could be a single letter option prefixed by a no-..
+ if (A->end() == true)
+ {
+ for (A = ArgList; A->end() == false && A->ShortOpt != *Opt; A++);
+
+ if (A->end() == true)
+ return _error->Error(_("Command line option %s is not understood in combination with the other options"),argv[I]);
+ }
+
+ // The option is not boolean
+ if (A->IsBoolean() == false)
+ return _error->Error(_("Command line option %s is not boolean"),argv[I]);
+ PreceedMatch = true;
+ }
+
+ // Deal with it.
+ OptEnd--;
+ if (HandleOpt(I,argc,argv,OptEnd,A,PreceedMatch) == false)
+ return false;
+ }
+
+ // Copy any remaining file names over
+ for (; I != argc; I++)
+ *Files++ = argv[I];
+ *Files = 0;
+
+ SaveInConfig(argc, argv);
+
+ return true;
+}
+ /*}}}*/
+// CommandLine::HandleOpt - Handle a single option including all flags /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a helper function for parser, it looks at a given argument
+ and looks for specific patterns in the string, it gets tokanized
+ -ruffly- like -*[yes|true|enable]-(o|longopt)[=][ ][argument] */
+bool CommandLine::HandleOpt(int &I,int argc,const char *argv[],
+ const char *&Opt,Args *A,bool PreceedMatch)
+{
+ const char *Argument = 0;
+ bool CertainArg = false;
+ int IncI = 0;
+
+ /* Determine the possible location of an option or 0 if their is
+ no option */
+ if (Opt[1] == 0)
+ {
+ if (I + 1 < argc && argv[I+1][0] != '-')
+ Argument = argv[I+1];
+
+ IncI = 1;
+ }
+ else
+ {
+ if (Opt[1] == '=')
+ {
+ CertainArg = true;
+ Argument = Opt + 2;
+ }
+ else
+ Argument = Opt + 1;
+ }
+
+ // Option is an argument set
+ if ((A->Flags & HasArg) == HasArg)
+ {
+ if (Argument == 0)
+ return _error->Error(_("Option %s requires an argument."),argv[I]);
+ Opt += strlen(Opt);
+ I += IncI;
+
+ // Parse a configuration file
+ if ((A->Flags & ConfigFile) == ConfigFile)
+ return ReadConfigFile(*Conf,Argument);
+
+ // Arbitrary item specification
+ if ((A->Flags & ArbItem) == ArbItem)
+ {
+ const char * const J = strchr(Argument, '=');
+ if (J == nullptr)
+ return _error->Error(_("Option %s: Configuration item specification must have an =<val>."),argv[I]);
+
+ Conf->Set(string(Argument,J-Argument), J+1);
+ return true;
+ }
+
+ const char *I = strchrnul(A->ConfName, ' ');
+ if (*I == ' ')
+ Conf->Set(string(A->ConfName,0,I-A->ConfName),string(I+1) + Argument);
+ else
+ Conf->Set(A->ConfName,string(I) + Argument);
+
+ return true;
+ }
+
+ // Option is an integer level
+ if ((A->Flags & IntLevel) == IntLevel)
+ {
+ // There might be an argument
+ if (Argument != 0)
+ {
+ char *EndPtr;
+ unsigned long Value = strtol(Argument,&EndPtr,10);
+
+ // Conversion failed and the argument was specified with an =s
+ if (EndPtr == Argument && CertainArg == true)
+ return _error->Error(_("Option %s requires an integer argument, not '%s'"),argv[I],Argument);
+
+ // Conversion was ok, set the value and return
+ if (EndPtr != 0 && EndPtr != Argument && *EndPtr == 0)
+ {
+ Conf->Set(A->ConfName,Value);
+ Opt += strlen(Opt);
+ I += IncI;
+ return true;
+ }
+ }
+
+ // Increase the level
+ Conf->Set(A->ConfName,Conf->FindI(A->ConfName)+1);
+ return true;
+ }
+
+ // Option is a boolean
+ int Sense = -1; // -1 is unspecified, 0 is yes 1 is no
+
+ // Look for an argument.
+ while (1)
+ {
+ // Look at preceding text
+ char Buffer[300];
+ if (Argument == 0)
+ {
+ if (PreceedMatch == false)
+ break;
+
+ if (strlen(argv[I]) >= sizeof(Buffer))
+ return _error->Error(_("Option '%s' is too long"),argv[I]);
+
+ // Skip the leading dash
+ const char *J = argv[I];
+ for (; *J != 0 && *J == '-'; J++);
+
+ const char *JEnd = strchr(J, '-');
+ if (JEnd != NULL)
+ {
+ strncpy(Buffer,J,JEnd - J);
+ Buffer[JEnd - J] = 0;
+ Argument = Buffer;
+ CertainArg = true;
+ }
+ else
+ break;
+ }
+
+ // Check for boolean
+ Sense = StringToBool(Argument);
+ if (Sense >= 0)
+ {
+ // Eat the argument
+ if (Argument != Buffer)
+ {
+ Opt += strlen(Opt);
+ I += IncI;
+ }
+ break;
+ }
+
+ if (CertainArg == true)
+ return _error->Error(_("Sense %s is not understood, try true or false."),Argument);
+
+ Argument = 0;
+ }
+
+ // Indeterminate sense depends on the flag
+ if (Sense == -1)
+ {
+ if ((A->Flags & InvBoolean) == InvBoolean)
+ Sense = 0;
+ else
+ Sense = 1;
+ }
+
+ Conf->Set(A->ConfName,Sense);
+ return true;
+}
+ /*}}}*/
+// CommandLine::FileSize - Count the number of filenames /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned int CommandLine::FileSize() const
+{
+ unsigned int Count = 0;
+ for (const char **I = FileList; I != 0 && *I != 0; I++)
+ Count++;
+ return Count;
+}
+ /*}}}*/
+// CommandLine::DispatchArg - Do something with the first arg /*{{{*/
+bool CommandLine::DispatchArg(Dispatch const * const Map,bool NoMatch)
+{
+ int I;
+ for (I = 0; Map[I].Match != 0; I++)
+ {
+ if (strcmp(FileList[0],Map[I].Match) == 0)
+ {
+ bool Res = Map[I].Handler(*this);
+ if (Res == false && _error->PendingError() == false)
+ _error->Error("Handler silently failed");
+ return Res;
+ }
+ }
+
+ // No matching name
+ if (Map[I].Match == 0)
+ {
+ if (NoMatch == true)
+ _error->Error(_("Invalid operation %s"),FileList[0]);
+ }
+
+ return false;
+}
+bool CommandLine::DispatchArg(Dispatch *Map,bool NoMatch)
+{
+ Dispatch const * const Map2 = Map;
+ return DispatchArg(Map2, NoMatch);
+}
+ /*}}}*/
+// CommandLine::SaveInConfig - for output later in a logfile or so /*{{{*/
+// ---------------------------------------------------------------------
+/* We save the commandline here to have it around later for e.g. logging.
+ It feels a bit like a hack here and isn't bulletproof, but it is better
+ than nothing after all. */
+void CommandLine::SaveInConfig(unsigned int const &argc, char const * const * const argv)
+{
+ char cmdline[100 + argc * 50];
+ memset(cmdline, 0, sizeof(cmdline));
+ unsigned int length = 0;
+ bool lastWasOption = false;
+ bool closeQuote = false;
+ for (unsigned int i = 0; i < argc && length < sizeof(cmdline); ++i, ++length)
+ {
+ for (unsigned int j = 0; argv[i][j] != '\0' && length < sizeof(cmdline)-2; ++j)
+ {
+ // we can't really sensibly deal with quoting so skip it
+ if (strchr("\"\'\r\n", argv[i][j]) != nullptr)
+ continue;
+ cmdline[length++] = argv[i][j];
+ if (lastWasOption == true && argv[i][j] == '=')
+ {
+ // That is possibly an option: Quote it if it includes spaces,
+ // the benefit is that this will eliminate also most false positives
+ const char* c = strchr(&argv[i][j+1], ' ');
+ if (c == NULL) continue;
+ cmdline[length++] = '\'';
+ closeQuote = true;
+ }
+ }
+ if (closeQuote == true)
+ {
+ cmdline[length++] = '\'';
+ closeQuote = false;
+ }
+ // Problem: detects also --hello
+ if (cmdline[length-1] == 'o')
+ lastWasOption = true;
+ cmdline[length] = ' ';
+ }
+ cmdline[--length] = '\0';
+ _config->Set("CommandLine::AsString", cmdline);
+}
+ /*}}}*/
+CommandLine::Args CommandLine::MakeArgs(char ShortOpt, char const *LongOpt, char const *ConfName, unsigned long Flags)/*{{{*/
+{
+ /* In theory, this should be a constructor for CommandLine::Args instead,
+ but this breaks compatibility as gcc thinks this is a c++11 initializer_list */
+ CommandLine::Args arg;
+ arg.ShortOpt = ShortOpt;
+ arg.LongOpt = LongOpt;
+ arg.ConfName = ConfName;
+ arg.Flags = Flags;
+ return arg;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/cmndline.h b/apt-pkg/contrib/cmndline.h
new file mode 100644
index 0000000..bdd4f6e
--- /dev/null
+++ b/apt-pkg/contrib/cmndline.h
@@ -0,0 +1,118 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Command Line Class - Sophisticated command line parser
+
+ This class provides a unified command line parser/option handliner/
+ configuration mechanism. It allows the caller to specify the option
+ set and map the option set into the configuration class or other
+ special functioning.
+
+ Filenames are stripped from the option stream and put into their
+ own array.
+
+ The argument descriptor array can be initialized as:
+
+ CommandLine::Args Args[] =
+ {{'q',"quiet","apt::get::quiet",CommandLine::IntLevel},
+ {0,0,0,0}};
+
+ The flags mean,
+ HasArg - Means the argument has a value
+ IntLevel - Means the argument is an integer level indication, the
+ following -qqqq (+3) -q5 (=5) -q=5 (=5) are valid
+ Boolean - Means it is true/false or yes/no.
+ -d (true) --no-d (false) --yes-d (true)
+ --long (true) --no-long (false) --yes-long (true)
+ -d=yes (true) -d=no (false) Words like enable, disable,
+ true false, yes no and on off are recognized in logical
+ places.
+ InvBoolean - Same as boolean but the case with no specified sense
+ (first case) is set to false.
+ ConfigFile - Means this flag should be interprited as the name of
+ a config file to read in at this point in option processing.
+ Implies HasArg.
+ ArbItem - Means the item is an arbitrary configuration string of
+ the form item=value, where item is passed directly
+ to the configuration class.
+ The default, if the flags are 0 is to use Boolean
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_CMNDLINE_H
+#define PKGLIB_CMNDLINE_H
+
+#include <apt-pkg/macros.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#endif
+
+class Configuration;
+
+class CommandLine
+{
+ public:
+ struct Args;
+ struct Dispatch;
+ struct DispatchWithHelp;
+
+ protected:
+
+ Args *ArgList;
+ Configuration *Conf;
+ bool HandleOpt(int &I,int argc,const char *argv[],
+ const char *&Opt,Args *A,bool PreceedeMatch = false);
+ void static SaveInConfig(unsigned int const &argc, char const * const * const argv);
+
+ public:
+
+ enum AFlags
+ {
+ HasArg = (1 << 0),
+ IntLevel = (1 << 1),
+ Boolean = (1 << 2),
+ InvBoolean = (1 << 3),
+ ConfigFile = (1 << 4) | HasArg,
+ ArbItem = (1 << 5) | HasArg
+ };
+
+ const char **FileList;
+
+ bool Parse(int argc,const char **argv);
+ void ShowHelp();
+ unsigned int FileSize() const APT_PURE;
+ // FIXME: merge on next ABI break
+ bool DispatchArg(Dispatch *List,bool NoMatch = true);
+ bool DispatchArg(Dispatch const * const List,bool NoMatch = true);
+
+ static char const * GetCommand(Dispatch const * const Map,
+ unsigned int const argc, char const * const * const argv) APT_PURE;
+
+ static CommandLine::Args MakeArgs(char ShortOpt, char const *LongOpt,
+ char const *ConfName, unsigned long Flags) APT_PURE;
+
+ CommandLine();
+ CommandLine(Args *AList,Configuration *Conf);
+ ~CommandLine();
+};
+
+struct CommandLine::Args
+{
+ char ShortOpt;
+ const char *LongOpt;
+ const char *ConfName;
+ unsigned long Flags;
+
+ inline bool end() {return ShortOpt == 0 && LongOpt == 0;};
+ inline bool IsBoolean() {return Flags == 0 || (Flags & (Boolean|InvBoolean)) != 0;};
+};
+
+struct CommandLine::Dispatch
+{
+ const char *Match;
+ bool (*Handler)(CommandLine &);
+};
+
+#endif
diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc
new file mode 100644
index 0000000..997ef74
--- /dev/null
+++ b/apt-pkg/contrib/configuration.cc
@@ -0,0 +1,1209 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Configuration Class
+
+ This class provides a configuration file and command line parser
+ for a tree-oriented configuration environment. All runtime configuration
+ is stored in here.
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe <jgg@debian.org>.
+
+ ##################################################################### */
+ /*}}}*/
+// Include files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/strutl.h>
+
+#include <ctype.h>
+#include <regex.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iterator>
+#include <sstream>
+#include <stack>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#include <apti18n.h>
+
+using namespace std;
+ /*}}}*/
+
+Configuration *_config = new Configuration;
+
+/* TODO: This config verification shouldn't be using a static variable
+ but a Cnf-member – but that would need ABI breaks and stuff and for now
+ that really is an apt-dev-only tool, so it isn't that bad that it is
+ unusable and allaround a bit strange */
+enum class APT_HIDDEN ConfigType { UNDEFINED, INT, BOOL, STRING, STRING_OR_BOOL, STRING_OR_LIST, FILE, DIR, LIST, PROGRAM_PATH = FILE };
+APT_HIDDEN std::unordered_map<std::string, ConfigType> apt_known_config {};
+static std::string getConfigTypeString(ConfigType const type) /*{{{*/
+{
+ switch (type)
+ {
+ case ConfigType::UNDEFINED: return "UNDEFINED";
+ case ConfigType::INT: return "INT";
+ case ConfigType::BOOL: return "BOOL";
+ case ConfigType::STRING: return "STRING";
+ case ConfigType::STRING_OR_BOOL: return "STRING_OR_BOOL";
+ case ConfigType::FILE: return "FILE";
+ case ConfigType::DIR: return "DIR";
+ case ConfigType::LIST: return "LIST";
+ case ConfigType::STRING_OR_LIST: return "STRING_OR_LIST";
+ }
+ return "UNKNOWN";
+}
+ /*}}}*/
+static ConfigType getConfigType(std::string const &type) /*{{{*/
+{
+ if (type == "<INT>")
+ return ConfigType::INT;
+ else if (type == "<BOOL>")
+ return ConfigType::BOOL;
+ else if (type == "<STRING>")
+ return ConfigType::STRING;
+ else if (type == "<STRING_OR_BOOL>")
+ return ConfigType::STRING_OR_BOOL;
+ else if (type == "<FILE>")
+ return ConfigType::FILE;
+ else if (type == "<DIR>")
+ return ConfigType::DIR;
+ else if (type == "<LIST>")
+ return ConfigType::LIST;
+ else if (type == "<STRING_OR_LIST>")
+ return ConfigType::STRING_OR_LIST;
+ else if (type == "<PROGRAM_PATH>")
+ return ConfigType::PROGRAM_PATH;
+ return ConfigType::UNDEFINED;
+}
+ /*}}}*/
+// checkFindConfigOptionType - workhorse of option checking /*{{{*/
+static void checkFindConfigOptionTypeInternal(std::string name, ConfigType const type)
+{
+ std::transform(name.begin(), name.end(), name.begin(), ::tolower);
+ auto known = apt_known_config.find(name);
+ if (known == apt_known_config.cend())
+ {
+ auto const rcolon = name.rfind(':');
+ if (rcolon != std::string::npos)
+ {
+ known = apt_known_config.find(name.substr(0, rcolon) + ":*");
+ if (known == apt_known_config.cend())
+ {
+ auto const parts = StringSplit(name, "::");
+ size_t psize = parts.size();
+ if (psize > 1)
+ {
+ for (size_t max = psize; max != 1; --max)
+ {
+ std::ostringstream os;
+ std::copy(parts.begin(), parts.begin() + max, std::ostream_iterator<std::string>(os, "::"));
+ os << "**";
+ known = apt_known_config.find(os.str());
+ if (known != apt_known_config.cend() && known->second == ConfigType::UNDEFINED)
+ return;
+ }
+ for (size_t max = psize - 1; max != 1; --max)
+ {
+ std::ostringstream os;
+ std::copy(parts.begin(), parts.begin() + max - 1, std::ostream_iterator<std::string>(os, "::"));
+ os << "*::";
+ std::copy(parts.begin() + max + 1, parts.end() - 1, std::ostream_iterator<std::string>(os, "::"));
+ os << *(parts.end() - 1);
+ known = apt_known_config.find(os.str());
+ if (known != apt_known_config.cend())
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (known == apt_known_config.cend())
+ _error->Warning("Using unknown config option »%s« of type %s",
+ name.c_str(), getConfigTypeString(type).c_str());
+ else if (known->second != type)
+ {
+ if (known->second == ConfigType::DIR && type == ConfigType::FILE)
+ ; // implementation detail
+ else if (type == ConfigType::STRING && (known->second == ConfigType::FILE || known->second == ConfigType::DIR))
+ ; // TODO: that might be an error or not, we will figure this out later
+ else if (known->second == ConfigType::STRING_OR_BOOL && (type == ConfigType::BOOL || type == ConfigType::STRING))
+ ;
+ else if (known->second == ConfigType::STRING_OR_LIST && (type == ConfigType::LIST || type == ConfigType::STRING))
+ ;
+ else
+ _error->Warning("Using config option »%s« of type %s as a type %s",
+ name.c_str(), getConfigTypeString(known->second).c_str(), getConfigTypeString(type).c_str());
+ }
+}
+static void checkFindConfigOptionType(char const * const name, ConfigType const type)
+{
+ if (apt_known_config.empty())
+ return;
+ checkFindConfigOptionTypeInternal(name, type);
+}
+ /*}}}*/
+static bool LoadConfigurationIndex(std::string const &filename) /*{{{*/
+{
+ apt_known_config.clear();
+ if (filename.empty())
+ return true;
+ Configuration Idx;
+ if (ReadConfigFile(Idx, filename) == false)
+ return false;
+
+ Configuration::Item const * Top = Idx.Tree(nullptr);
+ if (unlikely(Top == nullptr))
+ return false;
+
+ do {
+ if (Top->Value.empty() == false)
+ {
+ std::string fulltag = Top->FullTag();
+ std::transform(fulltag.begin(), fulltag.end(), fulltag.begin(), ::tolower);
+ apt_known_config.emplace(std::move(fulltag), getConfigType(Top->Value));
+ }
+
+ if (Top->Child != nullptr)
+ {
+ Top = Top->Child;
+ continue;
+ }
+
+ while (Top != nullptr && Top->Next == nullptr)
+ Top = Top->Parent;
+ if (Top != nullptr)
+ Top = Top->Next;
+ } while (Top != nullptr);
+
+ return true;
+}
+ /*}}}*/
+
+// Configuration::Configuration - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+Configuration::Configuration() : ToFree(true)
+{
+ Root = new Item;
+}
+Configuration::Configuration(const Item *Root) : Root((Item *)Root), ToFree(false)
+{
+}
+ /*}}}*/
+// Configuration::~Configuration - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+Configuration::~Configuration()
+{
+ if (ToFree == false)
+ return;
+
+ Item *Top = Root;
+ for (; Top != 0;)
+ {
+ if (Top->Child != 0)
+ {
+ Top = Top->Child;
+ continue;
+ }
+
+ while (Top != 0 && Top->Next == 0)
+ {
+ Item *Parent = Top->Parent;
+ delete Top;
+ Top = Parent;
+ }
+ if (Top != 0)
+ {
+ Item *Next = Top->Next;
+ delete Top;
+ Top = Next;
+ }
+ }
+}
+ /*}}}*/
+// Configuration::Lookup - Lookup a single item /*{{{*/
+// ---------------------------------------------------------------------
+/* This will lookup a single item by name below another item. It is a
+ helper function for the main lookup function */
+Configuration::Item *Configuration::Lookup(Item *Head,const char *S,
+ unsigned long const &Len,bool const &Create)
+{
+ int Res = 1;
+ Item *I = Head->Child;
+ Item **Last = &Head->Child;
+
+ // Empty strings match nothing. They are used for lists.
+ if (Len != 0)
+ {
+ for (; I != 0; Last = &I->Next, I = I->Next)
+ if (Len == I->Tag.length() && (Res = stringcasecmp(I->Tag,S,S + Len)) == 0)
+ break;
+ }
+ else
+ for (; I != 0; Last = &I->Next, I = I->Next);
+
+ if (Res == 0)
+ return I;
+ if (Create == false)
+ return 0;
+
+ I = new Item;
+ I->Tag.assign(S,Len);
+ I->Next = *Last;
+ I->Parent = Head;
+ *Last = I;
+ return I;
+}
+ /*}}}*/
+// Configuration::Lookup - Lookup a fully scoped item /*{{{*/
+// ---------------------------------------------------------------------
+/* This performs a fully scoped lookup of a given name, possibly creating
+ new items */
+Configuration::Item *Configuration::Lookup(const char *Name,bool const &Create)
+{
+ if (Name == 0)
+ return Root->Child;
+
+ const char *Start = Name;
+ const char *End = Start + strlen(Name);
+ const char *TagEnd = Name;
+ Item *Itm = Root;
+ for (; End - TagEnd >= 2; TagEnd++)
+ {
+ if (TagEnd[0] == ':' && TagEnd[1] == ':')
+ {
+ Itm = Lookup(Itm,Start,TagEnd - Start,Create);
+ if (Itm == 0)
+ return 0;
+ TagEnd = Start = TagEnd + 2;
+ }
+ }
+
+ // This must be a trailing ::, we create unique items in a list
+ if (End - Start == 0)
+ {
+ if (Create == false)
+ return 0;
+ }
+
+ Itm = Lookup(Itm,Start,End - Start,Create);
+ return Itm;
+}
+ /*}}}*/
+// Configuration::Find - Find a value /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string Configuration::Find(const char *Name,const char *Default) const
+{
+ checkFindConfigOptionType(Name, ConfigType::STRING);
+ const Item *Itm = Lookup(Name);
+ if (Itm == 0 || Itm->Value.empty() == true)
+ {
+ if (Default == 0)
+ return "";
+ else
+ return Default;
+ }
+
+ return Itm->Value;
+}
+ /*}}}*/
+// Configuration::FindFile - Find a Filename /*{{{*/
+// ---------------------------------------------------------------------
+/* Directories are stored as the base dir in the Parent node and the
+ sub directory in sub nodes with the final node being the end filename
+ */
+string Configuration::FindFile(const char *Name,const char *Default) const
+{
+ checkFindConfigOptionType(Name, ConfigType::FILE);
+ const Item *RootItem = Lookup("RootDir");
+ std::string result = (RootItem == 0) ? "" : RootItem->Value;
+ if(result.empty() == false && result[result.size() - 1] != '/')
+ result.push_back('/');
+
+ const Item *Itm = Lookup(Name);
+ if (Itm == 0 || Itm->Value.empty() == true)
+ {
+ if (Default != 0)
+ result.append(Default);
+ }
+ else
+ {
+ string val = Itm->Value;
+ while (Itm->Parent != 0)
+ {
+ if (Itm->Parent->Value.empty() == true)
+ {
+ Itm = Itm->Parent;
+ continue;
+ }
+
+ // Absolute
+ if (val.length() >= 1 && val[0] == '/')
+ {
+ if (val.compare(0, 9, "/dev/null") == 0)
+ val.erase(9);
+ break;
+ }
+
+ // ~/foo or ./foo
+ if (val.length() >= 2 && (val[0] == '~' || val[0] == '.') && val[1] == '/')
+ break;
+
+ // ../foo
+ if (val.length() >= 3 && val[0] == '.' && val[1] == '.' && val[2] == '/')
+ break;
+
+ if (Itm->Parent->Value.end()[-1] != '/')
+ val.insert(0, "/");
+
+ val.insert(0, Itm->Parent->Value);
+ Itm = Itm->Parent;
+ }
+ result.append(val);
+ }
+ return flNormalize(result);
+}
+ /*}}}*/
+// Configuration::FindDir - Find a directory name /*{{{*/
+// ---------------------------------------------------------------------
+/* This is like findfile execept the result is terminated in a / */
+string Configuration::FindDir(const char *Name,const char *Default) const
+{
+ checkFindConfigOptionType(Name, ConfigType::DIR);
+ string Res = FindFile(Name,Default);
+ if (Res.end()[-1] != '/')
+ {
+ size_t const found = Res.rfind("/dev/null");
+ if (found != string::npos && found == Res.size() - 9)
+ return Res; // /dev/null returning
+ return Res + '/';
+ }
+ return Res;
+}
+ /*}}}*/
+// Configuration::FindVector - Find a vector of values /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns a vector of config values under the given item */
+vector<string> Configuration::FindVector(const char *Name, std::string const &Default, bool const Keys) const
+{
+ checkFindConfigOptionType(Name, ConfigType::LIST);
+ vector<string> Vec;
+ const Item *Top = Lookup(Name);
+ if (Top == NULL)
+ return VectorizeString(Default, ',');
+
+ if (Top->Value.empty() == false)
+ return VectorizeString(Top->Value, ',');
+
+ Item *I = Top->Child;
+ while(I != NULL)
+ {
+ Vec.push_back(Keys ? I->Tag : I->Value);
+ I = I->Next;
+ }
+ if (Vec.empty() == true)
+ return VectorizeString(Default, ',');
+
+ return Vec;
+}
+ /*}}}*/
+// Configuration::FindI - Find an integer value /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+int Configuration::FindI(const char *Name,int const &Default) const
+{
+ checkFindConfigOptionType(Name, ConfigType::INT);
+ const Item *Itm = Lookup(Name);
+ if (Itm == 0 || Itm->Value.empty() == true)
+ return Default;
+
+ char *End;
+ int Res = strtol(Itm->Value.c_str(),&End,0);
+ if (End == Itm->Value.c_str())
+ return Default;
+
+ return Res;
+}
+ /*}}}*/
+// Configuration::FindB - Find a boolean type /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool Configuration::FindB(const char *Name,bool const &Default) const
+{
+ checkFindConfigOptionType(Name, ConfigType::BOOL);
+ const Item *Itm = Lookup(Name);
+ if (Itm == 0 || Itm->Value.empty() == true)
+ return Default;
+
+ return StringToBool(Itm->Value,Default);
+}
+ /*}}}*/
+// Configuration::FindAny - Find an arbitrary type /*{{{*/
+// ---------------------------------------------------------------------
+/* a key suffix of /f, /d, /b or /i calls Find{File,Dir,B,I} */
+string Configuration::FindAny(const char *Name,const char *Default) const
+{
+ string key = Name;
+ char type = 0;
+
+ if (key.size() > 2 && key.end()[-2] == '/')
+ {
+ type = key.end()[-1];
+ key.resize(key.size() - 2);
+ }
+
+ switch (type)
+ {
+ // file
+ case 'f':
+ return FindFile(key.c_str(), Default);
+
+ // directory
+ case 'd':
+ return FindDir(key.c_str(), Default);
+
+ // bool
+ case 'b':
+ return FindB(key, Default) ? "true" : "false";
+
+ // int
+ case 'i':
+ {
+ char buf[16];
+ snprintf(buf, sizeof(buf)-1, "%d", FindI(key, Default ? atoi(Default) : 0 ));
+ return buf;
+ }
+ }
+
+ // fallback
+ return Find(Name, Default);
+}
+ /*}}}*/
+// Configuration::CndSet - Conditinal Set a value /*{{{*/
+// ---------------------------------------------------------------------
+/* This will not overwrite */
+void Configuration::CndSet(const char *Name,const string &Value)
+{
+ Item *Itm = Lookup(Name,true);
+ if (Itm == 0)
+ return;
+ if (Itm->Value.empty() == true)
+ Itm->Value = Value;
+}
+ /*}}}*/
+// Configuration::Set - Set an integer value /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void Configuration::CndSet(const char *Name,int const Value)
+{
+ Item *Itm = Lookup(Name,true);
+ if (Itm == 0 || Itm->Value.empty() == false)
+ return;
+ char S[300];
+ snprintf(S,sizeof(S),"%i",Value);
+ Itm->Value = S;
+}
+ /*}}}*/
+// Configuration::Set - Set a value /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void Configuration::Set(const char *Name,const string &Value)
+{
+ Item *Itm = Lookup(Name,true);
+ if (Itm == 0)
+ return;
+ Itm->Value = Value;
+}
+ /*}}}*/
+// Configuration::Set - Set an integer value /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void Configuration::Set(const char *Name,int const &Value)
+{
+ Item *Itm = Lookup(Name,true);
+ if (Itm == 0)
+ return;
+ char S[300];
+ snprintf(S,sizeof(S),"%i",Value);
+ Itm->Value = S;
+}
+ /*}}}*/
+// Configuration::Clear - Clear an single value from a list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void Configuration::Clear(string const &Name, int const &Value)
+{
+ char S[300];
+ snprintf(S,sizeof(S),"%i",Value);
+ Clear(Name, S);
+}
+ /*}}}*/
+// Configuration::Clear - Clear an single value from a list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void Configuration::Clear(string const &Name, string const &Value)
+{
+ Item *Top = Lookup(Name.c_str(),false);
+ if (Top == 0 || Top->Child == 0)
+ return;
+
+ Item *Tmp, *Prev, *I;
+ Prev = I = Top->Child;
+
+ while(I != NULL)
+ {
+ if(I->Value == Value)
+ {
+ Tmp = I;
+ // was first element, point parent to new first element
+ if(Top->Child == Tmp)
+ Top->Child = I->Next;
+ I = I->Next;
+ Prev->Next = I;
+ delete Tmp;
+ } else {
+ Prev = I;
+ I = I->Next;
+ }
+ }
+
+}
+ /*}}}*/
+// Configuration::Clear - Clear everything /*{{{*/
+// ---------------------------------------------------------------------
+void Configuration::Clear()
+{
+ const Configuration::Item *Top = Tree(0);
+ while( Top != 0 )
+ {
+ Clear(Top->FullTag());
+ Top = Top->Next;
+ }
+}
+ /*}}}*/
+// Configuration::Clear - Clear an entire tree /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void Configuration::Clear(string const &Name)
+{
+ Item *Top = Lookup(Name.c_str(),false);
+ if (Top == 0)
+ return;
+
+ Top->Value.clear();
+ Item *Stop = Top;
+ Top = Top->Child;
+ Stop->Child = 0;
+ for (; Top != 0;)
+ {
+ if (Top->Child != 0)
+ {
+ Top = Top->Child;
+ continue;
+ }
+
+ while (Top != 0 && Top->Next == 0)
+ {
+ Item *Tmp = Top;
+ Top = Top->Parent;
+ delete Tmp;
+
+ if (Top == Stop)
+ return;
+ }
+
+ Item *Tmp = Top;
+ if (Top != 0)
+ Top = Top->Next;
+ delete Tmp;
+ }
+}
+ /*}}}*/
+void Configuration::MoveSubTree(char const * const OldRootName, char const * const NewRootName)/*{{{*/
+{
+ // prevent NewRoot being a subtree of OldRoot
+ if (OldRootName == nullptr)
+ return;
+ if (NewRootName != nullptr)
+ {
+ if (strcmp(OldRootName, NewRootName) == 0)
+ return;
+ std::string const oldroot = std::string(OldRootName) + "::";
+ if (strcasestr(NewRootName, oldroot.c_str()) != NULL)
+ return;
+ }
+
+ Item * Top;
+ Item const * const OldRoot = Top = Lookup(OldRootName, false);
+ if (Top == nullptr)
+ return;
+ std::string NewRoot;
+ if (NewRootName != nullptr)
+ NewRoot.append(NewRootName).append("::");
+
+ Top->Value.clear();
+ Item * const Stop = Top;
+ Top = Top->Child;
+ Stop->Child = 0;
+ for (; Top != 0;)
+ {
+ if (Top->Child != 0)
+ {
+ Top = Top->Child;
+ continue;
+ }
+
+ while (Top != 0 && Top->Next == 0)
+ {
+ Set(NewRoot + Top->FullTag(OldRoot), Top->Value);
+ Item const * const Tmp = Top;
+ Top = Top->Parent;
+ delete Tmp;
+
+ if (Top == Stop)
+ return;
+ }
+
+ Set(NewRoot + Top->FullTag(OldRoot), Top->Value);
+ Item const * const Tmp = Top;
+ if (Top != 0)
+ Top = Top->Next;
+ delete Tmp;
+ }
+}
+ /*}}}*/
+// Configuration::Exists - Returns true if the Name exists /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool Configuration::Exists(const char *Name) const
+{
+ const Item *Itm = Lookup(Name);
+ if (Itm == 0)
+ return false;
+ return true;
+}
+ /*}}}*/
+// Configuration::ExistsAny - Returns true if the Name, possibly /*{{{*/
+// ---------------------------------------------------------------------
+/* qualified by /[fdbi] exists */
+bool Configuration::ExistsAny(const char *Name) const
+{
+ string key = Name;
+
+ if (key.size() > 2 && key.end()[-2] == '/')
+ {
+ if (key.find_first_of("fdbi",key.size()-1) < key.size())
+ {
+ key.resize(key.size() - 2);
+ if (Exists(key.c_str()))
+ return true;
+ }
+ else
+ {
+ _error->Warning(_("Unrecognized type abbreviation: '%c'"), key.end()[-3]);
+ }
+ }
+ return Exists(Name);
+}
+ /*}}}*/
+// Configuration::Dump - Dump the config /*{{{*/
+// ---------------------------------------------------------------------
+/* Dump the entire configuration space */
+void Configuration::Dump(ostream& str)
+{
+ Dump(str, NULL, "%F \"%v\";\n", true);
+}
+void Configuration::Dump(ostream& str, char const * const root,
+ char const * const formatstr, bool const emptyValue)
+{
+ const Configuration::Item* Top = Tree(root);
+ if (Top == 0)
+ return;
+ const Configuration::Item* const Root = (root == NULL) ? NULL : Top;
+ std::vector<std::string> const format = VectorizeString(formatstr, '%');
+
+ /* Write out all of the configuration directives by walking the
+ configuration tree */
+ do {
+ if (emptyValue == true || Top->Value.empty() == emptyValue)
+ {
+ std::vector<std::string>::const_iterator f = format.begin();
+ str << *f;
+ for (++f; f != format.end(); ++f)
+ {
+ if (f->empty() == true)
+ {
+ ++f;
+ str << '%' << *f;
+ continue;
+ }
+ char const type = (*f)[0];
+ if (type == 'f')
+ str << Top->FullTag();
+ else if (type == 't')
+ str << Top->Tag;
+ else if (type == 'v')
+ str << Top->Value;
+ else if (type == 'F')
+ str << QuoteString(Top->FullTag(), "=\"\n");
+ else if (type == 'T')
+ str << QuoteString(Top->Tag, "=\"\n");
+ else if (type == 'V')
+ str << QuoteString(Top->Value, "=\"\n");
+ else if (type == 'n')
+ str << "\n";
+ else if (type == 'N')
+ str << "\t";
+ else
+ str << '%' << type;
+ str << f->c_str() + 1;
+ }
+ }
+
+ if (Top->Child != 0)
+ {
+ Top = Top->Child;
+ continue;
+ }
+
+ while (Top != 0 && Top->Next == 0)
+ Top = Top->Parent;
+ if (Top != 0)
+ Top = Top->Next;
+
+ if (Root != NULL)
+ {
+ const Configuration::Item* I = Top;
+ while(I != 0)
+ {
+ if (I == Root)
+ break;
+ else
+ I = I->Parent;
+ }
+ if (I == 0)
+ break;
+ }
+ } while (Top != 0);
+}
+ /*}}}*/
+
+// Configuration::Item::FullTag - Return the fully scoped tag /*{{{*/
+// ---------------------------------------------------------------------
+/* Stop sets an optional max recursion depth if this item is being viewed as
+ part of a sub tree. */
+string Configuration::Item::FullTag(const Item *Stop) const
+{
+ if (Parent == 0 || Parent->Parent == 0 || Parent == Stop)
+ return Tag;
+ return Parent->FullTag(Stop) + "::" + Tag;
+}
+ /*}}}*/
+
+// ReadConfigFile - Read a configuration file /*{{{*/
+// ---------------------------------------------------------------------
+/* The configuration format is very much like the named.conf format
+ used in bind8, in fact this routine can parse most named.conf files.
+ Sectional config files are like bind's named.conf where there are
+ sections like 'zone "foo.org" { .. };' This causes each section to be
+ added in with a tag like "zone::foo.org" instead of being split
+ tag/value. AsSectional enables Sectional parsing.*/
+static void leaveCurrentScope(std::stack<std::string> &Stack, std::string &ParentTag)
+{
+ if (Stack.empty())
+ ParentTag.clear();
+ else
+ {
+ ParentTag = Stack.top();
+ Stack.pop();
+ }
+}
+bool ReadConfigFile(Configuration &Conf,const string &FName,bool const &AsSectional,
+ unsigned const &Depth)
+{
+ // Open the stream for reading
+ FileFd F;
+ if (OpenConfigurationFileFd(FName, F) == false)
+ return false;
+
+ string LineBuffer;
+ std::stack<std::string> Stack;
+
+ // Parser state
+ string ParentTag;
+
+ int CurLine = 0;
+ bool InComment = false;
+ while (F.Eof() == false)
+ {
+ // The raw input line.
+ std::string Input;
+ if (F.ReadLine(Input) == false)
+ Input.clear();
+ // The input line with comments stripped.
+ std::string Fragment;
+
+ // Expand tabs in the input line and remove leading and trailing
+ // whitespace.
+ {
+ const int BufferSize = Input.size() * 8 + 1;
+ char *Buffer = new char[BufferSize];
+ try
+ {
+ memcpy(Buffer, Input.c_str(), Input.size() + 1);
+
+ _strtabexpand(Buffer, BufferSize);
+ _strstrip(Buffer);
+ Input = Buffer;
+ }
+ catch(...)
+ {
+ delete[] Buffer;
+ throw;
+ }
+ delete[] Buffer;
+ }
+ CurLine++;
+
+ // Now strip comments; if the whole line is contained in a
+ // comment, skip this line.
+
+ // The first meaningful character in the current fragment; will
+ // be adjusted below as we remove bytes from the front.
+ std::string::const_iterator Start = Input.begin();
+ // The last meaningful character in the current fragment.
+ std::string::const_iterator End = Input.end();
+
+ // Multi line comment
+ if (InComment == true)
+ {
+ for (std::string::const_iterator I = Start;
+ I != End; ++I)
+ {
+ if (*I == '*' && I + 1 != End && I[1] == '/')
+ {
+ Start = I + 2;
+ InComment = false;
+ break;
+ }
+ }
+ if (InComment == true)
+ continue;
+ }
+
+ // Discard single line comments
+ bool InQuote = false;
+ for (std::string::const_iterator I = Start;
+ I != End; ++I)
+ {
+ if (*I == '"')
+ InQuote = !InQuote;
+ if (InQuote == true)
+ continue;
+
+ if ((*I == '/' && I + 1 != End && I[1] == '/') ||
+ (*I == '#' && strcmp(string(I,I+6).c_str(),"#clear") != 0 &&
+ strcmp(string(I,I+8).c_str(),"#include") != 0 &&
+ strcmp(string(I,I+strlen("#x-apt-configure-index")).c_str(), "#x-apt-configure-index") != 0))
+ {
+ End = I;
+ break;
+ }
+ }
+
+ // Look for multi line comments and build up the
+ // fragment.
+ Fragment.reserve(End - Start);
+ InQuote = false;
+ for (std::string::const_iterator I = Start;
+ I != End; ++I)
+ {
+ if (*I == '"')
+ InQuote = !InQuote;
+ if (InQuote == true)
+ Fragment.push_back(*I);
+ else if (*I == '/' && I + 1 != End && I[1] == '*')
+ {
+ InComment = true;
+ for (std::string::const_iterator J = I;
+ J != End; ++J)
+ {
+ if (*J == '*' && J + 1 != End && J[1] == '/')
+ {
+ // Pretend we just finished walking over the
+ // comment, and don't add anything to the output
+ // fragment.
+ I = J + 1;
+ InComment = false;
+ break;
+ }
+ }
+
+ if (InComment == true)
+ break;
+ }
+ else
+ Fragment.push_back(*I);
+ }
+
+ // Skip blank lines.
+ if (Fragment.empty())
+ continue;
+
+ // The line has actual content; interpret what it means.
+ InQuote = false;
+ Start = Fragment.begin();
+ End = Fragment.end();
+ for (std::string::const_iterator I = Start;
+ I != End; ++I)
+ {
+ if (*I == '"')
+ InQuote = !InQuote;
+
+ if (InQuote == false && (*I == '{' || *I == ';' || *I == '}'))
+ {
+ // Put the last fragment into the buffer
+ std::string::const_iterator NonWhitespaceStart = Start;
+ std::string::const_iterator NonWhitespaceStop = I;
+ for (; NonWhitespaceStart != I && isspace(*NonWhitespaceStart) != 0; ++NonWhitespaceStart)
+ ;
+ for (; NonWhitespaceStop != NonWhitespaceStart && isspace(NonWhitespaceStop[-1]) != 0; --NonWhitespaceStop)
+ ;
+ if (LineBuffer.empty() == false && NonWhitespaceStop - NonWhitespaceStart != 0)
+ LineBuffer += ' ';
+ LineBuffer += string(NonWhitespaceStart, NonWhitespaceStop);
+
+ // Drop this from the input string, saving the character
+ // that terminated the construct we just closed. (i.e., a
+ // brace or a semicolon)
+ char TermChar = *I;
+ Start = I + 1;
+
+ // Syntax Error
+ if (TermChar == '{' && LineBuffer.empty() == true)
+ return _error->Error(_("Syntax error %s:%u: Block starts with no name."),FName.c_str(),CurLine);
+
+ // No string on this line
+ if (LineBuffer.empty() == true)
+ {
+ if (TermChar == '}')
+ leaveCurrentScope(Stack, ParentTag);
+ continue;
+ }
+
+ // Parse off the tag
+ string Tag;
+ const char *Pos = LineBuffer.c_str();
+ if (ParseQuoteWord(Pos,Tag) == false)
+ return _error->Error(_("Syntax error %s:%u: Malformed tag"),FName.c_str(),CurLine);
+
+ // Parse off the word
+ string Word;
+ bool NoWord = false;
+ if (ParseCWord(Pos,Word) == false &&
+ ParseQuoteWord(Pos,Word) == false)
+ {
+ if (TermChar != '{')
+ {
+ Word = Tag;
+ Tag = "";
+ }
+ else
+ NoWord = true;
+ }
+ if (strlen(Pos) != 0)
+ return _error->Error(_("Syntax error %s:%u: Extra junk after value"),FName.c_str(),CurLine);
+
+ // Go down a level
+ if (TermChar == '{')
+ {
+ Stack.push(ParentTag);
+
+ /* Make sectional tags incorporate the section into the
+ tag string */
+ if (AsSectional == true && Word.empty() == false)
+ {
+ Tag.append("::").append(Word);
+ Word.clear();
+ }
+
+ if (ParentTag.empty() == true)
+ ParentTag = Tag;
+ else
+ ParentTag.append("::").append(Tag);
+ Tag.clear();
+ }
+
+ // Generate the item name
+ string Item;
+ if (ParentTag.empty() == true)
+ Item = Tag;
+ else
+ {
+ if (TermChar != '{' || Tag.empty() == false)
+ Item = ParentTag + "::" + Tag;
+ else
+ Item = ParentTag;
+ }
+
+ // Specials
+ if (Tag.length() >= 1 && Tag[0] == '#')
+ {
+ if (ParentTag.empty() == false)
+ return _error->Error(_("Syntax error %s:%u: Directives can only be done at the top level"),FName.c_str(),CurLine);
+ Tag.erase(Tag.begin());
+ if (Tag == "clear")
+ Conf.Clear(Word);
+ else if (Tag == "include")
+ {
+ if (Depth > 10)
+ return _error->Error(_("Syntax error %s:%u: Too many nested includes"),FName.c_str(),CurLine);
+ if (Word.length() > 2 && Word.end()[-1] == '/')
+ {
+ if (ReadConfigDir(Conf,Word,AsSectional,Depth+1) == false)
+ return _error->Error(_("Syntax error %s:%u: Included from here"),FName.c_str(),CurLine);
+ }
+ else
+ {
+ if (ReadConfigFile(Conf,Word,AsSectional,Depth+1) == false)
+ return _error->Error(_("Syntax error %s:%u: Included from here"),FName.c_str(),CurLine);
+ }
+ }
+ else if (Tag == "x-apt-configure-index")
+ {
+ if (LoadConfigurationIndex(Word) == false)
+ return _error->Warning("Loading the configure index %s in file %s:%u failed!", Word.c_str(), FName.c_str(), CurLine);
+ }
+ else
+ return _error->Error(_("Syntax error %s:%u: Unsupported directive '%s'"),FName.c_str(),CurLine,Tag.c_str());
+ }
+ else if (Tag.empty() == true && NoWord == false && Word == "#clear")
+ return _error->Error(_("Syntax error %s:%u: clear directive requires an option tree as argument"),FName.c_str(),CurLine);
+ else
+ {
+ // Set the item in the configuration class
+ if (NoWord == false)
+ Conf.Set(Item,Word);
+ }
+
+ // Empty the buffer
+ LineBuffer.clear();
+
+ // Move up a tag, but only if there is no bit to parse
+ if (TermChar == '}')
+ leaveCurrentScope(Stack, ParentTag);
+ }
+ }
+
+ // Store the remaining text, if any, in the current line buffer.
+
+ // NB: could change this to use string-based operations; I'm
+ // using strstrip now to ensure backwards compatibility.
+ // -- dburrows 2008-04-01
+ {
+ char *Buffer = new char[End - Start + 1];
+ try
+ {
+ std::copy(Start, End, Buffer);
+ Buffer[End - Start] = '\0';
+
+ const char *Stripd = _strstrip(Buffer);
+ if (*Stripd != 0 && LineBuffer.empty() == false)
+ LineBuffer += " ";
+ LineBuffer += Stripd;
+ }
+ catch(...)
+ {
+ delete[] Buffer;
+ throw;
+ }
+ delete[] Buffer;
+ }
+ }
+
+ if (LineBuffer.empty() == false)
+ return _error->Error(_("Syntax error %s:%u: Extra junk at end of file"),FName.c_str(),CurLine);
+ return true;
+}
+ /*}}}*/
+// ReadConfigDir - Read a directory of config files /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ReadConfigDir(Configuration &Conf,const string &Dir,
+ bool const &AsSectional, unsigned const &Depth)
+{
+ bool good = true;
+ for (auto const &I : GetListOfFilesInDir(Dir, "conf", true, true))
+ good = ReadConfigFile(Conf, I, AsSectional, Depth) && good;
+ return good;
+}
+ /*}}}*/
+// MatchAgainstConfig Constructor /*{{{*/
+Configuration::MatchAgainstConfig::MatchAgainstConfig(char const * Config)
+{
+ std::vector<std::string> const strings = _config->FindVector(Config);
+ for (std::vector<std::string>::const_iterator s = strings.begin();
+ s != strings.end(); ++s)
+ {
+ regex_t *p = new regex_t;
+ if (regcomp(p, s->c_str(), REG_EXTENDED | REG_ICASE | REG_NOSUB) == 0)
+ patterns.push_back(p);
+ else
+ {
+ regfree(p);
+ delete p;
+ _error->Warning("Invalid regular expression '%s' in configuration "
+ "option '%s' will be ignored.",
+ s->c_str(), Config);
+ continue;
+ }
+ }
+ if (strings.empty() == true)
+ patterns.push_back(NULL);
+}
+ /*}}}*/
+// MatchAgainstConfig Destructor /*{{{*/
+Configuration::MatchAgainstConfig::~MatchAgainstConfig()
+{
+ clearPatterns();
+}
+void Configuration::MatchAgainstConfig::clearPatterns()
+{
+ for(std::vector<regex_t *>::const_iterator p = patterns.begin();
+ p != patterns.end(); ++p)
+ {
+ if (*p == NULL) continue;
+ regfree(*p);
+ delete *p;
+ }
+ patterns.clear();
+}
+ /*}}}*/
+// MatchAgainstConfig::Match - returns true if a pattern matches /*{{{*/
+bool Configuration::MatchAgainstConfig::Match(char const * str) const
+{
+ for(std::vector<regex_t *>::const_iterator p = patterns.begin();
+ p != patterns.end(); ++p)
+ if (*p != NULL && regexec(*p, str, 0, 0, 0) == 0)
+ return true;
+
+ return false;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/configuration.h b/apt-pkg/contrib/configuration.h
new file mode 100644
index 0000000..2a3ae1a
--- /dev/null
+++ b/apt-pkg/contrib/configuration.h
@@ -0,0 +1,155 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Configuration Class
+
+ This class provides a configuration file and command line parser
+ for a tree-oriented configuration environment. All runtime configuration
+ is stored in here.
+
+ Each configuration name is given as a fully scoped string such as
+ Foo::Bar
+ And has associated with it a text string. The Configuration class only
+ provides storage and lookup for this tree, other classes provide
+ configuration file formats (and parsers/emitters if needed).
+
+ Most things can get by quite happily with,
+ cout << _config->Find("Foo::Bar") << endl;
+
+ A special extension, support for ordered lists is provided by using the
+ special syntax, "block::list::" the trailing :: designates the
+ item as a list. To access the list you must use the tree function on
+ "block::list".
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_CONFIGURATION_H
+#define PKGLIB_CONFIGURATION_H
+
+#include <regex.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <apt-pkg/macros.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
+class Configuration
+{
+ public:
+
+ struct Item
+ {
+ std::string Value;
+ std::string Tag;
+ Item *Parent;
+ Item *Child;
+ Item *Next;
+
+ std::string FullTag(const Item *Stop = 0) const;
+
+ Item() : Parent(0), Child(0), Next(0) {};
+ };
+
+ private:
+
+ Item *Root;
+ bool ToFree;
+
+ Item *Lookup(Item *Head,const char *S,unsigned long const &Len,bool const &Create);
+ Item *Lookup(const char *Name,const bool &Create);
+ inline const Item *Lookup(const char *Name) const
+ {
+ return const_cast<Configuration *>(this)->Lookup(Name,false);
+ }
+
+ public:
+
+ std::string Find(const char *Name,const char *Default = 0) const;
+ std::string Find(std::string const &Name,const char *Default = 0) const {return Find(Name.c_str(),Default);};
+ std::string Find(std::string const &Name, std::string const &Default) const {return Find(Name.c_str(),Default.c_str());};
+ std::string FindFile(const char *Name,const char *Default = 0) const;
+ std::string FindDir(const char *Name,const char *Default = 0) const;
+ /** return a list of child options
+ *
+ * Options like Acquire::Languages are handled as lists which
+ * can be overridden and have a default. For the later two a comma
+ * separated list of values is supported.
+ *
+ * \param Name of the parent node
+ * \param Default list of values separated by commas */
+ std::vector<std::string> FindVector(const char *Name, std::string const &Default = "", bool const Keys = false) const;
+ std::vector<std::string> FindVector(std::string const &Name, std::string const &Default = "", bool const Keys = false) const { return FindVector(Name.c_str(), Default, Keys); };
+
+ int FindI(const char *Name,int const &Default = 0) const;
+ int FindI(std::string const &Name,int const &Default = 0) const {return FindI(Name.c_str(),Default);};
+ bool FindB(const char *Name,bool const &Default = false) const;
+ bool FindB(std::string const &Name,bool const &Default = false) const {return FindB(Name.c_str(),Default);};
+ std::string FindAny(const char *Name,const char *Default = 0) const;
+
+ inline void Set(const std::string &Name,const std::string &Value) {Set(Name.c_str(),Value);};
+ void CndSet(const char *Name,const std::string &Value);
+ void CndSet(const char *Name,const int Value);
+ void Set(const char *Name,const std::string &Value);
+ void Set(const char *Name,const int &Value);
+
+ inline bool Exists(const std::string &Name) const {return Exists(Name.c_str());};
+ bool Exists(const char *Name) const;
+ bool ExistsAny(const char *Name) const;
+
+ void MoveSubTree(char const * const OldRoot, char const * const NewRoot);
+
+ // clear a whole tree
+ void Clear(const std::string &Name);
+ void Clear();
+
+ // remove a certain value from a list (e.g. the list of "APT::Keep-Fds")
+ void Clear(std::string const &List, std::string const &Value);
+ void Clear(std::string const &List, int const &Value);
+
+ inline const Item *Tree(const char *Name) const {return Lookup(Name);};
+
+ inline void Dump() { Dump(std::clog); };
+ void Dump(std::ostream& str);
+ void Dump(std::ostream& str, char const * const root,
+ char const * const format, bool const emptyValue);
+
+ Configuration(const Item *Root);
+ Configuration();
+ ~Configuration();
+
+ /** \brief match a string against a configurable list of patterns */
+ class MatchAgainstConfig
+ {
+ std::vector<regex_t *> patterns;
+ APT_HIDDEN void clearPatterns();
+
+ public:
+ MatchAgainstConfig(char const * Config);
+ virtual ~MatchAgainstConfig();
+
+ /** \brief Returns \b true for a string matching one of the patterns */
+ bool Match(char const * str) const;
+ bool Match(std::string const &str) const { return Match(str.c_str()); };
+
+ /** \brief returns if the matcher setup was successful */
+ bool wasConstructedSuccessfully() const { return patterns.empty() == false; }
+ };
+};
+
+extern Configuration *_config;
+
+bool ReadConfigFile(Configuration &Conf,const std::string &FName,
+ bool const &AsSectional = false,
+ unsigned const &Depth = 0);
+
+bool ReadConfigDir(Configuration &Conf,const std::string &Dir,
+ bool const &AsSectional = false,
+ unsigned const &Depth = 0);
+
+#endif
diff --git a/apt-pkg/contrib/crc-16.cc b/apt-pkg/contrib/crc-16.cc
new file mode 100644
index 0000000..2e396ab
--- /dev/null
+++ b/apt-pkg/contrib/crc-16.cc
@@ -0,0 +1,77 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CRC16 - Compute a 16bit crc very quickly
+
+ This was ripped out of the linux 2.2 kernel source (irda/crc.c) and
+ is credited to ppp.c by Michael Callahan <callahan@maths.ox.ac.uk> and
+ Al Longyear <longyear@netcom.com>
+
+ Modified by Jason Gunthorpe <jgg@debian.org> to fit the local coding
+ style, this code is believed to be in the Public Domain.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/crc-16.h>
+ /*}}}*/
+
+/*
+ * This mysterious table is just the CRC of each possible byte. It can be
+ * computed using the standard bit-at-a-time methods. The polynomial can
+ * be seen in entry 128, 0x8408. This corresponds to x^0 + x^5 + x^12.
+ * Add the implicit x^16, and you have the standard CRC-CCITT.
+ */
+static unsigned short const crc16_table[256] =
+{
+ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
+ 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
+ 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
+ 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
+ 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
+ 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
+ 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
+ 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
+ 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
+ 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
+ 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
+ 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
+ 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
+ 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
+ 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
+ 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
+ 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
+ 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
+ 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
+ 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
+ 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
+ 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
+ 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
+ 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
+ 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
+ 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
+ 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
+ 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
+ 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
+ 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
+ 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
+ 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
+};
+
+/* Recompute the FCS with one more character appended. */
+#define CalcFCS(fcs, c) (((fcs) >> 8) ^ crc16_table[((fcs) ^ (c)) & 0xff])
+unsigned short AddCRC16Byte(unsigned short fcs, unsigned char byte)
+{
+ return CalcFCS(fcs, byte);
+}
+unsigned short AddCRC16(unsigned short fcs, void const *Buf,
+ unsigned long long len)
+{
+ unsigned char const *buf = (unsigned char const *)Buf;
+ while (len--)
+ fcs = CalcFCS(fcs, *buf++);
+ return fcs;
+}
diff --git a/apt-pkg/contrib/crc-16.h b/apt-pkg/contrib/crc-16.h
new file mode 100644
index 0000000..3e07560
--- /dev/null
+++ b/apt-pkg/contrib/crc-16.h
@@ -0,0 +1,19 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CRC16 - Compute a 16bit crc very quickly
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APTPKG_CRC16_H
+#define APTPKG_CRC16_H
+
+#include <apt-pkg/macros.h>
+
+#define INIT_FCS 0xffff
+unsigned short AddCRC16Byte(unsigned short fcs, unsigned char byte) APT_PURE;
+unsigned short AddCRC16(unsigned short fcs, void const *buf,
+ unsigned long long len) APT_PURE;
+
+#endif
diff --git a/apt-pkg/contrib/error.cc b/apt-pkg/contrib/error.cc
new file mode 100644
index 0000000..3c397ea
--- /dev/null
+++ b/apt-pkg/contrib/error.cc
@@ -0,0 +1,244 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Global Error Class - Global error mechanism
+
+ We use a simple STL vector to store each error record. A PendingFlag
+ is kept which indicates when the vector contains a Sever error.
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/error.h>
+
+#include <algorithm>
+#include <cstring>
+#include <iostream>
+#include <list>
+#include <string>
+#include <errno.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+ /*}}}*/
+
+// Global Error Object /*{{{*/
+GlobalError *_GetErrorObj()
+{
+ static thread_local GlobalError Obj;
+ return &Obj;
+}
+ /*}}}*/
+// GlobalError::GlobalError - Constructor /*{{{*/
+GlobalError::GlobalError() : PendingFlag(false) {}
+ /*}}}*/
+// GlobalError::FatalE, Errno, WarningE, NoticeE and DebugE - Add to the list/*{{{*/
+#define GEMessage(NAME, TYPE) \
+bool GlobalError::NAME (const char *Function, const char *Description,...) { \
+ va_list args; \
+ size_t msgSize = 400; \
+ int const errsv = errno; \
+ bool retry; \
+ do { \
+ va_start(args,Description); \
+ retry = InsertErrno(TYPE, Function, Description, args, errsv, msgSize); \
+ va_end(args); \
+ } while (retry); \
+ return false; \
+}
+GEMessage(FatalE, FATAL)
+GEMessage(Errno, ERROR)
+GEMessage(WarningE, WARNING)
+GEMessage(NoticeE, NOTICE)
+GEMessage(DebugE, DEBUG)
+#undef GEMessage
+ /*}}}*/
+// GlobalError::InsertErrno - Get part of the errortype string from errno/*{{{*/
+bool GlobalError::InsertErrno(MsgType const &type, const char *Function,
+ const char *Description,...) {
+ va_list args;
+ size_t msgSize = 400;
+ int const errsv = errno;
+ bool retry;
+ do {
+ va_start(args,Description);
+ retry = InsertErrno(type, Function, Description, args, errsv, msgSize);
+ va_end(args);
+ } while (retry);
+ return false;
+}
+ /*}}}*/
+// GlobalError::InsertErrno - formats an error message with the errno /*{{{*/
+bool GlobalError::InsertErrno(MsgType type, const char* Function,
+ const char* Description, va_list &args,
+ int const errsv, size_t &msgSize) {
+ char* S = (char*) malloc(msgSize);
+ int const n = snprintf(S, msgSize, "%s - %s (%i: %s)", Description,
+ Function, errsv, strerror(errsv));
+ if (n > -1 && ((unsigned int) n) < msgSize);
+ else {
+ if (n > -1)
+ msgSize = n + 1;
+ else
+ msgSize *= 2;
+ free(S);
+ return true;
+ }
+
+ bool const geins = Insert(type, S, args, msgSize);
+ free(S);
+ return geins;
+}
+ /*}}}*/
+// GlobalError::Fatal, Error, Warning, Notice and Debug - Add to the list/*{{{*/
+#define GEMessage(NAME, TYPE) \
+bool GlobalError::NAME (const char *Description,...) { \
+ va_list args; \
+ size_t msgSize = 400; \
+ bool retry; \
+ do { \
+ va_start(args,Description); \
+ retry = Insert(TYPE, Description, args, msgSize); \
+ va_end(args); \
+ } while (retry); \
+ return false; \
+}
+GEMessage(Fatal, FATAL)
+GEMessage(Error, ERROR)
+GEMessage(Warning, WARNING)
+GEMessage(Notice, NOTICE)
+GEMessage(Debug, DEBUG)
+#undef GEMessage
+ /*}}}*/
+// GlobalError::Insert - Add a errotype message to the list /*{{{*/
+bool GlobalError::Insert(MsgType const &type, const char *Description,...)
+{
+ va_list args;
+ size_t msgSize = 400;
+ bool retry;
+ do {
+ va_start(args,Description);
+ retry = Insert(type, Description, args, msgSize);
+ va_end(args);
+ } while (retry);
+ return false;
+}
+ /*}}}*/
+// GlobalError::Insert - Insert a new item at the end /*{{{*/
+bool GlobalError::Insert(MsgType type, const char* Description,
+ va_list &args, size_t &msgSize) {
+ char* S = (char*) malloc(msgSize);
+ int const n = vsnprintf(S, msgSize, Description, args);
+ if (n > -1 && ((unsigned int) n) < msgSize);
+ else {
+ if (n > -1)
+ msgSize = n + 1;
+ else
+ msgSize *= 2;
+ free(S);
+ return true;
+ }
+
+ Item const m(S, type);
+ Messages.push_back(m);
+
+ if (type == ERROR || type == FATAL)
+ PendingFlag = true;
+
+ if (type == FATAL || type == DEBUG)
+ std::clog << m << std::endl;
+
+ free(S);
+ return false;
+}
+ /*}}}*/
+// GlobalError::PopMessage - Pulls a single message out /*{{{*/
+bool GlobalError::PopMessage(std::string &Text) {
+ if (Messages.empty() == true)
+ return false;
+
+ Item const msg = Messages.front();
+ Messages.pop_front();
+
+ bool const Ret = (msg.Type == ERROR || msg.Type == FATAL);
+ Text = msg.Text;
+ if (PendingFlag == false || Ret == false)
+ return Ret;
+
+ // check if another error message is pending
+ for (std::list<Item>::const_iterator m = Messages.begin();
+ m != Messages.end(); ++m)
+ if (m->Type == ERROR || m->Type == FATAL)
+ return Ret;
+
+ PendingFlag = false;
+ return Ret;
+}
+ /*}}}*/
+// GlobalError::DumpErrors - Dump all of the errors/warns to cerr /*{{{*/
+void GlobalError::DumpErrors(std::ostream &out, MsgType const &threshold,
+ bool const &mergeStack) {
+ if (mergeStack == true)
+ for (std::list<MsgStack>::const_reverse_iterator s = Stacks.rbegin();
+ s != Stacks.rend(); ++s)
+ std::copy(s->Messages.begin(), s->Messages.end(), std::front_inserter(Messages));
+
+ std::for_each(Messages.begin(), Messages.end(), [&threshold, &out](Item const &m) {
+ if (m.Type >= threshold)
+ out << m << std::endl;
+ });
+
+ Discard();
+}
+ /*}}}*/
+// GlobalError::Discard - Discard /*{{{*/
+void GlobalError::Discard() {
+ Messages.clear();
+ PendingFlag = false;
+}
+ /*}}}*/
+// GlobalError::empty - does our error list include anything? /*{{{*/
+bool GlobalError::empty(MsgType const &threshold) const {
+ if (PendingFlag == true)
+ return false;
+
+ if (Messages.empty() == true)
+ return true;
+
+ return std::find_if(Messages.begin(), Messages.end(), [&threshold](Item const &m) {
+ return m.Type >= threshold;
+ }) == Messages.end();
+}
+ /*}}}*/
+// GlobalError::PushToStack /*{{{*/
+void GlobalError::PushToStack() {
+ Stacks.emplace_back(Messages, PendingFlag);
+ Discard();
+}
+ /*}}}*/
+// GlobalError::RevertToStack /*{{{*/
+void GlobalError::RevertToStack() {
+ Discard();
+ MsgStack pack = Stacks.back();
+ Messages = pack.Messages;
+ PendingFlag = pack.PendingFlag;
+ Stacks.pop_back();
+}
+ /*}}}*/
+// GlobalError::MergeWithStack /*{{{*/
+void GlobalError::MergeWithStack() {
+ MsgStack pack = Stacks.back();
+ Messages.splice(Messages.begin(), pack.Messages);
+ PendingFlag = PendingFlag || pack.PendingFlag;
+ Stacks.pop_back();
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/error.h b/apt-pkg/contrib/error.h
new file mode 100644
index 0000000..d0f4507
--- /dev/null
+++ b/apt-pkg/contrib/error.h
@@ -0,0 +1,365 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Global Error Class - Global error mechanism
+
+ This class has a single global instance. When a function needs to
+ generate an error condition, such as a read error, it calls a member
+ in this class to add the error to a stack of errors.
+
+ By using a stack the problem with a scheme like errno is removed and
+ it allows a very detailed account of what went wrong to be transmitted
+ to the UI for display. (Errno has problems because each function sets
+ errno to 0 if it didn't have an error thus eraseing erno in the process
+ of cleanup)
+
+ Several predefined error generators are provided to handle common
+ things like errno. The general idea is that all methods return a bool.
+ If the bool is true then things are OK, if it is false then things
+ should start being undone and the stack should unwind under program
+ control.
+
+ A Warning should not force the return of false. Things did not fail, but
+ they might have had unexpected problems. Errors are stored in a FIFO
+ so Pop will return the first item..
+
+ I have some thoughts about extending this into a more general UI<->
+ Engine interface, ie allowing the Engine to say 'The disk is full' in
+ a dialog that says 'Panic' and 'Retry'.. The error generator functions
+ like errno, Warning and Error return false always so this is normal:
+ if (open(..))
+ return _error->Errno(..);
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_ERROR_H
+#define PKGLIB_ERROR_H
+
+#include <apt-pkg/macros.h>
+
+#include <iostream>
+#include <list>
+#include <string>
+
+#include <stdarg.h>
+#include <stddef.h>
+
+class GlobalError /*{{{*/
+{
+public: /*{{{*/
+ /** \brief a message can have one of following severity */
+ enum MsgType {
+ /** \brief Message will be printed instantly as it is likely that
+ this error will lead to a complete crash */
+ FATAL = 40,
+ /** \brief An error does hinder the correct execution and should be corrected */
+ ERROR = 30,
+ /** \brief indicates problem that can lead to errors later on */
+ WARNING = 20,
+ /** \brief deprecation warnings, old fallback behavior, … */
+ NOTICE = 10,
+ /** \brief for developers only in areas it is hard to print something directly */
+ DEBUG = 0
+ };
+
+ /** \brief add a fatal error message with errno to the list
+ *
+ * \param Function name of the function generating the error
+ * \param Description format string for the error message
+ *
+ * \return \b false
+ */
+ bool FatalE(const char *Function,const char *Description,...) APT_PRINTF(3) APT_COLD;
+
+ /** \brief add an Error message with errno to the list
+ *
+ * \param Function name of the function generating the error
+ * \param Description format string for the error message
+ *
+ * \return \b false
+ */
+ bool Errno(const char *Function,const char *Description,...) APT_PRINTF(3) APT_COLD;
+
+ /** \brief add a warning message with errno to the list
+ *
+ * A warning should be considered less severe than an error and
+ * may be ignored by the client.
+ *
+ * \param Function Name of the function generates the warning.
+ * \param Description Format string for the warning message.
+ *
+ * \return \b false
+ */
+ bool WarningE(const char *Function,const char *Description,...) APT_PRINTF(3) APT_COLD;
+
+ /** \brief add a notice message with errno to the list
+ *
+ * \param Function name of the function generating the error
+ * \param Description format string for the error message
+ *
+ * \return \b false
+ */
+ bool NoticeE(const char *Function,const char *Description,...) APT_PRINTF(3) APT_COLD;
+
+ /** \brief add a debug message with errno to the list
+ *
+ * \param Function name of the function generating the error
+ * \param Description format string for the error message
+ *
+ * \return \b false
+ */
+ bool DebugE(const char *Function,const char *Description,...) APT_PRINTF(3) APT_COLD;
+
+ /** \brief adds an errno message with the given type
+ *
+ * \param type of the error message
+ * \param Function which failed
+ * \param Description of the error
+ */
+ bool InsertErrno(MsgType const &type, const char* Function,
+ const char* Description,...) APT_PRINTF(4) APT_COLD;
+
+ /** \brief adds an errno message with the given type
+ *
+ * args needs to be initialized with va_start and terminated
+ * with va_end by the caller. msgSize is also an out-parameter
+ * in case the msgSize was not enough to store the complete message.
+ *
+ * \param type of the error message
+ * \param Function which failed
+ * \param Description is the format string for args
+ * \param args list from a printf-like function
+ * \param errsv is the errno the error is for
+ * \param msgSize is the size of the char[] used to store message
+ * \return true if the message was added, false if not - the caller
+ * should call this method again in that case
+ */
+ bool InsertErrno(MsgType type, const char* Function,
+ const char* Description, va_list &args,
+ int const errsv, size_t &msgSize) APT_COLD;
+
+ /** \brief add an fatal error message to the list
+ *
+ * Most of the stuff we consider as "error" is also "fatal" for
+ * the user as the application will not have the expected result,
+ * but a fatal message here means that it gets printed directly
+ * to stderr in addition to adding it to the list as the error
+ * leads sometimes to crashes and a maybe duplicated message
+ * is better than "Segfault" as the only displayed text
+ *
+ * \param Description Format string for the fatal error message.
+ *
+ * \return \b false
+ */
+ bool Fatal(const char *Description,...) APT_PRINTF(2) APT_COLD;
+
+ /** \brief add an Error message to the list
+ *
+ * \param Description Format string for the error message.
+ *
+ * \return \b false
+ */
+ bool Error(const char *Description,...) APT_PRINTF(2) APT_COLD;
+
+ /** \brief add a warning message to the list
+ *
+ * A warning should be considered less severe than an error and
+ * may be ignored by the client.
+ *
+ * \param Description Format string for the message
+ *
+ * \return \b false
+ */
+ bool Warning(const char *Description,...) APT_PRINTF(2) APT_COLD;
+
+ /** \brief add a notice message to the list
+ *
+ * A notice should be considered less severe than an error or a
+ * warning and can be ignored by the client without further problems
+ * for some times, but he should consider fixing the problem.
+ * This error type can be used for e.g. deprecation warnings of options.
+ *
+ * \param Description Format string for the message
+ *
+ * \return \b false
+ */
+ bool Notice(const char *Description,...) APT_PRINTF(2) APT_COLD;
+
+ /** \brief add a debug message to the list
+ *
+ * \param Description Format string for the message
+ *
+ * \return \b false
+ */
+ bool Debug(const char *Description,...) APT_PRINTF(2) APT_COLD;
+
+ /** \brief adds an error message with the given type
+ *
+ * \param type of the error message
+ * \param Description of the error
+ */
+ bool Insert(MsgType const &type, const char* Description,...) APT_PRINTF(3) APT_COLD;
+
+ /** \brief adds an error message with the given type
+ *
+ * args needs to be initialized with va_start and terminated
+ * with va_end by the caller. msgSize is also an out-parameter
+ * in case the msgSize was not enough to store the complete message.
+ *
+ * \param type of the error message
+ * \param Description is the format string for args
+ * \param args list from a printf-like function
+ * \param msgSize is the size of the char[] used to store message
+ * \return true if the message was added, false if not - the caller
+ * should call this method again in that case
+ */
+ bool Insert(MsgType type, const char* Description,
+ va_list &args, size_t &msgSize) APT_COLD;
+
+ /** \brief is an error in the list?
+ *
+ * \return \b true if an error is included in the list, \b false otherwise
+ */
+ inline bool PendingError() const APT_PURE {return PendingFlag;};
+
+ /** \brief is the list empty?
+ *
+ * Can be used to check if the current stack level doesn't include
+ * anything equal or more severe than a given threshold, defaulting
+ * to warning level for historic reasons.
+ *
+ * \param threshold minimum level considered
+ *
+ * \return \b true if the list is empty, \b false otherwise
+ */
+ bool empty(MsgType const &threshold = WARNING) const APT_PURE;
+
+ /** \brief returns and removes the first (or last) message in the list
+ *
+ * \param[out] Text message of the first/last item
+ *
+ * \return \b true if the message was an error, \b false otherwise
+ */
+ bool PopMessage(std::string &Text);
+
+ /** \brief clears the list of messages */
+ void Discard();
+
+ /** \brief outputs the list of messages to the given stream
+ *
+ * Note that all messages are discarded, even undisplayed ones.
+ *
+ * \param[out] out output stream to write the messages in
+ * \param threshold minimum level considered
+ * \param mergeStack if true recursively dumps the entire stack
+ */
+ void DumpErrors(std::ostream &out, MsgType const &threshold = WARNING,
+ bool const &mergeStack = true);
+
+ /** \brief dumps the list of messages to std::cerr
+ *
+ * Note that all messages are discarded, also the notices
+ * displayed or not.
+ *
+ * \param threshold minimum level printed
+ */
+ void inline DumpErrors(MsgType const &threshold) {
+ DumpErrors(std::cerr, threshold);
+ }
+
+ // mvo: we do this instead of using a default parameter in the
+ // previous declaration to avoid a (subtle) API break for
+ // e.g. sigc++ and mem_fun0
+ /** \brief dumps the messages of type WARNING or higher to std::cerr
+ *
+ * Note that all messages are discarded, displayed or not.
+ *
+ */
+ void inline DumpErrors() {
+ DumpErrors(WARNING);
+ }
+
+ /** \brief put the current Messages into the stack
+ *
+ * All "old" messages will be pushed into a stack to
+ * them later back, but for now the Message query will be
+ * empty and performs as no messages were present before.
+ *
+ * The stack can be as deep as you want - all stack operations
+ * will only operate on the last element in the stack.
+ */
+ void PushToStack();
+
+ /** \brief throw away all current messages */
+ void RevertToStack();
+
+ /** \brief merge current and stack together */
+ void MergeWithStack();
+
+ /** \brief return the deep of the stack */
+ size_t StackCount() const APT_PURE {
+ return Stacks.size();
+ }
+
+ GlobalError();
+ /*}}}*/
+private: /*{{{*/
+ struct Item {
+ std::string Text;
+ MsgType Type;
+
+ Item(char const *Text, MsgType const &Type) :
+ Text(Text), Type(Type) {};
+
+ APT_HIDDEN friend std::ostream& operator<< (std::ostream &out, Item i) {
+ switch(i.Type) {
+ case FATAL:
+ case ERROR: out << 'E'; break;
+ case WARNING: out << 'W'; break;
+ case NOTICE: out << 'N'; break;
+ case DEBUG: out << 'D'; break;
+ }
+ out << ": ";
+ std::string::size_type line_start = 0;
+ std::string::size_type line_end;
+ while ((line_end = i.Text.find_first_of("\n\r", line_start)) != std::string::npos) {
+ if (line_start != 0)
+ out << std::endl << " ";
+ out << i.Text.substr(line_start, line_end - line_start);
+ line_start = i.Text.find_first_not_of("\n\r", line_end + 1);
+ if (line_start == std::string::npos)
+ break;
+ }
+ if (line_start == 0)
+ out << i.Text;
+ else if (line_start != std::string::npos)
+ out << std::endl << " " << i.Text.substr(line_start);
+ return out;
+ }
+ };
+
+ std::list<Item> Messages;
+ bool PendingFlag;
+
+ struct MsgStack {
+ std::list<Item> Messages;
+ bool const PendingFlag;
+
+ MsgStack(std::list<Item> const &Messages, bool const &Pending) :
+ Messages(Messages), PendingFlag(Pending) {};
+ };
+
+ std::list<MsgStack> Stacks;
+ /*}}}*/
+};
+ /*}}}*/
+
+// The 'extra-ansi' syntax is used to help with collisions.
+GlobalError *_GetErrorObj();
+#define _error _GetErrorObj()
+
+#endif
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
new file mode 100644
index 0000000..4f12349
--- /dev/null
+++ b/apt-pkg/contrib/fileutl.cc
@@ -0,0 +1,3443 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ File Utilities
+
+ CopyFile - Buffered copy of a single file
+ GetLock - dpkg compatible lock file manipulation (fcntl)
+
+ Most of this source is placed in the Public Domain, do with it what
+ you will
+ It was originally written by Jason Gunthorpe <jgg@debian.org>.
+ FileFd gzip support added by Martin Pitt <martin.pitt@canonical.com>
+
+ The exception is RunScripts() it is under the GPLv2
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/sptr.h>
+#include <apt-pkg/strutl.h>
+
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <glob.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/select.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <memory>
+#include <set>
+
+#ifdef HAVE_ZLIB
+#include <zlib.h>
+#endif
+#ifdef HAVE_BZ2
+#include <bzlib.h>
+#endif
+#ifdef HAVE_LZMA
+#include <lzma.h>
+#endif
+#ifdef HAVE_LZ4
+#include <lz4frame.h>
+#endif
+#ifdef HAVE_ZSTD
+#include <zstd.h>
+#endif
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-bus.h>
+#endif
+#include <endian.h>
+#include <stdint.h>
+
+#if __gnu_linux__
+#include <sys/prctl.h>
+#endif
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+/* Should be a multiple of the common page size (4096) */
+static constexpr unsigned long long APT_BUFFER_SIZE = 64 * 1024;
+
+// RunScripts - Run a set of scripts from a configuration subtree /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RunScripts(const char *Cnf)
+{
+ Configuration::Item const *Opts = _config->Tree(Cnf);
+ if (Opts == 0 || Opts->Child == 0)
+ return true;
+ Opts = Opts->Child;
+
+ // Fork for running the system calls
+ pid_t Child = ExecFork();
+
+ // This is the child
+ if (Child == 0)
+ {
+ if (_system != nullptr && _system->IsLocked() == true && (stringcasecmp(Cnf, "dpkg::post-invoke") == 0 || stringcasecmp(Cnf, "dpkg::pre-invoke") == 0))
+ setenv("DPKG_FRONTEND_LOCKED", "true", 1);
+ if (_config->FindDir("DPkg::Chroot-Directory","/") != "/")
+ {
+ std::cerr << "Chrooting into "
+ << _config->FindDir("DPkg::Chroot-Directory")
+ << std::endl;
+ if (chroot(_config->FindDir("DPkg::Chroot-Directory","/").c_str()) != 0)
+ _exit(100);
+ }
+
+ if (chdir("/tmp/") != 0)
+ _exit(100);
+
+ unsigned int Count = 1;
+ for (; Opts != 0; Opts = Opts->Next, Count++)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+
+ if(_config->FindB("Debug::RunScripts", false) == true)
+ std::clog << "Running external script: '"
+ << Opts->Value << "'" << std::endl;
+
+ if (system(Opts->Value.c_str()) != 0)
+ _exit(100+Count);
+ }
+ _exit(0);
+ }
+
+ // Wait for the child
+ int Status = 0;
+ while (waitpid(Child,&Status,0) != Child)
+ {
+ if (errno == EINTR)
+ continue;
+ return _error->Errno("waitpid","Couldn't wait for subprocess");
+ }
+
+ // Restore sig int/quit
+ signal(SIGQUIT,SIG_DFL);
+ signal(SIGINT,SIG_DFL);
+
+ // Check for an error code.
+ if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
+ {
+ unsigned int Count = WEXITSTATUS(Status);
+ if (Count > 100)
+ {
+ Count -= 100;
+ for (; Opts != 0 && Count != 1; Opts = Opts->Next, Count--);
+ _error->Error("Problem executing scripts %s '%s'",Cnf,Opts->Value.c_str());
+ }
+
+ return _error->Error("Sub-process returned an error code");
+ }
+
+ return true;
+}
+ /*}}}*/
+
+// CopyFile - Buffered copy of a file /*{{{*/
+// ---------------------------------------------------------------------
+/* The caller is expected to set things so that failure causes erasure */
+bool CopyFile(FileFd &From,FileFd &To)
+{
+ if (From.IsOpen() == false || To.IsOpen() == false ||
+ From.Failed() == true || To.Failed() == true)
+ return false;
+
+ // Buffered copy between fds
+ constexpr size_t BufSize = APT_BUFFER_SIZE;
+ std::unique_ptr<unsigned char[]> Buf(new unsigned char[BufSize]);
+ unsigned long long ToRead = 0;
+ do {
+ if (From.Read(Buf.get(),BufSize, &ToRead) == false ||
+ To.Write(Buf.get(),ToRead) == false)
+ return false;
+ } while (ToRead != 0);
+
+ return true;
+}
+ /*}}}*/
+bool RemoveFileAt(char const * const Function, int const dirfd, std::string const &FileName)/*{{{*/
+{
+ if (FileName == "/dev/null")
+ return true;
+ errno = 0;
+ if (unlinkat(dirfd, FileName.c_str(), 0) != 0)
+ {
+ if (errno == ENOENT)
+ return true;
+
+ return _error->WarningE(Function,_("Problem unlinking the file %s"), FileName.c_str());
+ }
+ return true;
+}
+ /*}}}*/
+bool RemoveFile(char const * const Function, std::string const &FileName)/*{{{*/
+{
+ if (FileName == "/dev/null")
+ return true;
+ errno = 0;
+ if (unlink(FileName.c_str()) != 0)
+ {
+ if (errno == ENOENT)
+ return true;
+
+ return _error->WarningE(Function,_("Problem unlinking the file %s"), FileName.c_str());
+ }
+ return true;
+}
+ /*}}}*/
+// GetLock - Gets a lock file /*{{{*/
+// ---------------------------------------------------------------------
+/* This will create an empty file of the given name and lock it. Once this
+ is done all other calls to GetLock in any other process will fail with
+ -1. The return result is the fd of the file, the call should call
+ close at some time. */
+int GetLock(string File,bool Errors)
+{
+ // GetLock() is used in aptitude on directories with public-write access
+ // Use O_NOFOLLOW here to prevent symlink traversal attacks
+ int FD = open(File.c_str(),O_RDWR | O_CREAT | O_NOFOLLOW,0640);
+ if (FD < 0)
+ {
+ // Read only .. can't have locking problems there.
+ if (errno == EROFS)
+ {
+ _error->Warning(_("Not using locking for read only lock file %s"),File.c_str());
+ return dup(0); // Need something for the caller to close
+ }
+
+ if (Errors == true)
+ _error->Errno("open",_("Could not open lock file %s"),File.c_str());
+
+ // Feh.. We do this to distinguish the lock vs open case..
+ errno = EPERM;
+ return -1;
+ }
+ SetCloseExec(FD,true);
+
+ // Acquire a write lock
+ struct flock fl;
+ fl.l_type = F_WRLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+ if (fcntl(FD,F_SETLK,&fl) == -1)
+ {
+ // always close to not leak resources
+ int Tmp = errno;
+ close(FD);
+ errno = Tmp;
+
+ if (errno == ENOLCK)
+ {
+ _error->Warning(_("Not using locking for nfs mounted lock file %s"),File.c_str());
+ return dup(0); // Need something for the caller to close
+ }
+
+ if (Errors == true)
+ _error->Errno("open",_("Could not get lock %s"),File.c_str());
+
+ return -1;
+ }
+
+ return FD;
+}
+ /*}}}*/
+// FileExists - Check if a file exists /*{{{*/
+// ---------------------------------------------------------------------
+/* Beware: Directories are also files! */
+bool FileExists(string File)
+{
+ struct stat Buf;
+ if (stat(File.c_str(),&Buf) != 0)
+ return false;
+ return true;
+}
+ /*}}}*/
+// RealFileExists - Check if a file exists and if it is really a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RealFileExists(string File)
+{
+ struct stat Buf;
+ if (stat(File.c_str(),&Buf) != 0)
+ return false;
+ return ((Buf.st_mode & S_IFREG) != 0);
+}
+ /*}}}*/
+// DirectoryExists - Check if a directory exists and is really one /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool DirectoryExists(string const &Path)
+{
+ struct stat Buf;
+ if (stat(Path.c_str(),&Buf) != 0)
+ return false;
+ return ((Buf.st_mode & S_IFDIR) != 0);
+}
+ /*}}}*/
+// CreateDirectory - poor man's mkdir -p guarded by a parent directory /*{{{*/
+// ---------------------------------------------------------------------
+/* This method will create all directories needed for path in good old
+ mkdir -p style but refuses to do this if Parent is not a prefix of
+ this Path. Example: /var/cache/ and /var/cache/apt/archives are given,
+ so it will create apt/archives if /var/cache exists - on the other
+ hand if the parent is /var/lib the creation will fail as this path
+ is not a parent of the path to be generated. */
+bool CreateDirectory(string const &Parent, string const &Path)
+{
+ if (Parent.empty() == true || Path.empty() == true)
+ return false;
+
+ if (DirectoryExists(Path) == true)
+ return true;
+
+ if (DirectoryExists(Parent) == false)
+ return false;
+
+ // we are not going to create directories "into the blue"
+ if (Path.compare(0, Parent.length(), Parent) != 0)
+ return false;
+
+ vector<string> const dirs = VectorizeString(Path.substr(Parent.size()), '/');
+ string progress = Parent;
+ for (vector<string>::const_iterator d = dirs.begin(); d != dirs.end(); ++d)
+ {
+ if (d->empty() == true)
+ continue;
+
+ progress.append("/").append(*d);
+ if (DirectoryExists(progress) == true)
+ continue;
+
+ if (mkdir(progress.c_str(), 0755) != 0)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+// CreateAPTDirectoryIfNeeded - ensure that the given directory exists /*{{{*/
+// ---------------------------------------------------------------------
+/* a small wrapper around CreateDirectory to check if it exists and to
+ remove the trailing "/apt/" from the parent directory if needed */
+bool CreateAPTDirectoryIfNeeded(string const &Parent, string const &Path)
+{
+ if (DirectoryExists(Path) == true)
+ return true;
+
+ size_t const len = Parent.size();
+ if (len > 5 && Parent.find("/apt/", len - 6, 5) == len - 5)
+ {
+ if (CreateDirectory(Parent.substr(0,len-5), Path) == true)
+ return true;
+ }
+ else if (CreateDirectory(Parent, Path) == true)
+ return true;
+
+ return false;
+}
+ /*}}}*/
+// GetListOfFilesInDir - returns a vector of files in the given dir /*{{{*/
+// ---------------------------------------------------------------------
+/* If an extension is given only files with this extension are included
+ in the returned vector, otherwise every "normal" file is included. */
+std::vector<string> GetListOfFilesInDir(string const &Dir, string const &Ext,
+ bool const &SortList, bool const &AllowNoExt)
+{
+ std::vector<string> ext;
+ ext.reserve(2);
+ if (Ext.empty() == false)
+ ext.push_back(Ext);
+ if (AllowNoExt == true && ext.empty() == false)
+ ext.push_back("");
+ return GetListOfFilesInDir(Dir, ext, SortList);
+}
+std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> const &Ext,
+ bool const &SortList)
+{
+ // Attention debuggers: need to be set with the environment config file!
+ bool const Debug = _config->FindB("Debug::GetListOfFilesInDir", false);
+ if (Debug == true)
+ {
+ std::clog << "Accept in " << Dir << " only files with the following " << Ext.size() << " extensions:" << std::endl;
+ if (Ext.empty() == true)
+ std::clog << "\tNO extension" << std::endl;
+ else
+ for (std::vector<string>::const_iterator e = Ext.begin();
+ e != Ext.end(); ++e)
+ std::clog << '\t' << (e->empty() == true ? "NO" : *e) << " extension" << std::endl;
+ }
+
+ std::vector<string> List;
+
+ if (DirectoryExists(Dir) == false)
+ {
+ _error->Error(_("List of files can't be created as '%s' is not a directory"), Dir.c_str());
+ return List;
+ }
+
+ Configuration::MatchAgainstConfig SilentIgnore("Dir::Ignore-Files-Silently");
+ DIR *D = opendir(Dir.c_str());
+ if (D == 0)
+ {
+ if (errno == EACCES)
+ _error->WarningE("opendir", _("Unable to read %s"), Dir.c_str());
+ else
+ _error->Errno("opendir", _("Unable to read %s"), Dir.c_str());
+ return List;
+ }
+
+ for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D))
+ {
+ // skip "hidden" files
+ if (Ent->d_name[0] == '.')
+ continue;
+
+ // Make sure it is a file and not something else
+ string const File = flCombine(Dir,Ent->d_name);
+#ifdef _DIRENT_HAVE_D_TYPE
+ if (Ent->d_type != DT_REG)
+#endif
+ {
+ if (RealFileExists(File) == false)
+ {
+ // do not show ignoration warnings for directories
+ if (
+#ifdef _DIRENT_HAVE_D_TYPE
+ Ent->d_type == DT_DIR ||
+#endif
+ DirectoryExists(File) == true)
+ continue;
+ if (SilentIgnore.Match(Ent->d_name) == false)
+ _error->Notice(_("Ignoring '%s' in directory '%s' as it is not a regular file"), Ent->d_name, Dir.c_str());
+ continue;
+ }
+ }
+
+ // check for accepted extension:
+ // no extension given -> periods are bad as hell!
+ // extensions given -> "" extension allows no extension
+ if (Ext.empty() == false)
+ {
+ string d_ext = flExtension(Ent->d_name);
+ if (d_ext == Ent->d_name) // no extension
+ {
+ if (std::find(Ext.begin(), Ext.end(), "") == Ext.end())
+ {
+ if (Debug == true)
+ std::clog << "Bad file: " << Ent->d_name << " → no extension" << std::endl;
+ if (SilentIgnore.Match(Ent->d_name) == false)
+ _error->Notice(_("Ignoring file '%s' in directory '%s' as it has no filename extension"), Ent->d_name, Dir.c_str());
+ continue;
+ }
+ }
+ else if (std::find(Ext.begin(), Ext.end(), d_ext) == Ext.end())
+ {
+ if (Debug == true)
+ std::clog << "Bad file: " << Ent->d_name << " → bad extension »" << flExtension(Ent->d_name) << "«" << std::endl;
+ if (SilentIgnore.Match(Ent->d_name) == false)
+ _error->Notice(_("Ignoring file '%s' in directory '%s' as it has an invalid filename extension"), Ent->d_name, Dir.c_str());
+ continue;
+ }
+ }
+
+ // Skip bad filenames ala run-parts
+ const char *C = Ent->d_name;
+ for (; *C != 0; ++C)
+ if (isalpha(*C) == 0 && isdigit(*C) == 0
+ && *C != '_' && *C != '-' && *C != ':') {
+ // no required extension -> dot is a bad character
+ if (*C == '.' && Ext.empty() == false)
+ continue;
+ break;
+ }
+
+ // we don't reach the end of the name -> bad character included
+ if (*C != 0)
+ {
+ if (Debug == true)
+ std::clog << "Bad file: " << Ent->d_name << " → bad character »"
+ << *C << "« in filename (period allowed: " << (Ext.empty() ? "no" : "yes") << ")" << std::endl;
+ continue;
+ }
+
+ // skip filenames which end with a period. These are never valid
+ if (*(C - 1) == '.')
+ {
+ if (Debug == true)
+ std::clog << "Bad file: " << Ent->d_name << " → Period as last character" << std::endl;
+ continue;
+ }
+
+ if (Debug == true)
+ std::clog << "Accept file: " << Ent->d_name << " in " << Dir << std::endl;
+ List.push_back(File);
+ }
+ closedir(D);
+
+ if (SortList == true)
+ std::sort(List.begin(),List.end());
+ return List;
+}
+std::vector<string> GetListOfFilesInDir(string const &Dir, bool SortList)
+{
+ bool const Debug = _config->FindB("Debug::GetListOfFilesInDir", false);
+ if (Debug == true)
+ std::clog << "Accept in " << Dir << " all regular files" << std::endl;
+
+ std::vector<string> List;
+
+ if (DirectoryExists(Dir) == false)
+ {
+ _error->Error(_("List of files can't be created as '%s' is not a directory"), Dir.c_str());
+ return List;
+ }
+
+ DIR *D = opendir(Dir.c_str());
+ if (D == 0)
+ {
+ _error->Errno("opendir",_("Unable to read %s"),Dir.c_str());
+ return List;
+ }
+
+ for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D))
+ {
+ // skip "hidden" files
+ if (Ent->d_name[0] == '.')
+ continue;
+
+ // Make sure it is a file and not something else
+ string const File = flCombine(Dir,Ent->d_name);
+#ifdef _DIRENT_HAVE_D_TYPE
+ if (Ent->d_type != DT_REG)
+#endif
+ {
+ if (RealFileExists(File) == false)
+ {
+ if (Debug == true)
+ std::clog << "Bad file: " << Ent->d_name << " → it is not a real file" << std::endl;
+ continue;
+ }
+ }
+
+ // Skip bad filenames ala run-parts
+ const char *C = Ent->d_name;
+ for (; *C != 0; ++C)
+ if (isalpha(*C) == 0 && isdigit(*C) == 0
+ && *C != '_' && *C != '-' && *C != '.')
+ break;
+
+ // we don't reach the end of the name -> bad character included
+ if (*C != 0)
+ {
+ if (Debug == true)
+ std::clog << "Bad file: " << Ent->d_name << " → bad character »" << *C << "« in filename" << std::endl;
+ continue;
+ }
+
+ // skip filenames which end with a period. These are never valid
+ if (*(C - 1) == '.')
+ {
+ if (Debug == true)
+ std::clog << "Bad file: " << Ent->d_name << " → Period as last character" << std::endl;
+ continue;
+ }
+
+ if (Debug == true)
+ std::clog << "Accept file: " << Ent->d_name << " in " << Dir << std::endl;
+ List.push_back(File);
+ }
+ closedir(D);
+
+ if (SortList == true)
+ std::sort(List.begin(),List.end());
+ return List;
+}
+ /*}}}*/
+// SafeGetCWD - This is a safer getcwd that returns a dynamic string /*{{{*/
+// ---------------------------------------------------------------------
+/* We return / on failure. */
+string SafeGetCWD()
+{
+ // Stash the current dir.
+ char S[300];
+ S[0] = 0;
+ if (getcwd(S,sizeof(S)-2) == 0)
+ return "/";
+ unsigned int Len = strlen(S);
+ S[Len] = '/';
+ S[Len+1] = 0;
+ return S;
+}
+ /*}}}*/
+// GetModificationTime - Get the mtime of the given file or -1 on error /*{{{*/
+// ---------------------------------------------------------------------
+/* We return / on failure. */
+time_t GetModificationTime(string const &Path)
+{
+ struct stat St;
+ if (stat(Path.c_str(), &St) < 0)
+ return -1;
+ return St.st_mtime;
+}
+ /*}}}*/
+// flNotDir - Strip the directory from the filename /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string flNotDir(string File)
+{
+ string::size_type Res = File.rfind('/');
+ if (Res == string::npos)
+ return File;
+ Res++;
+ return string(File,Res,Res - File.length());
+}
+ /*}}}*/
+// flNotFile - Strip the file from the directory name /*{{{*/
+// ---------------------------------------------------------------------
+/* Result ends in a / */
+string flNotFile(string File)
+{
+ string::size_type Res = File.rfind('/');
+ if (Res == string::npos)
+ return "./";
+ Res++;
+ return string(File,0,Res);
+}
+ /*}}}*/
+// flExtension - Return the extension for the file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string flExtension(string File)
+{
+ string::size_type Res = File.rfind('.');
+ if (Res == string::npos)
+ return File;
+ Res++;
+ return string(File,Res,Res - File.length());
+}
+ /*}}}*/
+// flNoLink - If file is a symlink then deref it /*{{{*/
+// ---------------------------------------------------------------------
+/* If the name is not a link then the returned path is the input. */
+string flNoLink(string File)
+{
+ struct stat St;
+ if (lstat(File.c_str(),&St) != 0 || S_ISLNK(St.st_mode) == 0)
+ return File;
+ if (stat(File.c_str(),&St) != 0)
+ return File;
+
+ /* Loop resolving the link. There is no need to limit the number of
+ loops because the stat call above ensures that the symlink is not
+ circular */
+ char Buffer[1024];
+ string NFile = File;
+ while (1)
+ {
+ // Read the link
+ ssize_t Res;
+ if ((Res = readlink(NFile.c_str(),Buffer,sizeof(Buffer))) <= 0 ||
+ (size_t)Res >= sizeof(Buffer))
+ return File;
+
+ // Append or replace the previous path
+ Buffer[Res] = 0;
+ if (Buffer[0] == '/')
+ NFile = Buffer;
+ else
+ NFile = flNotFile(NFile) + Buffer;
+
+ // See if we are done
+ if (lstat(NFile.c_str(),&St) != 0)
+ return File;
+ if (S_ISLNK(St.st_mode) == 0)
+ return NFile;
+ }
+}
+ /*}}}*/
+// flCombine - Combine a file and a directory /*{{{*/
+// ---------------------------------------------------------------------
+/* If the file is an absolute path then it is just returned, otherwise
+ the directory is pre-pended to it. */
+string flCombine(string Dir,string File)
+{
+ if (File.empty() == true)
+ return string();
+
+ if (File[0] == '/' || Dir.empty() == true)
+ return File;
+ if (File.length() >= 2 && File[0] == '.' && File[1] == '/')
+ return File;
+ if (Dir[Dir.length()-1] == '/')
+ return Dir + File;
+ return Dir + '/' + File;
+}
+ /*}}}*/
+// flAbsPath - Return the absolute path of the filename /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string flAbsPath(string File)
+{
+ char *p = realpath(File.c_str(), NULL);
+ if (p == NULL)
+ {
+ _error->Errno("realpath", "flAbsPath on %s failed", File.c_str());
+ return "";
+ }
+ std::string AbsPath(p);
+ free(p);
+ return AbsPath;
+}
+ /*}}}*/
+std::string flNormalize(std::string file) /*{{{*/
+{
+ if (file.empty())
+ return file;
+ // do some normalisation by removing // and /./ from the path
+ size_t found = string::npos;
+ while ((found = file.find("/./")) != string::npos)
+ file.replace(found, 3, "/");
+ while ((found = file.find("//")) != string::npos)
+ file.replace(found, 2, "/");
+
+ if (APT::String::Startswith(file, "/dev/null"))
+ {
+ file.erase(strlen("/dev/null"));
+ return file;
+ }
+ return file;
+}
+ /*}}}*/
+// SetCloseExec - Set the close on exec flag /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void SetCloseExec(int Fd,bool Close)
+{
+ if (fcntl(Fd,F_SETFD,(Close == false)?0:FD_CLOEXEC) != 0)
+ {
+ cerr << "FATAL -> Could not set close on exec " << strerror(errno) << endl;
+ exit(100);
+ }
+}
+ /*}}}*/
+// SetNonBlock - Set the nonblocking flag /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void SetNonBlock(int Fd,bool Block)
+{
+ int Flags = fcntl(Fd,F_GETFL) & (~O_NONBLOCK);
+ if (fcntl(Fd,F_SETFL,Flags | ((Block == false)?0:O_NONBLOCK)) != 0)
+ {
+ cerr << "FATAL -> Could not set non-blocking flag " << strerror(errno) << endl;
+ exit(100);
+ }
+}
+ /*}}}*/
+// WaitFd - Wait for a FD to become readable /*{{{*/
+// ---------------------------------------------------------------------
+/* This waits for a FD to become readable using select. It is useful for
+ applications making use of non-blocking sockets. The timeout is
+ in seconds. */
+bool WaitFd(int Fd,bool write,unsigned long timeout)
+{
+ fd_set Set;
+ struct timeval tv;
+ FD_ZERO(&Set);
+ FD_SET(Fd,&Set);
+ tv.tv_sec = timeout;
+ tv.tv_usec = 0;
+ if (write == true)
+ {
+ int Res;
+ do
+ {
+ Res = select(Fd+1,0,&Set,0,(timeout != 0?&tv:0));
+ }
+ while (Res < 0 && errno == EINTR);
+
+ if (Res <= 0)
+ return false;
+ }
+ else
+ {
+ int Res;
+ do
+ {
+ Res = select(Fd+1,&Set,0,0,(timeout != 0?&tv:0));
+ }
+ while (Res < 0 && errno == EINTR);
+
+ if (Res <= 0)
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
+// MergeKeepFdsFromConfiguration - Merge APT::Keep-Fds configuration /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to merge the APT::Keep-Fds with the provided KeepFDs
+ * set.
+ */
+void MergeKeepFdsFromConfiguration(std::set<int> &KeepFDs)
+{
+ Configuration::Item const *Opts = _config->Tree("APT::Keep-Fds");
+ if (Opts != 0 && Opts->Child != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ int fd = atoi(Opts->Value.c_str());
+ KeepFDs.insert(fd);
+ }
+ }
+}
+ /*}}}*/
+// ExecFork - Magical fork that sanitizes the context before execing /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used if you want to cleanse the environment for the forked
+ child, it fixes up the important signals and nukes all of the fds,
+ otherwise acts like normal fork. */
+pid_t ExecFork()
+{
+ set<int> KeepFDs;
+ // we need to merge the Keep-Fds as external tools like
+ // debconf-apt-progress use it
+ MergeKeepFdsFromConfiguration(KeepFDs);
+ return ExecFork(KeepFDs);
+}
+
+pid_t ExecFork(std::set<int> KeepFDs)
+{
+ // Fork off the process
+ pid_t Process = fork();
+ if (Process < 0)
+ {
+ cerr << "FATAL -> Failed to fork." << endl;
+ exit(100);
+ }
+
+ // Spawn the subprocess
+ if (Process == 0)
+ {
+ // Setup the signals
+ signal(SIGPIPE,SIG_DFL);
+ signal(SIGQUIT,SIG_DFL);
+ signal(SIGINT,SIG_DFL);
+ signal(SIGWINCH,SIG_DFL);
+ signal(SIGCONT,SIG_DFL);
+ signal(SIGTSTP,SIG_DFL);
+
+ DIR *dir = opendir("/proc/self/fd");
+ if (dir != NULL)
+ {
+ struct dirent *ent;
+ while ((ent = readdir(dir)))
+ {
+ int fd = atoi(ent->d_name);
+ // If fd > 0, it was a fd number and not . or ..
+ if (fd >= 3 && KeepFDs.find(fd) == KeepFDs.end())
+ fcntl(fd,F_SETFD,FD_CLOEXEC);
+ }
+ closedir(dir);
+ } else {
+ long ScOpenMax = sysconf(_SC_OPEN_MAX);
+ // Close all of our FDs - just in case
+ for (int K = 3; K != ScOpenMax; K++)
+ {
+ if(KeepFDs.find(K) == KeepFDs.end())
+ fcntl(K,F_SETFD,FD_CLOEXEC);
+ }
+ }
+ }
+
+ return Process;
+}
+ /*}}}*/
+// ExecWait - Fancy waitpid /*{{{*/
+// ---------------------------------------------------------------------
+/* Waits for the given sub process. If Reap is set then no errors are
+ generated. Otherwise a failed subprocess will generate a proper descriptive
+ message */
+bool ExecWait(pid_t Pid,const char *Name,bool Reap)
+{
+ if (Pid <= 1)
+ return true;
+
+ // Wait and collect the error code
+ int Status;
+ while (waitpid(Pid,&Status,0) != Pid)
+ {
+ if (errno == EINTR)
+ continue;
+
+ if (Reap == true)
+ return false;
+
+ return _error->Error(_("Waited for %s but it wasn't there"),Name);
+ }
+
+
+ // Check for an error code.
+ if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
+ {
+ if (Reap == true)
+ return false;
+ if (WIFSIGNALED(Status) != 0)
+ {
+ if( WTERMSIG(Status) == SIGSEGV)
+ return _error->Error(_("Sub-process %s received a segmentation fault."),Name);
+ else
+ return _error->Error(_("Sub-process %s received signal %u."),Name, WTERMSIG(Status));
+ }
+
+ if (WIFEXITED(Status) != 0)
+ return _error->Error(_("Sub-process %s returned an error code (%u)"),Name,WEXITSTATUS(Status));
+
+ return _error->Error(_("Sub-process %s exited unexpectedly"),Name);
+ }
+
+ return true;
+}
+ /*}}}*/
+// StartsWithGPGClearTextSignature - Check if a file is Pgp/GPG clearsigned /*{{{*/
+bool StartsWithGPGClearTextSignature(string const &FileName)
+{
+ FILE* gpg = fopen(FileName.c_str(), "r");
+ if (gpg == nullptr)
+ return false;
+
+ char * lineptr = nullptr;
+ size_t n = 0;
+ errno = 0;
+ ssize_t const result = getline(&lineptr, &n, gpg);
+ if (errno != 0)
+ {
+ _error->Errno("getline", "Could not read from %s", FileName.c_str());
+ fclose(gpg);
+ free(lineptr);
+ return false;
+ }
+ fclose(gpg);
+
+ _strrstrip(lineptr);
+ static const char* SIGMSG = "-----BEGIN PGP SIGNED MESSAGE-----";
+ if (result == -1 || strcmp(lineptr, SIGMSG) != 0)
+ {
+ free(lineptr);
+ return false;
+ }
+ free(lineptr);
+ return true;
+}
+ /*}}}*/
+// ChangeOwnerAndPermissionOfFile - set file attributes to requested values /*{{{*/
+bool ChangeOwnerAndPermissionOfFile(char const * const requester, char const * const file, char const * const user, char const * const group, mode_t const mode)
+{
+ if (strcmp(file, "/dev/null") == 0)
+ return true;
+ bool Res = true;
+ if (getuid() == 0 && strlen(user) != 0 && strlen(group) != 0) // if we aren't root, we can't chown, so don't try it
+ {
+ // ensure the file is owned by root and has good permissions
+ struct passwd const * const pw = getpwnam(user);
+ struct group const * const gr = getgrnam(group);
+ if (pw != NULL && gr != NULL && lchown(file, pw->pw_uid, gr->gr_gid) != 0)
+ Res &= _error->WarningE(requester, "chown to %s:%s of file %s failed", user, group, file);
+ }
+ struct stat Buf;
+ if (lstat(file, &Buf) != 0 || S_ISLNK(Buf.st_mode))
+ return Res;
+ if (chmod(file, mode) != 0)
+ Res &= _error->WarningE(requester, "chmod 0%o of file %s failed", mode, file);
+ return Res;
+}
+ /*}}}*/
+
+struct APT_HIDDEN simple_buffer { /*{{{*/
+ size_t buffersize_max = 0;
+ unsigned long long bufferstart = 0;
+ unsigned long long bufferend = 0;
+ char *buffer = nullptr;
+
+ simple_buffer() {
+ reset(4096);
+ }
+ ~simple_buffer() {
+ delete[] buffer;
+ }
+
+ const char *get() const { return buffer + bufferstart; }
+ char *get() { return buffer + bufferstart; }
+ const char *getend() const { return buffer + bufferend; }
+ char *getend() { return buffer + bufferend; }
+ bool empty() const { return bufferend <= bufferstart; }
+ bool full() const { return bufferend == buffersize_max; }
+ unsigned long long free() const { return buffersize_max - bufferend; }
+ unsigned long long size() const { return bufferend-bufferstart; }
+ void reset(size_t size)
+ {
+ if (size > buffersize_max) {
+ delete[] buffer;
+ buffersize_max = size;
+ buffer = new char[size];
+ }
+ reset();
+ }
+ void reset() { bufferend = bufferstart = 0; }
+ ssize_t read(void *to, unsigned long long requested_size) APT_MUSTCHECK
+ {
+ if (size() < requested_size)
+ requested_size = size();
+ memcpy(to, buffer + bufferstart, requested_size);
+ bufferstart += requested_size;
+ if (bufferstart == bufferend)
+ bufferstart = bufferend = 0;
+ return requested_size;
+ }
+ ssize_t write(const void *from, unsigned long long requested_size) APT_MUSTCHECK
+ {
+ if (free() < requested_size)
+ requested_size = free();
+ memcpy(getend(), from, requested_size);
+ bufferend += requested_size;
+ if (bufferstart == bufferend)
+ bufferstart = bufferend = 0;
+ return requested_size;
+ }
+};
+ /*}}}*/
+
+class APT_HIDDEN FileFdPrivate { /*{{{*/
+ friend class BufferedWriteFileFdPrivate;
+protected:
+ FileFd * const filefd;
+ simple_buffer buffer;
+ int compressed_fd;
+ pid_t compressor_pid;
+ bool is_pipe;
+ APT::Configuration::Compressor compressor;
+ unsigned int openmode;
+ unsigned long long seekpos;
+public:
+
+ explicit FileFdPrivate(FileFd * const pfilefd) : filefd(pfilefd),
+ compressed_fd(-1), compressor_pid(-1), is_pipe(false),
+ openmode(0), seekpos(0) {};
+ virtual APT::Configuration::Compressor get_compressor() const
+ {
+ return compressor;
+ }
+ virtual void set_compressor(APT::Configuration::Compressor const &compressor)
+ {
+ this->compressor = compressor;
+ }
+ virtual unsigned int get_openmode() const
+ {
+ return openmode;
+ }
+ virtual void set_openmode(unsigned int openmode)
+ {
+ this->openmode = openmode;
+ }
+ virtual bool get_is_pipe() const
+ {
+ return is_pipe;
+ }
+ virtual void set_is_pipe(bool is_pipe)
+ {
+ this->is_pipe = is_pipe;
+ }
+ virtual unsigned long long get_seekpos() const
+ {
+ return seekpos;
+ }
+ virtual void set_seekpos(unsigned long long seekpos)
+ {
+ this->seekpos = seekpos;
+ }
+
+ virtual bool InternalOpen(int const iFd, unsigned int const Mode) = 0;
+ ssize_t InternalRead(void * To, unsigned long long Size)
+ {
+ // Drain the buffer if needed.
+ if (buffer.empty() == false)
+ {
+ return buffer.read(To, Size);
+ }
+ return InternalUnbufferedRead(To, Size);
+ }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) = 0;
+ virtual bool InternalReadError() { return filefd->FileFdErrno("read",_("Read error")); }
+ virtual char * InternalReadLine(char * To, unsigned long long Size)
+ {
+ if (unlikely(Size == 0))
+ return nullptr;
+ // Read one byte less than buffer size to have space for trailing 0.
+ --Size;
+
+ char * const InitialTo = To;
+
+ while (Size > 0) {
+ if (buffer.empty() == true)
+ {
+ buffer.reset();
+ unsigned long long actualread = 0;
+ if (filefd->Read(buffer.getend(), buffer.free(), &actualread) == false)
+ return nullptr;
+ buffer.bufferend = actualread;
+ if (buffer.size() == 0)
+ {
+ if (To == InitialTo)
+ return nullptr;
+ break;
+ }
+ filefd->Flags &= ~FileFd::HitEof;
+ }
+
+ unsigned long long const OutputSize = std::min(Size, buffer.size());
+ char const * const newline = static_cast<char const *>(memchr(buffer.get(), '\n', OutputSize));
+ // Read until end of line or up to Size bytes from the buffer.
+ unsigned long long actualread = buffer.read(To,
+ (newline != nullptr)
+ ? (newline - buffer.get()) + 1
+ : OutputSize);
+ To += actualread;
+ Size -= actualread;
+ if (newline != nullptr)
+ break;
+ }
+ *To = '\0';
+ return InitialTo;
+ }
+ virtual bool InternalFlush()
+ {
+ return true;
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) = 0;
+ virtual bool InternalWriteError() { return filefd->FileFdErrno("write",_("Write error")); }
+ virtual bool InternalSeek(unsigned long long const To)
+ {
+ // Our poor man seeking is costly, so try to avoid it
+ unsigned long long const iseekpos = filefd->Tell();
+ if (iseekpos == To)
+ return true;
+ else if (iseekpos < To)
+ return filefd->Skip(To - iseekpos);
+
+ if ((openmode & FileFd::ReadOnly) != FileFd::ReadOnly)
+ return filefd->FileFdError("Reopen is only implemented for read-only files!");
+ InternalClose(filefd->FileName);
+ if (filefd->iFd != -1)
+ close(filefd->iFd);
+ filefd->iFd = -1;
+ if (filefd->TemporaryFileName.empty() == false)
+ filefd->iFd = open(filefd->TemporaryFileName.c_str(), O_RDONLY);
+ else if (filefd->FileName.empty() == false)
+ filefd->iFd = open(filefd->FileName.c_str(), O_RDONLY);
+ else
+ {
+ if (compressed_fd > 0)
+ if (lseek(compressed_fd, 0, SEEK_SET) != 0)
+ filefd->iFd = compressed_fd;
+ if (filefd->iFd < 0)
+ return filefd->FileFdError("Reopen is not implemented for pipes opened with FileFd::OpenDescriptor()!");
+ }
+
+ if (filefd->OpenInternDescriptor(openmode, compressor) == false)
+ return filefd->FileFdError("Seek on file %s because it couldn't be reopened", filefd->FileName.c_str());
+
+ buffer.reset();
+ set_seekpos(0);
+ if (To != 0)
+ return filefd->Skip(To);
+
+ seekpos = To;
+ return true;
+ }
+ virtual bool InternalSkip(unsigned long long Over)
+ {
+ unsigned long long constexpr buffersize = 1024;
+ char buffer[buffersize];
+ while (Over != 0)
+ {
+ unsigned long long toread = std::min(buffersize, Over);
+ if (filefd->Read(buffer, toread) == false)
+ return filefd->FileFdError("Unable to seek ahead %llu",Over);
+ Over -= toread;
+ }
+ return true;
+ }
+ virtual bool InternalTruncate(unsigned long long const)
+ {
+ return filefd->FileFdError("Truncating compressed files is not implemented (%s)", filefd->FileName.c_str());
+ }
+ virtual unsigned long long InternalTell()
+ {
+ // In theory, we could just return seekpos here always instead of
+ // seeking around, but not all users of FileFd use always Seek() and co
+ // so d->seekpos isn't always true and we can just use it as a hint if
+ // we have nothing else, but not always as an authority…
+ return seekpos - buffer.size();
+ }
+ virtual unsigned long long InternalSize()
+ {
+ unsigned long long size = 0;
+ unsigned long long const oldSeek = filefd->Tell();
+ unsigned long long constexpr ignoresize = 1024;
+ char ignore[ignoresize];
+ unsigned long long read = 0;
+ do {
+ if (filefd->Read(ignore, ignoresize, &read) == false)
+ {
+ filefd->Seek(oldSeek);
+ return 0;
+ }
+ } while(read != 0);
+ size = filefd->Tell();
+ filefd->Seek(oldSeek);
+ return size;
+ }
+ virtual bool InternalClose(std::string const &FileName) = 0;
+ virtual bool InternalStream() const { return false; }
+ virtual bool InternalAlwaysAutoClose() const { return true; }
+
+ virtual ~FileFdPrivate() {}
+};
+ /*}}}*/
+class APT_HIDDEN BufferedWriteFileFdPrivate : public FileFdPrivate { /*{{{*/
+protected:
+ FileFdPrivate *wrapped;
+ simple_buffer writebuffer;
+
+public:
+
+ explicit BufferedWriteFileFdPrivate(FileFdPrivate *Priv) :
+ FileFdPrivate(Priv->filefd), wrapped(Priv) {};
+
+ virtual APT::Configuration::Compressor get_compressor() const APT_OVERRIDE
+ {
+ return wrapped->get_compressor();
+ }
+ virtual void set_compressor(APT::Configuration::Compressor const &compressor) APT_OVERRIDE
+ {
+ return wrapped->set_compressor(compressor);
+ }
+ virtual unsigned int get_openmode() const APT_OVERRIDE
+ {
+ return wrapped->get_openmode();
+ }
+ virtual void set_openmode(unsigned int openmode) APT_OVERRIDE
+ {
+ return wrapped->set_openmode(openmode);
+ }
+ virtual bool get_is_pipe() const APT_OVERRIDE
+ {
+ return wrapped->get_is_pipe();
+ }
+ virtual void set_is_pipe(bool is_pipe) APT_OVERRIDE
+ {
+ FileFdPrivate::set_is_pipe(is_pipe);
+ wrapped->set_is_pipe(is_pipe);
+ }
+ virtual unsigned long long get_seekpos() const APT_OVERRIDE
+ {
+ return wrapped->get_seekpos();
+ }
+ virtual void set_seekpos(unsigned long long seekpos) APT_OVERRIDE
+ {
+ return wrapped->set_seekpos(seekpos);
+ }
+ virtual bool InternalOpen(int const iFd, unsigned int const Mode) APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return false;
+ return wrapped->InternalOpen(iFd, Mode);
+ }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return -1;
+ return wrapped->InternalUnbufferedRead(To, Size);
+
+ }
+ virtual bool InternalReadError() APT_OVERRIDE
+ {
+ return wrapped->InternalReadError();
+ }
+ virtual char * InternalReadLine(char * To, unsigned long long Size) APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return nullptr;
+ return wrapped->InternalReadLine(To, Size);
+ }
+ virtual bool InternalFlush() APT_OVERRIDE
+ {
+ while (writebuffer.empty() == false) {
+ auto written = wrapped->InternalWrite(writebuffer.get(),
+ writebuffer.size());
+ // Ignore interrupted syscalls
+ if (written < 0 && errno == EINTR)
+ continue;
+ if (written < 0)
+ return wrapped->InternalWriteError();
+
+ writebuffer.bufferstart += written;
+ }
+ writebuffer.reset();
+ return wrapped->InternalFlush();
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ // Optimisation: If the buffer is empty and we have more to write than
+ // would fit in the buffer (or equal number of bytes), write directly.
+ if (writebuffer.empty() == true && Size >= writebuffer.free())
+ return wrapped->InternalWrite(From, Size);
+
+ // Write as much into the buffer as possible and then flush if needed
+ auto written = writebuffer.write(From, Size);
+
+ if (writebuffer.full() && InternalFlush() == false)
+ return -1;
+
+ return written;
+ }
+ virtual bool InternalWriteError() APT_OVERRIDE
+ {
+ return wrapped->InternalWriteError();
+ }
+ virtual bool InternalSeek(unsigned long long const To) APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return false;
+ return wrapped->InternalSeek(To);
+ }
+ virtual bool InternalSkip(unsigned long long Over) APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return false;
+ return wrapped->InternalSkip(Over);
+ }
+ virtual bool InternalTruncate(unsigned long long const Size) APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return false;
+ return wrapped->InternalTruncate(Size);
+ }
+ virtual unsigned long long InternalTell() APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return -1;
+ return wrapped->InternalTell();
+ }
+ virtual unsigned long long InternalSize() APT_OVERRIDE
+ {
+ if (InternalFlush() == false)
+ return -1;
+ return wrapped->InternalSize();
+ }
+ virtual bool InternalClose(std::string const &FileName) APT_OVERRIDE
+ {
+ return wrapped->InternalClose(FileName);
+ }
+ virtual bool InternalAlwaysAutoClose() const APT_OVERRIDE
+ {
+ return wrapped->InternalAlwaysAutoClose();
+ }
+ virtual ~BufferedWriteFileFdPrivate()
+ {
+ delete wrapped;
+ }
+};
+ /*}}}*/
+class APT_HIDDEN GzipFileFdPrivate: public FileFdPrivate { /*{{{*/
+#ifdef HAVE_ZLIB
+public:
+ gzFile gz;
+ virtual bool InternalOpen(int const iFd, unsigned int const Mode) APT_OVERRIDE
+ {
+ if ((Mode & FileFd::ReadWrite) == FileFd::ReadWrite)
+ gz = gzdopen(iFd, "r+");
+ else if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly)
+ gz = gzdopen(iFd, "w");
+ else
+ gz = gzdopen(iFd, "r");
+ filefd->Flags |= FileFd::Compressed;
+ return gz != nullptr;
+ }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ return gzread(gz, To, Size);
+ }
+ virtual bool InternalReadError() APT_OVERRIDE
+ {
+ int err;
+ char const * const errmsg = gzerror(gz, &err);
+ if (err != Z_ERRNO)
+ return filefd->FileFdError("gzread: %s (%d: %s)", _("Read error"), err, errmsg);
+ return FileFdPrivate::InternalReadError();
+ }
+ virtual char * InternalReadLine(char * To, unsigned long long Size) APT_OVERRIDE
+ {
+ return gzgets(gz, To, Size);
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ return gzwrite(gz,From,Size);
+ }
+ virtual bool InternalWriteError() APT_OVERRIDE
+ {
+ int err;
+ char const * const errmsg = gzerror(gz, &err);
+ if (err != Z_ERRNO)
+ return filefd->FileFdError("gzwrite: %s (%d: %s)", _("Write error"), err, errmsg);
+ return FileFdPrivate::InternalWriteError();
+ }
+ virtual bool InternalSeek(unsigned long long const To) APT_OVERRIDE
+ {
+ off_t const res = gzseek(gz, To, SEEK_SET);
+ if (res != (off_t)To)
+ return filefd->FileFdError("Unable to seek to %llu", To);
+ seekpos = To;
+ buffer.reset();
+ return true;
+ }
+ virtual bool InternalSkip(unsigned long long Over) APT_OVERRIDE
+ {
+ if (Over >= buffer.size())
+ {
+ Over -= buffer.size();
+ buffer.reset();
+ }
+ else
+ {
+ buffer.bufferstart += Over;
+ return true;
+ }
+ if (Over == 0)
+ return true;
+ off_t const res = gzseek(gz, Over, SEEK_CUR);
+ if (res < 0)
+ return filefd->FileFdError("Unable to seek ahead %llu",Over);
+ seekpos = res;
+ return true;
+ }
+ virtual unsigned long long InternalTell() APT_OVERRIDE
+ {
+ return gztell(gz) - buffer.size();
+ }
+ virtual unsigned long long InternalSize() APT_OVERRIDE
+ {
+ unsigned long long filesize = FileFdPrivate::InternalSize();
+ // only check gzsize if we are actually a gzip file, just checking for
+ // "gz" is not sufficient as uncompressed files could be opened with
+ // gzopen in "direct" mode as well
+ if (filesize == 0 || gzdirect(gz))
+ return filesize;
+
+ off_t const oldPos = lseek(filefd->iFd, 0, SEEK_CUR);
+ /* unfortunately zlib.h doesn't provide a gzsize(), so we have to do
+ * this ourselves; the original (uncompressed) file size is the last 32
+ * bits of the file */
+ // FIXME: Size for gz-files is limited by 32bit… no largefile support
+ if (lseek(filefd->iFd, -4, SEEK_END) < 0)
+ {
+ filefd->FileFdErrno("lseek","Unable to seek to end of gzipped file");
+ return 0;
+ }
+ uint32_t size = 0;
+ if (read(filefd->iFd, &size, 4) != 4)
+ {
+ filefd->FileFdErrno("read","Unable to read original size of gzipped file");
+ return 0;
+ }
+ size = le32toh(size);
+
+ if (lseek(filefd->iFd, oldPos, SEEK_SET) < 0)
+ {
+ filefd->FileFdErrno("lseek","Unable to seek in gzipped file");
+ return 0;
+ }
+ return size;
+ }
+ virtual bool InternalClose(std::string const &FileName) APT_OVERRIDE
+ {
+ if (gz == nullptr)
+ return true;
+ int const e = gzclose(gz);
+ gz = nullptr;
+ // gzdclose() on empty files always fails with "buffer error" here, ignore that
+ if (e != 0 && e != Z_BUF_ERROR)
+ return _error->Errno("close",_("Problem closing the gzip file %s"), FileName.c_str());
+ return true;
+ }
+
+ explicit GzipFileFdPrivate(FileFd * const filefd) : FileFdPrivate(filefd), gz(nullptr) {}
+ virtual ~GzipFileFdPrivate() { InternalClose(""); }
+#endif
+};
+ /*}}}*/
+class APT_HIDDEN Bz2FileFdPrivate: public FileFdPrivate { /*{{{*/
+#ifdef HAVE_BZ2
+ BZFILE* bz2;
+public:
+ virtual bool InternalOpen(int const iFd, unsigned int const Mode) APT_OVERRIDE
+ {
+ if ((Mode & FileFd::ReadWrite) == FileFd::ReadWrite)
+ bz2 = BZ2_bzdopen(iFd, "r+");
+ else if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly)
+ bz2 = BZ2_bzdopen(iFd, "w");
+ else
+ bz2 = BZ2_bzdopen(iFd, "r");
+ filefd->Flags |= FileFd::Compressed;
+ return bz2 != nullptr;
+ }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ return BZ2_bzread(bz2, To, Size);
+ }
+ virtual bool InternalReadError() APT_OVERRIDE
+ {
+ int err;
+ char const * const errmsg = BZ2_bzerror(bz2, &err);
+ if (err != BZ_IO_ERROR)
+ return filefd->FileFdError("BZ2_bzread: %s %s (%d: %s)", filefd->FileName.c_str(), _("Read error"), err, errmsg);
+ return FileFdPrivate::InternalReadError();
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ return BZ2_bzwrite(bz2, (void*)From, Size);
+ }
+ virtual bool InternalWriteError() APT_OVERRIDE
+ {
+ int err;
+ char const * const errmsg = BZ2_bzerror(bz2, &err);
+ if (err != BZ_IO_ERROR)
+ return filefd->FileFdError("BZ2_bzwrite: %s %s (%d: %s)", filefd->FileName.c_str(), _("Write error"), err, errmsg);
+ return FileFdPrivate::InternalWriteError();
+ }
+ virtual bool InternalStream() const APT_OVERRIDE { return true; }
+ virtual bool InternalClose(std::string const &) APT_OVERRIDE
+ {
+ if (bz2 == nullptr)
+ return true;
+ BZ2_bzclose(bz2);
+ bz2 = nullptr;
+ return true;
+ }
+
+ explicit Bz2FileFdPrivate(FileFd * const filefd) : FileFdPrivate(filefd), bz2(nullptr) {}
+ virtual ~Bz2FileFdPrivate() { InternalClose(""); }
+#endif
+};
+ /*}}}*/
+class APT_HIDDEN Lz4FileFdPrivate: public FileFdPrivate { /*{{{*/
+ static constexpr unsigned long long LZ4_HEADER_SIZE = 19;
+ static constexpr unsigned long long LZ4_FOOTER_SIZE = 4;
+#ifdef HAVE_LZ4
+ LZ4F_decompressionContext_t dctx;
+ LZ4F_compressionContext_t cctx;
+ LZ4F_errorCode_t res;
+ FileFd backend;
+ simple_buffer lz4_buffer;
+ // Count of bytes that the decompressor expects to read next, or buffer size.
+ size_t next_to_load = APT_BUFFER_SIZE;
+public:
+ virtual bool InternalOpen(int const iFd, unsigned int const Mode) APT_OVERRIDE
+ {
+ if ((Mode & FileFd::ReadWrite) == FileFd::ReadWrite)
+ return _error->Error("lz4 only supports write or read mode");
+
+ if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly) {
+ res = LZ4F_createCompressionContext(&cctx, LZ4F_VERSION);
+ lz4_buffer.reset(LZ4F_compressBound(APT_BUFFER_SIZE, nullptr)
+ + LZ4_HEADER_SIZE + LZ4_FOOTER_SIZE);
+ } else {
+ res = LZ4F_createDecompressionContext(&dctx, LZ4F_VERSION);
+ lz4_buffer.reset(APT_BUFFER_SIZE);
+ }
+
+ filefd->Flags |= FileFd::Compressed;
+
+ if (LZ4F_isError(res))
+ return false;
+
+ unsigned int flags = (Mode & (FileFd::WriteOnly|FileFd::ReadOnly));
+ if (backend.OpenDescriptor(iFd, flags, FileFd::None, true) == false)
+ return false;
+
+ // Write the file header
+ if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly)
+ {
+ res = LZ4F_compressBegin(cctx, lz4_buffer.buffer, lz4_buffer.buffersize_max, nullptr);
+ if (LZ4F_isError(res) || backend.Write(lz4_buffer.buffer, res) == false)
+ return false;
+ }
+
+ return true;
+ }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ /* Keep reading as long as the compressor still wants to read */
+ while (next_to_load) {
+ // Fill compressed buffer;
+ if (lz4_buffer.empty()) {
+ unsigned long long read;
+ /* Reset - if LZ4 decompressor wants to read more, allocate more */
+ lz4_buffer.reset(next_to_load);
+ if (backend.Read(lz4_buffer.getend(), lz4_buffer.free(), &read) == false)
+ return -1;
+ lz4_buffer.bufferend += read;
+
+ /* Expected EOF */
+ if (read == 0) {
+ res = -1;
+ return filefd->FileFdError("LZ4F: %s %s",
+ filefd->FileName.c_str(),
+ _("Unexpected end of file")), -1;
+ }
+ }
+ // Drain compressed buffer as far as possible.
+ size_t in = lz4_buffer.size();
+ size_t out = Size;
+
+ res = LZ4F_decompress(dctx, To, &out, lz4_buffer.get(), &in, nullptr);
+ if (LZ4F_isError(res))
+ return -1;
+
+ next_to_load = res;
+ lz4_buffer.bufferstart += in;
+
+ if (out != 0)
+ return out;
+ }
+
+ return 0;
+ }
+ virtual bool InternalReadError() APT_OVERRIDE
+ {
+ char const * const errmsg = LZ4F_getErrorName(res);
+
+ return filefd->FileFdError("LZ4F: %s %s (%zu: %s)", filefd->FileName.c_str(), _("Read error"), res, errmsg);
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ unsigned long long const towrite = std::min(APT_BUFFER_SIZE, Size);
+
+ res = LZ4F_compressUpdate(cctx,
+ lz4_buffer.buffer, lz4_buffer.buffersize_max,
+ From, towrite, nullptr);
+
+ if (LZ4F_isError(res) || backend.Write(lz4_buffer.buffer, res) == false)
+ return -1;
+
+ return towrite;
+ }
+ virtual bool InternalWriteError() APT_OVERRIDE
+ {
+ char const * const errmsg = LZ4F_getErrorName(res);
+
+ return filefd->FileFdError("LZ4F: %s %s (%zu: %s)", filefd->FileName.c_str(), _("Write error"), res, errmsg);
+ }
+ virtual bool InternalStream() const APT_OVERRIDE { return true; }
+
+ virtual bool InternalFlush() APT_OVERRIDE
+ {
+ return backend.Flush();
+ }
+
+ virtual bool InternalClose(std::string const &) APT_OVERRIDE
+ {
+ /* Reset variables */
+ res = 0;
+ next_to_load = APT_BUFFER_SIZE;
+
+ if (cctx != nullptr)
+ {
+ if (filefd->Failed() == false)
+ {
+ res = LZ4F_compressEnd(cctx, lz4_buffer.buffer, lz4_buffer.buffersize_max, nullptr);
+ if (LZ4F_isError(res) || backend.Write(lz4_buffer.buffer, res) == false)
+ return false;
+ if (!backend.Flush())
+ return false;
+ }
+ if (!backend.Close())
+ return false;
+
+ res = LZ4F_freeCompressionContext(cctx);
+ cctx = nullptr;
+ }
+
+ if (dctx != nullptr)
+ {
+ res = LZ4F_freeDecompressionContext(dctx);
+ dctx = nullptr;
+ }
+ if (backend.IsOpen())
+ {
+ backend.Close();
+ filefd->iFd = -1;
+ }
+
+ return LZ4F_isError(res) == false;
+ }
+
+ explicit Lz4FileFdPrivate(FileFd * const filefd) : FileFdPrivate(filefd), dctx(nullptr), cctx(nullptr) {}
+ virtual ~Lz4FileFdPrivate() {
+ InternalClose("");
+ }
+#endif
+};
+ /*}}}*/
+
+class APT_HIDDEN ZstdFileFdPrivate : public FileFdPrivate
+{ /*{{{*/
+#ifdef HAVE_ZSTD
+ ZSTD_DStream *dctx;
+ ZSTD_CStream *cctx;
+ size_t res;
+ FileFd backend;
+ simple_buffer zstd_buffer;
+ // Count of bytes that the decompressor expects to read next, or buffer size.
+ size_t next_to_load = APT_BUFFER_SIZE;
+
+ public:
+ virtual bool InternalOpen(int const iFd, unsigned int const Mode) APT_OVERRIDE
+ {
+ if ((Mode & FileFd::ReadWrite) == FileFd::ReadWrite)
+ return _error->Error("zstd only supports write or read mode");
+
+ if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly)
+ {
+ cctx = ZSTD_createCStream();
+ res = ZSTD_initCStream(cctx, findLevel(compressor.CompressArgs));
+ zstd_buffer.reset(APT_BUFFER_SIZE);
+ }
+ else
+ {
+ dctx = ZSTD_createDStream();
+ res = ZSTD_initDStream(dctx);
+ zstd_buffer.reset(APT_BUFFER_SIZE);
+ }
+
+ filefd->Flags |= FileFd::Compressed;
+
+ if (ZSTD_isError(res))
+ return false;
+
+ unsigned int flags = (Mode & (FileFd::WriteOnly | FileFd::ReadOnly));
+ if (backend.OpenDescriptor(iFd, flags, FileFd::None, true) == false)
+ return false;
+
+ return true;
+ }
+ virtual ssize_t InternalUnbufferedRead(void *const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ /* Keep reading as long as the compressor still wants to read */
+ while (true)
+ {
+ // Fill compressed buffer;
+ if (zstd_buffer.empty())
+ {
+ unsigned long long read;
+ /* Reset - if LZ4 decompressor wants to read more, allocate more */
+ zstd_buffer.reset(next_to_load);
+ if (backend.Read(zstd_buffer.getend(), zstd_buffer.free(), &read) == false)
+ return -1;
+ zstd_buffer.bufferend += read;
+
+ if (read == 0)
+ {
+ /* Expected EOF */
+ if (next_to_load == 0)
+ return 0;
+
+ res = -1;
+ return filefd->FileFdError("ZSTD: %s %s",
+ filefd->FileName.c_str(),
+ _("Unexpected end of file")),
+ -1;
+ }
+ }
+ // Drain compressed buffer as far as possible.
+ ZSTD_inBuffer in = {
+ .src = zstd_buffer.get(),
+ .size = zstd_buffer.size(),
+ .pos = 0,
+ };
+ ZSTD_outBuffer out = {
+ .dst = To,
+ .size = Size,
+ .pos = 0,
+ };
+
+ next_to_load = res = ZSTD_decompressStream(dctx, &out, &in);
+
+ if (res == 0)
+ {
+ res = ZSTD_initDStream(dctx);
+ }
+
+ if (ZSTD_isError(res))
+ return -1;
+
+ zstd_buffer.bufferstart += in.pos;
+
+ if (out.pos != 0)
+ return out.pos;
+ }
+
+ return 0;
+ }
+ virtual bool InternalReadError() APT_OVERRIDE
+ {
+ char const *const errmsg = ZSTD_getErrorName(res);
+
+ return filefd->FileFdError("ZSTD: %s %s (%zu: %s)", filefd->FileName.c_str(), _("Read error"), res, errmsg);
+ }
+ virtual ssize_t InternalWrite(void const *const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ // Drain compressed buffer as far as possible.
+ ZSTD_outBuffer out = {
+ .dst = zstd_buffer.buffer,
+ .size = zstd_buffer.buffersize_max,
+ .pos = 0,
+ };
+ ZSTD_inBuffer in = {
+ .src = From,
+ .size = Size,
+ .pos = 0,
+ };
+
+ res = ZSTD_compressStream(cctx, &out, &in);
+
+ if (ZSTD_isError(res) || backend.Write(zstd_buffer.buffer, out.pos) == false)
+ return -1;
+
+ return in.pos;
+ }
+
+ virtual bool InternalWriteError() APT_OVERRIDE
+ {
+ char const *const errmsg = ZSTD_getErrorName(res);
+
+ return filefd->FileFdError("ZSTD: %s %s (%zu: %s)", filefd->FileName.c_str(), _("Write error"), res, errmsg);
+ }
+ virtual bool InternalStream() const APT_OVERRIDE { return true; }
+
+ virtual bool InternalFlush() APT_OVERRIDE
+ {
+ return backend.Flush();
+ }
+
+ virtual bool InternalClose(std::string const &) APT_OVERRIDE
+ {
+ /* Reset variables */
+ res = 0;
+ next_to_load = APT_BUFFER_SIZE;
+
+ if (cctx != nullptr)
+ {
+ if (filefd->Failed() == false)
+ {
+ do
+ {
+ ZSTD_outBuffer out = {
+ .dst = zstd_buffer.buffer,
+ .size = zstd_buffer.buffersize_max,
+ .pos = 0,
+ };
+ res = ZSTD_endStream(cctx, &out);
+ if (ZSTD_isError(res) || backend.Write(zstd_buffer.buffer, out.pos) == false)
+ return false;
+ } while (res > 0);
+
+ if (!backend.Flush())
+ return false;
+ }
+ if (!backend.Close())
+ return false;
+
+ res = ZSTD_freeCStream(cctx);
+ cctx = nullptr;
+ }
+
+ if (dctx != nullptr)
+ {
+ res = ZSTD_freeDStream(dctx);
+ dctx = nullptr;
+ }
+ if (backend.IsOpen())
+ {
+ backend.Close();
+ filefd->iFd = -1;
+ }
+
+ return ZSTD_isError(res) == false;
+ }
+
+ static uint32_t findLevel(std::vector<std::string> const &Args)
+ {
+ for (auto a = Args.rbegin(); a != Args.rend(); ++a)
+ {
+ if (a->size() >= 2 && (*a)[0] == '-' && (*a)[1] != '-')
+ {
+ auto const level = a->substr(1);
+ auto const notANumber = level.find_first_not_of("0123456789");
+ if (notANumber != std::string::npos)
+ continue;
+
+ return (uint32_t)stoi(level);
+ }
+ }
+ return 19;
+ }
+
+ explicit ZstdFileFdPrivate(FileFd *const filefd) : FileFdPrivate(filefd), dctx(nullptr), cctx(nullptr) {}
+ virtual ~ZstdFileFdPrivate()
+ {
+ InternalClose("");
+ }
+#endif
+};
+ /*}}}*/
+class APT_HIDDEN LzmaFileFdPrivate: public FileFdPrivate { /*{{{*/
+#ifdef HAVE_LZMA
+ struct LZMAFILE {
+ FILE* file;
+ FileFd * const filefd;
+ uint8_t buffer[4096];
+ lzma_stream stream;
+ lzma_ret err;
+ bool eof;
+ bool compressing;
+
+ LZMAFILE(FileFd * const fd) : file(nullptr), filefd(fd), eof(false), compressing(false) { buffer[0] = '\0'; }
+ ~LZMAFILE()
+ {
+ if (compressing == true && filefd->Failed() == false)
+ {
+ size_t constexpr buffersize = sizeof(buffer)/sizeof(buffer[0]);
+ while(true)
+ {
+ stream.avail_out = buffersize;
+ stream.next_out = buffer;
+ err = lzma_code(&stream, LZMA_FINISH);
+ if (err != LZMA_OK && err != LZMA_STREAM_END)
+ {
+ _error->Error("~LZMAFILE: Compress finalisation failed");
+ break;
+ }
+ size_t const n = buffersize - stream.avail_out;
+ if (n && fwrite(buffer, 1, n, file) != n)
+ {
+ _error->Errno("~LZMAFILE",_("Write error"));
+ break;
+ }
+ if (err == LZMA_STREAM_END)
+ break;
+ }
+ }
+ lzma_end(&stream);
+ fclose(file);
+ }
+ };
+ LZMAFILE* lzma;
+ static uint32_t findXZlevel(std::vector<std::string> const &Args)
+ {
+ for (auto a = Args.rbegin(); a != Args.rend(); ++a)
+ if (a->empty() == false && (*a)[0] == '-' && (*a)[1] != '-')
+ {
+ auto const number = a->find_last_of("0123456789");
+ if (number == std::string::npos)
+ continue;
+ auto const extreme = a->find("e", number);
+ uint32_t level = (extreme != std::string::npos) ? LZMA_PRESET_EXTREME : 0;
+ switch ((*a)[number])
+ {
+ case '0': return level | 0;
+ case '1': return level | 1;
+ case '2': return level | 2;
+ case '3': return level | 3;
+ case '4': return level | 4;
+ case '5': return level | 5;
+ case '6': return level | 6;
+ case '7': return level | 7;
+ case '8': return level | 8;
+ case '9': return level | 9;
+ }
+ }
+ return 6;
+ }
+public:
+ virtual bool InternalOpen(int const iFd, unsigned int const Mode) APT_OVERRIDE
+ {
+ if ((Mode & FileFd::ReadWrite) == FileFd::ReadWrite)
+ return filefd->FileFdError("ReadWrite mode is not supported for lzma/xz files %s", filefd->FileName.c_str());
+
+ if (lzma == nullptr)
+ lzma = new LzmaFileFdPrivate::LZMAFILE(filefd);
+ if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly)
+ lzma->file = fdopen(iFd, "w");
+ else
+ lzma->file = fdopen(iFd, "r");
+ filefd->Flags |= FileFd::Compressed;
+ if (lzma->file == nullptr)
+ return false;
+
+ lzma_stream tmp_stream = LZMA_STREAM_INIT;
+ lzma->stream = tmp_stream;
+
+ if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly)
+ {
+ uint32_t const xzlevel = findXZlevel(compressor.CompressArgs);
+ if (compressor.Name == "xz")
+ {
+ if (lzma_easy_encoder(&lzma->stream, xzlevel, LZMA_CHECK_CRC64) != LZMA_OK)
+ return false;
+ }
+ else
+ {
+ lzma_options_lzma options;
+ lzma_lzma_preset(&options, xzlevel);
+ if (lzma_alone_encoder(&lzma->stream, &options) != LZMA_OK)
+ return false;
+ }
+ lzma->compressing = true;
+ }
+ else
+ {
+ uint64_t const memlimit = UINT64_MAX;
+ if (compressor.Name == "xz")
+ {
+ if (lzma_auto_decoder(&lzma->stream, memlimit, 0) != LZMA_OK)
+ return false;
+ }
+ else
+ {
+ if (lzma_alone_decoder(&lzma->stream, memlimit) != LZMA_OK)
+ return false;
+ }
+ lzma->compressing = false;
+ }
+ return true;
+ }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ ssize_t Res;
+ if (lzma->eof == true)
+ return 0;
+
+ lzma->stream.next_out = (uint8_t *) To;
+ lzma->stream.avail_out = Size;
+ if (lzma->stream.avail_in == 0)
+ {
+ lzma->stream.next_in = lzma->buffer;
+ lzma->stream.avail_in = fread(lzma->buffer, 1, sizeof(lzma->buffer)/sizeof(lzma->buffer[0]), lzma->file);
+ }
+ lzma->err = lzma_code(&lzma->stream, LZMA_RUN);
+ if (lzma->err == LZMA_STREAM_END)
+ {
+ lzma->eof = true;
+ Res = Size - lzma->stream.avail_out;
+ }
+ else if (lzma->err != LZMA_OK)
+ {
+ Res = -1;
+ errno = 0;
+ }
+ else
+ {
+ Res = Size - lzma->stream.avail_out;
+ if (Res == 0)
+ {
+ // lzma run was okay, but produced no output…
+ Res = -1;
+ errno = EINTR;
+ }
+ }
+ return Res;
+ }
+ virtual bool InternalReadError() APT_OVERRIDE
+ {
+ return filefd->FileFdError("lzma_read: %s (%d)", _("Read error"), lzma->err);
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ ssize_t Res;
+ lzma->stream.next_in = (uint8_t *)From;
+ lzma->stream.avail_in = Size;
+ lzma->stream.next_out = lzma->buffer;
+ lzma->stream.avail_out = sizeof(lzma->buffer)/sizeof(lzma->buffer[0]);
+ lzma->err = lzma_code(&lzma->stream, LZMA_RUN);
+ if (lzma->err != LZMA_OK)
+ return -1;
+ size_t const n = sizeof(lzma->buffer)/sizeof(lzma->buffer[0]) - lzma->stream.avail_out;
+ size_t const m = (n == 0) ? 0 : fwrite(lzma->buffer, 1, n, lzma->file);
+ if (m != n)
+ {
+ Res = -1;
+ errno = 0;
+ }
+ else
+ {
+ Res = Size - lzma->stream.avail_in;
+ if (Res == 0)
+ {
+ // lzma run was okay, but produced no output…
+ Res = -1;
+ errno = EINTR;
+ }
+ }
+ return Res;
+ }
+ virtual bool InternalWriteError() APT_OVERRIDE
+ {
+ return filefd->FileFdError("lzma_write: %s (%d)", _("Write error"), lzma->err);
+ }
+ virtual bool InternalStream() const APT_OVERRIDE { return true; }
+ virtual bool InternalClose(std::string const &) APT_OVERRIDE
+ {
+ delete lzma;
+ lzma = nullptr;
+ return true;
+ }
+
+ explicit LzmaFileFdPrivate(FileFd * const filefd) : FileFdPrivate(filefd), lzma(nullptr) {}
+ virtual ~LzmaFileFdPrivate() { InternalClose(""); }
+#endif
+};
+ /*}}}*/
+class APT_HIDDEN PipedFileFdPrivate: public FileFdPrivate /*{{{*/
+/* if we don't have a specific class dealing with library calls, we (un)compress
+ by executing a specified binary and pipe in/out what we need */
+{
+public:
+ virtual bool InternalOpen(int const, unsigned int const Mode) APT_OVERRIDE
+ {
+ // collect zombies here in case we reopen
+ if (compressor_pid > 0)
+ ExecWait(compressor_pid, "FileFdCompressor", true);
+
+ if ((Mode & FileFd::ReadWrite) == FileFd::ReadWrite)
+ return filefd->FileFdError("ReadWrite mode is not supported for file %s", filefd->FileName.c_str());
+ if (compressor.Binary == "false")
+ return filefd->FileFdError("libapt has inbuilt support for the %s compression,"
+ " but was forced to ignore it in favor of an external binary – which isn't installed.", compressor.Name.c_str());
+
+ bool const Comp = (Mode & FileFd::WriteOnly) == FileFd::WriteOnly;
+ if (Comp == false && filefd->iFd != -1)
+ {
+ // Handle 'decompression' of empty files
+ struct stat Buf;
+ if (fstat(filefd->iFd, &Buf) != 0)
+ return filefd->FileFdErrno("fstat", "Could not stat fd %d for file %s", filefd->iFd, filefd->FileName.c_str());
+ if (Buf.st_size == 0 && S_ISFIFO(Buf.st_mode) == false)
+ return true;
+
+ // We don't need the file open - instead let the compressor open it
+ // as he properly knows better how to efficiently read from 'his' file
+ if (filefd->FileName.empty() == false)
+ {
+ close(filefd->iFd);
+ filefd->iFd = -1;
+ }
+ }
+
+ // Create a data pipe
+ int Pipe[2] = {-1,-1};
+ if (pipe(Pipe) != 0)
+ return filefd->FileFdErrno("pipe",_("Failed to create subprocess IPC"));
+ for (int J = 0; J != 2; J++)
+ SetCloseExec(Pipe[J],true);
+
+ compressed_fd = filefd->iFd;
+ set_is_pipe(true);
+
+ if (Comp == true)
+ filefd->iFd = Pipe[1];
+ else
+ filefd->iFd = Pipe[0];
+
+ // The child..
+ compressor_pid = ExecFork();
+ if (compressor_pid == 0)
+ {
+ if (Comp == true)
+ {
+ dup2(compressed_fd,STDOUT_FILENO);
+ dup2(Pipe[0],STDIN_FILENO);
+ }
+ else
+ {
+ if (compressed_fd != -1)
+ dup2(compressed_fd,STDIN_FILENO);
+ dup2(Pipe[1],STDOUT_FILENO);
+ }
+ int const nullfd = open("/dev/null", O_WRONLY);
+ if (nullfd != -1)
+ {
+ dup2(nullfd,STDERR_FILENO);
+ close(nullfd);
+ }
+
+ SetCloseExec(STDOUT_FILENO,false);
+ SetCloseExec(STDIN_FILENO,false);
+
+ std::vector<char const*> Args;
+ Args.push_back(compressor.Binary.c_str());
+ std::vector<std::string> const * const addArgs =
+ (Comp == true) ? &(compressor.CompressArgs) : &(compressor.UncompressArgs);
+ for (std::vector<std::string>::const_iterator a = addArgs->begin();
+ a != addArgs->end(); ++a)
+ Args.push_back(a->c_str());
+ if (Comp == false && filefd->FileName.empty() == false)
+ {
+ // commands not needing arguments, do not need to be told about using standard output
+ // in reality, only testcases with tools like cat, rev, rot13, … are able to trigger this
+ if (compressor.CompressArgs.empty() == false && compressor.UncompressArgs.empty() == false)
+ Args.push_back("--stdout");
+ if (filefd->TemporaryFileName.empty() == false)
+ Args.push_back(filefd->TemporaryFileName.c_str());
+ else
+ Args.push_back(filefd->FileName.c_str());
+ }
+ Args.push_back(NULL);
+
+ execvp(Args[0],(char **)&Args[0]);
+ cerr << _("Failed to exec compressor ") << Args[0] << endl;
+ _exit(100);
+ }
+ if (Comp == true)
+ close(Pipe[0]);
+ else
+ close(Pipe[1]);
+
+ return true;
+ }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ return read(filefd->iFd, To, Size);
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ return write(filefd->iFd, From, Size);
+ }
+ virtual bool InternalClose(std::string const &) APT_OVERRIDE
+ {
+ bool Ret = true;
+ if (filefd->iFd != -1)
+ {
+ close(filefd->iFd);
+ filefd->iFd = -1;
+ }
+ if (compressor_pid > 0)
+ Ret &= ExecWait(compressor_pid, "FileFdCompressor", true);
+ compressor_pid = -1;
+ return Ret;
+ }
+ explicit PipedFileFdPrivate(FileFd * const filefd) : FileFdPrivate(filefd) {}
+ virtual ~PipedFileFdPrivate() { InternalClose(""); }
+};
+ /*}}}*/
+class APT_HIDDEN DirectFileFdPrivate: public FileFdPrivate /*{{{*/
+{
+public:
+ virtual bool InternalOpen(int const, unsigned int const) APT_OVERRIDE { return true; }
+ virtual ssize_t InternalUnbufferedRead(void * const To, unsigned long long const Size) APT_OVERRIDE
+ {
+ return read(filefd->iFd, To, Size);
+ }
+ virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) APT_OVERRIDE
+ {
+ // files opened read+write are strange and only really "supported" for direct files
+ if (buffer.size() != 0)
+ {
+ lseek(filefd->iFd, -buffer.size(), SEEK_CUR);
+ buffer.reset();
+ }
+ return write(filefd->iFd, From, Size);
+ }
+ virtual bool InternalSeek(unsigned long long const To) APT_OVERRIDE
+ {
+ off_t const res = lseek(filefd->iFd, To, SEEK_SET);
+ if (res != (off_t)To)
+ return filefd->FileFdError("Unable to seek to %llu", To);
+ seekpos = To;
+ buffer.reset();
+ return true;
+ }
+ virtual bool InternalSkip(unsigned long long Over) APT_OVERRIDE
+ {
+ if (Over >= buffer.size())
+ {
+ Over -= buffer.size();
+ buffer.reset();
+ }
+ else
+ {
+ buffer.bufferstart += Over;
+ return true;
+ }
+ if (Over == 0)
+ return true;
+ off_t const res = lseek(filefd->iFd, Over, SEEK_CUR);
+ if (res < 0)
+ return filefd->FileFdError("Unable to seek ahead %llu",Over);
+ seekpos = res;
+ return true;
+ }
+ virtual bool InternalTruncate(unsigned long long const To) APT_OVERRIDE
+ {
+ if (buffer.size() != 0)
+ {
+ unsigned long long const seekpos = lseek(filefd->iFd, 0, SEEK_CUR);
+ if ((seekpos - buffer.size()) >= To)
+ buffer.reset();
+ else if (seekpos >= To)
+ buffer.bufferend = (To - seekpos) + buffer.bufferstart;
+ else
+ buffer.reset();
+ }
+ if (ftruncate(filefd->iFd, To) != 0)
+ return filefd->FileFdError("Unable to truncate to %llu",To);
+ return true;
+ }
+ virtual unsigned long long InternalTell() APT_OVERRIDE
+ {
+ return lseek(filefd->iFd,0,SEEK_CUR) - buffer.size();
+ }
+ virtual unsigned long long InternalSize() APT_OVERRIDE
+ {
+ return filefd->FileSize();
+ }
+ virtual bool InternalClose(std::string const &) APT_OVERRIDE { return true; }
+ virtual bool InternalAlwaysAutoClose() const APT_OVERRIDE { return false; }
+
+ explicit DirectFileFdPrivate(FileFd * const filefd) : FileFdPrivate(filefd) {}
+ virtual ~DirectFileFdPrivate() { InternalClose(""); }
+};
+ /*}}}*/
+// FileFd Constructors /*{{{*/
+FileFd::FileFd(std::string FileName,unsigned int const Mode,unsigned long AccessMode) : iFd(-1), Flags(0), d(NULL)
+{
+ Open(FileName,Mode, None, AccessMode);
+}
+FileFd::FileFd(std::string FileName,unsigned int const Mode, CompressMode Compress, unsigned long AccessMode) : iFd(-1), Flags(0), d(NULL)
+{
+ Open(FileName,Mode, Compress, AccessMode);
+}
+FileFd::FileFd() : iFd(-1), Flags(AutoClose), d(NULL) {}
+FileFd::FileFd(int const Fd, unsigned int const Mode, CompressMode Compress) : iFd(-1), Flags(0), d(NULL)
+{
+ OpenDescriptor(Fd, Mode, Compress);
+}
+FileFd::FileFd(int const Fd, bool const AutoClose) : iFd(-1), Flags(0), d(NULL)
+{
+ OpenDescriptor(Fd, ReadWrite, None, AutoClose);
+}
+ /*}}}*/
+// FileFd::Open - Open a file /*{{{*/
+// ---------------------------------------------------------------------
+/* The most commonly used open mode combinations are given with Mode */
+bool FileFd::Open(string FileName,unsigned int const Mode,CompressMode Compress, unsigned long const AccessMode)
+{
+ if (Mode == ReadOnlyGzip)
+ return Open(FileName, ReadOnly, Gzip, AccessMode);
+
+ if (Compress == Auto && (Mode & WriteOnly) == WriteOnly)
+ return FileFdError("Autodetection on %s only works in ReadOnly openmode!", FileName.c_str());
+
+ std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+ std::vector<APT::Configuration::Compressor>::const_iterator compressor = compressors.begin();
+ if (Compress == Auto)
+ {
+ for (; compressor != compressors.end(); ++compressor)
+ {
+ std::string file = FileName + compressor->Extension;
+ if (FileExists(file) == false)
+ continue;
+ FileName = file;
+ break;
+ }
+ }
+ else if (Compress == Extension)
+ {
+ std::string::size_type const found = FileName.find_last_of('.');
+ std::string ext;
+ if (found != std::string::npos)
+ {
+ ext = FileName.substr(found);
+ if (ext == ".new" || ext == ".bak")
+ {
+ std::string::size_type const found2 = FileName.find_last_of('.', found - 1);
+ if (found2 != std::string::npos)
+ ext = FileName.substr(found2, found - found2);
+ else
+ ext.clear();
+ }
+ }
+ for (; compressor != compressors.end(); ++compressor)
+ if (ext == compressor->Extension)
+ break;
+ // no matching extension - assume uncompressed (imagine files like 'example.org_Packages')
+ if (compressor == compressors.end())
+ for (compressor = compressors.begin(); compressor != compressors.end(); ++compressor)
+ if (compressor->Name == ".")
+ break;
+ }
+ else
+ {
+ std::string name;
+ switch (Compress)
+ {
+ case None: name = "."; break;
+ case Gzip: name = "gzip"; break;
+ case Bzip2: name = "bzip2"; break;
+ case Lzma: name = "lzma"; break;
+ case Xz: name = "xz"; break;
+ case Lz4: name = "lz4"; break;
+ case Zstd: name = "zstd"; break;
+ case Auto:
+ case Extension:
+ // Unreachable
+ return FileFdError("Opening File %s in None, Auto or Extension should be already handled?!?", FileName.c_str());
+ }
+ for (; compressor != compressors.end(); ++compressor)
+ if (compressor->Name == name)
+ break;
+ if (compressor == compressors.end())
+ return FileFdError("Can't find a configured compressor %s for file %s", name.c_str(), FileName.c_str());
+ }
+
+ if (compressor == compressors.end())
+ return FileFdError("Can't find a match for specified compressor mode for file %s", FileName.c_str());
+ return Open(FileName, Mode, *compressor, AccessMode);
+}
+bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor, unsigned long const AccessMode)
+{
+ Close();
+ Flags = AutoClose;
+
+ if ((Mode & WriteOnly) != WriteOnly && (Mode & (Atomic | Create | Empty | Exclusive)) != 0)
+ return FileFdError("ReadOnly mode for %s doesn't accept additional flags!", FileName.c_str());
+ if ((Mode & ReadWrite) == 0)
+ return FileFdError("No openmode provided in FileFd::Open for %s", FileName.c_str());
+
+ unsigned int OpenMode = Mode;
+ if (FileName == "/dev/null")
+ OpenMode = OpenMode & ~(Atomic | Exclusive | Create | Empty);
+
+ if ((OpenMode & Atomic) == Atomic)
+ {
+ Flags |= Replace;
+ }
+ else if ((OpenMode & (Exclusive | Create)) == (Exclusive | Create))
+ {
+ // for atomic, this will be done by rename in Close()
+ RemoveFile("FileFd::Open", FileName);
+ }
+ if ((OpenMode & Empty) == Empty)
+ {
+ struct stat Buf;
+ if (lstat(FileName.c_str(),&Buf) == 0 && S_ISLNK(Buf.st_mode))
+ RemoveFile("FileFd::Open", FileName);
+ }
+
+ int fileflags = 0;
+ #define if_FLAGGED_SET(FLAG, MODE) if ((OpenMode & FLAG) == FLAG) fileflags |= MODE
+ if_FLAGGED_SET(ReadWrite, O_RDWR);
+ else if_FLAGGED_SET(ReadOnly, O_RDONLY);
+ else if_FLAGGED_SET(WriteOnly, O_WRONLY);
+
+ if_FLAGGED_SET(Create, O_CREAT);
+ if_FLAGGED_SET(Empty, O_TRUNC);
+ if_FLAGGED_SET(Exclusive, O_EXCL);
+ #undef if_FLAGGED_SET
+
+ if ((OpenMode & Atomic) == Atomic)
+ {
+ char *name = strdup((FileName + ".XXXXXX").c_str());
+
+ if((iFd = mkstemp(name)) == -1)
+ {
+ free(name);
+ return FileFdErrno("mkstemp", "Could not create temporary file for %s", FileName.c_str());
+ }
+
+ TemporaryFileName = string(name);
+ free(name);
+
+ // umask() will always set the umask and return the previous value, so
+ // we first set the umask and then reset it to the old value
+ mode_t const CurrentUmask = umask(0);
+ umask(CurrentUmask);
+ // calculate the actual file permissions (just like open/creat)
+ mode_t const FilePermissions = (AccessMode & ~CurrentUmask);
+
+ if(fchmod(iFd, FilePermissions) == -1)
+ return FileFdErrno("fchmod", "Could not change permissions for temporary file %s", TemporaryFileName.c_str());
+ }
+ else
+ iFd = open(FileName.c_str(), fileflags, AccessMode);
+
+ this->FileName = FileName;
+ if (iFd == -1 || OpenInternDescriptor(OpenMode, compressor) == false)
+ {
+ if (iFd != -1)
+ {
+ close (iFd);
+ iFd = -1;
+ }
+ return FileFdErrno("open",_("Could not open file %s"), FileName.c_str());
+ }
+
+ SetCloseExec(iFd,true);
+ return true;
+}
+ /*}}}*/
+// FileFd::OpenDescriptor - Open a filedescriptor /*{{{*/
+bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, CompressMode Compress, bool AutoClose)
+{
+ std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+ std::vector<APT::Configuration::Compressor>::const_iterator compressor = compressors.begin();
+ std::string name;
+
+ // compat with the old API
+ if (Mode == ReadOnlyGzip && Compress == None)
+ Compress = Gzip;
+
+ switch (Compress)
+ {
+ case None: name = "."; break;
+ case Gzip: name = "gzip"; break;
+ case Bzip2: name = "bzip2"; break;
+ case Lzma: name = "lzma"; break;
+ case Xz: name = "xz"; break;
+ case Lz4: name = "lz4"; break;
+ case Zstd: name = "zstd"; break;
+ case Auto:
+ case Extension:
+ if (AutoClose == true && Fd != -1)
+ close(Fd);
+ return FileFdError("Opening Fd %d in Auto or Extension compression mode is not supported", Fd);
+ }
+ for (; compressor != compressors.end(); ++compressor)
+ if (compressor->Name == name)
+ break;
+ if (compressor == compressors.end())
+ {
+ if (AutoClose == true && Fd != -1)
+ close(Fd);
+ return FileFdError("Can't find a configured compressor %s for file %s", name.c_str(), FileName.c_str());
+ }
+ return OpenDescriptor(Fd, Mode, *compressor, AutoClose);
+}
+bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration::Compressor const &compressor, bool AutoClose)
+{
+ Close();
+ Flags = (AutoClose) ? FileFd::AutoClose : 0;
+ iFd = Fd;
+ this->FileName = "";
+ if (OpenInternDescriptor(Mode, compressor) == false)
+ {
+ if (iFd != -1 && (
+ (Flags & Compressed) == Compressed ||
+ AutoClose == true))
+ {
+ close (iFd);
+ iFd = -1;
+ }
+ return FileFdError(_("Could not open file descriptor %d"), Fd);
+ }
+ return true;
+}
+bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::Compressor const &compressor)
+{
+ if (iFd == -1)
+ return false;
+
+ if (d != nullptr)
+ d->InternalClose(FileName);
+
+ if (d == nullptr)
+ {
+ if (false)
+ /* dummy so that the rest can be 'else if's */;
+#define APT_COMPRESS_INIT(NAME, CONSTRUCTOR) \
+ else if (compressor.Name == NAME) \
+ d = new CONSTRUCTOR(this)
+#ifdef HAVE_ZLIB
+ APT_COMPRESS_INIT("gzip", GzipFileFdPrivate);
+#endif
+#ifdef HAVE_BZ2
+ APT_COMPRESS_INIT("bzip2", Bz2FileFdPrivate);
+#endif
+#ifdef HAVE_LZMA
+ APT_COMPRESS_INIT("xz", LzmaFileFdPrivate);
+ APT_COMPRESS_INIT("lzma", LzmaFileFdPrivate);
+#endif
+#ifdef HAVE_LZ4
+ APT_COMPRESS_INIT("lz4", Lz4FileFdPrivate);
+#endif
+#ifdef HAVE_ZSTD
+ APT_COMPRESS_INIT("zstd", ZstdFileFdPrivate);
+#endif
+#undef APT_COMPRESS_INIT
+ else if (compressor.Name == "." || compressor.Binary.empty() == true)
+ d = new DirectFileFdPrivate(this);
+ else
+ d = new PipedFileFdPrivate(this);
+
+ if (Mode & BufferedWrite)
+ d = new BufferedWriteFileFdPrivate(d);
+
+ d->set_openmode(Mode);
+ d->set_compressor(compressor);
+ if ((Flags & AutoClose) != AutoClose && d->InternalAlwaysAutoClose())
+ {
+ // Need to duplicate fd here or gz/bz2 close for cleanup will close the fd as well
+ int const internFd = dup(iFd);
+ if (internFd == -1)
+ return FileFdErrno("OpenInternDescriptor", _("Could not open file descriptor %d"), iFd);
+ iFd = internFd;
+ }
+ }
+ return d->InternalOpen(iFd, Mode);
+}
+ /*}}}*/
+// FileFd::~File - Closes the file /*{{{*/
+// ---------------------------------------------------------------------
+/* If the proper modes are selected then we close the Fd and possibly
+ unlink the file on error. */
+FileFd::~FileFd()
+{
+ Close();
+ if (d != NULL)
+ d->InternalClose(FileName);
+ delete d;
+ d = NULL;
+}
+ /*}}}*/
+// FileFd::Read - Read a bit of the file /*{{{*/
+// ---------------------------------------------------------------------
+/* We are careful to handle interruption by a signal while reading
+ gracefully. */
+bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual)
+{
+ if (d == nullptr || Failed())
+ return false;
+ ssize_t Res = 1;
+ errno = 0;
+ if (Actual != 0)
+ *Actual = 0;
+ *((char *)To) = '\0';
+ while (Res > 0 && Size > 0)
+ {
+ Res = d->InternalRead(To, Size);
+
+ if (Res < 0)
+ {
+ if (errno == EINTR)
+ {
+ // trick the while-loop into running again
+ Res = 1;
+ errno = 0;
+ continue;
+ }
+ return d->InternalReadError();
+ }
+
+ To = (char *)To + Res;
+ Size -= Res;
+ if (d != NULL)
+ d->set_seekpos(d->get_seekpos() + Res);
+ if (Actual != 0)
+ *Actual += Res;
+ }
+
+ if (Size == 0)
+ return true;
+
+ // Eof handling
+ if (Actual != 0)
+ {
+ Flags |= HitEof;
+ return true;
+ }
+
+ return FileFdError(_("read, still have %llu to read but none left"), Size);
+}
+bool FileFd::Read(int const Fd, void *To, unsigned long long Size, unsigned long long * const Actual)
+{
+ ssize_t Res = 1;
+ errno = 0;
+ if (Actual != nullptr)
+ *Actual = 0;
+ *static_cast<char *>(To) = '\0';
+ while (Res > 0 && Size > 0)
+ {
+ Res = read(Fd, To, Size);
+ if (Res < 0)
+ {
+ if (errno == EINTR)
+ {
+ Res = 1;
+ errno = 0;
+ continue;
+ }
+ return _error->Errno("read", _("Read error"));
+ }
+ To = static_cast<char *>(To) + Res;
+ Size -= Res;
+ if (Actual != 0)
+ *Actual += Res;
+ }
+ if (Size == 0)
+ return true;
+ if (Actual != nullptr)
+ return true;
+ return _error->Error(_("read, still have %llu to read but none left"), Size);
+}
+ /*}}}*/
+// FileFd::ReadLine - Read a complete line from the file /*{{{*/
+char* FileFd::ReadLine(char *To, unsigned long long const Size)
+{
+ *To = '\0';
+ if (d == nullptr || Failed())
+ return nullptr;
+ return d->InternalReadLine(To, Size);
+}
+bool FileFd::ReadLine(std::string &To)
+{
+ To.clear();
+ if (d == nullptr || Failed())
+ return false;
+ constexpr size_t buflen = 4096;
+ char buffer[buflen];
+ size_t len;
+ do
+ {
+ if (d->InternalReadLine(buffer, buflen) == nullptr)
+ return false;
+ len = strlen(buffer);
+ To.append(buffer, len);
+ } while (len == buflen - 1 && buffer[len - 2] != '\n');
+ // remove the newline at the end
+ auto const i = To.find_last_not_of("\r\n");
+ if (i == std::string::npos)
+ To.clear();
+ else
+ To.erase(i + 1);
+ return true;
+}
+ /*}}}*/
+// FileFd::Flush - Flush the file /*{{{*/
+bool FileFd::Flush()
+{
+ if (Failed())
+ return false;
+ if (d == nullptr)
+ return true;
+
+ return d->InternalFlush();
+}
+ /*}}}*/
+// FileFd::Write - Write to the file /*{{{*/
+bool FileFd::Write(const void *From,unsigned long long Size)
+{
+ if (d == nullptr || Failed())
+ return false;
+ ssize_t Res = 1;
+ errno = 0;
+ while (Res > 0 && Size > 0)
+ {
+ Res = d->InternalWrite(From, Size);
+
+ if (Res < 0)
+ {
+ if (errno == EINTR)
+ {
+ // trick the while-loop into running again
+ Res = 1;
+ errno = 0;
+ continue;
+ }
+ return d->InternalWriteError();
+ }
+
+ From = (char const *)From + Res;
+ Size -= Res;
+ if (d != NULL)
+ d->set_seekpos(d->get_seekpos() + Res);
+ }
+
+ if (Size == 0)
+ return true;
+
+ return FileFdError(_("write, still have %llu to write but couldn't"), Size);
+}
+bool FileFd::Write(int Fd, const void *From, unsigned long long Size)
+{
+ ssize_t Res = 1;
+ errno = 0;
+ while (Res > 0 && Size > 0)
+ {
+ Res = write(Fd,From,Size);
+ if (Res < 0 && errno == EINTR)
+ continue;
+ if (Res < 0)
+ return _error->Errno("write",_("Write error"));
+
+ From = (char const *)From + Res;
+ Size -= Res;
+ }
+
+ if (Size == 0)
+ return true;
+
+ return _error->Error(_("write, still have %llu to write but couldn't"), Size);
+}
+ /*}}}*/
+// FileFd::Seek - Seek in the file /*{{{*/
+bool FileFd::Seek(unsigned long long To)
+{
+ if (d == nullptr || Failed())
+ return false;
+ Flags &= ~HitEof;
+ return d->InternalSeek(To);
+}
+ /*}}}*/
+// FileFd::Skip - Skip over data in the file /*{{{*/
+bool FileFd::Skip(unsigned long long Over)
+{
+ if (d == nullptr || Failed())
+ return false;
+ return d->InternalSkip(Over);
+}
+ /*}}}*/
+// FileFd::Truncate - Truncate the file /*{{{*/
+bool FileFd::Truncate(unsigned long long To)
+{
+ if (d == nullptr || Failed())
+ return false;
+ // truncating /dev/null is always successful - as we get an error otherwise
+ if (To == 0 && FileName == "/dev/null")
+ return true;
+ return d->InternalTruncate(To);
+}
+ /*}}}*/
+// FileFd::Tell - Current seek position /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned long long FileFd::Tell()
+{
+ if (d == nullptr || Failed())
+ return false;
+ off_t const Res = d->InternalTell();
+ if (Res == (off_t)-1)
+ FileFdErrno("lseek","Failed to determine the current file position");
+ d->set_seekpos(Res);
+ return Res;
+}
+ /*}}}*/
+static bool StatFileFd(char const * const msg, int const iFd, std::string const &FileName, struct stat &Buf, FileFdPrivate * const d) /*{{{*/
+{
+ bool ispipe = (d != NULL && d->get_is_pipe() == true);
+ if (ispipe == false)
+ {
+ if (fstat(iFd,&Buf) != 0)
+ // higher-level code will generate more meaningful messages,
+ // even translated this would be meaningless for users
+ return _error->Errno("fstat", "Unable to determine %s for fd %i", msg, iFd);
+ if (FileName.empty() == false)
+ ispipe = S_ISFIFO(Buf.st_mode);
+ }
+
+ // for compressor pipes st_size is undefined and at 'best' zero
+ if (ispipe == true)
+ {
+ // we set it here, too, as we get the info here for free
+ // in theory the Open-methods should take care of it already
+ if (d != NULL)
+ d->set_is_pipe(true);
+ if (stat(FileName.c_str(), &Buf) != 0)
+ return _error->Errno("fstat", "Unable to determine %s for file %s", msg, FileName.c_str());
+ }
+ return true;
+}
+ /*}}}*/
+// FileFd::FileSize - Return the size of the file /*{{{*/
+unsigned long long FileFd::FileSize()
+{
+ struct stat Buf;
+ if (StatFileFd("file size", iFd, FileName, Buf, d) == false)
+ {
+ Flags |= Fail;
+ return 0;
+ }
+ return Buf.st_size;
+}
+ /*}}}*/
+// FileFd::ModificationTime - Return the time of last touch /*{{{*/
+time_t FileFd::ModificationTime()
+{
+ struct stat Buf;
+ if (StatFileFd("modification time", iFd, FileName, Buf, d) == false)
+ {
+ Flags |= Fail;
+ return 0;
+ }
+ return Buf.st_mtime;
+}
+ /*}}}*/
+// FileFd::Size - Return the size of the content in the file /*{{{*/
+unsigned long long FileFd::Size()
+{
+ if (d == nullptr)
+ return 0;
+ return d->InternalSize();
+}
+ /*}}}*/
+// FileFd::Close - Close the file if the close flag is set /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FileFd::Close()
+{
+ if (Failed() == false && Flush() == false)
+ return false;
+ if (iFd == -1)
+ return true;
+
+ bool Res = true;
+ if ((Flags & AutoClose) == AutoClose)
+ {
+ if ((Flags & Compressed) != Compressed && iFd > 0 && close(iFd) != 0)
+ Res &= _error->Errno("close",_("Problem closing the file %s"), FileName.c_str());
+ }
+
+ if (d != NULL)
+ {
+ Res &= d->InternalClose(FileName);
+ delete d;
+ d = NULL;
+ }
+
+ if ((Flags & Replace) == Replace) {
+ if (Failed() == false && rename(TemporaryFileName.c_str(), FileName.c_str()) != 0)
+ Res &= _error->Errno("rename",_("Problem renaming the file %s to %s"), TemporaryFileName.c_str(), FileName.c_str());
+
+ FileName = TemporaryFileName; // for the unlink() below.
+ TemporaryFileName.clear();
+ }
+
+ iFd = -1;
+
+ if ((Flags & Fail) == Fail && (Flags & DelOnFail) == DelOnFail &&
+ FileName.empty() == false)
+ Res &= RemoveFile("FileFd::Close", FileName);
+
+ if (Res == false)
+ Flags |= Fail;
+ return Res;
+}
+ /*}}}*/
+// FileFd::Sync - Sync the file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FileFd::Sync()
+{
+ if (fsync(iFd) != 0)
+ return FileFdErrno("sync",_("Problem syncing the file"));
+ return true;
+}
+ /*}}}*/
+// FileFd::FileFdErrno - set Fail and call _error->Errno *{{{*/
+bool FileFd::FileFdErrno(const char *Function, const char *Description,...)
+{
+ Flags |= Fail;
+ va_list args;
+ size_t msgSize = 400;
+ int const errsv = errno;
+ bool retry;
+ do {
+ va_start(args,Description);
+ retry = _error->InsertErrno(GlobalError::ERROR, Function, Description, args, errsv, msgSize);
+ va_end(args);
+ } while (retry);
+ return false;
+}
+ /*}}}*/
+// FileFd::FileFdError - set Fail and call _error->Error *{{{*/
+bool FileFd::FileFdError(const char *Description,...) {
+ Flags |= Fail;
+ va_list args;
+ size_t msgSize = 400;
+ bool retry;
+ do {
+ va_start(args,Description);
+ retry = _error->Insert(GlobalError::ERROR, Description, args, msgSize);
+ va_end(args);
+ } while (retry);
+ return false;
+}
+ /*}}}*/
+gzFile FileFd::gzFd() { /*{{{*/
+#ifdef HAVE_ZLIB
+ GzipFileFdPrivate * const gzipd = dynamic_cast<GzipFileFdPrivate*>(d);
+ if (gzipd == nullptr)
+ return nullptr;
+ else
+ return gzipd->gz;
+#else
+ return nullptr;
+#endif
+}
+ /*}}}*/
+
+// Glob - wrapper around "glob()" /*{{{*/
+std::vector<std::string> Glob(std::string const &pattern, int flags)
+{
+ std::vector<std::string> result;
+ glob_t globbuf;
+ int glob_res;
+ unsigned int i;
+
+ glob_res = glob(pattern.c_str(), flags, NULL, &globbuf);
+
+ if (glob_res != 0)
+ {
+ if(glob_res != GLOB_NOMATCH) {
+ _error->Errno("glob", "Problem with glob");
+ return result;
+ }
+ }
+
+ // append results
+ for(i=0;i<globbuf.gl_pathc;i++)
+ result.push_back(string(globbuf.gl_pathv[i]));
+
+ globfree(&globbuf);
+ return result;
+}
+ /*}}}*/
+static std::string APT_NONNULL(1) GetTempDirEnv(char const * const env) /*{{{*/
+{
+ const char *tmpdir = getenv(env);
+
+#ifdef P_tmpdir
+ if (!tmpdir)
+ tmpdir = P_tmpdir;
+#endif
+
+ struct stat st;
+ if (!tmpdir || strlen(tmpdir) == 0 || // tmpdir is set
+ stat(tmpdir, &st) != 0 || (st.st_mode & S_IFDIR) == 0) // exists and is directory
+ tmpdir = "/tmp";
+ else if (geteuid() != 0 && // root can do everything anyway
+ faccessat(AT_FDCWD, tmpdir, R_OK | W_OK | X_OK, AT_EACCESS) != 0) // current user has rwx access to directory
+ tmpdir = "/tmp";
+
+ return string(tmpdir);
+}
+ /*}}}*/
+std::string GetTempDir() /*{{{*/
+{
+ return GetTempDirEnv("TMPDIR");
+}
+std::string GetTempDir(std::string const &User)
+{
+ // no need/possibility to drop privs
+ if(getuid() != 0 || User.empty() || User == "root")
+ return GetTempDir();
+
+ struct passwd const * const pw = getpwnam(User.c_str());
+ if (pw == NULL)
+ return GetTempDir();
+
+ gid_t const old_euid = geteuid();
+ gid_t const old_egid = getegid();
+ if (setegid(pw->pw_gid) != 0)
+ _error->Errno("setegid", "setegid %u failed", pw->pw_gid);
+ if (seteuid(pw->pw_uid) != 0)
+ _error->Errno("seteuid", "seteuid %u failed", pw->pw_uid);
+
+ std::string const tmp = GetTempDir();
+
+ if (seteuid(old_euid) != 0)
+ _error->Errno("seteuid", "seteuid %u failed", old_euid);
+ if (setegid(old_egid) != 0)
+ _error->Errno("setegid", "setegid %u failed", old_egid);
+
+ return tmp;
+}
+ /*}}}*/
+FileFd* GetTempFile(std::string const &Prefix, bool ImmediateUnlink, FileFd * const TmpFd) /*{{{*/
+{
+ return GetTempFile(Prefix, ImmediateUnlink, TmpFd, false);
+}
+FileFd* GetTempFile(std::string const &Prefix, bool ImmediateUnlink, FileFd * const TmpFd, bool Buffered)
+{
+ char fn[512];
+ FileFd * const Fd = TmpFd == nullptr ? new FileFd() : TmpFd;
+
+ std::string const tempdir = GetTempDir();
+ snprintf(fn, sizeof(fn), "%s/%s.XXXXXX",
+ tempdir.c_str(), Prefix.c_str());
+ int const fd = mkstemp(fn);
+ if (ImmediateUnlink)
+ unlink(fn);
+ if (fd < 0)
+ {
+ _error->Errno("GetTempFile",_("Unable to mkstemp %s"), fn);
+ if (TmpFd == nullptr)
+ delete Fd;
+ return nullptr;
+ }
+ if (!Fd->OpenDescriptor(fd, FileFd::ReadWrite | (Buffered ? FileFd::BufferedWrite : 0), FileFd::None, true))
+ {
+ _error->Errno("GetTempFile",_("Unable to write to %s"),fn);
+ if (TmpFd == nullptr)
+ delete Fd;
+ return nullptr;
+ }
+ if (ImmediateUnlink == false)
+ Fd->SetFileName(fn);
+ return Fd;
+}
+ /*}}}*/
+bool Rename(std::string From, std::string To) /*{{{*/
+{
+ if (rename(From.c_str(),To.c_str()) != 0)
+ {
+ _error->Error(_("rename failed, %s (%s -> %s)."),strerror(errno),
+ From.c_str(),To.c_str());
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode)/*{{{*/
+{
+ return Popen(Args, Fd, Child, Mode, true);
+}
+ /*}}}*/
+bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr)/*{{{*/
+{
+ return Popen(Args, Fd, Child, Mode, CaptureStderr, false);
+}
+ /*}}}*/
+bool Popen(const char *Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr, bool Sandbox) /*{{{*/
+{
+ int fd;
+ if (Mode != FileFd::ReadOnly && Mode != FileFd::WriteOnly)
+ return _error->Error("Popen supports ReadOnly (x)or WriteOnly mode only");
+
+ int Pipe[2] = {-1, -1};
+ if(pipe(Pipe) != 0)
+ return _error->Errno("pipe", _("Failed to create subprocess IPC"));
+
+ std::set<int> keep_fds;
+ keep_fds.insert(Pipe[0]);
+ keep_fds.insert(Pipe[1]);
+ Child = ExecFork(keep_fds);
+ if(Child < 0)
+ return _error->Errno("fork", "Failed to fork");
+ if(Child == 0)
+ {
+ if (Sandbox && (getuid() == 0 || geteuid() == 0) && !DropPrivileges())
+ {
+ _error->DumpErrors();
+ _exit(1);
+ }
+ if(Mode == FileFd::ReadOnly)
+ {
+ close(Pipe[0]);
+ fd = Pipe[1];
+ }
+ else if(Mode == FileFd::WriteOnly)
+ {
+ close(Pipe[1]);
+ fd = Pipe[0];
+ }
+
+ if(Mode == FileFd::ReadOnly)
+ {
+ dup2(fd, 1);
+ if (CaptureStderr == true)
+ dup2(fd, 2);
+ } else if(Mode == FileFd::WriteOnly)
+ dup2(fd, 0);
+
+ execv(Args[0], (char**)Args);
+ _exit(100);
+ }
+ if(Mode == FileFd::ReadOnly)
+ {
+ close(Pipe[1]);
+ fd = Pipe[0];
+ }
+ else if(Mode == FileFd::WriteOnly)
+ {
+ close(Pipe[0]);
+ fd = Pipe[1];
+ }
+ else
+ return _error->Error("Popen supports ReadOnly (x)or WriteOnly mode only");
+ Fd.OpenDescriptor(fd, Mode, FileFd::None, true);
+
+ return true;
+}
+ /*}}}*/
+bool DropPrivileges() /*{{{*/
+{
+ if(_config->FindB("Debug::NoDropPrivs", false) == true)
+ return true;
+
+#if __gnu_linux__
+#if defined(PR_SET_NO_NEW_PRIVS) && ( PR_SET_NO_NEW_PRIVS != 38 )
+#error "PR_SET_NO_NEW_PRIVS is defined, but with a different value than expected!"
+#endif
+ // see prctl(2), needs linux3.5 at runtime - magic constant to avoid it at buildtime
+ int ret = prctl(38, 1, 0, 0, 0);
+ // ignore EINVAL - kernel is too old to understand the option
+ if(ret < 0 && errno != EINVAL)
+ _error->Warning("PR_SET_NO_NEW_PRIVS failed with %i", ret);
+#endif
+
+ // empty setting disables privilege dropping - this also ensures
+ // backward compatibility, see bug #764506
+ const std::string toUser = _config->Find("APT::Sandbox::User");
+ if (toUser.empty() || toUser == "root")
+ return true;
+
+ // a lot can go wrong trying to drop privileges completely,
+ // so ideally we would like to verify that we have done it –
+ // but the verify asks for too much in case of fakeroot (and alike)
+ // [Specific checks can be overridden with dedicated options]
+ bool const VerifySandboxing = _config->FindB("APT::Sandbox::Verify", false);
+
+ // uid will be 0 in the end, but gid might be different anyway
+ uid_t const old_uid = getuid();
+ gid_t const old_gid = getgid();
+
+ if (old_uid != 0)
+ return true;
+
+ struct passwd *pw = getpwnam(toUser.c_str());
+ if (pw == NULL)
+ return _error->Error("No user %s, can not drop rights", toUser.c_str());
+
+ // Do not change the order here, it might break things
+ // Get rid of all our supplementary groups first
+ if (setgroups(1, &pw->pw_gid))
+ return _error->Errno("setgroups", "Failed to setgroups");
+
+ // Now change the group ids to the new user
+#ifdef HAVE_SETRESGID
+ if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0)
+ return _error->Errno("setresgid", "Failed to set new group ids");
+#else
+ if (setegid(pw->pw_gid) != 0)
+ return _error->Errno("setegid", "Failed to setegid");
+
+ if (setgid(pw->pw_gid) != 0)
+ return _error->Errno("setgid", "Failed to setgid");
+#endif
+
+ // Change the user ids to the new user
+#ifdef HAVE_SETRESUID
+ if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0)
+ return _error->Errno("setresuid", "Failed to set new user ids");
+#else
+ if (setuid(pw->pw_uid) != 0)
+ return _error->Errno("setuid", "Failed to setuid");
+ if (seteuid(pw->pw_uid) != 0)
+ return _error->Errno("seteuid", "Failed to seteuid");
+#endif
+
+ // disabled by default as fakeroot doesn't implement getgroups currently (#806521)
+ if (VerifySandboxing == true || _config->FindB("APT::Sandbox::Verify::Groups", false) == true)
+ {
+ // Verify that the user isn't still in any supplementary groups
+ long const ngroups_max = sysconf(_SC_NGROUPS_MAX);
+ std::unique_ptr<gid_t[]> gidlist(new gid_t[ngroups_max]);
+ if (unlikely(gidlist == NULL))
+ return _error->Error("Allocation of a list of size %lu for getgroups failed", ngroups_max);
+ ssize_t gidlist_nr;
+ if ((gidlist_nr = getgroups(ngroups_max, gidlist.get())) < 0)
+ return _error->Errno("getgroups", "Could not get new groups (%lu)", ngroups_max);
+ for (ssize_t i = 0; i < gidlist_nr; ++i)
+ if (gidlist[i] != pw->pw_gid)
+ return _error->Error("Could not switch group, user %s is still in group %d", toUser.c_str(), gidlist[i]);
+ }
+
+ // enabled by default as all fakeroot-lookalikes should fake that accordingly
+ if (VerifySandboxing == true || _config->FindB("APT::Sandbox::Verify::IDs", true) == true)
+ {
+ // Verify that gid, egid, uid, and euid changed
+ if (getgid() != pw->pw_gid)
+ return _error->Error("Could not switch group");
+ if (getegid() != pw->pw_gid)
+ return _error->Error("Could not switch effective group");
+ if (getuid() != pw->pw_uid)
+ return _error->Error("Could not switch user");
+ if (geteuid() != pw->pw_uid)
+ return _error->Error("Could not switch effective user");
+
+#ifdef HAVE_GETRESUID
+ // verify that the saved set-user-id was changed as well
+ uid_t ruid = 0;
+ uid_t euid = 0;
+ uid_t suid = 0;
+ if (getresuid(&ruid, &euid, &suid))
+ return _error->Errno("getresuid", "Could not get saved set-user-ID");
+ if (suid != pw->pw_uid)
+ return _error->Error("Could not switch saved set-user-ID");
+#endif
+
+#ifdef HAVE_GETRESGID
+ // verify that the saved set-group-id was changed as well
+ gid_t rgid = 0;
+ gid_t egid = 0;
+ gid_t sgid = 0;
+ if (getresgid(&rgid, &egid, &sgid))
+ return _error->Errno("getresuid", "Could not get saved set-group-ID");
+ if (sgid != pw->pw_gid)
+ return _error->Error("Could not switch saved set-group-ID");
+#endif
+ }
+
+ // disabled as fakeroot doesn't forbid (by design) (re)gaining root from unprivileged
+ if (VerifySandboxing == true || _config->FindB("APT::Sandbox::Verify::Regain", false) == true)
+ {
+ // Check that uid and gid changes do not work anymore
+ if (pw->pw_gid != old_gid && (setgid(old_gid) != -1 || setegid(old_gid) != -1))
+ return _error->Error("Could restore a gid to root, privilege dropping did not work");
+
+ if (pw->pw_uid != old_uid && (setuid(old_uid) != -1 || seteuid(old_uid) != -1))
+ return _error->Error("Could restore a uid to root, privilege dropping did not work");
+ }
+
+ if (_config->FindB("APT::Sandbox::ResetEnvironment", true))
+ {
+ setenv("HOME", pw->pw_dir, 1);
+ setenv("USER", pw->pw_name, 1);
+ setenv("USERNAME", pw->pw_name, 1);
+ setenv("LOGNAME", pw->pw_name, 1);
+ auto const shell = flNotDir(pw->pw_shell);
+ if (shell == "false" || shell == "nologin")
+ setenv("SHELL", "/bin/sh", 1);
+ else
+ setenv("SHELL", pw->pw_shell, 1);
+ auto const apt_setenv_tmp = [](char const * const env) {
+ auto const tmpdir = getenv(env);
+ if (tmpdir != nullptr)
+ {
+ auto const ourtmpdir = GetTempDirEnv(env);
+ if (ourtmpdir != tmpdir)
+ setenv(env, ourtmpdir.c_str(), 1);
+ }
+ };
+ apt_setenv_tmp("TMPDIR");
+ apt_setenv_tmp("TEMPDIR");
+ apt_setenv_tmp("TMP");
+ apt_setenv_tmp("TEMP");
+ }
+
+ return true;
+}
+ /*}}}*/
+bool OpenConfigurationFileFd(std::string const &File, FileFd &Fd) /*{{{*/
+{
+ int const fd = open(File.c_str(), O_RDONLY | O_CLOEXEC | O_NOCTTY);
+ if (fd == -1)
+ return _error->WarningE("open", _("Unable to read %s"), File.c_str());
+ APT::Configuration::Compressor none(".", "", "", nullptr, nullptr, 0);
+ if (Fd.OpenDescriptor(fd, FileFd::ReadOnly, none, true) == false)
+ return false;
+ Fd.SetFileName(File);
+ return true;
+}
+ /*}}}*/
+int Inhibit(const char *what, const char *who, const char *why, const char *mode) /*{{{*/
+{
+#ifdef HAVE_SYSTEMD
+ sd_bus_error error = SD_BUS_ERROR_NULL;
+ sd_bus_message *m = NULL;
+ sd_bus *bus = NULL;
+ int fd;
+ int r;
+
+ r = sd_bus_open_system(&bus);
+ if (r < 0)
+ goto out;
+
+ r = sd_bus_call_method(bus,
+ "org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "Inhibit",
+ &error,
+ &m,
+ "ssss",
+ what,
+ who,
+ why,
+ mode);
+ if (r < 0)
+ goto out;
+
+ r = sd_bus_message_read(m, "h", &fd);
+ if (r < 0)
+ goto out;
+
+ // We received a file descriptor, return it - systemd will close the read fd
+ // on free, so let's duplicate it here.
+ r = dup(fd);
+out:
+ sd_bus_error_free(&error);
+ sd_bus_message_unref(m);
+ sd_bus_unref(bus);
+ return r;
+#else
+ return -ENOTSUP;
+#endif
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h
new file mode 100644
index 0000000..9005b81
--- /dev/null
+++ b/apt-pkg/contrib/fileutl.h
@@ -0,0 +1,305 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ File Utilities
+
+ CopyFile - Buffered copy of a single file
+ GetLock - dpkg compatible lock file manipulation (fcntl)
+ FileExists - Returns true if the file exists
+ SafeGetCWD - Returns the CWD in a string with overrun protection
+
+ The file class is a handy abstraction for various functions+classes
+ that need to accept filenames.
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_FILEUTL_H
+#define PKGLIB_FILEUTL_H
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/macros.h>
+
+#include <set>
+#include <string>
+#include <vector>
+#include <time.h>
+
+#include <zlib.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
+/* Define this for python-apt */
+#define APT_HAS_GZIP 1
+
+class FileFdPrivate;
+class FileFd
+{
+ friend class FileFdPrivate;
+ friend class GzipFileFdPrivate;
+ friend class Bz2FileFdPrivate;
+ friend class LzmaFileFdPrivate;
+ friend class Lz4FileFdPrivate;
+ friend class ZstdFileFdPrivate;
+ friend class DirectFileFdPrivate;
+ friend class PipedFileFdPrivate;
+ protected:
+ int iFd;
+
+ enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2),
+ HitEof = (1<<3), Replace = (1<<4), Compressed = (1<<5) };
+ unsigned long Flags;
+ std::string FileName;
+ std::string TemporaryFileName;
+
+ public:
+ enum OpenMode {
+ ReadOnly = (1 << 0),
+ WriteOnly = (1 << 1),
+ ReadWrite = ReadOnly | WriteOnly,
+
+ Create = (1 << 2),
+ Exclusive = (1 << 3),
+ Atomic = Exclusive | (1 << 4),
+ Empty = (1 << 5),
+ BufferedWrite = (1 << 6),
+
+ WriteEmpty = ReadWrite | Create | Empty,
+ WriteExists = ReadWrite,
+ WriteAny = ReadWrite | Create,
+ WriteTemp = ReadWrite | Create | Exclusive,
+ ReadOnlyGzip,
+ WriteAtomic = ReadWrite | Create | Atomic
+ };
+ enum CompressMode
+ {
+ Auto = 'A',
+ None = 'N',
+ Extension = 'E',
+ Gzip = 'G',
+ Bzip2 = 'B',
+ Lzma = 'L',
+ Xz = 'X',
+ Lz4 = '4',
+ Zstd = 'Z'
+ };
+
+ inline bool Read(void *To,unsigned long long Size,bool AllowEof)
+ {
+ unsigned long long Jnk;
+ if (AllowEof)
+ return Read(To,Size,&Jnk);
+ return Read(To,Size);
+ }
+ bool Read(void *To,unsigned long long Size,unsigned long long *Actual = 0);
+ bool static Read(int const Fd, void *To, unsigned long long Size, unsigned long long * const Actual = 0);
+ /** read a complete line or until buffer is full
+ *
+ * The buffer will always be \\0 terminated, so at most Size-1 characters are read.
+ * If the buffer holds a complete line the last character (before \\0) will be
+ * the newline character \\n otherwise the line was longer than the buffer.
+ *
+ * @param To buffer which will hold the line
+ * @param Size of the buffer to fill
+ * @param \b nullptr is returned in error cases, otherwise
+ * the parameter \b To now filled with the line.
+ */
+ char* ReadLine(char *To, unsigned long long const Size);
+ /** read a complete line from the file
+ *
+ * Similar to std::getline() the string does \b not include
+ * the newline, but just the content of the line as the newline
+ * is not needed to distinguish cases as for the other #ReadLine method.
+ *
+ * @param To string which will hold the line
+ * @return \b true if successful, otherwise \b false
+ */
+ bool ReadLine(std::string &To);
+ bool Flush();
+ bool Write(const void *From,unsigned long long Size);
+ bool static Write(int Fd, const void *From, unsigned long long Size);
+ bool Seek(unsigned long long To);
+ bool Skip(unsigned long long To);
+ bool Truncate(unsigned long long To);
+ unsigned long long Tell();
+ // the size of the file content (compressed files will be uncompressed first)
+ unsigned long long Size();
+ // the size of the file itself
+ unsigned long long FileSize();
+ time_t ModificationTime();
+
+ /* You want to use 'unsigned long long' if you are talking about a file
+ to be able to support large files (>2 or >4 GB) properly.
+ This shouldn't happen all to often for the indexes, but deb's might be…
+ And as the auto-conversation converts a 'unsigned long *' to a 'bool'
+ instead of 'unsigned long long *' we need to provide this explicitly -
+ otherwise applications magically start to fail… */
+ bool Read(void *To,unsigned long long Size,unsigned long *Actual) APT_DEPRECATED_MSG("The Actual variable you pass in should be an unsigned long long")
+ {
+ unsigned long long R;
+ bool const T = Read(To, Size, &R);
+ *Actual = R;
+ return T;
+ }
+
+ bool Open(std::string FileName,unsigned int const Mode,CompressMode Compress,unsigned long const AccessMode = 0666);
+ bool Open(std::string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor,unsigned long const AccessMode = 0666);
+ inline bool Open(std::string const &FileName,unsigned int const Mode, unsigned long const AccessMode = 0666) {
+ return Open(FileName, Mode, None, AccessMode);
+ };
+ bool OpenDescriptor(int Fd, unsigned int const Mode, CompressMode Compress, bool AutoClose=false);
+ bool OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration::Compressor const &compressor, bool AutoClose=false);
+ inline bool OpenDescriptor(int Fd, unsigned int const Mode, bool AutoClose=false) {
+ return OpenDescriptor(Fd, Mode, None, AutoClose);
+ };
+ bool Close();
+ bool Sync();
+
+ // Simple manipulators
+ inline int Fd() {return iFd;};
+ inline void Fd(int fd) { OpenDescriptor(fd, ReadWrite);};
+ gzFile gzFd() APT_DEPRECATED_MSG("Implementation detail, do not use to be able to support bzip2, xz and co") APT_PURE;
+
+ inline bool IsOpen() {return iFd >= 0;};
+ inline bool Failed() {return (Flags & Fail) == Fail;};
+ inline void EraseOnFailure() {Flags |= DelOnFail;};
+ inline void OpFail() {Flags |= Fail;};
+ inline bool Eof() {return (Flags & HitEof) == HitEof;};
+ inline bool IsCompressed() {return (Flags & Compressed) == Compressed;};
+ inline std::string &Name() {return FileName;};
+ inline void SetFileName(std::string const &name) { FileName = name; };
+
+ FileFd(std::string FileName,unsigned int const Mode,unsigned long AccessMode = 0666);
+ FileFd(std::string FileName,unsigned int const Mode, CompressMode Compress, unsigned long AccessMode = 0666);
+ FileFd();
+ FileFd(int const Fd, unsigned int const Mode = ReadWrite, CompressMode Compress = None);
+ FileFd(int const Fd, bool const AutoClose);
+ virtual ~FileFd();
+
+ private:
+ FileFdPrivate * d;
+ APT_HIDDEN FileFd(const FileFd &);
+ APT_HIDDEN FileFd & operator=(const FileFd &);
+ APT_HIDDEN bool OpenInternDescriptor(unsigned int const Mode, APT::Configuration::Compressor const &compressor);
+
+ // private helpers to set Fail flag and call _error->Error
+ APT_HIDDEN bool FileFdErrno(const char* Function, const char* Description,...) APT_PRINTF(3) APT_COLD;
+ APT_HIDDEN bool FileFdError(const char* Description,...) APT_PRINTF(2) APT_COLD;
+};
+
+bool RunScripts(const char *Cnf);
+bool CopyFile(FileFd &From,FileFd &To);
+bool RemoveFile(char const * const Function, std::string const &FileName);
+bool RemoveFileAt(char const * const Function, int const dirfd, std::string const &FileName);
+int GetLock(std::string File,bool Errors = true);
+bool FileExists(std::string File);
+bool RealFileExists(std::string File);
+bool DirectoryExists(std::string const &Path);
+bool CreateDirectory(std::string const &Parent, std::string const &Path);
+time_t GetModificationTime(std::string const &Path);
+bool Rename(std::string From, std::string To);
+
+std::string GetTempDir();
+std::string GetTempDir(std::string const &User);
+FileFd* GetTempFile(std::string const &Prefix = "",
+ bool ImmediateUnlink = true,
+ FileFd * const TmpFd = NULL);
+
+// FIXME: GetTempFile should always return a buffered file
+FileFd* GetTempFile(std::string const &Prefix,
+ bool ImmediateUnlink ,
+ FileFd * const TmpFd,
+ bool Buffered) APT_HIDDEN;
+
+/** \brief Ensure the existence of the given Path
+ *
+ * \param Parent directory of the Path directory - a trailing
+ * /apt/ will be removed before CreateDirectory call.
+ * \param Path which should exist after (successful) call
+ */
+bool CreateAPTDirectoryIfNeeded(std::string const &Parent, std::string const &Path);
+
+std::vector<std::string> GetListOfFilesInDir(std::string const &Dir, std::string const &Ext,
+ bool const &SortList, bool const &AllowNoExt=false);
+std::vector<std::string> GetListOfFilesInDir(std::string const &Dir, std::vector<std::string> const &Ext,
+ bool const &SortList);
+std::vector<std::string> GetListOfFilesInDir(std::string const &Dir, bool SortList);
+std::string SafeGetCWD();
+void SetCloseExec(int Fd,bool Close);
+void SetNonBlock(int Fd,bool Block);
+bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0);
+pid_t ExecFork();
+pid_t ExecFork(std::set<int> keep_fds);
+void MergeKeepFdsFromConfiguration(std::set<int> &keep_fds);
+bool ExecWait(pid_t Pid,const char *Name,bool Reap = false);
+
+// check if the given file starts with a PGP cleartext signature
+bool StartsWithGPGClearTextSignature(std::string const &FileName);
+
+/** change file attributes to requested known good values
+ *
+ * The method skips the user:group setting if not root.
+ *
+ * @param requester is printed as functionname in error cases
+ * @param file is the file to be modified
+ * @param user is the (new) owner of the file, e.g. _apt
+ * @param group is the (new) group owning the file, e.g. root
+ * @param mode is the access mode of the file, e.g. 0644
+ */
+bool ChangeOwnerAndPermissionOfFile(char const * const requester, char const * const file, char const * const user, char const * const group, mode_t const mode);
+
+/**
+ * \brief Drop privileges
+ *
+ * Drop the privileges to the user _apt (or the one specified in
+ * APT::Sandbox::User). This does not set the supplementary group
+ * ids up correctly, it only uses the default group. Also prevent
+ * the process from gaining any new privileges afterwards, at least
+ * on Linux.
+ *
+ * \return true on success, false on failure with _error set
+ */
+bool DropPrivileges();
+
+// File string manipulators
+std::string flNotDir(std::string File);
+std::string flNotFile(std::string File);
+std::string flNoLink(std::string File);
+std::string flExtension(std::string File);
+std::string flCombine(std::string Dir,std::string File);
+
+/** \brief Takes a file path and returns the absolute path
+ */
+std::string flAbsPath(std::string File);
+/** \brief removes superfluous /./ and // from path */
+APT_HIDDEN std::string flNormalize(std::string file);
+
+// simple c++ glob
+std::vector<std::string> Glob(std::string const &pattern, int flags=0);
+
+/** \brief Popen() implementation that execv() instead of using a shell
+ *
+ * \param Args the execv style command to run
+ * \param FileFd is a reference to the FileFd to use for input or output
+ * \param Child a reference to the integer that stores the child pid
+ * Note that you must call ExecWait() or similar to cleanup
+ * \param Mode is either FileFd::ReadOnly or FileFd::WriteOnly
+ * \param CaptureStderr True if we should capture stderr in addition to stdout.
+ * (default: True).
+ * \param Sandbox True if this should run sandboxed
+ * \return true on success, false on failure with _error set
+ */
+bool Popen(const char *Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr, bool Sandbox) APT_HIDDEN;
+bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr);
+bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode);
+
+APT_HIDDEN bool OpenConfigurationFileFd(std::string const &File, FileFd &Fd);
+
+APT_HIDDEN int Inhibit(const char *what, const char *who, const char *why, const char *mode);
+
+#endif
diff --git a/apt-pkg/contrib/gpgv.cc b/apt-pkg/contrib/gpgv.cc
new file mode 100644
index 0000000..d956eaf
--- /dev/null
+++ b/apt-pkg/contrib/gpgv.cc
@@ -0,0 +1,580 @@
+// -*- mode: cpp; mode: fold -*-
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/strutl.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// syntactic sugar to wrap a raw pointer with a custom deleter in a std::unique_ptr
+static std::unique_ptr<char, decltype(&free)> make_unique_char(void *const str = nullptr)
+{
+ return {static_cast<char *>(str), &free};
+}
+static std::unique_ptr<FILE, decltype(&fclose)> make_unique_FILE(std::string const &filename, char const *const mode)
+{
+ return {fopen(filename.c_str(), mode), &fclose};
+}
+
+class LineBuffer /*{{{*/
+{
+ char *buffer = nullptr;
+ size_t buffer_size = 0;
+ int line_length = 0;
+ // a "normal" find_last_not_of returns npos if not found
+ int find_last_not_of_length(APT::StringView const bad) const
+ {
+ for (int result = line_length - 1; result >= 0; --result)
+ if (bad.find(buffer[result]) == APT::StringView::npos)
+ return result + 1;
+ return 0;
+ }
+
+ public:
+ bool empty() const noexcept { return view().empty(); }
+ APT::StringView view() const noexcept { return {buffer, static_cast<size_t>(line_length)}; }
+ bool starts_with(APT::StringView const start) const { return view().substr(0, start.size()) == start; }
+
+ bool writeTo(FileFd *const to, size_t offset = 0) const
+ {
+ if (to == nullptr)
+ return true;
+ return to->Write(buffer + offset, line_length - offset);
+ }
+ bool writeLineTo(FileFd *const to) const
+ {
+ if (to == nullptr)
+ return true;
+ buffer[line_length] = '\n';
+ bool const result = to->Write(buffer, line_length + 1);
+ buffer[line_length] = '\0';
+ return result;
+ }
+ bool writeNewLineIf(FileFd *const to, bool const condition) const
+ {
+ if (not condition || to == nullptr)
+ return true;
+ return to->Write("\n", 1);
+ }
+
+ bool readFrom(FILE *stream, std::string const &InFile, bool acceptEoF = false)
+ {
+ errno = 0;
+ line_length = getline(&buffer, &buffer_size, stream);
+ if (errno != 0)
+ return _error->Errno("getline", "Could not read from %s", InFile.c_str());
+ if (line_length == -1)
+ {
+ if (acceptEoF)
+ return false;
+ return _error->Error("Splitting of clearsigned file %s failed as it doesn't contain all expected parts", InFile.c_str());
+ }
+ // a) remove newline characters, so we can work consistently with lines
+ line_length = find_last_not_of_length("\n\r");
+ // b) remove trailing whitespaces as defined by rfc4880 §7.1
+ line_length = find_last_not_of_length(" \t");
+ buffer[line_length] = '\0';
+ return true;
+ }
+
+ ~LineBuffer() { free(buffer); }
+};
+static bool operator==(LineBuffer const &buf, APT::StringView const exp) noexcept
+{
+ return buf.view() == exp;
+}
+static bool operator!=(LineBuffer const &buf, APT::StringView const exp) noexcept
+{
+ return buf.view() != exp;
+}
+ /*}}}*/
+// ExecGPGV - returns the command needed for verify /*{{{*/
+// ---------------------------------------------------------------------
+/* Generating the commandline for calling gpg is somehow complicated as
+ we need to add multiple keyrings and user supplied options.
+ Also, as gpg has no options to enforce a certain reduced style of
+ clear-signed files (=the complete content of the file is signed and
+ the content isn't encoded) we do a divide and conquer approach here
+ and split up the clear-signed file in message and signature for gpg.
+ And as a cherry on the cake, we use our apt-key wrapper to do part
+ of the lifting in regards to merging keyrings. Fun for the whole family.
+*/
+static bool iovprintf(std::ostream &out, const char *format,
+ va_list &args, ssize_t &size) {
+ auto S = make_unique_char(malloc(size));
+ ssize_t const n = vsnprintf(S.get(), size, format, args);
+ if (n > -1 && n < size) {
+ out << S.get();
+ return true;
+ } else {
+ if (n > -1)
+ size = n + 1;
+ else
+ size *= 2;
+ }
+ return false;
+}
+static void APT_PRINTF(4) apt_error(std::ostream &outterm, int const statusfd, int fd[2], const char *format, ...)
+{
+ std::ostringstream outstr;
+ std::ostream &out = (statusfd == -1) ? outterm : outstr;
+ va_list args;
+ ssize_t size = 400;
+ while (true) {
+ bool ret;
+ va_start(args,format);
+ ret = iovprintf(out, format, args, size);
+ va_end(args);
+ if (ret)
+ break;
+ }
+ if (statusfd != -1)
+ {
+ auto const errtag = "[APTKEY:] ERROR ";
+ outstr << '\n';
+ auto const errtext = outstr.str();
+ if (not FileFd::Write(fd[1], errtag, strlen(errtag)) ||
+ not FileFd::Write(fd[1], errtext.data(), errtext.size()))
+ outterm << errtext << std::flush;
+ }
+}
+void ExecGPGV(std::string const &File, std::string const &FileGPG,
+ int const &statusfd, int fd[2], std::string const &key)
+{
+ #define EINTERNAL 111
+ std::string const aptkey = _config->Find("Dir::Bin::apt-key", CMAKE_INSTALL_FULL_BINDIR "/apt-key");
+
+ bool const Debug = _config->FindB("Debug::Acquire::gpgv", false);
+ struct exiter {
+ std::vector<const char *> files;
+ void operator ()(int code) APT_NORETURN {
+ std::for_each(files.begin(), files.end(), unlink);
+ exit(code);
+ }
+ } local_exit;
+
+
+ std::vector<const char *> Args;
+ Args.reserve(10);
+
+ Args.push_back(aptkey.c_str());
+ Args.push_back("--quiet");
+ Args.push_back("--readonly");
+ auto const keysFileFpr = VectorizeString(key, ',');
+ for (auto const &k: keysFileFpr)
+ {
+ if (unlikely(k.empty()))
+ continue;
+ if (k[0] == '/')
+ {
+ Args.push_back("--keyring");
+ Args.push_back(k.c_str());
+ }
+ else
+ {
+ Args.push_back("--keyid");
+ Args.push_back(k.c_str());
+ }
+ }
+ Args.push_back("verify");
+
+ char statusfdstr[10];
+ if (statusfd != -1)
+ {
+ Args.push_back("--status-fd");
+ snprintf(statusfdstr, sizeof(statusfdstr), "%i", statusfd);
+ Args.push_back(statusfdstr);
+ }
+
+ Configuration::Item const *Opts;
+ Opts = _config->Tree("Acquire::gpgv::Options");
+ if (Opts != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty())
+ continue;
+ Args.push_back(Opts->Value.c_str());
+ }
+ }
+
+ enum { DETACHED, CLEARSIGNED } releaseSignature = (FileGPG != File) ? DETACHED : CLEARSIGNED;
+ auto sig = make_unique_char();
+ auto data = make_unique_char();
+ auto conf = make_unique_char();
+
+ // Dump the configuration so apt-key picks up the correct Dir values
+ {
+ {
+ std::string tmpfile;
+ strprintf(tmpfile, "%s/apt.conf.XXXXXX", GetTempDir().c_str());
+ conf.reset(strdup(tmpfile.c_str()));
+ }
+ if (conf == nullptr) {
+ apt_error(std::cerr, statusfd, fd, "Couldn't create tempfile names for passing config to apt-key");
+ local_exit(EINTERNAL);
+ }
+ int confFd = mkstemp(conf.get());
+ if (confFd == -1) {
+ apt_error(std::cerr, statusfd, fd, "Couldn't create temporary file %s for passing config to apt-key", conf.get());
+ local_exit(EINTERNAL);
+ }
+ local_exit.files.push_back(conf.get());
+
+ std::ofstream confStream(conf.get());
+ close(confFd);
+ _config->Dump(confStream);
+ confStream.close();
+ setenv("APT_CONFIG", conf.get(), 1);
+ }
+
+ if (releaseSignature == DETACHED)
+ {
+ auto detached = make_unique_FILE(FileGPG, "r");
+ if (detached.get() == nullptr)
+ {
+ apt_error(std::cerr, statusfd, fd, "Detached signature file '%s' could not be opened", FileGPG.c_str());
+ local_exit(EINTERNAL);
+ }
+ LineBuffer buf;
+ bool open_signature = false;
+ bool found_badcontent = false;
+ size_t found_signatures = 0;
+ while (buf.readFrom(detached.get(), FileGPG, true))
+ {
+ if (open_signature)
+ {
+ if (buf == "-----END PGP SIGNATURE-----")
+ open_signature = false;
+ else if (buf.starts_with("-"))
+ {
+ // the used Radix-64 is not using dash for any value, so a valid line can't
+ // start with one. Header keys could, but no existent one does and seems unlikely.
+ // Instead it smells a lot like a header the parser didn't recognize.
+ apt_error(std::cerr, statusfd, fd, "Detached signature file '%s' contains unexpected line starting with a dash", FileGPG.c_str());
+ local_exit(112);
+ }
+ }
+ else //if (not open_signature)
+ {
+ if (buf == "-----BEGIN PGP SIGNATURE-----")
+ {
+ open_signature = true;
+ ++found_signatures;
+ if (found_badcontent)
+ break;
+ }
+ else
+ {
+ found_badcontent = true;
+ if (found_signatures != 0)
+ break;
+ }
+ }
+ }
+ if (found_signatures == 0 && statusfd != -1)
+ {
+ auto const errtag = "[GNUPG:] NODATA\n";
+ FileFd::Write(fd[1], errtag, strlen(errtag));
+ // guess if this is a binary signature, we never officially supported them,
+ // but silently accepted them via passing them unchecked to gpgv
+ if (found_badcontent)
+ {
+ rewind(detached.get());
+ auto ptag = fgetc(detached.get());
+ // §4.2 says that the first bit is always set and gpg seems to generate
+ // only old format which is indicated by the second bit not set
+ if (ptag != EOF && (ptag & 0x80) != 0 && (ptag & 0x40) == 0)
+ {
+ apt_error(std::cerr, statusfd, fd, "Detached signature file '%s' is in unsupported binary format", FileGPG.c_str());
+ local_exit(112);
+ }
+ }
+ // This is not an attack attempt but a file even gpgv would complain about
+ // likely the result of a paywall which is covered by the gpgv method
+ local_exit(113);
+ }
+ else if (found_badcontent)
+ {
+ apt_error(std::cerr, statusfd, fd, "Detached signature file '%s' contains lines not belonging to a signature", FileGPG.c_str());
+ local_exit(112);
+ }
+ if (open_signature)
+ {
+ apt_error(std::cerr, statusfd, fd, "Detached signature file '%s' contains unclosed signatures", FileGPG.c_str());
+ local_exit(112);
+ }
+
+ Args.push_back(FileGPG.c_str());
+ Args.push_back(File.c_str());
+ }
+ else // clear-signed file
+ {
+ FileFd signature;
+ if (GetTempFile("apt.sig", false, &signature) == nullptr)
+ local_exit(EINTERNAL);
+ sig.reset(strdup(signature.Name().c_str()));
+ local_exit.files.push_back(sig.get());
+ FileFd message;
+ if (GetTempFile("apt.data", false, &message) == nullptr)
+ local_exit(EINTERNAL);
+ data.reset(strdup(message.Name().c_str()));
+ local_exit.files.push_back(data.get());
+
+ if (signature.Failed() || message.Failed() ||
+ not SplitClearSignedFile(File, &message, nullptr, &signature))
+ {
+ apt_error(std::cerr, statusfd, fd, "Splitting up %s into data and signature failed", File.c_str());
+ local_exit(112);
+ }
+ Args.push_back(sig.get());
+ Args.push_back(data.get());
+ }
+
+ Args.push_back(NULL);
+
+ if (Debug)
+ {
+ std::clog << "Preparing to exec: ";
+ for (std::vector<const char *>::const_iterator a = Args.begin(); *a != NULL; ++a)
+ std::clog << " " << *a;
+ std::clog << std::endl;
+ }
+
+ if (statusfd != -1)
+ {
+ int const nullfd = open("/dev/null", O_WRONLY);
+ close(fd[0]);
+ // Redirect output to /dev/null; we read from the status fd
+ if (statusfd != STDOUT_FILENO)
+ dup2(nullfd, STDOUT_FILENO);
+ if (statusfd != STDERR_FILENO)
+ dup2(nullfd, STDERR_FILENO);
+ // Redirect the pipe to the status fd (3)
+ dup2(fd[1], statusfd);
+
+ putenv((char *)"LANG=");
+ putenv((char *)"LC_ALL=");
+ putenv((char *)"LC_MESSAGES=");
+ }
+
+
+ // We have created tempfiles we have to clean up
+ // and we do an additional check, so fork yet another time …
+ pid_t pid = ExecFork();
+ if(pid < 0) {
+ apt_error(std::cerr, statusfd, fd, "Fork failed for %s to check %s", Args[0], File.c_str());
+ local_exit(EINTERNAL);
+ }
+ if(pid == 0)
+ {
+ if (statusfd != -1)
+ dup2(fd[1], statusfd);
+ execvp(Args[0], (char **) &Args[0]);
+ apt_error(std::cerr, statusfd, fd, "Couldn't execute %s to check %s", Args[0], File.c_str());
+ local_exit(EINTERNAL);
+ }
+
+ // Wait and collect the error code - taken from WaitPid as we need the exact Status
+ int Status;
+ while (waitpid(pid,&Status,0) != pid)
+ {
+ if (errno == EINTR)
+ continue;
+ apt_error(std::cerr, statusfd, fd, _("Waited for %s but it wasn't there"), "apt-key");
+ local_exit(EINTERNAL);
+ }
+
+ // check if it exit'ed normally …
+ if (not WIFEXITED(Status))
+ {
+ apt_error(std::cerr, statusfd, fd, _("Sub-process %s exited unexpectedly"), "apt-key");
+ local_exit(EINTERNAL);
+ }
+
+ // … and with a good exit code
+ if (WEXITSTATUS(Status) != 0)
+ {
+ // we forward the statuscode, so don't generate a message on the fd in this case
+ apt_error(std::cerr, -1, fd, _("Sub-process %s returned an error code (%u)"), "apt-key", WEXITSTATUS(Status));
+ local_exit(WEXITSTATUS(Status));
+ }
+
+ // everything fine
+ local_exit(0);
+}
+ /*}}}*/
+// SplitClearSignedFile - split message into data/signature /*{{{*/
+bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile,
+ std::vector<std::string> * const ContentHeader, FileFd * const SignatureFile)
+{
+ auto in = make_unique_FILE(InFile, "r");
+ if (in.get() == nullptr)
+ return _error->Errno("fopen", "can not open %s", InFile.c_str());
+
+ struct ScopedErrors
+ {
+ ScopedErrors() { _error->PushToStack(); }
+ ~ScopedErrors() { _error->MergeWithStack(); }
+ } scoped;
+ LineBuffer buf;
+
+ // start of the message
+ if (not buf.readFrom(in.get(), InFile))
+ return false; // empty or read error
+ if (buf != "-----BEGIN PGP SIGNED MESSAGE-----")
+ {
+ // this might be an unsigned file we don't want to report errors for,
+ // but still finish unsuccessful none the less.
+ while (buf.readFrom(in.get(), InFile, true))
+ if (buf == "-----BEGIN PGP SIGNED MESSAGE-----")
+ return _error->Error("Clearsigned file '%s' does not start with a signed message block.", InFile.c_str());
+
+ return false;
+ }
+
+ // save "Hash" Armor Headers
+ while (true)
+ {
+ if (not buf.readFrom(in.get(), InFile))
+ return false;
+ if (buf.empty())
+ break; // empty line ends the Armor Headers
+ if (buf.starts_with("-"))
+ // § 6.2 says unknown keys should be reported to the user. We don't go that far,
+ // but we assume that there will never be a header key starting with a dash
+ return _error->Error("Clearsigned file '%s' contains unexpected line starting with a dash (%s)", InFile.c_str(), "armor");
+ if (ContentHeader != nullptr && buf.starts_with("Hash: "))
+ ContentHeader->push_back(buf.view().to_string());
+ }
+
+ // the message itself
+ bool first_line = true;
+ while (true)
+ {
+ if (not buf.readFrom(in.get(), InFile))
+ return false;
+
+ if (buf.starts_with("-"))
+ {
+ if (buf == "-----BEGIN PGP SIGNATURE-----")
+ {
+ if (not buf.writeLineTo(SignatureFile))
+ return false;
+ break;
+ }
+ else if (buf.starts_with("- "))
+ {
+ // we don't have any fields which need to be dash-escaped,
+ // but implementations are free to escape all lines …
+ if (not buf.writeNewLineIf(ContentFile, not first_line) || not buf.writeTo(ContentFile, 2))
+ return false;
+ }
+ else
+ // § 7.1 says a client should warn, but we don't really work with files which
+ // should contain lines starting with a dash, so it is a lot more likely that
+ // this is an attempt to trick our parser vs. gpgv parser into ignoring a header
+ return _error->Error("Clearsigned file '%s' contains unexpected line starting with a dash (%s)", InFile.c_str(), "msg");
+ }
+ else if (not buf.writeNewLineIf(ContentFile, not first_line) || not buf.writeTo(ContentFile))
+ return false;
+ first_line = false;
+ }
+
+ // collect all signatures
+ bool open_signature = true;
+ while (true)
+ {
+ if (not buf.readFrom(in.get(), InFile, true))
+ break;
+
+ if (open_signature)
+ {
+ if (buf == "-----END PGP SIGNATURE-----")
+ open_signature = false;
+ else if (buf.starts_with("-"))
+ // the used Radix-64 is not using dash for any value, so a valid line can't
+ // start with one. Header keys could, but no existent one does and seems unlikely.
+ // Instead it smells a lot like a header the parser didn't recognize.
+ return _error->Error("Clearsigned file '%s' contains unexpected line starting with a dash (%s)", InFile.c_str(), "sig");
+ }
+ else //if (not open_signature)
+ {
+ if (buf == "-----BEGIN PGP SIGNATURE-----")
+ open_signature = true;
+ else
+ return _error->Error("Clearsigned file '%s' contains unsigned lines.", InFile.c_str());
+ }
+
+ if (not buf.writeLineTo(SignatureFile))
+ return false;
+ }
+ if (open_signature)
+ return _error->Error("Signature in file %s wasn't closed", InFile.c_str());
+
+ // Flush the files
+ if (SignatureFile != nullptr)
+ SignatureFile->Flush();
+ if (ContentFile != nullptr)
+ ContentFile->Flush();
+
+ // Catch-all for "unhandled" read/sync errors
+ if (_error->PendingError())
+ return false;
+ return true;
+}
+ /*}}}*/
+bool OpenMaybeClearSignedFile(std::string const &ClearSignedFileName, FileFd &MessageFile) /*{{{*/
+{
+ // Buffered file
+ if (GetTempFile("clearsigned.message", true, &MessageFile, true) == nullptr)
+ return false;
+ if (MessageFile.Failed())
+ return _error->Error("Couldn't open temporary file to work with %s", ClearSignedFileName.c_str());
+
+ _error->PushToStack();
+ bool const splitDone = SplitClearSignedFile(ClearSignedFileName, &MessageFile, NULL, NULL);
+ bool const errorDone = _error->PendingError();
+ _error->MergeWithStack();
+ if (not splitDone)
+ {
+ MessageFile.Close();
+
+ if (errorDone)
+ return false;
+
+ // we deal with an unsigned file
+ MessageFile.Open(ClearSignedFileName, FileFd::ReadOnly);
+ }
+ else // clear-signed
+ {
+ if (not MessageFile.Seek(0))
+ return _error->Errno("lseek", "Unable to seek back in message for file %s", ClearSignedFileName.c_str());
+ }
+
+ return not MessageFile.Failed();
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/gpgv.h b/apt-pkg/contrib/gpgv.h
new file mode 100644
index 0000000..2a4cdad
--- /dev/null
+++ b/apt-pkg/contrib/gpgv.h
@@ -0,0 +1,92 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Helpers to deal with gpgv better and more easily
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef CONTRIB_GPGV_H
+#define CONTRIB_GPGV_H
+
+#include <apt-pkg/macros.h>
+
+#include <string>
+#include <vector>
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
+
+class FileFd;
+
+/** \brief generates and run the command to verify a file with gpgv
+ *
+ * If File and FileSig specify the same file it is assumed that we
+ * deal with a clear-signed message. Note that the method will accept
+ * and validate files which include additional (unsigned) messages
+ * without complaining. Do NOT open files accepted by this method
+ * for reading. Use #OpenMaybeClearSignedFile to access the message
+ * instead to ensure you are only reading signed data.
+ *
+ * The method does not return, but has some notable exit-codes:
+ * 111 signals an internal error like the inability to execute gpgv,
+ * 112 indicates a clear-signed file which doesn't include a message,
+ * which can happen if APT is run while on a network requiring
+ * authentication before usage (e.g. in hotels)
+ * All other exit-codes are passed-through from gpgv.
+ *
+ * @param File is the message (unsigned or clear-signed)
+ * @param FileSig is the signature (detached or clear-signed)
+ * @param statusfd is the fd given to gpgv as --status-fd
+ * @param fd is used as a pipe for the standard output of gpgv
+ * @param key is the specific one to be used instead of using all
+ */
+void ExecGPGV(std::string const &File, std::string const &FileSig,
+ int const &statusfd, int fd[2], std::string const &Key = "") APT_NORETURN;
+inline APT_NORETURN void ExecGPGV(std::string const &File, std::string const &FileSig,
+ int const &statusfd = -1) {
+ int fd[2];
+ ExecGPGV(File, FileSig, statusfd, fd);
+}
+
+/** \brief Split an inline signature into message and signature
+ *
+ * Takes a clear-signed message and puts the first signed message
+ * in the content file and all signatures following it into the
+ * second. Unsigned messages, additional messages as well as
+ * whitespaces are discarded. The resulting files are suitable to
+ * be checked with gpgv.
+ *
+ * If a FileFd pointers is NULL it will not be used and the content
+ * which would have been written to it is silently discarded.
+ *
+ * The content of the split files is undefined if the splitting was
+ * unsuccessful.
+ *
+ * Note that trying to split an unsigned file will fail, but
+ * not generate an error message.
+ *
+ * @param InFile is the clear-signed file
+ * @param ContentFile is the FileFd the message will be written to
+ * @param ContentHeader is a list of all required Amored Headers for the message
+ * @param SignatureFile is the FileFd all signatures will be written to
+ * @return true if the splitting was successful, false otherwise
+ */
+bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile,
+ std::vector<std::string> * const ContentHeader, FileFd * const SignatureFile);
+
+/** \brief open a file which might be clear-signed
+ *
+ * This method tries to extract the (signed) message of a file.
+ * If the file isn't signed it will just open the given filename.
+ * Otherwise the message is extracted to a temporary file which
+ * will be opened instead.
+ *
+ * @param ClearSignedFileName is the name of the file to open
+ * @param[out] MessageFile is the FileFd in which the file will be opened
+ * @return true if opening was successful, otherwise false
+ */
+bool OpenMaybeClearSignedFile(std::string const &ClearSignedFileName, FileFd &MessageFile);
+
+#endif
diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc
new file mode 100644
index 0000000..98b92cc
--- /dev/null
+++ b/apt-pkg/contrib/hashes.cc
@@ -0,0 +1,408 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Hashes - Simple wrapper around the hash functions
+
+ This is just used to make building the methods simpler, this is the
+ only interface required..
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/sha2.h>
+
+#include <algorithm>
+#include <iostream>
+#include <string>
+#include <stddef.h>
+#include <stdlib.h>
+#include <unistd.h>
+ /*}}}*/
+
+const char * HashString::_SupportedHashes[] =
+{
+ "SHA512", "SHA256", "SHA1", "MD5Sum", "Checksum-FileSize", NULL
+};
+
+HashString::HashString()
+{
+}
+
+HashString::HashString(std::string Type, std::string Hash) : Type(Type), Hash(Hash)
+{
+}
+
+HashString::HashString(std::string StringedHash) /*{{{*/
+{
+ if (StringedHash.find(":") == std::string::npos)
+ {
+ // legacy: md5sum without "MD5Sum:" prefix
+ if (StringedHash.size() == 32)
+ {
+ Type = "MD5Sum";
+ Hash = StringedHash;
+ }
+ if(_config->FindB("Debug::Hashes",false) == true)
+ std::clog << "HashString(string): invalid StringedHash " << StringedHash << std::endl;
+ return;
+ }
+ std::string::size_type pos = StringedHash.find(":");
+ Type = StringedHash.substr(0,pos);
+ Hash = StringedHash.substr(pos+1, StringedHash.size() - pos);
+
+ if(_config->FindB("Debug::Hashes",false) == true)
+ std::clog << "HashString(string): " << Type << " : " << Hash << std::endl;
+}
+ /*}}}*/
+bool HashString::VerifyFile(std::string filename) const /*{{{*/
+{
+ std::string fileHash = GetHashForFile(filename);
+
+ if(_config->FindB("Debug::Hashes",false) == true)
+ std::clog << "HashString::VerifyFile: got: " << fileHash << " expected: " << toStr() << std::endl;
+
+ return (fileHash == Hash);
+}
+ /*}}}*/
+bool HashString::FromFile(std::string filename) /*{{{*/
+{
+ // pick the strongest hash
+ if (Type == "")
+ Type = _SupportedHashes[0];
+
+ Hash = GetHashForFile(filename);
+ return true;
+}
+ /*}}}*/
+std::string HashString::GetHashForFile(std::string filename) const /*{{{*/
+{
+ std::string fileHash;
+
+ FileFd Fd(filename, FileFd::ReadOnly);
+ if(strcasecmp(Type.c_str(), "MD5Sum") == 0)
+ {
+ MD5Summation MD5;
+ MD5.AddFD(Fd);
+ fileHash = (std::string)MD5.Result();
+ }
+ else if (strcasecmp(Type.c_str(), "SHA1") == 0)
+ {
+ SHA1Summation SHA1;
+ SHA1.AddFD(Fd);
+ fileHash = (std::string)SHA1.Result();
+ }
+ else if (strcasecmp(Type.c_str(), "SHA256") == 0)
+ {
+ SHA256Summation SHA256;
+ SHA256.AddFD(Fd);
+ fileHash = (std::string)SHA256.Result();
+ }
+ else if (strcasecmp(Type.c_str(), "SHA512") == 0)
+ {
+ SHA512Summation SHA512;
+ SHA512.AddFD(Fd);
+ fileHash = (std::string)SHA512.Result();
+ }
+ else if (strcasecmp(Type.c_str(), "Checksum-FileSize") == 0)
+ strprintf(fileHash, "%llu", Fd.FileSize());
+ Fd.Close();
+
+ return fileHash;
+}
+ /*}}}*/
+const char** HashString::SupportedHashes() /*{{{*/
+{
+ return _SupportedHashes;
+}
+ /*}}}*/
+APT_PURE bool HashString::empty() const /*{{{*/
+{
+ return (Type.empty() || Hash.empty());
+}
+ /*}}}*/
+
+APT_PURE static bool IsConfigured(const char *name, const char *what)
+{
+ std::string option;
+ strprintf(option, "APT::Hashes::%s::%s", name, what);
+ return _config->FindB(option, false);
+}
+
+APT_PURE bool HashString::usable() const /*{{{*/
+{
+ return (
+ (Type != "Checksum-FileSize") &&
+ (Type != "MD5Sum") &&
+ (Type != "SHA1") &&
+ !IsConfigured(Type.c_str(), "Untrusted")
+ );
+}
+ /*}}}*/
+std::string HashString::toStr() const /*{{{*/
+{
+ return Type + ":" + Hash;
+}
+ /*}}}*/
+APT_PURE bool HashString::operator==(HashString const &other) const /*{{{*/
+{
+ return (strcasecmp(Type.c_str(), other.Type.c_str()) == 0 && Hash == other.Hash);
+}
+APT_PURE bool HashString::operator!=(HashString const &other) const
+{
+ return !(*this == other);
+}
+ /*}}}*/
+
+bool HashStringList::usable() const /*{{{*/
+{
+ if (empty() == true)
+ return false;
+ std::string const forcedType = _config->Find("Acquire::ForceHash", "");
+ if (forcedType.empty() == true)
+ {
+ // See if there is at least one usable hash
+ for (auto const &hs: list)
+ if (hs.usable())
+ return true;
+ return false;
+ }
+ return find(forcedType) != NULL;
+}
+ /*}}}*/
+HashString const * HashStringList::find(char const * const type) const /*{{{*/
+{
+ if (type == NULL || type[0] == '\0')
+ {
+ std::string const forcedType = _config->Find("Acquire::ForceHash", "");
+ if (forcedType.empty() == false)
+ return find(forcedType.c_str());
+ for (char const * const * t = HashString::SupportedHashes(); *t != NULL; ++t)
+ for (std::vector<HashString>::const_iterator hs = list.begin(); hs != list.end(); ++hs)
+ if (strcasecmp(hs->HashType().c_str(), *t) == 0)
+ return &*hs;
+ return NULL;
+ }
+ for (std::vector<HashString>::const_iterator hs = list.begin(); hs != list.end(); ++hs)
+ if (strcasecmp(hs->HashType().c_str(), type) == 0)
+ return &*hs;
+ return NULL;
+}
+ /*}}}*/
+unsigned long long HashStringList::FileSize() const /*{{{*/
+{
+ HashString const * const hsf = find("Checksum-FileSize");
+ if (hsf == NULL)
+ return 0;
+ std::string const hv = hsf->HashValue();
+ return strtoull(hv.c_str(), NULL, 10);
+}
+ /*}}}*/
+bool HashStringList::FileSize(unsigned long long const Size) /*{{{*/
+{
+ return push_back(HashString("Checksum-FileSize", std::to_string(Size)));
+}
+ /*}}}*/
+bool HashStringList::supported(char const * const type) /*{{{*/
+{
+ for (char const * const * t = HashString::SupportedHashes(); *t != NULL; ++t)
+ if (strcasecmp(*t, type) == 0)
+ return true;
+ return false;
+}
+ /*}}}*/
+bool HashStringList::push_back(const HashString &hashString) /*{{{*/
+{
+ if (hashString.HashType().empty() == true ||
+ hashString.HashValue().empty() == true ||
+ supported(hashString.HashType().c_str()) == false)
+ return false;
+
+ // ensure that each type is added only once
+ HashString const * const hs = find(hashString.HashType().c_str());
+ if (hs != NULL)
+ return *hs == hashString;
+
+ list.push_back(hashString);
+ return true;
+}
+ /*}}}*/
+bool HashStringList::VerifyFile(std::string filename) const /*{{{*/
+{
+ if (usable() == false)
+ return false;
+
+ Hashes hashes(*this);
+ FileFd file(filename, FileFd::ReadOnly);
+ HashString const * const hsf = find("Checksum-FileSize");
+ if (hsf != NULL)
+ {
+ std::string fileSize;
+ strprintf(fileSize, "%llu", file.FileSize());
+ if (hsf->HashValue() != fileSize)
+ return false;
+ }
+ hashes.AddFD(file);
+ HashStringList const hsl = hashes.GetHashStringList();
+ return hsl == *this;
+}
+ /*}}}*/
+bool HashStringList::operator==(HashStringList const &other) const /*{{{*/
+{
+ std::string const forcedType = _config->Find("Acquire::ForceHash", "");
+ if (forcedType.empty() == false)
+ {
+ HashString const * const hs = find(forcedType);
+ HashString const * const ohs = other.find(forcedType);
+ if (hs == NULL || ohs == NULL)
+ return false;
+ return *hs == *ohs;
+ }
+ short matches = 0;
+ for (const_iterator hs = begin(); hs != end(); ++hs)
+ {
+ HashString const * const ohs = other.find(hs->HashType());
+ if (ohs == NULL)
+ continue;
+ if (*hs != *ohs)
+ return false;
+ ++matches;
+ }
+ if (matches == 0)
+ return false;
+ return true;
+}
+bool HashStringList::operator!=(HashStringList const &other) const
+{
+ return !(*this == other);
+}
+ /*}}}*/
+
+// PrivateHashes /*{{{*/
+class PrivateHashes {
+public:
+ unsigned long long FileSize;
+ unsigned int CalcHashes;
+
+ explicit PrivateHashes(unsigned int const CalcHashes) : FileSize(0), CalcHashes(CalcHashes) {}
+ explicit PrivateHashes(HashStringList const &Hashes) : FileSize(0) {
+ unsigned int calcHashes = Hashes.usable() ? 0 : ~0;
+ if (Hashes.find("MD5Sum") != NULL)
+ calcHashes |= Hashes::MD5SUM;
+ if (Hashes.find("SHA1") != NULL)
+ calcHashes |= Hashes::SHA1SUM;
+ if (Hashes.find("SHA256") != NULL)
+ calcHashes |= Hashes::SHA256SUM;
+ if (Hashes.find("SHA512") != NULL)
+ calcHashes |= Hashes::SHA512SUM;
+ CalcHashes = calcHashes;
+ }
+};
+ /*}}}*/
+// Hashes::Add* - Add the contents of data or FD /*{{{*/
+bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size)
+{
+ if (Size == 0)
+ return true;
+ bool Res = true;
+APT_IGNORE_DEPRECATED_PUSH
+ if ((d->CalcHashes & MD5SUM) == MD5SUM)
+ Res &= MD5.Add(Data, Size);
+ if ((d->CalcHashes & SHA1SUM) == SHA1SUM)
+ Res &= SHA1.Add(Data, Size);
+ if ((d->CalcHashes & SHA256SUM) == SHA256SUM)
+ Res &= SHA256.Add(Data, Size);
+ if ((d->CalcHashes & SHA512SUM) == SHA512SUM)
+ Res &= SHA512.Add(Data, Size);
+APT_IGNORE_DEPRECATED_POP
+ d->FileSize += Size;
+ return Res;
+}
+bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size, unsigned int const Hashes)
+{
+ d->CalcHashes = Hashes;
+ return Add(Data, Size);
+}
+bool Hashes::AddFD(int const Fd,unsigned long long Size)
+{
+ unsigned char Buf[64*64];
+ bool const ToEOF = (Size == UntilEOF);
+ while (Size != 0 || ToEOF)
+ {
+ decltype(Size) n = sizeof(Buf);
+ if (!ToEOF) n = std::min(Size, n);
+ ssize_t const Res = read(Fd,Buf,n);
+ if (Res < 0 || (!ToEOF && Res != (ssize_t) n)) // error, or short read
+ return false;
+ if (ToEOF && Res == 0) // EOF
+ break;
+ Size -= Res;
+ if (Add(Buf, Res) == false)
+ return false;
+ }
+ return true;
+}
+bool Hashes::AddFD(int const Fd,unsigned long long Size, unsigned int const Hashes)
+{
+ d->CalcHashes = Hashes;
+ return AddFD(Fd, Size);
+}
+bool Hashes::AddFD(FileFd &Fd,unsigned long long Size)
+{
+ unsigned char Buf[64*64];
+ bool const ToEOF = (Size == 0);
+ while (Size != 0 || ToEOF)
+ {
+ decltype(Size) n = sizeof(Buf);
+ if (!ToEOF) n = std::min(Size, n);
+ decltype(Size) a = 0;
+ if (Fd.Read(Buf, n, &a) == false) // error
+ return false;
+ if (ToEOF == false)
+ {
+ if (a != n) // short read
+ return false;
+ }
+ else if (a == 0) // EOF
+ break;
+ Size -= a;
+ if (Add(Buf, a) == false)
+ return false;
+ }
+ return true;
+}
+bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes)
+{
+ d->CalcHashes = Hashes;
+ return AddFD(Fd, Size);
+}
+ /*}}}*/
+HashStringList Hashes::GetHashStringList()
+{
+ HashStringList hashes;
+APT_IGNORE_DEPRECATED_PUSH
+ if ((d->CalcHashes & MD5SUM) == MD5SUM)
+ hashes.push_back(HashString("MD5Sum", MD5.Result().Value()));
+ if ((d->CalcHashes & SHA1SUM) == SHA1SUM)
+ hashes.push_back(HashString("SHA1", SHA1.Result().Value()));
+ if ((d->CalcHashes & SHA256SUM) == SHA256SUM)
+ hashes.push_back(HashString("SHA256", SHA256.Result().Value()));
+ if ((d->CalcHashes & SHA512SUM) == SHA512SUM)
+ hashes.push_back(HashString("SHA512", SHA512.Result().Value()));
+APT_IGNORE_DEPRECATED_POP
+ hashes.FileSize(d->FileSize);
+ return hashes;
+}
+APT_IGNORE_DEPRECATED_PUSH
+Hashes::Hashes() : d(new PrivateHashes(~0)) { }
+Hashes::Hashes(unsigned int const Hashes) : d(new PrivateHashes(Hashes)) {}
+Hashes::Hashes(HashStringList const &Hashes) : d(new PrivateHashes(Hashes)) {}
+Hashes::~Hashes() { delete d; }
+APT_IGNORE_DEPRECATED_POP
diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h
new file mode 100644
index 0000000..28bfd34
--- /dev/null
+++ b/apt-pkg/contrib/hashes.h
@@ -0,0 +1,250 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Hashes - Simple wrapper around the hash functions
+
+ This is just used to make building the methods simpler, this is the
+ only interface required..
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APTPKG_HASHES_H
+#define APTPKG_HASHES_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/sha2.h>
+
+#include <cstring>
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::min;
+using std::vector;
+#endif
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#include <algorithm>
+#include <vector>
+#endif
+
+
+class FileFd;
+
+// helper class that contains hash function name
+// and hash
+class HashString
+{
+ protected:
+ std::string Type;
+ std::string Hash;
+ static const char * _SupportedHashes[10];
+
+ // internal helper
+ std::string GetHashForFile(std::string filename) const;
+
+ public:
+ HashString(std::string Type, std::string Hash);
+ HashString(std::string StringedHashString); // init from str as "type:hash"
+ HashString();
+
+ // get hash type used
+ std::string HashType() const { return Type; };
+ std::string HashValue() const { return Hash; };
+ APT_DEPRECATED_MSG("method was const-ified") std::string HashType() { return Type; };
+ APT_DEPRECATED_MSG("method was const-ified") std::string HashValue() { return Hash; };
+
+ // verify the given filename against the currently loaded hash
+ bool VerifyFile(std::string filename) const;
+
+ // generate a hash string from the given filename
+ bool FromFile(std::string filename);
+
+
+ // helper
+ std::string toStr() const; // convert to str as "type:hash"
+ bool empty() const;
+ bool usable() const;
+ bool operator==(HashString const &other) const;
+ bool operator!=(HashString const &other) const;
+
+ // return the list of hashes we support
+ static APT_PURE const char** SupportedHashes();
+};
+
+class HashStringList
+{
+ public:
+ /** find best hash if no specific one is requested
+ *
+ * @param type of the checksum to return, can be \b NULL
+ * @return If type is \b NULL (or the empty string) it will
+ * return the 'best' hash; otherwise the hash which was
+ * specifically requested. If no hash is found \b NULL will be returned.
+ */
+ HashString const * find(char const * const type) const;
+ HashString const * find(std::string const &type) const { return find(type.c_str()); }
+
+ /** finds the filesize hash and returns it as number
+ *
+ * @return beware: if the size isn't known we return \b 0 here,
+ * just like we would do for an empty file. If that is a problem
+ * for you have to get the size manually out of the list.
+ */
+ unsigned long long FileSize() const;
+
+ /** sets the filesize hash
+ *
+ * @param Size of the file
+ * @return @see #push_back
+ */
+ bool FileSize(unsigned long long const Size);
+
+ /** check if the given hash type is supported
+ *
+ * @param type to check
+ * @return true if supported, otherwise false
+ */
+ static APT_PURE bool supported(char const * const type);
+ /** add the given #HashString to the list
+ *
+ * @param hashString to add
+ * @return true if the hash is added because it is supported and
+ * not already a different hash of the same type included, otherwise false
+ */
+ bool push_back(const HashString &hashString);
+ /** @return size of the list of HashStrings */
+ size_t size() const { return list.size(); }
+
+ /** verify file against all hashes in the list
+ *
+ * @param filename to verify
+ * @return true if the file matches the hashsum, otherwise false
+ */
+ bool VerifyFile(std::string filename) const;
+
+ /** is the list empty ?
+ *
+ * @return \b true if the list is empty, otherwise \b false
+ */
+ bool empty() const { return list.empty(); }
+
+ /** has the list at least one good entry
+ *
+ * similar to #empty, but handles forced hashes.
+ *
+ * @return if no hash is forced, same result as #empty,
+ * if one is forced \b true if this has is available, \b false otherwise
+ */
+ bool usable() const;
+
+ typedef std::vector<HashString>::const_iterator const_iterator;
+
+ /** iterator to the first element */
+ const_iterator begin() const { return list.begin(); }
+
+ /** iterator to the end element */
+ const_iterator end() const { return list.end(); }
+
+ /** start fresh with a clear list */
+ void clear() { list.clear(); }
+
+ /** compare two HashStringList for similarity.
+ *
+ * Two lists are similar if at least one hashtype is in both lists
+ * and the hashsum matches. All hashes are checked by default,
+ * if one doesn't match false is returned regardless of how many
+ * matched before. If a hash is forced, only this hash is compared,
+ * all others are ignored.
+ */
+ bool operator==(HashStringList const &other) const;
+ bool operator!=(HashStringList const &other) const;
+
+ HashStringList() {}
+
+ // simplifying API-compatibility constructors
+ HashStringList(std::string const &hash) {
+ if (hash.empty() == false)
+ list.push_back(HashString(hash));
+ }
+ HashStringList(char const * const hash) {
+ if (hash != NULL && hash[0] != '\0')
+ list.push_back(HashString(hash));
+ }
+
+ private:
+ std::vector<HashString> list;
+};
+
+class PrivateHashes;
+class Hashes
+{
+ PrivateHashes * const d;
+
+ public:
+ /* those will disappear in the future as it is hard to add new ones this way.
+ * Use Add* to build the results and get them via GetHashStringList() instead */
+ APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") MD5Summation MD5;
+ APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") SHA1Summation SHA1;
+ APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") SHA256Summation SHA256;
+ APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") SHA512Summation SHA512;
+
+ static const int UntilEOF = 0;
+
+ bool Add(const unsigned char * const Data, unsigned long long const Size) APT_NONNULL(2);
+ APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool Add(const unsigned char * const Data, unsigned long long const Size, unsigned int const Hashes) APT_NONNULL(2);
+ inline bool Add(const char * const Data) APT_NONNULL(2)
+ {return Add(reinterpret_cast<unsigned char const *>(Data),strlen(Data));};
+ inline bool Add(const unsigned char * const Beg,const unsigned char * const End) APT_NONNULL(2,3)
+ {return Add(Beg,End-Beg);};
+
+ enum SupportedHashes { MD5SUM = (1 << 0), SHA1SUM = (1 << 1), SHA256SUM = (1 << 2),
+ SHA512SUM = (1 << 3) };
+ bool AddFD(int const Fd,unsigned long long Size = 0);
+ APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(int const Fd,unsigned long long Size, unsigned int const Hashes);
+ bool AddFD(FileFd &Fd,unsigned long long Size = 0);
+ APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes);
+
+ HashStringList GetHashStringList();
+
+APT_IGNORE_DEPRECATED_PUSH
+ /** create a Hashes object to calculate all supported hashes
+ *
+ * If ALL is too much, you can limit which Hashes are calculated
+ * with the following other constructors which mention explicitly
+ * which hashes to generate. */
+ Hashes();
+ /** @param Hashes bitflag composed of #SupportedHashes */
+ Hashes(unsigned int const Hashes);
+ /** @param Hashes is a list of hashes */
+ Hashes(HashStringList const &Hashes);
+ virtual ~Hashes();
+APT_IGNORE_DEPRECATED_POP
+
+ private:
+ APT_HIDDEN APT_PURE inline unsigned int boolsToFlag(bool const addMD5, bool const addSHA1, bool const addSHA256, bool const addSHA512)
+ {
+ unsigned int hashes = ~0;
+ if (addMD5 == false) hashes &= ~MD5SUM;
+ if (addSHA1 == false) hashes &= ~SHA1SUM;
+ if (addSHA256 == false) hashes &= ~SHA256SUM;
+ if (addSHA512 == false) hashes &= ~SHA512SUM;
+ return hashes;
+ }
+
+ public:
+APT_IGNORE_DEPRECATED_PUSH
+ APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(int const Fd, unsigned long long Size, bool const addMD5,
+ bool const addSHA1, bool const addSHA256, bool const addSHA512) {
+ return AddFD(Fd, Size, boolsToFlag(addMD5, addSHA1, addSHA256, addSHA512));
+ };
+ APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(FileFd &Fd, unsigned long long Size, bool const addMD5,
+ bool const addSHA1, bool const addSHA256, bool const addSHA512) {
+ return AddFD(Fd, Size, boolsToFlag(addMD5, addSHA1, addSHA256, addSHA512));
+ };
+APT_IGNORE_DEPRECATED_POP
+};
+
+#endif
diff --git a/apt-pkg/contrib/hashsum.cc b/apt-pkg/contrib/hashsum.cc
new file mode 100644
index 0000000..e8e86e9
--- /dev/null
+++ b/apt-pkg/contrib/hashsum.cc
@@ -0,0 +1,52 @@
+// Cryptographic API Base
+#include <config.h>
+
+#include <apt-pkg/fileutl.h>
+
+#include "hashsum_template.h"
+#include <algorithm>
+#include <unistd.h>
+
+// Summation::AddFD - Add content of file into the checksum /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool SummationImplementation::AddFD(int const Fd, unsigned long long Size) {
+ unsigned char Buf[64 * 64];
+ bool const ToEOF = (Size == 0);
+ while (Size != 0 || ToEOF)
+ {
+ unsigned long long n = sizeof(Buf);
+ if (!ToEOF) n = std::min(Size, n);
+ ssize_t const Res = read(Fd, Buf, n);
+ if (Res < 0 || (!ToEOF && Res != (ssize_t) n)) // error, or short read
+ return false;
+ if (ToEOF && Res == 0) // EOF
+ break;
+ Size -= Res;
+ Add(Buf,Res);
+ }
+ return true;
+}
+bool SummationImplementation::AddFD(FileFd &Fd, unsigned long long Size) {
+ unsigned char Buf[64 * 64];
+ bool const ToEOF = (Size == 0);
+ while (Size != 0 || ToEOF)
+ {
+ unsigned long long n = sizeof(Buf);
+ if (!ToEOF) n = std::min(Size, n);
+ unsigned long long a = 0;
+ if (Fd.Read(Buf, n, &a) == false) // error
+ return false;
+ if (ToEOF == false)
+ {
+ if (a != n) // short read
+ return false;
+ }
+ else if (a == 0) // EOF
+ break;
+ Size -= a;
+ Add(Buf, a);
+ }
+ return true;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/hashsum_template.h b/apt-pkg/contrib/hashsum_template.h
new file mode 100644
index 0000000..f11fc2f
--- /dev/null
+++ b/apt-pkg/contrib/hashsum_template.h
@@ -0,0 +1,141 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ HashSumValueTemplate - Generic Storage for a hash value
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APTPKG_HASHSUM_TEMPLATE_H
+#define APTPKG_HASHSUM_TEMPLATE_H
+
+#include <cstring>
+#include <string>
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+#include <apt-pkg/string_view.h>
+#endif
+
+#include <apt-pkg/strutl.h>
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#include <algorithm>
+#include <stdint.h>
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
+class FileFd;
+
+template<int N>
+class HashSumValue
+{
+ unsigned char Sum[N/8];
+
+ public:
+
+ // Accessors
+ bool operator ==(const HashSumValue &rhs) const
+ {
+ return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
+ }
+ bool operator !=(const HashSumValue &rhs) const
+ {
+ return memcmp(Sum,rhs.Sum,sizeof(Sum)) != 0;
+ }
+
+ std::string Value() const
+ {
+ char Conv[16] =
+ { '0','1','2','3','4','5','6','7','8','9','a','b',
+ 'c','d','e','f'
+ };
+ char Result[((N/8)*2)+1];
+ Result[(N/8)*2] = 0;
+
+ // Convert each char into two letters
+ int J = 0;
+ int I = 0;
+ for (; I != (N/8)*2; J++,I += 2)
+ {
+ Result[I] = Conv[Sum[J] >> 4];
+ Result[I + 1] = Conv[Sum[J] & 0xF];
+ }
+ return std::string(Result);
+ }
+
+ inline void Value(unsigned char S[N/8])
+ {
+ for (int I = 0; I != sizeof(Sum); ++I)
+ S[I] = Sum[I];
+ }
+
+ inline operator std::string() const
+ {
+ return Value();
+ }
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN bool Set(APT::StringView Str)
+ {
+ return Hex2Num(Str,Sum,sizeof(Sum));
+ }
+#else
+ bool Set(std::string Str)
+ {
+ return Hex2Num(Str,Sum,sizeof(Sum));
+ }
+#endif
+ inline void Set(unsigned char S[N/8])
+ {
+ for (int I = 0; I != sizeof(Sum); ++I)
+ Sum[I] = S[I];
+ }
+
+ explicit HashSumValue(std::string const &Str)
+ {
+ memset(Sum,0,sizeof(Sum));
+ Set(Str);
+ }
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN explicit HashSumValue(APT::StringView const &Str)
+ {
+ memset(Sum,0,sizeof(Sum));
+ Set(Str);
+ }
+ APT_HIDDEN explicit HashSumValue(const char *Str)
+ {
+ memset(Sum,0,sizeof(Sum));
+ Set(Str);
+ }
+#endif
+ HashSumValue()
+ {
+ memset(Sum,0,sizeof(Sum));
+ }
+};
+
+class SummationImplementation
+{
+ public:
+ virtual bool Add(const unsigned char *inbuf, unsigned long long inlen) APT_NONNULL(2) = 0;
+ inline bool Add(const char *inbuf, unsigned long long const inlen) APT_NONNULL(2)
+ { return Add(reinterpret_cast<const unsigned char *>(inbuf), inlen); }
+
+ inline bool Add(const unsigned char *Data) APT_NONNULL(2)
+ { return Add(Data, strlen(reinterpret_cast<const char *>(Data))); }
+ inline bool Add(const char *Data) APT_NONNULL(2)
+ { return Add(reinterpret_cast<const unsigned char *>(Data), strlen(Data)); }
+
+ inline bool Add(const unsigned char *Beg, const unsigned char *End) APT_NONNULL(2,3)
+ { return Add(Beg, End - Beg); }
+ inline bool Add(const char *Beg, const char *End) APT_NONNULL(2,3)
+ { return Add(reinterpret_cast<const unsigned char *>(Beg), End - Beg); }
+
+ bool AddFD(int Fd, unsigned long long Size = 0);
+ bool AddFD(FileFd &Fd, unsigned long long Size = 0);
+};
+
+#endif
diff --git a/apt-pkg/contrib/macros.h b/apt-pkg/contrib/macros.h
new file mode 100644
index 0000000..57d3f6c
--- /dev/null
+++ b/apt-pkg/contrib/macros.h
@@ -0,0 +1,173 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Macros Header - Various useful macro definitions
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Brian C. White.
+
+ ##################################################################### */
+ /*}}}*/
+// Private header
+#ifndef MACROS_H
+#define MACROS_H
+
+// MIN_VAL(SINT16) will return -0x8000 and MAX_VAL(SINT16) = 0x7FFF
+#define MIN_VAL(t) (((t)(-1) > 0) ? (t)( 0) : (t)(((1L<<(sizeof(t)*8-1)) )))
+#define MAX_VAL(t) (((t)(-1) > 0) ? (t)(-1) : (t)(((1L<<(sizeof(t)*8-1))-1)))
+
+// Min/Max functions
+#if !defined(MIN)
+#if defined(__HIGHC__)
+#define MIN(x,y) _min(x,y)
+#define MAX(x,y) _max(x,y)
+#endif
+
+// GNU C++ has a min/max operator <coolio>
+#if defined(__GNUG__)
+#define MIN(A,B) ((A) <? (B))
+#define MAX(A,B) ((A) >? (B))
+#endif
+
+/* Templates tend to mess up existing code that uses min/max because of the
+ strict matching requirements */
+#if !defined(MIN)
+#define MIN(A,B) ((A) < (B)?(A):(B))
+#define MAX(A,B) ((A) > (B)?(A):(B))
+#endif
+#endif
+
+/* Bound functions, bound will return the value b within the limits a-c
+ bounv will change b so that it is within the limits of a-c. */
+#define _bound(a,b,c) MIN(c,MAX(b,a))
+#define _boundv(a,b,c) b = _bound(a,b,c)
+#define ABS(a) (((a) < (0)) ?-(a) : (a))
+
+/* Useful count macro, use on an array of things and it will return the
+ number of items in the array */
+#define _count(a) (sizeof(a)/sizeof(a[0]))
+
+// Flag Macros
+#define FLAG(f) (1L << (f))
+#define SETFLAG(v,f) ((v) |= FLAG(f))
+#define CLRFLAG(v,f) ((v) &=~FLAG(f))
+#define CHKFLAG(v,f) ((v) & FLAG(f) ? true : false)
+
+#ifdef __GNUC__
+#define APT_GCC_VERSION (__GNUC__ << 8 | __GNUC_MINOR__)
+#else
+#define APT_GCC_VERSION 0
+#endif
+
+/* likely() and unlikely() can be used to mark boolean expressions
+ as (not) likely true which will help the compiler to optimise */
+#if APT_GCC_VERSION >= 0x0300
+ #define likely(x) __builtin_expect (!!(x), 1)
+ #define unlikely(x) __builtin_expect (!!(x), 0)
+#else
+ #define likely(x) (x)
+ #define unlikely(x) (x)
+#endif
+
+#if APT_GCC_VERSION >= 0x0300
+ #define APT_DEPRECATED __attribute__ ((deprecated))
+ #define APT_DEPRECATED_MSG(X) __attribute__ ((deprecated(X)))
+ // __attribute__((const)) is too dangerous for us, we end up using it wrongly
+ #define APT_CONST __attribute__((pure))
+ #define APT_PURE __attribute__((pure))
+ #define APT_NORETURN __attribute__((noreturn))
+ #define APT_PRINTF(n) __attribute__((format(printf, n, n + 1)))
+ #define APT_WEAK __attribute__((weak));
+#else
+ #define APT_DEPRECATED
+ #define APT_DEPRECATED_MSG
+ #define APT_CONST
+ #define APT_PURE
+ #define APT_NORETURN
+ #define APT_PRINTF(n)
+ #define APT_WEAK
+#endif
+
+#if APT_GCC_VERSION > 0x0302
+ #define APT_NONNULL(...) __attribute__((nonnull(__VA_ARGS__)))
+ #define APT_MUSTCHECK __attribute__((warn_unused_result))
+#else
+ #define APT_NONNULL(...)
+ #define APT_MUSTCHECK
+#endif
+
+#if APT_GCC_VERSION >= 0x0400
+ #define APT_SENTINEL __attribute__((sentinel))
+ #define APT_PUBLIC __attribute__ ((visibility ("default")))
+ #define APT_HIDDEN __attribute__ ((visibility ("hidden")))
+#else
+ #define APT_SENTINEL
+ #define APT_PUBLIC
+ #define APT_HIDDEN
+#endif
+
+// cold functions are unlikely() to be called
+#if APT_GCC_VERSION >= 0x0403
+ #define APT_COLD __attribute__ ((__cold__))
+ #define APT_HOT __attribute__ ((__hot__))
+#else
+ #define APT_COLD
+ #define APT_HOT
+#endif
+
+#ifndef APT_10_CLEANER_HEADERS
+#if APT_GCC_VERSION >= 0x0300
+ #define __must_check __attribute__ ((warn_unused_result))
+ #define __deprecated __attribute__ ((deprecated))
+ #define __attrib_const __attribute__ ((__const__))
+ #define __like_printf(n) __attribute__((format(printf, n, n + 1)))
+#else
+ #define __must_check /* no warn_unused_result */
+ #define __deprecated /* no deprecated */
+ #define __attrib_const /* no const attribute */
+ #define __like_printf(n) /* no like-printf */
+#endif
+#if APT_GCC_VERSION >= 0x0403
+ #define __cold __attribute__ ((__cold__))
+ #define __hot __attribute__ ((__hot__))
+#else
+ #define __cold /* no cold marker */
+ #define __hot /* no hot marker */
+#endif
+#endif
+
+#if __GNUC__ >= 4
+ #define APT_IGNORE_DEPRECATED_PUSH \
+ _Pragma("GCC diagnostic push") \
+ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+ #define APT_IGNORE_DEPRECATED_POP \
+ _Pragma("GCC diagnostic pop")
+ /* gcc has various problems with this shortcut, so prefer the long form */
+ #define APT_IGNORE_DEPRECATED(XXX) \
+ APT_IGNORE_DEPRECATED_PUSH \
+ XXX \
+ APT_IGNORE_DEPRECATED_POP
+#else
+ #define APT_IGNORE_DEPRECATED_PUSH
+ #define APT_IGNORE_DEPRECATED_POP
+ #define APT_IGNORE_DEPRECATED(XXX) XXX
+#endif
+
+#if __cplusplus >= 201103L
+ #define APT_OVERRIDE override
+#else
+ #define APT_OVERRIDE /* no c++11 standard */
+#endif
+
+// These lines are extracted by the makefiles and the buildsystem
+// Increasing MAJOR or MINOR results in the need of recompiling all
+// reverse-dependencies of libapt-pkg against the new SONAME.
+// Non-ABI-Breaks should only increase RELEASE number.
+// See also buildlib/libversion.mak
+#define APT_PKG_MAJOR 5
+#define APT_PKG_MINOR 0
+#define APT_PKG_RELEASE 2
+#define APT_PKG_ABI ((APT_PKG_MAJOR * 100) + APT_PKG_MINOR)
+
+#endif
diff --git a/apt-pkg/contrib/md5.cc b/apt-pkg/contrib/md5.cc
new file mode 100644
index 0000000..c3b5299
--- /dev/null
+++ b/apt-pkg/contrib/md5.cc
@@ -0,0 +1,279 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ MD5Sum - MD5 Message Digest Algorithm.
+
+ This code implements the MD5 message-digest algorithm. The algorithm is
+ due to Ron Rivest. This code was written by Colin Plumb in 1993, no
+ copyright is claimed. This code is in the public domain; do with it what
+ you wish.
+
+ Equivalent code is available from RSA Data Security, Inc. This code has
+ been tested against that, and is equivalent, except that you don't need to
+ include two pages of legalese with every copy.
+
+ To compute the message digest of a chunk of bytes, instantiate the class,
+ and repeatedly call one of the Add() members. When finished the Result
+ method will return the Hash and finalize the value.
+
+ Changed so as no longer to depend on Colin Plumb's `usual.h' header
+ definitions; now uses stuff from dpkg's config.h.
+ - Ian Jackson <ijackson@nyx.cs.du.edu>.
+
+ Changed into a C++ interface and made work with APT's config.h.
+ - Jason Gunthorpe <jgg@gpu.srv.ualberta.ca>
+
+ Still in the public domain.
+
+ The classes use arrays of char that are a specific size. We cast those
+ arrays to uint8_t's and go from there. This allows us to advoid using
+ the uncommon inttypes.h in a public header or internally newing memory.
+ In theory if C9x becomes nicely accepted
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/md5.h>
+
+#include <stdint.h>
+#include <string.h>
+ /*}}}*/
+
+// byteSwap - Swap bytes in a buffer /*{{{*/
+// ---------------------------------------------------------------------
+/* Swap n 32 bit longs in given buffer */
+#ifdef WORDS_BIGENDIAN
+static void byteSwap(uint32_t *buf, unsigned words)
+{
+ uint8_t *p = (uint8_t *)buf;
+
+ do
+ {
+ *buf++ = (uint32_t)((unsigned)p[3] << 8 | p[2]) << 16 |
+ ((unsigned)p[1] << 8 | p[0]);
+ p += 4;
+ } while (--words);
+}
+#else
+#define byteSwap(buf,words)
+#endif
+ /*}}}*/
+// MD5Transform - Alters an existing MD5 hash /*{{{*/
+// ---------------------------------------------------------------------
+/* The core of the MD5 algorithm, this alters an existing MD5 hash to
+ reflect the addition of 16 longwords of new data. Add blocks
+ the data and converts bytes into longwords for this routine. */
+
+// The four core functions - F1 is optimized somewhat
+// #define F1(x, y, z) (x & y | ~x & z)
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+
+// This is the central step in the MD5 algorithm.
+#define MD5STEP(f,w,x,y,z,in,s) \
+ (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
+
+static void MD5Transform(uint32_t buf[4], uint32_t const in[16])
+{
+ uint32_t a, b, c, d;
+
+ a = buf[0];
+ b = buf[1];
+ c = buf[2];
+ d = buf[3];
+
+ MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+ MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+ MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+ MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+ MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+ MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+ MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+ MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+ MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+ MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+ MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+ MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+ MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+ MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+ MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+ MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+ MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+ MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+ MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+ MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+ MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+ MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+ MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+ MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+ MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+ MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+ MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+ MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+ MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+ MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+ MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+ MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+ MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+ MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+ MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+ MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+ MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+ MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+ MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+ MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+ MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+ MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+ MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+ MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+ MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+ MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+ MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+ MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+
+ MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+ MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+ MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+ MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+ MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+ MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+ MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+ MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+ MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+ MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+ MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+ MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+ MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+ MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+ MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+ MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+
+ buf[0] += a;
+ buf[1] += b;
+ buf[2] += c;
+ buf[3] += d;
+}
+ /*}}}*/
+// MD5Summation::MD5Summation - Initialize the summer /*{{{*/
+// ---------------------------------------------------------------------
+/* This assigns the deep magic initial values */
+MD5Summation::MD5Summation()
+{
+ uint32_t *buf = (uint32_t *)Buf;
+ uint32_t *bytes = (uint32_t *)Bytes;
+
+ buf[0] = 0x67452301;
+ buf[1] = 0xefcdab89;
+ buf[2] = 0x98badcfe;
+ buf[3] = 0x10325476;
+
+ bytes[0] = 0;
+ bytes[1] = 0;
+ Done = false;
+}
+ /*}}}*/
+// MD5Summation::Add - 'Add' a data set to the hash /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool MD5Summation::Add(const unsigned char *data,unsigned long long len)
+{
+ if (Done == true)
+ return false;
+ if (len == 0)
+ return true;
+
+ uint32_t *buf = (uint32_t *)Buf;
+ uint32_t *bytes = (uint32_t *)Bytes;
+ uint32_t *in = (uint32_t *)In;
+
+ // Update byte count and carry (this could be done with a long long?)
+ uint32_t t = bytes[0];
+ if ((bytes[0] = t + len) < t)
+ bytes[1]++;
+
+ // Space available (at least 1)
+ t = 64 - (t & 0x3f);
+ if (t > len)
+ {
+ memcpy((unsigned char *)in + 64 - t,data,len);
+ return true;
+ }
+
+ // First chunk is an odd size
+ memcpy((unsigned char *)in + 64 - t,data,t);
+ byteSwap(in, 16);
+ MD5Transform(buf,in);
+ data += t;
+ len -= t;
+
+ // Process data in 64-byte chunks
+ while (len >= 64)
+ {
+ memcpy(in,data,64);
+ byteSwap(in,16);
+ MD5Transform(buf,in);
+ data += 64;
+ len -= 64;
+ }
+
+ // Handle any remaining bytes of data.
+ memcpy(in,data,len);
+
+ return true;
+}
+ /*}}}*/
+// MD5Summation::Result - Returns the value of the sum /*{{{*/
+// ---------------------------------------------------------------------
+/* Because this must add in the last bytes of the series it prevents anyone
+ from calling add after. */
+MD5SumValue MD5Summation::Result()
+{
+ uint32_t *buf = (uint32_t *)Buf;
+ uint32_t *bytes = (uint32_t *)Bytes;
+ uint32_t *in = (uint32_t *)In;
+
+ if (Done == false)
+ {
+ // Number of bytes in In
+ int count = bytes[0] & 0x3f;
+ unsigned char *p = (unsigned char *)in + count;
+
+ // Set the first char of padding to 0x80. There is always room.
+ *p++ = 0x80;
+
+ // Bytes of padding needed to make 56 bytes (-8..55)
+ count = 56 - 1 - count;
+
+ // Padding forces an extra block
+ if (count < 0)
+ {
+ memset(p,0,count + 8);
+ byteSwap(in, 16);
+ MD5Transform(buf,in);
+ p = (unsigned char *)in;
+ count = 56;
+ }
+
+ memset(p, 0, count);
+ byteSwap(in, 14);
+
+ // Append length in bits and transform
+ in[14] = bytes[0] << 3;
+ in[15] = bytes[1] << 3 | bytes[0] >> 29;
+ MD5Transform(buf,in);
+ byteSwap(buf,4);
+ Done = true;
+ }
+
+ MD5SumValue V;
+ V.Set((unsigned char *)buf);
+ return V;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/md5.h b/apt-pkg/contrib/md5.h
new file mode 100644
index 0000000..38b6c68
--- /dev/null
+++ b/apt-pkg/contrib/md5.h
@@ -0,0 +1,58 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ MD5SumValue - Storage for a MD5Sum
+ MD5Summation - MD5 Message Digest Algorithm.
+
+ This is a C++ interface to a set of MD5Sum functions. The class can
+ store a MD5Sum in 16 bytes of memory.
+
+ A MD5Sum is used to generate a (hopefully) unique 16 byte number for a
+ block of data. This can be used to guard against corruption of a file.
+ MD5 should not be used for tamper protection, use SHA or something more
+ secure.
+
+ There are two classes because computing a MD5 is not a continual
+ operation unless 64 byte blocks are used. Also the summation requires an
+ extra 18*4 bytes to operate.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APTPKG_MD5_H
+#define APTPKG_MD5_H
+
+#include <stdint.h>
+
+#include "hashsum_template.h"
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <algorithm>
+#include <cstring>
+#include <string>
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
+typedef HashSumValue<128> MD5SumValue;
+
+class MD5Summation : public SummationImplementation
+{
+ uint32_t Buf[4];
+ unsigned char Bytes[2*4];
+ unsigned char In[16*4];
+ bool Done;
+
+ public:
+
+ bool Add(const unsigned char *inbuf, unsigned long long inlen) APT_OVERRIDE APT_NONNULL(2);
+ using SummationImplementation::Add;
+
+ MD5SumValue Result();
+
+ MD5Summation();
+};
+
+#endif
diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc
new file mode 100644
index 0000000..ee6a21c
--- /dev/null
+++ b/apt-pkg/contrib/mmap.cc
@@ -0,0 +1,502 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ MMap Class - Provides 'real' mmap or a faked mmap using read().
+
+ MMap cover class.
+
+ Some broken versions of glibc2 (libc6) have a broken definition
+ of mmap that accepts a char * -- all other systems (and libc5) use
+ void *. We can't safely do anything here that would be portable, so
+ libc6 generates warnings -- which should be errors, g++ isn't properly
+ strict.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#define _DEFAULT_SOURCE
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/mmap.h>
+
+#include <cstring>
+#include <string>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// MMap::MMap - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+MMap::MMap(FileFd &F,unsigned long Flags) : Flags(Flags), iSize(0),
+ Base(nullptr), SyncToFd(nullptr)
+{
+ if ((Flags & NoImmMap) != NoImmMap)
+ Map(F);
+}
+ /*}}}*/
+// MMap::MMap - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+MMap::MMap(unsigned long Flags) : Flags(Flags), iSize(0),
+ Base(nullptr), SyncToFd(nullptr)
+{
+}
+ /*}}}*/
+// MMap::~MMap - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+MMap::~MMap()
+{
+ Close();
+}
+ /*}}}*/
+// MMap::Map - Perform the mapping /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool MMap::Map(FileFd &Fd)
+{
+ iSize = Fd.Size();
+
+ // Set the permissions.
+ int Prot = PROT_READ;
+ int Map = MAP_SHARED;
+ if ((Flags & ReadOnly) != ReadOnly)
+ Prot |= PROT_WRITE;
+ if ((Flags & Public) != Public)
+ Map = MAP_PRIVATE;
+
+ if (iSize == 0)
+ return _error->Error(_("Can't mmap an empty file"));
+
+ // We can't mmap compressed fd's directly, so we need to read it completely
+ if (Fd.IsCompressed() == true)
+ {
+ if ((Flags & ReadOnly) != ReadOnly)
+ return _error->Error("Compressed file %s can only be mapped readonly", Fd.Name().c_str());
+ Base = malloc(iSize);
+ if (unlikely(Base == nullptr))
+ return _error->Errno("MMap-compressed-malloc", _("Couldn't make mmap of %llu bytes"), iSize);
+ SyncToFd = new FileFd();
+ if (Fd.Seek(0L) == false || Fd.Read(Base, iSize) == false)
+ return _error->Error("Compressed file %s can't be read into mmap", Fd.Name().c_str());
+ return true;
+ }
+
+ // Map it.
+ Base = (Flags & Fallback) ? MAP_FAILED : mmap(0,iSize,Prot,Map,Fd.Fd(),0);
+ if (Base == MAP_FAILED)
+ {
+ if (errno == ENODEV || errno == EINVAL || (Flags & Fallback))
+ {
+ // The filesystem doesn't support this particular kind of mmap.
+ // So we allocate a buffer and read the whole file into it.
+ if ((Flags & ReadOnly) == ReadOnly)
+ {
+ // for readonly, we don't need sync, so make it simple
+ Base = malloc(iSize);
+ if (unlikely(Base == nullptr))
+ return _error->Errno("MMap-malloc", _("Couldn't make mmap of %llu bytes"), iSize);
+ SyncToFd = new FileFd();
+ return Fd.Read(Base, iSize);
+ }
+ // FIXME: Writing to compressed fd's ?
+ int const dupped_fd = dup(Fd.Fd());
+ if (dupped_fd == -1)
+ return _error->Errno("mmap", _("Couldn't duplicate file descriptor %i"), Fd.Fd());
+
+ Base = calloc(iSize, 1);
+ if (unlikely(Base == nullptr))
+ return _error->Errno("MMap-calloc", _("Couldn't make mmap of %llu bytes"), iSize);
+ SyncToFd = new FileFd (dupped_fd);
+ if (!SyncToFd->Seek(0L) || !SyncToFd->Read(Base, iSize))
+ return false;
+ }
+ else
+ return _error->Errno("MMap-mmap", _("Couldn't make mmap of %llu bytes"), iSize);
+ }
+
+ return true;
+}
+ /*}}}*/
+// MMap::Close - Close the map /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool MMap::Close(bool DoSync)
+{
+ if ((Flags & UnMapped) == UnMapped || validData() == false || iSize == 0)
+ return true;
+
+ if (DoSync == true)
+ Sync();
+
+ if (SyncToFd != NULL)
+ {
+ free(Base);
+ delete SyncToFd;
+ SyncToFd = NULL;
+ }
+ else
+ {
+ if (munmap((char *)Base, iSize) != 0)
+ _error->WarningE("mmap", _("Unable to close mmap"));
+ }
+
+ iSize = 0;
+ Base = 0;
+ return true;
+}
+ /*}}}*/
+// MMap::Sync - Synchronize the map with the disk /*{{{*/
+// ---------------------------------------------------------------------
+/* This is done in synchronous mode - the docs indicate that this will
+ not return till all IO is complete */
+bool MMap::Sync()
+{
+ if ((Flags & UnMapped) == UnMapped)
+ return true;
+
+ if ((Flags & ReadOnly) != ReadOnly)
+ {
+ if (SyncToFd != NULL)
+ {
+ if (!SyncToFd->Seek(0) || !SyncToFd->Write(Base, iSize))
+ return false;
+ }
+ else
+ {
+#ifdef _POSIX_SYNCHRONIZED_IO
+ if (msync((char *)Base, iSize, MS_SYNC) < 0)
+ return _error->Errno("msync", _("Unable to synchronize mmap"));
+#endif
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// MMap::Sync - Synchronize a section of the file to disk /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool MMap::Sync(unsigned long Start,unsigned long Stop)
+{
+ if ((Flags & UnMapped) == UnMapped)
+ return true;
+
+ if ((Flags & ReadOnly) != ReadOnly)
+ {
+ if (SyncToFd != 0)
+ {
+ if (!SyncToFd->Seek(0) ||
+ !SyncToFd->Write (((char *)Base)+Start, Stop-Start))
+ return false;
+ }
+ else
+ {
+#ifdef _POSIX_SYNCHRONIZED_IO
+ unsigned long long const PSize = sysconf(_SC_PAGESIZE);
+ if (msync((char *)Base+(Start/PSize)*PSize, Stop - Start, MS_SYNC) < 0)
+ return _error->Errno("msync", _("Unable to synchronize mmap"));
+#endif
+ }
+ }
+ return true;
+}
+ /*}}}*/
+
+// DynamicMMap::DynamicMMap - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+DynamicMMap::DynamicMMap(FileFd &F,unsigned long Flags,unsigned long const &Workspace,
+ unsigned long const &Grow, unsigned long const &Limit) :
+ MMap(F,Flags | NoImmMap), Fd(&F), WorkSpace(Workspace),
+ GrowFactor(Grow), Limit(Limit)
+{
+ // disable Moveable if we don't grow
+ if (Grow == 0)
+ this->Flags &= ~Moveable;
+
+#ifndef __linux__
+ // kfreebsd doesn't have mremap, so we use the fallback
+ if ((this->Flags & Moveable) == Moveable)
+ this->Flags |= Fallback;
+#endif
+
+ unsigned long long EndOfFile = Fd->Size();
+ if (EndOfFile > WorkSpace)
+ WorkSpace = EndOfFile;
+ else if(WorkSpace > 0)
+ {
+ Fd->Seek(WorkSpace - 1);
+ char C = 0;
+ Fd->Write(&C,sizeof(C));
+ }
+
+ Map(F);
+ iSize = EndOfFile;
+}
+ /*}}}*/
+// DynamicMMap::DynamicMMap - Constructor for a non-file backed map /*{{{*/
+// ---------------------------------------------------------------------
+/* We try here to use mmap to reserve some space - this is much more
+ cooler than the fallback solution to simply allocate a char array
+ and could come in handy later than we are able to grow such an mmap */
+DynamicMMap::DynamicMMap(unsigned long Flags,unsigned long const &WorkSpace,
+ unsigned long const &Grow, unsigned long const &Limit) :
+ MMap(Flags | NoImmMap | UnMapped), Fd(0), WorkSpace(WorkSpace),
+ GrowFactor(Grow), Limit(Limit)
+{
+ // disable Moveable if we don't grow
+ if (Grow == 0)
+ this->Flags &= ~Moveable;
+
+#ifndef __linux__
+ // kfreebsd doesn't have mremap, so we use the fallback
+ if ((this->Flags & Moveable) == Moveable)
+ this->Flags |= Fallback;
+#endif
+
+#ifdef _POSIX_MAPPED_FILES
+ if ((this->Flags & Fallback) != Fallback) {
+ // Set the permissions.
+ int Prot = PROT_READ;
+#ifdef MAP_ANONYMOUS
+ int Map = MAP_PRIVATE | MAP_ANONYMOUS;
+#else
+ int Map = MAP_PRIVATE | MAP_ANON;
+#endif
+ if ((this->Flags & ReadOnly) != ReadOnly)
+ Prot |= PROT_WRITE;
+ if ((this->Flags & Public) == Public)
+#ifdef MAP_ANONYMOUS
+ Map = MAP_SHARED | MAP_ANONYMOUS;
+#else
+ Map = MAP_SHARED | MAP_ANON;
+#endif
+
+ // use anonymous mmap() to get the memory
+ Base = (unsigned char*) mmap(0, WorkSpace, Prot, Map, -1, 0);
+
+ if(Base == MAP_FAILED)
+ _error->Errno("DynamicMMap",_("Couldn't make mmap of %lu bytes"),WorkSpace);
+
+ iSize = 0;
+ return;
+ }
+#endif
+ // fallback to a static allocated space
+ Base = calloc(WorkSpace, 1);
+ iSize = 0;
+}
+ /*}}}*/
+// DynamicMMap::~DynamicMMap - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* We truncate the file to the size of the memory data set */
+DynamicMMap::~DynamicMMap()
+{
+ if (Fd == 0)
+ {
+ if (validData() == false)
+ return;
+#ifdef _POSIX_MAPPED_FILES
+ munmap(Base, WorkSpace);
+#else
+ free(Base);
+#endif
+ return;
+ }
+
+ unsigned long long EndOfFile = iSize;
+ iSize = WorkSpace;
+ Close(false);
+ if(ftruncate(Fd->Fd(),EndOfFile) < 0)
+ _error->Errno("ftruncate", _("Failed to truncate file"));
+}
+ /*}}}*/
+// DynamicMMap::RawAllocate - Allocate a raw chunk of unaligned space /*{{{*/
+// ---------------------------------------------------------------------
+/* This allocates a block of memory aligned to the given size */
+unsigned long DynamicMMap::RawAllocate(unsigned long long Size,unsigned long Aln)
+{
+ unsigned long long Result = iSize;
+ if (Aln != 0)
+ Result += Aln - (iSize%Aln);
+
+ iSize = Result + Size;
+
+ // try to grow the buffer
+ while(Result + Size > WorkSpace)
+ {
+ if(!Grow())
+ {
+ _error->Fatal(_("Dynamic MMap ran out of room. Please increase the size "
+ "of APT::Cache-Start. Current value: %lu. (man 5 apt.conf)"), WorkSpace);
+ return 0;
+ }
+ }
+ return Result;
+}
+ /*}}}*/
+// DynamicMMap::Allocate - Pooled aligned allocation /*{{{*/
+// ---------------------------------------------------------------------
+/* This allocates an Item of size ItemSize so that it is aligned to its
+ size in the file. */
+unsigned long DynamicMMap::Allocate(unsigned long ItemSize)
+{
+ if (unlikely(ItemSize == 0))
+ {
+ _error->Fatal("Can't allocate an item of size zero");
+ return 0;
+ }
+
+ // Look for a matching pool entry
+ Pool *I;
+ Pool *Empty = 0;
+ for (I = Pools; I != Pools + PoolCount; ++I)
+ {
+ if (I->ItemSize == 0)
+ Empty = I;
+ if (I->ItemSize == ItemSize)
+ break;
+ }
+ // No pool is allocated, use an unallocated one
+ if (I == Pools + PoolCount)
+ {
+ // Woops, we ran out, the calling code should allocate more.
+ if (Empty == 0)
+ {
+ _error->Error("Ran out of allocation pools");
+ return 0;
+ }
+
+ I = Empty;
+ I->ItemSize = ItemSize;
+ I->Count = 0;
+ }
+
+ unsigned long Result = 0;
+ // Out of space, allocate some more
+ if (I->Count == 0)
+ {
+ const unsigned long size = 20*1024;
+ I->Count = size/ItemSize;
+ Pool* oldPools = Pools;
+ _error->PushToStack();
+ Result = RawAllocate(size,ItemSize);
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ if (Pools != oldPools)
+ I += Pools - oldPools;
+
+ // Does the allocation failed ?
+ if (Result == 0 && newError)
+ return 0;
+ I->Start = Result;
+ }
+ else
+ Result = I->Start;
+
+ I->Count--;
+ I->Start += ItemSize;
+ return Result/ItemSize;
+}
+ /*}}}*/
+// DynamicMMap::WriteString - Write a string to the file /*{{{*/
+// ---------------------------------------------------------------------
+/* Strings are aligned to 16 bytes */
+unsigned long DynamicMMap::WriteString(const char *String,
+ unsigned long Len)
+{
+ if (Len == std::numeric_limits<unsigned long>::max())
+ Len = strlen(String);
+
+ _error->PushToStack();
+ unsigned long Result = RawAllocate(Len+1+sizeof(uint16_t),sizeof(uint16_t));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+
+ if (Base == NULL || (Result == 0 && newError))
+ return 0;
+
+ if (Len >= std::numeric_limits<uint16_t>::max())
+ abort();
+
+ uint16_t LenToWrite = Len;
+ memcpy((char *)Base + Result, &LenToWrite, sizeof(LenToWrite));
+ Result += + sizeof(LenToWrite);
+
+ memcpy((char *)Base + Result,String,Len);
+ ((char *)Base)[Result + Len] = 0;
+ return Result;
+}
+ /*}}}*/
+// DynamicMMap::Grow - Grow the mmap /*{{{*/
+// ---------------------------------------------------------------------
+/* This method is a wrapper around different methods to (try to) grow
+ a mmap (or our char[]-fallback). Encounterable environments:
+ 1. Moveable + !Fallback + linux -> mremap with MREMAP_MAYMOVE
+ 2. Moveable + !Fallback + !linux -> not possible (forbidden by constructor)
+ 3. Moveable + Fallback -> realloc
+ 4. !Moveable + !Fallback + linux -> mremap alone - which will fail in 99,9%
+ 5. !Moveable + !Fallback + !linux -> not possible (forbidden by constructor)
+ 6. !Moveable + Fallback -> not possible
+ [ While Moveable and Fallback stands for the equally named flags and
+ "linux" indicates a linux kernel instead of a freebsd kernel. ]
+ So what you can see here is, that a MMAP which want to be growable need
+ to be moveable to have a real chance but that this method will at least try
+ the nearly impossible 4 to grow it before it finally give up: Never say never. */
+bool DynamicMMap::Grow() {
+ if (Limit != 0 && WorkSpace >= Limit)
+ return _error->Error(_("Unable to increase the size of the MMap as the "
+ "limit of %lu bytes is already reached."), Limit);
+ if (GrowFactor <= 0)
+ return _error->Error(_("Unable to increase size of the MMap as automatic growing is disabled by user."));
+
+ unsigned long long const newSize = WorkSpace + GrowFactor;
+
+ if(Fd != 0) {
+ Fd->Seek(newSize - 1);
+ char C = 0;
+ Fd->Write(&C,sizeof(C));
+ }
+
+ unsigned long const poolOffset = Pools - ((Pool*) Base);
+
+ if ((Flags & Fallback) != Fallback) {
+#if defined(_POSIX_MAPPED_FILES) && defined(__linux__)
+ #ifdef MREMAP_MAYMOVE
+
+ if ((Flags & Moveable) == Moveable)
+ Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE);
+ else
+ #endif
+ Base = mremap(Base, WorkSpace, newSize, 0);
+
+ if(Base == MAP_FAILED)
+ return false;
+#else
+ return false;
+#endif
+ } else {
+ if ((Flags & Moveable) != Moveable)
+ return false;
+
+ Base = realloc(Base, newSize);
+ if (Base == NULL)
+ return false;
+ else
+ /* Set new memory to 0 */
+ memset((char*)Base + WorkSpace, 0, newSize - WorkSpace);
+ }
+
+ Pools =(Pool*) Base + poolOffset;
+ WorkSpace = newSize;
+ return true;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h
new file mode 100644
index 0000000..63d54d2
--- /dev/null
+++ b/apt-pkg/contrib/mmap.h
@@ -0,0 +1,120 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ MMap Class - Provides 'real' mmap or a faked mmap using read().
+
+ The purpose of this code is to provide a generic way for clients to
+ access the mmap function. In environments that do not support mmap
+ from file fd's this function will use read and normal allocated
+ memory.
+
+ Writing to a public mmap will always fully commit all changes when the
+ class is deleted. Ie it will rewrite the file, unless it is readonly
+
+ The DynamicMMap class is used to help the on-disk data structure
+ generators. It provides a large allocated workspace and members
+ to allocate space from the workspace in an efficient fashion.
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_MMAP_H
+#define PKGLIB_MMAP_H
+
+#include <string>
+#include <limits>
+
+#include <sys/mman.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+using std::string;
+#endif
+
+class FileFd;
+
+/* This should be a 32 bit type, larger types use too much ram and smaller
+ types are too small. Where ever possible 'unsigned long' should be used
+ instead of this internal type */
+typedef unsigned int map_ptrloc;
+
+class MMap
+{
+ protected:
+
+ unsigned long Flags;
+ unsigned long long iSize;
+ void *Base;
+
+ // In case mmap can not be used, we keep a dup of the file
+ // descriptor that should have been mmaped so that we can write to
+ // the file in Sync().
+ FileFd *SyncToFd;
+
+ bool Map(FileFd &Fd);
+ bool Close(bool DoSync = true);
+
+ public:
+
+ enum OpenFlags {NoImmMap = (1<<0),Public = (1<<1),ReadOnly = (1<<2),
+ UnMapped = (1<<3), Moveable = (1<<4), Fallback = (1 << 5)};
+
+ // Simple accessors
+ inline operator void *() {return Base;};
+ inline void *Data() {return Base;};
+ inline unsigned long long Size() {return iSize;};
+ inline void AddSize(unsigned long long const size) {iSize += size;};
+ inline bool validData() const { return Base != MAP_FAILED && Base != 0; };
+
+ // File manipulators
+ bool Sync();
+ bool Sync(unsigned long Start,unsigned long Stop);
+
+ MMap(FileFd &F,unsigned long Flags);
+ MMap(unsigned long Flags);
+ virtual ~MMap();
+};
+
+class DynamicMMap : public MMap
+{
+ public:
+
+ // This is the allocation pool structure
+ struct Pool
+ {
+ unsigned long ItemSize;
+ unsigned long Start;
+ unsigned long Count;
+ };
+
+ protected:
+
+ FileFd *Fd;
+ unsigned long WorkSpace;
+ unsigned long const GrowFactor;
+ unsigned long const Limit;
+ Pool *Pools;
+ unsigned int PoolCount;
+
+ bool Grow();
+
+ public:
+
+ // Allocation
+ unsigned long RawAllocate(unsigned long long Size,unsigned long Aln = 0);
+ unsigned long Allocate(unsigned long ItemSize);
+ unsigned long WriteString(const char *String,unsigned long Len = std::numeric_limits<unsigned long>::max());
+ inline unsigned long WriteString(const std::string &S) {return WriteString(S.c_str(),S.length());};
+ void UsePools(Pool &P,unsigned int Count) {Pools = &P; PoolCount = Count;};
+
+ DynamicMMap(FileFd &F,unsigned long Flags,unsigned long const &WorkSpace = 2*1024*1024,
+ unsigned long const &Grow = 1024*1024, unsigned long const &Limit = 0);
+ DynamicMMap(unsigned long Flags,unsigned long const &WorkSpace = 2*1024*1024,
+ unsigned long const &Grow = 1024*1024, unsigned long const &Limit = 0);
+ virtual ~DynamicMMap();
+};
+
+#endif
diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc
new file mode 100644
index 0000000..48114ba
--- /dev/null
+++ b/apt-pkg/contrib/netrc.cc
@@ -0,0 +1,195 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ netrc file parser - returns the login and password of a give host in
+ a specified netrc-type file
+
+ Originally written by Daniel Stenberg, <daniel@haxx.se>, et al. and
+ placed into the Public Domain, do with it what you will.
+
+ ##################################################################### */
+ /*}}}*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+
+#include "netrc.h"
+
+/* Get user and password from .netrc when given a machine name */
+bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri)
+{
+ if (Uri.User.empty() == false || Uri.Password.empty() == false)
+ return true;
+ if (NetRCFile.IsOpen() == false || NetRCFile.Failed())
+ return false;
+ auto const Debug = _config->FindB("Debug::Acquire::netrc", false);
+
+ std::string lookfor;
+ if (Uri.Port != 0)
+ strprintf(lookfor, "%s:%i%s", Uri.Host.c_str(), Uri.Port, Uri.Path.c_str());
+ else
+ lookfor.append(Uri.Host).append(Uri.Path);
+
+ enum
+ {
+ NO,
+ MACHINE,
+ GOOD_MACHINE,
+ LOGIN,
+ PASSWORD
+ } active_token = NO;
+ std::string line;
+ while (NetRCFile.Eof() == false || line.empty() == false)
+ {
+ if (line.empty())
+ {
+ if (NetRCFile.ReadLine(line) == false)
+ break;
+ else if (line.empty())
+ continue;
+ }
+ auto tokenend = line.find_first_of("\t ");
+ std::string token;
+ if (tokenend != std::string::npos)
+ {
+ token = line.substr(0, tokenend);
+ line.erase(0, tokenend + 1);
+ }
+ else
+ std::swap(line, token);
+ if (token.empty())
+ continue;
+ switch (active_token)
+ {
+ case NO:
+ if (token == "machine")
+ active_token = MACHINE;
+ break;
+ case MACHINE:
+ if (token.find('/') == std::string::npos)
+ {
+ if (Uri.Port != 0 && Uri.Host == token)
+ active_token = GOOD_MACHINE;
+ else if (lookfor.compare(0, lookfor.length() - Uri.Path.length(), token) == 0)
+ active_token = GOOD_MACHINE;
+ else
+ active_token = NO;
+ }
+ else
+ {
+ if (APT::String::Startswith(lookfor, token))
+ active_token = GOOD_MACHINE;
+ else
+ active_token = NO;
+ }
+ break;
+ case GOOD_MACHINE:
+ if (token == "login")
+ active_token = LOGIN;
+ else if (token == "password")
+ active_token = PASSWORD;
+ else if (token == "machine")
+ {
+ if (Debug)
+ std::clog << "MaybeAddAuth: Found matching host adding '" << Uri.User << "' and '" << Uri.Password << "' for "
+ << (std::string)Uri << " from " << NetRCFile.Name() << std::endl;
+ return true;
+ }
+ break;
+ case LOGIN:
+ std::swap(Uri.User, token);
+ active_token = GOOD_MACHINE;
+ break;
+ case PASSWORD:
+ std::swap(Uri.Password, token);
+ active_token = GOOD_MACHINE;
+ break;
+ }
+ }
+ if (active_token == GOOD_MACHINE)
+ {
+ if (Debug)
+ std::clog << "MaybeAddAuth: Found matching host adding '" << Uri.User << "' and '" << Uri.Password << "' for "
+ << (std::string)Uri << " from " << NetRCFile.Name() << std::endl;
+ return true;
+ }
+ else if (active_token == NO)
+ {
+ if (Debug)
+ std::clog << "MaybeAddAuth: Found no matching host for "
+ << (std::string)Uri << " from " << NetRCFile.Name() << std::endl;
+ return true;
+ }
+ else if (Debug)
+ {
+ std::clog << "MaybeAddAuth: Found no matching host (syntax error: token:";
+ switch (active_token)
+ {
+ case NO: std::clog << "NO"; break;
+ case MACHINE: std::clog << "MACHINE"; break;
+ case GOOD_MACHINE: std::clog << "GOOD_MACHINE"; break;
+ case LOGIN: std::clog << "LOGIN"; break;
+ case PASSWORD: std::clog << "PASSWORD"; break;
+ }
+ std::clog << ") for " << (std::string)Uri << " from " << NetRCFile.Name() << std::endl;
+ }
+ return false;
+}
+
+void maybe_add_auth(URI &Uri, std::string NetRCFile)
+{
+ if (FileExists(NetRCFile) == false)
+ return;
+ FileFd fd;
+ if (fd.Open(NetRCFile, FileFd::ReadOnly))
+ MaybeAddAuth(fd, Uri);
+}
+
+/* Check if we are authorized. */
+bool IsAuthorized(pkgCache::PkgFileIterator const I, std::vector<std::unique_ptr<FileFd>> &authconfs)
+{
+ if (authconfs.empty())
+ {
+ _error->PushToStack();
+ auto const netrc = _config->FindFile("Dir::Etc::netrc");
+ if (not netrc.empty())
+ {
+ authconfs.emplace_back(new FileFd());
+ authconfs.back()->Open(netrc, FileFd::ReadOnly);
+ }
+
+ auto const netrcparts = _config->FindDir("Dir::Etc::netrcparts");
+ if (not netrcparts.empty())
+ {
+ for (auto const &netrc : GetListOfFilesInDir(netrcparts, "conf", true, true))
+ {
+ authconfs.emplace_back(new FileFd());
+ authconfs.back()->Open(netrc, FileFd::ReadOnly);
+ }
+ }
+ _error->RevertToStack();
+ }
+
+ // FIXME: Use the full base url
+ URI uri(std::string("http://") + I.Site() + "/");
+ for (auto &authconf : authconfs)
+ {
+ if (not authconf->IsOpen())
+ continue;
+ if (not authconf->Seek(0))
+ continue;
+
+ MaybeAddAuth(*authconf, uri);
+
+ if (not uri.User.empty() || not uri.Password.empty())
+ return true;
+ }
+
+ return false;
+}
diff --git a/apt-pkg/contrib/netrc.h b/apt-pkg/contrib/netrc.h
new file mode 100644
index 0000000..80d95ac
--- /dev/null
+++ b/apt-pkg/contrib/netrc.h
@@ -0,0 +1,39 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ netrc file parser - returns the login and password of a give host in
+ a specified netrc-type file
+
+ Originally written by Daniel Stenberg, <daniel@haxx.se>, et al. and
+ placed into the Public Domain, do with it what you will.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef NETRC_H
+#define NETRC_H
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/strutl.h>
+#endif
+
+#ifndef APT_15_CLEANER_HEADERS
+#define DOT_CHAR "."
+#define DIR_CHAR "/"
+#endif
+
+class URI;
+class FileFd;
+
+APT_DEPRECATED_MSG("Use FileFd-based MaybeAddAuth instead")
+void maybe_add_auth(URI &Uri, std::string NetRCFile);
+bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri);
+bool IsAuthorized(pkgCache::PkgFileIterator const I, std::vector<std::unique_ptr<FileFd>> &authconfs) APT_HIDDEN;
+#endif
diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc
new file mode 100644
index 0000000..806bd47
--- /dev/null
+++ b/apt-pkg/contrib/progress.cc
@@ -0,0 +1,221 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ OpProgress - Operation Progress
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/progress.h>
+
+#include <cmath>
+#include <chrono>
+#include <cstring>
+#include <iostream>
+#include <string>
+#include <stdio.h>
+#include <sys/time.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// OpProgress::OpProgress - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+OpProgress::OpProgress() : Current(0), Total(0), Size(0), SubTotal(1),
+ LastPercent(0), Percent(0)
+{
+ memset(&LastTime,0,sizeof(LastTime));
+}
+ /*}}}*/
+// OpProgress::Progress - Sub progress with no state change /*{{{*/
+// ---------------------------------------------------------------------
+/* Current is the Base Overall progress in units of Total. Cur is the sub
+ progress in units of SubTotal. Size is a scaling factor that says what
+ percent of Total SubTotal is. */
+void OpProgress::Progress(unsigned long long Cur)
+{
+ if (Total == 0 || Size == 0 || SubTotal == 0)
+ Percent = 0;
+ else
+ Percent = (Current + Cur/((double)SubTotal)*Size)*100.0/Total;
+ Update();
+}
+ /*}}}*/
+// OpProgress::OverallProgress - Set the overall progress /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void OpProgress::OverallProgress(unsigned long long Current, unsigned long long Total,
+ unsigned long long Size,const string &Op)
+{
+ this->Current = Current;
+ this->Total = Total;
+ this->Size = Size;
+ this->Op = Op;
+ SubOp = string();
+ if (Total == 0)
+ Percent = 0;
+ else
+ Percent = Current*100.0/Total;
+ Update();
+}
+ /*}}}*/
+// OpProgress::SubProgress - Set the sub progress state /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void OpProgress::SubProgress(unsigned long long SubTotal,const string &Op,
+ float const Percent)
+{
+ this->SubTotal = SubTotal;
+ if (Op.empty() == false)
+ SubOp = Op;
+ if (Total == 0 || Percent == 0)
+ this->Percent = 0;
+ else if (Percent != -1)
+ this->Percent = this->Current += (Size*Percent)/SubTotal;
+ else
+ this->Percent = Current*100.0/Total;
+ Update();
+}
+ /*}}}*/
+// OpProgress::CheckChange - See if the display should be updated /*{{{*/
+// ---------------------------------------------------------------------
+/* Progress calls are made so frequently that if every one resulted in
+ an update the display would be swamped and the system much slower.
+ This provides an upper bound on the update rate. */
+bool OpProgress::CheckChange(float Interval)
+{
+ // New major progress indication
+ if (Op != LastOp)
+ {
+ MajorChange = true;
+ LastOp = Op;
+ return true;
+ }
+ MajorChange = false;
+
+ if (SubOp != LastSubOp)
+ {
+ LastSubOp = SubOp;
+ return true;
+ }
+
+ if (std::lround(LastPercent) == std::lround(Percent))
+ return false;
+
+ LastPercent = Percent;
+
+ if (Interval == 0)
+ return false;
+
+ // Check time delta
+ auto const Now = std::chrono::steady_clock::now().time_since_epoch();
+ auto const Now_sec = std::chrono::duration_cast<std::chrono::seconds>(Now);
+ auto const Now_usec = std::chrono::duration_cast<std::chrono::microseconds>(Now - Now_sec);
+ struct timeval NowTime = { Now_sec.count(), Now_usec.count() };
+
+ std::chrono::duration<decltype(Interval)> Delta =
+ std::chrono::seconds(NowTime.tv_sec - LastTime.tv_sec) +
+ std::chrono::microseconds(NowTime.tv_sec - LastTime.tv_usec);
+
+ if (Delta.count() < Interval)
+ return false;
+ LastTime = NowTime;
+ return true;
+}
+ /*}}}*/
+// OpTextProgress::OpTextProgress - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+OpTextProgress::OpTextProgress(Configuration &Config) :
+ NoUpdate(false), NoDisplay(false), LastLen(0)
+{
+ if (Config.FindI("quiet",0) >= 1 || Config.FindB("quiet::NoUpdate", false) == true)
+ NoUpdate = true;
+ if (Config.FindI("quiet",0) >= 2 || Config.FindB("quiet::NoProgress", false) == true)
+ NoDisplay = true;
+}
+ /*}}}*/
+// OpTextProgress::Done - Clean up the display /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void OpTextProgress::Done()
+{
+ if (NoUpdate == false && OldOp.empty() == false)
+ {
+ char S[300];
+ if (_error->PendingError() == true)
+ snprintf(S,sizeof(S),_("%c%s... Error!"),'\r',OldOp.c_str());
+ else
+ snprintf(S,sizeof(S),_("%c%s... Done"),'\r',OldOp.c_str());
+ Write(S);
+ cout << endl;
+ OldOp = string();
+ }
+
+ if (NoUpdate == true && NoDisplay == false && OldOp.empty() == false)
+ {
+ OldOp = string();
+ cout << endl;
+ }
+}
+ /*}}}*/
+// OpTextProgress::Update - Simple text spinner /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void OpTextProgress::Update()
+{
+ if (CheckChange((NoUpdate == true?0:0.7)) == false)
+ return;
+
+ // No percent spinner
+ if (NoUpdate == true)
+ {
+ if (MajorChange == false)
+ return;
+ if (NoDisplay == false)
+ {
+ if (OldOp.empty() == false)
+ cout << endl;
+ OldOp = "a";
+ cout << Op << _("...") << flush;
+ }
+
+ return;
+ }
+
+ // Erase the old text and 'log' the event
+ char S[300];
+ if (MajorChange == true && OldOp.empty() == false)
+ {
+ snprintf(S,sizeof(S),"\r%s",OldOp.c_str());
+ Write(S);
+ cout << endl;
+ }
+
+ // Print the spinner
+ snprintf(S,sizeof(S),_("%c%s... %u%%"),'\r',Op.c_str(),(unsigned int)Percent);
+ Write(S);
+
+ OldOp = Op;
+}
+ /*}}}*/
+// OpTextProgress::Write - Write the progress string /*{{{*/
+// ---------------------------------------------------------------------
+/* This space fills the end to overwrite the previous text */
+void OpTextProgress::Write(const char *S)
+{
+ cout << S;
+ for (unsigned int I = strlen(S); I < LastLen; I++)
+ cout << ' ';
+ cout << '\r' << flush;
+ LastLen = strlen(S);
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h
new file mode 100644
index 0000000..4406a38
--- /dev/null
+++ b/apt-pkg/contrib/progress.h
@@ -0,0 +1,89 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ OpProgress - Operation Progress
+
+ This class allows lengthy operations to communicate their progress
+ to the GUI. The progress model is simple and is not designed to handle
+ the complex case of the multi-activity acquire class.
+
+ The model is based on the concept of an overall operation consisting
+ of a series of small sub operations. Each sub operation has it's own
+ completion status and the overall operation has it's completion status.
+ The units of the two are not mixed and are completely independent.
+
+ The UI is expected to subclass this to provide the visuals to the user.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_PROGRESS_H
+#define PKGLIB_PROGRESS_H
+
+#include <apt-pkg/macros.h>
+#include <string>
+#include <sys/time.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
+class Configuration;
+class OpProgress
+{
+ unsigned long long Current;
+ unsigned long long Total;
+ unsigned long long Size;
+ unsigned long long SubTotal;
+ float LastPercent;
+
+ // Change reduction code
+ struct timeval LastTime;
+ std::string LastOp;
+ std::string LastSubOp;
+
+ protected:
+
+ std::string Op;
+ std::string SubOp;
+ float Percent;
+
+ bool MajorChange;
+
+ bool CheckChange(float Interval = 0.7);
+ virtual void Update() {};
+
+ public:
+
+ void Progress(unsigned long long Current);
+ void SubProgress(unsigned long long SubTotal, const std::string &Op = "", float const Percent = -1);
+ void OverallProgress(unsigned long long Current,unsigned long long Total,
+ unsigned long long Size,const std::string &Op);
+ virtual void Done() {};
+
+ OpProgress();
+ virtual ~OpProgress() {};
+};
+
+class OpTextProgress : public OpProgress
+{
+ protected:
+
+ std::string OldOp;
+ bool NoUpdate;
+ bool NoDisplay;
+ unsigned long LastLen;
+ virtual void Update() APT_OVERRIDE;
+ void Write(const char *S);
+
+ public:
+
+ virtual void Done() APT_OVERRIDE;
+
+ OpTextProgress(bool NoUpdate = false) : NoUpdate(NoUpdate),
+ NoDisplay(false), LastLen(0) {};
+ OpTextProgress(Configuration &Config);
+ virtual ~OpTextProgress() {Done();};
+};
+
+#endif
diff --git a/apt-pkg/contrib/proxy.cc b/apt-pkg/contrib/proxy.cc
new file mode 100644
index 0000000..6dc3b06
--- /dev/null
+++ b/apt-pkg/contrib/proxy.cc
@@ -0,0 +1,97 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Proxy - Proxy related functions
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <iostream>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "proxy.h"
+ /*}}}*/
+
+// AutoDetectProxy - auto detect proxy /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static std::vector<std::string> CompatibleProxies(URI const &URL)
+{
+ if (URL.Access == "http" || URL.Access == "https")
+ return {"http", "https", "socks5h"};
+ return {URL.Access};
+}
+
+bool AutoDetectProxy(URI &URL)
+{
+ // we support both http/https debug options
+ bool Debug = _config->FindB("Debug::Acquire::"+URL.Access,false);
+
+ // the user already explicitly set a proxy for this host
+ if(_config->Find("Acquire::"+URL.Access+"::proxy::"+URL.Host, "") != "")
+ return true;
+
+ // option is "Acquire::http::Proxy-Auto-Detect" but we allow the old
+ // name without the dash ("-")
+ std::string AutoDetectProxyCmd = _config->Find("Acquire::"+URL.Access+"::Proxy-Auto-Detect",
+ _config->Find("Acquire::"+URL.Access+"::ProxyAutoDetect"));
+
+ if (AutoDetectProxyCmd.empty())
+ return true;
+
+ if (Debug)
+ std::clog << "Using auto proxy detect command: " << AutoDetectProxyCmd << std::endl;
+
+ if (faccessat(AT_FDCWD, AutoDetectProxyCmd.c_str(), R_OK | X_OK, AT_EACCESS) != 0)
+ return _error->Errno("access", "ProxyAutoDetect command '%s' can not be executed!", AutoDetectProxyCmd.c_str());
+
+ std::string const urlstring = URL;
+ std::vector<const char *> Args;
+ Args.push_back(AutoDetectProxyCmd.c_str());
+ Args.push_back(urlstring.c_str());
+ Args.push_back(nullptr);
+ FileFd PipeFd;
+ pid_t Child;
+ if (Popen(&Args[0], PipeFd, Child, FileFd::ReadOnly, false, true) == false)
+ return _error->Error("ProxyAutoDetect command '%s' failed!", AutoDetectProxyCmd.c_str());
+ char buf[512];
+ bool const goodread = PipeFd.ReadLine(buf, sizeof(buf)) != nullptr;
+ PipeFd.Close();
+ if (ExecWait(Child, "ProxyAutoDetect") == false)
+ return false;
+ // no output means the detector has no idea which proxy to use
+ // and apt will use the generic proxy settings
+ if (goodread == false)
+ return true;
+ auto const cleanedbuf = _strstrip(buf);
+ // We warn about this as the implementor probably meant to use DIRECT instead
+ if (cleanedbuf[0] == '\0')
+ {
+ _error->Warning("ProxyAutoDetect command returned an empty line");
+ return true;
+ }
+
+ if (Debug)
+ std::clog << "auto detect command returned: '" << cleanedbuf << "'" << std::endl;
+
+ auto compatibleTypes = CompatibleProxies(URL);
+ bool compatible = strcmp(cleanedbuf, "DIRECT") == 0 ||
+ compatibleTypes.end() != std::find_if(compatibleTypes.begin(),
+ compatibleTypes.end(), [cleanedbuf](std::string &compat) {
+ return strstr(cleanedbuf, compat.c_str()) == cleanedbuf;
+ });
+
+ if (compatible)
+ _config->Set("Acquire::"+URL.Access+"::proxy::"+URL.Host, cleanedbuf);
+
+ return true;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/proxy.h b/apt-pkg/contrib/proxy.h
new file mode 100644
index 0000000..2cbcd07
--- /dev/null
+++ b/apt-pkg/contrib/proxy.h
@@ -0,0 +1,16 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Proxy - Proxy operations
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_PROXY_H
+#define PKGLIB_PROXY_H
+
+class URI;
+bool AutoDetectProxy(URI &URL);
+
+
+#endif
diff --git a/apt-pkg/contrib/sha1.cc b/apt-pkg/contrib/sha1.cc
new file mode 100644
index 0000000..bf0b9d6
--- /dev/null
+++ b/apt-pkg/contrib/sha1.cc
@@ -0,0 +1,273 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ SHA1 - SHA-1 Secure Hash Algorithm.
+
+ This file is a Public Domain wrapper for the Public Domain SHA1
+ calculation code that is at it's end.
+
+ The algorithm was originally implemented by
+ Steve Reid <sreid@sea-to-sky.net> and later modified by
+ James H. Brown <jbrown@burgoyne.com>.
+
+ Modifications for APT were done by Alfredo K. Kojima and Jason
+ Gunthorpe.
+
+ Still in the public domain.
+
+ Test Vectors (from FIPS PUB 180-1)
+ "abc"
+ A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+ 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
+ A million repetitions of "a"
+ 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
+
+ #####################################################################
+ */
+ /*}}} */
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/sha1.h>
+
+#include <stdint.h>
+#include <string.h>
+ /*}}}*/
+
+// SHA1Transform - Alters an existing SHA-1 hash /*{{{*/
+// ---------------------------------------------------------------------
+/* The core of the SHA-1 algorithm. This alters an existing SHA-1 hash to
+ reflect the addition of 16 longwords of new data. Other routines convert
+ incoming stream data into 16 long word chunks for this routine */
+
+#define rol(value,bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
+
+/* blk0() and blk() perform the initial expand. */
+/* I got the idea of expanding during the round function from SSLeay */
+#ifndef WORDS_BIGENDIAN
+#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
+ |(rol(block->l[i],8)&0x00FF00FF))
+#else
+#define blk0(i) block->l[i]
+#endif
+#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
+ ^block->l[(i+2)&15]^block->l[i&15],1))
+
+/* (R0+R1),R2,R3,R4 are the different operations used in SHA1 */
+#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
+#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
+#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
+
+static void SHA1Transform(uint32_t state[5],uint8_t const buffer[64])
+{
+ uint32_t a,b,c,d,e;
+ typedef union
+ {
+ uint8_t c[64];
+ uint32_t l[16];
+ }
+ CHAR64LONG16;
+ CHAR64LONG16 workspace, *block;
+
+ block = &workspace;
+ memcpy(block,buffer,sizeof(workspace));
+
+ /* Copy context->state[] to working vars */
+ a = state[0];
+ b = state[1];
+ c = state[2];
+ d = state[3];
+ e = state[4];
+
+ /* 4 rounds of 20 operations each. Loop unrolled. */
+ R0(a,b,c,d,e,0);
+ R0(e,a,b,c,d,1);
+ R0(d,e,a,b,c,2);
+ R0(c,d,e,a,b,3);
+ R0(b,c,d,e,a,4);
+ R0(a,b,c,d,e,5);
+ R0(e,a,b,c,d,6);
+ R0(d,e,a,b,c,7);
+ R0(c,d,e,a,b,8);
+ R0(b,c,d,e,a,9);
+ R0(a,b,c,d,e,10);
+ R0(e,a,b,c,d,11);
+ R0(d,e,a,b,c,12);
+ R0(c,d,e,a,b,13);
+ R0(b,c,d,e,a,14);
+ R0(a,b,c,d,e,15);
+ R1(e,a,b,c,d,16);
+ R1(d,e,a,b,c,17);
+ R1(c,d,e,a,b,18);
+ R1(b,c,d,e,a,19);
+ R2(a,b,c,d,e,20);
+ R2(e,a,b,c,d,21);
+ R2(d,e,a,b,c,22);
+ R2(c,d,e,a,b,23);
+ R2(b,c,d,e,a,24);
+ R2(a,b,c,d,e,25);
+ R2(e,a,b,c,d,26);
+ R2(d,e,a,b,c,27);
+ R2(c,d,e,a,b,28);
+ R2(b,c,d,e,a,29);
+ R2(a,b,c,d,e,30);
+ R2(e,a,b,c,d,31);
+ R2(d,e,a,b,c,32);
+ R2(c,d,e,a,b,33);
+ R2(b,c,d,e,a,34);
+ R2(a,b,c,d,e,35);
+ R2(e,a,b,c,d,36);
+ R2(d,e,a,b,c,37);
+ R2(c,d,e,a,b,38);
+ R2(b,c,d,e,a,39);
+ R3(a,b,c,d,e,40);
+ R3(e,a,b,c,d,41);
+ R3(d,e,a,b,c,42);
+ R3(c,d,e,a,b,43);
+ R3(b,c,d,e,a,44);
+ R3(a,b,c,d,e,45);
+ R3(e,a,b,c,d,46);
+ R3(d,e,a,b,c,47);
+ R3(c,d,e,a,b,48);
+ R3(b,c,d,e,a,49);
+ R3(a,b,c,d,e,50);
+ R3(e,a,b,c,d,51);
+ R3(d,e,a,b,c,52);
+ R3(c,d,e,a,b,53);
+ R3(b,c,d,e,a,54);
+ R3(a,b,c,d,e,55);
+ R3(e,a,b,c,d,56);
+ R3(d,e,a,b,c,57);
+ R3(c,d,e,a,b,58);
+ R3(b,c,d,e,a,59);
+ R4(a,b,c,d,e,60);
+ R4(e,a,b,c,d,61);
+ R4(d,e,a,b,c,62);
+ R4(c,d,e,a,b,63);
+ R4(b,c,d,e,a,64);
+ R4(a,b,c,d,e,65);
+ R4(e,a,b,c,d,66);
+ R4(d,e,a,b,c,67);
+ R4(c,d,e,a,b,68);
+ R4(b,c,d,e,a,69);
+ R4(a,b,c,d,e,70);
+ R4(e,a,b,c,d,71);
+ R4(d,e,a,b,c,72);
+ R4(c,d,e,a,b,73);
+ R4(b,c,d,e,a,74);
+ R4(a,b,c,d,e,75);
+ R4(e,a,b,c,d,76);
+ R4(d,e,a,b,c,77);
+ R4(c,d,e,a,b,78);
+ R4(b,c,d,e,a,79);
+
+ /* Add the working vars back into context.state[] */
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+ state[4] += e;
+}
+ /*}}}*/
+
+// SHA1Summation::SHA1Summation - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+SHA1Summation::SHA1Summation()
+{
+ uint32_t *state = (uint32_t *)State;
+ uint32_t *count = (uint32_t *)Count;
+
+ /* SHA1 initialization constants */
+ state[0] = 0x67452301;
+ state[1] = 0xEFCDAB89;
+ state[2] = 0x98BADCFE;
+ state[3] = 0x10325476;
+ state[4] = 0xC3D2E1F0;
+ count[0] = 0;
+ count[1] = 0;
+ Done = false;
+}
+ /*}}}*/
+// SHA1Summation::Result - Return checksum value /*{{{*/
+// ---------------------------------------------------------------------
+/* Add() may not be called after this */
+SHA1SumValue SHA1Summation::Result()
+{
+ uint32_t *state = (uint32_t *)State;
+ uint32_t *count = (uint32_t *)Count;
+
+ // Apply the padding
+ if (Done == false)
+ {
+ unsigned char finalcount[8];
+
+ for (unsigned i = 0; i < 8; i++)
+ {
+ // Endian independent
+ finalcount[i] = (unsigned char) ((count[(i >= 4 ? 0 : 1)]
+ >> ((3 - (i & 3)) * 8)) & 255);
+ }
+
+ Add((unsigned char *) "\200",1);
+ while ((count[0] & 504) != 448)
+ Add((unsigned char *) "\0",1);
+
+ Add(finalcount,8); /* Should cause a SHA1Transform() */
+
+ }
+
+ Done = true;
+
+ // Transfer over the result
+ SHA1SumValue Value;
+ unsigned char res[20];
+ for (unsigned i = 0; i < 20; i++)
+ {
+ res[i] = (unsigned char)
+ ((state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
+ }
+ Value.Set(res);
+ return Value;
+}
+ /*}}}*/
+// SHA1Summation::Add - Adds content of buffer into the checksum /*{{{*/
+// ---------------------------------------------------------------------
+/* May not be called after Result() is called */
+bool SHA1Summation::Add(const unsigned char *data,unsigned long long len)
+{
+ if (Done)
+ return false;
+ if (len == 0)
+ return true;
+
+ uint32_t *state = (uint32_t *)State;
+ uint32_t *count = (uint32_t *)Count;
+ uint8_t *buffer = (uint8_t *)Buffer;
+ uint32_t i,j;
+
+ j = (count[0] >> 3) & 63;
+ if ((count[0] += len << 3) < (len << 3))
+ count[1]++;
+ count[1] += (len >> 29);
+ if ((j + len) > 63)
+ {
+ memcpy(&buffer[j],data,(i = 64 - j));
+ SHA1Transform(state,buffer);
+ for (; i + 63 < len; i += 64)
+ {
+ SHA1Transform(state,&data[i]);
+ }
+ j = 0;
+ }
+ else
+ i = 0;
+ memcpy(&buffer[j],&data[i],len - i);
+
+ return true;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/sha1.h b/apt-pkg/contrib/sha1.h
new file mode 100644
index 0000000..dffb950
--- /dev/null
+++ b/apt-pkg/contrib/sha1.h
@@ -0,0 +1,47 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ SHA1SumValue - Storage for a SHA-1 hash.
+ SHA1Summation - SHA-1 Secure Hash Algorithm.
+
+ This is a C++ interface to a set of SHA1Sum functions, that mirrors
+ the equivalent MD5 classes.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APTPKG_SHA1_H
+#define APTPKG_SHA1_H
+
+#include "hashsum_template.h"
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <algorithm>
+#include <cstring>
+#include <string>
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
+typedef HashSumValue<160> SHA1SumValue;
+
+class SHA1Summation : public SummationImplementation
+{
+ /* assumes 64-bit alignment just in case */
+ unsigned char Buffer[64] __attribute__((aligned(8)));
+ unsigned char State[5*4] __attribute__((aligned(8)));
+ unsigned char Count[2*4] __attribute__((aligned(8)));
+ bool Done;
+
+ public:
+ bool Add(const unsigned char *inbuf, unsigned long long inlen) APT_OVERRIDE APT_NONNULL(2);
+ using SummationImplementation::Add;
+
+ SHA1SumValue Result();
+
+ SHA1Summation();
+};
+
+#endif
diff --git a/apt-pkg/contrib/sha2.h b/apt-pkg/contrib/sha2.h
new file mode 100644
index 0000000..e1a8c6c
--- /dev/null
+++ b/apt-pkg/contrib/sha2.h
@@ -0,0 +1,108 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ SHA{512,256}SumValue - Storage for a SHA-{512,256} hash.
+ SHA{512,256}Summation - SHA-{512,256} Secure Hash Algorithm.
+
+ This is a C++ interface to a set of SHA{512,256}Sum functions, that mirrors
+ the equivalent MD5 & SHA1 classes.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APTPKG_SHA2_H
+#define APTPKG_SHA2_H
+
+#include <cstring>
+
+#include "hashsum_template.h"
+#include "sha2_internal.h"
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <algorithm>
+#include <string>
+#include <stdint.h>
+#endif
+
+
+typedef HashSumValue<512> SHA512SumValue;
+typedef HashSumValue<256> SHA256SumValue;
+
+class SHA2SummationBase : public SummationImplementation
+{
+ protected:
+ bool Done;
+ public:
+ bool Add(const unsigned char *inbuf, unsigned long long len) APT_OVERRIDE APT_NONNULL(2) = 0;
+
+ void Result();
+};
+
+class SHA256Summation : public SHA2SummationBase
+{
+ SHA256_CTX ctx;
+ unsigned char Sum[32];
+
+ public:
+ bool Add(const unsigned char *inbuf, unsigned long long len) APT_OVERRIDE APT_NONNULL(2)
+ {
+ if (Done)
+ return false;
+ SHA256_Update(&ctx, inbuf, len);
+ return true;
+ };
+ using SummationImplementation::Add;
+
+ SHA256SumValue Result()
+ {
+ if (!Done) {
+ SHA256_Final(Sum, &ctx);
+ Done = true;
+ }
+ SHA256SumValue res;
+ res.Set(Sum);
+ return res;
+ };
+ SHA256Summation()
+ {
+ SHA256_Init(&ctx);
+ Done = false;
+ memset(&Sum, 0, sizeof(Sum));
+ };
+};
+
+class SHA512Summation : public SHA2SummationBase
+{
+ SHA512_CTX ctx;
+ unsigned char Sum[64];
+
+ public:
+ bool Add(const unsigned char *inbuf, unsigned long long len) APT_OVERRIDE APT_NONNULL(2)
+ {
+ if (Done)
+ return false;
+ SHA512_Update(&ctx, inbuf, len);
+ return true;
+ };
+ using SummationImplementation::Add;
+
+ SHA512SumValue Result()
+ {
+ if (!Done) {
+ SHA512_Final(Sum, &ctx);
+ Done = true;
+ }
+ SHA512SumValue res;
+ res.Set(Sum);
+ return res;
+ };
+ SHA512Summation()
+ {
+ SHA512_Init(&ctx);
+ Done = false;
+ memset(&Sum, 0, sizeof(Sum));
+ };
+};
+
+
+#endif
diff --git a/apt-pkg/contrib/sha256.h b/apt-pkg/contrib/sha256.h
new file mode 100644
index 0000000..15146c9
--- /dev/null
+++ b/apt-pkg/contrib/sha256.h
@@ -0,0 +1,8 @@
+#ifndef APTPKG_SHA256_H
+#define APTPKG_SHA256_H
+
+#include "sha2.h"
+
+#warning "This header is deprecated, please include sha2.h instead"
+
+#endif
diff --git a/apt-pkg/contrib/sha2_internal.cc b/apt-pkg/contrib/sha2_internal.cc
new file mode 100644
index 0000000..92a4a86
--- /dev/null
+++ b/apt-pkg/contrib/sha2_internal.cc
@@ -0,0 +1,1089 @@
+/*
+ * FILE: sha2.c
+ * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/
+ *
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#include <config.h>
+
+#include "sha2_internal.h"
+#include <assert.h> /* assert() */
+#include <endian.h>
+#include <string.h> /* memcpy()/memset() or bcopy()/bzero() */
+
+/*
+ * ASSERT NOTE:
+ * Some sanity checking code is included using assert(). On my FreeBSD
+ * system, this additional code can be removed by compiling with NDEBUG
+ * defined. Check your own systems manpage on assert() to see how to
+ * compile WITHOUT the sanity checking code on your system.
+ *
+ * UNROLLED TRANSFORM LOOP NOTE:
+ * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform
+ * loop version for the hash transform rounds (defined using macros
+ * later in this file). Either define on the command line, for example:
+ *
+ * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c
+ *
+ * or define below:
+ *
+ * #define SHA2_UNROLL_TRANSFORM
+ *
+ */
+
+
+/*** SHA-256/384/512 Machine Architecture Definitions *****************/
+/*
+ * BYTE_ORDER NOTE:
+ *
+ * Please make sure that your system defines BYTE_ORDER. If your
+ * architecture is little-endian, make sure it also defines
+ * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are
+ * equivalent.
+ *
+ * If your system does not define the above, then you can do so by
+ * hand like this:
+ *
+ * #define LITTLE_ENDIAN 1234
+ * #define BIG_ENDIAN 4321
+ *
+ * And for little-endian machines, add:
+ *
+ * #define BYTE_ORDER LITTLE_ENDIAN
+ *
+ * Or for big-endian machines:
+ *
+ * #define BYTE_ORDER BIG_ENDIAN
+ *
+ * The FreeBSD machine this was written on defines BYTE_ORDER
+ * appropriately by including <sys/types.h> (which in turn includes
+ * <machine/endian.h> where the appropriate definitions are actually
+ * made).
+ */
+#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN)
+#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN
+#endif
+
+/*
+ * Define the followingsha2_* types to types of the correct length on
+ * the native architecture. Most BSD systems and Linux define u_intXX_t
+ * types. Machines with very recent ANSI C headers, can use the
+ * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H
+ * during compile or in the sha.h header file.
+ *
+ * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t
+ * will need to define these three typedefs below (and the appropriate
+ * ones in sha.h too) by hand according to their system architecture.
+ *
+ * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t
+ * types and pointing out recent ANSI C support for uintXX_t in inttypes.h.
+ */
+#ifdef SHA2_USE_INTTYPES_H
+
+typedef uint8_t sha2_byte; /* Exactly 1 byte */
+typedef uint32_t sha2_word32; /* Exactly 4 bytes */
+typedef uint64_t sha2_word64; /* Exactly 8 bytes */
+
+#else /* SHA2_USE_INTTYPES_H */
+
+typedef u_int8_t sha2_byte; /* Exactly 1 byte */
+typedef u_int32_t sha2_word32; /* Exactly 4 bytes */
+typedef u_int64_t sha2_word64; /* Exactly 8 bytes */
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+/* NOTE: Most of these are in sha2.h */
+#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8)
+#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16)
+#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16)
+
+
+/*** ENDIAN REVERSAL MACROS *******************************************/
+#if BYTE_ORDER == LITTLE_ENDIAN
+#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+#define REVERSE32(w,x) { \
+ (x) = __builtin_bswap32(w); \
+}
+#define REVERSE64(w,x) { \
+ (x) = __builtin_bswap64(w); \
+}
+#else
+#define REVERSE32(w,x) { \
+ sha2_word32 tmp = (w); \
+ tmp = (tmp >> 16) | (tmp << 16); \
+ (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
+}
+#define REVERSE64(w,x) { \
+ sha2_word64 tmp = (w); \
+ tmp = (tmp >> 32) | (tmp << 32); \
+ tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
+ ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
+ (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
+ ((tmp & 0x0000ffff0000ffffULL) << 16); \
+}
+#endif
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+/*
+ * Macro for incrementally adding the unsigned 64-bit integer n to the
+ * unsigned 128-bit integer (represented using a two-element array of
+ * 64-bit words):
+ */
+#define ADDINC128(w,n) { \
+ (w)[0] += (sha2_word64)(n); \
+ if ((w)[0] < (n)) { \
+ (w)[1]++; \
+ } \
+}
+
+/*
+ * Macros for copying blocks of memory and for zeroing out ranges
+ * of memory. Using these macros makes it easy to switch from
+ * using memset()/memcpy() and using bzero()/bcopy().
+ *
+ * Please define either SHA2_USE_MEMSET_MEMCPY or define
+ * SHA2_USE_BZERO_BCOPY depending on which function set you
+ * choose to use:
+ */
+#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY)
+/* Default to memset()/memcpy() if no option is specified */
+#define SHA2_USE_MEMSET_MEMCPY 1
+#endif
+#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY)
+/* Abort with an error if BOTH options are defined */
+#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both!
+#endif
+
+#ifdef SHA2_USE_MEMSET_MEMCPY
+#define MEMSET_BZERO(p,l) memset((p), 0, (l))
+#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l))
+#endif
+#ifdef SHA2_USE_BZERO_BCOPY
+#define MEMSET_BZERO(p,l) bzero((p), (l))
+#define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l))
+#endif
+
+
+/*** THE SIX LOGICAL FUNCTIONS ****************************************/
+/*
+ * Bit shifting and rotation (used by the six SHA-XYZ logical functions:
+ *
+ * NOTE: The naming of R and S appears backwards here (R is a SHIFT and
+ * S is a ROTATION) because the SHA-256/384/512 description document
+ * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this
+ * same "backwards" definition.
+ */
+/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */
+#define R(b,x) ((x) >> (b))
+/* 32-bit Rotate-right (used in SHA-256): */
+#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b))))
+/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */
+#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b))))
+
+/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */
+#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
+#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+
+/* Four of six logical functions used in SHA-256: */
+#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))
+#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))
+#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x)))
+#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))
+
+/* Four of six logical functions used in SHA-384 and SHA-512: */
+#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
+#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
+#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x)))
+#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x)))
+
+/*** INTERNAL FUNCTION PROTOTYPES *************************************/
+/* NOTE: These should not be accessed directly from outside this
+ * library -- they are intended for private internal visibility/use
+ * only.
+ */
+static void SHA512_Last(SHA512_CTX*);
+static void SHA256_Transform(SHA256_CTX*, const sha2_word32*);
+static void SHA512_Transform(SHA512_CTX*, const sha2_word64*);
+
+
+/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
+/* Hash constant words K for SHA-256: */
+const static sha2_word32 K256[64] = {
+ 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
+ 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
+ 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
+ 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
+ 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
+ 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
+ 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
+ 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
+ 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
+ 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
+ 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
+ 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
+ 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
+ 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
+ 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
+ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
+};
+
+/* Initial hash value H for SHA-256: */
+const static sha2_word32 sha256_initial_hash_value[8] = {
+ 0x6a09e667UL,
+ 0xbb67ae85UL,
+ 0x3c6ef372UL,
+ 0xa54ff53aUL,
+ 0x510e527fUL,
+ 0x9b05688cUL,
+ 0x1f83d9abUL,
+ 0x5be0cd19UL
+};
+
+/* Hash constant words K for SHA-384 and SHA-512: */
+const static sha2_word64 K512[80] = {
+ 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
+ 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
+ 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
+ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
+ 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
+ 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
+ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
+ 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
+ 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
+ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
+ 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
+ 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
+ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
+ 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
+ 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
+ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
+ 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
+ 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
+ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
+ 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
+ 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
+ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
+ 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
+ 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
+ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
+ 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
+ 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
+ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
+ 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
+ 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
+ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
+ 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
+ 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
+ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
+ 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
+ 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
+ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
+ 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
+ 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
+ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
+};
+
+/* Initial hash value H for SHA-384 */
+const static sha2_word64 sha384_initial_hash_value[8] = {
+ 0xcbbb9d5dc1059ed8ULL,
+ 0x629a292a367cd507ULL,
+ 0x9159015a3070dd17ULL,
+ 0x152fecd8f70e5939ULL,
+ 0x67332667ffc00b31ULL,
+ 0x8eb44a8768581511ULL,
+ 0xdb0c2e0d64f98fa7ULL,
+ 0x47b5481dbefa4fa4ULL
+};
+
+/* Initial hash value H for SHA-512 */
+const static sha2_word64 sha512_initial_hash_value[8] = {
+ 0x6a09e667f3bcc908ULL,
+ 0xbb67ae8584caa73bULL,
+ 0x3c6ef372fe94f82bULL,
+ 0xa54ff53a5f1d36f1ULL,
+ 0x510e527fade682d1ULL,
+ 0x9b05688c2b3e6c1fULL,
+ 0x1f83d9abfb41bd6bULL,
+ 0x5be0cd19137e2179ULL
+};
+
+/*
+ * Constant used by SHA256/384/512_End() functions for converting the
+ * digest to a readable hexadecimal character string:
+ */
+static const char *sha2_hex_digits = "0123456789abcdef";
+
+
+/*** SHA-256: *********************************************************/
+void SHA256_Init(SHA256_CTX* context) {
+ if (context == (SHA256_CTX*)0) {
+ return;
+ }
+ MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH);
+ MEMSET_BZERO(context->buffer, SHA256_BLOCK_LENGTH);
+ context->bitcount = 0;
+}
+
+#ifdef SHA2_UNROLL_TRANSFORM
+
+/* Unrolled SHA-256 round macros: */
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+
+#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
+ REVERSE32(*data++, W256[j]); \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
+ K256[j] + W256[j]; \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
+ K256[j] + (W256[j] = *data++); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND256(a,b,c,d,e,f,g,h) \
+ s0 = W256[(j+1)&0x0f]; \
+ s0 = sigma0_256(s0); \
+ s1 = W256[(j+14)&0x0f]; \
+ s1 = sigma1_256(s1); \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \
+ (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+static void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
+ sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word32 T1, *W256;
+ int j;
+
+ W256 = (sha2_word32*)context->buffer;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+ /* Rounds 0 to 15 (unrolled): */
+ ROUND256_0_TO_15(a,b,c,d,e,f,g,h);
+ ROUND256_0_TO_15(h,a,b,c,d,e,f,g);
+ ROUND256_0_TO_15(g,h,a,b,c,d,e,f);
+ ROUND256_0_TO_15(f,g,h,a,b,c,d,e);
+ ROUND256_0_TO_15(e,f,g,h,a,b,c,d);
+ ROUND256_0_TO_15(d,e,f,g,h,a,b,c);
+ ROUND256_0_TO_15(c,d,e,f,g,h,a,b);
+ ROUND256_0_TO_15(b,c,d,e,f,g,h,a);
+ } while (j < 16);
+
+ /* Now for the remaining rounds to 64: */
+ do {
+ ROUND256(a,b,c,d,e,f,g,h);
+ ROUND256(h,a,b,c,d,e,f,g);
+ ROUND256(g,h,a,b,c,d,e,f);
+ ROUND256(f,g,h,a,b,c,d,e);
+ ROUND256(e,f,g,h,a,b,c,d);
+ ROUND256(d,e,f,g,h,a,b,c);
+ ROUND256(c,d,e,f,g,h,a,b);
+ ROUND256(b,c,d,e,f,g,h,a);
+ } while (j < 64);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = 0;
+}
+
+#else /* SHA2_UNROLL_TRANSFORM */
+
+static void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
+ sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word32 T1, T2, *W256;
+ int j;
+
+ W256 = (sha2_word32*)context->buffer;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Copy data while converting to host byte order */
+ REVERSE32(*data++,W256[j]);
+ /* Apply the SHA-256 compression function to update a..h */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+ /* Apply the SHA-256 compression function to update a..h with copy */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++);
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+ T2 = Sigma0_256(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 16);
+
+ do {
+ /* Part of the message block expansion: */
+ s0 = W256[(j+1)&0x0f];
+ s0 = sigma0_256(s0);
+ s1 = W256[(j+14)&0x0f];
+ s1 = sigma1_256(s1);
+
+ /* Apply the SHA-256 compression function to update a..h */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] +
+ (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
+ T2 = Sigma0_256(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 64);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = T2 = 0;
+}
+
+#endif /* SHA2_UNROLL_TRANSFORM */
+
+void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) {
+ unsigned int freespace, usedspace;
+
+ if (len == 0) {
+ /* Calling with no data is valid - we do nothing */
+ return;
+ }
+
+ /* Sanity check: */
+ assert(context != (SHA256_CTX*)0 && data != (sha2_byte*)0);
+
+ usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
+ if (usedspace > 0) {
+ /* Calculate how much free space is available in the buffer */
+ freespace = SHA256_BLOCK_LENGTH - usedspace;
+
+ if (len >= freespace) {
+ /* Fill the buffer completely and process it */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
+ context->bitcount += freespace << 3;
+ len -= freespace;
+ data += freespace;
+ SHA256_Transform(context, (sha2_word32*)context->buffer);
+ } else {
+ /* The buffer is not yet full */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
+ context->bitcount += len << 3;
+ /* Clean up: */
+ usedspace = freespace = 0;
+ return;
+ }
+ }
+ while (len >= SHA256_BLOCK_LENGTH) {
+ /* Process as many complete blocks as we can */
+ sha2_byte buffer[SHA256_BLOCK_LENGTH];
+ MEMCPY_BCOPY(buffer, data, SHA256_BLOCK_LENGTH);
+ SHA256_Transform(context, (sha2_word32*)buffer);
+ context->bitcount += SHA256_BLOCK_LENGTH << 3;
+ len -= SHA256_BLOCK_LENGTH;
+ data += SHA256_BLOCK_LENGTH;
+ }
+ if (len > 0) {
+ /* There's left-overs, so save 'em */
+ MEMCPY_BCOPY(context->buffer, data, len);
+ context->bitcount += len << 3;
+ }
+ /* Clean up: */
+ usedspace = freespace = 0;
+}
+
+void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
+ sha2_word32 *d = (sha2_word32*)digest;
+ unsigned int usedspace;
+
+ /* Sanity check: */
+ assert(context != (SHA256_CTX*)0);
+
+ /* If no digest buffer is passed, we don't bother doing this: */
+ if (digest != (sha2_byte*)0) {
+ usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Convert FROM host byte order */
+ REVERSE64(context->bitcount,context->bitcount);
+#endif
+ if (usedspace > 0) {
+ /* Begin padding with a 1 bit: */
+ context->buffer[usedspace++] = 0x80;
+
+ if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace);
+ } else {
+ if (usedspace < SHA256_BLOCK_LENGTH) {
+ MEMSET_BZERO(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace);
+ }
+ /* Do second-to-last transform: */
+ SHA256_Transform(context, (sha2_word32*)context->buffer);
+
+ /* And set-up for the last transform: */
+ MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
+ }
+ } else {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
+
+ /* Begin padding with a 1 bit: */
+ *context->buffer = 0x80;
+ }
+ /* Set the bit count: */
+ union {
+ sha2_byte* c;
+ sha2_word64* l;
+ } bitcount;
+ bitcount.c = &context->buffer[SHA256_SHORT_BLOCK_LENGTH];
+ *(bitcount.l) = context->bitcount;
+
+ /* Final transform: */
+ SHA256_Transform(context, (sha2_word32*)context->buffer);
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ int j;
+ for (j = 0; j < 8; j++) {
+ REVERSE32(context->state[j],context->state[j]);
+ *d++ = context->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(d, context->state, SHA256_DIGEST_LENGTH);
+#endif
+ }
+
+ /* Clean up state data: */
+ MEMSET_BZERO(context, sizeof(*context));
+ usedspace = 0;
+}
+
+char *SHA256_End(SHA256_CTX* context, char buffer[]) {
+ sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest;
+ int i;
+
+ /* Sanity check: */
+ assert(context != (SHA256_CTX*)0);
+
+ if (buffer != (char*)0) {
+ SHA256_Final(digest, context);
+
+ for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
+ *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
+ *buffer++ = sha2_hex_digits[*d & 0x0f];
+ d++;
+ }
+ *buffer = (char)0;
+ } else {
+ MEMSET_BZERO(context, sizeof(*context));
+ }
+ MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH);
+ return buffer;
+}
+
+char* SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH]) {
+ SHA256_CTX context;
+
+ SHA256_Init(&context);
+ SHA256_Update(&context, data, len);
+ return SHA256_End(&context, digest);
+}
+
+
+/*** SHA-512: *********************************************************/
+void SHA512_Init(SHA512_CTX* context) {
+ if (context == (SHA512_CTX*)0) {
+ return;
+ }
+ MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH);
+ MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH);
+ context->bitcount[0] = context->bitcount[1] = 0;
+}
+
+#ifdef SHA2_UNROLL_TRANSFORM
+
+/* Unrolled SHA-512 round macros: */
+#if BYTE_ORDER == LITTLE_ENDIAN
+
+#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
+ REVERSE64(*data++, W512[j]); \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
+ K512[j] + W512[j]; \
+ (d) += T1, \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
+ j++
+
+
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
+ K512[j] + (W512[j] = *data++); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
+ j++
+
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND512(a,b,c,d,e,f,g,h) \
+ s0 = W512[(j+1)&0x0f]; \
+ s0 = sigma0_512(s0); \
+ s1 = W512[(j+14)&0x0f]; \
+ s1 = sigma1_512(s1); \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
+ (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
+ j++
+
+static void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
+ sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word64 T1, *W512 = (sha2_word64*)context->buffer;
+ int j;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+ ROUND512_0_TO_15(a,b,c,d,e,f,g,h);
+ ROUND512_0_TO_15(h,a,b,c,d,e,f,g);
+ ROUND512_0_TO_15(g,h,a,b,c,d,e,f);
+ ROUND512_0_TO_15(f,g,h,a,b,c,d,e);
+ ROUND512_0_TO_15(e,f,g,h,a,b,c,d);
+ ROUND512_0_TO_15(d,e,f,g,h,a,b,c);
+ ROUND512_0_TO_15(c,d,e,f,g,h,a,b);
+ ROUND512_0_TO_15(b,c,d,e,f,g,h,a);
+ } while (j < 16);
+
+ /* Now for the remaining rounds up to 79: */
+ do {
+ ROUND512(a,b,c,d,e,f,g,h);
+ ROUND512(h,a,b,c,d,e,f,g);
+ ROUND512(g,h,a,b,c,d,e,f);
+ ROUND512(f,g,h,a,b,c,d,e);
+ ROUND512(e,f,g,h,a,b,c,d);
+ ROUND512(d,e,f,g,h,a,b,c);
+ ROUND512(c,d,e,f,g,h,a,b);
+ ROUND512(b,c,d,e,f,g,h,a);
+ } while (j < 80);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = 0;
+}
+
+#else /* SHA2_UNROLL_TRANSFORM */
+
+static void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
+ sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer;
+ int j;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = context->state[0];
+ b = context->state[1];
+ c = context->state[2];
+ d = context->state[3];
+ e = context->state[4];
+ f = context->state[5];
+ g = context->state[6];
+ h = context->state[7];
+
+ j = 0;
+ do {
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Convert TO host byte order */
+ REVERSE64(*data++, W512[j]);
+ /* Apply the SHA-512 compression function to update a..h */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+ /* Apply the SHA-512 compression function to update a..h with copy */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++);
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+ T2 = Sigma0_512(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 16);
+
+ do {
+ /* Part of the message block expansion: */
+ s0 = W512[(j+1)&0x0f];
+ s0 = sigma0_512(s0);
+ s1 = W512[(j+14)&0x0f];
+ s1 = sigma1_512(s1);
+
+ /* Apply the SHA-512 compression function to update a..h */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
+ (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0);
+ T2 = Sigma0_512(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 80);
+
+ /* Compute the current intermediate hash value */
+ context->state[0] += a;
+ context->state[1] += b;
+ context->state[2] += c;
+ context->state[3] += d;
+ context->state[4] += e;
+ context->state[5] += f;
+ context->state[6] += g;
+ context->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = T2 = 0;
+}
+
+#endif /* SHA2_UNROLL_TRANSFORM */
+
+void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {
+ unsigned int freespace, usedspace;
+
+ if (len == 0) {
+ /* Calling with no data is valid - we do nothing */
+ return;
+ }
+
+ /* Sanity check: */
+ assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0);
+
+ usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
+ if (usedspace > 0) {
+ /* Calculate how much free space is available in the buffer */
+ freespace = SHA512_BLOCK_LENGTH - usedspace;
+
+ if (len >= freespace) {
+ /* Fill the buffer completely and process it */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
+ ADDINC128(context->bitcount, freespace << 3);
+ len -= freespace;
+ data += freespace;
+ SHA512_Transform(context, (sha2_word64*)context->buffer);
+ } else {
+ /* The buffer is not yet full */
+ MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
+ ADDINC128(context->bitcount, len << 3);
+ /* Clean up: */
+ usedspace = freespace = 0;
+ return;
+ }
+ }
+ while (len >= SHA512_BLOCK_LENGTH) {
+ /* Process as many complete blocks as we can */
+ sha2_byte buffer[SHA512_BLOCK_LENGTH];
+ MEMCPY_BCOPY(buffer, data, SHA512_BLOCK_LENGTH);
+ SHA512_Transform(context, (sha2_word64*)buffer);
+ ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3);
+ len -= SHA512_BLOCK_LENGTH;
+ data += SHA512_BLOCK_LENGTH;
+ }
+ if (len > 0) {
+ /* There's left-overs, so save 'em */
+ MEMCPY_BCOPY(context->buffer, data, len);
+ ADDINC128(context->bitcount, len << 3);
+ }
+ /* Clean up: */
+ usedspace = freespace = 0;
+}
+
+static void SHA512_Last(SHA512_CTX* context) {
+ unsigned int usedspace;
+
+ usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Convert FROM host byte order */
+ REVERSE64(context->bitcount[0],context->bitcount[0]);
+ REVERSE64(context->bitcount[1],context->bitcount[1]);
+#endif
+ if (usedspace > 0) {
+ /* Begin padding with a 1 bit: */
+ context->buffer[usedspace++] = 0x80;
+
+ if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace);
+ } else {
+ if (usedspace < SHA512_BLOCK_LENGTH) {
+ MEMSET_BZERO(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace);
+ }
+ /* Do second-to-last transform: */
+ SHA512_Transform(context, (sha2_word64*)context->buffer);
+
+ /* And set-up for the last transform: */
+ MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH - 2);
+ }
+ } else {
+ /* Prepare for final transform: */
+ MEMSET_BZERO(context->buffer, SHA512_SHORT_BLOCK_LENGTH);
+
+ /* Begin padding with a 1 bit: */
+ *context->buffer = 0x80;
+ }
+ /* Store the length of input data (in bits): */
+ union {
+ sha2_byte* c;
+ sha2_word64* l;
+ } bitcount;
+ bitcount.c = &context->buffer[SHA512_SHORT_BLOCK_LENGTH];
+ bitcount.l[0] = context->bitcount[1];
+ bitcount.l[1] = context->bitcount[0];
+
+ /* Final transform: */
+ SHA512_Transform(context, (sha2_word64*)context->buffer);
+}
+
+void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {
+ sha2_word64 *d = (sha2_word64*)digest;
+
+ /* Sanity check: */
+ assert(context != (SHA512_CTX*)0);
+
+ /* If no digest buffer is passed, we don't bother doing this: */
+ if (digest != (sha2_byte*)0) {
+ SHA512_Last(context);
+
+ /* Save the hash data for output: */
+#if BYTE_ORDER == LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ int j;
+ for (j = 0; j < 8; j++) {
+ REVERSE64(context->state[j],context->state[j]);
+ *d++ = context->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(d, context->state, SHA512_DIGEST_LENGTH);
+#endif
+ }
+
+ /* Zero out state data */
+ MEMSET_BZERO(context, sizeof(*context));
+}
+
+char *SHA512_End(SHA512_CTX* context, char buffer[]) {
+ sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest;
+ int i;
+
+ /* Sanity check: */
+ assert(context != (SHA512_CTX*)0);
+
+ if (buffer != (char*)0) {
+ SHA512_Final(digest, context);
+
+ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) {
+ *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
+ *buffer++ = sha2_hex_digits[*d & 0x0f];
+ d++;
+ }
+ *buffer = (char)0;
+ } else {
+ MEMSET_BZERO(context, sizeof(*context));
+ }
+ MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH);
+ return buffer;
+}
+
+char* SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) {
+ SHA512_CTX context;
+
+ SHA512_Init(&context);
+ SHA512_Update(&context, data, len);
+ return SHA512_End(&context, digest);
+}
+
+
+/*** SHA-384: *********************************************************/
+void SHA384_Init(SHA384_CTX* context) {
+ if (context == (SHA384_CTX*)0) {
+ return;
+ }
+ MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH);
+ MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH);
+ context->bitcount[0] = context->bitcount[1] = 0;
+}
+
+void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {
+ SHA512_Update((SHA512_CTX*)context, data, len);
+}
+
+void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {
+ sha2_word64 *d = (sha2_word64*)digest;
+
+ /* Sanity check: */
+ assert(context != (SHA384_CTX*)0);
+
+ /* If no digest buffer is passed, we don't bother doing this: */
+ if (digest != (sha2_byte*)0) {
+ SHA512_Last((SHA512_CTX*)context);
+
+ /* Save the hash data for output: */
+#if BYTE_ORDER == LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ int j;
+ for (j = 0; j < 6; j++) {
+ REVERSE64(context->state[j],context->state[j]);
+ *d++ = context->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(d, context->state, SHA384_DIGEST_LENGTH);
+#endif
+ }
+
+ /* Zero out state data */
+ MEMSET_BZERO(context, sizeof(*context));
+}
+
+char *SHA384_End(SHA384_CTX* context, char buffer[]) {
+ sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest;
+ int i;
+
+ /* Sanity check: */
+ assert(context != (SHA384_CTX*)0);
+
+ if (buffer != (char*)0) {
+ SHA384_Final(digest, context);
+
+ for (i = 0; i < SHA384_DIGEST_LENGTH; i++) {
+ *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
+ *buffer++ = sha2_hex_digits[*d & 0x0f];
+ d++;
+ }
+ *buffer = (char)0;
+ } else {
+ MEMSET_BZERO(context, sizeof(*context));
+ }
+ MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH);
+ return buffer;
+}
+
+char* SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) {
+ SHA384_CTX context;
+
+ SHA384_Init(&context);
+ SHA384_Update(&context, data, len);
+ return SHA384_End(&context, digest);
+}
+
diff --git a/apt-pkg/contrib/sha2_internal.h b/apt-pkg/contrib/sha2_internal.h
new file mode 100644
index 0000000..78d1d36
--- /dev/null
+++ b/apt-pkg/contrib/sha2_internal.h
@@ -0,0 +1,188 @@
+/*
+ * FILE: sha2.h
+ * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/
+ *
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#ifndef __SHA2_H__
+#define __SHA2_H__
+
+/*
+ * Import u_intXX_t size_t type definitions from system headers. You
+ * may need to change this, or define these things yourself in this
+ * file.
+ */
+#include <sys/types.h>
+
+#ifdef SHA2_USE_INTTYPES_H
+
+#include <inttypes.h>
+#include <stddef.h>
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+#define SHA256_BLOCK_LENGTH 64
+#define SHA256_DIGEST_LENGTH 32
+#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
+#define SHA384_BLOCK_LENGTH 128
+#define SHA384_DIGEST_LENGTH 48
+#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
+#define SHA512_BLOCK_LENGTH 128
+#define SHA512_DIGEST_LENGTH 64
+#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
+
+
+/*** SHA-256/384/512 Context Structures *******************************/
+/* NOTE: If your architecture does not define either u_intXX_t types or
+ * uintXX_t (from inttypes.h), you may need to define things by hand
+ * for your system:
+ */
+#if 0
+typedef unsigned char u_int8_t; /* 1-byte (8-bits) */
+typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */
+typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */
+#endif
+/*
+ * Most BSD systems already define u_intXX_t types, as does Linux.
+ * Some systems, however, like Compaq's Tru64 Unix instead can use
+ * uintXX_t types defined by very recent ANSI C standards and included
+ * in the file:
+ *
+ * #include <inttypes.h>
+ *
+ * If you choose to use <inttypes.h> then please define:
+ *
+ * #define SHA2_USE_INTTYPES_H
+ *
+ * Or on the command line during compile:
+ *
+ * cc -DSHA2_USE_INTTYPES_H ...
+ */
+#ifdef SHA2_USE_INTTYPES_H
+
+typedef struct _SHA256_CTX {
+ uint32_t state[8];
+ uint64_t bitcount;
+ uint8_t buffer[SHA256_BLOCK_LENGTH];
+} SHA256_CTX;
+typedef struct _SHA512_CTX {
+ uint64_t state[8];
+ uint64_t bitcount[2];
+ uint8_t buffer[SHA512_BLOCK_LENGTH];
+} SHA512_CTX;
+
+#else /* SHA2_USE_INTTYPES_H */
+
+typedef struct _SHA256_CTX {
+ u_int32_t state[8];
+ u_int64_t bitcount;
+ u_int8_t buffer[SHA256_BLOCK_LENGTH];
+} SHA256_CTX;
+typedef struct _SHA512_CTX {
+ u_int64_t state[8];
+ u_int64_t bitcount[2];
+ u_int8_t buffer[SHA512_BLOCK_LENGTH];
+} SHA512_CTX;
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+typedef SHA512_CTX SHA384_CTX;
+
+
+/*** SHA-256/384/512 Function Prototypes ******************************/
+#ifndef NOPROTO
+#ifdef SHA2_USE_INTTYPES_H
+
+void SHA256_Init(SHA256_CTX *);
+void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
+void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
+char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
+char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+
+void SHA384_Init(SHA384_CTX*);
+void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
+void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
+char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
+char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+
+void SHA512_Init(SHA512_CTX*);
+void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
+void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
+char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
+char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
+
+#else /* SHA2_USE_INTTYPES_H */
+
+void SHA256_Init(SHA256_CTX *);
+void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t);
+void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
+char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
+char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+
+void SHA384_Init(SHA384_CTX*);
+void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t);
+void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
+char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
+char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+
+void SHA512_Init(SHA512_CTX*);
+void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t);
+void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
+char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
+char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+#else /* NOPROTO */
+
+void SHA256_Init();
+void SHA256_Update();
+void SHA256_Final();
+char* SHA256_End();
+char* SHA256_Data();
+
+void SHA384_Init();
+void SHA384_Update();
+void SHA384_Final();
+char* SHA384_End();
+char* SHA384_Data();
+
+void SHA512_Init();
+void SHA512_Update();
+void SHA512_Final();
+char* SHA512_End();
+char* SHA512_Data();
+
+#endif /* NOPROTO */
+
+#endif /* __SHA2_H__ */
+
diff --git a/apt-pkg/contrib/sptr.h b/apt-pkg/contrib/sptr.h
new file mode 100644
index 0000000..77806d9
--- /dev/null
+++ b/apt-pkg/contrib/sptr.h
@@ -0,0 +1,74 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Trivial non-ref counted 'smart pointer'
+
+ This is really only good to eliminate
+ {
+ delete Foo;
+ return;
+ }
+
+ Blocks from functions.
+
+ I think G++ has become good enough that doing this won't have much
+ code size implications.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef SMART_POINTER_H
+#define SMART_POINTER_H
+#include <apt-pkg/macros.h>
+
+template <class T>
+class APT_DEPRECATED_MSG("use std::unique_ptr instead") SPtr
+{
+ public:
+ T *Ptr;
+
+ inline T *operator ->() {return Ptr;};
+ inline T &operator *() {return *Ptr;};
+ inline operator T *() {return Ptr;};
+ inline operator void *() {return Ptr;};
+ inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
+ inline void operator =(T *N) {Ptr = N;};
+ inline bool operator ==(T *lhs) const {return Ptr == lhs;};
+ inline bool operator !=(T *lhs) const {return Ptr != lhs;};
+ inline T*Get() {return Ptr;};
+
+ inline SPtr(T *Ptr) : Ptr(Ptr) {};
+ inline SPtr() : Ptr(0) {};
+ inline ~SPtr() {delete Ptr;};
+};
+
+template <class T>
+class APT_DEPRECATED_MSG("use std::unique_ptr instead") SPtrArray
+{
+ public:
+ T *Ptr;
+
+ //inline T &operator *() {return *Ptr;};
+ inline operator T *() {return Ptr;};
+ inline operator void *() {return Ptr;};
+ inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
+ //inline T &operator [](signed long I) {return Ptr[I];};
+ inline void operator =(T *N) {Ptr = N;};
+ inline bool operator ==(T *lhs) const {return Ptr == lhs;};
+ inline bool operator !=(T *lhs) const {return Ptr != lhs;};
+ inline T *Get() {return Ptr;};
+
+ inline SPtrArray(T *Ptr) : Ptr(Ptr) {};
+ inline SPtrArray() : Ptr(0) {};
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wunsafe-loop-optimizations"
+ // gcc warns about this, but we can do nothing here…
+#endif
+ inline ~SPtrArray() {delete [] Ptr;};
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+};
+
+#endif
diff --git a/apt-pkg/contrib/srvrec.cc b/apt-pkg/contrib/srvrec.cc
new file mode 100644
index 0000000..a97d9c6
--- /dev/null
+++ b/apt-pkg/contrib/srvrec.cc
@@ -0,0 +1,204 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ SRV record support
+
+ ##################################################################### */
+ /*}}}*/
+#include <config.h>
+
+#include <netdb.h>
+
+#include <arpa/nameser.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <resolv.h>
+#include <time.h>
+
+#include <algorithm>
+#include <tuple>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/strutl.h>
+
+#include "srvrec.h"
+
+bool SrvRec::operator==(SrvRec const &other) const
+{
+ return (std::tie(target, priority, weight, port) ==
+ std::tie(other.target, other.priority, other.weight, other.port));
+}
+
+bool GetSrvRecords(std::string host, int port, std::vector<SrvRec> &Result)
+{
+ // try SRV only for hostnames, not for IP addresses
+ {
+ struct in_addr addr4;
+ struct in6_addr addr6;
+ if (inet_pton(AF_INET, host.c_str(), &addr4) == 1 ||
+ inet_pton(AF_INET6, host.c_str(), &addr6) == 1)
+ return true;
+ }
+
+ std::string target;
+ int res;
+ struct servent s_ent_buf;
+ struct servent *s_ent = nullptr;
+ std::vector<char> buf(1024);
+
+ res = getservbyport_r(htons(port), "tcp", &s_ent_buf, buf.data(), buf.size(), &s_ent);
+ if (res != 0 || s_ent == nullptr)
+ return false;
+
+ strprintf(target, "_%s._tcp.%s", s_ent->s_name, host.c_str());
+ return GetSrvRecords(target, Result);
+}
+
+bool GetSrvRecords(std::string name, std::vector<SrvRec> &Result)
+{
+ unsigned char answer[PACKETSZ];
+ int answer_len, compressed_name_len;
+ int answer_count;
+
+ if (res_init() != 0)
+ return _error->Errno("res_init", "Failed to init resolver");
+
+ answer_len = res_query(name.c_str(), C_IN, T_SRV, answer, sizeof(answer));
+ if (answer_len == -1)
+ return false;
+ if (answer_len < (int)sizeof(HEADER))
+ return _error->Warning("Not enough data from res_query (%i)", answer_len);
+
+ // check the header
+ HEADER *header = (HEADER*)answer;
+ if (header->rcode != NOERROR)
+ return _error->Warning("res_query returned rcode %i", header->rcode);
+ answer_count = ntohs(header->ancount);
+ if (answer_count <= 0)
+ return _error->Warning("res_query returned no answers (%i) ", answer_count);
+
+ // skip the header
+ compressed_name_len = dn_skipname(answer+sizeof(HEADER), answer+answer_len);
+ if(compressed_name_len < 0)
+ return _error->Warning("dn_skipname failed %i", compressed_name_len);
+
+ // pt points to the first answer record, go over all of them now
+ unsigned char *pt = answer+sizeof(HEADER)+compressed_name_len+QFIXEDSZ;
+ while ((int)Result.size() < answer_count && pt < answer+answer_len)
+ {
+ u_int16_t type, klass, priority, weight, port, dlen;
+ char buf[MAXDNAME];
+
+ compressed_name_len = dn_skipname(pt, answer+answer_len);
+ if (compressed_name_len < 0)
+ return _error->Warning("dn_skipname failed (2): %i",
+ compressed_name_len);
+ pt += compressed_name_len;
+ if (((answer+answer_len) - pt) < 16)
+ return _error->Warning("packet too short");
+
+ // extract the data out of the result buffer
+ #define extract_u16(target, p) target = *p++ << 8; target |= *p++;
+
+ extract_u16(type, pt);
+ if(type != T_SRV)
+ return _error->Warning("Unexpected type excepted %x != %x",
+ T_SRV, type);
+ extract_u16(klass, pt);
+ if(klass != C_IN)
+ return _error->Warning("Unexpected class excepted %x != %x",
+ C_IN, klass);
+ pt += 4; // ttl
+ extract_u16(dlen, pt);
+ extract_u16(priority, pt);
+ extract_u16(weight, pt);
+ extract_u16(port, pt);
+
+ #undef extract_u16
+
+ compressed_name_len = dn_expand(answer, answer+answer_len, pt, buf, sizeof(buf));
+ if(compressed_name_len < 0)
+ return _error->Warning("dn_expand failed %i", compressed_name_len);
+ pt += compressed_name_len;
+
+ // add it to our class
+ Result.emplace_back(buf, priority, weight, port);
+ }
+
+ // implement load balancing as specified in RFC-2782
+
+ // sort them by priority
+ std::stable_sort(Result.begin(), Result.end());
+
+ for(std::vector<SrvRec>::iterator I = Result.begin();
+ I != Result.end(); ++I)
+ {
+ if (_config->FindB("Debug::Acquire::SrvRecs", false) == true)
+ {
+ std::cerr << "SrvRecs: got " << I->target
+ << " prio: " << I->priority
+ << " weight: " << I->weight
+ << std::endl;
+ }
+ }
+
+ return true;
+}
+
+SrvRec PopFromSrvRecs(std::vector<SrvRec> &Recs)
+{
+ // FIXME: instead of the simplistic shuffle below use the algorithm
+ // described in rfc2782 (with weights)
+ // and figure out how the weights need to be adjusted if
+ // a host refuses connections
+
+#if 0 // all code below is only needed for the weight adjusted selection
+ // assign random number ranges
+ int prev_weight = 0;
+ int prev_priority = 0;
+ for(std::vector<SrvRec>::iterator I = Result.begin();
+ I != Result.end(); ++I)
+ {
+ if(prev_priority != I->priority)
+ prev_weight = 0;
+ I->random_number_range_start = prev_weight;
+ I->random_number_range_end = prev_weight + I->weight;
+ prev_weight = I->random_number_range_end;
+ prev_priority = I->priority;
+
+ if (_config->FindB("Debug::Acquire::SrvRecs", false) == true)
+ std::cerr << "SrvRecs: got " << I->target
+ << " prio: " << I->priority
+ << " weight: " << I->weight
+ << std::endl;
+ }
+
+ // go over the code in reverse order and note the max random range
+ int max = 0;
+ prev_priority = 0;
+ for(std::vector<SrvRec>::iterator I = Result.end();
+ I != Result.begin(); --I)
+ {
+ if(prev_priority != I->priority)
+ max = I->random_number_range_end;
+ I->random_number_range_max = max;
+ }
+#endif
+
+ // shuffle in a very simplistic way for now (equal weights)
+ std::vector<SrvRec>::iterator I = Recs.begin();
+ std::vector<SrvRec>::iterator const J = std::find_if(Recs.begin(), Recs.end(),
+ [&I](SrvRec const &J) { return I->priority != J.priority; });
+
+ // clock seems random enough.
+ I += std::max(static_cast<clock_t>(0), clock()) % std::distance(I, J);
+ SrvRec const selected = std::move(*I);
+ Recs.erase(I);
+
+ if (_config->FindB("Debug::Acquire::SrvRecs", false) == true)
+ std::cerr << "PopFromSrvRecs: selecting " << selected.target << std::endl;
+
+ return selected;
+}
diff --git a/apt-pkg/contrib/srvrec.h b/apt-pkg/contrib/srvrec.h
new file mode 100644
index 0000000..e22b7a1
--- /dev/null
+++ b/apt-pkg/contrib/srvrec.h
@@ -0,0 +1,54 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ SRV record support
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef SRVREC_H
+#define SRVREC_H
+
+#include <string>
+#include <vector>
+#include <arpa/nameser.h>
+
+class SrvRec
+{
+ public:
+ std::string target;
+ u_int16_t priority;
+ u_int16_t weight;
+ u_int16_t port;
+
+ // each server is assigned a interval [start, end] in the space of [0, max]
+ int random_number_range_start;
+ int random_number_range_end;
+ int random_number_range_max;
+
+ bool operator<(SrvRec const &other) const {
+ return this->priority < other.priority;
+ }
+ bool operator==(SrvRec const &other) const;
+
+ SrvRec(std::string const Target, u_int16_t const Priority,
+ u_int16_t const Weight, u_int16_t const Port) :
+ target(Target), priority(Priority), weight(Weight), port(Port),
+ random_number_range_start(0), random_number_range_end(0),
+ random_number_range_max(0) {}
+};
+
+/** \brief Get SRV records from host/port (builds the query string internally)
+ */
+bool GetSrvRecords(std::string name, std::vector<SrvRec> &Result);
+
+/** \brief Get SRV records for query string like: _http._tcp.example.com
+ */
+bool GetSrvRecords(std::string host, int port, std::vector<SrvRec> &Result);
+
+/** \brief Pop a single SRV record from the vector of SrvRec taking
+ * priority and weight into account
+ */
+SrvRec PopFromSrvRecs(std::vector<SrvRec> &Recs);
+
+#endif
diff --git a/apt-pkg/contrib/string_view.h b/apt-pkg/contrib/string_view.h
new file mode 100644
index 0000000..536744e
--- /dev/null
+++ b/apt-pkg/contrib/string_view.h
@@ -0,0 +1,132 @@
+/*
+ * Basic implementation of string_view
+ *
+ * (C) 2015 Julian Andres Klode <jak@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#if !defined(APT_STRINGVIEW_H) && defined(APT_PKG_EXPOSE_STRING_VIEW)
+#define APT_STRINGVIEW_H
+#include <apt-pkg/macros.h>
+#include <string>
+#include <string.h>
+
+namespace APT {
+
+/**
+ * \brief Simple subset of std::string_view from C++17
+ *
+ * This is an internal implementation of the subset of std::string_view
+ * used by APT. It is not meant to be used in programs, only inside the
+ * library for performance critical paths.
+ */
+class APT_HIDDEN StringView {
+ const char *data_;
+ size_t size_;
+
+public:
+ static constexpr size_t npos = static_cast<size_t>(-1);
+ static_assert(APT::StringView::npos == std::string::npos, "npos values are different");
+
+ /* Constructors */
+ constexpr StringView() : data_(""), size_(0) {}
+ constexpr StringView(const char *data, size_t size) : data_(data), size_(size) {}
+
+ StringView(const char *data) : data_(data), size_(strlen(data)) {}
+ StringView(std::string const & str): data_(str.data()), size_(str.size()) {}
+
+
+ /* Viewers */
+ constexpr StringView substr(size_t pos, size_t n = npos) const {
+ return StringView(data_ + pos, n > (size_ - pos) ? (size_ - pos) : n);
+ }
+
+ size_t find(int c, size_t pos) const {
+ if (pos == 0)
+ return find(c);
+ size_t const found = substr(pos).find(c);
+ if (found == npos)
+ return npos;
+ return pos + found;
+ }
+ size_t find(int c) const {
+ const char *found = static_cast<const char*>(memchr(data_, c, size_));
+
+ if (found == NULL)
+ return npos;
+
+ return found - data_;
+ }
+
+ size_t rfind(int c, size_t pos) const {
+ if (pos == npos)
+ return rfind(c);
+ return APT::StringView(data_, pos).rfind(c);
+ }
+ size_t rfind(int c) const {
+ const char *found = static_cast<const char*>(memrchr(data_, c, size_));
+
+ if (found == NULL)
+ return npos;
+
+ return found - data_;
+ }
+
+ /* Conversions */
+ std::string to_string() const {
+ return std::string(data_, size_);
+ }
+
+ /* Comparisons */
+ int compare(size_t pos, size_t n, StringView other) const {
+ return substr(pos, n).compare(other);
+ }
+
+ int compare(StringView other) const {
+ int res;
+
+ res = memcmp(data_, other.data_, std::min(size_, other.size_));
+ if (res != 0)
+ return res;
+ if (size_ == other.size_)
+ return res;
+
+ return (size_ > other.size_) ? 1 : -1;
+ }
+
+ /* Optimization: If size not equal, string cannot be equal */
+ bool operator ==(StringView other) const { return size_ == other.size_ && compare(other) == 0; }
+ bool operator !=(StringView other) const { return !(*this == other); }
+
+ /* Accessors */
+ constexpr bool empty() const { return size_ == 0; }
+ constexpr const char* data() const { return data_; }
+ constexpr const char* begin() const { return data_; }
+ constexpr const char* end() const { return data_ + size_; }
+ constexpr char operator [](size_t i) const { return data_[i]; }
+ constexpr size_t size() const { return size_; }
+ constexpr size_t length() const { return size_; }
+};
+
+/**
+ * \brief Faster comparison for string views (compare size before data)
+ *
+ * Still stable, but faster than the normal ordering. */
+static inline int StringViewCompareFast(StringView a, StringView b) {
+ if (a.size() != b.size())
+ return a.size() - b.size();
+
+ return memcmp(a.data(), b.data(), a.size());
+}
+
+
+}
+
+inline bool operator ==(const char *other, APT::StringView that);
+inline bool operator ==(const char *other, APT::StringView that) { return that.operator==(other); }
+
+#endif
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
new file mode 100644
index 0000000..50344d1
--- /dev/null
+++ b/apt-pkg/contrib/strutl.cc
@@ -0,0 +1,1840 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ String Util - Some useful string functions.
+
+ These have been collected from here and there to do all sorts of useful
+ things to strings. They are useful in file parsers, URI handlers and
+ especially in APT methods.
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe <jgg@gpu.srv.ualberta.ca>
+
+ ##################################################################### */
+ /*}}}*/
+// Includes /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <array>
+#include <iomanip>
+#include <locale>
+#include <sstream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <ctype.h>
+#include <errno.h>
+#include <iconv.h>
+#include <regex.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+// Strip - Remove white space from the front and back of a string /*{{{*/
+// ---------------------------------------------------------------------
+namespace APT {
+ namespace String {
+std::string Strip(const std::string &str)
+{
+ // ensure we have at least one character
+ if (str.empty() == true)
+ return str;
+
+ char const * const s = str.c_str();
+ size_t start = 0;
+ for (; isspace(s[start]) != 0; ++start)
+ ; // find the first not-space
+
+ // string contains only whitespaces
+ if (s[start] == '\0')
+ return "";
+
+ size_t end = str.length() - 1;
+ for (; isspace(s[end]) != 0; --end)
+ ; // find the last not-space
+
+ return str.substr(start, end - start + 1);
+}
+
+bool Endswith(const std::string &s, const std::string &end)
+{
+ if (end.size() > s.size())
+ return false;
+ return (s.compare(s.size() - end.size(), end.size(), end) == 0);
+}
+
+bool Startswith(const std::string &s, const std::string &start)
+{
+ if (start.size() > s.size())
+ return false;
+ return (s.compare(0, start.size(), start) == 0);
+}
+
+std::string Join(std::vector<std::string> list, const std::string &sep)
+{
+ std::ostringstream oss;
+ for (auto it = list.begin(); it != list.end(); it++)
+ {
+ if (it != list.begin()) oss << sep;
+ oss << *it;
+ }
+ return oss.str();
+}
+
+}
+}
+ /*}}}*/
+// UTF8ToCodeset - Convert some UTF-8 string for some codeset /*{{{*/
+// ---------------------------------------------------------------------
+/* This is handy to use before display some information for enduser */
+bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest)
+{
+ iconv_t cd;
+ const char *inbuf;
+ char *inptr, *outbuf;
+ size_t insize, bufsize;
+ dest->clear();
+
+ cd = iconv_open(codeset, "UTF-8");
+ if (cd == (iconv_t)(-1)) {
+ // Something went wrong
+ if (errno == EINVAL)
+ _error->Error("conversion from 'UTF-8' to '%s' not available",
+ codeset);
+ else
+ perror("iconv_open");
+
+ return false;
+ }
+
+ insize = bufsize = orig.size();
+ inbuf = orig.data();
+ inptr = (char *)inbuf;
+ outbuf = new char[bufsize];
+ size_t lastError = -1;
+
+ while (insize != 0)
+ {
+ char *outptr = outbuf;
+ size_t outsize = bufsize;
+ size_t const err = iconv(cd, &inptr, &insize, &outptr, &outsize);
+ dest->append(outbuf, outptr - outbuf);
+ if (err == (size_t)(-1))
+ {
+ switch (errno)
+ {
+ case EILSEQ:
+ insize--;
+ inptr++;
+ // replace a series of unknown multibytes with a single "?"
+ if (lastError != insize) {
+ lastError = insize - 1;
+ dest->append("?");
+ }
+ break;
+ case EINVAL:
+ insize = 0;
+ break;
+ case E2BIG:
+ if (outptr == outbuf)
+ {
+ bufsize *= 2;
+ delete[] outbuf;
+ outbuf = new char[bufsize];
+ }
+ break;
+ }
+ }
+ }
+
+ delete[] outbuf;
+
+ iconv_close(cd);
+
+ return true;
+}
+ /*}}}*/
+// strstrip - Remove white space from the front and back of a string /*{{{*/
+// ---------------------------------------------------------------------
+/* This is handy to use when parsing a file. It also removes \n's left
+ over from fgets and company */
+char *_strstrip(char *String)
+{
+ for (;*String != 0 && (*String == ' ' || *String == '\t'); String++);
+
+ if (*String == 0)
+ return String;
+ return _strrstrip(String);
+}
+ /*}}}*/
+// strrstrip - Remove white space from the back of a string /*{{{*/
+// ---------------------------------------------------------------------
+char *_strrstrip(char *String)
+{
+ char *End = String + strlen(String) - 1;
+ for (;End != String - 1 && (*End == ' ' || *End == '\t' || *End == '\n' ||
+ *End == '\r'); End--);
+ End++;
+ *End = 0;
+ return String;
+}
+ /*}}}*/
+// strtabexpand - Converts tabs into 8 spaces /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+char *_strtabexpand(char *String,size_t Len)
+{
+ for (char *I = String; I != I + Len && *I != 0; I++)
+ {
+ if (*I != '\t')
+ continue;
+ if (I + 8 > String + Len)
+ {
+ *I = 0;
+ return String;
+ }
+
+ /* Assume the start of the string is 0 and find the next 8 char
+ division */
+ int Len;
+ if (String == I)
+ Len = 1;
+ else
+ Len = 8 - ((String - I) % 8);
+ Len -= 2;
+ if (Len <= 0)
+ {
+ *I = ' ';
+ continue;
+ }
+
+ memmove(I + Len,I + 1,strlen(I) + 1);
+ for (char *J = I; J + Len != I; *I = ' ', I++);
+ }
+ return String;
+}
+ /*}}}*/
+// ParseQuoteWord - Parse a single word out of a string /*{{{*/
+// ---------------------------------------------------------------------
+/* This grabs a single word, converts any % escaped characters to their
+ proper values and advances the pointer. Double quotes are understood
+ and striped out as well. This is for URI/URL parsing. It also can
+ understand [] brackets.*/
+bool ParseQuoteWord(const char *&String,string &Res)
+{
+ // Skip leading whitespace
+ const char *C = String;
+ for (;*C != 0 && *C == ' '; C++);
+ if (*C == 0)
+ return false;
+
+ // Jump to the next word
+ for (;*C != 0 && isspace(*C) == 0; C++)
+ {
+ if (*C == '"')
+ {
+ C = strchr(C + 1, '"');
+ if (C == NULL)
+ return false;
+ }
+ if (*C == '[')
+ {
+ C = strchr(C + 1, ']');
+ if (C == NULL)
+ return false;
+ }
+ }
+
+ // Now de-quote characters
+ char Buffer[1024];
+ char Tmp[3];
+ const char *Start = String;
+ char *I;
+ for (I = Buffer; I < Buffer + sizeof(Buffer) && Start != C; I++)
+ {
+ if (*Start == '%' && Start + 2 < C &&
+ isxdigit(Start[1]) && isxdigit(Start[2]))
+ {
+ Tmp[0] = Start[1];
+ Tmp[1] = Start[2];
+ Tmp[2] = 0;
+ *I = (char)strtol(Tmp,0,16);
+ Start += 3;
+ continue;
+ }
+ if (*Start != '"')
+ *I = *Start;
+ else
+ I--;
+ Start++;
+ }
+ *I = 0;
+ Res = Buffer;
+
+ // Skip ending white space
+ for (;*C != 0 && isspace(*C) != 0; C++);
+ String = C;
+ return true;
+}
+ /*}}}*/
+// ParseCWord - Parses a string like a C "" expression /*{{{*/
+// ---------------------------------------------------------------------
+/* This expects a series of space separated strings enclosed in ""'s.
+ It concatenates the ""'s into a single string. */
+bool ParseCWord(const char *&String,string &Res)
+{
+ // Skip leading whitespace
+ const char *C = String;
+ for (;*C != 0 && *C == ' '; C++);
+ if (*C == 0)
+ return false;
+
+ char Buffer[1024];
+ char *Buf = Buffer;
+ if (strlen(String) >= sizeof(Buffer))
+ return false;
+
+ for (; *C != 0; C++)
+ {
+ if (*C == '"')
+ {
+ for (C++; *C != 0 && *C != '"'; C++)
+ *Buf++ = *C;
+
+ if (*C == 0)
+ return false;
+
+ continue;
+ }
+
+ if (C != String && isspace(*C) != 0 && isspace(C[-1]) != 0)
+ continue;
+ if (isspace(*C) == 0)
+ return false;
+ *Buf++ = ' ';
+ }
+ *Buf = 0;
+ Res = Buffer;
+ String = C;
+ return true;
+}
+ /*}}}*/
+// QuoteString - Convert a string into quoted from /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string QuoteString(const string &Str, const char *Bad)
+{
+ std::stringstream Res;
+ for (string::const_iterator I = Str.begin(); I != Str.end(); ++I)
+ {
+ if (strchr(Bad,*I) != 0 || isprint(*I) == 0 ||
+ *I == 0x25 || // percent '%' char
+ *I <= 0x20 || *I >= 0x7F) // control chars
+ {
+ ioprintf(Res, "%%%02hhx", *I);
+ }
+ else
+ Res << *I;
+ }
+ return Res.str();
+}
+ /*}}}*/
+// DeQuoteString - Convert a string from quoted from /*{{{*/
+// ---------------------------------------------------------------------
+/* This undoes QuoteString */
+string DeQuoteString(const string &Str)
+{
+ return DeQuoteString(Str.begin(),Str.end());
+}
+string DeQuoteString(string::const_iterator const &begin,
+ string::const_iterator const &end)
+{
+ string Res;
+ for (string::const_iterator I = begin; I != end; ++I)
+ {
+ if (*I == '%' && I + 2 < end &&
+ isxdigit(I[1]) && isxdigit(I[2]))
+ {
+ char Tmp[3];
+ Tmp[0] = I[1];
+ Tmp[1] = I[2];
+ Tmp[2] = 0;
+ Res += (char)strtol(Tmp,0,16);
+ I += 2;
+ continue;
+ }
+ else
+ Res += *I;
+ }
+ return Res;
+}
+
+ /*}}}*/
+// SizeToStr - Convert a long into a human readable size /*{{{*/
+// ---------------------------------------------------------------------
+/* A max of 4 digits are shown before conversion to the next highest unit.
+ The max length of the string will be 5 chars unless the size is > 10
+ YottaBytes (E24) */
+string SizeToStr(double Size)
+{
+ double ASize;
+ if (Size >= 0)
+ ASize = Size;
+ else
+ ASize = -1*Size;
+
+ /* bytes, KiloBytes, MegaBytes, GigaBytes, TeraBytes, PetaBytes,
+ ExaBytes, ZettaBytes, YottaBytes */
+ char Ext[] = {'\0','k','M','G','T','P','E','Z','Y'};
+ int I = 0;
+ while (I <= 8)
+ {
+ if (ASize < 100 && I != 0)
+ {
+ std::string S;
+ strprintf(S, "%'.1f %c", ASize, Ext[I]);
+ return S;
+ }
+
+ if (ASize < 10000)
+ {
+ std::string S;
+ strprintf(S, "%'.0f %c", ASize, Ext[I]);
+ return S;
+ }
+ ASize /= 1000.0;
+ I++;
+ }
+ return "";
+}
+ /*}}}*/
+// TimeToStr - Convert the time into a string /*{{{*/
+// ---------------------------------------------------------------------
+/* Converts a number of seconds to a hms format */
+string TimeToStr(unsigned long Sec)
+{
+ std::string S;
+ if (Sec > 60*60*24)
+ {
+ //TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+ strprintf(S,_("%lid %lih %limin %lis"),Sec/60/60/24,(Sec/60/60) % 24,(Sec/60) % 60,Sec % 60);
+ }
+ else if (Sec > 60*60)
+ {
+ //TRANSLATOR: h means hours, min means minutes, s means seconds
+ strprintf(S,_("%lih %limin %lis"),Sec/60/60,(Sec/60) % 60,Sec % 60);
+ }
+ else if (Sec > 60)
+ {
+ //TRANSLATOR: min means minutes, s means seconds
+ strprintf(S,_("%limin %lis"),Sec/60,Sec % 60);
+ }
+ else
+ {
+ //TRANSLATOR: s means seconds
+ strprintf(S,_("%lis"),Sec);
+ }
+ return S;
+}
+ /*}}}*/
+// SubstVar - Substitute a string for another string /*{{{*/
+// ---------------------------------------------------------------------
+/* This replaces all occurrences of Subst with Contents in Str. */
+string SubstVar(const string &Str,const string &Subst,const string &Contents)
+{
+ if (Subst.empty() == true)
+ return Str;
+
+ string::size_type Pos = 0;
+ string::size_type OldPos = 0;
+ string Temp;
+
+ while (OldPos < Str.length() &&
+ (Pos = Str.find(Subst,OldPos)) != string::npos)
+ {
+ if (OldPos != Pos)
+ Temp.append(Str, OldPos, Pos - OldPos);
+ if (Contents.empty() == false)
+ Temp.append(Contents);
+ OldPos = Pos + Subst.length();
+ }
+
+ if (OldPos == 0)
+ return Str;
+
+ if (OldPos >= Str.length())
+ return Temp;
+
+ Temp.append(Str, OldPos, string::npos);
+ return Temp;
+}
+string SubstVar(string Str,const struct SubstVar *Vars)
+{
+ for (; Vars->Subst != 0; Vars++)
+ Str = SubstVar(Str,Vars->Subst,*Vars->Contents);
+ return Str;
+}
+ /*}}}*/
+// OutputInDepth - return a string with separator multiplied with depth /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns a string with the supplied separator depth + 1 times in it */
+std::string OutputInDepth(const unsigned long Depth, const char* Separator)
+{
+ std::string output = "";
+ for(unsigned long d=Depth+1; d > 0; d--)
+ output.append(Separator);
+ return output;
+}
+ /*}}}*/
+// URItoFileName - Convert the uri into a unique file name /*{{{*/
+// ---------------------------------------------------------------------
+/* This converts a URI into a safe filename. It quotes all unsafe characters
+ and converts / to _ and removes the scheme identifier. The resulting
+ file name should be unique and never occur again for a different file */
+string URItoFileName(const string &URI)
+{
+ // Nuke 'sensitive' items
+ ::URI U(URI);
+ U.User.clear();
+ U.Password.clear();
+ U.Access.clear();
+
+ // "\x00-\x20{}|\\\\^\\[\\]<>\"\x7F-\xFF";
+ string NewURI = QuoteString(U,"\\|{}[]<>\"^~_=!@#$%^&*");
+ replace(NewURI.begin(),NewURI.end(),'/','_');
+ return NewURI;
+}
+ /*}}}*/
+// Base64Encode - Base64 Encoding routine for short strings /*{{{*/
+// ---------------------------------------------------------------------
+/* This routine performs a base64 transformation on a string. It was ripped
+ from wget and then patched and bug fixed.
+
+ This spec can be found in rfc2045 */
+string Base64Encode(const string &S)
+{
+ // Conversion table.
+ static char tbl[64] = {'A','B','C','D','E','F','G','H',
+ 'I','J','K','L','M','N','O','P',
+ 'Q','R','S','T','U','V','W','X',
+ 'Y','Z','a','b','c','d','e','f',
+ 'g','h','i','j','k','l','m','n',
+ 'o','p','q','r','s','t','u','v',
+ 'w','x','y','z','0','1','2','3',
+ '4','5','6','7','8','9','+','/'};
+
+ // Pre-allocate some space
+ string Final;
+ Final.reserve((4*S.length() + 2)/3 + 2);
+
+ /* Transform the 3x8 bits to 4x6 bits, as required by
+ base64. */
+ for (string::const_iterator I = S.begin(); I < S.end(); I += 3)
+ {
+ char Bits[3] = {0,0,0};
+ Bits[0] = I[0];
+ if (I + 1 < S.end())
+ Bits[1] = I[1];
+ if (I + 2 < S.end())
+ Bits[2] = I[2];
+
+ Final += tbl[Bits[0] >> 2];
+ Final += tbl[((Bits[0] & 3) << 4) + (Bits[1] >> 4)];
+
+ if (I + 1 >= S.end())
+ break;
+
+ Final += tbl[((Bits[1] & 0xf) << 2) + (Bits[2] >> 6)];
+
+ if (I + 2 >= S.end())
+ break;
+
+ Final += tbl[Bits[2] & 0x3f];
+ }
+
+ /* Apply the padding elements, this tells how many bytes the remote
+ end should discard */
+ if (S.length() % 3 == 2)
+ Final += '=';
+ if (S.length() % 3 == 1)
+ Final += "==";
+
+ return Final;
+}
+ /*}}}*/
+// stringcmp - Arbitrary string compare /*{{{*/
+// ---------------------------------------------------------------------
+/* This safely compares two non-null terminated strings of arbitrary
+ length */
+int stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd)
+{
+ for (; A != AEnd && B != BEnd; A++, B++)
+ if (*A != *B)
+ break;
+
+ if (A == AEnd && B == BEnd)
+ return 0;
+ if (A == AEnd)
+ return 1;
+ if (B == BEnd)
+ return -1;
+ if (*A < *B)
+ return -1;
+ return 1;
+}
+
+#if __GNUC__ >= 3
+int stringcmp(string::const_iterator A,string::const_iterator AEnd,
+ const char *B,const char *BEnd)
+{
+ for (; A != AEnd && B != BEnd; A++, B++)
+ if (*A != *B)
+ break;
+
+ if (A == AEnd && B == BEnd)
+ return 0;
+ if (A == AEnd)
+ return 1;
+ if (B == BEnd)
+ return -1;
+ if (*A < *B)
+ return -1;
+ return 1;
+}
+int stringcmp(string::const_iterator A,string::const_iterator AEnd,
+ string::const_iterator B,string::const_iterator BEnd)
+{
+ for (; A != AEnd && B != BEnd; A++, B++)
+ if (*A != *B)
+ break;
+
+ if (A == AEnd && B == BEnd)
+ return 0;
+ if (A == AEnd)
+ return 1;
+ if (B == BEnd)
+ return -1;
+ if (*A < *B)
+ return -1;
+ return 1;
+}
+#endif
+ /*}}}*/
+// stringcasecmp - Arbitrary case insensitive string compare /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+int stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd)
+{
+ for (; A != AEnd && B != BEnd; A++, B++)
+ if (tolower_ascii(*A) != tolower_ascii(*B))
+ break;
+
+ if (A == AEnd && B == BEnd)
+ return 0;
+ if (A == AEnd)
+ return 1;
+ if (B == BEnd)
+ return -1;
+ if (tolower_ascii(*A) < tolower_ascii(*B))
+ return -1;
+ return 1;
+}
+#if __GNUC__ >= 3
+int stringcasecmp(string::const_iterator A,string::const_iterator AEnd,
+ const char *B,const char *BEnd)
+{
+ for (; A != AEnd && B != BEnd; A++, B++)
+ if (tolower_ascii(*A) != tolower_ascii(*B))
+ break;
+
+ if (A == AEnd && B == BEnd)
+ return 0;
+ if (A == AEnd)
+ return 1;
+ if (B == BEnd)
+ return -1;
+ if (tolower_ascii(*A) < tolower_ascii(*B))
+ return -1;
+ return 1;
+}
+int stringcasecmp(string::const_iterator A,string::const_iterator AEnd,
+ string::const_iterator B,string::const_iterator BEnd)
+{
+ for (; A != AEnd && B != BEnd; A++, B++)
+ if (tolower_ascii(*A) != tolower_ascii(*B))
+ break;
+
+ if (A == AEnd && B == BEnd)
+ return 0;
+ if (A == AEnd)
+ return 1;
+ if (B == BEnd)
+ return -1;
+ if (tolower_ascii(*A) < tolower_ascii(*B))
+ return -1;
+ return 1;
+}
+#endif
+ /*}}}*/
+// LookupTag - Lookup the value of a tag in a tagged string /*{{{*/
+// ---------------------------------------------------------------------
+/* The format is like those used in package files and the method
+ communication system */
+std::string LookupTag(const std::string &Message, const char *TagC, const char *Default)
+{
+ std::string tag = std::string("\n") + TagC + ":";
+ if (Default == nullptr)
+ Default = "";
+ if (Message.length() < tag.length())
+ return Default;
+ std::transform(tag.begin(), tag.end(), tag.begin(), tolower_ascii);
+ auto valuestart = Message.cbegin();
+ // maybe the message starts directly with tag
+ if (Message[tag.length() - 2] == ':')
+ {
+ std::string lowstart = std::string("\n") + Message.substr(0, tag.length() - 1);
+ std::transform(lowstart.begin(), lowstart.end(), lowstart.begin(), tolower_ascii);
+ if (lowstart == tag)
+ valuestart = std::next(valuestart, tag.length() - 1);
+ }
+ // the tag is somewhere in the message
+ if (valuestart == Message.cbegin())
+ {
+ auto const tagbegin = std::search(Message.cbegin(), Message.cend(), tag.cbegin(), tag.cend(),
+ [](char const a, char const b) { return tolower_ascii(a) == b; });
+ if (tagbegin == Message.cend())
+ return Default;
+ valuestart = std::next(tagbegin, tag.length());
+ }
+ auto const is_whitespace = [](char const c) { return isspace_ascii(c) != 0 && c != '\n'; };
+ auto const is_newline = [](char const c) { return c == '\n'; };
+ std::string result;
+ valuestart = std::find_if_not(valuestart, Message.cend(), is_whitespace);
+ // is the first line of the value empty?
+ if (valuestart != Message.cend() && *valuestart == '\n')
+ {
+ valuestart = std::next(valuestart);
+ if (valuestart != Message.cend() && *valuestart == ' ')
+ valuestart = std::next(valuestart);
+ }
+ // extract the value over multiple lines removing trailing whitespace
+ while (valuestart < Message.cend())
+ {
+ auto const linebreak = std::find_if(valuestart, Message.cend(), is_newline);
+ auto valueend = std::prev(linebreak);
+ // skip spaces at the end of the line
+ while (valueend > valuestart && is_whitespace(*valueend))
+ valueend = std::prev(valueend);
+ // append found line to result
+ {
+ std::string tmp(valuestart, std::next(valueend));
+ if (tmp != ".")
+ {
+ if (result.empty())
+ result.assign(std::move(tmp));
+ else
+ result.append(tmp);
+ }
+ }
+ // see if the value is multiline
+ if (linebreak == Message.cend())
+ break;
+ valuestart = std::next(linebreak);
+ if (valuestart == Message.cend() || *valuestart != ' ')
+ break;
+ result.append("\n");
+ // skip the space leading a multiline (Keep all other whitespaces in the value)
+ valuestart = std::next(valuestart);
+ }
+ auto const valueend = result.find_last_not_of("\n");
+ if (valueend == std::string::npos)
+ result.clear();
+ else
+ result.erase(valueend + 1);
+ return result;
+}
+ /*}}}*/
+// StringToBool - Converts a string into a boolean /*{{{*/
+// ---------------------------------------------------------------------
+/* This inspects the string to see if it is true or if it is false and
+ then returns the result. Several variants on true/false are checked. */
+int StringToBool(const string &Text,int Default)
+{
+ char *ParseEnd;
+ int Res = strtol(Text.c_str(),&ParseEnd,0);
+ // ensure that the entire string was converted by strtol to avoid
+ // failures on "apt-cache show -a 0ad" where the "0" is converted
+ const char *TextEnd = Text.c_str()+Text.size();
+ if (ParseEnd == TextEnd && Res >= 0 && Res <= 1)
+ return Res;
+
+ // Check for positives
+ if (strcasecmp(Text.c_str(),"no") == 0 ||
+ strcasecmp(Text.c_str(),"false") == 0 ||
+ strcasecmp(Text.c_str(),"without") == 0 ||
+ strcasecmp(Text.c_str(),"off") == 0 ||
+ strcasecmp(Text.c_str(),"disable") == 0)
+ return 0;
+
+ // Check for negatives
+ if (strcasecmp(Text.c_str(),"yes") == 0 ||
+ strcasecmp(Text.c_str(),"true") == 0 ||
+ strcasecmp(Text.c_str(),"with") == 0 ||
+ strcasecmp(Text.c_str(),"on") == 0 ||
+ strcasecmp(Text.c_str(),"enable") == 0)
+ return 1;
+
+ return Default;
+}
+ /*}}}*/
+// TimeRFC1123 - Convert a time_t into RFC1123 format /*{{{*/
+// ---------------------------------------------------------------------
+/* This converts a time_t into a string time representation that is
+ year 2000 compliant and timezone neutral */
+string TimeRFC1123(time_t Date)
+{
+ return TimeRFC1123(Date, false);
+}
+string TimeRFC1123(time_t Date, bool const NumericTimezone)
+{
+ struct tm Conv;
+ if (gmtime_r(&Date, &Conv) == NULL)
+ return "";
+
+ auto const posix = std::locale::classic();
+ std::ostringstream datestr;
+ datestr.imbue(posix);
+ APT::StringView const fmt("%a, %d %b %Y %H:%M:%S");
+ std::use_facet<std::time_put<char>>(posix).put(
+ std::ostreambuf_iterator<char>(datestr),
+ datestr, ' ', &Conv, fmt.data(), fmt.data() + fmt.size());
+ if (NumericTimezone)
+ datestr << " +0000";
+ else
+ datestr << " GMT";
+ return datestr.str();
+}
+ /*}}}*/
+// ReadMessages - Read messages from the FD /*{{{*/
+// ---------------------------------------------------------------------
+/* This pulls full messages from the input FD into the message buffer.
+ It assumes that messages will not pause during transit so no
+ fancy buffering is used.
+
+ In particular: this reads blocks from the input until it believes
+ that it's run out of input text. Each block is terminated by a
+ double newline ('\n' followed by '\n').
+ */
+bool ReadMessages(int Fd, vector<string> &List)
+{
+ char Buffer[64000];
+ // Represents any left-over from the previous iteration of the
+ // parse loop. (i.e., if a message is split across the end
+ // of the buffer, it goes here)
+ string PartialMessage;
+
+ do {
+ int const Res = read(Fd, Buffer, sizeof(Buffer));
+ if (Res < 0 && errno == EINTR)
+ continue;
+
+ // process we read from has died
+ if (Res == 0)
+ return false;
+
+ // No data
+#if EAGAIN != EWOULDBLOCK
+ if (Res < 0 && (errno == EAGAIN || errno == EWOULDBLOCK))
+#else
+ if (Res < 0 && errno == EAGAIN)
+#endif
+ return true;
+ if (Res < 0)
+ return false;
+
+ // extract the message(s) from the buffer
+ char const *Start = Buffer;
+ char const * const End = Buffer + Res;
+
+ char const * NL = (char const *) memchr(Start, '\n', End - Start);
+ if (NL == NULL)
+ {
+ // end of buffer: store what we have so far and read new data in
+ PartialMessage.append(Start, End - Start);
+ Start = End;
+ }
+ else
+ ++NL;
+
+ if (PartialMessage.empty() == false && Start < End)
+ {
+ // if we start with a new line, see if the partial message we have ended with one
+ // so that we properly detect records ending between two read() runs
+ // cases are: \n|\n , \r\n|\r\n and \r\n\r|\n
+ // the case \r|\n\r\n is handled by the usual double-newline handling
+ if ((NL - Start) == 1 || ((NL - Start) == 2 && *Start == '\r'))
+ {
+ if (APT::String::Endswith(PartialMessage, "\n") || APT::String::Endswith(PartialMessage, "\r\n\r"))
+ {
+ PartialMessage.erase(PartialMessage.find_last_not_of("\r\n") + 1);
+ List.push_back(PartialMessage);
+ PartialMessage.clear();
+ while (NL < End && (*NL == '\n' || *NL == '\r')) ++NL;
+ Start = NL;
+ }
+ }
+ }
+
+ while (Start < End) {
+ char const * NL2 = (char const *) memchr(NL, '\n', End - NL);
+ if (NL2 == NULL)
+ {
+ // end of buffer: store what we have so far and read new data in
+ PartialMessage.append(Start, End - Start);
+ break;
+ }
+ ++NL2;
+
+ // did we find a double newline?
+ if ((NL2 - NL) == 1 || ((NL2 - NL) == 2 && *NL == '\r'))
+ {
+ PartialMessage.append(Start, NL2 - Start);
+ PartialMessage.erase(PartialMessage.find_last_not_of("\r\n") + 1);
+ List.push_back(PartialMessage);
+ PartialMessage.clear();
+ while (NL2 < End && (*NL2 == '\n' || *NL2 == '\r')) ++NL2;
+ Start = NL2;
+ }
+ NL = NL2;
+ }
+
+ // we have read at least one complete message and nothing left
+ if (PartialMessage.empty() == true)
+ return true;
+
+ if (WaitFd(Fd) == false)
+ return false;
+ } while (true);
+}
+ /*}}}*/
+// MonthConv - Converts a month string into a number /*{{{*/
+// ---------------------------------------------------------------------
+/* This was lifted from the boa webserver which lifted it from 'wn-v1.07'
+ Made it a bit more robust with a few tolower_ascii though. */
+static int MonthConv(char const * const Month)
+{
+ switch (tolower_ascii(*Month))
+ {
+ case 'a':
+ return tolower_ascii(Month[1]) == 'p'?3:7;
+ case 'd':
+ return 11;
+ case 'f':
+ return 1;
+ case 'j':
+ if (tolower_ascii(Month[1]) == 'a')
+ return 0;
+ return tolower_ascii(Month[2]) == 'n'?5:6;
+ case 'm':
+ return tolower_ascii(Month[2]) == 'r'?2:4;
+ case 'n':
+ return 10;
+ case 'o':
+ return 9;
+ case 's':
+ return 8;
+
+ // Pretend it is January..
+ default:
+ return 0;
+ }
+}
+ /*}}}*/
+// timegm - Internal timegm if the gnu version is not available /*{{{*/
+// ---------------------------------------------------------------------
+/* Converts struct tm to time_t, assuming the data in tm is UTC rather
+ than local timezone (mktime assumes the latter).
+
+ This function is a nonstandard GNU extension that is also present on
+ the BSDs and maybe other systems. For others we follow the advice of
+ the manpage of timegm and use his portable replacement. */
+#ifndef HAVE_TIMEGM
+static time_t timegm(struct tm *t)
+{
+ char *tz = getenv("TZ");
+ setenv("TZ", "", 1);
+ tzset();
+ time_t ret = mktime(t);
+ if (tz)
+ setenv("TZ", tz, 1);
+ else
+ unsetenv("TZ");
+ tzset();
+ return ret;
+}
+#endif
+ /*}}}*/
+// RFC1123StrToTime - Converts an HTTP1.1 full date strings into a time_t /*{{{*/
+// ---------------------------------------------------------------------
+/* tries to parses a full date as specified in RFC7231 §7.1.1.1
+ with one exception: HTTP/1.1 valid dates need to have GMT as timezone.
+ As we encounter dates from UTC or with a numeric timezone in other places,
+ we allow them here to to be able to reuse the method. Either way, a date
+ must be in UTC or parsing will fail. Previous implementations of this
+ method used to ignore the timezone and assume always UTC. */
+bool RFC1123StrToTime(const char* const str,time_t &time)
+{
+ unsigned short day = 0;
+ signed int year = 0; // yes, Y23K problem – we going to worry then…
+ std::string weekday, month, datespec, timespec, zone;
+ std::istringstream ss(str);
+ auto const &posix = std::locale::classic();
+ ss.imbue(posix);
+ ss >> weekday;
+ // we only superficially check weekday, mostly to avoid accepting localized
+ // weekdays here and take only its length to decide which datetime format we
+ // encounter here. The date isn't stored.
+ std::transform(weekday.begin(), weekday.end(), weekday.begin(), ::tolower);
+ std::array<char const * const, 7> c_weekdays = {{ "sun", "mon", "tue", "wed", "thu", "fri", "sat" }};
+ if (std::find(c_weekdays.begin(), c_weekdays.end(), weekday.substr(0,3)) == c_weekdays.end())
+ return false;
+
+ switch (weekday.length())
+ {
+ case 4:
+ // Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
+ if (weekday[3] != ',')
+ return false;
+ ss >> day >> month >> year >> timespec >> zone;
+ break;
+ case 3:
+ // Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
+ ss >> month >> day >> timespec >> year;
+ zone = "UTC";
+ break;
+ case 0:
+ case 1:
+ case 2:
+ return false;
+ default:
+ // Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
+ if (weekday[weekday.length() - 1] != ',')
+ return false;
+ ss >> datespec >> timespec >> zone;
+ auto const expldate = VectorizeString(datespec, '-');
+ if (expldate.size() != 3)
+ return false;
+ try {
+ size_t pos;
+ day = std::stoi(expldate[0], &pos);
+ if (pos != expldate[0].length())
+ return false;
+ year = 1900 + std::stoi(expldate[2], &pos);
+ if (pos != expldate[2].length())
+ return false;
+ strprintf(datespec, "%.4d-%.2d-%.2d", year, MonthConv(expldate[1].c_str()) + 1, day);
+ } catch (...) {
+ return false;
+ }
+ break;
+ }
+
+ if (ss.fail() || ss.bad() || !ss.eof())
+ return false;
+
+ if (zone != "GMT" && zone != "UTC" && zone != "Z") // RFC 822
+ {
+ // numeric timezones as a should of RFC 1123 and generally preferred
+ try {
+ size_t pos;
+ auto const z = std::stoi(zone, &pos);
+ if (z != 0 || pos != zone.length())
+ return false;
+ } catch (...) {
+ return false;
+ }
+ }
+
+ if (datespec.empty())
+ {
+ if (month.empty())
+ return false;
+ strprintf(datespec, "%.4d-%.2d-%.2d", year, MonthConv(month.c_str()) + 1, day);
+ }
+
+ std::string const datetime = datespec + ' ' + timespec;
+ struct tm Tm;
+ if (strptime(datetime.c_str(), "%Y-%m-%d %H:%M:%S", &Tm) == nullptr)
+ return false;
+ time = timegm(&Tm);
+ return true;
+}
+ /*}}}*/
+// FTPMDTMStrToTime - Converts a ftp modification date into a time_t /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FTPMDTMStrToTime(const char* const str,time_t &time)
+{
+ struct tm Tm;
+ // MDTM includes no whitespaces but recommend and ignored by strptime
+ if (strptime(str, "%Y %m %d %H %M %S", &Tm) == NULL)
+ return false;
+
+ time = timegm(&Tm);
+ return true;
+}
+ /*}}}*/
+// StrToTime - Converts a string into a time_t /*{{{*/
+// ---------------------------------------------------------------------
+/* This handles all 3 popular time formats including RFC 1123, RFC 1036
+ and the C library asctime format. It requires the GNU library function
+ 'timegm' to convert a struct tm in UTC to a time_t. For some bizzar
+ reason the C library does not provide any such function :< This also
+ handles the weird, but unambiguous FTP time format*/
+bool StrToTime(const string &Val,time_t &Result)
+{
+ struct tm Tm;
+ char Month[10];
+
+ // Skip the day of the week
+ const char *I = strchr(Val.c_str(), ' ');
+
+ // Handle RFC 1123 time
+ Month[0] = 0;
+ if (sscanf(I," %2d %3s %4d %2d:%2d:%2d GMT",&Tm.tm_mday,Month,&Tm.tm_year,
+ &Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec) != 6)
+ {
+ // Handle RFC 1036 time
+ if (sscanf(I," %2d-%3s-%3d %2d:%2d:%2d GMT",&Tm.tm_mday,Month,
+ &Tm.tm_year,&Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec) == 6)
+ Tm.tm_year += 1900;
+ else
+ {
+ // asctime format
+ if (sscanf(I," %3s %2d %2d:%2d:%2d %4d",Month,&Tm.tm_mday,
+ &Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec,&Tm.tm_year) != 6)
+ {
+ // 'ftp' time
+ if (sscanf(Val.c_str(),"%4d%2d%2d%2d%2d%2d",&Tm.tm_year,&Tm.tm_mon,
+ &Tm.tm_mday,&Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec) != 6)
+ return false;
+ Tm.tm_mon--;
+ }
+ }
+ }
+
+ Tm.tm_isdst = 0;
+ if (Month[0] != 0)
+ Tm.tm_mon = MonthConv(Month);
+ else
+ Tm.tm_mon = 0; // we don't have a month, so pick something
+ Tm.tm_year -= 1900;
+
+ // Convert to local time and then to GMT
+ Result = timegm(&Tm);
+ return true;
+}
+ /*}}}*/
+// StrToNum - Convert a fixed length string to a number /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used in decoding the crazy fixed length string headers in
+ tar and ar files. */
+bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base)
+{
+ char S[30];
+ if (Len >= sizeof(S))
+ return false;
+ memcpy(S,Str,Len);
+ S[Len] = 0;
+
+ // All spaces is a zero
+ Res = 0;
+ unsigned I;
+ for (I = 0; S[I] == ' '; I++);
+ if (S[I] == 0)
+ return true;
+
+ char *End;
+ Res = strtoul(S,&End,Base);
+ if (End == S)
+ return false;
+
+ return true;
+}
+ /*}}}*/
+// StrToNum - Convert a fixed length string to a number /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used in decoding the crazy fixed length string headers in
+ tar and ar files. */
+bool StrToNum(const char *Str,unsigned long long &Res,unsigned Len,unsigned Base)
+{
+ char S[30];
+ if (Len >= sizeof(S))
+ return false;
+ memcpy(S,Str,Len);
+ S[Len] = 0;
+
+ // All spaces is a zero
+ Res = 0;
+ unsigned I;
+ for (I = 0; S[I] == ' '; I++);
+ if (S[I] == 0)
+ return true;
+
+ char *End;
+ Res = strtoull(S,&End,Base);
+ if (End == S)
+ return false;
+
+ return true;
+}
+ /*}}}*/
+
+// Base256ToNum - Convert a fixed length binary to a number /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used in decoding the 256bit encoded fixed length fields in
+ tar files */
+bool Base256ToNum(const char *Str,unsigned long long &Res,unsigned int Len)
+{
+ if ((Str[0] & 0x80) == 0)
+ return false;
+ else
+ {
+ Res = Str[0] & 0x7F;
+ for(unsigned int i = 1; i < Len; ++i)
+ Res = (Res<<8) + Str[i];
+ return true;
+ }
+}
+ /*}}}*/
+// Base256ToNum - Convert a fixed length binary to a number /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used in decoding the 256bit encoded fixed length fields in
+ tar files */
+bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len)
+{
+ unsigned long long Num = 0;
+ bool rc;
+
+ rc = Base256ToNum(Str, Num, Len);
+ // rudimentary check for overflow (Res = ulong, Num = ulonglong)
+ Res = Num;
+ if (Res != Num)
+ return false;
+
+ return rc;
+}
+ /*}}}*/
+// HexDigit - Convert a hex character into an integer /*{{{*/
+// ---------------------------------------------------------------------
+/* Helper for Hex2Num */
+static int HexDigit(int c)
+{
+ if (c >= '0' && c <= '9')
+ return c - '0';
+ if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+ if (c >= 'A' && c <= 'F')
+ return c - 'A' + 10;
+ return -1;
+}
+ /*}}}*/
+// Hex2Num - Convert a long hex number into a buffer /*{{{*/
+// ---------------------------------------------------------------------
+/* The length of the buffer must be exactly 1/2 the length of the string. */
+bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length)
+{
+ return Hex2Num(APT::StringView(Str), Num, Length);
+}
+
+bool Hex2Num(const APT::StringView Str,unsigned char *Num,unsigned int Length)
+{
+ if (Str.length() != Length*2)
+ return false;
+
+ // Convert each digit. We store it in the same order as the string
+ int J = 0;
+ for (auto I = Str.begin(); I != Str.end();J++, I += 2)
+ {
+ int first_half = HexDigit(I[0]);
+ int second_half;
+ if (first_half < 0)
+ return false;
+
+ second_half = HexDigit(I[1]);
+ if (second_half < 0)
+ return false;
+ Num[J] = first_half << 4;
+ Num[J] += second_half;
+ }
+
+ return true;
+}
+ /*}}}*/
+// TokSplitString - Split a string up by a given token /*{{{*/
+// ---------------------------------------------------------------------
+/* This is intended to be a faster splitter, it does not use dynamic
+ memories. Input is changed to insert nulls at each token location. */
+bool TokSplitString(char Tok,char *Input,char **List,
+ unsigned long ListMax)
+{
+ // Strip any leading spaces
+ char *Start = Input;
+ char *Stop = Start + strlen(Start);
+ for (; *Start != 0 && isspace(*Start) != 0; Start++);
+
+ unsigned long Count = 0;
+ char *Pos = Start;
+ while (Pos != Stop)
+ {
+ // Skip to the next Token
+ for (; Pos != Stop && *Pos != Tok; Pos++);
+
+ // Back remove spaces
+ char *End = Pos;
+ for (; End > Start && (End[-1] == Tok || isspace(End[-1]) != 0); End--);
+ *End = 0;
+
+ List[Count++] = Start;
+ if (Count >= ListMax)
+ {
+ List[Count-1] = 0;
+ return false;
+ }
+
+ // Advance pos
+ for (; Pos != Stop && (*Pos == Tok || isspace(*Pos) != 0 || *Pos == 0); Pos++);
+ Start = Pos;
+ }
+
+ List[Count] = 0;
+ return true;
+}
+ /*}}}*/
+// VectorizeString - Split a string up into a vector of strings /*{{{*/
+// ---------------------------------------------------------------------
+/* This can be used to split a given string up into a vector, so the
+ propose is the same as in the method above and this one is a bit slower
+ also, but the advantage is that we have an iteratable vector */
+vector<string> VectorizeString(string const &haystack, char const &split)
+{
+ vector<string> exploded;
+ if (haystack.empty() == true)
+ return exploded;
+ string::const_iterator start = haystack.begin();
+ string::const_iterator end = start;
+ do {
+ for (; end != haystack.end() && *end != split; ++end);
+ exploded.push_back(string(start, end));
+ start = end + 1;
+ } while (end != haystack.end() && (++end) != haystack.end());
+ return exploded;
+}
+ /*}}}*/
+// StringSplit - split a string into a string vector by token /*{{{*/
+// ---------------------------------------------------------------------
+/* See header for details.
+ */
+vector<string> StringSplit(std::string const &s, std::string const &sep,
+ unsigned int maxsplit)
+{
+ vector<string> split;
+ size_t start, pos;
+
+ // no separator given, this is bogus
+ if(sep.size() == 0)
+ return split;
+
+ start = pos = 0;
+ while (pos != string::npos)
+ {
+ pos = s.find(sep, start);
+ split.push_back(s.substr(start, pos-start));
+
+ // if maxsplit is reached, the remaining string is the last item
+ if(split.size() >= maxsplit)
+ {
+ split[split.size()-1] = s.substr(start);
+ break;
+ }
+ start = pos+sep.size();
+ }
+ return split;
+}
+ /*}}}*/
+// RegexChoice - Simple regex list/list matcher /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned long RegexChoice(RxChoiceList *Rxs,const char **ListBegin,
+ const char **ListEnd)
+{
+ for (RxChoiceList *R = Rxs; R->Str != 0; R++)
+ R->Hit = false;
+
+ unsigned long Hits = 0;
+ for (; ListBegin < ListEnd; ++ListBegin)
+ {
+ // Check if the name is a regex
+ const char *I;
+ bool Regex = true;
+ for (I = *ListBegin; *I != 0; I++)
+ if (*I == '.' || *I == '?' || *I == '*' || *I == '|')
+ break;
+ if (*I == 0)
+ Regex = false;
+
+ // Compile the regex pattern
+ regex_t Pattern;
+ if (Regex == true)
+ if (regcomp(&Pattern,*ListBegin,REG_EXTENDED | REG_ICASE |
+ REG_NOSUB) != 0)
+ Regex = false;
+
+ // Search the list
+ bool Done = false;
+ for (RxChoiceList *R = Rxs; R->Str != 0; R++)
+ {
+ if (R->Str[0] == 0)
+ continue;
+
+ if (strcasecmp(R->Str,*ListBegin) != 0)
+ {
+ if (Regex == false)
+ continue;
+ if (regexec(&Pattern,R->Str,0,0,0) != 0)
+ continue;
+ }
+ Done = true;
+
+ if (R->Hit == false)
+ Hits++;
+
+ R->Hit = true;
+ }
+
+ if (Regex == true)
+ regfree(&Pattern);
+
+ if (Done == false)
+ _error->Warning(_("Selection %s not found"),*ListBegin);
+ }
+
+ return Hits;
+}
+ /*}}}*/
+// {str,io}printf - C format string outputter to C++ strings/iostreams /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to make the internationalization strings easier to translate
+ and to allow reordering of parameters */
+static bool iovprintf(ostream &out, const char *format,
+ va_list &args, ssize_t &size) {
+ char *S = (char*)malloc(size);
+ ssize_t const n = vsnprintf(S, size, format, args);
+ if (n > -1 && n < size) {
+ out << S;
+ free(S);
+ return true;
+ } else {
+ if (n > -1)
+ size = n + 1;
+ else
+ size *= 2;
+ }
+ free(S);
+ return false;
+}
+void ioprintf(ostream &out,const char *format,...)
+{
+ va_list args;
+ ssize_t size = 400;
+ while (true) {
+ bool ret;
+ va_start(args,format);
+ ret = iovprintf(out, format, args, size);
+ va_end(args);
+ if (ret == true)
+ return;
+ }
+}
+void strprintf(string &out,const char *format,...)
+{
+ va_list args;
+ ssize_t size = 400;
+ std::ostringstream outstr;
+ while (true) {
+ bool ret;
+ va_start(args,format);
+ ret = iovprintf(outstr, format, args, size);
+ va_end(args);
+ if (ret == true)
+ break;
+ }
+ out = outstr.str();
+}
+ /*}}}*/
+// safe_snprintf - Safer snprintf /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a snprintf that will never (ever) go past 'End' and returns a
+ pointer to the end of the new string. The returned string is always null
+ terminated unless Buffer == end. This is a better alterantive to using
+ consecutive snprintfs. */
+char *safe_snprintf(char *Buffer,char *End,const char *Format,...)
+{
+ va_list args;
+ int Did;
+
+ if (End <= Buffer)
+ return End;
+ va_start(args,Format);
+ Did = vsnprintf(Buffer,End - Buffer,Format,args);
+ va_end(args);
+
+ if (Did < 0 || Buffer + Did > End)
+ return End;
+ return Buffer + Did;
+}
+ /*}}}*/
+// StripEpoch - Remove the version "epoch" from a version string /*{{{*/
+// ---------------------------------------------------------------------
+string StripEpoch(const string &VerStr)
+{
+ size_t i = VerStr.find(":");
+ if (i == string::npos)
+ return VerStr;
+ return VerStr.substr(i+1);
+}
+ /*}}}*/
+
+// tolower_ascii - tolower() function that ignores the locale /*{{{*/
+// ---------------------------------------------------------------------
+/* This little function is the most called method we have and tries
+ therefore to do the absolute minimum - and is notable faster than
+ standard tolower/toupper and as a bonus avoids problems with different
+ locales - we only operate on ascii chars anyway. */
+#undef tolower_ascii
+int tolower_ascii(int const c) APT_PURE APT_COLD;
+int tolower_ascii(int const c)
+{
+ return tolower_ascii_inline(c);
+}
+ /*}}}*/
+
+// isspace_ascii - isspace() function that ignores the locale /*{{{*/
+// ---------------------------------------------------------------------
+/* This little function is one of the most called methods we have and tries
+ therefore to do the absolute minimum - and is notable faster than
+ standard isspace() and as a bonus avoids problems with different
+ locales - we only operate on ascii chars anyway. */
+#undef isspace_ascii
+int isspace_ascii(int const c) APT_PURE APT_COLD;
+int isspace_ascii(int const c)
+{
+ return isspace_ascii_inline(c);
+}
+ /*}}}*/
+
+// CheckDomainList - See if Host is in a , separate list /*{{{*/
+// ---------------------------------------------------------------------
+/* The domain list is a comma separate list of domains that are suffix
+ matched against the argument */
+bool CheckDomainList(const string &Host,const string &List)
+{
+ string::const_iterator Start = List.begin();
+ for (string::const_iterator Cur = List.begin(); Cur <= List.end(); ++Cur)
+ {
+ if (Cur < List.end() && *Cur != ',')
+ continue;
+
+ // Match the end of the string..
+ if ((Host.size() >= (unsigned)(Cur - Start)) &&
+ Cur - Start != 0 &&
+ stringcasecmp(Host.end() - (Cur - Start),Host.end(),Start,Cur) == 0)
+ return true;
+
+ Start = Cur + 1;
+ }
+ return false;
+}
+ /*}}}*/
+// strv_length - Return the length of a NULL-terminated string array /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+size_t strv_length(const char **str_array)
+{
+ size_t i;
+ for (i=0; str_array[i] != NULL; i++)
+ /* nothing */
+ ;
+ return i;
+}
+ /*}}}*/
+// DeEscapeString - unescape (\0XX and \xXX) from a string /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string DeEscapeString(const string &input)
+{
+ char tmp[3];
+ string::const_iterator it;
+ string output;
+ for (it = input.begin(); it != input.end(); ++it)
+ {
+ // just copy non-escape chars
+ if (*it != '\\')
+ {
+ output += *it;
+ continue;
+ }
+
+ // deal with double escape
+ if (*it == '\\' &&
+ (it + 1 < input.end()) && it[1] == '\\')
+ {
+ // copy
+ output += *it;
+ // advance iterator one step further
+ ++it;
+ continue;
+ }
+
+ // ensure we have a char to read
+ if (it + 1 == input.end())
+ continue;
+
+ // read it
+ ++it;
+ switch (*it)
+ {
+ case '0':
+ if (it + 2 <= input.end()) {
+ tmp[0] = it[1];
+ tmp[1] = it[2];
+ tmp[2] = 0;
+ output += (char)strtol(tmp, 0, 8);
+ it += 2;
+ }
+ break;
+ case 'x':
+ if (it + 2 <= input.end()) {
+ tmp[0] = it[1];
+ tmp[1] = it[2];
+ tmp[2] = 0;
+ output += (char)strtol(tmp, 0, 16);
+ it += 2;
+ }
+ break;
+ default:
+ // FIXME: raise exception here?
+ break;
+ }
+ }
+ return output;
+}
+ /*}}}*/
+// URI::CopyFrom - Copy from an object /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses the URI into all of its components */
+void URI::CopyFrom(const string &U)
+{
+ string::const_iterator I = U.begin();
+
+ // Locate the first colon, this separates the scheme
+ for (; I < U.end() && *I != ':' ; ++I);
+ string::const_iterator FirstColon = I;
+
+ /* Determine if this is a host type URI with a leading double //
+ and then search for the first single / */
+ string::const_iterator SingleSlash = I;
+ if (I + 3 < U.end() && I[1] == '/' && I[2] == '/')
+ SingleSlash += 3;
+
+ /* Find the / indicating the end of the hostname, ignoring /'s in the
+ square brackets */
+ bool InBracket = false;
+ for (; SingleSlash < U.end() && (*SingleSlash != '/' || InBracket == true); ++SingleSlash)
+ {
+ if (*SingleSlash == '[')
+ InBracket = true;
+ if (InBracket == true && *SingleSlash == ']')
+ InBracket = false;
+ }
+
+ if (SingleSlash > U.end())
+ SingleSlash = U.end();
+
+ // We can now write the access and path specifiers
+ Access.assign(U.begin(),FirstColon);
+ if (SingleSlash != U.end())
+ Path.assign(SingleSlash,U.end());
+ if (Path.empty() == true)
+ Path = "/";
+
+ // Now we attempt to locate a user:pass@host fragment
+ if (FirstColon + 2 <= U.end() && FirstColon[1] == '/' && FirstColon[2] == '/')
+ FirstColon += 3;
+ else
+ FirstColon += 1;
+ if (FirstColon >= U.end())
+ return;
+
+ if (FirstColon > SingleSlash)
+ FirstColon = SingleSlash;
+
+ // Find the colon...
+ I = FirstColon + 1;
+ if (I > SingleSlash)
+ I = SingleSlash;
+
+ // Search for the @ separating user:pass from host
+ auto const RevAt = std::find(
+ std::string::const_reverse_iterator(SingleSlash),
+ std::string::const_reverse_iterator(I), '@');
+ string::const_iterator const At = RevAt.base() == I ? SingleSlash : std::prev(RevAt.base());
+ // and then look for the colon between user and pass
+ string::const_iterator const SecondColon = std::find(I, At, ':');
+
+ // Now write the host and user/pass
+ if (At == SingleSlash)
+ {
+ if (FirstColon < SingleSlash)
+ Host.assign(FirstColon,SingleSlash);
+ }
+ else
+ {
+ Host.assign(At+1,SingleSlash);
+ // username and password must be encoded (RFC 3986)
+ User.assign(DeQuoteString(FirstColon,SecondColon));
+ if (SecondColon < At)
+ Password.assign(DeQuoteString(SecondColon+1,At));
+ }
+
+ // Now we parse the RFC 2732 [] hostnames.
+ unsigned long PortEnd = 0;
+ InBracket = false;
+ for (unsigned I = 0; I != Host.length();)
+ {
+ if (Host[I] == '[')
+ {
+ InBracket = true;
+ Host.erase(I,1);
+ continue;
+ }
+
+ if (InBracket == true && Host[I] == ']')
+ {
+ InBracket = false;
+ Host.erase(I,1);
+ PortEnd = I;
+ continue;
+ }
+ I++;
+ }
+
+ // Tsk, weird.
+ if (InBracket == true)
+ {
+ Host.clear();
+ return;
+ }
+
+ // Now we parse off a port number from the hostname
+ Port = 0;
+ string::size_type Pos = Host.rfind(':');
+ if (Pos == string::npos || Pos < PortEnd)
+ return;
+
+ Port = atoi(string(Host,Pos+1).c_str());
+ Host.assign(Host,0,Pos);
+}
+ /*}}}*/
+// URI::operator string - Convert the URI to a string /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+URI::operator string()
+{
+ std::stringstream Res;
+
+ if (Access.empty() == false)
+ Res << Access << ':';
+
+ if (Host.empty() == false)
+ {
+ if (Access.empty() == false)
+ Res << "//";
+
+ if (User.empty() == false)
+ {
+ // FIXME: Technically userinfo is permitted even less
+ // characters than these, but this is not conveniently
+ // expressed with a blacklist.
+ Res << QuoteString(User, ":/?#[]@");
+ if (Password.empty() == false)
+ Res << ":" << QuoteString(Password, ":/?#[]@");
+ Res << "@";
+ }
+
+ // Add RFC 2732 escaping characters
+ if (Access.empty() == false && Host.find_first_of("/:") != string::npos)
+ Res << '[' << Host << ']';
+ else
+ Res << Host;
+
+ if (Port != 0)
+ Res << ':' << std::to_string(Port);
+ }
+
+ if (Path.empty() == false)
+ {
+ if (Path[0] != '/')
+ Res << "/" << Path;
+ else
+ Res << Path;
+ }
+
+ return Res.str();
+}
+ /*}}}*/
+// URI::SiteOnly - Return the schema and site for the URI /*{{{*/
+string URI::SiteOnly(const string &URI)
+{
+ ::URI U(URI);
+ U.User.clear();
+ U.Password.clear();
+ U.Path.clear();
+ return U;
+}
+ /*}}}*/
+// URI::ArchiveOnly - Return the schema, site and cleaned path for the URI /*{{{*/
+string URI::ArchiveOnly(const string &URI)
+{
+ ::URI U(URI);
+ U.User.clear();
+ U.Password.clear();
+ if (U.Path.empty() == false && U.Path[U.Path.length() - 1] == '/')
+ U.Path.erase(U.Path.length() - 1);
+ return U;
+}
+ /*}}}*/
+// URI::NoUserPassword - Return the schema, site and path for the URI /*{{{*/
+string URI::NoUserPassword(const string &URI)
+{
+ ::URI U(URI);
+ U.User.clear();
+ U.Password.clear();
+ return U;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h
new file mode 100644
index 0000000..9f74f8c
--- /dev/null
+++ b/apt-pkg/contrib/strutl.h
@@ -0,0 +1,245 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ String Util - These are some useful string functions
+
+ _strstrip is a function to remove whitespace from the front and end
+ of a string.
+
+ This source is placed in the Public Domain, do with it what you will
+ It was originally written by Jason Gunthorpe <jgg@gpu.srv.ualberta.ca>
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef STRUTL_H
+#define STRUTL_H
+
+#include <cstring>
+#include <iostream>
+#include <limits>
+#include <string>
+#include <vector>
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+#include <apt-pkg/string_view.h>
+#endif
+#include <stddef.h>
+#include <time.h>
+
+#include "macros.h"
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <stdlib.h>
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+using std::ostream;
+#endif
+
+namespace APT {
+ namespace String {
+ std::string Strip(const std::string &s);
+ bool Endswith(const std::string &s, const std::string &ending);
+ bool Startswith(const std::string &s, const std::string &starting);
+ std::string Join(std::vector<std::string> list, const std::string &sep);
+
+ }
+}
+
+
+bool UTF8ToCodeset(const char *codeset, const std::string &orig, std::string *dest);
+char *_strstrip(char *String);
+char *_strrstrip(char *String); // right strip only
+char *_strtabexpand(char *String,size_t Len);
+bool ParseQuoteWord(const char *&String,std::string &Res);
+bool ParseCWord(const char *&String,std::string &Res);
+std::string QuoteString(const std::string &Str,const char *Bad);
+std::string DeQuoteString(const std::string &Str);
+std::string DeQuoteString(std::string::const_iterator const &begin, std::string::const_iterator const &end);
+
+// unescape (\0XX and \xXX) from a string
+std::string DeEscapeString(const std::string &input);
+
+std::string SizeToStr(double Bytes);
+std::string TimeToStr(unsigned long Sec);
+std::string Base64Encode(const std::string &Str);
+std::string OutputInDepth(const unsigned long Depth, const char* Separator=" ");
+std::string URItoFileName(const std::string &URI);
+APT_DEPRECATED_MSG("Specify if GMT is required or a numeric timezone can be used") std::string TimeRFC1123(time_t Date);
+/** returns a datetime string as needed by HTTP/1.1 and Debian files.
+ *
+ * Note: The date will always be represented in a UTC timezone
+ *
+ * @param Date to be represented as a string
+ * @param NumericTimezone is preferred in general, but HTTP/1.1 requires the use
+ * of GMT as timezone instead. \b true means that the timezone should be denoted
+ * as "+0000" while \b false uses "GMT".
+ */
+std::string TimeRFC1123(time_t Date, bool const NumericTimezone);
+/** parses time as needed by HTTP/1.1 and Debian files.
+ *
+ * HTTP/1.1 prefers dates in RFC1123 format (but the other two obsolete date formats
+ * are supported to) and e.g. Release files use the same format in Date & Valid-Until
+ * fields.
+ *
+ * Note: datetime strings need to be in UTC timezones (GMT, UTC, Z, +/-0000) to be
+ * parsed. Other timezones will be rejected as invalid. Previous implementations
+ * accepted other timezones, but treated them as UTC.
+ *
+ * @param str is the datetime string to parse
+ * @param[out] time will be the seconds since epoch of the given datetime if
+ * parsing is successful, undefined otherwise.
+ * @return \b true if parsing was successful, otherwise \b false.
+ */
+bool RFC1123StrToTime(const char* const str,time_t &time) APT_MUSTCHECK;
+bool FTPMDTMStrToTime(const char* const str,time_t &time) APT_MUSTCHECK;
+APT_DEPRECATED_MSG("Use RFC1123StrToTime or FTPMDTMStrToTime as needed instead") bool StrToTime(const std::string &Val,time_t &Result);
+std::string LookupTag(const std::string &Message,const char *Tag,const char *Default = 0);
+int StringToBool(const std::string &Text,int Default = -1);
+bool ReadMessages(int Fd, std::vector<std::string> &List);
+bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0);
+bool StrToNum(const char *Str,unsigned long long &Res,unsigned Len,unsigned Base = 0);
+bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len);
+bool Base256ToNum(const char *Str,unsigned long long &Res,unsigned int Len);
+bool Hex2Num(const std::string &Str,unsigned char *Num,unsigned int Length);
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+APT_HIDDEN bool Hex2Num(const APT::StringView Str,unsigned char *Num,unsigned int Length);
+#endif
+// input changing string split
+bool TokSplitString(char Tok,char *Input,char **List,
+ unsigned long ListMax);
+
+// split a given string by a char
+std::vector<std::string> VectorizeString(std::string const &haystack, char const &split) APT_PURE;
+
+/* \brief Return a vector of strings from string "input" where "sep"
+ * is used as the delimiter string.
+ *
+ * \param input The input string.
+ *
+ * \param sep The separator to use.
+ *
+ * \param maxsplit (optional) The maximum amount of splitting that
+ * should be done .
+ *
+ * The optional "maxsplit" argument can be used to limit the splitting,
+ * if used the string is only split on maxsplit places and the last
+ * item in the vector contains the remainder string.
+ */
+std::vector<std::string> StringSplit(std::string const &input,
+ std::string const &sep,
+ unsigned int maxsplit=std::numeric_limits<unsigned int>::max()) APT_PURE;
+
+void ioprintf(std::ostream &out,const char *format,...) APT_PRINTF(2);
+void strprintf(std::string &out,const char *format,...) APT_PRINTF(2);
+char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_PRINTF(3);
+bool CheckDomainList(const std::string &Host, const std::string &List);
+
+/* Do some compat mumbo jumbo */
+#define tolower_ascii tolower_ascii_inline
+#define isspace_ascii isspace_ascii_inline
+
+APT_PURE APT_HOT
+static inline int tolower_ascii_unsafe(int const c)
+{
+ return c | 0x20;
+}
+APT_PURE APT_HOT
+static inline int tolower_ascii_inline(int const c)
+{
+ return (c >= 'A' && c <= 'Z') ? c + 32 : c;
+}
+APT_PURE APT_HOT
+static inline int isspace_ascii_inline(int const c)
+{
+ // 9='\t',10='\n',11='\v',12='\f',13='\r',32=' '
+ return (c >= 9 && c <= 13) || c == ' ';
+}
+
+std::string StripEpoch(const std::string &VerStr);
+
+#define APT_MKSTRCMP(name,func) \
+inline APT_PURE int name(const char *A,const char *B) {return func(A,A+strlen(A),B,B+strlen(B));} \
+inline APT_PURE int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));} \
+inline APT_PURE int name(const std::string& A,const char *B) {return func(A.c_str(),A.c_str()+A.length(),B,B+strlen(B));} \
+inline APT_PURE int name(const std::string& A,const std::string& B) {return func(A.c_str(),A.c_str()+A.length(),B.c_str(),B.c_str()+B.length());} \
+inline APT_PURE int name(const std::string& A,const char *B,const char *BEnd) {return func(A.c_str(),A.c_str()+A.length(),B,BEnd);}
+
+#define APT_MKSTRCMP2(name,func) \
+inline APT_PURE int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));} \
+inline APT_PURE int name(const std::string& A,const char *B) {return func(A.begin(),A.end(),B,B+strlen(B));} \
+inline APT_PURE int name(const std::string& A,const std::string& B) {return func(A.begin(),A.end(),B.begin(),B.end());} \
+inline APT_PURE int name(const std::string& A,const char *B,const char *BEnd) {return func(A.begin(),A.end(),B,BEnd);}
+
+int APT_PURE stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd);
+int APT_PURE stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd);
+
+/* We assume that GCC 3 indicates that libstdc++3 is in use too. In that
+ case the definition of string::const_iterator is not the same as
+ const char * and we need these extra functions */
+#if __GNUC__ >= 3
+int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd,
+ const char *B,const char *BEnd);
+int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd,
+ std::string::const_iterator B,std::string::const_iterator BEnd);
+int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd,
+ const char *B,const char *BEnd);
+int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd,
+ std::string::const_iterator B,std::string::const_iterator BEnd);
+
+inline APT_PURE int stringcmp(std::string::const_iterator A,std::string::const_iterator Aend,const char *B) {return stringcmp(A,Aend,B,B+strlen(B));}
+inline APT_PURE int stringcasecmp(std::string::const_iterator A,std::string::const_iterator Aend,const char *B) {return stringcasecmp(A,Aend,B,B+strlen(B));}
+#endif
+
+APT_MKSTRCMP2(stringcmp,stringcmp)
+APT_MKSTRCMP2(stringcasecmp,stringcasecmp)
+
+// Return the length of a NULL-terminated string array
+size_t APT_PURE strv_length(const char **str_array);
+
+
+inline const char *DeNull(const char *s) {return (s == 0?"(null)":s);}
+
+class URI
+{
+ void CopyFrom(const std::string &From);
+
+ public:
+
+ std::string Access;
+ std::string User;
+ std::string Password;
+ std::string Host;
+ std::string Path;
+ unsigned int Port;
+
+ operator std::string();
+ inline void operator =(const std::string &From) {CopyFrom(From);}
+ inline bool empty() {return Access.empty();};
+ static std::string SiteOnly(const std::string &URI);
+ static std::string ArchiveOnly(const std::string &URI);
+ static std::string NoUserPassword(const std::string &URI);
+
+ URI(std::string Path) {CopyFrom(Path);}
+ URI() : Port(0) {}
+};
+
+struct SubstVar
+{
+ const char *Subst;
+ const std::string *Contents;
+};
+std::string SubstVar(std::string Str,const struct SubstVar *Vars);
+std::string SubstVar(const std::string &Str,const std::string &Subst,const std::string &Contents);
+
+struct RxChoiceList
+{
+ void *UserData;
+ const char *Str;
+ bool Hit;
+};
+unsigned long RegexChoice(RxChoiceList *Rxs,const char **ListBegin,
+ const char **ListEnd);
+
+#endif
diff --git a/apt-pkg/contrib/weakptr.h b/apt-pkg/contrib/weakptr.h
new file mode 100644
index 0000000..8de727d
--- /dev/null
+++ b/apt-pkg/contrib/weakptr.h
@@ -0,0 +1,64 @@
+/* weakptr.h - An object which supports weak pointers.
+ *
+ * Copyright (C) 2010 Julian Andres Klode <jak@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef WEAK_POINTER_H
+#define WEAK_POINTER_H
+
+#include <set>
+#include <stddef.h>
+
+/**
+ * Class for objects providing support for weak pointers.
+ *
+ * This class allows for the registration of certain pointers as weak,
+ * which will cause them to be set to NULL when the destructor of the
+ * object is called.
+ */
+class WeakPointable {
+private:
+ std::set<WeakPointable**> pointers;
+
+public:
+
+ /**
+ * Add a new weak pointer.
+ */
+ inline void AddWeakPointer(WeakPointable** weakptr) {
+ pointers.insert(weakptr);
+ }
+
+ /**
+ * Remove the weak pointer from the list of weak pointers.
+ */
+ inline void RemoveWeakPointer(WeakPointable **weakptr) {
+ pointers.erase(weakptr);
+ }
+
+ /**
+ * Deconstruct the object, set all weak pointers to NULL.
+ */
+ ~WeakPointable() {
+ std::set<WeakPointable**>::iterator iter = pointers.begin();
+ while (iter != pointers.end())
+ **(iter++) = NULL;
+ }
+};
+
+#endif // WEAK_POINTER_H
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc
new file mode 100644
index 0000000..25e0a33
--- /dev/null
+++ b/apt-pkg/deb/debindexfile.cc
@@ -0,0 +1,431 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Specific sources.list types and the three sorts of Debian
+ index files.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debindexfile.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/debrecords.h>
+#include <apt-pkg/debsrcrecords.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/srcrecords.h>
+
+#include <iostream>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <stdio.h>
+
+#include <sys/stat.h>
+#include <unistd.h>
+ /*}}}*/
+
+// Sources Index /*{{{*/
+debSourcesIndex::debSourcesIndex(IndexTarget const &Target,bool const Trusted) :
+ pkgDebianIndexTargetFile(Target, Trusted), d(NULL)
+{
+}
+std::string debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const &Record,
+ pkgSrcRecords::File const &File) const
+{
+ // The result looks like: http://foo/debian/ stable/main src 1.1.1 (dsc)
+ std::string Res = Target.Description;
+ Res.erase(Target.Description.rfind(' '));
+
+ Res += " ";
+ Res += Record.Package();
+ Res += " ";
+ Res += Record.Version();
+ if (File.Type.empty() == false)
+ Res += " (" + File.Type + ")";
+ return Res;
+}
+pkgSrcRecords::Parser *debSourcesIndex::CreateSrcParser() const
+{
+ std::string const SourcesURI = IndexFileName();
+ if (FileExists(SourcesURI))
+ return new debSrcRecordParser(SourcesURI, this);
+ return NULL;
+}
+bool debSourcesIndex::OpenListFile(FileFd &, std::string const &)
+{
+ return true;
+}
+pkgCacheListParser * debSourcesIndex::CreateListParser(FileFd &)
+{
+ return nullptr;
+}
+uint8_t debSourcesIndex::GetIndexFlags() const
+{
+ return 0;
+}
+ /*}}}*/
+// Packages Index /*{{{*/
+debPackagesIndex::debPackagesIndex(IndexTarget const &Target, bool const Trusted) :
+ pkgDebianIndexTargetFile(Target, Trusted), d(NULL)
+{
+}
+std::string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator const &Ver) const
+{
+ std::string Res = Target.Description;
+ {
+ auto const space = Target.Description.rfind(' ');
+ if (space != std::string::npos)
+ Res.erase(space);
+ }
+
+ Res += " ";
+ Res += Ver.ParentPkg().Name();
+ Res += " ";
+ std::string const Dist = Target.Option(IndexTarget::RELEASE);
+ if (Dist.empty() == false && Dist[Dist.size() - 1] != '/')
+ Res.append(Ver.Arch()).append(" ");
+ Res += Ver.VerStr();
+ return Res;
+}
+uint8_t debPackagesIndex::GetIndexFlags() const
+{
+ return 0;
+}
+ /*}}}*/
+// Translation-* Index /*{{{*/
+debTranslationsIndex::debTranslationsIndex(IndexTarget const &Target) :
+ pkgDebianIndexTargetFile(Target, true), d(NULL)
+{}
+bool debTranslationsIndex::HasPackages() const
+{
+ return Exists();
+}
+bool debTranslationsIndex::OpenListFile(FileFd &Pkg, std::string const &FileName)
+{
+ if (FileExists(FileName))
+ return pkgDebianIndexTargetFile::OpenListFile(Pkg, FileName);
+ return true;
+}
+uint8_t debTranslationsIndex::GetIndexFlags() const
+{
+ return pkgCache::Flag::NotSource | pkgCache::Flag::NoPackages;
+}
+std::string debTranslationsIndex::GetArchitecture() const
+{
+ return std::string();
+}
+pkgCacheListParser * debTranslationsIndex::CreateListParser(FileFd &Pkg)
+{
+ if (Pkg.IsOpen() == false)
+ return nullptr;
+ _error->PushToStack();
+ std::unique_ptr<pkgCacheListParser> Parser(new debTranslationsParser(&Pkg));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ return newError ? nullptr : Parser.release();
+}
+ /*}}}*/
+// dpkg/status Index /*{{{*/
+debStatusIndex::debStatusIndex(std::string const &File) : pkgDebianIndexRealFile(File, true), d(NULL)
+{
+}
+std::string debStatusIndex::GetArchitecture() const
+{
+ return std::string();
+}
+std::string debStatusIndex::GetComponent() const
+{
+ return "now";
+}
+uint8_t debStatusIndex::GetIndexFlags() const
+{
+ return pkgCache::Flag::NotSource;
+}
+
+pkgCacheListParser * debStatusIndex::CreateListParser(FileFd &Pkg)
+{
+ if (Pkg.IsOpen() == false)
+ return nullptr;
+ _error->PushToStack();
+ std::unique_ptr<pkgCacheListParser> Parser(new debStatusListParser(&Pkg));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ return newError ? nullptr : Parser.release();
+}
+ /*}}}*/
+// DebPkgFile Index - a single .deb file as an index /*{{{*/
+debDebPkgFileIndex::debDebPkgFileIndex(std::string const &DebFile)
+ : pkgDebianIndexRealFile(DebFile, true), d(NULL), DebFile(DebFile)
+{
+}
+bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &debfile)
+{
+ struct stat Buf;
+ if (stat(debfile.c_str(), &Buf) != 0)
+ return false;
+
+ // get the control data out of the deb file via dpkg-deb -I
+ std::string dpkg = _config->Find("Dir::Bin::dpkg","dpkg-deb");
+ std::vector<const char *> Args;
+ Args.push_back(dpkg.c_str());
+ Args.push_back("-I");
+ Args.push_back(debfile.c_str());
+ Args.push_back("control");
+ Args.push_back(NULL);
+ FileFd PipeFd;
+ pid_t Child;
+ if(Popen((const char**)&Args[0], PipeFd, Child, FileFd::ReadOnly) == false)
+ return _error->Error("Popen failed");
+
+ std::string line;
+ bool first_line_seen = false;
+ while (PipeFd.ReadLine(line))
+ {
+ if (first_line_seen == false)
+ {
+ if (line.empty())
+ continue;
+ first_line_seen = true;
+ }
+ else if (line.empty())
+ break;
+ content << line << "\n";
+ }
+ content << "Filename: " << debfile << "\n";
+ content << "Size: " << std::to_string(Buf.st_size) << "\n";
+ ExecWait(Child, "Popen");
+
+ return true;
+}
+bool debDebPkgFileIndex::OpenListFile(FileFd &Pkg, std::string const &FileName)
+{
+ // write the control data to a tempfile
+ if (GetTempFile("deb-file-" + flNotDir(FileName), true, &Pkg) == NULL)
+ return false;
+ std::ostringstream content;
+ if (GetContent(content, FileName) == false)
+ return false;
+ std::string const contentstr = content.str();
+ if (contentstr.empty())
+ return true;
+ if (Pkg.Write(contentstr.c_str(), contentstr.length()) == false || Pkg.Seek(0) == false)
+ return false;
+ return true;
+}
+pkgCacheListParser * debDebPkgFileIndex::CreateListParser(FileFd &Pkg)
+{
+ if (Pkg.IsOpen() == false)
+ return nullptr;
+ _error->PushToStack();
+ std::unique_ptr<pkgCacheListParser> Parser(new debDebFileParser(&Pkg, DebFile));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ return newError ? nullptr : Parser.release();
+}
+uint8_t debDebPkgFileIndex::GetIndexFlags() const
+{
+ return pkgCache::Flag::LocalSource;
+}
+std::string debDebPkgFileIndex::GetArchitecture() const
+{
+ return std::string();
+}
+std::string debDebPkgFileIndex::GetComponent() const
+{
+ return "local-deb";
+}
+pkgCache::PkgFileIterator debDebPkgFileIndex::FindInCache(pkgCache &Cache) const
+{
+ std::string const FileName = IndexFileName();
+ pkgCache::PkgFileIterator File = Cache.FileBegin();
+ for (; File.end() == false; ++File)
+ {
+ if (File.FileName() == NULL || FileName != File.FileName())
+ continue;
+ // we can't do size checks here as file size != content size
+ return File;
+ }
+
+ return File;
+}
+std::string debDebPkgFileIndex::ArchiveInfo_impl(pkgCache::VerIterator const &Ver) const
+{
+ std::string Res = IndexFileName() + " ";
+ Res.append(Ver.ParentPkg().Name()).append(" ");
+ Res.append(Ver.Arch()).append(" ");
+ Res.append(Ver.VerStr());
+ return Res;
+}
+ /*}}}*/
+// DscFile Index - a single .dsc file as an index /*{{{*/
+debDscFileIndex::debDscFileIndex(std::string const &DscFile)
+ : pkgDebianIndexRealFile(DscFile, true), d(NULL)
+{
+}
+pkgSrcRecords::Parser *debDscFileIndex::CreateSrcParser() const
+{
+ if (Exists() == false)
+ return NULL;
+ return new debDscRecordParser(File, this);
+}
+std::string debDscFileIndex::GetComponent() const
+{
+ return "local-dsc";
+}
+std::string debDscFileIndex::GetArchitecture() const
+{
+ return "source";
+}
+uint8_t debDscFileIndex::GetIndexFlags() const
+{
+ return pkgCache::Flag::LocalSource;
+}
+ /*}}}*/
+// ControlFile Index - a directory with a debian/control file /*{{{*/
+std::string debDebianSourceDirIndex::GetComponent() const
+{
+ return "local-control";
+}
+ /*}}}*/
+// String Package Index - a string of Packages file content /*{{{*/
+std::string debStringPackageIndex::GetArchitecture() const
+{
+ return std::string();
+}
+std::string debStringPackageIndex::GetComponent() const
+{
+ return "apt-tmp-index";
+}
+uint8_t debStringPackageIndex::GetIndexFlags() const
+{
+ return pkgCache::Flag::NotSource;
+}
+const pkgIndexFile::Type *debStringPackageIndex::GetType() const
+{
+ return pkgIndexFile::Type::GetType("Debian Package Index");
+}
+debStringPackageIndex::debStringPackageIndex(std::string const &content) :
+ pkgDebianIndexRealFile("", false), d(NULL)
+{
+ FileFd fd;
+ GetTempFile("apt-tmp-index", false, &fd);
+ fd.Write(content.data(), content.length());
+ File = fd.Name();
+}
+debStringPackageIndex::~debStringPackageIndex()
+{
+ RemoveFile("~debStringPackageIndex", File);
+}
+ /*}}}*/
+
+// Index File types for Debian /*{{{*/
+class APT_HIDDEN debIFTypeSrc : public pkgIndexFile::Type
+{
+ public:
+ debIFTypeSrc() {Label = "Debian Source Index";};
+};
+class APT_HIDDEN debIFTypePkg : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &File) const APT_OVERRIDE
+ {
+ return new debRecordParser(File.FileName(),*File.Cache());
+ };
+ debIFTypePkg() {Label = "Debian Package Index";};
+};
+class APT_HIDDEN debIFTypeTrans : public debIFTypePkg
+{
+ public:
+ debIFTypeTrans() {Label = "Debian Translation Index";};
+};
+class APT_HIDDEN debIFTypeStatus : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &File) const APT_OVERRIDE
+ {
+ return new debRecordParser(File.FileName(),*File.Cache());
+ };
+ debIFTypeStatus() {Label = "Debian dpkg status file";};
+};
+class APT_HIDDEN debIFTypeDebPkgFile : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &File) const APT_OVERRIDE
+ {
+ return new debDebFileRecordParser(File.FileName());
+ };
+ debIFTypeDebPkgFile() {Label = "Debian deb file";};
+};
+class APT_HIDDEN debIFTypeDscFile : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string const &DscFile) const APT_OVERRIDE
+ {
+ return new debDscRecordParser(DscFile, NULL);
+ };
+ debIFTypeDscFile() {Label = "Debian dsc file";};
+};
+class APT_HIDDEN debIFTypeDebianSourceDir : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string const &SourceDir) const APT_OVERRIDE
+ {
+ return new debDscRecordParser(SourceDir + std::string("/debian/control"), NULL);
+ };
+ debIFTypeDebianSourceDir() {Label = "Debian control file";};
+};
+
+APT_HIDDEN debIFTypeSrc _apt_Src;
+APT_HIDDEN debIFTypePkg _apt_Pkg;
+APT_HIDDEN debIFTypeTrans _apt_Trans;
+APT_HIDDEN debIFTypeStatus _apt_Status;
+APT_HIDDEN debIFTypeDebPkgFile _apt_DebPkgFile;
+// file based pseudo indexes
+APT_HIDDEN debIFTypeDscFile _apt_DscFile;
+APT_HIDDEN debIFTypeDebianSourceDir _apt_DebianSourceDir;
+
+const pkgIndexFile::Type *debSourcesIndex::GetType() const
+{
+ return &_apt_Src;
+}
+const pkgIndexFile::Type *debPackagesIndex::GetType() const
+{
+ return &_apt_Pkg;
+}
+const pkgIndexFile::Type *debTranslationsIndex::GetType() const
+{
+ return &_apt_Trans;
+}
+const pkgIndexFile::Type *debStatusIndex::GetType() const
+{
+ return &_apt_Status;
+}
+const pkgIndexFile::Type *debDebPkgFileIndex::GetType() const
+{
+ return &_apt_DebPkgFile;
+}
+const pkgIndexFile::Type *debDscFileIndex::GetType() const
+{
+ return &_apt_DscFile;
+}
+const pkgIndexFile::Type *debDebianSourceDirIndex::GetType() const
+{
+ return &_apt_DebianSourceDir;
+}
+ /*}}}*/
+
+debStatusIndex::~debStatusIndex() {}
+debPackagesIndex::~debPackagesIndex() {}
+debTranslationsIndex::~debTranslationsIndex() {}
+debSourcesIndex::~debSourcesIndex() {}
+
+debDebPkgFileIndex::~debDebPkgFileIndex() {}
+debDscFileIndex::~debDscFileIndex() {}
diff --git a/apt-pkg/deb/debindexfile.h b/apt-pkg/deb/debindexfile.h
new file mode 100644
index 0000000..5c89f9c
--- /dev/null
+++ b/apt-pkg/deb/debindexfile.h
@@ -0,0 +1,197 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Index Files
+
+ There are three sorts currently
+
+ Package files that have File: tags
+ Package files that don't (/var/lib/dpkg/status)
+ Source files
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBINDEXFILE_H
+#define PKGLIB_DEBINDEXFILE_H
+
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/srcrecords.h>
+
+#include <string>
+
+class OpProgress;
+class pkgAcquire;
+class pkgCacheGenerator;
+
+class debStatusIndex : public pkgDebianIndexRealFile
+{
+ void * const d;
+protected:
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+ virtual std::string GetComponent() const APT_OVERRIDE;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+
+public:
+
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ // Interface for the Cache Generator
+ virtual bool HasPackages() const APT_OVERRIDE {return true;};
+ // Abort if the file does not exist.
+ virtual bool Exists() const APT_OVERRIDE {return true;};
+
+ virtual pkgCacheListParser * CreateListParser(FileFd &Pkg) APT_OVERRIDE;
+
+ debStatusIndex(std::string const &File);
+ virtual ~debStatusIndex();
+};
+
+class debPackagesIndex : public pkgDebianIndexTargetFile
+{
+ void * const d;
+protected:
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+
+public:
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ // Stuff for accessing files on remote items
+ virtual std::string ArchiveInfo(pkgCache::VerIterator const &Ver) const APT_OVERRIDE;
+
+ // Interface for the Cache Generator
+ virtual bool HasPackages() const APT_OVERRIDE {return true;};
+
+ debPackagesIndex(IndexTarget const &Target, bool const Trusted);
+ virtual ~debPackagesIndex();
+};
+
+class debTranslationsIndex : public pkgDebianIndexTargetFile
+{
+ void * const d;
+protected:
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+ virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) APT_OVERRIDE;
+ APT_HIDDEN virtual pkgCacheListParser * CreateListParser(FileFd &Pkg) APT_OVERRIDE;
+
+public:
+
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ // Interface for the Cache Generator
+ virtual bool HasPackages() const APT_OVERRIDE;
+
+ debTranslationsIndex(IndexTarget const &Target);
+ virtual ~debTranslationsIndex();
+};
+
+class debSourcesIndex : public pkgDebianIndexTargetFile
+{
+ void * const d;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+ virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) APT_OVERRIDE;
+ APT_HIDDEN virtual pkgCacheListParser * CreateListParser(FileFd &Pkg) APT_OVERRIDE;
+
+ public:
+
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ // Stuff for accessing files on remote items
+ virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record,
+ pkgSrcRecords::File const &File) const APT_OVERRIDE;
+
+ // Interface for the record parsers
+ virtual pkgSrcRecords::Parser *CreateSrcParser() const APT_OVERRIDE;
+
+ // Interface for the Cache Generator
+ virtual bool HasPackages() const APT_OVERRIDE {return false;};
+
+ debSourcesIndex(IndexTarget const &Target, bool const Trusted);
+ virtual ~debSourcesIndex();
+};
+
+class debDebPkgFileIndex : public pkgDebianIndexRealFile
+{
+ void * const d;
+ std::string DebFile;
+
+protected:
+ virtual std::string GetComponent() const APT_OVERRIDE;
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+ virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) APT_OVERRIDE;
+ APT_HIDDEN virtual pkgCacheListParser * CreateListParser(FileFd &Pkg) APT_OVERRIDE;
+
+public:
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ /** get the control (file) content of the deb file
+ *
+ * @param[out] content of the control file
+ * @param debfile is the filename of the .deb-file
+ * @return \b true if successful, otherwise \b false.
+ */
+ static bool GetContent(std::ostream &content, std::string const &debfile);
+
+ // Interface for the Cache Generator
+ virtual bool HasPackages() const APT_OVERRIDE {return true;}
+ virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const APT_OVERRIDE;
+
+ // Interface for acquire
+
+ debDebPkgFileIndex(std::string const &DebFile);
+ virtual ~debDebPkgFileIndex();
+
+ //FIXME: use proper virtual-handling on next ABI break
+ APT_HIDDEN std::string ArchiveInfo_impl(pkgCache::VerIterator const &Ver) const;
+};
+
+class debDscFileIndex : public pkgDebianIndexRealFile
+{
+ void * const d;
+
+protected:
+ virtual std::string GetComponent() const APT_OVERRIDE;
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+
+public:
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+ virtual pkgSrcRecords::Parser *CreateSrcParser() const APT_OVERRIDE;
+ virtual bool HasPackages() const APT_OVERRIDE {return false;};
+
+ debDscFileIndex(std::string const &DscFile);
+ virtual ~debDscFileIndex();
+};
+
+class debDebianSourceDirIndex : public debDscFileIndex
+{
+protected:
+ virtual std::string GetComponent() const APT_OVERRIDE;
+
+public:
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+};
+
+class debStringPackageIndex : public pkgDebianIndexRealFile
+{
+ void * const d;
+protected:
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+ virtual std::string GetComponent() const APT_OVERRIDE;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+
+public:
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ // Interface for the Cache Generator
+ virtual bool HasPackages() const APT_OVERRIDE {return true;};
+ // Abort if the file does not exist.
+ virtual bool Exists() const APT_OVERRIDE {return true;};
+
+ debStringPackageIndex(std::string const &content);
+ virtual ~debStringPackageIndex();
+};
+#endif
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
new file mode 100644
index 0000000..80ca10e
--- /dev/null
+++ b/apt-pkg/deb/deblistparser.cc
@@ -0,0 +1,1066 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Cache Generator - Generator for the cache structure.
+
+ This builds the cache structure from the abstract package list parser.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cachefilter.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/crc-16.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile-keys.h>
+#include <apt-pkg/tagfile.h>
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <stddef.h>
+#include <string.h>
+ /*}}}*/
+
+using std::string;
+using APT::StringView;
+
+static const debListParser::WordList PrioList[] = {
+ {"required",pkgCache::State::Required},
+ {"important",pkgCache::State::Important},
+ {"standard",pkgCache::State::Standard},
+ {"optional",pkgCache::State::Optional},
+ {"extra",pkgCache::State::Extra},
+ {"", 0}};
+
+// ListParser::debListParser - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Provide an architecture and only this one and "all" will be accepted
+ in Step(), if no Architecture is given we will accept every arch
+ we would accept in general with checkArchitecture() */
+debListParser::debListParser(FileFd *File) :
+ pkgCacheListParser(), Tags(File)
+{
+ // this dance allows an empty value to override the default
+ if (_config->Exists("pkgCacheGen::ForceEssential"))
+ {
+ forceEssential = _config->FindVector("pkgCacheGen::ForceEssential");
+ if (forceEssential.empty() == false && _config->Find("pkgCacheGen::ForceEssential").empty())
+ forceEssential.emplace_back("apt");
+ }
+ else
+ forceEssential.emplace_back("apt");
+ forceImportant = _config->FindVector("pkgCacheGen::ForceImportant");
+ myArch = _config->Find("APT::Architecture");
+}
+ /*}}}*/
+// ListParser::Package - Return the package name /*{{{*/
+// ---------------------------------------------------------------------
+/* This is to return the name of the package this section describes */
+string debListParser::Package() {
+ string Result = Section.Find(pkgTagSection::Key::Package).to_string();
+
+ // Normalize mixed case package names to lower case, like dpkg does
+ // See Bug#807012 for details.
+ // Only do this when the package name does not contain a / - as that
+ // indicates that the package name was derived from a filename given
+ // to install or build-dep or similar (Bug#854794)
+ if (likely(Result.find('/') == string::npos))
+ {
+ for (char &c: Result)
+ {
+ char l = tolower_ascii_inline(c);
+ if (unlikely(l != c))
+ c = l;
+ }
+ }
+
+ if(unlikely(Result.empty() == true))
+ _error->Error("Encountered a section with no Package: header");
+ return Result;
+}
+ /*}}}*/
+// ListParser::Architecture - Return the package arch /*{{{*/
+// ---------------------------------------------------------------------
+/* This will return the Architecture of the package this section describes */
+APT::StringView debListParser::Architecture() {
+ auto const Arch = Section.Find(pkgTagSection::Key::Architecture);
+ return Arch.empty() ? "none" : Arch;
+}
+ /*}}}*/
+// ListParser::ArchitectureAll /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debListParser::ArchitectureAll() {
+ return Section.Find(pkgTagSection::Key::Architecture) == "all";
+}
+ /*}}}*/
+// ListParser::Version - Return the version string /*{{{*/
+// ---------------------------------------------------------------------
+/* This is to return the string describing the version in debian form,
+ epoch:upstream-release. If this returns the blank string then the
+ entry is assumed to only describe package properties */
+APT::StringView debListParser::Version()
+{
+ return Section.Find(pkgTagSection::Key::Version);
+}
+ /*}}}*/
+unsigned char debListParser::ParseMultiArch(bool const showErrors) /*{{{*/
+{
+ unsigned char MA;
+ auto const MultiArch = Section.Find(pkgTagSection::Key::Multi_Arch);
+ if (MultiArch.empty() == true || MultiArch == "no")
+ MA = pkgCache::Version::No;
+ else if (MultiArch == "same") {
+ if (ArchitectureAll() == true)
+ {
+ if (showErrors == true)
+ _error->Warning("Architecture: all package '%s' can't be Multi-Arch: same",
+ Section.FindS("Package").c_str());
+ MA = pkgCache::Version::No;
+ }
+ else
+ MA = pkgCache::Version::Same;
+ }
+ else if (MultiArch == "foreign")
+ MA = pkgCache::Version::Foreign;
+ else if (MultiArch == "allowed")
+ MA = pkgCache::Version::Allowed;
+ else
+ {
+ if (showErrors == true)
+ _error->Warning("Unknown Multi-Arch type '%s' for package '%s'",
+ MultiArch.to_string().c_str(), Section.FindS("Package").c_str());
+ MA = pkgCache::Version::No;
+ }
+
+ if (ArchitectureAll() == true)
+ MA |= pkgCache::Version::All;
+
+ return MA;
+}
+ /*}}}*/
+// ListParser::NewVersion - Fill in the version structure /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debListParser::NewVersion(pkgCache::VerIterator &Ver)
+{
+ const char *Start;
+ const char *Stop;
+
+ // Parse the section
+ if (Section.Find(pkgTagSection::Key::Section,Start,Stop) == true)
+ {
+ map_stringitem_t const idx = StoreString(pkgCacheGenerator::SECTION, Start, Stop - Start);
+ Ver->Section = idx;
+ }
+ // Parse the source package name
+ pkgCache::GrpIterator G = Ver.ParentPkg().Group();
+ Ver->SourcePkgName = G->Name;
+ Ver->SourceVerStr = Ver->VerStr;
+ if (Section.Find(pkgTagSection::Key::Source,Start,Stop) == true)
+ {
+ const char * const Space = static_cast<const char *>(memchr(Start, ' ', Stop - Start));
+ pkgCache::VerIterator V;
+
+ if (Space != NULL)
+ {
+ const char * const Open = static_cast<const char *>(memchr(Space, '(', Stop - Space));
+ if (likely(Open != NULL))
+ {
+ const char * const Close = static_cast<const char *>(memchr(Open, ')', Stop - Open));
+ if (likely(Close != NULL))
+ {
+ APT::StringView const version(Open + 1, (Close - Open) - 1);
+ if (version != Ver.VerStr())
+ {
+ map_stringitem_t const idx = StoreString(pkgCacheGenerator::VERSIONNUMBER, version);
+ G = Ver.ParentPkg().Group();
+ Ver->SourceVerStr = idx;
+ }
+ }
+ }
+ Stop = Space;
+ }
+
+ APT::StringView const pkgname(Start, Stop - Start);
+ if (pkgname != G.Name())
+ {
+ for (pkgCache::PkgIterator P = G.PackageList(); P.end() == false; P = G.NextPkg(P))
+ {
+ for (V = P.VersionList(); V.end() == false; ++V)
+ {
+ if (pkgname == V.SourcePkgName())
+ {
+ Ver->SourcePkgName = V->SourcePkgName;
+ break;
+ }
+ }
+ if (V.end() == false)
+ break;
+ }
+ if (V.end() == true)
+ {
+ map_stringitem_t const idx = StoreString(pkgCacheGenerator::PKGNAME, pkgname);
+ G = Ver.ParentPkg().Group();
+ Ver->SourcePkgName = idx;
+ }
+ }
+ }
+
+ Ver->MultiArch = ParseMultiArch(true);
+ // Archive Size
+ Ver->Size = Section.FindULL(pkgTagSection::Key::Size);
+ // Unpacked Size (in K)
+ Ver->InstalledSize = Section.FindULL(pkgTagSection::Key::Installed_Size);
+ Ver->InstalledSize *= 1024;
+
+ // Priority
+ if (Section.Find(pkgTagSection::Key::Priority,Start,Stop) == true)
+ {
+ if (GrabWord(StringView(Start,Stop-Start),PrioList,Ver->Priority) == false)
+ Ver->Priority = pkgCache::State::Extra;
+ }
+
+ if (ParseDepends(Ver,pkgTagSection::Key::Pre_Depends,pkgCache::Dep::PreDepends) == false)
+ return false;
+ if (ParseDepends(Ver,pkgTagSection::Key::Depends,pkgCache::Dep::Depends) == false)
+ return false;
+ if (ParseDepends(Ver,pkgTagSection::Key::Conflicts,pkgCache::Dep::Conflicts) == false)
+ return false;
+ if (ParseDepends(Ver,pkgTagSection::Key::Breaks,pkgCache::Dep::DpkgBreaks) == false)
+ return false;
+ if (ParseDepends(Ver,pkgTagSection::Key::Recommends,pkgCache::Dep::Recommends) == false)
+ return false;
+ if (ParseDepends(Ver,pkgTagSection::Key::Suggests,pkgCache::Dep::Suggests) == false)
+ return false;
+ if (ParseDepends(Ver,pkgTagSection::Key::Replaces,pkgCache::Dep::Replaces) == false)
+ return false;
+ if (ParseDepends(Ver,pkgTagSection::Key::Enhances,pkgCache::Dep::Enhances) == false)
+ return false;
+ // Obsolete.
+ if (ParseDepends(Ver,pkgTagSection::Key::Optional,pkgCache::Dep::Suggests) == false)
+ return false;
+
+ if (ParseProvides(Ver) == false)
+ return false;
+
+ return true;
+}
+ /*}}}*/
+// ListParser::AvailableDescriptionLanguages /*{{{*/
+std::vector<std::string> debListParser::AvailableDescriptionLanguages()
+{
+ std::vector<std::string> const understood = APT::Configuration::getLanguages();
+ std::vector<std::string> avail;
+ static constexpr int prefixLen = 12;
+ char buf[32] = "Description-";
+ if (Section.Exists("Description") == true)
+ avail.push_back("");
+ for (std::vector<std::string>::const_iterator lang = understood.begin(); lang != understood.end(); ++lang)
+ {
+ if (unlikely(lang->size() > sizeof(buf) - prefixLen)) {
+ _error->Warning("Ignoring translated description %s", lang->c_str());
+ continue;
+ }
+ memcpy(buf + prefixLen, lang->c_str(), lang->size());
+ if (Section.Exists(StringView(buf, prefixLen + lang->size())) == true)
+ avail.push_back(*lang);
+ }
+ return avail;
+}
+ /*}}}*/
+// ListParser::Description_md5 - Return the description_md5 MD5SumValue /*{{{*/
+// ---------------------------------------------------------------------
+/* This is to return the md5 string to allow the check if it is the right
+ description. If no Description-md5 is found in the section it will be
+ calculated.
+ */
+APT::StringView debListParser::Description_md5()
+{
+ StringView const value = Section.Find(pkgTagSection::Key::Description_md5);
+ if (unlikely(value.empty() == true))
+ {
+ StringView const desc = Section.Find(pkgTagSection::Key::Description);
+ if (desc == "\n")
+ return StringView();
+
+ MD5Summation md5;
+ md5.Add(desc.data(), desc.size());
+ md5.Add("\n");
+ MD5Buffer = md5.Result();
+ return StringView(MD5Buffer);
+ }
+ else if (likely(value.size() == 32))
+ {
+ return value;
+ }
+ _error->Error("Malformed Description-md5 line; doesn't have the required length (32 != %d) '%.*s'", (int)value.size(), (int)value.length(), value.data());
+ return StringView();
+}
+ /*}}}*/
+// ListParser::UsePackage - Update a package structure /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called to update the package with any new information
+ that might be found in the section */
+bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver)
+{
+ string const static myArch = _config->Find("APT::Architecture");
+ // Possible values are: "all", "native", "installed" and "none"
+ // The "installed" mode is handled by ParseStatus(), See #544481 and friends.
+ string const static essential = _config->Find("pkgCacheGen::Essential", "all");
+ if (essential == "all" ||
+ (essential == "native" && Pkg->Arch != 0 && myArch == Pkg.Arch()))
+ if (Section.FindFlag(pkgTagSection::Key::Essential,Pkg->Flags,pkgCache::Flag::Essential) == false)
+ return false;
+ if (Section.FindFlag(pkgTagSection::Key::Important,Pkg->Flags,pkgCache::Flag::Important) == false)
+ return false;
+
+ if (std::find(forceEssential.begin(), forceEssential.end(), Pkg.Name()) != forceEssential.end())
+ {
+ if ((essential == "native" && Pkg->Arch != 0 && myArch == Pkg.Arch()) ||
+ essential == "all")
+ Pkg->Flags |= pkgCache::Flag::Essential | pkgCache::Flag::Important;
+ else
+ Pkg->Flags |= pkgCache::Flag::Important;
+ }
+ else if (std::find(forceImportant.begin(), forceImportant.end(), Pkg.Name()) != forceImportant.end())
+ Pkg->Flags |= pkgCache::Flag::Important;
+
+ if (ParseStatus(Pkg,Ver) == false)
+ return false;
+ return true;
+}
+ /*}}}*/
+// ListParser::VersionHash - Compute a unique hash for this version /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned short debListParser::VersionHash()
+{
+ static constexpr pkgTagSection::Key Sections[] ={
+ pkgTagSection::Key::Installed_Size,
+ pkgTagSection::Key::Depends,
+ pkgTagSection::Key::Pre_Depends,
+// pkgTagSection::Key::Suggests,
+// pkgTagSection::Key::Recommends",
+ pkgTagSection::Key::Conflicts,
+ pkgTagSection::Key::Breaks,
+ pkgTagSection::Key::Replaces};
+ unsigned long Result = INIT_FCS;
+ for (auto I : Sections)
+ {
+ const char *Start;
+ const char *End;
+ if (Section.Find(I,Start,End) == false)
+ continue;
+
+ /* Strip out any spaces from the text, this undoes dpkgs reformatting
+ of certain fields. dpkg also has the rather interesting notion of
+ reformatting depends operators < -> <=, so we drop all = from the
+ string to make that not matter. */
+ for (; Start != End; ++Start)
+ {
+ // Strip away 0: epochs from input
+ if (*Start == '0' && Start[1] == ':') {
+ Start++; // Skip the :
+ continue; // Skip the 0
+ }
+ if (isspace_ascii(*Start) != 0 || *Start == '=')
+ continue;
+ Result = AddCRC16Byte(Result, tolower_ascii_unsafe(*Start));
+ }
+
+
+ }
+
+ return Result;
+}
+ /*}}}*/
+// StatusListParser::ParseStatus - Parse the status field /*{{{*/
+// ---------------------------------------------------------------------
+/* Status lines are of the form,
+ Status: want flag status
+ want = unknown, install, hold, deinstall, purge
+ flag = ok, reinstreq
+ status = not-installed, config-files, half-installed, unpacked,
+ half-configured, triggers-awaited, triggers-pending, installed
+ */
+bool debListParser::ParseStatus(pkgCache::PkgIterator &,
+ pkgCache::VerIterator &)
+{
+ return true;
+}
+bool debStatusListParser::ParseStatus(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver)
+{
+ const char *Start;
+ const char *Stop;
+ if (Section.Find(pkgTagSection::Key::Status,Start,Stop) == false)
+ return true;
+
+ // UsePackage() is responsible for setting the flag in the default case
+ bool const static essential = _config->Find("pkgCacheGen::Essential", "") == "installed";
+ if (essential == true &&
+ Section.FindFlag(pkgTagSection::Key::Essential,Pkg->Flags,pkgCache::Flag::Essential) == false)
+ return false;
+
+ // Isolate the first word
+ const char *I = Start;
+ for(; I < Stop && *I != ' '; I++);
+ if (I >= Stop || *I != ' ')
+ return _error->Error("Malformed Status line");
+
+ // Process the want field
+ WordList WantList[] = {{"unknown",pkgCache::State::Unknown},
+ {"install",pkgCache::State::Install},
+ {"hold",pkgCache::State::Hold},
+ {"deinstall",pkgCache::State::DeInstall},
+ {"purge",pkgCache::State::Purge},
+ {"", 0}};
+ if (GrabWord(StringView(Start,I-Start),WantList,Pkg->SelectedState) == false)
+ return _error->Error("Malformed 1st word in the Status line");
+
+ // Isloate the next word
+ I++;
+ Start = I;
+ for(; I < Stop && *I != ' '; I++);
+ if (I >= Stop || *I != ' ')
+ return _error->Error("Malformed status line, no 2nd word");
+
+ // Process the flag field
+ WordList FlagList[] = {{"ok",pkgCache::State::Ok},
+ {"reinstreq",pkgCache::State::ReInstReq},
+ {"hold",pkgCache::State::HoldInst},
+ {"hold-reinstreq",pkgCache::State::HoldReInstReq},
+ {"", 0}};
+ if (GrabWord(StringView(Start,I-Start),FlagList,Pkg->InstState) == false)
+ return _error->Error("Malformed 2nd word in the Status line");
+
+ // Isloate the last word
+ I++;
+ Start = I;
+ for(; I < Stop && *I != ' '; I++);
+ if (I != Stop)
+ return _error->Error("Malformed Status line, no 3rd word");
+
+ // Process the flag field
+ WordList StatusList[] = {{"not-installed",pkgCache::State::NotInstalled},
+ {"config-files",pkgCache::State::ConfigFiles},
+ {"half-installed",pkgCache::State::HalfInstalled},
+ {"unpacked",pkgCache::State::UnPacked},
+ {"half-configured",pkgCache::State::HalfConfigured},
+ {"triggers-awaited",pkgCache::State::TriggersAwaited},
+ {"triggers-pending",pkgCache::State::TriggersPending},
+ {"installed",pkgCache::State::Installed},
+ {"", 0}};
+ if (GrabWord(StringView(Start,I-Start),StatusList,Pkg->CurrentState) == false)
+ return _error->Error("Malformed 3rd word in the Status line");
+
+ /* A Status line marks the package as indicating the current
+ version as well. Only if it is actually installed.. Otherwise
+ the interesting dpkg handling of the status file creates bogus
+ entries. */
+ if (!(Pkg->CurrentState == pkgCache::State::NotInstalled ||
+ Pkg->CurrentState == pkgCache::State::ConfigFiles))
+ {
+ if (Ver.end() == true)
+ _error->Warning("Encountered status field in a non-version description");
+ else
+ Pkg->CurrentVer = Ver.Index();
+ }
+
+ return true;
+}
+
+const char *debListParser::ConvertRelation(const char *I,unsigned int &Op)
+{
+ // Determine the operator
+ switch (*I)
+ {
+ case '<':
+ I++;
+ if (*I == '=')
+ {
+ I++;
+ Op = pkgCache::Dep::LessEq;
+ break;
+ }
+
+ if (*I == '<')
+ {
+ I++;
+ Op = pkgCache::Dep::Less;
+ break;
+ }
+
+ // < is the same as <= and << is really Cs < for some reason
+ Op = pkgCache::Dep::LessEq;
+ break;
+
+ case '>':
+ I++;
+ if (*I == '=')
+ {
+ I++;
+ Op = pkgCache::Dep::GreaterEq;
+ break;
+ }
+
+ if (*I == '>')
+ {
+ I++;
+ Op = pkgCache::Dep::Greater;
+ break;
+ }
+
+ // > is the same as >= and >> is really Cs > for some reason
+ Op = pkgCache::Dep::GreaterEq;
+ break;
+
+ case '=':
+ Op = pkgCache::Dep::Equals;
+ I++;
+ break;
+
+ // HACK around bad package definitions
+ default:
+ Op = pkgCache::Dep::Equals;
+ break;
+ }
+ return I;
+}
+ /*}}}*/
+// ListParser::ParseDepends - Parse a dependency element /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses the dependency elements out of a standard string in place,
+ bit by bit. */
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op)
+ { return ParseDepends(Start, Stop, Package, Ver, Op, false, true, false); }
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op,
+ bool const &ParseArchFlags)
+ { return ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags, true, false); }
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op,
+ bool const &ParseArchFlags, bool const &StripMultiArch)
+ { return ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags, StripMultiArch, false); }
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+ string &Package,string &Ver,
+ unsigned int &Op, bool const &ParseArchFlags,
+ bool const &StripMultiArch,
+ bool const &ParseRestrictionsList)
+{
+ return debListParser::ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags,
+ StripMultiArch, ParseRestrictionsList,
+ _config->Find("APT::Architecture"));
+}
+
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+ string &Package,string &Ver,
+ unsigned int &Op, bool const &ParseArchFlags,
+ bool const &StripMultiArch,
+ bool const &ParseRestrictionsList,
+ string const &Arch)
+{
+ StringView PackageView;
+ StringView VerView;
+
+ auto res = ParseDepends(Start, Stop, PackageView, VerView, Op, (bool)ParseArchFlags,
+ (bool) StripMultiArch, (bool) ParseRestrictionsList, Arch);
+ Package = PackageView.to_string();
+ Ver = VerView.to_string();
+
+ return res;
+}
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+ StringView &Package,StringView &Ver,
+ unsigned int &Op, bool ParseArchFlags,
+ bool StripMultiArch,
+ bool ParseRestrictionsList)
+{
+ return debListParser::ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags,
+ StripMultiArch, ParseRestrictionsList,
+ _config->Find("APT::Architecture"));
+}
+
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+ StringView &Package,StringView &Ver,
+ unsigned int &Op, bool ParseArchFlags,
+ bool StripMultiArch,
+ bool ParseRestrictionsList, string const &Arch)
+{
+ // Strip off leading space
+ for (;Start != Stop && isspace_ascii(*Start) != 0; ++Start);
+
+ // Parse off the package name
+ const char *I = Start;
+ for (;I != Stop && isspace_ascii(*I) == 0 && *I != '(' && *I != ')' &&
+ *I != ',' && *I != '|' && *I != '[' && *I != ']' &&
+ *I != '<' && *I != '>'; ++I);
+
+ // Malformed, no '('
+ if (I != Stop && *I == ')')
+ return 0;
+
+ if (I == Start)
+ return 0;
+
+ // Stash the package name
+ Package = StringView(Start, I - Start);
+
+ // We don't want to confuse library users which can't handle MultiArch
+ if (StripMultiArch == true) {
+ size_t const found = Package.rfind(':');
+ if (found != StringView::npos &&
+ (Package.substr(found) == ":any" ||
+ Package.substr(found) == ":native" ||
+ Package.substr(found +1) == Arch))
+ Package = Package.substr(0,found);
+ }
+
+ // Skip white space to the '('
+ for (;I != Stop && isspace_ascii(*I) != 0 ; I++);
+
+ // Parse a version
+ if (I != Stop && *I == '(')
+ {
+ // Skip the '('
+ for (I++; I != Stop && isspace_ascii(*I) != 0 ; I++);
+ if (I + 3 >= Stop)
+ return 0;
+ I = ConvertRelation(I,Op);
+
+ // Skip whitespace
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
+ Start = I;
+ I = (const char*) memchr(I, ')', Stop - I);
+ if (I == NULL || Start == I)
+ return 0;
+
+ // Skip trailing whitespace
+ const char *End = I;
+ for (; End > Start && isspace_ascii(End[-1]); End--);
+
+ Ver = StringView(Start,End-Start);
+ I++;
+ }
+ else
+ {
+ Ver = StringView();
+ Op = pkgCache::Dep::NoOp;
+ }
+
+ // Skip whitespace
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
+
+ if (unlikely(ParseArchFlags == true))
+ {
+ APT::CacheFilter::PackageArchitectureMatchesSpecification matchesArch(Arch, false);
+
+ // Parse an architecture
+ if (I != Stop && *I == '[')
+ {
+ ++I;
+ // malformed
+ if (unlikely(I == Stop))
+ return 0;
+
+ const char *End = I;
+ bool Found = false;
+ bool NegArch = false;
+ while (I != Stop)
+ {
+ // look for whitespace or ending ']'
+ for (;End != Stop && !isspace_ascii(*End) && *End != ']'; ++End);
+
+ if (unlikely(End == Stop))
+ return 0;
+
+ if (*I == '!')
+ {
+ NegArch = true;
+ ++I;
+ }
+
+ std::string const arch(I, End);
+ if (arch.empty() == false && matchesArch(arch.c_str()) == true)
+ {
+ Found = true;
+ if (I[-1] != '!')
+ NegArch = false;
+ // we found a match, so fast-forward to the end of the wildcards
+ for (; End != Stop && *End != ']'; ++End);
+ }
+
+ if (*End++ == ']') {
+ I = End;
+ break;
+ }
+
+ I = End;
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
+ }
+
+ if (NegArch == true)
+ Found = !Found;
+
+ if (Found == false)
+ Package = ""; /* not for this arch */
+ }
+
+ // Skip whitespace
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
+ }
+
+ if (unlikely(ParseRestrictionsList == true))
+ {
+ // Parse a restrictions formula which is in disjunctive normal form:
+ // (foo AND bar) OR (blub AND bla)
+
+ std::vector<string> const profiles = APT::Configuration::getBuildProfiles();
+
+ // if the next character is a restriction list, then by default the
+ // dependency does not apply and the conditions have to be checked
+ // if the next character is not a restriction list, then by default the
+ // dependency applies
+ bool applies1 = (*I != '<');
+ while (I != Stop)
+ {
+ if (*I != '<')
+ break;
+
+ ++I;
+ // malformed
+ if (unlikely(I == Stop))
+ return 0;
+
+ const char *End = I;
+
+ // if of the prior restriction list is already fulfilled, then
+ // we can just skip to the end of the current list
+ if (applies1) {
+ for (;End != Stop && *End != '>'; ++End);
+ I = ++End;
+ // skip whitespace
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
+ } else {
+ bool applies2 = true;
+ // all the conditions inside a restriction list have to be
+ // met so once we find one that is not met, we can skip to
+ // the end of this list
+ while (I != Stop)
+ {
+ // look for whitespace or ending '>'
+ // End now points to the character after the current term
+ for (;End != Stop && !isspace_ascii(*End) && *End != '>'; ++End);
+
+ if (unlikely(End == Stop))
+ return 0;
+
+ bool NegRestriction = false;
+ if (*I == '!')
+ {
+ NegRestriction = true;
+ ++I;
+ }
+
+ std::string const restriction(I, End);
+ if (restriction.empty() == false && profiles.empty() == false &&
+ std::find(profiles.begin(), profiles.end(), restriction) != profiles.end())
+ {
+ if (NegRestriction) {
+ applies2 = false;
+ // since one of the terms does not apply we don't have to check the others
+ for (; End != Stop && *End != '>'; ++End);
+ }
+ } else {
+ if (!NegRestriction) {
+ applies2 = false;
+ // since one of the terms does not apply we don't have to check the others
+ for (; End != Stop && *End != '>'; ++End);
+ }
+ }
+
+ if (*End++ == '>') {
+ I = End;
+ // skip whitespace
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
+ break;
+ }
+
+ I = End;
+ // skip whitespace
+ for (;I != Stop && isspace_ascii(*I) != 0; I++);
+ }
+ if (applies2) {
+ applies1 = true;
+ }
+ }
+ }
+
+ if (applies1 == false) {
+ Package = ""; //not for this restriction
+ }
+ }
+
+ if (I != Stop && *I == '|')
+ Op |= pkgCache::Dep::Or;
+
+ if (I == Stop || *I == ',' || *I == '|')
+ {
+ if (I != Stop)
+ for (I++; I != Stop && isspace_ascii(*I) != 0; I++);
+ return I;
+ }
+
+ return 0;
+}
+ /*}}}*/
+// ListParser::ParseDepends - Parse a dependency list /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the higher level depends parser. It takes a tag and generates
+ a complete depends tree for the given version. */
+bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
+ pkgTagSection::Key Key,unsigned int Type)
+{
+ const char *Start;
+ const char *Stop;
+ if (Section.Find(Key,Start,Stop) == false || Start == Stop)
+ return true;
+
+ string const pkgArch = Ver.Arch();
+
+ while (1)
+ {
+ StringView Package;
+ StringView Version;
+ unsigned int Op;
+
+ Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false, myArch);
+ if (Start == 0)
+ return _error->Error("Problem parsing dependency %zu",static_cast<size_t>(Key)); // TODO
+ size_t const found = Package.rfind(':');
+
+ if (found == string::npos)
+ {
+ if (NewDepends(Ver,Package,pkgArch,Version,Op,Type) == false)
+ return false;
+ }
+ else if (Package.substr(found) == ":any")
+ {
+ if (NewDepends(Ver,Package,"any",Version,Op,Type) == false)
+ return false;
+ }
+ else
+ {
+ // Such dependencies are not supposed to be accepted …
+ // … but this is probably the best thing to do anyway
+ if (Package.substr(found + 1) == "native")
+ {
+ std::string const Pkg = Package.substr(0, found).to_string() + ':' + Ver.Cache()->NativeArch();
+ if (NewDepends(Ver, Pkg, "any", Version, Op | pkgCache::Dep::ArchSpecific, Type) == false)
+ return false;
+ }
+ else if (NewDepends(Ver, Package, "any", Version, Op | pkgCache::Dep::ArchSpecific, Type) == false)
+ return false;
+ }
+
+ if (Start == Stop)
+ break;
+ }
+ return true;
+}
+ /*}}}*/
+// ListParser::ParseProvides - Parse the provides list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debListParser::ParseProvides(pkgCache::VerIterator &Ver)
+{
+ /* it is unlikely, but while parsing dependencies, we might have already
+ picked up multi-arch implicit provides which we do not want to duplicate here */
+ bool hasProvidesAlready = false;
+ std::string const spzName = Ver.ParentPkg().FullName(false);
+ {
+ for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (Prv.IsMultiArchImplicit() == false || (Prv->Flags & pkgCache::Flag::ArchSpecific) == 0)
+ continue;
+ if (spzName != Prv.OwnerPkg().FullName(false))
+ continue;
+ hasProvidesAlready = true;
+ break;
+ }
+ }
+
+ string const Arch = Ver.Arch();
+ const char *Start;
+ const char *Stop;
+ if (Section.Find(pkgTagSection::Key::Provides,Start,Stop) == true)
+ {
+ StringView Package;
+ StringView Version;
+ unsigned int Op;
+
+ do
+ {
+ Start = ParseDepends(Start,Stop,Package,Version,Op, false, false, false);
+ const size_t archfound = Package.rfind(':');
+ if (Start == 0)
+ return _error->Error("Problem parsing Provides line");
+ if (unlikely(Op != pkgCache::Dep::NoOp && Op != pkgCache::Dep::Equals)) {
+ _error->Warning("Ignoring Provides line with non-equal DepCompareOp for package %s", Package.to_string().c_str());
+ } else if (archfound != string::npos) {
+ StringView spzArch = Package.substr(archfound + 1);
+ if (spzArch != "any")
+ {
+ if (NewProvides(Ver, Package.substr(0, archfound), spzArch, Version, pkgCache::Flag::MultiArchImplicit | pkgCache::Flag::ArchSpecific) == false)
+ return false;
+ }
+ if (NewProvides(Ver, Package, "any", Version, pkgCache::Flag::ArchSpecific) == false)
+ return false;
+ } else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign) {
+ if (APT::Configuration::checkArchitecture(Arch))
+ {
+ if (NewProvidesAllArch(Ver, Package, Version, 0) == false)
+ return false;
+ }
+ else if (NewProvides(Ver, Package, Arch, Version, 0) == false)
+ return false;
+ } else {
+ if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
+ {
+ if (NewProvides(Ver, Package.to_string().append(":any"), "any", Version, pkgCache::Flag::MultiArchImplicit) == false)
+ return false;
+ }
+ if (NewProvides(Ver, Package, Arch, Version, 0) == false)
+ return false;
+ }
+ if (archfound == std::string::npos)
+ {
+ string spzName = Package.to_string();
+ spzName.push_back(':');
+ spzName.append(Ver.ParentPkg().Arch());
+ pkgCache::PkgIterator const spzPkg = Ver.Cache()->FindPkg(spzName, "any");
+ if (spzPkg.end() == false)
+ {
+ if (NewProvides(Ver, spzName, "any", Version, pkgCache::Flag::MultiArchImplicit | pkgCache::Flag::ArchSpecific) == false)
+ return false;
+ }
+ }
+ } while (Start != Stop);
+ }
+
+ if (APT::Configuration::checkArchitecture(Arch))
+ {
+ if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
+ {
+ string const Package = string(Ver.ParentPkg().Name()).append(":").append("any");
+ if (NewProvides(Ver, Package, "any", Ver.VerStr(), pkgCache::Flag::MultiArchImplicit) == false)
+ return false;
+ }
+ else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
+ {
+ if (NewProvidesAllArch(Ver, Ver.ParentPkg().Name(), Ver.VerStr(), pkgCache::Flag::MultiArchImplicit) == false)
+ return false;
+ }
+ }
+
+ if (hasProvidesAlready == false)
+ {
+ pkgCache::PkgIterator const spzPkg = Ver.Cache()->FindPkg(spzName, "any");
+ if (spzPkg.end() == false)
+ {
+ if (NewProvides(Ver, spzName, "any", Ver.VerStr(), pkgCache::Flag::MultiArchImplicit | pkgCache::Flag::ArchSpecific) == false)
+ return false;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// ListParser::GrabWord - Matches a word and returns /*{{{*/
+// ---------------------------------------------------------------------
+/* Looks for a word in a list of words - for ParseStatus */
+bool debListParser::GrabWord(StringView Word, WordList const *List, unsigned char &Out)
+{
+ for (unsigned int C = 0; List[C].Str.empty() == false; C++)
+ {
+ if (Word.length() == List[C].Str.length() &&
+ strncasecmp(Word.data(), List[C].Str.data(), Word.length()) == 0)
+ {
+ Out = List[C].Val;
+ return true;
+ }
+ }
+ return false;
+}
+ /*}}}*/
+// ListParser::Step - Move to the next section in the file /*{{{*/
+// ---------------------------------------------------------------------
+/* This has to be careful to only process the correct architecture */
+bool debListParser::Step()
+{
+ iOffset = Tags.Offset();
+ return Tags.Step(Section);
+}
+ /*}}}*/
+// ListParser::GetPrio - Convert the priority from a string /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned char debListParser::GetPrio(string Str)
+{
+ unsigned char Out;
+ if (GrabWord(Str,PrioList,Out) == false)
+ Out = pkgCache::State::Extra;
+
+ return Out;
+}
+ /*}}}*/
+bool debListParser::SameVersion(unsigned short const Hash, /*{{{*/
+ pkgCache::VerIterator const &Ver)
+{
+ if (pkgCacheListParser::SameVersion(Hash, Ver) == false)
+ return false;
+ // status file has no (Download)Size, but all others are fair game
+ // status file is parsed last, so the first version we encounter is
+ // probably also the version we have downloaded
+ unsigned long long const Size = Section.FindULL(pkgTagSection::Key::Size);
+ if (Size != 0 && Ver->Size != 0 && Size != Ver->Size)
+ return false;
+ // available everywhere, but easier to check here than to include in VersionHash
+ unsigned char MultiArch = ParseMultiArch(false);
+ if (MultiArch != Ver->MultiArch)
+ return false;
+ // for all practical proposes (we can check): same version
+ return true;
+}
+ /*}}}*/
+
+debDebFileParser::debDebFileParser(FileFd *File, std::string const &DebFile)
+ : debListParser(File), DebFile(DebFile)
+{
+}
+
+bool debDebFileParser::UsePackage(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver)
+{
+ bool res = debListParser::UsePackage(Pkg, Ver);
+ // we use the full file path as a provides so that the file is found
+ // by its name
+ if(NewProvides(Ver, DebFile, Pkg.Cache()->NativeArch(), Ver.VerStr(), 0) == false)
+ return false;
+ return res;
+}
+
+debListParser::~debListParser() {}
diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h
new file mode 100644
index 0000000..f02252d
--- /dev/null
+++ b/apt-pkg/deb/deblistparser.h
@@ -0,0 +1,159 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Package List Parser - This implements the abstract parser
+ interface for Debian package files
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBLISTPARSER_H
+#define PKGLIB_DEBLISTPARSER_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/tagfile.h>
+
+#include <string>
+#include <vector>
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+#include <apt-pkg/string_view.h>
+#endif
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#endif
+
+class FileFd;
+
+class APT_HIDDEN debListParser : public pkgCacheListParser
+{
+ public:
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ // Parser Helper
+ struct WordList
+ {
+ APT::StringView Str;
+ unsigned char Val;
+ };
+#endif
+
+ private:
+ std::vector<std::string> forceEssential;
+ std::vector<std::string> forceImportant;
+ std::string MD5Buffer;
+ std::string myArch;
+
+ protected:
+ pkgTagFile Tags;
+ pkgTagSection Section;
+ map_filesize_t iOffset;
+
+ virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver);
+ bool ParseDepends(pkgCache::VerIterator &Ver, pkgTagSection::Key Key,
+ unsigned int Type);
+ bool ParseProvides(pkgCache::VerIterator &Ver);
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN static bool GrabWord(APT::StringView Word,const WordList *List,unsigned char &Out);
+#endif
+ APT_HIDDEN unsigned char ParseMultiArch(bool const showErrors);
+
+ public:
+
+ APT_PUBLIC static unsigned char GetPrio(std::string Str);
+
+ // These all operate against the current section
+ virtual std::string Package() APT_OVERRIDE;
+ virtual bool ArchitectureAll() APT_OVERRIDE;
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ virtual APT::StringView Architecture() APT_OVERRIDE;
+ virtual APT::StringView Version() APT_OVERRIDE;
+#endif
+ virtual bool NewVersion(pkgCache::VerIterator &Ver) APT_OVERRIDE;
+ virtual std::vector<std::string> AvailableDescriptionLanguages() APT_OVERRIDE;
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ virtual APT::StringView Description_md5() APT_OVERRIDE;
+#endif
+ virtual unsigned short VersionHash() APT_OVERRIDE;
+ virtual bool SameVersion(unsigned short const Hash, pkgCache::VerIterator const &Ver) APT_OVERRIDE;
+ virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver) APT_OVERRIDE;
+ virtual map_filesize_t Offset() APT_OVERRIDE {return iOffset;};
+ virtual map_filesize_t Size() APT_OVERRIDE {return Section.size();};
+
+ virtual bool Step() APT_OVERRIDE;
+
+ APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op);
+ APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op,
+ bool const &ParseArchFlags);
+ APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op,
+ bool const &ParseArchFlags, bool const &StripMultiArch);
+ APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op,
+ bool const &ParseArchFlags, bool const &StripMultiArch,
+ bool const &ParseRestrictionsList);
+ APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
+ std::string &Package,std::string &Ver,unsigned int &Op,
+ bool const &ParseArchFlags, bool const &StripMultiArch,
+ bool const &ParseRestrictionsList,
+ std::string const &Arch);
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN static const char *ParseDepends(const char *Start,const char *Stop,
+ APT::StringView &Package,
+ APT::StringView &Ver,unsigned int &Op,
+ bool const ParseArchFlags = false, bool StripMultiArch = true,
+ bool const ParseRestrictionsList = false);
+ APT_HIDDEN static const char *ParseDepends(const char *Start,const char *Stop,
+ APT::StringView &Package,
+ APT::StringView &Ver,unsigned int &Op,
+ bool const ParseArchFlags, bool StripMultiArch,
+ bool const ParseRestrictionsList,
+ std::string const &Arch);
+#endif
+
+ APT_PUBLIC static const char *ConvertRelation(const char *I,unsigned int &Op);
+
+ debListParser(FileFd *File);
+ virtual ~debListParser();
+};
+
+class APT_HIDDEN debDebFileParser : public debListParser
+{
+ private:
+ std::string DebFile;
+
+ public:
+ debDebFileParser(FileFd *File, std::string const &DebFile);
+ virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver) APT_OVERRIDE;
+};
+
+class APT_HIDDEN debTranslationsParser : public debListParser
+{
+ public:
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ // a translation can never be a real package
+ virtual APT::StringView Architecture() APT_OVERRIDE { return ""; }
+ virtual APT::StringView Version() APT_OVERRIDE { return ""; }
+#endif
+
+ debTranslationsParser(FileFd *File)
+ : debListParser(File) {};
+};
+
+class APT_HIDDEN debStatusListParser : public debListParser
+{
+ public:
+ virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver);
+ debStatusListParser(FileFd *File)
+ : debListParser(File) {};
+};
+#endif
diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc
new file mode 100644
index 0000000..f88076a
--- /dev/null
+++ b/apt-pkg/deb/debmetaindex.cc
@@ -0,0 +1,1316 @@
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debindexfile.h>
+#include <apt-pkg/debmetaindex.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <algorithm>
+#include <map>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <string.h>
+#include <sys/stat.h>
+
+#include <apti18n.h>
+
+static std::string transformFingergrpints(std::string finger) /*{{{*/
+{
+ std::transform(finger.begin(), finger.end(), finger.begin(), ::toupper);
+ if (finger.length() == 40)
+ {
+ if (finger.find_first_not_of("0123456789ABCDEF") == std::string::npos)
+ return finger;
+ }
+ else if (finger.length() == 41)
+ {
+ auto bang = finger.find_first_not_of("0123456789ABCDEF");
+ if (bang == 40 && finger[bang] == '!')
+ return finger;
+ }
+ return "";
+}
+ /*}}}*/
+static std::string transformFingergrpintsWithFilenames(std::string const &finger) /*{{{*/
+{
+ // no check for existence as we could be chrooting later or such things
+ if (finger.empty() == false && finger[0] == '/')
+ return finger;
+ return transformFingergrpints(finger);
+}
+ /*}}}*/
+static std::string NormalizeSignedBy(std::string SignedBy, bool const SupportFilenames) /*{{{*/
+{
+ // we could go all fancy and allow short/long/string matches as gpgv/apt-key does,
+ // but fingerprints are harder to fake than the others and this option is set once,
+ // not interactively all the time so easy to type is not really a concern.
+ std::transform(SignedBy.begin(), SignedBy.end(), SignedBy.begin(), [](char const c) {
+ return (isspace(c) == 0) ? c : ',';
+ });
+ auto fingers = VectorizeString(SignedBy, ',');
+ auto const isAnEmptyString = [](std::string const &s) { return s.empty(); };
+ fingers.erase(std::remove_if(fingers.begin(), fingers.end(), isAnEmptyString), fingers.end());
+ if (unlikely(fingers.empty()))
+ return "";
+ if (SupportFilenames)
+ std::transform(fingers.begin(), fingers.end(), fingers.begin(), transformFingergrpintsWithFilenames);
+ else
+ std::transform(fingers.begin(), fingers.end(), fingers.begin(), transformFingergrpints);
+ if (std::any_of(fingers.begin(), fingers.end(), isAnEmptyString))
+ return "";
+ std::stringstream os;
+ std::copy(fingers.begin(), fingers.end() - 1, std::ostream_iterator<std::string>(os, ","));
+ os << *fingers.rbegin();
+ return os.str();
+}
+ /*}}}*/
+
+class APT_HIDDEN debReleaseIndexPrivate /*{{{*/
+{
+ public:
+ struct APT_HIDDEN debSectionEntry
+ {
+ std::string const sourcesEntry;
+ std::string const Name;
+ std::vector<std::string> const Targets;
+ std::vector<std::string> const Architectures;
+ std::vector<std::string> const Languages;
+ bool const UsePDiffs;
+ std::string const UseByHash;
+ };
+
+ std::vector<debSectionEntry> DebEntries;
+ std::vector<debSectionEntry> DebSrcEntries;
+
+ metaIndex::TriState CheckValidUntil;
+ time_t ValidUntilMin;
+ time_t ValidUntilMax;
+
+ metaIndex::TriState CheckDate;
+ time_t DateMaxFuture;
+ time_t NotBefore;
+
+ std::vector<std::string> Architectures;
+ std::vector<std::string> NoSupportForAll;
+ std::vector<std::string> SupportedComponents;
+ std::map<std::string, std::string> const ReleaseOptions;
+
+ debReleaseIndexPrivate(std::map<std::string, std::string> const &Options) : CheckValidUntil(metaIndex::TRI_UNSET), ValidUntilMin(0), ValidUntilMax(0), CheckDate(metaIndex::TRI_UNSET), DateMaxFuture(0), NotBefore(0), ReleaseOptions(Options) {}
+};
+ /*}}}*/
+// ReleaseIndex::MetaIndex* - display helpers /*{{{*/
+std::string debReleaseIndex::MetaIndexInfo(const char *Type) const
+{
+ std::string Info = ::URI::ArchiveOnly(URI) + ' ';
+ if (Dist[Dist.size() - 1] == '/')
+ {
+ if (Dist != "/")
+ Info += Dist;
+ }
+ else
+ Info += Dist;
+ Info += " ";
+ Info += Type;
+ return Info;
+}
+std::string debReleaseIndex::Describe() const
+{
+ return MetaIndexInfo("Release");
+}
+
+std::string debReleaseIndex::MetaIndexFile(const char *Type) const
+{
+ return _config->FindDir("Dir::State::lists") +
+ URItoFileName(MetaIndexURI(Type));
+}
+static std::string constructMetaIndexURI(std::string URI, std::string const &Dist, char const * const Type)
+{
+ if (Dist == "/")
+ ;
+ else if (Dist[Dist.size()-1] == '/')
+ URI += Dist;
+ else
+ URI += "dists/" + Dist + "/";
+ return URI + Type;
+}
+std::string debReleaseIndex::MetaIndexURI(const char *Type) const
+{
+ return constructMetaIndexURI(URI, Dist, Type);
+}
+ /*}}}*/
+// ReleaseIndex Con- and Destructors /*{{{*/
+debReleaseIndex::debReleaseIndex(std::string const &URI, std::string const &Dist, std::map<std::string, std::string> const &Options) :
+ metaIndex(URI, Dist, "deb"), d(new debReleaseIndexPrivate(Options))
+{}
+debReleaseIndex::debReleaseIndex(std::string const &URI, std::string const &Dist, bool const pTrusted, std::map<std::string, std::string> const &Options) :
+ metaIndex(URI, Dist, "deb"), d(new debReleaseIndexPrivate(Options))
+{
+ Trusted = pTrusted ? TRI_YES : TRI_NO;
+}
+debReleaseIndex::~debReleaseIndex() {
+ if (d != NULL)
+ delete d;
+}
+ /*}}}*/
+// ReleaseIndex::GetIndexTargets /*{{{*/
+static void GetIndexTargetsFor(char const * const Type, std::string const &URI, std::string const &Dist,
+ std::vector<debReleaseIndexPrivate::debSectionEntry> const &entries,
+ std::vector<IndexTarget> &IndexTargets, std::map<std::string, std::string> const &ReleaseOptions)
+{
+ bool const flatArchive = (Dist[Dist.length() - 1] == '/');
+ std::string const baseURI = constructMetaIndexURI(URI, Dist, "");
+
+ std::string DefCompressionTypes;
+ {
+ std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+ if (types.empty() == false)
+ {
+ std::ostringstream os;
+ std::copy(types.begin(), types.end()-1, std::ostream_iterator<std::string>(os, " "));
+ os << *types.rbegin();
+ DefCompressionTypes = os.str();
+ }
+ }
+ std::string DefKeepCompressedAs;
+ {
+ std::vector<APT::Configuration::Compressor> comps = APT::Configuration::getCompressors();
+ if (comps.empty() == false)
+ {
+ std::sort(comps.begin(), comps.end(),
+ [](APT::Configuration::Compressor const &a, APT::Configuration::Compressor const &b) { return a.Cost < b.Cost; });
+ std::ostringstream os;
+ for (auto const &c : comps)
+ if (c.Cost != 0)
+ os << c.Extension.substr(1) << ' ';
+ DefKeepCompressedAs = os.str();
+ }
+ DefKeepCompressedAs += "uncompressed";
+ }
+
+ std::vector<std::string> const NativeArchs = { _config->Find("APT::Architecture"), "implicit:all" };
+ bool const GzipIndex = _config->FindB("Acquire::GzipIndexes", false);
+ for (std::vector<debReleaseIndexPrivate::debSectionEntry>::const_iterator E = entries.begin(); E != entries.end(); ++E)
+ {
+ for (std::vector<std::string>::const_iterator T = E->Targets.begin(); T != E->Targets.end(); ++T)
+ {
+#define APT_T_CONFIG_STR(X, Y) _config->Find(std::string("Acquire::IndexTargets::") + Type + "::" + *T + "::" + (X), (Y))
+#define APT_T_CONFIG_BOOL(X, Y) _config->FindB(std::string("Acquire::IndexTargets::") + Type + "::" + *T + "::" + (X), (Y))
+ std::string const tplMetaKey = APT_T_CONFIG_STR(flatArchive ? "flatMetaKey" : "MetaKey", "");
+ std::string const tplShortDesc = APT_T_CONFIG_STR("ShortDescription", "");
+ std::string const tplLongDesc = "$(SITE) " + APT_T_CONFIG_STR(flatArchive ? "flatDescription" : "Description", "");
+ std::string const tplIdentifier = APT_T_CONFIG_STR("Identifier", *T);
+ bool const IsOptional = APT_T_CONFIG_BOOL("Optional", true);
+ bool const KeepCompressed = APT_T_CONFIG_BOOL("KeepCompressed", GzipIndex);
+ bool const DefaultEnabled = APT_T_CONFIG_BOOL("DefaultEnabled", true);
+ bool const UsePDiffs = APT_T_CONFIG_BOOL("PDiffs", E->UsePDiffs);
+ std::string const UseByHash = APT_T_CONFIG_STR("By-Hash", E->UseByHash);
+ std::string const CompressionTypes = APT_T_CONFIG_STR("CompressionTypes", DefCompressionTypes);
+ std::string KeepCompressedAs = APT_T_CONFIG_STR("KeepCompressedAs", "");
+ std::string const FallbackOf = APT_T_CONFIG_STR("Fallback-Of", "");
+#undef APT_T_CONFIG_BOOL
+#undef APT_T_CONFIG_STR
+ if (tplMetaKey.empty())
+ continue;
+
+ if (KeepCompressedAs.empty())
+ KeepCompressedAs = DefKeepCompressedAs;
+ else
+ {
+ std::vector<std::string> const defKeep = VectorizeString(DefKeepCompressedAs, ' ');
+ std::vector<std::string> const valKeep = VectorizeString(KeepCompressedAs, ' ');
+ std::vector<std::string> keep;
+ for (auto const &val : valKeep)
+ {
+ if (val.empty())
+ continue;
+ if (std::find(defKeep.begin(), defKeep.end(), val) == defKeep.end())
+ continue;
+ keep.push_back(val);
+ }
+ if (std::find(keep.begin(), keep.end(), "uncompressed") == keep.end())
+ keep.push_back("uncompressed");
+ std::ostringstream os;
+ std::copy(keep.begin(), keep.end()-1, std::ostream_iterator<std::string>(os, " "));
+ os << *keep.rbegin();
+ KeepCompressedAs = os.str();
+ }
+
+ for (std::vector<std::string>::const_iterator L = E->Languages.begin(); L != E->Languages.end(); ++L)
+ {
+ if (*L == "none" && tplMetaKey.find("$(LANGUAGE)") != std::string::npos)
+ continue;
+
+ for (std::vector<std::string>::const_iterator A = E->Architectures.begin(); A != E->Architectures.end(); ++A)
+ {
+ for (auto const &NativeArch: NativeArchs)
+ {
+ constexpr static auto BreakPoint = "$(NATIVE_ARCHITECTURE)";
+ // available in templates
+ std::map<std::string, std::string> Options;
+ Options.insert(ReleaseOptions.begin(), ReleaseOptions.end());
+ if (tplMetaKey.find("$(COMPONENT)") != std::string::npos)
+ Options.emplace("COMPONENT", E->Name);
+ if (tplMetaKey.find("$(LANGUAGE)") != std::string::npos)
+ Options.emplace("LANGUAGE", *L);
+ if (tplMetaKey.find("$(ARCHITECTURE)") != std::string::npos)
+ Options.emplace("ARCHITECTURE", (*A == "implicit:all") ? "all" : *A);
+ else if (tplMetaKey.find("$(NATIVE_ARCHITECTURE)") != std::string::npos)
+ Options.emplace("ARCHITECTURE", (NativeArch == "implicit:all") ? "all" : NativeArch);
+ if (tplMetaKey.find("$(NATIVE_ARCHITECTURE)") != std::string::npos)
+ Options.emplace("NATIVE_ARCHITECTURE", (NativeArch == "implicit:all") ? "all" : NativeArch);
+
+ std::string MetaKey = tplMetaKey;
+ std::string ShortDesc = tplShortDesc;
+ std::string LongDesc = tplLongDesc;
+ std::string Identifier = tplIdentifier;
+ for (std::map<std::string, std::string>::const_iterator O = Options.begin(); O != Options.end(); ++O)
+ {
+ std::string const varname = "$(" + O->first + ")";
+ MetaKey = SubstVar(MetaKey, varname, O->second);
+ ShortDesc = SubstVar(ShortDesc, varname, O->second);
+ LongDesc = SubstVar(LongDesc, varname, O->second);
+ Identifier = SubstVar(Identifier, varname, O->second);
+ }
+
+ {
+ auto const dup = std::find_if(IndexTargets.begin(), IndexTargets.end(), [&](IndexTarget const &IT) {
+ return MetaKey == IT.MetaKey && baseURI == IT.Option(IndexTarget::BASE_URI) &&
+ E->sourcesEntry == IT.Option(IndexTarget::SOURCESENTRY) && *T == IT.Option(IndexTarget::CREATED_BY);
+ });
+ if (dup != IndexTargets.end())
+ {
+ if (tplMetaKey.find(BreakPoint) == std::string::npos)
+ break;
+ continue;
+ }
+ }
+
+ {
+ auto const dup = std::find_if(IndexTargets.begin(), IndexTargets.end(), [&](IndexTarget const &IT) {
+ return MetaKey == IT.MetaKey && baseURI == IT.Option(IndexTarget::BASE_URI) &&
+ E->sourcesEntry == IT.Option(IndexTarget::SOURCESENTRY) && *T != IT.Option(IndexTarget::CREATED_BY);
+ });
+ if (dup != IndexTargets.end())
+ {
+ std::string const dupT = dup->Option(IndexTarget::CREATED_BY);
+ std::string const dupEntry = dup->Option(IndexTarget::SOURCESENTRY);
+ //TRANSLATOR: an identifier like Packages; Releasefile key indicating
+ // a file like main/binary-amd64/Packages; another identifier like Contents;
+ // filename and linenumber of the sources.list entry currently parsed
+ _error->Warning(_("Target %s wants to acquire the same file (%s) as %s from source %s"),
+ T->c_str(), MetaKey.c_str(), dupT.c_str(), dupEntry.c_str());
+ if (tplMetaKey.find(BreakPoint) == std::string::npos)
+ break;
+ continue;
+ }
+ }
+
+ {
+ auto const dup = std::find_if(IndexTargets.begin(), IndexTargets.end(), [&](IndexTarget const &T) {
+ return MetaKey == T.MetaKey && baseURI == T.Option(IndexTarget::BASE_URI) &&
+ E->sourcesEntry != T.Option(IndexTarget::SOURCESENTRY);
+ });
+ if (dup != IndexTargets.end())
+ {
+ std::string const dupEntry = dup->Option(IndexTarget::SOURCESENTRY);
+ if (T->find("legacy") == std::string::npos)
+ {
+ //TRANSLATOR: an identifier like Packages; Releasefile key indicating
+ // a file like main/binary-amd64/Packages; filename and linenumber of
+ // two sources.list entries
+ _error->Warning(_("Target %s (%s) is configured multiple times in %s and %s"),
+ T->c_str(), MetaKey.c_str(), dupEntry.c_str(), E->sourcesEntry.c_str());
+ }
+ if (tplMetaKey.find(BreakPoint) == std::string::npos)
+ break;
+ continue;
+ }
+ }
+
+ // not available in templates, but in the indextarget
+ Options.insert(std::make_pair("IDENTIFIER", Identifier));
+ Options.insert(std::make_pair("TARGET_OF", Type));
+ Options.insert(std::make_pair("CREATED_BY", *T));
+ Options.insert(std::make_pair("FALLBACK_OF", FallbackOf));
+ Options.insert(std::make_pair("PDIFFS", UsePDiffs ? "yes" : "no"));
+ Options.insert(std::make_pair("BY_HASH", UseByHash));
+ Options.insert(std::make_pair("DEFAULTENABLED", DefaultEnabled ? "yes" : "no"));
+ Options.insert(std::make_pair("COMPRESSIONTYPES", CompressionTypes));
+ Options.insert(std::make_pair("KEEPCOMPRESSEDAS", KeepCompressedAs));
+ Options.insert(std::make_pair("SOURCESENTRY", E->sourcesEntry));
+
+ bool IsOpt = IsOptional;
+ {
+ auto const arch = Options.find("ARCHITECTURE");
+ if (arch != Options.end() && arch->second == "all")
+ {
+ // one of them must be implicit:all then
+ if (*A != "all" && NativeArch != "all")
+ IsOpt = true;
+ else // user used arch=all explicitly
+ Options.emplace("Force-Support-For-All", "yes");
+ }
+ }
+
+ IndexTarget Target(
+ MetaKey,
+ ShortDesc,
+ LongDesc,
+ baseURI + MetaKey,
+ IsOpt,
+ KeepCompressed,
+ Options
+ );
+ IndexTargets.push_back(Target);
+
+ if (tplMetaKey.find(BreakPoint) == std::string::npos)
+ break;
+ }
+
+ if (tplMetaKey.find("$(ARCHITECTURE)") == std::string::npos)
+ break;
+
+ }
+
+ if (tplMetaKey.find("$(LANGUAGE)") == std::string::npos)
+ break;
+
+ }
+
+ }
+ }
+}
+std::vector<IndexTarget> debReleaseIndex::GetIndexTargets() const
+{
+ std::vector<IndexTarget> IndexTargets;
+ GetIndexTargetsFor("deb-src", URI, Dist, d->DebSrcEntries, IndexTargets, d->ReleaseOptions);
+ GetIndexTargetsFor("deb", URI, Dist, d->DebEntries, IndexTargets, d->ReleaseOptions);
+ return IndexTargets;
+}
+ /*}}}*/
+void debReleaseIndex::AddComponent(std::string const &sourcesEntry, /*{{{*/
+ bool const isSrc, std::string const &Name,
+ std::vector<std::string> const &Targets,
+ std::vector<std::string> const &Architectures,
+ std::vector<std::string> Languages,
+ bool const usePDiffs, std::string const &useByHash)
+{
+ if (Languages.empty() == true)
+ Languages.push_back("none");
+ debReleaseIndexPrivate::debSectionEntry const entry = {
+ sourcesEntry, Name, Targets, Architectures, Languages, usePDiffs, useByHash
+ };
+ if (isSrc)
+ d->DebSrcEntries.push_back(entry);
+ else
+ d->DebEntries.push_back(entry);
+}
+ /*}}}*/
+
+bool debReleaseIndex::Load(std::string const &Filename, std::string * const ErrorText)/*{{{*/
+{
+ LoadedSuccessfully = TRI_NO;
+ FileFd Fd;
+ if (OpenMaybeClearSignedFile(Filename, Fd) == false)
+ return false;
+
+ pkgTagFile TagFile(&Fd, Fd.Size());
+ if (Fd.IsOpen() == false || Fd.Failed())
+ {
+ if (ErrorText != NULL)
+ strprintf(*ErrorText, _("Unable to parse Release file %s"),Filename.c_str());
+ return false;
+ }
+
+ pkgTagSection Section;
+ const char *Start, *End;
+ if (TagFile.Step(Section) == false)
+ {
+ if (ErrorText != NULL)
+ strprintf(*ErrorText, _("No sections in Release file %s"), Filename.c_str());
+ return false;
+ }
+ // FIXME: find better tag name
+ SupportsAcquireByHash = Section.FindB("Acquire-By-Hash", false);
+
+ SetOrigin(Section.FindS("Origin"));
+ SetLabel(Section.FindS("Label"));
+ SetVersion(Section.FindS("Version"));
+ Suite = Section.FindS("Suite");
+ Codename = Section.FindS("Codename");
+ SetReleaseNotes(Section.FindS("Release-Notes"));
+ {
+ std::string const archs = Section.FindS("Architectures");
+ if (archs.empty() == false)
+ d->Architectures = VectorizeString(archs, ' ');
+ }
+ {
+ std::string const targets = Section.FindS("No-Support-for-Architecture-all");
+ if (targets.empty() == false)
+ d->NoSupportForAll = VectorizeString(targets, ' ');
+ }
+ for (auto const &comp: VectorizeString(Section.FindS("Components"), ' '))
+ {
+ if (comp.empty())
+ continue;
+ auto const pos = comp.find_last_of('/');
+ if (pos != std::string::npos) // e.g. security.debian.org uses this style
+ d->SupportedComponents.push_back(comp.substr(pos + 1));
+ d->SupportedComponents.push_back(std::move(comp));
+ }
+ {
+ decltype(pkgCache::ReleaseFile::Flags) flags = 0;
+ Section.FindFlag("NotAutomatic", flags, pkgCache::Flag::NotAutomatic);
+ signed short defaultpin = 500;
+ if ((flags & pkgCache::Flag::NotAutomatic) == pkgCache::Flag::NotAutomatic)
+ {
+ Section.FindFlag("ButAutomaticUpgrades", flags, pkgCache::Flag::ButAutomaticUpgrades);
+ if ((flags & pkgCache::Flag::ButAutomaticUpgrades) == pkgCache::Flag::ButAutomaticUpgrades)
+ defaultpin = 100;
+ else
+ defaultpin = 1;
+ }
+ SetDefaultPin(defaultpin);
+ }
+
+ bool FoundHashSum = false;
+ bool FoundStrongHashSum = false;
+ auto const SupportedHashes = HashString::SupportedHashes();
+ for (int i=0; SupportedHashes[i] != NULL; i++)
+ {
+ if (!Section.Find(SupportedHashes[i], Start, End))
+ continue;
+
+ std::string Name;
+ std::string Hash;
+ unsigned long long Size;
+ while (Start < End)
+ {
+ if (!parseSumData(Start, End, Name, Hash, Size))
+ return false;
+
+ HashString const hs(SupportedHashes[i], Hash);
+ if (Entries.find(Name) == Entries.end())
+ {
+ metaIndex::checkSum *Sum = new metaIndex::checkSum;
+ Sum->MetaKeyFilename = Name;
+ Sum->Size = Size;
+ Sum->Hashes.FileSize(Size);
+ APT_IGNORE_DEPRECATED_PUSH
+ Sum->Hash = hs;
+ APT_IGNORE_DEPRECATED_POP
+ Entries[Name] = Sum;
+ }
+ Entries[Name]->Hashes.push_back(hs);
+ FoundHashSum = true;
+ if (FoundStrongHashSum == false && hs.usable() == true)
+ FoundStrongHashSum = true;
+ }
+ }
+
+ bool AuthPossible = false;
+ if(FoundHashSum == false)
+ _error->Warning(_("No Hash entry in Release file %s"), Filename.c_str());
+ else if(FoundStrongHashSum == false)
+ _error->Warning(_("No Hash entry in Release file %s which is considered strong enough for security purposes"), Filename.c_str());
+ else
+ AuthPossible = true;
+
+ std::string const StrDate = Section.FindS("Date");
+ if (RFC1123StrToTime(StrDate.c_str(), Date) == false)
+ {
+ _error->Warning( _("Invalid '%s' entry in Release file %s"), "Date", Filename.c_str());
+ Date = 0;
+ }
+
+ bool CheckDate = _config->FindB("Acquire::Check-Date", true);
+ if (d->CheckDate == metaIndex::TRI_NO)
+ CheckDate = false;
+ else if (d->CheckDate == metaIndex::TRI_YES)
+ CheckDate = true;
+
+ if (CheckDate)
+ {
+ auto const Label = GetLabel();
+ // get the user settings for this archive
+ time_t MaxFuture = d->DateMaxFuture;
+ if (MaxFuture == 0)
+ {
+ MaxFuture = _config->FindI("Acquire::Max-FutureTime", 10);
+ if (Label.empty() == false)
+ MaxFuture = _config->FindI(("Acquire::Max-FutureTime::" + Label).c_str(), MaxFuture);
+ }
+
+ d->NotBefore = Date - MaxFuture;
+
+ bool CheckValidUntil = _config->FindB("Acquire::Check-Valid-Until", true);
+ if (d->CheckValidUntil == metaIndex::TRI_NO)
+ CheckValidUntil = false;
+ else if (d->CheckValidUntil == metaIndex::TRI_YES)
+ CheckValidUntil = true;
+
+ if (CheckValidUntil == true)
+ {
+ std::string const StrValidUntil = Section.FindS("Valid-Until");
+
+ // if we have a Valid-Until header in the Release file, use it as default
+ if (StrValidUntil.empty() == false)
+ {
+ if (RFC1123StrToTime(StrValidUntil.c_str(), ValidUntil) == false)
+ {
+ if (ErrorText != NULL)
+ strprintf(*ErrorText, _("Invalid '%s' entry in Release file %s"), "Valid-Until", Filename.c_str());
+ return false;
+ }
+ }
+ auto const Label = GetLabel();
+ // get the user settings for this archive and use what expires earlier
+ time_t MaxAge = d->ValidUntilMax;
+ if (MaxAge == 0)
+ {
+ MaxAge = _config->FindI("Acquire::Max-ValidTime", 0);
+ if (Label.empty() == false)
+ MaxAge = _config->FindI(("Acquire::Max-ValidTime::" + Label).c_str(), MaxAge);
+ }
+ time_t MinAge = d->ValidUntilMin;
+ if (MinAge == 0)
+ {
+ MinAge = _config->FindI("Acquire::Min-ValidTime", 0);
+ if (Label.empty() == false)
+ MinAge = _config->FindI(("Acquire::Min-ValidTime::" + Label).c_str(), MinAge);
+ }
+
+ if (MinAge != 0 || ValidUntil != 0 || MaxAge != 0)
+ {
+ if (MinAge != 0 && ValidUntil != 0)
+ {
+ time_t const min_date = Date + MinAge;
+ if (ValidUntil < min_date)
+ ValidUntil = min_date;
+ }
+ if (MaxAge != 0 && Date != 0)
+ {
+ time_t const max_date = Date + MaxAge;
+ if (ValidUntil == 0 || ValidUntil > max_date)
+ ValidUntil = max_date;
+ }
+ }
+ }
+ }
+
+ /* as the Release file is parsed only after it was verified, the Signed-By field
+ does not effect the current, but the "next" Release file */
+ auto Sign = Section.FindS("Signed-By");
+ if (Sign.empty() == false)
+ {
+ SignedBy = NormalizeSignedBy(Sign, false);
+ if (SignedBy.empty() && ErrorText != NULL)
+ strprintf(*ErrorText, _("Invalid '%s' entry in Release file %s"), "Signed-By", Filename.c_str());
+ }
+
+ if (AuthPossible)
+ LoadedSuccessfully = TRI_YES;
+ return AuthPossible;
+}
+ /*}}}*/
+time_t debReleaseIndex::GetNotBefore() const /*{{{*/
+{
+ return d->NotBefore;
+}
+ /*}}}*/
+metaIndex * debReleaseIndex::UnloadedClone() const /*{{{*/
+{
+ if (Trusted == TRI_NO)
+ return new debReleaseIndex(URI, Dist, false, d->ReleaseOptions);
+ else if (Trusted == TRI_YES)
+ return new debReleaseIndex(URI, Dist, true, d->ReleaseOptions);
+ else
+ return new debReleaseIndex(URI, Dist, d->ReleaseOptions);
+}
+ /*}}}*/
+bool debReleaseIndex::parseSumData(const char *&Start, const char *End, /*{{{*/
+ std::string &Name, std::string &Hash, unsigned long long &Size)
+{
+ Name = "";
+ Hash = "";
+ Size = 0;
+ /* Skip over the first blank */
+ while ((*Start == '\t' || *Start == ' ' || *Start == '\n' || *Start == '\r')
+ && Start < End)
+ Start++;
+ if (Start >= End)
+ return false;
+
+ /* Move EntryEnd to the end of the first entry (the hash) */
+ const char *EntryEnd = Start;
+ while ((*EntryEnd != '\t' && *EntryEnd != ' ')
+ && EntryEnd < End)
+ EntryEnd++;
+ if (EntryEnd == End)
+ return false;
+
+ Hash.append(Start, EntryEnd-Start);
+
+ /* Skip over intermediate blanks */
+ Start = EntryEnd;
+ while (*Start == '\t' || *Start == ' ')
+ Start++;
+ if (Start >= End)
+ return false;
+
+ EntryEnd = Start;
+ /* Find the end of the second entry (the size) */
+ while ((*EntryEnd != '\t' && *EntryEnd != ' ' )
+ && EntryEnd < End)
+ EntryEnd++;
+ if (EntryEnd == End)
+ return false;
+
+ Size = strtoull (Start, NULL, 10);
+
+ /* Skip over intermediate blanks */
+ Start = EntryEnd;
+ while (*Start == '\t' || *Start == ' ')
+ Start++;
+ if (Start >= End)
+ return false;
+
+ EntryEnd = Start;
+ /* Find the end of the third entry (the filename) */
+ while ((*EntryEnd != '\t' && *EntryEnd != ' ' &&
+ *EntryEnd != '\n' && *EntryEnd != '\r')
+ && EntryEnd < End)
+ EntryEnd++;
+
+ Name.append(Start, EntryEnd-Start);
+ Start = EntryEnd; //prepare for the next round
+ return true;
+}
+ /*}}}*/
+
+bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll)/*{{{*/
+{
+#define APT_TARGET(X) IndexTarget("", X, MetaIndexInfo(X), MetaIndexURI(X), false, false, d->ReleaseOptions)
+ pkgAcqMetaClearSig * const TransactionManager = new pkgAcqMetaClearSig(Owner,
+ APT_TARGET("InRelease"), APT_TARGET("Release"), APT_TARGET("Release.gpg"), this);
+#undef APT_TARGET
+ // special case for --print-uris
+ if (GetAll)
+ for (auto const &Target: GetIndexTargets())
+ if (Target.Option(IndexTarget::FALLBACK_OF).empty())
+ new pkgAcqIndex(Owner, TransactionManager, Target);
+
+ return true;
+}
+ /*}}}*/
+// ReleaseIndex::Set* TriState options /*{{{*/
+bool debReleaseIndex::SetTrusted(TriState const pTrusted)
+{
+ if (Trusted == TRI_UNSET)
+ Trusted = pTrusted;
+ else if (Trusted != pTrusted)
+ // TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), "Trusted", URI.c_str(), Dist.c_str());
+ return true;
+}
+bool debReleaseIndex::SetCheckValidUntil(TriState const pCheckValidUntil)
+{
+ if (d->CheckValidUntil == TRI_UNSET)
+ d->CheckValidUntil = pCheckValidUntil;
+ else if (d->CheckValidUntil != pCheckValidUntil)
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), "Check-Valid-Until", URI.c_str(), Dist.c_str());
+ return true;
+}
+bool debReleaseIndex::SetValidUntilMin(time_t const Valid)
+{
+ if (d->ValidUntilMin == 0)
+ d->ValidUntilMin = Valid;
+ else if (d->ValidUntilMin != Valid)
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), "Min-ValidTime", URI.c_str(), Dist.c_str());
+ return true;
+}
+bool debReleaseIndex::SetValidUntilMax(time_t const Valid)
+{
+ if (d->ValidUntilMax == 0)
+ d->ValidUntilMax = Valid;
+ else if (d->ValidUntilMax != Valid)
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), "Max-ValidTime", URI.c_str(), Dist.c_str());
+ return true;
+}
+bool debReleaseIndex::SetCheckDate(TriState const pCheckDate)
+{
+ if (d->CheckDate == TRI_UNSET)
+ d->CheckDate = pCheckDate;
+ else if (d->CheckDate != pCheckDate)
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), "Check-Date", URI.c_str(), Dist.c_str());
+ return true;
+}
+bool debReleaseIndex::SetDateMaxFuture(time_t const DateMaxFuture)
+{
+ if (d->DateMaxFuture == 0)
+ d->DateMaxFuture = DateMaxFuture;
+ else if (d->DateMaxFuture != DateMaxFuture)
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), "Date-Max-Future", URI.c_str(), Dist.c_str());
+ return true;
+}
+bool debReleaseIndex::SetSignedBy(std::string const &pSignedBy)
+{
+ if (SignedBy.empty() == true && pSignedBy.empty() == false)
+ {
+ SignedBy = NormalizeSignedBy(pSignedBy, true);
+ if (SignedBy.empty())
+ _error->Error(_("Invalid value set for option %s regarding source %s %s (%s)"), "Signed-By", URI.c_str(), Dist.c_str(), "not a fingerprint");
+ }
+ else
+ {
+ auto const normalSignedBy = NormalizeSignedBy(pSignedBy, true);
+ if (normalSignedBy != SignedBy)
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s: %s != %s"), "Signed-By", URI.c_str(), Dist.c_str(), SignedBy.c_str(), normalSignedBy.c_str());
+ }
+ return true;
+}
+ /*}}}*/
+// ReleaseIndex::IsTrusted /*{{{*/
+bool debReleaseIndex::IsTrusted() const
+{
+ if (Trusted == TRI_YES)
+ return true;
+ else if (Trusted == TRI_NO)
+ return false;
+
+
+ if(_config->FindB("APT::Authentication::TrustCDROM", false))
+ if(URI.substr(0,strlen("cdrom:")) == "cdrom:")
+ return true;
+
+ if (FileExists(MetaIndexFile("Release.gpg")))
+ return true;
+
+ return FileExists(MetaIndexFile("InRelease"));
+}
+ /*}}}*/
+bool debReleaseIndex::IsArchitectureSupported(std::string const &arch) const/*{{{*/
+{
+ if (d->Architectures.empty())
+ return true;
+ return std::find(d->Architectures.begin(), d->Architectures.end(), arch) != d->Architectures.end();
+}
+ /*}}}*/
+bool debReleaseIndex::IsArchitectureAllSupportedFor(IndexTarget const &target) const/*{{{*/
+{
+ if (target.Options.find("Force-Support-For-All") != target.Options.end())
+ return true;
+ if (IsArchitectureSupported("all") == false)
+ return false;
+ if (d->NoSupportForAll.empty())
+ return true;
+ return std::find(d->NoSupportForAll.begin(), d->NoSupportForAll.end(), target.Option(IndexTarget::CREATED_BY)) == d->NoSupportForAll.end();
+}
+ /*}}}*/
+bool debReleaseIndex::HasSupportForComponent(std::string const &component) const/*{{{*/
+{
+ if (d->SupportedComponents.empty())
+ return true;
+ return std::find(d->SupportedComponents.begin(), d->SupportedComponents.end(), component) != d->SupportedComponents.end();
+}
+ /*}}}*/
+std::vector <pkgIndexFile *> *debReleaseIndex::GetIndexFiles() /*{{{*/
+{
+ if (Indexes != NULL)
+ return Indexes;
+
+ Indexes = new std::vector<pkgIndexFile*>();
+ bool const istrusted = IsTrusted();
+ for (auto const &T: GetIndexTargets())
+ {
+ std::string const TargetName = T.Option(IndexTarget::CREATED_BY);
+ if (TargetName == "Packages")
+ Indexes->push_back(new debPackagesIndex(T, istrusted));
+ else if (TargetName == "Sources")
+ Indexes->push_back(new debSourcesIndex(T, istrusted));
+ else if (TargetName == "Translations")
+ Indexes->push_back(new debTranslationsIndex(T));
+ }
+ return Indexes;
+}
+ /*}}}*/
+std::map<std::string, std::string> debReleaseIndex::GetReleaseOptions()
+{
+ return d->ReleaseOptions;
+}
+
+static bool ReleaseFileName(debReleaseIndex const * const That, std::string &ReleaseFile)/*{{{*/
+{
+ ReleaseFile = That->MetaIndexFile("InRelease");
+ bool releaseExists = false;
+ if (FileExists(ReleaseFile) == true)
+ releaseExists = true;
+ else
+ {
+ ReleaseFile = That->MetaIndexFile("Release");
+ if (FileExists(ReleaseFile))
+ releaseExists = true;
+ }
+ return releaseExists;
+}
+ /*}}}*/
+bool debReleaseIndex::Merge(pkgCacheGenerator &Gen,OpProgress * /*Prog*/) const/*{{{*/
+{
+ std::string ReleaseFile;
+ bool const releaseExists = ReleaseFileName(this, ReleaseFile);
+
+ ::URI Tmp(URI);
+ if (Gen.SelectReleaseFile(ReleaseFile, Tmp.Host) == false)
+ return _error->Error("Problem with SelectReleaseFile %s", ReleaseFile.c_str());
+
+ if (releaseExists == false)
+ return true;
+
+ FileFd Rel;
+ // Beware: The 'Release' file might be clearsigned in case the
+ // signature for an 'InRelease' file couldn't be checked
+ if (OpenMaybeClearSignedFile(ReleaseFile, Rel) == false)
+ return false;
+
+ // Store the IMS information
+ pkgCache::RlsFileIterator File = Gen.GetCurRlsFile();
+ pkgCacheGenerator::Dynamic<pkgCache::RlsFileIterator> DynFile(File);
+ // Rel can't be used as this is potentially a temporary file
+ struct stat Buf;
+ if (stat(ReleaseFile.c_str(), &Buf) != 0)
+ return _error->Errno("fstat", "Unable to stat file %s", ReleaseFile.c_str());
+ File->Size = Buf.st_size;
+ File->mtime = Buf.st_mtime;
+
+ pkgTagFile TagFile(&Rel, Rel.Size());
+ pkgTagSection Section;
+ if (Rel.IsOpen() == false || Rel.Failed() || TagFile.Step(Section) == false)
+ return false;
+
+ std::string data;
+ #define APT_INRELEASE(TYPE, TAG, STORE) \
+ data = Section.FindS(TAG); \
+ if (data.empty() == false) \
+ { \
+ map_stringitem_t const storage = Gen.StoreString(pkgCacheGenerator::TYPE, data); \
+ if (storage == 0) return false; \
+ STORE = storage; \
+ }
+ APT_INRELEASE(MIXED, "Suite", File->Archive)
+ APT_INRELEASE(VERSIONNUMBER, "Version", File->Version)
+ APT_INRELEASE(MIXED, "Origin", File->Origin)
+ APT_INRELEASE(MIXED, "Codename", File->Codename)
+ APT_INRELEASE(MIXED, "Label", File->Label)
+ #undef APT_INRELEASE
+ Section.FindFlag("NotAutomatic", File->Flags, pkgCache::Flag::NotAutomatic);
+ Section.FindFlag("ButAutomaticUpgrades", File->Flags, pkgCache::Flag::ButAutomaticUpgrades);
+ Section.FindFlag("Packages-Require-Authorization", File->Flags, pkgCache::Flag::PackagesRequireAuthorization);
+
+ return true;
+}
+ /*}}}*/
+// ReleaseIndex::FindInCache - Find this index /*{{{*/
+pkgCache::RlsFileIterator debReleaseIndex::FindInCache(pkgCache &Cache, bool const ModifyCheck) const
+{
+ std::string ReleaseFile;
+ bool const releaseExists = ReleaseFileName(this, ReleaseFile);
+
+ pkgCache::RlsFileIterator File = Cache.RlsFileBegin();
+ for (; File.end() == false; ++File)
+ {
+ if (File->FileName == 0 || ReleaseFile != File.FileName())
+ continue;
+
+ // empty means the file does not exist by "design"
+ if (ModifyCheck == false || (releaseExists == false && File->Size == 0))
+ return File;
+
+ struct stat St;
+ if (stat(File.FileName(),&St) != 0)
+ {
+ if (_config->FindB("Debug::pkgCacheGen", false))
+ std::clog << "ReleaseIndex::FindInCache - stat failed on " << File.FileName() << std::endl;
+ return pkgCache::RlsFileIterator(Cache);
+ }
+ if ((unsigned)St.st_size != File->Size || St.st_mtime != File->mtime)
+ {
+ if (_config->FindB("Debug::pkgCacheGen", false))
+ std::clog << "ReleaseIndex::FindInCache - size (" << St.st_size << " <> " << File->Size
+ << ") or mtime (" << St.st_mtime << " <> " << File->mtime
+ << ") doesn't match for " << File.FileName() << std::endl;
+ return pkgCache::RlsFileIterator(Cache);
+ }
+ return File;
+ }
+
+ return File;
+}
+ /*}}}*/
+
+class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/
+{
+ static std::vector<std::string> getDefaultSetOf(std::string const &Name,
+ std::map<std::string, std::string> const &Options, std::vector<std::string> const &defaultValues)
+ {
+ auto const val = Options.find(Name);
+ if (val != Options.end())
+ return VectorizeString(val->second, ',');
+ return defaultValues;
+ }
+ static std::vector<std::string> applyPlusMinusOptions(std::string const &Name,
+ std::map<std::string, std::string> const &Options, std::vector<std::string> &&Values)
+ {
+ auto val = Options.find(Name + "+");
+ if (val != Options.end())
+ {
+ std::vector<std::string> const plus = VectorizeString(val->second, ',');
+ std::copy_if(plus.begin(), plus.end(), std::back_inserter(Values), [&Values](std::string const &v) {
+ return std::find(Values.begin(), Values.end(), v) == Values.end();
+ });
+ }
+ if ((val = Options.find(Name + "-")) != Options.end())
+ {
+ std::vector<std::string> const minus = VectorizeString(val->second, ',');
+ Values.erase(std::remove_if(Values.begin(), Values.end(), [&minus](std::string const &v) {
+ return std::find(minus.begin(), minus.end(), v) != minus.end();
+ }), Values.end());
+ }
+ return Values;
+ }
+ static std::vector<std::string> parsePlusMinusOptions(std::string const &Name,
+ std::map<std::string, std::string> const &Options, std::vector<std::string> const &defaultValues)
+ {
+ return applyPlusMinusOptions(Name, Options, getDefaultSetOf(Name, Options, defaultValues));
+ }
+ static std::vector<std::string> parsePlusMinusArchOptions(std::string const &Name,
+ std::map<std::string, std::string> const &Options)
+ {
+ auto Values = getDefaultSetOf(Name, Options, APT::Configuration::getArchitectures());
+ // all is a very special architecture users shouldn't be concerned with explicitly
+ // but if the user does, do not override the choice
+ auto const val = Options.find(Name + "-");
+ if (val != Options.end())
+ {
+ std::vector<std::string> const minus = VectorizeString(val->second, ',');
+ if (std::find(minus.begin(), minus.end(), "all") != minus.end())
+ return applyPlusMinusOptions(Name, Options, std::move(Values));
+ }
+ Values = applyPlusMinusOptions(Name, Options, std::move(Values));
+ if (std::find(Values.begin(), Values.end(), "all") == Values.end())
+ Values.push_back("implicit:all");
+ return Values;
+ }
+ static std::vector<std::string> parsePlusMinusTargetOptions(char const * const Name,
+ std::map<std::string, std::string> const &Options)
+ {
+ std::vector<std::string> const alltargets = _config->FindVector(std::string("Acquire::IndexTargets::") + Name, "", true);
+ std::vector<std::string> deftargets;
+ deftargets.reserve(alltargets.size());
+ std::copy_if(alltargets.begin(), alltargets.end(), std::back_inserter(deftargets), [&](std::string const &t) {
+ std::string c = "Acquire::IndexTargets::";
+ c.append(Name).append("::").append(t).append("::DefaultEnabled");
+ return _config->FindB(c, true);
+ });
+ std::vector<std::string> mytargets = parsePlusMinusOptions("target", Options, deftargets);
+ for (auto const &target : alltargets)
+ {
+ std::map<std::string, std::string>::const_iterator const opt = Options.find(target);
+ if (opt == Options.end())
+ continue;
+ auto const idMatch = [&](std::string const &t) {
+ return target == _config->Find(std::string("Acquire::IndexTargets::") + Name + "::" + t + "::Identifier", t);
+ };
+ if (StringToBool(opt->second))
+ std::copy_if(alltargets.begin(), alltargets.end(), std::back_inserter(mytargets), idMatch);
+ else
+ mytargets.erase(std::remove_if(mytargets.begin(), mytargets.end(), idMatch), mytargets.end());
+ }
+ // if we can't order it in a 1000 steps we give up… probably a cycle
+ for (auto i = 0; i < 1000; ++i)
+ {
+ bool Changed = false;
+ for (auto t = mytargets.begin(); t != mytargets.end(); ++t)
+ {
+ std::string const fallback = _config->Find(std::string("Acquire::IndexTargets::") + Name + "::" + *t + "::Fallback-Of");
+ if (fallback.empty())
+ continue;
+ auto const faller = std::find(mytargets.begin(), mytargets.end(), fallback);
+ if (faller == mytargets.end() || faller < t)
+ continue;
+ Changed = true;
+ auto const tv = *t;
+ mytargets.erase(t);
+ mytargets.emplace_back(tv);
+ break;
+ }
+ if (Changed == false)
+ break;
+ }
+ // remove duplicates without changing the order (in first appearance)
+ {
+ std::set<std::string> seenOnce;
+ mytargets.erase(std::remove_if(mytargets.begin(), mytargets.end(), [&](std::string const &t) {
+ return seenOnce.insert(t).second == false;
+ }), mytargets.end());
+ }
+ return mytargets;
+ }
+
+ metaIndex::TriState GetTriStateOption(std::map<std::string, std::string>const &Options, char const * const name) const
+ {
+ std::map<std::string, std::string>::const_iterator const opt = Options.find(name);
+ if (opt != Options.end())
+ return StringToBool(opt->second, false) ? metaIndex::TRI_YES : metaIndex::TRI_NO;
+ return metaIndex::TRI_DONTCARE;
+ }
+
+ static time_t GetTimeOption(std::map<std::string, std::string>const &Options, char const * const name)
+ {
+ std::map<std::string, std::string>::const_iterator const opt = Options.find(name);
+ if (opt == Options.end())
+ return 0;
+ return strtoull(opt->second.c_str(), NULL, 10);
+ }
+
+ static bool GetBoolOption(std::map<std::string, std::string> const &Options, char const * const name, bool const defVal)
+ {
+ std::map<std::string, std::string>::const_iterator const opt = Options.find(name);
+ if (opt == Options.end())
+ return defVal;
+ return StringToBool(opt->second, defVal);
+ }
+
+ static std::vector<std::string> GetMapKeys(std::map<std::string, std::string> const &Options)
+ {
+ std::vector<std::string> ret;
+ ret.reserve(Options.size());
+ for (auto &&O: Options)
+ ret.emplace_back(O.first);
+ std::sort(ret.begin(), ret.end());
+ return ret;
+ }
+
+ static bool MapsAreEqual(std::map<std::string, std::string> const &OptionsA,
+ std::map<std::string, std::string> const &OptionsB,
+ std::string const &URI, std::string const &Dist)
+ {
+ auto const KeysA = GetMapKeys(OptionsA);
+ auto const KeysB = GetMapKeys(OptionsB);
+ auto const m = std::mismatch(KeysA.begin(), KeysA.end(), KeysB.begin());
+ if (m.first != KeysA.end())
+ {
+ if (std::find(KeysB.begin(), KeysB.end(), *m.first) == KeysB.end())
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), m.first->c_str(), "<set>", "<unset>");
+ else
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), m.second->c_str(), "<set>", "<unset>");
+ }
+ if (m.second != KeysB.end())
+ {
+ if (std::find(KeysA.begin(), KeysA.end(), *m.second) == KeysA.end())
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), m.first->c_str(), "<set>", "<unset>");
+ else
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), m.second->c_str(), "<set>", "<unset>");
+ }
+ for (auto&& key: KeysA)
+ {
+ if (key == "BASE_URI" || key == "REPO_URI" || key == "SITE" || key == "RELEASE")
+ continue;
+ auto const a = OptionsA.find(key);
+ auto const b = OptionsB.find(key);
+ if (unlikely(a == OptionsA.end() || b == OptionsB.end()) || a->second != b->second)
+ return _error->Error(_("Conflicting values set for option %s regarding source %s %s"), key.c_str(), URI.c_str(), Dist.c_str());
+ }
+ return true;
+ }
+
+ static debReleaseIndex * GetDebReleaseIndexBy(std::vector<metaIndex *> &List, std::string const &URI,
+ std::string const &Dist, std::map<std::string, std::string> const &Options)
+ {
+ std::map<std::string, std::string> ReleaseOptions{{
+ {"BASE_URI", constructMetaIndexURI(URI, Dist, "")},
+ {"REPO_URI", URI},
+ {"SITE", ::URI::ArchiveOnly(URI)},
+ {"RELEASE", (Dist == "/") ? "" : Dist},
+ }};
+ if (GetBoolOption(Options, "allow-insecure", _config->FindB("Acquire::AllowInsecureRepositories")))
+ ReleaseOptions.emplace("ALLOW_INSECURE", "true");
+ if (GetBoolOption(Options, "allow-weak", _config->FindB("Acquire::AllowWeakRepositories")))
+ ReleaseOptions.emplace("ALLOW_WEAK", "true");
+ if (GetBoolOption(Options, "allow-downgrade-to-insecure", _config->FindB("Acquire::AllowDowngradeToInsecureRepositories")))
+ ReleaseOptions.emplace("ALLOW_DOWNGRADE_TO_INSECURE", "true");
+
+ auto InReleasePath = Options.find("inrelease-path");
+ if (InReleasePath != Options.end())
+ ReleaseOptions.emplace("INRELEASE_PATH", InReleasePath->second);
+
+ debReleaseIndex * Deb = nullptr;
+ std::string const FileName = URItoFileName(constructMetaIndexURI(URI, Dist, "Release"));
+ for (auto const &I: List)
+ {
+ // We only worry about debian entries here
+ if (strcmp(I->GetType(), "deb") != 0)
+ continue;
+
+ auto const D = dynamic_cast<debReleaseIndex*>(I);
+ if (unlikely(D == nullptr))
+ continue;
+
+ /* This check ensures that there will be only one Release file
+ queued for all the Packages files and Sources files it
+ corresponds to. */
+ if (URItoFileName(D->MetaIndexURI("Release")) == FileName)
+ {
+ if (MapsAreEqual(ReleaseOptions, D->GetReleaseOptions(), URI, Dist) == false)
+ return nullptr;
+ Deb = D;
+ break;
+ }
+ }
+
+ // No currently created Release file indexes this entry, so we create a new one.
+ if (Deb == nullptr)
+ {
+ Deb = new debReleaseIndex(URI, Dist, ReleaseOptions);
+ List.push_back(Deb);
+ }
+ return Deb;
+ }
+
+ protected:
+
+ bool CreateItemInternal(std::vector<metaIndex *> &List, std::string const &URI,
+ std::string const &Dist, std::string const &Section,
+ bool const &IsSrc, std::map<std::string, std::string> const &Options) const
+ {
+ auto const Deb = GetDebReleaseIndexBy(List, URI, Dist, Options);
+ if (Deb == nullptr)
+ return false;
+
+ bool const UsePDiffs = GetBoolOption(Options, "pdiffs", _config->FindB("Acquire::PDiffs", true));
+
+ std::string UseByHash = _config->Find("APT::Acquire::By-Hash", "yes");
+ UseByHash = _config->Find("Acquire::By-Hash", UseByHash);
+ {
+ std::string const host = ::URI(URI).Host;
+ if (host.empty() == false)
+ {
+ UseByHash = _config->Find("APT::Acquire::" + host + "::By-Hash", UseByHash);
+ UseByHash = _config->Find("Acquire::" + host + "::By-Hash", UseByHash);
+ }
+ std::map<std::string, std::string>::const_iterator const opt = Options.find("by-hash");
+ if (opt != Options.end())
+ UseByHash = opt->second;
+ }
+
+ auto const entry = Options.find("sourceslist-entry");
+ Deb->AddComponent(
+ entry->second,
+ IsSrc,
+ Section,
+ parsePlusMinusTargetOptions(Name, Options),
+ parsePlusMinusArchOptions("arch", Options),
+ parsePlusMinusOptions("lang", Options, APT::Configuration::getLanguages(true)),
+ UsePDiffs,
+ UseByHash
+ );
+
+ if (Deb->SetTrusted(GetTriStateOption(Options, "trusted")) == false ||
+ Deb->SetCheckValidUntil(GetTriStateOption(Options, "check-valid-until")) == false ||
+ Deb->SetValidUntilMax(GetTimeOption(Options, "valid-until-max")) == false ||
+ Deb->SetValidUntilMin(GetTimeOption(Options, "valid-until-min")) == false ||
+ Deb->SetCheckDate(GetTriStateOption(Options, "check-date")) == false ||
+ Deb->SetDateMaxFuture(GetTimeOption(Options, "date-max-future")) == false)
+ return false;
+
+ std::map<std::string, std::string>::const_iterator const signedby = Options.find("signed-by");
+ if (signedby == Options.end())
+ {
+ bool alreadySet = false;
+ std::string filename;
+ if (ReleaseFileName(Deb, filename))
+ {
+ auto OldDeb = Deb->UnloadedClone();
+ _error->PushToStack();
+ OldDeb->Load(filename, nullptr);
+ bool const goodLoad = _error->PendingError() == false;
+ _error->RevertToStack();
+ if (goodLoad)
+ {
+ if (OldDeb->GetValidUntil() > 0)
+ {
+ time_t const invalid_since = time(NULL) - OldDeb->GetValidUntil();
+ if (invalid_since <= 0)
+ {
+ Deb->SetSignedBy(OldDeb->GetSignedBy());
+ alreadySet = true;
+ }
+ }
+ }
+ delete OldDeb;
+ }
+ if (alreadySet == false && Deb->SetSignedBy("") == false)
+ return false;
+ }
+ else
+ {
+ if (Deb->SetSignedBy(signedby->second) == false)
+ return false;
+ }
+
+ return true;
+ }
+
+ debSLTypeDebian(char const * const Name, char const * const Label) : Type(Name, Label)
+ {
+ }
+};
+ /*}}}*/
+class APT_HIDDEN debSLTypeDeb : public debSLTypeDebian /*{{{*/
+{
+ public:
+
+ bool CreateItem(std::vector<metaIndex *> &List, std::string const &URI,
+ std::string const &Dist, std::string const &Section,
+ std::map<std::string, std::string> const &Options) const APT_OVERRIDE
+ {
+ return CreateItemInternal(List, URI, Dist, Section, false, Options);
+ }
+
+ debSLTypeDeb() : debSLTypeDebian("deb", "Debian binary tree")
+ {
+ }
+};
+ /*}}}*/
+class APT_HIDDEN debSLTypeDebSrc : public debSLTypeDebian /*{{{*/
+{
+ public:
+
+ bool CreateItem(std::vector<metaIndex *> &List, std::string const &URI,
+ std::string const &Dist, std::string const &Section,
+ std::map<std::string, std::string> const &Options) const APT_OVERRIDE
+ {
+ return CreateItemInternal(List, URI, Dist, Section, true, Options);
+ }
+
+ debSLTypeDebSrc() : debSLTypeDebian("deb-src", "Debian source tree")
+ {
+ }
+};
+ /*}}}*/
+
+APT_HIDDEN debSLTypeDeb _apt_DebType;
+APT_HIDDEN debSLTypeDebSrc _apt_DebSrcType;
diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h
new file mode 100644
index 0000000..864ac3e
--- /dev/null
+++ b/apt-pkg/deb/debmetaindex.h
@@ -0,0 +1,78 @@
+#ifndef PKGLIB_DEBMETAINDEX_H
+#define PKGLIB_DEBMETAINDEX_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/metaindex.h>
+
+#include <map>
+#include <string>
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/sourcelist.h>
+#endif
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/init.h>
+#endif
+
+class pkgAcquire;
+class pkgIndexFile;
+class IndexTarget;
+class pkgCacheGenerator;
+class OpProgress;
+class debReleaseIndexPrivate;
+
+class APT_HIDDEN debReleaseIndex : public metaIndex
+{
+ debReleaseIndexPrivate * const d;
+
+ APT_HIDDEN bool parseSumData(const char *&Start, const char *End, std::string &Name,
+ std::string &Hash, unsigned long long &Size);
+ public:
+
+ APT_HIDDEN std::string MetaIndexInfo(const char *Type) const;
+ APT_HIDDEN std::string MetaIndexFile(const char *Types) const;
+ APT_HIDDEN std::string MetaIndexURI(const char *Type) const;
+
+ debReleaseIndex(std::string const &URI, std::string const &Dist, std::map<std::string,std::string> const &Options);
+ debReleaseIndex(std::string const &URI, std::string const &Dist, bool const Trusted, std::map<std::string,std::string> const &Options);
+ virtual ~debReleaseIndex();
+
+ virtual std::string ArchiveURI(std::string const &File) const APT_OVERRIDE {return URI + File;};
+ virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) APT_OVERRIDE;
+ virtual std::vector<IndexTarget> GetIndexTargets() const APT_OVERRIDE;
+
+ virtual std::string Describe() const APT_OVERRIDE;
+ virtual pkgCache::RlsFileIterator FindInCache(pkgCache &Cache, bool const ModifyCheck) const APT_OVERRIDE;
+ virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const APT_OVERRIDE;
+
+ virtual bool Load(std::string const &Filename, std::string * const ErrorText) APT_OVERRIDE;
+ virtual metaIndex * UnloadedClone() const APT_OVERRIDE;
+
+ virtual std::vector <pkgIndexFile *> *GetIndexFiles() APT_OVERRIDE;
+
+ bool SetTrusted(TriState const Trusted);
+ bool SetCheckValidUntil(TriState const Trusted);
+ bool SetValidUntilMin(time_t const Valid);
+ bool SetValidUntilMax(time_t const Valid);
+ bool SetCheckDate(TriState const CheckDate);
+ bool SetDateMaxFuture(time_t const DateMaxFuture);
+ bool SetSignedBy(std::string const &SignedBy);
+ std::map<std::string, std::string> GetReleaseOptions();
+
+ virtual bool IsTrusted() const APT_OVERRIDE;
+ bool IsArchitectureSupported(std::string const &arch) const;
+ bool IsArchitectureAllSupportedFor(IndexTarget const &target) const;
+ bool HasSupportForComponent(std::string const &component) const;
+
+ APT_PURE time_t GetNotBefore() const;
+
+ void AddComponent(std::string const &sourcesEntry,
+ bool const isSrc, std::string const &Name,
+ std::vector<std::string> const &Targets,
+ std::vector<std::string> const &Architectures,
+ std::vector<std::string> Languages,
+ bool const usePDiffs, std::string const &useByHash);
+};
+
+#endif
diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc
new file mode 100644
index 0000000..22ac219
--- /dev/null
+++ b/apt-pkg/deb/debrecords.cc
@@ -0,0 +1,227 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Package Records - Parser for debian package records
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/debindexfile.h>
+#include <apt-pkg/debrecords.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <algorithm>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <langinfo.h>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using std::string;
+
+// RecordParser::debRecordParser - Constructor /*{{{*/
+debRecordParser::debRecordParser(string FileName,pkgCache &Cache) :
+ debRecordParserBase(), d(NULL), File(FileName, FileFd::ReadOnly, FileFd::Extension),
+ Tags(&File, std::max(Cache.Head().MaxVerFileSize, Cache.Head().MaxDescFileSize) + 200)
+{
+}
+ /*}}}*/
+// RecordParser::Jump - Jump to a specific record /*{{{*/
+bool debRecordParser::Jump(pkgCache::VerFileIterator const &Ver)
+{
+ if (Ver.end() == true)
+ return false;
+ return Tags.Jump(Section,Ver->Offset);
+}
+bool debRecordParser::Jump(pkgCache::DescFileIterator const &Desc)
+{
+ if (Desc.end() == true)
+ return false;
+ return Tags.Jump(Section,Desc->Offset);
+}
+ /*}}}*/
+debRecordParser::~debRecordParser() {}
+
+debRecordParserBase::debRecordParserBase() : Parser(), d(NULL) {}
+// RecordParserBase::FileName - Return the archive filename on the site /*{{{*/
+string debRecordParserBase::FileName()
+{
+ return Section.FindS("Filename");
+}
+ /*}}}*/
+// RecordParserBase::Name - Return the package name /*{{{*/
+string debRecordParserBase::Name()
+{
+ string Result = Section.FindS("Package");
+
+ // Normalize mixed case package names to lower case, like dpkg does
+ // See Bug#807012 for details
+ std::transform(Result.begin(), Result.end(), Result.begin(), tolower_ascii);
+
+ return Result;
+}
+ /*}}}*/
+// RecordParserBase::Homepage - Return the package homepage /*{{{*/
+string debRecordParserBase::Homepage()
+{
+ return Section.FindS("Homepage");
+}
+ /*}}}*/
+// RecordParserBase::Hashes - return the available archive hashes /*{{{*/
+HashStringList debRecordParserBase::Hashes() const
+{
+ HashStringList hashes;
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ std::string const hash = Section.FindS(*type);
+ if (hash.empty() == false)
+ hashes.push_back(HashString(*type, hash));
+ }
+ auto const size = Section.FindULL("Size", 0);
+ if (size != 0)
+ hashes.FileSize(size);
+ return hashes;
+}
+ /*}}}*/
+// RecordParserBase::Maintainer - Return the maintainer email /*{{{*/
+string debRecordParserBase::Maintainer()
+{
+ return Section.FindS("Maintainer");
+}
+ /*}}}*/
+// RecordParserBase::RecordField - Return the value of an arbitrary field /*{{*/
+string debRecordParserBase::RecordField(const char *fieldName)
+{
+ return Section.FindS(fieldName);
+}
+ /*}}}*/
+// RecordParserBase::ShortDesc - Return a 1 line description /*{{{*/
+string debRecordParserBase::ShortDesc(std::string const &lang)
+{
+ string const Res = LongDesc(lang);
+ if (Res.empty() == true)
+ return "";
+ string::size_type const Pos = Res.find('\n');
+ if (Pos == string::npos)
+ return Res;
+ return string(Res,0,Pos);
+}
+ /*}}}*/
+// RecordParserBase::LongDesc - Return a longer description /*{{{*/
+string debRecordParserBase::LongDesc(std::string const &lang)
+{
+ string orig;
+ if (lang.empty() == true)
+ {
+ std::vector<string> const lang = APT::Configuration::getLanguages();
+ for (std::vector<string>::const_iterator l = lang.begin();
+ l != lang.end(); ++l)
+ {
+ std::string const tagname = "Description-" + *l;
+ orig = Section.FindS(tagname.c_str());
+ if (orig.empty() == false)
+ break;
+ else if (*l == "en")
+ {
+ orig = Section.FindS("Description");
+ if (orig.empty() == false)
+ break;
+ }
+ }
+ if (orig.empty() == true)
+ orig = Section.FindS("Description");
+ }
+ else
+ {
+ std::string const tagname = "Description-" + lang;
+ orig = Section.FindS(tagname.c_str());
+ if (orig.empty() == true && lang == "en")
+ orig = Section.FindS("Description");
+ }
+
+ char const * const codeset = nl_langinfo(CODESET);
+ if (strcmp(codeset,"UTF-8") != 0) {
+ string dest;
+ UTF8ToCodeset(codeset, orig, &dest);
+ return dest;
+ }
+
+ return orig;
+}
+ /*}}}*/
+
+static const char * const SourceVerSeparators = " ()";
+// RecordParserBase::SourcePkg - Return the source package name if any /*{{{*/
+string debRecordParserBase::SourcePkg()
+{
+ string Res = Section.FindS("Source");
+ string::size_type Pos = Res.find_first_of(SourceVerSeparators);
+ if (Pos == string::npos)
+ return Res;
+ return string(Res,0,Pos);
+}
+ /*}}}*/
+// RecordParserBase::SourceVer - Return the source version number if present /*{{{*/
+string debRecordParserBase::SourceVer()
+{
+ string Pkg = Section.FindS("Source");
+ string::size_type Pos = Pkg.find_first_of(SourceVerSeparators);
+ if (Pos == string::npos)
+ return "";
+
+ string::size_type VerStart = Pkg.find_first_not_of(SourceVerSeparators, Pos);
+ if(VerStart == string::npos)
+ return "";
+
+ string::size_type VerEnd = Pkg.find_first_of(SourceVerSeparators, VerStart);
+ if(VerEnd == string::npos)
+ // Corresponds to the case of, e.g., "foo (1.2" without a closing
+ // paren. Be liberal and guess what it means.
+ return string(Pkg, VerStart);
+ else
+ return string(Pkg, VerStart, VerEnd - VerStart);
+}
+ /*}}}*/
+// RecordParserBase::GetRec - Return the whole record /*{{{*/
+void debRecordParserBase::GetRec(const char *&Start,const char *&Stop)
+{
+ Section.GetSection(Start,Stop);
+}
+ /*}}}*/
+debRecordParserBase::~debRecordParserBase() {}
+
+bool debDebFileRecordParser::LoadContent()
+{
+ // load content only once
+ if (controlContent.empty() == false)
+ return true;
+
+ std::ostringstream content;
+ if (debDebPkgFileIndex::GetContent(content, debFileName) == false)
+ return false;
+ // add two newlines to make sure the scanner finds the section,
+ // which is usually done by pkgTagFile automatically if needed.
+ content << "\n\n";
+
+ controlContent = content.str();
+ if (Section.Scan(controlContent.c_str(), controlContent.length()) == false)
+ return _error->Error(_("Unable to parse package file %s (%d)"), debFileName.c_str(), 3);
+ return true;
+}
+bool debDebFileRecordParser::Jump(pkgCache::VerFileIterator const &) { return LoadContent(); }
+bool debDebFileRecordParser::Jump(pkgCache::DescFileIterator const &) { return LoadContent(); }
+std::string debDebFileRecordParser::FileName() { return debFileName; }
+
+debDebFileRecordParser::debDebFileRecordParser(std::string FileName) : debRecordParserBase(), d(NULL), debFileName(FileName) {}
+debDebFileRecordParser::~debDebFileRecordParser() {}
diff --git a/apt-pkg/deb/debrecords.h b/apt-pkg/deb/debrecords.h
new file mode 100644
index 0000000..7c3b902
--- /dev/null
+++ b/apt-pkg/deb/debrecords.h
@@ -0,0 +1,92 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Package Records - Parser for debian package records
+
+ This provides display-type parsing for the Packages file. This is
+ different than the list parser which provides cache generation
+ services. There should be no overlap between these two.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBRECORDS_H
+#define PKGLIB_DEBRECORDS_H
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/tagfile.h>
+
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#endif
+
+class APT_HIDDEN debRecordParserBase : public pkgRecords::Parser
+{
+ void * const d;
+ protected:
+ pkgTagSection Section;
+
+ public:
+ // These refer to the archive file for the Version
+ virtual std::string FileName() APT_OVERRIDE;
+ virtual std::string SourcePkg() APT_OVERRIDE;
+ virtual std::string SourceVer() APT_OVERRIDE;
+
+ virtual HashStringList Hashes() const APT_OVERRIDE;
+
+ // These are some general stats about the package
+ virtual std::string Maintainer() APT_OVERRIDE;
+ virtual std::string ShortDesc(std::string const &lang) APT_OVERRIDE;
+ virtual std::string LongDesc(std::string const &lang) APT_OVERRIDE;
+ virtual std::string Name() APT_OVERRIDE;
+ virtual std::string Homepage() APT_OVERRIDE;
+
+ // An arbitrary custom field
+ virtual std::string RecordField(const char *fieldName) APT_OVERRIDE;
+
+ virtual void GetRec(const char *&Start,const char *&Stop) APT_OVERRIDE;
+
+ debRecordParserBase();
+ virtual ~debRecordParserBase();
+};
+
+class APT_HIDDEN debRecordParser : public debRecordParserBase
+{
+ void * const d;
+ protected:
+ FileFd File;
+ pkgTagFile Tags;
+
+ virtual bool Jump(pkgCache::VerFileIterator const &Ver) APT_OVERRIDE;
+ virtual bool Jump(pkgCache::DescFileIterator const &Desc) APT_OVERRIDE;
+
+ public:
+ debRecordParser(std::string FileName,pkgCache &Cache);
+ virtual ~debRecordParser();
+};
+
+// custom record parser that reads deb files directly
+class APT_HIDDEN debDebFileRecordParser : public debRecordParserBase
+{
+ void * const d;
+ std::string debFileName;
+ std::string controlContent;
+
+ APT_HIDDEN bool LoadContent();
+ protected:
+ // single file files, so no jumping whatsoever
+ bool Jump(pkgCache::VerFileIterator const &) APT_OVERRIDE;
+ bool Jump(pkgCache::DescFileIterator const &) APT_OVERRIDE;
+
+ public:
+ virtual std::string FileName() APT_OVERRIDE;
+
+ debDebFileRecordParser(std::string FileName);
+ virtual ~debDebFileRecordParser();
+};
+
+#endif
diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc
new file mode 100644
index 0000000..9656fca
--- /dev/null
+++ b/apt-pkg/deb/debsrcrecords.cc
@@ -0,0 +1,324 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Source Package Records - Parser implementation for Debian style
+ source indexes
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/debsrcrecords.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile-keys.h>
+#include <apt-pkg/tagfile.h>
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+ /*}}}*/
+
+using std::max;
+using std::string;
+
+debSrcRecordParser::debSrcRecordParser(std::string const &File,pkgIndexFile const *Index)
+ : Parser(Index), d(NULL), Tags(&Fd), iOffset(0), Buffer(NULL)
+{
+ if (File.empty() == false)
+ {
+ if (Fd.Open(File, FileFd::ReadOnly, FileFd::Extension))
+ Tags.Init(&Fd, 102400);
+ }
+}
+std::string debSrcRecordParser::Package() const /*{{{*/
+{
+ auto const name = Sect.Find(pkgTagSection::Key::Package);
+ if (iIndex != nullptr || name.empty() == false)
+ return name.to_string();
+ return Sect.Find(pkgTagSection::Key::Source).to_string();
+}
+ /*}}}*/
+// SrcRecordParser::Binaries - Return the binaries field /*{{{*/
+// ---------------------------------------------------------------------
+/* This member parses the binaries field into a pair of class arrays and
+ returns a list of strings representing all of the components of the
+ binaries field. The returned array need not be freed and will be
+ reused by the next Binaries function call. This function is commonly
+ used during scanning to find the right package */
+const char **debSrcRecordParser::Binaries()
+{
+ const char *Start, *End;
+ if (Sect.Find(pkgTagSection::Key::Binary, Start, End) == false)
+ return NULL;
+ for (; isspace_ascii(*Start) != 0; ++Start);
+ if (Start >= End)
+ return NULL;
+
+ StaticBinList.clear();
+ free(Buffer);
+ Buffer = strndup(Start, End - Start);
+
+ char* bin = Buffer;
+ do {
+ char* binStartNext = strchrnul(bin, ',');
+ // Found a comma, clean up any space before it
+ if (binStartNext > Buffer) {
+ char* binEnd = binStartNext - 1;
+ for (; binEnd > Buffer && isspace_ascii(*binEnd) != 0; --binEnd)
+ *binEnd = 0;
+ }
+ StaticBinList.push_back(bin);
+ if (*binStartNext != ',')
+ break;
+ *binStartNext = '\0';
+ for (bin = binStartNext + 1; isspace_ascii(*bin) != 0; ++bin)
+ ;
+ } while (*bin != '\0');
+ StaticBinList.push_back(NULL);
+
+ return &StaticBinList[0];
+}
+ /*}}}*/
+// SrcRecordParser::BuildDepends - Return the Build-Depends information /*{{{*/
+// ---------------------------------------------------------------------
+/* This member parses the build-depends information and returns a list of
+ package/version records representing the build dependency. The returned
+ array need not be freed and will be reused by the next call to this
+ function */
+bool debSrcRecordParser::BuildDepends(std::vector<pkgSrcRecords::Parser::BuildDepRec> &BuildDeps,
+ bool const &ArchOnly, bool const &StripMultiArch)
+{
+ BuildDeps.clear();
+
+ pkgTagSection::Key const fields[] = {
+ pkgTagSection::Key::Build_Depends,
+ pkgTagSection::Key::Build_Depends_Indep,
+ pkgTagSection::Key::Build_Conflicts,
+ pkgTagSection::Key::Build_Conflicts_Indep,
+ pkgTagSection::Key::Build_Depends_Arch,
+ pkgTagSection::Key::Build_Conflicts_Arch,
+ };
+ for (unsigned short I = 0; I < sizeof(fields) / sizeof(fields[0]); ++I)
+ {
+ if (ArchOnly && (fields[I] == pkgTagSection::Key::Build_Depends_Indep || fields[I] == pkgTagSection::Key::Build_Conflicts_Indep))
+ continue;
+
+ const char *Start, *Stop;
+ if (Sect.Find(fields[I], Start, Stop) == false)
+ continue;
+
+ if (Start == Stop)
+ continue;
+
+ while (1)
+ {
+ BuildDepRec rec;
+ Start = debListParser::ParseDepends(Start, Stop,
+ rec.Package, rec.Version, rec.Op, true, StripMultiArch, true);
+
+ if (Start == 0)
+ return _error->Error("Problem parsing dependency: %s", BuildDepType(I));
+ rec.Type = I;
+
+ // We parsed a package that was ignored (wrong architecture restriction
+ // or something).
+ if (rec.Package.empty())
+ {
+ // If we are in an OR group, we need to set the "Or" flag of the
+ // previous entry to our value.
+ if (BuildDeps.empty() == false && (BuildDeps[BuildDeps.size() - 1].Op & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ BuildDeps[BuildDeps.size() - 1].Op &= ~pkgCache::Dep::Or;
+ BuildDeps[BuildDeps.size() - 1].Op |= (rec.Op & pkgCache::Dep::Or);
+ }
+ } else {
+ BuildDeps.emplace_back(std::move(rec));
+ }
+
+ if (Start == Stop)
+ break;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// SrcRecordParser::Files - Return a list of files for this source /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses the list of files and returns it, each file is required to have
+ a complete source package */
+bool debSrcRecordParser::Files(std::vector<pkgSrcRecords::File> &F)
+{
+ std::vector<pkgSrcRecords::File2> F2;
+ if (Files2(F2) == false)
+ return false;
+ for (std::vector<pkgSrcRecords::File2>::const_iterator f2 = F2.begin(); f2 != F2.end(); ++f2)
+ {
+ pkgSrcRecords::File2 f;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ f.MD5Hash = f2->MD5Hash;
+ f.Size = f2->Size;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+ f.Path = f2->Path;
+ f.Type = f2->Type;
+ F.push_back(f);
+ }
+ return true;
+}
+bool debSrcRecordParser::Files2(std::vector<pkgSrcRecords::File2> &List)
+{
+ List.clear();
+
+ // Stash the / terminated directory prefix
+ std::string Base = Sect.Find(pkgTagSection::Key::Directory).to_string();
+ if (Base.empty() == false && Base[Base.length()-1] != '/')
+ Base += '/';
+
+ std::vector<std::string> const compExts = APT::Configuration::getCompressorExtensions();
+
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ // derive field from checksum type
+ std::string checksumField("Checksums-");
+ if (strcmp(*type, "MD5Sum") == 0)
+ checksumField = "Files"; // historic name for MD5 checksums
+ else
+ checksumField.append(*type);
+
+ string const Files = Sect.FindS(checksumField.c_str());
+ if (Files.empty() == true)
+ continue;
+
+ // Iterate over the entire list grabbing each triplet
+ const char *C = Files.c_str();
+ while (*C != 0)
+ {
+ string hash, size, path;
+
+ // Parse each of the elements
+ if (ParseQuoteWord(C, hash) == false ||
+ ParseQuoteWord(C, size) == false ||
+ ParseQuoteWord(C, path) == false)
+ return _error->Error("Error parsing file record in %s of source package %s", checksumField.c_str(), Package().c_str());
+
+ if (iIndex == nullptr && checksumField == "Files")
+ {
+ // the Files field has a different format than the rest in deb-changes files
+ std::string ignore;
+ if (ParseQuoteWord(C, ignore) == false ||
+ ParseQuoteWord(C, path) == false)
+ return _error->Error("Error parsing file record in %s of source package %s", checksumField.c_str(), Package().c_str());
+ }
+
+ HashString const hashString(*type, hash);
+ if (Base.empty() == false)
+ path = Base + path;
+
+ // look if we have a record for this file already
+ std::vector<pkgSrcRecords::File2>::iterator file = List.begin();
+ for (; file != List.end(); ++file)
+ if (file->Path == path)
+ break;
+
+ // we have it already, store the new hash and be done
+ if (file != List.end())
+ {
+ if (checksumField == "Files")
+ {
+ APT_IGNORE_DEPRECATED_PUSH
+ file->MD5Hash = hash;
+ APT_IGNORE_DEPRECATED_POP
+ }
+ // an error here indicates that we have two different hashes for the same file
+ if (file->Hashes.push_back(hashString) == false)
+ return _error->Error("Error parsing checksum in %s of source package %s", checksumField.c_str(), Package().c_str());
+ continue;
+ }
+
+ // we haven't seen this file yet
+ pkgSrcRecords::File2 F;
+ F.Path = path;
+ F.FileSize = strtoull(size.c_str(), NULL, 10);
+ F.Hashes.push_back(hashString);
+ F.Hashes.FileSize(F.FileSize);
+
+ APT_IGNORE_DEPRECATED_PUSH
+ F.Size = F.FileSize;
+ if (checksumField == "Files")
+ F.MD5Hash = hash;
+ APT_IGNORE_DEPRECATED_POP
+
+ // Try to guess what sort of file it is we are getting.
+ string::size_type Pos = F.Path.length()-1;
+ while (1)
+ {
+ string::size_type Tmp = F.Path.rfind('.',Pos);
+ if (Tmp == string::npos)
+ break;
+ if (F.Type == "tar") {
+ // source v3 has extension 'debian.tar.*' instead of 'diff.*'
+ if (string(F.Path, Tmp+1, Pos-Tmp) == "debian")
+ F.Type = "diff";
+ break;
+ }
+ F.Type = string(F.Path,Tmp+1,Pos-Tmp);
+
+ if (std::find(compExts.begin(), compExts.end(), std::string(".").append(F.Type)) != compExts.end() ||
+ F.Type == "tar")
+ {
+ Pos = Tmp-1;
+ continue;
+ }
+
+ break;
+ }
+ List.push_back(F);
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// SrcRecordParser::~SrcRecordParser - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+debSrcRecordParser::~debSrcRecordParser()
+{
+ // was allocated via strndup()
+ free(Buffer);
+}
+ /*}}}*/
+
+
+debDscRecordParser::debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index)
+ : debSrcRecordParser("", Index)
+{
+ // support clear signed files
+ if (OpenMaybeClearSignedFile(DscFile, Fd) == false)
+ {
+ _error->Error("Failed to open %s", DscFile.c_str());
+ return;
+ }
+
+ // re-init to ensure the updated Fd is used
+ Tags.Init(&Fd, pkgTagFile::SUPPORT_COMMENTS);
+ // read the first (and only) record
+ Step();
+
+}
diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h
new file mode 100644
index 0000000..45617f6
--- /dev/null
+++ b/apt-pkg/deb/debsrcrecords.h
@@ -0,0 +1,68 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Source Package Records - Parser implementation for Debian style
+ source indexes
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBSRCRECORDS_H
+#define PKGLIB_DEBSRCRECORDS_H
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/tagfile.h>
+
+#include <string>
+#include <vector>
+#include <stddef.h>
+
+class pkgIndexFile;
+
+class APT_HIDDEN debSrcRecordParser : public pkgSrcRecords::Parser
+{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ protected:
+ FileFd Fd;
+ pkgTagFile Tags;
+ pkgTagSection Sect;
+ std::vector<const char*> StaticBinList;
+ unsigned long iOffset;
+ char *Buffer;
+
+ public:
+
+ virtual bool Restart() APT_OVERRIDE {return Jump(0);};
+ virtual bool Step() APT_OVERRIDE {iOffset = Tags.Offset(); return Tags.Step(Sect);};
+ virtual bool Jump(unsigned long const &Off) APT_OVERRIDE {iOffset = Off; return Tags.Jump(Sect,Off);};
+
+ virtual std::string Package() const APT_OVERRIDE;
+ virtual std::string Version() const APT_OVERRIDE {return Sect.FindS("Version");};
+ virtual std::string Maintainer() const APT_OVERRIDE {return Sect.FindS("Maintainer");};
+ virtual std::string Section() const APT_OVERRIDE {return Sect.FindS("Section");};
+ virtual const char **Binaries() APT_OVERRIDE;
+ virtual bool BuildDepends(std::vector<BuildDepRec> &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true) APT_OVERRIDE;
+ virtual unsigned long Offset() APT_OVERRIDE {return iOffset;};
+ virtual std::string AsStr() APT_OVERRIDE
+ {
+ const char *Start=0,*Stop=0;
+ Sect.GetSection(Start,Stop);
+ return std::string(Start,Stop);
+ };
+ virtual bool Files(std::vector<pkgSrcRecords::File> &F) APT_OVERRIDE;
+ bool Files2(std::vector<pkgSrcRecords::File2> &F);
+
+ debSrcRecordParser(std::string const &File,pkgIndexFile const *Index);
+ virtual ~debSrcRecordParser();
+};
+
+class APT_HIDDEN debDscRecordParser : public debSrcRecordParser
+{
+ public:
+ debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index);
+};
+
+#endif
diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc
new file mode 100644
index 0000000..0c7e9ff
--- /dev/null
+++ b/apt-pkg/deb/debsystem.cc
@@ -0,0 +1,485 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ System - Abstraction for running on different systems.
+
+ Basic general structure..
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debindexfile.h>
+#include <apt-pkg/debsystem.h>
+#include <apt-pkg/debversion.h>
+#include <apt-pkg/dpkgpm.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <algorithm>
+
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using std::string;
+
+debSystem debSys;
+
+class APT_HIDDEN debSystemPrivate {
+public:
+ debSystemPrivate() : FrontendLockFD(-1), LockFD(-1), LockCount(0), StatusFile(0)
+ {
+ }
+ // For locking support
+ int FrontendLockFD;
+ int LockFD;
+ unsigned LockCount;
+
+ debStatusIndex *StatusFile;
+};
+
+// System::debSystem - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+debSystem::debSystem() : pkgSystem("Debian dpkg interface", &debVS), d(new debSystemPrivate())
+{
+}
+ /*}}}*/
+// System::~debSystem - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+debSystem::~debSystem()
+{
+ delete d->StatusFile;
+ delete d;
+}
+ /*}}}*/
+// System::Lock - Get the lock /*{{{*/
+// ---------------------------------------------------------------------
+/* This mirrors the operations dpkg does when it starts up. Note the
+ checking of the updates directory. */
+bool debSystem::Lock()
+{
+ // Disable file locking
+ if (_config->FindB("Debug::NoLocking",false) == true || d->LockCount > 0)
+ {
+ d->LockCount++;
+ return true;
+ }
+
+ // Create the lockfile
+ string AdminDir = flNotFile(_config->FindFile("Dir::State::status"));
+ string FrontendLockFile = AdminDir + "lock-frontend";
+ d->FrontendLockFD = GetLock(FrontendLockFile);
+ if (d->FrontendLockFD == -1)
+ {
+ if (errno == EACCES || errno == EAGAIN)
+ return _error->Error(_("Unable to acquire the dpkg frontend lock (%s), "
+ "is another process using it?"),FrontendLockFile.c_str());
+ else
+ return _error->Error(_("Unable to acquire the dpkg frontend lock (%s), "
+ "are you root?"),FrontendLockFile.c_str());
+ }
+ if (LockInner() == false)
+ {
+ close(d->FrontendLockFD);
+ return false;
+ }
+
+ // See if we need to abort with a dirty journal
+ if (CheckUpdates() == true)
+ {
+ close(d->LockFD);
+ close(d->FrontendLockFD);
+ d->FrontendLockFD = -1;
+ d->LockFD = -1;
+ const char *cmd;
+ if (getenv("SUDO_USER") != NULL)
+ cmd = "sudo dpkg --configure -a";
+ else
+ cmd = "dpkg --configure -a";
+ // TRANSLATORS: the %s contains the recovery command, usually
+ // dpkg --configure -a
+ return _error->Error(_("dpkg was interrupted, you must manually "
+ "run '%s' to correct the problem. "), cmd);
+ }
+
+ d->LockCount++;
+
+ return true;
+}
+
+bool debSystem::LockInner() {
+ string AdminDir = flNotFile(_config->FindFile("Dir::State::status"));
+ d->LockFD = GetLock(AdminDir + "lock");
+ if (d->LockFD == -1)
+ {
+ if (errno == EACCES || errno == EAGAIN)
+ return _error->Error(_("Unable to lock the administration directory (%s), "
+ "is another process using it?"),AdminDir.c_str());
+ else
+ return _error->Error(_("Unable to lock the administration directory (%s), "
+ "are you root?"),AdminDir.c_str());
+ }
+ return true;
+}
+ /*}}}*/
+// System::UnLock - Drop a lock /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debSystem::UnLock(bool NoErrors)
+{
+ if (d->LockCount == 0 && NoErrors == true)
+ return false;
+
+ if (d->LockCount < 1)
+ return _error->Error(_("Not locked"));
+ if (--d->LockCount == 0)
+ {
+ close(d->LockFD);
+ close(d->FrontendLockFD);
+ d->LockCount = 0;
+ }
+
+ return true;
+}
+bool debSystem::UnLockInner(bool NoErrors) {
+ (void) NoErrors;
+ close(d->LockFD);
+ return true;
+}
+ /*}}}*/
+// System::IsLocked - Check if system is locked /*{{{*/
+// ---------------------------------------------------------------------
+/* This checks if the frontend lock is hold. The inner lock might be
+ * released. */
+bool debSystem::IsLocked()
+{
+ return d->LockCount > 0;
+}
+ /*}}}*/
+// System::CheckUpdates - Check if the updates dir is dirty /*{{{*/
+// ---------------------------------------------------------------------
+/* This does a check of the updates directory (dpkg journal) to see if it has
+ any entries in it. */
+bool debSystem::CheckUpdates()
+{
+ // Check for updates.. (dirty)
+ string File = flNotFile(_config->FindFile("Dir::State::status")) + "updates/";
+ DIR *DirP = opendir(File.c_str());
+ if (DirP == 0)
+ return false;
+
+ /* We ignore any files that are not all digits, this skips .,.. and
+ some tmp files dpkg will leave behind.. */
+ bool Damaged = false;
+ for (struct dirent *Ent = readdir(DirP); Ent != 0; Ent = readdir(DirP))
+ {
+ Damaged = true;
+ for (unsigned int I = 0; Ent->d_name[I] != 0; I++)
+ {
+ // Check if its not a digit..
+ if (isdigit(Ent->d_name[I]) == 0)
+ {
+ Damaged = false;
+ break;
+ }
+ }
+ if (Damaged == true)
+ break;
+ }
+ closedir(DirP);
+
+ return Damaged;
+}
+ /*}}}*/
+// System::CreatePM - Create the underlying package manager /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgPackageManager *debSystem::CreatePM(pkgDepCache *Cache) const
+{
+ return new pkgDPkgPM(Cache);
+}
+ /*}}}*/
+// System::Initialize - Setup the configuration space.. /*{{{*/
+// ---------------------------------------------------------------------
+/* These are the Debian specific configuration variables.. */
+static std::string getDpkgStatusLocation(Configuration const &Cnf) {
+ Configuration PathCnf;
+ PathCnf.Set("Dir", Cnf.Find("Dir", "/"));
+ PathCnf.Set("Dir::State::status", "status");
+ auto const cnfstatedir = Cnf.Find("Dir::State", STATE_DIR + 1);
+ // if the state dir ends in apt, replace it with dpkg -
+ // for the default this gives us the same as the fallback below.
+ // This can't be a ../dpkg as that would play bad with symlinks
+ std::string statedir;
+ if (APT::String::Endswith(cnfstatedir, "/apt/"))
+ statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 5);
+ else if (APT::String::Endswith(cnfstatedir, "/apt"))
+ statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 4);
+ if (statedir.empty())
+ PathCnf.Set("Dir::State", "var/lib/dpkg");
+ else
+ PathCnf.Set("Dir::State", flCombine(statedir, "dpkg"));
+ return PathCnf.FindFile("Dir::State::status");
+}
+bool debSystem::Initialize(Configuration &Cnf)
+{
+ /* These really should be jammed into a generic 'Local Database' engine
+ which is yet to be determined. The functions in pkgcachegen should
+ be the only users of these */
+ Cnf.CndSet("Dir::State::extended_states", "extended_states");
+ if (Cnf.Exists("Dir::State::status") == false)
+ Cnf.Set("Dir::State::status", getDpkgStatusLocation(Cnf));
+ Cnf.CndSet("Dir::Bin::dpkg",BIN_DIR"/dpkg");
+
+ if (d->StatusFile) {
+ delete d->StatusFile;
+ d->StatusFile = 0;
+ }
+
+ return true;
+}
+ /*}}}*/
+// System::ArchiveSupported - Is a file format supported /*{{{*/
+// ---------------------------------------------------------------------
+/* The standard name for a deb is 'deb'.. There are no separate versions
+ of .deb to worry about.. */
+APT_PURE bool debSystem::ArchiveSupported(const char *Type)
+{
+ if (strcmp(Type,"deb") == 0)
+ return true;
+ return false;
+}
+ /*}}}*/
+// System::Score - Determine how 'Debiany' this sys is.. /*{{{*/
+// ---------------------------------------------------------------------
+/* We check some files that are sure tell signs of this being a Debian
+ System.. */
+signed debSystem::Score(Configuration const &Cnf)
+{
+ signed Score = 0;
+ if (FileExists(Cnf.FindFile("Dir::State::status",getDpkgStatusLocation(Cnf).c_str())) == true)
+ Score += 10;
+ if (FileExists(Cnf.Find("Dir::Bin::dpkg",BIN_DIR"/dpkg")) == true)
+ Score += 10;
+ if (FileExists("/etc/debian_version") == true)
+ Score += 10;
+ return Score;
+}
+ /*}}}*/
+// System::AddStatusFiles - Register the status files /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debSystem::AddStatusFiles(std::vector<pkgIndexFile *> &List)
+{
+ if (d->StatusFile == 0)
+ d->StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
+ List.push_back(d->StatusFile);
+ return true;
+}
+ /*}}}*/
+// System::FindIndex - Get an index file for status files /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debSystem::FindIndex(pkgCache::PkgFileIterator File,
+ pkgIndexFile *&Found) const
+{
+ if (d->StatusFile == 0)
+ return false;
+ if (d->StatusFile->FindInCache(*File.Cache()) == File)
+ {
+ Found = d->StatusFile;
+ return true;
+ }
+
+ return false;
+}
+ /*}}}*/
+
+std::string debSystem::GetDpkgExecutable() /*{{{*/
+{
+ string Tmp = _config->Find("Dir::Bin::dpkg","dpkg");
+ string const dpkgChrootDir = _config->FindDir("DPkg::Chroot-Directory", "/");
+ size_t dpkgChrootLen = dpkgChrootDir.length();
+ if (dpkgChrootDir != "/" && Tmp.find(dpkgChrootDir) == 0)
+ {
+ if (dpkgChrootDir[dpkgChrootLen - 1] == '/')
+ --dpkgChrootLen;
+ Tmp = Tmp.substr(dpkgChrootLen);
+ }
+ return Tmp;
+}
+ /*}}}*/
+std::vector<std::string> debSystem::GetDpkgBaseCommand() /*{{{*/
+{
+ // Generate the base argument list for dpkg
+ std::vector<std::string> Args = { GetDpkgExecutable() };
+ // Stick in any custom dpkg options
+ Configuration::Item const *Opts = _config->Tree("DPkg::Options");
+ if (Opts != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ Args.push_back(Opts->Value);
+ }
+ }
+ return Args;
+}
+ /*}}}*/
+void debSystem::DpkgChrootDirectory() /*{{{*/
+{
+ std::string const chrootDir = _config->FindDir("DPkg::Chroot-Directory");
+ if (chrootDir == "/")
+ return;
+ std::cerr << "Chrooting into " << chrootDir << std::endl;
+ if (chroot(chrootDir.c_str()) != 0)
+ _exit(100);
+ if (chdir("/") != 0)
+ _exit(100);
+}
+ /*}}}*/
+pid_t debSystem::ExecDpkg(std::vector<std::string> const &sArgs, int * const inputFd, int * const outputFd, bool const DiscardOutput)/*{{{*/
+{
+ std::vector<const char *> Args(sArgs.size(), NULL);
+ std::transform(sArgs.begin(), sArgs.end(), Args.begin(), [](std::string const &s) { return s.c_str(); });
+ Args.push_back(NULL);
+
+ int external[2] = {-1, -1};
+ if (inputFd != nullptr || outputFd != nullptr)
+ if (pipe(external) != 0)
+ {
+ _error->WarningE("dpkg", "Can't create IPC pipe for dpkg call");
+ return -1;
+ }
+
+ pid_t const dpkg = ExecFork();
+ if (dpkg == 0) {
+ int const nullfd = open("/dev/null", O_RDONLY);
+ if (inputFd == nullptr)
+ dup2(nullfd, STDIN_FILENO);
+ else
+ {
+ close(external[1]);
+ dup2(external[0], STDIN_FILENO);
+ }
+ if (outputFd == nullptr)
+ dup2(nullfd, STDOUT_FILENO);
+ else
+ {
+ close(external[0]);
+ dup2(external[1], STDOUT_FILENO);
+ }
+ if (DiscardOutput == true)
+ dup2(nullfd, STDERR_FILENO);
+ debSystem::DpkgChrootDirectory();
+
+ if (_system != nullptr && _system->IsLocked() == true)
+ {
+ setenv("DPKG_FRONTEND_LOCKED", "true", 1);
+ }
+
+ if (_config->Find("DPkg::Path", "").empty() == false)
+ setenv("PATH", _config->Find("DPkg::Path", "").c_str(), 1);
+
+ execvp(Args[0], (char**) &Args[0]);
+ _error->WarningE("dpkg", "Can't execute dpkg!");
+ _exit(100);
+ }
+ if (outputFd != nullptr)
+ {
+ close(external[1]);
+ *outputFd = external[0];
+ }
+ else if (inputFd != nullptr)
+ {
+ close(external[0]);
+ *inputFd = external[1];
+ }
+ return dpkg;
+}
+ /*}}}*/
+bool debSystem::SupportsMultiArch() /*{{{*/
+{
+ std::vector<std::string> Args = GetDpkgBaseCommand();
+ Args.push_back("--assert-multi-arch");
+ pid_t const dpkgAssertMultiArch = ExecDpkg(Args, nullptr, nullptr, true);
+ if (dpkgAssertMultiArch > 0)
+ {
+ int Status = 0;
+ while (waitpid(dpkgAssertMultiArch, &Status, 0) != dpkgAssertMultiArch)
+ {
+ if (errno == EINTR)
+ continue;
+ _error->WarningE("dpkgGo", _("Waited for %s but it wasn't there"), "dpkg --assert-multi-arch");
+ break;
+ }
+ if (WIFEXITED(Status) == true && WEXITSTATUS(Status) == 0)
+ return true;
+ }
+ return false;
+}
+ /*}}}*/
+std::vector<std::string> debSystem::SupportedArchitectures() /*{{{*/
+{
+ std::vector<std::string> archs;
+ {
+ string const arch = _config->Find("APT::Architecture");
+ if (arch.empty() == false)
+ archs.push_back(std::move(arch));
+ }
+
+ std::vector<std::string> sArgs = GetDpkgBaseCommand();
+ sArgs.push_back("--print-foreign-architectures");
+ int outputFd = -1;
+ pid_t const dpkgMultiArch = ExecDpkg(sArgs, nullptr, &outputFd, true);
+ if (dpkgMultiArch == -1)
+ return archs;
+
+ FILE *dpkg = fdopen(outputFd, "r");
+ if(dpkg != NULL) {
+ char* buf = NULL;
+ size_t bufsize = 0;
+ while (getline(&buf, &bufsize, dpkg) != -1)
+ {
+ char* tok_saveptr;
+ char* arch = strtok_r(buf, " ", &tok_saveptr);
+ while (arch != NULL) {
+ for (; isspace_ascii(*arch) != 0; ++arch);
+ if (arch[0] != '\0') {
+ char const* archend = arch;
+ for (; isspace_ascii(*archend) == 0 && *archend != '\0'; ++archend);
+ string a(arch, (archend - arch));
+ if (std::find(archs.begin(), archs.end(), a) == archs.end())
+ archs.push_back(a);
+ }
+ arch = strtok_r(NULL, " ", &tok_saveptr);
+ }
+ }
+ free(buf);
+ fclose(dpkg);
+ }
+ ExecWait(dpkgMultiArch, "dpkg --print-foreign-architectures", true);
+ return archs;
+}
+ /*}}}*/
diff --git a/apt-pkg/deb/debsystem.h b/apt-pkg/deb/debsystem.h
new file mode 100644
index 0000000..4503676
--- /dev/null
+++ b/apt-pkg/deb/debsystem.h
@@ -0,0 +1,61 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ System - Debian version of the System Class
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBSYSTEM_H
+#define PKGLIB_DEBSYSTEM_H
+
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgsystem.h>
+
+#include <vector>
+class Configuration;
+class pkgIndexFile;
+class pkgPackageManager;
+class debSystemPrivate;
+class pkgDepCache;
+
+#ifndef APT_10_CLEANER_HEADERS
+class debStatusIndex;
+#endif
+
+class debSystem : public pkgSystem
+{
+ // private d-pointer
+ debSystemPrivate * const d;
+ APT_HIDDEN bool CheckUpdates();
+
+ public:
+
+ virtual bool Lock() APT_OVERRIDE;
+ virtual bool UnLock(bool NoErrors = false) APT_OVERRIDE;
+ virtual pkgPackageManager *CreatePM(pkgDepCache *Cache) const APT_OVERRIDE;
+ virtual bool Initialize(Configuration &Cnf) APT_OVERRIDE;
+ virtual bool ArchiveSupported(const char *Type) APT_OVERRIDE;
+ virtual signed Score(Configuration const &Cnf) APT_OVERRIDE;
+ virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List) APT_OVERRIDE;
+ virtual bool FindIndex(pkgCache::PkgFileIterator File,
+ pkgIndexFile *&Found) const APT_OVERRIDE;
+
+ debSystem();
+ virtual ~debSystem();
+
+ APT_HIDDEN static std::string GetDpkgExecutable();
+ APT_HIDDEN static std::vector<std::string> GetDpkgBaseCommand();
+ APT_HIDDEN static void DpkgChrootDirectory();
+ APT_HIDDEN static pid_t ExecDpkg(std::vector<std::string> const &sArgs, int * const inputFd, int * const outputFd, bool const DiscardOutput);
+ APT_HIDDEN static bool SupportsMultiArch();
+ APT_HIDDEN static std::vector<std::string> SupportedArchitectures();
+
+ APT_HIDDEN bool LockInner();
+ APT_HIDDEN bool UnLockInner(bool NoErrors=false);
+ APT_HIDDEN bool IsLocked();
+};
+
+extern debSystem debSys;
+
+#endif
diff --git a/apt-pkg/deb/debversion.cc b/apt-pkg/deb/debversion.cc
new file mode 100644
index 0000000..d2ebd28
--- /dev/null
+++ b/apt-pkg/deb/debversion.cc
@@ -0,0 +1,279 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Version - Versioning system for Debian
+
+ This implements the standard Debian versioning system.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/debversion.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+ /*}}}*/
+
+debVersioningSystem debVS;
+
+// debVS::debVersioningSystem - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+debVersioningSystem::debVersioningSystem()
+{
+ Label = "Standard .deb";
+}
+ /*}}}*/
+
+// debVS::CmpFragment - Compare versions /*{{{*/
+// ---------------------------------------------------------------------
+/* This compares a fragment of the version. This is a slightly adapted
+ version of what dpkg uses in dpkg/lib/dpkg/version.c.
+ In particular, the a | b = NULL check is removed as we check this in the
+ caller, we use an explicit end for a | b strings and we check ~ explicit. */
+static int order(char c)
+{
+ if (isdigit(c))
+ return 0;
+ else if (isalpha(c))
+ return c;
+ else if (c == '~')
+ return -1;
+ else if (c)
+ return c + 256;
+ else
+ return 0;
+}
+int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
+ const char *B,const char *BEnd)
+{
+ /* Iterate over the whole string
+ What this does is to split the whole string into groups of
+ numeric and non numeric portions. For instance:
+ a67bhgs89
+ Has 4 portions 'a', '67', 'bhgs', '89'. A more normal:
+ 2.7.2-linux-1
+ Has '2', '.', '7', '.' ,'-linux-','1' */
+ const char *lhs = A;
+ const char *rhs = B;
+ while (lhs != AEnd && rhs != BEnd)
+ {
+ int first_diff = 0;
+
+ while (lhs != AEnd && rhs != BEnd &&
+ (!isdigit(*lhs) || !isdigit(*rhs)))
+ {
+ int vc = order(*lhs);
+ int rc = order(*rhs);
+ if (vc != rc)
+ return vc - rc;
+ ++lhs; ++rhs;
+ }
+
+ while (*lhs == '0')
+ ++lhs;
+ while (*rhs == '0')
+ ++rhs;
+ while (isdigit(*lhs) && isdigit(*rhs))
+ {
+ if (!first_diff)
+ first_diff = *lhs - *rhs;
+ ++lhs;
+ ++rhs;
+ }
+
+ if (isdigit(*lhs))
+ return 1;
+ if (isdigit(*rhs))
+ return -1;
+ if (first_diff)
+ return first_diff;
+ }
+
+ // The strings must be equal
+ if (lhs == AEnd && rhs == BEnd)
+ return 0;
+
+ // lhs is shorter
+ if (lhs == AEnd)
+ {
+ if (*rhs == '~') return 1;
+ return -1;
+ }
+
+ // rhs is shorter
+ if (rhs == BEnd)
+ {
+ if (*lhs == '~') return -1;
+ return 1;
+ }
+
+ // Shouldn't happen
+ return 1;
+}
+ /*}}}*/
+// debVS::CmpVersion - Comparison for versions /*{{{*/
+// ---------------------------------------------------------------------
+/* This fragments the version into E:V-R triples and compares each
+ portion separately. */
+int debVersioningSystem::DoCmpVersion(const char *A,const char *AEnd,
+ const char *B,const char *BEnd)
+{
+ // Strip off the epoch and compare it
+ const char *lhs = (const char*) memchr(A, ':', AEnd - A);
+ const char *rhs = (const char*) memchr(B, ':', BEnd - B);
+ if (lhs == NULL)
+ lhs = A;
+ if (rhs == NULL)
+ rhs = B;
+
+ // Special case: a zero epoch is the same as no epoch,
+ // so remove it.
+ if (lhs != A)
+ {
+ for (; *A == '0'; ++A);
+ if (A == lhs)
+ {
+ ++A;
+ ++lhs;
+ }
+ }
+ if (rhs != B)
+ {
+ for (; *B == '0'; ++B);
+ if (B == rhs)
+ {
+ ++B;
+ ++rhs;
+ }
+ }
+
+ // Compare the epoch
+ int Res = CmpFragment(A,lhs,B,rhs);
+ if (Res != 0)
+ return Res;
+
+ // Skip the :
+ if (lhs != A)
+ lhs++;
+ if (rhs != B)
+ rhs++;
+
+ // Find the last -
+ const char *dlhs = (const char*) memrchr(lhs, '-', AEnd - lhs);
+ const char *drhs = (const char*) memrchr(rhs, '-', BEnd - rhs);
+ if (dlhs == NULL)
+ dlhs = AEnd;
+ if (drhs == NULL)
+ drhs = BEnd;
+
+ // Compare the main version
+ Res = CmpFragment(lhs,dlhs,rhs,drhs);
+ if (Res != 0)
+ return Res;
+
+ // Skip the -
+ if (dlhs != lhs)
+ dlhs++;
+ if (drhs != rhs)
+ drhs++;
+
+ // no debian revision need to be treated like -0
+ if (*(dlhs-1) == '-' && *(drhs-1) == '-')
+ return CmpFragment(dlhs,AEnd,drhs,BEnd);
+ else if (*(dlhs-1) == '-')
+ {
+ const char* null = "0";
+ return CmpFragment(dlhs,AEnd,null, null+1);
+ }
+ else if (*(drhs-1) == '-')
+ {
+ const char* null = "0";
+ return CmpFragment(null, null+1, drhs, BEnd);
+ }
+ else
+ return 0;
+}
+ /*}}}*/
+// debVS::CheckDep - Check a single dependency /*{{{*/
+// ---------------------------------------------------------------------
+/* This simply performs the version comparison and switch based on
+ operator. If DepVer is 0 then we are comparing against a provides
+ with no version. */
+bool debVersioningSystem::CheckDep(const char *PkgVer,
+ int Op,const char *DepVer)
+{
+ if (DepVer == 0 || DepVer[0] == 0)
+ return true;
+ if (PkgVer == 0 || PkgVer[0] == 0)
+ return false;
+ Op &= 0x0F;
+
+ // fast track for (equal) strings [by location] which are by definition equal versions
+ if (PkgVer == DepVer)
+ return Op == pkgCache::Dep::Equals || Op == pkgCache::Dep::LessEq || Op == pkgCache::Dep::GreaterEq;
+
+ // Perform the actual comparison.
+ int const Res = CmpVersion(PkgVer, DepVer);
+ switch (Op)
+ {
+ case pkgCache::Dep::LessEq:
+ if (Res <= 0)
+ return true;
+ break;
+
+ case pkgCache::Dep::GreaterEq:
+ if (Res >= 0)
+ return true;
+ break;
+
+ case pkgCache::Dep::Less:
+ if (Res < 0)
+ return true;
+ break;
+
+ case pkgCache::Dep::Greater:
+ if (Res > 0)
+ return true;
+ break;
+
+ case pkgCache::Dep::Equals:
+ if (Res == 0)
+ return true;
+ break;
+
+ case pkgCache::Dep::NotEquals:
+ if (Res != 0)
+ return true;
+ break;
+ }
+
+ return false;
+}
+ /*}}}*/
+// debVS::UpstreamVersion - Return the upstream version string /*{{{*/
+// ---------------------------------------------------------------------
+/* This strips all the debian specific information from the version number */
+std::string debVersioningSystem::UpstreamVersion(const char *Ver)
+{
+ // Strip off the bit before the first colon
+ const char *I = Ver;
+ for (; *I != 0 && *I != ':'; I++);
+ if (*I == ':')
+ Ver = I + 1;
+
+ // Chop off the trailing -
+ I = Ver;
+ unsigned Last = strlen(Ver);
+ for (; *I != 0; I++)
+ if (*I == '-')
+ Last = I - Ver;
+
+ return std::string(Ver,Last);
+}
+ /*}}}*/
diff --git a/apt-pkg/deb/debversion.h b/apt-pkg/deb/debversion.h
new file mode 100644
index 0000000..db70c87
--- /dev/null
+++ b/apt-pkg/deb/debversion.h
@@ -0,0 +1,41 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Debian Version - Versioning system for Debian
+
+ This implements the standard Debian versioning system.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBVERSION_H
+#define PKGLIB_DEBVERSION_H
+
+#include <apt-pkg/version.h>
+
+#include <string>
+
+class debVersioningSystem : public pkgVersioningSystem
+{
+ public:
+
+ static int CmpFragment(const char *A, const char *AEnd, const char *B,
+ const char *BEnd) APT_PURE;
+
+ // Compare versions..
+ virtual int DoCmpVersion(const char *A,const char *Aend,
+ const char *B,const char *Bend) APT_OVERRIDE APT_PURE;
+ virtual bool CheckDep(const char *PkgVer,int Op,const char *DepVer) APT_OVERRIDE APT_PURE;
+ virtual APT_PURE int DoCmpReleaseVer(const char *A,const char *Aend,
+ const char *B,const char *Bend) APT_OVERRIDE
+ {
+ return DoCmpVersion(A,Aend,B,Bend);
+ }
+ virtual std::string UpstreamVersion(const char *A) APT_OVERRIDE;
+
+ debVersioningSystem();
+};
+
+extern debVersioningSystem debVS;
+
+#endif
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
new file mode 100644
index 0000000..ffa880d
--- /dev/null
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -0,0 +1,2491 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ DPKG Package Manager - Provide an interface to dpkg
+
+ ##################################################################### */
+ /*}}}*/
+// Includes /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debsystem.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/dpkgpm.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/install-progress.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/statechanges.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/version.h>
+
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/select.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <termios.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <array>
+#include <cstring>
+#include <iostream>
+#include <map>
+#include <numeric>
+#include <set>
+#include <sstream>
+#include <string>
+#include <type_traits>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <apti18n.h>
+ /*}}}*/
+
+extern char **environ;
+
+using namespace std;
+
+APT_PURE static string AptHistoryRequestingUser() /*{{{*/
+{
+ const char* EnvKeys[]{"SUDO_UID", "PKEXEC_UID", "PACKAGEKIT_CALLER_UID"};
+
+ for (const auto &Key: EnvKeys)
+ {
+ if (getenv(Key) != nullptr)
+ {
+ int uid = atoi(getenv(Key));
+ if (uid > 0) {
+ struct passwd pwd;
+ struct passwd *result;
+ char buf[255];
+ if (getpwuid_r(uid, &pwd, buf, sizeof(buf), &result) == 0 && result != NULL) {
+ std::string res;
+ strprintf(res, "%s (%d)", pwd.pw_name, uid);
+ return res;
+ }
+ }
+ }
+ }
+ return "";
+}
+ /*}}}*/
+APT_PURE static unsigned int EnvironmentSize() /*{{{*/
+{
+ unsigned int size = 0;
+ char **envp = environ;
+
+ while (*envp != NULL)
+ size += strlen (*envp++) + 1;
+
+ return size;
+}
+ /*}}}*/
+class pkgDPkgPMPrivate /*{{{*/
+{
+public:
+ pkgDPkgPMPrivate() : stdin_is_dev_null(false), status_fd_reached_end_of_file(false),
+ dpkgbuf_pos(0), term_out(NULL), history_out(NULL),
+ progress(NULL), tt_is_valid(false), master(-1),
+ slave(NULL), protect_slave_from_dying(-1),
+ direct_stdin(false)
+ {
+ dpkgbuf[0] = '\0';
+ }
+ ~pkgDPkgPMPrivate()
+ {
+ }
+ bool stdin_is_dev_null;
+ bool status_fd_reached_end_of_file;
+ // the buffer we use for the dpkg status-fd reading
+ char dpkgbuf[1024];
+ size_t dpkgbuf_pos;
+ FILE *term_out;
+ FILE *history_out;
+ string dpkg_error;
+ APT::Progress::PackageManager *progress;
+
+ // pty stuff
+ struct termios tt;
+ bool tt_is_valid;
+ int master;
+ char * slave;
+ int protect_slave_from_dying;
+
+ // signals
+ sigset_t sigmask;
+ sigset_t original_sigmask;
+
+ bool direct_stdin;
+};
+ /*}}}*/
+namespace
+{
+ // Maps the dpkg "processing" info to human readable names. Entry 0
+ // of each array is the key, entry 1 is the value.
+ const std::pair<const char *, const char *> PackageProcessingOps[] = {
+ std::make_pair("install", N_("Preparing %s")),
+ // we don't care for the difference
+ std::make_pair("upgrade", N_("Preparing %s")),
+ std::make_pair("configure", N_("Preparing to configure %s")),
+ std::make_pair("remove", N_("Preparing for removal of %s")),
+ std::make_pair("purge", N_("Preparing to completely remove %s")),
+ std::make_pair("disappear", N_("Noting disappearance of %s")),
+ std::make_pair("trigproc", N_("Running post-installation trigger %s"))
+ };
+
+ const std::pair<const char *, const char *> * const PackageProcessingOpsBegin = PackageProcessingOps;
+ const std::pair<const char *, const char *> * const PackageProcessingOpsEnd = PackageProcessingOps + sizeof(PackageProcessingOps) / sizeof(PackageProcessingOps[0]);
+
+ // Predicate to test whether an entry in the PackageProcessingOps
+ // array matches a string.
+ class MatchProcessingOp
+ {
+ const char *target;
+
+ public:
+ explicit MatchProcessingOp(const char *the_target)
+ : target(the_target)
+ {
+ }
+
+ bool operator()(const std::pair<const char *, const char *> &pair) const
+ {
+ return strcmp(pair.first, target) == 0;
+ }
+ };
+}
+
+// ionice - helper function to ionice the given PID /*{{{*/
+/* there is no C header for ionice yet - just the syscall interface
+ so we use the binary from util-linux */
+static bool ionice(int PID)
+{
+ if (!FileExists("/usr/bin/ionice"))
+ return false;
+ pid_t Process = ExecFork();
+ if (Process == 0)
+ {
+ char buf[32];
+ snprintf(buf, sizeof(buf), "-p%d", PID);
+ const char *Args[4];
+ Args[0] = "/usr/bin/ionice";
+ Args[1] = "-c3";
+ Args[2] = buf;
+ Args[3] = 0;
+ execv(Args[0], (char **)Args);
+ }
+ return ExecWait(Process, "ionice");
+}
+ /*}}}*/
+// FindNowVersion - Helper to find a Version in "now" state /*{{{*/
+// ---------------------------------------------------------------------
+/* This is helpful when a package is no longer installed but has residual
+ * config files
+ */
+static
+pkgCache::VerIterator FindNowVersion(const pkgCache::PkgIterator &Pkg)
+{
+ pkgCache::VerIterator Ver;
+ for (Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
+ for (pkgCache::VerFileIterator Vf = Ver.FileList(); Vf.end() == false; ++Vf)
+ for (pkgCache::PkgFileIterator F = Vf.File(); F.end() == false; ++F)
+ {
+ if (F.Archive() != 0 && strcmp(F.Archive(), "now") == 0)
+ return Ver;
+ }
+ return Ver;
+}
+ /*}}}*/
+static pkgCache::VerIterator FindToBeRemovedVersion(pkgCache::PkgIterator const &Pkg)/*{{{*/
+{
+ auto const PV = Pkg.CurrentVer();
+ if (PV.end() == false)
+ return PV;
+ return FindNowVersion(Pkg);
+}
+ /*}}}*/
+
+// DPkgPM::pkgDPkgPM - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache)
+ : pkgPackageManager(Cache),d(new pkgDPkgPMPrivate()), pkgFailures(0), PackagesDone(0), PackagesTotal(0)
+{
+}
+ /*}}}*/
+// DPkgPM::pkgDPkgPM - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgDPkgPM::~pkgDPkgPM()
+{
+ delete d;
+}
+ /*}}}*/
+// DPkgPM::Install - Install a package /*{{{*/
+// ---------------------------------------------------------------------
+/* Add an install operation to the sequence list */
+bool pkgDPkgPM::Install(PkgIterator Pkg,string File)
+{
+ if (File.empty() == true || Pkg.end() == true)
+ return _error->Error("Internal Error, No file name for %s",Pkg.FullName().c_str());
+
+ // If the filename string begins with DPkg::Chroot-Directory, return the
+ // substr that is within the chroot so dpkg can access it.
+ string const chrootdir = _config->FindDir("DPkg::Chroot-Directory","/");
+ if (chrootdir != "/" && File.find(chrootdir) == 0)
+ {
+ size_t len = chrootdir.length();
+ if (chrootdir.at(len - 1) == '/')
+ len--;
+ List.push_back(Item(Item::Install,Pkg,File.substr(len)));
+ }
+ else
+ List.push_back(Item(Item::Install,Pkg,File));
+
+ return true;
+}
+ /*}}}*/
+// DPkgPM::Configure - Configure a package /*{{{*/
+// ---------------------------------------------------------------------
+/* Add a configure operation to the sequence list */
+bool pkgDPkgPM::Configure(PkgIterator Pkg)
+{
+ if (Pkg.end() == true)
+ return false;
+
+ List.push_back(Item(Item::Configure, Pkg));
+
+ // Use triggers for config calls if we configure "smart"
+ // as otherwise Pre-Depends will not be satisfied, see #526774
+ if (_config->FindB("DPkg::TriggersPending", false) == true)
+ List.push_back(Item(Item::TriggersPending, PkgIterator()));
+
+ return true;
+}
+ /*}}}*/
+// DPkgPM::Remove - Remove a package /*{{{*/
+// ---------------------------------------------------------------------
+/* Add a remove operation to the sequence list */
+bool pkgDPkgPM::Remove(PkgIterator Pkg,bool Purge)
+{
+ if (Pkg.end() == true)
+ return false;
+
+ if (Purge == true)
+ List.push_back(Item(Item::Purge,Pkg));
+ else
+ List.push_back(Item(Item::Remove,Pkg));
+ return true;
+}
+ /*}}}*/
+// DPkgPM::SendPkgInfo - Send info for install-pkgs hook /*{{{*/
+// ---------------------------------------------------------------------
+/* This is part of the helper script communication interface, it sends
+ very complete information down to the other end of the pipe.*/
+bool pkgDPkgPM::SendV2Pkgs(FILE *F)
+{
+ return SendPkgsInfo(F, 2);
+}
+bool pkgDPkgPM::SendPkgsInfo(FILE * const F, unsigned int const &Version)
+{
+ // This version of APT supports only v3, so don't sent higher versions
+ if (Version <= 3)
+ fprintf(F,"VERSION %u\n", Version);
+ else
+ fprintf(F,"VERSION 3\n");
+
+ /* Write out all of the configuration directives by walking the
+ configuration tree */
+ const Configuration::Item *Top = _config->Tree(0);
+ for (; Top != 0;)
+ {
+ if (Top->Value.empty() == false)
+ {
+ fprintf(F,"%s=%s\n",
+ QuoteString(Top->FullTag(),"=\"\n").c_str(),
+ QuoteString(Top->Value,"\n").c_str());
+ }
+
+ if (Top->Child != 0)
+ {
+ Top = Top->Child;
+ continue;
+ }
+
+ while (Top != 0 && Top->Next == 0)
+ Top = Top->Parent;
+ if (Top != 0)
+ Top = Top->Next;
+ }
+ fprintf(F,"\n");
+
+ // Write out the package actions in order.
+ for (vector<Item>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ if(I->Pkg.end() == true)
+ continue;
+
+ pkgDepCache::StateCache &S = Cache[I->Pkg];
+
+ fprintf(F,"%s ",I->Pkg.Name());
+
+ // Current version which we are going to replace
+ pkgCache::VerIterator CurVer = I->Pkg.CurrentVer();
+ if (CurVer.end() == true && (I->Op == Item::Remove || I->Op == Item::Purge))
+ CurVer = FindNowVersion(I->Pkg);
+
+ if (CurVer.end() == true)
+ {
+ if (Version <= 2)
+ fprintf(F, "- ");
+ else
+ fprintf(F, "- - none ");
+ }
+ else
+ {
+ fprintf(F, "%s ", CurVer.VerStr());
+ if (Version >= 3)
+ fprintf(F, "%s %s ", CurVer.Arch(), CurVer.MultiArchType());
+ }
+
+ // Show the compare operator between current and install version
+ if (S.InstallVer != 0)
+ {
+ pkgCache::VerIterator const InstVer = S.InstVerIter(Cache);
+ int Comp = 2;
+ if (CurVer.end() == false)
+ Comp = InstVer.CompareVer(CurVer);
+ if (Comp < 0)
+ fprintf(F,"> ");
+ else if (Comp == 0)
+ fprintf(F,"= ");
+ else if (Comp > 0)
+ fprintf(F,"< ");
+ fprintf(F, "%s ", InstVer.VerStr());
+ if (Version >= 3)
+ fprintf(F, "%s %s ", InstVer.Arch(), InstVer.MultiArchType());
+ }
+ else
+ {
+ if (Version <= 2)
+ fprintf(F, "> - ");
+ else
+ fprintf(F, "> - - none ");
+ }
+
+ // Show the filename/operation
+ if (I->Op == Item::Install)
+ {
+ // No errors here..
+ if (I->File[0] != '/')
+ fprintf(F,"**ERROR**\n");
+ else
+ fprintf(F,"%s\n",I->File.c_str());
+ }
+ else if (I->Op == Item::Configure)
+ fprintf(F,"**CONFIGURE**\n");
+ else if (I->Op == Item::Remove ||
+ I->Op == Item::Purge)
+ fprintf(F,"**REMOVE**\n");
+
+ if (ferror(F) != 0)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+// DPkgPM::RunScriptsWithPkgs - Run scripts with package names on stdin /*{{{*/
+// ---------------------------------------------------------------------
+/* This looks for a list of scripts to run from the configuration file
+ each one is run and is fed on standard input a list of all .deb files
+ that are due to be installed. */
+bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf)
+{
+ bool result = true;
+
+ Configuration::Item const *Opts = _config->Tree(Cnf);
+ if (Opts == 0 || Opts->Child == 0)
+ return true;
+ Opts = Opts->Child;
+
+ sighandler_t old_sigpipe = signal(SIGPIPE, SIG_IGN);
+ sighandler_t old_sigint = signal(SIGINT, SIG_IGN);
+ sighandler_t old_sigquit = signal(SIGQUIT, SIG_IGN);
+
+ unsigned int Count = 1;
+ for (; Opts != 0; Opts = Opts->Next, Count++)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+
+ if(_config->FindB("Debug::RunScripts", false) == true)
+ std::clog << "Running external script with list of all .deb file: '"
+ << Opts->Value << "'" << std::endl;
+
+ // Determine the protocol version
+ string OptSec = Opts->Value;
+ string::size_type Pos;
+ if ((Pos = OptSec.find(' ')) == string::npos || Pos == 0)
+ Pos = OptSec.length();
+ OptSec = "DPkg::Tools::Options::" + string(Opts->Value.c_str(),Pos);
+
+ unsigned int Version = _config->FindI(OptSec+"::Version",1);
+ unsigned int InfoFD = _config->FindI(OptSec + "::InfoFD", STDIN_FILENO);
+
+ // Create the pipes
+ std::set<int> KeepFDs;
+ MergeKeepFdsFromConfiguration(KeepFDs);
+ int Pipes[2];
+ if (pipe(Pipes) != 0) {
+ result = _error->Errno("pipe","Failed to create IPC pipe to subprocess");
+ break;
+ }
+ if (InfoFD != (unsigned)Pipes[0])
+ SetCloseExec(Pipes[0],true);
+ else
+ KeepFDs.insert(Pipes[0]);
+
+
+ SetCloseExec(Pipes[1],true);
+
+ // Purified Fork for running the script
+ pid_t Process = ExecFork(KeepFDs);
+ if (Process == 0)
+ {
+ // Setup the FDs
+ dup2(Pipes[0], InfoFD);
+ SetCloseExec(STDOUT_FILENO,false);
+ SetCloseExec(STDIN_FILENO,false);
+ SetCloseExec(STDERR_FILENO,false);
+
+ string hookfd;
+ strprintf(hookfd, "%d", InfoFD);
+ setenv("APT_HOOK_INFO_FD", hookfd.c_str(), 1);
+
+ if (_system != nullptr && _system->IsLocked() == true && stringcasecmp(Cnf, "DPkg::Pre-Install-Pkgs") == 0)
+ setenv("DPKG_FRONTEND_LOCKED", "true", 1);
+
+ debSystem::DpkgChrootDirectory();
+ const char *Args[4];
+ Args[0] = "/bin/sh";
+ Args[1] = "-c";
+ Args[2] = Opts->Value.c_str();
+ Args[3] = 0;
+ execv(Args[0],(char **)Args);
+ _exit(100);
+ }
+ close(Pipes[0]);
+ FILE *F = fdopen(Pipes[1],"w");
+ if (F == 0) {
+ result = _error->Errno("fdopen","Failed to open new FD");
+ break;
+ }
+
+ // Feed it the filenames.
+ if (Version <= 1)
+ {
+ for (vector<Item>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ // Only deal with packages to be installed from .deb
+ if (I->Op != Item::Install)
+ continue;
+
+ // No errors here..
+ if (I->File[0] != '/')
+ continue;
+
+ /* Feed the filename of each package that is pending install
+ into the pipe. */
+ fprintf(F,"%s\n",I->File.c_str());
+ if (ferror(F) != 0)
+ break;
+ }
+ }
+ else
+ SendPkgsInfo(F, Version);
+
+ fclose(F);
+
+ // Clean up the sub process
+ if (ExecWait(Process,Opts->Value.c_str()) == false) {
+ result = _error->Error("Failure running script %s",Opts->Value.c_str());
+ break;
+ }
+ }
+ signal(SIGINT, old_sigint);
+ signal(SIGPIPE, old_sigpipe);
+ signal(SIGQUIT, old_sigquit);
+
+ return result;
+}
+ /*}}}*/
+// DPkgPM::DoStdin - Read stdin and pass to master pty /*{{{*/
+// ---------------------------------------------------------------------
+/*
+*/
+void pkgDPkgPM::DoStdin(int master)
+{
+ unsigned char input_buf[256] = {0,};
+ ssize_t len = read(STDIN_FILENO, input_buf, sizeof(input_buf));
+ if (len)
+ FileFd::Write(master, input_buf, len);
+ else
+ d->stdin_is_dev_null = true;
+}
+ /*}}}*/
+// DPkgPM::DoTerminalPty - Read the terminal pty and write log /*{{{*/
+// ---------------------------------------------------------------------
+/*
+ * read the terminal pty and write log
+ */
+void pkgDPkgPM::DoTerminalPty(int master)
+{
+ unsigned char term_buf[1024] = {0,0, };
+
+ ssize_t len=read(master, term_buf, sizeof(term_buf));
+ if(len == -1 && errno == EIO)
+ {
+ // this happens when the child is about to exit, we
+ // give it time to actually exit, otherwise we run
+ // into a race so we sleep for half a second.
+ struct timespec sleepfor = { 0, 500000000 };
+ nanosleep(&sleepfor, NULL);
+ return;
+ }
+ if(len <= 0)
+ return;
+ FileFd::Write(1, term_buf, len);
+ if(d->term_out)
+ fwrite(term_buf, len, sizeof(char), d->term_out);
+}
+ /*}}}*/
+// DPkgPM::ProcessDpkgStatusBuf /*{{{*/
+void pkgDPkgPM::ProcessDpkgStatusLine(char *line)
+{
+ bool const Debug = _config->FindB("Debug::pkgDPkgProgressReporting",false);
+ if (Debug == true)
+ std::clog << "got from dpkg '" << line << "'" << std::endl;
+
+ /* dpkg sends strings like this:
+ 'status: <pkg>: <pkg qstate>'
+ 'status: <pkg>:<arch>: <pkg qstate>'
+
+ 'processing: {install,upgrade,configure,remove,purge,disappear,trigproc}: pkg'
+ 'processing: {install,upgrade,configure,remove,purge,disappear,trigproc}: trigger'
+ */
+
+ // we need to split on ": " (note the appended space) as the ':' is
+ // part of the pkgname:arch information that dpkg sends
+ //
+ // A dpkg error message may contain additional ":" (like
+ // "failed in buffer_write(fd) (10, ret=-1): backend dpkg-deb ..."
+ // so we need to ensure to not split too much
+ std::vector<std::string> list = StringSplit(line, ": ", 4);
+ if(list.size() < 3)
+ {
+ if (Debug == true)
+ std::clog << "ignoring line: not enough ':'" << std::endl;
+ return;
+ }
+
+ // build the (prefix, pkgname, action) tuple, position of this
+ // is different for "processing" or "status" messages
+ std::string prefix = APT::String::Strip(list[0]);
+ std::string pkgname;
+ std::string action;
+
+ // "processing" has the form "processing: action: pkg or trigger"
+ // with action = ["install", "upgrade", "configure", "remove", "purge",
+ // "disappear", "trigproc"]
+ if (prefix == "processing")
+ {
+ pkgname = APT::String::Strip(list[2]);
+ action = APT::String::Strip(list[1]);
+ }
+ // "status" has the form: "status: pkg: state"
+ // with state in ["half-installed", "unpacked", "half-configured",
+ // "installed", "config-files", "not-installed"]
+ else if (prefix == "status")
+ {
+ pkgname = APT::String::Strip(list[1]);
+ action = APT::String::Strip(list[2]);
+
+ /* handle the special cases first:
+
+ errors look like this:
+ 'status: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : error : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data
+ and conffile-prompt like this
+ 'status:/etc/compiz.conf/compiz.conf : conffile-prompt: 'current-conffile' 'new-conffile' useredited distedited
+ */
+ if(action == "error")
+ {
+ d->progress->Error(pkgname, PackagesDone, PackagesTotal, list[3]);
+ ++pkgFailures;
+ WriteApportReport(pkgname.c_str(), list[3].c_str());
+ return;
+ }
+ else if(action == "conffile-prompt")
+ {
+ d->progress->ConffilePrompt(pkgname, PackagesDone, PackagesTotal, list[3]);
+ return;
+ }
+ } else {
+ if (Debug == true)
+ std::clog << "unknown prefix '" << prefix << "'" << std::endl;
+ return;
+ }
+
+ // At this point we have a pkgname, but it might not be arch-qualified !
+ if (pkgname.find(":") == std::string::npos)
+ {
+ pkgCache::GrpIterator const Grp = Cache.FindGrp(pkgname);
+ if (unlikely(Grp.end()== true))
+ {
+ if (Debug == true)
+ std::clog << "unable to figure out which package is dpkg referring to with '" << pkgname << "'! (0)" << std::endl;
+ return;
+ }
+ /* No arch means that dpkg believes there can only be one package
+ this can refer to so lets see what could be candidates here: */
+ std::vector<pkgCache::PkgIterator> candset;
+ for (auto P = Grp.PackageList(); P.end() != true; P = Grp.NextPkg(P))
+ {
+ if (PackageOps.find(P.FullName()) != PackageOps.end())
+ candset.push_back(P);
+ // packages can disappear without them having any interaction itself
+ // so we have to consider these as candidates, too
+ else if (P->CurrentVer != 0 && action == "disappear")
+ candset.push_back(P);
+ }
+ if (unlikely(candset.empty()))
+ {
+ if (Debug == true)
+ std::clog << "unable to figure out which package is dpkg referring to with '" << pkgname << "'! (1)" << std::endl;
+ return;
+ }
+ else if (candset.size() == 1) // we are lucky
+ pkgname = candset.cbegin()->FullName();
+ else
+ {
+ /* here be dragons^Wassumptions about dpkg:
+ - an M-A:same version is always arch-qualified
+ - a package from a foreign arch is (in newer versions) */
+ size_t installedInstances = 0, wannabeInstances = 0;
+ for (auto const &P: candset)
+ {
+ if (P->CurrentVer != 0)
+ {
+ ++installedInstances;
+ if (Cache[P].Delete() == false)
+ ++wannabeInstances;
+ }
+ else if (Cache[P].Install())
+ ++wannabeInstances;
+ }
+ // the package becomes M-A:same, so we are still talking about current
+ if (installedInstances == 1 && wannabeInstances >= 2)
+ {
+ for (auto const &P: candset)
+ {
+ if (P->CurrentVer == 0)
+ continue;
+ pkgname = P.FullName();
+ break;
+ }
+ }
+ // the package was M-A:same, it isn't now, so we can only talk about that
+ else if (installedInstances >= 2 && wannabeInstances == 1)
+ {
+ for (auto const &P: candset)
+ {
+ auto const IV = Cache[P].InstVerIter(Cache);
+ if (IV.end())
+ continue;
+ pkgname = P.FullName();
+ break;
+ }
+ }
+ // that is a crossgrade
+ else if (installedInstances == 1 && wannabeInstances == 1 && candset.size() == 2)
+ {
+ auto const PkgHasCurrentVersion = [](pkgCache::PkgIterator const &P) { return P->CurrentVer != 0; };
+ auto const P = std::find_if(candset.begin(), candset.end(), PkgHasCurrentVersion);
+ if (unlikely(P == candset.end()))
+ {
+ if (Debug == true)
+ std::clog << "situation for '" << pkgname << "' looked like a crossgrade, but no current version?!" << std::endl;
+ return;
+ }
+ auto fullname = P->FullName();
+ if (PackageOps[fullname].size() != PackageOpsDone[fullname])
+ pkgname = std::move(fullname);
+ else
+ {
+ auto const pkgi = std::find_if_not(candset.begin(), candset.end(), PkgHasCurrentVersion);
+ if (unlikely(pkgi == candset.end()))
+ {
+ if (Debug == true)
+ std::clog << "situation for '" << pkgname << "' looked like a crossgrade, but all are installed?!" << std::endl;
+ return;
+ }
+ pkgname = pkgi->FullName();
+ }
+ }
+ // we are desperate: so "just" take the native one, but that might change mid-air,
+ // so we have to ask dpkg what it believes native is at the moment… all the time
+ else
+ {
+ std::vector<std::string> sArgs = debSystem::GetDpkgBaseCommand();
+ sArgs.push_back("--print-architecture");
+ int outputFd = -1;
+ pid_t const dpkgNativeArch = debSystem::ExecDpkg(sArgs, nullptr, &outputFd, true);
+ if (unlikely(dpkgNativeArch == -1))
+ {
+ if (Debug == true)
+ std::clog << "calling dpkg failed to ask it for its current native architecture to expand '" << pkgname << "'!" << std::endl;
+ return;
+ }
+ FILE *dpkg = fdopen(outputFd, "r");
+ if(dpkg != NULL)
+ {
+ char* buf = NULL;
+ size_t bufsize = 0;
+ if (getline(&buf, &bufsize, dpkg) != -1)
+ pkgname += ':' + bufsize;
+ free(buf);
+ fclose(dpkg);
+ }
+ ExecWait(dpkgNativeArch, "dpkg --print-architecture", true);
+ if (pkgname.find(':') != std::string::npos)
+ {
+ if (Debug == true)
+ std::clog << "unable to figure out which package is dpkg referring to with '" << pkgname << "'! (2)" << std::endl;
+ return;
+ }
+ }
+ }
+ }
+
+ std::string arch = "";
+ if (pkgname.find(":") != string::npos)
+ arch = StringSplit(pkgname, ":")[1];
+ std::string i18n_pkgname = pkgname;
+ if (arch.size() != 0)
+ strprintf(i18n_pkgname, "%s (%s)", StringSplit(pkgname, ":")[0].c_str(), arch.c_str());
+
+ // 'processing' from dpkg looks like
+ // 'processing: action: pkg'
+ if(prefix == "processing")
+ {
+ auto const iter = std::find_if(PackageProcessingOpsBegin, PackageProcessingOpsEnd, MatchProcessingOp(action.c_str()));
+ if(iter == PackageProcessingOpsEnd)
+ {
+ if (Debug == true)
+ std::clog << "ignoring unknown action: " << action << std::endl;
+ return;
+ }
+ std::string msg;
+ strprintf(msg, _(iter->second), i18n_pkgname.c_str());
+ d->progress->StatusChanged(pkgname, PackagesDone, PackagesTotal, msg);
+
+ // FIXME: this needs a muliarch testcase
+ // FIXME2: is "pkgname" here reliable with dpkg only sending us
+ // short pkgnames?
+ if (action == "disappear")
+ handleDisappearAction(pkgname);
+ else if (action == "upgrade")
+ handleCrossUpgradeAction(pkgname);
+ return;
+ }
+
+ if (prefix == "status")
+ {
+ std::vector<struct DpkgState> &states = PackageOps[pkgname];
+ if(PackageOpsDone[pkgname] < states.size())
+ {
+ char const * next_action = states[PackageOpsDone[pkgname]].state;
+ if (next_action)
+ {
+ /*
+ if (action == "half-installed" && strcmp("half-configured", next_action) == 0 &&
+ PackageOpsDone[pkg] + 2 < states.size() && action == states[PackageOpsDone[pkg] + 2].state)
+ {
+ if (Debug == true)
+ std::clog << "(parsed from dpkg) pkg: " << short_pkgname << " action: " << action
+ << " pending trigger defused by unpack" << std::endl;
+ // unpacking a package defuses the pending trigger
+ PackageOpsDone[pkg] += 2;
+ PackagesDone += 2;
+ next_action = states[PackageOpsDone[pkg]].state;
+ }
+ */
+ if (Debug == true)
+ std::clog << "(parsed from dpkg) pkg: " << pkgname
+ << " action: " << action << " (expected: '" << next_action << "' "
+ << PackageOpsDone[pkgname] << " of " << states.size() << ")" << endl;
+
+ // check if the package moved to the next dpkg state
+ if(action == next_action)
+ {
+ // only read the translation if there is actually a next action
+ char const * const translation = _(states[PackageOpsDone[pkgname]].str);
+
+ // we moved from one dpkg state to a new one, report that
+ ++PackageOpsDone[pkgname];
+ ++PackagesDone;
+
+ std::string msg;
+ strprintf(msg, translation, i18n_pkgname.c_str());
+ d->progress->StatusChanged(pkgname, PackagesDone, PackagesTotal, msg);
+ }
+ }
+ }
+ else if (action == "triggers-pending")
+ {
+ if (Debug == true)
+ std::clog << "(parsed from dpkg) pkg: " << pkgname
+ << " action: " << action << " (prefix 2 to "
+ << PackageOpsDone[pkgname] << " of " << states.size() << ")" << endl;
+
+ states.insert(states.begin(), {"installed", N_("Installed %s")});
+ states.insert(states.begin(), {"half-configured", N_("Configuring %s")});
+ PackagesTotal += 2;
+ }
+ }
+}
+ /*}}}*/
+// DPkgPM::handleDisappearAction /*{{{*/
+void pkgDPkgPM::handleDisappearAction(string const &pkgname)
+{
+ pkgCache::PkgIterator Pkg = Cache.FindPkg(pkgname);
+ if (unlikely(Pkg.end() == true))
+ return;
+
+ // a disappeared package has no further actions
+ auto const ROps = PackageOps[Pkg.FullName()].size();
+ auto && ROpsDone = PackageOpsDone[Pkg.FullName()];
+ PackagesDone += ROps - ROpsDone;
+ ROpsDone = ROps;
+
+ // record the package name for display and stuff later
+ disappearedPkgs.insert(Pkg.FullName(true));
+
+ // the disappeared package was auto-installed - nothing to do
+ if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+ return;
+ pkgCache::VerIterator PkgVer = Cache[Pkg].InstVerIter(Cache);
+ if (unlikely(PkgVer.end() == true))
+ return;
+ /* search in the list of dependencies for (Pre)Depends,
+ check if this dependency has a Replaces on our package
+ and if so transfer the manual installed flag to it */
+ for (pkgCache::DepIterator Dep = PkgVer.DependsList(); Dep.end() != true; ++Dep)
+ {
+ if (Dep->Type != pkgCache::Dep::Depends &&
+ Dep->Type != pkgCache::Dep::PreDepends)
+ continue;
+ pkgCache::PkgIterator Tar = Dep.TargetPkg();
+ if (unlikely(Tar.end() == true))
+ continue;
+ // the package is already marked as manual
+ if ((Cache[Tar].Flags & pkgCache::Flag::Auto) != pkgCache::Flag::Auto)
+ continue;
+ pkgCache::VerIterator TarVer = Cache[Tar].InstVerIter(Cache);
+ if (TarVer.end() == true)
+ continue;
+ for (pkgCache::DepIterator Rep = TarVer.DependsList(); Rep.end() != true; ++Rep)
+ {
+ if (Rep->Type != pkgCache::Dep::Replaces)
+ continue;
+ if (Pkg != Rep.TargetPkg())
+ continue;
+ // okay, they are strongly connected - transfer manual-bit
+ if (Debug == true)
+ std::clog << "transfer manual-bit from disappeared »" << pkgname << "« to »" << Tar.FullName() << "«" << std::endl;
+ Cache[Tar].Flags &= ~Flag::Auto;
+ break;
+ }
+ }
+}
+ /*}}}*/
+void pkgDPkgPM::handleCrossUpgradeAction(string const &pkgname) /*{{{*/
+{
+ // in a crossgrade what looked like a remove first is really an unpack over it
+ auto const Pkg = Cache.FindPkg(pkgname);
+ if (likely(Pkg.end() == false) && Cache[Pkg].Delete())
+ {
+ auto const Grp = Pkg.Group();
+ if (likely(Grp.end() == false))
+ {
+ for (auto P = Grp.PackageList(); P.end() != true; P = Grp.NextPkg(P))
+ if(Cache[P].Install())
+ {
+ auto && Ops = PackageOps[P.FullName()];
+ auto const unpackOp = std::find_if(Ops.cbegin(), Ops.cend(), [](DpkgState const &s) { return strcmp(s.state, "unpacked") == 0; });
+ if (unpackOp != Ops.cend())
+ {
+ // skip ahead in the crossgraded packages
+ auto const skipped = std::distance(Ops.cbegin(), unpackOp);
+ PackagesDone += skipped;
+ PackageOpsDone[P.FullName()] += skipped;
+ // finish the crossremoved package
+ auto const ROps = PackageOps[Pkg.FullName()].size();
+ auto && ROpsDone = PackageOpsDone[Pkg.FullName()];
+ PackagesDone += ROps - ROpsDone;
+ ROpsDone = ROps;
+ break;
+ }
+ }
+ }
+ }
+}
+ /*}}}*/
+// DPkgPM::DoDpkgStatusFd /*{{{*/
+void pkgDPkgPM::DoDpkgStatusFd(int statusfd)
+{
+ auto const remainingBuffer = (sizeof(d->dpkgbuf) / sizeof(d->dpkgbuf[0])) - d->dpkgbuf_pos;
+ if (likely(remainingBuffer > 0) && d->status_fd_reached_end_of_file == false)
+ {
+ auto const len = read(statusfd, &d->dpkgbuf[d->dpkgbuf_pos], remainingBuffer);
+ if (len < 0)
+ return;
+ else if (len == 0 && d->dpkgbuf_pos == 0)
+ {
+ d->status_fd_reached_end_of_file = true;
+ return;
+ }
+ d->dpkgbuf_pos += (len / sizeof(d->dpkgbuf[0]));
+ }
+
+ // process line by line from the buffer
+ char *p = d->dpkgbuf, *q = nullptr;
+ while((q=(char*)memchr(p, '\n', (d->dpkgbuf + d->dpkgbuf_pos) - p)) != nullptr)
+ {
+ *q = '\0';
+ ProcessDpkgStatusLine(p);
+ p = q + 1; // continue with next line
+ }
+
+ // check if we stripped the buffer clean
+ if (p > (d->dpkgbuf + d->dpkgbuf_pos))
+ {
+ d->dpkgbuf_pos = 0;
+ return;
+ }
+
+ // otherwise move the unprocessed tail to the start and update pos
+ memmove(d->dpkgbuf, p, (p - d->dpkgbuf));
+ d->dpkgbuf_pos = (d->dpkgbuf + d->dpkgbuf_pos) - p;
+}
+ /*}}}*/
+// DPkgPM::WriteHistoryTag /*{{{*/
+void pkgDPkgPM::WriteHistoryTag(string const &tag, string value)
+{
+ size_t const length = value.length();
+ if (length == 0)
+ return;
+ // poor mans rstrip(", ")
+ if (value[length-2] == ',' && value[length-1] == ' ')
+ value.erase(length - 2, 2);
+ fprintf(d->history_out, "%s: %s\n", tag.c_str(), value.c_str());
+} /*}}}*/
+// DPkgPM::OpenLog /*{{{*/
+bool pkgDPkgPM::OpenLog()
+{
+ string const logfile_name = _config->FindFile("Dir::Log::Terminal", "/dev/null");
+ string logdir = flNotFile(logfile_name);
+ if(CreateAPTDirectoryIfNeeded(logdir, logdir) == false)
+ // FIXME: use a better string after freeze
+ return _error->Error(_("Directory '%s' missing"), logdir.c_str());
+
+ // get current time
+ char timestr[200];
+ time_t const t = time(NULL);
+ struct tm tm_buf;
+ struct tm const * const tmp = localtime_r(&t, &tm_buf);
+ strftime(timestr, sizeof(timestr), "%F %T", tmp);
+
+ // open terminal log
+ if (logfile_name != "/dev/null")
+ {
+ d->term_out = fopen(logfile_name.c_str(),"a");
+ if (d->term_out == NULL)
+ return _error->WarningE("OpenLog", _("Could not open file '%s'"), logfile_name.c_str());
+ setvbuf(d->term_out, NULL, _IONBF, 0);
+ SetCloseExec(fileno(d->term_out), true);
+ if (getuid() == 0) // if we aren't root, we can't chown a file, so don't try it
+ {
+ struct passwd *pw = getpwnam("root");
+ struct group *gr = getgrnam("adm");
+ if (pw != NULL && gr != NULL && chown(logfile_name.c_str(), pw->pw_uid, gr->gr_gid) != 0)
+ _error->WarningE("OpenLog", "chown to root:adm of file %s failed", logfile_name.c_str());
+ }
+ if (chmod(logfile_name.c_str(), 0640) != 0)
+ _error->WarningE("OpenLog", "chmod 0640 of file %s failed", logfile_name.c_str());
+ fprintf(d->term_out, "\nLog started: %s\n", timestr);
+ }
+
+ // write your history
+ string const history_name = _config->FindFile("Dir::Log::History", "/dev/null");
+ string logdir2 = flNotFile(logfile_name);
+ if(logdir != logdir2 && CreateAPTDirectoryIfNeeded(logdir2, logdir2) == false)
+ return _error->Error(_("Directory '%s' missing"), logdir.c_str());
+ if (history_name != "/dev/null")
+ {
+ d->history_out = fopen(history_name.c_str(),"a");
+ if (d->history_out == NULL)
+ return _error->WarningE("OpenLog", _("Could not open file '%s'"), history_name.c_str());
+ SetCloseExec(fileno(d->history_out), true);
+ chmod(history_name.c_str(), 0644);
+ fprintf(d->history_out, "\nStart-Date: %s\n", timestr);
+ string remove, purge, install, reinstall, upgrade, downgrade;
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ enum { CANDIDATE, CANDIDATE_AUTO, CURRENT_CANDIDATE, CURRENT } infostring;
+ string *line = NULL;
+ #define HISTORYINFO(X, Y) { line = &X; infostring = Y; }
+ if (Cache[I].NewInstall() == true)
+ HISTORYINFO(install, CANDIDATE_AUTO)
+ else if (Cache[I].ReInstall() == true)
+ HISTORYINFO(reinstall, CANDIDATE)
+ else if (Cache[I].Upgrade() == true)
+ HISTORYINFO(upgrade, CURRENT_CANDIDATE)
+ else if (Cache[I].Downgrade() == true)
+ HISTORYINFO(downgrade, CURRENT_CANDIDATE)
+ else if (Cache[I].Delete() == true)
+ HISTORYINFO((Cache[I].Purge() ? purge : remove), CURRENT)
+ else
+ continue;
+ #undef HISTORYINFO
+ line->append(I.FullName(false)).append(" (");
+ switch (infostring) {
+ case CANDIDATE: line->append(Cache[I].CandVersion); break;
+ case CANDIDATE_AUTO:
+ line->append(Cache[I].CandVersion);
+ if ((Cache[I].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+ line->append(", automatic");
+ break;
+ case CURRENT_CANDIDATE: line->append(Cache[I].CurVersion).append(", ").append(Cache[I].CandVersion); break;
+ case CURRENT: line->append(Cache[I].CurVersion); break;
+ }
+ line->append("), ");
+ }
+ if (_config->Exists("Commandline::AsString") == true)
+ WriteHistoryTag("Commandline", _config->Find("Commandline::AsString"));
+ std::string RequestingUser = AptHistoryRequestingUser();
+ if (RequestingUser != "")
+ WriteHistoryTag("Requested-By", RequestingUser);
+ WriteHistoryTag("Install", install);
+ WriteHistoryTag("Reinstall", reinstall);
+ WriteHistoryTag("Upgrade", upgrade);
+ WriteHistoryTag("Downgrade",downgrade);
+ WriteHistoryTag("Remove",remove);
+ WriteHistoryTag("Purge",purge);
+ fflush(d->history_out);
+ }
+
+ return true;
+}
+ /*}}}*/
+// DPkg::CloseLog /*{{{*/
+bool pkgDPkgPM::CloseLog()
+{
+ char timestr[200];
+ time_t t = time(NULL);
+ struct tm tm_buf;
+ struct tm *tmp = localtime_r(&t, &tm_buf);
+ strftime(timestr, sizeof(timestr), "%F %T", tmp);
+
+ if(d->term_out)
+ {
+ fprintf(d->term_out, "Log ended: ");
+ fprintf(d->term_out, "%s", timestr);
+ fprintf(d->term_out, "\n");
+ fclose(d->term_out);
+ }
+ d->term_out = NULL;
+
+ if(d->history_out)
+ {
+ if (disappearedPkgs.empty() == false)
+ {
+ string disappear;
+ for (std::set<std::string>::const_iterator d = disappearedPkgs.begin();
+ d != disappearedPkgs.end(); ++d)
+ {
+ pkgCache::PkgIterator P = Cache.FindPkg(*d);
+ disappear.append(*d);
+ if (P.end() == true)
+ disappear.append(", ");
+ else
+ disappear.append(" (").append(Cache[P].CurVersion).append("), ");
+ }
+ WriteHistoryTag("Disappeared", disappear);
+ }
+ if (d->dpkg_error.empty() == false)
+ fprintf(d->history_out, "Error: %s\n", d->dpkg_error.c_str());
+ fprintf(d->history_out, "End-Date: %s\n", timestr);
+ fclose(d->history_out);
+ }
+ d->history_out = NULL;
+
+ return true;
+}
+ /*}}}*/
+
+// DPkgPM::BuildPackagesProgressMap /*{{{*/
+void pkgDPkgPM::BuildPackagesProgressMap()
+{
+ // map the dpkg states to the operations that are performed
+ // (this is sorted in the same way as Item::Ops)
+ static const std::array<std::array<DpkgState, 2>, 4> DpkgStatesOpMap = {{
+ // Install operation
+ {{
+ {"half-installed", N_("Unpacking %s")},
+ {"unpacked", N_("Installing %s") },
+ }},
+ // Configure operation
+ {{
+ {"half-configured", N_("Configuring %s") },
+ { "installed", N_("Installed %s")},
+ }},
+ // Remove operation
+ {{
+ {"half-configured", N_("Removing %s")},
+ {"half-installed", N_("Removing %s")},
+ }},
+ // Purge operation
+ {{
+ {"config-files", N_("Completely removing %s")},
+ {"not-installed", N_("Completely removed %s")},
+ }},
+ }};
+ static_assert(Item::Purge == 3, "Enum item has unexpected index for mapping array");
+
+ // init the PackageOps map, go over the list of packages that
+ // that will be [installed|configured|removed|purged] and add
+ // them to the PackageOps map (the dpkg states it goes through)
+ // and the PackageOpsTranslations (human readable strings)
+ for (auto &&I : List)
+ {
+ if(I.Pkg.end() == true)
+ continue;
+
+ string const name = I.Pkg.FullName();
+ PackageOpsDone[name] = 0;
+ auto AddToPackageOps = [&](decltype(I.Op) const Op) {
+ auto const DpkgOps = DpkgStatesOpMap[Op];
+ std::copy(DpkgOps.begin(), DpkgOps.end(), std::back_inserter(PackageOps[name]));
+ PackagesTotal += DpkgOps.size();
+ };
+ // purging a package which is installed first passes through remove states
+ if (I.Op == Item::Purge && I.Pkg->CurrentVer != 0)
+ AddToPackageOps(Item::Remove);
+ AddToPackageOps(I.Op);
+
+ if ((I.Op == Item::Remove || I.Op == Item::Purge) && I.Pkg->CurrentVer != 0)
+ {
+ if (I.Pkg->CurrentState == pkgCache::State::UnPacked ||
+ I.Pkg->CurrentState == pkgCache::State::HalfInstalled)
+ {
+ if (likely(strcmp(PackageOps[name][0].state, "half-configured") == 0))
+ {
+ ++PackageOpsDone[name];
+ --PackagesTotal;
+ }
+ }
+ }
+ }
+ /* one extra: We don't want the progress bar to reach 100%, especially not
+ if we call dpkg --configure --pending and process a bunch of triggers
+ while showing 100%. Also, spindown takes a while, so never reaching 100%
+ is way more correct than reaching 100% while still doing stuff even if
+ doing it this way is slightly bending the rules */
+ ++PackagesTotal;
+}
+ /*}}}*/
+bool pkgDPkgPM::Go(int StatusFd) /*{{{*/
+{
+ APT::Progress::PackageManager *progress = NULL;
+ if (StatusFd == -1)
+ progress = APT::Progress::PackageManagerProgressFactory();
+ else
+ progress = new APT::Progress::PackageManagerProgressFd(StatusFd);
+
+ return Go(progress);
+}
+ /*}}}*/
+void pkgDPkgPM::StartPtyMagic() /*{{{*/
+{
+ if (_config->FindB("Dpkg::Use-Pty", true) == false)
+ {
+ d->master = -1;
+ if (d->slave != NULL)
+ free(d->slave);
+ d->slave = NULL;
+ return;
+ }
+
+ if (isatty(STDIN_FILENO) == 0)
+ d->direct_stdin = true;
+
+ _error->PushToStack();
+
+ d->master = posix_openpt(O_RDWR | O_NOCTTY);
+ if (d->master == -1)
+ _error->Errno("posix_openpt", _("Can not write log (%s)"), _("Is /dev/pts mounted?"));
+ else if (unlockpt(d->master) == -1)
+ _error->Errno("unlockpt", "Unlocking the slave of master fd %d failed!", d->master);
+ else
+ {
+#ifdef HAVE_PTSNAME_R
+ char slave_name[64]; // 64 is used by bionic
+ if (ptsname_r(d->master, slave_name, sizeof(slave_name)) != 0)
+#else
+ char const * const slave_name = ptsname(d->master);
+ if (slave_name == NULL)
+#endif
+ _error->Errno("ptsname", "Getting name for slave of master fd %d failed!", d->master);
+ else
+ {
+ d->slave = strdup(slave_name);
+ if (d->slave == NULL)
+ _error->Errno("strdup", "Copying name %s for slave of master fd %d failed!", slave_name, d->master);
+ else if (grantpt(d->master) == -1)
+ _error->Errno("grantpt", "Granting access to slave %s based on master fd %d failed!", slave_name, d->master);
+ else if (tcgetattr(STDIN_FILENO, &d->tt) == 0)
+ {
+ d->tt_is_valid = true;
+ struct termios raw_tt;
+ // copy window size of stdout if its a 'good' terminal
+ if (tcgetattr(STDOUT_FILENO, &raw_tt) == 0)
+ {
+ struct winsize win;
+ if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &win) < 0)
+ _error->Errno("ioctl", "Getting TIOCGWINSZ from stdout failed!");
+ if (ioctl(d->master, TIOCSWINSZ, &win) < 0)
+ _error->Errno("ioctl", "Setting TIOCSWINSZ for master fd %d failed!", d->master);
+ }
+ if (tcsetattr(d->master, TCSANOW, &d->tt) == -1)
+ _error->Errno("tcsetattr", "Setting in Start via TCSANOW for master fd %d failed!", d->master);
+
+ raw_tt = d->tt;
+ cfmakeraw(&raw_tt);
+ raw_tt.c_lflag &= ~ECHO;
+ raw_tt.c_lflag |= ISIG;
+ // block SIGTTOU during tcsetattr to prevent a hang if
+ // the process is a member of the background process group
+ // http://www.opengroup.org/onlinepubs/000095399/functions/tcsetattr.html
+ sigemptyset(&d->sigmask);
+ sigaddset(&d->sigmask, SIGTTOU);
+ sigprocmask(SIG_BLOCK,&d->sigmask, &d->original_sigmask);
+ if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw_tt) == -1)
+ _error->Errno("tcsetattr", "Setting in Start via TCSAFLUSH for stdin failed!");
+ sigprocmask(SIG_SETMASK, &d->original_sigmask, NULL);
+
+ }
+ if (d->slave != NULL)
+ {
+ /* on linux, closing (and later reopening) all references to the slave
+ makes the slave a death end, so we open it here to have one open all
+ the time. We could use this fd in SetupSlavePtyMagic() for linux, but
+ on kfreebsd we get an incorrect ("step like") output then while it has
+ no problem with closing all references… so to avoid platform specific
+ code here we combine both and be happy once more */
+ d->protect_slave_from_dying = open(d->slave, O_RDWR | O_CLOEXEC | O_NOCTTY);
+ }
+ }
+ }
+
+ if (_error->PendingError() == true)
+ {
+ if (d->master != -1)
+ {
+ close(d->master);
+ d->master = -1;
+ }
+ if (d->slave != NULL)
+ {
+ free(d->slave);
+ d->slave = NULL;
+ }
+ _error->DumpErrors(std::cerr, GlobalError::DEBUG, false);
+ }
+ _error->RevertToStack();
+}
+ /*}}}*/
+void pkgDPkgPM::SetupSlavePtyMagic() /*{{{*/
+{
+ if(d->master == -1 || d->slave == NULL)
+ return;
+
+ if (close(d->master) == -1)
+ _error->FatalE("close", "Closing master %d in child failed!", d->master);
+ d->master = -1;
+ if (setsid() == -1)
+ _error->FatalE("setsid", "Starting a new session for child failed!");
+
+ int const slaveFd = open(d->slave, O_RDWR | O_NOCTTY);
+ if (slaveFd == -1)
+ _error->FatalE("open", _("Can not write log (%s)"), _("Is /dev/pts mounted?"));
+ else if (ioctl(slaveFd, TIOCSCTTY, 0) < 0)
+ _error->FatalE("ioctl", "Setting TIOCSCTTY for slave fd %d failed!", slaveFd);
+ else
+ {
+ unsigned short i = 0;
+ if (d->direct_stdin == true)
+ ++i;
+ for (; i < 3; ++i)
+ if (dup2(slaveFd, i) == -1)
+ _error->FatalE("dup2", "Dupping %d to %d in child failed!", slaveFd, i);
+
+ if (d->tt_is_valid == true && tcsetattr(STDIN_FILENO, TCSANOW, &d->tt) < 0)
+ _error->FatalE("tcsetattr", "Setting in Setup via TCSANOW for slave fd %d failed!", slaveFd);
+ }
+
+ if (slaveFd != -1)
+ close(slaveFd);
+}
+ /*}}}*/
+void pkgDPkgPM::StopPtyMagic() /*{{{*/
+{
+ if (d->slave != NULL)
+ free(d->slave);
+ d->slave = NULL;
+ if (d->protect_slave_from_dying != -1)
+ {
+ close(d->protect_slave_from_dying);
+ d->protect_slave_from_dying = -1;
+ }
+ if(d->master >= 0)
+ {
+ if (d->tt_is_valid == true && tcsetattr(STDIN_FILENO, TCSAFLUSH, &d->tt) == -1)
+ _error->FatalE("tcsetattr", "Setting in Stop via TCSAFLUSH for stdin failed!");
+ close(d->master);
+ d->master = -1;
+ }
+}
+ /*}}}*/
+static void cleanUpTmpDir(char * const tmpdir) /*{{{*/
+{
+ if (tmpdir == nullptr)
+ return;
+ DIR * const D = opendir(tmpdir);
+ if (D == nullptr)
+ _error->Errno("opendir", _("Unable to read %s"), tmpdir);
+ else
+ {
+ auto const dfd = dirfd(D);
+ for (struct dirent *Ent = readdir(D); Ent != nullptr; Ent = readdir(D))
+ {
+ if (Ent->d_name[0] == '.')
+ continue;
+#ifdef _DIRENT_HAVE_D_TYPE
+ if (unlikely(Ent->d_type != DT_LNK && Ent->d_type != DT_UNKNOWN))
+ continue;
+#endif
+ if (unlikely(unlinkat(dfd, Ent->d_name, 0) != 0))
+ break;
+ }
+ closedir(D);
+ rmdir(tmpdir);
+ }
+ free(tmpdir);
+}
+ /*}}}*/
+
+// DPkgPM::Go - Run the sequence /*{{{*/
+// ---------------------------------------------------------------------
+/* This globs the operations and calls dpkg
+ *
+ * If it is called with a progress object apt will report the install
+ * progress to this object. It maps the dpkg states a package goes
+ * through to human readable (and i10n-able)
+ * names and calculates a percentage for each step.
+ */
+static bool ItemIsEssential(pkgDPkgPM::Item const &I)
+{
+ static auto const cachegen = _config->Find("pkgCacheGen::Essential");
+ if (cachegen == "none" || cachegen == "native")
+ return true;
+ if (unlikely(I.Pkg.end()))
+ return true;
+ return (I.Pkg->Flags & pkgCache::Flag::Essential) != 0;
+}
+bool pkgDPkgPM::ExpandPendingCalls(std::vector<Item> &List, pkgDepCache &Cache)
+{
+ {
+ std::unordered_set<decltype(pkgCache::Package::ID)> alreadyRemoved;
+ for (auto && I : List)
+ if (I.Op == Item::Remove || I.Op == Item::Purge)
+ alreadyRemoved.insert(I.Pkg->ID);
+ std::remove_reference<decltype(List)>::type AppendList;
+ for (auto Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ if (Cache[Pkg].Delete() && alreadyRemoved.insert(Pkg->ID).second == true)
+ AppendList.emplace_back(Cache[Pkg].Purge() ? Item::Purge : Item::Remove, Pkg);
+ std::move(AppendList.begin(), AppendList.end(), std::back_inserter(List));
+ }
+ {
+ std::unordered_set<decltype(pkgCache::Package::ID)> alreadyConfigured;
+ for (auto && I : List)
+ if (I.Op == Item::Configure)
+ alreadyConfigured.insert(I.Pkg->ID);
+ std::remove_reference<decltype(List)>::type AppendList;
+ for (auto && I : List)
+ if (I.Op == Item::Install && alreadyConfigured.insert(I.Pkg->ID).second == true)
+ AppendList.emplace_back(Item::Configure, I.Pkg);
+ for (auto Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
+ Cache[Pkg].Delete() == false && alreadyConfigured.insert(Pkg->ID).second == true)
+ AppendList.emplace_back(Item::Configure, Pkg);
+ std::move(AppendList.begin(), AppendList.end(), std::back_inserter(List));
+ }
+ return true;
+}
+bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
+{
+ struct Inhibitor
+ {
+ int Fd = -1;
+ Inhibitor()
+ {
+ if (_config->FindB("DPkg::Inhibit-Shutdown", true))
+ Fd = Inhibit("shutdown", "APT", "APT is installing or removing packages", "block");
+ }
+ ~Inhibitor()
+ {
+ if (Fd > 0)
+ close(Fd);
+ }
+ } inhibitor;
+
+ // explicitly remove&configure everything for hookscripts and progress building
+ // we need them only temporarily through, so keep the length and erase afterwards
+ decltype(List)::const_iterator::difference_type explicitIdx =
+ std::distance(List.cbegin(), List.cend());
+ ExpandPendingCalls(List, Cache);
+
+ /* if dpkg told us that it has already done everything to the package we wanted it to do,
+ we shouldn't ask it for "more" later. That can e.g. happen if packages without conffiles
+ are purged as they will have pass through the purge states on remove already */
+ auto const StripAlreadyDoneFrom = [&](APT::VersionVector & Pending) {
+ Pending.erase(std::remove_if(Pending.begin(), Pending.end(), [&](pkgCache::VerIterator const &Ver) {
+ auto const PN = Ver.ParentPkg().FullName();
+ auto const POD = PackageOpsDone.find(PN);
+ if (POD == PackageOpsDone.end())
+ return false;
+ return PackageOps[PN].size() <= POD->second;
+ }), Pending.end());
+ };
+
+ pkgPackageManager::SigINTStop = false;
+ d->progress = progress;
+
+ // Generate the base argument list for dpkg
+ std::vector<std::string> const sArgs = debSystem::GetDpkgBaseCommand();
+ std::vector<const char *> Args(sArgs.size(), NULL);
+ std::transform(sArgs.begin(), sArgs.end(), Args.begin(),
+ [](std::string const &s) { return s.c_str(); });
+ unsigned long long const StartSize = std::accumulate(sArgs.begin(), sArgs.end(), 0llu,
+ [](unsigned long long const i, std::string const &s) { return i + s.length(); });
+ size_t const BaseArgs = Args.size();
+
+ fd_set rfds;
+ struct timespec tv;
+
+ // try to figure out the max environment size
+ int OSArgMax = sysconf(_SC_ARG_MAX);
+ if(OSArgMax < 0)
+ OSArgMax = 32*1024;
+ OSArgMax -= EnvironmentSize() - 2*1024;
+ unsigned int const MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes", OSArgMax);
+ bool const NoTriggers = _config->FindB("DPkg::NoTriggers", true);
+
+ if (RunScripts("DPkg::Pre-Invoke") == false)
+ return false;
+
+ if (RunScriptsWithPkgs("DPkg::Pre-Install-Pkgs") == false)
+ return false;
+
+ auto const noopDPkgInvocation = _config->FindB("Debug::pkgDPkgPM",false);
+ // store auto-bits as they are supposed to be after dpkg is run
+ if (noopDPkgInvocation == false)
+ Cache.writeStateFile(NULL);
+
+ bool dpkg_recursive_install = _config->FindB("dpkg::install::recursive", false);
+ if (_config->FindB("dpkg::install::recursive::force", false) == false)
+ {
+ // dpkg uses a sorted treewalk since that version which enables the workaround to work
+ auto const dpkgpkg = Cache.FindPkg("dpkg");
+ if (likely(dpkgpkg.end() == false && dpkgpkg->CurrentVer != 0))
+ dpkg_recursive_install = Cache.VS().CmpVersion("1.18.5", dpkgpkg.CurrentVer().VerStr()) <= 0;
+ }
+ // no point in doing this dance for a handful of packages only
+ unsigned int const dpkg_recursive_install_min = _config->FindI("dpkg::install::recursive::minimum", 5);
+ // FIXME: workaround for dpkg bug, see our ./test-bug-740843-versioned-up-down-breaks test
+ bool const dpkg_recursive_install_numbered = _config->FindB("dpkg::install::recursive::numbered", true);
+
+ // for the progress
+ BuildPackagesProgressMap();
+
+ APT::StateChanges approvedStates;
+ if (_config->FindB("dpkg::selection::remove::approved", true))
+ {
+ for (auto && I : List)
+ if (I.Op == Item::Purge)
+ approvedStates.Purge(FindToBeRemovedVersion(I.Pkg));
+ else if (I.Op == Item::Remove)
+ approvedStates.Remove(FindToBeRemovedVersion(I.Pkg));
+ }
+
+ // Skip removes if we install another architecture of this package soon (crossgrade)
+ // We can't just skip them all the time as it could be an ordering requirement [of another package]
+ if ((approvedStates.Remove().empty() == false || approvedStates.Purge().empty() == false) &&
+ _config->FindB("dpkg::remove::crossgrade::implicit", true) == true)
+ {
+ std::unordered_set<decltype(pkgCache::Package::ID)> crossgraded;
+ std::vector<std::pair<Item*, std::string>> toCrossgrade;
+ auto const PlanedEnd = std::next(List.begin(), explicitIdx);
+ for (auto I = List.begin(); I != PlanedEnd; ++I)
+ {
+ if (I->Op != Item::Remove && I->Op != Item::Purge)
+ continue;
+
+ auto const Grp = I->Pkg.Group();
+ size_t installedInstances = 0, wannabeInstances = 0;
+ bool multiArchInstances = false;
+ for (auto Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg))
+ {
+ if (Pkg->CurrentVer != 0)
+ {
+ ++installedInstances;
+ if (Cache[Pkg].Delete() == false)
+ ++wannabeInstances;
+ }
+ else if (PackageOps.find(Pkg.FullName()) != PackageOps.end())
+ ++wannabeInstances;
+ if (multiArchInstances == false)
+ {
+ auto const V = Cache[Pkg].InstVerIter(Cache);
+ if (V.end() == false && (Pkg->CurrentVer == 0 || V != Pkg.CurrentVer()))
+ multiArchInstances = ((V->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same);
+ }
+ }
+ /* theoretically the installed check would be enough as some wannabe will
+ be first and hence be the crossgrade we were looking for, but #844300
+ prevents this so we keep these situations explicit removes.
+ It is also the reason why neither of them can be a M-A:same package */
+ if (installedInstances == 1 && wannabeInstances == 1 && multiArchInstances == false)
+ {
+ auto const FirstInstall = std::find_if_not(I, List.end(),
+ [](Item const &i) { return i.Op == Item::Remove || i.Op == Item::Purge; });
+ auto const LastInstall = std::find_if_not(FirstInstall, List.end(),
+ [](Item const &i) { return i.Op == Item::Install; });
+ auto const crosser = std::find_if(FirstInstall, LastInstall,
+ [&I](Item const &i) { return i.Pkg->Group == I->Pkg->Group; });
+ if (crosser != LastInstall)
+ {
+ crossgraded.insert(I->Pkg->ID);
+ toCrossgrade.emplace_back(&(*I), crosser->Pkg.FullName());
+ }
+ }
+ }
+ for (auto I = PlanedEnd; I != List.end(); ++I)
+ {
+ if (I->Op != Item::Remove && I->Op != Item::Purge)
+ continue;
+
+ auto const Grp = I->Pkg.Group();
+ for (auto Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg))
+ {
+ if (Pkg == I->Pkg || Cache[Pkg].Install() == false)
+ continue;
+ toCrossgrade.emplace_back(&(*I), Pkg.FullName());
+ break;
+ }
+ }
+ for (auto C : toCrossgrade)
+ {
+ // we never do purges on packages which are crossgraded, even if "requested"
+ if (C.first->Op == Item::Purge)
+ {
+ C.first->Op = Item::Remove; // crossgrades should never be purged
+ auto && Purges = approvedStates.Purge();
+ auto const Ver = std::find_if(
+#if __GNUC__ >= 5 || (__GNUC_MINOR__ >= 9 && __GNUC__ >= 4)
+ Purges.cbegin(), Purges.cend(),
+#else
+ Purges.begin(), Purges.end(),
+#endif
+ [&C](pkgCache::VerIterator const &V) { return V.ParentPkg() == C.first->Pkg; });
+ approvedStates.Remove(*Ver);
+ Purges.erase(Ver);
+ auto && RemOp = PackageOps[C.first->Pkg.FullName()];
+ if (RemOp.size() == 4)
+ {
+ RemOp.erase(std::next(RemOp.begin(), 2), RemOp.end());
+ PackagesTotal -= 2;
+ }
+ else
+ _error->Warning("Unexpected amount of planned ops for package %s: %lu", C.first->Pkg.FullName().c_str(), RemOp.size());
+ }
+ }
+ if (crossgraded.empty() == false)
+ {
+ auto const oldsize = List.size();
+ List.erase(std::remove_if(List.begin(), PlanedEnd,
+ [&crossgraded](Item const &i){
+ return (i.Op == Item::Remove || i.Op == Item::Purge) &&
+ crossgraded.find(i.Pkg->ID) != crossgraded.end();
+ }), PlanedEnd);
+ explicitIdx -= (oldsize - List.size());
+ }
+ }
+
+ APT::StateChanges currentStates;
+ if (_config->FindB("dpkg::selection::current::saveandrestore", true))
+ {
+ for (auto Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ if (Pkg->CurrentVer == 0)
+ continue;
+ else if (Pkg->SelectedState == pkgCache::State::Purge)
+ currentStates.Purge(FindToBeRemovedVersion(Pkg));
+ else if (Pkg->SelectedState == pkgCache::State::DeInstall)
+ currentStates.Remove(FindToBeRemovedVersion(Pkg));
+ if (currentStates.empty() == false)
+ {
+ APT::StateChanges cleanStates;
+ for (auto && P: currentStates.Remove())
+ cleanStates.Install(P);
+ for (auto && P: currentStates.Purge())
+ cleanStates.Install(P);
+ if (cleanStates.Save(false) == false)
+ return _error->Error("Couldn't clean the currently selected dpkg states");
+ }
+ }
+
+ if (_config->FindB("dpkg::selection::remove::approved", true))
+ {
+ if (approvedStates.Save(false) == false)
+ {
+ _error->Error("Couldn't record the approved state changes as dpkg selection states");
+ if (currentStates.Save(false) == false)
+ _error->Error("Couldn't restore dpkg selection states which were present before this interaction!");
+ return false;
+ }
+
+ List.erase(std::next(List.begin(), explicitIdx), List.end());
+
+ std::vector<bool> toBeRemoved(Cache.Head().PackageCount, false);
+ for (auto && I: approvedStates.Remove())
+ toBeRemoved[I.ParentPkg()->ID] = true;
+ for (auto && I: approvedStates.Purge())
+ toBeRemoved[I.ParentPkg()->ID] = true;
+
+ for (auto && I: List)
+ if (I.Op == Item::Remove || I.Op == Item::Purge)
+ toBeRemoved[I.Pkg->ID] = false;
+
+ bool const RemovePending = std::find(toBeRemoved.begin(), toBeRemoved.end(), true) != toBeRemoved.end();
+ bool const PurgePending = approvedStates.Purge().empty() == false;
+ if (RemovePending != false || PurgePending != false)
+ List.emplace_back(Item::ConfigurePending, pkgCache::PkgIterator());
+ if (RemovePending)
+ List.emplace_back(Item::RemovePending, pkgCache::PkgIterator());
+ if (PurgePending)
+ List.emplace_back(Item::PurgePending, pkgCache::PkgIterator());
+
+ // support subpressing of triggers processing for special
+ // cases like d-i that runs the triggers handling manually
+ if (_config->FindB("DPkg::ConfigurePending", true))
+ List.emplace_back(Item::ConfigurePending, pkgCache::PkgIterator());
+ }
+ bool const TriggersPending = _config->FindB("DPkg::TriggersPending", false);
+
+ d->stdin_is_dev_null = false;
+
+ // create log
+ OpenLog();
+
+ bool dpkgMultiArch = debSystem::SupportsMultiArch();
+
+ // start pty magic before the loop
+ StartPtyMagic();
+
+ // Tell the progress that its starting and fork dpkg
+ d->progress->Start(d->master);
+
+ // this loop is runs once per dpkg operation
+ vector<Item>::const_iterator I = List.cbegin();
+ while (I != List.end())
+ {
+ // Do all actions with the same Op in one run
+ vector<Item>::const_iterator J = I;
+ if (TriggersPending == true)
+ for (; J != List.end(); ++J)
+ {
+ if (J->Op == I->Op)
+ continue;
+ if (J->Op != Item::TriggersPending)
+ break;
+ vector<Item>::const_iterator T = J + 1;
+ if (T != List.end() && T->Op == I->Op)
+ continue;
+ break;
+ }
+ else if (J->Op == Item::Remove || J->Op == Item::Purge)
+ J = std::find_if(J, List.cend(), [](Item const &I) { return I.Op != Item::Remove && I.Op != Item::Purge; });
+ else
+ J = std::find_if(J, List.cend(), [&J](Item const &I) { return I.Op != J->Op; });
+
+ auto const size = (J - I) + 10;
+
+ // start with the baseset of arguments
+ auto Size = StartSize;
+ Args.erase(Args.begin() + BaseArgs, Args.end());
+ Args.reserve(size);
+ // keep track of allocated strings for multiarch package names
+ std::vector<char *> Packages(size, nullptr);
+
+ int fd[2];
+ if (pipe(fd) != 0)
+ return _error->Errno("pipe","Failed to create IPC pipe to dpkg");
+
+#define ADDARG(X) Args.push_back(X); Size += strlen(X)
+#define ADDARGC(X) Args.push_back(X); Size += sizeof(X) - 1
+
+ ADDARGC("--status-fd");
+ char status_fd_buf[20];
+ snprintf(status_fd_buf,sizeof(status_fd_buf),"%i", fd[1]);
+ ADDARG(status_fd_buf);
+ unsigned long const Op = I->Op;
+
+ if (NoTriggers == true && I->Op != Item::TriggersPending &&
+ (I->Op != Item::ConfigurePending || std::next(I) != List.end()))
+ {
+ ADDARGC("--no-triggers");
+ }
+
+ switch (I->Op)
+ {
+ case Item::Remove:
+ case Item::Purge:
+ ADDARGC("--force-depends");
+ if (std::any_of(I, J, ItemIsEssential))
+ {
+ ADDARGC("--force-remove-essential");
+ }
+ ADDARGC("--remove");
+ break;
+
+ case Item::Configure:
+ ADDARGC("--configure");
+ break;
+
+ case Item::ConfigurePending:
+ ADDARGC("--configure");
+ ADDARGC("--pending");
+ break;
+
+ case Item::TriggersPending:
+ ADDARGC("--triggers-only");
+ ADDARGC("--pending");
+ break;
+
+ case Item::RemovePending:
+ ADDARGC("--remove");
+ ADDARGC("--pending");
+ break;
+
+ case Item::PurgePending:
+ ADDARGC("--purge");
+ ADDARGC("--pending");
+ break;
+
+ case Item::Install:
+ ADDARGC("--unpack");
+ ADDARGC("--auto-deconfigure");
+ break;
+ }
+
+ char * tmpdir_to_free = nullptr;
+
+ // Write in the file or package names
+ if (I->Op == Item::Install)
+ {
+ auto const installsToDo = J - I;
+ if (dpkg_recursive_install == true && dpkg_recursive_install_min < installsToDo)
+ {
+ std::string tmpdir;
+ strprintf(tmpdir, "%s/apt-dpkg-install-XXXXXX", GetTempDir().c_str());
+ tmpdir_to_free = strndup(tmpdir.data(), tmpdir.length());
+ if (mkdtemp(tmpdir_to_free) == nullptr)
+ return _error->Errno("DPkg::Go", "mkdtemp of %s failed in preparation of calling dpkg unpack", tmpdir_to_free);
+
+ char p = 1;
+ for (auto c = installsToDo - 1; (c = c/10) != 0; ++p);
+ for (unsigned long n = 0; I != J; ++n, ++I)
+ {
+ if (I->File[0] != '/')
+ return _error->Error("Internal Error, Pathname to install is not absolute '%s'",I->File.c_str());
+ auto file = flNotDir(I->File);
+ if (flExtension(file) != "deb")
+ file.append(".deb");
+ std::string linkpath;
+ if (dpkg_recursive_install_numbered)
+ strprintf(linkpath, "%s/%.*lu-%s", tmpdir_to_free, p, n, file.c_str());
+ else
+ strprintf(linkpath, "%s/%s", tmpdir_to_free, file.c_str());
+ if (symlink(I->File.c_str(), linkpath.c_str()) != 0)
+ return _error->Errno("DPkg::Go", "Symlinking %s to %s failed!", I->File.c_str(), linkpath.c_str());
+ }
+ ADDARGC("--recursive");
+ ADDARG(tmpdir_to_free);
+ }
+ else
+ {
+ for (;I != J && Size < MaxArgBytes; ++I)
+ {
+ if (I->File[0] != '/')
+ return _error->Error("Internal Error, Pathname to install is not absolute '%s'",I->File.c_str());
+ Args.push_back(I->File.c_str());
+ Size += I->File.length();
+ }
+ }
+ }
+ else if (I->Op == Item::RemovePending)
+ {
+ ++I;
+ StripAlreadyDoneFrom(approvedStates.Remove());
+ if (approvedStates.Remove().empty())
+ continue;
+ }
+ else if (I->Op == Item::PurgePending)
+ {
+ ++I;
+ // explicit removes of packages without conffiles passthrough the purge states instantly, too.
+ // Setting these non-installed packages up for purging generates 'unknown pkg' warnings from dpkg
+ StripAlreadyDoneFrom(approvedStates.Purge());
+ if (approvedStates.Purge().empty())
+ continue;
+ std::remove_reference<decltype(approvedStates.Remove())>::type approvedRemoves;
+ std::swap(approvedRemoves, approvedStates.Remove());
+ // we apply it again here as an explicit remove in the ordering will have cleared the purge state
+ if (approvedStates.Save(false) == false)
+ {
+ _error->Error("Couldn't record the approved purges as dpkg selection states");
+ if (currentStates.Save(false) == false)
+ _error->Error("Couldn't restore dpkg selection states which were present before this interaction!");
+ return false;
+ }
+ std::swap(approvedRemoves, approvedStates.Remove());
+ }
+ else
+ {
+ string const nativeArch = _config->Find("APT::Architecture");
+ unsigned long const oldSize = I->Pkg.end() == false ? Size : 0;
+ for (;I != J && Size < MaxArgBytes; ++I)
+ {
+ if((*I).Pkg.end() == true)
+ continue;
+ if (I->Op == Item::Configure && disappearedPkgs.find(I->Pkg.FullName(true)) != disappearedPkgs.end())
+ continue;
+ // We keep this here to allow "smooth" transitions from e.g. multiarch dpkg/ubuntu to dpkg/debian
+ if (dpkgMultiArch == false && (I->Pkg.Arch() == nativeArch ||
+ strcmp(I->Pkg.Arch(), "all") == 0 ||
+ strcmp(I->Pkg.Arch(), "none") == 0))
+ {
+ char const * const name = I->Pkg.Name();
+ ADDARG(name);
+ }
+ else
+ {
+ pkgCache::VerIterator PkgVer;
+ std::string name = I->Pkg.Name();
+ if (Op == Item::Remove)
+ PkgVer = I->Pkg.CurrentVer();
+ else if (Op == Item::Purge)
+ {
+ // we purge later with --purge --pending, so if it isn't installed (aka rc-only), skip it here
+ PkgVer = I->Pkg.CurrentVer();
+ if (PkgVer.end() == true)
+ continue;
+ }
+ else
+ PkgVer = Cache[I->Pkg].InstVerIter(Cache);
+ if (strcmp(I->Pkg.Arch(), "none") == 0)
+ ; // never arch-qualify a package without an arch
+ else if (PkgVer.end() == false)
+ name.append(":").append(PkgVer.Arch());
+ else
+ _error->Warning("Can not find PkgVer for '%s'", name.c_str());
+ char * const fullname = strdup(name.c_str());
+ Packages.push_back(fullname);
+ ADDARG(fullname);
+ }
+ }
+ // skip configure action if all scheduled packages disappeared
+ if (oldSize == Size)
+ continue;
+ }
+#undef ADDARGC
+#undef ADDARG
+
+ J = I;
+
+ if (noopDPkgInvocation == true)
+ {
+ for (std::vector<const char *>::const_iterator a = Args.begin();
+ a != Args.end(); ++a)
+ clog << *a << ' ';
+ clog << endl;
+ for (std::vector<char *>::const_iterator p = Packages.begin();
+ p != Packages.end(); ++p)
+ free(*p);
+ Packages.clear();
+ close(fd[0]);
+ close(fd[1]);
+ cleanUpTmpDir(tmpdir_to_free);
+ continue;
+ }
+ Args.push_back(NULL);
+
+ cout << flush;
+ clog << flush;
+ cerr << flush;
+
+ /* Mask off sig int/quit. We do this because dpkg also does when
+ it forks scripts. What happens is that when you hit ctrl-c it sends
+ it to all processes in the group. Since dpkg ignores the signal
+ it doesn't die but we do! So we must also ignore it */
+ sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN);
+ sighandler_t old_SIGINT = signal(SIGINT,SigINT);
+
+ // Check here for any SIGINT
+ if (pkgPackageManager::SigINTStop && (Op == Item::Remove || Op == Item::Purge || Op == Item::Install))
+ break;
+
+ // ignore SIGHUP as well (debian #463030)
+ sighandler_t old_SIGHUP = signal(SIGHUP,SIG_IGN);
+
+ // now run dpkg
+ d->progress->StartDpkg();
+ std::set<int> KeepFDs;
+ KeepFDs.insert(fd[1]);
+ MergeKeepFdsFromConfiguration(KeepFDs);
+ pid_t Child = ExecFork(KeepFDs);
+ if (Child == 0)
+ {
+ // This is the child
+ SetupSlavePtyMagic();
+ close(fd[0]); // close the read end of the pipe
+
+ debSystem::DpkgChrootDirectory();
+
+ if (chdir(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0)
+ _exit(100);
+
+ if (_config->FindB("DPkg::FlushSTDIN",true) == true && isatty(STDIN_FILENO))
+ {
+ int Flags;
+ int dummy = 0;
+ if ((Flags = fcntl(STDIN_FILENO,F_GETFL,dummy)) < 0)
+ _exit(100);
+
+ // Discard everything in stdin before forking dpkg
+ if (fcntl(STDIN_FILENO,F_SETFL,Flags | O_NONBLOCK) < 0)
+ _exit(100);
+
+ while (read(STDIN_FILENO,&dummy,1) == 1);
+
+ if (fcntl(STDIN_FILENO,F_SETFL,Flags & (~(long)O_NONBLOCK)) < 0)
+ _exit(100);
+ }
+
+ // if color support isn't enabled/disabled explicitly tell
+ // dpkg to use the same state apt is using for its color support
+ if (_config->FindB("APT::Color", false) == true)
+ setenv("DPKG_COLORS", "always", 0);
+ else
+ setenv("DPKG_COLORS", "never", 0);
+
+ if (dynamic_cast<debSystem*>(_system) != nullptr
+ && dynamic_cast<debSystem*>(_system)->IsLocked() == true) {
+ setenv("DPKG_FRONTEND_LOCKED", "true", 1);
+ }
+ if (_config->Find("DPkg::Path", "").empty() == false)
+ setenv("PATH", _config->Find("DPkg::Path", "").c_str(), 1);
+
+ execvp(Args[0], (char**) &Args[0]);
+ cerr << "Could not exec dpkg!" << endl;
+ _exit(100);
+ }
+
+ // we read from dpkg here
+ int const _dpkgin = fd[0];
+ close(fd[1]); // close the write end of the pipe
+ d->status_fd_reached_end_of_file = false;
+
+ // apply ionice
+ if (_config->FindB("DPkg::UseIoNice", false) == true)
+ ionice(Child);
+
+ // setups fds
+ sigemptyset(&d->sigmask);
+ sigprocmask(SIG_BLOCK,&d->sigmask,&d->original_sigmask);
+
+ /* free vectors (and therefore memory) as we don't need the included data anymore */
+ for (std::vector<char *>::const_iterator p = Packages.begin();
+ p != Packages.end(); ++p)
+ free(*p);
+ Packages.clear();
+
+ // the result of the waitpid call
+ int Status = 0;
+ int res;
+ bool waitpid_failure = false;
+ bool dpkg_finished = false;
+ do
+ {
+ if (dpkg_finished == false)
+ {
+ if ((res = waitpid(Child, &Status, WNOHANG)) == Child)
+ dpkg_finished = true;
+ else if (res < 0)
+ {
+ // error handling, waitpid returned -1
+ if (errno == EINTR)
+ continue;
+ waitpid_failure = true;
+ break;
+ }
+ }
+ if (dpkg_finished && d->status_fd_reached_end_of_file)
+ break;
+
+ // wait for input or output here
+ FD_ZERO(&rfds);
+ if (d->master >= 0 && d->direct_stdin == false && d->stdin_is_dev_null == false)
+ FD_SET(STDIN_FILENO, &rfds);
+ FD_SET(_dpkgin, &rfds);
+ if(d->master >= 0)
+ FD_SET(d->master, &rfds);
+ tv.tv_sec = 0;
+ tv.tv_nsec = d->progress->GetPulseInterval();
+ auto const select_ret = pselect(max(d->master, _dpkgin)+1, &rfds, NULL, NULL,
+ &tv, &d->original_sigmask);
+ d->progress->Pulse();
+ if (select_ret == 0)
+ continue;
+ else if (select_ret < 0 && errno == EINTR)
+ continue;
+ else if (select_ret < 0)
+ {
+ perror("select() returned error");
+ continue;
+ }
+
+ if(d->master >= 0 && FD_ISSET(d->master, &rfds))
+ DoTerminalPty(d->master);
+ if(d->master >= 0 && FD_ISSET(0, &rfds))
+ DoStdin(d->master);
+ if(FD_ISSET(_dpkgin, &rfds))
+ DoDpkgStatusFd(_dpkgin);
+
+ } while (true);
+ close(_dpkgin);
+
+ // Restore sig int/quit
+ signal(SIGQUIT,old_SIGQUIT);
+ signal(SIGINT,old_SIGINT);
+ signal(SIGHUP,old_SIGHUP);
+
+ cleanUpTmpDir(tmpdir_to_free);
+
+ if (waitpid_failure == true)
+ {
+ strprintf(d->dpkg_error, "Sub-process %s couldn't be waited for.",Args[0]);
+ _error->Error("%s", d->dpkg_error.c_str());
+ break;
+ }
+
+ // Check for an error code.
+ if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
+ {
+ // if it was set to "keep-dpkg-running" then we won't return
+ // here but keep the loop going and just report it as a error
+ // for later
+ bool const stopOnError = _config->FindB("Dpkg::StopOnError",true);
+
+ if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV)
+ strprintf(d->dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]);
+ else if (WIFEXITED(Status) != 0)
+ strprintf(d->dpkg_error, "Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status));
+ else
+ strprintf(d->dpkg_error, "Sub-process %s exited unexpectedly",Args[0]);
+ _error->Error("%s", d->dpkg_error.c_str());
+
+ if(stopOnError)
+ break;
+ }
+ }
+ // dpkg is done at this point
+ StopPtyMagic();
+ CloseLog();
+
+ if (d->dpkg_error.empty() == false)
+ {
+ // no point in resetting packages we already completed removal for
+ StripAlreadyDoneFrom(approvedStates.Remove());
+ StripAlreadyDoneFrom(approvedStates.Purge());
+ APT::StateChanges undo;
+ auto && undoRem = approvedStates.Remove();
+ std::move(undoRem.begin(), undoRem.end(), std::back_inserter(undo.Install()));
+ auto && undoPur = approvedStates.Purge();
+ std::move(undoPur.begin(), undoPur.end(), std::back_inserter(undo.Install()));
+ approvedStates.clear();
+ if (undo.Save(false) == false)
+ _error->Error("Couldn't revert dpkg selection for approved remove/purge after an error was encountered!");
+ }
+
+ StripAlreadyDoneFrom(currentStates.Remove());
+ StripAlreadyDoneFrom(currentStates.Purge());
+ if (currentStates.Save(false) == false)
+ _error->Error("Couldn't restore dpkg selection states which were present before this interaction!");
+
+ if (pkgPackageManager::SigINTStop)
+ _error->Warning(_("Operation was interrupted before it could finish"));
+
+ if (noopDPkgInvocation == false)
+ {
+ if (d->dpkg_error.empty() && (PackagesDone + 1) != PackagesTotal)
+ {
+ std::string pkglist;
+ for (auto const &PO: PackageOps)
+ if (PO.second.size() != PackageOpsDone[PO.first])
+ {
+ if (pkglist.empty() == false)
+ pkglist.append(" ");
+ pkglist.append(PO.first);
+ }
+ /* who cares about correct progress? As we depend on it for skipping actions
+ our parsing should be correct. People will no doubt be confused if they see
+ this message, but the dpkg warning about unknown packages isn't much better
+ from a user POV and combined we might have a chance to figure out what is wrong */
+ _error->Warning("APT had planned for dpkg to do more than it reported back (%u vs %u).\n"
+ "Affected packages: %s", PackagesDone, PackagesTotal, pkglist.c_str());
+ }
+
+ std::string const oldpkgcache = _config->FindFile("Dir::cache::pkgcache");
+ if (oldpkgcache.empty() == false && RealFileExists(oldpkgcache) == true &&
+ RemoveFile("pkgDPkgPM::Go", oldpkgcache))
+ {
+ std::string const srcpkgcache = _config->FindFile("Dir::cache::srcpkgcache");
+ if (srcpkgcache.empty() == false && RealFileExists(srcpkgcache) == true)
+ {
+ _error->PushToStack();
+ pkgCacheFile CacheFile;
+ CacheFile.BuildCaches(NULL, true);
+ _error->RevertToStack();
+ }
+ }
+ }
+
+ // disappearing packages can forward their auto-bit
+ if (disappearedPkgs.empty() == false)
+ Cache.writeStateFile(NULL);
+
+ d->progress->Stop();
+
+ if (RunScripts("DPkg::Post-Invoke") == false)
+ return false;
+
+ return d->dpkg_error.empty();
+}
+
+void SigINT(int /*sig*/) {
+ pkgPackageManager::SigINTStop = true;
+}
+ /*}}}*/
+// pkgDpkgPM::Reset - Dump the contents of the command list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgDPkgPM::Reset()
+{
+ List.erase(List.begin(),List.end());
+}
+ /*}}}*/
+// pkgDpkgPM::WriteApportReport - write out error report pkg failure /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
+{
+ // If apport doesn't exist or isn't installed do nothing
+ // This e.g. prevents messages in 'universes' without apport
+ pkgCache::PkgIterator apportPkg = Cache.FindPkg("apport");
+ if (apportPkg.end() == true || apportPkg->CurrentVer == 0)
+ return;
+
+ string pkgname, reportfile, pkgver, arch;
+ string::size_type pos;
+ FILE *report;
+
+ if (_config->FindB("Dpkg::ApportFailureReport", true) == false)
+ {
+ std::clog << "configured to not write apport reports" << std::endl;
+ return;
+ }
+
+ // only report the first errors
+ if(pkgFailures > _config->FindI("APT::Apport::MaxReports", 3))
+ {
+ std::clog << _("No apport report written because MaxReports is reached already") << std::endl;
+ return;
+ }
+
+ // check if its not a follow up error
+ const char *needle = dgettext("dpkg", "dependency problems - leaving unconfigured");
+ if(strstr(errormsg, needle) != NULL) {
+ std::clog << _("No apport report written because the error message indicates its a followup error from a previous failure.") << std::endl;
+ return;
+ }
+
+ // do not report disk-full failures
+ if(strstr(errormsg, strerror(ENOSPC)) != NULL) {
+ std::clog << _("No apport report written because the error message indicates a disk full error") << std::endl;
+ return;
+ }
+
+ // do not report out-of-memory failures
+ if(strstr(errormsg, strerror(ENOMEM)) != NULL ||
+ strstr(errormsg, "failed to allocate memory") != NULL) {
+ std::clog << _("No apport report written because the error message indicates a out of memory error") << std::endl;
+ return;
+ }
+
+ // do not report bugs regarding inaccessible local files
+ if(strstr(errormsg, strerror(ENOENT)) != NULL ||
+ strstr(errormsg, "cannot access archive") != NULL) {
+ std::clog << _("No apport report written because the error message indicates an issue on the local system") << std::endl;
+ return;
+ }
+
+ // do not report errors encountered when decompressing packages
+ if(strstr(errormsg, "--fsys-tarfile returned error exit status 2") != NULL) {
+ std::clog << _("No apport report written because the error message indicates an issue on the local system") << std::endl;
+ return;
+ }
+
+ // do not report dpkg I/O errors, this is a format string, so we compare
+ // the prefix and the suffix of the error with the dpkg error message
+ vector<string> io_errors;
+ io_errors.push_back(string("failed to read"));
+ io_errors.push_back(string("failed to write"));
+ io_errors.push_back(string("failed to seek"));
+ io_errors.push_back(string("unexpected end of file or stream"));
+
+ for (vector<string>::iterator I = io_errors.begin(); I != io_errors.end(); ++I)
+ {
+ vector<string> list = VectorizeString(dgettext("dpkg", (*I).c_str()), '%');
+ if (list.size() > 1) {
+ // we need to split %s, VectorizeString only allows char so we need
+ // to kill the "s" manually
+ if (list[1].size() > 1) {
+ list[1].erase(0, 1);
+ if(strstr(errormsg, list[0].c_str()) &&
+ strstr(errormsg, list[1].c_str())) {
+ std::clog << _("No apport report written because the error message indicates a dpkg I/O error") << std::endl;
+ return;
+ }
+ }
+ }
+ }
+
+ // get the pkgname and reportfile
+ pkgname = flNotDir(pkgpath);
+ pos = pkgname.find('_');
+ if(pos != string::npos)
+ pkgname = pkgname.substr(0, pos);
+
+ // find the package version and source package name
+ pkgCache::PkgIterator Pkg = Cache.FindPkg(pkgname);
+ if (Pkg.end() == true)
+ {
+ if (pos == std::string::npos || _config->FindB("dpkg::install::recursive::numbered", true) == false)
+ return;
+ auto const dash = pkgname.find_first_not_of("0123456789");
+ if (dash == std::string::npos || pkgname[dash] != '-')
+ return;
+ pkgname.erase(0, dash + 1);
+ Pkg = Cache.FindPkg(pkgname);
+ if (Pkg.end() == true)
+ return;
+ }
+ pkgCache::VerIterator Ver = Cache.GetCandidateVersion(Pkg);
+ if (Ver.end() == true)
+ return;
+ pkgver = Ver.VerStr() == NULL ? "unknown" : Ver.VerStr();
+
+ // if the file exists already, we check:
+ // - if it was reported already (touched by apport).
+ // If not, we do nothing, otherwise
+ // we overwrite it. This is the same behaviour as apport
+ // - if we have a report with the same pkgversion already
+ // then we skip it
+ _config->CndSet("Dir::Apport", "var/crash");
+ reportfile = flCombine(_config->FindDir("Dir::Apport", "var/crash"), pkgname+".0.crash");
+ if(FileExists(reportfile))
+ {
+ struct stat buf;
+ char strbuf[255];
+
+ // check atime/mtime
+ stat(reportfile.c_str(), &buf);
+ if(buf.st_mtime > buf.st_atime)
+ return;
+
+ // check if the existing report is the same version
+ report = fopen(reportfile.c_str(),"r");
+ while(fgets(strbuf, sizeof(strbuf), report) != NULL)
+ {
+ if(strstr(strbuf,"Package:") == strbuf)
+ {
+ char pkgname[255], version[255];
+ if(sscanf(strbuf, "Package: %254s %254s", pkgname, version) == 2)
+ if(strcmp(pkgver.c_str(), version) == 0)
+ {
+ fclose(report);
+ return;
+ }
+ }
+ }
+ fclose(report);
+ }
+
+ // now write the report
+ arch = _config->Find("APT::Architecture");
+ report = fopen(reportfile.c_str(),"w");
+ if(report == NULL)
+ return;
+ if(_config->FindB("DPkgPM::InitialReportOnly",false) == true)
+ chmod(reportfile.c_str(), 0);
+ else
+ chmod(reportfile.c_str(), 0600);
+ fprintf(report, "ProblemType: Package\n");
+ fprintf(report, "Architecture: %s\n", arch.c_str());
+ time_t now = time(NULL);
+ char ctime_buf[26]; // need at least 26 bytes according to ctime(3)
+ fprintf(report, "Date: %s" , ctime_r(&now, ctime_buf));
+ fprintf(report, "Package: %s %s\n", pkgname.c_str(), pkgver.c_str());
+ fprintf(report, "SourcePackage: %s\n", Ver.SourcePkgName());
+ fprintf(report, "ErrorMessage:\n %s\n", errormsg);
+
+ // ensure that the log is flushed
+ if(d->term_out)
+ fflush(d->term_out);
+
+ // attach terminal log it if we have it
+ string logfile_name = _config->FindFile("Dir::Log::Terminal", "/dev/null");
+ if (logfile_name != "/dev/null")
+ {
+ FILE *log = NULL;
+
+ fprintf(report, "DpkgTerminalLog:\n");
+ log = fopen(logfile_name.c_str(),"r");
+ if(log != NULL)
+ {
+ char buf[1024];
+ while( fgets(buf, sizeof(buf), log) != NULL)
+ fprintf(report, " %s", buf);
+ fprintf(report, " \n");
+ fclose(log);
+ }
+ }
+
+ // attach history log it if we have it
+ string histfile_name = _config->FindFile("Dir::Log::History", "/dev/null");
+ if (histfile_name != "/dev/null")
+ {
+ fprintf(report, "DpkgHistoryLog:\n");
+ FILE* log = fopen(histfile_name.c_str(),"r");
+ if(log != NULL)
+ {
+ char buf[1024];
+ while( fgets(buf, sizeof(buf), log) != NULL)
+ fprintf(report, " %s", buf);
+ fclose(log);
+ }
+ }
+
+ // log the ordering, see dpkgpm.h and the "Ops" enum there
+ fprintf(report, "AptOrdering:\n");
+ for (auto && I : List)
+ {
+ char const * opstr = nullptr;
+ switch (I.Op)
+ {
+ case Item::Install: opstr = "Install"; break;
+ case Item::Configure: opstr = "Configure"; break;
+ case Item::Remove: opstr = "Remove"; break;
+ case Item::Purge: opstr = "Purge"; break;
+ case Item::ConfigurePending: opstr = "ConfigurePending"; break;
+ case Item::TriggersPending: opstr = "TriggersPending"; break;
+ case Item::RemovePending: opstr = "RemovePending"; break;
+ case Item::PurgePending: opstr = "PurgePending"; break;
+ }
+ auto const pkgname = I.Pkg.end() ? "NULL" : I.Pkg.FullName();
+ fprintf(report, " %s: %s\n", pkgname.c_str(), opstr);
+ }
+
+ // attach dmesg log (to learn about segfaults)
+ if (FileExists("/bin/dmesg"))
+ {
+ fprintf(report, "Dmesg:\n");
+ FILE *log = popen("/bin/dmesg","r");
+ if(log != NULL)
+ {
+ char buf[1024];
+ while( fgets(buf, sizeof(buf), log) != NULL)
+ fprintf(report, " %s", buf);
+ pclose(log);
+ }
+ }
+
+ // attach df -l log (to learn about filesystem status)
+ if (FileExists("/bin/df"))
+ {
+
+ fprintf(report, "Df:\n");
+ FILE *log = popen("/bin/df -l","r");
+ if(log != NULL)
+ {
+ char buf[1024];
+ while( fgets(buf, sizeof(buf), log) != NULL)
+ fprintf(report, " %s", buf);
+ pclose(log);
+ }
+ }
+
+ fclose(report);
+
+}
+ /*}}}*/
diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h
new file mode 100644
index 0000000..c073b50
--- /dev/null
+++ b/apt-pkg/deb/dpkgpm.h
@@ -0,0 +1,144 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ DPKG Package Manager - Provide an interface to dpkg
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DPKGPM_H
+#define PKGLIB_DPKGPM_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <map>
+#include <string>
+#include <vector>
+#include <stdio.h>
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/init.h>
+#endif
+
+class pkgDepCache;
+namespace APT { namespace Progress { class PackageManager; } }
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+using std::map;
+#endif
+
+class pkgDPkgPMPrivate;
+
+
+class pkgDPkgPM : public pkgPackageManager
+{
+ private:
+ pkgDPkgPMPrivate * const d;
+
+ /** \brief record the disappear action and handle accordingly
+
+ dpkg let packages disappear then they have no files any longer and
+ nothing depends on them. We need to collect this as dpkg as well as
+ APT doesn't know beforehand that the package will disappear, so the
+ only possible option is to tell the user afterwards about it.
+ To enhance the experience we also try to forward the auto-install
+ flag so the disappear-causer(s) are not autoremoved next time -
+ for the transfer to happen the disappeared version needs to depend
+ on the package the flag should be forwarded to and this package
+ needs to declare a Replaces on the disappeared package.
+ \param pkgname Name of the package that disappeared
+ */
+ APT_HIDDEN void handleDisappearAction(std::string const &pkgname);
+ APT_HIDDEN void handleCrossUpgradeAction(std::string const &pkgname);
+
+ protected:
+ int pkgFailures;
+
+ // progress reporting
+ struct DpkgState
+ {
+ const char *state; // the dpkg state (e.g. "unpack")
+ const char *str; // the human readable translation of the state
+ };
+
+ // the dpkg states that the pkg will run through, the string is
+ // the package, the vector contains the dpkg states that the package
+ // will go through
+ std::map<std::string,std::vector<struct DpkgState> > PackageOps;
+ // the dpkg states that are already done; the string is the package
+ // the int is the state that is already done (e.g. a package that is
+ // going to be install is already in state "half-installed")
+ std::map<std::string,unsigned int> PackageOpsDone;
+
+ // progress reporting
+ unsigned int PackagesDone;
+ unsigned int PackagesTotal;
+
+ public:
+ struct Item
+ {
+ enum Ops {Install, Configure, Remove, Purge, ConfigurePending, TriggersPending,
+ RemovePending, PurgePending } Op;
+ std::string File;
+ PkgIterator Pkg;
+ Item(Ops Op,PkgIterator Pkg,std::string File = "") : Op(Op),
+ File(File), Pkg(Pkg) {};
+ Item() {};
+ };
+ protected:
+ std::vector<Item> List;
+
+ // Helpers
+ bool RunScriptsWithPkgs(const char *Cnf);
+ APT_DEPRECATED_MSG("Use SendPkgInfo with the version as parameter instead") bool SendV2Pkgs(FILE *F);
+ bool SendPkgsInfo(FILE * const F, unsigned int const &Version);
+ void WriteHistoryTag(std::string const &tag, std::string value);
+ std::string ExpandShortPackageName(pkgDepCache &Cache,
+ const std::string &short_pkgname);
+
+ // Terminal progress
+ void SendTerminalProgress(float percentage);
+
+ // apport integration
+ void WriteApportReport(const char *pkgpath, const char *errormsg);
+
+ // dpkg log
+ bool OpenLog();
+ bool CloseLog();
+
+ // helper
+ void BuildPackagesProgressMap();
+ void StartPtyMagic();
+ void SetupSlavePtyMagic();
+ void StopPtyMagic();
+
+ // input processing
+ void DoStdin(int master);
+ void DoTerminalPty(int master);
+ void DoDpkgStatusFd(int statusfd);
+ void ProcessDpkgStatusLine(char *line);
+
+ // The Actual installation implementation
+ virtual bool Install(PkgIterator Pkg,std::string File) APT_OVERRIDE;
+ virtual bool Configure(PkgIterator Pkg) APT_OVERRIDE;
+ virtual bool Remove(PkgIterator Pkg,bool Purge = false) APT_OVERRIDE;
+
+ virtual bool Go(APT::Progress::PackageManager *progress) APT_OVERRIDE;
+ APT_DEPRECATED_MSG("Use overload with explicit progress manager") virtual bool Go(int StatusFd=-1) APT_OVERRIDE;
+
+ virtual void Reset() APT_OVERRIDE;
+
+ public:
+
+ pkgDPkgPM(pkgDepCache *Cache);
+ virtual ~pkgDPkgPM();
+
+ APT_HIDDEN static bool ExpandPendingCalls(std::vector<Item> &List, pkgDepCache &Cache);
+};
+
+void SigINT(int sig);
+
+#endif
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
new file mode 100644
index 0000000..510f2d3
--- /dev/null
+++ b/apt-pkg/depcache.cc
@@ -0,0 +1,2040 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Dependency Cache - Caches Dependency information.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/prettyprinters.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+#include <apt-pkg/version.h>
+#include <apt-pkg/versionmatch.h>
+
+#include <algorithm>
+#include <iostream>
+#include <list>
+#include <set>
+#include <string>
+#include <utility>
+#include <vector>
+#include <stdio.h>
+#include <string.h>
+
+#include <sys/stat.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using std::string;
+
+// helper for Install-Recommends-Sections and Never-MarkAuto-Sections /*{{{*/
+static bool
+ConfigValueInSubTree(const char* SubTree, const char *needle)
+{
+ Configuration::Item const *Opts;
+ Opts = _config->Tree(SubTree);
+ if (Opts != 0 && Opts->Child != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ if (strcmp(needle, Opts->Value.c_str()) == 0)
+ return true;
+ }
+ }
+ return false;
+}
+ /*}}}*/
+pkgDepCache::ActionGroup::ActionGroup(pkgDepCache &cache) : /*{{{*/
+ d(NULL), cache(cache), released(false)
+{
+ ++cache.group_level;
+}
+
+void pkgDepCache::ActionGroup::release()
+{
+ if(!released)
+ {
+ if(cache.group_level == 0)
+ std::cerr << "W: Unbalanced action groups, expect badness" << std::endl;
+ else
+ {
+ --cache.group_level;
+
+ if(cache.group_level == 0)
+ cache.MarkAndSweep();
+ }
+
+ released = true;
+ }
+}
+
+pkgDepCache::ActionGroup::~ActionGroup()
+{
+ release();
+}
+ /*}}}*/
+// DepCache::pkgDepCache - Constructors /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgDepCache::pkgDepCache(pkgCache * const pCache,Policy * const Plcy) :
+ group_level(0), Cache(pCache), PkgState(0), DepState(0),
+ iUsrSize(0), iDownloadSize(0), iInstCount(0), iDelCount(0), iKeepCount(0),
+ iBrokenCount(0), iPolicyBrokenCount(0), iBadCount(0), d(NULL)
+{
+ DebugMarker = _config->FindB("Debug::pkgDepCache::Marker", false);
+ DebugAutoInstall = _config->FindB("Debug::pkgDepCache::AutoInstall", false);
+ delLocalPolicy = 0;
+ LocalPolicy = Plcy;
+ if (LocalPolicy == 0)
+ delLocalPolicy = LocalPolicy = new Policy;
+}
+ /*}}}*/
+// DepCache::~pkgDepCache - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgDepCache::~pkgDepCache()
+{
+ delete [] PkgState;
+ delete [] DepState;
+ delete delLocalPolicy;
+}
+ /*}}}*/
+// DepCache::Init - Generate the initial extra structures. /*{{{*/
+// ---------------------------------------------------------------------
+/* This allocats the extension buffers and initializes them. */
+bool pkgDepCache::Init(OpProgress * const Prog)
+{
+ // Suppress mark updates during this operation (just in case) and
+ // run a mark operation when Init terminates.
+ ActionGroup actions(*this);
+
+ delete [] PkgState;
+ delete [] DepState;
+ PkgState = new StateCache[Head().PackageCount];
+ DepState = new unsigned char[Head().DependsCount];
+ memset(PkgState,0,sizeof(*PkgState)*Head().PackageCount);
+ memset(DepState,0,sizeof(*DepState)*Head().DependsCount);
+
+ if (Prog != 0)
+ {
+ Prog->OverallProgress(0,2*Head().PackageCount,Head().PackageCount,
+ _("Building dependency tree"));
+ Prog->SubProgress(Head().PackageCount,_("Candidate versions"));
+ }
+
+ /* Set the current state of everything. In this state all of the
+ packages are kept exactly as is. See AllUpgrade */
+ int Done = 0;
+ for (PkgIterator I = PkgBegin(); I.end() != true; ++I, ++Done)
+ {
+ if (Prog != 0 && Done%20 == 0)
+ Prog->Progress(Done);
+
+ // Find the proper cache slot
+ StateCache &State = PkgState[I->ID];
+ State.iFlags = 0;
+
+ // Figure out the install version
+ State.CandidateVer = LocalPolicy->GetCandidateVer(I);
+ State.InstallVer = I.CurrentVer();
+ State.Mode = ModeKeep;
+
+ State.Update(I,*this);
+ }
+
+ if (Prog != 0)
+ {
+ Prog->OverallProgress(Head().PackageCount,2*Head().PackageCount,
+ Head().PackageCount,
+ _("Building dependency tree"));
+ Prog->SubProgress(Head().PackageCount,_("Dependency generation"));
+ }
+
+ Update(Prog);
+
+ if(Prog != 0)
+ Prog->Done();
+
+ return true;
+}
+ /*}}}*/
+bool pkgDepCache::readStateFile(OpProgress * const Prog) /*{{{*/
+{
+ FileFd state_file;
+ string const state = _config->FindFile("Dir::State::extended_states");
+ if(RealFileExists(state)) {
+ state_file.Open(state, FileFd::ReadOnly, FileFd::Extension);
+ off_t const file_size = state_file.Size();
+ if(Prog != NULL)
+ Prog->OverallProgress(0, file_size, 1,
+ _("Reading state information"));
+
+ pkgTagFile tagfile(&state_file);
+ pkgTagSection section;
+ off_t amt = 0;
+ bool const debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);
+ while(tagfile.Step(section)) {
+ string const pkgname = section.FindS("Package");
+ string pkgarch = section.FindS("Architecture");
+ if (pkgarch.empty() == true)
+ pkgarch = "any";
+ pkgCache::PkgIterator pkg = Cache->FindPkg(pkgname, pkgarch);
+ // Silently ignore unknown packages and packages with no actual version.
+ if(pkg.end() == true || pkg->VersionList == 0)
+ continue;
+
+ short const reason = section.FindI("Auto-Installed", 0);
+ if(reason > 0)
+ {
+ PkgState[pkg->ID].Flags |= Flag::Auto;
+ if (unlikely(debug_autoremove))
+ std::clog << "Auto-Installed : " << pkg.FullName() << std::endl;
+ if (pkgarch == "any")
+ {
+ pkgCache::GrpIterator G = pkg.Group();
+ for (pkg = G.NextPkg(pkg); pkg.end() != true; pkg = G.NextPkg(pkg))
+ if (pkg->VersionList != 0)
+ PkgState[pkg->ID].Flags |= Flag::Auto;
+ }
+ }
+ amt += section.size();
+ if(Prog != NULL)
+ Prog->OverallProgress(amt, file_size, 1,
+ _("Reading state information"));
+ }
+ if(Prog != NULL)
+ Prog->OverallProgress(file_size, file_size, 1,
+ _("Reading state information"));
+ }
+
+ return true;
+}
+ /*}}}*/
+bool pkgDepCache::writeStateFile(OpProgress * const /*prog*/, bool const InstalledOnly) /*{{{*/
+{
+ bool const debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);
+
+ if(debug_autoremove)
+ std::clog << "pkgDepCache::writeStateFile()" << std::endl;
+
+ FileFd StateFile;
+ string const state = _config->FindFile("Dir::State::extended_states");
+ if (CreateAPTDirectoryIfNeeded(_config->FindDir("Dir::State"), flNotFile(state)) == false)
+ return false;
+
+ // if it does not exist, create a empty one
+ if(!RealFileExists(state))
+ {
+ StateFile.Open(state, FileFd::WriteAtomic, FileFd::Extension);
+ StateFile.Close();
+ }
+
+ // open it
+ if (!StateFile.Open(state, FileFd::ReadOnly, FileFd::Extension))
+ return _error->Error(_("Failed to open StateFile %s"),
+ state.c_str());
+
+ FileFd OutFile(state, FileFd::ReadWrite | FileFd::Atomic, FileFd::Extension);
+ if (OutFile.IsOpen() == false || OutFile.Failed() == true)
+ return _error->Error(_("Failed to write temporary StateFile %s"), state.c_str());
+
+ // first merge with the existing sections
+ pkgTagFile tagfile(&StateFile);
+ pkgTagSection section;
+ std::set<string> pkgs_seen;
+ while(tagfile.Step(section)) {
+ string const pkgname = section.FindS("Package");
+ string pkgarch = section.FindS("Architecture");
+ if (pkgarch.empty() == true)
+ pkgarch = "native";
+ // Silently ignore unknown packages and packages with no actual
+ // version.
+ pkgCache::PkgIterator pkg = Cache->FindPkg(pkgname, pkgarch);
+ if(pkg.end() || pkg.VersionList().end())
+ continue;
+ StateCache const &P = PkgState[pkg->ID];
+ bool newAuto = (P.Flags & Flag::Auto);
+ // reset to default (=manual) not installed or now-removed ones if requested
+ if (InstalledOnly && (
+ (pkg->CurrentVer == 0 && P.Mode != ModeInstall) ||
+ (pkg->CurrentVer != 0 && P.Mode == ModeDelete)))
+ newAuto = false;
+ if (newAuto == false)
+ {
+ // The section is obsolete if it contains no other tag
+ auto const count = section.Count();
+ if (count < 2 ||
+ (count == 2 && section.Exists("Auto-Installed")) ||
+ (count == 3 && section.Exists("Auto-Installed") && section.Exists("Architecture")))
+ {
+ if(debug_autoremove)
+ std::clog << "Drop obsolete section with " << count << " fields for " << APT::PrettyPkg(this, pkg) << std::endl;
+ continue;
+ }
+ }
+
+ if(debug_autoremove)
+ std::clog << "Update existing AutoInstall to " << newAuto << " for " << APT::PrettyPkg(this, pkg) << std::endl;
+
+ std::vector<pkgTagSection::Tag> rewrite;
+ rewrite.push_back(pkgTagSection::Tag::Rewrite("Architecture", pkg.Arch()));
+ rewrite.push_back(pkgTagSection::Tag::Rewrite("Auto-Installed", newAuto ? "1" : "0"));
+ section.Write(OutFile, NULL, rewrite);
+ if (OutFile.Write("\n", 1) == false)
+ return false;
+ pkgs_seen.insert(pkg.FullName());
+ }
+
+ // then write the ones we have not seen yet
+ for(pkgCache::PkgIterator pkg=Cache->PkgBegin(); !pkg.end(); ++pkg) {
+ StateCache const &P = PkgState[pkg->ID];
+ if(P.Flags & Flag::Auto) {
+ if (pkgs_seen.find(pkg.FullName()) != pkgs_seen.end()) {
+ if(debug_autoremove)
+ std::clog << "Skipping already written " << APT::PrettyPkg(this, pkg) << std::endl;
+ continue;
+ }
+ // skip not installed ones if requested
+ if (InstalledOnly && (
+ (pkg->CurrentVer == 0 && P.Mode != ModeInstall) ||
+ (pkg->CurrentVer != 0 && P.Mode == ModeDelete)))
+ continue;
+ if(debug_autoremove)
+ std::clog << "Writing new AutoInstall: " << APT::PrettyPkg(this, pkg) << std::endl;
+ std::string stanza = "Package: ";
+ stanza.append(pkg.Name())
+ .append("\nArchitecture: ").append(pkg.Arch())
+ .append("\nAuto-Installed: 1\n\n");
+ if (OutFile.Write(stanza.c_str(), stanza.length()) == false)
+ return false;
+ }
+ }
+ if (StateFile.Failed())
+ {
+ OutFile.OpFail();
+ return false;
+ }
+ if (OutFile.Close() == false)
+ return false;
+ chmod(state.c_str(), 0644);
+ return true;
+}
+ /*}}}*/
+// DepCache::CheckDep - Checks a single dependency /*{{{*/
+// ---------------------------------------------------------------------
+/* This first checks the dependency against the main target package and
+ then walks along the package provides list and checks if each provides
+ will be installed then checks the provides against the dep. Res will be
+ set to the package which was used to satisfy the dep. */
+bool pkgDepCache::CheckDep(DepIterator const &Dep,int const Type,PkgIterator &Res)
+{
+ Res = Dep.TargetPkg();
+
+ /* Check simple depends. A depends -should- never self match but
+ we allow it anyhow because dpkg does. Technically it is a packaging
+ bug. Conflicts may never self match */
+ if (Dep.IsIgnorable(Res) == false)
+ {
+ // Check the base package
+ if (Type == NowVersion)
+ {
+ if (Res->CurrentVer != 0 && Dep.IsSatisfied(Res.CurrentVer()) == true)
+ return true;
+ }
+ else if (Type == InstallVersion)
+ {
+ if (PkgState[Res->ID].InstallVer != 0 &&
+ Dep.IsSatisfied(PkgState[Res->ID].InstVerIter(*this)) == true)
+ return true;
+ }
+ else if (Type == CandidateVersion)
+ if (PkgState[Res->ID].CandidateVer != 0 &&
+ Dep.IsSatisfied(PkgState[Res->ID].CandidateVerIter(*this)) == true)
+ return true;
+ }
+
+ if (Dep->Type == Dep::Obsoletes)
+ return false;
+
+ // Check the providing packages
+ PrvIterator P = Dep.TargetPkg().ProvidesList();
+ for (; P.end() != true; ++P)
+ {
+ if (Dep.IsIgnorable(P) == true)
+ continue;
+
+ // Check if the provides is a hit
+ if (Type == NowVersion)
+ {
+ if (P.OwnerPkg().CurrentVer() != P.OwnerVer())
+ continue;
+ }
+ else if (Type == InstallVersion)
+ {
+ StateCache &State = PkgState[P.OwnerPkg()->ID];
+ if (State.InstallVer != (Version *)P.OwnerVer())
+ continue;
+ }
+ else if (Type == CandidateVersion)
+ {
+ StateCache &State = PkgState[P.OwnerPkg()->ID];
+ if (State.CandidateVer != (Version *)P.OwnerVer())
+ continue;
+ }
+
+ // Compare the versions.
+ if (Dep.IsSatisfied(P) == true)
+ {
+ Res = P.OwnerPkg();
+ return true;
+ }
+ }
+
+ return false;
+}
+ /*}}}*/
+// DepCache::AddSizes - Add the packages sizes to the counters /*{{{*/
+// ---------------------------------------------------------------------
+/* Call with Inverse = true to perform the inverse operation */
+void pkgDepCache::AddSizes(const PkgIterator &Pkg, bool const Inverse)
+{
+ StateCache &P = PkgState[Pkg->ID];
+
+ if (Pkg->VersionList == 0)
+ return;
+
+ if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
+ P.Keep() == true)
+ return;
+
+ // Compute the size data
+ if (P.NewInstall() == true)
+ {
+ if (Inverse == false) {
+ iUsrSize += P.InstVerIter(*this)->InstalledSize;
+ iDownloadSize += P.InstVerIter(*this)->Size;
+ } else {
+ iUsrSize -= P.InstVerIter(*this)->InstalledSize;
+ iDownloadSize -= P.InstVerIter(*this)->Size;
+ }
+ return;
+ }
+
+ // Upgrading
+ if (Pkg->CurrentVer != 0 &&
+ (P.InstallVer != (Version *)Pkg.CurrentVer() ||
+ (P.iFlags & ReInstall) == ReInstall) && P.InstallVer != 0)
+ {
+ if (Inverse == false) {
+ iUsrSize -= Pkg.CurrentVer()->InstalledSize;
+ iUsrSize += P.InstVerIter(*this)->InstalledSize;
+ iDownloadSize += P.InstVerIter(*this)->Size;
+ } else {
+ iUsrSize -= P.InstVerIter(*this)->InstalledSize;
+ iUsrSize += Pkg.CurrentVer()->InstalledSize;
+ iDownloadSize -= P.InstVerIter(*this)->Size;
+ }
+ return;
+ }
+
+ // Reinstall
+ if (Pkg.State() == pkgCache::PkgIterator::NeedsUnpack &&
+ P.Delete() == false)
+ {
+ if (Inverse == false)
+ iDownloadSize += P.InstVerIter(*this)->Size;
+ else
+ iDownloadSize -= P.InstVerIter(*this)->Size;
+ return;
+ }
+
+ // Removing
+ if (Pkg->CurrentVer != 0 && P.InstallVer == 0)
+ {
+ if (Inverse == false)
+ iUsrSize -= Pkg.CurrentVer()->InstalledSize;
+ else
+ iUsrSize += Pkg.CurrentVer()->InstalledSize;
+ return;
+ }
+}
+ /*}}}*/
+// DepCache::AddStates - Add the package to the state counter /*{{{*/
+// ---------------------------------------------------------------------
+/* This routine is tricky to use, you must make sure that it is never
+ called twice for the same package. This means the Remove/Add section
+ should be as short as possible and not encompass any code that will
+ call Remove/Add itself. Remember, dependencies can be circular so
+ while processing a dep for Pkg it is possible that Add/Remove
+ will be called on Pkg */
+void pkgDepCache::AddStates(const PkgIterator &Pkg, bool const Invert)
+{
+ signed char const Add = (Invert == false) ? 1 : -1;
+ StateCache &State = PkgState[Pkg->ID];
+
+ // The Package is broken (either minimal dep or policy dep)
+ if ((State.DepState & DepInstMin) != DepInstMin)
+ iBrokenCount += Add;
+ if ((State.DepState & DepInstPolicy) != DepInstPolicy)
+ iPolicyBrokenCount += Add;
+
+ // Bad state
+ if (Pkg.State() != PkgIterator::NeedsNothing)
+ iBadCount += Add;
+
+ // Not installed
+ if (Pkg->CurrentVer == 0)
+ {
+ if (State.Mode == ModeDelete &&
+ (State.iFlags & Purge) == Purge && Pkg.Purge() == false)
+ iDelCount += Add;
+
+ if (State.Mode == ModeInstall)
+ iInstCount += Add;
+ return;
+ }
+
+ // Installed, no upgrade
+ if (State.Status == 0)
+ {
+ if (State.Mode == ModeDelete)
+ iDelCount += Add;
+ else
+ if ((State.iFlags & ReInstall) == ReInstall)
+ iInstCount += Add;
+ return;
+ }
+
+ // Alll 3 are possible
+ if (State.Mode == ModeDelete)
+ iDelCount += Add;
+ else if (State.Mode == ModeKeep)
+ iKeepCount += Add;
+ else if (State.Mode == ModeInstall)
+ iInstCount += Add;
+}
+ /*}}}*/
+// DepCache::BuildGroupOrs - Generate the Or group dep data /*{{{*/
+// ---------------------------------------------------------------------
+/* The or group results are stored in the last item of the or group. This
+ allows easy detection of the state of a whole or'd group. */
+void pkgDepCache::BuildGroupOrs(VerIterator const &V)
+{
+ unsigned char Group = 0;
+ for (DepIterator D = V.DependsList(); D.end() != true; ++D)
+ {
+ // Build the dependency state.
+ unsigned char &State = DepState[D->ID];
+
+ /* Invert for Conflicts. We have to do this twice to get the
+ right sense for a conflicts group */
+ if (D.IsNegative() == true)
+ State = ~State;
+
+ // Add to the group if we are within an or..
+ State &= 0x7;
+ Group |= State;
+ State |= Group << 3;
+ if ((D->CompareOp & Dep::Or) != Dep::Or)
+ Group = 0;
+
+ // Invert for Conflicts
+ if (D.IsNegative() == true)
+ State = ~State;
+ }
+}
+ /*}}}*/
+// DepCache::VersionState - Perform a pass over a dependency list /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to run over a dependency list and determine the dep
+ state of the list, filtering it through both a Min check and a Policy
+ check. The return result will have SetMin/SetPolicy low if a check
+ fails. It uses the DepState cache for it's computations. */
+unsigned char pkgDepCache::VersionState(DepIterator D, unsigned char const Check,
+ unsigned char const SetMin,
+ unsigned char const SetPolicy) const
+{
+ unsigned char Dep = 0xFF;
+ while (D.end() != true)
+ {
+ // the last or-dependency has the state of all previous or'ed
+ DepIterator Start, End;
+ D.GlobOr(Start, End);
+ // ignore if we are called with Dep{Install,…} or DepG{Install,…}
+ // the later would be more correct, but the first is what we get
+ unsigned char const State = DepState[End->ID] | (DepState[End->ID] >> 3);
+
+ // Minimum deps that must be satisfied to have a working package
+ if (Start.IsCritical() == true)
+ {
+ if ((State & Check) != Check)
+ return Dep &= ~(SetMin | SetPolicy);
+ }
+ // Policy deps that must be satisfied to install the package
+ else if (IsImportantDep(Start) == true &&
+ (State & Check) != Check)
+ Dep &= ~SetPolicy;
+ }
+ return Dep;
+}
+ /*}}}*/
+// DepCache::DependencyState - Compute the 3 results for a dep /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the main dependency computation bit. It computes the 3 main
+ results for a dependency: Now, Install and Candidate. Callers must
+ invert the result if dealing with conflicts. */
+unsigned char pkgDepCache::DependencyState(DepIterator const &D)
+{
+ unsigned char State = 0;
+
+ if (CheckDep(D,NowVersion) == true)
+ State |= DepNow;
+ if (CheckDep(D,InstallVersion) == true)
+ State |= DepInstall;
+ if (CheckDep(D,CandidateVersion) == true)
+ State |= DepCVer;
+
+ return State;
+}
+ /*}}}*/
+// DepCache::UpdateVerState - Compute the Dep member of the state /*{{{*/
+// ---------------------------------------------------------------------
+/* This determines the combined dependency representation of a package
+ for its two states now and install. This is done by using the pre-generated
+ dependency information. */
+void pkgDepCache::UpdateVerState(PkgIterator const &Pkg)
+{
+ // Empty deps are always true
+ StateCache &State = PkgState[Pkg->ID];
+ State.DepState = 0xFF;
+
+ // Check the Current state
+ if (Pkg->CurrentVer != 0)
+ {
+ DepIterator D = Pkg.CurrentVer().DependsList();
+ State.DepState &= VersionState(D,DepNow,DepNowMin,DepNowPolicy);
+ }
+
+ /* Check the candidate state. We do not compare against the whole as
+ a candidate state but check the candidate version against the
+ install states */
+ if (State.CandidateVer != 0)
+ {
+ DepIterator D = State.CandidateVerIter(*this).DependsList();
+ State.DepState &= VersionState(D,DepInstall,DepCandMin,DepCandPolicy);
+ }
+
+ // Check target state which can only be current or installed
+ if (State.InstallVer != 0)
+ {
+ DepIterator D = State.InstVerIter(*this).DependsList();
+ State.DepState &= VersionState(D,DepInstall,DepInstMin,DepInstPolicy);
+ }
+}
+ /*}}}*/
+// DepCache::Update - Figure out all the state information /*{{{*/
+// ---------------------------------------------------------------------
+/* This will figure out the state of all the packages and all the
+ dependencies based on the current policy. */
+void pkgDepCache::Update(OpProgress * const Prog)
+{
+ iUsrSize = 0;
+ iDownloadSize = 0;
+ iInstCount = 0;
+ iDelCount = 0;
+ iKeepCount = 0;
+ iBrokenCount = 0;
+ iPolicyBrokenCount = 0;
+ iBadCount = 0;
+
+ // Perform the depends pass
+ int Done = 0;
+ for (PkgIterator I = PkgBegin(); I.end() != true; ++I, ++Done)
+ {
+ if (Prog != 0 && Done%20 == 0)
+ Prog->Progress(Done);
+ for (VerIterator V = I.VersionList(); V.end() != true; ++V)
+ {
+ unsigned char Group = 0;
+
+ for (DepIterator D = V.DependsList(); D.end() != true; ++D)
+ {
+ // Build the dependency state.
+ unsigned char &State = DepState[D->ID];
+ State = DependencyState(D);
+
+ // Add to the group if we are within an or..
+ Group |= State;
+ State |= Group << 3;
+ if ((D->CompareOp & Dep::Or) != Dep::Or)
+ Group = 0;
+
+ // Invert for Conflicts
+ if (D.IsNegative() == true)
+ State = ~State;
+ }
+ }
+
+ // Compute the package dependency state and size additions
+ AddSizes(I);
+ UpdateVerState(I);
+ AddStates(I);
+ }
+
+ if (Prog != 0)
+ Prog->Progress(Done);
+
+ readStateFile(Prog);
+}
+ /*}}}*/
+// DepCache::Update - Update the deps list of a package /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a helper for update that only does the dep portion of the scan.
+ It is mainly meant to scan reverse dependencies. */
+void pkgDepCache::Update(DepIterator D)
+{
+ // Update the reverse deps
+ for (;D.end() != true; ++D)
+ {
+ unsigned char &State = DepState[D->ID];
+ State = DependencyState(D);
+
+ // Invert for Conflicts
+ if (D.IsNegative() == true)
+ State = ~State;
+
+ RemoveStates(D.ParentPkg());
+ BuildGroupOrs(D.ParentVer());
+ UpdateVerState(D.ParentPkg());
+ AddStates(D.ParentPkg());
+ }
+}
+ /*}}}*/
+// DepCache::Update - Update the related deps of a package /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called whenever the state of a package changes. It updates
+ all cached dependencies related to this package. */
+void pkgDepCache::Update(PkgIterator const &Pkg)
+{
+ // Recompute the dep of the package
+ RemoveStates(Pkg);
+ UpdateVerState(Pkg);
+ AddStates(Pkg);
+
+ // Update the reverse deps
+ Update(Pkg.RevDependsList());
+
+ // Update the provides map for the current ver
+ if (Pkg->CurrentVer != 0)
+ for (PrvIterator P = Pkg.CurrentVer().ProvidesList();
+ P.end() != true; ++P)
+ Update(P.ParentPkg().RevDependsList());
+
+ // Update the provides map for the candidate ver
+ if (PkgState[Pkg->ID].CandidateVer != 0)
+ for (PrvIterator P = PkgState[Pkg->ID].CandidateVerIter(*this).ProvidesList();
+ P.end() != true; ++P)
+ Update(P.ParentPkg().RevDependsList());
+}
+ /*}}}*/
+// DepCache::MarkKeep - Put the package in the keep state /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
+ unsigned long Depth)
+{
+ if (IsModeChangeOk(ModeKeep, Pkg, Depth, FromUser) == false)
+ return false;
+
+ /* Reject an attempt to keep a non-source broken installed package, those
+ must be upgraded */
+ if (Pkg.State() == PkgIterator::NeedsUnpack &&
+ Pkg.CurrentVer().Downloadable() == false)
+ return false;
+
+ /* We changed the soft state all the time so the UI is a bit nicer
+ to use */
+ StateCache &P = PkgState[Pkg->ID];
+
+ // Check that it is not already kept
+ if (P.Mode == ModeKeep)
+ return true;
+
+ if (Soft == true)
+ P.iFlags |= AutoKept;
+ else
+ P.iFlags &= ~AutoKept;
+
+ ActionGroup group(*this);
+
+#if 0 // resetting the autoflag here means we lose the
+ // auto-mark information if a user selects a package for removal
+ // but changes his mind then and sets it for keep again
+ // - this makes sense as default when all Garbage dependencies
+ // are automatically marked for removal (as aptitude does).
+ // setting a package for keep then makes it no longer autoinstalled
+ // for all other use-case this action is rather surprising
+ if(FromUser && !P.Marked)
+ P.Flags &= ~Flag::Auto;
+#endif
+
+ if (DebugMarker == true)
+ std::clog << OutputInDepth(Depth) << "MarkKeep " << APT::PrettyPkg(this, Pkg) << " FU=" << FromUser << std::endl;
+
+ RemoveSizes(Pkg);
+ RemoveStates(Pkg);
+
+ P.Mode = ModeKeep;
+ if (Pkg->CurrentVer == 0)
+ P.InstallVer = 0;
+ else
+ P.InstallVer = Pkg.CurrentVer();
+
+ AddStates(Pkg);
+ Update(Pkg);
+ AddSizes(Pkg);
+
+ return true;
+}
+ /*}}}*/
+// DepCache::MarkDelete - Put the package in the delete state /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge,
+ unsigned long Depth, bool FromUser)
+{
+ if (IsModeChangeOk(ModeDelete, Pkg, Depth, FromUser) == false)
+ return false;
+
+ StateCache &P = PkgState[Pkg->ID];
+
+ // Check that it is not already marked for delete
+ if ((P.Mode == ModeDelete || P.InstallVer == 0) &&
+ (Pkg.Purge() == true || rPurge == false))
+ return true;
+
+ // check if we are allowed to remove the package
+ if (IsDeleteOk(Pkg,rPurge,Depth,FromUser) == false)
+ return false;
+
+ P.iFlags &= ~(AutoKept | Purge);
+ if (rPurge == true)
+ P.iFlags |= Purge;
+
+ ActionGroup group(*this);
+
+ if (FromUser == false)
+ {
+ VerIterator const PV = P.InstVerIter(*this);
+ if (PV.end() == false)
+ {
+ // removed metapackages mark their dependencies as manual to prevent in "desktop depends browser, texteditor"
+ // the removal of browser to suggest the removal of desktop and texteditor.
+ // We ignore the auto-bit here as we can't deal with metapackage cascardes otherwise.
+ // We do not check for or-groups here as we don't know which package takes care of
+ // providing the feature the user likes e.g.: browser1 | browser2 | browser3
+ // Temporary removals are effected by this as well, which is bad, but unlikely in practice
+ bool const PinNeverMarkAutoSection = (PV->Section != 0 && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", PV.Section()));
+ if (PinNeverMarkAutoSection)
+ {
+ for (DepIterator D = PV.DependsList(); D.end() != true; ++D)
+ {
+ if (D.IsMultiArchImplicit() == true || D.IsNegative() == true || IsImportantDep(D) == false)
+ continue;
+
+ pkgCacheFile CacheFile(this);
+ APT::VersionList verlist = APT::VersionList::FromDependency(CacheFile, D, APT::CacheSetHelper::INSTALLED);
+ for (auto const &V : verlist)
+ {
+ PkgIterator const DP = V.ParentPkg();
+ if(DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << "Setting " << DP.FullName(false) << " NOT as auto-installed (direct "
+ << D.DepType() << " of " << Pkg.FullName(false) << " which is in APT::Never-MarkAuto-Sections)" << std::endl;
+
+ MarkAuto(DP, false);
+ }
+ }
+ }
+ }
+ }
+
+ if (DebugMarker == true)
+ std::clog << OutputInDepth(Depth) << (rPurge ? "MarkPurge " : "MarkDelete ") << APT::PrettyPkg(this, Pkg) << " FU=" << FromUser << std::endl;
+
+ RemoveSizes(Pkg);
+ RemoveStates(Pkg);
+
+ if (Pkg->CurrentVer == 0 && (Pkg.Purge() == true || rPurge == false))
+ P.Mode = ModeKeep;
+ else
+ P.Mode = ModeDelete;
+ P.InstallVer = 0;
+
+ AddStates(Pkg);
+ Update(Pkg);
+ AddSizes(Pkg);
+
+ return true;
+}
+ /*}}}*/
+// DepCache::IsDeleteOk - check if it is ok to remove this package /*{{{*/
+// ---------------------------------------------------------------------
+/* The default implementation tries to prevent deletion of install requests.
+ dpkg holds are enforced by the private IsModeChangeOk */
+bool pkgDepCache::IsDeleteOk(PkgIterator const &Pkg,bool rPurge,
+ unsigned long Depth, bool FromUser)
+{
+ return IsDeleteOkProtectInstallRequests(Pkg, rPurge, Depth, FromUser);
+}
+bool pkgDepCache::IsDeleteOkProtectInstallRequests(PkgIterator const &Pkg,
+ bool const /*rPurge*/, unsigned long const Depth, bool const FromUser)
+{
+ if (FromUser == false && Pkg->CurrentVer == 0)
+ {
+ StateCache &P = PkgState[Pkg->ID];
+ if (P.InstallVer != 0 && P.Status == 2 && (P.Flags & Flag::Auto) != Flag::Auto)
+ {
+ if (DebugMarker == true)
+ std::clog << OutputInDepth(Depth) << "Manual install request prevents MarkDelete of " << APT::PrettyPkg(this, Pkg) << std::endl;
+ return false;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// DepCache::IsModeChangeOk - check if it is ok to change the mode /*{{{*/
+// ---------------------------------------------------------------------
+/* this is used by all Mark methods on the very first line to check sanity
+ and prevents mode changes for packages on hold for example.
+ If you want to check Mode specific stuff you can use the virtual public
+ Is<Mode>Ok methods instead */
+static char const* PrintMode(char const mode)
+{
+ switch (mode)
+ {
+ case pkgDepCache::ModeInstall: return "Install";
+ case pkgDepCache::ModeKeep: return "Keep";
+ case pkgDepCache::ModeDelete: return "Delete";
+ case pkgDepCache::ModeGarbage: return "Garbage";
+ default: return "UNKNOWN";
+ }
+}
+bool pkgDepCache::IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
+ unsigned long const Depth, bool const FromUser)
+{
+ // we are not trying to hard…
+ if (unlikely(Depth > 100))
+ return false;
+
+ // general sanity
+ if (unlikely(Pkg.end() == true || Pkg->VersionList == 0))
+ return false;
+
+ // the user is always right
+ if (FromUser == true)
+ return true;
+
+ StateCache &P = PkgState[Pkg->ID];
+ // not changing the mode is obviously also fine as we might want to call
+ // e.g. MarkInstall multiple times with different arguments for the same package
+ if (P.Mode == mode)
+ return true;
+
+ // if previous state was set by user only user can reset it
+ if ((P.iFlags & Protected) == Protected)
+ {
+ if (unlikely(DebugMarker == true))
+ std::clog << OutputInDepth(Depth) << "Ignore Mark" << PrintMode(mode)
+ << " of " << APT::PrettyPkg(this, Pkg) << " as its mode (" << PrintMode(P.Mode)
+ << ") is protected" << std::endl;
+ return false;
+ }
+ // enforce dpkg holds
+ else if (mode != ModeKeep && Pkg->SelectedState == pkgCache::State::Hold &&
+ _config->FindB("APT::Ignore-Hold",false) == false)
+ {
+ if (unlikely(DebugMarker == true))
+ std::clog << OutputInDepth(Depth) << "Hold prevents Mark" << PrintMode(mode)
+ << " of " << APT::PrettyPkg(this, Pkg) << std::endl;
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
+// DepCache::MarkInstall - Put the package in the install state /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+struct CompareProviders {
+ pkgCache::PkgIterator const Pkg;
+ explicit CompareProviders(pkgCache::DepIterator const &Dep) : Pkg(Dep.TargetPkg()) {};
+ //bool operator() (APT::VersionList::iterator const &AV, APT::VersionList::iterator const &BV)
+ bool operator() (pkgCache::VerIterator const &AV, pkgCache::VerIterator const &BV)
+ {
+ pkgCache::PkgIterator const A = AV.ParentPkg();
+ pkgCache::PkgIterator const B = BV.ParentPkg();
+ // Prefer MA:same packages if other architectures for it are installed
+ if ((AV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same ||
+ (BV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ {
+ bool instA = false;
+ if ((AV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ {
+ pkgCache::GrpIterator Grp = A.Group();
+ for (pkgCache::PkgIterator P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
+ if (P->CurrentVer != 0)
+ {
+ instA = true;
+ break;
+ }
+ }
+ bool instB = false;
+ if ((BV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ {
+ pkgCache::GrpIterator Grp = B.Group();
+ for (pkgCache::PkgIterator P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
+ {
+ if (P->CurrentVer != 0)
+ {
+ instB = true;
+ break;
+ }
+ }
+ }
+ if (instA != instB)
+ return instA == false;
+ }
+ if ((A->CurrentVer == 0 || B->CurrentVer == 0) && A->CurrentVer != B->CurrentVer)
+ return A->CurrentVer == 0;
+ // Prefer packages in the same group as the target; e.g. foo:i386, foo:amd64
+ if (A->Group != B->Group)
+ {
+ if (A->Group == Pkg->Group && B->Group != Pkg->Group)
+ return false;
+ else if (B->Group == Pkg->Group && A->Group != Pkg->Group)
+ return true;
+ }
+ // we like essentials
+ if ((A->Flags & pkgCache::Flag::Essential) != (B->Flags & pkgCache::Flag::Essential))
+ {
+ if ((A->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ return false;
+ else if ((B->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ return true;
+ }
+ if ((A->Flags & pkgCache::Flag::Important) != (B->Flags & pkgCache::Flag::Important))
+ {
+ if ((A->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important)
+ return false;
+ else if ((B->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important)
+ return true;
+ }
+ // prefer native architecture
+ if (strcmp(A.Arch(), B.Arch()) != 0)
+ {
+ if (strcmp(A.Arch(), A.Cache()->NativeArch()) == 0)
+ return false;
+ else if (strcmp(B.Arch(), B.Cache()->NativeArch()) == 0)
+ return true;
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ for (std::vector<std::string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
+ if (*a == A.Arch())
+ return false;
+ else if (*a == B.Arch())
+ return true;
+ }
+ // higher priority seems like a good idea
+ if (AV->Priority != BV->Priority)
+ return AV->Priority > BV->Priority;
+ // unable to decide…
+ return A->ID < B->ID;
+ }
+};
+bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
+ unsigned long Depth, bool FromUser,
+ bool ForceImportantDeps)
+{
+ if (IsModeChangeOk(ModeInstall, Pkg, Depth, FromUser) == false)
+ return false;
+
+ StateCache &P = PkgState[Pkg->ID];
+
+ // See if there is even any possible installation candidate
+ if (P.CandidateVer == 0)
+ return false;
+
+ /* Check that it is not already marked for install and that it can be
+ installed */
+ if ((P.InstPolicyBroken() == false && P.InstBroken() == false) &&
+ (P.Mode == ModeInstall ||
+ P.CandidateVer == (Version *)Pkg.CurrentVer()))
+ {
+ if (P.CandidateVer == (Version *)Pkg.CurrentVer() && P.InstallVer == 0)
+ return MarkKeep(Pkg, false, FromUser, Depth+1);
+ return true;
+ }
+
+ // check if we are allowed to install the package
+ if (IsInstallOk(Pkg,AutoInst,Depth,FromUser) == false)
+ return false;
+
+ ActionGroup group(*this);
+ P.iFlags &= ~AutoKept;
+
+ /* Target the candidate version and remove the autoflag. We reset the
+ autoflag below if this was called recursively. Otherwise the user
+ should have the ability to de-auto a package by changing its state */
+ RemoveSizes(Pkg);
+ RemoveStates(Pkg);
+
+ P.Mode = ModeInstall;
+ P.InstallVer = P.CandidateVer;
+
+ if(FromUser)
+ {
+ // Set it to manual if it's a new install or already installed,
+ // but only if its not marked by the autoremover (aptitude depend on this behavior)
+ // or if we do automatic installation (aptitude never does it)
+ if(P.Status == 2 || (Pkg->CurrentVer != 0 && (AutoInst == true || P.Marked == false)))
+ P.Flags &= ~Flag::Auto;
+ }
+ else
+ {
+ // Set it to auto if this is a new install.
+ if(P.Status == 2)
+ P.Flags |= Flag::Auto;
+ }
+ if (P.CandidateVer == (Version *)Pkg.CurrentVer())
+ P.Mode = ModeKeep;
+
+ AddStates(Pkg);
+ Update(Pkg);
+ AddSizes(Pkg);
+
+ if (AutoInst == false || _config->Find("APT::Solver", "internal") != "internal")
+ return true;
+
+ if (DebugMarker == true)
+ std::clog << OutputInDepth(Depth) << "MarkInstall " << APT::PrettyPkg(this, Pkg) << " FU=" << FromUser << std::endl;
+
+ bool MoveAutoBitToDependencies = false;
+ VerIterator const PV = P.InstVerIter(*this);
+ if (unlikely(PV.end() == true))
+ return false;
+ else if (PV->Section != 0 && (P.Flags & Flag::Auto) != Flag::Auto)
+ {
+ VerIterator const CurVer = Pkg.CurrentVer();
+ if (CurVer.end() == false && CurVer->Section != 0 && strcmp(CurVer.Section(), PV.Section()) != 0)
+ {
+ bool const CurVerInMoveSection = ConfigValueInSubTree("APT::Move-Autobit-Sections", CurVer.Section());
+ bool const InstVerInMoveSection = ConfigValueInSubTree("APT::Move-Autobit-Sections", PV.Section());
+ MoveAutoBitToDependencies = (CurVerInMoveSection == false && InstVerInMoveSection == true);
+ if (MoveAutoBitToDependencies == true)
+ {
+ if(DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << "Setting " << Pkg.FullName(false) << " as auto-installed, moving manual to its dependencies" << std::endl;
+ MarkAuto(Pkg, true);
+ }
+ }
+ }
+
+ DepIterator Dep = PV.DependsList();
+ for (; Dep.end() != true;)
+ {
+ // Grok or groups
+ DepIterator Start = Dep;
+ bool Result = true;
+ unsigned Ors = 0;
+ for (bool LastOR = true; Dep.end() == false && LastOR == true; ++Dep, ++Ors)
+ {
+ LastOR = (Dep->CompareOp & Dep::Or) == Dep::Or;
+
+ if ((DepState[Dep->ID] & DepInstall) == DepInstall)
+ Result = false;
+ }
+
+ // Dep is satisfied okay.
+ if (Result == false)
+ continue;
+
+ /* Check if this dep should be consider for install. If it is a user
+ defined important dep and we are installed a new package then
+ it will be installed. Otherwise we only check for important
+ deps that have changed from the installed version */
+ if (IsImportantDep(Start) == false)
+ continue;
+
+ /* If we are in an or group locate the first or that can
+ succeed. We have already cached this… */
+ for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors)
+ ++Start;
+
+ /* unsatisfiable dependency: IsInstallOkDependenciesSatisfiableByCandidates
+ would have prevented us to get here if not overridden, so just skip
+ over the problem here as the front-end will know what it is doing */
+ if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer && Start.IsNegative() == false)
+ continue;
+
+ /* Check if any ImportantDep() (but not Critical) were added
+ * since we installed the package. Also check for deps that
+ * were satisfied in the past: for instance, if a version
+ * restriction in a Recommends was tightened, upgrading the
+ * package should follow that Recommends rather than causing the
+ * dependency to be removed. (bug #470115)
+ */
+ if (Pkg->CurrentVer != 0 && ForceImportantDeps == false && Start.IsCritical() == false)
+ {
+ bool isNewImportantDep = true;
+ bool isPreviouslySatisfiedImportantDep = false;
+ for (DepIterator D = Pkg.CurrentVer().DependsList(); D.end() != true; ++D)
+ {
+ //FIXME: Should we handle or-group better here?
+ // We do not check if the package we look for is part of the same or-group
+ // we might find while searching, but could that really be a problem?
+ if (D.IsCritical() == true || IsImportantDep(D) == false ||
+ Start.TargetPkg() != D.TargetPkg())
+ continue;
+
+ isNewImportantDep = false;
+
+ while ((D->CompareOp & Dep::Or) != 0)
+ ++D;
+
+ isPreviouslySatisfiedImportantDep = (((*this)[D] & DepGNow) != 0);
+ if (isPreviouslySatisfiedImportantDep == true)
+ break;
+ }
+
+ if(isNewImportantDep == true)
+ {
+ if (DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << "new important dependency: "
+ << Start.TargetPkg().FullName() << std::endl;
+ }
+ else if(isPreviouslySatisfiedImportantDep == true)
+ {
+ if (DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << "previously satisfied important dependency on "
+ << Start.TargetPkg().FullName() << std::endl;
+ }
+ else
+ {
+ if (DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << "ignore old unsatisfied important dependency on "
+ << Start.TargetPkg().FullName() << std::endl;
+ continue;
+ }
+ }
+
+ /* This bit is for processing the possibility of an install/upgrade
+ fixing the problem for "positive" dependencies */
+ if (Start.IsNegative() == false && (DepState[Start->ID] & DepCVer) == DepCVer)
+ {
+ pkgCacheFile CacheFile(this);
+ APT::VersionList verlist = APT::VersionList::FromDependency(CacheFile, Start, APT::CacheSetHelper::CANDIDATE);
+ CompareProviders comp(Start);
+
+ do {
+ APT::VersionList::iterator InstVer = std::max_element(verlist.begin(), verlist.end(), comp);
+
+ if (InstVer == verlist.end())
+ break;
+
+ pkgCache::PkgIterator InstPkg = InstVer.ParentPkg();
+ if(DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << "Installing " << InstPkg.Name()
+ << " as " << Start.DepType() << " of " << Pkg.Name()
+ << std::endl;
+ if (MarkInstall(InstPkg, true, Depth + 1, false, ForceImportantDeps) == false)
+ {
+ verlist.erase(InstVer);
+ continue;
+ }
+
+ // now check if we should consider it a automatic dependency or not
+ if(InstPkg->CurrentVer == 0 && MoveAutoBitToDependencies)
+ {
+ if(DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << "Setting " << InstPkg.FullName(false) << " NOT as auto-installed (direct "
+ << Start.DepType() << " of " << Pkg.FullName(false) << " which is manual and in APT::Move-Autobit-Sections)" << std::endl;
+ MarkAuto(InstPkg, false);
+ }
+
+
+ break;
+ } while(true);
+ continue;
+ }
+ /* Negative dependencies have no or-group
+ If the dependency isn't versioned, we try if an upgrade might solve the problem.
+ Otherwise we remove the offender if needed */
+ else if (Start.IsNegative() == true && Start->Type != pkgCache::Dep::Obsoletes)
+ {
+ std::unique_ptr<Version *[]> List(Start.AllTargets());
+ pkgCache::PkgIterator TrgPkg = Start.TargetPkg();
+ for (Version **I = List.get(); *I != 0; I++)
+ {
+ VerIterator Ver(*this,*I);
+ PkgIterator Pkg = Ver.ParentPkg();
+
+ /* The List includes all packages providing this dependency,
+ even providers which are not installed, so skip them. */
+ if (PkgState[Pkg->ID].InstallVer == 0)
+ continue;
+
+ /* Ignore negative dependencies that we are not going to
+ get installed */
+ if (PkgState[Pkg->ID].InstallVer != *I)
+ continue;
+
+ if ((Start->Version != 0 || TrgPkg != Pkg) &&
+ PkgState[Pkg->ID].CandidateVer != PkgState[Pkg->ID].InstallVer &&
+ PkgState[Pkg->ID].CandidateVer != *I &&
+ MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps) == true)
+ continue;
+ else if (Start->Type == pkgCache::Dep::Conflicts ||
+ Start->Type == pkgCache::Dep::DpkgBreaks)
+ {
+ if(DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth)
+ << " Removing: " << Pkg.Name()
+ << std::endl;
+ if (MarkDelete(Pkg,false,Depth + 1, false) == false)
+ break;
+ }
+ }
+ continue;
+ }
+ }
+
+ return Dep.end() == true;
+}
+ /*}}}*/
+// DepCache::IsInstallOk - check if it is ok to install this package /*{{{*/
+// ---------------------------------------------------------------------
+/* The default implementation checks if the installation of an M-A:same
+ package would lead us into a version-screw and if so forbids it.
+ dpkg holds are enforced by the private IsModeChangeOk */
+bool pkgDepCache::IsInstallOk(PkgIterator const &Pkg,bool AutoInst,
+ unsigned long Depth, bool FromUser)
+{
+ return IsInstallOkMultiArchSameVersionSynced(Pkg,AutoInst, Depth, FromUser) &&
+ IsInstallOkDependenciesSatisfiableByCandidates(Pkg,AutoInst, Depth, FromUser);
+}
+bool pkgDepCache::IsInstallOkMultiArchSameVersionSynced(PkgIterator const &Pkg,
+ bool const /*AutoInst*/, unsigned long const Depth, bool const FromUser)
+{
+ if (FromUser == true) // as always: user is always right
+ return true;
+
+ // if we have checked before and it was okay, it will still be okay
+ if (PkgState[Pkg->ID].Mode == ModeInstall &&
+ PkgState[Pkg->ID].InstallVer == PkgState[Pkg->ID].CandidateVer)
+ return true;
+
+ // ignore packages with none-M-A:same candidates
+ VerIterator const CandVer = PkgState[Pkg->ID].CandidateVerIter(*this);
+ if (unlikely(CandVer.end() == true) || CandVer == Pkg.CurrentVer() ||
+ (CandVer->MultiArch & pkgCache::Version::Same) != pkgCache::Version::Same)
+ return true;
+
+ GrpIterator const Grp = Pkg.Group();
+ for (PkgIterator P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
+ {
+ // not installed or self-check: fine by definition
+ if (P->CurrentVer == 0 || P == Pkg)
+ continue;
+
+ // not having a candidate or being in sync
+ // (simple string-compare as stuff like '1' == '0:1-0' can't happen here)
+ VerIterator CV = PkgState[P->ID].CandidateVerIter(*this);
+ if (CV.end() == true || strcmp(CandVer.VerStr(), CV.VerStr()) == 0)
+ continue;
+
+ // packages losing M-A:same can be out-of-sync
+ if ((CV->MultiArch & pkgCache::Version::Same) != pkgCache::Version::Same)
+ continue;
+
+ // not downloadable means the package is obsolete, so allow out-of-sync
+ if (CV.Downloadable() == false)
+ continue;
+
+ PkgState[Pkg->ID].iFlags |= AutoKept;
+ if (unlikely(DebugMarker == true))
+ std::clog << OutputInDepth(Depth) << "Ignore MarkInstall of " << APT::PrettyPkg(this, Pkg)
+ << " as it is not in sync with its M-A:same sibling " << APT::PrettyPkg(this, P)
+ << " (" << CandVer.VerStr() << " != " << CV.VerStr() << ")" << std::endl;
+ return false;
+ }
+
+ return true;
+}
+bool pkgDepCache::IsInstallOkDependenciesSatisfiableByCandidates(PkgIterator const &Pkg,
+ bool const AutoInst, unsigned long const Depth, bool const /*FromUser*/)
+{
+ if (AutoInst == false)
+ return true;
+
+ VerIterator const CandVer = PkgState[Pkg->ID].CandidateVerIter(*this);
+ if (unlikely(CandVer.end() == true) || CandVer == Pkg.CurrentVer())
+ return true;
+
+ for (DepIterator Dep = CandVer.DependsList(); Dep.end() != true;)
+ {
+ // Grok or groups
+ DepIterator Start = Dep;
+ bool Result = true;
+ unsigned Ors = 0;
+ for (bool LastOR = true; Dep.end() == false && LastOR == true; ++Dep, ++Ors)
+ {
+ LastOR = (Dep->CompareOp & Dep::Or) == Dep::Or;
+
+ if ((DepState[Dep->ID] & DepInstall) == DepInstall)
+ Result = false;
+ }
+
+ if (Start.IsCritical() == false || Start.IsNegative() == true || Result == false)
+ continue;
+
+ /* If we are in an or group locate the first or that can succeed.
+ We have already cached this… */
+ for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors)
+ ++Start;
+
+ if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer)
+ {
+ if (DebugAutoInstall == true)
+ std::clog << OutputInDepth(Depth) << APT::PrettyDep(this, Start) << " can't be satisfied!" << std::endl;
+
+ // the dependency is critical, but can't be installed, so discard the candidate
+ // as the problemresolver will trip over it otherwise trying to install it (#735967)
+ if (Pkg->CurrentVer != 0 && (PkgState[Pkg->ID].iFlags & Protected) != Protected)
+ {
+ SetCandidateVersion(Pkg.CurrentVer());
+ StateCache &State = PkgState[Pkg->ID];
+ if (State.Mode != ModeDelete)
+ {
+ State.Mode = ModeKeep;
+ State.Update(Pkg, *this);
+ }
+ }
+ return false;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// DepCache::SetReInstall - Set the reinstallation flag /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To)
+{
+ if (unlikely(Pkg.end() == true))
+ return;
+
+ APT::PackageList pkglist;
+ if (Pkg->CurrentVer != 0 &&
+ (Pkg.CurrentVer()-> MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ {
+ pkgCache::GrpIterator Grp = Pkg.Group();
+ for (pkgCache::PkgIterator P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
+ {
+ if (P->CurrentVer != 0)
+ pkglist.insert(P);
+ }
+ }
+ else
+ pkglist.insert(Pkg);
+
+ ActionGroup group(*this);
+
+ for (APT::PackageList::const_iterator Pkg = pkglist.begin(); Pkg != pkglist.end(); ++Pkg)
+ {
+ RemoveSizes(Pkg);
+ RemoveStates(Pkg);
+
+ StateCache &P = PkgState[Pkg->ID];
+ if (To == true)
+ P.iFlags |= ReInstall;
+ else
+ P.iFlags &= ~ReInstall;
+
+ AddStates(Pkg);
+ AddSizes(Pkg);
+ }
+}
+ /*}}}*/
+pkgCache::VerIterator pkgDepCache::GetCandidateVersion(PkgIterator const &Pkg)/*{{{*/
+{
+ return PkgState[Pkg->ID].CandidateVerIter(*this);
+}
+ /*}}}*/
+// DepCache::SetCandidateVersion - Change the candidate version /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgDepCache::SetCandidateVersion(VerIterator TargetVer)
+{
+ pkgCache::PkgIterator Pkg = TargetVer.ParentPkg();
+ StateCache &P = PkgState[Pkg->ID];
+
+ if (P.CandidateVer == TargetVer)
+ return;
+
+ ActionGroup group(*this);
+
+ RemoveSizes(Pkg);
+ RemoveStates(Pkg);
+
+ if (P.CandidateVer == P.InstallVer && P.Install() == true)
+ P.InstallVer = (Version *)TargetVer;
+ P.CandidateVer = (Version *)TargetVer;
+ P.Update(Pkg,*this);
+
+ AddStates(Pkg);
+ Update(Pkg);
+ AddSizes(Pkg);
+
+}
+ /*}}}*/
+// DepCache::SetCandidateRelease - Change the candidate version /*{{{*/
+// ---------------------------------------------------------------------
+/* changes the candidate of a package and walks over all its dependencies
+ to check if it needs to change the candidate of the dependency, too,
+ to reach a installable versionstate */
+bool pkgDepCache::SetCandidateRelease(pkgCache::VerIterator TargetVer,
+ std::string const &TargetRel)
+{
+ std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > Changed;
+ return SetCandidateRelease(TargetVer, TargetRel, Changed);
+}
+bool pkgDepCache::SetCandidateRelease(pkgCache::VerIterator TargetVer,
+ std::string const &TargetRel,
+ std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > &Changed)
+{
+ ActionGroup group(*this);
+ SetCandidateVersion(TargetVer);
+
+ if (TargetRel == "installed" || TargetRel == "candidate") // both doesn't make sense in this context
+ return true;
+
+ pkgVersionMatch Match(TargetRel, pkgVersionMatch::Release);
+ // save the position of the last element we will not undo - if we have to
+ std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> >::iterator newChanged = --(Changed.end());
+
+ for (pkgCache::DepIterator D = TargetVer.DependsList(); D.end() == false; ++D)
+ {
+ if (D->Type != pkgCache::Dep::PreDepends && D->Type != pkgCache::Dep::Depends &&
+ ((D->Type != pkgCache::Dep::Recommends && D->Type != pkgCache::Dep::Suggests) ||
+ IsImportantDep(D) == false))
+ continue;
+
+ // walk over an or-group and check if we need to do anything
+ // for simpilicity no or-group is handled as a or-group including one dependency
+ pkgCache::DepIterator Start = D;
+ bool itsFine = false;
+ for (bool stillOr = true; stillOr == true; ++Start)
+ {
+ stillOr = (Start->CompareOp & Dep::Or) == Dep::Or;
+ pkgCache::PkgIterator const P = Start.TargetPkg();
+ // virtual packages can't be a solution
+ if (P.end() == true || (P->ProvidesList == 0 && P->VersionList == 0))
+ continue;
+ // if its already installed, check if this one is good enough
+ pkgCache::VerIterator const Now = P.CurrentVer();
+ if (Now.end() == false && Start.IsSatisfied(Now))
+ {
+ itsFine = true;
+ break;
+ }
+ pkgCache::VerIterator const Cand = PkgState[P->ID].CandidateVerIter(*this);
+ // no versioned dependency - but is it installable?
+ if (Start.TargetVer() == 0 || Start.TargetVer()[0] == '\0')
+ {
+ // Check if one of the providers is installable
+ if (P->ProvidesList != 0)
+ {
+ pkgCache::PrvIterator Prv = P.ProvidesList();
+ for (; Prv.end() == false; ++Prv)
+ {
+ pkgCache::VerIterator const C = PkgState[Prv.OwnerPkg()->ID].CandidateVerIter(*this);
+ if (C.end() == true || C != Prv.OwnerVer() ||
+ (VersionState(C.DependsList(), DepInstall, DepCandMin, DepCandPolicy) & DepCandMin) != DepCandMin)
+ continue;
+ break;
+ }
+ if (Prv.end() == true)
+ continue;
+ }
+ // no providers, so check if we have an installable candidate version
+ else if (Cand.end() == true ||
+ (VersionState(Cand.DependsList(), DepInstall, DepCandMin, DepCandPolicy) & DepCandMin) != DepCandMin)
+ continue;
+ itsFine = true;
+ break;
+ }
+ if (Cand.end() == true)
+ continue;
+ // check if the current candidate is enough for the versioned dependency - and installable?
+ if (Start.IsSatisfied(Cand) == true &&
+ (VersionState(Cand.DependsList(), DepInstall, DepCandMin, DepCandPolicy) & DepCandMin) == DepCandMin)
+ {
+ itsFine = true;
+ break;
+ }
+ }
+
+ if (itsFine == true) {
+ // something in the or-group was fine, skip all other members
+ for (; (D->CompareOp & Dep::Or) == Dep::Or; ++D);
+ continue;
+ }
+
+ // walk again over the or-group and check each if a candidate switch would help
+ itsFine = false;
+ for (bool stillOr = true; stillOr == true; ++D)
+ {
+ stillOr = (D->CompareOp & Dep::Or) == Dep::Or;
+ // changing candidate will not help if the dependency is not versioned
+ if (D.TargetVer() == 0 || D.TargetVer()[0] == '\0')
+ {
+ if (stillOr == true)
+ continue;
+ break;
+ }
+
+ pkgCache::VerIterator V;
+ if (TargetRel == "newest")
+ V = D.TargetPkg().VersionList();
+ else
+ V = Match.Find(D.TargetPkg());
+
+ // check if the version from this release could satisfy the dependency
+ if (V.end() == true || D.IsSatisfied(V) == false)
+ {
+ if (stillOr == true)
+ continue;
+ break;
+ }
+
+ pkgCache::VerIterator oldCand = PkgState[D.TargetPkg()->ID].CandidateVerIter(*this);
+ if (V == oldCand)
+ {
+ // Do we already touched this Version? If so, their versioned dependencies are okay, no need to check again
+ for (std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> >::const_iterator c = Changed.begin();
+ c != Changed.end(); ++c)
+ {
+ if (c->first->ParentPkg != V->ParentPkg)
+ continue;
+ itsFine = true;
+ break;
+ }
+ }
+
+ if (itsFine == false)
+ {
+ // change the candidate
+ Changed.push_back(make_pair(V, TargetVer));
+ if (SetCandidateRelease(V, TargetRel, Changed) == false)
+ {
+ if (stillOr == false)
+ break;
+ // undo the candidate changing
+ SetCandidateVersion(oldCand);
+ Changed.pop_back();
+ continue;
+ }
+ itsFine = true;
+ }
+
+ // something in the or-group was fine, skip all other members
+ for (; (D->CompareOp & Dep::Or) == Dep::Or; ++D);
+ break;
+ }
+
+ if (itsFine == false && (D->Type == pkgCache::Dep::PreDepends || D->Type == pkgCache::Dep::Depends))
+ {
+ // undo all changes which aren't lead to a solution
+ for (std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> >::const_iterator c = ++newChanged;
+ c != Changed.end(); ++c)
+ SetCandidateVersion(c->first);
+ Changed.erase(newChanged, Changed.end());
+ return false;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// DepCache::MarkAuto - set the Auto flag for a package /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgDepCache::MarkAuto(const PkgIterator &Pkg, bool Auto)
+{
+ StateCache &state = PkgState[Pkg->ID];
+
+ ActionGroup group(*this);
+
+ if(Auto)
+ state.Flags |= Flag::Auto;
+ else
+ state.Flags &= ~Flag::Auto;
+}
+ /*}}}*/
+// StateCache::Update - Compute the various static display things /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called whenever the Candidate version changes. */
+void pkgDepCache::StateCache::Update(PkgIterator Pkg,pkgCache &Cache)
+{
+ // Some info
+ VerIterator Ver = CandidateVerIter(Cache);
+
+ // Use a null string or the version string
+ if (Ver.end() == true)
+ CandVersion = "";
+ else
+ CandVersion = Ver.VerStr();
+
+ // Find the current version
+ CurVersion = "";
+ if (Pkg->CurrentVer != 0)
+ CurVersion = Pkg.CurrentVer().VerStr();
+
+ // Figure out if its up or down or equal
+ Status = Ver.CompareVer(Pkg.CurrentVer());
+ if (Pkg->CurrentVer == 0 || Pkg->VersionList == 0 || CandidateVer == 0)
+ Status = 2;
+}
+ /*}}}*/
+// StateCache::StripEpoch - Remove the epoch specifier from the version /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+const char *pkgDepCache::StateCache::StripEpoch(const char *Ver)
+{
+ if (Ver == 0)
+ return 0;
+
+ // Strip any epoch
+ char const * const I = strchr(Ver, ':');
+ if (I == nullptr)
+ return Ver;
+ return I + 1;
+}
+ /*}}}*/
+// Policy::GetCandidateVer - Returns the Candidate install version /*{{{*/
+// ---------------------------------------------------------------------
+/* The default just returns the highest available version that is not
+ a source and automatic. */
+pkgCache::VerIterator pkgDepCache::Policy::GetCandidateVer(PkgIterator const &Pkg)
+{
+ /* Not source/not automatic versions cannot be a candidate version
+ unless they are already installed */
+ VerIterator Last;
+
+ for (VerIterator I = Pkg.VersionList(); I.end() == false; ++I)
+ {
+ if (Pkg.CurrentVer() == I)
+ return I;
+
+ for (VerFileIterator J = I.FileList(); J.end() == false; ++J)
+ {
+ if (J.File().Flagged(Flag::NotSource))
+ continue;
+
+ /* Stash the highest version of a not-automatic source, we use it
+ if there is nothing better */
+ if (J.File().Flagged(Flag::NotAutomatic) ||
+ J.File().Flagged(Flag::ButAutomaticUpgrades))
+ {
+ if (Last.end() == true)
+ Last = I;
+ continue;
+ }
+
+ return I;
+ }
+ }
+
+ return Last;
+}
+ /*}}}*/
+// Policy::IsImportantDep - True if the dependency is important /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgDepCache::Policy::IsImportantDep(DepIterator const &Dep) const
+{
+ if(Dep.IsCritical())
+ return true;
+ else if(Dep->Type == pkgCache::Dep::Recommends)
+ {
+ if (InstallRecommends)
+ return true;
+ // we support a special mode to only install-recommends for certain
+ // sections
+ // FIXME: this is a meant as a temporary solution until the
+ // recommends are cleaned up
+ const char *sec = Dep.ParentVer().Section();
+ if (sec && ConfigValueInSubTree("APT::Install-Recommends-Sections", sec))
+ return true;
+ }
+ else if(Dep->Type == pkgCache::Dep::Suggests)
+ return InstallSuggests;
+
+ return false;
+}
+ /*}}}*/
+// Policy::GetPriority - Get the priority of the package pin /*{{{*/
+APT_PURE signed short pkgDepCache::Policy::GetPriority(pkgCache::PkgIterator const &/*Pkg*/)
+{ return 0; }
+APT_PURE signed short pkgDepCache::Policy::GetPriority(pkgCache::VerIterator const &/*Ver*/, bool /*ConsiderFiles*/)
+{ return 0; }
+APT_PURE signed short pkgDepCache::Policy::GetPriority(pkgCache::PkgFileIterator const &/*File*/)
+{ return 0; }
+ /*}}}*/
+pkgDepCache::InRootSetFunc *pkgDepCache::GetRootSetFunc() /*{{{*/
+{
+ DefaultRootSetFunc *f = new DefaultRootSetFunc;
+ if(f->wasConstructedSuccessfully())
+ return f;
+ else
+ {
+ delete f;
+ return NULL;
+ }
+}
+ /*}}}*/
+bool pkgDepCache::MarkFollowsRecommends()
+{
+ return _config->FindB("APT::AutoRemove::RecommendsImportant", true);
+}
+
+bool pkgDepCache::MarkFollowsSuggests()
+{
+ return _config->FindB("APT::AutoRemove::SuggestsImportant", true);
+}
+
+// pkgDepCache::MarkRequired - the main mark algorithm /*{{{*/
+static bool IsPkgInBoringState(pkgCache::PkgIterator const &Pkg, pkgDepCache::StateCache const * const PkgState)
+{
+ if (Pkg->CurrentVer == 0)
+ {
+ if (PkgState[Pkg->ID].Keep())
+ return true;
+ }
+ else
+ {
+ if (PkgState[Pkg->ID].Delete())
+ return true;
+ }
+ return false;
+}
+bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
+{
+ if (_config->Find("APT::Solver", "internal") != "internal")
+ return true;
+
+ bool const debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);
+
+ // init the states
+ auto const PackagesCount = Head().PackageCount;
+ for(auto i = decltype(PackagesCount){0}; i < PackagesCount; ++i)
+ {
+ PkgState[i].Marked = false;
+ PkgState[i].Garbage = false;
+ }
+ if (debug_autoremove)
+ for(PkgIterator p = PkgBegin(); !p.end(); ++p)
+ if(PkgState[p->ID].Flags & Flag::Auto)
+ std::clog << "AutoDep: " << p.FullName() << std::endl;
+
+ bool const follow_recommends = MarkFollowsRecommends();
+ bool const follow_suggests = MarkFollowsSuggests();
+
+ // do the mark part, this is the core bit of the algorithm
+ for (PkgIterator P = PkgBegin(); !P.end(); ++P)
+ {
+ if (PkgState[P->ID].Marked || IsPkgInBoringState(P, PkgState))
+ continue;
+
+ const char *reason = nullptr;
+
+ if ((PkgState[P->ID].Flags & Flag::Auto) == 0)
+ reason = "Manual-Installed";
+ else if (P->Flags & Flag::Essential)
+ reason = "Essential";
+ else if (P->Flags & Flag::Important)
+ reason = "Important";
+ else if (P->CurrentVer != 0 && P.CurrentVer()->Priority == pkgCache::State::Required)
+ reason = "Required";
+ else if (userFunc.InRootSet(P))
+ reason = "Blacklisted [APT::NeverAutoRemove]";
+ else if (IsModeChangeOk(ModeGarbage, P, 0, false) == false)
+ reason = "Hold";
+ else
+ continue;
+
+ if (PkgState[P->ID].Install())
+ MarkPackage(P, PkgState[P->ID].InstVerIter(*this),
+ follow_recommends, follow_suggests, reason);
+ else
+ MarkPackage(P, P.CurrentVer(),
+ follow_recommends, follow_suggests, reason);
+ }
+
+ return true;
+}
+ /*}}}*/
+// MarkPackage - mark a single package in Mark-and-Sweep /*{{{*/
+void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &Pkg,
+ const pkgCache::VerIterator &Ver,
+ bool const &follow_recommends,
+ bool const &follow_suggests,
+ const char *reason)
+{
+ {
+ pkgDepCache::StateCache &state = PkgState[Pkg->ID];
+ // if we are marked already we are done
+ if(state.Marked || unlikely(Ver.end()))
+ return;
+ state.Marked=true;
+ }
+
+ if (IsPkgInBoringState(Pkg, PkgState))
+ return;
+
+ bool const debug_autoremove = _config->FindB("Debug::pkgAutoRemove", false);
+ if(debug_autoremove)
+ std::clog << "Marking: " << Pkg.FullName() << " " << Ver.VerStr()
+ << " (" << reason << ")" << std::endl;
+
+ for (auto D = Ver.DependsList(); D.end() == false; ++D)
+ {
+ auto const T = D.TargetPkg();
+ if (PkgState[T->ID].Marked)
+ continue;
+
+ if (D->Type != Dep::Depends &&
+ D->Type != Dep::PreDepends &&
+ (follow_recommends == false || D->Type != Dep::Recommends) &&
+ (follow_suggests == false || D->Type != Dep::Suggests))
+ continue;
+
+ // handle the virtual part first
+ APT::VersionVector providers;
+ for(auto Prv = T.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ auto PP = Prv.OwnerPkg();
+ if (IsPkgInBoringState(PP, PkgState))
+ continue;
+
+ // we want to ignore provides from uninteresting versions
+ auto const PV = (PkgState[PP->ID].Install()) ?
+ PkgState[PP->ID].InstVerIter(*this) : PP.CurrentVer();
+ if (unlikely(PV.end()) || PV != Prv.OwnerVer() || D.IsSatisfied(Prv) == false)
+ continue;
+
+ providers.emplace_back(PV);
+ }
+ if (providers.empty() == false)
+ {
+ // sort providers by source version so that only the latest versioned
+ // binary package of a source package is marked instead of all
+ std::sort(providers.begin(), providers.end(),
+ [](pkgCache::VerIterator const &A, pkgCache::VerIterator const &B) {
+ auto const nameret = strcmp(A.SourcePkgName(), B.SourcePkgName());
+ if (nameret != 0)
+ return nameret < 0;
+ auto const verret = A.Cache()->VS->CmpVersion(A.SourceVerStr(), B.SourceVerStr());
+ if (verret != 0)
+ return verret > 0;
+ return strcmp(A.ParentPkg().Name(), B.ParentPkg().Name()) < 0;
+ });
+ auto const prvsize = providers.size();
+ providers.erase(std::unique(providers.begin(), providers.end(),
+ [](pkgCache::VerIterator const &A, pkgCache::VerIterator const &B) {
+ return strcmp(A.SourcePkgName(), B.SourcePkgName()) == 0 &&
+ strcmp(A.SourceVerStr(), B.SourceVerStr()) != 0;
+ }), providers.end());
+ for (auto && PV: providers)
+ {
+ auto const PP = PV.ParentPkg();
+ if (debug_autoremove)
+ std::clog << "Following dep: " << APT::PrettyDep(this, D)
+ << ", provided by " << PP.FullName() << " " << PV.VerStr()
+ << " (" << providers.size() << "/" << prvsize << ")"<< std::endl;
+ MarkPackage(PP, PV, follow_recommends, follow_suggests, "Provider");
+ }
+ }
+
+ // now deal with the real part of the package
+ if (IsPkgInBoringState(T, PkgState))
+ continue;
+
+ auto const TV = (PkgState[T->ID].Install()) ?
+ PkgState[T->ID].InstVerIter(*this) : T.CurrentVer();
+ if (unlikely(TV.end()) || D.IsSatisfied(TV) == false)
+ continue;
+
+ if (debug_autoremove)
+ std::clog << "Following dep: " << APT::PrettyDep(this, D) << std::endl;
+ MarkPackage(T, TV, follow_recommends, follow_suggests, "Dependency");
+ }
+}
+ /*}}}*/
+bool pkgDepCache::Sweep() /*{{{*/
+{
+ bool debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);
+
+ // do the sweep
+ for(PkgIterator p=PkgBegin(); !p.end(); ++p)
+ {
+ StateCache &state=PkgState[p->ID];
+
+ // skip required packages
+ if (!p.CurrentVer().end() &&
+ (p.CurrentVer()->Priority == pkgCache::State::Required))
+ continue;
+
+ // if it is not marked and it is installed, it's garbage
+ if(!state.Marked && (!p.CurrentVer().end() || state.Install()))
+ {
+ state.Garbage=true;
+ if(debug_autoremove)
+ std::clog << "Garbage: " << p.FullName() << std::endl;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// DepCache::MarkAndSweep /*{{{*/
+bool pkgDepCache::MarkAndSweep(InRootSetFunc &rootFunc)
+{
+ return MarkRequired(rootFunc) && Sweep();
+}
+bool pkgDepCache::MarkAndSweep()
+{
+ std::unique_ptr<InRootSetFunc> f(GetRootSetFunc());
+ if(f.get() != NULL)
+ return MarkAndSweep(*f.get());
+ else
+ return false;
+}
+ /*}}}*/
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
new file mode 100644
index 0000000..724bf56
--- /dev/null
+++ b/apt-pkg/depcache.h
@@ -0,0 +1,528 @@
+// -*- mode: c++; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ DepCache - Dependency Extension data for the cache
+
+ This class stores the cache data and a set of extension structures for
+ monitoring the current state of all the packages. It also generates and
+ caches the 'install' state of many things. This refers to the state of the
+ package after an install has been run.
+
+ The StateCache::State field can be -1,0,1,2 which is <,=,>,no current.
+ StateCache::Mode is which of the 3 fields is active.
+
+ This structure is important to support the readonly status of the cache
+ file. When the data is saved the cache will be refereshed from our
+ internal rep and written to disk. Then the actual persistent data
+ files will be put on the disk.
+
+ Each dependency is compared against 3 target versions to produce to
+ 3 dependency results.
+ Now - Compared using the Currently install version
+ Install - Compared using the install version (final state)
+ CVer - (Candidate Version) Compared using the Candidate Version
+ The candidate and now results are used to decide whether a package
+ should be automatically installed or if it should be left alone.
+
+ Remember, the Candidate Version is selected based on the distribution
+ settings for the Package. The Install Version is selected based on the
+ state (Delete, Keep, Install) field and can be either the Current Version
+ or the Candidate version.
+
+ The Candidate version is what is shown the 'Install Version' field.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEPCACHE_H
+#define PKGLIB_DEPCACHE_H
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <stddef.h>
+
+#include <list>
+#include <memory>
+#include <string>
+#include <utility>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/error.h>
+#include <apt-pkg/progress.h>
+#endif
+#ifndef APT_10_CLEANER_HEADERS
+#include <set>
+#include <vector>
+#endif
+
+class OpProgress;
+class pkgVersioningSystem;
+
+class pkgDepCache : protected pkgCache::Namespace
+{
+ public:
+
+ /** \brief An arbitrary predicate on packages. */
+ class InRootSetFunc
+ {
+ public:
+ virtual bool InRootSet(const pkgCache::PkgIterator &/*pkg*/) {return false;};
+ virtual ~InRootSetFunc() {};
+ };
+
+ private:
+ /** \brief Mark a single package and all its unmarked important
+ * dependencies during mark-and-sweep.
+ *
+ * Recursively invokes itself to mark all dependencies of the
+ * package.
+ *
+ * \param pkg The package to mark.
+ *
+ * \param ver The version of the package that is to be marked.
+ *
+ * \param follow_recommends If \b true, recommendations of the
+ * package will be recursively marked.
+ *
+ * \param follow_suggests If \b true, suggestions of the package
+ * will be recursively marked.
+ *
+ * \param reason The reason why the package is being marked.
+ * (Used in logging when Debug::pkgAutoRemove is set.)
+ */
+ APT_HIDDEN void MarkPackage(const pkgCache::PkgIterator &pkg,
+ const pkgCache::VerIterator &ver,
+ bool const &follow_recommends,
+ bool const &follow_suggests,
+ const char *reason);
+
+ /** \brief Update the Marked field of all packages.
+ *
+ * Each package's StateCache::Marked field will be set to \b true
+ * if and only if it can be reached from the root set. By
+ * default, the root set consists of the set of manually installed
+ * or essential packages, but it can be extended using the
+ * parameter #rootFunc.
+ *
+ * \param rootFunc A callback that can be used to add extra
+ * packages to the root set.
+ *
+ * \return \b false if an error occurred.
+ */
+ bool MarkRequired(InRootSetFunc &rootFunc);
+
+ /** \brief Set the StateCache::Garbage flag on all packages that
+ * should be removed.
+ *
+ * Packages that were not marked by the last call to #MarkRequired
+ * are tested to see whether they are actually garbage. If so,
+ * they are marked as such.
+ *
+ * \return \b false if an error occurred.
+ */
+ bool Sweep();
+
+ public:
+
+ // These flags are used in DepState
+ enum DepFlags {DepNow = (1 << 0),DepInstall = (1 << 1),DepCVer = (1 << 2),
+ DepGNow = (1 << 3),DepGInstall = (1 << 4),DepGCVer = (1 << 5)};
+
+ // These flags are used in StateCache::DepState
+ enum DepStateFlags {DepNowPolicy = (1 << 0), DepNowMin = (1 << 1),
+ DepInstPolicy = (1 << 2), DepInstMin = (1 << 3),
+ DepCandPolicy = (1 << 4), DepCandMin = (1 << 5)};
+
+ // These flags are used in StateCache::iFlags
+ enum InternalFlags {AutoKept = (1 << 0), Purge = (1 << 1), ReInstall = (1 << 2), Protected = (1 << 3)};
+
+ enum VersionTypes {NowVersion, InstallVersion, CandidateVersion};
+ enum ModeList {ModeDelete = 0, ModeKeep = 1, ModeInstall = 2, ModeGarbage = 3};
+
+ /** \brief Represents an active action group.
+ *
+ * An action group is a group of actions that are currently being
+ * performed. While an active group is active, certain routine
+ * clean-up actions that would normally be performed after every
+ * cache operation are delayed until the action group is
+ * completed. This is necessary primarily to avoid inefficiencies
+ * when modifying a large number of packages at once.
+ *
+ * This class represents an active action group. Creating an
+ * instance will create an action group; destroying one will
+ * destroy the corresponding action group.
+ *
+ * The following operations are suppressed by this class:
+ *
+ * - Keeping the Marked and Garbage flags up to date.
+ *
+ * \note This can be used in the future to easily accumulate
+ * atomic actions for undo or to display "what apt did anyway";
+ * e.g., change the counter of how many action groups are active
+ * to a std::set of pointers to them and use those to store
+ * information about what happened in a group in the group.
+ */
+ class ActionGroup
+ {
+ void * const d;
+ pkgDepCache &cache;
+
+ bool released;
+
+ /** Action groups are noncopyable. */
+ APT_HIDDEN ActionGroup(const ActionGroup &other);
+ public:
+ /** \brief Create a new ActionGroup.
+ *
+ * \param cache The cache that this ActionGroup should
+ * manipulate.
+ *
+ * As long as this object exists, no automatic cleanup
+ * operations will be undertaken.
+ */
+ explicit ActionGroup(pkgDepCache &cache);
+
+ /** \brief Clean up the action group before it is destroyed.
+ *
+ * If it is destroyed later, no second cleanup will be run.
+ */
+ void release();
+
+ /** \brief Destroy the action group.
+ *
+ * If this is the last action group, the automatic cache
+ * cleanup operations will be undertaken.
+ */
+ virtual ~ActionGroup();
+ };
+
+ /** \brief Returns \b true for packages matching a regular
+ * expression in APT::NeverAutoRemove.
+ */
+ class DefaultRootSetFunc : public InRootSetFunc, public Configuration::MatchAgainstConfig
+ {
+ public:
+ DefaultRootSetFunc() : Configuration::MatchAgainstConfig("APT::NeverAutoRemove") {};
+ virtual ~DefaultRootSetFunc() {};
+
+ bool InRootSet(const pkgCache::PkgIterator &pkg) APT_OVERRIDE { return pkg.end() == false && Match(pkg.Name()); };
+ };
+
+ struct StateCache
+ {
+ // text versions of the two version fields
+ const char *CandVersion;
+ const char *CurVersion;
+
+ // Pointer to the candidate install version.
+ Version *CandidateVer;
+
+ // Pointer to the install version.
+ Version *InstallVer;
+
+ // Copy of Package::Flags
+ unsigned short Flags;
+ unsigned short iFlags; // Internal flags
+
+ /** \brief \b true if this package can be reached from the root set. */
+ bool Marked;
+
+ /** \brief \b true if this package is unused and should be removed.
+ *
+ * This differs from !#Marked, because it is possible that some
+ * unreachable packages will be protected from becoming
+ * garbage.
+ */
+ bool Garbage;
+
+ // Various tree indicators
+ signed char Status; // -1,0,1,2
+ unsigned char Mode; // ModeList
+ unsigned char DepState; // DepState Flags
+
+ // Update of candidate version
+ APT_DEPRECATED_MSG("Use the method of the same name in contrib/strutl.h instead if you must") const char *StripEpoch(const char *Ver) APT_PURE;
+ void Update(PkgIterator Pkg,pkgCache &Cache);
+
+ // Various test members for the current status of the package
+ inline bool NewInstall() const {return Status == 2 && Mode == ModeInstall;};
+ inline bool Delete() const {return Mode == ModeDelete;};
+ inline bool Purge() const {return Delete() == true && (iFlags & pkgDepCache::Purge) == pkgDepCache::Purge; };
+ inline bool Keep() const {return Mode == ModeKeep;};
+ inline bool Protect() const {return (iFlags & Protected) == Protected;};
+ inline bool Upgrade() const {return Status > 0 && Mode == ModeInstall;};
+ inline bool Upgradable() const {return Status >= 1 && CandidateVer != NULL;};
+ inline bool Downgrade() const {return Status < 0 && Mode == ModeInstall;};
+ inline bool Held() const {return Status != 0 && Keep();};
+ inline bool NowBroken() const {return (DepState & DepNowMin) != DepNowMin;};
+ inline bool NowPolicyBroken() const {return (DepState & DepNowPolicy) != DepNowPolicy;};
+ inline bool InstBroken() const {return (DepState & DepInstMin) != DepInstMin;};
+ inline bool InstPolicyBroken() const {return (DepState & DepInstPolicy) != DepInstPolicy;};
+ inline bool Install() const {return Mode == ModeInstall;};
+ inline bool ReInstall() const {return Delete() == false && (iFlags & pkgDepCache::ReInstall) == pkgDepCache::ReInstall;};
+ inline VerIterator InstVerIter(pkgCache &Cache)
+ {return VerIterator(Cache,InstallVer);};
+ inline VerIterator CandidateVerIter(pkgCache &Cache)
+ {return VerIterator(Cache,CandidateVer);};
+ };
+
+ // Helper functions
+ void BuildGroupOrs(VerIterator const &V);
+ void UpdateVerState(PkgIterator const &Pkg);
+
+ // User Policy control
+ class Policy
+ {
+ public:
+ Policy() {
+ InstallRecommends = _config->FindB("APT::Install-Recommends", false);
+ InstallSuggests = _config->FindB("APT::Install-Suggests", false);
+ }
+
+ virtual VerIterator GetCandidateVer(PkgIterator const &Pkg);
+ virtual bool IsImportantDep(DepIterator const &Dep) const;
+ virtual signed short GetPriority(PkgIterator const &Pkg);
+ virtual signed short GetPriority(VerIterator const &Ver, bool ConsiderFiles=true);
+ virtual signed short GetPriority(PkgFileIterator const &File);
+
+ virtual ~Policy() {};
+
+ private:
+ bool InstallRecommends;
+ bool InstallSuggests;
+ };
+
+ private:
+ /** The number of open "action groups"; certain post-action
+ * operations are suppressed if this number is > 0.
+ */
+ int group_level;
+
+ friend class ActionGroup;
+
+ protected:
+
+ // State information
+ pkgCache *Cache;
+ StateCache *PkgState;
+ unsigned char *DepState;
+
+ /** Stores the space changes after installation */
+ signed long long iUsrSize;
+ /** Stores how much we need to download to get the packages */
+ unsigned long long iDownloadSize;
+ unsigned long iInstCount;
+ unsigned long iDelCount;
+ unsigned long iKeepCount;
+ unsigned long iBrokenCount;
+ unsigned long iPolicyBrokenCount;
+ unsigned long iBadCount;
+
+ bool DebugMarker;
+ bool DebugAutoInstall;
+
+ Policy *delLocalPolicy; // For memory clean up..
+ Policy *LocalPolicy;
+
+ // Check for a matching provides
+ bool CheckDep(DepIterator const &Dep,int const Type,PkgIterator &Res);
+ inline bool CheckDep(DepIterator const &Dep,int const Type)
+ {
+ PkgIterator Res(*this,0);
+ return CheckDep(Dep,Type,Res);
+ }
+
+ // Computes state information for deps and versions (w/o storing)
+ unsigned char DependencyState(DepIterator const &D);
+ unsigned char VersionState(DepIterator D,unsigned char const Check,
+ unsigned char const SetMin,
+ unsigned char const SetPolicy) const;
+
+ // Recalculates various portions of the cache, call after changing something
+ void Update(DepIterator Dep); // Mostly internal
+ void Update(PkgIterator const &P);
+
+ // Count manipulators
+ void AddSizes(const PkgIterator &Pkg, bool const Invert = false);
+ inline void RemoveSizes(const PkgIterator &Pkg) {AddSizes(Pkg, true);};
+ void AddStates(const PkgIterator &Pkg, bool const Invert = false);
+ inline void RemoveStates(const PkgIterator &Pkg) {AddStates(Pkg,true);};
+
+ public:
+
+ // Legacy.. We look like a pkgCache
+ inline operator pkgCache &() {return *Cache;};
+ inline Header &Head() {return *Cache->HeaderP;};
+ inline GrpIterator GrpBegin() {return Cache->GrpBegin();};
+ inline PkgIterator PkgBegin() {return Cache->PkgBegin();};
+ inline GrpIterator FindGrp(std::string const &Name) {return Cache->FindGrp(Name);};
+ inline PkgIterator FindPkg(std::string const &Name) {return Cache->FindPkg(Name);};
+ inline PkgIterator FindPkg(std::string const &Name, std::string const &Arch) {return Cache->FindPkg(Name, Arch);};
+
+ inline pkgCache &GetCache() {return *Cache;};
+ inline pkgVersioningSystem &VS() {return *Cache->VS;};
+
+ // Policy implementation
+ APT_DEPRECATED_MSG("Confusingly named method which returns the candidate as chosen by policy (NOT as chosen via .SetCandidateVersion!). You probably want to use .GetCandidateVersion instead.") inline VerIterator GetCandidateVer(PkgIterator const &Pkg) {return /* GetCandidateVersion(Pkg); but for API compat: */ LocalPolicy->GetCandidateVer(Pkg);};
+
+ inline bool IsImportantDep(DepIterator Dep) const {return LocalPolicy->IsImportantDep(Dep);};
+ inline Policy &GetPolicy() {return *LocalPolicy;};
+
+ // Accessors
+ inline StateCache &operator [](PkgIterator const &I) {return PkgState[I->ID];};
+ inline StateCache &operator [](PkgIterator const &I) const {return PkgState[I->ID];};
+ inline unsigned char &operator [](DepIterator const &I) {return DepState[I->ID];};
+
+ /** \return A function identifying packages in the root set other
+ * than manually installed packages and essential packages, or \b
+ * NULL if an error occurs.
+ *
+ * \todo Is this the best place for this function? Perhaps the
+ * settings for mark-and-sweep should be stored in a single
+ * external class?
+ */
+ virtual InRootSetFunc *GetRootSetFunc();
+
+ /** \return \b true if the garbage collector should follow recommendations.
+ */
+ virtual bool MarkFollowsRecommends();
+
+ /** \return \b true if the garbage collector should follow suggestions.
+ */
+ virtual bool MarkFollowsSuggests();
+
+ /** \brief Update the Marked and Garbage fields of all packages.
+ *
+ * This routine is implicitly invoked after all state manipulators
+ * and when an ActionGroup is destroyed. It invokes the private
+ * MarkRequired() and Sweep() to do its dirty work.
+ *
+ * \param rootFunc A predicate that returns \b true for packages
+ * that should be added to the root set.
+ */
+ bool MarkAndSweep(InRootSetFunc &rootFunc);
+ bool MarkAndSweep();
+
+ /** \name State Manipulators
+ */
+ // @{
+ bool MarkKeep(PkgIterator const &Pkg, bool Soft = false,
+ bool FromUser = true, unsigned long Depth = 0);
+ bool MarkDelete(PkgIterator const &Pkg, bool MarkPurge = false,
+ unsigned long Depth = 0, bool FromUser = true);
+ bool MarkInstall(PkgIterator const &Pkg,bool AutoInst = true,
+ unsigned long Depth = 0, bool FromUser = true,
+ bool ForceImportantDeps = false);
+ void MarkProtected(PkgIterator const &Pkg) { PkgState[Pkg->ID].iFlags |= Protected; };
+
+ void SetReInstall(PkgIterator const &Pkg,bool To);
+
+ /** @return 'the' candidate version of a package
+ *
+ * The version returned is the version previously set explicitly via
+ * SetCandidate* methods like #SetCandidateVersion or if there wasn't one
+ * set the version as chosen via #Policy.
+ *
+ * @param Pkg is the package to return the candidate for
+ */
+ pkgCache::VerIterator GetCandidateVersion(pkgCache::PkgIterator const &Pkg);
+ void SetCandidateVersion(VerIterator TargetVer);
+ bool SetCandidateRelease(pkgCache::VerIterator TargetVer,
+ std::string const &TargetRel);
+ /** Set the candidate version for dependencies too if needed.
+ *
+ * Sets not only the candidate version as SetCandidateVersion does,
+ * but walks also down the dependency tree and checks if it is required
+ * to set the candidate of the dependency to a version from the given
+ * release, too.
+ *
+ * \param TargetVer new candidate version of the package
+ * \param TargetRel try to switch to this release if needed
+ * \param[out] Changed a list of pairs consisting of the \b old
+ * version of the changed package and the version which
+ * required the switch of this dependency
+ * \return \b true if the switch was successful, \b false otherwise
+ */
+ bool SetCandidateRelease(pkgCache::VerIterator TargetVer,
+ std::string const &TargetRel,
+ std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > &Changed);
+
+ /** Set the "is automatically installed" flag of Pkg. */
+ void MarkAuto(const PkgIterator &Pkg, bool Auto);
+ // @}
+
+ /** \return \b true if it's OK for MarkInstall to install
+ * the given package.
+ *
+ * The default implementation simply calls all IsInstallOk*
+ * method mentioned below.
+ *
+ * Overriding implementations should use the hold-state-flag to
+ * cache results from previous checks of this package - if possible.
+ *
+ * The parameters are the same as in the calling MarkInstall:
+ * \param Pkg the package that MarkInstall wants to install.
+ * \param AutoInst install this and all its dependencies
+ * \param Depth recursive deep of this Marker call
+ * \param FromUser was the install requested by the user?
+ */
+ virtual bool IsInstallOk(const PkgIterator &Pkg,bool AutoInst = true,
+ unsigned long Depth = 0, bool FromUser = true);
+
+ /** \return \b true if it's OK for MarkDelete to remove
+ * the given package.
+ *
+ * The default implementation simply calls all IsDeleteOk*
+ * method mentioned below, see also #IsInstallOk.
+ *
+ * The parameters are the same as in the calling MarkDelete:
+ * \param Pkg the package that MarkDelete wants to remove.
+ * \param MarkPurge should we purge instead of "only" remove?
+ * \param Depth recursive deep of this Marker call
+ * \param FromUser was the remove requested by the user?
+ */
+ virtual bool IsDeleteOk(const PkgIterator &Pkg,bool MarkPurge = false,
+ unsigned long Depth = 0, bool FromUser = true);
+
+ // read persistent states
+ bool readStateFile(OpProgress * const prog);
+ bool writeStateFile(OpProgress * const prog, bool const InstalledOnly=true);
+
+ // Size queries
+ inline signed long long UsrSize() {return iUsrSize;};
+ inline unsigned long long DebSize() {return iDownloadSize;};
+ inline unsigned long DelCount() {return iDelCount;};
+ inline unsigned long KeepCount() {return iKeepCount;};
+ inline unsigned long InstCount() {return iInstCount;};
+ inline unsigned long BrokenCount() {return iBrokenCount;};
+ inline unsigned long PolicyBrokenCount() {return iPolicyBrokenCount;};
+ inline unsigned long BadCount() {return iBadCount;};
+
+ bool Init(OpProgress * const Prog);
+ // Generate all state information
+ void Update(OpProgress * const Prog = 0);
+
+ pkgDepCache(pkgCache * const Cache,Policy * const Plcy = 0);
+ virtual ~pkgDepCache();
+
+ protected:
+ // methods call by IsInstallOk
+ bool IsInstallOkMultiArchSameVersionSynced(PkgIterator const &Pkg,
+ bool const AutoInst, unsigned long const Depth, bool const FromUser);
+ bool IsInstallOkDependenciesSatisfiableByCandidates(PkgIterator const &Pkg,
+ bool const AutoInst, unsigned long const Depth, bool const FromUser);
+
+ // methods call by IsDeleteOk
+ bool IsDeleteOkProtectInstallRequests(PkgIterator const &Pkg,
+ bool const rPurge, unsigned long const Depth, bool const FromUser);
+
+ private:
+ void * const d;
+
+ APT_HIDDEN bool IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
+ unsigned long const Depth, bool const FromUser);
+};
+
+#endif
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc
new file mode 100644
index 0000000..2e39be3
--- /dev/null
+++ b/apt-pkg/edsp.cc
@@ -0,0 +1,1505 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+ Set of methods to help writing and reading everything needed for EDSP
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/prettyprinters.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/string_view.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <ctype.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <array>
+#include <limits>
+#include <string>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using std::string;
+
+// we could use pkgCache::DepType and ::Priority, but these would be localized strings…
+constexpr char const * const PrioMap[] = {
+ nullptr, "important", "required", "standard",
+ "optional", "extra"
+};
+constexpr char const * const DepMap[] = {
+ nullptr, "Depends", "Pre-Depends", "Suggests",
+ "Recommends" , "Conflicts", "Replaces",
+ "Obsoletes", "Breaks", "Enhances"
+};
+
+// WriteOkay - varaidic helper to easily Write to a FileFd /*{{{*/
+static bool WriteOkay_fn(FileFd &) { return true; }
+template<typename... Tail> static bool WriteOkay_fn(FileFd &output, APT::StringView data, Tail... more_data)
+{
+ return likely(output.Write(data.data(), data.length()) && WriteOkay_fn(output, more_data...));
+}
+template<typename... Tail> static bool WriteOkay_fn(FileFd &output, unsigned int data, Tail... more_data)
+{
+ std::string number;
+ strprintf(number, "%d", data);
+ return likely(output.Write(number.data(), number.length()) && WriteOkay_fn(output, more_data...));
+}
+template<typename... Data> static bool WriteOkay(bool &Okay, FileFd &output, Data&&... data)
+{
+ Okay = likely(Okay && WriteOkay_fn(output, std::forward<Data>(data)...));
+ return Okay;
+}
+template<typename... Data> static bool WriteOkay(FileFd &output, Data&&... data)
+{
+ bool Okay = likely(output.Failed() == false);
+ return WriteOkay(Okay, output, std::forward<Data>(data)...);
+}
+ /*}}}*/
+// WriteScenarioVersion /*{{{*/
+static void WriteScenarioVersion(pkgDepCache &Cache, FILE* output, pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver)
+{
+ fprintf(output, "Package: %s\n", Pkg.Name());
+ fprintf(output, "Source: %s\n", Ver.SourcePkgName());
+ fprintf(output, "Architecture: %s\n", Ver.Arch());
+ fprintf(output, "Version: %s\n", Ver.VerStr());
+ fprintf(output, "Source-Version: %s\n", Ver.SourceVerStr());
+ if (Pkg.CurrentVer() == Ver)
+ fprintf(output, "Installed: yes\n");
+ if (Pkg->SelectedState == pkgCache::State::Hold ||
+ (Cache[Pkg].Keep() == true && Cache[Pkg].Protect() == true))
+ fprintf(output, "Hold: yes\n");
+ fprintf(output, "APT-ID: %d\n", Ver->ID);
+ if (PrioMap[Ver->Priority] != nullptr)
+ fprintf(output, "Priority: %s\n", PrioMap[Ver->Priority]);
+ if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ fprintf(output, "Essential: yes\n");
+ if (Ver->Section != 0)
+ fprintf(output, "Section: %s\n", Ver.Section());
+ if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
+ fprintf(output, "Multi-Arch: allowed\n");
+ else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
+ fprintf(output, "Multi-Arch: foreign\n");
+ else if ((Ver->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ fprintf(output, "Multi-Arch: same\n");
+ std::set<string> Releases;
+ for (pkgCache::VerFileIterator I = Ver.FileList(); I.end() == false; ++I) {
+ pkgCache::PkgFileIterator File = I.File();
+ if (File.Flagged(pkgCache::Flag::NotSource) == false) {
+ string Release = File.RelStr();
+ if (!Release.empty())
+ Releases.insert(Release);
+ }
+ }
+ if (!Releases.empty()) {
+ fprintf(output, "APT-Release:\n");
+ for (std::set<string>::iterator R = Releases.begin(); R != Releases.end(); ++R)
+ fprintf(output, " %s\n", R->c_str());
+ }
+ fprintf(output, "APT-Pin: %d\n", Cache.GetPolicy().GetPriority(Ver));
+ if (Cache.GetCandidateVersion(Pkg) == Ver)
+ fprintf(output, "APT-Candidate: yes\n");
+ if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+ fprintf(output, "APT-Automatic: yes\n");
+}
+static bool WriteScenarioVersion(FileFd &output, pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver)
+{
+ bool Okay = WriteOkay(output, "Package: ", Pkg.Name(),
+ "\nArchitecture: ", Ver.Arch(),
+ "\nVersion: ", Ver.VerStr());
+ WriteOkay(Okay, output, "\nAPT-ID: ", Ver->ID);
+ if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ WriteOkay(Okay, output, "\nEssential: yes");
+ if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
+ WriteOkay(Okay, output, "\nMulti-Arch: allowed");
+ else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
+ WriteOkay(Okay, output, "\nMulti-Arch: foreign");
+ else if ((Ver->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ WriteOkay(Okay, output, "\nMulti-Arch: same");
+ return Okay;
+}
+ /*}}}*/
+// WriteScenarioDependency /*{{{*/
+static void WriteScenarioDependency( FILE* output, pkgCache::VerIterator const &Ver)
+{
+ std::array<std::string, _count(DepMap)> dependencies;
+ bool orGroup = false;
+ for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+ {
+ if (Dep.IsImplicit() == true)
+ continue;
+ if (orGroup == false)
+ dependencies[Dep->Type].append(", ");
+ dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+ if (Dep->Version != 0)
+ dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ dependencies[Dep->Type].append(" | ");
+ orGroup = true;
+ }
+ else
+ orGroup = false;
+ }
+ for (size_t i = 1; i < dependencies.size(); ++i)
+ if (dependencies[i].empty() == false)
+ fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()+2);
+ string provides;
+ for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (Prv.IsMultiArchImplicit() == true)
+ continue;
+ if (provides.empty() == false)
+ provides.append(", ");
+ provides.append(Prv.Name());
+ if (Prv->ProvideVersion != 0)
+ provides.append(" (= ").append(Prv.ProvideVersion()).append(")");
+ }
+ if (provides.empty() == false)
+ fprintf(output, "Provides: %s\n", provides.c_str());
+}
+static bool WriteScenarioDependency(FileFd &output, pkgCache::VerIterator const &Ver, bool const OnlyCritical)
+{
+ std::array<std::string, _count(DepMap)> dependencies;
+ bool orGroup = false;
+ for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+ {
+ if (Dep.IsImplicit() == true)
+ continue;
+ if (OnlyCritical && Dep.IsCritical() == false)
+ continue;
+ if (orGroup == false && dependencies[Dep->Type].empty() == false)
+ dependencies[Dep->Type].append(", ");
+ dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+ if (Dep->Version != 0)
+ dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ dependencies[Dep->Type].append(" | ");
+ orGroup = true;
+ }
+ else
+ orGroup = false;
+ }
+ bool Okay = output.Failed() == false;
+ for (size_t i = 1; i < dependencies.size(); ++i)
+ if (dependencies[i].empty() == false)
+ WriteOkay(Okay, output, "\n", DepMap[i], ": ", dependencies[i]);
+ string provides;
+ for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (Prv.IsMultiArchImplicit() == true)
+ continue;
+ if (provides.empty() == false)
+ provides.append(", ");
+ provides.append(Prv.Name());
+ if (Prv->ProvideVersion != 0)
+ provides.append(" (= ").append(Prv.ProvideVersion()).append(")");
+ }
+ if (provides.empty() == false)
+ WriteOkay(Okay, output, "\nProvides: ", provides);
+ return WriteOkay(Okay, output, "\n");
+}
+ /*}}}*/
+// WriteScenarioLimitedDependency /*{{{*/
+static void WriteScenarioLimitedDependency(FILE* output,
+ pkgCache::VerIterator const &Ver,
+ APT::PackageSet const &pkgset)
+{
+ std::array<std::string, _count(DepMap)> dependencies;
+ bool orGroup = false;
+ for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+ {
+ if (Dep.IsImplicit() == true)
+ continue;
+ if (orGroup == false)
+ {
+ if (pkgset.find(Dep.TargetPkg()) == pkgset.end())
+ continue;
+ if (dependencies[Dep->Type].empty() == false)
+ dependencies[Dep->Type].append(", ");
+ }
+ else if (pkgset.find(Dep.TargetPkg()) == pkgset.end())
+ {
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ continue;
+ dependencies[Dep->Type].erase(dependencies[Dep->Type].end()-3, dependencies[Dep->Type].end());
+ orGroup = false;
+ continue;
+ }
+ dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+ if (Dep->Version != 0)
+ dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ dependencies[Dep->Type].append(" | ");
+ orGroup = true;
+ }
+ else
+ orGroup = false;
+ }
+ for (size_t i = 1; i < dependencies.size(); ++i)
+ if (dependencies[i].empty() == false)
+ fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str());
+ string provides;
+ for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (Prv.IsMultiArchImplicit() == true)
+ continue;
+ if (pkgset.find(Prv.ParentPkg()) == pkgset.end())
+ continue;
+ if (provides.empty() == false)
+ provides.append(", ");
+ provides.append(Prv.Name());
+ if (Prv->ProvideVersion != 0)
+ provides.append(" (= ").append(Prv.ProvideVersion()).append(")");
+ }
+ if (provides.empty() == false)
+ fprintf(output, "Provides: %s\n", provides.c_str());
+}
+static bool WriteScenarioLimitedDependency(FileFd &output,
+ pkgCache::VerIterator const &Ver,
+ std::vector<bool> const &pkgset,
+ bool const OnlyCritical)
+{
+ std::array<std::string, _count(DepMap)> dependencies;
+ bool orGroup = false;
+ for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+ {
+ if (Dep.IsImplicit() == true)
+ continue;
+ if (OnlyCritical && Dep.IsCritical() == false)
+ continue;
+ if (orGroup == false)
+ {
+ if (pkgset[Dep.TargetPkg()->ID] == false)
+ continue;
+ if (dependencies[Dep->Type].empty() == false)
+ dependencies[Dep->Type].append(", ");
+ }
+ else if (pkgset[Dep.TargetPkg()->ID] == false)
+ {
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ continue;
+ dependencies[Dep->Type].erase(dependencies[Dep->Type].end()-3, dependencies[Dep->Type].end());
+ orGroup = false;
+ continue;
+ }
+ dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+ if (Dep->Version != 0)
+ dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ dependencies[Dep->Type].append(" | ");
+ orGroup = true;
+ }
+ else
+ orGroup = false;
+ }
+ bool Okay = output.Failed() == false;
+ for (size_t i = 1; i < dependencies.size(); ++i)
+ if (dependencies[i].empty() == false)
+ WriteOkay(Okay, output, "\n", DepMap[i], ": ", dependencies[i]);
+ string provides;
+ for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (Prv.IsMultiArchImplicit() == true)
+ continue;
+ if (pkgset[Prv.ParentPkg()->ID] == false)
+ continue;
+ if (provides.empty() == false)
+ provides.append(", ");
+ provides.append(Prv.Name());
+ if (Prv->ProvideVersion != 0)
+ provides.append(" (= ").append(Prv.ProvideVersion()).append(")");
+ }
+ if (provides.empty() == false)
+ WriteOkay(Okay, output, "\nProvides: ", provides);
+ return WriteOkay(Okay, output, "\n");
+}
+ /*}}}*/
+static bool SkipUnavailableVersions(pkgDepCache &Cache, pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver)/*{{{*/
+{
+ /* versions which aren't current and aren't available in
+ any "online" source file are bad, expect if they are the chosen
+ candidate: The exception is for build-dep implementation as it creates
+ such pseudo (package) versions and removes them later on again.
+ We filter out versions at all so packages in 'rc' state only available
+ in dpkg/status aren't passed to solvers as they can't be installed. */
+ if (Pkg->CurrentVer != 0)
+ return false;
+ if (Cache.GetCandidateVersion(Pkg) == Ver)
+ return false;
+ for (pkgCache::VerFileIterator I = Ver.FileList(); I.end() == false; ++I)
+ if (I.File().Flagged(pkgCache::Flag::NotSource) == false)
+ return false;
+ return true;
+}
+ /*}}}*/
+static bool WriteScenarioEDSPVersion(pkgDepCache &Cache, FileFd &output, pkgCache::PkgIterator const &Pkg,/*{{{*/
+ pkgCache::VerIterator const &Ver)
+{
+ bool Okay = WriteOkay(output, "\nSource: ", Ver.SourcePkgName(),
+ "\nSource-Version: ", Ver.SourceVerStr());
+ if (PrioMap[Ver->Priority] != nullptr)
+ WriteOkay(Okay, output, "\nPriority: ", PrioMap[Ver->Priority]);
+ if (Ver->Section != 0)
+ WriteOkay(Okay, output, "\nSection: ", Ver.Section());
+ if (Pkg.CurrentVer() == Ver)
+ WriteOkay(Okay, output, "\nInstalled: yes");
+ if (Pkg->SelectedState == pkgCache::State::Hold ||
+ (Cache[Pkg].Keep() == true && Cache[Pkg].Protect() == true))
+ WriteOkay(Okay, output, "\nHold: yes");
+ std::set<string> Releases;
+ for (pkgCache::VerFileIterator I = Ver.FileList(); I.end() == false; ++I) {
+ pkgCache::PkgFileIterator File = I.File();
+ if (File.Flagged(pkgCache::Flag::NotSource) == false) {
+ string Release = File.RelStr();
+ if (!Release.empty())
+ Releases.insert(Release);
+ }
+ }
+ if (!Releases.empty()) {
+ WriteOkay(Okay, output, "\nAPT-Release:");
+ for (std::set<string>::iterator R = Releases.begin(); R != Releases.end(); ++R)
+ WriteOkay(Okay, output, "\n ", *R);
+ }
+ WriteOkay(Okay, output, "\nAPT-Pin: ", Cache.GetPolicy().GetPriority(Ver));
+ if (Cache.GetCandidateVersion(Pkg) == Ver)
+ WriteOkay(Okay, output, "\nAPT-Candidate: yes");
+ if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+ WriteOkay(Okay, output, "\nAPT-Automatic: yes");
+ return Okay;
+}
+ /*}}}*/
+// EDSP::WriteScenario - to the given file descriptor /*{{{*/
+bool EDSP::WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+ decltype(Cache.Head().VersionCount) p = 0;
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ std::string const arch = Pkg.Arch();
+ if (std::find(archs.begin(), archs.end(), arch) == archs.end())
+ continue;
+ for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver, ++p)
+ {
+ if (SkipUnavailableVersions(Cache, Pkg, Ver))
+ continue;
+ WriteScenarioVersion(Cache, output, Pkg, Ver);
+ WriteScenarioDependency(output, Ver);
+ fprintf(output, "\n");
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ }
+ }
+ return true;
+}
+bool EDSP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+ decltype(Cache.Head().VersionCount) p = 0;
+ bool Okay = output.Failed() == false;
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg)
+ {
+ std::string const arch = Pkg.Arch();
+ if (std::find(archs.begin(), archs.end(), arch) == archs.end())
+ continue;
+ for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false && likely(Okay); ++Ver, ++p)
+ {
+ if (SkipUnavailableVersions(Cache, Pkg, Ver))
+ continue;
+ Okay &= WriteScenarioVersion(output, Pkg, Ver);
+ Okay &= WriteScenarioEDSPVersion(Cache, output, Pkg, Ver);
+ Okay &= WriteScenarioDependency(output, Ver, false);
+ WriteOkay(Okay, output, "\n");
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ }
+ }
+ return Okay;
+}
+ /*}}}*/
+// EDSP::WriteLimitedScenario - to the given file descriptor /*{{{*/
+bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FILE* output,
+ APT::PackageSet const &pkgset,
+ OpProgress *Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+ decltype(Cache.Head().PackageCount) p = 0;
+ for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg, ++p)
+ for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
+ {
+ if (SkipUnavailableVersions(Cache, Pkg, Ver))
+ continue;
+ WriteScenarioVersion(Cache, output, Pkg, Ver);
+ WriteScenarioLimitedDependency(output, Ver, pkgset);
+ fprintf(output, "\n");
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ }
+ if (Progress != NULL)
+ Progress->Done();
+ return true;
+}
+bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FileFd &output,
+ std::vector<bool> const &pkgset,
+ OpProgress *Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+ decltype(Cache.Head().PackageCount) p = 0;
+ bool Okay = output.Failed() == false;
+ for (auto Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg, ++p)
+ {
+ if (pkgset[Pkg->ID] == false)
+ continue;
+ for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false && likely(Okay); ++Ver)
+ {
+ if (SkipUnavailableVersions(Cache, Pkg, Ver))
+ continue;
+ Okay &= WriteScenarioVersion(output, Pkg, Ver);
+ Okay &= WriteScenarioEDSPVersion(Cache, output, Pkg, Ver);
+ Okay &= WriteScenarioLimitedDependency(output, Ver, pkgset, false);
+ WriteOkay(Okay, output, "\n");
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ }
+ }
+ if (Progress != NULL)
+ Progress->Done();
+ return Okay;
+}
+ /*}}}*/
+// EDSP::WriteRequest - to the given file descriptor /*{{{*/
+bool EDSP::WriteRequest(pkgDepCache &Cache, FILE* output, bool const Upgrade,
+ bool const DistUpgrade, bool const AutoRemove,
+ OpProgress *Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().PackageCount, _("Send request to solver"));
+ decltype(Cache.Head().PackageCount) p = 0;
+ string del, inst;
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p)
+ {
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ string* req;
+ pkgDepCache::StateCache &P = Cache[Pkg];
+ if (P.Delete() == true)
+ req = &del;
+ else if (P.NewInstall() == true || P.Upgrade() == true || P.ReInstall() == true ||
+ (P.Mode == pkgDepCache::ModeKeep && (P.iFlags & pkgDepCache::Protected) == pkgDepCache::Protected))
+ req = &inst;
+ else
+ continue;
+ req->append(" ").append(Pkg.FullName());
+ }
+ fprintf(output, "Request: EDSP 0.5\n");
+
+ const char *arch = _config->Find("APT::Architecture").c_str();
+ std::vector<string> archs = APT::Configuration::getArchitectures();
+ fprintf(output, "Architecture: %s\n", arch);
+ fprintf(output, "Architectures:");
+ for (std::vector<string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
+ fprintf(output, " %s", a->c_str());
+ fprintf(output, "\n");
+
+ if (del.empty() == false)
+ fprintf(output, "Remove: %s\n", del.c_str()+1);
+ if (inst.empty() == false)
+ fprintf(output, "Install: %s\n", inst.c_str()+1);
+ if (Upgrade == true)
+ fprintf(output, "Upgrade: yes\n");
+ if (DistUpgrade == true)
+ fprintf(output, "Dist-Upgrade: yes\n");
+ if (AutoRemove == true)
+ fprintf(output, "Autoremove: yes\n");
+ auto const solver = _config->Find("APT::Solver", "internal");
+ fprintf(output, "Solver: %s\n", solver.c_str());
+ auto const solverconf = std::string("APT::Solver::") + solver + "::";
+ if (_config->FindB(solverconf + "Strict-Pinning", _config->FindB("APT::Solver::Strict-Pinning", true)) == false)
+ fprintf(output, "Strict-Pinning: no\n");
+ auto const solverpref = _config->Find(solverconf + "Preferences", _config->Find("APT::Solver::Preferences", ""));
+ if (solverpref.empty() == false)
+ fprintf(output, "Preferences: %s\n", solverpref.c_str());
+ fprintf(output, "\n");
+ return true;
+}
+bool EDSP::WriteRequest(pkgDepCache &Cache, FileFd &output,
+ unsigned int const flags,
+ OpProgress *Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().PackageCount, _("Send request to solver"));
+ decltype(Cache.Head().PackageCount) p = 0;
+ string del, inst;
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p)
+ {
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ string* req;
+ pkgDepCache::StateCache &P = Cache[Pkg];
+ if (P.Delete() == true)
+ req = &del;
+ else if (P.NewInstall() == true || P.Upgrade() == true || P.ReInstall() == true ||
+ (P.Mode == pkgDepCache::ModeKeep && (P.iFlags & pkgDepCache::Protected) == pkgDepCache::Protected))
+ req = &inst;
+ else
+ continue;
+ req->append(" ").append(Pkg.FullName());
+ }
+ bool Okay = WriteOkay(output, "Request: EDSP 0.5\n");
+
+ const char *arch = _config->Find("APT::Architecture").c_str();
+ std::vector<string> archs = APT::Configuration::getArchitectures();
+ WriteOkay(Okay, output, "Architecture: ", arch, "\n",
+ "Architectures:");
+ for (std::vector<string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
+ WriteOkay(Okay, output, " ", *a);
+ WriteOkay(Okay, output, "\n");
+
+ if (del.empty() == false)
+ WriteOkay(Okay, output, "Remove:", del, "\n");
+ if (inst.empty() == false)
+ WriteOkay(Okay, output, "Install:", inst, "\n");
+ if (flags & Request::AUTOREMOVE)
+ WriteOkay(Okay, output, "Autoremove: yes\n");
+ if (flags & Request::UPGRADE_ALL)
+ {
+ WriteOkay(Okay, output, "Upgrade-All: yes\n");
+ if (flags & (Request::FORBID_NEW_INSTALL | Request::FORBID_REMOVE))
+ WriteOkay(Okay, output, "Upgrade: yes\n");
+ else
+ WriteOkay(Okay, output, "Dist-Upgrade: yes\n");
+ }
+ if (flags & Request::FORBID_NEW_INSTALL)
+ WriteOkay(Okay, output, "Forbid-New-Install: yes\n");
+ if (flags & Request::FORBID_REMOVE)
+ WriteOkay(Okay, output, "Forbid-Remove: yes\n");
+ auto const solver = _config->Find("APT::Solver", "internal");
+ WriteOkay(Okay, output, "Solver: ", solver, "\n");
+ if (_config->FindB("APT::Solver::Strict-Pinning", true) == false)
+ WriteOkay(Okay, output, "Strict-Pinning: no\n");
+ string solverpref("APT::Solver::");
+ solverpref.append(solver).append("::Preferences");
+ if (_config->Exists(solverpref) == true)
+ WriteOkay(Okay, output, "Preferences: ", _config->Find(solverpref,""), "\n");
+ return WriteOkay(Okay, output, "\n");
+}
+ /*}}}*/
+// EDSP::ReadResponse - from the given file descriptor /*{{{*/
+bool EDSP::ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress) {
+ /* We build an map id to mmap offset here
+ In theory we could use the offset as ID, but then VersionCount
+ couldn't be used to create other versionmappings anymore and it
+ would be too easy for a (buggy) solver to segfault APT… */
+ auto VersionCount = Cache.Head().VersionCount;
+ decltype(VersionCount) VerIdx[VersionCount];
+ for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; ++P) {
+ for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+ VerIdx[V->ID] = V.Index();
+ Cache[P].Marked = true;
+ Cache[P].Garbage = false;
+ }
+
+ FileFd in;
+ in.OpenDescriptor(input, FileFd::ReadOnly, true);
+ pkgTagFile response(&in, 100);
+ pkgTagSection section;
+
+ std::set<decltype(Cache.PkgBegin()->ID)> seenOnce;
+ while (response.Step(section) == true) {
+ std::string type;
+ if (section.Exists("Install") == true)
+ type = "Install";
+ else if (section.Exists("Remove") == true)
+ type = "Remove";
+ else if (section.Exists("Progress") == true) {
+ if (Progress != NULL) {
+ string msg = section.FindS("Message");
+ if (msg.empty() == true)
+ msg = _("Prepare for receiving solution");
+ Progress->SubProgress(100, msg, section.FindI("Percentage", 0));
+ }
+ continue;
+ } else if (section.Exists("Error") == true) {
+ if (_error->PendingError()) {
+ if (Progress != nullptr)
+ Progress->Done();
+ Progress = nullptr;
+ _error->DumpErrors(std::cerr, GlobalError::DEBUG, false);
+ }
+ std::string msg = SubstVar(SubstVar(section.FindS("Message"), "\n .\n", "\n\n"), "\n ", "\n");
+ if (msg.empty() == true) {
+ msg = _("External solver failed without a proper error message");
+ _error->Error("%s", msg.c_str());
+ } else
+ _error->Error("External solver failed with: %s", msg.substr(0,msg.find('\n')).c_str());
+ if (Progress != nullptr)
+ Progress->Done();
+ std::cerr << "The solver encountered an error of type: " << section.FindS("Error") << std::endl;
+ std::cerr << "The following information might help you to understand what is wrong:" << std::endl;
+ std::cerr << msg << std::endl << std::endl;
+ return false;
+ } else if (section.Exists("Autoremove") == true)
+ type = "Autoremove";
+ else {
+ char const *Start, *End;
+ section.GetSection(Start, End);
+ _error->Warning("Encountered an unexpected section with %d fields: %s", section.Count(), std::string(Start, End).c_str());
+ continue;
+ }
+
+ decltype(VersionCount) const id = section.FindULL(type.c_str(), VersionCount);
+ if (id == VersionCount) {
+ _error->Warning("Unable to parse %s request with id value '%s'!", type.c_str(), section.FindS(type.c_str()).c_str());
+ continue;
+ } else if (id > VersionCount) {
+ _error->Warning("ID value '%s' in %s request stanza is to high to refer to a known version!", section.FindS(type.c_str()).c_str(), type.c_str());
+ continue;
+ }
+
+ pkgCache::VerIterator Ver(Cache.GetCache(), Cache.GetCache().VerP + VerIdx[id]);
+ auto const Pkg = Ver.ParentPkg();
+ if (type == "Autoremove") {
+ Cache[Pkg].Marked = false;
+ Cache[Pkg].Garbage = true;
+ } else if (seenOnce.emplace(Pkg->ID).second == false) {
+ _error->Warning("Ignoring %s stanza received for package %s which already had a previous stanza effecting it!", type.c_str(), Pkg.FullName(false).c_str());
+ } else if (type == "Install") {
+ if (Pkg.CurrentVer() == Ver) {
+ _error->Warning("Ignoring Install stanza received for version %s of package %s which is already installed!",
+ Ver.VerStr(), Pkg.FullName(false).c_str());
+ } else {
+ Cache.SetCandidateVersion(Ver);
+ Cache.MarkInstall(Pkg, false, 0, false);
+ }
+ } else if (type == "Remove") {
+ if (Pkg->CurrentVer == 0)
+ _error->Warning("Ignoring Remove stanza received for version %s of package %s which isn't installed!",
+ Ver.VerStr(), Pkg.FullName(false).c_str());
+ else if (Pkg.CurrentVer() != Ver)
+ _error->Warning("Ignoring Remove stanza received for version %s of package %s which isn't the installed version %s!",
+ Ver.VerStr(), Pkg.FullName(false).c_str(), Pkg.CurrentVer().VerStr());
+ else
+ Cache.MarkDelete(Ver.ParentPkg(), false);
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// ReadLine - first line from the given file descriptor /*{{{*/
+// ---------------------------------------------------------------------
+/* Little helper method to read a complete line into a string. Similar to
+ fgets but we need to use the low-level read() here as otherwise the
+ listparser will be confused later on as mixing of fgets and read isn't
+ a supported action according to the manpages and results are undefined */
+static bool ReadLine(int const input, std::string &line) {
+ char one;
+ ssize_t data = 0;
+ line.erase();
+ line.reserve(100);
+ while ((data = read(input, &one, sizeof(one))) != -1) {
+ if (data != 1)
+ continue;
+ if (one == '\n')
+ return true;
+ if (one == '\r')
+ continue;
+ if (line.empty() == true && isblank(one) != 0)
+ continue;
+ line += one;
+ }
+ return false;
+}
+ /*}}}*/
+// StringToBool - convert yes/no to bool /*{{{*/
+// ---------------------------------------------------------------------
+/* we are not as lazy as we are in the global StringToBool as we really
+ only accept yes/no here */
+static bool localStringToBool(std::string answer, bool const defValue) {
+ std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower);
+ if (answer == "yes")
+ return true;
+ else if (answer == "no")
+ return false;
+ else
+ _error->Warning("Value '%s' is not a boolean 'yes' or 'no'!", answer.c_str());
+ return defValue;
+}
+ /*}}}*/
+static bool LineStartsWithAndStrip(std::string &line, APT::StringView const with)/*{{{*/
+{
+ if (line.compare(0, with.size(), with.data()) != 0)
+ return false;
+ line = APT::String::Strip(line.substr(with.length()));
+ return true;
+}
+ /*}}}*/
+static bool ReadFlag(unsigned int &flags, std::string &line, APT::StringView const name, unsigned int const setflag)/*{{{*/
+{
+ if (LineStartsWithAndStrip(line, name) == false)
+ return false;
+ if (localStringToBool(line, false))
+ flags |= setflag;
+ else
+ flags &= ~setflag;
+ return true;
+}
+ /*}}}*/
+// EDSP::ReadRequest - first stanza from the given file descriptor /*{{{*/
+bool EDSP::ReadRequest(int const input, std::list<std::string> &install,
+ std::list<std::string> &remove, unsigned int &flags)
+{
+ install.clear();
+ remove.clear();
+ flags = 0;
+ std::string line;
+ while (ReadLine(input, line) == true)
+ {
+ // Skip empty lines before request
+ if (line.empty() == true)
+ continue;
+ // The first Tag must be a request, so search for it
+ if (LineStartsWithAndStrip(line, "Request:"))
+ continue;
+
+ while (ReadLine(input, line) == true)
+ {
+ // empty lines are the end of the request
+ if (line.empty() == true)
+ return true;
+
+ std::list<std::string> *request = NULL;
+ if (LineStartsWithAndStrip(line, "Install:"))
+ request = &install;
+ else if (LineStartsWithAndStrip(line, "Remove:"))
+ request = &remove;
+ else if (ReadFlag(flags, line, "Upgrade:", (Request::UPGRADE_ALL | Request::FORBID_REMOVE | Request::FORBID_NEW_INSTALL)) ||
+ ReadFlag(flags, line, "Dist-Upgrade:", Request::UPGRADE_ALL) ||
+ ReadFlag(flags, line, "Upgrade-All:", Request::UPGRADE_ALL) ||
+ ReadFlag(flags, line, "Forbid-New-Install:", Request::FORBID_NEW_INSTALL) ||
+ ReadFlag(flags, line, "Forbid-Remove:", Request::FORBID_REMOVE) ||
+ ReadFlag(flags, line, "Autoremove:", Request::AUTOREMOVE))
+ ;
+ else if (LineStartsWithAndStrip(line, "Architecture:"))
+ _config->Set("APT::Architecture", line);
+ else if (LineStartsWithAndStrip(line, "Architectures:"))
+ _config->Set("APT::Architectures", SubstVar(line, " ", ","));
+ else if (LineStartsWithAndStrip(line, "Solver:"))
+ ; // purely informational line
+ else
+ _error->Warning("Unknown line in EDSP Request stanza: %s", line.c_str());
+
+ if (request == NULL)
+ continue;
+ auto const pkgs = VectorizeString(line, ' ');
+ std::move(pkgs.begin(), pkgs.end(), std::back_inserter(*request));
+ }
+ }
+ return false;
+}
+bool EDSP::ReadRequest(int const input, std::list<std::string> &install,
+ std::list<std::string> &remove, bool &upgrade,
+ bool &distUpgrade, bool &autoRemove)
+{
+ unsigned int flags;
+ auto const ret = ReadRequest(input, install, remove, flags);
+ autoRemove = (flags & Request::AUTOREMOVE);
+ if (flags & Request::UPGRADE_ALL)
+ {
+ if (flags & (Request::FORBID_NEW_INSTALL | Request::FORBID_REMOVE))
+ {
+ upgrade = true;
+ distUpgrade = false;
+ } else {
+ upgrade = false;
+ distUpgrade = false;
+ }
+ }
+ else
+ {
+ upgrade = false;
+ distUpgrade = false;
+ }
+ return ret;
+}
+ /*}}}*/
+// EDSP::ApplyRequest - first stanza from the given file descriptor /*{{{*/
+bool EDSP::ApplyRequest(std::list<std::string> const &install,
+ std::list<std::string> const &remove,
+ pkgDepCache &Cache)
+{
+ for (std::list<std::string>::const_iterator i = install.begin();
+ i != install.end(); ++i) {
+ pkgCache::PkgIterator P = Cache.FindPkg(*i);
+ if (P.end() == true)
+ _error->Warning("Package %s is not known, so can't be installed", i->c_str());
+ else
+ Cache.MarkInstall(P, false);
+ }
+
+ for (std::list<std::string>::const_iterator i = remove.begin();
+ i != remove.end(); ++i) {
+ pkgCache::PkgIterator P = Cache.FindPkg(*i);
+ if (P.end() == true)
+ _error->Warning("Package %s is not known, so can't be installed", i->c_str());
+ else
+ Cache.MarkDelete(P);
+ }
+ return true;
+}
+ /*}}}*/
+// EDSP::WriteSolutionStanza - to the given file descriptor /*{{{*/
+bool EDSP::WriteSolution(pkgDepCache &Cache, FILE* output)
+{
+ bool const Debug = _config->FindB("Debug::EDSP::WriteSolution", false);
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ if (Cache[Pkg].Delete() == true)
+ {
+ fprintf(output, "Remove: %d\n", _system->GetVersionMapping(Pkg.CurrentVer()->ID));
+ if (Debug == true)
+ fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+ }
+ else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true)
+ {
+ pkgCache::VerIterator const CandVer = Cache.GetCandidateVersion(Pkg);
+ fprintf(output, "Install: %d\n", _system->GetVersionMapping(CandVer->ID));
+ if (Debug == true)
+ fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), CandVer.VerStr());
+ }
+ else if (Cache[Pkg].Garbage == true)
+ {
+ fprintf(output, "Autoremove: %d\n", _system->GetVersionMapping(Pkg.CurrentVer()->ID));
+ if (Debug == true)
+ fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+ }
+ else
+ continue;
+ fprintf(output, "\n");
+ }
+
+ return true;
+}
+bool EDSP::WriteSolutionStanza(FileFd &output, char const * const Type, pkgCache::VerIterator const &Ver)
+{
+ bool Okay = output.Failed() == false;
+ WriteOkay(Okay, output, Type, ": ", _system->GetVersionMapping(Ver->ID));
+ if (_config->FindB("Debug::EDSP::WriteSolution", false) == true)
+ WriteOkay(Okay, output, "\nPackage: ", Ver.ParentPkg().FullName(), "\nVersion: ", Ver.VerStr());
+ return WriteOkay(Okay, output, "\n\n");
+}
+ /*}}}*/
+// EDSP::WriteProgess - pulse to the given file descriptor /*{{{*/
+bool EDSP::WriteProgress(unsigned short const percent, const char* const message, FILE* output) {
+ fprintf(output, "Progress: %s\n", TimeRFC1123(time(NULL), true).c_str());
+ fprintf(output, "Percentage: %d\n", percent);
+ fprintf(output, "Message: %s\n\n", message);
+ fflush(output);
+ return true;
+}
+bool EDSP::WriteProgress(unsigned short const percent, const char* const message, FileFd &output) {
+ return WriteOkay(output, "Progress: ", TimeRFC1123(time(NULL), true), "\n",
+ "Percentage: ", percent, "\n",
+ "Message: ", message, "\n\n") && output.Flush();
+}
+ /*}}}*/
+// EDSP::WriteError - format an error message to be send to file descriptor /*{{{*/
+static std::string formatMessage(std::string const &msg)
+{
+ return SubstVar(SubstVar(APT::String::Strip(msg), "\n\n", "\n.\n"), "\n", "\n ");
+}
+bool EDSP::WriteError(char const * const uuid, std::string const &message, FILE* output) {
+ fprintf(output, "Error: %s\n", uuid);
+ fprintf(output, "Message: %s\n\n", formatMessage(message).c_str());
+ return true;
+}
+bool EDSP::WriteError(char const * const uuid, std::string const &message, FileFd &output) {
+ return WriteOkay(output, "Error: ", uuid, "\n",
+ "Message: ", formatMessage(message),
+ "\n\n");
+}
+ /*}}}*/
+static std::string findExecutable(std::vector<std::string> const &dirs, char const * const binary) {/*{{{*/
+ for (auto && dir : dirs) {
+ std::string const file = flCombine(dir, binary);
+ if (RealFileExists(file) == true)
+ return file;
+ }
+ return "";
+}
+ /*}}}*/
+static pid_t ExecuteExternal(char const* const type, char const * const binary, char const * const configdir, int * const solver_in, int * const solver_out) {/*{{{*/
+ auto const solverDirs = _config->FindVector(configdir);
+ auto const file = findExecutable(solverDirs, binary);
+ std::string dumper;
+ {
+ dumper = findExecutable(solverDirs, "apt-dump-solver");
+ if (dumper.empty())
+ dumper = findExecutable(solverDirs, "dump");
+ }
+
+ if (file.empty() == true)
+ {
+ _error->Error("Can't call external %s '%s' as it is not in a configured directory!", type, binary);
+ return 0;
+ }
+ int external[4] = {-1, -1, -1, -1};
+ if (pipe(external) != 0 || pipe(external + 2) != 0)
+ {
+ _error->Errno("Resolve", "Can't create needed IPC pipes for EDSP");
+ return 0;
+ }
+ for (int i = 0; i < 4; ++i)
+ SetCloseExec(external[i], true);
+
+ pid_t Solver = ExecFork();
+ if (Solver == 0) {
+ dup2(external[0], STDIN_FILENO);
+ dup2(external[3], STDOUT_FILENO);
+ auto const dumpfile = _config->FindFile((std::string("Dir::Log::") + type).c_str());
+ auto const dumpdir = flNotFile(dumpfile);
+ auto const runasuser = _config->Find(std::string("APT::") + type + "::" + binary + "::RunAsUser",
+ _config->Find(std::string("APT::") + type + "::RunAsUser",
+ _config->Find("APT::Sandbox::User")));
+ if (dumper.empty() || dumpfile.empty() || dumper == file || CreateAPTDirectoryIfNeeded(dumpdir, dumpdir) == false)
+ {
+ _config->Set("APT::Sandbox::User", runasuser);
+ DropPrivileges();
+ char const * const calling[] = { file.c_str(), nullptr };
+ execv(calling[0], const_cast<char**>(calling));
+ }
+ else
+ {
+ char const * const calling[] = { dumper.c_str(), "--user", runasuser.c_str(), dumpfile.c_str(), file.c_str(), nullptr };
+ execv(calling[0], const_cast<char**>(calling));
+ }
+ std::cerr << "Failed to execute " << type << " '" << binary << "'!" << std::endl;
+ _exit(100);
+ }
+ close(external[0]);
+ close(external[3]);
+
+ if (WaitFd(external[1], true, 5) == false)
+ {
+ _error->Errno("Resolve", "Timed out while Waiting on availability of %s stdin", type);
+ return 0;
+ }
+
+ *solver_in = external[1];
+ *solver_out = external[2];
+ return Solver;
+}
+ /*}}}*/
+// EDSP::ExecuteSolver - fork requested solver and setup ipc pipes {{{*/
+pid_t EDSP::ExecuteSolver(const char* const solver, int * const solver_in, int * const solver_out, bool) {
+ return ExecuteExternal("solver", solver, "Dir::Bin::Solvers", solver_in, solver_out);
+}
+bool EDSP::ExecuteSolver(const char* const solver, int *solver_in, int *solver_out) {
+ if (ExecuteSolver(solver, solver_in, solver_out, true) == 0)
+ return false;
+ return true;
+}
+ /*}}}*/
+static bool CreateDumpFile(char const * const id, char const * const type, FileFd &output)/*{{{*/
+{
+ auto const dumpfile = _config->FindFile((std::string("Dir::Log::") + type).c_str());
+ if (dumpfile.empty())
+ return false;
+ auto const dumpdir = flNotFile(dumpfile);
+ _error->PushToStack();
+ bool errored_out = CreateAPTDirectoryIfNeeded(dumpdir, dumpdir) == false ||
+ output.Open(dumpfile, FileFd::WriteOnly | FileFd::Exclusive | FileFd::Create, FileFd::Extension, 0644) == false;
+ std::vector<std::string> downgrademsgs;
+ while (_error->empty() == false)
+ {
+ std::string msg;
+ _error->PopMessage(msg);
+ downgrademsgs.emplace_back(std::move(msg));
+ }
+ _error->RevertToStack();
+ for (auto && msg : downgrademsgs)
+ _error->Warning("%s", msg.c_str());
+ if (errored_out)
+ return _error->WarningE(id, _("Could not open file '%s'"), dumpfile.c_str());
+ return true;
+}
+ /*}}}*/
+// EDSP::ResolveExternal - resolve problems by asking external for help {{{*/
+bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache,
+ unsigned int const flags, OpProgress *Progress) {
+ if (strcmp(solver, "internal") == 0)
+ {
+ FileFd output;
+ bool Okay = CreateDumpFile("EDSP::Resolve", "solver", output);
+ Okay &= EDSP::WriteRequest(Cache, output, flags, nullptr);
+ return Okay && EDSP::WriteScenario(Cache, output, nullptr);
+ }
+ _error->PushToStack();
+ int solver_in, solver_out;
+ pid_t const solver_pid = ExecuteSolver(solver, &solver_in, &solver_out, true);
+ if (solver_pid == 0)
+ return false;
+
+ FileFd output;
+ if (output.OpenDescriptor(solver_in, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
+ return _error->Errno("ResolveExternal", "Opening solver %s stdin on fd %d for writing failed", solver, solver_in);
+
+ bool Okay = output.Failed() == false;
+ if (Okay && Progress != NULL)
+ Progress->OverallProgress(0, 100, 5, _("Execute external solver"));
+ Okay &= EDSP::WriteRequest(Cache, output, flags, Progress);
+ if (Okay && Progress != NULL)
+ Progress->OverallProgress(5, 100, 20, _("Execute external solver"));
+ Okay &= EDSP::WriteScenario(Cache, output, Progress);
+ output.Close();
+
+ if (Okay && Progress != NULL)
+ Progress->OverallProgress(25, 100, 75, _("Execute external solver"));
+ bool const ret = EDSP::ReadResponse(solver_out, Cache, Progress);
+ _error->MergeWithStack();
+ if (ExecWait(solver_pid, solver))
+ return ret;
+ return false;
+}
+bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache,
+ bool const upgrade, bool const distUpgrade,
+ bool const autoRemove, OpProgress *Progress) {
+ unsigned int flags = 0;
+ if (autoRemove)
+ flags |= Request::AUTOREMOVE;
+ if (upgrade)
+ flags |= Request::UPGRADE_ALL | Request::FORBID_REMOVE | Request::FORBID_NEW_INSTALL;
+ if (distUpgrade)
+ flags |= Request::UPGRADE_ALL;
+ return ResolveExternal(solver, Cache, flags, Progress);
+}
+ /*}}}*/
+
+bool EIPP::OrderInstall(char const * const solver, pkgPackageManager * const PM, /*{{{*/
+ unsigned int const flags, OpProgress * const Progress)
+{
+ if (strcmp(solver, "internal") == 0)
+ {
+ FileFd output;
+ _error->PushToStack();
+ bool Okay = CreateDumpFile("EIPP::OrderInstall", "planner", output);
+ if (Okay == false && dynamic_cast<pkgSimulate*>(PM) != nullptr)
+ {
+ _error->RevertToStack();
+ return false;
+ }
+ _error->MergeWithStack();
+ Okay &= EIPP::WriteRequest(PM->Cache, output, flags, nullptr);
+ return Okay && EIPP::WriteScenario(PM->Cache, output, nullptr);
+ }
+ _error->PushToStack();
+ int solver_in, solver_out;
+ pid_t const solver_pid = ExecuteExternal("planner", solver, "Dir::Bin::Planners", &solver_in, &solver_out);
+ if (solver_pid == 0)
+ return false;
+
+ FileFd output;
+ if (output.OpenDescriptor(solver_in, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
+ return _error->Errno("EIPP::OrderInstall", "Opening planner %s stdin on fd %d for writing failed", solver, solver_in);
+
+ bool Okay = output.Failed() == false;
+ if (Okay && Progress != NULL)
+ Progress->OverallProgress(0, 100, 5, _("Execute external planner"));
+ Okay &= EIPP::WriteRequest(PM->Cache, output, flags, Progress);
+ if (Okay && Progress != NULL)
+ Progress->OverallProgress(5, 100, 20, _("Execute external planner"));
+ Okay &= EIPP::WriteScenario(PM->Cache, output, Progress);
+ output.Close();
+
+ if (Okay)
+ {
+ if (Progress != nullptr)
+ Progress->OverallProgress(25, 100, 75, _("Execute external planner"));
+
+ // we don't tell the external planners about boring things
+ for (auto Pkg = PM->Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ if (Pkg->CurrentState == pkgCache::State::ConfigFiles && PM->Cache[Pkg].Purge() == true)
+ PM->Remove(Pkg, true);
+ }
+ }
+ bool const ret = EIPP::ReadResponse(solver_out, PM, Progress);
+ _error->MergeWithStack();
+ if (ExecWait(solver_pid, solver))
+ return ret;
+ return false;
+}
+ /*}}}*/
+bool EIPP::WriteRequest(pkgDepCache &Cache, FileFd &output, /*{{{*/
+ unsigned int const flags,
+ OpProgress * const Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().PackageCount, _("Send request to planner"));
+ decltype(Cache.Head().PackageCount) p = 0;
+ string del, inst, reinst;
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p)
+ {
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ string* req;
+ pkgDepCache::StateCache &P = Cache[Pkg];
+ if (P.Purge() == true && Pkg->CurrentState == pkgCache::State::ConfigFiles)
+ continue;
+ if (P.Delete() == true)
+ req = &del;
+ else if (P.NewInstall() == true || P.Upgrade() == true || P.Downgrade() == true)
+ req = &inst;
+ else if (P.ReInstall() == true)
+ req = &reinst;
+ else
+ continue;
+ req->append(" ").append(Pkg.FullName());
+ }
+ bool Okay = WriteOkay(output, "Request: EIPP 0.1\n");
+
+ const char *arch = _config->Find("APT::Architecture").c_str();
+ std::vector<string> archs = APT::Configuration::getArchitectures();
+ WriteOkay(Okay, output, "Architecture: ", arch, "\n",
+ "Architectures:");
+ for (std::vector<string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
+ WriteOkay(Okay, output, " ", *a);
+ WriteOkay(Okay, output, "\n");
+
+ if (del.empty() == false)
+ WriteOkay(Okay, output, "Remove:", del, "\n");
+ if (inst.empty() == false)
+ WriteOkay(Okay, output, "Install:", inst, "\n");
+ if (reinst.empty() == false)
+ WriteOkay(Okay, output, "ReInstall:", reinst, "\n");
+ WriteOkay(Okay, output, "Planner: ", _config->Find("APT::Planner", "internal"), "\n");
+ if ((flags & Request::IMMEDIATE_CONFIGURATION_ALL) != 0)
+ WriteOkay(Okay, output, "Immediate-Configuration: yes\n");
+ else if ((flags & Request::NO_IMMEDIATE_CONFIGURATION) != 0)
+ WriteOkay(Okay, output, "Immediate-Configuration: no\n");
+ else if ((flags & Request::ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS) != 0)
+ WriteOkay(Okay, output, "Allow-Temporary-Remove-of-Essentials: yes\n");
+ return WriteOkay(Okay, output, "\n");
+}
+ /*}}}*/
+static bool WriteScenarioEIPPVersion(pkgDepCache &, FileFd &output, pkgCache::PkgIterator const &Pkg,/*{{{*/
+ pkgCache::VerIterator const &Ver)
+{
+ bool Okay = true;
+ if (Pkg.CurrentVer() == Ver)
+ switch (Pkg->CurrentState)
+ {
+ case pkgCache::State::NotInstalled: WriteOkay(Okay, output, "\nStatus: not-installed"); break;
+ case pkgCache::State::ConfigFiles: WriteOkay(Okay, output, "\nStatus: config-files"); break;
+ case pkgCache::State::HalfInstalled: WriteOkay(Okay, output, "\nStatus: half-installed"); break;
+ case pkgCache::State::UnPacked: WriteOkay(Okay, output, "\nStatus: unpacked"); break;
+ case pkgCache::State::HalfConfigured: WriteOkay(Okay, output, "\nStatus: half-configured"); break;
+ case pkgCache::State::TriggersAwaited: WriteOkay(Okay, output, "\nStatus: triggers-awaited"); break;
+ case pkgCache::State::TriggersPending: WriteOkay(Okay, output, "\nStatus: triggers-pending"); break;
+ case pkgCache::State::Installed: WriteOkay(Okay, output, "\nStatus: installed"); break;
+ }
+ return Okay;
+}
+ /*}}}*/
+// EIPP::WriteScenario - to the given file descriptor /*{{{*/
+template<typename forVersion> void forAllInterestingVersions(pkgDepCache &Cache, pkgCache::PkgIterator const &Pkg, forVersion const &func)
+{
+ if (Pkg->CurrentState == pkgCache::State::NotInstalled)
+ {
+ auto P = Cache[Pkg];
+ if (P.Install() == false)
+ return;
+ func(Pkg, P.InstVerIter(Cache));
+ }
+ else
+ {
+ if (Pkg->CurrentVer != 0)
+ func(Pkg, Pkg.CurrentVer());
+ auto P = Cache[Pkg];
+ auto const V = P.InstVerIter(Cache);
+ if (P.Delete() == false && Pkg.CurrentVer() != V)
+ func(Pkg, V);
+ }
+}
+
+bool EIPP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress * const Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().PackageCount, _("Send scenario to planner"));
+ decltype(Cache.Head().PackageCount) p = 0;
+ bool Okay = output.Failed() == false;
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ std::vector<bool> pkgset(Cache.Head().PackageCount, false);
+ auto const MarkVersion = [&](pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver) {
+ pkgset[Pkg->ID] = true;
+ for (auto D = Ver.DependsList(); D.end() == false; ++D)
+ {
+ if (D.IsCritical() == false)
+ continue;
+ auto const P = D.TargetPkg();
+ for (auto Prv = P.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ auto const V = Prv.OwnerVer();
+ auto const PV = V.ParentPkg();
+ if (V == PV.CurrentVer() || V == Cache[PV].InstVerIter(Cache))
+ pkgset[PV->ID] = true;
+ }
+ pkgset[P->ID] = true;
+ if (strcmp(P.Arch(), "any") == 0)
+ {
+ APT::StringView const pkgname(P.Name());
+ auto const idxColon = pkgname.find(':');
+ if (idxColon != APT::StringView::npos)
+ {
+ pkgCache::PkgIterator PA;
+ if (pkgname.substr(idxColon + 1) == "any")
+ {
+ auto const GA = Cache.FindGrp(pkgname.substr(0, idxColon).to_string());
+ for (auto PA = GA.PackageList(); PA.end() == false; PA = GA.NextPkg(PA))
+ {
+ pkgset[PA->ID] = true;
+ }
+ }
+ else
+ {
+ auto const PA = Cache.FindPkg(pkgname.to_string());
+ if (PA.end() == false)
+ pkgset[PA->ID] = true;
+ }
+ }
+ }
+ else
+ {
+ auto const PA = Cache.FindPkg(P.FullName(false), "any");
+ if (PA.end() == false)
+ pkgset[PA->ID] = true;
+ }
+ }
+ };
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ forAllInterestingVersions(Cache, Pkg, MarkVersion);
+ auto const WriteVersion = [&](pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver) {
+ Okay &= WriteScenarioVersion(output, Pkg, Ver);
+ Okay &= WriteScenarioEIPPVersion(Cache, output, Pkg, Ver);
+ Okay &= WriteScenarioLimitedDependency(output, Ver, pkgset, true);
+ WriteOkay(Okay, output, "\n");
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ };
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg, ++p)
+ {
+ if (pkgset[Pkg->ID] == false || Pkg->VersionList == 0)
+ continue;
+ forAllInterestingVersions(Cache, Pkg, WriteVersion);
+ }
+ return Okay;
+}
+ /*}}}*/
+// EIPP::ReadResponse - from the given file descriptor /*{{{*/
+bool EIPP::ReadResponse(int const input, pkgPackageManager * const PM, OpProgress *Progress) {
+ /* We build an map id to mmap offset here
+ In theory we could use the offset as ID, but then VersionCount
+ couldn't be used to create other versionmappings anymore and it
+ would be too easy for a (buggy) solver to segfault APT… */
+ auto VersionCount = PM->Cache.Head().VersionCount;
+ decltype(VersionCount) VerIdx[VersionCount];
+ for (pkgCache::PkgIterator P = PM->Cache.PkgBegin(); P.end() == false; ++P) {
+ for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+ VerIdx[V->ID] = V.Index();
+ }
+
+ FileFd in;
+ in.OpenDescriptor(input, FileFd::ReadOnly);
+ pkgTagFile response(&in, 100);
+ pkgTagSection section;
+
+ while (response.Step(section) == true) {
+ char const * type = nullptr;
+ if (section.Exists("Progress") == true) {
+ if (Progress != NULL) {
+ string msg = section.FindS("Message");
+ if (msg.empty() == true)
+ msg = _("Prepare for receiving solution");
+ Progress->SubProgress(100, msg, section.FindI("Percentage", 0));
+ }
+ continue;
+ } else if (section.Exists("Error") == true) {
+ if (_error->PendingError()) {
+ if (Progress != nullptr)
+ Progress->Done();
+ Progress = nullptr;
+ _error->DumpErrors(std::cerr, GlobalError::DEBUG, false);
+ }
+ std::string msg = SubstVar(SubstVar(section.FindS("Message"), "\n .\n", "\n\n"), "\n ", "\n");
+ if (msg.empty() == true) {
+ msg = _("External planner failed without a proper error message");
+ _error->Error("%s", msg.c_str());
+ } else
+ _error->Error("External planner failed with: %s", msg.substr(0,msg.find('\n')).c_str());
+ if (Progress != nullptr)
+ Progress->Done();
+ std::cerr << "The planner encountered an error of type: " << section.FindS("Error") << std::endl;
+ std::cerr << "The following information might help you to understand what is wrong:" << std::endl;
+ std::cerr << msg << std::endl << std::endl;
+ return false;
+ } else if (section.Exists("Unpack") == true)
+ type = "Unpack";
+ else if (section.Exists("Configure") == true)
+ type = "Configure";
+ else if (section.Exists("Remove") == true)
+ type = "Remove";
+ else {
+ char const *Start, *End;
+ section.GetSection(Start, End);
+ _error->Warning("Encountered an unexpected section with %d fields: %s", section.Count(), std::string(Start, End).c_str());
+ continue;
+ }
+
+ if (type == nullptr)
+ continue;
+ decltype(VersionCount) const id = section.FindULL(type, VersionCount);
+ if (id == VersionCount) {
+ _error->Warning("Unable to parse %s request with id value '%s'!", type, section.FindS(type).c_str());
+ continue;
+ } else if (id > VersionCount) {
+ _error->Warning("ID value '%s' in %s request stanza is to high to refer to a known version!", section.FindS(type).c_str(), type);
+ continue;
+ }
+
+ pkgCache::VerIterator Ver(PM->Cache.GetCache(), PM->Cache.GetCache().VerP + VerIdx[id]);
+ auto const Pkg = Ver.ParentPkg();
+ if (strcmp(type, "Unpack") == 0)
+ PM->Install(Pkg, PM->FileNames[Pkg->ID]);
+ else if (strcmp(type, "Configure") == 0)
+ PM->Configure(Pkg);
+ else if (strcmp(type, "Remove") == 0)
+ PM->Remove(Pkg, PM->Cache[Pkg].Purge());
+ }
+ return in.Failed() == false;
+}
+ /*}}}*/
+bool EIPP::ReadRequest(int const input, std::list<std::pair<std::string,PKG_ACTION>> &actions,/*{{{*/
+ unsigned int &flags)
+{
+ actions.clear();
+ flags = 0;
+ std::string line;
+ while (ReadLine(input, line) == true)
+ {
+ // Skip empty lines before request
+ if (line.empty() == true)
+ continue;
+ // The first Tag must be a request, so search for it
+ if (line.compare(0, 8, "Request:") != 0)
+ continue;
+
+ while (ReadLine(input, line) == true)
+ {
+ // empty lines are the end of the request
+ if (line.empty() == true)
+ return true;
+
+ PKG_ACTION pkgact = PKG_ACTION::NOOP;
+ if (LineStartsWithAndStrip(line, "Install:"))
+ pkgact = PKG_ACTION::INSTALL;
+ else if (LineStartsWithAndStrip(line, "ReInstall:"))
+ pkgact = PKG_ACTION::REINSTALL;
+ else if (LineStartsWithAndStrip(line, "Remove:"))
+ pkgact = PKG_ACTION::REMOVE;
+ else if (LineStartsWithAndStrip(line, "Architecture:"))
+ _config->Set("APT::Architecture", line);
+ else if (LineStartsWithAndStrip(line, "Architectures:"))
+ _config->Set("APT::Architectures", SubstVar(line, " ", ","));
+ else if (LineStartsWithAndStrip(line, "Planner:"))
+ ; // purely informational line
+ else if (LineStartsWithAndStrip(line, "Immediate-Configuration:"))
+ {
+ if (localStringToBool(line, true))
+ flags |= Request::IMMEDIATE_CONFIGURATION_ALL;
+ else
+ flags |= Request::NO_IMMEDIATE_CONFIGURATION;
+ }
+ else if (ReadFlag(flags, line, "Allow-Temporary-Remove-of-Essentials:", Request::ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS))
+ ;
+ else
+ _error->Warning("Unknown line in EIPP Request stanza: %s", line.c_str());
+
+ if (pkgact == PKG_ACTION::NOOP)
+ continue;
+ for (auto && p: VectorizeString(line, ' '))
+ actions.emplace_back(std::move(p), pkgact);
+ }
+ }
+ return false;
+}
+ /*}}}*/
+bool EIPP::ApplyRequest(std::list<std::pair<std::string,PKG_ACTION>> &actions,/*{{{*/
+ pkgDepCache &Cache)
+{
+ for (auto Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ short versions = 0;
+ for (auto Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
+ {
+ ++versions;
+ if (Pkg.CurrentVer() == Ver)
+ continue;
+ Cache.SetCandidateVersion(Ver);
+ }
+ if (unlikely(versions > 2))
+ _error->Warning("Package %s has %d versions, but should have at most 2!", Pkg.FullName().c_str(), versions);
+ }
+ for (auto && a: actions)
+ {
+ pkgCache::PkgIterator P = Cache.FindPkg(a.first);
+ if (P.end() == true)
+ {
+ _error->Warning("Package %s is not known, so can't be acted on", a.first.c_str());
+ continue;
+ }
+ switch (a.second)
+ {
+ case PKG_ACTION::NOOP:
+ _error->Warning("Package %s has NOOP as action?!?", a.first.c_str());
+ break;
+ case PKG_ACTION::INSTALL:
+ Cache.MarkInstall(P, false);
+ break;
+ case PKG_ACTION::REINSTALL:
+ Cache.MarkInstall(P, false);
+ Cache.SetReInstall(P, true);
+ break;
+ case PKG_ACTION::REMOVE:
+ Cache.MarkDelete(P);
+ break;
+ }
+ }
+ return true;
+}
+ /*}}}*/
diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h
new file mode 100644
index 0000000..2f18d76
--- /dev/null
+++ b/apt-pkg/edsp.h
@@ -0,0 +1,275 @@
+// -*- mode: cpp; mode: fold -*-
+/** Description \file edsp.h {{{
+ ######################################################################
+ Set of methods to help writing and reading everything needed for EDSP
+ with the notable exception of reading a scenario for conversion into
+ a Cache as this is handled by edsp interface for listparser and friends
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_EDSP_H
+#define PKGLIB_EDSP_H
+
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <stdio.h>
+
+#include <list>
+#include <string>
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/progress.h>
+#endif
+
+class pkgDepCache;
+class OpProgress;
+
+namespace EDSP /*{{{*/
+{
+ namespace Request
+ {
+ enum Flags
+ {
+ AUTOREMOVE = (1 << 0), /*!< removal of unneeded packages should be performed */
+ UPGRADE_ALL = (1 << 1), /*!< upgrade all installed packages, like 'apt-get full-upgrade' without forbid flags */
+ FORBID_NEW_INSTALL = (1 << 2), /*!< forbid the resolver to install new packages */
+ FORBID_REMOVE = (1 << 3), /*!< forbid the resolver to remove packages */
+ };
+ }
+ /** \brief creates the EDSP request stanza
+ *
+ * In the EDSP protocol the first thing send to the resolver is a stanza
+ * encoding the request. This method will write this stanza by looking at
+ * the given Cache and requests the installation of all packages which were
+ * marked for installation in it (equally for remove).
+ *
+ * \param Cache in which the request is encoded
+ * \param output is written to this "file"
+ * \param flags effecting the request documented in #EDSP::Request::Flags
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if request was composed successfully, otherwise false
+ */
+ bool WriteRequest(pkgDepCache &Cache, FileFd &output,
+ unsigned int const flags = 0,
+ OpProgress *Progress = NULL);
+ bool WriteRequest(pkgDepCache &Cache, FILE* output,
+ bool const upgrade = false,
+ bool const distUpgrade = false,
+ bool const autoRemove = false,
+ OpProgress *Progress = NULL) APT_DEPRECATED_MSG("Use FileFd-based interface instead");
+
+ /** \brief creates the scenario representing the package universe
+ *
+ * After the request all known information about a package are send
+ * to the solver. The output looks similar to a Packages or status file
+ *
+ * All packages and version included in this Cache are send, even if
+ * it doesn't make sense from an APT resolver point of view like versions
+ * with a negative pin to enable the solver to propose even that as a
+ * solution or at least to be able to give a hint what can be done to
+ * satisfy a request.
+ *
+ * \param Cache is the known package universe
+ * \param output is written to this "file"
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if universe was composed successfully, otherwise false
+ */
+ bool WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progress = NULL);
+ bool WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress = NULL) APT_DEPRECATED_MSG("Use FileFd-based interface instead");
+
+ /** \brief creates a limited scenario representing the package universe
+ *
+ * This method works similar to #WriteScenario as it works in the same
+ * way but doesn't send the complete universe to the solver but only
+ * packages included in the pkgset which will have only dependencies
+ * on packages which are in the given set. All other dependencies will
+ * be removed, so that this method can be used to create testcases
+ *
+ * \param Cache is the known package universe
+ * \param output is written to this "file"
+ * \param pkgset is a set of packages the universe should be limited to
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if universe was composed successfully, otherwise false
+ */
+ bool WriteLimitedScenario(pkgDepCache &Cache, FileFd &output,
+ std::vector<bool> const &pkgset,
+ OpProgress *Progress = NULL);
+ bool WriteLimitedScenario(pkgDepCache &Cache, FILE* output,
+ APT::PackageSet const &pkgset,
+ OpProgress *Progress = NULL) APT_DEPRECATED_MSG("Use FileFd-based interface instead");
+
+ /** \brief waits and acts on the information returned from the solver
+ *
+ * This method takes care of interpreting whatever the solver sends
+ * through the standard output like a solution, progress or an error.
+ * The main thread should hand his control over to this method to
+ * wait for the solver to finish the given task. The file descriptor
+ * used as input is completely consumed and closed by the method.
+ *
+ * \param input file descriptor with the response from the solver
+ * \param Cache the solution should be applied on if any
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if a solution is found and applied correctly, otherwise false
+ */
+ bool ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress = NULL);
+
+ /** \brief search and read the request stanza for action later
+ *
+ * This method while ignore the input up to the point it finds the
+ * Request: line as an indicator for the Request stanza.
+ * The request is stored in the parameters install and remove then,
+ * as the cache isn't build yet as the scenario follows the request.
+ *
+ * \param input file descriptor with the edsp input for the solver
+ * \param[out] install is a list which gets populated with requested installs
+ * \param[out] remove is a list which gets populated with requested removals
+ * \param[out] upgrade is true if it is a request like apt-get upgrade
+ * \param[out] distUpgrade is true if it is a request like apt-get dist-upgrade
+ * \param[out] autoRemove is true if removal of unneeded packages should be performed
+ *
+ * \return true if the request could be found and worked on, otherwise false
+ */
+ bool ReadRequest(int const input, std::list<std::string> &install,
+ std::list<std::string> &remove, unsigned int &flags);
+ APT_DEPRECATED_MSG("use the flag-based version instead") bool ReadRequest(int const input, std::list<std::string> &install,
+ std::list<std::string> &remove, bool &upgrade,
+ bool &distUpgrade, bool &autoRemove);
+
+ /** \brief takes the request lists and applies it on the cache
+ *
+ * The lists as created by #ReadRequest will be used to find the
+ * packages in question and mark them for install/remove.
+ * No solving is done and no auto-install/-remove.
+ *
+ * \param install is a list of packages to mark for installation
+ * \param remove is a list of packages to mark for removal
+ * \param Cache is there the markers should be set
+ *
+ * \return false if the request couldn't be applied, true otherwise
+ */
+ bool ApplyRequest(std::list<std::string> const &install,
+ std::list<std::string> const &remove,
+ pkgDepCache &Cache);
+
+ /** \brief formats a solution stanza for the given version
+ *
+ * EDSP uses a simple format for reporting solutions:
+ * A single required field name with an ID as value.
+ * Additional fields might appear as debug aids.
+ *
+ * \param output to write the stanza forming the solution to
+ * \param Type of the stanza, used as field name
+ * \param Ver this stanza applies to
+ *
+ * \return true if stanza could be written, otherwise false
+ */
+ bool WriteSolutionStanza(FileFd &output, char const * const Type, pkgCache::VerIterator const &Ver);
+ bool WriteSolution(pkgDepCache &Cache, FILE* output) APT_DEPRECATED_MSG("Use FileFd-based single-stanza interface instead");
+
+ /** \brief sends a progress report
+ *
+ * \param percent of the solving completed
+ * \param message the solver wants the user to see
+ * \param output the front-end listens for progress report
+ */
+ bool WriteProgress(unsigned short const percent, const char* const message, FileFd &output);
+ bool WriteProgress(unsigned short const percent, const char* const message, FILE* output) APT_DEPRECATED_MSG("Use FileFd-based interface instead");
+
+ /** \brief sends an error report
+ *
+ * Solvers are expected to execute successfully even if
+ * they were unable to calculate a solution for a given task.
+ * Obviously they can't send a solution through, so this
+ * methods deals with formatting an error message correctly
+ * so that the front-ends can receive and display it.
+ *
+ * The first line of the message should be a short description
+ * of the error so it can be used for dialog titles or alike
+ *
+ * \param uuid of this error message
+ * \param message is free form text to describe the error
+ * \param output the front-end listens for error messages
+ */
+ bool WriteError(char const * const uuid, std::string const &message, FileFd &output);
+ bool WriteError(char const * const uuid, std::string const &message, FILE* output) APT_DEPRECATED_MSG("Use FileFd-based interface instead");
+
+
+ /** \brief executes the given solver and returns the pipe ends
+ *
+ * The given solver is executed if it can be found in one of the
+ * configured directories and setup for it is performed.
+ *
+ * \param solver to execute
+ * \param[out] solver_in will be the stdin of the solver
+ * \param[out] solver_out will be the stdout of the solver
+ *
+ * \return PID of the started solver or 0 if failure occurred
+ */
+ pid_t ExecuteSolver(const char* const solver, int * const solver_in, int * const solver_out, bool /*overload*/);
+ APT_DEPRECATED_MSG("add a dummy bool parameter to use the overload returning a pid_t") bool ExecuteSolver(const char* const solver, int *solver_in, int *solver_out);
+
+ /** \brief call an external resolver to handle the request
+ *
+ * This method wraps all the methods above to call an external solver
+ *
+ * \param solver to execute
+ * \param Cache with the problem and as universe to work in
+ * \param flags effecting the request documented in #EDSP::Request::Flags
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if the solver has successfully solved the problem,
+ * otherwise false
+ */
+ bool ResolveExternal(const char* const solver, pkgDepCache &Cache,
+ unsigned int const flags = 0,
+ OpProgress *Progress = NULL);
+ APT_DEPRECATED_MSG("use the flag-based version instead") bool ResolveExternal(const char* const solver, pkgDepCache &Cache,
+ bool const upgrade, bool const distUpgrade,
+ bool const autoRemove, OpProgress *Progress = NULL);
+}
+ /*}}}*/
+class pkgPackageManager;
+namespace EIPP /*{{{*/
+{
+ namespace Request
+ {
+ enum Flags
+ {
+ IMMEDIATE_CONFIGURATION_ALL = (1 << 0), /*!< try to keep the least amount of packages unconfigured as possible at all times */
+ NO_IMMEDIATE_CONFIGURATION = (1 << 1), /*!< do not perform immediate configuration at all */
+ ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS = (1 << 2), /*!< just as the name suggests, very special case and dangerous! */
+ };
+ }
+
+ APT_HIDDEN bool WriteRequest(pkgDepCache &Cache, FileFd &output,
+ unsigned int const flags, OpProgress * const Progress);
+ APT_HIDDEN bool WriteScenario(pkgDepCache &Cache, FileFd &output,
+ OpProgress * const Progress);
+
+ APT_HIDDEN bool OrderInstall(char const * const planner, pkgPackageManager * const PM,
+ unsigned int const version, OpProgress * const Progress);
+ APT_HIDDEN bool ReadResponse(int const input, pkgPackageManager * const PM,
+ OpProgress * const Progress);
+
+ enum class PKG_ACTION
+ {
+ NOOP,
+ INSTALL,
+ REINSTALL,
+ REMOVE
+ };
+ bool ReadRequest(int const input,
+ std::list<std::pair<std::string,PKG_ACTION>> &actions,
+ unsigned int &flags);
+ bool ApplyRequest(std::list<std::pair<std::string,PKG_ACTION>> &actions,
+ pkgDepCache &Cache);
+}
+ /*}}}*/
+#endif
diff --git a/apt-pkg/edsp/edspindexfile.cc b/apt-pkg/edsp/edspindexfile.cc
new file mode 100644
index 0000000..1a8af89
--- /dev/null
+++ b/apt-pkg/edsp/edspindexfile.cc
@@ -0,0 +1,129 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+ The scenario file is designed to work as an intermediate file between
+ APT and the resolver. Its on propose very similar to a dpkg status file
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/edspindexfile.h>
+#include <apt-pkg/edsplistparser.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+
+#include <memory>
+#include <string>
+#include <stddef.h>
+#include <unistd.h>
+ /*}}}*/
+
+// EDSP-like Index /*{{{*/
+edspLikeIndex::edspLikeIndex(std::string const &File) : pkgDebianIndexRealFile(File, true)
+{
+}
+std::string edspLikeIndex::GetArchitecture() const
+{
+ return std::string();
+}
+bool edspLikeIndex::HasPackages() const
+{
+ return true;
+}
+bool edspLikeIndex::Exists() const
+{
+ return true;
+}
+uint8_t edspLikeIndex::GetIndexFlags() const
+{
+ return 0;
+}
+bool edspLikeIndex::OpenListFile(FileFd &Pkg, std::string const &FileName)
+{
+ if (FileName.empty() == false && FileName != "/nonexistent/stdin")
+ return pkgDebianIndexRealFile::OpenListFile(Pkg, FileName);
+ if (Pkg.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly) == false)
+ return _error->Error("Problem opening %s",FileName.c_str());
+ return true;
+}
+ /*}}}*/
+// EDSP Index /*{{{*/
+edspIndex::edspIndex(std::string const &File) : edspLikeIndex(File)
+{
+}
+std::string edspIndex::GetComponent() const
+{
+ return "edsp";
+}
+pkgCacheListParser * edspIndex::CreateListParser(FileFd &Pkg)
+{
+ if (Pkg.IsOpen() == false)
+ return nullptr;
+ _error->PushToStack();
+ std::unique_ptr<pkgCacheListParser> Parser(new edspListParser(&Pkg));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ return newError ? nullptr : Parser.release();
+}
+ /*}}}*/
+// EIPP Index /*{{{*/
+eippIndex::eippIndex(std::string const &File) : edspLikeIndex(File)
+{
+}
+std::string eippIndex::GetComponent() const
+{
+ return "eipp";
+}
+pkgCacheListParser * eippIndex::CreateListParser(FileFd &Pkg)
+{
+ if (Pkg.IsOpen() == false)
+ return nullptr;
+ _error->PushToStack();
+ std::unique_ptr<pkgCacheListParser> Parser(new eippListParser(&Pkg));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ return newError ? nullptr : Parser.release();
+}
+ /*}}}*/
+
+// Index File types for APT /*{{{*/
+class APT_HIDDEN edspIFType: public pkgIndexFile::Type
+{
+ public:
+ virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &) const APT_OVERRIDE
+ {
+ // we don't have a record parser for this type as the file is not presistent
+ return NULL;
+ };
+ edspIFType() {Label = "EDSP scenario file";};
+};
+APT_HIDDEN edspIFType _apt_Edsp;
+const pkgIndexFile::Type *edspIndex::GetType() const
+{
+ return &_apt_Edsp;
+}
+
+class APT_HIDDEN eippIFType: public pkgIndexFile::Type
+{
+ public:
+ virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &) const APT_OVERRIDE
+ {
+ // we don't have a record parser for this type as the file is not presistent
+ return NULL;
+ };
+ eippIFType() {Label = "EIPP scenario file";};
+};
+APT_HIDDEN eippIFType _apt_Eipp;
+const pkgIndexFile::Type *eippIndex::GetType() const
+{
+ return &_apt_Eipp;
+}
+ /*}}}*/
+
+edspLikeIndex::~edspLikeIndex() {}
+edspIndex::~edspIndex() {}
+eippIndex::~eippIndex() {}
diff --git a/apt-pkg/edsp/edspindexfile.h b/apt-pkg/edsp/edspindexfile.h
new file mode 100644
index 0000000..4ac0f9d
--- /dev/null
+++ b/apt-pkg/edsp/edspindexfile.h
@@ -0,0 +1,62 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+ The scenario file is designed to work as an intermediate file between
+ APT and the resolver. Its on propose very similar to a dpkg status file
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_EDSPINDEXFILE_H
+#define PKGLIB_EDSPINDEXFILE_H
+
+#include <apt-pkg/debindexfile.h>
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#endif
+
+class OpProgress;
+class pkgCacheGenerator;
+
+class APT_HIDDEN edspLikeIndex : public pkgDebianIndexRealFile
+{
+protected:
+ virtual bool OpenListFile(FileFd &Pkg, std::string const &File) APT_OVERRIDE;
+ virtual uint8_t GetIndexFlags() const APT_OVERRIDE;
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+
+public:
+ virtual bool Exists() const APT_OVERRIDE;
+ virtual bool HasPackages() const APT_OVERRIDE;
+
+ edspLikeIndex(std::string const &File);
+ virtual ~edspLikeIndex();
+};
+
+class APT_HIDDEN edspIndex : public edspLikeIndex
+{
+protected:
+ APT_HIDDEN virtual pkgCacheListParser * CreateListParser(FileFd &Pkg) APT_OVERRIDE;
+ virtual std::string GetComponent() const APT_OVERRIDE;
+
+public:
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ edspIndex(std::string const &File);
+ virtual ~edspIndex();
+};
+
+class APT_HIDDEN eippIndex : public edspLikeIndex
+{
+protected:
+ APT_HIDDEN virtual pkgCacheListParser * CreateListParser(FileFd &Pkg) APT_OVERRIDE;
+ virtual std::string GetComponent() const APT_OVERRIDE;
+
+public:
+ virtual const Type *GetType() const APT_OVERRIDE APT_PURE;
+
+ eippIndex(std::string const &File);
+ virtual ~eippIndex();
+};
+
+#endif
diff --git a/apt-pkg/edsp/edsplistparser.cc b/apt-pkg/edsp/edsplistparser.cc
new file mode 100644
index 0000000..31bded9
--- /dev/null
+++ b/apt-pkg/edsp/edsplistparser.cc
@@ -0,0 +1,178 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Cache Generator - Generator for the cache structure.
+
+ This builds the cache structure from the abstract package list parser.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/edsplistparser.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/string_view.h>
+#include <apt-pkg/tagfile.h>
+
+#include <array>
+
+ /*}}}*/
+
+// ListParser::edspListParser - Constructor /*{{{*/
+edspLikeListParser::edspLikeListParser(FileFd * const File) : debListParser(File)
+{
+}
+edspListParser::edspListParser(FileFd * const File) : edspLikeListParser(File)
+{
+ std::string const states = _config->FindFile("Dir::State::extended_states");
+ RemoveFile("edspListParserPrivate", states);
+ extendedstates.Open(states, FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive, 0600);
+ std::string const prefs = _config->FindFile("Dir::Etc::preferences");
+ RemoveFile("edspListParserPrivate", prefs);
+ preferences.Open(prefs, FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive, 0600);
+}
+ /*}}}*/
+// ListParser::NewVersion - Fill in the version structure /*{{{*/
+bool edspLikeListParser::NewVersion(pkgCache::VerIterator &Ver)
+{
+ _system->SetVersionMapping(Ver->ID, Section.FindI("APT-ID", Ver->ID));
+ return debListParser::NewVersion(Ver);
+}
+ /*}}}*/
+// ListParser::Description - Return the description string /*{{{*/
+// ---------------------------------------------------------------------
+/* Sorry, no description for the resolvers… */
+std::vector<std::string> edspLikeListParser::AvailableDescriptionLanguages()
+{
+ return {};
+}
+APT::StringView edspLikeListParser::Description_md5()
+{
+ return APT::StringView();
+}
+ /*}}}*/
+// ListParser::VersionHash - Compute a unique hash for this version /*{{{*/
+unsigned short edspLikeListParser::VersionHash()
+{
+ if (Section.Exists("APT-Hash") == true)
+ return Section.FindI("APT-Hash");
+ else if (Section.Exists("APT-ID") == true)
+ return Section.FindI("APT-ID");
+ return 0;
+}
+ /*}}}*/
+// ListParser::ParseStatus - Parse the status field /*{{{*/
+// ---------------------------------------------------------------------
+/* The Status: line here is not a normal dpkg one but just one which tells
+ use if the package is installed or not, where missing means not. */
+bool edspListParser::ParseStatus(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver)
+{
+ unsigned long state = 0;
+ if (Section.FindFlag("Hold",state,pkgCache::State::Hold) == false)
+ return false;
+ if (state != 0)
+ Pkg->SelectedState = pkgCache::State::Hold;
+
+ state = 0;
+ if (Section.FindFlag("Installed",state,pkgCache::State::Installed) == false)
+ return false;
+ if (state != 0)
+ {
+ Pkg->CurrentState = pkgCache::State::Installed;
+ Pkg->CurrentVer = Ver.Index();
+ }
+
+ if (Section.FindB("APT-Automatic", false))
+ {
+ std::string out;
+ strprintf(out, "Package: %s\nArchitecture: %s\nAuto-Installed: 1\n\n", Pkg.Name(), Pkg.Arch());
+ if (extendedstates.Write(out.c_str(), out.length()) == false)
+ return false;
+ }
+
+ // FIXME: Using an overriding pin is wrong.
+ if (Section.FindB("APT-Candidate", false))
+ {
+ std::string out;
+ strprintf(out, "Package: %s\nPin: version %s\nPin-Priority: 9999\n\n", Pkg.FullName().c_str(), Ver.VerStr());
+ if (preferences.Write(out.c_str(), out.length()) == false)
+ return false;
+ }
+
+ signed short const pinvalue = Section.FindI("APT-Pin", 500);
+ if (pinvalue != 500)
+ {
+ std::string out;
+ strprintf(out, "Package: %s\nPin: version %s\nPin-Priority: %d\n\n", Pkg.FullName().c_str(), Ver.VerStr(), pinvalue);
+ if (preferences.Write(out.c_str(), out.length()) == false)
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
+
+// ListParser::eippListParser - Constructor /*{{{*/
+eippListParser::eippListParser(FileFd *File) : edspLikeListParser(File)
+{
+}
+ /*}}}*/
+// ListParser::ParseStatus - Parse the status field /*{{{*/
+// ---------------------------------------------------------------------
+/* The Status: line here is not a normal dpkg one but just one which tells
+ use if the package is installed or not, where missing means not. */
+bool eippListParser::ParseStatus(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver)
+{
+ // Process the flag field
+ static std::array<WordList, 8> const statusvalues = {{
+ {"not-installed",pkgCache::State::NotInstalled},
+ {"config-files",pkgCache::State::ConfigFiles},
+ {"half-installed",pkgCache::State::HalfInstalled},
+ {"unpacked",pkgCache::State::UnPacked},
+ {"half-configured",pkgCache::State::HalfConfigured},
+ {"triggers-awaited",pkgCache::State::TriggersAwaited},
+ {"triggers-pending",pkgCache::State::TriggersPending},
+ {"installed",pkgCache::State::Installed},
+ }};
+ auto const status = Section.Find("Status");
+ if (status.empty() == false)
+ {
+ for (auto && sv: statusvalues)
+ {
+ if (status != sv.Str)
+ continue;
+ Pkg->CurrentState = sv.Val;
+ switch (Pkg->CurrentState)
+ {
+ case pkgCache::State::NotInstalled:
+ case pkgCache::State::ConfigFiles:
+ break;
+ case pkgCache::State::HalfInstalled:
+ case pkgCache::State::UnPacked:
+ case pkgCache::State::HalfConfigured:
+ case pkgCache::State::TriggersAwaited:
+ case pkgCache::State::TriggersPending:
+ case pkgCache::State::Installed:
+ Pkg->CurrentVer = Ver.Index();
+ break;
+ }
+ break;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+
+edspLikeListParser::~edspLikeListParser() {}
+edspListParser::~edspListParser() {}
+eippListParser::~eippListParser() {}
diff --git a/apt-pkg/edsp/edsplistparser.h b/apt-pkg/edsp/edsplistparser.h
new file mode 100644
index 0000000..59c759f
--- /dev/null
+++ b/apt-pkg/edsp/edsplistparser.h
@@ -0,0 +1,64 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ EDSP Package List Parser - This implements the abstract parser
+ interface for the APT specific intermediate format which is passed
+ to external resolvers
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_EDSPLISTPARSER_H
+#define PKGLIB_EDSPLISTPARSER_H
+
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/tagfile.h>
+#endif
+
+namespace APT {
+ class StringView;
+}
+class APT_HIDDEN edspLikeListParser : public debListParser
+{
+ public:
+ virtual bool NewVersion(pkgCache::VerIterator &Ver) APT_OVERRIDE;
+ virtual std::vector<std::string> AvailableDescriptionLanguages() APT_OVERRIDE;
+ virtual APT::StringView Description_md5() APT_OVERRIDE;
+ virtual unsigned short VersionHash() APT_OVERRIDE;
+
+ edspLikeListParser(FileFd *File);
+ virtual ~edspLikeListParser();
+};
+
+class APT_HIDDEN edspListParser : public edspLikeListParser
+{
+ FileFd extendedstates;
+ FileFd preferences;
+
+protected:
+ virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver) APT_OVERRIDE;
+
+public:
+ edspListParser(FileFd *File);
+ virtual ~edspListParser();
+};
+
+class APT_HIDDEN eippListParser : public edspLikeListParser
+{
+protected:
+ virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver) APT_OVERRIDE;
+
+public:
+ eippListParser(FileFd *File);
+ virtual ~eippListParser();
+};
+#endif
diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc
new file mode 100644
index 0000000..47f5e06
--- /dev/null
+++ b/apt-pkg/edsp/edspsystem.cc
@@ -0,0 +1,166 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ This system provides the abstraction to use the scenario file as the
+ only source of package information to be able to feed the created file
+ back to APT for its own consumption (eat your own dogfood).
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debversion.h>
+#include <apt-pkg/edspindexfile.h>
+#include <apt-pkg/edspsystem.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <string>
+#include <vector>
+
+ /*}}}*/
+
+// System::System - Constructor /*{{{*/
+edspLikeSystem::edspLikeSystem(char const * const Label) : pkgSystem(Label, &debVS)
+{
+}
+edspSystem::edspSystem() : edspLikeSystem("Debian APT solver interface")
+{
+}
+eippSystem::eippSystem() : edspLikeSystem("Debian APT planner interface")
+{
+}
+ /*}}}*/
+// System::Lock - Get the lock /*{{{*/
+bool edspLikeSystem::Lock()
+{
+ return true;
+}
+ /*}}}*/
+// System::UnLock - Drop a lock /*{{{*/
+bool edspLikeSystem::UnLock(bool /*NoErrors*/)
+{
+ return true;
+}
+ /*}}}*/
+// System::CreatePM - Create the underlying package manager /*{{{*/
+// ---------------------------------------------------------------------
+/* we can't use edsp input as input for real installations - just a
+ simulation can work, but everything else will fail bigtime */
+pkgPackageManager *edspLikeSystem::CreatePM(pkgDepCache * /*Cache*/) const
+{
+ return nullptr;
+}
+ /*}}}*/
+// System::Initialize - Setup the configuration space.. /*{{{*/
+bool edspLikeSystem::Initialize(Configuration &Cnf)
+{
+ Cnf.Set("Dir::Log", "/dev/null");
+ // state is included completely in the input files
+ Cnf.Set("Dir::Etc::preferences", "/dev/null");
+ Cnf.Set("Dir::Etc::preferencesparts", "/dev/null");
+ Cnf.Set("Dir::State::status","/dev/null");
+ Cnf.Set("Dir::State::extended_states","/dev/null");
+ Cnf.Set("Dir::State::lists","/dev/null");
+ // do not store an mmap cache
+ Cnf.Set("Dir::Cache::pkgcache", "");
+ Cnf.Set("Dir::Cache::srcpkgcache", "");
+ // the protocols only propose actions, not do them
+ Cnf.Set("Debug::NoLocking", "true");
+ Cnf.Set("APT::Get::Simulate", "true");
+
+ StatusFile.reset(nullptr);
+ return true;
+}
+bool edspSystem::Initialize(Configuration &Cnf)
+{
+ if (edspLikeSystem::Initialize(Cnf) == false)
+ return false;
+ std::string const tmp = GetTempDir();
+ char tmpname[300];
+ snprintf(tmpname, sizeof(tmpname), "%s/apt-edsp-solver-XXXXXX", tmp.c_str());
+ if (nullptr == mkdtemp(tmpname))
+ return false;
+ tempDir = tmpname;
+ tempStatesFile = flCombine(tempDir, "extended_states");
+ Cnf.Set("Dir::State::extended_states", tempStatesFile);
+ tempPrefsFile = flCombine(tempDir, "apt_preferences");
+ Cnf.Set("Dir::Etc::preferences", tempPrefsFile);
+ return true;
+}
+ /*}}}*/
+// System::ArchiveSupported - Is a file format supported /*{{{*/
+bool edspLikeSystem::ArchiveSupported(const char * /*Type*/)
+{
+ return false;
+}
+ /*}}}*/
+// System::Score - Never use the EDSP system automatically /*{{{*/
+signed edspLikeSystem::Score(Configuration const &)
+{
+ return -1000;
+}
+ /*}}}*/
+// System::FindIndex - Get an index file for status files /*{{{*/
+bool edspLikeSystem::FindIndex(pkgCache::PkgFileIterator File,
+ pkgIndexFile *&Found) const
+{
+ if (StatusFile == 0)
+ return false;
+ if (StatusFile->FindInCache(*File.Cache()) == File)
+ {
+ Found = StatusFile.get();
+ return true;
+ }
+
+ return false;
+}
+ /*}}}*/
+bool edspSystem::AddStatusFiles(std::vector<pkgIndexFile *> &List) /*{{{*/
+{
+ if (StatusFile == nullptr)
+ {
+ if (_config->Find("edsp::scenario", "") == "/nonexistent/stdin")
+ StatusFile.reset(new edspIndex("/nonexistent/stdin"));
+ else
+ StatusFile.reset(new edspIndex(_config->FindFile("edsp::scenario")));
+ }
+ List.push_back(StatusFile.get());
+ return true;
+}
+ /*}}}*/
+bool eippSystem::AddStatusFiles(std::vector<pkgIndexFile *> &List) /*{{{*/
+{
+ if (StatusFile == nullptr)
+ {
+ if (_config->Find("eipp::scenario", "") == "/nonexistent/stdin")
+ StatusFile.reset(new eippIndex("/nonexistent/stdin"));
+ else
+ StatusFile.reset(new eippIndex(_config->FindFile("eipp::scenario")));
+ }
+ List.push_back(StatusFile.get());
+ return true;
+}
+ /*}}}*/
+
+edspLikeSystem::~edspLikeSystem() {}
+edspSystem::~edspSystem()
+{
+ if (tempDir.empty())
+ return;
+
+ RemoveFile("~edspSystem", tempStatesFile);
+ RemoveFile("~edspSystem", tempPrefsFile);
+ rmdir(tempDir.c_str());
+}
+eippSystem::~eippSystem() {}
+
+APT_HIDDEN edspSystem edspSys;
+APT_HIDDEN eippSystem eippSys;
diff --git a/apt-pkg/edsp/edspsystem.h b/apt-pkg/edsp/edspsystem.h
new file mode 100644
index 0000000..0855bb5
--- /dev/null
+++ b/apt-pkg/edsp/edspsystem.h
@@ -0,0 +1,67 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ System - Debian version of the System Class
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_EDSPSYSTEM_H
+#define PKGLIB_EDSPSYSTEM_H
+
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgsystem.h>
+
+#include <memory>
+#include <vector>
+
+#include <apt-pkg/macros.h>
+
+class Configuration;
+class pkgDepCache;
+class pkgIndexFile;
+class pkgPackageManager;
+
+class APT_HIDDEN edspLikeSystem : public pkgSystem
+{
+protected:
+ std::unique_ptr<pkgIndexFile> StatusFile;
+
+public:
+ virtual bool Lock() APT_OVERRIDE APT_PURE;
+ virtual bool UnLock(bool NoErrors = false) APT_OVERRIDE APT_PURE;
+ virtual pkgPackageManager *CreatePM(pkgDepCache *Cache) const APT_OVERRIDE APT_PURE;
+ virtual bool Initialize(Configuration &Cnf) APT_OVERRIDE;
+ virtual bool ArchiveSupported(const char *Type) APT_OVERRIDE APT_PURE;
+ virtual signed Score(Configuration const &Cnf) APT_OVERRIDE;
+ virtual bool FindIndex(pkgCache::PkgFileIterator File,
+ pkgIndexFile *&Found) const APT_OVERRIDE;
+
+ edspLikeSystem(char const * const Label);
+ virtual ~edspLikeSystem();
+};
+
+class APT_HIDDEN edspSystem : public edspLikeSystem
+{
+ std::string tempDir;
+ std::string tempStatesFile;
+ std::string tempPrefsFile;
+
+public:
+ virtual bool Initialize(Configuration &Cnf) APT_OVERRIDE;
+ virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List) APT_OVERRIDE;
+
+ edspSystem();
+ virtual ~edspSystem();
+};
+
+class APT_HIDDEN eippSystem : public edspLikeSystem
+{
+ public:
+ virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List) APT_OVERRIDE;
+
+ eippSystem();
+ virtual ~eippSystem();
+};
+
+#endif
diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc
new file mode 100644
index 0000000..41cecde
--- /dev/null
+++ b/apt-pkg/indexcopy.cc
@@ -0,0 +1,796 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Index Copying - Aid for copying and verifying the index files
+
+ This class helps apt-cache reconstruct a damaged index files.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cdrom.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debmetaindex.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <iostream>
+#include <sstream>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "indexcopy.h"
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// IndexCopy::CopyPackages - Copy the package files from the CD /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool IndexCopy::CopyPackages(string CDROM,string Name,vector<string> &List,
+ pkgCdromStatus *log)
+{
+ OpProgress *Progress = NULL;
+ if (List.empty() == true)
+ return true;
+
+ if(log)
+ Progress = log->GetOpProgress();
+
+ bool NoStat = _config->FindB("APT::CDROM::Fast",false);
+ bool Debug = _config->FindB("Debug::aptcdrom",false);
+
+ // Prepare the progress indicator
+ off_t TotalSize = 0;
+ std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
+ for (auto const &F : List)
+ {
+ struct stat Buf;
+ bool found = false;
+ auto const file = F + GetFileName();
+ for (auto const &c : compressor)
+ {
+ if (stat((file + c.Extension).c_str(), &Buf) != 0)
+ continue;
+ found = true;
+ break;
+ }
+
+ if (found == false)
+ return _error->Errno("stat", "Stat failed for %s", file.c_str());
+ TotalSize += Buf.st_size;
+ }
+
+ off_t CurrentSize = 0;
+ unsigned int NotFound = 0;
+ unsigned int WrongSize = 0;
+ unsigned int Packages = 0;
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ std::string OrigPath(*I,CDROM.length());
+
+ // Open the package file
+ FileFd Pkg(*I + GetFileName(), FileFd::ReadOnly, FileFd::Auto);
+ off_t const FileSize = Pkg.Size();
+
+ pkgTagFile Parser(&Pkg);
+ if (Pkg.IsOpen() == false || Pkg.Failed())
+ return false;
+
+ // Open the output file
+ char S[400];
+ snprintf(S,sizeof(S),"cdrom:[%s]/%s%s",Name.c_str(),
+ (*I).c_str() + CDROM.length(),GetFileName());
+ string TargetF = _config->FindDir("Dir::State::lists") + "partial/";
+ TargetF += URItoFileName(S);
+ FileFd Target;
+ if (_config->FindB("APT::CDROM::NoAct",false) == true)
+ {
+ TargetF = "/dev/null";
+ Target.Open(TargetF,FileFd::WriteExists);
+ } else {
+ Target.Open(TargetF,FileFd::WriteAtomic);
+ }
+ if (Target.IsOpen() == false || Target.Failed())
+ return false;
+
+ // Setup the progress meter
+ if(Progress)
+ Progress->OverallProgress(CurrentSize,TotalSize,FileSize,
+ string("Reading ") + Type() + " Indexes");
+
+ // Parse
+ if(Progress)
+ Progress->SubProgress(Pkg.Size());
+ pkgTagSection Section;
+ this->Section = &Section;
+ string Prefix;
+ unsigned long Hits = 0;
+ unsigned long Chop = 0;
+ while (Parser.Step(Section) == true)
+ {
+ if(Progress)
+ Progress->Progress(Parser.Offset());
+ string File;
+ unsigned long long Size;
+ if (GetFile(File,Size) == false)
+ return false;
+
+ if (Chop != 0)
+ File = OrigPath + ChopDirs(File,Chop);
+
+ // See if the file exists
+ if (NoStat == false || Hits < 10)
+ {
+ // Attempt to fix broken structure
+ if (Hits == 0)
+ {
+ if (ReconstructPrefix(Prefix,OrigPath,CDROM,File) == false &&
+ ReconstructChop(Chop,*I,File) == false)
+ {
+ if (Debug == true)
+ clog << "Missed: " << File << endl;
+ NotFound++;
+ continue;
+ }
+ if (Chop != 0)
+ File = OrigPath + ChopDirs(File,Chop);
+ }
+
+ // Get the size
+ struct stat Buf;
+ if (stat((CDROM + Prefix + File).c_str(),&Buf) != 0 ||
+ Buf.st_size == 0)
+ {
+ bool Mangled = false;
+ // Attempt to fix busted symlink support for one instance
+ string OrigFile = File;
+ string::size_type Start = File.find("binary-");
+ string::size_type End = File.find("/",Start+3);
+ if (Start != string::npos && End != string::npos)
+ {
+ File.replace(Start,End-Start,"binary-all");
+ Mangled = true;
+ }
+
+ if (Mangled == false ||
+ stat((CDROM + Prefix + File).c_str(),&Buf) != 0)
+ {
+ if (Debug == true)
+ clog << "Missed(2): " << OrigFile << endl;
+ NotFound++;
+ continue;
+ }
+ }
+
+ // Size match
+ if ((unsigned long long)Buf.st_size != Size)
+ {
+ if (Debug == true)
+ clog << "Wrong Size: " << File << endl;
+ WrongSize++;
+ continue;
+ }
+ }
+
+ Packages++;
+ Hits++;
+
+ if (RewriteEntry(Target, File) == false)
+ return false;
+ }
+
+ if (Debug == true)
+ cout << " Processed by using Prefix '" << Prefix << "' and chop " << Chop << endl;
+
+ if (_config->FindB("APT::CDROM::NoAct",false) == false)
+ {
+ // Move out of the partial directory
+ Target.Close();
+ string FinalF = _config->FindDir("Dir::State::lists");
+ FinalF += URItoFileName(S);
+ if (rename(TargetF.c_str(),FinalF.c_str()) != 0)
+ return _error->Errno("rename","Failed to rename");
+ ChangeOwnerAndPermissionOfFile("CopyPackages", FinalF.c_str(), "root", ROOT_GROUP, 0644);
+ }
+
+ /* Mangle the source to be in the proper notation with
+ prefix dist [component] */
+ *I = string(*I,Prefix.length());
+ ConvertToSourceList(CDROM,*I);
+ *I = Prefix + ' ' + *I;
+
+ CurrentSize += FileSize;
+ }
+ if(Progress)
+ Progress->Done();
+
+ // Some stats
+ if(log) {
+ stringstream msg;
+ if(NotFound == 0 && WrongSize == 0)
+ ioprintf(msg, _("Wrote %i records.\n"), Packages);
+ else if (NotFound != 0 && WrongSize == 0)
+ ioprintf(msg, _("Wrote %i records with %i missing files.\n"),
+ Packages, NotFound);
+ else if (NotFound == 0 && WrongSize != 0)
+ ioprintf(msg, _("Wrote %i records with %i mismatched files\n"),
+ Packages, WrongSize);
+ if (NotFound != 0 && WrongSize != 0)
+ ioprintf(msg, _("Wrote %i records with %i missing files and %i mismatched files\n"), Packages, NotFound, WrongSize);
+ }
+
+ if (Packages == 0)
+ _error->Warning("No valid records were found.");
+
+ if (NotFound + WrongSize > 10)
+ _error->Warning("A lot of entries were discarded, something may be wrong.\n");
+
+ return true;
+}
+ /*}}}*/
+// IndexCopy::ChopDirs - Chop off the leading directory components /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string IndexCopy::ChopDirs(string Path,unsigned int Depth)
+{
+ string::size_type I = 0;
+ do
+ {
+ I = Path.find('/',I+1);
+ Depth--;
+ }
+ while (I != string::npos && Depth != 0);
+
+ if (I == string::npos)
+ return string();
+
+ return string(Path,I+1);
+}
+ /*}}}*/
+// IndexCopy::ReconstructPrefix - Fix strange prefixing /*{{{*/
+// ---------------------------------------------------------------------
+/* This prepends dir components from the path to the package files to
+ the path to the deb until it is found */
+bool IndexCopy::ReconstructPrefix(string &Prefix,string OrigPath,string CD,
+ string File)
+{
+ bool Debug = _config->FindB("Debug::aptcdrom",false);
+ unsigned int Depth = 1;
+ string MyPrefix = Prefix;
+ while (1)
+ {
+ struct stat Buf;
+ if (stat((CD + MyPrefix + File).c_str(),&Buf) != 0)
+ {
+ if (Debug == true)
+ cout << "Failed, " << CD + MyPrefix + File << endl;
+ if (GrabFirst(OrigPath,MyPrefix,Depth++) == true)
+ continue;
+
+ return false;
+ }
+ else
+ {
+ Prefix = MyPrefix;
+ return true;
+ }
+ }
+ return false;
+}
+ /*}}}*/
+// IndexCopy::ReconstructChop - Fixes bad source paths /*{{{*/
+// ---------------------------------------------------------------------
+/* This removes path components from the filename and prepends the location
+ of the package files until a file is found */
+bool IndexCopy::ReconstructChop(unsigned long &Chop,string Dir,string File)
+{
+ // Attempt to reconstruct the filename
+ unsigned long Depth = 0;
+ while (1)
+ {
+ struct stat Buf;
+ if (stat((Dir + File).c_str(),&Buf) != 0)
+ {
+ File = ChopDirs(File,1);
+ Depth++;
+ if (File.empty() == false)
+ continue;
+ return false;
+ }
+ else
+ {
+ Chop = Depth;
+ return true;
+ }
+ }
+ return false;
+}
+ /*}}}*/
+// IndexCopy::ConvertToSourceList - Convert a Path to a sourcelist /*{{{*/
+// ---------------------------------------------------------------------
+/* We look for things in dists/ notation and convert them to
+ <dist> <component> form otherwise it is left alone. This also strips
+ the CD path.
+
+ This implements a regex sort of like:
+ (.*)/dists/([^/]*)/(.*)/binary-*
+ ^ ^ ^- Component
+ | |-------- Distribution
+ |------------------- Path
+
+ It was deciced to use only a single word for dist (rather than say
+ unstable/non-us) to increase the chance that each CD gets a single
+ line in sources.list.
+ */
+void IndexCopy::ConvertToSourceList(string CD,string &Path)
+{
+ // Strip the cdrom base path
+ Path = string(Path,CD.length());
+ if (Path.empty() == true)
+ Path = "/";
+
+ // Too short to be a dists/ type
+ if (Path.length() < strlen("dists/"))
+ return;
+
+ // Not a dists type.
+ if (stringcmp(Path.c_str(),Path.c_str()+strlen("dists/"),"dists/") != 0)
+ return;
+
+ // Isolate the dist
+ string::size_type Slash = strlen("dists/");
+ string::size_type Slash2 = Path.find('/',Slash + 1);
+ if (Slash2 == string::npos || Slash2 + 2 >= Path.length())
+ return;
+ string Dist = string(Path,Slash,Slash2 - Slash);
+
+ // Isolate the component
+ Slash = Slash2;
+ for (unsigned I = 0; I != 10; I++)
+ {
+ Slash = Path.find('/',Slash+1);
+ if (Slash == string::npos || Slash + 2 >= Path.length())
+ return;
+ string Comp = string(Path,Slash2+1,Slash - Slash2-1);
+
+ // Verify the trailing binary- bit
+ string::size_type BinSlash = Path.find('/',Slash + 1);
+ if (Slash == string::npos)
+ return;
+ string Binary = string(Path,Slash+1,BinSlash - Slash-1);
+
+ if (strncmp(Binary.c_str(), "binary-", strlen("binary-")) == 0)
+ {
+ Binary.erase(0, strlen("binary-"));
+ if (APT::Configuration::checkArchitecture(Binary) == false)
+ continue;
+ }
+ else if (Binary != "source")
+ continue;
+
+ Path = Dist + ' ' + Comp;
+ return;
+ }
+}
+ /*}}}*/
+// IndexCopy::GrabFirst - Return the first Depth path components /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool IndexCopy::GrabFirst(string Path,string &To,unsigned int Depth)
+{
+ string::size_type I = 0;
+ do
+ {
+ I = Path.find('/',I+1);
+ Depth--;
+ }
+ while (I != string::npos && Depth != 0);
+
+ if (I == string::npos)
+ return false;
+
+ To = string(Path,0,I+1);
+ return true;
+}
+ /*}}}*/
+// PackageCopy::GetFile - Get the file information from the section /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool PackageCopy::GetFile(string &File,unsigned long long &Size)
+{
+ File = Section->FindS("Filename");
+ Size = Section->FindI("Size");
+ if (File.empty() || Size == 0)
+ return _error->Error("Cannot find filename or size tag");
+ return true;
+}
+ /*}}}*/
+// PackageCopy::RewriteEntry - Rewrite the entry with a new filename /*{{{*/
+bool PackageCopy::RewriteEntry(FileFd &Target,string const &File)
+{
+ std::vector<pkgTagSection::Tag> Changes;
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Filename", File));
+
+ if (Section->Write(Target, TFRewritePackageOrder, Changes) == false)
+ return false;
+ return Target.Write("\n", 1);
+}
+ /*}}}*/
+// SourceCopy::GetFile - Get the file information from the section /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool SourceCopy::GetFile(string &File,unsigned long long &Size)
+{
+ string Files;
+
+ for (char const *const *type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ // derive field from checksum type
+ std::string checksumField("Checksums-");
+ if (strcmp(*type, "MD5Sum") == 0)
+ checksumField = "Files"; // historic name for MD5 checksums
+ else
+ checksumField.append(*type);
+
+ Files = Section->FindS(checksumField.c_str());
+ if (Files.empty() == false)
+ break;
+ }
+ if (Files.empty() == true)
+ return false;
+
+ // Stash the / terminated directory prefix
+ string Base = Section->FindS("Directory");
+ if (Base.empty() == false && Base[Base.length()-1] != '/')
+ Base += '/';
+
+ // Read the first file triplet
+ const char *C = Files.c_str();
+ string sSize;
+ string MD5Hash;
+
+ // Parse each of the elements
+ if (ParseQuoteWord(C,MD5Hash) == false ||
+ ParseQuoteWord(C,sSize) == false ||
+ ParseQuoteWord(C,File) == false)
+ return _error->Error("Error parsing file record");
+
+ // Parse the size and append the directory
+ Size = strtoull(sSize.c_str(), NULL, 10);
+ File = Base + File;
+ return true;
+}
+ /*}}}*/
+// SourceCopy::RewriteEntry - Rewrite the entry with a new filename /*{{{*/
+bool SourceCopy::RewriteEntry(FileFd &Target, std::string const &File)
+{
+ string const Dir(File,0,File.rfind('/'));
+ std::vector<pkgTagSection::Tag> Changes;
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Directory", Dir));
+
+ if (Section->Write(Target, TFRewriteSourceOrder, Changes) == false)
+ return false;
+ return Target.Write("\n", 1);
+}
+ /*}}}*/
+// SigVerify::Verify - Verify a files md5sum against its metaindex /*{{{*/
+bool SigVerify::Verify(string prefix, string file, metaIndex *MetaIndex)
+{
+ const metaIndex::checkSum *Record = MetaIndex->Lookup(file);
+ bool const Debug = _config->FindB("Debug::aptcdrom",false);
+
+ // we skip non-existing files in the verifcation of the Release file
+ // as non-existing files do not harm, but a warning scares people and
+ // makes it hard to strip unneeded files from an ISO like uncompressed
+ // indexes as it is done on the mirrors (see also LP: #255545 )
+ if(!RealFileExists(prefix+file))
+ {
+ if (Debug == true)
+ cout << "Skipping nonexistent in " << prefix << " file " << file << std::endl;
+ return true;
+ }
+
+ if (!Record)
+ {
+ _error->Warning(_("Can't find authentication record for: %s"), file.c_str());
+ return false;
+ }
+
+ if (!Record->Hashes.VerifyFile(prefix+file))
+ {
+ _error->Warning(_("Hash mismatch for: %s"),file.c_str());
+ return false;
+ }
+
+ if(Debug == true)
+ {
+ cout << "File: " << prefix+file << endl
+ << "Expected Hash " << endl;
+ for (HashStringList::const_iterator hs = Record->Hashes.begin(); hs != Record->Hashes.end(); ++hs)
+ std::cout << "\t- " << hs->toStr() << std::endl;
+ }
+
+ return true;
+}
+ /*}}}*/
+bool SigVerify::CopyMetaIndex(string CDROM, string CDName, /*{{{*/
+ string prefix, string file)
+{
+ char S[400];
+ snprintf(S,sizeof(S),"cdrom:[%s]/%s%s",CDName.c_str(),
+ (prefix).c_str() + CDROM.length(),file.c_str());
+ string TargetF = _config->FindDir("Dir::State::lists");
+ TargetF += URItoFileName(S);
+
+ FileFd Target;
+ FileFd Rel;
+ Target.Open(TargetF,FileFd::WriteAtomic);
+ Rel.Open(prefix + file,FileFd::ReadOnly);
+ if (CopyFile(Rel,Target) == false || Target.Close() == false)
+ return _error->Error("Copying of '%s' for '%s' from '%s' failed", file.c_str(), CDName.c_str(), prefix.c_str());
+ ChangeOwnerAndPermissionOfFile("CopyPackages", TargetF.c_str(), "root", ROOT_GROUP, 0644);
+
+ return true;
+}
+ /*}}}*/
+bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList, /*{{{*/
+ vector<string> /*PkgList*/,vector<string> /*SrcList*/)
+{
+ if (SigList.empty() == true)
+ return true;
+
+ bool Debug = _config->FindB("Debug::aptcdrom",false);
+
+ // Read all Release files
+ for (vector<string>::iterator I = SigList.begin(); I != SigList.end(); ++I)
+ {
+ if(Debug)
+ cout << "Signature verify for: " << *I << endl;
+
+ metaIndex *MetaIndex = new debReleaseIndex("","", {});
+ string prefix = *I;
+
+ string const releasegpg = *I+"Release.gpg";
+ string const release = *I+"Release";
+ string const inrelease = *I+"InRelease";
+ bool useInRelease = true;
+
+ // a Release.gpg without a Release should never happen
+ if (RealFileExists(inrelease) == true)
+ ;
+ else if(RealFileExists(release) == false || RealFileExists(releasegpg) == false)
+ {
+ delete MetaIndex;
+ continue;
+ }
+ else
+ useInRelease = false;
+
+ pid_t pid = ExecFork();
+ if(pid < 0) {
+ _error->Error("Fork failed");
+ return false;
+ }
+ if(pid == 0)
+ {
+ if (useInRelease == true)
+ ExecGPGV(inrelease, inrelease);
+ else
+ ExecGPGV(release, releasegpg);
+ }
+
+ if(!ExecWait(pid, "gpgv")) {
+ _error->Warning("Signature verification failed for: %s",
+ (useInRelease ? inrelease.c_str() : releasegpg.c_str()));
+ // something went wrong, don't copy the Release.gpg
+ // FIXME: delete any existing gpg file?
+ delete MetaIndex;
+ continue;
+ }
+
+ // Open the Release file and add it to the MetaIndex
+ std::string ErrorText;
+ if(MetaIndex->Load(release, &ErrorText) == false)
+ {
+ _error->Error("%s", ErrorText.c_str());
+ return false;
+ }
+
+ // go over the Indexfiles and see if they verify
+ // if so, remove them from our copy of the lists
+ vector<string> keys = MetaIndex->MetaKeys();
+ for (vector<string>::iterator I = keys.begin(); I != keys.end(); ++I)
+ {
+ if(!Verify(prefix,*I, MetaIndex)) {
+ // something went wrong, don't copy the Release.gpg
+ // FIXME: delete any existing gpg file?
+ _error->Discard();
+ continue;
+ }
+ }
+
+ // we need a fresh one for the Release.gpg
+ delete MetaIndex;
+
+ // everything was fine, copy the Release and Release.gpg file
+ if (useInRelease == true)
+ CopyMetaIndex(CDROM, Name, prefix, "InRelease");
+ else
+ {
+ CopyMetaIndex(CDROM, Name, prefix, "Release");
+ CopyMetaIndex(CDROM, Name, prefix, "Release.gpg");
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// SigVerify::RunGPGV - deprecated wrapper calling ExecGPGV /*{{{*/
+APT_NORETURN bool SigVerify::RunGPGV(std::string const &File, std::string const &FileOut,
+ int const &statusfd, int fd[2]) {
+ ExecGPGV(File, FileOut, statusfd, fd);
+}
+APT_NORETURN bool SigVerify::RunGPGV(std::string const &File, std::string const &FileOut,
+ int const &statusfd) {
+ ExecGPGV(File, FileOut, statusfd);
+}
+ /*}}}*/
+bool TranslationsCopy::CopyTranslations(string CDROM,string Name, /*{{{*/
+ vector<string> &List, pkgCdromStatus *log)
+{
+ OpProgress *Progress = NULL;
+ if (List.empty() == true)
+ return true;
+
+ if(log)
+ Progress = log->GetOpProgress();
+
+ bool Debug = _config->FindB("Debug::aptcdrom",false);
+
+ // Prepare the progress indicator
+ off_t TotalSize = 0;
+ std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ struct stat Buf;
+ bool found = false;
+ std::string file = *I;
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+ c != compressor.end(); ++c)
+ {
+ if (stat((file + c->Extension).c_str(), &Buf) != 0)
+ continue;
+ found = true;
+ break;
+ }
+
+ if (found == false)
+ return _error->Errno("stat", "Stat failed for %s", file.c_str());
+ TotalSize += Buf.st_size;
+ }
+
+ off_t CurrentSize = 0;
+ unsigned int NotFound = 0;
+ unsigned int WrongSize = 0;
+ unsigned int Packages = 0;
+ for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ // Open the package file
+ FileFd Pkg(*I, FileFd::ReadOnly, FileFd::Auto);
+ off_t const FileSize = Pkg.Size();
+
+ pkgTagFile Parser(&Pkg);
+ if (Pkg.IsOpen() == false || Pkg.Failed())
+ return false;
+
+ // Open the output file
+ char S[400];
+ snprintf(S,sizeof(S),"cdrom:[%s]/%s",Name.c_str(),
+ (*I).c_str() + CDROM.length());
+ string TargetF = _config->FindDir("Dir::State::lists") + "partial/";
+ TargetF += URItoFileName(S);
+ FileFd Target;
+ if (_config->FindB("APT::CDROM::NoAct",false) == true)
+ {
+ TargetF = "/dev/null";
+ Target.Open(TargetF,FileFd::WriteExists);
+ } else {
+ Target.Open(TargetF,FileFd::WriteAtomic);
+ }
+ if (Pkg.IsOpen() == false || Pkg.Failed())
+ return false;
+
+ // Setup the progress meter
+ if(Progress)
+ Progress->OverallProgress(CurrentSize,TotalSize,FileSize,
+ string("Reading Translation Indexes"));
+
+ // Parse
+ if(Progress)
+ Progress->SubProgress(Pkg.Size());
+ pkgTagSection Section;
+ this->Section = &Section;
+ string Prefix;
+ unsigned long Hits = 0;
+ while (Parser.Step(Section) == true)
+ {
+ if(Progress)
+ Progress->Progress(Parser.Offset());
+
+ if (Section.Write(Target) == false || Target.Write("\n", 1) == false)
+ return false;
+
+ Packages++;
+ Hits++;
+ }
+
+ if (Debug == true)
+ cout << " Processed by using Prefix '" << Prefix << "' and chop " << endl;
+
+ if (_config->FindB("APT::CDROM::NoAct",false) == false)
+ {
+ // Move out of the partial directory
+ Target.Close();
+ string FinalF = _config->FindDir("Dir::State::lists");
+ FinalF += URItoFileName(S);
+ if (rename(TargetF.c_str(),FinalF.c_str()) != 0)
+ return _error->Errno("rename","Failed to rename");
+ ChangeOwnerAndPermissionOfFile("CopyTranslations", FinalF.c_str(), "root", ROOT_GROUP, 0644);
+ }
+
+ CurrentSize += FileSize;
+ }
+ if(Progress)
+ Progress->Done();
+
+ // Some stats
+ if(log) {
+ stringstream msg;
+ if(NotFound == 0 && WrongSize == 0)
+ ioprintf(msg, _("Wrote %i records.\n"), Packages);
+ else if (NotFound != 0 && WrongSize == 0)
+ ioprintf(msg, _("Wrote %i records with %i missing files.\n"),
+ Packages, NotFound);
+ else if (NotFound == 0 && WrongSize != 0)
+ ioprintf(msg, _("Wrote %i records with %i mismatched files\n"),
+ Packages, WrongSize);
+ if (NotFound != 0 && WrongSize != 0)
+ ioprintf(msg, _("Wrote %i records with %i missing files and %i mismatched files\n"), Packages, NotFound, WrongSize);
+ }
+
+ if (Packages == 0)
+ _error->Warning("No valid records were found.");
+
+ if (NotFound + WrongSize > 10)
+ _error->Warning("A lot of entries were discarded, something may be wrong.\n");
+
+ return true;
+}
+ /*}}}*/
+
+IndexCopy::IndexCopy() : d(nullptr), Section(nullptr) {}
+IndexCopy::~IndexCopy() {}
+
+PackageCopy::PackageCopy() : IndexCopy(), d(NULL) {}
+PackageCopy::~PackageCopy() {}
+SourceCopy::SourceCopy() : IndexCopy(), d(NULL) {}
+SourceCopy::~SourceCopy() {}
+TranslationsCopy::TranslationsCopy() : d(nullptr), Section(nullptr) {}
+TranslationsCopy::~TranslationsCopy() {}
+SigVerify::SigVerify() : d(NULL) {}
+SigVerify::~SigVerify() {}
diff --git a/apt-pkg/indexcopy.h b/apt-pkg/indexcopy.h
new file mode 100644
index 0000000..dc3b985
--- /dev/null
+++ b/apt-pkg/indexcopy.h
@@ -0,0 +1,129 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Index Copying - Aid for copying and verifying the index files
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef INDEXCOPY_H
+#define INDEXCOPY_H
+
+#include <vector>
+#ifndef APT_11_CLEAN_HEADERS
+#include <string>
+#include <stdio.h>
+#endif
+
+#include <apt-pkg/macros.h>
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/gpgv.h>
+class FileFd;
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+#endif
+
+class pkgTagSection;
+class pkgCdromStatus;
+class FileFd;
+class metaIndex;
+
+class IndexCopy /*{{{*/
+{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ protected:
+
+ pkgTagSection *Section;
+
+ std::string ChopDirs(std::string Path,unsigned int Depth);
+ bool ReconstructPrefix(std::string &Prefix,std::string OrigPath,std::string CD,
+ std::string File);
+ bool ReconstructChop(unsigned long &Chop,std::string Dir,std::string File);
+ void ConvertToSourceList(std::string CD,std::string &Path);
+ bool GrabFirst(std::string Path,std::string &To,unsigned int Depth);
+ virtual bool GetFile(std::string &Filename,unsigned long long &Size) = 0;
+ virtual bool RewriteEntry(FileFd &Target, std::string const &File) = 0;
+ virtual const char *GetFileName() = 0;
+ virtual const char *Type() = 0;
+
+ public:
+
+ bool CopyPackages(std::string CDROM,std::string Name,std::vector<std::string> &List,
+ pkgCdromStatus *log);
+ IndexCopy();
+ virtual ~IndexCopy();
+};
+ /*}}}*/
+class PackageCopy : public IndexCopy /*{{{*/
+{
+ void * const d;
+ protected:
+
+ virtual bool GetFile(std::string &Filename,unsigned long long &Size) APT_OVERRIDE;
+ virtual bool RewriteEntry(FileFd &Target, std::string const &File) APT_OVERRIDE;
+ virtual const char *GetFileName() APT_OVERRIDE {return "Packages";};
+ virtual const char *Type() APT_OVERRIDE {return "Package";};
+
+ public:
+ PackageCopy();
+ virtual ~PackageCopy();
+};
+ /*}}}*/
+class SourceCopy : public IndexCopy /*{{{*/
+{
+ void * const d;
+ protected:
+
+ virtual bool GetFile(std::string &Filename,unsigned long long &Size) APT_OVERRIDE;
+ virtual bool RewriteEntry(FileFd &Target, std::string const &File) APT_OVERRIDE;
+ virtual const char *GetFileName() APT_OVERRIDE {return "Sources";};
+ virtual const char *Type() APT_OVERRIDE {return "Source";};
+
+ public:
+ SourceCopy();
+ virtual ~SourceCopy();
+};
+ /*}}}*/
+class TranslationsCopy /*{{{*/
+{
+ void * const d;
+ protected:
+ pkgTagSection *Section;
+
+ public:
+ bool CopyTranslations(std::string CDROM,std::string Name,std::vector<std::string> &List,
+ pkgCdromStatus *log);
+
+ TranslationsCopy();
+ virtual ~TranslationsCopy();
+};
+ /*}}}*/
+class SigVerify /*{{{*/
+{
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ APT_HIDDEN bool Verify(std::string prefix,std::string file, metaIndex *records);
+ APT_HIDDEN bool CopyMetaIndex(std::string CDROM, std::string CDName,
+ std::string prefix, std::string file);
+
+ public:
+ bool CopyAndVerify(std::string CDROM,std::string Name,std::vector<std::string> &SigList,
+ std::vector<std::string> PkgList,std::vector<std::string> SrcList);
+
+ APT_DEPRECATED_MSG("Use ExecGPGV instead") static bool RunGPGV(std::string const &File, std::string const &FileOut,
+ int const &statusfd, int fd[2]);
+ APT_DEPRECATED_MSG("Use ExecGPGV instead") static bool RunGPGV(std::string const &File, std::string const &FileOut,
+ int const &statusfd = -1);
+
+ SigVerify();
+ virtual ~SigVerify();
+};
+ /*}}}*/
+
+#endif
diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc
new file mode 100644
index 0000000..85d0e87
--- /dev/null
+++ b/apt-pkg/indexfile.cc
@@ -0,0 +1,412 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Index File - Abstraction for an index of archive/source file.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-pkg/debindexfile.h>
+
+#include <sys/stat.h>
+
+#include <clocale>
+#include <cstring>
+#include <memory>
+#include <string>
+#include <vector>
+ /*}}}*/
+
+// Global list of Item supported
+static pkgIndexFile::Type *ItmList[10];
+pkgIndexFile::Type **pkgIndexFile::Type::GlobalList = ItmList;
+unsigned long pkgIndexFile::Type::GlobalListLen = 0;
+
+// Type::Type - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgIndexFile::Type::Type()
+{
+ ItmList[GlobalListLen] = this;
+ GlobalListLen++;
+ Label = NULL;
+}
+ /*}}}*/
+// Type::GetType - Locate the type by name /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgIndexFile::Type *pkgIndexFile::Type::GetType(const char *Type)
+{
+ for (unsigned I = 0; I != GlobalListLen; I++)
+ if (strcmp(GlobalList[I]->Label,Type) == 0)
+ return GlobalList[I];
+ return 0;
+}
+ /*}}}*/
+pkgIndexFile::pkgIndexFile(bool const Trusted) : /*{{{*/
+ d(NULL), Trusted(Trusted)
+{
+}
+ /*}}}*/
+// IndexFile::ArchiveInfo - Stub /*{{{*/
+std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator const &Ver) const
+{
+ debDebPkgFileIndex const * const debfile = dynamic_cast<debDebPkgFileIndex const*>(this);
+ if (debfile != nullptr)
+ return debfile->ArchiveInfo_impl(Ver);
+ return std::string();
+}
+ /*}}}*/
+// IndexFile::FindInCache - Stub /*{{{*/
+pkgCache::PkgFileIterator pkgIndexFile::FindInCache(pkgCache &Cache) const
+{
+ return pkgCache::PkgFileIterator(Cache);
+}
+ /*}}}*/
+// IndexFile::SourceIndex - Stub /*{{{*/
+std::string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &/*Record*/,
+ pkgSrcRecords::File const &/*File*/) const
+{
+ return std::string();
+}
+ /*}}}*/
+// IndexFile::TranslationsAvailable - Check if will use Translation /*{{{*/
+bool pkgIndexFile::TranslationsAvailable() {
+ return (APT::Configuration::getLanguages().empty() != true);
+}
+ /*}}}*/
+// IndexFile::CheckLanguageCode - Check the Language Code /*{{{*/
+bool pkgIndexFile::CheckLanguageCode(const char * const Lang)
+{
+ if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_'))
+ return true;
+
+ if (strcmp(Lang,"C") != 0)
+ _error->Warning("Wrong language code %s", Lang);
+
+ return false;
+}
+ /*}}}*/
+// IndexFile::LanguageCode - Return the Language Code /*{{{*/
+std::string pkgIndexFile::LanguageCode() {
+APT_IGNORE_DEPRECATED_PUSH
+ if (TranslationsAvailable() == false)
+ return "";
+ return APT::Configuration::getLanguages()[0];
+APT_IGNORE_DEPRECATED_POP
+}
+ /*}}}*/
+
+// IndexTarget - Constructor /*{{{*/
+IndexTarget::IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
+ std::string const &LongDesc, std::string const &URI, bool const IsOptional,
+ bool const KeepCompressed, std::map<std::string, std::string> const &Options) :
+ URI(URI), Description(LongDesc), ShortDesc(ShortDesc), MetaKey(MetaKey),
+ IsOptional(IsOptional), KeepCompressed(KeepCompressed), Options(Options)
+{
+}
+ /*}}}*/
+std::string IndexTarget::Option(OptionKeys const EnumKey) const /*{{{*/
+{
+ std::string Key;
+ switch (EnumKey)
+ {
+#define APT_CASE(X) case X: Key = #X; break
+ APT_CASE(SITE);
+ APT_CASE(RELEASE);
+ APT_CASE(COMPONENT);
+ APT_CASE(LANGUAGE);
+ APT_CASE(ARCHITECTURE);
+ APT_CASE(BASE_URI);
+ APT_CASE(REPO_URI);
+ APT_CASE(IDENTIFIER);
+ APT_CASE(TARGET_OF);
+ APT_CASE(CREATED_BY);
+ APT_CASE(FALLBACK_OF);
+ APT_CASE(PDIFFS);
+ APT_CASE(DEFAULTENABLED);
+ APT_CASE(COMPRESSIONTYPES);
+ APT_CASE(SOURCESENTRY);
+ APT_CASE(BY_HASH);
+ APT_CASE(KEEPCOMPRESSEDAS);
+ APT_CASE(ALLOW_INSECURE);
+ APT_CASE(ALLOW_WEAK);
+ APT_CASE(ALLOW_DOWNGRADE_TO_INSECURE);
+ APT_CASE(INRELEASE_PATH);
+#undef APT_CASE
+ case FILENAME:
+ {
+ auto const M = Options.find("FILENAME");
+ if (M == Options.end())
+ return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
+ return M->second;
+ }
+ case EXISTING_FILENAME:
+ std::string const filename = Option(FILENAME);
+ std::vector<std::string> const types = VectorizeString(Option(COMPRESSIONTYPES), ' ');
+ for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
+ {
+ if (t->empty())
+ continue;
+ std::string const file = (*t == "uncompressed") ? filename : (filename + "." + *t);
+ if (FileExists(file))
+ return file;
+ }
+ return "";
+ }
+ std::map<std::string,std::string>::const_iterator const M = Options.find(Key);
+ if (M == Options.end())
+ return "";
+ return M->second;
+}
+ /*}}}*/
+bool IndexTarget::OptionBool(OptionKeys const EnumKey) const /*{{{*/
+{
+ return StringToBool(Option(EnumKey), false);
+}
+ /*}}}*/
+std::string IndexTarget::Format(std::string format) const /*{{{*/
+{
+ for (std::map<std::string, std::string>::const_iterator O = Options.begin(); O != Options.end(); ++O)
+ {
+ format = SubstVar(format, std::string("$(") + O->first + ")", O->second);
+ }
+ format = SubstVar(format, "$(METAKEY)", MetaKey);
+ format = SubstVar(format, "$(SHORTDESC)", ShortDesc);
+ format = SubstVar(format, "$(DESCRIPTION)", Description);
+ format = SubstVar(format, "$(URI)", URI);
+ format = SubstVar(format, "$(FILENAME)", Option(IndexTarget::FILENAME));
+ return format;
+}
+ /*}}}*/
+
+pkgDebianIndexTargetFile::pkgDebianIndexTargetFile(IndexTarget const &Target, bool const Trusted) :/*{{{*/
+ pkgDebianIndexFile(Trusted), d(NULL), Target(Target)
+{
+}
+ /*}}}*/
+std::string pkgDebianIndexTargetFile::ArchiveURI(std::string const &File) const/*{{{*/
+{
+ return Target.Option(IndexTarget::REPO_URI) + File;
+}
+ /*}}}*/
+std::string pkgDebianIndexTargetFile::Describe(bool const Short) const /*{{{*/
+{
+ if (Short)
+ return Target.Description;
+ return Target.Description + " (" + IndexFileName() + ")";
+}
+ /*}}}*/
+std::string pkgDebianIndexTargetFile::IndexFileName() const /*{{{*/
+{
+ std::string const s = Target.Option(IndexTarget::FILENAME);
+ if (FileExists(s))
+ return s;
+
+ std::vector<std::string> const types = VectorizeString(Target.Option(IndexTarget::COMPRESSIONTYPES), ' ');
+ for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
+ {
+ std::string p = s + '.' + *t;
+ if (FileExists(p))
+ return p;
+ }
+ return s;
+}
+ /*}}}*/
+unsigned long pkgDebianIndexTargetFile::Size() const /*{{{*/
+{
+ unsigned long size = 0;
+
+ /* we need to ignore errors here; if the lists are absent, just return 0 */
+ _error->PushToStack();
+
+ FileFd f(IndexFileName(), FileFd::ReadOnly, FileFd::Extension);
+ if (!f.Failed())
+ size = f.Size();
+
+ if (_error->PendingError() == true)
+ size = 0;
+ _error->RevertToStack();
+
+ return size;
+}
+ /*}}}*/
+bool pkgDebianIndexTargetFile::Exists() const /*{{{*/
+{
+ return FileExists(IndexFileName());
+}
+ /*}}}*/
+std::string pkgDebianIndexTargetFile::GetArchitecture() const /*{{{*/
+{
+ return Target.Option(IndexTarget::ARCHITECTURE);
+}
+ /*}}}*/
+std::string pkgDebianIndexTargetFile::GetComponent() const /*{{{*/
+{
+ return Target.Option(IndexTarget::COMPONENT);
+}
+ /*}}}*/
+bool pkgDebianIndexTargetFile::OpenListFile(FileFd &Pkg, std::string const &FileName)/*{{{*/
+{
+ if (Pkg.Open(FileName, FileFd::ReadOnly, FileFd::Extension) == false)
+ return _error->Error("Problem opening %s",FileName.c_str());
+ return true;
+}
+ /*}}}*/
+std::string pkgDebianIndexTargetFile::GetProgressDescription() const
+{
+ return Target.Description;
+}
+IndexTarget pkgDebianIndexTargetFile::GetIndexTarget() const
+{
+ return Target;
+}
+
+pkgDebianIndexRealFile::pkgDebianIndexRealFile(std::string const &pFile, bool const Trusted) :/*{{{*/
+ pkgDebianIndexFile(Trusted), d(NULL)
+{
+ if (pFile.empty())
+ ;
+ else if (pFile == "/nonexistent/stdin")
+ File = pFile;
+ else
+ File = flAbsPath(pFile);
+}
+ /*}}}*/
+// IndexRealFile::Size - Return the size of the index /*{{{*/
+unsigned long pkgDebianIndexRealFile::Size() const
+{
+ struct stat S;
+ if (stat(File.c_str(),&S) != 0)
+ return 0;
+ return S.st_size;
+}
+ /*}}}*/
+bool pkgDebianIndexRealFile::Exists() const /*{{{*/
+{
+ return FileExists(File);
+}
+ /*}}}*/
+std::string pkgDebianIndexRealFile::Describe(bool const /*Short*/) const/*{{{*/
+{
+ return File;
+}
+ /*}}}*/
+std::string pkgDebianIndexRealFile::ArchiveURI(std::string const &/*File*/) const/*{{{*/
+{
+ return "file:" + File;
+}
+ /*}}}*/
+std::string pkgDebianIndexRealFile::IndexFileName() const /*{{{*/
+{
+ return File;
+}
+ /*}}}*/
+std::string pkgDebianIndexRealFile::GetProgressDescription() const
+{
+ return File;
+}
+bool pkgDebianIndexRealFile::OpenListFile(FileFd &Pkg, std::string const &FileName)/*{{{*/
+{
+ if (Pkg.Open(FileName, FileFd::ReadOnly, FileFd::Extension) == false)
+ return _error->Error("Problem opening %s",FileName.c_str());
+ return true;
+}
+ /*}}}*/
+
+pkgDebianIndexFile::pkgDebianIndexFile(bool const Trusted) : pkgIndexFile(Trusted)
+{
+}
+pkgDebianIndexFile::~pkgDebianIndexFile()
+{
+}
+pkgCacheListParser * pkgDebianIndexFile::CreateListParser(FileFd &Pkg)
+{
+ if (Pkg.IsOpen() == false)
+ return nullptr;
+ _error->PushToStack();
+ std::unique_ptr<pkgCacheListParser> Parser(new debListParser(&Pkg));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ return newError ? nullptr : Parser.release();
+}
+bool pkgDebianIndexFile::Merge(pkgCacheGenerator &Gen,OpProgress * const Prog)
+{
+ std::string const PackageFile = IndexFileName();
+ FileFd Pkg;
+ if (OpenListFile(Pkg, PackageFile) == false)
+ return false;
+ _error->PushToStack();
+ std::unique_ptr<pkgCacheListParser> Parser(CreateListParser(Pkg));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ if (newError == false && Parser == nullptr)
+ return true;
+ if (Parser == NULL)
+ return false;
+
+ if (Prog != NULL)
+ Prog->SubProgress(0, GetProgressDescription());
+
+ if (Gen.SelectFile(PackageFile, *this, GetArchitecture(), GetComponent(), GetIndexFlags()) == false)
+ return _error->Error("Problem with SelectFile %s",PackageFile.c_str());
+
+ // Store the IMS information
+ pkgCache::PkgFileIterator File = Gen.GetCurFile();
+ pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator> DynFile(File);
+ File->Size = Pkg.FileSize();
+ File->mtime = Pkg.ModificationTime();
+
+ if (Gen.MergeList(*Parser) == false)
+ return _error->Error("Problem with MergeList %s",PackageFile.c_str());
+ return true;
+}
+pkgCache::PkgFileIterator pkgDebianIndexFile::FindInCache(pkgCache &Cache) const
+{
+ std::string const FileName = IndexFileName();
+ pkgCache::PkgFileIterator File = Cache.FileBegin();
+ for (; File.end() == false; ++File)
+ {
+ if (File.FileName() == NULL || FileName != File.FileName())
+ continue;
+
+ struct stat St;
+ if (stat(File.FileName(),&St) != 0)
+ {
+ if (_config->FindB("Debug::pkgCacheGen", false))
+ std::clog << "DebianIndexFile::FindInCache - stat failed on " << File.FileName() << std::endl;
+ return pkgCache::PkgFileIterator(Cache);
+ }
+ if ((map_filesize_t)St.st_size != File->Size || St.st_mtime != File->mtime)
+ {
+ if (_config->FindB("Debug::pkgCacheGen", false))
+ std::clog << "DebianIndexFile::FindInCache - size (" << St.st_size << " <> " << File->Size
+ << ") or mtime (" << St.st_mtime << " <> " << File->mtime
+ << ") doesn't match for " << File.FileName() << std::endl;
+ return pkgCache::PkgFileIterator(Cache);
+ }
+ return File;
+ }
+
+ return File;
+}
+
+pkgIndexFile::~pkgIndexFile() {}
+pkgDebianIndexTargetFile::~pkgDebianIndexTargetFile() {}
+pkgDebianIndexRealFile::~pkgDebianIndexRealFile() {}
diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h
new file mode 100644
index 0000000..31b9517
--- /dev/null
+++ b/apt-pkg/indexfile.h
@@ -0,0 +1,229 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Index File - Abstraction for an index of archive/source file.
+
+ There are 4 primary sorts of index files, all represented by this
+ class:
+
+ Binary index files
+ Binary translation files
+ Binary index files describing the local system
+ Source index files
+
+ They are all bundled together here, and the interfaces for
+ sources.list, acquire, cache gen and record parsing all use this class
+ to access the underlying representation.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_INDEXFILE_H
+#define PKGLIB_INDEXFILE_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/srcrecords.h>
+
+#include <map>
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+#ifndef APT_10_CLEANER_HEADERS
+class pkgAcquire;
+#endif
+
+class pkgCacheGenerator;
+class pkgCacheListParser;
+class OpProgress;
+
+class IndexTarget /*{{{*/
+/** \brief Information about an index file. */
+{
+ public:
+ /** \brief A URI from which the index file can be downloaded. */
+ std::string URI;
+
+ /** \brief A description of the index file. */
+ std::string Description;
+
+ /** \brief A shorter description of the index file. */
+ std::string ShortDesc;
+
+ /** \brief The key by which this index file should be
+ looked up within the meta index file. */
+ std::string MetaKey;
+
+ /** \brief Is it okay if the file isn't found in the meta index */
+ bool IsOptional;
+
+ /** \brief If the file is downloaded compressed, do not unpack it */
+ bool KeepCompressed;
+
+ /** \brief options with which this target was created
+ Prefer the usage of #Option if at all possible.
+ Beware: Not all of these options are intended for public use */
+ std::map<std::string, std::string> Options;
+
+ IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
+ std::string const &LongDesc, std::string const &URI, bool const IsOptional,
+ bool const KeepCompressed, std::map<std::string, std::string> const &Options);
+
+ enum OptionKeys
+ {
+ SITE,
+ RELEASE,
+ COMPONENT,
+ LANGUAGE,
+ ARCHITECTURE,
+ BASE_URI,
+ REPO_URI,
+ CREATED_BY,
+ TARGET_OF,
+ FILENAME,
+ EXISTING_FILENAME,
+ PDIFFS,
+ COMPRESSIONTYPES,
+ DEFAULTENABLED,
+ SOURCESENTRY,
+ BY_HASH,
+ KEEPCOMPRESSEDAS,
+ FALLBACK_OF,
+ IDENTIFIER,
+ ALLOW_INSECURE,
+ ALLOW_WEAK,
+ ALLOW_DOWNGRADE_TO_INSECURE,
+ INRELEASE_PATH,
+ };
+ std::string Option(OptionKeys const Key) const;
+ bool OptionBool(OptionKeys const Key) const;
+ std::string Format(std::string format) const;
+};
+ /*}}}*/
+
+class pkgIndexFile
+{
+ void * const d;
+ protected:
+ bool Trusted;
+
+ public:
+
+ class Type
+ {
+ public:
+
+ // Global list of Items supported
+ static Type **GlobalList;
+ static unsigned long GlobalListLen;
+ static Type *GetType(const char * const Type) APT_PURE;
+
+ const char *Label;
+
+ virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &/*File*/) const {return 0;};
+ virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string const &/*File*/) const {return 0;};
+ Type();
+ virtual ~Type() {};
+ };
+
+ virtual const Type *GetType() const = 0;
+
+ // Return descriptive strings of various sorts
+ virtual std::string ArchiveInfo(pkgCache::VerIterator const &Ver) const;
+ virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record,
+ pkgSrcRecords::File const &File) const;
+ virtual std::string Describe(bool const Short = false) const = 0;
+
+ // Interface for acquire
+ virtual std::string ArchiveURI(std::string const &/*File*/) const {return std::string();};
+
+ // Interface for the record parsers
+ virtual pkgSrcRecords::Parser *CreateSrcParser() const {return 0;};
+
+ // Interface for the Cache Generator
+ virtual bool Exists() const = 0;
+ virtual bool HasPackages() const = 0;
+ virtual unsigned long Size() const = 0;
+ virtual bool Merge(pkgCacheGenerator &/*Gen*/, OpProgress* const /*Prog*/) { return true; };
+ virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
+
+ APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static bool TranslationsAvailable();
+ /* No intern need for this method anymore as the check for correctness
+ is already done in getLanguages(). Note also that this check is
+ rather bad (doesn't take three character like ast into account).*/
+ APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static bool CheckLanguageCode(const char * const Lang);
+ /* As we have now possibly more than one LanguageCode this method is
+ superseded by a) private classmembers or b) getLanguages() */
+ APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static std::string LanguageCode();
+
+ bool IsTrusted() const { return Trusted; };
+
+ explicit pkgIndexFile(bool const Trusted);
+ virtual ~pkgIndexFile();
+};
+
+class pkgDebianIndexFile : public pkgIndexFile
+{
+protected:
+ virtual std::string IndexFileName() const = 0;
+ virtual std::string GetComponent() const = 0;
+ virtual std::string GetArchitecture() const = 0;
+ virtual std::string GetProgressDescription() const = 0;
+ virtual uint8_t GetIndexFlags() const = 0;
+ virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) = 0;
+ APT_HIDDEN virtual pkgCacheListParser * CreateListParser(FileFd &Pkg);
+
+public:
+ virtual bool Merge(pkgCacheGenerator &Gen, OpProgress* const Prog) APT_OVERRIDE;
+ virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const APT_OVERRIDE;
+
+ explicit pkgDebianIndexFile(bool const Trusted);
+ virtual ~pkgDebianIndexFile();
+};
+
+class pkgDebianIndexTargetFile : public pkgDebianIndexFile
+{
+ void * const d;
+protected:
+ IndexTarget const Target;
+
+ virtual std::string IndexFileName() const APT_OVERRIDE;
+ virtual std::string GetComponent() const APT_OVERRIDE;
+ virtual std::string GetArchitecture() const APT_OVERRIDE;
+ virtual std::string GetProgressDescription() const APT_OVERRIDE;
+ virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) APT_OVERRIDE;
+
+public:
+ virtual std::string ArchiveURI(std::string const &File) const APT_OVERRIDE;
+ virtual std::string Describe(bool const Short = false) const APT_OVERRIDE;
+ virtual bool Exists() const APT_OVERRIDE;
+ virtual unsigned long Size() const APT_OVERRIDE;
+ IndexTarget GetIndexTarget() const APT_HIDDEN;
+
+ pkgDebianIndexTargetFile(IndexTarget const &Target, bool const Trusted);
+ virtual ~pkgDebianIndexTargetFile();
+};
+
+class pkgDebianIndexRealFile : public pkgDebianIndexFile
+{
+ void * const d;
+protected:
+ std::string File;
+
+ virtual std::string IndexFileName() const APT_OVERRIDE;
+ virtual std::string GetProgressDescription() const APT_OVERRIDE;
+ virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) APT_OVERRIDE;
+public:
+ virtual std::string Describe(bool const /*Short*/ = false) const APT_OVERRIDE;
+ virtual bool Exists() const APT_OVERRIDE;
+ virtual unsigned long Size() const APT_OVERRIDE;
+ virtual std::string ArchiveURI(std::string const &/*File*/) const APT_OVERRIDE;
+
+ pkgDebianIndexRealFile(std::string const &File, bool const Trusted);
+ virtual ~pkgDebianIndexRealFile();
+};
+
+#endif
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
new file mode 100644
index 0000000..a619368
--- /dev/null
+++ b/apt-pkg/init.cc
@@ -0,0 +1,289 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Init - Initialize the package library
+
+ ##################################################################### */
+ /*}}}*/
+// Include files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/strutl.h>
+
+#include <cstdlib>
+#include <fstream>
+#include <sstream>
+#include <string>
+#include <unordered_map>
+#include <vector>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+#define Stringfy_(x) # x
+#define Stringfy(x) Stringfy_(x)
+const char *pkgVersion = PACKAGE_VERSION;
+const char *pkgLibVersion = Stringfy(APT_PKG_MAJOR) "."
+ Stringfy(APT_PKG_MINOR) "."
+ Stringfy(APT_PKG_RELEASE);
+namespace APT {
+ APT_HIDDEN extern std::unordered_map<std::string, std::vector<std::string>> ArchToTupleMap;
+}
+
+// Splits by whitespace. There may be continuous spans of whitespace - they
+// will be considered as one.
+static std::vector<std::string> split(std::string const & s)
+{
+ std::vector<std::string> vec;
+ std::istringstream iss(s);
+ iss.imbue(std::locale::classic());
+ for(std::string current_s; iss >> current_s; )
+ vec.push_back(current_s);
+ return vec;
+}
+
+
+// pkgInitArchTupleMap - Initialize the architecture tuple map /*{{{*/
+// ---------------------------------------------------------------------
+/* This initializes */
+static bool pkgInitArchTupleMap()
+{
+ auto tuplepath = _config->FindFile("Dir::dpkg::tupletable", DPKG_DATADIR "/tupletable");
+ auto tripletpath = _config->FindFile("Dir::dpkg::triplettable", DPKG_DATADIR "/triplettable");
+ auto cpupath = _config->FindFile("Dir::dpkg::cputable", DPKG_DATADIR "/cputable");
+
+ // Load a list of CPUs
+ std::vector<std::string> cpus;
+ std::ifstream cputable(cpupath);
+ for (std::string cpuline; std::getline(cputable, cpuline); )
+ {
+ if (cpuline[0] == '#' || cpuline[0] == '\0')
+ continue;
+ auto cpurow = split(cpuline);
+ auto cpu = APT::String::Strip(cpurow.at(0));
+
+ cpus.push_back(cpu);
+ }
+ if (!cputable.eof())
+ return _error->Error("Error reading the CPU table");
+
+ // Load the architecture tuple
+ std::ifstream tupletable;
+ if (FileExists(tuplepath))
+ tupletable.open(tuplepath);
+ else if (FileExists(tripletpath))
+ tupletable.open(tripletpath);
+ else
+ return _error->Error("Cannot find dpkg tuplet or triplet table");
+
+ APT::ArchToTupleMap.clear();
+ for (std::string tupleline; std::getline(tupletable, tupleline); )
+ {
+ if (tupleline[0] == '#' || tupleline[0] == '\0')
+ continue;
+
+ std::vector<std::string> tuplerow = split(tupleline);
+
+ auto tuple = APT::String::Strip(tuplerow.at(0));
+ auto arch = APT::String::Strip(tuplerow.at(1));
+
+ if (tuple.find("<cpu>") == tuple.npos && arch.find("<cpu>") == arch.npos)
+ {
+ APT::ArchToTupleMap.insert({arch, VectorizeString(tuple, '-')});
+ }
+ else
+ {
+ for (auto && cpu : cpus)
+ {
+ auto mytuple = SubstVar(tuple, std::string("<cpu>"), cpu);
+ auto myarch = SubstVar(arch, std::string("<cpu>"), cpu);
+
+ APT::ArchToTupleMap.insert({myarch, VectorizeString(mytuple, '-')});
+ }
+ }
+ }
+ if (!tupletable.eof())
+ return _error->Error("Error reading the Tuple table");
+
+ return true;
+}
+ /*}}}*/
+
+
+// pkgInitConfig - Initialize the configuration class /*{{{*/
+// ---------------------------------------------------------------------
+/* Directories are specified in such a way that the FindDir function will
+ understand them. That is, if they don't start with a / then their parent
+ is prepended, this allows a fair degree of flexibility. */
+bool pkgInitConfig(Configuration &Cnf)
+{
+ // General APT things
+ Cnf.CndSet("APT::Architecture", COMMON_ARCH);
+ if (Cnf.Exists("APT::Build-Essential") == false)
+ Cnf.Set("APT::Build-Essential::", "build-essential");
+ Cnf.CndSet("APT::Install-Recommends", true);
+ Cnf.CndSet("APT::Install-Suggests", false);
+ Cnf.CndSet("Dir","/");
+
+ // State
+ Cnf.CndSet("Dir::State", STATE_DIR + 1);
+ Cnf.CndSet("Dir::State::lists","lists/");
+ Cnf.CndSet("Dir::State::cdroms","cdroms.list");
+
+ // Cache
+ Cnf.CndSet("Dir::Cache", CACHE_DIR + 1);
+ Cnf.CndSet("Dir::Cache::archives","archives/");
+ Cnf.CndSet("Dir::Cache::srcpkgcache","srcpkgcache.bin");
+ Cnf.CndSet("Dir::Cache::pkgcache","pkgcache.bin");
+
+ // Configuration
+ Cnf.CndSet("Dir::Etc", CONF_DIR + 1);
+ Cnf.CndSet("Dir::Etc::sourcelist","sources.list");
+ Cnf.CndSet("Dir::Etc::sourceparts","sources.list.d");
+ Cnf.CndSet("Dir::Etc::main","apt.conf");
+ Cnf.CndSet("Dir::Etc::netrc", "auth.conf");
+ Cnf.CndSet("Dir::Etc::netrcparts", "auth.conf.d");
+ Cnf.CndSet("Dir::Etc::parts","apt.conf.d");
+ Cnf.CndSet("Dir::Etc::preferences","preferences");
+ Cnf.CndSet("Dir::Etc::preferencesparts","preferences.d");
+ Cnf.CndSet("Dir::Etc::trusted", "trusted.gpg");
+ Cnf.CndSet("Dir::Etc::trustedparts","trusted.gpg.d");
+ Cnf.CndSet("Dir::Bin::methods", LIBEXEC_DIR "/methods");
+ Cnf.CndSet("Dir::Bin::solvers::",LIBEXEC_DIR "/solvers");
+ Cnf.CndSet("Dir::Bin::planners::",LIBEXEC_DIR "/planners");
+ Cnf.CndSet("Dir::Media::MountPath","/media/apt");
+
+ // State
+ Cnf.CndSet("Dir::Log", LOG_DIR + 1);
+ Cnf.CndSet("Dir::Log::Terminal","term.log");
+ Cnf.CndSet("Dir::Log::History","history.log");
+ Cnf.CndSet("Dir::Log::Planner","eipp.log.xz");
+
+ Cnf.Set("Dir::Ignore-Files-Silently::", "~$");
+ Cnf.Set("Dir::Ignore-Files-Silently::", "\\.disabled$");
+ Cnf.Set("Dir::Ignore-Files-Silently::", "\\.bak$");
+ Cnf.Set("Dir::Ignore-Files-Silently::", "\\.dpkg-[a-z]+$");
+ Cnf.Set("Dir::Ignore-Files-Silently::", "\\.ucf-[a-z]+$");
+ Cnf.Set("Dir::Ignore-Files-Silently::", "\\.save$");
+ Cnf.Set("Dir::Ignore-Files-Silently::", "\\.orig$");
+ Cnf.Set("Dir::Ignore-Files-Silently::", "\\.distUpgrade$");
+
+ // Repository security
+ Cnf.CndSet("Acquire::AllowInsecureRepositories", false);
+ Cnf.CndSet("Acquire::AllowWeakRepositories", false);
+ Cnf.CndSet("Acquire::AllowDowngradeToInsecureRepositories", false);
+
+ // Default cdrom mount point
+ Cnf.CndSet("Acquire::cdrom::mount", "/media/cdrom/");
+
+ // The default user we drop to in the methods
+ Cnf.CndSet("APT::Sandbox::User", "_apt");
+
+ Cnf.CndSet("Acquire::IndexTargets::deb::Packages::MetaKey", "$(COMPONENT)/binary-$(ARCHITECTURE)/Packages");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Packages::flatMetaKey", "Packages");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Packages::ShortDescription", "Packages");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Packages::Description", "$(RELEASE)/$(COMPONENT) $(ARCHITECTURE) Packages");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Packages::flatDescription", "$(RELEASE) Packages");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Packages::Optional", false);
+ Cnf.CndSet("Acquire::IndexTargets::deb::Translations::MetaKey", "$(COMPONENT)/i18n/Translation-$(LANGUAGE)");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Translations::flatMetaKey", "$(LANGUAGE)");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Translations::ShortDescription", "Translation-$(LANGUAGE)");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Translations::Description", "$(RELEASE)/$(COMPONENT) Translation-$(LANGUAGE)");
+ Cnf.CndSet("Acquire::IndexTargets::deb::Translations::flatDescription", "$(RELEASE) Translation-$(LANGUAGE)");
+ Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::MetaKey", "$(COMPONENT)/source/Sources");
+ Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::flatMetaKey", "Sources");
+ Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::ShortDescription", "Sources");
+ Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::Description", "$(RELEASE)/$(COMPONENT) Sources");
+ Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::flatDescription", "$(RELEASE) Sources");
+ Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::Optional", false);
+
+ Cnf.CndSet("Acquire::Changelogs::URI::Origin::Debian", "https://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog");
+ Cnf.CndSet("Acquire::Changelogs::URI::Origin::Ubuntu", "https://changelogs.ubuntu.com/changelogs/pool/@CHANGEPATH@/changelog");
+ Cnf.CndSet("Acquire::Changelogs::AlwaysOnline::Origin::Ubuntu", true);
+
+
+ Cnf.CndSet("DPkg::Path", "/usr/sbin:/usr/bin:/sbin:/bin");
+
+ // Read an alternate config file
+ _error->PushToStack();
+ const char *Cfg = getenv("APT_CONFIG");
+ if (Cfg != 0 && strlen(Cfg) != 0)
+ {
+ if (RealFileExists(Cfg) == true)
+ ReadConfigFile(Cnf, Cfg);
+ else
+ _error->WarningE("RealFileExists",_("Unable to read %s"),Cfg);
+ }
+
+ // Read the configuration parts dir
+ std::string const Parts = Cnf.FindDir("Dir::Etc::parts", "/dev/null");
+ if (DirectoryExists(Parts) == true)
+ ReadConfigDir(Cnf, Parts);
+ else if (APT::String::Endswith(Parts, "/dev/null") == false)
+ _error->WarningE("DirectoryExists",_("Unable to read %s"),Parts.c_str());
+
+ // Read the main config file
+ std::string const FName = Cnf.FindFile("Dir::Etc::main", "/dev/null");
+ if (RealFileExists(FName) == true)
+ ReadConfigFile(Cnf, FName);
+
+ if (Cnf.FindB("Debug::pkgInitConfig",false) == true)
+ Cnf.Dump();
+
+#ifdef APT_DOMAIN
+ if (Cnf.Exists("Dir::Locale"))
+ {
+ bindtextdomain(APT_DOMAIN,Cnf.FindDir("Dir::Locale").c_str());
+ bindtextdomain(textdomain(0),Cnf.FindDir("Dir::Locale").c_str());
+ }
+#endif
+
+ auto const good = _error->PendingError() == false;
+ _error->MergeWithStack();
+ return good;
+}
+ /*}}}*/
+// pkgInitSystem - Initialize the _system class /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgInitSystem(Configuration &Cnf,pkgSystem *&Sys)
+{
+ Sys = 0;
+ std::string Label = Cnf.Find("Apt::System","");
+ if (Label.empty() == false)
+ {
+ Sys = pkgSystem::GetSystem(Label.c_str());
+ if (Sys == 0)
+ return _error->Error(_("Packaging system '%s' is not supported"),Label.c_str());
+ }
+ else
+ {
+ signed MaxScore = 0;
+ for (unsigned I = 0; I != pkgSystem::GlobalListLen; I++)
+ {
+ signed Score = pkgSystem::GlobalList[I]->Score(Cnf);
+ if (Score > MaxScore)
+ {
+ MaxScore = Score;
+ Sys = pkgSystem::GlobalList[I];
+ }
+ }
+
+ if (Sys == 0)
+ return _error->Error(_("Unable to determine a suitable packaging system type"));
+ }
+
+ if (pkgInitArchTupleMap() == false)
+ return false;
+
+ return Sys->Initialize(Cnf);
+}
+ /*}}}*/
diff --git a/apt-pkg/init.h b/apt-pkg/init.h
new file mode 100644
index 0000000..d062392
--- /dev/null
+++ b/apt-pkg/init.h
@@ -0,0 +1,32 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Init - Initialize the package library
+
+ This function must be called to configure the config class before
+ calling many APT library functions.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_INIT_H
+#define PKGLIB_INIT_H
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/pkgsystem.h>
+#endif
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/macros.h>
+#endif
+
+class pkgSystem;
+class Configuration;
+
+extern const char *pkgVersion;
+extern const char *pkgLibVersion;
+
+bool pkgInitConfig(Configuration &Cnf);
+bool pkgInitSystem(Configuration &Cnf,pkgSystem *&Sys);
+
+#endif
diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc
new file mode 100644
index 0000000..2e8fac2
--- /dev/null
+++ b/apt-pkg/install-progress.cc
@@ -0,0 +1,425 @@
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/install-progress.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <cmath>
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+
+namespace APT {
+namespace Progress {
+
+PackageManager::PackageManager() : d(NULL), percentage(0.0), last_reported_progress(-1) {}
+PackageManager::~PackageManager() {}
+
+/* Return a APT::Progress::PackageManager based on the global
+ * apt configuration (i.e. APT::Status-Fd and APT::Status-deb822-Fd)
+ */
+PackageManager* PackageManagerProgressFactory()
+{
+ // select the right progress
+ int status_fd = _config->FindI("APT::Status-Fd", -1);
+ int status_deb822_fd = _config->FindI("APT::Status-deb822-Fd", -1);
+
+ APT::Progress::PackageManager *progress = NULL;
+ if (status_deb822_fd > 0)
+ progress = new APT::Progress::PackageManagerProgressDeb822Fd(
+ status_deb822_fd);
+ else if (status_fd > 0)
+ progress = new APT::Progress::PackageManagerProgressFd(status_fd);
+ else if(_config->FindB("Dpkg::Progress-Fancy", false) == true)
+ progress = new APT::Progress::PackageManagerFancy();
+ else if (_config->FindB("Dpkg::Progress",
+ _config->FindB("DpkgPM::Progress", false)) == true)
+ progress = new APT::Progress::PackageManagerText();
+ else
+ progress = new APT::Progress::PackageManager();
+ return progress;
+}
+
+bool PackageManager::StatusChanged(std::string /*PackageName*/,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string /*HumanReadableAction*/)
+{
+ int reporting_steps = _config->FindI("DpkgPM::Reporting-Steps", 1);
+ percentage = StepsDone/(double)TotalSteps * 100.0;
+ strprintf(progress_str, _("Progress: [%3li%%]"), std::lround(percentage));
+
+ if(percentage < (last_reported_progress + reporting_steps))
+ return false;
+
+ return true;
+}
+
+PackageManagerProgressFd::PackageManagerProgressFd(int progress_fd)
+ : d(NULL), StepsDone(0), StepsTotal(1)
+{
+ OutStatusFd = progress_fd;
+}
+PackageManagerProgressFd::~PackageManagerProgressFd() {}
+
+void PackageManagerProgressFd::WriteToStatusFd(std::string s)
+{
+ if(OutStatusFd <= 0)
+ return;
+ FileFd::Write(OutStatusFd, s.c_str(), s.size());
+}
+
+static std::string GetProgressFdString(char const * const status,
+ char const * const pkg, unsigned long long Done,
+ unsigned long long Total, char const * const msg)
+{
+ float const progress{Done / static_cast<float>(Total) * 100};
+ std::ostringstream str;
+ str.imbue(std::locale::classic());
+ str.precision(4);
+ str << status << ':' << pkg << ':' << std::fixed << progress << ':' << msg << '\n';
+ return str.str();
+}
+
+void PackageManagerProgressFd::StartDpkg()
+{
+ if(OutStatusFd <= 0)
+ return;
+
+ // FIXME: use SetCloseExec here once it taught about throwing
+ // exceptions instead of doing _exit(100) on failure
+ fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
+
+ // send status information that we are about to fork dpkg
+ WriteToStatusFd(GetProgressFdString("pmstatus", "dpkg-exec", StepsDone, StepsTotal, _("Running dpkg")));
+}
+
+void PackageManagerProgressFd::Stop()
+{
+}
+
+void PackageManagerProgressFd::Error(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ErrorMessage)
+{
+ WriteToStatusFd(GetProgressFdString("pmerror", PackageName.c_str(),
+ StepsDone, TotalSteps, ErrorMessage.c_str()));
+}
+
+void PackageManagerProgressFd::ConffilePrompt(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ConfMessage)
+{
+ WriteToStatusFd(GetProgressFdString("pmconffile", PackageName.c_str(),
+ StepsDone, TotalSteps, ConfMessage.c_str()));
+}
+
+
+bool PackageManagerProgressFd::StatusChanged(std::string PackageName,
+ unsigned int xStepsDone,
+ unsigned int xTotalSteps,
+ std::string pkg_action)
+{
+ StepsDone = xStepsDone;
+ StepsTotal = xTotalSteps;
+
+ WriteToStatusFd(GetProgressFdString("pmstatus", StringSplit(PackageName, ":")[0].c_str(),
+ StepsDone, StepsTotal, pkg_action.c_str()));
+
+ if(_config->FindB("Debug::APT::Progress::PackageManagerFd", false) == true)
+ std::cerr << "progress: " << PackageName << " " << xStepsDone
+ << " " << xTotalSteps << " " << pkg_action
+ << std::endl;
+
+
+ return true;
+}
+
+
+PackageManagerProgressDeb822Fd::PackageManagerProgressDeb822Fd(int progress_fd)
+ : d(NULL), StepsDone(0), StepsTotal(1)
+{
+ OutStatusFd = progress_fd;
+}
+PackageManagerProgressDeb822Fd::~PackageManagerProgressDeb822Fd() {}
+
+void PackageManagerProgressDeb822Fd::WriteToStatusFd(std::string s)
+{
+ FileFd::Write(OutStatusFd, s.c_str(), s.size());
+}
+
+static std::string GetProgressDeb822String(char const * const status,
+ char const * const pkg, unsigned long long Done,
+ unsigned long long Total, char const * const msg)
+{
+ float const progress{Done / static_cast<float>(Total) * 100};
+ std::ostringstream str;
+ str.imbue(std::locale::classic());
+ str.precision(4);
+ str << "Status: " << status << '\n';
+ if (pkg != nullptr)
+ str << "Package: " << pkg << '\n';
+ str << "Percent: " << std::fixed << progress << '\n'
+ << "Message: " << msg << "\n\n";
+ return str.str();
+}
+
+void PackageManagerProgressDeb822Fd::StartDpkg()
+{
+ // FIXME: use SetCloseExec here once it taught about throwing
+ // exceptions instead of doing _exit(100) on failure
+ fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
+
+ WriteToStatusFd(GetProgressDeb822String("progress", nullptr, StepsDone, StepsTotal, _("Running dpkg")));
+}
+
+void PackageManagerProgressDeb822Fd::Stop()
+{
+}
+
+void PackageManagerProgressDeb822Fd::Error(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ErrorMessage)
+{
+ WriteToStatusFd(GetProgressDeb822String("Error", PackageName.c_str(), StepsDone, TotalSteps, ErrorMessage.c_str()));
+}
+
+void PackageManagerProgressDeb822Fd::ConffilePrompt(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ConfMessage)
+{
+ WriteToStatusFd(GetProgressDeb822String("ConfFile", PackageName.c_str(), StepsDone, TotalSteps, ConfMessage.c_str()));
+}
+
+
+bool PackageManagerProgressDeb822Fd::StatusChanged(std::string PackageName,
+ unsigned int xStepsDone,
+ unsigned int xTotalSteps,
+ std::string message)
+{
+ StepsDone = xStepsDone;
+ StepsTotal = xTotalSteps;
+
+ WriteToStatusFd(GetProgressDeb822String("progress", PackageName.c_str(), StepsDone, StepsTotal, message.c_str()));
+ return true;
+}
+
+
+PackageManagerFancy::PackageManagerFancy()
+ : d(NULL), child_pty(-1)
+{
+ // setup terminal size
+ old_SIGWINCH = signal(SIGWINCH, PackageManagerFancy::staticSIGWINCH);
+ instances.push_back(this);
+}
+std::vector<PackageManagerFancy*> PackageManagerFancy::instances;
+
+PackageManagerFancy::~PackageManagerFancy()
+{
+ instances.erase(find(instances.begin(), instances.end(), this));
+ signal(SIGWINCH, old_SIGWINCH);
+}
+
+void PackageManagerFancy::staticSIGWINCH(int signum)
+{
+ std::vector<PackageManagerFancy *>::const_iterator I;
+ for(I = instances.begin(); I != instances.end(); ++I)
+ (*I)->HandleSIGWINCH(signum);
+}
+
+PackageManagerFancy::TermSize
+PackageManagerFancy::GetTerminalSize()
+{
+ struct winsize win;
+ PackageManagerFancy::TermSize s = { 0, 0 };
+
+ // FIXME: get from "child_pty" instead?
+ if(ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) != 0)
+ return s;
+
+ if(_config->FindB("Debug::InstallProgress::Fancy", false) == true)
+ std::cerr << "GetTerminalSize: " << win.ws_row << " x " << win.ws_col << std::endl;
+
+ s.rows = win.ws_row;
+ s.columns = win.ws_col;
+ return s;
+}
+
+void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows)
+{
+ if(_config->FindB("Debug::InstallProgress::Fancy", false) == true)
+ std::cerr << "SetupTerminalScrollArea: " << nr_rows << std::endl;
+
+ if (unlikely(nr_rows <= 1))
+ return;
+
+ // scroll down a bit to avoid visual glitch when the screen
+ // area shrinks by one row
+ std::cout << "\n";
+
+ // save cursor
+ std::cout << "\0337";
+
+ // set scroll region (this will place the cursor in the top left)
+ std::cout << "\033[0;" << std::to_string(nr_rows - 1) << "r";
+
+ // restore cursor but ensure its inside the scrolling area
+ std::cout << "\0338";
+ static const char *move_cursor_up = "\033[1A";
+ std::cout << move_cursor_up;
+
+ // ensure its flushed
+ std::flush(std::cout);
+
+ // setup tty size to ensure xterm/linux console are working properly too
+ // see bug #731738
+ struct winsize win;
+ if (ioctl(child_pty, TIOCGWINSZ, (char *)&win) != -1)
+ {
+ win.ws_row = nr_rows - 1;
+ ioctl(child_pty, TIOCSWINSZ, (char *)&win);
+ }
+}
+
+void PackageManagerFancy::HandleSIGWINCH(int)
+{
+ int const nr_terminal_rows = GetTerminalSize().rows;
+ SetupTerminalScrollArea(nr_terminal_rows);
+ DrawStatusLine();
+}
+
+void PackageManagerFancy::Start(int a_child_pty)
+{
+ child_pty = a_child_pty;
+ int const nr_terminal_rows = GetTerminalSize().rows;
+ SetupTerminalScrollArea(nr_terminal_rows);
+}
+
+void PackageManagerFancy::Stop()
+{
+ int const nr_terminal_rows = GetTerminalSize().rows;
+ if (nr_terminal_rows > 0)
+ {
+ SetupTerminalScrollArea(nr_terminal_rows + 1);
+
+ // override the progress line (sledgehammer)
+ static const char* clear_screen_below_cursor = "\033[J";
+ std::cout << clear_screen_below_cursor;
+ std::flush(std::cout);
+ }
+ child_pty = -1;
+}
+
+std::string
+PackageManagerFancy::GetTextProgressStr(float Percent, int OutputSize)
+{
+ std::string output;
+ if (unlikely(OutputSize < 3))
+ return output;
+
+ int const BarSize = OutputSize - 2; // bar without the leading "[" and trailing "]"
+ int const BarDone = std::max(0, std::min(BarSize, static_cast<int>(std::floor(Percent * BarSize))));
+ output.append("[");
+ std::fill_n(std::fill_n(std::back_inserter(output), BarDone, '#'), BarSize - BarDone, '.');
+ output.append("]");
+ return output;
+}
+
+bool PackageManagerFancy::StatusChanged(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string HumanReadableAction)
+{
+ if (!PackageManager::StatusChanged(PackageName, StepsDone, TotalSteps,
+ HumanReadableAction))
+ return false;
+
+ return DrawStatusLine();
+}
+bool PackageManagerFancy::DrawStatusLine()
+{
+ PackageManagerFancy::TermSize const size = GetTerminalSize();
+ if (unlikely(size.rows < 1 || size.columns < 1))
+ return false;
+
+ static std::string save_cursor = "\0337";
+ static std::string restore_cursor = "\0338";
+
+ // green
+ static std::string set_bg_color = DeQuoteString(
+ _config->Find("Dpkg::Progress-Fancy::Progress-fg", "%1b[42m"));
+ // black
+ static std::string set_fg_color = DeQuoteString(
+ _config->Find("Dpkg::Progress-Fancy::Progress-bg", "%1b[30m"));
+
+ static std::string restore_bg = "\033[49m";
+ static std::string restore_fg = "\033[39m";
+
+ std::cout << save_cursor
+ // move cursor position to last row
+ << "\033[" << std::to_string(size.rows) << ";0f"
+ << set_bg_color
+ << set_fg_color
+ << progress_str
+ << restore_bg
+ << restore_fg;
+ std::flush(std::cout);
+
+ // draw text progress bar
+ if (_config->FindB("Dpkg::Progress-Fancy::Progress-Bar", true))
+ {
+ int padding = 4;
+ auto const progressbar_size = size.columns - padding - progress_str.size();
+ auto const current_percent = percentage / 100.0f;
+ std::cout << " "
+ << GetTextProgressStr(current_percent, progressbar_size)
+ << " ";
+ std::flush(std::cout);
+ }
+
+ // restore
+ std::cout << restore_cursor;
+ std::flush(std::cout);
+
+ last_reported_progress = percentage;
+
+ return true;
+}
+
+bool PackageManagerText::StatusChanged(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string HumanReadableAction)
+{
+ if (!PackageManager::StatusChanged(PackageName, StepsDone, TotalSteps, HumanReadableAction))
+ return false;
+
+ std::cout << progress_str << "\r\n";
+ std::flush(std::cout);
+
+ last_reported_progress = percentage;
+
+ return true;
+}
+
+PackageManagerText::PackageManagerText() : PackageManager(), d(NULL) {}
+PackageManagerText::~PackageManagerText() {}
+
+
+
+
+} // namespace progress
+} // namespace apt
diff --git a/apt-pkg/install-progress.h b/apt-pkg/install-progress.h
new file mode 100644
index 0000000..bcc0b61
--- /dev/null
+++ b/apt-pkg/install-progress.h
@@ -0,0 +1,176 @@
+#ifndef PKGLIB_IPROGRESS_H
+#define PKGLIB_IPROGRESS_H
+
+#include <apt-pkg/macros.h>
+
+#include <string>
+#include <vector>
+#include <signal.h>
+#include <unistd.h>
+
+namespace APT {
+namespace Progress {
+
+ class PackageManager;
+ PackageManager* PackageManagerProgressFactory();
+
+ class PackageManager
+ {
+ private:
+ /** \brief dpointer placeholder */
+ void * const d;
+
+ protected:
+ std::string progress_str;
+ float percentage;
+ int last_reported_progress;
+
+ public:
+ PackageManager();
+ virtual ~PackageManager();
+
+ /* Global Start/Stop */
+ virtual void Start(int /*child_pty*/=-1) {};
+ virtual void Stop() {};
+
+ /* When dpkg is invoked (may happen multiple times for each
+ * install/remove block
+ */
+ virtual void StartDpkg() {};
+
+ virtual pid_t fork() {return ::fork(); };
+
+ virtual void Pulse() {};
+ virtual long GetPulseInterval() {
+ return 50000000;
+ };
+
+ virtual bool StatusChanged(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string HumanReadableAction);
+ virtual void Error(std::string /*PackageName*/,
+ unsigned int /*StepsDone*/,
+ unsigned int /*TotalSteps*/,
+ std::string /*ErrorMessage*/) {}
+ virtual void ConffilePrompt(std::string /*PackageName*/,
+ unsigned int /*StepsDone*/,
+ unsigned int /*TotalSteps*/,
+ std::string /*ConfMessage*/) {}
+ };
+
+ class PackageManagerProgressFd : public PackageManager
+ {
+ void * const d;
+ protected:
+ int OutStatusFd;
+ int StepsDone;
+ int StepsTotal;
+ void WriteToStatusFd(std::string msg);
+
+ public:
+ explicit PackageManagerProgressFd(int progress_fd);
+ virtual ~PackageManagerProgressFd();
+
+ virtual void StartDpkg() APT_OVERRIDE;
+ virtual void Stop() APT_OVERRIDE;
+
+ virtual bool StatusChanged(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string HumanReadableAction) APT_OVERRIDE;
+ virtual void Error(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ErrorMessage) APT_OVERRIDE;
+ virtual void ConffilePrompt(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ConfMessage) APT_OVERRIDE;
+
+ };
+
+ class PackageManagerProgressDeb822Fd : public PackageManager
+ {
+ void * const d;
+ protected:
+ int OutStatusFd;
+ int StepsDone;
+ int StepsTotal;
+ void WriteToStatusFd(std::string msg);
+
+ public:
+ explicit PackageManagerProgressDeb822Fd(int progress_fd);
+ virtual ~PackageManagerProgressDeb822Fd();
+
+ virtual void StartDpkg() APT_OVERRIDE;
+ virtual void Stop() APT_OVERRIDE;
+
+ virtual bool StatusChanged(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string HumanReadableAction) APT_OVERRIDE;
+ virtual void Error(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ErrorMessage) APT_OVERRIDE;
+ virtual void ConffilePrompt(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string ConfMessage) APT_OVERRIDE;
+ };
+
+ class PackageManagerFancy : public PackageManager
+ {
+ void * const d;
+ private:
+ APT_HIDDEN static void staticSIGWINCH(int);
+ static std::vector<PackageManagerFancy*> instances;
+ APT_HIDDEN bool DrawStatusLine();
+
+ protected:
+ void SetupTerminalScrollArea(int nr_rows);
+ void HandleSIGWINCH(int);
+
+ typedef struct {
+ int rows;
+ int columns;
+ } TermSize;
+ TermSize GetTerminalSize();
+
+ sighandler_t old_SIGWINCH;
+ int child_pty;
+
+ public:
+ PackageManagerFancy();
+ virtual ~PackageManagerFancy();
+ virtual void Start(int child_pty=-1) APT_OVERRIDE;
+ virtual void Stop() APT_OVERRIDE;
+ virtual bool StatusChanged(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string HumanReadableAction) APT_OVERRIDE;
+
+ // return a progress bar of the given size for the given progress
+ // percent between 0.0 and 1.0 in the form "[####...]"
+ static std::string GetTextProgressStr(float percent, int OutputSize);
+ };
+
+ class PackageManagerText : public PackageManager
+ {
+ void * const d;
+ public:
+ virtual bool StatusChanged(std::string PackageName,
+ unsigned int StepsDone,
+ unsigned int TotalSteps,
+ std::string HumanReadableAction) APT_OVERRIDE;
+
+ PackageManagerText();
+ virtual ~PackageManagerText();
+ };
+
+
+} // namespace Progress
+} // namespace APT
+
+#endif
diff --git a/apt-pkg/metaindex.cc b/apt-pkg/metaindex.cc
new file mode 100644
index 0000000..8cbdb5e
--- /dev/null
+++ b/apt-pkg/metaindex.cc
@@ -0,0 +1,176 @@
+// Include Files /*{{{*/
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/pkgcachegen.h>
+
+#include <apt-pkg/debmetaindex.h>
+
+#include <string>
+#include <vector>
+ /*}}}*/
+
+class metaIndexPrivate /*{{{*/
+{
+ public:
+ std::string Origin;
+ std::string Label;
+ std::string Version;
+ signed short DefaultPin;
+ std::string ReleaseNotes;
+};
+ /*}}}*/
+
+std::string metaIndex::Describe() const
+{
+ return "Release";
+}
+
+pkgCache::RlsFileIterator metaIndex::FindInCache(pkgCache &Cache, bool const) const
+{
+ return pkgCache::RlsFileIterator(Cache);
+}
+
+bool metaIndex::Merge(pkgCacheGenerator &Gen,OpProgress *) const
+{
+ return Gen.SelectReleaseFile("", "");
+}
+
+metaIndex::metaIndex(std::string const &URI, std::string const &Dist,
+ char const * const Type)
+: d(new metaIndexPrivate()), Indexes(NULL), Type(Type), URI(URI), Dist(Dist), Trusted(TRI_UNSET),
+ Date(0), ValidUntil(0), SupportsAcquireByHash(false), LoadedSuccessfully(TRI_UNSET)
+{
+ /* nothing */
+}
+
+metaIndex::~metaIndex()
+{
+ if (Indexes != 0)
+ {
+ for (std::vector<pkgIndexFile *>::iterator I = (*Indexes).begin();
+ I != (*Indexes).end(); ++I)
+ delete *I;
+ delete Indexes;
+ }
+ for (auto const &E: Entries)
+ delete E.second;
+ delete d;
+}
+
+// one line Getters for public fields /*{{{*/
+APT_PURE std::string metaIndex::GetURI() const { return URI; }
+APT_PURE std::string metaIndex::GetDist() const { return Dist; }
+APT_PURE const char* metaIndex::GetType() const { return Type; }
+APT_PURE metaIndex::TriState metaIndex::GetTrusted() const { return Trusted; }
+APT_PURE std::string metaIndex::GetSignedBy() const { return SignedBy; }
+APT_PURE std::string metaIndex::GetOrigin() const { return d->Origin; }
+APT_PURE std::string metaIndex::GetLabel() const { return d->Label; }
+APT_PURE std::string metaIndex::GetVersion() const { return d->Version; }
+APT_PURE std::string metaIndex::GetCodename() const { return Codename; }
+APT_PURE std::string metaIndex::GetSuite() const { return Suite; }
+APT_PURE std::string metaIndex::GetReleaseNotes() const { return d->ReleaseNotes; }
+APT_PURE signed short metaIndex::GetDefaultPin() const { return d->DefaultPin; }
+APT_PURE bool metaIndex::GetSupportsAcquireByHash() const { return SupportsAcquireByHash; }
+APT_PURE time_t metaIndex::GetValidUntil() const { return ValidUntil; }
+APT_PURE time_t metaIndex::GetNotBefore() const
+{
+ debReleaseIndex const *const deb = dynamic_cast<debReleaseIndex const *>(this);
+ if (deb != nullptr)
+ return deb->GetNotBefore();
+ return 0;
+}
+APT_PURE time_t metaIndex::GetDate() const { return this->Date; }
+APT_PURE metaIndex::TriState metaIndex::GetLoadedSuccessfully() const { return LoadedSuccessfully; }
+APT_PURE std::string metaIndex::GetExpectedDist() const { return Dist; }
+ /*}}}*/
+bool metaIndex::CheckDist(string const &MaybeDist) const /*{{{*/
+{
+ if (MaybeDist.empty() || this->Codename == MaybeDist || this->Suite == MaybeDist)
+ return true;
+
+ std::string Transformed = MaybeDist;
+ if (Transformed == "../project/experimental")
+ Transformed = "experimental";
+
+ auto const pos = Transformed.rfind('/');
+ if (pos != string::npos)
+ Transformed = Transformed.substr(0, pos);
+
+ if (Transformed == ".")
+ Transformed.clear();
+
+ return Transformed.empty() || this->Codename == Transformed || this->Suite == Transformed;
+}
+ /*}}}*/
+APT_PURE metaIndex::checkSum *metaIndex::Lookup(string const &MetaKey) const /*{{{*/
+{
+ std::map<std::string, metaIndex::checkSum* >::const_iterator sum = Entries.find(MetaKey);
+ if (sum == Entries.end())
+ return NULL;
+ return sum->second;
+}
+ /*}}}*/
+APT_PURE bool metaIndex::Exists(string const &MetaKey) const /*{{{*/
+{
+ return Entries.find(MetaKey) != Entries.end();
+}
+ /*}}}*/
+std::vector<std::string> metaIndex::MetaKeys() const /*{{{*/
+{
+ std::vector<std::string> keys;
+ std::map<string,checkSum *>::const_iterator I = Entries.begin();
+ while(I != Entries.end()) {
+ keys.push_back((*I).first);
+ ++I;
+ }
+ return keys;
+}
+ /*}}}*/
+void metaIndex::swapLoad(metaIndex * const OldMetaIndex) /*{{{*/
+{
+ std::swap(SignedBy, OldMetaIndex->SignedBy);
+ std::swap(Suite, OldMetaIndex->Suite);
+ std::swap(Codename, OldMetaIndex->Codename);
+ std::swap(Date, OldMetaIndex->Date);
+ std::swap(ValidUntil, OldMetaIndex->ValidUntil);
+ std::swap(SupportsAcquireByHash, OldMetaIndex->SupportsAcquireByHash);
+ std::swap(Entries, OldMetaIndex->Entries);
+ std::swap(LoadedSuccessfully, OldMetaIndex->LoadedSuccessfully);
+
+ OldMetaIndex->SetOrigin(d->Origin);
+ OldMetaIndex->SetLabel(d->Label);
+ OldMetaIndex->SetVersion(d->Version);
+ OldMetaIndex->SetDefaultPin(d->DefaultPin);
+}
+ /*}}}*/
+
+bool metaIndex::IsArchitectureSupported(std::string const &arch) const /*{{{*/
+{
+ debReleaseIndex const * const deb = dynamic_cast<debReleaseIndex const *>(this);
+ if (deb != NULL)
+ return deb->IsArchitectureSupported(arch);
+ return true;
+}
+ /*}}}*/
+bool metaIndex::IsArchitectureAllSupportedFor(IndexTarget const &target) const/*{{{*/
+{
+ debReleaseIndex const * const deb = dynamic_cast<debReleaseIndex const *>(this);
+ if (deb != NULL)
+ return deb->IsArchitectureAllSupportedFor(target);
+ return true;
+}
+ /*}}}*/
+bool metaIndex::HasSupportForComponent(std::string const &component) const/*{{{*/
+{
+ debReleaseIndex const * const deb = dynamic_cast<debReleaseIndex const *>(this);
+ if (deb != NULL)
+ return deb->HasSupportForComponent(component);
+ return true;
+}
+ /*}}}*/
+
+void metaIndex::SetOrigin(std::string const &origin) { d->Origin = origin; }
+void metaIndex::SetLabel(std::string const &label) { d->Label = label; }
+void metaIndex::SetVersion(std::string const &version) { d->Version = version; }
+void metaIndex::SetDefaultPin(signed short const defaultpin) { d->DefaultPin = defaultpin; }
+void metaIndex::SetReleaseNotes(std::string const &notes) { d->ReleaseNotes = notes; }
diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h
new file mode 100644
index 0000000..0866430
--- /dev/null
+++ b/apt-pkg/metaindex.h
@@ -0,0 +1,131 @@
+#ifndef PKGLIB_METAINDEX_H
+#define PKGLIB_METAINDEX_H
+
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/init.h>
+
+#include <stddef.h>
+
+#include <string>
+#include <vector>
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/pkgcache.h>
+class pkgCacheGenerator;
+class OpProgress;
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/srcrecords.h>
+using std::string;
+#endif
+
+class pkgAcquire;
+class IndexTarget;
+class pkgCacheGenerator;
+class OpProgress;
+
+class metaIndexPrivate;
+
+class metaIndex
+{
+public:
+ APT_IGNORE_DEPRECATED_PUSH
+ struct checkSum
+ {
+ std::string MetaKeyFilename;
+ HashStringList Hashes;
+ unsigned long long Size;
+
+ APT_DEPRECATED_MSG("Use the HashStringList member Hashes instead of a hardcoded HashString") HashString Hash;
+ };
+ APT_IGNORE_DEPRECATED_POP
+
+ enum APT_HIDDEN TriState {
+ TRI_YES, TRI_DONTCARE, TRI_NO, TRI_UNSET
+ };
+private:
+ metaIndexPrivate * const d;
+protected:
+ std::vector <pkgIndexFile *> *Indexes;
+ // parsed from the sources.list
+ const char *Type;
+ std::string URI;
+ std::string Dist;
+ TriState Trusted;
+ std::string SignedBy;
+
+ // parsed from a file
+ std::string Suite;
+ std::string Codename;
+ time_t Date;
+ time_t ValidUntil;
+ bool SupportsAcquireByHash;
+ std::map<std::string, checkSum *> Entries;
+ TriState LoadedSuccessfully;
+
+public:
+ // Various accessors
+ std::string GetURI() const;
+ std::string GetDist() const;
+ const char* GetType() const;
+ TriState GetTrusted() const;
+ std::string GetSignedBy() const;
+
+ std::string GetOrigin() const;
+ std::string GetLabel() const;
+ std::string GetVersion() const;
+ std::string GetCodename() const;
+ std::string GetSuite() const;
+ std::string GetReleaseNotes() const;
+ signed short GetDefaultPin() const;
+ bool GetSupportsAcquireByHash() const;
+ time_t GetValidUntil() const;
+ time_t GetDate() const;
+ APT_HIDDEN time_t GetNotBefore() const; // FIXME make virtual
+
+ std::string GetExpectedDist() const;
+ bool CheckDist(std::string const &MaybeDist) const;
+
+ // Interface for acquire
+ virtual std::string Describe() const;
+ virtual std::string ArchiveURI(std::string const& File) const = 0;
+ virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) = 0;
+ virtual std::vector<IndexTarget> GetIndexTargets() const = 0;
+ virtual std::vector<pkgIndexFile *> *GetIndexFiles() = 0;
+ virtual bool IsTrusted() const = 0;
+ virtual bool Load(std::string const &Filename, std::string * const ErrorText) = 0;
+ /** @return a new metaIndex object based on this one, but without information from #Load */
+ virtual metaIndex * UnloadedClone() const = 0;
+ // the given metaIndex is potentially invalid after this call and should be deleted
+ void swapLoad(metaIndex * const OldMetaIndex);
+
+ // Lookup functions for parsed Hashes
+ checkSum *Lookup(std::string const &MetaKey) const;
+ /** \brief tests if a checksum for this file is available */
+ bool Exists(std::string const &MetaKey) const;
+ std::vector<std::string> MetaKeys() const;
+ TriState GetLoadedSuccessfully() const;
+
+ // Interfaces for pkgCacheGen
+ virtual pkgCache::RlsFileIterator FindInCache(pkgCache &Cache, bool const ModifyCheck) const;
+ virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
+
+
+ metaIndex(std::string const &URI, std::string const &Dist,
+ char const * const Type);
+ virtual ~metaIndex();
+
+ // FIXME: make virtual on next abi break
+ bool IsArchitectureSupported(std::string const &arch) const;
+ bool IsArchitectureAllSupportedFor(IndexTarget const &target) const;
+ bool HasSupportForComponent(std::string const &component) const;
+ // FIXME: should be members of the class on abi break
+ APT_HIDDEN void SetOrigin(std::string const &origin);
+ APT_HIDDEN void SetLabel(std::string const &label);
+ APT_HIDDEN void SetVersion(std::string const &version);
+ APT_HIDDEN void SetDefaultPin(signed short const defaultpin);
+ APT_HIDDEN void SetReleaseNotes(std::string const &notes);
+};
+
+#endif
diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc
new file mode 100644
index 0000000..20631bf
--- /dev/null
+++ b/apt-pkg/orderlist.cc
@@ -0,0 +1,1138 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Order List - Represents and Manipulates an ordered list of packages.
+
+ A list of packages can be ordered by a number of conflicting criteria
+ each given a specific priority. Each package also has a set of flags
+ indicating some useful things about it that are derived in the
+ course of sorting. The pkgPackageManager class uses this class for
+ all of it's installation ordering needs.
+
+ This is a modified version of Manoj's Routine B. It consists of four
+ independent ordering algorithms that can be applied at for different
+ points in the ordering. By applying progressivly fewer ordering
+ operations it is possible to give each consideration it's own
+ priority and create an order that satisfies the lowest applicable
+ consideration.
+
+ The rules for unpacking ordering are:
+ 1) Unpacking ignores Depends: on all packages
+ 2) Unpacking requires Conflicts: on -ALL- packages to be satisfied
+ 3) Unpacking requires PreDepends: on this package only to be satisfied
+ 4) Removing requires that no packages depend on the package to be
+ removed.
+
+ And the rule for configuration ordering is:
+ 1) Configuring requires that the Depends: of the package be satisfied
+ Conflicts+PreDepends are ignored because unpacking says they are
+ already correct [exageration, it does check but we need not be
+ concerned]
+
+ And some features that are valuable for unpacking ordering.
+ f1) Unpacking a new package should advoid breaking dependencies of
+ configured packages
+ f2) Removal should not require a force, corrolory of f1
+ f3) Unpacking should order by depends rather than fall back to random
+ ordering.
+
+ Each of the features can be enabled in the sorting routine at an
+ arbitrary priority to give quite abit of control over the final unpacking
+ order.
+
+ The rules listed above may never be violated and are called Critical.
+ When a critical rule is violated then a loop condition is recorded
+ and will have to be delt with in the caller.
+
+ The ordering keeps two lists, the main list and the 'After List'. The
+ purpose of the after list is to allow packages to be delayed. This is done
+ by setting the after flag on the package. Any package which requires this
+ package to be ordered before will inherit the after flag and so on. This
+ is used for CD swap ordering where all packages on a second CD have the
+ after flag set. This forces them and all their dependents to be ordered
+ toward the end.
+
+ There are complications in this algorithm when presented with cycles.
+ For all known practical cases it works, all cases where it doesn't work
+ is fixable by tweaking the package descriptions. However, it should be
+ possible to improve this further to make some better choices when
+ presented with cycles.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/orderlist.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <algorithm>
+#include <iostream>
+#include <stdlib.h>
+#include <string.h>
+ /*}}}*/
+
+using namespace std;
+
+// OrderList::pkgOrderList - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgOrderList::pkgOrderList(pkgDepCache *pCache) : d(NULL), Cache(*pCache),
+ Primary(NULL), Secondary(NULL),
+ RevDepends(NULL), Remove(NULL),
+ AfterEnd(NULL), FileList(NULL),
+ LoopCount(-1), Depth(0)
+{
+ Debug = _config->FindB("Debug::pkgOrderList",false);
+
+ /* Construct the arrays, egcs 1.0.1 bug requires the package count
+ hack */
+ auto const Size = Cache.Head().PackageCount;
+ Flags = new unsigned short[Size];
+ End = List = new Package *[Size];
+ memset(Flags,0,sizeof(*Flags)*Size);
+}
+ /*}}}*/
+// OrderList::~pkgOrderList - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgOrderList::~pkgOrderList()
+{
+ delete [] List;
+ delete [] Flags;
+}
+ /*}}}*/
+// OrderList::IsMissing - Check if a file is missing /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgOrderList::IsMissing(PkgIterator Pkg)
+{
+ // Skip packages to erase
+ if (Cache[Pkg].Delete() == true)
+ return false;
+
+ // Skip Packages that need configure only.
+ if ((Pkg.State() == pkgCache::PkgIterator::NeedsConfigure ||
+ Pkg.State() == pkgCache::PkgIterator::NeedsNothing) &&
+ Cache[Pkg].Keep() == true)
+ return false;
+
+ if (FileList == 0)
+ return false;
+
+ if (FileList[Pkg->ID].empty() == false)
+ return false;
+
+ return true;
+}
+ /*}}}*/
+// OrderList::DoRun - Does an order run /*{{{*/
+// ---------------------------------------------------------------------
+/* The caller is expected to have setup the desired probe state */
+bool pkgOrderList::DoRun()
+{
+ // Temp list
+ unsigned long Size = Cache.Head().PackageCount;
+ std::unique_ptr<Package *[]> NList(new Package *[Size]);
+ std::unique_ptr<Package *[]> AfterList(new Package *[Size]);
+ AfterEnd = AfterList.get();
+
+ Depth = 0;
+ WipeFlags(Added | AddPending | Loop | InList);
+
+ for (iterator I = List; I != End; ++I)
+ Flag(*I,InList);
+
+ // Rebuild the main list into the temp list.
+ iterator OldEnd = End;
+ End = NList.get();
+ for (iterator I = List; I != OldEnd; ++I)
+ if (VisitNode(PkgIterator(Cache,*I), "DoRun") == false)
+ {
+ End = OldEnd;
+ return false;
+ }
+
+ // Copy the after list to the end of the main list
+ for (Package **I = AfterList.get(); I != AfterEnd; I++)
+ *End++ = *I;
+
+ // Swap the main list to the new list
+ delete [] List;
+ List = NList.release();
+ return true;
+}
+ /*}}}*/
+// OrderList::OrderCritical - Perform critical unpacking ordering /*{{{*/
+// ---------------------------------------------------------------------
+/* This performs predepends and immediate configuration ordering only.
+ This is termed critical unpacking ordering. Any loops that form are
+ fatal and indicate that the packages cannot be installed. */
+bool pkgOrderList::OrderCritical()
+{
+ FileList = 0;
+
+ Primary = &pkgOrderList::DepUnPackPreD;
+ Secondary = 0;
+ RevDepends = 0;
+ Remove = 0;
+ LoopCount = 0;
+
+ // Sort
+ std::sort(List,End, [this](Package *a, Package *b) { return OrderCompareB(a, b) < 0; } );
+
+ if (DoRun() == false)
+ return false;
+
+ if (LoopCount != 0)
+ return _error->Error("Fatal, predepends looping detected");
+
+ if (Debug == true)
+ {
+ clog << "** Critical Unpack ordering done" << endl;
+
+ for (iterator I = List; I != End; ++I)
+ {
+ PkgIterator P(Cache,*I);
+ if (IsNow(P) == true)
+ clog << " " << P.FullName() << ' ' << IsMissing(P) << ',' << IsFlag(P,After) << endl;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// OrderList::OrderUnpack - Perform complete unpacking ordering /*{{{*/
+// ---------------------------------------------------------------------
+/* This performs complete unpacking ordering and creates an order that is
+ suitable for unpacking */
+bool pkgOrderList::OrderUnpack(string *FileList)
+{
+ this->FileList = FileList;
+
+ // Setup the after flags
+ if (FileList != 0)
+ {
+ WipeFlags(After);
+
+ // Set the inlist flag
+ for (iterator I = List; I != End; ++I)
+ {
+ PkgIterator P(Cache,*I);
+ if (IsMissing(P) == true && IsNow(P) == true)
+ Flag(*I,After);
+ }
+ }
+
+ Primary = &pkgOrderList::DepUnPackCrit;
+ Secondary = &pkgOrderList::DepConfigure;
+ RevDepends = &pkgOrderList::DepUnPackDep;
+ Remove = &pkgOrderList::DepRemove;
+ LoopCount = -1;
+
+ // Sort
+ std::sort(List,End, [this](Package *a, Package *b) { return OrderCompareA(a, b) < 0; });
+
+ if (Debug == true)
+ clog << "** Pass A" << endl;
+ if (DoRun() == false)
+ return false;
+
+ if (Debug == true)
+ clog << "** Pass B" << endl;
+ Secondary = 0;
+ if (DoRun() == false)
+ return false;
+
+ if (Debug == true)
+ clog << "** Pass C" << endl;
+ LoopCount = 0;
+ RevDepends = 0;
+ Remove = 0; // Otherwise the libreadline remove problem occurs
+ if (DoRun() == false)
+ return false;
+
+ if (Debug == true)
+ clog << "** Pass D" << endl;
+ LoopCount = 0;
+ Primary = &pkgOrderList::DepUnPackPre;
+ if (DoRun() == false)
+ return false;
+
+ if (Debug == true)
+ {
+ clog << "** Unpack ordering done" << endl;
+
+ for (iterator I = List; I != End; ++I)
+ {
+ PkgIterator P(Cache,*I);
+ if (IsNow(P) == true)
+ clog << " " << P.FullName() << ' ' << IsMissing(P) << ',' << IsFlag(P,After) << endl;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// OrderList::OrderConfigure - Perform configuration ordering /*{{{*/
+// ---------------------------------------------------------------------
+/* This orders by depends only and produces an order which is suitable
+ for configuration */
+bool pkgOrderList::OrderConfigure()
+{
+ FileList = 0;
+ Primary = &pkgOrderList::DepConfigure;
+ Secondary = 0;
+ RevDepends = 0;
+ Remove = 0;
+ LoopCount = -1;
+ return DoRun();
+}
+ /*}}}*/
+// OrderList::Score - Score the package for sorting /*{{{*/
+// ---------------------------------------------------------------------
+/* Higher scores order earlier */
+int pkgOrderList::Score(PkgIterator Pkg)
+{
+ // Removals should be done after we dealt with essentials
+ static int const ScoreDelete = _config->FindI("OrderList::Score::Delete", 100);
+ if (Cache[Pkg].Delete() == true)
+ return ScoreDelete;
+
+ // This should never happen..
+ if (Cache[Pkg].InstVerIter(Cache).end() == true)
+ return -1;
+
+ static int const ScoreEssential = _config->FindI("OrderList::Score::Essential", 200);
+ static int const ScoreImmediate = _config->FindI("OrderList::Score::Immediate", 10);
+ static int const ScorePreDepends = _config->FindI("OrderList::Score::PreDepends", 50);
+
+ int Score = 0;
+ if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ Score += ScoreEssential;
+
+ if (IsFlag(Pkg,Immediate) == true)
+ Score += ScoreImmediate;
+
+ for (DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList();
+ D.end() == false; ++D)
+ if (D->Type == pkgCache::Dep::PreDepends)
+ {
+ Score += ScorePreDepends;
+ break;
+ }
+
+ // Required Important Standard Optional Extra
+ if (Cache[Pkg].InstVerIter(Cache)->Priority <= 5)
+ {
+ signed short PrioMap[] = {0,5,4,3,1,0};
+ Score += PrioMap[Cache[Pkg].InstVerIter(Cache)->Priority];
+ }
+ return Score;
+}
+ /*}}}*/
+// OrderList::FileCmp - Compare by package file /*{{{*/
+// ---------------------------------------------------------------------
+/* This compares by the package file that the install version is in. */
+int pkgOrderList::FileCmp(PkgIterator A,PkgIterator B)
+{
+ if (Cache[A].Delete() == true && Cache[B].Delete() == true)
+ return 0;
+ if (Cache[A].Delete() == true)
+ return -1;
+ if (Cache[B].Delete() == true)
+ return 1;
+
+ if (Cache[A].InstVerIter(Cache).FileList().end() == true)
+ return -1;
+ if (Cache[B].InstVerIter(Cache).FileList().end() == true)
+ return 1;
+
+ pkgCache::PackageFile *FA = Cache[A].InstVerIter(Cache).FileList().File();
+ pkgCache::PackageFile *FB = Cache[B].InstVerIter(Cache).FileList().File();
+ if (FA < FB)
+ return -1;
+ if (FA > FB)
+ return 1;
+ return 0;
+}
+ /*}}}*/
+// BoolCompare - Comparison function for two booleans /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static int BoolCompare(bool A,bool B)
+{
+ if (A == B)
+ return 0;
+ if (A == false)
+ return -1;
+ return 1;
+}
+ /*}}}*/
+// OrderList::OrderCompareA - Order the installation by op /*{{{*/
+// ---------------------------------------------------------------------
+/* This provides a first-pass sort of the list and gives a decent starting
+ point for further complete ordering. It is used by OrderUnpack only */
+int pkgOrderList::OrderCompareA(Package *a, Package *b)
+{
+ PkgIterator A(Cache,a);
+ PkgIterator B(Cache,b);
+
+ // We order packages with a set state toward the front
+ int Res;
+ if ((Res = BoolCompare(IsNow(A),IsNow(B))) != 0)
+ return -1*Res;
+
+ // We order missing files to toward the end
+/* if (FileList != 0)
+ {
+ if ((Res = BoolCompare(IsMissing(A),
+ IsMissing(B))) != 0)
+ return Res;
+ }*/
+
+ if (A.State() != pkgCache::PkgIterator::NeedsNothing &&
+ B.State() == pkgCache::PkgIterator::NeedsNothing)
+ return -1;
+
+ if (A.State() == pkgCache::PkgIterator::NeedsNothing &&
+ B.State() != pkgCache::PkgIterator::NeedsNothing)
+ return 1;
+
+ int ScoreA = Score(A);
+ int ScoreB = Score(B);
+
+ if (ScoreA > ScoreB)
+ return -1;
+
+ if (ScoreA < ScoreB)
+ return 1;
+
+ return strcmp(A.Name(),B.Name());
+}
+ /*}}}*/
+// OrderList::OrderCompareB - Order the installation by source /*{{{*/
+// ---------------------------------------------------------------------
+/* This orders by installation source. This is useful to handle
+ inter-source breaks */
+int pkgOrderList::OrderCompareB(Package *a, Package *b)
+{
+ PkgIterator A(Cache,a);
+ PkgIterator B(Cache,b);
+
+ if (A.State() != pkgCache::PkgIterator::NeedsNothing &&
+ B.State() == pkgCache::PkgIterator::NeedsNothing)
+ return -1;
+
+ if (A.State() == pkgCache::PkgIterator::NeedsNothing &&
+ B.State() != pkgCache::PkgIterator::NeedsNothing)
+ return 1;
+
+ int F = FileCmp(A,B);
+ if (F != 0)
+ {
+ if (F > 0)
+ return -1;
+ return 1;
+ }
+
+ int ScoreA = Score(A);
+ int ScoreB = Score(B);
+
+ if (ScoreA > ScoreB)
+ return -1;
+
+ if (ScoreA < ScoreB)
+ return 1;
+
+ return strcmp(A.Name(),B.Name());
+}
+ /*}}}*/
+// OrderList::VisitDeps - Visit forward install dependencies /*{{{*/
+// ---------------------------------------------------------------------
+/* This calls the dependency function for the normal forwards dependencies
+ of the package */
+bool pkgOrderList::VisitDeps(DepFunc F,PkgIterator Pkg)
+{
+ if (F == 0 || Pkg.end() == true || Cache[Pkg].InstallVer == 0)
+ return true;
+
+ return (this->*F)(Cache[Pkg].InstVerIter(Cache).DependsList());
+}
+ /*}}}*/
+// OrderList::VisitRDeps - Visit reverse dependencies /*{{{*/
+// ---------------------------------------------------------------------
+/* This calls the dependency function for all of the normal reverse depends
+ of the package */
+bool pkgOrderList::VisitRDeps(DepFunc F,PkgIterator Pkg)
+{
+ if (F == 0 || Pkg.end() == true)
+ return true;
+
+ return (this->*F)(Pkg.RevDependsList());
+}
+ /*}}}*/
+// OrderList::VisitRProvides - Visit provides reverse dependencies /*{{{*/
+// ---------------------------------------------------------------------
+/* This calls the dependency function for all reverse dependencies
+ generated by the provides line on the package. */
+bool pkgOrderList::VisitRProvides(DepFunc F,VerIterator Ver)
+{
+ if (F == 0 || Ver.end() == true)
+ return true;
+
+ bool Res = true;
+ for (PrvIterator P = Ver.ProvidesList(); P.end() == false; ++P)
+ Res &= (this->*F)(P.ParentPkg().RevDependsList());
+ return Res;
+}
+ /*}}}*/
+// OrderList::VisitProvides - Visit all of the providing packages /*{{{*/
+// ---------------------------------------------------------------------
+/* This routine calls visit on all providing packages.
+
+ If the dependency is negative it first visits packages which are
+ intended to be removed and after that all other packages.
+ It does so to avoid situations in which this package is used to
+ satisfy a (or-group/provides) dependency of another package which
+ could have been satisfied also by upgrading another package -
+ otherwise we have more broken packages dpkg needs to auto-
+ deconfigure and in very complicated situations it even decides
+ against it! */
+bool pkgOrderList::VisitProvides(DepIterator D,bool Critical)
+{
+ std::unique_ptr<Version *[]> List(D.AllTargets());
+ for (Version **I = List.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator Pkg = Ver.ParentPkg();
+
+ if (D.IsNegative() == true && Cache[Pkg].Delete() == false)
+ continue;
+
+ if (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)
+ continue;
+
+ if (D.IsNegative() == false &&
+ Cache[Pkg].InstallVer != *I)
+ continue;
+
+ if (D.IsNegative() == true &&
+ (Version *)Pkg.CurrentVer() != *I)
+ continue;
+
+ // Skip over missing files
+ if (Critical == false && IsMissing(D.ParentPkg()) == true)
+ continue;
+
+ if (VisitNode(Pkg, "Provides-1") == false)
+ return false;
+ }
+ if (D.IsNegative() == false)
+ return true;
+ for (Version **I = List.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator Pkg = Ver.ParentPkg();
+
+ if (Cache[Pkg].Delete() == true)
+ continue;
+
+ if (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)
+ continue;
+
+ if ((Version *)Pkg.CurrentVer() != *I)
+ continue;
+
+ // Skip over missing files
+ if (Critical == false && IsMissing(D.ParentPkg()) == true)
+ continue;
+
+ if (VisitNode(Pkg, "Provides-2") == false)
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
+// OrderList::VisitNode - Recursive ordering director /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the core ordering routine. It calls the set dependency
+ consideration functions which then potentially call this again. Finite
+ depth is achieved through the colouring mechinism. */
+bool pkgOrderList::VisitNode(PkgIterator Pkg, char const* from)
+{
+ // Looping or irrelevant.
+ // This should probably trancend not installed packages
+ if (Pkg.end() == true || IsFlag(Pkg,Added) == true ||
+ IsFlag(Pkg,AddPending) == true || IsFlag(Pkg,InList) == false)
+ return true;
+
+ if (Debug == true)
+ {
+ for (int j = 0; j != Depth; j++) clog << ' ';
+ clog << "Visit " << Pkg.FullName() << " from " << from << endl;
+ }
+
+ Depth++;
+
+ // Color grey
+ Flag(Pkg,AddPending);
+
+ DepFunc Old = Primary;
+
+ // Perform immediate configuration of the package if so flagged.
+ if (IsFlag(Pkg,Immediate) == true && Primary != &pkgOrderList::DepUnPackPre)
+ Primary = &pkgOrderList::DepUnPackPreD;
+
+ if (IsNow(Pkg) == true)
+ {
+ bool Res = true;
+ if (Cache[Pkg].Delete() == false)
+ {
+ // Primary
+ Res &= Res && VisitDeps(Primary,Pkg);
+ Res &= Res && VisitRDeps(Primary,Pkg);
+ Res &= Res && VisitRProvides(Primary,Pkg.CurrentVer());
+ Res &= Res && VisitRProvides(Primary,Cache[Pkg].InstVerIter(Cache));
+
+ // RevDep
+ Res &= Res && VisitRDeps(RevDepends,Pkg);
+ Res &= Res && VisitRProvides(RevDepends,Pkg.CurrentVer());
+ Res &= Res && VisitRProvides(RevDepends,Cache[Pkg].InstVerIter(Cache));
+
+ // Secondary
+ Res &= Res && VisitDeps(Secondary,Pkg);
+ Res &= Res && VisitRDeps(Secondary,Pkg);
+ Res &= Res && VisitRProvides(Secondary,Pkg.CurrentVer());
+ Res &= Res && VisitRProvides(Secondary,Cache[Pkg].InstVerIter(Cache));
+ }
+ else
+ {
+ // RevDep
+ Res &= Res && VisitRDeps(Remove,Pkg);
+ Res &= Res && VisitRProvides(Remove,Pkg.CurrentVer());
+ }
+ }
+
+ if (IsFlag(Pkg,Added) == false)
+ {
+ Flag(Pkg,Added,Added | AddPending);
+ if (IsFlag(Pkg,After) == true)
+ *AfterEnd++ = Pkg;
+ else
+ *End++ = Pkg;
+ }
+
+ Primary = Old;
+ Depth--;
+
+ if (Debug == true)
+ {
+ for (int j = 0; j != Depth; j++) clog << ' ';
+ clog << "Leave " << Pkg.FullName() << ' ' << IsFlag(Pkg,Added) << ',' << IsFlag(Pkg,AddPending) << endl;
+ }
+
+ return true;
+}
+ /*}}}*/
+// OrderList::DepUnPackCrit - Critical UnPacking ordering /*{{{*/
+// ---------------------------------------------------------------------
+/* Critical unpacking ordering strives to satisfy Conflicts: and
+ PreDepends: only. When a prdepends is encountered the Primary
+ DepFunc is changed to be DepUnPackPreD.
+
+ Loops are preprocessed and logged. */
+bool pkgOrderList::DepUnPackCrit(DepIterator D)
+{
+ for (; D.end() == false; ++D)
+ {
+ if (D.Reverse() == true)
+ {
+ /* Reverse depenanices are only interested in conflicts,
+ predepend breakage is ignored here */
+ if (D->Type != pkgCache::Dep::Conflicts &&
+ D->Type != pkgCache::Dep::Obsoletes)
+ continue;
+
+ // Duplication elimination, consider only the current version
+ if (D.ParentPkg().CurrentVer() != D.ParentVer())
+ continue;
+
+ /* For reverse dependencies we wish to check if the
+ dependency is satisfied in the install state. The
+ target package (caller) is going to be in the installed
+ state. */
+ if (CheckDep(D) == true)
+ continue;
+
+ if (VisitNode(D.ParentPkg(), "UnPackCrit") == false)
+ return false;
+ }
+ else
+ {
+ /* Forward critical dependencies MUST be correct before the
+ package can be unpacked. */
+ if (D.IsNegative() == false &&
+ D->Type != pkgCache::Dep::PreDepends)
+ continue;
+
+ /* We wish to check if the dep is okay in the now state of the
+ target package against the install state of this package. */
+ if (CheckDep(D) == true)
+ {
+ /* We want to catch predepends loops with the code below.
+ Conflicts loops that are Dep OK are ignored */
+ if (IsFlag(D.TargetPkg(),AddPending) == false ||
+ D->Type != pkgCache::Dep::PreDepends)
+ continue;
+ }
+
+ // This is the loop detection
+ if (IsFlag(D.TargetPkg(),Added) == true ||
+ IsFlag(D.TargetPkg(),AddPending) == true)
+ {
+ if (IsFlag(D.TargetPkg(),AddPending) == true)
+ AddLoop(D);
+ continue;
+ }
+
+ /* Predepends require a special ordering stage, they must have
+ all dependents installed as well */
+ DepFunc Old = Primary;
+ bool Res = false;
+ if (D->Type == pkgCache::Dep::PreDepends)
+ Primary = &pkgOrderList::DepUnPackPreD;
+ Res = VisitProvides(D,true);
+ Primary = Old;
+ if (Res == false)
+ return false;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// OrderList::DepUnPackPreD - Critical UnPacking ordering with depends /*{{{*/
+// ---------------------------------------------------------------------
+/* Critical PreDepends (also configure immediate and essential) strives to
+ ensure not only that all conflicts+predepends are met but that this
+ package will be immediately configurable when it is unpacked.
+ Loops are preprocessed and logged. */
+bool pkgOrderList::DepUnPackPreD(DepIterator D)
+{
+ if (D.Reverse() == true)
+ return DepUnPackCrit(D);
+
+ for (; D.end() == false; ++D)
+ {
+ if (D.IsCritical() == false)
+ continue;
+
+ /* We wish to check if the dep is okay in the now state of the
+ target package against the install state of this package. */
+ if (CheckDep(D) == true)
+ {
+ /* We want to catch predepends loops with the code below.
+ Conflicts loops that are Dep OK are ignored */
+ if (IsFlag(D.TargetPkg(),AddPending) == false ||
+ D->Type != pkgCache::Dep::PreDepends)
+ continue;
+ }
+
+ // This is the loop detection
+ if (IsFlag(D.TargetPkg(),Added) == true ||
+ IsFlag(D.TargetPkg(),AddPending) == true)
+ {
+ if (IsFlag(D.TargetPkg(),AddPending) == true)
+ AddLoop(D);
+ continue;
+ }
+
+ if (VisitProvides(D,true) == false)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+// OrderList::DepUnPackPre - Critical Predepends ordering /*{{{*/
+// ---------------------------------------------------------------------
+/* Critical PreDepends (also configure immediate and essential) strives to
+ ensure not only that all conflicts+predepends are met but that this
+ package will be immediately configurable when it is unpacked.
+
+ Loops are preprocessed and logged. All loops will be fatal. */
+bool pkgOrderList::DepUnPackPre(DepIterator D)
+{
+ if (D.Reverse() == true)
+ return true;
+
+ for (; D.end() == false; ++D)
+ {
+ /* Only consider the PreDepends or Depends. Depends are only
+ considered at the lowest depth or in the case of immediate
+ configure */
+ if (D->Type != pkgCache::Dep::PreDepends)
+ {
+ if (D->Type == pkgCache::Dep::Depends)
+ {
+ if (Depth == 1 && IsFlag(D.ParentPkg(),Immediate) == false)
+ continue;
+ }
+ else
+ continue;
+ }
+
+ /* We wish to check if the dep is okay in the now state of the
+ target package against the install state of this package. */
+ if (CheckDep(D) == true)
+ {
+ /* We want to catch predepends loops with the code below.
+ Conflicts loops that are Dep OK are ignored */
+ if (IsFlag(D.TargetPkg(),AddPending) == false)
+ continue;
+ }
+
+ // This is the loop detection
+ if (IsFlag(D.TargetPkg(),Added) == true ||
+ IsFlag(D.TargetPkg(),AddPending) == true)
+ {
+ if (IsFlag(D.TargetPkg(),AddPending) == true)
+ AddLoop(D);
+ continue;
+ }
+
+ if (VisitProvides(D,true) == false)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+// OrderList::DepUnPackDep - Reverse dependency considerations /*{{{*/
+// ---------------------------------------------------------------------
+/* Reverse dependencies are considered to determine if unpacking this
+ package will break any existing dependencies. If so then those
+ packages are ordered before this one so that they are in the
+ UnPacked state.
+
+ The forwards depends loop is designed to bring the packages dependents
+ close to the package. This helps reduce deconfigure time.
+
+ Loops are irrelevant to this. */
+bool pkgOrderList::DepUnPackDep(DepIterator D)
+{
+
+ for (; D.end() == false; ++D)
+ if (D.IsCritical() == true)
+ {
+ if (D.Reverse() == true)
+ {
+ /* Duplication prevention. We consider rev deps only on
+ the current version, a not installed package
+ cannot break */
+ if (D.ParentPkg()->CurrentVer == 0 ||
+ D.ParentPkg().CurrentVer() != D.ParentVer())
+ continue;
+
+ // The dep will not break so it is irrelevant.
+ if (CheckDep(D) == true)
+ continue;
+
+ // Skip over missing files
+ if (IsMissing(D.ParentPkg()) == true)
+ continue;
+
+ if (VisitNode(D.ParentPkg(), "UnPackDep-Parent") == false)
+ return false;
+ }
+ else
+ {
+ if (D->Type == pkgCache::Dep::Depends)
+ if (VisitProvides(D,false) == false)
+ return false;
+
+ if (D->Type == pkgCache::Dep::DpkgBreaks)
+ {
+ if (CheckDep(D) == true)
+ continue;
+
+ if (VisitNode(D.TargetPkg(), "UnPackDep-Target") == false)
+ return false;
+ }
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// OrderList::DepConfigure - Configuration ordering /*{{{*/
+// ---------------------------------------------------------------------
+/* Configuration only ordering orders by the Depends: line only. It
+ orders configuration so that when a package comes to be configured it's
+ dependents are configured.
+
+ Loops are ignored. Depends loop entry points are chaotic. */
+bool pkgOrderList::DepConfigure(DepIterator D)
+{
+ // Never consider reverse configuration dependencies.
+ if (D.Reverse() == true)
+ return true;
+
+ for (; D.end() == false; ++D)
+ if (D->Type == pkgCache::Dep::Depends)
+ if (VisitProvides(D,false) == false)
+ return false;
+ return true;
+}
+ /*}}}*/
+// OrderList::DepRemove - Removal ordering /*{{{*/
+// ---------------------------------------------------------------------
+/* Checks all given dependencies if they are broken by the removal of a
+ package and if so fix it by visiting another provider or or-group
+ member to ensure that the dependee keeps working which is especially
+ important for Immediate packages like e.g. those depending on an
+ awk implementation. If the dependency can't be fixed with another
+ package this means an upgrade of the package will solve the problem. */
+bool pkgOrderList::DepRemove(DepIterator Broken)
+{
+ if (Broken.Reverse() == false)
+ return true;
+
+ for (; Broken.end() == false; ++Broken)
+ {
+ if (Broken->Type != pkgCache::Dep::Depends &&
+ Broken->Type != pkgCache::Dep::PreDepends)
+ continue;
+
+ PkgIterator BrokenPkg = Broken.ParentPkg();
+ // uninstalled packages can't break via a remove
+ if (BrokenPkg->CurrentVer == 0)
+ continue;
+
+ // if its already added, we can't do anything useful
+ if (IsFlag(BrokenPkg, AddPending) == true || IsFlag(BrokenPkg, Added) == true)
+ continue;
+
+ // if the dependee is going to be removed, visit it now
+ if (Cache[BrokenPkg].Delete() == true)
+ return VisitNode(BrokenPkg, "Remove-Dependee");
+
+ // The package stays around, so find out how this is possible
+ for (DepIterator D = BrokenPkg.CurrentVer().DependsList(); D.end() == false;)
+ {
+ // only important or-groups need fixing
+ if (D->Type != pkgCache::Dep::Depends &&
+ D->Type != pkgCache::Dep::PreDepends)
+ {
+ ++D;
+ continue;
+ }
+
+ // Start is the beginning of the or-group, D is the first one after or
+ DepIterator Start = D;
+ bool foundBroken = false;
+ for (bool LastOR = true; D.end() == false && LastOR == true; ++D)
+ {
+ LastOR = (D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or;
+ if (D == Broken)
+ foundBroken = true;
+ }
+
+ // this or-group isn't the broken one: keep searching
+ if (foundBroken == false)
+ continue;
+
+ // iterate over all members of the or-group searching for a ready replacement
+ bool readyReplacement = false;
+ for (DepIterator OrMember = Start; OrMember != D && readyReplacement == false; ++OrMember)
+ {
+ Version ** Replacements = OrMember.AllTargets();
+ for (Version **R = Replacements; *R != 0; ++R)
+ {
+ VerIterator Ver(Cache,*R);
+ // only currently installed packages can be a replacement
+ PkgIterator RPkg = Ver.ParentPkg();
+ if (RPkg.CurrentVer() != Ver)
+ continue;
+
+ // packages going to be removed can't be a replacement
+ if (Cache[RPkg].Delete() == true)
+ continue;
+
+ readyReplacement = true;
+ break;
+ }
+ delete[] Replacements;
+ }
+
+ // something else is ready to take over, do nothing
+ if (readyReplacement == true)
+ continue;
+
+ // see if we can visit a replacement
+ bool visitReplacement = false;
+ for (DepIterator OrMember = Start; OrMember != D && visitReplacement == false; ++OrMember)
+ {
+ Version ** Replacements = OrMember.AllTargets();
+ for (Version **R = Replacements; *R != 0; ++R)
+ {
+ VerIterator Ver(Cache,*R);
+ // consider only versions we plan to install
+ PkgIterator RPkg = Ver.ParentPkg();
+ if (Cache[RPkg].Install() == false || Cache[RPkg].InstallVer != Ver)
+ continue;
+
+ // loops are not going to help us, so don't create them
+ if (IsFlag(RPkg, AddPending) == true)
+ continue;
+
+ if (IsMissing(RPkg) == true)
+ continue;
+
+ visitReplacement = true;
+ if (IsFlag(BrokenPkg, Immediate) == false)
+ {
+ if (VisitNode(RPkg, "Remove-Rep") == true)
+ break;
+ }
+ else
+ {
+ Flag(RPkg, Immediate);
+ if (VisitNode(RPkg, "Remove-ImmRep") == true)
+ break;
+ }
+ visitReplacement = false;
+ }
+ delete[] Replacements;
+ }
+ if (visitReplacement == true)
+ continue;
+
+ // the broken package in current version can't be fixed, so install new version
+ if (IsMissing(BrokenPkg) == true)
+ break;
+
+ if (VisitNode(BrokenPkg, "Remove-Upgrade") == false)
+ return false;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// OrderList::AddLoop - Add a loop to the loop list /*{{{*/
+// ---------------------------------------------------------------------
+/* We record the loops. This is a relic since loop breaking is done
+ genericaly as part of the safety routines. */
+bool pkgOrderList::AddLoop(DepIterator D)
+{
+ if (LoopCount < 0 || LoopCount >= 20)
+ return false;
+
+ // Skip dups
+ if (LoopCount != 0)
+ {
+ if (Loops[LoopCount - 1].ParentPkg() == D.ParentPkg() ||
+ Loops[LoopCount - 1].TargetPkg() == D.ParentPkg())
+ return true;
+ }
+
+ Loops[LoopCount++] = D;
+
+ // Mark the packages as being part of a loop.
+ //Flag(D.TargetPkg(),Loop);
+ //Flag(D.ParentPkg(),Loop);
+ /* This is currently disabled because the Loop flag is being used for
+ loop management in the package manager. Check the orderlist.h file for more info */
+ return true;
+}
+ /*}}}*/
+// OrderList::WipeFlags - Unset the given flags from all packages /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgOrderList::WipeFlags(unsigned long F)
+{
+ auto Size = Cache.Head().PackageCount;
+ for (decltype(Size) I = 0; I != Size; ++I)
+ Flags[I] &= ~F;
+}
+ /*}}}*/
+// OrderList::CheckDep - Check a dependency for truth /*{{{*/
+// ---------------------------------------------------------------------
+/* This performs a complete analysis of the dependency wrt to the
+ current add list. It returns true if after all events are
+ performed it is still true. This sort of routine can be approximated
+ by examining the DepCache, however in convoluted cases of provides
+ this fails to produce a suitable result. */
+bool pkgOrderList::CheckDep(DepIterator D)
+{
+ std::unique_ptr<Version *[]> List(D.AllTargets());
+ bool Hit = false;
+ for (Version **I = List.get(); *I != 0; I++)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator Pkg = Ver.ParentPkg();
+
+ /* The meaning of Added and AddPending is subtle. AddPending is
+ an indication that the package is looping. Because of the
+ way ordering works Added means the package will be unpacked
+ before this one and AddPending means after. It is therefore
+ correct to ignore AddPending in all cases, but that exposes
+ reverse-ordering loops which should be ignored. */
+ if (IsFlag(Pkg,Added) == true ||
+ (IsFlag(Pkg,AddPending) == true && D.Reverse() == true))
+ {
+ if (Cache[Pkg].InstallVer != *I)
+ continue;
+ }
+ else
+ if ((Version *)Pkg.CurrentVer() != *I ||
+ Pkg.State() != PkgIterator::NeedsNothing)
+ continue;
+
+ /* Conflicts requires that all versions are not present, depends
+ just needs one */
+ if (D.IsNegative() == false)
+ {
+ // ignore provides by older versions of this package
+ if (((D.Reverse() == false && Pkg == D.ParentPkg()) ||
+ (D.Reverse() == true && Pkg == D.TargetPkg())) &&
+ Cache[Pkg].InstallVer != *I)
+ continue;
+
+ /* Try to find something that does not have the after flag set
+ if at all possible */
+ if (IsFlag(Pkg,After) == true)
+ {
+ Hit = true;
+ continue;
+ }
+
+ return true;
+ }
+ else
+ {
+ if (IsFlag(Pkg,After) == true)
+ Flag(D.ParentPkg(),After);
+
+ return false;
+ }
+ }
+
+ // We found a hit, but it had the after flag set
+ if (Hit == true && D->Type == pkgCache::Dep::PreDepends)
+ {
+ Flag(D.ParentPkg(),After);
+ return true;
+ }
+
+ /* Conflicts requires that all versions are not present, depends
+ just needs one */
+ if (D->Type == pkgCache::Dep::Conflicts ||
+ D->Type == pkgCache::Dep::Obsoletes)
+ return true;
+ return false;
+}
+ /*}}}*/
diff --git a/apt-pkg/orderlist.h b/apt-pkg/orderlist.h
new file mode 100644
index 0000000..3fa0234
--- /dev/null
+++ b/apt-pkg/orderlist.h
@@ -0,0 +1,127 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Order List - Represents and Manipulates an ordered list of packages.
+
+ A list of packages can be ordered by a number of conflicting criteria
+ each given a specific priority. Each package also has a set of flags
+ indicating some useful things about it that are derived in the
+ course of sorting. The pkgPackageManager class uses this class for
+ all of it's installation ordering needs.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_ORDERLIST_H
+#define PKGLIB_ORDERLIST_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+
+class pkgDepCache;
+class pkgOrderList : protected pkgCache::Namespace
+{
+ void * const d;
+ protected:
+
+ pkgDepCache &Cache;
+ typedef bool (pkgOrderList::*DepFunc)(DepIterator D);
+
+ // These are the currently selected ordering functions
+ DepFunc Primary;
+ DepFunc Secondary;
+ DepFunc RevDepends;
+ DepFunc Remove;
+
+ // State
+ Package **End;
+ Package **List;
+ Package **AfterEnd;
+ std::string *FileList;
+ DepIterator Loops[20];
+ int LoopCount;
+ int Depth;
+ unsigned short *Flags;
+ bool Debug;
+
+ // Main visit function
+ APT_DEPRECATED_MSG("Add a unique calling identifier as parameter for debugging output") bool VisitNode(PkgIterator Pkg) { return VisitNode(Pkg, "UNKNOWN"); };
+ bool VisitNode(PkgIterator Pkg, char const* from);
+ bool VisitDeps(DepFunc F,PkgIterator Pkg);
+ bool VisitRDeps(DepFunc F,PkgIterator Pkg);
+ bool VisitRProvides(DepFunc F,VerIterator Ver);
+ bool VisitProvides(DepIterator Pkg,bool Critical);
+
+ // Dependency checking functions.
+ bool DepUnPackCrit(DepIterator D);
+ bool DepUnPackPreD(DepIterator D);
+ bool DepUnPackPre(DepIterator D);
+ bool DepUnPackDep(DepIterator D);
+ bool DepConfigure(DepIterator D);
+ bool DepRemove(DepIterator D);
+
+ // Analysis helpers
+ bool AddLoop(DepIterator D);
+ bool CheckDep(DepIterator D);
+ bool DoRun();
+
+ // For pre sorting
+ int OrderCompareA(Package *a, Package *b) APT_PURE;
+ int OrderCompareB(Package *a, Package *b) APT_PURE;
+ int FileCmp(PkgIterator A,PkgIterator B) APT_PURE;
+
+ public:
+
+ typedef Package **iterator;
+
+ /* State flags
+ The Loop flag can be set on a package that is currently being processed by either SmartConfigure or
+ SmartUnPack. This allows the package manager to tell when a loop has been formed as it will try to
+ SmartUnPack or SmartConfigure a package with the Loop flag set. It will then either stop (as it knows
+ that the operation is unnecessary as its already in process), or in the case of the conflicts resolution
+ in SmartUnPack, use EarlyRemove to resolve the situation. */
+ enum Flags {Added = (1 << 0), AddPending = (1 << 1),
+ Immediate = (1 << 2), Loop = (1 << 3),
+ UnPacked = (1 << 4), Configured = (1 << 5),
+ Removed = (1 << 6), // Early Remove
+ InList = (1 << 7),
+ After = (1 << 8),
+ States = (UnPacked | Configured | Removed)};
+
+ // Flag manipulators
+ inline bool IsFlag(PkgIterator Pkg,unsigned long F) {return (Flags[Pkg->ID] & F) == F;};
+ inline bool IsFlag(Package *Pkg,unsigned long F) {return (Flags[Pkg->ID] & F) == F;};
+ void Flag(PkgIterator Pkg,unsigned long State, unsigned long F) {Flags[Pkg->ID] = (Flags[Pkg->ID] & (~F)) | State;};
+ inline void Flag(PkgIterator Pkg,unsigned long F) {Flags[Pkg->ID] |= F;};
+ inline void Flag(Package *Pkg,unsigned long F) {Flags[Pkg->ID] |= F;};
+ // RmFlag removes a flag from a package
+ inline void RmFlag(Package *Pkg,unsigned long F) {Flags[Pkg->ID] &= ~F;};
+ // IsNow will return true if the Pkg has been not been either configured or unpacked
+ inline bool IsNow(PkgIterator Pkg) {return (Flags[Pkg->ID] & (States & (~Removed))) == 0;};
+ bool IsMissing(PkgIterator Pkg) APT_PURE;
+ void WipeFlags(unsigned long F);
+ void SetFileList(std::string *FileList) {this->FileList = FileList;};
+
+ // Accessors
+ inline iterator begin() {return List;};
+ inline iterator end() {return End;};
+ inline void push_back(Package *Pkg) {*(End++) = Pkg;};
+ inline void push_back(PkgIterator Pkg) {*(End++) = Pkg;};
+ inline void pop_back() {End--;};
+ inline bool empty() {return End == List;};
+ inline unsigned int size() {return End - List;};
+
+ // Ordering modes
+ bool OrderCritical();
+ bool OrderUnpack(std::string *FileList = 0);
+ bool OrderConfigure();
+
+ int Score(PkgIterator Pkg);
+
+ explicit pkgOrderList(pkgDepCache *Cache);
+ virtual ~pkgOrderList();
+};
+
+#endif
diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc
new file mode 100644
index 0000000..156f7ad
--- /dev/null
+++ b/apt-pkg/packagemanager.cc
@@ -0,0 +1,1186 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Manager - Abstacts the package manager
+
+ More work is needed in the area of transitioning provides, ie exim
+ replacing smail. This can cause interesting side effects.
+
+ Other cases involving conflicts+replaces should be tested.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/install-progress.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/orderlist.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/prettyprinters.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/version.h>
+
+#include <iostream>
+#include <list>
+#include <string>
+#include <stddef.h>
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+bool pkgPackageManager::SigINTStop = false;
+
+// PM::PackageManager - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgPackageManager::pkgPackageManager(pkgDepCache *pCache) : Cache(*pCache),
+ List(NULL), Res(Incomplete), d(NULL)
+{
+ FileNames = new string[Cache.Head().PackageCount];
+ Debug = _config->FindB("Debug::pkgPackageManager",false);
+ NoImmConfigure = !_config->FindB("APT::Immediate-Configure",true);
+ ImmConfigureAll = _config->FindB("APT::Immediate-Configure-All",false);
+}
+ /*}}}*/
+// PM::PackageManager - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgPackageManager::~pkgPackageManager()
+{
+ delete List;
+ delete [] FileNames;
+}
+ /*}}}*/
+// PM::GetArchives - Queue the archives for download /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
+ pkgRecords *Recs)
+{
+ if (CreateOrderList() == false)
+ return false;
+
+ bool const ordering =
+ _config->FindB("PackageManager::UnpackAll",true) ?
+ List->OrderUnpack() : List->OrderCritical();
+ if (ordering == false)
+ return _error->Error("Internal ordering error");
+
+ for (pkgOrderList::iterator I = List->begin(); I != List->end(); ++I)
+ {
+ PkgIterator Pkg(Cache,*I);
+ FileNames[Pkg->ID] = string();
+
+ // Skip packages to erase
+ if (Cache[Pkg].Delete() == true)
+ continue;
+
+ // Skip Packages that need configure only.
+ if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
+ Cache[Pkg].Keep() == true)
+ continue;
+
+ // Skip already processed packages
+ if (List->IsNow(Pkg) == false)
+ continue;
+
+ new pkgAcqArchive(Owner,Sources,Recs,Cache[Pkg].InstVerIter(Cache),
+ FileNames[Pkg->ID]);
+ }
+
+ return true;
+}
+ /*}}}*/
+// PM::FixMissing - Keep all missing packages /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called to correct the installation when packages could not
+ be downloaded. */
+bool pkgPackageManager::FixMissing()
+{
+ pkgDepCache::ActionGroup group(Cache);
+ pkgProblemResolver Resolve(&Cache);
+ List->SetFileList(FileNames);
+
+ bool Bad = false;
+ for (PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (List->IsMissing(I) == false)
+ continue;
+
+ // Okay, this file is missing and we need it. Mark it for keep
+ Bad = true;
+ Cache.MarkKeep(I, false, false);
+ }
+
+ // We have to empty the list otherwise it will not have the new changes
+ delete List;
+ List = 0;
+
+ if (Bad == false)
+ return true;
+
+ // Now downgrade everything that is broken
+ return Resolve.ResolveByKeep() == true && Cache.BrokenCount() == 0;
+}
+ /*}}}*/
+// PM::ImmediateAdd - Add the immediate flag recursively /*{{{*/
+// ---------------------------------------------------------------------
+/* This adds the immediate flag to the pkg and recursively to the
+ dependencies
+ */
+void pkgPackageManager::ImmediateAdd(PkgIterator I, bool UseInstallVer, unsigned const int &Depth)
+{
+ DepIterator D;
+
+ if(UseInstallVer)
+ {
+ if(Cache[I].InstallVer == 0)
+ return;
+ D = Cache[I].InstVerIter(Cache).DependsList();
+ } else {
+ if (I->CurrentVer == 0)
+ return;
+ D = I.CurrentVer().DependsList();
+ }
+
+ for ( /* nothing */ ; D.end() == false; ++D)
+ if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
+ {
+ if(!List->IsFlag(D.TargetPkg(), pkgOrderList::Immediate))
+ {
+ if(Debug)
+ clog << OutputInDepth(Depth) << "ImmediateAdd(): Adding Immediate flag to " << APT::PrettyPkg(&Cache, D.TargetPkg()) << " cause of " << D.DepType() << " " << I.FullName() << endl;
+ List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
+ ImmediateAdd(D.TargetPkg(), UseInstallVer, Depth + 1);
+ }
+ }
+ return;
+}
+ /*}}}*/
+// PM::CreateOrderList - Create the ordering class /*{{{*/
+// ---------------------------------------------------------------------
+/* This populates the ordering list with all the packages that are
+ going to change. */
+bool pkgPackageManager::CreateOrderList()
+{
+ if (List != 0)
+ return true;
+
+ delete List;
+ List = new pkgOrderList(&Cache);
+
+ if (Debug && ImmConfigureAll)
+ clog << "CreateOrderList(): Adding Immediate flag for all packages because of APT::Immediate-Configure-All" << endl;
+
+ // Generate the list of affected packages and sort it
+ for (PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ // Ignore no-version packages
+ if (I->VersionList == 0)
+ continue;
+
+ // Mark the package and its dependents for immediate configuration
+ if ((((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential) &&
+ NoImmConfigure == false) || ImmConfigureAll)
+ {
+ if(Debug && !ImmConfigureAll)
+ clog << "CreateOrderList(): Adding Immediate flag for " << I.FullName() << endl;
+ List->Flag(I,pkgOrderList::Immediate);
+
+ if (!ImmConfigureAll) {
+ // Look for other install packages to make immediate configurea
+ ImmediateAdd(I, true);
+
+ // And again with the current version.
+ ImmediateAdd(I, false);
+ }
+ }
+
+ // Not interesting
+ if ((Cache[I].Keep() == true ||
+ Cache[I].InstVerIter(Cache) == I.CurrentVer()) &&
+ I.State() == pkgCache::PkgIterator::NeedsNothing &&
+ (Cache[I].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall &&
+ (I.Purge() != false || Cache[I].Mode != pkgDepCache::ModeDelete ||
+ (Cache[I].iFlags & pkgDepCache::Purge) != pkgDepCache::Purge))
+ continue;
+
+ // Append it to the list
+ List->push_back(I);
+ }
+
+ return true;
+}
+ /*}}}*/
+// PM::DepAlwaysTrue - Returns true if this dep is irrelevant /*{{{*/
+// ---------------------------------------------------------------------
+/* The restriction on provides is to eliminate the case when provides
+ are transitioning between valid states [ie exim to smail] */
+bool pkgPackageManager::DepAlwaysTrue(DepIterator D)
+{
+ if (D.TargetPkg()->ProvidesList != 0)
+ return false;
+
+ if ((Cache[D] & pkgDepCache::DepInstall) != 0 &&
+ (Cache[D] & pkgDepCache::DepNow) != 0)
+ return true;
+ return false;
+}
+ /*}}}*/
+// PM::CheckRConflicts - Look for reverse conflicts /*{{{*/
+// ---------------------------------------------------------------------
+/* This looks over the reverses for a conflicts line that needs early
+ removal. */
+bool pkgPackageManager::CheckRConflicts(PkgIterator Pkg,DepIterator D,
+ const char *Ver)
+{
+ for (;D.end() == false; ++D)
+ {
+ if (D->Type != pkgCache::Dep::Conflicts &&
+ D->Type != pkgCache::Dep::Obsoletes)
+ continue;
+
+ // The package hasn't been changed
+ if (List->IsNow(Pkg) == false)
+ continue;
+
+ // Ignore self conflicts, ignore conflicts from irrelevant versions
+ if (D.IsIgnorable(Pkg) || D.ParentVer() != D.ParentPkg().CurrentVer())
+ continue;
+
+ if (Cache.VS().CheckDep(Ver,D->CompareOp,D.TargetVer()) == false)
+ continue;
+
+ if (EarlyRemove(D.ParentPkg(), &D) == false)
+ return _error->Error("Reverse conflicts early remove for package '%s' failed",
+ Pkg.FullName().c_str());
+ }
+ return true;
+}
+ /*}}}*/
+// PM::CheckRBreaks - Look for reverse breaks /*{{{*/
+bool pkgPackageManager::CheckRBreaks(PkgIterator const &Pkg, DepIterator D,
+ const char * const Ver)
+{
+ for (;D.end() == false; ++D)
+ {
+ if (D->Type != pkgCache::Dep::DpkgBreaks)
+ continue;
+
+ PkgIterator const DP = D.ParentPkg();
+ if (Cache[DP].Delete() == false)
+ continue;
+
+ // Ignore self conflicts, ignore conflicts from irrelevant versions
+ if (D.IsIgnorable(Pkg) || D.ParentVer() != DP.CurrentVer())
+ continue;
+
+ if (Cache.VS().CheckDep(Ver, D->CompareOp, D.TargetVer()) == false)
+ continue;
+
+ // no earlyremove() here as user has already agreed to the permanent removal
+ if (SmartRemove(DP) == false)
+ return _error->Error("Internal Error, Could not early remove %s (%d)",DP.FullName().c_str(), 4);
+ }
+ return true;
+}
+ /*}}}*/
+// PM::ConfigureAll - Run the all out configuration /*{{{*/
+// ---------------------------------------------------------------------
+/* This configures every package. It is assumed they are all unpacked and
+ that the final configuration is valid. This is also used to catch packages
+ that have not been configured when using ImmConfigureAll */
+bool pkgPackageManager::ConfigureAll()
+{
+ pkgOrderList OList(&Cache);
+
+ // Populate the order list
+ for (pkgOrderList::iterator I = List->begin(); I != List->end(); ++I)
+ if (List->IsFlag(pkgCache::PkgIterator(Cache,*I),
+ pkgOrderList::UnPacked) == true)
+ OList.push_back(*I);
+
+ if (OList.OrderConfigure() == false)
+ return false;
+
+ std::string const conf = _config->Find("PackageManager::Configure", "smart");
+ bool const ConfigurePkgs = (ImmConfigureAll || conf == "all");
+
+ // Perform the configuring
+ for (pkgOrderList::iterator I = OList.begin(); I != OList.end(); ++I)
+ {
+ PkgIterator Pkg(Cache,*I);
+
+ /* Check if the package has been configured, this can happen if SmartConfigure
+ calls its self */
+ if (List->IsFlag(Pkg,pkgOrderList::Configured)) continue;
+
+ if (ConfigurePkgs == true && SmartConfigure(Pkg, 0) == false) {
+ if (ImmConfigureAll)
+ _error->Error(_("Could not perform immediate configuration on '%s'. "
+ "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.FullName().c_str(),1);
+ else
+ _error->Error("Internal error, packages left unconfigured. %s",Pkg.FullName().c_str());
+ return false;
+ }
+
+ List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States);
+ }
+
+ return true;
+}
+ /*}}}*/
+// PM::NonLoopingSmart - helper to avoid loops while calling Smart methods /*{{{*/
+// -----------------------------------------------------------------------
+/* ensures that a loop of the form A depends B, B depends A (and similar)
+ is not leading us down into infinite recursion segfault land */
+bool pkgPackageManager::NonLoopingSmart(SmartAction const action, pkgCache::PkgIterator &Pkg,
+ pkgCache::PkgIterator DepPkg, int const Depth, bool const PkgLoop,
+ bool * const Bad, bool * const Changed)
+{
+ if (PkgLoop == false)
+ List->Flag(Pkg,pkgOrderList::Loop);
+ bool success = false;
+ switch(action)
+ {
+ case UNPACK_IMMEDIATE: success = SmartUnPack(DepPkg, true, Depth + 1); break;
+ case UNPACK: success = SmartUnPack(DepPkg, false, Depth + 1); break;
+ case CONFIGURE: success = SmartConfigure(DepPkg, Depth + 1); break;
+ }
+ if (PkgLoop == false)
+ List->RmFlag(Pkg,pkgOrderList::Loop);
+
+ if (success == false)
+ return false;
+
+ if (Bad != NULL)
+ *Bad = false;
+ if (Changed != NULL && List->IsFlag(DepPkg,pkgOrderList::Loop) == false)
+ *Changed = true;
+ return true;
+}
+ /*}}}*/
+// PM::SmartConfigure - Perform immediate configuration of the pkg /*{{{*/
+// ---------------------------------------------------------------------
+/* This function tries to put the system in a state where Pkg can be configured.
+ This involves checking each of Pkg's dependencies and unpacking and
+ configuring packages where needed. */
+bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth)
+{
+ // If this is true, only check and correct and dependencies without the Loop flag
+ bool const PkgLoop = List->IsFlag(Pkg,pkgOrderList::Loop);
+
+ if (Debug) {
+ VerIterator InstallVer = VerIterator(Cache,Cache[Pkg].InstallVer);
+ clog << OutputInDepth(Depth) << "SmartConfigure " << Pkg.FullName() << " (" << InstallVer.VerStr() << ")";
+ if (PkgLoop)
+ clog << " (Only Correct Dependencies)";
+ clog << endl;
+ }
+
+ VerIterator const instVer = Cache[Pkg].InstVerIter(Cache);
+
+ /* Because of the ordered list, most dependencies should be unpacked,
+ however if there is a loop (A depends on B, B depends on A) this will not
+ be the case, so check for dependencies before configuring. */
+ bool Bad = false, Changed = false;
+ const unsigned int max_loops = _config->FindI("APT::pkgPackageManager::MaxLoopCount", 5000);
+ unsigned int i=0;
+ std::list<DepIterator> needConfigure;
+ do
+ {
+ // Check each dependency and see if anything needs to be done
+ // so that it can be configured
+ Changed = false;
+ for (DepIterator D = instVer.DependsList(); D.end() == false; )
+ {
+ // Compute a single dependency element (glob or)
+ pkgCache::DepIterator Start, End;
+ D.GlobOr(Start,End);
+
+ if (End->Type != pkgCache::Dep::Depends && End->Type != pkgCache::Dep::PreDepends)
+ continue;
+ Bad = true;
+
+ // the first pass checks if we its all good, i.e. if we have
+ // to do anything at all
+ for (DepIterator Cur = Start; true; ++Cur)
+ {
+ std::unique_ptr<Version *[]> VList(Cur.AllTargets());
+
+ for (Version **I = VList.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator DepPkg = Ver.ParentPkg();
+
+ // Check if the current version of the package is available and will satisfy this dependency
+ if (DepPkg.CurrentVer() == Ver && List->IsNow(DepPkg) == true &&
+ List->IsFlag(DepPkg,pkgOrderList::Removed) == false &&
+ DepPkg.State() == PkgIterator::NeedsNothing &&
+ (Cache[DepPkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)
+ {
+ Bad = false;
+ break;
+ }
+
+ // Check if the version that is going to be installed will satisfy the dependency
+ if (Cache[DepPkg].InstallVer != *I || List->IsNow(DepPkg) == false)
+ continue;
+
+ if (PkgLoop == true)
+ {
+ if (Debug)
+ std::clog << OutputInDepth(Depth) << "Package " << APT::PrettyPkg(&Cache, Pkg) << " loops in SmartConfigure";
+ if (List->IsFlag(DepPkg,pkgOrderList::UnPacked))
+ Bad = false;
+ else if (Debug)
+ std::clog << ", but it isn't unpacked yet";
+ if (Debug)
+ std::clog << std::endl;
+ }
+ }
+
+ if (Cur == End || Bad == false)
+ break;
+ }
+
+ // this dependency is in a good state, so we can stop
+ if (Bad == false)
+ {
+ if (Debug)
+ std::clog << OutputInDepth(Depth) << "Found ok dep " << APT::PrettyPkg(&Cache, Start.TargetPkg()) << std::endl;
+ continue;
+ }
+
+ // Check for dependencies that have not been unpacked,
+ // probably due to loops.
+ for (DepIterator Cur = Start; true; ++Cur)
+ {
+ std::unique_ptr<Version *[]> VList(Cur.AllTargets());
+
+ for (Version **I = VList.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator DepPkg = Ver.ParentPkg();
+
+ // Check if the current version of the package is available and will satisfy this dependency
+ if (DepPkg.CurrentVer() == Ver && List->IsNow(DepPkg) == true &&
+ List->IsFlag(DepPkg,pkgOrderList::Removed) == false &&
+ DepPkg.State() == PkgIterator::NeedsNothing &&
+ (Cache[DepPkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)
+ continue;
+
+ // Check if the version that is going to be installed will satisfy the dependency
+ if (Cache[DepPkg].InstallVer != *I || List->IsNow(DepPkg) == false)
+ continue;
+
+ if (PkgLoop == true)
+ {
+ if (Debug)
+ std::clog << OutputInDepth(Depth) << "Package " << APT::PrettyPkg(&Cache, Pkg) << " loops in SmartConfigure";
+ if (List->IsFlag(DepPkg,pkgOrderList::UnPacked))
+ Bad = false;
+ else if (Debug)
+ std::clog << ", but it isn't unpacked yet";
+ if (Debug)
+ std::clog << std::endl;
+ }
+ else
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Unpacking " << DepPkg.FullName() << " to avoid loop " << APT::PrettyDep(&Cache, Cur) << endl;
+ if (NonLoopingSmart(UNPACK_IMMEDIATE, Pkg, DepPkg, Depth, PkgLoop, &Bad, &Changed) == false)
+ return false;
+ }
+ // at this point we either unpacked a Dep or we are in a loop,
+ // no need to unpack a second one
+ break;
+ }
+
+ if (Cur == End || Bad == false)
+ break;
+ }
+
+ if (Bad == false)
+ continue;
+
+ needConfigure.push_back(Start);
+ }
+ if (i++ > max_loops)
+ return _error->Error("Internal error: MaxLoopCount reached in SmartUnPack (1) for %s, aborting", Pkg.FullName().c_str());
+ } while (Changed == true);
+
+ // now go over anything that needs configuring
+ Bad = false, Changed = false, i = 0;
+ do
+ {
+ Changed = false;
+ for (std::list<DepIterator>::const_iterator D = needConfigure.begin(); D != needConfigure.end(); ++D)
+ {
+ // Compute a single dependency element (glob or) without modifying D
+ pkgCache::DepIterator Start, End;
+ {
+ pkgCache::DepIterator Discard = *D;
+ Discard.GlobOr(Start,End);
+ }
+
+ if (End->Type != pkgCache::Dep::Depends && End->Type != pkgCache::Dep::PreDepends)
+ continue;
+ Bad = true;
+
+ // Search for dependencies which are unpacked but aren't configured yet (maybe loops)
+ for (DepIterator Cur = Start; true; ++Cur)
+ {
+ std::unique_ptr<Version *[]> VList(Cur.AllTargets());
+
+ for (Version **I = VList.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator DepPkg = Ver.ParentPkg();
+
+ // Check if the version that is going to be installed will satisfy the dependency
+ if (Cache[DepPkg].InstallVer != *I)
+ continue;
+
+ if (List->IsFlag(DepPkg,pkgOrderList::UnPacked))
+ {
+ if (List->IsFlag(DepPkg,pkgOrderList::Loop) && PkgLoop)
+ {
+ // This dependency has already been dealt with by another SmartConfigure on Pkg
+ Bad = false;
+ break;
+ }
+ if (Debug)
+ std::clog << OutputInDepth(Depth) << "Configure already unpacked " << APT::PrettyPkg(&Cache, DepPkg) << std::endl;
+ if (NonLoopingSmart(CONFIGURE, Pkg, DepPkg, Depth, PkgLoop, &Bad, &Changed) == false)
+ return false;
+ break;
+
+ }
+ else if (List->IsFlag(DepPkg,pkgOrderList::Configured))
+ {
+ Bad = false;
+ break;
+ }
+ }
+ if (Cur == End || Bad == false)
+ break;
+ }
+
+
+ if (Bad == true && Changed == false && Debug == true)
+ std::clog << OutputInDepth(Depth) << "Could not satisfy " << APT::PrettyDep(&Cache, *D) << std::endl;
+ }
+ if (i++ > max_loops)
+ return _error->Error("Internal error: MaxLoopCount reached in SmartUnPack (2) for %s, aborting", Pkg.FullName().c_str());
+ } while (Changed == true);
+
+ if (Bad == true)
+ return _error->Error(_("Could not configure '%s'. "),Pkg.FullName().c_str());
+
+ // Check for reverse conflicts.
+ if (CheckRBreaks(Pkg,Pkg.RevDependsList(), instVer.VerStr()) == false)
+ return false;
+
+ for (PrvIterator P = instVer.ProvidesList(); P.end() == false; ++P)
+ if (Pkg->Group != P.OwnerPkg()->Group)
+ CheckRBreaks(Pkg,P.ParentPkg().RevDependsList(),P.ProvideVersion());
+
+ if (PkgLoop) return true;
+
+ static std::string const conf = _config->Find("PackageManager::Configure", "smart");
+ static bool const ConfigurePkgs = (conf == "all" || conf == "smart");
+
+ if (List->IsFlag(Pkg,pkgOrderList::Configured))
+ return _error->Error("Internal configure error on '%s'.", Pkg.FullName().c_str());
+
+ if (ConfigurePkgs == true && Configure(Pkg) == false)
+ return false;
+
+ List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States);
+
+ if ((Cache[Pkg].InstVerIter(Cache)->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ for (PkgIterator P = Pkg.Group().PackageList();
+ P.end() == false; P = Pkg.Group().NextPkg(P))
+ {
+ if (Pkg == P || List->IsFlag(P,pkgOrderList::Configured) == true ||
+ List->IsFlag(P,pkgOrderList::UnPacked) == false ||
+ Cache[P].InstallVer == 0 || (P.CurrentVer() == Cache[P].InstallVer &&
+ (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall))
+ continue;
+ if (SmartConfigure(P, (Depth +1)) == false)
+ return false;
+ }
+
+ // Sanity Check
+ if (List->IsFlag(Pkg,pkgOrderList::Configured) == false)
+ return _error->Error(_("Could not configure '%s'. "),Pkg.FullName().c_str());
+
+ return true;
+}
+ /*}}}*/
+// PM::EarlyRemove - Perform removal of packages before their time /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called to deal with conflicts arising from unpacking */
+bool pkgPackageManager::EarlyRemove(PkgIterator Pkg)
+{
+ return EarlyRemove(Pkg, NULL);
+}
+bool pkgPackageManager::EarlyRemove(PkgIterator Pkg, DepIterator const * const Dep)
+{
+ if (List->IsNow(Pkg) == false)
+ return true;
+
+ // Already removed it
+ if (List->IsFlag(Pkg,pkgOrderList::Removed) == true)
+ return true;
+
+ // Woops, it will not be re-installed!
+ if (List->IsFlag(Pkg,pkgOrderList::InList) == false)
+ return false;
+
+ // these breaks on M-A:same packages can be dealt with. They 'loop' by design
+ if (Dep != NULL && (*Dep)->Type == pkgCache::Dep::DpkgBreaks && Dep->IsMultiArchImplicit() == true)
+ return true;
+
+ // Essential packages get special treatment
+ bool IsEssential = false;
+ if ((Pkg->Flags & pkgCache::Flag::Essential) != 0 ||
+ (Pkg->Flags & pkgCache::Flag::Important) != 0)
+ IsEssential = true;
+
+ /* Check for packages that are the dependents of essential packages and
+ promote them too */
+ if (Pkg->CurrentVer != 0)
+ {
+ for (pkgCache::DepIterator D = Pkg.RevDependsList(); D.end() == false &&
+ IsEssential == false; ++D)
+ if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
+ if ((D.ParentPkg()->Flags & pkgCache::Flag::Essential) != 0 ||
+ (D.ParentPkg()->Flags & pkgCache::Flag::Important) != 0)
+ IsEssential = true;
+ }
+
+ if (IsEssential == true)
+ {
+ if (_config->FindB("APT::Force-LoopBreak",false) == false)
+ return _error->Error(_("This installation run will require temporarily "
+ "removing the essential package %s due to a "
+ "Conflicts/Pre-Depends loop. This is often bad, "
+ "but if you really want to do it, activate the "
+ "APT::Force-LoopBreak option."),Pkg.FullName().c_str());
+ }
+ // dpkg will auto-deconfigure it, no need for the big remove hammer
+ else if (Dep != NULL && (*Dep)->Type == pkgCache::Dep::DpkgBreaks)
+ return true;
+
+ bool Res = SmartRemove(Pkg);
+ if (Cache[Pkg].Delete() == false)
+ List->Flag(Pkg,pkgOrderList::Removed,pkgOrderList::States);
+
+ return Res;
+}
+ /*}}}*/
+// PM::SmartRemove - Removal Helper /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgPackageManager::SmartRemove(PkgIterator Pkg)
+{
+ if (List->IsNow(Pkg) == false)
+ return true;
+
+ List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States);
+
+ return Remove(Pkg,(Cache[Pkg].iFlags & pkgDepCache::Purge) == pkgDepCache::Purge);
+}
+ /*}}}*/
+// PM::SmartUnPack - Install helper /*{{{*/
+// ---------------------------------------------------------------------
+/* This puts the system in a state where it can Unpack Pkg, if Pkg is already
+ unpacked, or when it has been unpacked, if Immediate==true it configures it. */
+bool pkgPackageManager::SmartUnPack(PkgIterator Pkg)
+{
+ return SmartUnPack(Pkg, true, 0);
+}
+bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int const Depth)
+{
+ bool PkgLoop = List->IsFlag(Pkg,pkgOrderList::Loop);
+
+ if (Debug) {
+ clog << OutputInDepth(Depth) << "SmartUnPack " << Pkg.FullName();
+ VerIterator InstallVer = VerIterator(Cache,Cache[Pkg].InstallVer);
+ if (Pkg.CurrentVer() == 0)
+ clog << " (install version " << InstallVer.VerStr() << ")";
+ else
+ clog << " (replace version " << Pkg.CurrentVer().VerStr() << " with " << InstallVer.VerStr() << ")";
+ if (PkgLoop)
+ clog << " (Only Perform PreUnpack Checks)";
+ if (Immediate)
+ clog << " immediately";
+ clog << endl;
+ }
+
+ VerIterator const instVer = Cache[Pkg].InstVerIter(Cache);
+
+ /* PreUnpack Checks: This loop checks and attempts to rectify any problems that would prevent the package being unpacked.
+ It addresses: PreDepends, Conflicts, Obsoletes and Breaks (DpkgBreaks). Any resolutions that do not require it should
+ avoid configuration (calling SmartUnpack with Immediate=true), this is because when unpacking some packages with
+ complex dependency structures, trying to configure some packages while breaking the loops can complicate things.
+ This will be either dealt with if the package is configured as a dependency of Pkg (if and when Pkg is configured),
+ or by the ConfigureAll call at the end of the for loop in OrderInstall. */
+ bool SomethingBad = false, Changed = false;
+ bool couldBeTemporaryRemoved = Depth != 0 && List->IsFlag(Pkg,pkgOrderList::Removed) == false;
+ const unsigned int max_loops = _config->FindI("APT::pkgPackageManager::MaxLoopCount", 5000);
+ unsigned int i = 0;
+ do
+ {
+ Changed = false;
+ for (DepIterator D = instVer.DependsList(); D.end() == false; )
+ {
+ // Compute a single dependency element (glob or)
+ pkgCache::DepIterator Start, End;
+ D.GlobOr(Start,End);
+
+ if (End->Type == pkgCache::Dep::PreDepends)
+ {
+ bool Bad = true;
+ if (Debug)
+ clog << OutputInDepth(Depth) << "PreDepends order for " << Pkg.FullName() << std::endl;
+
+ // Look for easy targets: packages that are already okay
+ for (DepIterator Cur = Start; Bad == true; ++Cur)
+ {
+ std::unique_ptr<Version *[]> VList(Cur.AllTargets());
+ for (Version **I = VList.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator Pkg = Ver.ParentPkg();
+
+ // See if the current version is ok
+ if (Pkg.CurrentVer() == Ver && List->IsNow(Pkg) == true &&
+ Pkg.State() == PkgIterator::NeedsNothing &&
+ (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)
+ {
+ Bad = false;
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Found ok package " << Pkg.FullName() << endl;
+ break;
+ }
+ }
+ if (Cur == End)
+ break;
+ }
+
+ // Look for something that could be configured.
+ for (DepIterator Cur = Start; Bad == true && Cur.end() == false; ++Cur)
+ {
+ std::unique_ptr<Version *[]> VList(Cur.AllTargets());
+ for (Version **I = VList.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator DepPkg = Ver.ParentPkg();
+
+ // Not the install version
+ if (Cache[DepPkg].InstallVer != *I)
+ continue;
+
+ if (Cache[DepPkg].Keep() == true && DepPkg.State() == PkgIterator::NeedsNothing &&
+ (Cache[DepPkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)
+ continue;
+
+ if (List->IsFlag(DepPkg,pkgOrderList::Configured))
+ {
+ Bad = false;
+ break;
+ }
+
+ // check if it needs unpack or if configure is enough
+ if (List->IsFlag(DepPkg,pkgOrderList::UnPacked) == false)
+ {
+ // two packages pre-depending on each other can't be handled sanely
+ if (List->IsFlag(DepPkg,pkgOrderList::Loop) && PkgLoop)
+ {
+ // this isn't an error as there is potential for something else to satisfy it
+ // (like a provides or an or-group member)
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Unpack loop detected between " << DepPkg.FullName() << " and " << Pkg.FullName() << endl;
+ continue;
+ }
+
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Trying to SmartUnpack " << DepPkg.FullName() << endl;
+ if (NonLoopingSmart(UNPACK_IMMEDIATE, Pkg, DepPkg, Depth, PkgLoop, &Bad, &Changed) == false)
+ return false;
+ }
+ else
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Trying to SmartConfigure " << DepPkg.FullName() << endl;
+ if (NonLoopingSmart(CONFIGURE, Pkg, DepPkg, Depth, PkgLoop, &Bad, &Changed) == false)
+ return false;
+ }
+ break;
+ }
+ }
+
+ if (Bad == true)
+ SomethingBad = true;
+ }
+ else if (End->Type == pkgCache::Dep::Conflicts ||
+ End->Type == pkgCache::Dep::Obsoletes ||
+ End->Type == pkgCache::Dep::DpkgBreaks)
+ {
+ std::unique_ptr<Version *[]> VList(End.AllTargets());
+ for (Version **I = VList.get(); *I != 0; ++I)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator ConflictPkg = Ver.ParentPkg();
+ if (ConflictPkg.CurrentVer() != Ver)
+ {
+ if (Debug)
+ std::clog << OutputInDepth(Depth) << "Ignore not-installed version " << Ver.VerStr() << " of " << ConflictPkg.FullName() << " for " << APT::PrettyDep(&Cache, End) << std::endl;
+ continue;
+ }
+
+ if (List->IsNow(ConflictPkg) == false)
+ {
+ if (Debug)
+ std::clog << OutputInDepth(Depth) << "Ignore already dealt-with version " << Ver.VerStr() << " of " << ConflictPkg.FullName() << " for " << APT::PrettyDep(&Cache, End) << std::endl;
+ continue;
+ }
+
+ if (List->IsFlag(ConflictPkg,pkgOrderList::Removed) == true)
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Ignoring " << APT::PrettyDep(&Cache, End) << " as " << ConflictPkg.FullName() << "was temporarily removed" << endl;
+ continue;
+ }
+
+ if (List->IsFlag(ConflictPkg,pkgOrderList::Loop) && PkgLoop)
+ {
+ if (End->Type == pkgCache::Dep::DpkgBreaks && End.IsMultiArchImplicit() == true)
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Because dependency is MultiArchImplicit we ignored looping on: " << APT::PrettyPkg(&Cache, ConflictPkg) << endl;
+ continue;
+ }
+ if (Debug)
+ {
+ if (End->Type == pkgCache::Dep::DpkgBreaks)
+ clog << OutputInDepth(Depth) << "Because of breaks knot, deconfigure " << ConflictPkg.FullName() << " temporarily" << endl;
+ else
+ clog << OutputInDepth(Depth) << "Because of conflict knot, removing " << ConflictPkg.FullName() << " temporarily" << endl;
+ }
+ if (EarlyRemove(ConflictPkg, &End) == false)
+ return _error->Error("Internal Error, Could not early remove %s (%d)",ConflictPkg.FullName().c_str(), 3);
+ SomethingBad = true;
+ continue;
+ }
+
+ if (Cache[ConflictPkg].Delete() == false)
+ {
+ if (Debug)
+ {
+ clog << OutputInDepth(Depth) << "Unpacking " << ConflictPkg.FullName() << " to avoid " << APT::PrettyDep(&Cache, End);
+ if (PkgLoop == true)
+ clog << " (Looping)";
+ clog << std::endl;
+ }
+ // we would like to avoid temporary removals and all that at best via a simple unpack
+ _error->PushToStack();
+ if (NonLoopingSmart(UNPACK, Pkg, ConflictPkg, Depth, PkgLoop, NULL, &Changed) == false)
+ {
+ // but if it fails ignore this failure and look for alternative ways of solving
+ if (Debug)
+ {
+ clog << OutputInDepth(Depth) << "Avoidance unpack of " << ConflictPkg.FullName() << " failed for " << APT::PrettyDep(&Cache, End) << " ignoring:" << std::endl;
+ _error->DumpErrors(std::clog, GlobalError::DEBUG, false);
+ }
+ _error->RevertToStack();
+ // ignorance can only happen if a) one of the offenders is already gone
+ if (List->IsFlag(ConflictPkg,pkgOrderList::Removed) == true)
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "But " << ConflictPkg.FullName() << " was temporarily removed in the meantime to satisfy " << APT::PrettyDep(&Cache, End) << endl;
+ }
+ else if (List->IsFlag(Pkg,pkgOrderList::Removed) == true)
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "But " << Pkg.FullName() << " was temporarily removed in the meantime to satisfy " << APT::PrettyDep(&Cache, End) << endl;
+ }
+ // or b) we can make one go (removal or dpkg auto-deconfigure)
+ else
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "So temprorary remove/deconfigure " << ConflictPkg.FullName() << " to satisfy " << APT::PrettyDep(&Cache, End) << endl;
+ if (EarlyRemove(ConflictPkg, &End) == false)
+ return _error->Error("Internal Error, Could not early remove %s (%d)",ConflictPkg.FullName().c_str(), 2);
+ }
+ }
+ else
+ _error->MergeWithStack();
+ }
+ else
+ {
+ if (Debug)
+ clog << OutputInDepth(Depth) << "Removing " << ConflictPkg.FullName() << " now to avoid " << APT::PrettyDep(&Cache, End) << endl;
+ // no earlyremove() here as user has already agreed to the permanent removal
+ if (SmartRemove(ConflictPkg) == false)
+ return _error->Error("Internal Error, Could not early remove %s (%d)",ConflictPkg.FullName().c_str(), 1);
+ }
+ }
+ }
+ }
+ if (i++ > max_loops)
+ return _error->Error("Internal error: APT::pkgPackageManager::MaxLoopCount reached in SmartConfigure for %s, aborting", Pkg.FullName().c_str());
+ } while (Changed == true);
+
+ if (SomethingBad == true)
+ return _error->Error("Couldn't configure %s, probably a dependency cycle.", Pkg.FullName().c_str());
+
+ if (couldBeTemporaryRemoved == true && List->IsFlag(Pkg,pkgOrderList::Removed) == true)
+ {
+ if (Debug)
+ std::clog << OutputInDepth(Depth) << "Prevent unpack as " << APT::PrettyPkg(&Cache, Pkg) << " is currently temporarily removed" << std::endl;
+ return true;
+ }
+
+ // Check for reverse conflicts.
+ if (CheckRConflicts(Pkg,Pkg.RevDependsList(),
+ instVer.VerStr()) == false)
+ return false;
+
+ for (PrvIterator P = instVer.ProvidesList();
+ P.end() == false; ++P)
+ if (Pkg->Group != P.OwnerPkg()->Group)
+ CheckRConflicts(Pkg,P.ParentPkg().RevDependsList(),P.ProvideVersion());
+
+ if (PkgLoop)
+ return true;
+
+ List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
+
+ if (Immediate == true && (instVer->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ {
+ /* Do lockstep M-A:same unpacking in two phases:
+ First unpack all installed architectures, then the not installed.
+ This way we avoid that M-A: enabled packages are installed before
+ their older non-M-A enabled packages are replaced by newer versions */
+ bool const installed = Pkg->CurrentVer != 0;
+ if (installed == true &&
+ (instVer != Pkg.CurrentVer() ||
+ ((Cache[Pkg].iFlags & pkgDepCache::ReInstall) == pkgDepCache::ReInstall)) &&
+ Install(Pkg,FileNames[Pkg->ID]) == false)
+ return false;
+ for (PkgIterator P = Pkg.Group().PackageList();
+ P.end() == false; P = Pkg.Group().NextPkg(P))
+ {
+ if (P->CurrentVer == 0 || P == Pkg || List->IsFlag(P,pkgOrderList::UnPacked) == true ||
+ Cache[P].InstallVer == 0 || (P.CurrentVer() == Cache[P].InstallVer &&
+ (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall))
+ continue;
+ if (SmartUnPack(P, false, Depth + 1) == false)
+ return false;
+ }
+ if (installed == false && Install(Pkg,FileNames[Pkg->ID]) == false)
+ return false;
+ for (PkgIterator P = Pkg.Group().PackageList();
+ P.end() == false; P = Pkg.Group().NextPkg(P))
+ {
+ if (P->CurrentVer != 0 || P == Pkg || List->IsFlag(P,pkgOrderList::UnPacked) == true ||
+ List->IsFlag(P,pkgOrderList::Configured) == true ||
+ Cache[P].InstallVer == 0 || (P.CurrentVer() == Cache[P].InstallVer &&
+ (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall))
+ continue;
+ if (SmartUnPack(P, false, Depth + 1) == false)
+ return false;
+ }
+ }
+ // packages which are already unpacked don't need to be unpacked again
+ else if ((instVer != Pkg.CurrentVer() ||
+ ((Cache[Pkg].iFlags & pkgDepCache::ReInstall) == pkgDepCache::ReInstall)) &&
+ Install(Pkg,FileNames[Pkg->ID]) == false)
+ return false;
+
+ if (Immediate == true) {
+ // Perform immediate configuration of the package.
+ if (SmartConfigure(Pkg, Depth + 1) == false)
+ _error->Error(_("Could not perform immediate configuration on '%s'. "
+ "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.FullName().c_str(),2);
+ }
+
+ return true;
+}
+ /*}}}*/
+// PM::OrderInstall - Installation ordering routine /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
+{
+ if (CreateOrderList() == false)
+ return Failed;
+
+ Reset();
+
+ if (Debug == true)
+ clog << "Beginning to order" << endl;
+
+ std::string const planner = _config->Find("APT::Planner", "internal");
+ unsigned int flags = 0;
+ if (_config->FindB("APT::Immediate-Configure", true) == false)
+ flags |= EIPP::Request::NO_IMMEDIATE_CONFIGURATION;
+ else if (_config->FindB("APT::Immediate-Configure-All", false))
+ flags |= EIPP::Request::IMMEDIATE_CONFIGURATION_ALL;
+ else if (_config->FindB("APT::Force-LoopBreak", false))
+ flags |= EIPP::Request::ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS;
+ auto const ret = EIPP::OrderInstall(planner.c_str(), this, flags, nullptr);
+ if (planner != "internal")
+ return ret ? Completed : Failed;
+
+ bool const ordering =
+ _config->FindB("PackageManager::UnpackAll",true) ?
+ List->OrderUnpack(FileNames) : List->OrderCritical();
+ if (ordering == false)
+ {
+ _error->Error("Internal ordering error");
+ return Failed;
+ }
+
+ if (Debug == true)
+ clog << "Done ordering" << endl;
+
+ bool DoneSomething = false;
+ for (pkgOrderList::iterator I = List->begin(); I != List->end(); ++I)
+ {
+ PkgIterator Pkg(Cache,*I);
+
+ if (List->IsNow(Pkg) == false)
+ {
+ if (Debug == true)
+ clog << "Skipping already done " << Pkg.FullName() << endl;
+ continue;
+ }
+
+ if (List->IsMissing(Pkg) == true)
+ {
+ if (Debug == true)
+ clog << "Sequence completed at " << Pkg.FullName() << endl;
+ if (DoneSomething == false)
+ {
+ _error->Error("Internal Error, ordering was unable to handle the media swap");
+ return Failed;
+ }
+ return Incomplete;
+ }
+
+ // Sanity check
+ if (Cache[Pkg].Keep() == true &&
+ Pkg.State() == pkgCache::PkgIterator::NeedsNothing &&
+ (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)
+ {
+ _error->Error("Internal Error, trying to manipulate a kept package (%s)",Pkg.FullName().c_str());
+ return Failed;
+ }
+
+ // Perform a delete or an install
+ if (Cache[Pkg].Delete() == true)
+ {
+ if (SmartRemove(Pkg) == false)
+ return Failed;
+ }
+ else
+ if (SmartUnPack(Pkg,List->IsFlag(Pkg,pkgOrderList::Immediate),0) == false)
+ return Failed;
+ DoneSomething = true;
+
+ if (ImmConfigureAll) {
+ /* ConfigureAll here to pick up and packages left unconfigured because they were unpacked in the
+ "PreUnpack Checks" section */
+ if (!ConfigureAll())
+ return Failed;
+ }
+ }
+
+ // Final run through the configure phase
+ if (ConfigureAll() == false)
+ return Failed;
+
+ // Sanity check
+ for (pkgOrderList::iterator I = List->begin(); I != List->end(); ++I)
+ {
+ if (List->IsFlag(*I,pkgOrderList::Configured) == false)
+ {
+ _error->Error("Internal error, packages left unconfigured. %s",
+ PkgIterator(Cache,*I).FullName().c_str());
+ return Failed;
+ }
+ }
+
+ return Completed;
+}
+// PM::DoInstallPostFork - compat /*{{{*/
+// ---------------------------------------------------------------------
+ /*}}}*/
+pkgPackageManager::OrderResult
+pkgPackageManager::DoInstallPostFork(int statusFd)
+{
+ APT::Progress::PackageManager *progress = new
+ APT::Progress::PackageManagerProgressFd(statusFd);
+ pkgPackageManager::OrderResult res = DoInstallPostFork(progress);
+ delete progress;
+ return res;
+}
+ /*}}}*/
+// PM::DoInstallPostFork - Does install part that happens after the fork /*{{{*/
+// ---------------------------------------------------------------------
+pkgPackageManager::OrderResult
+pkgPackageManager::DoInstallPostFork(APT::Progress::PackageManager *progress)
+{
+ bool goResult;
+ auto simulation = dynamic_cast<pkgSimulate*>(this);
+ if (simulation == nullptr)
+ goResult = Go(progress);
+ else
+ goResult = simulation->Go2(progress);
+ if(goResult == false)
+ return Failed;
+
+ return Res;
+}
+ /*}}}*/
+// PM::DoInstall - Does the installation /*{{{*/
+// ---------------------------------------------------------------------
+/* compat */
+pkgPackageManager::OrderResult
+pkgPackageManager::DoInstall(int statusFd)
+{
+ APT::Progress::PackageManager *progress = new
+ APT::Progress::PackageManagerProgressFd(statusFd);
+ OrderResult res = DoInstall(progress);
+ delete progress;
+ return res;
+ }
+ /*}}}*/
+// PM::DoInstall - Does the installation /*{{{*/
+// ---------------------------------------------------------------------
+/* This uses the filenames in FileNames and the information in the
+ DepCache to perform the installation of packages.*/
+pkgPackageManager::OrderResult
+pkgPackageManager::DoInstall(APT::Progress::PackageManager *progress)
+{
+ if(DoInstallPreFork() == Failed)
+ return Failed;
+
+ return DoInstallPostFork(progress);
+}
+ /*}}}*/
diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h
new file mode 100644
index 0000000..d944344
--- /dev/null
+++ b/apt-pkg/packagemanager.h
@@ -0,0 +1,153 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Manager - Abstacts the package manager
+
+ Three steps are
+ - Aquiration of archives (stores the list of final file names)
+ - Sorting of operations
+ - Invocation of package manager
+
+ This is the final stage when the package cache entities get converted
+ into file names and the state stored in a DepCache is transformed
+ into a series of operations.
+
+ In the final scheme of things this may serve as a director class to
+ access the actual install methods based on the file type being
+ installed.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_PACKAGEMANAGER_H
+#define PKGLIB_PACKAGEMANAGER_H
+
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <set>
+#include <string>
+
+#ifndef APT_10_CLEANER_HEADERS
+#include <apt-pkg/install-progress.h>
+#include <iostream>
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+using std::string;
+#endif
+
+class pkgAcquire;
+class pkgDepCache;
+class pkgSourceList;
+class pkgOrderList;
+class pkgRecords;
+class OpProgress;
+class pkgPackageManager;
+namespace APT {
+ namespace Progress {
+ class PackageManager;
+ }
+}
+
+class pkgPackageManager : protected pkgCache::Namespace
+{
+ public:
+
+ enum OrderResult {Completed,Failed,Incomplete};
+ static bool SigINTStop;
+
+ protected:
+ std::string *FileNames;
+ pkgDepCache &Cache;
+ pkgOrderList *List;
+ bool Debug;
+ bool NoImmConfigure;
+ bool ImmConfigureAll;
+
+ /** \brief saves packages dpkg let disappear
+
+ This way APT can retreat from trying to configure these
+ packages later on and a front-end can choose to display a
+ notice to inform the user about these disappears.
+ */
+ std::set<std::string> disappearedPkgs;
+
+ void ImmediateAdd(PkgIterator P, bool UseInstallVer, unsigned const int &Depth = 0);
+ virtual OrderResult OrderInstall();
+ bool CheckRConflicts(PkgIterator Pkg,DepIterator Dep,const char *Ver);
+ bool CheckRBreaks(PkgIterator const &Pkg,DepIterator Dep,const char * const Ver);
+ bool CreateOrderList();
+
+ // Analysis helpers
+ bool DepAlwaysTrue(DepIterator D) APT_PURE;
+
+ // Install helpers
+ bool ConfigureAll();
+ bool SmartConfigure(PkgIterator Pkg, int const Depth) APT_MUSTCHECK;
+ //FIXME: merge on abi break
+ bool SmartUnPack(PkgIterator Pkg) APT_MUSTCHECK;
+ bool SmartUnPack(PkgIterator Pkg, bool const Immediate, int const Depth) APT_MUSTCHECK;
+ bool SmartRemove(PkgIterator Pkg) APT_MUSTCHECK;
+ bool EarlyRemove(PkgIterator Pkg, DepIterator const * const Dep) APT_MUSTCHECK;
+ APT_DEPRECATED bool EarlyRemove(PkgIterator Pkg) APT_MUSTCHECK;
+
+ // The Actual installation implementation
+ virtual bool Install(PkgIterator /*Pkg*/,std::string /*File*/) {return false;};
+ virtual bool Configure(PkgIterator /*Pkg*/) {return false;};
+ virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;};
+ virtual bool Go(APT::Progress::PackageManager * /*progress*/) {return true;};
+ APT_DEPRECATED_MSG("Use overload with explicit progress manager") virtual bool Go(int /*statusFd*/=-1) {return true;};
+
+ virtual void Reset() {};
+
+ // the result of the operation
+ OrderResult Res;
+
+ public:
+
+ // Main action members
+ bool GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
+ pkgRecords *Recs);
+
+ // Do the installation
+ OrderResult DoInstall(APT::Progress::PackageManager *progress);
+ // compat
+ APT_DEPRECATED_MSG("Use APT::Progress::PackageManager subclass instead of fd") OrderResult DoInstall(int statusFd=-1);
+
+ friend bool EIPP::OrderInstall(char const * const planner, pkgPackageManager * const PM,
+ unsigned int const version, OpProgress * const Progress);
+ friend bool EIPP::ReadResponse(int const input, pkgPackageManager * const PM,
+ OpProgress * const Progress);
+
+ // stuff that needs to be done before the fork() of a library that
+ // uses apt
+ OrderResult DoInstallPreFork() {
+ Res = OrderInstall();
+ return Res;
+ };
+ // stuff that needs to be done after the fork
+ OrderResult DoInstallPostFork(APT::Progress::PackageManager *progress);
+ // compat
+ APT_DEPRECATED_MSG("Use APT::Progress::PackageManager subclass instead of fd") OrderResult DoInstallPostFork(int statusFd=-1);
+
+ // ?
+ bool FixMissing();
+
+ /** \brief returns all packages dpkg let disappear */
+ inline std::set<std::string> GetDisappearedPackages() { return disappearedPkgs; };
+
+ explicit pkgPackageManager(pkgDepCache *Cache);
+ virtual ~pkgPackageManager();
+
+ private:
+ void * const d;
+ enum APT_HIDDEN SmartAction { UNPACK_IMMEDIATE, UNPACK, CONFIGURE };
+ APT_HIDDEN bool NonLoopingSmart(SmartAction const action, pkgCache::PkgIterator &Pkg,
+ pkgCache::PkgIterator DepPkg, int const Depth, bool const PkgLoop,
+ bool * const Bad, bool * const Changed) APT_MUSTCHECK;
+};
+
+#endif
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc
new file mode 100644
index 0000000..80dd1d1
--- /dev/null
+++ b/apt-pkg/pkgcache.cc
@@ -0,0 +1,1108 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Cache - Accessor code for the cache
+
+ Please see doc/apt-pkg/cache.sgml for a more detailed description of
+ this format. Also be sure to keep that file up-to-date!!
+
+ This is the general utility functions for cache management. They provide
+ a complete set of accessor functions for the cache. The cacheiterators
+ header contains the STL-like iterators that can be used to easially
+ navigate the cache as well as seamlessly dereference the mmap'd
+ indexes. Use these always.
+
+ The main class provides for ways to get package indexes and some
+ general lookup functions to start the iterators.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/version.h>
+
+#include <zlib.h>
+#include <algorithm>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <stddef.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using std::string;
+using APT::StringView;
+
+
+// Cache::Header::Header - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Simply initialize the header */
+pkgCache::Header::Header()
+{
+#define APT_HEADER_SET(X,Y) X = Y; static_assert(std::numeric_limits<decltype(X)>::max() > Y, "Size violation detected in pkgCache::Header")
+ APT_HEADER_SET(Signature, 0x98FE76DC);
+
+ /* Whenever the structures change the major version should be bumped,
+ whenever the generator changes the minor version should be bumped. */
+ APT_HEADER_SET(MajorVersion, 13);
+ APT_HEADER_SET(MinorVersion, 0);
+ APT_HEADER_SET(Dirty, false);
+
+ APT_HEADER_SET(HeaderSz, sizeof(pkgCache::Header));
+ APT_HEADER_SET(GroupSz, sizeof(pkgCache::Group));
+ APT_HEADER_SET(PackageSz, sizeof(pkgCache::Package));
+ APT_HEADER_SET(ReleaseFileSz, sizeof(pkgCache::ReleaseFile));
+ APT_HEADER_SET(PackageFileSz, sizeof(pkgCache::PackageFile));
+ APT_HEADER_SET(VersionSz, sizeof(pkgCache::Version));
+ APT_HEADER_SET(DescriptionSz, sizeof(pkgCache::Description));
+ APT_HEADER_SET(DependencySz, sizeof(pkgCache::Dependency));
+ APT_HEADER_SET(DependencyDataSz, sizeof(pkgCache::DependencyData));
+ APT_HEADER_SET(ProvidesSz, sizeof(pkgCache::Provides));
+ APT_HEADER_SET(VerFileSz, sizeof(pkgCache::VerFile));
+ APT_HEADER_SET(DescFileSz, sizeof(pkgCache::DescFile));
+#undef APT_HEADER_SET
+
+ GroupCount = 0;
+ PackageCount = 0;
+ VersionCount = 0;
+ DescriptionCount = 0;
+ DependsCount = 0;
+ DependsDataCount = 0;
+ ReleaseFileCount = 0;
+ PackageFileCount = 0;
+ VerFileCount = 0;
+ DescFileCount = 0;
+ ProvidesCount = 0;
+ MaxVerFileSize = 0;
+ MaxDescFileSize = 0;
+
+ FileList = 0;
+ RlsFileList = 0;
+ VerSysName = 0;
+ Architecture = 0;
+ SetArchitectures(0);
+ SetHashTableSize(_config->FindI("APT::Cache-HashTableSize", 50503));
+ memset(Pools,0,sizeof(Pools));
+
+ CacheFileSize = 0;
+}
+ /*}}}*/
+// Cache::Header::CheckSizes - Check if the two headers have same *sz /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgCache::Header::CheckSizes(Header &Against) const
+{
+ if (HeaderSz == Against.HeaderSz &&
+ GroupSz == Against.GroupSz &&
+ PackageSz == Against.PackageSz &&
+ ReleaseFileSz == Against.ReleaseFileSz &&
+ PackageFileSz == Against.PackageFileSz &&
+ VersionSz == Against.VersionSz &&
+ DescriptionSz == Against.DescriptionSz &&
+ DependencySz == Against.DependencySz &&
+ DependencyDataSz == Against.DependencyDataSz &&
+ VerFileSz == Against.VerFileSz &&
+ DescFileSz == Against.DescFileSz &&
+ ProvidesSz == Against.ProvidesSz)
+ return true;
+ return false;
+}
+ /*}}}*/
+
+// Cache::pkgCache - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+APT_IGNORE_DEPRECATED_PUSH
+pkgCache::pkgCache(MMap *Map, bool DoMap) : Map(*Map), VS(nullptr), d(NULL)
+{
+ // call getArchitectures() with cached=false to ensure that the
+ // architectures cache is re-evaulated. this is needed in cases
+ // when the APT::Architecture field changes between two cache creations
+ MultiArchEnabled = APT::Configuration::getArchitectures(false).size() > 1;
+ if (DoMap == true)
+ ReMap();
+}
+APT_IGNORE_DEPRECATED_POP
+ /*}}}*/
+// Cache::ReMap - Reopen the cache file /*{{{*/
+// ---------------------------------------------------------------------
+/* If the file is already closed then this will open it open it. */
+bool pkgCache::ReMap(bool const &Errorchecks)
+{
+ // Apply the typecasts.
+ HeaderP = (Header *)Map.Data();
+ GrpP = (Group *)Map.Data();
+ PkgP = (Package *)Map.Data();
+ VerFileP = (VerFile *)Map.Data();
+ DescFileP = (DescFile *)Map.Data();
+ RlsFileP = (ReleaseFile *)Map.Data();
+ PkgFileP = (PackageFile *)Map.Data();
+ VerP = (Version *)Map.Data();
+ DescP = (Description *)Map.Data();
+ ProvideP = (Provides *)Map.Data();
+ DepP = (Dependency *)Map.Data();
+ DepDataP = (DependencyData *)Map.Data();
+ StrP = (char *)Map.Data();
+
+ if (Errorchecks == false)
+ return true;
+
+ if (Map.Size() == 0 || HeaderP == 0)
+ return _error->Error(_("Empty package cache"));
+
+ // Check the header
+ Header DefHeader;
+ if (HeaderP->Signature != DefHeader.Signature ||
+ HeaderP->Dirty == true)
+ return _error->Error(_("The package cache file is corrupted"));
+
+ if (HeaderP->MajorVersion != DefHeader.MajorVersion ||
+ HeaderP->MinorVersion != DefHeader.MinorVersion ||
+ HeaderP->CheckSizes(DefHeader) == false)
+ return _error->Error(_("The package cache file is an incompatible version"));
+
+ if (HeaderP->VerSysName == 0 || HeaderP->Architecture == 0 || HeaderP->GetArchitectures() == 0)
+ return _error->Error(_("The package cache file is corrupted"));
+
+ // Locate our VS..
+ if ((VS = pkgVersioningSystem::GetVS(StrP + HeaderP->VerSysName)) == 0)
+ return _error->Error(_("This APT does not support the versioning system '%s'"),StrP + HeaderP->VerSysName);
+
+ // Check the architecture
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ std::string list = "";
+ for (auto const & arch : archs) {
+ if (!list.empty())
+ list.append(",");
+ list.append(arch);
+ }
+ if (_config->Find("APT::Architecture") != StrP + HeaderP->Architecture ||
+ list != StrP + HeaderP->GetArchitectures())
+ return _error->Error(_("The package cache was built for different architectures: %s vs %s"), StrP + HeaderP->GetArchitectures(), list.c_str());
+
+
+ auto hash = CacheHash();
+ if (_config->FindB("Debug::pkgCacheGen", false))
+ std::clog << "Opened cache with hash " << hash << ", expecting " << HeaderP->CacheFileSize << "\n";
+ if (hash != HeaderP->CacheFileSize)
+ return _error->Error(_("The package cache file is corrupted, it has the wrong hash"));
+
+ return true;
+}
+ /*}}}*/
+// Cache::Hash - Hash a string /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to generate the hash entries for the HashTable. With my
+ package list from bo this function gets 94% table usage on a 512 item
+ table (480 used items) */
+map_id_t pkgCache::sHash(StringView Str) const
+{
+ uint32_t Hash = 5381;
+ for (auto I = Str.begin(); I != Str.end(); ++I)
+ Hash = 33 * Hash + tolower_ascii_unsafe(*I);
+ return Hash % HeaderP->GetHashTableSize();
+}
+map_id_t pkgCache::sHash(const string &Str) const
+{
+ uint32_t Hash = 5381;
+ for (string::const_iterator I = Str.begin(); I != Str.end(); ++I)
+ Hash = 33 * Hash + tolower_ascii_unsafe((signed char)*I);
+ return Hash % HeaderP->GetHashTableSize();
+}
+
+map_id_t pkgCache::sHash(const char *Str) const
+{
+ uint32_t Hash = 5381;
+ for (const char *I = Str; *I != 0; ++I)
+ Hash = 33 * Hash + tolower_ascii_unsafe((signed char)*I);
+ return Hash % HeaderP->GetHashTableSize();
+}
+
+#if defined(HAVE_FMV_SSE42_AND_CRC32)
+
+#ifdef HAVE_FMV_SSE42_AND_CRC32
+__attribute__((target("sse4.2"))) static uint32_t hash32(uint32_t crc32, const unsigned char *input, size_t size)
+{
+ if (input == nullptr)
+ return 0;
+
+ crc32 ^= 0xffffffffU;
+#ifdef HAVE_FMV_SSE42_AND_CRC32DI
+ while (size >= 8) {
+ crc32 = __builtin_ia32_crc32di(crc32, *(uint64_t *)input);
+ input += 8;
+ size -= 8;
+ }
+
+ if (size >= 4) {
+#else
+ while (size >= 4) {
+#endif
+ crc32 = __builtin_ia32_crc32si(crc32, *(uint32_t *)input);
+ input += 4;
+ size -= 4;
+ }
+
+ if (size >= 2) {
+ crc32 = __builtin_ia32_crc32hi(crc32, *(uint16_t *)input);
+ input += 2;
+ size -= 2;
+ }
+
+ if (size >= 1) {
+ crc32 = __builtin_ia32_crc32qi(crc32, *(uint8_t *)input);
+ input += 1;
+ size -= 1;
+ }
+ crc32 ^= 0xffffffffU;
+ return crc32;
+}
+#endif
+
+__attribute__((target("default")))
+#endif
+static uint32_t hash32(uint32_t crc32, const unsigned char *input, size_t size)
+{
+ return adler32(crc32, input, size);
+}
+
+uint32_t pkgCache::CacheHash()
+{
+ pkgCache::Header header = {};
+ uLong adler = hash32(0L, Z_NULL, 0);
+
+ if (Map.Size() < sizeof(header))
+ return adler;
+ memcpy(&header, GetMap().Data(), sizeof(header));
+
+ header.Dirty = false;
+ header.CacheFileSize = 0;
+
+ adler = hash32(adler,
+ reinterpret_cast<const unsigned char *>(&header),
+ sizeof(header));
+
+ if (Map.Size() > sizeof(header)) {
+ adler = hash32(adler,
+ static_cast<const unsigned char *>(GetMap().Data()) + sizeof(header),
+ GetMap().Size() - sizeof(header));
+ }
+
+ return adler;
+}
+ /*}}}*/
+// Cache::FindPkg - Locate a package by name /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns 0 on error, pointer to the package otherwise */
+pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) {
+ return FindPkg(StringView(Name));
+}
+
+pkgCache::PkgIterator pkgCache::FindPkg(StringView Name) {
+ auto const found = Name.rfind(':');
+ if (found == string::npos)
+ return FindPkg(Name, "native");
+ auto const Arch = Name.substr(found+1);
+ /* Beware: This is specialcased to handle pkg:any in dependencies
+ as these are linked to virtual pkg:any named packages.
+ If you want any arch from a pkg, use FindPkg(pkg,"any") */
+ if (Arch == "any")
+ return FindPkg(Name, "any");
+ return FindPkg(Name.substr(0, found), Arch);
+}
+ /*}}}*/
+// Cache::FindPkg - Locate a package by name /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns 0 on error, pointer to the package otherwise */
+pkgCache::PkgIterator pkgCache::FindPkg(const string &Name, string const &Arch) {
+ return FindPkg(StringView(Name), StringView(Arch));
+}
+
+pkgCache::PkgIterator pkgCache::FindPkg(StringView Name, StringView Arch) {
+ /* We make a detour via the GrpIterator here as
+ on a multi-arch environment a group is easier to
+ find than a package (less entries in the buckets) */
+ pkgCache::GrpIterator Grp = FindGrp(Name);
+ if (Grp.end() == true)
+ return PkgIterator(*this,0);
+
+ return Grp.FindPkg(Arch);
+}
+ /*}}}*/
+// Cache::FindGrp - Locate a group by name /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns End-Pointer on error, pointer to the group otherwise */
+pkgCache::GrpIterator pkgCache::FindGrp(const string &Name) {
+ return FindGrp(StringView(Name));
+}
+
+pkgCache::GrpIterator pkgCache::FindGrp(StringView Name) {
+ if (unlikely(Name.empty() == true))
+ return GrpIterator(*this,0);
+
+ // Look at the hash bucket for the group
+ Group *Grp = GrpP + HeaderP->GrpHashTableP()[sHash(Name)];
+ for (; Grp != GrpP; Grp = GrpP + Grp->Next) {
+ int const cmp = StringViewCompareFast(Name, ViewString(Grp->Name));
+ if (cmp == 0)
+ return GrpIterator(*this, Grp);
+ else if (cmp < 0)
+ break;
+ }
+
+ return GrpIterator(*this,0);
+}
+ /*}}}*/
+// Cache::CompTypeDeb - Return a string describing the compare type /*{{{*/
+// ---------------------------------------------------------------------
+/* This returns a string representation of the dependency compare
+ type in the weird debian style.. */
+const char *pkgCache::CompTypeDeb(unsigned char Comp)
+{
+ const char * const Ops[] = {"","<=",">=","<<",">>","=","!="};
+ if (unlikely((unsigned)(Comp & 0xF) >= sizeof(Ops)/sizeof(Ops[0])))
+ return "";
+ return Ops[Comp & 0xF];
+}
+ /*}}}*/
+// Cache::CompType - Return a string describing the compare type /*{{{*/
+// ---------------------------------------------------------------------
+/* This returns a string representation of the dependency compare
+ type */
+const char *pkgCache::CompType(unsigned char Comp)
+{
+ const char * const Ops[] = {"","<=",">=","<",">","=","!="};
+ if (unlikely((unsigned)(Comp & 0xF) >= sizeof(Ops)/sizeof(Ops[0])))
+ return "";
+ return Ops[Comp & 0xF];
+}
+ /*}}}*/
+// Cache::DepType - Return a string describing the dep type /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+const char *pkgCache::DepType(unsigned char Type)
+{
+ const char *Types[] = {"",_("Depends"),_("PreDepends"),_("Suggests"),
+ _("Recommends"),_("Conflicts"),_("Replaces"),
+ _("Obsoletes"),_("Breaks"), _("Enhances")};
+ if (Type < sizeof(Types)/sizeof(*Types))
+ return Types[Type];
+ return "";
+}
+ /*}}}*/
+// Cache::Priority - Convert a priority value to a string /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+const char *pkgCache::Priority(unsigned char Prio)
+{
+ const char *Mapping[] = {0,_("required"),_("important"),_("standard"),
+ _("optional"),_("extra")};
+ if (Prio < _count(Mapping))
+ return Mapping[Prio];
+ return 0;
+}
+ /*}}}*/
+// GrpIterator::FindPkg - Locate a package by arch /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns an End-Pointer on error, pointer to the package otherwise */
+pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const {
+ return FindPkg(StringView(Arch));
+}
+pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(const char *Arch) const {
+ return FindPkg(StringView(Arch));
+}
+pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(StringView Arch) const {
+ if (unlikely(IsGood() == false || S->FirstPackage == 0))
+ return PkgIterator(*Owner, 0);
+
+ /* If we accept any package we simply return the "first"
+ package in this group */
+ if (Arch == "any")
+ return PkgIterator(*Owner, Owner->PkgP + S->FirstPackage);
+ if (Arch == "native" || Arch == "all")
+ Arch = Owner->NativeArch();
+
+ // Iterate over the list to find the matching arch
+ for (pkgCache::Package *Pkg = PackageList(); Pkg != Owner->PkgP;
+ Pkg = Owner->PkgP + Pkg->NextPackage) {
+ if (Arch == Owner->ViewString(Pkg->Arch))
+ return PkgIterator(*Owner, Pkg);
+ if ((Owner->PkgP + S->LastPackage) == Pkg)
+ break;
+ }
+
+ return PkgIterator(*Owner, 0);
+}
+ /*}}}*/
+// GrpIterator::FindPreferredPkg - Locate the "best" package /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns an End-Pointer on error, pointer to the package otherwise */
+pkgCache::PkgIterator pkgCache::GrpIterator::FindPreferredPkg(bool const &PreferNonVirtual) const {
+ pkgCache::PkgIterator Pkg = FindPkg(StringView("native", 6));
+ if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0))
+ return Pkg;
+
+ std::vector<std::string> const archs = APT::Configuration::getArchitectures();
+ for (std::vector<std::string>::const_iterator a = archs.begin();
+ a != archs.end(); ++a) {
+ Pkg = FindPkg(*a);
+ if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0))
+ return Pkg;
+ }
+ // packages without an architecture
+ Pkg = FindPkg(StringView("none", 4));
+ if (Pkg.end() == false && (PreferNonVirtual == false || Pkg->VersionList != 0))
+ return Pkg;
+
+ if (PreferNonVirtual == true)
+ return FindPreferredPkg(false);
+ return PkgIterator(*Owner, 0);
+}
+ /*}}}*/
+// GrpIterator::NextPkg - Locate the next package in the group /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns an End-Pointer on error, pointer to the package otherwise.
+ We can't simply ++ to the next as the next package of the last will
+ be from a different group (with the same hash value) */
+pkgCache::PkgIterator pkgCache::GrpIterator::NextPkg(pkgCache::PkgIterator const &LastPkg) const {
+ if (unlikely(IsGood() == false || S->FirstPackage == 0 ||
+ LastPkg.end() == true))
+ return PkgIterator(*Owner, 0);
+
+ if (S->LastPackage == LastPkg.Index())
+ return PkgIterator(*Owner, 0);
+
+ return PkgIterator(*Owner, Owner->PkgP + LastPkg->NextPackage);
+}
+ /*}}}*/
+// GrpIterator::operator++ - Prefix incr /*{{{*/
+// ---------------------------------------------------------------------
+/* This will advance to the next logical group in the hash table. */
+pkgCache::GrpIterator& pkgCache::GrpIterator::operator++()
+{
+ // Follow the current links
+ if (S != Owner->GrpP)
+ S = Owner->GrpP + S->Next;
+
+ // Follow the hash table
+ while (S == Owner->GrpP && (HashIndex+1) < (signed)Owner->HeaderP->GetHashTableSize())
+ {
+ ++HashIndex;
+ S = Owner->GrpP + Owner->HeaderP->GrpHashTableP()[HashIndex];
+ }
+ return *this;
+}
+ /*}}}*/
+// PkgIterator::operator++ - Prefix incr /*{{{*/
+// ---------------------------------------------------------------------
+/* This will advance to the next logical package in the hash table. */
+pkgCache::PkgIterator& pkgCache::PkgIterator::operator++()
+{
+ // Follow the current links
+ if (S != Owner->PkgP)
+ S = Owner->PkgP + S->NextPackage;
+
+ // Follow the hash table
+ while (S == Owner->PkgP && (HashIndex+1) < (signed)Owner->HeaderP->GetHashTableSize())
+ {
+ ++HashIndex;
+ S = Owner->PkgP + Owner->HeaderP->PkgHashTableP()[HashIndex];
+ }
+ return *this;
+}
+ /*}}}*/
+pkgCache::DepIterator& pkgCache::DepIterator::operator++() /*{{{*/
+{
+ if (S == Owner->DepP)
+ return *this;
+ S = Owner->DepP + (Type == DepVer ? S->NextDepends : S->NextRevDepends);
+ if (S == Owner->DepP)
+ S2 = Owner->DepDataP;
+ else
+ S2 = Owner->DepDataP + S->DependencyData;
+ return *this;
+}
+ /*}}}*/
+// PkgIterator::State - Check the State of the package /*{{{*/
+// ---------------------------------------------------------------------
+/* By this we mean if it is either cleanly installed or cleanly removed. */
+pkgCache::PkgIterator::OkState pkgCache::PkgIterator::State() const
+{
+ if (S->InstState == pkgCache::State::ReInstReq ||
+ S->InstState == pkgCache::State::HoldReInstReq)
+ return NeedsUnpack;
+
+ if (S->CurrentState == pkgCache::State::UnPacked ||
+ S->CurrentState == pkgCache::State::HalfConfigured)
+ // we leave triggers alone completely. dpkg deals with
+ // them in a hard-to-predict manner and if they get
+ // resolved by dpkg before apt run dpkg --configure on
+ // the TriggersPending package dpkg returns a error
+ //Pkg->CurrentState == pkgCache::State::TriggersAwaited
+ //Pkg->CurrentState == pkgCache::State::TriggersPending)
+ return NeedsConfigure;
+
+ if (S->CurrentState == pkgCache::State::HalfInstalled ||
+ S->InstState != pkgCache::State::Ok)
+ return NeedsUnpack;
+
+ return NeedsNothing;
+}
+ /*}}}*/
+// PkgIterator::CandVersion - Returns the candidate version string /*{{{*/
+// ---------------------------------------------------------------------
+/* Return string representing of the candidate version. */
+const char *
+pkgCache::PkgIterator::CandVersion() const
+{
+ //TargetVer is empty, so don't use it.
+ VerIterator version = pkgPolicy(Owner).GetCandidateVer(*this);
+ if (version.IsGood())
+ return version.VerStr();
+ return 0;
+}
+ /*}}}*/
+// PkgIterator::CurVersion - Returns the current version string /*{{{*/
+// ---------------------------------------------------------------------
+/* Return string representing of the current version. */
+const char *
+pkgCache::PkgIterator::CurVersion() const
+{
+ VerIterator version = CurrentVer();
+ if (version.IsGood())
+ return CurrentVer().VerStr();
+ return 0;
+}
+ /*}}}*/
+// ostream operator to handle string representation of a package /*{{{*/
+// ---------------------------------------------------------------------
+/* Output name < cur.rent.version -> candid.ate.version | new.est.version > (section)
+ Note that the characters <|>() are all literal above. Versions will be omitted
+ if they provide no new information (e.g. there is no newer version than candidate)
+ If no version and/or section can be found "none" is used. */
+std::ostream&
+operator<<(std::ostream& out, pkgCache::PkgIterator Pkg)
+{
+ if (Pkg.end() == true)
+ return out << "invalid package";
+
+ string current = string(Pkg.CurVersion() == 0 ? "none" : Pkg.CurVersion());
+APT_IGNORE_DEPRECATED_PUSH
+ string candidate = string(Pkg.CandVersion() == 0 ? "none" : Pkg.CandVersion());
+APT_IGNORE_DEPRECATED_POP
+ string newest = string(Pkg.VersionList().end() ? "none" : Pkg.VersionList().VerStr());
+
+ out << Pkg.Name() << " [ " << Pkg.Arch() << " ] < " << current;
+ if (current != candidate)
+ out << " -> " << candidate;
+ if ( newest != "none" && candidate != newest)
+ out << " | " << newest;
+ if (Pkg->VersionList == 0)
+ out << " > ( none )";
+ else
+ out << " > ( " << string(Pkg.VersionList().Section()==0?"unknown":Pkg.VersionList().Section()) << " )";
+ return out;
+}
+ /*}}}*/
+// PkgIterator::FullName - Returns Name and (maybe) Architecture /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns a name:arch string */
+std::string pkgCache::PkgIterator::FullName(bool const &Pretty) const
+{
+ string fullname = Name();
+ if (Pretty == false ||
+ (strcmp(Arch(), "all") != 0 && strcmp(Arch(), "any") != 0 &&
+ strcmp(Owner->NativeArch(), Arch()) != 0))
+ return fullname.append(":").append(Arch());
+ return fullname;
+}
+ /*}}}*/
+// DepIterator::IsCritical - Returns true if the dep is important /*{{{*/
+// ---------------------------------------------------------------------
+/* Currently critical deps are defined as depends, predepends and
+ conflicts (including dpkg's Breaks fields). */
+bool pkgCache::DepIterator::IsCritical() const
+{
+ if (IsNegative() == true ||
+ S2->Type == pkgCache::Dep::Depends ||
+ S2->Type == pkgCache::Dep::PreDepends)
+ return true;
+ return false;
+}
+ /*}}}*/
+// DepIterator::IsNegative - Returns true if the dep is a negative one /*{{{*/
+// ---------------------------------------------------------------------
+/* Some dependencies are positive like Depends and Recommends, others
+ are negative like Conflicts which can and should be handled differently */
+bool pkgCache::DepIterator::IsNegative() const
+{
+ return S2->Type == Dep::DpkgBreaks ||
+ S2->Type == Dep::Conflicts ||
+ S2->Type == Dep::Obsoletes;
+}
+ /*}}}*/
+// DepIterator::SmartTargetPkg - Resolve dep target pointers w/provides /*{{{*/
+// ---------------------------------------------------------------------
+/* This intellegently looks at dep target packages and tries to figure
+ out which package should be used. This is needed to nicely handle
+ provide mapping. If the target package has no other providing packages
+ then it returned. Otherwise the providing list is looked at to
+ see if there is one unique providing package if so it is returned.
+ Otherwise true is returned and the target package is set. The return
+ result indicates whether the node should be expandable
+
+ In Conjunction with the DepCache the value of Result may not be
+ super-good since the policy may have made it uninstallable. Using
+ AllTargets is better in this case. */
+bool pkgCache::DepIterator::SmartTargetPkg(PkgIterator &Result) const
+{
+ Result = TargetPkg();
+
+ // No provides at all
+ if (Result->ProvidesList == 0)
+ return false;
+
+ // There is the Base package and the providing ones which is at least 2
+ if (Result->VersionList != 0)
+ return true;
+
+ /* We have to skip over indirect provisions of the package that
+ owns the dependency. For instance, if libc5-dev depends on the
+ virtual package libc-dev which is provided by libc5-dev and libc6-dev
+ we must ignore libc5-dev when considering the provides list. */
+ PrvIterator PStart = Result.ProvidesList();
+ for (; PStart.end() != true && PStart.OwnerPkg() == ParentPkg(); ++PStart);
+
+ // Nothing but indirect self provides
+ if (PStart.end() == true)
+ return false;
+
+ // Check for single packages in the provides list
+ PrvIterator P = PStart;
+ for (; P.end() != true; ++P)
+ {
+ // Skip over self provides
+ if (P.OwnerPkg() == ParentPkg())
+ continue;
+ if (PStart.OwnerPkg() != P.OwnerPkg())
+ break;
+ }
+
+ Result = PStart.OwnerPkg();
+
+ // Check for non dups
+ if (P.end() != true)
+ return true;
+
+ return false;
+}
+ /*}}}*/
+// DepIterator::AllTargets - Returns the set of all possible targets /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a more useful version of TargetPkg() that follows versioned
+ provides. It includes every possible package-version that could satisfy
+ the dependency. The last item in the list has a 0. The resulting pointer
+ must be delete [] 'd */
+pkgCache::Version **pkgCache::DepIterator::AllTargets() const
+{
+ Version **Res = 0;
+ unsigned long Size =0;
+ while (1)
+ {
+ Version **End = Res;
+ PkgIterator DPkg = TargetPkg();
+
+ // Walk along the actual package providing versions
+ for (VerIterator I = DPkg.VersionList(); I.end() == false; ++I)
+ {
+ if (IsIgnorable(I.ParentPkg()) == true)
+ continue;
+ if (IsSatisfied(I) == false)
+ continue;
+
+ Size++;
+ if (Res != 0)
+ *End++ = I;
+ }
+
+ // Follow all provides
+ for (PrvIterator I = DPkg.ProvidesList(); I.end() == false; ++I)
+ {
+ if (IsIgnorable(I) == true)
+ continue;
+ if (IsSatisfied(I) == false)
+ continue;
+
+ Size++;
+ if (Res != 0)
+ *End++ = I.OwnerVer();
+ }
+
+ // Do it again and write it into the array
+ if (Res == 0)
+ {
+ Res = new Version *[Size+1];
+ Size = 0;
+ }
+ else
+ {
+ *End = 0;
+ break;
+ }
+ }
+
+ return Res;
+}
+ /*}}}*/
+// DepIterator::GlobOr - Compute an OR group /*{{{*/
+// ---------------------------------------------------------------------
+/* This Takes an iterator, iterates past the current dependency grouping
+ and returns Start and End so that so End is the final element
+ in the group, if End == Start then D is End++ and End is the
+ dependency D was pointing to. Use in loops to iterate sensibly. */
+void pkgCache::DepIterator::GlobOr(DepIterator &Start,DepIterator &End)
+{
+ // Compute a single dependency element (glob or)
+ Start = *this;
+ End = *this;
+ for (bool LastOR = true; end() == false && LastOR == true;)
+ {
+ LastOR = (S2->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or;
+ ++(*this);
+ if (LastOR == true)
+ End = (*this);
+ }
+}
+ /*}}}*/
+// DepIterator::IsIgnorable - should this packag/providr be ignored? /*{{{*/
+// ---------------------------------------------------------------------
+/* Deps like self-conflicts should be ignored as well as implicit conflicts
+ on virtual packages. */
+bool pkgCache::DepIterator::IsIgnorable(PkgIterator const &PT) const
+{
+ if (IsNegative() == false)
+ return false;
+
+ pkgCache::PkgIterator const PP = ParentPkg();
+ if (PP->Group != PT->Group)
+ return false;
+ // self-conflict
+ if (PP == PT)
+ return true;
+ pkgCache::VerIterator const PV = ParentVer();
+ // ignore group-conflict on a M-A:same package - but not our implicit dependencies
+ // so that we can have M-A:same packages conflicting with their own real name
+ if ((PV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ return IsMultiArchImplicit() == false;
+
+ return false;
+}
+bool pkgCache::DepIterator::IsIgnorable(PrvIterator const &Prv) const
+{
+ if (IsNegative() == false)
+ return false;
+
+ PkgIterator const Pkg = ParentPkg();
+ /* Provides may never be applied against the same package (or group)
+ if it is a conflicts. See the comment above. */
+ if (Prv.OwnerPkg()->Group == Pkg->Group)
+ return true;
+ // Implicit group-conflicts should not be applied on providers of other groups
+ if (IsMultiArchImplicit() && Prv.OwnerPkg()->Group != Pkg->Group)
+ return true;
+
+ return false;
+}
+ /*}}}*/
+// DepIterator::IsSatisfied - check if a version satisfied the dependency /*{{{*/
+bool pkgCache::DepIterator::IsSatisfied(VerIterator const &Ver) const
+{
+ return Owner->VS->CheckDep(Ver.VerStr(),S2->CompareOp,TargetVer());
+}
+bool pkgCache::DepIterator::IsSatisfied(PrvIterator const &Prv) const
+{
+ return Owner->VS->CheckDep(Prv.ProvideVersion(),S2->CompareOp,TargetVer());
+}
+ /*}}}*/
+// DepIterator::IsImplicit - added by the cache generation /*{{{*/
+bool pkgCache::DepIterator::IsImplicit() const
+{
+ if (IsMultiArchImplicit() == true)
+ return true;
+ if (IsNegative() || S2->Type == pkgCache::Dep::Replaces)
+ {
+ if ((S2->CompareOp & pkgCache::Dep::ArchSpecific) != pkgCache::Dep::ArchSpecific &&
+ strcmp(ParentPkg().Arch(), TargetPkg().Arch()) != 0)
+ return true;
+ }
+ return false;
+}
+ /*}}}*/
+// ostream operator to handle string representation of a dependency /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+std::ostream& operator<<(std::ostream& out, pkgCache::DepIterator D)
+{
+ if (D.end() == true)
+ return out << "invalid dependency";
+
+ pkgCache::PkgIterator P = D.ParentPkg();
+ pkgCache::PkgIterator T = D.TargetPkg();
+
+ out << (P.end() ? "invalid pkg" : P.FullName(false)) << " " << D.DepType()
+ << " on ";
+APT_IGNORE_DEPRECATED_PUSH
+ if (T.end() == true)
+ out << "invalid pkg";
+ else
+ out << T;
+APT_IGNORE_DEPRECATED_POP
+
+ if (D->Version != 0)
+ out << " (" << D.CompType() << " " << D.TargetVer() << ")";
+
+ return out;
+}
+ /*}}}*/
+// VerIterator::CompareVer - Fast version compare for same pkgs /*{{{*/
+// ---------------------------------------------------------------------
+/* This just looks over the version list to see if B is listed before A. In
+ most cases this will return in under 4 checks, ver lists are short. */
+int pkgCache::VerIterator::CompareVer(const VerIterator &B) const
+{
+ // Check if they are equal
+ if (*this == B)
+ return 0;
+ if (end() == true)
+ return -1;
+ if (B.end() == true)
+ return 1;
+
+ /* Start at A and look for B. If B is found then A > B otherwise
+ B was before A so A < B */
+ VerIterator I = *this;
+ for (;I.end() == false; ++I)
+ if (I == B)
+ return 1;
+ return -1;
+}
+ /*}}}*/
+// VerIterator::Downloadable - Checks if the version is downloadable /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+APT_PURE bool pkgCache::VerIterator::Downloadable() const
+{
+ VerFileIterator Files = FileList();
+ for (; Files.end() == false; ++Files)
+ if (Files.File().Flagged(pkgCache::Flag::NotSource) == false)
+ return true;
+ return false;
+}
+ /*}}}*/
+// VerIterator::Automatic - Check if this version is 'automatic' /*{{{*/
+// ---------------------------------------------------------------------
+/* This checks to see if any of the versions files are not NotAutomatic.
+ True if this version is selectable for automatic installation. */
+APT_PURE bool pkgCache::VerIterator::Automatic() const
+{
+ VerFileIterator Files = FileList();
+ for (; Files.end() == false; ++Files)
+ // Do not check ButAutomaticUpgrades here as it is kind of automatic…
+ if (Files.File().Flagged(pkgCache::Flag::NotAutomatic) == false)
+ return true;
+ return false;
+}
+ /*}}}*/
+// VerIterator::NewestFile - Return the newest file version relation /*{{{*/
+// ---------------------------------------------------------------------
+/* This looks at the version numbers associated with all of the sources
+ this version is in and returns the highest.*/
+pkgCache::VerFileIterator pkgCache::VerIterator::NewestFile() const
+{
+ VerFileIterator Files = FileList();
+ VerFileIterator Highest = Files;
+ for (; Files.end() == false; ++Files)
+ {
+ if (Owner->VS->CmpReleaseVer(Files.File().Version(),Highest.File().Version()) > 0)
+ Highest = Files;
+ }
+
+ return Highest;
+}
+ /*}}}*/
+// VerIterator::RelStr - Release description string /*{{{*/
+// ---------------------------------------------------------------------
+/* This describes the version from a release-centric manner. The output is a
+ list of Label:Version/Archive */
+static std::string PkgFileIteratorToRelString(pkgCache::PkgFileIterator const &File)
+{
+ std::string Res;
+ if (File.Label() != 0)
+ Res = Res + File.Label() + ':';
+
+ if (File.Archive() != 0)
+ {
+ if (File.Version() == 0)
+ Res += File.Archive();
+ else
+ Res = Res + File.Version() + '/' + File.Archive();
+ }
+ else
+ {
+ // No release file, print the host name that this came from
+ if (File.Site() == 0 || File.Site()[0] == 0)
+ Res += "localhost";
+ else
+ Res += File.Site();
+ }
+ return Res;
+}
+string pkgCache::VerIterator::RelStr() const
+{
+ std::vector<std::string> RelStrs;
+ for (pkgCache::VerFileIterator I = this->FileList(); I.end() == false; ++I)
+ {
+ // Do not print 'not source' entries'
+ pkgCache::PkgFileIterator const File = I.File();
+ if (File.Flagged(pkgCache::Flag::NotSource))
+ continue;
+
+ std::string const RS = PkgFileIteratorToRelString(File);
+ if (std::find(RelStrs.begin(), RelStrs.end(), RS) != RelStrs.end())
+ continue;
+
+ RelStrs.push_back(RS);
+ }
+ std::ostringstream os;
+ if (likely(RelStrs.empty() == false))
+ {
+ std::copy(RelStrs.begin(), RelStrs.end()-1, std::ostream_iterator<std::string>(os, ", "));
+ os << *RelStrs.rbegin();
+ }
+ if (S->ParentPkg != 0)
+ os << " [" << Arch() << "]";
+ return os.str();
+}
+ /*}}}*/
+// VerIterator::MultiArchType - string representing MultiArch flag /*{{{*/
+const char * pkgCache::VerIterator::MultiArchType() const
+{
+ if ((S->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ return "same";
+ else if ((S->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
+ return "foreign";
+ else if ((S->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
+ return "allowed";
+ return "none";
+}
+ /*}}}*/
+// RlsFileIterator::IsOk - Checks if the cache is in sync with the file /*{{{*/
+// ---------------------------------------------------------------------
+/* This stats the file and compares its stats with the ones that were
+ stored during generation. Date checks should probably also be
+ included here. */
+bool pkgCache::RlsFileIterator::IsOk()
+{
+ return true;
+}
+ /*}}}*/
+// RlsFileIterator::RelStr - Return the release string /*{{{*/
+string pkgCache::RlsFileIterator::RelStr()
+{
+ string Res;
+ if (Version() != 0)
+ Res = Res + (Res.empty() == true?"v=":",v=") + Version();
+ if (Origin() != 0)
+ Res = Res + (Res.empty() == true?"o=":",o=") + Origin();
+ if (Archive() != 0)
+ Res = Res + (Res.empty() == true?"a=":",a=") + Archive();
+ if (Codename() != 0)
+ Res = Res + (Res.empty() == true?"n=":",n=") + Codename();
+ if (Label() != 0)
+ Res = Res + (Res.empty() == true?"l=":",l=") + Label();
+ return Res;
+}
+ /*}}}*/
+// PkgFileIterator::IsOk - Checks if the cache is in sync with the file /*{{{*/
+// ---------------------------------------------------------------------
+/* This stats the file and compares its stats with the ones that were
+ stored during generation. Date checks should probably also be
+ included here. */
+bool pkgCache::PkgFileIterator::IsOk()
+{
+ return true;
+}
+ /*}}}*/
+string pkgCache::PkgFileIterator::RelStr() /*{{{*/
+{
+ std::string Res;
+ if (ReleaseFile() == 0)
+ {
+ if (Component() != 0)
+ Res = Res + (Res.empty() == true?"a=":",a=") + Component();
+ }
+ else
+ {
+ Res = ReleaseFile().RelStr();
+ if (Component() != 0)
+ Res = Res + (Res.empty() == true?"c=":",c=") + Component();
+ }
+ if (Architecture() != 0)
+ Res = Res + (Res.empty() == true?"b=":",b=") + Architecture();
+ return Res;
+}
+ /*}}}*/
+// VerIterator::TranslatedDescription - Return the a DescIter for locale/*{{{*/
+// ---------------------------------------------------------------------
+/* return a DescIter for the current locale or the default if none is
+ * found
+ */
+pkgCache::DescIterator pkgCache::VerIterator::TranslatedDescription() const
+{
+ std::vector<string> const lang = APT::Configuration::getLanguages();
+ for (std::vector<string>::const_iterator l = lang.begin();
+ l != lang.end(); ++l)
+ {
+ pkgCache::DescIterator Desc = DescriptionList();
+ for (; Desc.end() == false; ++Desc)
+ if (*l == Desc.LanguageCode())
+ break;
+ if (Desc.end() == true)
+ {
+ if (*l == "en")
+ {
+ Desc = DescriptionList();
+ for (; Desc.end() == false; ++Desc)
+ if (strcmp(Desc.LanguageCode(), "") == 0)
+ break;
+ if (Desc.end() == true)
+ continue;
+ }
+ else
+ continue;
+ }
+ return Desc;
+ }
+ for (pkgCache::DescIterator Desc = DescriptionList();
+ Desc.end() == false; ++Desc)
+ if (strcmp(Desc.LanguageCode(), "") == 0)
+ return Desc;
+ return DescriptionList();
+}
+
+ /*}}}*/
+
+pkgCache::~pkgCache() {}
diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h
new file mode 100644
index 0000000..787e399
--- /dev/null
+++ b/apt-pkg/pkgcache.h
@@ -0,0 +1,831 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/**\file pkgcache.h
+ \brief pkgCache - Structure definitions for the cache file
+
+ The goal of the cache file is two fold:
+ Firstly to speed loading and processing of the package file array and
+ secondly to reduce memory consumption of the package file array.
+
+ The implementation is aimed at an environment with many primary package
+ files, for instance someone that has a Package file for their CD-ROM, a
+ Package file for the latest version of the distribution on the CD-ROM and a
+ package file for the development version. Always present is the information
+ contained in the status file which might be considered a separate package
+ file.
+
+ Please understand, this is designed as a <b>Cache file</b> it is not meant to be
+ used on any system other than the one it was created for. It is not meant to
+ be authoritative either, i.e. if a system crash or software failure occurs it
+ must be perfectly acceptable for the cache file to be in an inconsistent
+ state. Furthermore at any time the cache file may be erased without losing
+ any information.
+
+ Also the structures and storage layout is optimized for use by the APT
+ and may not be suitable for all purposes. However it should be possible
+ to extend it with associate cache files that contain other information.
+
+ To keep memory use down the cache file only contains often used fields and
+ fields that are inexpensive to store, the Package file has a full list of
+ fields. Also the client may assume that all items are perfectly valid and
+ need not perform checks against their correctness. Removal of information
+ from the cache is possible, but blanks will be left in the file, and
+ unused strings will also be present. The recommended implementation is to
+ simply rebuild the cache each time any of the data files change. It is
+ possible to add a new package file to the cache without any negative side
+ effects.
+
+ <b>Note on Pointer access</b>
+ Clients should always use the CacheIterators classes for access to the
+ cache and the data in it. They also provide a simple STL-like method for
+ traversing the links of the datastructure.
+
+ Every item in every structure is stored as the index to that structure.
+ What this means is that once the files is mmaped every data access has to
+ go through a fix up stage to get a real memory pointer. This is done
+ by taking the index, multiplying it by the type size and then adding
+ it to the start address of the memory block. This sounds complex, but
+ in C it is a single array dereference. Because all items are aligned to
+ their size and indexes are stored as multiples of the size of the structure
+ the format is immediately portable to all possible architectures - BUT the
+ generated files are -NOT-.
+
+ This scheme allows code like this to be written:
+ <example>
+ void *Map = mmap(...);
+ Package *PkgList = (Package *)Map;
+ Header *Head = (Header *)Map;
+ char *Strings = (char *)Map;
+ cout << (Strings + PkgList[Head->HashTable[0]]->Name) << endl;
+ </example>
+ Notice the lack of casting or multiplication. The net result is to return
+ the name of the first package in the first hash bucket, without error
+ checks.
+
+ The generator uses allocation pools to group similarly sized structures in
+ large blocks to eliminate any alignment overhead. The generator also
+ assures that no structures overlap and all indexes are unique. Although
+ at first glance it may seem like there is the potential for two structures
+ to exist at the same point the generator never allows this to happen.
+ (See the discussion of free space pools)
+
+ See \ref pkgcachegen.h for more information about generating cache structures. */
+ /*}}}*/
+#ifndef PKGLIB_PKGCACHE_H
+#define PKGLIB_PKGCACHE_H
+#define __PKGLIB_IN_PKGCACHE_H
+#include <apt-pkg/macros.h>
+#include <apt-pkg/mmap.h>
+
+#include <string>
+#include <stdint.h>
+#include <time.h>
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+#include <apt-pkg/string_view.h>
+#endif
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
+// size of (potentially big) files like debs or the install size of them
+typedef uint64_t map_filesize_t;
+// storing file sizes of indexes, which are way below 4 GB for now
+typedef uint32_t map_filesize_small_t;
+// each package/group/dependency gets an id
+typedef uint32_t map_id_t;
+// some files get an id, too, but in far less absolute numbers
+typedef uint16_t map_fileid_t;
+// relative pointer from cache start
+typedef uint32_t map_pointer_t;
+// same as the previous, but documented to be to a string item
+typedef map_pointer_t map_stringitem_t;
+// we have only a small amount of flags for each item
+typedef uint8_t map_flags_t;
+typedef uint8_t map_number_t;
+
+class pkgVersioningSystem;
+class pkgCache /*{{{*/
+{
+ public:
+ // Cache element predeclarations
+ struct Header;
+ struct Group;
+ struct Package;
+ struct ReleaseFile;
+ struct PackageFile;
+ struct Version;
+ struct Description;
+ struct Provides;
+ struct Dependency;
+ struct DependencyData;
+ struct StringItem;
+ struct VerFile;
+ struct DescFile;
+
+ // Iterators
+ template<typename Str, typename Itr> class Iterator;
+ class GrpIterator;
+ class PkgIterator;
+ class VerIterator;
+ class DescIterator;
+ class DepIterator;
+ class PrvIterator;
+ class RlsFileIterator;
+ class PkgFileIterator;
+ class VerFileIterator;
+ class DescFileIterator;
+
+ class Namespace;
+
+ // These are all the constants used in the cache structures
+
+ // WARNING - if you change these lists you must also edit
+ // the stringification in pkgcache.cc and also consider whether
+ // the cache file will become incompatible.
+ struct Dep
+ {
+ enum DepType {Depends=1,PreDepends=2,Suggests=3,Recommends=4,
+ Conflicts=5,Replaces=6,Obsoletes=7,DpkgBreaks=8,Enhances=9};
+ /** \brief available compare operators
+
+ The lower 4 bits are used to indicate what operator is being specified and
+ the upper 4 bits are flags. OR indicates that the next package is
+ or'd with the current package. */
+ enum DepCompareOp {NoOp=0,LessEq=0x1,GreaterEq=0x2,Less=0x3,
+ Greater=0x4,Equals=0x5,NotEquals=0x6,
+ Or=0x10, /*!< or'ed with the next dependency */
+ MultiArchImplicit=0x20, /*!< generated internally, not spelled out in the index */
+ ArchSpecific=0x40 /*!< was decorated with an explicit architecture in index */
+ };
+ };
+
+ struct State
+ {
+ /** \brief priority of a package version
+
+ Zero is used for unparsable or absent Priority fields. */
+ enum VerPriority {Required=1,Important=2,Standard=3,Optional=4,Extra=5};
+ enum PkgSelectedState {Unknown=0,Install=1,Hold=2,DeInstall=3,Purge=4};
+ enum PkgInstState {Ok=0,ReInstReq=1,HoldInst=2,HoldReInstReq=3};
+ enum PkgCurrentState {NotInstalled=0,UnPacked=1,HalfConfigured=2,
+ HalfInstalled=4,ConfigFiles=5,Installed=6,
+ TriggersAwaited=7,TriggersPending=8};
+ };
+
+ struct Flag
+ {
+ enum PkgFlags {Auto=(1<<0),Essential=(1<<3),Important=(1<<4)};
+ enum PkgFFlags {
+ NotSource=(1<<0), /*!< packages can't be fetched from here, e.g. dpkg/status file */
+ LocalSource=(1<<1), /*!< local sources can't and will not be verified by hashes */
+ NoPackages=(1<<2), /*!< the file includes no package records itself, but additions like Translations */
+ };
+ enum ReleaseFileFlags
+ {
+ NotAutomatic = (1 << 0), /*!< archive has a default pin of 1 */
+ ButAutomaticUpgrades = (1 << 1), /*!< (together with the previous) archive has a default pin of 100 */
+ PackagesRequireAuthorization = (1 << 2), /*!< (together with the previous) archive has a default pin of 100 */
+ };
+ enum ProvidesFlags {
+ MultiArchImplicit=pkgCache::Dep::MultiArchImplicit, /*!< generated internally, not spelled out in the index */
+ ArchSpecific=pkgCache::Dep::ArchSpecific /*!< was decorated with an explicit architecture in index */
+ };
+ };
+
+ protected:
+
+ // Memory mapped cache file
+ std::string CacheFile;
+ MMap &Map;
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN map_id_t sHash(APT::StringView S) const APT_PURE;
+#endif
+ map_id_t sHash(const std::string &S) const APT_PURE;
+ map_id_t sHash(const char *S) const APT_PURE;
+
+ public:
+
+ // Pointers to the arrays of items
+ Header *HeaderP;
+ Group *GrpP;
+ Package *PkgP;
+ VerFile *VerFileP;
+ DescFile *DescFileP;
+ ReleaseFile *RlsFileP;
+ PackageFile *PkgFileP;
+ Version *VerP;
+ Description *DescP;
+ Provides *ProvideP;
+ Dependency *DepP;
+ DependencyData *DepDataP;
+ APT_DEPRECATED_MSG("Not used anymore in cache generation and without a replacement") StringItem *StringItemP;
+ char *StrP;
+
+ virtual bool ReMap(bool const &Errorchecks = true);
+ inline bool Sync() {return Map.Sync();}
+ inline MMap &GetMap() {return Map;}
+ inline void *DataEnd() {return ((unsigned char *)Map.Data()) + Map.Size();}
+
+ // String hashing function (512 range)
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN inline map_id_t Hash(APT::StringView S) const {return sHash(S);}
+#endif
+ inline map_id_t Hash(const std::string &S) const {return sHash(S);}
+ inline map_id_t Hash(const char *S) const {return sHash(S);}
+
+ APT_HIDDEN uint32_t CacheHash();
+
+ // Useful transformation things
+ static const char *Priority(unsigned char Priority);
+
+ // Accessors
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN GrpIterator FindGrp(APT::StringView Name);
+ APT_HIDDEN PkgIterator FindPkg(APT::StringView Name);
+ APT_HIDDEN PkgIterator FindPkg(APT::StringView Name, APT::StringView Arch);
+#endif
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT::StringView ViewString(map_stringitem_t idx) const
+ {
+ char *name = StrP + idx;
+ uint16_t len = *reinterpret_cast<const uint16_t*>(name - sizeof(uint16_t));
+ return APT::StringView(name, len);
+ }
+#endif
+
+
+ GrpIterator FindGrp(const std::string &Name);
+ PkgIterator FindPkg(const std::string &Name);
+ PkgIterator FindPkg(const std::string &Name, const std::string &Arch);
+
+ Header &Head() {return *HeaderP;}
+ inline GrpIterator GrpBegin();
+ inline GrpIterator GrpEnd();
+ inline PkgIterator PkgBegin();
+ inline PkgIterator PkgEnd();
+ inline PkgFileIterator FileBegin();
+ inline PkgFileIterator FileEnd();
+ inline RlsFileIterator RlsFileBegin();
+ inline RlsFileIterator RlsFileEnd();
+
+ inline bool MultiArchCache() const { return MultiArchEnabled; }
+ inline char const * NativeArch();
+
+ // Make me a function
+ pkgVersioningSystem *VS;
+
+ // Converters
+ static const char *CompTypeDeb(unsigned char Comp) APT_PURE;
+ static const char *CompType(unsigned char Comp) APT_PURE;
+ static const char *DepType(unsigned char Dep);
+
+ pkgCache(MMap *Map,bool DoMap = true);
+ virtual ~pkgCache();
+
+private:
+ void * const d;
+ bool MultiArchEnabled;
+};
+ /*}}}*/
+// Header structure /*{{{*/
+struct pkgCache::Header
+{
+ /** \brief Signature information
+
+ This must contain the hex value 0x98FE76DC which is designed to
+ verify that the system loading the image has the same byte order
+ and byte size as the system saving the image */
+ uint32_t Signature;
+ /** These contain the version of the cache file */
+ map_number_t MajorVersion;
+ map_number_t MinorVersion;
+ /** \brief indicates if the cache should be erased
+
+ Dirty is true if the cache file was opened for reading, the client
+ expects to have written things to it and have not fully synced it.
+ The file should be erased and rebuilt if it is true. */
+ bool Dirty;
+
+ /** \brief Size of structure values
+
+ All *Sz variables contains the sizeof() that particular structure.
+ It is used as an extra consistency check on the structure of the file.
+
+ If any of the size values do not exactly match what the client expects
+ then the client should refuse the load the file. */
+ uint16_t HeaderSz;
+ map_number_t GroupSz;
+ map_number_t PackageSz;
+ map_number_t ReleaseFileSz;
+ map_number_t PackageFileSz;
+ map_number_t VersionSz;
+ map_number_t DescriptionSz;
+ map_number_t DependencySz;
+ map_number_t DependencyDataSz;
+ map_number_t ProvidesSz;
+ map_number_t VerFileSz;
+ map_number_t DescFileSz;
+
+ /** \brief Structure counts
+
+ These indicate the number of each structure contained in the cache.
+ PackageCount is especially useful for generating user state structures.
+ See Package::Id for more info. */
+ map_id_t GroupCount;
+ map_id_t PackageCount;
+ map_id_t VersionCount;
+ map_id_t DescriptionCount;
+ map_id_t DependsCount;
+ map_id_t DependsDataCount;
+ map_fileid_t ReleaseFileCount;
+ map_fileid_t PackageFileCount;
+ map_fileid_t VerFileCount;
+ map_fileid_t DescFileCount;
+ map_id_t ProvidesCount;
+
+ /** \brief index of the first PackageFile structure
+
+ The PackageFile structures are singly linked lists that represent
+ all package files that have been merged into the cache. */
+ map_pointer_t FileList;
+ /** \brief index of the first ReleaseFile structure */
+ map_pointer_t RlsFileList;
+
+ /** \brief String representing the version system used */
+ map_pointer_t VerSysName;
+ /** \brief native architecture the cache was built against */
+ map_pointer_t Architecture;
+ /** \brief all architectures the cache was built against */
+ map_pointer_t Architectures;
+ /** \brief The maximum size of a raw entry from the original Package file */
+ map_filesize_t MaxVerFileSize;
+ /** \brief The maximum size of a raw entry from the original Translation file */
+ map_filesize_t MaxDescFileSize;
+
+ /** \brief The Pool structures manage the allocation pools that the generator uses
+
+ Start indicates the first byte of the pool, Count is the number of objects
+ remaining in the pool and ItemSize is the structure size (alignment factor)
+ of the pool. An ItemSize of 0 indicates the pool is empty. There should be
+ the same number of pools as there are structure types. The generator
+ stores this information so future additions can make use of any unused pool
+ blocks. */
+ DynamicMMap::Pool Pools[12];
+
+ /** \brief hash tables providing rapid group/package name lookup
+
+ Each group/package name is inserted into a hash table using pkgCache::Hash(const &string)
+ By iterating over each entry in the hash table it is possible to iterate over
+ the entire list of packages. Hash Collisions are handled with a singly linked
+ list of packages based at the hash item. The linked list contains only
+ packages that match the hashing function.
+ In the PkgHashTable is it possible that multiple packages have the same name -
+ these packages are stored as a sequence in the list.
+ The size of both tables is the same. */
+ uint32_t HashTableSize;
+ uint32_t GetHashTableSize() const { return HashTableSize; }
+ void SetHashTableSize(unsigned int const sz) { HashTableSize = sz; }
+ map_pointer_t GetArchitectures() const { return Architectures; }
+ void SetArchitectures(map_pointer_t const idx) { Architectures = idx; }
+ map_pointer_t * PkgHashTableP() const { return (map_pointer_t*) (this + 1); }
+ map_pointer_t * GrpHashTableP() const { return PkgHashTableP() + GetHashTableSize(); }
+
+ /** \brief Hash of the file (TODO: Rename) */
+ map_filesize_small_t CacheFileSize;
+
+ bool CheckSizes(Header &Against) const APT_PURE;
+ Header();
+};
+ /*}}}*/
+// Group structure /*{{{*/
+/** \brief groups architecture depending packages together
+
+ On or more packages with the same name form a group, so we have
+ a simple way to access a package built for different architectures
+ Group exists in a singly linked list of group records starting at
+ the hash index of the name in the pkgCache::Header::GrpHashTable */
+struct pkgCache::Group
+{
+ /** \brief Name of the group */
+ map_stringitem_t Name;
+
+ // Linked List
+ /** \brief Link to the first package which belongs to the group */
+ map_pointer_t FirstPackage; // Package
+ /** \brief Link to the last package which belongs to the group */
+ map_pointer_t LastPackage; // Package
+ /** \brief Link to the next Group */
+ map_pointer_t Next; // Group
+ /** \brief unique sequel ID */
+ map_id_t ID;
+
+};
+ /*}}}*/
+// Package structure /*{{{*/
+/** \brief contains information for a single unique package
+
+ There can be any number of versions of a given package.
+ Package exists in a singly linked list of package records starting at
+ the hash index of the name in the pkgCache::Header::PkgHashTable
+
+ A package can be created for every architecture so package names are
+ not unique, but it is guaranteed that packages with the same name
+ are sequencel ordered in the list. Packages with the same name can be
+ accessed with the Group.
+*/
+struct pkgCache::Package
+{
+ /** \brief Name of the package
+ * Note that the access method Name() will remain. It is just this data member
+ * deprecated as this information is already stored and available via the
+ * associated Group – so it is wasting precious binary cache space */
+ APT_DEPRECATED_MSG("Use the .Name() method instead of accessing the member directly") map_stringitem_t Name;
+ /** \brief Architecture of the package */
+ map_stringitem_t Arch;
+ /** \brief Base of a singly linked list of versions
+
+ Each structure represents a unique version of the package.
+ The version structures contain links into PackageFile and the
+ original text file as well as detailed information about the size
+ and dependencies of the specific package. In this way multiple
+ versions of a package can be cleanly handled by the system.
+ Furthermore, this linked list is guaranteed to be sorted
+ from Highest version to lowest version with no duplicate entries. */
+ map_pointer_t VersionList; // Version
+ /** \brief index to the installed version */
+ map_pointer_t CurrentVer; // Version
+ /** \brief index of the group this package belongs to */
+ map_pointer_t Group; // Group the Package belongs to
+
+ // Linked list
+ /** \brief Link to the next package in the same bucket */
+ map_pointer_t NextPackage; // Package
+ /** \brief List of all dependencies on this package */
+ map_pointer_t RevDepends; // Dependency
+ /** \brief List of all "packages" this package provide */
+ map_pointer_t ProvidesList; // Provides
+
+ // Install/Remove/Purge etc
+ /** \brief state that the user wishes the package to be in */
+ map_number_t SelectedState; // What
+ /** \brief installation state of the package
+
+ This should be "ok" but in case the installation failed
+ it will be different.
+ */
+ map_number_t InstState; // Flags
+ /** \brief indicates if the package is installed */
+ map_number_t CurrentState; // State
+
+ /** \brief unique sequel ID
+
+ ID is a unique value from 0 to Header->PackageCount assigned by the generator.
+ This allows clients to create an array of size PackageCount and use it to store
+ state information for the package map. For instance the status file emitter uses
+ this to track which packages have been emitted already. */
+ map_id_t ID;
+ /** \brief some useful indicators of the package's state */
+ map_flags_t Flags;
+};
+ /*}}}*/
+// Release File structure /*{{{*/
+/** \brief stores information about the release files used to generate the cache
+
+ PackageFiles reference ReleaseFiles as we need to keep record of which
+ version belongs to which release e.g. for pinning. */
+struct pkgCache::ReleaseFile
+{
+ /** \brief physical disk file that this ReleaseFile represents */
+ map_stringitem_t FileName;
+ /** \brief the release information
+
+ Please see the files document for a description of what the
+ release information means. */
+ map_stringitem_t Archive;
+ map_stringitem_t Codename;
+ map_stringitem_t Version;
+ map_stringitem_t Origin;
+ map_stringitem_t Label;
+ /** \brief The site the index file was fetched from */
+ map_stringitem_t Site;
+
+ /** \brief Size of the file
+
+ Used together with the modification time as a
+ simple check to ensure that the Packages
+ file has not been altered since Cache generation. */
+ map_filesize_t Size;
+ /** \brief Modification time for the file */
+ time_t mtime;
+
+ /** @TODO document PackageFile::Flags */
+ map_flags_t Flags;
+
+ // Linked list
+ /** \brief Link to the next ReleaseFile in the Cache */
+ map_pointer_t NextFile;
+ /** \brief unique sequel ID */
+ map_fileid_t ID;
+};
+ /*}}}*/
+// Package File structure /*{{{*/
+/** \brief stores information about the files used to generate the cache
+
+ Package files are referenced by Version structures to be able to know
+ after the generation still from which Packages file includes this Version
+ as we need this information later on e.g. for pinning. */
+struct pkgCache::PackageFile
+{
+ /** \brief physical disk file that this PackageFile represents */
+ map_stringitem_t FileName;
+ /** \brief the release information */
+ map_pointer_t Release;
+
+ map_stringitem_t Component;
+ map_stringitem_t Architecture;
+
+ /** \brief indicates what sort of index file this is
+
+ @TODO enumerate at least the possible indexes */
+ map_stringitem_t IndexType;
+ /** \brief Size of the file
+
+ Used together with the modification time as a
+ simple check to ensure that the Packages
+ file has not been altered since Cache generation. */
+ map_filesize_t Size;
+ /** \brief Modification time for the file */
+ time_t mtime;
+
+ /** @TODO document PackageFile::Flags */
+ map_flags_t Flags;
+
+ // Linked list
+ /** \brief Link to the next PackageFile in the Cache */
+ map_pointer_t NextFile; // PackageFile
+ /** \brief unique sequel ID */
+ map_fileid_t ID;
+};
+ /*}}}*/
+// VerFile structure /*{{{*/
+/** \brief associates a version with a PackageFile
+
+ This allows a full description of all Versions in all files
+ (and hence all sources) under consideration. */
+struct pkgCache::VerFile
+{
+ /** \brief index of the package file that this version was found in */
+ map_pointer_t File; // PackageFile
+ /** \brief next step in the linked list */
+ map_pointer_t NextFile; // PkgVerFile
+ /** \brief position in the package file */
+ map_filesize_t Offset; // File offset
+ /** @TODO document pkgCache::VerFile::Size */
+ map_filesize_t Size;
+};
+ /*}}}*/
+// DescFile structure /*{{{*/
+/** \brief associates a description with a Translation file */
+struct pkgCache::DescFile
+{
+ /** \brief index of the file that this description was found in */
+ map_pointer_t File; // PackageFile
+ /** \brief next step in the linked list */
+ map_pointer_t NextFile; // PkgVerFile
+ /** \brief position in the file */
+ map_filesize_t Offset; // File offset
+ /** @TODO document pkgCache::DescFile::Size */
+ map_filesize_t Size;
+};
+ /*}}}*/
+// Version structure /*{{{*/
+/** \brief information for a single version of a package
+
+ The version list is always sorted from highest version to lowest
+ version by the generator. Equal version numbers are either merged
+ or handled as separate versions based on the Hash value. */
+APT_IGNORE_DEPRECATED_PUSH
+struct pkgCache::Version
+{
+ /** \brief complete version string */
+ map_stringitem_t VerStr;
+ /** \brief section this version is filled in */
+ map_stringitem_t Section;
+ /** \brief source package name this version comes from
+ Always contains the name, even if it is the same as the binary name */
+ map_stringitem_t SourcePkgName;
+ /** \brief source version this version comes from
+ Always contains the version string, even if it is the same as the binary version */
+ map_stringitem_t SourceVerStr;
+
+ /** \brief Multi-Arch capabilities of a package version */
+ enum VerMultiArch { No = 0, /*!< is the default and doesn't trigger special behaviour */
+ All = (1<<0), /*!< will cause that Ver.Arch() will report "all" */
+ Foreign = (1<<1), /*!< can satisfy dependencies in another architecture */
+ Same = (1<<2), /*!< can be co-installed with itself from other architectures */
+ Allowed = (1<<3), /*!< other packages are allowed to depend on thispkg:any */
+ AllForeign = All | Foreign,
+ AllAllowed = All | Allowed };
+
+ /** \brief deprecated variant of No */
+ static const APT_DEPRECATED_MSG("The default value of the Multi-Arch field is no, not none") VerMultiArch None = No;
+
+ /** \brief stores the MultiArch capabilities of this version
+
+ Flags used are defined in pkgCache::Version::VerMultiArch
+ */
+ map_number_t MultiArch;
+
+ /** \brief references all the PackageFile's that this version came from
+
+ FileList can be used to determine what distribution(s) the Version
+ applies to. If FileList is 0 then this is a blank version.
+ The structure should also have a 0 in all other fields excluding
+ pkgCache::Version::VerStr and Possibly pkgCache::Version::NextVer. */
+ map_pointer_t FileList; // VerFile
+ /** \brief next (lower or equal) version in the linked list */
+ map_pointer_t NextVer; // Version
+ /** \brief next description in the linked list */
+ map_pointer_t DescriptionList; // Description
+ /** \brief base of the dependency list */
+ map_pointer_t DependsList; // Dependency
+ /** \brief links to the owning package
+
+ This allows reverse dependencies to determine the package */
+ map_pointer_t ParentPkg; // Package
+ /** \brief list of pkgCache::Provides */
+ map_pointer_t ProvidesList; // Provides
+
+ /** \brief archive size for this version
+
+ For Debian this is the size of the .deb file. */
+ map_filesize_t Size; // These are the .deb size
+ /** \brief uncompressed size for this version */
+ map_filesize_t InstalledSize;
+ /** \brief characteristic value representing this version
+
+ No two packages in existence should have the same VerStr
+ and Hash with different contents. */
+ unsigned short Hash;
+ /** \brief unique sequel ID */
+ map_id_t ID;
+ /** \brief parsed priority value */
+ map_number_t Priority;
+};
+APT_IGNORE_DEPRECATED_POP
+ /*}}}*/
+// Description structure /*{{{*/
+/** \brief datamember of a linked list of available description for a version */
+struct pkgCache::Description
+{
+ /** \brief Language code of this description (translation)
+
+ If the value has a 0 length then this is read using the Package
+ file else the Translation-CODE file is used. */
+ map_stringitem_t language_code;
+ /** \brief MD5sum of the original description
+
+ Used to map Translations of a description to a version
+ and to check that the Translation is up-to-date. */
+ map_stringitem_t md5sum;
+
+ /** @TODO document pkgCache::Description::FileList */
+ map_pointer_t FileList; // DescFile
+ /** \brief next translation for this description */
+ map_pointer_t NextDesc; // Description
+ /** \brief the text is a description of this package */
+ map_pointer_t ParentPkg; // Package
+
+ /** \brief unique sequel ID */
+ map_id_t ID;
+};
+ /*}}}*/
+// Dependency structure /*{{{*/
+/** \brief information for a single dependency record
+
+ The records are split up like this to ease processing by the client.
+ The base of the linked list is pkgCache::Version::DependsList.
+ All forms of dependencies are recorded here including Depends,
+ Recommends, Suggests, Enhances, Conflicts, Replaces and Breaks. */
+struct pkgCache::DependencyData
+{
+ /** \brief string of the version the dependency is applied against */
+ map_stringitem_t Version;
+ /** \brief index of the package this depends applies to
+
+ The generator will - if the package does not already exist -
+ create a blank (no version records) package. */
+ map_pointer_t Package; // Package
+
+ /** \brief Dependency type - Depends, Recommends, Conflicts, etc */
+ map_number_t Type;
+ /** \brief comparison operator specified on the depends line
+
+ If the high bit is set then it is a logical OR with the previous record. */
+ map_flags_t CompareOp;
+
+ map_pointer_t NextData;
+};
+struct pkgCache::Dependency
+{
+ map_pointer_t DependencyData; // DependencyData
+ /** \brief version of the package which has the depends */
+ map_pointer_t ParentVer; // Version
+ /** \brief next reverse dependency of this package */
+ map_pointer_t NextRevDepends; // Dependency
+ /** \brief next dependency of this version */
+ map_pointer_t NextDepends; // Dependency
+
+ /** \brief unique sequel ID */
+ map_id_t ID;
+};
+ /*}}}*/
+// Provides structure /*{{{*/
+/** \brief handles virtual packages
+
+ When a Provides: line is encountered a new provides record is added
+ associating the package with a virtual package name.
+ The provides structures are linked off the package structures.
+ This simplifies the analysis of dependencies and other aspects A provides
+ refers to a specific version of a specific package, not all versions need to
+ provide that provides.*/
+struct pkgCache::Provides
+{
+ /** \brief index of the package providing this */
+ map_pointer_t ParentPkg; // Package
+ /** \brief index of the version this provide line applies to */
+ map_pointer_t Version; // Version
+ /** \brief version in the provides line (if any)
+
+ This version allows dependencies to depend on specific versions of a
+ Provides, as well as allowing Provides to override existing packages. */
+ map_stringitem_t ProvideVersion;
+ map_flags_t Flags;
+ /** \brief next provides (based of package) */
+ map_pointer_t NextProvides; // Provides
+ /** \brief next provides (based of version) */
+ map_pointer_t NextPkgProv; // Provides
+};
+ /*}}}*/
+// UNUSED StringItem structure /*{{{*/
+struct APT_DEPRECATED_MSG("No longer used in cache generation without a replacement") pkgCache::StringItem
+{
+ /** \brief string this refers to */
+ map_ptrloc String; // StringItem
+ /** \brief Next link in the chain */
+ map_ptrloc NextItem; // StringItem
+};
+ /*}}}*/
+
+inline char const * pkgCache::NativeArch()
+ { return StrP + HeaderP->Architecture; }
+
+#include <apt-pkg/cacheiterators.h>
+
+ inline pkgCache::GrpIterator pkgCache::GrpBegin()
+ {
+ return GrpIterator(*this);
+ }
+ inline pkgCache::GrpIterator pkgCache::GrpEnd()
+ {
+ return GrpIterator(*this, GrpP);}
+inline pkgCache::PkgIterator pkgCache::PkgBegin()
+ {return PkgIterator(*this);}
+inline pkgCache::PkgIterator pkgCache::PkgEnd()
+ {return PkgIterator(*this,PkgP);}
+inline pkgCache::PkgFileIterator pkgCache::FileBegin()
+ {return PkgFileIterator(*this,PkgFileP + HeaderP->FileList);}
+inline pkgCache::PkgFileIterator pkgCache::FileEnd()
+ {return PkgFileIterator(*this,PkgFileP);}
+inline pkgCache::RlsFileIterator pkgCache::RlsFileBegin()
+ {return RlsFileIterator(*this,RlsFileP + HeaderP->RlsFileList);}
+inline pkgCache::RlsFileIterator pkgCache::RlsFileEnd()
+ {return RlsFileIterator(*this,RlsFileP);}
+
+
+// Oh I wish for Real Name Space Support
+class pkgCache::Namespace /*{{{*/
+{
+ public:
+ typedef pkgCache::GrpIterator GrpIterator;
+ typedef pkgCache::PkgIterator PkgIterator;
+ typedef pkgCache::VerIterator VerIterator;
+ typedef pkgCache::DescIterator DescIterator;
+ typedef pkgCache::DepIterator DepIterator;
+ typedef pkgCache::PrvIterator PrvIterator;
+ typedef pkgCache::RlsFileIterator RlsFileIterator;
+ typedef pkgCache::PkgFileIterator PkgFileIterator;
+ typedef pkgCache::VerFileIterator VerFileIterator;
+ typedef pkgCache::Version Version;
+ typedef pkgCache::Description Description;
+ typedef pkgCache::Package Package;
+ typedef pkgCache::Header Header;
+ typedef pkgCache::Dep Dep;
+ typedef pkgCache::Flag Flag;
+};
+ /*}}}*/
+#undef __PKGLIB_IN_PKGCACHE_H
+#endif
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
new file mode 100644
index 0000000..5a3b65b
--- /dev/null
+++ b/apt-pkg/pkgcachegen.cc
@@ -0,0 +1,1860 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Cache Generator - Generator for the cache structure.
+
+ This builds the cache structure from the abstract package list parser.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashsum_template.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/version.h>
+
+#include <algorithm>
+#include <iostream>
+#include <memory>
+#include <string>
+#include <vector>
+#include <stddef.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+template<class T> using Dynamic = pkgCacheGenerator::Dynamic<T>;
+typedef std::vector<pkgIndexFile *>::iterator FileIterator;
+template <typename Iter> std::vector<Iter*> pkgCacheGenerator::Dynamic<Iter>::toReMap;
+
+static bool IsDuplicateDescription(pkgCache &Cache, pkgCache::DescIterator Desc,
+ APT::StringView CurMd5, std::string const &CurLang);
+
+using std::string;
+using APT::StringView;
+
+// CacheGenerator::pkgCacheGenerator - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* We set the dirty flag and make sure that is written to the disk */
+pkgCacheGenerator::pkgCacheGenerator(DynamicMMap *pMap,OpProgress *Prog) :
+ Map(*pMap), Cache(pMap,false), Progress(Prog),
+ CurrentRlsFile(nullptr), CurrentFile(nullptr), d(nullptr)
+{
+}
+bool pkgCacheGenerator::Start()
+{
+ if (Map.Size() == 0)
+ {
+ // Setup the map interface..
+ Cache.HeaderP = (pkgCache::Header *)Map.Data();
+ _error->PushToStack();
+ Map.RawAllocate(sizeof(pkgCache::Header));
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ if (newError)
+ return false;
+ if (Map.Size() <= 0)
+ return false;
+
+ Map.UsePools(*Cache.HeaderP->Pools,sizeof(Cache.HeaderP->Pools)/sizeof(Cache.HeaderP->Pools[0]));
+
+ // Starting header
+ *Cache.HeaderP = pkgCache::Header();
+
+ // make room for the hashtables for packages and groups
+ if (Map.RawAllocate(2 * (Cache.HeaderP->GetHashTableSize() * sizeof(map_pointer_t))) == 0)
+ return false;
+
+ map_stringitem_t const idxVerSysName = WriteStringInMap(_system->VS->Label);
+ if (unlikely(idxVerSysName == 0))
+ return false;
+ map_stringitem_t const idxArchitecture = StoreString(MIXED, _config->Find("APT::Architecture"));
+ if (unlikely(idxArchitecture == 0))
+ return false;
+ map_stringitem_t idxArchitectures;
+
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ if (archs.size() > 1)
+ {
+ std::vector<std::string>::const_iterator a = archs.begin();
+ std::string list = *a;
+ for (++a; a != archs.end(); ++a)
+ list.append(",").append(*a);
+ idxArchitectures = WriteStringInMap(list);
+ if (unlikely(idxArchitectures == 0))
+ return false;
+ }
+ else
+ idxArchitectures = idxArchitecture;
+
+ Cache.HeaderP = (pkgCache::Header *)Map.Data();
+ Cache.HeaderP->VerSysName = idxVerSysName;
+ Cache.HeaderP->Architecture = idxArchitecture;
+ Cache.HeaderP->SetArchitectures(idxArchitectures);
+
+ // Calculate the hash for the empty map, so ReMap does not fail
+ Cache.HeaderP->CacheFileSize = Cache.CacheHash();
+ Cache.ReMap();
+ }
+ else
+ {
+ // Map directly from the existing file
+ Cache.ReMap();
+ Map.UsePools(*Cache.HeaderP->Pools,sizeof(Cache.HeaderP->Pools)/sizeof(Cache.HeaderP->Pools[0]));
+ if (Cache.VS != _system->VS)
+ return _error->Error(_("Cache has an incompatible versioning system"));
+ }
+
+ Cache.HeaderP->Dirty = true;
+ Map.Sync(0,sizeof(pkgCache::Header));
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::~pkgCacheGenerator - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* We sync the data then unset the dirty flag in two steps so as to
+ advoid a problem during a crash */
+pkgCacheGenerator::~pkgCacheGenerator()
+{
+ if (_error->PendingError() == true || Map.validData() == false)
+ return;
+ if (Map.Sync() == false)
+ return;
+
+ Cache.HeaderP->Dirty = false;
+ Cache.HeaderP->CacheFileSize = Cache.CacheHash();
+
+ if (_config->FindB("Debug::pkgCacheGen", false))
+ std::clog << "Produced cache with hash " << Cache.HeaderP->CacheFileSize << std::endl;
+ Map.Sync(0,sizeof(pkgCache::Header));
+}
+ /*}}}*/
+void pkgCacheGenerator::ReMap(void const * const oldMap, void const * const newMap, size_t oldSize) {/*{{{*/
+ // Prevent multiple remaps of the same iterator. If seen.insert(iterator)
+ // returns (something, true) the iterator was not yet seen and we can
+ // remap it.
+ std::unordered_set<void *> seen;
+ if (oldMap == newMap)
+ return;
+
+ if (_config->FindB("Debug::pkgCacheGen", false))
+ std::clog << "Remapping from " << oldMap << " to " << newMap << std::endl;
+
+ Cache.ReMap(false);
+
+ if (CurrentFile != nullptr)
+ CurrentFile += static_cast<pkgCache::PackageFile const *>(newMap) - static_cast<pkgCache::PackageFile const *>(oldMap);
+ if (CurrentRlsFile != nullptr)
+ CurrentRlsFile += static_cast<pkgCache::ReleaseFile const *>(newMap) - static_cast<pkgCache::ReleaseFile const *>(oldMap);
+
+ for (std::vector<pkgCache::GrpIterator*>::const_iterator i = Dynamic<pkgCache::GrpIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::GrpIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (std::vector<pkgCache::PkgIterator*>::const_iterator i = Dynamic<pkgCache::PkgIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::PkgIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (std::vector<pkgCache::VerIterator*>::const_iterator i = Dynamic<pkgCache::VerIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::VerIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (std::vector<pkgCache::DepIterator*>::const_iterator i = Dynamic<pkgCache::DepIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::DepIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (std::vector<pkgCache::DescIterator*>::const_iterator i = Dynamic<pkgCache::DescIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::DescIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (std::vector<pkgCache::PrvIterator*>::const_iterator i = Dynamic<pkgCache::PrvIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::PrvIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (std::vector<pkgCache::PkgFileIterator*>::const_iterator i = Dynamic<pkgCache::PkgFileIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::PkgFileIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (std::vector<pkgCache::RlsFileIterator*>::const_iterator i = Dynamic<pkgCache::RlsFileIterator>::toReMap.begin();
+ i != Dynamic<pkgCache::RlsFileIterator>::toReMap.end(); ++i)
+ if (std::get<1>(seen.insert(*i)) == true)
+ (*i)->ReMap(oldMap, newMap);
+ for (APT::StringView* ViewP : Dynamic<APT::StringView>::toReMap) {
+ if (std::get<1>(seen.insert(ViewP)) == false)
+ continue;
+ // Ignore views outside of the cache.
+ if (ViewP->data() < static_cast<const char*>(oldMap)
+ || ViewP->data() > static_cast<const char*>(oldMap) + oldSize)
+ continue;
+ const char *data = ViewP->data() + (static_cast<const char*>(newMap) - static_cast<const char*>(oldMap));
+ *ViewP = StringView(data , ViewP->size());
+ }
+} /*}}}*/
+// CacheGenerator::WriteStringInMap /*{{{*/
+map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String,
+ const unsigned long &Len) {
+ size_t oldSize = Map.Size();
+ void const * const oldMap = Map.Data();
+ map_stringitem_t const index = Map.WriteString(String, Len);
+ if (index != 0)
+ ReMap(oldMap, Map.Data(), oldSize);
+ return index;
+}
+ /*}}}*/
+// CacheGenerator::WriteStringInMap /*{{{*/
+map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String) {
+ size_t oldSize = Map.Size();
+ void const * const oldMap = Map.Data();
+ map_stringitem_t const index = Map.WriteString(String);
+ if (index != 0)
+ ReMap(oldMap, Map.Data(), oldSize);
+ return index;
+}
+ /*}}}*/
+map_pointer_t pkgCacheGenerator::AllocateInMap(const unsigned long &size) {/*{{{*/
+ size_t oldSize = Map.Size();
+ void const * const oldMap = Map.Data();
+ map_pointer_t const index = Map.Allocate(size);
+ if (index != 0)
+ ReMap(oldMap, Map.Data(), oldSize);
+ return index;
+}
+ /*}}}*/
+// CacheGenerator::MergeList - Merge the package list /*{{{*/
+// ---------------------------------------------------------------------
+/* This provides the generation of the entries in the cache. Each loop
+ goes through a single package record from the underlying parse engine. */
+bool pkgCacheGenerator::MergeList(ListParser &List,
+ pkgCache::VerIterator *OutVer)
+{
+ List.Owner = this;
+
+ unsigned int Counter = 0;
+ while (List.Step() == true)
+ {
+ string const PackageName = List.Package();
+ if (PackageName.empty() == true)
+ return false;
+
+ Counter++;
+ if (Counter % 100 == 0 && Progress != 0)
+ Progress->Progress(List.Offset());
+
+ APT::StringView Arch = List.Architecture();
+ Dynamic<APT::StringView> DynArch(Arch);
+ APT::StringView Version = List.Version();
+ Dynamic<APT::StringView> DynVersion(Version);
+ if (Version.empty() == true && Arch.empty() == true)
+ {
+ // package descriptions
+ if (MergeListGroup(List, PackageName) == false)
+ return false;
+ continue;
+ }
+
+ // Get a pointer to the package structure
+ pkgCache::PkgIterator Pkg;
+ Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
+ if (NewPackage(Pkg, PackageName, Arch) == false)
+ // TRANSLATOR: The first placeholder is a package name,
+ // the other two should be copied verbatim as they include debug info
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ PackageName.c_str(), "NewPackage", 1);
+
+
+ if (Version.empty() == true)
+ {
+ if (MergeListPackage(List, Pkg) == false)
+ return false;
+ }
+ else
+ {
+ if (MergeListVersion(List, Pkg, Version, OutVer) == false)
+ return false;
+ }
+
+ if (OutVer != 0)
+ return true;
+ }
+
+ if (Cache.HeaderP->PackageCount >= std::numeric_limits<map_id_t>::max())
+ return _error->Error(_("Wow, you exceeded the number of package "
+ "names this APT is capable of."));
+ if (Cache.HeaderP->VersionCount >= std::numeric_limits<map_id_t>::max())
+ return _error->Error(_("Wow, you exceeded the number of versions "
+ "this APT is capable of."));
+ if (Cache.HeaderP->DescriptionCount >= std::numeric_limits<map_id_t>::max())
+ return _error->Error(_("Wow, you exceeded the number of descriptions "
+ "this APT is capable of."));
+ if (Cache.HeaderP->DependsCount >= std::numeric_limits<map_id_t>::max())
+ return _error->Error(_("Wow, you exceeded the number of dependencies "
+ "this APT is capable of."));
+
+ return true;
+}
+// CacheGenerator::MergeListGroup /*{{{*/
+bool pkgCacheGenerator::MergeListGroup(ListParser &List, std::string const &GrpName)
+{
+ pkgCache::GrpIterator Grp = Cache.FindGrp(GrpName);
+ // a group has no data on it's own, only packages have it but these
+ // stanzas like this come from Translation- files to add descriptions,
+ // but without a version we don't need a description for it…
+ if (Grp.end() == true)
+ return true;
+ Dynamic<pkgCache::GrpIterator> DynGrp(Grp);
+
+ pkgCache::PkgIterator Pkg;
+ Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
+ for (Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg))
+ if (MergeListPackage(List, Pkg) == false)
+ return false;
+
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::MergeListPackage /*{{{*/
+bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator &Pkg)
+{
+ // we first process the package, then the descriptions
+ // (for deb this package processing is in fact a no-op)
+ pkgCache::VerIterator Ver(Cache);
+ Dynamic<pkgCache::VerIterator> DynVer(Ver);
+ if (List.UsePackage(Pkg, Ver) == false)
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "UsePackage", 1);
+
+ // Find the right version to write the description
+ StringView CurMd5 = List.Description_md5();
+ std::vector<std::string> availDesc = List.AvailableDescriptionLanguages();
+ for (Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
+ {
+ pkgCache::DescIterator VerDesc = Ver.DescriptionList();
+
+ // a version can only have one md5 describing it
+ if (VerDesc.end() == true || Cache.ViewString(VerDesc->md5sum) != CurMd5)
+ continue;
+
+ map_stringitem_t md5idx = VerDesc->md5sum;
+ for (std::vector<std::string>::const_iterator CurLang = availDesc.begin(); CurLang != availDesc.end(); ++CurLang)
+ {
+ // don't add a new description if we have one for the given
+ // md5 && language
+ if (IsDuplicateDescription(Cache, VerDesc, CurMd5, *CurLang) == true)
+ continue;
+
+ AddNewDescription(List, Ver, *CurLang, CurMd5, md5idx);
+ }
+
+ // we can stop here as all "same" versions will share the description
+ break;
+ }
+
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::MergeListVersion /*{{{*/
+bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator &Pkg,
+ APT::StringView const &Version, pkgCache::VerIterator* &OutVer)
+{
+ pkgCache::VerIterator Ver = Pkg.VersionList();
+ Dynamic<pkgCache::VerIterator> DynVer(Ver);
+ map_pointer_t *LastVer = &Pkg->VersionList;
+ void const * oldMap = Map.Data();
+
+ unsigned short const Hash = List.VersionHash();
+ if (Ver.end() == false)
+ {
+ /* We know the list is sorted so we use that fact in the search.
+ Insertion of new versions is done with correct sorting */
+ int Res = 1;
+ for (; Ver.end() == false; LastVer = &Ver->NextVer, ++Ver)
+ {
+ char const * const VerStr = Ver.VerStr();
+ Res = Cache.VS->DoCmpVersion(Version.data(), Version.data() + Version.length(),
+ VerStr, VerStr + strlen(VerStr));
+ // Version is higher as current version - insert here
+ if (Res > 0)
+ break;
+ // Versionstrings are equal - is hash also equal?
+ if (Res == 0)
+ {
+ if (List.SameVersion(Hash, Ver) == true)
+ break;
+ // sort (volatile) sources above not-sources like the status file
+ if (CurrentFile == nullptr || (CurrentFile->Flags & pkgCache::Flag::NotSource) == 0)
+ {
+ auto VF = Ver.FileList();
+ for (; VF.end() == false; ++VF)
+ if (VF.File().Flagged(pkgCache::Flag::NotSource) == false)
+ break;
+ if (VF.end() == true)
+ break;
+ }
+ }
+ // proceed with the next till we have either the right
+ // or we found another version (which will be lower)
+ }
+
+ /* We already have a version for this item, record that we saw it */
+ if (Res == 0 && Ver.end() == false && Ver->Hash == Hash)
+ {
+ if (List.UsePackage(Pkg,Ver) == false)
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "UsePackage", 2);
+
+ if (NewFileVer(Ver,List) == false)
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "NewFileVer", 1);
+
+ // Read only a single record and return
+ if (OutVer != 0)
+ {
+ *OutVer = Ver;
+ return true;
+ }
+
+ return true;
+ }
+ }
+
+ // Add a new version
+ map_pointer_t const verindex = NewVersion(Ver, Version, Pkg.Index(), Hash, *LastVer);
+ if (unlikely(verindex == 0))
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "NewVersion", 1);
+
+ if (oldMap != Map.Data())
+ LastVer += static_cast<map_pointer_t const *>(Map.Data()) - static_cast<map_pointer_t const *>(oldMap);
+ *LastVer = verindex;
+
+ if (unlikely(List.NewVersion(Ver) == false))
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "NewVersion", 2);
+
+ if (unlikely(List.UsePackage(Pkg,Ver) == false))
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "UsePackage", 3);
+
+ if (unlikely(NewFileVer(Ver,List) == false))
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "NewFileVer", 2);
+
+ pkgCache::GrpIterator Grp = Pkg.Group();
+ Dynamic<pkgCache::GrpIterator> DynGrp(Grp);
+
+ /* If it is the first version of this package we need to add implicit
+ Multi-Arch dependencies to all other package versions in the group now -
+ otherwise we just add them for this new version */
+ if (Pkg.VersionList()->NextVer == 0)
+ {
+ pkgCache::PkgIterator P = Grp.PackageList();
+ Dynamic<pkgCache::PkgIterator> DynP(P);
+ for (; P.end() != true; P = Grp.NextPkg(P))
+ {
+ if (P->ID == Pkg->ID)
+ continue;
+ pkgCache::VerIterator V = P.VersionList();
+ Dynamic<pkgCache::VerIterator> DynV(V);
+ for (; V.end() != true; ++V)
+ if (unlikely(AddImplicitDepends(V, Pkg) == false))
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "AddImplicitDepends", 1);
+ }
+ }
+ if (unlikely(AddImplicitDepends(Grp, Pkg, Ver) == false))
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Pkg.Name(), "AddImplicitDepends", 2);
+
+ // Read only a single record and return
+ if (OutVer != 0)
+ {
+ *OutVer = Ver;
+ return true;
+ }
+
+ /* Record the Description(s) based on their master md5sum */
+ StringView CurMd5 = List.Description_md5();
+
+ /* Before we add a new description we first search in the group for
+ a version with a description of the same MD5 - if so we reuse this
+ description group instead of creating our own for this version */
+ for (pkgCache::PkgIterator P = Grp.PackageList();
+ P.end() == false; P = Grp.NextPkg(P))
+ {
+ for (pkgCache::VerIterator V = P.VersionList();
+ V.end() == false; ++V)
+ {
+ if (V->DescriptionList == 0 || Cache.ViewString(V.DescriptionList()->md5sum) != CurMd5)
+ continue;
+ Ver->DescriptionList = V->DescriptionList;
+ }
+ }
+
+ // We haven't found reusable descriptions, so add the first description(s)
+ map_stringitem_t md5idx = Ver->DescriptionList == 0 ? 0 : Ver.DescriptionList()->md5sum;
+ std::vector<std::string> availDesc = List.AvailableDescriptionLanguages();
+ for (std::vector<std::string>::const_iterator CurLang = availDesc.begin(); CurLang != availDesc.end(); ++CurLang)
+ if (AddNewDescription(List, Ver, *CurLang, CurMd5, md5idx) == false)
+ return false;
+ return true;
+}
+ /*}}}*/
+bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterator &Ver, std::string const &lang, APT::StringView CurMd5, map_stringitem_t &md5idx) /*{{{*/
+{
+ pkgCache::DescIterator Desc;
+ Dynamic<pkgCache::DescIterator> DynDesc(Desc);
+
+ map_pointer_t const descindex = NewDescription(Desc, lang, CurMd5, md5idx);
+ if (unlikely(descindex == 0))
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Ver.ParentPkg().Name(), "NewDescription", 1);
+
+ md5idx = Desc->md5sum;
+ Desc->ParentPkg = Ver.ParentPkg().Index();
+
+ // we add at the end, so that the start is constant as we need
+ // that to be able to efficiently share these lists
+ pkgCache::DescIterator VerDesc = Ver.DescriptionList(); // old value might be invalid after ReMap
+ for (;VerDesc.end() == false && VerDesc->NextDesc != 0; ++VerDesc);
+ map_pointer_t * const LastNextDesc = (VerDesc.end() == true) ? &Ver->DescriptionList : &VerDesc->NextDesc;
+ *LastNextDesc = descindex;
+
+ if (NewFileDesc(Desc,List) == false)
+ return _error->Error(_("Error occurred while processing %s (%s%d)"),
+ Ver.ParentPkg().Name(), "NewFileDesc", 1);
+
+ return true;
+}
+ /*}}}*/
+ /*}}}*/
+// CacheGenerator::NewGroup - Add a new group /*{{{*/
+// ---------------------------------------------------------------------
+/* This creates a new group structure and adds it to the hash table */
+bool pkgCacheGenerator::NewGroup(pkgCache::GrpIterator &Grp, StringView Name)
+{
+ Dynamic<StringView> DName(Name);
+ Grp = Cache.FindGrp(Name);
+ if (Grp.end() == false)
+ return true;
+
+ // Get a structure
+ map_pointer_t const Group = AllocateInMap(sizeof(pkgCache::Group));
+ if (unlikely(Group == 0))
+ return false;
+
+ Grp = pkgCache::GrpIterator(Cache, Cache.GrpP + Group);
+ map_stringitem_t const idxName = StoreString(PKGNAME, Name);
+ if (unlikely(idxName == 0))
+ return false;
+ Grp->Name = idxName;
+
+ // Insert it into the hash table
+ unsigned long const Hash = Cache.Hash(Name);
+ map_pointer_t *insertAt = &Cache.HeaderP->GrpHashTableP()[Hash];
+
+ while (*insertAt != 0 && StringViewCompareFast(Name, Cache.ViewString((Cache.GrpP + *insertAt)->Name)) > 0)
+ insertAt = &(Cache.GrpP + *insertAt)->Next;
+ Grp->Next = *insertAt;
+ *insertAt = Group;
+
+ Grp->ID = Cache.HeaderP->GroupCount++;
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::NewPackage - Add a new package /*{{{*/
+// ---------------------------------------------------------------------
+/* This creates a new package structure and adds it to the hash table */
+bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg, StringView Name,
+ StringView Arch) {
+ pkgCache::GrpIterator Grp;
+ Dynamic<StringView> DName(Name);
+ Dynamic<StringView> DArch(Arch);
+ Dynamic<pkgCache::GrpIterator> DynGrp(Grp);
+ if (unlikely(NewGroup(Grp, Name) == false))
+ return false;
+
+ Pkg = Grp.FindPkg(Arch);
+ if (Pkg.end() == false)
+ return true;
+
+ // Get a structure
+ map_pointer_t const Package = AllocateInMap(sizeof(pkgCache::Package));
+ if (unlikely(Package == 0))
+ return false;
+ Pkg = pkgCache::PkgIterator(Cache,Cache.PkgP + Package);
+
+ // Set the name, arch and the ID
+ APT_IGNORE_DEPRECATED_PUSH
+ Pkg->Name = Grp->Name;
+ APT_IGNORE_DEPRECATED_POP
+ Pkg->Group = Grp.Index();
+ // all is mapped to the native architecture
+ map_stringitem_t const idxArch = (Arch == "all") ? Cache.HeaderP->Architecture : StoreString(MIXED, Arch);
+ if (unlikely(idxArch == 0))
+ return false;
+ Pkg->Arch = idxArch;
+ Pkg->ID = Cache.HeaderP->PackageCount++;
+
+ // Insert the package into our package list
+ if (Grp->FirstPackage == 0) // the group is new
+ {
+ Grp->FirstPackage = Package;
+ // Insert it into the hash table
+ map_id_t const Hash = Cache.Hash(Name);
+ map_pointer_t *insertAt = &Cache.HeaderP->PkgHashTableP()[Hash];
+ while (*insertAt != 0 && StringViewCompareFast(Name, Cache.ViewString((Cache.GrpP + (Cache.PkgP + *insertAt)->Group)->Name)) > 0)
+ insertAt = &(Cache.PkgP + *insertAt)->NextPackage;
+ Pkg->NextPackage = *insertAt;
+ *insertAt = Package;
+ }
+ else // Group the Packages together
+ {
+ // if sibling is provided by another package, this one is too
+ {
+ pkgCache::PkgIterator const M = Grp.FindPreferredPkg(false); // native or any foreign pkg will do
+ if (M.end() == false) {
+ pkgCache::PrvIterator Prv;
+ Dynamic<pkgCache::PrvIterator> DynPrv(Prv);
+ for (Prv = M.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if ((Prv->Flags & pkgCache::Flag::ArchSpecific) != 0)
+ continue;
+ pkgCache::VerIterator Ver = Prv.OwnerVer();
+ Dynamic<pkgCache::VerIterator> DynVer(Ver);
+ if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed ||
+ ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign &&
+ (Prv->Flags & pkgCache::Flag::MultiArchImplicit) == 0))
+ {
+ if (APT::Configuration::checkArchitecture(Ver.ParentPkg().Arch()) == false)
+ continue;
+ if (NewProvides(Ver, Pkg, Prv->ProvideVersion, Prv->Flags) == false)
+ return false;
+ }
+ }
+ }
+ }
+ // let M-A:foreign package siblings provide this package
+ {
+ pkgCache::PkgIterator P;
+ pkgCache::VerIterator Ver;
+ Dynamic<pkgCache::PkgIterator> DynP(P);
+ Dynamic<pkgCache::VerIterator> DynVer(Ver);
+
+ for (P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
+ {
+ if (APT::Configuration::checkArchitecture(P.Arch()) == false)
+ continue;
+ for (Ver = P.VersionList(); Ver.end() == false; ++Ver)
+ if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
+ if (NewProvides(Ver, Pkg, Ver->VerStr, pkgCache::Flag::MultiArchImplicit) == false)
+ return false;
+ }
+ }
+ // and negative dependencies, don't forget negative dependencies
+ {
+ pkgCache::PkgIterator const M = Grp.FindPreferredPkg(false);
+ if (M.end() == false) {
+ pkgCache::DepIterator Dep;
+ Dynamic<pkgCache::DepIterator> DynDep(Dep);
+ for (Dep = M.RevDependsList(); Dep.end() == false; ++Dep)
+ {
+ if ((Dep->CompareOp & (pkgCache::Dep::ArchSpecific | pkgCache::Dep::MultiArchImplicit)) != 0)
+ continue;
+ if (Dep->Type != pkgCache::Dep::DpkgBreaks && Dep->Type != pkgCache::Dep::Conflicts &&
+ Dep->Type != pkgCache::Dep::Replaces)
+ continue;
+ pkgCache::VerIterator Ver = Dep.ParentVer();
+ Dynamic<pkgCache::VerIterator> DynVer(Ver);
+ map_pointer_t * unused = NULL;
+ if (NewDepends(Pkg, Ver, Dep->Version, Dep->CompareOp, Dep->Type, unused) == false)
+ return false;
+ }
+ }
+ }
+
+ // this package is the new last package
+ pkgCache::PkgIterator LastPkg(Cache, Cache.PkgP + Grp->LastPackage);
+ Pkg->NextPackage = LastPkg->NextPackage;
+ LastPkg->NextPackage = Package;
+ }
+ Grp->LastPackage = Package;
+
+ // lazy-create foo (of amd64) provides foo:amd64 at the time we first need it
+ if (Arch == "any")
+ {
+ size_t const found = Name.rfind(':');
+ StringView ArchA = Name.substr(found + 1);
+ if (ArchA != "any")
+ {
+ // ArchA is used inside the loop which might remap (NameA is not used)
+ Dynamic<StringView> DynArchA(ArchA);
+ StringView NameA = Name.substr(0, found);
+ pkgCache::PkgIterator PkgA = Cache.FindPkg(NameA, ArchA);
+ Dynamic<pkgCache::PkgIterator> DynPkgA(PkgA);
+ if (PkgA.end())
+ {
+ Dynamic<StringView> DynNameA(NameA);
+ if (NewPackage(PkgA, NameA, ArchA) == false)
+ return false;
+ }
+ if (unlikely(PkgA.end()))
+ return _error->Fatal("NewPackage was successful for %s:%s,"
+ "but the package doesn't exist anyhow!",
+ NameA.to_string().c_str(), ArchA.to_string().c_str());
+ else
+ {
+ pkgCache::PrvIterator Prv = PkgA.ProvidesList();
+ for (; Prv.end() == false; ++Prv)
+ {
+ if (Prv.IsMultiArchImplicit())
+ continue;
+ pkgCache::VerIterator V = Prv.OwnerVer();
+ if (ArchA != V.ParentPkg().Arch())
+ continue;
+ if (NewProvides(V, Pkg, V->VerStr, pkgCache::Flag::MultiArchImplicit | pkgCache::Flag::ArchSpecific) == false)
+ return false;
+ }
+ pkgCache::VerIterator V = PkgA.VersionList();
+ Dynamic<pkgCache::VerIterator> DynV(V);
+ for (; V.end() == false; ++V)
+ {
+ if (NewProvides(V, Pkg, V->VerStr, pkgCache::Flag::MultiArchImplicit | pkgCache::Flag::ArchSpecific) == false)
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::AddImplicitDepends /*{{{*/
+bool pkgCacheGenerator::AddImplicitDepends(pkgCache::GrpIterator &G,
+ pkgCache::PkgIterator &P,
+ pkgCache::VerIterator &V)
+{
+ APT::StringView Arch = P.Arch() == NULL ? "" : P.Arch();
+ Dynamic<APT::StringView> DynArch(Arch);
+ map_pointer_t *OldDepLast = NULL;
+ /* MultiArch handling introduces a lot of implicit Dependencies:
+ - MultiArch: same → Co-Installable if they have the same version
+ - All others conflict with all other group members */
+ bool const coInstall = ((V->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same);
+ pkgCache::PkgIterator D = G.PackageList();
+ Dynamic<pkgCache::PkgIterator> DynD(D);
+ map_stringitem_t const VerStrIdx = V->VerStr;
+ for (; D.end() != true; D = G.NextPkg(D))
+ {
+ if (Arch == D.Arch() || D->VersionList == 0)
+ continue;
+ /* We allow only one installed arch at the time
+ per group, therefore each group member conflicts
+ with all other group members */
+ if (coInstall == true)
+ {
+ // Replaces: ${self}:other ( << ${binary:Version})
+ NewDepends(D, V, VerStrIdx,
+ pkgCache::Dep::Less | pkgCache::Dep::MultiArchImplicit, pkgCache::Dep::Replaces,
+ OldDepLast);
+ // Breaks: ${self}:other (!= ${binary:Version})
+ NewDepends(D, V, VerStrIdx,
+ pkgCache::Dep::NotEquals | pkgCache::Dep::MultiArchImplicit, pkgCache::Dep::DpkgBreaks,
+ OldDepLast);
+ } else {
+ // Conflicts: ${self}:other
+ NewDepends(D, V, 0,
+ pkgCache::Dep::NoOp | pkgCache::Dep::MultiArchImplicit, pkgCache::Dep::Conflicts,
+ OldDepLast);
+ }
+ }
+ return true;
+}
+bool pkgCacheGenerator::AddImplicitDepends(pkgCache::VerIterator &V,
+ pkgCache::PkgIterator &D)
+{
+ /* MultiArch handling introduces a lot of implicit Dependencies:
+ - MultiArch: same → Co-Installable if they have the same version
+ - All others conflict with all other group members */
+ map_pointer_t *OldDepLast = NULL;
+ bool const coInstall = ((V->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same);
+ if (coInstall == true)
+ {
+ map_stringitem_t const VerStrIdx = V->VerStr;
+ // Replaces: ${self}:other ( << ${binary:Version})
+ NewDepends(D, V, VerStrIdx,
+ pkgCache::Dep::Less | pkgCache::Dep::MultiArchImplicit, pkgCache::Dep::Replaces,
+ OldDepLast);
+ // Breaks: ${self}:other (!= ${binary:Version})
+ NewDepends(D, V, VerStrIdx,
+ pkgCache::Dep::NotEquals | pkgCache::Dep::MultiArchImplicit, pkgCache::Dep::DpkgBreaks,
+ OldDepLast);
+ } else {
+ // Conflicts: ${self}:other
+ NewDepends(D, V, 0,
+ pkgCache::Dep::NoOp | pkgCache::Dep::MultiArchImplicit, pkgCache::Dep::Conflicts,
+ OldDepLast);
+ }
+ return true;
+}
+
+ /*}}}*/
+// CacheGenerator::NewFileVer - Create a new File<->Version association /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver,
+ ListParser &List)
+{
+ if (CurrentFile == nullptr)
+ return true;
+
+ // Get a structure
+ map_pointer_t const VerFile = AllocateInMap(sizeof(pkgCache::VerFile));
+ if (VerFile == 0)
+ return false;
+
+ pkgCache::VerFileIterator VF(Cache,Cache.VerFileP + VerFile);
+ VF->File = CurrentFile - Cache.PkgFileP;
+
+ // Link it to the end of the list
+ map_pointer_t *Last = &Ver->FileList;
+ for (pkgCache::VerFileIterator V = Ver.FileList(); V.end() == false; ++V)
+ Last = &V->NextFile;
+ VF->NextFile = *Last;
+ *Last = VF.Index();
+
+ VF->Offset = List.Offset();
+ VF->Size = List.Size();
+ if (Cache.HeaderP->MaxVerFileSize < VF->Size)
+ Cache.HeaderP->MaxVerFileSize = VF->Size;
+ Cache.HeaderP->VerFileCount++;
+
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::NewVersion - Create a new Version /*{{{*/
+// ---------------------------------------------------------------------
+/* This puts a version structure in the linked list */
+map_pointer_t pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver,
+ APT::StringView const &VerStr,
+ map_pointer_t const ParentPkg,
+ unsigned short const Hash,
+ map_pointer_t const Next)
+{
+ // Get a structure
+ map_pointer_t const Version = AllocateInMap(sizeof(pkgCache::Version));
+ if (Version == 0)
+ return 0;
+
+ // Fill it in
+ Ver = pkgCache::VerIterator(Cache,Cache.VerP + Version);
+ //Dynamic<pkgCache::VerIterator> DynV(Ver); // caller MergeListVersion already takes care of it
+ Ver->NextVer = Next;
+ Ver->ParentPkg = ParentPkg;
+ Ver->Hash = Hash;
+ Ver->ID = Cache.HeaderP->VersionCount++;
+
+ // try to find the version string in the group for reuse
+ pkgCache::PkgIterator Pkg = Ver.ParentPkg();
+ pkgCache::GrpIterator Grp = Pkg.Group();
+ if (Pkg.end() == false && Grp.end() == false)
+ {
+ for (pkgCache::PkgIterator P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P))
+ {
+ if (Pkg == P)
+ continue;
+ for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+ {
+ int const cmp = strncmp(V.VerStr(), VerStr.data(), VerStr.length());
+ if (cmp == 0 && V.VerStr()[VerStr.length()] == '\0')
+ {
+ Ver->VerStr = V->VerStr;
+ return Version;
+ }
+ else if (cmp < 0)
+ break;
+ }
+ }
+ }
+ // haven't found the version string, so create
+ map_stringitem_t const idxVerStr = StoreString(VERSIONNUMBER, VerStr);
+ if (unlikely(idxVerStr == 0))
+ return 0;
+ Ver->VerStr = idxVerStr;
+ return Version;
+}
+ /*}}}*/
+// CacheGenerator::NewFileDesc - Create a new File<->Desc association /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc,
+ ListParser &List)
+{
+ if (CurrentFile == nullptr)
+ return true;
+
+ // Get a structure
+ map_pointer_t const DescFile = AllocateInMap(sizeof(pkgCache::DescFile));
+ if (DescFile == 0)
+ return false;
+
+ pkgCache::DescFileIterator DF(Cache,Cache.DescFileP + DescFile);
+ DF->File = CurrentFile - Cache.PkgFileP;
+
+ // Link it to the end of the list
+ map_pointer_t *Last = &Desc->FileList;
+ for (pkgCache::DescFileIterator D = Desc.FileList(); D.end() == false; ++D)
+ Last = &D->NextFile;
+
+ DF->NextFile = *Last;
+ *Last = DF.Index();
+
+ DF->Offset = List.Offset();
+ DF->Size = List.Size();
+ if (Cache.HeaderP->MaxDescFileSize < DF->Size)
+ Cache.HeaderP->MaxDescFileSize = DF->Size;
+ Cache.HeaderP->DescFileCount++;
+
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::NewDescription - Create a new Description /*{{{*/
+// ---------------------------------------------------------------------
+/* This puts a description structure in the linked list */
+map_pointer_t pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc,
+ const string &Lang,
+ APT::StringView md5sum,
+ map_stringitem_t const idxmd5str)
+{
+ // Get a structure
+ map_pointer_t const Description = AllocateInMap(sizeof(pkgCache::Description));
+ if (Description == 0)
+ return 0;
+
+ // Fill it in
+ Desc = pkgCache::DescIterator(Cache,Cache.DescP + Description);
+ Desc->ID = Cache.HeaderP->DescriptionCount++;
+ map_stringitem_t const idxlanguage_code = StoreString(MIXED, Lang);
+ if (unlikely(idxlanguage_code == 0))
+ return 0;
+ Desc->language_code = idxlanguage_code;
+
+ if (idxmd5str != 0)
+ Desc->md5sum = idxmd5str;
+ else
+ {
+ map_stringitem_t const idxmd5sum = WriteStringInMap(md5sum);
+ if (unlikely(idxmd5sum == 0))
+ return 0;
+ Desc->md5sum = idxmd5sum;
+ }
+
+ return Description;
+}
+ /*}}}*/
+// CacheGenerator::NewDepends - Create a dependency element /*{{{*/
+// ---------------------------------------------------------------------
+/* This creates a dependency element in the tree. It is linked to the
+ version and to the package that it is pointing to. */
+bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver,
+ map_pointer_t const Version,
+ uint8_t const Op,
+ uint8_t const Type,
+ map_pointer_t* &OldDepLast)
+{
+ void const * const oldMap = Map.Data();
+ // Get a structure
+ map_pointer_t const Dependency = AllocateInMap(sizeof(pkgCache::Dependency));
+ if (unlikely(Dependency == 0))
+ return false;
+
+ bool isDuplicate = false;
+ map_pointer_t DependencyData = 0;
+ map_pointer_t PreviousData = 0;
+ if (Pkg->RevDepends != 0)
+ {
+ pkgCache::Dependency const * const L = Cache.DepP + Pkg->RevDepends;
+ DependencyData = L->DependencyData;
+ do {
+ pkgCache::DependencyData const * const D = Cache.DepDataP + DependencyData;
+ if (Version > D->Version)
+ break;
+ if (D->Version == Version && D->Type == Type && D->CompareOp == Op)
+ {
+ isDuplicate = true;
+ break;
+ }
+ PreviousData = DependencyData;
+ DependencyData = D->NextData;
+ } while (DependencyData != 0);
+ }
+
+ if (isDuplicate == false)
+ {
+ DependencyData = AllocateInMap(sizeof(pkgCache::DependencyData));
+ if (unlikely(DependencyData == 0))
+ return false;
+ }
+
+ pkgCache::Dependency * Link = Cache.DepP + Dependency;
+ Link->ParentVer = Ver.Index();
+ Link->DependencyData = DependencyData;
+ Link->ID = Cache.HeaderP->DependsCount++;
+
+ pkgCache::DepIterator Dep(Cache, Link);
+ if (isDuplicate == false)
+ {
+ Dep->Type = Type;
+ Dep->CompareOp = Op;
+ Dep->Version = Version;
+ Dep->Package = Pkg.Index();
+ ++Cache.HeaderP->DependsDataCount;
+ if (PreviousData != 0)
+ {
+ pkgCache::DependencyData * const D = Cache.DepDataP + PreviousData;
+ Dep->NextData = D->NextData;
+ D->NextData = DependencyData;
+ }
+ else if (Pkg->RevDepends != 0)
+ {
+ pkgCache::Dependency const * const D = Cache.DepP + Pkg->RevDepends;
+ Dep->NextData = D->DependencyData;
+ }
+ }
+
+ if (isDuplicate == true || PreviousData != 0)
+ {
+ pkgCache::Dependency * const L = Cache.DepP + Pkg->RevDepends;
+ Link->NextRevDepends = L->NextRevDepends;
+ L->NextRevDepends = Dependency;
+ }
+ else
+ {
+ Link->NextRevDepends = Pkg->RevDepends;
+ Pkg->RevDepends = Dependency;
+ }
+
+
+ // Do we know where to link the Dependency to?
+ if (OldDepLast == NULL)
+ {
+ OldDepLast = &Ver->DependsList;
+ for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; ++D)
+ OldDepLast = &D->NextDepends;
+ } else if (oldMap != Map.Data())
+ OldDepLast += static_cast<map_pointer_t const *>(Map.Data()) - static_cast<map_pointer_t const *>(oldMap);
+
+ Dep->NextDepends = *OldDepLast;
+ *OldDepLast = Dependency;
+ OldDepLast = &Dep->NextDepends;
+ return true;
+}
+ /*}}}*/
+// ListParser::NewDepends - Create the environment for a new dependency /*{{{*/
+// ---------------------------------------------------------------------
+/* This creates a Group and the Package to link this dependency to if
+ needed and handles also the caching of the old endpoint */
+bool pkgCacheListParser::NewDepends(pkgCache::VerIterator &Ver,
+ StringView PackageName,
+ StringView Arch,
+ StringView Version,
+ uint8_t const Op,
+ uint8_t const Type)
+{
+ pkgCache::GrpIterator Grp;
+ Dynamic<pkgCache::GrpIterator> DynGrp(Grp);
+ Dynamic<StringView> DynPackageName(PackageName);
+ Dynamic<StringView> DynArch(Arch);
+ Dynamic<StringView> DynVersion(Version);
+ if (unlikely(Owner->NewGroup(Grp, PackageName) == false))
+ return false;
+
+ map_stringitem_t idxVersion = 0;
+ if (Version.empty() == false)
+ {
+ int const CmpOp = Op & 0x0F;
+ // =-deps are used (79:1) for lockstep on same-source packages (e.g. data-packages)
+ if (CmpOp == pkgCache::Dep::Equals && Version == Ver.VerStr())
+ idxVersion = Ver->VerStr;
+
+ if (idxVersion == 0)
+ {
+ idxVersion = StoreString(pkgCacheGenerator::VERSIONNUMBER, Version);
+ if (unlikely(idxVersion == 0))
+ return false;
+ }
+ }
+
+ bool const isNegative = (Type == pkgCache::Dep::DpkgBreaks ||
+ Type == pkgCache::Dep::Conflicts ||
+ Type == pkgCache::Dep::Replaces);
+
+ pkgCache::PkgIterator Pkg;
+ Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
+ if (isNegative == false || (Op & pkgCache::Dep::ArchSpecific) == pkgCache::Dep::ArchSpecific || Grp->FirstPackage == 0)
+ {
+ // Locate the target package
+ Pkg = Grp.FindPkg(Arch);
+ if (Pkg.end() == true) {
+ if (unlikely(Owner->NewPackage(Pkg, PackageName, Arch) == false))
+ return false;
+ }
+
+ /* Caching the old end point speeds up generation substantially */
+ if (OldDepVer != Ver) {
+ OldDepLast = NULL;
+ OldDepVer = Ver;
+ }
+
+ return Owner->NewDepends(Pkg, Ver, idxVersion, Op, Type, OldDepLast);
+ }
+ else
+ {
+ /* Caching the old end point speeds up generation substantially */
+ if (OldDepVer != Ver) {
+ OldDepLast = NULL;
+ OldDepVer = Ver;
+ }
+
+ for (Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg))
+ {
+ if (Owner->NewDepends(Pkg, Ver, idxVersion, Op, Type, OldDepLast) == false)
+ return false;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// ListParser::NewProvides - Create a Provides element /*{{{*/
+bool pkgCacheListParser::NewProvides(pkgCache::VerIterator &Ver,
+ StringView PkgName,
+ StringView PkgArch,
+ StringView Version,
+ uint8_t const Flags)
+{
+ pkgCache const &Cache = Owner->Cache;
+ Dynamic<StringView> DynPkgName(PkgName);
+ Dynamic<StringView> DynArch(PkgArch);
+ Dynamic<StringView> DynVersion(Version);
+
+ // We do not add self referencing provides
+ if (Ver.ParentPkg().Name() == PkgName && (PkgArch == Ver.ParentPkg().Arch() ||
+ (PkgArch == "all" && strcmp((Cache.StrP + Cache.HeaderP->Architecture), Ver.ParentPkg().Arch()) == 0)) &&
+ (Version.empty() || Version == Ver.VerStr()))
+ return true;
+
+ // Locate the target package
+ pkgCache::PkgIterator Pkg;
+ Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
+ if (unlikely(Owner->NewPackage(Pkg,PkgName, PkgArch) == false))
+ return false;
+
+ map_stringitem_t idxProvideVersion = 0;
+ if (Version.empty() == false) {
+ idxProvideVersion = StoreString(pkgCacheGenerator::VERSIONNUMBER, Version);
+ if (unlikely(idxProvideVersion == 0))
+ return false;
+ }
+ return Owner->NewProvides(Ver, Pkg, idxProvideVersion, Flags);
+}
+bool pkgCacheGenerator::NewProvides(pkgCache::VerIterator &Ver,
+ pkgCache::PkgIterator &Pkg,
+ map_pointer_t const ProvideVersion,
+ uint8_t const Flags)
+{
+ // Get a structure
+ map_pointer_t const Provides = AllocateInMap(sizeof(pkgCache::Provides));
+ if (unlikely(Provides == 0))
+ return false;
+ ++Cache.HeaderP->ProvidesCount;
+
+ // Fill it in
+ pkgCache::PrvIterator Prv(Cache,Cache.ProvideP + Provides,Cache.PkgP);
+ Prv->Version = Ver.Index();
+ Prv->ProvideVersion = ProvideVersion;
+ Prv->Flags = Flags;
+ Prv->NextPkgProv = Ver->ProvidesList;
+ Ver->ProvidesList = Prv.Index();
+
+ // Link it to the package
+ Prv->ParentPkg = Pkg.Index();
+ Prv->NextProvides = Pkg->ProvidesList;
+ Pkg->ProvidesList = Prv.Index();
+ return true;
+}
+ /*}}}*/
+// ListParser::NewProvidesAllArch - add provides for all architectures /*{{{*/
+bool pkgCacheListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, StringView Package,
+ StringView Version, uint8_t const Flags) {
+ pkgCache &Cache = Owner->Cache;
+ pkgCache::GrpIterator Grp = Cache.FindGrp(Package);
+ Dynamic<pkgCache::GrpIterator> DynGrp(Grp);
+ Dynamic<StringView> DynPackage(Package);
+ Dynamic<StringView> DynVersion(Version);
+
+ if (Grp.end() == true)
+ return NewProvides(Ver, Package, Cache.NativeArch(), Version, Flags);
+ else
+ {
+ map_stringitem_t idxProvideVersion = 0;
+ if (Version.empty() == false) {
+ idxProvideVersion = StoreString(pkgCacheGenerator::VERSIONNUMBER, Version);
+ if (unlikely(idxProvideVersion == 0))
+ return false;
+ }
+
+ bool const isImplicit = (Flags & pkgCache::Flag::MultiArchImplicit) == pkgCache::Flag::MultiArchImplicit;
+ bool const isArchSpecific = (Flags & pkgCache::Flag::ArchSpecific) == pkgCache::Flag::ArchSpecific;
+ pkgCache::PkgIterator OwnerPkg = Ver.ParentPkg();
+ Dynamic<pkgCache::PkgIterator> DynOwnerPkg(OwnerPkg);
+ pkgCache::PkgIterator Pkg;
+ Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
+ for (Pkg = Grp.PackageList(); Pkg.end() == false; Pkg = Grp.NextPkg(Pkg))
+ {
+ if (isImplicit && OwnerPkg == Pkg)
+ continue;
+ if (isArchSpecific == false && APT::Configuration::checkArchitecture(OwnerPkg.Arch()) == false)
+ continue;
+ if (Owner->NewProvides(Ver, Pkg, idxProvideVersion, Flags) == false)
+ return false;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+bool pkgCacheListParser::SameVersion(unsigned short const Hash, /*{{{*/
+ pkgCache::VerIterator const &Ver)
+{
+ return Hash == Ver->Hash;
+}
+ /*}}}*/
+// CacheGenerator::SelectReleaseFile - Select the current release file the indexes belong to /*{{{*/
+bool pkgCacheGenerator::SelectReleaseFile(const string &File,const string &Site,
+ unsigned long Flags)
+{
+ CurrentRlsFile = nullptr;
+ if (File.empty() && Site.empty())
+ return true;
+
+ // Get some space for the structure
+ map_pointer_t const idxFile = AllocateInMap(sizeof(*CurrentRlsFile));
+ if (unlikely(idxFile == 0))
+ return false;
+ CurrentRlsFile = Cache.RlsFileP + idxFile;
+
+ // Fill it in
+ map_stringitem_t const idxFileName = WriteStringInMap(File);
+ map_stringitem_t const idxSite = StoreString(MIXED, Site);
+ if (unlikely(idxFileName == 0 || idxSite == 0))
+ return false;
+ CurrentRlsFile->FileName = idxFileName;
+ CurrentRlsFile->Site = idxSite;
+ CurrentRlsFile->NextFile = Cache.HeaderP->RlsFileList;
+ CurrentRlsFile->Flags = Flags;
+ CurrentRlsFile->ID = Cache.HeaderP->ReleaseFileCount;
+ RlsFileName = File;
+ Cache.HeaderP->RlsFileList = CurrentRlsFile - Cache.RlsFileP;
+ Cache.HeaderP->ReleaseFileCount++;
+
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::SelectFile - Select the current file being parsed /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to select which file is to be associated with all newly
+ added versions. The caller is responsible for setting the IMS fields. */
+bool pkgCacheGenerator::SelectFile(std::string const &File,
+ pkgIndexFile const &Index,
+ std::string const &Architecture,
+ std::string const &Component,
+ unsigned long const Flags)
+{
+ CurrentFile = nullptr;
+ // Get some space for the structure
+ map_pointer_t const idxFile = AllocateInMap(sizeof(*CurrentFile));
+ if (unlikely(idxFile == 0))
+ return false;
+ CurrentFile = Cache.PkgFileP + idxFile;
+
+ // Fill it in
+ map_stringitem_t const idxFileName = WriteStringInMap(File);
+ if (unlikely(idxFileName == 0))
+ return false;
+ CurrentFile->FileName = idxFileName;
+ CurrentFile->NextFile = Cache.HeaderP->FileList;
+ CurrentFile->ID = Cache.HeaderP->PackageFileCount;
+ map_stringitem_t const idxIndexType = StoreString(MIXED, Index.GetType()->Label);
+ if (unlikely(idxIndexType == 0))
+ return false;
+ CurrentFile->IndexType = idxIndexType;
+ if (Architecture.empty())
+ CurrentFile->Architecture = 0;
+ else
+ {
+ map_stringitem_t const arch = StoreString(pkgCacheGenerator::MIXED, Architecture);
+ if (unlikely(arch == 0))
+ return false;
+ CurrentFile->Architecture = arch;
+ }
+ map_stringitem_t const component = StoreString(pkgCacheGenerator::MIXED, Component);
+ if (unlikely(component == 0))
+ return false;
+ CurrentFile->Component = component;
+ CurrentFile->Flags = Flags;
+ if (CurrentRlsFile != nullptr)
+ CurrentFile->Release = CurrentRlsFile - Cache.RlsFileP;
+ else
+ CurrentFile->Release = 0;
+ PkgFileName = File;
+ Cache.HeaderP->FileList = CurrentFile - Cache.PkgFileP;
+ Cache.HeaderP->PackageFileCount++;
+
+ if (Progress != 0)
+ Progress->SubProgress(Index.Size());
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::WriteUniqueString - Insert a unique string /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to create handles to strings. Given the same text it
+ always returns the same number */
+map_stringitem_t pkgCacheGenerator::StoreString(enum StringType const type, const char *S,
+ unsigned int Size)
+{
+ auto strings = &strMixed;
+ switch(type) {
+ case MIXED: strings = &strMixed; break;
+ case PKGNAME: strings = &strPkgNames; break;
+ case VERSIONNUMBER: strings = &strVersions; break;
+ case SECTION: strings = &strSections; break;
+ default: _error->Fatal("Unknown enum type used for string storage of '%.*s'", Size, S); return 0;
+ }
+
+ auto const item = strings->find({S, Size, nullptr, 0});
+ if (item != strings->end())
+ return item->item;
+
+ map_stringitem_t const idxString = WriteStringInMap(S,Size);
+ strings->insert({nullptr, Size, this, idxString});
+ return idxString;
+}
+ /*}}}*/
+// CheckValidity - Check that a cache is up-to-date /*{{{*/
+// ---------------------------------------------------------------------
+/* This just verifies that each file in the list of index files exists,
+ has matching attributes with the cache and the cache does not have
+ any extra files. */
+class APT_HIDDEN ScopedErrorRevert {
+public:
+ ScopedErrorRevert() { _error->PushToStack(); }
+ ~ScopedErrorRevert() { _error->RevertToStack(); }
+};
+static bool CheckValidity(FileFd &CacheFile, std::string const &CacheFileName,
+ pkgSourceList &List,
+ FileIterator const Start,
+ FileIterator const End,
+ MMap **OutMap = 0,
+ pkgCache **OutCache = 0)
+{
+ if (CacheFileName.empty())
+ return false;
+ ScopedErrorRevert ser;
+
+ bool const Debug = _config->FindB("Debug::pkgCacheGen", false);
+ // No file, certainly invalid
+ if (CacheFile.Open(CacheFileName, FileFd::ReadOnly, FileFd::None) == false)
+ {
+ if (Debug == true)
+ std::clog << "CacheFile " << CacheFileName << " doesn't exist" << std::endl;
+ return false;
+ }
+
+ if (List.GetLastModifiedTime() > CacheFile.ModificationTime())
+ {
+ if (Debug == true)
+ std::clog << "sources.list is newer than the cache" << std::endl;
+ return false;
+ }
+
+ // Map it
+ std::unique_ptr<MMap> Map(new MMap(CacheFile,0));
+ if (unlikely(Map->validData()) == false)
+ return false;
+ std::unique_ptr<pkgCache> CacheP(new pkgCache(Map.get()));
+ pkgCache &Cache = *CacheP.get();
+ if (_error->PendingError() || Map->Size() == 0)
+ {
+ if (Debug == true)
+ std::clog << "Errors are pending or Map is empty() for " << CacheFileName << std::endl;
+ return false;
+ }
+
+ std::unique_ptr<bool[]> RlsVisited(new bool[Cache.HeaderP->ReleaseFileCount]);
+ memset(RlsVisited.get(),0,sizeof(RlsVisited[0])*Cache.HeaderP->ReleaseFileCount);
+ std::vector<pkgIndexFile *> Files;
+ for (pkgSourceList::const_iterator i = List.begin(); i != List.end(); ++i)
+ {
+ if (Debug == true)
+ std::clog << "Checking RlsFile " << (*i)->Describe() << ": ";
+ pkgCache::RlsFileIterator const RlsFile = (*i)->FindInCache(Cache, true);
+ if (RlsFile.end() == true)
+ {
+ if (Debug == true)
+ std::clog << "FindInCache returned end-Pointer" << std::endl;
+ return false;
+ }
+
+ RlsVisited[RlsFile->ID] = true;
+ if (Debug == true)
+ std::clog << "with ID " << RlsFile->ID << " is valid" << std::endl;
+
+ std::vector <pkgIndexFile *> const * const Indexes = (*i)->GetIndexFiles();
+ std::copy_if(Indexes->begin(), Indexes->end(), std::back_inserter(Files),
+ [](pkgIndexFile const * const I) { return I->HasPackages(); });
+ }
+ for (unsigned I = 0; I != Cache.HeaderP->ReleaseFileCount; ++I)
+ if (RlsVisited[I] == false)
+ {
+ if (Debug == true)
+ std::clog << "RlsFile with ID" << I << " wasn't visited" << std::endl;
+ return false;
+ }
+
+ std::copy(Start, End, std::back_inserter(Files));
+
+ /* Now we check every index file, see if it is in the cache,
+ verify the IMS data and check that it is on the disk too.. */
+ std::unique_ptr<bool[]> Visited(new bool[Cache.HeaderP->PackageFileCount]);
+ memset(Visited.get(),0,sizeof(Visited[0])*Cache.HeaderP->PackageFileCount);
+ for (std::vector<pkgIndexFile *>::const_reverse_iterator PkgFile = Files.rbegin(); PkgFile != Files.rend(); ++PkgFile)
+ {
+ if (Debug == true)
+ std::clog << "Checking PkgFile " << (*PkgFile)->Describe() << ": ";
+ if ((*PkgFile)->Exists() == false)
+ {
+ if (Debug == true)
+ std::clog << "file doesn't exist" << std::endl;
+ continue;
+ }
+
+ // FindInCache is also expected to do an IMS check.
+ pkgCache::PkgFileIterator File = (*PkgFile)->FindInCache(Cache);
+ if (File.end() == true)
+ {
+ if (Debug == true)
+ std::clog << "FindInCache returned end-Pointer" << std::endl;
+ return false;
+ }
+
+ Visited[File->ID] = true;
+ if (Debug == true)
+ std::clog << "with ID " << File->ID << " is valid" << std::endl;
+ }
+
+ for (unsigned I = 0; I != Cache.HeaderP->PackageFileCount; I++)
+ if (Visited[I] == false)
+ {
+ if (Debug == true)
+ std::clog << "PkgFile with ID" << I << " wasn't visited" << std::endl;
+ return false;
+ }
+
+ if (_error->PendingError() == true)
+ {
+ if (Debug == true)
+ {
+ std::clog << "Validity failed because of pending errors:" << std::endl;
+ _error->DumpErrors(std::clog, GlobalError::DEBUG, false);
+ }
+ return false;
+ }
+
+ if (OutMap != 0)
+ *OutMap = Map.release();
+ if (OutCache != 0)
+ *OutCache = CacheP.release();
+ return true;
+}
+ /*}}}*/
+// ComputeSize - Compute the total size of a bunch of files /*{{{*/
+// ---------------------------------------------------------------------
+/* Size is kind of an abstract notion that is only used for the progress
+ meter */
+static map_filesize_t ComputeSize(pkgSourceList const * const List, FileIterator Start,FileIterator End)
+{
+ map_filesize_t TotalSize = 0;
+ if (List != NULL)
+ {
+ for (pkgSourceList::const_iterator i = List->begin(); i != List->end(); ++i)
+ {
+ std::vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
+ for (std::vector<pkgIndexFile *>::const_iterator j = Indexes->begin(); j != Indexes->end(); ++j)
+ if ((*j)->HasPackages() == true)
+ TotalSize += (*j)->Size();
+ }
+ }
+
+ for (; Start < End; ++Start)
+ {
+ if ((*Start)->HasPackages() == false)
+ continue;
+ TotalSize += (*Start)->Size();
+ }
+ return TotalSize;
+}
+ /*}}}*/
+// BuildCache - Merge the list of index files into the cache /*{{{*/
+static bool BuildCache(pkgCacheGenerator &Gen,
+ OpProgress * const Progress,
+ map_filesize_t &CurrentSize,map_filesize_t TotalSize,
+ pkgSourceList const * const List,
+ FileIterator const Start, FileIterator const End)
+{
+ bool mergeFailure = false;
+
+ auto const indexFileMerge = [&](pkgIndexFile * const I) {
+ if (I->HasPackages() == false || mergeFailure)
+ return;
+
+ if (I->Exists() == false)
+ return;
+
+ if (I->FindInCache(Gen.GetCache()).end() == false)
+ {
+ _error->Warning("Duplicate sources.list entry %s",
+ I->Describe().c_str());
+ return;
+ }
+
+ map_filesize_t const Size = I->Size();
+ if (Progress != NULL)
+ Progress->OverallProgress(CurrentSize, TotalSize, Size, _("Reading package lists"));
+ CurrentSize += Size;
+
+ if (I->Merge(Gen,Progress) == false)
+ mergeFailure = true;
+ };
+
+ if (List != NULL)
+ {
+ for (pkgSourceList::const_iterator i = List->begin(); i != List->end(); ++i)
+ {
+ if ((*i)->FindInCache(Gen.GetCache(), false).end() == false)
+ {
+ _error->Warning("Duplicate sources.list entry %s",
+ (*i)->Describe().c_str());
+ continue;
+ }
+
+ if ((*i)->Merge(Gen, Progress) == false)
+ return false;
+
+ std::vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
+ if (Indexes != NULL)
+ std::for_each(Indexes->begin(), Indexes->end(), indexFileMerge);
+ if (mergeFailure)
+ return false;
+ }
+ }
+
+ if (Start != End)
+ {
+ Gen.SelectReleaseFile("", "");
+ std::for_each(Start, End, indexFileMerge);
+ if (mergeFailure)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::MakeStatusCache - Construct the status cache /*{{{*/
+// ---------------------------------------------------------------------
+/* This makes sure that the status cache (the cache that has all
+ index files from the sources list and all local ones) is ready
+ to be mmaped. If OutMap is not zero then a MMap object representing
+ the cache will be stored there. This is pretty much mandatory if you
+ are using AllowMem. AllowMem lets the function be run as non-root
+ where it builds the cache 'fast' into a memory buffer. */
+static DynamicMMap* CreateDynamicMMap(FileFd * const CacheF, unsigned long Flags)
+{
+ map_filesize_t const MapStart = _config->FindI("APT::Cache-Start", 24*1024*1024);
+ map_filesize_t const MapGrow = _config->FindI("APT::Cache-Grow", 1*1024*1024);
+ map_filesize_t const MapLimit = _config->FindI("APT::Cache-Limit", 0);
+ Flags |= MMap::Moveable;
+ if (_config->FindB("APT::Cache-Fallback", false) == true)
+ Flags |= MMap::Fallback;
+ if (CacheF != NULL)
+ return new DynamicMMap(*CacheF, Flags, MapStart, MapGrow, MapLimit);
+ else
+ return new DynamicMMap(Flags, MapStart, MapGrow, MapLimit);
+}
+static bool writeBackMMapToFile(pkgCacheGenerator * const Gen, DynamicMMap * const Map,
+ std::string const &FileName)
+{
+ FileFd SCacheF(FileName, FileFd::WriteAtomic);
+ if (SCacheF.IsOpen() == false || SCacheF.Failed())
+ return false;
+
+ fchmod(SCacheF.Fd(),0644);
+
+ // Write out the main data
+ if (SCacheF.Write(Map->Data(),Map->Size()) == false)
+ return _error->Error(_("IO Error saving source cache"));
+
+ // Write out the proper header
+ Gen->GetCache().HeaderP->Dirty = false;
+ Gen->GetCache().HeaderP->CacheFileSize = Gen->GetCache().CacheHash();
+ if (SCacheF.Seek(0) == false ||
+ SCacheF.Write(Map->Data(),sizeof(*Gen->GetCache().HeaderP)) == false)
+ return _error->Error(_("IO Error saving source cache"));
+ Gen->GetCache().HeaderP->Dirty = true;
+ return true;
+}
+static bool loadBackMMapFromFile(std::unique_ptr<pkgCacheGenerator> &Gen,
+ std::unique_ptr<DynamicMMap> &Map, OpProgress * const Progress, FileFd &CacheF)
+{
+ Map.reset(CreateDynamicMMap(NULL, 0));
+ if (unlikely(Map->validData()) == false)
+ return false;
+ if (CacheF.IsOpen() == false || CacheF.Seek(0) == false || CacheF.Failed())
+ return false;
+ _error->PushToStack();
+ map_pointer_t const alloc = Map->RawAllocate(CacheF.Size());
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ if (alloc == 0 && newError)
+ return false;
+ if (CacheF.Read((unsigned char *)Map->Data() + alloc, CacheF.Size()) == false)
+ return false;
+ Gen.reset(new pkgCacheGenerator(Map.get(),Progress));
+ return Gen->Start();
+}
+bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress,
+ MMap **OutMap, bool AllowMem)
+ { return pkgCacheGenerator::MakeStatusCache(List, &Progress, OutMap, AllowMem); }
+bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress,
+ MMap **OutMap,bool)
+{
+ return pkgCacheGenerator::MakeStatusCache(List, Progress, OutMap, nullptr, true);
+}
+bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress,
+ MMap **OutMap,pkgCache **OutCache, bool)
+{
+ // FIXME: deprecate the ignored AllowMem parameter
+ bool const Debug = _config->FindB("Debug::pkgCacheGen", false);
+
+ std::vector<pkgIndexFile *> Files;
+ if (_system->AddStatusFiles(Files) == false)
+ return false;
+
+ // Decide if we can write to the files..
+ string const CacheFileName = _config->FindFile("Dir::Cache::pkgcache");
+ string const SrcCacheFileName = _config->FindFile("Dir::Cache::srcpkgcache");
+
+ // ensure the cache directory exists
+ if (CacheFileName.empty() == false || SrcCacheFileName.empty() == false)
+ {
+ string dir = _config->FindDir("Dir::Cache");
+ size_t const len = dir.size();
+ if (len > 5 && dir.find("/apt/", len - 6, 5) == len - 5)
+ dir = dir.substr(0, len - 5);
+ if (CacheFileName.empty() == false)
+ CreateDirectory(dir, flNotFile(CacheFileName));
+ if (SrcCacheFileName.empty() == false)
+ CreateDirectory(dir, flNotFile(SrcCacheFileName));
+ }
+
+ if (Progress != NULL)
+ Progress->OverallProgress(0,1,1,_("Reading package lists"));
+
+ bool pkgcache_fine = false;
+ bool srcpkgcache_fine = false;
+ bool volatile_fine = List.GetVolatileFiles().empty();
+ FileFd CacheFile;
+ if (CheckValidity(CacheFile, CacheFileName, List, Files.begin(), Files.end(), volatile_fine ? OutMap : NULL,
+ volatile_fine ? OutCache : NULL) == true)
+ {
+ if (Debug == true)
+ std::clog << "pkgcache.bin is valid - no need to build any cache" << std::endl;
+ pkgcache_fine = true;
+ srcpkgcache_fine = true;
+ }
+
+ FileFd SrcCacheFile;
+ if (pkgcache_fine == false)
+ {
+ if (CheckValidity(SrcCacheFile, SrcCacheFileName, List, Files.end(), Files.end()) == true)
+ {
+ if (Debug == true)
+ std::clog << "srcpkgcache.bin is valid - it can be reused" << std::endl;
+ srcpkgcache_fine = true;
+ }
+ }
+
+ if (volatile_fine == true && srcpkgcache_fine == true && pkgcache_fine == true)
+ {
+ if (Progress != NULL)
+ Progress->OverallProgress(1,1,1,_("Reading package lists"));
+ return true;
+ }
+
+ bool Writeable = false;
+ if (srcpkgcache_fine == false || pkgcache_fine == false)
+ {
+ if (CacheFileName.empty() == false)
+ Writeable = access(flNotFile(CacheFileName).c_str(),W_OK) == 0;
+ else if (SrcCacheFileName.empty() == false)
+ Writeable = access(flNotFile(SrcCacheFileName).c_str(),W_OK) == 0;
+
+ if (Debug == true)
+ std::clog << "Do we have write-access to the cache files? " << (Writeable ? "YES" : "NO") << std::endl;
+ }
+
+ // At this point we know we need to construct something, so get storage ready
+ std::unique_ptr<DynamicMMap> Map(CreateDynamicMMap(NULL, 0));
+ if (unlikely(Map->validData()) == false)
+ return false;
+ if (Debug == true)
+ std::clog << "Open memory Map (not filebased)" << std::endl;
+
+ std::unique_ptr<pkgCacheGenerator> Gen{nullptr};
+ map_filesize_t CurrentSize = 0;
+ std::vector<pkgIndexFile*> VolatileFiles = List.GetVolatileFiles();
+ map_filesize_t TotalSize = ComputeSize(NULL, VolatileFiles.begin(), VolatileFiles.end());
+ if (srcpkgcache_fine == true && pkgcache_fine == false)
+ {
+ if (Debug == true)
+ std::clog << "srcpkgcache.bin was valid - populate MMap with it" << std::endl;
+ if (loadBackMMapFromFile(Gen, Map, Progress, SrcCacheFile) == false)
+ return false;
+ srcpkgcache_fine = true;
+ TotalSize += ComputeSize(NULL, Files.begin(), Files.end());
+ }
+ else if (srcpkgcache_fine == false)
+ {
+ if (Debug == true)
+ std::clog << "srcpkgcache.bin is NOT valid - rebuild" << std::endl;
+ Gen.reset(new pkgCacheGenerator(Map.get(),Progress));
+ if (Gen->Start() == false)
+ return false;
+
+ TotalSize += ComputeSize(&List, Files.begin(),Files.end());
+ if (BuildCache(*Gen, Progress, CurrentSize, TotalSize, &List,
+ Files.end(),Files.end()) == false)
+ return false;
+
+ if (Writeable == true && SrcCacheFileName.empty() == false)
+ if (writeBackMMapToFile(Gen.get(), Map.get(), SrcCacheFileName) == false)
+ return false;
+ }
+
+ if (pkgcache_fine == false)
+ {
+ if (Debug == true)
+ std::clog << "Building status cache in pkgcache.bin now" << std::endl;
+ if (BuildCache(*Gen, Progress, CurrentSize, TotalSize, NULL,
+ Files.begin(), Files.end()) == false)
+ return false;
+
+ if (Writeable == true && CacheFileName.empty() == false)
+ if (writeBackMMapToFile(Gen.get(), Map.get(), CacheFileName) == false)
+ return false;
+ }
+
+ if (Debug == true)
+ std::clog << "Caches done. " << (volatile_fine ? "No volatile files, so we are done here." : "Now bring in the volatile files") << std::endl;
+
+ if (volatile_fine == false)
+ {
+ if (Gen == nullptr)
+ {
+ if (Debug == true)
+ std::clog << "Populate new MMap with cachefile contents" << std::endl;
+ if (loadBackMMapFromFile(Gen, Map, Progress, CacheFile) == false)
+ return false;
+ }
+
+ Files = List.GetVolatileFiles();
+ if (BuildCache(*Gen, Progress, CurrentSize, TotalSize, NULL,
+ Files.begin(), Files.end()) == false)
+ return false;
+ }
+
+ if (OutMap != nullptr)
+ *OutMap = Map.release();
+
+ if (Debug == true)
+ std::clog << "Everything is ready for shipping" << std::endl;
+ return true;
+}
+ /*}}}*/
+// CacheGenerator::MakeOnlyStatusCache - Build only a status files cache/*{{{*/
+class APT_HIDDEN ScopedErrorMerge {
+public:
+ ScopedErrorMerge() { _error->PushToStack(); }
+ ~ScopedErrorMerge() { _error->MergeWithStack(); }
+};
+bool pkgMakeOnlyStatusCache(OpProgress &Progress,DynamicMMap **OutMap)
+ { return pkgCacheGenerator::MakeOnlyStatusCache(&Progress, OutMap); }
+bool pkgCacheGenerator::MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **OutMap)
+{
+ std::vector<pkgIndexFile *> Files;
+ if (_system->AddStatusFiles(Files) == false)
+ return false;
+
+ ScopedErrorMerge sem;
+ std::unique_ptr<DynamicMMap> Map(CreateDynamicMMap(NULL, 0));
+ if (unlikely(Map->validData()) == false)
+ return false;
+ map_filesize_t CurrentSize = 0;
+ map_filesize_t TotalSize = 0;
+ TotalSize = ComputeSize(NULL, Files.begin(), Files.end());
+
+ // Build the status cache
+ if (Progress != NULL)
+ Progress->OverallProgress(0,1,1,_("Reading package lists"));
+ pkgCacheGenerator Gen(Map.get(),Progress);
+ if (Gen.Start() == false || _error->PendingError() == true)
+ return false;
+ if (BuildCache(Gen,Progress,CurrentSize,TotalSize, NULL,
+ Files.begin(), Files.end()) == false)
+ return false;
+
+ if (_error->PendingError() == true)
+ return false;
+ *OutMap = Map.release();
+
+ return true;
+}
+ /*}}}*/
+// IsDuplicateDescription /*{{{*/
+static bool IsDuplicateDescription(pkgCache &Cache, pkgCache::DescIterator Desc,
+ APT::StringView CurMd5, std::string const &CurLang)
+{
+ // Descriptions in the same link-list have all the same md5
+ if (Desc.end() == true || Cache.ViewString(Desc->md5sum) != CurMd5)
+ return false;
+ for (; Desc.end() == false; ++Desc)
+ if (Desc.LanguageCode() == CurLang)
+ return true;
+ return false;
+}
+ /*}}}*/
+
+pkgCacheListParser::pkgCacheListParser() : Owner(NULL), OldDepLast(NULL), d(NULL) {}
+pkgCacheListParser::~pkgCacheListParser() {}
diff --git a/apt-pkg/pkgcachegen.h b/apt-pkg/pkgcachegen.h
new file mode 100644
index 0000000..e11e97e
--- /dev/null
+++ b/apt-pkg/pkgcachegen.h
@@ -0,0 +1,252 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Cache Generator - Generator for the cache structure.
+
+ This builds the cache structure from the abstract package list parser.
+ Each archive source has it's own list parser that is instantiated by
+ the caller to provide data for the generator.
+
+ Parts of the cache are created by this generator class while other
+ parts are created by the list parser. The list parser is responsible
+ for creating version, depends and provides structures, and some of
+ their contents
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_PKGCACHEGEN_H
+#define PKGLIB_PKGCACHEGEN_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+#include <vector>
+#if __cplusplus >= 201103L
+#include <unordered_set>
+#endif
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+#include <apt-pkg/string_view.h>
+#endif
+
+class FileFd;
+class pkgSourceList;
+class OpProgress;
+class pkgIndexFile;
+class pkgCacheListParser;
+
+class APT_HIDDEN pkgCacheGenerator /*{{{*/
+{
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN map_stringitem_t WriteStringInMap(APT::StringView String) { return WriteStringInMap(String.data(), String.size()); };
+#endif
+ APT_HIDDEN map_stringitem_t WriteStringInMap(const char *String);
+ APT_HIDDEN map_stringitem_t WriteStringInMap(const char *String, const unsigned long &Len);
+ APT_HIDDEN map_pointer_t AllocateInMap(const unsigned long &size);
+
+ // Dirty hack for public users that do not use C++11 yet
+#if __cplusplus >= 201103L
+ struct string_pointer {
+ const char *data_;
+ size_t size;
+ pkgCacheGenerator *generator;
+ map_stringitem_t item;
+
+ const char *data() const {
+ return data_ != nullptr ? data_ : static_cast<char*>(generator->Map.Data()) + item;
+ }
+
+ bool operator ==(string_pointer const &other) const {
+ return size == other.size && memcmp(data(), other.data(), size) == 0;
+ }
+ };
+ struct hash {
+ uint32_t operator()(string_pointer const &that) const {
+ uint32_t Hash = 5381;
+ const char * const end = that.data() + that.size;
+ for (const char *I = that.data(); I != end; ++I)
+ Hash = 33 * Hash + *I;
+ return Hash;
+ }
+ };
+
+ std::unordered_set<string_pointer, hash> strMixed;
+ std::unordered_set<string_pointer, hash> strPkgNames;
+ std::unordered_set<string_pointer, hash> strVersions;
+ std::unordered_set<string_pointer, hash> strSections;
+#endif
+
+ friend class pkgCacheListParser;
+ typedef pkgCacheListParser ListParser;
+
+ public:
+
+ template<typename Iter> class Dynamic {
+ public:
+ static std::vector<Iter*> toReMap;
+ explicit Dynamic(Iter &I) {
+ toReMap.push_back(&I);
+ }
+
+ ~Dynamic() {
+ toReMap.pop_back();
+ }
+
+#if __cplusplus >= 201103L
+ Dynamic(const Dynamic&) = delete;
+ void operator=(const Dynamic&) = delete;
+#endif
+ };
+
+ protected:
+
+ DynamicMMap &Map;
+ pkgCache Cache;
+ OpProgress *Progress;
+
+ std::string RlsFileName;
+ pkgCache::ReleaseFile *CurrentRlsFile;
+ std::string PkgFileName;
+ pkgCache::PackageFile *CurrentFile;
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ bool NewGroup(pkgCache::GrpIterator &Grp, APT::StringView Name);
+ bool NewPackage(pkgCache::PkgIterator &Pkg, APT::StringView Name, APT::StringView Arch);
+ map_pointer_t NewVersion(pkgCache::VerIterator &Ver, APT::StringView const &VerStr,
+ map_pointer_t const ParentPkg, unsigned short const Hash,
+ map_pointer_t const Next);
+ map_pointer_t NewDescription(pkgCache::DescIterator &Desc,const std::string &Lang, APT::StringView md5sum,map_stringitem_t const idxmd5str);
+#endif
+ bool NewFileVer(pkgCache::VerIterator &Ver,ListParser &List);
+ bool NewFileDesc(pkgCache::DescIterator &Desc,ListParser &List);
+ bool NewDepends(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver,
+ map_pointer_t const Version, uint8_t const Op,
+ uint8_t const Type, map_pointer_t* &OldDepLast);
+ bool NewProvides(pkgCache::VerIterator &Ver, pkgCache::PkgIterator &Pkg,
+ map_stringitem_t const ProvidesVersion, uint8_t const Flags);
+
+ public:
+
+ enum StringType { MIXED, PKGNAME, VERSIONNUMBER, SECTION };
+ map_stringitem_t StoreString(StringType const type, const char * S, unsigned int const Size);
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ inline map_stringitem_t StoreString(enum StringType const type, APT::StringView S) {return StoreString(type, S.data(),S.length());};
+#endif
+
+ void DropProgress() {Progress = 0;};
+ bool SelectFile(const std::string &File,pkgIndexFile const &Index, std::string const &Architecture, std::string const &Component, unsigned long Flags = 0);
+ bool SelectReleaseFile(const std::string &File, const std::string &Site, unsigned long Flags = 0);
+ bool MergeList(ListParser &List,pkgCache::VerIterator *Ver = 0);
+ inline pkgCache &GetCache() {return Cache;};
+ inline pkgCache::PkgFileIterator GetCurFile()
+ {return pkgCache::PkgFileIterator(Cache,CurrentFile);};
+ inline pkgCache::RlsFileIterator GetCurRlsFile()
+ {return pkgCache::RlsFileIterator(Cache,CurrentRlsFile);};
+
+ APT_PUBLIC static bool MakeStatusCache(pkgSourceList &List,OpProgress *Progress,
+ MMap **OutMap = 0,bool AllowMem = false);
+ APT_HIDDEN static bool MakeStatusCache(pkgSourceList &List,OpProgress *Progress,
+ MMap **OutMap,pkgCache **OutCache, bool AllowMem = false);
+ APT_PUBLIC static bool MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **OutMap);
+
+ void ReMap(void const * const oldMap, void const * const newMap, size_t oldSize);
+ bool Start();
+
+ pkgCacheGenerator(DynamicMMap *Map,OpProgress *Progress);
+ virtual ~pkgCacheGenerator();
+
+ private:
+ void * const d;
+ APT_HIDDEN bool MergeListGroup(ListParser &List, std::string const &GrpName);
+ APT_HIDDEN bool MergeListPackage(ListParser &List, pkgCache::PkgIterator &Pkg);
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN bool MergeListVersion(ListParser &List, pkgCache::PkgIterator &Pkg,
+ APT::StringView const &Version, pkgCache::VerIterator* &OutVer);
+#endif
+
+ APT_HIDDEN bool AddImplicitDepends(pkgCache::GrpIterator &G, pkgCache::PkgIterator &P,
+ pkgCache::VerIterator &V);
+ APT_HIDDEN bool AddImplicitDepends(pkgCache::VerIterator &V, pkgCache::PkgIterator &D);
+
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN bool AddNewDescription(ListParser &List, pkgCache::VerIterator &Ver,
+ std::string const &lang, APT::StringView CurMd5, map_stringitem_t &md5idx);
+#endif
+};
+ /*}}}*/
+// This is the abstract package list parser class. /*{{{*/
+class APT_HIDDEN pkgCacheListParser
+{
+ pkgCacheGenerator *Owner;
+ friend class pkgCacheGenerator;
+
+ // Some cache items
+ pkgCache::VerIterator OldDepVer;
+ map_pointer_t *OldDepLast;
+
+ void * const d;
+
+ protected:
+
+ inline map_stringitem_t StoreString(pkgCacheGenerator::StringType const type, const char *S,unsigned int Size) {return Owner->StoreString(type, S, Size);};
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ inline map_stringitem_t StoreString(pkgCacheGenerator::StringType const type, APT::StringView S) {return Owner->StoreString(type, S);};
+ inline map_stringitem_t WriteString(APT::StringView S) {return Owner->WriteStringInMap(S.data(), S.size());};
+#endif
+
+ inline map_stringitem_t WriteString(const char *S,unsigned int Size) {return Owner->WriteStringInMap(S,Size);};
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ bool NewDepends(pkgCache::VerIterator &Ver,APT::StringView Package, APT::StringView Arch,
+ APT::StringView Version,uint8_t const Op,
+ uint8_t const Type);
+ bool NewProvides(pkgCache::VerIterator &Ver,APT::StringView PkgName,
+ APT::StringView PkgArch, APT::StringView Version,
+ uint8_t const Flags);
+ bool NewProvidesAllArch(pkgCache::VerIterator &Ver, APT::StringView Package,
+ APT::StringView Version, uint8_t const Flags);
+#endif
+ public:
+
+ // These all operate against the current section
+ virtual std::string Package() = 0;
+ virtual bool ArchitectureAll() = 0;
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ virtual APT::StringView Architecture() = 0;
+ virtual APT::StringView Version() = 0;
+#endif
+ virtual bool NewVersion(pkgCache::VerIterator &Ver) = 0;
+ virtual std::vector<std::string> AvailableDescriptionLanguages() = 0;
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ virtual APT::StringView Description_md5() = 0;
+#endif
+ virtual unsigned short VersionHash() = 0;
+ /** compare currently parsed version with given version
+ *
+ * \param Hash of the currently parsed version
+ * \param Ver to compare with
+ */
+ virtual bool SameVersion(unsigned short const Hash, pkgCache::VerIterator const &Ver);
+ virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver) = 0;
+ virtual map_filesize_t Offset() = 0;
+ virtual map_filesize_t Size() = 0;
+
+ virtual bool Step() = 0;
+
+ virtual bool CollectFileProvides(pkgCache &/*Cache*/,
+ pkgCache::VerIterator &/*Ver*/) {return true;};
+
+ pkgCacheListParser();
+ virtual ~pkgCacheListParser();
+};
+ /*}}}*/
+
+APT_DEPRECATED_MSG("Use pkgCacheGenerator::MakeStatusCache instead") bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress,
+ MMap **OutMap = 0,bool AllowMem = false);
+APT_DEPRECATED_MSG("Use pkgCacheGenerator::MakeOnlyStatusCache instead") bool pkgMakeOnlyStatusCache(OpProgress &Progress,DynamicMMap **OutMap);
+
+#endif
diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc
new file mode 100644
index 0000000..77aa8ce
--- /dev/null
+++ b/apt-pkg/pkgrecords.cc
@@ -0,0 +1,79 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Records - Allows access to complete package description records
+ directly from the file.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+
+#include <vector>
+#include <stddef.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// Records::pkgRecords - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* This will create the necessary structures to access the status files */
+pkgRecords::pkgRecords(pkgCache &aCache) : d(NULL), Cache(aCache),
+ Files(Cache.HeaderP->PackageFileCount)
+{
+ for (pkgCache::PkgFileIterator I = Cache.FileBegin();
+ I.end() == false; ++I)
+ {
+ const pkgIndexFile::Type *Type = pkgIndexFile::Type::GetType(I.IndexType());
+ if (Type == 0)
+ {
+ _error->Error(_("Index file type '%s' is not supported"),I.IndexType());
+ return;
+ }
+
+ Files[I->ID] = Type->CreatePkgParser(I);
+ if (Files[I->ID] == 0)
+ return;
+ }
+}
+ /*}}}*/
+// Records::~pkgRecords - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgRecords::~pkgRecords()
+{
+ for ( std::vector<Parser*>::iterator it = Files.begin();
+ it != Files.end();
+ ++it)
+ {
+ delete *it;
+ }
+}
+ /*}}}*/
+// Records::Lookup - Get a parser for the package version file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator const &Ver)
+{
+ Files[Ver.File()->ID]->Jump(Ver);
+ return *Files[Ver.File()->ID];
+}
+ /*}}}*/
+// Records::Lookup - Get a parser for the package description file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgRecords::Parser &pkgRecords::Lookup(pkgCache::DescFileIterator const &Desc)
+{
+ Files[Desc.File()->ID]->Jump(Desc);
+ return *Files[Desc.File()->ID];
+}
+ /*}}}*/
+
+pkgRecords::Parser::Parser() : d(NULL) {}
+pkgRecords::Parser::~Parser() {}
diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h
new file mode 100644
index 0000000..6d1342d
--- /dev/null
+++ b/apt-pkg/pkgrecords.h
@@ -0,0 +1,115 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Records - Allows access to complete package description records
+ directly from the file.
+
+ The package record system abstracts the actual parsing of the
+ package files. This is different than the generators parser in that
+ it is used to access information not generate information. No
+ information touched by the generator should be parable from here as
+ it can always be retrieved directly from the cache.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_PKGRECORDS_H
+#define PKGLIB_PKGRECORDS_H
+
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+#include <vector>
+
+class pkgRecords /*{{{*/
+{
+ public:
+ class Parser;
+
+ private:
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ pkgCache &Cache;
+ std::vector<Parser *>Files;
+
+ public:
+ // Lookup function
+ Parser &Lookup(pkgCache::VerFileIterator const &Ver);
+ Parser &Lookup(pkgCache::DescFileIterator const &Desc);
+
+ // Construct destruct
+ explicit pkgRecords(pkgCache &Cache);
+ virtual ~pkgRecords();
+};
+ /*}}}*/
+class pkgRecords::Parser /*{{{*/
+{
+ protected:
+
+ virtual bool Jump(pkgCache::VerFileIterator const &Ver) = 0;
+ virtual bool Jump(pkgCache::DescFileIterator const &Desc) = 0;
+
+ public:
+ friend class pkgRecords;
+
+ // These refer to the archive file for the Version
+ virtual std::string FileName() {return std::string();};
+ virtual std::string SourcePkg() {return std::string();};
+ virtual std::string SourceVer() {return std::string();};
+
+ /** return all known hashes in this record.
+ *
+ * For authentication proposes packages come with hashsums which
+ * this method is supposed to parse and return so that clients can
+ * choose the hash to be used.
+ */
+ virtual HashStringList Hashes() const { return HashStringList(); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string MD5Hash() const { return GetHashFromHashes("MD5Sum"); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA1Hash() const { return GetHashFromHashes("SHA1"); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA256Hash() const { return GetHashFromHashes("SHA256"); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA512Hash() const { return GetHashFromHashes("SHA512"); };
+
+ // These are some general stats about the package
+ virtual std::string Maintainer() {return std::string();};
+ /** return short description in language from record.
+ *
+ * @see #LongDesc
+ */
+ virtual std::string ShortDesc(std::string const &/*lang*/) {return std::string();};
+ /** return long description in language from record.
+ *
+ * If \b lang is empty the "best" available language will be
+ * returned as determined by the APT::Languages configuration.
+ * If a (requested) language can't be found in this record an empty
+ * string will be returned.
+ */
+ virtual std::string LongDesc(std::string const &/*lang*/) {return std::string();};
+ std::string ShortDesc() {return ShortDesc("");};
+ std::string LongDesc() {return LongDesc("");};
+
+ virtual std::string Name() {return std::string();};
+ virtual std::string Homepage() {return std::string();}
+
+ // An arbitrary custom field
+ virtual std::string RecordField(const char * /*fieldName*/) { return std::string();};
+
+ // The record in binary form
+ virtual void GetRec(const char *&Start,const char *&Stop) {Start = Stop = 0;};
+
+ Parser();
+ virtual ~Parser();
+
+ private:
+ void * const d;
+ APT_HIDDEN std::string GetHashFromHashes(char const * const type) const
+ {
+ HashStringList const hashes = Hashes();
+ HashString const * const hs = hashes.find(type);
+ return hs != NULL ? hs->HashValue() : "";
+ };
+};
+ /*}}}*/
+#endif
diff --git a/apt-pkg/pkgsystem.cc b/apt-pkg/pkgsystem.cc
new file mode 100644
index 0000000..eaa3f5a
--- /dev/null
+++ b/apt-pkg/pkgsystem.cc
@@ -0,0 +1,113 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ System - Abstraction for running on different systems.
+
+ Basic general structure..
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/debsystem.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgsystem.h>
+
+#include <cassert>
+#include <cstring>
+#include <map>
+ /*}}}*/
+
+pkgSystem *_system = 0;
+static pkgSystem *SysList[10];
+pkgSystem **pkgSystem::GlobalList = SysList;
+unsigned long pkgSystem::GlobalListLen = 0;
+
+class APT_HIDDEN pkgSystemPrivate /*{{{*/
+{
+public:
+ typedef decltype(pkgCache::Version::ID) idtype;
+ std::map<idtype,idtype> idmap;
+ pkgSystemPrivate() {}
+};
+ /*}}}*/
+// System::pkgSystem - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Add it to the global list.. */
+pkgSystem::pkgSystem(char const * const label, pkgVersioningSystem * const vs) :
+ Label(label), VS(vs), d(new pkgSystemPrivate())
+{
+ assert(GlobalListLen < sizeof(SysList)/sizeof(*SysList));
+ SysList[GlobalListLen] = this;
+ ++GlobalListLen;
+}
+ /*}}}*/
+// System::GetSystem - Get the named system /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+APT_PURE pkgSystem *pkgSystem::GetSystem(const char *Label)
+{
+ for (unsigned I = 0; I != GlobalListLen; I++)
+ if (strcmp(SysList[I]->Label,Label) == 0)
+ return SysList[I];
+ return 0;
+}
+ /*}}}*/
+bool pkgSystem::MultiArchSupported() const /*{{{*/
+{
+ debSystem const * const deb = dynamic_cast<debSystem const *>(this);
+ if (deb != NULL)
+ return deb->SupportsMultiArch();
+ return true;
+}
+ /*}}}*/
+std::vector<std::string> pkgSystem::ArchitecturesSupported() const /*{{{*/
+{
+ debSystem const * const deb = dynamic_cast<debSystem const *>(this);
+ if (deb != NULL)
+ return deb->SupportedArchitectures();
+ return {};
+}
+ /*}}}*/
+// pkgSystem::Set/GetVersionMapping - for internal/external communication/*{{{*/
+void pkgSystem::SetVersionMapping(map_id_t const in, map_id_t const out)
+{
+ if (in == out)
+ return;
+ d->idmap.emplace(in, out);
+}
+map_id_t pkgSystem::GetVersionMapping(map_id_t const in) const
+{
+ auto const o = d->idmap.find(in);
+ return (o == d->idmap.end()) ? in : o->second;
+}
+ /*}}}*/
+
+bool pkgSystem::LockInner() /*{{{*/
+{
+ debSystem * const deb = dynamic_cast<debSystem *>(this);
+ if (deb != NULL)
+ return deb->LockInner();
+ return _error->Error("LockInner is not implemented");
+}
+ /*}}}*/
+bool pkgSystem::UnLockInner(bool NoErrors) /*{{{*/
+{
+ debSystem * const deb = dynamic_cast<debSystem *>(this);
+ if (deb != NULL)
+ return deb->UnLockInner(NoErrors);
+ return _error->Error("UnLockInner is not implemented");
+}
+ /*}}}*/
+bool pkgSystem::IsLocked() /*{{{*/
+{
+ debSystem * const deb = dynamic_cast<debSystem *>(this);
+ if (deb != NULL)
+ return deb->IsLocked();
+ return true;
+}
+ /*}}}*/
+pkgSystem::~pkgSystem() {}
diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h
new file mode 100644
index 0000000..b420705
--- /dev/null
+++ b/apt-pkg/pkgsystem.h
@@ -0,0 +1,141 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ System - Abstraction for running on different systems.
+
+ Instances of this class can be thought of as factories or meta-classes
+ for a variety of more specialized classes. Together this class and
+ it's specialized offspring completely define the environment and how
+ to access resources for a specific system. There are several sub
+ areas that are all orthogonal - each system has a unique combination of
+ these sub areas:
+ - Versioning. Different systems have different ideas on versions.
+ Within a system all sub classes must follow the same versioning
+ rules.
+ - Local tool locking to prevent multiple tools from accessing the
+ same database.
+ - Candidate Version selection policy - this is probably almost always
+ managed using a standard APT class
+ - Actual Package installation
+ * Indication of what kind of binary formats are supported
+ - Selection of local 'status' indexes that make up the pkgCache.
+
+ It is important to note that the handling of index files is not a
+ function of the system. Index files are handled through a separate
+ abstraction - the only requirement is that the index files have the
+ same idea of versioning as the target system.
+
+ Upon startup each supported system instantiates an instance of the
+ pkgSystem class (using a global constructor) which will make itself
+ available to the main APT init routine. That routine will select the
+ proper system and make it the global default.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_PKGSYSTEM_H
+#define PKGLIB_PKGSYSTEM_H
+
+#include <apt-pkg/pkgcache.h>
+
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+#endif
+
+class pkgDepCache;
+class pkgPackageManager;
+class pkgVersioningSystem;
+class Configuration;
+class pkgIndexFile;
+
+class pkgSystemPrivate;
+class pkgSystem
+{
+ public:
+
+ // Global list of supported systems
+ static pkgSystem **GlobalList;
+ static unsigned long GlobalListLen;
+ static pkgSystem *GetSystem(const char *Label);
+
+ const char * const Label;
+ pkgVersioningSystem * const VS;
+
+ /* Prevent other programs from touching shared data not covered by
+ other locks (cache or state locks) */
+ virtual bool Lock() = 0;
+ virtual bool UnLock(bool NoErrors = false) = 0;
+
+ /* Various helper classes to interface with specific bits of this
+ environment */
+ virtual pkgPackageManager *CreatePM(pkgDepCache *Cache) const = 0;
+
+ /* Load environment specific configuration and perform any other setup
+ necessary */
+ virtual bool Initialize(Configuration &/*Cnf*/) {return true;};
+
+ /* Type is some kind of Globally Unique way of differentiating
+ archive file types.. */
+ virtual bool ArchiveSupported(const char *Type) = 0;
+
+ // Return a list of system index files..
+ virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List) = 0;
+
+ virtual bool FindIndex(pkgCache::PkgFileIterator File,
+ pkgIndexFile *&Found) const = 0;
+
+ /* Evauluate how 'right' we are for this system based on the filesystem
+ etc.. */
+ virtual signed Score(Configuration const &/*Cnf*/) {
+ return 0;
+ };
+
+ //FIXME: these methods should be virtual
+ /** does this system has support for MultiArch?
+ *
+ * Systems supporting only single arch (not systems which are single arch)
+ * are considered legacy systems and support for it will likely degrade over
+ * time.
+ *
+ * The default implementation returns always \b true.
+ *
+ * @return \b true if the system supports MultiArch, \b false if not.
+ */
+ bool MultiArchSupported() const;
+ /** architectures supported by this system
+ *
+ * A MultiArch capable system might be configured to use
+ * this capability.
+ *
+ * @return a list of all architectures (native + foreign) configured
+ * for on this system (aka: which can be installed without force)
+ */
+ std::vector<std::string> ArchitecturesSupported() const;
+
+ APT_HIDDEN void SetVersionMapping(map_id_t const in, map_id_t const out);
+ APT_HIDDEN map_id_t GetVersionMapping(map_id_t const in) const;
+
+ pkgSystem(char const * const Label, pkgVersioningSystem * const VS);
+ virtual ~pkgSystem();
+
+
+ /* companions to Lock()/UnLock
+ *
+ * These functions can be called prior to calling dpkg to release an inner
+ * lock without releasing the overall outer lock, so that dpkg can run
+ * correctly but no other APT instance can acquire the system lock.
+ */
+ bool LockInner();
+ bool UnLockInner(bool NoErrors = false);
+ /// checks if the system is currently locked
+ bool IsLocked();
+ private:
+ pkgSystemPrivate * const d;
+};
+
+// The environment we are operating in.
+extern pkgSystem *_system;
+
+#endif
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
new file mode 100644
index 0000000..7986aa5
--- /dev/null
+++ b/apt-pkg/policy.cc
@@ -0,0 +1,442 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Version Policy implementation
+
+ This is just a really simple wrapper around pkgVersionMatch with
+ some added goodies to manage the list of things..
+
+ See man apt_preferences for what value means what.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefilter.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/netrc.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+#include <apt-pkg/version.h>
+#include <apt-pkg/versionmatch.h>
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <stddef.h>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+constexpr short NEVER_PIN = std::numeric_limits<short>::min();
+
+// Policy::Init - Startup and bind to a cache /*{{{*/
+// ---------------------------------------------------------------------
+/* Set the defaults for operation. The default mode with no loaded policy
+ file matches the V0 policy engine. */
+pkgPolicy::pkgPolicy(pkgCache *Owner) : Pins(nullptr), VerPins(nullptr),
+ PFPriority(nullptr), Cache(Owner), d(NULL)
+{
+ if (Owner == 0)
+ return;
+ PFPriority = new signed short[Owner->Head().PackageFileCount];
+ auto PackageCount = Owner->Head().PackageCount;
+ Pins = new Pin[PackageCount];
+ VerPins = new Pin[Owner->Head().VersionCount];
+
+ for (decltype(PackageCount) I = 0; I != PackageCount; ++I)
+ Pins[I].Type = pkgVersionMatch::None;
+ auto VersionCount = Owner->Head().VersionCount;
+ for (decltype(VersionCount) I = 0; I != VersionCount; ++I)
+ VerPins[I].Type = pkgVersionMatch::None;
+
+ // The config file has a master override.
+ string DefRel = _config->Find("APT::Default-Release");
+ if (DefRel.empty() == false)
+ {
+ bool found = false;
+ // FIXME: make ExpressionMatches static to use it here easily
+ pkgVersionMatch vm("", pkgVersionMatch::None);
+ for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F != Cache->FileEnd(); ++F)
+ {
+ if (vm.ExpressionMatches(DefRel, F.Archive()) ||
+ vm.ExpressionMatches(DefRel, F.Codename()) ||
+ vm.ExpressionMatches(DefRel, F.Version()) ||
+ (DefRel.length() > 2 && DefRel[1] == '='))
+ found = true;
+ }
+ if (found == false)
+ _error->Error(_("The value '%s' is invalid for APT::Default-Release as such a release is not available in the sources"), DefRel.c_str());
+ else
+ CreatePin(pkgVersionMatch::Release,"",DefRel,990);
+ }
+ InitDefaults();
+}
+ /*}}}*/
+// Policy::InitDefaults - Compute the default selections /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgPolicy::InitDefaults()
+{
+ std::vector<std::unique_ptr<FileFd>> authconfs;
+ // Initialize the priorities based on the status of the package file
+ for (pkgCache::PkgFileIterator I = Cache->FileBegin(); I != Cache->FileEnd(); ++I)
+ {
+ PFPriority[I->ID] = 500;
+ if (I.Flagged(pkgCache::Flag::NotSource))
+ PFPriority[I->ID] = 100;
+ else if (I.Flagged(pkgCache::Flag::ButAutomaticUpgrades))
+ PFPriority[I->ID] = 100;
+ else if (I.Flagged(pkgCache::Flag::NotAutomatic))
+ PFPriority[I->ID] = 1;
+ if (I.Flagged(pkgCache::Flag::PackagesRequireAuthorization) && !IsAuthorized(I, authconfs))
+ PFPriority[I->ID] = NEVER_PIN;
+ }
+
+ // Apply the defaults..
+ std::unique_ptr<bool[]> Fixed(new bool[Cache->HeaderP->PackageFileCount]);
+ memset(Fixed.get(),0,sizeof(Fixed[0])*Cache->HeaderP->PackageFileCount);
+ StatusOverride = false;
+ for (vector<Pin>::const_iterator I = Defaults.begin(); I != Defaults.end(); ++I)
+ {
+ pkgVersionMatch Match(I->Data,I->Type);
+ for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F != Cache->FileEnd(); ++F)
+ {
+ if ((Fixed[F->ID] == false || I->Priority == NEVER_PIN) && PFPriority[F->ID] != NEVER_PIN && Match.FileMatch(F) == true)
+ {
+ PFPriority[F->ID] = I->Priority;
+
+ if (PFPriority[F->ID] >= 1000)
+ StatusOverride = true;
+
+ Fixed[F->ID] = true;
+ }
+ }
+ }
+
+ if (_config->FindB("Debug::pkgPolicy",false) == true)
+ for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F != Cache->FileEnd(); ++F)
+ std::clog << "Prio of " << F.FileName() << ' ' << PFPriority[F->ID] << std::endl;
+
+ return true;
+}
+ /*}}}*/
+// Policy::GetCandidateVer - Get the candidate install version /*{{{*/
+// ---------------------------------------------------------------------
+/* Evaluate the package pins and the default list to deteremine what the
+ best package is. */
+pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const &Pkg)
+{
+ pkgCache::VerIterator cand;
+ pkgCache::VerIterator cur = Pkg.CurrentVer();
+ int candPriority = -1;
+ pkgVersioningSystem *vs = Cache->VS;
+
+ for (pkgCache::VerIterator ver = Pkg.VersionList(); ver.end() == false; ++ver) {
+ int priority = GetPriority(ver, true);
+
+ if (priority == 0 || priority <= candPriority)
+ continue;
+
+ // TODO: Maybe optimize to not compare versions
+ if (!cur.end() && priority < 1000
+ && (vs->CmpVersion(ver.VerStr(), cur.VerStr()) < 0))
+ continue;
+
+ candPriority = priority;
+ cand = ver;
+ }
+
+ return cand;
+}
+ /*}}}*/
+// Policy::CreatePin - Create an entry in the pin table.. /*{{{*/
+// ---------------------------------------------------------------------
+/* For performance we have 3 tables, the default table, the main cache
+ table (hashed to the cache). A blank package name indicates the pin
+ belongs to the default table. Order of insertion matters here, the
+ earlier defaults override later ones. */
+void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
+ string Data,signed short Priority)
+{
+ if (Name.empty() == true)
+ {
+ Pin *P = &*Defaults.insert(Defaults.end(),Pin());
+ P->Type = Type;
+ P->Priority = Priority;
+ P->Data = Data;
+ return;
+ }
+
+ size_t found = Name.rfind(':');
+ string Arch;
+ if (found != string::npos) {
+ Arch = Name.substr(found+1);
+ Name.erase(found);
+ }
+
+ // Allow pinning by wildcards - beware of package names looking like wildcards!
+ // TODO: Maybe we should always prefer specific pins over non-specific ones.
+ if ((Name[0] == '/' && Name[Name.length() - 1] == '/') || Name.find_first_of("*[?") != string::npos)
+ {
+ pkgVersionMatch match(Data, Type);
+ for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() != true; ++G)
+ if (Name != G.Name() && match.ExpressionMatches(Name, G.Name()))
+ {
+ if (Arch.empty() == false)
+ CreatePin(Type, string(G.Name()).append(":").append(Arch), Data, Priority);
+ else
+ CreatePin(Type, G.Name(), Data, Priority);
+ }
+ return;
+ }
+
+ // find the package (group) this pin applies to
+ pkgCache::GrpIterator Grp = Cache->FindGrp(Name);
+ bool matched = false;
+ if (Grp.end() == false)
+ {
+ std::string MatchingArch;
+ if (Arch.empty() == true)
+ MatchingArch = Cache->NativeArch();
+ else
+ MatchingArch = Arch;
+ APT::CacheFilter::PackageArchitectureMatchesSpecification pams(MatchingArch);
+ for (pkgCache::PkgIterator Pkg = Grp.PackageList(); Pkg.end() != true; Pkg = Grp.NextPkg(Pkg))
+ {
+ if (pams(Pkg.Arch()) == false)
+ continue;
+ Pin *P = Pins + Pkg->ID;
+ // the first specific stanza for a package is the ruler,
+ // all others need to be ignored
+ if (P->Type != pkgVersionMatch::None)
+ P = &*Unmatched.insert(Unmatched.end(),PkgPin(Pkg.FullName()));
+ P->Type = Type;
+ P->Priority = Priority;
+ P->Data = Data;
+ matched = true;
+
+ // Find matching version(s) and copy the pin into it
+ pkgVersionMatch Match(P->Data,P->Type);
+ for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() != true; ++Ver)
+ {
+ if (Match.VersionMatches(Ver)) {
+ Pin *VP = VerPins + Ver->ID;
+ if (VP->Type == pkgVersionMatch::None)
+ *VP = *P;
+ }
+ }
+ }
+ }
+
+ if (matched == false)
+ {
+ PkgPin *P = &*Unmatched.insert(Unmatched.end(),PkgPin(Name));
+ if (Arch.empty() == false)
+ P->Pkg.append(":").append(Arch);
+ P->Type = Type;
+ P->Priority = Priority;
+ P->Data = Data;
+ return;
+ }
+}
+ /*}}}*/
+// Policy::GetMatch - Get the matching version for a package pin /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgCache::VerIterator pkgPolicy::GetMatch(pkgCache::PkgIterator const &Pkg)
+{
+ const Pin &PPkg = Pins[Pkg->ID];
+ if (PPkg.Type == pkgVersionMatch::None)
+ return pkgCache::VerIterator(*Pkg.Cache());
+
+ pkgVersionMatch Match(PPkg.Data,PPkg.Type);
+ return Match.Find(Pkg);
+}
+ /*}}}*/
+// Policy::GetPriority - Get the priority of the package pin /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgIterator const &Pkg)
+{
+ if (Pins[Pkg->ID].Type != pkgVersionMatch::None)
+ return Pins[Pkg->ID].Priority;
+ return 0;
+}
+APT_PURE signed short pkgPolicy::GetPriority(pkgCache::VerIterator const &Ver, bool ConsiderFiles)
+{
+ if (VerPins[Ver->ID].Type != pkgVersionMatch::None)
+ {
+ // If all sources are never pins, the never pin wins.
+ if (VerPins[Ver->ID].Priority == NEVER_PIN)
+ return NEVER_PIN;
+ for (pkgCache::VerFileIterator file = Ver.FileList(); file.end() == false; file++)
+ if (GetPriority(file.File()) != NEVER_PIN)
+ return VerPins[Ver->ID].Priority;
+ }
+ if (!ConsiderFiles)
+ return 0;
+
+ // priorities are short ints, but we want to pick a value outside the valid range here
+ auto priority = std::numeric_limits<signed int>::min();
+ for (pkgCache::VerFileIterator file = Ver.FileList(); file.end() == false; file++)
+ {
+ /* If this is the status file, and the current version is not the
+ version in the status file (ie it is not installed, or somesuch)
+ then it is not a candidate for installation, ever. This weeds
+ out bogus entries that may be due to config-file states, or
+ other. */
+ if (file.File().Flagged(pkgCache::Flag::NotSource) && Ver.ParentPkg().CurrentVer() != Ver)
+ priority = std::max(priority, static_cast<decltype(priority)>(-1));
+ else
+ priority = std::max(priority, static_cast<decltype(priority)>(GetPriority(file.File())));
+ }
+
+ return priority == std::numeric_limits<decltype(priority)>::min() ? 0 : priority;
+}
+APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &File)
+{
+ return PFPriority[File->ID];
+}
+ /*}}}*/
+// ReadPinDir - Load the pin files from this dir into a Policy /*{{{*/
+// ---------------------------------------------------------------------
+/* This will load each pin file in the given dir into a Policy. If the
+ given dir is empty the dir set in Dir::Etc::PreferencesParts is used.
+ Note also that this method will issue a warning if the dir does not
+ exists but it will return true in this case! */
+bool ReadPinDir(pkgPolicy &Plcy,string Dir)
+{
+ if (Dir.empty() == true)
+ Dir = _config->FindDir("Dir::Etc::PreferencesParts", "/dev/null");
+
+ if (DirectoryExists(Dir) == false)
+ {
+ if (APT::String::Endswith(Dir, "/dev/null") == false)
+ _error->WarningE("DirectoryExists",_("Unable to read %s"),Dir.c_str());
+ return true;
+ }
+
+ _error->PushToStack();
+ vector<string> const List = GetListOfFilesInDir(Dir, "pref", true, true);
+ bool const PendingErrors = _error->PendingError();
+ _error->MergeWithStack();
+ if (PendingErrors)
+ return false;
+
+ // Read the files
+ bool good = true;
+ for (vector<string>::const_iterator I = List.begin(); I != List.end(); ++I)
+ good = ReadPinFile(Plcy, *I) && good;
+ return good;
+}
+ /*}}}*/
+// ReadPinFile - Load the pin file into a Policy /*{{{*/
+// ---------------------------------------------------------------------
+/* I'd like to see the preferences file store more than just pin information
+ but right now that is the only stuff I have to store. Later there will
+ have to be some kind of combined super parser to get the data into all
+ the right classes.. */
+bool ReadPinFile(pkgPolicy &Plcy,string File)
+{
+ if (File.empty() == true)
+ File = _config->FindFile("Dir::Etc::Preferences");
+
+ if (RealFileExists(File) == false)
+ return true;
+
+ FileFd Fd;
+ if (OpenConfigurationFileFd(File, Fd) == false)
+ return false;
+
+ pkgTagFile TF(&Fd, pkgTagFile::SUPPORT_COMMENTS);
+ if (Fd.IsOpen() == false || Fd.Failed())
+ return false;
+
+ pkgTagSection Tags;
+ while (TF.Step(Tags) == true)
+ {
+ // can happen when there are only comments in a record
+ if (Tags.Count() == 0)
+ continue;
+
+ string Name = Tags.FindS("Package");
+ if (Name.empty() == true)
+ return _error->Error(_("Invalid record in the preferences file %s, no Package header"), File.c_str());
+ if (Name == "*")
+ Name = string();
+
+ const char *Start;
+ const char *End;
+ if (Tags.Find("Pin",Start,End) == false)
+ continue;
+
+ const char *Word = Start;
+ for (; Word != End && isspace(*Word) == 0; Word++);
+
+ // Parse the type..
+ pkgVersionMatch::MatchType Type;
+ if (stringcasecmp(Start,Word,"version") == 0 && Name.empty() == false)
+ Type = pkgVersionMatch::Version;
+ else if (stringcasecmp(Start,Word,"release") == 0)
+ Type = pkgVersionMatch::Release;
+ else if (stringcasecmp(Start,Word,"origin") == 0)
+ Type = pkgVersionMatch::Origin;
+ else
+ {
+ _error->Warning(_("Did not understand pin type %s"),string(Start,Word).c_str());
+ continue;
+ }
+ for (; Word != End && isspace(*Word) != 0; Word++);
+
+ _error->PushToStack();
+ std::string sPriority = Tags.FindS("Pin-Priority");
+ int priority = sPriority == "never" ? NEVER_PIN : Tags.FindI("Pin-Priority", 0);
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+
+ if (sPriority == "never" && not Name.empty())
+ return _error->Error(_("%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"), File.c_str(), "never");
+
+ // Silently clamp the never pin to never pin + 1
+ if (priority == NEVER_PIN && sPriority != "never")
+ priority = NEVER_PIN + 1;
+ if (priority < std::numeric_limits<short>::min() ||
+ priority > std::numeric_limits<short>::max() ||
+ newError) {
+ return _error->Error(_("%s: Value %s is outside the range of valid pin priorities (%d to %d)"),
+ File.c_str(), Tags.FindS("Pin-Priority").c_str(),
+ std::numeric_limits<short>::min(),
+ std::numeric_limits<short>::max());
+ }
+ if (priority == 0)
+ {
+ return _error->Error(_("No priority (or zero) specified for pin"));
+ }
+
+ istringstream s(Name);
+ string pkg;
+ while(!s.eof())
+ {
+ s >> pkg;
+ Plcy.CreatePin(Type, pkg, string(Word,End),priority);
+ };
+ }
+
+ Plcy.InitDefaults();
+ return true;
+}
+ /*}}}*/
+
+pkgPolicy::~pkgPolicy() {delete [] PFPriority; delete [] Pins; delete [] VerPins; }
diff --git a/apt-pkg/policy.h b/apt-pkg/policy.h
new file mode 100644
index 0000000..bcd1daf
--- /dev/null
+++ b/apt-pkg/policy.h
@@ -0,0 +1,96 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Version Policy implementation
+
+ This implements the more advanced 'Version 4' APT policy engine. The
+ standard 'Version 0' engine is included inside the DepCache which is
+ it's historical location.
+
+ The V4 engine allows the user to completely control all aspects of
+ version selection. There are three primary means to choose a version
+ * Selection by version match
+ * Selection by Release file match
+ * Selection by origin server
+
+ Each package may be 'pinned' with a single criteria, which will ultimately
+ result in the selection of a single version, or no version, for each
+ package.
+
+ Furthermore, the default selection can be influenced by specifying
+ the ordering of package files. The order is derived by reading the
+ package file preferences and assigning a priority to each package
+ file.
+
+ A special flag may be set to indicate if no version should be returned
+ if no matching versions are found, otherwise the default matching
+ rules are used to locate a hit.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_POLICY_H
+#define PKGLIB_POLICY_H
+
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/versionmatch.h>
+
+#include <string>
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+#endif
+
+class pkgPolicy : public pkgDepCache::Policy
+{
+ protected:
+
+ struct Pin
+ {
+ pkgVersionMatch::MatchType Type;
+ std::string Data;
+ signed short Priority;
+ Pin() : Type(pkgVersionMatch::None), Priority(0) {};
+ };
+
+ struct PkgPin : Pin
+ {
+ std::string Pkg;
+ explicit PkgPin(std::string const &Pkg) : Pin(), Pkg(Pkg) {};
+ };
+
+ Pin *Pins;
+ Pin *VerPins;
+ signed short *PFPriority;
+ std::vector<Pin> Defaults;
+ std::vector<PkgPin> Unmatched;
+ pkgCache *Cache;
+ bool StatusOverride;
+
+ public:
+
+ // Things for manipulating pins
+ void CreatePin(pkgVersionMatch::MatchType Type,std::string Pkg,
+ std::string Data,signed short Priority);
+ pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg);
+
+ // Things for the cache interface.
+ virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual signed short GetPriority(pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual signed short GetPriority(pkgCache::VerIterator const &Ver, bool ConsiderFiles = true) APT_OVERRIDE;
+ virtual signed short GetPriority(pkgCache::PkgFileIterator const &File) APT_OVERRIDE;
+
+ bool InitDefaults();
+
+ explicit pkgPolicy(pkgCache *Owner);
+ virtual ~pkgPolicy();
+ private:
+ void * const d;
+};
+
+bool ReadPinFile(pkgPolicy &Plcy, std::string File = "");
+bool ReadPinDir(pkgPolicy &Plcy, std::string Dir = "");
+
+#endif
diff --git a/apt-pkg/prettyprinters.cc b/apt-pkg/prettyprinters.cc
new file mode 100644
index 0000000..87e78bb
--- /dev/null
+++ b/apt-pkg/prettyprinters.cc
@@ -0,0 +1,123 @@
+// Description /*{{{*/
+/* ######################################################################
+
+ Provide pretty printers for pkgCache structs like PkgIterator
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/prettyprinters.h>
+
+#include <ostream>
+#include <string>
+
+ /*}}}*/
+
+std::ostream& operator<<(std::ostream& os, const APT::PrettyPkg& pp) /*{{{*/
+{
+ if (pp.Pkg.end() == true)
+ return os << "invalid package";
+
+ auto state = (*pp.DepCache)[pp.Pkg];
+ std::string const current = (pp.Pkg.CurVersion() == 0 ? "none" : pp.Pkg.CurVersion());
+ std::string candidate = state.CandVersion;
+ if (candidate.empty())
+ candidate = "none";
+ std::string install = "none";
+ if (state.InstallVer != nullptr)
+ install = state.InstVerIter(*pp.DepCache).VerStr();
+
+ os << pp.Pkg.FullName(false) << " < " << current;
+ if (current != install && install != "none")
+ os << " -> " << install;
+ if (install != candidate && current != candidate)
+ os << " | " << candidate;
+ os << " @";
+ switch (pp.Pkg->SelectedState)
+ {
+ case pkgCache::State::Unknown: os << 'u'; break;
+ case pkgCache::State::Install: os << 'i'; break;
+ case pkgCache::State::Hold: os << 'h'; break;
+ case pkgCache::State::DeInstall: os << 'r'; break;
+ case pkgCache::State::Purge: os << 'p'; break;
+ default: os << 'X';
+ }
+ switch (pp.Pkg->InstState)
+ {
+ case pkgCache::State::Ok: break;
+ case pkgCache::State::ReInstReq: os << 'R'; break;
+ case pkgCache::State::HoldInst: os << 'H'; break;
+ case pkgCache::State::HoldReInstReq: os << "HR"; break;
+ default: os << 'X';
+ }
+ switch (pp.Pkg->CurrentState)
+ {
+ case pkgCache::State::NotInstalled: os << 'n'; break;
+ case pkgCache::State::ConfigFiles: os << 'c'; break;
+ case pkgCache::State::HalfInstalled: os << 'H'; break;
+ case pkgCache::State::UnPacked: os << 'U'; break;
+ case pkgCache::State::HalfConfigured: os << 'F'; break;
+ case pkgCache::State::TriggersAwaited: os << 'W'; break;
+ case pkgCache::State::TriggersPending: os << 'T'; break;
+ case pkgCache::State::Installed: os << 'i'; break;
+ default: os << 'X';
+ }
+ os << ' ';
+ if (state.Protect())
+ os << "p";
+ if (state.ReInstall())
+ os << "r";
+ if (state.Upgradable())
+ os << "u";
+ if (state.Marked)
+ os << "m";
+ if (state.Garbage)
+ os << "g";
+ if (state.NewInstall())
+ os << "N";
+ else if (state.Upgrade())
+ os << "U";
+ else if (state.Downgrade())
+ os << "D";
+ else if (state.Install())
+ os << "I";
+ else if (state.Purge())
+ os << "P";
+ else if (state.Delete())
+ os << "R";
+ else if (state.Held())
+ os << "H";
+ else if (state.Keep())
+ os << "K";
+ if (state.NowBroken())
+ os << " Nb";
+ else if (state.NowPolicyBroken())
+ os << " NPb";
+ if (state.InstBroken())
+ os << " Ib";
+ else if (state.InstPolicyBroken())
+ os << " IPb";
+ os << " >";
+ return os;
+}
+ /*}}}*/
+std::ostream& operator<<(std::ostream& os, const APT::PrettyDep& pd) /*{{{*/
+{
+ if (unlikely(pd.Dep.end() == true))
+ return os << "invalid dependency";
+
+ pkgCache::PkgIterator P = pd.Dep.ParentPkg();
+ pkgCache::PkgIterator T = pd.Dep.TargetPkg();
+
+ os << (P.end() ? "invalid pkg" : P.FullName(false)) << " " << pd.Dep.DepType()
+ << " on " << APT::PrettyPkg(pd.DepCache, T);
+
+ if (pd.Dep->Version != 0)
+ os << " (" << pd.Dep.CompType() << " " << pd.Dep.TargetVer() << ")";
+
+ return os;
+}
+ /*}}}*/
diff --git a/apt-pkg/prettyprinters.h b/apt-pkg/prettyprinters.h
new file mode 100644
index 0000000..40f9d66
--- /dev/null
+++ b/apt-pkg/prettyprinters.h
@@ -0,0 +1,37 @@
+#ifndef APT_PRETTYPRINTERS_H
+#define APT_PRETTYPRINTERS_H
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+class pkgDepCache;
+
+namespace APT {
+
+/** helper to format PkgIterator for easier printing in debug messages.
+ *
+ * The actual text generated is subject to change without prior notice
+ * and should NOT be used as part of a general user interface.
+ */
+struct PrettyPkg
+{
+ pkgDepCache * const DepCache;
+ pkgCache::PkgIterator const Pkg;
+ PrettyPkg(pkgDepCache * const depcache, pkgCache::PkgIterator const &pkg) APT_NONNULL(2) : DepCache(depcache), Pkg(pkg) {}
+};
+/** helper to format DepIterator for easier printing in debug messages.
+ *
+ * The actual text generated is subject to change without prior notice
+ * and should NOT be used as part of a general user interface.
+ */
+struct PrettyDep
+{
+ pkgDepCache * const DepCache;
+ pkgCache::DepIterator const Dep;
+ PrettyDep(pkgDepCache * const depcache, pkgCache::DepIterator const &dep) APT_NONNULL(2) : DepCache(depcache), Dep(dep) {}
+};
+
+}
+std::ostream& operator<<(std::ostream& os, const APT::PrettyPkg& pp);
+std::ostream& operator<<(std::ostream& os, const APT::PrettyDep& pd);
+
+#endif
diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc
new file mode 100644
index 0000000..a3d6931
--- /dev/null
+++ b/apt-pkg/sourcelist.cc
@@ -0,0 +1,643 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ List of Sources
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debindexfile.h>
+#include <apt-pkg/debsrcrecords.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <algorithm>
+#include <cstring>
+#include <fstream>
+#include <map>
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <stddef.h>
+#include <time.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// Global list of Items supported
+static pkgSourceList::Type *ItmList[10];
+pkgSourceList::Type **pkgSourceList::Type::GlobalList = ItmList;
+unsigned long pkgSourceList::Type::GlobalListLen = 0;
+
+static std::vector<std::string> FindMultiValue(pkgTagSection &Tags, char const *const Field) /*{{{*/
+{
+ auto values = Tags.FindS(Field);
+ // we ignore duplicate spaces by removing empty values
+ std::replace_if(values.begin(), values.end(), isspace_ascii, ' ');
+ auto vect = VectorizeString(values, ' ');
+ vect.erase(std::remove_if(vect.begin(), vect.end(), [](std::string const &s) { return s.empty(); }), vect.end());
+ return vect;
+}
+ /*}}}*/
+
+// Type::Type - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Link this to the global list of items*/
+pkgSourceList::Type::Type(char const * const pName, char const * const pLabel) : Name(pName), Label(pLabel)
+{
+ ItmList[GlobalListLen] = this;
+ ++GlobalListLen;
+}
+pkgSourceList::Type::~Type() {}
+ /*}}}*/
+// Type::GetType - Get a specific meta for a given type /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgSourceList::Type *pkgSourceList::Type::GetType(const char *Type)
+{
+ for (unsigned I = 0; I != GlobalListLen; ++I)
+ if (strcmp(GlobalList[I]->Name,Type) == 0)
+ return GlobalList[I];
+ return 0;
+}
+ /*}}}*/
+// Type::FixupURI - Normalize the URI and check it.. /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSourceList::Type::FixupURI(string &URI) const
+{
+ if (URI.empty() == true)
+ return false;
+
+ if (URI.find(':') == string::npos)
+ return false;
+
+ URI = SubstVar(URI,"$(ARCH)",_config->Find("APT::Architecture"));
+
+ // Make sure that the URI is / postfixed
+ if (URI[URI.size() - 1] != '/')
+ URI += '/';
+
+ return true;
+}
+ /*}}}*/
+bool pkgSourceList::Type::ParseStanza(vector<metaIndex *> &List, /*{{{*/
+ pkgTagSection &Tags,
+ unsigned int const i,
+ FileFd &Fd)
+{
+ map<string, string> Options;
+
+ string Enabled = Tags.FindS("Enabled");
+ if (Enabled.empty() == false && StringToBool(Enabled) == false)
+ return true;
+
+ std::map<char const * const, std::pair<char const * const, bool> > mapping;
+#define APT_PLUSMINUS(X, Y) \
+ mapping.insert(std::make_pair(X, std::make_pair(Y, true))); \
+ mapping.insert(std::make_pair(X "-Add", std::make_pair(Y "+", true))); \
+ mapping.insert(std::make_pair(X "-Remove", std::make_pair(Y "-", true)))
+ APT_PLUSMINUS("Architectures", "arch");
+ APT_PLUSMINUS("Languages", "lang");
+ APT_PLUSMINUS("Targets", "target");
+#undef APT_PLUSMINUS
+ mapping.insert(std::make_pair("Trusted", std::make_pair("trusted", false)));
+ mapping.insert(std::make_pair("Check-Valid-Until", std::make_pair("check-valid-until", false)));
+ mapping.insert(std::make_pair("Valid-Until-Min", std::make_pair("valid-until-min", false)));
+ mapping.insert(std::make_pair("Valid-Until-Max", std::make_pair("valid-until-max", false)));
+ mapping.insert(std::make_pair("Check-Date", std::make_pair("check-date", false)));
+ mapping.insert(std::make_pair("Date-Max-Future", std::make_pair("date-max-future", false)));
+ mapping.insert(std::make_pair("Signed-By", std::make_pair("signed-by", false)));
+ mapping.insert(std::make_pair("PDiffs", std::make_pair("pdiffs", false)));
+ mapping.insert(std::make_pair("By-Hash", std::make_pair("by-hash", false)));
+
+ for (std::map<char const * const, std::pair<char const * const, bool> >::const_iterator m = mapping.begin(); m != mapping.end(); ++m)
+ if (Tags.Exists(m->first))
+ {
+ if (m->second.second)
+ {
+ auto const values = FindMultiValue(Tags, m->first);
+ Options[m->second.first] = APT::String::Join(values, ",");
+ }
+ else
+ Options[m->second.first] = Tags.FindS(m->first);
+ }
+
+ {
+ std::string entry;
+ strprintf(entry, "%s:%i", Fd.Name().c_str(), i);
+ Options["sourceslist-entry"] = entry;
+ }
+
+ // now create one item per suite/section
+ auto const list_uris = FindMultiValue(Tags, "URIs");
+ auto const list_comp = FindMultiValue(Tags, "Components");
+ auto list_suite = FindMultiValue(Tags, "Suites");
+ {
+ auto const nativeArch = _config->Find("APT::Architecture");
+ std::transform(list_suite.begin(), list_suite.end(), list_suite.begin(),
+ [&](std::string const &suite) { return SubstVar(suite, "$(ARCH)", nativeArch); });
+ }
+
+ if (list_uris.empty())
+ // TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), i, "sources", Fd.Name().c_str(), "URI");
+
+ if (list_suite.empty())
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), i, "sources", Fd.Name().c_str(), "Suite");
+
+ for (auto URI : list_uris)
+ {
+ if (FixupURI(URI) == false)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), i, "sources", Fd.Name().c_str(), "URI parse");
+
+ for (auto const &S : list_suite)
+ {
+ if (likely(S.empty() == false) && S[S.size() - 1] == '/')
+ {
+ if (list_comp.empty() == false)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), i, "sources", Fd.Name().c_str(), "absolute Suite Component");
+ if (CreateItem(List, URI, S, "", Options) == false)
+ return false;
+ }
+ else
+ {
+ if (list_comp.empty())
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), i, "sources", Fd.Name().c_str(), "Component");
+
+ for (auto const &C : list_comp)
+ if (CreateItem(List, URI, S, C, Options) == false)
+ return false;
+ }
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// Type::ParseLine - Parse a single line /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a generic one that is the 'usual' format for sources.list
+ Weird types may override this. */
+bool pkgSourceList::Type::ParseLine(vector<metaIndex *> &List,
+ const char *Buffer,
+ unsigned int const CurLine,
+ string const &File) const
+{
+ for (;Buffer != 0 && isspace(*Buffer); ++Buffer); // Skip whitespaces
+
+ // Parse option field if it exists
+ // e.g.: [ option1=value1 option2=value2 ]
+ map<string, string> Options;
+ {
+ std::string entry;
+ strprintf(entry, "%s:%i", File.c_str(), CurLine);
+ Options["sourceslist-entry"] = entry;
+ }
+ if (Buffer != 0 && Buffer[0] == '[')
+ {
+ ++Buffer; // ignore the [
+ for (;Buffer != 0 && isspace(*Buffer); ++Buffer); // Skip whitespaces
+ while (*Buffer != ']')
+ {
+ // get one option, e.g. option1=value1
+ string option;
+ if (ParseQuoteWord(Buffer,option) == false)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] unparseable");
+
+ if (option.length() < 3)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] too short");
+
+ // accept options even if the last has no space before the ]-end marker
+ if (option.at(option.length()-1) == ']')
+ {
+ for (; *Buffer != ']'; --Buffer);
+ option.resize(option.length()-1);
+ }
+
+ size_t const needle = option.find('=');
+ if (needle == string::npos)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] not assignment");
+
+ string const key = string(option, 0, needle);
+ string const value = string(option, needle + 1, option.length());
+
+ if (key.empty() == true)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] no key");
+
+ if (value.empty() == true)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] no value");
+
+ Options[key] = value;
+ }
+ ++Buffer; // ignore the ]
+ for (;Buffer != 0 && isspace(*Buffer); ++Buffer); // Skip whitespaces
+ }
+
+ string URI;
+ string Dist;
+ string Section;
+
+ if (ParseQuoteWord(Buffer,URI) == false)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "URI");
+ if (ParseQuoteWord(Buffer,Dist) == false)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "Suite");
+
+ if (FixupURI(URI) == false)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "URI parse");
+
+ // Check for an absolute dists specification.
+ if (Dist.empty() == false && Dist[Dist.size() - 1] == '/')
+ {
+ if (ParseQuoteWord(Buffer,Section) == true)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "absolute Suite Component");
+ Dist = SubstVar(Dist,"$(ARCH)",_config->Find("APT::Architecture"));
+ return CreateItem(List, URI, Dist, Section, Options);
+ }
+
+ // Grab the rest of the dists
+ if (ParseQuoteWord(Buffer,Section) == false)
+ return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "Component");
+
+ do
+ {
+ if (CreateItem(List, URI, Dist, Section, Options) == false)
+ return false;
+ }
+ while (ParseQuoteWord(Buffer,Section) == true);
+
+ return true;
+}
+ /*}}}*/
+// SourceList::pkgSourceList - Constructors /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgSourceList::pkgSourceList() : d(NULL)
+{
+}
+ /*}}}*/
+// SourceList::~pkgSourceList - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgSourceList::~pkgSourceList()
+{
+ for (const_iterator I = SrcList.begin(); I != SrcList.end(); ++I)
+ delete *I;
+ SrcList.clear();
+ for (auto F = VolatileFiles.begin(); F != VolatileFiles.end(); ++F)
+ delete (*F);
+ VolatileFiles.clear();
+}
+ /*}}}*/
+// SourceList::ReadMainList - Read the main source list from etc /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSourceList::ReadMainList()
+{
+ Reset();
+ // CNC:2003-11-28 - Entries in sources.list have priority over
+ // entries in sources.list.d.
+ string Main = _config->FindFile("Dir::Etc::sourcelist", "/dev/null");
+ string Parts = _config->FindDir("Dir::Etc::sourceparts", "/dev/null");
+
+ _error->PushToStack();
+ if (RealFileExists(Main) == true)
+ ReadAppend(Main);
+ else if (DirectoryExists(Parts) == false && APT::String::Endswith(Parts, "/dev/null") == false)
+ // Only warn if there are no sources.list.d.
+ _error->WarningE("DirectoryExists", _("Unable to read %s"), Parts.c_str());
+
+ if (DirectoryExists(Parts) == true)
+ ReadSourceDir(Parts);
+ else if (Main.empty() == false && RealFileExists(Main) == false &&
+ APT::String::Endswith(Parts, "/dev/null") == false)
+ // Only warn if there is no sources.list file.
+ _error->WarningE("RealFileExists", _("Unable to read %s"), Main.c_str());
+
+ for (auto && file: _config->FindVector("APT::Sources::With"))
+ AddVolatileFile(file, nullptr);
+
+ auto good = _error->PendingError() == false;
+ _error->MergeWithStack();
+ return good;
+}
+ /*}}}*/
+// SourceList::Reset - Clear the sourcelist contents /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgSourceList::Reset()
+{
+ for (const_iterator I = SrcList.begin(); I != SrcList.end(); ++I)
+ delete *I;
+ SrcList.clear();
+}
+ /*}}}*/
+// SourceList::Read - Parse the sourcelist file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSourceList::Read(string const &File)
+{
+ Reset();
+ return ReadAppend(File);
+}
+ /*}}}*/
+// SourceList::ReadAppend - Parse a sourcelist file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSourceList::ReadAppend(string const &File)
+{
+ if (flExtension(File) == "sources")
+ return ParseFileDeb822(File);
+ else
+ return ParseFileOldStyle(File);
+}
+ /*}}}*/
+// SourceList::ReadFileOldStyle - Read Traditional style sources.list /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSourceList::ParseFileOldStyle(std::string const &File)
+{
+ FileFd Fd;
+ if (OpenConfigurationFileFd(File, Fd) == false)
+ return false;
+
+ std::string Buffer;
+ for (unsigned int CurLine = 1; Fd.ReadLine(Buffer); ++CurLine)
+ {
+ // remove comments
+ size_t curpos = 0;
+ while ((curpos = Buffer.find('#', curpos)) != std::string::npos)
+ {
+ size_t const openbrackets = std::count(Buffer.begin(), Buffer.begin() + curpos, '[');
+ size_t const closedbrackets = std::count(Buffer.begin(), Buffer.begin() + curpos, ']');
+ if (openbrackets > closedbrackets)
+ {
+ // a # in an option, unlikely, but oh well, it was supported so stick to it
+ ++curpos;
+ continue;
+ }
+ Buffer.erase(curpos);
+ break;
+ }
+ // remove spaces before/after
+ curpos = Buffer.find_first_not_of(" \t\r");
+ if (curpos != 0)
+ Buffer.erase(0, curpos);
+ curpos = Buffer.find_last_not_of(" \t\r");
+ if (curpos != std::string::npos)
+ Buffer.erase(curpos + 1);
+
+ if (Buffer.empty())
+ continue;
+
+ // Grok it
+ std::string const LineType = Buffer.substr(0, Buffer.find_first_of(" \t\v"));
+ if (LineType.empty() || LineType == Buffer)
+ return _error->Error(_("Malformed line %u in source list %s (type)"),CurLine,File.c_str());
+
+ Type *Parse = Type::GetType(LineType.c_str());
+ if (Parse == 0)
+ return _error->Error(_("Type '%s' is not known on line %u in source list %s"),LineType.c_str(),CurLine,File.c_str());
+
+ if (Parse->ParseLine(SrcList, Buffer.c_str() + LineType.length(), CurLine, File) == false)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+// SourceList::ParseFileDeb822 - Parse deb822 style sources.list /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns: the number of stanzas parsed*/
+bool pkgSourceList::ParseFileDeb822(string const &File)
+{
+ // see if we can read the file
+ FileFd Fd;
+ if (OpenConfigurationFileFd(File, Fd) == false)
+ return false;
+ pkgTagFile Sources(&Fd, pkgTagFile::SUPPORT_COMMENTS);
+ if (Fd.IsOpen() == false || Fd.Failed())
+ return _error->Error(_("Malformed stanza %u in source list %s (type)"),0,File.c_str());
+
+ // read step by step
+ pkgTagSection Tags;
+ unsigned int i = 0;
+ while (Sources.Step(Tags) == true)
+ {
+ ++i;
+ if(Tags.Exists("Types") == false)
+ return _error->Error(_("Malformed stanza %u in source list %s (type)"),i,File.c_str());
+
+ for (auto const &type : FindMultiValue(Tags, "Types"))
+ {
+ Type *Parse = Type::GetType(type.c_str());
+ if (Parse == 0)
+ {
+ _error->Error(_("Type '%s' is not known on stanza %u in source list %s"), type.c_str(), i, Fd.Name().c_str());
+ return false;
+ }
+
+ if (!Parse->ParseStanza(SrcList, Tags, i, Fd))
+ return false;
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// SourceList::FindIndex - Get the index associated with a file /*{{{*/
+static bool FindInIndexFileContainer(std::vector<pkgIndexFile *> const &Cont, pkgCache::PkgFileIterator const &File, pkgIndexFile *&Found)
+{
+ auto const J = std::find_if(Cont.begin(), Cont.end(), [&File](pkgIndexFile const * const J) {
+ return J->FindInCache(*File.Cache()) == File;
+ });
+ if (J != Cont.end())
+ {
+ Found = (*J);
+ return true;
+ }
+ return false;
+}
+bool pkgSourceList::FindIndex(pkgCache::PkgFileIterator File,
+ pkgIndexFile *&Found) const
+{
+ for (const_iterator I = SrcList.begin(); I != SrcList.end(); ++I)
+ if (FindInIndexFileContainer(*(*I)->GetIndexFiles(), File, Found))
+ return true;
+
+ return FindInIndexFileContainer(VolatileFiles, File, Found);
+}
+ /*}}}*/
+// SourceList::GetIndexes - Load the index files into the downloader /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSourceList::GetIndexes(pkgAcquire *Owner, bool GetAll) const
+{
+ for (const_iterator I = SrcList.begin(); I != SrcList.end(); ++I)
+ if ((*I)->GetIndexes(Owner,GetAll) == false)
+ return false;
+ return true;
+}
+ /*}}}*/
+// CNC:2003-03-03 - By Anton V. Denisov <avd@altlinux.org>.
+// SourceList::ReadSourceDir - Read a directory with sources files
+// Based on ReadConfigDir() /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgSourceList::ReadSourceDir(string const &Dir)
+{
+ std::vector<std::string> const ext = {"list", "sources"};
+ // Read the files
+ bool good = true;
+ for (auto const &I : GetListOfFilesInDir(Dir, ext, true))
+ good = ReadAppend(I) && good;
+ return good;
+}
+ /*}}}*/
+// GetLastModified() /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+time_t pkgSourceList::GetLastModifiedTime()
+{
+ vector<string> List;
+
+ string Main = _config->FindFile("Dir::Etc::sourcelist");
+ string Parts = _config->FindDir("Dir::Etc::sourceparts");
+
+ // go over the parts
+ if (DirectoryExists(Parts) == true)
+ List = GetListOfFilesInDir(Parts, "list", true);
+
+ // calculate the time
+ std::vector<time_t> modtimes;
+ modtimes.reserve(1 + List.size());
+ modtimes.push_back(GetModificationTime(Main));
+ std::transform(List.begin(), List.end(), std::back_inserter(modtimes), GetModificationTime);
+ auto const maxmtime = std::max_element(modtimes.begin(), modtimes.end());
+ return *maxmtime;
+}
+ /*}}}*/
+std::vector<pkgIndexFile*> pkgSourceList::GetVolatileFiles() const /*{{{*/
+{
+ return VolatileFiles;
+}
+ /*}}}*/
+void pkgSourceList::AddVolatileFile(pkgIndexFile * const File) /*{{{*/
+{
+ if (File != nullptr)
+ VolatileFiles.push_back(File);
+}
+ /*}}}*/
+static bool fileNameMatches(std::string const &filename, std::string const &idxtype)/*{{{*/
+{
+ for (auto && type: APT::Configuration::getCompressionTypes())
+ {
+ if (type == "uncompressed")
+ {
+ if (filename == idxtype || APT::String::Endswith(filename, '_' + idxtype))
+ return true;
+ }
+ else if (filename == idxtype + '.' + type ||
+ APT::String::Endswith(filename, '_' + idxtype + '.' + type))
+ return true;
+ }
+ return false;
+}
+ /*}}}*/
+bool pkgSourceList::AddVolatileFile(std::string const &File, std::vector<std::string> * const VolatileCmdL)/*{{{*/
+{
+ // Note: FileExists matches directories and links, too!
+ if (File.empty() || FileExists(File) == false)
+ return false;
+
+ std::string const ext = flExtension(File);
+ // udeb is not included as installing it is usually a mistake rather than intended
+ if (ext == "deb" || ext == "ddeb")
+ AddVolatileFile(new debDebPkgFileIndex(File));
+ else if (ext == "dsc")
+ AddVolatileFile(new debDscFileIndex(File));
+ else if (FileExists(flCombine(File, "debian/control")))
+ AddVolatileFile(new debDscFileIndex(flCombine(File, "debian/control")));
+ else if (ext == "changes")
+ {
+ debDscRecordParser changes(File, nullptr);
+ std::vector<pkgSrcRecords::File2> fileslst;
+ if (changes.Files2(fileslst) == false || fileslst.empty())
+ return false;
+ auto const basedir = flNotFile(File);
+ for (auto && file: fileslst)
+ {
+ auto const name = flCombine(basedir, file.Path);
+ AddVolatileFile(name, VolatileCmdL);
+ if (file.Hashes.VerifyFile(name) == false)
+ return _error->Error("The file %s does not match with the hashes in the %s file!", name.c_str(), File.c_str());
+ }
+ return true;
+ }
+ else
+ {
+ auto const filename = flNotDir(File);
+ auto const Target = IndexTarget(File, filename, File, "file:" + File, false, true, {
+ { "FILENAME", File },
+ { "REPO_URI", "file:" + flAbsPath(flNotFile(File)) + '/' },
+ { "COMPONENT", "volatile-packages-file" },
+ });
+ if (fileNameMatches(filename, "Packages"))
+ AddVolatileFile(new debPackagesIndex(Target, true));
+ else if (fileNameMatches(filename, "Sources"))
+ AddVolatileFile(new debSourcesIndex(Target, true));
+ else
+ return false;
+ }
+
+ if (VolatileCmdL != nullptr)
+ VolatileCmdL->push_back(File);
+ return true;
+}
+bool pkgSourceList::AddVolatileFile(std::string const &File)
+{
+ return AddVolatileFile(File, nullptr);
+}
+ /*}}}*/
+void pkgSourceList::AddVolatileFiles(CommandLine &CmdL, std::vector<std::string> * const VolatileCmdL)/*{{{*/
+{
+ std::remove_if(CmdL.FileList + 1, CmdL.FileList + 1 + CmdL.FileSize(), [&](char const * const I) {
+ if (I != nullptr && (I[0] == '/' || (I[0] == '.' && (I[1] == '\0' || (I[1] == '.' && (I[2] == '\0' || I[2] == '/')) || I[1] == '/'))))
+ {
+ if (AddVolatileFile(I, VolatileCmdL))
+ ;
+ else
+ _error->Error(_("Unsupported file %s given on commandline"), I);
+ return true;
+ }
+ return false;
+ });
+}
+void pkgSourceList::AddVolatileFiles(CommandLine &CmdL, std::vector<const char*> * const VolatileCmdL)
+{
+ std::remove_if(CmdL.FileList + 1, CmdL.FileList + 1 + CmdL.FileSize(), [&](char const * const I) {
+ if (I != nullptr && (I[0] == '/' || (I[0] == '.' && (I[1] == '\0' || (I[1] == '.' && (I[2] == '\0' || I[2] == '/')) || I[1] == '/'))))
+ {
+ if (AddVolatileFile(I))
+ {
+ if (VolatileCmdL != nullptr)
+ VolatileCmdL->push_back(I);
+ }
+ else
+ _error->Error(_("Unsupported file %s given on commandline"), I);
+ return true;
+ }
+ return false;
+ });
+}
+ /*}}}*/
diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h
new file mode 100644
index 0000000..fedf90f
--- /dev/null
+++ b/apt-pkg/sourcelist.h
@@ -0,0 +1,144 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ SourceList - Manage a list of sources
+
+ The Source List class provides access to a list of sources. It
+ can read them from a file and generate a list of all the distinct
+ sources.
+
+ All sources have a type associated with them that defines the layout
+ of the archive. The exact format of the file is documented in
+ files.sgml.
+
+ The types are mapped through a list of type definitions which handle
+ the actual construction of the back end type. After loading a source
+ list all you have is a list of package index files that have the ability
+ to be Acquired.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_SOURCELIST_H
+#define PKGLIB_SOURCELIST_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <time.h>
+
+#include <map>
+#include <string>
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/tagfile.h>
+#endif
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/metaindex.h>
+using std::string;
+using std::vector;
+#endif
+
+class FileFd;
+class pkgTagSection;
+class pkgAcquire;
+class pkgIndexFile;
+class metaIndex;
+class CommandLine;
+
+class pkgSourceList
+{
+ void * const d;
+ std::vector<pkgIndexFile*> VolatileFiles;
+ public:
+
+ // List of supported source list types
+ class Type
+ {
+ public:
+
+ // Global list of Items supported
+ static Type **GlobalList;
+ static unsigned long GlobalListLen;
+ static Type *GetType(const char *Type) APT_PURE;
+
+ char const * const Name;
+ char const * const Label;
+
+ bool FixupURI(std::string &URI) const;
+ virtual bool ParseStanza(std::vector<metaIndex *> &List,
+ pkgTagSection &Tags,
+ unsigned int const stanza_n,
+ FileFd &Fd);
+ virtual bool ParseLine(std::vector<metaIndex *> &List,
+ const char *Buffer,
+ unsigned int const CurLine,std::string const &File) const;
+ virtual bool CreateItem(std::vector<metaIndex *> &List,std::string const &URI,
+ std::string const &Dist,std::string const &Section,
+ std::map<std::string, std::string> const &Options) const = 0;
+ Type(char const * const Name, char const * const Label);
+ virtual ~Type();
+ };
+
+ typedef std::vector<metaIndex *>::const_iterator const_iterator;
+
+ protected:
+
+ std::vector<metaIndex *> SrcList;
+
+ private:
+ APT_HIDDEN bool ParseFileDeb822(std::string const &File);
+ APT_HIDDEN bool ParseFileOldStyle(std::string const &File);
+
+ public:
+
+ bool ReadMainList();
+ bool Read(std::string const &File);
+
+ // CNC:2003-03-03
+ void Reset();
+ bool ReadAppend(std::string const &File);
+ bool ReadSourceDir(std::string const &Dir);
+
+ // List accessors
+ inline const_iterator begin() const {return SrcList.begin();};
+ inline const_iterator end() const {return SrcList.end();};
+ inline unsigned int size() const {return SrcList.size();};
+ inline bool empty() const {return SrcList.empty();};
+
+ bool FindIndex(pkgCache::PkgFileIterator File,
+ pkgIndexFile *&Found) const;
+ bool GetIndexes(pkgAcquire *Owner, bool GetAll=false) const;
+
+ // query last-modified time
+ time_t GetLastModifiedTime();
+
+ /** \brief add file for parsing, but not to the cache
+ *
+ * pkgIndexFiles origining from pkgSourcesList are included in
+ * srcpkgcache, the status files added via #AddStatusFiles are
+ * included in pkgcache, but these files here are not included in
+ * any cache to have the possibility of having a file included just
+ * for a single run like a local .deb/.dsc file.
+ *
+ * The volatile files do not count as "normal" sourceslist entries,
+ * can't be iterated over with #begin and #end and can't be
+ * downloaded, but they can be found via #FindIndex.
+ *
+ * @param File is an index file; pointer-ownership is transferred
+ */
+ void AddVolatileFile(pkgIndexFile * const File);
+ bool AddVolatileFile(std::string const &File);
+ bool AddVolatileFile(std::string const &File, std::vector<std::string> * const VolatileCmdL);
+ APT_DEPRECATED_MSG("Use the overload with string-vector") void AddVolatileFiles(CommandLine &CmdL, std::vector<const char*> * const VolatileCmdL);
+ void AddVolatileFiles(CommandLine &CmdL, std::vector<std::string> * const VolatileCmdL);
+
+ /** @return list of files registered with #AddVolatileFile */
+ std::vector<pkgIndexFile*> GetVolatileFiles() const;
+
+ pkgSourceList();
+ virtual ~pkgSourceList();
+};
+
+#endif
diff --git a/apt-pkg/srcrecords.cc b/apt-pkg/srcrecords.cc
new file mode 100644
index 0000000..9d515ae
--- /dev/null
+++ b/apt-pkg/srcrecords.cc
@@ -0,0 +1,182 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Source Package Records - Allows access to source package records
+
+ Parses and allows access to the list of source records and searching by
+ source name on that list.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/debsrcrecords.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/srcrecords.h>
+
+#include <string>
+#include <vector>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// SrcRecords::pkgSrcRecords - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Open all the source index files */
+pkgSrcRecords::pkgSrcRecords(pkgSourceList &List) : d(NULL), Files(0)
+{
+ for (pkgSourceList::const_iterator I = List.begin(); I != List.end(); ++I)
+ {
+ std::vector<pkgIndexFile *> *Indexes = (*I)->GetIndexFiles();
+ for (std::vector<pkgIndexFile *>::const_iterator J = Indexes->begin();
+ J != Indexes->end(); ++J)
+ {
+ _error->PushToStack();
+ Parser* P = (*J)->CreateSrcParser();
+ bool const newError = _error->PendingError();
+ _error->MergeWithStack();
+ if (newError)
+ return;
+ if (P != 0)
+ Files.push_back(P);
+ }
+ }
+
+ // Doesn't work without any source index files
+ if (Files.empty() == true)
+ {
+ _error->Error(_("You must put some 'source' URIs"
+ " in your sources.list"));
+ return;
+ }
+
+ Restart();
+}
+ /*}}}*/
+// SrcRecords::~pkgSrcRecords - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgSrcRecords::~pkgSrcRecords()
+{
+ // Blow away all the parser objects
+ for(std::vector<Parser*>::iterator I = Files.begin(); I != Files.end(); ++I)
+ delete *I;
+}
+ /*}}}*/
+// SrcRecords::Restart - Restart the search /*{{{*/
+// ---------------------------------------------------------------------
+/* Return all of the parsers to their starting position */
+bool pkgSrcRecords::Restart()
+{
+ Current = Files.begin();
+ for (std::vector<Parser*>::iterator I = Files.begin();
+ I != Files.end(); ++I)
+ if ((*I)->Offset() != 0)
+ (*I)->Restart();
+
+ return true;
+}
+ /*}}}*/
+// SrcRecords::Step - Step to the next Source Record /*{{{*/
+// ---------------------------------------------------------------------
+/* Step to the next source package record */
+const pkgSrcRecords::Parser* pkgSrcRecords::Step()
+{
+ if (Current == Files.end())
+ return 0;
+
+ // Step to the next record, possibly switching files
+ while ((*Current)->Step() == false)
+ {
+ ++Current;
+ if (Current == Files.end())
+ return 0;
+ }
+
+ return *Current;
+}
+ /*}}}*/
+// SrcRecords::Find - Find the first source package with the given name /*{{{*/
+// ---------------------------------------------------------------------
+/* This searches on both source package names and output binary names and
+ returns the first found. A 'cursor' like system is used to allow this
+ function to be called multiple times to get successive entries */
+pkgSrcRecords::Parser *pkgSrcRecords::Find(const char *Package,bool const &SrcOnly)
+{
+ while (true)
+ {
+ if(Step() == 0)
+ return 0;
+
+ // Source name hit
+ if ((*Current)->Package() == Package)
+ return *Current;
+
+ if (SrcOnly == true)
+ continue;
+
+ // Check for a binary hit
+ const char **I = (*Current)->Binaries();
+ for (; I != 0 && *I != 0; ++I)
+ if (strcmp(Package,*I) == 0)
+ return *Current;
+ }
+}
+ /*}}}*/
+// Parser::BuildDepType - Convert a build dep to a string /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+const char *pkgSrcRecords::Parser::BuildDepType(unsigned char const &Type)
+{
+ const char *fields[] = {"Build-Depends",
+ "Build-Depends-Indep",
+ "Build-Conflicts",
+ "Build-Conflicts-Indep",
+ "Build-Depends-Arch",
+ "Build-Conflicts-Arch"};
+ if (unlikely(Type >= sizeof(fields)/sizeof(fields[0])))
+ return "";
+ return fields[Type];
+}
+ /*}}}*/
+bool pkgSrcRecords::Parser::Files2(std::vector<pkgSrcRecords::File2> &F2)/*{{{*/
+{
+ debSrcRecordParser * const deb = dynamic_cast<debSrcRecordParser*>(this);
+ if (deb != NULL)
+ return deb->Files2(F2);
+
+ std::vector<pkgSrcRecords::File> F;
+ if (Files(F) == false)
+ return false;
+ for (std::vector<pkgSrcRecords::File>::const_iterator f = F.begin(); f != F.end(); ++f)
+ {
+ pkgSrcRecords::File2 f2;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ f2.MD5Hash = f->MD5Hash;
+ f2.Size = f->Size;
+ f2.Hashes.push_back(HashString("MD5Sum", f->MD5Hash));
+ f2.FileSize = f->Size;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+ f2.Path = f->Path;
+ f2.Type = f->Type;
+ F2.push_back(f2);
+ }
+ return true;
+}
+ /*}}}*/
+
+
+pkgSrcRecords::Parser::Parser(const pkgIndexFile *Index) : d(NULL), iIndex(Index) {}
+pkgSrcRecords::Parser::~Parser() {}
diff --git a/apt-pkg/srcrecords.h b/apt-pkg/srcrecords.h
new file mode 100644
index 0000000..8c52f56
--- /dev/null
+++ b/apt-pkg/srcrecords.h
@@ -0,0 +1,120 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Source Package Records - Allows access to source package records
+
+ Parses and allows access to the list of source records and searching by
+ source name on that list.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_SRCRECORDS_H
+#define PKGLIB_SRCRECORDS_H
+
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/macros.h>
+
+#include <string>
+#include <vector>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+#endif
+
+class pkgSourceList;
+class pkgIndexFile;
+class pkgSrcRecords
+{
+ public:
+
+APT_IGNORE_DEPRECATED_PUSH
+ // Describes a single file
+ struct File
+ {
+ APT_DEPRECATED_MSG("Use Hashes member instead of hardcoded hash algorithm") std::string MD5Hash;
+ APT_DEPRECATED_MSG("Use FileSize member instead") unsigned long Size;
+ std::string Path;
+ std::string Type;
+ };
+ struct File2 : public File
+ {
+ unsigned long long FileSize;
+ HashStringList Hashes;
+ };
+APT_IGNORE_DEPRECATED_POP
+
+ // Abstract parser for each source record
+ class Parser
+ {
+ void * const d;
+ protected:
+
+ const pkgIndexFile *iIndex;
+
+ public:
+
+ enum BuildDep {BuildDepend=0x0,BuildDependIndep=0x1,
+ BuildConflict=0x2,BuildConflictIndep=0x3,
+ BuildDependArch=0x4,BuildConflictArch=0x5};
+
+ struct BuildDepRec
+ {
+ std::string Package;
+ std::string Version;
+ unsigned int Op;
+ unsigned char Type;
+ };
+
+ inline const pkgIndexFile &Index() const {return *iIndex;};
+
+ virtual bool Restart() = 0;
+ virtual bool Step() = 0;
+ virtual bool Jump(unsigned long const &Off) = 0;
+ virtual unsigned long Offset() = 0;
+ virtual std::string AsStr() = 0;
+
+ virtual std::string Package() const = 0;
+ virtual std::string Version() const = 0;
+ virtual std::string Maintainer() const = 0;
+ virtual std::string Section() const = 0;
+ virtual const char **Binaries() = 0; // Ownership does not transfer
+
+ //FIXME: Add a parameter to specify which architecture to use for [wildcard] matching
+ virtual bool BuildDepends(std::vector<BuildDepRec> &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true) = 0;
+ static const char *BuildDepType(unsigned char const &Type) APT_PURE;
+
+ virtual bool Files(std::vector<pkgSrcRecords::File> &F) = 0;
+ bool Files2(std::vector<pkgSrcRecords::File2> &F);
+
+ explicit Parser(const pkgIndexFile *Index);
+ virtual ~Parser();
+ };
+
+ private:
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ // The list of files and the current parser pointer
+ std::vector<Parser*> Files;
+ std::vector<Parser *>::iterator Current;
+
+ public:
+
+ // Reset the search
+ bool Restart();
+
+ // Step to the next SourcePackage and return pointer to the
+ // next SourceRecord. The pointer is owned by libapt.
+ const Parser* Step();
+
+ // Locate a package by name and return pointer to the Parser.
+ // The pointer is owned by libapt.
+ Parser* Find(const char *Package,bool const &SrcOnly = false);
+
+ explicit pkgSrcRecords(pkgSourceList &List);
+ virtual ~pkgSrcRecords();
+};
+
+#endif
diff --git a/apt-pkg/statechanges.cc b/apt-pkg/statechanges.cc
new file mode 100644
index 0000000..258c848
--- /dev/null
+++ b/apt-pkg/statechanges.cc
@@ -0,0 +1,227 @@
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/debsystem.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/prettyprinters.h>
+#include <apt-pkg/statechanges.h>
+
+#include <algorithm>
+#include <memory>
+
+namespace APT
+{
+
+class StateChanges::Private
+{
+public:
+ APT::VersionVector hold;
+ APT::VersionVector unhold;
+ APT::VersionVector install;
+ APT::VersionVector deinstall;
+ APT::VersionVector purge;
+ APT::VersionVector error;
+};
+
+#define APT_GETTERSETTER(Name, Container) \
+void StateChanges::Name(pkgCache::VerIterator const &Ver) \
+{ \
+ if (Ver.end() == false) \
+ Container.push_back(Ver); \
+}\
+APT::VersionVector& StateChanges::Name() \
+{ \
+ return Container; \
+}
+APT_GETTERSETTER(Hold, d->hold)
+APT_GETTERSETTER(Unhold, d->unhold)
+APT_GETTERSETTER(Install, d->install)
+APT_GETTERSETTER(Remove, d->deinstall)
+APT_GETTERSETTER(Purge, d->purge)
+#undef APT_GETTERSETTER
+APT::VersionVector& StateChanges::Error()
+{
+ return d->error;
+}
+
+void StateChanges::clear()
+{
+ d->hold.clear();
+ d->unhold.clear();
+ d->install.clear();
+ d->deinstall.clear();
+ d->purge.clear();
+ d->error.clear();
+}
+
+bool StateChanges::empty() const
+{
+ return d->hold.empty() &&
+ d->unhold.empty() &&
+ d->install.empty() &&
+ d->deinstall.empty() &&
+ d->purge.empty() &&
+ d->error.empty();
+}
+
+bool StateChanges::Save(bool const DiscardOutput)
+{
+ bool const Debug = _config->FindB("Debug::pkgDpkgPm", false);
+ d->error.clear();
+ if (d->hold.empty() && d->unhold.empty() && d->install.empty() && d->deinstall.empty() && d->purge.empty())
+ return true;
+
+ std::vector<std::string> Args = debSystem::GetDpkgBaseCommand();
+ // ensure dpkg knows about the package so that it keeps the status we set
+ if (d->hold.empty() == false || d->install.empty() == false)
+ {
+ APT::VersionVector makeDpkgAvailable;
+ auto const notInstalled = [](pkgCache::VerIterator const &V) { return V.ParentPkg()->CurrentVer == 0; };
+ std::copy_if(d->hold.begin(), d->hold.end(), std::back_inserter(makeDpkgAvailable), notInstalled);
+ std::copy_if(d->install.begin(), d->install.end(), std::back_inserter(makeDpkgAvailable), notInstalled);
+
+ if (makeDpkgAvailable.empty() == false)
+ {
+ auto const BaseArgs = Args.size();
+ Args.push_back("--merge-avail");
+ // FIXME: supported only since 1.17.7 in dpkg
+ Args.push_back("-");
+ int dummyAvail = -1;
+ if (Debug)
+ {
+ for (auto const &V: makeDpkgAvailable)
+ {
+ std::clog << "echo 'Dummy record for " << V.ParentPkg().FullName(false) << "' | ";
+ std::copy(Args.begin(), Args.end(), std::ostream_iterator<std::string>(std::clog, " "));
+ std::clog << std::endl;
+ }
+ }
+ else
+ {
+ pid_t const dpkgMergeAvail = debSystem::ExecDpkg(Args, &dummyAvail, nullptr, true);
+
+ FILE* dpkg = fdopen(dummyAvail, "w");
+ for (auto const &V: makeDpkgAvailable)
+ fprintf(dpkg, "Package: %s\nVersion: 0~\nArchitecture: %s\nMaintainer: Dummy Example <dummy@example.org>\n"
+ "Description: dummy package record\n A record is needed to put a package on hold, so here it is.\n\n", V.ParentPkg().Name(), V.Arch());
+ fclose(dpkg);
+
+ ExecWait(dpkgMergeAvail, "dpkg --merge-avail", true);
+ }
+ Args.erase(Args.begin() + BaseArgs, Args.end());
+ }
+ }
+ bool const dpkgMultiArch = _system->MultiArchSupported();
+
+ Args.push_back("--set-selections");
+ if (Debug)
+ {
+ std::string state;
+ auto const dpkgName = [&](pkgCache::VerIterator const &V) {
+ pkgCache::PkgIterator P = V.ParentPkg();
+ if (strcmp(V.Arch(), "none") == 0)
+ ioprintf(std::clog, "echo '%s %s' | ", P.Name(), state.c_str());
+ else if (dpkgMultiArch == false)
+ ioprintf(std::clog, "echo '%s %s' | ", P.FullName(true).c_str(), state.c_str());
+ else
+ ioprintf(std::clog, "echo '%s:%s %s' | ", P.Name(), V.Arch(), state.c_str());
+ std::copy(Args.begin(), Args.end(), std::ostream_iterator<std::string>(std::clog, " "));
+ std::clog << std::endl;
+ };
+ for (auto const &V: d->unhold)
+ {
+ if (V.ParentPkg()->CurrentVer != 0)
+ state = "install";
+ else
+ state = "deinstall";
+ dpkgName(V);
+ }
+ if (d->purge.empty() == false)
+ {
+ state = "purge";
+ std::for_each(d->purge.begin(), d->purge.end(), dpkgName);
+ }
+ if (d->deinstall.empty() == false)
+ {
+ state = "deinstall";
+ std::for_each(d->deinstall.begin(), d->deinstall.end(), dpkgName);
+ }
+ if (d->hold.empty() == false)
+ {
+ state = "hold";
+ std::for_each(d->hold.begin(), d->hold.end(), dpkgName);
+ }
+ if (d->install.empty() == false)
+ {
+ state = "install";
+ std::for_each(d->install.begin(), d->install.end(), dpkgName);
+ }
+ }
+ else
+ {
+ int selections = -1;
+ pid_t const dpkgSelections = debSystem::ExecDpkg(Args, &selections, nullptr, DiscardOutput);
+
+ FILE* dpkg = fdopen(selections, "w");
+ std::string state;
+ auto const dpkgName = [&](pkgCache::VerIterator const &V) {
+ pkgCache::PkgIterator P = V.ParentPkg();
+ if (strcmp(V.Arch(), "none") == 0)
+ fprintf(dpkg, "%s %s\n", P.Name(), state.c_str());
+ else if (dpkgMultiArch == false)
+ fprintf(dpkg, "%s %s\n", P.FullName(true).c_str(), state.c_str());
+ else
+ fprintf(dpkg, "%s:%s %s\n", P.Name(), V.Arch(), state.c_str());
+ };
+ for (auto const &V: d->unhold)
+ {
+ if (V.ParentPkg()->CurrentVer != 0)
+ state = "install";
+ else
+ state = "deinstall";
+ dpkgName(V);
+ }
+ if (d->purge.empty() == false)
+ {
+ state = "purge";
+ std::for_each(d->purge.begin(), d->purge.end(), dpkgName);
+ }
+ if (d->deinstall.empty() == false)
+ {
+ state = "deinstall";
+ std::for_each(d->deinstall.begin(), d->deinstall.end(), dpkgName);
+ }
+ if (d->hold.empty() == false)
+ {
+ state = "hold";
+ std::for_each(d->hold.begin(), d->hold.end(), dpkgName);
+ }
+ if (d->install.empty() == false)
+ {
+ state = "install";
+ std::for_each(d->install.begin(), d->install.end(), dpkgName);
+ }
+ fclose(dpkg);
+
+ if (ExecWait(dpkgSelections, "dpkg --set-selections") == false)
+ {
+ std::move(d->purge.begin(), d->purge.end(), std::back_inserter(d->error));
+ d->purge.clear();
+ std::move(d->deinstall.begin(), d->deinstall.end(), std::back_inserter(d->error));
+ d->deinstall.clear();
+ std::move(d->hold.begin(), d->hold.end(), std::back_inserter(d->error));
+ d->hold.clear();
+ std::move(d->unhold.begin(), d->unhold.end(), std::back_inserter(d->error));
+ d->unhold.clear();
+ std::move(d->install.begin(), d->install.end(), std::back_inserter(d->error));
+ d->install.clear();
+ }
+ }
+ return d->error.empty();
+}
+
+StateChanges::StateChanges() : d(new StateChanges::Private()) {}
+StateChanges::StateChanges(StateChanges&&) = default;
+StateChanges& StateChanges::operator=(StateChanges&&) = default;
+StateChanges::~StateChanges() = default;
+
+}
diff --git a/apt-pkg/statechanges.h b/apt-pkg/statechanges.h
new file mode 100644
index 0000000..2f63d51
--- /dev/null
+++ b/apt-pkg/statechanges.h
@@ -0,0 +1,58 @@
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <memory>
+
+namespace APT
+{
+
+/** Simple wrapper class to abstract away the differences in storing different
+ * states in different places potentially in different versions.
+ */
+class APT_PUBLIC StateChanges
+{
+public:
+ // getter/setter for the different states
+#define APT_GETTERSETTER(Name) \
+ APT::VersionVector& Name(); \
+ void Name(pkgCache::VerIterator const &Ver)
+ APT_GETTERSETTER(Hold);
+ APT_GETTERSETTER(Unhold);
+ APT_GETTERSETTER(Install);
+ APT_GETTERSETTER(Remove);
+ APT_GETTERSETTER(Purge);
+ APT::VersionVector& Error();
+#undef APT_GETTERSETTER
+
+ // operate on all containers at once
+ void clear();
+ bool empty() const;
+
+ /** commit the staged changes to the database(s).
+ *
+ * Makes the needed calls to store the requested states.
+ * After this call the state containers will hold only versions
+ * for which the storing operation succeeded. Versions where the
+ * storing operation failed are collected in #Error(). Note that
+ * error is an upper bound as states are changed in batches so it
+ * isn't always clear which version triggered the failure exactly.
+ *
+ * @param DiscardOutput controls if stdout/stderr should be used
+ * by subprocesses for (detailed) error reporting if needed.
+ * @return \b false if storing failed, true otherwise.
+ * Note that some states might be applied even if the whole operation failed.
+ */
+ bool Save(bool const DiscardOutput = false);
+
+ StateChanges();
+ StateChanges(StateChanges&&);
+ StateChanges& operator=(StateChanges&&);
+ ~StateChanges();
+
+private:
+ class APT_HIDDEN Private;
+ std::unique_ptr<Private> d;
+};
+
+}
diff --git a/apt-pkg/tagfile-compat.cc b/apt-pkg/tagfile-compat.cc
new file mode 100644
index 0000000..1e1d23e
--- /dev/null
+++ b/apt-pkg/tagfile-compat.cc
@@ -0,0 +1,75 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Fast scanner for RFC-822 type header information
+
+ This uses a rotating buffer to load the package information into.
+ The scanner runs over it and isolates and indexes a single section.
+
+ This defines compat functions for the external code.
+
+ ##################################################################### */
+ /*}}}*/
+
+#include <config.h>
+#define APT_COMPILING_TAGFILE_COMPAT_CC
+#include <apt-pkg/tagfile.h>
+
+using std::string;
+using APT::StringView;
+
+
+bool pkgTagSection::Exists(const char* const Tag) const
+{
+ return Exists(StringView(Tag));
+}
+
+bool pkgTagSection::Find(const char *Tag,unsigned int &Pos) const
+{
+ return Find(StringView(Tag), Pos);
+}
+
+bool pkgTagSection::Find(const char *Tag,const char *&Start,
+ const char *&End) const
+{
+ return Find(StringView(Tag), Start, End);
+}
+
+string pkgTagSection::FindS(const char *Tag) const
+{
+ return Find(StringView(Tag)).to_string();
+}
+
+string pkgTagSection::FindRawS(const char *Tag) const
+{
+ return FindRaw(StringView(Tag)).to_string();
+}
+
+signed int pkgTagSection::FindI(const char *Tag,signed long Default) const
+{
+ return FindI(StringView(Tag), Default);
+}
+
+unsigned long long pkgTagSection::FindULL(const char *Tag, unsigned long long const &Default) const
+{
+ return FindULL(StringView(Tag), Default);
+}
+ /*}}}*/
+
+bool pkgTagSection::FindB(const char *Tag, bool const &Default) const
+{
+ return FindB(StringView(Tag), Default);
+}
+
+bool pkgTagSection::FindFlag(const char * const Tag, uint8_t &Flags,
+ uint8_t const Flag) const
+{
+ return FindFlag(StringView(Tag), Flags, Flag);
+}
+
+bool pkgTagSection::FindFlag(const char *Tag,unsigned long &Flags,
+ unsigned long Flag) const
+{
+ return FindFlag(StringView(Tag), Flags, Flag);
+}
diff --git a/apt-pkg/tagfile-keys.list b/apt-pkg/tagfile-keys.list
new file mode 100644
index 0000000..a979a40
--- /dev/null
+++ b/apt-pkg/tagfile-keys.list
@@ -0,0 +1,83 @@
+Architecture
+Binary
+Breaks
+Bugs
+Build-Conflicts
+Build-Conflicts-Arch
+Build-Conflicts-Indep
+Build-Depends
+Build-Depends-Arch
+Build-Depends-Indep
+Build-Essential
+Built-For-Profiles
+Built-Using
+Checksums-Md5
+Checksums-Sha1
+Checksums-Sha256
+Checksums-Sha512
+Class
+Conffiles
+Config-Version
+Conflicts
+Depends
+Description
+Description-md5
+Directory
+Dm-Upload-Allowed
+Enhances
+Essential
+Filename
+Files
+Format
+Homepage
+Important
+Installed-Size
+Installer-Menu-Item
+Kernel-Version
+Maintainer
+MD5sum
+MSDOS-Filename
+Multi-Arch
+Optional
+Origin
+Original-Maintainer
+Package
+Package-List
+Package_Revision
+Package-Revision
+Package-Type
+Pre-Depends
+Priority
+Provides
+Recommended
+Recommends
+Replaces
+Revision
+Section
+SHA1
+SHA256
+SHA512
+Size
+Source
+Standards-Version
+Status
+Subarchitecture
+Suggests
+Tag
+Task
+Testsuite
+Testsuite-Triggers
+Triggers-Awaited
+Triggers-Pending
+Uploaders
+Vcs-Arch
+Vcs-Browse
+Vcs-Browser
+Vcs-Bzr
+Vcs-Cvs
+Vcs-Darcs
+Vcs-Git
+Vcs-Hg
+Vcs-Mtn
+Vcs-Svn
+Version
diff --git a/apt-pkg/tagfile-order.c b/apt-pkg/tagfile-order.c
new file mode 100644
index 0000000..4c2068c
--- /dev/null
+++ b/apt-pkg/tagfile-order.c
@@ -0,0 +1,113 @@
+/* In this file is the order defined in which e.g. apt-ftparchive will write stanzas in.
+ Other commands might or might not use this. 'apt-cache show' e.g. does NOT!
+
+ The order we chose here is inspired by both dpkg and dak.
+ The testcase test/integration/test-apt-tagfile-fields-order intends to ensure that
+ this file isn't lacking (too far) behind dpkg over time. */
+
+static const char *iTFRewritePackageOrder[] = {
+ "Package",
+ "Package-Type",
+ "Architecture",
+ "Subarchitecture", // Used only by d-i
+ "Version",
+ "Revision", // Obsolete (warning in dpkg)
+ "Package-Revision", // Obsolete (warning in dpkg)
+ "Package_Revision", // Obsolete (warning in dpkg)
+ "Kernel-Version", // Used only by d-i
+ "Built-Using",
+ "Built-For-Profiles",
+ "Auto-Built-Package",
+ "Multi-Arch",
+ "Status",
+ "Priority",
+ "Class", // dpkg nickname for Priority
+ "Build-Essential",
+ "Essential",
+ "Installer-Menu-Item", // Used only by d-i
+ "Section",
+ "Source",
+ "Origin",
+ "Maintainer",
+ "Original-Maintainer", // unknown in dpkg order
+ "Bugs",
+ "Config-Version", // Internal of dpkg
+ "Conffiles",
+ "Triggers-Awaited",
+ "Triggers-Pending",
+ "Installed-Size",
+ "Provides",
+ "Pre-Depends",
+ "Depends",
+ "Recommends",
+ "Recommended", // dpkg nickname for Recommends
+ "Suggests",
+ "Optional", // dpkg nickname for Suggests
+ "Conflicts",
+ "Breaks",
+ "Replaces",
+ "Enhances",
+ "Filename",
+ "MSDOS-Filename", // Obsolete (used by dselect)
+ "Size",
+ "MD5sum",
+ "SHA1",
+ "SHA256",
+ "SHA512",
+ "Homepage",
+ "Description",
+ "Tag",
+ "Task",
+ 0,
+};
+static const char *iTFRewriteSourceOrder[] = {
+ "Package",
+ "Source", // dsc file, renamed to Package in Sources
+ "Format",
+ "Binary",
+ "Architecture",
+ "Version",
+ "Priority",
+ "Class", // dpkg nickname for Priority
+ "Section",
+ "Origin",
+ "Maintainer",
+ "Original-Maintainer", // unknown in dpkg order
+ "Uploaders",
+ "Dm-Upload-Allowed", // Obsolete (ignored by dak)
+ "Standards-Version",
+ "Build-Depends",
+ "Build-Depends-Arch",
+ "Build-Depends-Indep",
+ "Build-Conflicts",
+ "Build-Conflicts-Arch",
+ "Build-Conflicts-Indep",
+ "Testsuite",
+ "Testsuite-Triggers",
+ "Homepage",
+ "Description",
+ "Vcs-Browser",
+ "Vcs-Browse", // dak only (nickname?)
+ "Vcs-Arch",
+ "Vcs-Bzr",
+ "Vcs-Cvs",
+ "Vcs-Darcs",
+ "Vcs-Git",
+ "Vcs-Hg",
+ "Vcs-Mtn",
+ "Vcs-Svn",
+ "Directory",
+ "Package-List",
+ "Files",
+ "Checksums-Md5",
+ "Checksums-Sha1",
+ "Checksums-Sha256",
+ "Checksums-Sha512",
+ 0,
+};
+
+/* Two levels of initialization are used because gcc will set the symbol
+ size of an array to the length of the array, causing dynamic relinking
+ errors. Doing this makes the symbol size constant */
+const char **TFRewritePackageOrder = iTFRewritePackageOrder;
+const char **TFRewriteSourceOrder = iTFRewriteSourceOrder;
diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc
new file mode 100644
index 0000000..1e7f286
--- /dev/null
+++ b/apt-pkg/tagfile.cc
@@ -0,0 +1,1210 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Fast scanner for RFC-822 type header information
+
+ This uses a rotating buffer to load the package information into.
+ The scanner runs over it and isolates and indexes a single section.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/string_view.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile-keys.h>
+#include <apt-pkg/tagfile.h>
+
+#include <list>
+
+#include <string>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using std::string;
+using APT::StringView;
+
+class APT_HIDDEN pkgTagFilePrivate /*{{{*/
+{
+public:
+ void Reset(FileFd * const pFd, unsigned long long const pSize, pkgTagFile::Flags const pFlags)
+ {
+ if (Buffer != NULL)
+ free(Buffer);
+ Buffer = NULL;
+ Fd = pFd;
+ Flags = pFlags;
+ Start = NULL;
+ End = NULL;
+ Done = false;
+ iOffset = 0;
+ Size = pSize;
+ isCommentedLine = false;
+ chunks.clear();
+ }
+
+ pkgTagFilePrivate(FileFd * const pFd, unsigned long long const Size, pkgTagFile::Flags const pFlags) : Buffer(NULL)
+ {
+ Reset(pFd, Size, pFlags);
+ }
+ FileFd * Fd;
+ pkgTagFile::Flags Flags;
+ char *Buffer;
+ char *Start;
+ char *End;
+ bool Done;
+ unsigned long long iOffset;
+ unsigned long long Size;
+ bool isCommentedLine;
+ struct FileChunk
+ {
+ bool const good;
+ size_t length;
+ FileChunk(bool const pgood, size_t const plength) : good(pgood), length(plength) {}
+ };
+ std::list<FileChunk> chunks;
+
+ ~pkgTagFilePrivate()
+ {
+ if (Buffer != NULL)
+ free(Buffer);
+ }
+};
+ /*}}}*/
+class APT_HIDDEN pkgTagSectionPrivate /*{{{*/
+{
+public:
+ pkgTagSectionPrivate()
+ {
+ }
+ struct TagData {
+ unsigned int StartTag;
+ unsigned int EndTag;
+ unsigned int StartValue;
+ unsigned int NextInBucket;
+
+ explicit TagData(unsigned int const StartTag) : StartTag(StartTag), EndTag(0), StartValue(0), NextInBucket(0) {}
+ };
+ std::vector<TagData> Tags;
+};
+ /*}}}*/
+
+static unsigned long BetaHash(const char *Text, size_t Length) /*{{{*/
+{
+ /* This very simple hash function for the last 8 letters gives
+ very good performance on the debian package files */
+ if (Length > 8)
+ {
+ Text += (Length - 8);
+ Length = 8;
+ }
+ unsigned long Res = 0;
+ for (size_t i = 0; i < Length; ++i)
+ Res = ((unsigned long)(Text[i]) & 0xDF) ^ (Res << 1);
+ return Res & 0x7F;
+}
+ /*}}}*/
+
+// TagFile::pkgTagFile - Constructor /*{{{*/
+pkgTagFile::pkgTagFile(FileFd * const pFd,pkgTagFile::Flags const pFlags, unsigned long long const Size)
+ : d(new pkgTagFilePrivate(pFd, Size + 4, pFlags))
+{
+ Init(pFd, pFlags, Size);
+}
+pkgTagFile::pkgTagFile(FileFd * const pFd,unsigned long long const Size)
+ : pkgTagFile(pFd, pkgTagFile::STRICT, Size)
+{
+}
+void pkgTagFile::Init(FileFd * const pFd, pkgTagFile::Flags const pFlags, unsigned long long Size)
+{
+ /* The size is increased by 4 because if we start with the Size of the
+ filename we need to try to read 1 char more to see an EOF faster, 1
+ char the end-pointer can be on and maybe 2 newlines need to be added
+ to the end of the file -> 4 extra chars */
+ Size += 4;
+ d->Reset(pFd, Size, pFlags);
+
+ if (d->Fd->IsOpen() == false)
+ d->Start = d->End = d->Buffer = 0;
+ else
+ d->Buffer = (char*)malloc(sizeof(char) * Size);
+
+ if (d->Buffer == NULL)
+ d->Done = true;
+ else
+ d->Done = false;
+
+ d->Start = d->End = d->Buffer;
+ d->iOffset = 0;
+ if (d->Done == false)
+ Fill();
+}
+void pkgTagFile::Init(FileFd * const pFd,unsigned long long Size)
+{
+ Init(pFd, pkgTagFile::STRICT, Size);
+}
+ /*}}}*/
+// TagFile::~pkgTagFile - Destructor /*{{{*/
+pkgTagFile::~pkgTagFile()
+{
+ delete d;
+}
+ /*}}}*/
+// TagFile::Offset - Return the current offset in the buffer /*{{{*/
+APT_PURE unsigned long pkgTagFile::Offset()
+{
+ return d->iOffset;
+}
+ /*}}}*/
+// TagFile::Resize - Resize the internal buffer /*{{{*/
+// ---------------------------------------------------------------------
+/* Resize the internal buffer (double it in size). Fail if a maximum size
+ * size is reached.
+ */
+bool pkgTagFile::Resize()
+{
+ // fail is the buffer grows too big
+ if(d->Size > 1024*1024+1)
+ return false;
+
+ return Resize(d->Size * 2);
+}
+bool pkgTagFile::Resize(unsigned long long const newSize)
+{
+ unsigned long long const EndSize = d->End - d->Start;
+
+ // get new buffer and use it
+ char* const newBuffer = static_cast<char*>(realloc(d->Buffer, sizeof(char) * newSize));
+ if (newBuffer == NULL)
+ return false;
+ d->Buffer = newBuffer;
+ d->Size = newSize;
+
+ // update the start/end pointers to the new buffer
+ d->Start = d->Buffer;
+ d->End = d->Start + EndSize;
+ return true;
+}
+ /*}}}*/
+// TagFile::Step - Advance to the next section /*{{{*/
+// ---------------------------------------------------------------------
+/* If the Section Scanner fails we refill the buffer and try again.
+ * If that fails too, double the buffer size and try again until a
+ * maximum buffer is reached.
+ */
+bool pkgTagFile::Step(pkgTagSection &Tag)
+{
+ if(Tag.Scan(d->Start,d->End - d->Start) == false)
+ {
+ do
+ {
+ if (Fill() == false)
+ return false;
+
+ if(Tag.Scan(d->Start,d->End - d->Start, false))
+ break;
+
+ if (Resize() == false)
+ return _error->Error(_("Unable to parse package file %s (%d)"),
+ d->Fd->Name().c_str(), 1);
+
+ } while (Tag.Scan(d->Start,d->End - d->Start, false) == false);
+ }
+
+ size_t tagSize = Tag.size();
+ d->Start += tagSize;
+
+ if ((d->Flags & pkgTagFile::SUPPORT_COMMENTS) == 0)
+ d->iOffset += tagSize;
+ else
+ {
+ auto first = d->chunks.begin();
+ for (; first != d->chunks.end(); ++first)
+ {
+ if (first->good == false)
+ d->iOffset += first->length;
+ else
+ {
+ if (tagSize < first->length)
+ {
+ first->length -= tagSize;
+ d->iOffset += tagSize;
+ break;
+ }
+ else
+ {
+ tagSize -= first->length;
+ d->iOffset += first->length;
+ }
+ }
+ }
+ d->chunks.erase(d->chunks.begin(), first);
+ }
+
+ if ((d->Flags & pkgTagFile::SUPPORT_COMMENTS) == 0 || Tag.Count() != 0)
+ {
+ Tag.Trim();
+ return true;
+ }
+ return Step(Tag);
+}
+ /*}}}*/
+// TagFile::Fill - Top up the buffer /*{{{*/
+// ---------------------------------------------------------------------
+/* This takes the bit at the end of the buffer and puts it at the start
+ then fills the rest from the file */
+static bool FillBuffer(pkgTagFilePrivate * const d)
+{
+ unsigned long long Actual = 0;
+ // See if only a bit of the file is left
+ unsigned long long const dataSize = d->Size - ((d->End - d->Buffer) + 1);
+ if (d->Fd->Read(d->End, dataSize, &Actual) == false)
+ return false;
+ if (Actual != dataSize)
+ d->Done = true;
+ d->End += Actual;
+ return true;
+}
+static void RemoveCommentsFromBuffer(pkgTagFilePrivate * const d)
+{
+ // look for valid comments in the buffer
+ char * good_start = nullptr, * bad_start = nullptr;
+ char * current = d->Start;
+ if (d->isCommentedLine == false)
+ {
+ if (d->Start == d->Buffer)
+ {
+ // the start of the buffer is a newline as a record can't start
+ // in the middle of a line by definition.
+ if (*d->Start == '#')
+ {
+ d->isCommentedLine = true;
+ ++current;
+ if (current > d->End)
+ d->chunks.emplace_back(false, 1);
+ }
+ }
+ if (d->isCommentedLine == false)
+ good_start = d->Start;
+ else
+ bad_start = d->Start;
+ }
+ else
+ bad_start = d->Start;
+
+ std::vector<std::pair<char*, size_t>> good_parts;
+ while (current <= d->End)
+ {
+ size_t const restLength = (d->End - current);
+ if (d->isCommentedLine == false)
+ {
+ current = static_cast<char*>(memchr(current, '#', restLength));
+ if (current == nullptr)
+ {
+ size_t const goodLength = d->End - good_start;
+ d->chunks.emplace_back(true, goodLength);
+ if (good_start != d->Start)
+ good_parts.push_back(std::make_pair(good_start, goodLength));
+ break;
+ }
+ bad_start = current;
+ --current;
+ // ensure that this is really a comment and not a '#' in the middle of a line
+ if (*current == '\n')
+ {
+ size_t const goodLength = (current - good_start) + 1;
+ d->chunks.emplace_back(true, goodLength);
+ good_parts.push_back(std::make_pair(good_start, goodLength));
+ good_start = nullptr;
+ d->isCommentedLine = true;
+ }
+ current += 2;
+ }
+ else // the current line is a comment
+ {
+ current = static_cast<char*>(memchr(current, '\n', restLength));
+ if (current == nullptr)
+ {
+ d->chunks.emplace_back(false, (d->End - bad_start));
+ break;
+ }
+ ++current;
+ // is the next line a comment, too?
+ if (current >= d->End || *current != '#')
+ {
+ d->chunks.emplace_back(false, (current - bad_start));
+ good_start = current;
+ bad_start = nullptr;
+ d->isCommentedLine = false;
+ }
+ ++current;
+ }
+ }
+
+ if (good_parts.empty() == false)
+ {
+ // we found comments, so move later parts over them
+ current = d->Start;
+ for (auto const &good: good_parts)
+ {
+ memmove(current, good.first, good.second);
+ current += good.second;
+ }
+ d->End = current;
+ }
+
+ if (d->isCommentedLine == true)
+ {
+ // deal with a buffer containing only comments
+ // or an (unfinished) comment at the end
+ if (good_parts.empty() == true)
+ d->End = d->Start;
+ else
+ d->Start = d->End;
+ }
+ else
+ {
+ // the buffer was all comment, but ended with the buffer
+ if (good_parts.empty() == true && good_start >= d->End)
+ d->End = d->Start;
+ else
+ d->Start = d->End;
+ }
+}
+bool pkgTagFile::Fill()
+{
+ unsigned long long const EndSize = d->End - d->Start;
+ if (EndSize != 0)
+ {
+ memmove(d->Buffer,d->Start,EndSize);
+ d->Start = d->End = d->Buffer + EndSize;
+ }
+ else
+ d->Start = d->End = d->Buffer;
+
+ unsigned long long Actual = 0;
+ while (d->Done == false && d->Size > (Actual + 1))
+ {
+ if (FillBuffer(d) == false)
+ return false;
+ if ((d->Flags & pkgTagFile::SUPPORT_COMMENTS) != 0)
+ RemoveCommentsFromBuffer(d);
+ Actual = d->End - d->Buffer;
+ }
+ d->Start = d->Buffer;
+
+ if (d->Done == true)
+ {
+ if (EndSize <= 3 && Actual == 0)
+ return false;
+ if (d->Size - (d->End - d->Buffer) < 4)
+ return true;
+
+ // Append a double new line if one does not exist
+ unsigned int LineCount = 0;
+ for (const char *E = d->End - 1; E - d->End < 6 && (*E == '\n' || *E == '\r'); E--)
+ if (*E == '\n')
+ ++LineCount;
+ if (LineCount < 2)
+ {
+ if (static_cast<unsigned long long>(d->End - d->Buffer) >= d->Size)
+ Resize(d->Size + 3);
+ for (; LineCount < 2; ++LineCount)
+ *d->End++ = '\n';
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// TagFile::Jump - Jump to a pre-recorded location in the file /*{{{*/
+// ---------------------------------------------------------------------
+/* This jumps to a pre-recorded file location and reads the record
+ that is there */
+bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long long Offset)
+{
+ if ((d->Flags & pkgTagFile::SUPPORT_COMMENTS) == 0 &&
+ // We are within a buffer space of the next hit..
+ Offset >= d->iOffset && d->iOffset + (d->End - d->Start) > Offset)
+ {
+ unsigned long long Dist = Offset - d->iOffset;
+ d->Start += Dist;
+ d->iOffset += Dist;
+ // if we have seen the end, don't ask for more
+ if (d->Done == true)
+ return Tag.Scan(d->Start, d->End - d->Start);
+ else
+ return Step(Tag);
+ }
+
+ // Reposition and reload..
+ d->iOffset = Offset;
+ d->Done = false;
+ if (d->Fd->Seek(Offset) == false)
+ return false;
+ d->End = d->Start = d->Buffer;
+ d->isCommentedLine = false;
+ d->chunks.clear();
+
+ if (Fill() == false)
+ return false;
+
+ if (Tag.Scan(d->Start, d->End - d->Start) == true)
+ return true;
+
+ // This appends a double new line (for the real eof handling)
+ if (Fill() == false)
+ return false;
+
+ if (Tag.Scan(d->Start, d->End - d->Start, false) == false)
+ return _error->Error(_("Unable to parse package file %s (%d)"),d->Fd->Name().c_str(), 2);
+
+ return true;
+}
+ /*}}}*/
+// pkgTagSection::pkgTagSection - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+APT_IGNORE_DEPRECATED_PUSH
+pkgTagSection::pkgTagSection()
+ : Section(0), d(new pkgTagSectionPrivate()), Stop(0)
+{
+ memset(&AlphaIndexes, 0, sizeof(AlphaIndexes));
+ memset(&BetaIndexes, 0, sizeof(BetaIndexes));
+}
+APT_IGNORE_DEPRECATED_POP
+ /*}}}*/
+// TagSection::Scan - Scan for the end of the header information /*{{{*/
+bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength, bool const Restart)
+{
+ Section = Start;
+ const char *End = Start + MaxLength;
+
+ if (Restart == false && d->Tags.empty() == false)
+ {
+ Stop = Section + d->Tags.back().StartTag;
+ if (End <= Stop)
+ return false;
+ Stop = (const char *)memchr(Stop,'\n',End - Stop);
+ if (Stop == NULL)
+ return false;
+ ++Stop;
+ }
+ else
+ {
+ Stop = Section;
+ if (d->Tags.empty() == false)
+ {
+ memset(&AlphaIndexes, 0, sizeof(AlphaIndexes));
+ memset(&BetaIndexes, 0, sizeof(BetaIndexes));
+ d->Tags.clear();
+ }
+ d->Tags.reserve(0x100);
+ }
+ unsigned int TagCount = d->Tags.size();
+
+ if (Stop == 0)
+ return false;
+
+ pkgTagSectionPrivate::TagData lastTagData(0);
+ lastTagData.EndTag = 0;
+ Key lastTagKey = Key::Unknown;
+ unsigned int lastTagHash = 0;
+ while (Stop < End)
+ {
+ TrimRecord(true,End);
+
+ // this can happen when TrimRecord trims away the entire Record
+ // (e.g. because it just contains comments)
+ if(Stop == End)
+ return true;
+
+ // Start a new index and add it to the hash
+ if (isspace_ascii(Stop[0]) == 0)
+ {
+ // store the last found tag
+ if (lastTagData.EndTag != 0)
+ {
+ if (lastTagKey != Key::Unknown) {
+ AlphaIndexes[static_cast<size_t>(lastTagKey)] = TagCount;
+ } else {
+ if (BetaIndexes[lastTagHash] != 0)
+ lastTagData.NextInBucket = BetaIndexes[lastTagHash];
+ APT_IGNORE_DEPRECATED_PUSH
+ BetaIndexes[lastTagHash] = TagCount;
+ APT_IGNORE_DEPRECATED_POP
+ }
+ d->Tags.push_back(lastTagData);
+ }
+
+ APT_IGNORE_DEPRECATED(++TagCount;)
+ lastTagData = pkgTagSectionPrivate::TagData(Stop - Section);
+ // find the colon separating tag and value
+ char const * Colon = (char const *) memchr(Stop, ':', End - Stop);
+ if (Colon == NULL)
+ return false;
+ // find the end of the tag (which might or might not be the colon)
+ char const * EndTag = Colon;
+ --EndTag;
+ for (; EndTag > Stop && isspace_ascii(*EndTag) != 0; --EndTag)
+ ;
+ ++EndTag;
+ lastTagData.EndTag = EndTag - Section;
+ lastTagKey = pkgTagHash(Stop, EndTag - Stop);
+ if (lastTagKey == Key::Unknown)
+ lastTagHash = BetaHash(Stop, EndTag - Stop);
+ // find the beginning of the value
+ Stop = Colon + 1;
+ for (; Stop < End && isspace_ascii(*Stop) != 0; ++Stop)
+ if (*Stop == '\n' && Stop[1] != ' ')
+ break;
+ if (Stop >= End)
+ return false;
+ lastTagData.StartValue = Stop - Section;
+ }
+
+ Stop = (const char *)memchr(Stop,'\n',End - Stop);
+
+ if (Stop == 0)
+ return false;
+
+ for (; Stop+1 < End && Stop[1] == '\r'; Stop++)
+ /* nothing */
+ ;
+
+ // Double newline marks the end of the record
+ if (Stop+1 < End && Stop[1] == '\n')
+ {
+ if (lastTagData.EndTag != 0)
+ {
+ if (lastTagKey != Key::Unknown) {
+ AlphaIndexes[static_cast<size_t>(lastTagKey)] = TagCount;
+ } else {
+ if (BetaIndexes[lastTagHash] != 0)
+ lastTagData.NextInBucket = BetaIndexes[lastTagHash];
+ APT_IGNORE_DEPRECATED(BetaIndexes[lastTagHash] = TagCount;)
+ }
+ d->Tags.push_back(lastTagData);
+ }
+
+ pkgTagSectionPrivate::TagData const td(Stop - Section);
+ d->Tags.push_back(td);
+ TrimRecord(false,End);
+ return true;
+ }
+
+ Stop++;
+ }
+
+ return false;
+}
+ /*}}}*/
+// TagSection::TrimRecord - Trim off any garbage before/after a record /*{{{*/
+// ---------------------------------------------------------------------
+/* There should be exactly 2 newline at the end of the record, no more. */
+void pkgTagSection::TrimRecord(bool BeforeRecord, const char*& End)
+{
+ if (BeforeRecord == true)
+ return;
+ for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++);
+}
+ /*}}}*/
+// TagSection::Trim - Trim off any trailing garbage /*{{{*/
+// ---------------------------------------------------------------------
+/* There should be exactly 1 newline at the end of the buffer, no more. */
+void pkgTagSection::Trim()
+{
+ for (; Stop > Section + 2 && (Stop[-2] == '\n' || Stop[-2] == '\r'); Stop--);
+}
+ /*}}}*/
+// TagSection::Exists - return True if a tag exists /*{{{*/
+bool pkgTagSection::Exists(StringView Tag) const
+{
+ unsigned int tmp;
+ return Find(Tag, tmp);
+}
+ /*}}}*/
+// TagSection::Find - Locate a tag /*{{{*/
+// ---------------------------------------------------------------------
+/* This searches the section for a tag that matches the given string. */
+bool pkgTagSection::Find(Key key,unsigned int &Pos) const
+{
+ auto Bucket = AlphaIndexes[static_cast<size_t>(key)];
+ Pos = Bucket - 1;
+ return Bucket != 0;
+}
+bool pkgTagSection::Find(StringView TagView,unsigned int &Pos) const
+{
+ const char * const Tag = TagView.data();
+ size_t const Length = TagView.length();
+ auto key = pkgTagHash(Tag, Length);
+ if (key != Key::Unknown)
+ return Find(key, Pos);
+
+ unsigned int Bucket = BetaIndexes[BetaHash(Tag, Length)];
+ if (Bucket == 0)
+ return false;
+
+ for (; Bucket != 0; Bucket = d->Tags[Bucket - 1].NextInBucket)
+ {
+ if ((d->Tags[Bucket - 1].EndTag - d->Tags[Bucket - 1].StartTag) != Length)
+ continue;
+
+ char const * const St = Section + d->Tags[Bucket - 1].StartTag;
+ if (strncasecmp(Tag,St,Length) != 0)
+ continue;
+
+ Pos = Bucket - 1;
+ return true;
+ }
+
+ Pos = 0;
+ return false;
+}
+
+bool pkgTagSection::FindInternal(unsigned int Pos, const char *&Start,
+ const char *&End) const
+{
+ Start = Section + d->Tags[Pos].StartValue;
+ // Strip off the gunk from the end
+ End = Section + d->Tags[Pos + 1].StartTag;
+ if (unlikely(Start > End))
+ return _error->Error("Internal parsing error");
+
+ for (; isspace_ascii(End[-1]) != 0 && End > Start; --End);
+
+ return true;
+}
+bool pkgTagSection::Find(StringView Tag,const char *&Start,
+ const char *&End) const
+{
+ unsigned int Pos;
+ return Find(Tag, Pos) && FindInternal(Pos, Start, End);
+}
+bool pkgTagSection::Find(Key key,const char *&Start,
+ const char *&End) const
+{
+ unsigned int Pos;
+ return Find(key, Pos) && FindInternal(Pos, Start, End);
+}
+ /*}}}*/
+// TagSection::FindS - Find a string /*{{{*/
+StringView pkgTagSection::Find(StringView Tag) const
+{
+ const char *Start;
+ const char *End;
+ if (Find(Tag,Start,End) == false)
+ return StringView();
+ return StringView(Start, End - Start);
+}
+StringView pkgTagSection::Find(Key key) const
+{
+ const char *Start;
+ const char *End;
+ if (Find(key,Start,End) == false)
+ return StringView();
+ return StringView(Start, End - Start);
+}
+ /*}}}*/
+// TagSection::FindRawS - Find a string /*{{{*/
+StringView pkgTagSection::FindRawInternal(unsigned int Pos) const
+{
+ char const *Start = (char const *) memchr(Section + d->Tags[Pos].EndTag, ':', d->Tags[Pos].StartValue - d->Tags[Pos].EndTag);
+ ++Start;
+ char const *End = Section + d->Tags[Pos + 1].StartTag;
+ if (unlikely(Start > End))
+ return "";
+
+ for (; isspace_ascii(End[-1]) != 0 && End > Start; --End);
+
+ return StringView(Start, End - Start);
+}
+StringView pkgTagSection::FindRaw(StringView Tag) const
+{
+ unsigned int Pos;
+ return Find(Tag, Pos) ? FindRawInternal(Pos) : "";
+}
+StringView pkgTagSection::FindRaw(Key key) const
+{
+ unsigned int Pos;
+ return Find(key, Pos) ? FindRawInternal(Pos) : "";
+}
+ /*}}}*/
+// TagSection::FindI - Find an integer /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+signed int pkgTagSection::FindIInternal(unsigned int Pos,signed long Default) const
+{
+ const char *Start;
+ const char *Stop;
+ if (FindInternal(Pos,Start,Stop) == false)
+ return Default;
+
+ // Copy it into a temp buffer so we can use strtol
+ char S[300];
+ if ((unsigned)(Stop - Start) >= sizeof(S))
+ return Default;
+ strncpy(S,Start,Stop-Start);
+ S[Stop - Start] = 0;
+
+ errno = 0;
+ char *End;
+ signed long Result = strtol(S,&End,10);
+ if (errno == ERANGE ||
+ Result < std::numeric_limits<int>::min() || Result > std::numeric_limits<int>::max()) {
+ errno = ERANGE;
+ _error->Error(_("Cannot convert %s to integer: out of range"), S);
+ }
+ if (S == End)
+ return Default;
+ return Result;
+}
+signed int pkgTagSection::FindI(Key key,signed long Default) const
+{
+ unsigned int Pos;
+
+ return Find(key, Pos) ? FindIInternal(Pos) : Default;
+}
+signed int pkgTagSection::FindI(StringView Tag,signed long Default) const
+{
+ unsigned int Pos;
+
+ return Find(Tag, Pos) ? FindIInternal(Pos, Default) : Default;
+}
+ /*}}}*/
+// TagSection::FindULL - Find an unsigned long long integer /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned long long pkgTagSection::FindULLInternal(unsigned int Pos, unsigned long long const &Default) const
+{
+ const char *Start;
+ const char *Stop;
+ if (FindInternal(Pos,Start,Stop) == false)
+ return Default;
+
+ // Copy it into a temp buffer so we can use strtoull
+ char S[100];
+ if ((unsigned)(Stop - Start) >= sizeof(S))
+ return Default;
+ strncpy(S,Start,Stop-Start);
+ S[Stop - Start] = 0;
+
+ char *End;
+ unsigned long long Result = strtoull(S,&End,10);
+ if (S == End)
+ return Default;
+ return Result;
+}
+unsigned long long pkgTagSection::FindULL(Key key, unsigned long long const &Default) const
+{
+ unsigned int Pos;
+
+ return Find(key, Pos) ? FindULLInternal(Pos, Default) : Default;
+}
+unsigned long long pkgTagSection::FindULL(StringView Tag, unsigned long long const &Default) const
+{
+ unsigned int Pos;
+
+ return Find(Tag, Pos) ? FindULLInternal(Pos, Default) : Default;
+}
+ /*}}}*/
+// TagSection::FindB - Find boolean value /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgTagSection::FindBInternal(unsigned int Pos, bool Default) const
+{
+ const char *Start, *Stop;
+ if (FindInternal(Pos, Start, Stop) == false)
+ return Default;
+ return StringToBool(string(Start, Stop));
+}
+bool pkgTagSection::FindB(Key key, bool Default) const
+{
+ unsigned int Pos;
+ return Find(key, Pos) ? FindBInternal(Pos, Default): Default;
+}
+bool pkgTagSection::FindB(StringView Tag, bool Default) const
+{
+ unsigned int Pos;
+ return Find(Tag, Pos) ? FindBInternal(Pos, Default) : Default;
+}
+ /*}}}*/
+// TagSection::FindFlag - Locate a yes/no type flag /*{{{*/
+// ---------------------------------------------------------------------
+/* The bits marked in Flag are masked on/off in Flags */
+bool pkgTagSection::FindFlagInternal(unsigned int Pos, uint8_t &Flags,
+ uint8_t const Flag) const
+{
+ const char *Start;
+ const char *Stop;
+ if (FindInternal(Pos,Start,Stop) == false)
+ return true;
+ return FindFlag(Flags, Flag, Start, Stop);
+}
+bool pkgTagSection::FindFlag(Key key, uint8_t &Flags,
+ uint8_t const Flag) const
+{
+ unsigned int Pos;
+ if (Find(key,Pos) == false)
+ return true;
+ return FindFlagInternal(Pos, Flags, Flag);
+}
+bool pkgTagSection::FindFlag(StringView Tag, uint8_t &Flags,
+ uint8_t const Flag) const
+{
+ unsigned int Pos;
+ if (Find(Tag,Pos) == false)
+ return true;
+ return FindFlagInternal(Pos, Flags, Flag);
+}
+bool pkgTagSection::FindFlag(uint8_t &Flags, uint8_t const Flag,
+ char const* const Start, char const* const Stop)
+{
+ switch (StringToBool(string(Start, Stop)))
+ {
+ case 0:
+ Flags &= ~Flag;
+ return true;
+
+ case 1:
+ Flags |= Flag;
+ return true;
+
+ default:
+ _error->Warning("Unknown flag value: %s",string(Start,Stop).c_str());
+ return true;
+ }
+ return true;
+}
+bool pkgTagSection::FindFlagInternal(unsigned int Pos,unsigned long &Flags,
+ unsigned long Flag) const
+{
+ const char *Start;
+ const char *Stop;
+ if (FindInternal(Pos,Start,Stop) == false)
+ return true;
+ return FindFlag(Flags, Flag, Start, Stop);
+}
+bool pkgTagSection::FindFlag(Key key,unsigned long &Flags,
+ unsigned long Flag) const
+{
+ unsigned int Pos;
+ return Find(key, Pos) ? FindFlagInternal(Pos, Flags, Flag) : true;
+}
+bool pkgTagSection::FindFlag(StringView Tag,unsigned long &Flags,
+ unsigned long Flag) const
+{
+ unsigned int Pos;
+ return Find(Tag, Pos) ? FindFlagInternal(Pos, Flags, Flag) : true;
+}
+bool pkgTagSection::FindFlag(unsigned long &Flags, unsigned long Flag,
+ char const* Start, char const* Stop)
+{
+ switch (StringToBool(string(Start, Stop)))
+ {
+ case 0:
+ Flags &= ~Flag;
+ return true;
+
+ case 1:
+ Flags |= Flag;
+ return true;
+
+ default:
+ _error->Warning("Unknown flag value: %s",string(Start,Stop).c_str());
+ return true;
+ }
+ return true;
+}
+ /*}}}*/
+void pkgTagSection::Get(const char *&Start,const char *&Stop,unsigned int I) const/*{{{*/
+{
+ Start = Section + d->Tags[I].StartTag;
+ Stop = Section + d->Tags[I+1].StartTag;
+}
+ /*}}}*/
+APT_PURE unsigned int pkgTagSection::Count() const { /*{{{*/
+ if (d->Tags.empty() == true)
+ return 0;
+ // the last element is just marking the end and isn't a real one
+ return d->Tags.size() - 1;
+}
+ /*}}}*/
+// TagSection::Write - Ordered (re)writing of fields /*{{{*/
+pkgTagSection::Tag pkgTagSection::Tag::Remove(std::string const &Name)
+{
+ return Tag(REMOVE, Name, "");
+}
+pkgTagSection::Tag pkgTagSection::Tag::Rename(std::string const &OldName, std::string const &NewName)
+{
+ return Tag(RENAME, OldName, NewName);
+}
+pkgTagSection::Tag pkgTagSection::Tag::Rewrite(std::string const &Name, std::string const &Data)
+{
+ if (Data.empty() == true)
+ return Tag(REMOVE, Name, "");
+ else
+ return Tag(REWRITE, Name, Data);
+}
+static bool WriteTag(FileFd &File, std::string Tag, StringView Value)
+{
+ if (Value.empty() || isspace_ascii(Value[0]) != 0)
+ Tag.append(":");
+ else
+ Tag.append(": ");
+ Tag.append(Value.data(), Value.length());
+ Tag.append("\n");
+ return File.Write(Tag.c_str(), Tag.length());
+}
+static bool RewriteTags(FileFd &File, pkgTagSection const * const This, char const * const Tag,
+ std::vector<pkgTagSection::Tag>::const_iterator &R,
+ std::vector<pkgTagSection::Tag>::const_iterator const &REnd)
+{
+ size_t const TagLen = strlen(Tag);
+ for (; R != REnd; ++R)
+ {
+ std::string data;
+ if (R->Name.length() == TagLen && strncasecmp(R->Name.c_str(), Tag, R->Name.length()) == 0)
+ {
+ if (R->Action != pkgTagSection::Tag::REWRITE)
+ break;
+ data = R->Data;
+ }
+ else if(R->Action == pkgTagSection::Tag::RENAME && R->Data.length() == TagLen &&
+ strncasecmp(R->Data.c_str(), Tag, R->Data.length()) == 0)
+ data = This->FindRaw(R->Name.c_str()).to_string();
+ else
+ continue;
+
+ return WriteTag(File, Tag, data);
+ }
+ return true;
+}
+bool pkgTagSection::Write(FileFd &File, char const * const * const Order, std::vector<Tag> const &Rewrite) const
+{
+ // first pass: Write everything we have an order for
+ if (Order != NULL)
+ {
+ for (unsigned int I = 0; Order[I] != 0; ++I)
+ {
+ std::vector<Tag>::const_iterator R = Rewrite.begin();
+ if (RewriteTags(File, this, Order[I], R, Rewrite.end()) == false)
+ return false;
+ if (R != Rewrite.end())
+ continue;
+
+ if (Exists(Order[I]) == false)
+ continue;
+
+ if (WriteTag(File, Order[I], FindRaw(Order[I])) == false)
+ return false;
+ }
+ }
+ // second pass: See if we have tags which aren't ordered
+ if (d->Tags.empty() == false)
+ {
+ for (std::vector<pkgTagSectionPrivate::TagData>::const_iterator T = d->Tags.begin(); T != d->Tags.end() - 1; ++T)
+ {
+ char const * const fieldname = Section + T->StartTag;
+ size_t fieldnamelen = T->EndTag - T->StartTag;
+ if (Order != NULL)
+ {
+ unsigned int I = 0;
+ for (; Order[I] != 0; ++I)
+ {
+ if (fieldnamelen == strlen(Order[I]) && strncasecmp(fieldname, Order[I], fieldnamelen) == 0)
+ break;
+ }
+ if (Order[I] != 0)
+ continue;
+ }
+
+ std::string const name(fieldname, fieldnamelen);
+ std::vector<Tag>::const_iterator R = Rewrite.begin();
+ if (RewriteTags(File, this, name.c_str(), R, Rewrite.end()) == false)
+ return false;
+ if (R != Rewrite.end())
+ continue;
+
+ if (WriteTag(File, name, FindRaw(name)) == false)
+ return false;
+ }
+ }
+ // last pass: see if there are any rewrites remaining we haven't done yet
+ for (std::vector<Tag>::const_iterator R = Rewrite.begin(); R != Rewrite.end(); ++R)
+ {
+ if (R->Action == Tag::REMOVE)
+ continue;
+ std::string const name = ((R->Action == Tag::RENAME) ? R->Data : R->Name);
+ if (Exists(name.c_str()))
+ continue;
+ if (Order != NULL)
+ {
+ unsigned int I = 0;
+ for (; Order[I] != 0; ++I)
+ {
+ if (strncasecmp(name.c_str(), Order[I], name.length()) == 0 && name.length() == strlen(Order[I]))
+ break;
+ }
+ if (Order[I] != 0)
+ continue;
+ }
+
+ if (WriteTag(File, name, ((R->Action == Tag::RENAME) ? FindRaw(R->Name) : R->Data)) == false)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+
+void pkgUserTagSection::TrimRecord(bool /*BeforeRecord*/, const char* &End)/*{{{*/
+{
+ for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r' || Stop[0] == '#'); Stop++)
+ if (Stop[0] == '#')
+ Stop = (const char*) memchr(Stop,'\n',End-Stop);
+}
+ /*}}}*/
+
+#include "tagfile-order.c"
+
+// TFRewrite - Rewrite a control record /*{{{*/
+// ---------------------------------------------------------------------
+/* This writes the control record to stdout rewriting it as necessary. The
+ override map item specificies the rewriting rules to follow. This also
+ takes the time to sort the feild list. */
+APT_IGNORE_DEPRECATED_PUSH
+bool TFRewrite(FILE *Output,pkgTagSection const &Tags,const char *Order[],
+ TFRewriteData *Rewrite)
+{
+ unsigned char Visited[256]; // Bit 1 is Order, Bit 2 is Rewrite
+ for (unsigned I = 0; I != 256; I++)
+ Visited[I] = 0;
+
+ // Set new tag up as necessary.
+ for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++)
+ {
+ if (Rewrite[J].NewTag == 0)
+ Rewrite[J].NewTag = Rewrite[J].Tag;
+ }
+
+ // Write all of the tags, in order.
+ if (Order != NULL)
+ {
+ for (unsigned int I = 0; Order[I] != 0; I++)
+ {
+ bool Rewritten = false;
+
+ // See if this is a field that needs to be rewritten
+ for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++)
+ {
+ if (strcasecmp(Rewrite[J].Tag,Order[I]) == 0)
+ {
+ Visited[J] |= 2;
+ if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0)
+ {
+ if (isspace_ascii(Rewrite[J].Rewrite[0]))
+ fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite);
+ else
+ fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite);
+ }
+ Rewritten = true;
+ break;
+ }
+ }
+
+ // See if it is in the fragment
+ unsigned Pos;
+ if (Tags.Find(StringView(Order[I]),Pos) == false)
+ continue;
+ Visited[Pos] |= 1;
+
+ if (Rewritten == true)
+ continue;
+
+ /* Write out this element, taking a moment to rewrite the tag
+ in case of changes of case. */
+ const char *Start;
+ const char *Stop;
+ Tags.Get(Start,Stop,Pos);
+
+ if (fputs(Order[I],Output) < 0)
+ return _error->Errno("fputs","IO Error to output");
+ Start += strlen(Order[I]);
+ if (fwrite(Start,Stop - Start,1,Output) != 1)
+ return _error->Errno("fwrite","IO Error to output");
+ if (Stop[-1] != '\n')
+ fprintf(Output,"\n");
+ }
+ }
+
+ // Now write all the old tags that were missed.
+ for (unsigned int I = 0; I != Tags.Count(); I++)
+ {
+ if ((Visited[I] & 1) == 1)
+ continue;
+
+ const char *Start;
+ const char *Stop;
+ Tags.Get(Start,Stop,I);
+ const char *End = Start;
+ for (; End < Stop && *End != ':'; End++);
+
+ // See if this is a field that needs to be rewritten
+ bool Rewritten = false;
+ for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++)
+ {
+ if (stringcasecmp(Start,End,Rewrite[J].Tag) == 0)
+ {
+ Visited[J] |= 2;
+ if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0)
+ {
+ if (isspace_ascii(Rewrite[J].Rewrite[0]))
+ fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite);
+ else
+ fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite);
+ }
+
+ Rewritten = true;
+ break;
+ }
+ }
+
+ if (Rewritten == true)
+ continue;
+
+ // Write out this element
+ if (fwrite(Start,Stop - Start,1,Output) != 1)
+ return _error->Errno("fwrite","IO Error to output");
+ if (Stop[-1] != '\n')
+ fprintf(Output,"\n");
+ }
+
+ // Now write all the rewrites that were missed
+ for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++)
+ {
+ if ((Visited[J] & 2) == 2)
+ continue;
+
+ if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0)
+ {
+ if (isspace_ascii(Rewrite[J].Rewrite[0]))
+ fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite);
+ else
+ fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite);
+ }
+ }
+
+ return true;
+}
+APT_IGNORE_DEPRECATED_POP
+ /*}}}*/
+
+pkgTagSection::~pkgTagSection() { delete d; }
diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h
new file mode 100644
index 0000000..8b59c43
--- /dev/null
+++ b/apt-pkg/tagfile.h
@@ -0,0 +1,241 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Fast scanner for RFC-822 type header information
+
+ This parser handles Debian package files (and others). Their form is
+ RFC-822 type header fields in groups separated by a blank line.
+
+ The parser reads the file and provides methods to step linearly
+ over it or to jump to a pre-recorded start point and read that record.
+
+ A second class is used to perform pre-parsing of the record. It works
+ by indexing the start of each header field and providing lookup
+ functions for header fields.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_TAGFILE_H
+#define PKGLIB_TAGFILE_H
+
+#include <apt-pkg/macros.h>
+
+#include <stdint.h>
+#include <stdio.h>
+
+#include <list>
+#include <string>
+#include <vector>
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+#include <apt-pkg/string_view.h>
+#endif
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
+
+class FileFd;
+class pkgTagSectionPrivate;
+class pkgTagFilePrivate;
+
+/** \class pkgTagSection parses a single deb822 stanza and provides various Find methods
+ * to extract the included values. It can also be used to modify and write a
+ * valid deb822 stanza optionally (re)ordering the fields inside the stanza.
+ *
+ * Beware: This class does \b NOT support (#-)comments in in- or output!
+ * If the input contains comments they have to be stripped first like pkgTagFile
+ * does with SUPPORT_COMMENTS flag set. */
+class pkgTagSection
+{
+ const char *Section;
+ unsigned int AlphaIndexes[128];
+ unsigned int BetaIndexes[128];
+
+ pkgTagSectionPrivate * const d;
+
+ APT_HIDDEN bool FindInternal(unsigned int Pos,const char *&Start, const char *&End) const;
+#if defined(APT_PKG_EXPOSE_STRING_VIEW)
+ APT_HIDDEN APT::StringView FindInternal(unsigned int Pos) const;
+ APT_HIDDEN APT::StringView FindRawInternal(unsigned int Pos) const;
+#endif
+ APT_HIDDEN signed int FindIInternal(unsigned int Pos,signed long Default = 0) const;
+ APT_HIDDEN bool FindBInternal(unsigned int Pos, bool Default = false) const;
+ APT_HIDDEN unsigned long long FindULLInternal(unsigned int Pos, unsigned long long const &Default = 0) const;
+ APT_HIDDEN bool FindFlagInternal(unsigned int Pos,uint8_t &Flags, uint8_t const Flag) const;
+ APT_HIDDEN bool FindFlagInternal(unsigned int Pos,unsigned long &Flags, unsigned long Flag) const;
+
+ protected:
+ const char *Stop;
+
+ public:
+
+ inline bool operator ==(const pkgTagSection &rhs) {return Section == rhs.Section;};
+ inline bool operator !=(const pkgTagSection &rhs) {return Section != rhs.Section;};
+
+#if !defined(APT_PKG_EXPOSE_STRING_VIEW) || defined(APT_COMPILING_TAGFILE_COMPAT_CC)
+ bool Find(const char *Tag,const char *&Start, const char *&End) const;
+ bool Find(const char *Tag,unsigned int &Pos) const;
+ signed int FindI(const char *Tag,signed long Default = 0) const;
+ bool FindB(const char *Tag, bool const &Default = false) const;
+ unsigned long long FindULL(const char *Tag, unsigned long long const &Default = 0) const;
+ bool FindFlag(const char * const Tag,uint8_t &Flags,
+ uint8_t const Flag) const;
+ bool FindFlag(const char *Tag,unsigned long &Flags,
+ unsigned long Flag) const;
+ bool Exists(const char* const Tag) const;
+#endif
+ // TODO: Remove internally
+ std::string FindS(const char *Tag) const;
+ std::string FindRawS(const char *Tag) const;
+
+ // Functions for lookup with a perfect hash function
+ enum class Key;
+ APT_HIDDEN bool Find(Key key,const char *&Start, const char *&End) const;
+ APT_HIDDEN bool Find(Key key,unsigned int &Pos) const;
+ APT_HIDDEN signed int FindI(Key key,signed long Default = 0) const;
+ APT_HIDDEN bool FindB(Key key, bool Default = false) const;
+ APT_HIDDEN unsigned long long FindULL(Key key, unsigned long long const &Default = 0) const;
+ APT_HIDDEN bool FindFlag(Key key,uint8_t &Flags, uint8_t const Flag) const;
+ APT_HIDDEN bool FindFlag(Key key,unsigned long &Flags, unsigned long Flag) const;
+ APT_HIDDEN bool Exists(Key key) const;
+#ifdef APT_PKG_EXPOSE_STRING_VIEW
+ APT_HIDDEN APT::StringView Find(Key key) const;
+ APT_HIDDEN APT::StringView FindRaw(Key key) const;
+ APT_HIDDEN bool Find(APT::StringView Tag,const char *&Start, const char *&End) const;
+ APT_HIDDEN bool Find(APT::StringView Tag,unsigned int &Pos) const;
+ APT_HIDDEN APT::StringView Find(APT::StringView Tag) const;
+ APT_HIDDEN APT::StringView FindRaw(APT::StringView Tag) const;
+ APT_HIDDEN signed int FindI(APT::StringView Tag,signed long Default = 0) const;
+ APT_HIDDEN bool FindB(APT::StringView, bool Default = false) const;
+ APT_HIDDEN unsigned long long FindULL(APT::StringView Tag, unsigned long long const &Default = 0) const;
+
+ APT_HIDDEN bool FindFlag(APT::StringView Tag,uint8_t &Flags,
+ uint8_t const Flag) const;
+ APT_HIDDEN bool FindFlag(APT::StringView Tag,unsigned long &Flags,
+ unsigned long Flag) const;
+ APT_HIDDEN bool Exists(APT::StringView Tag) const;
+#endif
+
+ bool static FindFlag(uint8_t &Flags, uint8_t const Flag,
+ const char* const Start, const char* const Stop);
+ bool static FindFlag(unsigned long &Flags, unsigned long Flag,
+ const char* Start, const char* Stop);
+
+ /** \brief searches the boundaries of the current section
+ *
+ * While parameter Start marks the beginning of the section, this method
+ * will search for the first double newline in the data stream which marks
+ * the end of the section. It also does a first pass over the content of
+ * the section parsing it as encountered for processing later on by Find
+ *
+ * @param Start is the beginning of the section
+ * @param MaxLength is the size of valid data in the stream pointed to by Start
+ * @param Restart if enabled internal state will be cleared, otherwise it is
+ * assumed that now more data is available in the stream and the parsing will
+ * start were it encountered insufficient data the last time.
+ *
+ * @return \b true if section end was found, \b false otherwise.
+ * Beware that internal state will be inconsistent if \b false is returned!
+ */
+ APT_MUSTCHECK bool Scan(const char *Start, unsigned long MaxLength, bool const Restart = true);
+
+ inline unsigned long size() const {return Stop - Section;};
+ void Trim();
+ virtual void TrimRecord(bool BeforeRecord, const char* &End);
+
+ /** \brief amount of Tags in the current section
+ *
+ * Note: if a Tag is mentioned repeatedly it will be counted multiple
+ * times, but only the last occurrence is available via Find methods.
+ */
+ unsigned int Count() const;
+
+ void Get(const char *&Start,const char *&Stop,unsigned int I) const;
+
+ inline void GetSection(const char *&Start,const char *&Stop) const
+ {
+ Start = Section;
+ Stop = this->Stop;
+ };
+
+ pkgTagSection();
+ virtual ~pkgTagSection();
+
+ struct Tag
+ {
+ enum ActionType { REMOVE, RENAME, REWRITE } Action;
+ std::string Name;
+ std::string Data;
+
+ static Tag Remove(std::string const &Name);
+ static Tag Rename(std::string const &OldName, std::string const &NewName);
+ static Tag Rewrite(std::string const &Name, std::string const &Data);
+ private:
+ Tag(ActionType const Action, std::string const &Name, std::string const &Data) :
+ Action(Action), Name(Name), Data(Data) {}
+ };
+
+ /** Write this section (with optional rewrites) to a file
+ *
+ * @param File to write the section to
+ * @param Order in which tags should appear in the file
+ * @param Rewrite is a set of tags to be renamed, rewritten and/or removed
+ * @return \b true if successful, otherwise \b false
+ */
+ bool Write(FileFd &File, char const * const * const Order = NULL, std::vector<Tag> const &Rewrite = std::vector<Tag>()) const;
+};
+
+
+class APT_DEPRECATED_MSG("Use pkgTagFile with the SUPPORT_COMMENTS flag instead") pkgUserTagSection : public pkgTagSection
+{
+ virtual void TrimRecord(bool BeforeRecord, const char* &End) APT_OVERRIDE;
+};
+
+/** \class pkgTagFile reads and prepares a deb822 formatted file for parsing
+ * via #pkgTagSection. The default mode tries to be as fast as possible and
+ * assumes perfectly valid (machine generated) files like Packages. Support
+ * for comments e.g. needs to be enabled explicitly. */
+class pkgTagFile
+{
+ pkgTagFilePrivate * const d;
+
+ APT_HIDDEN bool Fill();
+ APT_HIDDEN bool Resize();
+ APT_HIDDEN bool Resize(unsigned long long const newSize);
+
+public:
+
+ bool Step(pkgTagSection &Section);
+ unsigned long Offset();
+ bool Jump(pkgTagSection &Tag,unsigned long long Offset);
+
+ enum Flags
+ {
+ STRICT = 0,
+ SUPPORT_COMMENTS = 1 << 0,
+ };
+
+ void Init(FileFd * const F, pkgTagFile::Flags const Flags, unsigned long long Size = 32*1024);
+ void Init(FileFd * const F,unsigned long long const Size = 32*1024);
+
+ pkgTagFile(FileFd * const F, pkgTagFile::Flags const Flags, unsigned long long Size = 32*1024);
+ pkgTagFile(FileFd * const F,unsigned long long Size = 32*1024);
+ virtual ~pkgTagFile();
+};
+
+extern const char **TFRewritePackageOrder;
+extern const char **TFRewriteSourceOrder;
+
+APT_IGNORE_DEPRECATED_PUSH
+struct APT_DEPRECATED_MSG("Use pkgTagSection::Tag and pkgTagSection::Write() instead") TFRewriteData
+{
+ const char *Tag;
+ const char *Rewrite;
+ const char *NewTag;
+};
+APT_DEPRECATED_MSG("Use pkgTagSection::Tag and pkgTagSection::Write() instead") bool TFRewrite(FILE *Output,pkgTagSection const &Tags,const char *Order[],
+ TFRewriteData *Rewrite);
+APT_IGNORE_DEPRECATED_POP
+
+#endif
diff --git a/apt-pkg/update.cc b/apt-pkg/update.cc
new file mode 100644
index 0000000..4c64eeb
--- /dev/null
+++ b/apt-pkg/update.cc
@@ -0,0 +1,133 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/update.h>
+
+#include <string>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// ListUpdate - construct Fetcher and update the cache files /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a simple wrapper to update the cache. it will fetch stuff
+ * from the network (or any other sources defined in sources.list)
+ */
+bool ListUpdate(pkgAcquireStatus &Stat,
+ pkgSourceList &List,
+ int PulseInterval)
+{
+ pkgAcquire Fetcher(&Stat);
+ if (Fetcher.GetLock(_config->FindDir("Dir::State::Lists")) == false)
+ return false;
+
+ // Populate it with the source selection
+ if (List.GetIndexes(&Fetcher) == false)
+ return false;
+
+ return AcquireUpdate(Fetcher, PulseInterval, true);
+}
+ /*}}}*/
+// AcquireUpdate - take Fetcher and update the cache files /*{{{*/
+// ---------------------------------------------------------------------
+/* This is a simple wrapper to update the cache with a provided acquire
+ * If you only need control over Status and the used SourcesList use
+ * ListUpdate method instead.
+ */
+bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval,
+ bool const RunUpdateScripts, bool const ListCleanup)
+{
+ // Run scripts
+ if (RunUpdateScripts == true)
+ RunScripts("APT::Update::Pre-Invoke");
+
+ pkgAcquire::RunResult res;
+ if(PulseInterval > 0)
+ res = Fetcher.Run(PulseInterval);
+ else
+ res = Fetcher.Run();
+
+ bool const errorsWereReported = (res == pkgAcquire::Failed);
+ bool Failed = errorsWereReported;
+ bool TransientNetworkFailure = false;
+ bool AllFailed = true;
+ for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin();
+ I != Fetcher.ItemsEnd(); ++I)
+ {
+ switch ((*I)->Status)
+ {
+ case pkgAcquire::Item::StatDone:
+ AllFailed = false;
+ continue;
+ case pkgAcquire::Item::StatTransientNetworkError:
+ TransientNetworkFailure = true;
+ break;
+ case pkgAcquire::Item::StatIdle:
+ case pkgAcquire::Item::StatFetching:
+ case pkgAcquire::Item::StatError:
+ case pkgAcquire::Item::StatAuthError:
+ Failed = true;
+ break;
+ }
+
+ (*I)->Finished();
+
+ if (errorsWereReported)
+ continue;
+
+ ::URI uri((*I)->DescURI());
+ uri.User.clear();
+ uri.Password.clear();
+ std::string const descUri = std::string(uri);
+ // Show an error for non-transient failures, otherwise only warn
+ if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError)
+ _error->Warning(_("Failed to fetch %s %s"), descUri.c_str(),
+ (*I)->ErrorText.c_str());
+ else
+ _error->Error(_("Failed to fetch %s %s"), descUri.c_str(),
+ (*I)->ErrorText.c_str());
+ }
+
+ // Clean out any old list files
+ // Keep "APT::Get::List-Cleanup" name for compatibility, but
+ // this is really a global option for the APT library now
+ if (!TransientNetworkFailure && !Failed && ListCleanup == true &&
+ (_config->FindB("APT::Get::List-Cleanup",true) == true &&
+ _config->FindB("APT::List-Cleanup",true) == true))
+ {
+ if (Fetcher.Clean(_config->FindDir("Dir::State::lists")) == false ||
+ Fetcher.Clean(_config->FindDir("Dir::State::lists") + "partial/") == false)
+ // something went wrong with the clean
+ return false;
+ }
+
+ bool Res = true;
+
+ if (errorsWereReported == true)
+ Res = false;
+ else if (TransientNetworkFailure == true)
+ Res = _error->Warning(_("Some index files failed to download. They have been ignored, or old ones used instead."));
+ else if (Failed == true)
+ Res = _error->Error(_("Some index files failed to download. They have been ignored, or old ones used instead."));
+
+ // Run the success scripts if all was fine
+ if (RunUpdateScripts == true)
+ {
+ if(AllFailed == false)
+ RunScripts("APT::Update::Post-Invoke-Success");
+
+ // Run the other scripts
+ RunScripts("APT::Update::Post-Invoke");
+ }
+ return Res;
+}
+ /*}}}*/
diff --git a/apt-pkg/update.h b/apt-pkg/update.h
new file mode 100644
index 0000000..559516f
--- /dev/null
+++ b/apt-pkg/update.h
@@ -0,0 +1,22 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Update - ListUpdate related code
+
+ ##################################################################### */
+ /*}}}*/
+
+#ifndef PKGLIB_UPDATE_H
+#define PKGLIB_UPDATE_H
+
+class pkgAcquireStatus;
+class pkgSourceList;
+class pkgAcquire;
+
+bool ListUpdate(pkgAcquireStatus &progress, pkgSourceList &List, int PulseInterval=0);
+bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval = 0,
+ bool const RunUpdateScripts = true, bool const ListCleanup = true);
+
+
+#endif
diff --git a/apt-pkg/upgrade.cc b/apt-pkg/upgrade.cc
new file mode 100644
index 0000000..c9432aa
--- /dev/null
+++ b/apt-pkg/upgrade.cc
@@ -0,0 +1,301 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/upgrade.h>
+
+#include <string>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// DistUpgrade - Distribution upgrade /*{{{*/
+// ---------------------------------------------------------------------
+/* This autoinstalls every package and then force installs every
+ pre-existing package. This creates the initial set of conditions which
+ most likely contain problems because too many things were installed.
+
+ The problem resolver is used to resolve the problems.
+ */
+static bool pkgDistUpgrade(pkgDepCache &Cache, OpProgress * const Progress)
+{
+ std::string const solver = _config->Find("APT::Solver", "internal");
+ auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, EDSP::Request::UPGRADE_ALL, Progress);
+ if (solver != "internal")
+ return ret;
+
+ if (Progress != NULL)
+ Progress->OverallProgress(0, 100, 1, _("Calculating upgrade"));
+
+ pkgDepCache::ActionGroup group(Cache);
+
+ /* Upgrade all installed packages first without autoinst to help the resolver
+ in versioned or-groups to upgrade the old solver instead of installing
+ a new one (if the old solver is not the first one [anymore]) */
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ if (I->CurrentVer != 0)
+ Cache.MarkInstall(I, false, 0, false);
+
+ if (Progress != NULL)
+ Progress->Progress(10);
+
+ /* Auto upgrade all installed packages, this provides the basis
+ for the installation */
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ if (I->CurrentVer != 0)
+ Cache.MarkInstall(I, true, 0, false);
+
+ if (Progress != NULL)
+ Progress->Progress(50);
+
+ /* Now, install each essential package which is not installed
+ (and not provided by another package in the same name group) */
+ std::string essential = _config->Find("pkgCacheGen::Essential", "all");
+ if (essential == "all")
+ {
+ for (pkgCache::GrpIterator G = Cache.GrpBegin(); G.end() == false; ++G)
+ {
+ bool isEssential = false;
+ bool instEssential = false;
+ for (pkgCache::PkgIterator P = G.PackageList(); P.end() == false; P = G.NextPkg(P))
+ {
+ if ((P->Flags & pkgCache::Flag::Essential) != pkgCache::Flag::Essential)
+ continue;
+ isEssential = true;
+ if (Cache[P].Install() == true)
+ {
+ instEssential = true;
+ break;
+ }
+ }
+ if (isEssential == false || instEssential == true)
+ continue;
+ pkgCache::PkgIterator P = G.FindPreferredPkg();
+ Cache.MarkInstall(P, true, 0, false);
+ }
+ }
+ else if (essential != "none")
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ Cache.MarkInstall(I, true, 0, false);
+
+ if (Progress != NULL)
+ Progress->Progress(55);
+
+ /* We do it again over all previously installed packages to force
+ conflict resolution on them all. */
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ if (I->CurrentVer != 0)
+ Cache.MarkInstall(I, false, 0, false);
+
+ if (Progress != NULL)
+ Progress->Progress(65);
+
+ pkgProblemResolver Fix(&Cache);
+
+ if (Progress != NULL)
+ Progress->Progress(95);
+
+ // Hold back held packages.
+ if (_config->FindB("APT::Ignore-Hold",false) == false)
+ {
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (I->SelectedState == pkgCache::State::Hold)
+ {
+ Fix.Protect(I);
+ Cache.MarkKeep(I, false, false);
+ }
+ }
+ }
+
+ bool const success = Fix.ResolveInternal(false);
+ if (Progress != NULL)
+ Progress->Done();
+ return success;
+}
+bool pkgDistUpgrade(pkgDepCache &Cache)
+{
+ return pkgDistUpgrade(Cache, NULL);
+}
+ /*}}}*/
+// AllUpgradeNoNewPackages - Upgrade but no removals or new pkgs /*{{{*/
+static bool pkgAllUpgradeNoNewPackages(pkgDepCache &Cache, OpProgress * const Progress)
+{
+ std::string const solver = _config->Find("APT::Solver", "internal");
+ constexpr auto flags = EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_NEW_INSTALL | EDSP::Request::FORBID_REMOVE;
+ auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, flags, Progress);
+ if (solver != "internal")
+ return ret;
+
+ if (Progress != NULL)
+ Progress->OverallProgress(0, 100, 1, _("Calculating upgrade"));
+
+ pkgDepCache::ActionGroup group(Cache);
+ pkgProblemResolver Fix(&Cache);
+
+ // Upgrade all installed packages
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (Cache[I].Install() == true)
+ Fix.Protect(I);
+
+ if (_config->FindB("APT::Ignore-Hold",false) == false)
+ if (I->SelectedState == pkgCache::State::Hold)
+ continue;
+
+ if (I->CurrentVer != 0 && Cache[I].InstallVer != 0)
+ Cache.MarkInstall(I, false, 0, false);
+ }
+
+ if (Progress != NULL)
+ Progress->Progress(50);
+
+ // resolve remaining issues via keep
+ bool const success = Fix.ResolveByKeepInternal();
+ if (Progress != NULL)
+ Progress->Done();
+ return success;
+}
+ /*}}}*/
+// AllUpgradeWithNewInstalls - Upgrade + install new packages as needed /*{{{*/
+// ---------------------------------------------------------------------
+/* Right now the system must be consistent before this can be called.
+ * Upgrade as much as possible without deleting anything (useful for
+ * stable systems)
+ */
+static bool pkgAllUpgradeWithNewPackages(pkgDepCache &Cache, OpProgress * const Progress)
+{
+ std::string const solver = _config->Find("APT::Solver", "internal");
+ constexpr auto flags = EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_REMOVE;
+ auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, flags, Progress);
+ if (solver != "internal")
+ return ret;
+
+ if (Progress != NULL)
+ Progress->OverallProgress(0, 100, 1, _("Calculating upgrade"));
+
+ pkgDepCache::ActionGroup group(Cache);
+ pkgProblemResolver Fix(&Cache);
+
+ // provide the initial set of stuff we want to upgrade by marking
+ // all upgradable packages for upgrade
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ if (I->CurrentVer != 0 && Cache[I].InstallVer != 0)
+ {
+ if (_config->FindB("APT::Ignore-Hold",false) == false)
+ if (I->SelectedState == pkgCache::State::Hold)
+ continue;
+
+ Cache.MarkInstall(I, false, 0, false);
+ }
+ }
+
+ if (Progress != NULL)
+ Progress->Progress(10);
+
+ // then let auto-install loose
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ if (Cache[I].Install())
+ Cache.MarkInstall(I, true, 0, false);
+
+ if (Progress != NULL)
+ Progress->Progress(50);
+
+ // ... but it may remove stuff, we need to clean up afterwards again
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ if (Cache[I].Delete() == true)
+ Cache.MarkKeep(I, false, false);
+
+ if (Progress != NULL)
+ Progress->Progress(60);
+
+ // resolve remaining issues via keep
+ bool const success = Fix.ResolveByKeepInternal();
+ if (Progress != NULL)
+ Progress->Done();
+ return success;
+}
+ /*}}}*/
+// AllUpgrade - Upgrade as many packages as possible /*{{{*/
+// ---------------------------------------------------------------------
+/* Right now the system must be consistent before this can be called.
+ It also will not change packages marked for install, it only tries
+ to install packages not marked for install */
+static bool pkgAllUpgrade(pkgDepCache &Cache, OpProgress * const Progress)
+{
+ return pkgAllUpgradeNoNewPackages(Cache, Progress);
+}
+bool pkgAllUpgrade(pkgDepCache &Cache)
+{
+ return pkgAllUpgrade(Cache, NULL);
+}
+ /*}}}*/
+// MinimizeUpgrade - Minimizes the set of packages to be upgraded /*{{{*/
+// ---------------------------------------------------------------------
+/* This simply goes over the entire set of packages and tries to keep
+ each package marked for upgrade. If a conflict is generated then
+ the package is restored. */
+bool pkgMinimizeUpgrade(pkgDepCache &Cache)
+{
+ pkgDepCache::ActionGroup group(Cache);
+
+ if (Cache.BrokenCount() != 0)
+ return false;
+
+ // We loop for 10 tries to get the minimal set size.
+ bool Change = false;
+ unsigned int Count = 0;
+ do
+ {
+ Change = false;
+ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
+ {
+ // Not interesting
+ if (Cache[I].Upgrade() == false || Cache[I].NewInstall() == true)
+ continue;
+
+ // Keep it and see if that is OK
+ Cache.MarkKeep(I, false, false);
+ if (Cache.BrokenCount() != 0)
+ Cache.MarkInstall(I, false, 0, false);
+ else
+ {
+ // If keep didn't actually do anything then there was no change..
+ if (Cache[I].Upgrade() == false)
+ Change = true;
+ }
+ }
+ ++Count;
+ }
+ while (Change == true && Count < 10);
+
+ if (Cache.BrokenCount() != 0)
+ return _error->Error("Internal Error in pkgMinimizeUpgrade");
+
+ return true;
+}
+ /*}}}*/
+// APT::Upgrade::Upgrade - Upgrade using a specific strategy /*{{{*/
+bool APT::Upgrade::Upgrade(pkgDepCache &Cache, int mode, OpProgress * const Progress)
+{
+APT_IGNORE_DEPRECATED_PUSH
+ if (mode == ALLOW_EVERYTHING)
+ return pkgDistUpgrade(Cache, Progress);
+ else if ((mode & ~FORBID_REMOVE_PACKAGES) == 0)
+ return pkgAllUpgradeWithNewPackages(Cache, Progress);
+ else if ((mode & ~(FORBID_REMOVE_PACKAGES|FORBID_INSTALL_NEW_PACKAGES)) == 0)
+ return pkgAllUpgradeNoNewPackages(Cache, Progress);
+ else
+ _error->Error("pkgAllUpgrade called with unsupported mode %i", mode);
+APT_IGNORE_DEPRECATED_POP
+ return false;
+}
+ /*}}}*/
diff --git a/apt-pkg/upgrade.h b/apt-pkg/upgrade.h
new file mode 100644
index 0000000..5612acf
--- /dev/null
+++ b/apt-pkg/upgrade.h
@@ -0,0 +1,35 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Upgrade - Upgrade/DistUpgrade related code
+
+ ##################################################################### */
+ /*}}}*/
+
+#ifndef PKGLIB_UPGRADE_H
+#define PKGLIB_UPGRADE_H
+
+#include <apt-pkg/macros.h>
+#include <stddef.h>
+
+class pkgDepCache;
+class OpProgress;
+
+namespace APT {
+ namespace Upgrade {
+ // FIXME: make this "enum class UpgradeMode {" once we enable c++11
+ enum UpgradeMode {
+ FORBID_REMOVE_PACKAGES = 1,
+ FORBID_INSTALL_NEW_PACKAGES = 2,
+ ALLOW_EVERYTHING = 0
+ };
+ bool Upgrade(pkgDepCache &Cache, int UpgradeMode, OpProgress * const Progress = NULL);
+ }
+}
+
+APT_DEPRECATED_MSG("Use APT::Upgrade::Upgrade() instead") bool pkgDistUpgrade(pkgDepCache &Cache);
+APT_DEPRECATED_MSG("Use APT::Upgrade::Upgrade() instead") bool pkgAllUpgrade(pkgDepCache &Cache);
+
+bool pkgMinimizeUpgrade(pkgDepCache &Cache);
+#endif
diff --git a/apt-pkg/version.cc b/apt-pkg/version.cc
new file mode 100644
index 0000000..e0b83e0
--- /dev/null
+++ b/apt-pkg/version.cc
@@ -0,0 +1,44 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Version - Versioning system..
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/version.h>
+
+#include <stdlib.h>
+#include <string.h>
+ /*}}}*/
+
+static pkgVersioningSystem *VSList[10];
+pkgVersioningSystem **pkgVersioningSystem::GlobalList = VSList;
+unsigned long pkgVersioningSystem::GlobalListLen = 0;
+
+// pkgVS::pkgVersioningSystem - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Link to the global list of versioning systems supported */
+pkgVersioningSystem::pkgVersioningSystem() : Label(NULL)
+{
+ VSList[GlobalListLen] = this;
+ ++GlobalListLen;
+}
+ /*}}}*/
+// pkgVS::GetVS - Find a VS by name /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgVersioningSystem *pkgVersioningSystem::GetVS(const char *Label)
+{
+ for (unsigned I = 0; I != GlobalListLen; I++)
+ if (strcmp(VSList[I]->Label,Label) == 0)
+ return VSList[I];
+ return 0;
+}
+ /*}}}*/
+
+
+pkgVersioningSystem::~pkgVersioningSystem() {}
diff --git a/apt-pkg/version.h b/apt-pkg/version.h
new file mode 100644
index 0000000..6cb2932
--- /dev/null
+++ b/apt-pkg/version.h
@@ -0,0 +1,60 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Version - Versioning system..
+
+ The versioning system represents how versions are compared, represented
+ and how dependencies are evaluated. As a general rule versioning
+ systems are not compatible unless specifically allowed by the
+ TestCompatibility query.
+
+ The versions are stored in a global list of versions, but that is just
+ so that they can be queried when someone does 'apt-get -v'.
+ pkgSystem provides the proper means to access the VS for the active
+ system.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_VERSION_H
+#define PKGLIB_VERSION_H
+
+#include <apt-pkg/strutl.h>
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
+class pkgVersioningSystem
+{
+ public:
+ // Global list of VS's
+ static pkgVersioningSystem **GlobalList;
+ static unsigned long GlobalListLen;
+ static pkgVersioningSystem *GetVS(const char *Label) APT_PURE;
+
+ const char *Label;
+
+ // Compare versions..
+ virtual int DoCmpVersion(const char *A,const char *Aend,
+ const char *B,const char *Bend) = 0;
+
+ virtual bool CheckDep(const char *PkgVer,int Op,const char *DepVer) = 0;
+ virtual int DoCmpReleaseVer(const char *A,const char *Aend,
+ const char *B,const char *Bend) = 0;
+ virtual std::string UpstreamVersion(const char *A) = 0;
+
+ // See if the given VS is compatible with this one..
+ virtual bool TestCompatibility(pkgVersioningSystem const &Against)
+ {return this == &Against;};
+
+ // Shortcuts
+ APT_MKSTRCMP(CmpVersion,DoCmpVersion);
+ APT_MKSTRCMP(CmpReleaseVer,DoCmpReleaseVer);
+
+ pkgVersioningSystem();
+ virtual ~pkgVersioningSystem();
+};
+
+#endif
diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc
new file mode 100644
index 0000000..340f5a6
--- /dev/null
+++ b/apt-pkg/versionmatch.cc
@@ -0,0 +1,290 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Version Matching
+
+ This module takes a matching string and a type and locates the version
+ record that satisfies the constraint described by the matching string.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/versionmatch.h>
+
+#include <string>
+#include <ctype.h>
+#include <fnmatch.h>
+#include <regex.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+ /*}}}*/
+
+using std::string;
+
+// VersionMatch::pkgVersionMatch - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Break up the data string according to the selected type */
+pkgVersionMatch::pkgVersionMatch(string Data,MatchType Type) : Type(Type)
+{
+ MatchAll = false;
+ VerPrefixMatch = false;
+ RelVerPrefixMatch = false;
+
+ if (Type == None || Data.length() < 1)
+ return;
+
+ // Cut up the version representation
+ if (Type == Version)
+ {
+ if (Data.end()[-1] == '*')
+ {
+ VerPrefixMatch = true;
+ VerStr = string(Data,0,Data.length()-1);
+ }
+ else
+ VerStr = Data;
+ return;
+ }
+
+ if (Type == Release)
+ {
+ // All empty = match all
+ if (Data == "*")
+ {
+ MatchAll = true;
+ return;
+ }
+
+ // Are we a simple specification?
+ string::const_iterator I = Data.begin();
+ for (; I != Data.end() && *I != '='; ++I);
+ if (I == Data.end())
+ {
+ // Temporary
+ if (isdigit(Data[0]))
+ RelVerStr = Data;
+ else
+ RelRelease = Data;
+
+ if (RelVerStr.length() > 0 && RelVerStr.end()[-1] == '*')
+ {
+ RelVerPrefixMatch = true;
+ RelVerStr = string(RelVerStr.begin(),RelVerStr.end()-1);
+ }
+ return;
+ }
+
+ char Spec[300];
+ char *Fragments[20];
+ snprintf(Spec,sizeof(Spec),"%s",Data.c_str());
+ if (TokSplitString(',',Spec,Fragments,
+ sizeof(Fragments)/sizeof(Fragments[0])) == false)
+ {
+ Type = None;
+ return;
+ }
+
+ for (unsigned J = 0; Fragments[J] != 0; J++)
+ {
+ if (strlen(Fragments[J]) < 3)
+ continue;
+
+ if (stringcasecmp(Fragments[J],Fragments[J]+2,"v=") == 0)
+ RelVerStr = Fragments[J]+2;
+ else if (stringcasecmp(Fragments[J],Fragments[J]+2,"o=") == 0)
+ RelOrigin = Fragments[J]+2;
+ else if (stringcasecmp(Fragments[J],Fragments[J]+2,"a=") == 0)
+ RelArchive = Fragments[J]+2;
+ else if (stringcasecmp(Fragments[J],Fragments[J]+2,"n=") == 0)
+ RelCodename = Fragments[J]+2;
+ else if (stringcasecmp(Fragments[J],Fragments[J]+2,"l=") == 0)
+ RelLabel = Fragments[J]+2;
+ else if (stringcasecmp(Fragments[J],Fragments[J]+2,"c=") == 0)
+ RelComponent = Fragments[J]+2;
+ else if (stringcasecmp(Fragments[J],Fragments[J]+2,"b=") == 0)
+ RelArchitecture = Fragments[J]+2;
+ }
+
+ if (RelVerStr.end()[-1] == '*')
+ {
+ RelVerPrefixMatch = true;
+ RelVerStr = string(RelVerStr.begin(),RelVerStr.end()-1);
+ }
+ return;
+ }
+
+ if (Type == Origin)
+ {
+ if (Data[0] == '"' && Data.length() >= 2 && Data.end()[-1] == '"')
+ OrSite = Data.substr(1, Data.length() - 2);
+ else
+ OrSite = Data;
+ return;
+ }
+}
+ /*}}}*/
+// VersionMatch::MatchVer - Match a version string with prefixing /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgVersionMatch::MatchVer(const char *A,string B,bool Prefix)
+{
+ if (A == NULL)
+ return false;
+
+ const char *Ab = A;
+ const char *Ae = Ab + strlen(A);
+
+ // Strings are not a compatible size.
+ if (((unsigned)(Ae - Ab) != B.length() && Prefix == false) ||
+ (unsigned)(Ae - Ab) < B.length())
+ return false;
+
+ // Match (leading?)
+ if (stringcasecmp(B,Ab,Ab + B.length()) == 0)
+ return true;
+
+ return false;
+}
+ /*}}}*/
+// VersionMatch::Find - Locate the best match for the select type /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgCache::VerIterator pkgVersionMatch::Find(pkgCache::PkgIterator Pkg)
+{
+ pkgCache::VerIterator Ver = Pkg.VersionList();
+ for (; Ver.end() == false; ++Ver)
+ {
+ if (VersionMatches(Ver))
+ return Ver;
+ }
+
+ // This will be Ended by now.
+ return Ver;
+}
+ /*}}}*/
+
+// VersionMatch::Find - Locate the best match for the select type /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgVersionMatch::VersionMatches(pkgCache::VerIterator Ver)
+{
+ if (Type == Version)
+ {
+ if (MatchVer(Ver.VerStr(),VerStr,VerPrefixMatch) == true)
+ return true;
+ if (ExpressionMatches(VerStr, Ver.VerStr()) == true)
+ return true;
+ return false;
+ }
+
+ for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; ++VF)
+ if (FileMatch(VF.File()) == true)
+ return true;
+
+ return false;
+}
+ /*}}}*/
+
+#ifndef FNM_CASEFOLD
+#define FNM_CASEFOLD 0
+#endif
+
+bool pkgVersionMatch::ExpressionMatches(const char *pattern, const char *string)/*{{{*/
+{
+ if (pattern == NULL || string == NULL)
+ return false;
+ if (pattern[0] == '/') {
+ size_t length = strlen(pattern);
+ if (pattern[length - 1] == '/') {
+ bool res = false;
+ regex_t preg;
+ char *regex = strdup(pattern + 1);
+ regex[length - 2] = '\0';
+ if (regcomp(&preg, regex, REG_EXTENDED | REG_ICASE) != 0) {
+ _error->Warning("Invalid regular expression: %s", regex);
+ } else if (regexec(&preg, string, 0, NULL, 0) == 0) {
+ res = true;
+ }
+ free(regex);
+ regfree(&preg);
+ return res;
+ }
+ }
+ return fnmatch(pattern, string, FNM_CASEFOLD) == 0;
+}
+bool pkgVersionMatch::ExpressionMatches(const std::string& pattern, const char *string)
+{
+ return ExpressionMatches(pattern.c_str(), string);
+}
+ /*}}}*/
+// VersionMatch::FileMatch - Match against an index file /*{{{*/
+// ---------------------------------------------------------------------
+/* This matcher checks against the release file and the origin location
+ to see if the constraints are met. */
+bool pkgVersionMatch::FileMatch(pkgCache::PkgFileIterator File)
+{
+ if (Type == Release)
+ {
+ if (MatchAll == true)
+ return true;
+
+/* cout << RelVerStr << ',' << RelOrigin << ',' << RelArchive << ',' << RelLabel << endl;
+ cout << File.Version() << ',' << File.Origin() << ',' << File.Archive() << ',' << File.Label() << endl;*/
+
+ if (RelVerStr.empty() == true && RelOrigin.empty() == true &&
+ RelArchive.empty() == true && RelLabel.empty() == true &&
+ RelRelease.empty() == true && RelCodename.empty() == true &&
+ RelComponent.empty() == true && RelArchitecture.empty() == true)
+ return false;
+
+ if (RelVerStr.empty() == false)
+ if (MatchVer(File.Version(),RelVerStr,RelVerPrefixMatch) == false &&
+ ExpressionMatches(RelVerStr, File.Version()) == false)
+ return false;
+ if (RelOrigin.empty() == false)
+ if (!ExpressionMatches(RelOrigin,File.Origin()))
+ return false;
+ if (RelArchive.empty() == false)
+ if (!ExpressionMatches(RelArchive,File.Archive()))
+ return false;
+ if (RelCodename.empty() == false)
+ if (!ExpressionMatches(RelCodename,File.Codename()))
+ return false;
+ if (RelRelease.empty() == false)
+ if (!ExpressionMatches(RelRelease,File.Archive()) &&
+ !ExpressionMatches(RelRelease,File.Codename()))
+ return false;
+ if (RelLabel.empty() == false)
+ if (!ExpressionMatches(RelLabel,File.Label()))
+ return false;
+ if (RelComponent.empty() == false)
+ if (!ExpressionMatches(RelComponent,File.Component()))
+ return false;
+ if (RelArchitecture.empty() == false)
+ if (!ExpressionMatches(RelArchitecture,File.Architecture()))
+ return false;
+ return true;
+ }
+
+ if (Type == Origin)
+ {
+ if (OrSite.empty() == false) {
+ if (File.Site() == NULL)
+ return false;
+ }
+ else if (File->Release == 0)// only 'bad' files like dpkg.status file has no release file
+ return false;
+ return (ExpressionMatches(OrSite, File.Site())); /* both strings match */
+ }
+
+ return false;
+}
+ /*}}}*/
diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h
new file mode 100644
index 0000000..c9e4367
--- /dev/null
+++ b/apt-pkg/versionmatch.h
@@ -0,0 +1,80 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Version Matching
+
+ This module takes a matching string and a type and locates the version
+ record that satisfies the constraint described by the matching string.
+
+ Version: 1.2*
+ Release: o=Debian,v=2.1*,c=main
+ Release: v=2.1*
+ Release: a=testing
+ Release: n=squeeze
+ Release: *
+ Origin: ftp.debian.org
+
+ Release may be a complex type that can specify matches for any of:
+ Version (v= with prefix)
+ Origin (o=)
+ Archive (a=) eg, unstable, testing, stable
+ Codename (n=) e.g. etch, lenny, squeeze, sid
+ Label (l=)
+ Component (c=)
+ Binary Architecture (b=)
+ If there are no equals signs in the string then it is scanned in short
+ form - if it starts with a number it is Version otherwise it is an
+ Archive or a Codename.
+
+ Release may be a '*' to match all releases.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_VERSIONMATCH_H
+#define PKGLIB_VERSIONMATCH_H
+
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
+class pkgVersionMatch
+{
+ // Version Matching
+ std::string VerStr;
+ bool VerPrefixMatch;
+
+ // Release Matching
+ std::string RelVerStr;
+ bool RelVerPrefixMatch;
+ std::string RelOrigin;
+ std::string RelRelease;
+ std::string RelCodename;
+ std::string RelArchive;
+ std::string RelLabel;
+ std::string RelComponent;
+ std::string RelArchitecture;
+ bool MatchAll;
+
+ // Origin Matching
+ std::string OrSite;
+
+ public:
+
+ enum MatchType {None = 0,Version,Release,Origin} Type;
+
+ bool MatchVer(const char *A,std::string B,bool Prefix) APT_PURE;
+ static bool ExpressionMatches(const char *pattern, const char *string);
+ static bool ExpressionMatches(const std::string& pattern, const char *string);
+ bool FileMatch(pkgCache::PkgFileIterator File);
+ pkgCache::VerIterator Find(pkgCache::PkgIterator Pkg);
+ bool VersionMatches(pkgCache::VerIterator Ver);
+
+ pkgVersionMatch(std::string Data,MatchType Type);
+};
+
+#endif
diff --git a/apt-private/CMakeLists.txt b/apt-private/CMakeLists.txt
new file mode 100644
index 0000000..88a8f97
--- /dev/null
+++ b/apt-private/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Set the version of the library
+set(MAJOR 0.0)
+set(MINOR 0)
+
+# Definition of the C++ files used to build the library - note that this
+# is expanded at CMake time, so you have to rerun cmake if you add or remove
+# a file (you can just run cmake . in the build directory)
+file(GLOB_RECURSE library "*.cc")
+file(GLOB_RECURSE headers "*.h")
+
+# Create a library using the C++ files
+add_library(apt-private SHARED ${library})
+
+# Link the library and set the SONAME
+target_link_libraries(apt-private PUBLIC apt-pkg)
+set_target_properties(apt-private PROPERTIES VERSION ${MAJOR}.${MINOR})
+set_target_properties(apt-private PROPERTIES SOVERSION ${MAJOR})
+set_target_properties(apt-private PROPERTIES CXX_VISIBILITY_PRESET hidden)
+add_version_script(apt-private)
+
+# Install the library and the headers
+install(TARGETS apt-private
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ NAMELINK_SKIP)
+
+flatify(${PROJECT_BINARY_DIR}/include/apt-private/ "${headers}")
diff --git a/apt-private/acqprogress.cc b/apt-private/acqprogress.cc
new file mode 100644
index 0000000..a788ec9
--- /dev/null
+++ b/apt-private/acqprogress.cc
@@ -0,0 +1,366 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Progress - Command line progress meter
+
+ ##################################################################### */
+ /*}}}*/
+// Include files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire-worker.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/acqprogress.h>
+#include <apt-private/private-output.h>
+
+#include <iostream>
+#include <sstream>
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// AcqTextStatus::AcqTextStatus - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+AcqTextStatus::AcqTextStatus(std::ostream &out, unsigned int &ScreenWidth,unsigned int const Quiet) :
+ pkgAcquireStatus2(), out(out), ScreenWidth(ScreenWidth), LastLineLength(0), ID(0), Quiet(Quiet)
+{
+ // testcases use it to disable pulses without disabling other user messages
+ if (Quiet == 0 && _config->FindB("quiet::NoUpdate", false) == true)
+ this->Quiet = 1;
+ if (Quiet < 2 && _config->FindB("quiet::NoProgress", false) == true)
+ this->Quiet = 2;
+}
+ /*}}}*/
+// AcqTextStatus::Start - Downloading has started /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void AcqTextStatus::Start()
+{
+ pkgAcquireStatus::Start();
+ LastLineLength = 0;
+ ID = 1;
+}
+ /*}}}*/
+void AcqTextStatus::AssignItemID(pkgAcquire::ItemDesc &Itm) /*{{{*/
+{
+ /* In theory calling it from Fetch() would be enough, but to be
+ safe we call it from IMSHit and Fail as well.
+ Also, an Item can pass through multiple stages, so ensure
+ that it keeps the same number */
+ if (Itm.Owner->ID == 0)
+ Itm.Owner->ID = ID++;
+}
+ /*}}}*/
+// AcqTextStatus::IMSHit - Called when an item got a HIT response /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void AcqTextStatus::IMSHit(pkgAcquire::ItemDesc &Itm)
+{
+ if (Quiet > 1)
+ return;
+
+ AssignItemID(Itm);
+ clearLastLine();
+
+ // TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+ ioprintf(out, _("Hit:%lu %s"), Itm.Owner->ID, Itm.Description.c_str());
+ out << std::endl;
+ Update = true;
+}
+ /*}}}*/
+// AcqTextStatus::Fetch - An item has started to download /*{{{*/
+// ---------------------------------------------------------------------
+/* This prints out the short description and the expected size */
+void AcqTextStatus::Fetch(pkgAcquire::ItemDesc &Itm)
+{
+ Update = true;
+ if (Itm.Owner->Complete == true)
+ return;
+ AssignItemID(Itm);
+
+ if (Quiet > 1)
+ return;
+
+ clearLastLine();
+
+ // TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+ // Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+ ioprintf(out, _("Get:%lu %s"), Itm.Owner->ID, Itm.Description.c_str());
+ if (Itm.Owner->FileSize != 0)
+ out << " [" << SizeToStr(Itm.Owner->FileSize) << "B]";
+ out << std::endl;
+}
+ /*}}}*/
+// AcqTextStatus::Done - Completed a download /*{{{*/
+// ---------------------------------------------------------------------
+/* We don't display anything... */
+void AcqTextStatus::Done(pkgAcquire::ItemDesc &Itm)
+{
+ Update = true;
+ AssignItemID(Itm);
+}
+ /*}}}*/
+// AcqTextStatus::Fail - Called when an item fails to download /*{{{*/
+// ---------------------------------------------------------------------
+/* We print out the error text */
+void AcqTextStatus::Fail(pkgAcquire::ItemDesc &Itm)
+{
+ if (Quiet > 1)
+ return;
+
+ AssignItemID(Itm);
+ clearLastLine();
+
+ bool ShowErrorText = true;
+ if (Itm.Owner->Status == pkgAcquire::Item::StatDone || Itm.Owner->Status == pkgAcquire::Item::StatIdle)
+ {
+ // TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+ // which failed to download, but the error is ignored (compare "Err:")
+ ioprintf(out, _("Ign:%lu %s"), Itm.Owner->ID, Itm.Description.c_str());
+ if (Itm.Owner->ErrorText.empty() ||
+ _config->FindB("Acquire::Progress::Ignore::ShowErrorText", false) == false)
+ ShowErrorText = false;
+ }
+ else
+ {
+ // TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+ // which failed to download and the error is critical (compare "Ign:")
+ ioprintf(out, _("Err:%lu %s"), Itm.Owner->ID, Itm.Description.c_str());
+ }
+
+ if (ShowErrorText)
+ {
+ std::string::size_type line_start = 0;
+ std::string::size_type line_end;
+ while ((line_end = Itm.Owner->ErrorText.find_first_of("\n\r", line_start)) != std::string::npos) {
+ out << std::endl << " " << Itm.Owner->ErrorText.substr(line_start, line_end - line_start);
+ line_start = Itm.Owner->ErrorText.find_first_not_of("\n\r", line_end + 1);
+ if (line_start == std::string::npos)
+ break;
+ }
+ if (line_start == 0)
+ out << std::endl << " " << Itm.Owner->ErrorText;
+ else if (line_start != std::string::npos)
+ out << std::endl << " " << Itm.Owner->ErrorText.substr(line_start);
+ }
+ out << std::endl;
+
+ Update = true;
+}
+ /*}}}*/
+// AcqTextStatus::Stop - Finished downloading /*{{{*/
+// ---------------------------------------------------------------------
+/* This prints out the bytes downloaded and the overall average line
+ speed */
+void AcqTextStatus::Stop()
+{
+ pkgAcquireStatus::Stop();
+ if (Quiet > 1)
+ return;
+
+ clearLastLine();
+
+ if (_config->FindB("quiet::NoStatistic", false) == true)
+ return;
+
+ if (FetchedBytes != 0 && _error->PendingError() == false)
+ ioprintf(out,_("Fetched %sB in %s (%sB/s)\n"),
+ SizeToStr(FetchedBytes).c_str(),
+ TimeToStr(ElapsedTime).c_str(),
+ SizeToStr(CurrentCPS).c_str());
+}
+ /*}}}*/
+// AcqTextStatus::Pulse - Regular event pulse /*{{{*/
+// ---------------------------------------------------------------------
+/* This draws the current progress. Each line has an overall percent
+ meter and a per active item status meter along with an overall
+ bandwidth and ETA indicator. */
+bool AcqTextStatus::Pulse(pkgAcquire *Owner)
+{
+ pkgAcquireStatus::Pulse(Owner);
+
+ if (Quiet > 0)
+ return true;
+
+ std::string Line;
+ {
+ std::stringstream S;
+ for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
+ I = Owner->WorkerStep(I))
+ {
+ // There is no item running
+ if (I->CurrentItem == 0)
+ {
+ if (I->Status.empty() == false)
+ S << " [" << I->Status << "]";
+
+ continue;
+ }
+
+ // Add in the short description
+ S << " [";
+ if (I->CurrentItem->Owner->ID != 0)
+ S << std::to_string(I->CurrentItem->Owner->ID) << " ";
+ S << I->CurrentItem->ShortDesc;
+
+ // Show the short mode string
+ if (I->CurrentItem->Owner->ActiveSubprocess.empty() == false)
+ S << " " << I->CurrentItem->Owner->ActiveSubprocess;
+
+ enum {Long = 0,Medium,Short} Mode = Medium;
+ // Add the current progress
+ if (Mode == Long)
+ S << " " << std::to_string(I->CurrentSize);
+ else
+ {
+ if (Mode == Medium || I->TotalSize == 0)
+ S << " " << SizeToStr(I->CurrentSize) << "B";
+ }
+
+ // Add the total size and percent
+ if (I->TotalSize > 0 && I->CurrentItem->Owner->Complete == false)
+ {
+ if (Mode == Short)
+ ioprintf(S, " %.0f%%", (I->CurrentSize*100.0)/I->TotalSize);
+ else
+ ioprintf(S, "/%sB %.0f%%", SizeToStr(I->TotalSize).c_str(),
+ (I->CurrentSize*100.0)/I->TotalSize);
+ }
+ S << "]";
+ }
+
+ // Show at least something
+ Line = S.str();
+ S.clear();
+ if (Line.empty() == true)
+ Line = _(" [Working]");
+ }
+ // Put in the percent done
+ {
+ std::stringstream S;
+ ioprintf(S, "%.0f%%", Percent);
+ S << Line;
+ Line = S.str();
+ S.clear();
+ }
+
+ /* Put in the ETA and cps meter, block off signals to prevent strangeness
+ during resizing */
+ sigset_t Sigs,OldSigs;
+ sigemptyset(&Sigs);
+ sigaddset(&Sigs,SIGWINCH);
+ sigprocmask(SIG_BLOCK,&Sigs,&OldSigs);
+
+ if (CurrentCPS != 0)
+ {
+ unsigned long long ETA = (TotalBytes - CurrentBytes)/CurrentCPS;
+ std::string Tmp = " " + SizeToStr(CurrentCPS) + "B/s " + TimeToStr(ETA);
+ size_t alignment = Line.length() + Tmp.length();
+ if (alignment < ScreenWidth)
+ {
+ alignment = ScreenWidth - alignment;
+ for (size_t i = 0; i < alignment; ++i)
+ Line.append(" ");
+ Line.append(Tmp);
+ }
+ }
+ if (Line.length() > ScreenWidth)
+ Line.erase(ScreenWidth);
+ sigprocmask(SIG_SETMASK,&OldSigs,0);
+
+ // Draw the current status
+ if (_config->FindB("Apt::Color", false) == true)
+ out << _config->Find("APT::Color::Yellow");
+ if (LastLineLength > Line.length())
+ clearLastLine();
+ else
+ out << '\r';
+ out << Line << std::flush;
+ if (_config->FindB("Apt::Color", false) == true)
+ out << _config->Find("APT::Color::Neutral") << std::flush;
+
+ LastLineLength = Line.length();
+ Update = false;
+
+ return true;
+}
+ /*}}}*/
+// AcqTextStatus::MediaChange - Media need to be swapped /*{{{*/
+// ---------------------------------------------------------------------
+/* Prompt for a media swap */
+bool AcqTextStatus::MediaChange(std::string Media, std::string Drive)
+{
+ // If we do not output on a terminal and one of the options to avoid user
+ // interaction is given, we assume that no user is present who could react
+ // on your media change request
+ if (isatty(STDOUT_FILENO) != 1 && Quiet >= 2 &&
+ (_config->FindB("APT::Get::Assume-Yes",false) == true ||
+ _config->FindB("APT::Get::Force-Yes",false) == true ||
+ _config->FindB("APT::Get::Trivial-Only",false) == true))
+
+ return false;
+
+ clearLastLine();
+ ioprintf(out,_("Media change: please insert the disc labeled\n"
+ " '%s'\n"
+ "in the drive '%s' and press [Enter]\n"),
+ Media.c_str(),Drive.c_str());
+
+ char C = 0;
+ bool bStatus = true;
+ while (C != '\n' && C != '\r')
+ {
+ int len = read(STDIN_FILENO,&C,1);
+ if(C == 'c' || len <= 0)
+ bStatus = false;
+ }
+
+ if(bStatus)
+ Update = true;
+ return bStatus;
+}
+ /*}}}*/
+bool AcqTextStatus::ReleaseInfoChanges(metaIndex const * const L, metaIndex const * const N, std::vector<ReleaseInfoChange> &&Changes)/*{{{*/
+{
+ if (Quiet >= 2 || isatty(STDOUT_FILENO) != 1 || isatty(STDIN_FILENO) != 1 ||
+ _config->FindB("APT::Get::Update::InteractiveReleaseInfoChanges", false) == false)
+ return pkgAcquireStatus2::ReleaseInfoChanges(nullptr, nullptr, std::move(Changes));
+
+ _error->PushToStack();
+ auto const confirmed = pkgAcquireStatus2::ReleaseInfoChanges(L, N, std::move(Changes));
+ if (confirmed == true)
+ {
+ _error->MergeWithStack();
+ return true;
+ }
+ clearLastLine();
+ _error->DumpErrors(out, GlobalError::NOTICE, false);
+ _error->RevertToStack();
+ return YnPrompt(_("Do you want to accept these changes and continue updating from this repository?"), false, false, out, out);
+}
+ /*}}}*/
+void AcqTextStatus::clearLastLine() { /*{{{*/
+ if (Quiet > 0 || LastLineLength == 0)
+ return;
+
+ // do not try to clear more than the (now smaller) screen
+ if (LastLineLength > ScreenWidth)
+ LastLineLength = ScreenWidth;
+
+ out << '\r';
+ for (size_t i = 0; i < LastLineLength; ++i)
+ out << ' ';
+ out << '\r' << std::flush;
+}
+ /*}}}*/
diff --git a/apt-private/acqprogress.h b/apt-private/acqprogress.h
new file mode 100644
index 0000000..c8c2116
--- /dev/null
+++ b/apt-private/acqprogress.h
@@ -0,0 +1,45 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Acquire Progress - Command line progress meter
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef ACQPROGRESS_H
+#define ACQPROGRESS_H
+
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/macros.h>
+
+#include <iostream>
+#include <string>
+
+class APT_PUBLIC AcqTextStatus : public pkgAcquireStatus2
+{
+ std::ostream &out;
+ unsigned int &ScreenWidth;
+ size_t LastLineLength;
+ unsigned long ID;
+ unsigned long Quiet;
+
+ APT_HIDDEN void clearLastLine();
+ APT_HIDDEN void AssignItemID(pkgAcquire::ItemDesc &Itm);
+
+ public:
+
+ virtual bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector<ReleaseInfoChange> &&Changes) APT_OVERRIDE;
+ virtual bool MediaChange(std::string Media,std::string Drive) APT_OVERRIDE;
+ virtual void IMSHit(pkgAcquire::ItemDesc &Itm) APT_OVERRIDE;
+ virtual void Fetch(pkgAcquire::ItemDesc &Itm) APT_OVERRIDE;
+ virtual void Done(pkgAcquire::ItemDesc &Itm) APT_OVERRIDE;
+ virtual void Fail(pkgAcquire::ItemDesc &Itm) APT_OVERRIDE;
+ virtual void Start() APT_OVERRIDE;
+ virtual void Stop() APT_OVERRIDE;
+
+ bool Pulse(pkgAcquire *Owner) APT_OVERRIDE;
+
+ AcqTextStatus(std::ostream &out, unsigned int &ScreenWidth,unsigned int const Quiet);
+};
+
+#endif
diff --git a/apt-private/private-cachefile.cc b/apt-private/private-cachefile.cc
new file mode 100644
index 0000000..ab25338
--- /dev/null
+++ b/apt-private/private-cachefile.cc
@@ -0,0 +1,118 @@
+// Include files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/upgrade.h>
+
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-output.h>
+
+#include <cstdlib>
+#include <ostream>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+static bool SortPackagesByName(pkgCache * const Owner,
+ map_pointer_t const A, map_pointer_t const B)
+{
+ if (A == 0)
+ return false;
+ if (B == 0 || A == B)
+ return true;
+ pkgCache::Group const * const GA = Owner->GrpP + A;
+ pkgCache::Group const * const GB = Owner->GrpP + B;
+ return strcmp(Owner->StrP + GA->Name, Owner->StrP + GB->Name) <= 0;
+}
+SortedPackageUniverse::SortedPackageUniverse(CacheFile &Cache) :
+ PackageUniverse{Cache}, List(Cache.UniverseList)
+{
+}
+void SortedPackageUniverse::LazyInit() const
+{
+ if (List.empty() == false)
+ return;
+ pkgCache * const Owner = data();
+ // In Multi-Arch systems Grps are easier to sort than Pkgs
+ std::vector<map_pointer_t> GrpList;
+ List.reserve(Owner->Head().GroupCount);
+ for (pkgCache::GrpIterator I{Owner->GrpBegin()}; I.end() != true; ++I)
+ GrpList.emplace_back(I - Owner->GrpP);
+ std::stable_sort(GrpList.begin(), GrpList.end(), std::bind( &SortPackagesByName, Owner, std::placeholders::_1, std::placeholders::_2 ));
+ List.reserve(Owner->Head().PackageCount);
+ for (auto G : GrpList)
+ {
+ pkgCache::GrpIterator const Grp(*Owner, Owner->GrpP + G);
+ for (pkgCache::PkgIterator P = Grp.PackageList(); P.end() != true; P = Grp.NextPkg(P))
+ List.emplace_back(P - Owner->PkgP);
+ }
+}
+// CacheFile::CheckDeps - Open the cache file /*{{{*/
+// ---------------------------------------------------------------------
+/* This routine generates the caches and then opens the dependency cache
+ and verifies that the system is OK. */
+bool CacheFile::CheckDeps(bool AllowBroken)
+{
+ bool FixBroken = _config->FindB("APT::Get::Fix-Broken",false);
+
+ if (_error->PendingError() == true)
+ return false;
+
+ // Check that the system is OK
+ if (DCache->DelCount() != 0 || DCache->InstCount() != 0)
+ return _error->Error("Internal error, non-zero counts");
+
+ // Apply corrections for half-installed packages
+ if (pkgApplyStatus(*DCache) == false)
+ return false;
+
+ if (_config->FindB("APT::Get::Fix-Policy-Broken",false) == true)
+ {
+ FixBroken = true;
+ if ((DCache->PolicyBrokenCount() > 0))
+ {
+ // upgrade all policy-broken packages with ForceImportantDeps=True
+ for (pkgCache::PkgIterator I = Cache->PkgBegin(); !I.end(); ++I)
+ if ((*DCache)[I].NowPolicyBroken() == true)
+ DCache->MarkInstall(I,true,0, false, true);
+ }
+ }
+
+ // Nothing is broken
+ if (DCache->BrokenCount() == 0 || AllowBroken == true)
+ return true;
+
+ // Attempt to fix broken things
+ if (FixBroken == true)
+ {
+ c1out << _("Correcting dependencies...") << flush;
+ if (pkgFixBroken(*DCache) == false || DCache->BrokenCount() != 0)
+ {
+ c1out << _(" failed.") << endl;
+ ShowBroken(c1out,*this,true);
+
+ return _error->Error(_("Unable to correct dependencies"));
+ }
+ if (pkgMinimizeUpgrade(*DCache) == false)
+ return _error->Error(_("Unable to minimize the upgrade set"));
+
+ c1out << _(" Done") << endl;
+ }
+ else
+ {
+ c1out << _("You might want to run 'apt --fix-broken install' to correct these.") << endl;
+ ShowBroken(c1out,*this,true);
+ return _error->Error(_("Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution)."));
+ }
+
+ return true;
+}
+ /*}}}*/
diff --git a/apt-private/private-cachefile.h b/apt-private/private-cachefile.h
new file mode 100644
index 0000000..5086cea
--- /dev/null
+++ b/apt-private/private-cachefile.h
@@ -0,0 +1,72 @@
+#ifndef APT_PRIVATE_CACHEFILE_H
+#define APT_PRIVATE_CACHEFILE_H
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/sourcelist.h>
+
+// class CacheFile - Cover class for some dependency cache functions /*{{{*/
+class APT_PUBLIC CacheFile : public pkgCacheFile
+{
+ public:
+ std::vector<map_pointer_t> UniverseList;
+
+ bool CheckDeps(bool AllowBroken = false);
+ bool BuildCaches(bool WithLock = true)
+ {
+ OpTextProgress Prog(*_config);
+ if (pkgCacheFile::BuildCaches(&Prog,WithLock) == false)
+ return false;
+ return true;
+ }
+ bool Open(bool WithLock = true)
+ {
+ OpTextProgress Prog(*_config);
+ return pkgCacheFile::Open(&Prog,WithLock);
+ };
+ bool OpenForInstall()
+ {
+ if (_config->FindB("APT::Get::Print-URIs") == true)
+ return Open(false);
+ else
+ return Open(true);
+ }
+};
+ /*}}}*/
+
+class SortedPackageUniverse : public APT::PackageUniverse
+{
+ std::vector<map_pointer_t> &List;
+ void LazyInit() const;
+
+public:
+ explicit SortedPackageUniverse(CacheFile &Cache);
+
+ class const_iterator : public APT::Container_iterator_base<APT::PackageContainerInterface, SortedPackageUniverse, SortedPackageUniverse::const_iterator, std::vector<map_pointer_t>::const_iterator, pkgCache::PkgIterator>
+ {
+ pkgCache * const Cache;
+ public:
+ inline pkgCache::PkgIterator getType(void) const
+ {
+ if (*_iter == 0) return pkgCache::PkgIterator(*Cache);
+ return pkgCache::PkgIterator(*Cache, Cache->PkgP + *_iter);
+ }
+ explicit const_iterator(pkgCache * const Owner, std::vector<map_pointer_t>::const_iterator i):
+ Container_iterator_base<APT::PackageContainerInterface, SortedPackageUniverse, SortedPackageUniverse::const_iterator, std::vector<map_pointer_t>::const_iterator, pkgCache::PkgIterator>(i), Cache(Owner) {}
+
+ };
+ typedef const_iterator iterator;
+
+ const_iterator begin() const { LazyInit(); return const_iterator(data(), List.begin()); }
+ const_iterator end() const { LazyInit(); return const_iterator(data(), List.end()); }
+ const_iterator cbegin() const { LazyInit(); return const_iterator(data(), List.begin()); }
+ const_iterator cend() const { LazyInit(); return const_iterator(data(), List.end()); }
+ iterator begin() { LazyInit(); return iterator(data(), List.begin()); }
+ iterator end() { LazyInit(); return iterator(data(), List.end()); }
+};
+
+#endif
diff --git a/apt-private/private-cacheset.cc b/apt-private/private-cacheset.cc
new file mode 100644
index 0000000..95a16f8
--- /dev/null
+++ b/apt-private/private-cacheset.cc
@@ -0,0 +1,372 @@
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cachefilter.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cacheset.h>
+
+#include <stddef.h>
+
+#include <apti18n.h>
+
+bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile, /*{{{*/
+ APT::VersionContainerInterface * const vci,
+ OpProgress * const progress)
+{
+ Matcher null_matcher = Matcher();
+ return GetLocalitySortedVersionSet(CacheFile, vci,
+ null_matcher, progress);
+}
+bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
+ APT::VersionContainerInterface * const vci,
+ Matcher &matcher,
+ OpProgress * const progress)
+{
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr))
+ return false;
+ if (progress != nullptr)
+ progress->SubProgress(Cache->Head().PackageCount, _("Sorting"));
+
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
+ if (unlikely(DepCache == nullptr))
+ return false;
+ APT::CacheSetHelper helper(false);
+
+ int Done=0;
+
+ bool const insertCurrentVer = _config->FindB("APT::Cmd::Installed", false);
+ bool const insertUpgradable = _config->FindB("APT::Cmd::Upgradable", false);
+ bool const insertManualInstalled = _config->FindB("APT::Cmd::Manual-Installed", false);
+
+ for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+ {
+ if (progress != NULL)
+ {
+ if (Done % 500 == 0)
+ progress->Progress(Done);
+ ++Done;
+ }
+
+ // exclude virtual pkgs
+ if (P->VersionList == 0)
+ continue;
+
+ if ((matcher)(P) == false)
+ continue;
+
+ pkgDepCache::StateCache &state = (*DepCache)[P];
+ if (insertCurrentVer == true)
+ {
+ if (P->CurrentVer != 0)
+ vci->FromPackage(vci, CacheFile, P, APT::CacheSetHelper::INSTALLED, helper);
+ }
+ else if (insertUpgradable == true)
+ {
+ if(P.CurrentVer() && state.Upgradable())
+ vci->FromPackage(vci, CacheFile, P, APT::CacheSetHelper::CANDIDATE, helper);
+ }
+ else if (insertManualInstalled == true)
+ {
+ if (P.CurrentVer() &&
+ ((*DepCache)[P].Flags & pkgCache::Flag::Auto) == false)
+ vci->FromPackage(vci, CacheFile, P, APT::CacheSetHelper::CANDIDATE, helper);
+ }
+ else
+ {
+ if (vci->FromPackage(vci, CacheFile, P, APT::CacheSetHelper::CANDIDATE, helper) == false)
+ {
+ // no candidate, this may happen for packages in
+ // dpkg "deinstall ok config-file" state - we pick the first ver
+ // (which should be the only one)
+ vci->insert(P.VersionList());
+ }
+ }
+ }
+ if (progress != NULL)
+ progress->Done();
+ return true;
+}
+ /*}}}*/
+
+// CacheSetHelper saving virtual packages /*{{{*/
+pkgCache::VerIterator CacheSetHelperVirtuals::canNotGetVersion(
+ enum CacheSetHelper::VerSelector const select,
+ pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg)
+{
+ if (select == NEWEST || select == CANDIDATE || select == ALL)
+ virtualPkgs.insert(Pkg);
+ return CacheSetHelper::canNotGetVersion(select, Cache, Pkg);
+}
+void CacheSetHelperVirtuals::canNotFindVersion(
+ enum CacheSetHelper::VerSelector const select,
+ APT::VersionContainerInterface * vci,
+ pkgCacheFile &Cache,
+ pkgCache::PkgIterator const &Pkg)
+{
+ if (select == NEWEST || select == CANDIDATE || select == ALL)
+ virtualPkgs.insert(Pkg);
+ return CacheSetHelper::canNotFindVersion(select, vci, Cache, Pkg);
+}
+static pkgCache::PkgIterator canNotFindPkgName_impl(pkgCacheFile &Cache, std::string const &str)
+{
+ std::string pkg = str;
+ size_t const archfound = pkg.find_last_of(':');
+ std::string arch;
+ if (archfound != std::string::npos) {
+ arch = pkg.substr(archfound+1);
+ pkg.erase(archfound);
+ if (arch == "all" || arch == "native")
+ arch = _config->Find("APT::Architecture");
+ }
+
+ // If we don't find 'foo:amd64' look for 'foo:amd64:any'.
+ // Note: we prepare for an error here as if foo:amd64 does not exist,
+ // but foo:amd64:any it means that this package is only referenced in a
+ // (architecture specific) dependency. We do not add to virtualPkgs directly
+ // as we can't decide from here which error message has to be printed.
+ // FIXME: This doesn't match 'barbarian' architectures
+ pkgCache::PkgIterator Pkg(Cache, 0);
+ std::vector<std::string> const archs = APT::Configuration::getArchitectures();
+ if (archfound == std::string::npos)
+ {
+ for (auto const &a : archs)
+ {
+ Pkg = Cache.GetPkgCache()->FindPkg(pkg + ':' + a, "any");
+ if (Pkg.end() == false && Pkg->ProvidesList != 0)
+ break;
+ }
+ if (Pkg.end() == true)
+ for (auto const &a : archs)
+ {
+ Pkg = Cache.GetPkgCache()->FindPkg(pkg + ':' + a, "any");
+ if (Pkg.end() == false)
+ break;
+ }
+ }
+ else
+ {
+ Pkg = Cache.GetPkgCache()->FindPkg(pkg + ':' + arch, "any");
+ if (Pkg.end() == true)
+ {
+ APT::CacheFilter::PackageArchitectureMatchesSpecification pams(arch);
+ for (auto const &a : archs)
+ {
+ if (pams(a.c_str()) == false)
+ continue;
+ Pkg = Cache.GetPkgCache()->FindPkg(pkg + ':' + a, "any");
+ if (Pkg.end() == false)
+ break;
+ }
+ }
+ }
+ return Pkg;
+}
+pkgCache::PkgIterator CacheSetHelperVirtuals::canNotFindPkgName(pkgCacheFile &Cache, std::string const &str)
+{
+ pkgCache::PkgIterator const Pkg = canNotFindPkgName_impl(Cache, str);
+ if (Pkg.end())
+ return APT::CacheSetHelper::canNotFindPkgName(Cache, str);
+ return Pkg;
+}
+CacheSetHelperVirtuals::CacheSetHelperVirtuals(bool const ShowErrors, GlobalError::MsgType const &ErrorType) :
+ CacheSetHelper{ShowErrors, ErrorType}
+{}
+ /*}}}*/
+
+// CacheSetHelperAPTGet - responsible for message telling from the CacheSets/*{{{*/
+CacheSetHelperAPTGet::CacheSetHelperAPTGet(std::ostream &pout) :
+ APT::CacheSetHelper{true}, out(pout)
+{
+ explicitlyNamed = true;
+}
+void CacheSetHelperAPTGet::showTaskSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern)
+{
+ ioprintf(out, _("Note, selecting '%s' for task '%s'\n"),
+ Pkg.FullName(true).c_str(), pattern.c_str());
+ explicitlyNamed = false;
+}
+void CacheSetHelperAPTGet::showFnmatchSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern)
+{
+ ioprintf(out, _("Note, selecting '%s' for glob '%s'\n"),
+ Pkg.FullName(true).c_str(), pattern.c_str());
+ explicitlyNamed = false;
+}
+void CacheSetHelperAPTGet::showRegExSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern)
+{
+ ioprintf(out, _("Note, selecting '%s' for regex '%s'\n"),
+ Pkg.FullName(true).c_str(), pattern.c_str());
+ explicitlyNamed = false;
+}
+void CacheSetHelperAPTGet::showSelectedVersion(pkgCache::PkgIterator const &/*Pkg*/, pkgCache::VerIterator const Ver,
+ std::string const &ver, bool const /*verIsRel*/)
+{
+ if (ver == Ver.VerStr())
+ return;
+ selectedByRelease.push_back(make_pair(Ver, ver));
+}
+bool CacheSetHelperAPTGet::showVirtualPackageErrors(pkgCacheFile &Cache)
+{
+ if (virtualPkgs.empty() == true)
+ return true;
+ for (APT::PackageSet::const_iterator Pkg = virtualPkgs.begin();
+ Pkg != virtualPkgs.end(); ++Pkg) {
+ if (Pkg->ProvidesList != 0) {
+ ioprintf(c1out,_("Package %s is a virtual package provided by:\n"),
+ Pkg.FullName(true).c_str());
+
+ pkgCache::PrvIterator I = Pkg.ProvidesList();
+ unsigned short provider = 0;
+ for (; I.end() == false; ++I) {
+ pkgCache::PkgIterator Pkg = I.OwnerPkg();
+
+ if (Cache[Pkg].CandidateVerIter(Cache) == I.OwnerVer()) {
+ c1out << " " << Pkg.FullName(true) << " " << I.OwnerVer().VerStr();
+ if (Cache[Pkg].Install() == true && Cache[Pkg].NewInstall() == false)
+ c1out << _(" [Installed]");
+ c1out << std::endl;
+ ++provider;
+ }
+ }
+ // if we found no candidate which provide this package, show non-candidates
+ if (provider == 0)
+ for (I = Pkg.ProvidesList(); I.end() == false; ++I)
+ c1out << " " << I.OwnerPkg().FullName(true) << " " << I.OwnerVer().VerStr()
+ << _(" [Not candidate version]") << std::endl;
+ else
+ out << _("You should explicitly select one to install.") << std::endl;
+ } else {
+ ioprintf(c1out,
+ _("Package %s is not available, but is referred to by another package.\n"
+ "This may mean that the package is missing, has been obsoleted, or\n"
+ "is only available from another source\n"),Pkg.FullName(true).c_str());
+
+ std::vector<bool> Seen(Cache.GetPkgCache()->Head().PackageCount, false);
+ APT::PackageList pkglist;
+ for (pkgCache::DepIterator Dep = Pkg.RevDependsList();
+ Dep.end() == false; ++Dep) {
+ if (Dep->Type != pkgCache::Dep::Replaces)
+ continue;
+ pkgCache::PkgIterator const DP = Dep.ParentPkg();
+ if (Seen[DP->ID] == true)
+ continue;
+ Seen[DP->ID] = true;
+ pkglist.insert(DP);
+ }
+ ShowList(c1out, _("However the following packages replace it:"), pkglist,
+ &AlwaysTrue, &PrettyFullName, &EmptyString);
+ }
+ c1out << std::endl;
+ }
+ return false;
+}
+pkgCache::VerIterator CacheSetHelperAPTGet::canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg)
+{
+ APT::VersionSet const verset = tryVirtualPackage(Cache, Pkg, CacheSetHelper::CANDIDATE);
+ if (verset.empty() == false)
+ return *(verset.begin());
+ else if (ShowError == true) {
+ _error->Error(_("Package '%s' has no installation candidate"),Pkg.FullName(true).c_str());
+ virtualPkgs.insert(Pkg);
+ }
+ return pkgCache::VerIterator(Cache, 0);
+}
+pkgCache::VerIterator CacheSetHelperAPTGet::canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg)
+{
+ if (Pkg->ProvidesList != 0)
+ {
+ APT::VersionSet const verset = tryVirtualPackage(Cache, Pkg, CacheSetHelper::NEWEST);
+ if (verset.empty() == false)
+ return *(verset.begin());
+ if (ShowError == true)
+ ioprintf(out, _("Virtual packages like '%s' can't be removed\n"), Pkg.FullName(true).c_str());
+ }
+ else
+ {
+ pkgCache::GrpIterator Grp = Pkg.Group();
+ pkgCache::PkgIterator P = Grp.PackageList();
+ for (; P.end() != true; P = Grp.NextPkg(P))
+ {
+ if (P == Pkg)
+ continue;
+ if (P->CurrentVer != 0) {
+ // TRANSLATORS: Note, this is not an interactive question
+ ioprintf(c1out,_("Package '%s' is not installed, so not removed. Did you mean '%s'?\n"),
+ Pkg.FullName(true).c_str(), P.FullName(true).c_str());
+ break;
+ }
+ }
+ if (P.end() == true)
+ ioprintf(c1out,_("Package '%s' is not installed, so not removed\n"),Pkg.FullName(true).c_str());
+ }
+ return pkgCache::VerIterator(Cache, 0);
+}
+APT::VersionSet CacheSetHelperAPTGet::tryVirtualPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg,
+ CacheSetHelper::VerSelector const select)
+{
+ /* This is a pure virtual package and there is a single available
+ candidate providing it. */
+ if (unlikely(Cache[Pkg].CandidateVer != 0) || Pkg->ProvidesList == 0)
+ return APT::VersionSet();
+
+ pkgCache::PkgIterator Prov;
+ bool found_one = false;
+ for (pkgCache::PrvIterator P = Pkg.ProvidesList(); P; ++P) {
+ pkgCache::VerIterator const PVer = P.OwnerVer();
+ pkgCache::PkgIterator const PPkg = PVer.ParentPkg();
+
+ /* Ignore versions that are not a candidate. */
+ if (Cache[PPkg].CandidateVer != PVer)
+ continue;
+
+ if (found_one == false) {
+ Prov = PPkg;
+ found_one = true;
+ } else if (PPkg != Prov) {
+ // same group, so it's a foreign package
+ if (PPkg->Group == Prov->Group) {
+ // do we already have the requested arch?
+ if (strcmp(Pkg.Arch(), Prov.Arch()) == 0 ||
+ strcmp(Prov.Arch(), "all") == 0 ||
+ unlikely(strcmp(PPkg.Arch(), Prov.Arch()) == 0)) // packages have only on candidate, but just to be sure
+ continue;
+ // see which architecture we prefer more and switch to it
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ if (std::find(archs.begin(), archs.end(), PPkg.Arch()) < std::find(archs.begin(), archs.end(), Prov.Arch()))
+ Prov = PPkg;
+ continue;
+ }
+ found_one = false; // we found at least two
+ break;
+ }
+ }
+
+ if (found_one == true) {
+ ioprintf(out, _("Note, selecting '%s' instead of '%s'\n"),
+ Prov.FullName(true).c_str(), Pkg.FullName(true).c_str());
+ return APT::VersionSet::FromPackage(Cache, Prov, select, *this);
+ }
+ return APT::VersionSet();
+}
+pkgCache::PkgIterator CacheSetHelperAPTGet::canNotFindPkgName(pkgCacheFile &Cache, std::string const &str)
+{
+ pkgCache::PkgIterator Pkg = canNotFindPkgName_impl(Cache, str);
+ if (Pkg.end())
+ {
+ Pkg = APT::CacheSetHelper::canNotFindPkgName(Cache, str);
+ if (Pkg.end() && ShowError)
+ {
+ notFound.insert(str);
+ }
+ }
+ return Pkg;
+}
+ /*}}}*/
diff --git a/apt-private/private-cacheset.h b/apt-private/private-cacheset.h
new file mode 100644
index 0000000..3370bd0
--- /dev/null
+++ b/apt-private/private-cacheset.h
@@ -0,0 +1,126 @@
+#ifndef APT_PRIVATE_CACHESET_H
+#define APT_PRIVATE_CACHESET_H
+
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/macros.h>
+
+#include <apt-private/private-output.h>
+
+#include <list>
+#include <set>
+#include <string>
+#include <vector>
+
+class OpProgress;
+
+class VerIteratorWithCaching
+{
+ const pkgCache::VerIterator iter;
+ const pkgCache::DescFile * descFile;
+public:
+ VerIteratorWithCaching(const pkgCache::VerIterator& iter) :
+ iter(iter),
+ descFile(iter->DescriptionList != 0
+ ? (const pkgCache::DescFile *) iter.TranslatedDescription().FileList()
+ : nullptr)
+ {}
+ const pkgCache::DescFile * CachedDescFile() const { return descFile; }
+ operator pkgCache::VerIterator() const { return iter; }
+ map_id_t ID() const { return iter->ID; }
+};
+
+struct VersionSortDescriptionLocality /*{{{*/
+{
+ bool operator () (const VerIteratorWithCaching &v_lhs,
+ const VerIteratorWithCaching &v_rhs)
+ {
+ pkgCache::DescFile const *A = v_lhs.CachedDescFile();
+ pkgCache::DescFile const *B = v_rhs.CachedDescFile();
+
+ if (A == nullptr)
+ {
+ if (B == nullptr)
+ return v_lhs.ID() < v_rhs.ID();
+ return true;
+ }
+ else if (B == nullptr)
+ return false;
+
+ if (A->File == B->File)
+ {
+ if (A->Offset == B->Offset)
+ return v_lhs.ID() < v_rhs.ID();
+ return A->Offset < B->Offset;
+ }
+
+ return A->File < B->File;
+ }
+};
+ /*}}}*/
+// sorted by locality which makes iterating much faster
+typedef APT::VersionContainer<
+ std::set<VerIteratorWithCaching,
+ VersionSortDescriptionLocality> > LocalitySortedVersionSet;
+
+class Matcher {
+public:
+ virtual bool operator () (const pkgCache::PkgIterator &/*P*/) {
+ return true;}
+};
+
+// FIXME: add default argument for OpProgress (or overloaded function)
+bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
+ APT::VersionContainerInterface * const vci,
+ Matcher &matcher,
+ OpProgress * const progress);
+bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
+ APT::VersionContainerInterface * const vci,
+ OpProgress * const progress);
+
+
+// CacheSetHelper saving virtual packages /*{{{*/
+class CacheSetHelperVirtuals: public APT::CacheSetHelper {
+public:
+ APT::PackageSet virtualPkgs;
+
+ virtual pkgCache::VerIterator canNotGetVersion(enum CacheSetHelper::VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual void canNotFindVersion(enum CacheSetHelper::VerSelector const select, APT::VersionContainerInterface * vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str) APT_OVERRIDE;
+
+ CacheSetHelperVirtuals(bool const ShowErrors = true, GlobalError::MsgType const &ErrorType = GlobalError::NOTICE);
+};
+ /*}}}*/
+
+// CacheSetHelperAPTGet - responsible for message telling from the CacheSets/*{{{*/
+class CacheSetHelperAPTGet : public APT::CacheSetHelper {
+ /** \brief stream message should be printed to */
+ std::ostream &out;
+ /** \brief were things like Task or RegEx used to select packages? */
+ bool explicitlyNamed;
+
+ APT::PackageSet virtualPkgs;
+public:
+ std::list<std::pair<pkgCache::VerIterator, std::string> > selectedByRelease;
+ std::set<std::string> notFound;
+
+ explicit CacheSetHelperAPTGet(std::ostream &out);
+
+ virtual void showTaskSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE;
+ virtual void showFnmatchSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE;
+ virtual void showRegExSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE;
+ virtual void showSelectedVersion(pkgCache::PkgIterator const &/*Pkg*/, pkgCache::VerIterator const Ver,
+ std::string const &ver, bool const /*verIsRel*/) APT_OVERRIDE;
+ bool showVirtualPackageErrors(pkgCacheFile &Cache);
+
+ virtual pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE;
+ virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str) APT_OVERRIDE;
+
+ APT::VersionSet tryVirtualPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg,
+ CacheSetHelper::VerSelector const select);
+
+ inline bool allPkgNamedExplicitly() const { return explicitlyNamed; }
+};
+ /*}}}*/
+
+#endif
diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc
new file mode 100644
index 0000000..4949283
--- /dev/null
+++ b/apt-private/private-cmndline.cc
@@ -0,0 +1,577 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <iomanip>
+#include <vector>
+
+#include <apti18n.h>
+ /*}}}*/
+
+APT_NONNULL(1, 2)
+static bool CmdMatches_fn(char const *const Cmd, char const *const Match)
+{
+ return strcmp(Cmd, Match) == 0;
+}
+template <typename... Tail>
+APT_NONNULL(1, 2)
+static bool CmdMatches_fn(char const *const Cmd, char const *const Match, Tail... MoreMatches)
+{
+ return CmdMatches_fn(Cmd, Match) || CmdMatches_fn(Cmd, MoreMatches...);
+}
+#define addArg(w, x, y, z) Args.emplace_back(CommandLine::MakeArgs(w, x, y, z))
+#define CmdMatches(...) (Cmd != nullptr && CmdMatches_fn(Cmd, __VA_ARGS__))
+
+static bool addArgumentsAPTCache(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
+{
+ if (CmdMatches("depends", "rdepends", "xvcg", "dotty"))
+ {
+ addArg('i', "important", "APT::Cache::Important", 0);
+ addArg(0, "installed", "APT::Cache::Installed", 0);
+ addArg(0, "pre-depends", "APT::Cache::ShowPre-Depends", 0);
+ addArg(0, "depends", "APT::Cache::ShowDepends", 0);
+ addArg(0, "recommends", "APT::Cache::ShowRecommends", 0);
+ addArg(0, "suggests", "APT::Cache::ShowSuggests", 0);
+ addArg(0, "replaces", "APT::Cache::ShowReplaces", 0);
+ addArg(0, "breaks", "APT::Cache::ShowBreaks", 0);
+ addArg(0, "conflicts", "APT::Cache::ShowConflicts", 0);
+ addArg(0, "enhances", "APT::Cache::ShowEnhances", 0);
+ addArg(0, "recurse", "APT::Cache::RecurseDepends", 0);
+ addArg(0, "implicit", "APT::Cache::ShowImplicit", 0);
+ }
+ else if (CmdMatches("search"))
+ {
+ addArg('n', "names-only", "APT::Cache::NamesOnly", 0);
+ addArg('f', "full", "APT::Cache::ShowFull", 0);
+ }
+ else if (CmdMatches("show"))
+ {
+ addArg('a', "all-versions", "APT::Cache::AllVersions", 0);
+ }
+ else if (CmdMatches("pkgnames"))
+ {
+ addArg(0, "all-names", "APT::Cache::AllNames", 0);
+ }
+ else if (CmdMatches("unmet"))
+ {
+ addArg('i', "important", "APT::Cache::Important", 0);
+ }
+ else if (CmdMatches("showsrc"))
+ {
+ addArg(0,"only-source","APT::Cache::Only-Source",0);
+ }
+ else if (CmdMatches("gencaches", "showpkg", "stats", "dump",
+ "dumpavail", "showauto", "policy", "madison"))
+ ;
+ else
+ return false;
+
+ bool const found_something = Args.empty() == false;
+
+ // FIXME: move to the correct command(s)
+ addArg('g', "generate", "APT::Cache::Generate", 0);
+ addArg('t', "target-release", "APT::Default-Release", CommandLine::HasArg);
+ addArg('t', "default-release", "APT::Default-Release", CommandLine::HasArg);
+
+ addArg('p', "pkg-cache", "Dir::Cache::pkgcache", CommandLine::HasArg);
+ addArg('s', "src-cache", "Dir::Cache::srcpkgcache", CommandLine::HasArg);
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
+
+ return found_something;
+}
+ /*}}}*/
+static bool addArgumentsAPTCDROM(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
+{
+ if (CmdMatches("add", "ident") == false)
+ return false;
+
+ // FIXME: move to the correct command(s)
+ addArg(0, "auto-detect", "Acquire::cdrom::AutoDetect", CommandLine::Boolean);
+ addArg('d', "cdrom", "Acquire::cdrom::mount", CommandLine::HasArg);
+ addArg('r', "rename", "APT::CDROM::Rename", 0);
+ addArg('m', "no-mount", "APT::CDROM::NoMount", 0);
+ addArg('f', "fast", "APT::CDROM::Fast", 0);
+ addArg('n', "just-print", "APT::CDROM::NoAct", 0);
+ addArg('n', "recon", "APT::CDROM::NoAct", 0);
+ addArg('n', "no-act", "APT::CDROM::NoAct", 0);
+ addArg('a', "thorough", "APT::CDROM::Thorough", 0);
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTConfig(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
+{
+ if (CmdMatches("dump"))
+ {
+ addArg(0,"empty","APT::Config::Dump::EmptyValue",CommandLine::Boolean);
+ addArg(0,"format","APT::Config::Dump::Format",CommandLine::HasArg);
+ }
+ else if (CmdMatches("shell"))
+ ;
+ else
+ return false;
+
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTDumpSolver(std::vector<CommandLine::Args> &Args, char const * const)/*{{{*/
+{
+ addArg(0,"user","APT::Solver::RunAsUser",CommandLine::HasArg);
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTExtractTemplates(std::vector<CommandLine::Args> &Args, char const * const)/*{{{*/
+{
+ addArg('t',"tempdir","APT::ExtractTemplates::TempDir",CommandLine::HasArg);
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTFTPArchive(std::vector<CommandLine::Args> &Args, char const * const)/*{{{*/
+{
+ addArg(0,"md5","APT::FTPArchive::MD5",0);
+ addArg(0,"sha1","APT::FTPArchive::SHA1",0);
+ addArg(0,"sha256","APT::FTPArchive::SHA256",0);
+ addArg(0,"sha512","APT::FTPArchive::SHA512",0);
+ addArg('d',"db","APT::FTPArchive::DB",CommandLine::HasArg);
+ addArg('s',"source-override","APT::FTPArchive::SourceOverride",CommandLine::HasArg);
+ addArg(0,"delink","APT::FTPArchive::DeLinkAct",0);
+ addArg(0,"readonly","APT::FTPArchive::ReadOnlyDB",0);
+ addArg(0,"contents","APT::FTPArchive::Contents",0);
+ addArg('a',"arch","APT::FTPArchive::Architecture",CommandLine::HasArg);
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTInternalPlanner(std::vector<CommandLine::Args> &, char const * const)/*{{{*/
+{
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTInternalSolver(std::vector<CommandLine::Args> &, char const * const)/*{{{*/
+{
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTHelper(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
+{
+ if (CmdMatches("cat-file"))
+ {
+ addArg('C', "compress", "Apt-Helper::Cat-File::Compress",CommandLine::HasArg);
+ }
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTGet(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
+{
+ if (CmdMatches("install", "reinstall", "remove", "purge", "upgrade", "dist-upgrade",
+ "dselect-upgrade", "autoremove", "autopurge", "full-upgrade"))
+ {
+ addArg(0, "show-progress", "DpkgPM::Progress", 0);
+ addArg('f', "fix-broken", "APT::Get::Fix-Broken", 0);
+ addArg(0, "purge", "APT::Get::Purge", 0);
+ addArg('V',"verbose-versions","APT::Get::Show-Versions",0);
+ addArg(0, "autoremove", "APT::Get::AutomaticRemove", 0);
+ addArg(0, "auto-remove", "APT::Get::AutomaticRemove", 0);
+ addArg(0, "reinstall", "APT::Get::ReInstall", 0);
+ addArg(0, "solver", "APT::Solver", CommandLine::HasArg);
+ addArg(0, "planner", "APT::Planner", CommandLine::HasArg);
+ if (CmdMatches("upgrade"))
+ {
+ addArg(0, "new-pkgs", "APT::Get::Upgrade-Allow-New",
+ CommandLine::Boolean);
+ }
+ }
+ else if (CmdMatches("update"))
+ {
+ addArg(0, "list-cleanup", "APT::Get::List-Cleanup", 0);
+ addArg(0, "allow-insecure-repositories", "Acquire::AllowInsecureRepositories", 0);
+ addArg(0, "allow-weak-repositories", "Acquire::AllowWeakRepositories", 0);
+ addArg(0, "allow-releaseinfo-change", "Acquire::AllowReleaseInfoChange", 0);
+ addArg(0, "allow-releaseinfo-change-origin", "Acquire::AllowReleaseInfoChange::Origin", 0);
+ addArg(0, "allow-releaseinfo-change-label", "Acquire::AllowReleaseInfoChange::Label", 0);
+ addArg(0, "allow-releaseinfo-change-version", "Acquire::AllowReleaseInfoChange::Version", 0);
+ addArg(0, "allow-releaseinfo-change-codename", "Acquire::AllowReleaseInfoChange::Codename", 0);
+ addArg(0, "allow-releaseinfo-change-suite", "Acquire::AllowReleaseInfoChange::Suite", 0);
+ addArg(0, "allow-releaseinfo-change-defaultpin", "Acquire::AllowReleaseInfoChange::DefaultPin", 0);
+ }
+ else if (CmdMatches("source"))
+ {
+ addArg('b', "compile", "APT::Get::Compile", 0);
+ addArg('b', "build", "APT::Get::Compile", 0);
+ addArg('P', "build-profiles", "APT::Build-Profiles", CommandLine::HasArg);
+ addArg(0, "diff-only", "APT::Get::Diff-Only", 0);
+ addArg(0, "debian-only", "APT::Get::Diff-Only", 0);
+ addArg(0, "tar-only", "APT::Get::Tar-Only", 0);
+ addArg(0, "dsc-only", "APT::Get::Dsc-Only", 0);
+ }
+ else if (CmdMatches("build-dep"))
+ {
+ addArg('a', "host-architecture", "APT::Get::Host-Architecture", CommandLine::HasArg);
+ addArg('P', "build-profiles", "APT::Build-Profiles", CommandLine::HasArg);
+ addArg(0, "purge", "APT::Get::Purge", 0);
+ addArg(0, "solver", "APT::Solver", CommandLine::HasArg);
+ addArg(0,"arch-only","APT::Get::Arch-Only",0);
+ addArg(0,"indep-only","APT::Get::Indep-Only",0);
+ // this has no effect *but* sbuild is using it (see LP: #1255806)
+ // once sbuild is fixed, this option can be removed
+ addArg('f', "fix-broken", "APT::Get::Fix-Broken", 0);
+ }
+ else if (CmdMatches("indextargets"))
+ {
+ addArg(0,"format","APT::Get::IndexTargets::Format", CommandLine::HasArg);
+ addArg(0,"release-info","APT::Get::IndexTargets::ReleaseInfo", 0);
+ }
+ else if (CmdMatches("clean", "autoclean", "auto-clean", "check", "download", "changelog") ||
+ CmdMatches("markauto", "unmarkauto")) // deprecated commands
+ ;
+ else if (CmdMatches("moo"))
+ addArg(0, "color", "APT::Moo::Color", 0);
+
+ if (CmdMatches("install", "reinstall", "remove", "purge", "upgrade", "dist-upgrade",
+ "dselect-upgrade", "autoremove", "auto-remove", "autopurge", "clean", "autoclean", "auto-clean", "check",
+ "build-dep", "full-upgrade", "source"))
+ {
+ addArg('s', "simulate", "APT::Get::Simulate", 0);
+ addArg('s', "just-print", "APT::Get::Simulate", 0);
+ addArg('s', "recon", "APT::Get::Simulate", 0);
+ addArg('s', "dry-run", "APT::Get::Simulate", 0);
+ addArg('s', "no-act", "APT::Get::Simulate", 0);
+ }
+
+ bool const found_something = Args.empty() == false;
+
+ // FIXME: move to the correct command(s)
+ addArg('d',"download-only","APT::Get::Download-Only",0);
+ addArg('y',"yes","APT::Get::Assume-Yes",0);
+ addArg('y',"assume-yes","APT::Get::Assume-Yes",0);
+ addArg(0,"assume-no","APT::Get::Assume-No",0);
+ addArg('u',"show-upgraded","APT::Get::Show-Upgraded",0);
+ addArg('m',"ignore-missing","APT::Get::Fix-Missing",0);
+ addArg('t',"target-release","APT::Default-Release",CommandLine::HasArg);
+ addArg('t',"default-release","APT::Default-Release",CommandLine::HasArg);
+ addArg(0,"download","APT::Get::Download",0);
+ addArg(0,"fix-missing","APT::Get::Fix-Missing",0);
+ addArg(0,"ignore-hold","APT::Ignore-Hold",0);
+ addArg(0,"upgrade","APT::Get::upgrade",0);
+ addArg(0,"only-upgrade","APT::Get::Only-Upgrade",0);
+ addArg(0,"allow-change-held-packages","APT::Get::allow-change-held-packages",CommandLine::Boolean);
+ addArg(0,"allow-remove-essential","APT::Get::allow-remove-essential",CommandLine::Boolean);
+ addArg(0,"allow-downgrades","APT::Get::allow-downgrades",CommandLine::Boolean);
+ addArg(0,"force-yes","APT::Get::force-yes",0);
+ addArg(0,"print-uris","APT::Get::Print-URIs",0);
+ addArg(0,"trivial-only","APT::Get::Trivial-Only",0);
+ addArg(0,"remove","APT::Get::Remove",0);
+ addArg(0,"only-source","APT::Get::Only-Source",0);
+ addArg(0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0);
+ addArg(0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean);
+ addArg(0,"install-suggests","APT::Install-Suggests",CommandLine::Boolean);
+ addArg(0,"fix-policy","APT::Get::Fix-Policy-Broken",0);
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
+
+ return found_something;
+}
+ /*}}}*/
+static bool addArgumentsAPTMark(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
+{
+ if (CmdMatches("auto", "manual", "hold", "unhold", "showauto",
+ "showmanual", "showhold", "showholds",
+ "markauto", "unmarkauto", "minimize-manual"))
+ {
+ addArg('f',"file","Dir::State::extended_states",CommandLine::HasArg);
+ }
+ else if (CmdMatches("install", "reinstall", "remove", "deinstall", "purge",
+ "showinstall", "showinstalls", "showremove", "showremoves",
+ "showdeinstall", "showdeinstalls", "showpurge", "showpurges"))
+ ;
+ else
+ return false;
+
+ if (CmdMatches("markauto", "unmarkauto"))
+ {
+ addArg('v',"verbose","APT::MarkAuto::Verbose",0);
+ }
+
+ if (CmdMatches("minimize-manual"))
+ {
+ addArg('y',"yes","APT::Get::Assume-Yes",0);
+ addArg('y',"assume-yes","APT::Get::Assume-Yes",0);
+ addArg(0,"assume-no","APT::Get::Assume-No",0);
+ }
+
+ if (CmdMatches("minimize-manual") || (Cmd != nullptr && strncmp(Cmd, "show", strlen("show")) != 0))
+ {
+ addArg('s',"simulate","APT::Mark::Simulate",0);
+ addArg('s',"just-print","APT::Mark::Simulate",0);
+ addArg('s',"recon","APT::Mark::Simulate",0);
+ addArg('s',"dry-run","APT::Mark::Simulate",0);
+ addArg('s',"no-act","APT::Mark::Simulate",0);
+ }
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
+
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPTSortPkgs(std::vector<CommandLine::Args> &Args, char const * const)/*{{{*/
+{
+ addArg('s',"source","APT::SortPkgs::Source",0);
+ return true;
+}
+ /*}}}*/
+static bool addArgumentsAPT(std::vector<CommandLine::Args> &Args, char const * const Cmd)/*{{{*/
+{
+ if (CmdMatches("list"))
+ {
+ addArg('i',"installed","APT::Cmd::Installed",0);
+ addArg(0,"upgradeable","APT::Cmd::Upgradable",0);
+ addArg('u',"upgradable","APT::Cmd::Upgradable",0);
+ addArg(0,"manual-installed","APT::Cmd::Manual-Installed",0);
+ addArg('v', "verbose", "APT::Cmd::List-Include-Summary", 0);
+ addArg('a', "all-versions", "APT::Cmd::All-Versions", 0);
+ }
+ else if (CmdMatches("show"))
+ {
+ addArg('a', "all-versions", "APT::Cache::AllVersions", 0);
+ }
+ else if (addArgumentsAPTGet(Args, Cmd) || addArgumentsAPTCache(Args, Cmd))
+ {
+ // we have no (supported) command-name overlaps so far, so we call
+ // specifics in order until we find one which adds arguments
+ }
+ else
+ return false;
+
+ addArg(0, "with-source", "APT::Sources::With::", CommandLine::HasArg);
+
+ return true;
+}
+ /*}}}*/
+std::vector<CommandLine::Args> getCommandArgs(APT_CMD const Program, char const * const Cmd)/*{{{*/
+{
+ std::vector<CommandLine::Args> Args;
+ Args.reserve(50);
+ if (Cmd != nullptr && strcmp(Cmd, "help") == 0)
+ ; // no options for help so no need to implement it in each
+ else
+ switch (Program)
+ {
+ case APT_CMD::APT: addArgumentsAPT(Args, Cmd); break;
+ case APT_CMD::APT_GET: addArgumentsAPTGet(Args, Cmd); break;
+ case APT_CMD::APT_CACHE: addArgumentsAPTCache(Args, Cmd); break;
+ case APT_CMD::APT_CDROM: addArgumentsAPTCDROM(Args, Cmd); break;
+ case APT_CMD::APT_CONFIG: addArgumentsAPTConfig(Args, Cmd); break;
+ case APT_CMD::APT_DUMP_SOLVER: addArgumentsAPTDumpSolver(Args, Cmd); break;
+ case APT_CMD::APT_EXTRACTTEMPLATES: addArgumentsAPTExtractTemplates(Args, Cmd); break;
+ case APT_CMD::APT_FTPARCHIVE: addArgumentsAPTFTPArchive(Args, Cmd); break;
+ case APT_CMD::APT_HELPER: addArgumentsAPTHelper(Args, Cmd); break;
+ case APT_CMD::APT_INTERNAL_PLANNER: addArgumentsAPTInternalPlanner(Args, Cmd); break;
+ case APT_CMD::APT_INTERNAL_SOLVER: addArgumentsAPTInternalSolver(Args, Cmd); break;
+ case APT_CMD::APT_MARK: addArgumentsAPTMark(Args, Cmd); break;
+ case APT_CMD::APT_SORTPKG: addArgumentsAPTSortPkgs(Args, Cmd); break;
+ }
+
+ // options without a command
+ addArg('h', "help", "help", 0);
+ addArg('v', "version", "version", 0);
+ // general options
+ addArg('q', "quiet", "quiet", CommandLine::IntLevel);
+ addArg('q', "silent", "quiet", CommandLine::IntLevel);
+ addArg('c', "config-file", 0, CommandLine::ConfigFile);
+ addArg('o', "option", 0, CommandLine::ArbItem);
+ addArg(0, NULL, NULL, 0);
+
+ return Args;
+}
+ /*}}}*/
+#undef addArg
+static void ShowHelpListCommands(std::vector<aptDispatchWithHelp> const &Cmds)/*{{{*/
+{
+ if (Cmds.empty() || Cmds[0].Match == nullptr)
+ return;
+ std::cout << std::endl << _("Most used commands:") << std::endl;
+ for (auto const &c: Cmds)
+ {
+ if (c.Help == nullptr)
+ continue;
+ std::cout << " " << c.Match << " - " << c.Help << std::endl;
+ }
+}
+ /*}}}*/
+static bool ShowCommonHelp(APT_CMD const Binary, CommandLine &CmdL, std::vector<aptDispatchWithHelp> const &Cmds,/*{{{*/
+ bool (*ShowHelp)(CommandLine &))
+{
+ std::cout << PACKAGE << " " << PACKAGE_VERSION << " (" << COMMON_ARCH << ")" << std::endl;
+ if (_config->FindB("version") == true && Binary != APT_CMD::APT_GET)
+ return true;
+ if (ShowHelp(CmdL) == false)
+ return false;
+ if (_config->FindB("version") == true || Binary == APT_CMD::APT_FTPARCHIVE)
+ return true;
+ ShowHelpListCommands(Cmds);
+ std::cout << std::endl;
+ char const * cmd = nullptr;
+ switch (Binary)
+ {
+ case APT_CMD::APT: cmd = "apt(8)"; break;
+ case APT_CMD::APT_CACHE: cmd = "apt-cache(8)"; break;
+ case APT_CMD::APT_CDROM: cmd = "apt-cdrom(8)"; break;
+ case APT_CMD::APT_CONFIG: cmd = "apt-config(8)"; break;
+ case APT_CMD::APT_DUMP_SOLVER: cmd = nullptr; break;
+ case APT_CMD::APT_EXTRACTTEMPLATES: cmd = "apt-extracttemplates(1)"; break;
+ case APT_CMD::APT_FTPARCHIVE: cmd = "apt-ftparchive(1)"; break;
+ case APT_CMD::APT_GET: cmd = "apt-get(8)"; break;
+ case APT_CMD::APT_HELPER: cmd = nullptr; break;
+ case APT_CMD::APT_INTERNAL_PLANNER: cmd = nullptr; break;
+ case APT_CMD::APT_INTERNAL_SOLVER: cmd = nullptr; break;
+ case APT_CMD::APT_MARK: cmd = "apt-mark(8)"; break;
+ case APT_CMD::APT_SORTPKG: cmd = "apt-sortpkgs(1)"; break;
+ }
+ if (cmd != nullptr)
+ ioprintf(std::cout, _("See %s for more information about the available commands."), cmd);
+ if (Binary != APT_CMD::APT_DUMP_SOLVER && Binary != APT_CMD::APT_INTERNAL_SOLVER &&
+ Binary != APT_CMD::APT_INTERNAL_PLANNER)
+ std::cout << std::endl <<
+ _("Configuration options and syntax is detailed in apt.conf(5).\n"
+ "Information about how to configure sources can be found in sources.list(5).\n"
+ "Package and version choices can be expressed via apt_preferences(5).\n"
+ "Security details are available in apt-secure(8).\n");
+ if (Binary == APT_CMD::APT_GET || Binary == APT_CMD::APT)
+ std::cout << std::right << std::setw(70) << _("This APT has Super Cow Powers.") << std::endl;
+ else if (Binary == APT_CMD::APT_HELPER || Binary == APT_CMD::APT_DUMP_SOLVER)
+ std::cout << std::right << std::setw(70) << _("This APT helper has Super Meep Powers.") << std::endl;
+ return true;
+}
+ /*}}}*/
+static void BinarySpecificConfiguration(char const * const Binary) /*{{{*/
+{
+ std::string const binary = flNotDir(Binary);
+ if (binary == "apt" || binary == "apt-config")
+ {
+ _config->CndSet("Binary::apt::APT::Color", true);
+ _config->CndSet("Binary::apt::APT::Cache::Show::Version", 2);
+ _config->CndSet("Binary::apt::APT::Cache::AllVersions", false);
+ _config->CndSet("Binary::apt::APT::Cache::ShowVirtuals", true);
+ _config->CndSet("Binary::apt::APT::Cache::Search::Version", 2);
+ _config->CndSet("Binary::apt::APT::Cache::ShowDependencyType", true);
+ _config->CndSet("Binary::apt::APT::Cache::ShowVersion", true);
+ _config->CndSet("Binary::apt::APT::Get::Upgrade-Allow-New", true);
+ _config->CndSet("Binary::apt::APT::Cmd::Show-Update-Stats", true);
+ _config->CndSet("Binary::apt::DPkg::Progress-Fancy", true);
+ _config->CndSet("Binary::apt::APT::Keep-Downloaded-Packages", false);
+ _config->CndSet("Binary::apt::APT::Get::Update::InteractiveReleaseInfoChanges", true);
+ }
+
+ _config->Set("Binary", binary);
+}
+ /*}}}*/
+static void BinaryCommandSpecificConfiguration(char const * const Binary, char const * const Cmd)/*{{{*/
+{
+ std::string const binary = flNotDir(Binary);
+ if ((binary == "apt" || binary == "apt-get") && CmdMatches("upgrade", "dist-upgrade", "full-upgrade"))
+ {
+ //FIXME: the option is documented to apply only for install/remove, so
+ // we force it false for configuration files where users can be confused if
+ // we support it anyhow, but allow it on the commandline to take effect
+ // even through it isn't documented as a user who doesn't want it wouldn't
+ // ask for it
+ _config->Set("Binary::apt-get::APT::Get::AutomaticRemove", false);
+ _config->Set("Binary::apt::APT::Get::AutomaticRemove", false);
+ }
+}
+#undef CmdMatches
+ /*}}}*/
+std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD const Binary,/*{{{*/
+ Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char *argv[],
+ bool (*ShowHelp)(CommandLine &), std::vector<aptDispatchWithHelp> (*GetCommands)(void))
+{
+ InitLocale(Binary);
+ if (Cnf != NULL && pkgInitConfig(**Cnf) == false)
+ {
+ _error->DumpErrors();
+ exit(100);
+ }
+
+ if (likely(argc != 0 && argv[0] != NULL))
+ BinarySpecificConfiguration(argv[0]);
+
+ std::vector<aptDispatchWithHelp> const CmdsWithHelp = GetCommands();
+ std::vector<CommandLine::Dispatch> Cmds;
+ if (CmdsWithHelp.empty() == false)
+ {
+ CommandLine::Dispatch const help = { "help", [](CommandLine &){return false;} };
+ Cmds.push_back(std::move(help));
+ }
+ for (auto const& cmd : CmdsWithHelp)
+ Cmds.push_back({cmd.Match, cmd.Handler});
+
+ char const * CmdCalled = nullptr;
+ if (Cmds.empty() == false && Cmds[0].Handler != nullptr)
+ CmdCalled = CommandLine::GetCommand(Cmds.data(), argc, argv);
+ if (CmdCalled != nullptr)
+ BinaryCommandSpecificConfiguration(argv[0], CmdCalled);
+ std::string const conf = "Binary::" + _config->Find("Binary");
+ _config->MoveSubTree(conf.c_str(), nullptr);
+
+ // Args running out of scope invalidates the pointer stored in CmdL,
+ // but we don't use the pointer after this function, so we ignore
+ // this problem for now and figure something out if we have to.
+ auto Args = getCommandArgs(Binary, CmdCalled);
+ CmdL = CommandLine(Args.data(), _config);
+
+ if (CmdL.Parse(argc,argv) == false ||
+ (Sys != NULL && pkgInitSystem(*_config, *Sys) == false))
+ {
+ if (_config->FindB("version") == true)
+ ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
+
+ _error->DumpErrors();
+ exit(100);
+ }
+
+ if (_config->FindB("APT::Get::Force-Yes", false) == true)
+ {
+ _error->Warning(_("--force-yes is deprecated, use one of the options starting with --allow instead."));
+ }
+
+ // See if the help should be shown
+ if (_config->FindB("help") == true || _config->FindB("version") == true ||
+ (CmdL.FileSize() > 0 && strcmp(CmdL.FileList[0], "help") == 0))
+ {
+ ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
+ exit(0);
+ }
+ if (Cmds.empty() == false && CmdL.FileSize() == 0)
+ {
+ ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
+ exit(1);
+ }
+ return Cmds;
+}
+ /*}}}*/
+unsigned short DispatchCommandLine(CommandLine &CmdL, std::vector<CommandLine::Dispatch> const &Cmds) /*{{{*/
+{
+ // Match the operation
+ bool const returned = Cmds.empty() ? true : CmdL.DispatchArg(Cmds.data());
+
+ // Print any errors or warnings found during parsing
+ bool const Errors = _error->PendingError();
+ if (_config->FindI("quiet",0) > 0)
+ _error->DumpErrors();
+ else
+ _error->DumpErrors(GlobalError::DEBUG);
+ if (returned == false)
+ return 100;
+ return Errors == true ? 100 : 0;
+}
+ /*}}}*/
diff --git a/apt-private/private-cmndline.h b/apt-private/private-cmndline.h
new file mode 100644
index 0000000..37fe2c9
--- /dev/null
+++ b/apt-private/private-cmndline.h
@@ -0,0 +1,41 @@
+#ifndef APT_PRIVATE_CMNDLINE_H
+#define APT_PRIVATE_CMNDLINE_H
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/macros.h>
+
+#include <vector>
+
+class Configuration;
+class pkgSystem;
+
+enum class APT_CMD {
+ APT,
+ APT_GET,
+ APT_CACHE,
+ APT_CDROM,
+ APT_CONFIG,
+ APT_EXTRACTTEMPLATES,
+ APT_FTPARCHIVE,
+ APT_HELPER,
+ APT_INTERNAL_SOLVER,
+ APT_MARK,
+ APT_SORTPKG,
+ APT_DUMP_SOLVER,
+ APT_INTERNAL_PLANNER,
+};
+struct aptDispatchWithHelp
+{
+ const char *Match;
+ bool (*Handler)(CommandLine &);
+ const char *Help;
+};
+
+APT_PUBLIC std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD const Binary,
+ Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char * argv[],
+ bool (*ShowHelp)(CommandLine &), std::vector<aptDispatchWithHelp> (*GetCommands)(void));
+APT_PUBLIC unsigned short DispatchCommandLine(CommandLine &CmdL, std::vector<CommandLine::Dispatch> const &Cmds);
+
+APT_PUBLIC std::vector<CommandLine::Args> getCommandArgs(APT_CMD const Program, char const * const Cmd);
+
+#endif
diff --git a/apt-private/private-depends.cc b/apt-private/private-depends.cc
new file mode 100644
index 0000000..79d66b7
--- /dev/null
+++ b/apt-private/private-depends.cc
@@ -0,0 +1,151 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-depends.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <stddef.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// ShowDepends - Helper for printing out a dependency tree /*{{{*/
+static bool ShowDepends(CommandLine &CmdL, bool const RevDepends)
+{
+ pkgCacheFile CacheFile;
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr || CacheFile.GetDepCache() == nullptr))
+ return false;
+
+ CacheSetHelperVirtuals helper(false);
+ APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, APT::CacheSetHelper::CANDIDATE, helper);
+ if (verset.empty() == true && helper.virtualPkgs.empty() == true)
+ return _error->Error(_("No packages found"));
+ std::vector<bool> Shown(Cache->Head().PackageCount);
+
+ bool const Recurse = _config->FindB("APT::Cache::RecurseDepends", false);
+ bool const Installed = _config->FindB("APT::Cache::Installed", false);
+ bool const Important = _config->FindB("APT::Cache::Important", false);
+ bool const ShowDepType = _config->FindB("APT::Cache::ShowDependencyType", RevDepends == false);
+ bool const ShowVersion = _config->FindB("APT::Cache::ShowVersion", false);
+ bool const ShowPreDepends = _config->FindB("APT::Cache::ShowPre-Depends", true);
+ bool const ShowDepends = _config->FindB("APT::Cache::ShowDepends", true);
+ bool const ShowRecommends = _config->FindB("APT::Cache::ShowRecommends", Important == false);
+ bool const ShowSuggests = _config->FindB("APT::Cache::ShowSuggests", Important == false);
+ bool const ShowReplaces = _config->FindB("APT::Cache::ShowReplaces", Important == false);
+ bool const ShowConflicts = _config->FindB("APT::Cache::ShowConflicts", Important == false);
+ bool const ShowBreaks = _config->FindB("APT::Cache::ShowBreaks", Important == false);
+ bool const ShowEnhances = _config->FindB("APT::Cache::ShowEnhances", Important == false);
+ bool const ShowOnlyFirstOr = _config->FindB("APT::Cache::ShowOnlyFirstOr", false);
+ bool const ShowImplicit = _config->FindB("APT::Cache::ShowImplicit", false);
+
+ while (verset.empty() != true)
+ {
+ pkgCache::VerIterator Ver = *verset.begin();
+ verset.erase(verset.begin());
+ pkgCache::PkgIterator Pkg = Ver.ParentPkg();
+ Shown[Pkg->ID] = true;
+
+ std::cout << Pkg.FullName(true) << std::endl;
+
+ if (RevDepends == true)
+ std::cout << "Reverse Depends:" << std::endl;
+ for (pkgCache::DepIterator D = RevDepends ? Pkg.RevDependsList() : Ver.DependsList();
+ D.end() == false; ++D)
+ {
+ switch (D->Type) {
+ case pkgCache::Dep::PreDepends: if (!ShowPreDepends) continue; break;
+ case pkgCache::Dep::Depends: if (!ShowDepends) continue; break;
+ case pkgCache::Dep::Recommends: if (!ShowRecommends) continue; break;
+ case pkgCache::Dep::Suggests: if (!ShowSuggests) continue; break;
+ case pkgCache::Dep::Replaces: if (!ShowReplaces) continue; break;
+ case pkgCache::Dep::Conflicts: if (!ShowConflicts) continue; break;
+ case pkgCache::Dep::DpkgBreaks: if (!ShowBreaks) continue; break;
+ case pkgCache::Dep::Enhances: if (!ShowEnhances) continue; break;
+ }
+ if (ShowImplicit == false && D.IsImplicit())
+ continue;
+
+ pkgCache::PkgIterator Trg = RevDepends ? D.ParentPkg() : D.TargetPkg();
+
+ if((Installed && Trg->CurrentVer != 0) || !Installed)
+ {
+
+ if ((D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or && ShowOnlyFirstOr == false)
+ std::cout << " |";
+ else
+ std::cout << " ";
+
+ // Show the package
+ if (ShowDepType == true)
+ std::cout << D.DepType() << ": ";
+ if (Trg->VersionList == 0)
+ std::cout << "<" << Trg.FullName(true) << ">";
+ else
+ std::cout << Trg.FullName(true);
+ if (ShowVersion == true && D->Version != 0)
+ std::cout << " (" << pkgCache::CompTypeDeb(D->CompareOp) << ' ' << D.TargetVer() << ')';
+ std::cout << std::endl;
+
+ if (Recurse == true && Shown[Trg->ID] == false)
+ {
+ Shown[Trg->ID] = true;
+ verset.insert(APT::VersionSet::FromPackage(CacheFile, Trg, APT::CacheSetHelper::CANDIDATE, helper));
+ }
+
+ }
+
+ // Display all solutions
+ std::unique_ptr<pkgCache::Version *[]> List(D.AllTargets());
+ pkgPrioSortList(*Cache,List.get());
+ for (pkgCache::Version **I = List.get(); *I != 0; I++)
+ {
+ pkgCache::VerIterator V(*Cache,*I);
+ if (V != Cache->VerP + V.ParentPkg()->VersionList ||
+ V->ParentPkg == D->Package)
+ continue;
+ std::cout << " " << V.ParentPkg().FullName(true) << std::endl;
+
+ if (Recurse == true && Shown[V.ParentPkg()->ID] == false)
+ {
+ Shown[V.ParentPkg()->ID] = true;
+ verset.insert(APT::VersionSet::FromPackage(CacheFile, V.ParentPkg(), APT::CacheSetHelper::CANDIDATE, helper));
+ }
+ }
+
+ if (ShowOnlyFirstOr == true)
+ while ((D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or) ++D;
+ }
+ }
+
+ for (APT::PackageSet::const_iterator Pkg = helper.virtualPkgs.begin();
+ Pkg != helper.virtualPkgs.end(); ++Pkg)
+ std::cout << '<' << Pkg.FullName(true) << '>' << std::endl;
+
+ return true;
+}
+ /*}}}*/
+// Depends - Print out a dependency tree /*{{{*/
+bool Depends(CommandLine &CmdL)
+{
+ return ShowDepends(CmdL, false);
+}
+ /*}}}*/
+// RDepends - Print out a reverse dependency tree /*{{{*/
+bool RDepends(CommandLine &CmdL)
+{
+ return ShowDepends(CmdL, true);
+}
+ /*}}}*/
diff --git a/apt-private/private-depends.h b/apt-private/private-depends.h
new file mode 100644
index 0000000..e9f703d
--- /dev/null
+++ b/apt-private/private-depends.h
@@ -0,0 +1,11 @@
+#ifndef APT_PRIVATE_DEPENDS_H
+#define APT_PRIVATE_DEPENDS_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool Depends(CommandLine &CmdL);
+APT_PUBLIC bool RDepends(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-download.cc b/apt-private/private-download.cc
new file mode 100644
index 0000000..2c12676
--- /dev/null
+++ b/apt-private/private-download.cc
@@ -0,0 +1,378 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/clean.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/acqprogress.h>
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-download.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-utils.h>
+
+#include <fstream>
+#include <string>
+#include <vector>
+
+#include <fcntl.h>
+#include <pwd.h>
+#include <sys/types.h>
+#include <unistd.h>
+#ifdef HAVE_VFS_H
+#include <sys/vfs.h>
+#else
+#ifdef HAVE_PARAMS_H
+#include <sys/params.h>
+#endif
+#include <sys/mount.h>
+#endif
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// CheckAuth - check if each download comes form a trusted source /*{{{*/
+bool CheckAuth(pkgAcquire& Fetcher, bool const PromptUser)
+{
+ std::vector<std::string> UntrustedList;
+ for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I < Fetcher.ItemsEnd(); ++I)
+ if (!(*I)->IsTrusted())
+ UntrustedList.push_back((*I)->ShortDesc());
+
+ if (UntrustedList.empty())
+ return true;
+
+ return AuthPrompt(UntrustedList, PromptUser);
+}
+ /*}}}*/
+bool AuthPrompt(std::vector<std::string> const &UntrustedList, bool const PromptUser)/*{{{*/
+{
+ ShowList(c2out,_("WARNING: The following packages cannot be authenticated!"), UntrustedList,
+ [](std::string const&) { return true; },
+ [](std::string const&str) { return str; },
+ [](std::string const&) { return ""; });
+
+ if (_config->FindB("APT::Get::AllowUnauthenticated",false) == true)
+ {
+ c2out << _("Authentication warning overridden.\n");
+ return true;
+ }
+
+ if (PromptUser == false)
+ return _error->Error(_("Some packages could not be authenticated"));
+
+ if (_config->FindI("quiet",0) < 2
+ && _config->FindB("APT::Get::Assume-Yes",false) == false)
+ {
+ if (!YnPrompt(_("Install these packages without verification?"), false))
+ return _error->Error(_("Some packages could not be authenticated"));
+
+ return true;
+ }
+ else if (_config->FindB("APT::Get::Force-Yes",false) == true) {
+ return true;
+ }
+
+ return _error->Error(_("There were unauthenticated packages and -y was used without --allow-unauthenticated"));
+}
+ /*}}}*/
+bool AcquireRun(pkgAcquire &Fetcher, int const PulseInterval, bool * const Failure, bool * const TransientNetworkFailure)/*{{{*/
+{
+ pkgAcquire::RunResult res;
+ if(PulseInterval > 0)
+ res = Fetcher.Run(PulseInterval);
+ else
+ res = Fetcher.Run();
+
+ if (res == pkgAcquire::Failed)
+ return false;
+
+ for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin();
+ I != Fetcher.ItemsEnd(); ++I)
+ {
+
+ if ((*I)->Status == pkgAcquire::Item::StatDone &&
+ (*I)->Complete == true)
+ continue;
+
+ if (TransientNetworkFailure != NULL && (*I)->Status == pkgAcquire::Item::StatIdle)
+ {
+ *TransientNetworkFailure = true;
+ continue;
+ }
+
+ ::URI uri((*I)->DescURI());
+ uri.User.clear();
+ uri.Password.clear();
+ std::string descUri = std::string(uri);
+ _error->Error(_("Failed to fetch %s %s"), descUri.c_str(),
+ (*I)->ErrorText.c_str());
+
+ if (Failure != NULL)
+ *Failure = true;
+ }
+
+ return true;
+}
+ /*}}}*/
+bool CheckFreeSpaceBeforeDownload(std::string const &Dir, unsigned long long FetchBytes)/*{{{*/
+{
+ uint32_t const RAMFS_MAGIC = 0x858458f6;
+ /* Check for enough free space, but only if we are actually going to
+ download */
+ if (_config->FindB("APT::Get::Print-URIs", false) == true ||
+ _config->FindB("APT::Get::Download", true) == false)
+ return true;
+
+ struct statvfs Buf;
+ if (statvfs(Dir.c_str(),&Buf) != 0) {
+ if (errno == EOVERFLOW)
+ return _error->WarningE("statvfs",_("Couldn't determine free space in %s"),
+ Dir.c_str());
+ else
+ return _error->Errno("statvfs",_("Couldn't determine free space in %s"),
+ Dir.c_str());
+ }
+ else
+ {
+ unsigned long long const FreeBlocks = _config->Find("APT::Sandbox::User").empty() ? Buf.f_bfree : Buf.f_bavail;
+ if (FreeBlocks < (FetchBytes / Buf.f_bsize))
+ {
+ struct statfs Stat;
+ if (statfs(Dir.c_str(),&Stat) != 0
+#ifdef HAVE_STRUCT_STATFS_F_TYPE
+ || Stat.f_type != RAMFS_MAGIC
+#endif
+ )
+ return _error->Error(_("You don't have enough free space in %s."),
+ Dir.c_str());
+ }
+ }
+ return true;
+}
+ /*}}}*/
+
+aptAcquireWithTextStatus::aptAcquireWithTextStatus() : pkgAcquire::pkgAcquire(),
+ Stat(std::cout, ScreenWidth, _config->FindI("quiet",0))
+{
+ SetLog(&Stat);
+}
+
+// DoDownload - download a binary /*{{{*/
+bool DoDownload(CommandLine &CmdL)
+{
+ CacheFile Cache;
+ if (Cache.ReadOnlyOpen() == false)
+ return false;
+
+ APT::CacheSetHelper helper;
+ APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache,
+ CmdL.FileList + 1, APT::CacheSetHelper::CANDIDATE, helper);
+
+ if (verset.empty() == true)
+ return false;
+
+ pkgRecords Recs(Cache);
+ pkgSourceList *SrcList = Cache.GetSourceList();
+
+ // reuse the usual acquire methods for deb files, but don't drop them into
+ // the usual directories - keep everything in the current directory
+ aptAcquireWithTextStatus Fetcher;
+ std::vector<std::string> storefile(verset.size());
+ std::string const cwd = SafeGetCWD();
+ _config->Set("Dir::Cache::Archives", cwd);
+ int i = 0;
+ for (APT::VersionSet::const_iterator Ver = verset.begin();
+ Ver != verset.end(); ++Ver, ++i)
+ {
+ pkgAcquire::Item *I = new pkgAcqArchive(&Fetcher, SrcList, &Recs, *Ver, storefile[i]);
+ if (storefile[i].empty())
+ continue;
+ std::string const filename = cwd + flNotDir(storefile[i]);
+ storefile[i].assign(filename);
+ I->DestFile.assign(filename);
+ }
+
+ // Just print out the uris and exit if the --print-uris flag was used
+ if (_config->FindB("APT::Get::Print-URIs") == true)
+ {
+ pkgAcquire::UriIterator I = Fetcher.UriBegin();
+ for (; I != Fetcher.UriEnd(); ++I)
+ std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
+ I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ return true;
+ }
+
+ if (_error->PendingError() == true || CheckAuth(Fetcher, false) == false)
+ return false;
+
+ bool Failed = false;
+ if (AcquireRun(Fetcher, 0, &Failed, NULL) == false)
+ return false;
+
+ // copy files in local sources to the current directory
+ for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I)
+ {
+ std::string const filename = cwd + flNotDir((*I)->DestFile);
+ if ((*I)->Local == true &&
+ filename != (*I)->DestFile &&
+ (*I)->Status == pkgAcquire::Item::StatDone &&
+ dynamic_cast<pkgAcqArchive*>(*I) != nullptr)
+ {
+ std::ifstream src((*I)->DestFile.c_str(), std::ios::binary);
+ std::ofstream dst(filename.c_str(), std::ios::binary);
+ dst << src.rdbuf();
+ chmod(filename.c_str(), 0644);
+ }
+ }
+ return Failed == false;
+}
+ /*}}}*/
+// DoChangelog - Get changelog from the command line /*{{{*/
+bool DoChangelog(CommandLine &CmdL)
+{
+ CacheFile Cache;
+ if (Cache.ReadOnlyOpen() == false)
+ return false;
+
+ APT::CacheSetHelper helper;
+ APT::VersionList verset = APT::VersionList::FromCommandLine(Cache,
+ CmdL.FileList + 1, APT::CacheSetHelper::CANDIDATE, helper);
+ if (verset.empty() == true)
+ return _error->Error(_("No packages found"));
+
+ bool const downOnly = _config->FindB("APT::Get::Download-Only", false);
+ bool const printOnly = _config->FindB("APT::Get::Print-URIs", false);
+ if (printOnly)
+ _config->CndSet("Acquire::Changelogs::AlwaysOnline", true);
+
+ aptAcquireWithTextStatus Fetcher;
+ for (APT::VersionList::const_iterator Ver = verset.begin();
+ Ver != verset.end();
+ ++Ver)
+ {
+ if (printOnly)
+ new pkgAcqChangelog(&Fetcher, Ver, "/dev/null");
+ else if (downOnly)
+ new pkgAcqChangelog(&Fetcher, Ver, ".");
+ else
+ new pkgAcqChangelog(&Fetcher, Ver);
+ }
+
+ if (printOnly == false)
+ {
+ bool Failed = false;
+ if (AcquireRun(Fetcher, 0, &Failed, NULL) == false || Failed == true)
+ return false;
+ }
+
+ if (downOnly == false || printOnly == true)
+ {
+ bool Failed = false;
+ for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I)
+ {
+ if (printOnly)
+ {
+ if ((*I)->ErrorText.empty() == false)
+ {
+ Failed = true;
+ _error->Error("%s", (*I)->ErrorText.c_str());
+ }
+ else
+ std::cout << '\'' << (*I)->DescURI() << "' " << flNotDir((*I)->DestFile) << std::endl;
+ }
+ else
+ DisplayFileInPager((*I)->DestFile);
+ }
+ return Failed == false;
+ }
+
+ return true;
+}
+ /*}}}*/
+
+// DoClean - Remove download archives /*{{{*/
+bool DoClean(CommandLine &)
+{
+ std::string const archivedir = _config->FindDir("Dir::Cache::archives");
+ std::string const listsdir = _config->FindDir("Dir::state::lists");
+
+ if (_config->FindB("APT::Get::Simulate") == true)
+ {
+ std::string const pkgcache = _config->FindFile("Dir::cache::pkgcache");
+ std::string const srcpkgcache = _config->FindFile("Dir::cache::srcpkgcache");
+ std::cout << "Del " << archivedir << "* " << archivedir << "partial/*"<< std::endl
+ << "Del " << listsdir << "partial/*" << std::endl
+ << "Del " << pkgcache << " " << srcpkgcache << std::endl;
+ return true;
+ }
+
+ pkgAcquire Fetcher;
+ if (archivedir.empty() == false && FileExists(archivedir) == true &&
+ Fetcher.GetLock(archivedir) == true)
+ {
+ Fetcher.Clean(archivedir);
+ Fetcher.Clean(archivedir + "partial/");
+ }
+
+ if (listsdir.empty() == false && FileExists(listsdir) == true &&
+ Fetcher.GetLock(listsdir) == true)
+ {
+ Fetcher.Clean(listsdir + "partial/");
+ }
+
+ pkgCacheFile::RemoveCaches();
+
+ return true;
+}
+ /*}}}*/
+// DoAutoClean - Smartly remove downloaded archives /*{{{*/
+// ---------------------------------------------------------------------
+/* This is similar to clean but it only purges things that cannot be
+ downloaded, that is old versions of cached packages. */
+ class LogCleaner : public pkgArchiveCleaner2
+{
+ protected:
+ virtual void Erase(int const dirfd, char const * const File, std::string const &Pkg, std::string const &Ver,struct stat const &St) APT_OVERRIDE
+ {
+ c1out << "Del " << Pkg << " " << Ver << " [" << SizeToStr(St.st_size) << "B]" << std::endl;
+
+ if (_config->FindB("APT::Get::Simulate") == false)
+ RemoveFileAt("Cleaner::Erase", dirfd, File);
+ };
+};
+bool DoAutoClean(CommandLine &)
+{
+ std::string const archivedir = _config->FindDir("Dir::Cache::Archives");
+ if (FileExists(archivedir) == false)
+ return true;
+
+ // Lock the archive directory
+ FileFd Lock;
+ if (_config->FindB("Debug::NoLocking",false) == false)
+ {
+ int lock_fd = GetLock(flCombine(archivedir, "lock"));
+ if (lock_fd < 0)
+ return _error->Error(_("Unable to lock the download directory"));
+ Lock.Fd(lock_fd);
+ }
+
+ CacheFile Cache;
+ if (Cache.Open(false) == false)
+ return false;
+
+ LogCleaner Cleaner;
+
+ return Cleaner.Go(archivedir, *Cache) &&
+ Cleaner.Go(flCombine(archivedir, "partial/"), *Cache);
+}
+ /*}}}*/
diff --git a/apt-private/private-download.h b/apt-private/private-download.h
new file mode 100644
index 0000000..d829e8b
--- /dev/null
+++ b/apt-private/private-download.h
@@ -0,0 +1,38 @@
+#ifndef APT_PRIVATE_DOWNLOAD_H
+#define APT_PRIVATE_DOWNLOAD_H
+
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/macros.h>
+
+#include <apt-private/acqprogress.h>
+
+#include <string>
+#include <vector>
+
+// Check if all files in the fetcher are authenticated
+bool CheckAuth(pkgAcquire& Fetcher, bool const PromptUser);
+
+// show a authentication warning prompt and return true if the system
+// should continue
+bool AuthPrompt(std::vector<std::string> const &UntrustedList, bool const PromptUser);
+
+APT_PUBLIC bool AcquireRun(pkgAcquire &Fetcher, int const PulseInterval, bool * const Failure, bool * const TransientNetworkFailure);
+
+bool CheckFreeSpaceBeforeDownload(std::string const &Dir, unsigned long long FetchBytes);
+
+class APT_PUBLIC aptAcquireWithTextStatus : public pkgAcquire
+{
+ AcqTextStatus Stat;
+public:
+ aptAcquireWithTextStatus();
+};
+
+class CommandLine;
+
+APT_PUBLIC bool DoDownload(CommandLine &CmdL);
+APT_PUBLIC bool DoChangelog(CommandLine &CmdL);
+
+APT_PUBLIC bool DoClean(CommandLine &CmdL);
+APT_PUBLIC bool DoAutoClean(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc
new file mode 100644
index 0000000..40543d9
--- /dev/null
+++ b/apt-private/private-install.cc
@@ -0,0 +1,1111 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/install-progress.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/prettyprinters.h>
+#include <apt-pkg/sptr.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/upgrade.h>
+
+#include <algorithm>
+#include <iostream>
+#include <map>
+#include <set>
+#include <vector>
+#include <stdlib.h>
+#include <string.h>
+
+#include <apt-private/acqprogress.h>
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-download.h>
+#include <apt-private/private-install.h>
+#include <apt-private/private-json-hooks.h>
+#include <apt-private/private-output.h>
+
+#include <apti18n.h>
+ /*}}}*/
+class pkgSourceList;
+
+bool CheckNothingBroken(CacheFile &Cache) /*{{{*/
+{
+ // Now we check the state of the packages,
+ if (Cache->BrokenCount() == 0)
+ return true;
+
+ // FIXME: if an external solver showed an error, we shouldn't show one here
+ if (_error->PendingError() && _config->Find("APT::Solver") == "dump")
+ return false;
+
+ c1out <<
+ _("Some packages could not be installed. This may mean that you have\n"
+ "requested an impossible situation or if you are using the unstable\n"
+ "distribution that some required packages have not yet been created\n"
+ "or been moved out of Incoming.") << std::endl;
+ /*
+ if (Packages == 1)
+ {
+ c1out << std::endl;
+ c1out <<
+ _("Since you only requested a single operation it is extremely likely that\n"
+ "the package is simply not installable and a bug report against\n"
+ "that package should be filed.") << std::endl;
+ }
+ */
+
+ c1out << _("The following information may help to resolve the situation:") << std::endl;
+ c1out << std::endl;
+ ShowBroken(c1out,Cache,false);
+ if (_error->PendingError() == true)
+ return false;
+ else
+ return _error->Error(_("Broken packages"));
+}
+ /*}}}*/
+// InstallPackages - Actually download and install the packages /*{{{*/
+// ---------------------------------------------------------------------
+/* This displays the informative messages describing what is going to
+ happen and then calls the download routines */
+static void RemoveDownloadNeedingItemsFromFetcher(pkgAcquire &Fetcher, bool &Transient)
+{
+ for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I < Fetcher.ItemsEnd();)
+ {
+ if ((*I)->Local == true)
+ {
+ ++I;
+ continue;
+ }
+
+ // Close the item and check if it was found in cache
+ (*I)->Finished();
+ if ((*I)->Complete == false)
+ Transient = true;
+
+ // Clear it out of the fetch list
+ delete *I;
+ I = Fetcher.ItemsBegin();
+ }
+}
+bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety)
+{
+ if (not RunScripts("APT::Install::Pre-Invoke"))
+ return false;
+ if (_config->FindB("APT::Get::Purge", false) == true)
+ for (pkgCache::PkgIterator I = Cache->PkgBegin(); I.end() == false; ++I)
+ if (Cache[I].Delete() == true && Cache[I].Purge() == false)
+ Cache->MarkDelete(I,true);
+
+ // Create the download object
+ auto const DownloadAllowed = _config->FindB("APT::Get::Download",true);
+ aptAcquireWithTextStatus Fetcher;
+ if (_config->FindB("APT::Get::Print-URIs", false) == true)
+ {
+ // force a hashsum for compatibility reasons
+ _config->CndSet("Acquire::ForceHash", "md5sum");
+ }
+ else if (_config->FindB("APT::Get::Simulate") == true)
+ ;
+ else if (Fetcher.GetLock(_config->FindDir("Dir::Cache::Archives")) == false)
+ return false;
+
+ // Read the source list
+ if (Cache.BuildSourceList() == false)
+ return false;
+ pkgSourceList * const List = Cache.GetSourceList();
+
+ // Create the text record parser
+ pkgRecords Recs(Cache);
+ if (_error->PendingError() == true)
+ return false;
+
+ // Create the package manager and prepare to download
+ std::unique_ptr<pkgPackageManager> PM(_system->CreatePM(Cache));
+ if (PM->GetArchives(&Fetcher,List,&Recs) == false ||
+ _error->PendingError() == true)
+ return false;
+
+ if (DownloadAllowed == false)
+ {
+ bool Missing = false;
+ RemoveDownloadNeedingItemsFromFetcher(Fetcher, Missing);
+ if (Missing)
+ {
+ if (_config->FindB("APT::Get::Fix-Missing",false))
+ PM->FixMissing();
+ else
+ return _error->Error(_("Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?"));
+ }
+ Fetcher.Shutdown();
+ if (_error->PendingError() == true)
+ return false;
+ }
+
+ // Show all the various warning indicators
+ ShowDel(c1out,Cache);
+ ShowNew(c1out,Cache);
+ if (ShwKept == true)
+ ShowKept(c1out,Cache);
+ bool const Hold = !ShowHold(c1out,Cache);
+ if (_config->FindB("APT::Get::Show-Upgraded",true) == true)
+ ShowUpgraded(c1out,Cache);
+ bool const Downgrade = !ShowDowngraded(c1out,Cache);
+
+ bool Essential = false;
+ if (_config->FindB("APT::Get::Download-Only",false) == false)
+ Essential = !ShowEssential(c1out,Cache);
+
+ Stats(c1out,Cache);
+
+ // Sanity check
+ if (Cache->BrokenCount() != 0)
+ {
+ ShowBroken(c1out,Cache,false);
+ return _error->Error(_("Internal error, InstallPackages was called with broken packages!"));
+ }
+
+ if (Cache->DelCount() == 0 && Cache->InstCount() == 0 &&
+ Cache->BadCount() == 0)
+ return RunScripts("APT::Install::Post-Invoke-Success");
+
+ // No remove flag
+ if (Cache->DelCount() != 0 && _config->FindB("APT::Get::Remove",true) == false)
+ return _error->Error(_("Packages need to be removed but remove is disabled."));
+
+ // Fail safe check
+ bool const Fail = (Essential || Downgrade || Hold);
+ if (_config->FindI("quiet",0) >= 2 ||
+ _config->FindB("APT::Get::Assume-Yes",false) == true)
+ {
+ if (Fail == true && _config->FindB("APT::Get::Force-Yes",false) == false) {
+ if (Essential == true && _config->FindB("APT::Get::allow-remove-essential", false) == false)
+ return _error->Error(_("Essential packages were removed and -y was used without --allow-remove-essential."));
+ if (Downgrade == true && _config->FindB("APT::Get::allow-downgrades", false) == false)
+ return _error->Error(_("Packages were downgraded and -y was used without --allow-downgrades."));
+ if (Hold == true && _config->FindB("APT::Get::allow-change-held-packages", false) == false)
+ return _error->Error(_("Held packages were changed and -y was used without --allow-change-held-packages."));
+ }
+ }
+
+ // Run the simulator ..
+ if (_config->FindB("APT::Get::Simulate") == true)
+ {
+ pkgSimulate PM(Cache);
+
+ APT::Progress::PackageManager *progress = APT::Progress::PackageManagerProgressFactory();
+ pkgPackageManager::OrderResult Res = PM.DoInstall(progress);
+ delete progress;
+
+ if (Res == pkgPackageManager::Failed)
+ return false;
+ if (Res != pkgPackageManager::Completed)
+ return _error->Error(_("Internal error, Ordering didn't finish"));
+ return true;
+ }
+
+ auto const FetchBytes = DownloadAllowed ? Fetcher.FetchNeeded() : 0;
+ auto const FetchPBytes = DownloadAllowed ? Fetcher.PartialPresent() : 0;
+ if (DownloadAllowed)
+ {
+ // Display statistics
+ auto const DebBytes = Fetcher.TotalNeeded();
+ if (DebBytes != Cache->DebSize())
+ {
+ c0out << "E: " << DebBytes << ',' << Cache->DebSize() << std::endl;
+ c0out << "E: " << _("How odd... The sizes didn't match, email apt@packages.debian.org") << std::endl;
+ }
+
+ // Number of bytes
+ if (DebBytes != FetchBytes)
+ //TRANSLATOR: The required space between number and unit is already included
+ // in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+ ioprintf(c1out,_("Need to get %sB/%sB of archives.\n"),
+ SizeToStr(FetchBytes).c_str(),SizeToStr(DebBytes).c_str());
+ else if (DebBytes != 0)
+ //TRANSLATOR: The required space between number and unit is already included
+ // in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+ ioprintf(c1out,_("Need to get %sB of archives.\n"),
+ SizeToStr(DebBytes).c_str());
+ }
+
+ // Size delta
+ if (Cache->UsrSize() >= 0)
+ //TRANSLATOR: The required space between number and unit is already included
+ // in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+ ioprintf(c1out,_("After this operation, %sB of additional disk space will be used.\n"),
+ SizeToStr(Cache->UsrSize()).c_str());
+ else
+ //TRANSLATOR: The required space between number and unit is already included
+ // in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+ ioprintf(c1out,_("After this operation, %sB disk space will be freed.\n"),
+ SizeToStr(-1*Cache->UsrSize()).c_str());
+
+ if (DownloadAllowed)
+ if (CheckFreeSpaceBeforeDownload(_config->FindDir("Dir::Cache::Archives"), (FetchBytes - FetchPBytes)) == false)
+ return false;
+
+ if (_error->PendingError() == true)
+ return false;
+
+ // Just print out the uris an exit if the --print-uris flag was used
+ if (_config->FindB("APT::Get::Print-URIs") == true)
+ {
+ pkgAcquire::UriIterator I = Fetcher.UriBegin();
+ for (; I != Fetcher.UriEnd(); ++I)
+ std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
+ return true;
+ }
+
+ if (Essential == true && Safety == true && _config->FindB("APT::Get::allow-remove-essential", false) == false)
+ {
+ if (_config->FindB("APT::Get::Trivial-Only",false) == true)
+ return _error->Error(_("Trivial Only specified but this is not a trivial operation."));
+
+ // TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+ // careful with hard to type or special characters (like non-breaking spaces)
+ const char *Prompt = _("Yes, do as I say!");
+ std::string question;
+ strprintf(question,
+ _("You are about to do something potentially harmful.\n"
+ "To continue type in the phrase '%s'\n"
+ " ?] "),Prompt);
+ if (AnalPrompt(question, Prompt) == false)
+ {
+ c2out << _("Abort.") << std::endl;
+ exit(1);
+ }
+ }
+ else
+ {
+ // Prompt to continue
+ if (Ask == true || Fail == true)
+ {
+ if (_config->FindB("APT::Get::Trivial-Only",false) == true)
+ return _error->Error(_("Trivial Only specified but this is not a trivial operation."));
+
+ if (_config->FindI("quiet",0) < 2 &&
+ _config->FindB("APT::Get::Assume-Yes",false) == false)
+ {
+ if (YnPrompt(_("Do you want to continue?")) == false)
+ {
+ c2out << _("Abort.") << std::endl;
+ exit(1);
+ }
+ }
+ }
+ }
+
+ if (!CheckAuth(Fetcher, true))
+ return false;
+
+ /* Unlock the dpkg lock if we are not going to be doing an install
+ after. */
+ if (_config->FindB("APT::Get::Download-Only",false) == true)
+ _system->UnLock();
+
+ // Run it
+ bool Failed = false;
+ while (1)
+ {
+ bool Transient = false;
+ if (AcquireRun(Fetcher, 0, &Failed, &Transient) == false)
+ return false;
+
+ if (_config->FindB("APT::Get::Download-Only",false) == true)
+ {
+ if (Failed == true && _config->FindB("APT::Get::Fix-Missing",false) == false)
+ return _error->Error(_("Some files failed to download"));
+ c1out << _("Download complete and in download only mode") << std::endl;
+ return true;
+ }
+
+ if (Failed == true && _config->FindB("APT::Get::Fix-Missing",false) == false)
+ return _error->Error(_("Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?"));
+
+ if (Transient == true && Failed == true)
+ return _error->Error(_("--fix-missing and media swapping is not currently supported"));
+
+ // Try to deal with missing package files
+ if (Failed == true && PM->FixMissing() == false)
+ {
+ c2out << _("Unable to correct missing packages.") << std::endl;
+ return _error->Error(_("Aborting install."));
+ }
+
+ auto const progress = APT::Progress::PackageManagerProgressFactory();
+ _system->UnLockInner();
+ pkgPackageManager::OrderResult const Res = PM->DoInstall(progress);
+ delete progress;
+
+ if (Res == pkgPackageManager::Failed || _error->PendingError() == true)
+ return false;
+ if (Res == pkgPackageManager::Completed)
+ break;
+
+ _system->LockInner();
+
+ // Reload the fetcher object and loop again for media swapping
+ Fetcher.Shutdown();
+ if (PM->GetArchives(&Fetcher,List,&Recs) == false)
+ return false;
+
+ Failed = false;
+ if (DownloadAllowed == false)
+ RemoveDownloadNeedingItemsFromFetcher(Fetcher, Failed);
+ }
+
+ std::set<std::string> const disappearedPkgs = PM->GetDisappearedPackages();
+ if (disappearedPkgs.empty() == false)
+ {
+ ShowList(c1out, P_("The following package disappeared from your system as\n"
+ "all files have been overwritten by other packages:",
+ "The following packages disappeared from your system as\n"
+ "all files have been overwritten by other packages:", disappearedPkgs.size()), disappearedPkgs,
+ [](std::string const &Pkg) { return Pkg.empty() == false; },
+ [](std::string const &Pkg) { return Pkg; },
+ [](std::string const &) { return std::string(); });
+ c0out << _("Note: This is done automatically and on purpose by dpkg.") << std::endl;
+ }
+
+ // cleanup downloaded debs
+ if (_config->FindB("APT::Keep-Downloaded-Packages", true) == false)
+ {
+ std::string const archivedir = _config->FindDir("Dir::Cache::archives");
+ for (auto I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I)
+ {
+ if (flNotFile((*I)->DestFile) != archivedir || (*I)->Local)
+ continue;
+ RemoveFile("Keep-Downloaded-Packages=false", (*I)->DestFile);
+ }
+ }
+
+ if (not RunScripts("APT::Install::Post-Invoke-Success"))
+ return false;
+
+ return true;
+}
+ /*}}}*/
+// DoAutomaticRemove - Remove all automatic unused packages /*{{{*/
+// ---------------------------------------------------------------------
+/* Remove unused automatic packages */
+bool DoAutomaticRemove(CacheFile &Cache)
+{
+ bool Debug = _config->FindB("Debug::pkgAutoRemove",false);
+ bool doAutoRemove = _config->FindB("APT::Get::AutomaticRemove", false);
+ bool hideAutoRemove = _config->FindB("APT::Get::HideAutoRemove");
+
+ pkgDepCache::ActionGroup group(*Cache);
+ if(Debug)
+ std::cout << "DoAutomaticRemove()" << std::endl;
+
+ if (doAutoRemove == true &&
+ _config->FindB("APT::Get::Remove",true) == false)
+ {
+ c1out << _("We are not supposed to delete stuff, can't start "
+ "AutoRemover") << std::endl;
+ return false;
+ }
+
+ bool purgePkgs = _config->FindB("APT::Get::Purge", false);
+ bool smallList = (hideAutoRemove == false &&
+ strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0);
+
+ unsigned long autoRemoveCount = 0;
+ APT::PackageSet tooMuch;
+ SortedPackageUniverse Universe(Cache);
+ // look over the cache to see what can be removed
+ for (auto const &Pkg: Universe)
+ {
+ if (Cache[Pkg].Garbage)
+ {
+ if(Pkg.CurrentVer() != 0 || Cache[Pkg].Install())
+ if(Debug)
+ std::cout << "We could delete " << APT::PrettyPkg(Cache, Pkg) << std::endl;
+
+ if (doAutoRemove)
+ {
+ if(Pkg.CurrentVer() != 0 &&
+ Pkg->CurrentState != pkgCache::State::ConfigFiles)
+ Cache->MarkDelete(Pkg, purgePkgs, 0, false);
+ else
+ Cache->MarkKeep(Pkg, false, false);
+ }
+ else
+ {
+ // if the package is a new install and already garbage we don't need to
+ // install it in the first place, so nuke it instead of show it
+ if (Cache[Pkg].Install() == true && Pkg.CurrentVer() == 0)
+ {
+ tooMuch.insert(Pkg);
+ Cache->MarkDelete(Pkg, false, 0, false);
+ }
+ // only show stuff in the list that is not yet marked for removal
+ else if(hideAutoRemove == false && Cache[Pkg].Delete() == false)
+ ++autoRemoveCount;
+ }
+ }
+ }
+
+ // we could have removed a new dependency of a garbage package,
+ // so check if a reverse depends is broken and if so install it again.
+ if (tooMuch.empty() == false && (Cache->BrokenCount() != 0 || Cache->PolicyBrokenCount() != 0))
+ {
+ bool Changed;
+ do {
+ Changed = false;
+ for (APT::PackageSet::iterator Pkg = tooMuch.begin();
+ Pkg != tooMuch.end(); ++Pkg)
+ {
+ APT::PackageSet too;
+ too.insert(*Pkg);
+ for (pkgCache::PrvIterator Prv = Cache[Pkg].CandidateVerIter(Cache).ProvidesList();
+ Prv.end() == false; ++Prv)
+ too.insert(Prv.ParentPkg());
+ for (APT::PackageSet::const_iterator P = too.begin(); P != too.end(); ++P)
+ {
+ for (pkgCache::DepIterator R = P.RevDependsList();
+ R.end() == false; ++R)
+ {
+ if (R.IsNegative() == true ||
+ Cache->IsImportantDep(R) == false)
+ continue;
+ auto const RV = R.ParentVer();
+ if (unlikely(RV.end() == true))
+ continue;
+ auto const RP = RV.ParentPkg();
+ // check if that dependency comes from an interesting version
+ if (RP.CurrentVer() == RV)
+ {
+ if ((*Cache)[RP].Keep() == false)
+ continue;
+ }
+ else if (Cache[RP].CandidateVerIter(Cache) == RV)
+ {
+ if ((*Cache)[RP].NewInstall() == false && (*Cache)[RP].Upgrade() == false)
+ continue;
+ }
+ else // ignore dependency from a non-candidate version
+ continue;
+ if (Debug == true)
+ std::clog << "Save " << APT::PrettyPkg(Cache, Pkg) << " as another installed package depends on it: " << APT::PrettyPkg(Cache, RP) << std::endl;
+ Cache->MarkInstall(Pkg, false, 0, false);
+ if (hideAutoRemove == false)
+ ++autoRemoveCount;
+ tooMuch.erase(Pkg);
+ Changed = true;
+ break;
+ }
+ if (Changed == true)
+ break;
+ }
+ if (Changed == true)
+ break;
+ }
+ } while (Changed == true);
+ }
+ // trigger marking now so that the package list below is correct
+ group.release();
+
+ // Now see if we had destroyed anything (if we had done anything)
+ if (Cache->BrokenCount() != 0)
+ {
+ c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n"
+ "shouldn't happen. Please file a bug report against apt.") << std::endl;
+ c1out << std::endl;
+ c1out << _("The following information may help to resolve the situation:") << std::endl;
+ c1out << std::endl;
+ ShowBroken(c1out,Cache,false);
+
+ return _error->Error(_("Internal Error, AutoRemover broke stuff"));
+ }
+
+ // if we don't remove them, we should show them!
+ if (doAutoRemove == false && autoRemoveCount != 0)
+ {
+ if (smallList == false)
+ {
+ SortedPackageUniverse Universe(Cache);
+ ShowList(c1out, P_("The following package was automatically installed and is no longer required:",
+ "The following packages were automatically installed and are no longer required:",
+ autoRemoveCount), Universe,
+ [&Cache](pkgCache::PkgIterator const &Pkg) { return (*Cache)[Pkg].Garbage == true && (*Cache)[Pkg].Delete() == false; },
+ &PrettyFullName, CandidateVersion(&Cache));
+ }
+ else
+ ioprintf(c1out, P_("%lu package was automatically installed and is no longer required.\n",
+ "%lu packages were automatically installed and are no longer required.\n", autoRemoveCount), autoRemoveCount);
+ std::string autocmd = "apt autoremove";
+ if (getenv("SUDO_USER") != nullptr)
+ {
+ auto const envsudocmd = getenv("SUDO_COMMAND");
+ auto const envshell = getenv("SHELL");
+ if (envsudocmd == nullptr || envshell == nullptr || strcmp(envsudocmd, envshell) != 0)
+ autocmd = "sudo " + autocmd;
+ }
+ ioprintf(c1out, P_("Use '%s' to remove it.", "Use '%s' to remove them.", autoRemoveCount), autocmd.c_str());
+ c1out << std::endl;
+ }
+ return true;
+}
+ /*}}}*/
+// DoCacheManipulationFromCommandLine /*{{{*/
+static const unsigned short MOD_REMOVE = 1;
+static const unsigned short MOD_INSTALL = 2;
+
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, CacheFile &Cache, int UpgradeMode)
+{
+ std::vector<PseudoPkg> VolatileCmdL;
+ return DoCacheManipulationFromCommandLine(CmdL, VolatileCmdL, Cache, UpgradeMode);
+}
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<PseudoPkg> &VolatileCmdL, CacheFile &Cache, int UpgradeMode)
+{
+ std::map<unsigned short, APT::VersionSet> verset;
+ std::set<std::string> UnknownPackages;
+ return DoCacheManipulationFromCommandLine(CmdL, VolatileCmdL, Cache, verset, UpgradeMode, UnknownPackages);
+}
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<PseudoPkg> &VolatileCmdL, CacheFile &Cache,
+ std::map<unsigned short, APT::VersionSet> &verset, int UpgradeMode, std::set<std::string> &UnknownPackages)
+{
+ // Enter the special broken fixing mode if the user specified arguments
+ bool BrokenFix = false;
+ if (Cache->BrokenCount() != 0)
+ BrokenFix = true;
+
+ std::unique_ptr<pkgProblemResolver> Fix(nullptr);
+ if (_config->FindB("APT::Get::CallResolver", true) == true)
+ Fix.reset(new pkgProblemResolver(Cache));
+
+ unsigned short fallback = MOD_INSTALL;
+ if (strcasecmp(CmdL.FileList[0], "reinstall") == 0)
+ _config->Set("APT::Get::ReInstall", "true");
+ else if (strcasecmp(CmdL.FileList[0],"remove") == 0)
+ fallback = MOD_REMOVE;
+ else if (strcasecmp(CmdL.FileList[0], "purge") == 0)
+ {
+ _config->Set("APT::Get::Purge", true);
+ fallback = MOD_REMOVE;
+ }
+ else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0 ||
+ strcasecmp(CmdL.FileList[0], "auto-remove") == 0)
+ {
+ _config->Set("APT::Get::AutomaticRemove", "true");
+ fallback = MOD_REMOVE;
+ }
+ else if (strcasecmp(CmdL.FileList[0], "autopurge") == 0)
+ {
+ _config->Set("APT::Get::AutomaticRemove", "true");
+ _config->Set("APT::Get::Purge", true);
+ fallback = MOD_REMOVE;
+ }
+
+ std::list<APT::VersionSet::Modifier> mods;
+ mods.push_back(APT::VersionSet::Modifier(MOD_INSTALL, "+",
+ APT::VersionSet::Modifier::POSTFIX, APT::CacheSetHelper::CANDIDATE));
+ mods.push_back(APT::VersionSet::Modifier(MOD_REMOVE, "-",
+ APT::VersionSet::Modifier::POSTFIX, APT::CacheSetHelper::NEWEST));
+ CacheSetHelperAPTGet helper(c0out);
+ verset = APT::VersionSet::GroupedFromCommandLine(Cache,
+ CmdL.FileList + 1, mods, fallback, helper);
+
+ for (auto const &I: VolatileCmdL)
+ {
+ pkgCache::PkgIterator const P = Cache->FindPkg(I.name);
+ if (P.end())
+ continue;
+
+ // Set any version providing the .deb as the candidate.
+ for (auto Prv = P.ProvidesList(); Prv.end() == false; Prv++)
+ {
+ if (I.release.empty())
+ Cache.GetDepCache()->SetCandidateVersion(Prv.OwnerVer());
+ else
+ Cache.GetDepCache()->SetCandidateRelease(Prv.OwnerVer(), I.release);
+ }
+
+ // via cacheset to have our usual virtual handling
+ APT::VersionContainerInterface::FromPackage(&(verset[MOD_INSTALL]), Cache, P, APT::CacheSetHelper::CANDIDATE, helper);
+ }
+
+ UnknownPackages = helper.notFound;
+
+ if (_error->PendingError() == true)
+ {
+ helper.showVirtualPackageErrors(Cache);
+ return false;
+ }
+
+
+ TryToInstall InstallAction(Cache, Fix.get(), BrokenFix);
+ TryToRemove RemoveAction(Cache, Fix.get());
+
+ // new scope for the ActionGroup
+ {
+ pkgDepCache::ActionGroup group(Cache);
+ unsigned short const order[] = { MOD_REMOVE, MOD_INSTALL, 0 };
+
+ for (unsigned short i = 0; order[i] != 0; ++i)
+ {
+ if (order[i] == MOD_INSTALL)
+ InstallAction = std::for_each(verset[MOD_INSTALL].begin(), verset[MOD_INSTALL].end(), InstallAction);
+ else if (order[i] == MOD_REMOVE)
+ RemoveAction = std::for_each(verset[MOD_REMOVE].begin(), verset[MOD_REMOVE].end(), RemoveAction);
+ }
+
+ if (Fix != NULL && _config->FindB("APT::Get::AutoSolving", true) == true)
+ {
+ InstallAction.propergateReleaseCandiateSwitching(helper.selectedByRelease, c0out);
+ InstallAction.doAutoInstall();
+ }
+
+ if (_error->PendingError() == true)
+ {
+ return false;
+ }
+
+ /* If we are in the Broken fixing mode we do not attempt to fix the
+ problems. This is if the user invoked install without -f and gave
+ packages */
+ if (BrokenFix == true && Cache->BrokenCount() != 0)
+ {
+ c1out << _("You might want to run 'apt --fix-broken install' to correct these.") << std::endl;
+ ShowBroken(c1out,Cache,false);
+ return _error->Error(_("Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution)."));
+ }
+
+ if (Fix != NULL)
+ {
+ // Call the scored problem resolver
+ OpTextProgress Progress(*_config);
+ bool const distUpgradeMode = strcmp(CmdL.FileList[0], "dist-upgrade") == 0 || strcmp(CmdL.FileList[0], "full-upgrade") == 0;
+
+ bool resolver_fail = false;
+ if (distUpgradeMode == true || UpgradeMode != APT::Upgrade::ALLOW_EVERYTHING)
+ resolver_fail = APT::Upgrade::Upgrade(Cache, UpgradeMode, &Progress);
+ else
+ resolver_fail = Fix->Resolve(true, &Progress);
+
+ if (resolver_fail == false && Cache->BrokenCount() == 0)
+ return false;
+ }
+
+ if (CheckNothingBroken(Cache) == false)
+ return false;
+ }
+ if (!DoAutomaticRemove(Cache))
+ return false;
+
+ // if nothing changed in the cache, but only the automark information
+ // we write the StateFile here, otherwise it will be written in
+ // cache.commit()
+ if (InstallAction.AutoMarkChanged > 0 &&
+ Cache->DelCount() == 0 && Cache->InstCount() == 0 &&
+ Cache->BadCount() == 0 &&
+ _config->FindB("APT::Get::Simulate",false) == false)
+ Cache->writeStateFile(NULL);
+
+ return true;
+}
+ /*}}}*/
+bool AddVolatileSourceFile(pkgSourceList *const SL, PseudoPkg &&pkg, std::vector<PseudoPkg> &VolatileCmdL)/*{{{*/
+{
+ auto const ext = flExtension(pkg.name);
+ if (ext != "dsc" && FileExists(pkg.name + "/debian/control") == false)
+ return false;
+ std::vector<std::string> files;
+ SL->AddVolatileFile(pkg.name, &files);
+ for (auto &&f: files)
+ VolatileCmdL.emplace_back(std::move(f), pkg.arch, pkg.release, pkg.index);
+ return true;
+
+}
+ /*}}}*/
+bool AddVolatileBinaryFile(pkgSourceList *const SL, PseudoPkg &&pkg, std::vector<PseudoPkg> &VolatileCmdL)/*{{{*/
+{
+ auto const ext = flExtension(pkg.name);
+ if (ext != "deb" && ext != "ddeb" && ext != "changes")
+ return false;
+ std::vector<std::string> files;
+ SL->AddVolatileFile(pkg.name, &files);
+ for (auto &&f: files)
+ VolatileCmdL.emplace_back(std::move(f), pkg.arch, pkg.release, pkg.index);
+ return true;
+}
+ /*}}}*/
+static bool AddIfVolatile(pkgSourceList *const SL, std::vector<PseudoPkg> &VolatileCmdL, bool (*Add)(pkgSourceList *const, PseudoPkg &&, std::vector<PseudoPkg> &), char const * const I, std::string const &pseudoArch)/*{{{*/
+{
+ if (I != nullptr && (I[0] == '/' || (I[0] == '.' && (I[1] == '\0' || (I[1] == '.' && (I[2] == '\0' || I[2] == '/')) || I[1] == '/'))))
+ {
+ PseudoPkg pkg(I, pseudoArch, "", SL->GetVolatileFiles().size());
+ if (FileExists(I)) // this accepts directories and symlinks, too
+ {
+ if (Add(SL, std::move(pkg), VolatileCmdL))
+ ;
+ else
+ _error->Error(_("Unsupported file %s given on commandline"), I);
+ return true;
+ }
+ else
+ {
+ auto const found = pkg.name.rfind("/");
+ if (found == pkg.name.find("/"))
+ _error->Error(_("Unsupported file %s given on commandline"), I);
+ else
+ {
+ pkg.release = pkg.name.substr(found + 1);
+ pkg.name.erase(found);
+ if (Add(SL, std::move(pkg), VolatileCmdL))
+ ;
+ else
+ _error->Error(_("Unsupported file %s given on commandline"), I);
+ }
+ return true;
+ }
+ }
+ return false;
+}
+ /*}}}*/
+std::vector<PseudoPkg> GetAllPackagesAsPseudo(pkgSourceList *const SL, CommandLine &CmdL, bool (*Add)(pkgSourceList *const, PseudoPkg &&, std::vector<PseudoPkg> &), std::string const &pseudoArch)/*{{{*/
+{
+ std::vector<PseudoPkg> PkgCmdL;
+ std::for_each(CmdL.FileList + 1, CmdL.FileList + CmdL.FileSize(), [&](char const *const I) {
+ if (AddIfVolatile(SL, PkgCmdL, Add, I, pseudoArch) == false)
+ PkgCmdL.emplace_back(I, pseudoArch, "", -1);
+ });
+ return PkgCmdL;
+}
+ /*}}}*/
+std::vector<PseudoPkg> GetPseudoPackages(pkgSourceList *const SL, CommandLine &CmdL, bool (*Add)(pkgSourceList *const, PseudoPkg &&, std::vector<PseudoPkg> &), std::string const &pseudoArch)/*{{{*/
+{
+ std::vector<PseudoPkg> VolatileCmdL;
+ std::remove_if(CmdL.FileList + 1, CmdL.FileList + 1 + CmdL.FileSize(), [&](char const *const I) {
+ return AddIfVolatile(SL, VolatileCmdL, Add, I, pseudoArch);
+ });
+ return VolatileCmdL;
+}
+ /*}}}*/
+// DoInstall - Install packages from the command line /*{{{*/
+// ---------------------------------------------------------------------
+/* Install named packages */
+struct PkgIsExtraInstalled {
+ pkgCacheFile * const Cache;
+ APT::VersionSet const * const verset;
+ PkgIsExtraInstalled(pkgCacheFile * const Cache, APT::VersionSet const * const Container) : Cache(Cache), verset(Container) {}
+ bool operator() (pkgCache::PkgIterator const &Pkg)
+ {
+ if ((*Cache)[Pkg].Install() == false)
+ return false;
+ pkgCache::VerIterator const Cand = (*Cache)[Pkg].CandidateVerIter(*Cache);
+ return verset->find(Cand) == verset->end();
+ }
+};
+bool DoInstall(CommandLine &CmdL)
+{
+ CacheFile Cache;
+ auto VolatileCmdL = GetPseudoPackages(Cache.GetSourceList(), CmdL, AddVolatileBinaryFile, "");
+
+ // then open the cache
+ if (Cache.OpenForInstall() == false ||
+ Cache.CheckDeps(CmdL.FileSize() != 1) == false)
+ return false;
+
+ std::map<unsigned short, APT::VersionSet> verset;
+ std::set<std::string> UnknownPackages;
+
+ if (!DoCacheManipulationFromCommandLine(CmdL, VolatileCmdL, Cache, verset, 0, UnknownPackages))
+ {
+ RunJsonHook("AptCli::Hooks::Install", "org.debian.apt.hooks.install.fail", CmdL.FileList, Cache, UnknownPackages);
+ return false;
+ }
+
+ /* Print out a list of packages that are going to be installed extra
+ to what the user asked */
+ SortedPackageUniverse Universe(Cache);
+ if (Cache->InstCount() != verset[MOD_INSTALL].size())
+ ShowList(c1out, _("The following additional packages will be installed:"), Universe,
+ PkgIsExtraInstalled(&Cache, &verset[MOD_INSTALL]),
+ &PrettyFullName, CandidateVersion(&Cache));
+
+ /* Print out a list of suggested and recommended packages */
+ {
+ std::list<std::string> Recommends, Suggests, SingleRecommends, SingleSuggests;
+ for (auto const &Pkg: Universe)
+ {
+ /* Just look at the ones we want to install */
+ if ((*Cache)[Pkg].Install() == false)
+ continue;
+
+ // get the recommends/suggests for the candidate ver
+ pkgCache::VerIterator CV = (*Cache)[Pkg].CandidateVerIter(*Cache);
+ for (pkgCache::DepIterator D = CV.DependsList(); D.end() == false; )
+ {
+ pkgCache::DepIterator Start;
+ pkgCache::DepIterator End;
+ D.GlobOr(Start,End); // advances D
+ if (Start->Type != pkgCache::Dep::Recommends && Start->Type != pkgCache::Dep::Suggests)
+ continue;
+
+ {
+ // Skip if we already saw this
+ std::string target;
+ for (pkgCache::DepIterator I = Start; I != D; ++I)
+ {
+ if (target.empty() == false)
+ target.append(" | ");
+ target.append(I.TargetPkg().FullName(true));
+ }
+ std::list<std::string> &Type = Start->Type == pkgCache::Dep::Recommends ? SingleRecommends : SingleSuggests;
+ if (std::find(Type.begin(), Type.end(), target) != Type.end())
+ continue;
+ Type.push_back(target);
+ }
+
+ std::list<std::string> OrList;
+ bool foundInstalledInOrGroup = false;
+ for (pkgCache::DepIterator I = Start; I != D; ++I)
+ {
+ {
+ // satisfying package is installed and not marked for deletion
+ APT::VersionList installed = APT::VersionList::FromDependency(Cache, I, APT::CacheSetHelper::INSTALLED);
+ if (std::find_if(installed.begin(), installed.end(),
+ [&Cache](pkgCache::VerIterator const &Ver) { return Cache[Ver.ParentPkg()].Delete() == false; }) != installed.end())
+ {
+ foundInstalledInOrGroup = true;
+ break;
+ }
+ }
+
+ {
+ // satisfying package is upgraded to/new install
+ APT::VersionList upgrades = APT::VersionList::FromDependency(Cache, I, APT::CacheSetHelper::CANDIDATE);
+ if (std::find_if(upgrades.begin(), upgrades.end(),
+ [&Cache](pkgCache::VerIterator const &Ver) { return Cache[Ver.ParentPkg()].Upgrade(); }) != upgrades.end())
+ {
+ foundInstalledInOrGroup = true;
+ break;
+ }
+ }
+
+ if (OrList.empty())
+ OrList.push_back(I.TargetPkg().FullName(true));
+ else
+ OrList.push_back("| " + I.TargetPkg().FullName(true));
+ }
+
+ if(foundInstalledInOrGroup == false)
+ {
+ std::list<std::string> &Type = Start->Type == pkgCache::Dep::Recommends ? Recommends : Suggests;
+ std::move(OrList.begin(), OrList.end(), std::back_inserter(Type));
+ }
+ }
+ }
+ auto always_true = [](std::string const&) { return true; };
+ auto string_ident = [](std::string const&str) { return str; };
+ auto verbose_show_candidate =
+ [&Cache](std::string str)
+ {
+ if (APT::String::Startswith(str, "| "))
+ str.erase(0, 2);
+ pkgCache::PkgIterator const Pkg = Cache->FindPkg(str);
+ if (Pkg.end() == true)
+ return "";
+ return (*Cache)[Pkg].CandVersion;
+ };
+ ShowList(c1out,_("Suggested packages:"), Suggests,
+ always_true, string_ident, verbose_show_candidate);
+ ShowList(c1out,_("Recommended packages:"), Recommends,
+ always_true, string_ident, verbose_show_candidate);
+ }
+
+ RunJsonHook("AptCli::Hooks::Install", "org.debian.apt.hooks.install.pre-prompt", CmdL.FileList, Cache);
+
+ bool result;
+ // See if we need to prompt
+ // FIXME: check if really the packages in the set are going to be installed
+ if (Cache->InstCount() == verset[MOD_INSTALL].size() && Cache->DelCount() == 0)
+ result = InstallPackages(Cache, false, false);
+ else
+ result = InstallPackages(Cache, false);
+
+ if (result)
+ result = RunJsonHook("AptCli::Hooks::Install", "org.debian.apt.hooks.install.post", CmdL.FileList, Cache);
+ else
+ /* not a result */ RunJsonHook("AptCli::Hooks::Install", "org.debian.apt.hooks.install.fail", CmdL.FileList, Cache);
+
+ return result;
+}
+ /*}}}*/
+
+// TryToInstall - Mark a package for installation /*{{{*/
+void TryToInstall::operator() (pkgCache::VerIterator const &Ver) {
+ if (unlikely(Ver.end()))
+ {
+ _error->Fatal("The given version to TryToInstall is invalid!");
+ return;
+ }
+ pkgCache::PkgIterator Pkg = Ver.ParentPkg();
+ if (unlikely(Pkg.end()))
+ {
+ _error->Fatal("The given version to TryToInstall has an invalid parent package!");
+ return;
+ }
+
+ Cache->GetDepCache()->SetCandidateVersion(Ver);
+ pkgDepCache::StateCache &State = (*Cache)[Pkg];
+
+ // Handle the no-upgrade case
+ if (_config->FindB("APT::Get::upgrade",true) == false && Pkg->CurrentVer != 0)
+ ioprintf(c1out,_("Skipping %s, it is already installed and upgrade is not set.\n"),
+ Pkg.FullName(true).c_str());
+ // Ignore request for install if package would be new
+ else if (_config->FindB("APT::Get::Only-Upgrade", false) == true && Pkg->CurrentVer == 0)
+ ioprintf(c1out,_("Skipping %s, it is not installed and only upgrades are requested.\n"),
+ Pkg.FullName(true).c_str());
+ else {
+ if (Fix != NULL) {
+ Fix->Clear(Pkg);
+ Fix->Protect(Pkg);
+ }
+ Cache->GetDepCache()->MarkInstall(Pkg,false);
+
+ if (State.Install() == false) {
+ if (_config->FindB("APT::Get::ReInstall",false) == true) {
+ if (Pkg->CurrentVer == 0 || Pkg.CurrentVer().Downloadable() == false)
+ ioprintf(c1out,_("Reinstallation of %s is not possible, it cannot be downloaded.\n"),
+ Pkg.FullName(true).c_str());
+ else
+ Cache->GetDepCache()->SetReInstall(Pkg, true);
+ } else
+ // TRANSLATORS: First string is package name, second is version
+ ioprintf(c1out,_("%s is already the newest version (%s).\n"),
+ Pkg.FullName(true).c_str(), Pkg.CurrentVer().VerStr());
+ }
+
+ // Install it with autoinstalling enabled (if we not respect the minial
+ // required deps or the policy)
+ if (FixBroken == false)
+ doAutoInstallLater.insert(Pkg);
+ }
+
+ // see if we need to fix the auto-mark flag
+ // e.g. apt-get install foo
+ // where foo is marked automatic
+ if (State.Install() == false &&
+ (State.Flags & pkgCache::Flag::Auto) &&
+ _config->FindB("APT::Get::ReInstall",false) == false &&
+ _config->FindB("APT::Get::Only-Upgrade",false) == false &&
+ _config->FindB("APT::Get::Download-Only",false) == false)
+ {
+ ioprintf(c1out,_("%s set to manually installed.\n"),
+ Pkg.FullName(true).c_str());
+ Cache->GetDepCache()->MarkAuto(Pkg,false);
+ AutoMarkChanged++;
+ }
+}
+ /*}}}*/
+bool TryToInstall::propergateReleaseCandiateSwitching(std::list<std::pair<pkgCache::VerIterator, std::string> > const &start, std::ostream &out)/*{{{*/
+{
+ for (std::list<std::pair<pkgCache::VerIterator, std::string> >::const_iterator s = start.begin();
+ s != start.end(); ++s)
+ Cache->GetDepCache()->SetCandidateVersion(s->first);
+
+ bool Success = true;
+ // the Changed list contains:
+ // first: "new version"
+ // second: "what-caused the change"
+ std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > Changed;
+ for (std::list<std::pair<pkgCache::VerIterator, std::string> >::const_iterator s = start.begin();
+ s != start.end(); ++s)
+ {
+ Changed.push_back(std::make_pair(s->first, pkgCache::VerIterator(*Cache)));
+ // We continue here even if it failed to enhance the ShowBroken output
+ Success &= Cache->GetDepCache()->SetCandidateRelease(s->first, s->second, Changed);
+ }
+ for (std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> >::const_iterator c = Changed.begin();
+ c != Changed.end(); ++c)
+ {
+ if (c->second.end() == true)
+ {
+ auto const pkgname = c->first.ParentPkg().FullName(true);
+ if (APT::String::Startswith(pkgname, "builddeps:"))
+ continue;
+ ioprintf(out, _("Selected version '%s' (%s) for '%s'\n"),
+ c->first.VerStr(), c->first.RelStr().c_str(), pkgname.c_str());
+ }
+ else if (c->first.ParentPkg()->Group != c->second.ParentPkg()->Group)
+ {
+ auto pkgname = c->second.ParentPkg().FullName(true);
+ if (APT::String::Startswith(pkgname, "builddeps:"))
+ pkgname.replace(0, strlen("builddeps"), "src");
+ pkgCache::VerIterator V = (*Cache)[c->first.ParentPkg()].CandidateVerIter(*Cache);
+ ioprintf(out, _("Selected version '%s' (%s) for '%s' because of '%s'\n"), V.VerStr(),
+ V.RelStr().c_str(), V.ParentPkg().FullName(true).c_str(), pkgname.c_str());
+ }
+ }
+ return Success;
+}
+ /*}}}*/
+void TryToInstall::doAutoInstall() { /*{{{*/
+ for (APT::PackageSet::const_iterator P = doAutoInstallLater.begin();
+ P != doAutoInstallLater.end(); ++P) {
+ pkgDepCache::StateCache &State = (*Cache)[P];
+ if (State.InstBroken() == false && State.InstPolicyBroken() == false)
+ continue;
+ Cache->GetDepCache()->MarkInstall(P, true);
+ }
+ doAutoInstallLater.clear();
+}
+ /*}}}*/
+// TryToRemove - Mark a package for removal /*{{{*/
+void TryToRemove::operator() (pkgCache::VerIterator const &Ver)
+{
+ pkgCache::PkgIterator Pkg = Ver.ParentPkg();
+
+ if (Fix != NULL)
+ {
+ Fix->Clear(Pkg);
+ Fix->Protect(Pkg);
+ Fix->Remove(Pkg);
+ }
+
+ if ((Pkg->CurrentVer == 0 && PurgePkgs == false) ||
+ (PurgePkgs == true && Pkg->CurrentState == pkgCache::State::NotInstalled))
+ {
+ pkgCache::GrpIterator Grp = Pkg.Group();
+ pkgCache::PkgIterator P = Grp.PackageList();
+ for (; P.end() != true; P = Grp.NextPkg(P))
+ {
+ if (P == Pkg)
+ continue;
+ if (P->CurrentVer != 0 || (PurgePkgs == true && P->CurrentState != pkgCache::State::NotInstalled))
+ {
+ // TRANSLATORS: Note, this is not an interactive question
+ ioprintf(c1out,_("Package '%s' is not installed, so not removed. Did you mean '%s'?\n"),
+ Pkg.FullName(true).c_str(), P.FullName(true).c_str());
+ break;
+ }
+ }
+ if (P.end() == true)
+ ioprintf(c1out,_("Package '%s' is not installed, so not removed\n"),Pkg.FullName(true).c_str());
+
+ // MarkInstall refuses to install packages on hold
+ Pkg->SelectedState = pkgCache::State::Hold;
+ }
+ else
+ Cache->GetDepCache()->MarkDelete(Pkg, PurgePkgs);
+}
+ /*}}}*/
diff --git a/apt-private/private-install.h b/apt-private/private-install.h
new file mode 100644
index 0000000..39a040e
--- /dev/null
+++ b/apt-private/private-install.h
@@ -0,0 +1,75 @@
+#ifndef APT_PRIVATE_INSTALL_H
+#define APT_PRIVATE_INSTALL_H
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <list>
+#include <string>
+#include <utility>
+
+class CacheFile;
+class CommandLine;
+class pkgProblemResolver;
+
+APT_PUBLIC bool DoInstall(CommandLine &Cmd);
+
+struct PseudoPkg
+{
+ std::string name;
+ std::string arch;
+ std::string release;
+ ssize_t index;
+ PseudoPkg(std::string const &n, std::string const &a, std::string const &r) : name(n), arch(a), release(r), index(-1) {}
+ PseudoPkg(std::string const &n, std::string const &a, std::string const &r, ssize_t i) : name(n), arch(a), release(r), index(i) {}
+};
+std::vector<PseudoPkg> GetAllPackagesAsPseudo(pkgSourceList *const SL, CommandLine &CmdL, bool (*Add)(pkgSourceList *const, PseudoPkg &&, std::vector<PseudoPkg> &), std::string const &pseudoArch);
+std::vector<PseudoPkg> GetPseudoPackages(pkgSourceList *const SL, CommandLine &CmdL, bool (*Add)(pkgSourceList *const, PseudoPkg &&, std::vector<PseudoPkg> &), std::string const &pseudoArch);
+bool AddVolatileBinaryFile(pkgSourceList *const SL, PseudoPkg &&pkg, std::vector<PseudoPkg> &VolatileCmdL);
+bool AddVolatileSourceFile(pkgSourceList *const SL, PseudoPkg &&pkg, std::vector<PseudoPkg> &VolatileCmdL);
+
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<PseudoPkg> &VolatileCmdL, CacheFile &Cache,
+ std::map<unsigned short, APT::VersionSet> &verset, int UpgradeMode, std::set<std::string> &UnknownPackages);
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<PseudoPkg> &VolatileCmdL, CacheFile &Cache, int UpgradeMode);
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, CacheFile &Cache, int UpgradeMode);
+
+APT_PUBLIC bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true,
+ bool Safety = true);
+
+bool CheckNothingBroken(CacheFile &Cache);
+bool DoAutomaticRemove(CacheFile &Cache);
+
+// TryToInstall - Mark a package for installation /*{{{*/
+struct TryToInstall {
+ pkgCacheFile* Cache;
+ pkgProblemResolver* Fix;
+ bool FixBroken;
+ unsigned long AutoMarkChanged;
+ APT::PackageSet doAutoInstallLater;
+
+ TryToInstall(pkgCacheFile &Cache, pkgProblemResolver *PM, bool const FixBroken) : Cache(&Cache), Fix(PM),
+ FixBroken(FixBroken), AutoMarkChanged(0) {};
+
+ void operator() (pkgCache::VerIterator const &Ver);
+ bool propergateReleaseCandiateSwitching(std::list<std::pair<pkgCache::VerIterator, std::string> > const &start, std::ostream &out);
+ void doAutoInstall();
+};
+ /*}}}*/
+// TryToRemove - Mark a package for removal /*{{{*/
+struct TryToRemove {
+ pkgCacheFile* Cache;
+ pkgProblemResolver* Fix;
+ bool PurgePkgs;
+
+ TryToRemove(pkgCacheFile &Cache, pkgProblemResolver *PM) : Cache(&Cache), Fix(PM),
+ PurgePkgs(_config->FindB("APT::Get::Purge", false)) {};
+
+ void operator() (pkgCache::VerIterator const &Ver);
+};
+ /*}}}*/
+
+
+#endif
diff --git a/apt-private/private-json-hooks.cc b/apt-private/private-json-hooks.cc
new file mode 100644
index 0000000..65ff879
--- /dev/null
+++ b/apt-private/private-json-hooks.cc
@@ -0,0 +1,431 @@
+/*
+ * private-json-hooks.cc - 2nd generation, JSON-RPC, hooks for APT
+ *
+ * Copyright (c) 2018 Canonical Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <apt-pkg/debsystem.h>
+#include <apt-pkg/macros.h>
+#include <apt-private/private-json-hooks.h>
+
+#include <ostream>
+#include <sstream>
+#include <stack>
+
+#include <signal.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+
+/**
+ * @brief Simple JSON writer
+ *
+ * This performs no error checking, or string escaping, be careful.
+ */
+class APT_HIDDEN JsonWriter
+{
+ std::ostream &os;
+ std::locale old_locale;
+
+ enum write_state
+ {
+ empty,
+ in_array_first_element,
+ in_array,
+ in_object_first_key,
+ in_object_key,
+ in_object_val
+ } state = empty;
+
+ std::stack<write_state> old_states;
+
+ void maybeComma()
+ {
+ switch (state)
+ {
+ case empty:
+ break;
+ case in_object_val:
+ state = in_object_key;
+ break;
+ case in_object_key:
+ state = in_object_val;
+ os << ',';
+ break;
+ case in_array:
+ os << ',';
+ break;
+ case in_array_first_element:
+ state = in_array;
+ break;
+ case in_object_first_key:
+ state = in_object_val;
+ break;
+ default:
+ abort();
+ }
+ }
+
+ void pushState(write_state state)
+ {
+ old_states.push(this->state);
+ this->state = state;
+ }
+
+ void popState()
+ {
+ this->state = old_states.top();
+ }
+
+ public:
+ JsonWriter(std::ostream &os) : os(os) { old_locale = os.imbue(std::locale::classic()); }
+ ~JsonWriter() { os.imbue(old_locale); }
+ JsonWriter &beginArray()
+ {
+ maybeComma();
+ pushState(in_array_first_element);
+ os << '[';
+ return *this;
+ }
+ JsonWriter &endArray()
+ {
+ popState();
+ os << ']';
+ return *this;
+ }
+ JsonWriter &beginObject()
+ {
+ maybeComma();
+ pushState(in_object_first_key);
+ os << '{';
+ return *this;
+ }
+ JsonWriter &endObject()
+ {
+ popState();
+ os << '}';
+ return *this;
+ }
+ JsonWriter &name(std::string const &name)
+ {
+ maybeComma();
+ os << '"' << name << '"' << ':';
+ return *this;
+ }
+ JsonWriter &value(std::string const &value)
+ {
+ maybeComma();
+ os << '"' << value << '"';
+ return *this;
+ }
+ JsonWriter &value(const char *value)
+ {
+ maybeComma();
+ os << '"' << value << '"';
+ return *this;
+ }
+ JsonWriter &value(int value)
+ {
+ maybeComma();
+ os << value;
+ return *this;
+ }
+ JsonWriter &value(long value)
+ {
+ maybeComma();
+ os << value;
+ return *this;
+ }
+ JsonWriter &value(long long value)
+ {
+ maybeComma();
+ os << value;
+ return *this;
+ }
+ JsonWriter &value(unsigned long long value)
+ {
+ maybeComma();
+ os << value;
+ return *this;
+ }
+ JsonWriter &value(unsigned long value)
+ {
+ maybeComma();
+ os << value;
+ return *this;
+ }
+ JsonWriter &value(unsigned int value)
+ {
+ maybeComma();
+ os << value;
+ return *this;
+ }
+ JsonWriter &value(bool value)
+ {
+ maybeComma();
+ os << (value ? "true" : "false");
+ return *this;
+ }
+ JsonWriter &value(double value)
+ {
+ maybeComma();
+ os << value;
+ return *this;
+ }
+};
+
+/**
+ * @brief Write a VerIterator to a JsonWriter
+ */
+static void verIterToJson(JsonWriter &writer, CacheFile &Cache, pkgCache::VerIterator const &Ver)
+{
+ writer.beginObject();
+ writer.name("id").value(Ver->ID);
+ writer.name("version").value(Ver.VerStr());
+ writer.name("architecture").value(Ver.Arch());
+ writer.name("pin").value(Cache->GetPolicy().GetPriority(Ver));
+ writer.endObject();
+}
+
+/**
+ * @brief Copy of debSystem::DpkgChrootDirectory()
+ * @todo Remove
+ */
+static void DpkgChrootDirectory()
+{
+ std::string const chrootDir = _config->FindDir("DPkg::Chroot-Directory");
+ if (chrootDir == "/")
+ return;
+ std::cerr << "Chrooting into " << chrootDir << std::endl;
+ if (chroot(chrootDir.c_str()) != 0)
+ _exit(100);
+ if (chdir("/") != 0)
+ _exit(100);
+}
+
+/**
+ * @brief Send a notification to the hook's stream
+ */
+static void NotifyHook(std::ostream &os, std::string const &method, const char **FileList, CacheFile &Cache, std::set<std::string> const &UnknownPackages)
+{
+ SortedPackageUniverse Universe(Cache);
+ JsonWriter jsonWriter{os};
+
+ jsonWriter.beginObject();
+
+ jsonWriter.name("jsonrpc").value("2.0");
+ jsonWriter.name("method").value(method);
+
+ /* Build params */
+ jsonWriter.name("params").beginObject();
+ jsonWriter.name("command").value(FileList[0]);
+ jsonWriter.name("search-terms").beginArray();
+ for (int i = 1; FileList[i] != NULL; i++)
+ jsonWriter.value(FileList[i]);
+ jsonWriter.endArray();
+ jsonWriter.name("unknown-packages").beginArray();
+ for (auto const &PkgName : UnknownPackages)
+ jsonWriter.value(PkgName);
+ jsonWriter.endArray();
+
+ jsonWriter.name("packages").beginArray();
+ for (auto const &Pkg : Universe)
+ {
+ switch (Cache[Pkg].Mode)
+ {
+ case pkgDepCache::ModeInstall:
+ case pkgDepCache::ModeDelete:
+ break;
+ default:
+ continue;
+ }
+
+ jsonWriter.beginObject();
+
+ jsonWriter.name("id").value(Pkg->ID);
+ jsonWriter.name("name").value(Pkg.Name());
+ jsonWriter.name("architecture").value(Pkg.Arch());
+
+ switch (Cache[Pkg].Mode)
+ {
+ case pkgDepCache::ModeInstall:
+ jsonWriter.name("mode").value("install");
+ break;
+ case pkgDepCache::ModeDelete:
+ jsonWriter.name("mode").value(Cache[Pkg].Purge() ? "purge" : "deinstall");
+ break;
+ default:
+ continue;
+ }
+ jsonWriter.name("automatic").value(bool(Cache[Pkg].Flags & pkgCache::Flag::Auto));
+
+ jsonWriter.name("versions").beginObject();
+
+ if (Cache[Pkg].CandidateVer != nullptr)
+ verIterToJson(jsonWriter.name("candidate"), Cache, Cache[Pkg].CandidateVerIter(Cache));
+ if (Cache[Pkg].InstallVer != nullptr)
+ verIterToJson(jsonWriter.name("install"), Cache, Cache[Pkg].InstVerIter(Cache));
+ if (Pkg->CurrentVer != 0)
+ verIterToJson(jsonWriter.name("current"), Cache, Pkg.CurrentVer());
+
+ jsonWriter.endObject();
+
+ jsonWriter.endObject();
+ }
+
+ jsonWriter.endArray(); // packages
+ jsonWriter.endObject(); // params
+ jsonWriter.endObject(); // main
+}
+
+/// @brief Build the hello handshake message for 0.1 protocol
+static std::string BuildHelloMessage()
+{
+ std::stringstream Hello;
+ JsonWriter(Hello).beginObject().name("jsonrpc").value("2.0").name("method").value("org.debian.apt.hooks.hello").name("id").value(0).name("params").beginObject().name("versions").beginArray().value("0.1").endArray().endObject().endObject();
+
+ return Hello.str();
+}
+
+/// @brief Build the bye notification for 0.1 protocol
+static std::string BuildByeMessage()
+{
+ std::stringstream Bye;
+ JsonWriter(Bye).beginObject().name("jsonrpc").value("2.0").name("method").value("org.debian.apt.hooks.bye").name("params").beginObject().endObject().endObject();
+
+ return Bye.str();
+}
+
+/// @brief Run the Json hook processes in the given option.
+bool RunJsonHook(std::string const &option, std::string const &method, const char **FileList, CacheFile &Cache, std::set<std::string> const &UnknownPackages)
+{
+ std::stringstream ss;
+ NotifyHook(ss, method, FileList, Cache, UnknownPackages);
+ std::string TheData = ss.str();
+ std::string HelloData = BuildHelloMessage();
+ std::string ByeData = BuildByeMessage();
+
+ bool result = true;
+
+ Configuration::Item const *Opts = _config->Tree(option.c_str());
+ if (Opts == 0 || Opts->Child == 0)
+ return true;
+ Opts = Opts->Child;
+
+ sighandler_t old_sigpipe = signal(SIGPIPE, SIG_IGN);
+ sighandler_t old_sigint = signal(SIGINT, SIG_IGN);
+ sighandler_t old_sigquit = signal(SIGQUIT, SIG_IGN);
+
+ unsigned int Count = 1;
+ for (; Opts != 0; Opts = Opts->Next, Count++)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+
+ if (_config->FindB("Debug::RunScripts", false) == true)
+ std::clog << "Running external script with list of all .deb file: '"
+ << Opts->Value << "'" << std::endl;
+
+ // Create the pipes
+ std::set<int> KeepFDs;
+ MergeKeepFdsFromConfiguration(KeepFDs);
+ int Pipes[2];
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, Pipes) != 0)
+ {
+ result = _error->Errno("pipe", "Failed to create IPC pipe to subprocess");
+ break;
+ }
+
+ int InfoFD = 3;
+
+ if (InfoFD != Pipes[0])
+ SetCloseExec(Pipes[0], true);
+ else
+ KeepFDs.insert(Pipes[0]);
+
+ SetCloseExec(Pipes[1], true);
+
+ // Purified Fork for running the script
+ pid_t Process = ExecFork(KeepFDs);
+ if (Process == 0)
+ {
+ // Setup the FDs
+ dup2(Pipes[0], InfoFD);
+ SetCloseExec(STDOUT_FILENO, false);
+ SetCloseExec(STDIN_FILENO, false);
+ SetCloseExec(STDERR_FILENO, false);
+
+ string hookfd;
+ strprintf(hookfd, "%d", InfoFD);
+ setenv("APT_HOOK_SOCKET", hookfd.c_str(), 1);
+
+ DpkgChrootDirectory();
+ const char *Args[4];
+ Args[0] = "/bin/sh";
+ Args[1] = "-c";
+ Args[2] = Opts->Value.c_str();
+ Args[3] = 0;
+ execv(Args[0], (char **)Args);
+ _exit(100);
+ }
+ close(Pipes[0]);
+ FILE *F = fdopen(Pipes[1], "w+");
+ if (F == 0)
+ {
+ result = _error->Errno("fdopen", "Failed to open new FD");
+ break;
+ }
+
+ fwrite(HelloData.data(), HelloData.size(), 1, F);
+ fwrite("\n\n", 2, 1, F);
+ fflush(F);
+
+ char *line = nullptr;
+ size_t linesize = 0;
+ ssize_t size = getline(&line, &linesize, F);
+
+ if (size < 0)
+ {
+ if (errno != ECONNRESET && errno != EPIPE)
+ _error->Error("Could not read response to hello message from hook %s: %s", Opts->Value.c_str(), strerror(errno));
+ goto out;
+ }
+ else if (strstr(line, "error") != nullptr)
+ {
+ _error->Error("Hook %s reported an error during hello: %s", Opts->Value.c_str(), line);
+ goto out;
+ }
+
+ size = getline(&line, &linesize, F);
+ if (size < 0)
+ {
+ _error->Error("Could not read message separator line after handshake from %s: %s", Opts->Value.c_str(), feof(F) ? "end of file" : strerror(errno));
+ goto out;
+ }
+ else if (size == 0 || line[0] != '\n')
+ {
+ _error->Error("Expected empty line after handshake from %s, received %s", Opts->Value.c_str(), line);
+ goto out;
+ }
+
+ fwrite(TheData.data(), TheData.size(), 1, F);
+ fwrite("\n\n", 2, 1, F);
+
+ fwrite(ByeData.data(), ByeData.size(), 1, F);
+ fwrite("\n\n", 2, 1, F);
+ out:
+ fclose(F);
+ // Clean up the sub process
+ if (ExecWait(Process, Opts->Value.c_str()) == false)
+ {
+ result = _error->Error("Failure running hook %s", Opts->Value.c_str());
+ break;
+ }
+ }
+ signal(SIGINT, old_sigint);
+ signal(SIGPIPE, old_sigpipe);
+ signal(SIGQUIT, old_sigquit);
+
+ return result;
+}
diff --git a/apt-private/private-json-hooks.h b/apt-private/private-json-hooks.h
new file mode 100644
index 0000000..41be295
--- /dev/null
+++ b/apt-private/private-json-hooks.h
@@ -0,0 +1,14 @@
+/*
+ * private-json-hooks.h - 2nd generation, JSON-RPC, hooks for APT
+ *
+ * Copyright (c) 2018 Canonical Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <set>
+#include <string>
+
+#include <apt-private/private-cachefile.h>
+
+bool RunJsonHook(std::string const &option, std::string const &method, const char **FileList, CacheFile &Cache, std::set<std::string> const &UnknownPackages = {});
diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc
new file mode 100644
index 0000000..7c8c897
--- /dev/null
+++ b/apt-private/private-list.cc
@@ -0,0 +1,155 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cachefilter.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-list.h>
+#include <apt-private/private-output.h>
+
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <apti18n.h>
+ /*}}}*/
+
+struct PackageSortAlphabetic /*{{{*/
+{
+ bool operator () (const pkgCache::PkgIterator &p_lhs,
+ const pkgCache::PkgIterator &p_rhs)
+ {
+ const std::string &l_name = p_lhs.FullName(true);
+ const std::string &r_name = p_rhs.FullName(true);
+ return (l_name < r_name);
+ }
+};
+
+class PackageNameMatcher : public Matcher
+{
+ public:
+ explicit PackageNameMatcher(const char **patterns)
+ {
+ for(int i=0; patterns[i] != NULL; ++i)
+ {
+ std::string pattern = patterns[i];
+ APT::CacheFilter::PackageMatcher *cachefilter = NULL;
+ if(_config->FindB("APT::Cmd::Use-Regexp", false) == true)
+ cachefilter = new APT::CacheFilter::PackageNameMatchesRegEx(pattern);
+ else
+ cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern);
+ filters.push_back(cachefilter);
+ }
+ }
+ virtual ~PackageNameMatcher()
+ {
+ for(J=filters.begin(); J != filters.end(); ++J)
+ delete *J;
+ }
+ virtual bool operator () (const pkgCache::PkgIterator &P) APT_OVERRIDE
+ {
+ for(J=filters.begin(); J != filters.end(); ++J)
+ {
+ APT::CacheFilter::PackageMatcher *cachefilter = *J;
+ if((*cachefilter)(P))
+ return true;
+ }
+ return false;
+ }
+
+private:
+ std::vector<APT::CacheFilter::PackageMatcher*> filters;
+ std::vector<APT::CacheFilter::PackageMatcher*>::const_iterator J;
+ #undef PackageMatcher
+};
+ /*}}}*/
+static void ListAllVersions(pkgCacheFile &CacheFile, pkgRecords &records,/*{{{*/
+ pkgCache::PkgIterator const &P, std::ostream &outs,
+ std::string const &format)
+{
+ for (pkgCache::VerIterator Ver = P.VersionList();
+ Ver.end() == false; ++Ver)
+ {
+ ListSingleVersion(CacheFile, records, Ver, outs, format);
+ outs << std::endl;
+ }
+}
+ /*}}}*/
+// list - list package based on criteria /*{{{*/
+// ---------------------------------------------------------------------
+bool DoList(CommandLine &Cmd)
+{
+ pkgCacheFile CacheFile;
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr || CacheFile.GetDepCache() == nullptr))
+ return false;
+ pkgRecords records(CacheFile);
+
+ const char **patterns;
+ const char *all_pattern[] = { "*", NULL};
+
+ if (strv_length(Cmd.FileList + 1) == 0)
+ {
+ patterns = all_pattern;
+ } else {
+ patterns = Cmd.FileList + 1;
+ }
+
+ std::string format = "${color:highlight}${Package}${color:neutral}/${Origin} ${Version} ${Architecture}${ }${apt:Status}";
+ if (_config->FindB("APT::Cmd::List-Include-Summary", false) == true)
+ format += "\n ${Description}\n";
+
+ PackageNameMatcher matcher(patterns);
+ LocalitySortedVersionSet bag;
+ OpTextProgress progress(*_config);
+ progress.OverallProgress(0,
+ Cache->Head().PackageCount,
+ Cache->Head().PackageCount,
+ _("Listing"));
+ GetLocalitySortedVersionSet(CacheFile, &bag, matcher, &progress);
+ bool const ShowAllVersions = _config->FindB("APT::Cmd::All-Versions", false);
+ std::map<std::string, std::string> output_map;
+ for (LocalitySortedVersionSet::iterator V = bag.begin(); V != bag.end(); ++V)
+ {
+ std::stringstream outs;
+ if(ShowAllVersions == true)
+ ListAllVersions(CacheFile, records, V.ParentPkg(), outs, format);
+ else
+ ListSingleVersion(CacheFile, records, V, outs, format);
+ output_map.insert(std::make_pair<std::string, std::string>(
+ V.ParentPkg().FullName(), outs.str()));
+ }
+
+ // FIXME: SORT! and make sorting flexible (alphabetic, by pkg status)
+ // output the sorted map
+ std::map<std::string, std::string>::const_iterator K;
+ for (K = output_map.begin(); K != output_map.end(); ++K)
+ std::cout << (*K).second << std::endl;
+
+ // be nice and tell the user if there is more to see
+ if (bag.size() == 1 && ShowAllVersions == false)
+ {
+ // start with -1 as we already displayed one version
+ int versions = -1;
+ pkgCache::VerIterator Ver = *bag.begin();
+ for ( ; Ver.end() == false; ++Ver)
+ ++versions;
+ if (versions > 0)
+ _error->Notice(P_("There is %i additional version. Please use the '-a' switch to see it", "There are %i additional versions. Please use the '-a' switch to see them.", versions), versions);
+ }
+
+ return true;
+}
+
diff --git a/apt-private/private-list.h b/apt-private/private-list.h
new file mode 100644
index 0000000..aa26777
--- /dev/null
+++ b/apt-private/private-list.h
@@ -0,0 +1,11 @@
+#ifndef APT_PRIVATE_LIST_H
+#define APT_PRIVATE_LIST_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool DoList(CommandLine &Cmd);
+
+
+#endif
diff --git a/apt-private/private-main.cc b/apt-private/private-main.cc
new file mode 100644
index 0000000..47b1a09
--- /dev/null
+++ b/apt-private/private-main.cc
@@ -0,0 +1,90 @@
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-main.h>
+
+#include <iostream>
+#include <locale>
+
+#include <signal.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+
+void InitLocale(APT_CMD const binary) /*{{{*/
+{
+ try {
+ std::locale::global(std::locale(""));
+ } catch (...) {
+ setlocale(LC_ALL, "");
+ }
+ switch(binary)
+ {
+ case APT_CMD::APT:
+ case APT_CMD::APT_CACHE:
+ case APT_CMD::APT_CDROM:
+ case APT_CMD::APT_CONFIG:
+ case APT_CMD::APT_DUMP_SOLVER:
+ case APT_CMD::APT_HELPER:
+ case APT_CMD::APT_GET:
+ case APT_CMD::APT_MARK:
+ textdomain("apt");
+ break;
+ case APT_CMD::APT_EXTRACTTEMPLATES:
+ case APT_CMD::APT_FTPARCHIVE:
+ case APT_CMD::APT_INTERNAL_PLANNER:
+ case APT_CMD::APT_INTERNAL_SOLVER:
+ case APT_CMD::APT_SORTPKG:
+ textdomain("apt-utils");
+ break;
+ }
+}
+void InitLocale() {}
+ /*}}}*/
+void InitSignals() /*{{{*/
+{
+ signal(SIGPIPE,SIG_IGN);
+}
+ /*}}}*/
+void CheckIfSimulateMode(CommandLine &CmdL) /*{{{*/
+{
+ // disable locking in simulation, but show the message only for users
+ // as root hasn't the same problems like unreadable files which can heavily
+ // distort the simulation.
+ if (_config->FindB("APT::Get::Simulate") == true &&
+ (CmdL.FileSize() == 0 ||
+ (strcmp(CmdL.FileList[0], "source") != 0 && strcmp(CmdL.FileList[0], "download") != 0 &&
+ strcmp(CmdL.FileList[0], "changelog") != 0)))
+ {
+ if (getuid() != 0 && _config->FindB("APT::Get::Show-User-Simulation-Note",true) == true)
+ // TRANSLATORS: placeholder is a binary name like apt or apt-get
+ ioprintf(std::cout, _("NOTE: This is only a simulation!\n"
+ " %s needs root privileges for real execution.\n"
+ " Keep also in mind that locking is deactivated,\n"
+ " so don't depend on the relevance to the real current situation!\n"),
+ _config->Find("Binary").c_str());
+ _config->Set("Debug::NoLocking",true);
+ }
+}
+ /*}}}*/
+void CheckIfCalledByScript(int argc, const char *argv[]) /*{{{*/
+{
+ if (unlikely(argc < 1)) return;
+
+ if(!isatty(STDOUT_FILENO) &&
+ _config->FindB("Apt::Cmd::Disable-Script-Warning", false) == false)
+ {
+ std::cerr << std::endl
+ << "WARNING: " << flNotDir(argv[0]) << " "
+ << "does not have a stable CLI interface. "
+ << "Use with caution in scripts."
+ << std::endl
+ << std::endl;
+ }
+}
+ /*}}}*/
diff --git a/apt-private/private-main.h b/apt-private/private-main.h
new file mode 100644
index 0000000..0d60797
--- /dev/null
+++ b/apt-private/private-main.h
@@ -0,0 +1,16 @@
+#ifndef APT_PRIVATE_MAIN_H
+#define APT_PRIVATE_MAIN_H
+
+#include <apt-private/private-cmndline.h>
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+void InitLocale(APT_CMD const binary);
+APT_PUBLIC APT_DEPRECATED_MSG("Is a no-op now") void InitLocale();
+APT_PUBLIC void InitSignals();
+APT_PUBLIC void CheckIfSimulateMode(CommandLine &CmdL);
+APT_PUBLIC void CheckIfCalledByScript(int argc, const char *argv[]);
+
+#endif
diff --git a/apt-private/private-moo.cc b/apt-private/private-moo.cc
new file mode 100644
index 0000000..ca456ed
--- /dev/null
+++ b/apt-private/private-moo.cc
@@ -0,0 +1,200 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Here be cows – but: Never ask, never tell
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-moo.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-utils.h>
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <stddef.h>
+#include <string.h>
+#include <time.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+static std::string getMooLine(time_t const timenow) /*{{{*/
+{
+ struct tm special;
+ localtime_r(&timenow, &special);
+ enum { NORMAL, PACKAGEMANAGER, APPRECIATION, AGITATION, AIRBORN } line;
+ if (special.tm_mon == 11 && special.tm_mday == 25)
+ line = PACKAGEMANAGER;
+ else if (special.tm_mon == 7 && special.tm_mday == 16)
+ line = APPRECIATION;
+ else if (special.tm_mon == 10 && special.tm_mday == 7)
+ line = AGITATION;
+ else if (special.tm_mon == 1 && special.tm_mday == 18)
+ line = AIRBORN;
+ else
+ line = NORMAL;
+
+ bool const quiet = _config->FindI("quiet") >= 2;
+ std::ostringstream out;
+ if (quiet == false)
+ out << "...\"";
+
+ switch(line)
+ {
+ case PACKAGEMANAGER: out << "Happy package management day!"; break;
+ case APPRECIATION: out << "Three moos for Debian!"; break;
+ case AGITATION: out << "Whoever needs milk, bows to the animal."; break;
+ case AIRBORN: out << "It's a Bird ... It's a Plane ... It's Super Cow!"; break;
+ default: out << "Have you mooed today?"; break;
+ }
+
+ if (quiet == true)
+ out << std::endl;
+ else
+ out << "\"..." << std::endl;
+
+ return out.str();
+}
+ /*}}}*/
+static bool printMooLine(time_t const timenow) /*{{{*/
+{
+ std::cerr << getMooLine(timenow);
+ return true;
+}
+ /*}}}*/
+static bool DoMoo1(time_t const timenow) /*{{{*/
+{
+ // our trustworthy super cow since 2001
+ if (_config->FindI("quiet") >= 2)
+ return printMooLine(timenow);
+ std::string const moo = getMooLine(timenow);
+ size_t const depth = moo.length()/4;
+ c1out <<
+ OutputInDepth(depth, " ") << " (__) \n" <<
+ OutputInDepth(depth, " ") << " (oo) \n" <<
+ OutputInDepth(depth, " ") << " /------\\/ \n" <<
+ OutputInDepth(depth, " ") << " / | || \n" <<
+ OutputInDepth(depth, " ") << " * /\\---/\\ \n" <<
+ OutputInDepth(depth, " ") << " ~~ ~~ \n" <<
+ moo;
+ return true;
+}
+ /*}}}*/
+static bool DoMoo2(time_t const timenow) /*{{{*/
+{
+ // by Fernando Ribeiro in lp:56125
+ if (_config->FindI("quiet") >= 2)
+ return printMooLine(timenow);
+ std::string const moo = getMooLine(timenow);
+ size_t const depth = moo.length()/4;
+ if (_config->FindB("APT::Moo::Color", false) == false)
+ c1out <<
+ OutputInDepth(depth, " ") << " (__) \n" <<
+ OutputInDepth(depth, " ") << " _______~(..)~ \n" <<
+ OutputInDepth(depth, " ") << " ,----\\(oo) \n" <<
+ OutputInDepth(depth, " ") << " /|____|,' \n" <<
+ OutputInDepth(depth, " ") << " * /\"\\ /\\ \n" <<
+ OutputInDepth(depth, " ") << " ~ ~ ~ ~ \n" <<
+ moo;
+ else
+ {
+ c1out <<
+ OutputInDepth(depth, " ") << " \033[1;97m(\033[0;33m__\033[1;97m)\033[0m\n" <<
+ OutputInDepth(depth, " ") << " \033[31m_______\033[33m~(\033[1;34m..\033[0;33m)~\033[0m\n" <<
+ OutputInDepth(depth, " ") << " \033[33m,----\033[31m\\\033[33m(\033[1;4;35moo\033[0;33m)\033[0m\n" <<
+ OutputInDepth(depth, " ") << " \033[33m/|____|,'\033[0m\n" <<
+ OutputInDepth(depth, " ") << " \033[1;5;97m*\033[0;33m /\\ /\\\033[0m\n" <<
+ "\033[32m";
+ for (size_t i = moo.length()/2; i > 1; --i)
+ c1out << "wW";
+
+ c1out << "w\033[0m\n" << moo;
+ }
+
+ return true;
+}
+ /*}}}*/
+static bool DoMoo3(time_t const timenow) /*{{{*/
+{
+ // by Robert Millan in deb:134156
+ if (_config->FindI("quiet") >= 2)
+ return printMooLine(timenow);
+ std::string const moo = getMooLine(timenow);
+ size_t const depth = moo.length()/16;
+ c1out <<
+ OutputInDepth(depth, " ") << " \\_/ \n" <<
+ OutputInDepth(depth, " ") << " m00h (__) -(_)- \n" <<
+ OutputInDepth(depth, " ") << " \\ ~Oo~___ / \\\n" <<
+ OutputInDepth(depth, " ") << " (..) |\\ \n" <<
+ OutputInDepth(depth, "_") << "_________|_|_|__________" <<
+ OutputInDepth((moo.length() - (depth + 27)), "_") << "\n" << moo;
+ return true;
+}
+ /*}}}*/
+static bool DoMooApril() /*{{{*/
+{
+ // by Christopher Allan Webber and proposed by Paul Tagliamonte
+ // in a "Community outreach": https://lists.debian.org/debian-devel/2013/04/msg00045.html
+ if (_config->FindI("quiet") >= 2)
+ {
+ std::cerr << "Have you smashed some milk today?" << std::endl;
+ return true;
+ }
+ c1out <<
+ " _ _\n"
+ " (_\\___( \\,\n"
+ " )___ _ Have you smashed some milk today?\n"
+ " /( (_)-(_) /\n"
+ " ,---------' \\_\n"
+ " //( ',__,' \\ (' ')\n"
+ " // ) '----'\n"
+ " '' ; \\ .--. ,/\n"
+ " | )',_,'----( ;\n"
+ " ||| ''' '||\n";
+ return true;
+}
+ /*}}}*/
+bool DoMoo(CommandLine &CmdL) /*{{{*/
+{
+ time_t const timenow = GetSecondsSinceEpoch();
+
+ struct tm april;
+ localtime_r(&timenow, &april);
+ if (april.tm_mday == 1 && april.tm_mon == 3)
+ return DoMooApril();
+
+ signed short SuperCow = 1;
+ if (CmdL.FileSize() != 0)
+ for (const char **Moo = CmdL.FileList + 1; *Moo != 0; Moo++)
+ if (strcasecmp(*Moo, "moo") == 0)
+ SuperCow++;
+
+ // time is random enough for our purpose
+ if (SuperCow > 3)
+ {
+ if (april.tm_sec == 1)
+ SuperCow = 1 + (timenow % 4);
+ else
+ SuperCow = 1 + (timenow % 3);
+ }
+
+ switch(SuperCow) {
+ case 1: return DoMoo1(timenow);
+ case 2: return DoMoo2(timenow);
+ case 3: return DoMoo3(timenow);
+ case 4: return DoMooApril();
+ default: return DoMoo1(timenow);
+ }
+
+ return true;
+}
+ /*}}}*/
diff --git a/apt-private/private-moo.h b/apt-private/private-moo.h
new file mode 100644
index 0000000..c230ce2
--- /dev/null
+++ b/apt-private/private-moo.h
@@ -0,0 +1,10 @@
+#ifndef APT_PRIVATE_MOO_H
+#define APT_PRIVATE_MOO_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool DoMoo(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc
new file mode 100644
index 0000000..eb9a34a
--- /dev/null
+++ b/apt-private/private-output.cc
@@ -0,0 +1,801 @@
+// Include files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-output.h>
+
+#include <iomanip>
+#include <iostream>
+#include <langinfo.h>
+#include <regex.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+
+#include <sstream>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+std::ostream c0out(0);
+std::ostream c1out(0);
+std::ostream c2out(0);
+std::ofstream devnull("/dev/null");
+
+
+unsigned int ScreenWidth = 80 - 1; /* - 1 for the cursor */
+
+// SigWinch - Window size change signal handler /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static void SigWinch(int)
+{
+ // Riped from GNU ls
+#ifdef TIOCGWINSZ
+ struct winsize ws;
+
+ if (ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col >= 5)
+ ScreenWidth = ws.ws_col - 1;
+#endif
+}
+ /*}}}*/
+bool InitOutput(std::basic_streambuf<char> * const out) /*{{{*/
+{
+ if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
+ _config->Set("quiet","1");
+
+ c0out.rdbuf(out);
+ c1out.rdbuf(out);
+ c2out.rdbuf(out);
+ if (_config->FindI("quiet",0) > 0)
+ c0out.rdbuf(devnull.rdbuf());
+ if (_config->FindI("quiet",0) > 1)
+ c1out.rdbuf(devnull.rdbuf());
+
+ // deal with window size changes
+ auto cols = getenv("COLUMNS");
+ if (cols != nullptr)
+ {
+ char * colends;
+ auto const sw = strtoul(cols, &colends, 10);
+ if (*colends != '\0' || sw == 0)
+ {
+ _error->Warning("Environment variable COLUMNS was ignored as it has an invalid value: \"%s\"", cols);
+ cols = nullptr;
+ }
+ else
+ ScreenWidth = sw;
+ }
+ if (cols == nullptr)
+ {
+ signal(SIGWINCH,SigWinch);
+ SigWinch(0);
+ }
+
+ if(!isatty(1))
+ {
+ _config->Set("APT::Color", "false");
+ _config->Set("APT::Color::Highlight", "");
+ _config->Set("APT::Color::Neutral", "");
+ } else {
+ // Colors
+ _config->CndSet("APT::Color::Highlight", "\x1B[32m");
+ _config->CndSet("APT::Color::Neutral", "\x1B[0m");
+
+ _config->CndSet("APT::Color::Red", "\x1B[31m");
+ _config->CndSet("APT::Color::Green", "\x1B[32m");
+ _config->CndSet("APT::Color::Yellow", "\x1B[33m");
+ _config->CndSet("APT::Color::Blue", "\x1B[34m");
+ _config->CndSet("APT::Color::Magenta", "\x1B[35m");
+ _config->CndSet("APT::Color::Cyan", "\x1B[36m");
+ _config->CndSet("APT::Color::White", "\x1B[37m");
+ }
+
+ return true;
+}
+ /*}}}*/
+static std::string GetArchiveSuite(pkgCacheFile &/*CacheFile*/, pkgCache::VerIterator ver) /*{{{*/
+{
+ std::string suite = "";
+ if (ver && ver.FileList())
+ {
+ pkgCache::VerFileIterator VF = ver.FileList();
+ for (; VF.end() == false ; ++VF)
+ {
+ if(VF.File() == NULL || VF.File().Archive() == NULL)
+ suite = suite + "," + _("unknown");
+ else
+ suite = suite + "," + VF.File().Archive();
+ //suite = VF.File().Archive();
+ }
+ suite = suite.erase(0, 1);
+ }
+ return suite;
+}
+ /*}}}*/
+static std::string GetFlagsStr(pkgCacheFile &CacheFile, pkgCache::PkgIterator P)/*{{{*/
+{
+ pkgDepCache *DepCache = CacheFile.GetDepCache();
+ pkgDepCache::StateCache &state = (*DepCache)[P];
+
+ std::string flags_str;
+ if (state.NowBroken())
+ flags_str = "B";
+ if (P.CurrentVer() && state.Upgradable() && state.CandidateVer != NULL)
+ flags_str = "g";
+ else if (P.CurrentVer() != NULL)
+ flags_str = "i";
+ else
+ flags_str = "-";
+ return flags_str;
+}
+ /*}}}*/
+static std::string GetCandidateVersion(pkgCacheFile &CacheFile, pkgCache::PkgIterator P)/*{{{*/
+{
+ pkgPolicy *policy = CacheFile.GetPolicy();
+ pkgCache::VerIterator cand = policy->GetCandidateVer(P);
+
+ return cand ? cand.VerStr() : "(none)";
+}
+ /*}}}*/
+static std::string GetInstalledVersion(pkgCacheFile &/*CacheFile*/, pkgCache::PkgIterator P)/*{{{*/
+{
+ pkgCache::VerIterator inst = P.CurrentVer();
+
+ return inst ? inst.VerStr() : "(none)";
+}
+ /*}}}*/
+static std::string GetVersion(pkgCacheFile &/*CacheFile*/, pkgCache::VerIterator V)/*{{{*/
+{
+ pkgCache::PkgIterator P = V.ParentPkg();
+ if (V == P.CurrentVer())
+ {
+ std::string inst_str = DeNull(V.VerStr());
+#if 0 // FIXME: do we want this or something like this?
+ pkgDepCache *DepCache = CacheFile.GetDepCache();
+ pkgDepCache::StateCache &state = (*DepCache)[P];
+ if (state.Upgradable())
+ return "**"+inst_str;
+#endif
+ return inst_str;
+ }
+
+ if(V)
+ return DeNull(V.VerStr());
+ return "(none)";
+}
+ /*}}}*/
+static std::string GetArchitecture(pkgCacheFile &CacheFile, pkgCache::PkgIterator P)/*{{{*/
+{
+ if (P->CurrentVer == 0)
+ {
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
+ pkgDepCache::StateCache const &state = (*DepCache)[P];
+ if (state.CandidateVer != NULL)
+ {
+ pkgCache::VerIterator const CandV(CacheFile, state.CandidateVer);
+ return CandV.Arch();
+ }
+ else
+ {
+ pkgCache::VerIterator const V = P.VersionList();
+ if (V.end() == false)
+ return V.Arch();
+ else
+ return P.Arch();
+ }
+ }
+ else
+ return P.CurrentVer().Arch();
+}
+ /*}}}*/
+static std::string GetShortDescription(pkgCacheFile &CacheFile, pkgRecords &records, pkgCache::PkgIterator P)/*{{{*/
+{
+ pkgPolicy *policy = CacheFile.GetPolicy();
+
+ pkgCache::VerIterator ver;
+ if (P.CurrentVer())
+ ver = P.CurrentVer();
+ else
+ ver = policy->GetCandidateVer(P);
+
+ std::string ShortDescription = "(none)";
+ if(ver)
+ {
+ pkgCache::DescIterator const Desc = ver.TranslatedDescription();
+ if (Desc.end() == false)
+ {
+ pkgRecords::Parser & parser = records.Lookup(Desc.FileList());
+ ShortDescription = parser.ShortDesc();
+ }
+ }
+ return ShortDescription;
+}
+ /*}}}*/
+static std::string GetLongDescription(pkgCacheFile &CacheFile, pkgRecords &records, pkgCache::PkgIterator P)/*{{{*/
+{
+ pkgPolicy *policy = CacheFile.GetPolicy();
+
+ pkgCache::VerIterator ver;
+ if (P->CurrentVer != 0)
+ ver = P.CurrentVer();
+ else
+ ver = policy->GetCandidateVer(P);
+
+ std::string const EmptyDescription = "(none)";
+ if(ver.end() == true)
+ return EmptyDescription;
+
+ pkgCache::DescIterator const Desc = ver.TranslatedDescription();
+ if (Desc.end() == false)
+ {
+ pkgRecords::Parser & parser = records.Lookup(Desc.FileList());
+ std::string const longdesc = parser.LongDesc();
+ if (longdesc.empty() == false)
+ return SubstVar(longdesc, "\n ", "\n ");
+ }
+ return EmptyDescription;
+}
+ /*}}}*/
+void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/
+ pkgCache::VerIterator const &V, std::ostream &out,
+ std::string const &format)
+{
+ pkgCache::PkgIterator const P = V.ParentPkg();
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
+ pkgDepCache::StateCache const &state = (*DepCache)[P];
+
+ std::string output;
+ if (_config->FindB("APT::Cmd::use-format", false))
+ output = _config->Find("APT::Cmd::format", "${db::Status-Abbrev} ${Package} ${Version} ${Origin} ${Description}");
+ else
+ output = format;
+
+ // FIXME: some of these names are really icky – and all is nowhere documented
+ output = SubstVar(output, "${db::Status-Abbrev}", GetFlagsStr(CacheFile, P));
+ output = SubstVar(output, "${Package}", P.Name());
+ std::string const ArchStr = GetArchitecture(CacheFile, P);
+ output = SubstVar(output, "${Architecture}", ArchStr);
+ std::string const InstalledVerStr = GetInstalledVersion(CacheFile, P);
+ output = SubstVar(output, "${installed:Version}", InstalledVerStr);
+ std::string const CandidateVerStr = GetCandidateVersion(CacheFile, P);
+ output = SubstVar(output, "${candidate:Version}", CandidateVerStr);
+ std::string const VersionStr = GetVersion(CacheFile, V);
+ output = SubstVar(output, "${Version}", VersionStr);
+ output = SubstVar(output, "${Origin}", GetArchiveSuite(CacheFile, V));
+
+ std::string StatusStr = "";
+ if (P->CurrentVer != 0)
+ {
+ if (P.CurrentVer() == V)
+ {
+ if (state.Upgradable() && state.CandidateVer != NULL)
+ strprintf(StatusStr, _("[installed,upgradable to: %s]"),
+ CandidateVerStr.c_str());
+ else if (V.Downloadable() == false)
+ StatusStr = _("[installed,local]");
+ else if(V.Automatic() == true && state.Garbage == true)
+ StatusStr = _("[installed,auto-removable]");
+ else if ((state.Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+ StatusStr = _("[installed,automatic]");
+ else
+ StatusStr = _("[installed]");
+ }
+ else if (state.CandidateVer == V && state.Upgradable())
+ strprintf(StatusStr, _("[upgradable from: %s]"),
+ InstalledVerStr.c_str());
+ }
+ else if (V.ParentPkg()->CurrentState == pkgCache::State::ConfigFiles)
+ StatusStr = _("[residual-config]");
+ output = SubstVar(output, "${apt:Status}", StatusStr);
+ output = SubstVar(output, "${color:highlight}", _config->Find("APT::Color::Highlight", ""));
+ output = SubstVar(output, "${color:neutral}", _config->Find("APT::Color::Neutral", ""));
+ output = SubstVar(output, "${Description}", GetShortDescription(CacheFile, records, P));
+ if (output.find("${LongDescription}") != string::npos)
+ output = SubstVar(output, "${LongDescription}", GetLongDescription(CacheFile, records, P));
+ output = SubstVar(output, "${ }${ }", "${ }");
+ output = SubstVar(output, "${ }\n", "\n");
+ output = SubstVar(output, "${ }", " ");
+ if (APT::String::Endswith(output, " ") == true)
+ output.erase(output.length() - 1);
+
+ out << output;
+}
+ /*}}}*/
+// ShowBroken - Debugging aide /*{{{*/
+// ---------------------------------------------------------------------
+/* This prints out the names of all the packages that are broken along
+ with the name of each broken dependency and a quite version
+ description.
+
+ The output looks like:
+ The following packages have unmet dependencies:
+ exim: Depends: libc6 (>= 2.1.94) but 2.1.3-10 is to be installed
+ Depends: libldap2 (>= 2.0.2-2) but it is not going to be installed
+ Depends: libsasl7 but it is not going to be installed
+ */
+static void ShowBrokenPackage(ostream &out, pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg, bool const Now)
+{
+ if (Now == true)
+ {
+ if ((*Cache)[Pkg].NowBroken() == false)
+ return;
+ }
+ else
+ {
+ if ((*Cache)[Pkg].InstBroken() == false)
+ return;
+ }
+
+ // Print out each package and the failed dependencies
+ out << " " << Pkg.FullName(true) << " :";
+ unsigned const Indent = Pkg.FullName(true).size() + 3;
+ bool First = true;
+ pkgCache::VerIterator Ver;
+
+ if (Now == true)
+ Ver = Pkg.CurrentVer();
+ else
+ Ver = (*Cache)[Pkg].InstVerIter(*Cache);
+
+ if (Ver.end() == true)
+ {
+ out << endl;
+ return;
+ }
+
+ for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false;)
+ {
+ // Compute a single dependency element (glob or)
+ pkgCache::DepIterator Start;
+ pkgCache::DepIterator End;
+ D.GlobOr(Start,End); // advances D
+
+ if ((*Cache)->IsImportantDep(End) == false)
+ continue;
+
+ if (Now == true)
+ {
+ if (((*Cache)[End] & pkgDepCache::DepGNow) == pkgDepCache::DepGNow)
+ continue;
+ }
+ else
+ {
+ if (((*Cache)[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
+ continue;
+ }
+
+ bool FirstOr = true;
+ while (1)
+ {
+ if (First == false)
+ for (unsigned J = 0; J != Indent; J++)
+ out << ' ';
+ First = false;
+
+ if (FirstOr == false)
+ {
+ for (unsigned J = 0; J != strlen(End.DepType()) + 3; J++)
+ out << ' ';
+ }
+ else
+ out << ' ' << End.DepType() << ": ";
+ FirstOr = false;
+
+ out << Start.TargetPkg().FullName(true);
+
+ // Show a quick summary of the version requirements
+ if (Start.TargetVer() != 0)
+ out << " (" << Start.CompType() << " " << Start.TargetVer() << ")";
+
+ /* Show a summary of the target package if possible. In the case
+ of virtual packages we show nothing */
+ pkgCache::PkgIterator Targ = Start.TargetPkg();
+ if (Targ->ProvidesList == 0)
+ {
+ out << ' ';
+ pkgCache::VerIterator Ver = (*Cache)[Targ].InstVerIter(*Cache);
+ if (Now == true)
+ Ver = Targ.CurrentVer();
+
+ if (Ver.end() == false)
+ {
+ if (Now == true)
+ ioprintf(out,_("but %s is installed"),Ver.VerStr());
+ else
+ ioprintf(out,_("but %s is to be installed"),Ver.VerStr());
+ }
+ else
+ {
+ if ((*Cache)[Targ].CandidateVerIter(*Cache).end() == true)
+ {
+ if (Targ->ProvidesList == 0)
+ out << _("but it is not installable");
+ else
+ out << _("but it is a virtual package");
+ }
+ else
+ out << (Now?_("but it is not installed"):_("but it is not going to be installed"));
+ }
+ }
+
+ if (Start != End)
+ out << _(" or");
+ out << endl;
+
+ if (Start == End)
+ break;
+ ++Start;
+ }
+ }
+}
+void ShowBroken(ostream &out, CacheFile &Cache, bool const Now)
+{
+ if (Cache->BrokenCount() == 0)
+ return;
+
+ out << _("The following packages have unmet dependencies:") << endl;
+ SortedPackageUniverse Universe(Cache);
+ for (auto const &Pkg: Universe)
+ ShowBrokenPackage(out, &Cache, Pkg, Now);
+}
+void ShowBroken(ostream &out, pkgCacheFile &Cache, bool const Now)
+{
+ if (Cache->BrokenCount() == 0)
+ return;
+
+ out << _("The following packages have unmet dependencies:") << endl;
+ APT::PackageUniverse Universe(Cache);
+ for (auto const &Pkg: Universe)
+ ShowBrokenPackage(out, &Cache, Pkg, Now);
+}
+ /*}}}*/
+// ShowNew - Show packages to newly install /*{{{*/
+void ShowNew(ostream &out,CacheFile &Cache)
+{
+ SortedPackageUniverse Universe(Cache);
+ ShowList(out,_("The following NEW packages will be installed:"), Universe,
+ [&Cache](pkgCache::PkgIterator const &Pkg) { return Cache[Pkg].NewInstall(); },
+ &PrettyFullName,
+ CandidateVersion(&Cache));
+}
+ /*}}}*/
+// ShowDel - Show packages to delete /*{{{*/
+void ShowDel(ostream &out,CacheFile &Cache)
+{
+ SortedPackageUniverse Universe(Cache);
+ ShowList(out,_("The following packages will be REMOVED:"), Universe,
+ [&Cache](pkgCache::PkgIterator const &Pkg) { return Cache[Pkg].Delete(); },
+ [&Cache](pkgCache::PkgIterator const &Pkg)
+ {
+ std::string str = PrettyFullName(Pkg);
+ if (((*Cache)[Pkg].iFlags & pkgDepCache::Purge) == pkgDepCache::Purge)
+ str.append("*");
+ return str;
+ },
+ CandidateVersion(&Cache));
+}
+ /*}}}*/
+// ShowKept - Show kept packages /*{{{*/
+void ShowKept(ostream &out,CacheFile &Cache)
+{
+ SortedPackageUniverse Universe(Cache);
+ ShowList(out,_("The following packages have been kept back:"), Universe,
+ [&Cache](pkgCache::PkgIterator const &Pkg)
+ {
+ return Cache[Pkg].Upgrade() == false &&
+ Cache[Pkg].Upgradable() == true &&
+ Pkg->CurrentVer != 0 &&
+ Cache[Pkg].Delete() == false;
+ },
+ &PrettyFullName,
+ CurrentToCandidateVersion(&Cache));
+}
+ /*}}}*/
+// ShowUpgraded - Show upgraded packages /*{{{*/
+void ShowUpgraded(ostream &out,CacheFile &Cache)
+{
+ SortedPackageUniverse Universe(Cache);
+ ShowList(out,_("The following packages will be upgraded:"), Universe,
+ [&Cache](pkgCache::PkgIterator const &Pkg)
+ {
+ return Cache[Pkg].Upgrade() == true && Cache[Pkg].NewInstall() == false;
+ },
+ &PrettyFullName,
+ CurrentToCandidateVersion(&Cache));
+}
+ /*}}}*/
+// ShowDowngraded - Show downgraded packages /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ShowDowngraded(ostream &out,CacheFile &Cache)
+{
+ SortedPackageUniverse Universe(Cache);
+ return ShowList(out,_("The following packages will be DOWNGRADED:"), Universe,
+ [&Cache](pkgCache::PkgIterator const &Pkg)
+ {
+ return Cache[Pkg].Downgrade() == true && Cache[Pkg].NewInstall() == false;
+ },
+ &PrettyFullName,
+ CurrentToCandidateVersion(&Cache));
+}
+ /*}}}*/
+// ShowHold - Show held but changed packages /*{{{*/
+bool ShowHold(ostream &out,CacheFile &Cache)
+{
+ SortedPackageUniverse Universe(Cache);
+ return ShowList(out,_("The following held packages will be changed:"), Universe,
+ [&Cache](pkgCache::PkgIterator const &Pkg)
+ {
+ return Pkg->SelectedState == pkgCache::State::Hold &&
+ Cache[Pkg].InstallVer != (pkgCache::Version *)Pkg.CurrentVer();
+ },
+ &PrettyFullName,
+ CurrentToCandidateVersion(&Cache));
+}
+ /*}}}*/
+// ShowEssential - Show an essential package warning /*{{{*/
+// ---------------------------------------------------------------------
+/* This prints out a warning message that is not to be ignored. It shows
+ all essential packages and their dependents that are to be removed.
+ It is insanely risky to remove the dependents of an essential package! */
+struct APT_HIDDEN PrettyFullNameWithDue {
+ std::map<unsigned long long, pkgCache::PkgIterator> due;
+ PrettyFullNameWithDue() {}
+ std::string operator() (pkgCache::PkgIterator const &Pkg)
+ {
+ std::string const A = PrettyFullName(Pkg);
+ std::map<unsigned long long, pkgCache::PkgIterator>::const_iterator d = due.find(Pkg->ID);
+ if (d == due.end())
+ return A;
+
+ std::string const B = PrettyFullName(d->second);
+ std::ostringstream outstr;
+ ioprintf(outstr, _("%s (due to %s)"), A.c_str(), B.c_str());
+ return outstr.str();
+ }
+};
+bool ShowEssential(ostream &out,CacheFile &Cache)
+{
+ std::vector<bool> Added(Cache->Head().PackageCount, false);
+ APT::PackageDeque pkglist;
+ PrettyFullNameWithDue withdue;
+
+ SortedPackageUniverse Universe(Cache);
+ for (pkgCache::PkgIterator const &I: Universe)
+ {
+ if ((I->Flags & pkgCache::Flag::Essential) != pkgCache::Flag::Essential &&
+ (I->Flags & pkgCache::Flag::Important) != pkgCache::Flag::Important)
+ continue;
+
+ // The essential package is being removed
+ if (Cache[I].Delete() == false)
+ continue;
+
+ if (Added[I->ID] == false)
+ {
+ Added[I->ID] = true;
+ pkglist.insert(I);
+ }
+
+ if (I->CurrentVer == 0)
+ continue;
+
+ // Print out any essential package depenendents that are to be removed
+ for (pkgCache::DepIterator D = I.CurrentVer().DependsList(); D.end() == false; ++D)
+ {
+ // Skip everything but depends
+ if (D->Type != pkgCache::Dep::PreDepends &&
+ D->Type != pkgCache::Dep::Depends)
+ continue;
+
+ pkgCache::PkgIterator P = D.SmartTargetPkg();
+ if (Cache[P].Delete() == true)
+ {
+ if (Added[P->ID] == true)
+ continue;
+ Added[P->ID] = true;
+
+ pkglist.insert(P);
+ withdue.due[P->ID] = I;
+ }
+ }
+ }
+ return ShowList(out,_("WARNING: The following essential packages will be removed.\n"
+ "This should NOT be done unless you know exactly what you are doing!"),
+ pkglist, &AlwaysTrue, withdue, &EmptyString);
+}
+ /*}}}*/
+// Stats - Show some statistics /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void Stats(ostream &out,pkgDepCache &Dep)
+{
+ unsigned long Upgrade = 0;
+ unsigned long Downgrade = 0;
+ unsigned long Install = 0;
+ unsigned long ReInstall = 0;
+ for (pkgCache::PkgIterator I = Dep.PkgBegin(); I.end() == false; ++I)
+ {
+ if (Dep[I].NewInstall() == true)
+ Install++;
+ else
+ {
+ if (Dep[I].Upgrade() == true)
+ Upgrade++;
+ else
+ if (Dep[I].Downgrade() == true)
+ Downgrade++;
+ }
+
+ if (Dep[I].Delete() == false && (Dep[I].iFlags & pkgDepCache::ReInstall) == pkgDepCache::ReInstall)
+ ReInstall++;
+ }
+
+ ioprintf(out,_("%lu upgraded, %lu newly installed, "),
+ Upgrade,Install);
+
+ if (ReInstall != 0)
+ ioprintf(out,_("%lu reinstalled, "),ReInstall);
+ if (Downgrade != 0)
+ ioprintf(out,_("%lu downgraded, "),Downgrade);
+
+ ioprintf(out,_("%lu to remove and %lu not upgraded.\n"),
+ Dep.DelCount(),Dep.KeepCount());
+
+ if (Dep.BadCount() != 0)
+ ioprintf(out,_("%lu not fully installed or removed.\n"),
+ Dep.BadCount());
+}
+ /*}}}*/
+// YnPrompt - Yes No Prompt. /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns true on a Yes.*/
+bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o)
+{
+ auto const AssumeYes = _config->FindB("APT::Get::Assume-Yes",false);
+ auto const AssumeNo = _config->FindB("APT::Get::Assume-No",false);
+ // if we ask interactively, show warnings/notices before the question
+ if (ShowGlobalErrors == true && AssumeYes == false && AssumeNo == false)
+ {
+ if (_config->FindI("quiet",0) > 0)
+ _error->DumpErrors(c2o);
+ else
+ _error->DumpErrors(c2o, GlobalError::DEBUG);
+ }
+
+ c2o << Question << std::flush;
+
+ /* nl_langinfo does not support LANGUAGE setting, so we unset it here
+ to have the help-message (hopefully) match the expected characters */
+ char * language = getenv("LANGUAGE");
+ if (language != NULL)
+ language = strdup(language);
+ if (language != NULL)
+ unsetenv("LANGUAGE");
+
+ if (Default == true)
+ // TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+ // e.g. "Do you want to continue? [Y/n] "
+ // The user has to answer with an input matching the
+ // YESEXPR/NOEXPR defined in your l10n.
+ c2o << " " << _("[Y/n]") << " " << std::flush;
+ else
+ // TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+ // e.g. "Should this file be removed? [y/N] "
+ // The user has to answer with an input matching the
+ // YESEXPR/NOEXPR defined in your l10n.
+ c2o << " " << _("[y/N]") << " " << std::flush;
+
+ if (language != NULL)
+ {
+ setenv("LANGUAGE", language, 0);
+ free(language);
+ }
+
+ if (AssumeYes)
+ {
+ // TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+ c1o << _("Y") << std::endl;
+ return true;
+ }
+ else if (AssumeNo)
+ {
+ // TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+ c1o << _("N") << std::endl;
+ return false;
+ }
+
+ char response[1024] = "";
+ std::cin.getline(response, sizeof(response));
+
+ if (!std::cin)
+ return false;
+
+ if (strlen(response) == 0)
+ return Default;
+
+ regex_t Pattern;
+ int Res;
+
+ Res = regcomp(&Pattern, nl_langinfo(YESEXPR),
+ REG_EXTENDED|REG_ICASE|REG_NOSUB);
+
+ if (Res != 0) {
+ char Error[300];
+ regerror(Res,&Pattern,Error,sizeof(Error));
+ return _error->Error(_("Regex compilation error - %s"),Error);
+ }
+
+ Res = regexec(&Pattern, response, 0, NULL, 0);
+ if (Res == 0)
+ return true;
+ return false;
+}
+bool YnPrompt(char const * const Question, bool const Default)
+{
+ return YnPrompt(Question, Default, true, c1out, c2out);
+}
+ /*}}}*/
+// AnalPrompt - Annoying Yes No Prompt. /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns true on a Yes.*/
+bool AnalPrompt(std::string const &Question, const char *Text)
+{
+ if (_config->FindI("quiet",0) > 0)
+ _error->DumpErrors(c2out);
+ else
+ _error->DumpErrors(c2out, GlobalError::DEBUG);
+ c2out << Question << std::flush;
+
+ char Buf[1024];
+ std::cin.getline(Buf,sizeof(Buf));
+ if (strcmp(Buf,Text) == 0)
+ return true;
+ return false;
+}
+ /*}}}*/
+
+std::string PrettyFullName(pkgCache::PkgIterator const &Pkg)
+{
+ return Pkg.FullName(true);
+}
+std::string CandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg)
+{
+ return (*Cache)[Pkg].CandVersion;
+}
+std::function<std::string(pkgCache::PkgIterator const &)> CandidateVersion(pkgCacheFile * const Cache)
+{
+ return std::bind(static_cast<std::string(*)(pkgCacheFile * const, pkgCache::PkgIterator const&)>(&CandidateVersion), Cache, std::placeholders::_1);
+}
+std::string CurrentToCandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg)
+{
+ return std::string((*Cache)[Pkg].CurVersion) + " => " + (*Cache)[Pkg].CandVersion;
+}
+std::function<std::string(pkgCache::PkgIterator const &)> CurrentToCandidateVersion(pkgCacheFile * const Cache)
+{
+ return std::bind(static_cast<std::string(*)(pkgCacheFile * const, pkgCache::PkgIterator const&)>(&CurrentToCandidateVersion), Cache, std::placeholders::_1);
+}
+bool AlwaysTrue(pkgCache::PkgIterator const &)
+{
+ return true;
+}
+std::string EmptyString(pkgCache::PkgIterator const &)
+{
+ return std::string();
+}
+
diff --git a/apt-private/private-output.h b/apt-private/private-output.h
new file mode 100644
index 0000000..c20cc9e
--- /dev/null
+++ b/apt-private/private-output.h
@@ -0,0 +1,116 @@
+#ifndef APT_PRIVATE_OUTPUT_H
+#define APT_PRIVATE_OUTPUT_H
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <fstream>
+#include <functional>
+#include <iostream>
+#include <string>
+
+// forward declaration
+class pkgCacheFile;
+class CacheFile;
+class pkgDepCache;
+class pkgRecords;
+
+
+APT_PUBLIC extern std::ostream c0out;
+APT_PUBLIC extern std::ostream c1out;
+APT_PUBLIC extern std::ostream c2out;
+APT_PUBLIC extern std::ofstream devnull;
+APT_PUBLIC extern unsigned int ScreenWidth;
+
+APT_PUBLIC bool InitOutput(std::basic_streambuf<char> * const out = std::cout.rdbuf());
+
+void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records,
+ pkgCache::VerIterator const &V, std::ostream &out,
+ std::string const &format);
+
+
+// helper to describe global state
+APT_PUBLIC void ShowBroken(std::ostream &out, CacheFile &Cache, bool const Now);
+APT_PUBLIC void ShowBroken(std::ostream &out, pkgCacheFile &Cache, bool const Now);
+
+template<class Container, class PredicateC, class DisplayP, class DisplayV> bool ShowList(std::ostream &out, std::string const &Title,
+ Container const &cont,
+ PredicateC Predicate,
+ DisplayP PkgDisplay,
+ DisplayV VerboseDisplay)
+{
+ size_t const ScreenWidth = (::ScreenWidth > 3) ? ::ScreenWidth - 3 : 0;
+ int ScreenUsed = 0;
+ bool const ShowVersions = _config->FindB("APT::Get::Show-Versions", false);
+ bool printedTitle = false;
+
+ for (auto const &Pkg: cont)
+ {
+ if (Predicate(Pkg) == false)
+ continue;
+
+ if (printedTitle == false)
+ {
+ out << Title;
+ printedTitle = true;
+ }
+
+ if (ShowVersions == true)
+ {
+ out << std::endl << " " << PkgDisplay(Pkg);
+ std::string const verbose = VerboseDisplay(Pkg);
+ if (verbose.empty() == false)
+ out << " (" << verbose << ")";
+ }
+ else
+ {
+ std::string const PkgName = PkgDisplay(Pkg);
+ if (ScreenUsed == 0 || (ScreenUsed + PkgName.length()) >= ScreenWidth)
+ {
+ out << std::endl << " ";
+ ScreenUsed = 0;
+ }
+ else if (ScreenUsed != 0)
+ {
+ out << " ";
+ ++ScreenUsed;
+ }
+ out << PkgName;
+ ScreenUsed += PkgName.length();
+ }
+ }
+
+ if (printedTitle == true)
+ {
+ out << std::endl;
+ return false;
+ }
+ return true;
+}
+
+void ShowNew(std::ostream &out,CacheFile &Cache);
+void ShowDel(std::ostream &out,CacheFile &Cache);
+void ShowKept(std::ostream &out,CacheFile &Cache);
+void ShowUpgraded(std::ostream &out,CacheFile &Cache);
+bool ShowDowngraded(std::ostream &out,CacheFile &Cache);
+bool ShowHold(std::ostream &out,CacheFile &Cache);
+
+bool ShowEssential(std::ostream &out,CacheFile &Cache);
+
+void Stats(std::ostream &out, pkgDepCache &Dep);
+
+// prompting
+APT_PUBLIC bool YnPrompt(char const *const Question, bool Default = true);
+bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o);
+bool AnalPrompt(std::string const &Question, const char *Text);
+
+APT_PUBLIC std::string PrettyFullName(pkgCache::PkgIterator const &Pkg);
+std::string CandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);
+std::function<std::string(pkgCache::PkgIterator const &)> CandidateVersion(pkgCacheFile * const Cache);
+std::string CurrentToCandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);
+std::function<std::string(pkgCache::PkgIterator const &)> CurrentToCandidateVersion(pkgCacheFile * const Cache);
+std::string EmptyString(pkgCache::PkgIterator const &);
+bool AlwaysTrue(pkgCache::PkgIterator const &);
+
+#endif
diff --git a/apt-private/private-search.cc b/apt-private/private-search.cc
new file mode 100644
index 0000000..de1b197
--- /dev/null
+++ b/apt-private/private-search.cc
@@ -0,0 +1,349 @@
+// Includes /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/progress.h>
+
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-json-hooks.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-search.h>
+#include <apt-private/private-show.h>
+
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <string.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+static bool FullTextSearch(CommandLine &CmdL) /*{{{*/
+{
+
+ CacheFile CacheFile;
+ CacheFile.GetDepCache();
+ pkgCache *Cache = CacheFile.GetPkgCache();
+ pkgDepCache::Policy *Plcy = CacheFile.GetPolicy();
+ if (unlikely(Cache == NULL || Plcy == NULL))
+ return false;
+
+ // Make sure there is at least one argument
+ unsigned int const NumPatterns = CmdL.FileSize() -1;
+ if (NumPatterns < 1)
+ return _error->Error(_("You must give at least one search pattern"));
+
+ RunJsonHook("AptCli::Hooks::Search", "org.debian.apt.hooks.search.pre", CmdL.FileList, CacheFile);
+
+#define APT_FREE_PATTERNS() for (std::vector<regex_t>::iterator P = Patterns.begin(); \
+ P != Patterns.end(); ++P) { regfree(&(*P)); }
+
+ // Compile the regex pattern
+ std::vector<regex_t> Patterns;
+ for (unsigned int I = 0; I != NumPatterns; ++I)
+ {
+ regex_t pattern;
+ if (regcomp(&pattern, CmdL.FileList[I + 1], REG_EXTENDED | REG_ICASE | REG_NOSUB) != 0)
+ {
+ APT_FREE_PATTERNS();
+ return _error->Error("Regex compilation error");
+ }
+ Patterns.push_back(pattern);
+ }
+
+ std::map<std::string, std::string> output_map;
+
+ LocalitySortedVersionSet bag;
+ OpTextProgress progress(*_config);
+ progress.OverallProgress(0, 100, 50, _("Sorting"));
+ GetLocalitySortedVersionSet(CacheFile, &bag, &progress);
+ LocalitySortedVersionSet::iterator V = bag.begin();
+
+ progress.OverallProgress(50, 100, 50, _("Full Text Search"));
+ progress.SubProgress(bag.size());
+ pkgRecords records(CacheFile);
+
+ std::string format = "${color:highlight}${Package}${color:neutral}/${Origin} ${Version} ${Architecture}${ }${apt:Status}\n";
+ if (_config->FindB("APT::Cache::ShowFull",false) == false)
+ format += " ${Description}\n";
+ else
+ format += " ${LongDescription}\n";
+
+ bool const NamesOnly = _config->FindB("APT::Cache::NamesOnly", false);
+ int Done = 0;
+ std::vector<bool> PkgsDone(Cache->Head().PackageCount, false);
+ for ( ;V != bag.end(); ++V)
+ {
+ if (Done%500 == 0)
+ progress.Progress(Done);
+ ++Done;
+
+ // we want to list each package only once
+ pkgCache::PkgIterator const P = V.ParentPkg();
+ if (PkgsDone[P->ID] == true)
+ continue;
+
+ char const * const PkgName = P.Name();
+ pkgCache::DescIterator Desc = V.TranslatedDescription();
+ std::string LongDesc = "";
+ if (Desc.end() == false)
+ {
+ pkgRecords::Parser &parser = records.Lookup(Desc.FileList());
+ LongDesc = parser.LongDesc();
+ }
+
+ bool all_found = true;
+ for (std::vector<regex_t>::const_iterator pattern = Patterns.begin();
+ pattern != Patterns.end(); ++pattern)
+ {
+ if (regexec(&(*pattern), PkgName, 0, 0, 0) == 0)
+ continue;
+ else if (NamesOnly == false && regexec(&(*pattern), LongDesc.c_str(), 0, 0, 0) == 0)
+ continue;
+ // search patterns are AND, so one failing fails all
+ all_found = false;
+ break;
+ }
+ if (all_found == true)
+ {
+ PkgsDone[P->ID] = true;
+ std::stringstream outs;
+ ListSingleVersion(CacheFile, records, V, outs, format);
+ output_map.insert(std::make_pair<std::string, std::string>(
+ PkgName, outs.str()));
+ }
+ }
+ APT_FREE_PATTERNS();
+ progress.Done();
+
+ // FIXME: SORT! and make sorting flexible (alphabetic, by pkg status)
+ // output the sorted map
+ std::map<std::string, std::string>::const_iterator K;
+ for (K = output_map.begin(); K != output_map.end(); ++K)
+ std::cout << (*K).second << std::endl;
+
+ if (output_map.empty())
+ RunJsonHook("AptCli::Hooks::Search", "org.debian.apt.hooks.search.fail", CmdL.FileList, CacheFile);
+ else
+ RunJsonHook("AptCli::Hooks::Search", "org.debian.apt.hooks.search.post", CmdL.FileList, CacheFile);
+ return true;
+}
+ /*}}}*/
+// LocalitySort - Sort a version list by package file locality /*{{{*/
+static int LocalityCompare(const void * const a, const void * const b)
+{
+ pkgCache::VerFile const * const A = *static_cast<pkgCache::VerFile const * const *>(a);
+ pkgCache::VerFile const * const B = *static_cast<pkgCache::VerFile const * const *>(b);
+
+ if (A == 0 && B == 0)
+ return 0;
+ if (A == 0)
+ return 1;
+ if (B == 0)
+ return -1;
+
+ if (A->File == B->File)
+ return A->Offset - B->Offset;
+ return A->File - B->File;
+}
+void LocalitySort(pkgCache::VerFile ** const begin, unsigned long long const Count,size_t const Size)
+{
+ qsort(begin,Count,Size,LocalityCompare);
+}
+static void LocalitySort(pkgCache::DescFile ** const begin, unsigned long long const Count,size_t const Size)
+{
+ qsort(begin,Count,Size,LocalityCompare);
+}
+ /*}}}*/
+// Search - Perform a search /*{{{*/
+// ---------------------------------------------------------------------
+/* This searches the package names and package descriptions for a pattern */
+struct ExDescFile
+{
+ pkgCache::DescFile *Df;
+ pkgCache::VerIterator V;
+ map_id_t ID;
+ ExDescFile() : Df(nullptr), ID(0) {}
+};
+static bool Search(CommandLine &CmdL)
+{
+ bool const ShowFull = _config->FindB("APT::Cache::ShowFull",false);
+ unsigned int const NumPatterns = CmdL.FileSize() -1;
+
+ pkgCacheFile CacheFile;
+ pkgCache *Cache = CacheFile.GetPkgCache();
+ pkgDepCache::Policy *Plcy = CacheFile.GetPolicy();
+ if (unlikely(Cache == NULL || Plcy == NULL))
+ return false;
+
+ // Make sure there is at least one argument
+ if (NumPatterns < 1)
+ return _error->Error(_("You must give at least one search pattern"));
+
+ // Compile the regex pattern
+ regex_t *Patterns = new regex_t[NumPatterns];
+ memset(Patterns,0,sizeof(*Patterns)*NumPatterns);
+ for (unsigned I = 0; I != NumPatterns; I++)
+ {
+ if (regcomp(&Patterns[I],CmdL.FileList[I+1],REG_EXTENDED | REG_ICASE |
+ REG_NOSUB) != 0)
+ {
+ for (; I != 0; I--)
+ regfree(&Patterns[I]);
+ return _error->Error("Regex compilation error");
+ }
+ }
+
+ if (_error->PendingError() == true)
+ {
+ for (unsigned I = 0; I != NumPatterns; I++)
+ regfree(&Patterns[I]);
+ return false;
+ }
+
+ size_t const descCount = Cache->HeaderP->GroupCount + 1;
+ ExDescFile *DFList = new ExDescFile[descCount];
+
+ bool *PatternMatch = new bool[descCount * NumPatterns];
+ memset(PatternMatch,false,sizeof(*PatternMatch) * descCount * NumPatterns);
+
+ // Map versions that we want to write out onto the VerList array.
+ bool const NamesOnly = _config->FindB("APT::Cache::NamesOnly",false);
+ for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() == false; ++G)
+ {
+ size_t const PatternOffset = G->ID * NumPatterns;
+ size_t unmatched = 0, matched = 0;
+ for (unsigned I = 0; I < NumPatterns; ++I)
+ {
+ if (PatternMatch[PatternOffset + I] == true)
+ ++matched;
+ else if (regexec(&Patterns[I],G.Name(),0,0,0) == 0)
+ PatternMatch[PatternOffset + I] = true;
+ else
+ ++unmatched;
+ }
+
+ // already dealt with this package?
+ if (matched == NumPatterns)
+ continue;
+
+ // Doing names only, drop any that don't match..
+ if (NamesOnly == true && unmatched == NumPatterns)
+ continue;
+
+ // Find the proper version to use
+ pkgCache::PkgIterator P = G.FindPreferredPkg();
+ if (P.end() == true)
+ continue;
+ pkgCache::VerIterator V = Plcy->GetCandidateVer(P);
+ if (V.end() == false)
+ {
+ pkgCache::DescIterator const D = V.TranslatedDescription();
+ //FIXME: packages without a description can't be found
+ if (D.end() == true)
+ continue;
+ DFList[G->ID].Df = D.FileList();
+ DFList[G->ID].V = V;
+ DFList[G->ID].ID = G->ID;
+ }
+
+ if (unmatched == NumPatterns)
+ continue;
+
+ // Include all the packages that provide matching names too
+ for (pkgCache::PrvIterator Prv = P.ProvidesList() ; Prv.end() == false; ++Prv)
+ {
+ pkgCache::VerIterator V = Plcy->GetCandidateVer(Prv.OwnerPkg());
+ if (V.end() == true)
+ continue;
+
+ unsigned long id = Prv.OwnerPkg().Group()->ID;
+ pkgCache::DescIterator const D = V.TranslatedDescription();
+ //FIXME: packages without a description can't be found
+ if (D.end() == true)
+ continue;
+ DFList[id].Df = D.FileList();
+ DFList[id].V = V;
+ DFList[id].ID = id;
+
+ size_t const PrvPatternOffset = id * NumPatterns;
+ for (unsigned I = 0; I < NumPatterns; ++I)
+ PatternMatch[PrvPatternOffset + I] |= PatternMatch[PatternOffset + I];
+ }
+ }
+
+ LocalitySort(&DFList->Df, Cache->HeaderP->GroupCount, sizeof(*DFList));
+
+ // Create the text record parser
+ pkgRecords Recs(*Cache);
+ // Iterate over all the version records and check them
+ for (ExDescFile *J = DFList; J->Df != 0; ++J)
+ {
+ pkgRecords::Parser &P = Recs.Lookup(pkgCache::DescFileIterator(*Cache,J->Df));
+ size_t const PatternOffset = J->ID * NumPatterns;
+
+ if (NamesOnly == false)
+ {
+ std::string const LongDesc = P.LongDesc();
+ for (unsigned I = 0; I < NumPatterns; ++I)
+ {
+ if (PatternMatch[PatternOffset + I] == true)
+ continue;
+ else if (regexec(&Patterns[I],LongDesc.c_str(),0,0,0) == 0)
+ PatternMatch[PatternOffset + I] = true;
+ }
+ }
+
+ bool matchedAll = true;
+ for (unsigned I = 0; I < NumPatterns; ++I)
+ if (PatternMatch[PatternOffset + I] == false)
+ {
+ matchedAll = false;
+ break;
+ }
+
+ if (matchedAll == true)
+ {
+ if (ShowFull == true)
+ {
+ pkgCache::VerFileIterator Vf;
+ auto &Parser = LookupParser(Recs, J->V, Vf);
+ char const *Start, *Stop;
+ Parser.GetRec(Start, Stop);
+ size_t const Length = Stop - Start;
+ DisplayRecordV1(CacheFile, Recs, J->V, Vf, Start, Length, std::cout);
+ }
+ else
+ printf("%s - %s\n",P.Name().c_str(),P.ShortDesc().c_str());
+ }
+ }
+
+ delete [] DFList;
+ delete [] PatternMatch;
+ for (unsigned I = 0; I != NumPatterns; I++)
+ regfree(&Patterns[I]);
+ delete [] Patterns;
+ if (ferror(stdout))
+ return _error->Error("Write to stdout failed");
+ return true;
+}
+ /*}}}*/
+bool DoSearch(CommandLine &CmdL) /*{{{*/
+{
+ int const ShowVersion = _config->FindI("APT::Cache::Search::Version", 1);
+ if (ShowVersion <= 1)
+ return Search(CmdL);
+ return FullTextSearch(CmdL);
+}
+
diff --git a/apt-private/private-search.h b/apt-private/private-search.h
new file mode 100644
index 0000000..518f297
--- /dev/null
+++ b/apt-private/private-search.h
@@ -0,0 +1,12 @@
+#ifndef APT_PRIVATE_SEARCH_H
+#define APT_PRIVATE_SEARCH_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+class CommandLine;
+
+APT_PUBLIC bool DoSearch(CommandLine &CmdL);
+APT_PUBLIC void LocalitySort(pkgCache::VerFile ** const begin, unsigned long long const Count,size_t const Size);
+
+#endif
diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc
new file mode 100644
index 0000000..b69008e
--- /dev/null
+++ b/apt-private/private-show.cc
@@ -0,0 +1,580 @@
+// Includes /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-install.h>
+#include <apt-private/private-show.h>
+
+#include <ostream>
+#include <string>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+pkgRecords::Parser &LookupParser(pkgRecords &Recs, pkgCache::VerIterator const &V, pkgCache::VerFileIterator &Vf) /*{{{*/
+{
+ Vf = V.FileList();
+ for (; Vf.end() == false; ++Vf)
+ if ((Vf.File()->Flags & pkgCache::Flag::NotSource) == 0)
+ break;
+ if (Vf.end() == true)
+ Vf = V.FileList();
+ return Recs.Lookup(Vf);
+}
+ /*}}}*/
+static APT_PURE char const *skipDescription(char const *DescP, size_t const Length, bool fields) /*{{{*/
+{
+ auto const backup = DescP;
+ char const * const TagName = "\nDescription";
+ size_t const TagLen = strlen(TagName);
+ while ((DescP = static_cast<char const *>(memchr(DescP, '\n', Length - (DescP - backup)))) != nullptr)
+ {
+ if (DescP[1] == ' ')
+ DescP += 2;
+ else if (fields && strncmp((char *)DescP, TagName, TagLen) == 0)
+ DescP += TagLen;
+ else
+ break;
+ }
+ if (DescP != NULL)
+ ++DescP;
+ return DescP;
+}
+ /*}}}*/
+static APT_PURE char const *findDescriptionField(char const *DescP, size_t const Length) /*{{{*/
+{
+ auto const backup = DescP;
+ char const * const TagName = "\nDescription";
+ size_t const TagLen = strlen(TagName);
+ while ((DescP = static_cast<char const *>(memchr(DescP, '\n', Length - (DescP - backup)))) != nullptr)
+ {
+ if (strncmp(DescP, TagName, TagLen) == 0)
+ break;
+ else
+ ++DescP;
+ }
+ if (DescP != nullptr)
+ ++DescP;
+ return DescP;
+}
+ /*}}}*/
+static APT_PURE char const *skipColonSpaces(char const *Buffer, size_t const Length) /*{{{*/
+{
+ // skipping withspace before and after the field-value separating colon
+ char const *const Start = Buffer;
+ for (; isspace(*Buffer) != 0 && Length - (Buffer - Start) > 0; ++Buffer)
+ ;
+ if (*Buffer != ':')
+ return nullptr;
+ ++Buffer;
+ for (; isspace(*Buffer) != 0 && Length - (Buffer - Start) > 0; ++Buffer)
+ ;
+ if (Length - (Buffer - Start) <= 0)
+ return nullptr;
+ return Buffer;
+}
+ /*}}}*/
+
+bool DisplayRecordV1(pkgCacheFile &, pkgRecords &Recs, /*{{{*/
+ pkgCache::VerIterator const &V, pkgCache::VerFileIterator const &Vf,
+ char const *Buffer, size_t Length, std::ostream &out)
+{
+ if (unlikely(Length < 4))
+ return false;
+
+ auto const Desc = V.TranslatedDescription();
+ if (Desc.end())
+ {
+ /* This handles the unusual case that we have no description whatsoever.
+ The slightly more common case of only having a short-description embedded
+ in the record could be handled here, but apt supports also having multiple
+ descriptions embedded in the record, so we deal with that case later */
+ if (FileFd::Write(STDOUT_FILENO, Buffer, Length) == false)
+ return false;
+ if (strncmp((Buffer + Length - 4), "\r\n\r\n", 4) != 0 &&
+ strncmp((Buffer + Length - 2), "\n\n", 2) != 0)
+ out << std::endl;
+ return true;
+ }
+
+ // Get a pointer to start of Description field
+ char const *DescP = findDescriptionField(Buffer, Length);
+ if (DescP == nullptr)
+ DescP = Buffer + Length;
+
+ // Write all but Description
+ size_t const untilDesc = DescP - Buffer;
+ if (untilDesc != 0 && FileFd::Write(STDOUT_FILENO, Buffer, untilDesc) == false)
+ return false;
+
+ // Show the right description
+ char desctag[50];
+ auto const langcode = Desc.LanguageCode();
+ if (strcmp(langcode, "") == 0)
+ strcpy(desctag, "\nDescription");
+ else
+ snprintf(desctag, sizeof(desctag), "\nDescription-%s", langcode);
+
+ out << desctag + 1 << ": " << std::flush;
+ auto const Df = Desc.FileList();
+ if (Df.end() == false)
+ {
+ if (Desc.FileList()->File == Vf->File)
+ {
+ /* If we have the file already open look in the buffer for the
+ description we want to display. Note that this might not be the
+ only one we can encounter in this record */
+ char const *Start = DescP;
+ do
+ {
+ if (strncmp(Start, desctag + 1, strlen(desctag) - 1) != 0)
+ continue;
+ Start += strlen(desctag) - 1;
+ Start = skipColonSpaces(Start, Length - (Start - Buffer));
+ if (Start == nullptr)
+ continue;
+ char const *End = skipDescription(Start, Length - (Start - Buffer), false);
+ if (likely(End != nullptr))
+ FileFd::Write(STDOUT_FILENO, Start, End - (Start + 1));
+ break;
+ } while ((Start = findDescriptionField(Start, Length - (Start - Buffer))) != nullptr);
+ }
+ else
+ {
+ pkgRecords::Parser &P = Recs.Lookup(Df);
+ out << P.LongDesc();
+ }
+ }
+
+ out << std::endl << "Description-md5: " << Desc.md5() << std::endl;
+
+ // Find the first field after the description (if there is any)
+ DescP = skipDescription(DescP, Length - (DescP - Buffer), true);
+
+ // write the rest of the buffer, but skip mixed in Descriptions* fields
+ while (DescP != nullptr)
+ {
+ char const *const Start = DescP;
+ char const *End = findDescriptionField(DescP, Length - (DescP - Buffer));
+ if (End == nullptr)
+ {
+ DescP = nullptr;
+ End = Buffer + Length - 1;
+ size_t endings = 0;
+ while (*End == '\n')
+ {
+ --End;
+ if (*End == '\r')
+ --End;
+ ++endings;
+ }
+ if (endings >= 1)
+ {
+ ++End;
+ if (*End == '\r')
+ ++End;
+ }
+ ++End;
+ }
+ else
+ DescP = skipDescription(End + strlen("Description"), Length - (End - Buffer), true);
+
+ size_t const length = End - Start;
+ if (length != 0 && FileFd::Write(STDOUT_FILENO, Start, length) == false)
+ return false;
+ }
+ // write a final newline after the last field
+ out << std::endl;
+
+ return true;
+}
+ /*}}}*/
+static bool DisplayRecordV2(pkgCacheFile &CacheFile, pkgRecords &Recs, /*{{{*/
+ pkgCache::VerIterator const &V, pkgCache::VerFileIterator const &Vf,
+ char const *Buffer, size_t const Length, std::ostream &out)
+{
+ // Check and load the package list file
+ pkgCache::PkgFileIterator I = Vf.File();
+
+ // find matching sources.list metaindex
+ pkgSourceList *SrcList = CacheFile.GetSourceList();
+ pkgIndexFile *Index;
+ if (SrcList->FindIndex(I, Index) == false &&
+ _system->FindIndex(I, Index) == false)
+ return _error->Error("Can not find indexfile for Package %s (%s)",
+ V.ParentPkg().Name(), V.VerStr());
+ std::string source_index_file = Index->Describe(true);
+
+ // Read the record
+ pkgTagSection Tags;
+ if (Tags.Scan(Buffer, Length, true) == false)
+ return _error->Error("Internal Error, Unable to parse a package record");
+
+ // make size nice
+ std::string installed_size;
+ if (Tags.FindULL("Installed-Size") > 0)
+ strprintf(installed_size, "%sB", SizeToStr(Tags.FindULL("Installed-Size") * 1024).c_str());
+ else
+ installed_size = _("unknown");
+ std::string package_size;
+ if (Tags.FindULL("Size") > 0)
+ strprintf(package_size, "%sB", SizeToStr(Tags.FindULL("Size")).c_str());
+ else
+ package_size = _("unknown");
+
+ const char *manual_installed = nullptr;
+ if (V.ParentPkg().CurrentVer() == V)
+ {
+ pkgDepCache *depCache = CacheFile.GetDepCache();
+ if (unlikely(depCache == nullptr))
+ return false;
+ pkgDepCache::StateCache &state = (*depCache)[V.ParentPkg()];
+ manual_installed = !(state.Flags & pkgCache::Flag::Auto) ? "yes" : "no";
+ }
+
+ // FIXME: add verbose that does not do the removal of the tags?
+ std::vector<pkgTagSection::Tag> RW;
+ // delete, apt-cache show has this info and most users do not care
+ RW.push_back(pkgTagSection::Tag::Remove("MD5sum"));
+ RW.push_back(pkgTagSection::Tag::Remove("SHA1"));
+ RW.push_back(pkgTagSection::Tag::Remove("SHA256"));
+ RW.push_back(pkgTagSection::Tag::Remove("SHA512"));
+ RW.push_back(pkgTagSection::Tag::Remove("Filename"));
+ RW.push_back(pkgTagSection::Tag::Remove("Multi-Arch"));
+ RW.push_back(pkgTagSection::Tag::Remove("Architecture"));
+ RW.push_back(pkgTagSection::Tag::Remove("Conffiles"));
+ // we use the translated description
+ RW.push_back(pkgTagSection::Tag::Remove("Description"));
+ RW.push_back(pkgTagSection::Tag::Remove("Description-md5"));
+ // improve
+ RW.push_back(pkgTagSection::Tag::Rewrite("Package", V.ParentPkg().FullName(true)));
+ RW.push_back(pkgTagSection::Tag::Rewrite("Installed-Size", installed_size));
+ RW.push_back(pkgTagSection::Tag::Remove("Size"));
+ RW.push_back(pkgTagSection::Tag::Rewrite("Download-Size", package_size));
+ // add
+ if (manual_installed != nullptr)
+ RW.push_back(pkgTagSection::Tag::Rewrite("APT-Manual-Installed", manual_installed));
+ RW.push_back(pkgTagSection::Tag::Rewrite("APT-Sources", source_index_file));
+
+ FileFd stdoutfd;
+ if (stdoutfd.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly, false) == false ||
+ Tags.Write(stdoutfd, TFRewritePackageOrder, RW) == false || stdoutfd.Close() == false)
+ return _error->Error("Internal Error, Unable to parse a package record");
+
+ // write the description
+ // FIXME: show (optionally) all available translations(?)
+ pkgCache::DescIterator Desc = V.TranslatedDescription();
+ if (Desc.end() == false)
+ {
+ pkgRecords::Parser &P = Recs.Lookup(Desc.FileList());
+ out << "Description: " << P.LongDesc();
+ }
+
+ // write a final newline (after the description)
+ out << std::endl << std::endl;
+
+ return true;
+}
+ /*}}}*/
+bool ShowPackage(CommandLine &CmdL) /*{{{*/
+{
+ pkgCacheFile CacheFile;
+ auto VolatileCmdL = GetAllPackagesAsPseudo(CacheFile.GetSourceList(), CmdL, AddVolatileBinaryFile, "");
+
+ if (unlikely(CacheFile.GetPkgCache() == nullptr))
+ return false;
+ CacheSetHelperVirtuals helper(true, GlobalError::NOTICE);
+ APT::CacheSetHelper::VerSelector const select = _config->FindB("APT::Cache::AllVersions", true) ?
+ APT::CacheSetHelper::ALL : APT::CacheSetHelper::CANDIDATE;
+ if (select == APT::CacheSetHelper::CANDIDATE && CacheFile.GetDepCache() == nullptr)
+ return false;
+
+ APT::VersionList verset;
+ size_t normalPackages = 0;
+ for (auto const &I: VolatileCmdL)
+ {
+ if (I.index == -1)
+ {
+ APT::VersionContainerInterface::FromString(&verset, CacheFile, I.name, select, helper);
+ ++normalPackages;
+ }
+ else
+ {
+ if (select != APT::CacheSetHelper::CANDIDATE && unlikely(CacheFile.GetDepCache() == nullptr))
+ return false;
+ pkgCache::PkgIterator const P = CacheFile->FindPkg(I.name);
+ if (unlikely(P.end()))
+ continue;
+
+ // Set any version providing the .deb as the candidate.
+ for (auto Prv = P.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (I.release.empty())
+ CacheFile->SetCandidateVersion(Prv.OwnerVer());
+ else
+ CacheFile->SetCandidateRelease(Prv.OwnerVer(), I.release);
+
+ // via cacheset to have our usual handling
+ APT::VersionContainerInterface::FromPackage(&verset, CacheFile, Prv.OwnerPkg(), APT::CacheSetHelper::CANDIDATE, helper);
+ }
+ }
+ }
+
+ int const ShowVersion = _config->FindI("APT::Cache::Show::Version", 1);
+ pkgRecords Recs(CacheFile);
+ for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver)
+ {
+ pkgCache::VerFileIterator Vf;
+ auto &Parser = LookupParser(Recs, Ver, Vf);
+ char const *Start, *Stop;
+ Parser.GetRec(Start, Stop);
+ size_t const Length = Stop - Start;
+
+ if (ShowVersion <= 1)
+ {
+ if (DisplayRecordV1(CacheFile, Recs, Ver, Vf, Start, Length, std::cout) == false)
+ return false;
+ }
+ else if (DisplayRecordV2(CacheFile, Recs, Ver, Vf, Start, Length + 1, c1out) == false)
+ return false;
+ }
+
+ if (select == APT::CacheSetHelper::CANDIDATE && normalPackages != 0)
+ {
+ APT::VersionList verset_all;
+ for (auto const &I: VolatileCmdL)
+ {
+ if (I.index == -1)
+ APT::VersionContainerInterface::FromString(&verset_all, CacheFile, I.name, APT::CacheSetHelper::ALL, helper);
+ else
+ {
+ pkgCache::PkgIterator const P = CacheFile->FindPkg(I.name);
+ if (unlikely(P.end()))
+ continue;
+
+ // Set any version providing the .deb as the candidate.
+ for (auto Prv = P.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (I.release.empty())
+ CacheFile->SetCandidateVersion(Prv.OwnerVer());
+ else
+ CacheFile->SetCandidateRelease(Prv.OwnerVer(), I.release);
+
+ // via cacheset to have our usual virtual handling
+ APT::VersionContainerInterface::FromPackage(&verset_all, CacheFile, Prv.OwnerPkg(), APT::CacheSetHelper::CANDIDATE, helper);
+ }
+ }
+ }
+
+ int const records = verset_all.size() - verset.size();
+ if (records > 0)
+ _error->Notice(P_("There is %i additional record. Please use the '-a' switch to see it", "There are %i additional records. Please use the '-a' switch to see them.", records), records);
+ }
+
+ if (_config->FindB("APT::Cache::ShowVirtuals", false) == true)
+ for (APT::PackageSet::const_iterator Pkg = helper.virtualPkgs.begin();
+ Pkg != helper.virtualPkgs.end(); ++Pkg)
+ {
+ c1out << "Package: " << Pkg.FullName(true) << std::endl;
+ c1out << "State: " << _("not a real package (virtual)") << std::endl;
+ // FIXME: show providers, see private-cacheset.h
+ // CacheSetHelperAPTGet::showVirtualPackageErrors()
+ }
+
+ if (verset.empty() == true)
+ {
+ if (helper.virtualPkgs.empty() == true)
+ return _error->Error(_("No packages found"));
+ else
+ _error->Notice(_("No packages found"));
+ }
+
+ return true;
+}
+ /*}}}*/
+static std::string Sha1FromString(std::string const &input) /*{{{*/
+{
+ // XXX: move to hashes.h: HashString::FromString() ?
+ SHA1Summation sha1;
+ sha1.Add(input.c_str(), input.length());
+ return sha1.Result().Value();
+}
+ /*}}}*/
+bool ShowSrcPackage(CommandLine &CmdL) /*{{{*/
+{
+ pkgCacheFile CacheFile;
+ pkgSourceList *List = CacheFile.GetSourceList();
+ if (unlikely(List == NULL))
+ return false;
+
+ // Create the text record parsers
+ pkgSrcRecords SrcRecs(*List);
+ if (_error->PendingError() == true)
+ return false;
+
+ bool found = false;
+ // avoid showing identical records
+ std::set<std::string> seen;
+ for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ {
+ SrcRecs.Restart();
+
+ pkgSrcRecords::Parser *Parse;
+ bool found_this = false;
+ while ((Parse = SrcRecs.Find(*I,false)) != 0) {
+ // SrcRecs.Find() will find both binary and source names
+ if (_config->FindB("APT::Cache::Only-Source", false) == true)
+ if (Parse->Package() != *I)
+ continue;
+ std::string sha1str = Sha1FromString(Parse->AsStr());
+ if (std::find(seen.begin(), seen.end(), sha1str) == seen.end())
+ {
+ std::cout << Parse->AsStr() << std::endl;;
+ found = true;
+ found_this = true;
+ seen.insert(sha1str);
+ }
+ }
+ if (found_this == false) {
+ _error->Warning(_("Unable to locate package %s"),*I);
+ continue;
+ }
+ }
+ if (found == false)
+ _error->Notice(_("No packages found"));
+ return true;
+}
+ /*}}}*/
+// Policy - Show the results of the preferences file /*{{{*/
+bool Policy(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgSourceList const * const SrcList = CacheFile.GetSourceList();
+ if (unlikely(SrcList == nullptr))
+ return false;
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr))
+ return false;
+ pkgPolicy * const Plcy = CacheFile.GetPolicy();
+ if (unlikely(Plcy == nullptr))
+ return false;
+
+ // Print out all of the package files
+ if (CmdL.FileList[1] == 0)
+ {
+ std::cout << _("Package files:") << std::endl;
+ for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F.end() == false; ++F)
+ {
+ if (F.Flagged(pkgCache::Flag::NoPackages))
+ continue;
+ // Locate the associated index files so we can derive a description
+ pkgIndexFile *Indx;
+ if (SrcList->FindIndex(F,Indx) == false &&
+ _system->FindIndex(F,Indx) == false)
+ return _error->Error(_("Cache is out of sync, can't x-ref a package file"));
+
+ printf("%4i %s\n",
+ Plcy->GetPriority(F),Indx->Describe(true).c_str());
+
+ // Print the reference information for the package
+ std::string Str = F.RelStr();
+ if (Str.empty() == false)
+ printf(" release %s\n",F.RelStr().c_str());
+ if (F.Site() != 0 && F.Site()[0] != 0)
+ printf(" origin %s\n",F.Site());
+ }
+
+ // Show any packages have explicit pins
+ std::cout << _("Pinned packages:") << std::endl;
+ pkgCache::PkgIterator I = Cache->PkgBegin();
+ for (;I.end() != true; ++I)
+ {
+ for (pkgCache::VerIterator V = I.VersionList(); !V.end(); ++V) {
+ auto Prio = Plcy->GetPriority(V, false);
+ if (Prio == 0)
+ continue;
+
+ std::cout << " ";
+ // Print the package name and the version we are forcing to
+ ioprintf(std::cout, _("%s -> %s with priority %d\n"), I.FullName(true).c_str(), V.VerStr(), Prio);
+ }
+ }
+ return true;
+ }
+
+ char const * const msgInstalled = _(" Installed: ");
+ char const * const msgCandidate = _(" Candidate: ");
+ short const InstalledLessCandidate =
+ mbstowcs(NULL, msgInstalled, 0) - mbstowcs(NULL, msgCandidate, 0);
+ short const deepInstalled =
+ (InstalledLessCandidate < 0 ? (InstalledLessCandidate*-1) : 0) - 1;
+ short const deepCandidate =
+ (InstalledLessCandidate > 0 ? (InstalledLessCandidate) : 0) - 1;
+
+ // Print out detailed information for each package
+ APT::CacheSetHelper helper(true, GlobalError::NOTICE);
+ APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+ for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+ {
+ std::cout << Pkg.FullName(true) << ":" << std::endl;
+
+ // Installed version
+ std::cout << msgInstalled << OutputInDepth(deepInstalled, " ");
+ if (Pkg->CurrentVer == 0)
+ std::cout << _("(none)") << std::endl;
+ else
+ std::cout << Pkg.CurrentVer().VerStr() << std::endl;
+
+ // Candidate Version
+ std::cout << msgCandidate << OutputInDepth(deepCandidate, " ");
+ pkgCache::VerIterator V = Plcy->GetCandidateVer(Pkg);
+ if (V.end() == true)
+ std::cout << _("(none)") << std::endl;
+ else
+ std::cout << V.VerStr() << std::endl;
+
+ // Show the priority tables
+ std::cout << _(" Version table:") << std::endl;
+ for (V = Pkg.VersionList(); V.end() == false; ++V)
+ {
+ if (Pkg.CurrentVer() == V)
+ std::cout << " *** " << V.VerStr();
+ else
+ std::cout << " " << V.VerStr();
+
+ std::cout << " " << Plcy->GetPriority(V) << std::endl;
+ for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; ++VF)
+ {
+ // Locate the associated index files so we can derive a description
+ pkgIndexFile *Indx;
+ if (SrcList->FindIndex(VF.File(),Indx) == false &&
+ _system->FindIndex(VF.File(),Indx) == false)
+ return _error->Error(_("Cache is out of sync, can't x-ref a package file"));
+ printf(" %4i %s\n",Plcy->GetPriority(VF.File()),
+ Indx->Describe(true).c_str());
+ }
+ }
+ }
+ return true;
+}
+ /*}}}*/
diff --git a/apt-private/private-show.h b/apt-private/private-show.h
new file mode 100644
index 0000000..9e5fa99
--- /dev/null
+++ b/apt-private/private-show.h
@@ -0,0 +1,22 @@
+#ifndef APT_PRIVATE_SHOW_H
+#define APT_PRIVATE_SHOW_H
+
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+
+#include <iostream>
+
+class CommandLine;
+class pkgCacheFile;
+
+APT_PUBLIC bool ShowPackage(CommandLine &CmdL);
+APT_PUBLIC bool ShowSrcPackage(CommandLine &CmdL);
+APT_PUBLIC bool Policy(CommandLine &CmdL);
+
+pkgRecords::Parser &LookupParser(pkgRecords &Recs, pkgCache::VerIterator const &V, pkgCache::VerFileIterator &Vf);
+bool DisplayRecordV1(pkgCacheFile &CacheFile, pkgRecords &Recs,
+ pkgCache::VerIterator const &V, pkgCache::VerFileIterator const &Vf,
+ char const *Buffer, size_t const Length, std::ostream &out);
+
+#endif
diff --git a/apt-private/private-source.cc b/apt-private/private-source.cc
new file mode 100644
index 0000000..c8a48a7
--- /dev/null
+++ b/apt-private/private-source.cc
@@ -0,0 +1,820 @@
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/version.h>
+
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-download.h>
+#include <apt-private/private-install.h>
+#include <apt-private/private-source.h>
+
+#include <apt-pkg/debindexfile.h>
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <iostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// GetReleaseFileForSourceRecord - Return Suite for the given srcrecord /*{{{*/
+static pkgCache::RlsFileIterator GetReleaseFileForSourceRecord(CacheFile &CacheFile,
+ pkgSourceList const * const SrcList, pkgSrcRecords::Parser const * const Parse)
+{
+ // try to find release
+ const pkgIndexFile& CurrentIndexFile = Parse->Index();
+
+ for (pkgSourceList::const_iterator S = SrcList->begin();
+ S != SrcList->end(); ++S)
+ {
+ std::vector<pkgIndexFile *> *Indexes = (*S)->GetIndexFiles();
+ for (std::vector<pkgIndexFile *>::const_iterator IF = Indexes->begin();
+ IF != Indexes->end(); ++IF)
+ {
+ if (&CurrentIndexFile == (*IF))
+ return (*S)->FindInCache(CacheFile, false);
+ }
+ }
+ return pkgCache::RlsFileIterator(CacheFile);
+}
+ /*}}}*/
+// FindSrc - Find a source record /*{{{*/
+static pkgSrcRecords::Parser *FindSrc(const char *Name,
+ pkgSrcRecords &SrcRecs,std::string &Src,
+ CacheFile &Cache)
+{
+ std::string VerTag, UserRequestedVerTag;
+ std::string ArchTag = "";
+ std::string RelTag = _config->Find("APT::Default-Release");
+ std::string TmpSrc = Name;
+
+ // extract release
+ size_t found = TmpSrc.find_last_of("/");
+ if (found != std::string::npos)
+ {
+ RelTag = TmpSrc.substr(found+1);
+ TmpSrc = TmpSrc.substr(0,found);
+ }
+ // extract the version
+ found = TmpSrc.find_last_of("=");
+ if (found != std::string::npos)
+ {
+ VerTag = UserRequestedVerTag = TmpSrc.substr(found+1);
+ TmpSrc = TmpSrc.substr(0,found);
+ }
+ // extract arch
+ found = TmpSrc.find_last_of(":");
+ if (found != std::string::npos)
+ {
+ ArchTag = TmpSrc.substr(found+1);
+ TmpSrc = TmpSrc.substr(0,found);
+ }
+
+ /* Lookup the version of the package we would install if we were to
+ install a version and determine the source package name, then look
+ in the archive for a source package of the same name. */
+ bool MatchSrcOnly = _config->FindB("APT::Get::Only-Source");
+ pkgCache::PkgIterator Pkg;
+ if (ArchTag != "")
+ Pkg = Cache.GetPkgCache()->FindPkg(TmpSrc, ArchTag);
+ else
+ Pkg = Cache.GetPkgCache()->FindPkg(TmpSrc);
+
+ // if we can't find a package but the user qualified with a arch,
+ // error out here
+ if (Pkg.end() && ArchTag != "")
+ {
+ Src = Name;
+ _error->Error(_("Can not find a package for architecture '%s'"),
+ ArchTag.c_str());
+ return 0;
+ }
+
+ if (MatchSrcOnly == false && Pkg.end() == false)
+ {
+ if(VerTag != "" || RelTag != "" || ArchTag != "")
+ {
+ bool fuzzy = false;
+ // we have a default release, try to locate the pkg. we do it like
+ // this because GetCandidateVer() will not "downgrade", that means
+ // "apt-get source -t stable apt" won't work on a unstable system
+ for (pkgCache::VerIterator Ver = Pkg.VersionList();; ++Ver)
+ {
+ // try first only exact matches, later fuzzy matches
+ if (Ver.end() == true)
+ {
+ if (fuzzy == true)
+ break;
+ fuzzy = true;
+ Ver = Pkg.VersionList();
+ // exit right away from the Pkg.VersionList() loop if we
+ // don't have any versions
+ if (Ver.end() == true)
+ break;
+ }
+
+ // ignore arches that are not for us
+ if (ArchTag != "" && Ver.Arch() != ArchTag)
+ continue;
+
+ // pick highest version for the arch unless the user wants
+ // something else
+ if (ArchTag != "" && VerTag == "" && RelTag == "")
+ if(Cache.GetPkgCache()->VS->CmpVersion(VerTag, Ver.VerStr()) < 0)
+ VerTag = Ver.VerStr();
+
+ // We match against a concrete version (or a part of this version)
+ if (VerTag.empty() == false &&
+ (fuzzy == true || Cache.GetPkgCache()->VS->CmpVersion(VerTag, Ver.VerStr()) != 0) && // exact match
+ (fuzzy == false || strncmp(VerTag.c_str(), Ver.VerStr(), VerTag.size()) != 0)) // fuzzy match
+ continue;
+
+ for (pkgCache::VerFileIterator VF = Ver.FileList();
+ VF.end() == false; ++VF)
+ {
+ /* If this is the status file, and the current version is not the
+ version in the status file (ie it is not installed, or somesuch)
+ then it is not a candidate for installation, ever. This weeds
+ out bogus entries that may be due to config-file states, or
+ other. */
+ if ((VF.File()->Flags & pkgCache::Flag::NotSource) ==
+ pkgCache::Flag::NotSource && Pkg.CurrentVer() != Ver)
+ continue;
+
+ // or we match against a release
+ if(VerTag.empty() == false ||
+ (VF.File().Archive() != 0 && VF.File().Archive() == RelTag) ||
+ (VF.File().Codename() != 0 && VF.File().Codename() == RelTag))
+ {
+ // the Version we have is possibly fuzzy or includes binUploads,
+ // so we use the Version of the SourcePkg (empty if same as package)
+ Src = Ver.SourcePkgName();
+ VerTag = Ver.SourceVerStr();
+ break;
+ }
+ }
+ if (Src.empty() == false)
+ break;
+ }
+ }
+
+ if (Src.empty() == true && ArchTag.empty() == false)
+ {
+ if (VerTag.empty() == false)
+ _error->Error(_("Can not find a package '%s' with version '%s'"),
+ Pkg.FullName().c_str(), VerTag.c_str());
+ if (RelTag.empty() == false)
+ _error->Error(_("Can not find a package '%s' with release '%s'"),
+ Pkg.FullName().c_str(), RelTag.c_str());
+ Src = Name;
+ return 0;
+ }
+
+
+ if (Src.empty() == true)
+ {
+ // if we don't have found a fitting package yet so we will
+ // choose a good candidate and proceed with that.
+ // Maybe we will find a source later on with the right VerTag
+ // or RelTag
+ if (Cache.BuildPolicy() == false)
+ return nullptr;
+ pkgPolicy * const Policy = Cache.GetPolicy();
+ pkgCache::VerIterator const Ver = Policy->GetCandidateVer(Pkg);
+ if (Ver.end() == false)
+ {
+ if (strcmp(Ver.SourcePkgName(),Ver.ParentPkg().Name()) != 0)
+ Src = Ver.SourcePkgName();
+ if (VerTag.empty() == true && strcmp(Ver.SourceVerStr(),Ver.VerStr()) != 0)
+ VerTag = Ver.SourceVerStr();
+ }
+ }
+ }
+
+ if (Src.empty() == true)
+ {
+ Src = TmpSrc;
+ }
+ else
+ {
+ /* if we have a source pkg name, make sure to only search
+ for srcpkg names, otherwise apt gets confused if there
+ is a binary package "pkg1" and a source package "pkg1"
+ with the same name but that comes from different packages */
+ MatchSrcOnly = true;
+ if (Src != TmpSrc)
+ {
+ ioprintf(c1out, _("Picking '%s' as source package instead of '%s'\n"), Src.c_str(), TmpSrc.c_str());
+ }
+ }
+
+ // The best hit
+ pkgSrcRecords::Parser *Last = 0;
+ unsigned long Offset = 0;
+ std::string Version;
+ pkgSourceList const * const SrcList = Cache.GetSourceList();
+
+ /* Iterate over all of the hits, which includes the resulting
+ binary packages in the search */
+ pkgSrcRecords::Parser *Parse;
+ while (true)
+ {
+ SrcRecs.Restart();
+ while ((Parse = SrcRecs.Find(Src.c_str(), MatchSrcOnly)) != 0)
+ {
+ const std::string Ver = Parse->Version();
+
+ // See if we need to look for a specific release tag
+ if (RelTag.empty() == false && UserRequestedVerTag.empty() == true)
+ {
+ pkgCache::RlsFileIterator const Rls = GetReleaseFileForSourceRecord(Cache, SrcList, Parse);
+ if (Rls.end() == false)
+ {
+ if ((Rls->Archive != 0 && RelTag != Rls.Archive()) &&
+ (Rls->Codename != 0 && RelTag != Rls.Codename()))
+ continue;
+ }
+ }
+
+ // Ignore all versions which doesn't fit
+ if (VerTag.empty() == false &&
+ Cache.GetPkgCache()->VS->CmpVersion(VerTag, Ver) != 0) // exact match
+ continue;
+
+ // Newer version or an exact match? Save the hit
+ if (Last == 0 || Cache.GetPkgCache()->VS->CmpVersion(Version,Ver) < 0) {
+ Last = Parse;
+ Offset = Parse->Offset();
+ Version = Ver;
+ }
+
+ // was the version check above an exact match?
+ // If so, we don't need to look further
+ if (VerTag.empty() == false && (VerTag == Ver))
+ break;
+ }
+ if (UserRequestedVerTag == "" && Version != "" && RelTag != "")
+ ioprintf(c1out, "Selected version '%s' (%s) for %s\n",
+ Version.c_str(), RelTag.c_str(), Src.c_str());
+
+ if (Last != 0 || VerTag.empty() == true)
+ break;
+ _error->Error(_("Can not find version '%s' of package '%s'"), VerTag.c_str(), TmpSrc.c_str());
+ return 0;
+ }
+
+ if (Last == 0 || Last->Jump(Offset) == false)
+ return 0;
+
+ return Last;
+}
+ /*}}}*/
+// DoSource - Fetch a source archive /*{{{*/
+// ---------------------------------------------------------------------
+/* Fetch source packages */
+struct DscFile
+{
+ std::string Package;
+ std::string Version;
+ std::string Dsc;
+};
+bool DoSource(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() <= 1)
+ return _error->Error(_("Must specify at least one package to fetch source for"));
+
+ CacheFile Cache;
+ if (Cache.BuildCaches(false) == false)
+ return false;
+
+ // Create the text record parsers
+ pkgSourceList * const List = Cache.GetSourceList();
+ pkgSrcRecords SrcRecs(*List);
+ if (_error->PendingError() == true)
+ return false;
+
+ std::vector<DscFile> Dsc;
+ Dsc.reserve(CmdL.FileSize());
+
+ // insert all downloaded uris into this set to avoid downloading them
+ // twice
+ std::set<std::string> queued;
+
+ // Diff only mode only fetches .diff files
+ bool const diffOnly = _config->FindB("APT::Get::Diff-Only", false);
+ // Tar only mode only fetches .tar files
+ bool const tarOnly = _config->FindB("APT::Get::Tar-Only", false);
+ // Dsc only mode only fetches .dsc files
+ bool const dscOnly = _config->FindB("APT::Get::Dsc-Only", false);
+
+ // Load the requestd sources into the fetcher
+ aptAcquireWithTextStatus Fetcher;
+ std::vector<std::string> UntrustedList;
+ for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ {
+ std::string Src;
+ pkgSrcRecords::Parser *Last = FindSrc(*I,SrcRecs,Src,Cache);
+ if (Last == 0) {
+ return _error->Error(_("Unable to find a source package for %s"),Src.c_str());
+ }
+
+ if (Last->Index().IsTrusted() == false)
+ UntrustedList.push_back(Src);
+
+ std::string srec = Last->AsStr();
+ std::string::size_type pos = srec.find("\nVcs-");
+ while (pos != std::string::npos)
+ {
+ pos += strlen("\nVcs-");
+ std::string vcs = srec.substr(pos,srec.find(":",pos)-pos);
+ if(vcs == "Browser")
+ {
+ pos = srec.find("\nVcs-", pos);
+ continue;
+ }
+ pos += vcs.length()+2;
+ std::string::size_type epos = srec.find("\n", pos);
+ std::string const uri = srec.substr(pos,epos-pos);
+ ioprintf(c1out, _("NOTICE: '%s' packaging is maintained in "
+ "the '%s' version control system at:\n"
+ "%s\n"),
+ Src.c_str(), vcs.c_str(), uri.c_str());
+ std::string vcscmd;
+ if (vcs == "Bzr")
+ vcscmd = "bzr branch " + uri;
+ else if (vcs == "Git")
+ vcscmd = "git clone " + uri;
+
+ if (vcscmd.empty() == false)
+ ioprintf(c1out,_("Please use:\n%s\n"
+ "to retrieve the latest (possibly unreleased) "
+ "updates to the package.\n"),
+ vcscmd.c_str());
+ break;
+ }
+
+ // Back track
+ std::vector<pkgSrcRecords::File2> Lst;
+ if (Last->Files2(Lst) == false) {
+ return false;
+ }
+
+ DscFile curDsc;
+ // Load them into the fetcher
+ for (std::vector<pkgSrcRecords::File2>::const_iterator I = Lst.begin();
+ I != Lst.end(); ++I)
+ {
+ // Try to guess what sort of file it is we are getting.
+ if (I->Type == "dsc")
+ {
+ curDsc.Package = Last->Package();
+ curDsc.Version = Last->Version();
+ curDsc.Dsc = flNotDir(I->Path);
+ }
+
+ // Handle the only options so that multiple can be used at once
+ if (diffOnly == true || tarOnly == true || dscOnly == true)
+ {
+ if ((diffOnly == true && I->Type == "diff") ||
+ (tarOnly == true && I->Type == "tar") ||
+ (dscOnly == true && I->Type == "dsc"))
+ ; // Fine, we want this file downloaded
+ else
+ continue;
+ }
+
+ // don't download the same uri twice (should this be moved to
+ // the fetcher interface itself?)
+ if(queued.find(Last->Index().ArchiveURI(I->Path)) != queued.end())
+ continue;
+ queued.insert(Last->Index().ArchiveURI(I->Path));
+
+ // check if we have a file with that md5 sum already localy
+ std::string localFile = flNotDir(I->Path);
+ if (FileExists(localFile) == true)
+ if(I->Hashes.VerifyFile(localFile) == true)
+ {
+ ioprintf(c1out,_("Skipping already downloaded file '%s'\n"),
+ localFile.c_str());
+ continue;
+ }
+
+ // see if we have a hash (Acquire::ForceHash is the only way to have none)
+ if (I->Hashes.usable() == false && _config->FindB("APT::Get::AllowUnauthenticated",false) == false)
+ {
+ ioprintf(c1out, "Skipping download of file '%s' as requested hashsum is not available for authentication\n",
+ localFile.c_str());
+ curDsc.Dsc.clear();
+ continue;
+ }
+
+ new pkgAcqFile(&Fetcher,Last->Index().ArchiveURI(I->Path),
+ I->Hashes, I->FileSize, Last->Index().SourceInfo(*Last,*I), Src);
+ }
+ Dsc.push_back(std::move(curDsc));
+ }
+
+ // Display statistics
+ unsigned long long FetchBytes = Fetcher.FetchNeeded();
+ unsigned long long FetchPBytes = Fetcher.PartialPresent();
+ unsigned long long DebBytes = Fetcher.TotalNeeded();
+
+ if (CheckFreeSpaceBeforeDownload(".", (FetchBytes - FetchPBytes)) == false)
+ return false;
+
+ // Number of bytes
+ if (DebBytes != FetchBytes)
+ //TRANSLATOR: The required space between number and unit is already included
+ // in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+ ioprintf(c1out,_("Need to get %sB/%sB of source archives.\n"),
+ SizeToStr(FetchBytes).c_str(),SizeToStr(DebBytes).c_str());
+ else
+ //TRANSLATOR: The required space between number and unit is already included
+ // in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+ ioprintf(c1out,_("Need to get %sB of source archives.\n"),
+ SizeToStr(DebBytes).c_str());
+
+ if (_config->FindB("APT::Get::Simulate",false) == true)
+ {
+ for (auto const &D: Dsc)
+ ioprintf(std::cout, _("Fetch source %s\n"), D.Package.c_str());
+ return true;
+ }
+
+ // Just print out the uris an exit if the --print-uris flag was used
+ if (_config->FindB("APT::Get::Print-URIs") == true)
+ {
+ pkgAcquire::UriIterator I = Fetcher.UriBegin();
+ for (; I != Fetcher.UriEnd(); ++I)
+ std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
+ return true;
+ }
+
+ // check authentication status of the source as well
+ if (UntrustedList.empty() == false && AuthPrompt(UntrustedList, false) == false)
+ return false;
+
+ // Run it
+ bool Failed = false;
+ if (AcquireRun(Fetcher, 0, &Failed, NULL) == false || Failed == true)
+ return _error->Error(_("Failed to fetch some archives."));
+
+ if (diffOnly || tarOnly || dscOnly || _config->FindB("APT::Get::Download-only",false) == true)
+ {
+ c1out << _("Download complete and in download only mode") << std::endl;
+ return true;
+ }
+
+ bool const fixBroken = _config->FindB("APT::Get::Fix-Broken", false);
+ bool SaidCheckIfDpkgDev = false;
+ for (auto const &D: Dsc)
+ {
+ if (unlikely(D.Dsc.empty() == true))
+ continue;
+ std::string const Dir = D.Package + '-' + Cache.GetPkgCache()->VS->UpstreamVersion(D.Version.c_str());
+
+ // See if the package is already unpacked
+ struct stat Stat;
+ if (fixBroken == false && stat(Dir.c_str(),&Stat) == 0 &&
+ S_ISDIR(Stat.st_mode) != 0)
+ {
+ ioprintf(c0out ,_("Skipping unpack of already unpacked source in %s\n"),
+ Dir.c_str());
+ }
+ else
+ {
+ // Call dpkg-source
+ std::string const sourceopts = _config->Find("DPkg::Source-Options", "--no-check -x");
+ std::string S;
+ strprintf(S, "%s %s %s",
+ _config->Find("Dir::Bin::dpkg-source","dpkg-source").c_str(),
+ sourceopts.c_str(), D.Dsc.c_str());
+ if (system(S.c_str()) != 0)
+ {
+ _error->Error(_("Unpack command '%s' failed.\n"), S.c_str());
+ if (SaidCheckIfDpkgDev == false)
+ {
+ _error->Notice(_("Check if the 'dpkg-dev' package is installed.\n"));
+ SaidCheckIfDpkgDev = true;
+ }
+ continue;
+ }
+ }
+
+ // Try to compile it with dpkg-buildpackage
+ if (_config->FindB("APT::Get::Compile",false) == true)
+ {
+ std::string buildopts = _config->Find("APT::Get::Host-Architecture");
+ if (buildopts.empty() == false)
+ buildopts = "-a" + buildopts + " ";
+
+ // get all active build profiles
+ std::string const profiles = APT::Configuration::getBuildProfilesString();
+ if (profiles.empty() == false)
+ buildopts.append(" -P").append(profiles).append(" ");
+
+ buildopts.append(_config->Find("DPkg::Build-Options","-b -uc"));
+
+ // Call dpkg-buildpackage
+ std::string S;
+ strprintf(S, "cd %s && %s %s",
+ Dir.c_str(),
+ _config->Find("Dir::Bin::dpkg-buildpackage","dpkg-buildpackage").c_str(),
+ buildopts.c_str());
+
+ if (system(S.c_str()) != 0)
+ {
+ _error->Error(_("Build command '%s' failed.\n"), S.c_str());
+ continue;
+ }
+ }
+ }
+ return true;
+}
+ /*}}}*/
+// DoBuildDep - Install/removes packages to satisfy build dependencies /*{{{*/
+// ---------------------------------------------------------------------
+/* This function will look at the build depends list of the given source
+ package and install the necessary packages to make it true, or fail. */
+static std::vector<pkgSrcRecords::Parser::BuildDepRec> GetBuildDeps(pkgSrcRecords::Parser * const Last,
+ char const * const Src, bool const StripMultiArch, std::string const &hostArch)
+{
+ std::vector<pkgSrcRecords::Parser::BuildDepRec> BuildDeps;
+ // FIXME: Can't specify architecture to use for [wildcard] matching, so switch default arch temporary
+ if (hostArch.empty() == false)
+ {
+ std::string nativeArch = _config->Find("APT::Architecture");
+ _config->Set("APT::Architecture", hostArch);
+ bool Success = Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch);
+ _config->Set("APT::Architecture", nativeArch);
+ if (Success == false)
+ {
+ _error->Error(_("Unable to get build-dependency information for %s"), Src);
+ return {};
+ }
+ }
+ else if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch) == false)
+ {
+ _error->Error(_("Unable to get build-dependency information for %s"), Src);
+ return {};
+ }
+
+ if (BuildDeps.empty() == true)
+ ioprintf(c1out,_("%s has no build depends.\n"), Src);
+
+ return BuildDeps;
+}
+static void WriteBuildDependencyPackage(std::ostringstream &buildDepsPkgFile,
+ std::string const &PkgName, std::string const &Arch,
+ std::vector<pkgSrcRecords::Parser::BuildDepRec> const &Dependencies)
+{
+ buildDepsPkgFile << "Package: " << PkgName << "\n"
+ << "Architecture: " << Arch << "\n"
+ << "Version: 1\n";
+
+ bool const IndepOnly = _config->FindB("APT::Get::Indep-Only", false);
+ std::string depends, conflicts;
+ for (auto const &dep: Dependencies)
+ {
+ // ArchOnly is handled while parsing the dependencies on input
+ if (IndepOnly && (dep.Type == pkgSrcRecords::Parser::BuildDependArch ||
+ dep.Type == pkgSrcRecords::Parser::BuildConflictArch))
+ continue;
+ std::string * type;
+ if (dep.Type == pkgSrcRecords::Parser::BuildConflict ||
+ dep.Type == pkgSrcRecords::Parser::BuildConflictIndep ||
+ dep.Type == pkgSrcRecords::Parser::BuildConflictArch)
+ type = &conflicts;
+ else
+ type = &depends;
+
+ type->append(" ").append(dep.Package);
+ if (dep.Version.empty() == false)
+ type->append(" (").append(pkgCache::CompTypeDeb(dep.Op)).append(" ").append(dep.Version).append(")");
+ if ((dep.Op & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ type->append("\n |");
+ }
+ else
+ type->append(",\n");
+ }
+ if (depends.empty() == false)
+ buildDepsPkgFile << "Depends:\n" << depends;
+ if (conflicts.empty() == false)
+ buildDepsPkgFile << "Conflicts:\n" << conflicts;
+ buildDepsPkgFile << "\n";
+}
+bool DoBuildDep(CommandLine &CmdL)
+{
+ bool StripMultiArch;
+ std::string hostArch = _config->Find("APT::Get::Host-Architecture");
+ if (hostArch.empty() == false)
+ {
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ if (std::find(archs.begin(), archs.end(), hostArch) == archs.end())
+ return _error->Error(_("No architecture information available for %s. See apt.conf(5) APT::Architectures for setup"), hostArch.c_str());
+ StripMultiArch = false;
+ }
+ else
+ StripMultiArch = true;
+ auto const nativeArch = _config->Find("APT::Architecture");
+ std::string const pseudoArch = hostArch.empty() ? nativeArch : hostArch;
+
+ CacheFile Cache;
+ auto VolatileCmdL = GetPseudoPackages(Cache.GetSourceList(), CmdL, AddVolatileSourceFile, pseudoArch);
+
+ _config->Set("APT::Install-Recommends", false);
+
+ if (CmdL.FileSize() <= 1 && VolatileCmdL.empty())
+ return _error->Error(_("Must specify at least one package to check builddeps for"));
+
+ std::ostringstream buildDepsPkgFile;
+ std::vector<PseudoPkg> pseudoPkgs;
+ // deal with the build essentials first
+ {
+ std::vector<pkgSrcRecords::Parser::BuildDepRec> BuildDeps;
+ for (auto && opt: _config->FindVector("APT::Build-Essential"))
+ {
+ if (opt.empty())
+ continue;
+ pkgSrcRecords::Parser::BuildDepRec rec;
+ rec.Package = std::move(opt);
+ rec.Type = pkgSrcRecords::Parser::BuildDependIndep;
+ rec.Op = 0;
+ BuildDeps.push_back(rec);
+ }
+ std::string const pseudo = "builddeps:essentials";
+ WriteBuildDependencyPackage(buildDepsPkgFile, pseudo, nativeArch, BuildDeps);
+ pseudoPkgs.emplace_back(pseudo, nativeArch, "");
+ }
+
+ // Read the source list
+ if (Cache.BuildSourceList() == false)
+ return false;
+ pkgSourceList *List = Cache.GetSourceList();
+
+ {
+ auto const VolatileSources = List->GetVolatileFiles();
+ for (auto &&pkg : VolatileCmdL)
+ {
+ if (unlikely(pkg.index == -1))
+ {
+ _error->Error(_("Unable to find a source package for %s"), pkg.name.c_str());
+ continue;
+ }
+ if (DirectoryExists(pkg.name))
+ ioprintf(c1out, _("Note, using directory '%s' to get the build dependencies\n"), pkg.name.c_str());
+ else
+ ioprintf(c1out, _("Note, using file '%s' to get the build dependencies\n"), pkg.name.c_str());
+ std::unique_ptr<pkgSrcRecords::Parser> Last(VolatileSources[pkg.index]->CreateSrcParser());
+ if (Last == nullptr)
+ {
+ _error->Error(_("Unable to find a source package for %s"), pkg.name.c_str());
+ continue;
+ }
+
+ auto pseudo = std::string("builddeps:") + pkg.name;
+ WriteBuildDependencyPackage(buildDepsPkgFile, pseudo, pseudoArch,
+ GetBuildDeps(Last.get(), pkg.name.c_str(), StripMultiArch, hostArch));
+ pkg.name = std::move(pseudo);
+ pseudoPkgs.push_back(std::move(pkg));
+ }
+ VolatileCmdL.clear();
+ }
+
+ bool const WantLock = _config->FindB("APT::Get::Print-URIs", false) == false;
+ if (CmdL.FileList[1] != 0)
+ {
+ if (Cache.BuildCaches(WantLock) == false)
+ return false;
+ // Create the text record parsers
+ pkgSrcRecords SrcRecs(*List);
+ if (_error->PendingError() == true)
+ return false;
+ for (const char **I = CmdL.FileList + 1; *I != 0; ++I)
+ {
+ std::string Src;
+ pkgSrcRecords::Parser * const Last = FindSrc(*I,SrcRecs,Src,Cache);
+ if (Last == nullptr)
+ return _error->Error(_("Unable to find a source package for %s"), *I);
+
+ std::string const pseudo = std::string("builddeps:") + Src;
+ WriteBuildDependencyPackage(buildDepsPkgFile, pseudo, pseudoArch,
+ GetBuildDeps(Last, Src.c_str(), StripMultiArch, hostArch));
+ std::string reltag = *I;
+ size_t found = reltag.find_last_of("/");
+ if (found == std::string::npos)
+ reltag.clear();
+ else
+ reltag.erase(0, found + 1);
+ pseudoPkgs.emplace_back(pseudo, pseudoArch, std::move(reltag));
+ }
+ }
+
+ Cache.AddIndexFile(new debStringPackageIndex(buildDepsPkgFile.str()));
+
+ if (Cache.Open(WantLock) == false)
+ return false;
+ pkgProblemResolver Fix(Cache.GetDepCache());
+
+ APT::PackageVector removeAgain;
+ {
+ pkgDepCache::ActionGroup group(Cache);
+ TryToInstall InstallAction(Cache, &Fix, false);
+ std::list<std::pair<pkgCache::VerIterator, std::string>> candSwitch;
+ for (auto const &pkg: pseudoPkgs)
+ {
+ pkgCache::PkgIterator const Pkg = Cache->FindPkg(pkg.name, pkg.arch);
+ if (Pkg.end())
+ continue;
+ if (pkg.release.empty())
+ Cache->SetCandidateVersion(Pkg.VersionList());
+ else
+ candSwitch.emplace_back(Pkg.VersionList(), pkg.release);
+ }
+ if (candSwitch.empty() == false)
+ InstallAction.propergateReleaseCandiateSwitching(candSwitch, c0out);
+ for (auto const &pkg: pseudoPkgs)
+ {
+ pkgCache::PkgIterator const Pkg = Cache->FindPkg(pkg.name, pkg.arch);
+ if (Pkg.end())
+ continue;
+ InstallAction(Cache[Pkg].CandidateVerIter(Cache));
+ removeAgain.push_back(Pkg);
+ }
+ InstallAction.doAutoInstall();
+
+ OpTextProgress Progress(*_config);
+ bool const resolver_fail = Fix.Resolve(true, &Progress);
+ if (resolver_fail == false && Cache->BrokenCount() == 0)
+ return false;
+ if (CheckNothingBroken(Cache) == false)
+ return false;
+ }
+ if (DoAutomaticRemove(Cache) == false)
+ return false;
+
+ {
+ pkgDepCache::ActionGroup group(Cache);
+ if (_config->FindB("APT::Get::Build-Dep-Automatic", false) == false)
+ {
+ for (auto const &pkg: removeAgain)
+ {
+ auto const instVer = Cache[pkg].InstVerIter(Cache);
+ if (unlikely(instVer.end() == true))
+ continue;
+ for (auto D = instVer.DependsList(); D.end() != true; ++D)
+ {
+ if (D->Type != pkgCache::Dep::Depends || D.IsMultiArchImplicit())
+ continue;
+ APT::VersionList verlist = APT::VersionList::FromDependency(Cache, D, APT::CacheSetHelper::CANDIDATE);
+ for (auto const &V : verlist)
+ {
+ auto const P = V.ParentPkg();
+ if (Cache[P].InstallVer != V)
+ continue;
+ Cache->MarkAuto(P, false);
+ }
+ }
+ }
+ }
+ for (auto const &pkg: removeAgain)
+ Cache->MarkDelete(pkg, false, 0, true);
+ }
+
+ pseudoPkgs.clear();
+ if (_error->PendingError() || InstallPackages(Cache, false, true) == false)
+ return _error->Error(_("Failed to process build dependencies"));
+ return true;
+}
+ /*}}}*/
diff --git a/apt-private/private-source.h b/apt-private/private-source.h
new file mode 100644
index 0000000..d00c53e
--- /dev/null
+++ b/apt-private/private-source.h
@@ -0,0 +1,11 @@
+#ifndef APT_PRIVATE_SOURCE_H
+#define APT_PRIVATE_SOURCE_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool DoSource(CommandLine &CmdL);
+APT_PUBLIC bool DoBuildDep(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-sources.cc b/apt-private/private-sources.cc
new file mode 100644
index 0000000..713327f
--- /dev/null
+++ b/apt-private/private-sources.cc
@@ -0,0 +1,105 @@
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-output.h>
+#include <apt-private/private-sources.h>
+#include <apt-private/private-utils.h>
+
+#include <iostream>
+#include <string>
+#include <stddef.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+
+/* Interface discussion with donkult (for the future):
+ apt [add-{archive,release,component}|edit|change-release|disable]-sources
+ and be clever and work out stuff from the Release file
+*/
+
+// EditSource - EditSourcesList /*{{{*/
+class APT_HIDDEN ScopedGetLock {
+public:
+ int fd;
+ ScopedGetLock(std::string const &filename) : fd(GetLock(filename)) {}
+ ~ScopedGetLock() { close(fd); }
+};
+bool EditSources(CommandLine &CmdL)
+{
+ std::string sourceslist;
+ if (CmdL.FileList[1] != NULL)
+ {
+ sourceslist = _config->FindDir("Dir::Etc::sourceparts") + CmdL.FileList[1];
+ if (!APT::String::Endswith(sourceslist, ".list"))
+ sourceslist += ".list";
+ } else {
+ sourceslist = _config->FindFile("Dir::Etc::sourcelist");
+ }
+ HashString before;
+ if (FileExists(sourceslist))
+ before.FromFile(sourceslist);
+ else
+ {
+ FileFd filefd;
+ if (filefd.Open(sourceslist, FileFd::Create | FileFd::WriteOnly, FileFd::None, 0644) == false)
+ return false;
+ }
+
+ ScopedGetLock lock(sourceslist);
+ if (lock.fd < 0)
+ return false;
+
+ bool res;
+ bool file_changed = false;
+ do {
+ if (EditFileInSensibleEditor(sourceslist) == false)
+ return false;
+ if (before.empty())
+ {
+ struct stat St;
+ if (stat(sourceslist.c_str(), &St) == 0 && St.st_size == 0)
+ RemoveFile("edit-sources", sourceslist);
+ }
+ else if (FileExists(sourceslist) && !before.VerifyFile(sourceslist))
+ {
+ file_changed = true;
+ pkgCacheFile::RemoveCaches();
+ }
+ pkgCacheFile CacheFile;
+ res = CacheFile.BuildCaches(nullptr);
+ if (res == false || _error->empty(GlobalError::WARNING) == false) {
+ std::string outs;
+ strprintf(outs, _("Failed to parse %s. Edit again? "), sourceslist.c_str());
+ // FIXME: should we add a "restore previous" option here?
+ if (YnPrompt(outs.c_str(), true) == false)
+ {
+ if (res == false && _error->PendingError() == false)
+ {
+ CacheFile.Close();
+ pkgCacheFile::RemoveCaches();
+ res = CacheFile.BuildCaches(nullptr);
+ }
+ break;
+ }
+ }
+ } while (res == false);
+
+ if (res == true && file_changed == true)
+ {
+ ioprintf(
+ std::cout, _("Your '%s' file changed, please run 'apt-get update'.\n"),
+ sourceslist.c_str());
+ }
+ return res;
+}
+ /*}}}*/
diff --git a/apt-private/private-sources.h b/apt-private/private-sources.h
new file mode 100644
index 0000000..0c42190
--- /dev/null
+++ b/apt-private/private-sources.h
@@ -0,0 +1,10 @@
+#ifndef APT_PRIVATE_SOURCES_H
+#define APT_PRIVATE_SOURCES_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool EditSources(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-unmet.cc b/apt-private/private-unmet.cc
new file mode 100644
index 0000000..f5161fc
--- /dev/null
+++ b/apt-private/private-unmet.cc
@@ -0,0 +1,120 @@
+// -*- mode: cpp; mode: fold -*-
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-unmet.h>
+
+#include <stddef.h>
+
+#include <iostream>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// UnMet - Show unmet dependencies /*{{{*/
+static bool ShowUnMet(pkgCache::VerIterator const &V, bool const Important)
+{
+ bool Header = false;
+ for (pkgCache::DepIterator D = V.DependsList(); D.end() == false;)
+ {
+ // Collect or groups
+ pkgCache::DepIterator Start;
+ pkgCache::DepIterator End;
+ D.GlobOr(Start,End);
+
+ // Important deps only
+ if (Important == true)
+ if (End->Type != pkgCache::Dep::PreDepends &&
+ End->Type != pkgCache::Dep::Depends)
+ continue;
+
+ // Skip conflicts and replaces
+ if (End.IsNegative() == true || End->Type == pkgCache::Dep::Replaces)
+ continue;
+
+ // Verify the or group
+ bool OK = false;
+ pkgCache::DepIterator RealStart = Start;
+ do
+ {
+ // See if this dep is Ok
+ pkgCache::Version **VList = Start.AllTargets();
+ if (*VList != 0)
+ {
+ OK = true;
+ delete [] VList;
+ break;
+ }
+ delete [] VList;
+
+ if (Start == End)
+ break;
+ ++Start;
+ }
+ while (1);
+
+ // The group is OK
+ if (OK == true)
+ continue;
+
+ // Oops, it failed..
+ if (Header == false)
+ ioprintf(std::cout,_("Package %s version %s has an unmet dep:\n"),
+ V.ParentPkg().FullName(true).c_str(),V.VerStr());
+ Header = true;
+
+ // Print out the dep type
+ std::cout << " " << End.DepType() << ": ";
+
+ // Show the group
+ Start = RealStart;
+ do
+ {
+ std::cout << Start.TargetPkg().FullName(true);
+ if (Start.TargetVer() != 0)
+ std::cout << " (" << Start.CompType() << " " << Start.TargetVer() <<
+ ")";
+ if (Start == End)
+ break;
+ std::cout << " | ";
+ ++Start;
+ }
+ while (1);
+
+ std::cout << std::endl;
+ }
+ return true;
+}
+bool UnMet(CommandLine &CmdL)
+{
+ bool const Important = _config->FindB("APT::Cache::Important",false);
+
+ pkgCacheFile CacheFile;
+ if (unlikely(CacheFile.GetPkgCache() == NULL))
+ return false;
+
+ if (CmdL.FileSize() <= 1)
+ {
+ for (pkgCache::PkgIterator P = CacheFile.GetPkgCache()->PkgBegin(); P.end() == false; ++P)
+ for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+ if (ShowUnMet(V, Important) == false)
+ return false;
+ }
+ else
+ {
+ CacheSetHelperVirtuals helper(true, GlobalError::NOTICE);
+ APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1,
+ APT::CacheSetHelper::CANDIDATE, helper);
+ for (APT::VersionList::iterator V = verset.begin(); V != verset.end(); ++V)
+ if (ShowUnMet(V, Important) == false)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
diff --git a/apt-private/private-unmet.h b/apt-private/private-unmet.h
new file mode 100644
index 0000000..31c2c17
--- /dev/null
+++ b/apt-private/private-unmet.h
@@ -0,0 +1,10 @@
+#ifndef APT_PRIVATE_UNMET_H
+#define APT_PRIVATE_UNMET_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool UnMet(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-update.cc b/apt-private/private-update.cc
new file mode 100644
index 0000000..59d1d6d
--- /dev/null
+++ b/apt-private/private-update.cc
@@ -0,0 +1,147 @@
+// Include files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/update.h>
+
+#include <apt-private/acqprogress.h>
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-download.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-update.h>
+
+#include <ostream>
+#include <string>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// DoUpdate - Update the package lists /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool DoUpdate(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() != 1)
+ return _error->Error(_("The update command takes no arguments"));
+
+ CacheFile Cache;
+
+ // Get the source list
+ if (Cache.BuildSourceList() == false)
+ return false;
+ pkgSourceList *List = Cache.GetSourceList();
+
+ // Just print out the uris an exit if the --print-uris flag was used
+ if (_config->FindB("APT::Get::Print-URIs") == true)
+ {
+ // force a hashsum for compatibility reasons
+ _config->CndSet("Acquire::ForceHash", "md5sum");
+
+ // Populate it with the source selection and get all Indexes
+ // (GetAll=true)
+ aptAcquireWithTextStatus Fetcher;
+ if (List->GetIndexes(&Fetcher,true) == false)
+ return false;
+
+ std::string compExt = APT::Configuration::getCompressionTypes()[0];
+ pkgAcquire::UriIterator I = Fetcher.UriBegin();
+ for (; I != Fetcher.UriEnd(); ++I)
+ {
+ std::string FileName = flNotDir(I->Owner->DestFile);
+ if(compExt.empty() == false &&
+ APT::String::Endswith(FileName, compExt))
+ FileName = FileName.substr(0, FileName.size() - compExt.size() - 1);
+ c1out << '\'' << I->URI << "' " << FileName << ' ' <<
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
+ }
+ return true;
+ }
+
+ // do the work
+ if (_config->FindB("APT::Get::Download",true) == true)
+ {
+ AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0));
+ ListUpdate(Stat, *List);
+ }
+
+ if (_config->FindB("pkgCacheFile::Generate", true) == false)
+ return true;
+
+ // Rebuild the cache.
+ pkgCacheFile::RemoveCaches();
+ if (Cache.BuildCaches(false) == false)
+ return false;
+
+ if (_config->FindB("APT::Get::Update::SourceListWarnings", true))
+ {
+ List = Cache.GetSourceList();
+ for (pkgSourceList::const_iterator S = List->begin(); S != List->end(); ++S)
+ {
+ if (APT::String::Startswith((*S)->GetURI(), "ftp://") == false)
+ continue;
+ pkgCache::RlsFileIterator const RlsFile = (*S)->FindInCache(Cache, false);
+ if (RlsFile.end() || RlsFile->Origin == 0 || RlsFile->Label == 0)
+ continue;
+ char const *const affected[][2] = {
+ {"Debian", "Debian"},
+ {"Debian", "Debian-Security"},
+ {"Debian Backports", "Debian Backports"},
+ };
+ auto const matchRelease = [&](decltype(affected[0]) a) {
+ return strcmp(RlsFile.Origin(), a[0]) == 0 && strcmp(RlsFile.Label(), a[1]) == 0;
+ };
+ if (std::find_if(std::begin(affected), std::end(affected), matchRelease) != std::end(affected))
+ _error->Warning("Debian shuts down public FTP services currently still used in your sources.list(5) as '%s'.\n"
+ "See press release %s for details.",
+ (*S)->GetURI().c_str(), "https://debian.org/News/2017/20170425");
+ }
+ for (pkgSourceList::const_iterator S = List->begin(); S != List->end(); ++S)
+ {
+ URI uri((*S)->GetURI());
+ if (uri.User.empty() && uri.Password.empty())
+ continue;
+ // we can't really predict if a +http method supports everything http does,
+ // so we play it safe and use a whitelist here.
+ char const *const affected[] = {"http", "https", "tor+http", "tor+https", "ftp"};
+ if (std::find(std::begin(affected), std::end(affected), uri.Access) != std::end(affected))
+ // TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+ _error->Notice(_("Usage of %s should be preferred over embedding login information directly in the %s entry for '%s'"),
+ "apt_auth.conf(5)", "sources.list(5)", URI::ArchiveOnly(uri).c_str());
+ }
+ }
+
+ // show basic stats (if the user whishes)
+ if (_config->FindB("APT::Cmd::Show-Update-Stats", false) == true)
+ {
+ int upgradable = 0;
+ if (Cache.Open(false) == false)
+ return false;
+ for (pkgCache::PkgIterator I = Cache->PkgBegin(); I.end() != true; ++I)
+ {
+ pkgDepCache::StateCache &state = Cache[I];
+ if (I->CurrentVer != 0 && state.Upgradable() && state.CandidateVer != NULL)
+ upgradable++;
+ }
+ const char *msg = P_(
+ "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n",
+ "%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n",
+ upgradable);
+ if (upgradable == 0)
+ c1out << _("All packages are up to date.") << std::endl;
+ else
+ ioprintf(c1out, msg, upgradable);
+
+ RunScripts("APT::Update::Post-Invoke-Stats");
+ }
+
+ return true;
+}
+ /*}}}*/
diff --git a/apt-private/private-update.h b/apt-private/private-update.h
new file mode 100644
index 0000000..e584f70
--- /dev/null
+++ b/apt-private/private-update.h
@@ -0,0 +1,10 @@
+#ifndef APT_PRIVATE_UPDATE_H
+#define APT_PRIVATE_UPDATE_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool DoUpdate(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-upgrade.cc b/apt-private/private-upgrade.cc
new file mode 100644
index 0000000..aeaf506
--- /dev/null
+++ b/apt-private/private-upgrade.cc
@@ -0,0 +1,66 @@
+// Includes /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/upgrade.h>
+
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-install.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-upgrade.h>
+
+#include <iostream>
+
+#include <apti18n.h>
+ /*}}}*/
+
+// this is actually performing the various upgrade operations
+static bool UpgradeHelper(CommandLine &CmdL, int UpgradeFlags)
+{
+ CacheFile Cache;
+ auto VolatileCmdL = GetPseudoPackages(Cache.GetSourceList(), CmdL, AddVolatileBinaryFile, "");
+
+ if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
+ return false;
+
+ if(!DoCacheManipulationFromCommandLine(CmdL, VolatileCmdL, Cache, UpgradeFlags))
+ return false;
+
+ return InstallPackages(Cache,true);
+}
+
+// DoDistUpgrade - Automatic smart upgrader /*{{{*/
+// ---------------------------------------------------------------------
+/* Intelligent upgrader that will install and remove packages at will */
+bool DoDistUpgrade(CommandLine &CmdL)
+{
+ return UpgradeHelper(CmdL, APT::Upgrade::ALLOW_EVERYTHING);
+}
+ /*}}}*/
+bool DoUpgrade(CommandLine &CmdL) /*{{{*/
+{
+ if (_config->FindB("APT::Get::Upgrade-Allow-New", false) == true)
+ return DoUpgradeWithAllowNewPackages(CmdL);
+ else
+ return DoUpgradeNoNewPackages(CmdL);
+}
+ /*}}}*/
+// DoUpgradeNoNewPackages - Upgrade all packages /*{{{*/
+// ---------------------------------------------------------------------
+/* Upgrade all packages without installing new packages or erasing old
+ packages */
+bool DoUpgradeNoNewPackages(CommandLine &CmdL)
+{
+ // Do the upgrade
+ return UpgradeHelper(CmdL,
+ APT::Upgrade::FORBID_REMOVE_PACKAGES|
+ APT::Upgrade::FORBID_INSTALL_NEW_PACKAGES);
+}
+ /*}}}*/
+// DoSafeUpgrade - Upgrade all packages with install but not remove /*{{{*/
+bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL)
+{
+ return UpgradeHelper(CmdL, APT::Upgrade::FORBID_REMOVE_PACKAGES);
+}
+ /*}}}*/
diff --git a/apt-private/private-upgrade.h b/apt-private/private-upgrade.h
new file mode 100644
index 0000000..16bb93c
--- /dev/null
+++ b/apt-private/private-upgrade.h
@@ -0,0 +1,13 @@
+#ifndef APTPRIVATE_PRIVATE_UPGRADE_H
+#define APTPRIVATE_PRIVATE_UPGRADE_H
+
+#include <apt-pkg/macros.h>
+
+class CommandLine;
+
+APT_PUBLIC bool DoDistUpgrade(CommandLine &CmdL);
+APT_PUBLIC bool DoUpgrade(CommandLine &CmdL);
+bool DoUpgradeNoNewPackages(CommandLine &CmdL);
+bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL);
+
+#endif
diff --git a/apt-private/private-utils.cc b/apt-private/private-utils.cc
new file mode 100644
index 0000000..5863925
--- /dev/null
+++ b/apt-private/private-utils.cc
@@ -0,0 +1,98 @@
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <apt-private/private-utils.h>
+
+#include <cstdlib>
+#include <sstream>
+#include <unistd.h>
+
+// DisplayFileInPager - Display File with pager /*{{{*/
+bool DisplayFileInPager(std::string const &filename)
+{
+ pid_t Process = ExecFork();
+ if (Process == 0)
+ {
+ const char *Args[3];
+ Args[1] = filename.c_str();
+ Args[2] = NULL;
+ if (isatty(STDOUT_FILENO) == 1)
+ {
+ // likely installed, provided by sensible-utils
+ std::string const pager = _config->Find("Dir::Bin::Pager",
+ "sensible-pager");
+ Args[0] = pager.c_str();
+ execvp(Args[0],(char **)Args);
+ // lets try some obvious alternatives
+ Args[0] = getenv("PAGER");
+ if (Args[0] != NULL)
+ execvp(Args[0],(char **)Args);
+
+ Args[0] = "pager";
+ execvp(Args[0],(char **)Args);
+ }
+ // we could read the file ourselves, but… meh
+ Args[0] = "cat";
+ execvp(Args[0],(char **)Args);
+ exit(100);
+ }
+
+ // Wait for the subprocess
+ return ExecWait(Process, "pager", false);
+}
+ /*}}}*/
+// EditFileInSensibleEditor - Edit File with editor /*{{{*/
+bool EditFileInSensibleEditor(std::string const &filename)
+{
+ pid_t Process = ExecFork();
+ if (Process == 0)
+ {
+ // likely installed, provided by sensible-utils
+ std::string const editor = _config->Find("Dir::Bin::Editor",
+ "sensible-editor");
+ const char *Args[3];
+ Args[0] = editor.c_str();
+ Args[1] = filename.c_str();
+ Args[2] = NULL;
+ execvp(Args[0],(char **)Args);
+ // the usual suspects we can try as an alternative
+ Args[0] = getenv("VISUAL");
+ if (Args[0] != NULL)
+ execvp(Args[0],(char **)Args);
+
+ Args[0] = getenv("EDITOR");
+ if (Args[0] != NULL)
+ execvp(Args[0],(char **)Args);
+
+ Args[0] = "editor";
+ execvp(Args[0],(char **)Args);
+ exit(100);
+ }
+
+ // Wait for the subprocess
+ return ExecWait(Process, "editor", false);
+}
+ /*}}}*/
+time_t GetSecondsSinceEpoch() /*{{{*/
+{
+ auto const source_date_epoch = getenv("SOURCE_DATE_EPOCH");
+ if (source_date_epoch == nullptr)
+ return time(nullptr);
+
+ time_t epoch;
+ std::stringstream ss(source_date_epoch);
+ ss >> epoch;
+
+ if (ss.fail() || !ss.eof())
+ {
+ _error->Warning("Environment variable SOURCE_DATE_EPOCH was ignored as it has an invalid value: \"%s\"",
+ source_date_epoch);
+ return time(nullptr);
+ }
+
+ return epoch;
+}
+ /*}}}*/
diff --git a/apt-private/private-utils.h b/apt-private/private-utils.h
new file mode 100644
index 0000000..4d48bd1
--- /dev/null
+++ b/apt-private/private-utils.h
@@ -0,0 +1,10 @@
+#ifndef APT_PRIVATE_UTILS_H
+#define APT_PRIVATE_UTILS_H
+
+#include <string>
+
+bool DisplayFileInPager(std::string const &filename);
+bool EditFileInSensibleEditor(std::string const &filename);
+time_t GetSecondsSinceEpoch();
+
+#endif
diff --git a/cmdline/CMakeLists.txt b/cmdline/CMakeLists.txt
new file mode 100644
index 0000000..8977b45
--- /dev/null
+++ b/cmdline/CMakeLists.txt
@@ -0,0 +1,59 @@
+# Create the executable tasks
+add_executable(apt apt.cc)
+add_executable(apt-cache apt-cache.cc)
+add_executable(apt-get apt-get.cc)
+add_executable(apt-mark apt-mark.cc)
+add_executable(apt-config apt-config.cc)
+add_executable(apt-cdrom apt-cdrom.cc)
+add_executable(apt-helper apt-helper.cc)
+add_executable(apt-sortpkgs apt-sortpkgs.cc)
+add_executable(apt-extracttemplates apt-extracttemplates.cc)
+add_executable(apt-internal-solver apt-internal-solver.cc)
+add_executable(apt-dump-solver apt-dump-solver.cc)
+add_executable(apt-internal-planner apt-internal-planner.cc)
+add_vendor_file(OUTPUT apt-key
+ INPUT apt-key.in
+ MODE 755
+ VARIABLES keyring-filename
+ keyring-removed-filename
+ keyring-master-filename
+ keyring-uri keyring-package)
+
+
+# Link the executables against the libraries
+target_link_libraries(apt apt-pkg apt-private)
+target_link_libraries(apt-cache apt-pkg apt-private)
+target_link_libraries(apt-get apt-pkg apt-private)
+target_link_libraries(apt-config apt-pkg apt-private)
+target_link_libraries(apt-cdrom apt-pkg apt-private)
+target_link_libraries(apt-helper apt-pkg apt-private)
+target_link_libraries(apt-mark apt-pkg apt-private)
+target_link_libraries(apt-sortpkgs apt-pkg apt-private)
+target_link_libraries(apt-extracttemplates apt-pkg apt-inst apt-private)
+target_link_libraries(apt-internal-solver apt-pkg apt-inst apt-private)
+target_link_libraries(apt-dump-solver apt-pkg apt-inst apt-private)
+target_link_libraries(apt-internal-planner apt-pkg apt-inst apt-private)
+
+set_target_properties(apt-dump-solver
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY solvers
+ RUNTIME_OUTPUT_NAME dump)
+set_target_properties(apt-internal-solver
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY solvers
+ RUNTIME_OUTPUT_NAME apt)
+set_target_properties(apt-internal-planner
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY planners
+ RUNTIME_OUTPUT_NAME apt)
+
+# Install the executables
+install(TARGETS apt apt-cache apt-get apt-config apt-cdrom apt-mark apt-sortpkgs
+ apt-extracttemplates
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+install(TARGETS apt-helper RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/)
+install(TARGETS apt-dump-solver apt-internal-solver RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/solvers)
+install(TARGETS apt-internal-planner RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/planners)
+
+add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/planners ../solvers/dump planners/dump)
+
+# Install the not-to-be-compiled programs
+INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/apt-key DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc
new file mode 100644
index 0000000..3c0e477
--- /dev/null
+++ b/cmdline/apt-cache.cc
@@ -0,0 +1,1151 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ apt-cache - Manages the cache files
+
+ apt-cache provides some functions fo manipulating the cache files.
+ It uses the command line interface common to all the APT tools.
+
+ Returns 100 on failure, 0 on success.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/sptr.h>
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+#include <apt-pkg/version.h>
+
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-depends.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-search.h>
+#include <apt-private/private-show.h>
+#include <apt-private/private-unmet.h>
+
+#include <algorithm>
+#include <cstring>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+#include <regex.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+// DumpPackage - Show a dump of a package record /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool DumpPackage(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ APT::CacheSetHelper helper(true, GlobalError::NOTICE);
+ APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+
+ for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+ {
+ cout << "Package: " << Pkg.FullName(true) << endl;
+ cout << "Versions: " << endl;
+ for (pkgCache::VerIterator Cur = Pkg.VersionList(); Cur.end() != true; ++Cur)
+ {
+ cout << Cur.VerStr();
+ for (pkgCache::VerFileIterator Vf = Cur.FileList(); Vf.end() == false; ++Vf)
+ cout << " (" << Vf.File().FileName() << ")";
+ cout << endl;
+ for (pkgCache::DescIterator D = Cur.DescriptionList(); D.end() == false; ++D)
+ {
+ cout << " Description Language: " << D.LanguageCode() << endl
+ << " File: " << D.FileList().File().FileName() << endl
+ << " MD5: " << D.md5() << endl;
+ }
+ cout << endl;
+ }
+
+ cout << endl;
+
+ cout << "Reverse Depends: " << endl;
+ for (pkgCache::DepIterator D = Pkg.RevDependsList(); D.end() != true; ++D)
+ {
+ cout << " " << D.ParentPkg().FullName(true) << ',' << D.TargetPkg().FullName(true);
+ if (D->Version != 0)
+ cout << ' ' << DeNull(D.TargetVer()) << endl;
+ else
+ cout << endl;
+ }
+
+ cout << "Dependencies: " << endl;
+ for (pkgCache::VerIterator Cur = Pkg.VersionList(); Cur.end() != true; ++Cur)
+ {
+ cout << Cur.VerStr() << " - ";
+ for (pkgCache::DepIterator Dep = Cur.DependsList(); Dep.end() != true; ++Dep)
+ cout << Dep.TargetPkg().FullName(true) << " (" << (int)Dep->CompareOp << " " << DeNull(Dep.TargetVer()) << ") ";
+ cout << endl;
+ }
+
+ cout << "Provides: " << endl;
+ for (pkgCache::VerIterator Cur = Pkg.VersionList(); Cur.end() != true; ++Cur)
+ {
+ cout << Cur.VerStr() << " - ";
+ for (pkgCache::PrvIterator Prv = Cur.ProvidesList(); Prv.end() != true; ++Prv)
+ cout << Prv.ParentPkg().FullName(true) << " (= " << (Prv->ProvideVersion == 0 ? "" : Prv.ProvideVersion()) << ") ";
+ cout << endl;
+ }
+ cout << "Reverse Provides: " << endl;
+ for (pkgCache::PrvIterator Prv = Pkg.ProvidesList(); Prv.end() != true; ++Prv)
+ cout << Prv.OwnerPkg().FullName(true) << " " << Prv.OwnerVer().VerStr() << " (= " << (Prv->ProvideVersion == 0 ? "" : Prv.ProvideVersion()) << ")"<< endl;
+ }
+
+ return true;
+}
+ /*}}}*/
+// ShowHashTableStats - Show stats about a hashtable /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static map_pointer_t PackageNext(pkgCache::Package const * const P) { return P->NextPackage; }
+static map_pointer_t GroupNext(pkgCache::Group const * const G) { return G->Next; }
+template<class T>
+static void ShowHashTableStats(std::string Type,
+ T *StartP,
+ map_pointer_t *Hashtable,
+ unsigned long Size,
+ map_pointer_t(*Next)(T const * const))
+{
+ // hashtable stats for the HashTable
+ unsigned long NumBuckets = Size;
+ unsigned long UsedBuckets = 0;
+ unsigned long UnusedBuckets = 0;
+ unsigned long LongestBucket = 0;
+ unsigned long ShortestBucket = NumBuckets;
+ unsigned long Entries = 0;
+ for (unsigned int i=0; i < NumBuckets; ++i)
+ {
+ T *P = StartP + Hashtable[i];
+ if(P == 0 || P == StartP)
+ {
+ ++UnusedBuckets;
+ continue;
+ }
+ ++UsedBuckets;
+ unsigned long ThisBucketSize = 0;
+ for (; P != StartP; P = StartP + Next(P))
+ ++ThisBucketSize;
+ Entries += ThisBucketSize;
+ LongestBucket = std::max(ThisBucketSize, LongestBucket);
+ ShortestBucket = std::min(ThisBucketSize, ShortestBucket);
+ }
+ cout << "Total buckets in " << Type << ": " << NumBuckets << std::endl;
+ cout << " Unused: " << UnusedBuckets << std::endl;
+ cout << " Used: " << UsedBuckets << std::endl;
+ cout << " Utilization: " << 100.0 * UsedBuckets/NumBuckets << "%" << std::endl;
+ cout << " Average entries: " << Entries/(double)UsedBuckets << std::endl;
+ cout << " Longest: " << LongestBucket << std::endl;
+ cout << " Shortest: " << ShortestBucket << std::endl;
+}
+ /*}}}*/
+// Stats - Dump some nice statistics /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool Stats(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() > 1) {
+ _error->Error(_("%s does not take any arguments"), "apt-cache stats");
+ return false;
+ }
+
+ pkgCacheFile CacheFile;
+ pkgCache *Cache = CacheFile.GetPkgCache();
+
+ if (unlikely(Cache == NULL))
+ return false;
+
+ cout << _("Total package names: ") << Cache->Head().GroupCount << " (" <<
+ SizeToStr(Cache->Head().GroupCount*Cache->Head().GroupSz) << ')' << endl
+ << _("Total package structures: ") << Cache->Head().PackageCount << " (" <<
+ SizeToStr(Cache->Head().PackageCount*Cache->Head().PackageSz) << ')' << endl;
+
+ int Normal = 0;
+ int Virtual = 0;
+ int NVirt = 0;
+ int DVirt = 0;
+ int Missing = 0;
+ pkgCache::PkgIterator I = Cache->PkgBegin();
+ for (;I.end() != true; ++I)
+ {
+ if (I->VersionList != 0 && I->ProvidesList == 0)
+ {
+ Normal++;
+ continue;
+ }
+
+ if (I->VersionList != 0 && I->ProvidesList != 0)
+ {
+ NVirt++;
+ continue;
+ }
+
+ if (I->VersionList == 0 && I->ProvidesList != 0)
+ {
+ // Only 1 provides
+ if (I.ProvidesList()->NextProvides == 0)
+ {
+ DVirt++;
+ }
+ else
+ Virtual++;
+ continue;
+ }
+ if (I->VersionList == 0 && I->ProvidesList == 0)
+ {
+ Missing++;
+ continue;
+ }
+ }
+ cout << _(" Normal packages: ") << Normal << endl;
+ cout << _(" Pure virtual packages: ") << Virtual << endl;
+ cout << _(" Single virtual packages: ") << DVirt << endl;
+ cout << _(" Mixed virtual packages: ") << NVirt << endl;
+ cout << _(" Missing: ") << Missing << endl;
+
+ cout << _("Total distinct versions: ") << Cache->Head().VersionCount << " (" <<
+ SizeToStr(Cache->Head().VersionCount*Cache->Head().VersionSz) << ')' << endl;
+ cout << _("Total distinct descriptions: ") << Cache->Head().DescriptionCount << " (" <<
+ SizeToStr(Cache->Head().DescriptionCount*Cache->Head().DescriptionSz) << ')' << endl;
+ cout << _("Total dependencies: ") << Cache->Head().DependsCount << "/" << Cache->Head().DependsDataCount << " (" <<
+ SizeToStr((Cache->Head().DependsCount*Cache->Head().DependencySz) +
+ (Cache->Head().DependsDataCount*Cache->Head().DependencyDataSz)) << ')' << endl;
+ cout << _("Total ver/file relations: ") << Cache->Head().VerFileCount << " (" <<
+ SizeToStr(Cache->Head().VerFileCount*Cache->Head().VerFileSz) << ')' << endl;
+ cout << _("Total Desc/File relations: ") << Cache->Head().DescFileCount << " (" <<
+ SizeToStr(Cache->Head().DescFileCount*Cache->Head().DescFileSz) << ')' << endl;
+ cout << _("Total Provides mappings: ") << Cache->Head().ProvidesCount << " (" <<
+ SizeToStr(Cache->Head().ProvidesCount*Cache->Head().ProvidesSz) << ')' << endl;
+
+ // String list stats
+ std::set<map_stringitem_t> stritems;
+ for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() == false; ++G)
+ stritems.insert(G->Name);
+ for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+ {
+ stritems.insert(P->Arch);
+ for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+ {
+ if (V->VerStr != 0)
+ stritems.insert(V->VerStr);
+ if (V->Section != 0)
+ stritems.insert(V->Section);
+ stritems.insert(V->SourcePkgName);
+ stritems.insert(V->SourceVerStr);
+ for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; ++D)
+ {
+ if (D->Version != 0)
+ stritems.insert(D->Version);
+ }
+ for (pkgCache::DescIterator D = V.DescriptionList(); D.end() == false; ++D)
+ {
+ stritems.insert(D->md5sum);
+ stritems.insert(D->language_code);
+ }
+ }
+ for (pkgCache::PrvIterator Prv = P.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ if (Prv->ProvideVersion != 0)
+ stritems.insert(Prv->ProvideVersion);
+ }
+ }
+ for (pkgCache::RlsFileIterator F = Cache->RlsFileBegin(); F != Cache->RlsFileEnd(); ++F)
+ {
+ stritems.insert(F->FileName);
+ stritems.insert(F->Archive);
+ stritems.insert(F->Codename);
+ stritems.insert(F->Version);
+ stritems.insert(F->Origin);
+ stritems.insert(F->Label);
+ stritems.insert(F->Site);
+ }
+ for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F != Cache->FileEnd(); ++F)
+ {
+ stritems.insert(F->FileName);
+ stritems.insert(F->Architecture);
+ stritems.insert(F->Component);
+ stritems.insert(F->IndexType);
+ }
+
+ unsigned long Size = 0;
+ for (std::set<map_stringitem_t>::const_iterator i = stritems.begin(); i != stritems.end(); ++i)
+ Size += strlen(Cache->StrP + *i) + 1;
+ cout << _("Total globbed strings: ") << stritems.size() << " (" << SizeToStr(Size) << ')' << endl;
+ stritems.clear();
+
+ unsigned long Slack = 0;
+ for (int I = 0; I != 7; I++)
+ Slack += Cache->Head().Pools[I].ItemSize*Cache->Head().Pools[I].Count;
+ cout << _("Total slack space: ") << SizeToStr(Slack) << endl;
+
+ unsigned long Total = 0;
+#define APT_CACHESIZE(X,Y) (Cache->Head().X * Cache->Head().Y)
+ Total = Slack + Size +
+ APT_CACHESIZE(GroupCount, GroupSz) +
+ APT_CACHESIZE(PackageCount, PackageSz) +
+ APT_CACHESIZE(VersionCount, VersionSz) +
+ APT_CACHESIZE(DescriptionCount, DescriptionSz) +
+ APT_CACHESIZE(DependsCount, DependencySz) +
+ APT_CACHESIZE(DependsDataCount, DependencyDataSz) +
+ APT_CACHESIZE(ReleaseFileCount, ReleaseFileSz) +
+ APT_CACHESIZE(PackageFileCount, PackageFileSz) +
+ APT_CACHESIZE(VerFileCount, VerFileSz) +
+ APT_CACHESIZE(DescFileCount, DescFileSz) +
+ APT_CACHESIZE(ProvidesCount, ProvidesSz) +
+ (2 * Cache->Head().GetHashTableSize() * sizeof(map_id_t));
+ cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
+#undef APT_CACHESIZE
+
+ // hashtable stats
+ ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->Head().PkgHashTableP(), Cache->Head().GetHashTableSize(), PackageNext);
+ ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->Head().GrpHashTableP(), Cache->Head().GetHashTableSize(), GroupNext);
+
+ return true;
+}
+ /*}}}*/
+// Dump - show everything /*{{{*/
+// ---------------------------------------------------------------------
+/* This is worthless except fer debugging things */
+static bool Dump(CommandLine &)
+{
+ pkgCacheFile CacheFile;
+ pkgCache *Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == NULL))
+ return false;
+
+ std::cout << "Using Versioning System: " << Cache->VS->Label << std::endl;
+
+ for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+ {
+ std::cout << "Package: " << P.FullName(true) << std::endl;
+ for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+ {
+ std::cout << " Version: " << V.VerStr() << std::endl;
+ std::cout << " File: " << V.FileList().File().FileName() << std::endl;
+ for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; ++D)
+ std::cout << " Depends: " << D.TargetPkg().FullName(true) << ' ' <<
+ DeNull(D.TargetVer()) << std::endl;
+ for (pkgCache::DescIterator D = V.DescriptionList(); D.end() == false; ++D)
+ {
+ std::cout << " Description Language: " << D.LanguageCode() << std::endl
+ << " File: " << D.FileList().File().FileName() << std::endl
+ << " MD5: " << D.md5() << std::endl;
+ }
+ }
+ }
+
+ for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F.end() == false; ++F)
+ {
+ std::cout << "File: " << F.FileName() << std::endl;
+ std::cout << " Type: " << F.IndexType() << std::endl;
+ std::cout << " Size: " << F->Size << std::endl;
+ std::cout << " ID: " << F->ID << std::endl;
+ std::cout << " Flags: " << F->Flags << std::endl;
+ std::cout << " Time: " << TimeRFC1123(F->mtime, true) << std::endl;
+ std::cout << " Archive: " << DeNull(F.Archive()) << std::endl;
+ std::cout << " Component: " << DeNull(F.Component()) << std::endl;
+ std::cout << " Version: " << DeNull(F.Version()) << std::endl;
+ std::cout << " Origin: " << DeNull(F.Origin()) << std::endl;
+ std::cout << " Site: " << DeNull(F.Site()) << std::endl;
+ std::cout << " Label: " << DeNull(F.Label()) << std::endl;
+ std::cout << " Architecture: " << DeNull(F.Architecture()) << std::endl;
+ }
+
+ return true;
+}
+ /*}}}*/
+// DumpAvail - Print out the available list /*{{{*/
+// ---------------------------------------------------------------------
+/* This is needed to make dpkg --merge happy.. I spent a bit of time to
+ make this run really fast, perhaps I went a little overboard.. */
+static bool DumpAvail(CommandLine &)
+{
+ pkgCacheFile CacheFile;
+ pkgCache *Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == NULL || CacheFile.BuildPolicy() == false))
+ return false;
+
+ auto const Count = Cache->HeaderP->PackageCount+1;
+ pkgCache::VerFile **VFList = new pkgCache::VerFile *[Count];
+ memset(VFList,0,sizeof(*VFList)*Count);
+
+ // Map versions that we want to write out onto the VerList array.
+ for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+ {
+ if (P->VersionList == 0)
+ continue;
+
+ /* Find the proper version to use. If the policy says there are no
+ possible selections we return the installed version, if available..
+ This prevents dselect from making it obsolete. */
+ pkgCache::VerIterator V = CacheFile.GetPolicy()->GetCandidateVer(P);
+ if (V.end() == true)
+ {
+ if (P->CurrentVer == 0)
+ continue;
+ V = P.CurrentVer();
+ }
+
+ pkgCache::VerFileIterator VF = V.FileList();
+ for (; VF.end() == false ; ++VF)
+ if ((VF.File()->Flags & pkgCache::Flag::NotSource) == 0)
+ break;
+
+ /* Okay, here we have a bit of a problem.. The policy has selected the
+ currently installed package - however it only exists in the
+ status file.. We need to write out something or dselect will mark
+ the package as obsolete! Thus we emit the status file entry, but
+ below we remove the status line to make it valid for the
+ available file. However! We only do this if their do exist *any*
+ non-source versions of the package - that way the dselect obsolete
+ handling works OK. */
+ if (VF.end() == true)
+ {
+ for (pkgCache::VerIterator Cur = P.VersionList(); Cur.end() != true; ++Cur)
+ {
+ for (VF = Cur.FileList(); VF.end() == false; ++VF)
+ {
+ if ((VF.File()->Flags & pkgCache::Flag::NotSource) == 0)
+ {
+ VF = V.FileList();
+ break;
+ }
+ }
+
+ if (VF.end() == false)
+ break;
+ }
+ }
+
+ VFList[P->ID] = VF;
+ }
+
+ LocalitySort(VFList,Count,sizeof(*VFList));
+
+ std::vector<pkgTagSection::Tag> RW;
+ RW.push_back(pkgTagSection::Tag::Remove("Status"));
+ RW.push_back(pkgTagSection::Tag::Remove("Config-Version"));
+ FileFd stdoutfd;
+ stdoutfd.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly, false);
+
+ // Iterate over all the package files and write them out.
+ char *Buffer = new char[Cache->HeaderP->MaxVerFileSize+10];
+ for (pkgCache::VerFile **J = VFList; *J != 0;)
+ {
+ pkgCache::PkgFileIterator File(*Cache,(*J)->File + Cache->PkgFileP);
+ // FIXME: Add support for volatile/with-source files
+ FileFd PkgF(File.FileName(),FileFd::ReadOnly, FileFd::Extension);
+ if (_error->PendingError() == true)
+ break;
+
+ /* Write all of the records from this package file, since we
+ already did locality sorting we can now just seek through the
+ file in read order. We apply 1 more optimization here, since often
+ there will be < 1 byte gaps between records (for the \n) we read that
+ into the next buffer and offset a bit.. */
+ unsigned long Pos = 0;
+ for (; *J != 0; J++)
+ {
+ if ((*J)->File + Cache->PkgFileP != File)
+ break;
+
+ const pkgCache::VerFile &VF = **J;
+
+ // Read the record and then write it out again.
+ unsigned long Jitter = VF.Offset - Pos;
+ if (Jitter > 8)
+ {
+ if (PkgF.Seek(VF.Offset) == false)
+ break;
+ Jitter = 0;
+ }
+
+ if (PkgF.Read(Buffer,VF.Size + Jitter) == false)
+ break;
+ Buffer[VF.Size + Jitter] = '\n';
+
+ // See above..
+ if ((File->Flags & pkgCache::Flag::NotSource) == pkgCache::Flag::NotSource)
+ {
+ pkgTagSection Tags;
+ if (Tags.Scan(Buffer+Jitter,VF.Size+1) == false ||
+ Tags.Write(stdoutfd, NULL, RW) == false ||
+ stdoutfd.Write("\n", 1) == false)
+ {
+ _error->Error("Internal Error, Unable to parse a package record");
+ break;
+ }
+ }
+ else
+ {
+ if (stdoutfd.Write(Buffer + Jitter, VF.Size + 1) == false)
+ break;
+ }
+
+ Pos = VF.Offset + VF.Size;
+ }
+
+ if (_error->PendingError() == true)
+ break;
+ }
+
+ delete [] Buffer;
+ delete [] VFList;
+ return !_error->PendingError();
+}
+ /*}}}*/
+// xvcg - Generate a graph for xvcg /*{{{*/
+// ---------------------------------------------------------------------
+// Code contributed from Junichi Uekawa <dancer@debian.org> on 20 June 2002.
+
+static bool XVcg(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgCache *Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == NULL))
+ return false;
+
+ bool GivenOnly = _config->FindB("APT::Cache::GivenOnly",false);
+
+ /* Normal packages are boxes
+ Pure Provides are triangles
+ Mixed are diamonds
+ rhomb are missing packages*/
+ const char *Shapes[] = {"ellipse","triangle","box","rhomb"};
+
+ /* Initialize the list of packages to show.
+ 1 = To Show
+ 2 = To Show no recurse
+ 3 = Emitted no recurse
+ 4 = Emitted
+ 0 = None */
+ enum States {None=0, ToShow, ToShowNR, DoneNR, Done};
+ enum TheFlags {ForceNR=(1<<0)};
+ auto PackageCount = Cache->Head().PackageCount;
+ unsigned char *Show = new unsigned char[PackageCount];
+ unsigned char *Flags = new unsigned char[PackageCount];
+ unsigned char *ShapeMap = new unsigned char[PackageCount];
+
+ // Show everything if no arguments given
+ if (CmdL.FileList[1] == 0)
+ for (decltype(PackageCount) I = 0; I != PackageCount; ++I)
+ Show[I] = ToShow;
+ else
+ for (decltype(PackageCount) I = 0; I != PackageCount; ++I)
+ Show[I] = None;
+ memset(Flags,0,sizeof(*Flags)*PackageCount);
+
+ // Map the shapes
+ for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ if (Pkg->VersionList == 0)
+ {
+ // Missing
+ if (Pkg->ProvidesList == 0)
+ ShapeMap[Pkg->ID] = 0;
+ else
+ ShapeMap[Pkg->ID] = 1;
+ }
+ else
+ {
+ // Normal
+ if (Pkg->ProvidesList == 0)
+ ShapeMap[Pkg->ID] = 2;
+ else
+ ShapeMap[Pkg->ID] = 3;
+ }
+ }
+
+ // Load the list of packages from the command line into the show list
+ APT::CacheSetHelper helper(true, GlobalError::NOTICE);
+ std::list<APT::CacheSetHelper::PkgModifier> mods;
+ mods.push_back(APT::CacheSetHelper::PkgModifier(0, ",", APT::PackageSet::Modifier::POSTFIX));
+ mods.push_back(APT::CacheSetHelper::PkgModifier(1, "^", APT::PackageSet::Modifier::POSTFIX));
+ std::map<unsigned short, APT::PackageSet> pkgsets =
+ APT::PackageSet::GroupedFromCommandLine(CacheFile, CmdL.FileList + 1, mods, 0, helper);
+
+ for (APT::PackageSet::const_iterator Pkg = pkgsets[0].begin();
+ Pkg != pkgsets[0].end(); ++Pkg)
+ Show[Pkg->ID] = ToShow;
+ for (APT::PackageSet::const_iterator Pkg = pkgsets[1].begin();
+ Pkg != pkgsets[1].end(); ++Pkg)
+ {
+ Show[Pkg->ID] = ToShow;
+ Flags[Pkg->ID] |= ForceNR;
+ }
+
+ // Little header
+ cout << "graph: { title: \"packages\"" << endl <<
+ "xmax: 700 ymax: 700 x: 30 y: 30" << endl <<
+ "layout_downfactor: 8" << endl;
+
+ bool Act = true;
+ while (Act == true)
+ {
+ Act = false;
+ for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ // See we need to show this package
+ if (Show[Pkg->ID] == None || Show[Pkg->ID] >= DoneNR)
+ continue;
+
+ //printf ("node: { title: \"%s\" label: \"%s\" }\n", Pkg.Name(), Pkg.Name());
+
+ // Colour as done
+ if (Show[Pkg->ID] == ToShowNR || (Flags[Pkg->ID] & ForceNR) == ForceNR)
+ {
+ // Pure Provides and missing packages have no deps!
+ if (ShapeMap[Pkg->ID] == 0 || ShapeMap[Pkg->ID] == 1)
+ Show[Pkg->ID] = Done;
+ else
+ Show[Pkg->ID] = DoneNR;
+ }
+ else
+ Show[Pkg->ID] = Done;
+ Act = true;
+
+ // No deps to map out
+ if (Pkg->VersionList == 0 || Show[Pkg->ID] == DoneNR)
+ continue;
+
+ pkgCache::VerIterator Ver = Pkg.VersionList();
+ for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; ++D)
+ {
+ // See if anything can meet this dep
+ // Walk along the actual package providing versions
+ bool Hit = false;
+ pkgCache::PkgIterator DPkg = D.TargetPkg();
+ for (pkgCache::VerIterator I = DPkg.VersionList();
+ I.end() == false && Hit == false; ++I)
+ {
+ if (Cache->VS->CheckDep(I.VerStr(),D->CompareOp,D.TargetVer()) == true)
+ Hit = true;
+ }
+
+ // Follow all provides
+ for (pkgCache::PrvIterator I = DPkg.ProvidesList();
+ I.end() == false && Hit == false; ++I)
+ {
+ if (Cache->VS->CheckDep(I.ProvideVersion(),D->CompareOp,D.TargetVer()) == false)
+ Hit = true;
+ }
+
+
+ // Only graph critical deps
+ if (D.IsCritical() == true)
+ {
+ printf ("edge: { sourcename: \"%s\" targetname: \"%s\" class: 2 ",Pkg.FullName(true).c_str(), D.TargetPkg().FullName(true).c_str() );
+
+ // Colour the node for recursion
+ if (Show[D.TargetPkg()->ID] <= DoneNR)
+ {
+ /* If a conflicts does not meet anything in the database
+ then show the relation but do not recurse */
+ if (Hit == false && D.IsNegative() == true)
+ {
+ if (Show[D.TargetPkg()->ID] == None &&
+ Show[D.TargetPkg()->ID] != ToShow)
+ Show[D.TargetPkg()->ID] = ToShowNR;
+ }
+ else
+ {
+ if (GivenOnly == true && Show[D.TargetPkg()->ID] != ToShow)
+ Show[D.TargetPkg()->ID] = ToShowNR;
+ else
+ Show[D.TargetPkg()->ID] = ToShow;
+ }
+ }
+
+ // Edge colour
+ switch(D->Type)
+ {
+ case pkgCache::Dep::Conflicts:
+ printf("label: \"conflicts\" color: lightgreen }\n");
+ break;
+ case pkgCache::Dep::DpkgBreaks:
+ printf("label: \"breaks\" color: lightgreen }\n");
+ break;
+ case pkgCache::Dep::Obsoletes:
+ printf("label: \"obsoletes\" color: lightgreen }\n");
+ break;
+
+ case pkgCache::Dep::PreDepends:
+ printf("label: \"predepends\" color: blue }\n");
+ break;
+
+ default:
+ printf("}\n");
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw the box colours after the fact since we can not tell what colour
+ they should be until everything is finished drawing */
+ for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ if (Show[Pkg->ID] < DoneNR)
+ continue;
+
+ if (Show[Pkg->ID] == DoneNR)
+ printf("node: { title: \"%s\" label: \"%s\" color: orange shape: %s }\n", Pkg.FullName(true).c_str(), Pkg.FullName(true).c_str(),
+ Shapes[ShapeMap[Pkg->ID]]);
+ else
+ printf("node: { title: \"%s\" label: \"%s\" shape: %s }\n", Pkg.FullName(true).c_str(), Pkg.FullName(true).c_str(),
+ Shapes[ShapeMap[Pkg->ID]]);
+
+ }
+
+ delete[] Show;
+ delete[] Flags;
+ delete[] ShapeMap;
+
+ printf("}\n");
+ return true;
+}
+ /*}}}*/
+// Dotty - Generate a graph for Dotty /*{{{*/
+// ---------------------------------------------------------------------
+/* Dotty is the graphvis program for generating graphs. It is a fairly
+ simple queuing algorithm that just writes dependencies and nodes.
+ http://www.research.att.com/sw/tools/graphviz/ */
+static bool Dotty(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgCache *Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == NULL))
+ return false;
+
+ bool GivenOnly = _config->FindB("APT::Cache::GivenOnly",false);
+
+ /* Normal packages are boxes
+ Pure Provides are triangles
+ Mixed are diamonds
+ Hexagons are missing packages*/
+ const char *Shapes[] = {"hexagon","triangle","box","diamond"};
+
+ /* Initialize the list of packages to show.
+ 1 = To Show
+ 2 = To Show no recurse
+ 3 = Emitted no recurse
+ 4 = Emitted
+ 0 = None */
+ enum States {None=0, ToShow, ToShowNR, DoneNR, Done};
+ enum TheFlags {ForceNR=(1<<0)};
+ auto PackageCount = Cache->Head().PackageCount;
+ unsigned char *Show = new unsigned char[PackageCount];
+ unsigned char *Flags = new unsigned char[PackageCount];
+ unsigned char *ShapeMap = new unsigned char[PackageCount];
+
+ // Show everything if no arguments given
+ if (CmdL.FileList[1] == 0)
+ for (decltype(PackageCount) I = 0; I != PackageCount; ++I)
+ Show[I] = ToShow;
+ else
+ for (decltype(PackageCount) I = 0; I != PackageCount; ++I)
+ Show[I] = None;
+ memset(Flags,0,sizeof(*Flags)*PackageCount);
+
+ // Map the shapes
+ for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ if (Pkg->VersionList == 0)
+ {
+ // Missing
+ if (Pkg->ProvidesList == 0)
+ ShapeMap[Pkg->ID] = 0;
+ else
+ ShapeMap[Pkg->ID] = 1;
+ }
+ else
+ {
+ // Normal
+ if (Pkg->ProvidesList == 0)
+ ShapeMap[Pkg->ID] = 2;
+ else
+ ShapeMap[Pkg->ID] = 3;
+ }
+ }
+
+ // Load the list of packages from the command line into the show list
+ APT::CacheSetHelper helper(true, GlobalError::NOTICE);
+ std::list<APT::CacheSetHelper::PkgModifier> mods;
+ mods.push_back(APT::CacheSetHelper::PkgModifier(0, ",", APT::PackageSet::Modifier::POSTFIX));
+ mods.push_back(APT::CacheSetHelper::PkgModifier(1, "^", APT::PackageSet::Modifier::POSTFIX));
+ std::map<unsigned short, APT::PackageSet> pkgsets =
+ APT::PackageSet::GroupedFromCommandLine(CacheFile, CmdL.FileList + 1, mods, 0, helper);
+
+ for (APT::PackageSet::const_iterator Pkg = pkgsets[0].begin();
+ Pkg != pkgsets[0].end(); ++Pkg)
+ Show[Pkg->ID] = ToShow;
+ for (APT::PackageSet::const_iterator Pkg = pkgsets[1].begin();
+ Pkg != pkgsets[1].end(); ++Pkg)
+ {
+ Show[Pkg->ID] = ToShow;
+ Flags[Pkg->ID] |= ForceNR;
+ }
+
+ // Little header
+ printf("digraph packages {\n");
+ printf("concentrate=true;\n");
+ printf("size=\"30,40\";\n");
+
+ bool Act = true;
+ while (Act == true)
+ {
+ Act = false;
+ for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ // See we need to show this package
+ if (Show[Pkg->ID] == None || Show[Pkg->ID] >= DoneNR)
+ continue;
+
+ // Colour as done
+ if (Show[Pkg->ID] == ToShowNR || (Flags[Pkg->ID] & ForceNR) == ForceNR)
+ {
+ // Pure Provides and missing packages have no deps!
+ if (ShapeMap[Pkg->ID] == 0 || ShapeMap[Pkg->ID] == 1)
+ Show[Pkg->ID] = Done;
+ else
+ Show[Pkg->ID] = DoneNR;
+ }
+ else
+ Show[Pkg->ID] = Done;
+ Act = true;
+
+ // No deps to map out
+ if (Pkg->VersionList == 0 || Show[Pkg->ID] == DoneNR)
+ continue;
+
+ pkgCache::VerIterator Ver = Pkg.VersionList();
+ for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; ++D)
+ {
+ // See if anything can meet this dep
+ // Walk along the actual package providing versions
+ bool Hit = false;
+ pkgCache::PkgIterator DPkg = D.TargetPkg();
+ for (pkgCache::VerIterator I = DPkg.VersionList();
+ I.end() == false && Hit == false; ++I)
+ {
+ if (Cache->VS->CheckDep(I.VerStr(),D->CompareOp,D.TargetVer()) == true)
+ Hit = true;
+ }
+
+ // Follow all provides
+ for (pkgCache::PrvIterator I = DPkg.ProvidesList();
+ I.end() == false && Hit == false; ++I)
+ {
+ if (Cache->VS->CheckDep(I.ProvideVersion(),D->CompareOp,D.TargetVer()) == false)
+ Hit = true;
+ }
+
+ // Only graph critical deps
+ if (D.IsCritical() == true)
+ {
+ printf("\"%s\" -> \"%s\"",Pkg.FullName(true).c_str(),D.TargetPkg().FullName(true).c_str());
+
+ // Colour the node for recursion
+ if (Show[D.TargetPkg()->ID] <= DoneNR)
+ {
+ /* If a conflicts does not meet anything in the database
+ then show the relation but do not recurse */
+ if (Hit == false && D.IsNegative() == true)
+ {
+ if (Show[D.TargetPkg()->ID] == None &&
+ Show[D.TargetPkg()->ID] != ToShow)
+ Show[D.TargetPkg()->ID] = ToShowNR;
+ }
+ else
+ {
+ if (GivenOnly == true && Show[D.TargetPkg()->ID] != ToShow)
+ Show[D.TargetPkg()->ID] = ToShowNR;
+ else
+ Show[D.TargetPkg()->ID] = ToShow;
+ }
+ }
+
+ // Edge colour
+ switch(D->Type)
+ {
+ case pkgCache::Dep::Conflicts:
+ case pkgCache::Dep::Obsoletes:
+ case pkgCache::Dep::DpkgBreaks:
+ printf("[color=springgreen];\n");
+ break;
+
+ case pkgCache::Dep::PreDepends:
+ printf("[color=blue];\n");
+ break;
+
+ default:
+ printf(";\n");
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw the box colours after the fact since we can not tell what colour
+ they should be until everything is finished drawing */
+ for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ if (Show[Pkg->ID] < DoneNR)
+ continue;
+
+ // Orange box for early recursion stoppage
+ if (Show[Pkg->ID] == DoneNR)
+ printf("\"%s\" [color=orange,shape=%s];\n",Pkg.FullName(true).c_str(),
+ Shapes[ShapeMap[Pkg->ID]]);
+ else
+ printf("\"%s\" [shape=%s];\n",Pkg.FullName(true).c_str(),
+ Shapes[ShapeMap[Pkg->ID]]);
+ }
+
+ printf("}\n");
+ delete[] Show;
+ delete[] Flags;
+ delete[] ShapeMap;
+ return true;
+}
+ /*}}}*/
+/* ShowAuto - show automatically installed packages (sorted) {{{*/
+static bool ShowAuto(CommandLine &)
+{
+ pkgCacheFile CacheFile;
+ pkgCache *Cache = CacheFile.GetPkgCache();
+ pkgDepCache *DepCache = CacheFile.GetDepCache();
+ if (unlikely(Cache == NULL || DepCache == NULL))
+ return false;
+
+ std::vector<string> packages;
+ packages.reserve(Cache->HeaderP->PackageCount / 3);
+
+ for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+ if ((*DepCache)[P].Flags & pkgCache::Flag::Auto)
+ packages.push_back(P.Name());
+
+ std::sort(packages.begin(), packages.end());
+
+ for (vector<string>::iterator I = packages.begin(); I != packages.end(); ++I)
+ cout << *I << "\n";
+
+ _error->Notice(_("This command is deprecated. Please use 'apt-mark showauto' instead."));
+ return true;
+}
+ /*}}}*/
+// ShowPkgNames - Show package names /*{{{*/
+// ---------------------------------------------------------------------
+/* This does a prefix match on the first argument */
+static bool ShowPkgNames(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ if (unlikely(CacheFile.BuildCaches(NULL, false) == false))
+ return false;
+ pkgCache::GrpIterator I = CacheFile.GetPkgCache()->GrpBegin();
+ bool const All = _config->FindB("APT::Cache::AllNames","false");
+
+ if (CmdL.FileList[1] != 0)
+ {
+ for (;I.end() != true; ++I)
+ {
+ if (All == false && I->FirstPackage == 0)
+ continue;
+ if (I.FindPkg("any")->VersionList == 0)
+ continue;
+ if (strncmp(I.Name(),CmdL.FileList[1],strlen(CmdL.FileList[1])) == 0)
+ cout << I.Name() << endl;
+ }
+
+ return true;
+ }
+
+ // Show all pkgs
+ for (;I.end() != true; ++I)
+ {
+ if (All == false && I->FirstPackage == 0)
+ continue;
+ if (I.FindPkg("any")->VersionList == 0)
+ continue;
+ cout << I.Name() << endl;
+ }
+
+ return true;
+}
+ /*}}}*/
+// Madison - Look a bit like katie's madison /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool Madison(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgSourceList *SrcList = CacheFile.GetSourceList();
+
+ if (SrcList == 0)
+ return false;
+
+ // Create the src text record parsers and ignore errors about missing
+ // deb-src lines that are generated from pkgSrcRecords::pkgSrcRecords
+ pkgSrcRecords SrcRecs(*SrcList);
+ if (_error->PendingError() == true)
+ _error->Discard();
+
+ APT::CacheSetHelper helper(true, GlobalError::NOTICE);
+ for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ {
+ _error->PushToStack();
+ APT::PackageList pkgset = APT::PackageList::FromString(CacheFile, *I, helper);
+ for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+ {
+ for (pkgCache::VerIterator V = Pkg.VersionList(); V.end() == false; ++V)
+ {
+ for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; ++VF)
+ {
+// This might be nice, but wouldn't uniquely identify the source -mdz
+// if (VF.File().Archive() != 0)
+// {
+// cout << setw(10) << Pkg.Name() << " | " << setw(10) << V.VerStr() << " | "
+// << VF.File().Archive() << endl;
+// }
+
+ // Locate the associated index files so we can derive a description
+ for (pkgSourceList::const_iterator S = SrcList->begin(); S != SrcList->end(); ++S)
+ {
+ vector<pkgIndexFile *> *Indexes = (*S)->GetIndexFiles();
+ for (vector<pkgIndexFile *>::const_iterator IF = Indexes->begin();
+ IF != Indexes->end(); ++IF)
+ {
+ if ((*IF)->FindInCache(*(VF.File().Cache())) == VF.File())
+ {
+ cout << setw(10) << Pkg.FullName(true) << " | " << setw(10) << V.VerStr() << " | "
+ << (*IF)->Describe(true) << endl;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ SrcRecs.Restart();
+ pkgSrcRecords::Parser *SrcParser;
+ bool foundSomething = false;
+ while ((SrcParser = SrcRecs.Find(*I, false)) != 0)
+ {
+ foundSomething = true;
+ // Maybe support Release info here too eventually
+ cout << setw(10) << SrcParser->Package() << " | "
+ << setw(10) << SrcParser->Version() << " | "
+ << SrcParser->Index().Describe(true) << endl;
+ }
+ if (foundSomething == true)
+ _error->RevertToStack();
+ else
+ _error->MergeWithStack();
+ }
+
+ return true;
+}
+ /*}}}*/
+// GenCaches - Call the main cache generator /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool GenCaches(CommandLine &)
+{
+ OpTextProgress Progress(*_config);
+
+ pkgCacheFile CacheFile;
+ return CacheFile.BuildCaches(&Progress, true);
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-cache [options] command\n"
+ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+ "\n"
+ "apt-cache queries and displays available information about installed\n"
+ "and installable packages. It works exclusively on the data acquired\n"
+ "into the local cache via the 'update' command of e.g. apt-get. The\n"
+ "displayed information may therefore be outdated if the last update was\n"
+ "too long ago, but in exchange apt-cache works independently of the\n"
+ "availability of the configured sources (e.g. offline).\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {"gencaches",&GenCaches, nullptr},
+ {"showsrc",&ShowSrcPackage, _("Show source records")},
+ {"showpkg",&DumpPackage, nullptr},
+ {"stats",&Stats, nullptr},
+ {"dump",&Dump, nullptr},
+ {"dumpavail",&DumpAvail, nullptr},
+ {"unmet",&UnMet, nullptr},
+ {"search",&DoSearch, _("Search the package list for a regex pattern")},
+ {"depends",&Depends, _("Show raw dependency information for a package")},
+ {"rdepends",&RDepends, _("Show reverse dependency information for a package")},
+ {"dotty",&Dotty, nullptr},
+ {"xvcg",&XVcg, nullptr},
+ {"show",&ShowPackage, _("Show a readable record for the package")},
+ {"pkgnames",&ShowPkgNames, _("List the names of all packages in the system")},
+ {"showauto",&ShowAuto, nullptr},
+ {"policy",&Policy, _("Show policy settings")},
+ {"madison",&Madison, nullptr},
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ // Parse the command line and initialize the package library
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CACHE, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ InitOutput();
+
+ if (_config->Exists("APT::Cache::Generate") == true)
+ _config->Set("pkgCacheFile::Generate", _config->FindB("APT::Cache::Generate", true));
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc
new file mode 100644
index 0000000..e9218ae
--- /dev/null
+++ b/cmdline/apt-cdrom.cc
@@ -0,0 +1,235 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ APT CDROM - Tool for handling APT's CDROM database.
+
+ Currently the only option is 'add' which will take the current CD
+ in the drive and add it into the database.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cdrom.h>
+#include <apt-pkg/cdromutl.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-output.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+class pkgCdromTextStatus : public pkgCdromStatus /*{{{*/
+{
+protected:
+ OpTextProgress Progress;
+ void Prompt(const char *Text);
+ string PromptLine(const char *Text);
+ bool AskCdromName(string &name) APT_OVERRIDE;
+
+public:
+ virtual void Update(string text, int current) APT_OVERRIDE;
+ virtual bool ChangeCdrom() APT_OVERRIDE;
+ virtual OpProgress* GetOpProgress() APT_OVERRIDE;
+};
+
+void pkgCdromTextStatus::Prompt(const char *Text)
+{
+ char C;
+ cout << Text << ' ' << flush;
+ if (read(STDIN_FILENO,&C,1) < 0)
+ _error->Errno("pkgCdromTextStatus::Prompt",
+ "Failed to read from standard input (not a terminal?)");
+ if (C != '\n')
+ cout << endl;
+}
+
+string pkgCdromTextStatus::PromptLine(const char *Text)
+{
+ cout << Text << ':' << endl;
+
+ string Res;
+ getline(cin,Res);
+ return Res;
+}
+
+bool pkgCdromTextStatus::AskCdromName(string &name)
+{
+ cout << _("Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'") << flush;
+ name = PromptLine("");
+
+ return true;
+}
+
+
+void pkgCdromTextStatus::Update(string text, int /*current*/)
+{
+ if(text.size() > 0)
+ cout << text << flush;
+}
+
+bool pkgCdromTextStatus::ChangeCdrom()
+{
+ Prompt(_("Please insert a Disc in the drive and press [Enter]"));
+ return true;
+}
+
+APT_PURE OpProgress* pkgCdromTextStatus::GetOpProgress()
+{
+ return &Progress;
+}
+ /*}}}*/
+// AddOrIdent - Add or Ident a CDROM /*{{{*/
+static bool AddOrIdent(bool const Add)
+{
+ pkgUdevCdromDevices UdevCdroms;
+ pkgCdromTextStatus log;
+ pkgCdrom cdrom;
+
+ bool oneSuccessful = false;
+ bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect", true);
+ if (AutoDetect == true && UdevCdroms.Dlopen() == true)
+ {
+ bool const Debug = _config->FindB("Debug::Acquire::cdrom", false);
+ std::string const CDMount = _config->Find("Acquire::cdrom::mount");
+ bool const NoMount = _config->FindB("APT::CDROM::NoMount", false);
+ if (NoMount == false)
+ _config->Set("APT::CDROM::NoMount", true);
+
+ vector<struct CdromDevice> const v = UdevCdroms.Scan();
+ for (std::vector<struct CdromDevice>::const_iterator cd = v.begin(); cd != v.end(); ++cd)
+ {
+ if (Debug)
+ clog << "Looking at device:"
+ << "\tDeviveName: '" << cd->DeviceName << "'"
+ << "\tIsMounted: '" << cd->Mounted << "'"
+ << "\tMountPoint: '" << cd->MountPath << "'"
+ << endl;
+
+ std::string AptMountPoint;
+ if (cd->Mounted)
+ _config->Set("Acquire::cdrom::mount", cd->MountPath);
+ else if (NoMount == true)
+ continue;
+ else
+ {
+ AptMountPoint = _config->FindDir("Dir::Media::MountPath");
+ if (FileExists(AptMountPoint) == false)
+ mkdir(AptMountPoint.c_str(), 0750);
+ if(MountCdrom(AptMountPoint, cd->DeviceName) == false)
+ {
+ _error->Warning(_("Failed to mount '%s' to '%s'"), cd->DeviceName.c_str(), AptMountPoint.c_str());
+ continue;
+ }
+ _config->Set("Acquire::cdrom::mount", AptMountPoint);
+ }
+
+ _error->PushToStack();
+ if (Add == true)
+ oneSuccessful = cdrom.Add(&log);
+ else
+ {
+ std::string id;
+ oneSuccessful = cdrom.Ident(id, &log);
+ }
+ _error->MergeWithStack();
+
+ if (AptMountPoint.empty() == false)
+ UnmountCdrom(AptMountPoint);
+ }
+ if (NoMount == false)
+ _config->Set("APT::CDROM::NoMount", NoMount);
+ _config->Set("Acquire::cdrom::mount", CDMount);
+ }
+
+ // fallback if auto-detect didn't work
+ if (oneSuccessful == false)
+ {
+ _error->PushToStack();
+ if (Add == true)
+ oneSuccessful = cdrom.Add(&log);
+ else
+ {
+ std::string id;
+ oneSuccessful = cdrom.Ident(id, &log);
+ }
+ _error->MergeWithStack();
+ }
+
+ if (oneSuccessful == false)
+ _error->Error("%s", _("No CD-ROM could be auto-detected or found using the default mount point.\n"
+ "You may try the --cdrom option to set the CD-ROM mount point.\n"
+ "See 'man apt-cdrom' for more information about the CD-ROM auto-detection and mount point."));
+ else if (Add == true)
+ cout << _("Repeat this process for the rest of the CDs in your set.") << endl;
+
+ return oneSuccessful;
+}
+ /*}}}*/
+// DoAdd - Add a new CDROM /*{{{*/
+// ---------------------------------------------------------------------
+/* This does the main add bit.. We show some status and things. The
+ sequence is to mount/umount the CD, Ident it then scan it for package
+ files and reduce that list. Then we copy over the package files and
+ verify them. Then rewrite the database files */
+static bool DoAdd(CommandLine &)
+{
+ return AddOrIdent(true);
+}
+ /*}}}*/
+// DoIdent - Ident a CDROM /*{{{*/
+static bool DoIdent(CommandLine &)
+{
+ return AddOrIdent(false);
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-cdrom [options] command\n"
+ "\n"
+ "apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+ "media types as package sources to APT. The mount point and device\n"
+ "information is taken from apt.conf(5), udev(7) and fstab(5).\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {"add", &DoAdd, "Add a CDROM"},
+ {"ident", &DoIdent, "Report the identity of a CDROM"},
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ // Parse the command line and initialize the package library
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CDROM, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ InitOutput();
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/cmdline/apt-config.cc b/cmdline/apt-config.cc
new file mode 100644
index 0000000..8ad7cac
--- /dev/null
+++ b/cmdline/apt-config.cc
@@ -0,0 +1,144 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ APT Config - Program to manipulate APT configuration files
+
+ This program will parse a config file and then do something with it.
+
+ Commands:
+ shell - Shell mode. After this a series of word pairs should occur.
+ The first is the environment var to set and the second is
+ the key to set it from. Use like:
+ eval `apt-config shell QMode apt::QMode`
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <map>
+#include <string>
+#include <vector>
+#include <string.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+// DoShell - Handle the shell command /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool DoShell(CommandLine &CmdL)
+{
+ for (const char **I = CmdL.FileList + 1; *I != 0; I += 2)
+ {
+ if (I[1] == 0 || strlen(I[1]) == 0)
+ return _error->Error(_("Arguments not in pairs"));
+
+ string key = I[1];
+ if (key.end()[-1] == '/') // old directory format
+ key.append("d");
+
+ if (_config->ExistsAny(key.c_str()))
+ cout << *I << "='" <<
+ SubstVar(_config->FindAny(key.c_str()),"'","'\\''") << '\'' << endl;
+
+ }
+
+ return true;
+}
+ /*}}}*/
+// DoDump - Dump the configuration space /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool DoDump(CommandLine &CmdL)
+{
+ bool const empty = _config->FindB("APT::Config::Dump::EmptyValue", true);
+ std::string const format = _config->Find("APT::Config::Dump::Format", "%F \"%v\";\n");
+ if (CmdL.FileSize() == 1)
+ _config->Dump(cout, NULL, format.c_str(), empty);
+ else
+ for (const char **I = CmdL.FileList + 1; *I != 0; ++I)
+ _config->Dump(cout, *I, format.c_str(), empty);
+ return true;
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-config [options] command\n"
+ "\n"
+ "apt-config is an interface to the configuration settings used by\n"
+ "all APT tools, mainly intended for debugging and shell scripting.\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {"shell", &DoShell, _("get configuration values via shell evaluation")},
+ {"dump", &DoDump, _("show the active configuration setting")},
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ // Parse the command line and initialize the package library
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CONFIG, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ std::vector<std::string> const langs = APT::Configuration::getLanguages(true);
+ _config->Clear("Acquire::Languages");
+ for (std::vector<std::string>::const_iterator l = langs.begin(); l != langs.end(); ++l)
+ _config->Set("Acquire::Languages::", *l);
+
+ std::vector<std::string> const archs = APT::Configuration::getArchitectures();
+ _config->Clear("APT::Architectures");
+ for (std::vector<std::string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
+ _config->Set("APT::Architectures::", *a);
+
+ string const conf = "APT::Compressor::";
+ std::map<std::string,std::string> CompressorNames;
+ for (auto && key : _config->FindVector("APT::Compressor", "", true))
+ {
+ auto const comp = conf + key + "::Name";
+ CompressorNames.emplace(_config->Find(comp, key), key);
+ }
+ std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+ _config->Clear("APT::Compressor");
+ for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressors.begin(); c != compressors.end(); ++c)
+ {
+ auto const n = CompressorNames.find(c->Name);
+ string comp = conf + (n == CompressorNames.end() ? c->Name : n->second) + "::";
+ _config->Set(comp + "Name", c->Name);
+ _config->Set(comp + "Extension", c->Extension);
+ _config->Set(comp + "Binary", c->Binary);
+ _config->Set((comp + "Cost").c_str(), c->Cost);
+ for (std::vector<std::string>::const_iterator a = c->CompressArgs.begin(); a != c->CompressArgs.end(); ++a)
+ _config->Set(comp + "CompressArg::", *a);
+ for (std::vector<std::string>::const_iterator a = c->UncompressArgs.begin(); a != c->UncompressArgs.end(); ++a)
+ _config->Set(comp + "UncompressArg::", *a);
+ }
+
+ std::vector<std::string> const profiles = APT::Configuration::getBuildProfiles();
+ _config->Clear("APT::Build-Profiles");
+ for (std::vector<std::string>::const_iterator p = profiles.begin(); p != profiles.end(); ++p)
+ _config->Set("APT::Build-Profiles::", *p);
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/cmdline/apt-dump-solver.cc b/cmdline/apt-dump-solver.cc
new file mode 100644
index 0000000..24a9f23
--- /dev/null
+++ b/cmdline/apt-dump-solver.cc
@@ -0,0 +1,185 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* #####################################################################
+
+ dummy solver to get quickly a scenario file out of APT
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cmndline.h>
+
+#include <cstdio>
+#include <iostream>
+#include <memory>
+#include <sstream>
+
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <string.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-dump-solver\n"
+ "\n"
+ "apt-dump-solver is an interface to store an EDSP scenario in\n"
+ "a file and optionally forwards it to another solver.\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {};
+}
+ /*}}}*/
+static int WriteError(char const * const uid, std::ostringstream &out, FileFd &stdoutfd, pid_t const &Solver)/*{{{*/
+{
+ _error->DumpErrors(out);
+ // ensure the solver isn't printing into "our" error message, too
+ if (Solver != 0)
+ ExecWait(Solver, "dump", true);
+ EDSP::WriteError(uid, out.str(), stdoutfd);
+ return 0;
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ CommandLine CmdL;
+ ParseCommandLine(CmdL, APT_CMD::APT_DUMP_SOLVER, &_config, nullptr, argc, argv, &ShowHelp, &GetCommands);
+ _config->Clear("Dir::Log");
+
+ bool const is_forwarding_dumper = (CmdL.FileSize() != 0);
+
+ FileFd stdoutfd;
+ if (stdoutfd.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
+ return 252;
+
+ FileFd dump;
+ char const * const filename = is_forwarding_dumper ? CmdL.FileList[0] : getenv("APT_EDSP_DUMP_FILENAME");
+ if (filename == nullptr || strlen(filename) == 0)
+ {
+ if (is_forwarding_dumper == false)
+ {
+ EDSP::WriteError("ERR_NO_FILENAME", "You have to set the environment variable APT_EDSP_DUMP_FILENAME\n"
+ "to a valid filename to store the dump of EDSP solver input in.\n"
+ "For example with: export APT_EDSP_DUMP_FILENAME=/tmp/dump.edsp", stdoutfd);
+ return 0;
+ }
+ }
+ else
+ {
+ // ignore errors here as logging isn't really critical
+ _error->PushToStack();
+ if (dump.Open(filename, FileFd::WriteOnly | FileFd::Exclusive | FileFd::Create, FileFd::Extension, 0644) == false &&
+ is_forwarding_dumper == false)
+ {
+ _error->MergeWithStack();
+ std::ostringstream out;
+ out << "Writing EDSP solver input to file '" << filename << "' failed as it couldn't be created!\n";
+ return WriteError("ERR_CREATE_FILE", out, stdoutfd, 0);
+ }
+ _error->RevertToStack();
+ }
+
+ pid_t Solver = 0;
+ FileFd forward;
+ if (is_forwarding_dumper)
+ {
+ signal(SIGPIPE, SIG_IGN);
+ int external[] = {-1, -1};
+ if (pipe(external) != 0)
+ return 250;
+ for (int i = 0; i < 2; ++i)
+ SetCloseExec(external[i], true);
+
+ Solver = ExecFork();
+ if (Solver == 0) {
+ _config->Set("APT::Sandbox::User", _config->Find("APT::Solver::RunAsUser", _config->Find("APT::Sandbox::User")));
+ DropPrivileges();
+ dup2(external[0], STDIN_FILENO);
+ execv(CmdL.FileList[1], const_cast<char**>(CmdL.FileList + 1));
+ std::cerr << "Failed to execute '" << CmdL.FileList[1] << "'!" << std::endl;
+ _exit(100);
+ }
+ close(external[0]);
+
+ if (WaitFd(external[1], true, 5) == false)
+ return 251;
+
+ if (forward.OpenDescriptor(external[1], FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
+ return 252;
+ }
+
+ DropPrivileges();
+
+ FileFd input;
+ if (input.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly) == false)
+ {
+ std::ostringstream out;
+ out << "Writing EDSP solver input to file '" << filename << "' failed as stdin couldn't be opened!\n";
+ return WriteError("ERR_READ_ERROR", out, stdoutfd, Solver);
+ }
+
+ constexpr size_t BufSize = 64 * 1024;
+ std::unique_ptr<char[]> Buf(new char[BufSize]);
+ unsigned long long ToRead = 0;
+ do {
+ if (input.Read(Buf.get(),BufSize, &ToRead) == false)
+ {
+ std::ostringstream out;
+ out << "Writing EDSP solver input to file '" << filename << "' failed as reading from stdin failed!\n";
+ return WriteError("ERR_READ_ERROR", out, stdoutfd, Solver);
+ }
+ if (ToRead == 0)
+ break;
+ if (forward.IsOpen() && forward.Failed() == false && forward.Write(Buf.get(),ToRead) == false)
+ forward.Close();
+ if (dump.IsOpen() && dump.Failed() == false && dump.Write(Buf.get(),ToRead) == false)
+ dump.Close();
+ } while (true);
+ input.Close();
+ forward.Close();
+ dump.Close();
+
+ if (is_forwarding_dumper)
+ {
+ // Wait and collect the error code
+ int Status;
+ while (waitpid(Solver, &Status, 0) != Solver)
+ {
+ if (errno == EINTR)
+ continue;
+
+ std::ostringstream out;
+ ioprintf(out, _("Waited for %s but it wasn't there"), CmdL.FileList[1]);
+ return WriteError("ERR_FORWARD", out, stdoutfd, 0);
+ }
+ if (WIFEXITED(Status))
+ return WEXITSTATUS(Status);
+ else
+ return 255;
+ }
+ else if (_error->PendingError())
+ {
+ std::ostringstream out;
+ out << "Writing EDSP solver input to file '" << filename << "' failed due to write errors!\n";
+ return WriteError("ERR_WRITE_ERROR", out, stdoutfd, Solver);
+ }
+ else
+ EDSP::WriteError("ERR_JUST_DUMPING", "I am too dumb, i can just dump!\nPlease use one of my friends instead!", stdoutfd);
+ return 0;
+}
diff --git a/cmdline/apt-extracttemplates.cc b/cmdline/apt-extracttemplates.cc
new file mode 100644
index 0000000..bc8a27d
--- /dev/null
+++ b/cmdline/apt-extracttemplates.cc
@@ -0,0 +1,335 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ APT Extract Templates - Program to extract debconf config and template
+ files
+
+ This is a simple program to extract config and template information
+ from Debian packages. It can be used to speed up the preconfiguration
+ process for debconf-enabled packages
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/mmap.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+#include <apt-pkg/version.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+
+#include <iostream>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "apt-extracttemplates.h"
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+pkgCache *DebFile::Cache = 0;
+
+// DebFile::DebFile - Construct the DebFile object /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+DebFile::DebFile(const char *debfile)
+ : File(debfile, FileFd::ReadOnly), Control(NULL), ControlLen(0),
+ DepOp(0), PreDepOp(0), Config(0), Template(0), Which(None)
+{
+}
+ /*}}}*/
+// DebFile::~DebFile - Destruct the DebFile object /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+DebFile::~DebFile()
+{
+ delete [] Control;
+ delete [] Config;
+ delete [] Template;
+}
+ /*}}}*/
+// DebFile::GetInstalledVer - Find out the installed version of a pkg /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string DebFile::GetInstalledVer(const string &package)
+{
+ pkgCache::PkgIterator Pkg = Cache->FindPkg(package);
+ if (Pkg.end() == false)
+ {
+ pkgCache::VerIterator V = Pkg.CurrentVer();
+ if (V.end() == false)
+ {
+ return V.VerStr();
+ }
+ }
+
+ return string();
+}
+ /*}}}*/
+// DebFile::Go - Start extracting a debian package /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool DebFile::Go()
+{
+ debDebFile Deb(File);
+
+ return Deb.ExtractTarMember(*this, "control.tar");
+}
+ /*}}}*/
+// DebFile::DoItem examine element in package and mark /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool DebFile::DoItem(Item &I, int &Fd)
+{
+ if (strcmp(I.Name, "control") == 0)
+ {
+ delete [] Control;
+ Control = new char[I.Size+3];
+ Control[I.Size] = '\n';
+ Control[I.Size + 1] = '\n';
+ Control[I.Size + 2] = '\0';
+ Which = IsControl;
+ ControlLen = I.Size + 3;
+ // make it call the Process method below. this is so evil
+ Fd = -2;
+ }
+ else if (strcmp(I.Name, "config") == 0)
+ {
+ delete [] Config;
+ Config = new char[I.Size+1];
+ Config[I.Size] = 0;
+ Which = IsConfig;
+ Fd = -2;
+ }
+ else if (strcmp(I.Name, "templates") == 0)
+ {
+ delete [] Template;
+ Template = new char[I.Size+1];
+ Template[I.Size] = 0;
+ Which = IsTemplate;
+ Fd = -2;
+ }
+ else
+ {
+ // Ignore it
+ Fd = -1;
+ }
+ return true;
+}
+ /*}}}*/
+// DebFile::Process examine element in package and copy /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool DebFile::Process(Item &/*I*/, const unsigned char *data,
+ unsigned long long size, unsigned long long pos)
+{
+ switch (Which)
+ {
+ case IsControl:
+ memcpy(Control + pos, data, size);
+ break;
+ case IsConfig:
+ memcpy(Config + pos, data, size);
+ break;
+ case IsTemplate:
+ memcpy(Template + pos, data, size);
+ break;
+ default: /* throw it away */ ;
+ }
+ return true;
+}
+ /*}}}*/
+// DebFile::ParseInfo - Parse control file for dependency info /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool DebFile::ParseInfo()
+{
+ if (Control == NULL) return false;
+
+ pkgTagSection Section;
+ if (Section.Scan(Control, ControlLen) == false)
+ return false;
+
+ Package = Section.FindS("Package");
+ Version = GetInstalledVer(Package);
+
+ const char *Start, *Stop;
+ if (Section.Find("Depends", Start, Stop) == true)
+ {
+ while (1)
+ {
+ string P, V;
+ unsigned int Op;
+ Start = debListParser::ParseDepends(Start, Stop, P, V, Op);
+ if (Start == 0) return false;
+ if (P == "debconf")
+ {
+ DepVer = V;
+ DepOp = Op;
+ break;
+ }
+ if (Start == Stop) break;
+ }
+ }
+
+ if (Section.Find("Pre-Depends", Start, Stop) == true)
+ {
+ while (1)
+ {
+ string P, V;
+ unsigned int Op;
+ Start = debListParser::ParseDepends(Start, Stop, P, V, Op);
+ if (Start == 0) return false;
+ if (P == "debconf")
+ {
+ PreDepVer = V;
+ PreDepOp = Op;
+ break;
+ }
+ if (Start == Stop) break;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ cout <<
+ _("Usage: apt-extracttemplates file1 [file2 ...]\n"
+ "\n"
+ "apt-extracttemplates is used to extract config and template files\n"
+ "from debian packages. It is used mainly by debconf(1) to prompt for\n"
+ "configuration questions before installation of packages.\n");
+ return true;
+}
+ /*}}}*/
+// WriteFile - write the contents of the passed string to a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static string WriteFile(const char *package, const char *prefix, const char *data)
+{
+ FileFd f;
+ std::string tplname;
+ strprintf(tplname, "%s.%s", package, prefix);
+ GetTempFile(tplname, false, &f);
+ if (data != nullptr)
+ f.Write(data, strlen(data));
+ return f.Name();
+}
+ /*}}}*/
+// WriteConfig - write out the config data from a debian package file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static void WriteConfig(const DebFile &file)
+{
+ string templatefile = WriteFile(file.Package.c_str(), "template", file.Template);
+ string configscript = WriteFile(file.Package.c_str(), "config", file.Config);
+
+ if (templatefile.empty() == true || configscript.empty() == true)
+ return;
+ cout << file.Package << " " << file.Version << " "
+ << templatefile << " " << configscript << endl;
+}
+ /*}}}*/
+// InitCache - initialize the package cache /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool Go(CommandLine &CmdL)
+{
+ // Initialize the apt cache
+ MMap *Map = 0;
+ pkgSourceList List;
+ List.ReadMainList();
+ pkgCacheGenerator::MakeStatusCache(List,NULL,&Map,true);
+ if (Map == 0)
+ return false;
+ DebFile::Cache = new pkgCache(Map);
+ if (_error->PendingError() == true)
+ return false;
+
+ // Find out what version of debconf is currently installed
+ string debconfver = DebFile::GetInstalledVer("debconf");
+ if (debconfver.empty() == true)
+ return _error->Error( _("Cannot get debconf version. Is debconf installed?"));
+
+ auto const tmpdir = _config->Find("APT::ExtractTemplates::TempDir");
+ if (tmpdir.empty() == false)
+ setenv("TMPDIR", tmpdir.c_str(), 1);
+
+ // Process each package passsed in
+ for (unsigned int I = 0; I != CmdL.FileSize(); I++)
+ {
+ // Will pick up the errors later..
+ DebFile file(CmdL.FileList[I]);
+ if (file.Go() == false)
+ {
+ _error->Error("Prior errors apply to %s",CmdL.FileList[I]);
+ continue;
+ }
+
+ // Does the package have templates?
+ if (file.Template != 0 && file.ParseInfo() == true)
+ {
+ // Check to make sure debconf dependencies are
+ // satisfied
+ // cout << "Check " << file.DepVer << ',' << debconfver << endl;
+ if (file.DepVer != "" &&
+ DebFile::Cache->VS->CheckDep(debconfver.c_str(),
+ file.DepOp,file.DepVer.c_str()
+ ) == false)
+ continue;
+ if (file.PreDepVer != "" &&
+ DebFile::Cache->VS->CheckDep(debconfver.c_str(),
+ file.PreDepOp,file.PreDepVer.c_str()
+ ) == false)
+ continue;
+
+ WriteConfig(file);
+ }
+ }
+
+
+ delete Map;
+ delete DebFile::Cache;
+
+ return !_error->PendingError();
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc, const char **argv) /*{{{*/
+{
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_EXTRACTTEMPLATES, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ Go(CmdL);
+
+ return DispatchCommandLine(CmdL, {});
+}
+ /*}}}*/
diff --git a/cmdline/apt-extracttemplates.h b/cmdline/apt-extracttemplates.h
new file mode 100644
index 0000000..bbd926e
--- /dev/null
+++ b/cmdline/apt-extracttemplates.h
@@ -0,0 +1,49 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ apt-extracttemplate - tool to extract template and config data
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef _APTEXTRACTTEMPLATE_H_
+#define _APTEXTRACTTEMPLATE_H_
+
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/fileutl.h>
+
+#include <string>
+
+class pkgCache;
+
+class DebFile : public pkgDirStream
+{
+ FileFd File;
+ char *Control;
+ unsigned long ControlLen;
+
+public:
+ explicit DebFile(const char *FileName);
+ ~DebFile();
+ bool DoItem(Item &I, int &fd) APT_OVERRIDE;
+ bool Process(pkgDirStream::Item &I, const unsigned char *data,
+ unsigned long long size, unsigned long long pos) APT_OVERRIDE;
+
+ bool Go();
+ bool ParseInfo();
+
+ static std::string GetInstalledVer(const std::string &package);
+
+ std::string Package;
+ std::string Version;
+ std::string DepVer, PreDepVer;
+ unsigned int DepOp, PreDepOp;
+
+ char *Config;
+ char *Template;
+
+ static pkgCache *Cache;
+ enum { None, IsControl, IsConfig, IsTemplate } Which;
+};
+
+#endif
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
new file mode 100644
index 0000000..da18d2d
--- /dev/null
+++ b/cmdline/apt-get.cc
@@ -0,0 +1,446 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ apt-get - Cover for dpkg
+
+ This is an allout cover for dpkg implementing a safer front end. It is
+ based largely on libapt-pkg.
+
+ The syntax is different,
+ apt-get [opt] command [things]
+ Where command is:
+ update - Resyncronize the package files from their sources
+ upgrade - Smart-Download the newest versions of all packages
+ dselect-upgrade - Follows dselect's changes to the Status: field
+ and installs new and removes old packages
+ dist-upgrade - Powerful upgrader designed to handle the issues with
+ a new distribution.
+ install - Download and install a given package (by name, not by .deb)
+ check - Update the package cache and check for broken packages
+ clean - Erase the .debs downloaded to /var/cache/apt/archives and
+ the partial dir too
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/clean.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debmetaindex.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/sptr.h>
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/upgrade.h>
+#include <apt-pkg/version.h>
+
+#include <apt-private/acqprogress.h>
+#include <apt-private/private-cachefile.h>
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-download.h>
+#include <apt-private/private-install.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-moo.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-source.h>
+#include <apt-private/private-update.h>
+#include <apt-private/private-upgrade.h>
+#include <apt-private/private-utils.h>
+
+#include <errno.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+/* mark packages as automatically/manually installed. {{{*/
+static bool DoMarkAuto(CommandLine &CmdL)
+{
+ bool Action = true;
+ int AutoMarkChanged = 0;
+ OpTextProgress progress;
+ CacheFile Cache;
+ if (Cache.Open() == false)
+ return false;
+
+ if (strcasecmp(CmdL.FileList[0],"markauto") == 0)
+ Action = true;
+ else if (strcasecmp(CmdL.FileList[0],"unmarkauto") == 0)
+ Action = false;
+
+ for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ {
+ const char *S = *I;
+ // Locate the package
+ pkgCache::PkgIterator Pkg = Cache->FindPkg(S);
+ if (Pkg.end() == true) {
+ return _error->Error(_("Couldn't find package %s"),S);
+ }
+ else
+ {
+ if (!Action)
+ ioprintf(c1out,_("%s set to manually installed.\n"), Pkg.Name());
+ else
+ ioprintf(c1out,_("%s set to automatically installed.\n"),
+ Pkg.Name());
+
+ Cache->MarkAuto(Pkg,Action);
+ AutoMarkChanged++;
+ }
+ }
+
+ _error->Notice(_("This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' instead."));
+
+ if (AutoMarkChanged && ! _config->FindB("APT::Get::Simulate",false))
+ return Cache->writeStateFile(NULL);
+ return false;
+}
+ /*}}}*/
+// DoDSelectUpgrade - Do an upgrade by following dselects selections /*{{{*/
+// ---------------------------------------------------------------------
+/* Follows dselect's selections */
+static bool DoDSelectUpgrade(CommandLine &)
+{
+ CacheFile Cache;
+ if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
+ return false;
+
+ pkgDepCache::ActionGroup group(Cache);
+
+ // Install everything with the install flag set
+ pkgCache::PkgIterator I = Cache->PkgBegin();
+ for (;I.end() != true; ++I)
+ {
+ /* Install the package only if it is a new install, the autoupgrader
+ will deal with the rest */
+ if (I->SelectedState == pkgCache::State::Install)
+ Cache->MarkInstall(I,false);
+ }
+
+ /* Now install their deps too, if we do this above then order of
+ the status file is significant for | groups */
+ for (I = Cache->PkgBegin();I.end() != true; ++I)
+ {
+ /* Install the package only if it is a new install, the autoupgrader
+ will deal with the rest */
+ if (I->SelectedState == pkgCache::State::Install)
+ Cache->MarkInstall(I,true);
+ }
+
+ // Apply erasures now, they override everything else.
+ for (I = Cache->PkgBegin();I.end() != true; ++I)
+ {
+ // Remove packages
+ if (I->SelectedState == pkgCache::State::DeInstall ||
+ I->SelectedState == pkgCache::State::Purge)
+ Cache->MarkDelete(I,I->SelectedState == pkgCache::State::Purge);
+ }
+
+ /* Resolve any problems that dselect created, allupgrade cannot handle
+ such things. We do so quite aggressively too.. */
+ if (Cache->BrokenCount() != 0)
+ {
+ pkgProblemResolver Fix(Cache);
+
+ // Hold back held packages.
+ if (_config->FindB("APT::Ignore-Hold",false) == false)
+ {
+ for (pkgCache::PkgIterator I = Cache->PkgBegin(); I.end() == false; ++I)
+ {
+ if (I->SelectedState == pkgCache::State::Hold)
+ {
+ Fix.Protect(I);
+ Cache->MarkKeep(I);
+ }
+ }
+ }
+
+ if (Fix.Resolve() == false)
+ {
+ ShowBroken(c1out,Cache,false);
+ return _error->Error(_("Internal error, problem resolver broke stuff"));
+ }
+ }
+
+ // Now upgrade everything
+ if (APT::Upgrade::Upgrade(Cache, APT::Upgrade::FORBID_REMOVE_PACKAGES | APT::Upgrade::FORBID_INSTALL_NEW_PACKAGES) == false)
+ {
+ ShowBroken(c1out,Cache,false);
+ return _error->Error(_("Internal error, problem resolver broke stuff"));
+ }
+
+ return InstallPackages(Cache,false);
+}
+ /*}}}*/
+// DoCheck - Perform the check operation /*{{{*/
+// ---------------------------------------------------------------------
+/* Opening automatically checks the system, this command is mostly used
+ for debugging */
+static bool DoCheck(CommandLine &)
+{
+ CacheFile Cache;
+ Cache.Open();
+ Cache.CheckDeps();
+
+ return true;
+}
+ /*}}}*/
+// DoIndexTargets - Lists all IndexTargets /*{{{*/
+static std::string format_key(std::string key)
+{
+ // deb822 is case-insensitive, but the human eye prefers candy
+ std::transform(key.begin(), key.end(), key.begin(), ::tolower);
+ key[0] = ::toupper(key[0]);
+ size_t found = key.find("_uri");
+ if (found != std::string::npos)
+ key.replace(found, 4, "-URI");
+ while ((found = key.find('_')) != std::string::npos)
+ {
+ key[found] = '-';
+ key[found + 1] = ::toupper(key[found + 1]);
+ }
+ return key;
+}
+static bool DoIndexTargets(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgSourceList *SrcList = CacheFile.GetSourceList();
+ pkgCache *Cache = CacheFile.GetPkgCache();
+
+ if (SrcList == nullptr || Cache == nullptr)
+ return false;
+
+ std::string const Format = _config->Find("APT::Get::IndexTargets::Format");
+ bool const ReleaseInfo = _config->FindB("APT::Get::IndexTargets::ReleaseInfo", true);
+ bool Filtered = CmdL.FileSize() > 1;
+ for (pkgSourceList::const_iterator S = SrcList->begin(); S != SrcList->end(); ++S)
+ {
+ std::vector<IndexTarget> const targets = (*S)->GetIndexTargets();
+ std::map<std::string, string> AddOptions;
+ if (ReleaseInfo)
+ {
+ AddOptions.insert(std::make_pair("TRUSTED", ((*S)->IsTrusted() ? "yes" : "no")));
+ pkgCache::RlsFileIterator const RlsFile = (*S)->FindInCache(*Cache, false);
+ if (RlsFile.end())
+ continue;
+#define APT_RELEASE(X,Y) if (RlsFile.Y() != NULL) AddOptions.insert(std::make_pair(X, RlsFile.Y()))
+ APT_RELEASE("CODENAME", Codename);
+ APT_RELEASE("SUITE", Archive);
+ APT_RELEASE("VERSION", Version);
+ APT_RELEASE("ORIGIN", Origin);
+ APT_RELEASE("LABEL", Label);
+#undef APT_RELEASE
+ }
+
+ for (std::vector<IndexTarget>::const_iterator T = targets.begin(); T != targets.end(); ++T)
+ {
+ std::string filename = T->Option(ReleaseInfo ? IndexTarget::EXISTING_FILENAME : IndexTarget::FILENAME);
+ if (filename.empty())
+ continue;
+
+ std::ostringstream stanza;
+ if (Filtered || Format.empty())
+ {
+ stanza << "MetaKey: " << T->MetaKey << "\n"
+ << "ShortDesc: " << T->ShortDesc << "\n"
+ << "Description: " << T->Description << "\n"
+ << "URI: " << T->URI << "\n"
+ << "Filename: " << filename << "\n"
+ << "Optional: " << (T->IsOptional ? "yes" : "no") << "\n"
+ << "KeepCompressed: " << (T->KeepCompressed ? "yes" : "no") << "\n";
+ for (std::map<std::string,std::string>::const_iterator O = AddOptions.begin(); O != AddOptions.end(); ++O)
+ stanza << format_key(O->first) << ": " << O->second << "\n";
+ for (std::map<std::string,std::string>::const_iterator O = T->Options.begin(); O != T->Options.end(); ++O)
+ {
+ if (O->first == "PDIFFS")
+ stanza << "PDiffs: " << O->second << "\n";
+ else if (O->first == "COMPRESSIONTYPES")
+ stanza << "CompressionTypes: " << O->second << "\n";
+ else if (O->first == "KEEPCOMPRESSEDAS")
+ stanza << "KeepCompressedAs: " << O->second << "\n";
+ else if (O->first == "DEFAULTENABLED")
+ stanza << "DefaultEnabled: " << O->second << "\n";
+ else
+ stanza << format_key(O->first) << ": " << O->second << "\n";
+ }
+ stanza << "\n";
+
+ if (Filtered)
+ {
+ // that is a bit crude, but good enough for now
+ bool found = true;
+ std::string haystack = std::string("\n") + stanza.str() + "\n";
+ std::transform(haystack.begin(), haystack.end(), haystack.begin(), ::tolower);
+ size_t const filesize = CmdL.FileSize() - 1;
+ for (size_t i = 0; i != filesize; ++i)
+ {
+ std::string needle = std::string("\n") + CmdL.FileList[i + 1] + "\n";
+ std::transform(needle.begin(), needle.end(), needle.begin(), ::tolower);
+ if (haystack.find(needle) != std::string::npos)
+ continue;
+ found = false;
+ break;
+ }
+ if (found == false)
+ continue;
+ }
+ }
+
+ if (Format.empty())
+ cout << stanza.str();
+ else
+ {
+ std::string out = SubstVar(Format, "$(FILENAME)", filename);
+ out = T->Format(out);
+ for (std::map<std::string,std::string>::const_iterator O = AddOptions.begin(); O != AddOptions.end(); ++O)
+ out = SubstVar(out, std::string("$(") + O->first + ")", O->second);
+ cout << out << std::endl;
+ }
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ if (_config->FindB("version") == true)
+ {
+ cout << _("Supported modules:") << endl;
+
+ for (unsigned I = 0; I != pkgVersioningSystem::GlobalListLen; I++)
+ {
+ pkgVersioningSystem *VS = pkgVersioningSystem::GlobalList[I];
+ if (_system != 0 && _system->VS == VS)
+ cout << '*';
+ else
+ cout << ' ';
+ cout << "Ver: " << VS->Label << endl;
+
+ /* Print out all the packaging systems that will work with
+ this VS */
+ for (unsigned J = 0; J != pkgSystem::GlobalListLen; J++)
+ {
+ pkgSystem *Sys = pkgSystem::GlobalList[J];
+ if (_system == Sys)
+ cout << '*';
+ else
+ cout << ' ';
+ if (Sys->VS->TestCompatibility(*VS) == true)
+ cout << "Pkg: " << Sys->Label << " (Priority " << Sys->Score(*_config) << ")" << endl;
+ }
+ }
+
+ for (unsigned I = 0; I != pkgSourceList::Type::GlobalListLen; I++)
+ {
+ pkgSourceList::Type *Type = pkgSourceList::Type::GlobalList[I];
+ cout << " S.L: '" << Type->Name << "' " << Type->Label << endl;
+ }
+
+ for (unsigned I = 0; I != pkgIndexFile::Type::GlobalListLen; I++)
+ {
+ pkgIndexFile::Type *Type = pkgIndexFile::Type::GlobalList[I];
+ cout << " Idx: " << Type->Label << endl;
+ }
+
+ return true;
+ }
+
+ std::cout <<
+ _("Usage: apt-get [options] command\n"
+ " apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+ " apt-get [options] source pkg1 [pkg2 ...]\n"
+ "\n"
+ "apt-get is a command line interface for retrieval of packages\n"
+ "and information about them from authenticated sources and\n"
+ "for installation, upgrade and removal of packages together\n"
+ "with their dependencies.\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {"update", &DoUpdate, _("Retrieve new lists of packages")},
+ {"upgrade", &DoUpgrade, _("Perform an upgrade")},
+ {"install", &DoInstall, _("Install new packages (pkg is libc6 not libc6.deb)")},
+ {"reinstall", &DoInstall, _("Reinstall packages (pkg is libc6 not libc6.deb)")},
+ {"remove", &DoInstall, _("Remove packages")},
+ {"purge", &DoInstall, _("Remove packages and config files")},
+ {"autoremove", &DoInstall, _("Remove automatically all unused packages")},
+ {"auto-remove", &DoInstall, nullptr},
+ {"autopurge",&DoInstall, nullptr},
+ {"markauto", &DoMarkAuto, nullptr},
+ {"unmarkauto", &DoMarkAuto, nullptr},
+ {"dist-upgrade", &DoDistUpgrade, _("Distribution upgrade, see apt-get(8)")},
+ {"full-upgrade", &DoDistUpgrade, nullptr},
+ {"dselect-upgrade", &DoDSelectUpgrade, _("Follow dselect selections")},
+ {"build-dep", &DoBuildDep, _("Configure build-dependencies for source packages")},
+ {"clean", &DoClean, _("Erase downloaded archive files")},
+ {"autoclean", &DoAutoClean, _("Erase old downloaded archive files")},
+ {"auto-clean", &DoAutoClean, nullptr},
+ {"check", &DoCheck, _("Verify that there are no broken dependencies")},
+ {"source", &DoSource, _("Download source archives")},
+ {"download", &DoDownload, _("Download the binary package into the current directory")},
+ {"changelog", &DoChangelog, _("Download and display the changelog for the given package")},
+ {"indextargets", &DoIndexTargets, nullptr},
+ {"moo", &DoMoo, nullptr},
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ // Parse the command line and initialize the package library
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_GET, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ InitSignals();
+ InitOutput();
+
+ CheckIfSimulateMode(CmdL);
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc
new file mode 100644
index 0000000..beac0ef
--- /dev/null
+++ b/cmdline/apt-helper.cc
@@ -0,0 +1,271 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* #####################################################################
+ apt-helper - cmdline helpers
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/proxy.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-pkg/srvrec.h>
+#include <apt-private/acqprogress.h>
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-download.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-output.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+static bool DoAutoDetectProxy(CommandLine &CmdL) /*{{{*/
+{
+ if (CmdL.FileSize() != 2)
+ return _error->Error(_("Need one URL as argument"));
+ URI ServerURL(CmdL.FileList[1]);
+ if (AutoDetectProxy(ServerURL) == false)
+ return false;
+ std::string SpecificProxy = _config->Find("Acquire::"+ServerURL.Access+"::Proxy::" + ServerURL.Host);
+ ioprintf(std::cout, "Using proxy '%s' for URL '%s'\n",
+ SpecificProxy.c_str(), std::string(ServerURL).c_str());
+
+ return true;
+}
+ /*}}}*/
+static bool DoDownloadFile(CommandLine &CmdL) /*{{{*/
+{
+ if (CmdL.FileSize() <= 2)
+ return _error->Error(_("Must specify at least one pair url/filename"));
+
+ aptAcquireWithTextStatus Fetcher;
+ size_t fileind = 0;
+ std::vector<std::string> targetfiles;
+ while (fileind + 2 <= CmdL.FileSize())
+ {
+ std::string download_uri = CmdL.FileList[fileind + 1];
+ std::string targetfile = CmdL.FileList[fileind + 2];
+ std::string hash;
+ if (CmdL.FileSize() > fileind + 3)
+ hash = CmdL.FileList[fileind + 3];
+ // we use download_uri as descr and targetfile as short-descr
+ new pkgAcqFile(&Fetcher, download_uri, hash, 0, download_uri, targetfile,
+ "dest-dir-ignored", targetfile);
+ targetfiles.push_back(targetfile);
+ fileind += 3;
+ }
+
+ bool Failed = false;
+ if (AcquireRun(Fetcher, 0, &Failed, NULL) == false || Failed == true)
+ return _error->Error(_("Download Failed"));
+ if (targetfiles.empty() == false)
+ for (std::vector<std::string>::const_iterator f = targetfiles.begin(); f != targetfiles.end(); ++f)
+ if (FileExists(*f) == false)
+ return _error->Error(_("Download Failed"));
+
+ return true;
+}
+ /*}}}*/
+static bool DoSrvLookup(CommandLine &CmdL) /*{{{*/
+{
+ if (CmdL.FileSize() <= 1)
+ return _error->Error("Must specify at least one SRV record");
+
+ for(size_t i = 1; CmdL.FileList[i] != NULL; ++i)
+ {
+ std::vector<SrvRec> srv_records;
+ std::string const name = CmdL.FileList[i];
+ c0out << "# Target\tPriority\tWeight\tPort # for " << name << std::endl;
+ size_t const found = name.find(":");
+ if (found != std::string::npos)
+ {
+ std::string const host = name.substr(0, found);
+ size_t const port = atoi(name.c_str() + found + 1);
+ if(GetSrvRecords(host, port, srv_records) == false)
+ _error->Error(_("GetSrvRec failed for %s"), name.c_str());
+ }
+ else if(GetSrvRecords(name, srv_records) == false)
+ _error->Error(_("GetSrvRec failed for %s"), name.c_str());
+
+ for (SrvRec const &I : srv_records)
+ ioprintf(c1out, "%s\t%d\t%d\t%d\n", I.target.c_str(), I.priority, I.weight, I.port);
+ }
+ return true;
+}
+ /*}}}*/
+static const APT::Configuration::Compressor *FindCompressor(std::vector<APT::Configuration::Compressor> const & compressors, std::string name) /*{{{*/
+{
+ APT::Configuration::Compressor const * compressor = NULL;
+ for (auto const & c : compressors)
+ {
+ if (compressor != NULL && c.Cost >= compressor->Cost)
+ continue;
+ if (c.Name == name || c.Extension == name || (!c.Extension.empty() && c.Extension.substr(1) == name))
+ compressor = &c;
+ }
+
+ return compressor;
+}
+ /*}}}*/
+static bool DoCatFile(CommandLine &CmdL) /*{{{*/
+{
+ FileFd fd;
+ FileFd out;
+ std::string const compressorName = _config->Find("Apt-Helper::Cat-File::Compress", "");
+
+ if (compressorName.empty() == false)
+ {
+
+ auto const compressors = APT::Configuration::getCompressors();
+ auto const compressor = FindCompressor(compressors, compressorName);
+
+ if (compressor == NULL)
+ return _error->Error("Could not find compressor: %s", compressorName.c_str());
+
+ if (out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly, *compressor) == false)
+ return false;
+ } else
+ {
+ if (out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly) == false)
+ return false;
+ }
+
+ if (CmdL.FileSize() <= 1)
+ {
+ if (fd.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly) == false)
+ return false;
+ if (CopyFile(fd, out) == false)
+ return false;
+ return true;
+ }
+
+ for(size_t i = 1; CmdL.FileList[i] != NULL; ++i)
+ {
+ std::string const name = CmdL.FileList[i];
+
+ if (name != "-")
+ {
+ if (fd.Open(name, FileFd::ReadOnly, FileFd::Extension) == false)
+ return false;
+ }
+ else
+ {
+ if (fd.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly) == false)
+ return false;
+ }
+
+ if (CopyFile(fd, out) == false)
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+
+static pid_t ExecuteProcess(const char *Args[]) /*{{{*/
+{
+ pid_t pid = ExecFork();
+ if (pid == 0)
+ {
+ execvp(Args[0], (char **)Args);
+ _exit(100);
+ }
+ return pid;
+}
+
+static bool ServiceIsActive(const char *service)
+{
+ const char *argv[] = {"systemctl", "is-active", "-q", service, nullptr};
+ pid_t pid = ExecuteProcess(argv);
+ return ExecWait(pid, "systemctl is-active", true);
+}
+
+static bool DoWaitOnline(CommandLine &)
+{
+ // Also add services to After= in .service
+ static const char *WaitingTasks[][6] = {
+ {"systemd-networkd.service", "/lib/systemd/systemd-networkd-wait-online", "-q", "--timeout=30", nullptr},
+ {"NetworkManager.service", "nm-online", "-q", "--timeout", "30", nullptr},
+ {"connman.service", "connmand-wait-online", "--timeout=30", nullptr},
+ };
+
+ for (const char **task : WaitingTasks)
+ {
+ if (ServiceIsActive(task[0]))
+ {
+ pid_t pid = ExecuteProcess(task + 1);
+
+ ExecWait(pid, task[1]);
+ }
+ }
+
+ return _error->PendingError() == false;
+}
+ /*}}}*/
+static bool DropPrivsAndRun(CommandLine &CmdL) /*{{{*/
+{
+ if (CmdL.FileSize() < 2)
+ return _error->Error("No command given to run without privileges");
+ if (DropPrivileges() == false)
+ return _error->Error("Dropping Privileges failed, not executing '%s'", CmdL.FileList[1]);
+
+ std::vector<char const *> Args;
+ Args.reserve(CmdL.FileSize() + 1);
+ for (auto a = CmdL.FileList + 1; *a != nullptr; ++a)
+ Args.push_back(*a);
+ Args.push_back(nullptr);
+ auto const pid = ExecuteProcess(Args.data());
+ return ExecWait(pid, CmdL.FileList[1]);
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-helper [options] command\n"
+ " apt-helper [options] cat-file file ...\n"
+ " apt-helper [options] download-file uri target-path\n"
+ "\n"
+ "apt-helper bundles a variety of commands for shell scripts to use\n"
+ "e.g. the same proxy configuration or acquire system as APT would.\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {"download-file", &DoDownloadFile, _("download the given uri to the target-path")},
+ {"srv-lookup", &DoSrvLookup, _("lookup a SRV record (e.g. _http._tcp.ftp.debian.org)")},
+ {"cat-file", &DoCatFile, _("concatenate files, with automatic decompression")},
+ {"auto-detect-proxy", &DoAutoDetectProxy, _("detect proxy using apt.conf")},
+ {"wait-online", &DoWaitOnline, _("wait for system to be online")},
+ {"drop-privs", &DropPrivsAndRun, _("drop privileges before running given command")},
+ {nullptr, nullptr, nullptr}};
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_HELPER, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ InitOutput();
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/cmdline/apt-internal-planner.cc b/cmdline/apt-internal-planner.cc
new file mode 100644
index 0000000..be9de4e
--- /dev/null
+++ b/cmdline/apt-internal-planner.cc
@@ -0,0 +1,195 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* #####################################################################
+
+ cover around the internal solver to be able to run it like an external
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/prettyprinters.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-output.h>
+
+#include <cstdio>
+#include <iostream>
+#include <list>
+#include <sstream>
+#include <string>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-internal-planner\n"
+ "\n"
+ "apt-internal-planner is an interface to use the current internal\n"
+ "installation planner for the APT family like an external one,\n"
+ "for debugging or the like.\n");
+ return true;
+}
+ /*}}}*/
+APT_NORETURN static void DIE(std::string const &message) { /*{{{*/
+ std::cerr << "ERROR: " << message << std::endl;
+ _error->DumpErrors(std::cerr);
+ exit(EXIT_FAILURE);
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {};
+}
+ /*}}}*/
+class PMOutput: public pkgPackageManager /*{{{*/
+{
+ FileFd &output;
+ bool const Debug;
+
+protected:
+ virtual bool Install(PkgIterator Pkg,std::string) APT_OVERRIDE
+ {
+ //std::cerr << "INSTALL: " << APT::PrettyPkg(&Cache, Pkg) << std::endl;
+ return EDSP::WriteSolutionStanza(output, "Unpack", Cache[Pkg].InstVerIter(Cache));
+ }
+ virtual bool Configure(PkgIterator Pkg) APT_OVERRIDE
+ {
+ //std::cerr << "CONFIGURE: " << APT::PrettyPkg(&Cache, Pkg) << " " << std::endl;
+ return EDSP::WriteSolutionStanza(output, "Configure", Cache[Pkg].InstVerIter(Cache));
+ }
+ virtual bool Remove(PkgIterator Pkg,bool) APT_OVERRIDE
+ {
+ //std::cerr << "REMOVE: " << APT::PrettyPkg(&Cache, Pkg) << " " << std::endl;
+ return EDSP::WriteSolutionStanza(output, "Remove", Pkg.CurrentVer());
+ }
+public:
+ PMOutput(pkgDepCache *Cache, FileFd &file) : pkgPackageManager(Cache), output(file),
+ Debug(_config->FindB("Debug::EDSP::WriteSolution", false))
+ {}
+
+ bool ApplyRequest(std::list<std::pair<std::string,EIPP::PKG_ACTION>> const &actions)
+ {
+ for (auto && a: actions)
+ {
+ auto const Pkg = Cache.FindPkg(a.first);
+ if (unlikely(Pkg.end() == true))
+ continue;
+ switch (a.second)
+ {
+ case EIPP::PKG_ACTION::NOOP:
+ break;
+ case EIPP::PKG_ACTION::INSTALL:
+ case EIPP::PKG_ACTION::REINSTALL:
+ FileNames[Pkg->ID] = "EIPP";
+ break;
+ case EIPP::PKG_ACTION::REMOVE:
+ break;
+ }
+ }
+ return true;
+ }
+};
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ // we really don't need anything
+ DropPrivileges();
+
+ CommandLine CmdL;
+ ParseCommandLine(CmdL, APT_CMD::APT_INTERNAL_PLANNER, &_config, NULL, argc, argv, &ShowHelp, &GetCommands);
+
+ // Deal with stdout not being a tty
+ if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
+ _config->Set("quiet","1");
+
+ if (_config->FindI("quiet", 0) < 1)
+ _config->Set("Debug::EIPP::WriteSolution", true);
+
+ _config->Set("APT::System", "Debian APT planner interface");
+ _config->Set("APT::Planner", "internal");
+ _config->Set("eipp::scenario", "/nonexistent/stdin");
+ FileFd output;
+ if (output.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
+ DIE("stdout couldn't be opened");
+ int const input = STDIN_FILENO;
+ SetNonBlock(input, false);
+
+ EDSP::WriteProgress(0, "Start up planner…", output);
+
+ if (pkgInitSystem(*_config,_system) == false)
+ DIE("System could not be initialized!");
+
+ EDSP::WriteProgress(1, "Read request…", output);
+
+ if (WaitFd(input, false, 5) == false)
+ DIE("WAIT timed out in the planner");
+
+ std::list<std::pair<std::string,EIPP::PKG_ACTION>> actions;
+ unsigned int flags;
+ if (EIPP::ReadRequest(input, actions, flags) == false)
+ DIE("Parsing the request failed!");
+ _config->Set("APT::Immediate-Configure", (flags & EIPP::Request::NO_IMMEDIATE_CONFIGURATION) == 0);
+ _config->Set("APT::Immediate-Configure-All", (flags & EIPP::Request::IMMEDIATE_CONFIGURATION_ALL) != 0);
+ _config->Set("APT::Force-LoopBreak", (flags & EIPP::Request::ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS) != 0);
+
+ EDSP::WriteProgress(5, "Read scenario…", output);
+
+ pkgCacheFile CacheFile;
+ if (CacheFile.Open(NULL, false) == false)
+ DIE("Failed to open CacheFile!");
+
+ EDSP::WriteProgress(50, "Apply request on scenario…", output);
+
+ if (EIPP::ApplyRequest(actions, CacheFile) == false)
+ DIE("Failed to apply request to depcache!");
+
+ EDSP::WriteProgress(60, "Call orderinstall on current scenario…", output);
+
+ //_config->Set("Debug::pkgOrderList", true);
+ //_config->Set("Debug::pkgPackageManager", true);
+ PMOutput PM(CacheFile, output);
+ if (PM.ApplyRequest(actions) == false)
+ DIE("Failed to apply request to packagemanager!");
+ pkgPackageManager::OrderResult const Res = PM.DoInstallPreFork();
+ std::ostringstream broken;
+ switch (Res)
+ {
+ case pkgPackageManager::Completed:
+ EDSP::WriteProgress(100, "Done", output);
+ break;
+ case pkgPackageManager::Incomplete:
+ broken << "Planner could only incompletely plan an installation order!" << std::endl;
+ _error->DumpErrors(broken, GlobalError::DEBUG);
+ EDSP::WriteError("pm-incomplete", broken.str(), output);
+ break;
+ case pkgPackageManager::Failed:
+ broken << "Planner failed to find an installation order!" << std::endl;
+ _error->DumpErrors(broken, GlobalError::DEBUG);
+ EDSP::WriteError("pm-failed", broken.str(), output);
+ break;
+ }
+
+ return DispatchCommandLine(CmdL, {});
+}
+ /*}}}*/
diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc
new file mode 100644
index 0000000..5c9ca5a
--- /dev/null
+++ b/cmdline/apt-internal-solver.cc
@@ -0,0 +1,213 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* #####################################################################
+
+ cover around the internal solver to be able to run it like an external
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/upgrade.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-output.h>
+
+#include <cstdio>
+#include <iostream>
+#include <list>
+#include <sstream>
+#include <string>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-internal-solver\n"
+ "\n"
+ "apt-internal-solver is an interface to use the current internal\n"
+ "resolver for the APT family like an external one, for debugging or\n"
+ "the like.\n");
+ return true;
+}
+ /*}}}*/
+APT_NORETURN static void DIE(std::string const &message) { /*{{{*/
+ std::cerr << "ERROR: " << message << std::endl;
+ _error->DumpErrors(std::cerr);
+ exit(EXIT_FAILURE);
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {};
+}
+ /*}}}*/
+static bool WriteSolution(pkgDepCache &Cache, FileFd &output) /*{{{*/
+{
+ bool Okay = output.Failed() == false;
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg)
+ {
+ std::string action;
+ if (Cache[Pkg].Delete() == true)
+ Okay &= EDSP::WriteSolutionStanza(output, "Remove", Pkg.CurrentVer());
+ else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true)
+ Okay &= EDSP::WriteSolutionStanza(output, "Install", Cache.GetCandidateVersion(Pkg));
+ else if (Cache[Pkg].Garbage == true)
+ Okay &= EDSP::WriteSolutionStanza(output, "Autoremove", Pkg.CurrentVer());
+ }
+ return Okay;
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ // we really don't need anything
+ DropPrivileges();
+
+ CommandLine CmdL;
+ ParseCommandLine(CmdL, APT_CMD::APT_INTERNAL_SOLVER, &_config, NULL, argc, argv, &ShowHelp, &GetCommands);
+
+ if (CmdL.FileList[0] != 0 && strcmp(CmdL.FileList[0], "scenario") == 0)
+ {
+ if (pkgInitSystem(*_config,_system) == false) {
+ std::cerr << "System could not be initialized!" << std::endl;
+ return 1;
+ }
+ pkgCacheFile CacheFile;
+ CacheFile.Open(NULL, false);
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+ FileFd output;
+ if (output.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
+ return 2;
+ if (pkgset.empty() == true)
+ EDSP::WriteScenario(CacheFile, output);
+ else
+ {
+ std::vector<bool> pkgvec(CacheFile->Head().PackageCount, false);
+ for (auto const &p: pkgset)
+ pkgvec[p->ID] = true;
+ EDSP::WriteLimitedScenario(CacheFile, output, pkgvec);
+ }
+ output.Close();
+ _error->DumpErrors(std::cerr);
+ return 0;
+ }
+
+ // Deal with stdout not being a tty
+ if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
+ _config->Set("quiet","1");
+
+ if (_config->FindI("quiet", 0) < 1)
+ _config->Set("Debug::EDSP::WriteSolution", true);
+
+ _config->Set("APT::System", "Debian APT solver interface");
+ _config->Set("APT::Solver", "internal");
+ _config->Set("edsp::scenario", "/nonexistent/stdin");
+ _config->Clear("Dir::Log");
+ FileFd output;
+ if (output.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
+ DIE("stdout couldn't be opened");
+ int const input = STDIN_FILENO;
+ SetNonBlock(input, false);
+
+ EDSP::WriteProgress(0, "Start up solver…", output);
+
+ if (pkgInitSystem(*_config,_system) == false)
+ DIE("System could not be initialized!");
+
+ EDSP::WriteProgress(1, "Read request…", output);
+
+ if (WaitFd(input, false, 5) == false)
+ DIE("WAIT timed out in the resolver");
+
+ std::list<std::string> install, remove;
+ unsigned int flags;
+ if (EDSP::ReadRequest(input, install, remove, flags) == false)
+ DIE("Parsing the request failed!");
+
+ EDSP::WriteProgress(5, "Read scenario…", output);
+
+ pkgCacheFile CacheFile;
+ if (CacheFile.Open(NULL, false) == false)
+ DIE("Failed to open CacheFile!");
+
+ EDSP::WriteProgress(50, "Apply request on scenario…", output);
+
+ if (EDSP::ApplyRequest(install, remove, CacheFile) == false)
+ DIE("Failed to apply request to depcache!");
+
+ pkgProblemResolver Fix(CacheFile);
+ for (std::list<std::string>::const_iterator i = remove.begin();
+ i != remove.end(); ++i) {
+ pkgCache::PkgIterator P = CacheFile->FindPkg(*i);
+ Fix.Clear(P);
+ Fix.Protect(P);
+ Fix.Remove(P);
+ }
+
+ for (std::list<std::string>::const_iterator i = install.begin();
+ i != install.end(); ++i) {
+ pkgCache::PkgIterator P = CacheFile->FindPkg(*i);
+ Fix.Clear(P);
+ Fix.Protect(P);
+ }
+
+ for (std::list<std::string>::const_iterator i = install.begin();
+ i != install.end(); ++i)
+ CacheFile->MarkInstall(CacheFile->FindPkg(*i), true);
+
+ EDSP::WriteProgress(60, "Call problemresolver on current scenario…", output);
+
+ std::string failure;
+ if (flags & EDSP::Request::UPGRADE_ALL) {
+ int upgrade_flags = APT::Upgrade::ALLOW_EVERYTHING;
+ if (flags & EDSP::Request::FORBID_NEW_INSTALL)
+ upgrade_flags |= APT::Upgrade::FORBID_INSTALL_NEW_PACKAGES;
+ if (flags & EDSP::Request::FORBID_REMOVE)
+ upgrade_flags |= APT::Upgrade::FORBID_REMOVE_PACKAGES;
+
+ if (APT::Upgrade::Upgrade(CacheFile, upgrade_flags))
+ ;
+ else if (upgrade_flags == APT::Upgrade::ALLOW_EVERYTHING)
+ failure = "ERR_UNSOLVABLE_FULL_UPGRADE";
+ else
+ failure = "ERR_UNSOLVABLE_UPGRADE";
+ } else if (Fix.Resolve() == false)
+ failure = "ERR_UNSOLVABLE";
+
+ if (failure.empty() == false) {
+ std::ostringstream broken;
+ ShowBroken(broken, CacheFile, false);
+ EDSP::WriteError(failure.c_str(), broken.str(), output);
+ return 0;
+ }
+
+ EDSP::WriteProgress(95, "Write solution…", output);
+
+ if (WriteSolution(CacheFile, output) == false)
+ DIE("Failed to output the solution!");
+
+ EDSP::WriteProgress(100, "Done", output);
+
+ return DispatchCommandLine(CmdL, {});
+}
+ /*}}}*/
diff --git a/cmdline/apt-key.in b/cmdline/apt-key.in
new file mode 100644
index 0000000..e9187b4
--- /dev/null
+++ b/cmdline/apt-key.in
@@ -0,0 +1,827 @@
+#!/bin/sh
+
+set -e
+unset GREP_OPTIONS GPGHOMEDIR CURRENTTRAP
+export IFS="$(printf "\n\b")"
+
+MASTER_KEYRING='&keyring-master-filename;'
+eval "$(apt-config shell MASTER_KEYRING APT::Key::MasterKeyring)"
+ARCHIVE_KEYRING='&keyring-filename;'
+eval "$(apt-config shell ARCHIVE_KEYRING APT::Key::ArchiveKeyring)"
+REMOVED_KEYS='&keyring-removed-filename;'
+eval "$(apt-config shell REMOVED_KEYS APT::Key::RemovedKeys)"
+ARCHIVE_KEYRING_URI='&keyring-uri;'
+eval "$(apt-config shell ARCHIVE_KEYRING_URI APT::Key::ArchiveKeyringURI)"
+
+aptkey_echo() { echo "$@"; }
+
+find_gpgv_status_fd() {
+ while [ -n "$1" ]; do
+ if [ "$1" = '--status-fd' ]; then
+ shift
+ echo "$1"
+ break
+ fi
+ shift
+ done
+}
+GPGSTATUSFD="$(find_gpgv_status_fd "$@")"
+
+apt_warn() {
+ if [ -z "$GPGHOMEDIR" ]; then
+ echo >&2 'W:' "$@"
+ else
+ echo 'W:' "$@" > "${GPGHOMEDIR}/aptwarnings.log"
+ fi
+ if [ -n "$GPGSTATUSFD" ]; then
+ echo >&${GPGSTATUSFD} '[APTKEY:] WARNING' "$@"
+ fi
+}
+apt_error() {
+ if [ -z "$GPGHOMEDIR" ]; then
+ echo >&2 'E:' "$@"
+ else
+ echo 'E:' "$@" > "${GPGHOMEDIR}/aptwarnings.log"
+ fi
+ if [ -n "$GPGSTATUSFD" ]; then
+ echo >&${GPGSTATUSFD} '[APTKEY:] ERROR' "$@"
+ fi
+}
+
+cleanup_gpg_home() {
+ if [ -z "$GPGHOMEDIR" ]; then return; fi
+ if [ -s "$GPGHOMEDIR/aptwarnings.log" ]; then
+ cat >&2 "$GPGHOMEDIR/aptwarnings.log"
+ fi
+ if command_available 'gpgconf'; then
+ GNUPGHOME="${GPGHOMEDIR}" gpgconf --kill all >/dev/null 2>&1 || true
+ fi
+ rm -rf "$GPGHOMEDIR"
+}
+
+# gpg needs (in different versions more or less) files to function correctly,
+# so we give it its own homedir and generate some valid content for it later on
+create_gpg_home() {
+ # for cases in which we want to cache a homedir due to expensive setup
+ if [ -n "$GPGHOMEDIR" ]; then
+ return
+ fi
+ if [ -n "$TMPDIR" ]; then
+ # tmpdir is a directory and current user has rwx access to it
+ # same tests as in apt-pkg/contrib/fileutl.cc GetTempDir()
+ if [ ! -d "$TMPDIR" ] || [ ! -r "$TMPDIR" ] || [ ! -w "$TMPDIR" ] || [ ! -x "$TMPDIR" ]; then
+ unset TMPDIR
+ fi
+ fi
+ GPGHOMEDIR="$(mktemp --directory --tmpdir 'apt-key-gpghome.XXXXXXXXXX')"
+ CURRENTTRAP="${CURRENTTRAP} cleanup_gpg_home;"
+ trap "${CURRENTTRAP}" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
+ if [ -z "$GPGHOMEDIR" ]; then
+ apt_error "Could not create temporary gpg home directory in $TMPDIR (wrong permissions?)"
+ exit 28
+ fi
+ chmod 700 "$GPGHOMEDIR"
+}
+
+requires_root() {
+ if [ "$(id -u)" -ne 0 ]; then
+ apt_error "This command can only be used by root."
+ exit 1
+ fi
+}
+
+command_available() {
+ if [ -x "$1" ]; then return 0; fi
+ # command -v "$1" >/dev/null 2>&1 # not required by policy, see #747320
+ # which "$1" >/dev/null 2>&1 # is in debianutils (essential) but not on non-debian systems
+ local OLDIFS="$IFS"
+ IFS=:
+ for p in $PATH; do
+ if [ -x "${p}/${1}" ]; then
+ IFS="$OLDIFS"
+ return 0
+ fi
+ done
+ IFS="$OLDIFS"
+ return 1
+}
+
+escape_shell() {
+ echo "$@" | sed -e "s#'#'\"'\"'#g"
+}
+
+get_fingerprints_of_keyring() {
+ aptkey_execute "$GPG_SH" --keyring "$1" --with-colons --fingerprint | while read publine; do
+ # search for a public key
+ if [ "${publine%%:*}" != 'pub' ]; then continue; fi
+ # search for the associated fingerprint (should be the very next line)
+ while read fprline; do
+ if [ "${fprline%%:*}" = 'sub' ]; then break; # should never happen
+ elif [ "${fprline%%:*}" != 'fpr' ]; then continue; fi
+ echo "$fprline" | cut -d':' -f 10
+ done
+ # order in the keyring shouldn't be important
+ done | sort
+}
+
+add_keys_with_verify_against_master_keyring() {
+ ADD_KEYRING="$1"
+ MASTER="$2"
+
+ if [ ! -f "$ADD_KEYRING" ]; then
+ apt_error "Keyring '$ADD_KEYRING' to be added not found"
+ return
+ fi
+ if [ ! -f "$MASTER" ]; then
+ apt_error "Master-Keyring '$MASTER' not found"
+ return
+ fi
+
+ # when adding new keys, make sure that the archive-master-keyring
+ # is honored. so:
+ # all keys that are exported must have a valid signature
+ # from a key in the $distro-master-keyring
+ add_keys="$(get_fingerprints_of_keyring "$ADD_KEYRING")"
+ all_add_keys="$(aptkey_execute "$GPG_SH" --keyring "$ADD_KEYRING" --with-colons --list-keys | grep ^[ps]ub | cut -d: -f5)"
+ master_keys="$(aptkey_execute "$GPG_SH" --keyring "$MASTER" --with-colons --list-keys | grep ^pub | cut -d: -f5)"
+
+ # ensure there are no colisions LP: #857472
+ for all_add_key in $all_add_keys; do
+ for master_key in $master_keys; do
+ if [ "$all_add_key" = "$master_key" ]; then
+ echo >&2 "Keyid collision for '$all_add_key' detected, operation aborted"
+ return 1
+ fi
+ done
+ done
+
+ for add_key in $add_keys; do
+ # export the add keyring one-by-one
+ local TMP_KEYRING="${GPGHOMEDIR}/tmp-keyring.gpg"
+ aptkey_execute "$GPG_SH" --batch --yes --keyring "$ADD_KEYRING" --output "$TMP_KEYRING" --export "$add_key"
+ if ! aptkey_execute "$GPG_SH" --batch --yes --keyring "$TMP_KEYRING" --import "$MASTER" > "${GPGHOMEDIR}/gpgoutput.log" 2>&1; then
+ cat >&2 "${GPGHOMEDIR}/gpgoutput.log"
+ false
+ fi
+ # check if signed with the master key and only add in this case
+ ADDED=0
+ for master_key in $master_keys; do
+ if aptkey_execute "$GPG_SH" --keyring "$TMP_KEYRING" --check-sigs --with-colons "$add_key" \
+ | grep '^sig:!:' | cut -d: -f5 | grep -q "$master_key"; then
+ aptkey_execute "$GPG_SH" --batch --yes --keyring "$ADD_KEYRING" --export "$add_key" \
+ | aptkey_execute "$GPG" --batch --yes --import
+ ADDED=1
+ fi
+ done
+ if [ $ADDED = 0 ]; then
+ echo >&2 "Key '$add_key' not added. It is not signed with a master key"
+ fi
+ rm -f "${TMP_KEYRING}"
+ done
+}
+
+# update the current archive signing keyring from a network URI
+# the archive-keyring keys needs to be signed with the master key
+# (otherwise it does not make sense from a security POV)
+net_update() {
+ local APT_DIR='/'
+ eval $(apt-config shell APT_DIR Dir)
+
+ # Disabled for now as code is insecure (LP: #1013639 (and 857472, 1013128))
+ APT_KEY_NET_UPDATE_ENABLED=""
+ eval $(apt-config shell APT_KEY_NET_UPDATE_ENABLED APT::Key::Net-Update-Enabled)
+ if [ -z "$APT_KEY_NET_UPDATE_ENABLED" ]; then
+ exit 1
+ fi
+
+ if [ -z "$ARCHIVE_KEYRING_URI" ]; then
+ apt_error 'Your distribution is not supported in net-update as no uri for the archive-keyring is set'
+ exit 1
+ fi
+ # in theory we would need to depend on wget for this, but this feature
+ # isn't usable in debian anyway as we have no keyring uri nor a master key
+ if ! command_available 'wget'; then
+ apt_error 'wget is required for a network-based update, but it is not installed'
+ exit 1
+ fi
+ if [ ! -d "${APT_DIR}/var/lib/apt/keyrings" ]; then
+ mkdir -p "${APT_DIR}/var/lib/apt/keyrings"
+ fi
+ keyring="${APT_DIR}/var/lib/apt/keyrings/$(basename "$ARCHIVE_KEYRING_URI")"
+ old_mtime=0
+ if [ -e $keyring ]; then
+ old_mtime=$(stat -c %Y "$keyring")
+ fi
+ (cd "${APT_DIR}/var/lib/apt/keyrings"; wget --timeout=90 -q -N "$ARCHIVE_KEYRING_URI")
+ if [ ! -e "$keyring" ]; then
+ return
+ fi
+ new_mtime=$(stat -c %Y "$keyring")
+ if [ $new_mtime -ne $old_mtime ]; then
+ aptkey_echo "Checking for new archive signing keys now"
+ add_keys_with_verify_against_master_keyring "$keyring" "$MASTER_KEYRING"
+ fi
+}
+
+update() {
+ if [ -z "$APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE" ]; then
+ echo >&2 "Warning: 'apt-key update' is deprecated and should not be used anymore!"
+ if [ -z "$ARCHIVE_KEYRING" ]; then
+ echo >&2 "Note: In your distribution this command is a no-op and can therefore be removed safely."
+ exit 0
+ fi
+ fi
+ if [ ! -f "$ARCHIVE_KEYRING" ]; then
+ apt_error "Can't find the archive-keyring (Is the &keyring-package; package installed?)"
+ exit 1
+ fi
+
+ # add new keys from the package;
+
+ # we do not use add_keys_with_verify_against_master_keyring here,
+ # because "update" is run on regular package updates. A
+ # attacker might as well replace the master-archive-keyring file
+ # in the package and add his own keys. so this check wouldn't
+ # add any security. we *need* this check on net-update though
+ import_keyring_into_keyring "$ARCHIVE_KEYRING" '' && cat "${GPGHOMEDIR}/gpgoutput.log"
+
+ if [ -r "$REMOVED_KEYS" ]; then
+ # remove no-longer supported/used keys
+ get_fingerprints_of_keyring "$(dearmor_filename "$REMOVED_KEYS")" | while read key; do
+ foreach_keyring_do 'remove_key_from_keyring' "$key"
+ done
+ else
+ apt_warn "Removed keys keyring '$REMOVED_KEYS' missing or not readable"
+ fi
+}
+
+remove_key_from_keyring() {
+ local KEYRINGFILE="$1"
+ shift
+ # non-existent keyrings have by definition no keys
+ if [ ! -e "$KEYRINGFILE" ]; then
+ return
+ fi
+
+ local FINGERPRINTS="${GPGHOMEDIR}/keyringfile.keylst"
+ local DEARMOR="$(dearmor_filename "$KEYRINGFILE")"
+ get_fingerprints_of_keyring "$DEARMOR" > "$FINGERPRINTS"
+
+ for KEY in "$@"; do
+ # strip leading 0x, if present:
+ KEY="$(echo "${KEY#0x}" | tr -d ' ')"
+
+ # check if the key is in this keyring
+ if ! grep -iq "^[0-9A-F]*${KEY}$" "$FINGERPRINTS"; then
+ continue
+ fi
+ if [ ! -w "$KEYRINGFILE" ]; then
+ apt_warn "Key ${KEY} is in keyring ${KEYRINGFILE}, but can't be removed as it is read only."
+ continue
+ fi
+ # check if it is the only key in the keyring and if so remove the keyring altogether
+ if [ '1' = "$(uniq "$FINGERPRINTS" | wc -l)" ]; then
+ mv -f "$KEYRINGFILE" "${KEYRINGFILE}~" # behave like gpg
+ return
+ fi
+ # we can't just modify pointed to files as these might be in /usr or something
+ local REALTARGET
+ if [ -L "$DEARMOR" ]; then
+ REALTARGET="$(readlink -f "$DEARMOR")"
+ mv -f "$DEARMOR" "${DEARMOR}.dpkg-tmp"
+ cp -a "$REALTARGET" "$DEARMOR"
+ fi
+ # delete the key from the keyring
+ aptkey_execute "$GPG_SH" --keyring "$DEARMOR" --batch --delete-keys --yes "$KEY"
+ if [ -n "$REALTARGET" ]; then
+ # the real backup is the old link, not the copy we made
+ mv -f "${DEARMOR}.dpkg-tmp" "${DEARMOR}~"
+ fi
+ if [ "$DEARMOR" != "$KEYRINGFILE" ]; then
+ mv -f "$KEYRINGFILE" "${KEYRINGFILE}~"
+ create_new_keyring "$KEYRINGFILE"
+ aptkey_execute "$GPG_SH" --keyring "$DEARMOR" --armor --export > "$KEYRINGFILE"
+ fi
+ get_fingerprints_of_keyring "$DEARMOR" > "$FINGERPRINTS"
+ done
+}
+
+accessible_file_exists() {
+ if ! test -s "$1"; then
+ return 1
+ fi
+ if test -r "$1"; then
+ return 0
+ fi
+ apt_warn "The key(s) in the keyring $1 are ignored as the file is not readable by user '$USER' executing apt-key."
+ return 1
+}
+
+is_supported_keyring() {
+ # empty files are always supported
+ if ! test -s "$1"; then
+ return 0
+ fi
+ local FILEEXT="${1##*.}"
+ if [ "$FILEEXT" = 'gpg' ]; then
+ # 0x98, 0x99 and 0xC6 via octal as hex isn't supported by dashs printf
+ if printf '\231' | cmp --silent --bytes=1 - "$1"; then
+ true
+ elif printf '\230' | cmp --silent --bytes=1 - "$1"; then
+ true
+ elif printf '\306' | cmp --silent --bytes=1 - "$1"; then
+ true
+ else
+ apt_warn "The key(s) in the keyring $1 are ignored as the file has an unsupported filetype."
+ return 1
+ fi
+ elif [ "$FILEEXT" = 'asc' ]; then
+ true #dearmor_filename will deal with them
+ else
+ # most callers ignore unsupported extensions silently
+ apt_warn "The key(s) in the keyring $1 are ignored as the file has an unsupported filename extension."
+ return 1
+ fi
+ return 0
+}
+
+foreach_keyring_do() {
+ local ACTION="$1"
+ shift
+ # if a --keyring was given, just work on this one
+ if [ -n "$FORCED_KEYRING" ]; then
+ $ACTION "$FORCED_KEYRING" "$@"
+ else
+ # otherwise all known keyrings are up for inspection
+ if accessible_file_exists "$TRUSTEDFILE" && is_supported_keyring "$TRUSTEDFILE"; then
+ $ACTION "$TRUSTEDFILE" "$@"
+ fi
+ local TRUSTEDPARTS="/etc/apt/trusted.gpg.d"
+ eval "$(apt-config shell TRUSTEDPARTS Dir::Etc::TrustedParts/d)"
+ if [ -d "$TRUSTEDPARTS" ]; then
+ TRUSTEDPARTS="$(readlink -f "$TRUSTEDPARTS")"
+ local TRUSTEDPARTSLIST="$(cd /; find "$TRUSTEDPARTS" -mindepth 1 -maxdepth 1 \( -name '*.gpg' -o -name '*.asc' \))"
+ for trusted in $(echo "$TRUSTEDPARTSLIST" | sort); do
+ if accessible_file_exists "$trusted" && is_supported_keyring "$trusted"; then
+ $ACTION "$trusted" "$@"
+ fi
+ done
+ fi
+ fi
+}
+
+list_keys_in_keyring() {
+ local KEYRINGFILE="$1"
+ shift
+ # fingerprint and co will fail if key isn't in this keyring
+ aptkey_execute "$GPG_SH" --keyring "$(dearmor_filename "$KEYRINGFILE")" "$@" > "${GPGHOMEDIR}/gpgoutput.log" 2> "${GPGHOMEDIR}/gpgoutput.err" || true
+ if [ ! -s "${GPGHOMEDIR}/gpgoutput.log" ]; then
+ return
+ fi
+ # we fake gpg header here to refer to the real asc file rather than a temp file
+ if [ "${KEYRINGFILE##*.}" = 'asc' ]; then
+ if expr match "$(sed -n '2p' "${GPGHOMEDIR}/gpgoutput.log")" '^-\+$' >/dev/null 2>&1; then
+ echo "$KEYRINGFILE"
+ echo "$KEYRINGFILE" | sed 's#[^-]#-#g'
+ sed '1,2d' "${GPGHOMEDIR}/gpgoutput.log" || true
+ else
+ cat "${GPGHOMEDIR}/gpgoutput.log"
+ fi
+ else
+ cat "${GPGHOMEDIR}/gpgoutput.log"
+ fi
+ if [ -s "${GPGHOMEDIR}/gpgoutput.err" ]; then
+ cat >&2 "${GPGHOMEDIR}/gpgoutput.err"
+ fi
+}
+
+export_key_from_to() {
+ local FROM="$1"
+ local TO="$2"
+ shift 2
+ if ! aptkey_execute "$GPG_SH" --keyring "$(dearmor_filename "$FROM")" --export "$@" > "$TO" 2> "${GPGHOMEDIR}/gpgoutput.log"; then
+ cat >&2 "${GPGHOMEDIR}/gpgoutput.log"
+ false
+ else
+ chmod 0644 -- "$TO"
+ fi
+}
+
+import_keyring_into_keyring() {
+ local FROM="${1:-${GPGHOMEDIR}/pubring.gpg}"
+ local TO="${2:-${GPGHOMEDIR}/pubring.gpg}"
+ shift 2
+ rm -f "${GPGHOMEDIR}/gpgoutput.log"
+ # the idea is simple: We take keys from one keyring and copy it to another
+ # we do this with so many checks in between to ensure that WE control the
+ # creation, so we know that the (potentially) created $TO keyring is a
+ # simple keyring rather than a keybox as gpg2 would create it which in turn
+ # can't be read by gpgv.
+ # BEWARE: This is designed more in the way to work with the current
+ # callers, than to have a well defined it would be easy to add new callers to.
+ if [ ! -s "$TO" ]; then
+ if [ -s "$FROM" ]; then
+ if [ -z "$2" ]; then
+ local OPTS
+ if [ "${TO##*.}" = 'asc' ]; then
+ OPTS='--armor'
+ fi
+ export_key_from_to "$(dearmor_filename "$FROM")" "$TO" $OPTS ${1:+"$1"}
+ else
+ create_new_keyring "$TO"
+ fi
+ else
+ create_new_keyring "$TO"
+ fi
+ elif [ -s "$FROM" ]; then
+ local EXPORTLIMIT="$1"
+ if [ -n "$1$2" ]; then shift; fi
+ local DEARMORTO="$(dearmor_filename "$TO")"
+ if ! aptkey_execute "$GPG_SH" --keyring "$(dearmor_filename "$FROM")" --export ${EXPORTLIMIT:+"$EXPORTLIMIT"} \
+ | aptkey_execute "$GPG_SH" --keyring "$DEARMORTO" --batch --import "$@" > "${GPGHOMEDIR}/gpgoutput.log" 2>&1; then
+ cat >&2 "${GPGHOMEDIR}/gpgoutput.log"
+ false
+ fi
+ if [ "$DEARMORTO" != "$TO" ]; then
+ export_key_from_to "$DEARMORTO" "${DEARMORTO}.asc" --armor
+ if ! cmp -s "$TO" "${DEARMORTO}.asc" 2>/dev/null; then
+ cp -a "$TO" "${TO}~"
+ mv -f "${DEARMORTO}.asc" "$TO"
+ fi
+ fi
+ fi
+}
+
+dearmor_keyring() {
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=831409#67
+ # The awk script is more complex through to skip surrounding garbage and
+ # to support multiple keys in one file (old gpgs generate version headers
+ # which get printed with the original and hence result in garbage input for base64
+ awk '/^-----BEGIN/{ x = 1; }
+/^$/{ if (x == 1) { x = 2; }; }
+/^[^=-]/{ if (x == 2) { print $0; }; }
+/^-----END/{ x = 0; }' | base64 -d
+}
+dearmor_filename() {
+ if [ "${1##*.}" = 'asc' ]; then
+ local trusted="${GPGHOMEDIR}/${1##*/}.gpg"
+ if [ -s "$1" ]; then
+ dearmor_keyring < "$1" > "$trusted"
+ fi
+ echo "$trusted"
+ elif [ "${1##*.}" = 'gpg' ]; then
+ echo "$1"
+ elif [ "$(head -n 1 "$1" 2>/dev/null)" = '-----BEGIN PGP PUBLIC KEY BLOCK-----' ]; then
+ local trusted="${GPGHOMEDIR}/${1##*/}.gpg"
+ dearmor_keyring < "$1" > "$trusted"
+ echo "$trusted"
+ else
+ echo "$1"
+ fi
+}
+catfile() {
+ cat "$(dearmor_filename "$1")" >> "$2"
+}
+
+merge_all_trusted_keyrings_into_pubring() {
+ # does the same as:
+ # foreach_keyring_do 'import_keys_from_keyring' "${GPGHOMEDIR}/pubring.gpg"
+ # but without using gpg, just cat and find
+ local PUBRING="$(readlink -f "${GPGHOMEDIR}")/pubring.gpg"
+ rm -f "$PUBRING"
+ touch "$PUBRING"
+ foreach_keyring_do 'catfile' "$PUBRING"
+}
+
+import_keys_from_keyring() {
+ import_keyring_into_keyring "$1" "$2"
+}
+
+merge_keys_into_keyrings() {
+ import_keyring_into_keyring "$2" "$1" '' --import-options 'merge-only'
+}
+
+merge_back_changes() {
+ if [ -n "$FORCED_KEYRING" ]; then
+ # if the keyring was forced merge is already done
+ if [ "$FORCED_KEYRING" != "$TRUSTEDFILE" ]; then
+ mv -f "$FORCED_KEYRING" "${FORCED_KEYRING}~"
+ export_key_from_to "$TRUSTEDFILE" "$FORCED_KEYRING" --armor
+ fi
+ return
+ fi
+ if [ -s "${GPGHOMEDIR}/pubring.gpg" ]; then
+ # merge all updated keys
+ foreach_keyring_do 'merge_keys_into_keyrings' "${GPGHOMEDIR}/pubring.gpg"
+ fi
+ # look for keys which were added or removed
+ get_fingerprints_of_keyring "${GPGHOMEDIR}/pubring.orig.gpg" > "${GPGHOMEDIR}/pubring.orig.keylst"
+ get_fingerprints_of_keyring "${GPGHOMEDIR}/pubring.gpg" > "${GPGHOMEDIR}/pubring.keylst"
+ comm -3 "${GPGHOMEDIR}/pubring.keylst" "${GPGHOMEDIR}/pubring.orig.keylst" > "${GPGHOMEDIR}/pubring.diff"
+ # key isn't part of new keyring, so remove
+ cut -f 2 "${GPGHOMEDIR}/pubring.diff" | while read key; do
+ if [ -z "$key" ]; then continue; fi
+ foreach_keyring_do 'remove_key_from_keyring' "$key"
+ done
+ # key is only part of new keyring, so we need to import it
+ cut -f 1 "${GPGHOMEDIR}/pubring.diff" | while read key; do
+ if [ -z "$key" ]; then continue; fi
+ import_keyring_into_keyring '' "$TRUSTEDFILE" "$key"
+ done
+}
+
+setup_merged_keyring() {
+ if [ -n "$FORCED_KEYID" ]; then
+ merge_all_trusted_keyrings_into_pubring
+ FORCED_KEYRING="${GPGHOMEDIR}/forcedkeyid.gpg"
+ TRUSTEDFILE="${FORCED_KEYRING}"
+ echo "#!/bin/sh
+exec sh '($(escape_shell "${GPG}")' --keyring '$(escape_shell "${TRUSTEDFILE}")' \"\$@\"" > "${GPGHOMEDIR}/gpg.1.sh"
+ GPG="${GPGHOMEDIR}/gpg.1.sh"
+ # ignore error as this "just" means we haven't found the forced keyid and the keyring will be empty
+ import_keyring_into_keyring '' "$TRUSTEDFILE" "$FORCED_KEYID" || true
+ elif [ -z "$FORCED_KEYRING" ]; then
+ merge_all_trusted_keyrings_into_pubring
+ if [ -r "${GPGHOMEDIR}/pubring.gpg" ]; then
+ cp -a "${GPGHOMEDIR}/pubring.gpg" "${GPGHOMEDIR}/pubring.orig.gpg"
+ else
+ touch "${GPGHOMEDIR}/pubring.gpg" "${GPGHOMEDIR}/pubring.orig.gpg"
+ fi
+ echo "#!/bin/sh
+exec sh '$(escape_shell "${GPG}")' --keyring '$(escape_shell "${GPGHOMEDIR}/pubring.gpg")' \"\$@\"" > "${GPGHOMEDIR}/gpg.1.sh"
+ GPG="${GPGHOMEDIR}/gpg.1.sh"
+ else
+ TRUSTEDFILE="$(dearmor_filename "$FORCED_KEYRING")"
+ create_new_keyring "$TRUSTEDFILE"
+ echo "#!/bin/sh
+exec sh '$(escape_shell "${GPG}")' --keyring '$(escape_shell "${TRUSTEDFILE}")' \"\$@\"" > "${GPGHOMEDIR}/gpg.1.sh"
+ GPG="${GPGHOMEDIR}/gpg.1.sh"
+ fi
+}
+
+create_new_keyring() {
+ # gpg defaults to mode 0600 for new keyrings. Create one with 0644 instead.
+ if ! [ -e "$1" ]; then
+ if [ -w "$(dirname "$1")" ]; then
+ touch -- "$1"
+ chmod 0644 -- "$1"
+ fi
+ fi
+}
+
+aptkey_execute() { sh "$@"; }
+
+usage() {
+ echo "Usage: apt-key [--keyring file] [command] [arguments]"
+ echo
+ echo "Manage apt's list of trusted keys"
+ echo
+ echo " apt-key add <file> - add the key contained in <file> ('-' for stdin)"
+ echo " apt-key del <keyid> - remove the key <keyid>"
+ echo " apt-key export <keyid> - output the key <keyid>"
+ echo " apt-key exportall - output all trusted keys"
+ echo " apt-key update - update keys using the keyring package"
+ echo " apt-key net-update - update keys using the network"
+ echo " apt-key list - list keys"
+ echo " apt-key finger - list fingerprints"
+ echo " apt-key adv - pass advanced options to gpg (download key)"
+ echo
+ echo "If no specific keyring file is given the command applies to all keyring files."
+}
+
+while [ -n "$1" ]; do
+ case "$1" in
+ --keyring)
+ shift
+ if [ -z "$FORCED_KEYRING" -o "$FORCED_KEYRING" = '/dev/null' ]; then
+ TRUSTEDFILE="$1"
+ FORCED_KEYRING="$1"
+ elif [ "$TRUSTEDFILE" = "$FORCED_KEYRING" ]; then
+ create_gpg_home
+ FORCED_KEYRING="${GPGHOMEDIR}/mergedkeyrings.gpg"
+ echo -n '' > "$FORCED_KEYRING"
+ chmod 0644 -- "$FORCED_KEYRING"
+ catfile "$TRUSTEDFILE" "$FORCED_KEYRING"
+ catfile "$1" "$FORCED_KEYRING"
+ else
+ catfile "$1" "$FORCED_KEYRING"
+ fi
+ ;;
+ --keyid)
+ shift
+ if [ -n "$FORCED_KEYID" ]; then
+ apt_error 'Specifying --keyid multiple times is not supported'
+ exit 1
+ fi
+ FORCED_KEYID="$1"
+ ;;
+ --secret-keyring)
+ shift
+ FORCED_SECRET_KEYRING="$1"
+ ;;
+ --readonly)
+ merge_back_changes() { true; }
+ create_new_keyring() { if [ ! -r "$FORCED_KEYRING" ]; then TRUSTEDFILE='/dev/null'; FORCED_KEYRING="$TRUSTEDFILE"; fi; }
+ ;;
+ --fakeroot)
+ requires_root() { true; }
+ ;;
+ --quiet)
+ aptkey_echo() { true; }
+ ;;
+ --debug1)
+ # some cmds like finger redirect stderr to /dev/null …
+ aptkey_execute() { echo 'EXEC:' "$@"; sh "$@"; }
+ ;;
+ --debug2)
+ # … other more complicated ones pipe gpg into gpg.
+ aptkey_execute() { echo >&2 'EXEC:' "$@"; sh "$@"; }
+ ;;
+ --homedir)
+ # force usage of a specific homedir instead of creating a temporary
+ shift
+ GPGHOMEDIR="$1"
+ ;;
+ --*)
+ echo >&2 "Unknown option: $1"
+ usage
+ exit 1;;
+ *)
+ break;;
+ esac
+ shift
+done
+
+if [ -z "$TRUSTEDFILE" ]; then
+ TRUSTEDFILE="/etc/apt/trusted.gpg"
+ eval $(apt-config shell TRUSTEDFILE Apt::GPGV::TrustedKeyring)
+ eval $(apt-config shell TRUSTEDFILE Dir::Etc::Trusted/f)
+fi
+
+command="$1"
+if [ -z "$command" ]; then
+ usage
+ exit 1
+fi
+shift
+
+prepare_gpg_home() {
+ # crude detection if we are called from a maintainerscript where the
+ # package depends on gnupg or not. We accept recommends here as
+ # well as the script hopefully uses apt-key optionally then like e.g.
+ # debian-archive-keyring for (upgrade) cleanup did
+ if [ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] && [ -z "$APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE" ]; then
+ if ! dpkg-query --show --showformat '${Pre-Depends}${Depends}${Recommends}\n' "$DPKG_MAINTSCRIPT_PACKAGE" 2>/dev/null | grep -q gnupg; then
+ cat >&2 <<EOF
+Warning: The $DPKG_MAINTSCRIPT_NAME maintainerscript of the package $DPKG_MAINTSCRIPT_PACKAGE
+Warning: seems to use apt-key (provided by apt) without depending on gnupg or gnupg2.
+Warning: This will BREAK in the future and should be fixed by the package maintainer(s).
+Note: Check first if apt-key functionality is needed at all - it probably isn't!
+EOF
+ fi
+ fi
+ eval "$(apt-config shell GPG_EXE Apt::Key::gpgcommand)"
+ if [ -n "$GPG_EXE" ] && command_available "$GPG_EXE"; then
+ true
+ elif command_available 'gpg'; then
+ GPG_EXE="gpg"
+ elif command_available 'gpg2'; then
+ GPG_EXE="gpg2"
+ elif command_available 'gpg1'; then
+ GPG_EXE="gpg1"
+ else
+ apt_error 'gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation'
+ exit 255
+ fi
+
+ create_gpg_home
+
+ # now tell gpg that it shouldn't try to maintain this trustdb file
+ echo "#!/bin/sh
+exec '$(escape_shell "${GPG_EXE}")' --ignore-time-conflict --no-options --no-default-keyring \\
+--homedir '$(escape_shell "${GPGHOMEDIR}")' --no-auto-check-trustdb --trust-model always \"\$@\"" > "${GPGHOMEDIR}/gpg.0.sh"
+ GPG_SH="${GPGHOMEDIR}/gpg.0.sh"
+ GPG="$GPG_SH"
+
+ # create the trustdb with an (empty) dummy keyring
+ # older gpgs required it, newer gpgs even warn that it isn't needed,
+ # but require it nonetheless for some commands, so we just play safe
+ # here for the foreseeable future and create a dummy one
+ touch "${GPGHOMEDIR}/empty.gpg"
+ if ! "$GPG_EXE" --ignore-time-conflict --no-options --no-default-keyring \
+ --homedir "$GPGHOMEDIR" --quiet --check-trustdb --keyring "${GPGHOMEDIR}/empty.gpg" >"${GPGHOMEDIR}/gpgoutput.log" 2>&1; then
+ cat >&2 "${GPGHOMEDIR}/gpgoutput.log"
+ false
+ fi
+
+ # We don't usually need a secret keyring, of course, but
+ # for advanced operations, we might really need a secret keyring after all
+ if [ -n "$FORCED_SECRET_KEYRING" ] && [ -r "$FORCED_SECRET_KEYRING" ]; then
+ if ! aptkey_execute "$GPG" -v --batch --import "$FORCED_SECRET_KEYRING" >"${GPGHOMEDIR}/gpgoutput.log" 2>&1; then
+ # already imported keys cause gpg1 to fail for some reason… ignore this error
+ if ! grep -q 'already in secret keyring' "${GPGHOMEDIR}/gpgoutput.log"; then
+ cat >&2 "${GPGHOMEDIR}/gpgoutput.log"
+ false
+ fi
+ fi
+ else
+ # and then, there are older versions of gpg which panic and implode
+ # if there isn't one available - and writeable for imports
+ # and even if not output is littered with the creation of a secring,
+ # so lets call import once to have it create what it wants in silence
+ echo -n | aptkey_execute "$GPG" --batch --import >/dev/null 2>&1 || true
+ fi
+}
+
+warn_on_script_usage() {
+ if [ -n "$APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE" ]; then
+ return
+ fi
+ # (Maintainer) scripts should not be using apt-key
+ if [ -n "$DPKG_MAINTSCRIPT_PACKAGE" ]; then
+ echo >&2 "Warning: apt-key should not be used in scripts (called from $DPKG_MAINTSCRIPT_NAME maintainerscript of the package ${DPKG_MAINTSCRIPT_PACKAGE})"
+ elif [ ! -t 1 ]; then
+ echo >&2 "Warning: apt-key output should not be parsed (stdout is not a terminal)"
+ fi
+}
+
+if [ "$command" != 'help' ] && [ "$command" != 'verify' ]; then
+ prepare_gpg_home
+fi
+
+case "$command" in
+ add)
+ warn_on_script_usage
+ requires_root
+ setup_merged_keyring
+ aptkey_execute "$GPG" --quiet --batch --import "$@"
+ merge_back_changes
+ aptkey_echo "OK"
+ ;;
+ del|rm|remove)
+ # no script warning here as removing 'add' usage needs 'del' for cleanup
+ requires_root
+ foreach_keyring_do 'remove_key_from_keyring' "$@"
+ aptkey_echo "OK"
+ ;;
+ update)
+ warn_on_script_usage
+ requires_root
+ setup_merged_keyring
+ update
+ merge_back_changes
+ ;;
+ net-update)
+ requires_root
+ setup_merged_keyring
+ net_update
+ merge_back_changes
+ ;;
+ list|finger*)
+ warn_on_script_usage
+ foreach_keyring_do 'list_keys_in_keyring' --fingerprint "$@"
+ ;;
+ export|exportall)
+ warn_on_script_usage
+ merge_all_trusted_keyrings_into_pubring
+ aptkey_execute "$GPG_SH" --keyring "${GPGHOMEDIR}/pubring.gpg" --armor --export "$@"
+ ;;
+ adv*)
+ warn_on_script_usage
+ setup_merged_keyring
+ aptkey_echo "Executing: $GPG" "$@"
+ aptkey_execute "$GPG" "$@"
+ merge_back_changes
+ ;;
+ verify)
+ GPGV=''
+ eval $(apt-config shell GPGV Apt::Key::gpgvcommand)
+ if [ -n "$GPGV" ] && command_available "$GPGV"; then true;
+ elif command_available 'gpgv'; then GPGV='gpgv';
+ elif command_available 'gpgv2'; then GPGV='gpgv2';
+ elif command_available 'gpgv1'; then GPGV='gpgv1';
+ else
+ apt_error 'gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed'
+ exit 29
+ fi
+ # for a forced keyid we need gpg --export, so full wrapping required
+ if [ -n "$FORCED_KEYID" ]; then
+ prepare_gpg_home
+ else
+ create_gpg_home
+ fi
+ setup_merged_keyring
+ if [ -n "$FORCED_KEYRING" ]; then
+ "$GPGV" --homedir "${GPGHOMEDIR}" --keyring "$(dearmor_filename "${FORCED_KEYRING}")" --ignore-time-conflict "$@"
+ else
+ "$GPGV" --homedir "${GPGHOMEDIR}" --keyring "${GPGHOMEDIR}/pubring.gpg" --ignore-time-conflict "$@"
+ fi
+ ;;
+ help)
+ usage
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+esac
diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc
new file mode 100644
index 0000000..161845b
--- /dev/null
+++ b/cmdline/apt-mark.cc
@@ -0,0 +1,447 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* #####################################################################
+ apt-mark - show and change auto-installed bit information
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/statechanges.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-output.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+/* DoAuto - mark packages as automatically/manually installed {{{*/
+static bool DoAuto(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
+ if (unlikely(DepCache == nullptr))
+ return false;
+
+ APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1);
+ if (pkgset.empty() == true)
+ return _error->Error(_("No packages found"));
+
+ bool MarkAuto = strcasecmp(CmdL.FileList[0],"auto") == 0;
+ int AutoMarkChanged = 0;
+
+ for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+ {
+ if (Pkg->CurrentVer == 0)
+ {
+ ioprintf(c1out,_("%s can not be marked as it is not installed.\n"), Pkg.FullName(true).c_str());
+ continue;
+ }
+ else if ((((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto)
+ {
+ if (MarkAuto == false)
+ ioprintf(c1out,_("%s was already set to manually installed.\n"), Pkg.FullName(true).c_str());
+ else
+ ioprintf(c1out,_("%s was already set to automatically installed.\n"), Pkg.FullName(true).c_str());
+ continue;
+ }
+
+ if (MarkAuto == false)
+ ioprintf(c1out,_("%s set to manually installed.\n"), Pkg.FullName(true).c_str());
+ else
+ ioprintf(c1out,_("%s set to automatically installed.\n"), Pkg.FullName(true).c_str());
+
+ DepCache->MarkAuto(Pkg, MarkAuto);
+ ++AutoMarkChanged;
+ }
+ if (AutoMarkChanged > 0 && _config->FindB("APT::Mark::Simulate", false) == false)
+ return DepCache->writeStateFile(NULL);
+ return true;
+}
+ /*}}}*/
+/* DoMarkAuto - mark packages as automatically/manually installed {{{*/
+/* Does the same as DoAuto but tries to do it exactly the same why as
+ the python implementation did it so it can be a drop-in replacement */
+static bool DoMarkAuto(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
+ if (unlikely(DepCache == nullptr))
+ return false;
+
+ APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1);
+ if (pkgset.empty() == true)
+ return _error->Error(_("No packages found"));
+
+ bool const MarkAuto = strcasecmp(CmdL.FileList[0],"markauto") == 0;
+ bool const Verbose = _config->FindB("APT::MarkAuto::Verbose", false);
+ int AutoMarkChanged = 0;
+
+ for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+ {
+ if (Pkg->CurrentVer == 0 ||
+ (((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto)
+ continue;
+
+ if (Verbose == true)
+ ioprintf(c1out, "changing %s to %d\n", Pkg.Name(), (MarkAuto == false) ? 0 : 1);
+
+ DepCache->MarkAuto(Pkg, MarkAuto);
+ ++AutoMarkChanged;
+ }
+ if (AutoMarkChanged > 0 && _config->FindB("APT::Mark::Simulate", false) == false)
+ return DepCache->writeStateFile(NULL);
+
+ _error->Notice(_("This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' instead."));
+
+ return true;
+}
+ /*}}}*/
+// helper for Install-Recommends-Sections and Never-MarkAuto-Sections /*{{{*/
+static bool
+ConfigValueInSubTree(const char *SubTree, const char *needle)
+{
+ // copied from depcache.cc
+ Configuration::Item const *Opts;
+ Opts = _config->Tree(SubTree);
+ if (Opts != 0 && Opts->Child != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ if (strcmp(needle, Opts->Value.c_str()) == 0)
+ return true;
+ }
+ }
+ return false;
+}
+ /*}}}*/
+/* DoMinimize - minimize manually installed {{{*/
+/* Traverses dependencies of meta packages and marks them as manually
+ * installed. */
+static bool DoMinimize(CommandLine &CmdL)
+{
+
+ pkgCacheFile CacheFile;
+ pkgDepCache *const DepCache = CacheFile.GetDepCache();
+ if (unlikely(DepCache == nullptr))
+ return false;
+
+ if (CmdL.FileList[1] != nullptr)
+ return _error->Error(_("%s does not take any arguments"), "apt-mark minimize-manual");
+
+ auto Debug = _config->FindB("Debug::AptMark::Minimize", false);
+ auto is_root = [&DepCache](pkgCache::PkgIterator const &pkg) {
+ auto ver = pkg.CurrentVer();
+ return ver.end() == false && ((*DepCache)[pkg].Flags & pkgCache::Flag::Auto) == 0 &&
+ ver->Section != 0 &&
+ ConfigValueInSubTree("APT::Never-MarkAuto-Sections", ver.Section());
+ };
+
+ APT::PackageSet roots;
+ for (auto Pkg = DepCache->PkgBegin(); Pkg.end() == false; ++Pkg)
+ {
+ if (is_root(Pkg))
+ {
+ if (Debug)
+ std::clog << "Found root " << Pkg.Name() << std::endl;
+ roots.insert(Pkg);
+ }
+ }
+
+ APT::PackageSet workset(roots);
+ APT::PackageSet seen;
+ APT::PackageSet changed;
+
+ pkgDepCache::ActionGroup group(*DepCache);
+
+ while (workset.empty() == false)
+ {
+ if (Debug)
+ std::clog << "Iteration\n";
+
+ APT::PackageSet workset2;
+ for (auto &Pkg : workset)
+ {
+ if (seen.find(Pkg) != seen.end())
+ continue;
+
+ seen.insert(Pkg);
+
+ if (Debug)
+ std::cerr << " Visiting " << Pkg.FullName(true) << "\n";
+ if (roots.find(Pkg) == roots.end() && ((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == 0)
+ {
+ DepCache->MarkAuto(Pkg, true);
+ changed.insert(Pkg);
+ }
+
+ // Visit dependencies, add them to next working set
+ for (auto Dep = Pkg.CurrentVer().DependsList(); !Dep.end(); ++Dep)
+ {
+ if (DepCache->IsImportantDep(Dep) == false)
+ continue;
+ std::unique_ptr<pkgCache::Version *[]> targets(Dep.AllTargets());
+ for (int i = 0; targets[i] != nullptr; i++)
+ {
+ pkgCache::VerIterator Tgt(*DepCache, targets[i]);
+ if (Tgt.ParentPkg()->CurrentVer != 0 && Tgt.ParentPkg().CurrentVer()->ID == Tgt->ID)
+ workset2.insert(Tgt.ParentPkg());
+ }
+ }
+ }
+
+ workset = std::move(workset2);
+ }
+
+ if (changed.empty()) {
+ cout << _("No changes necessary") << endl;
+ return true;
+ }
+
+ ShowList(c1out, _("The following packages will be marked as automatically installed:"), changed,
+ [](const pkgCache::PkgIterator &) { return true; },
+ &PrettyFullName,
+ &PrettyFullName);
+
+ if (_config->FindB("APT::Mark::Simulate", false) == false)
+ {
+ if (YnPrompt(_("Do you want to continue?"), false) == false)
+ return true;
+
+ return DepCache->writeStateFile(NULL);
+ }
+
+ return true;
+}
+ /*}}}*/
+
+/* ShowAuto - show automatically installed packages (sorted) {{{*/
+static bool ShowAuto(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
+ if (unlikely(DepCache == nullptr))
+ return false;
+
+ std::vector<string> packages;
+
+ bool const ShowAuto = strcasecmp(CmdL.FileList[0],"showauto") == 0;
+
+ if (CmdL.FileList[1] == 0)
+ {
+ packages.reserve(DepCache->Head().PackageCount / 3);
+ for (pkgCache::PkgIterator P = DepCache->PkgBegin(); P.end() == false; ++P)
+ if (P->CurrentVer != 0 &&
+ (((*DepCache)[P].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == ShowAuto)
+ packages.push_back(P.FullName(true));
+ }
+ else
+ {
+ APT::CacheSetHelper helper(false); // do not show errors
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+ packages.reserve(pkgset.size());
+ for (APT::PackageSet::const_iterator P = pkgset.begin(); P != pkgset.end(); ++P)
+ if (P->CurrentVer != 0 &&
+ (((*DepCache)[P].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == ShowAuto)
+ packages.push_back(P.FullName(true));
+ }
+
+ std::sort(packages.begin(), packages.end());
+
+ for (vector<string>::const_iterator I = packages.begin(); I != packages.end(); ++I)
+ std::cout << *I << std::endl;
+
+ return true;
+}
+ /*}}}*/
+// DoSelection - wrapping around dpkg selections /*{{{*/
+static bool DoSelection(CommandLine &CmdL)
+{
+ pkgCacheFile CacheFile;
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr))
+ return false;
+
+ APT::VersionVector pkgset = APT::VersionVector::FromCommandLine(CacheFile, CmdL.FileList + 1, APT::CacheSetHelper::INSTCAND);
+ if (pkgset.empty() == true)
+ return _error->Error(_("No packages found"));
+
+ APT::StateChanges marks;
+ if (strcasecmp(CmdL.FileList[0], "hold") == 0 || strcasecmp(CmdL.FileList[0], "unhold") == 0)
+ {
+ auto const part = std::stable_partition(pkgset.begin(), pkgset.end(),
+ [](pkgCache::VerIterator const &V) { return V.ParentPkg()->SelectedState == pkgCache::State::Hold; });
+
+ bool const MarkHold = strcasecmp(CmdL.FileList[0],"hold") == 0;
+ auto const doneBegin = MarkHold ? pkgset.begin() : part;
+ auto const doneEnd = MarkHold ? part : pkgset.end();
+ std::for_each(doneBegin, doneEnd, [&MarkHold](pkgCache::VerIterator const &V) {
+ if (MarkHold == true)
+ ioprintf(c1out, _("%s was already set on hold.\n"), V.ParentPkg().FullName(true).c_str());
+ else
+ ioprintf(c1out, _("%s was already not hold.\n"), V.ParentPkg().FullName(true).c_str());
+ });
+
+ if (doneBegin == pkgset.begin() && doneEnd == pkgset.end())
+ return true;
+
+ auto const changeBegin = MarkHold ? part : pkgset.begin();
+ auto const changeEnd = MarkHold ? pkgset.end() : part;
+ std::move(changeBegin, changeEnd, std::back_inserter(MarkHold ? marks.Hold() : marks.Unhold()));
+ }
+ else
+ {
+ // FIXME: Maybe show a message for unchanged states here as well?
+ if (strcasecmp(CmdL.FileList[0], "purge") == 0)
+ std::swap(marks.Purge(), pkgset);
+ else if (strcasecmp(CmdL.FileList[0], "deinstall") == 0 || strcasecmp(CmdL.FileList[0], "remove") == 0)
+ std::swap(marks.Remove(), pkgset);
+ else //if (strcasecmp(CmdL.FileList[0], "install") == 0)
+ std::swap(marks.Install(), pkgset);
+ }
+ pkgset.clear();
+
+ bool success = true;
+ if (_config->FindB("APT::Mark::Simulate", false) == false)
+ {
+ success = marks.Save();
+ if (success == false)
+ _error->Error(_("Executing dpkg failed. Are you root?"));
+ }
+ for (auto Ver : marks.Hold())
+ ioprintf(c1out,_("%s set on hold.\n"), Ver.ParentPkg().FullName(true).c_str());
+ for (auto Ver : marks.Unhold())
+ ioprintf(c1out,_("Canceled hold on %s.\n"), Ver.ParentPkg().FullName(true).c_str());
+ for (auto Ver : marks.Purge())
+ ioprintf(c1out,_("Selected %s for purge.\n"), Ver.ParentPkg().FullName(true).c_str());
+ for (auto Ver : marks.Remove())
+ ioprintf(c1out,_("Selected %s for removal.\n"), Ver.ParentPkg().FullName(true).c_str());
+ for (auto Ver : marks.Install())
+ ioprintf(c1out,_("Selected %s for installation.\n"), Ver.ParentPkg().FullName(true).c_str());
+ return success;
+}
+ /*}}}*/
+static bool ShowSelection(CommandLine &CmdL) /*{{{*/
+{
+ pkgCacheFile CacheFile;
+ pkgCache * const Cache = CacheFile.GetPkgCache();
+ if (unlikely(Cache == nullptr))
+ return false;
+
+ pkgCache::State::PkgSelectedState selector;
+ if (strncasecmp(CmdL.FileList[0], "showpurge", strlen("showpurge")) == 0)
+ selector = pkgCache::State::Purge;
+ else if (strncasecmp(CmdL.FileList[0], "showdeinstall", strlen("showdeinstall")) == 0 ||
+ strncasecmp(CmdL.FileList[0], "showremove", strlen("showremove")) == 0)
+ selector = pkgCache::State::DeInstall;
+ else if (strncasecmp(CmdL.FileList[0], "showhold", strlen("showhold")) == 0)
+ selector = pkgCache::State::Hold;
+ else //if (strcasecmp(CmdL.FileList[0], "showinstall", strlen("showinstall")) == 0)
+ selector = pkgCache::State::Install;
+
+ std::vector<string> packages;
+
+ if (CmdL.FileList[1] == 0)
+ {
+ packages.reserve(50); // how many holds are realistic? I hope just a few…
+ for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+ if (P->SelectedState == selector)
+ packages.push_back(P.FullName(true));
+ }
+ else
+ {
+ APT::CacheSetHelper helper(false); // do not show errors
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+ packages.reserve(pkgset.size());
+ for (APT::PackageSet::const_iterator P = pkgset.begin(); P != pkgset.end(); ++P)
+ if (P->SelectedState == selector)
+ packages.push_back(P.FullName(true));
+ }
+
+ std::sort(packages.begin(), packages.end());
+
+ for (vector<string>::const_iterator I = packages.begin(); I != packages.end(); ++I)
+ std::cout << *I << std::endl;
+
+ return true;
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+ "\n"
+ "apt-mark is a simple command line interface for marking packages\n"
+ "as manually or automatically installed. It can also be used to\n"
+ "manipulate the dpkg(1) selection states of packages, and to list\n"
+ "all packages with or without a certain marking.\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {"auto",&DoAuto, _("Mark the given packages as automatically installed")},
+ {"manual",&DoAuto, _("Mark the given packages as manually installed")},
+ {"minimize-manual", &DoMinimize, _("Mark all dependencies of meta packages as automatically installed.")},
+ {"hold",&DoSelection, _("Mark a package as held back")},
+ {"unhold",&DoSelection, _("Unset a package set as held back")},
+ {"install",&DoSelection, nullptr},
+ {"remove",&DoSelection, nullptr}, // dpkg uses deinstall, but we use remove everywhere else
+ {"deinstall",&DoSelection, nullptr},
+ {"purge",&DoSelection, nullptr},
+ {"showauto",&ShowAuto, _("Print the list of automatically installed packages")},
+ {"showmanual",&ShowAuto, _("Print the list of manually installed packages")},
+ {"showhold",&ShowSelection, _("Print the list of packages on hold")}, {"showholds",&ShowSelection, nullptr},
+ {"showinstall",&ShowSelection, nullptr}, {"showinstalls",&ShowSelection, nullptr},
+ {"showdeinstall",&ShowSelection, nullptr}, {"showdeinstalls",&ShowSelection, nullptr},
+ {"showremove",&ShowSelection, nullptr}, {"showremoves",&ShowSelection, nullptr},
+ {"showpurge",&ShowSelection, nullptr}, {"showpurges",&ShowSelection, nullptr},
+ // obsolete commands for compatibility
+ {"markauto", &DoMarkAuto, nullptr},
+ {"unmarkauto", &DoMarkAuto, nullptr},
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_MARK, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ InitOutput();
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/cmdline/apt-report-mirror-failure b/cmdline/apt-report-mirror-failure
new file mode 100755
index 0000000..7c39064
--- /dev/null
+++ b/cmdline/apt-report-mirror-failure
@@ -0,0 +1,29 @@
+#!/usr/bin/python
+#
+# This is a stub that is meant to support failure reporting of
+# mirrors to a central database
+#
+# its currently not used
+
+import sys
+import urllib
+import apt_pkg
+
+apt_pkg.init()
+url = apt_pkg.Config.find("Acquire::Mirror::ReportFailures", "")
+ #"http://people.ubuntu.com:9000/mirror-failure")
+ #"http://localhost:9000/mirror-failure")
+if not url:
+ sys.exit(0)
+
+print "Reporting mirror failure to '%s'" % url
+
+data = {}
+data['mirror'] = sys.argv[1]
+data['failurl'] = sys.argv[2]
+data['error'] = sys.argv[3]
+f = urllib.urlopen(url, urllib.urlencode(data))
+f.read()
+f.close()
+
+
diff --git a/cmdline/apt-sortpkgs.cc b/cmdline/apt-sortpkgs.cc
new file mode 100644
index 0000000..da45170
--- /dev/null
+++ b/cmdline/apt-sortpkgs.cc
@@ -0,0 +1,165 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ APT Sort Packages - Program to sort Package and Source files
+
+ This program is quite simple, it just sorts the package files by
+ package and sorts the fields inside by the internal APT sort order.
+ Input is taken from a named file and sent to stdout.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+
+#include <algorithm>
+#include <iostream>
+#include <memory>
+#include <string>
+#include <vector>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+struct PkgName /*{{{*/
+{
+ string Name;
+ string Ver;
+ string Arch;
+ unsigned long Offset;
+ unsigned long Length;
+
+ inline int Compare3(const PkgName &x) const
+ {
+ int A = stringcasecmp(Name,x.Name);
+ if (A == 0)
+ {
+ A = stringcasecmp(Ver,x.Ver);
+ if (A == 0)
+ A = stringcasecmp(Arch,x.Arch);
+ }
+ return A;
+ }
+
+ bool operator <(const PkgName &x) const {return Compare3(x) < 0;};
+ bool operator >(const PkgName &x) const {return Compare3(x) > 0;};
+ bool operator ==(const PkgName &x) const {return Compare3(x) == 0;};
+};
+ /*}}}*/
+// DoIt - Sort a single file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool DoIt(string InFile)
+{
+ FileFd Fd(InFile,FileFd::ReadOnly);
+ pkgTagFile Tags(&Fd);
+ if (_error->PendingError() == true)
+ return false;
+
+ // Parse.
+ vector<PkgName> List;
+ pkgTagSection Section;
+ unsigned long Largest = 0;
+ unsigned long Offset = Tags.Offset();
+ bool Source = _config->FindB("APT::SortPkgs::Source",false);
+ while (Tags.Step(Section) == true)
+ {
+ PkgName Tmp;
+
+ /* Fetch the name, auto-detecting if this is a source file or a
+ package file */
+ Tmp.Name = Section.FindS("Package");
+ Tmp.Ver = Section.FindS("Version");
+ Tmp.Arch = Section.FindS("Architecture");
+
+ if (Tmp.Name.empty() == true)
+ return _error->Error(_("Unknown package record!"));
+
+ Tmp.Offset = Offset;
+ Tmp.Length = Section.size();
+ if (Largest < Tmp.Length)
+ Largest = Tmp.Length;
+
+ List.push_back(Tmp);
+
+ Offset = Tags.Offset();
+ }
+ if (_error->PendingError() == true)
+ return false;
+
+ // Sort it
+ sort(List.begin(),List.end());
+
+ const char **Order = TFRewritePackageOrder;
+ if (Source == true)
+ Order = TFRewriteSourceOrder;
+
+ // Emit
+ FileFd stdoutfd;
+ stdoutfd.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly, false);
+ auto const Buffer = std::unique_ptr<unsigned char[]>(new unsigned char[Largest+1]);
+ for (vector<PkgName>::iterator I = List.begin(); I != List.end(); ++I)
+ {
+ // Read in the Record.
+ if (Fd.Seek(I->Offset) == false || Fd.Read(Buffer.get(),I->Length) == false)
+ return false;
+
+ Buffer[I->Length] = '\n';
+ if (Section.Scan((char *)Buffer.get(),I->Length+1) == false)
+ return _error->Error("Internal error, failed to scan buffer");
+
+ // Sort the section
+ if (Section.Write(stdoutfd, Order) == false || stdoutfd.Write("\n", 1) == false)
+ return _error->Error("Internal error, failed to sort fields");
+ }
+ return true;
+}
+ /*}}}*/
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+ "\n"
+ "apt-sortpkgs is a simple tool to sort package information files.\n"
+ "By default it sorts by binary package information, but the -s option\n"
+ "can be used to switch to source package ordering instead.\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ CommandLine CmdL;
+ ParseCommandLine(CmdL, APT_CMD::APT_SORTPKG, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ // Match the operation
+ for (unsigned int I = 0; I != CmdL.FileSize(); I++)
+ if (DoIt(CmdL.FileList[I]) == false)
+ break;
+
+ return DispatchCommandLine(CmdL, {});
+}
+ /*}}}*/
diff --git a/cmdline/apt.cc b/cmdline/apt.cc
new file mode 100644
index 0000000..d388e4a
--- /dev/null
+++ b/cmdline/apt.cc
@@ -0,0 +1,121 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ apt - CLI UI for apt
+
+ Returns 100 on failure, 0 on success.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgsystem.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-depends.h>
+#include <apt-private/private-download.h>
+#include <apt-private/private-install.h>
+#include <apt-private/private-list.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-moo.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-search.h>
+#include <apt-private/private-show.h>
+#include <apt-private/private-source.h>
+#include <apt-private/private-sources.h>
+#include <apt-private/private-update.h>
+#include <apt-private/private-upgrade.h>
+
+#include <iostream>
+#include <vector>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt [options] command\n"
+ "\n"
+ "apt is a commandline package manager and provides commands for\n"
+ "searching and managing as well as querying information about packages.\n"
+ "It provides the same functionality as the specialized APT tools,\n"
+ "like apt-get and apt-cache, but enables options more suitable for\n"
+ "interactive use by default.\n");
+ return true;
+}
+ /*}}}*/
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ // query
+ {"list", &DoList, _("list packages based on package names")},
+ {"search", &DoSearch, _("search in package descriptions")},
+ {"show", &ShowPackage, _("show package details")},
+
+ // package stuff
+ {"install", &DoInstall, _("install packages")},
+ {"reinstall", &DoInstall, _("reinstall packages")},
+ {"remove", &DoInstall, _("remove packages")},
+ {"autoremove", &DoInstall, _("Remove automatically all unused packages")},
+ {"auto-remove", &DoInstall, nullptr},
+ {"autopurge",&DoInstall, nullptr},
+ {"purge", &DoInstall, nullptr},
+
+ // system wide stuff
+ {"update", &DoUpdate, _("update list of available packages")},
+ {"upgrade", &DoUpgrade, _("upgrade the system by installing/upgrading packages")},
+ {"full-upgrade", &DoDistUpgrade, _("upgrade the system by removing/installing/upgrading packages")},
+
+ // misc
+ {"edit-sources", &EditSources, _("edit the source information file")},
+ {"moo", &DoMoo, nullptr},
+
+ // for compat with muscle memory
+ {"dist-upgrade", &DoDistUpgrade, nullptr},
+ {"showsrc",&ShowSrcPackage, nullptr},
+ {"depends",&Depends, nullptr},
+ {"rdepends",&RDepends, nullptr},
+ {"policy",&Policy, nullptr},
+ {"build-dep", &DoBuildDep,nullptr},
+ {"clean", &DoClean, nullptr},
+ {"autoclean", &DoAutoClean, nullptr},
+ {"auto-clean", &DoAutoClean, nullptr},
+ {"source", &DoSource, nullptr},
+ {"download", &DoDownload, nullptr},
+ {"changelog", &DoChangelog, nullptr},
+ {"info", &ShowPackage, nullptr},
+
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc, const char *argv[]) /*{{{*/
+{
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
+
+ int const quiet = _config->FindI("quiet", 0);
+ if (quiet == 2)
+ {
+ _config->CndSet("quiet::NoProgress", true);
+ _config->Set("quiet", 1);
+ }
+
+ InitSignals();
+ InitOutput();
+
+ CheckIfCalledByScript(argc, argv);
+ CheckIfSimulateMode(CmdL);
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/completions/CMakeLists.txt b/completions/CMakeLists.txt
new file mode 100644
index 0000000..4ef62a8
--- /dev/null
+++ b/completions/CMakeLists.txt
@@ -0,0 +1,4 @@
+set(BASH_COMPLETION_DIR "${CMAKE_INSTALL_DATAROOTDIR}/bash-completion/completions"
+ CACHE PATH "Path to the bash-completion completions directory")
+
+install(FILES bash/apt DESTINATION ${BASH_COMPLETION_DIR})
diff --git a/completions/bash/apt b/completions/bash/apt
new file mode 100644
index 0000000..e185392
--- /dev/null
+++ b/completions/bash/apt
@@ -0,0 +1,227 @@
+# Debian apt(8) completion -*- shell-script -*-
+
+_apt()
+{
+ local sourcesdir="/etc/apt/sources.list.d"
+ local cur prev words cword
+ _init_completion || return
+
+ local GENERIC_APT_GET_OPTIONS='
+ -d --download-only
+ -y --assume-yes
+ --assume-no
+ -u --show-upgraded
+ -m --ignore-missing
+ -t --target-release
+ --download
+ --fix-missing
+ --ignore-hold
+ --upgrade
+ --only-upgrade
+ --allow-change-held-packages
+ --allow-remove-essential
+ --allow-downgrades
+ --print-uris
+ --trivial-only
+ --remove
+ --arch-only
+ --allow-unauthenticated
+ --allow-insecure-repositories
+ --install-recommends
+ --install-suggests
+ --no-install-recommends
+ --no-install-suggests
+ --fix-policy
+ '
+
+ # see if the user selected a command already
+ local COMMANDS=(
+ "list"
+ "search"
+ "show" "showsrc"
+ "install" "remove" "purge" "autoremove"
+ "update"
+ "upgrade" "full-upgrade" "dist-upgrade"
+ "edit-sources"
+ "help"
+ "source" "build-dep"
+ "clean" "autoclean"
+ "download" "changelog"
+ "moo"
+ "depends" "rdepends"
+ "policy")
+
+ local command i
+ for (( i=0; i < ${#words[@]}-1; i++ )); do
+ if [[ ${COMMANDS[@]} =~ ${words[i]} ]]; then
+ command=${words[i]}
+ break
+ fi
+ done
+
+ # Complete a -t<SPACE><TAB>
+ case $prev in
+ -t|--target-release)
+ COMPREPLY=( $( compgen -W "$(apt-cache policy | egrep -o 'a=[^,]*|n=[^,]*' | cut -f2- -d= | sort -u)" -- "$cur" ) )
+ return 0
+ ;;
+ esac
+
+ # supported options per command
+ if [[ "$cur" == -* ]]; then
+ case $command in
+ install|remove|purge|upgrade|dist-upgrade|full-upgrade|autoremove)
+ COMPREPLY=( $( compgen -W '--show-progress
+ --fix-broken --purge --verbose-versions --auto-remove
+ -s --simulate --dry-run
+ --download
+ --fix-missing
+ --fix-policy
+ --ignore-hold
+ --force-yes
+ --trivial-only
+ --reinstall --solver
+ -t --target-release'"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
+ return 0
+ ;;
+ update)
+ COMPREPLY=( $( compgen -W '--list-cleanup
+ --print-uris
+ --allow-insecure-repositories
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ list)
+ COMPREPLY=( $( compgen -W '--installed --upgradable
+ --manual-installed
+ -v --verbose
+ -a --all-versions
+ -t --target-release
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ show)
+ COMPREPLY=( $( compgen -W '-a --all-versions
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ depends|rdepends)
+ COMPREPLY=( $( compgen -W '-i
+ --important
+ --installed
+ --pre-depends
+ --depends
+ --recommends
+ --suggests
+ --replaces
+ --breaks
+ --conflicts
+ --enhances
+ --recurse
+ --implicit' -- "$cur" ) )
+ return 0
+ ;;
+ search)
+ COMPREPLY=( $( compgen -W '
+ -n --names-only
+ -f --full' -- "$cur" ) )
+ return 0
+ ;;
+ showsrc)
+ COMPREPLY=( $( compgen -W '
+ --only-source' -- "$cur" ) )
+ return 0
+ ;;
+ source)
+ COMPREPLY=( $( compgen -W '
+ -s --simulate --dry-run
+ -b --compile --build
+ -P --build-profiles
+ --diff-only --debian-only
+ --tar-only
+ --dsc-only
+ -t --target-release
+ '"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
+ return 0
+ ;;
+ build-dep)
+ COMPREPLY=( $( compgen -W '
+ -a --host-architecture
+ -s --simulate --dry-run
+ -P --build-profiles
+ -t --target-release
+ --purge --solver
+ '"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
+ return 0
+ ;;
+ moo)
+ COMPREPLY=( $( compgen -W '
+ --color
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ clean|autoclean)
+ COMPREPLY=( $( compgen -W '
+ -s --simulate --dry-run
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ esac
+ fi
+
+ # specific command arguments
+ if [[ -n $command ]]; then
+ case $command in
+ remove|purge|autoremove)
+ if [[ -f /etc/debian_version ]]; then
+ # Debian system
+ COMPREPLY=( $( \
+ _xfunc dpkg _comp_dpkg_installed_packages $cur ) )
+ else
+ # assume RPM based
+ _xfunc rpm _rpm_installed_packages
+ fi
+ return 0
+ ;;
+ show|list|download|changelog|depends|rdepends)
+ COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
+ 2> /dev/null ) )
+ return 0
+ ;;
+ install)
+ COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
+ 2> /dev/null ) )
+ if [[ "$cur" == ./* || "$cur" == /* ]]; then
+ _filedir "deb"
+ fi
+ return 0
+ ;;
+ source|build-dep|showsrc|policy)
+ COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
+ 2> /dev/null ) $( apt-cache dumpavail | \
+ command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) )
+ return 0
+ ;;
+ edit-sources)
+ COMPREPLY=( $( compgen -W '$( command ls $sourcesdir )' \
+ -- "$cur" ) )
+ return 0
+ ;;
+ moo)
+ COMPREPLY=( $( compgen -W 'moo' \
+ -- "$cur" ) )
+ return 0
+ ;;
+ esac
+ fi
+
+ # no command yet, show what commands we have
+ if [ "$command" = "" ]; then
+ COMPREPLY=( $( compgen -W '${COMMANDS[@]}' -- "$cur" ) )
+ fi
+
+ return 0
+} &&
+complete -F _apt apt
+
+# ex: ts=4 sw=4 et filetype=sh
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
new file mode 100644
index 0000000..7cca4cf
--- /dev/null
+++ b/doc/CMakeLists.txt
@@ -0,0 +1,98 @@
+include(Documentation)
+
+set(LINGUAS
+ de
+ es
+ fr
+ it
+ ja
+ nl
+ pl
+ pt_BR
+ pt
+)
+
+set(TRANSLATED_ENTITIES
+ apt.ent
+)
+
+set(ENTITIES
+ apt-verbatim.ent
+ ../vendor/${CURRENT_VENDOR}/apt-vendor.ent
+)
+
+if(WITH_DOC)
+add_docbook(apt-doc HTML TEXT ALL
+ DOCUMENTS
+ guide.dbk
+ offline.dbk
+ INSTALL ${CMAKE_INSTALL_DOCDIR}/../apt-doc
+ LINGUAS ${LINGUAS}
+ TRANSLATED_ENTITIES ${TRANSLATED_ENTITIES}
+ DEPENDS ${ENTITIES}
+)
+
+add_docbook(libapt-pkg-doc HTML TEXT ALL
+ DOCUMENTS
+ design.dbk
+ dpkg-tech.dbk
+ files.dbk
+ method.dbk
+ INSTALL ${CMAKE_INSTALL_DOCDIR}/../libapt-pkg-doc
+ LINGUAS ${LINGUAS}
+ TRANSLATED_ENTITIES ${TRANSLATED_ENTITIES}
+ DEPENDS ${ENTITIES}
+)
+
+find_package(Doxygen REQUIRED)
+
+file(GLOB_RECURSE apt_pkg "../apt-pkg/*.h" "../apt-pkg/*.cc")
+configure_file(Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
+
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen.stamp
+ COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/doxygen.stamp
+ DEPENDS ${apt_pkg} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+)
+
+add_custom_target(apt-doxygen ALL
+ DEPENDS ${PROJECT_BINARY_DIR}/doc/doxygen.stamp
+)
+
+install(DIRECTORY ${PROJECT_BINARY_DIR}/doc/doxygen/html
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}/../libapt-pkg-doc
+ PATTERN "*.map" EXCLUDE
+ PATTERN "*.md5" EXCLUDE
+)
+
+endif()
+
+add_docbook(apt-man MANPAGE ALL
+ DOCUMENTS
+ apt.8.xml
+ apt_auth.conf.5.xml
+ apt-cache.8.xml
+ apt-cdrom.8.xml
+ apt.conf.5.xml
+ apt-config.8.xml
+ apt-extracttemplates.1.xml
+ apt-ftparchive.1.xml
+ apt-get.8.xml
+ apt-key.8.xml
+ apt-mark.8.xml
+ apt_preferences.5.xml
+ apt-secure.8.xml
+ apt-sortpkgs.1.xml
+ apt-transport-http.1.xml
+ apt-transport-https.1.xml
+ apt-transport-mirror.1.xml
+ sources.list.5.xml
+ DEPENDS ${ENTITIES}
+ TRANSLATED_ENTITIES ${TRANSLATED_ENTITIES}
+ LINGUAS ${LINGUAS}
+)
+
+add_update_po4a(update-po4a po/${PROJECT_NAME}-doc.pot "po/header.pot.txt")
+
+add_subdirectory(examples)
diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
new file mode 100644
index 0000000..b6521fe
--- /dev/null
+++ b/doc/Doxyfile.in
@@ -0,0 +1,2313 @@
+# Doxyfile 1.8.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = @PACKAGE@
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER = @PACKAGE_VERSION@
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = "commandline package manager"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = @PROJECT_BINARY_DIR@/doc/doxygen
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH = @PROJECT_SOURCE_DIR@
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES = "TODO=\todo"
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. Do not use file names with spaces, bibtex cannot handle them. See
+# also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = NO
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = ${PROJECT_SOURCE_DIR}/apt-pkg
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
+
+FILE_PATTERNS = *.cc \
+ *.h
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER = "sed -e 's#//[ ]*FIXME:\?#/// \\todo#'"
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = NO
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .xhtml
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
+# defined cascading style sheet that is included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet file to the output directory. For an example
+# see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE =
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
+# replace them by respectively the title of the page, the current date and time,
+# only the current date, the version number of doxygen, the project name (see
+# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS = NO
+
+# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://autogen.sf.net) file that captures the structure of
+# the code including all documentation. Note that this feature is still
+# experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+# the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: YES.
+
+HAVE_DOT = @DOXYGEN_DOT_FOUND@
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font n the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME =
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT = svg
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = YES
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH = @DOXYGEN_DOT_PATH@
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP = YES
diff --git a/doc/acquire-additional-files.md b/doc/acquire-additional-files.md
new file mode 100644
index 0000000..30c83ef
--- /dev/null
+++ b/doc/acquire-additional-files.md
@@ -0,0 +1,325 @@
+# Acquire additional files in 'update' operations
+
+The download and verification of data from multiple sources in different
+compression formats, with partial downloads and patches is an involved
+process which is hard to implement correctly and securely.
+
+APT front-ends share the code and binaries to make this happen in libapt
+with the Acquire system, supported by helpers shipped in the apt package
+itself and additional transports in individual packages like
+`apt-transport-https`.
+
+For its own operation libapt needs or can make use of *Packages*, *Sources*
+and *Translation-* files, which it will acquire by default, but
+a repository might contain more data files (e.g. `Contents`) a front-end
+(e.g. `apt-file`) might want to use and would therefore need to be
+downloaded as well.
+
+This file describes the configuration scheme such a front-end can use to
+instruct the Acquire system to download those additional files.
+
+# The Configuration Stanza
+
+The Acquire system uses the same configuration settings to implement the
+files it downloads by default. These settings are the default, but if
+they would be written in a configuration file the configuration
+instructing the Acquire system to download the *Packages* files would look
+like this (see also `apt.conf(5)` manpage for configuration file syntax):
+
+ Acquire::IndexTargets::deb::Packages {
+ MetaKey "$(COMPONENT)/binary-$(ARCHITECTURE)/Packages";
+ ShortDescription "Packages";
+ Description "$(RELEASE)/$(COMPONENT) $(ARCHITECTURE) Packages";
+
+ flatMetaKey "Packages";
+ flatDescription "$(RELEASE) Packages";
+
+ Optional "no";
+ };
+
+All files which should be downloaded (nicknamed *Targets*) are mentioned
+below the `Acquire::IndexTargets` scope. `deb` is here the type of the
+`sources.list` entry the file should be acquired for. The only other
+supported value is hence `deb-src`. Beware: You can't specify multiple
+types here and you can't download the same (evaluated) `MetaKey` from
+multiple types!
+
+After the type you can pick any valid and unique string which preferable
+refers to the file it downloads (In the example we picked *Packages*).
+This string is used as identifier (if not explicitly set otherwise) for
+the target class and accessible as `Identifier` and `Created-By` e.g.
+in the `apt-get indextargets` output as detailed below. The identifier
+is also used to allow user to enable/disable targets per sources.list
+entry.
+
+All targets have three main properties you can define:
+
+* `MetaKey`: The identifier of the file to be downloaded as used in the
+ Release file. It is also the relative location of the file from the
+ Release file. You can neither download from a different server
+ entirely (absolute URI) nor access directories above the Release file
+ (e.g. "../../").
+* `ShortDescription`: Very short string intended to be displayed to the
+ user e.g. while reporting progress. apt will e.g. use this string in
+ the last line to indicate progress of e.g. the download of a specific
+ item.
+* `Description`: A preferable human understandable and readable identifier
+ of which file is acquired exactly. Mainly used for progress reporting
+ and error messages. apt will e.g. use this string in the Get/Hit/Err
+ progress lines.
+ An identifier of the site accessed as seen in the sources.list (e.g.
+ `http://example.org/debian` or `file:/path/to/a/repository`) is
+ automatically prefixed for this property.
+
+
+Additional optional properties:
+
+* `Identifier`: The default value is the unique string identifying this
+ file (in the example above it was *Packages*) also accessible as
+ `Created-By`. The difference is that using this property multiple files
+ can be subsumed under one identifier e.g. if you configure multiple
+ possible locations for the files (with `Fallback-Of`), but the front-end
+ doesn't need to handle files from the different locations differently.
+* `DefaultEnabled`: The default value is `yes` which means that apt will
+ try to acquire this target from all sources. If set to `no` the user
+ has to explicitly enable this target in the sources.list file with the
+ `Targets` option(s) – or override this value in a config file.
+* `Optional`: The default value is `yes` and should be kept at this value.
+ If enabled the acquire system will skip the download if the file isn't
+ mentioned in the `Release` file. Otherwise this is treated as a hard
+ error and the update process fails. Note that failures while
+ downloading (e.g. 404 or hash verification errors) are failures,
+ regardless of this setting.
+* `KeepCompressed`: The default is the value of `Acquire::GzipIndexes`,
+ which defaults to `false`. If `true`, the acquire system will keep the
+ file compressed on disk rather than extract it. If your front-end can't
+ deal with compressed files transparently you have to explicitly set
+ this option to `false` to avoid problems with users setting the option
+ globally. On the other hand, if you set it to `true` or don't set it you
+ have to ensure your front-end can deal with all compressed fileformats
+ supported by apt (libapt users can e.g. use `FileFd`, others can use
+ the `cat-file` command of `/usr/lib/apt/apt-helper`).
+* `Fallback-Of`: Is by default not set. If it is set and specifies another
+ target name (see `Created-By`) which was found in the *Release* file the
+ download of this target will be skipped. This can be used to implement
+ fallback(chain)s to allow transitions like the rename of target files.
+ The behavior if cycles are formed with Fallback-Of is undefined!
+* `flatMetaKey`, `flatDescription`: APT supports two types of repositories:
+ dists-style repositories which are the default and by far the most
+ common which are named after the fact that the files are in an
+ elaborated directory structure. In contrast a flat-style repository
+ lumps all files together in one directory. Support for these flat
+ repositories exists mainly for legacy purposes only. It is therefore
+ recommend to not set these values.
+
+
+The acquire system will automatically choose to download a compressed
+file if it is available and uncompress it for you, just as it will also
+use PDiff patching if provided by the repository and enabled by the
+user. You only have to ensure that the Release file contains the
+information about the compressed files/PDiffs to make this happen.
+**NO** properties have to be set to enable this!
+
+
+More properties exist, but these should **NOT** be set by front-ends
+requesting files. They exist for internal and end-user usage only.
+Some of these are – which are documented here only to ensure that they
+aren't accidentally used by front-ends:
+
+* `PDiffs`: controls if apt will try to use PDiffs for this target.
+ Defaults to the value of `Acquire::PDiffs` which is *true* by default.
+ Can be overridden per-source by the sources.list option of the same
+ name. See the documentation for both of these for details.
+* `By-Hash`: controls if apt will try to use an URI constructed from
+ a hashsum of the file to download. See the documentation for config
+ option `Acquire::By-Hash` and sources.list option `By-Hash` for details.
+* `CompressionTypes`: The default value is a space separated list of
+ compression types supported by apt (see `Acquire::CompressionTypes`).
+ You can set this option to prevent apt from downloading a compression
+ type a front-end can't open transparently. This should always be
+ a temporary workaround through and a bug should be reported against
+ the front-end in question.
+* `KeepCompressedAs`: The default value is a space separated list of
+ compression types supported by apt (see previous option) which is
+ sorted by the cost-value of the compression in ascending order,
+ except that cost=0 "compressions" (like uncompressed) are listed last.
+
+
+# More examples
+
+The stanzas for `Translation-*` files as well as for `Sources` files would
+look like this:
+
+Acquire::IndexTargets {
+ deb::Translations {
+ MetaKey "$(COMPONENT)/i18n/Translation-$(LANGUAGE)";
+ ShortDescription "Translation-$(LANGUAGE)";
+ Description "$(RELEASE)/$(COMPONENT) Translation-$(LANGUAGE)";
+
+ flatMetaKey "$(LANGUAGE)";
+ flatDescription "$(RELEASE) Translation-$(LANGUAGE)";
+ };
+
+ deb-src::Sources {
+ MetaKey "$(COMPONENT)/source/Sources";
+ ShortDescription "Sources";
+ Description "$(RELEASE)/$(COMPONENT) Sources";
+
+ flatMetaKey "Sources";
+ flatDescription "$(RELEASE) Sources";
+
+ Optional "no";
+ };
+};
+
+# Substitution variables
+
+As seen in the examples, properties can contain placeholders filled in
+by the acquire system. The following variables are known; note that
+unknown variables have no default value nor are they touched: They are
+printed as-is.
+
+* `$(RELEASE)`: This is usually an archive- or codename, e.g. *stable* or
+ *stretch*. Note that flat-style repositories do not have an archive-
+ or codename per-se, so the value might very well be just "/" or so.
+* `$(COMPONENT)`: as given in the sources.list, e.g. *main*, *non-free* or
+ *universe*. Note that flat-style repositories again do not really
+ have a meaningful value here.
+* `$(LANGUAGE)`: Values are all entries (expect *none*) of configuration
+ option `Acquire::Languages`, e.g. *en*, *de* or *de_AT*.
+* `$(ARCHITECTURE)`: Values are all entries of configuration option
+ `APT::Architectures` (potentially modified by sources.list options),
+ e.g. *amd64*, *i386* or *armel* for the *deb* type. In type *deb-src*
+ this variable has the value *source*.
+* `$(NATIVE_ARCHITECTURE)`: The architecture apt treats as the native
+ architecture for this system configured as `APT::Architecture`
+ defaulting to the architecture apt itself was built for.
+
+Note that while more variables might exist in the implementation, these
+are to be considered undefined and their usage strongly discouraged. If
+you have a need for other variables contact us.
+
+# Accessing files
+
+Do **NOT** hardcode specific file locations, names or compression types in
+your application! You will notice that the configuration options give
+you no choice over where the downloaded files will be stored. This is by
+design so multiple applications can download and use the same file
+rather than each and every one of them potentially downloads and uses
+its own copy somewhere on disk.
+
+`apt-get indextargets` can be used to get the location as well as other
+information about all files downloaded (aka: you will see *Packages*,
+*Sources* and *Translation-* files here as well). Provide a line of the
+default output format as parameter to filter out all entries which do
+not have such a line. With `--format`, you can further more define your
+own output style. The variables are what you see in the output, just all
+uppercase and wrapped in `$()`, as in the configuration file.
+
+To get all the filenames of all *Translation-en* files you can e.g. call:
+
+ apt-get indextargets --format '$(FILENAME)' "Identifier: Translations" "Language: en"
+
+The line-based filtering and the formatting is rather crude and feature-
+less by design: The default format is Debian's standard format `deb822`
+(in particular: Field names are case-insensitive and the order of fields
+in the stanza is undefined), so instead of apt reimplementing powerful
+filters and formatting for this command, it is recommend to use piping
+and dedicated tools like `grep-dctrl` if you need more than the basics
+provided.
+
+Accessing this information via libapt is done by reading the
+sources.lists (`pkgSourceList`), iterating over the metaIndex objects this
+creates and calling `GetIndexTargets()` on them. See the source code of
+`apt-get indextargets` for a complete example.
+
+Note that by default targets are not listed if they weren't downloaded.
+If you want to see all targets, you can use the `--no-release-info`, which
+also removes the *Codename*, *Suite*, *Version*, *Origin*, *Label* and *Trusted*
+fields from the output as these also display data which needs to be
+downloaded first and could hence be inaccurate [on the pro-side: This
+mode is faster as it doesn't require a valid binary cache to operate].
+The most notable difference perhaps is in the *Filename* field through: By
+default it indicates an existing file, potentially compressed (Hint:
+libapt users can use `FileFd` to open compressed files transparently). In
+the `--no-release-info` mode the indicated file doesn't need to exist and
+it will always refer to an uncompressed file, even if the index would be
+(or is) stored compressed.
+
+Remarks on fields only available in (default) `--release-info mode`:
+
+* `Trusted`: Denotes with a *yes* or *no* if the data in this file is
+ authenticated by a trust chain rooted in a trusted gpg key. You should
+ be careful with untrusted data and warn the user if you use it.
+* `Codename`, `Suite`, `Version`, `Origin` and `Label` are fields from the
+ *Release* file, are only present if they are present in the *Release* file
+ and contain the same data.
+
+Remarks on other available fields:
+
+* `MetaKey`, `ShortDesc`, `Description`, `Site`, `Release`: as defined
+ by the configuration and described further above.
+* `Identifier`: Defaults to the value of `Created-By`, but can be set
+ explicitly in the configuration (see above). Prefer this field over
+ `Created-By` to subsume multiple file(location)s (see `Fallback-Of`).
+* `Created-By`: configuration entity responsible for this target
+* `Target-Of`: type of the sources.list entry
+* `URI`, `Repo-URI`: avoid using. Contains potentially username/password.
+ Prefer `Site`, especially for display.
+* `Optional`, `DefaultEnabled`, `KeepCompressed`: Decode the options of the
+ same name from the configuration.
+* `Language`, `Architecture`, `Component`: as defined further above, but with
+ the catch that they might be missing if they don't effect the target
+ (aka: They weren't used while evaluating the `MetaKey` template).
+
+Again, additional fields might be visible in certain implementations,
+but you should avoid using them and instead talk to us about a portable
+implementation.
+
+# Multiple applications requiring the same files
+
+It is highly encouraged that applications talk to each other and to us
+about which files they require. It is usually best to have a common
+package ship the configuration needed to get the files, but specific
+needs might require specific solutions. Again: **talk to us**.
+
+Bad things will happen if multiple front-ends request the same file(s)
+via different targets, which is another reason why coordination is very
+important!
+
+# Acquiring files not mentioned in the Release file
+
+You can't. This is by design as these files couldn't be verified to not
+be modified in transit, corrupted by the download process or simple if
+they are present at all on the server, which would require apt to probe
+for them. APT did this in the past for legacy reasons, we do not intend
+to go back to these dark times.
+
+This is also why you can't request files from a different server. It
+would have the additional problem that this server might not even be
+accessible (e.g. proxy settings) or that local sources (file:/, cdrom:/)
+start requesting online files…
+
+In other words: We would be opening Pandora's box.
+
+# Acquiring files to a specific location on disk
+
+You can't by design to avoid multiple front-ends requesting the same file
+to be downloaded to multiple different places on (different) disks
+(among other reasons). See the next point for a solution if you really
+have to force a specific location by creating symlinks.
+
+# Post processing the acquired files
+
+You can't modify the files apt has downloaded as apt keeps state with
+e.g. the modification times of the files and advanced features like
+PDiffs break.
+
+You can however install an `APT::Update::Post-Invoke{-Success,}` hook
+script and use them to copy (modified) files to a different location.
+Use `apt-get indextargets` (or similar) to get the filenames – do not
+look into `/var/lib/apt/lists` directly!
+
+Please avoid time consuming calculations in the scripts and instead just
+trigger a background task as there is little to no feedback for the user
+while hook scripts run.
diff --git a/doc/apt-cache.8.xml b/doc/apt-cache.8.xml
new file mode 100644
index 0000000..b8c6aa9
--- /dev/null
+++ b/doc/apt-cache.8.xml
@@ -0,0 +1,392 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2016-08-16T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-cache</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-cache</refname>
+ <refpurpose>query the APT cache</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-cache;
+
+ <refsect1><title>Description</title>
+ <para>
+ <command>apt-cache</command> performs a variety of operations on APT's
+ package cache. <command>apt-cache</command> does not manipulate the
+ state of the system but does provide operations to search and generate
+ interesting output from the package metadata. The metadata is acquired
+ and updated via the 'update' command of e.g. <command>apt-get</command>,
+ so that it can be outdated if the last update is too long ago, but in
+ exchange <command>apt-cache</command> works independently of the
+ availability of the configured sources (e.g. offline).
+ </para>
+
+ <para>Unless the <option>-h</option>, or <option>--help</option> option is given, one of the
+ commands below must be present.</para>
+
+ <variablelist>
+ <varlistentry><term><option>gencaches</option></term>
+ <listitem><para><literal>gencaches</literal> creates APT's package cache. This is done
+ implicitly by all commands needing this cache if it is missing or outdated.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>showpkg</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para><literal>showpkg</literal> displays information about the packages listed on the
+ command line. Remaining arguments are package names. The available
+ versions and reverse dependencies of each package listed are listed, as
+ well as forward dependencies for each version. Forward (normal)
+ dependencies are those packages upon which the package in question
+ depends; reverse dependencies are those packages that depend upon the
+ package in question. Thus, forward dependencies must be satisfied for a
+ package, but reverse dependencies need not be.
+ For instance, <command>apt-cache showpkg libreadline2</command> would produce
+ output similar to the following:</para>
+
+<informalexample><programlisting>
+Package: libreadline2
+Versions: 2.1-12(/var/state/apt/lists/foo_Packages),
+Reverse Depends:
+ libreadlineg2,libreadline2
+ libreadline2-altdev,libreadline2
+Dependencies:
+2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))
+Provides:
+2.1-12 -
+Reverse Provides:
+</programlisting></informalexample>
+
+ <para>Thus it may be seen that libreadline2, version 2.1-12, depends on
+ libc5 and ncurses3.0 which must be installed for libreadline2 to work.
+ In turn, libreadlineg2 and libreadline2-altdev depend on libreadline2. If
+ libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be
+ installed; libreadlineg2 and libreadline2-altdev do not have to be
+ installed. For the specific meaning of the remainder of the output it
+ is best to consult the apt source code.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>stats</option></term><listitem><para><literal>stats</literal> displays some statistics about the cache.
+ No further arguments are expected. Statistics reported are:
+ <itemizedlist>
+ <listitem><para><literal>Total package names</literal> is the number of package names found
+ in the cache.</para>
+ </listitem>
+
+ <listitem><para><literal>Normal packages</literal> is the number of regular, ordinary package
+ names; these are packages that bear a one-to-one correspondence between
+ their names and the names used by other packages for them in
+ dependencies. The majority of packages fall into this category.</para>
+ </listitem>
+
+ <listitem><para><literal>Pure virtual packages</literal> is the number of packages that exist
+ only as a virtual package name; that is, packages only "provide" the
+ virtual package name, and no package actually uses the name. For
+ instance, "mail-transport-agent" in the Debian system is a
+ pure virtual package; several packages provide "mail-transport-agent",
+ but there is no package named "mail-transport-agent".</para>
+ </listitem>
+
+ <listitem><para><literal>Single virtual packages</literal> is the number of packages with only
+ one package providing a particular virtual package. For example, in the
+ Debian system, "X11-text-viewer" is a virtual package, but
+ only one package, xless, provides "X11-text-viewer".</para>
+ </listitem>
+
+ <listitem><para><literal>Mixed virtual packages</literal> is the number of packages that either
+ provide a particular virtual package or have the virtual package name
+ as the package name. For instance, in the Debian system,
+ "debconf" is both an actual package, and provided by the debconf-tiny
+ package.</para>
+ </listitem>
+
+ <listitem><para><literal>Missing</literal> is the number of package names that were referenced in
+ a dependency but were not provided by any package. Missing packages may
+ be an evidence if a full distribution is not accessed, or if a package
+ (real or virtual) has been dropped from the distribution. Usually they
+ are referenced from Conflicts or Breaks statements.</para>
+ </listitem>
+
+ <listitem><para><literal>Total distinct</literal> versions is the number of package versions
+ found in the cache. If more than one distribution is being accessed
+ (for instance, "stable" and "unstable"), this value
+ can be considerably larger than the number of total package names.</para>
+ </listitem>
+
+ <listitem><para><literal>Total dependencies</literal> is the number of dependency relationships
+ claimed by all of the packages in the cache.</para>
+ </listitem>
+ </itemizedlist>
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>showsrc</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para><literal>showsrc</literal> displays all the
+ source package records that match the given package names. All
+ versions are shown, as well as all records that declare the name
+ to be a binary package. Use <option>--only-source</option> to
+ display only source package names.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>dump</option></term>
+ <listitem><para><literal>dump</literal> shows a short listing of every package in the cache. It is
+ primarily for debugging.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>dumpavail</option></term>
+ <listitem><para><literal>dumpavail</literal> prints out an available list to stdout. This is
+ suitable for use with &dpkg; and is used by the &dselect; method.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>unmet</option></term>
+ <listitem><para><literal>unmet</literal> displays a summary of all unmet dependencies in the
+ package cache.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>show</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para><literal>show</literal> performs a function similar to
+ <command>dpkg --print-avail</command>; it displays the package records for the
+ named packages.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>search</option> <option><replaceable>&synopsis-regex;</replaceable>…</option></term>
+ <listitem><para><literal>search</literal> performs a full text search on all available package
+ lists for the POSIX regex pattern given, see &regex;.
+ It searches the package names and the
+ descriptions for an occurrence of the regular expression and prints out
+ the package name and the short description, including virtual package
+ names.
+ If <option>--full</option> is given
+ then output identical to <literal>show</literal> is produced for each matched
+ package, and if <option>--names-only</option> is given then the long description
+ is not searched, only the package name and provided packages are.</para>
+ <para>
+ Separate arguments can be used to specify multiple search patterns that
+ are and'ed together.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>depends</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para><literal>depends</literal> shows a listing of each dependency a package has
+ and all the possible other packages that can fulfill that dependency.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>rdepends</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para><literal>rdepends</literal> shows a listing of each reverse dependency a
+ package has.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>pkgnames</option> <optional><replaceable>&synopsis-prefix;</replaceable></optional></term>
+ <listitem><para>This command prints the name of each package APT knows. The optional
+ argument is a prefix match to filter the name list. The output is suitable
+ for use in a shell tab complete function and the output is generated
+ extremely quickly. This command is best used with the
+ <option>--generate</option> option.</para>
+ <para>Note that a package which APT knows of is not necessarily available to download,
+ installable or installed, e.g. virtual packages are also listed in the generated list.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>dotty</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para><literal>dotty</literal> takes a list of packages on the command line and
+ generates output suitable for use by dotty from the
+ <ulink url="http://www.research.att.com/sw/tools/graphviz/">GraphViz</ulink>
+ package. The result will be a set of nodes and edges representing the
+ relationships between the packages. By default the given packages will
+ trace out all dependent packages; this can produce a very large graph.
+ To limit the output to only the packages listed on the command line,
+ set the <literal>APT::Cache::GivenOnly</literal> option.</para>
+
+ <para>The resulting nodes will have several shapes; normal packages are boxes,
+ pure virtual packages are triangles, mixed virtual packages are diamonds,
+ missing packages are hexagons. Orange boxes mean recursion was stopped
+ (leaf packages), blue lines are pre-depends, green lines are conflicts.</para>
+
+ <para>Caution, dotty cannot graph larger sets of packages.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>xvcg</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para>The same as <literal>dotty</literal>, only for xvcg from the
+ <ulink url="http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html">VCG tool</ulink>.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><option>policy</option> <optional><replaceable>&synopsis-pkg;</replaceable>…</optional></term>
+ <listitem><para><literal>policy</literal> is meant to help debug issues relating to the
+ preferences file. With no arguments it will print out the
+ priorities of each source. Otherwise it prints out detailed information
+ about the priority selection of the named package.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>madison</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
+ <listitem><para><literal>apt-cache</literal>'s <literal>madison</literal> command attempts to mimic
+ the output format and a subset of the functionality of the Debian
+ archive management tool, <literal>madison</literal>. It displays
+ available versions of a package in a tabular format. Unlike the
+ original <literal>madison</literal>, it can only display information for
+ the architecture for which APT has retrieved package lists
+ (<literal>APT::Architecture</literal>).</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>options</title>
+ &apt-cmdblurb;
+
+ <variablelist>
+ <varlistentry><term><option>-p</option></term><term><option>--pkg-cache</option></term>
+ <listitem><para>Select the file to store the package cache. The package cache is the
+ primary cache used by all operations.
+ Configuration Item: <literal>Dir::Cache::pkgcache</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-s</option></term><term><option>--src-cache</option></term>
+ <listitem><para>Select the file to store the source cache. The source is used only by
+ <literal>gencaches</literal> and it stores a parsed version of the package
+ information from remote sources. When building the package cache the
+ source cache is used to avoid reparsing all of the package files.
+ Configuration Item: <literal>Dir::Cache::srcpkgcache</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-q</option></term><term><option>--quiet</option></term>
+ <listitem><para>Quiet; produces output suitable for logging, omitting progress indicators.
+ More q's will produce more quietness up to a maximum of 2. You can also use
+ <option>-q=#</option> to set the quietness level, overriding the configuration file.
+ Configuration Item: <literal>quiet</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-i</option></term><term><option>--important</option></term>
+ <listitem><para>Print only important dependencies; for use with <literal>unmet</literal>
+ and <literal>depends</literal>. Causes only Depends and
+ Pre-Depends relations to be printed.
+ Configuration Item: <literal>APT::Cache::Important</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--no-pre-depends</option></term>
+ <term><option>--no-depends</option></term>
+ <term><option>--no-recommends</option></term>
+ <term><option>--no-suggests</option></term>
+ <term><option>--no-conflicts</option></term>
+ <term><option>--no-breaks</option></term>
+ <term><option>--no-replaces</option></term>
+ <term><option>--no-enhances</option></term>
+ <listitem><para>Per default the <command>depends</command> and
+ <command>rdepends</command> print all dependencies. This can be tweaked with
+ these flags which will omit the specified dependency type.
+ Configuration Item: <literal>APT::Cache::Show<replaceable>DependencyType</replaceable></literal>
+ e.g. <literal>APT::Cache::ShowRecommends</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--implicit</option></term>
+ <listitem><para>Per default <command>depends</command> and <command>rdepends</command>
+ print only dependencies explicitly expressed in the metadata. With this flag
+ it will also show dependencies implicitly added based on the encountered data.
+ A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this package
+ also conflicts with the package foo from any other architecture.
+ Configuration Item: <literal>APT::Cache::ShowImplicit</literal>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-f</option></term><term><option>--full</option></term>
+ <listitem><para>Print full package records when searching.
+ Configuration Item: <literal>APT::Cache::ShowFull</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-a</option></term><term><option>--all-versions</option></term>
+ <listitem><para>Print full records for all available versions. This is the
+ default; to turn it off, use <option>--no-all-versions</option>.
+ If <option>--no-all-versions</option> is specified, only the candidate version
+ will be displayed (the one which would be selected for installation).
+ This option is only applicable to the <literal>show</literal> command.
+ Configuration Item: <literal>APT::Cache::AllVersions</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-g</option></term><term><option>--generate</option></term>
+ <listitem><para>Perform automatic package cache regeneration, rather than use the cache
+ as it is. This is the default; to turn it off, use <option>--no-generate</option>.
+ Configuration Item: <literal>APT::Cache::Generate</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--names-only</option></term><term><option>-n</option></term>
+ <listitem><para>Only search on the package and provided package names, not the long descriptions.
+ Configuration Item: <literal>APT::Cache::NamesOnly</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--all-names</option></term>
+ <listitem><para>Make <literal>pkgnames</literal> print all names, including virtual packages
+ and missing dependencies.
+ Configuration Item: <literal>APT::Cache::AllNames</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--recurse</option></term>
+ <listitem><para>Make <literal>depends</literal> and <literal>rdepends</literal> recursive so
+ that all packages mentioned are printed once.
+ Configuration Item: <literal>APT::Cache::RecurseDepends</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--installed</option></term>
+ <listitem><para>
+ Limit the output of <literal>depends</literal> and <literal>rdepends</literal> to
+ packages which are currently installed.
+ Configuration Item: <literal>APT::Cache::Installed</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--with-source</option> <option>&synopsis-param-filename;</option></term>
+ <listitem><para>
+ Adds the given file as a source for metadata. Can be repeated to add multiple files.
+ Supported are currently <literal>*.deb</literal>, <literal>*.dsc</literal>,
+ <literal>*.changes</literal>, <literal>Sources</literal> and
+ <literal>Packages</literal> files as well as source package directories.
+ Files are matched based on their name only, not their content!</para>
+ <para><literal>Sources</literal> and <literal>Packages</literal> can be compressed in any
+ format apt supports as long as they have the correct extension. If you need to store
+ multiple of these files in one directory you can prefix a name of your choice with the
+ last character being an underscore ("<literal>_</literal>"). Example: my.example_Packages.xz</para>
+ <para>Note that these sources are treated as trusted (see &apt-secure;).
+ Configuration Item: <literal>APT::Sources::With</literal>.</para></listitem>
+ </varlistentry>
+
+ &apt-commonoptions;
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Files</title>
+ <variablelist>
+ &file-sourceslist;
+ &file-statelists;
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-conf;, &sources-list;, &apt-get;
+ </para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-cache</command> returns zero on normal operation, decimal 100 on error.
+ </para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-cdrom.8.xml b/doc/apt-cdrom.8.xml
new file mode 100644
index 0000000..8f883c1
--- /dev/null
+++ b/doc/apt-cdrom.8.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <date>2013-11-30T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-cdrom</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-cdrom</refname>
+ <refpurpose>APT CD-ROM management utility</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-cdrom;
+
+ <refsect1><title>Description</title>
+ <para><command>apt-cdrom</command> is used to add a new CD-ROM to APT's list
+ of available sources. <command>apt-cdrom</command> takes care of
+ determining the structure of
+ the disc as well as correcting for several possible mis-burns and
+ verifying the index files.
+ </para>
+
+ <para>It is necessary to use <command>apt-cdrom</command> to add CDs to the
+ APT system;
+ it cannot be done by hand. Furthermore each disc in a multi-CD set must be
+ inserted and scanned separately to account for possible mis-burns.
+ </para>
+
+ <para>Unless the <option>-h</option>, or <option>--help</option> option is
+ given, one of the commands below must be present.</para>
+
+ <variablelist>
+ <varlistentry><term><option>add</option></term>
+ <listitem><para><literal>add</literal> is used to add a new disc to the
+ source list. It will unmount the
+ CD-ROM device, prompt for a disc to be inserted and then proceed to
+ scan it and copy the index files. If the disc does not have a proper
+ <filename>.disk</filename> directory you will be prompted for a descriptive
+ title.
+ </para>
+
+ <para>APT uses a CD-ROM ID to track which disc is currently in the drive and
+ maintains a database of these IDs in
+ <filename>&statedir;/cdroms.list</filename>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>ident</option></term>
+ <listitem><para>A debugging tool to report the identity of the current
+ disc as well as the stored file name
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Options</title>
+ &apt-cmdblurb;
+
+ <variablelist>
+ <varlistentry><term><option>--no-auto-detect</option></term><term><option>--cdrom</option></term>
+ <listitem><para>Do not try to auto-detect the CD-ROM path. Usually combined with the <option>--cdrom</option> option.
+ Configuration Item: <literal>Acquire::cdrom::AutoDetect</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry><term><option>-d</option></term><term><option>--cdrom</option></term>
+ <listitem><para>Mount point; specify the location to mount the CD-ROM. This
+ mount point must be listed in <filename>/etc/fstab</filename> and
+ properly configured.
+ Configuration Item: <literal>Acquire::cdrom::mount</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-r</option></term><term><option>--rename</option></term>
+ <listitem><para>Rename a disc; change the label of a disc or override the
+ disc's given label. This option will cause <command>apt-cdrom</command> to
+ prompt for a new label.
+ Configuration Item: <literal>APT::CDROM::Rename</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-m</option></term><term><option>--no-mount</option></term>
+ <listitem><para>No mounting; prevent <command>apt-cdrom</command> from
+ mounting and unmounting the mount point.
+ Configuration Item: <literal>APT::CDROM::NoMount</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-f</option></term><term><option>--fast</option></term>
+ <listitem><para>Fast Copy; Assume the package files are valid and do not
+ check every package. This option should be used only if
+ <command>apt-cdrom</command> has been run on this disc before and did not
+ detect any errors.
+ Configuration Item: <literal>APT::CDROM::Fast</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-a</option></term><term><option>--thorough</option></term>
+ <listitem><para>Thorough Package Scan; This option may be needed with some
+ old Debian 1.1/1.2 discs that have Package files in strange places. It
+ takes much longer to scan the CD but will pick them all up.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-n</option></term>
+ <term><option>--just-print</option></term>
+ <term><option>--recon</option></term>
+ <term><option>--no-act</option></term>
+ <listitem><para>No Changes; Do not change the &sources-list; file and do
+ not write index files. Everything is still checked however.
+ Configuration Item: <literal>APT::CDROM::NoAct</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ &apt-commonoptions;
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-conf;, &apt-get;, &sources-list;
+ </para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-cdrom</command> returns zero on normal operation, decimal 100 on error.
+ </para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
+
diff --git a/doc/apt-config.8.xml b/doc/apt-config.8.xml
new file mode 100644
index 0000000..cf2e87c
--- /dev/null
+++ b/doc/apt-config.8.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2013-11-30T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-config</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-config</refname>
+ <refpurpose>APT Configuration Query program</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-config;
+
+ <refsect1><title>Description</title>
+ <para><command>apt-config</command> is an internal program used by various
+ portions of the APT suite to provide consistent configurability. It accesses
+ the main configuration file <filename>/etc/apt/apt.conf</filename> in a
+ manner that is easy to use for scripted applications.</para>
+
+ <para>Unless the <option>-h</option>, or <option>--help</option> option is
+ given, one of the commands below must be present.
+ </para>
+
+ <variablelist>
+ <varlistentry><term><option>shell</option></term>
+ <listitem><para>
+ shell is used to access the configuration information from a shell
+ script. It is given pairs of arguments, the first being a shell
+ variable and the second the configuration value to query. As output
+ it lists shell assignment commands for each value present.
+ In a shell script it should be used as follows:
+ </para>
+
+<informalexample><programlisting>
+OPTS="-f"
+RES=`apt-config shell OPTS MyApp::options`
+eval $RES
+</programlisting></informalexample>
+
+ <para>This will set the shell environment variable $OPTS to the value of
+ MyApp::options with a default of <option>-f</option>.</para>
+
+
+ <para>The configuration item may be postfixed with a /[fdbi]. f returns
+ file names, d returns directories, b returns true or false and i returns
+ an integer. Each of the returns is normalized and verified
+ internally.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>dump</option></term>
+ <listitem><para>
+ Just show the contents of the configuration space.</para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>options</title>
+ &apt-cmdblurb;
+
+ <variablelist>
+ <varlistentry>
+ <term><option>--empty</option></term>
+ <listitem><para>Include options which have an empty value. This is the default, so
+ use --no-empty to remove them from the output.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--format '<replaceable>&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n</replaceable>'</option></term>
+ <listitem><para>Defines the output of each config option. &percnt;t will be replaced with its individual name,
+ &percnt;f with its full hierarchical name and &percnt;v with its value.
+ Use uppercase letters and special characters in the value will be encoded to ensure that
+ it can e.g. be safely used in a quoted-string as defined by RFC822. Additionally
+ &percnt;n will be replaced by a newline, and &percnt;N by a tab. A &percnt; can be
+ printed by using &percnt;&percnt;.</para></listitem>
+ </varlistentry>
+
+ &apt-commonoptions;
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-conf;
+ </para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-config</command> returns zero on normal operation, decimal 100 on error.
+ </para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
+
diff --git a/doc/apt-extracttemplates.1.xml b/doc/apt-extracttemplates.1.xml
new file mode 100644
index 0000000..cb1332d
--- /dev/null
+++ b/doc/apt-extracttemplates.1.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2014-03-27T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-extracttemplates</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-extracttemplates</refname>
+ <refpurpose>Utility to extract <command>debconf</command> config and templates from Debian packages</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-extracttemplates;
+
+ <refsect1><title>Description</title>
+ <para><command>apt-extracttemplates</command> will take one or more Debian package files
+ as input and write out (to a temporary directory) all associated config
+ scripts and template files. For each passed in package that contains
+ config scripts and templates, one line of output will be generated
+ in the format:</para>
+ <para>package version template-file config-script</para>
+ <para>template-file and config-script are written to the temporary directory
+ specified by the <option>-t</option> or <option>--tempdir</option>
+ (<literal>APT::ExtractTemplates::TempDir</literal>) directory,
+ with filenames of the form <filename>package.template.XXXXXX</filename> and
+ <filename>package.config.XXXXXX</filename></para>
+ </refsect1>
+
+ <refsect1><title>options</title>
+ &apt-cmdblurb;
+
+ <variablelist>
+ <varlistentry><term><option>-t</option></term><term><option>--tempdir</option></term>
+ <listitem><para>
+ Temporary directory in which to write extracted <command>debconf</command> template files
+ and config scripts.
+ Configuration Item: <literal>APT::ExtractTemplates::TempDir</literal></para></listitem>
+ </varlistentry>
+
+ &apt-commonoptions;
+
+ </variablelist>
+
+
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-conf;</para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-extracttemplates</command> returns zero on normal operation, decimal 100 on error.</para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-ftparchive.1.xml b/doc/apt-ftparchive.1.xml
new file mode 100644
index 0000000..246cc03
--- /dev/null
+++ b/doc/apt-ftparchive.1.xml
@@ -0,0 +1,627 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2016-11-11T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-ftparchive</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-ftparchive</refname>
+ <refpurpose>Utility to generate index files</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-ftparchive;
+
+ <refsect1><title>Description</title>
+ <para><command>apt-ftparchive</command> is the command line tool that generates the index
+ files that APT uses to access a distribution source. The index files should
+ be generated on the origin site based on the content of that site.</para>
+
+ <para><command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; program,
+ incorporating its entire functionality via the <literal>packages</literal> command.
+ It also contains a contents file generator, <literal>contents</literal>, and an
+ elaborate means to 'script' the generation process for a complete
+ archive.</para>
+
+ <para>Internally <command>apt-ftparchive</command> can make use of binary databases to
+ cache the contents of a .deb file and it does not rely on any external
+ programs aside from &gzip;. When doing a full generate it automatically
+ performs file-change checks and builds the desired compressed output files.</para>
+
+ <para>Unless the <option>-h</option>, or <option>--help</option> option is given,
+ one of the commands below must be present.</para>
+
+ <variablelist>
+ <varlistentry><term><option>packages</option></term>
+ <listitem><para>
+ The packages command generates a package file from a directory tree. It
+ takes the given directory and recursively searches it for .deb files,
+ emitting a package record to stdout for each. This command is
+ approximately equivalent to &dpkg-scanpackages;.</para>
+
+ <para>The option <option>--db</option> can be used to specify a binary caching DB.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>sources</option></term>
+ <listitem><para>
+ The <literal>sources</literal> command generates a source index file from a directory tree.
+ It takes the given directory and recursively searches it for .dsc files,
+ emitting a source record to stdout for each. This command is approximately
+ equivalent to &dpkg-scansources;.</para>
+ <para>
+ If an override file is specified then a source override file will be
+ looked for with an extension of .src. The --source-override option can be
+ used to change the source override file that will be used.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>contents</option></term>
+ <listitem><para>
+ The <literal>contents</literal> command generates a contents file from a directory tree. It
+ takes the given directory and recursively searches it for .deb files,
+ and reads the file list from each file. It then sorts and writes to stdout
+ the list of files matched to packages. Directories are not written to
+ the output. If multiple packages own the same file then each package is
+ separated by a comma in the output.</para>
+ <para>
+ The option <option>--db</option> can be used to specify a binary caching DB.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>release</option></term>
+ <listitem><para>
+ The <literal>release</literal> command generates a Release file from a
+ directory tree. It recursively searches the given directory for
+ uncompressed and compressed <filename>Packages</filename>,
+ <filename>Sources</filename>, <filename>Contents</filename>,
+ <filename>Components</filename> and <filename>icons</filename> files as
+ well as <filename>Release</filename>, <filename>Index</filename> and
+ <filename>md5sum.txt</filename> files by default
+ (<literal>APT::FTPArchive::Release::Default-Patterns</literal>).
+ Additional filename patterns can be added by listing them in
+ <literal>APT::FTPArchive::Release::Patterns</literal>. It then writes to
+ stdout a <filename>Release</filename> file containing (by default) an MD5,
+ SHA1, SHA256 and SHA512 digest for each file.</para>
+ <para>
+ Values for the additional metadata fields in the Release file are
+ taken from the corresponding variables under
+ <literal>APT::FTPArchive::Release</literal>,
+ e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The supported fields
+ are <literal>Origin</literal>, <literal>Label</literal>, <literal>Suite</literal>,
+ <literal>Version</literal>, <literal>Codename</literal>, <literal>Date</literal>,
+ <literal>NotAutomatic</literal>, <literal>ButAutomaticUpgrades</literal>,
+ <literal>Acquire-By-Hash</literal>, <literal>Valid-Until</literal>,
+ <literal>Signed-By</literal>, <literal>Architectures</literal>,
+ <literal>Components</literal> and <literal>Description</literal>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>generate</option></term>
+ <listitem><para>
+ The <literal>generate</literal> command is designed to be runnable from a cron script and
+ builds indexes according to the given config file. The config language
+ provides a flexible means of specifying which index files are built from
+ which directories, as well as providing a simple means of maintaining the
+ required settings.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>clean</option></term>
+ <listitem><para>
+ The <literal>clean</literal> command tidies the databases used by the given
+ configuration file by removing any records that are no longer necessary.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>The Generate Configuration</title>
+ <para>
+ The <literal>generate</literal> command uses a configuration file to describe the
+ archives that are going to be generated. It follows the typical ISC
+ configuration format as seen in ISC tools like bind 8 and dhcpd.
+ &apt-conf; contains a description of the syntax. Note that the generate
+ configuration is parsed in sectional manner, but &apt-conf; is parsed in a
+ tree manner. This only effects how the scope tag is handled.</para>
+
+ <para>
+ The generate configuration has four separate sections, each described below.</para>
+
+ <refsect2><title><literal>Dir</literal> Section</title>
+ <para>
+ The <literal>Dir</literal> section defines the standard directories needed to
+ locate the files required during the generation process. These
+ directories are prepended certain relative paths defined in later
+ sections to produce a complete an absolute path.</para>
+ <variablelist>
+ <varlistentry><term><option>ArchiveDir</option></term>
+ <listitem><para>
+ Specifies the root of the FTP archive, in a standard
+ Debian configuration this is the directory that contains the
+ <filename>ls-LR</filename> and dist nodes.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>OverrideDir</option></term>
+ <listitem><para>
+ Specifies the location of the override files.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>CacheDir</option></term>
+ <listitem><para>
+ Specifies the location of the cache files.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>FileListDir</option></term>
+ <listitem><para>
+ Specifies the location of the file list files,
+ if the <literal>FileList</literal> setting is used below.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2><title><literal>Default</literal> Section</title>
+ <para>
+ The <literal>Default</literal> section specifies default values, and settings
+ that control the operation of the generator. Other sections may override
+ these defaults with a per-section setting.</para>
+ <variablelist>
+ <varlistentry><term><option>Packages::Compress</option></term>
+ <listitem><para>
+ Sets the default compression schemes to use
+ for the package index files. It is a string that contains a space
+ separated list of at least one of the compressors configured via the
+ <option>APT::Compressor</option> configuration scope.
+ The default for all compression schemes is '. gzip'.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Packages::Extensions</option></term>
+ <listitem><para>
+ Sets the default list of file extensions that are package files.
+ This defaults to '.deb'.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Sources::Compress</option></term>
+ <listitem><para>
+ This is similar to <literal>Packages::Compress</literal>
+ except that it controls the compression for the Sources files.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Sources::Extensions</option></term>
+ <listitem><para>
+ Sets the default list of file extensions that are source files.
+ This defaults to '.dsc'.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Contents::Compress</option></term>
+ <listitem><para>
+ This is similar to <literal>Packages::Compress</literal>
+ except that it controls the compression for the Contents files.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Translation::Compress</option></term>
+ <listitem><para>
+ This is similar to <literal>Packages::Compress</literal>
+ except that it controls the compression for the Translation-en master file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>DeLinkLimit</option></term>
+ <listitem><para>
+ Specifies the number of kilobytes to delink (and
+ replace with hard links) per run. This is used in conjunction with the
+ per-section <literal>External-Links</literal> setting.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>FileMode</option></term>
+ <listitem><para>
+ Specifies the mode of all created index files. It
+ defaults to 0644. All index files are set to this mode with no regard
+ to the umask.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>LongDescription</option></term>
+ <listitem><para>
+ Specifies whether long descriptions should be included in the <filename>Packages</filename> file or split
+ out into a master <filename>Translation-en</filename> file.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2><title><literal>TreeDefault</literal> Section</title>
+ <para>
+ Sets defaults specific to <literal>Tree</literal> sections. All of these
+ variables are substitution variables and have the strings $(DIST),
+ $(SECTION) and $(ARCH) replaced with their respective values.</para>
+
+ <variablelist>
+ <varlistentry><term><option>MaxContentsChange</option></term>
+ <listitem><para>
+ Sets the number of kilobytes of contents
+ files that are generated each day. The contents files are round-robined
+ so that over several days they will all be rebuilt.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>ContentsAge</option></term>
+ <listitem><para>
+ Controls the number of days a contents file is allowed
+ to be checked without changing. If this limit is passed the mtime of the
+ contents file is updated. This case can occur if the package file is
+ changed in such a way that does not result in a new contents file
+ [override edit for instance]. A hold off is allowed in hopes that new
+ .debs will be installed, requiring a new file anyhow. The default is 10,
+ the units are in days.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Directory</option></term>
+ <listitem><para>
+ Sets the top of the .deb directory tree. Defaults to
+ <filename>$(DIST)/$(SECTION)/binary-$(ARCH)/</filename></para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>SrcDirectory</option></term>
+ <listitem><para>
+ Sets the top of the source package directory tree. Defaults to
+ <filename>$(DIST)/$(SECTION)/source/</filename></para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Packages</option></term>
+ <listitem><para>
+ Sets the output Packages file. Defaults to
+ <filename>$(DIST)/$(SECTION)/binary-$(ARCH)/Packages</filename></para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Sources</option></term>
+ <listitem><para>
+ Sets the output Sources file. Defaults to
+ <filename>$(DIST)/$(SECTION)/source/Sources</filename></para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Translation</option></term>
+ <listitem><para>
+ Sets the output Translation-en master file with the long descriptions if they
+ should be not included in the Packages file. Defaults to
+ <filename>$(DIST)/$(SECTION)/i18n/Translation-en</filename></para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>InternalPrefix</option></term>
+ <listitem><para>
+ Sets the path prefix that causes a symlink to be
+ considered an internal link instead of an external link. Defaults to
+ <filename>$(DIST)/$(SECTION)/</filename></para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Contents</option></term>
+ <listitem><para>
+ Sets the output Contents file. Defaults to
+ <filename>$(DIST)/$(SECTION)/Contents-$(ARCH)</filename>. If this setting causes multiple
+ Packages files to map onto a single Contents file (as is the default)
+ then <command>apt-ftparchive</command> will integrate those package files
+ together automatically.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Contents::Header</option></term>
+ <listitem><para>
+ Sets header file to prepend to the contents output.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>BinCacheDB</option></term>
+ <listitem><para>
+ Sets the binary cache database to use for this
+ section. Multiple sections can share the same database.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>FileList</option></term>
+ <listitem><para>
+ Specifies that instead of walking the directory tree,
+ <command>apt-ftparchive</command> should read the list of files from the given
+ file. Relative files names are prefixed with the archive directory.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>SourceFileList</option></term>
+ <listitem><para>
+ Specifies that instead of walking the directory tree,
+ <command>apt-ftparchive</command> should read the list of files from the given
+ file. Relative files names are prefixed with the archive directory.
+ This is used when processing source indexes.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2><title><literal>Tree</literal> Section</title>
+ <para>
+ The <literal>Tree</literal> section defines a standard Debian file tree which
+ consists of a base directory, then multiple sections in that base
+ directory and finally multiple Architectures in each section. The exact
+ pathing used is defined by the <literal>Directory</literal> substitution variable.</para>
+ <para>
+ The <literal>Tree</literal> section takes a scope tag which sets the
+ <literal>$(DIST)</literal> variable and defines the root of the tree
+ (the path is prefixed by <literal>ArchiveDir</literal>).
+ Typically this is a setting such as <filename>dists/&debian-stable-codename;</filename>.</para>
+ <para>
+ All of the settings defined in the <literal>TreeDefault</literal> section can be
+ used in a <literal>Tree</literal> section as well as three new variables.</para>
+ <para>
+ When processing a <literal>Tree</literal> section <command>apt-ftparchive</command>
+ performs an operation similar to:
+ <programlisting>
+for i in Sections do
+ for j in Architectures do
+ Generate for DIST=scope SECTION=i ARCH=j
+ </programlisting></para>
+
+ <variablelist>
+ <varlistentry><term><option>Sections</option></term>
+ <listitem><para>
+ This is a space separated list of sections which appear
+ under the distribution; typically this is something like
+ <literal>main contrib non-free</literal></para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Architectures</option></term>
+ <listitem><para>
+ This is a space separated list of all the architectures that appear under
+ search section. The special architecture 'source' is used to indicate
+ that this tree has a source archive. The architecture 'all' signals that
+ architecture specific files like <filename>Packages</filename> should not
+ include information about architecture <literal>all</literal> packages in
+ all files as they will be available in a dedicated file.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>LongDescription</option></term>
+ <listitem><para>
+ Specifies whether long descriptions should be included in the <filename>Packages</filename> file or split
+ out into a master <filename>Translation-en</filename> file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>BinOverride</option></term>
+ <listitem><para>
+ Sets the binary override file. The override file
+ contains section, priority and maintainer address information.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>SrcOverride</option></term>
+ <listitem><para>
+ Sets the source override file. The override file
+ contains section information.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>ExtraOverride</option></term>
+ <listitem><para>
+ Sets the binary extra override file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>SrcExtraOverride</option></term>
+ <listitem><para>
+ Sets the source extra override file.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2><title><literal>BinDirectory</literal> Section</title>
+ <para>
+ The <literal>bindirectory</literal> section defines a binary directory tree
+ with no special structure. The scope tag specifies the location of
+ the binary directory and the settings are similar to the <literal>Tree</literal>
+ section with no substitution variables or
+ <literal>Section</literal><literal>Architecture</literal> settings.</para>
+ <variablelist>
+ <varlistentry><term><option>Packages</option></term>
+ <listitem><para>
+ Sets the Packages file output.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Sources</option></term>
+ <listitem><para>
+ Sets the Sources file output. At least one of
+ <literal>Packages</literal> or <literal>Sources</literal> is required.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Contents</option></term>
+ <listitem><para>
+ Sets the Contents file output (optional).</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>BinOverride</option></term>
+ <listitem><para>
+ Sets the binary override file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>SrcOverride</option></term>
+ <listitem><para>
+ Sets the source override file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>ExtraOverride</option></term>
+ <listitem><para>
+ Sets the binary extra override file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>SrcExtraOverride</option></term>
+ <listitem><para>
+ Sets the source extra override file.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>BinCacheDB</option></term>
+ <listitem><para>
+ Sets the cache DB.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>PathPrefix</option></term>
+ <listitem><para>
+ Appends a path to all the output paths.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>FileList</option></term><term><option>SourceFileList</option></term>
+ <listitem><para>
+ Specifies the file list file.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+ </refsect1>
+
+
+ <refsect1><title>The Binary Override File</title>
+ <para>The binary override file is fully compatible with &dpkg-scanpackages;. It
+ contains four fields separated by spaces. The first field is the package name,
+ the second is the priority to force that package to, the third is
+ the section to force that package to and the final field is the maintainer
+ permutation field.</para>
+ <para>The general form of the maintainer field is:
+ <literallayout>old [// oldn]* => new</literallayout>
+ or simply,
+ <literallayout>new</literallayout>
+ The first form allows a double-slash separated list of old email addresses
+ to be specified. If any of those are found then new is substituted for the
+ maintainer field. The second form unconditionally substitutes the
+ maintainer field.</para>
+ </refsect1>
+
+
+ <refsect1><title>The Source Override File</title>
+ <para>
+ The source override file is fully compatible with &dpkg-scansources;. It
+ contains two fields separated by spaces. The first field is the source
+ package name, the second is the section to assign it.</para>
+ </refsect1>
+
+ <refsect1><title>The Extra Override File</title>
+ <para>
+ The extra override file allows any arbitrary tag to be added or replaced
+ in the output. It has three columns, the first is the package, the second is
+ the tag and the remainder of the line is the new value.</para>
+ </refsect1>
+
+ <refsect1><title>options</title>
+ &apt-cmdblurb;
+
+ <variablelist>
+ <varlistentry>
+ <term><option>--md5</option></term>
+ <term><option>--sha1</option></term>
+ <term><option>--sha256</option></term>
+ <term><option>--sha512</option></term>
+ <listitem><para>
+ Generate the given checksum. These options default to on, when turned off the generated
+ index files will not have the checksum fields where possible.
+ Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</replaceable></literal> and
+ <literal>APT::FTPArchive::<replaceable>Index</replaceable>::<replaceable>Checksum</replaceable></literal> where
+ <literal><replaceable>Index</replaceable></literal> can be <literal>Packages</literal>, <literal>Sources</literal> or
+ <literal>Release</literal> and <literal><replaceable>Checksum</replaceable></literal> can be <literal>MD5</literal>,
+ <literal>SHA1</literal>, <literal>SHA256</literal> or <literal>SHA512</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-d</option></term><term><option>--db</option></term>
+ <listitem><para>
+ Use a binary caching DB. This has no effect on the generate command.
+ Configuration Item: <literal>APT::FTPArchive::DB</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-q</option></term><term><option>--quiet</option></term>
+ <listitem><para>
+ Quiet; produces output suitable for logging, omitting progress indicators.
+ More q's will produce more quiet up to a maximum of 2. You can also use
+ <option>-q=#</option> to set the quiet level, overriding the configuration file.
+ Configuration Item: <literal>quiet</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--delink</option></term>
+ <listitem><para>
+ Perform Delinking. If the <literal>External-Links</literal> setting is used then
+ this option actually enables delinking of the files. It defaults to on and
+ can be turned off with <option>--no-delink</option>.
+ Configuration Item: <literal>APT::FTPArchive::DeLinkAct</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--contents</option></term>
+ <listitem><para>
+ Perform contents generation. When this option is set and package indexes
+ are being generated with a cache DB then the file listing will also be
+ extracted and stored in the DB for later use. When using the generate
+ command this option also allows the creation of any Contents files. The
+ default is on.
+ Configuration Item: <literal>APT::FTPArchive::Contents</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-s</option></term><term><option>--source-override</option></term>
+ <listitem><para>
+ Select the source override file to use with the <literal>sources</literal> command.
+ Configuration Item: <literal>APT::FTPArchive::SourceOverride</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--readonly</option></term>
+ <listitem><para>
+ Make the caching databases read only.
+ Configuration Item: <literal>APT::FTPArchive::ReadOnlyDB</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-a</option></term><term><option>--arch</option></term>
+ <listitem><para>Accept in the <literal>packages</literal> and <literal>contents</literal>
+ commands only package files matching <literal>*_arch.deb</literal> or
+ <literal>*_all.deb</literal> instead of all package files in the given path.
+ Configuration Item: <literal>APT::FTPArchive::Architecture</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>APT::FTPArchive::AlwaysStat</option></term>
+ <listitem><para>
+ &apt-ftparchive; caches as much as possible of metadata in a cachedb. If packages
+ are recompiled and/or republished with the same version again, this will lead to problems
+ as the now outdated cached metadata like size and checksums will be used. With this option
+ enabled this will no longer happen as it will be checked if the file was changed.
+ Note that this option is set to "<literal>false</literal>" by default as it is not recommend
+ to upload multiply versions/builds of a package with the same versionnumber, so in theory
+ nobody will have these problems and therefore all these extra checks are useless.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>APT::FTPArchive::LongDescription</option></term>
+ <listitem><para>
+ This configuration option defaults to "<literal>true</literal>" and should only be set to
+ <literal>"false"</literal> if the Archive generated with &apt-ftparchive; also provides
+ <filename>Translation</filename> files. Note that the <filename>Translation-en</filename>
+ master file can only be created in the generate command.
+ </para></listitem>
+ </varlistentry>
+
+ &apt-commonoptions;
+
+ </variablelist>
+ </refsect1>
+
+<refsect1><title>Examples</title>
+
+<para>To create a compressed Packages file for a directory containing
+binary packages (.deb):
+
+<programlisting>
+<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>
+</programlisting></para>
+
+</refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-conf;</para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-ftparchive</command> returns zero on normal operation, decimal 100 on error.</para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml
new file mode 100644
index 0000000..b757c3d
--- /dev/null
+++ b/doc/apt-get.8.xml
@@ -0,0 +1,648 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2019-01-27T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-get</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-get</refname>
+ <refpurpose>APT package handling utility -- command-line interface</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-get;
+
+ <refsect1><title>Description</title>
+ <para><command>apt-get</command> is the command-line tool for handling packages, and may be
+ considered the user's "back-end" to other tools using the APT
+ library. Several "front-end" interfaces exist, such as
+ &aptitude;, &synaptic; and &wajig;.</para>
+
+ <para>Unless the <option>-h</option>, or <option>--help</option> option is given, one of the
+ commands below must be present.</para>
+
+ <variablelist>
+ <varlistentry><term><option>update</option></term>
+ <listitem><para><literal>update</literal> is used to resynchronize the package index files from
+ their sources. The indexes of available packages are fetched from the
+ location(s) specified in <filename>/etc/apt/sources.list</filename>.
+ For example, when using a Debian archive, this command retrieves and
+ scans the <filename>Packages.gz</filename> files, so that information about new
+ and updated packages is available. An <literal>update</literal> should always be
+ performed before an <literal>upgrade</literal> or <literal>dist-upgrade</literal>. Please
+ be aware that the overall progress meter will be incorrect as the size
+ of the package files cannot be known in advance.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>upgrade</option></term>
+ <listitem><para><literal>upgrade</literal> is used to install the newest versions of all packages
+ currently installed on the system from the sources enumerated in
+ <filename>/etc/apt/sources.list</filename>. Packages currently installed with
+ new versions available are retrieved and upgraded; under no circumstances
+ are currently installed packages removed, or packages not already installed
+ retrieved and installed. New versions of currently installed packages that
+ cannot be upgraded without changing the install status of another package
+ will be left at their current version. An <literal>update</literal> must be
+ performed first so that <command>apt-get</command> knows that new versions of packages are
+ available.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>dist-upgrade</option></term>
+ <listitem><para><literal>dist-upgrade</literal> in addition to performing the function of
+ <literal>upgrade</literal>, also intelligently handles changing dependencies
+ with new versions of packages; <command>apt-get</command> has a "smart" conflict
+ resolution system, and it will attempt to upgrade the most important
+ packages at the expense of less important ones if necessary.
+ The <literal>dist-upgrade</literal> command may therefore remove some packages.
+ The <filename>/etc/apt/sources.list</filename> file contains a list of locations
+ from which to retrieve desired package files.
+ See also &apt-preferences; for a mechanism for
+ overriding the general settings for individual packages.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>dselect-upgrade</option></term>
+ <listitem><para><literal>dselect-upgrade</literal>
+ is used in conjunction with the traditional Debian packaging
+ front-end, &dselect;. <literal>dselect-upgrade</literal>
+ follows the changes made by &dselect; to the <literal>Status</literal>
+ field of available packages, and performs the actions necessary to realize
+ that state (for instance, the removal of old and the installation of new
+ packages).</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>install</option></term>
+ <listitem>
+ <para><literal>install</literal> is followed by one or more
+ packages desired for installation or upgrading.
+ Each package is a package name, not a fully qualified
+ filename (for instance, in a Debian system,
+ <package>apt-utils</package> would be the argument provided, not
+ <filename>apt-utils_&apt-product-version;_amd64.deb</filename>). All packages required
+ by the package(s) specified for installation will also
+ be retrieved and installed.
+ The <filename>/etc/apt/sources.list</filename> file is
+ used to locate the desired packages. If a hyphen is
+ appended to the package name (with no intervening space),
+ the identified package will be removed if it is installed.
+ Similarly a plus sign can be used to designate a
+ package to install. These latter features may be used
+ to override decisions made by apt-get's conflict
+ resolution system.
+ </para>
+
+ <para>A specific version of a package can be selected for installation by
+ following the package name with an equals and the version of the package
+ to select. This will cause that version to be located and selected for
+ install. Alternatively a specific distribution can be selected by
+ following the package name with a slash and the version of the
+ distribution or the Archive name (stable, testing, unstable).</para>
+
+ <para>Both of the version selection mechanisms can downgrade packages and must
+ be used with care.</para>
+
+ <para>This is also the target to use if you want to upgrade one or
+ more already-installed packages without upgrading every package
+ you have on your system. Unlike the "upgrade" target, which
+ installs the newest version of all currently installed packages,
+ "install" will install the newest version of only the package(s)
+ specified. Simply provide the name of the package(s) you wish
+ to upgrade, and if a newer version is available, it (and its
+ dependencies, as described above) will be downloaded and
+ installed.
+ </para>
+
+ <para>Finally, the &apt-preferences; mechanism allows you to
+ create an alternative installation policy for
+ individual packages.</para>
+
+ <para>If no package matches the given expression and the expression contains one
+ of '.', '?' or '*' then it is assumed to be a POSIX regular expression,
+ and it is applied
+ to all package names in the database. Any matches are then installed (or
+ removed). Note that matching is done by substring so 'lo.*' matches 'how-lo'
+ and 'lowest'. If this is undesired, anchor the regular expression
+ with a '^' or '$' character, or create a more specific regular expression.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>reinstall</option></term>
+ <listitem><para><literal>reinstall</literal> is an alias for <literal>install --reinstall</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>remove</option></term>
+ <listitem><para><literal>remove</literal> is identical to <literal>install</literal> except that packages are
+ removed instead of installed. Note that removing a package leaves its
+ configuration files on the system. If a plus sign is appended to the package
+ name (with no intervening space), the identified package will be
+ installed instead of removed.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>purge</option></term>
+ <listitem><para><literal>purge</literal> is identical to <literal>remove</literal> except that packages are
+ removed and purged (any configuration files are deleted too).</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>source</option></term>
+ <listitem><para><literal>source</literal> causes <command>apt-get</command> to fetch source packages. APT
+ will examine the available packages to decide which source package to
+ fetch. It will then find and download into the current directory the
+ newest available version of that source package while respecting the
+ default release, set with the option <literal>APT::Default-Release</literal>,
+ the <option>-t</option> option or per package with the
+ <literal>pkg/release</literal> syntax, if possible.</para>
+
+ <para>The arguments are interpreted as binary and source package names.
+ See the <option>--only-source</option> option if you want to change that.</para>
+
+ <para>Source packages are tracked separately
+ from binary packages via <literal>deb-src</literal> lines
+ in the &sources-list; file. This means that you will need to add such a line
+ for each repository you want to get sources from; otherwise you will probably
+ get either the wrong (too old/too new) source versions or none at all.</para>
+
+ <para>If the <option>--compile</option> option is specified
+ then the package will be compiled to a binary .deb using
+ <command>dpkg-buildpackage</command> for the architecture as
+ defined by the <command>--host-architecture</command> option.
+ If <option>--download-only</option> is specified then the source package
+ will not be unpacked.</para>
+
+ <para>A specific source version can be retrieved by postfixing the source name
+ with an equals and then the version to fetch, similar to the mechanism
+ used for the package files. This enables exact matching of the source
+ package name and version, implicitly enabling the
+ <literal>APT::Get::Only-Source</literal> option.</para>
+
+ <para>Note that source packages are not installed and tracked in the
+ <command>dpkg</command> database like binary packages; they are simply downloaded
+ to the current directory, like source tarballs.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>build-dep</option></term>
+ <listitem><para><literal>build-dep</literal> causes apt-get to install/remove packages in an
+ attempt to satisfy the build dependencies for a source package. By default the dependencies are
+ satisfied to build the package natively. If desired a host-architecture can be specified
+ with the <option>--host-architecture</option> option instead.</para><para>The arguments are
+ interpreted as binary or source package names. See the <option>--only-source</option>
+ option if you want to change that.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>check</option></term>
+ <listitem><para><literal>check</literal> is a diagnostic tool; it updates the package cache and checks
+ for broken dependencies.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>download</option></term>
+ <listitem><para><literal>download</literal> will download the given
+ binary package into the current directory.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>clean</option></term>
+ <listitem><para><literal>clean</literal> clears out the local repository of retrieved package
+ files. It removes everything but the lock file from
+ <filename>&cachedir;/archives/</filename> and
+ <filename>&cachedir;/archives/partial/</filename>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>autoclean</option> (and the <option>auto-clean</option> alias since 1.1)</term>
+ <listitem><para>Like <literal>clean</literal>, <literal>autoclean</literal> clears out the local
+ repository of retrieved package files. The difference is that it only
+ removes package files that can no longer be downloaded, and are largely
+ useless. This allows a cache to be maintained over a long period without
+ it growing out of control. The configuration option
+ <literal>APT::Clean-Installed</literal> will prevent installed packages from being
+ erased if it is set to off.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>autoremove</option> (and the <option>auto-remove</option> alias since 1.1)</term>
+ <listitem><para><literal>autoremove</literal> is used to remove packages that were automatically
+ installed to satisfy dependencies for other packages and are now no longer needed.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>changelog</option></term>
+ <listitem><para><literal>changelog</literal> tries to download the
+ changelog of a package and displays it through
+ <command>sensible-pager</command>. By default it
+ displays the changelog for the version that is installed.
+ However, you can specify the same options as for the
+ <option>install</option> command.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>indextargets</option></term>
+ <listitem><para>Displays by default a deb822 formatted listing of
+ information about all data files (aka index targets) <command>apt-get
+ update</command> would download. Supports a
+ <option>--format</option> option to modify the output format as
+ well as accepts lines of the default output to filter the records
+ by. The command is mainly used as an interface for external tools
+ working with APT to get information as well as filenames for
+ downloaded files so they can use them as well instead of
+ downloading them again on their own. Detailed documentation is
+ omitted here and can instead be found in the file
+ &apt-acquire-additional-files; shipped by the <package>apt-doc</package> package.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>options</title>
+ &apt-cmdblurb;
+
+ <variablelist>
+ <varlistentry><term><option>--no-install-recommends</option></term>
+ <listitem><para>Do not consider recommended packages as a dependency for installing.
+ Configuration Item: <literal>APT::Install-Recommends</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--install-suggests</option></term>
+ <listitem><para>Consider suggested packages as a dependency for installing.
+ Configuration Item: <literal>APT::Install-Suggests</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-d</option></term><term><option>--download-only</option></term>
+ <listitem><para>Download only; package files are only retrieved, not unpacked or installed.
+ Configuration Item: <literal>APT::Get::Download-Only</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-f</option></term><term><option>--fix-broken</option></term>
+ <listitem><para>Fix; attempt to correct a system with broken dependencies in
+ place. This option, when used with install/remove, can omit any packages
+ to permit APT to deduce a likely solution. If packages are specified,
+ these have to completely correct the problem. The option is sometimes necessary when
+ running APT for the first time; APT itself does not allow broken package
+ dependencies to exist on a system. It is possible that a system's
+ dependency structure can be so corrupt as to require manual intervention
+ (which usually means using <command>dpkg --remove</command> to eliminate some of
+ the offending packages). Use of this option together with <option>-m</option> may produce an
+ error in some situations.
+ Configuration Item: <literal>APT::Get::Fix-Broken</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-m</option></term><term><option>--ignore-missing</option></term>
+ <term><option>--fix-missing</option></term>
+ <listitem><para>Ignore missing packages; if packages cannot be retrieved or fail the
+ integrity check after retrieval (corrupted package files), hold back
+ those packages and handle the result. Use of this option together with
+ <option>-f</option> may produce an error in some situations. If a package is
+ selected for installation (particularly if it is mentioned on the
+ command line) and it could not be downloaded then it will be silently
+ held back.
+ Configuration Item: <literal>APT::Get::Fix-Missing</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--no-download</option></term>
+ <listitem><para>Disables downloading of packages. This is best used with
+ <option>--ignore-missing</option> to force APT to use only the .debs it has
+ already downloaded.
+ Configuration Item: <literal>APT::Get::Download</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-q</option></term><term><option>--quiet</option></term>
+ <listitem><para>Quiet; produces output suitable for logging, omitting progress indicators.
+ More q's will produce more quiet up to a maximum of 2. You can also use
+ <option>-q=#</option> to set the quiet level, overriding the configuration file.
+ Note that quiet level 2 implies <option>-y</option>; you should never use -qq
+ without a no-action modifier such as -d, --print-uris or -s as APT may
+ decide to do something you did not expect.
+ Configuration Item: <literal>quiet</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-s</option></term>
+ <term><option>--simulate</option></term>
+ <term><option>--just-print</option></term>
+ <term><option>--dry-run</option></term>
+ <term><option>--recon</option></term>
+ <term><option>--no-act</option></term>
+ <listitem><para>No action; perform a simulation of events that would occur
+ based on the current system state but do not actually change the
+ system. Locking will be disabled (<option>Debug::NoLocking</option>)
+ so the system state could change while <command>apt-get</command> is
+ running. Simulations can also be executed by non-root users which might
+ not have read access to all apt configuration distorting the simulation.
+ A notice expressing this warning is also shown by default for non-root
+ users (<option>APT::Get::Show-User-Simulation-Note</option>).
+ Configuration Item: <literal>APT::Get::Simulate</literal>.</para>
+
+ <para>Simulated runs print out a series of lines, each representing a <command>dpkg</command>
+ operation: configure (<literal>Conf</literal>), remove (<literal>Remv</literal>)
+ or unpack (<literal>Inst</literal>). Square brackets indicate broken packages, and
+ empty square brackets indicate breaks that are of no consequence (rare).</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-y</option></term><term><option>--yes</option></term>
+ <term><option>--assume-yes</option></term>
+ <listitem><para>Automatic yes to prompts; assume "yes" as answer to all prompts and run
+ non-interactively. If an undesirable situation, such as changing a held
+ package, trying to install an unauthenticated package or removing an essential package
+ occurs then <literal>apt-get</literal> will abort.
+ Configuration Item: <literal>APT::Get::Assume-Yes</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--assume-no</option></term>
+ <listitem><para>Automatic "no" to all prompts.
+ Configuration Item: <literal>APT::Get::Assume-No</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--no-show-upgraded</option></term>
+ <listitem><para>Do not show a list of all packages that are to be upgraded.
+ Configuration Item: <literal>APT::Get::Show-Upgraded</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-V</option></term><term><option>--verbose-versions</option></term>
+ <listitem><para>Show full versions for upgraded and installed packages.
+ Configuration Item: <literal>APT::Get::Show-Versions</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-a</option></term>
+ <term><option>--host-architecture</option></term>
+ <listitem><para>This option controls the architecture packages are built for
+ by <command>apt-get source --compile</command> and how cross-builddependencies
+ are satisfied. By default is it not set which means that the host architecture
+ is the same as the build architecture (which is defined by <literal>APT::Architecture</literal>).
+ Configuration Item: <literal>APT::Get::Host-Architecture</literal>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-P</option></term>
+ <term><option>--build-profiles</option></term>
+ <listitem><para>This option controls the activated build profiles for which
+ a source package is built by <command>apt-get source --compile</command> and
+ how build dependencies are satisfied. By default no build profile is active.
+ More than one build profile can be activated at a time by concatenating them
+ with a comma.
+ Configuration Item: <literal>APT::Build-Profiles</literal>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-b</option></term><term><option>--compile</option></term>
+ <term><option>--build</option></term>
+ <listitem><para>Compile source packages after downloading them.
+ Configuration Item: <literal>APT::Get::Compile</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--ignore-hold</option></term>
+ <listitem><para>Ignore package holds; this causes <command>apt-get</command> to ignore a hold
+ placed on a package. This may be useful in conjunction with
+ <literal>dist-upgrade</literal> to override a large number of undesired holds.
+ Configuration Item: <literal>APT::Ignore-Hold</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--with-new-pkgs</option></term>
+ <listitem><para>Allow installing new packages when used in
+ conjunction with <literal>upgrade</literal>. This is useful if
+ the update of an installed package requires new dependencies to be
+ installed. Instead of holding the package back <literal>upgrade</literal>
+ will upgrade the package and install the new dependencies. Note that
+ <literal>upgrade</literal> with this option will never remove packages,
+ only allow adding new ones.
+ Configuration Item: <literal>APT::Get::Upgrade-Allow-New</literal>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--no-upgrade</option></term>
+ <listitem><para>Do not upgrade packages; when used in conjunction with <literal>install</literal>,
+ <literal>no-upgrade</literal> will prevent packages on the command line
+ from being upgraded if they are already installed.
+ Configuration Item: <literal>APT::Get::Upgrade</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--only-upgrade</option></term>
+ <listitem><para>Do not install new packages; when used in conjunction
+ with <literal>install</literal>, <literal>only-upgrade</literal> will
+ install upgrades for already installed packages only and ignore requests
+ to install new packages.
+ Configuration Item: <literal>APT::Get::Only-Upgrade</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--allow-downgrades</option></term>
+ <listitem><para>This is a dangerous option that will cause apt to continue
+ without prompting if it is doing downgrades. It
+ should not be used except in very special situations. Using
+ it can potentially destroy your system!
+ Configuration Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--allow-remove-essential</option></term>
+ <listitem><para>Force yes; this is a dangerous option that will cause apt to continue
+ without prompting if it is removing essentials. It
+ should not be used except in very special situations. Using
+ it can potentially destroy your system!
+ Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. Introduced in APT 1.1.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--allow-change-held-packages</option></term>
+ <listitem><para>Force yes; this is a dangerous option that will cause apt to continue
+ without prompting if it is changing held packages. It
+ should not be used except in very special situations. Using
+ it can potentially destroy your system!
+ Configuration Item: <literal>APT::Get::allow-change-held-packages</literal>. Introduced in APT 1.1.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--force-yes</option></term>
+ <listitem><para>Force yes; this is a dangerous option that will cause apt to continue
+ without prompting if it is doing something potentially harmful. It
+ should not be used except in very special situations. Using
+ <literal>force-yes</literal> can potentially destroy your system!
+ Configuration Item: <literal>APT::Get::force-yes</literal>. This is deprecated and replaced by
+ <option>--allow-unauthenticated</option>
+ , <option>--allow-downgrades</option>
+ , <option>--allow-remove-essential</option>
+ , <option>--allow-change-held-packages</option> in 1.1. </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--print-uris</option></term>
+ <listitem><para>Instead of fetching the files to install their URIs are printed. Each
+ URI will have the path, the destination file name, the size and the expected
+ MD5 hash. Note that the file name to write to will not always match
+ the file name on the remote site! This also works with the
+ <literal>source</literal> and <literal>update</literal> commands. When used with the
+ <literal>update</literal> command the MD5 and size are not included, and it is
+ up to the user to decompress any compressed files.
+ Configuration Item: <literal>APT::Get::Print-URIs</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--purge</option></term>
+ <listitem><para>Use purge instead of remove for anything that would be removed.
+ An asterisk ("*") will be displayed next to packages which are
+ scheduled to be purged. <option>remove --purge</option> is equivalent to the
+ <option>purge</option> command.
+ Configuration Item: <literal>APT::Get::Purge</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--reinstall</option></term>
+ <listitem><para>Re-install packages that are already installed and at the newest version.
+ Configuration Item: <literal>APT::Get::ReInstall</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--list-cleanup</option></term>
+ <listitem><para>This option is on by default; use <literal>--no-list-cleanup</literal> to turn
+ it off. When it is on, <command>apt-get</command> will automatically manage the contents
+ of <filename>&statedir;/lists</filename> to ensure that obsolete files are erased.
+ The only reason to turn it off is if you frequently change your sources list.
+ Configuration Item: <literal>APT::Get::List-Cleanup</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>-t</option></term>
+ <term><option>--target-release</option></term>
+ <term><option>--default-release</option></term>
+ <listitem><para>This option controls the default input to the policy engine; it creates
+ a default pin at priority 990 using the specified release string.
+ This overrides the general settings in <filename>/etc/apt/preferences</filename>.
+ Specifically pinned packages are not affected by the value
+ of this option. In short, this option
+ lets you have simple control over which distribution packages will be
+ retrieved from. Some common examples might be
+ <option>-t '2.1*'</option>, <option>-t unstable</option>
+ or <option>-t sid</option>.
+ Configuration Item: <literal>APT::Default-Release</literal>;
+ see also the &apt-preferences; manual page.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--trivial-only</option></term>
+ <listitem><para>
+ Only perform operations that are 'trivial'. Logically this can be considered
+ related to <option>--assume-yes</option>; where <option>--assume-yes</option> will answer
+ yes to any prompt, <option>--trivial-only</option> will answer no.
+ Configuration Item: <literal>APT::Get::Trivial-Only</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--no-remove</option></term>
+ <listitem><para>If any packages are to be removed apt-get immediately aborts without
+ prompting.
+ Configuration Item: <literal>APT::Get::Remove</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--auto-remove</option></term><term><option>--autoremove</option></term>
+ <listitem><para>If the command is either <literal>install</literal> or <literal>remove</literal>,
+ then this option acts like running the <literal>autoremove</literal> command, removing unused
+ dependency packages. Configuration Item: <literal>APT::Get::AutomaticRemove</literal>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--only-source</option></term>
+ <listitem><para>Only has meaning for the
+ <literal>source</literal> and <literal>build-dep</literal>
+ commands. Indicates that the given source names are not to be
+ mapped through the binary table. This means that if this option
+ is specified, these commands will only accept source package
+ names as arguments, rather than accepting binary package names
+ and looking up the corresponding source package. Configuration
+ Item: <literal>APT::Get::Only-Source</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--diff-only</option></term><term><option>--dsc-only</option></term><term><option>--tar-only</option></term>
+ <listitem><para>Download only the diff, dsc, or tar file of a source archive.
+ Configuration Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</literal>, and
+ <literal>APT::Get::Tar-Only</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--arch-only</option></term>
+ <listitem><para>Only process architecture-dependent build-dependencies.
+ Configuration Item: <literal>APT::Get::Arch-Only</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--indep-only</option></term>
+ <listitem><para>Only process architecture-independent build-dependencies.
+ Configuration Item: <literal>APT::Get::Indep-Only</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--allow-unauthenticated</option></term>
+ <listitem><para>Ignore if packages can't be authenticated and don't prompt
+ about it. This can be useful while working with local repositories,
+ but is a huge security risk if data authenticity isn't ensured in
+ another way by the user itself. The usage of the
+ <option>Trusted</option> option for &sources-list; entries should
+ usually be preferred over this global override. Configuration Item:
+ <literal>APT::Get::AllowUnauthenticated</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--no-allow-insecure-repositories</option></term>
+ <listitem><para>Forbid the update command to acquire unverifiable
+ data from configured sources. APT will fail at the update command
+ for repositories without valid cryptographically signatures. See
+ also &apt-secure; for details on the concept and the implications.
+
+ Configuration Item: <literal>Acquire::AllowInsecureRepositories</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--allow-releaseinfo-change</option></term>
+ <listitem><para>Allow the update command to continue downloading
+ data from a repository which changed its information of the release
+ contained in the repository indicating e.g a new major release.
+ APT will fail at the update command for such repositories until the
+ change is confirmed to ensure the user is prepared for the change.
+ See also &apt-secure; for details on the concept and configuration.
+ </para><para>
+ Specialist options
+ (<literal>--allow-releaseinfo-change-</literal><replaceable>field</replaceable>)
+ exist to allow changes only for certain fields like <literal>origin</literal>,
+ <literal>label</literal>, <literal>codename</literal>, <literal>suite</literal>,
+ <literal>version</literal> and <literal>defaultpin</literal>. See also &apt-preferences;.
+
+ Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--show-progress</option></term>
+ <listitem><para>Show user friendly progress information in the
+ terminal window when packages are installed, upgraded or
+ removed. For a machine parsable version of this data see
+ README.progress-reporting in the apt doc directory.
+ Configuration Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>--with-source</option> <option>&synopsis-param-filename;</option></term>
+ <listitem><para>
+ Adds the given file as a source for metadata. Can be repeated to add multiple files.
+ See <option>--with-source</option> description in &apt-cache; for further details.
+ </para></listitem>
+ </varlistentry>
+
+ &apt-commonoptions;
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Files</title>
+ <variablelist>
+ &file-sourceslist;
+ &file-aptconf;
+ &file-preferences;
+ &file-cachearchives;
+ &file-statelists;
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;,
+ &apt-conf;, &apt-config;, &apt-secure;,
+ The APT User's guide in &guidesdir;, &apt-preferences;, the APT Howto.</para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-get</command> returns zero on normal operation, decimal 100 on error.</para>
+ </refsect1>
+ &manbugs;
+</refentry>
diff --git a/doc/apt-key.8.xml b/doc/apt-key.8.xml
new file mode 100644
index 0000000..a1c677d
--- /dev/null
+++ b/doc/apt-key.8.xml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2016-11-22T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-key</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-key</refname>
+ <refpurpose>APT key management utility</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-key;
+
+ <refsect1><title>Description</title>
+ <para>
+ <command>apt-key</command> is used to manage the list of keys used
+ by apt to authenticate packages. Packages which have been
+ authenticated using these keys will be considered trusted.
+ </para>
+ <para>
+ Note that if usage of <command>apt-key</command> is desired the additional
+ installation of the GNU Privacy Guard suite (packaged in
+ <package>gnupg</package>) is required. For this reason alone the programmatic
+ usage (especially in package maintainerscripts!) is strongly discouraged.
+ Further more the output format of all commands is undefined and can and does
+ change whenever the underlying commands change. <command>apt-key</command> will
+ try to detect such usage and generates warnings on stderr in these cases.
+ </para>
+</refsect1>
+
+<refsect1><title>Supported keyring files</title>
+<para>apt-key supports only the binary OpenPGP format (also known as "GPG key
+ public ring") in files with the "<literal>gpg</literal>" extension, not
+ the keybox database format introduced in newer &gpg; versions as default
+ for keyring files. Binary keyring files intended to be used with any apt
+ version should therefore always be created with <command>gpg --export</command>.
+</para>
+<para>Alternatively, if all systems which should be using the created keyring
+ have at least apt version >= 1.4 installed, you can use the ASCII armored
+ format with the "<literal>asc</literal>" extension instead which can be
+ created with <command>gpg --armor --export</command>.
+</para>
+</refsect1>
+
+<refsect1><title>Commands</title>
+ <variablelist>
+ <varlistentry><term><option>add</option> <option>&synopsis-param-filename;</option></term>
+ <listitem>
+ <para>
+ Add a new key to the list of trusted keys.
+ The key is read from the filename given with the parameter
+ &synopsis-param-filename; or if the filename is <literal>-</literal>
+ from standard input.
+ </para>
+ <para>
+ It is critical that keys added manually via <command>apt-key</command> are
+ verified to belong to the owner of the repositories they claim to be for
+ otherwise the &apt-secure; infrastructure is completely undermined.
+ </para>
+ <para>
+ <emphasis>Note</emphasis>: Instead of using this command a keyring
+ should be placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename>
+ directory with a descriptive name and either "<literal>gpg</literal>" or
+ "<literal>asc</literal>" as file extension.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>del</option> <option>&synopsis-param-keyid;</option></term>
+ <listitem>
+ <para>
+
+ Remove a key from the list of trusted keys.
+
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>export</option> <option>&synopsis-param-keyid;</option></term>
+ <listitem>
+ <para>
+
+ Output the key &synopsis-param-keyid; to standard output.
+
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>exportall</option></term>
+ <listitem>
+ <para>
+
+ Output all trusted keys to standard output.
+
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>list</option>, <option>finger</option></term>
+ <listitem>
+ <para>
+
+ List trusted keys with fingerprints.
+
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>adv</option></term>
+ <listitem>
+ <para>
+ Pass advanced options to gpg. With <command>adv --recv-key</command> you
+ can e.g. download key from keyservers directly into the trusted set of
+ keys. Note that there are <emphasis>no</emphasis> checks performed, so it is
+ easy to completely undermine the &apt-secure; infrastructure if used without
+ care.
+ </para>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>update</option> (deprecated)</term>
+ <listitem>
+ <para>
+ Update the local keyring with the archive keyring and remove from
+ the local keyring the archive keys which are no longer valid.
+ The archive keyring is shipped in the <literal>archive-keyring</literal> package of your
+ distribution, e.g. the &keyring-package; package in &keyring-distro;.
+ </para>
+ <para>
+ Note that a distribution does not need to and in fact should not use
+ this command any longer and instead ship keyring files in the
+ <filename>/etc/apt/trusted.gpg.d/</filename> directory directly as this
+ avoids a dependency on <package>gnupg</package> and it is easier to manage
+ keys by simply adding and removing files for maintainers and users alike.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>net-update</option></term>
+ <listitem>
+ <para>
+
+ Perform an update working similarly to the <command>update</command> command above,
+ but get the archive keyring from a URI instead and validate it against a master key.
+
+ This requires an installed &wget; and an APT build configured to have
+ a server to fetch from and a master keyring to validate.
+
+ APT in Debian does not support this command, relying on
+ <command>update</command> instead, but Ubuntu's APT does.
+
+ </para>
+
+ </listitem>
+ </varlistentry>
+ </variablelist>
+</refsect1>
+
+ <refsect1><title>Options</title>
+<para>Note that options need to be defined before the commands described in the previous section.</para>
+ <variablelist>
+ <varlistentry><term><option>--keyring</option> <option>&synopsis-param-filename;</option></term>
+ <listitem><para>With this option it is possible to specify a particular keyring
+ file the command should operate on. The default is that a command is executed
+ on the <filename>trusted.gpg</filename> file as well as on all parts in the
+ <filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</filename>
+ is the primary keyring which means that e.g. new keys are added to this one.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Files</title>
+ <variablelist>
+
+ &file-trustedgpg;
+
+ </variablelist>
+
+</refsect1>
+
+<refsect1><title>See Also</title>
+<para>
+&apt-get;, &apt-secure;
+</para>
+</refsect1>
+
+ &manbugs;
+ &manauthor;
+
+</refentry>
+
diff --git a/doc/apt-mark.8.xml b/doc/apt-mark.8.xml
new file mode 100644
index 0000000..76675fc
--- /dev/null
+++ b/doc/apt-mark.8.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.moconnor;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2018-12-11T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-mark</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-mark</refname>
+ <refpurpose>show, set and unset various settings for a package</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-mark;
+
+ <refsect1><title>Description</title>
+ <para><command>apt-mark</command> can be used as a unified front-end to set
+ various settings for a package, such as marking a package as being
+ automatically/manually installed or changing <command>dpkg</command>
+ selections such as hold, install, deinstall and purge which are respected
+ e.g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</command>.
+ </para>
+ </refsect1><refsect1><title>Automatically and Manually Installed Packages</title>
+ <para>
+ When you request that a package is installed, and as a result
+ other packages are installed to satisfy its dependencies, the
+ dependencies are marked as being automatically installed, while the
+ package you installed explicitly is marked as manually installed.
+ Once an automatically installed package is no longer depended on
+ by any manually installed package it is considered no longer needed
+ and e.g. <command>apt-get</command> or <command>aptitude</command>
+ will at least suggest removing them.
+ </para>
+ <variablelist>
+ <varlistentry><term><option>auto</option></term>
+ <listitem><para><literal>auto</literal> is used to mark a
+ package as being automatically installed, which will cause the
+ package to be removed when no more manually installed packages
+ depend on this package.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>manual</option></term>
+ <listitem><para><literal>manual</literal> is used to mark a
+ package as being manually installed, which will prevent the
+ package from being automatically removed if no other packages
+ depend on it.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>minimize-manual</option></term>
+ <listitem><para><literal>minimize-manual</literal> is used to mark
+ (transitive) dependencies of metapackages as automatically installed.
+ This can be used after an installation for example, to minimize the
+ number of manually installed packages; or continuously on systems
+ managed by system configuration metapackages.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry><term><option>showauto</option></term>
+ <listitem><para><literal>showauto</literal> is used to print a
+ list of automatically installed packages with each package on a new line.
+ All automatically installed packages will be listed if no package is given.
+ If packages are given only those which are automatically installed will be shown.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>showmanual</option></term>
+ <listitem><para><literal>showmanual</literal> can be used in
+ the same way as <literal>showauto</literal> except that it will print
+ a list of manually installed packages instead.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+
+ <refsect2><title>Options</title>
+ <variablelist>
+ <varlistentry>
+ <term><option>-f=&synopsis-param-filename;</option></term>
+ <term><option>--file=&synopsis-param-filename;</option></term>
+ <listitem><para>
+ Read/Write package stats from the filename given with the parameter
+ &synopsis-param-filename; instead of from the default location, which
+ is <filename>extended_status</filename> in the directory defined
+ by the Configuration Item: <literal>Dir::State</literal>.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ </refsect1><refsect1><title>Prevent Changes for a Package</title>
+ <variablelist>
+ <varlistentry><term><option>hold</option></term>
+ <listitem><para><literal>hold</literal> is used to mark a
+ package as held back, which will prevent the package from being
+ automatically installed, upgraded or removed.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>unhold</option></term>
+ <listitem><para><literal>unhold</literal> is used to cancel a
+ previously set hold on a package to allow all actions again.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>showhold</option></term>
+ <listitem><para><literal>showhold</literal> is used to print a list
+ of packages on hold in the same way as for the other show commands.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1><refsect1><title>Schedule Packages for Install, Remove and Purge</title>
+ <para>
+ Some front-ends like <command>apt-get dselect-upgrade</command> can be used to
+ apply previously scheduled changes to the install state of packages. Such changes
+ can be scheduled with the <option>install</option>, <option>remove</option>
+ (also known as <option>deinstall</option>) and <option>purge</option> commands.
+ Packages with a specific selection can be displayed with <option>showinstall</option>,
+ <option>showremove</option> and <option>showpurge</option> respectively.
+ More information about these so called dpkg selections can be found in &dpkg;.
+ </para>
+ </refsect1>
+
+ <refsect1><title>Options</title>
+ <variablelist>
+ &apt-commonoptions;
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Files</title>
+ <variablelist>
+ &file-extended_states;
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para><phrase>&apt-get;,&aptitude;,&apt-conf;</phrase></para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-mark</command> returns zero on normal operation, non-zero on error.</para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-secure.8.xml b/doc/apt-secure.8.xml
new file mode 100644
index 0000000..e334df9
--- /dev/null
+++ b/doc/apt-secure.8.xml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2016-08-06T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-secure</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+<!-- NOTE: This manpage has been written based on the
+ Securing Debian Manual ("Debian Security
+ Infrastructure" chapter) and on documentation
+ available at the following sites:
+ http://wiki.debian.net/?apt06
+ http://www.syntaxpolice.org/apt-secure/
+ http://www.enyo.de/fw/software/apt-secure/
+-->
+<!-- TODO: write a more verbose example of how it works with
+ a sample similar to
+ http://www.debian-administration.org/articles/174
+ ?
+-->
+
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-secure</refname>
+ <refpurpose>Archive authentication support for APT</refpurpose>
+ </refnamediv>
+
+ <refsect1><title>Description</title>
+ <para>
+ Starting with version 0.6, <command>APT</command> contains code that does
+ signature checking of the Release file for all repositories. This ensures
+ that data like packages in the archive can't be modified by people who
+ have no access to the Release file signing key. Starting with version 1.1
+ <command>APT</command> requires repositories to provide recent authentication
+ information for unimpeded usage of the repository. Since version 1.5 changes
+ in the information contained in the Release file about the repository need to be
+ confirmed before APT continues to apply updates from this repository.
+ </para>
+
+ <para>
+ Note: All APT-based package management front-ends like &apt-get;, &aptitude;
+ and &synaptic; support this authentication feature, so this manpage uses
+ <literal>APT</literal> to refer to them all for simplicity only.
+ </para>
+</refsect1>
+
+ <refsect1><title>Unsigned Repositories</title>
+ <para>
+ If an archive has an unsigned Release file or no Release file at all
+ current APT versions will refuse to download data from them by default
+ in <command>update</command> operations and even if forced to download
+ front-ends like &apt-get; will require explicit confirmation if an
+ installation request includes a package from such an unauthenticated
+ archive.
+ </para>
+
+ <para>
+ You can force all APT clients to raise only warnings by setting the
+ configuration option <option>Acquire::AllowInsecureRepositories</option> to
+ <literal>true</literal>. Individual repositories can also be allowed to be insecure
+ via the &sources-list; option <literal>allow-insecure=yes</literal>.
+ Note that insecure repositories are strongly discouraged and all options
+ to force apt to continue supporting them will eventually be removed.
+ Users also have the <option>Trusted</option> option available to disable
+ even the warnings, but be sure to understand the implications as detailed in
+ &sources-list;.
+ </para>
+
+ <para>
+ A repository which previously was authenticated but would loose this state in
+ an <command>update</command> operation raises an error in all APT clients
+ irrespective of the option to allow or forbid usage of insecure repositories.
+ The error can be overcome by additionally setting
+ <option>Acquire::AllowDowngradeToInsecureRepositories</option>
+ to <literal>true</literal> or for Individual repositories with the &sources-list;
+ option <literal>allow-downgrade-to-insecure=yes</literal>.
+ </para>
+</refsect1>
+
+ <refsect1><title>Signed Repositories</title>
+ <para>
+ The chain of trust from an APT archive to the end user is made up of
+ several steps. <command>apt-secure</command> is the last step in
+ this chain; trusting an archive does not mean that you trust its
+ packages not to contain malicious code, but means that you
+ trust the archive maintainer. It's the archive maintainer's
+ responsibility to ensure that the archive's integrity is preserved.
+ </para>
+
+ <para>apt-secure does not review signatures at a
+ package level. If you require tools to do this you should look at
+ <command>debsig-verify</command> and
+ <command>debsign</command> (provided in the debsig-verify and
+ devscripts packages respectively).</para>
+
+ <para>
+ The chain of trust in Debian starts (e.g.) when a maintainer uploads a new
+ package or a new version of a package to the Debian archive. In
+ order to become effective, this upload needs to be signed by a key
+ contained in one of the Debian package maintainer keyrings (available in
+ the debian-keyring package). Maintainers' keys are signed by
+ other maintainers following pre-established procedures to
+ ensure the identity of the key holder. Similar procedures exist in all
+ Debian-based distributions.
+ </para>
+
+ <para>
+ Once the uploaded package is verified and included in the archive,
+ the maintainer signature is stripped off, and checksums of the package
+ are computed and put in the Packages file. The checksums of all of the
+ Packages files are then computed and put into the Release file. The
+ Release file is then signed by the archive key for this &keyring-distro; release,
+ and distributed alongside the packages and the Packages files on
+ &keyring-distro; mirrors. The keys are in the &keyring-distro; archive keyring
+ available in the &keyring-package; package.
+ </para>
+
+ <para>
+ End users can check the signature of the Release file, extract a checksum
+ of a package from it and compare it with the checksum of the package
+ they downloaded by hand - or rely on APT doing this automatically.
+ </para>
+
+ <para>Notice that this is distinct from checking signatures on a
+ per package basis. It is designed to prevent two possible attacks:
+ </para>
+
+ <itemizedlist>
+ <listitem><para><literal>Network "man in the middle"
+ attacks</literal>. Without signature checking, malicious
+ agents can introduce themselves into the package download process and
+ provide malicious software either by controlling a network
+ element (router, switch, etc.) or by redirecting traffic to a
+ rogue server (through ARP or DNS spoofing
+ attacks).</para></listitem>
+
+ <listitem><para><literal>Mirror network compromise</literal>.
+ Without signature checking, a malicious agent can compromise a
+ mirror host and modify the files in it to propagate malicious
+ software to all users downloading packages from that
+ host.</para></listitem>
+ </itemizedlist>
+
+ <para>However, it does not defend against a compromise of the
+ master server itself (which signs the packages) or against a
+ compromise of the key used to sign the Release files. In any case,
+ this mechanism can complement a per-package signature.</para>
+</refsect1>
+
+<refsect1><title>Information changes</title>
+ <para>
+ A Release file contains beside the checksums for the files in the repository
+ also general information about the repository like the origin, codename or
+ version number of the release.
+ </para><para>
+ This information is shown in various places so a repository owner should always
+ ensure correctness. Further more user configuration like &apt-preferences;
+ can depend and make use of this information. Since version 1.5 the user must
+ therefore explicitly confirm changes to signal that the user is sufficiently
+ prepared e.g. for the new major release of the distribution shipped in the
+ repository (as e.g. indicated by the codename).
+ </para>
+</refsect1>
+
+<refsect1><title>User Configuration</title>
+ <para>
+ <command>apt-key</command> is the program that manages the list of keys used
+ by APT to trust repositories. It can be used to add or remove keys as well
+ as list the trusted keys. Limiting which key(s) are able to sign which archive
+ is possible via the <option>Signed-By</option> in &sources-list;.
+ </para><para>
+ Note that a default installation already contains all keys to securely
+ acquire packages from the default repositories, so fiddling with
+ <command>apt-key</command> is only needed if third-party repositories are
+ added.
+ </para><para>
+ In order to add a new key you need to first download it
+ (you should make sure you are using a trusted communication channel
+ when retrieving it), add it with <command>apt-key</command> and
+ then run <command>apt-get update</command> so that apt can download
+ and verify the <filename>InRelease</filename> or <filename>Release.gpg</filename>
+ files from the archives you have configured.
+ </para>
+</refsect1>
+
+<refsect1><title>Repository Configuration</title>
+ <para>
+ If you want to provide archive signatures in an archive under your
+ maintenance you have to:
+ </para>
+
+ <itemizedlist>
+ <listitem><para><emphasis>Create a toplevel Release
+ file</emphasis>, if it does not exist already. You can do this
+ by running <command>apt-ftparchive release</command>
+ (provided in apt-utils).</para></listitem>
+
+ <listitem><para><emphasis>Sign it</emphasis>. You can do this by running
+ <command>gpg --clearsign -o InRelease Release</command> and
+ <command>gpg -abs -o Release.gpg Release</command>.</para></listitem>
+
+ <listitem><para>
+ <emphasis>Publish the key fingerprint</emphasis>, so that your users
+ will know what key they need to import in order to authenticate the files
+ in the archive. It is best to ship your key in its own keyring package
+ like &keyring-distro; does with &keyring-package; to be able to
+ distribute updates and key transitions automatically later.
+ </para></listitem>
+
+ <listitem><para>
+ <emphasis>Provide instructions on how to add your archive and key</emphasis>.
+ If your users can't acquire your key securely the chain of trust described above is broken.
+ How you can help users add your key depends on your archive and target audience ranging
+ from having your keyring package included in another archive users already have configured
+ (like the default repositories of their distribution) to leveraging the web of trust.
+ </para></listitem>
+
+ </itemizedlist>
+
+ <para>Whenever the contents of the archive change (new packages
+ are added or removed) the archive maintainer has to follow the
+ first two steps outlined above.</para>
+
+</refsect1>
+
+<refsect1><title>See Also</title>
+<para>
+&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;,
+&debsign;, &debsig-verify;, &gpg;
+</para>
+
+<para>For more background information you might want to review the
+<ulink
+url="https://www.debian.org/doc/manuals/securing-debian-howto/ch7">Debian
+Security Infrastructure</ulink> chapter of the Securing Debian Manual
+(also available in the harden-doc package) and the
+<ulink url="http://www.cryptnet.net/fdp/crypto/strong_distro.html"
+>Strong Distribution HOWTO</ulink> by V. Alex Brennen. </para>
+
+</refsect1>
+
+ &manbugs;
+ &manauthor;
+
+<refsect1><title>Manpage Authors</title>
+
+<para>This man-page is based on the work of Javier Fernández-Sanguino
+Peña, Isaac Jones, Colin Walters, Florian Weimer and Michael Vogt.
+</para>
+
+</refsect1>
+
+
+</refentry>
diff --git a/doc/apt-sortpkgs.1.xml b/doc/apt-sortpkgs.1.xml
new file mode 100644
index 0000000..b7f1993
--- /dev/null
+++ b/doc/apt-sortpkgs.1.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2013-11-30T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-sortpkgs</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-sortpkgs</refname>
+ <refpurpose>Utility to sort package index files</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt-sortpkgs;
+
+ <refsect1><title>Description</title>
+ <para><command>apt-sortpkgs</command> will take an index file (source index or package
+ index) and sort the records so that they are ordered by the package name.
+ It will also sort the internal fields of each record according to the
+ internal sorting rules.</para>
+
+ <para>
+ All output is sent to standard output; the input must be a seekable file.</para>
+ </refsect1>
+
+ <refsect1><title>options</title>
+ &apt-cmdblurb;
+
+ <variablelist>
+ <varlistentry><term><option>-s</option></term><term><option>--source</option></term>
+ <listitem><para>
+ Use source index field ordering.
+ Configuration Item: <literal>APT::SortPkgs::Source</literal>.</para></listitem>
+ </varlistentry>
+
+ &apt-commonoptions;
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-conf;</para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt-sortpkgs</command> returns zero on normal operation, decimal 100 on error.</para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-transport-http.1.xml b/doc/apt-transport-http.1.xml
new file mode 100644
index 0000000..f239da5
--- /dev/null
+++ b/doc/apt-transport-http.1.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2018-05-11T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-transport-http</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-transport-http</refname>
+ <refpurpose>APT transport for downloading via the Hypertext Transfer Protocol (HTTP)</refpurpose>
+ </refnamediv>
+
+<refsect1><title>Description</title>
+<para>This APT transport allows the use of repositories accessed via the
+Hypertext Transfer Protocol (HTTP). It is available by default and probably the
+most used of all transports. Note that a transport is never called directly by
+a user but used by APT tools based on user configuration.</para>
+<para>HTTP is an unencrypted transport protocol meaning that the
+whole communication with the remote server (or proxy) can be observed by a
+sufficiently capable attacker commonly referred to as a "man in the middle" (MITM).
+However, such an attacker can <emphasis>not</emphasis> modify the communication to compromise
+the security of your system, as APT's data security model is independent of the
+chosen transport method. This is explained in detail in &apt-secure;. An overview of
+available transport methods is given in &sources-list;.</para>
+</refsect1>
+
+<refsect1><title>Options</title>
+<para>Various options can be set in an &apt-conf; file to modify its behavior,
+ranging from proxy configuration to workarounds for specific
+server limitations.</para>
+
+<refsect2><title>Proxy Configuration</title>
+<para>The environment variable <envar>http_proxy</envar> is supported for system wide configuration.
+Proxies specific to APT can be configured via the option <literal>Acquire::http::Proxy</literal>.
+Proxies which should be used only for certain hosts can be specified via
+<literal>Acquire::http::Proxy::<replaceable>host</replaceable></literal>. Even more finegrained control
+can be achieved via proxy autodetection, detailed further below.
+All these options use the URI format <literal><replaceable>scheme</replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</replaceable>]/</literal>.
+Supported URI schemes are <literal>socks5h</literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and <literal>https</literal>.
+Authentication details can be supplied via &apt-authconf; instead of including it in the URI directly.</para>
+<para>The various APT configuration options support the special value <literal>DIRECT</literal> meaning that
+no proxy should be used. The environment variable <envar>no_proxy</envar> is also supported for the same purpose.</para>
+<para>Furthermore, there are three settings provided for cache control with HTTP/1.1 compliant proxy caches:
+<literal>Acquire::http::No-Cache</literal> tells the proxy not to use its
+cached response under any circumstances.
+<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in
+seconds) of an index file in the cache of the proxy.
+<literal>Acquire::http::No-Store</literal> specifies that the proxy should not
+store the requested archive files in its cache, which can be used to prevent
+the proxy from polluting its cache with (big) .deb files.</para>
+</refsect2>
+
+<refsect2><title>Automatic Proxy Configuration</title>
+<para><literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to
+specify an external command to discover the HTTP proxy to use. The first
+and only parameter is a URI denoting the host to be contacted, to allow
+for host-specific configuration. APT expects the command to output the
+proxy on stdout as a single line in the previously specified URI format
+or the word <literal>DIRECT</literal> if no proxy should be used. No output
+indicates that the generic proxy settings should be used.</para>
+<para>Note that auto-detection will not be used for a host if a host-specific proxy
+configuration is already set via <literal>Acquire::http::Proxy::<replaceable>host</replaceable></literal>.</para>
+<para>See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example implementations.</para>
+<para>This option takes precedence over the legacy option name <literal>Acquire::http::ProxyAutoDetect</literal>.</para>
+</refsect2>
+
+<refsect2><title>Connection Configuration</title>
+<para>The option <literal>Acquire::http::Timeout</literal> sets the timeout timer used by the method;
+this value applies to the connection as well as the data timeout.</para>
+<para>The used bandwidth can be limited with
+<literal>Acquire::http::Dl-Limit</literal> which accepts integer values in
+kilobytes per second. The default value is 0 which deactivates the limit and
+tries to use all available bandwidth. Note that this option implicitly
+disables downloading from multiple servers at the same time.</para>
+<para>The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to
+enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e.g. on
+high-latency connections. It specifies how many requests are sent in a pipeline.
+APT tries to detect and work around misbehaving webservers and proxies at runtime, but
+if you know that yours does not conform to the HTTP/1.1 specification, pipelining can
+be disabled by setting the value to 0. It is enabled by default with the value 10.</para>
+<para><literal>Acquire::http::AllowRedirect</literal> controls whether APT will follow
+redirects, which is enabled by default.</para>
+<para><literal>Acquire::http::User-Agent</literal> can be used to set a different
+User-Agent for the http download method as some proxies allow access for clients
+only if the client uses a known identifier.</para>
+<para><literal>Acquire::http::SendAccept</literal> is enabled by default and
+sends an <literal>Accept: text/*</literal> header field to the server for
+requests without file extensions to prevent the server from attempting content
+negotiation.</para>
+</refsect2>
+</refsect1>
+
+<refsect1><title>Examples</title>
+<literallayout>
+Acquire::http {
+ Proxy::example.org "DIRECT";
+ Proxy "socks5h://apt:pass@127.0.0.1:9050";
+ Proxy-Auto-Detect "/usr/local/bin/apt-http-proxy-auto-detect";
+ No-Cache "true";
+ Max-Age "3600";
+ No-Store "true";
+ Timeout "10";
+ Dl-Limit "42";
+ Pipeline-Depth "0";
+ AllowRedirect "false";
+ User-Agent "My APT-HTTP";
+ SendAccept "false";
+};
+</literallayout>
+</refsect1>
+
+<refsect1>
+<title>See Also</title>
+<para>&apt-conf; &apt-authconf; &sources-list;
+</para>
+</refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-transport-https.1.xml b/doc/apt-transport-https.1.xml
new file mode 100644
index 0000000..64d473c
--- /dev/null
+++ b/doc/apt-transport-https.1.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2018-05-11T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-transport-https</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-transport-https</refname>
+ <refpurpose>APT transport for downloading via the HTTP Secure protocol (HTTPS)</refpurpose>
+ </refnamediv>
+
+<refsect1><title>Description</title>
+<para>This APT transport allows the use of repositories accessed via the
+HTTP Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available
+by default since apt 1.5 and was available before that in the package
+<package>apt-transport-https</package>. Note that a transport is never called directly by
+a user but used by APT tools based on user configuration.</para>
+<para>HTTP is by itself an unencrypted transport protocol (compare &apt-transport-http;),
+which, as indicated by the appended S, is wrapped in an encrypted layer known as
+Transport Layer Security (TLS) to provide end-to-end encryption.
+A sufficiently capable attacker can still observe the communication partners
+and deeper analysis of the encrypted communication might still reveal important details.
+An overview over available alternative transport methods is given in &sources-list;.</para>
+</refsect1>
+
+<refsect1><title>Options</title>
+<para>The HTTPS protocol is based on the HTTP protocol, so
+all options supported by &apt-transport-http; are also
+available via <literal>Acquire::https</literal> and will default to the same values specified
+for <literal>Acquire::http</literal>. This manpage will only document the options
+<emphasis>unique to https</emphasis>.</para>
+
+<refsect2><title>Server credentials</title>
+<para>By default all certificates trusted by the system (see
+<package>ca-certificates</package> package) are used for the verification of
+the server certificate. An alternative certificate authority (CA) can be
+configured with the <literal>Acquire::https::CAInfo</literal> option and its
+host-specific option <literal>Acquire::https::CAInfo::<replaceable>host</replaceable></literal>.
+The CAInfo option specifies a file made up of CA certificates (in PEM format)
+concatenated together to create the chain which APT should use to verify the
+path from your self-signed root certificate. If the remote server provides the
+whole chain during the exchange, the file need only contain the root
+certificate. Otherwise, the whole chain is required. If you need to support
+multiple authorities, the only way is to concatenate everything.</para>
+<para>A custom certificate revocation list (CRL) can be configured with the options
+<literal>Acquire::https::CRLFile</literal> and
+<literal>Acquire::https::CRLFile::<replaceable>host</replaceable></literal>.
+As with the previous option, a file in PEM format needs to be specified.</para>
+</refsect2>
+
+<refsect2><title>Disabling security</title>
+<para>During server authentication, if certificate verification fails
+for some reason (expired, revoked, man in the middle, etc.), the connection fails.
+This is obviously what you want in all cases and what the default value (true)
+of the option <literal>Acquire::https::Verify-Peer</literal> and its host-specific
+variant provides. If you know <emphasis>exactly</emphasis> what you are doing,
+setting this option to "<literal>false</literal>" allows you to skip peer certificate verification and
+make the exchange succeed. Again, this option is for debugging or testing purposes
+only as it removes all security provided by the use of HTTPS.</para>
+<para>Similarly the option <literal>Acquire::https::Verify-Host</literal> and its
+host-specific variant can be used to deactivate a security feature: The certificate
+provided by the server includes the identity of the server which should match the
+DNS name used to access it. By default, as requested by RFC 2818, the name of the
+mirror is checked against the identity found in the certificate. This default behavior
+is safe and should not be changed, but if you know that the server you are using has a
+DNS name which does not match the identity in its certificate, you can set the option to
+"<literal>false</literal>", which will prevent the comparison from being performed.</para>
+</refsect2>
+
+<refsect2><title>Client authentication</title>
+<para>Besides supporting password-based authentication (see &apt-authconf;) HTTPS also supports
+authentication based on client certificates via <literal>Acquire::https::SSLCert</literal>
+and <literal>Acquire::https::SSLKey</literal>. These should be set respectively to the filename of
+the X.509 client certificate and the associated (unencrypted) private key, both in PEM format.
+In practice the use of the host-specific variants of both options is highly recommended.</para>
+</refsect2>
+
+</refsect1>
+
+<refsect1><title>Examples</title>
+<literallayout>
+Acquire::https {
+ Proxy::example.org "DIRECT";
+ Proxy "socks5h://apt:pass@127.0.0.1:9050";
+ Proxy-Auto-Detect "/usr/local/bin/apt-https-proxy-auto-detect";
+ No-Cache "true";
+ Max-Age "3600";
+ No-Store "true";
+ Timeout "10";
+ Dl-Limit "42";
+ Pipeline-Depth "0";
+ AllowRedirect "false";
+ User-Agent "My APT-HTTPS";
+ SendAccept "false";
+
+ CAInfo "/path/to/ca/certs.pem";
+ CRLFile "/path/to/all/crl.pem";
+ Verify-Peer "true";
+ Verify-Host::broken.example.org "false";
+ SSLCert::example.org "/path/to/client/cert.pem";
+ SSLKey::example.org "/path/to/client/key.pem"
+};
+</literallayout>
+</refsect1>
+
+<refsect1>
+<title>See Also</title>
+<para>&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;
+</para>
+</refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-transport-mirror.1.xml b/doc/apt-transport-mirror.1.xml
new file mode 100644
index 0000000..7e95420
--- /dev/null
+++ b/doc/apt-transport-mirror.1.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2017-12-09T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt-transport-mirror</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-transport-mirror</refname>
+ <refpurpose>APT transport for more automated mirror selection</refpurpose>
+ </refnamediv>
+
+<refsect1><title>Description</title>
+<para>This APT transport isn't implementing a protocol to access local or remote repositories
+on its own, but acquires a mirrorlist and redirects all requests to the mirror(s) picked from
+this list, accessing them via other transports like &apt-transport-http;. The basic functionality has
+been available since apt 0.7.24, but was undocumented until apt 1.6 which contained a complete
+rework of the transport and its supported features. Note that a transport is never called directly
+by a user but used by APT tools based on user configuration.</para>
+<para>If the acquisition of a file via a mirror fails, the method ensures that another possible mirror
+from the list is automatically tried until either the file is retrieved or no mirror is
+left in the list, transparently handling server downtimes and similar problems.</para>
+<para>The security implications of the transport depend on the security considerations
+associated with the transport used to acquire the mirrorlist and the transports involved in
+accessing the chosen mirror(s) by the transport.</para>
+</refsect1>
+
+<refsect1><title>Options</title>
+<para>This transport has no configuration options at present. The mirror selection is
+based entirely on the mirrors offered in the mirrorlist and the files APT needs to
+acquire.</para>
+
+<refsect2><title>Mirrorlist format</title>
+<para>A mirrorlist contains one or more lines each specifying a URI for a mirror.
+Empty lines and those starting with a hash character (<literal>#</literal>) are ignored.
+A URI always starts with a URI scheme which defines the transport used for this
+mirror. If for example the URI starts with <literal>http:</literal>, the responsible transport
+is &apt-transport-http; which might have specific requirements for the format of
+the remaining part of the URI.</para>
+<para>Metadata about a mirror can be given on the same line, separated from the URI by a tab.
+Multiple items of metadata can themselves be separated by either tabs or spaces.
+(This is an advanced feature only available with apt >= 1.6. Earlier apt versions will
+fail to parse mirrorlists using this feature.)</para>
+<para>Since apt 1.6 the use of compressed mirrorlists is also supported.
+Note that the filename of the mirrorlist must specify the compression algorithm used;
+there is no auto-detection based on file contents.</para>
+</refsect2>
+
+<refsect2><title>Mirror selection by metadata</title>
+<para>As specified in the format, a mirror can have additional metadata attached to
+prevent a mirror from being selected for acquiring a file not matching this metadata.
+This way the mirrorlist can e.g. contain partial mirrors serving only certain
+architectures and APT will automatically choose a different mirror for files requiring
+an unlisted architecture. Supported are limits for the architecture (<literal>arch</literal>),
+codename of the release (<literal>codename</literal>), component of the repository
+the file is in (<literal>component</literal>), language the file applies to (<literal>lang</literal>),
+suite name of the release (<literal>suite</literal>) and type of the file (<literal>type</literal>).</para>
+</refsect2>
+
+<refsect2><title>Fallback order for mirrors</title>
+<para>If no priority is given for a mirror via the metadata key <literal>priority</literal>,
+the order in which mirrors are contacted is random. If a certain set of mirrors
+should be tried first before any of another set is tried, a priority can be explicitly
+set. The mirrors with the lowest number are tried first. Mirrors which have no explicit
+priority set default to the highest possible number and are therefore tried last. The
+choice between mirrors with the same priority is again random.</para>
+</refsect2>
+
+<refsect2><title>Allowed transports in a mirrorlist</title>
+<para>The availability and choice of transports in a mirrorlist is limited by how the APT
+client is accessing the mirrorlist. If a local transport like <literal>file</literal>
+or <literal>copy</literal> is used, the mirrorlist can also include local sources, while a
+mirrorlist accessed via <literal>http</literal> can not. Additionally, a mirrorlist can
+not contain a mirrorlist or other wrapping transports (like <package>apt-transport-tor</package>).
+See the documentation of these transports on how to use them with the mirror method.</para>
+<para>Note that apt versions before 1.6 do not support any other transport than <literal>http</literal>.</para>
+</refsect2>
+</refsect1>
+
+<refsect1><title>Examples</title>
+<refsect2><title>Basic example</title>
+<para>A basic mirrorlist example supported by all apt versions with a mirror method
+(>= 0.7.24) in which the client will pick any of the three mirrors:</para>
+<literallayout>
+http://ftp.de.debian.org/debian/
+http://ftp.us.debian.org/debian/
+http://deb.debian.org/debian/
+</literallayout>
+<para>Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist.txt</filename>
+on your machine it can be used like this in &sources-list; (since apt 1.6):</para>
+<literallayout>
+deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main
+</literallayout>
+<para>All versions of the mirror method support a mirrorlist accessible via HTTP, so assuming
+it is available at <literal>http://apt.example.org/mirror.lst</literal> the sources.list entry
+from above could instead be written as:</para>
+<literallayout>
+deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main
+</literallayout>
+<para>Note that since apt 1.6 the use of <literal>mirror+http</literal> should
+be preferred over <literal>mirror</literal> for uniformity. The functionality is the same.</para>
+</refsect2>
+<refsect2><title>Example with metadata-enhanced mirror selection</title>
+<para>As explained in the format definition apt versions before 1.6 do not support this and
+will fail parsing the mirrorlist. The example mirrorlist is intentionally complicated to show some
+aspects of the selection. The following setup is assumed: The first mirror is a local mirror
+accessible via the file method, but potentially incomplete. The second mirror has a great
+connection, but is a partial mirror insofar as it only contains files related
+to the architectures <literal>amd64</literal> and <literal>all</literal>. The remaining mirrors
+are average mirrors which should be contacted only if the earlier ones didn't work.
+</para>
+<literallayout>
+file:/srv/local/debian/mirror/ priority:1 type:index
+http://partial.example.org/mirror/ priority:2 arch:amd64 arch:all type:deb
+http://ftp.us.debian.org/debian/ type:deb
+http://ftp.de.debian.org/debian/ type:deb
+https://deb.debian.org/debian/
+</literallayout>
+<para>In this setup with this mirrorlist the first mirror will be used to download all
+index files assuming the mirrorlist itself is accessed via a local transport like
+<literal>file</literal>. If it isn't, if the mirror is otherwise inaccessible or if it does not
+contain the requested file another mirror will be used to acquire the file, chosen
+depending on the type of the file: An index file will be served by the last
+mirror in the list, while a package of architecture <literal>amd64</literal> is served by
+the second and those of e.g. architecture <literal>i386</literal> by one of the last three.</para>
+
+</refsect2>
+</refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent
new file mode 100644
index 0000000..4914105
--- /dev/null
+++ b/doc/apt-verbatim.ent
@@ -0,0 +1,490 @@
+<!-- -*- mode: xml; mode: fold -*- -->
+
+<!-- Some common paths.. -->
+<!ENTITY docdir "/usr/share/doc/apt/">
+<!ENTITY guidesdir "/usr/share/doc/apt-doc/">
+<!ENTITY configureindex "<filename>&docdir;examples/configure-index.gz</filename>">
+<!ENTITY aptconfdir "<filename>/etc/apt.conf</filename>">
+<!ENTITY statedir "/var/lib/apt">
+<!ENTITY cachedir "/var/cache/apt">
+
+<!-- Cross references to other man pages -->
+<!ENTITY apt-conf "<citerefentry>
+ <refentrytitle><filename>apt.conf</filename></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-authconf "<citerefentry>
+ <refentrytitle><filename>apt_auth.conf</filename></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-get "<citerefentry>
+ <refentrytitle><command>apt-get</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-config "<citerefentry>
+ <refentrytitle><command>apt-config</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-cdrom "<citerefentry>
+ <refentrytitle><command>apt-cdrom</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-cache "<citerefentry>
+ <refentrytitle><command>apt-cache</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-mark "<citerefentry>
+ <refentrytitle><command>apt-mark</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt "<citerefentry>
+ <refentrytitle><command>apt</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-preferences "<citerefentry>
+ <refentrytitle><filename>apt_preferences</filename></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-key "<citerefentry>
+ <refentrytitle><command>apt-key</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-secure "<citerefentry>
+ <refentrytitle>apt-secure</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-ftparchive "<citerefentry>
+ <refentrytitle><command>apt-ftparchive</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-transport-http "<citerefentry>
+ <refentrytitle><command>apt-transport-http</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-transport-https "<citerefentry>
+ <refentrytitle><command>apt-transport-https</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-transport-mirror "<citerefentry>
+ <refentrytitle><command>apt-transport-mirror</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY sources-list "<citerefentry>
+ <refentrytitle><filename>sources.list</filename></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY reportbug "<citerefentry>
+ <refentrytitle><command>reportbug</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY dpkg "<citerefentry>
+ <refentrytitle><command>dpkg</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY dpkg-buildpackage "<citerefentry>
+ <refentrytitle><command>dpkg-buildpackage</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY gzip "<citerefentry>
+ <refentrytitle><command>gzip</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY dpkg-scanpackages "<citerefentry>
+ <refentrytitle><command>dpkg-scanpackages</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY dpkg-scansources "<citerefentry>
+ <refentrytitle><command>dpkg-scansources</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY dselect "<citerefentry>
+ <refentrytitle><command>dselect</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY aptitude "<citerefentry>
+ <refentrytitle><command>aptitude</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY synaptic "<citerefentry>
+ <refentrytitle><command>synaptic</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY squid-deb-proxy-client "<citerefentry>
+ <refentrytitle><command>squid-deb-proxy-client</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY auto-apt-proxy "<citerefentry>
+ <refentrytitle><command>auto-apt-proxy</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY debsign "<citerefentry>
+ <refentrytitle><command>debsign</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY debsig-verify "<citerefentry>
+ <refentrytitle><command>debsig-verify</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY gpg "<citerefentry>
+ <refentrytitle><command>gpg</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY wajig "<citerefentry>
+ <refentrytitle><command>wajig</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY wget "<citerefentry>
+ <refentrytitle><command>wget</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-transport-debtorrent "<citerefentry>
+ <refentrytitle><package>apt-transport-debtorrent</package></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY regex "<citerefentry>
+ <refentrytitle><abbrev>regex</abbrev></refentrytitle>
+ <manvolnum>7</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY glob "<citerefentry>
+ <refentrytitle><abbrev>glob</abbrev></refentrytitle>
+ <manvolnum>7</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-file "<citerefentry>
+ <refentrytitle><command>apt-file</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-acquire-additional-files "<literal><filename>/usr/share/doc/apt-doc/acquire-additional-files.md.gz</filename></literal>">
+
+<!-- Boiler plate docinfo section -->
+<!ENTITY apt-email "
+ <address>
+ <email>apt@packages.debian.org</email>
+ </address>
+">
+
+<!ENTITY apt-author.jgunthorpe "
+ <author>
+ <firstname>Jason</firstname>
+ <surname>Gunthorpe</surname>
+ <contrib></contrib>
+ </author>
+">
+
+<!ENTITY apt-author.moconnor "
+ <author>
+ <firstname>Mike</firstname>
+ <surname>O'Connor</surname>
+ <contrib></contrib>
+ </author>
+">
+
+<!ENTITY apt-name.dburrows "
+ <firstname>Daniel</firstname>
+ <surname>Burrows</surname>
+">
+
+<!ENTITY apt-copyright "
+ <copyright>
+ <holder>Jason Gunthorpe</holder>
+ <year>1998-2001</year>
+ </copyright>
+">
+
+<!ENTITY apt-product "
+ <productname>APT</productname>
+ <releaseinfo role='version'>&apt-product-version;</releaseinfo>
+">
+
+<!-- this will be updated by 'prepare-release' -->
+<!ENTITY apt-product-version "1.8.2.3">
+
+<!-- (Code)names for various things used all over the place -->
+<!ENTITY debian-oldstable-codename "stretch">
+<!ENTITY debian-stable-codename "buster">
+<!ENTITY debian-testing-codename "bullseye">
+<!ENTITY debian-stable-version "10">
+<!ENTITY ubuntu-codename "disco">
+
+<!-- good and bad just refers to matching and not matching a pattern…
+ It is not a remark about the specific perl version.
+ There is no way perl could be classified "good" (or "bad") in any version… -->
+<!ENTITY good-perl "5.20">
+<!ENTITY bad-perl "5.24">
+
+<!-- Arguments -->
+<!ENTITY synopsis-arg-option "<arg><option>-o=<replaceable>&synopsis-config-string;</replaceable></option></arg>">
+<!ENTITY synopsis-arg-config "<arg><option>-c=<filename><replaceable>&synopsis-config-file;</replaceable></filename></option></arg>">
+<!ENTITY synopsis-arg-target-release "<arg><option>-t=<replaceable>&synopsis-target-release;</replaceable></option></arg>">
+<!ENTITY synopsis-arg-architecture "<arg><option>-a=<replaceable>&synopsis-architecture;</replaceable></option></arg>">
+<!ENTITY synopsis-arg-pkgver "<arg choice='plain' rep='repeat'><replaceable>&synopsis-pkg;</replaceable><arg><group choice='req'>
+ <arg choice='plain'>=<replaceable>&synopsis-pkg-ver-number;</replaceable></arg>
+ <arg choice='plain'>/<replaceable>&synopsis-target-release;</replaceable></arg>
+</group></arg></arg>">
+<!ENTITY synopsis-arg-pkg "<arg choice='plain' rep='repeat'><replaceable>&synopsis-pkg;</replaceable></arg>">
+<!ENTITY synopsis-param-filename "<filename><replaceable>&synopsis-filename;</replaceable></filename>">
+<!ENTITY synopsis-help "<arg choice='plain'><group choice='req'><arg choice='plain'>-v</arg><arg choice='plain'>--version</arg></group></arg>
+ <arg choice='plain'><group choice='req'><arg choice='plain'>-h</arg><arg choice='plain'>--help</arg></group></arg>">
+<!ENTITY synopsis-command-apt "<refsynopsisdiv><cmdsynopsis>
+ <command>apt</command>
+ <arg><option>-h</option></arg>
+ &synopsis-arg-option;
+ &synopsis-arg-config;
+ &synopsis-arg-target-release;
+ &synopsis-arg-architecture;
+ <group choice='req'>
+ <arg choice='plain'>list</arg>
+ <arg choice='plain'>search</arg>
+ <arg choice='plain'>show</arg>
+ <arg choice='plain'>update</arg>
+ <arg choice='plain'>install &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>remove &synopsis-arg-pkg;</arg>
+ <arg choice='plain'>upgrade</arg>
+ <arg choice='plain'>full-upgrade</arg>
+ <arg choice='plain'>edit-sources</arg>
+ &synopsis-help;
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-command-apt-get "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-get</command>
+ <arg><option>-asqdyfmubV</option></arg>
+ &synopsis-arg-option;
+ &synopsis-arg-config;
+ &synopsis-arg-target-release;
+ &synopsis-arg-architecture;
+ <group choice='req'>
+ <arg choice='plain'>update</arg>
+ <arg choice='plain'>upgrade</arg>
+ <arg choice='plain'>dselect-upgrade</arg>
+ <arg choice='plain'>dist-upgrade</arg>
+ <arg choice='plain'>install &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>remove &synopsis-arg-pkg;</arg>
+ <arg choice='plain'>purge &synopsis-arg-pkg;</arg>
+ <arg choice='plain'>source &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>build-dep &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>download &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>check</arg>
+ <arg choice='plain'>clean</arg>
+ <arg choice='plain'>autoclean</arg>
+ <arg choice='plain'>autoremove</arg>
+ &synopsis-help;
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-command-apt-cache "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-cache</command>
+ <arg><option>-agipns</option></arg>
+ &synopsis-arg-option;
+ &synopsis-arg-config;
+ <group choice='req'>
+ <arg choice='plain'>gencaches</arg>
+ <arg choice='plain'>showpkg &synopsis-arg-pkg;</arg>
+ <arg choice='plain'>showsrc &synopsis-arg-pkg;</arg>
+ <arg choice='plain'>stats</arg>
+ <arg choice='plain'>dump</arg>
+ <arg choice='plain'>dumpavail</arg>
+ <arg choice='plain'>unmet</arg>
+ <arg choice='plain'>search <arg choice='plain' rep='repeat'><replaceable>&synopsis-regex;</replaceable></arg></arg>
+ <arg choice='plain'>show &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>depends &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>rdepends &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>pkgnames <arg><replaceable>&synopsis-prefix;</replaceable></arg></arg>
+ <arg choice='plain'>dotty &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>xvcg &synopsis-arg-pkgver;</arg>
+ <arg choice='plain'>policy <arg rep='repeat'><replaceable>&synopsis-pkg;</replaceable></arg></arg>
+ <arg choice='plain'>madison &synopsis-arg-pkg;</arg>
+ &synopsis-help;
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-command-apt-cdrom "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-cdrom</command>
+ <arg><option>-rmfan</option></arg>
+ <arg><option>-d=<replaceable>&synopsis-cdrom-mount;</replaceable></option></arg>
+ &synopsis-arg-option;
+ &synopsis-arg-config;
+ <group choice='req'>
+ <arg choice='plain'>add</arg>
+ <arg choice='plain'>ident</arg>
+ &synopsis-help;
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!--<arg><option>- -format '<replaceable>&#37;f \"&#37;v\";&#37;n</replaceable>'</option></arg>-->
+<!ENTITY synopsis-command-apt-config "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-config</command>
+ <arg><option>--empty</option></arg>
+ <arg><option>--format '<replaceable>&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n</replaceable>'</option></arg>
+ &synopsis-arg-option;
+ &synopsis-arg-config;
+ <group choice='req'>
+ <arg choice='plain'>shell</arg>
+ <arg choice='plain'>dump</arg>
+ &synopsis-help;
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-command-apt-extracttemplates "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-extracttemplates</command>
+ <arg><option>-t=<replaceable>&synopsis-tmp-directory;</replaceable></option></arg>
+ <arg choice='plain' rep='repeat'>&synopsis-param-filename;</arg>
+ &synopsis-help;
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-arg-ftparchive "<arg choice='plain' rep='repeat'><replaceable>&synopsis-path;</replaceable></arg><arg><filename><replaceable>&synopsis-override;</replaceable></filename><arg><replaceable>&synopsis-pathprefix;</replaceable></arg></arg>">
+<!ENTITY synopsis-command-apt-ftparchive "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-ftparchive</command>
+ <arg><option>-dsq</option></arg>
+ <arg><option>--md5</option></arg>
+ <arg><option>--delink</option></arg>
+ <arg><option>--readonly</option></arg>
+ <arg><option>--contents</option></arg>
+ <arg><option>--arch <replaceable>architecture</replaceable></option></arg>
+ &synopsis-arg-option;
+ &synopsis-arg-config;
+ <group choice='req'>
+ <arg choice='plain'>packages &synopsis-arg-ftparchive;</arg>
+ <arg choice='plain'>sources &synopsis-arg-ftparchive;</arg>
+ <arg choice='plain'>contents <arg choice='plain'><replaceable>&synopsis-path;</replaceable></arg></arg>
+ <arg choice='plain'>release <arg choice='plain'><replaceable>&synopsis-path;</replaceable></arg></arg>
+ <arg choice='plain'>generate <arg choice='plain'><replaceable>&synopsis-config-file;</replaceable></arg> <arg choice='plain' rep='repeat'><replaceable>&synopsis-section;</replaceable></arg></arg>
+ <arg choice='plain'>clean <arg choice='plain'><replaceable>&synopsis-config-file;</replaceable></arg></arg>
+ &synopsis-help;
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-param-keyid "<replaceable>&synopsis-keyid;</replaceable>">
+<!ENTITY synopsis-command-apt-key "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-key</command>
+ <arg><option>--keyring &synopsis-param-filename;</option></arg>
+ <group choice='req'>
+ <arg choice='plain'>add &synopsis-param-filename;</arg>
+ <arg choice='plain'>del &synopsis-param-keyid;</arg>
+ <arg choice='plain'>export &synopsis-param-keyid;</arg>
+ <arg choice='plain'>exportall</arg>
+ <arg choice='plain'>list</arg>
+ <arg choice='plain'>finger</arg>
+ <arg choice='plain'>adv</arg>
+ <arg choice='plain'>update</arg>
+ <arg choice='plain'>net-update</arg>
+ &synopsis-help;
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-command-apt-mark "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-mark</command>
+ <group choice='plain'>
+ <group choice='req'>
+ <arg choice='plain'><option>-f=&synopsis-param-filename;</option></arg>
+ <arg choice='plain'>
+ <group choice='req'>
+ <arg choice='plain'>auto</arg>
+ <arg choice='plain'>manual</arg>
+ </group>
+ &synopsis-arg-pkg;
+ </arg>
+ <arg choice='plain'>
+ <group choice='req'>
+ <arg choice='plain'>showauto</arg>
+ <arg choice='plain'>showmanual</arg>
+ </group>
+ <arg choice='opt' rep='repeat'><replaceable>&synopsis-pkg;</replaceable></arg>
+ </arg>
+ </group>
+ &synopsis-help;
+ </group>
+</cmdsynopsis><cmdsynopsis><command>apt-mark</command>
+ <group choice='plain'>
+ <arg choice='plain'>
+ <group choice='req'>
+ <arg choice='plain'>hold</arg>
+ <arg choice='plain'>unhold</arg>
+ <arg choice='plain'>install</arg>
+ <arg choice='plain'>remove</arg>
+ <arg choice='plain'>purge</arg>
+ </group>
+ &synopsis-arg-pkg;
+ </arg>
+ <arg choice='plain'>
+ <group choice='req'>
+ <arg choice='plain'>showhold</arg>
+ <arg choice='plain'>showinstall</arg>
+ <arg choice='plain'>showremove</arg>
+ <arg choice='plain'>showpurge</arg>
+ </group>
+ <arg choice='opt' rep='repeat'><replaceable>&synopsis-pkg;</replaceable></arg>
+ </arg>
+ </group>
+</cmdsynopsis></refsynopsisdiv>">
+<!ENTITY synopsis-command-apt-sortpkgs "<refsynopsisdiv><cmdsynopsis>
+ <command>apt-sortpkgs</command>
+ <arg><option>-s</option></arg>
+ &synopsis-arg-option;
+ &synopsis-arg-config;
+ <arg choice='plain' rep='repeat'>&synopsis-param-filename;</arg>
+ &synopsis-help;
+</cmdsynopsis></refsynopsisdiv>">
diff --git a/doc/apt.8.xml b/doc/apt.8.xml
new file mode 100644
index 0000000..f81ae18
--- /dev/null
+++ b/doc/apt.8.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2019-01-27T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt</refname>
+ <refpurpose>command-line interface</refpurpose>
+ </refnamediv>
+
+ &synopsis-command-apt;
+
+ <refsect1><title>Description</title>
+ <para><command>apt</command> provides a high-level commandline interface for
+ the package management system. It is intended as an end user interface and
+ enables some options better suited for interactive usage by default
+ compared to more specialized APT tools like &apt-get; and &apt-cache;.
+ </para><para>
+ Much like <command>apt</command> itself, its manpage is intended as an end
+ user interface and as such only mentions the most used commands and options
+ partly to not duplicate information in multiple places and partly to avoid
+ overwhelming readers with a cornucopia of options and details.
+ </para>
+
+ <variablelist>
+ <varlistentry><term><option>update</option> (&apt-get;)</term>
+ <listitem><para><option>update</option> is used to download package
+ information from all configured sources. Other commands operate on
+ this data to e.g. perform package upgrades or search in and display
+ details about all packages available for installation.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>upgrade</option> (&apt-get;)</term>
+ <listitem><para><option>upgrade</option> is used to install available
+ upgrades of all packages currently installed on the system from the
+ sources configured via &sources-list;. New packages will be
+ installed if required to satisfy dependencies, but existing
+ packages will never be removed. If an upgrade for a package requires
+ the removal of an installed package the upgrade for this package
+ isn't performed.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>full-upgrade</option> (&apt-get;)</term>
+ <listitem><para><literal>full-upgrade</literal> performs the function of
+ upgrade but will remove currently installed packages if this is
+ needed to upgrade the system as a whole.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>install</option>, <option>reinstall</option>, <option>remove</option>, <option>purge</option> (&apt-get;)</term>
+ <listitem><para>Performs the requested action on one or more packages
+ specified via &regex;, &glob; or exact match. The requested action
+ can be overridden for specific packages by append a plus (+) to the
+ package name to install this package or a minus (-) to remove it.
+ </para><para>
+ A specific version of a package can be selected for installation by
+ following the package name with an equals (=) and the version of the
+ package to select. Alternatively the version from a specific release can be
+ selected by following the package name with a forward slash (/) and
+ codename (&debian-stable-codename;, &debian-testing-codename;, sid …) or suite name (stable,
+ testing, unstable). This will also select versions from this release
+ for dependencies of this package if needed to satisfy the request.
+ </para><para>
+ Removing a package removes all packaged data, but leaves usually
+ small (modified) user configuration files behind, in case the
+ remove was an accident. Just issuing an installation request for the
+ accidentally removed package will restore its function as before in
+ that case. On the other hand you can get rid of these leftovers
+ by calling <command>purge</command> even on already removed
+ packages. Note that this does not affect any data or configuration
+ stored in your home directory.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>autoremove</option> (&apt-get;)</term>
+ <listitem><para>
+ <literal>autoremove</literal> is used to remove packages that were
+ automatically installed to satisfy dependencies for other packages
+ and are now no longer needed as dependencies changed or the package(s)
+ needing them were removed in the meantime.
+ </para><para>
+ You should check that the list does not include applications you have
+ grown to like even though they were once installed just as a
+ dependency of another package. You can mark such a package as manually
+ installed by using &apt-mark;. Packages which you have installed explicitly
+ via <command>install</command> are also never proposed for automatic removal.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>search</option> (&apt-cache;)</term>
+ <listitem><para><option>search</option> can be used to search for the given
+ &regex; term(s) in the list of available packages and display
+ matches. This can e.g. be useful if you are looking for packages
+ having a specific feature. If you are looking for a package
+ including a specific file try &apt-file;.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>show</option> (&apt-cache;)</term>
+ <listitem><para>Show information about the given package(s) including
+ its dependencies, installation and download size, sources the
+ package is available from, the description of the packages content
+ and much more. It can e.g. be helpful to look at this information
+ before allowing &apt; to remove a package or while searching for
+ new packages to install.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>list</option> (work-in-progress)</term>
+ <listitem><para><option>list</option> is somewhat similar to <command>dpkg-query --list</command>
+ in that it can display a list of packages satisfying certain
+ criteria. It supports &glob; patterns for matching package names as
+ well as options to list installed (<option>--installed</option>),
+ upgradeable (<option>--upgradeable</option>) or all available
+ (<option>--all-versions</option>) versions.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>edit-sources</option> (work-in-progress)</term>
+ <listitem><para><literal>edit-sources</literal> lets you edit
+ your &sources-list; files in your preferred texteditor while also
+ providing basic sanity checks.
+ </para></listitem>
+ </varlistentry>
+
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Script Usage and Differences from Other APT Tools</title>
+ <para>
+ The &apt; commandline is designed as an end-user tool and it may
+ change behavior between versions. While it tries not to break
+ backward compatibility this is not guaranteed either if a change
+ seems beneficial for interactive use.
+ </para><para>
+ All features of &apt; are available in dedicated APT tools like &apt-get;
+ and &apt-cache; as well. &apt; just changes the default value of some
+ options (see &apt-conf; and specifically the Binary scope). So you should
+ prefer using these commands (potentially with some additional options
+ enabled) in your scripts as they keep backward compatibility as much as possible.
+ </para>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-get;, &apt-cache;, &sources-list;,
+ &apt-conf;, &apt-config;,
+ The APT User's guide in &guidesdir;, &apt-preferences;, the APT Howto.</para>
+ </refsect1>
+
+ <refsect1><title>Diagnostics</title>
+ <para><command>apt</command> returns zero on normal operation, decimal 100 on error.</para>
+ </refsect1>
+ &manbugs;
+</refentry>
diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml
new file mode 100644
index 0000000..5ce693c
--- /dev/null
+++ b/doc/apt.conf.5.xml
@@ -0,0 +1,1272 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ <author>
+ &apt-name.dburrows;
+ <contrib>Initial documentation of Debug::*.</contrib>
+ <email>dburrows@debian.org</email>
+ </author>
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2018-12-10T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt.conf</refname>
+ <refpurpose>Configuration file for APT</refpurpose>
+ </refnamediv>
+
+ <refsect1><title>Description</title>
+ <para><filename>/etc/apt/apt.conf</filename> is the main configuration
+ file shared by all the tools in the APT suite of tools, though it is by
+ no means the only place options can be set. The suite also shares a common
+ command line parser to provide a uniform environment.</para>
+
+ <orderedlist>
+ <para>When an APT tool starts up it will read the configuration files
+ in the following order:</para>
+ <listitem><para>the file specified by the <envar>APT_CONFIG</envar>
+ environment variable (if any)</para></listitem>
+ <listitem><para>all files in <literal>Dir::Etc::Parts</literal> in
+ alphanumeric ascending order which have either no or "<literal>conf</literal>"
+ as filename extension and which only contain alphanumeric,
+ hyphen (-), underscore (_) and period (.) characters.
+ Otherwise APT will print a notice that it has ignored a file, unless that
+ file matches a pattern in the <literal>Dir::Ignore-Files-Silently</literal>
+ configuration list - in which case it will be silently ignored.</para></listitem>
+ <listitem><para>the main configuration file specified by
+ <literal>Dir::Etc::main</literal></para></listitem>
+ <listitem><para>all options set in the binary specific configuration
+ subtree are moved into the root of the tree.</para></listitem>
+ <listitem><para>the command line options are applied to override the
+ configuration directives or to load even more configuration files.</para></listitem>
+ </orderedlist>
+ </refsect1>
+ <refsect1><title>Syntax</title>
+ <para>The configuration file is organized in a tree with options organized into
+ functional groups. Option specification is given with a double colon
+ notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option within
+ the APT tool group, for the Get tool. Options do not inherit from their
+ parent groups.</para>
+
+ <para>Syntactically the configuration language is modeled after what the ISC tools
+ such as bind and dhcp use. Lines starting with
+ <literal>//</literal> are treated as comments (ignored), as well as all text
+ between <literal>/*</literal> and <literal>*/</literal>, just like C/C++ comments.
+ Each line is of the form
+ <literal>APT::Get::Assume-Yes "true";</literal>.
+ The quotation marks and trailing semicolon are required.
+ The value must be on one line, and there is no kind of string concatenation.
+ Values must not include backslashes or extra quotation marks.
+ Option names are made up of alphanumeric characters and the characters "/-:._+".
+ A new scope can be opened with curly braces, like this:</para>
+
+<informalexample><programlisting>
+APT {
+ Get {
+ Assume-Yes "true";
+ Fix-Broken "true";
+ };
+};
+</programlisting></informalexample>
+
+ <para>with newlines placed to make it more readable. Lists can be created by
+ opening a scope and including a single string enclosed in quotes followed by a
+ semicolon. Multiple entries can be included, separated by a semicolon.</para>
+
+<informalexample><programlisting>
+DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
+</programlisting></informalexample>
+
+ <para>In general the sample configuration file &configureindex;
+ is a good guide for how it should look.</para>
+
+ <para>Case is not significant in names of configuration items, so in the
+ previous example you could use <literal>dpkg::pre-install-pkgs</literal>.</para>
+
+ <para>Names for the configuration items are optional if a list is defined as can be seen in
+ the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If you don't specify a name a
+ new entry will simply add a new option to the list. If you specify a name you can override
+ the option in the same way as any other option by reassigning a new value to the option.</para>
+
+ <para>Two special commands are defined: <literal>#include</literal> (which is
+ deprecated and not supported by alternative implementations) and
+ <literal>#clear</literal>. <literal>#include</literal> will include the
+ given file, unless the filename ends in a slash, in which case the whole
+ directory is included.
+ <literal>#clear</literal> is used to erase a part of the configuration tree. The
+ specified element and all its descendants are erased.
+ (Note that these lines also need to end with a semicolon.)</para>
+
+ <para>
+ The <literal>#clear</literal> command is the only way to delete a list or
+ a complete scope. Reopening a scope (or using the syntax described below
+ with an appended <literal>::</literal>) will <emphasis>not</emphasis>
+ override previously written entries. Options can only be overridden by
+ addressing a new value to them - lists and scopes can't be overridden,
+ only cleared.
+ </para>
+
+ <para>All of the APT tools take an -o option which allows an arbitrary configuration
+ directive to be specified on the command line. The syntax is a full option
+ name (<literal>APT::Get::Assume-Yes</literal> for instance) followed by an equals
+ sign then the new value of the option. To append a new element to a list, add a
+ trailing <literal>::</literal> to the name of the list.
+ (As you might suspect, the scope syntax can't be used on the command line.)</para>
+
+ <para>
+ Note that appending items to a list using <literal>::</literal> only works
+ for one item per line, and that you should not use it in combination with
+ the scope syntax (which adds <literal>::</literal> implicitly). Using both
+ syntaxes together will trigger a bug which some users unfortunately depend
+ on: an option with the unusual name "<literal>::</literal>" which acts
+ like every other option with a name. This introduces many problems; for
+ one thing, users who write multiple lines in this
+ <emphasis>wrong</emphasis> syntax in the hope of appending to a list will
+ achieve the opposite, as only the last assignment for this option
+ "<literal>::</literal>" will be used. Future versions of APT will raise
+ errors and stop working if they encounter this misuse, so please correct
+ such statements now while APT doesn't explicitly complain about them.
+ </para>
+ </refsect1>
+
+ <refsect1><title>The APT Group</title>
+ <para>This group of options controls general APT behavior as well as holding the
+ options for all of the tools.</para>
+
+ <variablelist>
+ <varlistentry><term><option>Architecture</option></term>
+ <listitem><para>System Architecture; sets the architecture to use when fetching files and
+ parsing package lists. The internal default is the architecture apt was
+ compiled for.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Architectures</option></term>
+ <listitem><para>
+ All Architectures the system supports. For instance, CPUs implementing
+ the <literal>amd64</literal> (also called <literal>x86-64</literal>)
+ instruction set are also able to execute binaries compiled for the
+ <literal>i386</literal> (<literal>x86</literal>) instruction set. This
+ list is used when fetching files and parsing package lists. The
+ initial default is always the system's native architecture
+ (<literal>APT::Architecture</literal>), and foreign architectures are
+ added to the default list when they are registered via
+ <command>dpkg --add-architecture</command>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Compressor</option></term>
+ <listitem><para>
+ This scope defines which compression formats are supported, how compression
+ and decompression can be performed if support for this format isn't built
+ into apt directly and a cost-value indicating how costly it is to compress
+ something in this format. As an example the following configuration stanza
+ would allow apt to download and uncompress as well as create and store
+ files with the low-cost <literal>.reversed</literal> file extension which
+ it will pass to the command <command>rev</command> without additional
+ commandline parameters for compression and uncompression:</para>
+<informalexample><programlisting>
+APT::Compressor::rev {
+ Name "rev";
+ Extension ".reversed";
+ Binary "rev";
+ CompressArg {};
+ UncompressArg {};
+ Cost "10";
+};
+</programlisting></informalexample>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Build-Profiles</option></term>
+ <listitem><para>
+ List of all build profiles enabled for build-dependency resolution,
+ without the "<literal>profile.</literal>" namespace prefix.
+ By default this list is empty. The <envar>DEB_BUILD_PROFILES</envar>
+ as used by &dpkg-buildpackage; overrides the list notation.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Default-Release</option></term>
+ <listitem><para>Default release to install packages from if more than one
+ version is available. Contains release name, codename or release version. Examples: 'stable', 'testing',
+ 'unstable', '&debian-stable-codename;', '&debian-testing-codename;', '4.0', '5.0*'. See also &apt-preferences;.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Ignore-Hold</option></term>
+ <listitem><para>Ignore held packages; this global option causes the problem resolver to
+ ignore held packages in its decision making.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Clean-Installed</option></term>
+ <listitem><para>Defaults to on. When turned on the autoclean feature will remove any packages
+ which can no longer be downloaded from the cache. If turned off then
+ packages that are locally installed are also excluded from cleaning - but
+ note that APT provides no direct means to reinstall them.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Immediate-Configure</option></term>
+ <listitem><para>
+ Defaults to on, which will cause APT to install essential and important
+ packages as soon as possible in an install/upgrade operation, in order
+ to limit the effect of a failing &dpkg; call. If this option is
+ disabled, APT treats an important package in the same way as an extra
+ package: between the unpacking of the package A and its configuration
+ there can be many other unpack or configuration calls for other
+ unrelated packages B, C etc. If these cause the &dpkg; call to fail
+ (e.g. because package B's maintainer scripts generate an error), this
+ results in a system state in which package A is unpacked but
+ unconfigured - so any package depending on A is now no longer
+ guaranteed to work, as its dependency on A is no longer satisfied.
+ </para><para>
+ The immediate configuration marker is also applied in the potentially
+ problematic case of circular dependencies, since a dependency with the
+ immediate flag is equivalent to a Pre-Dependency. In theory this allows
+ APT to recognise a situation in which it is unable to perform immediate
+ configuration, abort, and suggest to the user that the option should be
+ temporarily deactivated in order to allow the operation to proceed.
+ Note the use of the word "theory" here; in the real world this problem
+ has rarely been encountered, in non-stable distribution versions, and
+ was caused by wrong dependencies of the package in question or by a
+ system in an already broken state; so you should not blindly disable
+ this option, as the scenario mentioned above is not the only problem it
+ can help to prevent in the first place.
+ </para><para>
+ Before a big operation like <literal>dist-upgrade</literal> is run
+ with this option disabled you should try to explicitly
+ <literal>install</literal> the package APT is unable to configure
+ immediately; but please make sure you also report your problem to your
+ distribution and to the APT team with the buglink below, so they can
+ work on improving or correcting the upgrade process.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Force-LoopBreak</option></term>
+ <listitem><para>
+ Never enable this option unless you <emphasis>really</emphasis> know
+ what you are doing. It permits APT to temporarily remove an essential
+ package to break a Conflicts/Conflicts or Conflicts/Pre-Depends loop
+ between two essential packages. <emphasis>Such a loop should never exist
+ and is a grave bug</emphasis>. This option will work if the essential
+ packages are not <command>tar</command>, <command>gzip</command>,
+ <command>libc</command>, <command>dpkg</command>, <command>dash</command>
+ or anything that those packages depend on.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Cache-Start</option></term><term><option>Cache-Grow</option></term><term><option>Cache-Limit</option></term>
+ <listitem><para>APT uses since version 0.7.26 a resizable memory mapped cache file to store the available
+ information. <literal>Cache-Start</literal> acts as a hint of the size the cache will grow to,
+ and is therefore the amount of memory APT will request at startup. The default value is
+ 20971520 bytes (~20 MB). Note that this amount of space needs to be available for APT;
+ otherwise it will likely fail ungracefully, so for memory restricted devices this value should
+ be lowered while on systems with a lot of configured sources it should be increased.
+ <literal>Cache-Grow</literal> defines in bytes with the default of 1048576 (~1 MB) how much
+ the cache size will be increased in the event the space defined by <literal>Cache-Start</literal>
+ is not enough. This value will be applied again and again until either the cache is big
+ enough to store all information or the size of the cache reaches the <literal>Cache-Limit</literal>.
+ The default of <literal>Cache-Limit</literal> is 0 which stands for no limit.
+ If <literal>Cache-Grow</literal> is set to 0 the automatic growth of the cache is disabled.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Build-Essential</option></term>
+ <listitem><para>Defines which packages are considered essential build dependencies.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Get</option></term>
+ <listitem><para>The Get subsection controls the &apt-get; tool; please see its
+ documentation for more information about the options here.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Cache</option></term>
+ <listitem><para>The Cache subsection controls the &apt-cache; tool; please see its
+ documentation for more information about the options here.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>CDROM</option></term>
+ <listitem><para>The CDROM subsection controls the &apt-cdrom; tool; please see its
+ documentation for more information about the options here.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>The Acquire Group</title>
+ <para>The <literal>Acquire</literal> group of options controls the
+ download of packages as well as the various "acquire methods" responsible
+ for the download itself (see also &sources-list;).</para>
+
+ <variablelist>
+ <varlistentry><term><option>Check-Date</option></term>
+ <listitem><para>
+ Security related option defaulting to true, enabling time-related
+ checks. Disabling it means that the machine's time cannot be
+ trusted, and APT will hence disable all time-related checks,
+ such as <option>Check-Valid-Until</option> and verifying that
+ the Date field of a release file is not in the future.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Max-FutureTime</option></term>
+ <listitem><para>Maximum time (in seconds) before its creation (as indicated
+ by the <literal>Date</literal> header) that the <filename>Release</filename>
+ file should be considered valid.
+
+ The default value is <literal>10</literal>.
+ Archive specific settings can be made by appending the label of the archive
+ to the option name. Preferably, the same can be achieved for specific
+ &sources-list; entries by using the <option>Date-Max-Future</option> option there.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry><term><option>Check-Valid-Until</option></term>
+ <listitem><para>
+ Security related option defaulting to true, as giving a Release file's
+ validation an expiration date prevents replay attacks over a long
+ timescale, and can also for example help users to identify mirrors
+ that are no longer updated - but the feature depends on the
+ correctness of the clock on the user system. Archive maintainers are
+ encouraged to create Release files with the
+ <literal>Valid-Until</literal> header, but if they don't or a
+ stricter value is desired the <literal>Max-ValidTime</literal>
+ option below can be used.
+ The <option>Check-Valid-Until</option> option of &sources-list; entries should be
+ preferred to disable the check selectively instead of using this global override.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Max-ValidTime</option></term>
+ <listitem><para>Maximum time (in seconds) after its creation (as indicated
+ by the <literal>Date</literal> header) that the <filename>Release</filename>
+ file should be considered valid.
+ If the Release file itself includes a <literal>Valid-Until</literal> header
+ the earlier date of the two is used as the expiration date.
+ The default value is <literal>0</literal> which stands for "valid forever".
+ Archive specific settings can be made by appending the label of the archive
+ to the option name. Preferably, the same can be achieved for specific
+ &sources-list; entries by using the <option>Valid-Until-Max</option> option there.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Min-ValidTime</option></term>
+ <listitem><para>Minimum time (in seconds) after its creation (as indicated
+ by the <literal>Date</literal> header) that the <filename>Release</filename>
+ file should be considered valid.
+ Use this if you need to use a seldom updated (local) mirror of a more
+ frequently updated archive with a <literal>Valid-Until</literal> header
+ instead of completely disabling the expiration date checking.
+ Archive specific settings can and should be used by appending the label of
+ the archive to the option name. Preferably, the same can be achieved for specific
+ &sources-list; entries by using the <option>Valid-Until-Min</option> option there.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>AllowTLS</option></term>
+ <listitem><para>
+ Allow use of the internal TLS support in the http method. If set to false,
+ this completely disables support for TLS in apt's own methods (excluding
+ the curl-based https method). No TLS-related functions will be called
+ anymore.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>PDiffs</option></term>
+ <listitem><para>Try to download deltas called <literal>PDiffs</literal> for
+ indexes (like <filename>Packages</filename> files) instead of
+ downloading whole ones. True by default. Preferably, this can be set
+ for specific &sources-list; entries or index files by using the
+ <option>PDiffs</option> option there.</para>
+ <para>Two sub-options to limit the use of PDiffs are also available:
+ <literal>FileLimit</literal> can be used to specify a maximum number of
+ PDiff files should be downloaded to update a file. <literal>SizeLimit</literal>
+ on the other hand is the maximum percentage of the size of all patches
+ compared to the size of the targeted file. If one of these limits is
+ exceeded the complete file is downloaded instead of the patches.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>By-Hash</option></term>
+ <listitem><para>Try to download indexes via an URI constructed from a
+ hashsum of the expected file rather than downloaded via a well-known
+ stable filename. True by default, but automatically disabled if the
+ source indicates no support for it. Usage can be forced with the special
+ value "force". Preferably, this can be set for specific &sources-list; entries
+ or index files by using the <option>By-Hash</option> option there.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Queue-Mode</option></term>
+ <listitem><para>Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</literal> or
+ <literal>access</literal> which determines how APT parallelizes outgoing
+ connections. <literal>host</literal> means that one connection per target host
+ will be opened, <literal>access</literal> means that one connection per URI type
+ will be opened.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Retries</option></term>
+ <listitem><para>Number of retries to perform. If this is non-zero APT will retry failed
+ files the given number of times.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Source-Symlinks</option></term>
+ <listitem><para>Use symlinks for source archives. If set to true then source archives will
+ be symlinked when possible instead of copying. True is the default.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>http</option> <option>https</option></term>
+ <listitem><para>The options in these scopes configure APTs acquire transports for the protocols
+ HTTP and HTTPS and are documented in the &apt-transport-http; and &apt-transport-https;
+ manpages respectively.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>ftp</option></term>
+ <listitem><para>
+ <literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs.
+ It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</literal>.
+ Per host proxies can also be specified by using the form
+ <literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword <literal>DIRECT</literal>
+ meaning to use no proxies. If no one of the above settings is specified,
+ <envar>ftp_proxy</envar> environment variable
+ will be used. To use an FTP
+ proxy you will have to set the <literal>ftp::ProxyLogin</literal> script in the
+ configuration file. This entry specifies the commands to send to tell
+ the proxy server what to connect to. Please see
+ &configureindex; for an example of
+ how to do this. The substitution variables representing the corresponding
+ URI component are <literal>$(PROXY_USER)</literal>,
+ <literal>$(PROXY_PASS)</literal>, <literal>$(SITE_USER)</literal>,
+ <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</literal> and
+ <literal>$(SITE_PORT)</literal>.</para>
+
+ <para>The option <literal>timeout</literal> sets the timeout timer used by the method;
+ this value applies to the connection as well as the data timeout.</para>
+
+ <para>Several settings are provided to control passive mode. Generally it is
+ safe to leave passive mode on; it works in nearly every environment.
+ However, some situations require that passive mode be disabled and port
+ mode FTP used instead. This can be done globally or for connections that
+ go through a proxy or for a specific host (see the sample config file
+ for examples).</para>
+
+ <para>It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</envar>
+ environment variable to an HTTP URL - see the discussion of the http method
+ above for syntax. You cannot set this in the configuration file and it is
+ not recommended to use FTP over HTTP due to its low efficiency.</para>
+
+ <para>The setting <literal>ForceExtended</literal> controls the use of RFC2428
+ <literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is false, which means
+ these commands are only used if the control connection is IPv6. Setting this
+ to true forces their use even on IPv4 connections. Note that most FTP servers
+ do not support RFC2428.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>cdrom</option></term>
+ <listitem><para>
+ For URIs using the <literal>cdrom</literal> method, the only configurable
+ option is the mount point, <literal>cdrom::Mount</literal>, which must be
+ the mount point for the CD-ROM (or DVD, or whatever) drive as specified in
+ <filename>/etc/fstab</filename>. It is possible to provide alternate mount
+ and unmount commands if your mount point cannot be listed in the fstab.
+ The syntax is to put <literallayout>/cdrom/::Mount "foo";</literallayout> within
+ the <literal>cdrom</literal> block. It is important to have the trailing slash.
+ Unmount commands can be specified using UMount.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>gpgv</option></term>
+ <listitem><para>
+ For GPGV URIs the only configurable option is <literal>gpgv::Options</literal>,
+ which passes additional parameters to gpgv.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>CompressionTypes</option></term>
+ <listitem><para>List of compression types which are understood by the acquire methods.
+ Files like <filename>Packages</filename> can be available in various compression formats.
+ By default the acquire methods can decompress and recompress many common formats like <command>xz</command> and
+ <command>gzip</command>; with this scope the supported formats can be queried, modified
+ as well as support for more formats added (see also <option>APT::Compressor</option>). The syntax for this is:
+ <synopsis>Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> "<replaceable>Methodname</replaceable>";</synopsis>
+ </para><para>Also, the <literal>Order</literal> subgroup can be used to define in which order
+ the acquire system will try to download the compressed files. The acquire system will try the first
+ and proceed with the next compression type in this list on error, so to prefer one over the other type
+ simply add the preferred type first - types not already added will be implicitly appended
+ to the end of the list, so e.g. <synopsis>Acquire::CompressionTypes::Order:: "gz";</synopsis> can
+ be used to prefer <command>gzip</command> compressed files over all other compression formats.
+ If <command>xz</command> should be preferred over <command>gzip</command> and <command>bzip2</command> the
+ configure setting should look like this: <synopsis>Acquire::CompressionTypes::Order { "xz"; "gz"; };</synopsis>
+ It is not needed to add <literal>bz2</literal> to the list explicitly as it will be added automatically.</para>
+ <para>Note that the
+ <literal>Dir::Bin::<replaceable>Methodname</replaceable></literal>
+ will be checked at run time. If this option has been set and support for
+ this format isn't directly built into apt, the method will only be used if
+ this file exists; e.g. for the <literal>bzip2</literal> method (the
+ inbuilt) setting is: <literallayout>Dir::Bin::bzip2 "/bin/bzip2";</literallayout>
+ Note also that list entries specified on the command line will be added at the end of the list
+ specified in the configuration files, but before the default entries. To prefer a type in this case
+ over the ones specified in the configuration files you can set the option direct - not in list style.
+ This will not override the defined list; it will only prefix the list with this type.</para>
+ <para>The special type <literal>uncompressed</literal> can be used to give uncompressed files a
+ preference, but note that most archives don't provide uncompressed files so this is mostly only
+ usable for local mirrors.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>GzipIndexes</option></term>
+ <listitem><para>
+ When downloading <literal>gzip</literal> compressed indexes (Packages, Sources, or
+ Translations), keep them gzip compressed locally instead of unpacking
+ them. This saves quite a lot of disk space at the expense of more CPU
+ requirements when building the local package caches. False by default.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Languages</option></term>
+ <listitem><para>The Languages subsection controls which <filename>Translation</filename> files are downloaded
+ and in which order APT tries to display the description-translations. APT will try to display the first
+ available description in the language which is listed first. Languages can be defined with their
+ short or long language codes. Note that not all archives provide <filename>Translation</filename>
+ files for every language - the long language codes are especially rare.</para>
+ <para>The default list includes "environment" and "en". "<literal>environment</literal>" has a special meaning here:
+ it will be replaced at runtime with the language codes extracted from the <literal>LC_MESSAGES</literal> environment variable.
+ It will also ensure that these codes are not included twice in the list. If <literal>LC_MESSAGES</literal>
+ is set to "C" only the <filename>Translation-en</filename> file (if available) will be used.
+ To force APT to use no Translation file use the setting <literal>Acquire::Languages=none</literal>. "<literal>none</literal>"
+ is another special meaning code which will stop the search for a suitable <filename>Translation</filename> file.
+ This tells APT to download these translations too, without actually
+ using them unless the environment specifies the languages. So the
+ following example configuration will result in the order "en, de" in an
+ English locale or "de, en" in a German one. Note that "fr" is
+ downloaded, but not used unless APT is used in a French locale (where
+ the order would be "fr, de, en").
+ <programlisting>Acquire::Languages { "environment"; "de"; "en"; "none"; "fr"; };</programlisting></para>
+ <para>Note: To prevent problems resulting from APT being executed in different environments
+ (e.g. by different users or by other programs) all Translation files which are found in
+ <filename>/var/lib/apt/lists/</filename> will be added to the end of the list
+ (after an implicit "<literal>none</literal>").</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>ForceIPv4</option></term>
+ <listitem><para>
+ When downloading, force to use only the IPv4 protocol.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>ForceIPv6</option></term>
+ <listitem><para>
+ When downloading, force to use only the IPv6 protocol.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>MaxReleaseFileSize</option></term>
+ <listitem><para>
+ The maximum file size of Release/Release.gpg/InRelease files.
+ The default is 10MB.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>EnableSrvRecords</option></term>
+ <listitem><para>
+ This option controls if apt will use the DNS SRV server record
+ as specified in RFC 2782 to select an alternative server to
+ connect to.
+ The default is "true".
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>AllowInsecureRepositories</option></term>
+ <listitem><para>
+ Allow update operations to load data files from
+ repositories without sufficient security information.
+ The default value is "<literal>false</literal>".
+ Concept, implications as well as alternatives are detailed in &apt-secure;.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>AllowWeakRepositories</option></term>
+ <listitem><para>
+ Allow update operations to load data files from
+ repositories which provide security information, but these
+ are deemed no longer cryptographically strong enough.
+ The default value is "<literal>false</literal>".
+ Concept, implications as well as alternatives are detailed in &apt-secure;.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>AllowDowngradeToInsecureRepositories</option></term>
+ <listitem><para>
+ Allow that a repository that was previously gpg signed to become
+ unsigned during an update operation. When there is no valid signature
+ for a previously trusted repository apt will refuse the update. This
+ option can be used to override this protection. You almost certainly
+ never want to enable this. The default is <literal>false</literal>.
+ Concept, implications as well as alternatives are detailed in &apt-secure;.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Changelogs::URI</option> scope</term>
+ <listitem><para>
+ Acquiring changelogs can only be done if an URI is known from where to get them.
+ Preferable the Release file indicates this in a 'Changelogs' field. If this isn't
+ available the Label/Origin field of the Release file is used to check if a
+ <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</replaceable></literal> or
+ <literal>Acquire::Changelogs::URI::Origin::<replaceable>ORIGIN</replaceable></literal> option
+ exists and if so this value is taken. The value in the Release file can be overridden
+ with <literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</replaceable></literal>
+ or <literal>Acquire::Changelogs::URI::Override::Origin::<replaceable>ORIGIN</replaceable></literal>.
+
+ The value should be a normal URI to a text file, except that package specific data is
+ replaced with the placeholder <literal>@CHANGEPATH@</literal>. The
+ value for it is: 1. if the package is from a component (e.g. <literal>main</literal>)
+ this is the first part otherwise it is omitted, 2. the first letter of source package name,
+ except if the source package name starts with '<literal>lib</literal>' in which case it will
+ be the first four letters. 3. The complete source package name. 4. the complete name again and
+ 5. the source version.
+ The first (if present), second, third and fourth part are separated by a slash ('<literal>/</literal>')
+ and between the fourth and fifth part is an underscore ('<literal>_</literal>').
+
+ The special value '<literal>no</literal>' is available for this option indicating that
+ this source can't be used to acquire changelog files from. Another source will be tried
+ if available in this case.
+ </para></listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Binary specific configuration</title>
+ <para>Especially with the introduction of the <command>apt</command> binary
+ it can be useful to set certain options only for a specific binary as
+ even options which look like they would effect only a certain binary like
+ <option>APT::Get::Show-Versions</option> effect
+ <command>apt-get</command> as well as <command>apt</command>.
+ </para>
+ <para>Setting an option for a specific binary only can be achieved by
+ setting the option inside the
+ <option>Binary::<replaceable>specific-binary</replaceable></option>
+ scope. Setting the option <option>APT::Get::Show-Versions</option> for
+ the <command>apt</command> only can e.g. by done by setting
+ <option>Binary::apt::APT::Get::Show-Versions</option> instead.</para>
+ <para>Note that as seen in the DESCRIPTION section further above you can't
+ set binary-specific options on the commandline itself nor in
+ configuration files loaded via the commandline.</para>
+ </refsect1>
+
+ <refsect1><title>Directories</title>
+
+ <para>The <literal>Dir::State</literal> section has directories that pertain to local
+ state information. <literal>lists</literal> is the directory to place downloaded
+ package lists in and <literal>status</literal> is the name of the &dpkg; status file.
+ <literal>preferences</literal> is the name of the APT <filename>preferences</filename> file.
+ <literal>Dir::State</literal> contains the default directory to prefix on all
+ sub-items if they do not start with <filename>/</filename> or <filename>./</filename>.</para>
+
+ <para><literal>Dir::Cache</literal> contains locations pertaining to local cache
+ information, such as the two package caches <literal>srcpkgcache</literal> and
+ <literal>pkgcache</literal> as well as the location to place downloaded archives,
+ <literal>Dir::Cache::archives</literal>. Generation of caches can be turned off
+ by setting <literal>pkgcache</literal> or <literal>srcpkgcache</literal> to
+ <literal>""</literal>. This will slow down startup but save disk space. It
+ is probably preferable to turn off the pkgcache rather than the srcpkgcache.
+ Like <literal>Dir::State</literal> the default directory is contained in
+ <literal>Dir::Cache</literal></para>
+
+ <para><literal>Dir::Etc</literal> contains the location of configuration files,
+ <literal>sourcelist</literal> gives the location of the sourcelist and
+ <literal>main</literal> is the default configuration file (setting has no effect,
+ unless it is done from the config file specified by
+ <envar>APT_CONFIG</envar>).</para>
+
+ <para>The <literal>Dir::Parts</literal> setting reads in all the config fragments in
+ lexical order from the directory specified. After this is done then the
+ main config file is loaded.</para>
+
+ <para>Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::Bin::Methods</literal>
+ specifies the location of the method handlers and <literal>gzip</literal>,
+ <literal>bzip2</literal>, <literal>lzma</literal>,
+ <literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</literal>
+ <literal>dpkg-buildpackage</literal> and <literal>apt-cache</literal> specify the location
+ of the respective programs.</para>
+
+ <para>
+ The configuration item <literal>RootDir</literal> has a special
+ meaning. If set, all paths will be
+ relative to <literal>RootDir</literal>, <emphasis>even paths that
+ are specified absolutely</emphasis>. So, for instance, if
+ <literal>RootDir</literal> is set to
+ <filename>/tmp/staging</filename> and
+ <literal>Dir::State::status</literal> is set to
+ <filename>/var/lib/dpkg/status</filename>, then the status file
+ will be looked up in
+ <filename>/tmp/staging/var/lib/dpkg/status</filename>.
+ If you want to prefix only relative paths, set <literal>Dir</literal> instead.
+ </para>
+
+ <para>
+ The <literal>Ignore-Files-Silently</literal> list can be used to specify
+ which files APT should silently ignore while parsing the files in the
+ fragment directories. Per default a file which ends with <literal>.disabled</literal>,
+ <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-z]+</literal>
+ is silently ignored. As seen in the last default value these patterns can use regular
+ expression syntax.
+ </para>
+ </refsect1>
+
+ <refsect1><title>APT in DSelect</title>
+ <para>
+ When APT is used as a &dselect; method several configuration directives
+ control the default behavior. These are in the <literal>DSelect</literal> section.</para>
+
+ <variablelist>
+ <varlistentry><term><option>Clean</option></term>
+ <listitem><para>Cache Clean mode; this value may be one of
+ <literal>always</literal>, <literal>prompt</literal>,
+ <literal>auto</literal>, <literal>pre-auto</literal> and
+ <literal>never</literal>.
+ <literal>always</literal> and <literal>prompt</literal> will remove
+ all packages from the cache after upgrading, <literal>prompt</literal>
+ (the default) does so conditionally.
+ <literal>auto</literal> removes only those packages which are no longer
+ downloadable (replaced with a new version for instance).
+ <literal>pre-auto</literal> performs this action before downloading
+ new packages.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>options</option></term>
+ <listitem><para>The contents of this variable are passed to &apt-get; as command line
+ options when it is run for the install phase.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Updateoptions</option></term>
+ <listitem><para>The contents of this variable are passed to &apt-get; as command line
+ options when it is run for the update phase.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>PromptAfterUpdate</option></term>
+ <listitem><para>If true the [U]pdate operation in &dselect; will always prompt to continue.
+ The default is to prompt only on error.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>How APT calls &dpkg;</title>
+ <para>Several configuration directives control how APT invokes &dpkg;. These are
+ in the <literal>DPkg</literal> section.</para>
+
+ <variablelist>
+ <varlistentry><term><option>options</option></term>
+ <listitem><para>This is a list of options to pass to &dpkg;. The options must be specified
+ using the list notation and each list item is passed as a single argument
+ to &dpkg;.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Path</option></term>
+ <listitem><para>This is a string that defines the <envar>PATH</envar>
+ environment variable used when running dpkg. It may be set to any
+ valid value of that environment variable; or the empty string, in
+ which case the variable is not changed.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Pre-Invoke</option></term><term><option>Post-Invoke</option></term>
+ <listitem><para>This is a list of shell commands to run before/after invoking &dpkg;.
+ Like <literal>options</literal> this must be specified in list notation. The
+ commands are invoked in order using <filename>/bin/sh</filename>; should any
+ fail APT will abort.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Pre-Install-Pkgs</option></term>
+ <listitem><para>This is a list of shell commands to run before invoking &dpkg;. Like
+ <literal>options</literal> this must be specified in list notation. The commands
+ are invoked in order using <filename>/bin/sh</filename>; should any fail APT
+ will abort. APT will pass the filenames of all .deb files it is going to
+ install to the commands, one per line on the requested file descriptor, defaulting
+ to standard input.</para>
+
+ <para>Version 2 of this protocol sends more information through the requested
+ file descriptor: a line with the text <literal>VERSION 2</literal>,
+ the APT configuration space, and a list of package actions with filename
+ and version information.</para>
+
+ <para>Each configuration directive line has the form
+ <literal>key=value</literal>. Special characters (equal signs, newlines,
+ nonprintable characters, quotation marks, and percent signs in
+ <literal>key</literal> and newlines, nonprintable characters, and percent
+ signs in <literal>value</literal>) are %-encoded. Lists are represented
+ by multiple <literal>key::=value</literal> lines with the same key. The
+ configuration section ends with a blank line.</para>
+
+ <para>Package action lines consist of five fields in Version 2: package
+ name (without architecture qualification even if foreign), old version,
+ direction of version change (&lt; for upgrades, &gt; for downgrades, = for
+ no change), new version, action. The version fields are "-" for no version
+ at all (for example when installing a package for the first time; no
+ version is treated as earlier than any real version, so that is an
+ upgrade, indicated as <literal>- &lt; 1.23.4</literal>). The action field
+ is "**CONFIGURE**" if the package is being configured, "**REMOVE**" if it
+ is being removed, or the filename of a .deb file if it is being
+ unpacked.</para>
+
+ <para>In Version 3 after each version field follows the architecture
+ of this version, which is "-" if there is no version, and a field showing
+ the MultiArch type "same", "foreign", "allowed" or "none". Note that "none"
+ is an incorrect typename which is just kept to remain compatible, it
+ should be read as "no" and users are encouraged to support both.</para>
+
+ <para>The version of the protocol to be used for the command
+ <literal><replaceable>cmd</replaceable></literal> can be chosen by setting
+ <literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</literal>
+ accordingly, the default being version 1. If APT isn't supporting the requested
+ version it will send the information in the highest version it has support for instead.
+ </para>
+
+ <para>The file descriptor to be used to send the information can be requested with
+ <literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</literal>
+ which defaults to <literal>0</literal> for standard input and is available since
+ version 0.9.11. Support for the option can be detected by looking for the environment
+ variable <envar>APT_HOOK_INFO_FD</envar> which contains the number of the used
+ file descriptor as a confirmation.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Run-Directory</option></term>
+ <listitem><para>APT chdirs to this directory before invoking &dpkg;, the default is
+ <filename>/</filename>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>Build-options</option></term>
+ <listitem><para>These options are passed to &dpkg-buildpackage; when compiling packages;
+ the default is to disable signing and produce all binaries.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><option>DPkg::ConfigurePending</option></term>
+ <listitem><para>If this option is set APT will call <command>dpkg --configure --pending</command>
+ to let &dpkg; handle all required configurations and triggers. This option is activated by default,
+ but deactivating it could be useful if you want to run APT multiple times in a row - e.g. in an installer.
+ In this scenario you could deactivate this option in all but the last run.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Periodic and Archives options</title>
+ <para><literal>APT::Periodic</literal> and <literal>APT::Archives</literal>
+ groups of options configure behavior of apt periodic updates, which is
+ done by the <literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of
+ this script for the brief documentation of these options.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Debug options</title>
+ <para>
+ Enabling options in the <literal>Debug::</literal> section will
+ cause debugging information to be sent to the standard error
+ stream of the program utilizing the <literal>apt</literal>
+ libraries, or enable special program modes that are primarily
+ useful for debugging the behavior of <literal>apt</literal>.
+ Most of these options are not interesting to a normal user, but a
+ few may be:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>Debug::pkgProblemResolver</literal> enables output
+ about the decisions made by
+ <literal>dist-upgrade, upgrade, install, remove, purge</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>Debug::NoLocking</literal> disables all file
+ locking. This can be used to run some operations (for
+ instance, <literal>apt-get -s install</literal>) as a
+ non-root user.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>Debug::pkgDPkgPM</literal> prints out the actual
+ command line each time that <literal>apt</literal> invokes
+ &dpkg;.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>Debug::IdentCdrom</literal> disables the inclusion
+ of statfs data in CD-ROM IDs. <!-- TODO: provide a
+ motivating example, except I haven't a clue why you'd want
+ to do this. -->
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ A full list of debugging options to apt follows.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>Debug::Acquire::cdrom</option></term>
+
+ <listitem>
+ <para>
+ Print information related to accessing
+ <literal>cdrom://</literal> sources.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::Acquire::ftp</option></term>
+
+ <listitem>
+ <para>
+ Print information related to downloading packages using
+ FTP.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::Acquire::http</option></term>
+
+ <listitem>
+ <para>
+ Print information related to downloading packages using
+ HTTP.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::Acquire::https</option></term>
+
+ <listitem>
+ <para>
+ Print information related to downloading packages using
+ HTTPS.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::Acquire::gpgv</option></term>
+
+ <listitem>
+ <para>
+ Print information related to verifying cryptographic
+ signatures using <literal>gpg</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::aptcdrom</option></term>
+
+ <listitem>
+ <para>
+ Output information about the process of accessing
+ collections of packages stored on CD-ROMs.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::BuildDeps</option></term>
+ <listitem>
+ <para>
+ Describes the process of resolving build-dependencies in
+ &apt-get;.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::Hashes</option></term>
+ <listitem>
+ <para>
+ Output each cryptographic hash that is generated by the
+ <literal>apt</literal> libraries.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::IdentCDROM</option></term>
+ <listitem>
+ <para>
+ Do not include information from <literal>statfs</literal>,
+ namely the number of used and free blocks on the CD-ROM
+ filesystem, when generating an ID for a CD-ROM.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::NoLocking</option></term>
+ <listitem>
+ <para>
+ Disable all file locking. For instance, this will allow
+ two instances of <quote><literal>apt-get
+ update</literal></quote> to run at the same time.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgAcquire</option></term>
+
+ <listitem>
+ <para>
+ Log when items are added to or removed from the global
+ download queue.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgAcquire::Auth</option></term>
+ <listitem>
+ <para>
+ Output status messages and errors related to verifying
+ checksums and cryptographic signatures of downloaded files.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgAcquire::Diffs</option></term>
+ <listitem>
+ <para>
+ Output information about downloading and applying package
+ index list diffs, and errors relating to package index list
+ diffs.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgAcquire::RRed</option></term>
+
+ <listitem>
+ <para>
+ Output information related to patching apt package lists
+ when downloading index diffs instead of full indices.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgAcquire::Worker</option></term>
+
+ <listitem>
+ <para>
+ Log all interactions with the sub-processes that actually
+ perform downloads.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgAutoRemove</option></term>
+
+ <listitem>
+ <para>
+ Log events related to the automatically-installed status of
+ packages and to the removal of unused packages.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgDepCache::AutoInstall</option></term>
+ <listitem>
+ <para>
+ Generate debug messages describing which packages are being
+ automatically installed to resolve dependencies. This
+ corresponds to the initial auto-install pass performed in,
+ e.g., <literal>apt-get install</literal>, and not to the
+ full <literal>apt</literal> dependency resolver; see
+ <literal>Debug::pkgProblemResolver</literal> for that.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgDepCache::Marker</option></term>
+ <listitem>
+ <para>
+ Generate debug messages describing which packages are marked
+ as keep/install/remove while the ProblemResolver does his work.
+ Each addition or deletion may trigger additional actions;
+ they are shown indented two additional spaces under the original entry.
+ The format for each line is <literal>MarkKeep</literal>,
+ <literal>MarkDelete</literal> or <literal>MarkInstall</literal> followed by
+ <literal>package-name &lt;a.b.c -&gt; d.e.f | x.y.z&gt; (section)</literal>
+ where <literal>a.b.c</literal> is the current version of the package,
+ <literal>d.e.f</literal> is the version considered for installation and
+ <literal>x.y.z</literal> is a newer version, but not considered for installation
+ (because of a low pin score). The later two can be omitted if there is none or if
+ it is the same as the installed version.
+ <literal>section</literal> is the name of the section the package appears in.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgDPkgPM</option></term>
+ <listitem>
+ <para>
+ When invoking &dpkg;, output the precise command line with
+ which it is being invoked, with arguments separated by a
+ single space character.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgDPkgProgressReporting</option></term>
+ <listitem>
+ <para>
+ Output all the data received from &dpkg; on the status file
+ descriptor and any errors encountered while parsing it.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgOrderList</option></term>
+
+ <listitem>
+ <para>
+ Generate a trace of the algorithm that decides the order in
+ which <literal>apt</literal> should pass packages to
+ &dpkg;.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgPackageManager</option></term>
+
+ <listitem>
+ <para>
+ Output status messages tracing the steps performed when
+ invoking &dpkg;.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgPolicy</option></term>
+
+ <listitem>
+ <para>
+ Output the priority of each package list on startup.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgProblemResolver</option></term>
+
+ <listitem>
+ <para>
+ Trace the execution of the dependency resolver (this
+ applies only to what happens when a complex dependency
+ problem is encountered).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::pkgProblemResolver::ShowScores</option></term>
+ <listitem>
+ <para>
+ Display a list of all installed packages with their calculated score
+ used by the pkgProblemResolver. The description of the package
+ is the same as described in <literal>Debug::pkgDepCache::Marker</literal>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::sourceList</option></term>
+
+ <listitem>
+ <para>
+ Print information about the vendors read from
+ <filename>/etc/apt/vendors.list</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Debug::RunScripts</option></term>
+ <listitem>
+ <para>
+ Display the external commands that are called by apt hooks.
+ This includes e.g. the config options
+ <literal>DPkg::{Pre,Post}-Invoke</literal> or
+ <literal>APT::Update::{Pre,Post}-Invoke</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+<!-- 2009/07/11 Currently used nowhere. The corresponding code
+is commented.
+ <varlistentry>
+ <term><literal>Debug::Vendor</literal></term>
+
+ <listitem>
+ <para>
+ Print information about each vendor.
+ </para>
+ </listitem>
+ </varlistentry>
+-->
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>Examples</title>
+ <para>&configureindex; is a
+ configuration file showing example values for all possible
+ options.</para>
+ </refsect1>
+
+ <refsect1><title>Files</title>
+ <variablelist>
+ &file-aptconf;
+ </variablelist>
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-cache;, &apt-config;<!-- ? reading apt.conf -->, &apt-preferences;.</para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
+
diff --git a/doc/apt.ent b/doc/apt.ent
new file mode 100644
index 0000000..6a3837b
--- /dev/null
+++ b/doc/apt.ent
@@ -0,0 +1,243 @@
+<!ENTITY apt-author.team "
+ <author>
+ <othername>APT team</othername>
+ <contrib></contrib>
+ </author>
+">
+
+<!ENTITY apt-qapage "
+ <para>
+ <ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>
+ </para>
+">
+
+<!-- Boiler plate Bug reporting section -->
+<!ENTITY manbugs "
+ <refsect1><title>Bugs</title>
+ <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.
+ If you wish to report a bug in APT, please see
+ <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the
+ &reportbug; command.
+ </para>
+ </refsect1>
+">
+
+<!-- Boiler plate Author section -->
+<!ENTITY manauthor "
+ <refsect1><title>Author</title>
+ <para>APT was written by the APT team <email>apt@packages.debian.org</email>.
+ </para>
+ </refsect1>
+">
+
+<!-- Should be used within the option section of the text to
+ put in the blurb about -h, -v, -c and -o -->
+<!ENTITY apt-commonoptions "
+ <varlistentry><term><option>-h</option></term>
+ <term><option>--help</option></term>
+ <listitem><para>Show a short usage summary.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-v</option></term>
+ <term><option>--version</option></term>
+ <listitem><para>Show the program version.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-c</option></term>
+ <term><option>--config-file</option></term>
+ <listitem><para>Configuration File; Specify a configuration file to use.
+ The program will read the default configuration file and then this
+ configuration file. If configuration settings need to be set before the
+ default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>
+ environment variable. See &apt-conf; for syntax information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-o</option></term>
+ <term><option>--option</option></term>
+ <listitem><para>Set a Configuration Option; This will set an arbitrary
+ configuration option. The syntax is <option>-o Foo::Bar=bar</option>.
+ <option>-o</option> and <option>--option</option> can be used multiple
+ times to set different options.
+ </para>
+ </listitem>
+ </varlistentry>
+">
+
+<!-- Should be used within the option section of the text to
+ put in the blurb about -h, -v, -c and -o -->
+<!ENTITY apt-cmdblurb "
+ <para>All command line options may be set using the configuration file, the
+ descriptions indicate the configuration option to set. For boolean
+ options you can override the config file by using something like
+ <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>
+ or several other variations.
+ </para>
+">
+
+<!ENTITY file-aptconf "
+ <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>
+ <listitem><para>APT configuration file.
+ Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>
+ <listitem><para>APT configuration file fragments.
+ Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>
+ </varlistentry>
+">
+
+<!ENTITY file-cachearchives "
+ <varlistentry><term><filename>&cachedir;/archives/</filename></term>
+ <listitem><para>Storage area for retrieved package files.
+ Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>
+ <listitem><para>Storage area for package files in transit.
+ Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>
+ </varlistentry>
+">
+
+<!ENTITY file-preferences "
+ <varlistentry><term><filename>/etc/apt/preferences</filename></term>
+ <listitem><para>Version preferences file.
+ This is where you would specify &quot;pinning&quot;,
+ i.e. a preference to get certain packages
+ from a separate source
+ or from a different version of a distribution.
+ Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>
+ <listitem><para>File fragments for the version preferences.
+ Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>
+ </varlistentry>
+">
+
+<!ENTITY file-sourceslist "
+ <varlistentry><term><filename>/etc/apt/sources.list</filename></term>
+ <listitem><para>Locations to fetch packages from.
+ Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>
+ <listitem><para>File fragments for locations to fetch packages from.
+ Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>
+ </varlistentry>
+">
+
+<!ENTITY file-statelists "
+ <varlistentry><term><filename>&statedir;/lists/</filename></term>
+ <listitem><para>Storage area for state information for each package resource specified in
+ &sources-list;
+ Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>
+ <listitem><para>Storage area for state information in transit.
+ Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>
+ </varlistentry>
+">
+
+<!ENTITY file-trustedgpg "
+ <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>
+ <listitem><para>Keyring of local trusted keys, new keys will be added here.
+ Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>
+ <listitem><para>File fragments for the trusted keys, additional keyrings can
+ be stored here (by other packages or the administrator).
+ Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>
+ </varlistentry>
+">
+
+<!ENTITY file-extended_states "
+ <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>
+ <listitem><para>Status list of auto-installed packages.
+ Configuration Item: <literal>Dir::State::extended_states</literal>.
+ </para></listitem>
+ </varlistentry>
+">
+
+<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable
+ to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->
+<!ENTITY translation-title "TRANSLATION">
+
+<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed
+ to the translation in the past, who is responsible now and maybe further information
+ specially related to your translation. -->
+<!ENTITY translation-holder "
+ The english translation was done by John Doe <email>john@doe.org</email> in 2009,
+ 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the
+ Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.
+">
+
+<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings
+ in a shipped manpage newer/modified paragraphs will maybe appear in english in
+ the generated manpage. This sentence is therefore here to tell the reader that this
+ is not a mistake by the translator - obviously the target is that at least for stable
+ releases this sentence is not needed. :) -->
+<!ENTITY translation-english "
+ Note that this translated document may contain untranslated parts.
+ This is done on purpose, to avoid losing content when the
+ translation is lagging behind the original content.
+">
+
+<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::pkgProblemResolver=1 -->
+<!ENTITY synopsis-config-string "config_string">
+
+<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf -->
+<!ENTITY synopsis-config-file "config_file">
+
+<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -t=squeeze apt/experimental -->
+<!ENTITY synopsis-target-release "target_release">
+
+<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel -->
+<!ENTITY synopsis-architecture "architecture">
+
+<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome -->
+<!ENTITY synopsis-pkg "pkg">
+
+<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 -->
+<!ENTITY synopsis-pkg-ver-number "pkg_version_number">
+
+<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache pkgnames apt -->
+<!ENTITY synopsis-prefix "prefix">
+
+<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search awesome -->
+<!ENTITY synopsis-regex "regex">
+
+<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -d=/media/cdrom -->
+<!ENTITY synopsis-cdrom-mount "cdrom_mount_point">
+
+<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. apt-extracttemplates -t=/tmp -->
+<!ENTITY synopsis-tmp-directory "temporary_directory">
+
+<!-- TRANSLATOR: used as in apt-extracttemplates filename -->
+<!ENTITY synopsis-filename "filename">
+
+<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive packages path override-file pathprefix -->
+<!ENTITY synopsis-path "path">
+
+<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive packages path override-file pathprefix -->
+<!ENTITY synopsis-override "override-file">
+
+<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive packages path override-file pathprefix -->
+<!ENTITY synopsis-pathprefix "pathprefix">
+
+<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive generate section -->
+<!ENTITY synopsis-section "section">
+
+<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export 473041FA -->
+<!ENTITY synopsis-keyid "keyid">
+
diff --git a/doc/apt_auth.conf.5.xml b/doc/apt_auth.conf.5.xml
new file mode 100644
index 0000000..e7961ef
--- /dev/null
+++ b/doc/apt_auth.conf.5.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2018-12-03T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt_auth.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt_auth.conf</refname>
+ <refpurpose>Login configuration file for APT sources and proxies</refpurpose>
+ </refnamediv>
+
+<refsect1><title>Description</title>
+<para>APT configuration files like &sources-list; or &apt-conf; need to be accessible
+for everyone using apt tools on the system to have access to all package-related
+information like the available packages in a repository. Login information
+needed to connect to a proxy or to download data from a repository on the other
+hand shouldn't always be accessible by everyone and can hence not be placed in a
+file with world-readable file permissions.</para>
+
+<para>The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf files inside
+<filename>/etc/apt/auth.conf.d</filename> can be used to store
+login information in a netrc-like format with restrictive file permissions.</para>
+</refsect1>
+
+<refsect1><title>netrc-like format</title>
+<para>The format defined here is similar to the format of the <filename>~/.netrc</filename>
+file used by <citerefentry><refentrytitle><command>ftp</command></refentrytitle><manvolnum>1</manvolnum></citerefentry>
+and similar programs interacting with servers.
+It is a simple token-based format with the following tokens being recognized;
+Unknown tokens will be ignored. Tokens may be separated by spaces, tabs or newlines.</para>
+
+<variablelist>
+<varlistentry>
+<term><literal>machine</literal> <replaceable>hostname</replaceable>[:<replaceable>port</replaceable>][/<replaceable>path</replaceable>]</term>
+<listitem><para>Entries are looked up by searching for the
+<emphasis><literal>machine</literal></emphasis> token matching the
+hostname of the URI apt needs login information for. Extending the netrc-format
+a portnumber can be specified. If no port is given the token matches for all ports.
+Similar the path is optional and only needed and useful if multiple repositories with
+different login information reside on the same server. A machine token with a path
+matches if the path in the URI starts with the path given in the token.
+Once a match is made, the subsequent tokens are processed, stopping when the
+end of file is reached or another <emphasis><literal>machine</literal></emphasis>
+token is encountered.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><literal>login</literal> <replaceable>name</replaceable></term>
+<listitem><para>The username to be used.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><literal>password</literal> <replaceable>string</replaceable></term>
+<listitem><para>The password to be used.</para></listitem>
+</varlistentry>
+
+</variablelist>
+
+</refsect1>
+
+<refsect1><title>Example</title>
+<para>Supplying login information for a user named <literal>apt</literal>
+with the password <literal>debian</literal> for the &sources-list; entry
+<literallayout>deb http://example.org/debian &debian-stable-codename; main</literallayout>
+could be done in the entry directly:
+<literallayout>deb http://apt:debian@example.org/debian &debian-stable-codename; main</literallayout>
+Alternatively an entry like the following in the auth.conf file could be used:
+<literallayout>machine example.org
+login apt
+password debian</literallayout>
+Or alternatively within a single line:
+<literallayout>machine example.org login apt password debian</literallayout>
+If you need to be more specific all of these lines will also apply to the example entry:
+<literallayout>machine example.org/deb login apt password debian
+machine example.org/debian login apt password debian
+machine example.org/debian/ login apt password debian
+</literallayout>
+On the other hand neither of the following lines apply:
+<literallayout>machine example.org:80 login apt password debian
+machine example.org/deb/ login apt password debian
+machine example.org/ubuntu login apt password debian
+machine example.orga login apt password debian
+machine example.net login apt password debian
+</literallayout>
+</para>
+</refsect1>
+
+<refsect1><title>Notes</title>
+<para>Basic support for this feature is present since version 0.7.25, but was
+undocumented for years. The documentation was added in version 1.5 changing
+also the implementation slightly. For maximum backward compatibility you should
+avoid multiple <literal>machine</literal> tokens with the same hostname, but if
+you need multiple they should all have a path specified in the
+<literal>machine</literal> token.</para>
+</refsect1>
+
+<refsect1>
+<title>Files</title>
+ <variablelist>
+ <varlistentry><term><filename>/etc/apt/auth.conf</filename></term>
+ <listitem><para>Login information for APT sources and proxies in a netrc-like format.
+ Configuration Item: <literal>Dir::Etc::netrc</literal>.</para></listitem>
+ </varlistentry>
+ <varlistentry><term><filename>/etc/apt/auth.conf.d/*.conf</filename></term>
+ <listitem><para>Login information for APT sources and proxies in a netrc-like format.
+ Configuration Item: <literal>Dir::Etc::netrcparts</literal>.</para></listitem>
+ </varlistentry>
+ </variablelist>
+</refsect1>
+
+<refsect1>
+<title>See Also</title>
+<para>&apt-conf; &sources-list;
+</para>
+</refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/apt_preferences.5.xml b/doc/apt_preferences.5.xml
new file mode 100644
index 0000000..cac9a96
--- /dev/null
+++ b/doc/apt_preferences.5.xml
@@ -0,0 +1,723 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2015-08-15T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>apt_preferences</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt_preferences</refname>
+ <refpurpose>Preference control file for APT</refpurpose>
+ </refnamediv>
+
+<refsect1>
+<title>Description</title>
+<para>The APT preferences file <filename>/etc/apt/preferences</filename>
+and the fragment files in the <filename>/etc/apt/preferences.d/</filename>
+folder can be used to control which versions of packages will be selected
+for installation.</para>
+
+<para>Several versions of a package may be available for installation when
+the &sources-list; file contains references to more than one distribution
+(for example, <literal>stable</literal> and <literal>testing</literal>).
+APT assigns a priority to each version that is available.
+Subject to dependency constraints, <command>apt-get</command> selects the
+version with the highest priority for installation.
+The APT preferences override the priorities that APT assigns to
+package versions by default, thus giving the user control over which
+one is selected for installation.</para>
+
+<para>Several instances of the same version of a package may be available when
+the &sources-list; file contains references to more than one source.
+In this case <command>apt-get</command> downloads the instance listed
+earliest in the &sources-list; file.
+The APT preferences do not affect the choice of instance, only
+the choice of version.</para>
+
+<para>Preferences are a strong power in the hands of a system administrator
+but they can become also their biggest nightmare if used without care!
+APT will not question the preferences, so wrong settings can
+lead to uninstallable packages or wrong decisions while upgrading packages.
+Even more problems will arise if multiple distribution releases are mixed
+without a good understanding of the following paragraphs.
+Packages included in a specific release aren't tested in (and
+therefore don't always work as expected in) older or newer releases, or
+together with other packages from different releases.
+You have been warned.</para>
+
+<para>Note that the files in the <filename>/etc/apt/preferences.d</filename>
+directory are parsed in alphanumeric ascending order and need to obey the
+following naming convention: The files have either no or "<literal>pref</literal>"
+as filename extension and only contain alphanumeric, hyphen (-),
+underscore (_) and period (.) characters.
+Otherwise APT will print a notice that it has ignored a file, unless that
+file matches a pattern in the <literal>Dir::Ignore-Files-Silently</literal>
+configuration list - in which case it will be silently ignored.</para>
+
+<refsect2><title>APT's Default Priority Assignments</title>
+
+<para>If there is no preferences file or if there is no entry in the file
+that applies to a particular version then the priority assigned to that
+version is the priority of the distribution to which that version
+belongs. It is possible to single out a distribution, "the target release",
+which receives a higher priority than other distributions do by default.
+The target release can be set on the <command>apt-get</command> command
+line or in the APT configuration file <filename>/etc/apt/apt.conf</filename>.
+Note that this has precedence over any general priority you set in the
+<filename>/etc/apt/preferences</filename> file described later, but not
+over specifically pinned packages.
+For example,
+
+<programlisting>
+<command>apt-get install -t testing <replaceable>some-package</replaceable></command>
+</programlisting>
+<programlisting>
+APT::Default-Release "stable";
+</programlisting>
+</para>
+
+<para>If the target release has been specified then APT uses the following
+algorithm to set the priorities of the versions of a package. Assign:
+
+<variablelist>
+<varlistentry>
+<term>priority 1</term>
+<listitem><simpara>to the versions coming from archives which in their <filename>Release</filename>
+files are marked as "NotAutomatic: yes" but <emphasis>not</emphasis> as "ButAutomaticUpgrades: yes"
+like the Debian <literal>experimental</literal> archive.</simpara></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>priority 100</term>
+<listitem><simpara>to the version that is already installed (if any) and to the versions coming
+from archives which in their <filename>Release</filename> files are marked as "NotAutomatic: yes" and
+"ButAutomaticUpgrades: yes" like the Debian backports archive since <literal>squeeze-backports</literal>.
+</simpara></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>priority 500</term>
+<listitem><simpara>to the versions that do not belong to the target release.</simpara></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>priority 990</term>
+<listitem><simpara>to the versions that belong to the target release.</simpara></listitem>
+</varlistentry>
+</variablelist>
+
+The highest of those priorities whose description matches the version is assigned to the
+version.
+</para>
+
+<para>If the target release has not been specified then APT simply assigns
+priority 100 to all installed package versions and priority 500 to all
+uninstalled package versions, except versions coming from archives which
+in their <filename>Release</filename> files are marked as "NotAutomatic: yes" -
+these versions get the priority 1 or priority 100 if it is additionally marked
+as "ButAutomaticUpgrades: yes".</para>
+
+<para>APT then applies the following rules, listed in order of precedence,
+to determine which version of a package to install.
+<itemizedlist>
+<listitem><simpara>Never downgrade unless the priority of an available
+version exceeds 1000. ("Downgrading" is installing a less recent version
+of a package in place of a more recent version. Note that none of APT's
+default priorities exceeds 1000; such high priorities can only be set in
+the preferences file. Note also that downgrading a package
+can be risky.)</simpara></listitem>
+<listitem><simpara>Install the highest priority version.</simpara></listitem>
+<listitem><simpara>If two or more versions have the same priority,
+install the most recent one (that is, the one with the higher version
+number).</simpara></listitem>
+<listitem><simpara>If two or more versions have the same priority and
+version number but either the packages differ in some of their metadata or the
+<literal>--reinstall</literal> option is given, install the uninstalled one.</simpara></listitem>
+</itemizedlist>
+</para>
+
+<para>In a typical situation, the installed version of a package (priority 100)
+is not as recent as one of the versions available from the sources listed in
+the &sources-list; file (priority 500 or 990). Then the package will be upgraded
+when <command>apt-get install <replaceable>some-package</replaceable></command>
+or <command>apt-get upgrade</command> is executed.
+</para>
+
+<para>More rarely, the installed version of a package is <emphasis>more</emphasis> recent
+than any of the other available versions. The package will not be downgraded
+when <command>apt-get install <replaceable>some-package</replaceable></command>
+or <command>apt-get upgrade</command> is executed.</para>
+
+<para>Sometimes the installed version of a package is more recent than the
+version belonging to the target release, but not as recent as a version
+belonging to some other distribution. Such a package will indeed be upgraded
+when <command>apt-get install <replaceable>some-package</replaceable></command>
+or <command>apt-get upgrade</command> is executed,
+because at least <emphasis>one</emphasis> of the available versions has a higher
+priority than the installed version.</para>
+</refsect2>
+
+<refsect2><title>The Effect of APT Preferences</title>
+
+<para>The APT preferences file allows the system administrator to control the
+assignment of priorities. The file consists of one or more multi-line records
+separated by blank lines. Records can have one of two forms, a specific form
+and a general form.
+<itemizedlist>
+<listitem>
+<simpara>The specific form assigns a priority (a "Pin-Priority") to one or more
+specified packages with a specified version or version range. For example,
+the following record assigns a high priority to all versions of
+the <filename>perl</filename> package whose version number begins with "<literal>&good-perl;</literal>".
+Multiple packages can be separated by spaces.</simpara>
+
+<programlisting>
+Package: perl
+Pin: version &good-perl;*
+Pin-Priority: 1001
+</programlisting>
+</listitem>
+
+<listitem><simpara>The general form assigns a priority to all of the package versions in a
+given distribution (that is, to all the versions of packages that are
+listed in a certain <filename>Release</filename> file) or to all of the package
+versions coming from a particular Internet site, as identified by the
+site's fully qualified domain name.</simpara>
+
+<simpara>This general-form entry in the APT preferences file applies only
+to groups of packages. For example, the following record assigns a high
+priority to all package versions available from the local site.</simpara>
+
+<programlisting>
+Package: *
+Pin: origin ""
+Pin-Priority: 999
+</programlisting>
+
+<simpara>A note of caution: the keyword used here is "<literal>origin</literal>"
+which can be used to match a hostname. The following record will assign a high priority
+to all versions available from the server identified by the hostname "ftp.de.debian.org"</simpara>
+<programlisting>
+Package: *
+Pin: origin "ftp.de.debian.org"
+Pin-Priority: 999
+</programlisting>
+<simpara>This should <emphasis>not</emphasis> be confused with the Origin of a distribution as
+specified in a <filename>Release</filename> file. What follows the "Origin:" tag
+in a <filename>Release</filename> file is not an Internet address
+but an author or vendor name, such as "Debian" or "Ximian".</simpara>
+
+<simpara>The following record assigns a low priority to all package versions
+belonging to any distribution whose Archive name is "<literal>unstable</literal>".</simpara>
+
+<programlisting>
+Package: *
+Pin: release a=unstable
+Pin-Priority: 50
+</programlisting>
+
+<simpara>The following record assigns a high priority to all package versions
+belonging to any distribution whose Codename is "<literal>&debian-testing-codename;</literal>".</simpara>
+
+<programlisting>
+Package: *
+Pin: release n=&debian-testing-codename;
+Pin-Priority: 900
+</programlisting>
+
+<simpara>The following record assigns a high priority to all package versions
+belonging to any release whose Archive name is "<literal>stable</literal>"
+and whose release Version number is "<literal>&debian-stable-version;</literal>".</simpara>
+
+<programlisting>
+Package: *
+Pin: release a=stable, v=&debian-stable-version;
+Pin-Priority: 500
+</programlisting>
+</listitem>
+</itemizedlist>
+
+The effect of the comma operator is similar to an "and" in logic: All
+conditions must be satisfied for the pin to match. There is one exception:
+For any type of condition (such as two "a" conditions), only the last such
+condition is checked.
+</para>
+
+</refsect2>
+
+<refsect2><title>Regular expressions and &glob; syntax</title>
+<para>
+APT also supports pinning by &glob; expressions, and regular
+expressions surrounded by slashes. For example, the following
+example assigns the priority 500 to all packages from
+experimental where the name starts with gnome (as a &glob;-like
+expression) or contains the word kde (as a POSIX extended regular
+expression surrounded by slashes).
+</para>
+
+<programlisting>
+Package: gnome* /kde/
+Pin: release a=experimental
+Pin-Priority: 500
+</programlisting>
+
+<para>
+The rule for those expressions is that they can occur anywhere
+where a string can occur. Thus, the following pin assigns the
+priority 990 to all packages from a release starting with &ubuntu-codename;.
+</para>
+
+<programlisting>
+Package: *
+Pin: release n=&ubuntu-codename;*
+Pin-Priority: 990
+</programlisting>
+
+<para>
+If a regular expression occurs in a <literal>Package</literal> field,
+the behavior is the same as if this regular expression were replaced
+with a list of all package names it matches. It is undecided whether
+this will change in the future; thus you should always list wild-card
+pins first, so later specific pins override it.
+
+The pattern "<literal>*</literal>" in a Package field is not considered
+a &glob; expression in itself.
+</para>
+</refsect2>
+
+
+
+
+
+<refsect2>
+<title>How APT Interprets Priorities</title>
+
+<para>
+Priorities (P) assigned in the APT preferences file must be positive
+or negative integers. They are interpreted as follows (roughly speaking):
+
+<variablelist>
+<varlistentry>
+<term>P &gt;= 1000</term>
+<listitem><simpara>causes a version to be installed even if this
+constitutes a downgrade of the package</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>990 &lt;= P &lt; 1000</term>
+<listitem><simpara>causes a version to be installed
+even if it does not come from the target release,
+unless the installed version is more recent</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>500 &lt;= P &lt; 990</term>
+<listitem><simpara>causes a version to be installed
+unless there is a version available belonging to the target release
+or the installed version is more recent</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>100 &lt;= P &lt; 500</term>
+<listitem><simpara>causes a version to be installed
+unless there is a version available belonging to some other
+distribution or the installed version is more recent</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>0 &lt; P &lt; 100</term>
+<listitem><simpara>causes a version to be installed
+only if there is no installed version of the package</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>P &lt; 0</term>
+<listitem><simpara>prevents the version from being installed</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>P = 0</term>
+<listitem><simpara>has undefined behaviour, do not use it.</simpara></listitem>
+</varlistentry>
+</variablelist>
+</para>
+
+<para>
+The first specific-form record matching an available package version determines
+the priority of the package version.
+Failing that, the priority of the package is defined as the maximum of all
+priorities defined by generic-form records matching the version.
+Records defined using patterns in the Pin field other than "*" are treated like
+specific-form records.
+</para>
+
+<para>For example, suppose the APT preferences file contains the three
+records presented earlier:</para>
+
+<programlisting>
+Package: perl
+Pin: version &good-perl;*
+Pin-Priority: 1001
+
+Package: *
+Pin: origin ""
+Pin-Priority: 999
+
+Package: *
+Pin: release unstable
+Pin-Priority: 50
+</programlisting>
+
+<para>Then:
+<itemizedlist>
+<listitem><simpara>The most recent available version of the <literal>perl</literal>
+package will be installed, so long as that version's version number begins
+with "<literal>&good-perl;</literal>". If <emphasis>any</emphasis> &good-perl;* version of <literal>perl</literal> is
+available and the installed version is &bad-perl;*, then <literal>perl</literal> will be
+downgraded.</simpara></listitem>
+<listitem><simpara>A version of any package other than <literal>perl</literal>
+that is available from the local system has priority over other versions,
+even versions belonging to the target release.
+</simpara></listitem>
+<listitem><simpara>A version of a package whose origin is not the local
+system but some other site listed in &sources-list; and which belongs to
+an <literal>unstable</literal> distribution is only installed if it is selected
+for installation and no version of the package is already installed.
+</simpara></listitem>
+</itemizedlist>
+</para>
+</refsect2>
+
+<refsect2>
+<title>Determination of Package Version and Distribution Properties</title>
+
+<para>The locations listed in the &sources-list; file should provide
+<filename>Packages</filename> and <filename>Release</filename> files
+to describe the packages available at that location. </para>
+
+<para>The <filename>Packages</filename> file is normally found in the directory
+<filename>.../dists/<replaceable>dist-name</replaceable>/<replaceable>component</replaceable>/<replaceable>arch</replaceable></filename>:
+for example, <filename>.../dists/stable/main/binary-i386/Packages</filename>.
+It consists of a series of multi-line records, one for each package available
+in that directory. Only two lines in each record are relevant for setting
+APT priorities:
+<variablelist>
+<varlistentry>
+<term>the <literal>Package:</literal> line</term>
+<listitem><simpara>gives the package name</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>the <literal>Version:</literal> line</term>
+<listitem><simpara>gives the version number for the named package</simpara></listitem>
+</varlistentry>
+</variablelist>
+</para>
+
+<para>The <filename>Release</filename> file is normally found in the directory
+<filename>.../dists/<replaceable>dist-name</replaceable></filename>:
+for example, <filename>.../dists/stable/Release</filename>,
+or <filename>.../dists/&debian-stable-codename;/Release</filename>.
+It consists of a single multi-line record which applies to <emphasis>all</emphasis> of
+the packages in the directory tree below its parent. Unlike the
+<filename>Packages</filename> file, nearly all of the lines in a <filename>Release</filename>
+file are relevant for setting APT priorities:
+
+<variablelist>
+<varlistentry>
+<term>the <literal>Archive:</literal> or <literal>Suite:</literal> line</term>
+<listitem><simpara>names the archive to which all the packages
+in the directory tree belong. For example, the line
+"Archive: stable" or
+"Suite: stable"
+specifies that all of the packages in the directory
+tree below the parent of the <filename>Release</filename> file are in a
+<literal>stable</literal> archive. Specifying this value in the APT preferences file
+would require the line:
+</simpara>
+<programlisting>
+Pin: release a=stable
+</programlisting>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>the <literal>Codename:</literal> line</term>
+<listitem><simpara>names the codename to which all the packages
+in the directory tree belong. For example, the line
+"Codename: &debian-testing-codename;"
+specifies that all of the packages in the directory
+tree below the parent of the <filename>Release</filename> file belong to a version named
+<literal>&debian-testing-codename;</literal>. Specifying this value in the APT preferences file
+would require the line:
+</simpara>
+<programlisting>
+Pin: release n=&debian-testing-codename;
+</programlisting>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>the <literal>Version:</literal> line</term>
+<listitem><simpara>names the release version. For example, the
+packages in the tree might belong to Debian release
+version &debian-stable-version;. Note that there is normally no version number for the
+<literal>testing</literal> and <literal>unstable</literal> distributions because they
+have not been released yet. Specifying this in the APT preferences
+file would require one of the following lines.
+</simpara>
+
+<programlisting>
+Pin: release v=&debian-stable-version;
+Pin: release a=stable, v=&debian-stable-version;
+Pin: release &debian-stable-version;
+</programlisting>
+
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>the <literal>Component:</literal> line</term>
+<listitem><simpara>names the licensing component associated with the
+packages in the directory tree of the <filename>Release</filename> file.
+For example, the line "Component: main" specifies that
+all the packages in the directory tree are from the <literal>main</literal>
+component, which entails that they are licensed under terms listed
+in the Debian Free Software Guidelines. Specifying this component
+in the APT preferences file would require the line:
+</simpara>
+<programlisting>
+Pin: release c=main
+</programlisting>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>the <literal>Origin:</literal> line</term>
+<listitem><simpara>names the originator of the packages in the
+directory tree of the <filename>Release</filename> file. Most commonly, this is
+<literal>Debian</literal>. Specifying this origin in the APT preferences file
+would require the line:
+</simpara>
+<programlisting>
+Pin: release o=Debian
+</programlisting>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>the <literal>Label:</literal> line</term>
+<listitem><simpara>names the label of the packages in the directory tree
+of the <filename>Release</filename> file. Most commonly, this is
+<literal>Debian</literal>. Specifying this label in the APT preferences file
+would require the line:
+</simpara>
+<programlisting>
+Pin: release l=Debian
+</programlisting>
+</listitem>
+</varlistentry>
+</variablelist>
+</para>
+
+<para>All of the <filename>Packages</filename> and <filename>Release</filename>
+files retrieved from locations listed in the &sources-list; file are stored
+in the directory <filename>/var/lib/apt/lists</filename>, or in the file named
+by the variable <literal>Dir::State::Lists</literal> in the <filename>apt.conf</filename> file.
+For example, the file
+<filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename>
+contains the <filename>Release</filename> file retrieved from the site
+<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> architecture
+files from the <literal>contrib</literal> component of the <literal>unstable</literal>
+distribution.</para>
+</refsect2>
+
+<refsect2>
+<title>Optional Lines in an APT Preferences Record</title>
+
+<para>Each record in the APT preferences file can optionally begin with
+one or more lines beginning with the word <literal>Explanation:</literal>.
+This provides a place for comments.</para>
+</refsect2>
+</refsect1>
+
+<refsect1>
+<title>Examples</title>
+<refsect2>
+<title>Tracking Stable</title>
+
+<para>The following APT preferences file will cause APT to assign a
+priority higher than the default (500) to all package versions belonging
+to a <literal>stable</literal> distribution and a prohibitively low priority to
+package versions belonging to other <literal>Debian</literal> distributions.
+
+<programlisting>
+Explanation: Uninstall or do not install any Debian-originated
+Explanation: package versions other than those in the stable distro
+Package: *
+Pin: release a=stable
+Pin-Priority: 900
+
+Package: *
+Pin: release o=Debian
+Pin-Priority: -10
+</programlisting>
+</para>
+
+<para>With a suitable &sources-list; file and the above preferences file,
+any of the following commands will cause APT to upgrade to the
+latest <literal>stable</literal> version(s).
+
+<programlisting>
+apt-get install <replaceable>package-name</replaceable>
+apt-get upgrade
+apt-get dist-upgrade
+</programlisting>
+</para>
+
+<para>The following command will cause APT to upgrade the specified
+package to the latest version from the <literal>testing</literal> distribution;
+the package will not be upgraded again unless this command is given
+again.
+
+<programlisting>
+apt-get install <replaceable>package</replaceable>/testing
+</programlisting>
+</para>
+</refsect2>
+
+ <refsect2>
+ <title>Tracking Testing or Unstable</title>
+
+<para>The following APT preferences file will cause APT to assign
+a high priority to package versions from the <literal>testing</literal>
+distribution, a lower priority to package versions from the
+<literal>unstable</literal> distribution, and a prohibitively low priority
+to package versions from other <literal>Debian</literal> distributions.
+
+<programlisting>
+Package: *
+Pin: release a=testing
+Pin-Priority: 900
+
+Package: *
+Pin: release a=unstable
+Pin-Priority: 800
+
+Package: *
+Pin: release o=Debian
+Pin-Priority: -10
+</programlisting>
+</para>
+
+<para>With a suitable &sources-list; file and the above preferences file,
+any of the following commands will cause APT to upgrade to the latest
+<literal>testing</literal> version(s).
+
+<programlisting>
+apt-get install <replaceable>package-name</replaceable>
+apt-get upgrade
+apt-get dist-upgrade
+</programlisting>
+</para>
+
+<para>The following command will cause APT to upgrade the specified
+package to the latest version from the <literal>unstable</literal> distribution.
+Thereafter, <command>apt-get upgrade</command> will upgrade
+the package to the most recent <literal>testing</literal> version if that is
+more recent than the installed version, otherwise, to the most recent
+<literal>unstable</literal> version if that is more recent than the installed
+version.
+
+<programlisting>
+apt-get install <replaceable>package</replaceable>/unstable
+</programlisting>
+</para>
+</refsect2>
+
+
+<refsect2>
+<title>Tracking the evolution of a codename release</title>
+
+<para>The following APT preferences file will cause APT to assign a
+priority higher than the default (500) to all package versions belonging
+to a specified codename of a distribution and a prohibitively low priority to
+package versions belonging to other <literal>Debian</literal> distributions,
+codenames and archives.
+Note that with this APT preference APT will follow the migration of a release
+from the archive <literal>testing</literal> to <literal>stable</literal> and
+later <literal>oldstable</literal>. If you want to follow for example the progress
+in <literal>testing</literal> notwithstanding the codename changes you should use
+the example configurations above.
+
+<programlisting>
+Explanation: Uninstall or do not install any Debian-originated package versions
+Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid
+Package: *
+Pin: release n=&debian-testing-codename;
+Pin-Priority: 900
+
+Explanation: Debian unstable is always codenamed with sid
+Package: *
+Pin: release n=sid
+Pin-Priority: 800
+
+Package: *
+Pin: release o=Debian
+Pin-Priority: -10
+</programlisting>
+</para>
+
+<para>With a suitable &sources-list; file and the above preferences file,
+any of the following commands will cause APT to upgrade to the
+latest version(s) in the release codenamed with <literal>&debian-testing-codename;</literal>.
+
+<programlisting>
+apt-get install <replaceable>package-name</replaceable>
+apt-get upgrade
+apt-get dist-upgrade
+</programlisting>
+</para>
+
+<para>The following command will cause APT to upgrade the specified
+package to the latest version from the <literal>sid</literal> distribution.
+Thereafter, <command>apt-get upgrade</command> will upgrade
+the package to the most recent <literal>&debian-testing-codename;</literal> version if that is
+more recent than the installed version, otherwise, to the most recent
+<literal>sid</literal> version if that is more recent than the installed
+version.
+
+<programlisting>
+apt-get install <replaceable>package</replaceable>/sid
+</programlisting>
+</para>
+</refsect2>
+</refsect1>
+
+<refsect1>
+<title>Files</title>
+ <variablelist>
+ &file-preferences;
+ </variablelist>
+</refsect1>
+
+<refsect1>
+<title>See Also</title>
+<para>&apt-get; &apt-cache; &apt-conf; &sources-list;
+</para>
+</refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/design.dbk b/doc/design.dbk
new file mode 100644
index 0000000..fabc915
--- /dev/null
+++ b/doc/design.dbk
@@ -0,0 +1,439 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<book lang="en">
+
+<title>The APT project design document</title>
+
+<bookinfo>
+
+<authorgroup>
+ <author>
+ <personname>Manoj Srivastava</personname><email>srivasta@debian.org</email>
+ </author>
+</authorgroup>
+
+<releaseinfo>Version &apt-product-version;</releaseinfo>
+
+<abstract>
+<para>
+This document is an overview of the specifications and design goals of the APT
+project. It also attempts to give a broad description of the implementation
+as well.
+</para>
+</abstract>
+
+<copyright><year>1997</year><holder>Manoj Srivastava</holder></copyright>
+
+<legalnotice>
+<title>License Notice</title>
+<para>
+APT, including this document, is free software; you may redistribute it and/or
+modify it under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any later
+version.
+</para>
+<para>
+This is distributed in the hope that it will be useful, but <emphasis>without
+any warranty</emphasis>; without even the implied warranty of merchantability
+or fitness for a particular purpose. See the GNU General Public License for
+more details.
+</para>
+<para>
+You should have received a copy of the GNU General Public License with your
+Debian system, in <literal>/usr/share/common-licenses/GPL</literal>, or with
+the <command>debiandoc-sgml</command> source package as the file
+<literal>COPYING</literal>. If not, write to the Free Software Foundation,
+Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+</para>
+</legalnotice>
+
+</bookinfo>
+
+<chapter id="introduction"><title>Introduction</title>
+<para>
+APT is supposed to be a replacement for dselect, and not a replacement for
+dpkg. However, since addition functionality has been required for APT, and
+given the fact that this is very closely related to dpkg, it is not
+unreasonable to expect that additional functionality in the underlying dpkg
+would also be requested.
+</para>
+<para>
+Deity/dselect are the first introduction that people have to Debian, and
+unfortunately this first impression contributes greatly to the public
+perception of the distribution. It is imperative that this be a showcase for
+Debian, rather than frighten novices away (which has been an accusation often
+levelled at the current system)
+</para>
+</chapter>
+
+<chapter id="ch2"><title>Requirements</title>
+<orderedlist numeration="arabic">
+<listitem>
+<para>
+APT should be a replacement for dselect. Therefore it should have all the
+functionality that dselect has currently. This is the primary means of
+interaction between the user and the package management system, and it should
+be able to handle all tasks involved in installing, upgrading, and routine
+management without having the users take recourse to the underlying management
+system.
+</para>
+</listitem>
+<listitem>
+<para>
+It should be easier to use and less confusing for novice users. The primary
+stimulus for the creation of APT was the perceived intractability, complexity,
+and non-intuitive behavior of the existing user interface, and as such, human
+factors must be a primary mandate of APT.
+</para>
+</listitem>
+<listitem>
+<para>
+It should be able to group packages more flexibly, and possibly allow
+operations based on a group. One should be able to select, or deselect,
+a coherent group of related packages simultaneously, allowing one to add,
+remove, or upgrade functionality to a machine as one step.
+</para>
+</listitem>
+<listitem>
+<para>
+This would allow APT to handle <emphasis>standard installations</emphasis>,
+namely, one could then install a set of packages to enable a machine to
+fulfill specific tasks. Define a few standard installations, and which
+packages are included therein. The packages should be internally consistent.
+</para>
+</listitem>
+<listitem>
+<para>
+Make use of a keywords field in package headers; provide a standard list of
+keywords for people to use. This could be the underpinning to allow the
+previous two requirements to work (though the developers are not constrained
+to implement the previous requirements using keywords)
+</para>
+</listitem>
+<listitem>
+<para>
+Use dependencies, conflicts, and reverse dependencies to properly order
+packages for installation and removal. This has been a complaint in the past
+that the installation methods do not really understand dependencies, causing
+the upgrade process to break, or allowing the removal of packages that left the
+system in an untenable state by breaking the dependencies on packages that were
+dependent on the package being removed. A special emphasis is placed on
+handling pre-dependencies correctly; the target of a predependency has to be
+fully configured before attempting to install the pre-dependent package. Also,
+<emphasis>configure immediately</emphasis> requests mentioned below should be
+handled.
+</para>
+</listitem>
+<listitem>
+<para>
+Handle replacement of a package providing a virtual package with another (for
+example, it has been very difficult replacing <command>sendmail</command> with
+<command>smail</command>, or vice versa), making sure that the dependencies are
+still satisfied.
+</para>
+</listitem>
+<listitem>
+<para>
+Handle source lists for updates from multiple sources. APT should also be able
+to handle diverse methods of acquiring new packages; local filesystem,
+mountable CD-ROM drives, FTP accessible repositories are some of the methods
+that come to mind. Also, the source lists can be separated into categories,
+such as main, contrib, non-us, non-local, non-free, my-very-own, etc. APT
+should be set up to retrieve the Packages files from these multiple source
+lists, as well as retrieving the packages themselves.
+</para>
+</listitem>
+<listitem>
+<para>
+Handle base of source and acquire all Packages files underneath. (possibly
+select based on architecture), this should be a simple extension of the
+previous requirement.
+</para>
+</listitem>
+<listitem>
+<para>
+Handle remote installation (to be implemented maybe in a future version, it
+still needs to be designed). This would ease the burden of maintaining
+multiple Debian machines on a site. In the authors opinion this is a killer
+difference for the distribution, though it may be too hard a problem to be
+implemented with the initial version of APT. However, some thought must be
+given to this to enable APT to retain hooks for future functionality, or at
+least to refrain from methods that may preclude remote activity. It is
+desirable that adding remote installation not require a redesign of APT from
+the ground up.
+</para>
+</listitem>
+<listitem>
+<para>
+Be scalable. Dselect worked a lot better with 400 packages, but at last count
+the number of packages was around twelve hundred and climbing. This also
+requires APT to pay attention to the needs of small machines which are low on
+memory (though this requirement shall diminish as we move towards bigger
+machines, it would still be nice if Debian worked on all old machines where
+Linux itself would work).
+</para>
+</listitem>
+<listitem>
+<para>
+Handle install immediately requests. Some packages, like watchdog, are
+required to be working for the stability of the machine itself. There are
+others which may be required for the correct functioning of a production
+machine, or which are mission critical applications. APT should, in these
+cases, upgrade the packages with minimal downtime; allowing these packages to
+be one of potentially hundreds of packages being upgraded concurrently may
+not satisfy the requirements of the package or the site. (Watchdog, for
+example, if not restarted quickly, may cause the machine to reboot in the
+midst of installation, which may cause havoc on the machine)
+</para>
+</listitem>
+</orderedlist>
+</chapter>
+
+<chapter id="ch3"><title>Procedural description</title>
+<variablelist>
+<varlistentry>
+<term>Set Options</term>
+<listitem>
+<para>
+This process handles setting of user or site options, and configuration of all
+aspects of APT. It allows the user to set the location and order of package
+sources, allowing them to set up source list details, like ftp site locations,
+passwords, etc. Display options may also be set.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Updates</term>
+<listitem>
+<para>
+Build a list of available packages, using source lists or a base location and
+trawling for Packages files (needs to be aware of architecture). This may
+involve finding and retrieving Packages files, storing them locally for
+efficiency, and parsing the data for later use. This would entail contacting
+various underlying access modules (ftp, cdrom mounts, etc) Use a backing store
+for speed. This may also require downloading the actual package files locally
+for speed.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Local status</term>
+<listitem>
+<para>
+Build up a list of packages already installed. This requires reading and
+writing the local?? status file. For remote installation, this should
+probably use similar mechanisms as the Packages file retrieval does. Use
+the backing store for speed. One should consider multiple backing stores,
+one for each machine.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Relationship determination</term>
+<listitem>
+<para>
+Determine forward and reverse dependencies. All known dependency fields should
+be acted upon, since it is fairly cheap to do so. Update the backing store
+with this information.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Selection</term>
+<listitem>
+<para>
+Present the data to the user. Look at Behan Webster's documentation for the
+user interface procedures. (Note: In the authors opinion deletions and reverse
+dependencies should also be presented to the user, in a strictly symmetric
+fashion; this may make it easier to prevent a package being removed that breaks
+dependencies)
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Ordering of package installations and configuration</term>
+<listitem>
+<para>
+Build a list of events. Simple topological sorting gives order of packages
+in dependency order. At certain points in this ordering,
+predependencies/immediate configure directives cause a break in normal
+ordering. We need to insert the uninstall/purge directive in the stream
+(default: as early as possible).
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Action</term>
+<listitem>
+<para>
+Take the order of installations and removals and build up a stream of events
+to send to the packaging system (dpkg). Execute the list of events if
+successful. Do not partially install packages and leave system in broken
+state. Go to The Selection step as needed.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+</chapter>
+
+<chapter id="ch4"><title>Modules and interfaces</title>
+<variablelist>
+<varlistentry>
+<term>The user interface module</term>
+<listitem>
+<para>
+Look at Behan Webster's documentation.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Widget set</term>
+<listitem>
+<para>
+Related closely to above Could some one present design decisions of the widget
+set here?
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>pdate Module</term>
+<listitem>
+<para>
+Distinct versions of the same package are recorded separately, but if multiple
+Packages files contain the same version of a package, then only the first one
+is recorded. For this reason, the least expensive update source should be
+listed first (local file system is better than a remote ftp site)
+</para>
+<para>
+This module should interact with the user interface module to set and change
+configuration parameters for the modules listed below. It needs to record that
+information in an on disk data file, to be read on future invocations.
+</para>
+<orderedlist numeration="arabic">
+<listitem>
+<para>
+FTP methods
+</para>
+</listitem>
+<listitem>
+<para>
+mount and file traversal module(s)?
+</para>
+</listitem>
+<listitem>
+<para>
+Other methods ???
+</para>
+</listitem>
+</orderedlist>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Status file parser/generator</term>
+<listitem>
+<para>
+The status file records the current state of the system, listing the packages
+installed, etc. The status file is also one method of communicating with dpkg,
+since it is perfectly permissible for the user to use APT to request packages
+be updated, put others on hold, mark other for removal, etc, and then run
+<literal>dpkg -BORGiE</literal> on a file system.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Package file parser/generator</term>
+<listitem>
+<para>
+Related to above. Handle multiple Packages files, from different
+sources. Each package contains a link back to the packages file structure
+that contains details about the origin of the data.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Dependency module</term>
+<listitem>
+<itemizedlist>
+<listitem>
+<para>
+dependency/conflict determination and linking
+</para>
+</listitem>
+<listitem>
+<para>
+reverse dependency generator. Maybe merged with above
+</para>
+</listitem>
+</itemizedlist>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Package ordering Module</term>
+<listitem>
+<para>
+Create an ordering of the actions to be taken.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Event generator</term>
+<listitem>
+<para>
+module to interact with dpkg
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+</chapter>
+
+<chapter id="ch5"><title>Data flow and conversions analysis.</title>
+<screen>
+ ____________
+ __\|ftp modules|
+ / /|___________|
+ _ ____________ / ________________
+ | update | / |mount/local file|
+ |==========================&gt;| module |/_____\| traversals |
+ | |_____________| /|________________|
+ | ^ ^
+ | | | ______________
+ ______|_______ _ _____ ______ | _____v________ \| |
+ |Configuration | |configuration| | |Packages Files| ===|Status file |
+ | module |&lt;=&gt;| data | | |______________| / /|____________|
+ |______________| |_____________| | ^ /
+ ^ | | /
+ | | _______v_______|/_
+ | | | | ________________
+ | | | |/_\| Dependency |
+ | | |backing store |\ /| Module |
+ | | |______________| _|_______________|
+ | \ ^ /| ^
+ | \ | / |
+ | _\|____v_______|/__ ____v_______
+ |_____________________________\| User interaction| | dpkg |
+ /|_________________|&lt;==&gt; Invoker |
+ |___________|
+</screen>
+<para>
+dpkg also interacts with status and available files.
+</para>
+<para>
+The backing store and the associated data structures are the core of APT. All
+modules essentially revolve around the backing store, feeding it data, adding
+and manipulating links and relationships between data in the backing store,
+allowing the user to interact with and modify the data in the backing store,
+and finally writing it out as the status file and possibly issuing directives
+to dpkg.
+</para>
+<para>
+The other focal point for APT is the user interface.
+</para>
+</chapter>
+
+</book>
diff --git a/doc/docbook-html-style.xsl.cmake.in b/doc/docbook-html-style.xsl.cmake.in
new file mode 100644
index 0000000..9216d8e
--- /dev/null
+++ b/doc/docbook-html-style.xsl.cmake.in
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <!-- Import our base stylesheet -->
+ <xsl:import href="@DOCBOOK_XSL@/xhtml-1_1/chunk.xsl" />
+
+ <!-- Since we use xsltproc (not saxon), add a workaround to ensure UTF-8 -->
+ <xsl:template xmlns="http://www.w3.org/1999/xhtml" name="head.content.generator">
+ <xsl:param name="node" select="."/>
+ <meta name="generator" content="DocBook {$DistroTitle} V{$VERSION}"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ </xsl:template>
+
+ <xsl:template name="generate.html.title"/>
+
+ <xsl:template match="releaseinfo" mode="titlepage.mode">
+ <xsl:apply-imports/>
+ <hr/>
+ </xsl:template>
+
+ <xsl:param name="root.filename">index</xsl:param>
+
+ <!-- We do not want a title in HTML. -->
+ <xsl:param name="generate.meta.abstract" select="0"/>
+
+ <!-- We do not want the first subsection on the same page as content. -->
+ <xsl:param name="chunk.first.sections" select="0"/>
+ <xsl:param name="chunk.section.depth" select="0"/>
+ <xsl:param name="chunker.output.indent" select="'yes'"/>
+
+ <xsl:param name="use.id.as.filename" select="1"/>
+
+ <xsl:param name="toc.section.depth" select="1"/>
+ <xsl:param name="generate.section.toc.level" select="0"/>
+ <xsl:param name="section.label.includes.component.label" select="1"/>
+ <xsl:param name="section.autolabel" select="1"/>
+
+ <xsl:param name="generate.css.header" select="1"/>
+
+</xsl:stylesheet>
diff --git a/doc/docbook-text-style.xsl.cmake.in b/doc/docbook-text-style.xsl.cmake.in
new file mode 100644
index 0000000..36af1bc
--- /dev/null
+++ b/doc/docbook-text-style.xsl.cmake.in
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:import href="@DOCBOOK_XSL@/xhtml-1_1/docbook.xsl" />
+
+ <!-- Parameters for optimal text output. -->
+ <xsl:param name="callout.graphics" select="0"/>
+ <xsl:param name="callout.unicode" select="0"/>
+ <xsl:param name="section.autolabel" select="1"/>
+ <xsl:param name="section.label.includes.component.label" select="1"/>
+
+ <!-- Centering and aligning title elements. -->
+ <xsl:template match="/*/title[position()=1]" mode="titlepage.mode">
+ <br/>
+ <center>
+ <xsl:apply-imports/>
+ </center>
+ <br/>
+ <hr/> <!-- No underline, but at least something. -->
+ </xsl:template>
+ <xsl:template match="author|editor" mode="titlepage.mode">
+ <center>
+ <xsl:apply-imports/>
+ </center>
+ </xsl:template>
+
+ <xsl:template match="releaseinfo" mode="titlepage.mode">
+ <center>
+ <xsl:apply-imports/>
+ </center>
+ <hr/>
+ </xsl:template>
+
+ <!-- Dirty hack to get a left margin for paragraphs etc. -->
+ <xsl:template match="legalnotice/*
+ |chapter/*[not(name(.)='section') and not(name(.)='title')]
+ |section/*[not(name(.)='section') and not(name(.)='title')]
+ |appendix/*[not(name(.)='section') and not(name(.)='title')]
+ |footnote/*">
+ <xsl:copy><table><tr><td>&#xa0;&#xa0;&#xa0;</td><td>
+ <xsl:apply-imports/>
+ </td></tr></table></xsl:copy>
+ </xsl:template>
+
+ <!-- Skip URLs if it has something to print. -->
+ <xsl:template match="ulink[.!='']">
+ <xsl:copy-of select="."/>
+ </xsl:template>
+ <!-- Print URLs if nothing to print. -->
+ <xsl:template match="ulink[.='']">
+ <xsl:value-of select="@url"/>
+ </xsl:template>
+
+ <!-- Make clear where notes etc. begin and end. -->
+ <xsl:template match="caution|important|note|tip|warning">
+ <table width="80%" border="1">
+ <colgroup>
+ <col align="justify"/>
+ </colgroup>
+ <tbody>
+ <tr>
+ <td align="justify">
+ <xsl:apply-imports/>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/dpkg-tech.dbk b/doc/dpkg-tech.dbk
new file mode 100644
index 0000000..62c5879
--- /dev/null
+++ b/doc/dpkg-tech.dbk
@@ -0,0 +1,870 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<book lang="en">
+
+<title>dpkg technical manual</title>
+
+<bookinfo>
+
+<authorgroup>
+ <author>
+ <personname>Tom Lees</personname><email>tom@lpsg.demon.co.uk</email>
+ </author>
+</authorgroup>
+
+<releaseinfo>Version &apt-product-version;</releaseinfo>
+
+<abstract>
+<para>
+This document describes the minimum necessary workings for the APT dselect
+replacement. It gives an overall specification of what its external interface
+must look like for compatibility, and also gives details of some internal
+quirks.
+</para>
+</abstract>
+
+<copyright><year>1997</year><holder>Tom Lees</holder></copyright>
+
+<legalnotice>
+<title>License Notice</title>
+<para>
+APT and this document are free software; you can redistribute them and/or
+modify them under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+</para>
+<para>
+For more details, on Debian systems, see the file
+/usr/share/common-licenses/GPL for the full license.
+</para>
+</legalnotice>
+
+</bookinfo>
+
+<chapter id="ch1"><title>Quick summary of dpkg's external interface</title>
+
+<section id="control"><title>Control files</title>
+<para>
+The basic dpkg package control file supports the following major features:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+5 types of dependencies:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+Pre-Depends, which must be satisfied before a package may be unpacked
+</para>
+</listitem>
+<listitem>
+<para>
+Depends, which must be satisfied before a package may be configured
+</para>
+</listitem>
+<listitem>
+<para>
+Recommends, to specify a package which if not installed may severely limit the
+usefulness of the package
+</para>
+</listitem>
+<listitem>
+<para>
+Suggests, to specify a package which may increase the productivity of the
+package
+</para>
+</listitem>
+<listitem>
+<para>
+Conflicts, to specify a package which must NOT be installed in order for the
+package to be configured
+</para>
+</listitem>
+<listitem>
+<para>
+Breaks, to specify a package which is broken by the package and which should
+therefore not be configured while broken
+</para>
+</listitem>
+</itemizedlist>
+<para>
+Each of these dependencies can specify a version and a dependency on that
+version, for example "&lt;= 0.5-1", "== 2.7.2-1", etc. The comparators
+available are:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+"&lt;&lt;" - less than
+</para>
+</listitem>
+<listitem>
+<para>
+"&lt;=" - less than or equal to
+</para>
+</listitem>
+<listitem>
+<para>
+"&gt;&gt;" - greater than
+</para>
+</listitem>
+<listitem>
+<para>
+"&gt;=" - greater than or equal to
+</para>
+</listitem>
+<listitem>
+<para>
+"==" - equal to
+</para>
+</listitem>
+</itemizedlist>
+</listitem>
+<listitem>
+<para>
+The concept of "virtual packages", which many other packages may provide,
+using the Provides mechanism. An example of this is the "httpd" virtual
+package, which all web servers should provide. Virtual package names may be
+used in dependency headers. However, current policy is that virtual packages
+do not support version numbers, so dependencies on virtual packages with
+versions will always fail.
+</para>
+</listitem>
+<listitem>
+<para>
+Several other control fields, such as Package, Version, Description, Section,
+Priority, etc., which are mainly for classification purposes. The package
+name must consist entirely of lowercase characters, plus the characters '+',
+'-', and '.'. Fields can extend across multiple lines - on the second and
+subsequent lines, there is a space at the beginning instead of a field name
+and a ':'. Empty lines must consist of the text " .", which will be ignored,
+as will the initial space for other continuation lines. This feature is
+usually only used in the Description field.
+</para>
+</listitem>
+</itemizedlist>
+</section>
+
+<section id="s1.2"><title>The dpkg status area</title>
+<para>
+The "dpkg status area" is the term used to refer to the directory where dpkg
+keeps its various status files (GNU would have you call it the dpkg shared
+state directory). This is always, on Debian systems, /var/lib/dpkg. However,
+the default directory name should not be hard-coded, but #define'd, so that
+alteration is possible (it is available via configure in dpkg 1.4.0.9 and
+above). Of course, in a library, code should be allowed to override the
+default directory, but the default should be part of the library (so that
+the user may change the dpkg admin dir simply by replacing the library).
+</para>
+<para>
+Dpkg keeps a variety of files in its status area. These are discussed later
+on in this document, but a quick summary of the files is here:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+available - this file contains a concatenation of control information from all
+the packages which dpkg knows about. This is updated using the dpkg commands
+"--update-avail &lt;file&gt;", "--merge-avail &lt;file&gt;", and
+"--clear-avail".
+</para>
+</listitem>
+<listitem>
+<para>
+status - this file contains information on the following things for every
+package:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+Whether it is installed, not installed, unpacked, removed, failed
+configuration, or half-installed (deconfigured in favour of another package).
+</para>
+</listitem>
+<listitem>
+<para>
+Whether it is selected as install, hold, remove, or purge.
+</para>
+</listitem>
+<listitem>
+<para>
+If it is "ok" (no installation problems), or "not-ok".
+</para>
+</listitem>
+<listitem>
+<para>
+It usually also contains the section and priority (so that dselect may classify
+packages not in available)
+</para>
+</listitem>
+<listitem>
+<para>
+For packages which did not initially appear in the "available" file when they
+were installed, the other control information for them.
+</para>
+</listitem>
+</itemizedlist>
+<para>
+The exact format for the "Status:" field is:
+</para>
+<screen>
+ Status: Want Flag Status
+</screen>
+<para>
+Where <replaceable>Want</replaceable> may be one of
+<emphasis>unknown</emphasis>, <emphasis>install</emphasis>,
+<emphasis>hold</emphasis>, <emphasis>deinstall</emphasis>,
+<emphasis>purge</emphasis>. <replaceable>Flag</replaceable> may
+be one of <emphasis>ok</emphasis>, <emphasis>reinstreq</emphasis>.
+<replaceable>Status</replaceable> may
+be one of <emphasis>not-installed</emphasis>, <emphasis>config-files</emphasis>,
+<emphasis>half-installed</emphasis>, <emphasis>unpacked</emphasis>,
+<emphasis>half-configured</emphasis> and <emphasis>installed</emphasis>.
+The states are as follows:-
+</para>
+<variablelist>
+<varlistentry>
+<term>not-installed</term>
+<listitem>
+<para>
+No files are installed from the package, it has no config files left, it
+uninstalled cleanly if it ever was installed.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>unpacked</term>
+<listitem>
+<para>
+The basic files have been unpacked (and are listed in
+/var/lib/dpkg/info/[package].list. There are config files present, but the
+postinst script has _NOT_ been run.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>half-configured</term>
+<listitem>
+<para>
+The package was installed and unpacked, but the postinst script failed in some
+way.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>installed</term>
+<listitem>
+<para>
+All files for the package are installed, and the configuration was also
+successful.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>half-installed</term>
+<listitem>
+<para>
+An attempt was made to remove the package but there was a failure in the
+prerm script.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>config-files</term>
+<listitem>
+<para>
+The package was "removed", not "purged". The config files are left, but
+nothing else.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+<para>
+The two last items are only left in dpkg for compatibility - they are
+understood by it, but never written out in this form.
+</para>
+<para>
+Please see the dpkg source code, <literal>lib/parshelp.c</literal>,
+<emphasis>statusinfos</emphasis>, <emphasis>eflaginfos</emphasis> and
+<emphasis>wantinfos</emphasis> for more details.
+</para>
+</listitem>
+<listitem>
+<para>
+info - this directory contains files from the control archive of every
+package currently installed. They are installed with a prefix of
+"&lt;packagename&gt;.". In addition to this, it also contains a file
+called &lt;package&gt;.list for every package, which contains a list
+of files. Note also that the control file is not copied into here; it
+is instead found as part of status or available.
+</para>
+</listitem>
+<listitem>
+<para>
+methods - this directory is reserved for "method"-specific files - each
+"method" has a subdirectory underneath this directory (or at least,
+it can have). In addition, there is another subdirectory "mnt", where
+misc. filesystems (floppies, CD-ROMs, etc.) are mounted.
+</para>
+</listitem>
+<listitem>
+<para>
+alternatives - directory used by the "update-alternatives" program. It
+contains one file for each "alternatives" interface, which contains
+information about all the needed symlinked files for each alternative.
+</para>
+</listitem>
+<listitem>
+<para>
+diversions - file used by the "dpkg-divert" program. Each diversion takes
+three lines. The first is the package name (or ":" for user diversion), the
+second the original filename, and the third the diverted filename.
+</para>
+</listitem>
+<listitem>
+<para>
+updates - directory used internally by dpkg. This is discussed later, in the
+section <xref linkend="updates"/>.
+</para>
+</listitem>
+<listitem>
+<para>
+parts - temporary directory used by dpkg-split
+</para>
+</listitem>
+</itemizedlist>
+</section>
+
+<section id="s1.3"><title>The dpkg library files</title>
+<para>
+These files are installed under /usr/lib/dpkg (usually), but
+/usr/local/lib/dpkg is also a possibility (as Debian policy dictates). Under
+this directory, there is a "methods" subdirectory. The methods subdirectory in
+turn contains any number of subdirectories for each general method processor
+(note that one set of method scripts can, and is, used for more than one of
+the methods listed under dselect).
+</para>
+<para>
+The following files may be found in each of these subdirectories:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+names - One line per method, two-digit priority to appear on menu at
+beginning, followed by a space, the name, and then another space and
+the short description.
+</para>
+</listitem>
+<listitem>
+<para>
+desc.&lt;name&gt; - Contains the long description displayed by dselect
+when the cursor is put over the &lt;name&gt; method.
+</para>
+</listitem>
+<listitem>
+<para>
+setup - Script or program which sets up the initial values to be used
+by this method. Called with first argument as the status area directory
+(/var/lib/dpkg), second argument as the name of the method (as in the
+directory name), and the third argument as the option (as in the names file).
+</para>
+</listitem>
+<listitem>
+<para>
+install - Script/program called when the "install" option of dselect is run
+with this method. Same arguments as for setup.
+</para>
+</listitem>
+<listitem>
+<para>
+update - Script/program called when the "update" option of dselect is
+run. Same arguments as for setup/install.
+</para>
+</listitem>
+</itemizedlist>
+</section>
+
+<section id="s1.4"><title>The "dpkg" command-line utility</title>
+
+<section id="s1.4.1"><title>"Documented" command-line interfaces</title>
+<para>
+As yet unwritten. You can refer to the other manuals for now. See
+<citerefentry><refentrytitle>dpkg</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+</para>
+</section>
+
+<section id="s1.4.2"><title>Environment variables which dpkg responds to</title>
+<itemizedlist>
+<listitem>
+<para>
+SHELL - used to determine which shell to run.
+</para>
+</listitem>
+<listitem>
+<para>
+CC - used as the C compiler to call to determine the target architecture. The
+default is "gcc".
+</para>
+</listitem>
+<listitem>
+<para>
+PATH - dpkg checks that it can find at least the following files in the path
+when it wants to run package installation scripts, and gives an error if it
+cannot find all of them:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+ldconfig
+</para>
+</listitem>
+<listitem>
+<para>
+start-stop-daemon
+</para>
+</listitem>
+<listitem>
+<para>
+install-info
+</para>
+</listitem>
+<listitem>
+<para>
+update-rc.d
+</para>
+</listitem>
+</itemizedlist>
+</listitem>
+</itemizedlist>
+</section>
+
+<section id="s1.4.3"><title>Assertions</title>
+<para>
+The dpkg utility itself is required for quite a number of packages, even if
+they have been installed with a tool totally separate from dpkg. The reason
+for this is that some packages, in their pre-installation scripts, check that
+your version of dpkg supports certain features. This was broken from the
+start, and it should have actually been a control file header "Dpkg-requires",
+or similar. What happens is that the configuration scripts will abort or
+continue according to the exit code of a call to dpkg, which will stop them
+from being wrongly configured.
+</para>
+<para>
+These special command-line options, which simply return as true or false are
+all prefixed with "--assert-". Here is a list of them (without the prefix):-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+support-predepends - Returns success or failure according to whether a version
+of dpkg which supports predepends properly (1.1.0 or above) is installed,
+according to the database.
+</para>
+</listitem>
+<listitem>
+<para>
+working-epoch - Return success or failure according to whether a version of
+dpkg which supports epochs in version properly (1.4.0.7 or above) is installed,
+according to the database.
+</para>
+</listitem>
+</itemizedlist>
+<para>
+Both these options check the status database to see what version of the
+"dpkg" package is installed, and check it against a known working version.
+</para>
+</section>
+
+<section id="s1.4.4"><title>--predep-package</title>
+<para>
+This strange option is described as follows in the source code:
+</para>
+<screen>
+/* Print a single package which:
+ * (a) is the target of one or more relevant predependencies.
+ * (b) has itself no unsatisfied pre-dependencies.
+ * If such a package is present output is the Packages file entry,
+ * which can be massaged as appropriate.
+ * Exit status:
+ * 0 = a package printed, OK
+ * 1 = no suitable package available
+ * 2 = error
+ */
+</screen>
+<para>
+On further inspection of the source code, it appears that what is does is
+this:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+Looks at the packages in the database which are selected as "install",
+and are installed.
+</para>
+</listitem>
+<listitem>
+<para>
+It then looks at the Pre-Depends information for each of these packages
+from the available file. When it find a package for which any of the
+pre-dependencies are not satisfied, it breaks from the loop through the
+packages.
+</para>
+</listitem>
+<listitem>
+<para>
+It then looks through the unsatisfied pre-dependencies, and looks for
+packages which would satisfy this pre-dependency, stopping on the first
+it finds. If it finds none, it bombs out with an error.
+</para>
+</listitem>
+<listitem>
+<para>
+It then continues this for every dependency of the initial package.
+</para>
+</listitem>
+</itemizedlist>
+<para>
+Eventually, it writes out the record of all the packages to satisfy the
+pre-dependencies. This is used by the disk method to make sure that its
+dependency ordering is correct. What happens is that all pre-depending
+packages are first installed, then it runs dpkg -iGROEB on the directory,
+which installs in the order package files are found. Since pre-dependencies
+mean that a package may not even be unpacked unless they are satisfied, it
+is necessary to do this (usually, since all the package files are unpacked
+in one phase, the configured in another, this is not needed).
+</para>
+</section>
+
+</section>
+
+</chapter>
+
+<chapter id="ch2"><title>dpkg-deb and .deb file internals</title>
+<para>
+This chapter describes the internals to the "dpkg-deb" tool, which is used by
+"dpkg" as a back-end. dpkg-deb has its own tar extraction functions, which is
+the source of many problems, as it does not support long filenames, using
+extension blocks.
+</para>
+
+<section id="s2.1"><title>The .deb archive format</title>
+<para>
+The main principal of the new-format Debian archive (I won't describe the old
+format - for that have a look at deb-old.5), is that the archive really is an
+archive - as used by "ar" and friends. However, dpkg-deb uses this format
+internally, rather than calling "ar". Inside this archive, there are usually
+the following members:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+debian-binary
+</para>
+</listitem>
+<listitem>
+<para>
+control.tar.gz
+</para>
+</listitem>
+<listitem>
+<para>
+data.tar.gz
+</para>
+</listitem>
+</itemizedlist>
+<para>
+The debian-binary member consists simply of the string "2.0", indicating
+the format version. control.tar.gz contains the control files (and scripts),
+and the data.tar.gz contains the actual files to populate the filesystem
+with. Both tarfiles extract straight into the current directory. Information
+on the tar formats can be found in the GNU tar info page. Since dpkg-deb
+calls "tar -cf" to build packages, the Debian packages use the GNU extensions.
+</para>
+</section>
+
+<section id="s2.2"><title>The dpkg-deb command-line</title>
+<para>
+dpkg-deb documents itself thoroughly with its '--help' command-line
+option. However, I am including a reference to these for
+completeness. dpkg-deb supports the following options:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+--build (-b) &lt;dir&gt; - builds a .deb archive, takes a directory which
+contains all the files as an argument. Note that the directory
+&lt;dir&gt;/DEBIAN will be packed separately into the control archive.
+</para>
+</listitem>
+<listitem>
+<para>
+--contents (-c) &lt;debfile&gt; - Lists the contents of the "data.tar.gz"
+member.
+</para>
+</listitem>
+<listitem>
+<para>
+--control (-e) &lt;debfile&gt; - Extracts the control archive into a directory
+called DEBIAN. Alternatively, with another argument, it will extract it into a
+different directory.
+</para>
+</listitem>
+<listitem>
+<para>
+--info (-I) &lt;debfile&gt; - Prints the contents of the "control" file in the
+control archive to stdout. Alternatively, giving it other arguments will cause
+it to print the contents of those files instead.
+</para>
+</listitem>
+<listitem>
+<para>
+--field (-f) &lt;debfile&gt; &lt;field&gt; ... - Prints any number of fields
+from the "control" file. Giving it extra arguments limits the fields it prints
+to only those specified. With no command-line arguments other than a filename,
+it is equivalent to -I and just the .deb filename.
+</para>
+</listitem>
+<listitem>
+<para>
+--extract (-x) &lt;debfile&gt; &lt;dir&gt; - Extracts the data archive of a
+debian package under the directory &lt;dir&gt;.
+</para>
+</listitem>
+<listitem>
+<para>
+--vextract (-X) &lt;debfile&gt; &lt;dir&gt; - Same as --extract, except it
+is equivalent of giving tar the '-v' option - it prints the filenames as it
+extracts them.
+</para>
+</listitem>
+<listitem>
+<para>
+--fsys-tarfile &lt;debfile&gt; - This option outputs a gunzip'd version of
+data.tar.gz to stdout.
+</para>
+</listitem>
+<listitem>
+<para>
+--new - sets the archive format to be used to the new Debian format
+</para>
+</listitem>
+<listitem>
+<para>
+--old - sets the archive format to be used to the old Debian format
+</para>
+</listitem>
+<listitem>
+<para>
+--debug - Tells dpkg-deb to produce debugging output
+</para>
+</listitem>
+<listitem>
+<para>
+--nocheck - Tells dpkg-deb not to check the sanity of the control file
+</para>
+</listitem>
+<listitem>
+<para>
+--help (-h) - Gives a help message
+</para>
+</listitem>
+<listitem>
+<para>
+--version - Shows the version number
+</para>
+</listitem>
+<listitem>
+<para>
+--licence/--license (UK/US spellings) - Shows a brief outline of the GPL
+</para>
+</listitem>
+</itemizedlist>
+
+<section id="s2.2.1"><title>Internal checks used by dpkg-deb when building packages</title>
+<para>
+Here is a list of the internal checks used by dpkg-deb when building
+packages. It is in the order they are done.
+</para>
+<itemizedlist>
+<listitem>
+<para>
+First, the output Debian archive argument, if it is given, is checked using
+stat. If it is a directory, an internal flag is set. This check is only made
+if the archive name is specified explicitly on the command-line. If the
+argument was not given, the default is the directory name, with ".deb"
+appended.
+</para>
+</listitem>
+<listitem>
+<para>
+Next, the control file is checked, unless the --nocheck flag was specified on
+the command-line. dpkg-deb will bomb out if the second argument to --build was
+a directory, and --nocheck was specified. Note that dpkg-deb will not be able
+to determine the name of the package in this case. In the control file, the
+following things are checked:-
+</para>
+<itemizedlist>
+<listitem>
+<para>
+The package name is checked to see if it contains any invalid characters (see
+<xref linkend="control"/> for this).
+</para>
+</listitem>
+<listitem>
+<para>
+The priority field is checked to see if it uses standard values, and
+user-defined values are warned against. However, note that this check is now
+redundant, since the control file no longer contains the priority - the
+changes file now does this.
+</para>
+</listitem>
+<listitem>
+<para>
+The control file fields are then checked against the standard list of fields
+which appear in control files, and any "user-defined" fields are reported as
+warnings.
+</para>
+</listitem>
+<listitem>
+<para>
+dpkg-deb then checks that the control file contains a valid version number.
+</para>
+</listitem>
+</itemizedlist>
+</listitem>
+<listitem>
+<para>
+After this, in the case where a directory was specified to build the .deb file
+in, the filename is created as "directory/pkg_ver.deb" or
+"directory/pkg_ver_arch.deb", depending on whether the control file contains
+an architecture field.
+</para>
+</listitem>
+<listitem>
+<para>
+Next, dpkg-deb checks for the &lt;dir&gt;/DEBIAN directory. It complains if it
+doesn't exist, or if it has permissions &lt; 0755, or &gt; 0775.
+</para>
+</listitem>
+<listitem>
+<para>
+It then checks that all the files in this subdir are either symlinks or plain
+files, and have permissions between 0555 and 0775.
+</para>
+</listitem>
+<listitem>
+<para>
+The conffiles file is then checked to see if the filenames are too
+long. Warnings are produced for each that is. After this, it checks
+that the package provides initial copies of each of these conffiles,
+and that they are all plain files.
+</para>
+</listitem>
+</itemizedlist>
+</section>
+
+</section>
+
+</chapter>
+
+<chapter id="ch3"><title>dpkg internals</title>
+<para>
+This chapter describes the internals of dpkg itself. Although the low-level
+formats are quite simple, what dpkg does in certain cases often does not make
+sense.
+</para>
+
+<section id="updates"><title>Updates</title>
+<para>
+This describes the /var/lib/dpkg/updates directory. The function of this
+directory is somewhat strange, and seems only to be used internally. A
+function called cleanupdates is called whenever the database is scanned. This
+function in turn uses
+<citerefentry><refentrytitle>scandir</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+to sort the files in this directory. Files who names do not consist entirely
+of digits are discarded. dpkg also causes a fatal error if any of the
+filenames are different lengths.
+</para>
+<para>
+After having scanned the directory, dpkg in turn parses each file the same way
+it parses the status file (they are sorted by the scandir to be in numerical
+order). After having done this, it then writes the status information back to
+the "status" file, and removes all the "updates" files.
+</para>
+<para>
+These files are created internally by dpkg's "checkpoint" function, and are
+cleaned up when dpkg exits cleanly.
+</para>
+<para>
+Judging by the use of the updates directory I would call it a Journal. Inorder
+to efficiently ensure the complete integrity of the status file dpkg will
+"checkpoint" or journal all of it's activities in the updates directory. By
+merging the contents of the updates directory (in order!!) against the original
+status file it can get the precise current state of the system, even in the
+event of a system failure while dpkg is running.
+</para>
+<para>
+The other option would be to sync-rewrite the status file after each operation,
+which would kill performance.
+</para>
+<para>
+It is very important that any program that uses the status file abort if the
+updates directory is not empty! The user should be informed to run dpkg
+manually (what options though??) to correct the situation.
+</para>
+</section>
+
+<section id="s3.2"><title>What happens when dpkg reads the database</title>
+<para>
+First, the status file is read. This gives dpkg an initial idea of the
+packages that are there. Next, the updates files are read in, overriding the
+status file, and if necessary, the status file is re-written, and updates files
+are removed. Finally, the available file is read. The available file is read
+with flags which preclude dpkg from updating any status information from it,
+though - installed version, etc., and is also told to record that the packages
+it reads this time are available, not installed.
+</para>
+<para>
+More information on updates is given above.
+</para>
+</section>
+
+<section id="s3.3"><title>How dpkg compares version numbers</title>
+<para>
+Version numbers consist of three parts: the epoch, the upstream version, and
+the Debian revision. Dpkg compares these parts in that order. If the epochs
+are different, it returns immediately, and so on.
+</para>
+<para>
+However, the important part is how it compares the versions which are
+essentially stored as just strings. These are compared in two distinct
+parts: those consisting of numerical characters (which are evaluated, and
+then compared), and those consisting of other characters. When comparing
+non-numerical parts, they are compared as the character values (ASCII),
+but non-alphabetical characters are considered "greater than" alphabetical
+ones. Also note that longer strings (after excluding differences where
+numerical values are equal) are considered "greater than" shorter ones.
+</para>
+<para>
+Here are a few examples of how these rules apply:-
+</para>
+<screen>
+15 &gt; 10
+0010 == 10
+
+d.r &gt; dsr
+32.d.r == 0032.d.r
+d.rnr &lt; d.rnrn
+</screen>
+</section>
+
+</chapter>
+
+</book>
diff --git a/doc/examples/CMakeLists.txt b/doc/examples/CMakeLists.txt
new file mode 100644
index 0000000..8d9ea06
--- /dev/null
+++ b/doc/examples/CMakeLists.txt
@@ -0,0 +1,4 @@
+install(FILES apt.conf configure-index preferences
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples)
+install(FILES apt-ftparchive.conf ftp-archive.conf
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}/../apt-utils/examples)
diff --git a/doc/examples/apt-ftparchive.conf b/doc/examples/apt-ftparchive.conf
new file mode 100644
index 0000000..0e8bcb2
--- /dev/null
+++ b/doc/examples/apt-ftparchive.conf
@@ -0,0 +1,46 @@
+// This config is for use with the pool-structure for the packages, thus we
+// don't use a Tree Section in here
+
+// The debian archive should be in the current working dir
+Dir {
+ ArchiveDir ".";
+ CacheDir ".";
+};
+
+// Create Packages, Packages.gz and Packages.xz, remove/add as needed
+Default {
+ Packages::Compress ". gzip xz";
+ Sources::Compress ". gzip xz";
+ Contents::Compress ". gzip xz";
+};
+
+// Includes the main section. You can structure the directory tree under
+// ./pool/main any way you like, apt-ftparchive will take any deb (and
+// source package) it can find. This creates a Packages a Sources and a
+// Contents file for these in the main section of the sid release
+BinDirectory "pool/main" {
+ Packages "dists/sid/main/binary-i386/Packages";
+ Sources "dists/sid/main/source/Sources";
+ Contents "dists/sid/main/Contents-i386";
+}
+
+// This is the same for the contrib section
+BinDirectory "pool/contrib" {
+ Packages "dists/sid/contrib/binary-i386/Packages";
+ Sources "dists/sid/contrib/source/Sources";
+ Contents "dists/sid/contrib/Contents-i386";
+}
+
+// This is the same for the non-free section
+BinDirectory "pool/non-free" {
+ Packages "dists/sid/non-free/binary-i386/Packages";
+ Sources "dists/sid/non-free/source/Sources";
+ Contents "dists/sid/non-free/Contents-i386";
+};
+
+// By default all Packages should have the extension ".deb"
+Default {
+ Packages {
+ Extensions ".deb";
+ };
+};
diff --git a/doc/examples/apt.conf b/doc/examples/apt.conf
new file mode 100644
index 0000000..8f93be7
--- /dev/null
+++ b/doc/examples/apt.conf
@@ -0,0 +1,31 @@
+/* This file is a sample configuration file with a few harmless sample
+ options.
+*/
+
+APT
+{
+ // Options for apt-get
+ Get
+ {
+ Download-Only "false";
+ };
+
+};
+
+// Options for the downloading routines
+Acquire
+{
+ Retries "0";
+};
+
+// Things that effect the APT dselect method
+DSelect
+{
+ Clean "auto"; // always|auto|prompt|never
+};
+
+DPkg
+{
+ // Probably don't want to use force-downgrade..
+ Options {"--force-overwrite";}
+}
diff --git a/doc/examples/configure-index b/doc/examples/configure-index
new file mode 100644
index 0000000..5e317d7
--- /dev/null
+++ b/doc/examples/configure-index
@@ -0,0 +1,824 @@
+/* This file is an index of all APT configuration directives.
+ Instead of actual values the option has the type as value.
+ Additional explanations and possible values might be detailed in a comment.
+
+ Most of the options have sane default values,
+ unless you have specific needs you should NOT include arbitrary
+ items in a custom configuration.
+
+ In some instances involving filenames it is possible to set the default
+ directory when the path is evaluated. This means you can use relative
+ paths within the sub scope.
+
+ The configuration directives are specified in a tree with {} designating
+ a subscope relative to the tag before the {}. You can further specify
+ a subscope using scope notation e.g.,
+ APT::Architecture "i386";
+ This is prefixed with the current scope. Scope notation must be used
+ if an option is specified on the command line with -o.
+
+ The most complex type is perhaps <LIST>:
+ APT::Architectures "<LIST>";
+ In configuration files it usually appears as a subscope of its own like:
+ APT::Architectures { "amd64"; "i386"; };
+ but the same can be achieved with (needed for commandline)
+ APT::Architectures "amd64,i386";
+ which overrides the values in the scope notation.
+
+ See apt.conf manpage for a detailed description of many common options
+ and the syntax of configuration files and commandline options!
+*/
+
+quiet "<INT>" {
+ NoUpdate "<BOOL>"; // never update progress information - included in -q=1
+ NoProgress "<BOOL>"; // disables the 0% → 100% progress on cache generation and stuff
+ NoStatistic "<BOOL>"; // no "42 kB downloaded" stats in update
+ ReleaseInfoChange "<BOOL>" // don't even print the notices if the info change is allowed
+ {
+ Origin "<BOOL>";
+ Label "<BOOL>";
+ Version "<BOOL>";
+ Codename "<BOOL>";
+ Suite "<BOOL>";
+ DefaultPin "<BOOL>";
+ };
+};
+
+// Options for APT in general
+APT
+{
+ Architecture "<STRING>"; // debian architecture like amd64, i386, powerpc, armhf, mips, …
+ Architectures "<LIST>"; // a list of (foreign) debian architectures, defaults to: dpkg --print-foreign-architectures
+
+ Build-Essential "<LIST>"; // list of package names
+ Build-Profiles "<STRING_OR_LIST>";
+
+ NeverAutoRemove "<LIST>"; // list of package name regexes
+
+ // Options for apt-get
+ Get
+ {
+ // build-dep options:
+ Host-Architecture "<STRING>"; // debian architecture
+ Arch-Only "<BOOL>";
+ Indep-Only "<BOOL>";
+ Build-Dep-Automatic "<BOOL>";
+
+ // (non-)confirming options
+ Force-Yes "<BOOL>"; // allows downgrades, essential removal and eats children
+ Allow-Downgrades "<BOOL>";
+ Allow-Change-Held-Packages "<BOOL>";
+ Allow-Remove-Essential "<BOOL>";
+ Assume-Yes "<BOOL>"; // not as dangerous, but use with care still
+ Assume-No "<BOOL>";
+ Trivial-Only "<BOOL>";
+ Remove "<BOOL>";
+ AllowUnauthenticated "<BOOL>"; // skip security
+
+ AutomaticRemove "<BOOL>";
+ HideAutoRemove "<STRING_OR_BOOL>"; // yes, no, small
+
+ Simulate "<BOOL>";
+ Show-User-Simulation-Note "<BOOL>";
+ Fix-Broken "<BOOL>";
+ Fix-Policy-Broken "<BOOL>";
+
+ Download "<BOOL>";
+ Download-Only "<BOOL>";
+ Fix-Missing "<BOOL>";
+ Print-URIs "<BOOL>";
+ List-Cleanup "<BOOL>";
+
+ Show-Upgraded "<BOOL>";
+ Show-Versions "<BOOL>";
+ Upgrade "<BOOL>";
+ Only-Upgrade "<BOOL>";
+ Upgrade-Allow-New "<BOOL>";
+ Purge "<BOOL>";
+ ReInstall "<BOOL>";
+ Compile "<BOOL>";
+ Only-Source "<BOOL>";
+ Diff-Only "<BOOL>";
+ Tar-Only "<BOOL>";
+ Dsc-Only "<BOOL>";
+
+ Autosolving "<BOOL>";
+ CallResolver "<BOOL>";
+ IndexTargets::ReleaseInfo "<BOOL>";
+ IndexTargets::format "<STRING>";
+
+ Update
+ {
+ InteractiveReleaseInfoChanges "<BOOL>";
+ SourceListWarnings "<BOOL>";
+ };
+ };
+
+ Cache
+ {
+ AllNames "<BOOL>";
+ AllVersions "<BOOL>";
+ Only-Source "<BOOL>";
+ GivenOnly "<BOOL>";
+ RecurseDepends "<BOOL>";
+ Installed "<BOOL>";
+ Important "<BOOL>";
+ ShowDependencyType "<BOOL>";
+ ShowVersion "<BOOL>";
+ ShowPre-Depends "<BOOL>";
+ ShowDepends "<BOOL>";
+ ShowRecommends "<BOOL>";
+ ShowSuggests "<BOOL>";
+ ShowReplaces "<BOOL>";
+ ShowConflicts "<BOOL>";
+ ShowBreaks "<BOOL>";
+ ShowEnhances "<BOOL>";
+ ShowOnlyFirstOr "<BOOL>";
+ ShowImplicit "<BOOL>";
+ ShowVirtuals "<BOOL>";
+ ShowFull "<BOOL>";
+ NamesOnly "<BOOL>";
+
+ show::version "<INT>";
+ search::version "<INT>";
+ };
+
+ CDROM
+ {
+ Rename "<BOOL>";
+ NoMount "<BOOL>";
+ Fast "<BOOL>";
+ NoAct "<BOOL>";
+ Thorough "<BOOL>";
+ DropTranslation "<BOOL>";
+ };
+
+ Update
+ {
+ Pre-Invoke {"touch /var/lib/apt/pre-update-stamp"; };
+ Post-Invoke {"touch /var/lib/apt/post-update-stamp"; };
+ };
+
+ /* define a new supported compressor on the fly
+ Compressor::rev {
+ Name "rev";
+ Extension ".reversed";
+ Binary "rev";
+ CompressArg {};
+ UncompressArg {};
+ Cost "10";
+ };
+ */
+ Compressor "<LIST>";
+ Compressor::** "<UNDEFINED>";
+
+ Authentication
+ {
+ TrustCDROM "false"; // consider the CD-ROM always trusted
+ };
+
+ Clean-Installed "<BOOL>";
+
+ // Some general options
+ Default-Release "<STRING>";
+ Ignore-Hold "<BOOL>";
+ Immediate-Configure "<BOOL>";
+ Immediate-Configure-All "<BOOL>";
+ Force-LoopBreak "<BOOL>";
+
+ Cache-Start "<INT>";
+ Cache-Grow "<INT>";
+ Cache-Limit "<INT>";
+ Cache-Fallback "<BOOL>";
+ Cache-HashTableSize "<INT>";
+
+ // consider Recommends/Suggests as important dependencies that should
+ // be installed by default
+ Install-Recommends "<BOOL>";
+ Install-Suggests "<BOOL>";
+ // reverse Recommends or Suggests prevent autoremoval
+ AutoRemove::RecommendsImportant "<BOOL>";
+ AutoRemove::SuggestsImportant "<BOOL>";
+
+ // consider dependencies of packages in this section manual
+ Never-MarkAuto-Sections {"metapackages"; "universe/metapackages"; };
+
+ // Write progress messages on this fd (for stuff like base-config)
+ Status-Fd "<INT>";
+ Status-deb822-Fd "<INT>";
+ // Keep the list of FDs open (normally apt closes all fds when it
+ // does a ExecFork)
+ Keep-Fds {};
+
+ // control parameters for cron jobs by /etc/cron.daily/apt documented there
+ Periodic {};
+};
+
+// Options for the downloading routines
+Acquire
+{
+ Queue-Mode "<STRING>"; // host or access
+ Retries "<INT>";
+ Source-Symlinks "<BOOL>";
+ ForceHash "<STRING>"; // hashmethod used for expected hash: sha256, sha1 or md5sum
+
+ AllowTLS "<BOOL>"; // whether support for tls is enabled
+
+ PDiffs "<BOOL>"; // try to get the IndexFile diffs
+ PDiffs::FileLimit "<INT>"; // don't use diffs if we would need more than 4 diffs
+ PDiffs::SizeLimit "<INT>"; // don't use diffs if size of all patches excess X% of the size of the original file
+ PDiffs::Merge "<BOOL>";
+
+ Check-Valid-Until "<BOOL>";
+ Max-ValidTime "<INT>"; // time in seconds
+ Max-ValidTime::* "<INT>"; // repository label specific configuration
+ Min-ValidTime "<INT>"; // time in seconds
+ Min-ValidTime::* "<INT>"; // repository label specific configuration
+ Check-Date "<BOOL>"; // whether to check the "Date" field
+ Max-FutureTime "<INT>"; // seconds to allow release file's Date field to be in the future (default 10)
+ Max-FutureTime::* "<INT>"; // repository label specific configuration
+
+ SameMirrorForAllIndexes "<BOOL>"; // use the mirror serving the Release file for Packages & co
+
+ AllowInsecureRepositories "<BOOL>";
+ AllowWeakRepositories "<BOOL>";
+ AllowDowngradeToInsecureRepositories "<BOOL>";
+ // allow repositories to change information potentially breaking user config like pinning
+ AllowReleaseInfoChange "<BOOL>"
+ {
+ Origin "<BOOL>";
+ Label "<BOOL>";
+ Version "<BOOL>"; // allowed by default
+ Codename "<BOOL>";
+ Suite "<BOOL>";
+ DefaultPin "<BOOL>";
+ };
+
+ // HTTP method configuration
+ http
+ {
+ Proxy "http://127.0.0.1:3128";
+ Proxy::http.us.debian.org "DIRECT"; // Specific per-host setting
+ Timeout "30";
+ ConnectionAttemptDelayMsec "250";
+ Pipeline-Depth "5";
+ AllowRedirect "true";
+
+ // Cache Control. Note these do not work with Squid 2.0.2
+ No-Cache "false";
+ Max-Age "86400"; // 1 Day age on index files
+ No-Store "false"; // Prevent the cache from storing archives
+ Dl-Limit "<INT>"; // Kb/sec maximum download rate
+ User-Agent "Debian APT-HTTP/1.3";
+ Referer "<STRING>"; // Set the HTTP Referer [sic!] header to given value
+ };
+
+ // HTTPS method configuration: uses the http
+ // - proxy config
+ // - cache-control values
+ // - Dl-Limit, Timeout, ... values
+ // if not set explicit for https
+ https
+ {
+ Verify-Peer "false";
+ SslCert "/etc/apt/some.pem";
+ CaPath "/etc/ssl/certs";
+ Verify-Host "true";
+ AllowRedirect "true";
+
+ Timeout "30";
+ ConnectionAttemptDelayMsec "250";
+ AllowRedirect "true";
+
+ // Cache Control. Note these do not work with Squid 2.0.2
+ No-Cache "false";
+ Max-Age "86400"; // 1 Day age on index files
+ No-Store "false"; // Prevent the cache from storing archives
+ Dl-Limit "<INT>"; // Kb/sec maximum download rate
+
+ User-Agent "Debian APT-CURL/1.0";
+ };
+
+ ftp
+ {
+ Proxy "ftp://127.0.0.1/";
+ Proxy::http.us.debian.org "DIRECT"; // Specific per-host setting
+
+ /* Required script to perform proxy login. This example should work
+ for tisfwtk */
+ ProxyLogin
+ {
+ "USER $(PROXY_USER)";
+ "PASS $(PROXY_PASS)";
+ "USER $(SITE_USER)@$(SITE):$(SITE_PORT)";
+ "PASS $(SITE_PASS)";
+ };
+
+ Timeout "30";
+ ConnectionAttemptDelayMsec "250";
+
+ /* Passive mode control, proxy, non-proxy and per-host. Pasv mode
+ is preferred if possible */
+ Passive "true";
+ Proxy::Passive "true";
+ Passive::http.us.debian.org "true"; // Specific per-host setting
+ };
+
+ cdrom
+ {
+ AutoDetect "<BOOL>"; // do auto detection of the cdrom mountpoint
+ // when auto-detecting, only look for cdrom/dvd. when this is false
+ // it will support any removable device as a "cdrom" source
+ CdromOnly "true";
+
+ // cdrom mountpoint (needs to be defined in fstab if AutoDetect is not used)
+ mount "/cdrom";
+
+ // You need the trailing slash!
+ "/cdrom/"
+ {
+ Mount "sleep 1000";
+ UMount "sleep 500";
+ }
+ };
+
+ gpgv
+ {
+ Options {"--ignore-time-conflict";} // not very useful on a normal system
+ };
+
+ /* CompressionTypes
+ {
+ bz2 "bzip2";
+ lzma "lzma";
+ gz "gzip";
+
+ Order { "uncompressed"; "gz"; "lzma"; "bz2"; };
+ }; */
+ CompressionTypes::Order "<LIST>";
+ CompressionTypes::* "<STRING>";
+
+ Languages "<LIST>"; // "environment,de,en,none,fr";
+
+ // Location of the changelogs with the placeholder @CHANGEPATH@ (e.g. "main/a/apt/apt_1.1")
+ Changelogs::URI
+ {
+ // Origin::Debian "https://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog";
+ Origin::* "<STRING>";
+ Label::* "<STRING>";
+ Override::Origin::* "<STRING>";
+ Override::Label::* "<STRING>";
+ };
+ Changelogs::AlwaysOnline "<BOOL>"; // even if the changelog file exists get it online (as the file is incomplete)
+ Changelogs::AlwaysOnline::Origin::* "<BOOL>";
+};
+
+// Directory layout
+Dir "<DIR>"
+{
+ Ignore-Files-Silently "<LIST>"; // of regexes: "\.dpkg-[a-z]+$,\.bak$,~$";
+
+ // Location of the state dir
+ State "<DIR>"
+ {
+ Lists "<DIR>";
+ status "<FILE>";
+ extended_states "<FILE>";
+ cdroms "<FILE>";
+ };
+
+ // Location of the cache dir
+ Cache "<DIR>" {
+ Archives "<DIR>";
+ Backup "backup/"; // backup directory created by /etc/cron.daily/apt
+ srcpkgcache "<FILE>";
+ pkgcache "<FILE>";
+ };
+
+ // Config files
+ Etc "<DIR>" {
+ Main "<FILE>";
+ Netrc "<FILE>";
+ NetrcParts "<DIR>";
+ Parts "<DIR>";
+ Preferences "<FILE>";
+ PreferencesParts "<DIR>";
+ SourceList "<FILE>";
+ SourceParts "<DIR>";
+ Trusted "<FILE>";
+ TrustedParts "<DIR>";
+ };
+
+ // Locations of binaries
+ Bin {
+ methods "<DIR>";
+ methods::* "<FILE>";
+ gpg "/usr/bin/gpgv";
+ dpkg "<PROGRAM_PATH>";
+ dpkg-source "<PROGRAM_PATH>";
+ dpkg-buildpackage "/usr/bin/dpkg-buildpackage";
+ lz4 "<PROGRAM_PATH>";
+ zstd "<PROGRAM_PATH>";
+ gzip "<PROGRAM_PATH>";
+ xz "<PROGRAM_PATH>";
+ bzip2 "<PROGRAM_PATH>";
+ lzma "<PROGRAM_PATH>";
+ uncompressed "<PROGRAM_PATH>";
+
+ solvers "<LIST>"; // of directories
+ planners "<LIST>"; // of directories
+ };
+
+ // Location of the logfiles
+ Log "<DIR>" {
+ Terminal "<FILE>";
+ History "<FILE>";
+ Solver "<FILE>";
+ Planner "<FILE>";
+ };
+
+ Media
+ {
+ MountPath "/media/apt"; // Media AutoDetect mount path
+ };
+};
+
+// Things that effect the APT dselect method
+DSelect
+{
+ Clean "auto"; // always|auto|prompt|never
+ Options "-f";
+ UpdateOptions "";
+ PromptAfterUpdate "no";
+ CheckDir "no";
+}
+
+DPkg
+{
+ NoTriggers "<BOOL>";
+ ConfigurePending "<BOOL>";
+ TriggersPending "<BOOL>";
+
+ // Probably don't want to use force-downgrade..
+ Options {"--force-overwrite";"--force-downgrade";}
+
+ // Defaults to /usr/sbin:/usr/bin:/sbin:/bin, might be set to empty
+ // string to inherit from environment
+ Path "<STRING>";
+
+ // Auto re-mounting of a readonly /usr
+ Pre-Invoke {"mount -o remount,rw /usr";};
+ Post-Invoke {"mount -o remount,ro /usr";};
+
+ Chroot-Directory "/";
+
+ // Prevents daemons from getting cwd as something mountable (default)
+ Run-Directory "/";
+
+ // Build options for apt-get source --compile
+ Build-Options "-b -uc";
+
+ // Pre-configure all packages before they are installed using debconf.
+ Pre-Install-Pkgs {"dpkg-preconfigure --apt --priority=low --frontend=dialog";};
+
+ // Flush the contents of stdin before forking dpkg.
+ FlushSTDIN "true";
+
+ MaxArgBytes "<INT>"; // Control the size of the command line passed to dpkg.
+ Install::Recursive "<BOOL>" // avoid long commandlines by recursive install in a tmpdir
+ {
+ force "<BOOL>"; // not all dpkg versions support this, so autodetection is default
+ minimum "<INT>"; // don't bother if its just a few packages
+ numbered "<BOOL>"; // avoid M-A:same ordering bug in dpkg
+ };
+
+ UseIONice "<BOOL>";
+
+ // controls if apt will apport on the first dpkg error or if it
+ // tries to install as many packages as possible
+ StopOnError "true";
+
+ Progress-Fancy {
+ progress-fg "<STRING>";
+ progress-bg "<STRING>";
+ progress-bar "<BOOL>";
+ };
+
+ // Set a shutdown block inhibitor on systemd systems while running dpkg
+ Inhibit-Shutdown "<BOOL>";
+}
+
+/* Options you can set to see some debugging text They correspond to names
+ of classes in the source code */
+Debug
+{
+ pkgInitConfig "<BOOL>";
+ pkgProblemResolver "<BOOL>";
+ pkgProblemResolver::ShowScores "<BOOL>";
+ pkgDepCache::AutoInstall "<BOOL>"; // what packages apt installs to satisfy dependencies
+ pkgDepCache::Marker "<BOOL>";
+ pkgCacheGen "<BOOL>";
+ pkgAcquire "<BOOL>";
+ pkgAcquire::Worker "<BOOL>";
+ pkgAcquire::Auth "<BOOL>";
+ pkgAcquire::Diffs "<BOOL>";
+ pkgDPkgPM "<BOOL>";
+ pkgDPkgProgressReporting "<BOOL>";
+ pkgOrderList "<BOOL>";
+ pkgPackageManager "<BOOL>"; // OrderList/Configure debugging
+ pkgAutoRemove "<BOOL>"; // show information about automatic removes
+ BuildDeps "<BOOL>";
+ pkgInitialize "<BOOL>"; // This one will dump the configuration space
+ NoLocking "<BOOL>";
+ Acquire::Ftp "<BOOL>"; // Show ftp command traffic
+ Acquire::Http "<BOOL>"; // Show http command traffic
+ Acquire::Https "<BOOL>"; // Show https debug
+ Acquire::gpgv "<BOOL>"; // Show the gpgv traffic
+ Acquire::cdrom "<BOOL>"; // Show cdrom debug output
+ Acquire::Transaction "<BOOL>";
+ Acquire::Progress "<BOOL>";
+ aptcdrom "<BOOL>"; // Show found package files
+ IdentCdrom "<BOOL>";
+ acquire::netrc "<BOOL>"; // netrc parser
+ RunScripts "<BOOL>"; // debug invocation of external scripts
+ pkgPolicy "<BOOL>";
+ GetListOfFilesInDir "<BOOL>";
+ pkgAcqArchive::NoQueue "<BOOL>";
+ Hashes "<BOOL>";
+ APT::FtpArchive::Clean "<BOOL>";
+ EDSP::WriteSolution "<BOOL>";
+ InstallProgress::Fancy "<BOOL>";
+ APT::Progress::PackageManagerFd "<BOOL>";
+ SetupAPTPartialDirectory::AssumeGood "<BOOL>";
+};
+
+pkgCacheGen
+{
+ Essential "<STRING>"; // native,all, none, installed
+ ForceEssential "<STRING_OR_LIST>"; // package names
+ ForceImportant "<LIST>"; // package names
+};
+
+// modify points awarded for various facts about packages while
+// resolving conflicts in the dependency resolution process
+pkgProblemResolver::Scores
+{
+ Required "<INT>";
+ Important "<INT>";
+ Standard "<INT>";
+ Optional "<INT>";
+ Extra "<INT>";
+ Essentials "<INT>";
+ NotObsolete "<INT>";
+ Depends "<INT>";
+ PreDepends "<INT>";
+ Suggests "<INT>";
+ Recommends "<INT>";
+ Conflicts "<INT>";
+ Replaces "<INT>";
+ Obsoletes "<INT>";
+ Breaks "<INT>";
+ Enhances "<INT>";
+ AddProtected "<INT>";
+ AddEssential "<INT>";
+};
+pkgProblemResolver::FixByInstall "<BOOL>";
+
+APT::FTPArchive::release
+{
+ Default-Patterns "<BOOL>";
+ NumericTimezone "<BOOL>";
+
+ // set specific fields in the generated Release file
+ Acquire-By-Hash "<BOOL>";
+ ButAutomaticUpgrades "<BOOL>";
+ NotAutomatic "<BOOL>";
+ MD5 "<BOOL>";
+ SHA1 "<BOOL>";
+ SHA256 "<BOOL>";
+ SHA512 "<BOOL>";
+ Architectures "<STRING>";
+ Codename "<STRING>";
+ Components "<STRING>";
+ Date "<STRING>";
+ Description "<STRING>";
+ Label "<STRING>";
+ Origin "<STRING>";
+ Signed-by "<STRING>";
+ Suite "<STRING>";
+ Version "<STRING>";
+};
+
+Debug::NoDropPrivs "<BOOL>";
+APT::Sandbox
+{
+ User "<STRING>";
+ ResetEnvironment "<BOOL>";
+ Verify "<BOOL>"
+ {
+ Groups "<BOOL>";
+ IDs "<BOOL>";
+ Regain "<BOOL>";
+ };
+ seccomp "<BOOL>"
+ {
+ print "<BOOL>"; // print what syscall was trapped
+ allow "<LIST>";
+ trap "<LIST>";
+ };
+};
+
+// having both seems wrong
+dpkgpm::progress "<BOOL>";
+dpkg::progress "<BOOL>";
+apt::acquire::by-hash "<STRING>";
+acquire::by-hash "<STRING>";
+apt::acquire::*::by-hash "<STRING>";
+acquire::*::by-hash "<STRING>";
+
+// Unsorted options: Some of those are used only internally
+
+help "<BOOL>"; // true if the help message was requested via e.g. --help
+version "<BOOL>"; // true if the version number was requested via e.g. --version
+Binary "<STRING>"; // name of the program run like apt-get, apt-cache, …
+
+dir::locale "<DIR>";
+dir::bin::dpkg-source "<STRING>";
+
+pkgcachefile::generate "<BOOL>";
+packagemanager::unpackall "<BOOL>";
+packagemanager::configure "<STRING>";
+commandline::asstring "<STRING>";
+edsp::scenario "<STRING>";
+eipp::scenario "<STRING>";
+cd::* "<STRING>"; // added CDRoms are stored as config
+
+orderlist::score::delete "<INT>";
+orderlist::score::essential "<INT>";
+orderlist::score::immediate "<INT>";
+orderlist::score::predepends "<INT>";
+
+apt::sources::with "<LIST>";
+apt::moo::color "<BOOL>";
+apt::pkgpackagemanager::maxloopcount "<INT>";
+apt::hashes::*::untrusted "<BOOL>";
+apt::list-cleanup "<BOOL>";
+apt::authentication::trustcdrom "<BOOL>";
+apt::solver::strict-pinning "<BOOL>";
+apt::keep-downloaded-packages "<BOOL>";
+apt::solver "<STRING>";
+apt::planner "<STRING>";
+apt::system "<STRING>";
+apt::acquire::translation "<STRING>"; // deprecated in favor of Acquire::Languages
+apt::color::highlight "<STRING>";
+apt::color::neutral "<STRING>";
+
+dpkgpm::reporting-steps "<INT>";
+
+dpkg::chroot-directory "<DIR>";
+dpkg::tools::options::** "<UNDEFINED>";
+dpkg::source-options "<STRING>";
+dpkg::progress-fancy "<BOOL>";
+dpkg::selection::remove::approved "<BOOL>";
+dpkg::remove::crossgrade::implicit "<BOOL>";
+dpkg::selection::current::saveandrestore "<BOOL>";
+dpkg::use-pty "<BOOL>";
+
+apt::cmd::disable-script-warning "<BOOL>";
+apt::cmd::show-update-stats "<BOOL>";
+apt::cmd::use-format "<BOOL>";
+apt::cmd::manual-installed "<BOOL>";
+apt::cmd::upgradable "<BOOL>";
+apt::cmd::installed "<BOOL>";
+apt::cmd::list-include-summary "<BOOL>";
+apt::cmd::use-regexp "<BOOL>";
+apt::cmd::all-versions "<BOOL>";
+apt::cmd::format "<STRING>";
+
+apt::config::dump::emptyvalue "<BOOL>";
+apt::config::dump::format "<STRING>";
+
+apt::mark::simulate "<BOOL>";
+apt::markauto::verbose "<BOOL>";
+apt::sortpkgs::source "<BOOL>";
+apt::extracttemplates::tempdir "<STRING>";
+
+apt::key::archivekeyring "<STRING>";
+apt::key::removedkeys "<STRING>";
+apt::key::gpgvcommand "<STRING>";
+apt::key::gpgcommand "<STRING>";
+apt::key::masterkeyring "<STRING>";
+apt::key::archivekeyringuri "<STRING>";
+apt::key::net-update-enabled "<STRING>";
+
+apt::ftparchive::release::patterns "<LIST>";
+apt::ftparchive::release::validtime "<INT>";
+apt::ftparchive::by-hash-keep "<INT>";
+apt::ftparchive::delinkact "<BOOL>";
+apt::ftparchive::md5 "<BOOL>";
+apt::ftparchive::sha1 "<BOOL>";
+apt::ftparchive::sha256 "<BOOL>";
+apt::ftparchive::sha512 "<BOOL>";
+apt::ftparchive::dobyhash "<BOOL>";
+apt::ftparchive::showcachemisses "<BOOL>";
+apt::ftparchive::sources::md5 "<BOOL>";
+apt::ftparchive::sources::sha1 "<BOOL>";
+apt::ftparchive::sources::sha256 "<BOOL>";
+apt::ftparchive::sources::sha512 "<BOOL>";
+apt::ftparchive::packages::md5 "<BOOL>";
+apt::ftparchive::packages::sha1 "<BOOL>";
+apt::ftparchive::packages::sha256 "<BOOL>";
+apt::ftparchive::packages::sha512 "<BOOL>";
+apt::ftparchive::dobyhash "<BOOL>";
+apt::ftparchive::readonlydb "<BOOL>";
+apt::ftparchive::nooverridemsg "<BOOL>";
+apt::ftparchive::alwaysstat "<BOOL>";
+apt::ftparchive::contents "<BOOL>";
+apt::ftparchive::contentsonly "<BOOL>";
+apt::ftparchive::longdescription "<BOOL>";
+apt::ftparchive::includearchitectureall "<BOOL>";
+apt::ftparchive::architecture "<STRING>";
+apt::ftparchive::db "<STRING>";
+apt::ftparchive::sourceoverride "<STRING>";
+
+apt-helper::cat-file::compress "<STRING>";
+
+acquire::cdrom::mount "<DIR>";
+acquire::maxreleasefilesize "<INT>";
+acquire::queuehost::limit "<INT>";
+acquire::max-pipeline-depth "<INT>";
+acquire::progress::diffpercent "<BOOL>";
+acquire::gzipindexes "<BOOL>";
+acquire::indextargets::randomized "<BOOL>";
+acquire::indextargets::deb::** "<UNDEFINED>";
+acquire::indextargets::deb-src::** "<UNDEFINED>";
+acquire::progress::ignore::showerrortext "<BOOL>";
+acquire::*::dl-limit "<INT>"; // catches file: and co which do not have these
+methods::mirror::problemreporting "<STRING>";
+acquire::http::proxyautodetect "<STRING>";
+acquire::http::proxy-auto-detect "<STRING>";
+acquire::http::proxy::* "<STRING>";
+acquire::https::proxyautodetect "<STRING>";
+acquire::https::proxy-auto-detect "<STRING>";
+acquire::https::proxy::* "<STRING>";
+
+// Options used by apt-ftparchive
+dir::archivedir "<DIR>";
+dir::cachedir "<DIR>";
+dir::overridedir "<DIR>";
+filemode "<INT>";
+longdescription "<BOOL>";
+external-links "<BOOL>";
+default::contentsage "<INT>";
+default::maxcontentschange "<INT>";
+default::filemode "<INT>";
+default::longdescription "<BOOL>";
+default::translation::compress "<STRING>";
+default::contents::compress "<STRING>";
+default::sources::compress "<STRING>";
+default::packages::compress "<STRING>";
+default::sources::extensions "<STRING>";
+default::packages::extensions "<STRING>";
+treedefault::directory "<STRING>";
+treedefault::srcdirectory "<STRING>";
+treedefault::packages "<STRING>";
+treedefault::translation "<STRING>";
+treedefault::internalprefix "<STRING>";
+treedefault::contents "<STRING>";
+treedefault::contents::header "<STRING>";
+treedefault::bincachedb "<STRING>";
+treedefault::srccachedb "<STRING>";
+treedefault::sources "<STRING>";
+treedefault::filelist "<STRING>";
+treedefault::sourcefilelist "<STRING>";
+sections "<STRING>";
+architectures "<STRING>";
+binoverride "<STRING>";
+internalprefix "<STRING>";
+bincachedb "<STRING>";
+directory "<STRING>";
+packages "<STRING>";
+translation "<STRING>";
+contents "<STRING>";
+filelist "<STRING>";
+extraoverride "<STRING>";
+pathprefix "<STRING>";
+srcdirectory "<STRING>";
+sources "<STRING>";
+sourcefilelist "<STRING>";
+srcextraoverride "<STRING>";
+srccachedb "<STRING>";
+srcoverride "<STRING>";
+contents::header "<STRING>";
+packages::compress "<STRING>";
+sources::compress "<STRING>";
+contents::compress "<STRING>";
+translation::compress "<STRING>";
+sources::extensions "<STRING>";
+packages::extensions "<STRING>";
+dir::filelistdir "<STRING>";
+
+// Internal code.
+dir::dpkg::tupletable "<FILE>";
+dir::dpkg::triplettable "<FILE>";
+dir::dpkg::cputable "<FILE>";
diff --git a/doc/examples/ftp-archive.conf b/doc/examples/ftp-archive.conf
new file mode 100644
index 0000000..31ffb24
--- /dev/null
+++ b/doc/examples/ftp-archive.conf
@@ -0,0 +1,81 @@
+/* This configuration file describes the standard Debian distribution
+ as it once looked */
+
+Dir
+{
+ ArchiveDir "/srv/ftp.debian.org/ftp/";
+ OverrideDir "/srv/ftp.debian.org/scripts/override/";
+ CacheDir "/srv/ftp.debian.org/scripts/cache/";
+};
+
+Default
+{
+ Packages::Compress ". gzip";
+ Sources::Compress "gzip";
+ Contents::Compress "gzip";
+ DeLinkLimit 10000; // 10 Meg delink per day
+ MaxContentsChange 10000; // 10 Meg of new contents files per day
+};
+
+TreeDefault
+{
+ Contents::Header "/srv/ftp.debian.org/scripts/masterfiles/Contents.top";
+ BinCacheDB "packages-$(ARCH).db";
+
+ // These are all defaults and are provided for completeness
+ Directory "$(DIST)/$(SECTION)/binary-$(ARCH)/";
+ Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
+
+ SrcDirectory "$(DIST)/$(SECTION)/source/";
+ Sources "$(DIST)/$(SECTION)/source/Sources";
+
+ Contents "$(DIST)/Contents-$(ARCH)";
+};
+
+tree "dists/woody"
+{
+ Sections "main contrib non-free";
+ Architectures "alpha arm hurd-i386 i386 m68k powerpc sparc sparc64 source";
+ BinOverride "override.woody.$(SECTION)";
+ SrcOverride "override.woody.$(SECTION).src";
+};
+
+tree "dists/potato"
+{
+ Sections "main contrib non-free";
+ Architectures "alpha arm i386 m68k powerpc sparc source";
+ BinOverride "override.potato.$(SECTION)";
+ SrcOverride "override.woody.$(SECTION).src";
+};
+
+tree "dists/slink"
+{
+ Sections "main contrib non-free";
+ Architectures "alpha i386 m68k sparc source";
+ BinOverride "override.slink.$(SECTION)";
+ SrcOverride "override.woody.$(SECTION).src";
+ External-Links false; // Slink should contain no links outside itself
+};
+
+
+bindirectory "project/experimental"
+{
+ Sources "project/experimental/Sources";
+ Packages "project/experimental/Packages";
+
+ BinOverride "override.experimental";
+ BinCacheDB "packages-experimental.db";
+ SrcOverride "override.experimental.src";
+};
+
+bindirectory "dists/proposed-updates"
+{
+ Packages "project/proposed-updates/Packages";
+ Contents "project/proposed-updates/Contents";
+
+ BinOverride "override.slink.all3";
+ BinOverride "override.slink.all3.src";
+ BinCacheDB "packages-proposed-updates.db";
+};
+
+
diff --git a/doc/examples/preferences b/doc/examples/preferences
new file mode 100644
index 0000000..7ebc52a
--- /dev/null
+++ b/doc/examples/preferences
@@ -0,0 +1,11 @@
+Package: *
+Pin: release a=stable
+Pin-Priority: 500
+
+Package: *
+Pin: release a=testing
+Pin-Priority: 101
+
+Package: *
+Pin: release a=unstable
+Pin-Priority: 99
diff --git a/doc/external-dependency-solver-protocol.md b/doc/external-dependency-solver-protocol.md
new file mode 100644
index 0000000..6890281
--- /dev/null
+++ b/doc/external-dependency-solver-protocol.md
@@ -0,0 +1,377 @@
+# APT External Dependency Solver Protocol (EDSP) - version 0.5
+
+This document describes the communication protocol between APT and
+external dependency solvers. The protocol is called APT EDSP, for "APT
+External Dependency Solver Protocol".
+
+
+## Terminology
+
+In the following we use the term **architecture qualified package name**
+(or *arch-qualified package names* for short) to refer to package
+identifiers of the form "package:arch" where "package" is a package name
+and "arch" a dpkg architecture.
+
+
+## Components
+
+- **APT**: we know this one.
+- APT is equipped with its own **internal solver** for dependencies,
+ which is identified by the string `internal`.
+- **External solver**: an *external* software component able to resolve
+ dependencies on behalf of APT.
+
+At each interaction with APT, a single solver is in use. When there is
+a total of 2 or more solvers, internals or externals, the user can
+choose which one to use.
+
+Each solver is identified by an unique string, the **solver
+name**. Solver names must be formed using only alphanumeric ASCII
+characters, dashes, and underscores; solver names must start with a
+lowercase ASCII letter. The special name `internal` denotes APT's
+internal solver, is reserved, and cannot be used by external solvers.
+
+
+## Installation
+
+Each external solver is installed as a file under Dir::Bin::Solvers (see
+below), which defaults to `/usr/lib/apt/solvers`. We will assume in the
+remainder of this section that such a default value is in effect.
+
+The naming scheme is `/usr/lib/apt/solvers/NAME`, where `NAME` is the
+name of the external solver.
+
+Each file under `/usr/lib/apt/solvers` corresponding to an external
+solver must be executable.
+
+No non-solver files must be installed under `/usr/lib/apt/solvers`, so
+that an index of available external solvers can be obtained by listing
+the content of that directory.
+
+
+## Configuration
+
+Several APT options can be used to affect dependency solving in APT. An
+overview of them is given below. Please refer to proper APT
+configuration documentation for more, and more up to date, information.
+
+- **APT::Solver**: the name of the solver to be used for
+ dependency solving. Defaults to `internal`
+
+- **Dir::Bin::Solvers**: absolute path of the directory where to look for
+ external solvers. Defaults to `/usr/lib/apt/solvers`.
+
+- **APT::Solver::Strict-Pinning**: whether pinning must be strictly
+ respected (as the internal solver does) or can be slightly deviated
+ from. Defaults to `yes`.
+
+- **APT::Solver::Preferences**: user preference string used during
+ dependency solving by the requested solver. Check the documentation
+ of the solver you are using if and what is supported as a value here.
+ Defaults to the empty string.
+
+- **APT::Solver::RunAsUser**: if APT itself is run as root it will
+ change to this user before executing the solver. Defaults to the value
+ of APT::Sandbox::User, which itself defaults to `_apt`. Can be
+ disabled by set this option to `root`.
+
+The options **Strict-Pinning** and **Preferences** can also be set for
+a specific solver only via **APT::Solver::NAME::Strict-Pinning** and
+**APT::Solver::NAME::Preferences** respectively where `NAME` is the name
+of the external solver this option should apply to. These options if set
+override the generic options; for simplicity the documentation will
+refer only to the generic options.
+
+
+## Protocol
+
+When configured to use an external solver, APT will resort to it to
+decide which packages should be installed or removed.
+
+The interaction happens **in batch**: APT will invoke the external
+solver passing the current status of installed and available packages,
+as well as the user request to alter the set of installed packages. The
+external solver will compute a new complete set of installed packages
+and gives APT a "diff" listing of which *additional* packages should be
+installed and of which currently installed packages should be
+*removed*. (Note: the order in which those actions have to be performed
+will be up to APT to decide.)
+
+External solvers are invoked by executing them. Communications happens
+via the file descriptors: **stdin** (standard input) and **stdout**
+(standard output). stderr is not used by the EDSP protocol. Solvers can
+therefore use stderr to dump debugging information that could be
+inspected separately.
+
+After invocation, the protocol passes through a sequence of phases:
+
+1. APT invokes the external solver
+2. APT send to the solver a dependency solving **scenario**
+3. The solver solves dependencies. During this phase the solver may
+ send, repeatedly, **progress** information to APT.
+4. The solver sends back to APT an **answer**, i.e. either a *solution*
+ or an *error* report.
+5. The external solver exits
+
+
+### Scenario
+
+A scenario is a text file encoded in a format very similar to the "Deb
+822" format (AKA "the format used by Debian `Packages` files"). A
+scenario consists of two distinct parts: a **request** and a **package
+universe**, occurring in that order. The request consists of a single
+Deb 822 stanza, while the package universe consists of several such
+stanzas. All stanzas occurring in a scenario are separated by an empty
+line.
+
+
+#### Request
+
+Within a dependency solving scenario, a request represents the action on
+installed packages requested by the user.
+
+A request is a single Deb 822 stanza opened by a mandatory Request field
+and followed by a mixture of action, preference, and global
+configuration fields.
+
+The value of the **Request:** field is a string describing the EDSP
+protocol which will be used to communicate. At present, the string must
+be `EDSP 0.5`. Request fields are mainly used to identify the beginning
+of a request stanza; their actual values are otherwise not used by the
+EDSP protocol.
+
+The following **configuration fields** are supported in request stanzas:
+
+- **Architecture:** (mandatory) The name of the *native* architecture on
+ the user machine (see also: `dpkg --print-architecture`)
+
+- **Architectures:** (optional, defaults to the native architecture) A
+ space separated list of *all* architectures known to APT (this is
+ roughly equivalent to the union of `dpkg --print-architecture` and
+ `dpkg --print-foreign-architectures`)
+
+The following **action fields** are supported in request stanzas:
+
+- **Install:** (optional, defaults to the empty string) A space
+ separated list of arch-qualified package names, with *no version
+ attached*, to install. This field denotes a list of packages that the
+ user wants to install, usually via an APT `install` request.
+
+- **Remove:** (optional, defaults to the empty string) Same syntax of
+ Install. This field denotes a list of packages that the user wants to
+ remove, usually via APT `remove` or `purge` requests.
+
+- **Upgrade-All:** (optional, defaults to `no`). Allowed values `yes`,
+ `no`. When set to `yes`, an upgrade of all installed packages has been
+ requested, usually via an upgrade command like 'apt full-upgrade'.
+
+- **Autoremove:** (optional, defaults to `no`). Allowed values: `yes`,
+ `no`. When set to `yes`, a clean up of unused automatically installed
+ packages has been requested, usually via an APT `autoremove` request.
+
+- **Upgrade:** (deprecated, optional, defaults to `no`). Allowed values:
+ `yes`, `no`. When set to `yes`, an upgrade of all installed packages
+ has been requested, usually via an APT `upgrade` request. A value of
+ `yes` is equivalent to the fields `Upgrade-All`,
+ `Forbid-New-Install`and `Forbid-Remove` all set to `yes`.
+
+- **Dist-Upgrade:** (deprecated, optional, defaults to `no`). Allowed
+ values: `yes`, `no`. Same as Upgrade, but for APT `dist-upgrade`
+ requests. A value of `yes` is equivalent to the field `Upgrade-All`
+ set to `yes` and the fields `Forbid-New-Install`and `Forbid-Remove`
+ set to `no`.
+
+The following **preference fields** are supported in request stanzas:
+
+- **Strict-Pinning:** (optional, defaults to `yes`). Allowed values:
+ `yes`, `no`. When set to `yes`, APT pinning is strict, in the sense
+ that the solver must not propose to install packages which are not APT
+ candidates (see the `APT-Pin` and `APT-Candidate` fields in the
+ package universe). When set to `no`, the solver does only a best
+ effort attempt to install APT candidates. Usually, the value of this
+ field comes from the `APT::Solver::Strict-Pinning` configuration
+ option.
+
+- **Forbid-New-Install:* (optional, defaults to `no`). Allowed values:
+ `yes`, `no`. When set to `yes` the resolver is forbidden to install
+ new packages in its returned solution.
+
+- **Forbid-Remove:* (optional, defaults to `no`). Allowed values: `yes`,
+ `no`. When set to `yes` the resolver is forbidden to remove currently
+ installed packages in its returned solution.
+
+- **Solver:** (optional, defaults to the empty string) a purely
+ informational string specifying to which solver this request was send
+ initially.
+
+- **Preferences:** (optional, defaults to the empty string)
+ a solver-specific optimization string, usually coming from the
+ `APT::Solver::Preferences` configuration option.
+
+
+#### Package universe
+
+A package universe is a list of Deb 822 stanzas, one per package, called
+**package stanzas**. Each package stanzas starts with a Package
+field. The following fields are supported in package stanzas:
+
+- All fields contained in the dpkg database, with the exception of
+ fields marked as "internal" (see the manpage `dpkg-query (1)`). Among
+ those fields, the following are mandatory for all package stanzas:
+ Package, Version, Architecture.
+
+ It is recommended not to pass the Description field to external
+ solvers or, alternatively, to trim it to the short description only.
+
+- **Installed:** (optional, defaults to `no`). Allowed values: `yes`,
+ `no`. When set to `yes`, the corresponding package is currently
+ installed.
+
+ Note: the Status field present in the dpkg database must not be passed
+ to the external solver, as it's an internal dpkg field. Installed and
+ other fields permit one to encode the most relevant aspects of Status
+ in communications with solvers.
+
+- **Hold:** (optional, defaults to `no`). Allowed values: `yes`,
+ `no`. When set to `yes`, the corresponding package is marked as "on
+ hold" by dpkg.
+
+- **APT-ID:** (mandatory). Unique package identifier, according to APT.
+
+- **APT-Pin:** (mandatory). Must be an integer. Package pin value,
+ according to APT policy.
+
+- **APT-Candidate:** (optional, defaults to `no`). Allowed values:
+ `yes`, `no`. When set to `yes`, the corresponding package is the APT
+ candidate for installation among all available packages with the same
+ name and architecture.
+
+- **APT-Automatic:** (optional, defaults to `no`). Allowed values:
+ `yes`, `no`. When set to `yes`, the corresponding package is marked by
+ APT as automatic installed. Note that automatic installed packages
+ should be removed by the solver only when the Autoremove action is
+ requested (see Request section).
+
+- **APT-Release:** (optional) The releases the package belongs to, according to
+ APT. The format of this field is multiline with one value per line and the
+ first line (the one containing the field name) empty. Each subsequent line
+ corresponds to one of the releases the package belongs to and looks like
+ this: `o=Debian,a=unstable,n=sid,l=Debian,c=main`. That is, each release line
+ is a comma-separated list of "key=value" pairs, each of which denotes a
+ Release file entry (Origin, Label, Codename, etc.) in the format of
+ APT_PREFERENCES(5).
+
+- **Source:** (optional) The name of the source package the binary
+ package this record is for was built from.
+ This field does NOT include the version of the source package unlike
+ the Source field in the dpkg database. The version is optionally
+ available in the **Source-Version:** field.
+
+
+### Answer
+
+An answer from the external solver to APT is either a *solution* or an
+*error*.
+
+The following invariant on **exit codes** must hold true. When the
+external solver is *able to find a solution*, it will write the solution
+to standard output and then exit with an exit code of 0. When the
+external solver is *unable to find a solution* (and is aware of that),
+it will write an error to standard output and then exit with an exit
+code of 0. An exit code other than 0 will be interpreted as a solver
+crash with no meaningful error about dependency resolution to convey to
+the user.
+
+
+#### Solution
+
+A solution is a list of Deb 822 stanzas. Each of them could be an install
+stanza (telling APT to install a specific new package or to upgrade or
+downgrade a package to a specific version), a remove stanza (telling APT to
+remove one), or an autoremove stanza (telling APT about the *future*
+possibility of removing a package using the Autoremove action).
+
+An **install stanza** starts with an Install field and supports the
+following fields:
+
+- **Install:** (mandatory). The value is a package identifier,
+ referencing one of the package stanzas of the package universe via its
+ APT-ID field.
+
+- All fields supported by package stanzas.
+
+**Remove stanzas** are similar to install stanzas, but have **Remove**
+fields instead of Install fields.
+
+**Autoremove stanzas** are similar to install stanzas, but have
+**Autoremove** fields instead of Install fields. Autoremove stanzas
+should be output so that APT can inform the user of which packages they
+can now autoremove, as a consequence of the executed action. However,
+this protocol makes no assumption on the fact that a subsequent
+invocation of an Autoremove action will actually remove the very same
+packages indicated by Autoremove stanzas in the former solution.
+
+A package can't be installed in multiple versions at the same time, so
+for each package there can at most one version be selected either for
+installation or removal. This especially means that a solver is neither
+allowed to represent package upgrades as a remove of the installed
+version and the installation of another (the remove is implicit and must
+be omitted from the solution) nor is it supported to revert previous
+actions in the solution with later actions. APT is allowed to show
+warnings and might even misbehave in earlier versions if a solver is
+violating this assumption.
+
+In terms of expressivity, install and remove stanzas can carry one
+single field each, as APT-IDs are enough to pinpoint packages to be
+installed/removed. Nonetheless, for protocol readability, it is
+recommended that solvers either add unconditionally the fields Package,
+Version, and Architecture to all install/remove stanzas or,
+alternatively, that they support a `--verbose` command line flag that
+explicitly enables the output of those fields in solutions.
+
+
+#### Error
+
+An error is a single Deb 822 stanza, starting the field Error. The
+following fields are supported in error stanzas:
+
+- **Error:** (mandatory). The value of this field is ignored, although
+ it should be a unique error identifier, such as a UUID.
+
+- **Message:** (mandatory). The value of this field is a text string,
+ meant to be read by humans, that explains the cause of the solver
+ error. Message fields might be multi-line, like the Description field
+ in the dpkg database. The first line conveys a short message, which
+ can be explained in more details using subsequent lines.
+
+
+### Progress
+
+During dependency solving, an external solver may send progress
+information to APT using **progress stanzas**. A progress stanza starts
+with the Progress field and might contain the following fields:
+
+- **Progress:** (mandatory). The value of this field is a date and time
+ timestamp from the UTC timezone, in RFC 2822 format (see 'date -uR' as
+ an example). The timestamp provides a time annotation for the
+ progress report.
+
+- **Percentage:** (optional). An integer from 0 to 100, representing the
+ completion of the dependency solving process, as declared by the
+ solver.
+
+- **Message:** (optional). A textual message, meant to be read by the
+ APT user, telling what is going on within the dependency solving
+ (e.g. the current phase of dependency solving, as declared by the
+ solver).
+
+
+# Future extensions
+
+Potential future extensions to this protocol, listed in no specific
+order, include:
+
+- fixed error types to identify common failures across solvers and
+ enable APT to translate error messages
+- structured error data to explain failures in terms of packages and
+ dependencies
diff --git a/doc/external-installation-planner-protocol.md b/doc/external-installation-planner-protocol.md
new file mode 100644
index 0000000..4bad9da
--- /dev/null
+++ b/doc/external-installation-planner-protocol.md
@@ -0,0 +1,301 @@
+# APT External Installation Planner Protocol (EIPP) - version 0.1
+
+This document describes the communication protocol between APT and
+external installation planner. The protocol is called APT EIPP, for "APT
+External Installation Planner Protocol".
+
+
+## Terminology
+
+In the following we use the term **architecture qualified package name**
+(or *arch-qualified package names* for short) to refer to package
+identifiers of the form "package:arch" where "package" is a package name
+and "arch" a dpkg architecture.
+
+
+## Components
+
+- **APT**: we know this one.
+- APT is equipped with its own **internal planner** for the order of
+ package installation (and removal) which is identified by the string
+ `internal`.
+- **External planner**: an *external* software component able to plan an
+ installation on behalf of APT.
+
+At each interaction with APT, a single planner is in use. When there is
+a total of 2 or more planners, internals or externals, the user can
+choose which one to use.
+
+Each planner is identified by an unique string, the **planner name**.
+Planner names must be formed using only alphanumeric ASCII characters,
+dashes, and underscores; planner names must start with a lowercase ASCII
+letter. The special name `internal` denotes APT's internal planner, is
+reserved, and cannot be used by external planners.
+
+
+## Installation
+
+Each external planner is installed as a file under Dir::Bin::Planners
+(see below), which defaults to `/usr/lib/apt/planners`. We will assume
+in the remainder of this section that such a default value is in effect.
+
+The naming scheme is `/usr/lib/apt/planners/NAME`, where `NAME` is the
+name of the external planner.
+
+Each file under `/usr/lib/apt/planners` corresponding to an external
+planner must be executable.
+
+No non-planner files must be installed under `/usr/lib/apt/planners`, so
+that an index of available external planners can be obtained by listing
+the content of that directory.
+
+
+## Configuration
+
+Several APT options can be used to affect installation planing in APT.
+An overview of them is given below. Please refer to proper APT
+configuration documentation for more, and more up to date, information.
+
+- **APT::Planner**: the name of the planner to be used for dependency
+ solving. Defaults to `internal`
+
+- **Dir::Bin::Planners**: absolute path of the directory where to look
+ for external solvers. Defaults to `/usr/lib/apt/planners`.
+
+
+## Protocol
+
+When configured to use an external planner, APT will resort to it to
+decide in which order packages should be installed, configured and
+removed.
+
+The interaction happens **in batch**: APT will invoke the external
+planner passing the current status of (half-)installed packages and of
+packages which should be installed, as well as a request denoting the
+packages to install, reinstall, remove and purge. The external planner
+will compute a valid plan of when and how to call the low-level package
+manager (like dpkg) with each package to satisfy the request.
+
+External planners are invoked by executing them. Communications happens
+via the file descriptors: **stdin** (standard input) and **stdout**
+(standard output). stderr is not used by the EIPP protocol. Planners can
+therefore use stderr to dump debugging information that could be
+inspected separately.
+
+After invocation, the protocol passes through a sequence of phases:
+
+1. APT invokes the external planner
+2. APT send to the planner an installation planner **scenario**
+3. The planner calculates the order. During this phase the planner may
+ send, repeatedly, **progress** information to APT.
+4. The planner sends back to APT an **answer**, i.e. either a *solution*
+ or an *error* report.
+5. The external planner exits
+
+
+### Scenario
+
+A scenario is a text file encoded in a format very similar to the "Deb
+822" format (AKA "the format used by Debian `Packages` files"). A
+scenario consists of two distinct parts: a **request** and a **package
+universe**, occurring in that order. The request consists of a single
+Deb 822 stanza, while the package universe consists of several such
+stanzas. All stanzas occurring in a scenario are separated by an empty
+line.
+
+
+#### Request
+
+Within an installation planner scenario, a request represents the action
+on packages requested by the user explicitly as well as potentially
+additions calculated by a dependency resolver which the user has
+accepted.
+
+An installation planner is not allowed to suggest the modification of
+package states (e.g. removing additional packages) even if it can't
+calculate a solution otherwise – the planner must error out in such
+a case. An exception is made for scenarios which contain packages which
+aren't completely installed (like half-installed or trigger-awaiting):
+Solvers are free to move these packages to a fully installed state (but
+are still forbidden to remove them).
+
+A request is a single Deb 822 stanza opened by a mandatory Request field
+and followed by a mixture of action, preference, and global
+configuration fields.
+
+The value of the **Request:** field is a string describing the EIPP
+protocol which will be used to communicate and especially which answers
+APT will understand. At present, the string must be `EIPP 0.1`. Request
+fields are mainly used to identify the beginning of a request stanza;
+their actual values are otherwise not used by the EIPP protocol.
+
+The following **configuration fields** are supported in request stanzas:
+
+- **Architecture:** (mandatory) The name of the *native* architecture on
+ the user machine (see also: `dpkg --print-architecture`)
+
+- **Architectures:** (optional, defaults to the native architecture) A
+ space separated list of *all* architectures known to APT (this is
+ roughly equivalent to the union of `dpkg --print-architecture` and
+ `dpkg --print-foreign-architectures`)
+
+The following **action fields** are supported in request stanzas:
+
+- **Install:** (optional, defaults to the empty string) A space
+ separated list of arch-qualified package names, with *no version
+ attached*, to install. This field denotes a list of packages that the
+ user wants to install, usually via an APT `install` request.
+
+- **Remove:** (optional, defaults to the empty string) Same syntax of
+ Install. This field denotes a list of packages that the user wants to
+ remove, usually via APT `remove` or `purge` requests.
+
+- **ReInstall:** (optional, defaults to the empty string) Same syntax of
+ Install. This field denotes a list of packages which are installed,
+ but should be reinstalled again e.g. because files shipped by that
+ package were removed or corrupted accidentally, usually requested via
+ an APT `install` request with the `--reinstall` flag.
+
+The following **preference fields** are supported in request stanzas:
+
+- **Planner:** (optional, defaults to the empty string) a purely
+ informational string specifying to which planner this request was send
+ initially.
+
+- **Immediate-Configuration:** (option, unset by default) A boolean
+ value defining if the planner should try to configure all packages as
+ quickly as possible (true) or shouldn't perform any kind of immediate
+ configuration at all (false). If not explicitly set with this field
+ the planner is free to pick either mode or implementing e.g. a mode
+ which configures only packages immediately if they are flagged as
+ `Essential` (or are dependencies of packages marked as `Essential`).
+
+- **Allow-Temporary-Remove-of-Essentials** (optional, defaults to `no`).
+ A boolean value allowing the planner (if set to yes) to temporarily
+ remove an essential package. Associated with the APT::Force-LoopBreak
+ configuration option its main use is highlighting that planners who do
+ temporary removes must take special care in terms of essentials. Legit
+ uses of this option by users is very uncommon, traditionally
+ a situation in which it is needed indicates a packaging error.
+
+
+#### Package universe
+
+A package universe is a list of Deb 822 stanzas, one per package, called
+**package stanzas**. Each package stanzas starts with a Package
+field. The following fields are supported in package stanzas:
+
+- The fields Package, Version, Architecture (all mandatory) and
+ Multi-Arch, Pre-Depends, Depends, Conflicts, Breaks, Essential
+ (optional) as they are contained in the dpkg database (see the manpage
+ `dpkg-query (1)`).
+
+- **Status:** (optional, defaults to `uninstalled`). Allowed values are
+ the "package status" names as listed in `dpkg-query (1)` and visible
+ e.g. in the dpkg database as the second value in the space separated
+ list of values in the Status field there. In other words: Neither
+ desired action nor error flags are present in this field in EIPP!
+
+- **APT-ID:** (mandatory). Unique package identifier, according to APT.
+
+
+### Answer
+
+An answer from the external planner to APT is either a *solution* or an
+*error*.
+
+The following invariant on **exit codes** must hold true. When the
+external planner is *able to find a solution*, it will write the
+solution to standard output and then exit with an exit code of 0. When
+the external planner is *unable to find a solution* (and is aware of
+that), it will write an error to standard output and then exit with an
+exit code of 0. An exit code other than 0 will be interpreted as
+a planner crash with no meaningful error about dependency resolution to
+convey to the user.
+
+
+#### Solution
+
+A solution is a list of Deb 822 stanzas. Each of them could be an:
+
+- unpack stanza to cause the extraction of a package to the disk
+
+- configure stanza to cause an unpacked package to be configured and
+ therefore the installation to be completed
+
+- remove stanza to cause the removal of a package from the system
+
+An **unpack stanza** starts with an Unpack field and supports the
+following fields:
+
+- **Unpack:** (mandatory). The value is a package identifier,
+ referencing one of the package stanzas of the package universe via its
+ APT-ID field.
+
+- All fields supported by package stanzas.
+
+**Configure** and **Remove stanzas** require and support the same
+fields with the exception of the Unpack field which is replaced in
+these instances with the Configure or Remove field respectively.
+
+The order of the stanzas is significant (unlike in the EDSP protocol),
+with the first stanza being the first performed action. If multiple
+stanzas of the same type appear in direct succession the order in such
+a set isn't significant through.
+
+The solution needs to be valid (it is not allowed to configure a package
+before it was unpacked, dependency relations must be satisfied, …), but
+they don't need to be complete: A planner can and should expect that any
+package which wasn't explicitly configured will be configured at the end
+automatically. That also means through that a planner is not allowed to
+produce a solution in which a package remains unconfigured. Also,
+packages which are requested to be removed will be automatically removed
+at the end if not marked for removal explicitly earlier.
+
+In terms of expressivity, all stanzas can carry one single field each, as
+APT-IDs are enough to pinpoint packages to be installed/removed.
+Nonetheless, for protocol readability, it is recommended that planners
+either add unconditionally the fields Package, Version, and Architecture
+to all install/remove stanzas or, alternatively, that they support
+a `--verbose` command line flag that explicitly enables the output of
+those fields in solutions.
+
+#### Error
+
+An error is a single Deb 822 stanza, starting the field Error. The
+following fields are supported in error stanzas:
+
+- **Error:** (mandatory). The value of this field is ignored, although
+ it should be a unique error identifier, such as a UUID.
+
+- **Message:** (mandatory). The value of this field is a text string,
+ meant to be read by humans, that explains the cause of the planner
+ error. Message fields might be multi-line, like the Description field
+ in the dpkg database. The first line conveys a short message, which
+ can be explained in more details using subsequent lines.
+
+
+### Progress
+
+During dependency solving, an external planner may send progress
+information to APT using **progress stanzas**. A progress stanza starts
+with the Progress field and might contain the following fields:
+
+- **Progress:** (mandatory). The value of this field is a date and time
+ timestamp from the UTC timezone, in RFC 2822 format (see 'date -uR' as
+ an example). The timestamp provides a time annotation for the
+ progress report.
+
+- **Percentage:** (optional). An integer from 0 to 100, representing the
+ completion of the installation planning process, as declared by the
+ planner.
+
+- **Message:** (optional). A textual message, meant to be read by the
+ APT user, telling what is going on within the installation planner
+ (e.g. the current phase of planning, as declared by the planner).
+
+
+# Future extensions
+
+Potential future extensions to this protocol are to be discussed on
+deity@lists.debian.org.
diff --git a/doc/files.dbk b/doc/files.dbk
new file mode 100644
index 0000000..95e6257
--- /dev/null
+++ b/doc/files.dbk
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<book lang="en">
+
+<title>APT Files</title>
+
+<bookinfo>
+
+<authorgroup>
+ <author>
+ <personname>Jason Gunthorpe</personname><email>jgg@debian.org</email>
+ </author>
+</authorgroup>
+
+<releaseinfo>Version &apt-product-version;</releaseinfo>
+
+<abstract>
+<para>
+This document describes the complete implementation and format of the installed
+APT directory structure. It also serves as guide to how APT views the Debian
+archive.
+</para>
+</abstract>
+
+<copyright><year>1998-1999</year><holder>Jason Gunthorpe</holder></copyright>
+
+<legalnotice>
+<title>License Notice</title>
+<para>
+"APT" and this document are free software; you can redistribute them and/or
+modify them under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+</para>
+<para>
+For more details, on Debian systems, see the file
+/usr/share/common-licenses/GPL for the full license.
+</para>
+</legalnotice>
+
+</bookinfo>
+
+<chapter id="ch1"><title>Introduction</title>
+
+<section id="s1.1"><title>General</title>
+<para>
+This document serves two purposes. The first is to document the installed
+directory structure and the format and purpose of each file. The second
+purpose is to document how APT views the Debian archive and deals with multiple
+package files.
+</para>
+<para>
+The var directory structure is as follows:
+</para>
+<screen>
+ /var/lib/apt/
+ lists/
+ partial/
+ periodic/
+ extended_states
+ cdroms.list
+ /var/cache/apt/
+ archives/
+ partial/
+ pkgcache.bin
+ srcpkgcache.bin
+ /etc/apt/
+ sources.list.d/
+ apt.conf.d/
+ preferences.d/
+ trusted.gpg.d/
+ sources.list
+ apt.conf
+ apt_preferences
+ trusted.gpg
+ /usr/lib/apt/
+ methods/
+ bzip2
+ cdrom
+ copy
+ file
+ ftp
+ gpgv
+ gzip
+ http
+ https
+ lzma
+ rred
+ rsh
+ ssh
+</screen>
+<para>
+As is specified in the FHS 2.1 /var/lib/apt is used for application data that
+is not expected to be user modified. /var/cache/apt is used for regeneratable
+data and is where the package cache and downloaded .debs go. /etc/apt is the
+place where configuration should happen and /usr/lib/apt is the place where the
+apt and other packages can place binaries which can be used by the acquire
+system of APT.
+</para>
+</section>
+
+</chapter>
+
+<chapter id="ch2"><title>Files</title>
+
+<section id="s2.1"><title>Files and fragment directories in /etc/apt</title>
+<para>
+All files in /etc/apt are used to modify specific aspects of APT. To enable
+other packages to ship needed configuration herself all these files have a
+fragment directory packages can place their files in instead of mangling with
+the main files. The main files are therefore considered to be only used by the
+user and not by a package. The documentation omits this directories most of
+the time to be easier readable, so every time the documentation includes a
+reference to a main file it really means the file or the fragment directories.
+</para>
+</section>
+
+<section id="s2.2"><title>Distribution Source list (sources.list)</title>
+<para>
+The distribution source list is used to locate archives of the debian
+distribution. It is designed to support any number of active sources and to
+support a mix of source media. The file lists one source per line, with the
+fastest source listed first. The format of each line is:
+</para>
+<para>
+<replaceable>type uri args</replaceable>
+</para>
+<para>
+The first item, <replaceable>type</replaceable>, indicates the format for the
+remainder of the line. It is designed to indicate the structure of the
+distribution the line is talking about. Currently the only defined values are
+<emphasis>deb</emphasis> and <emphasis>deb-src</emphasis> which indicate a
+standard debian (source) archive with a dists directory. More about these
+types and the URI specification can be found in the sources.list manpage.
+</para>
+
+<section id="s2.2.1"><title>Hashing the URI</title>
+<para>
+All permanent information acquired from any of the sources is stored in the
+lists directory. Thus, there must be a way to relate the filename in the lists
+directory to a line in the sourcelist. To simplify things this is done by
+quoting the URI and treating _'s as quoteable characters and converting /
+to _. The URI spec says this is done by converting a sensitive character
+into %xx where xx is the hexadecimal representation from the ASCII character
+set. Examples:
+</para>
+<screen>
+http://www.debian.org/archive/dists/stable/binary-i386/Packages
+/var/lib/apt/lists/www.debian.org_archive_dists_stable_binary-i386_Packages
+
+cdrom:Debian 1.3/debian/Packages
+/var/lib/apt/info/Debian%201.3_debian_Packages
+</screen>
+<para>
+The other alternative that was considered was to use a deep directory structure
+but this poses two problems, it makes it very difficult to prune directories
+back when sources are no longer used and complicates the handling of the
+partial directory. This gives a very simple way to deal with all of the
+situations that can arise. Also note that the same rules described in the
+<emphasis>Archive Directory</emphasis> section regarding the partial sub dir
+apply here as well.
+</para>
+</section>
+
+</section>
+
+<section id="s2.3"><title>Extended States File (extended_states)</title>
+<para>
+The extended_states file serves the same purpose as the normal dpkg status
+file (/var/lib/dpkg/status) except that it stores information unique to
+apt. This includes currently only the autoflag but is open to store more
+unique data that come up over time. It duplicates nothing from the normal
+dpkg status file. Please see other APT documentation for a discussion of
+the exact internal behavior of these fields. The Package and the Architecture
+field are placed directly before the new fields to indicate which package
+they apply to. The new fields are as follows:
+</para>
+<variablelist>
+<varlistentry>
+<term>Auto-Installed</term>
+<listitem>
+<para>
+The Auto flag can be 1 (Yes) or 0 (No) and controls whether the package was
+automatically installed to satisfy a dependency or if the user requested the
+installation
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+</section>
+
+<section id="s2.4"><title>Binary Package Cache (srcpkgcache.bin and pkgcache.bin)</title>
+<para>
+Please see cache.sgml for a complete description of what this file
+is. The cache file is updated whenever the Packages or Release files of the lists
+directory or the dpkg status file changes. If the cache is erased, corrupted or of a non-matching
+version it will be automatically rebuilt by all of the tools that need
+it. <emphasis>srcpkgcache.bin</emphasis> contains a cache of all of the
+package, release files in the source list. In comparison to <emphasis>pkgcache.bin</emphasis>, it does not include the /var/lib/dpkg/status file. This allows regeneration of the cache
+when the status files change to use a prebuilt version for greater speed.
+</para>
+</section>
+
+<section id="s2.5"><title>Downloads Directory (archives)</title>
+<para>
+The archives directory is where all downloaded .deb archives go. When the file
+transfer is initiated the deb is placed in partial. Once the file is fully
+downloaded and its MD5 hash and size are verified it is moved from partial
+into archives/. Any files found in archives/ can be assumed to be verified.
+</para>
+<para>
+No directory structure is transferred from the receiving site and all .deb file
+names conform to debian conventions. No short (msdos) filename should be
+placed in archives. If the need arises .debs should be unpacked, scanned and
+renamed to their correct internal names. This is mostly to prevent file name
+conflicts but other programs may depend on this if convenient. A conforming
+.deb is one of the form, name_version_arch.deb. Our archive scripts do not
+handle epochs, but they are necessary and should be re-inserted. If necessary
+_'s and :'s in the fields should be quoted using the % convention. It must be
+possible to extract all 3 fields by examining the file name. Downloaded .debs
+must be found in one of the package lists with an exact name + version match..
+</para>
+</section>
+
+<section id="s2.6"><title>The Methods Directory (/usr/lib/apt/methods)</title>
+<para>
+The Methods directory is more fully described in the APT Methods interface
+document.
+</para>
+</section>
+
+<section id="s2.7"><title>The Configuration File (/etc/apt/apt.conf)</title>
+<para>
+The configuration file (and the associated fragments directory
+/etc/apt/apt.conf.d/) is described in the apt.conf manpage.
+</para>
+</section>
+
+<section id="s2.8"><title>The trusted.gpg File (/etc/apt/trusted.gpg)</title>
+<para>
+The trusted.gpg file (and the files in the associated fragments directory
+/etc/apt/trusted.gpg.d/) is a binary file including the keyring used by apt to
+validate that the information (e.g. the Release file) it downloads are really
+from the distributor it clams to be and is unmodified and is therefore the last
+step in the chain of trust between the archive and the end user. This security
+system is described in the apt-secure manpage.
+</para>
+</section>
+
+<section id="s2.9"><title>The Release File</title>
+<para>
+This file plays an important role in how APT presents the archive to the
+user. Its main purpose is to present a descriptive name for the source of
+each version of each package. It also is used to detect when new versions
+of debian are released. It augments the package file it is associated with
+by providing meta information about the entire archive which the Packages
+file describes.
+</para>
+<para>
+The full name of the distribution for presentation to the user is formed as
+'label version archive', with a possible extended name being 'label version
+archive component'.
+</para>
+<para>
+The file is formed as the package file (RFC-822) with the following tags
+defined:
+</para>
+<variablelist>
+<varlistentry>
+<term>Archive</term>
+<listitem>
+<para>
+This is the common name we give our archives, such as
+<emphasis>stable</emphasis> or <emphasis>unstable</emphasis>.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Component</term>
+<listitem>
+<para>
+Refers to the sub-component of the archive, <emphasis>main</emphasis>,
+<emphasis>contrib</emphasis> etc. Component may be omitted if there are no
+components for this archive.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Version</term>
+<listitem>
+<para>
+This is a version string with the same properties as in the Packages file. It
+represents the release level of the archive.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Origin</term>
+<listitem>
+<para>
+This specifies who is providing this archive. In the case of Debian the string
+will read 'Debian'. Other providers may use their own string
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Label</term>
+<listitem>
+<para>
+This carries the encompassing name of the distribution. For Debian proper this
+field reads 'Debian'. For derived distributions it should contain their proper
+name.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Architecture</term>
+<listitem>
+<para>
+When the archive has packages for a single architecture then the Architecture
+is listed here. If a mixed set of systems are represented then this should
+contain the keyword <emphasis>mixed</emphasis>.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>NotAutomatic</term>
+<listitem>
+<para>
+A Yes/No flag indicating that the archive is extremely unstable and its
+version's should never be automatically selected. This is to be used by
+experimental.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Description</term>
+<listitem>
+<para>
+Description is used to describe the release. For instance experimental would
+contain a warning that the packages have problems.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+<para>
+The location of the Release file in the archive is very important, it must be
+located in the same location as the packages file so that it can be located in
+all situations. The following is an example for the current stable release,
+1.3.1r6
+</para>
+<screen>
+Archive: stable
+Component: main
+Version: 1.3.1r6
+Origin: Debian
+Label: Debian
+Architecture: i386
+</screen>
+<para>
+This is an example of experimental,
+</para>
+<screen>
+Archive: experimental
+Version: 0
+Origin: Debian
+Label: Debian
+Architecture: mixed
+NotAutomatic: Yes
+</screen>
+<para>
+And unstable,
+</para>
+<screen>
+Archive: unstable
+Component: main
+Version: 2.1
+Origin: Debian
+Label: Debian
+Architecture: i386
+</screen>
+</section>
+
+</chapter>
+
+
+</book>
diff --git a/doc/guide.dbk b/doc/guide.dbk
new file mode 100644
index 0000000..ab4b0c6
--- /dev/null
+++ b/doc/guide.dbk
@@ -0,0 +1,561 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<book lang="en">
+
+<title>APT User's Guide</title>
+
+<bookinfo>
+
+<authorgroup>
+ <author>
+ <personname>Jason Gunthorpe</personname><email>jgg@debian.org</email>
+ </author>
+</authorgroup>
+
+<releaseinfo>Version &apt-product-version;</releaseinfo>
+
+<abstract>
+<para>
+This document provides an overview of how to use the APT package manager.
+</para>
+</abstract>
+
+<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>
+
+<legalnotice>
+<title>License Notice</title>
+<para>
+"APT" and this document are free software; you can redistribute them and/or
+modify them under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+</para>
+</legalnotice>
+
+<legalnotice>
+<para>
+For more details, on Debian systems, see the file
+/usr/share/common-licenses/GPL for the full license.
+</para>
+</legalnotice>
+
+</bookinfo>
+
+<chapter id="ch1"><title>General</title>
+<para>
+The APT package currently contains two sections, the APT
+<command>dselect</command> method and the <command>apt-get</command> command
+line user interface. Both provide a way to install and remove packages as well
+as download new packages from the Internet.
+</para>
+
+<section id="s1.1"><title>Anatomy of the Package System</title>
+<para>
+The Debian packaging system has a large amount of information associated with
+each package to help assure that it integrates cleanly and easily into the
+system. The most prominent of its features is the dependency system.
+</para>
+<para>
+The dependency system allows individual programs to make use of shared elements
+in the system such as libraries. It simplifies placing infrequently used
+portions of a program in separate packages to reduce the number of things the
+average user is required to install. Also, it allows for choices in mail
+transport agents, X servers and so on.
+</para>
+<para>
+The first step to understanding the dependency system is to grasp the concept
+of a simple dependency. The meaning of a simple dependency is that a package
+requires another package to be installed at the same time to work properly.
+</para>
+<para>
+For instance, mailcrypt is an emacs extension that aids in encrypting email
+with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a
+simple dependency on GPG. Also, because it is an emacs extension it has a
+simple dependency on emacs, without emacs it is completely useless.
+</para>
+<para>
+The other important dependency to understand is a conflicting dependency. It
+means that a package, when installed with another package, will not work and
+may possibly be extremely harmful to the system. As an example consider a mail
+transport agent such as sendmail, exim or qmail. It is not possible to have
+two mail transport agents installed because both need to listen to the network
+to receive mail. Attempting to install two will seriously damage the system so
+all mail transport agents have a conflicting dependency with all other mail
+transport agents.
+</para>
+<para>
+As an added complication there is the possibility for a package to pretend to
+be another package. Consider that exim and sendmail for many intents are
+identical, they both deliver mail and understand a common interface. Hence,
+the package system has a way for them to declare that they are both
+mail-transport-agents. So, exim and sendmail both declare that they provide a
+mail-transport-agent and other packages that need a mail transport agent depend
+on mail-transport-agent. This can add a great deal of confusion when trying to
+manually fix packages.
+</para>
+<para>
+At any given time a single dependency may be met by packages that are already
+installed or it may not be. APT attempts to help resolve dependency issues by
+providing a number of automatic algorithms that help in selecting packages for
+installation.
+</para>
+</section>
+
+</chapter>
+
+<chapter id="ch2"><title>apt-get</title>
+<para>
+<command>apt-get</command> provides a simple way to install packages from the
+command line. Unlike <command>dpkg</command>, <command>apt-get</command> does
+not understand .deb files, it works with the package's proper name and can only
+install .deb archives from a <emphasis>Source</emphasis>.
+</para>
+<para>
+The first <footnote><para> If you are using an http proxy server you must set
+the http_proxy environment variable first, see sources.list(5) </para>
+</footnote> thing that should be done before using <command>apt-get</command>
+is to fetch the package lists from the <emphasis>Sources</emphasis> so that it
+knows what packages are available. This is done with <literal>apt-get
+update</literal>. For instance,
+</para>
+<screen>
+# apt-get update
+Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages
+Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages
+Reading Package Lists... Done
+Building Dependency Tree... Done
+</screen>
+<para>
+Once updated there are several commands that can be used:
+</para>
+<variablelist>
+<varlistentry>
+<term>upgrade</term>
+<listitem>
+<para>
+Upgrade will attempt to gently upgrade the whole system. Upgrade will never
+install a new package or remove an existing package, nor will it ever upgrade a
+package that might cause some other package to break. This can be used daily
+to relatively safely upgrade the system. Upgrade will list all of the packages
+that it could not upgrade, this usually means that they depend on new packages
+or conflict with some other package. <command>dselect</command> or
+<literal>apt-get install</literal> can be used to force these packages to
+install.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>install</term>
+<listitem>
+<para>
+Install is used to install packages by name. The package is automatically
+fetched and installed. This can be useful if you already know the name of the
+package to install and do not want to go into a GUI to select it. Any number
+of packages may be passed to install, they will all be fetched. Install
+automatically attempts to resolve dependency problems with the listed packages
+and will print a summary and ask for confirmation if anything other than its
+arguments are changed.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>dist-upgrade</term>
+<listitem>
+<para>
+Dist-upgrade is a complete upgrader designed to simplify upgrading between
+releases of Debian. It uses a sophisticated algorithm to determine the best
+set of packages to install, upgrade and remove to get as much of the system to
+the newest release. In some situations it may be desired to use dist-upgrade
+rather than spend the time manually resolving dependencies in
+<command>dselect</command>. Once dist-upgrade has completed then
+<command>dselect</command> can be used to install any packages that may have
+been left out.
+</para>
+<para>
+It is important to closely look at what dist-upgrade is going to do, its
+decisions may sometimes be quite surprising.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+<para>
+<command>apt-get</command> has several command line options that are detailed
+in its man page,
+<citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</manvolnum></citerefentry>. The
+most useful option is <literal>-d</literal> which does not install the
+fetched files. If the system has to download a large number of package it
+would be undesired to start installing them in case something goes wrong. When
+<literal>-d</literal> is used the downloaded archives can be installed by
+simply running the command that caused them to be downloaded again without
+<literal>-d</literal>.
+</para>
+</chapter>
+
+<chapter id="ch3"><title>DSelect</title>
+<para>
+The APT <command>dselect</command> method provides the complete
+APT system with the <command>dselect</command> package selection
+GUI. <command>dselect</command> is used to select the packages to be
+installed or removed and APT actually installs them.
+</para>
+<para>
+To enable the APT method you need to select [A]ccess in
+<command>dselect</command> and then choose the APT method. You will be
+prompted for a set of <emphasis>Sources</emphasis> which are places to fetch
+archives from. These can be remote Internet sites, local Debian mirrors or
+CD-ROMs. Each source can provide a fragment of the total Debian archive, APT
+will automatically combine them to form a complete set of packages. If you
+have a CD-ROM then it is a good idea to specify it first and then specify a
+mirror so that you have access to the latest bug fixes. APT will automatically
+use packages on your CD-ROM before downloading from the Internet.
+</para>
+<screen>
+ Set up a list of distribution source locations
+
+ Please give the base URL of the debian distribution.
+ The access schemes I know about are: http file
+
+ For example:
+ file:/mnt/debian,
+ ftp://ftp.debian.org/debian,
+ http://ftp.de.debian.org/debian,
+
+
+ URL [http://llug.sep.bnl.gov/debian]:
+</screen>
+<para>
+The <emphasis>Sources</emphasis> setup starts by asking for the base of the
+Debian archive, defaulting to an HTTP mirror. Next it asks for the distribution
+to get.
+</para>
+<screen>
+ Please give the distribution tag to get or a path to the
+ package file ending in a /. The distribution
+ tags are typically something like: stable unstable testing non-US
+
+ Distribution [stable]:
+</screen>
+<para>
+The distribution refers to the Debian version in the archive,
+<emphasis>stable</emphasis> refers to the latest released version
+and <emphasis>unstable</emphasis> refers to the developmental
+version. <emphasis>non-US</emphasis> is only available on some mirrors
+and refers to packages that contain encryption technology or other
+things that cannot be exported from the United States. Importing these
+packages into the US is legal however.
+</para>
+<screen>
+ Please give the components to get
+ The components are typically something like: main contrib non-free
+
+ Components [main contrib non-free]:
+</screen>
+<para>
+The components list refers to the list of sub distributions to fetch. The
+distribution is split up based on software licenses, main being DFSG free
+packages while contrib and non-free contain things that have various
+restrictions placed on their use and distribution.
+</para>
+<para>
+Any number of sources can be added, the setup script will continue to prompt
+until you have specified all that you want.
+</para>
+<para>
+Before starting to use <command>dselect</command> it is necessary to update
+the available list by selecting [U]pdate from the menu. This is a superset of
+<literal>apt-get update</literal> that makes the fetched information available
+to <command>dselect</command>. [U]pdate must be performed even if
+<literal>apt-get update</literal> has been run before.
+</para>
+<para>
+You can then go on and make your selections using [S]elect and then perform
+the installation using [I]nstall. When using the APT method the [C]onfig and
+[R]emove commands have no meaning, the [I]nstall command performs both of
+them together.
+</para>
+<para>
+By default APT will automatically remove the package (.deb) files once they
+have been successfully installed. To change this behavior place
+<literal>Dselect::clean "prompt";</literal> in /etc/apt/apt.conf.
+</para>
+</chapter>
+
+<chapter id="ch4"><title>The Interface</title>
+<para>
+Both that APT <command>dselect</command> method and <command>apt-get</command>
+share the same interface. It is a simple system that generally tells you what
+it will do and then goes and does it. <footnote><para> The
+<command>dselect</command> method actually is a set of wrapper scripts to
+<command>apt-get</command>. The method actually provides more functionality
+than is present in <command>apt-get</command> alone. </para> </footnote> After
+printing out a summary of what will happen APT then will print out some
+informative status messages so that you can estimate how far along it is and
+how much is left to do.
+</para>
+
+<section id="s4.1"><title>Startup</title>
+<para>
+Before all operations except update, APT performs a number of actions
+to prepare its internal state. It also does some checks of the system's
+state. At any time these operations can be performed by running
+<literal>apt-get check</literal>.
+</para>
+<screen>
+# apt-get check
+Reading Package Lists... Done
+Building Dependency Tree... Done
+</screen>
+<para>
+The first thing it does is read all the package files into memory. APT uses a
+caching scheme so this operation will be faster the second time it is run. If
+some of the package files are not found then they will be ignored and a
+warning will be printed when apt-get exits.
+</para>
+<para>
+The final operation performs a detailed analysis of the system's
+dependencies. It checks every dependency of every installed or unpacked
+package and considers if it is OK. Should this find a problem then a report
+will be printed out and <command>apt-get</command> will refuse to run.
+</para>
+<screen>
+# apt-get check
+Reading Package Lists... Done
+Building Dependency Tree... Done
+You might want to run 'apt --fix-broken install' to correct these.
+Sorry, but the following packages have unmet dependencies:
+ 9fonts: Depends: xlib6g but it is not installed
+ uucp: Depends: mailx but it is not installed
+ blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed
+ adduser: Depends: perl-base but it is not installed
+ aumix: Depends: libgpmg1 but it is not installed
+ debiandoc-sgml: Depends: sgml-base but it is not installed
+ bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed
+ cthugha: Depends: svgalibg1 but it is not installed
+ Depends: xlib6g (&gt;= 3.3-5) but it is not installed
+ libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)
+</screen>
+<para>
+In this example the system has many problems, including a serious problem with
+libreadlineg2. For each package that has unmet dependencies a line is printed
+out indicating the package with the problem and the dependencies that are
+unmet. A short explanation of why the package has a dependency problem is also
+included.
+</para>
+<para>
+There are two ways a system can get into a broken state like this. The
+first is caused by <command>dpkg</command> missing some subtle relationships
+between packages when performing upgrades. <footnote><para> APT however
+considers all known dependencies and attempts to prevent broken
+packages </para> </footnote>. The second is if a package installation
+fails during an operation. In this situation a package may have been
+unpacked without its dependents being installed.
+</para>
+<para>
+The second situation is much less serious than the first because APT places
+certain constraints on the order that packages are installed. In both cases
+supplying the <literal>-f</literal> option to <command>apt-get</command>
+will cause APT to deduce a possible solution to the problem and then
+continue on. The APT <command>dselect</command> method always supplies
+the <literal>-f</literal> option to allow for easy continuation of failed
+maintainer scripts.
+</para>
+<para>
+However, if the <literal>-f</literal> option is used to correct a seriously
+broken system caused by the first case then it is possible that it will either
+fail immediately or the installation sequence will fail. In either case it is
+necessary to manually use dpkg (possibly with forcing options) to correct the
+situation enough to allow APT to proceed.
+</para>
+</section>
+
+<section id="s4.2"><title>The Status Report</title>
+<para>
+Before proceeding <command>apt-get</command> will present a report on what will
+happen. Generally the report reflects the type of operation being performed
+but there are several common elements. In all cases the lists reflect the
+final state of things, taking into account the <literal>-f</literal> option
+and any other relevant activities to the command being executed.
+</para>
+
+<section id="s4.2.1"><title>The Extra Package list</title>
+<screen>
+The following extra packages will be installed:
+ libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl
+ mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base
+ bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy
+ squake pgp-i python-base debmake ldso perl libreadlineg2
+ ssh
+</screen>
+<para>
+The Extra Package list shows all of the packages that will be installed or
+upgraded in excess of the ones mentioned on the command line. It is only
+generated for an <literal>install</literal> command. The listed packages are
+often the result of an Auto Install.
+</para>
+</section>
+
+<section id="s4.2.2"><title>The Packages to Remove</title>
+<screen>
+The following packages will be REMOVED:
+ xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix
+ xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel
+ xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid
+ nas xpilot xfig
+</screen>
+<para>
+The Packages to Remove list shows all of the packages that will be removed
+from the system. It can be shown for any of the operations and should be given
+a careful inspection to ensure nothing important is to be taken off. The
+<literal>-f</literal> option is especially good at generating packages to
+remove so extreme care should be used in that case. The list may contain
+packages that are going to be removed because they are only partially
+installed, possibly due to an aborted installation.
+</para>
+</section>
+
+<section id="s4.2.3"><title>The New Packages list</title>
+<screen>
+The following NEW packages will installed:
+ zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base
+</screen>
+<para>
+The New Packages list is simply a reminder of what will happen. The packages
+listed are not presently installed in the system but will be when APT is done.
+</para>
+</section>
+
+<section id="s4.2.4"><title>The Kept Back list</title>
+<screen>
+The following packages have been kept back
+ compface man-db tetex-base msql libpaper svgalib1
+ gs snmp arena lynx xpat2 groff xscreensaver
+</screen>
+<para>
+Whenever the whole system is being upgraded there is the possibility that new
+versions of packages cannot be installed because they require new things or
+conflict with already installed things. In this case the package will appear
+in the Kept Back list. The best way to convince packages listed there to
+install is with <literal>apt-get install</literal> or by using
+<command>dselect</command> to resolve their problems.
+</para>
+</section>
+
+<section id="s4.2.5"><title>Held Packages warning</title>
+<screen>
+The following held packages will be changed:
+ cvs
+</screen>
+<para>
+Sometimes you can ask APT to install a package that is on hold, in such a case
+it prints out a warning that the held package is going to be changed. This
+should only happen during dist-upgrade or install.
+</para>
+</section>
+
+<section id="s4.2.6"><title>Final summary</title>
+<para>
+Finally, APT will print out a summary of all the changes that will occur.
+</para>
+<screen>
+206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.
+12 packages not fully installed or removed.
+Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.
+</screen>
+<para>
+The first line of the summary simply is a reduced version of all of the lists
+and includes the number of upgrades - that is packages already installed that
+have new versions available. The second line indicates the number of poorly
+configured packages, possibly the result of an aborted installation. The final
+line shows the space requirements that the installation needs. The first pair
+of numbers refer to the size of the archive files. The first number indicates
+the number of bytes that must be fetched from remote locations and the second
+indicates the total size of all the archives required. The next number
+indicates the size difference between the presently installed packages and the
+newly installed packages. It is roughly equivalent to the space required in
+/usr after everything is done. If a large number of packages are being removed
+then the value may indicate the amount of space that will be freed.
+</para>
+<para>
+Some other reports can be generated by using the -u option to show packages to
+upgrade, they are similar to the previous examples.
+</para>
+</section>
+
+</section>
+
+<section id="s4.3"><title>The Status Display</title>
+<para>
+During the download of archives and package files APT prints out a series of
+status messages.
+</para>
+<screen>
+# apt-get update
+Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages
+Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages
+Hit http://llug.sep.bnl.gov/debian/ testing/main Packages
+Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages
+Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages
+11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s
+</screen>
+<para>
+The lines starting with <emphasis>Get</emphasis> are printed out when APT
+begins to fetch a file while the last line indicates the progress of the
+download. The first percent value on the progress line indicates the total
+percent done of all files. Unfortunately since the size of the Package files
+is unknown <literal>apt-get update</literal> estimates the percent done which
+causes some inaccuracies.
+</para>
+<para>
+The next section of the status line is repeated once for each download
+thread and indicates the operation being performed and some useful
+information about what is happening. Sometimes this section will simply
+read <emphasis>Forking</emphasis> which means the OS is loading the download
+module. The first word after the [ is the fetch number as shown on the
+history lines. The next word is the short form name of the object being
+downloaded. For archives it will contain the name of the package that is
+being fetched.
+</para>
+<para>
+Inside of the single quote is an informative string indicating the progress of
+the negotiation phase of the download. Typically it progresses from
+<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to
+<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final
+value is the number of bytes downloaded from the remote site. Once the
+download begins this is represented as <literal>102/10.2k</literal> indicating
+that 102 bytes have been fetched and 10.2 kilobytes is expected. The total
+size is always shown in 4 figure notation to preserve space. After the size
+display is a percent meter for the file itself. The second last element is the
+instantaneous average speed. This values is updated every 5 seconds and
+reflects the rate of data transfer for that period. Finally is shown the
+estimated transfer time. This is updated regularly and reflects the time to
+complete everything at the shown transfer rate.
+</para>
+<para>
+The status display updates every half second to provide a constant feedback on
+the download progress while the Get lines scroll back whenever a new file is
+started. Since the status display is constantly updated it is unsuitable for
+logging to a file, use the <literal>-q</literal> option to remove the status
+display.
+</para>
+</section>
+
+<section id="s4.4"><title>Dpkg</title>
+<para>
+APT uses <command>dpkg</command> for installing the archives and will
+switch over to the <command>dpkg</command> interface once downloading is
+completed. <command>dpkg</command> will also ask a number of questions as
+it processes the packages and the packages themselves may also ask several
+questions. Before each question there is usually a description of what it
+is asking and the questions are too varied to discuss completely here.
+</para>
+</section>
+
+</chapter>
+
+</book>
diff --git a/doc/json-hooks-protocol.md b/doc/json-hooks-protocol.md
new file mode 100644
index 0000000..ddf0fa0
--- /dev/null
+++ b/doc/json-hooks-protocol.md
@@ -0,0 +1,159 @@
+## JSON Hooks
+
+APT 1.6 introduces support for hooks that talk JSON-RPC 2.0. Hooks act
+as a server, and APT as a client.
+
+## Wire protocol
+
+APT communicates with hooks via a UNIX domain socket in file descriptor
+`$APT_HOOK_SOCKET`. The transport is a byte stream (SOCK_STREAM).
+
+The byte stream contains multiple JSON objects, each representing a
+JSON-RPC request or response, and each terminated by an empty line
+(`\n\n`). Therefore, JSON objects containing empty lines may not be
+used.
+
+For protocol version `0.1`, each JSON object must be encoded on a single
+line.
+
+## Lifecycle
+
+The general life of a hook is as following.
+
+1. Hook is started
+2. Hello handshake is exchanged
+3. One or more calls or notifications are sent from apt to the hook
+4. Bye notification is send
+
+It is unspecified whether a hook is sent one or more messages. For
+example, a hook may be started only once for the lifetime of the apt
+process and receive multiple notificatgions, but a hook may also be
+started multiple times. Hooks should thus be stateless.
+
+## JSON messages
+
+### Hello handshake
+
+APT performs a call to the method `org.debian.apt.hooks.hello` with
+the named parameter `versions` containing a list of supported protocol
+versions. The hook picks the version it supports. The current version
+is `"0.1"`, and support for that version is mandatory.
+
+*Example*:
+
+1. APT:
+ ```{"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}```
+
+
+2. Hook:
+ ```{"jsonrpc":"2.0","id":0,"result":{"version":"0.1"}}```
+
+### Bye notification
+
+Before closing the connection, APT sends a notification for the
+method `org.debian.apt.hooks.bye`.
+
+### Hook notification
+
+The following methods are supported:
+
+1. `org.debian.apt.hooks.install.pre-prompt` - Run before the y/n prompt
+1. `org.debian.apt.hooks.install.post` - Run after success
+1. `org.debian.apt.hooks.install.fail` - Run after failed install
+1. `org.debian.apt.hooks.search.pre` - Run before search
+1. `org.debian.apt.hooks.search.post` - Run after successful search
+1. `org.debian.apt.hooks.search.fail` - Run after search without results
+
+They can be registered by adding them to the list:
+
+```AptCli::Hooks::<name>```
+
+where `<name>` is the name of the hook. It is recommended that these
+option names are prefixed with `Binary::apt`, so that they only take
+effect for the `apt` binary. Otherwise, there may be compatibility issues
+with scripts and alike.
+
+#### Parameters
+
+*command*: The command used on the command-line. For example, `"purge"`.
+
+*search-terms*: Any non-option arguments given to the command.
+
+*unknown-packages*: For non-search hooks, a subset of *search-terms*
+that APT could not find packages in the cache for.
+
+*packages*: An array of modified packages. This is mostly useful for
+install. Each package has the following attributes:
+
+- *id*: An unsigned integer describing the package
+- *name*: The name of the package
+- *architecture*: The architecture of the package. For `"all"` packages, this will be the native architecture;
+ use per-version architecture fields to see `"all"`.
+
+- *mode*: One of `install`, `deinstall`, `purge`, or `keep`. `keep`
+ is not exposed in 0.1. To determine an upgrade, check
+ that a current version is installed.
+- *automatic*: Whether the package is/will be automatically installed
+- *versions*: An array with up to 3 fields:
+
+ - *candidate*: The candidate version
+ - *install*: The version to be installed
+ - *current*: The version currently installed
+
+ Each version is represented as an object with the following fields:
+
+ - *id*: An unsigned integer
+ - *version*: The version as a string
+ - *architecture*: Architecture of the version
+ - *pin*: The pin priority (optional)
+
+#### Example
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "org.debian.apt.hooks.install.pre",
+ "params": {
+ "command": "purge",
+ "search-terms": [
+ "petname-",
+ "lxd+"
+ ],
+ "packages": [
+ {
+ "id": 1500,
+ "name": "ebtables",
+ "architecture": "amd64",
+ "mode": "install",
+ "automatic": 1,
+ "versions": {
+ "candidate": {
+ "id": 376,
+ "version": "2.0.10.4-3.5ubuntu2",
+ "architecture": "amd64",
+ "pin": 990
+ },
+ "install": {
+ "id": 376,
+ "version": "2.0.10.4-3.5ubuntu2",
+ "architecture": "amd64",
+ "pin": 990
+ }
+ }
+ }
+ ]
+ }
+}
+```
+
+#### Compatibility note
+Future versions of APT might make these calls instead of notifications.
+
+## Evolution of this protocol
+New incompatible versions may be introduced with each new feature
+release of apt (1.7, 1.8, etc). No backward compatibility is promised
+until protocol 1.0: New stable feature releases may support a newer
+protocol version only (for example, 1.7 may only support 0.2).
+
+Additional fields may be added to objects without bumping the protocol
+version.
diff --git a/doc/libapt-pkg2_to_3.txt b/doc/libapt-pkg2_to_3.txt
new file mode 100644
index 0000000..6beaafb
--- /dev/null
+++ b/doc/libapt-pkg2_to_3.txt
@@ -0,0 +1,90 @@
+libapt-pkg v2 to v3 incorporates several source-incompatible changes
+that people need to be aware of.. Many of these changes are done so that
+most old source will continue to function, but perhaps at reduced
+functionality.
+
+* pkgDepCache is no longer self initializing, you have to call the Init
+ method separately after constructing it. Users of pkgCacheFile do not
+ need to worry about this
+* GetCandidateVer/etc is gone from the pkgCache. It exists only in the
+ DepCache and is just an inline around the new Policy class
+* TargetVer/TargetDist have been eliminated. Nothing should have been using
+ these.
+* There is a policy class. The v0 policy engine which has been used since
+ APT 0.0.0 is instantiated by the DepCache by default. However pkgCacheFile
+ constructs and initializes the new v4 engine. People accessing GetCandidate
+ version outside of a CacheFile/DepCache will need to instantiate and
+ initialize a policy engine on their own.
+* All byte counters are now doubles to advoid 4G wraparound. The compiler
+ should generate warnings on any incorrect use of these.
+* The PriorityType/CompType/DepType functions have been moved out of the
+ iterators and into generate static functions of pkgCache - inline stubs
+ are left in the iterators.
+* The deb dependency element parser has been made into a static function
+ of the list parser and enhanced to optionally understand architecture
+ restrictions.
+* TagSections no longer include the trailing \n. This means that the
+ Offset/Length of a package record in the version structure also does not
+ include the trailing \n.
+* GenCaches::SelectFile accepts a site parameter now too.
+* Global version compare functions are gone. If you
+ #define APT_COMPATIBILITY 1
+ They will come back as they were before. Code should be updated to
+ reference the compare functions to the VersioningSystem (VS) referenced
+ by the Cache or _system structures.
+* Initialization is now two stage (define APT_COMPATIBILITY..) The first
+ stage, pkgInitConfig is called before commandline parsing, and
+ pkgInitSystem is called after. This gives the user the opportunity to
+ override default settings from the config files before startup has been
+ finalized.
+* pkgSourceList has been gutted. All the junk that was in there before is
+ cleaned up and put in the pkgIndexFile class. There is very little API
+ correspondence here..
+* pkgMakeStatusCacheMem is gone, pkgMakeStatusCache does the same thing if
+ you set the AllowMem flag. Also, you can get a copy of the map used to
+ store the cache to advoid having to remap it in the calling code. A bunch
+ of other cache related functions are gone, but nobody should have been using
+ them in the first place!
+* Downloading the 'Package' and 'Source' index files is different, use
+ the GetIndexes call in SourceList.
+* SourceRecords::Parser::Source is gone, replaced with Index which does
+ much the same thing.
+* DynamicMap has changed slightly, nobody should care
+* pkgMakeOnlyStatusCache exists, which creates a really small cache that
+ only contains the status file, and in memory.
+* The pkgRecords stuff is changed to abstract through the index file list
+ (should be transparent largely)
+* Locking is handled differently, there is no dpkg lock class, the _system
+ class provides Lock/UnLock methods
+* pkgDepCache is not a subclass of pkgCache, it aggregates it now. Some
+ compatibility functions are provided that make this transition fairly
+ easy.
+* The following functions have had minor argument changes:
+ - pkgSimulate(pkgDepCache &Cache);
+ + pkgSimulate(pkgDepCache *Cache);
+
+ - pkgProblemResolver(pkgDepCache &Cache);
+ + pkgProblemResolver(pkgDepCache *Cache);
+
+ - pkgDepCache(MMap &Map,Policy *Plcy = 0);
+ + pkgDepCache(pkgCache *Cache,Policy *Plcy = 0);
+
+ - pkgOrderList(pkgDepCache &Cache);
+ + pkgOrderList(pkgDepCache *Cache);
+
+ - pkgPackageManager(pkgDepCache &Cache);
+ + pkgPackageManager(pkgDepCache *Cache);
+
+ - pkgCache(MMap &Map,bool DoMap = true);
+ + pkgCache(MMap *Map,bool DoMap = true);
+
+ - pkgCacheGenerator(DynamicMMap &Map,OpProgress &Progress);
+ + pkgCacheGenerator(DynamicMMap *Map,OpProgress *Progress);
+
+ - pkgTagFile(FileFd &F,unsigned long Size = 32*1024);
+ + pkgTagFile(FileFd *F,unsigned long Size = 32*1024);
+
+* Configuration class is const-correct
+* The legacy ability to create a PkgFileIterator that started at Begin
+ is gone, everyone should be using FileBegin().
+* A new dependency relation called obsoletes that is similar to conflicts.
diff --git a/doc/manpage-style.xsl.cmake.in b/doc/manpage-style.xsl.cmake.in
new file mode 100644
index 0000000..53d6780
--- /dev/null
+++ b/doc/manpage-style.xsl.cmake.in
@@ -0,0 +1,18 @@
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+<xsl:import href="@DOCBOOK_XSL@/manpages/docbook.xsl" />
+
+<xsl:param name="man.output.encoding" select="'UTF-8'" />
+
+<xsl:template match="email">&lt;<xsl:apply-templates/>&gt;</xsl:template>
+
+<xsl:template match="date">
+ <xsl:call-template name="datetime.format">
+ <xsl:with-param name="date" select="."/>
+ <xsl:with-param name="format" select="'d B Y'"/>
+ </xsl:call-template>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/method.dbk b/doc/method.dbk
new file mode 100644
index 0000000..410d689
--- /dev/null
+++ b/doc/method.dbk
@@ -0,0 +1,732 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<book lang="en">
+
+<title>APT Method Interface</title>
+
+<bookinfo>
+
+<authorgroup>
+ <author>
+ <personname>Jason Gunthorpe</personname><email>jgg@debian.org</email>
+ </author>
+</authorgroup>
+
+<releaseinfo>Version &apt-product-version;</releaseinfo>
+
+<abstract>
+<para>
+This document describes the interface that APT uses to the archive access
+methods.
+</para>
+</abstract>
+
+<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>
+
+<legalnotice>
+<title>License Notice</title>
+<para>
+"APT" and this document are free software; you can redistribute them and/or
+modify them under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+</para>
+<para>
+For more details, on Debian systems, see the file
+/usr/share/common-licenses/GPL for the full license.
+</para>
+</legalnotice>
+
+</bookinfo>
+
+<chapter id="ch1"><title>Introduction</title>
+
+<section id="s1.1"><title>General</title>
+<para>
+The APT method interface allows APT to acquire archive files (.deb), index
+files (Packages, Release, Mirrors) and source files (.tar.gz, .diff). It is a
+general, extensible system designed to satisfy all of these requirements:
+</para>
+<orderedlist numeration="arabic">
+<listitem>
+<para>
+Remote methods that download files from a distant site
+</para>
+</listitem>
+<listitem>
+<para>
+Resume of aborted downloads
+</para>
+</listitem>
+<listitem>
+<para>
+Progress reporting
+</para>
+</listitem>
+<listitem>
+<para>
+If-Modified-Since (IMS) checking for index files
+</para>
+</listitem>
+<listitem>
+<para>
+In-Line MD5 generation
+</para>
+</listitem>
+<listitem>
+<para>
+No-copy in-filesystem methods
+</para>
+</listitem>
+<listitem>
+<para>
+Multi-media methods (like CD's)
+</para>
+</listitem>
+<listitem>
+<para>
+Dynamic source selection for failure recovery
+</para>
+</listitem>
+<listitem>
+<para>
+User interaction for user/password requests and media swaps
+</para>
+</listitem>
+<listitem>
+<para>
+Global configuration
+</para>
+</listitem>
+</orderedlist>
+<para>
+Initial releases of APT (0.1.x) used a completely different method interface
+that only supported the first 6 items. This new interface deals with the
+remainder.
+</para>
+</section>
+
+<section id="s1.2"><title>Terms</title>
+<para>
+Several terms are used through out the document, they have specific meanings
+which may not be immediately evident. To clarify they are summarized here.
+</para>
+<variablelist>
+<varlistentry>
+<term>source</term>
+<listitem>
+<para>
+Refers to an item in source list. More specifically it is the broken down
+item, that is each source maps to exactly one index file. Archive sources map
+to Package files and Source Code sources map to Source files.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>archive file</term>
+<listitem>
+<para>
+Refers to a binary package archive (.deb, .rpm, etc).
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>source file</term>
+<listitem>
+<para>
+Refers to one of the files making up the source code of a package. In debian
+it is one of .diff.gz, .dsc. or .tar.gz.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>URI</term>
+<listitem>
+<para>
+Universal Resource Identifier (URI) is a super-set of the familiar URL
+syntax used by web browsers. It consists of an access specification
+followed by a specific location in that access space. The form is
+&lt;access&gt;:&lt;location&gt;. Network addresses are given with the form
+&lt;access&gt;://[&lt;user&gt;[:&lt;pas&gt;]@]hostname[:port]/&lt;location&gt;.
+Some examples:
+</para>
+<screen>
+file:/var/mirrors/debian/
+ftp://ftp.debian.org/debian
+ftp://jgg:MooCow@localhost:21/debian
+nfs://bigred/var/mirrors/debian
+rsync://debian.midco.net/debian
+cdrom:Debian 2.0r1 Disk 1/
+</screen>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>method</term>
+<listitem>
+<para>
+There is a one to one mapping of URI access specifiers to methods. A method is
+a program that knows how to handle a URI access type and operates according to
+the specifications in this file.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>method instance</term>
+<listitem>
+<para>
+A specific running method. There can be more than one instance of each method
+as APT is capable of concurrent method handling.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>message</term>
+<listitem>
+<para>
+A series of lines terminated by a blank line sent down one of the communication
+lines. The first line should have the form xxx TAG where xxx are digits
+forming the status code and TAG is an informational string
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>acquire</term>
+<listitem>
+<para>
+The act of bring a URI into the local pathname space. This may simply be
+verifying the existence of the URI or actually downloading it from a remote
+site.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+</section>
+
+</chapter>
+
+<chapter id="ch2"><title>Specification</title>
+
+<section id="s2.1"><title>Overview</title>
+<para>
+All methods operate as a sub process of a main controlling parent. 3 FD's are
+opened for use by the method allowing two way communication and emergency error
+reporting. The FD's correspond to the well known unix FD's, stdin, stdout and
+stderr.
+</para>
+<para>
+Through operation of the method communication is done via http style plain
+text. Specifically RFC-822 (like the Package file) fields are used to describe
+items and a numeric-like header is used to indicate what is happening. Each of
+these distinct communication messages should be sent quickly and without pause.
+</para>
+<para>
+In some instances APT may pre-invoke a method to allow things like file URI's
+to determine how many files are available locally.
+</para>
+</section>
+
+<section id="s2.2"><title>Message Overview</title>
+<para>
+The first line of each message is called the message header. The first 3
+digits (called the Status Code) have the usual meaning found in the http
+protocol. 1xx is informational, 2xx is successful and 4xx is failure. The 6xx
+series is used to specify things sent to the method. After the status code is
+an informational string provided for visual debugging.
+</para>
+<itemizedlist>
+<listitem>
+<para>
+100 Capabilities - Method capabilities
+</para>
+</listitem>
+<listitem>
+<para>
+101 Log - General Logging
+</para>
+</listitem>
+<listitem>
+<para>
+102 Status - Inter-URI status reporting (login progress)
+</para>
+</listitem>
+<listitem>
+<para>
+200 URI Start - URI is starting acquire
+</para>
+</listitem>
+<listitem>
+<para>
+201 URI Done - URI is finished acquire
+</para>
+</listitem>
+<listitem>
+<para>
+351 Aux Request - Method requests an auxiliary file
+</para>
+</listitem>
+<listitem>
+<para>
+400 URI Failure - URI has failed to acquire
+</para>
+</listitem>
+<listitem>
+<para>
+401 General Failure - Method did not like something sent to it
+</para>
+</listitem>
+<listitem>
+<para>
+402 Authorization Required - Method requires authorization to access the URI.
+Authorization is User/Pass
+</para>
+</listitem>
+<listitem>
+<para>
+403 Media Failure - Method requires a media change
+</para>
+</listitem>
+<listitem>
+<para>
+600 URI Acquire - Request a URI be acquired
+</para>
+</listitem>
+<listitem>
+<para>
+601 Configuration - Sends the configuration space
+</para>
+</listitem>
+<listitem>
+<para>
+602 Authorization Credentials - Response to the 402 message
+</para>
+</listitem>
+<listitem>
+<para>
+603 Media Changed - Response to the 403 message
+</para>
+</listitem>
+</itemizedlist>
+<para>
+Only the 6xx series of status codes is sent TO the method. Furthermore the
+method may not emit status codes in the 6xx range. The Codes 351, 402 and 403
+require that the method continue reading all other 6xx codes until the proper
+600/602/603 code is received. This means the method must be capable of handling an
+unlimited number of 600 messages.
+</para>
+<para>
+The flow of messages starts with the method sending out a <emphasis>100
+Capabilities</emphasis> and APT sending out a <emphasis>601
+Configuration</emphasis>. After that APT begins sending <emphasis>600 URI
+Acquire</emphasis> and the method sends out <emphasis>200 URI Start</emphasis>,
+<emphasis>201 URI Done</emphasis> or <emphasis>400 URI Failure</emphasis>. No
+synchronization is performed, it is expected that APT will send <emphasis>600
+URI Acquire</emphasis> messages at -any- time and that the method should queue
+the messages. This allows methods like http to pipeline requests to the remote
+server. It should be noted however that APT will buffer messages so it is not
+necessary for the method to be constantly ready to receive them.
+</para>
+</section>
+
+<section id="s2.3"><title>Header Fields</title>
+<para>
+The following is a short index of the header fields that are supported
+</para>
+<variablelist>
+<varlistentry>
+<term>URI</term>
+<listitem>
+<para>
+URI being described by the message
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Filename</term>
+<listitem>
+<para>
+Location in the filesystem
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Last-Modified</term>
+<listitem>
+<para>
+A time stamp in RFC1123 notation for use by IMS checks
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>IMS-Hit</term>
+<listitem>
+<para>
+The already existing item is valid
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Size</term>
+<listitem>
+<para>
+Size of the file in bytes
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Resume-Point</term>
+<listitem>
+<para>
+Location that transfer was started
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>MD5-Hash</term>
+<listitem>
+<para>
+Computed MD5 hash for the file
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Message</term>
+<listitem>
+<para>
+String indicating some displayable message
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Media</term>
+<listitem>
+<para>
+String indicating the media name required
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Site</term>
+<listitem>
+<para>
+String indicating the site authorization is required for
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>User</term>
+<listitem>
+<para>
+Username for authorization
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Password</term>
+<listitem>
+<para>
+Password for authorization
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Fail</term>
+<listitem>
+<para>
+Operation failed
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Drive</term>
+<listitem>
+<para>
+Drive the media should be placed in
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Config-Item</term>
+<listitem>
+<para>
+A string of the form
+<replaceable>item</replaceable>=<replaceable>value</replaceable> derived from
+the APT configuration space. These may include method specific values and
+general values not related to the method. It is up to the method to filter out
+the ones it wants.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Single-Instance</term>
+<listitem>
+<para>
+Requires that only one instance of the method be run This is a yes/no value.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Pipeline</term>
+<listitem>
+<para>
+The method is capable of pipelining.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Local</term>
+<listitem>
+<para>
+The method only returns Filename: fields.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Send-Config</term>
+<listitem>
+<para>
+Send configuration to the method.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Needs-Cleanup</term>
+<listitem>
+<para>
+The process is kept around while the files it returned are being used. This is
+primarily intended for CD-ROM and File URIs that need to unmount filesystems.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>Version</term>
+<listitem>
+<para>
+Version string for the method
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+<para>
+This is a list of which headers each status code can use
+</para>
+<variablelist>
+<varlistentry>
+<term>100 Capabilities</term>
+<listitem>
+<para>
+Displays the capabilities of the method. Methods should set the pipeline bit
+if their underlying protocol supports pipelining. The only known method that
+does support pipelining is http. Fields: Version, Single-Instance, Pre-Scan,
+Pipeline, Send-Config, Needs-Cleanup
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>101 Log</term>
+<listitem>
+<para>
+A log message may be printed to the screen if debugging is enabled. This is
+only for debugging the method. Fields: Message
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>102 Status</term>
+<listitem>
+<para>
+Message gives a progress indication for the method. It can be used to show
+pre-transfer status for Internet type methods. Fields: Message
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>200 URI Start</term>
+<listitem>
+<para>
+Indicates the URI is starting to be transferred. The URI is specified along
+with stats about the file itself. Fields: URI, Size, Last-Modified,
+Resume-Point
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>201 URI Done</term>
+<listitem>
+<para>
+Indicates that a URI has completed being transferred. It is possible to
+specify a <emphasis>201 URI Done</emphasis> without a <emphasis>URI
+Start</emphasis> which would mean no data was transferred but the file is now
+available. A Filename field is specified when the URI is directly available in
+the local pathname space. APT will either directly use that file or copy it
+into another location. It is possible to return Alt-* fields to indicate that
+another possibility for the URI has been found in the local pathname space.
+This is done if a decompressed version of a .gz file is found. Fields: URI,
+Size, Last-Modified, Filename, MD5-Hash
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>351 Aux Request</term>
+<listitem>
+<para>
+Indicates a request for an auxiliary file to be downloaded by the acquire system
+(via another method) and made available for the requesting method. The requestor
+will get a <emphasis>600 URI Acquire</emphasis> with the URI it requested and the
+filename will either be an existing file if the request was success or if the
+acquire failed for some reason the file will not exist.
+Fields: URI (of the file causing the need for the auxiliary file), MaximumSize,
+Aux-ShortDesc, Aux-Description, Aux-URI
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>400 URI Failure</term>
+<listitem>
+<para>
+Indicates a fatal URI failure. The URI is not retrievable from this source. As
+with <emphasis>201 URI Done</emphasis> <emphasis>200 URI Start</emphasis> is
+not required to precede this message Fields: URI, Message
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>401 General Failure</term>
+<listitem>
+<para>
+Indicates that some unspecific failure has occurred and the method is unable
+to continue. The method should terminate after sending this message. It
+is intended to check for invalid configuration options or other severe
+conditions. Fields: Message
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>402 Authorization Required</term>
+<listitem>
+<para>
+The method requires a Username and Password pair to continue. After sending
+this message the method will expect APT to send a <emphasis>602 Authorization
+Credentials</emphasis> message with the required information. It is possible
+for a method to send this multiple times. Fields: Site
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>403 Media Failure</term>
+<listitem>
+<para>
+A method that deals with multiple media requires that a new media be
+inserted. The Media field contains the name of the media to be
+inserted. Fields: Media, Drive
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>600 URI Acquire</term>
+<listitem>
+<para>
+APT is requesting that a new URI be added to the acquire list. Last-Modified
+has the time stamp of the currently cache file if applicable. Filename is the
+name of the file that the acquired URI should be written to. Fields: URI,
+Filename Last-Modified
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>601 Configuration</term>
+<listitem>
+<para>
+APT is sending the configuration space to the method. A series of Config-Item
+fields will be part of this message, each containing an entry from the
+configuration space. Fields: Config-Item.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>602 Authorization Credentials</term>
+<listitem>
+<para>
+This is sent in response to a <emphasis>402 Authorization Required</emphasis>
+message. It contains the entered username and password. Fields: Site, User,
+Password
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>603 Media Changed</term>
+<listitem>
+<para>
+This is sent in response to a <emphasis>403 Media Failure</emphasis>
+message. It indicates that the user has changed media and it is safe
+to proceed. Fields: Media, Fail
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+</section>
+
+<section id="s2.4"><title>Notes</title>
+<para>
+The methods supplied by the stock apt are:
+</para>
+<orderedlist numeration="arabic">
+<listitem>
+<para>
+cdrom - For Multi-Disc CD-ROMs
+</para>
+</listitem>
+<listitem>
+<para>
+copy - (internal) For copying files around the filesystem
+</para>
+</listitem>
+<listitem>
+<para>
+file - For local files
+</para>
+</listitem>
+<listitem>
+<para>
+gzip - (internal) For decompression
+</para>
+</listitem>
+<listitem>
+<para>
+http - For HTTP servers
+</para>
+</listitem>
+</orderedlist>
+<para>
+The two internal methods, copy and gzip, are used by the acquire code to
+parallelize and simplify the automatic decompression of package files as well as
+copying package files around the file system. Both methods can be seen to act
+the same except that one decompresses on the fly. APT uses them by generating
+a copy URI that is formed identically to a file URI. The destination file is
+send as normal. The method then takes the file specified by the URI and writes
+it to the destination file. A typical set of operations may be:
+</para>
+<screen>
+http://foo.com/Packages.gz -&gt; /bar/Packages.gz
+gzip:/bar/Packages.gz -&gt; /bar/Packages.decomp
+rename Packages.decomp to /final/Packages
+</screen>
+<para>
+The http method implements a fully featured HTTP/1.1 client that supports
+deep pipelining and reget. It works best when coupled with an apache 1.3
+server. The file method simply generates failures or success responses
+with the filename field set to the proper location. The cdrom method acts
+the same except that it checks that the mount point has a valid cdrom in
+it. It does this by (effectively) computing a md5 hash of 'ls -l' on the
+mountpoint.
+</para>
+</section>
+
+</chapter>
+
+</book>
diff --git a/doc/offline.dbk b/doc/offline.dbk
new file mode 100644
index 0000000..2ad1d98
--- /dev/null
+++ b/doc/offline.dbk
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<book lang="en">
+
+<title>Using APT Offline</title>
+
+<bookinfo>
+
+<authorgroup>
+ <author>
+ <personname>Jason Gunthorpe</personname><email>jgg@debian.org</email>
+ </author>
+</authorgroup>
+
+<releaseinfo>Version &apt-product-version;</releaseinfo>
+
+<abstract>
+<para>
+This document describes how to use APT in a non-networked environment,
+specifically a 'sneaker-net' approach for performing upgrades.
+</para>
+</abstract>
+
+<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>
+
+<legalnotice>
+<title>License Notice</title>
+<para>
+"APT" and this document are free software; you can redistribute them and/or
+modify them under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+</para>
+<para>
+For more details, on Debian systems, see the file
+/usr/share/common-licenses/GPL for the full license.
+</para>
+</legalnotice>
+
+</bookinfo>
+
+<chapter id="ch1"><title>Introduction</title>
+
+<section id="s1.1"><title>Overview</title>
+<para>
+Normally APT requires direct access to a Debian archive, either from a local
+media or through a network. Another common complaint is that a Debian machine
+is on a slow link, such as a modem and another machine has a very fast
+connection but they are physically distant.
+</para>
+<para>
+The solution to this is to use large removable media such as a Zip disc or a
+SuperDisk disc. These discs are not large enough to store the entire Debian
+archive but can easily fit a subset large enough for most users. The idea is
+to use APT to generate a list of packages that are required and then fetch them
+onto the disc using another machine with good connectivity. It is even
+possible to use another Debian machine with APT or to use a completely
+different OS and a download tool like wget. Let <emphasis>remote
+host</emphasis> mean the machine downloading the packages, and <emphasis>target
+host</emphasis> the one with bad or no connection.
+</para>
+<para>
+This is achieved by creatively manipulating the APT configuration file. The
+essential premise to tell APT to look on a disc for it's archive files. Note
+that the disc should be formatted with a filesystem that can handle long file
+names such as ext2, fat32 or vfat.
+</para>
+</section>
+
+</chapter>
+
+<chapter id="ch2"><title>Using APT on both machines</title>
+
+<section id="s2.1"><title>Overview</title>
+<para>
+APT being available on both machines gives the simplest configuration. The
+basic idea is to place a copy of the status file on the disc and use the remote
+machine to fetch the latest package files and decide which packages to
+download. The disk directory structure should look like:
+</para>
+<screen>
+ /disc/
+ archives/
+ partial/
+ lists/
+ partial/
+ status
+ sources.list
+ apt.conf
+</screen>
+</section>
+
+<section id="s2.2"><title>The configuration file</title>
+<para>
+The configuration file should tell APT to store its files on the disc and to
+use the configuration files on the disc as well. The sources.list should
+contain the proper sites that you wish to use from the remote machine, and the
+status file should be a copy of <emphasis>/var/lib/dpkg/status</emphasis> from
+the <emphasis>target host</emphasis>. Please note, if you are using a local
+archive you must use copy URIs, the syntax is identical to file URIs.
+</para>
+<para>
+<emphasis>apt.conf</emphasis> must contain the necessary information to make
+APT use the disc:
+</para>
+<screen>
+ APT
+ {
+ /* This is not necessary if the two machines are the same arch, it tells
+ the remote APT what architecture the target machine is */
+ Architecture "i386";
+
+ Get::Download-Only "true";
+ };
+
+ Dir
+ {
+ /* Use the disc for state information and redirect the status file from
+ the /var/lib/dpkg default */
+ State "/disc/";
+ State::status "status";
+
+ // Binary caches will be stored locally
+ Cache::archives "/disc/archives/";
+ Cache "/tmp/";
+
+ // Location of the source list.
+ Etc "/disc/";
+ };
+</screen>
+<para>
+More details can be seen by examining the apt.conf man page and the sample
+configuration file in
+<emphasis>/usr/share/doc/apt/examples/apt.conf</emphasis>.
+</para>
+<para>
+On the target machine the first thing to do is mount the disc and copy
+<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need
+to create the directories outlined in the Overview,
+<emphasis>archives/partial/</emphasis> and
+<emphasis>lists/partial/</emphasis>. Then take the disc to the
+remote machine and configure the sources.list. On the remote
+machine execute the following:
+</para>
+<screen>
+ # export APT_CONFIG="/disc/apt.conf"
+ # apt-get update
+ [ APT fetches the package files ]
+ # apt-get dist-upgrade
+ [ APT fetches all the packages needed to upgrade the target machine ]
+</screen>
+<para>
+The dist-upgrade command can be replaced with any other standard APT commands,
+particularly dselect-upgrade. You can even use an APT front end such as
+<emphasis>dselect</emphasis>. However this presents a problem in communicating
+your selections back to the local computer.
+</para>
+<para>
+Now the disc contains all of the index files and archives needed to upgrade the
+target machine. Take the disc back and run:
+</para>
+<screen>
+ # export APT_CONFIG="/disc/apt.conf"
+ # apt-get check
+ [ APT generates a local copy of the cache files ]
+ # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade
+ [ Or any other APT command ]
+</screen>
+<para>
+It is necessary for proper function to re-specify the status file to be the
+local one. This is very important!
+</para>
+<para>
+If you are using dselect you can do the very risky operation of copying
+disc/status to /var/lib/dpkg/status so that any selections you made on the
+remote machine are updated. I highly recommend that people only make
+selections on the local machine - but this may not always be possible. DO NOT
+copy the status file if dpkg or APT have been run in the mean time!!
+</para>
+</section>
+
+</chapter>
+
+<chapter id="ch3"><title>Using APT and wget</title>
+
+<section id="s3.1"><title>Overview</title>
+<para>
+<emphasis>wget</emphasis> is a popular and portable download tool that can run
+on nearly any machine. Unlike the method above this requires that the Debian
+machine already has a list of available packages.
+</para>
+<para>
+The basic idea is to create a disc that has only the archive files downloaded
+from the remote site. This is done by using the --print-uris option to apt-get
+and then preparing a wget script to actually fetch the packages.
+</para>
+</section>
+
+<section id="s3.2"><title>Operation</title>
+<para>
+Unlike the previous technique no special configuration files are required. We
+merely use the standard APT commands to generate the file list.
+</para>
+<screen>
+ # apt-get dist-upgrade
+ [ Press no when prompted, make sure you are happy with the actions ]
+ # apt-get -qq --print-uris dist-upgrade &gt; uris
+ # awk '{print "wget -O " $2 " " $1}' &lt; uris &gt; /disc/wget-script
+</screen>
+<para>
+Any command other than dist-upgrade could be used here, including
+dselect-upgrade.
+</para>
+<para>
+The /disc/wget-script file will now contain a list of wget commands to execute
+in order to fetch the necessary archives. This script should be run with the
+current directory as the disc's mount point so as to save the output on the
+disc.
+</para>
+<para>
+The remote machine would do something like
+</para>
+<screen>
+ # cd /disc
+ # sh -x ./wget-script
+ [ wait.. ]
+</screen>
+<para>
+Once the archives are downloaded and the disc returned to the Debian machine
+installation can proceed using,
+</para>
+<screen>
+ # apt-get -o dir::cache::archives="/disc/" dist-upgrade
+</screen>
+<para>
+Which will use the already fetched archives on the disc.
+</para>
+</section>
+
+</chapter>
+
+</book>
diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot
new file mode 100644
index 0000000..5e01d8d
--- /dev/null
+++ b/doc/po/apt-doc.pot
@@ -0,0 +1,8805 @@
+# Translation of apt manpages and documentation to LANGUAGE
+# This file is distributed under the same license as the apt-doc package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.8.2.3\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2021-04-19 16:47+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team "
+"<email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to "
+"use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before "
+"the\n"
+" default configuration files are parsed specify a file with the "
+"<envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an "
+"arbitrary\n"
+" configuration option. The syntax is <option>-o "
+"Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used "
+"multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, "
+"the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: "
+"<literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: "
+"<literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: "
+"<literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" "
+"<varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> "
+"(<filename>partial</filename> will be implicitly "
+"appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: "
+"<literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" "
+"<varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: "
+"<literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: "
+"<literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" "
+"<varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: "
+"<literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package "
+"resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: "
+"<literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" "
+"<varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> "
+"(<filename>partial</filename> will be implicitly "
+"appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added "
+"here.\n"
+" Configuration Item: "
+"<literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" "
+"<varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional "
+"keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item "
+"<literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" "
+"<varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - "
+"comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be "
+"uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has "
+"contributed\n"
+" to the translation in the past, who is responsible now and maybe "
+"further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe "
+"<email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together "
+"with the\n"
+" Debian Dummy l10n Team "
+"<email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of "
+"untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in "
+"english in\n"
+" the generated manpage. This sentence is therefore here to tell the "
+"reader that this\n"
+" is not a mistake by the translator - obviously the target is that at "
+"least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string "
+"e.g. -o=Debug::pkgProblemResolver=1 --> <!ENTITY synopsis-config-string "
+"\"config_string\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release "
+"e.g. -t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> "
+"<!ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom "
+"-d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory "
+"e.g. apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr ""
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename "
+"(&debian-stable-codename;, &debian-testing-codename;, sid …) or suite name "
+"(stable, testing, unstable). This will also select versions from this "
+"release for dependencies of this package if needed to satisfy the request."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using "
+"&apt-mark;. Packages which you have installed explicitly via "
+"<command>install</command> are also never proposed for automatic removal."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query "
+"--list</command> in that it can display a list of packages satisfying "
+"certain criteria. It supports &glob; patterns for matching package names as "
+"well as options to list installed (<option>--installed</option>), "
+"upgradeable (<option>--upgradeable</option>) or all available "
+"(<option>--all-versions</option>) versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or "
+"<literal>dist-upgrade</literal>. Please be aware that the overall progress "
+"meter will be incorrect as the size of the package files cannot be known in "
+"advance."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that "
+"<command>apt-get</command> knows that new versions of packages are "
+"available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also "
+"&apt-preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, "
+"&dselect;. <literal>dselect-upgrade</literal> follows the changes made by "
+"&dselect; to the <literal>Status</literal> field of available packages, and "
+"performs the actions necessary to realize that state (for instance, the "
+"removal of old and the installation of new packages)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, "
+"<package>apt-utils</package> would be the argument provided, not "
+"<filename>apt-utils_&apt-product-version;_amd64.deb</filename>). All "
+"packages required by the package(s) specified for installation will also be "
+"retrieved and installed. The <filename>/etc/apt/sources.list</filename> "
+"file is used to locate the desired packages. If a hyphen is appended to the "
+"package name (with no intervening space), the identified package will be "
+"removed if it is installed. Similarly a plus sign can be used to designate "
+"a package to install. These latter features may be used to override "
+"decisions made by apt-get's conflict resolution system."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for "
+"install. Alternatively a specific distribution can be selected by following "
+"the package name with a slash and the version of the distribution or the "
+"Archive name (stable, testing, unstable)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more "
+"already-installed packages without upgrading every package you have on your "
+"system. Unlike the \"upgrade\" target, which installs the newest version of "
+"all currently installed packages, \"install\" will install the newest "
+"version of only the package(s) specified. Simply provide the name of the "
+"package(s) you wish to upgrade, and if a newer version is available, it (and "
+"its dependencies, as described above) will be downloaded and installed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install "
+"--reinstall</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option "
+"<literal>APT::Default-Release</literal>, the <option>-t</option> option or "
+"per package with the <literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via "
+"<literal>deb-src</literal> lines in the &sources-list; file. This means that "
+"you will need to add such a line for each repository you want to get sources "
+"from; otherwise you will probably get either the wrong (too old/too new) "
+"source versions or none at all."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the "
+"<literal>APT::Get::Only-Source</literal> option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the "
+"<option>--host-architecture</option> option instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and "
+"<filename>&cachedir;/archives/partial/</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option "
+"<literal>APT::Clean-Installed</literal> will prevent installed packages from "
+"being erased if it is set to off."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would "
+"download. Supports a <option>--format</option> option to modify the output "
+"format as well as accepts lines of the default output to filter the records "
+"by. The command is mainly used as an interface for external tools working "
+"with APT to get information as well as filenames for downloaded files so "
+"they can use them as well instead of downloading them again on their "
+"own. Detailed documentation is omitted here and can instead be found in the "
+"file &apt-acquire-additional-files; shipped by the "
+"<package>apt-doc</package> package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: "
+"<literal>APT::Get::Fix-Broken</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with "
+"<option>-f</option> may produce an error in some situations. If a package is "
+"selected for installation (particularly if it is mentioned on the command "
+"line) and it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with "
+"<option>--ignore-missing</option> to force APT to use only the .debs it has "
+"already downloaded. Configuration Item: "
+"<literal>APT::Get::Download</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users "
+"(<option>APT::Get::Show-User-Simulation-Note</option>). Configuration Item: "
+"<literal>APT::Get::Simulate</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack "
+"(<literal>Inst</literal>). Square brackets indicate broken packages, and "
+"empty square brackets indicate breaks that are of no consequence (rare)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: "
+"<literal>APT::Get::Assume-No</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by "
+"<command>apt-get source --compile</command> and how cross-builddependencies "
+"are satisfied. By default is it not set which means that the host "
+"architecture is the same as the build architecture (which is defined by "
+"<literal>APT::Architecture</literal>). Configuration Item: "
+"<literal>APT::Get::Host-Architecture</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with "
+"<literal>install</literal>, <literal>no-upgrade</literal> will prevent "
+"packages on the command line from being upgraded if they are already "
+"installed. Configuration Item: <literal>APT::Get::Upgrade</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with "
+"<literal>install</literal>, <literal>only-upgrade</literal> will install "
+"upgrades for already installed packages only and ignore requests to install "
+"new packages. Configuration Item: "
+"<literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: "
+"<literal>APT::Get::allow-remove-essential</literal>. Introduced in APT 1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: "
+"<literal>APT::Get::allow-change-held-packages</literal>. Introduced in APT "
+"1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using "
+"<literal>force-yes</literal> can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::force-yes</literal>. This is "
+"deprecated and replaced by <option>--allow-unauthenticated</option> , "
+"<option>--allow-downgrades</option> , "
+"<option>--allow-remove-essential</option> , "
+"<option>--allow-change-held-packages</option> in 1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the "
+"<literal>update</literal> command the MD5 and size are not included, and it "
+"is up to the user to decompress any compressed files. Configuration Item: "
+"<literal>APT::Get::Print-URIs</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be "
+"purged. <option>remove --purge</option> is equivalent to the "
+"<option>purge</option> command. Configuration Item: "
+"<literal>APT::Get::Purge</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: "
+"<literal>APT::Get::List-Cleanup</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in "
+"<filename>/etc/apt/preferences</filename>. Specifically pinned packages are "
+"not affected by the value of this option. In short, this option lets you "
+"have simple control over which distribution packages will be retrieved "
+"from. Some common examples might be <option>-t '2.1*'</option>, <option>-t "
+"unstable</option> or <option>-t sid</option>. Configuration Item: "
+"<literal>APT::Default-Release</literal>; see also the &apt-preferences; "
+"manual page."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where "
+"<option>--assume-yes</option> will answer yes to any prompt, "
+"<option>--trivial-only</option> will answer no. Configuration Item: "
+"<literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or "
+"<literal>remove</literal>, then this option acts like running the "
+"<literal>autoremove</literal> command, removing unused dependency "
+"packages. Configuration Item: <literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and "
+"<literal>build-dep</literal> commands. Indicates that the given source "
+"names are not to be mapped through the binary table. This means that if "
+"this option is specified, these commands will only accept source package "
+"names as arguments, rather than accepting binary package names and looking "
+"up the corresponding source package. Configuration Item: "
+"<literal>APT::Get::Only-Source</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, "
+"<literal>APT::Get::Dsc-Only</literal>, and "
+"<literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: "
+"<literal>Acquire::AllowInsecureRepositories</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options "
+"(<literal>--allow-releaseinfo-change-</literal><replaceable>field</replaceable>) "
+"exist to allow changes only for certain fields like "
+"<literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, "
+"<literal>version</literal> and <literal>defaultpin</literal>. See also "
+"&apt-preferences;. Configuration Item: "
+"<literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and "
+"<literal>Dpkg::Progress-Fancy</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in "
+"&apt-cache; for further details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange "
+"<command>apt-cache</command> works independently of the availability of the "
+"configured sources (e.g. offline)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in "
+"question. Thus, forward dependencies must be satisfied for a package, but "
+"reverse dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use "
+"<option>--only-source</option> to display only source package names."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the "
+"cache. It is primarily for debugging."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg "
+"--print-avail</command>; it displays the package records for the named "
+"packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages "
+"are."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the "
+"<option>--generate</option> option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink "
+"url=\"http://www.research.att.com/sw/tools/graphviz/\">GraphViz</ulink> "
+"package. The result will be a set of nodes and edges representing the "
+"relationships between the packages. By default the given packages will trace "
+"out all dependent packages; this can produce a very large graph. To limit "
+"the output to only the packages listed on the command line, set the "
+"<literal>APT::Cache::GivenOnly</literal> option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink "
+"url=\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG "
+"tool</ulink>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists "
+"(<literal>APT::Architecture</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: "
+"<literal>Dir::Cache::pkgcache</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: "
+"<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></literal> "
+"e.g. <literal>APT::Cache::ShowRecommends</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If "
+"<option>--no-all-versions</option> is specified, only the candidate version "
+"will be displayed (the one which would be selected for installation). This "
+"option is only applicable to the <literal>show</literal> command. "
+"Configuration Item: <literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use "
+"<option>--no-generate</option>. Configuration Item: "
+"<literal>APT::Cache::Generate</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: "
+"<literal>APT::Cache::AllNames</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and "
+"<literal>rdepends</literal> to packages which are currently installed. "
+"Configuration Item: <literal>APT::Cache::Installed</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, "
+"<literal>Sources</literal> and <literal>Packages</literal> files as well as "
+"source package directories. Files are matched based on their name only, not "
+"their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in "
+"<package>gnupg</package>) is required. For this reason alone the "
+"programmatic usage (especially in package maintainerscripts!) is strongly "
+"discouraged. Further more the output format of all commands is undefined "
+"and can and does change whenever the underlying commands "
+"change. <command>apt-key</command> will try to detect such usage and "
+"generates warnings on stderr in these cases."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of "
+"keys. Note that there are <emphasis>no</emphasis> checks performed, so it is "
+"easy to completely undermine the &apt-secure; infrastructure if used without "
+"care."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the "
+"<filename>/etc/apt/trusted.gpg.d/</filename> directory directly as this "
+"avoids a dependency on <package>gnupg</package> and it is easier to manage "
+"keys by simply adding and removing files for maintainers and users alike."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on "
+"<command>update</command> instead, but Ubuntu's APT does."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though "
+"<filename>trusted.gpg</filename> is the primary keyring which means that "
+"e.g. new keys are added to this one."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected "
+"e.g. by <command>apt-get dselect-upgrade</command> or "
+"<command>aptitude</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or "
+"<command>aptitude</command> will at least suggest removing them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, "
+"<option>remove</option> (also known as <option>deinstall</option>) and "
+"<option>purge</option> commands. Packages with a specific selection can be "
+"displayed with <option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Unsigned Repositories"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download "
+"front-ends like &apt-get; will require explicit confirmation if an "
+"installation request includes a package from such an unauthenticated "
+"archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option "
+"<literal>allow-insecure=yes</literal>. Note that insecure repositories are "
+"strongly discouraged and all options to force apt to continue supporting "
+"them will eventually be removed. Users also have the "
+"<option>Trusted</option> option available to disable even the warnings, but "
+"be sure to understand the implications as detailed in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the "
+"&sources-list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Signed Repositories"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following "
+"pre-established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on "
+"&keyring-distro; mirrors. The keys are in the &keyring-distro; archive "
+"keyring available in the &keyring-package; package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like "
+"&apt-preferences; can depend and make use of this information. Since version "
+"1.5 the user must therefore explicitly confirm changes to signal that the "
+"user is sufficiently prepared e.g. for the new major release of the "
+"distribution shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get "
+"update</command> so that apt can download and verify the "
+"<filename>InRelease</filename> or <filename>Release.gpg</filename> files "
+"from the archives you have configured."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Repository Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive "
+"release</command> (provided in apt-utils)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg "
+"--clearsign -o InRelease Release</command> and <command>gpg -abs -o "
+"Release.gpg Release</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and "
+"key</emphasis>. If your users can't acquire your key securely the chain of "
+"trust described above is broken. How you can help users add your key "
+"depends on your archive and target audience ranging from having your keyring "
+"package included in another archive users already have configured (like the "
+"default repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink "
+"url=\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink "
+"url=\"http://www.cryptnet.net/fdp/crypto/strong_distro.html\" >Strong "
+"Distribution HOWTO</ulink> by V. Alex Brennen."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible "
+"mis-burns and verifying the index files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in "
+"<filename>&statedir;/cdroms.list</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: "
+"<literal>Acquire::cdrom::AutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: "
+"<literal>APT::CDROM::NoMount</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell "
+"script. It is given pairs of arguments, the first being a shell variable and "
+"the second the configuration value to query. As output it lists shell "
+"assignment commands for each value present. In a shell script it should be "
+"used as follows:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of "
+"MyApp::options with a default of <option>-f</option>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use "
+"--no-empty to remove them from the output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr ""
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr ""
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid "the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between "
+"<literal>/*</literal> and <literal>*/</literal>, just like C/C++ comments. "
+"Each line is of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. "
+"The quotation marks and trailing semicolon are required. The value must be "
+"on one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be "
+"used. Future versions of APT will raise errors and stop working if they "
+"encounter this misuse, so please correct such statements now while APT "
+"doesn't explicitly complain about them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture "
+"(<literal>APT::Architecture</literal>), and foreign architectures are added "
+"to the default list when they are registered via <command>dpkg "
+"--add-architecture</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by "
+"&dpkg-buildpackage; overrides the list notation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', "
+"'&debian-testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the "
+"<literal>Cache-Limit</literal>. The default of "
+"<literal>Cache-Limit</literal> is 0 which stands for no limit. If "
+"<literal>Cache-Grow</literal> is set to 0 the automatic growth of the cache "
+"is disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related "
+"checks. Disabling it means that the machine's time cannot be trusted, and "
+"APT will hence disable all time-related checks, such as "
+"<option>Check-Valid-Until</option> and verifying that the Date field of a "
+"release file is not in the future."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the "
+"<option>Valid-Until-Max</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a "
+"<literal>Valid-Until</literal> header instead of completely disabling the "
+"expiration date checking. Archive specific settings can and should be used "
+"by appending the label of the archive to the option name. Preferably, the "
+"same can be achieved for specific &sources-list; entries by using the "
+"<option>Valid-Until-Min</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a "
+"file. <literal>SizeLimit</literal> on the other hand is the maximum "
+"percentage of the size of all patches compared to the size of the targeted "
+"file. If one of these limits is exceeded the complete file is downloaded "
+"instead of the patches."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of "
+"<literal>host</literal> or <literal>access</literal> which determines how "
+"APT parallelizes outgoing connections. <literal>host</literal> means that "
+"one connection per target host will be opened, <literal>access</literal> "
+"means that one connection per URI type will be opened."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of "
+"<literal>ftp://[[user][:pass]@]host[:port]/</literal>. Per host proxies can "
+"also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the "
+"<literal>ftp::ProxyLogin</literal> script in the configuration file. This "
+"entry specifies the commands to send to tell the proxy server what to "
+"connect to. Please see &configureindex; for an example of how to do "
+"this. The substitution variables representing the corresponding URI "
+"component are <literal>$(PROXY_USER)</literal>, "
+"<literal>$(PROXY_PASS)</literal>, <literal>$(SITE_USER)</literal>, "
+"<literal>$(SITE_PASS)</literal>, <literal>$(SITE)</literal> and "
+"<literal>$(SITE_PORT)</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the "
+"<envar>ftp_proxy</envar> environment variable to an HTTP URL - see the "
+"discussion of the http method above for syntax. You cannot set this in the "
+"configuration file and it is not recommended to use FTP over HTTP due to its "
+"low efficiency."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is "
+"<literal>gpgv::Options</literal>, which passes additional parameters to "
+"gpgv."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> "
+"\"<replaceable>Methodname</replaceable>\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and "
+"<command>gzip</command>; with this scope the supported formats can be "
+"queried, modified as well as support for more formats added (see also "
+"<option>APT::Compressor</option>). The syntax for this is: <placeholder "
+"type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the "
+"<literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> will be "
+"checked at run time. If this option has been set and support for this format "
+"isn't directly built into apt, the method will only be used if this file "
+"exists; e.g. for the <literal>bzip2</literal> method (the inbuilt) setting "
+"is: <placeholder type=\"literallayout\" id=\"0\"/> Note also that list "
+"entries specified on the command line will be added at the end of the list "
+"specified in the configuration files, but before the default entries. To "
+"prefer a type in this case over the ones specified in the configuration "
+"files you can set the option direct - not in list style. This will not "
+"override the defined list; it will only prefix the list with this type."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the "
+"description-translations. APT will try to display the first available "
+"description in the language which is listed first. Languages can be defined "
+"with their short or long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and "
+"\"en\". \"<literal>environment</literal>\" has a special meaning here: it "
+"will be replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting "
+"<literal>Acquire::Languages=none</literal>. \"<literal>none</literal>\" is "
+"another special meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German "
+"one. Note that \"fr\" is downloaded, but not used unless APT is used in a "
+"French locale (where the order would be \"fr, de, en\"). <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit "
+"\"<literal>none</literal>\")."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is "
+"\"<literal>false</literal>\". Concept, implications as well as alternatives "
+"are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' "
+"field. If this isn't available the Label/Origin field of the Release file is "
+"used to check if a "
+"<literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</replaceable></literal> "
+"or "
+"<literal>Acquire::Changelogs::URI::Origin::<replaceable>ORIGIN</replaceable></literal> "
+"option exists and if so this value is taken. The value in the Release file "
+"can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</replaceable></literal> "
+"or "
+"<literal>Acquire::Changelogs::URI::Override::Origin::<replaceable>ORIGIN</replaceable></literal>. "
+"The value should be a normal URI to a text file, except that package "
+"specific data is replaced with the placeholder "
+"<literal>@CHANGEPATH@</literal>. The value for it is: 1. if the package is "
+"from a component (e.g. <literal>main</literal>) this is the first part "
+"otherwise it is omitted, 2. the first letter of source package name, except "
+"if the source package name starts with '<literal>lib</literal>' in which "
+"case it will be the first four letters. 3. The complete source package "
+"name. 4. the complete name again and 5. the source version. The first (if "
+"present), second, third and fourth part are separated by a slash "
+"('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value "
+"'<literal>no</literal>' is available for this option indicating that this "
+"source can't be used to acquire changelog files from. Another source will be "
+"tried if available in this case."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like "
+"<option>APT::Get::Show-Versions</option> effect <command>apt-get</command> "
+"as well as <command>apt</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the "
+"<option>Binary::<replaceable>specific-binary</replaceable></option> "
+"scope. Setting the option <option>APT::Get::Show-Versions</option> for the "
+"<command>apt</command> only can e.g. by done by setting "
+"<option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by "
+"<literal>Dir::Bin</literal>. <literal>Dir::Bin::Methods</literal> specifies "
+"the location of the method handlers and <literal>gzip</literal>, "
+"<literal>bzip2</literal>, <literal>lzma</literal>, <literal>dpkg</literal>, "
+"<literal>apt-get</literal> <literal>dpkg-source</literal> "
+"<literal>dpkg-buildpackage</literal> and <literal>apt-cache</literal> "
+"specify the location of the respective programs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to "
+"<filename>/tmp/staging</filename> and <literal>Dir::State::status</literal> "
+"is set to <filename>/var/lib/dpkg/status</filename>, then the status file "
+"will be looked up in <filename>/tmp/staging/var/lib/dpkg/status</filename>. "
+"If you want to prefix only relative paths, set <literal>Dir</literal> "
+"instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with "
+"<literal>.disabled</literal>, <literal>~</literal>, <literal>.bak</literal> "
+"or <literal>.dpkg-[a-z]+</literal> is silently ignored. As seen in the last "
+"default value these patterns can use regular expression syntax."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, "
+"<literal>pre-auto</literal> and <literal>never</literal>. "
+"<literal>always</literal> and <literal>prompt</literal> will remove all "
+"packages from the cache after upgrading, <literal>prompt</literal> (the "
+"default) does so conditionally. <literal>auto</literal> removes only those "
+"packages which are no longer downloadable (replaced with a new version for "
+"instance). <literal>pre-auto</literal> performs this action before "
+"downloading new packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form "
+"<literal>key=value</literal>. Special characters (equal signs, newlines, "
+"nonprintable characters, quotation marks, and percent signs in "
+"<literal>key</literal> and newlines, nonprintable characters, and percent "
+"signs in <literal>value</literal>) are %-encoded. Lists are represented by "
+"multiple <literal>key::=value</literal> lines with the same key. The "
+"configuration section ends with a blank line."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</literal> "
+"accordingly, the default being version 1. If APT isn't supporting the "
+"requested version it will send the information in the highest version it has "
+"support for instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</literal> "
+"which defaults to <literal>0</literal> for standard input and is available "
+"since version 0.9.11. Support for the option can be detected by looking for "
+"the environment variable <envar>APT_HOOK_INFO_FD</envar> which contains the "
+"number of the used file descriptor as a confirmation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure "
+"--pending</command> to let &dpkg; handle all required configurations and "
+"triggers. This option is activated by default, but deactivating it could be "
+"useful if you want to run APT multiple times in a row - e.g. in an "
+"installer. In this scenario you could deactivate this option in all but the "
+"last run."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of "
+"<literal>apt</literal>. Most of these options are not interesting to a "
+"normal user, but a few may be:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, "
+"purge</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s "
+"install</literal>) as a non-root user."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the "
+"<literal>apt</literal> libraries."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial "
+"auto-install pass performed in, e.g., <literal>apt-get install</literal>, "
+"and not to the full <literal>apt</literal> dependency resolver; see "
+"<literal>Debug::pkgProblemResolver</literal> for that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as "
+"keep/install/remove while the ProblemResolver does his work. Each addition "
+"or deletion may trigger additional actions; they are shown indented two "
+"additional spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c "
+"-&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> "
+"is the current version of the package, <literal>d.e.f</literal> is the "
+"version considered for installation and <literal>x.y.z</literal> is a newer "
+"version, but not considered for installation (because of a low pin "
+"score). The later two can be omitted if there is none or if it is the same "
+"as the installed version. <literal>section</literal> is the name of the "
+"section the package appears in."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from "
+"<filename>/etc/apt/vendors.list</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes "
+"e.g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or "
+"\"<literal>pref</literal>\" as filename extension and only contain "
+"alphanumeric, hyphen (-), underscore (_) and period (.) characters. "
+"Otherwise APT will print a notice that it has ignored a file, unless that "
+"file matches a pattern in the <literal>Dir::Ignore-Files-Silently</literal> "
+"configuration list - in which case it will be silently ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"<command>apt-get install -t testing "
+"<replaceable>some-package</replaceable></command>\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the "
+"<filename>/etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder "
+"type=\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" "
+"id=\"1\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their "
+"<filename>Release</filename> files are marked as \"NotAutomatic: yes\" but "
+"<emphasis>not</emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that do not belong to the target release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that belong to the target release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the "
+"<literal>--reinstall</literal> option is given, install the uninstalled one."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install "
+"<replaceable>some-package</replaceable></command> or <command>apt-get "
+"upgrade</command> is executed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install "
+"<replaceable>some-package</replaceable></command> or <command>apt-get "
+"upgrade</command> is executed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or "
+"\"Ximian\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is "
+"\"<literal>unstable</literal>\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is "
+"\"<literal>&debian-testing-codename;</literal>\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is "
+"\"<literal>&debian-stable-version;</literal>\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> "
+"&good-perl;* version of <literal>perl</literal> is available and the "
+"installed version is &bad-perl;*, then <literal>perl</literal> will be "
+"downgraded."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an "
+"<literal>unstable</literal> distribution is only installed if it is selected "
+"for installation and no version of the package is already installed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/<replaceable>component</replaceable>/<replaceable>arch</replaceable></filename>: "
+"for example, "
+"<filename>.../dists/stable/main/binary-i386/Packages</filename>. It "
+"consists of a series of multi-line records, one for each package available "
+"in that directory. Only two lines in each record are relevant for setting "
+"APT priorities:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or "
+"<filename>.../dists/&debian-stable-codename;/Release</filename>. It "
+"consists of a single multi-line record which applies to "
+"<emphasis>all</emphasis> of the packages in the directory tree below its "
+"parent. Unlike the <filename>Packages</filename> file, nearly all of the "
+"lines in a <filename>Release</filename> file are relevant for setting APT "
+"priorities:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named "
+"<literal>&debian-testing-codename;</literal>. Specifying this value in the "
+"APT preferences file would require the line:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the "
+"line:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is "
+"<literal>Debian</literal>. Specifying this origin in the APT preferences "
+"file would require the line:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is "
+"<literal>Debian</literal>. Specifying this label in the APT preferences "
+"file would require the line:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file "
+"<filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent "
+"<literal>unstable</literal> version if that is more recent than the "
+"installed version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package "
+"versions\n"
+"Explanation: other than those in the distribution codenamed with "
+"&debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or "
+"<filename>.sources</filename> depending on the contained format. The "
+"filenames may only contain letters (a-z and A-Z), digits (0-9), underscore "
+"(_), hyphen (-) and period (.) characters. Otherwise APT will print a "
+"notice that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type "
+"(e.g. <literal>deb-src</literal>) followed by options and arguments for "
+"this type. Individual entries cannot be continued onto a following "
+"line. Empty lines are ignored, and a <literal>#</literal> character anywhere "
+"on a line marks the remainder of that line as a comment. Consequently an "
+"entry can be disabled by commenting out the entire line. If options should "
+"be provided they are separated by spaces and all of them together are "
+"enclosed by square brackets (<literal>[]</literal>) included in the line "
+"after the type separated from it with a space. If an option allows multiple "
+"values these are separated from each other with a comma "
+"(<literal>,</literal>). An option name is separated from its value(s) by an "
+"equals sign (<literal>=</literal>). Multivalue options also have "
+"<literal>-=</literal> and <literal>+=</literal> as separators, which instead "
+"of replacing the default with the given value(s) modify the default value(s) "
+"to remove or include the given values."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and "
+"<literal>Architectures-Remove</literal> to modify the default value rather "
+"than replacing it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or "
+"<literal>&debian-testing-codename;</literal> while component is one of "
+"<literal>main</literal>, <literal>contrib</literal> or "
+"<literal>non-free</literal>. The <literal>deb-src</literal> type references "
+"a Debian distribution's source code in the same form as the "
+"<literal>deb</literal> type. A <literal>deb-src</literal> line is required "
+"to fetch source indexes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] "
+"[...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] "
+"[component2] [...]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, "
+"<literal>$(ARCH)</literal> which expands to the Debian architecture (such as "
+"<literal>amd64</literal> or <literal>armel</literal>) used on the "
+"system. This permits architecture-independent "
+"<filename>sources.list</filename> files to be used. In general this is only "
+"of interest when specifying an exact path; <literal>APT</literal> will "
+"automatically generate a URI with the current architecture otherwise."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in "
+"one-line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or "
+"like this in deb822 style format: <placeholder type=\"literallayout\" "
+"id=\"1\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the "
+"<option>Acquire::IndexTargets</option> configuration scope (targets are "
+"specified by their name in the <literal>Created-By</literal> field). "
+"Additionally, targets can be enabled or disabled by using the "
+"<literal>Identifier</literal> field as an option with a boolean value "
+"instead of using this multivalue option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the "
+"<option>Acquire::IndexTargets</option> scope, which itself defaults to the "
+"value of configuration option <option>Acquire::By-Hash</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and "
+"<option>Allow-Downgrade-To-Insecure</option> "
+"(<option>allow-downgrade-to-insecure</option>) are boolean values which all "
+"default to <literal>no</literal>. If set to <literal>yes</literal> they "
+"circumvent parts of &apt-secure; and should therefore not be used lightly!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of "
+"&apt-secure;, and should therefore only be used in a local and trusted "
+"context (if at all) as otherwise security is breached. The value "
+"<literal>no</literal> does the opposite, causing the source to be handled as "
+"untrusted even if the authentication checks passed successfully. The default "
+"value can't be set explicitly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has "
+"read-permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark "
+"(<literal>!</literal>) can be appended to the fingerprint to disable this "
+"behaviour. The option defaults to the value of the option with the same "
+"name if set in the previously acquired <filename>Release</filename> file of "
+"this repository (only fingerprints can be specified there through). "
+"Otherwise all keys in the trusted keyrings are considered valid signers for "
+"this repository."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to "
+"<literal>no</literal>. Defaults to the value of configuration option "
+"<option>Acquire::Check-Valid-Until</option> which itself defaults to "
+"<literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and "
+"<option>Acquire::Max-ValidTime</option> which are both unset by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the "
+"<option>Check-Valid-Until</option> option mentioned above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via "
+"apt-specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via "
+"&apt-authconf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is "
+"encrypted. Note that the encryption does not prevent an attacker from "
+"knowing which server (or proxy) apt is communicating with and deeper "
+"analysis can potentially still reveal which data was downloaded. If this is "
+"a concern the Tor-based schemes mentioned further below might be a suitable "
+"alternative."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via "
+"<command>mirror+<replaceable>scheme</replaceable></command>. The mirrorlist "
+"itself can contain many different URIs for mirrors the APT client can "
+"transparently pick, choose and fallback between intended to help both with "
+"distributing the load over the available mirrors and ensuring that clients "
+"can acquire data even if some configured mirrors are not available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme "
+"<package>apt-transport-<replaceable>method</replaceable></package>. For "
+"instance, the APT team also maintains the package "
+"<package>apt-transport-tor</package>, which provides access methods for HTTP "
+"and HTTPS URIs routed via the Tor network."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian "
+"&debian-stable-codename; main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under "
+"<filename>unstable/binary-i386</filename> on i386 machines, "
+"<filename>unstable/binary-amd64</filename> on amd64, and so forth for other "
+"supported architectures. [Note this example only illustrates how to use the "
+"substitution variable; official debian archives are not structured like "
+"this] <placeholder type=\"literallayout\" id=\"0\"/> <placeholder "
+"type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr ""
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: "
+"<literal>APT::ExtractTemplates::TempDir</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid "All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: "
+"<literal>APT::SortPkgs::Source</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the "
+"<literal>packages</literal> command. It also contains a contents file "
+"generator, <literal>contents</literal>, and an elaborate means to 'script' "
+"the generation process for a complete archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it for "
+".deb files, and reads the file list from each file. It then sorts and writes "
+"to stdout the list of files matched to packages. Directories are not written "
+"to the output. If multiple packages own the same file then each package is "
+"separated by a comma in the output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in "
+"<literal>APT::FTPArchive::Release::Patterns</literal>. It then writes to "
+"stdout a <filename>Release</filename> file containing (by default) an MD5, "
+"SHA1, SHA256 and SHA512 digest for each file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under "
+"<literal>APT::FTPArchive::Release</literal>, "
+"e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The supported "
+"fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, "
+"<literal>Codename</literal>, <literal>Date</literal>, "
+"<literal>NotAutomatic</literal>, <literal>ButAutomaticUpgrades</literal>, "
+"<literal>Acquire-By-Hash</literal>, <literal>Valid-Until</literal>, "
+"<literal>Signed-By</literal>, <literal>Architectures</literal>, "
+"<literal>Components</literal> and <literal>Description</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. "
+"&apt-conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid "The generate configuration has four separate sections, each described below."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the "
+"<literal>FileList</literal> setting is used below."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section "
+"<literal>External-Links</literal> setting."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each "
+"day. The contents files are round-robined so that over several days they "
+"will all be rebuilt."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is "
+"updated. This case can occur if the package file is changed in such a way "
+"that does not result in a new contents file [override edit for instance]. A "
+"hold off is allowed in hopes that new .debs will be installed, requiring a "
+"new file anyhow. The default is 10, the units are in days."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to "
+"<filename>$(DIST)/$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to "
+"<filename>$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to "
+"<filename>$(DIST)/$(SECTION)/binary-$(ARCH)/Packages</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to "
+"<filename>$(DIST)/$(SECTION)/source/Sources</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to "
+"<filename>$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to "
+"<filename>$(DIST)/$(SECTION)/</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to "
+"<filename>$(DIST)/$(SECTION)/Contents-$(ARCH)</filename>. If this setting "
+"causes multiple Packages files to map onto a single Contents file (as is the "
+"default) then <command>apt-ftparchive</command> will integrate those "
+"package files together automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, "
+"<command>apt-ftparchive</command> should read the list of files from the "
+"given file. Relative files names are prefixed with the archive directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, "
+"<command>apt-ftparchive</command> should read the list of files from the "
+"given file. Relative files names are prefixed with the archive directory. "
+"This is used when processing source indexes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section "
+"<command>apt-ftparchive</command> performs an operation similar to: "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib "
+"non-free</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or "
+"<literal>Section</literal><literal>Architecture</literal> settings."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder "
+"type=\"literallayout\" id=\"0\"/> or simply, <placeholder "
+"type=\"literallayout\" id=\"1\"/> The first form allows a double-slash "
+"separated list of old email addresses to be specified. If any of those are "
+"found then new is substituted for the maintainer field. The second form "
+"unconditionally substitutes the maintainer field."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: "
+"<literal>APT::FTPArchive::<replaceable>Checksum</replaceable></literal> and "
+"<literal>APT::FTPArchive::<replaceable>Index</replaceable>::<replaceable>Checksum</replaceable></literal> "
+"where <literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or "
+"<literal>Release</literal> and "
+"<literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: "
+"<literal>APT::FTPArchive::SourceOverride</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: "
+"<literal>APT::FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"<command>apt-ftparchive</command> packages "
+"<replaceable>directory</replaceable> | <command>gzip</command> > "
+"<filename>Packages.gz</filename>\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+msgid "Login configuration file for APT sources and proxies"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a "
+"repository. Login information needed to connect to a proxy or to download "
+"data from a repository on the other hand shouldn't always be accessible by "
+"everyone and can hence not be placed in a file with world-readable file "
+"permissions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the "
+"<filename>~/.netrc</filename> file used by "
+"<citerefentry><refentrytitle><command>ftp</command></refentrytitle><manvolnum>1</manvolnum></citerefentry> "
+"and similar programs interacting with servers. It is a simple token-based "
+"format with the following tokens being recognized; Unknown tokens will be "
+"ignored. Tokens may be separated by spaces, tabs or newlines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> "
+"<replaceable>hostname</replaceable>[:<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the "
+"<emphasis><literal>machine</literal></emphasis> token matching the hostname "
+"of the URI apt needs login information for. Extending the netrc-format a "
+"portnumber can be specified. If no port is given the token matches for all "
+"ports. Similar the path is optional and only needed and useful if multiple "
+"repositories with different login information reside on the same server. A "
+"machine token with a path matches if the path in the URI starts with the "
+"path given in the token. Once a match is made, the subsequent tokens are "
+"processed, stopping when the end of file is reached or another "
+"<emphasis><literal>machine</literal></emphasis> token is encountered."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Example"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder "
+"type=\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid "&apt-conf; &sources-list;"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid "APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the "
+"middle\" (MITM). However, such an attacker can <emphasis>not</emphasis> "
+"modify the communication to compromise the security of your system, as APT's "
+"data security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Proxy Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via "
+"<literal>Acquire::http::Proxy::<replaceable>host</replaceable></literal>. "
+"Even more finegrained control can be achieved via proxy autodetection, "
+"detailed further below. All these options use the URI format "
+"<literal><replaceable>scheme</replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</replaceable>]/</literal>. "
+"Supported URI schemes are <literal>socks5h</literal> (SOCKS5 with remote DNS "
+"resolution), <literal>http</literal> and <literal>https</literal>. "
+"Authentication details can be supplied via &apt-authconf; instead of "
+"including it in the URI directly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. "
+"<literal>Acquire::http::No-Store</literal> specifies that the proxy should "
+"not store the requested archive files in its cache, which can be used to "
+"prevent the proxy from polluting its cache with (big) .deb files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Automatic Proxy Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for "
+"host-specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via "
+"<literal>Acquire::http::Proxy::<replaceable>host</replaceable></literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name "
+"<literal>Acquire::http::ProxyAutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Connection Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The used bandwidth can be limited with "
+"<literal>Acquire::http::Dl-Limit</literal> which accepts integer values in "
+"kilobytes per second. The default value is 0 which deactivates the limit and "
+"tries to use all available bandwidth. Note that this option implicitly "
+"disables downloading from multiple servers at the same time."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial "
+"e.g. on high-latency connections. It specifies how many requests are sent in "
+"a pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare "
+"&apt-transport-http;), which, as indicated by the appended S, is wrapped in "
+"an encrypted layer known as Transport Layer Security (TLS) to provide "
+"end-to-end encryption. A sufficiently capable attacker can still observe "
+"the communication partners and deeper analysis of the encrypted "
+"communication might still reveal important details. An overview over "
+"available alternative transport methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via "
+"<literal>Acquire::https</literal> and will default to the same values "
+"specified for <literal>Acquire::http</literal>. This manpage will only "
+"document the options <emphasis>unique to https</emphasis>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see "
+"<package>ca-certificates</package> package) are used for the verification of "
+"the server certificate. An alternative certificate authority (CA) can be "
+"configured with the <literal>Acquire::https::CAInfo</literal> option and its "
+"host-specific option "
+"<literal>Acquire::https::CAInfo::<replaceable>host</replaceable></literal>. "
+"The CAInfo option specifies a file made up of CA certificates (in PEM "
+"format) concatenated together to create the chain which APT should use to "
+"verify the path from your self-signed root certificate. If the remote server "
+"provides the whole chain during the exchange, the file need only contain the "
+"root certificate. Otherwise, the whole chain is required. If you need to "
+"support multiple authorities, the only way is to concatenate everything."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and "
+"<literal>Acquire::https::CRLFile::<replaceable>host</replaceable></literal>. "
+"As with the previous option, a file in PEM format needs to be specified."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to "
+"\"<literal>false</literal>\", which will prevent the comparison from being "
+"performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and "
+"<literal>Acquire::https::SSLKey</literal>. These should be set respectively "
+"to the filename of the X.509 client certificate and the associated "
+"(unencrypted) private key, both in PEM format. In practice the use of the "
+"host-specific variants of both options is highly recommended."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported "
+"features. Note that a transport is never called directly by a user but used "
+"by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release "
+"(<literal>suite</literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key "
+"<literal>priority</literal>, the order in which mirrors are contacted is "
+"random. If a certain set of mirrors should be tried first before any of "
+"another set is tried, a priority can be explicitly set. The mirrors with the "
+"lowest number are tried first. Mirrors which have no explicit priority set "
+"default to the highest possible number and are therefore tried last. The "
+"choice between mirrors with the same priority is again random."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like "
+"<package>apt-transport-tor</package>). See the documentation of these "
+"transports on how to use them with the mirror method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as "
+"<filename>/etc/apt/mirrorlist.txt</filename> on your machine it can be used "
+"like this in &sources-list; (since apt 1.6):"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at "
+"<literal>http://apt.example.org/mirror.lst</literal> the sources.list entry "
+"from above could instead be written as:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and "
+"<literal>all</literal>. The remaining mirrors are average mirrors which "
+"should be contacted only if the earlier ones didn't work."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all "
+"type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr ""
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid "This document provides an overview of how to use the APT package manager."
+msgstr ""
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid "<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them "
+"and/or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file "
+"/usr/share/common-licenses/GPL for the full license."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT "
+"<command>dselect</command> method and the <command>apt-get</command> command "
+"line user interface. Both provide a way to install and remove packages as "
+"well as download new packages from the Internet."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both "
+"mail-transport-agents. So, exim and sendmail both declare that they provide "
+"a mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For "
+"instance,"
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other "
+"package. <command>dselect</command> or <literal>apt-get install</literal> "
+"can be used to force these packages to install."
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be "
+"fetched. Install automatically attempts to resolve dependency problems with "
+"the listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use "
+"dist-upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, "
+"<citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</manvolnum></citerefentry>. "
+"The most useful option is <literal>-d</literal> which does not install the "
+"fetched files. If the system has to download a large number of package it "
+"would be undesired to start installing them in case something goes "
+"wrong. When <literal>-d</literal> is used the downloaded archives can be "
+"installed by simply running the command that caused them to be downloaded "
+"again without <literal>-d</literal>."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection "
+"GUI. <command>dselect</command> is used to select the packages to be "
+"installed or removed and APT actually installs them."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in "
+"<command>dselect</command> and then choose the APT method. You will be "
+"prompted for a set of <emphasis>Sources</emphasis> which are places to fetch "
+"archives from. These can be remote Internet sites, local Debian mirrors or "
+"CD-ROMs. Each source can provide a fragment of the total Debian archive, APT "
+"will automatically combine them to form a complete set of packages. If you "
+"have a CD-ROM then it is a good idea to specify it first and then specify a "
+"mirror so that you have access to the latest bug fixes. APT will "
+"automatically use packages on your CD-ROM before downloading from the "
+"Internet."
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental "
+"version. <emphasis>non-US</emphasis> is only available on some mirrors and "
+"refers to packages that contain encryption technology or other things that "
+"cannot be exported from the United States. Importing these packages into the "
+"US is legal however."
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr ""
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and "
+"<command>apt-get</command> share the same interface. It is a simple system "
+"that generally tells you what it will do and then goes and does "
+"it. <placeholder type=\"footnote\" id=\"0\"/> After printing out a summary "
+"of what will happen APT then will print out some informative status messages "
+"so that you can estimate how far along it is and how much is left to do."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's "
+"state. At any time these operations can be performed by running "
+"<literal>apt-get check</literal>."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is "
+"run. If some of the package files are not found then they will be ignored "
+"and a warning will be printed when apt-get exits."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" "
+"id=\"0\"/>. The second is if a package installation fails during an "
+"operation. In this situation a package may have been unpacked without its "
+"dependents being installed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the "
+"<literal>-f</literal> option and any other relevant activities to the "
+"command being executed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken "
+"off. The <literal>-f</literal> option is especially good at generating "
+"packages to remove so extreme care should be used in that case. The list may "
+"contain packages that are going to be removed because they are only "
+"partially installed, possibly due to an aborted installation."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be "
+"changed. This should only happen during dist-upgrade or install."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid "Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not "
+"upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is "
+"done. If a large number of packages are being removed then the value may "
+"indicate the amount of space that will be freed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ "
+"Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is "
+"expected. The total size is always shown in 4 figure notation to preserve "
+"space. After the size display is a percent meter for the file itself. The "
+"second last element is the instantaneous average speed. This values is "
+"updated every 5 seconds and reflects the rate of data transfer for that "
+"period. Finally is shown the estimated transfer time. This is updated "
+"regularly and reflects the time to complete everything at the shown transfer "
+"rate."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is "
+"completed. <command>dpkg</command> will also ask a number of questions as it "
+"processes the packages and the packages themselves may also ask several "
+"questions. Before each question there is usually a description of what it is "
+"asking and the questions are too varied to discuss completely here."
+msgstr ""
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid "<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote "
+"host</emphasis> mean the machine downloading the packages, and "
+"<emphasis>target host</emphasis> the one with bad or no connection."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of "
+"<emphasis>/var/lib/dpkg/status</emphasis> from the <emphasis>target "
+"host</emphasis>. Please note, if you are using a local archive you must use "
+"copy URIs, the syntax is identical to file URIs."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it "
+"tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in "
+"<emphasis>/usr/share/doc/apt/examples/apt.conf</emphasis>."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, "
+"<emphasis>archives/partial/</emphasis> and "
+"<emphasis>lists/partial/</emphasis>. Then take the disc to the remote "
+"machine and configure the sources.list. On the remote machine execute the "
+"following:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying "
+"disc/status to /var/lib/dpkg/status so that any selections you made on the "
+"remote machine are updated. I highly recommend that people only make "
+"selections on the local machine - but this may not always be possible. DO "
+"NOT copy the status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are "
+"required. We merely use the standard APT commands to generate the file list."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including "
+"dselect-upgrade."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr ""
diff --git a/doc/po/de.po b/doc/po/de.po
new file mode 100644
index 0000000..24554c2
--- /dev/null
+++ b/doc/po/de.po
@@ -0,0 +1,12701 @@
+# Translation of apt/doc to German
+# Copyright (C) 1997, 1998, 1999 Jason Gunthorpe and others.
+# This file is distributed under the same license as the apt package.
+# Chris Leick <c.leick@vollbio.de>, 2009-2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.6\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-02-04 15:34+0100\n"
+"PO-Revision-Date: 2018-10-21 12:58+0200\n"
+"Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT-Team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA-Seite</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Vorformatierter Textblock Fehlerbericht-Abschnitt -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Fehler</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT-Fehlerseite</ulink>. \n"
+" Wenn Sie einen Fehler in APT berichten möchten, lesen Sie bitte\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> oder den\n"
+" &reportbug;-Befehl. Verfassen Sie Fehlerberichte bitte auf Englisch.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Vorformatierter Textblock Autor-Abschnitt -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Autor</title>\n"
+" <para>APT wurde vom APT-Team geschrieben <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Sollte innerhalb des Abschnitts Option des Textes benutzt werden, \n"
+" um Informationen über -h, -v, -c und -o einzufügen -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>eine kurze Aufrufzusammenfassung zeigen\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>die Version des Programms anzeigen\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Konfigurationsdatei; hiermit wird die zu verwendende\n"
+" Konfigurationssdatei angegeben. Das Programm wird die \n"
+" Vorgabe-Konfigurationsdatei und dann diese Konfigurationsdatei lesen.\n"
+" Falls Konfigurationseinstellungen vor der Vorgabe-Konfiguration\n"
+" ausgewertet werden müssen, geben Sie eine Datei in der Umgebungsvariable\n"
+" <envar>APT_CONFIG</envar> an. Lesen Sie &apt-conf;, um Syntax-Informationen zu erhalten.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>eine Konfigurationsoption setzen; hiermit wird eine\n"
+" beliebige Konfigurationsoption gesetzt. Die Syntax lautet\n"
+" <option>-o Foo::Bar=bar</option>. <option>-o</option> und\n"
+" <option>--option</option> kann mehrfach benutzt werden, um verschiedene\n"
+" Optionen zu setzen.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Sollte innerhalb des Abschnitts Option des Textes benutzt werden, \n"
+" um Informationen über -h, -v, -c und -o einzufügen -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>Alle Befehlszeilenoptionen können durch die Konfigurationsdatei gesetzt\n"
+" werden, die Beschreibung gibt die zu setzende Option an. Für\n"
+" boolesche Optionen können Sie die Konfigurationsdatei außer Kraft setzen,\n"
+" indem Sie etwas der Art <option>-f-</option>, <option>--no-f</option>,\n"
+" <option>-f=no</option> oder etliche weitere Varianten benutzen.\n"
+" </para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT-Konfigurationsdatei.\n"
+" Konfigurationselement: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT-Konfigurationsdatei-Fragmente.\n"
+" Konfigurationselement: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Speicherbereich für abgerufene Paketdateien.\n"
+" Konfigurationselement: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Speicherbereich für Paketdateien auf dem Transportweg.\n"
+" Konfigurationselement: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> wird implizit angehängt)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version-Einstellungsdatei.\n"
+" Hier können Sie &quot;pinning&quot; festlegen,\n"
+" d.h. eine Einstellung, um bestimmte Pakete aus einer separaten Quelle\n"
+" oder von einer anderen Version einer Distribution zu erhalten.\n"
+" Konfigurationselement: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>Dateifragmente für die Versionseinstellungen.\n"
+" Konfigurationselement: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Orte, von denen Pakete geladen werden.\n"
+" Konfigurationselement: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>Dateifragmente für Orte, von denen Pakete geladen werden.\n"
+" Konfigurationselement: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Speicherbereich für Statusinformationen jeder\n"
+" in &sources-list; angegebenen Paketquelle\n"
+" Konfigurationselement: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Speicherbereich für Statusinformationen auf dem Transportweg.\n"
+" Konfigurationselement: <literal>Dir::State::Lists</literal> (<filename>partial</filename> wird implizit angehängt)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Schlüsselbund lokaler vertrauenswürdiger Schlüssel,\n"
+" neue Schlüssel werden hier hinzugefügt.\n"
+" Konfigurationselement: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>Dateifragmente für vertrauenswürdige Schlüssel, zusätzliche\n"
+" Schlüsselbunde können hier (von anderen Paketen oder dem Administrator)\n"
+" gespeichert werden.\n"
+" Konfigurationselement: <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Statusliste automatisch installierter Pakete\n"
+" Konfigurationselement: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr "<!ENTITY translation-title \"ÜBERSETZUNG\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-holder \"\n"
+" Die deutsche Übersetzung wurde 2009 von Chris Leick\n"
+" <email>c.leick@vollbio.de</email> in Zusammenarbeit mit dem\n"
+" deutschen l10n-Team von Debian\n"
+" <email>debian-l10n-german@lists.debian.org</email> angefertigt.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-english \"\n"
+" Beachten Sie, dass diese Übersetzung Teile enthalten kann, die nicht\n"
+" übersetzt wurden. Dies ist so, damit kein Inhalt verloren geht, wenn\n"
+" die Übersetzung hinter dem Originalinhalt hinterherhängt.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr "<!ENTITY synopsis-config-string \"Konfigurationszeichenkette\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr "<!ENTITY synopsis-config-file \"Konfigurationsdatei\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr "<!ENTITY synopsis-target-release \"Ziel-Release\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr "<!ENTITY synopsis-architecture \"Architektur\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr "<!ENTITY synopsis-pkg \"Paket\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr "<!ENTITY synopsis-pkg-ver-number \"Paketversionsnummer\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr "<!ENTITY synopsis-prefix \"Präfix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr "<!ENTITY synopsis-regex \"regulärer_Ausdruck\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr "<!ENTITY synopsis-cdrom-mount \"CD-ROM-Einhängepunkt\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr "<!ENTITY synopsis-tmp-directory \"temporäres_Verzeichnis\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr "<!ENTITY synopsis-filename \"Dateiname\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr "<!ENTITY synopsis-path \"Pfad\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr "<!ENTITY synopsis-override \"Außer-Kraft-Setzdatei\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr "<!ENTITY synopsis-pathprefix \"Pfadpräfix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr "<!ENTITY synopsis-section \"Abschnitt\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr "<!ENTITY synopsis-keyid \"Schlüsselkennung\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr "Befehlszeilenschnittstelle"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "Beschreibung"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+"<command>apt</command> stellt eine hoch abstrahierte "
+"Befehlszeilenschnittstelle für das Paketverwaltungssystem zur Verfügung. Es "
+"ist als Endanwenderschnittstelle gedacht und aktiviert verglichen mit "
+"spezialisierteren Werkzeugen wie &apt-get; und &apt-cache; standardmäßig "
+"einige für den interaktiven Gebrauch besser geeignete Optionen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+"Ganz wie <command>apt</command> selbst ist seine Handbuchseite als "
+"Endanwenderschnittstelle gedacht und erwähnt als solche nur die am "
+"häufigsten benutzten Befehle sowie Optionen. Dies geschieht zum Teil, um "
+"keine Informationen an mehreren Stellen zu duplizieren und zum Teil, um "
+"Leser nicht mit einem Überfluss an Optionen und Einzelheiten zu überwältigen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr "(&apt-get;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+"<option>update</option> wird verwendet, um von allen konfigurierten Quellen "
+"Paketinformationen herunterzuladen. Andere Befehle arbeiten mit diesen "
+"Daten, zum Beispiel, um Paket-Upgrades durchzuführen oder um darin zu suchen "
+"und um Einzelheiten über alle zur Installation verfügbaren Pakete anzuzeigen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+"<literal>upgrade</literal> wird verwendet, um verfügbare Upgrades für alle "
+"derzeit auf dem System installierten Pakete von den in der &sources-list; "
+"konfigurierten Quellen zu installieren. Neue Pakete werden installiert, "
+"falls dies nötig ist, um Abhängigkeiten zu erfüllen, existierende werden "
+"jedoch nie entfernt. Falls das Upgrade für ein Paket verlangt, dass ein "
+"installiertes Paket entfernt wird, wird dieses Upgrade nicht durchgeführt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+"<literal>full-upgrade</literal> verrichtet die Funktion von »upgrade«, wird "
+"aber auch installierte Pakete entfernen, falls dies erforderlich ist, um ein "
+"Upgrade des Systems als Ganzes durchzuführen."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ","
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+"führt die angefragte Aktion für eines oder mehrere Pakete durch, die über "
+"&regex;, &glob; oder exakten Treffer angegeben wurden. Die angefragte Aktion "
+"kann für spezielle Pakete außer Kraft gesetzt werden, indem ein Plus (+) an "
+"den Paketnamen angehängt wird, um dieses Paket zu installieren oder ein "
+"Minus (-), um es zu entfernen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"Eine bestimmte Version eines Paketes kann durch den Paketnamen gefolgt von "
+"einem Gleichheitszeichen (=) und der Version des Paketes zur Installation "
+"ausgewählt werden. Alternativ kann die Version aus einer bestimmten "
+"Veröffentlichung ausgewählt werden, indem dem Paketnamen ein "
+"Vorwärtsschrägstrich und Codename ((&debian-stable-codename;, &debian-"
+"testing-codename;, sid …) oder Name der Programmsammlung (stable, testing, "
+"unstable) folgt. Dies wird außerdem Versionen aus dieser Veröffentlichung "
+"für Abhängigkeiten dieses Pakets auswählen, falls dies zum Erfüllen der "
+"Anfrage nötig ist."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+"Entfernen eines Pakets entfernt alle paketierten Daten, hinterlässt jedoch "
+"üblicherweise kleine (veränderte) Benutzerkonfigurationsdateien für den "
+"Fall, dass das Entfernen unbeabsichtigt geschah. Das bloße Eingeben einer "
+"Installationsanfrage für das versehentlich entfernte Paket wird seine "
+"Funktionen wieder so herstellen, wie sie vorher waren. Andererseits können "
+"Sie diese Überbleibsel durch den Aufruf von <command>purge</command> "
+"loswerden, sogar bei bereits entfernten Paketen. Beachten Sie, dass dies "
+"keine Daten oder Konfigurationsdateien betrifft, die in Ihrem Home-"
+"Verzeichnis gespeichert sind."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"<literal>autoremove</literal> wird benutzt, um Pakete zu entfernen, die "
+"automatisch installiert wurden, um Abhängigkeiten für andere Pakete zu "
+"erfüllen und die nicht mehr benötigt werden, da sich die Abhängigkeiten "
+"geändert haben oder die Pakete, die sie benötigten, in der Zwischenzeit "
+"entfernt wurden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+"Sie sollten prüfen, ob die Liste keine Anwendungen enthält, die sie zu "
+"schätzen gelernt haben, obwohl sie nur als Abhängigkeit eines anderen Pakets "
+"installiert wurden. Sie können solch ein Paket mittels &apt-mark; als "
+"manuell installiert markieren. Pakete, die Sie explizit per "
+"<command>install</command> installiert haben, werden niemals zum "
+"automatischen Entfernen vorgeschlagen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+"<option>search</option> kann zur Suche nach den angegebenen &regex;-"
+"Begriffen in der Liste verfügbarer Pakete und zur Anzeige der Treffer "
+"benutzt werden. Dies kann z.B. nützlich sein, wenn Sie nach Paketen suchen, "
+"die eine bestimmte Funktionalität bieten. Falls Sie nach einem Paket suchen, "
+"das eine bestimmte Datei enthält, probieren Sie es mit &apt-file;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+"zeigt Informationen über die angegebenen Pakete einschließlich ihrer "
+"Abhängigkeiten, Installations- und Herunterladegröße, Quellen, in denen das "
+"Paket verfügbar ist, der Beschreibung des Paketinhalts und vieles mehr. Es "
+"kann z.B. hilfreich sein, einen Blick auf diese Informationen zu werfen, "
+"bevor Sie &apt; gestatten, ein Paket zu entfernen oder wenn Sie neue Pakete "
+"zur Installation suchen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr "(in Arbeit)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+"<literal>list</literal> ist <command>dpkg-query --list</command> insofern "
+"ziemlich ähnlich, als dass es eine Liste von Paketen anzeigen kann, die "
+"bestimmte Kriterien erfüllen. Es unterstützt &glob;-Muster zum Abgleich von "
+"Paketnamen ebenso wie Optionen zum Auflisten von installierten (<option>--"
+"installed</option>) Versionen, solchen, von denen ein Upgrade durchgeführt "
+"werden kann (<option>--upgradeable</option>) oder allen verfügbaren "
+"(<option>--all-versions</option>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+"<literal>edit-sources</literal> ermöglicht die Bearbeitung Ihrer &sources-"
+"list;-Dateien in Ihrem bevorzugten Texteditor und stellt außerdem "
+"grundlegende Plausibilitätsprüfungen bereit."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr "Skriptaufruf und Unterschiede zu anderen APT-Werkzeugen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+"Die &apt;-Befehlszeile wurde als Endanwenderwerkzeug entworfen und kann bei "
+"Versionswechseln ihr Verhalten ändern. Obwohl sie versucht, nicht die "
+"Abwärtskompatibilität zu beschädigen, kann dies nicht garantiert werden, "
+"wenn eine Änderung vorteilhaft für den interaktiven Gebrauch zu sein scheint."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+"Alle Funktionalitäten von &apt; sind in APT-zugehörigen Werkzeugen wie &apt-"
+"cache; und &apt-get; ebenfalls verfügbar.&apt; ändert nur den Vorgabewert "
+"einiger Optionen (siehe &apt-conf; und insbesondere den Geltungsbereich des "
+"Programms). Daher sollten Sie vorzugsweise diese Befehle (unter Umständen "
+"mit einigen zusätzlichen aktivierten Optionen) in Ihren Skripten verwenden, "
+"da sie die Abwärtskompatibilität so weit wie möglich aufrechterhalten."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "Siehe auch"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, die APT-"
+"Benutzeranleitung in &guidesdir;, &apt-preferences;, das APT-Howto."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "Diagnose"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt</command> gibt bei normalen Aktionen 0 zurück, dezimal 100 bei "
+"Fehlern."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr "APT-Werkzeug für den Umgang mit Paketen -- Befehlszeilenschnittstelle"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> ist ein Befehlszeilenwerkzeug zur Handhabung von "
+"Paketen und könnte als »Backend« anderer Werkzeuge betrachtet werden, die "
+"die APT-Bibliothek benutzen. Es existieren mehrere "
+"»Oberflächenschnittstellen«, wie &aptitude;, &synaptic; und &wajig;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"Sofern nicht die <option>-h</option>-, oder <option>--help</option>-Option "
+"angegeben ist, muss einer der nachfolgend aufgeführten Befehle vorkommen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"<literal>update</literal> wird benutzt, um die Paketindexdatei wieder mit "
+"ihren Quellen zu synchronisieren. Die Indexe verfügbarer Pakete werden von "
+"den in <filename>/etc/apt/sources.list</filename> angegebenen Orten geladen. "
+"Wenn Sie zum Beispiel ein Debian-Archiv benutzen, ruft dieser Befehl die "
+"<filename>Packages.gz</filename>-Dateien ab und wertet sie aus, so dass "
+"Informationen über neue und aktualisierte Pakete verfügbar sind. Ein "
+"<literal>update</literal> sollte immer vor einem <literal>upgrade</literal> "
+"oder <literal>dist-upgrade</literal> ausgeführt werden. Bitte seien Sie sich "
+"bewusst, dass die Gesamtfortschrittsanzeige nicht richtig sein wird, da die "
+"Größe der Pakete nicht im voraus bekannt ist."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"<literal>upgrade</literal> wird benutzt, um die neusten Versionen aller "
+"aktuell auf dem System installierten Pakete aus den in <filename>/etc/apt/"
+"sources.list</filename> aufgezählten Quellen zu installieren. Aktuell "
+"installierte Pakete mit verfügbaren neuen Versionen werden abgerufen und das "
+"Upgrade durchgeführt. Unter keinen Umständen werden derzeit installierte "
+"Pakete entfernt oder nicht installierte Pakete heruntergeladen und "
+"installiert. Neue Versionen von aktuell installierten Paketen von denen kein "
+"Upgrade durchgeführt werden kann, ohne den Installationsstatus eines anderen "
+"Paketes zu ändern, werden in ihrer aktuellen Version bleiben. Zuerst muss "
+"ein <literal>update</literal> durchgeführt werden, so dass <command>apt-get</"
+"command> die neuen Versionen der verfügbaren Pakete kennt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"<literal>dist-upgrade</literal> enthält zusätzlich zu der Funktion von "
+"<literal>upgrade</literal> einen intelligenten Mechanismus zur Auflösung von "
+"geänderten Paketabhängigkeiten in den neuen Paketversionen. <command>apt-"
+"get</command> hat ein »intelligentes« Konfliktauflösungssystem und es wird "
+"versuchen, Upgrades der wichtigsten Pakete, wenn nötig zu Lasten der weniger "
+"wichtigen, durchzuführen. Aufgrunddessen könnte der <literal>dist-upgrade</"
+"literal>-Befehl einige Pakete entfernen. Die <filename>/etc/apt/sources."
+"list</filename>-Datei enthält eine Liste von Orten, von denen gewünschte "
+"Paketdateien abgerufen werden. Siehe auch &apt-preferences; für einen "
+"Mechanismus zum Außerkraftsetzen der allgemeinen Einstellungen für einzelne "
+"Pakete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> wird zusammen mit der traditionellen "
+"Debian-Oberfläche &dselect; benutzt. <literal>dselect-upgrade</literal> "
+"folgt den durch &dselect; am <literal>Status</literal>-Feld verfügbarer "
+"Pakete gemachten Änderungen und führt die notwendigen Aktionen durch, um "
+"diesen Status zu realisieren (zum Beispiel das Entfernen von alten und "
+"Installieren von neuen Paketen)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"Auf <literal>install</literal> folgen ein oder mehrere Pakete, für die eine "
+"Installation oder ein Upgrade gewünscht wird. Jedes Paket ist ein Paketname, "
+"kein vollständig zusammengesetzter Dateiname (zum Beispiel wäre in einem "
+"Debian-System <package>apt-utils</package> das anzugebende Argument, nicht "
+"<filename>apt-utils_&apt-product-version;_amd64.deb</filename>). Alle "
+"Pakete, die von den zur Installation angegebenen Paketen benötigt werden, "
+"werden zusätzlich heruntergeladen und installiert. Die Datei <filename>/etc/"
+"apt/sources.list</filename> wird benutzt, um die gewünschten Pakete zu "
+"finden. Wenn ein Bindestrich an den Paketnamen (ohne Leerzeichen dazwischen) "
+"angehängt ist, wird das erkannte Pakete entfernt, falls es installiert ist. "
+"Ähnlich kann ein Pluszeichen benutzt werden, um ein Paket zum Installieren "
+"vorzumerken. Diese letzteren Funktionen können benutzt werden, um "
+"Entscheidungen außer Kraft zu setzen, die vom Konfliktauflösungssystem von "
+"apt-get getroffen wurden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"Eine bestimmte Version eines Paketes kann durch den Paketnamen gefolgt von "
+"einem Gleichheitszeichen und der Version des Paketes zur Installation "
+"ausgewählt werden. Dies bewirkt, dass diese Version gesucht und zum "
+"Installieren ausgewählt wird. Alternativ kann eine bestimmte Distribution "
+"durch den Paketnamen gefolgt von einem Schrägstrich und der Version der "
+"Distribution oder des Archivnamens (»stable«, »testing«, »unstable«) "
+"ausgewählt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"Beide Mechanismen der Versionsauswahl können ein Downgrade von Paketen "
+"auslösen und müssen mit Vorsicht gehandhabt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"Dies ist außerdem das zu verwendende Ziel, wenn Sie ein Upgrade eines oder "
+"mehrerer bereits installierter Pakete durchführen möchten, ohne ein Upgrade "
+"aller Pakete auf dem System durchzuführen. Anders als das Ziel »upgrade«, "
+"das die neusten Versionen aller aktuell installierten Pakete installiert, "
+"wird »install« nur die neusten Versionen der angegebenen Pakete "
+"installieren. Geben Sie einfach den Namen des Paketes an, von dem Sie ein "
+"Upgrade durchführen möchten und wenn eine neuere Version verfügbar ist, wird "
+"sie (mitsamt ihren Abhängigkeiten, wie oben beschrieben) heruntergeladen und "
+"installiert."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"Und zu guter Letzt erlaubt es Ihnen der &apt-preferences;-Mechanismus, eine "
+"alternative Installationsrichtlinie für eigene Pakete zu erzeugen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"Wenn keine Pakete dem angegebenen Ausdruck entsprechen und der Ausdruck "
+"entweder ».«, »?« oder »*« enthält, wird vermutet, dass es sich um einen "
+"regulären POSIX-Ausdruck handelt und dieser wird auf alle Paketnamen in der "
+"Datenbank angewendet. Jeder Treffer wird dann installiert (oder entfernt). "
+"Beachten Sie, dass nach übereinstimmenden Zeichenkettenteilen gesucht wird, "
+"so dass »lo.*« auf »how-lo« und »lowest« passt. Wenn dies nicht gewünscht "
+"wird, hängen Sie an den regulären Ausdruck mit »^« oder »$« an, um einen "
+"genaueren regulären Ausdruck zu erstellen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr "die <literal>Archive:</literal>- oder <literal>Suite:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"<literal>remove</literal> ist identisch mit <literal>install</literal>, mit "
+"dem Unterschied, dass Pakete entfernt anstatt installiert werden. Beachten "
+"Sie, dass das Entfernen von Paketen deren Konfigurationsdateien im System "
+"belässt. Wenn ein Pluszeichen an den Paketnamen angehängt wird (ohne "
+"Leerzeichen dazwischen), wird das erkannte Paket installiert anstatt "
+"entfernt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"<literal>purge</literal> entspricht <literal>remove</literal> mit dem "
+"Unterschied, dass Pakete entfernt und vollständig gelöscht werden (sämtliche "
+"Konfigurationsdateien werden ebenfalls gelöscht)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"<literal>source</literal> veranlasst <command>apt-get</command> dazu, "
+"Paketquellen zu holen. APT wird die verfügbaren Pakete überprüfen, um zu "
+"entscheiden, welche Paketquellen geholt werden. Es wird dann die neueste "
+"Version der Paketquelle finden und in das aktuelle Verzeichnis "
+"herunterladen. Dabei berücksichtigt es – falls möglich – die Voreinstellung "
+"für die Version der Distribution, die über die Option <literal>APT::Default-"
+"Release</literal>, die Option <option>-t</option> oder pro Paket mit der "
+"<literal>Paket/Distribution</literal>-Syntax gesetzt wurde."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"Paketquellen werden vom Binärpaket getrennt über <literal>deb-src</literal>-"
+"Zeilen in der &sources-list;-Datei festgelegt. Das bedeutet, dass Sie für "
+"jedes Depot, aus dem Sie Quellen erhalten wollen, eine solche Zeile "
+"hinzufügen müssen; andernfalls werden Sie eventuell entweder die falschen "
+"Versionen (zu alte/zu neue) oder überhaupt keine Quellpakete erhalten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"Falls die Option <option>--compile</option> angegeben ist, wird das Paket "
+"unter Benutzung von <command>dpkg-buildpackage</command> für die "
+"Architektur, die durch <command>--host-architecture</command> definiert ist, "
+"zu einem binären .deb kompiliert. Falls <option>--download-only</option> "
+"angegeben ist, wird das Quellpaket nicht entpackt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"Eine bestimmte Quellversion kann durch Anhängen eines Gleichheitszeichens an "
+"den Paketnamen gefolgt von der Versionsnummer heruntergeladen werden, "
+"ähnlich dem Mechanismus, der für die Binärpakete benutzt wird. Dies "
+"ermöglicht exakte Übereinstimmung von Quellpaketname und -version und "
+"impliziert das Aktivieren der <literal>APT::Get::Only-Source</literal>-"
+"Option."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"Beachten Sie, dass Quellpakete nicht wie normale Binärpakete in der "
+"Datenbank von <command>dpkg</command> installiert und nachverfolgt werden; "
+"sie werden nur wie Quell-Tarball-Archive in das aktuelle Verzeichnis "
+"heruntergeladen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"<literal>build-dep</literal> veranlasst apt-get, Pakete zu installieren/"
+"entfernen, um zu versuchen, die Bauabhängigkeiten eines Quellpakets zu "
+"erfüllen. Standardmäßig werden die Abhängigkeiten erfüllt, um das Paket auf "
+"native Art zu bauen. Falls gewünscht, kann stattdessen eine "
+"Rechnerarchitektur mit der Option <option>--host-architecture</option> "
+"angegeben werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"<literal>check</literal> ist ein Diagnosewerkzeug. Es aktualisiert den "
+"Paketzwischenspeicher und prüft, ob beschädigte Abhängigkeiten vorliegen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> wird das angegebene Binärpaket in das aktuelle "
+"Verzeichnis herunterladen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"<literal>clean</literal> bereinigt das lokale Depot von heruntergeladenen "
+"Paketdateien. Es entfernt alles außer der Sperrdatei aus "
+"<filename>&cachedir;/archives/</filename> und <filename>&cachedir;/archives/"
+"partial/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr "(und der"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr "Alias seit 1.1)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"Wie <literal>clean</literal> bereinigt <literal>autoclean</literal> das "
+"lokale Depot von heruntergeladenen Paketdateien. Der Unterschied besteht "
+"darin, dass es nur Pakete entfernt, die nicht mehr heruntergeladen werden "
+"können und größtenteils nutzlos sind. Dies erlaubt es, einen "
+"Zwischenspeicher über eine lange Zeitspanne zu betreiben, ohne dass er "
+"unkontrolliert anwächst. Die Konfigurationsoption <literal>APT::Clean-"
+"Installed</literal> wird installierte Pakete vor der Löschung bewahren, wenn "
+"sie auf »off« gesetzt ist."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"<literal>autoremove</literal> wird benutzt, um Pakete zu entfernen, die "
+"automatisch installiert wurden, um Abhängigkeiten für andere Pakete zu "
+"erfüllen, und die nicht mehr benötigt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> versucht, das Changelog eines Pakets "
+"herunterzuladen und mit <command>sensible-pager</command> anzuzeigen. "
+"Standardmäßig zeigt es das Changelog für die installierte Version. Sie "
+"können jedoch die gleichen Optionen wie für den Befehl <option>install</"
+"option> angeben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+"zeigt standardmäßig ein Liste im Deb822-Format mit Informationen über alle "
+"Datendateien (auch als Indexziele bekannt) an, die <command>apt-get update</"
+"command> herunterladen würde. Es unterstützt eine <option>--format</option>-"
+"Option, um das Ausgabeformat zu ändern und auch um Zeilen der "
+"Standardausgabe zum Filtern der Datensätze zu akzeptieren. Der Befehl wird "
+"hauptsächlich als Schnittstelle für externe Werkzeuge benutzt, die mit APT "
+"arbeiten, um Informationen sowie Dateinamen für heruntergeladenen Dateien zu "
+"holen, um sie auch anstelle selbst heruntergeladener zu verwenden. "
+"Umfangreiche Dokumentation ist hier nicht enthalten, sondern stattdessen in "
+"der Datei &apt-acquire-additional-files; im Paket <package>apt-doc</package> "
+"zu finden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "Optionen"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"betrachtet empfohlene Pakete nicht als Abhängigkeit für die Installation. "
+"Konfigurationselement: <literal>APT::Install-Recommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"betrachtet vorgeschlagene Pakete als Abhängigkeit für die Installation. "
+"Konfigurationselement: <literal>APT::Install-Suggests</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"nur herunterladen; Paketdateien werden nur heruntergeladen, nicht entpackt "
+"oder installiert. Konfigurationselement: <literal>APT::Get::Download-Only</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"Fehler beheben; versucht ein System von vorhandenen, beschädigten "
+"Abhängigkeiten zu befreien. Diese Option kann, wenn sie mit "
+"»install«/»remove« benutzt wird, einige Pakete weglassen, um es APT zu "
+"erlauben, eine wahrscheinliche Lösung herzuleiten. Falls Pakete angegeben "
+"wurden, müssen diese das Problem vollständig korrigieren. Die Option ist "
+"manchmal nötig, wenn APT zum ersten Mal ausgeführt wird. APT selbst erlaubt "
+"es nicht, dass auf einem System beschädigte Paketabhängigkeiten existieren. "
+"Es ist möglich, dass eine Abhängigkeitsstruktur eines Systems so fehlerhaft "
+"ist, dass ein manuelles Eingreifen erforderlich ist (was normalerweise "
+"bedeutet, dass <command>dpkg --remove</command> benutzt wird, um einige der "
+"fehlerhaften Pakete zu beseitigen). Wenn Sie die Option zusammen mit "
+"<option>-m</option> benutzen, könnte das in einigen Situationen zu Fehlern "
+"führen. Konfigurationselement: <literal>APT::Get::Fix-Broken</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"ignoriert fehlende Pakete; Wenn Pakete nicht heruntergeladen werden können "
+"oder die Integritätsprüfung nach dem Herunterladen fehlschlägt (fehlerhafte "
+"Paketdateien), werden diese Pakete zurückgehalten und das Ergebnis "
+"verarbeitet. Die Benutzung dieser Option zusammen mit <option>-f</option> "
+"kann in einigen Situationen zu Fehlern führen. Wenn ein Paket zur "
+"Installation ausgewählt ist (besonders, wenn es auf der Befehlszeile "
+"angegeben wurde) und nicht heruntergeladen werden kann, wird es "
+"stillschweigend zurückgehalten. Konfigurationselement: <literal>APT::Get::"
+"Fix-Missing</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"schaltet das Herunterladen von Paketen aus. Es ist am sinnvollsten, dies "
+"zusammen mit <option>--ignore-missing</option> zu verwenden, um APT zu "
+"zwingen, nur die .debs zu benutzten, die es bereits heruntergeladenen hat. "
+"Konfigurationselement: <literal>APT::Get::Download</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"still; erzeugt eine Ausgabe, die für Protokollierung geeignet ist und keine "
+"Fortschrittsanzeigen enthält. Mehr »q«s unterdrücken weitere Ausgaben, bis "
+"zu einem Maximum von 2. Sie können außerdem <option>-q=#</option> benutzen, "
+"um die Stillestufe zu setzen, was die Konfigurationsdatei außer Kraft setzt. "
+"Beachten Sie, dass Stillestufe 2 <option>-y</option> impliziert. Sie sollten "
+"niemals -qq ohne einen keine-Aktion-Schalter, wie -d, --print-uris oder -s "
+"benutzen, da APT Entscheidungen treffen könnte, die Sie nicht erwarteten. "
+"Konfigurationselement: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+"keine Aktion; führt eine Simulation von Ereignissen durch, die basierend auf "
+"dem aktuellen Systemstatus auftreten würden, verändert das System jedoch "
+"nicht wirklich. Sperren wird deaktiviert (<option>Debug::NoLocking</"
+"option>), daher kann sich der Systemstatus ändern, während <command>apt-get</"
+"command> ausgeführt wird. Simulationen können auch von Nicht-Root-Benutzern "
+"ausgeführt werden, die möglicherweise keinen Lesezugriff auf alle APT-"
+"Konfigurationsdateien haben, was die Simulation verfälschen könnte. Außerdem "
+"wird standardmäßig Nicht-Root-Benutzern ein Hinweis mit einer entsprechenden "
+"Warnung angezeigt. (<option>APT::Get::Show-User-Simulation-Note</option>). "
+"Konfigurationselement: <literal>APT::Get::Simulate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"Simulieren gibt eine Serie von Zeilen aus, von denen jede eine "
+"<command>dpkg</command>-Aktion darstellt: Konfigurieren (<literal>Conf</"
+"literal>), Entfernen (<literal>Remv</literal>) oder Entpacken "
+"(<literal>Inst</literal>). Eckige Klammern zeigen beschädigte Pakete an und "
+"ein leeres Paar eckiger Klammern steht für Beschädigungen, die keine Folgen "
+"haben (selten)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"automatisches »Ja« auf Anfragen; versucht auf alle Anfragen mit »Ja« zu "
+"antworten und ohne Benutzerinteraktion zu laufen. Wenn eine unerwünschte "
+"Situation eintritt, wie eine Änderung an einem gehaltenen Paket, die "
+"Installation eines nicht authentifizierten Pakets oder das Entfernen eines "
+"essenziellen Pakets, dann wird <literal>apt-get</literal> abgebrochen. "
+"Konfigurationselement: <literal>APT::Get::Assume-Yes</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"automatisches »Nein« auf alle Anfragen. Konfigurationselement: <literal>APT::"
+"Get::Assume-No</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"gibt keine Liste aller Pakete aus, für die ein Upgrade durchgeführt werden "
+"kann. Konfigurationselement: <literal>APT::Get::Show-Upgraded</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"zeigt vollständige Versionen für Pakete, von denen ein Upgrade durchgeführt "
+"oder die installiert wurden. Konfigurationselement: <literal>APT::Get::Show-"
+"Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"Diese Option steuert, wie die Architektur der durch <command>apt-get source "
+"--compile</command> gebauten Pakete und wie Cross-Bauabhängigkeiten erfüllt "
+"werden. Standardmäßig ist sie nicht gesetzt, was bedeutet, dass die "
+"Rechnerarchitektur die gleiche wie die Bauarchitektur (die durch "
+"<literal>APT::Architecture</literal>) definiert wird) ist. "
+"Konfigurationselement: <literal>APT::Get::Host-Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"Diese Option steuert die aktivierten Bauprofile für die ein Quellpaket durch "
+"<command>apt-get source --compile</command> gebaut und wie Cross-"
+"Bauabhängigkeiten erfüllt werden. Standardmäßig ist kein Bauprofil aktiv. "
+"Weitere Bauprofile können gleichzeitig aktiviert werden, indem sie durch "
+"Kommas getrennt angehängt werden. Konfigurationselement: <literal>APT::Build-"
+"Profiles</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"kompiliert Quellpakete, nachdem sie heruntergeladen wurden. "
+"Konfigurationselement: <literal>APT::Get::Compile</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"ignoriert Zurückhalten des Paketes; dies veranlasst <command>apt-get</"
+"command>, ein für das Paket gesetztes »Halten« zu ignorieren. Dies kann "
+"zusammen mit <literal>dist-upgrade</literal> nützlich sein, um eine große "
+"Anzahl ungewünschter »Halten« außer Kraft zu setzen. Konfigurationselement: "
+"<literal>APT::Ignore-Hold</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+"erlaubt das Installieren neuer Pakete, wenn es zusammen mit "
+"<literal>upgrade</literal> benutzt wird. Dies ist nützlich, falls das "
+"Aktualisieren eines installierten Pakets zur Installation neue "
+"Abhängigkeiten erfordert. Anstatt das Paket zurückzuhalten, wird "
+"<literal>upgrade</literal> ein Upgrade des Pakets durchführen und die neuen "
+"Abhängigkeiten installieren. Beachten Sie, dass <literal>upgrade</literal> "
+"mit dieser Option niemals Pakete entfernen, sondern nur das Hinzufügen neuer "
+"gestatten wird. Konfigurationselement: <literal>APT::Get::Upgrade-Allow-New</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"kein Upgrade von Paketen durchführen; wenn es zusammen mit <literal>install</"
+"literal> benutzt wird, wird <literal>no-upgrade</literal> auf der "
+"Befehlszeile ein Upgrade von Paketen verhindern, die bereits installiert "
+"sind. Konfigurationselement: <literal>APT::Get::Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"keine neuen Pakete installieren; wenn es zusammen mit <literal>install</"
+"literal> benutzt wird, wird <literal>only-upgrade</literal> nur Upgrades "
+"bereits installierter Pakete durchführen und Anfragen zur Installation neuer "
+"Pakete ignorieren. Konfigurationselement: <literal>APT::Get::Only-Upgrade</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"Dies ist eine gefährliche Option, die APT veranlasst, ohne Nachfrage "
+"fortzufahren, wenn es Downgrades durchführt. Sie sollte nicht benutzt "
+"werden, außer in ganz besonderen Situationen. Ihre Verwendung kann "
+"möglicherweise Ihr System zerstören. Konfigurationselement: <literal>APT::"
+"Get::allow-downgrades</literal>. Eingeführt mit APT 1.1."
+
+# Tatsächlich fragt APT »J/n«
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"erzwingt »Ja«; dies ist eine gefährliche Option, die APT veranlasst, ohne "
+"Nachfrage fortzufahren, wenn wesentliche Teile des Systems entfernt werden "
+"sollen. Sie sollte nicht benutzt werden, außer in ganz besonderen "
+"Situationen. Ihre Verwendung kann möglicherweise Ihr System zerstören. "
+"Konfigurationselement: <literal>APT::Get::allow-remove-essential</literal>. "
+"Eingeführt mit APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"erzwingt »Ja«; dies ist eine gefährliche Option, die APT veranlasst, ohne "
+"Nachfrage fortzufahren, wenn gehaltene Pakete geändert werden sollen. Sie "
+"sollte nicht benutzt werden, außer in ganz besonderen Situationen. Sie zu "
+"benutzen, kann möglicherweise Ihr System zerstören! Konfigurationselement: "
+"<literal>APT::Get::allow-change-held-packages</literal>. Eingeführt mit APT "
+"1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"erzwingt »Ja«; dies ist eine gefährliche Option, die APT veranlasst, ohne "
+"Nachfrage fortzufahren, wenn es etwas möglicherweise schädliches tut. Es "
+"sollte nicht benutzt werden, außer in ganz besonderen Situationen. "
+"<literal>force-yes</literal> zu benutzen, kann möglicherweise Ihr System "
+"zerstören! Konfigurationselement: <literal>APT::Get::force-yes</literal>. "
+"Dies ist veraltet und wurde in 1.1. durch <option>--allow-unauthenticated</"
+"option>, <option>--allow-downgrades</option>, <option>--allow-remove-"
+"essential</option> und <option>--allow-change-held-packages</option> ersetzt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"Anstatt die Dateien herunterzuladen, werden ihre URIs ausgegeben. Jeder URI "
+"wird den Pfad, den Zieldateinamen, die Größe und den erwarteten MD5-Hash "
+"enthalten. Beachten Sie, dass der zu schreibende Dateiname nicht immer dem "
+"Dateinamen auf der entfernt gelegenen Site entspricht. Dies funktioniert "
+"auch mit den Befehlen <literal>source</literal> und <literal>update</"
+"literal>. Wenn es mit dem Befehl <literal>update</literal> benutzt wird, "
+"sind MD5 und Größe nicht enthalten und es ist Aufgabe des Benutzers, "
+"komprimierte Dateien zu dekomprimieren. Konfigurationselement: <literal>APT::"
+"Get::Print-URIs</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"»purge« anstelle von »remove« für alles zu entfernende benutzen. Ein Stern "
+"(»*«) wird bei Paketen angezeigt, die zum vollständigen Entfernen vorgemerkt "
+"sind. <option>remove --purge</option> entspricht dem Befehl <option>purge</"
+"option>. Konfigurationselement: <literal>APT::Get::Purge</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"installiert Pakete erneut, die bereits mit der neusten Version installiert "
+"sind. Konfigurationselement: <literal>APT::Get::ReInstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"Diese Option ist standardmäßig eingeschaltet. Um sie auszuschalten, benutzen "
+"Sie <literal>--no-list-cleanup</literal>. Wenn eingeschaltet, wird "
+"<command>apt-get</command> den Inhalt von <filename>&statedir;/lists</"
+"filename> automatisch verwalten, um sicherzustellen, dass veraltete Dateien "
+"gelöscht werden. Nur das häufige Ändern der Quelllisten stellt den einzigen "
+"Grund zum Ausschalten der Option dar. Konfigurationselement: <literal>APT::"
+"Get::List-Cleanup</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"Diese Option steuert die standardmäßige Eingabe an die Einheit zur "
+"Durchsetzung der Richtlinien (»policy«), sie erstellt eine Vorgabe-Pin mit "
+"Priorität 990 unter Benutzung der angegebenen Release-Zeichenkette. Dies "
+"setzt die allgemeinen Einstellungen in <filename>/etc/apt/preferences</"
+"filename> außer Kraft. Pakete mit speziellem Pinning sind nicht vom Wert "
+"dieser Option betroffen. Kurz gesagt, gibt Ihnen diese Option einfache "
+"Kontrolle darüber, aus welcher Distribution Pakete heruntergeladen werden "
+"sollen. Einige typische Beispiele könnten <option>-t '2.1*'</option>, "
+"<option>-t unstable</option> oder <option>-t sid</option> sein. "
+"Konfigurationselement: <literal>APT::Default-Release</literal>; lesen Sie "
+"auch die &apt-preferences;-Handbuchseite."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"führt nur Aktionen aus, die »trivial« sind. Von der Logik her ähnelt sie der "
+"<option>--assume-yes</option>. An Stellen, an denen <option>--assume-yes</"
+"option> »ja« auf Fragen antwortet, antwortet <option>--trivial-only</option> "
+"»Nein«. Konfigurationselement: <literal>APT::Get::Trivial-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"Wenn irgendwelche Pakete entfernt werden sollen, bricht apt-get sofort ohne "
+"Nachfrage ab. Konfigurationselement: <literal>APT::Get::Remove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"Wenn der Befehl entweder <literal>install</literal> oder <literal>remove</"
+"literal> lautet, dann bewirkt diese Option wie das Ausführen des "
+"<literal>autoremove</literal>-Befehls das Entfernen der nicht mehr "
+"benötigten abhängigen Pakete. Konfigurationselement: <literal>APT::Get::"
+"AutomaticRemove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"hat nur eine Bedeutung für die Befehle <literal>source</literal> und "
+"<literal>build-dep</literal>. Zeigt an, dass die angegebenen Quellnamen "
+"nicht durch die binäre Tabelle ermittelt werden. Dies bedeutet, dass dieser "
+"Befehl, wenn diese Option angegeben ist, nur Quellpaketnamen als Argumente "
+"akzeptiert, anstatt Binärpaketnamen zu akzeptieren und das entsprechende "
+"Quellpaket nachzuschlagen. Konfigurationselement: <literal>APT::Get::Only-"
+"Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"lädt nur die diff-, dsc-, oder tar-Dateien eines Quellarchivs herunter. "
+"Konfigurationselemente: <literal>APT::Get::Diff-Only</literal>, "
+"<literal>APT::Get::Dsc-Only</literal> und <literal>APT::Get::Tar-Only</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"verarbeitet nur architekturabhängige Bauabhängigkeiten. "
+"Konfigurationselement: <literal>APT::Get::Arch-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"verarbeitet nur architekturunabhängige Bauabhängigkeiten. "
+"Konfigurationselement: <literal>APT::Get::Indep-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+"ignoriert, falls Pakete nicht authentifiziert werden können, und zeigt es "
+"nicht an. Dies kann bei der Arbeit mit lokalen Depots nützlich sein, ist "
+"jedoch ein großes Sicherheitsrisiko, falls die Echtheit der Daten nicht "
+"durch den Benutzer selbst auf eine andere Art sichergestellt ist. Die "
+"Benutzung der Option <option>Trusted</option> für &sources-list;-Einträge "
+"sollte normalerweise diesem globalen Außer-Kraft-setzen vorgezogen werden. "
+"Konfigurationselement: <literal>APT::Get::AllowUnauthenticated</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+"verbietet dem Befehl »update« das Beschaffen nicht überprüfbarer Daten von "
+"konfigurierten Quellen. APT wird beim Befehl »update« für Depots ohne "
+"gültige kryptografische Signaturen fehlschlagen. Weiter Einzelheiten über "
+"das Konzept und dessen Folgen finden Sie unter &apt-secure;. "
+"Konfigurationselement: <literal>Acquire::AllowInsecureRepositories</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+"erlaubt dem Aktualisierungsbefehl mit dem Herunterladen von Daten aus einem "
+"Depot fortzufahren, bei dem sich die Information geändert hat, welche "
+"Veröffentlichung im Depot enthalten ist, z.B. eine neue "
+"Hauptveröffentlichung. APT wird beim Aktualisierungsbefehl für derartige "
+"Depots bis zur Bestätigung scheitern, um sicherzustellen, dass der Benutzer "
+"auf die Änderung vorbereitet ist. Weitere Einzelheiten des Konzepts und der "
+"Konfiguration finden Sie unter &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+"Es existieren Spezialoptionen (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>Feld</replaceable>), um Änderungen nur für bestimmte "
+"Felder wie <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> und <literal>defaultpin</literal> zu erlauben. Siehe auch &apt-"
+"preferences;. Konfigurationselement: <literal>Acquire::"
+"AllowReleaseInfoChange</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+"zeigt benutzerfreundliche Fortschrittsinformationen im Terminalfenster, wenn "
+"Pakete installiert beziehungsweise entfernt werden oder ein Upgrade "
+"durchgeführt wird. Informationen über eine maschinell auswertbare Version "
+"dieser Daten finden Sie in README.progress-reporting im "
+"Dokumentationsverzeichnis apt/doc. Konfigurationselemente: <literal>Dpkg::"
+"Progress</literal> und <literal>Dpkg::Progress-Fancy</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+"fügt die angegebene Datei als Quelle für Metadaten hinzu. Dies kann mehrfach "
+"verwendet werden, um mehrere Dateien hinzuzufügen. Weitere Einzelheiten der "
+"<option>--with-source</option>-Beschreibung finden Sie unter &apt-cache;."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "Dateien"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, die APT-Benutzeranleitung in &guidesdir;, &apt-preferences;, "
+"das APT-Howto."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> gibt bei normalen Aktionen 0 zurück, dezimal 100 "
+"bei Fehlern."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "den APT-Zwischenspeicher abfragen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> führt eine Vielzahl von Aktionen auf dem "
+"Paketzwischenspeicher von APT durch. <command>apt-cache</command> verändert "
+"nicht den Status des Systems, stellt aber Aktionen zum Suchen und Erzeugen "
+"von interessanten Ausgaben der Paket-Metadaten bereit. Die Metadaten werden "
+"mittels des Befehls »update« z.B. von <command>apt-get</command> beschafft "
+"und aktualisiert, so dass sie veraltet sein können, falls die letzte "
+"Aktualisierung zu lange her ist. Im Gegenzug funktioniert <command>apt-"
+"cache</command> unabhängig davon, ob die konfigurierten Quellen verfügbar "
+"sind (z.B. offline)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> erzeugt den Paketzwischenspeicher von APT. Dies "
+"wird implizit durch alle Befehle erledigt, die diesen Zwischenspeicher "
+"benötigen, falls er fehlt oder veraltet ist."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"<literal>showpkg</literal> zeigt Informationen über die auf der Befehlszeile "
+"aufgelisteten Pakete. Die übrigen Argumente sind Paketnamen. Die verfügbaren "
+"Versionen und Rückwärtsabhängigkeiten jedes aufgeführten Paketes werden "
+"ebenso aufgelistet, wie die Vorwärtsabhängigkeiten jeder Version. "
+"Vorwärtsabhängigkeiten (normale Abhängigkeiten) sind jene Pakete, von denen "
+"das betreffende Paket abhängt. Rückwärtsabhängigkeiten sind jene Pakete, die "
+"von dem betreffenden Paket abhängen. Deshalb müssen Vorwärtsabhängigkeiten "
+"für das Paket erfüllt werden, Rückwärtsabhängigkeiten allerdings nicht. "
+"<command>apt-cache showpkg libreadline2</command> würde zum Beispiel eine "
+"Ausgabe ähnlich der folgenden erzeugen:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"Dadurch wird sichtbar, dass libreadline2, Version 2.1-12, von libc5 und "
+"ncurses3.0 abhängt, die installiert sein müssen, damit libreadline2 "
+"funktioniert. libreadlineg2 und libreadline2-altdev hängen wiederum von "
+"libreadline2 ab. Wenn libreadline2 installiert ist, müssen außerdem libc5 "
+"und ncurses3.0 (und ldso) installiert sein, libreadlineg2 und libreadline2-"
+"altdev nicht. Für die spezielle Bedeutung der restlichen Ausgabe ist es am "
+"besten, den APT-Quelltext zu konsultieren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"<literal>stats</literal> zeigt einige Statistiken über den Zwischenspeicher. "
+"Es werden keine weiteren Argumente erwartet. Berichtete Statistiken sind:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>Gesamtzahl der Paketnamen</literal> ist die Gesamtzahl der im "
+"Zwischenspeicher gefundenen Pakete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>Gewöhnliche Pakete</literal> ist die Anzahl der regulären, "
+"gewöhnlichen Paketnamen. Diese sind Pakete, die eine Eins-zu-Eins-"
+"Entsprechung zwischen ihren Namen und den Namen, die andere Pakete für ihre "
+"Abhängigkeiten benutzen, tragen. Die Mehrzahl der Pakete fällt in diese "
+"Kategorie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>Rein virtuelle Pakete</literal> ist die Anzahl der Pakete, die nur "
+"als ein virtueller Paketname existieren. Das kommt vor, wenn Pakete nur den "
+"virtuellen Paketnamen »bereitstellen« und aktuell kein Paket den Namen "
+"benutzt. Zum Beispiel ist im Debian-GNU/Linux-System »mail-transport-agent« "
+"ein rein virtuelles Paket. Mehrere Pakete stellen »mail-transport-agent« "
+"bereit, aber es gibt kein Paket mit dem Namen »mail-transport-agent«."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>Eeinzelne virtuelle Pakete</literal> ist die Anzahl der Pakete mit "
+"nur einem Paket, das ein bestimmtes virtuelles Paket bereitstellt. »X11-text-"
+"viewer« ist zum Beispiel im Debian-GNU/Linux-System ein virtuelles Paket, "
+"aber nur ein Paket, xless, stellt »X11-text-viewer« bereit."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>Gemischte virtuelle Pakete</literal> ist die Anzahl der Pakete, die "
+"entweder ein bestimmtes virtuelles Paket bereitstellen oder den virtuellen "
+"Paketnamen als Paketnamen haben. »debconf« ist zum Beispiel sowohl ein "
+"tatsächliches Paket, wird aber auch vom Paket debconf-tiny bereitgestellt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>Fehlend</literal> ist die Anzahl der Paketnamen, auf die eine "
+"Abhängigkeit verweist, die aber von keinem Paket bereitgestellt wird. "
+"Fehlende Pakete könnten auftauchen, wenn nicht auf eine vollständige "
+"Distribution zugegriffen oder ein (echtes oder virtuelles) Paket aus einer "
+"Distribution entfernt wurde. Normalerweise wird auf sie von Conflicts oder "
+"Breaks-Angaben Bezug genommen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>Gesamtzahl an unterschiedlichen</literal> Versionen ist die Anzahl "
+"der im Zwischenspeicher gefundenen Paketversionen. Wenn auf mehr als eine "
+"Distribution zugegriffen wird (zum Beispiel Stable und Unstable), kann "
+"dieser Wert deutlich größer als die gesamte Anzahl der Paketnamen sein."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>Gesamtzahl an Abhängigkeiten</literal> ist die Anzahl der "
+"Abhängigkeitsbeziehungen, den alle Pakete im Zwischenspeicher beanspruchen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> zeigt alle Quellpaketdatensätze, die den "
+"angegebenen Paketnamen entsprechen. Alle Versionen werden ebenso angezeigt, "
+"wie alle Datensätze, die den Namen für ein Binärpaket angeben. Verwenden Sie "
+"die Option <option>--only-source</option>, um nur Quellpaketnamen anzuzeigen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"<literal>dump</literal> zeigt eine kurze Programmauflistung von jedem Paket "
+"im Zwischenspeicher. Es dient in erster Linie der Fehlersuche."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"<literal>dumpavail</literal> gibt eine Liste der verfügbaren Pakete auf der "
+"Standardausgabe aus. Dies ist für die Benutzung mit &dpkg; geeignet und wird "
+"von der &dselect;-Methode benutzt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"<literal>unmet</literal> zeigt die Zusammenfassung aller unerfüllten "
+"Abhängigkeiten im Paketzwischenspeicher."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"<literal>show</literal> führt eine Funktion aus, die <command>dpkg --print-"
+"avail</command> ähnlich ist. Es zeigt die Paketdatensätze für die genannten "
+"Pakete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"<literal>search</literal> führt eine Volltextsuche in der Liste aller "
+"verfügbaren Pakete für das angegebene reguläre Muster gemäß POSIX durch, "
+"siehe &regex;. Es durchsucht die Paketnamen und die Beschreibungen nach "
+"einem Vorkommen des regulären Ausdrucks und gibt den Paketnamen mit einer "
+"kurzen Beschreibung, einschließlich virtueller Paketnamen, aus. Wenn "
+"<option>--full</option> angegeben wurde, ist die Ausgabe gleich der, die "
+"<literal>show</literal> für jedes passende Paket erzeugt. Wenn <option>--"
+"names-only</option> angegeben wurde, wird die lange Beschreibung nicht "
+"durchsucht, sondern nur der Paketname und die bereitgestellten Pakete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+"Separate Argumente können benutzt werden, um mehrere Suchmuster anzugeben, "
+"die »und«-verknüpft werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"<literal>depends</literal> zeigt eine Liste von jeder Abhängigkeit, die ein "
+"Paket hat und alle möglichen anderen Pakete, die die Abhängigkeit erfüllen "
+"können."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"<literal>rdepends</literal> zeigt eine Liste von jeder "
+"Rückwärtsabhängigkeit, die ein Paket hat."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"Dieser Befehl gibt den Namen jedes Paketes aus, das APT kennt. Das optionale "
+"Argument ist ein passendes Präfix, um die Namensliste zu filtern. Die "
+"Ausgabe ist für die Benutzung in der Tabulatorvervollständigung in der Shell "
+"geeignet. Die Ausgabe wird extrem schnell generiert. Dieser Befehl wird am "
+"besten mit der <option>--generate</option>-Option benutzt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"Beachten Sie, dass ein Paket, das APT kennt, nicht notwendigerweise zum "
+"Herunterladen verfügbar, installierbar oder installiert ist, virtuelle "
+"Pakete sind z.B. auch in der generierten Liste aufgeführt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"<literal>dotty</literal> nimmt eine Paketliste auf der Befehlszeile entgegen "
+"und generiert eine Ausgabe, die für die Benutzung durch dotty aus dem Paket "
+"<ulink url=\"http://www.research.att.com/sw/tools/graphviz/\">GraphViz</"
+"ulink> geeignet ist. Das Ergebnis ist eine Zusammenstellung von Knoten und "
+"Kanten, die die Beziehung zwischen Paketen darstellen. Standardmäßig werden "
+"alle abhängigen Pakete ausfindig gemacht. Dies kann zu einem sehr großen "
+"Schaubild führen. Um die Ausgabe auf die Pakete zu beschränken, die auf der "
+"Befehlszeile eingegeben wurden, setzen Sie die Option <literal>APT::Cache::"
+"GivenOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"Die resultierenden Knoten haben mehrere Formen: Normale Pakete sind "
+"Kästchen, rein virtuelle Pakete sind Dreiecke, gemischt virtuelle Pakete "
+"sind Rauten, fehlende Pakete sind Sechsecke. Orange Kästchen bedeuten, dass "
+"die Rekursion beendet wurde (Pakete auf Blättern), blaue Linien sind "
+"Vorabhängigkeiten, grüne Linien sind Konflikte."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr ""
+"Vorsicht, dotty kann keine größeren Zusammenstellungen von Paketen grafisch "
+"darstellen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"Das gleiche wie <literal>dotty</literal>, nur für xvcg vom <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG-Werkzeug</"
+"ulink>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> ist dazu gedacht, bei Fragen der Fehlersuche, die "
+"sich auf die Einstellungsdatei beziehen, zu helfen. Ohne Argumente gibt es "
+"die Prioritäten von jeder Quelle aus. Ansonsten gibt es umfangreiche "
+"Informationen über die Prioritätenauswahl der genannten Pakete aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"<literal>apt-cache</literal>s <literal>madison</literal>-Befehl versucht, "
+"das Ausgabeformat und eine Untermenge der Funktionalität des Debian-"
+"Archivververwaltungswerkzeuges <literal>madison</literal> nachzuahmen. Es "
+"zeigt verfügbare Versionen eines Pakets in Tabellenform. Anders als das "
+"eigentliche <literal>madison</literal> kann es nur Informationen für die "
+"Architektur anzeigen, für die APT Paketlisten heruntergeladen hat "
+"(<literal>APT::Architecture</literal>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"wählt die Datei zum Speichern des Paketzwischenspeichers. Der "
+"Paketzwischenspeicher ist der primäre Zwischenspeicher, der von allen "
+"Aktionen benutzt wird. Konfigurationselement: <literal>Dir::Cache::pkgcache</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"wählt die Datei zum Speichern des Quellenzwischenspeichers. Die Quelle wird "
+"nur von <literal>gencaches</literal> benutzt und sie speichert eine "
+"ausgewertete Version der Paketinformationen von entfernt liegenden Quellen. "
+"Wenn der Paketzwischenspeicher gebildet wird, wird der "
+"Quellenzwischenspeicher benutzt, um ein erneutes Auswerten aller "
+"Paketdateien zu vermeiden. Konfigurationselement: <literal>Dir::Cache::"
+"srcpkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"still; erzeugt eine Ausgabe, die für Protokollierung geeignet ist und "
+"Fortschrittsanzeiger weglässt. Mehr »q«s unterdrücken mehr Ausgaben, bis zu "
+"einem Maximum von 2. Sie können außerdem <option>-q=#</option> benutzen, um "
+"die Stillestufe zu setzen, was die Konfigurationsdatei außer Kraft setzt. "
+"Konfigurationselement: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"nur wichtige Abhängigkeiten ausgeben. Zur Benutzung mit <literal>unmet</"
+"literal> und <literal>depends</literal>. Veranlasst, dass nur Depends- und "
+"Pre-Depends-Beziehungen ausgegeben werden. Konfigurationselement: "
+"<literal>APT::Cache::Important</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"Standardmäßig geben <command>depends</command> und <command>rdepends</"
+"command> alle Abhängigkeiten aus. Dies kann mit diesen Schaltern optimiert "
+"werden, die den angegebenen Abhängigkeitstyp weglassen. "
+"Konfigurationselement: <literal>APT::Cache::"
+"Show<replaceable>Abhängigkeitstyp</replaceable></literal> z.B. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+"Standardmäßig geben <command>depends</command> und <command>rdepends</"
+"command> nur Abhängigkeiten aus, die explizit in den Metadaten angegeben "
+"werden. Mit diesem Schalter werden auch Abhängigkeiten angezeigt, die "
+"implizit basierend auf den vorgefundenen Daten hinzugefügt werden. Ein "
+"<literal>Conflicts: foo</literal> sagt z.B. implizit, dass dieses Paket auch "
+"einen Konflikt mit dem Paket »foo« von jeder anderen Architektur hat. "
+"Konfigurationselement: <literal>APT::Cache::ShowImplicit</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"gibt die vollständigen Paketdatensätze beim Suchen aus. "
+"Konfigurationselement: <literal>APT::Cache::ShowFull</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"gibt die vollständigen Datensätze für alle verfügbaren Versionen aus. Dies "
+"ist die Vorgabe. Um sie auszuschalten, benutzen Sie <option>--no-all-"
+"versions</option>. Wenn <option>--no-all-versions</option> angegeben ist, "
+"wird nur die Anwärterversion angezeigt (die, die zur Installation ausgewählt "
+"würde). Diese Option ist nur für den <literal>show</literal>-Befehl "
+"anwendbar. Konfigurationselement: <literal>APT::Cache::AllVersions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"führt das Neuerstellen des Paketzwischenspeichers aus, anstatt den "
+"Zwischenspeicher so zu benutzen, wie er ist. Das ist die Vorgabe. Um sie "
+"auszuschalten, benutzen Sie <option>--no-generate</option>. "
+"Konfigurationselement: <literal>APT::Cache::Generate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"durchsucht nur das Paket und die bereitgestellten Paketnamen, nicht die "
+"Langbeschreibungen. Konfigurationselement: <literal>APT::Cache::NamesOnly</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"lässt <literal>pkgnames</literal> alle Namen, einschließlich virtueller "
+"Pakete und fehlender Abhängigkeiten, ausgeben. Konfigurationselement: "
+"<literal>APT::Cache::AllNames</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"macht <literal>depends</literal> und <literal>rdepends</literal> rekursiv, "
+"so dass alle erwähnten Pakete einmal ausgegeben werden. "
+"Konfigurationselement: <literal>APT::Cache::RecurseDepends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"begrenzt die Ausgabe von <literal>depends</literal> und <literal>rdepends</"
+"literal> auf Pakete, die aktuell installiert sind. Konfigurationselement: "
+"<literal>APT::Cache::Installed</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+"fügt die angegebene Datei als Quelle für Metadaten hinzu. Dies kann "
+"wiederholt werden, um mehrere Dateien hinzuzufügen. Unterstützt werden "
+"derzeit <literal>*.deb</literal>-, <literal>*.dsc</literal>-, <literal>*."
+"changes</literal>-, <literal>Sources</literal>- und <literal>Packages</"
+"literal>-Dateien sowie Quellpaketverzeichnisse. Dateien werden nur basierend "
+"auf ihren Dateinamen abgeglichen, nicht auf ihrem Inhalt!"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+"<literal>Sources</literal> und <literal>Packages</literal> können in jedes "
+"von APT unterstützte Format komprimiert werden, so lange sie die korrekte "
+"Erweiterung haben. Falls Sie mehrere dieser Dateien in einem Verzeichnis "
+"speichern müssen, können Sie einen Namen Ihrer Wahl, bei dem das letzte "
+"Zeichen ein Unterstrich (»<literal>_</literal>«) ist, voranstellen. "
+"Beispiel: mein.beispiel_Packages.xz"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"Beachten Sie, dass diese Quellen als vertrauenswürdig angesehen werden "
+"(siehe &apt-secure;). Konfigurationselement: <literal>APT::Sources::With</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> gibt bei normalen Aktionen 0 zurück, dezimal "
+"100 bei Fehlern."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "APT-Schlüsselverwaltungsdienstprogramm"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> wird benutzt, um eine Liste von Schlüsseln zu "
+"verwalten, die APT benutzt, um Pakete zu authentifizieren. Pakete, die durch "
+"Benutzung dieser Schlüssel authentifiziert wurden, werden als "
+"vertrauenswürdig betrachtet."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+"Falls die Benutzung von <command>apt-key</command> gewünscht wird, beachten "
+"Sie, dass die Installation der GNU-Privacy-Guard-Programmsammlung (paketiert "
+"in <package>gnupg</package>) erforderlich ist. Allein aus diesem Grund wird "
+"vom programmatischen Gebrauch (insbesondere in Betreuerskripten) "
+"eindringlich abgeraten. Darüberhinaus ist das Ausgabeformat aller Befehle "
+"undefiniert und kann und wird sich immer dann ändern, wenn sich die "
+"darunterliegenden Befehle ändern. <command>apt-key</command> wird versuchen, "
+"derartige Benutzung zu erkennen und in diesen Fällen Warnungen auf der "
+"Standardfehlerausgabe erzeugen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr "Unterstützte Schlüsselbunddateien"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+"Apt-key unterstützt als Voreinstellung für Schlüsselbunddateien nur das "
+"binäre OpenPGP-Format (auch als öffentlicher GPG-Schlüsselbund bekannt) in "
+"den Dateien mit der Erweiterung »<literal>gpg</literal>«, nicht das "
+"Schlüsselkastendatenbankformat, das in neueren &gpg;-Versionen eingeführt "
+"wurde. Daher sollten binäre Schlüsselbunddateien, die mit allen APT-"
+"Versionen benutzt werden sollen, immer mit <command>gpg --export</command> "
+"erstellt werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+"Falls auf allen Systeme, die den erzeugten Schlüsselbund verwenden sollen, "
+"mindestens eine APT-Version >= 1.4 installiert ist, können Sie alternativ "
+"das ASCII-geschützte Format mit der Erweiterung »<literal>asc</literal>« "
+"verwenden, das mit <command>gpg --armor --export</command> erstellt wird."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "Befehle"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"fügt einen neuen Schlüssel zur Liste der vertrauenswürdigen Schlüssel hinzu. "
+"Der Schlüssel wird aus &synopsis-param-filename; gelesen oder, wenn der "
+"Dateiname <literal>-</literal> ist, von der Standardeingabe."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+"Es ist kritisch, dass überprüft wird, ob diese manuell per <command>apt-key</"
+"command> hinzugefügten Schlüssel wirklich dem Eigentümer des Depots gehören, "
+"andernfalls wird die &apt-secure;-Infrastruktur komplett ausgehöhlt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+"<emphasis>Hinweis</emphasis>: Anstatt diesen Befehl zu benutzen, sollte ein "
+"Schlüsselbund mit einem aussagekräftigen Namen und entweder »<literal>gpg</"
+"literal>« oder »<literal>asc</literal>« als Dateinamenserweiterung direkt im "
+"Verzeichnis <filename>/etc/apt/trusted.gpg.d/</filename> abgelegt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr ""
+"entfernt einen Schlüssel aus der Liste der vertrauenswürdigen Schlüssel."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr "gibt den Schlüssel &synopsis-param-keyid; auf der Standardausgabe aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "gibt alle vertrauenswürdigen Schlüssel auf der Standardausgabe aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr "listet vertrauenswürdige Schlüssel mit Fingerabdrücken auf."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+"reicht erweiterte Optionen an GPG weiter. Mit <command>adv --recv-key</"
+"command> können Sie z.B. Schlüssel direkt vom Schlüsselserver in Ihre "
+"vertrauenswürdige Schlüsselsammlung herunterladen. Beachten Sie, dass dabei "
+"<emphasis>keine</emphasis> Prüfungen durchgeführt werden. Es ist daher "
+"einfach, die &apt-secure;-Infrastruktur komplett auszuhöhlen, falls dies "
+"ohne Sorgfalt benutzt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr "(missbilligt)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"aktualisiert den lokalen Schlüsselbund mit dem Archivschlüsselbund und "
+"entfernt die Archivschlüssel, die nicht länger gültig sind, aus dem lokalen "
+"Schlüsselbund. Der Archivschlüsselbund wird im Paket <literal>archive-"
+"keyring</literal> Ihrer Distribution mitgeliefert, z.B. dem Paket &keyring-"
+"package; in &keyring-distro;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+"Beachten Sie, dass eine Distribution diesen Befehl nicht benötigt und "
+"tatsächlich nicht länger nutzen sollte. Sie sollte stattdessen "
+"Schlüsselbunddateien im Verzeichnis <filename>/etc/apt/trusted.gpg.d/</"
+"filename> direkt mitliefern, da dies eine Abhängigkeit von <package>gnupg</"
+"package> vermeidet und die Verwaltung von Schlüsseln durch einfaches "
+"Hinzufügen und Entfernen von Dateien für Paketbetreuer und Benutzer "
+"gleichermaßen erleichtert."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"funktioniert ähnlich dem vorhergehenden Befehl <command>update</command>, "
+"bezieht aber den Archivschlüsselbund stattdessen von einem URI und bestätigt "
+"ihn anhand eines Master-Schlüssels. Dies erfordert ein installiertes &wget; "
+"und eine derart gebautes APT, bei dem ein Server konfiguriert ist, um den "
+"Master-Schlüsselbund zur Bestätigung abzuholen. APT unterstützt in Debian "
+"diesen Befehl nicht und beruht stattdessen auf <command>update</command>, in "
+"Ubuntu funktioniert dies aber."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "Optionen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"Beachten Sie, dass Optionen vor den im vorherigen Abschnitt beschriebenen "
+"Befehlen definiert sein müssen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"Mit dieser Option ist es möglich, eine spezielle Schlüsselbunddatei "
+"anzugeben, mit der der Befehl arbeitet. Vorgabe ist, dass ein Befehl mit der "
+"Datei <filename>trusted.gpg</filename> ausgeführt wird, ebenso wie alle "
+"Teile im Verzeichnis <filename>trusted.gpg.d</filename>, wobei "
+"<filename>trusted.gpg</filename> der primäre Schlüsselbund wird, d.h. neue "
+"Schlüssel werden zu diesem hinzugefügt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr "zeigt, setzt und hebt verschiedene Einstellungen für ein Paket auf."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+"<command>apt-mark</command> kann als einheitliche Oberfläche zum Setzen "
+"verschiedener Einstellungen eines Pakets benutzt werden, wie das Markieren "
+"eines Pakets als automatisch/manuell installiert oder um <command>dpkg</"
+"command>-Auswahlen wie »hold« (halten), »install« (installieren), "
+"»deinstall« (entfernen) oder »purge« (vollständig entfernen) zu ändern, die "
+"z.B. von <command>apt-get dselect-upgrade</command> oder <command>aptitude</"
+"command> berücksichtigt werden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr "Automatisch und manuell installierte Pakete"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"Wenn Sie erbitten, dass ein Paket installiert werden soll und im Ergebnis "
+"weitere Pakete installiert werden, um die Abhängigkeiten zu erfüllen, werden "
+"diese Abhängigkeiten als automatisch installiert markiert, während das "
+"Paket, das Sie explizit installiert haben, stattdessen als manuell "
+"installiert markiert wird. Sobald kein manuell installiertes Paket mehr von "
+"einem automatisch installierten Paket abhängt. wird es als nicht mehr "
+"benötigt angesehen und z.B. <command>apt-get</command> oder "
+"<command>aptitude</command> werden vorschlagen, es zu entfernen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> wird benutzt, um ein Paket als automatisch "
+"installiert zu markieren, was veranlasst, dass das Paket entfernt wird, wenn "
+"keine manuell installierten Pakete von ihm abhängen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> wird benutzt, um ein Paket als manuell installiert "
+"zu markieren, was verhindert, dass das Paket automatisch entfernt wird, wenn "
+"kein anderes Paket von ihm abhängt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>auto</literal> is used to mark a package as being automatically "
+#| "installed, which will cause the package to be removed when no more "
+#| "manually installed packages depend on this package."
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>auto</literal> wird benutzt, um ein Paket als automatisch "
+"installiert zu markieren, was veranlasst, dass das Paket entfernt wird, wenn "
+"keine manuell installierten Pakete von ihm abhängen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal> wird benutzt, um eine Liste automatisch "
+"installierter Pakete – mit einem Paket in jeder neuen Zeile – auszugeben. "
+"Wenn kein Paket angegeben ist, werden alle automatisch installierten Pakete "
+"aufgelistet. Falls Pakete angegeben sind, werden nur diejenigen angezeigt, "
+"die automatisch installiert wurden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> kann auf die gleiche Weise wie "
+"<literal>showauto</literal> benutzt werden, mit der Änderung, dass es "
+"stattdessen eine Liste manuell installierter Pakete ausgibt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"schreibt/liest Paketstatus von dem Dateinamen, der mit dem Parameter "
+"&synopsis-param-filename;, anstatt vom Standardort, der "
+"<filename>extended_status</filename> im von Konfigurationselement "
+"<literal>Dir::State</literal> definierten Verzeichnis, angegeben ist."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr "Änderungen für ein Paket verhindern"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>hold</literal> wird benutzt, um ein Paket als zurückgehalten zu "
+"markieren. Dadurch wird verhindert, dass das Paket automatisch installiert, "
+"entfernt oder ein Upgrade davon durchgeführt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> wird benutzt, um ein vorher gesetztes »hold« auf "
+"ein Paket aufzuheben, um alle Aktionen wieder zu erlauben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> wird benutzt, um eine Liste auf »hold« gesetzter "
+"Pakete auf die gleiche Art wie für andere Anzeigebefehle auszugeben."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr ""
+"Pakete zum Installieren, Entfernen und vollständigen Entfernen einplanen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+"Einige Oberflächen wie <command>apt-get dselect-upgrade</command> können "
+"benutzt werden, um vorher geplante Änderungen am Installationsstatus von "
+"Paketen anzuwenden. Solche Änderungen können mit dem Befehlen "
+"<option>install</option>, <option>remove</option> (auch als "
+"<option>deinstall</option> bekannt) und <option>purge</option> geplant "
+"werden. Pakete mit einer bestimmten Auswahl können mit <option>showinstall</"
+"option>, <option>showremove</option> beziehungsweise <option>showpurge</"
+"option> angezeigt werden. Weitere Informationen über diese sogenannten Dpkg-"
+"Auswahlen finden Sie in &dpkg;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> gibt bei normalen Aktionen Null zurück, bei "
+"Fehlern nicht Null."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "Archivauthentifizierungsunterstützung für APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"Beginnend mit Version 0.6 enthält <command>APT</command> Code, der die "
+"Signatur der Release-Datei für alle Depots prüft. Dies stellt sicher, dass "
+"Daten wie Pakete im Archiv nicht von Leuten geändert werden können, die "
+"keinen Zugriff auf den Signierschlüssel der Release-Datei haben. Beginnend "
+"mit Version 1.1 erfordert <command>APT</command> von Depots aktuelle "
+"Authentifizierungsinformationen für den ungestörten Gebrauch des Depots "
+"bereitzustellen. Seit Version 1.5 müssen Informationen, die in der Release-"
+"Datei über das Depot enthalten sind, bestätigt werden, bevor APT mit den "
+"Aktualisierungen aus diesem Depot fortfährt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"Hinweis: Alle APT-basierten Paketverwaltungsoberflächen wie &apt-get;, "
+"&aptitude; und &synaptic; unterstützen diese "
+"Authentifizierungsfunktionalität, daher verwendet diese Handbuchseite der "
+"Einfachheit halber exemplarisch für alle <literal>APT</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Unsigned Repositories"
+msgstr "Nicht signierte Depots"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+"Falls ein Archiv eine nicht signierte oder überhaupt keine Release-Datei "
+"hat, werden alle aktuellen APT-Versionen das Herunterladen von Daten von "
+"dort standardmäßig in <command>update</command>-Aktionen verweigern. Sogar "
+"wenn Oberflächen wie &apt-get; zum Herunterladen gezwungen werden, wird eine "
+"explizite Bestätigung benötigt, falls eine Installationsanfrage ein Paket "
+"aus einem derartigen nicht authentifizierten Archiv enthält."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+"Sie können erzwingen, dass alle APT-Clients nur Warnungen ausgeben, indem "
+"Sie die Konfigurationsoption <option>Acquire::AllowInsecureRepositories</"
+"option> auf <literal>true</literal> setzen. Über die &sources-list;-Option "
+"<literal>allow-insecure=yes</literal> kann auch erlaubt werden, dass "
+"individuelle Depots unsicher sind. Beachten Sie, dass von unsicheren Depots "
+"eindringlich abgeraten wird und alle Optionen, die APT zwingen, sie "
+"weiterhin zu unterstützen, irgendwann entfernt werden. Benutzern steht auch "
+"die Option <option>Trusted</option> zur Verfügung, um sogar Warnungen "
+"auszuschalten, seien Sie sich aber sicher, dass Sie die in &sources-list; "
+"erklärten Konsequenzen verstanden haben."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+"Ein Depot, das vorher authentifiziert war, diesen Status jedoch bei einer "
+"<command>update</command>-Aktion verlieren würde, gibt auf allen APT-"
+"Clients, ungeachtet der Option, die die Verwendung unsicherer Depots erlaubt "
+"oder verbietet, einen Fehler aus. Der Fehler kann durch zusätzliches Setzen "
+"von <option>Acquire::AllowDowngradeToInsecureRepositories</option> auf "
+"<literal>true</literal> oder für individuelle Depots mit der &sources-list;-"
+"Option <literal>allow-downgrade-to-insecure=yes</literal> übergangen werden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Signed Repositories"
+msgstr "Signierte Depots"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"Eine Kette des Vertrauens von einem APT-Archiv zum Endanwender wird durch "
+"verschiedene Schritte erreicht. <command>apt-secure</command> ist der letzte "
+"Schritt in dieser Kette. Einem Archiv zu vertrauen bedeutet nicht, dass Sie "
+"vertrauen, dass das Paket keinen schadhaften Code enthält, aber es bedeutet, "
+"dass Sie dem Archivbetreuer vertrauen. Der Archivbetreuer ist dafür "
+"verantwortlich, dass er die Korrektheit der Integrität des Archivs "
+"aufrechterhält."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"apt-secure überprüft keine Signaturen auf einer Stufe der Pakete. Falls Sie "
+"ein Werkzeug benötigen, das dies tut, sollten Sie einen Blick auf "
+"<command>debsig-verify</command> und <command>debsign</command> werfen "
+"(bereitgestellt von den Paketen debsig-verify beziehungsweise devscripts)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"Die Kette des Vertrauens in Debian beginnt (z.B.), wenn ein Betreuer ein "
+"neues Paket oder eine neue Version eines Pakets in das Debian-Archiv "
+"hochlädt. Damit es in Kraft tritt muss dieses Hochladen mit einem Schlüssel "
+"signiert werden, der sich in einem der Schlüsselbunde der Debian-Betreuer "
+"befindet (verfügbar im Paket »debian-keyring«). Betreuerschlüssel werden von "
+"anderen Betreuern gemäß vorbestimmter Regeln signiert, um die Identität des "
+"Schlüsselinhabers sicherzustellen. Ähnliche Abläufe existieren in allen "
+"Debian-basierten Distributionen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"Sobald das hochgeladene Paket überprüft und dem Archiv hinzugefügt wurde, "
+"wird die Betreuersignatur entfernt, Prüfsummen des Pakets werden berechnet "
+"und in die Datei Packages abgelegt. Die Prüfsummen aller Packages-Dateien "
+"werden berechnet und in der Release-Datei abgelegt. Dann wird die Release-"
+"Datei durch den Archivschlüssel für diese &keyring-distro;-Veröffentlichung "
+"signiert und zusammen mit den Paketen und Packages-Dateien auf &keyring-"
+"distro;-Spiegel verteilt. Die Schlüssel sind im &keyring-distro;-"
+"Archivschlüsselbund im Paket &keyring-package; verfügbar."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"Endanwender können die Signatur der Release-Datei prüfen, die Prüfsumme "
+"eines Paketes daraus entpacken und mit der Prüfsumme des Pakets vergleichen, "
+"das sie manuell heruntergeladen haben – oder sich darauf verlassen, dass APT "
+"dies automatisch tut."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"Beachten Sie, dass sich dies vom Prüfen gvonn Signaturen auf Paketbasis "
+"unterscheidet. Es wurde entworfen, um zwei mögliche Angriffe zu verhindern:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>»Man-in-the-middle«-Netzwerkangriffe</literal>. Ohne "
+"Signaturprüfung kann ein schädlicher Mittelsmann sich selbst in das "
+"Herunterladen von Paketen einbringen und Schadsoftware bereitstellen. Dies "
+"kann entweder durch Steuerung eines Netzwerkelements (Router, Switch, usw.) "
+"oder durch Umleiten des Netzverkehrs zu einem bösartigen Server (durch ARP- "
+"oder DNS-Manipulationsangriffe) erfolgen."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>Spiegelnetzwerk-Gefährdung</literal>. Ohne Signaturprüfung kann ein "
+"schädlicher Mittelsmann einen Spiegelserver kompromittieren und die Dateien "
+"darauf verändern, um schädliche Software an alle Benutzer zu verbreiten, die "
+"Pakete von diesem Rechner herunterladen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"Es schützt jedoch nicht gegen eine Kompromittierung des Hauptservers selbst "
+"(der die Pakete signiert) oder gegen eine Kompromittierung des Schlüssels, "
+"der zum Signieren der Release-Dateien benutzt wird. In jedem Fall kann "
+"dieser Mechanismus eine paketbasierte Signatur ergänzen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr "Informationsänderungen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+"Eine Release-Datei enthält neben der Prüfsumme für die Dateien in dem Depot "
+"auch allgemeine Informationen über das Depot wie die Herkunft, den Codenamen "
+"oder die Versionsnummer der Veröffentlichung."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+"Diese Informationen werden an verschiedenen Stellen angezeigt, daher sollte "
+"ein Depot-Besitzer immer die Richtigkeit sicherstellen können. Desweiteren "
+"kann weitere Benutzerkonfiguration wie &apt-preferences; kann von diesen "
+"Informationen abhängen und sie benutzen. Seit Version 1.5 muss der Benutzer "
+"daher Änderungen explizit bestätigen, um erkennen zu lassen, dass er "
+"ausreichend darauf vorbereitet ist, z.B. auf das neue Major Release der "
+"Distribution, das im Depot ausgeliefert wird (z.B. durch den Codenamen "
+"angegeben)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr "Benutzerkonfiguration"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"<command>apt-key</command> ist das Programm, das die Liste der von APT "
+"verwendeten Schlüssel verwaltet, aufgrund derer es Depots vertraut. Es kann "
+"benutzt werden, um Schlüssel hinzuzufügen oder zu entfernen, sowie um "
+"vertrauenswürdige Schlüssel aufzulisten. Welche(r) Schlüssel welches Archiv "
+"signieren kann/können, kann per <option>Signed-By</option> in &sources-list; "
+"eingeschränkt werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+"Beachten Sie, dass eine Standardinstallation bereits alle Schlüssel zum "
+"sicheren Beschaffen von Paketen aus den Standarddepots enthält, daher ist "
+"das Frickeln mit <command>apt-key</command> nur nötig, wenn "
+"Drittanbieterdepots hinzugefügt werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"Um einen neuen Schlüssel hinzuzufügen, müssen Sie ihn zuerst herunterladen "
+"(Sie sollten sicherstellen, dass Sie einen vertrauenswürdigen "
+"Kommunikationskanal benutzen, wenn Sie ihn herunterladen), ihn mit "
+"<command>apt-key</command> hinzufügen und dann <command>apt-get update</"
+"command> ausführen, so dass APT die Dateien <filename>InRelease</filename> "
+"oder <filename>Release.gpg</filename> der von Ihnen konfigurierten Archive "
+"herunterladen und prüfen kann."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Repository Configuration"
+msgstr "Depotkonfiguration"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+"Wenn Sie Archivsignaturen in einem von Ihnen betreuten Archiv zur Verfügung "
+"stellen möchten, müssen Sie:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"<emphasis>Eine Release-Datei der obersten Stufe erzeugen</emphasis>, wenn "
+"sie nicht bereits existiert. Sie können dies erledigen, indem Sie "
+"<command>apt-ftparchive release</command> (aus apt-utils) ausführen."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>Sie signieren</emphasis>. Sie können dies tun, indem Sie "
+"<command>gpg --clearsign -o InRelease Release</command> und <command>gpg -"
+"abs -o Release.gpg Release</command> ausführen."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>Den Schlüsselfingerabdruck veröffentlichen</emphasis>, damit Ihre "
+"Benutzer wissen, welchen Schlüssel sie importieren müssen, um die Dateien im "
+"Archiv zu authentifizieren. Am besten liefern Sie Ihren Schlüssel in einem "
+"eigenen Paket aus, wie dies &keyring-distro; mit &keyring-package; macht, um "
+"später automatisch Aktualisierungen und Schlüsselwechsel durchführen zu "
+"können."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+"<emphasis>Anweisungen geben, wie Ihr Archiv und Ihr Schlüssel hinzugefügt "
+"werden können</emphasis>. Falls Ihre Benutzer Ihren Schlüssel nicht auf "
+"sichere Weise beschaffen können, ist die oben beschriebene Kette des "
+"Vertrauens unterbrochen. Wie Sie Benutzern helfen können, Ihren Schlüssel "
+"hinzuzufügen, hängt von Ihrem Archiv und Ihrer Zielgruppe ab und reicht von "
+"der Bereitstellung des Schlüsselrings als Teil eines anderen Archivs, das "
+"bei Ihren Benutzern bereits konfiguriert ist (wie den Standarddepots ihrer "
+"Distribution), bis hin zum Nutzen des Vertrauensnetzes."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"Immer wenn sich die Inhalte des Archivs ändern (neue Pakete hinzugefügt oder "
+"entfernt werden), muss der Archivbetreuer den zwei ersten der oben "
+"skizzierten Schritten folgen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"Um weitere Hintergrundinformationen zu erhalten, können Sie das Kapitel "
+"<ulink url=\"https://www.debian.org/doc/manuals/securing-debian-howto/"
+"ch7\">Die Infrastruktur für Sicherheit in Debian</ulink> des Handbuchs "
+"»Anleitung zum Absichern von Debian« (auch im Paket harden-doc verfügbar) "
+"und das <ulink url=\"http://www.cryptnet.net/fdp/crypto/strong_distro.html\" "
+">Strong Distribution HOWTO</ulink> von V. Alex Brennen lesen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "Autoren der Handbuchseite"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"Diese Handbuchseite basiert auf der Arbeit von Javier Fernández-Sanguino "
+"Peña, Isaac Jones, Colin Walters, Florian Weimer und Michael Vogt."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "APT-CD-ROM-Verwaltungswerkzeug"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"<command>apt-cdrom</command> wird benutzt, um eine neue CD-ROM zu APTs Liste "
+"der verfügbaren Quellen hinzuzufügen. <command>apt-cdrom</command> kümmert "
+"sich darum, die Struktur des Mediums zu ermitteln, sowie mehrere mögliche "
+"Fehlbrennungen zu korrigieren und prüft die Indexdateien."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"Es ist notwendig, <command>apt-cdrom</command> zu benutzen, um CDs zum APT-"
+"System hinzuzufügen. Dies kann nicht manuell erfolgen. Weiterhin muss jedes "
+"Medium in einer Zusammenstellung aus mehreren CDs einzeln eingelegt und "
+"durchsucht werden, um mögliche Fehlbrennungen zu berücksichtigen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"<literal>add</literal> wird benutzt, um ein neues Medium zur Quellenliste "
+"hinzuzufügen. Es wird das CD-ROM-Gerät aushängen, verlangen, dass ein Medium "
+"eingelegt wird und dann mit den Einlesen und Kopieren der Indexdateien "
+"fortfahren. Wenn das Medium kein angemessenes <filename>.disk</filename>-"
+"Verzeichnis hat, werden Sie nach einem aussagekräftigen Titel gefragt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"APT benutzt eine CD-ROM-ID, um nachzuverfolgen, welches Medium gerade im "
+"Laufwerk ist und verwaltet eine Datenbank mit diesen IDs in "
+"<filename>&statedir;/cdroms.list</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"ein Fehlersuchwerkzeug, um die Identität des aktuellen Mediums sowie den "
+"gespeicherten Dateinamen zu berichten"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"versucht nicht, den CD-ROM-Pfad automatisch zu bestimmen. Dies wird "
+"üblicherweise mit der Option <option>--cdrom</option> kombiniert. "
+"Konfigurationselement: <literal>Acquire::cdrom::AutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"Einhängepunkt; gibt den Ort an, an dem die CD-ROM eingehängt wird. Dieser "
+"Einhängepunkt muss in <filename>/etc/fstab</filename> eingetragen und "
+"angemessen konfiguriert sein. Konfigurationselement: <literal>Acquire::"
+"cdrom::mount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"ein Medium umbenennen. Ändert den Namen eines Mediums oder überschreibt den "
+"Namen, der dem Medium gegeben wurde. Diese Option wird <command>apt-cdrom</"
+"command> veranlassen, nach einem neuen Namen zu fragen. "
+"Konfigurationselement: <literal>APT::CDROM::Rename</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"kein Einhängen; hindert <command>apt-cdrom</command> am Ein- und Aushängen "
+"des Einhängepunkts. Konfigurationselement: <literal>APT::CDROM::NoMount</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"schnelle Kopie; unterstellt, dass die Paketdateien gültig sind und prüft "
+"nicht jedes Paket. Diese Option sollte nur benutzt werden, wenn <command>apt-"
+"cdrom</command> vorher für dieses Medium ausgeführt wurde und keine Fehler "
+"festgestellt hat. Konfigurationselement: <literal>APT::CDROM::Fast</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"gründliche Paketdurchsuchung. Diese Option könnte für einige alte "
+"Debian-1.1/1.2-Medien nötig sein, die Paketdateien an seltsamen Orten haben. "
+"Dies verlängert das Durchsuchen des Mediums deutlich, sammelt aber alle ein."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"keine Änderungen. Die &sources-list;-Datei nicht ändern und keine "
+"Indexdateien schreiben. Alles wird jedoch immer noch geprüft. "
+"Konfigurationselement: <literal>APT::CDROM::NoAct</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> gibt bei normalen Aktionen 0 zurück, dezimal "
+"100 bei Fehlern."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "APT-Konfigurationsabfrageprogramm"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> ist ein internes Programm, das von vielen "
+"Teilen der APT-Programmsammlung benutzt wird, um einheitliche "
+"Konfigurierbarkeit bereitzustellen. Es greift auf die "
+"Hauptkonfigurationsdatei <filename>/etc/apt/apt.conf</filename> auf eine Art "
+"zu, die leicht für geskriptete Anwendungen zu benutzen ist."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"»shell« wird benutzt, um aus einem Shellskript auf "
+"Konfigurationsinformationen zuzugreifen. Es wird ein Paar von Argumenten "
+"angegeben – das erste ist eine Shell-Variable und das zweite ein "
+"Konfigurationswert, der abgefragt werden soll. Als Ausgabe führt es Shell-"
+"Zuweisungsbefehle für jeden vorhandenen Wert auf. In einen Shellskript "
+"sollte es wie folgt benutzt werden:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"Dies wird die Shell-Umgebungsvariable $OPT auf den Wert von MyApp::options "
+"mit einer Vorgabe von <option>-f</option> setzen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"An das Konfigurationselement kann /[fdbi] angehängt werden. »f« gibt "
+"Dateinamen zurück, »d« gibt Verzeichnisse zurück, »b« gibt »true« oder "
+"»false« zurück und »i« gibt eine Ganzzahl zurück. Jede Rückgabe ist normiert "
+"und intern geprüft."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "Nur der Inhalt des Konfigurationsbereichs wird angezeigt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"schließt Optionen ein, die einen leeren Wert haben. Dies ist die Vorgabe, "
+"benutzen Sie daher --no-empty, um sie aus der Ausgabe zu entfernen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"definiert die Ausgabe jeder Konfigurationsoption. &percnt;t wird durch den "
+"individuellen Namen ersetzt, &percnt;f durch ihren vollständigen "
+"hierarchichen Namen und &percnt;v durch ihren Wert. Verwenden Sie "
+"Großbuchstaben; Sonderzeichen in dem Wert werden kodiert, um "
+"sicherzustellen, dass sie z.B. in einer maskierten Zeichenkette, wie sie "
+"RFC822 definiert, sicher verwandt werden kann. &percnt;n wird zusätzlich "
+"durch einen Zeilenumbruch ersetzt, &percnt;N durch einen Tabulator. Ein "
+"&percnt; kann mittels &percnt;&percnt; ausgegeben werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> gibt bei normalen Aktionen 0 zurück, dezimal "
+"100 bei Fehlern."
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "ursprüngliche Dokumentation von Debug::*."
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "Konfigurationsdatei für APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"<filename>/etc/apt/apt.conf</filename> ist die Hauptkonfigurationsdatei, die "
+"alle Werkzeuge der APT-Programmsammlung gemeinsam nutzen, es ist jedoch "
+"beileibe nicht der einzige Ort, an dem Optionen gesetzt werden können. Die "
+"Programmsammlung benutzt außerdem einen gemeinsamen Befehlszeilenauswerter, "
+"um eine einheitliche Umgebung bereitzustellen."
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+"Wenn ein APT-Werkzeug startet, wird es die Konfigurationsdateien in der "
+"folgenden Reihenfolge lesen:"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+"die Datei, die durch die Umgebungsvariable <envar>APT_CONFIG</envar> "
+"angegeben wird (falls gesetzt)"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"alle Dateien in <literal>Dir::Etc::Parts</literal> in aufsteigender "
+"alphanumerischer Reihenfolge, die entweder keine oder »<literal>conf</"
+"literal>« als Dateinamenserweiterung haben und die nur alphanumerische "
+"Zeichen, Bindestriche (-), Unterstriche (_) und Punkte (.) enthalten. "
+"Andernfalls wird APT einen Hinweis ausgeben, dass es eine Datei ignoriert "
+"hat, falls die Datei nicht auf ein Muster in der Konfigurationsliste "
+"<literal>Dir::Ignore-Files-Silently</literal> passt – in diesem Fall wird "
+"sie stillschweigend ignoriert."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+"die Hauptkonfigurationsdatei, die durch <literal>Dir::Etc::main</literal> "
+"angegeben wird"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+"Alle in der programmspezifischen Konfigurationsunterbaumstruktur gesetzten "
+"Optionen werden in die Wurzel der Baumstruktur verschoben."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"Die Befehlszeilenoptionen werden angewendet, um die Konfigurationsdirektiven "
+"außer Kraft zu setzen oder um sogar weitere Konfigurationsdateien zu laden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "Syntax"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"Die Konfigurationsdatei ist in einem Baum mit Optionen organisiert, die in "
+"funktionellen Gruppen organisiert sind. Optionsspezifikation wird mit einer "
+"doppelten Doppelpunktschreibweise angegeben, zum Beispiel ist <literal>APT::"
+"Get::Assume-Yes</literal> eine Option innerhalb der APT-Werkzeuggruppe für "
+"das Werkzeug Get. Optionen werden nicht von ihren Elterngruppe geerbt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+"Syntaktisch ist die Konfigurationssprache dem nachempfunden, was die ISC-"
+"Werkzeuge, wie bind und dhcp, benutzen. Zeilen, die mit <literal>//</"
+"literal> beginnen, werden als Kommentar betrachtet (und ignoriert), ebenso "
+"wie jeglicher Text zwischen <literal>/*</literal> und <literal>*/</literal>, "
+"wie bei C/C++-Kommentaren. Jede Zeile hat die Form <literal>APT::Get::Assume-"
+"Yes \"true\";</literal>. Die Anführungszeichen und abschließenden "
+"Strichpunkte werden benötigt. Der Wert muss in einer Zeile stehen und es "
+"gibt keine Möglichkeit, Zeichenketten aneinander zu hängen. Werte dürfen "
+"keine Rückwärtsschrägstriche oder zusätzliche Anführungszeichen enthalten. "
+"Optionsnamen werden aus alphanumerischen Zeichen und den Zeichen »/-:._+« "
+"gebildet. Ein neuer Geltungsbereich kann mit geschweiften Klammern geöffnet "
+"werden, wie:"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+"mit eingefügten Zeilenumbrüchen, um es leserlicher zu gestalten. Listen "
+"können erstellt werden, indem ein Geltungsbereich geöffnet wird und eine "
+"einzelne, von Anführungszeichen, denen ein Semikolon folgt, eingeschlossene "
+"Zeichenkette eingefügt wird. Es können mehrere Einträge eingefügt werden, "
+"jeweils getrennt durch ein Semikolon."
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+"Im Allgemeinen bietet die Beispielkonfigurationsdatei &configureindex; eine "
+"gute Anleitung, wie dies aussehen könnte."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+"Die Groß- und Kleinschreibung ist in Namen der Konfigurationselemente nicht "
+"von Bedeutung, deshalb könnten Sie im vorherigen Beispiel auch "
+"<literal>dpkg::pre-install-pkgs</literal> benutzen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+"Namen für die Konfigurationselemente sind optional, wenn eine Liste, wie sie "
+"im Beispiel <literal>DPkg::Pre-Install-Pkgs</literal> oberhalb gesehen "
+"werden kann, definiert ist. Wenn Sie keinen neuen Namen angeben, wird ein "
+"neuer Eintrag der Liste lediglich eine neue Option hinzufügen. Wenn Sie "
+"einen Namen eingeben, können Sie die Option, wie jede andere Option, außer "
+"Kraft setzen, indem Sie der Option erneut einen neuen Wert zuweisen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+"Es sind zwei Spezialbefehle definiert: <literal>#include</literal> (was "
+"missbilligt ist und von alternativen Implementierungen nicht unterstützt "
+"wird) und <literal>#clear</literal>: <literal>#include</literal> wird die "
+"angegebene Datei einfügen, außer, wenn der Dateiname mit einem Schrägstrich "
+"endet, in diesem Fall wird das ganze Verzeichnis eingefügt. <literal>#clear</"
+"literal> wird benutzt, um einen Teil des Konfigurationsbaums zu löschen. Das "
+"angegebene Element und alle davon darunterliegenden Elemente werden "
+"gelöscht. (Beachten Sie, dass diese Zeilen auch mit einem Semikolon enden "
+"müssen.)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+"Der <literal>#clear</literal>-Befehl ist die einzig Art, eine Liste oder "
+"einen kompletten Geltungsbereich zu löschen. Erneutes Öffnen eines "
+"Geltungsbereichs (oder die unten beschriebene Syntax mit angehängten "
+"<literal>::</literal>) wird vorherige geschriebene Einträge <emphasis>nicht</"
+"emphasis> außer Kraft setzen. Optionen können nur außer Kraft gesetzt "
+"werden, indem ein neuer Wert an sie adressiert wird – Listen und "
+"Geltungsbereiche können nicht außer Kraft gesetzt, sondern nur bereinigt "
+"werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+"Alle APT-Werkzeuge akzeptieren eine Option -o, die es erlaubt, eine "
+"beliebige Konfigurationsdirektive auf der Befehlszeile anzugeben. Die Syntax "
+"ist ein vollständiger Optionsname (<literal>APT::Get::Assume-Yes</literal> "
+"zum Beispiel), gefolgt von einem Gleichheitszeichen und dann dem neuen Wert "
+"der Option. Um ein neues Element an eine Liste anzuhängen, hängen Sie ein "
+"<literal>::</literal> an den Namen der Liste an. (Wie Sie vielleicht erraten "
+"haben: Die Geltungsbereichssyntax kann nicht auf der Befehlszeile benutzt "
+"werden.)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+"Beachten Sie, dass das Anhängen von Elementen an eine Liste mittels "
+"<literal>::</literal> nur für ein Element pro Zeile funktioniert, Sie "
+"sollten es nicht nicht in Verbindung mit einer Geltungsbereichssyntax "
+"benutzen (die »<literal>::</literal>« implizit hinzufügt). Die Benutzung der "
+"Syntax von beiden zusammen wird einen Fehler auslösen, auf den sich einige "
+"Benutzer ungünstigerweise verlassen: eine Option mit dem unüblichen Namen "
+"»<literal>::</literal>«, die sich wie jede andere Option mit einem Namen "
+"verhält. Dies leitet viele Probleme ein; zum einen werden Benutzer, die "
+"mehrere Zeilen in dieser <emphasis>falschen</emphasis> Syntax in der "
+"Hoffnung, etwas an die Liste anzuhängen, schreiben, das Gegenteil erreichen, "
+"da nur die letzte Zuweisung zu dieser Option »<literal>::</literal>« benutzt "
+"wird. Zukünftige APT-Versionen werden Fehler ausgeben und die Arbeit "
+"stoppen, wenn sie auf diese falsche Verwendung stoßen. Korrigieren Sie "
+"deshalb nun solche Anweisungen, solange sich APT nicht explizit darüber "
+"beklagt."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr "Die APT-Gruppe"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+"Diese Gruppe von Optionen steuert das allgemeine Verhalten von APT, ebenso "
+"wie es die Optionen für alle Werkzeuge enthält."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+"Systemarchitektur; setzt die Architektur, die benutzt wird, wenn Dateien "
+"heruntergeladen und Paketlisten ausgewertet werden. Die interne Vorgabe ist "
+"die Architektur für die APT kompiliert wurde."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+"alle Architekturen, die das System unterstützt. Zum Beispiel sind CPUs, die "
+"den <literal>amd64</literal>-Befehlssatz implementieren (auch "
+"<literal>x86-64</literal> genannt), ebenso in der Lage, Programme "
+"auszuführen, die für den <literal>i386</literal>-Befehlssatz (<literal>x86</"
+"literal>) kompiliert wurden. Diese Liste wird benutzt, wenn Dateien "
+"abgerufen und Paketlisten ausgewertet werden. Die anfängliche Vorgabe ist "
+"immer die native Architektur des Systems (<literal>APT::Architecture</"
+"literal>) und fremde Architekturen werden der vorgegebenen Liste "
+"hinzugefügt, wenn sie per <command>dpkg --print-architectures</command> "
+"registriert werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+"Dieser Gültigkeitsbereich definiert, welche Komprimierungsformate "
+"unterstützt werden, wie Komprimierung und Dekomprimierung durchgeführt "
+"werden können, falls die Unterstützung für dieses Format nicht direkt in APT "
+"eingebaut wurde und einen Kostenwert, der anzeigt, wie aufwändig es ist, "
+"etwas in dieses Format zu komprimieren. Als Beispiel würde es der folgende "
+"Konfigurationsabschnitt APT erlauben, Dateien herunterzuladen und zu "
+"dekomprimieren sowie mit der kostengünstigen <literal>.reversed</literal> "
+"Dateiendung zu erzeugen und zu speichern. Dadurch werden sie ohne "
+"zusätzliche Befehlszeilenparameter zum Komprimieren und Dekomprimieren an "
+"den Befehl <command>rev</command> übergeben:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+"Liste aller Bauprofile ohne das Namensraum-Präfix »<literal>profile.</"
+"literal>«, die für die Auflösung der Bauabhängigkeiten aktiviert sind. "
+"Standardmäßig ist diese Liste leer. <envar>DEB_BUILD_PROFILES</envar> setzt "
+"so, wie es durch &dpkg-buildpackage; benutzt wird, die Listenschreibweise "
+"außer Kraft."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+"Standard-Release von dem Pakete installiert werden, wenn mehr als eine "
+"Version verfügbar ist. Enthält Release-Name, Codename oder Release-Version. "
+"Beispiele: »stable«, »testing, »unstable«, »&debian-stable-codename;«, "
+"»&debian-testing-codename;«, »4.0«, »5.0*«. Siehe auch &apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+"Halten von Paketen ignorieren. Diese globale Option veranlasst den "
+"Problemlöser, gehaltene Pakete beim Treffen von Entscheidungen zu ignorieren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+"standardmäßig auf on (ein). Wenn es auf on gesetzt wird, wird die "
+"automatische Bereinigungsfunktion alle Pakete entfernen, die nicht länger "
+"aus dem Zwischenspeicher heruntergeladen werden können. Wenn es auf off "
+"gesetzt wird, dann werden außerden die Pakete, die lokal installiert sind, "
+"vom Bereinigen ausgeschlossen – beachten Sie jedoch, dass APT keine direkten "
+"Möglichkeiten bereitstellt, um sie erneut zu installieren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+"ist standardmäßig aktiviert, was APT veranlassen wird, essenzielle und "
+"wichtige Pakete so bald wie möglich in einer Installations-/"
+"Aktualisierungstransaktion zu installieren, um die Auswirkungen eines "
+"scheiternden &dpkg;-Aufrufs zu begrenzen. Falls diese Option deaktiviert "
+"ist, betrachtet APT ein wichtiges Paket auf die gleiche Weise wie ein "
+"zusätzliches Paket: Zwischen dem Entpacken des Pakets A und seiner "
+"Konfiguration können viele andere Entpack- oder Konfigurationsaufrufe für "
+"andere, nicht zugehörige Pakete B, C usw. liegen. Falls dies zum Scheitern "
+"des &dpkg;-Aufrufs führt (z.B. weil Betreuerskripte des Pakets B einen "
+"Fehler erzeugen), führt dies zu einem Systemstatus, in dem Paket A entpackt, "
+"aber nicht konfiguriert ist, daher ist nicht länger gewährleistet, dass "
+"irgendein Paket, das von A abhängt, weiter funktioniert, da seine "
+"Abhängigkeit von A nicht länger erfüllt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+"Außerdem wird die unmittelbare Konfigurationsmarkierung im potenziell "
+"problematischen Fall zirkulärer Abhängigkeiten angewendet, da eine "
+"Abhängigkeit mit der Unmittelbarmarkierung einer Vorabhängigkeit entspricht. "
+"Theoretisch ermöglicht dies APT, eine Situation zu erkennen, in der es keine "
+"unmittelbare Konfiguration durchführen kann, abzubrechen und dem Benutzer "
+"vorzuschlagen, dass er die Option zeitweise deaktivieren soll, um ein "
+"Fortsetzen der Transaktion zu ermöglichen. Beachten Sie hier das Wort "
+"»theoretisch«; im wahren Leben ist dieses Problem selten in instabilen "
+"Distributionsversionen aufgetreten und es wurde durch falsche Abhängigkeiten "
+"des fraglichen Pakets verursacht oder durch ein System in einem bereits "
+"beschädigten Zustand; daher sollten Sie diese Option nicht blind "
+"deaktivieren, da das zuvor erwähnte Szenario nicht das einzige Problem ist, "
+"das es überhaupt erst verhindern kann."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+"Bevor eine umfangreiche Transaktion wie <literal>dist-upgrade</literal> mit "
+"dieser ausgeschalteten Option ausgeführt wird, sollten Sie versuchen, "
+"explizit <literal>install</literal> für das Paket auszuführen, das APT nicht "
+"unmittelbar konfigurieren kann. Stellen Sie aber bitte sicher, dass Sie Ihr "
+"Problem außerdem an Ihre Distribution und an das APT-Team mit dem Verweis "
+"zur Fehlermeldung unten melden, so dass sie an der Verbesserung und "
+"Korrektur des Upgrade-Prozesses arbeiten können."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+"Schalten Sie diese Option niemals ein, außer wenn Sie <emphasis>wirklich</"
+"emphasis> wissen, was Sie tun. Es erlaubt APT, temporär ein essenzielles "
+"Paket zu entfernen, um eine Conflicts/Conflicts- oder Conflicts/Pre-Depends-"
+"Schleife zwischen zwei essenziellen Paketen zu durchbrechen. <emphasis>Solch "
+"eine Schleife sollte niemals existieren und ist ein schwerwiegender Fehler</"
+"emphasis>. Diese Option wird funktionieren, wenn die essenziellen Pakete "
+"nicht <command>tar</command>, <command>gzip</command>, <command>libc</"
+"command>, <command>dpkg</command>, <command>dash</command> oder etwas, was "
+"davon abhängt, sind."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+"APT benutzt seit Version 0.7.26 eine größenveränderbare, speicherbasierte "
+"Zwischenspeicherdatei, um verfügbare Informationen zu speichern. "
+"<literal>Cache-Start</literal> dient als Hinweis, auf welche Größe der "
+"Zwischenspeicher wachsen wird und enthält daher den Betrag, welchen Speicher "
+"APT beim Start abruft. Die Vorgabe ist 20971520 Byte (~20 MB). Beachten Sie, "
+"dass diese Speichermenge für APT verfügbar sein muss, da es sonst unschön "
+"scheitert. Für Geräte mit eingeschränktem Speicher sollten diese Werte "
+"vermindert werden, während sie für Systeme mit vielen konfigurierten Quellen "
+"erhöht werden sollte. <literal>Cache-Grow</literal> definiert in Byte mit "
+"einer Vorgabe von 1048576 (~1 MB) um wieviel die Größe des Zwischenspeichers "
+"vergößert werden soll, falls der durch <literal>Cache-Start</literal> "
+"vorreservierte nicht ausreicht. Dieser Wert wird wieder und wieder verwandt "
+"bis entweder der Zwischenspeicher groß genug ist, um alle Informationen zu "
+"speichern oder die Zwischenspeichergröße das <literal>Cache-Limit</literal> "
+"erreicht. Vorgabe für <literal>Cache-Limit</literal> ist 0, was bedeutet, "
+"dass es kein Limit gibt. Falls <literal>Cache-Grow</literal> auf 0 gesetzt "
+"ist, kann der Zwischenspeicher nicht automatisch wachsen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+"definiert, welche Pakete als essenzielle Bauabhängigkeiten betrachtet werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+"Der Get-Unterabschnitt steuert das &apt-get;-Werkzeug. Lesen Sie bitte "
+"dessen Dokumentation, um weitere Informationen über die dortigen Optionen zu "
+"erhalten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"Der Cache-Unterabschnitt steuert das &apt-cache;-Werkzeug. Lesen Sie bitte "
+"dessen Dokumentation, um weitere Informationen über die dortigen Optionen zu "
+"erhalten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"Der CDROM-Unterabschnitt steuert das &apt-cdrom;-Werkzeug. Lesen Sie bitte "
+"dessen Dokumentation, um weitere Informationen über die dortigen Optionen zu "
+"erhalten."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr "Die Beschaffungsgruppe"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+"Die <literal>Acquire</literal>-Gruppe der Optionen steuert das Herunterladen "
+"von Paketen ebenso wie die verschiedenen »Beschaffungsmethoden«, die für das "
+"Herunterladen selbst zuständig sind (siehe auch &sources-list;)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+"Sicherheitsbezogene Optionen sind auf »true« voreingestellt, wodurch "
+"zeitbezogene Prüfungen aktiviert sind. Deaktivieren bedeutet, dass der Zeit "
+"auf der Maschine nicht vertraut wird. Dann wird APT alle zeitbezogenen "
+"Prüfungen wie <option>Check-Valid-Until</option> und die Prüfung, ob das "
+"Datumsfeld einer Release-Datei in der Zukunft liegt, deaktivieren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+"maximale Zeit (in Sekunden) vor ihrer Erzeugung (die in der Kopfzeile "
+"<literal>Date</literal> angegeben ist), die die Datei <filename>Release</"
+"filename> als gültig angesehen wird. Der voreingestellte Wert ist "
+"<literal>10</literal>. Archivspezifische Einstellungen können durch Anhängen "
+"der Archivbezeichnung an den Optionsnamen vorgenommen werden. Vorzugsweise "
+"kann dasselbe für bestimmte &sources-list;-Einträge erreicht werden, indem "
+"dort die Option <option>Date-Max-Future</option> benutzt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+"Die sicherheitsbezogene Option wird als »true« vorgegeben. Damit werden "
+"Wiederholungsangriffe über einen längeren Zeitraum hinweg verhindert, indem "
+"der Überprüfung der Datei Release ein Ablaufdatum gegeben wird. "
+"Beispielsweise wird Benutzern damit auch geholfen, länger nicht "
+"aktualisierte Spiegel zu erkennen – diese Funktion hängt jedoch von der "
+"Richtigkeit der Zeiteinstellung auf dem Benutzersystem ab. Archivbetreuer "
+"sind aufgefordert, Release-Dateien mit der Kopfzeile <literal>Valid-Until</"
+"literal> zu erstellen. Falls sie das nicht tun oder ein strengerer Wert "
+"gewünscht wird, kann die Option <literal>Max-ValidTime</literal> benutzt "
+"werden (siehe unten). Der Option <option>Check-Valid-Until</option> von "
+"&sources-list;-Einträgen zum wahlweisen Deaktivieren der Prüfung sollte der "
+"Vorzug gegeben werden, anstatt dies global mit dieser Einstellung außer "
+"Kraft zu setzen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+"maximale Zeit (in Sekunden) nach ihrer Erzeugung (die in der Kopfzeile "
+"<literal>Date</literal> angegeben ist), die die Datei <filename>Release</"
+"filename> als gültig angesehen wird. Falls die Release-Datei selbst eine "
+"<literal>Valid-Until</literal>-Kopfzeile enthält, wird das frühere der "
+"beiden Daten als Ablaufdatum verwandt. Vorgabe ist <literal>0</literal>, was "
+"für »für immer gültig« steht. Archivspezifische Einstellungen können durch "
+"Anhängen der Archivbezeichnung an den Optionsnamen vorgenommen werden. "
+"Vorzugsweise kann dasselbe für bestimmte &sources-list;-Einträge erreicht "
+"werden, indem dort die Option <option>Valid-Until-Max</option> benutzt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+"minimale Zeit (in Sekunden), nach der Erzeugung (die in der Kopfzeile "
+"<literal>Date</literal> angegeben ist), die die Datei <filename>Release</"
+"filename> als gültig angesehen wird. Benutzen Sie dies, falls Sie einen "
+"selten aktualisierten (lokalen) Spiegel eines häufiger aktualisierten "
+"Archivs mit einer <literal>Valid-Until</literal>-Kopfzeile haben, anstatt "
+"die Überprüfung des Ablaufdatums komplett zu deaktivieren. Archivspezifische "
+"Einstellungen können und sollten durch Anhängen der Archivbezeichnung an den "
+"Optionsnamen vorgenommen werden. Vorzugsweise kann dasselbe für bestimmte "
+"&sources-list;-Einträge erreicht werden, indem dort die Option <option>Valid-"
+"Until-Min</option> benutzt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+"ermöglicht die Verwendung interner TLS-Unterstützung in der HTTP-Methode. "
+"Falls auf »false« gesetzt, deaktiviert dies vollständig die Unterstützung "
+"für TLS in den eigenen Methoden von APT (außer bei den cURL-basierten HTTPS-"
+"Methoden). Es werden keine TLS-bezogenen Funktionen mehr aufgerufen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+"versucht Unterschiede, die <literal>PDiffs</literal> genannt werden, für "
+"Indexe (wie <filename>Packages</filename>-Dateien) statt der kompletten "
+"Dateien herunterzuladen. Vorgabe ist »true«. Vorzugsweise kann dies für "
+"bestimmte &sources-list;-Einträge oder Index-Dateien gesetzt werden, indem "
+"dort die Option <option>PDiffs</option> benutzt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+"Es sind außerdem zwei Unteroptionen verfügbar, um die Benutzung von PDiffs "
+"zu begrenzen: <literal>FileLimit</literal> kann verwandt werden, um die "
+"maximale Anzahl von PDiff-Dateien anzugeben, die zum Aktualisieren einer "
+"Datei heruntergeladen werden sollen. Andererseits gibt <literal>SizeLimit</"
+"literal> die maximale Prozentzahl der Größe aller Patches im Vergleich zur "
+"Zieldatei an. Wenn eine dieser Begrenzungen überschritten wird, wird die "
+"komplette Datei anstelle der Patche heruntergeladen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+"versucht Indexe über einen URI der aus der Hash-Summe der erwarteten Datei "
+"gebildet wurde, statt über einen gut bekannten stabilen Dateinamen "
+"herunterzuladen. Standardmäßig »true«, wird aber automatisch deaktiviert, "
+"falls die Quelle anzeigt, dass es nicht unterstützt wird. Der Gebrauch kann "
+"mit dem speziellen Wert »force« erzwungen werden. Vorzugsweise kann dies für "
+"bestimmte &sources-list;-Einträge oder Index-Dateien gesetzt werden, indem "
+"dort die Option <option>By-Hash</option> benutzt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+"Warteschlangenmodus; <literal>Queue-Mode</literal> kann entweder "
+"<literal>host</literal> oder <literal>access</literal> sein, wodurch "
+"festgelegt wird, wie APT ausgehende Verbindungen parallelisiert. "
+"<literal>host</literal> bedeutet, dass eine Verbindung pro Zielrechner "
+"geöffnet wird, <literal>access</literal> bedeutet, dass eine Verbindung pro "
+"URI-Art geöffnet wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+"Anzahl der auszuführenden erneuten Versuche. Wenn dies nicht Null ist, wird "
+"APT fehlgeschlagene Dateien die angegebene Anzahl erneut versuchen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+"benutzt symbolische Verweise für Quellarchive. Falls dies auf »true« gesetzt "
+"ist, werden Quellarchive, wenn möglich, symbolisch verknüpft, anstatt "
+"kopiert zu werden. Die Voreinstellung ist »true«."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+"Die Optionen in diesen Bereichen konfigurieren, wie APT Transporte über die "
+"Protokolle HTTP und HTTPS abwickelt. Sie sind in den Handbuchseiten &apt-"
+"transport-http; beziehungsweise &apt-transport-https; dokumentiert."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+"<literal>ftp::Proxy</literal> setzt den Standard-Proxy, der für FTP-URIs "
+"benutzt werden soll. Er wird in der Standardform <literal>ftp://[[Benutzer][:"
+"Passwort]@]Rechner[:Port]/</literal> angegeben. Proxys pro Rechner können "
+"außerdem in der Form <literal>ftp::Proxy::&lt;Rechner&gt;</literal> "
+"angegeben werden. Hierbei bedeutet das spezielle Schlüsselwort "
+"<literal>DIRECT</literal>, dass keine Proxys benutzt werden. Falls keine der "
+"obigen Einstellungen angegeben wurde, wird die Umgebungsvariable "
+"<envar>ftp_proxy</envar> benutzt. Um einen FTP-Proxy zu benutzen, müssen Sie "
+"in der Konfigurationsdatei das Skript <literal>ftp::ProxyLogin</literal> "
+"setzen. Dieser Eintrag gibt die Befehle an, die gesendet werden müssen, um "
+"dem Proxy-Server mitzuteilen, womit er sich verbinden soll. Ein Beispiel, "
+"wie das funktioniert, finden Sie unter &configureindex;. Die "
+"Platzhaltervariablen, die für den zugehörigen URI-Bestandteil stehen, sind "
+"<literal>$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> und <literal>$(SITE_PORT)</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+"Die Option <literal>timeout</literal> stellt den Zeitnehmer, der von der "
+"Methode benutzt wird. Dieser Wert wird auf die Verbindungs- sowie die "
+"Datenzeitüberschreitungen angewendet."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+"Mehrere Einstellungen werden zum Steuern des passiven Modus bereitgestellt. "
+"Generell ist es sicher, den passiven Modus eingeschaltet zu lassen, er "
+"funktioniert in nahezu jeder Umgebung. Jedoch erfordern einige Situationen, "
+"dass der passive Modus ausgeschaltet und stattdessen Port-Modus-FTP benutzt "
+"wird. Dies kann global eingestellt werden oder für Verbindungen, die durch "
+"einen Proxy oder zu einem bestimmten Rechner gehen (Beispiele finden Sie in "
+"der Musterkonfigurationsdatei)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+"Es ist möglich, FTP über HTTP zu leiten, indem die Umgebungsvariable "
+"<envar>ftp_proxy</envar> auf eine HTTP-URL gesetzt wird – lesen Sie die "
+"Besprechung der HTTP-Methode oberhalb bezüglich der Syntax. Sie können dies "
+"nicht in der Konfigurationsdatei setzen und es wird wegen der geringen "
+"Effizienz nicht empfohlen, FTP über HTTP zu benutzen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+"Die Einstellung <literal>ForceExtended</literal> steuert die Benutzung der "
+"RFC-2428-Befehle <literal>EPSV</literal> und <literal>EPRT</literal>. Die "
+"Vorgabe ist »false«, was bedeutet, dass diese Befehle nur benutzt werden, "
+"wenn die Steuerverbindung IPv6 ist. Durch Stellen auf »true« wird die "
+"Benutzung selbst auf IPv4-Verbindungen erzwungen. Beachten Sie, dass die "
+"wenigsten FTP-Server RFC 2428 unterstützen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr "/cdrom/::Mount \"foo\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+"Für URIs, die die Methode <literal>cdrom</literal> verwenden, ist die "
+"einzige Option der Einhängepunkt, <literal>cdrom::Mount</literal>, der der "
+"Einhängepunkt des CD-ROM-Laufwerks sein muss (oder der DVD oder was auch "
+"immer), wie er in <filename>/etc/fstab</filename> angegeben wurde. Es ist "
+"möglich, alternative Ein- und Aushängebefehle anzugeben, falls Ihr "
+"Einhängepunkt nicht in der fstab aufgeführt werden kann. Die Syntax besteht "
+"darin, <placeholder type=\"literallayout\" id=\"0\"/> in den <literal>cdrom</"
+"literal>-Block einzufügen. Der abschließende Schrägstrich ist wichtig. "
+"Aushängebefehle können per UMount angegeben werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+"Die einzige Konfigurationsoption für GPGV-URIs ist <literal>gpgv::Options</"
+"literal>, um zusätzliche Parameter an Gpgv weiterzuleiten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr "Acquire::CompressionTypes::<replaceable>Dateierweiterung</replaceable> \"<replaceable>Methodenname</replaceable>\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+"Liste der Kompressionstypen, die von den »Beschaffungsmethoden verstanden "
+"werden. Dateien wie <filename>Packages</filename> können in verschiedenen "
+"Kompressionsformaten verfügbar sein. Standardmäßig können die "
+"»Beschaffungsmethoden viele gebräuchliche Formate wie <command>xz</command>- "
+"und <command>gzip</command>-komprimierte Dateien dekomprimieren und erneut "
+"komprimieren. In diesem Bereich können die unterstützten Formate abgefragt, "
+"verändert sowie Unterstützung für weitere Formate hinzugefügt werden (siehe "
+"auch <option>APT::Compressor</option>). Die Syntax dafür lautet: "
+"<placeholder type=\"synopsis\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+"Außerdem kann die Untergruppe <literal>Order</literal> benutzt werden, um zu "
+"definieren, in welcher Reihenfolge das »Beschaffungssystem« die "
+"komprimierten Dateien herunterzuladen versucht. Das »Acquire«-System wird "
+"die erste ausprobieren und bei einem Fehler mit dem nächsten Kompressionstyp "
+"in dieser Liste fortfahren. Um daher einen Typ einem anderen vorzuziehen, "
+"fügen Sie einfach den bevorzugten Typ an erster Stelle in die Liste ein - "
+"Typen, die noch nicht hinzugefügt wurden, werden vorbehaltlos an das Ende "
+"der Liste angehängt, so kann z.B. <placeholder type=\"synopsis\" id=\"0\"/> "
+"benutzt werden, um <command>gzip</command>-komprimierten Dateien den Vorzug "
+"gegenüber allen anderen Formaten zu geben. Falls <command>xz</command> "
+"gegenüber <command>gzip</command> und <command>bzip2</command> den Vorzug "
+"erhalten soll, sollte die Konfigurationseinstellung so aussehen: "
+"<placeholder type=\"synopsis\" id=\"1\"/>. Es ist nicht nötig, <literal>bz2</"
+"literal> explizit zur Liste hinzuzufügen, da es automatisch hinzufügt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+"Beachten Sie, dass <literal>Dir::Bin::<replaceable>Methodenname</"
+"replaceable></literal> zur Laufzeit geprüft wird. Falls diese Option gesetzt "
+"ist und die Unterstützung für dieses Format nicht direkt in APT eingebaut "
+"wurde, wird die Methode nur benutzt, wenn die Datei existiert, z.B. ist die "
+"(integrierte) Einstellung für die <literal>bzip2</literal>-Methode: "
+"<placeholder type=\"literallayout\" id=\"0\"/>. Beachten Sie auch, dass auf "
+"der Befehlszeile eingegebene Einträge an das Ende der Liste angehängt "
+"werden, die in den Konfigurationsdateien angegeben wurde, aber vor den "
+"Standardeinträgen. Um einen Typ in diesem Fall gegenüber einem, der über die "
+"Konfigurationsdatei angegebenen wurde, zu bevorzugen, können Sie diese "
+"Option direkt setzen – nicht im Listenstil. Dies wird die definierte Liste "
+"nicht außer Kraft setzen, es wird diesen Typ nur vor die Liste setzen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+"Der besondere Typ <literal>uncompressed</literal> kann benutzt werden, um "
+"unkomprimierten Dateien einen Vorrang zu geben, beachten Sie jedoch, dass "
+"die meisten Archive keine unkomprimierten Dateien bereitstellen, so dass "
+"dies meist nur für lokale Spiegel benutzt werden kann."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+"Wenn <literal>gzip</literal>-komprimierte Indexe heruntergeladen werden "
+"(Packages, Sources oder Translations), speichere sie lokal mit gzip-"
+"Komprimierung. Dies spart eine Menge Festplattenplatz, aber benötigt mehr "
+"CPU-Ressourcen bei der Erstellung des lokalen Paketzwischenspeicher. Vorgabe "
+"ist »false«."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+"Der Unterabschnitt Languages steuert, welche <filename>Translation</"
+"filename>-Dateien heruntergeladen werden und in welcher Reihenfolge APT "
+"versucht, die Beschreibungsübersetzungen anzuzeigen. APT wird versuchen, die "
+"erste verfügbare Beschreibung für die zuerst aufgelistete Sprache "
+"anzuzeigen. Sprachen können durch ihre kurzen oder langen Sprachcodes "
+"definiert sein. Beachten Sie, dass nicht alle Archive <filename>Translation</"
+"filename>-Dateien für jede Sprache bereitstellen – insbesondere sind die "
+"langen Sprachcodes selten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Die Standardliste beinhaltet »environment« und »en«. »<literal>environment</"
+"literal>« hat hier eine besondere Bedeutung: Es wird zur Laufzeit durch die "
+"Sprachcodes ersetzt, die aus der Umgebungsvariable <literal>LC_MESSAGES</"
+"literal> extrahiert wurden. Es wird außerdem sicherstellen, dass diese Codes "
+"nicht zweimal in der Liste enthalten sind. Falls <literal>LC_MESSAGES</"
+"literal> auf »C« gesetzt ist, wird nur die Datei <filename>Translation-en</"
+"filename> (falls verfügbar) benutzt. Um APT zu zwingen, keine "
+"Übersetzungsdatei zu verwenden, benutzen Sie die Einstellung "
+"<literal>Acquire::Languages=none</literal>. »<literal>none</literal>« ist "
+"ein weiterer Code mit besonderer Bedeutung, der die Suche nach einer "
+"passenden <filename>Translation</filename>-Datei stoppen wird. Dies weist "
+"APT an, diese Übersetzungen auch herunterzuladen, ohne sie tatsächlich zu "
+"verwenden, es sei denn, die Umgebungsvariable gibt diese Sprachen an. Daher "
+"wird die folgende Beispielkonfiguration in einer englischen "
+"Spracheinstellung zu der Reihenfolge »en,de« und in einer deutschen "
+"Spracheinstellung zu »de,en« führen. Beachten Sie, dass »fr« "
+"heruntergeladen, aber nur benutzt wird, falls APT in einer französischen "
+"Spracheinstellung benutzt wird (wobei die Reihenfolge »fr, de, en« wäre). "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+"Hinweis: Um Problemen vorzubeugen, die daher kommen, dass APT in "
+"unterschiedlichen Umgebungen ausgeführt wird (z.B. durch verschiedene "
+"Benutzer oder durch andere Programme) werden alle Translation-Dateien, die "
+"in <filename>/var/lib/apt/lists/</filename> gefunden werden, an das Ende der "
+"Liste hinzugefügt (nach einem impliziten »<literal>none</literal>«)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr "Beim Herunterladen wird die Verwendung des IPv4-Protokolls erzwungen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr "Beim Herunterladen wird die Verwendung des IPv6-Protokolls erzwungen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+"die maximale Dateigröße von Release-/Release.gpg-/InRelease-Dateien. Die "
+"Voreinstellung ist 10 MB."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+"Diese Option steuert, ob APT den in RFC 2782 spezifizierten DNS-SRV-"
+"Serverdatensatz benutzt, um einen alternativen Server zur Verbindung "
+"auszuwählen. Die Voreinstellung ist »true«."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+"Ermöglicht Aktualisierungsaktionen, Datendateien aus Depots ohne "
+"ausreichende Sicherheitsinformationen zu laden. Die Voreinstellung ist "
+"»<literal>false</literal>«. Konzept, Auswirkungen sowie Alternativen werden "
+"ausführlich in &apt-secure; erklärt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Ermöglicht Aktualisierungsaktionen, um Datendateien aus Depots zu laden, die "
+"Sicherheitsinformationen bereitstellen, die jedoch nicht mehr als "
+"kryptografisch stark genug erachtet werden. Die Voreinstellung ist "
+"»<literal>false</literal>«. Konzept, Auswirkungen sowie Alternativen werden "
+"ausführlich in &apt-secure; erklärt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Ermöglicht, dass ein Depot, das vorher per GPG signiert war, während einer "
+"Aktualisierungstransaktion seine Signatur verliert. Wenn ein vorher "
+"vertrauenswürdiges Depot keine gültige Signatur mehr hat, wird APT die "
+"Aktualisierung verweigern. Diese Option kann verwendet werden, um diesen "
+"Schutz außer Kraft zu setzen. Sie wollen dies wahrscheinlich nahezu nie "
+"aktivieren. Die Voreinstellung ist »<literal>false</literal>«. Konzept, "
+"Auswirkungen sowie Alternativen werden ausführlich in &apt-secure; erklärt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr "Gültigkeitsbereich"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+"Changelogs können nur beschafft werden, falls ein URI bekannt ist, von dem "
+"sie geholt werden können. Vorzugsweise gibt die Release-Datei ihn in einem "
+"»Changelogs«-Feld an. Falls dies nicht verfügbar ist, werden die Felder "
+"»Label« und »Origin« der Release-Datei benutzt, um zu prüfen, ob eine "
+"<literal>Acquire::Changelogs::URI::Label::<replaceable>BESCHRIFTUNG</"
+"replaceable></literal>- oder <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>URSPRUNG</replaceable></literal>-Option existiert und, falls "
+"dies der Fall ist, wird dieser Wert genommen. Der Wert in der Release-Datei "
+"kann mit <literal>Acquire::Changelogs::URI::Override::Label::"
+"<replaceable>BESCHRIFTUNG</replaceable></literal> oder <literal>Acquire::"
+"Changelogs::URI::Override::Origin::<replaceable>URSPRUNG</replaceable></"
+"literal> außer Kraft gesetzt werden. Der Wert sollte ein normaler URI auf "
+"eine Textdatei sein, außer dass paketspezifische Daten durch den Platzhalter "
+"<literal>@CHANGEPATH@</literal> ersetzt werden. Der Wert dafür ist: 1. Falls "
+"das Paket von einem Bestandteil stammt (z.B. <literal>main</literal>), ist "
+"dies der erste Teil, ansonsten wird er weggelassen. 2. der erste Buchstabe "
+"des Quellpaketnamens, es sei denn, der Paketname beginnt mit »<literal>lib</"
+"literal>«. In diesem Fall werden es die vier ersten Buchstaben sein. 3. der "
+"komplette Quellpaketname. 4. wieder der vollständige Name und 5. die "
+"Quellversion. Der erste (falls vorhanden), zweite, dritte und vierte Teil "
+"werden durch einen Schrägstrich (»<literal>/</literal>«) voneinander "
+"getrennt und zwischen dem vierten und fünften ist ein Unterstrich "
+"(»<literal>_</literal>«). Der Spezialwert »<literal>no</literal>«, der für "
+"diese Option verfügbar ist, gibt an, dass diese Quelle nicht benutzt werden "
+"kann, um von dort Changelog-Dateien zu beschaffen. In diesem Fall wird, "
+"falls verfügbar, eine andere Quelle ausprobiert."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr "Programmspezifische Konfiguration"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+"Insbesondere kann es mit der Einführung des <command>apt</command>-Programms "
+"nützlich sein, bestimmte Optionen nur für ein bestimmtes Programm zu setzen, "
+"da sogar Optionen, die aussehen, als ob sie nur ein bestimmtes Programm "
+"beträfen, wie <option>APT::Get::Show-Versions</option>, sowohl <command>apt-"
+"get</command> als auch <command>apt</command> beeinflussen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+"Eine Option alleine für ein bestimmtes Programm zu setzen kann erreicht "
+"werden, indem die Option innerhalb des Gültigkeitsbereichs <option>Binary::"
+"<replaceable>bestimmtes_Programm</replaceable></option> gesetzt wird. Das "
+"Setzen der Option <option>APT::Get::Show-Versions</option> für "
+"ausschließlich <command>apt</command> kann z.B. stattdessen durch Setzen von "
+"<option>Binary::apt::APT::Get::Show-Versions</option> erledigt werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+"Beachten Sie, dass Sie, wie im Abschnitt BESCHREIBUNG weiter oben gesehen, "
+"die programmspezifischen Optionen weder auf der Befehlszeile selbst, noch in "
+"Konfigurationsdateien, die über die Befehlszeile geladen werden, setzen "
+"können."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr "Verzeichnisse"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+"Der <literal>Dir::State</literal>-Abschnitt hat Verzeichnisse, die zu "
+"lokalen Statusinformationen gehören. <literal>lists</literal> ist das "
+"Verzeichnis, in das heruntergeladene Paketlisten abgelegt werden und "
+"<literal>status</literal> ist der Name der &dpkg;-Statusdatei. "
+"<literal>preferences</literal> ist der Name der APT-<filename>preferences</"
+"filename>-Datei. <literal>Dir::State</literal> enthält das "
+"Standardverzeichnis, das allen Unterelementen vorangestellt wird, falls sie "
+"nicht mit <filename>/</filename> oder <filename>./</filename> beginnen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+"<literal>Dir::Cache</literal> enthält Orte, die zu lokalen "
+"Zwischenspeicherinformationen gehören, so wie die beiden "
+"Paketzwischenspeicher <literal>srcpkgcache</literal> und <literal>pkgcache</"
+"literal>, sowie den Ort, an den heruntergeladene Archive abgelegt werden, "
+"<literal>Dir::Cache::archives</literal>. Die Generierung von "
+"Zwischenspeichern kann ausgeschaltet werden, indem <literal>pkgcache</"
+"literal> oder <literal>srcpkgcache</literal> auf <literal>\"\"</literal> "
+"gesetzt wird. Dies wird den Start verlangsamen, aber Plattenplatz sparen. Es "
+"ist vermutlich vorzuziehen, statt des »srcpkgcache«s den »pkgcache« "
+"auszuschalten. Wie <literal>Dir::State</literal> ist das Standardverzeichnis "
+"in <literal>Dir::Cache</literal> enthalten."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+"<literal>Dir::Etc</literal> enthält den Ort der Konfigurationsdateien, "
+"<literal>sourcelist</literal> gibt den Ort der Quellliste und <literal>main</"
+"literal> ist die Standardkonfigurationsdatei (Einstellung hat keine "
+"Auswirkung, außer wenn sie aus der in <envar>APT_CONFIG</envar> angegebenen "
+"Konfigurationsdatei erfolgt)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+"Die <literal>Dir::Parts</literal>-Einstellung liest alle Konfigurationsteile "
+"in lexikalischer Reihenfolge vom angegebenen Verzeichnis ein. Nachdem dies "
+"geschehen ist, wird die Hauptkonfigurationsdatei geladen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+"Auf Programme wird von <literal>Dir::Bin</literal> verwiesen. <literal>Dir::"
+"Bin::Methods</literal> gibt den Ort des Methodensteuerungsprogramms an und "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal>, <literal>dpkg-source</"
+"literal>, <literal>dpkg-buildpackage</literal> und <literal>apt-cache</"
+"literal> geben den Ort des jeweiligen Programms an."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+"Das Konfigurationselement <literal>RootDir</literal> hat eine besondere "
+"Bedeutung. Falls es gesetzt ist, sind alle Pfad relativ zu <literal>RootDir</"
+"literal>, <emphasis>sogar Pfade, die absolut angegeben wurden</emphasis>. So "
+"wird zum Beispiel, wenn <literal>RootDir</literal> auf <filename>/tmp/"
+"staging</filename> und <literal>Dir::State::status</literal> auf <filename>/"
+"var/lib/dpkg/status</filename> gesetzt ist, nach der Statusdatei in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename> nachgesehen. Falls Sie "
+"etwas nur relativen Pfaden voranstellen möchten, setzen Sie stattdessen "
+"<literal>Dir</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+"Die Liste <literal>Ignore-Files-Silently</literal> kann benutzt werden, um "
+"anzugeben, welche Dateien APT beim Auswerten der Dateien in den Fragment-"
+"Verzeichnissen stillschweigend ignorieren sollte. Standardmäßig werden "
+"Dateien, die auf <literal>.disabled</literal>, <literal>~</literal>, "
+"<literal>.bak</literal> oder <literal>.dpkg-[a-z]+</literal> enden "
+"stillschweigend ignoriert. Wie beim letzten Vorgabewert gesehen, kann die "
+"Syntax für reguläre Ausdrücke für diese Muster verwandt werden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr "APT in DSelect"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+"Wenn APT als eine &dselect;-Methode benutzt wird, steuern mehrere "
+"Konfigurationsdirektiven das Standardverhalten. Diese stehen im Abschnitt "
+"<literal>DSelect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+"Zwischenspeicherbereinigungsmodus; dieser Wert kann entweder "
+"»<literal>always</literal>«, »<literal>prompt</literal>«, »<literal>auto</"
+"literal>«, »<literal>pre-auto</literal>« oder »<literal>never</literal>« "
+"sein. »<literal>always</literal>« und »<literal>prompt</literal>« werden, "
+"nachdem das Upgrade durchgeführt wurde, alle Pakete aus dem Zwischenspeicher "
+"entfernen, »<literal>prompt</literal>« (die Vorgabe) tut dies bedingt. "
+"»<literal>auto</literal>« entfernt nur jene Pakete, die nicht länger "
+"heruntergeladen werden können (zum Beispiel, weil sie durch eine neue "
+"Version ersetzt wurden). »<literal>pre-auto</literal>« führt diese Aktion "
+"vor dem Herunterladen neuer Pakete durch."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+"Die Inhalte dieser Variablen werden als Befehlszeilenoptionen an &apt-get; "
+"übermittelt, wenn es für die Installationsphase durchlaufen wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+"Die Inhalte dieser Variable werden als Befehlszeilenoptionen an &apt-get; "
+"übermittelt, wenn es für die Aktualisierungsphase durchlaufen wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+"Falls »true«, wird die Aktualisierungsaktion [U] in &dselect; immer "
+"nachfragen, um fortzufahren. Vorgabe ist es, nur bei Fehlern nachzufragen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr "Wie APT &dpkg; aufruft"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+"Mehrere Konfigurationsdirektiven steuern, wie APT &dpkg; aufruft. Diese "
+"stehen im Abschnitt <literal>DPkg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+"Dies ist eine Liste von Optionen, die an &dpkg; übermittelt werden. Die "
+"Optionen müssen unter Benutzung der Listenschreibweise angegeben werden und "
+"jedes Listenelement wird als einzelnes Argument an &dpkg; übermittelt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+"Dies ist eine Liste von Shell-Befehlen, die vor/nach dem Aufruf von &dpkg; "
+"ausgeführt werden. Wie <literal>options</literal> muss dies in "
+"Listenschreibweise angegeben werden. Die Befehle werden der Reihenfolge nach "
+"mit <filename>/bin/sh</filename> aufgerufen, sollte einer fehlschlagen, wird "
+"APT abgebrochen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+"Dies ist eine Liste von Shell-Befehlen, die vor dem Aufruf von &dpkg; "
+"ausgeführt werden. Wie <literal>options</literal> muss dies in "
+"Listenschreibweise angegeben werden. Die Befehle werden der Reihenfolge nach "
+"mit <filename>/bin/sh</filename> aufgerufen, sollte einer fehlschlagen, wird "
+"APT abgebrochen. APT wird den Befehlen die Dateinamen aller .deb-Dateien, "
+"die es installieren wird, einen pro Zeile, an den angeforderten "
+"standardmäßig auf die Standardeingabe verweisenden Dateideskriptor, "
+"übergeben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+"Version 2 dieses Protokolls sendet mehr Informationen durch den "
+"angeforderten Dateideskriptor: eine Zeile mit dem Text <literal>VERSION 2</"
+"literal>, den APT-Konfigurationsraum und eine Liste von Paketaktionen mit "
+"Dateinamen und Versionsinformationen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+"Jede Zeile der Konfigurationsrichtlinien hat die Form "
+"<literal>Schlüssel=Wert</literal>. Sonderzeichen (Gleichheitszeichen, "
+"Zeilenumbrüche, nicht druckbare Zeichen, Anführungszeichen und "
+"Prozentzeichen in <literal>Schlüssel</literal> und Zeilenumbrüche, nicht "
+"druckbare Zeichen und Prozentzeichen in <literal>Wert</literal>) werden %-"
+"kodiert. Listen werden durch mehrere <literal>Schlüssel=Wert</literal>-"
+"Zeilen mit demselben Schlüssel dargestellt. Der Konfigurationsabschnitt "
+"endet mit einer leeren Zeile."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+"Paketaktionszeilen bestehen in Version 2 aus fünf Feldern: Paketname (ohne "
+"Architektureignung, sogar wenn fremd), alte Version, Richtung der "
+"Versionsänderung (»&lt;« für Upgrades, »&gt;« für Downgrades, »=« für keine "
+"Änderung), neue Version, Aktion. Die Versionsfelder sind »-« für gar keine "
+"Version (zum Beispiel, wenn ein Paket zum ersten Mal installiert wird; keine "
+"Version wird als älter als jede echte Version angesehen, daher wird ein "
+"Upgrade als <literal>- &lt; 1.23.4</literal> angezeigt). Das Aktionsfeld ist "
+"»**CONFIGURE**«, falls das Paket konfiguriert wird, »**REMOVE**«, falls es "
+"entfernt wird oder der Dateiname einer .deb-Datei, falls es entpackt wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+"In Version 3 folgt nach jedem Versionsfeld die Architektur dieser Version. "
+"Sie ist »-«, falls es dort keine Version gibt, und ein Feld, das die "
+"Multiarch-Typen »same«, »foreign«, »allowed« oder »none« anzeigt. Beachten "
+"Sie, dass »none« kein korrekter Typenname ist. Er wird nur beibehalten, um "
+"kompatibel zu bleiben. Er sollte als »no« gelesen werden und Benutzer werden "
+"ermutigt, beides zu unterstützen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+"Die Protokollversion, die für den Befehl <literal><replaceable>Befehl</"
+"replaceable></literal> benutzt werden soll, kann durch entsprechendes Setzen "
+"von <literal>DPkg::Tools::options::<replaceable>Befehl</replaceable>::"
+"Version</literal> ausgewählt werden, Voreinstellung ist Version 1. Falls APT "
+"die angefragte Version nicht unterstützt, wird es stattdessen die "
+"Informationen in der höchsten Version senden, für die es Unterstützung "
+"bietet."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+"Der Dateideskriptor, der zum Senden der Informationen benutzt wird, kann mit "
+"<literal>DPkg::Tools::options::<replaceable>Befehl</replaceable>::InfoFD</"
+"literal> abgefragt werden. Er ist standardmäßig <literal>0</literal> für die "
+"Standardeingabe und seit Version 0.9.11 verfügbar. Sie können durch Prüfen "
+"der Umgebungsvariable <envar>APT_HOOK_INFO_FD</envar> ermitteln, ob die "
+"Option untersützt wird. Sie enthält die Nummer des verwendeten "
+"Dateideskriptors als eine Bestätigung."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+"APT wechselt mit chdir in dieses Verzeichnis, bevor &dpkg; aufgerufen wird, "
+"die Vorgabe ist <filename>/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+"Diese Optionen werden an &dpkg-buildpackage; beim Kompilieren von Paketen "
+"übermittelt. Standardmäßig wird das Signieren ausgeschaltet und alle "
+"Programme werden erstellt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+"Wenn diese Option gesetzt ist, wird APT <command>dpkg --configure --pending</"
+"command> aufrufen, um &dpkg; alle benötigten Konfigurationen und Trigger "
+"handhaben zu lassen. Diese Option ist als Vorgabe aktiviert, sie zu "
+"Deaktivieren könnte jedoch nützlich sein, wenn Sie APT mehrmals "
+"hintereinander ausführen möchten – z.B. in einem Installationsprogramm. In "
+"diesem Szenario könnten Sie diese Option in allen außer der letzten "
+"Ausführung deaktivieren."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr "Periodische- und Archivoptionen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+"<literal>APT::Periodic</literal>- und <literal>APT::Archives</literal>-"
+"Gruppen von Optionen konfigurieren das Verhalten periodischer APT-"
+"Aktualisierungen, die vom Skript <literal>/usr/lib/apt/apt.systemd.daily</"
+"literal> durchgeführt werden. Lesen Sie den Anfang dieses Skripts, um eine "
+"kurze Dokumentation dieser Optionen zu erhalten."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr "Fehlersuchoptionen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+"Einschalten von Optionen im Abschnitt <literal>Debug::</literal> wird "
+"veranlassen, dass Fehlersuchinformationen an die Standardfehlerausgabe des "
+"Programms gesendet werden, das die <literal>apt</literal>-Bibliotheken "
+"benutzt oder besondere Programmmodi einschaltet, die in erster Linie für das "
+"Fehlersuchverhalten von <literal>apt</literal> nützlich sind. Die meisten "
+"dieser Optionen sind für den normalen Benutzer uninteressant, aber ein paar "
+"könnten es sein:"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+"<literal>Debug::pkgProblemResolver</literal> schaltet die Ausgabe über die "
+"von <literal>dist-upgrade, upgrade, install, remove, purge</literal> "
+"getroffenen Entscheidungen ein."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+"<literal>Debug::NoLocking</literal> schaltet jegliches Sperren von Dateien "
+"aus. Dies kann benutzt werden, um einige Aktionen (zum Beispiel <literal>apt-"
+"get -s install</literal>) als nicht root-Benutzer auszuführen."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+"<literal>Debug::pkgDPkgPM</literal> gibt die tatsächliche Befehlszeile "
+"jedesmal aus, wenn <literal>apt</literal> &dpkg; aufruft."
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> schaltet das Einbeziehen von statfs-"
+"Daten in CD-ROM-IDs aus."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr "Eine vollständige Liste der Fehlersuchoptionen von APT folgt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+"gibt Informationen aus, die sich auf Zugriffe von <literal>cdrom://</"
+"literal>-Quellen beziehen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+"gibt Informationen aus, die sich auf das Herunterladen von Paketen per FTP "
+"beziehen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+"gibt Informationen aus, die sich auf das Herunterladen von Paketen per HTTP "
+"beziehen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+"gibt Informationen aus, die sich auf das Herunterladen von Paketen per HTTPS "
+"beziehen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+"gibt Informationen aus, die sich auf das Prüfen kryptografischer Signaturen "
+"mittels <literal>gpg</literal> beziehen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+"gibt Informationen über den Zugriffsprozess auf Paketsammlungen aus, die auf "
+"CD-ROMs gespeichert sind."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+"beschreibt den Prozess der Auflösung von Bauabhängigkeiten in &apt-get;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+"gibt jeden kryptografischen Hash aus, der von den <literal>apt</literal>-"
+"Bibliotheken generiert wurde."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+"schließt keine Informationen von <literal>statfs</literal> ein, und zwar die "
+"Anzahl der benutzten und freien Blöcke auf dem CD-ROM-Dateisystem, wenn eine "
+"ID für eine CD-ROM generiert wird."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+"schaltet jegliches Sperren von Dateien aus. Dies wird zum Beispiel erlauben, "
+"dass zwei Instanzen von <quote><literal>apt-get update</literal></quote> zur "
+"gleichen Zeit laufen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+"protokolliert, wenn Elemente in die globalen Warteschlange zum Herunterladen "
+"hinzugefügt oder aus ihr entfernt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+"gibt Statusmeldungen und Fehler aus, die sich auf das Prüfen von Prüfsummen "
+"und kryptografischen Signaturen von heruntergeladenen Dateien beziehen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+"gibt Informationen über das Herunterladen und Anwenden von Paketindexlisten-"
+"Diffs und Fehler, die die Paketindexlisten-Diffs betreffen, aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+"gibt Informationen aus, die sich auf das Patchen von Paketlisten von APT "
+"beziehen, wenn Index-Diffs anstelle vollständiger Indexe heruntergeladen "
+"werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+"protokolliert alle Interaktionen mit Unterprozessen, die das eigentliche "
+"Herunterladen durchführen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+"protokolliert alle Ereignisse, die sich auf den automatisch-installiert-"
+"Status von Paketen und auf das Entfernen von nicht benutzten Paketen "
+"beziehen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+"generiert Fehlersuchmeldungen, die beschreiben, welche Pakete automatisch "
+"installiert werden, um Abhängigkeiten aufzulösen. Dies entspricht dem "
+"anfangs durchgeführten auto-install-Durchlauf, z.B. in <literal>apt-get "
+"install</literal> und nicht dem vollständigen <literal>apt</literal>-"
+"Abhängigkeitsauflöser. Lesen Sie dafür <literal>Debug::pkgProblemResolver</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+"generiert Fehlersuchmeldungen, die beschreiben, welches Paket als "
+"»keep«/»install«/»remove« markiert ist, während der ProblemResolver seine "
+"Arbeit verrichtet. Jedes Hinzufügen oder Löschen kann zusätzliche Aktionen "
+"auslösen. Sie werden nach zwei eingerückten Leerzeichen unter dem "
+"Originaleintrag angezeigt. Jede Zeile hat das Format <literal>MarkKeep</"
+"literal>, <literal>MarkDelete</literal> oder <literal>MarkInstall</literal> "
+"gefolgt von <literal>Paketname &lt;a.b.c -&gt; d.e.f | x.y.z&gt; "
+"(Abschnitt)</literal> wobei <literal>a.b.c</literal> die aktuelle Version "
+"des Paketes, <literal>d.e.f</literal> die Version, die zur Installation "
+"vorgesehen und <literal>x.y.z</literal> eine neuere Version, die aber nicht "
+"zur Installation vorgesehen ist (aufgrund einer niedrigen Pinning-"
+"Bewertung). Die letzten beiden können weggelassen werden, wenn es keine gibt "
+"oder wenn sie die gleiche Version haben, wie die, die zur installierten "
+"Version identisch ist. <literal>Abschnitt</literal> ist der Name des "
+"Abschnitts, in dem das Paket erscheint."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+"gibt, wenn &dpkg; aufgerufen wird, die genauen Befehlszeile mit der es "
+"aufgerufen wurde, mit Argumenten, die durch einzelne Leerzeichen getrennt "
+"sind, aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+"gibt alle von &dpkg; über einen Status-Datei-Deskriptor empfangenen Daten "
+"und alle während deren Auswertung gefundenen Fehler aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+"generiert eine Aufzeichnung des Algorithmus, der über die Reihenfolge "
+"entscheidet, in der <literal>apt</literal> Pakete an &dpkg; weiterleiten "
+"soll."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+"gibt Statusmeldungen aus, die die Schritte nachverfolgen, die beim Aufruf "
+"von &dpkg; ausgeführt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr "gibt die Priorität jeder Paketliste beim Start aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+"verfolgt die Ausführung des Abhängigkeitsauflösers (dies wird nur auf das "
+"angewendet, was geschieht, wenn ein komplexes Abhängigkeitsproblem "
+"aufgetreten ist)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+"zeigt eine Liste aller installierten Pakete mit ihren berechneten "
+"Bewertungen, die vom pkgProblemResolver benutzt werden, an. Die Beschreibung "
+"des Pakets stimmt mit der in <literal>Debug::pkgDepCache::Marker</literal> "
+"überein."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+"gibt die Informationen über die aus <filename>/etc/apt/vendors.list</"
+"filename> gelesenen Anbieter aus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+"zeigt die externen Befehle, die durch APT-Hooks aufgerufen werden. Dies "
+"schließt z.B. die Konfigurationsoptionen <literal>DPkg::{Pre,Post}-Invoke</"
+"literal> oder <literal>APT::Update::{Pre,Post}-Invoke</literal> mit ein."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Beispiele"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+"&configureindex; ist eine Konfigurationsdatei, die Beispielwerte für alle "
+"möglichen Optionen zeigen."
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "Voreinstellungssteuerdatei für APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"Die APT-Einstellungsdatei <filename>/etc/apt/preferences</filename> und "
+"Teildateien im Verzeichnis <filename>/etc/apt/preferences.d/</filename> "
+"können benutzt werden, um zu steuern, welche Versionen von Paketen zur "
+"Installation ausgewählt werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Es könnten mehrere Versionen eines Pakets zur Installation verfügbar sein, "
+"wenn die Datei &sources-list; Bezüge zu mehr als einer Distribution enthält "
+"(zum Beispiel <literal>stable</literal> und <literal>testing</literal>). APT "
+"weist jeder verfügbaren Version eine Priorität zu. Unter Berücksichtigung "
+"von Abhängigkeitsbedingungen wählt <command>apt-get</command> die Version "
+"mit der höchsten Priorität zur Installation aus. Die APT-Einstellungen "
+"setzen die Prioritäten außer Kraft, die APT den Paketversionen standardmäßig "
+"zuweist, was dem Benutzer die Kontrolle darüber gibt, welche zur "
+"Installation ausgewählt wird."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Es könnten mehrere Instanzen der gleichen Version eines Paketes verfügbar "
+"sein, wenn die Datei &sources-list; Bezüge zu mehr als einer Quelle enthält. "
+"In diesem Fall lädt <command>apt-get</command> die Instanz herunter, die in "
+"der Datei &sources-list; als erstes aufgelistet ist. Die APT-"
+"Einstellungsdatei beeinflusst die Wahl der Instanz nicht, nur die Wahl der "
+"Version."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"Eigenschaften sind in der Hand eines Systemadministrator ein große Stärke, "
+"können aber auch sein größter Albtraum werden, wenn sie unvorsichtig benutzt "
+"werden. APT wird die Eigenschaften nicht in Frage stellen, so dass deshalb "
+"falsche Einstellungen zu nicht installierbaren Paketen oder falschen "
+"Entscheidungen während des Upgrades führen können. Sogar noch mehr Probleme "
+"treten auf, wenn mehrere Distributions-Releases ohne gutes Verständnis der "
+"folgenden Absätze gemischt werden. Pakete, die in einem speziellen Release "
+"enthalten sind, sind nicht in älteren und neueren Releases oder zusammen mit "
+"Paketen unterschiedlicher Releases getestet und funktionieren daher nicht "
+"immer wie erwartet. Sind wurden gewarnt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"Beachten Sie, dass die Dateien im Verzeichnis <filename>/etc/apt/preferences."
+"d</filename> in alphanumerisch aufsteigender Reihenfolge ausgewertet werden "
+"und der folgenden Namenskonvention unterliegen: Die Dateien haben entweder "
+"keine oder <literal>»pref«</literal> als Dateierweiterung und sie enthalten "
+"nur alphanumerische Zeichen, Bindestriche (-), Unterstriche (_) oder Punkte "
+"(.). Andernfalls wird APT einen Hinweis ausgeben, dass es eine Datei "
+"ignoriert hat, falls die Datei nicht auf ein Muster in der "
+"Konfigurationsliste <literal>Dir::Ignore-Files-Silently</literal> passt – in "
+"diesem Fall wird sie stillschweigend ignoriert."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "APTs Standardprioritätszuweisungen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>irgendein_Paket</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"Wenn es keine Einstellungsdatei gibt oder es in der Datei keinen Eintrag "
+"gibt, der sich auf eine bestimmte Version bezieht, dann ist die dieser "
+"Version zugewiesene Priorität, die Priorität der Distribution zu der die "
+"Version gehört. Es ist möglich, eine Distribution auszuzeichnen, »das Ziel-"
+"Release«, die eine höhere Priorität erhält, als dies bei anderen "
+"Distributionen standardmäßig der Fall ist. Das Ziel-Release kann auf der "
+"<command>apt-get</command>-Befehlszeile oder in der APT-Konfigurationsdatei "
+"<filename>/etc/apt/apt.conf</filename> gesetzt werden. Beachten Sie, dass "
+"dies Vorrang vor einer allgemeinen Priorität hat, die Sie, wie später "
+"beschrieben, in der Datei <filename>/etc/apt/preferences</filename> setzen, "
+"aber nicht vor bestimmten mit Pinning festgehaltenen Paketen. Beispielsweise "
+"<placeholder type=\"programlisting\" id=\"0\"/> <placeholder type="
+"\"programlisting\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Wenn das Ziel-Release angegeben wurde, dann benutzt APT den folgenden "
+"Algorithmus, um die Prioritäten der Versionen eines Paketes zu setzen. "
+"Zuweisung:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "Priorität 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"zu den Versionen, die von Archiven kommen, die in deren <filename>Release</"
+"filename>-Dateien als »NotAutomatic: yes« markiert sind, aber "
+"<emphasis>nicht</emphasis> als »ButAutomaticUpgrades: yes« wie das Archiv "
+"<literal>experimental</literal> von Debian."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "Priorität 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"zu der Version, die bereits installiert ist (wenn dies der Fall ist) und zu "
+"Versionen, die von Archiven kommen, die in deren <filename>Release</"
+"filename>-Dateien als »NotAutomatic: yes« und »ButAutomaticUpgrades: yes« "
+"markiert sind, wie das Debian-Backports-Archiv seit <literal>squeeze-"
+"backports</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "Priorität 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that do not belong to the target release."
+msgstr "zu den Versionen, die nicht zum Ziel-Release gehören."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "Priorität 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that belong to the target release."
+msgstr "zu den Versionen, die zum Ziel-Release gehören."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+"Die höchste dieser Prioritäten, deren Beschreibung zu der Version passt, "
+"wird der Version zugewiesen."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Wenn das Ziel-Release nicht angegeben wurde, dann weist APT einfach allen "
+"installierten Paketversionen eine Priorität von 100 und allen nicht "
+"installierten Paketversionen eine Priorität von 500 zu, außer wenn Versionen "
+"aus Archiven kommen, die in deren <filename>Release</filename>-Dateien mit "
+"»NotAutomatic: yes« markiert sind – diese Versionen erhalten die Priorität 1 "
+"oder die Priorität 100, falls sie zusätzlich als »ButAutomaticUpgrades: yes« "
+"markiert sind."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"APT wendet dann die folgenden Regeln an, aufgelistet in der Reihenfolge "
+"ihres Vorrangs, um zu bestimmen, in welcher Version das Paket zu "
+"installieren ist."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Führen Sie niemals ein Downgrade durch, außer wenn die Priorität verfügbarer "
+"Pakete 1000 übersteigt. (»Downgrading« ist das Installieren einer weniger "
+"aktuellen Version, an Stelle einer aktuelleren Version. Beachten Sie, dass "
+"keine Standardpriorität von APT 1000 übersteigt. So hohe Prioritäten können "
+"nur durch die Einstellungsdatei gesetzt werden. Beachten Sie außerdem, dass "
+"Downgrading eines Paketes riskant sein kann.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "installiert die Version mit der höchsten Priorität."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Wenn zwei oder mehr Versionen die gleiche Priorität haben, wird die "
+"aktuellste installiert (das ist die mit der höheren Versionsnummer)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"Wenn zwei oder mehr Versionen die gleiche Priorität und Versionsnummer "
+"haben, die Pakete sich aber entweder in ihren Metadaten unterscheiden oder "
+"die Option <literal>--reinstall</literal> angegeben wurde, wird die nicht "
+"installierte installiert."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"In einer typischen Situation ist die Version eines Paketes (Priorität 100) "
+"nicht so aktuell, wie eine der verfügbaren Versionen, die in den Quellen in "
+"der Datei &sources-list; aufgeführt sind (Priorität 500 oder 990). Dann wird "
+"ein Upgrade des Pakets durchgeführt, wenn <command>apt-get install "
+"<replaceable>irgendein_Paket</replaceable></command> oder <command>apt-get "
+"upgrade</command> ausgeführt wird."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Seltener ist die installierte Version eines Pakets <emphasis>neuer</"
+"emphasis> als jede andere der verfügbaren Versionen. Für das Paket wird kein "
+"Downgrade durchgeführt, wenn <command>apt-get install "
+"<replaceable>irgendein_Paket</replaceable></command> oder <command>apt-get "
+"upgrade</command> ausgeführt wird."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"Manchmal ist die installierte Version eines Pakets aktueller, als die "
+"Version, die zum Ziel-Release gehört, aber nicht so aktuell, wie eine "
+"Version, die zu einer anderen Distribution gehört. Für ein derartiges Paket "
+"wird tatsächlich ein Upgrade durchgeführt, wenn <command>apt-get install "
+"<replaceable>irgendein_Paket</replaceable></command> oder <command>apt-get "
+"upgrade</command> ausgeführt wird, weil mindestens <emphasis>eine</emphasis> "
+"der verfügbaren Versionen eine höhere Priorität als die installierte Version "
+"hat."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "Die Auswirkungen von APT-Einstellungen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"Die APT-Einstellungsdatei erlaubt dem Systemverwalter die Zuweisung von "
+"Prioritäten zu steuern. Die Datei besteht aus einem oder mehreren "
+"mehrzeiligen Datensätzen, die durch leere Zeilen getrennt sind. Datensätze "
+"können eine von zwei Gestalten haben, eine spezielle Gestalt oder eine "
+"allgemeine Gestalt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"Die spezielle Gestalt weist die Priorität (eine »Pin-Priorität«) einem oder "
+"mehreren angegebenen Paketen mit einer bestimmten Version oder einem "
+"bestimmten Versionsbereich zu. Der folgende Datensatz weist zum Beispiel "
+"allen Versionen des <filename>perl</filename>-Pakets eine hohe Priorität zu, "
+"deren Versionsnummer mit »<literal>&good-perl;</literal>« beginnt. Mehrere "
+"Pakete können durch Leerzeichen getrennt werden."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"Die allgemeine Gestalt weist allen Paketversionen in einer gegebenen "
+"Distribution (d.h. allen Versionen von Paketen, die in einer bestimmten "
+"<filename>Release</filename>-Datei gelistet sind) oder allen Paketversionen, "
+"die von einer speziellen Internet-Site kommen, die durch ihren vollständig "
+"dargestellten Domain-Namen identifiziert wird, eine Priorität zu."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Dieser Eintrag in allgemeiner Form in der APT-Einstellungsdatei gilt nur für "
+"Gruppen von Paketen. Der folgende Eintrag weist zum Beispiel allen "
+"Paketversionen mit lokalem Ursprung eine hohe Priorität zu."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"Eine Mahnung zur Vorsicht: Das hier benutzte Schlüsselwort ist "
+"»<literal>origin</literal>«, was zum Abgleich mit einem Rechnernamen benutzt "
+"werden kann. Der folgende Eintrag wird allen Versionen eine hohe Priorität "
+"zuweisen, die auf dem Server verfügbar sind, der durch den Rechnernamen »ftp."
+"de.debian.org« identifiziert wird."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"Dies sollte nicht mit der Herkunft einer Distribution verwechselt werden, "
+"wie sie in einer <filename>Release</filename>-Datei angegeben wurde. Was dem "
+"»Origin:«-Kennzeichen in einer <filename>Release</filename>-Datei folgt, ist "
+"keine Internet-Adresse, sondern ein Autoren- oder Anbietername, wie »Debian« "
+"oder »Ximian«."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"Der folgende Datensatz weist allen Paketversionen, die zu Distributionen "
+"gehören, deren Archivname »<literal>unstable</literal>« ist, eine niedrige "
+"Priorität zu."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"Der folgende Datensatz weist allen Paketversionen, die zu einer Distribution "
+"gehören, deren Codename »<literal>&debian-testing-codename;</literal>« ist, "
+"eine hohe Priorität zu."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"Der folgende Datensatz weist allen Paketversionen, die zu einer Distribution "
+"gehören, deren Archivname »<literal>stable</literal>« und deren Release-"
+"Nummer »<literal>&debian-stable-version;</literal>« ist, eine hohe Priorität "
+"zu."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+"Die Auswirkungen des trennenden Kommas ist einem »und« in der Logik ähnlich: "
+"Alle Bedingungen müssen erfüllt werden, dass die Pin passt. Es gibt jedoch "
+"eine Ausnahme: Bei jedem Bedingungstyp (wie zwei »a«-Bedingungen) wird nur "
+"die letzte Bedingungen geprüft."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "Reguläre Ausdrücke und &glob;-Syntax"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"APT unterstützt außerdem Pinning mittels &glob;-Ausdrücken und regulären "
+"Ausdrücken, die von »/« umschlossen sind. Das folgende Beispiel weist "
+"beispielsweise allen Paketen aus Experimental die Priorität 500 zu, bei "
+"denen der Name mit »gnome« beginnt (wie ein &glob;-artiger Ausdruck) oder "
+"das Wort »kde« enthält (wie ein erweiterter regulärer POSIX-Ausdruck, der "
+"von Schrägstrichen umschlossen wird)."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"Die Regel für diese Ausdrücke ist, dass sie überall dort auftreten können, "
+"wo eine Zeichenkette auftreten kann. Somit weist die folgende Pin allen "
+"Paketen von einem Release seit &ubuntu-codename; die Priorität 900 zu."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"Falls ein regulärer Ausdruck in einem <literal>Package</literal>-Feld "
+"vorkommt, ist das Verhalten dasselbe, als wenn der reguläre Ausdruck durch "
+"eine Liste aller Paketnamen ersetzt würde, auf die er passt. Es ist noch "
+"nicht entschieden, wie sich dies in Zukunft ändern wird, daher sollten Sie "
+"immer zuerst Platzhalter-Pins auflisten, so dass sie später spezielle Pins "
+"außer Kraft setzen können. Das Muster »<literal>*</literal>« in einem "
+"»Package«-Feld wird selbst nicht als ein &glob;-Ausdruck angesehen."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "Wie APT Prioritäten interpretiert"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"Die in der APT-Einstellungsdatei zugewiesenen Prioritäten (P) müssen "
+"positive oder negative Ganzzahlen sein. Sie werden wie folgt interpretiert "
+"(grob gesagt):"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"veranlasst, dass eine Version installiert wird, selbst wenn dies ein "
+"Downgrade des Pakets durchführt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"veranlasst, dass eine Version installiert wird, auch wenn diese nicht vom "
+"Ziel-Release kommt, außer wenn die installierte Version aktueller ist"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"veranlasst, dass eine Version installiert wird, außer wenn eine Version "
+"verfügbar ist, die zum Ziel-Release gehört oder die installierte Version "
+"neuer ist"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"veranlasst, dass eine Version installiert wird, außer wenn eine Version "
+"verfügbar ist, die zu einer anderen Distribution gehört oder die "
+"installierte Version neuer ist"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"veranlasst, dass eine Version nur dann installiert wird, wenn es keine "
+"installierte Version des Pakets gibt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "verhindert das Installieren der Version"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr "P = 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr "hat kein definiertes Verhalten, verwenden Sie es nicht."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"Der erste Datensatz mit speziellem Format der zu einer verfügbaren "
+"Paketversion passt, legt die Priorität der Paketversion fest. Schlägt dies "
+"fehl, wird die Priorität als Maximum aller Prioritäten der Datensätze mit "
+"generischem Format definiert, die zu einer verfügbaren Version passen. "
+"Datensätze, die so definiert sind, dass sie andere Muster als »*« im Feld "
+"Pin verwenden, werden wie Datensätze mit speziellem Format betrachtet."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Nehmen wir zum Beispiel an, die APT-Einstellungsdatei enthält die drei "
+"bereits gezeigten Datensätze:"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "Dann:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"Es wird die aktuellste verfügbare Version des Pakets <literal>perl</literal> "
+"installiert, so lange die Versionsnummer mit »<literal>&good-perl;</"
+"literal>« anfängt. Wenn <emphasis>irgendeine</emphasis> &good-perl;*-Version "
+"von <literal>perl</literal> verfügbar ist und die installierte Version &bad-"
+"perl;* ist, dann wird von <literal>perl</literal> ein Downgrade durchgeführt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Eine Version irgendeines anderen Pakets als <literal>perl</literal>, die vom "
+"lokalen System verfügbar ist, hat Priorität über andere Versionen, sogar "
+"wenn diese Versionen zum Ziel-Release gehören."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"Eine Version eines Pakets, dessen Ursprung nicht das lokale System ist, aber "
+"ein anderer in &sources-list; aufgelisteter Ort und der zu einer "
+"<literal>unstable</literal>-Distribution gehört, wird nur installiert, falls "
+"es zur Installation ausgewählt wurde und nicht bereits eine Version des "
+"Pakets installiert ist."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr "Festlegung von Paketversion und Distributions-Eigenschaften"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"Die in der &sources-list;-Datei aufgelisteten Orte sollten "
+"<filename>Packages</filename>- und <filename>Release</filename>-Dateien "
+"bereitstellen, um die an diesem Ort verfügbaren Pakete zu beschreiben."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"Die <filename>Packages</filename>-Datei wird normalerweise im Verzeichnis "
+"<filename>…/dists/<replaceable>Distributions-Name</replaceable>/"
+"<replaceable>Bestandteil</replaceable>/<replaceable>Architektur</"
+"replaceable></filename> gefunden, zum Beispiel <filename>…/dists/stable/main/"
+"binary-i386/Packages</filename>. Sie besteht aus einer Serie mehrzeiliger "
+"Datensätze, einem für jedes verfügbare Paket in diesem Verzeichnis. In jedem "
+"Datensatz sind nur zwei Zeilen zum Setzen der APT-Prioritäten relevant:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "die <literal>Package:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "gibt den Paketnamen an"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "die <literal>Version:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "gibt die Versionsnummer für das genannte Paket an"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"Die <filename>Release</filename>-Datei ist normalerweise im Verzeichnis "
+"<filename>…/dists/<replaceable>Distributionsname</replaceable></filename> zu "
+"finden, zum Beispiel <filename>…/dists/stable/Release</filename> oder "
+"<filename>…/dists/&debian-stable-codename;/Release</filename>. Sie besteht "
+"aus einem einzelnen mehrzeiligen Datensatz, der auf <emphasis>alle</"
+"emphasis> Pakete im Verzeichnisbaum unterhalb des übergeordneten "
+"Verzeichnisses zutrifft. Anders als die <filename>Packages</filename>-Datei "
+"sind nahezu alle Zeilen in einer <filename>Release</filename>-Datei für das "
+"Setzen von APT-Prioritäten relevant:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "die <literal>Archive:</literal>- oder <literal>Suite:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"benennt das Archiv, zu dem alle Pakete im Verzeichnisbaum gehören. Die Zeile "
+"»Archive: stable« oder »Suite: stable« gibt zum Beispiel an, dass alle "
+"Pakete im Verzeichnisbaum unterhalb des der <filename>Release</filename>-"
+"Datei übergeordneten Verzeichnisses sich in einem <literal>stable</literal>-"
+"Archiv befinden. Diesen Wert in der APT-Einstellungsdatei anzugeben würde "
+"die folgende Zeile benötigen:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "die <literal>Codename:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"benennt den Codenamen, zu dem alle Pakete im Verzeichnisbaum gehören. Die "
+"Zeile »Codename: &debian-testing-codename;« gibt zum Beispiel an, dass alle "
+"Pakete im Verzeichnisbaum unterhalb des der <filename>Release</filename>-"
+"Datei übergeordneten Verzeichnisses zu einer Version mit Namen "
+"<literal>&debian-testing-codename;</literal> gehören. Diesen Wert in der APT-"
+"Einstellungsdatei anzugeben würde die folgende Zeile benötigen:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"benennt die Release-Version. Die Pakete im Baum könnten zum Beispiel zur "
+"Debian-Release-Version &debian-stable-version; gehören. Beachten Sie, dass "
+"es normalerweise keine Versionsnummer für <literal>testing</literal>- und "
+"<literal>unstable</literal>-Distributionen gibt, weil sie noch nicht "
+"veröffentlicht wurden. Diese in der APT-Einstellungsdatei anzugeben würde "
+"eine der folgenden Zeilen benötigen:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "die <literal>Component:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"benennt den Lizenzierungsbestandteil, die den Paketen im Verzeichnisbaum der "
+"<filename>Release</filename>-Datei zugeordnet ist. Die Zeile »Component: "
+"main« gibt zum Beispiel an, dass alle Pakete im Verzeichnisbaum von der "
+"<literal>main</literal>-Komponente stammen, was zur Folge hat, dass sie "
+"unter den Bedingungen der Debian-Richtlinien für Freie Software stehen. "
+"Diese Komponente in der APT-Einstellungsdatei anzugeben würde die folgende "
+"Zeilen benötigen:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "die <literal>Origin:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"benennt den Urheber des Pakets im Verzeichnisbaum der <filename>Release</"
+"filename>-Datei. Zumeist ist dies <literal>Debian</literal>. Um diesen "
+"Ursprung in der APT-Einstellungsdatei anzugeben, würde die folgende Zeile "
+"benötigt:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "die <literal>Label:</literal>-Zeile"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"benennt die Beschriftung des Pakets im Verzeichnisbaum der "
+"<filename>Release</filename>-Datei. Zumeist ist dies <literal>Debian</"
+"literal>. Diese Beschriftung in der APT-Einstellungsdatei anzugeben würde "
+"die folgende Zeile benötigen:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Alle <filename>Packages</filename>- und <filename>Release</filename>-"
+"Dateien, die von Orten heruntergeladen werden, die in der Datei &sources-"
+"list; aufgelistet sind, werden im Verzeichnis <filename>/var/lib/apt/lists</"
+"filename> oder in der von der Variablen <literal>Dir::State::Lists</literal> "
+"in der Datei <filename>apt.conf</filename> benannten Datei gespeichert. Die "
+"Datei <filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-"
+"i386_Release</filename> enthält zum Beispiel die <filename>Release</"
+"filename>-Datei, die von der Site <literal>debian.lcs.mit.edu</literal> für "
+"die <literal>binary-i386</literal>-Architekturdateien von der "
+"<literal>contrib</literal>-Bestandteil der <literal>unstable</literal>-"
+"Distribution heruntergeladen wurde."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "Optionale Zeilen in einem APT-Einstellungsdatensatz"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"Optional kann jeder Datensatz in der APT-Einstellungsdatei mit einer oder "
+"mehreren Zeilen beginnen, die mit dem Wort <literal>Explanation:</literal> "
+"anfangen. Dieses stellt einen Platz für Kommentare bereit."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "Stable verfolgen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Deinstallieren oder nicht installieren von anderen von Debian\n"
+"Explanation: stammenden Paketversionen als denen der Stable-Distribution\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Die folgende APT-Einstellungsdatei wird APT veranlassen, allen "
+"Paketversionen eine höhere Priorität als die Vorgabe (500) zu geben, die zu "
+"einer <literal>stable</literal>-Distribution gehören und eine ungeheuer "
+"niedrige Priorität zu Paketversionen, die zu anderen <literal>Debian</"
+"literal>-Distributionen gehören. <placeholder type=\"programlisting\" id="
+"\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>Paketname</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Mit einer geeigneten &sources-list;-Datei und der obigen Einstellungsdatei "
+"wird jeder der folgenden Befehle APT veranlassen, ein Upgrade auf die "
+"neuste(n) <literal>stable</literal>-Version(en) durchzuführen. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>Paket</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Der folgende Befehl wird APT veranlassen, ein Upgrade des angegebenen Pakets "
+"auf die neuste Version der <literal>testing</literal>-Distribution "
+"durchzuführen. Von dem Paket wird kein weiteres Upgrade durchgeführt, außer "
+"wenn dieser Befehl wieder angegeben wird. <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "Testing oder Unstable verfolgen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Die folgende APT-Einstellungsdatei wird APT veranlassen, Paketversionen der "
+"<literal>testing</literal>-Distribution eine hohe Priorität, Paketversionen "
+"der <literal>unstable</literal>-Distribution eine niedrigere Priorität und "
+"eine ungeheuer niedrige Priorität zu Paketversionen von anderen "
+"<literal>Debian</literal>-Distributionen zuzuweisen. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Mit einer geeigneten &sources-list;-Datei und der obigen Einstellungsdatei "
+"wird jeder der folgenden Befehle APT veranlassen, ein Upgrade auf die "
+"neuste(n) <literal>testing</literal>-Version(en) durchzuführen. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>Paket</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Der folgende Befehl wird APT veranlassen, ein Upgrade des angegebenen Pakets "
+"auf die neuste Version der <literal>unstable</literal>-Distribution "
+"durchzuführen. Danach wird <command>apt-get upgrade</command> ein Upgrade "
+"des Pakets auf die aktuellste <literal>testing</literal>-Version "
+"durchführen, falls diese aktueller als die installierte Version ist, "
+"andernfalls auf die aktuellste <literal>unstable</literal>-Version, wenn "
+"diese aktueller als die installierte Version ist. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "Die Entwicklung eines Codename-Releases verfolgen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Deinstallieren oder nicht installieren von anderen von Debian\n"
+"Explanation: stammenden Paketversionen als denen der &debian-testing-codename;-\n"
+"Explanation: oder Sid-Distribution\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian-Unstable hat immer den Codenamen sid\n"
+"Package: *\n"
+"Pin: release a=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Die folgende APT-Einstellungsdatei wird APT veranlassen, allen Paketen, die "
+"zu einem bestimmten Codenamen einer Distribution gehören, eine höhere "
+"Priorität als die Vorgabe (500) zu geben und Paketversionen, die zu anderen "
+"<literal>Debian</literal>-Distributionen, Codenamen und Archiven gehören, "
+"eine ungeheuer niedrige Priorität zu geben. Beachten Sie, dass APT mit "
+"diesen APT-Einstellungen der Migration eines Releases vom Archiv "
+"<literal>testing</literal> zu <literal>stable</literal> und später zu "
+"<literal>oldstable</literal> folgen wird. Wenn Sie zum Beispiel dem "
+"Fortschritt in <literal>testing</literal> folgen möchten, obwohl der "
+"Codename sich ändert, sollten Sie die Beispielkonfigurationen oberhalb "
+"benutzen. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Mit einer geeigneten &sources-list;-Datei und der obigen Einstellungsdatei "
+"wird jeder der folgenden Befehle APT veranlassen, ein Upgrade auf die "
+"letzte(n) Version(en) im Release mit Codenamen <literal>&debian-testing-"
+"codename;</literal> durchzuführen. <placeholder type=\"programlisting\" id="
+"\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>Paket</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Der folgende Befehl wird APT veranlassen, ein Upgrade des angegebenen Pakets "
+"auf die neuste Version der <literal>sid</literal>-Distribution "
+"durchzuführen. Danach wird <command>apt-get upgrade</command> ein Upgrade "
+"des Pakets auf die aktuellste <literal>&debian-testing-codename;</literal>-"
+"Version durchführen, wenn diese aktueller als die installierte Version ist, "
+"andernfalls auf die aktuellste <literal>sid</literal>-Version, wenn diese "
+"aktueller als die installierte Version ist. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "Liste konfigurierter APT-Datenquellen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"Die Quellenliste <filename>/etc/apt/sources.list</filename> und die in "
+"<filename>/etc/apt/sources.list.d/</filename> enthaltenen Dateien wurden "
+"entworfen, um eine beliebige Anzahl aktiver Quellen und unterschiedlicher "
+"Quellmedien zu unterstützen. Die Dateien führen eine Quelle je Zeile auf "
+"(einzeiliger Stil) oder enthalten mehrzeilige Absätze, die eine oder mehrere "
+"Quellen pro Absatz definieren (Deb822-Stil), bei der die bevorzugte Quelle "
+"zuerst aufgeführt wird (im Fall, dass eine einzelne Version von mehr als "
+"einer Quelle verfügbar ist). Die Informationen über die konfigurierten "
+"Quellen werden durch <command>apt-get update</command> (oder einem "
+"vergleichbaren Befehl einer anderen APT-Oberfläche) beschafft."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"Das Verzeichnis <filename>/etc/apt/sources.list.d</filename> stellt eine "
+"Möglichkeit bereit, sources.list-Einträge in separaten Dateien hinzuzufügen. "
+"Zwei verschiedene Formate sind, wie in den beiden nächsten Abschnitten "
+"erklärt, erlaubt. Dateinamen müssen abhängig vom enthaltenen Format entweder "
+"eine <filename>.list</filename>- oder <filename>.sources</filename>-Endung "
+"haben. Die Dateinamen dürfen nur Buchstaben (a-z und A-Z), Ziffern (0-9), "
+"Unterstrich (_), Bindestrich (-) und Punkt (.) enthalten. Andernfalls wird "
+"APT einen Hinweis ausgeben, dass es eine Datei ignoriert hat, falls die "
+"Datei nicht auf ein Muster in der Konfigurationsliste <literal>Dir::Ignore-"
+"Files-Silently</literal> passt – in diesem Fall wird sie stillschweigend "
+"ignoriert."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr "Format mit einzeiligem Stil"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+"Dateien in diesem Format haben die Endung <filename>.list</filename>. Jede "
+"Zeile, die eine Quelle angibt, beginnt mit einem Typ (z.B. <literal>deb-src</"
+"literal>), gefolgt von Optionen und Argumenten für diesen Typ. Individuelle "
+"Einträge können nicht auf einer Folgezeile fortgesetzt werden. Leere Zeilen "
+"werden ignoriert und ein <literal>#</literal>-Zeichen irgendwo in einer "
+"Zeile kennzeichnet den Rest der Zeile als Kommentar. Ein Eintrag kann "
+"folglich durch Auskommentieren der ganzen Zeile deaktiviert werden. Falls "
+"Optionen bereitgestellt werden sollen, werden sie durch Leerräume getrennt "
+"und alle zusammen in quadratische Klammern (<literal>[]</literal>) "
+"eingeschlossen. Sie sind in der Zeile nach dem Typ enthalten und mit einem "
+"Leerraum von ihm getrennt. Falls eine Option mehrere Werte erlaubt, werden "
+"diese voneinander per Komma (<literal>,</literal>) getrennt. Ein Optionsname "
+"wird von seinem (seinen) Wert(en) durch ein Gleichheitszeichen (<literal>=</"
+"literal>) getrennt. Optionen mit mehreren Werten haben außerdem <literal>-=</"
+"literal> und <literal>+=</literal> als Trenner, die statt den vorgegebenen "
+"Wert durch den (die) angegebenen Wert(e) zu ersetzen, den vorgegebenen Wert "
+"ändern und den (die) übergebenen Wert(e) entfernen oder einschließen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+"Dies ist das traditionelle, von allen APT-Versionen unterstützte Format. "
+"Beachten Sie, dass nicht alle unten beschriebenen Optionen von allen "
+"Versionen von APT unterstützt werden. Beachten Sie außerdem, dass einige "
+"ältere Anwendungen, die dieses Format selbst auswerten, möglicherweise nicht "
+"erwarten, dass Optionen auftauchen, da diese vor der Einführung der "
+"Unterstützung mehrerer Architekturen nicht üblich waren."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr "Format im Deb822-Stil"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+"Dateien in diesem Format haben die Endung <filename>.sources</filename>. "
+"Dieses Format hat eine ähnliche Syntax wie andere von Debian und seinen "
+"Derivaten benutzte Dateien, wie Metadatendateien, die APT von den "
+"konfigurierten Quellen herunterlädt oder der Datei <filename>debian/control</"
+"filename> in einem Debian-Quellpaket. Individuelle Einträge werden durch "
+"eine leere Zeile getrennt: Zusätzliche leere Zeilen werden ignoriert und "
+"<literal>#</literal>-Zeichen am Anfang einer Zeile kennzeichnen die ganze "
+"Zeile als Kommentar. Ein Eintrag kann daher deaktiviert werden, indem jede "
+"Zeile, die zum Absatz gehört, auskommentiert wird. Es ist üblicherweise "
+"jedoch einfacher, dem Absatz das Feld »Enabled: no« hinzuzufügen, um den "
+"Eintrag zu deaktivieren. Durch Entfernen des Feldes oder indem es auf »yes« "
+"gesetzt wird, wird es wieder aktiviert. Optionen haben dieselbe Syntax wie "
+"jedes andere Feld: ein Feldname, durch einen Doppelpunkt (<literal>:</"
+"literal>) und optionale Leerräume von ihren (ihrem) Wert(en) getrennt. "
+"Beachten Sie insbesondere, dass mehrere Werte durch Leerräume (wie "
+"Leerzeichen, Tabulatoren und Zeilenumbrüche) getrennt werden, nicht durch "
+"Kommas, wie im einzeiligen Format. Felder mit mehreren Werten wie "
+"<literal>Architectures</literal> haben obendrein <literal>Architectures-Add</"
+"literal> und <literal>Architectures-Remove</literal>, um den Vorgabewert zu "
+"ändern, statt ihn zu ersetzen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+"Dies ist ein neues Format, das von APT selbst seit Version 1.1. unterstützt "
+"wird. Ältere Versionen ignorieren solche Dateien, wie vorher beschrieben, "
+"mit einer Benachrichtigung. Es ist vorgesehen, dieses Format schrittweise "
+"zum Standardformat zu machen und das vorher beschriebene Format mit dem "
+"einzeiligen Stil zu missbilligen, da das neue für Menschen und Maschinen "
+"gleichermaßen einfacher zu erstellen, zu erweitern und zu ändern ist, "
+"insbesondere dann, wenn viele Quellen und/oder Optionen beteiligt sind. "
+"Entwickler, die mit APT-Quellen arbeiten und/oder sie auswerten, sind "
+"dringend ermutigt, dieses Format zu unterstützen und das APT-Team zu "
+"kontaktieren, um diese Arbeit zu koordinieren und weiterzugeben. Benutzer "
+"können dieses Format bereits übernehmen, es könnten jedoch Probleme mit "
+"Software auftreten, die dieses Format noch nicht unterstützen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr "Die Typen »deb« und »deb-src«: allgemeines Format"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"Der <literal>deb</literal>-Typ beschreibt ein typisches zweistufiges Debian-"
+"Archiv, <filename>Distribution/Bestandteil</filename>. "
+"<literal>Distribution</literal> ist typischerweise eine Programmsammlung wie "
+"<literal>stable</literal> oder <literal>testing</literal> oder ein Codename "
+"wie <literal>&debian-stable-codename;</literal> oder <literal>&debian-"
+"testing-codename;</literal> während Bestandteil entweder <literal>main</"
+"literal>, <literal>contrib</literal> oder <literal>non-free</literal> ist. "
+"Der <literal>deb-src</literal>-Typ beschreibt den Quellcode einer Debian-"
+"Distribution in der gleichen Form wie den <literal>deb</literal>-Typ. Eine "
+"<literal>deb-src</literal>-Zeile wird benötigt, um Quellindizes "
+"herunterzuladen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"Das Format für zwei Einträge im einzeiligen Stil, die die <literal>deb</"
+"literal>- und <literal>deb-src</literal>-Typen benutzen, ist:"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+"deb [ Option1=Wert1 Option2=Wert2 ] URI Suite [Bestandteil1] [Bestandteil2] […]\n"
+"deb-src [ Option1=Wert1 Option2=Wert2 ] URI Suite [Bestandteil1] [Bestandteil2] […]"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+" Types: deb deb-src\n"
+" URIs: URI\n"
+" Suites: Suite\n"
+" Components: [Bestandteil1] [Bestandteil2] […]\n"
+" Option1: Wert1\n"
+" Option2: Wert2\n"
+" "
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+"Der alternative Eintrag sieht im Format des Deb822-Stils etwa so aus: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"Der URI für den <literal>deb</literal>-Typ muss die Basis der Debian-"
+"Distribution angeben, wo APT die Informationen findet, die es benötigt. "
+"<literal>Suite</literal> kann einen genauen Pfad angeben. In diesem Fall "
+"müssen die Bestandteile weggelassen werden und <literal>Suite</literal> muss "
+"mit einem Schrägstrich (<literal>/</literal>) enden. Dies ist nützlich, wenn "
+"nur ein bestimmtes Unterverzeichnis des vom URI angegebenen Archivs von "
+"Interesse ist. Wenn <literal>Suite</literal> keinen genauen Pfad angibt, "
+"muss mindestens ein <literal>Bestandteil</literal> angegeben sein."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>Suite</literal> darf außerdem eine Variable, <literal>$(ARCH)</"
+"literal>, enthalten, die zur Debian-Architektur (wie <literal>amd64</"
+"literal> oder <literal>armel</literal>) expandiert wird, die auf dem System "
+"benutzt wird. Dies erlaubt es, architekturunabhängige <filename>sources."
+"list</filename>-Dateien zu benutzen. Im Allgemeinen ist dies nur von "
+"Interesse, wenn ein genauer Pfad angegeben wird, andernfalls wird "
+"<literal>APT</literal> automatisch einen URI mit der aktuellen Architektur "
+"erstellen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"Insbesondere im Format im einzeiligen Stil könnte es nötig sein, da pro "
+"Zeile nur eine Distribution angegeben werden kann, mehrere Zeilen für den "
+"gleichen URI zu haben, falls eine Untermenge aller verfügbarer "
+"Distributionen oder Bestandteile von diesem Ort gewünscht wird. APT wird die "
+"URI-Liste sortieren, nachdem es intern eine komplette Zusammenstellung "
+"erstellt hat und es wird beispielsweise mehrere Bezüge zum gleichen Internet-"
+"Rechner zu einer einzigen Verbindung zusammenfassen, so dass es nicht "
+"ineffizient eine Verbindung herstellt, sie schließt, sonst etwas tut und "
+"dann erneut eine Verbindung zum gleichen Rechner herstellt. APT "
+"parallelisiert außerdem Verbindungen zu verschiedenen Rechnern, um "
+"effektiver mit Sites mit niedriger Bandbreite umzugehen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"Es ist wichtig, die Quellen in der Reihenfolge ihrer Bevorzugung "
+"aufzulisten, die bevorzugte Quelle zuerst. Typischerweise resultiert dies in "
+"einer Sortierung nach Geschwindigkeit, vom schnellsten zum langsamsten (CD-"
+"ROM, gefolgt von Rechnern im lokalen Netzwerk, gefolgt von Internet-"
+"Rechnern, zum Beispiel)."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr "&sourceslist-list-format;"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr "&sourceslist-sources-format;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Die Quellen für Ihre Distribution könnten zum Beispiel im Format mit "
+"einzeiligem Stil so aussehen: <placeholder type=\"literallayout\" id=\"0\"/> "
+"oder im Format mit Deb822-Stil so: <placeholder type=\"literallayout\" id="
+"\"1\"/>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr "Die Typen deb und deb-src: Optionen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+"Jeder Quelleneintrag kann Optionen haben, die angegeben wurden, um zu "
+"ändern, auf welche Quelle zugegriffen wird und wie Daten von ihr beschafft "
+"werden. Format, Syntax und Namen der Optionen weichen, wie beschrieben, "
+"zwischen dem Format mit einzeiligem Stil und dem Format mit Deb822-Stil "
+"voneinander ab, für beide sind jedoch dieselben Optionen verfügbar. Der "
+"Einfachheit halber wird der Deb822-Feldname aufgeführt und der einzeilige "
+"Name in Klammern bereitgestellt. Denken Sie daran, dass Sie ergänzend zum "
+"expliziten Setzen von Optionen mit mehreren Werten auch die Möglichkeit "
+"haben, sie basierend auf dem Vorgabewert zu ändern, aber diese Namen werden "
+"hier nicht explizit aufgeführt. Nicht unterstützte Optionen werden "
+"stillschweigend von allen APT-Versionen ignoriert."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<option>Architectures</option> (<option>arch</option>) ist eine Option mit "
+"mehreren Werten, die definiert, für welche Architekturen Informationen "
+"heruntergeladen werden sollen. Falls diese Option nicht gesetzt ist, ist die "
+"Voreinstellung alle durch die Konfigurationsoption <option>APT::"
+"Architectures</option> definierten Architekturen."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<option>Languages</option> (<option>lang</option>) ist eine Option mit "
+"mehreren Werten, die definiert, für welche Sprachen Informationen, wie etwa "
+"übersetzte Paketbeschreibungen, heruntergeladen werden sollen. Falls diese "
+"Option nicht gesetzt ist, werden sie für alle durch die Konfigurationsoption "
+"<option>Acquire::Languages</option> definierten Sprachen heruntergeladen."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+"<option>Targets</option> (<option>target</option>) ist eine Option mit "
+"mehreren Werten, die definiert, welche Herunterladeziele APT aus dieser "
+"Quelle versucht zu beschaffen. Ist sie nicht angegeben, wird die "
+"Voreinstellung durch den Konfigurationsbereich <option>Acquire::"
+"IndexTargets</option> spezifiziert (Ziele werden im Feld <literal>Created-"
+"By</literal> durch ihren Namen angegeben). Außerdem können Ziele mittels des "
+"Felds <literal>Identifier</literal> als Option mit einem Wahrheitswert "
+"aktiviert oder deaktiviert werden, anstatt diese Option mit mehreren Werten "
+"zu benutzen."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+"<option>PDiffs</option> (<option>pdiffs</option>) ist ein yes-/no- (Ja-/"
+"Nein-)Wert, der steuert, ob APT versuchen soll, PDiffs zum Aktualisieren "
+"alter Indexe zu benutzen, statt die ganzen neuen Indexe herunterzuladen. Der "
+"Wert dieser Option wird ignoriert, falls das Depot die Verfügbarkeit von "
+"PDiffs nicht ankündigt. Sie ist auf den Wert der Option mit demselben Namen "
+"für eine bestimmte Indexdatei voreingestellt, die im Gültigkeitsbereich "
+"<option>Acquire::IndexTargets</option> definiert ist und die ihrerseits "
+"wiederum auf den Wert der Konfigurationsoption <option>Acquire::PDiffs</"
+"option> voreingestellt ist, deren Vorgabe <literal>yes</literal> ist."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+"<option>By-Hash</option> (<option>by-hash</option>) kann die Werte "
+"<literal>yes</literal>, <literal>no</literal> oder <literal>force</literal> "
+"haben und steuert, ob APT versuchen soll, Indexe über einen URI zu "
+"beschaffen, der aus einer Hash-Summe der erwarteten Datei konstruiert wird, "
+"statt über einen gut bekannten stabilen Dateinamen. Damit können unpassende "
+"Hash-Summen vermieden werden, dies erfordert jedoch einen Spiegelserver, der "
+"dies unterstützt. Ein <literal>yes</literal>- oder <literal>no</literal>-"
+"Wert aktiviert/deaktiviert die Verwendung dieser Funktionalität, falls diese "
+"Quelle ihre Unterstützung anzeigt, während <literal>force</literal> die "
+"Funktionalität ungeachtet der Angabe der Quelle aktiviert. Sie ist auf den "
+"Wert der Option mit demselben Namen für eine bestimmte Indexdatei "
+"voreingestellt, die im Gültigkeitsbereich <option>Acquire::IndexTargets</"
+"option> definiert ist und die ihrerseits wiederum auf den Wert der "
+"Konfigurationsoption <option>Acquire::By-Hash</option> voreingestellt ist, "
+"deren Vorgabe <literal>yes</literal> ist."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+"Überdies gibt es Optionen, die, falls sie gesetzt sind, <emphasis>alle</"
+"emphasis> Quellen mit demselben URI und derselben Suite beeinflussen, daher "
+"müssen sie auf alle solchen Einträgen gesetzt werden und können nicht "
+"zwischen verschiedenen Bestandteilen unterschieden werden. APT wird "
+"versuchen, solche Anomalien aufzuspüren und Fehler auszugeben."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) und <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) sind Wahrheitswerte, deren Voreinstellung <literal>no</literal> "
+"ist. Falls sie auf <literal>yes</literal> gesetzt sind, umgehen sie Teile "
+"von &apt-secure; und sollten daher nicht leichtfertig benutzt werden."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+"<option>Trusted</option> (<option>trusted</option>) ist ein Wert, der drei "
+"Status annehmen kann. APT entscheidet standardmäßig, ob ein Paket als "
+"vertrauenswürdig angesehen wird oder ob eine Warnung erscheinen soll, bevor "
+"z.B. Pakete aus dieser Quelle installiert werden. Diese Option kann benutzt "
+"werden, um diese Entscheidung außer Kraft zu setzen. Der Wert <literal>yes</"
+"literal> sagt APT, dass es diese Quelle immer als vertrauenswürdig ansehen "
+"soll, sogar dann, wenn sie die Authentifizierungsprüfungen nicht erfolgreich "
+"durchläuft. Sie deaktiviert Teile von &apt-secure; und sollte daher nur in "
+"einem lokalen und vertrauenswürdigen Umfeld (falls überhaupt) verwendet "
+"werden, da die Sicherheit andernfalls verletzt wird. Der Wert <literal>no</"
+"literal> tut das Gegenteil. Er sorgt dafür, dass die Quelle als nicht "
+"vertrauenswürdig behandelt wird, sogar dann, wenn sie die "
+"Authentifizierungsprüfungen erfolgreich durchläuft. Der Vorgabewert kann "
+"nicht explizit gesetzt werden."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<option>Signed-By</option> (<option>signed-by</option>) is either an "
+#| "absolute path to a keyring file (has to be accessible and readable for "
+#| "the <literal>_apt</literal> user, so ensure everyone has read-permissions "
+#| "on the file) or one or more fingerprints of keys either in the "
+#| "<filename>trusted.gpg</filename> keyring or in the keyrings in the "
+#| "<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+#| "fingerprint</command>). If the option is set, only the key(s) in this "
+#| "keyring or only the keys with these fingerprints are used for the &apt-"
+#| "secure; verification of this repository. Defaults to the value of the "
+#| "option with the same name if set in the previously acquired "
+#| "<filename>Release</filename> file. Otherwise all keys in the trusted "
+#| "keyrings are considered valid signers for this repository."
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+"<option>Signed-By</option> (<option>signed-by</option>) ist entweder ein "
+"absoluter Pfad zu einer Schlüsselbunddatei (muss für den Benutzer von "
+"<literal>_apt</literal> zugänglich und lesbar sein, sorgen Sie also dafür, "
+"dass jeder Leserechte an der Datei hat) oder einer oder mehrere "
+"Fingerabdrücke von Schlüsseln, die entweder im <filename>trusted.gpg</"
+"filename>-Schlüsselbund oder in den Schlüsselbunden im Verzeichnis "
+"<filename>trusted.gpg.d/</filename> liegen (siehe <command>apt-key "
+"fingerprint</command>). Falls die Option gesetzt ist, wird/werden nur der/"
+"die Schlüssel in diesem Schlüsselbund oder nur die Schlüssel mit diesen "
+"Fingerabdrücken für die &apt-secure;-Überprüfung dieses Depots benutzt. Sie "
+"ist auf den Wert der Option mit demselben Namen voreingestellt, falls sie in "
+"der vorher beschafften <filename>Release</filename>-Datei gesetzt ist. "
+"Andernfalls werden alle Schlüssel in den vertrauenswürdigen Schlüsselbunden "
+"als gültige Unterzeichner für dieses Depot angesehen."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) ist "
+"ein yes-/no- (Ja-/Nein-)Wert, der steuert, ob APT versuchen soll, "
+"Wiederholungsangriffe zu erkennen. Ein Depotersteller kann eine Zeit "
+"festlegen, bis zu der die im Depot bereitgestellten Daten als gültig "
+"angesehen werden und, falls dieser Zeitpunkt erreicht ist, aber keine neuen "
+"Daten bereitgestellt wurden, die Daten als ungültig angesehen werden und ein "
+"Fehler ausgelöst wird. Neben einer Steigerung der Sicherheit, da ein "
+"böswilliger Angreifer nicht fortlaufend alte Daten senden kann, um einen "
+"Benutzer vom Upgrade auf eine neue Version abzuhalten, hilft dies Benutzern "
+"auch, Spiegelserver zu erkennen, die nicht länger aktualisiert werden. "
+"Einige Depots, wie die historischen Archive, werden jedoch absichtlich nicht "
+"mehr aktualisiert, daher kann diese Prüfung durch Setzen dieser Option auf "
+"<literal>no</literal> deaktiviert werden. Voreingestellt ist der Wert der "
+"Konfigurationsoption <option>Acquire::Check-Valid-Until</option>, die "
+"ihrerseits die Voreinstellung <literal>yes</literal> hat."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) und "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) können "
+"benutzt werden, um die Dauer in Sekunden zu verlängern oder zu verkürzen, in "
+"der die Daten des Depots als gültig angesehen werden. -Max kann insbesondere "
+"dann nützlich sein, wenn das Depot kein Valid-Until-Feld in seiner Release-"
+"Datei bereitstellt, indem Sie Ihren eigenen Wert setzen können, während -Min "
+"benutzt werden kann, um die Gültigkeitsdauer auf selten aktualisierten "
+"(lokalen) Spiegelservern für ein häufig aktualisiertes aber weniger oft "
+"erreichbares Archiv (das auch in der sources.list steht) zu erhöhen anstatt "
+"die Prüfung ganz zu deaktivieren. Voreingestellt sind die Werte der "
+"Konfigurationsoptionen <option>Acquire::Min-ValidTime</option> und "
+"<option>Acquire::Max-ValidTime</option>, die standardmäßig jeweils nicht "
+"gesetzt sind."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+"<option>Check-Date</option> (<option>check-date</option>) ist ein Ja-/Nein-"
+"Wert, der steuert, ob APT berücksichtigen soll, ob die Zeit auf der Maschine "
+"korrekt ist und deshalb zeitbezogene Prüfungen durchführen soll, wie die "
+"Prüfung, ob eine Release-Datei nicht aus der Zukunft stammt. Sie zu "
+"deaktivieren deaktiviert auch die oben erwähnte Option <option>Check-Valid-"
+"Until</option>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) steuert, "
+"wie weit aus der Zukunft ein Depot liegen darf. Voreingestellt ist der Wert "
+"der Konfigurationsoption <option>Acquire::Max-FutureTime</option>, die "
+"standardmäßig zehn Sekunden beträgt."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) legt den "
+"Pfad zur InRelease-Datei relativ zur normalen Position einer "
+"<filename>InRelease</filename>-Datei fest. Standardmäßig ist diese Option "
+"nicht gesetzt und APT wird versuchen, eine <filename>InRelease</filename>-"
+"Datei zu holen oder, falls dies fehlschlägt, eine <filename>Release</"
+"filename>-Datei und die zugehörige <filename>Release.gpg</filename>-Datei. "
+"Durch das Setzen dieser Option wird der angegebene Pfad anstelle der "
+"InRelease-Datei probiert und der Rückgriff auf <filename>Release</filename>-"
+"Dateien wird deaktiviert."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr "URI-Beschreibung"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "Die derzeit erkannten URI-Typen sind:"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr "(&apt-transport-http;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+"Das Schema »http« gibt einen HTTP-Server für ein Archiv an und ist die am "
+"häufigsten verwendete Methode. Der URI kann Anmeldeinformationen direkt "
+"enthalten, falls das Archiv dies erfordert, vorzugsweise sollte jedoch &apt-"
+"authconf; benutzt werden. Die Methode unterstützt auch SOCKS5- und HTTP(S)-"
+"Proxys, die entweder über APT-spezifische Konfiguration eingerichtet werden "
+"oder durch die Umgebungsvariable <envar>http_proxy</envar>, die (unter der "
+"Annahme, dass ein HTTP-Proxy Authentifizierung verlangt) das Format "
+"<replaceable>http://Benutzer:Passwort@Server:Port/</replaceable> hat. Die "
+"Einzelheiten der Authentifizierung für Proxys können auch über &apt-"
+"authconf; bereitgestellt werden."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+"Beachten Sie, dass diese Formen der Authentifizierung unsicher sind, da die "
+"ganze Kommunikation mit dem fernen Server (oder Proxy) unverschlüsselt ist, "
+"so dass ein Angreifer mit ausreichenden Fähigkeiten die Anmeldung sowie alle "
+"anderen Interaktionen beobachten und aufzeichnen kann. Der Angreifer kann "
+"die Kommunikation <emphasis>nicht</emphasis> verändern, da das "
+"Datensicherheitsmodell von APT unabhängig von der gewählten Transportmethode "
+"ist. Einzelheiten finden Sie unter &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr "(&apt-transport-https;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+"Das Schema »https« gibt einen HTTPS-Server für ein Archiv an und ist "
+"bezüglich Benutzung und verfügbaren Optionen dem HTTP-Schema sehr ähnlich. "
+"Der Hauptunterschied besteht darin, dass die Kommunikation zwischen APT und "
+"Server (oder Proxy) verschlüsselt abläuft. Beachten Sie, dass die "
+"Verschlüsselung nicht davor schützt, dass ein Angreifer erfährt, welcher "
+"Server (oder Proxy) mit APT kommuniziert. Eine tiefere Analyse kann "
+"möglicherweise noch offenbaren, welche Daten heruntergeladen wurden. Falls "
+"dies Sorge bereitet, könnten die nachfolgend genannten TOR-basierten "
+"Schemata eine geeignete Alternative sein."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr "Schema"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr "(&apt-transport-mirror;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+"Das Schema »mirror« gibt den Speicherort der Spiegelserverliste an. "
+"Standardmäßig wird für den Speicherort das Schema <literal>http</literal> "
+"benutzt, aber jedes andere Schema kann per <command>mirror"
+"+<replaceable>Schema</replaceable></command> verwendet werden. Die "
+"Spiegelserverliste selbst kann mehrere verschiedenen URIs für Spiegel "
+"enthalten, die der APT-Client transparent auswählt oder auf die er "
+"zurückgreift. Dies ist als Hilfe bei der Lastverteilung zwischen verfügbaren "
+"Spiegelservern gedacht und stellt zudem sicher, dass Clients sogar dann "
+"Daten beziehen können, wenn einige konfigurierte Spiegelserver nicht "
+"verfügbar sind."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"Das file-Schema erlaubt es einem beliebigen Verzeichnis im Dateisystem, als "
+"Archiv betrachtet zu werden. Dies ist nützlich für eingehängtes NFS und "
+"lokale Spiegel oder Archive."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"Das Schema »cdrom« erlaubt APT ein lokales CD-ROM-, DVD- oder USB-Laufwerk "
+"mit Medienwechsel zu benutzen. Benutzen Sie das Programm &apt-cdrom;, um "
+"»cdrom«-Einträge in der Quellenliste zu erstellen."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+"Das Schema »ftp« gibt einen FTP-Server für ein Archiv an. Die Verwendung von "
+"FTP geht zu Gunsten von <literal>http</literal> und <literal>https</literal> "
+"zurück und viele Archive haben entweder nie FTP-Zugriff geboten oder ziehen "
+"diesen zurück. Falls Sie diese Methode immer noch benötigen, sind dafür "
+"viele Konfigurationsoptionen im Bereich <literal>Acquire::ftp</literal> "
+"verfügbar und ausführlich in &apt-conf; erklärt."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"Bitte beachten Sie, dass ein FTP-Proxy durch Benutzung der <envar>ftp_proxy</"
+"envar>-Umgebungsvariablen angegeben werden kann. Es ist mittels dieser "
+"Umgebungsvariable und <emphasis>nur</emphasis> dieser Umgebungsvariable "
+"möglich, einen HTTP-Proxy anzugeben (HTTP-Proxy-Server verstehen oft auch "
+"FTP-URLs). Proxys, die HTTP benutzen und in der Konfigurationsdatei "
+"festgelegt sind, werden ignoriert."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"Das Schema »copy« ist identisch mit dem file-Schema, außer dass Pakete in "
+"das Zwischenspeicherverzeichnis kopiert werden, anstatt direkt von ihrem "
+"Herkunftsort benutzt zu werden. Dies ist für Leute nützlich, die "
+"Wechseldatenträger benutzen, um Dateien mit APT umherzukopieren."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"Die Methode »rsh/ssh« ruft RSH/SSH auf, um sich mit einem Rechner in der "
+"Ferne zu verbinden und als angegebener Benutzer auf die Dateien zuzugreifen. "
+"Es wird empfohlen, vorher Rhosts oder RSA-Schlüssel zu konfigurieren. Für "
+"die Übertragung von Dateien aus der Ferne werden die Standardbefehle "
+"<command>find</command> und <command>dd</command> verwandt."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "weitere zulässige URI-Typen hinzufügen"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"APT kann mit weiteren Methoden erweitert werden, die in anderen optionalen "
+"Paketen geliefert werden, die dem Namensschema <literal>apt-transport-"
+"<replaceable>Methode</replaceable></literal> folgen sollten. Das APT-Team "
+"betreut zum Beispiel außerdem das Paket <package>apt-transport-tor</"
+"package>, das Zugriffsmethoden für HTTP- und HTTPS-URIs bereitstellt, die "
+"über das TOR-Netzwerk geleitet werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"benutzt die lokal gespeicherten (oder per NFS eingehängten) Archive in /home/"
+"apt/debian für stable/main, stable/contrib und stable/non-free."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/apt/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+"wie oben, außer das dies die instabile (Entwicklungs-) Distribution benutzt."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr "Quellenangabe für Obiges"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"Die erste Zeile bekommt Paketinformationen für die Architekturen in "
+"<literal>APT::Architectures</literal>, während die zweite immer "
+"<literal>amd64</literal> und <literal>armel</literal> holt."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"benutzt HTTP, um auf das Archiv auf archive.debian.org zuzugreifen und nur "
+"den hamm/main-Bereich zu benutzen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"benutzt FTP, um auf das Archiv auf archive.debian.org unter dem debian-"
+"Verzeichnis zuzugreifen und nur den &debian-stable-codename;/contrib-Bereich "
+"zu benutzen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"benutzt FTP, um auf das Archiv auf ftp.debian.org unter dem debian-"
+"Verzeichnis zuzugreifen und nur den unstable/contrib-Bereich zu benutzen. "
+"Falls diese Zeile zusammen mit der aus dem vorherigen Beispiel in der Datei "
+"<filename>sources.list</filename> auftaucht, wird eine einzelne FTP-Sitzung "
+"für beide Quellzeilen benutzt."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"benutzt HTTP, um auf das Archiv auf ftp.tlh.debian.org unter dem universe-"
+"Verzeichnis zuzugreifen und benutzt nur Dateien, die unter "
+"<filename>unstable/binary-i386</filename> auf i386-Maschinen, "
+"<filename>unstable/binary-amd64</filename> auf amd64 und so weiter für "
+"andere unterstützte Architekturen, gefunden werden. [Beachten Sie, dass "
+"dieses Beispiel nur anschaulich macht, wie die Platzhaltervariable benutzt "
+"wird. Offizielle Debian-Archive sind nicht so strukturiert.] <placeholder "
+"type=\"literallayout\" id=\"0\"/> <placeholder type=\"literallayout\" id="
+"\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+"benutzt HTTP, um sowohl Binärpakete als auch Quellen von den "
+"Programmsammlungen Stable, Testing, Unstable und den Bestandteilen Main und "
+"Contrib zu holen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"Hilfsprogramm zum Extrahieren der <command>debconf</command>-Konfiguration "
+"und Schablonen von Debian-Paketen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>apt-extracttemplates</command> nimmt als Eingabe ein oder mehrere "
+"Debian-Paketdateien entgegen und schreibt alle zugehörigen "
+"Konfigurationsskripte und Schablonendateien (in ein temporäres Verzeichnis) "
+"heraus. Für jedes übergebene Paket das Konfigurationsskripte und "
+"Schablonendateien enthält, wird eine Ausgabezeile in folgendem Format "
+"generiert:"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "Paket Version Schablonendatei Konfigurationsskript"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"Schablonendatei und Konfigurationsskript werden in das temporäre Verzeichnis "
+"geschrieben, das durch das Verzeichnis <option>-t</option> oder <option>--"
+"tempdir</option> (<literal>APT::ExtractTemplates::TempDir</literal>) mit "
+"Dateinamen der Form <filename>Paket.Vorlage.XXXXXX</filename> und "
+"<filename>Paket.Konfiguration.XXXXXX</filename> angegeben wurde."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"temporäres Verzeichnis, in das die extrahierten <command>debconf</command>-"
+"Schablonendateien und Konfigurationsskripte geschrieben werden. "
+"Konfigurationselement: <literal>APT::ExtractTemplates::TempDir</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command> gibt bei normalen Aktionen 0 zurück, "
+"dezimal 100 bei Fehlern."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "Werkzeug zum Sortieren von Paketindexdateien"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>apt-sortpkgs</command> nimmt eine Indexdatei (Quell- oder "
+"Paketindex) und sortiert die Datensätze nach Paketnamen. Es wird außerdem "
+"die internen Felder jedes Datensatzes gemäß interner Sortierregeln sortieren."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"Alle Ausgaben werden an die Standardausgabe gesandt, die Eingabe muss eine "
+"durchsuchbare Datei sein."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"Quellindexfeldanordnung benutzen. Konfigurationselement: <literal>APT::"
+"SortPkgs::Source</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> gibt bei normalen Aktionen 0 zurück, dezimal "
+"100 bei Fehlern."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "Hilfsprogramm zum Generieren von Indexdateien"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> ist das Befehlszeilenwerkzeug, das "
+"Indexdateien generiert, die APT zum Zugriff auf eine Distributionsquelle "
+"benutzt. Die Indexdateien sollten auf der Ursprungs-Site auf Basis des "
+"Inhalts dieser Site generiert werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+"<command>apt-ftparchive</command> ist eine Obermenge des &dpkg-scanpackages;-"
+"Programms, das dessen ganze Funktionalität über den <literal>packages</"
+"literal>-Befehl enthält. Es enthält auch einen Generator für Contents-"
+"Dateien, <literal>contents</literal> und ein Mittel, um den "
+"Generierungsprozess für ein komplettes Archiv zu »skripten«."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+"Intern kann <command>apt-ftparchive</command> von Programmdatenbanken "
+"Gebrauch machen, um die Inhalte einer .deb-Datei zwischenzuspeichern und es "
+"verlässt sich nicht auf irgendwelche externen Programme, abgesehen von "
+"&gzip;. Wenn eine vollständige Generierung erfolgt, werden automatisch "
+"Dateiänderungsprüfungen durchgeführt und die gewünschten komprimierten "
+"Ausgabedateien erzeugt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+"Der »packages«-Befehl generiert eine Paketdatei aus einem Verzeichnisbaum. "
+"Er nimmt ein vorgegebenes Verzeichnis und durchsucht es rekursiv nach .deb-"
+"Dateien, wobei es für jede einen Paketdatensatz auf Stdout ausgibt. Dieser "
+"Befehl entspricht etwa &dpkg-scanpackages;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+"Die Option <option>--db</option> kann benutzt werden, um eine Datenbank zum "
+"Zwischenspeichern von Programmen anzugeben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+"Der <literal>sources</literal>-Befehl generiert eine Quellenindexdatei aus "
+"einem Verzeichnisbaum. Er nimmt ein vorgegebenes Verzeichnis und durchsucht "
+"es rekursiv nach .dsc-Dateien, wobei es für jede einen Quelldatensatz auf "
+"Stdout ausgibt. Dieser Befehl entspricht etwa &dpkg-scansources;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+"Wenn eine außer Kraft setzende Datei angegeben ist, wird nach einer "
+"Quelldatei zum Überschreiben mit einer .src-Dateiendung gesucht. Die Option "
+"»--source-override« kann benutzt werden, um die Quelldatei zum "
+"Überschreiben, die benutzt wird, zu ändern."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+"Der <literal>contents</literal>-Befehl generiert eine Inhaltsdatei aus einem "
+"Verzeichnisbaum. Er nimmt ein vorgegebenes Verzeichnis und durchsucht es "
+"rekursiv nach .deb-Dateien und liest die Dateiliste von jeder Datei. Dann "
+"sortiert er die Liste der passenden Pakete und schreibt sie nach Stdout. "
+"Verzeichnisse werden nicht in die Ausgabe geschrieben. Falls mehrere Pakete "
+"die gleiche Datei besitzen, dann befindet sich jedes Paket durch Komma "
+"getrennt in der Ausgabe."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+"Der Befehl <literal>release</literal> erzeugt eine Release-Datei aus einem "
+"Verzeichnisbaum. Standardmäßig durchsucht er rekursiv das angegebene "
+"Verzeichnis nach nicht komprimierten und komprimierten <filename>Packages</"
+"filename>-, <filename>Sources</filename>-, <filename>Contents</filename>-, "
+"<filename>Components</filename>- und <filename>icons</filename>-Dateien, "
+"ebenso wie standardmäßig <filename>Release</filename>-, <filename>Index</"
+"filename> und <filename>md5sum.txt</filename>-Dateien (<literal>APT::"
+"FTPArchive::Release::Default-Patterns</literal>). Zusätzliche Muster für "
+"Dateinamen können hinzugefügt werden, indem sie in <literal>APT::FTPArchive::"
+"Release::Patterns</literal> aufgeführt werden. Dann schreibt er eine "
+"<filename>Release</filename>-Datei auf die Standardausgabe, die "
+"(standardmäßig) für jede Datei eine MD5-, SHA1-, SHA256- und SHA512-"
+"Prüfsumme enthält."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+"Werte für zusätzliche Metadatenfelder in der Release-Datei werden den "
+"entsprechenden Variablen unter <literal>APT::FTPArchive::Release</literal> "
+"entnommen, z.B. <literal>APT::FTPArchive::Release::Origin</literal>. Die "
+"unterstützten Felder sind: <literal>Origin</literal>, <literal>Label</"
+"literal>, <literal>Suite</literal>, <literal>Version</literal>, "
+"<literal>Codename</literal>, <literal>Date</literal>, <literal>NotAutomatic</"
+"literal>, <literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</"
+"literal>, <literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal>, "
+"<literal>Description</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+"Der <literal>generate</literal>-Befehl wurde entworfen, um von einem Cron-"
+"Skript ausführbar zu sein und bildet Indexe, die der angegebenen "
+"Konfigurationsdatei entsprechen. Die Konfigurationssprache stellt eine "
+"flexible Möglichkeit bereit, um anzugeben, welche Indexdateien von welchen "
+"Verzeichnissen gebildet wurden, ebenso wie sie eine einfache Möglichkeit zur "
+"Verwaltung der erforderlichen Einstellungen bereitstellt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+"Der <literal>clean</literal>-Befehl räumt die Datenbanken auf, die von der "
+"angegebenen Konfigurationsdatei benutzt wurden, indem es nicht länger nötige "
+"Datensätze entfernt."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr "Die Generate-Konfiguration"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+"Der <literal>generate</literal>-Befehl benutzt eine Konfigurationsdatei, um "
+"die Archive zu beschreiben, die generiert werden sollen. Es folgt dem "
+"typischen ISC-Konfigurationsformat, wie es in ISC-Werkzeugen wie Bind 8 oder "
+"DHCP gesehen werden kann. &apt-conf; enthält eine Beschreibung der Syntax. "
+"Beachten Sie, dass die generate-Konfiguration abschnittsweise ausgewertet "
+"wird, &apt-conf; aber baumartig ausgewertet wird. Dies hat nur Auswirkungen, "
+"wie die Markierung »scope« behandelt wird."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+"Die generate-Konfiguration hat vier getrennte Abschnitte, jeder ist "
+"unterhalb beschrieben"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr "<literal>Dir</literal>-Abschnitt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+"Der <literal>Dir</literal>-Abschnitt definiert die Vorgabeverzeichnisse, die "
+"zum Orten der benötigten Dateien während des Generierungsprozesses gebraucht "
+"werden. Diese Verzeichnisse werden bestimmte relative Pfade, die in späteren "
+"Abschnitten definiert werden, vorangestellt, um einen vollständigen "
+"absoluten Pfad zu bilden."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+"gibt die Wurzel des FTP-Archivs an. In einer Debian-Standardkonfiguration "
+"ist das das Verzeichnis, das die <filename>ls-LR</filename>- und dist-Knoten "
+"enthält."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr "gibt den Ort der Dateien zum Überschreibenan."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr "gibt den Ort der Zwischenspeicherdateien an."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+"gibt den Ort der Dateilistendateien an, wenn die <literal>FileList</literal> "
+"unterhalb benutzt wird."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr "<literal>Default</literal>-Abschnitt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+"Der <literal>Default</literal>-Abschnitt gibt Vorgabewerte an und "
+"Einstellungen, die den Betrieb des Generators steuern. Andere Abschnitte "
+"können diese Vorgaben mit einer Einstellung pro Abschnitt außer Kraft setzen."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+"setzt das Standardkompressionsschema, das für die Paketindexdateien benutzt "
+"wird. Es ist eine Zeichenkette, die eine durch Leerzeichen getrennte Liste "
+"mit mindestens einem der im Konfigurationsbereich <option>APT::Compressor</"
+"option> eingerichteten Kompressionsprogramme enthält. Die Voreinstellung für "
+"alle Kompressionsschemas ist ». gzip«."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+"setzt die Vorgabeliste von Dateierweiterungen, die Paketdateien sind. "
+"Vorgabe ist ».deb«."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+"Dies ist <literal>Packages::Compress</literal> ähnlich, außer dass es die "
+"Kompression der Quelldateien steuert."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+"setzt die Vorgabeliste von Dateierweiterungen, die Quelldateien sind. "
+"Vorgabe ist ».dsc«."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+"Dies ist <literal>Packages::Compress</literal> ähnlich, außer dass es die "
+"Kompression der Contents-Dteien steuert."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+"Dies ist <literal>Packages::Compress</literal> ähnlich, außer dass es die "
+"Kompression der Translation-en-Hauptdatei steuert."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+"gibt die Anzahl von Kilobyte an, deren Verweis pro Durchlauf entfernt (und "
+"durch Hardlinks ersetzt) werden sollen. Dies wird in Verbindung mit der "
+"abschnittsweisen Einstellung <literal>External-Links</literal> benutzt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+"gibt den Modus für alle erstellten Indexdateien an. Vorgabe ist 0644. Alle "
+"Indexdateien erhalten diese Rechte ohne Beachtung von umask."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+"gesetzt, falls lange Beschreibungen in die <filename>Package</filename>-"
+"Datei eingeschlossen oder in eine <filename>Translation-en</filename>-"
+"Hauptdatei unterteilt werden sollen"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "<literal>TreeDefault</literal>-Abschnitt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+"setzt Vorgaben speziell für <literal>Tree</literal>-Abschnitte. All diese "
+"Variablen sind Platzhaltervariablen und haben die Zeichenketten $(DIST), "
+"$(SECTION) und $(ARCH) durch ihre jeweiligen Werte ersetzt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+"setzt die Anzahl der Kilobyte an Inhaltdateien, die jeden Tag generiert "
+"werden. Die Inhaltdateien werden reihum ersetzt, so dass sie über mehrere "
+"Tage alle neu gebildet werden."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+"steuert die Anzahl der Tage, die eine Inhaltsdatei erlaubt ist ohne Änderung "
+"geprüft zu werden. Wenn die Grenze überschritten ist, wird die mtime der "
+"Inhaltsdatei aktualisiert. Dieser Fall kann auftreten, wenn die Package-"
+"Datei in einer Art geändert wurde, die nicht in einer neuen Inhaltsdatei "
+"resultierte [außer Kraft setzendes Bearbeiten zum Beispiel]. Ein Aufhalten "
+"ist erlaubt, in der Hoffnung dass neue .debs installiert werden, die sowieso "
+"eine neue Datei benötigen. Die Vorgabe ist 10, die Einheiten sind Tage."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+"setzt den Beginn des .deb-Verzeichnisbaums. Vorgabe ist <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+"setzt den Beginn des Quellpaketverzeichnisbaums. Vorgabe ist <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+"setzt die Ausgabe-Packages-Datei. Vorgabe ist <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+"setzt die Ausgabe-Sources-Datei. Vorgabe ist <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+"setzt die Ausgabe der Translation-en-Hauptdatei mit den langen "
+"Beschreibungen falls sie nicht in der Packages-Datei enthalten sein sollen. "
+"Vorgabe ist <filename>$(DIST)/$(SECTION)/i18n/Translation-en</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+"setzt das Pfad-Präfix, das bewirkt, dass ein symbolischer Verweis wie ein "
+"interner anstatt wie ein externer Verweis behandelt wird. Vorgabe ist "
+"<filename>$(DIST)/$(SECTION)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+"setzt die Ausgabe-Contents-Datei. Vorgabe ist <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. Wenn diese Einstellung bewirkt, dass mehrere "
+"Packages-Dateien auf einer einzelnen Inhaltsdatei abgebildet werden (so wie "
+"es Vorgabe ist), dann wird <command>apt-ftparchive</command> diese Dateien "
+"automatisch integrieren."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr "setzt die Kopfdatendatei, um sie der Inhaltsausgabe voranzustellen."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+"setzt die Programmzwischenspeicherdatenbank zur Benutzung in diesem "
+"Abschnitt. Mehrere Abschnitte können sich die gleiche Datenbank teilen."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+"gibt an, dass <command>apt-ftparchive</command> die Liste der Dateien aus "
+"der vorgegebenen Datei liest, anstatt den Verzeichnisbaum zu durchlaufen. "
+"Relativen Dateinamen wird das Archivverzeichnis vorangestellt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+"gibt an, dass <command>apt-ftparchive</command> die Liste der Dateien aus "
+"der vorgegebenen Datei liest, anstatt den Verzeichnisbaum zu durchlaufen. "
+"Relativen Dateinamen wird das Archivverzeichnis vorangestellt. Dies wird "
+"benutzt, wenn Quellindizes verarbeitet werden."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr "<literal>Tree</literal>-Abschnitt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+"Der <literal>Tree</literal>-Abschnitt definiert einen Standard-Debian-"
+"Dateibaum, der aus einem Basisverzeichnis, dann mehreren Abschnitten in "
+"diesem Basisverzeichnis und am Ende, mehreren Architekturen in jedem "
+"Abschnitt besteht. Die genaue benutzte Pfadeinstellung ist durch die "
+"<literal>Directory</literal>-Ersetzungsvariable definiert."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+"Der <literal>Tree</literal>-Abschnitt akzeptiert eine scope-Markierung, die "
+"die <literal>$(DIST)</literal>-Variable setzt und die Wurzel des Baumes "
+"definiert (dem Pfad wird <literal>ArchiveDir</literal> vorangestellt). "
+"Typischerweise ist dies eine Einstellung wie <filename>dists/&debian-stable-"
+"codename;</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+"Alle im <literal>TreeDefault</literal>-Abschnitt definierten Einstellungen "
+"können in einem <literal>Tree</literal>-Abschnitt, sowie drei neue Variablen "
+"benutzt werden."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Abschnitte do\n"
+" for j in Architekturen do\n"
+" Generiere for DIST=Geltungsbereich SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+"Wenn ein <literal>Tree</literal>-Abschnitt bearbeitet wird, führt "
+"<command>apt-ftparchive</command> eine Aktion aus, die folgender ähnelt:"
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+"Dies ist eine durch Leerzeichen getrennte Liste der Abschnitte, die unter "
+"der Distribution erscheint, typischerweise etwas wie <literal>main contrib "
+"non-free</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+"Dies ist eine durch Kommas getrennte Liste aller Architekturen, die unter "
+"dem Suchabschnitt erscheinen. Die besondere Architektur »source« wird "
+"benutzt, um anzuzeigen, dass dieser Verzeichnisbaum über ein Quellarchiv "
+"verfügt. Die Architektur »all« signalisiert, dass architekturspezifische "
+"Dateien wie <filename>Packages</filename> keine Informationen über Pakete "
+"der Architektur <literal>all</literal> enthalten sollten, da sie in einer "
+"dedizierten Datei verfügbar sein werden."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+"setzt die Binärdatei zum Überschreiben. Die Datei zum Überschreiben enthält "
+"Abschnitt, Priorität und Adressinformationen des Betreuers."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+"setzt die Quelldatei zum Überschreiben. Die Quelldatei zum Überschreiben "
+"enthält Abschnittsinformationen."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr "setzt die zusätzliche Binärdatei zum Überschreiben."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr "setzt die zusätzliche Quelldatei zum Überschreiben."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "<literal>BinDirectory</literal>-Abschnitt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+"Der <literal>bindirectory</literal>-Abschnitt definiert einen "
+"Binärverzeichnisbaum ohne spezielle Struktur. Die scope-Markierung gibt den "
+"Ort des Binärverzeichnisses an und die Einstellungen sind denen des "
+"<literal>Tree</literal>-Abschnitts ohne Platzhaltervariablen oder "
+"<literal>Abschnitt</literal><literal>Architektur</literal> ähnlich."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr "setzt die Packages-Dateiausgabe."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+"setzt die Sources-Dateiausgabe. Entweder <literal>Packages</literal> oder "
+"<literal>Sources</literal> ist erforderlich."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr "setzt die Contents-Dateiausgabe (optional)"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr "setzt die Binärdatei zum Überschreiben."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr "setzt die Quelldatei zum Überschreiben."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr "setzt die Zwischenspeicherdatenbank."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr "hängt einen Pfad an alle Ausgabepfade an."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "gibt die Dateilistendatei an."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr "Die Programmdatei zum Überschreiben"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+"Die Binärdatei zum Überschreiben ist vollständig zu &dpkg-scanpackages; "
+"kompatibel. Sie enthält vier durch Leerzeichen getrennte Felder. Das erste "
+"Feld ist der Paketname, das zweite ist die Priorität, zu der das Paket "
+"erzwungen wird, das dritte ist der Abschnitt, zu der das Paket erzwungen "
+"wird und das letzte Feld ist das Betreuerumsetzungsfeld."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "alt [// oldn]* => neu"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "neu"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+"Die allgemeine Form des Betreuerfelds ist: <placeholder type=\"literallayout"
+"\" id=\"0\"/> oder einfach <placeholder type=\"literallayout\" id=\"1\"/>. "
+"Die erste Form erlaubt es, eine durch Doppelschrägstrich getrennte Liste "
+"alter E-Mail-Adressen anzugegeben. Wenn eine davon gefunden wird, wird die "
+"neue für das Betreuerfeld ersetzt. Die zweite Form ersetzt das Betreuerfeld "
+"bedingungslos."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr "Die Quelldatei zum Überschreiben"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+"Die Quelldatei zum Überschreiben ist vollständig kompatibel zu &dpkg-"
+"scansources;. Sie enthält zwei durch Leerzeichen getrennte Felder. Das erste "
+"Feld ist der Quellpaketname, das zweite ist der Abschnitt, dem er zugeordnet "
+"ist."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr "Die zusätzliche Datei zum Überschreiben"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+"Die zusätzliche Datei zum Überschreiben erlaubt jeder beliebigen Markierung "
+"zur Ausgabe hinzugefügt oder darin ersetzt zu werden. Sie hat drei Spalten. "
+"Die erste ist das Paket, die zweite ist die Markierung und der Rest der "
+"Zeile ist der neue Wert."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+"erzeugt die vorgegebene Prüfsumme. Diese Optionen sind standardmäßig "
+"aktiviert. Wenn sie deaktiviert sind, werden die erzeugten Indexdateien nach "
+"Möglichkeit keine Prüfsummenfelder erhalten. Konfigurationselemente: "
+"<literal>APT::FTPArchive::<replaceable>Prüfsumme</replaceable></literal> und "
+"<literal>APT::FTPArchive::<replaceable>Index</replaceable>::"
+"<replaceable>Prüfsumme</replaceable></literal>, wobei "
+"<literal><replaceable>Index</replaceable></literal> <literal>Packages</"
+"literal>, <literal>Sources</literal> oder <literal>Release</literal> sein "
+"kann und <literal><replaceable>Prüfsumme</replaceable></literal> "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"oder <literal>SHA512</literal> sein kann."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"benutzt eine Binärzwischenspeicherdatenbank. Dies hat keine Auswirkung auf "
+"den »generate«-Befehl. Konfigurationselement: <literal>APT::FTPArchive::DB</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"still; erzeugt eine Ausgabe, die für Protokollierung geeignet ist und "
+"Fortschrittsanzeiger weglässt. Mehr »q«s unterdrücken mehr Ausgaben, bis zu "
+"einem Maximum von 2. Sie können außerdem <option>-q=#</option> benutzen, um "
+"die Stillestufe zu setzen, was die Konfigurationsdatei außer Kraft setzt. "
+"Konfigurationselement: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"entfernt Verweise. Wenn die <literal>External-Links</literal>-Einstellung "
+"benutzt wird, schaltet diese Option tatsächlich das Entfernen von Verweisen "
+"zu Dateien ein. Standardmäßig ist es an und kann mit <option>--no-delink</"
+"option> ausgeschaltet werden. Konfigurationselement: <literal>APT::"
+"FTPArchive::DeLinkAct</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+"führt Inhaltsgenerierung durch. Wenn diese Option gesetzt ist und "
+"Paketindizes mit einer Zwischenspeicherdatenbank generiert werden, dann wird "
+"die Dateiliste auch extrahiert und für spätere Benutzung in der Datenbank "
+"gespeichert. Wenn der »generate«-Befehl benutzt wird, erlaubt diese Option "
+"außerdem die Erzeugung beliebiger Contents-Dateien. Die Vorgabe ist an. "
+"Konfigurationselement: <literal>APT::FTPArchive::Contents</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"wählt die Quelldatei zum außer Kraft setzen, die mit dem <literal>sources</"
+"literal>-Befehl benutzt wird. Konfigurationselement: <literal>APT::"
+"FTPArchive::SourceOverride</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"macht die Zwischenspeicherdatenbank nur lesbar. Konfigurationselement: "
+"<literal>APT::FTPArchive::ReadOnlyDB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"akzeptiert in den Befehlen <literal>packages</literal> und "
+"<literal>contents</literal> nur Paketdateien, die auf <literal>*_arch.deb</"
+"literal> oder <literal>*_all.deb</literal> passen, anstatt aller "
+"Paketdateien im angegebenen Pfad. Konfigurationselement: <literal>APT::"
+"FTPArchive::Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+"&apt-ftparchive; speichert so viele Metadaten wie möglich in einer "
+"Zwischenspeicherdatenbank. Falls Pakete neu kompiliert und/oder neu mit der "
+"gleichen Version veröffentlicht werden, führt dies zu Problemen, da die nun "
+"veralteten zwischengespeicherten Metadaten, wie Größe und Prüfsumme, benutzt "
+"werden. Mit dieser eingeschalteten Option wird dies nicht weiter vorkommen, "
+"da geprüft wird, ob die Datei geändert wurde. Beachten Sie, dass diese "
+"Option standardmäßig auf »<literal>false</literal>« gesetzt ist, da es nicht "
+"empfohlen wird, mehrere Versionen/Builds eines Pakets mit der gleichen "
+"Versionsnummer hochzuladen, so dass theoretisch niemand dieses Probleme "
+"haben sollte und all diese zusätzlichen Prüfungen daher nutzlos sind."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+"Diese Konfigurationsoption ist standardmäßig »<literal>true</literal>« und "
+"sollte nur auf »<literal>false</literal>« gesetzt werden, wenn das mit &apt-"
+"ftparchive; generierte Archiv außerdem <filename>Translation</filename>-"
+"Dateien bereitstellt. Beachten Sie, dass die Hauptdatei "
+"<filename>Translation-en</filename> nur durch den Befehl »generate« erstellt "
+"werden kann."
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> packages <replaceable>Verzeichnis</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Um eine gepackte Paketdatei für ein Verzeichnis zu erstellen, das "
+"Binärpakete (.deb) enthält: <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> gibt bei normalen Aktionen 0 zurück, "
+"dezimal 100 bei Fehlern."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+msgid "Login configuration file for APT sources and proxies"
+msgstr "Anmeldungskonfigurationsdatei für APT-Quellen und Proxys"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+"Auf APT-Konfigurationsdateien wie &sources-list; oder &apt-conf; muss jeder "
+"mittels APT-Werkzeugen zugreifen können, um auf alle paketbezogenen "
+"Informationen, wie die in einem Depot verfügbaren Pakete, Zugriff zu haben. "
+"Anmeldeinformationen, die zur Verbindung mit einem Proxy oder zum "
+"Herunterladen von Daten aus einem Depot erforderlich sind, sollten im "
+"Gegensatz dazu nicht für jeden zugänglich sein und daher nicht in einer "
+"Datei, auf die jedermann Zugriffsrechte hat, abgelegt werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "The APT auth.conf file <filename>/etc/apt/auth.conf</filename> can be "
+#| "used to store login information in a netrc-like format with restrictive "
+#| "file permissions."
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"Die APT-Auth.conf-Datei <filename>/etc/apt/auth.conf</filename> kann benutzt "
+"werden, um Anmeldeinformationen in einem Netrc-ähnlichen Format mit "
+"einschränkenden Dateizugriffsrechten gespeichert."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr "Netrc-ähnliches Format"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+"Das hier definierte Format ist dem Format der von "
+"<citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> und ähnlichen "
+"Programmen, die mit Servern interagieren, benutzten Datei <filename>~/."
+"netrc</filename> ähnlich. Es ist eine einfaches kürzelbasiertes Format, bei "
+"dem die folgenden Kürzel erkannt werden; unbekannte Kürzel werden ignoriert. "
+"Kürzel können durch Leerzeichen, Tabulatoren oder Zeilenumbrüche voneinander "
+"getrennt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+"<literal>machine</literal> <replaceable>Rechnername</replaceable>[:"
+"<replaceable>Port</replaceable>][/<replaceable>Pfad</replaceable>]"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+"Einträge werden nachgeschlagen, indem das Kürzel <emphasis><literal>machine</"
+"literal></emphasis> gesucht wird, das dem Rechnernamen des URIs entspricht, "
+"für das APT Anmeldeinformationen benötigt. Das Netrc-Format kann durch "
+"Angabe einer Portnummer erweitert werden. Falls kein Port angegeben wurde, "
+"passt das Kürzel zu allen Ports. Vergleichbar ist der Pfad optional und nur "
+"benötigt und nützlich, falls mehrere Depots mit unterschiedlichen "
+"Anmeldeinformationen auf demselben Server liegen. Ein Maschinenkürzel mit "
+"einem Pfad passt, falls der Pfad in dem URI mit dem im Kürzel angegebenen "
+"Pfad beginnt. Sobald ein Treffer erzielt wurde, werden die nachfolgenden "
+"Kürzel verarbeitet. Dies endet, wenn das Dateiende erreicht wurde oder ein "
+"anderes <emphasis><literal>machine</literal></emphasis>-Kürzel auftritt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "<literal>login</literal> <replaceable>Name</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr "der zu verwendende Benutzername"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "<literal>password</literal> <replaceable>Zeichenkette</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr "das zu verwendende Passwort"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Example"
+msgstr "Beispiel"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb http://example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr "machine example.org login apt password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+"Anmeldeinformationen für einen Benutzer namens <literal>apt</literal> mit "
+"dem Passwort <literal>debian</literal> für den &sources-list;-Eintrag "
+"<placeholder type=\"literallayout\" id=\"0\"/> können direkt im Eintrag "
+"bereitgestellt werden: <placeholder type=\"literallayout\" id=\"1\"/>. "
+"Alternativ kann ein Eintrag wie der folgende in der Datei »auth.conf« "
+"verwendet werden: <placeholder type=\"literallayout\" id=\"2\"/>. Oder "
+"alternativ in einer einzelnen Zeile: <placeholder type=\"literallayout\" id="
+"\"3\"/>. Falls Sie dies präziser mögen, werden all diese Zeilen auf den "
+"Beispieleintrag angewendet: <placeholder type=\"literallayout\" id=\"4\"/>. "
+"Andererseits wird keine der folgenden Zeilen angewendet: <placeholder type="
+"\"literallayout\" id=\"5\"/>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr "Hinweise"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+"Rudimentäre Unterstützung für diese Funktionalität ist seit Version 0.7.25 "
+"vorhanden, allerdings war sie jahrelang nicht dokumentiert. Die "
+"Dokumentation wurde in Version 1.5 hinzugefügt, außerdem wurde die "
+"Implementierung geringfügig verändert. Um eine maximale "
+"Rückwärtskompatibilität zu gewährleisten, sollten Sie mehrere "
+"<literal>machine</literal>-Kürzel mit demselben Rechnernamen vermeiden, "
+"falls Sie aber mehrere benötigen, sollte für alle ein Pfad im "
+"<literal>machine</literal>-Kürzel angegeben werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"Anmeldeinformationen für APT-Quellen und -Proxys in einem Netrc-ähnlichen "
+"Format. Konfigurationselement: <literal>Dir::Etc::netrc</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "<filename>/etc/apt/auth.conf</filename>"
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Login information for APT sources and proxies in a netrc-like format. "
+#| "Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"Anmeldeinformationen für APT-Quellen und -Proxys in einem Netrc-ähnlichen "
+"Format. Konfigurationselement: <literal>Dir::Etc::netrc</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf;, &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+"APT-Transportmethode zum Herunterladen über das Hypertext Transfer Protocol "
+"(HTTP)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+"Diese APT-Transportmethode erlaubt die Verwendung von Depots, auf die über "
+"das Hypertext Transfer Protocol (HTTP) zugegriffen wird. Es ist "
+"standardmäßig verfügbar und wahrscheinlich das meistverwendete aller "
+"Transporte. Beachten Sie, dass eine Transportmethode niemals direkt durch "
+"einen Benutzer aufgerufen wird, sondern von APT-Werkzeugen basierend auf der "
+"Konfiguration des Benutzers."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+"HTTP ist ein unverschlüsseltes Transportprotokoll. Das bedeutet, dass die "
+"ganze Kommunikation mit einem fernen Server (oder Proxy) durch einen "
+"Angreifer mit ausreichenden Fähigkeiten beobachtet werden kann, der "
+"landläufig als »Mann in der Mitte« (MITM) bezeichnet wird. Ein derartiger "
+"Angreifer kann die Kommunikation jedoch <emphasis>nicht</emphasis> ändern, "
+"um die Sicherheit Ihres System zu kompromittieren, da APTs "
+"Datensicherheitsmodell unabhängig von der gewählten Transportmethode ist. "
+"Einzelheiten werden in &apt-secure; erklärt. Einen Überblick über verfügbare "
+"Transportmethoden gibt es in &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+"Verschiedene Optionen können in einer &apt-conf;-Datei gesetzt werden, um "
+"sein Verhalten zu ändern. Dies reicht von einer Proxy-Konfiguration bis hin "
+"zu einer Behelfslösung für spezielle Serverbeschränkungen."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Proxy Configuration"
+msgstr "Proxy-Konfiguration"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+"Die Umgebungsvariable <envar>http_proxy</envar> wird zur systemweiten "
+"Konfiguration unterstützt. APT-spezifische Proxys können mittels der Option "
+"<literal>Acquire::http::Proxy</literal> konfiguriert werden. Proxys, die nur "
+"für bestimmte Rechner benutzt werden, können über <literal>Acquire::http::"
+"Proxy::<replaceable>Rechner</replaceable></literal> angegeben werden. Eine "
+"granularere Steuerung kann über die nachfolgend genauer beschriebene Proxy-"
+"Autoerkennung erreicht werden. Alle diese Optionen verwenden das URI-Format "
+"<literal><replaceable>Schema</replaceable>://[[<replaceable>Benutzer</"
+"replaceable>][:<replaceable>Passwort</replaceable>]@]<replaceable>Rechner</"
+"replaceable>[:<replaceable>Port</replaceable>]/</literal>. Untersützte URI-"
+"Schemen sind <literal>socks5h</literal> (SOCKS5 mit ferner DNS-Auflösung), "
+"<literal>http</literal> und <literal>https</literal>. "
+"Authentifizierungseinzelheiten können über &apt-authconf; bereitgestellt "
+"werden, statt sie direkt in den URI einzufügen."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+"Die unterschiedlichen APT-Konfigurationsoptionen unterstützen den Sonderwert "
+"<literal>DIRECT</literal>, der bedeutet, dass kein Proxy benutzt werden "
+"soll. Außerdem wird die Umgebungsvariable <envar>no_proxy</envar> für "
+"denselben Zweck unterstützt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+"Desweiteren werden drei Einstellungen zur Steuerung des Zwischenspeichers "
+"mit HTTP/1.1-konformen Proxy-Zwischenspeichern bereitgestellt: "
+"<literal>Acquire::http::No-Cache</literal> teilt dem Proxy mit, dass er "
+"unter keinen Umständen seine zwischengespeicherten Antworten benutzen soll, "
+"<literal>Acquire::http::Max-Age</literal> setzt das maximal erlaubte Alter "
+"einer Indexdatei im Zwischenspeicher des Proxys (in Sekunden). "
+"<literal>Acquire::http::No-Store</literal> gibt an, dass der Proxy die "
+"angefragten Archivdateien nicht in seinem Zwischenspeicher ablegen soll. Das "
+"kann verwandt werden, um zu verhindern, dass der Proxy seinen "
+"Zwischenspeicher mit (großen) .deb-Dateien verunreinigt."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Automatic Proxy Configuration"
+msgstr "Automatische Proxy-Konfiguration"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> kann benutzt werden, um "
+"einen externen Befehl zum Auffinden des HTTP-Proxys anzugeben, der benutzt "
+"werden soll. Der erste und einzige Parameter ist ein URI, der den Rechner "
+"bezeichnet, der kontaktiert werden soll, um eine rechnerspezifische "
+"Konfiguration zu ermöglichen. APT erwartet dass der Befehl als Ausgabe auf "
+"der Standardausgabe den Proxy als einzelne Zeile im vorher angegebenen URI-"
+"Format oder das Wort <literal>DIRECT</literal> ausgibt, falls kein Proxy "
+"benutzt werden soll. Fehlt die Ausgabe, zeigt dies an, dass die allgemeinen "
+"Proxy-Einstellungen benutzt werden sollen."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+"Beachten Sie, dass die automatische Erkennung nicht für einen Rechner "
+"benutzt wird, falls bereits eine rechnerspezifische Proxy-Konfiguration per "
+"<literal>Acquire::http::Proxy::<replaceable>Rechner</replaceable></literal> "
+"gesetzt wurde."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+"Beispielimplementierungen finden Sie in den Paketen &squid-deb-proxy-client; "
+"und &auto-apt-proxy;."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+"Diese Option hat Vorrang vor dem veralteten Optionsnamen <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Connection Configuration"
+msgstr "Verbindungskonfiguration"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+"Die Option <literal>Acquire::http::Timeout</literal> stellt den Zeitnehmer, "
+"der von der Methode benutzt wird. Dieser Wert wird auf die Verbindungs- "
+"sowie die Datenzeitüberschreitungen angewendet."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+"Die benutzte Bandbreite kann durch <literal>Acquire::http::Dl-Limit</"
+"literal> eingeschränkt werden, was Ganzzahlwerte in Kilobyte pro Sekunde "
+"akzeptiert. Der Vorgabewert ist 0, was die Beschränkung ausschaltet und "
+"versucht, sämtliche verfügbare Bandbreite zu benutzen. Beachten Sie, dass "
+"diese Optionen implizit das Herunterladen von mehreren Servern zur gleichen "
+"Zeit deaktiviert."
+
+# https://de.wikipedia.org/wiki/HTTP-Pipelining
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+"Die Einstellung <literal>Acquire::http::Pipeline-Depth</literal> kann "
+"verwandt werden, um HTTP-Pipelining zu aktivieren (RFC 2616 Abschnitt "
+"8.1.2.2), was z.B. bei Verbindungen mit hoher Latenz vorteilhaft sein kann. "
+"Sie gibt an, wie viele Anfragen in eine Leitung gesandt werden. APT "
+"versucht, zur Laufzeit Webserver und Proxys aufzuspüren, die sich falsch "
+"verhalten und eine Behelfslösung zu finden. Falls Sie jedoch wissen, dass "
+"sich Ihrer nicht konform zur HTTP/1.1-Spezifikation verhält, kann das "
+"Weiterleiten durch Setzen des Wertes auf 0 deaktiviert werden. Standardmäßig "
+"ist es mit dem Wert 10 aktiviert."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+"<literal>Acquire::http::AllowRedirect</literal> steuert, ob APT Umleitungen "
+"folgen wird, was standardmäßig aktiviert ist."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+"<literal>Acquire::http::User-Agent</literal> kann benutzt werden, um einen "
+"anderen User-Agent für die HTTP-Download-Methode zu setzten, da einige "
+"Proxys den Clients nur dann Zugriff gewähren, wenn der Client einen "
+"bekannten Kennzeichner verwendet."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+"<literal>Acquire::http::SendAccept</literal> ist standardmäßig aktiviert und "
+"sendet für Abfragen ohne Dateinamenserweiterungen ein <literal>Accept: text/"
+"*</literal>-Kopfzeilenfeld an den Server, um zu verhindern, dass der Server "
+"versucht, Inhalt auszuhandeln."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+"APT-Transportmethode zum Herunterladen mittels HTTP-Sicherheitsprotokoll "
+"(HTTPS)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+"Diese APT-Transportmethode ermöglicht die Verwendung von Depots, auf die "
+"mittels des HTTP-Sicherheitsprotokolls (HTTPS), auch unter HTTP über TLS "
+"bekannt, zugegriffen werden kann. Es ist standardmäßig seit APT 1.5 "
+"verfügbar und war zuvor im Paket <package>apttransport-https</package> "
+"verfügbar. Beachten Sie, dass eine Transportmethode niemals direkt durch "
+"einen Benutzer aufgerufen wird, jedoch von APT-Werkzeugen basierend auf der "
+"Konfiguration des Benutzers."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+"HTTP selbst ist ein unverschlüsseltes Transportprotokoll (vergleichen Sie "
+"&apt-transport-http;), das, wie es das angehängte S angibt, in eine "
+"verschlüsselte Ebene, bekannt als Transport Layer Security (TLS), eingepackt "
+"wird, um eine Ende-zu-Ende-Verschlüsselung bereitzustellen. Ein Angreifer "
+"mit ausreichenden Fähigkeiten kann die Kommunikationspartner immer noch "
+"beobachten und eine tiefere Analyse der verschlüsselten Kommunikation könnte "
+"immer noch wichtige Einzelheiten offenbaren. Einen Überblick über "
+"alternative Transportmethoden finden Sie in der &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+"Das HTTPS-Protokoll basiert auf dem HTTP-Protokoll, daher sind alle von &apt-"
+"transport-http; unterstützten Optionen auch mittels <literal>Acquire::https</"
+"literal> verfügbar und haben dieselben Voreinstellungen, wie die, die für "
+"<literal>Acquire::http</literal> angegeben wurden. Diese Handbuchseite wird "
+"nur die Optionen beschreiben, die <emphasis>einzig für HTTPS</emphasis> "
+"gelten."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr "Serveranmeldedaten"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+"Standardmäßig werden alle Zertifikate, denen das System vertraut (siehe das "
+"Paket <package>ca-certificates</package>), für die Prüfung des "
+"Serverzertifikats benutzt. Eine alternative Zertifizierungstelle (CA) kann "
+"mit der Option <literal>Acquire::https::CAInfo</literal> und der zugehörigen "
+"rechnerspezifischen Option <literal>Acquire::https::CAInfo::"
+"<replaceable>Rechner</replaceable></literal> konfiguriert werden. Die Option "
+"CAInfo gibt eine Datei an, die aus CA-Zertifikaten (im PEM-Format) besteht, "
+"die zur Erstellung der Kette aneinandergereiht wurde, die APT zur Prüfung "
+"des Pfads bis zur Wurzel (dem selbstsignierten Zertifikat) benutzen soll. "
+"Falls der ferne Server während des Austauschs die ganze Kette bereitstellt, "
+"muss die Datei nur das Wurzelzertifikat enthalten. Andernfalls wird die "
+"ganze Kette benötigt. Falls Sie mehrere Zertifizierungstellen unterstützen "
+"müssen, besteht die einzige Möglichkeit darin, alles aneinander zu hängen."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+"Eine benutzerdefinierte Zertifikatwiderrufsliste (CRL) kann mit den Optionen "
+"<literal>Acquire::https::CRLFile</literal> beziehungsweise <literal>Acquire::"
+"https::CRLFile::<replaceable>Rechner</replaceable></literal> konfiguriert "
+"werden. Wie bei der vorherigen Option muss eine Datei im PEM-Format "
+"angegeben werden."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr "Sicherheit deaktivieren"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+"Wenn bei der Authentifizierung des Servers die Prüfung des Zertifikats aus "
+"irgendeinem Grund fehlschlägt (abgelaufen, zurückgezogen, Mann in der Mitte, "
+"usw.) scheitert der Verbindungsaufbau. Dies ist offenkundig das, was Sie auf "
+"jeden Fall wollen und der Vorgabewert (»true«) der Option <literal>Acquire::"
+"https::Verify-Peer</literal> und was ihre rechnerspezifische Variante "
+"bereitstellt. Falls Sie <emphasis>genau</emphasis> wissen, was Sie tun, "
+"ermöglicht Ihnen das Setzen dieser Variable auf »<literal>false</literal>«, "
+"die Prüfung des Partnerzertifikats zu überspringen und den Austausch "
+"erfolgreich durchzuführen. Nochmals – diese Option dient nur der Fehlersuche "
+"und zu Testzwecken, da sie alle durch die Verwendung von HTTPS "
+"bereitgestellte Sicherheit entfernt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+"Ebenso kann die Option <literal>Acquire::https::Verify-Host</literal> und "
+"ihre rechnerspezifischen Variante zum Deaktivieren einer "
+"Sicherheitsfunktionalität verwendet werden: Das vom Server bereitgestellte "
+"Zertifikat enthält die Identität des Servers, der dem DNS-Namen entsprechen "
+"sollte, der zum Zugriff darauf benutzt wird. Standardmäßig wird, wie von RFC "
+"2818 verlangt, der Name des Spiegelservers mit der im Zertifikat gefundenen "
+"Identität geprüft. Dieses Standardverhalten ist sicher und sollte nicht "
+"geändert werden, falls Sie jedoch wissen, dass der Server, den Sie "
+"verwenden, einen DNS-Namen hat, der nicht der Identität in seinem Zertifikat "
+"entspricht, können Sie die Option auf »<literal>false</literal>« setzen, "
+"wodurch das Vergleichen verhindert wird."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr "Client-Authentifizierung"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+"Abseits der unterstützten passwortbasierten Authentifizierung (siehe &apt-"
+"authconf;) unterstützt HTTPS auch die Authentifizierung auf Basis von Client-"
+"Zertifikaten mittels <literal>Acquire::https::SSLCert</literal> und "
+"<literal>Acquire::https::SSLKey</literal>. Sie sollten jeweils auf den "
+"Dateinamen des X.509-Client-Zertifikats und des zugehörigen "
+"(unverschlüsselten) privaten Schlüssels gesetzt werden, beide im PEM-Format. "
+"In der Praxis wird die Verwendung der rechnerspezifischen Varianten der "
+"beiden Optionen wärmstens empfohlen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"Mein APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/Pfad/zu/ca/certs.pem\";\n"
+"\tCRLFile \"/Pfad/zu/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/Pfad/zu/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/Pfad/zu/client/key.pem\"\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr "APT-Transportmethode für stärker automatisierte Spiegelserverauswahl"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+"Diese APT-Transportmethode implementiert kein Protokoll, um auf lokale oder "
+"ferne Depots selbst zuzugreifen, beschafft jedoch eine Spiegelserverliste "
+"und leitet alle Anfragen an den/die Spiegel, der/die aus der Liste "
+"herausgegriffen wurde(n). Der Zugriff erfolgt über andere "
+"Transportprotokolle wie &apt-transport-http;. Die Grundfunktionalität ist "
+"seit APT 0.7.24 verfügbar, war jedoch bis APT 1.6 nicht dokumentiert. APT "
+"1.6 enthält eine komplette Neuentwicklung der Transportmethode und der "
+"unterstützten Funktionalitäten. Beachten Sie, dass eine Transportmethode "
+"niemals durch einen Benutzer direkt aufgerufen wird, jedoch von APT-"
+"Werkzeugen basierend auf der Konfiguration des Benutzers."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+"Falls das Beschaffen einer Datei mittels eines Spiegelservers fehlschlägt, "
+"stellt die Methode sicher, dass automatisch ein anderer möglicher "
+"Spiegelserver der Liste ausprobiert wird, entweder bis die Datei geholt "
+"wurde oder bis kein Spiegelserver auf der Liste mehr übrig ist. Damit werden "
+"transparent Serverausfallzeiten und ähnliche Probleme gehandhabt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+"Die Konsequenzen für die Sicherheit aufgrund der Transportmethode basieren "
+"auf Sicherheitserwägungen, die mit der Transportmethode verbunden sind, die "
+"zum Holen der Spiegelserverliste verwendet wird, und welche "
+"Transportmethoden beim Zugriff auf den/die ausgewählten Spiegelserver durch "
+"die Transportmethode beteiligt sind."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+"Diese Transportmethode hat derzeit keine Konfigurationsoptionen. Die Auswahl "
+"des Spiegelservers basiert ganz auf den angebotenene Spiegelservern auf der "
+"Spiegelserverliste und den Dateien, die APT holen möchte."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr "Spiegelserverlistenformat"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+"Eine Spiegelserverliste enthält mindestens eine Zeile. Jede Zeile gibt einen "
+"URI für einen Spiegelserver an. Leere Zeilen und die, die mit einem "
+"Rautezeichen (<literal>#</literal>) beginnen, werden ignoriert. Ein URI "
+"beginnt immer mit einem URI-Schema, das angibt, welche Transportmethode für "
+"diesen Spiegelserver benutzt wird. Falls der URI beispielsweise mit "
+"<literal>http:</literal> anfängt, ist die zuständige Transportmethode &apt-"
+"transport-http;, was spezielle Anforderungen an das Format des verbleibenden "
+"Teils des URI stellen kann."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+"Metadaten über einen Spiegelserver können in derselben Zeile angegeben "
+"werden, vom URI durch einen Tabulator getrennt. Mehrere Elemente der "
+"Metadaten können ihrerseits durch Leerzeichen oder Tabulatoren getrennt "
+"werden. (Dies ist eine fortschrittliche Funktionalität, die erst seit APT "
+"1.6 verfügbar ist. Ältere APT-Versionen scheitern bei der Auswertung von "
+"Spiegelserverlisten, die diese Funktionalität verwenden.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+"Seit APT 1.6 wird auch die Verwendung komprimierter Spiegelserverlisten "
+"unterstützt. Beachten Sie, dass der Dateiname der Spiegelserverliste den "
+"verwendeten Komprimierungsalgorithmus angeben muss; es wird keine "
+"automatische Bestimmung anhand des Dateiinhalts durchgeführt."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr "Spiegelserverauswahl anhand von Metadaten"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+"Wie im Format angegeben, können an einen Spiegelserver zusätzliche Metadaten "
+"angehängt werden, um zu verhindern, dass ein Spiegelserver ausgewählt wird, "
+"um eine Datei zu beschaffen, die diesen Metadaten nicht entspricht. Auf "
+"diese Weise kann die Spiegelserverliste z.B. Teilspiegelserver enthalten, "
+"die nur bestimmte Architekturen bereitstellen, und APT wird für Dateien, die "
+"eine nicht aufgeführte Architektur benötigen, automatisch einen anderen "
+"Spiegelserver auswählen. Unterstützt werden Beschränkungen für die "
+"Architektur (<literal>arch</literal>), den Codenamen der Veröffentlichung "
+"(<literal>codename</literal>), Bestandteil des Depots, in dem sich die Datei "
+"befindet (<literal>component</literal>), die zur Datei passende Sprache "
+"(<literal>lang</literal>), Suite-Name der Veröffentlichung (<literal>suite</"
+"literal>) und Typ der Datei (<literal>type</literal>)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr "Reihenfolge der Ersatzspiegel"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+"Falls für einen Spiegel keine Priorität über den Metadatenschlüssel "
+"<literal>priority</literal> angegeben wurde, ist die Reihenfolge, in der die "
+"Spiegelserver ausgewählt werden, zufällig. Falls eine bestimmte "
+"Zusammenstellung von Spiegelservern zuerst vor anderen Zusammenstellungen "
+"ausprobiert werden soll, kann die Priorität explizit gesetzt werden. Die "
+"Spiegelserver mit der niedrigsten Nummer werden zuerst ausprobiert. "
+"Spiegelserver, die keine explizit gesetzte Priorität haben, werden "
+"standardmäßig auf die höchstmögliche Nummer gesetzt und daher zuletzt "
+"ausprobiert. Die Auswahl zwischen Spiegelservern mit derselben Priorität "
+"erfolgt wiederum zufällig."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr "Erlaubte Transportmethoden in einer Spiegelserverliste"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+"Die Verfügbarkeit und Auswahl von Transportmethoden in einer "
+"Spiegelserverliste wird durch die Zugriffsart von APT auf die "
+"Spiegelserverliste beschränkt. Falls eine lokale Transportmethode wie "
+"<literal>file</literal> oder <literal>copy</literal> benutzt wird, kann die "
+"Spiegelserverliste auch lokale Ressourcen enthalten, während eine "
+"Spiegelserverliste, auf die per <literal>http</literal> zugegriffen wird, "
+"dies nicht kann. Eine Spiegelserverliste kann nicht zusätzlich eine weitere "
+"Spiegelserverliste oder andere verpackte Transportmethoden (wie <package>apt-"
+"transport-tor</package>) enthalten. Sie finden in der Dokumentation dieser "
+"Transportmethoden, wie sie mit der Spiegelservermethode benutzt werden."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+"Beachten Sie, dass APT-Versionen vor 1.6 keine andere Transportmethode als "
+"<literal>http</literal> unterstützten."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr "Einfaches Beispiel"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+"Eine einfache Beispielspiegelserverliste, die von allen APT-Versionen mit "
+"einer Spiegelservermethode (>= 0.7.24) unterstützt wird, in der der Client "
+"einen von drei Spiegelservern aussuchen kann:"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+"Angenommen, eine Datei mit diesem Inhalt wäre als <filename>/etc/apt/"
+"mirrorlist.txt</filename> auf Ihrem Rechner gespeichert. Sie kann (seit APT "
+"1.6) wie folgt in &sources-list; benutzt werden:"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+"Alle Versionen der Spiegelservermethode unterstützen eine "
+"Spiegelserverliste, auf die mittels HTTP zugegriffen werden kann. Wird davon "
+"ausgegangen, dass sie unter <literal>http://apt.example.org/mirror.lst</"
+"literal> verfügbar ist, kann obiger Sources.list-Eintrag kann stattdessen "
+"auch wie folgt geschrieben werden:"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+"Beachten Sie, das seit APT 1.6 die Verwendung von <literal>mirror+http</"
+"literal> der Einheitlichkeit wegen <literal>mirror</literal> vorgezogen "
+"werden sollte. Die Funktionalität ist dieselbe."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr "Beispiel mit verbesserter Spiegelserverauswahl anhand von Metadaten"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+"Wie in der Formatdefinition erklärt, unterstützen dies APT-Versionen vor 1.6 "
+"nicht und das Auswerten der Spiegelserverliste wird scheitern. Die "
+"Beispielspiegelserverliste ist absichtlich komplex, um einige Aspekte der "
+"Auswahl zu zeigen. Die folgende Einstellung wird angenommen: Der erste "
+"Spiegelserver ist ein lokaler Spiegelserver, auf den mit der File-Methode "
+"zugegriffen wird, aber möglicherweise unvollständig. Der zweite "
+"Spiegelserver hat eine gute Verbindung, ist aber ein Teilspiegelserver in "
+"sofern, dass er nur Dateien der Architekturen <literal>amd64</literal> und "
+"<literal>all</literal> enthält. Die verbleibenden Spiegelserver sind "
+"Durchschnittsserver, die nur kontaktiert werden sollen, wenn die vorherigen "
+"nicht funktionieren."
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+"In dieser Einstellung mit dieser Spiegelserverliste wird der erste "
+"Spiegelserver benutzt, um alle Indexdateien herunterzuladen, unter der "
+"Annahme, dass auf die Spiegelserverliste selbst über eine lokale "
+"Transportmethode wie <literal>file</literal> zugegriffen wird. Falls dies "
+"nicht so ist, auf den Spiegelserver aus einem anderen Grund nicht "
+"zugegriffen werden kann oder er die angeforderte Datei nicht enthält, wird "
+"ein anderer Spiegelserver benutzt, um die Datei zu beschaffen, was vom Typ "
+"der Datei abhängt: Eine Indexdatei wird durch den letzten Spiegelserver auf "
+"der Liste bereitgestellt, während ein Paket der Architektur <literal>amd64</"
+"literal> durch den zweiten und z.B. der Architektur <literal>i386</literal> "
+"durch einen der letzten drei."
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "de"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "APT-Benutzerhandbuch"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr "Version &apt-product-version;"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr ""
+"Dieses Dokument stellt eine Übersicht bereit, wie das APT-"
+"Paketverwaltungsprogramm benutzt wird."
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr "Lizenzhinweis"
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"»APT« und dieses Dokument sind freie Software. Sie können sie unter den "
+"Bedingungen der GNU General Public License, wie sie von der Free Software "
+"Foundation veröffentlicht wird; entweder Version 2 der Lizenz oder "
+"(optional) jeder neueren Version weitergeben und/oder verändern."
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"Siehe für weitere Details auf Debian-Systemen die Datei /usr/share/common-"
+"licenses/GPL, die die vollständige Lizenz enthält."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "Allgemein"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"Das Paket APT enthält derzeit zwei Abschnitte, die APT-<command>dselect</"
+"command>-Methode und die Benutzerschnittstelle <command>apt-get</command> "
+"für die Befehlszeile. Beide stellen eine Möglichkeit bereit, Pakete zu "
+"installieren, zu entfernen, sowie neue Pakete aus dem Internet "
+"herunterzuladen."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "Anatomie des Paketsystems"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"Das Debian-Paketierungssystem besitzt eine große Anzahl von Informationen, "
+"die mit jedem Paket verbunden sind, um zu helfen sicherzustellen, dass es "
+"ordentlich und leicht in das System integriert wird. Das bekannteste seiner "
+"Funktionen ist das Abhängigkeitssystem."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"Das Abhängigkeitssystem erlaubt individuellen Programmen, Gebrauch von "
+"gemeinsam im System benutzten Elementen, wie Bibliotheken, zu machen. Es "
+"vereinfacht, selten benutze Teile eines Programms in separaten Paketen zu "
+"platzieren, um die Zahl von Dingen zu verringern, die der "
+"Durchschnittsanwender installieren sollte. Außerdem erlaubt es die Auswahl "
+"von E-Mail-Transport-Programmen, X-Servern und so weiter."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"Der erste Schritt zum Verständnis des Abhängigkeitssystems besteht darin, "
+"das Konzept einer einfachen Abhängigkeit zu begreifen. Die Bedeutung einer "
+"einfachen Abhängigkeit besteht darin, dass ein Paket ein anderes Paket "
+"benötigt, das zu gleichen Zeit installiert sein muss, um ordentlich zu "
+"funktionieren."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"Mailcrypt ist zum Beispiel eine Emacs-Erweiterung, die hilft, E-Mails mit "
+"GPG zu verschlüsseln. Ohne installiertes GPG ist Mailcrypt unbrauchbar, "
+"deshalb hat Mailcrypt eine einfache Abhängigkeit von GPG. Da es außerdem "
+"eine Emacs-Erweiterung ist, hat es ebenfalls eine einfache Abhängigkeit von "
+"Emacs. Ohne Emacs ist es komplett unbenutzbar."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"Die andere wichtige Abhängigkeit, die es zu verstehen gilt, ist eine in "
+"Konflikt stehende Abhängigkeit. Das bedeutet, dass das Paket, wenn es mit "
+"einem anderen Paket installiert ist, nicht funktioniert und möglicherweise "
+"extrem schädlich für das System sein könnte. Stellen Sie sich als Beispiel "
+"einen E-Mail-Transport-Programmen wie Sendmail, Exim oder QMail vor. Es ist "
+"nicht möglich, zwei E-Mail-Transport-Programmen installiert zu haben, da "
+"beide im Netzwerk auf zu empfangende E-Mails warten. Der Versuch, zwei zu "
+"installieren, würde das System ernsthaft beschädigen, weshalb alle E-Mail-"
+"Transport-Programmen in Konflikt stehende Abhängigkeiten mit allen anderen E-"
+"Mail-Transport-Programmen haben."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"Als zusätzliche Komplikation besteht die Möglichkeit, dass ein Paket "
+"vortäuscht, ein anderes Paket zu sein. Bedenken Sie, dass Exim und Sendmail "
+"in vieler Hinsicht identisch sind – sie liefern beide E-Mails aus und "
+"verstehen eine gemeinsame Schnittstelle. Daher hat das Paketsystem die "
+"Möglichkeit, beide als E-Mail-Transport-Programmen zu deklarieren. Deshalb "
+"deklarieren Exim und Sendmail, dass sie einen E-Mail-Transport-Programmen "
+"bereitstellen und andere Pakete, die einen E-Mail-Transport-Programmen "
+"benötigen, dass sie von einem E-Mail-Transport-Programmen abhängen. Die kann "
+"zu großer Verwirrung führen, wenn manuell versucht wird, Pakete zu "
+"reparieren."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"Zu jedem Zeitpunkt könnte eine einzelne Abhängigkeit von Paketen erfüllt "
+"werden, die bereits installiert sind oder auch nicht. APT versucht beim "
+"Auflösen von Abhängigkeitsproblemen zu helfen, indem es eine Anzahl "
+"automatischer Algorithmen bereitstellt, die bei der Auswahl von Paketen zur "
+"Installation helfen."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"<command>apt-get</command> stellt eine einfache Möglichkeit zu Verfügung, "
+"Pakete auf der Befehlszeile zu installieren. Anders als <command>dpkg</"
+"command> versteht <command>apt-get</command> keine .deb-Dateien. Es arbeitet "
+"mit dem Eigennamen des Pakets und kann .deb-Archive nur aus einer "
+"<emphasis>Quelle</emphasis> installieren."
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"Falls Sie einen HTTP-Proxy-Server benutzen, müssen Sie zuerst die "
+"Umgebungsvariable »http_proxy« setzen, siehe sources.list(5)"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"Das Erste <placeholder type=\"footnote\" id=\"0\"/>, das Sie vor der "
+"Benutzung von <command>apt-get</command> tun sollten, ist es, die "
+"Paketlisten von der <emphasis>Quelle</emphasis> herunterzuladen, so dass es "
+"weiß, welche Pakete verfügbar sind. Dies wird mit <literal>apt-get update</"
+"literal> erledigt. Zum Beispiel,"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"OK http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"OK http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Paketlisten werden gelesen … Fertig\n"
+"Abhängigkeitsbaum wird aufgebaut … Fertig\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr "Einmal aktualisiert stehen mehrere Befehl zur Benutzung zur Verfügung:"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"»Upgrade« wird versuchen, ein behutsames Upgrade des ganzen Systems "
+"durchzuführen. »Upgrade« wird niemals ein neues Paket installieren oder "
+"entfernen, noch wird es jemals ein Upgrade eines Pakets durchführen, das "
+"andere Pakete beschädigen könnte. Dies kann täglich dazu benutzt werden, um "
+"ein relativ sicheres Upgrade des Systems durchzuführen. »Upgrade« wird alle "
+"Pakete auflisten, von denen es kein Upgrade durchführen kann, was "
+"üblicherweise bedeutet, dass sie von neuen Paketen abhängen oder Konflikte "
+"mit anderen Paketen haben. <command>dselect</command> oder <literal>apt-get "
+"install</literal> können benutzt werden, um die Installation von diesen "
+"Paketen zu erzwingen."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"»Install« wird benutzt, um Pakete nach Namen zu installieren. Das Paket wird "
+"automatisch heruntergeladen und installiert. Dies kann nützlich sein, wenn "
+"Sie bereits den Namen des zu installierenden Pakets kennen und keine GUI "
+"aufrufen möchten, um es auszuwählen. Jede beliebige Anzahl von Paketen kann "
+"zum Installieren übergeben werden, sie werden alle heruntergeladen. "
+"»Install« versucht automatisch, Abhängigkeitsprobleme mit den aufgelisteten "
+"Paketen aufzulösen, wird eine Zusammenfassung ausgeben und nach einer "
+"Bestätigung fragen, wenn sich etwas anderes als dessen Argumente ändert."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"Dist-upgrade führt vollständige Upgrades durch. Es wurde entworfen, um "
+"Upgrades zwischen Releases von Debian zu vereinfachen. Es benutzt einen "
+"ausgeklügelten Algorithmus, um die beste Zusammenstellung von Paketen zum "
+"Installieren, für das Upgrade oder zum Entfernen festzulegen, um soviel wie "
+"möglich vom System auf das neuste Release zu bekommen. In einigen "
+"Situationen könnte es eher gewünscht sein, »dist-upgrade« zu benutzen, als "
+"Zeit in das manuelle Auflösen von Abhängigkeiten in <command>dselect</"
+"command> zu investieren. Sobald Dist-upgrade abgeschlossen ist, kann "
+"<command>dselect</command> benutzt werden, um einige Pakete zu installieren, "
+"die außen vor geblieben sind."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"Es ist wichtig, genau zu schauen, was »dist-upgrade« tun wird, seine "
+"Entscheidungen können manchmal ziemlich überraschend sein."
+
+# s/package/packages/
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"<command>apt-get</command> hat mehrere Befehlszeilenoptionen, die sich "
+"detailliert in seiner Handbuchseite, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> finden. Die "
+"nützlichste Option ist <literal>-d</literal>, die die heruntergeladenen "
+"Dateien nicht installiert. Falls das System eine große Anzahl Pakete "
+"herunterladen soll, würde es nicht erwünscht sein, wenn die Installation "
+"auch in dem Fall gestartet würde, dass etwas schief läuft. Falls <literal>-"
+"d</literal> benutzt wird, können die heruntergeladenen Archive dadurch "
+"installiert werden, indem einfach der Befehl, der das Herunterladen "
+"veranlasste, erneut ohne <literal>-d</literal> ausgeführt wird."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"Die APT-<command>dselect</command>-Methode stellt das komplette APT-System "
+"mit dem <command>dselect</command>-Paketauswahl-GUI bereit. "
+"<command>dselect</command> wird benutzt, um Pakete zum Installieren oder "
+"Entfernen auszuwählen und APT installiert sie tatsächlich."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"Um die APT-Methode einzuschalten, müssen Sie [Z]ugriff in <command>dselect</"
+"command> auswählen und dann die APT-Methode wählen. Sie werden nach einer "
+"Zusammenstellung von <emphasis>Quellen</emphasis> gefragt. Dies sind Orte, "
+"von denen Archive heruntergeladen werden. Dies können Internetsites, lokale "
+"Debian-Spiegel oder CD-ROMs sein. Jede Quelle kann einen Ausschnitt des "
+"gesamten Debian-Archives bereitstellen. APT wird sie automatisch "
+"kombinieren, um eine komplette Zusammenstellung von Paketen zu formen. Falls "
+"Sie eine CD-ROM haben, ist es eine gute Idee, sie als erstes und dann den "
+"Spiegel anzugeben, so dass Sie Zugriff auf die neusten Fehlerbehebungen "
+"haben. APT wird automatisch Pakete auf der CD-ROM benutzen, bevor es sie aus "
+"dem Internet herunterlädt."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" eine Liste mit Orten von Distributionsquellen einrichten\n"
+"\n"
+" Bitte geben Sie die Basis-URL der Debian-Distribution an.\n"
+" Die bekannten Zugriffsschemas dafür sind: http file\n"
+"\n"
+" Zum Beispiel:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"Das Einrichten der <emphasis>Quellen</emphasis> beginnt durch das Erfragen "
+"der Basis des Debian-Archives, vorgegeben ist ein HTTP-Spiegel. Als nächstes "
+"wird nach der zu erhaltenden Distribution gefragt."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" Bitte geben Sie die zu erhaltende Distributionskennzeichnung oder den mit\n"
+" einem / endenden Pfad zum Paket an. Die Distributionskennzeichnungen sind\n"
+" normalerweise etwas wie: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"Die Distribution bezieht sich auf die Debian-Version im Archiv, "
+"<emphasis>stable</emphasis> bezieht sich auf die zuletzt veröffentlichte "
+"Version und <emphasis>unstable</emphasis> bezieht sich auf die "
+"Entwicklungsversion. <emphasis>non-US</emphasis> ist nur auf einigen "
+"Spiegeln verfügbar und bezieht sich auf Pakete, die "
+"Verschlüsselungstechnniken oder andere Dinge enthalten, die nicht aus den "
+"Vereinigten Staaten exportiert werden können. Diese Pakete in die USA zu "
+"importieren ist jedoch legal."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" Bitte geben Sie die Bestandteile an, die Sie erhalten möchten\n"
+" Die Bestandteile sind normalerweise etwas wie: »main« »contrib« »non-free«\n"
+"\n"
+" Bestandteile [main contrib non-free]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"Die Liste der Bestandteile bezieht sich auf die Liste von Unter-"
+"Distributionen zum Herunterladen. Die Distribution ist auf Basis von "
+"Software-Lizenzen unterteilt, »Main« besteht aus Paketen, die gemäß der DFSG "
+"frei sind, während »Contrib« und »Non-free« Dinge enthalten, die "
+"verschiedene Einschränkungen in ihrer Benutzung und ihrem Vertrieb haben."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"Jegliche beliebige Anzahl von Quellen kann hinzugefügt werden, das "
+"Einrichtungsskript wird mit Nachfragen fortfahren, bis Sie alles angegeben "
+"haben, was Sie möchten."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"Bevor sie beginnen, <command>dselect</command> zu benutzen, ist es "
+"notwendig, die Verfügbarkeitsliste zu aktualisieren, indem sie aus dem Menü "
+"[E]rneuern auswählen. Dies ist eine Obermenge von <literal>apt-get update</"
+"literal>, das <command>dselect</command> heruntergeladene Informationen zur "
+"Verfügung stellt. [E]rneuern muss auch dann durchgeführt werden, wenn vorher "
+"<literal>apt-get update</literal> ausgeführt wurde."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"Sie können dann fortfahren und Ihre Auswahl per [A]uswählen treffen und dann "
+"die Installation mit [I]nstall. vornehmen. Wenn Sie die APT-Methode "
+"benutzen, haben die Befehle Kon[f]ig. und [L]öschen keine Bedeutung, der "
+"Befehl [I]nstall. führt beides gleichermaßen aus."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"Standardmäßig wird APT automatisch die Paketdateien (.deb) entfernen, sobald "
+"sie erfolgreich installiert sind. Um dieses Verhalten zu ändern, legen Sie "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "Die Schnittstelle"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"Die Methode <command>dselect</command> ist tatsächlich eine Zusammenstellung "
+"von Wrapper-Skripten für <command>apt-get</command>. Die Methode stellt "
+"tatsächlich mehr Funktionalitäten bereit, als in <command>apt-get</command> "
+"allein vorhanden sind."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"Sowohl diese APT-Methode <command>dselect</command> als auch <command>apt-"
+"get</command> benutzen die gleiche Schnittstelle. Es ist ein einfaches "
+"System, das üblicherweise mitteilt, was es tun wird und es dann tut. "
+"<placeholder type=\"footnote\" id=\"0\"/> Nach der Ausgabe einer "
+"Zusammenfassung was passieren wird, gibt APT einige informative "
+"Statusmeldungen aus, so dass Sie abschätzen können, wie weit es ist und "
+"wieviel noch zu tun ist."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "Initialisierung"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"Vor allen Transaktionen, ausgenommen »update«, führt APT eine Reihe von "
+"Aktionen durch, um seinen internen Status vorzubereiten. Es führt außerdem "
+"einige Prüfungen des Systemstatus durch. Diese Transaktionen können "
+"jederzeit durch Ausführung von <literal>apt-get check</literal> durchgeführt "
+"werden."
+
+# CHECKME: Abhängigkeitsbaum wird aufgebaut.
+# Statusinformationen werden eingelesen.... Fertig
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"Paketlisten werden gelesen … Fertig\n"
+"Abhängigkeitsbaum wird aufgebaut … Fertig\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"Das erste was es tut, ist das Einlesen aller Paketdateien in den Speicher. "
+"APT benutzt ein Zwischenspeicherschema, so dass diese Aktion beim zweiten "
+"Ausführen schneller laufen wird. Falls einige der Paketdateien nicht "
+"gefunden werden, werden sie ignoriert und beim Beenden von Apt-get wird eine "
+"Warnung ausgegeben."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"Die letzte Aktion führt eine detaillierte Analyse der Abhängigkeiten des "
+"Systems durch. Sie prüft jede Abhängigkeit jedes installierten oder "
+"entpackten Pakets und berücksichtigt, ob es in Ordnung ist. Sollte dies ein "
+"Problem finden, dann wird ein Bericht ausgegeben und <command>apt-get</"
+"command> wird die Ausführung verweigern."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"Paketlisten werden gelesen … Fertig\n"
+"Abhängigkeitsbaum wird aufgebaut\n"
+"Status-Informationen einlesen … Fertig\n"
+"Probieren Sie „apt --fix-broken install“, um diese zu korrigieren:\n"
+"Die folgenden Pakete haben nichterfüllte Abhängigkeiten:\n"
+" 9fonts: Hängt ab: xlib6g ist aber nicht installiert\n"
+" uucp: Hängt ab: mailx ist aber nicht installiert\n"
+" blast: Hängt ab: xlib6g (&gt;= 3.3-5) ist aber nicht installiert\n"
+" adduser: Hängt ab: perl-base ist aber nicht installiert\n"
+" aumix: Hängt ab: libgpmg1 ist aber nicht installiert\n"
+" debiandoc-sgml: Hängt ab: sgml-base ist aber nicht installiert\n"
+" bash-builtins: Hängt ab: bash (&gt;= 2.01) but 2.0-3 ist installiert\n"
+" cthugha: Hängt ab: svgalibg1 ist aber nicht installiert\n"
+" Hängt ab: xlib6g (&gt;= 3.3-5) ist aber nicht installiert\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"In diesem Beispiel hat das System viele Probleme, einschließlich eines "
+"ernsten Problems mit libreadlineg2. Für jedes Paket, das nichterfüllte "
+"Abhängigkeiten hat, wird eine Zeile ausgegeben, die das Paket mit dem "
+"Problem anzeigt und die Abhängigkeiten, die nicht erfüllt sind. Eine kurze "
+"Erklärung, warum das Paket ein Abhängigkeitsproblem hat, ist inbegriffen."
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"APT berücksichtigt jedoch alle bekannten Abhängigkeiten und versucht, "
+"kaputte Pakete zu vermeiden"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"Es gibt zwei Möglichkeiten, wie ein System in einen kaputten Status wie "
+"diesen kommen kann. Die erste wird dadurch verursacht, dass <command>dpkg</"
+"command> einige feine Beziehungen zwischen Paketen übersieht, wenn Upgrades "
+"durchgeführt werden. <placeholder type=\"footnote\" id=\"0\"/>. Die zweite "
+"tritt auf, falls eine Paketinstallation während der Ausführung fehlschlägt. "
+"In dieser Situation könnte ein Paket entpackt worden sein, ohne dass die von "
+"ihm Abhängigen installiert sind."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"Die zweite Situation ist weit weniger ernst als die erste, weil APT "
+"bestimmte Beschränkungen in der Reihenfolge setzt, in der Pakete installiert "
+"werden. In beiden Fällen veranlasst die Option <literal>-f</literal> "
+"<command>apt-get</command>, eine mögliche Lösung für das Problem zu folgern "
+"und dann fortzufahren. Die APT-Methode <command>dselect</command> liefert "
+"immer die Option <literal>-f</literal>, zum einfachen Fortfahren von "
+"gescheiterten Betreuerskripten."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"Falls jedoch die Option <literal>-f</literal> benutzt wird, um ein ernsthaft "
+"kaputtes System zu korrigieren, das vom ersten Fall verursacht wurde, dann "
+"ist es möglich, dass es entweder sofort fehlschlägt oder die "
+"Installationsabfolge fehlschlagen wird. In beiden Fällen ist es nötig, Dpkg "
+"(möglicherweise mit erzwingenden Optionen) manuell zu benutzen, um die "
+"Situation ausreichend zu korrigieren, so dass es APT ermöglicht wird, "
+"fortzufahren."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "Der Statusbericht"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"Bevor es fortfährt, wird <command>apt-get</command> einen Bericht darüber "
+"präsentieren, was geschehen wird. Im Allgemeinen spiegelt der Bericht den "
+"Typ der Aktion, die ausgeführt wird, wider, aber es gibt auch mehrere "
+"gemeinsame Elemente. Auf jeden Fall spiegelt die Liste den Endstatus der "
+"Dinge wider, bezieht die Option <literal>-f</literal> in Betracht und alle "
+"andere relevante Aktivitäten zum Befehl, der ausgeführt wird."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "Die zusätzliche Paketliste"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"Die folgenden Pakete werden installiert:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"Die zusätzliche Paketliste zeigt alle Pakete, die installiert werden oder "
+"von denen ein Upgrade durchgeführt wird, zusätzlich zu den auf der "
+"Befehlszeile angegebenen. Sie wird nur für einen <literal>install</literal>-"
+"Befehl generiert. Die aufgelisteten Pakete sind häufig das Ergebnis einer "
+"automatischen Installation."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "Die zu entfernenden Pakete"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"Die folgenden Pakete werden ENTFERNT:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"Die Liste der zu entfernenden Pakete zeigt all die Pakete, die vom System "
+"entfernt werden. Sie kann für jede der Aktionen angezeigt werden und sollte "
+"einer sorgfältige Überprüfung unterzogen werden, um sicherzustellen, dass "
+"nichts Wichtiges weggenommen wird. Die Option <literal>-f</literal> ist "
+"insbesondere gut darin, Pakete zum Entfernen vorzumerken, so dass in diesem "
+"Fall mit extremer Vorsicht vorgegangen werden sollte. Die Liste könnte "
+"Pakete enthalten, die entfernt werden, weil sie nur teilweise installiert "
+"sind, möglicherweise aufgrund einer abgebrochenen Installation."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "Die Liste neuer Pakete"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"Die folgenden NEUEN Pakete werden zusätzlich installiert:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"Die Liste neuer Pakete ist einfache eine Erinnerung, was geschehen wird. Die "
+"aufgelisteten Pakete sind zurzeit nicht auf dem System installiert, werden "
+"es aber sein, wenn APT fertig ist."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "Die Liste zurückgehaltener Pakete"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"Die folgenden Pakete werden zurückgehalten:\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"Jedesmal, wenn ein Upgrade des ganzen Systems durchgeführt wird, besteht die "
+"Möglichkeit, dass neue Versionen von Paketen nicht installiert werden "
+"können, weil sie neue Dinge benötigen oder einen Konflikt mit bereits "
+"installierten Dingen haben. In diesem Fall wird das Paket auf der Liste "
+"zurückgehaltener Pakete erscheinen. Der beste Weg dort aufgeführte Pakete "
+"zur Installation zu bewegen, ist per <literal>apt-get install</literal> oder "
+"indem <command>dselect</command> zum Lösen ihrer Probleme benutzt wird."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "Warnung wegen zurückgehaltener Pakete"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"Die folgenden zurückgehaltenen Pakete werden geändert:\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"Manchmal können Sie APT bitten, ein auf »zurückgehalten« gesetztes Paket zu "
+"installieren. In einem solchen Fall gibt es eine Warnung aus, dass das "
+"zurückgehaltene Paket geändert wird. Dies sollte nur während Dist-upgrade "
+"oder Install vorkommen."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "Abschließende Zusammenfassung"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+"Abschließend wird APT eine Zusammenfassung aller Änderungen ausgeben, die "
+"auftreten werden."
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"206 Pakete aktualisiert, 8 zusätzlich installiert, 23 werden entfernt und 51 nicht aktualisiert.\n"
+"12 Pakete nicht vollständig installiert oder entfernt.\n"
+"Muss 65,7MB/66,7MB an Archiven herunterladen. Nach dem Entpacken werden 26,5MB zusätzlich belegt sein.\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"Die erste Zeile der Zusammenfassung ist bloß eine Zusammenfassung von all "
+"den Listen und umfasst die Anzahl der Upgrades – das sind bereits "
+"installierte Pakete, für die neue Versionen verfügbar sind. Die zweite Zeile "
+"zeigt die Anzahl von schlecht konfigurierten Paketen, die möglicherweise das "
+"Ergebnis einer abgebrochenen Installation sind. Die letzt Zeile zeigt den "
+"Speicherbedarf, den die Installation benötigt. Das erste Zahlenpaar bezieht "
+"sich auf die Größe der Archivdateien. Die erste Zahl zeigt die Anzahl der "
+"Bytes an, die von fernen Orten heruntergeladen werden müssen und die zweite "
+"zeigt die gesamte Größe aller benötigten Archive an. Die nächste Zahl zeigt "
+"den Größenunterschied zwischen den derzeit installierten Paketen und den neu "
+"installierten Paketen. Es entspricht ungefähr dem in /usr benötigten "
+"Speicher nachdem alles erledigt ist. Wenn eine große Anzahl Pakete entfernt "
+"wird, dann kann der Wert den Betrag des freiwerdenden Speichers anzeigen."
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"Einige andere Berichte können durch Benutzung der Option »-u« generiert "
+"werden, um Pakete anzuzeigen, von denen ein Upgrade durchgeführt werden "
+"soll. Dies ist den vorherigen Beispielen ähnlich."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "Der Anzeigestatus"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"Während des Herunterladens von Archiven und Paketdateien gibt APT eine Reihe "
+"von Statusmeldungen aus."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"Hole:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Hole:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Treffer http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Hole:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Hole:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free 'Warte auf Datei' 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"Die Zeilen, die mit <emphasis>Hole</emphasis> beginnen, werden ausgegeben, "
+"wenn APT anfängt, eine Datei herunterzuladen, während die letzte Zeile den "
+"Fortschritt des Herunterladens anzeigt. Die erste Prozentzahl der "
+"Fortschrittszeile zeigt die gesamt erledigte Prozentzahl aller Dateien an. "
+"Unglücklicherweise schätzt <literal>apt-get update</literal> die erledigte "
+"Prozentzahl, da die Größe der Pakete unbekannt ist, was einige "
+"Ungenauigkeiten bewirkt."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"Der nächste Abschnitt der Statuszeile wird für jeden Download-Thread einmal "
+"wiederholt und zeigt die durchgeführte Aktion, sowie einige nützliche "
+"Informationen darüber an was geschieht. Manchmal wird dieser Abschnitt "
+"einfach nur <emphasis>Forking</emphasis> darstellen, was bedeutet, dass das "
+"Betriebssystem das Download-Modul am Laden ist. Das erste Wort nach dem »[« "
+"ist die Ladenummer, wie sie auf den Verlaufszeilen angezeigt wird. Das "
+"nächste Wort ist der Name des Objekts in Kurzform, das heruntergeladen wird. "
+"Für Archive wird es den Namen des Paketes enthalten, das heruntergeladen "
+"wird."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"Innerhalb von einzelnen Anführungszeichen folgt eine informative "
+"Zeichenkette, die den Fortschritt der Aushandlungsphase des Downloads "
+"anzeigt. Normalerweise schreitet sie von <emphasis>Verbinde</emphasis> zu "
+"<emphasis>Warte auf Datei</emphasis> zu <emphasis>Lade herunter</emphasis> "
+"oder <emphasis>Nehme wieder auf</emphasis> fort. Der letzte Wert ist die "
+"Anzahl der von der fernen Site heruntergeladenen Bytes. Sobald der Download "
+"beginnt, zeigt sich dies wie <literal>102/10.2k</literal> was anzeigt, dass "
+"102 Bytes heruntergeladen und 10,2 Kilobyte erwartet werden. Die Gesamtgröße "
+"wird immer in vierstelliger Schreibweise dargestellt, um Platz zu sparen. "
+"Nach der Größenanzeige ist eine Prozentfortschrittsanzeige für die Datei "
+"selbst. Das zweitletzte Element ist die augenblickliche "
+"Fortschrittsgeschwindigkeit. Dieser Wert wird alle fünf Sekunden "
+"aktualisiert und spiegelt die Datenübertragungsrate in dieser Periode wider. "
+"Am Ende wird die geschätzte Übertragungszeit angezeigt. Dies wird regelmäßig "
+"aktualisiert und spiegelt die Zeit zum Vervollständigen bei der angezeigten "
+"Datenübertragungsrate wider."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"Die Statusanzeige aktualisiert sich alle halbe Sekunde, um eine gleichmäßige "
+"Rückmeldung über den Download-Fortschritt bereitzustellen, während die "
+"»Hole«-Zeilen bei jeder gestarteten neuen Datei zurückscrollen. Da die "
+"Statusanzeige ständig aktualisiert wird, ist sie für die Protokollierung in "
+"eine Datei ungeeignet. Benutzen Sie die Option <literal>-q</literal>, um die "
+"Statusanzeige zu entfernen."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"APT benutzt <command>dpkg</command>, um die Archive zu installieren und wird "
+"zu der <command>dpkg</command>-Schnittstelle herüberschalten, sobald der "
+"Download vollständig ist. <command>dpkg</command> wird außerdem eine Reihe "
+"von Fragen stellen, während es die Pakete abarbeitet und die Pakete können "
+"auch mehrere Fragen stellen. Vor jeder Frage ist üblicherweise eine "
+"Beschreibung des Gefragten und die Fragen sind zu vielfältig, um sie "
+"vollständig hier zu besprechen."
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "APT offline verwenden"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"Dieses Dokument beschreibt, wie APT in einer Umgebung ohne Netzwerk, "
+"speziell einem »Turnschuhnetzwerk«, an die Durchführung von Upgrades "
+"herangeht."
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "Einleitung"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "Übersicht"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"Normalerweise benötigt APT direkten Zugang zu einem Debian-Archiv, entweder "
+"von einem lokalen Medium oder über ein Netz. Eine andere häufige "
+"Beanstandung ist, dass eine Debian-Maschine an einer langsamen Anbindung, "
+"wie einem Modem, hängt und eine andere Maschine eine sehr schnelle "
+"Verbindung hat, sie jedoch physisch fern sind."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"Die Lösung dazu besteht darin, große Wechselmedien, wie eine Zip-Platte oder "
+"eine SuperDisk zu benutzen. Diese Platten sind nicht groß genug, um ein "
+"ganzes Debian-Archiv zu speichern, können aber leicht eine Untermenge "
+"aufnehmen, die für die meisten Benutzer groß genug ist. Die Idee besteht "
+"darin, APT zu benutzen, um eine Liste benötigter Pakete zu generieren und "
+"diese dann mit einer anderen Maschine mit guter Verbindung auf die Platte "
+"herunterzuladen. Es ist sogar möglich, eine andere Debian-Maschine mit APT "
+"oder ein komplett unterschiedliches Betriebssystem und ein Download-Werkzeug "
+"wie Wget zu benutzen. Nennen wir die Maschine, die die Pakete herunterlädt "
+"<emphasis>ferner Rechner</emphasis> und die mit der schlechten oder "
+"fehlenden Verbindung <emphasis>Zielrechner</emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"Dies wird durch kreatives Manipulieren der APT-Konfigurationsdatei erreicht. "
+"Die wesentliche Voraussetzung besteht darin, APT mitzuteilen, dass es für "
+"seine Archivdateien auf einer Platte nachsieht. Beachten Sie, dass diese "
+"Platte mit einem Dateisystem formatiert sein sollte, das mit langen "
+"Dateinamen umgehen kann, so wie ext2, fat32 oder vfat."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "APT auf beiden Maschinen benutzen"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"Ein verfügbares APT auf beiden Maschinen stellt die einfachste Konfiguration "
+"dar. Die Grundidee besteht darin, eine Kopie der Statusdatei auf der Platte "
+"abzulegen und die Maschine in der Ferne zu benutzen, um die neusten "
+"Paketdateien herunterzuladen und zu entscheiden, welche Pakete "
+"heruntergeladen werden. Die Plattenverzeichnisstruktur sollte so aussehen:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /Platte/\n"
+" Archive/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "Die Konfigurationsdatei"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"Die Konfigurationsdatei sollte APT mitteilen, dass es seine Dateien auf der "
+"Platte speichert und obendrein die Konfigurationsdateien auf der Platte "
+"benutzt. Die »sources.list« sollte genau die Sites enthalten, die Sie auf "
+"der fernen Maschine benutzen möchten und die Statusdatei sollte eine Kopie "
+"von <emphasis>/var/lib/dpkg/status</emphasis> vom <emphasis>Zielrechner</"
+"emphasis> sein. Bitte beachten Sie, falls Sie lokale Archive benutzen, dass "
+"Sie »copy«-URIs benutzen müssen. Die Syntax entspricht der von »file«-URIs."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt.conf</emphasis> muss die nötigen Informationen enthalten, "
+"damit APT die Platte benutzt:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* Dies ist nicht nötig, falls die beiden Maschinen die gleiche\n"
+" Architektur haben. Es teilt dem fernen APT mit, welche Architektur die\n"
+" Zielmaschine hat */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Die Platte für Statusinformationen benutzen und die Statusdatei von der\n"
+" Vorgabe /var/lib/dpkg umleiten */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Programmzwischenspeicher werden lokal gespeichert\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Ort der Quellenliste.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"Weitere Details finden sich in der apt.conf-Handbuchseite und der "
+"Musterkonfigurationsdatei in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"Das Erste, was auf der Zielmaschine getan werden muss, ist das Einhängen der "
+"Platte und das Kopieren von <emphasis>/var/lib/dpkg/status</emphasis> "
+"dorthin. Sie werden außerdem die in der Übersicht umrissenen Verzeichnisse "
+"<emphasis>archives/partial/</emphasis> und <emphasis>lists/partial/</"
+"emphasis> erstellen müssen. Dann bringen Sie die Platte zu der fernen "
+"Maschine und konfigurieren Sie die »sources.list«. Führen Sie das folgende "
+"auf der fernen Maschine aus:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT lädt die Paketdateien herunter ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT lädt all die Pakete herunter, die die Zielmaschine benötigt, um ein\n"
+" Upgrade durchzuführen ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"Der Befehl »dist-upgrade« kann durch alle anderen Standard-APT-Befehle "
+"ersetzt werden, insbesondere »dselect-upgrade«. Sie können sogar eine APT-"
+"Oberfläche, wie <emphasis>dselect</emphasis>, benutzen. Jedoch stellt dies "
+"ein Problem dar, Ihre Auswahl zurück an den lokalen Rechner zu kommunizieren."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"Nun enthält die Platte alle Indexdateien und Archive, die nötig sind, um ein "
+"Upgrade der Zielmaschine durchzuführen. Bringen Sie die Platte zurück und "
+"starten Sie:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/Platte/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT erstellt eine lokale Kopie der Zwischenspeicherdateien ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Oder irgendeinen anderen APT-Befehl ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"Es ist für ordentliches Funktionieren notwendig, die Statusdatei erneut als "
+"die lokale anzugeben. Dies ist sehr wichtig!"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"Wenn Sie Dselect benutzen, können Sie die sehr riskante Aktion durchführen, "
+"disc/status auf /var/lib/dpkg/status zu kopieren, so dass die von Ihnen auf "
+"der fernen Maschine gemachte Auswahl aktualisiert wird. Es wird in höchstem "
+"Maße empfohlen, dass Leute nur auf der lokalen Maschine Auswahlen treffen – "
+"aber dies könnte manchmal unmöglich sein. Kopieren Sie die Statusdatei "
+"NICHT, falls Dpkg oder APT in der Zwischenzeit benutzt wurden!"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "APT und Wget benutzen"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> ist ein beliebtes und portierbares "
+"Herunterladewerkzeug, das auf nahezu jeder Maschine laufen kann. Anders als "
+"die Methode oben wird hierfür benötigt, dass die Debian-Maschine bereits "
+"eine Liste verfügbarer Pakete hat."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"Die Grundidee besteht darin, eine Platte zu erzeugen, die nur die "
+"heruntergeladenen Archivdateien von der fernen Site enthält. Dies wird durch "
+"Benutzen der Option »--print-uris« von Apt-get und dem anschließenden "
+"Erstellen eines Wget-Skripts getan, das dann die Pakete tatsächlich "
+"herunterlädt."
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "Betrieb"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"Anders als bei der vorherigen Technik werden keine speziellen "
+"Konfigurationsdateien benötigt. Es werden lediglich die Standard-APT-Befehle "
+"benutzt, um die Dateiliste zu erstellen."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade \n"
+" [ Antworten Sie »nein« auf gestellte Fragen; stellen Sie sicher, dass Sie\n"
+" mit den Aktionen zufrieden sind ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /Platte/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"Es könnte auch jeder andere Befehl neben »dist-upgrade« hier benutzt werden, "
+"einschließlich »upgrade«."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"Die Datei /Platte/wget-script wird nun eine Liste der Wget-Befehle "
+"enthalten, um die erforderlichen Archive herunterzuladen. Dieses Skript "
+"sollte mit dem aktuellen Verzeichnis als Platteneinhängepunkt ausgeführt "
+"werden, so dass die Ausgabe auf die Platte gespeichert wird."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr "Die Maschine in der Ferne würde etwas wie das folgende tun"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /Platte\n"
+" # sh -x ./wget-script\n"
+" [ warten … ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"Sobald die Archive heruntergeladen und die Platte zur Debian-Maschine "
+"zurückgekehrt ist, kann die Installation durch Benutzung von "
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/Platte/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr ""
+"fortfahren, wodurch die bereits auf der Platte heruntergeladenen Archive "
+"benutzt werden."
diff --git a/doc/po/es.po b/doc/po/es.po
new file mode 100644
index 0000000..44ed108
--- /dev/null
+++ b/doc/po/es.po
@@ -0,0 +1,12771 @@
+# apt man pages translation to Spanish
+# Copyright (C) 2003, 2004, 2009, 2010, 2012 Software in the Public Interest
+# This file is distributed under the same license as the apt package.
+#
+# Changes:
+# - Initial translation
+# Ismael Fanlo, 2003
+# Carlos Mestre, 2003
+# Rudy Godoy <rudy@kernel-panik.org>, 2003
+# Gustavo Saldumbide <gsal@adinet.com.uy>, 2003
+# Javier Fernández-Sanguino <jfs@computer.org>, 2003
+# Rubén Porras Campo <nahoo@inicia.es>, 2003, 2004
+#
+#
+# - Updates
+# Francisco Javier Cuadrado <fcocuadrado@gmail.com>, 2009, 2010
+# Omar Campagne <ocampagne@gmail.com>, 2009, 2010, 2012.
+#
+# Traductores, si no conocen el formato PO, merece la pena leer la
+# documentación de gettext, especialmente las secciones dedicadas a este
+# formato, por ejemplo ejecutando:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Equipo de traducción al español, por favor lean antes de traducir
+# los siguientes documentos:
+#
+# - El proyecto de traducción de Debian al español
+# http://www.debian.org/intl/spanish/
+# especialmente las notas y normas de traducción en
+# http://www.debian.org/intl/spanish/notas
+#
+# - La guía de traducción de po's de debconf:
+# /usr/share/doc/po-debconf/README-trans
+# o http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-02-04 15:34+0100\n"
+"PO-Revision-Date: 2014-07-04 01:31+0200\n"
+"Last-Translator: Omar Campagne <ocampagne@gmail.com>\n"
+"Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>Equipo de APT</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>Página de QA</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>Página de errores de APT</ulink>. \n"
+" Si quiere informar de un error en APT, consulte\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> o use la orden\n"
+" &reportbug;.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Autor</title>\n"
+" <para>El equipo APT <email>apt@packages.debian.org</email> escribió apt.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Muestra un mensaje corto sobre el uso.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Muestra la versión del programa.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Fichero de configuración: Especifica el fichero de \n"
+" configuración a usar. \n"
+" El programa leerá el fichero de configuración predeterminado y, \n"
+" después, este fichero de configuración. Si necesita que ciertas \n"
+" opciones de configuración se definan antes que el análisis de los \n"
+" de los ficheros de configuración predeterminados, defina un fichero \n"
+" con la variable de entorno <envar>APT_CONFIG</envar>. \n"
+" Consulte &apt-conf; para información sobre la sintaxis.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Define una opción de configuración: Esto definirá una opción\n"
+" arbitraria de configuración. La sintaxis es <option>-o Algo::Cosa=cosa</option>.\n"
+" <option>-o</option> y <option>--option</option> se pueden usar varias\n"
+" veces para definir diferentes opciones.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>Todas las opciones de la línea de órdenes se pueden definir\n"
+" mediante el fichero de configuración, las descripciones indican la\n"
+" opción de la configuración a definir. Para opciones de tipo «boolean»\n"
+" puede invalidar el fichero de configuración utilizando algo como\n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" u otras muchas variaciones.\n"
+" </para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>Fichero de configuración de APT.\n"
+" Opción de configuración: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>Fragmentos del fichero de configuración de APT.\n"
+" Opción de configuración: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Área de almacenamiento para los ficheros de paquetes descargados.\n"
+" Opción de configuración: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Área de almacenamiento para los ficheros de paquetes en tránsito.\n"
+" Opción de configuración: <literal>Dir::Cache::Archives</literal> (se añade <filename>partial</filename>de forma implícita)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Ficheros de preferencias de versión.\n"
+" Aquí puede especificar el anclaje (&quot;pinning&quot;),\n"
+" una preferencia para conseguir ciertos paquetes a partir de\n"
+" una fuente diferente o de una versión diferente de una distribución.\n"
+" Opción de configuración: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>Fragmentos de fichero para las preferencias de la versión.\n"
+" Opción de configuración: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Ubicaciones de dónde conseguir los paquetes.\n"
+" Opción de configuración: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>Fragmentos de fichero para las ubicaciones de dónde descargar los paquetes.\n"
+" Opción de configuración: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Área de almacenamiento para la información del estado\n"
+" de cada fuente de paquetes especificado en &sources-list;\n"
+" Opción de configuración: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Área de almacenamiento para la información de estado en tránsito.\n"
+" Elemento de configuración: <literal>Dir::State::Lists</literal> (se añade <filename>partial</filename> de forma implícita)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Registro de claves de las claves locales de confianza,\n"
+" las claves nuevas se añadirán aquí.\n"
+" Elemento de configuración: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>Fragmentos de fichero de claves de confianza, se pueden\n"
+" añadir en este directorio registros de claves adicionales (por otros\n"
+" paquetes o el administrador.\n"
+" Elemento de configuración: <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Lista de estado de paquetes automáticamente instalados.\n"
+" Elemento de configuración: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRADUCCIÓN\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" La traducción al español la realizaron Ismael Fanlo, Carlos Mestre,\n"
+" Rudy Godoy, Gustavo Saldumbide, Javier Fernández-Sanguino y Rubén\n"
+" Porras Campo entre los años 2003 y 2004. La traducción fue actualizada\n"
+" por Francisco Javier Cuadrado y Omar Campagne Polaino entre los años\n"
+" 2009 y 2012 .\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Tenga en cuenta que este documento puede contener secciones sin\n"
+" traducir. Esto es intencionado para evitar perder contenido cuando\n"
+" la traducción no está actualizada con respecto al documento original.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "Descripción"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr "(&apt-get;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+#, fuzzy
+#| msgid ""
+#| "A specific version of a package can be selected for installation by "
+#| "following the package name with an equals and the version of the package "
+#| "to select. This will cause that version to be located and selected for "
+#| "install. Alternatively a specific distribution can be selected by "
+#| "following the package name with a slash and the version of the "
+#| "distribution or the Archive name (stable, testing, unstable)."
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"Puede seleccionar una versión especifica de un paquete poniendo a "
+"continuación del nombre del paquete un símbolo igual («=») seguido de la "
+"versión deseada. Esto provocará que se localice y seleccione esa versión "
+"para su instalación. Alternativamente se puede seleccionar una distribución "
+"específica poniendo a continuación del nombre del paquete una barra («/») "
+"seguida de la versión de la distribución o su nombre en el archivo de Debian "
+"(stable, testing, unstable)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>autoremove</literal> is used to remove packages that were "
+#| "automatically installed to satisfy dependencies for other packages and "
+#| "are now no longer needed."
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"<literal>autoremove</literal> desinstala paquetes que se instalaron "
+"automáticamente para satisfacer las dependencias de otros paquetes pero que "
+"ya no son necesarios."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "Véase también"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+#, fuzzy
+#| msgid ""
+#| "&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+#| "&apt-config;, &apt-secure;, The APT User's guide in &guidesdir;, &apt-"
+#| "preferences;, the APT Howto."
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+"&apt-config;, &apt-secure;, la guía de usuario de APT en &guidesdir;, &apt-"
+"preferences;, el Cómo de APT."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "Diagnósticos"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt</command> devuelve cero si no hay ningún error, y el valor 100 "
+"en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr ""
+"Herramienta de gestión de paquetes APT -- interfaz para la línea de órdenes"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "<command>apt-get</command> is the command-line tool for handling "
+#| "packages, and may be considered the user's \"back-end\" to other tools "
+#| "using the APT library. Several \"front-end\" interfaces exist, such as "
+#| "&dselect;, &aptitude;, &synaptic; and &wajig;."
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> es la herramienta para la gestión de paquetes "
+"desde la línea de órdenes, y se puede considerar el sistema de «bajo nivel» "
+"de otras herramientas de usuario que usan la biblioteca de APT. Existen "
+"varias interfaces de «alto nivel», tales como &dselect;, &aptitude;, "
+"&synaptic; y &wajig;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"A menos que se use la opción <option>-h</option> o <option>--help</option>, "
+"una de las siguientes órdenes debe estar presente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"<literal>update</literal> se usa para sincronizar el índice de paquetes "
+"desde sus fuentes. Los índices de paquetes disponibles se obtienen de los "
+"lugares especificados en <filename>/etc/apt/sources.list</filename>. Por "
+"ejemplo, cuando se usa un archivo de Debian, esta orden descarga y analiza "
+"los ficheros <filename>Packages.gz</filename>, de tal forma que la "
+"información acerca de los nuevos paquetes pasa a estar disponible. Siempre "
+"se debe realizar un <literal>update</literal> antes de un <literal>upgrade</"
+"literal> o un <literal>dist-upgrade</literal>. Tenga en cuenta que el "
+"indicador de progreso será incorrecto, ya que se desconoce de antemano el "
+"tamaño de los archivos de paquete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"<literal>upgrade</literal> se usa para instalar la versión más nueva de "
+"todos los paquetes instalados en el sistema provenientes de alguna de las "
+"fuentes listadas en <filename>/etc/apt/sources.list</filename>. Los paquetes "
+"instalados con una nueva versión disponible se descargan y actualizan, y "
+"bajo ninguna circunstancia se desinstalarán paquetes, o se instalarán "
+"paquetes nuevos. Las nuevas versiones de programas instalados que no se "
+"puedan actualizar sin cambiar el estado de instalación de otros paquetes no "
+"se instalarán, manteniéndose la versión actual. Debe realizar un "
+"<literal>update</literal> antes para que <command>apt-get</command> sepa que "
+"hay nuevas versiones disponibles."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"<literal>dist-upgrade</literal>, además de realizar las acciones de "
+"<literal>upgrade</literal>, trata inteligentemente los cambios de "
+"dependencias debidos a las nuevas versiones de paquetes. <command>apt-get</"
+"command> tiene un sistema «inteligente» de resolución de conflictos, y si es "
+"necesario tratará de actualizar los paquetes más importantes a costa de los "
+"menos importantes. Por ello, puede que la orden <literal>dist-upgrade</"
+"literal> elimine algunos paquetes. El fichero <filename>/etc/apt/sources."
+"list</filename> contiene una lista de sitios desde los que descargar los "
+"ficheros de paquetes. También puede consultar &apt-preferences; si quiere "
+"invalidar este comportamiento para paquetes individuales."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> se usa junto al tradicional administrador "
+"de paquetes de Debian, &dselect;. <literal>dselect-upgrade</literal> "
+"registra los cambios que haya hecho &dselect; al campo <literal>Status</"
+"literal> (estado) de los paquetes disponibles y realiza las acciones "
+"necesarias para que los cambios se lleven a cabo (por ejemplo, borrar "
+"paquetes antiguos e instalar las nuevas versiones)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"<literal>install</literal> instala o actualiza los paquetes que siguen a la "
+"palabra «install». Cada paquete es un nombre de paquete, y no el nombre "
+"completo del fichero del paquete (por ejemplo, en un sistema Debian GNU/"
+"Linux, el argumento sería <package>apt-utils</package>, y no <filename>apt-"
+"utils_&apt-product-version;_amd64.deb</filename>). Se obtendrán e instalarán "
+"todos los paquetes necesarios por los paquetes especificados para la "
+"instalación. El fichero <filename>/etc/apt/sources.list</filename> se "
+"utiliza para ubicar los paquetes. Si se antepone un guión al nombre del "
+"paquete (sin ningún espacio) el paquete se desinstalará en vez de instalar. "
+"De forma similar, el signo de suma se puede usar para especificar que un "
+"paquete se debe instalar. Estas últimas características se pueden usar para "
+"invalidar las decisiones tomadas por el sistema de resolución de conflictos "
+"de apt-get."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"Puede seleccionar una versión especifica de un paquete poniendo a "
+"continuación del nombre del paquete un símbolo igual («=») seguido de la "
+"versión deseada. Esto provocará que se localice y seleccione esa versión "
+"para su instalación. Alternativamente se puede seleccionar una distribución "
+"específica poniendo a continuación del nombre del paquete una barra («/») "
+"seguida de la versión de la distribución o su nombre en el archivo de Debian "
+"(stable, testing, unstable)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"Cualquiera de estos dos métodos de selección puede instalar una versión "
+"anterior de los paquetes y se debe utilizar con precaución."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"Esto también es el objetivo a usar si quiere actualizar uno o más paquetes "
+"instalados sin actualizar todos los paquetes del sistema. A diferencia del "
+"objetivo de «upgrade», que instala la versión más nueva de todos los "
+"paquetes instalados, «install» instalará la versión más nueva sólo de los "
+"paquetes especificados. Simplemente proporcione el nombre de los paquetes "
+"que quiere actualizar, y si una versión más nueva está disponible ésta (y "
+"sus dependencias, como se describió anteriormente) se descargarán e "
+"instalarán."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"Por último, &apt-preferences; permite modificar las normas de selección para "
+"paquetes individuales."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"Si ningún paquete coincide con la expresión proporcionada y la expresión "
+"contiene un «.», «?» o un «*», entonces se asume que es una expresión "
+"regular de acuerdo con el estándar POSIX, y se aplica a todos los nombres de "
+"paquetes de la base de datos. Cualquier coincidencia se instala (o "
+"desinstala). Tenga en cuenta que la comparación se hace en subcadenas, de "
+"manera que «lo.*» es válido para «how-lo» y para «lowest». Si este no es el "
+"comportamiento deseado, debe anclar la expresión regular con un «^» o un "
+"«$», o bien crear una expresión regular más específica."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr "Las líneas <literal>Archive:</literal> o <literal>Suite:</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"<literal>remove</literal> se comporta del mismo modo que <literal>install</"
+"literal> con la diferencia de que elimina los paquetes en vez de "
+"instalarlos. Tenga en cuenta que al eliminar un paquete sus ficheros de "
+"configuración permanecen en el sistema. Si un signo de suma precede al "
+"nombre del paquete (sin ningún espacio en blanco entre los dos), el paquete "
+"en cuestión será instalado en vez de eliminado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"<literal>purge</literal> es idéntico a <literal>remove</literal>, con la "
+"diferencia de que los paquetes se eliminarán y purgarán (se eliminará "
+"también cualquier fichero de configuración)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"<literal>source</literal> hace que <command>apt-get</command> descargue los "
+"paquetes fuente. APT examinará los paquetes disponibles para decidir qué "
+"paquete fuente descargará. Entonces descargará la versión más reciente del "
+"paquete fuente en el directorio actual respetando la versión predeterminada, "
+"que se define en la opción <literal>APT::Default-Release</literal>, la "
+"opción <option>-t</option> o según el paquete con la sintaxis <literal>pkg/"
+"release</literal>, si es posible."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"Los paquetes fuente se registran de forma separada de los paquetes binarios "
+"mediante líneas del tipo <literal>deb-src</literal> en el fichero &sources-"
+"list;. Esto significa que debe añadir una línea como ésta para cada "
+"repositorio del que quiera conseguir las fuentes. En caso contrario podría "
+"obtener una versión de fuentes distinta (demasiado antigua/reciente) o "
+"ninguna."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"Si se especifica la opción <option>--compile</option> el paquete se "
+"compilará en un binario «.deb» utilizando <command>dpkg-buildpackage</"
+"command> para la arquitectura definida con la opción <command>--host-"
+"architecture</command>. Si se especifica <option>--download-only</option> el "
+"paquete fuente no se desempaquetará."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"Puede obtener una versión especifica de un paquete fuente insertando un "
+"signo igual («=») seguido de la versión a descargar después del nombre del "
+"paquete, de forma similar al método que se usa con los paquetes binarios. "
+"Esto permite seleccionar exactamente el nombre y versión del paquete fuente, "
+"activando implícitamente la opción <literal>APT::Get::Only-Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"Tenga en cuenta que los paquetes fuente no se instalan ni registran en la "
+"base de datos de <command>dpkg</command> como sí lo hacen los binarios. Sólo "
+"se descargan al directorio actual en la forma de archivos tar de fuentes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"<literal>build-dep</literal> procova que apt-get instale/elimine paquetes "
+"para intentar satisfacer las dependencias de construcción de un paquete "
+"fuente. Por omisión, las dependencias se satisfacen para construir el "
+"paquete de forma nativa. También se puede definir la arquitectura anfitrión "
+"<option>--host-architecture</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"<literal>check</literal> es una herramienta de diagnóstico, actualiza la "
+"caché de paquetes y revisa la existencia de dependencias rotas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> descarga el paquete binario introducido al "
+"directorio actual."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>clean</literal> clears out the local repository of retrieved "
+#| "package files. It removes everything but the lock file from "
+#| "<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/"
+#| "archives/partial/</filename>. When APT is used as a &dselect; method, "
+#| "<literal>clean</literal> is run automatically. Those who do not use "
+#| "dselect will likely want to run <literal>apt-get clean</literal> from "
+#| "time to time to free up disk space."
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"<literal>clean</literal> borra totalmente el repositorio local que contiene "
+"los ficheros de los paquetes descargados. Borra todo excepto el fichero de "
+"bloqueo de los directorios <filename>&cachedir;/archives/</filename> y "
+"<filename>&cachedir;/archives/partial/</filename>. Cuando APT se usa como un "
+"método de &dselect;, <literal>clean</literal> se ejecuta automáticamente. Si "
+"no usa dselect es probable que desee ejecutar <literal>apt-get clean</"
+"literal> de vez en cuando para liberar algo de espacio en disco."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"Al igual que <literal>clean</literal>, <literal>autoclean</literal> borra el "
+"repositorio local de paquetes descargados. La diferencia reside en que sólo "
+"borrará aquellos paquetes que ya no se pueden descargar, o que son "
+"claramente inservibles. Esto permite mantener el almacén durante largos "
+"periodos de tiempo sin que aumente su tamaño descontroladamente. Si la "
+"opción de configuración <literal>APT::Clean-Installed</literal> está "
+"desactivada impedirá que se borren los paquetes instalados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"<literal>autoremove</literal> desinstala paquetes que se instalaron "
+"automáticamente para satisfacer las dependencias de otros paquetes pero que "
+"ya no son necesarios."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>changelog</literal> downloads a package changelog and displays "
+#| "it through <command>sensible-pager</command>. The server name and base "
+#| "directory is defined in the <literal>APT::Changelogs::Server</literal> "
+#| "variable (e.g. <ulink url=\"http://packages.debian.org/changelogs"
+#| "\">packages.debian.org/changelogs</ulink> for Debian or <ulink url="
+#| "\"https://changelogs.ubuntu.com/changelogs\">changelogs.ubuntu.com/"
+#| "changelogs</ulink> for Ubuntu). By default it displays the changelog for "
+#| "the version that is installed. However, you can specify the same options "
+#| "as for the <option>install</option> command."
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> descarga un fichero de registro de cambios "
+"«changelog» de un paquete dado y lo muestra a través de <command>sensible-"
+"pager</command>. El nombre de servidor y el directorio base se define con la "
+"variable <literal>APT::Changelogs::Server</literal> (por ejemplo, <ulink url="
+"\"http://packages.debian.org/changelogs\">packages.debian.org/changelogs</"
+"ulink> para Debian o <ulink url=\"https://changelogs.ubuntu.com/changelogs"
+"\">changelogs.ubuntu.com/changelogs</ulink> para Ubuntu). Por omisión, "
+"muestra el fichero de registro de cambios de la versión instalada. Por otra "
+"parte, puede definir las mismas opciones que con la orden <option>install</"
+"option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "Opciones"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"No considera los paquetes recomendados como dependencia al instalar. Opción "
+"de configuración: <literal>APT::Install-Recommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"Considera los paquetes sugeridos («Suggests») como una dependencia a "
+"instalar. Opción de configuración: <literal>APT::Install-Suggests</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"Sólo descarga los ficheros de los paquetes, no los desempaqueta ni los "
+"instala. Opción de configuración: <literal>APT::Get::Download-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Fix; attempt to correct a system with broken dependencies in place. This "
+#| "option, when used with install/remove, can omit any packages to permit "
+#| "APT to deduce a likely solution. If packages are specified, these have to "
+#| "completely correct the problem. The option is sometimes necessary when "
+#| "running APT for the first time; APT itself does not allow broken package "
+#| "dependencies to exist on a system. It is possible that a system's "
+#| "dependency structure can be so corrupt as to require manual intervention "
+#| "(which usually means using &dselect; or <command>dpkg --remove</command> "
+#| "to eliminate some of the offending packages). Use of this option together "
+#| "with <option>-m</option> may produce an error in some situations. "
+#| "Configuration Item: <literal>APT::Get::Fix-Broken</literal>."
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"Intenta arreglar un sistema con dependencias actualmente rotas. Si se usa "
+"esta opción junto a «install»/«remove» se puede omitir cualquier paquete "
+"para permitir a APT deducir una posible solución. Si se especifican "
+"problemas, deben corregir totalmente el problema. La opción, a veces, se "
+"necesita cuando se ejecuta APT por primera vez, APT no permite que existan "
+"dependencias de paquetes rotas en un sistema. Es posible que la estructura "
+"de dependencias de un sistema esté tan deteriorada que requiera una "
+"intervención manual (generalmente puede ejecutar &dselect; o <command>dpkg --"
+"remove</command> para desinstalar alguno de los paquetes que crean el "
+"conflicto). El uso de esta opción junto con <option>-m</option> puede "
+"producir un error en algunas situaciones. Opción de configuración: "
+"<literal>APT::Get::Fix-Broken</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"Ignora paquetes faltantes. Si no se pueden descargar paquetes, o estos no "
+"superan la prueba de integridad tras la descarga (ficheros de paquete "
+"corruptos), se retienen y se continúa con el resto. Si se utiliza esta "
+"opción con <option>-f</option> puede provocar un error en algunos casos. Si "
+"un paquete se selecciona para su instalación (particularmente si se hace "
+"mediante la línea de órdenes) y no se puede descargar, se le retendrá "
+"silenciosamente. Opción de configuración: <literal>APT::Get::Fix-Missing</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"Deshabilita la descarga de paquetes. Si se utiliza junto <option>--ignore-"
+"missing</option> ofrece la mejor manera de forzar a APT a utilizar sólo los "
+"ficheros «.deb» descargados con anterioridad. Opción de configuración: "
+"<literal>APT::Get::Download</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"Produce una salida adecuada para su registro, omitiendo los indicadores de "
+"progreso. Si se especifican más «q» (hasta un máximo de 2) se conseguirá una "
+"salida más silenciosa. También es posible usar <option>-q=#</option> para "
+"seleccionar el nivel de silencio, omitiendo el fichero de configuración. "
+"Tenga en cuenta que un nivel silencioso 2 implica <option>-y</option>; por "
+"ello, no se debe utilizar «-qq» sin añadir un modificador de acción nula "
+"como «-d», «--print-uris» o «-s» para evitar que APT realice algo que usted "
+"no espera. Opción de configuración: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"Las simulaciones de ejecución muestran un conjunto de líneas, y cada una "
+"representa una acción de <command>dpkg</command>: configuración "
+"(<literal>Conf</literal>), eliminación (<literal>Remv</literal>) o "
+"desempaquetado (<literal>Inst</literal>). Los corchetes indican paquetes "
+"rotos, y corchetes vacíos indican relaciones de rotura sin consecuencias "
+"(poco frecuente)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"Supone una respuesta afirmativa a todas las preguntas, de esta forma apt-get "
+"se ejecuta sin necesidad de intervención posterior para tomar decisiones. "
+"<literal>apt-get</literal> terminará sin hacer nada de producirse una "
+"situación no deseada, como cambiar un paquete retenido, instalar un paquete "
+"sin autenticar o desinstalar un paquete esencial. Opción de configuración: "
+"<literal>APT::Get::Assume-Yes</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"Supone «no» a todas las consultas. Opción de configuración: <literal>APT::"
+"Get::Assume-No</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Show upgraded packages; print out a list of all packages that are to be "
+#| "upgraded. Configuration Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"Muestra los paquetes que se van a actualizar. Opción de configuración: "
+"<literal>APT::Get::Show-Upgraded</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"Muestra las versiones completas para los paquetes actualizados e instalados. "
+"Opción de configuración: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "This option controls the architecture packages are built for by "
+#| "<command>apt-get source --compile</command> and how cross-"
+#| "builddependencies are satisfied. By default is it not set which means "
+#| "that the host architecture is the same as the build architecture (which "
+#| "is defined by <literal>APT::Architecture</literal>). Configuration Item: "
+#| "<literal>APT::Get::Host-Architecture</literal>"
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"Esta opción controla la arquitectura para la que se construyen los paquetes "
+"mediante <command>apt-get source --compile</command> y cómo se satisfacen "
+"las dependencias cruzadas de construcción. No se define por omisión, lo que "
+"implica que la arquitectura anfitrión es la misma que la de construcción "
+"(definida con <literal>APT::Architecture</literal>). Opción de "
+"configuración: <literal>APT::Get::Host-Architecture</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "This option controls the architecture packages are built for by "
+#| "<command>apt-get source --compile</command> and how cross-"
+#| "builddependencies are satisfied. By default is it not set which means "
+#| "that the host architecture is the same as the build architecture (which "
+#| "is defined by <literal>APT::Architecture</literal>). Configuration Item: "
+#| "<literal>APT::Get::Host-Architecture</literal>"
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"Esta opción controla la arquitectura para la que se construyen los paquetes "
+"mediante <command>apt-get source --compile</command> y cómo se satisfacen "
+"las dependencias cruzadas de construcción. No se define por omisión, lo que "
+"implica que la arquitectura anfitrión es la misma que la de construcción "
+"(definida con <literal>APT::Architecture</literal>). Opción de "
+"configuración: <literal>APT::Get::Host-Architecture</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"Descarga los paquetes fuente y luego los compila. Opción de configuración: "
+"<literal>APT::Get::Compile</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"Ignora los paquetes retenidos. Esto hace que <command>apt-get</command> "
+"ignore toda retención impuesta a un paquete. Esto puede ser útil junto a "
+"<literal>dist-upgrade</literal> para invalidar un gran número de paquetes "
+"retenidos de manera no deseada. Opción de configuración: <literal>APT::"
+"Ignore-Hold</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"No actualiza los paquetes. Cuando se usa junto a <literal>install</literal>, "
+"<literal>no-upgrade</literal>, impide que se actualicen los paquetes "
+"definidos en la línea de órdenes si ya están instalados. Opción de "
+"configuración: <literal>APT::Get::Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"No instala paquetes nuevos. Cuando se usa junto a <literal>install</"
+"literal>, <literal>only-upgrade</literal> solo actualiza los paquetes "
+"definidos en la línea de órdenes que ya están instalados, e ignora las "
+"órdenes de instalación de paquetes nuevos. Opción de configuración: "
+"<literal>APT::Get::Only-Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"Supone una respuesta afirmativa a todas las preguntas. Ésta es una opción "
+"peligrosa que hará que apt continúe sin preguntar incluso si se va a "
+"realizar algo potencialmente peligroso. No se debe usar excepto en "
+"situaciones muy especiales. ¡Utilizar <literal>force-yes</literal> puede "
+"destruir su sistema! Opción de configuración: <literal>APT::Get::force-yes</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"Supone una respuesta afirmativa a todas las preguntas. Ésta es una opción "
+"peligrosa que hará que apt continúe sin preguntar incluso si se va a "
+"realizar algo potencialmente peligroso. No se debe usar excepto en "
+"situaciones muy especiales. ¡Utilizar <literal>force-yes</literal> puede "
+"destruir su sistema! Opción de configuración: <literal>APT::Get::force-yes</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"Supone una respuesta afirmativa a todas las preguntas. Ésta es una opción "
+"peligrosa que hará que apt continúe sin preguntar incluso si se va a "
+"realizar algo potencialmente peligroso. No se debe usar excepto en "
+"situaciones muy especiales. ¡Utilizar <literal>force-yes</literal> puede "
+"destruir su sistema! Opción de configuración: <literal>APT::Get::force-yes</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"Supone una respuesta afirmativa a todas las preguntas. Ésta es una opción "
+"peligrosa que hará que apt continúe sin preguntar incluso si se va a "
+"realizar algo potencialmente peligroso. No se debe usar excepto en "
+"situaciones muy especiales. ¡Utilizar <literal>force-yes</literal> puede "
+"destruir su sistema! Opción de configuración: <literal>APT::Get::force-yes</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"Muestra los URI de los ficheros a instalar en vez de descargarlos. Cada URI "
+"contiene la dirección de dónde se obtendrá el paquete, el fichero de "
+"destino, su tamaño y la suma de control MD5 esperada. Tenga en cuenta que el "
+"nombre de fichero no siempre coincide con el nombre del fichero en el sitio "
+"remoto. Esto también funciona con las órdenes <literal>source</literal> y "
+"<literal>update</literal>. Cuando se usa con la orden <literal>update</"
+"literal> no se incluyen ni el resumen MD5 ni el tamaño, y es tarea del "
+"usuario descomprimir cualquier fichero comprimido. Opción de configuración: "
+"<literal>APT::Get::Print-URIs</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"Utiliza «purge» (purgar) en lugar de «remove» para todo aquello que se "
+"desinstale. Un asterisco («*») aparecerá a continuación de los paquetes que "
+"se vayan a purgar. <option>remove --purge</option> es equivalente a la orden "
+"<option>purge</option>. Opción de configuración: <literal>APT::Get::Purge</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"Reinstala los paquetes ya instalados, incluso si son la última versión "
+"disponible del paquete. Opción de configuración: <literal>APT::Get::"
+"ReInstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"Esta opción está activada de forma predeterminada, si quiere desactivarla "
+"utilice <literal>--no-list-cleanup</literal>. Cuando está activada "
+"<command>apt-get</command> administra automáticamente los contenidos de "
+"<filename>&statedir;/lists</filename> para asegurarse de que se borran los "
+"ficheros obsoletos. La única razón para desactivarla es si realiza "
+"frecuentemente cambios en la lista de fuentes. Opción de configuración: "
+"<literal>APT::Get::List-Cleanup</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"Esta opción controla la entrada predeterminada del motor de directrices, "
+"creando un anclaje («pin») con una prioridad 990 usando la cadena de "
+"caracteres de la distribución especificada. Esto invalida la configuración "
+"general de <filename>/etc/apt/preferences</filename>. Aquellos paquetes con "
+"un anclaje específico no se verán afectados por el valor de esta opción. "
+"Resumiendo, esta opción le da control sobre la distribución de la que se "
+"obtienen los paquetes. Algunos ejemplos comunes pueden ser <option>-t "
+"'2.1*'</option> o <option>-t unstable</option> o <option>-t sid</option>. "
+"Opción de configuración: <literal>APT::Default-Release</literal>. Consulte "
+"también la página del manual de &apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"Sólo realiza acciones consideradas «triviales». Esta opción está relacionada "
+"con <option>--assume-yes</option>, de modo que donde <option>--assume-yes</"
+"option> responde afirmativamente a cualquier pregunta, <option>--trivial-"
+"only</option> responderá negativamente. Opción de configuración: "
+"<literal>APT::Get::Trivial-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"Si se va a desinstalar algún paquete, apt-get terminará inmediatamente sin "
+"preguntar. Opción de configuración: <literal>APT::Get::Remove</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"Si la orden es <literal>install</literal> o <literal>remove</literal>, esta "
+"opción realiza el funcionamiento de <literal>autoremove</literal>, "
+"eliminando dependencias en desuso. Opción de configuración: <literal>APT::"
+"Get::AutomaticRemove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"Sólo tiene sentido para las órdenes <literal>source</literal> y "
+"<literal>build-dep</literal>. Indica que los nombres de paquetes fuente "
+"proporcionados no se deben tratar a través de la tabla de binarios. Esto "
+"significa que si se especifica esta opción, estas órdenes sólo aceptarán "
+"como argumento nombres de paquetes fuente, en vez de aceptar nombres de "
+"paquetes binarios, para luego buscar el nombre del paquete fuente "
+"correspondiente. Opción de configuración: <literal>APT::Get::Only-Source</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"Descarga sólo el fichero diff, dsc o tar del archivo de fuentes. Opciones de "
+"configuración: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::"
+"Dsc-Only</literal> y <literal>APT::Get::Tar-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"Procesa sólo las dependencias de construcción dependientes de la "
+"arquitectura. Opción de configuración: <literal>APT::Get::Arch-Only</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Only process architecture-dependent build-dependencies. Configuration "
+#| "Item: <literal>APT::Get::Arch-Only</literal>."
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"Procesa sólo las dependencias de construcción dependientes de la "
+"arquitectura. Opción de configuración: <literal>APT::Get::Arch-Only</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "Ficheros"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+#| "&apt-config;, &apt-secure;, The APT User's guide in &guidesdir;, &apt-"
+#| "preferences;, the APT Howto."
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+"&apt-config;, &apt-secure;, la guía de usuario de APT en &guidesdir;, &apt-"
+"preferences;, el Cómo de APT."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> devuelve cero si no hay ningún error, y el valor "
+"100 en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "Realiza consultas al caché de APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<command>apt-cache</command> performs a variety of operations on APT's "
+#| "package cache. <command>apt-cache</command> does not manipulate the state "
+#| "of the system but does provide operations to search and generate "
+#| "interesting output from the package metadata."
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> realiza una serie de operaciones sobre la caché "
+"(registro o lista) de paquetes de APT. <command>apt-cache</command> no "
+"modifica el estado del sistema pero proporciona operaciones de búsqueda y "
+"genera información interesante a partir de los metadatos del paquete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> genera la caché de paquetes de APT. Todas las "
+"órdenes realizan esta acción de forma implícita si no se detecta la caché o "
+"si está obsoleta."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"<literal>showpkg</literal> muestra la información relativa a los paquetes "
+"listados en la línea de órdenes. Los argumentos restantes se consideran "
+"nombres de paquetes. Para cada paquete de la lista se listan las versiones y "
+"dependencias inversas disponibles, así como las dependencias de cada "
+"versión. Las dependencias (normales) son los paquetes de los que depende el "
+"paquete en cuestión, las dependencias inversas son los paquetes que dependen "
+"del paquete en cuestión. Por ello, las dependencias se deben satisfacer para "
+"un paquete, pero las dependencias inversas no. Por ejemplo, <command>apt-"
+"cache showpkg libreadline2</command> produciría una salida similar a la "
+"siguiente:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Paquete: libreadline2\n"
+"Versiones: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Dependencias inversas: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencias:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"La información de salida muestra que libreadline2, con versión 2.1-12, "
+"depende de libc5 y ncurses3.0, que se deben instalar para que libreadline2 "
+"funcione. Además, libreadlineg2 y libreadline2-altdev dependen de "
+"libreadline2. De modo que si libreadline2 está instalado, libc5 y ncurses3.0 "
+"(y ldso) también deben estar instalados, pero libreadlineg2 y libreadline2-"
+"altdev no tienen que estarlo. Para el significado específico del resto de la "
+"salida lo mejor es consultar el código fuente de apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"<literal>stats</literal> muestra algunas estadísticas sobre la caché. No "
+"necesita ningún argumento adicional. Las estadísticas que muestra son:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>Total de nombres de paquetes</literal> es el número de paquetes "
+"encontrados en la caché."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>Paquetes normales</literal> es el número de nombres de paquetes "
+"normales. Estos paquetes tienen una correspondencia unívoca entre sus "
+"nombres y los nombres que usan otros paquetes al listarlos en sus "
+"dependencias. La mayoría de los paquetes pertenecen a este grupo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>Paquetes virtuales puros</literal> es el número de paquetes que "
+"existen sólo como nombre de un paquete virtual, esto es, paquetes que sólo "
+"«proporcionan» el nombre del paquete virtual, y no hay ningún paquete más "
+"que use el nombre. Por ejemplo, «mail-transport-agent» en un sistema Debian "
+"es un paquete virtual puro, varios paquetes proporcionan «mail-transport-"
+"agent», pero no hay ningún paquete que se llame «mail-transport-agent»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>Paquetes virtuales únicos</literal> es el número de paquetes con un "
+"único paquete que proporciona un paquete virtual en concreto. Por ejemplo, "
+"en un sistema Debian, «X11-text-viewer» es un paquete virtual, pero sólo un "
+"paquete, xless, proporciona «X11-text-viewer»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>Paquetes virtuales mixtos</literal> es el número de paquetes que o "
+"bien proporcionan un determinado paquete virtual o tienen el mismo nombre "
+"como paquete virtual y como paquete normal. Por ejemplo, en un sistema "
+"Debian, «debconf» es a la vez un paquete normal, y que proporciona el "
+"paquete debconf-tiny."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>No encontrados</literal> es el número de nombres de paquetes "
+"mencionados como dependencia pero que ningún paquete los proporciona. Estos "
+"paquetes pueden ser una prueba de que no se tiene acceso a toda la "
+"distribución, o de la eliminación de algún paquete (real o virtual) dentro "
+"de la distribución. Normalmente se hace referencia a ellos desde los campos "
+"«Conflicts» o «Breaks» de la descripción de los paquetes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>Total distinct</literal> versions is the number of package "
+#| "versions found in the cache; this value is therefore at least equal to "
+#| "the number of total package names. If more than one distribution is being "
+#| "accessed (for instance, \"stable\" and \"unstable\"), this value can be "
+#| "considerably larger than the number of total package names."
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>Total de versiones distintas</literal> es el número de versiones de "
+"paquetes encontradas en la caché, por lo tanto el número es al menos igual "
+"al número total de paquetes. Si se analiza más de una distribución "
+"(«estable» e «inestable», por ejemplo) al mismo tiempo, este valor puede ser "
+"considerablemente mayor que el número total de paquetes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>Total de dependencias</literal> es el número total de relaciones de "
+"dependencia de todos los paquetes de la caché."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>showsrc</literal> displays all the source package records that "
+#| "match the given package names. All versions are shown, as well as all "
+#| "records that declare the name to be a binary package."
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> muestra todos los campos de los paquetes fuente "
+"que coinciden con los nombres de los paquetes proporcionados. Se muestran "
+"todas las versiones, así como todos los campos cuyo nombre manifiesta que "
+"son binarios."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"<literal>dump</literal> muestra una pequeña lista de todos los paquetes en "
+"la caché. Fundamentalmente para depuración."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"<literal>dumpavail</literal> muestra por la salida estándar una lista de los "
+"paquetes disponibles. Esta lista es apropiada para su uso con &dpkg; y, "
+"además, la usa el método &dselect;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"<literal>unmet</literal> muestra un resumen de todas las dependencias no "
+"satisfechas en la caché de paquetes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"<literal>show</literal> realiza una función similar a <command>dpkg --print-"
+"avail</command>, muestra los campos del paquete para los paquetes nombrados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>search</literal> performs a full text search on all available "
+#| "package lists for the POSIX regex pattern given, see &regex;. It "
+#| "searches the package names and the descriptions for an occurrence of the "
+#| "regular expression and prints out the package name and the short "
+#| "description, including virtual package names. If <option>--full</option> "
+#| "is given then output identical to <literal>show</literal> is produced for "
+#| "each matched package, and if <option>--names-only</option> is given then "
+#| "the long description is not searched, only the package name is."
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"<literal>search</literal> realiza una búsqueda de la expresión regular POSIX "
+"dada en todo el texto de todos los paquetes disponibles, consulte &regex;. "
+"Busca la expresión regular tanto en el nombre de los paquetes como en su "
+"descripción y muestra el nombre del paquete y una pequeña descripción de "
+"éste, incluyendo nombres de paquetes virtuales. Si se proporciona el "
+"argumento <option>--full</option> el resultado es igual al que produce "
+"<literal>show</literal> para cada paquete, pero si se proporciona el "
+"argumento <option>--names-only</option> entonces sólo se busca en el nombre "
+"de los paquetes, no en la descripción larga."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+"Se pueden usar argumentos separados para especificar varios patrones de "
+"búsqueda que se juntarán mediante una «Y lógica»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"<literal>depends</literal> muestra una lista de todas la dependencias de un "
+"paquete y de todos los demás paquetes que la pueden satisfacer."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"<literal>rdepends</literal> muestra las dependencias inversas de un paquete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"Esta orden muestra el nombre de todos los paquetes que APT conoce. El "
+"argumento opcional es un prefijo para filtrar la lista de nombres. La salida "
+"es apropiada para su uso junto con la función de completado automático "
+"mediante tabulador en un intérprete de órdenes y se genera de forma "
+"extremadamente rápida. El mejor uso de la orden es con la opción <option>--"
+"generate</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"Tenga en cuenta que un paquete que conoce APT puede no estar necesariamente "
+"disponible para descargar, instalar o instalado, por ejemplo: los paquetes "
+"virtuales también aparecen en la lista generada."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"<literal>dotty</literal> toma una lista de paquetes de la línea de ordenes y "
+"genera una salida apropiada para su uso con dotty, del paquete <ulink url="
+"\"http://www.research.att.com/sw/tools/graphviz/\">GraphViz</ulink>. El "
+"resultado será un conjunto de nodos y uniones representando las relaciones "
+"entre los paquetes. De forma predeterminada, los paquetes proporcionados "
+"mostrarán todas sus dependencias, lo que puede producir un grafo muy grande. "
+"Para limitar la salida sólo a los paquetes listados en la línea de órdenes, "
+"active la opción <literal>APT::Cache::GivenOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"Los nodos resultantes tendrán varias formas: los paquetes normales son "
+"cajas, los paquetes virtuales puros son triángulos, los paquetes virtuales "
+"mixtos son diamantes y los paquetes no encontrados son hexágonos. Las cajas "
+"naranjas simbolizan que el recorrido se detuvo en paquetes que ningún otro "
+"declara como dependencia, las líneas azules son pre-dependencias y las "
+"líneas verdes son conflictos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr "Tenga cuidado, dotty no puede dibujar grandes conjuntos de paquetes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"Lo mismo que <literal>dotty</literal>, sólo para xvcg de la <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">herramienta VCG</"
+"ulink>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> está pensado para ayudar a depurar asuntos "
+"relacionados con el fichero de preferencias. Sin argumentos mostrará las "
+"prioridades de cada fuente. De forma alternativa, muestra una información "
+"detallada acerca de la prioridad de selección del paquete nombrado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"La orden <literal>madison</literal> de <literal>apt-cache</literal> intenta "
+"imitar el formato de salida y parte de la funcionalidad de la herramienta "
+"para la gestión del archivo de Debian, <literal>madison</literal>. Muestra "
+"las versiones disponibles de un determinado paquete en un formato tabular. A "
+"diferencia del <literal>madison</literal> original, sólo puede mostrar "
+"información para la arquitectura para la que APT obtuvo las listas de "
+"paquetes (<literal>APT::Architecture</literal>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"Define el fichero donde guardar la caché de paquetes. La caché de paquetes "
+"es la caché primaria usada para todas las operaciones. Opción de "
+"configuración: <literal>Dir::Cache::pkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"Escoge el fichero para guardar la caché fuente. Sólo <literal>gencaches</"
+"literal> usa esta caché y guarda una versión analizada de la información de "
+"los paquetes de las fuentes remotas. Cuando se genera la caché de paquetes "
+"la caché fuente se usa para evitar analizar todos los ficheros de paquetes. "
+"Opción de configuración: <literal>Dir::Cache::srcpkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Produce una salida adecuada para su almacenamiento, omitiendo los "
+"indicadores de progreso. Más «q» producirán una salida más silenciosa, hasta "
+"un máximo de dos. También se puede usar <option>-q=#</option> para definir "
+"el nivel de silencio, ignorando el fichero de configuración. Opción de "
+"configuración: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"Muestra sólo las dependencias importantes, se usa junto con <literal>unmet</"
+"literal> y <literal>depends</literal>. Hace que sólo se muestren las "
+"dependencias y pre-dependencias. Opción de configuración: <literal>APT::"
+"Cache::Important</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "Per default the <literal>depends</literal> and <literal>rdepends</"
+#| "literal> print all dependencies. This can be tweaked with these flags "
+#| "which will omit the specified dependency type. Configuration Item: "
+#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
+#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"Por omisión, <literal>depends</literal> y <literal>rdepends</literal> "
+"muestran todas las dependencias. Este comportamiento se puede modificar con "
+"los siguientes parámetros, los cuales omitirán el tipo de dependencia "
+"especificado. Opción de configuración: <literal>APT::Cache::"
+"Show<replaceable>Tipo-de Dependencia</replaceable></literal>. Por ejemplo, "
+"<literal>APT::Cache::ShowRecommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"Muestra todos los campos de información cuando se realiza una búsqueda. "
+"Opción de configuración: <literal>APT::Cache::ShowFull</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"Muestra los campos completos de todas las versiones disponibles. Es el "
+"comportamiento predeterminado, para desactivarlo utilice <option>--no-all-"
+"versions</option>. Si se especifica <option>--no-all-versions</option>, sólo "
+"se muestra la versión candidata (la que se escogería para instalar). Esta "
+"opción sólo se aplica a la orden <literal>show</literal>. Opción de "
+"configuración: <literal>APT::Cache::AllVersions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"Realiza una regeneración completa de la caché de paquetes, en vez de usarla "
+"tal y como está. Esta es la opción predeterminada, para desactivarla use "
+"<option>--no-generate</option>. Opción de configuración: <literal>APT::"
+"Cache::Generate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "Only search on the package names, not the long descriptions. "
+#| "Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"Sólo busca en los nombres de paquetes, no en las descripciones largas. "
+"Opción de configuración: <literal>APT::Cache::NamesOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"Hace que <literal>pkgnames</literal> muestre todos los nombres, incluyendo "
+"los paquetes virtuales y las dependencias no encontradas. Opción de "
+"configuración: <literal>APT::Cache::AllNames</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"Hace que <literal>depends</literal> y <literal>rdepends</literal> sean "
+"recursivos de modo que todos los paquetes mencionados se muestran sólo una "
+"vez. Opción de configuración <literal>APT::Cache::RecurseDepends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"Limita la salida de <literal>depends</literal> y <literal>rdepends</literal> "
+"a paquetes actualmente instalados. Opción de configuración: <literal>APT::"
+"Cache::Installed</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "Use source index field ordering. Configuration Item: <literal>APT::"
+#| "SortPkgs::Source</literal>."
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"Utililza el orden por el campo de índice de fuentes. Opción de "
+"configuración: <literal>APT::SortPkgs::Source</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> devuelve cero si no hay ningún error, y el "
+"valor 100 en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "Herramienta para gestionar las claves de APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> sirve para gestionar la lista de claves que APT "
+"usa para autenticar paquetes. Los paquetes autenticados mediante estas "
+"claves se consideran de confianza."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "Órdenes"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"Añade una nueva clave a la lista claves de confianza. La clave se lee desde "
+"el fichero dado con el parámetro &synopsis-param-filename; o desde la "
+"entrada estándar si el nombre de fichero se define como <literal>-</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr "Elimina una clave de la lista de claves de confianza."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr "Muestra la clave &synopsis-param-keyid; por la salida estándar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "Devuelve todas las claves de confianza por la salida estándar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+#, fuzzy
+#| msgid "List trusted keys."
+msgid "List trusted keys with fingerprints."
+msgstr "Lista las claves de confianza."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"Actualiza el registro de claves local con el registro de claves del archivo "
+"y elimina del registro local las claves de archivo que ya no son válidas. El "
+"registro de claves del archivo se encuentra en el paquete <literal>archive-"
+"keyring</literal> de su distribución; esto es, el paquete &keyring-package; "
+"en &keyring-distro;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"Realiza una actualización similar a la realizada por la orden "
+"<command>update</command>, pero obtiene el registro de claves de archivo de "
+"una dirección URI, y la valida con la clave maestra. Requiere &wget;, y una "
+"construcción de APT configurada con un servidor de dónde obtener la clave "
+"maestra con la que validar. En Debian, APT no es compatible con esta orden, "
+"y en su lugar depende de la orden <command>update</command>, pero la versión "
+"de APT para Ubuntu sí es compatible."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "Opciones"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"Tenga en cuenta que las opciones se deben definir antes de las órdenes "
+"descritas en el sección anterior."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"Con esta opción es posible definir un fichero de registro de claves "
+"específico sobre el que la orden debe actuar. Por omisión, la orden se "
+"ejecuta con el fichero <filename>trusted.gpg</filename> así como con los "
+"fragmentos en el directorio <filename>trusted.gpg.d</filename>, aunque "
+"<filename>trusted.gpg</filename> es el registro de claves principal, esto "
+"es, por ejemplo, que las claves nuevas se añaden a este fichero."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "When you request that a package is installed, and as a result other "
+#| "packages are installed to satisfy its dependencies, the dependencies are "
+#| "marked as being automatically installed. Once these automatically "
+#| "installed packages are no longer depended on by any manually installed "
+#| "packages, they will be removed by e.g. <command>apt-get</command> or "
+#| "<command>aptitude</command>."
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"Cuando solicita la instalación de un paquete y como resultado de ello se "
+"instalan otros paquetes para satisfacer sus dependencias, éstos se marcarán "
+"como instalados automáticamente. Una vez que estos paquetes instalados "
+"automáticamente ya no son necesarios para ningún paquete instalado "
+"manualmente, <command>apt-get</command> o <command>aptitude</command> los "
+"eliminará."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> se utiliza para marcar un paquete como "
+"automáticamente instalado, provocando la eliminación del paquete cuando "
+"ningún otro paquete manualmente instalado depende de este paquete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> sirve para marcar un paquete como instalado "
+"manualmente, impidiendo la eliminación automática de este paquete si ningún "
+"otro depende de él."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>auto</literal> is used to mark a package as being automatically "
+#| "installed, which will cause the package to be removed when no more "
+#| "manually installed packages depend on this package."
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>auto</literal> se utiliza para marcar un paquete como "
+"automáticamente instalado, provocando la eliminación del paquete cuando "
+"ningún otro paquete manualmente instalado depende de este paquete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal> muestra una lista de paquetes automáticamente "
+"instalados en diferentes líneas. Si no se introduce ningún paquete, se "
+"muestran todos los paquetes automáticamente instalados. Si se introducen "
+"paquetes solo se muestran aquellos automáticamente instalados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> se puede utilizar de la misma forma que "
+"<literal>showauto</literal>, a excepción de que muestra una lista de "
+"paquetes manualmente instalados."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"Escribe y lee las estadísticas de los paquetes con el nombre de fichero "
+"definido con el parámetro &synopsis-param-filename;, en lugar de la "
+"ubicación predeterminada, que es <filename>extended_status</filename> en el "
+"directorio definido con la opción de configuración: <literal>Dir::State</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>manual</literal> is used to mark a package as being manually "
+#| "installed, which will prevent the package from being automatically "
+#| "removed if no other packages depend on it."
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>manual</literal> sirve para marcar un paquete como instalado "
+"manualmente, impidiendo la eliminación automática de este paquete si ningún "
+"otro depende de él."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> sirve para permitir cualquier acción habitual "
+"sobre un paquete previamente marcado con «hold»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> muestra una lista de paquetes retenidos («hold») "
+"de la misma forma que las otras órdenes «show»."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> devuelve cero si no hay ningún error, y el valor "
+"100 en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "Compatibilidad con la autenticación en el archivo para APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "Starting with version 0.6, <command>apt</command> contains code that does "
+#| "signature checking of the Release file for all archives. This ensures "
+#| "that packages in the archive can't be modified by people who have no "
+#| "access to the Release file signing key."
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"Desde la versión 0.6, <command>apt</command> contiene el código que realiza "
+"la comprobación de la firma del fichero «Release» para todos los archivos. "
+"Esto asegura que los paquetes del archivo no se han modificado por alguien "
+"sin acceso a la clave con la que se firmó el fichero «Release»."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this "
+#| "new authentication feature."
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"Las interfaces de gestión de paquetes &apt-get;, &aptitude; y &synaptic; "
+"pueden usar esta nueva funcionalidad de autenticación."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted archives"
+msgid "Unsigned Repositories"
+msgstr "Archivos de confianza"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted archives"
+msgid "Signed Repositories"
+msgstr "Archivos de confianza"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "The chain of trust from an apt archive to the end user is made up of "
+#| "several steps. <command>apt-secure</command> is the last step in this "
+#| "chain; trusting an archive does not mean that you trust its packages not "
+#| "to contain malicious code, but means that you trust the archive "
+#| "maintainer. It's the archive maintainer's responsibility to ensure that "
+#| "the archive's integrity is preserved."
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"La cadena de confianza desde un archivo apt a un usuario final se realiza en "
+"diferentes pasos. <command>apt-secure</command> es el último paso en esta "
+"cadena; confiar en un archivo no implica que los paquetes en los que se "
+"confía no contengan código malicioso, pero significa que se confía en el "
+"responsable del archivo. El responsable del archivo es el responsable de "
+"asegurar que la integridad del archivo es correcta."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"apt-secure no revisa las firmas a nivel de paquete. Si necesita herramientas "
+"para realizar esto, debería ver <command>debsig-verify</command> y "
+"<command>debsign</command> (proporcionados en los paquetes debsig-verify y "
+"devscripts respectivamente)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "The chain of trust in Debian starts when a maintainer uploads a new "
+#| "package or a new version of a package to the Debian archive. In order to "
+#| "become effective, this upload needs to be signed by a key contained in "
+#| "the Debian Maintainers keyring (available in the debian-keyring package). "
+#| "Maintainers' keys are signed by other maintainers following pre-"
+#| "established procedures to ensure the identity of the key holder."
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"La cadena de confianza de Debian comienza cuando un mantenedor sube un nuevo "
+"paquete o una nueva versión de un paquete al archivo de Debian. Para que la "
+"subida sea efectiva, se debe firmar con una clave de un mantenedor del "
+"registro de claves de los mantenedores de Debian (disponible en el paquete "
+"debian-keyring). Las claves de los mantenedores son firmados por otros "
+"mantenedores siguiendo unos procedimientos pre-establecidos para asegurar la "
+"identidad del propietario de la clave."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"Una vez que el paquete enviado se ha verificado e incluido en el archivo, se "
+"elimina la firma del mantenedor, y se realizan las sumas de control del "
+"paquete, que se incluyen en el fichero «Packages». A continuación, se "
+"realiza una suma de control de todos los ficheros «Package», y se incluyen "
+"en el fichero «Release». Acto seguido, el fichero «Release» se firma con la "
+"clave del archivo de esta distribución de &keyring-distro;, y se distribuye "
+"junto con los paquetes y los ficheros «Packages» de las réplicas de &keyring-"
+"distro;. Las claves están disponibles en el registro de claves del archivo "
+"&keyring-distro; en el paquete &keyring-package; package."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"El usuario final puede comprobar la firma del fichero «Release», extraer la "
+"suma de control de un paquete de él y compararlo con la suma de control del "
+"paquete descargado manualmente, o depender de la comprobación automática de "
+"APT."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"Tenga en cuenta que esto es distinto a comprobar las firmas de cada paquete "
+"individualmente. Se diseñó para prevenir dos posible ataques:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>Ataques de red «man in the middle» (persona entre medias)</"
+"literal>. Sin la comprobación de las firmas, se puede introducir un agente "
+"dañino en el proceso de descarga del paquete que ejecute programas con "
+"contenido malicioso para controlar un elemento de la red (enrutador, switch, "
+"etc) o para redirigir el tráfico a un servidor ficticio (mediante ataques de "
+"envenenamiento de ARP o de DNS)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>Réplica de la red comprometida</literal>. Sin la comprobación de la "
+"firma, una persona malvada puede comprometer una réplica y modificar los "
+"ficheros de ésta para propagar programas con contenido malicioso a todos los "
+"usuarios que descarguen paquetes de dicha réplica."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "However, it does not defend against a compromise of the Debian master "
+#| "server itself (which signs the packages) or against a compromise of the "
+#| "key used to sign the Release files. In any case, this mechanism can "
+#| "complement a per-package signature."
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"Sin embargo, esto no protege de un servidor maestro de Debian (que firma los "
+"paquetes) comprometido o contra una clave usada para firmar los ficheros "
+"«Release» comprometida. En cualquier caso, este mecanismo puede complementar "
+"una firma por paquete."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr "Configuración de usuario"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "<command>apt-key</command> is the program that manages the list of keys "
+#| "used by apt. It can be used to add or remove keys, although an "
+#| "installation of this release will automatically contain the default "
+#| "Debian archive signing keys used in the Debian package repositories."
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"<command>apt-key</command> es el programa que gestiona la lista de claves "
+"usadas por apt. Se puede usar para añadir o eliminar claves, aunque la "
+"instalación de esta versión contiene automáticamente las claves "
+"predeterminadas del archivo de Debian que se usan en los repositorios de "
+"paquetes de Debian."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"Para poder añadir una clave nueva primero necesita descargarla (debería "
+"asegurarse de que está usando un canal de comunicación seguro cuando la "
+"consiga), añádala con <command>apt-key</command> y ejecute <command>apt-get "
+"update</command> para que apt descargue y compruebe los ficheros "
+"<filename>InRelease</filename> o <filename>Release.gpg</filename> de los "
+"archivos de paquetes configurados."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Repository Configuration"
+msgstr "Configuración de usuario"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+"Si quiere proporcionar firmas de archivo en un archivo bajo su control tiene "
+"que:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"<emphasis>Crear un fichero «Release»</emphasis>, si no existe. Para ello se "
+"ejecuta <command>apt-ftparchive release</command> (proporcionado en apt-"
+"utils)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>Firme el fichero</emphasis>. Para ello, puede ejecutar "
+"<command>gpg --clearsign -o InRelease Release</command> y <command>gpg -abs -"
+"o Release.gpg Release</command>."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "<emphasis>Publish the key fingerprint</emphasis>, that way your users "
+#| "will know what key they need to import in order to authenticate the files "
+#| "in the archive."
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>Publicar la huella digital de la clave</emphasis>, de modo que los "
+"usuarios conozcan qué clave necesitan importar para autenticar los ficheros "
+"del archivo."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"Cuando los contenidos del archivo cambien (se añadan paquetes nuevos o se "
+"eliminen) el mantenedor del archivo tiene que seguir los dos primeros pasos "
+"explicados anteriormente."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"Para más información puede que quiera revisar el capítulo de la <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/"
+"ch7\">Infraestructura de Seguridad de Debian</ulink> del Manual de Seguridad "
+"de Debian (también disponible en el paquete harden-doc) y el <ulink url="
+"\"http://www.cryptnet.net/fdp/crypto/strong_distro.html\" >COMO Fortificar "
+"una Distribución</ulink> de V. Alex Brennen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "Autores de la página del manual"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"Esta página del manual se basa en el trabajo de Javier Fernández-Sanguino "
+"Peña, Isaac Jones, Colin Walters, Florian Weimer y Michael Vogt."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "Herramienta de APT para la gestión de discos ópticos"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"<command>apt-cdrom</command> se utiliza para añadir un disco óptico nuevo a "
+"la lista de fuentes disponibles de APT. <command>apt-cdrom</command> examina "
+"la estructura del disco, corrige los posibles errores de grabación y "
+"verifica los ficheros de índice."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"Se requiere utilizar <command>apt-cdrom</command> para añadir los discos al "
+"sistema APT, no se puede hacer manualmente. Además, debe insertar y analizar "
+"cada disco de un conjunto de discos por separado para detectar posibles "
+"errores de grabación."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"<literal>add</literal> añade un disco nuevo a la lista de fuentes. "
+"Desmontará el dispositivo del disco y pedirá que se inserte un disco para "
+"iniciar el análisis y copiado de los ficheros de índice. Si el disco no "
+"contiene un directorio <filename>.disk</filename> apropiado, se le pedirá un "
+"título descriptivo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"APT utiliza un identificador de disco óptico para identificar el disco "
+"presente en la unidad lectora, y mantiene una base de datos de estos "
+"identificadores en <filename>&statedir;/cdroms.list</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"Una herramienta de depuración para informar de la identidad del disco actual "
+"así como del nombre del fichero guardado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+#, fuzzy
+#| msgid ""
+#| "Mount point; specify the location to mount the CD-ROM. This mount point "
+#| "must be listed in <filename>/etc/fstab</filename> and properly "
+#| "configured. Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"Punto de montaje. Define el lugar donde se debe montar el disco óptico. El "
+"punto de montaje debe aparecer en <filename>/etc/fstab</filename> y estar "
+"correctamente configurado. Opción de configuración: <literal>Acquire::cdrom::"
+"mount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"Punto de montaje. Define el lugar donde se debe montar el disco óptico. El "
+"punto de montaje debe aparecer en <filename>/etc/fstab</filename> y estar "
+"correctamente configurado. Opción de configuración: <literal>Acquire::cdrom::"
+"mount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"Renombra un disco. Cambia la etiqueta de un disco o invalida la etiqueta del "
+"disco. Esta opción hará que <command>apt-cdrom</command> solicite una "
+"etiqueta nueva. Opción de configuración: <literal>APT::CDROM::Rename</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"No montar. Evita que <command>apt-cdrom</command> monte y desmonte el punto "
+"de montaje. Opción de configuración: <literal>APT::CDROM::NoMount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"Crea una copia rápida. Asume que los ficheros de paquete son válidos y no "
+"comprueba cada paquete. Esta opción sólo se debe usar si <command>apt-cdrom</"
+"command> comprobó el disco anteriormente y no detectó ningún error. Opción "
+"de configuración: <literal>APT::CDROM::Fast</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"Comprobación meticulosa de los paquetes. Esta opción puede ser necesaria con "
+"algunos discos viejos de Debian 1.1/1.2, que tienen los ficheros de paquete "
+"en lugares extraños. El análisis del disco óptico lleva mucho más tiempo, "
+"pero encontrará todo el contenido."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"Sin cambios. No cambia el fichero &sources-list; y no escribe los ficheros "
+"de índice. Aun así, se revisará todo. Opción de configuración: <literal>APT::"
+"CDROM::NoAct</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> devuelve cero si no hay ningún error y el valor "
+"100 en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "Programa para consultar la configuración de APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> es un programa interno que usan varios "
+"programas del conjunto de herramientas de APT para ofrecer un método de "
+"configuración sólido. Este programa accede al fichero principal de "
+"configuración <filename>/etc/apt/apt.conf</filename> de forma que resulta "
+"sencillo de usar por aplicaciones con scripts."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"Se utiliza para acceder a la información de la configuración mediante un "
+"script. Se proporcionan parejas de argumentos, el primero es una variable "
+"del intérprete de órdenes y el segundo el valor de la configuración que "
+"consultar. Como salida muestra una serie de órdenes asignadas al intérprete "
+"de órdenes para cada valor presente. Esto se debería usar de la siguiente "
+"manera en un script de intérprete de órdenes:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MiAplicación::opciones`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"Esto define la variable de entorno del intérprete de órdenes $OPTS con el "
+"valor de MyApp::Opciones, y con <option>-f</option> por omisión."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"La opción de configuración se puede corregir posteriormente con un «/"
+"[fdbi]». El parámetro «f» devuelve nombres de fichero, «d» devuelve los "
+"directorios, «b» devuelve verdadero o falso, e «i» devuelve un número "
+"entero. Cada uno de los valores devueltos se normaliza y se verifica "
+"internamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "Sólo muestra el contenido del espacio de configuración."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"Incluye opciones con un valor vacío. Este es el comportamiento "
+"predeterminado, utilice «--no-empty» para eliminarlos de la salida."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"Define la salida de cada opción de configuración. &percnt;t se sustituye con "
+"el nombre individual, &percnt;f con el nombre jerárquico completo, y &percnt;"
+"v con su valor. Si utiliza letras mayúsculas, los caracteres especiales del "
+"valor se codificaran para garantizar su uso seguro en una cadena delimitada "
+"por comillas, como define RFC822. Además, &percnt;n se sustituye con una "
+"línea nueva, y &percnt;N con una tabulación. Se puede mostrar un &percnt; "
+"utilizando &percnt;&percnt;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> devuelve cero si no hay ningún error, y el "
+"valor 100 en caso de error."
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "Documentación inicial de Debug::*."
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "Fichero de configuración de APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"<filename>/etc/apt/apt.conf</filename> es el fichero de configuración "
+"principal, compartido por todas las herramientas del conjunto APT, aunque no "
+"es la única ubicación donde se pueden definir opciones. El conjunto de "
+"herramientas también comparte el mismo analizador de línea de órdenes para "
+"ofrecer un entorno homogéneo."
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+"Cuando se inicia una herramienta de APT, leerá los ficheros de configuración "
+"en el siguiente orden:"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+"El fichero definido por la variable de entorno <envar>APT_CONFIG</envar> (de "
+"existir)."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"Todos los ficheros en <literal>Dir::Etc::Parts</literal> en orden "
+"alfanumérico ascendente cuya extensión de fichero no es «<literal>conf</"
+"literal>» y que solo contenga caracteres alfanuméricos, guión (-), guión "
+"bajo (_) y punto (.). De no ser así, APT informa de que ha ignorado un "
+"fichero si este no coincide con el patrón en la lista de configuración "
+"<literal>Dir::Ignore-Files-Silently</literal>. Si coincide, se ignora de "
+"forma silenciosa."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+"El fichero de configuración principal definido por <literal>Dir::Etc::main</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"Las opciones de línea de órdenes se aplican para anular directivas de "
+"configuración o para cargar más ficheros de configuración."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "Sintaxis"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"El fichero de configuración está organizado en forma de árbol con las "
+"opciones organizadas en grupos funcionales. Las opciones se proporcionan con "
+"dos puntos dobles; por ejemplo <literal>APT::Get::Assume-Yes</literal> es "
+"una opción de la herramienta Get, dentro del conjunto de herramientas de "
+"APT. Las opciones no se heredan de sus grupos paternos."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+"Sintácticamente, el modelo del lenguaje de configuración es similar a las "
+"herramientas de ISC como pueden ser «bind» y «dhcp». Las líneas que "
+"comienzan con <literal>//</literal> se tratan como comentarios (se ignoran), "
+"así como todo el texto que haya entre <literal>/*</literal> y <literal>*/</"
+"literal>, igual que en los comentarios de C/C++. Cada línea tiene la forma "
+"<literal>APT::Get::Assume-Yes \"true\";</literal>. Es necesario utilizar "
+"comillas y un punto y coma final. El valor debe estar en una única línea y "
+"no se permite concatenar cadenas. No se pueden incluir barras inversas «\\» "
+"o comillas adicionales. Un nombre de opción se compone de caracteres "
+"alfanuméricos y los caracteres «/-:._+». Un nuevo ámbito se puede abrir con "
+"llaves, como:"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+"con nuevas líneas ubicadas para hacerlo más legible. Las listas pueden "
+"crearse abriendo un nuevo ámbito e incluyendo una única cadena acotada entre "
+"comillas seguida de un punto y coma. Se pueden incluir varias entradas "
+"separadas por punto y coma."
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+"En general, el fichero de configuración de ejemplo &configureindex; es una "
+"buena guía para entender su aspecto."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+"El uso de las mayúsculas no afecta a los nombres de opciones de "
+"configuración, y por ello, en el ejemplo anterior, puede utilizar "
+"<literal>dpkg::pre-install-pkgs</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+"Los nombres de las opciones de configuración son opcionales si se define una "
+"lista como muestra el ejemplo anterior de <literal>DPkg::Pre-Install-Pkgs</"
+"literal>. Si no se define un nombre, simplemente se añade una nueva opción a "
+"la lista. Si se define un nombre, se puede redefinir la opción como "
+"cualquier otra opción reasignando un nuevo valor a la opción."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+"Se definen dos órdenes especiales, <literal>#include</literal> (ya obsoleto "
+"y no es compatible en implementaciones alternativas) y <literal>#clear</"
+"literal>. <literal>#include</literal> incluirá el fichero proporcionado, a "
+"menos que el final del nombre del fichero acabe en una barra, en cuyo caso "
+"se incluye el directorio entero. <literal>#clear</literal> se usa para "
+"borrar parte del árbol de configuración. El elemento especificado y sus "
+"descendientes se eliminarán. (Tenga en cuenta que estas líneas también deben "
+"acabar con punto y coma)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+"La orden <literal>#clear</literal> ofrece la única forma de eliminar una "
+"lista o un ámbito completo. Reabrir un ámbito (o utilizar la sintaxis de "
+"adición de <literal>::</literal> que se describe a continuación) "
+"<emphasis>no</emphasis> redefinirá las entradas escritas anteriormente. Sólo "
+"se pueden redefinir las opciones asignándolas un nuevo valor; las listas y "
+"los ámbitos no se pueden redefinir, sólo eliminar."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+"Todas las herramientas de APT aceptan la opción «-o» que permite definir una "
+"directriz arbitraria de configuración que se define en la línea de órdenes. "
+"La sintaxis es un nombre de opción completo (por ejemplo, <literal>APT::Get::"
+"Assume-Yes</literal>) seguido por signos de igualdad y el nuevo valor de la "
+"opción. Para añadir un nuevo elemento a lista, añada <literal>::</literal> "
+"al final del nombre de la lista. (Como puede imaginar, no puede usar la "
+"sintaxis de ámbitos en la línea de órdenes)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+"Tenga en cuenta que añadir elementos a la lista mediante <literal>::</"
+"literal> solo funciona para un elemento por línea, y no se debe utilizar con "
+"la sintaxis de ámbitos (que añade <literal>::</literal> de forma implícita). "
+"Utilizar las dos sintaxis combinadas provocaría un fallo del que "
+"lamentablemente dependen algunos usuarios: una opción con el nombre no "
+"habitual «<literal>::</literal>» que actúa como cualquier otra opción con un "
+"nombre. Esto presenta varios problemas; por ejemplo, los usuarios que "
+"escriban varias líneas con esta sintaxis <emphasis>errónea</emphasis> "
+"esperando que se añada a una lista obtendrían lo contrario, ya que solo se "
+"utilizaría la última asignación para la opción «<literal>::</literal>». Las "
+"versiones futuras de APT mostrarán los fallos y detendrán el funcionamiento "
+"si encuentran algún uso inadecuado, y por ello debe corregir tales "
+"declaraciones ahora que APT no muestra fallos de forma explícita."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr "El grupo APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+"Este grupo de opciones controla el comportamiento general de APT así como "
+"mantiene las opciones para todas las herramientas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+"La arquitectura del sistema, define la arquitectura a usar al obtener los "
+"ficheros y analizar las listas de paquetes. El valor predeterminado es la "
+"arquitectura para la que apt se compiló."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+"Todas las arquitecturas que el sistema permite. Por ejemplo, los "
+"procesadores que incorporan el conjunto de instrucciones <literal>amd64</"
+"literal> (también llamado <literal>x86-64</literal>) permiten ejecutar "
+"binarios compilados para el conjunto de instrucciones <literal>i386</"
+"literal> (<literal>x86</literal>). Esta lista se utiliza al obtener paquetes "
+"y analizar las listas de paquetes. El valor predeterminado es la "
+"arquitectura nativa del sistema (<literal>APT::Architecture</literal>), y "
+"las arquitecturas externas se añaden al registro mediante <command>dpkg --"
+"add-architecture</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+"La versión predeterminada de la que se instalarán los paquetes, si hay más "
+"de una versión disponible. Contiene el nombre de la versión, ya sea el "
+"nombre en código o el número de la versión. Por ejemplo: «stable», "
+"«testing», «unstable», «&debian-stable-codename;», «&debian-testing-"
+"codename;», «4.0», «5.0*». Consulte también &apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+"Ignora paquetes retenidos. Esta opción global provoca que el solucionador de "
+"problemas ignore los paquetes retenidos en la toma de decisiones."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+"Activo de forma predeterminada. Cuando se activa la función «autoclean», "
+"ésta eliminará cualquier paquete del almacén que ya no se pueda descargar. "
+"Si se desactiva, entonces los paquetes que están localmente instalados son "
+"excluidos de la limpieza - tenga en cuenta que APT no proporciona ningún "
+"mecanismo directo para reinstalarlos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+"Activo de forma predeterminada, lo que provoca que APT instale paquetes "
+"esenciales e importantes en la siguiente acción de instalación/actualización "
+"para así limitar el efecto de un fallo de invocación a &dpkg;. Si se "
+"desactiva esta opción, APT trata un paquete importante de la misma forma que "
+"un paquete extra: entre el desempaquetado del paquete A y su configuración "
+"se pueden dar otros desempaquetados o invocaciones de configuración para "
+"otros paquete no relacionados, como B, C, etc. Si esto último provoca un "
+"fallo en la invocación a &dpkg; (por ejemplo, porque los scripts de "
+"desarrollador del paquete B provocan un error), el resultado es un estado "
+"del sistema en el que el paquete A está desempaquetado pero no configurado, "
+"lo que puede afectar al correcto funcionamiento de los paquetes dependientes "
+"del paquete A, ya que no se satisface la dependencia sobre éste."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+"El marcador de configuración inmediata también se aplica en los casos "
+"problemáticos de dependencias circulares, ya que una dependencia con el "
+"marcador de configuración inmediata equivale a una predependencia. En "
+"teoría, esto permite que APT reconozca un caso en el que no puede realizar "
+"una configuración inmediata, interrumpa la operación, y sugiera al usuario "
+"la desactivación temporal de la opción para poder completar la operación. "
+"Tenga en cuenta el uso de la palabra «teoría»; el uso real ha provocado este "
+"problema muy pocas veces, en versiones de publicaciones no estables, y "
+"provocado por las dependencias erróneas de un paquete específico o en un "
+"sistema con un estado previo de dependencias rotas. No desactive esta opción "
+"sin reflexionar antes, ya que evita otros problemas además del caso descrito "
+"anteriormente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+"Antes de ejecutar una operación profunda como <literal>dist-upgrade</"
+"literal> con esta opción desactivada, debería intentar ejecutar "
+"<literal>install</literal> para el paquete que APT es incapaz de configurar "
+"inmediatamente; cerciórese de informar de su problema a su distribución y al "
+"equipo de APT mediante el enlace de informe de fallo al final del documento, "
+"para que así pueden mejorar y corregir el proceso de actualización."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+"Nunca active esta opción a menos que <emphasis>realmente</emphasis> sepa lo "
+"que hace. Permite a APT eliminar un paquete esencial de forma temporal para "
+"interrumpir un bucle «Conflicto/Conflicto» o «Conflicto/Predepende» entre "
+"dos paquetes esenciales. <emphasis>Un buble así no debería existir y es un "
+"fallo serio</emphasis>. Esta opción funciona si los paquetes esenciales no "
+"son <command>tar</command>, <command>gzip</command>, <command>libc</"
+"command>, <command>dpkg</command>, <command>dash</command> o cualquier cosa "
+"sobre la que estos paquetes dependen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+"A partir de la versión 0.7.26, APT utiliza un fichero de caché mapeado en "
+"memoria para almacenar la información de paquetes disponibles. "
+"<literal>Cache-Start</literal> actúa como una indicación del tamaño máximo "
+"de la caché, y por ello es la cantidad de memoria que APT solicita al "
+"iniciarse. El valor predeterminado es 20971520 bytes (aprox. 20 MB). Tenga "
+"en cuanta que esta cantidad de espacio debe estar disponible para APT; de lo "
+"contrario, fallará posiblemente, y por ello se debe reducir este valor para "
+"dispositivos con restricciones de memoria, mientras que se debe aumentar "
+"para sistemas con varias fuentes configuradas. <literal>Cache-Grow</literal> "
+"define en bytes con un valor predeterminado de 1048576 (aprox. 1 MB) cuánto "
+"puede aumentar como máximo el tamaño de la caché si no basta con el espacio "
+"definido con <literal>Cache-Start</literal>. Este valor se aplica repetidas "
+"veces hasta que la caché puede almacenar toda la información, o el tamaño de "
+"la caché alcance el valor definido con <literal>Cache-Limit</literal>. El "
+"valor predeterminado de <literal>Cache-Limit</literal> es cero, sin límite. "
+"Si se define <literal>Cache-Grow</literal> con un valor de cero, se "
+"desactiva el crecimiento automático de la caché."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+"Define los paquetes que se consideran dependencias de construcción "
+"esenciales."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+"La subsección «Get» controla la herramienta &apt-get;; consulte la "
+"documentación para más información sobre esta opción."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"La subsección Cache controla la herramienta &apt-cache;; consulte la "
+"documentación para más información sobre esta opción."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"La subsección CDROM controla la herramienta &apt-cdrom;; consulte la "
+"documentación para más información sobre esta opción."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr "El grupo Acquire"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+"El grupo de opciones <literal>Acquire</literal> controla la descarga de "
+"paquetes y los distintos métodos de obtención responsable de la descarga en "
+"sí mismo (consulte también &sources-list;)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Maximum time (in seconds) after its creation (as indicated by the "
+#| "<literal>Date</literal> header) that the <filename>Release</filename> "
+#| "file should be considered valid. If the Release file itself includes a "
+#| "<literal>Valid-Until</literal> header the earlier date of the two is used "
+#| "as the expiration date. The default value is <literal>0</literal> which "
+#| "stands for \"valid forever\". Archive specific settings can be made by "
+#| "appending the label of the archive to the option name."
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+"El periodo (en segundos) a partir de la creación del fichero "
+"«Release» (indicado en la cabecera <literal>Date</literal>) durante el cual "
+"se considerará válida. Si el fichero «Release» incluye una cabecera "
+"<literal>Valid-Until</literal>, la fecha más temprana se utilizará como la "
+"fecha de vencimiento. El valor predefinido es <literal>0</literal>, esto es, "
+"sin límite de tiempo. Las opciones de configuración específicas al archivo "
+"se pueden realizar añadiendo la etiqueta del archivo al nombre de opción."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Security related option defaulting to true, as giving a Release file's "
+#| "validation an expiration date prevents replay attacks over a long "
+#| "timescale, and can also for example help users to identify mirrors that "
+#| "are no longer updated - but the feature depends on the correctness of the "
+#| "clock on the user system. Archive maintainers are encouraged to create "
+#| "Release files with the <literal>Valid-Until</literal> header, but if they "
+#| "don't or a stricter value is desired the <literal>Max-ValidTime</literal> "
+#| "option below can be used."
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+"Opción relacionada con la seguridad, cuyo valor predeterminado es «true», ya "
+"que una validación con fecha de vencimiento para un fichero «Release» evita "
+"ataques replay de larga duración y puede, por ejemplo, ayudar a identificar "
+"las réplicas no actualizadas, aunque esta función depende de la corrección "
+"de la hora del sistema del usuario. Se recomienda a los responsables de "
+"archivos que creen ficheros «Release» con la cabecera <literal>Valid-Until</"
+"literal>, pero si no se hace o se desea un valor más estricto, se puede "
+"utilizar la opción <literal>Max-ValidTime</literal> a continuación."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Maximum time (in seconds) after its creation (as indicated by the "
+#| "<literal>Date</literal> header) that the <filename>Release</filename> "
+#| "file should be considered valid. If the Release file itself includes a "
+#| "<literal>Valid-Until</literal> header the earlier date of the two is used "
+#| "as the expiration date. The default value is <literal>0</literal> which "
+#| "stands for \"valid forever\". Archive specific settings can be made by "
+#| "appending the label of the archive to the option name."
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+"El periodo (en segundos) a partir de la creación del fichero "
+"«Release» (indicado en la cabecera <literal>Date</literal>) durante el cual "
+"se considerará válida. Si el fichero «Release» incluye una cabecera "
+"<literal>Valid-Until</literal>, la fecha más temprana se utilizará como la "
+"fecha de vencimiento. El valor predefinido es <literal>0</literal>, esto es, "
+"sin límite de tiempo. Las opciones de configuración específicas al archivo "
+"se pueden realizar añadiendo la etiqueta del archivo al nombre de opción."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Minimum time (in seconds) after its creation (as indicated by the "
+#| "<literal>Date</literal> header) that the <filename>Release</filename> "
+#| "file should be considered valid. Use this if you need to use a seldom "
+#| "updated (local) mirror of a more frequently updated archive with a "
+#| "<literal>Valid-Until</literal> header instead of completely disabling the "
+#| "expiration date checking. Archive specific settings can and should be "
+#| "used by appending the label of the archive to the option name."
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+"El tiempo mínimo en segundos a partir de la creación del fichero "
+"<filename>Release</filename> (indicado en la cabecera <literal>Date</"
+"literal>) durante los cuales se considerará válido .Utilícelo si necesita "
+"utilizar una réplica (local) raramente actualizada que es copia de un "
+"archivo actualizado regularmente con una cabecera calida <literal>Valid-"
+"Until</literal> en lugar de desactivar la comprobación de la fecha de "
+"vencimiento. Las opciones de configuración específicas del archivo se pueden "
+"y deben utilizar añadiendo la etiqueta del archivo al nombre de opción."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+#| "<filename>Packages</filename> files) instead of downloading whole ones. "
+#| "True by default."
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+"Intenta descargar deltas llamados <literal>PDiffs</literal> para los índices "
+"(como ficheros <filename>Packages</filename>) en lugar de descargarlos "
+"enteros. Su valor predeterminado es «true»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+"Se ofrecen dos opciones secundarias para limitar el uso de «PDiffs»: "
+"<literal>FileLimit</literal> permite definir el número máximo de ficheros "
+"«PDiff» que se descargarán para actualizar un fichero. Por otra parte, "
+"<literal>SizeLimit</literal> es el porcentaje máximo del tamaño de todos los "
+"parches en comparación con el tamaño del fichero de destino. Si se supera "
+"uno de estos límites, se descargará el fichero completo en lugar de los "
+"parches."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+#| "<filename>Packages</filename> files) instead of downloading whole ones. "
+#| "True by default."
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+"Intenta descargar deltas llamados <literal>PDiffs</literal> para los índices "
+"(como ficheros <filename>Packages</filename>) en lugar de descargarlos "
+"enteros. Su valor predeterminado es «true»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+"Modo de cola, <literal>Queue-Mode</literal> puede ser <literal>host</"
+"literal> o <literal>access</literal>, que determina cómo paralelizará APT "
+"las conexiones salientes. <literal>host</literal> significa que se abrirá "
+"una conexión por máquina de destino, <literal>access</literal> significa que "
+"se abrirá una conexión por cada tipo de URI."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+"El número de reintentos a realizar. Si es distinto de cero APT volverá a "
+"intentar obtener los ficheros fallidos el número de veces proporcionado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+"Utiliza enlaces simbólicos para los archivos fuente. Si es «true» los "
+"archivos fuente se enlazarán cuando sea posible, en vez de copiarse. Es "
+"«true» de forma predeterminada."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+"<literal>ftp::Proxy</literal> define el proxy predeterminado que utilizar "
+"para los URI de FTP. Utiliza el formato estándar <literal>ftp://[[usuario][:"
+"contraseña]@]máquina[:puerto]/</literal>. También se puede especificar un "
+"proxy por cada máquina usando la forma <literal>ftp::Proxy::&lt;máquina&gt;</"
+"literal> con la palabra especial <literal>DIRECT</literal>, que significa "
+"que no se use ningún proxy. La variable de entorno <envar>ftp_proxy</envar> "
+"se usará en caso de no definir ninguna de las opciones anteriores. Para usar "
+"un proxy FTP debe configurar el script <literal>ftp::ProxyLogin</literal> en "
+"el fichero de configuración. Esta entrada define las órdenes a enviar para "
+"decirle al servidor del proxy a qué conectarse. Consulte &configureindex; "
+"para un ejemplo de uso. Las variables de sustitución que representan el "
+"componente URI son <literal>$(PROXY_USER)</literal> <literal>$(PROXY_PASS)</"
+"literal> <literal>$(SITE_USER)</literal> <literal>$(SITE_PASS)</literal> "
+"<literal>$(SITE)</literal> y <literal>$(SITE_PORT)</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+"La opción <literal>timeout</literal> define el tiempo máximo de espera "
+"utilizado por el método; este valor se aplica al establecimiento de conexión "
+"y a la recepción de datos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+"Puede controlar el modo pasivo a través de varias opciones. Habitualmente, "
+"es seguro dejar activado el modo pasivo, y funciona en casi todos los "
+"entornos. Sin embargo algunas situaciones requieren desactivar el modo "
+"pasivo y usar el modo puerto de FTP en su lugar. Esto se puede hacer "
+"globalmente, para conexiones a través de un proxy o para una máquina en "
+"concreto (consulte el ejemplo de fichero de configuración para ver algunos "
+"ejemplos)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+"Es posible usar un proxy FTP a través de HTTP definiendo la variable de "
+"entorno <envar>ftp_proxy</envar> con un HTTP URL. Para la sintaxis consulte "
+"la explicación anterior del método http. Esto no puede definir en el fichero "
+"de configuración y no se recomienda el uso de FTP por encima de HTTP debido "
+"a su poca eficiencia."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+"La opción <literal>ForceExtended</literal> controla el uso de las órdenes de "
+"RFC 2428 <literal>EPSV</literal> y <literal>EPRT</literal>. De forma "
+"predeterminada es «false», que significa que sólo se usa si el control de "
+"conexión es IPv6. Cambiándolo a «true» fuerza su uso incluso en conexiones "
+"IPv4. Tenga en cuenta que la mayoría de los servidores de FTP no son "
+"compatibles con la RFC 2428."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr "/cdrom/::Mount \"algo\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+"Para los URI que utilizan el método <literal>cdrom</literal>, la única "
+"opción configurable es el punto de montaje, <literal>cdrom::Mount</literal>, "
+"que debe ser el punto de montaje del dispositivo de CD-ROM (o DVD u otro) "
+"tal y como se define en <filename>/etc/fstab</filename>. Se pueden "
+"proporcionar órdenes «mount» y «unmount» alternativas si el punto de montaje "
+"no se puede definir en el fichero «fstab». La sintaxis consiste en insertar "
+"<placeholder type=\"literallayout\" id=\"0\"/> dentro del bloque "
+"<literal>cdrom</literal>. Es importante dejar una barra al final. Puede "
+"especificar órdenes para desmontar mediante UMount."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+"Para direcciones GPGV URI, la única opción configurable es <literal>gpgv::"
+"Options</literal>, que introduce parámetros adicionales a gpgv."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr "Acquire::CompressionTypes::<replaceable>extensión-del-fichero</replaceable> \"<replaceable>nombre-del-método</replaceable>\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "List of compression types which are understood by the acquire methods. "
+#| "Files like <filename>Packages</filename> can be available in various "
+#| "compression formats. By default the acquire methods can decompress "
+#| "<command>bzip2</command>, <command>lzma</command> and <command>gzip</"
+#| "command> compressed files; with this setting more formats can be added on "
+#| "the fly or the used method can be changed. The syntax for this is: "
+#| "<placeholder type=\"synopsis\" id=\"0\"/>"
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+"Lista de los tipos de compresión que se pueden usar en los métodos de "
+"«acquire». Los ficheros como <filename>Packages</filename> pueden estar "
+"disponibles en varios formatos de compresión. De forma predeterminada los "
+"métodos de «acquire» pueden descomprimir los ficheros comprimidos en "
+"<command>bzip2</command>, <command>lzma</command> y <command>gzip</command>, "
+"y con esta opción se pueden añadir más formatos en el momento, o cambiar el "
+"método usado. La sintaxis para esto es: <placeholder type=\"synopsis\" id="
+"\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Also, the <literal>Order</literal> subgroup can be used to define in "
+#| "which order the acquire system will try to download the compressed files. "
+#| "The acquire system will try the first and proceed with the next "
+#| "compression type in this list on error, so to prefer one over the other "
+#| "type simply add the preferred type first - default types not already "
+#| "added will be implicitly appended to the end of the list, so e.g. "
+#| "<placeholder type=\"synopsis\" id=\"0\"/> can be used to prefer "
+#| "<command>gzip</command> compressed files over <command>bzip2</command> "
+#| "and <command>lzma</command>. If <command>lzma</command> should be "
+#| "preferred over <command>gzip</command> and <command>bzip2</command> the "
+#| "configure setting should look like this: <placeholder type=\"synopsis\" "
+#| "id=\"1\"/> It is not needed to add <literal>bz2</literal> to the list "
+#| "explicitly as it will be added automatically."
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+"El subgrupo <literal>Order</literal> también se puede usar para definir en "
+"qué orden el sistema de «acquire» intentará descargar los ficheros "
+"comprimidos. El sistema de «acquire» intentará el primero y, en caso de "
+"error, procederá con el siguiente tipo de compresión de la lista, por lo que "
+"si prefiere un tipo antes que otro sólo tiene que añadirlo a la lista el "
+"primero (los tipos predeterminados que no se han añadido lo hacen de forma "
+"implícita al final de la lista; por ejemplo, <placeholder type=\"synopsis\" "
+"id=\"0\"/> se puede usar cuando se prefieran los ficheros comprimidos con "
+"<command>gzip</command> antes que con <command>bzip2</command> y "
+"<command>lzma</command>. Si se prefiere <command>lzma</command> antes que "
+"<command>gzip</command> y <command>bzip2</command>, la opción de "
+"configuración debería parecerse a esto <placeholder type=\"synopsis\" id="
+"\"1\"/> No es necesario añadir <literal>bz2</literal> a la lista de forma "
+"explícita ya que se añadirá de forma automática."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+#| "literal> will be checked at run time. If this option has been set, the "
+#| "method will only be used if this file exists; e.g. for the "
+#| "<literal>bzip2</literal> method (the inbuilt) setting is: <placeholder "
+#| "type=\"literallayout\" id=\"0\"/> Note also that list entries specified "
+#| "on the command line will be added at the end of the list specified in the "
+#| "configuration files, but before the default entries. To prefer a type in "
+#| "this case over the ones specified in the configuration files you can set "
+#| "the option direct - not in list style. This will not override the "
+#| "defined list; it will only prefix the list with this type."
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+"Tenga en cuenta que <literal>Dir::Bin::<replaceable>método</replaceable></"
+"literal> se comprueba en tiempo de ejecución. Si se define esta opción, el "
+"método se usará solo si este fichero existe; por ejemplo, la opción para el "
+"método <literal>bzip2</literal> (integrado) es: <placeholder type="
+"\"literallayout\" id=\"0\"/>. Tenga en cuenta que las entradas para la "
+"lista definidas en la línea de órdenes se añadirán al final de la lista "
+"definida en los ficheros de configuración, pero antes que las entradas "
+"predefinidas. Si prefiere un tipo sobre otro definido en los ficheros de "
+"configuración, defina la opción directamente, no en estilo de lista. Esto no "
+"omite la lista definida, simplemente prefija la lista con este tipo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+"El tipo especial <literal>uncompressed</literal> se puede utilizar para "
+"establecer una preferencia por los ficheros descomprimidos, pero tenga en "
+"cuenta que la mayoría de archivos no proporcionan ficheros descomprimidos, "
+"así que habitualmente esto solo sirve con réplicas locales."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+"Al descargar ficheros de índice comprimidos con <literal>gzip</literal>, "
+"(«Packages», «Sources», o «Translations»), los mantiene comprimidos "
+"localmente en lugar de desempaquetarlos. Esto ahorra mucho espacio en disco "
+"a costa de mayores requerimientos del procesador al generar los almacenes de "
+"paquetes locales. El valor predeterminado es «false»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+"La subsección «Languages» controla qué ficheros <filename>Translation</"
+"filename> se descargan y en qué orden APT intentará mostrar las traducciones "
+"de la descripción. APT intentará mostrar la primera descripción en el idioma "
+"que esté primero en la lista. Los idiomas se pueden especificar con sus "
+"códigos de idioma cortos o largos. Tenga en cuenta que no todos los archivos "
+"de paquetes proporcionan ficheros <filename>Translation</filename> para cada "
+"idioma (especialmente para los códigos de idioma largos)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; }"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La lista predeterminada incluye «environment» y «en». «<literal>environment</"
+"literal>» tiene aquí un significado especial: se sustituye en tiempo de "
+"ejecución con los códigos de idioma extraídos de la variable de entorno "
+"<literal>LC_MESSAGES</literal>. También comprueba que estos códigos no se "
+"incluyen por duplicado. Si se define <literal>LC_MESSAGES</literal> como "
+"«C», solo se utiliza el fichero <filename>Translation-en</filename> (si está "
+"disponible). Para obligar a que APT no utilice ningún fichero «Translation» "
+"utilice la configuración <literal>Acquire::Languages=none</literal>. "
+"«<literal>none</literal>» es otro código con significado especial que "
+"detiene la búsqueda de un fichero <filename>Translation</filename> adecuado. "
+"Indica a APT que también descargue estas traducciones, sin utilizarlas "
+"amenos que el entorno defina el idioma. Por ello, el siguiente ejemplo de "
+"configuración en el orden «en, de» para una configuración local en inglés, o "
+"«de, en» para una en alemán. Tenga en cuenta que se descarga «fr», pero no "
+"se utiliza a menos que se utilice APT bajo una configuración local en "
+"francés (donde el orden sería «fr, de, en»). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+"Nota: para impedir problemas derivados de ejecutar APT en distintos entornos "
+"(por ejemplo, por distintos usuarios u otros programas), todos los ficheros "
+"«Translation» que se encuentran en <filename>/var/lib/apt/lists/</filename> "
+"se añaden al final de la lista (después de un «<literal>none</literal>» "
+"implícito)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid "User configuration"
+msgid "Binary specific configuration"
+msgstr "Configuración de usuario"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr "Directorios"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+"La sección <literal>Dir::State</literal> contiene directorios que afectan a "
+"la información de estado local. <literal>lists</literal> es el directorio en "
+"el que se almacenan las listas de los paquetes descargados y "
+"<literal>status</literal> es el nombre del fichero de estado de &dpkg;. "
+"<literal>preferences</literal> es el nombre del fichero "
+"<filename>preferences</filename> (preferencias) de APT. <literal>Dir::State</"
+"literal> contiene el directorio que se usará como prefijo predeterminado en "
+"todos los elementos subordinados en caso de que no empiecen con <filename>/</"
+"filename> ó <filename>./</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>Dir::Cache</literal> contains locations pertaining to local "
+#| "cache information, such as the two package caches <literal>srcpkgcache</"
+#| "literal> and <literal>pkgcache</literal> as well as the location to place "
+#| "downloaded archives, <literal>Dir::Cache::archives</literal>. Generation "
+#| "of caches can be turned off by setting their names to the empty string. "
+#| "This will slow down startup but save disk space. It is probably "
+#| "preferable to turn off the pkgcache rather than the srcpkgcache. Like "
+#| "<literal>Dir::State</literal> the default directory is contained in "
+#| "<literal>Dir::Cache</literal>"
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+"<literal>Dir::Cache</literal> contiene las ubicaciones que afectan a la "
+"información de la caché local, como los dos cachés de paquetes "
+"<literal>srcpkgcache</literal> y <literal>pkgcache</literal>, así como a la "
+"ubicación dónde se guardan los ficheros descargados, <literal>Dir::Cache::"
+"archives</literal>. La generación de cachés se puede desactivar dejando sus "
+"nombres como una cadena vacía. Ésto hará que el arranque sea más lento, pero "
+"ahorrará espacio. Habitualmente, es preferible deshabilitar pkgcache en "
+"lugar de srcpkgcache. Al igual que con <literal>Dir::State</literal> el "
+"directorio predeterminado está en <literal>Dir::Cache</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+"<literal>Dir::Etc</literal> contiene la ubicación de los ficheros de "
+"configuración, <literal>sourcelist</literal> proporciona la ubicación de "
+"sourcelist y <literal>main</literal> es el fichero de configuración "
+"predeterminado (esta opción de configuración no tiene ningún efecto a menos "
+"que se realice desde el fichero de configuración definido en "
+"<envar>APT_CONFIG</envar>)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+"La opción <literal>Dir::Parts</literal> lee en todos los fragmentos de "
+"ficheros de configuración en orden léxico desde el directorio especificado. "
+"Al finalizar este proceso carga el fichero de configuración principal."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+"<literal>Dir::Bin</literal> apunta a los programas binarios. <literal>Dir::"
+"Bin::Methods</literal> define la ubicación de los gestores de los métodos y "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal>, <literal>dpkg-source</"
+"literal>, <literal>dpkg-buildpackage</literal> y <literal>apt-cache</"
+"literal> especifican la ubicación de sus respectivos programas."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "The configuration item <literal>RootDir</literal> has a special meaning. "
+#| "If set, all paths in <literal>Dir::</literal> will be relative to "
+#| "<literal>RootDir</literal>, <emphasis>even paths that are specified "
+#| "absolutely</emphasis>. So, for instance, if <literal>RootDir</literal> "
+#| "is set to <filename>/tmp/staging</filename> and <literal>Dir::State::"
+#| "status</literal> is set to <filename>/var/lib/dpkg/status</filename>, "
+#| "then the status file will be looked up in <filename>/tmp/staging/var/lib/"
+#| "dpkg/status</filename>."
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+"La opción de configuración <literal>RootDir</literal> tiene un significado "
+"especial. Si se define, todas las rutas de <literal>Dir::</literal> serán "
+"relativas a <literal>RootDir</literal>, <emphasis>incluso las rutas que se "
+"especifiquen de forma absoluta</emphasis>. De modo que, por ejemplo, si "
+"<literal>RootDir</literal> se define como <filename>/tmp/staging</filename> "
+"y <literal>Dir::State::status</literal> se define como <filename>/var/lib/"
+"dpkg/status</filename>, entonces el fichero de estado será <filename>/tmp/"
+"staging/var/lib/dpkg/status</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+"La lista <literal>Ignore-Files-Silently</literal> se puede usar para definir "
+"qué fichero debería ignorar APT silenciosamente al analizar ficheros en los "
+"directorios de fragmentos. Por omisión, se ignora silenciosamente un fichero "
+"que termina con <literal>.disabled</literal>, <literal>~</literal>, "
+"<literal>.bak</literal> o <literal>.dpkg-[a-z]+</literal>. Como se puede ver "
+"con el último valor predeterminado, estos patrones pueden usar la sintaxis "
+"de expresiones regulares."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr "APT con DSelect"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+"Varias directivas de configuración controlan el comportamiento "
+"predeterminado cuando APT se usa como método de &dselect;. Éstas se "
+"encuentran en la sección <literal>DSelect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+"Modo de limpieza del almacén de paquetes. Este valor puede ser "
+"<literal>always</literal>, <literal>prompt</literal>, <literal>auto</"
+"literal>, <literal>pre-auto</literal> y <literal>never</literal>. "
+"<literal>always</literal> y <literal>prompt</literal> eliminan todos los "
+"paquetes del almacén después de una actualización, aunque <literal>prompt</"
+"literal> (predeterminado) solicita una confirmación. <literal>auto</literal> "
+"solo elimina los paquetes que ya no se pueden descargar (por ejemplo, "
+"sustituidos por una versión más reciente). <literal>pre-auto</literal> "
+"realiza esta acción antes de descargar paquetes nuevos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+"Los contenidos de esta variable se introducen a &apt-get; como opciones de "
+"la línea de ordenes al ejecutar la fase de instalación."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+"Los contenidos de esta variable se introducen a &apt-get; como opciones de "
+"la línea de ordenes al ejecutar la fase de actualización."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+"Si es «true», la operación de «[U]pdate» (actualización) en &dselect; "
+"preguntará siempre antes de continuar. De forma predeterminada, sólo "
+"preguntará en caso de error."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr "Invocación de APT a dpkg"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+"Varias directivas de configuración controlan cómo invoca APT a &dpkg;. Éstas "
+"se encuentran en la sección <literal>DPkg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+"Es una lista de opciones que se introducen a &dpkg;. Las opciones se deben "
+"especificar usando la notación de lista, y cada elemento de la lista se "
+"introduce a &dpkg; como un sólo argumento."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+"Es una lista de órdenes de la consola que se ejecutarán antes y/o después de "
+"invocar a &dpkg;. Como <literal>options</literal>, se debe especificar con "
+"notación de lista. Las órdenes se ejecutarán en orden usando <filename>/bin/"
+"sh</filename>; en caso de fallo, APT cancela la acción."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "This is a list of shell commands to run before invoking &dpkg;. Like "
+#| "<literal>options</literal> this must be specified in list notation. The "
+#| "commands are invoked in order using <filename>/bin/sh</filename>; should "
+#| "any fail APT will abort. APT will pass the filenames of all .deb files it "
+#| "is going to install to the commands, one per line on standard input."
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+"Es una lista de órdenes de la consola que se ejecutarán antes de invocar a "
+"&dpkg;. Como <literal>options</literal>, se debe especificar con notación de "
+"lista. Las órdenes se ejecutan en orden usando <filename>/bin/sh</filename>, "
+"y APT finalizará en caso de fallo. APT introducirá a las órdenes los nombres "
+"de fichero de todos los «.deb» que va a instalar, uno por línea a través de "
+"la entrada estándar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+"APT cambia a este directorio antes de invocar a &dpkg;, el valor "
+"predeterminado es <filename>/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+"Estas opciones se introducen a &dpkg-buildpackage; cuando compila paquetes; "
+"el comportamiento predeterminado se limita a deshabilitar el firmado de "
+"paquetes y a producir todos los binarios."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "If this option is set APT will call <command>dpkg --configure --pending</"
+#| "command> to let &dpkg; handle all required configurations and triggers. "
+#| "This option is activated automatically per default if the previous option "
+#| "is not set to <literal>all</literal>, but deactivating it could be useful "
+#| "if you want to run APT multiple times in a row - e.g. in an installer. In "
+#| "these sceneries you could deactivate this option in all but the last run."
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+"Si define esta opción, APT ejecutará <command>dpkg --configure --pending</"
+"command> para permitir a dpkg manejar todas las configuraciones necesarias y "
+"todos los disparadores. Esta opción se activa automáticamente de forma "
+"predeterminada si la opción anterior no está definida como <literal>all</"
+"literal>, pero desactivarla podría ser útil si se quiere ejecutar APT varias "
+"veces seguidas, por ejemplo: en un instalador. En estas situaciones podría "
+"desactivar esta opción en todas las ejecuciones menos la última."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr "Las opciones «Periodic» y «Archives»"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+"Los grupos de opciones <literal>APT::Periodic</literal> y <literal>APT::"
+"Archives</literal> configuran el comportamiento de las actualizaciones "
+"periódicas de apt, que se hacen mediante el script <literal>/etc/cron.daily/"
+"apt</literal>. Consulte la cabecera de este script para una breve "
+"documentación de estas opciones."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr "Opciones de depuración"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+"Activar las opciones de la sección <literal>Debug::</literal> provocará que "
+"la información de depuración se envíe a la salida estándar del programa que "
+"esté utilizando las bibliotecas de <literal>apt</literal>, o activar los "
+"modos especiales del programa que son útiles para depurar el comportamiento "
+"de <literal>apt</literal>. La mayoría de estas opciones no son interesantes "
+"para un usuario normal, aunque unas cuantas sí son:"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+"<literal>Debug::pkgProblemResolver</literal> activa la salida de las "
+"decisiones tomadas por <literal>dist-upgrade, upgrade, install, remove, "
+"purge</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+"<literal>Debug::NoLocking</literal> desactiva todos los cerrojos de los "
+"ficheros. Esto se puede usar para ejecutar algunas operaciones (por ejemplo, "
+"<literal>apt-get -s install</literal>) como un usuario normal."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+"<literal>Debug::pkgDPkgPM</literal> muestra la línea de órdenes actual cada "
+"vez que <literal>apt</literal> invoca a &dpkg;."
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> desactiva la inclusión de los datos de "
+"statfs en los identificadores de los discos ópticos."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr ""
+"A continuación, se muestra la lista completa de las opciones de depuración "
+"de apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+"Muestra la información relacionada al acceso de las fuentes de "
+"<literal>cdrom://</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+"Muestra la información relacionada con la descarga de paquetes mediante FTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+"Muestra la información relacionada con la descarga de paquetes mediante HTTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+"Muestra la información relacionada con la descarga de paquetes mediante "
+"HTTPS."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+"Muestra la información relacionada con la comprobación de las firmas "
+"criptográficas mediante <literal>gpg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+"Muestra la información sobre el proceso de acceso a las colecciones de "
+"paquetes almacenadas en CD-ROM."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+"Describe el proceso de resolución de dependencias de compilación en &apt-"
+"get;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+"Muestra los «hashes» criptográficos que generan las bibliotecas de "
+"<literal>apt</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+"No incluye la información de <literal>statfs</literal>, el número de bloques "
+"libres y usados del sistema de ficheros del CD-ROM, cuando se genera un "
+"identificador de un CD-ROM."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+"Desactiva todos los cerrojos de los ficheros. Por ejemplo, esto permitirá "
+"ejecutar dos instancias de <quote><literal>apt-get update</literal></quote> "
+"a la vez."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+"Registra los elementos que se añaden o se borran de la cola de descarga "
+"global."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+"Muestra los mensajes de estado y los errores relacionados con la "
+"comprobación de las sumas de verificación y las firmas criptográficas de los "
+"ficheros descargados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+"Muestra la información de la descarga y la aplicación de los diffs de la "
+"lista de índices de paquetes, y los errores relacionados con éstos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+"Muestra la información relacionada con el parcheado de las listas de "
+"paquetes de apt cuando se descargan los diffs de los índices en lugar de los "
+"índices completos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+"Registra todas las interacciones de los sub-procesos que están realizando "
+"descargas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+"Registra los eventos relacionados con el estado «instalado automáticamente» "
+"de los paquetes y con la eliminación de los paquetes sin usar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+"Genera los mensajes de depuración que describen qué paquetes se están "
+"instalando automáticamente para resolver las dependencias. Esto corresponde "
+"al paso inicial de instalación automática, por ejemplo: <literal>apt-get "
+"install</literal> y no el solucionador completo de dependencias de "
+"<literal>apt</literal>. Consulte <literal>Debug::pkgProblemResolver</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+"Genera los mensajes de depuración que describen qué paquete se marcará como "
+"mantener/instalar/borrar mientras el solucionador de problemas "
+"(«ProblemResolver») realiza su trabajo. Cada adición o borrado puede iniciar "
+"acciones adicionales; éstas se muestran sangradas con dos espacios bajo la "
+"entrada original. El formato de cada línea es <literal>MarkKeep</literal>, "
+"<literal>MarkDelete</literal> o <literal>MarkInstall</literal> seguido de "
+"<literal>package-name &lt;a.b.c -&gt; d.e.f | x.y.z&gt; (sección)</literal> "
+"siendo <literal>a.b.c</literal> la versión actual del paquete, <literal>d.e."
+"f</literal> la versión considerada para instalar y <literal>x.y.z</literal> "
+"una versión nueva, pero no considerada para la instalación (por una "
+"puntuación baja). Las dos últimas se pueden omitir si no hay o si es la "
+"misma versión que la instalada. <literal>sección</literal> es el nombre de "
+"la sección en la que aparece el paquete."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+"Cuando se invoca a &dpkg; muestra la línea de órdenes exacta con la que se "
+"invocó, con los argumentos separados por un espacio."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+"Muestra todos los datos recibidos de &dpkg; en el descriptor del fichero de "
+"estado y cualquier error encontrado durante el análisis."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+"Genera una traza del algoritmo que decide el orden en el que <literal>apt</"
+"literal> debería entregar los paquetes a &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+"Muestra los mensajes de estado siguiendo los pasos realizados al invocar a "
+"&dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr "Muestra la prioridad de cada lista de paquetes al iniciarse."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+"Muestra la ejecución del solucionador de dependencias (esto se aplica sólo a "
+"lo que ocurre cuando se encuentra un problema de dependencias complejo)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+"Muestra una lista de todos los paquetes instalados con sus puntuaciones "
+"calculadas y usadas por pkgProblemResolver. La descripción del paquete es la "
+"misma que la descrita en <literal>Debug::pkgDepCache::Marker</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+"Muestra la información de los proveedores extraída de <filename>/etc/apt/"
+"vendors.list</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Ejemplos"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+"&configureindex; es un fichero de configuración de ejemplo que muestra "
+"valores de ejemplo para todas las opciones posibles."
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "Fichero de preferencias de APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"El fichero de preferencias de APT <filename>/etc/apt/preferences</filename> "
+"y los segmentos de fichero dentro del directorio <filename>/etc/apt/"
+"preferences.d/</filename> se pueden usar para controlar las versiones de los "
+"paquetes seleccionados para su instalación."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Puede disponer de varias versiones de un mismo paquete cuando el fichero "
+"&sources-list; contiene referencias a más de una distribución (por ejemplo, "
+"«<literal>stable</literal>» (estable) y «<literal>testing</literal>» (en "
+"pruebas)). APT asigna una prioridad a cada versión disponible, y limitado "
+"por las dependencias, <command>apt-get</command> selecciona la versión con "
+"mayor prioridad. Las preferencias de APT modifican las prioridades que APT "
+"asigna de forma predeterminada a las versiones de paquetes, dando control al "
+"usuario sobre qué versión se seleccionará para su instalación."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Puede que estén disponibles varios ejemplares de la misma versión de un "
+"paquete cuando el fichero «&sources-list;» contenga referencias a más de una "
+"fuente. En este caso <command>apt-get</command> descarga el ejemplar que "
+"aparezca listado primero en el fichero «&sources-list;». Las preferencias de "
+"APT no modifican la elección del ejemplar, sólo la elección de la versión."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"Las preferencias («preferences») son un gran poder en las manos de un "
+"administrador de sistemas, pero también se pueden convertir en su mayor "
+"pesadilla si se utilizan sin cuidado. APT no se cuestionará si las "
+"preferencias contienen opciones erróneas, lo que puede generar casos de "
+"paquetes no instalables o una toma de decisiones errónea al actualizar "
+"paquetes. Pueden surgir más problemas si se mezclan varias publicaciones de "
+"distribución sin un correcto entendimiento de los siguientes párrafos. Los "
+"paquetes incluidos en una distribución específica no se comprueban en "
+"combinación con otras distribuciones más antiguas o más recientes, y puede "
+"que no funcionen como se espera. Queda avisado."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"Tenga en cuenta que los ficheros bajo el directorio <filename>/etc/apt/"
+"preferences.d</filename> se analizan en orden ascendente alfanumérico, y sus "
+"nombres deben cumplir la siguiente convención: el fichero no tiene "
+"extensión, o tiene la extensión <literal>pref</literal>, y solo contiene "
+"caracteres alfanuméricos, guión (-), guión bajo (_) y punto (.). En caso "
+"contrario APT informa que ha omitido un fichero, a menos que este fichero "
+"coincida con un patrón en la lista de configuración <literal>Dir::Ignore-"
+"Files-Silently</literal>. Si coincide, el fichero se ignora silenciosamente."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "Asignación de prioridades predeterminadas de APT "
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>paquete</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"De no existir el fichero de preferencias, o si no hay ninguna entrada en "
+"éste que se pueda aplicar a una determinada versión, se asigna a la versión "
+"la prioridad de la distribución a la que pertenece. Es posible seleccionar "
+"una distribución, la &gt;&gt;distribución objetivo&lt;&lt; (n. t. del inglés "
+"<emphasis>target release</emphasis>), que recibe una prioridad predefinida "
+"mayor que el resto. La distribución objetivo se puede definir en la línea de "
+"órdenes al ejecutar <command>apt-get</command> o en el fichero de "
+"configuración de APT <filename>/etc/apt/apt.conf</filename>. Tenga en cuenta "
+"que esto tiene preferencia sobre cualquier otra prioridad definida en "
+"<filename>/etc/apt/preferencias</filename>, pero que no afecta al anclaje de "
+"paquetes específicos. Por ejemplo, <placeholder type=\"programlisting\" id="
+"\"0\"/><placeholder type=\"programlisting\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Si se ha especificado una distribución objetivo, APT usa el siguiente "
+"algoritmo para establecer las prioridades de cada versión de un paquete. "
+"Asignar: "
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "priority 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"A las versiones provenientes de archivos con la opción «NotAutomatic: yes» "
+"en su fichero <filename>Release</filename>, pero <emphasis>no</emphasis> "
+"como «ButAutomaticUpgrades: yes», como el archivo <literal>experimental</"
+"literal> de Debian."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "prioridad 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"A la versión ya instalada (si existe) y a las versiones provenientes de "
+"archivos con las opciones «NotAutomatic: yes» y «ButAutomaticUpgrades: yes» "
+"en su fichero <filename>Release</filename>, como el archivo Debian de "
+"paquetes adaptados a una versión anterior («backports») a partir de "
+"<literal>squeeze-backports</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "prioridad 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+#| msgid ""
+#| "to the versions that are not installed and belong to the target release."
+msgid "to the versions that do not belong to the target release."
+msgstr ""
+"a las versiones que no están instaladas y que pertenecen a la distribución "
+"objetivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "prioridad 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+#| msgid ""
+#| "to the versions that are not installed and belong to the target release."
+msgid "to the versions that belong to the target release."
+msgstr ""
+"a las versiones que no están instaladas y que pertenecen a la distribución "
+"objetivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Si no se define la versión objetivo, APT asigna una prioridad 100 a la "
+"versión de todos los paquetes instalados, y una prioridad 500 a todas las "
+"versiones no instaladas de paquete, a excepción de las provenientes de "
+"archivos con la opción «NotAutomatic: yes» en su fichero <filename>Release</"
+"filename>. Estas versiones reciben la prioridad 1 o 100 si también se define "
+"la opción «ButAutomaticUpgrades: yes»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"APT aplica las siguientes normas, expuestas por orden de precedencia, para "
+"determinar qué versión del paquete debe instalar."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Nunca instala una versión anterior de un paquete en lugar de la instalada a "
+"menos que la prioridad de la versión disponible supere 1000 («Desactualizar» "
+"significa instalar una versión menos reciente de un paquete. Tenga en cuenta "
+"que ninguna de las prioridades que asigna APT por omisión superan 1000; "
+"éstas prioridades sólo se pueden establecer mediante el fichero de "
+"preferencias. Observe que instalar una versión anterior del paquete puede "
+"ser peligroso)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "Instala la versión de mayor prioridad."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Si dos o más versiones tienen la misma prioridad, instala la más reciente "
+"(esto es, la que tiene un número de versión mayor)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"Si dos o más versiones tienen la misma prioridad y número de versión, pero o "
+"bien difieren en su meta-información o se ha introducido la opción "
+"<literal>--reinstall</literal>, se instalará la que no está instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Generalmente, la versión instalada del paquete (prioridad 100) no es tan "
+"reciente como la disponible a través de las fuentes en «&sources-"
+"list;» (prioridad 500 o 990). En este caso, el paquete se actualizará al "
+"ejecutar <command>apt-get install <replaceable>paquete</replaceable></"
+"command> o <command>apt-get upgrade</command>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Rara vez la versión instalada de un paquete es <emphasis>más</emphasis> "
+"reciente que cualquiera de las versiones disponibles. En éste caso no se "
+"instalará la versión anterior del paquete al ejecutar <command>apt-get "
+"install <replaceable>paquete</replaceable></command> o <command>apt-get "
+"upgrade</command>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"A veces, la versión instalada de un paquete es más reciente que la versión "
+"perteneciente a la distribución objetivo, pero no tan reciente como la "
+"versión de otra distribución. Este tipo de paquetes se actualizarán al "
+"ejecutar <command>apt-get install <replaceable>paquete</replaceable></"
+"command> o <command>apt-get upgrade</command> porque al menos <emphasis>uno</"
+"emphasis> de los ejemplares disponibles tiene una prioridad mayor que la "
+"versión instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "El efecto de las preferencias sobre APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"El fichero de preferencias de APT permite al administrador del sistema "
+"controlar la asignación de prioridades. El fichero consiste en uno o más "
+"registros de varias líneas separados entre sí por espacios en blanco. Los "
+"registros pueden tener una de estos dos formatos: el específico o el general."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"El formato «específico» asigna una prioridad («Pin-Priority») a uno más "
+"paquetes definidos con una versión o un rango de versiones especificados. "
+"Por ejemplo, el siguiente registro asigna una prioridad alta a todas las "
+"versiones del paquete <filename>perl</filename> cuyo número de versión "
+"empiece con «<literal>&good-perl;</literal>». Puede especificar varios "
+"paquetes separados por espacios."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"El formato habitual asigna una prioridad a todas las versiones de los "
+"paquetes en una distribución (esto es, a todas las versiones de paquetes "
+"listados en un fichero <filename>Release</filename> particular), o a todas "
+"las versiones de un paquete provenientes de un sitio concreto en Internet, "
+"identificado por su nombre de dominio."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Esta entrada con formato general en el fichero de preferencias de APT sólo "
+"afecta a grupos de paquetes. Por ejemplo, el siguiente registro asigna una "
+"prioridad alta a todas las versiones disponibles desde un sitio local."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"Una nota de aviso: la palabra clave usada aquí es «<literal>origin</"
+"literal>», el cual se puede usar para coincidir con un nombre de sistema. El "
+"siguiente registro asignará una prioridad alta a todas las versiones "
+"disponibles desde el servidor identificado con el nombre de sistema «ftp.de."
+"debian.org»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"<emphasis>No</emphasis> se debe confundir con el origen («Origin») de una "
+"distribución tal y como se especifica un fichero <filename>Release</"
+"filename>. Lo que sigue a la etiqueta «Origin:» en un fichero "
+"<filename>Release</filename> no es la dirección de un sitio de Internet, "
+"sino el autor o el nombre del proveedor, tales como «Debian» o «Ximian»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"El siguiente registro asigna una prioridad baja a todas las versiones de los "
+"paquetes pertenecientes a cualquier distribución que tenga como nombre de "
+"archivo de paquetes «<literal>unstable</literal>» (inestable)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"El siguiente registro asigna una prioridad alta a todas las versiones de los "
+"paquetes pertenecientes a cualquier distribución que tenga como nombre clave "
+"«<literal>&debian-testing-codename;</literal>»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"El siguiente registro asigna una prioridad alta a todas las versiones de los "
+"paquetes pertenecientes a cualquier publicación que tenga como nombre de "
+"archivo de paquetes «<literal>stable</literal>» y como número de versión "
+"«<literal>&debian-stable-version;</literal>»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "Expresiones regulares y sintaxis &glob;"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"APT también permite el anclaje mediante expresiones &glob;, y expresiones "
+"regulares delimitadas con barras. Por ejemplo, la siguiente opción asigna "
+"una prioridad 500 a todos los paquetes del archivo experimental si el nombre "
+"comienza con «gnome» (como expresión de tipo &glob;) o contiene la palabra "
+"«kde» (como expresión regular extendida POSIX delimitada por barras)."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"La regla para estas expresiones es que pueden aparecer donde lo hace una "
+"cadena. Por ello, el siguiente anclaje asigna la prioridad 990 a todos los "
+"paquetes provenientes de una publicación a partir de &ubuntu-codename;."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"Si se detecta una expresión regular en un campo «<literal>Package</"
+"literal>», el comportamiento sera igual que sustituir esta expresión regular "
+"con una lista de todos los nombres de paquetes con los que coincide. No se "
+"ha decidido si esto se modificará en el futuro. Por ello, siempre debe "
+"enumerar los comodines de anclaje en primer lugar, para que los anclajes "
+"específicos los anulen en caso de ser necesario. El patrón «<literal>*</"
+"literal>» en un campo «Package» no se considera una expresión &glob;."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "Interpretación de APT de las prioridades"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"Las prioridades (P) asignadas en el fichero de preferencias de APT deben ser "
+"números enteros positivos o negativos. Se interpretan (en general) del "
+"siguiente modo:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"La versión se instala incluso si es una versión anterior a la instalada en "
+"el sistema."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"La versión se instala aunque no venga de la distribución objetivo, a menos "
+"que la versión instalada sea más reciente."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"La versión se instala a menos que exista otro ejemplar disponible "
+"perteneciente a la distribución objetivo, o bien si la versión instalada es "
+"más reciente."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"La versión se instala a menos que exista una versión disponible "
+"perteneciente a otra distribución, o si la versión instalada es más reciente."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"La versión sólo se instala si no hay ninguna versión del paquete instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "Evita la instalación de la versión."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+#| msgid ""
+#| "If any specific-form records match an available package version then the "
+#| "first such record determines the priority of the package version. "
+#| "Failing that, if any general-form records match an available package "
+#| "version then the first such record determines the priority of the package "
+#| "version."
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"Si cualquier registro con formato específico coincide con una versión "
+"disponible de un paquete, el registro determina la prioridad de la versión "
+"del paquete. De no ser así, y si cualquier número de registros con formato "
+"general coinciden con una versión, el primero determina la prioridad de la "
+"versión del paquete."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Por ejemplo, suponga que el fichero de preferencias de APT contiene los tres "
+"registros antes mencionados:"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "Por ello:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"La versión más reciente disponible del paquete <literal>perl</literal> se "
+"instalará siempre que el número de versión empiece con «<literal>&good-perl;"
+"</literal>». De existir <emphasis>cualquier</emphasis> versión &good-perl;* "
+"disponible de <literal>perl</literal>, y si la versión instalada es &bad-"
+"perl;*, se instalará una versión anterior de <literal>perl</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Cualquier otra versión de un paquete distinto de <literal>perl</literal> "
+"disponible desde el sistema local tiene prioridad sobre el resto de las "
+"versiones, incluso sobre los pertenecientes a la distribución objetivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"Otras versiones que tengan un origen distinto al sistema local listadas en "
+"«&sources-list;» y que pertenezcan a la distribución <literal>unstable</"
+"literal> sólo se instalarán si se seleccionan para su instalación y si no "
+"hay ninguna versión del paquete ya instalado."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr "Determinar la versión del paquete y las propiedades de la distribución"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"Los recursos listados en el fichero «&sources-list;» deben proporcionar los "
+"ficheros <filename>Packages</filename> y <filename>Release</filename>. Éstos "
+"describen los paquetes disponibles en cada uno de los sitios."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"El fichero <filename>Packages</filename> se suele encontrar en el directorio "
+"<filename>.../dists/<replaceable>nombre-dist</replaceable>/"
+"<replaceable>componente</replaceable>/<replaceable>arquitectura</"
+"replaceable></filename>, por ejemplo, <filename>.../dists/stable/main/binary-"
+"i386/Packages</filename>. Este fichero consiste en una serie de registros de "
+"varias líneas, uno por cada paquete disponible en ese directorio. Sólo dos "
+"líneas en cada registro son relevantes a la hora de definir las prioridades "
+"de APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "La línea <literal>Package:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "indica el nombre del paquete."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "La línea <literal>Version:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "indica el número de versión del paquete."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"El fichero <filename>Release</filename> se suele encontrar en el directorio "
+"<filename>.../dists/<replaceable>nombre-dist</replaceable></filename>, por "
+"ejemplo <filename>.../dists/stable/Release</filename> o <filename>.../dists/"
+"&debian-stable-codename;/Release</filename>. El fichero consiste en "
+"registros de una sola línea que se aplican a <emphasis>todos</emphasis> los "
+"paquetes por debajo del directorio padre. Al contrario que el fichero "
+"<filename>Packages</filename>, casi todas las líneas del fichero "
+"<filename>Release</filename> son relevantes para las prioridades de APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "Las líneas <literal>Archive:</literal> o <literal>Suite:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"indican el nombre del archivo al que pertenecen todos los paquetes del árbol "
+"de directorios. Por ejemplo, la línea «Archive: stable» o «Suite: stable» "
+"especifica que todos los paquetes en el árbol de directorios por debajo del "
+"directorio raíz marcado en el fichero <filename>Release</filename> están en "
+"un archivo «<literal>stable</literal>» (estable). Para especificar una "
+"preferencia de acuerdo con este parámetro tendrá que insertar la siguiente "
+"línea en el fichero de preferencias de APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "La línea <literal>Codename:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"indica el nombre de la distribución a la que pertenecen todos los paquetes "
+"del árbol de directorios. Por ejemplo, la línea «Codename: &debian-testing-"
+"codename;» especifica que todos los paquetes en el árbol de directorios por "
+"debajo del directorio padre marcado en el fichero <filename>Release</"
+"filename> pertenecen a la versión llamada <literal>&debian-testing-codename;"
+"</literal>. Para especificar una preferencia de acuerdo con este parámetro "
+"tendrá que poner una de las siguientes líneas en el fichero de preferencias "
+"de APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"nombra la versión de la publicación. Por ejemplo, los paquetes en el árbol "
+"pueden pertenecer a la versión &debian-stable-version; de Debian. Observe "
+"que, generalmente, <literal>testing</literal> y <literal>unstable</literal> "
+"no tienen una versión asignada porque no se han publicado. Para especificar "
+"una preferencia de acuerdo con este parámetro tendrá que poner una de las "
+"siguientes línea en el fichero de preferencias de APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "La línea <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"indica la licencia asociada a los paquetes en el árbol de directorios "
+"correspondiente al fichero <filename>Release</filename>. Por ejemplo, la "
+"línea <literal>Component: main</literal> especifica que todos los paquetes "
+"en el árbol de directorios pertenecen a la sección <literal>main</literal>, "
+"lo cual asegura que su licencia se ajusta a las Directrices sobre software "
+"libre de Debian (DFSG). Para especificar una preferencia de acuerdo con este "
+"parámetro tendrá que poner la siguiente línea en el fichero de preferencias "
+"de APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "La línea <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"indica la procedencia de los paquetes en el árbol de directorios del fichero "
+"<filename>Release</filename>. La fuente más común es <literal>Debian</"
+"literal>. Puede definir esta fuente en el fichero de preferencias de APT "
+"mediante la siguiente línea:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "La línea <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"nombra la etiqueta de los paquetes en los árboles de directorios del fichero "
+"<filename>Release</filename>. Generalmente, es <literal>Debian</literal>. "
+"Puede definir esta etiqueta en el fichero de preferencias de APT mediante la "
+"siguiente línea:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Todos los ficheros <filename>Packages</filename> y <filename>Release</"
+"filename> obtenidos de los recursos en «&sources-list;» se guardan en el "
+"directorio <filename>/var/lib/apt/lists</filename>, o en el directorio "
+"definido por la variable <literal>Dir::State::Lists</literal>, que se puede "
+"definir en el fichero <filename>apt.conf</filename>. Por ejemplo, el fichero "
+"<filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-"
+"i386_Release</filename> contiene los ficheros <filename>Release</filename> "
+"obtenidos de <literal>debian.lcs.mit.edu</literal> para la arquitectura "
+"<literal>binary-i386</literal> de la sección <literal>contrib</literal> de "
+"la distribución «<literal>unstable</literal>» (inestable)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "Líneas opcionales en el registro de preferencias de APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"Cada registro en el fichero de preferencias de APT puede comenzar con una o "
+"más líneas que tengan como primera palabra <literal>Explanation:</literal>. "
+"Útil para comentarios."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "Seguir la distribución «stable» (estable)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Desinstalar o no instalar los ejemplares que no\n"
+"Explanation: pertenecen a la distribución estable\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"El siguiente fichero de preferencias de APT provoca que APT asigne una "
+"prioridad mayor de la que asigna por omisión (500) a todas las versiones de "
+"paquete de la distribución <literal>stable</literal> y una prioridad más "
+"baja al resto de versiones de paquetes de otras distribuciones "
+"<literal>Debian</literal>. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>paquete</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Con un fichero «&sources-list;» adecuado y el fichero de preferencias "
+"mostrado anteriormente, cualquiera de las siguientes órdenes de APT hace que "
+"o bien todo el sistema o bien sólo algunos paquetes se actualicen a la "
+"última versión en <literal>stable</literal>. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>paquete</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La siguiente orden hace que APT actualice un paquete a la última versión de "
+"la distribución <literal>testing</literal>, el paquete no se actualizará de "
+"nuevo a menos que se ejecute la orden otra vez. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "Seguir la distribución «testing» (en pruebas) o «unstable» (inestable)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"El siguiente fichero de preferencias de APT provocará que APT asigne mayor "
+"prioridad a las versiones de la distribución <literal>testing</literal>, una "
+"prioridad menor a los paquetes de la distribución <literal>unstable</"
+"literal>, y una prioridad prohibitiva a los paquetes de otras distribuciones "
+"de <literal>Debian</literal>. <placeholder type=\"programlisting\" id=\"0\"/"
+">"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Con un fichero &sources-list; adecuado y el fichero de preferencias anterior "
+"cualquiera de las siguientes órdenes hará que APT actualice los paquetes a "
+"la última versión de la distribución <literal>testing</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>paquete</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La siguiente orden hace que APT actualice un determinado paquete a la última "
+"versión de la distribución <literal>unstable</literal>. Más tarde, "
+"<command>apt-get upgrade</command> actualizará el paquete a la última "
+"versión de la distribución <literal>testing</literal> si es más reciente que "
+"la versión instalada. De otro modo, se instalará la versión más reciente de "
+"la distribución<literal>unstable</literal> si es más reciente que la versión "
+"instalada. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "Seguir la evolución de una publicación por el nombre"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Eliminar o no instalar cualquier paquete de Debian cuya versión sea\n"
+"Explanation: distinta a aquellos en las distribuciones de nombre squeeze o sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: El nombre clave de Debian «unstable» siempre es sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"El siguiente fichero de preferencias de APT provocará que APT asigne una "
+"prioridad superior a la predeterminada (500) a todas las versiones de "
+"paquetes pertenecientes a un nombre de distribución especificado, y una "
+"prioridad prohibitivamente baja a las versiones de paquetes pertenecientes a "
+"otras distribuciones de <literal>Debian</literal>, nombres clave y archivos "
+"Debian. Tenga en cuenta que con esta preferencia, APT seguirá la migración "
+"de una publicación desde el archivo <literal>testing</literal> a "
+"<literal>stable</literal> y por último <literal>oldstable</literal>. Si "
+"desea seguir, por ejemplo, el progreso en <literal>testing</literal> "
+"obviando el nombre de la publicación, debería usar los ejemplos de "
+"configuración mencionados anteriormente. <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Con un fichero «&sources-list;» adecuado y el fichero de preferencias "
+"mostrado anteriormente, cualquiera de las siguientes órdenes provocará que "
+"APT actualice los paquetes a la última versión de la distribución llamada "
+"<literal>&debian-testing-codename;</literal>. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>paquete</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La siguiente orden hace que APT actualice un determinado paquete a la última "
+"versión de la distribución <literal>sid</literal>. Más tarde, <command>apt-"
+"get upgrade</command> actualizará el paquete a la última versión de la "
+"distribución<literal>&debian-testing-codename;</literal> si es más reciente "
+"que la versión instalada. De otro modo, se instalará la versión más reciente "
+"de la distribución <literal>sid</literal> si es más reciente que la versión "
+"instalada. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "Lista de fuentes de datos de APT configurados"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The source list <filename>/etc/apt/sources.list</filename> is designed to "
+#| "support any number of active sources and a variety of source media. The "
+#| "file lists one source per line, with the most preferred source listed "
+#| "first. The information available from the configured sources is acquired "
+#| "by <command>apt-get update</command> (or by an equivalent command from "
+#| "another APT front-end)."
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"La lista de fuentes <filename>/etc/apt/sources.list</filename> se ha "
+"diseñado para permitir cualquier número de fuentes activas así como "
+"distintos medios de soporte de fuentes. El fichero enumera una fuente por "
+"línea, con la fuente preferida en primer lugar. La información disponible de "
+"las fuentes configuradas se obtiene mediante <command>apt-get update</"
+"command> (o una orden equivalente de una interfaz de APT)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The <filename>/etc/apt/sources.list.d</filename> directory provides a way "
+#| "to add sources.list entries in separate files. The format is the same as "
+#| "for the regular <filename>sources.list</filename> file. File names need "
+#| "to end with <filename>.list</filename> and may only contain letters (a-z "
+#| "and A-Z), digits (0-9), underscore (_), hyphen (-) and period (.) "
+#| "characters. Otherwise APT will print a notice that it has ignored a "
+#| "file, unless that file matches a pattern in the <literal>Dir::Ignore-"
+#| "Files-Silently</literal> configuration list - in which case it will be "
+#| "silently ignored."
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"El directorio <filename>/etc/apt/sources.list.d</filename> ofrece una manera "
+"de añadir entradas de «sources.list» en ficheros separados. El formato es "
+"idéntico al del fichero normal <filename>sources.list</filename>. Los "
+"nombres de los ficheros deben terminar en <filename>.list</filename>, y sólo "
+"pueden contener caracteres de letras (a-z y A-Z), dígitos (0-9), guión bajo "
+"(_), guión (-) y punto (.). De no ser así, APT informa de que ha omitido un "
+"fichero, a menos que coincida con un patrón en la lista de configuración "
+"<literal>Dir::Ignore-Files-Silently</literal>. Si coincide, se omite "
+"silenciosamente."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "The deb and deb-src types"
+msgid "The deb and deb-src Types: General Format"
+msgstr "Los tipos «deb» y «deb-src»"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The <literal>deb</literal> type references a typical two-level Debian "
+#| "archive, <filename>distribution/component</filename>. The "
+#| "<literal>distribution</literal> is generally an archive name like "
+#| "<literal>stable</literal> or <literal>testing</literal> or a codename "
+#| "like <literal>&debian-stable-codename;</literal> or <literal>&debian-"
+#| "testing-codename;</literal> while component is one of <literal>main</"
+#| "literal>, <literal>contrib</literal> or <literal>non-free</literal>. The "
+#| "<literal>deb-src</literal> type references a Debian distribution's source "
+#| "code in the same form as the <literal>deb</literal> type. A <literal>deb-"
+#| "src</literal> line is required to fetch source indexes."
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"El tipo <literal>deb</literal> hace referencia a un típico archivo de Debian "
+"de dos niveles, <filename>distribución/componente</filename>. Habitualmente, "
+"<literal>distribución</literal> es «<literal>stable</literal>» (estable) o "
+"«<literal>testing</literal>» (en pruebas), o un nombre código como "
+"<literal>&debian-stable-codename;</literal> o <literal>&debian-testing-"
+"codename;</literal>, mientras que el componente es <literal>main</literal> "
+"(principal), <literal>contrib</literal>, <literal>non-free</literal> (no "
+"libre), o <literal>non-us</literal>. El tipo <literal>deb-src</literal> hace "
+"referencia al código fuente de la distribución con la misma sintaxis que el "
+"tipo <literal>deb</literal>. Debe insertar una línea <literal>deb-src</"
+"literal> para obtener los índices de fuentes."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The format for a <filename>sources.list</filename> entry using the "
+#| "<literal>deb</literal> and <literal>deb-src</literal> types is:"
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"El formato para una entrada en el fichero <filename>sources.list</filename> "
+"usando los tipos <literal>deb</literal> y <literal>deb-src</literal> es:"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The URI for the <literal>deb</literal> type must specify the base of the "
+#| "Debian distribution, from which APT will find the information it needs. "
+#| "<literal>distribution</literal> can specify an exact path, in which case "
+#| "the components must be omitted and <literal>distribution</literal> must "
+#| "end with a slash (<literal>/</literal>). This is useful for the case when "
+#| "only a particular sub-section of the archive denoted by the URI is of "
+#| "interest. If <literal>distribution</literal> does not specify an exact "
+#| "path, at least one <literal>component</literal> must be present."
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"El URI para el tipo <literal>deb</literal> debe especificar la base de la "
+"distribución de Debian desde la que APT encontrará la información que "
+"necesita. <literal>distribución</literal> puede definir una ruta exacta, en "
+"cuyo caso debe omitir los componentes y <literal>distribución</literal> debe "
+"finalizar con una barra (<literal>/</literal>). Esto es útil cuando sólo se "
+"requiere una sub-sección del archivo señalado por el URI. Al menos uno de "
+"los <literal>componentes</literal> debe estar presente si "
+"<literal>distribución</literal> no define una ruta exacta."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>distribution</literal> may also contain a variable, <literal>"
+#| "$(ARCH)</literal> which expands to the Debian architecture (such as "
+#| "<literal>amd64</literal> or <literal>armel</literal>) used on the system. "
+#| "This permits architecture-independent <filename>sources.list</filename> "
+#| "files to be used. In general this is only of interest when specifying an "
+#| "exact path, <literal>APT</literal> will automatically generate a URI with "
+#| "the current architecture otherwise."
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>distribución</literal> puede contener una variable, <literal>"
+"$(ARCH)</literal>, que se expandirá a la arquitectura de Debian usada en el "
+"sistema (por ejemplo, <literal>amd64</literal> o <literal>armel</literal>). "
+"Esto permite que los ficheros <filename>sources.list</filename> sean "
+"independientes de la arquitectura. En general, esta característica sólo es "
+"de interés si se especifica una ruta completa, de lo contrario <literal>APT</"
+"literal> generará automáticamente una URI con la arquitectura actual del "
+"sistema."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "Since only one distribution can be specified per line it may be necessary "
+#| "to have multiple lines for the same URI, if a subset of all available "
+#| "distributions or components at that location is desired. APT will sort "
+#| "the URI list after it has generated a complete set internally, and will "
+#| "collapse multiple references to the same Internet host, for instance, "
+#| "into a single connection, so that it does not inefficiently establish an "
+#| "FTP connection, close it, do something else, and then re-establish a "
+#| "connection to that same host. This feature is useful for accessing busy "
+#| "FTP sites with limits on the number of simultaneous anonymous users. APT "
+#| "also parallelizes connections to different hosts to more effectively deal "
+#| "with sites with low bandwidth."
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"Debido a que sólo se puede especificar una distribución por línea, es "
+"posible que se precisen varias líneas para la misma URI si desea tener "
+"acceso a más de una distribución o componente de esa ubicación. APT ordenará "
+"internamente la lista de direcciones URI después de generar una copia "
+"interna, y unirá varias referencias al mismo servidor de Internet en una "
+"sola conexión, para así no establecer una conexión FTP de forma ineficiente, "
+"cerrarla, hacer otra cosa, y entonces restablecer la conexión con el mismo "
+"servidor. Esta característica es útil para acceder a sitios FPT muy "
+"visitados que limitan el número de accesos simultáneos a usuarios anónimos. "
+"APT también realizará conexiones paralelas a diferentes servidores para "
+"aprovechar mejor el ancho de banda."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"Es importante listar las fuentes por orden de preferencia, con la fuente "
+"preferente al inicio. Lo normal es ordenar las fuentes por velocidad, de la "
+"más rápida a la más lenta (CD-ROM seguido de servidores en la red local, "
+"seguidos por servidores de Internet distantes, por ejemplo)."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "The deb and deb-src types"
+msgid "The deb and deb-src types: Options"
+msgstr "Los tipos «deb» y «deb-src»"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#| "replaceable>,…</literal> can be used to specify for which architectures "
+#| "information should be downloaded. If this option is not set all "
+#| "architectures defined by the <literal>APT::Architectures</literal> option "
+#| "will be downloaded."
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<literal>arch=<replaceable>arquitecura1</replaceable>,"
+"<replaceable>arquitecura2</replaceable>,…</literal> se puede utilizar para "
+"definir la arquitectura para la que se descarga información sobre "
+"arquitecturas. Si no se define esta opción, se descargarán todas las "
+"arquitecturas definidas por la opción <literal>APT::Architectures</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#| "replaceable>,…</literal> can be used to specify for which architectures "
+#| "information should be downloaded. If this option is not set all "
+#| "architectures defined by the <literal>APT::Architectures</literal> option "
+#| "will be downloaded."
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<literal>arch=<replaceable>arquitecura1</replaceable>,"
+"<replaceable>arquitecura2</replaceable>,…</literal> se puede utilizar para "
+"definir la arquitectura para la que se descarga información sobre "
+"arquitecturas. Si no se define esta opción, se descargarán todas las "
+"arquitecturas definidas por la opción <literal>APT::Architectures</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr "Especificación del URI"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "Los tipos de URI permitidos actualmente son:"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"El esquema «file» permite considerar cualquier directorio en el sistema de "
+"ficheros como un archivo de paquetes adicional. Esto es útil para "
+"particiones montadas mediante NFS y réplicas o archivos de paquetes locales."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The cdrom scheme allows APT to use a local CD-ROM drive with media "
+#| "swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+#| "source list."
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"El esquema «cdrom» permite a APT utilizar la unidad de CD-ROM local. Utilice "
+"el programa &apt-cdrom; para añadir entradas de un disco óptico a «sources."
+"list»."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The ftp scheme specifies an FTP server for the archive. APT's FTP "
+#| "behavior is highly configurable; for more information see the &apt-conf; "
+#| "manual page. Please note that an FTP proxy can be specified by using the "
+#| "<envar>ftp_proxy</envar> environment variable. It is possible to specify "
+#| "an HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+#| "environment variable and <emphasis>only</emphasis> this environment "
+#| "variable. Proxies using HTTP specified in the configuration file will be "
+#| "ignored."
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"El esquema «ftp» definea un servidor FTP como el archivo de paquetes. El "
+"comportamiento de APT con FTP es muy configurable, para más información "
+"consulte la página de manual de &apt-conf;. Tenga en cuenta que puede "
+"especificar un proxy FTP mediante la variable de entorno <envar>ftp_proxy</"
+"envar>. Es posible especificar un servidor proxy HTTP (los servidores proxy "
+"HTTP normalmente comprenden los URL de tipo FTP) mediante este método y SÓLO "
+"este método. Se ignoran los proxies que utilizan HTTP definidos en el "
+"fichero de configuración."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"El esquema «copy» es idéntico a «file», pero los paquetes se copian al "
+"directorio almacén en vez de usarlos directamente en su ubicación original. "
+"Es de utilidad para personas que utilizan dispositivos extraíbles, ya que "
+"permite realizar la copia de ficheros con APT."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"El método «rsh/ssh» invoca RSH/SSH para establecer una conexión con una "
+"máquina remota y acceder a los ficheros como un usuario dado. Se recomienda "
+"configurar previamente rhosts o las claves RSA. Las órdenes estándar "
+"<command>find</command> y <command>dd</command> se utilizan para realizar la "
+"transferencia de ficheros desde la máquina remota."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "Añadir más tipos de URI reconocidos."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "APT can be extended with more methods shipped in other optional packages, "
+#| "which should follow the naming scheme <package>apt-transport-"
+#| "<replaceable>method</replaceable></package>. For instance, the APT team "
+#| "also maintains the package <package>apt-transport-https</package>, which "
+#| "provides access methods for HTTPS URIs with features similar to the http "
+#| "method. Methods for using e.g. debtorrent are also available - see &apt-"
+#| "transport-debtorrent;."
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"APT se puede extender con más métodos proporcionados por paquetes "
+"opcionales, que deben seguir el esquema de denominación <package>apt-"
+"transport-<replaceable>método</replaceable></package>. Por ejemplo, el "
+"equipo de APT también desarrolla el paquete <package>apt-transport-https</"
+"package>, que proporciona métodos de acceso a direcciones URI de HTTPS de "
+"forma similar al método «http». También se proporcionan métodos para "
+"debtorrent, consulte &apt-transport-debtorrent;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"Utiliza el archivo local (o montado mediante NFS) en «/home/apt/debian» para "
+"«stable/main», «stable/contrib», y «stable/non-free»."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/apt/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+"Como arriba, excepto que usa la distribución «unstable» (en desarrollo)."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "Source line for the above"
+msgid "Sources specification for the above."
+msgstr "Línea para obtener el código fuente desde la ubicación anterior."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"La primera línea obtiene información de paquete para las arquitecturas en "
+"<literal>APT::Architectures</literal> mientras que la segunda siempre "
+"obtiene <literal>amd64</literal> y <literal>armel</literal>."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"Utiliza HTTP para acceder al archivo de Debian en «archive.debian.org», y "
+"usa sólo la sección «hamm/main»."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"Utiliza FTP para acceder al archivo de Debian en «ftp.debian.org», debajo "
+"del directorio «debian», y usa sólo la sección «&debian-stable-codename;/"
+"contrib»."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"Utiliza FTP para acceder al archivo de Debian en «ftp.debian.org», debajo "
+"del directorio «debian», y usa sólo la sección unstable/contrib. Si tanto "
+"esta línea como la del ejemplo anterior aparecen en <filename>sources.list</"
+"filename>, se usará sólo una sesión FTP para ambas."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+#| "directory, and uses only files found under <filename>unstable/binary-"
+#| "i386</filename> on i386 machines, <filename>unstable/binary-amd64</"
+#| "filename> on amd64, and so forth for other supported architectures. [Note "
+#| "this example only illustrates how to use the substitution variable; "
+#| "official debian archives are not structured like this] <placeholder type="
+#| "\"literallayout\" id=\"0\"/>"
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Utiliza HTTP para acceder al archivo en «ftp.tlh.debian.org», bajo el "
+"directorio «universe», y sólo usa ficheros que se encuentren bajo "
+"<filename>unstable/binary-i386</filename> en máquinas i386, "
+"<filename>unstable/binary-amd64</filename> en máquinas amd64, y así para "
+"todas las arquitecturas compatibles. (Tenga en cuenta que este ejemplo sólo "
+"sirve para ilustrar cómo se usa la variable de sustitución, «non-us» ya "
+"tiene esta estructura.) <placeholder type=\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"Herramienta de extracción de configuración de <command>debconf</command> y "
+"plantillas de paquetes de Debian"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>apt-extracttemplates</command> tomará uno o más ficheros de "
+"paquetes de Debian como entrada para escribir (a un directorio temporal) "
+"todos los scripts de configuración asociados y los ficheros de plantilla. "
+"Para cada paquete proporcionado que contenga scripts de configuración y "
+"plantillas, se generará una salida de una línea con el formato:"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "paquete versión fichero-de-plantilla script-de-configuración"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"El fichero de plantilla y el script de configuración se escriben en el "
+"directorio temporal definido mediante la opción <option>-t</option> o "
+"<option>--tempdir</option> (<literal>APT::ExtractTemplates::TempDir</"
+"literal>), con un formato de nombre de fichero <filename>paquete.template."
+"XXXXXX</filename> y <filename>paquete.config.XXXXXX</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"El directorio temporal en el que se escribirán los ficheros de plantillas "
+"<command>debconf</command> y los scripts de configuración extraídos. Opción "
+"de configuración: <literal>APT::ExtractTemplates::TempDir</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command> devuelve cero si no hay ningún "
+"error, y el valor 100 en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "Herramienta para ordenar los ficheros de índice de paquetes"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>apt-sortpkgs</command> toma un fichero de índice (índice de fuentes "
+"o índice de paquetes) y ordena los registros por nombre de paquete. También "
+"ordena los campos internos de cada registro de acuerdo a las reglas de "
+"ordenación internas."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"Toda la salida se muestra por la salida estándar, la entrada debe ser un "
+"fichero ubicable."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"Utililza el orden por el campo de índice de fuentes. Opción de "
+"configuración: <literal>APT::SortPkgs::Source</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> devuelve cero si no hay ningún error, y el "
+"valor 100 en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "Herramienta para generar ficheros de índice"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> es la herramienta de la línea de órdenes "
+"que genera los ficheros de índice que APT utiliza para acceder a la fuente "
+"de la distribución. Los ficheros de índice se deberían generar en el sitio "
+"de origen basado en el contenido de ese sitio."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+"<command>apt-ftparchive</command> es un superconjunto del programa &dpkg-"
+"scanpackages;, e incorpora su funcionalidad al completo mediante la orden "
+"<literal>packages</literal>. También contiene un generador de contenidos de "
+"fichero, <literal>contents</literal>, y un modo elaborado para realizar un "
+"«script» para el proceso de generación de un archivo completo."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+"Internamente, <command>apt-ftparchive</command> puede hacer uso de bases de "
+"datos binarias para almacenar los contenidos de un fichero «.deb» y no "
+"depender de ningún programa externo como &gzip;. Cuando se realiza una "
+"generación completa, automáticamente realiza comprobaciones de cambios en "
+"los ficheros y genera los ficheros de salida comprimidos deseados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+"La orden «packages» genera un fichero de paquete a partir de un directorio. "
+"Busca recursivamente ficheros «.deb» en el directorio proporcionado, "
+"generando un registro de paquete en la salida estándar para cada uno. Esta "
+"orden es casi un equivalente de &dpkg-scanpackages;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+"La opción <option>--db</option> se puede usar para especificar una base de "
+"datos binaria para la caché (registro de paquetes)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+"La orden <literal>sources</literal> genera un fichero de índice de fuentes a "
+"partir de un directorio. Toma el directorio proporcionado y busca en él "
+"recursivamente ficheros «.dsc», generando un registro de fuente en la salida "
+"estándar para cada uno. Esta orden es casi un equivalente de &dpkg-"
+"scansources;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+"Si se define un fichero alternativo, se buscará un fichero de fuentes "
+"alternativo con la extensión «.src». Puede usar la opción --source-override "
+"para cambiar el fichero de fuentes alternativo que se usará."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+"La orden <literal>contents</literal> genera un fichero de contenidos a "
+"partir de un directorio. Toma el directorio proporcionado y busca en él "
+"recursivamente ficheros «.deb», lee la lista de ficheros para cada uno, los "
+"ordena y muestra en la salida estándar la lista de ficheros que coinciden "
+"con los paquetes. Los directorios no se muestran por la salida estándar. Si "
+"varios paquetes tienen el mismo fichero, entonces cada paquete se separará "
+"por una coma en la salida."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid ""
+#| "The <literal>release</literal> command generates a Release file from a "
+#| "directory tree. It recursively searches the given directory for "
+#| "uncompressed <filename>Packages</filename> and <filename>Sources</"
+#| "filename> files and ones compressed with <command>gzip</command>, "
+#| "<command>bzip2</command> or <command>lzma</command> as well as "
+#| "<filename>Release</filename> and <filename>md5sum.txt</filename> files by "
+#| "default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+#| "Additional filename patterns can be added by listing them in "
+#| "<literal>APT::FTPArchive::Release::Patterns</literal>. It then writes to "
+#| "stdout a <filename>Release</filename> file containing an MD5, SHA1 and "
+#| "SHA256 digest for each file."
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+"La orden <literal>release</literal> genera un fichero «Release» a partir de "
+"un árbol de directorios. Analiza el directorio dado de forma recursiva en "
+"busca de ficheros <filename>Packages</filename> y <filename>Sources</"
+"filename> descomprmidos, y aquellos comprimidos con <command>gzip</command>, "
+"<command>bzip2</command> o <command>lzma</command>, así como los ficheros "
+"<filename>Release</filename> y <filename>md5sum.txt</filename> de forma "
+"predefinida. (<literal>APT::FTPArchive::Release::Default-Patterns</"
+"literal>). Se pueden añadir patrones de nombres de fichero enumerándolos en "
+"<literal>APT::FTPArchive::Release::Patterns</literal>. A continuación genera "
+"un fichero <filename>Release</filename> a través de la salida estándar que "
+"contiene una suma de control MD5, SHA1 y SHA256 para cada fichero."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+"Los valores para los campos de metadatos adicionales en el fichero «Release» "
+"se toman de las variables correspondientes en <literal>APT::FTPArchive::"
+"Release</literal>, por ejemplo <literal>APT::FTPArchive::Release::Origin</"
+"literal>. Los campos permitidos son: <literal>Origin</literal>, "
+"<literal>Label</literal>, <literal>Suite</literal>, <literal>Version</"
+"literal>, <literal>Codename</literal>, <literal>Date</literal>, "
+"<literal>NotAutomatic</literal>, <literal>ButAutomaticUpgrades</literal>, "
+"<literal>Acquire-By-Hash</literal>, <literal>Valid-Until</literal>, "
+"<literal>Signed-By</literal>, <literal>Architectures</literal>, "
+"<literal>Components</literal> y <literal>Description</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+"La orden <literal>generate</literal> se ha diseñado para ejecutarse desde un "
+"script de cron y genera los índices de acuerdo a lo proporcionado en el "
+"fichero de configuración. El lenguaje de configuración proporciona una forma "
+"flexible de definir qué ficheros de índice se generarán a partir de qué "
+"directorios, así como proporcionar una forma sencilla de mantener la "
+"configuración necesaria."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+"La orden <literal>clean</literal> ordena las bases de datos que usa el "
+"fichero de configuración proporcionado, eliminando los registros que no son "
+"necesarios."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr "La configuración de «generate»"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+"La orden <literal>generate</literal> usa un fichero de configuración para "
+"describir los ficheros que se generarán. Sigue el típico formato de "
+"configuración de ISC presente en las herramientas de ISC como bind 8 y "
+"dhcpd. &apt-conf; contiene una descripción de la sintaxis. Tenga en cuenta "
+"que la configuración de «generate» se analiza por sección, pero &apt-conf; "
+"se analiza por árbol. Esto sólo afecta a cómo se maneja el ámbito de la "
+"etiqueta."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+"La configuración de «generate» tiene cuatro secciones diferentes, descritas "
+"a continuación."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr "Sección <literal>Dir</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+"La sección <literal>Dir</literal> define los directorios estándar necesarios "
+"para ubicar los ficheros necesarios durante el proceso de generación. A "
+"estos directorios se les añaden ciertas rutas relativas definidas en "
+"secciones posteriores para producir una ruta absoluta."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+"Define la raíz del archivo FTP; en una configuración estándar de Debian éste "
+"es el directorio que contiene el <filename>ls-LR</filename> y los nodos "
+"«dist»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr "Define la ubicación de los ficheros alternativos."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr "Define la ubicación de los ficheros almacenados."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+"Define la ubicación de los ficheros del listado de ficheros, si se usa "
+"posteriormente el valor <literal>FileList</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr "Sección <literal>Default</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+"La sección <literal>Default</literal> define los valores predeterminados, y "
+"los ajustes que controlan la operación del generador. Otras secciones pueden "
+"sobrescribir estos valores predeterminados con un valor de la sección."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid ""
+#| "Sets the default compression schemes to use for the package index files. "
+#| "It is a string that contains a space separated list of at least one of: "
+#| "'.' (no compression), 'gzip' and 'bzip2'. The default for all compression "
+#| "schemes is '. gzip'."
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+"Define los esquemas de compresión predeterminados para usar en los ficheros "
+"de índice de paquete. Es una cadena que contiene una lista separada por "
+"espacios de al menos uno de los siguientes valores: «.» (sin compresión), "
+"«gzip» y «bzip2». El valor predeterminado para todos los esquemas de "
+"compresión es «. gzip»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+"Define la lista predeterminada de extensiones de fichero que son ficheros de "
+"paquete. El valor predeterminado es «.deb»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+"Esta opción es similar a <literal>Packages::Compress</literal> excepto que "
+"controla la compresión para los ficheros «Sources»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+"Define la lista predeterminada de las extensiones de fichero que son "
+"ficheros de fuentes. El valor predeterminado es «.dsc»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+"Esta opción es similar a <literal>Packages::Compress</literal> excepto que "
+"controla la compresión para los ficheros «Contents»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+"Esta opción es similar a <literal>Packages::Compress</literal> excepto que "
+"controla la compresión para el fichero maestro Translation-en."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+"Define el número de kilobytes a desenlazar (y reemplazar con enlaces duros) "
+"por ejecución. Se usa junto al valor <literal>External-Links</literal> de "
+"cada sección."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+"Define el modo de todos los ficheros de índice creados. El valor "
+"predeterminado es 0644. Todos los ficheros de índice se ajustan a este modo "
+"sin tener en cuenta la máscara de usuario («umask»)."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+"Define si se incluyen descripciones largas en el fichero <filename>Packages</"
+"filename>, o si se separan en un fichero <filename>Translation-en</filename> "
+"maestro."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "Sección <literal>TreeDefault</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+"Define los valores predeterminados de las secciones <literal>Tree</literal>. "
+"Todas estas variables son variables de sustitución y reemplazan las cadenas "
+"$(DIST), $(SECTION) y $(ARCH) con sus valores respectivos."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+"Define el número de kilobytes de los ficheros de contenido que se generan "
+"cada día. Los ficheros de contenido están en una cola «round-robin», de modo "
+"que durante varios días todos se regenerarán."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+"Controla el número de días en los que se permite comprobar un fichero de "
+"contenido sin cambios. Si este límite caduca, el tiempo de modificación "
+"(mtime) del fichero de contenido se actualiza. Este caso puede aparecer si "
+"un fichero de paquete cambia de forma que no resulte en un fichero de "
+"contenido nuevo (por ejemplo, una edición alternativa). Se permite la "
+"retención con la esperanza de que se instalen nuevos «.deb», lo cual precisa "
+"un fichero nuevo de todos modos. El valor predeterminado es diez, las "
+"unidades usadas son días."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+"Define la raíz del directorio «.deb». El valor predeterminado es <filename>"
+"$(DIST)/$(SECTION)/binary-$(ARCH)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+"Define la raíz del directorio de los paquetes de fuentes. El valor "
+"predeterminado es <filename>$(DIST)/$(SECTION)/source/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+"Define el fichero «Packages» de salida. El valor predeterminado es <filename>"
+"$(DIST)/$(SECTION)/binary-$(ARCH)/Packages</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+"Define el fichero «Sources» de salida. El valor predeterminado es <filename>"
+"$(DIST)/$(SECTION)/source/Sources</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+"Define el fichero maestro «Translation-en» que contiene las descripciones "
+"largas en el caso de que no se incluyan en el fichero «Packages». El valor "
+"predeterminado es <filename>$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+"Define el prefijo de la ruta que hace que un enlace simbólico se considere "
+"un enlace interno en lugar de un enlace externo. El valor predeterminado es "
+"<filename>$(DIST)/$(SECTION)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+"Define el fichero «Contents» de salida. El valor predeterminado es <filename>"
+"$(DIST)/Contents-$(ARCH)</filename>. Si este valor provoca que varios "
+"ficheros «Packages» se relacionen con un único fichero «Contents» (el "
+"comportamiento predeterminado), <command>apt-ftparchive</command> integrará "
+"automáticamente esos ficheros de paquete."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr ""
+"Define el fichero de cabecera a añadir al fichero «Contents» de salida."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+"Define la base de datos binaria de la caché para usar en esta sección. "
+"Varias secciones pueden compartir la misma base de datos."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+"Define que <command>apt-ftparchive</command> debería leer la lista de "
+"ficheros del fichero proporcionado en lugar de explorar recursivamente el "
+"árbol de directorios. A los nombres de los ficheros relativos se les añade "
+"como prefijo el directorio del archivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+"Define que <command>apt-ftparchive</command> debería leer la lista de "
+"ficheros del fichero proporcionado en lugar de explorar recursivamente el "
+"árbol de directorio. A los nombres de los ficheros relativos se les añade "
+"como prefijo el directorio del archivo. Sólo se usa cuando se procesan "
+"índices de fuentes."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr "Sección <literal>Tree</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+"La sección <literal>Tree</literal> define un árbol de un archivo de paquetes "
+"Debian estándar que consiste en un directorio base, varias secciones en ese "
+"directorio base y finalmente varias arquitecturas en cada sección. La ruta "
+"exacta usada se define en la variable de sustitución <literal>Directory</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+"La sección <literal>Tree</literal> toma un ámbito de una etiqueta que define "
+"la variable <literal>$(DIST)</literal> y la raíz del árbol (a la ruta se le "
+"añade el prefijo <literal>ArchiveDir</literal>). Normalmente esto es un "
+"valor como <filename>dists/&debian-stable-codename;</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+"Todos los valores definidos en la sección <literal>TreeDefault</literal> se "
+"pueden utilizar en la sección <literal>Tree</literal>, así como tres nuevas "
+"variables."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generar con DIST=scope SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+"Cuando se procesa una sección <literal>Tree</literal> <command>apt-"
+"ftparchive</command> realiza una operación similar a la siguiente: "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+"Es una lista de secciones separadas por espacios que aparecen bajo la "
+"distribución; habitualmente, es similar a <literal>main contrib non-free</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+"Define el fichero binario alternativo. Éste contiene la información sobre la "
+"sección, la prioridad y la dirección del mantenedor."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+"Define el fichero de fuentes alternativo. Éste contiene la información sobre "
+"la sección."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr "Define el fichero binario alternativo adicional."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr "Define el fichero de fuentes alternativo adicional."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "Sección <literal>BinDirectory</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+"La sección <literal>bindirectory</literal> define un directorio binario sin "
+"ningún tipo de estructura especial. El ámbito de la etiqueta define la "
+"ubicación del directorio binario, la configuración es similar a la sección "
+"<literal>Tree</literal> sin sustituir las variables o la configuración de "
+"<literal>Section</literal><literal>Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr "Define el fichero «Packages» de salida."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+"Define el fichero «Sources» de salida. Es necesario al menos un fichero "
+"<literal>Packages</literal> o <literal>Sources</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr "Define el fichero «Contents» de salida (opcional)"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr "Define el fichero binario alternativo."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr "Define el fichero de fuentes alternativo."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr "Define la base de datos de la caché."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr "Añade una ruta a todas las rutas de salida."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "Define el fichero de la lista de ficheros."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr "El fichero binario alternativo"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+"El fichero binario alternativo es totalmente compatible con &dpkg-"
+"scanpackages;. Contiene cuatro campos separados por espacios. El primero es "
+"el nombre del paquete, el segundo la prioridad asignada el paquete, el "
+"tercero es la sección a la que se fuerza el paquete y el último es el campo "
+"de permutación del mantenedor."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "antigua [// antigua-n]* => nueva"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "nueva"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+"La forma general del campo del mantenedor es: <placeholder type="
+"\"literallayout\" id=\"0\"/> o simplemente <placeholder type=\"literallayout"
+"\" id=\"1\"/> La primera forma permite una lista separada por barras dobles "
+"de las direcciones de correo electrónico antiguas a definir. Si se encuentra "
+"cualquier de ellas «nueva» se sustituye por el campo del mantenedor. La "
+"segunda forma sustituye de forma incondicional el campo del mantenedor."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr "El fichero de fuentes alternativo"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+"El fichero de fuentes alternativo es totalmente compatible con &dpkg-"
+"scansources;. Contiene dos campos separados por espacios. El primero es el "
+"nombre del paquete fuente, el segundo es la sección a la que se asignará."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr "El fichero alternativo adicional"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+"El fichero alternativo adicional permite añadir o reemplazar en la salida "
+"cualquier etiqueta arbitraria. Tiene tres columnas, la primera es el "
+"paquete, la segunda es la etiqueta y el resto de la línea es el nuevo valor."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+"Genera la suma de control dada. Por omisión, estas opciones están activas. "
+"Si se desactivan, los ficheros de índice generados no contendrán los campos "
+"de suma de control donde sea posibl. Opciones de configuración: "
+"<literal>APT::FTPArchive::<replaceable>Checksum</replaceable></literal> y "
+"<literal>APT::FTPArchive::<replaceable>Index</replaceable>::"
+"<replaceable>Checksum</replaceable></literal> donde "
+"<literal><replaceable>Index</replaceable></literal> puede ser "
+"<literal>Packages</literal>, <literal>Sources</literal> o <literal>Release</"
+"literal>, y <literal><replaceable>Checksum</replaceable></literal> puede ser "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> o "
+"<literal>SHA512</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"Utiliza una base de datos binaria para la caché. Ésto no afecta a la orden "
+"«generate». Opción de configuración: <literal>APT::FTPArchive::DB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Silencioso, produce una salida adecuada para su almacenamiento, omitiendo "
+"los indicadores de progreso. Más letras «q» producen una salida más "
+"silenciosa, hasta un máximo de dos letras. Además, es posible usar <option>-"
+"q=#</option> para ajustar el nivel de silencio, ignorando el fichero de "
+"configuración. Opción de configuración: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"Realiza el desenlazado. Esta opción activa el desenlazado de los ficheros si "
+"se usa la opción <literal>External-Links</literal>. Esta activa de forma "
+"predeterminada y se puede desactivar mediante <option>--no-delink</option>. "
+"Opción de configuración: <literal>APT::FTPArchive::DeLinkAct</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+"Realiza la generación de «contents». Cuando se usa esta opción y los índices "
+"de los paquetes se están generando con una base de datos de la caché, el "
+"listado de los ficheros se extraerá también y se almacenará en la base de "
+"datos para su uso posterior. Cuando se usa la orden «generate» esta opción "
+"también permite la creación de cualquier fichero «Contents». Esta activa de "
+"forma predeterminada. Opción de configuración: <literal>APT::FTPArchive::"
+"Contents</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"Selecciona el fichero de fuentes alternativo a usar con la orden "
+"<literal>sources</literal>. Opción de configuración: <literal>APT::"
+"FTPArchive::SourceOverride</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"Define los permisos de las bases de datos de la caché como sólo lectura. "
+"Opción de configuración: <literal>APT::FTPArchive::ReadOnlyDB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"Hace que las órdenes <literal>packages</literal> y <literal>contents</"
+"literal> sólo acepten aquellos paquetes que coinciden con <literal>*_arch."
+"deb</literal> o <literal>*_all.deb</literal>, en lugar de todos los ficheros "
+"de paquete en la ruta dada. Elemento de configuración: <literal>APT::"
+"FTPArchive::Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+"&apt-ftparchive; almacena tantos metadatos como sea posible en una base de "
+"datos de almacenamiento. Si los paquetes se recompilan o publican otra vez "
+"con la misma versión aparecerán problemas ya que se usarán los metadatos "
+"almacenados y ahora obsoletos tales como el tamaño o la suma de control. "
+"Esta situación se evitará si se activa esta opción ya que se comprobará si "
+"el fichero ha cambiado. Tenga en cuenta que esta opción está definida como "
+"«<literal>false</literal>» por omisión, ya que no se recomienda subir varias "
+"versiones o compilaciones de un paquete con el mismo número de versión, así "
+"que en teoría nadie debería tener problemas y por ello todas estas "
+"comprobaciones adicionales son innecesarias."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+"De forma predeterminada esta opción de configuración se define como "
+"«<literal>true</literal>» y sólo se debería definir como «<literal>false</"
+"literal>» si el archivo de paquetes generado con &apt-ftparchive; también "
+"proporciona ficheros <filename>Translation</filename>. Tenga en cuenta que "
+"el fichero maestro <filename>Translation-en</filename> sólo se puede crear "
+"con la orden «generate»."
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> packages <replaceable>directorio</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Para crear un fichero «Packages» comprimido para un directorio que contenga "
+"paquetes binarios («.deb»): <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> devuelve cero si no hay ningún error, y el "
+"valor 100 en caso de error."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Configuration file for APT"
+msgid "Login configuration file for APT sources and proxies"
+msgstr "Fichero de configuración de APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "The APT preferences file <filename>/etc/apt/preferences</filename> and "
+#| "the fragment files in the <filename>/etc/apt/preferences.d/</filename> "
+#| "folder can be used to control which versions of packages will be selected "
+#| "for installation."
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"El fichero de preferencias de APT <filename>/etc/apt/preferences</filename> "
+"y los segmentos de fichero dentro del directorio <filename>/etc/apt/"
+"preferences.d/</filename> se pueden usar para controlar las versiones de los "
+"paquetes seleccionados para su instalación."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "apt-get install <replaceable>paquete</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "apt-get install <replaceable>paquete</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Examples"
+msgid "Example"
+msgstr "Ejemplos"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "<filename>/etc/apt/trustdb.gpg</filename>"
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt/trustdb.gpg</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"Muestra las versiones completas para los paquetes actualizados e instalados. "
+"Opción de configuración: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "<filename>/etc/apt/trustdb.gpg</filename>"
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt/trustdb.gpg</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"Muestra las versiones completas para los paquetes actualizados e instalados. "
+"Opción de configuración: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Proxy Configuration"
+msgstr "Configuración de usuario"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "Three settings are provided for cache control with HTTP/1.1 compliant "
+#| "proxy caches. <literal>No-Cache</literal> tells the proxy not to use its "
+#| "cached response under any circumstances. <literal>Max-Age</literal> sets "
+#| "the allowed maximum age (in seconds) of an index file in the cache of the "
+#| "proxy. <literal>No-Store</literal> specifies that the proxy should not "
+#| "store the requested archive files in its cache, which can be used to "
+#| "prevent the proxy from polluting its cache with (big) .deb files."
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+"Se proporcionan tres opciones de configuración para el control de la caché "
+"con proxy cachés conformes an HTTP/1.1. <literal>No-Cache</literal> indica al "
+"proxy que nunca utilice la respuesta cacheada. <literal>Max-Age</literal> "
+"define la máxima antigüedad permitida (en segundos) de un fichero de índice "
+"en la caché de un proxy. <literal>No-Store</literal> define que el proxy no "
+"debe almacenar ficheros del archivo en su caché, que se puede utilizar para "
+"impedir que el proxy contamine la caché con ficheros «.deb» (de gran tamaño)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Automatic Proxy Configuration"
+msgstr "Configuración de usuario"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Connection Configuration"
+msgstr "Configuración de usuario"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The option <literal>timeout</literal> sets the timeout timer used by the "
+#| "method; this value applies to the connection as well as the data timeout."
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+"La opción <literal>timeout</literal> define el tiempo máximo de espera "
+"utilizado por el método; este valor se aplica al establecimiento de conexión "
+"y a la recepción de datos."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+#| "literal> which accepts integer values in kilobytes. The default value is "
+#| "0 which deactivates the limit and tries to use all available bandwidth "
+#| "(note that this option implicitly disables downloading from multiple "
+#| "servers at the same time.)"
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+"El ancho de banda usado se puede limitar mediante <literal>Acquire::http::Dl-"
+"Limit</literal>, que acepta valores enteros en kilobytes. El valor "
+"predeterminado es cero, que desactiva el límite e intenta utilizar todo el "
+"ancho de banda disponible (tenga en cuenta que esta opción desactiva "
+"implícitamente la descarga simultánea desde varios servidores)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used "
+#| "to enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be "
+#| "beneficial e.g. on high-latency connections. It specifies how many "
+#| "requests are sent in a pipeline. Previous APT versions had a default of "
+#| "10 for this setting, but the default value is now 0 (= disabled) to avoid "
+#| "problems with the ever-growing amount of webservers and proxies which "
+#| "choose to not conform to the HTTP/1.1 specification."
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+"La opción <literal>Acquire::http::Pipeline-Depth</literal> se puede utilizar "
+"para activar HTTP pipelining (RFC 2616 sección 8.1.2.2), que puede "
+"facilitar, por ejemplo, las conexiones de latencia alta. También define el "
+"número de solicitudes que se envían en cada pipeline. El valor "
+"predeterminado para esta opción con versiones anteriores de APT era 10, pero "
+"ahora el valor predeterminado es cero (= desactivado) para evitar problemas "
+"con la siempre creciente cantidad de servidores web y proxies que escogen no "
+"cumplir la especificación HTTP/1.1."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+"<literal>Acquire::http::AllowRedirect</literal> controla si APT respeta una "
+"redirección; activado por omisión."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+"<literal>Acquire::http::User-Agent</literal> se puede usar para definir un "
+"«User-Agent» distinto para la descarga http ya que algunos proxys sólo "
+"permiten el acceso para clientes que usan un identificador conocido."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+#, fuzzy
+#| msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "es"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "Guía de usuario de APT"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr ""
+"Este documento ofrece una introducción sobre cómo usar el gestor de paquetes "
+"APT."
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"APT y este documento son software libre. Se garantiza permiso para copiar, "
+"distribuir y modificar este documento según los términos de la GNU General "
+"Public License publicada por la Free Software Foundation, ya sea en su "
+"versión 2 o (a su elección) cualquier versión posterior."
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"Para más detalles acerca de sistemas Debian y la licencia completa, consulte "
+"el fichero «/usr/share/common-licenses/GPL»."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "General"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"El paquete APT contiene a día de hoy dos secciones, el método "
+"<command>dselect</command> y la interfaz de usuario para la línea de órdenes "
+"<command>apt-get</command>. Ambos ofrecen una manera de instalar y "
+"desinstalar paquetes, así como descargar paquetes nuevos de Internet."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "Anatomía del sistema de paquetes"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"El sistema de empaquetado de Debian tiene una gran cantidad de información "
+"asociada a cada paquete para asegurar una integración sencilla y limpia en "
+"el sistema. La característica más importante es el sistema de dependencias."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"El sistema de dependencias permite el uso de elementos compartidos en el "
+"sistema por programas individuales, tales como bibliotecas. Ésto simplifica "
+"ubicar porciones poco usadas de programas en distintos paquetes para así "
+"reducir el número de cosas que el usuario medio tiene que instalar. También "
+"permite elegir el agente de transporte del correo electrónico, el servidor "
+"de X y demás."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"El primer paso para entender el sistema de dependencias es familiarizarse "
+"con el concepto de dependencia simple. El significado de una dependencia "
+"simple es que un paquete requiere que otro también esté instalado para poder "
+"funcionar correctamente."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"Por ejemplo, mailcrypt es una extensión de emacs que asiste en el cifrado de "
+"correo con GPG. Sin GPG, mailcrypt es inservible, y por ello mailcrypt tiene "
+"una dependencia simple con GPG. Como también es una extensión de emacs tiene "
+"una dependencia simple con emacs, ya que sin él mailcrypt es inservible."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"Otra importante dependencia que debe entender es la dependencia de "
+"conflicto. Esto se produce cuando se instala un paquete junto con otro de "
+"modo que la combinación los hace inservibles, pudiendo causar daños en el "
+"sistema. Como ejemplo, suponga un agente de transporte de correo electrónico "
+"como sendmail, exim o qmail. Es imposible tener dos agentes de transporte de "
+"correo instalados ya que ambos necesitan una conexión con la red para "
+"recibir correo. El intento de instalar dos puede dañar gravemente el "
+"sistema, y por ello todos los agentes de transporte de correo tienen una "
+"dependencia de conflicto con todos los demás."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"Para complicarlo todo, cabe la posibilidad de que un paquete pretenda ser "
+"otro. En muchos aspectos, exim y sendmail son idénticos; ambos envían correo "
+"y entienden una misma interfaz. Por ello, el sistema de paquetes tiene una "
+"forma de hacer que ambos declaren ser agentes de transporte de correo («mail-"
+"transport-agent»). Así, exim y sendmail declaran que proporcionan un agente "
+"de transporte de correo y los paquetes que dependen de tales agentes "
+"dependerán de «mail-transport-agent». Esto puede añadir confusión al "
+"intentar arreglar paquetes manualmente."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"Puede que en cualquier momento una dependencia simple se satisfaga por "
+"paquetes ya instalados, o que la dependencia no esté satisfecha. APT intenta "
+"asistir en la resolución de problemas de dependencias mediante un número de "
+"algoritmos automáticos que ayudan en la selección de paquetes a instalar."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"<command>apt-get</command> ofrece una forma sencilla de instalar paquetes "
+"desde la línea de órdenes. A diferencia de <command>dpkg</command>, "
+"<command>apt-get</command> no intenta comprender los ficheros «.deb», sino "
+"que funciona con el nombre real del paquete y sólo puede instalar ficheros «."
+"deb» desde una <emphasis>fuente</emphasis>."
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"Si está usando un servidor proxy primero debe definir la variable de entorno "
+"http_proxy, consulte sources.list (5)."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"La primera <placeholder type=\"footnote\" id=\"0\"/> cosa que debería hacer "
+"antes de usar <command>apt-get</command> es obtener las listas de paquetes "
+"desde las <emphasis>fuentes</emphasis> para así conocer los paquetes "
+"disponibles. Puede hacer esto mediante <literal>apt-get update</literal>. "
+"Por ejemplo,"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"Des http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Des http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Leyendo lista de paquetes... Hecho\n"
+"Creando árbol de dependencias... Hecho\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr "Puede usar varias órdenes después de actualizar:"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"«upgrade» intentará actualizar con cuidado todo el sistema. «upgrade» nunca "
+"intentará instalar un paquete nuevo o eliminar un paquete existente, y en "
+"ningún caso actualizará un paquete que pueda causar un problema de "
+"dependencias rotas a otro paquete. «upgrade» mostrará todos los paquetes que "
+"no pudo actualizar, lo cual generalmente significa que dependen de paquetes "
+"nuevos o que entran en conflicto con otro paquete. Puede usar "
+"<command>dselect</command> o <literal>apt-get install</literal> para forzar "
+"la instalación de tales paquetes."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"«install» se usa para instalar paquetes por nombre. El paquete se obtendrá e "
+"instalará automáticamente. Es de utilidad si ya conoce el nombre del paquete "
+"a instalar y no desea ejecutar una interfaz gráfica para seleccionarlo. "
+"Puede introducir cualquier número de paquetes para su instalación y todos se "
+"obtendrán. La instalación automática intenta resolver problemas de "
+"dependencias con los paquetes listados, y mostrará un resumen al pedir una "
+"confirmación en caso de modificar cualquiera de los argumentos introducidos."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"«dist-upgrade» es una actualizador completo diseñado para simplificar la "
+"actualización entre publicaciones de Debian. Utiliza un sofisticado "
+"algoritmo para diseñar el mejor conjunto de paquetes a instalar, actualizar "
+"y eliminar para así obtener cuanto sea posible de la última publicación. "
+"Puede que en algunas situaciones desee usar «dist-upgrade» en lugar de pasar "
+"tiempo resolviendo dependencias con <command>dselect</command>. Puede usar "
+"<command>dselect</command> para instalar cualquier paquete que se haya "
+"quedado atrás."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"Es importante revisar lo que «dist-upgrade» planea hacer, ya que sus "
+"decisiones a veces pueden resultar sorprendentes."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"<command>apt-get</command> ofrece varias opciones de línea de órdenes "
+"detalladas en su página de manual, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. La opción más útil es "
+"<literal>-d</literal>, que no instala los ficheros obtenidos. Puede que no "
+"desee instalar los paquetes de inicio si el sistema se tiene que descargar "
+"un gran número de éstos, en caso de que algo vaya mal. Cuando usa <literal>-"
+"d</literal> puede instalar los ficheros descargados simplemente ejecutando "
+"la orden que provocó su descarga, sin <literal>-d</literal>."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"El método <command>dselect</command> de APT ofrece el sistema completo de "
+"APT con la interfaz gráfica de selección de paquetes <command>dselect</"
+"command>. <command>dselect</command> se usa para seleccionar los paquetes a "
+"instalar o desinstalar que en realidad instalará APT."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"Para habilitar el método APT tiene que seleccionar [M]étodo en "
+"<command>dselect</command>, y después seleccionar el método APT. Se le "
+"pedirá un conjunto de <emphasis>fuentes</emphasis>, ubicaciones de donde "
+"obtener los ficheros. Pueden ser sitios remotos de Internet, replicas "
+"locales de Debian o discos ópticos. Cada fuente puede proporcionar un "
+"fragmento del total del archivo Debian, los cuales APT combinará "
+"automáticamente para formar un conjunto completo de paquetes. Si tiene un "
+"disco óptico es una buena idea definirlo primero en el fichero de "
+"configuración y después especificar una replica para así tener acceso a los "
+"últimos arreglos de fallos. APT usará automáticamente los paquetes del disco "
+"óptico en lugar de descargarlos de Internet."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"La configuración de las <emphasis>fuentes</emphasis> comienza preguntando la "
+"base del archivo de Debian, cuyo valor predeterminado es una réplica HTTP. A "
+"continuación, preguntará la distribución a obtener."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"La distribución se refiere a la versión de Debian en el archivo, "
+"<emphasis>stable</emphasis> (estable) se refiere a la última versión "
+"publicada, y <emphasis>unstable</emphasis> (inestable) se refiere a la "
+"versión en desarrollo. <emphasis>non-US</emphasis> sólo está disponible en "
+"algunas réplicas, aquellos paquetes que contienen tecnología cifrada y otras "
+"cosas que no se pueden exportar desde los Estados Unidos. Aun así, importar "
+"estos paquetes a E.E.U.U es ilegal."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"La lista de componentes se refiere a la lista de sub-distribuciones a "
+"obtener. La distribución está dividida en base a licencias de software, "
+"siendo «main» paquetes libres de acuerdo con DFSG, mientras que «contrib» y "
+"«non-free» contienen paquetes con restricciones en cuanto a su uso y "
+"distribución."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"Puede añadir cualquier número de fuentes, el script de configuración le "
+"preguntará por fuentes hasta que el usuario defina todo lo que quiera."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"Es necesario actualizar la lista disponible mediante el elemento de menú "
+"[A]ctualizar antes de iniciar <command>dselect</command>. Éste es un "
+"superconjunto de <literal>apt-get update</literal> que permite a "
+"<command>dselect</command> disponer de la información obtenida. Debe "
+"ejecutar [A]ctualizar aunque haya ejecutado <literal>apt-get update</"
+"literal> con anterioridad."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"Hecho esto puede realizar sus selecciones usando [S]elect y ejecutar la "
+"instalación posteriormente con [I]nstall. Al usar el método APT las órdenes "
+"[C]onfig y [R]emove carecen de significado ya que la orden [I]nstall ejecuta "
+"ambos a la vez."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"Por omisión, APT eliminará automáticamente los ficheros de paquete («.deb») "
+"una vez que se hayan instalado con éxito. Para modificar este "
+"comportamiento, inserte <literal>Dselect::clean \"prompt\";</literal> en «/"
+"etc/apt/apt.conf»."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "La interfaz"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"El método <command>dselect</command> es en realidad un conjunto de scripts "
+"en torno a <command>apt-get</command>. En realidad, el método ofrece más "
+"funcionalidad que la presente en <command>apt-get</command> por si mismo."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"El método <command>dselect</command> de APT y <command>apt-get</command> "
+"comparten la misma interfaz. Es un sencillo programa que le informa de lo "
+"que va a hacer, para después llevarlo a cabo. <placeholder type=\"footnote\" "
+"id=\"0\"/> Después de mostrar el resumen de lo que va a pasar APT mostrará "
+"mensajes de estado informativos para ofrecer una estimación de cuánto queda "
+"por hacer."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "Arranque"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"APT realiza un número de acciones para preparar su estado interno antes de "
+"cualquier operación, a excepción de «update». También realiza algunas "
+"revisiones del estado del sistema. Puede llevar a cabo estas acciones en "
+"cualquier momento ejecutando <literal>apt-get check</literal>."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"Leyendo lista de paquetes... Hecho\n"
+"Creando árbol de dependencias... Hecho\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"La primera acción que ejecuta es pasar todos los ficheros de paquete a la "
+"memoria. APT usa un esquema de almacenado con lo cual esta operación será "
+"más rápida la segunda vez que la ejecute. De no encontrar algún fichero de "
+"paquete, éstos se ignorarán y verá una advertencia al finalizar apt-get."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"La última acción realiza un detallado análisis de las dependencias del "
+"sistema. Revisa cada dependencia de cada paquete instalado o sin "
+"desempaquetar analiza su validación. En caso de error aparecerá un informe, "
+"y <command>apt-get</command> se negará a ejecutarse."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"Leyendo lista de paquetes... Hecho\n"
+"Creando árbol de dependencias... Hecho\n"
+"Tal vez quiera ejecutar 'apt --fix-broken install' para corregirlo.\n"
+"Los siguientes paquetes tienen dependencias incumplidas:\n"
+" 9fonts: Depende: xlib6g pero no está instalado\n"
+" uucp: Depende: mailx pero no está instalado\n"
+" blast: Depende: xlib6g (&gt;= 3.3-5) pero no está instalado\n"
+" adduser: Depende: perl-base pero no está instalado\n"
+" aumix: Depende: libgpmg1 pero no está instalado\n"
+" debiandoc-sgml: Depende: sgml-base pero no está instalado\n"
+" bash-builtins: Depende: bash (&gt;= 2.01) pero 2.0-3 está instalado\n"
+" cthugha: Depende: svgalibg1 pero no está instalado\n"
+" Depende: xlib6g (&gt;= 3.3-5) pero no está instalado\n"
+" libreadlineg2: Entra en conflicto:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"En este ejemplo el sistema tiene varios problemas, incluyendo un serio "
+"problema con libreadlineg2. Una línea aparecerá por cada paquete con "
+"dependencias no satisfechas indicando el paquete con el problema y las "
+"dependencias no satisfechas. También incluye una explicación de porqué el "
+"paquete tiene un problema de dependencias."
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"APT, de todas formas, considera todas las dependencias conocidas e intenta "
+"prevenir paquetes rotos"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"Hay dos formas de que el sistema tenga un estado roto como éste. El primero "
+"es causado por la omisión de <command>dpkg</command> de ciertas relaciones "
+"delicadas entre paquetes al realizar una actualización. <placeholder type="
+"\"footnote\" id=\"0\"/>. El segundo ocurre se la instalación de un paquete "
+"falla durante la operación. En esta situación puede que un paquete se haya "
+"desempaquetado sin que sus dependencias estuviesen instaladas previamente."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"La segunda situación es mucho menos grave que la primera ya que APT define "
+"ciertos límites en el orden de instalación de los paquetes. En ambos casos, "
+"introducir la opción <literal>-f</literal> a <command>apt-get</command> "
+"causará que APT deduzca una posible solución al problema para después "
+"continuar. El método <command>dselect</command> de APT siempre ofrece la "
+"opción <literal>-f</literal> para permitir una fácil continuación cuando "
+"existen scripts fallidos del mantenedor."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"Aún así, de usar la opción <literal>-f</literal> para corregir un sistema "
+"gravemente roto por el primer caso cabe que la acción falle inmediatamente o "
+"que la secuencia de instalación se interrumpa. En cualquier caso es "
+"necesario usar dpkg manualmente (puede que con opciones de forzado) para "
+"corregir la situación lo suficiente como para que APT pueda continuar."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "El informe de estado"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"Antes de proceder <command>apt-get</command> presentará un informe de lo que "
+"va a ocurrir. Generalmente el informe refleja el tipo de operación a "
+"realizar, pero hay ciertos elementos comunes. La lista refleja el estado "
+"final de las cosas en todos los casos, teniendo en cuenta la opción "
+"<literal>-f</literal> y cualquier otra actividad relevante a la orden "
+"ejecutada."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "La lista de paquetes extras"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"Se instalarán los siguientes paquetes extras:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"La lista de paquetes extras muestra todos los paquetes que se van a instalar "
+"o actualizar en adición a aquellos mencionados en la línea de órdenes. Sólo "
+"se genera para la orden <literal>install</literal>. Generalmente, los "
+"paquetes listados son el resultado de una instalación automática."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "Los paquetes a eliminar"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"Los siguientes paquetes se ELIMINARÁN:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"La lista de paquetes a eliminar muestra todos los paquetes que se van a "
+"eliminar del sistema. Puede aparecer durante cualquier operación, y se "
+"debería revisar cuidadosamente para asegurar que no se va a eliminar nada "
+"importante. La opción <literal>-f</literal> puede generar varios paquetes a "
+"eliminar así que se debe utilizar con precaución. La lista puede contener "
+"paquetes a eliminar porque están parcialmente instalados, posiblemente "
+"debido a una instalación interrumpida."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "La lista de paquetes nuevos"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"Se instalarán los siguientes paquetes NUEVOS:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"La lista de paquetes nuevos es sólo un recordatorio de lo que va a ocurrir. "
+"Los paquetes listados no se encuentran instalados en el sistema pero lo "
+"estarán cuando APT finalice."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "La lista de paquetes retenidos"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"Los siguientes paquetes se han retenido:\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"Puede que al actualizar el sistema por completo no se puedan instalar "
+"versiones nuevas de paquetes porque requieren nuevos elementos que entran en "
+"conflicto con paquetes ya instalados. En este caso, el paquete aparecerá en "
+"la lista de paquetes retenidos. La mejor manera de instalar paquetes "
+"listados aquí es mediante <literal>apt-get install</literal> o mediante "
+"<command>dselect</command> para así resolver esos problemas."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "Advertencia de paquetes retenidos"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"Se cambiarán los siguientes paquetes retenidos:\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"Puede que a veces ordene a APT que instale un paquete retenido, en cuyo caso "
+"verá una advertencia de que el paquete retenido se va a modificar. Esto sólo "
+"debería ocurrir durante un «dist-upgrade» o un «install»."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "Resumen final"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+"Por último, APT mostrará un resumen de los cambios que se llevarán a cabo."
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"206 paquetes actualizados, 8 se instalarán, 23 para eliminar y 51 no\n"
+"actualizados.\n"
+"12 paquetes no instalados del todo o eliminados.\n"
+"Se necesita descargar 65.7M/66.7M de archivos. Se usarán 26.5M después de desempaquetar.\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"La primera línea del resumen es simplemente una versión reducida de todas "
+"las listas e incluye el número de actualizaciones, esto es, paquetes ya "
+"instalados y de los cuales existen versiones nuevas disponibles. La segunda "
+"línea indica el número de paquetes mal configurados, posiblemente el "
+"resultado de una instalación interrumpida. La última línea muestra los "
+"requerimientos de espacio para la instalación. El primer par de números "
+"indican el tamaño de los ficheros del archivo. El primer número indica el "
+"número de bytes que se tienen que obtener de ubicaciones remotas, y el "
+"segundo indica el tamaño total de todos los archivos requeridos. El "
+"siguiente número indica la diferencia de tamaño entre los paquetes "
+"instalados y los paquetes nuevos a instalar. Básicamente equivale al espacio "
+"requerido en «/usr» al finalizar el proceso. En caso de existir varios "
+"paquetes a eliminar el valor puede indicar la cantidad de espacio que se va "
+"a liberar."
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"Puede generar otros informes con la opción «-u» para mostrar los paquetes a "
+"actualizar, similar a los ejemplos anteriores."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "La pantalla de estado"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"APT muestra una serie de mensajes de estado en el transcurso de descargar "
+"ficheros de paquete y archivo."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"Des:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Des:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Obj http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Des:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"es:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free Esperando las cabeceras 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"Las líneas comenzando con <emphasis>Des</emphasis> aparecen cuando APT "
+"inicia la obtención de un fichero, mientras que la última línea indica el "
+"progreso de la descarga. El primer valor porcentual en la barra de progreso "
+"indica el porcentaje total de los ficheros ya descargados. "
+"Desafortunadamente, <literal>apt-get update</literal> desconoce el tamaño de "
+"los ficheros de paquete y por ello genera una estimación que puede ser "
+"inexacta."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"La siguiente sección de la línea de estado se repite por cada instancia de "
+"descarga e indica la operación realizada, así como información útil relativa "
+"a lo que está pasando. Puede que esta sección sólo muestre "
+"<emphasis>Forking</emphasis>, lo cual significa que el sistema operativo "
+"está cargando el módulo de descargas. La primera palabra después de «[» es "
+"el número de obtención tal y como se muestra en la línea del histórico. La "
+"siguiente palabra es la forma corta del nombre del objeto en descarga. Al "
+"conectarse con los archivos, contendrá el nombre del paquete obtenido."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"Una cadena informativa aparecerá entre comillas simples indicando el "
+"progreso de la fase de negociación de la descarga. Generalmente progresa de "
+"<emphasis>Conectando</emphasis> a <emphasis>Esperando fichero</emphasis>, "
+"finalizando con <emphasis>Descargando</emphasis> o <emphasis>Continuando</"
+"emphasis>. El último valor es el número de bytes descargados desde el sitio "
+"remoto. Una vez que la descarga arranque se representará como "
+"<literal>102/10.2k</literal> indicando que ya se han obtenido 102 bytes y "
+"que se esperan 10.2 kilobytes. El tamaño total siempre aparece con la "
+"notación de la figura 4 para conservar espacio. A continuación aparece un "
+"medidor porcentual del fichero. El penúltimo elemento es la media "
+"instantánea de velocidad. Estos valores se actualizan cada 5 segundos y "
+"reflejan la tasa de descarga de datos de ese periodo. Por último puede ver "
+"el tiempo estimado para la transferencia. Esto se actualiza regularmente y "
+"refleja el tiempo restante para completar todo tal y como se ve en la tasa "
+"de transferencia visible."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"La pantalla de estado se actualiza cada medio segundo para ofrecer una "
+"constante información del progreso de la descarga, mientras que las líneas "
+"«Des» se desplazan hacia atrás cuando se inicia la descarga de otro fichero. "
+"Ya que la pantalla de estado se actualiza constantemente carece de utilidad "
+"para su registro en un fichero. Puede usar la opción <literal>-q</literal> "
+"para omitir la pantalla de estado."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"APT usa <command>dpkg</command> para instalar ficheros, y pasará a "
+"interactuar con <command>dpkg</command> al finalizar la descarga. "
+"<command>dpkg</command> también planteará un número de preguntas a medida "
+"que procesa los paquetes, los cuales también pueden formular preguntas. A "
+"cada pregunta generalmente le precede una descripción de la pregunta en sí. "
+"Éstas son demasiado variadas como para poder tratarlas aquí en su totalidad."
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "Uso de APT Offline"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"Este documento describe el uso de APT en un entorno sin conexión a red, "
+"específicamente una aproximación «sneaker-net» a la tarea de actualización."
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "Introducción"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "Resumen"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"Generalmente, APT necesita un acceso directo a un archivo de Debian, bien "
+"desde un dispositivo local o a través de una red. Otra queja frecuente es "
+"que una máquina con un sistema Debian dispone de una conexión lenta como la "
+"de un módem, y otra máquina físicamente lejos dispone de una conexión muy "
+"rápida."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"La solución a esto es usar dispositivos extraíbles de gran capacidad tales "
+"como un disco Zip o uno SuperDisk. Estos discos no tienen la suficiente "
+"capacidad para almacenar todo el archivo de Debian, pero pueden contener un "
+"sub-conjunto suficientemente grande para la mayoría de usuarios. La idea es "
+"usar APT para generar una lista de los paquetes requeridos para después "
+"almacenarlos en un disco usando el sistema que tiene una conexión rápida. Es "
+"incluso posible usar otro sistema Debian con APT, o usar un sistema "
+"operativo totalmente distinto junto con una herramienta de descarga como "
+"wget. Digamos que el <emphasis>sistema remoto</emphasis> es aquél que "
+"descarga los paquetes, y <emphasis>sistema destino</emphasis> es aquél con "
+"poca o ninguna conexión."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"Esto se logra manipulando con imaginación el fichero de configuración de "
+"APT. La premisa esencial es decirle a APT que busque en el disco los "
+"ficheros del archivo. Tenga en cuenta que el disco debería tener un formato "
+"de un sistema de ficheros capaz de gestionar nombres largos de ficheros, "
+"tales como ext2, fat32 o vfat."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "Uso de APT en ambas máquinas"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"La configuración más sencilla es posible si APT está instalado en ambas "
+"máquinas. La idea básica es guardar una copia del fichero de estado en el "
+"disco, después usar el sistema remoto para obtener los últimos ficheros de "
+"paquete y decidir qué paquetes descargar. La estructura de directorios del "
+"disco debería tener este aspecto:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "El fichero de configuración"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"El fichero de configuración debería indicar a APT que guarde los ficheros en "
+"el disco, y también utilizar los ficheros de configuración en el disco. El "
+"fichero «sources.list» debería contener los sitios apropiados que desea "
+"utilizar desde el sistema remoto, y el fichero de estado debería ser una "
+"copia de <emphasis>/var/lib/dpkg/status</emphasis> del <emphasis>sistema "
+"destino</emphasis>. Tenga en cuenta que si usa un archivo local debe usar el "
+"URI «copy», de idéntica sintaxis al URI «file»."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt-conf</emphasis> debe contener toda la información necesaria "
+"para que APT use el disco:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* Esto no es necesario si ambos sistemas tienen la misma arquitectura,\n"
+" informa al APT remoto la arquitectura del sistema destino */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use el disco para información de estado y redireccionar el fichero de\n"
+" estado desde el valor predeterminado «/var/lib/dpkg» */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Los cachés binarios se guardan localmente\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Ubicación del fichero de fuentes.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"Para más detalles consulte la página de manual y el fichero de configuración "
+"de ejemplo en <emphasis>/usr/share/doc/apt/examples/apt.conf</emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"Lo primero que debe hacer en el sistema destino es montar el disco y guardar "
+"en él una copia de <emphasis>/var/lib/dpkg/status</emphasis>. También debe "
+"crear los directorios definidos en el Resumen, <emphasis>archives/partial/</"
+"emphasis> y <emphasis>lists/partial/</emphasis>. Después, lleve el disco "
+"hasta el sistema remoto y configure «sources.list». Ejecute lo siguiente en "
+"el sistema remoto:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT obtiene los ficheros de paquete ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT obtiene todos los paquetes necesarios para actualizar el sistema\n"
+" destino ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"Puede reemplazar la orden «dist-upgrade» con cualquiera otra orden estándar "
+"de APT, en especial «dselect-upgrade». Incluso puede usar una interfaz de "
+"APT como <emphasis>dselect</emphasis>. Sin embargo, esto presenta un "
+"problema al informar después de sus selecciones al sistema remoto."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"Ahora el disco contiene todos los ficheros de índice y archivo necesarios "
+"para actualizar el sistema destino. Inserte el disco otra vez y ejecute:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT genera una copia local de los ficheros de caché ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ O cualquiera otra orden de APT ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"Para un correcto funcionamiento debe definir nuevamente el fichero de estado "
+"local. Tiene una importancia crucial."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"Si está usando dselect puede realizar la arriesgada operación de copiar "
+"«disc/status» a «/var/lib/dpkg/status» para actualizar todas las selecciones "
+"hecha en el sistema remoto. Recomiendo seriamente hacer las selecciones sólo "
+"en el sistema local, aunque puede que no sea posible. NO copie el fichero de "
+"estado si dpkg o APT se han ejecutado mientras tanto."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "Uso de APT y wget"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> es una herramienta de descarga muy popular que "
+"funciona prácticamente en cualquier sistema. A diferencia del método "
+"anterior, requiere que el sistema Debian tenga una lista de paquetes "
+"disponibles."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"La idea básica es crear un disco que sólo contiene los ficheros del archivo "
+"descargados desde el sistema remoto. Esto se hace mediante la opción de apt-"
+"get «--print-uris», para después preparar un script de wget que finalmente "
+"obtendrá los paquetes."
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "Operación"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"A diferencia de la técnica anterior, no requiere ningún fichero de "
+"configuración especial. Solo se utilizan órdenes estándar de APT para "
+"generar el fichero con la lista."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade \n"
+" [ Pulse no cuando se le pregunte, asegúrese de estar conforme con las\n"
+" acciones ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"Se puede utilizar cualquier otra orden aparte de «dist-upgrade», incluyendo "
+"«dselect-upgrade»."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"El fichero «/disc/wget-script» ahora contiene una lista de órdenes de wget a "
+"ejecutar para obtener los archivos necesarios. Este script se debería "
+"ejecutar en el directorio del punto de montaje del disco para poder guardar "
+"la salida en el disco."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr "El sistema remoto haría algo como"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"Una vez que los archivos se han descargado y el disco está finalmente "
+"conectado al sistema Debian, ejecute la instalación con lo siguiente."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr "Esto utiliza los archivos del disco previamente obtenidos."
+
+#~ msgid ""
+#~ "<literal>http::Proxy</literal> sets the default proxy to use for HTTP "
+#~ "URIs. It is in the standard form of <literal>http://[[user][:pass]@]host[:"
+#~ "port]/</literal>. Per host proxies can also be specified by using the "
+#~ "form <literal>http::Proxy::&lt;host&gt;</literal> with the special "
+#~ "keyword <literal>DIRECT</literal> meaning to use no proxies. If no one of "
+#~ "the above settings is specified, <envar>http_proxy</envar> environment "
+#~ "variable will be used."
+#~ msgstr ""
+#~ "<literal>http::Proxy</literal> define el proxy predeterminado que "
+#~ "utilizar para direcciones HTTP URI. Utiliza el formato estándar "
+#~ "<literal>http://[[usuario][:contraseña]@]máquina[:puerto]/</literal>. "
+#~ "También se puede especificar un proxy por cada máquina usando la forma "
+#~ "<literal>http::Proxy::&lt;máquina&gt;</literal> con la palabra especial "
+#~ "<literal>DIRECT</literal> que significa que no se use ningún proxy. La "
+#~ "variable de entorno <envar>http_proxy</envar> se usará en caso de no "
+#~ "definir ninguna de las opciones anteriores."
+
+#~ msgid ""
+#~ "The <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> and "
+#~ "<literal>proxy</literal> options work for HTTPS URIs in the same way as "
+#~ "for the <literal>http</literal> method, and default to the same values if "
+#~ "they are not explicitly set. The <literal>Pipeline-Depth</literal> option "
+#~ "is not yet supported."
+#~ msgstr ""
+#~ "Las opciones <literal>Cache-control</literal>, <literal>Timeout</"
+#~ "literal>, <literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> y "
+#~ "<literal>proxy</literal> funcionan con direcciones HTTPS URI de la misma "
+#~ "forma que con el método <literal>http</literal>, y utiliza los mismos "
+#~ "valores predeterminados si no se define. Aún no se permite la opción "
+#~ "<literal>Pipeline-Depth</literal>."
+
+#~ msgid ""
+#~ "<literal>CaInfo</literal> suboption specifies place of file that holds "
+#~ "info about trusted certificates. <literal>&lt;host&gt;::CaInfo</literal> "
+#~ "is the corresponding per-host option. <literal>Verify-Peer</literal> "
+#~ "boolean suboption determines whether or not the server's host certificate "
+#~ "should be verified against trusted certificates. <literal>&lt;host&gt;::"
+#~ "Verify-Peer</literal> is the corresponding per-host option. "
+#~ "<literal>Verify-Host</literal> boolean suboption determines whether or "
+#~ "not the server's hostname should be verified. <literal>&lt;host&gt;::"
+#~ "Verify-Host</literal> is the corresponding per-host option. "
+#~ "<literal>SslCert</literal> determines what certificate to use for client "
+#~ "authentication. <literal>&lt;host&gt;::SslCert</literal> is the "
+#~ "corresponding per-host option. <literal>SslKey</literal> determines what "
+#~ "private key to use for client authentication. <literal>&lt;host&gt;::"
+#~ "SslKey</literal> is the corresponding per-host option. "
+#~ "<literal>SslForceVersion</literal> overrides default SSL version to use. "
+#~ "It can contain either of the strings '<literal>TLSv1</literal>' or "
+#~ "'<literal>SSLv3</literal>'. <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> is the corresponding per-host option."
+#~ msgstr ""
+#~ "La subopción <literal>CaInfo</literal> define la ubicación del fichero "
+#~ "que guarda la información sobre certificados de confianza. <literal>&lt;"
+#~ "host&gt;::CaInfo</literal> es la opción correspondiente para cada "
+#~ "servidor. La subopción booleana <literal>Verify-Peer</literal> define si "
+#~ "se debe comprobar el certificado del servidor con certificados de "
+#~ "confianza. <literal>&lt;host&gt;::Verify-Peer</literal> es la opción "
+#~ "correspondiente para cada servidor. La subopción booleana <literal>Verify-"
+#~ "Host</literal> define si se debe comprobar el «hostname» del servidor. "
+#~ "<literal>&lt;host&gt;::Verify-Host</literal> es la opción correspondiente "
+#~ "para cada servidor. <literal>SslCert</literal> define el certificado que "
+#~ "utilizar para la autenticación del cliente. <literal>&lt;host&gt;::"
+#~ "SslCert</literal> es la opción correspondiente para cada servidor. "
+#~ "<literal>SslKey</literal> define la clave privada que utilizar para la "
+#~ "autenticación del cliente. <literal>&lt;host&gt;::SslKey</literal> es la "
+#~ "opción correspondiente para cada servidor. <literal>SslForceVersion</"
+#~ "literal> sustituye la versión predeterminada de SSL que utilizar. Se "
+#~ "admiten las cadenas «<literal>TLSv1</literal>» o «<literal>SSLv3</"
+#~ "literal>». <literal>&lt;host&gt;::SslForceVersion</literal> es la opción "
+#~ "correspondiente para cada servidor."
+
+#~ msgid ""
+#~ "The http scheme specifies an HTTP server for the archive. If an "
+#~ "environment variable <envar>http_proxy</envar> is set with the format "
+#~ "http://server:port/, the proxy server specified in <envar>http_proxy</"
+#~ "envar> will be used. Users of authenticated HTTP/1.1 proxies may use a "
+#~ "string of the format http://user:pass@server:port/. Note that this is an "
+#~ "insecure method of authentication."
+#~ msgstr ""
+#~ "El esquema «http» define un servidor HTTP como el archivo de paquetes. Si "
+#~ "la variable de entorno <envar>http_proxy</envar> está definida con "
+#~ "formato «http://servidor:puerto/», se usará el servidor proxy definido en "
+#~ "<envar>http_proxy</envar>. Los usuarios de servidores proxy con "
+#~ "autenticación HTTP/1.1 deberán usar la cadena de caracteres «http://"
+#~ "usuario:contraseña@servidor:puerto/». Tenga en cuenta que este método de "
+#~ "autenticación no es seguro."
+
+#~ msgid "Archive Configuration"
+#~ msgstr "Configuración del archivo"
+
+#~ msgid "dpkg trigger usage (and related options)"
+#~ msgstr "Uso del disparador de dpkg (y de las opciones relacionadas)"
+
+#~ msgid ""
+#~ "APT can call &dpkg; in such a way as to let it make aggressive use of "
+#~ "triggers over multiple calls of &dpkg;. Without further options &dpkg; "
+#~ "will use triggers once each time it runs. Activating these options can "
+#~ "therefore decrease the time needed to perform the install or upgrade. "
+#~ "Note that it is intended to activate these options per default in the "
+#~ "future, but as it drastically changes the way APT calls &dpkg; it needs a "
+#~ "lot more testing. <emphasis>These options are therefore currently "
+#~ "experimental and should not be used in production environments.</"
+#~ "emphasis> It also breaks progress reporting such that all front-ends will "
+#~ "currently stay around half (or more) of the time in the 100% state while "
+#~ "it actually configures all packages."
+#~ msgstr ""
+#~ "APT puede invocar &dpkg; de forma que pueda hacer un uso agresivo de los "
+#~ "disparadores («triggers») mediante varias invocaciones a &dpkg;. Sin no "
+#~ "se definen más opciones, &dpkg; utilizará los disparadores una durante su "
+#~ "ejecución. Si se activan estas opciones, se puede reducir el tiempo "
+#~ "necesario para realizar la instalación o la actualización. Tenga en "
+#~ "cuenta que está diseñado para que estas opciones se activen de forma "
+#~ "predeterminada en un futuro, pero debido a los cambios drásticos en la "
+#~ "manera en que APT invoca a &dpkg;, necesita más pruebas. "
+#~ "<emphasis>Actualmente, estas opciones son experimentales, y no se "
+#~ "deberían usar en entornos de producción.</emphasis> También provoca un "
+#~ "fallo en el informe de progreso, con lo que todas las interfaces muestran "
+#~ "un progreso del 100% durante la mitad del tiempo (o más) durante la "
+#~ "configuración de todos los paquetes."
+
+#~ msgid ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+#~ msgstr ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+
+#~ msgid ""
+#~ "Note that it is not guaranteed that APT will support these options or "
+#~ "that these options will not cause (big) trouble in the future. If you "
+#~ "have understand the current risks and problems with these options, but "
+#~ "are brave enough to help testing them, create a new configuration file "
+#~ "and test a combination of options. Please report any bugs, problems and "
+#~ "improvements you encounter and make sure to note which options you have "
+#~ "used in your reports. Asking &dpkg; for help could also be useful for "
+#~ "debugging proposes, see e.g. <command>dpkg --audit</command>. A defensive "
+#~ "option combination would be <placeholder type=\"literallayout\" id=\"0\"/>"
+#~ msgstr ""
+#~ "Tenga en cuenta que no se garantiza que APT permitirá usar estas opciones "
+#~ "o que estas opciones no causen un (gran) problema en el futuro. Si ha "
+#~ "entendido los riesgos y los problemas actuales con estas opciones pero es "
+#~ "lo suficientemente valiente para ayudar a probarlas, cree un nuevo "
+#~ "fichero de configuración y pruebe una combinación de las opciones. Por "
+#~ "favor, informe de cualquier error, problema o mejora que encuentre y "
+#~ "asegúrese de apuntar en sus informes qué opciones ha usado. Pedir ayuda a "
+#~ "&dpkg; también puede ser útil por motivos de depuración, véase por "
+#~ "ejemplo: <command>dpkg --audit</command>. Una combinación de opciones "
+#~ "defensivas sería <placeholder type=\"literallayout\" id=\"0\"/>"
+
+#~ msgid ""
+#~ "Add the no triggers flag to all &dpkg; calls (except the ConfigurePending "
+#~ "call). See &dpkg; if you are interested in what this actually means. In "
+#~ "short: &dpkg; will not run the triggers when this flag is present unless "
+#~ "it is explicitly called to do so in an extra call. Note that this option "
+#~ "exists (undocumented) also in older APT versions with a slightly "
+#~ "different meaning: Previously these option only append --no-triggers to "
+#~ "the configure calls to &dpkg; - now APT will also add this flag to the "
+#~ "unpack and remove calls."
+#~ msgstr ""
+#~ "Añade a todas las invocaciones a &dpkg; la opción sin disparadores («no "
+#~ "triggers»), excepto a la invocación a «ConfigurePending». Consulte &dpkg; "
+#~ "si está interesado en saber qué significa esto. De forma breve: &dpkg; no "
+#~ "ejecuta los disparadores cuando está opción está presente a menos que se "
+#~ "ejecute explícitamente con una invocación adicional. Tenga en cuenta que "
+#~ "esta opción también existe en versiones antiguas de APT (aunque sin "
+#~ "documentar) con un significado diferente. Anteriormente sólo se añadía la "
+#~ "opción «--no-triggers» a las invocaciones de la configuración para "
+#~ "&dpkg;, ahora APT también añade esta opción a las invocaciones de "
+#~ "desempaquetado y eliminación."
+
+#~ msgid ""
+#~ "Valid values are \"<literal>all</literal>\", \"<literal>smart</literal>\" "
+#~ "and \"<literal>no</literal>\". The default value is \"<literal>all</"
+#~ "literal>\", which causes APT to configure all packages. The "
+#~ "\"<literal>smart</literal>\" way is to configure only packages which need "
+#~ "to be configured before another package can be unpacked (Pre-Depends), "
+#~ "and let the rest be configured by &dpkg; with a call generated by the "
+#~ "ConfigurePending option (see below). On the other hand, \"<literal>no</"
+#~ "literal>\" will not configure anything, and totally relies on &dpkg; for "
+#~ "configuration (which at the moment will fail if a Pre-Depends is "
+#~ "encountered). Setting this option to any value other than <literal>all</"
+#~ "literal> will implicitly also activate the next option by default, as "
+#~ "otherwise the system could end in an unconfigured and potentially "
+#~ "unbootable state."
+#~ msgstr ""
+#~ "Los valores válidos son «<literal>all</literal>», «<literal>smart</"
+#~ "literal>» y «<literal>no</literal>». El valor predeterminado es "
+#~ "«<literal>all</literal>», que hace que APT configure todos los paquetes. "
+#~ "El valor «<literal>smart</literal>» sólo configura los paquetes que "
+#~ "requieren ser configurados antes de que se desempaquete otro paquete "
+#~ "(predependencia) y permite que &dpkg; configure los restantes con una "
+#~ "invocación generada por la opción «ConfigurePending» (más abajo). El "
+#~ "valor «<literal>no</literal>» no configura nada y depende por completo de "
+#~ "&dpkg; para la configuración (que fallará si se encuentra una pre-"
+#~ "dependencia). Si se define esta opción con un valor distinto a "
+#~ "«<literal>all</literal>» activa implícitamente la siguiente opción de "
+#~ "forma predeterminada, ya que de otro modo el sistema podría terminar en "
+#~ "un estado mal configurado qué podría derivar en la imposibilidad de "
+#~ "arrancar el sistema. "
+
+#~ msgid ""
+#~ "Useful for the <literal>smart</literal> configuration as a package which "
+#~ "has pending triggers is not considered as <literal>installed</literal>, "
+#~ "and &dpkg; treats them as <literal>unpacked</literal> currently which is "
+#~ "a showstopper for Pre-Dependencies (see debbugs #526774). Note that this "
+#~ "will process all triggers, not only the triggers needed to configure this "
+#~ "package."
+#~ msgstr ""
+#~ "Útil para una configuración <literal>smart</literal> en la que un paquete "
+#~ "que tiene disparadores pendientes no se considera como "
+#~ "<literal>instalado</literal> y que dpkg lo trata como "
+#~ "<literal>desempaquetado</literal>, lo cual entra en conflicto con el "
+#~ "sistema de pre-dependencias (véase debbugs #526774). Tenga en cuenta que "
+#~ "esto procesará todos los disparadores, no sólo los disparadores "
+#~ "necesarios para configurar este paquete."
+
+#~ msgid ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+#~ msgstr ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+
+#~ msgid ""
+#~ "Essential packages (and their dependencies) should be configured "
+#~ "immediately after unpacking. It is a good idea to do this quite early in "
+#~ "the upgrade process as these configure calls also currently require "
+#~ "<literal>DPkg::TriggersPending</literal> which will run quite a few "
+#~ "triggers (which may not be needed). Essentials get per default a high "
+#~ "score but the immediate flag is relatively low (a package which has a Pre-"
+#~ "Depends is rated higher). These option and the others in the same group "
+#~ "can be used to change the scoring. The following example shows the "
+#~ "settings with their default values. <placeholder type=\"literallayout\" "
+#~ "id=\"0\"/>"
+#~ msgstr ""
+#~ "Los paquetes esenciales (y sus dependencias) se deberían configurar "
+#~ "inmediatamente después de desempaquetarlos. Se recomienda realizarlo lo "
+#~ "más pronto posible en el proceso de actualización ya que actualmente "
+#~ "estas invocaciones de configuración también necesitan <literal>DPkg::"
+#~ "TriggersPending</literal>, que ejecuta varios disparadores (que puede que "
+#~ "no sean necesarios). Los esenciales tienen, de forma predeterminada, una "
+#~ "puntuación alta pero la opción inmediata es relativamente baja (un "
+#~ "paquete que tenga pre-dependencias tiene una puntuación más alta). Puede "
+#~ "cambiar la puntuación mediante esta opción y las otras del mismo grupo. "
+#~ "El siguiente ejemplo muestra la configuración con los valores "
+#~ "predeterminados. <placeholder type=\"literallayout\" id=\"0\"/>"
+
+#~ msgid "List fingerprints of trusted keys."
+#~ msgstr "Lista las huellas digitales de las claves de confianza."
+
+#~ msgid "Local trust database of archive keys."
+#~ msgstr "Base de datos local de las claves de confianza de archivos Debian"
+
+#~ msgid "&keyring-filename;"
+#~ msgstr "&keyring-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive trusted keys."
+#~ msgstr ""
+#~ "Registro de las claves de confianza del archivo de &keyring-distro;."
+
+#~ msgid "&keyring-removed-filename;"
+#~ msgstr "&keyring-removed-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive removed trusted keys."
+#~ msgstr ""
+#~ "Registro de las claves de confianza eliminadas del archivo de &keyring-"
+#~ "distro;."
+
+#, fuzzy
+#~| msgid "&apt-cache; &apt-conf;"
+#~ msgid "&apt-get;, &apt-conf;"
+#~ msgstr "&apt-cache; &apt-conf;"
+
+#~ msgid ""
+#~ "This is a space separated list of all the architectures that appear under "
+#~ "search section. The special architecture 'source' is used to indicate "
+#~ "that this tree has a source archive."
+#~ msgstr ""
+#~ "Es una lista de todas las arquitecturas separadas por espacios que "
+#~ "aparecen bajo la sección de búsqueda. La arquitectura especial «source» "
+#~ "se usa para indicar que este árbol tiene un fichero de fuentes."
+
+#, fuzzy
+#~| msgid ""
+#~| "<literal>rdepends</literal> shows a listing of each reverse dependency a "
+#~| "package has."
+#~ msgid ""
+#~ "<literal>show</literal> shows the package information for the given "
+#~ "package(s)."
+#~ msgstr ""
+#~ "<literal>rdepends</literal> muestra las dependencias inversas de un "
+#~ "paquete."
+
+#, fuzzy
+#~| msgid ""
+#~| "<literal>showhold</literal> is used to print a list of packages on hold "
+#~| "in the same way as for the other show commands."
+#~ msgid ""
+#~ "<literal>update</literal> is used to resynchronize the package index "
+#~ "files from their sources."
+#~ msgstr ""
+#~ "<literal>showhold</literal> muestra una lista de paquetes retenidos "
+#~ "(«hold») de la misma forma que las otras órdenes «show»."
+
+#, fuzzy
+#~| msgid "the <literal>Package:</literal> line"
+#~ msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
+#~ msgstr "La línea <literal>Package:</literal>"
+
+#, fuzzy
+#~| msgid "the <literal>Component:</literal> line"
+#~ msgid "The option <literal>APT::Color</literal> is enabled."
+#~ msgstr "La línea <literal>Component:</literal>"
+
+#, fuzzy
+#~| msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+#~ msgid ""
+#~ "The option <literal>upgrade</literal> has <literal>--with-new-pkgs</"
+#~ "literal> enabled by default."
+#~ msgstr "Las líneas <literal>Archive:</literal> o <literal>Suite:</literal>"
+
+#~ msgid ""
+#~ "Pass advanced options to gpg. With adv --recv-key you can download the "
+#~ "public key."
+#~ msgstr ""
+#~ "Proporciona opciones avanzadas a gpg. Puede descargar la clave pública "
+#~ "con «adv --recv-key»."
+
+#~ msgid "mark/unmark a package as being automatically-installed"
+#~ msgstr "Marca o desmarca un paquete como instalado automáticamente"
+
+#~ msgid ""
+#~ "<command>apt-mark</command> will change whether a package has been marked "
+#~ "as being automatically installed."
+#~ msgstr ""
+#~ "<command>apt-mark</command> conmuta si un paquete se instaló "
+#~ "automáticamente o no."
+
+#~ msgid ""
+#~ "<literal>hold</literal> is used to mark a package as held back, which "
+#~ "will prevent the package from being automatically installed, upgraded or "
+#~ "removed. The command is only a wrapper around <command>dpkg --set-"
+#~ "selections</command> and the state is therefore maintained by &dpkg; and "
+#~ "not affected by the <option>--file</option> option."
+#~ msgstr ""
+#~ "<literal>hold</literal> sirve para marcar un paquete para su retención, "
+#~ "impidiendo que el paquete se instale, actualice o elimine de forma "
+#~ "automática. La orden es una interfaz para <command>dpkg --set-selections</"
+#~ "command>, por lo que &dpkg; preserva el estado sin que la opción "
+#~ "<option>--file</option> tenga efecto sobre él."
+
+#~ msgid ""
+#~ "If a package comes from a archive without a signature, or with a "
+#~ "signature that apt does not have a key for, that package is considered "
+#~ "untrusted, and installing it will result in a big warning. <command>apt-"
+#~ "get</command> will currently only warn for unsigned archives; future "
+#~ "releases might force all sources to be verified before downloading "
+#~ "packages from them."
+#~ msgstr ""
+#~ "Si el paquete viene de un archivo sin una firma o con una firma de la que "
+#~ "apt no tiene su clave, el paquete se considerará no fiable y su "
+#~ "instalación provocará un aviso importante. <command>apt-get</command> "
+#~ "actualmente sólo avisa de los archivos sin firmar, puede que las próximas "
+#~ "versiones fuercen una comprobación de todas las fuentes antes de "
+#~ "descargar paquetes desde ellas."
+
+#~ msgid ""
+#~ "No action; perform a simulation of events that would occur but do not "
+#~ "actually change the system. Configuration Item: <literal>APT::Get::"
+#~ "Simulate</literal>."
+#~ msgstr ""
+#~ "No realiza ninguna acción, simula lo que hubiese ocurrido pero sin hacer "
+#~ "cambios reales en el sistema. Opción de configuración: <literal>APT::Get::"
+#~ "Simulate</literal>."
+
+#~ msgid ""
+#~ "Simulated runs performed as a user will automatically deactivate locking "
+#~ "(<literal>Debug::NoLocking</literal>), and if the option <literal>APT::"
+#~ "Get::Show-User-Simulation-Note</literal> is set (as it is by default) a "
+#~ "notice will also be displayed indicating that this is only a simulation. "
+#~ "Runs performed as root do not trigger either NoLocking or the notice - "
+#~ "superusers should know what they are doing without further warnings from "
+#~ "<literal>apt-get</literal>."
+#~ msgstr ""
+#~ "Las simulaciones de ejecución realizadas por un usuario desactivan el "
+#~ "bloqueo de forma automática (<literal>Debug::NoLocking</literal>), y si "
+#~ "se define la opción <literal>APT::Get::Show-User-Simulation-Note</"
+#~ "literal> (activa de forma predefinida) se muestra un aviso que indica que "
+#~ "solo es una simulación. Las ejecuciones realizadas como usuario «root» no "
+#~ "activan «NoLocking» o el aviso. Los administradores deben ser conscientes "
+#~ "de sus acciones sin avisos de <literal>apt-get</literal>."
+
+#~ msgid ""
+#~ "Ignore if packages can't be authenticated and don't prompt about it. "
+#~ "This is useful for tools like pbuilder. Configuration Item: "
+#~ "<literal>APT::Get::AllowUnauthenticated</literal>."
+#~ msgstr ""
+#~ "Ignora si los paquetes no se pueden autenticar, sin generar ningún "
+#~ "diálogo sobre ello. Esto es útil para herramientas como pbuilder. Opción "
+#~ "de configuración: <literal>APT::Get::AllowUnauthenticated</literal>."
+
+#, fuzzy
+#~| msgid ""
+#~| "Version 2 of this protocol dumps more information, including the "
+#~| "protocol version, the APT configuration space and the packages, files "
+#~| "and versions being changed. Version 2 is enabled by setting "
+#~| "<literal>DPkg::Tools::options::cmd::Version</literal> to 2. "
+#~| "<literal>cmd</literal> is a command given to <literal>Pre-Install-Pkgs</"
+#~| "literal>."
+#~ msgid ""
+#~ "Version 2 of this protocol dumps more information, including the protocol "
+#~ "version, the APT configuration space and the packages, files and versions "
+#~ "being changed. Version 3 adds the architecture and <literal>MultiArch</"
+#~ "literal> flag to each version being dumped."
+#~ msgstr ""
+#~ "La versión 2 de este protocolo vuelca más información, incluyendo la "
+#~ "versión del protocolo, el espacio de configuración de APT y de los "
+#~ "paquetes, los ficheros y las versiones que cambian. La versión 2 se "
+#~ "habilita definiendo <literal>DPkg::Tools::Options::cmd::Version</literal> "
+#~ "con el valor 2. <literal>cmd</literal> es una orden que se pasa a "
+#~ "<literal>Pre-Install-Pkgs</literal>."
+
+#~ msgid ""
+#~ "to the versions that are not installed and do not belong to the target "
+#~ "release."
+#~ msgstr ""
+#~ "a las versiones que ni están instaladas ni pertenecen a la distribución "
+#~ "objetivo."
+
+#~ msgid ""
+#~ "Each line specifying a source starts with type (e.g. <literal>deb-src</"
+#~ "literal>) followed by options and arguments for this type. Individual "
+#~ "entries cannot be continued onto a following line. Empty lines are "
+#~ "ignored, and a <literal>#</literal> character anywhere on a line marks "
+#~ "the remainder of that line as a comment."
+#~ msgstr ""
+#~ "Cada línea que define una fuente empieza con el tipo (por ejemplo, "
+#~ "<literal>«deb-src</literal>») seguido de las opciones y argumentos para "
+#~ "este tipo. Una entrada individual no puede continuar en la siguiente "
+#~ "línea. Las líneas vacías se ignoran, y un carácter «<literal>#</literal>» "
+#~ "presente en cualquier lugar de la línea marca los caracteres restantes "
+#~ "como comentario."
+
+#, fuzzy
+#~| msgid "deb [ options ] uri distribution [component1] [component2] [...]"
+#~ msgid "deb [ options ] uri suite [component1] [component2] [...]"
+#~ msgstr "deb [ opciones ] uri distribución [componente1] [componente2] [...]"
+
+#~ msgid ""
+#~ "<literal>options</literal> is always optional and needs to be surrounded "
+#~ "by square brackets. It can consist of multiple settings in the form "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>. Multiple settings are separated by spaces. The "
+#~ "following settings are supported by APT (note however that unsupported "
+#~ "settings will be ignored silently):"
+#~ msgstr ""
+#~ "<literal>options</literal> siempre es opcional, y debe estar delimitado "
+#~ "por corchetes. Puede consistir de varias opciones con la forma "
+#~ "<literal><replaceable>opción</replaceable>=<replaceable>valor</"
+#~ "replaceable></literal>. Varias opciones se separan con espacios. APT "
+#~ "permite las siguientes opciones (tenga en cuenta que las opciones no "
+#~ "permitidas se ignoran silenciosamente):"
+
+#, fuzzy
+#~| msgid ""
+#~| "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~| "replaceable>,…</literal> can be used to specify for which architectures "
+#~| "information should be downloaded. If this option is not set all "
+#~| "architectures defined by the <literal>APT::Architectures</literal> "
+#~| "option will be downloaded."
+#~ msgid ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> and <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> which can be "
+#~ "used to add/remove architectures from the set which will be downloaded."
+#~ msgstr ""
+#~ "<literal>arch=<replaceable>arquitecura1</replaceable>,"
+#~ "<replaceable>arquitecura2</replaceable>,…</literal> se puede utilizar "
+#~ "para definir la arquitectura para la que se descarga información sobre "
+#~ "arquitecturas. Si no se define esta opción, se descargarán todas las "
+#~ "arquitecturas definidas por la opción <literal>APT::Architectures</"
+#~ "literal>."
+
+#~ msgid ""
+#~ "<literal>trusted=yes</literal> can be set to indicate that packages from "
+#~ "this source are always authenticated even if the <filename>Release</"
+#~ "filename> file is not signed or the signature can't be checked. This "
+#~ "disables parts of &apt-secure; and should therefore only be used in a "
+#~ "local and trusted context. <literal>trusted=no</literal> is the opposite "
+#~ "which handles even correctly authenticated sources as not authenticated."
+#~ msgstr ""
+#~ "<literal>trusted=yes</literal> se puede definir para indicar que los "
+#~ "paquetes que proviene de esta fuente siempre están autenticados incluso "
+#~ "si el fichero <filename>Release</filename> no está firmado, o si no se "
+#~ "puede comprobar la firma. Esto desactiva partes de &apt-secure; y por "
+#~ "ello solo se debe utilizar en un contexto local y de confianza. "
+#~ "<literal>trusted=no</literal> ofrece lo opuesto, ya que supone que las "
+#~ "fuentes correctamente autenticadas no lo están."
+
+#~ msgid "Some examples:"
+#~ msgstr "Algunos ejemplos:"
+
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+
+#~ msgid "apt"
+#~ msgstr "apt"
+
+#~ msgid "16 June 1998"
+#~ msgstr "16 de Junio de 1998"
+
+#~ msgid "Debian"
+#~ msgstr "Debian"
+
+#~ msgid "NAME"
+#~ msgstr "NOMBRE"
+
+#~ msgid "apt - Advanced Package Tool"
+#~ msgstr "apt - Herramienta avanzada de paquetes"
+
+#~ msgid "SYNOPSIS"
+#~ msgstr "SINOPSIS"
+
+#~ msgid "B<apt>"
+#~ msgstr "B<apt>"
+
+#~ msgid "DESCRIPTION"
+#~ msgstr "DESCRIPCIÓN"
+
+#, fuzzy
+#~| msgid ""
+#~| "APT is a management system for software packages. For normal day to day "
+#~| "package management there are several front-ends available, such as "
+#~| "B<aptitude>(8) for the command line or B<synaptic>(8) for the X Window "
+#~| "System. Some options are only implemented in B<apt-get>(8) though."
+#~ msgid ""
+#~ "For normal day to day package management there are several front-ends "
+#~ "available, such as B<aptitude>(8) for the command line or "
+#~ "B<synaptic>(8) for the X Window System. Some options are only "
+#~ "implemented in B<apt-get>(8) though."
+#~ msgstr ""
+#~ "APT es un sistema de gestión de paquetes de software. Dispone de varias "
+#~ "interfaces para la gestión de paquetes normal del día a día, tales como "
+#~ "B<aptitude>(8) para la línea de órdenes o B<synaptic>(8) para el sistema "
+#~ "de ventanas de X. Algunas opciones sólo están implementadas en B<apt-"
+#~ "get>(8)."
+
+#~ msgid "SEE ALSO"
+#~ msgstr "VÉASE TAMBIÉN"
+
+#, fuzzy
+#~| msgid ""
+#~| "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~| "B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgid ""
+#~ "B<apt>(8), B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources."
+#~ "list>(5), B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgstr ""
+#~ "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~ "B<apt_preferences>(5), B<apt-secure>(8)"
+
+#~ msgid "DIAGNOSTICS"
+#~ msgstr "DIAGNÓSTICOS"
+
+#~ msgid "apt returns zero on normal operation, decimal 100 on error."
+#~ msgstr ""
+#~ "apt devuelve cero si no hay ningún error, y el valor 100 en caso de error."
+
+#~ msgid "BUGS"
+#~ msgstr "FALLOS"
+
+#~ msgid "This manpage isn't even started."
+#~ msgstr "Esta página de manual ni siquiera está iniciada."
+
+#~ msgid ""
+#~ "See E<lt>http://bugs.debian.org/aptE<gt>. If you wish to report a bug in "
+#~ "B<apt>, please see I</usr/share/doc/debian/bug-reporting.txt> or the "
+#~ "B<reportbug>(1) command."
+#~ msgstr ""
+#~ "Consulte E<lt>http://bugs.debian.org/aptE<gt>. Si desea enviar un informe "
+#~ "de error sobre B<apt>, por favor lea I</usr/share/doc/debian/bug-"
+#~ "reporting.txt> o use la orden B<reportbug>(1)."
+
+#~ msgid "AUTHOR"
+#~ msgstr "AUTOR"
+
+#~ msgid "apt was written by the APT team E<lt>apt@packages.debian.orgE<gt>."
+#~ msgstr "El equipo APT E<lt>apt@packages.debian.orgE<gt> escribió apt."
diff --git a/doc/po/fr.po b/doc/po/fr.po
new file mode 100644
index 0000000..38da109
--- /dev/null
+++ b/doc/po/fr.po
@@ -0,0 +1,13672 @@
+# Translation of apt package man pages
+# Copyright (C) 2000-2018 Debian French l10n team <debian-l10n-french@lists.debian.org>
+# This file is distributed under the same license as the apt package.
+#
+# Translators:
+#
+# Jérôme Marant, 2000.
+# Philippe Batailler, 2005.
+# Christian Perrier <bubulle@debian.org>, 2009, 2010, 2011, 2012, 2013.
+# Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>, 2014, 2017-2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.8.0\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-05-21 14:38+0200\n"
+"PO-Revision-Date: 2019-05-01 17:00+0100\n"
+"Last-Translator: Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.11\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>Équipe de développement d'APT</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>Page qualité</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bogues</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>Page des bogues d'APT</ulink>. \n"
+" Si vous souhaitez signaler un bogue à propos d'APT, veuillez lire\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> ou utiliser\n"
+" la commande &reportbug;.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT a été écrit par l'équipe de développement APT <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Afficher un bref résumé de l'utilisation.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Afficher la version du programme.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Fichier de configuration ; indique le fichier de configuration à utiliser. \n"
+" Le programme lira le fichier de configuration par défaut puis le fichier indiqué ici. \n"
+" Si les réglages de configuration doivent être établis avant l'analyse des fichiers\n"
+" de configuration par défaut, un fichier peut être indiqué avec la variable d'environnement <envar>APT_CONFIG</envar>. Veuillez consulter &apt-conf; pour des informations sur la syntaxe d'utilisation.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Définir une option de configuration ; permet de régler\n"
+" une option de configuration donnée. La syntaxe est <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> et <option>--option</option> peuvent être utilisées plusieurs fois\n"
+" pour définir des options différentes.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>Toutes les options de la ligne de commande peuvent être définies dans le fichier de configuration, \n"
+" les descriptions indiquant l'option de configuration concernée. Pour les options\n"
+" booléennes, vous pouvez inverser les réglages du fichiers de configuration avec \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" et d'autres variantes analogues.\n"
+" </para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>Fichier de configuration d'APT.\n"
+" Élément de configuration : <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>Fragments du fichier de configuration d'APT.\n"
+" Élément de configuration : <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Zone de stockage des fichiers récupérés.\n"
+" Élément de configuration : <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Zone de stockage pour les paquets en transit.\n"
+" Élément de configuration : <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> sera implicitement ajouté). </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Fichier des préférences.\n"
+" C'est dans ce fichier qu'on peut faire de l'épinglage (pinning) c'est-à-dire, choisir d'obtenir des paquets d'une source distincte ou d'une distribution différente.\n"
+" Élément de configuration : <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>Fragments de fichiers pour la préférence des versions.\n"
+" Élément de configuration : <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Emplacement pour la récupération des paquets.\n"
+" Élément de configuration : <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>Fragments de fichiers définissant les emplacements de récupération de paquets.\n"
+" Élément de configuration : <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Zone de stockage pour les informations qui concernent chaque ressource de paquet spécifiée dans &sources-list;\n"
+" Élément de configuration : <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Zone de stockage pour les informations en transit.\n"
+" Élément de configuration : <literal>Dir::State::Lists</literal> (<filename>partial</filename> sera implicitement ajouté).</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Porte-clés des clés de confiance locales. Les nouvelles clés y seront ajoutées.\n"
+" Élément de configuration : <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>Fragments de fichiers pour les clés de signatures sûres. Des fichiers\n"
+" supplémentaires peuvent être placés à cet endroit (par des paquets ou par l'administrateur).\n"
+" Élément de configuration : <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Liste d'état des paquets installés automatiquement.\n"
+" Élément de configuration : <literal>Dir::State::extended_states</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr "<!ENTITY translation-title \"TRADUCTEURS\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-holder \"\n"
+" Jérôme Marant, Philippe Batailler, Christian Perrier <email>bubulle@debian.org</email> (2000, 2005, 2009, 2010),\n"
+" Équipe de traduction francophone de Debian <email>debian-l10n-french@lists.debian.org</email>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-english \"\n"
+" Veuillez noter que cette traduction peut contenir des parties non traduites.\n"
+" Cela est volontaire, pour éviter de perdre du contenu quand la\n"
+" traduction est légèrement en retard sur le contenu d'origine.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr "<!ENTITY synopsis-config-string \"chaîne_de_configuration\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr "<!ENTITY synopsis-config-file \"fichier_de_configuration\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr "<!ENTITY synopsis-target-release \"publication_cible\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr "<!ENTITY synopsis-architecture \"architecture\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr "<!ENTITY synopsis-pkg \"paquet\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr "<!ENTITY synopsis-pkg-ver-number \"numéro_version_paquet\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr "<!ENTITY synopsis-prefix \"préfixe\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr "<!ENTITY synopsis-regex \"expression_régulière\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr "<!ENTITY synopsis-cdrom-mount \"point_de_montage_CD-ROM\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr "<!ENTITY synopsis-tmp-directory \"répertoire_temporaire\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr "<!ENTITY synopsis-filename \"nom_de_fichier\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr "<!ENTITY synopsis-path \"chemin\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr "<!ENTITY synopsis-override \"fichier-override\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr "<!ENTITY synopsis-pathprefix \"préfixe_de_chemin\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr "<!ENTITY synopsis-section \"section\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr "<!ENTITY synopsis-keyid \"id_de_clé\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr "interface en ligne de commande"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "Description"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+"<command>apt</command> fournit une interface en ligne de commande pour le "
+"système de gestion de paquets. Elle est conçue comme une interface "
+"utilisateur et permet certaines options plus adaptées à une utilisation "
+"interactive par défaut par rapport aux outils d'APT plus spécialisés tels "
+"que &apt-get; et &apt-cache;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+"Exactement comme <command>apt</command> lui-même, cette page de manuel vise "
+"à être une interface pour l'utilisateur et ainsi elle ne mentionne que les "
+"commandes et les options les plus courantes, en partie pour ne pas répéter "
+"les informations à de multiples emplacements et en partie pour ne pas noyer "
+"le lecteur par une surabondance d'options et de détails."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr "(&apt-get;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+"La commande <option>update</option> permet de télécharger les informations "
+"sur les paquets à partir des sources configurées. D'autres commandes "
+"agissent sur ces données, par exemple, réalisent la mise à jour de paquet ou "
+"recherchent et affichent des détails à propos de tous les paquets qui "
+"peuvent être installés."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+"La commande <literal>upgrade</literal> permet d'installer les mises à jour "
+"disponibles de tous les paquets présents sur le système en utilisant les "
+"sources énumérées dans &sources-list;. De nouveaux paquets seront installés "
+"si cela est nécessaire pour satisfaire des dépendances, mais les paquets "
+"installés ne seront jamais supprimés. Si la mise à jour d'un paquet "
+"nécessite la suppression d'un paquet installé, la mise à jour n'est pas "
+"réalisée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+"La commande <literal>full-upgrade</literal> remplit la même fonction que "
+"upgrade mais supprimera des paquets actuellement installés si cela est "
+"nécessaire pour mettre à jour le système dans son ensemble."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ","
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+"La commande réalise l'action requise sur un ou plusieurs paquets spécifiés "
+"avec &regex;, &glob; ou avec la correspondance exacte. Les actions requises "
+"peuvent être remplacées pour certains paquets en ajoutant un plus (+) au nom "
+"du paquet pour l'installer et ou un moins (-) pour le supprimer."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"On peut choisir d'installer une version particulière d'un paquet en faisant "
+"suivre son nom par un signe égal (=) et par la version du paquet à "
+"sélectionner. Autrement, on peut choisir une version spécifique en faisant "
+"suivre le nom du paquet par une barre oblique (/) et le nom de code (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) ou un nom de suite "
+"(stable, testing, unstable). Cela sélectionnera aussi cette version pour les "
+"dépendances de ce paquet si cela est nécessaire pour satisfaire la requête."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+"La suppression d'un paquet entraîne la suppression de toutes les données "
+"empaquetées, mais conserve habituellement les petits fichiers (modifiés) de "
+"configuration de l'utilisateur, pour le cas où la suppression a été "
+"accidentelle. Dans ce cas, il suffira d'émettre une demande d'installation "
+"pour le paquet supprimé accidentellement pour restaurer son fonctionnement "
+"antérieur. D'autre part, on peut facilement se débarrasser de ces reliquats "
+"en appelant la commande <command>purge</command> même sur des paquets déjà "
+"supprimés. Notez que cela n'affecte aucune donnée ou configuration stockées "
+"dans votre répertoire personnel."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"La commande <literal>autoremove</literal>, supprime les paquets installés "
+"automatiquement dans le but de satisfaire les dépendances d'autres paquets "
+"et qui ne sont plus nécessaires parce que les dépendances ont changé ou "
+"parce que le ou les paquets ont été supprimés entre-temps."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+"Vous devriez vérifier que la liste ne contient pas des applications que vous "
+"avez fini par apprécier, même si elles ont été installées seulement comme "
+"dépendance d'un autre paquet. Vous pouvez marquer ces paquets comme "
+"installés manuellement avec &apt-mark;. Les paquets que vous avez installés "
+"explicitement avec la commande <command>install</command> ne seront jamais "
+"proposés non plus pour une suppression automatique."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+"La commande <option>search</option> peut être utilisée pour rechercher le(s) "
+"terme(s) &regex; donné(s) dans la liste de paquets disponibles et affiche "
+"les paquets correspondants. Par exemple, cela peut être utile pour "
+"rechercher des paquets dotés d'une fonctionnalité particulière. Si vous "
+"recherchez un paquet qui fournit un fichier particulier, essayez &apt-file;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+"La commande affiche des informations sur le(s) paquet(s) donné(s) y compris "
+"ses dépendances, sa taille installé et au téléchargement, les sources d’où "
+"provient le paquet, la description du contenu des paquets et bien plus "
+"encore. Cela peut être utile pour consulter ces informations avant "
+"d'autoriser &apt; à supprimer un paquet ou lors d'une recherche de nouveaux "
+"paquets à installer."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr "(travail en cours)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+"La commande <literal>list</literal> est à peu près semblable à la commande "
+"<command>dpkg-query --list</command> dans la mesure où elle peut afficher "
+"une liste de paquets qui satisfont à certains critères. Elle gère les motifs "
+"&glob; pour la correspondance des noms de paquets ainsi que des options pour "
+"afficher les versions installées <option>--installed</option>, pouvant être "
+"mises à jour <option>--upgradeable</option>, ou toutes les versions "
+"disponibles <option>--all-versions</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+"La commande <literal>edit-sources</literal> permet de modifier le fichier "
+"&sources-list; avec votre éditeur de texte préféré et fournit des "
+"vérifications de sécurité de base."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr "Utilisation de scripts et différences avec les autres outils d'APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+"La ligne de commande de &apt; est conçue comme un outil pour l'utilisateur "
+"et son comportement peut varier selon ses versions. Bien qu'il s'efforce de "
+"ne pas casser les compatibilités ascendantes, cela ne peut pas non plus être "
+"garanti, si une modification semble bénéfique pour une utilisation "
+"interactive."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+"Toutes les fonctionnalités d'&apt; sont aussi proposées dans les outils "
+"dédiés d'APT tels que &apt-get; ou &apt-cache; &apt; modifie seulement la "
+"valeur par défaut de certaines options (voir &apt-conf; et en particulier le "
+"champ d'action Binary). Aussi vous devriez préférer l'utilisation de ces "
+"commandes (éventuellement avec certaines options complémentaires activées) "
+"dans les scripts parce qu'elles conservent autant que possible la "
+"compatibilité ascendante."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "Voir aussi"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, le guide "
+"d'APT dans &guidesdir;, &apt-preferences;, le « HOWTO » d'APT."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "Diagnostics"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt</command> renvoie zéro après une opération normale, et le "
+"décimal 100 en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr ""
+"Utilitaire APT pour la gestion des paquets -- interface en ligne de commande."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> est le programme en ligne de commande pour la "
+"gestion des paquets. Il peut être considéré comme l'outil de base pour les "
+"autres programmes de la bibliothèque APT. Plusieurs interfaces utilisateur "
+"existent, comme &aptitude;, &synaptic; and &wajig;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"À moins que l'option <option>-h</option> ou <option>--help</option> ne soit "
+"donnée, l'une des commandes suivantes doit être présente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"La commande <literal>update</literal> permet de resynchroniser un fichier "
+"d'index répertoriant les paquets disponibles et sa source. Ces fichiers sont "
+"récupérés aux endroits spécifiés dans <filename>/etc/apt/sources.list</"
+"filename>. Ainsi, lorsqu'on utilise une archive Debian, cette commande "
+"récupère les fichiers <filename>Packages.gz</filename> et les analyse de "
+"manière à rendre disponibles les informations concernant les nouveaux "
+"paquets et les paquets mis à jour. On devrait toujours exécuter une commande "
+"<literal>update</literal> avant les commandes <literal>upgrade</literal> ou "
+"<literal>dist-upgrade</literal>. Veuillez noter que l'indicateur de "
+"progression d'ensemble peut être imprécis puisque la taille de ces fichiers "
+"ne peut être connue à l'avance."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"La commande <literal>upgrade</literal> permet d'installer les versions les "
+"plus récentes de tous les paquets présents sur le système en utilisant les "
+"sources énumérées dans <filename>/etc/apt/sources.list</filename>. Les "
+"paquets installés dont il existe de nouvelles versions sont récupérés et mis "
+"à niveau. En aucun cas des paquets déjà installés ne sont supprimés ; de "
+"même, des paquets qui ne sont pas déjà installés ne sont ni récupérés ni "
+"installés. Les paquets dont de nouvelles versions ne peuvent pas être "
+"installées sans changer le statut d'installation d'un autre paquet sont "
+"laissés dans leur version courante. On doit d'abord exécuter la commande "
+"<literal>update</literal> pour que <command>apt-get</command> connaisse "
+"l'existence de nouvelles versions des paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"La commande <literal>dist-upgrade</literal> effectue la fonction "
+"<literal>upgrade</literal> en y ajoutant une gestion intelligente des "
+"changements de dépendances dans les nouvelles versions des paquets ; "
+"<command>apt-get</command> possède un système « intelligent » de résolution "
+"des conflits et il essaye, quand c'est nécessaire, de mettre à niveau les "
+"paquets les plus importants avant les paquets les moins importants. Le "
+"fichier <filename>/etc/apt/sources.list</filename> contient une liste de "
+"sources où récupérer les paquets désirés. Voyez aussi &apt-preferences; pour "
+"un mécanisme de remplacement des paramètres généraux pour certains paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> est utilisée conjointement avec "
+"&dselect;, la plus ancienne interface du projet Debian pour la gestion des "
+"paquets. La commande <literal>dselect-upgrade</literal> suit les "
+"modifications faites par &dselect; dans le champ <literal>Status</literal> "
+"des paquets disponibles, et effectue les actions nécessaires à la "
+"réalisation de cet état (par exemple, suppression d'anciens paquets, "
+"installation de nouveaux paquets)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"La commande <literal>install</literal> est suivie par un ou plusieurs "
+"paquets à installer. Chaque paquet est un nom de paquet ; ce n'est pas un "
+"nom complet de fichier (par exemple, dans un système Debian, on indiquera "
+"<package>apt-utils</package> et non pas <filename>apt-utils_&apt-product-"
+"version;_amd64.deb</filename>). Tous les paquets requis par le(s) paquet(s) "
+"que l'on veut installer sont aussi récupérés et installés. Le fichier "
+"<filename>/etc/apt/sources.list</filename> est utilisé pour retrouver les "
+"paquets désirés. Quand un trait d'union est accolé (sans espace "
+"intermédiaire) au nom d'un paquet déjà installé, ce paquet est supprimé. De "
+"même on peut ajouter un signe « + » pour désigner un paquet à installer. "
+"Cette dernière fonctionnalité peut être utilisée pour annuler les décisions "
+"prises par le système de résolution des conflits d'apt-get."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"On peut choisir d'installer une version particulière d'un paquet en faisant "
+"suivre son nom par un signe égal et par la version. Cette version sera "
+"recherchée et l'installation sera demandée. On peut aussi choisir une "
+"distribution particulière en faisant suivre le nom du paquet par une barre "
+"oblique et par le nom de la distribution ou de l'archive (stable, testing, "
+"unstable)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"Avec ces possibilités de choisir la version, de vieilles versions d'un "
+"paquet peuvent être installées. Cette fonctionnalité est donc à utiliser "
+"avec précaution."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"Cette méthode est aussi utile pour mettre à jour un ou plusieurs paquets "
+"déjà installés sans mettre à jour les autres paquets du système. À la "
+"différence de la commande « upgrade » qui installera la dernière version "
+"disponible de tous les paquets installés au moment de son exécution, "
+"« install » n'installera la nouvelle version que pour le(s) paquet(s) "
+"indiqué(s). Il suffit de fournir le nom du(des) paquet(s) à mettre à jour et "
+"si une nouvelle version est disponible, cette version (et ses dépendances, "
+"comme décrit plus haut) sera récupérée et installée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"Enfin, le mécanisme d'&apt-preferences; permet de créer d'autres règles pour "
+"l'installation des paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"Quand aucun paquet ne correspond à l'expression donnée en paramètre et que "
+"cette expression contient l'un des caractères « . », « ? » ou « * », elle "
+"est considérée comme une expression rationnelle POSIX et elle est appliquée "
+"à tous les paquets de la base de données. Tout paquet correspondant est "
+"installé (ou supprimé). Veuillez noter que la comparaison est effectuée par "
+"sous-chaîne et « lo.* » correspond aussi bien à « how-lo » qu'à « lowest ». "
+"Si ce n'est pas le comportement souhaité, l'expression peut être ancrée avec "
+"un caractère « ^ » ou un caractère « $ », une autre possibilité étant "
+"d'utiliser une expression plus précise."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr ""
+"<literal>reinstall</literal> est un alias de la commande <literal>install --"
+"reinstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"La commande <literal>remove</literal> est identique à la commande "
+"<literal>install</literal>, les paquets étant alors supprimés et non "
+"installés. Veuillez noter que la suppression d'un paquet en laisse les "
+"fichiers de configuration sur le système. Quand un signe plus est accolé "
+"(sans espace intermédiaire) au nom du paquet, le paquet est installé au lieu "
+"d'être supprimé."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"La commande <literal>purge</literal> est identique à <literal>remove</"
+"literal> mais les paquets indiqués sont supprimés et purgés (leurs fichiers "
+"de configuration sont également effacés)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"Avec la commande <literal>source</literal>, <command>apt-get</command> "
+"récupère des paquets source. APT examine les paquets disponibles pour "
+"choisir le paquet source à récupérer. Il télécharge ensuite dans le "
+"répertoire courant la version la plus récente du paquet, définie par rapport "
+"à la distribution par défaut établie soit avec l'option <literal>APT::"
+"Default-Release</literal>, soit avec l'option <option>-t</option> ou soit "
+"par paquet avec la syntaxe <literal>paquet/version</literal> si possible."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+"Les arguments sont interprétés comme des noms de paquet binaire ou de paquet "
+"source. Voir l'option <option>--only-source</option> si vous souhaitez "
+"modifier cela."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"Les paquets source sont gérés indépendamment des paquets binaires, avec les "
+"lignes <literal>deb-src</literal> dans le fichier &sources-list;. Il est "
+"donc nécessaire d'ajouter une telle ligne pour chaque dépôt pour lequel vous "
+"souhaitez pouvoir obtenir les sources. Dans le cas contraire, vous "
+"n'obtiendrez pas les mêmes sources que celles du paquet que vous avez "
+"installé ou que vous voulez installer."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"Si l'option <option>--compile</option> est spécifiée, le paquet est compilé "
+"en un binaire .deb avec <command>dpkg-buildpackage</command> pour "
+"l'architecture définie par l'option <command>--host-architecture</command>. "
+"Si <option>--download-only</option> est spécifié, le source n'est pas "
+"décompacté."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"De la même façon qu'avec les paquets binaires, on peut récupérer une version "
+"particulière d'un paquet source en faisant suivre son nom par un signe égal "
+"et par la version. Cela permet une comparaison exacte entre le nom du paquet "
+"source et la version ; l'option correspondante est : <literal>APT::Get::Only-"
+"Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"Veuillez noter que les paquets source ne sont pas installés et suivis dans "
+"la base de données de <command>dpkg</command> comme le sont les paquets "
+"binaires ; ils sont simplement téléchargés dans le répertoire courant, comme "
+"les archives tar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"Avec la commande <literal>build-dep</literal>, apt-get installe ou supprime "
+"des paquets dans le but de satisfaire les dépendances de construction d'un "
+"paquet source. Par défaut, les dépendances sont satisfaites pour la "
+"construction native du paquet. Au besoin, une architecture hôte peut être "
+"indiquée avec l'option <option>--host-architecture</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+"Les arguments sont interprétés comme des noms de paquet binaire ou de paquet "
+"source. Voir l'option <option>--only-source</option> si vous souhaitez "
+"modifier cela."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"La commande <literal>check</literal> est un outil de diagnostic ; il met à "
+"jour le cache des paquets et cherche les dépendances défectueuses."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> télécharge le fichier binaire indiqué dans le "
+"répertoire courant."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"La commande <literal>clean</literal> nettoie le dépôt local des paquets "
+"récupérés. Elle supprime tout, excepté le fichier de verrou situé dans "
+"<filename>&cachedir;/archives/</filename> et <filename>&cachedir;/archives/"
+"partial/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr "(et"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr "l'alias depuis la version 1.1)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"Tout comme <literal>clean</literal>, <literal>autoclean</literal> nettoie le "
+"dépôt local des paquets récupérés. La différence est qu'il supprime "
+"uniquement les paquets qui ne peuvent plus être téléchargés et qui sont "
+"inutiles. On peut ainsi contrôler la taille de ce cache sur une longue "
+"période. Tant qu'elle n'est pas activée, l'option de configuration "
+"<literal>APT::Clean-Installed</literal> empêche la suppression de paquets "
+"installés."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"Avec la commande <literal>autoremove</literal>, apt-get supprime les paquets "
+"installés dans le but de satisfaire les dépendances d'autres paquets et qui "
+"ne sont plus nécessaires."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> tente de télécharger le journal des "
+"modifications d'un paquet et l'affiche avec <command>sensible-pager</"
+"command>. Par défaut, c'est le journal des modifications de la version "
+"installée du paquet qui est affiché. Cependant, il est possible d'utiliser "
+"les mêmes options que pour la commande <option>install</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+"La commande affiche par défaut une liste au format deb822 des informations "
+"sur tous les fichiers de données (ou cibles d'index) que <command>apt-get "
+"update</command> peut télécharger. Elle prend en charge une option <option>--"
+"format</option> pour modifier le format de sortie et accepte les lignes de "
+"la sortie par défaut pour filtrer les enregistrements. La commande est "
+"utilisée principalement comme interface avec les outils qui fonctionnent "
+"avec APT pour obtenir des informations comme les noms des fichiers "
+"téléchargés de telle sorte qu'ils peuvent les utiliser plutôt que de les "
+"télécharger à nouveau de leur côté. La documentation détaillée, absente ici, "
+"peut être trouvée dans le fichier &apt-acquire-additional-files; fourni par "
+"le paquet <package>apt-doc</package>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "options"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"Ne pas considérer les paquets recommandés comme des dépendances à installer. "
+"Élément de configuration : <literal>APT::Install-Recommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"Considérer les paquets suggérés comme des dépendances à installer. Élément "
+"de configuration : <literal>APT::Install-Suggests</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"Récupération seule ; les paquets sont récupérés mais ne sont ni dépaquetés "
+"ni installés. Élément de configuration : <literal>APT::Get::Download-Only</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"Correction ; cette option demande de réparer un système où existent des "
+"dépendances défectueuses. Utilisée avec install ou remove, elle peut exclure "
+"un paquet pour permettre de déduire une solution viable. Tout paquet "
+"spécifié doit complètement corriger le problème. Cette option est "
+"quelquefois nécessaire lorsque l'on exécute APT pour la première fois ; APT "
+"interdit les dépendances défectueuses dans un système. Il est possible que "
+"la structure de dépendances d'un système soit tellement corrompue qu'elle "
+"requiert une intervention manuelle (ce qui veut dire la plupart du temps "
+"utiliser <command>dpkg --remove</command> pour éliminer les paquets en "
+"cause). L'utilisation de cette option conjointement avec <option>-m</option> "
+"peut produire une erreur dans certaines situations. Élément de "
+"configuration : <literal>APT::Get::Fix-Broken</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"Ignorer les paquets manquants ; si des paquets ne peuvent être récupérés, "
+"ou, après récupération, ne satisfont pas au contrôle d'intégrité, cette "
+"commande met ces paquets de côté et gère le résultat. Utiliser cette option "
+"conjointement avec <option>-f</option> peut produire une erreur dans "
+"certaines situations. Quand un paquet, sélectionné pour une installation "
+"(particulièrement si c'est mentionné en ligne de commande), ne peut être "
+"récupéré, il est mis silencieusement de côté. Élément de configuration : "
+"<literal>APT::Get::Fix-Missing</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"Pas de récupération. Le mieux est d'utiliser cette option avec <option>--"
+"ignore-missing</option> pour forcer APT à n'utiliser que les .deb qu'il a "
+"déjà récupérés. Élément de configuration : <literal>APT::Get::Download</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"Mode silencieux ; cette commande produit une sortie destinée à "
+"l'enregistrement dans un fichier-journal en omettant les indicateurs de "
+"progression. Un plus grand nombre de « q » (2 au plus) produit un plus grand "
+"silence. On peut aussi utiliser <option>-q=#</option> pour positionner le "
+"niveau de silence, et annuler le fichier de configuration. Notez qu'un "
+"niveau de silence égal à 2 implique <option>-y</option> et vous ne devez "
+"jamais utiliser <option>-qq</option> sans l'accompagner d'un modificateur "
+"tel que <option>-d</option>, <option>--print-uris</option> ou <option>-s</"
+"option> : APT pourrait alors exécuter des actions inattendues. Élément de "
+"configuration : <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+"Pas d'action ; réalise une simulation des événements qui pourraient survenir "
+"sur la base de l'état du système actuel, mais ne modifie pas véritablement "
+"le système. Le verrouillage sera désactivé (<option>Debug::NoLocking</"
+"option>), ainsi l'état du système peut changer pendant que <command>apt-get</"
+"command> est exécuté. Les simulations peuvent aussi être exécutées par les "
+"utilisateurs ordinaires qui pourraient ne pas avoir accès en lecture à toute "
+"la configuration d'apt, ce qui fausse la simulation. Une annonce exprimant "
+"cet avertissement est aussi affichée par défaut pour les utilisateurs "
+"ordinaires (<option>APT::Get::Show-User-Simulation-Note</option>). Élément "
+"de configuration : <literal>APT::Get::Simulate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"La simulation affiche une série de lignes représentant chacune une opération "
+"de <command>dpkg</command>, Configure (<literal>Conf</literal>), Remove "
+"(<literal>Remv</literal>), Unpack (<literal>Inst</literal>). Des crochets "
+"encadrent des paquets endommagés et des crochets n'encadrant rien indiquent "
+"que les dommages n'ont aucune conséquence (rare)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"Répondre automatiquement oui aux questions ; présume « oui » comme réponse à "
+"toutes les questions et s'exécute de manière non interactive. Dans le cas "
+"d'une situation indésirable, comme le changement d'un paquet gelé, "
+"l'installation d'un paquet non authentifié ou la suppression d'un paquet "
+"essentiel, <literal>apt-get</literal> s'interrompt. Élément de "
+"configuration : <literal>APT::Get::Assume-Yes</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"Répondre automatiquement négativement aux questions. Élément de "
+"configuration : <literal>APT::Get::Assume-No</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"Ne pas afficher la liste de tous les paquets qui doivent être mis à niveau. "
+"Élément de configuration : <literal>APT::Get::Show-Upgraded</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"Afficher les versions complètes des paquets installés ou mis à niveau. "
+"Élément de configuration : <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"Cette option contrôle comment les paquets d'architectures sont construits "
+"par <command>apt-get source --compile</command> et comment les dépendances "
+"de construction transverses sont respectées. Elle n'est pas positionnée par "
+"défaut ce qui signifie que l'architecture hôte est la même que "
+"l'architecture de construction (définie par <literal>APT::Architecture</"
+"literal>). Élément de configuration : <literal>APT::Get::Host-Architecture</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"Cette option contrôle les profils de construction actifs pour lesquels un "
+"paquet source est construit par <command>apt-get source --compile</command> "
+"et comment les dépendances sont respectées. Par défaut, aucun profil de "
+"construction n'est actif. Plus d'un profil peut être activé en même temps en "
+"les concaténant par une virgule. Élément de configuration : <literal>APT::"
+"Build-Profiles</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"Cette commande compile un paquet source après l'avoir récupéré. Élément de "
+"configuration : <literal>APT::Get::Compile</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"Cette commande ignore la marque « Hold » (« retenu ») d'un paquet ; par ce "
+"biais, <command>apt-get</command> ignore un « hold » placé sur un paquet. "
+"cela peut être utile avec <literal>dist-upgrade</literal> pour annuler un "
+"grand nombre de « hold » indésirables. Élément de configuration : "
+"<literal>APT::Ignore-Hold</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+"Cette commande permet d'installer de nouveaux paquets lorsqu'elle est "
+"utilisée en conjonction avec la commande <literal>upgrade</literal>. C'est "
+"utile si la mise à jour d'un paquet installé exige l'installation de "
+"nouveaux paquets. Plutôt que de conserver le paquet, <literal>upgrade</"
+"literal> mettra à jour le paquet et installera les nouvelles dépendances. "
+"Remarquez que la commande <literal>upgrade</literal> avec cette option ne "
+"retirera jamais de paquets : elle ne permettra que l'ajout de nouveaux. "
+"Élément de configuration : <literal>APT::Get::Upgrade-Allow-New</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"Aucune mise à niveau ; quand elle est utilisée avec <literal>install</"
+"literal>, cette commande empêche les paquets mentionnés sur la ligne de "
+"commande d'être mis à niveau. Élément de configuration : <literal>APT::Get::"
+"Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"N'installe aucun nouveau paquet ; quand elle est utilisée avec "
+"<literal>install</literal>, <literal>only-upgrade</literal> ne met à jour "
+"que les paquets installés sans en installer de nouveaux. Élément de "
+"configuration : <literal>APT::Get::Only-Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"Cette option est dangereuse parce qu'elle laisse APT continuer sans poser de "
+"questions quand il réalise un retour en arrière. Elle ne doit être utilisée "
+"que dans des circonstances très spéciales. L'utiliser peut éventuellement "
+"détruire le système ! Élément de configuration : <literal>APT::Get::allow-"
+"downgrades</literal>. Introduite dans APT 1.1"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"Forcer l'acceptation ; cette option est dangereuse parce qu'elle laisse APT "
+"continuer sans poser de questions quand il supprime des paquets essentiels. "
+"Cette option ne doit être utilisée que dans des circonstances très "
+"spéciales. L'utiliser peut éventuellement détruire le système ! Élément de "
+"configuration : <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduite dans APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"Forcer l'acceptation ; cette option est dangereuse parce qu'elle laisse APT "
+"continuer sans poser de questions quand il modifie des paquets retenus. "
+"(« hold »). Cette option ne doit être utilisée que dans des circonstances "
+"très spéciales. L'utiliser peut éventuellement détruire le système ! Élément "
+"de configuration : <literal>APT::Get::allow-change-held-packages</literal>. "
+"Introduite dans APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"Forcer l'acceptation ; cette option est dangereuse parce qu'elle laisse APT "
+"continuer sans poser de questions quand il réalise quelque chose de "
+"potentiellement dommageable. Cette option ne doit être utilisée que dans des "
+"circonstances très spéciales. Utiliser <literal>force-yes</literal> peut "
+"éventuellement détruire le système ! Élément de configuration : "
+"<literal>APT::Get::force-yes</literal>. Cette option est obsolète et "
+"remplacée par <option>--allow-unauthenticated</option>, <option>--allow-"
+"downgrades</option>, <option>--allow-remove-essential</option> et <option>--"
+"allow-change-held-packages</option> dans APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"Au lieu de récupérer les paquets à installer, leurs URI sont affichées. "
+"Chaque URI a un chemin, un nom de fichier destination, une taille et une clé "
+"MD5 attendue. Veuillez noter que le nom de fichier à afficher ne correspond "
+"pas toujours au nom de fichier sur le site distant. Cette option fonctionne "
+"aussi avec la commande <literal>source</literal> et avec la commande "
+"<literal>update</literal>. Avec la commande <literal>update</literal>, la "
+"somme MD5 et la taille ne sont pas données et c'est à l'utilisateur de "
+"décompresser les fichiers compressés. Élément de configuration : "
+"<literal>APT::Get::Print-URIs</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"Utiliser « purge » à la place de « remove » pour supprimer tout ce qui peut "
+"être supprimé. Un astérisque (*) sera accolé aux noms des paquets qui vont "
+"être purgés. <option>remove --purge</option> est équivalent à la commande "
+"<option>purge</option>. Élément de configuration : <literal>APT::Get::Purge</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"Réinstaller les paquets déjà installés avec leur version la plus récente. "
+"Élément de configuration : <literal>APT::Get::ReInstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"Cette option est activée par défaut ; utilisez <literal>--no-list-cleanup</"
+"literal> pour la désactiver. Quand elle est activée, <command>apt-get</"
+"command> gère automatiquement le contenu de <filename>&statedir;/lists</"
+"filename> afin d'assurer que les fichiers obsolètes soient effacés. La seule "
+"raison de la désactiver est une modification fréquente de la liste de "
+"sources. Élément de configuration : <literal>APT::Get::List-Cleanup</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"Cette option contrôle l'entrée par défaut pour les questions de "
+"distribution ; un épinglage (pin) par défaut dont la priorité vaut 990 est "
+"créée en utilisant la chaîne spécifiée. Le fichier des préférences peut "
+"annuler cette décision. En clair, cette option permet de contrôler "
+"simplement dans quelle distribution seront récupérés les paquets. Par "
+"exemple : <option>-t '2.1*'</option>, <option>-t unstable</option> ou "
+"<option>-t sid</option>. Élément de configuration : <literal>APT::Default-"
+"Release</literal>. Voyez aussi la page de manuel d'&apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"Ne réalise que les opérations « triviales ». Logiquement ceci peut être "
+"considéré comme relatif à <option>--assume-yes</option>. Alors que <option>--"
+"assume-yes</option> répond oui à n'importe quelle question, <option>--"
+"trivial-only</option> répond non. Élément de configuration : <literal>APT::"
+"Get::Trivial-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"Arrêter immédiatement apt-get, sans poser de questions, si des paquets "
+"doivent être supprimés. Élément de configuration : <literal>APT::Get::"
+"Remove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"Si la commande utilisée est soit <literal>install</literal> soit "
+"<literal>remove</literal>, cette option a le même effet "
+"qu'<literal>autoremove</literal> et supprime les paquets de dépendance "
+"inutilisés. Élément de configuration : <literal>APT::Get::Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"Cette option n'a de sens qu'avec les commandes <literal>source</literal> et "
+"<literal>build-dep</literal>. Elle indique que les noms de sources donnés ne "
+"doivent pas être repérés à travers le tableau des binaires. Cela signifie "
+"que si cette option est choisie, la commande <literal>source</literal> "
+"acceptera seulement des noms de paquets source comme argument ; elle "
+"n'acceptera pas de les rechercher à partir des noms de paquets binaires "
+"correspondants. Élément de configuration : <literal>APT::Get::Only-Source</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"Ne télécharger que le fichier .diff, .dsc ou .tar d'une archive source. "
+"Élément de configuration : <literal>APT::Get::Diff-Only</literal>, "
+"<literal>APT::Get::Dsc-Only</literal> et <literal>APT::Get::Tar-Only</"
+"literal>, "
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"Ne traiter que les dépendances de construction dépendantes de "
+"l'architecture. Élément de configuration : <literal>APT::Get::Arch-Only</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"Ne traiter que les dépendances de construction indépendantes de "
+"l'architecture. Élément de configuration : <literal>APT::Get::Indep-Only</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+"Ignorer le fait que les paquets ne peuvent pas être authentifiés ; ne le "
+"signale pas à l'utilisateur. Cette option peut être utile si on travaille "
+"avec des dépôts locaux, mais cela représente un risque considérable si "
+"l'authenticité des données n'est pas assurée d'une autre manière par "
+"l'utilisateur lui-même. L'utilisation de l'option <option>Trusted</option> "
+"pour les entrées de &sources-list; devrait être habituellement préférée à ce "
+"remplacement global. Élément de configuration : <literal>APT::Get::"
+"AllowUnauthenticated</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+"Interdire la commande update pour obtenir des données non vérifiables des "
+"sources configurées. APT échouera si la commande update vise des dépôts sans "
+"signatures cryptographiques valables. Voir aussi &apt-secure; pour plus de "
+"détails sur le concept et ses implications. Élément de configuration : "
+"<literal>Acquire::AllowInsecureRepositories</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+"Permettre à la commande update de poursuivre le téléchargement de données à "
+"partir d'un dépôt qui a modifié ses informations sur la version contenue "
+"dans le dépôt indiquant par exemple une nouvelle version majeure. APT "
+"échouera à l'exécution de la commande update pour ces dépôts jusqu'à ce que "
+"la modification soit confirmée pour s'assurer que l'utilisateur est préparé "
+"à ce changement. Voir aussi &apt-secure; pour plus de détails sur le concept "
+"et la configuration."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+"Des options spécialisées (<literal>--allow-releaseinfo-change-</literal> "
+"<replaceable>champ</replaceable>) existent pour permettre des modifications "
+"uniquement pour certains champs tels que <literal>origin</literal>, "
+"<literal>label</literal>, <literal>codename</literal>, <literal>suite</"
+"literal>, <literal>version</literal> et <literal>defaultpin</literal>. Voir "
+"aussi &apt-preferences;. Élément de configuration : <literal>Acquire::"
+"AllowReleaseInfoChange</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+"Cette commande montre les informations de progression conviviales dans la "
+"fenêtre du terminal quand des paquets sont installés, mis à jour ou "
+"supprimés. Pour une version exploitable par une machine de ces données, voir "
+"README.progress-reporting dans le répertoire doc de apt. Élément de "
+"configuration : <literal>Dpkg::Progress</literal> et <literal>Dpkg::Progress-"
+"Fancy</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+"Ajoute le fichier donné comme source de méta-données. La commande peut être "
+"répétée pour ajouter de multiples fichiers. Voir la description de l'option "
+"<option>--with-source</option> dans &apt-cache; pour plus de détails."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "Fichiers"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, le guide d'APT dans &guidesdir;, &apt-preferences;, le "
+"« HOWTO » d'APT."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> renvoie zéro après une opération normale, le "
+"décimal 100 en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "recherche dans le cache d'APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> réalise différentes opérations sur le cache de "
+"paquet d'APT. <command>apt-cache</command> ne manipule pas l'état du système "
+"mais fournit des moyens de recherche dans les métadonnées d'un paquet "
+"desquelles il extrait les informations intéressantes. Les métadonnées sont "
+"obtenues et mises à jour avec la commande update d'<command>apt-get</"
+"command> par exemple, et peuvent donc être périmées si la dernière mise à "
+"jour est trop ancienne, mais en contrepartie <command>apt-cache</command> "
+"fonctionne indépendamment de la disponibilité des sources configurées (par "
+"exemple hors ligne)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> crée le cache d'APT. Cette action est faite "
+"implicitement par toute commande qui a besoin de ce cache s'il est manquant "
+"ou obsolète."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"La commande <literal>showpkg</literal> affiche des informations sur les "
+"paquets donnés en argument. Les arguments restants sont les noms de paquets. "
+"Les versions disponibles et les dépendances inverses de chaque paquet "
+"répertorié sont listées, ainsi que les dépendances normales pour chaque "
+"version. Les dépendances normales d'un paquet sont constituées par les "
+"paquets dont il dépend ; les dépendances inverses sont les paquets qui "
+"dépendent du paquet en question. Les dépendances normales doivent donc être "
+"satisfaites et les dépendances inverses n'ont pas besoin de l'être. Ainsi, "
+"la commande <command>apt-cache showpkg libreadline2</command> donnera ce "
+"résultat :"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"On peut voir que libreadline2, version 2.1-12, dépend de libc5 et "
+"ncurses3.0 ; ces paquets doivent être installés au préalable pour que "
+"libreadline2 fonctionne. À leur tour, libreadlineg2 et libreadline2-altdev "
+"dépendent de libreadline2. Si libreadline2 est installé, libc5 et ncurses3.0 "
+"doivent être installés ; libreadlineg2 et libreadline2-altdev n'ont pas à "
+"l'être. Pour connaître le sens de la fin de chaîne, il est préférable de "
+"consulter le code source d'APT."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"La commande <literal>stats</literal> affiche des statistiques à propos du "
+"cache. Aucun autre argument n'est attendu. Voici les informations "
+"rapportées :"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>Total package names</literal> est le nombre de paquets trouvés dans "
+"le cache."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>Normal packages</literal> est le nombre de paquets simples, "
+"ordinaires ; ces paquets tolèrent une correspondance bijective entre leur "
+"nom et le nom utilisé par les autres paquets pour les qualifier comme "
+"dépendance. La majorité des paquets appartient à cette catégorie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>Pure virtual packages</literal> est le nombre de paquets qui "
+"n'existent que sous la forme d'un nom représentant un paquet virtuel ; ces "
+"paquets « fournissent » seulement un nom de paquet virtuel et aucun paquet "
+"n'utilise véritablement ce nom. Par exemple, au sein du système Debian GNU/"
+"Linux, le nom « mail-transport-agent » est un paquet virtuel pur ; plusieurs "
+"paquets peuvent « fournir » ce nom « mail-transport-agent », mais il "
+"n'existe aucun paquet nommé « mail-transport-agent »."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>Single virtual packages</literal> est le nombre de paquets virtuels "
+"qui ne peuvent être remplis que par un seul paquet. Par exemple, au sein du "
+"système Debian, « X11-text-viewer » est un paquet virtuel ; seul le paquet "
+"« xless » remplit « X11-text-viewer »."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>Mixed virtual packages</literal> est le nombre de paquets qui "
+"remplissent un paquet virtuel particulier ou dont le nom est un nom de "
+"paquet virtuel. Par exemple, au sein du système Debian, « debconf » est un "
+"paquet réel et il est aussi fourni par « debconf-tiny »."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>Missing</literal> est le nombre de paquets référencés dans une "
+"dépendance mais qui ne sont fournis par aucun paquet. Les paquets manquants "
+"peuvent être mis en évidence quand on n'accède pas à une distribution "
+"complète ou si un paquet (réel ou virtuel) a été sorti d'une distribution. "
+"Habituellement on les trouve dans les champs « Conflicts » ou « Breaks »."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>Total distinct</literal> versions est le nombre de versions de "
+"paquets trouvées dans le cache. Quand on accède à plus d'une distribution "
+"(« stable » et « unstable », par exemple), cette valeur peut être "
+"considérablement plus grande que le nombre total de paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>Total dependencies</literal> est le nombre de relations de "
+"dépendances déclarées par tous les paquets présents dans le cache."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> affiche toutes les entrées de paquets source qui "
+"correspondent aux noms donnés. Toutes les versions sont affichées et toutes "
+"les entrées qui déclarent que ces noms correspondent à des paquets binaires. "
+"Utilisez l'option <option>--only-source</option> pour n'afficher que le nom "
+"des paquets source."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"La commande <literal>dump</literal> affiche un court résumé sur chaque "
+"paquet du cache. Elle est d'abord destinée au débogage."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"La commande <literal>dumpavail</literal> affiche sur la sortie standard la "
+"liste des paquets disponibles. Elle convient à une utilisation avec &dpkg; "
+"et la méthode &dselect; s'en sert."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"La commande <literal>unmet</literal> affiche un résumé concernant toutes les "
+"dépendances absentes dans le cache de paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"La commande <literal>show</literal> est semblable à <command>dpkg --print-"
+"avail</command> ; elle affiche des informations sur les paquets donnés en "
+"argument."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"La commande <literal>search</literal> recherche l'expression rationnelle "
+"POSIX donnée en paramètre sur tous les paquets disponibles, voir &regex;. "
+"Elle cherche une occurrence de la chaîne dans les noms de paquets et dans "
+"les descriptions puis elle affiche le nom du paquet et sa description "
+"courte. Quand l'option <option>--full</option> est fournie, la sortie est "
+"identique à <literal>show</literal> pour chaque paquet ; quand l'option "
+"<option>--names-only</option> est fournie, la recherche ne porte pas sur les "
+"descriptions longues, mais seulement sur les noms de paquets et les paquets "
+"fournis."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+"On peut utiliser des arguments distincts pour indiquer des expressions "
+"rationnelles différentes sur lesquelles seront réalisées un « et » logique."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"La commande <literal>depends</literal> affiche la liste de toutes les "
+"dépendances d'un paquet et la liste de tous les paquets possibles qui "
+"satisfont ces dépendances."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"La commande <literal>rdepends</literal> affiche la liste de toutes les "
+"dépendances inverses d'un paquet."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"Cette commande affiche le nom de chaque paquet connu par APT. Un préfixe "
+"pour filtrer la liste des noms peut être donné en paramètre. La sortie est "
+"adaptée à une utilisation au sein d'une fonction complète de shell ; elle "
+"est produite très rapidement. On utilise au mieux cette commande avec "
+"l'option <option>--generate</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"Veuillez noter qu'un paquet connu par APT n'est pas forcément disponible, "
+"installable ou installé. Par exemple, les paquets virtuels sont également "
+"affichés dans la liste créée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"La commande <literal>dotty</literal> prend une liste de paquets sur la ligne "
+"de commande et affiche une sortie appropriée à une utilisation par la "
+"commande dotty du paquet <ulink url=\"http://www.research.att.com/sw/tools/"
+"graphviz/\">GraphViz</ulink>. Il en résulte un ensemble de nœuds et d'arcs "
+"représentant les relations entre les paquets. Par défaut les paquets donnés "
+"en argument suivent toutes leurs dépendances, ce qui peut produire un graphe "
+"très volumineux. Pour limiter la sortie aux seuls paquets listés sur la "
+"ligne de commande, positionnez l'option <literal>APT::Cache::GivenOnly</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"Les noeuds résultants ont plusieurs formes ; les paquets normaux sont des "
+"boîtes, les « provides » purs sont des triangles, les « provides » mixtes "
+"sont des diamants et les paquets manquants sont des hexagones. Les boîtes "
+"oranges expriment un arrêt de la récursivité [paquet feuille], les lignes "
+"bleues représentent des prédépendances et les lignes vertes représentent des "
+"conflits."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr ""
+"Attention, dotty ne peut pas représenter des ensembles très grands de "
+"paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"Identique à <literal>dotty</literal>, mais réservé à xvcg fourni avec <ulink "
+"url=\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</"
+"ulink>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> sert à déboguer des problèmes relatifs au fichier "
+"des préférences. Sans argument, la commande affiche la priorité de chaque "
+"source. Sinon, elle affiche des informations précises sur la priorité du "
+"paquet donné en argument."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"La commande <literal>madison</literal> d'<literal>apt-cache</literal> "
+"cherche à mimer le format de sortie propre à l'outil debian de gestion "
+"d'archives, <literal>madison</literal>, ainsi qu'une partie de ses "
+"fonctionnalités. Elle affiche les versions disponibles d'un paquet dans un "
+"tableau. Contrairement au programme original <literal>madison</literal>, "
+"elle n'affiche que des informations concernant l'architecture pour laquelle "
+"Apt a lu la liste des paquets disponibles (<literal>APT::Architecture</"
+"literal>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"Indique le fichier servant de cache des paquets. Le cache des paquets est le "
+"cache primaire utilisé par toutes les opérations. Élément de configuration : "
+"<literal>Dir::Cache::pkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"Indique le fichier servant de cache des sources. Ce cache n'est utilisé que "
+"par <literal>gencaches</literal> ; une version des informations sur les "
+"paquets, issue d'une analyse de sources distantes, est conservée. Quand le "
+"cache des paquets est créé, le cache des sources est utilisé afin d'éviter "
+"d'analyser à nouveau tous les paquets. Élément de configuration : "
+"<literal>Dir::Cache::srcpkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Mode silencieux ; produit une sortie pertinente pour l'enregistrement dans "
+"un fichier-journal, sans afficher d'indicateur de progression. Un plus grand "
+"nombre de q produira un plus grand silence, avec un maximum de 2. Vous "
+"pouvez aussi utiliser <option>-q=#</option> pour positionner le niveau de "
+"silence, annulant le fichier de configuration. Élément de configuration : "
+"<literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"N'affiche que les dépendances importantes ; à utiliser avec les commandes "
+"<literal>unmet</literal> et <literal>depends</literal> pour n'afficher que "
+"les relations Depends et Pre-Depends. Élément de configuration : "
+"<literal>APT::Cache::Important</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"Par défaut, <command>depends</command> et <command>rdepends</command> "
+"affichent toutes les dépendances. Ce comportement peut être modifié avec ces "
+"réglages qui omettront le type de dépendance indiqué. Élément de "
+"configuration : <literal>APT::Cache::Show<replaceable>TypeDépendance</"
+"replaceable></literal>, p. ex. <literal>APT::Cache::ShowRecommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+"Par défaut, <command>depends</command> et <command>rdepends</command> "
+"n'affichent que les dépendances indiquées explicitement dans les "
+"métadonnées. Avec ce marqueur, ils afficheront aussi les dépendances "
+"ajoutées de façon implicite basées sur les données rencontrées. Par exemple, "
+"un message <literal>Conflicts: foo</literal> exprime de façon implicite que "
+"ce paquet est aussi en conflit avec le paquet foo de n'importe quelle autre "
+"architecture. Élément de configuration : <literal>APT::Cache::ShowImplicit</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"Affiche la totalité des champs d'information sur le paquet lors d'une "
+"recherche. Élément de configuration : <literal>APT::Cache::ShowFull</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"Affiche la totalité des champs d'information pour toutes les versions "
+"disponibles : c'est la valeur par défaut. Pour la désactiver, utilisez "
+"l'option <option>--no-all-versions</option>. Quand l'option <option>--no-all-"
+"versions</option> est choisie, seuls les éléments de la version choisie "
+"(celle qui serait installée) seront affichés. Cette option concerne "
+"seulement la commande <literal>show</literal>. Élément de configuration : "
+"<literal>APT::Cache::AllVersions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"Réalise une mise à jour automatique du cache des paquets plutôt que de se "
+"servir du cache tel qu'il est. Pour désactiver cette option (option par "
+"défaut), utilisez l'option <option>--no-generate</option>. Élément de "
+"configuration : <literal>APT::Cache::Generate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"N'effectue une recherche que sur les noms de paquets et de paquets fournis, "
+"pas sur les descriptions longues. Élément de configuration : <literal>APT::"
+"Cache::NamesOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"Avec cette option, <literal>pkgnames</literal> affiche tous les noms, les "
+"noms des paquets virtuels et les dépendances manquantes. Élément de "
+"configuration : <literal>APT::Cache::AllNames</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"Avec cette option, <literal>depends</literal> et <literal>rdepends</literal> "
+"sont récursives de manière à n'afficher qu'une seule fois les paquets "
+"mentionnés. Élément de configuration : <literal>APT::Cache::RecurseDepends</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"Cette option limite la sortie de <literal>depends</literal> et de "
+"<literal>rdepends</literal> aux paquets qui sont actuellement installés. "
+"Élément de configuration : <literal>APT::Cache::Installed</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+"Ajoute le fichier donné comme source de métadonnées. La commande peut être "
+"répétée pour ajouter de multiples fichiers. Actuellement, les "
+"fichiers<literal>*.deb</literal>, <literal>*.dsc</literal>, <literal>*."
+"changes</literal>, <literal>Sources</literal> et <literal>Packages</"
+"literal>, aussi bien que les répertoires de paquets source sont pris en "
+"charge. Les correspondances de fichier sont basées sur leur nom seulement et "
+"non sur leur contenu !"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+"Les <literal>Sources</literal> et <literal>Packages</literal> peuvent être "
+"compressés dans n'importe quel format qu'APT prend en charge à condition "
+"qu'ils portent la bonne extension. Si vous avez besoin de stocker plusieurs "
+"de ces fichiers dans un seul répertoire, vous pouvez ajouter comme préfixe "
+"le nom que vous voulez pourvu que le dernier caractère soit un tiret bas "
+"(« <literal>_</literal> »). Exemple : mon.exemple_Packages.xz"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"Veuillez noter que ces sources sont traitées comme fiables (voir &apt-"
+"secure;). Élément de configuration : <literal>APT::Sources::With</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> retourne zéro après un déroulement normal et le "
+"nombre décimal 100 en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "Utilitaire de gestion des clés d'APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> gère les clés dont se sert apt pour authentifier "
+"les paquets. Les paquets authentifiés par ces clés seront réputés fiables."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+"Notez que si vous souhaitez utiliser <command>apt-key</command>, "
+"l'installation complémentaire de la suite GNU Privacy Guard (paquet "
+"<package>gnupg</package>) est requise. Pour cette raison uniquement, "
+"l'utilisation programmée (en particulier dans les scripts des responsables "
+"des paquets !) est fortement déconseillée. En outre, le format de sortie de "
+"toutes les commandes est indéfini et de plus il peut changer, et il change "
+"réellement chaque fois que les commandes sous-jacentes changent. "
+"<command>apt-key</command> essaiera de détecter un tel usage et, dans ces "
+"cas, enverra des alertes sur l'erreur standard."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr "Trousseaux de clés pris en charge"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+"apt-key ne prend en charge que le format binaire OpenPGP (connu aussi sous "
+"le nom de « trousseau de clés public GPG ») dans les fichiers avec "
+"l'extension « <literal>gpg</literal> », et pas le format de base de données "
+"Keybox, introduit comme format par défaut pour les fichiers de trousseau de "
+"clés dans les versions les plus récentes de &gpg;. Les fichiers binaires de "
+"trousseau de clés destinés à être utilisés dans toutes les versions d'apt "
+"devraient donc toujours être créés avec la commande <command>gpg --export</"
+"command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+"Autrement, si tous les systèmes susceptibles d'utiliser le trousseau de clés "
+"créé disposent d'une version d'apt >= 1.4, il est possible d'utiliser plutôt "
+"le format ASCII-Armored, avec l'extension « <literal>asc</literal> », qui "
+"peut être créé par la commande <command>gpg --armor --export</command>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "Commandes"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"Ajouter une clé à la liste des clés fiables. La clé est lue dans le fichier "
+"indiqué avec le paramètre &synopsis-param-filename; ou sur l'entrée standard "
+"si le nom de fichier est <literal>-</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+"Il est primordial de vérifier que les clés ajoutées manuellement avec "
+"<command>apt-key</command> appartiennent bien au propriétaire des dépôts "
+"comme elles le prétendent, sinon l'infrastructure de &apt-secure; est "
+"complètement compromise."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+"<emphasis>Attention</emphasis> : plutôt que d'utiliser cette commande, un "
+"trousseau de clés peut être placé directement dans le répertoire <filename>/"
+"etc/apt/trusted.gpg.d/</filename> avec un nom descriptif et soit "
+"« <literal>gpg</literal> » soit « <literal>asc</literal> » comme extension "
+"de fichier."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr "Supprimer une clé de la liste des clés fiables."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr "Afficher la clé &synopsis-param-keyid; sur la sortie standard."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "Afficher toutes les clés fiables sur la sortie standard."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr "Afficher la liste des clés fiables avec leurs empreintes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+"Passer des options avancées à gpg. Avec <command>adv --recv-key</command>, "
+"il est possible par exemple de télécharger une clé directement d'un serveur "
+"de clé dans l'ensemble de clés fiables. Veuillez noter qu'il n'y a "
+"<emphasis>aucune</emphasis> vérification réalisée, aussi, il peut être "
+"facile de compromettre complètement l'infrastructure &apt-secure;, si la "
+"commande est utilisée sans précaution."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr "(obsolète)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"Mettre à jour le trousseau de clés local avec le trousseau de clés de "
+"l'archive et y supprimer les clés qui ne sont plus valables. Le trousseau de "
+"clés de l'archive est fourni dans le paquet <literal>archive-keyring</"
+"literal> de la distribution, par exemple le paquet &keyring-package; dans "
+"&keyring-distro;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+"Veuillez noter qu'une distribution n'a pas besoin et, en fait, ne devrait "
+"plus utiliser cette commande et plutôt charger directement les fichiers de "
+"trousseau de clés dans le répertoire <filename>/etc/apt/trusted.gpg.d/</"
+"filename> parce que cela évite une dépendance à <package>gnupg</package> et "
+"qu'il est plus facile pour les responsables et les utilisateurs de gérer les "
+"clés en ajoutant ou en retirant simplement des fichiers."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"Effectuer une mise à jour analogue à celle de la commande <command>update</"
+"command> mais avec récupération du trousseau de clés de l'archive depuis une "
+"URI et la valide avec une clé maître. Cette commande nécessite que &wget; "
+"soit installé, qu'APT soit construit pour le récupérer sur un serveur et "
+"enfin une clé maître pour effectuer la validation. Cette commande n'est pas "
+"gérée par APT dans Debian où <command>update</command> est utilisé à la "
+"place. Par contre, la version d'Ubuntu permet de l'utiliser."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "Options"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"Veuillez noter que les options doivent être utilisées avant les commandes "
+"décrites dans la section suivante."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"Cette option permet d'indiquer le fichier porte-clés sur lequel la commande "
+"doit agir. Par défaut, une commande sera exécutée sur le fichier "
+"<filename>trusted.gpg</filename> ainsi que sur tous les fichiers du "
+"répertoire <filename>trusted.gpg.d</filename>. Le fichier <filename>trusted."
+"gpg</filename> reste le fichier principal pour les clés donc, par exemple, "
+"les nouvelles clés y seront ajoutées."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr "affiche, définit ou redéfinit divers paramètres d'un paquet"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+"La commande <command>apt-mark</command> peut être utilisée comme interface "
+"unique pour diverses configurations d'un paquet, par exemple pour le marquer "
+"comme installé automatiquement ou manuellement, ou pour modifier les "
+"sélections de <command>dpkg</command> telles que <option>hold</option> "
+"<option>install</option> <option>deinstall</option> et <option>purge</"
+"option> qui sont suivies par exemple par les commandes <command>apt-get "
+"dselect-upgrade</command> ou <command>aptitude</command>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr "Paquets installés automatiquement et manuellement"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"Lorsque l'installation d'un paquet est demandée et que par voie de "
+"dépendances d'autres paquets sont installés, ces paquets sont marqués comme "
+"ayant été automatiquement installés, tandis que le paquet que vous avez "
+"installé explicitement est marqué comme manuellement installé. Une fois que "
+"ces paquets automatiquement installés ne sont plus liés à un paquet installé "
+"manuellement, ils ne seront plus considérés comme nécessaires et "
+"<command>apt-get</command> ou <command>aptitude</command>, par exemple, "
+"proposeront au moins de les supprimer."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> permet de marquer un paquet comme ayant été installé "
+"automatiquement. Un tel paquet sera supprimé automatiquement dès que plus "
+"aucun paquet installé manuellement ne dépend de lui."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> permet de marquer un paquet comme installé "
+"manuellement. Un tel paquet ne sera pas supprimé automatiquement, même si "
+"aucun autre paquet n'en dépend."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>minimize-manual</literal> permet de marquer les dépendances "
+"(transitives) de métapaquets comme ayant été installées automatiquement. "
+"Cela peut être utilisé par exemple après une installation pour réduire le "
+"nombre de paquets installés manuellement, ou de façon permanente sur des "
+"systèmes gérés par des métapaquets de configuration système."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal>, affiche les paquets installés automatiquement, "
+"un paquet par ligne. Si aucun paramètre n'est indiqué, tous les paquets "
+"installés automatiquement seront affichés. Si des noms de paquets sont "
+"passés en paramètre, seuls ceux qui sont automatiquement installés seront "
+"affichés."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> peut être utilisé de manière analogue à "
+"<literal>showauto</literal> pour afficher la liste des paquets installés "
+"manuellement."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"Lecture/écriture des statistiques d'un paquet dans &synopsis-param-filename; "
+"au lieu du fichier par défaut (<filename>extended_status</filename> dans le "
+"répertoire défini par l'élément de configuration <literal>Dir::State</"
+"literal>)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr "Empêcher les modifications d'un paquet"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>hold</literal> permet de marquer un paquet comme retenu, ce qui "
+"empêchera qu'il soit installé, mis à jour ou supprimé automatiquement."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> est utilisé pour supprimer l'état "
+"« hold » (retenu) d'un paquet afin de permettre toute action qui y est liée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> permet d'afficher la liste des paquets retenus "
+"de manière analogue aux commandes de même type."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr "Programmer des paquets pour Install, Remove et Purge"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+"Certains frontaux comme <command>apt-get dselect-upgrade</command> peuvent "
+"être utilisés pour appliquer des modifications, préalablement programmées, "
+"de l'état d'installation de paquets. Ces modifications peuvent être "
+"programmées avec les commandes <option>install</option>, <option>remove</"
+"option> (connue aussi sous le nom de <option>deinstall</option>) et "
+"<option>purge</option>. Les paquets faisant l'objet d'une sélection "
+"particulière peuvent être affichés respectivement avec les options "
+"<option>showinstall</option>, <option>showremove</option> et "
+"<option>showpurge</option>. Vous trouverez plus d'information sur ce que "
+"l'on appelle les sélections de dpkg dans &dpkg;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> retourne zéro après un déroulement normal, et un "
+"autre chiffre en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "Gestion de l'authentification d'archive avec APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"Depuis sa version 0.6, <command>apt</command> sait vérifier la signature du "
+"fichier Release de chaque dépôt. On s'assure ainsi que les paquets dans "
+"l'archive ne peuvent pas être modifiés par quelqu'un qui ne possède pas la "
+"clé de la signature du fichier Release. À partir de la version 1.1, "
+"<command>apt</command> exige que les dépôts fournissent des informations "
+"récentes d'authentification pour une utilisation libre du dépôt. Depuis la "
+"version 1.5, les modifications dans les informations contenues dans le "
+"fichier Release sur le dépôt, doivent être confirmées avant qu'APT continue "
+"à appliquer les mises à jour depuis ce dépôt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"Attention : toutes les interfaces de gestion de paquets comme &apt-get;, "
+"&aptitude; et &synaptic; possèdent cette fonction de certification, aussi "
+"cette page de manuel utilise <literal>APT</literal> pour se référer à "
+"l'ensemble d'entre elles, pour des raisons de simplicité."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Unsigned Repositories"
+msgstr "Dépôts non signés"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+"Si une archive possède un fichier Release non signé ou pas de fichier "
+"Release du tout, les versions actuelles d'APT refuseront par défaut d'en "
+"télécharger des données dans les opérations <command>update</command>. Même "
+"si un frontal tel que &apt-get; est forcé de télécharger, il demandera une "
+"confirmation explicite si une installation inclut un paquet d'une archive "
+"non authentifiée."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+"Vous pouvez contraindre les clients APT à n'émettre que des avertissements "
+"en configurant l'option <option>Acquire::AllowInsecureRepositories</option> "
+"à <literal>true</literal>. L'option <literal>allow-insecure=yes</literal> de "
+"&sources-list; peut aussi permettre à des dépôts individuels d'être non "
+"sécurisés. Veuillez noter que les dépôts non sécurisés sont fortement "
+"déconseillés et toutes les options pour contraindre APT à continuer à les "
+"prendre en charge devront être éventuellement supprimées. Les utilisateurs "
+"disposent aussi de l'option <option>Trusted</option> pour désactiver même "
+"les avertissements, mais il faut être sûr de comprendre ses implications "
+"détaillées dans &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+"Un dépôt qui auparavant était authentifié, mais qui perdrait cet état lors "
+"d'une opération <command>update</command> envoie un message d'erreur à tous "
+"les clients d'APT quelle que soit l'option d'autoriser ou d'interdire "
+"l'utilisation de dépôts non sécurisés. L'erreur peut être contournée par le "
+"réglage supplémentaire de <option>Acquire::"
+"AllowDowngradeToInsecureRepositories</option> à <literal>true</literal>, ou, "
+"pour des dépôts individuels avec l'option <literal>allow-downgrade-to-"
+"insecure=yes</literal> de &sources-list;."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Signed Repositories"
+msgstr "Dépôts signés"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"D'une archive APT jusqu'à l'utilisateur, la chaîne de confiance se construit "
+"en plusieurs étapes. <command>Apt-secure</command> est la dernière étape. "
+"Faire confiance à une archive ne signifie pas que les paquets qu'elle "
+"contient sont exempts de code malveillant, mais signifie que vous faites "
+"confiance au responsable de l'archive. C'est ensuite au responsable de "
+"l'archive de faire en sorte que l'archive soit fiable."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"<command>Apt-secure</command> n'examine pas la signature d'un paquet. "
+"Certains programmes peuvent le faire comme <command>debsig-verify</command> "
+"ou <command>debsign</command>, qu'on peut trouver dans les paquets debsig-"
+"verify et devscripts."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"La chaîne de confiance dans Debian commence, par exemple, quand un "
+"responsable de paquet envoie un nouveau paquet ou une nouvelle version d'un "
+"paquet dans l'archive. Cet envoi, pour être effectif, doit être signé avec "
+"la clé d'un responsable qui se trouve dans un des trousseaux des "
+"responsables de paquet Debian (disponibles dans le paquet debian-keyring). "
+"Les clés des responsables de paquet sont signées par d'autres responsables, "
+"suivant des procédures préétablies pour s'assurer de l'identité des "
+"propriétaires de la clé. Des procédures similaires existent dans toutes les "
+"distributions basées sur Debian."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"Une fois que le paquet envoyé a été vérifié et inclus dans l'archive, la "
+"signature du responsable est enlevée, une somme de contrôle du paquet est "
+"calculée et mise dans le fichier Packages. Une somme de contrôle de tous les "
+"paquets est ensuite calculée et mise dans le fichier Release. Ce fichier est "
+"signé par la clé de l'archive pour la version courante de la distribution et "
+"distribuée en même temps que les paquets et les fichiers Packages sur les "
+"miroirs. Les clés sont dans le trousseau de clés de l'archive fournies par "
+"le paquet &keyring-package;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"Un utilisateur peut consulter la signature du fichier Release, extraire la "
+"somme de contrôle d'un paquet et la comparer avec la somme du paquet qu'il a "
+"téléchargé, ou tout simplement compter sur APT pour faire ces opérations "
+"automatiquement."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"Cette façon de faire est différente d'une vérification de la signature d'un "
+"paquet. Elle vise à empêcher deux types d'attaque possibles :"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>Attaque réseau de type « homme au milieu »</literal>. Sans "
+"vérification de signature, quelqu'un de malveillant peut s'introduire au "
+"milieu du processus de téléchargement et insérer du code soit en contrôlant "
+"un élément du réseau, routeur, commutateur, etc. soit en détournant le "
+"trafic vers un serveur fourbe (par usurpation d'adresses)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>Attaque par compromission d'un miroir sur le réseau</literal>. Sans "
+"vérification de signature, quelqu'un de malveillant peut compromettre un "
+"miroir et modifier les fichiers. Ainsi tous ceux qui téléchargent les "
+"paquets de ce miroir propagent du code malveillant."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"Cependant cette méthode ne protège pas contre une compromission du serveur "
+"principal lui-même (qui signe les paquets) ni contre la compromission de la "
+"clé qui sert à signer les fichiers Release. Mais elle peut compléter la "
+"signature des paquets."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr "Modifications des informations"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+"Le fichier Release renferme, en plus des sommes de contrôle pour les "
+"fichiers du dépôt, des informations générales sur le dépôt comme l'origine, "
+"le nom de code ou le numéro de la version."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+"Ces informations apparaissent à plusieurs endroits, aussi, le propriétaire "
+"d'un dépôt devrait toujours s'assurer de leur exactitude. Par ailleurs, les "
+"configurations de l'utilisateur, comme &apt-preferences;, peuvent dépendre "
+"de ces informations et les utiliser. Depuis la version 1.5, l'utilisateur "
+"doit par conséquent confirmer de façon explicite les modifications pour "
+"signaler qu'il est suffisamment préparé, par exemple, pour la nouvelle "
+"version majeure de la distribution fournie dans le dépôt (comme indiqué par "
+"exemple par le nom de code)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr "Configuration utilisateur"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"Le programme qui gère la liste des clés utilisées par APT pour faire "
+"confiance aux dépôts s'appelle <command>apt-key</command>. Il peut ajouter "
+"ou supprimer des clés aussi bien que lister les clés de confiance. Il est "
+"possible de limiter la capacité pour une ou plusieurs clés de signer telle "
+"ou telle archive avec l'option <option>Signed-By</option> dans &sources-"
+"list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+"Veuillez noter qu'une installation par défaut possède toutes les clés pour "
+"obtenir en toute sécurité des paquets des dépôts par défaut, aussi, bricoler "
+"avec <command>apt-key</command> n'est nécessaire que si vous souhaitez "
+"ajouter des dépôts tiers."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"Pour ajouter une clé, vous devez d'abord la télécharger. Il vaut mieux "
+"utiliser un canal fiable pour ce téléchargement. Ensuite vous l'ajoutez avec "
+"la commande <command>apt-key</command> et vous lancez la commande "
+"<command>apt-get update</command> pour télécharger et vérifier le fichier "
+"<filename>InRelease</filename> ou <filename>Release.gpg</filename> de "
+"l'archive que vous avez configurée."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Repository Configuration"
+msgstr "Configuration du dépôt"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+"Si vous voulez signer les archives dont vous avez la responsabilité, vous "
+"devez :"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"<emphasis>créer un fichier Release à la racine de l'archive</emphasis>, s'il "
+"n'existe pas déjà. Vous pouvez le créer avec la commande <command>apt-"
+"ftparchive release</command> (fournie dans le paquet apt-utils)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>le signer</emphasis>, avec les commande <command>gpg -- clearsign -"
+"o InRelease Release</command> et <command>gpg -abs -o Release.gpg Release</"
+"command>."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>publier l'empreinte de la clé</emphasis>. Ainsi les utilisateurs "
+"de votre archive connaîtront la clé qu'ils doivent importer pour "
+"authentifier les fichiers de l'archive. Le mieux est de diffuser sa clé dans "
+"son propre paquet de trousseau comme le fait &keyring-distro; avec &keyring-"
+"package; pour ensuite distribuer automatiquement les mises à jour et les "
+"transitions de clés."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+"<emphasis>fournir les instructions pour ajouter l'archive et la clé</"
+"emphasis>. Si les utilisateurs ne peuvent récupérer de façon sûre votre clé, "
+"la chaîne de confiance décrite plus haut est rompue. La façon d'aider les "
+"utilisateurs à ajouter votre clé de l'archive dépend de l'archive et de "
+"l'audience cible : cela va d'un paquet de trousseau inclus dans une autre "
+"archive que des utilisateurs ont déjà configurée (comme les dépôts par "
+"défaut de leur distribution) à la mobilisation du web de confiance."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"Chaque fois que le contenu de l'archive change, (suppression ou ajout de "
+"nouveaux paquets) le responsable doit refaire les deux premières étapes."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"Pour des informations plus complètes, vous pouvez consulter <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\"> "
+"l'infrastructure debian pour la sécurité</ulink> un chapitre du manuel "
+"Debian sur la sécurité (disponible dans le paquet harden-doc) et le <ulink "
+"url=\"http://www.cryptnet.net/fdp/crypto/strong_distro.html\">Strong "
+"Distribution HOWTO</ulink> par V. Alex Brennen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "Auteurs des pages de manuel"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"Cette page a été écrite à partir des travaux de Javier Fernández-Sanguino "
+"Peña, Isaac Jones, Colin Walters, Florian Weimer et Michael Vogt."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "Utilitaire de gestion des CD d'APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"<command>apt-cdrom</command> est utilisé pour ajouter un nouveau CD à la "
+"liste des sources disponibles. <command>apt-cdrom</command> prend soin de "
+"déterminer la structure du disque, de corriger de possibles erreurs de "
+"gravure et de vérifier les fichiers d'index."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"Il est nécessaire d'utiliser <command>apt-cdrom</command> pour ajouter des "
+"CD au système APT car cela ne peut être réalisé manuellement. Par ailleurs, "
+"chaque disque d'un ensemble de CD doit être séparément inséré et parcouru "
+"pour prendre en compte de possibles erreurs de gravure."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"La commande <literal>add</literal> est utilisée pour ajouter un nouveau "
+"disque à la liste des sources. Elle démonte le CD, réclame l'insertion d'un "
+"disque, parcourt ensuite le disque et copie les fichiers d'index. Si le "
+"disque ne possède pas de répertoire <filename>.disk</filename> correct, un "
+"titre descriptif est demandé."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"APT utilise un identifiant de CD pour reconnaître le disque qui se trouve "
+"actuellement dans le lecteur et maintient une base de données de ces "
+"identifiants dans <filename>&statedir;/cdroms.list</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"Cette commande de débogage retourne l'identifiant du disque actuel ainsi que "
+"le nom du fichier stocké."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"Ne pas essayer de détecter automatiquement le chemin du CD-ROM. "
+"Habituellement combiné avec l'option <option>--cdrom</option>. Élément de "
+"configuration : <literal>Acquire::cdrom::AutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"Point de montage ; spécifie l'emplacement de montage du CD. Ce point de "
+"montage doit être spécifié dans <filename>/etc/fstab</filename> et "
+"correctement configuré. Élément de configuration : <literal>Acquire::cdrom::"
+"mount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"Change le nom d'un disque ; change le nom d'un disque ou remplace un disque "
+"pour un nom donné. Cette option oblige <command>apt-cdrom</command> à "
+"demander un nouveau nom à l'utilisateur. Élément de configuration : "
+"<literal>APT::CDROM::Rename</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"Pas de montage ; empêche <command>apt-cdrom</command> de monter ou démonter "
+"le point de montage. Élément de configuration : <literal >APT::CDROM::"
+"NoMount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"Copie rapide ; suppose que les fichiers de paquets sont valables et ne "
+"vérifie pas chaque paquet. Cette option ne devrait être utilisée que si "
+"<command>apt-cdrom</command> a préalablement utilisé ce disque et n'a trouvé "
+"aucune erreur. Élément de configuration : <literal>APT::CDROM::Fast</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"Parcours minutieux des paquets ; cette option peut être nécessaire avec des "
+"CD d'anciens systèmes Debian 1.1 ou 1.2 dont les fichiers Packages sont "
+"situés dans des endroits inhabituels. Il faudra plus de temps pour parcourir "
+"le CD mais tous les paquets seront repérés."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"Aucune modification ; ne pas modifier le fichier &sources-list; ni les "
+"fichiers d'index. Cependant, tout est vérifié. Élément de configuration : "
+"<literal>APT::CDROM::NoAct</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> renvoie zéro après un déroulement normal, et le "
+"nombre décimal 100 en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "Programme d'interrogation de la configuration d'APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> est un programme interne utilisé par "
+"différents composants d'APT ; il offre la possibilité d'une configuration "
+"cohérente et permet aux applications conçues sous forme de script une "
+"utilisation simple du fichier de configuration principal <filename>/etc/apt/"
+"apt.conf</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"Le terme shell est utilisé pour accéder aux informations de configuration "
+"depuis un script shell. Deux arguments doivent lui être donnés ; le premier "
+"est une variable du shell et le second une valeur de configuration à "
+"demander. La sortie standard consiste en une liste de commandes "
+"d'assignation de shell pour chaque valeur présente. Dans un script shell, "
+"cette commande devrait être utilisée comme suit :"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::Options`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"La variable d'environnement du shell $OPTS sera définie par la valeur de "
+"MyApp::Options ou, par défaut, la valeur -f."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"L'élément de configuration peut être suivi par /[fdbi]. « f » renvoie un nom "
+"de fichier, « d » un nom de répertoire, « b » renvoie « true » ou « false » "
+"et « i » renvoie un entier. Chacune de ses valeurs est normalisée et "
+"vérifiée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "Affiche seulement le contenu de l'espace de configuration."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"Inclure les options qui ont une valeur vide. Ce comportement est celui par "
+"défaut ; il est donc conseillé d'utiliser --no-empty pour les supprimer de "
+"ce qui est retourné."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"Définit ce que retourne chaque option de configuration. &percnt;t sera "
+"remplacé par son nom individuel, &percnt;f par le nom hiérarchique complet "
+"et &percnt;v par la valeur. Les majuscules et les caractères spéciaux dans "
+"la valeur seront encodés afin de pouvoir être utilisés sans problèmes, par "
+"exemple dans une chaîne définie par RFC822. Par ailleurs, &percnt;n sera "
+"remplacé par un retour à la ligne et &percnt;N par une tabulation. Le "
+"caractère &percnt; peut être affiché avec &percnt;&percnt; ."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> retourne zéro après un déroulement normal, et "
+"le nombre 100 en cas d'erreur."
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "Documentation initiale de Debug::*."
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "Fichier de configuration pour APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"Le fichier <filename>apt.conf</filename> est le fichier de configuration "
+"principal du l'ensemble de programmes APT, mais n'est de loin pas le seul "
+"endroit où des choix d'options peuvent être effectués. L'ensemble des outils "
+"partagent leur analyse de la ligne de commande, ce qui permet de garantir un "
+"environnement d'utilisation uniforme."
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+"Lorsqu'un programme de l'ensemble APT est utilisé, il lit le fichier de "
+"configuration dans l'ordre suivant :"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+"fichier indiqué par la variable d'environnement <envar>APT_CONFIG</envar> si "
+"elle existe"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"tous les fichiers de <literal>Dir::Etc::Parts</literal> dans l'ordre "
+"alphanumérique ascendant qui ont soit l'extension \"<literal>conf</literal>"
+"\", soit aucune extension et qui ne contiennent que des caractères "
+"alphanumériques, des tirets (-), des caractères de soulignement (_) et des "
+"points (.), les autres fichiers étant ignorés. Dans le cas contraire, APT "
+"affichera un avertissement indiquant qu'il a ignoré un fichier si celui-ci "
+"ne correspond par à un motif défini dans <literal>Dir::Ignore-Files-"
+"Silently</literal> (les fichiers correspondant à cette variable de "
+"configuration étant, eux, ignorés silencieusemennt)."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+"le fichier de configuration défini par <literal>Dir::Etc::Main</literal>"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+"toutes les options définie dans le sous-arbre binaire de configuration "
+"spécifique sont déplacées à la racine de l'arbre."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"les options de ligne de commande sont appliquées pour remplacer les "
+"directives de configuration ou pour charger d'autres fichiers de "
+"configuration."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "Syntaxe"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"Le fichier de configuration est construit comme un arbre d'options "
+"organisées en groupes fonctionnels. On se sert du double deux points "
+"(« :: ») pour indiquer une option ; par exemple, <literal>APT::Get::Assume-"
+"Yes</literal> est une option pour le groupe d'outils APT, destinée à l'outil "
+"Get. Il n'y a pas d'héritage des options des groupes parents."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+"Syntaxiquement, le langage de configuration est conçu sur le même modèle que "
+"les langages utilisés par des outils ISC tels que bind et dhcp. Une ligne "
+"qui commence par <literal>//</literal> est traitée comme un commentaire et "
+"ignorée, de même que les sections de texte placées entre <literal>/*</"
+"literal> et <literal>*/</literal>, tout comme les commentaires C/C++. "
+"Chaque ligne est de la forme : <literal>APT::Get::Assume-Yes \"true\";</"
+"literal>. Les guillemets et le point-virgule final sont obligatoires. La "
+"valeur doit tenir sur une seule ligne et il n'existe pas de fusion de "
+"chaînes. Elle ne doit pas comporter de guillemets et de barre oblique "
+"inversée. Le nom d'une option peut contenir des caractères alphanumériques "
+"et « /-:._+ ». On peut déclarer un nouveau champ d'action avec des "
+"accolades, comme suit :"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+"avec des retours à la ligne pour faciliter la lecture. On peut créer une "
+"liste en ouvrant un champ d'action et en y insérant une chaîne entre "
+"guillemets suivie d'un point virgule. Des entrées multiples peuvent être "
+"incluses, séparées par des points-virgules."
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+"Les modèles &configureindex; montrent à quoi devrait ressembler le fichier "
+"de configuration."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+"Les identifiants des options de configuration ne sont pas sensibles à la "
+"casse. Dans l'exemple précédent, on pourrait donc aussi bien utiliser "
+"<literal>dpkg::pre-install-pkgs</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+"Les noms des éléments de configuration sont optionnels si une liste est "
+"définie, comme cela peut se voir avec l'exemple <literal>DPkg::Pre-Install-"
+"Pkgs</literal> précédent. Si vous n'indiquez pas de nom, une nouvelle entrée "
+"ajoutera une nouvelle option à la liste. Dans le cas contraire, l'option "
+"correspondante peut être remplacée, comme toute autre option, en lui "
+"réaffectant une valeur."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+"Deux éléments spéciaux sont autorisés : <literal>#include</literal> (qui est "
+"obsolète et n'est plus géré par des implémentations alternatives) et "
+"<literal>#clear</literal>. <literal>#include</literal> inclut le fichier "
+"donné en paramètre, à moins que le nom ne se termine par une barre oblique "
+"auquel cas le répertoire entier est inclus. <literal>#clear</literal> sert à "
+"effacer une partie de l'arbre de configuration. L'élément désigné et tout "
+"ses descendants sont supprimés. Veuillez noter que ces lignes doivent "
+"également se terminer avec un point-virgule."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+"La commande <literal>#clear</literal> est la seule façon de supprimer une "
+"liste ou un champ d'action (« scope »). La réouverture d'un scope ou le "
+"style « :: » décrit plus loin ne remplaceront <emphasis>pas</emphasis> les "
+"entrées écrites précédemment. Les options ne peuvent être remplacées qu'en "
+"leur affectant une nouvelle valeur. Les listes et les champs d'action ne "
+"peuvent être remplacés mais seulement effacés."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+"Tous les outils d'APT possèdent une option <option>-o</option> qui permet de "
+"spécifier une configuration quelconque depuis la ligne de commande. La "
+"syntaxe consiste en un nom complet d'option (par exemple <literal>APT::Get::"
+"Assume-Yes</literal>) suivi par un signe égal, puis par la nouvelle valeur "
+"de l'option. On peut compléter une liste en ajoutant un <literal>::</"
+"literal> final au nom de la liste. Comme on peut s'en douter, la syntaxe de "
+"champ d'action (« scope ») ne peut pas être indiquée à la ligne de commande."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+"Veuillez noter que vous ne pouvez utiliser <literal>::</literal> que pour "
+"ajouter un élément par ligne à la liste et que cela ne devrait pas être "
+"utilisé en combinaison avec la syntaxe de champ d'action (« scope ») qui "
+"inclut implicitement <literal>::</literal>. L'utilisation simultanée des "
+"deux syntaxes déclenchera un bogue dont certains utilisateurs se servent "
+"comme d'une fonctionnalité : une option avec le nom inhabituel « <literal>::"
+"</literal> » se comportera comme toute autre option nommée. Cela risque "
+"d'avoir de nombreux problèmes comme conséquence, par exemple si un "
+"utilisateur écrit plusieurs lignes avec cette syntaxe <emphasis>erronée</"
+"emphasis> afin de faire un ajout à la liste, l'effet obtenu sera inverse "
+"puisque seule la dernière valeur pour l'option « <literal>::</literal> » "
+"sera utilisée. Les futures versions d'APT retourneront une erreur et "
+"l'exécution sera interrompue si cette utilisation incorrecte est rencontrée. "
+"Il est donc conseillé de corriger ces défauts tant qu'APT ne s'en plaint pas "
+"explicitement."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr "Le groupe APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+"Ce groupe d'options contrôle le comportement global d'APT et contient "
+"également des options communes à tous les outils."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+"L'architecture du système ; cette option positionne l'architecture à "
+"utiliser pour récupérer des fichiers et analyser des listes de paquets. La "
+"valeur interne par défaut est l'architecture pour laquelle APT a été compilé."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+"Toutes les architectures gérées par le système. Par exemple, les processeurs "
+"qui mettent en œuvre le jeu d'instructions <literal>amd64</literal> (aussi "
+"appelé <literal>x86-64</literal>) peuvent exécuter des binaires compilés "
+"pour le jeu d'instructions<literal>i386</literal> (<literal>x86</literal>). "
+"Cette liste est utilisé pour récupérer des fichiers et analyser les listes "
+"de paquets. La valeur par défaut initiale est toujours celle de "
+"l'architecture native du système (<literal>APT::Architecture</literal>) et "
+"les autres architectures sont ajoutées à la liste par défaut lorsqu'elles "
+"sont enregistrées avec <command>dpkg --add-architecture</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+"Ce champ d'action (« scope ») définit quels formats de compression sont "
+"gérés, comment la compression et la décompression peuvent être réalisées si "
+"ce format n'est pas pris en charge directement dans APT et une indication du "
+"coût d'une compression dans ce format. Dans cet exemple, le paragraphe "
+"suivant de la configuration permettra à APT de télécharger, décompresser, "
+"créer et stocker des fichiers avec l'extension de fichier à bas coût "
+"<literal>.reversed</literal> qu'il passera à la commande <command>rev</"
+"command> sans paramètre supplémentaire en ligne de commande pour la "
+"compression et la décompression :"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+"Liste de tous les profils de construction activés pour la résolution de "
+"dépendances de construction, sans le préfixe de l'espace de nommage du "
+"\"<literal>profile.</literal>\". Par défaut, cette liste est vide. La "
+"variable <envar>DEB_BUILD_PROFILES</envar> comme l'utilise &dpkg-"
+"buildpackage; annule la notation de liste."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+"Indique la distribution à utiliser par défaut lors de l'installation d'un "
+"paquet si plusieurs versions sont disponibles. La valeur peut être un nom de "
+"distribution ou un numéro de version. Exemples : « stable », « testing », "
+"« &debian-stable-codename; », « &debian-testing-codename; », « 4.0 », "
+"« 5.0* ». Voir aussi &apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+"Ignore les paquets « gelés » ; cette option globale indique au système de "
+"résolution de ne pas tenir compte des paquets « gelés » dans sa prise de "
+"décision."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+"Avec cette option qui est activée par défaut, la fonctionnalité "
+"« autoclean » supprime du cache tout paquet qui ne peut plus être récupéré. "
+"Quand cette option est désactivée, les paquets qui sont installés localement "
+"sont aussi exclus du nettoyage - mais notez que APT ne fournit aucun moyen "
+"direct pour les réinstaller."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+"La valeur par défaut est « on » ce qui a pour conséquence qu'APT installera "
+"les paquets essentiels et importants dès que possible pendant les opérations "
+"d'installation ou de mise à jour, afin de limiter les conséquences d'un "
+"échec de &dpkg;. Si cette option est désactivée, APT traitera les paquets "
+"importants comme les paquets de priorité « extra » : entre la décompaction "
+"du paquet A et sa configuration, de nombreuses opérations de décompaction ou "
+"de configuration peuvent prendre place pour des paquets B ou C qui n'ont "
+"rien à voir. Si ces opérations provoquent un échec de &dpkg; (par exemple si "
+"les scripts du responsable du paquet B provoquent une erreur), le résultat "
+"est que le paquet A est décompacté mais non configuré. En conséquence, les "
+"paquets qui en dépendent pourraient ne plus fonctionner puisque leurs "
+"dépendances ne sont pas satisfaites."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+"Le marqueur de configuration immédiate est également utilisé dans le cas "
+"potentiellement délicat de dépendances circulaires, car une dépendance avec "
+"le marqueur « immediate » est équivalent à une pré-dépendance. Cela permet "
+"en théorie à APT de reconnaître le cas où il ne peut effectuer de "
+"configuration immédiate et de s'interrompre pour suggérer de désactiver "
+"temporairement l'option pour permettre aux opérations de s'effectuer. "
+"Veuillez noter l'utilisation du terme « en théorie » : en réalité, ce "
+"problème est rarement rencontré, dans des versions non stables de "
+"distributions, et était causé par des dépendances incorrectes ou par un "
+"système déjà dans un état instable. Vous ne devriez donc pas désactiver "
+"cette option sans savoir ce que vous faites car le scénario ci-dessus n'est "
+"le seul qu'elle permet d'éviter."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+"Avant qu'une opération importante comme <literal>dist-upgrade</literal> ne "
+"soit exécutée avec cette option désactivée, vous devriez essayer d'installer "
+"(<literal>install</literal>) explicitement le paquet qu'APT ne peut pas "
+"configurer immédiatement. Ne manquez toutefois pas de signaler le problème "
+"dans votre distribution et à l'équipe de maintenance d'APT avec le lien de "
+"système de gestion de bogues ci-dessous, afin qu'ils puissent améliorer ou "
+"corriger les processus de mise à jour."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+"Ne jamais activer cette option à moins que vous ne sachiez "
+"<emphasis>réellement</emphasis> ce que vous faites. Elle autorise APT à "
+"supprimer temporairement un paquet essentiel pour mettre fin à une boucle "
+"Conflicts / Conflicts ou Conflicts / Pre-Depends entre deux paquets "
+"essentiels. <emphasis>Une telle boucle ne devrait jamais se produire : c'est "
+"un bogue très important</emphasis>. Cette option fonctionne si les paquets "
+"essentiels ne sont pas <command>tar</command>, <command>gzip</command>, "
+"<command>libc</command>, <command>dpkg</command>, <command>dash</command> ou "
+"tous les paquets dont ces paquets dépendent."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+"À partir de la version 0.7.26, APT utilise un fichier de cache de taille "
+"variable indexé en mémoire (« resizable memory mapped cache file ») pour "
+"conserver les informations du fichier « available ». <literal>Cache-Start</"
+"literal> définit la taille minimale de ce cache et par conséquent la "
+"quantité de mémoire qu'APT utilisera dès son lancement. La valeur par défaut "
+"est de 20971520 octets (environ 20 Mo). Il est indispensable que l'ensemble "
+"de cette mémoire soit disponible, sinon APT ne pourra se lancer. Il peut "
+"donc être nécessaire de diminuer cette valeur sur des systèmes disposant de "
+"peu de mémoire. Au contraire, pour des systèmes qui utilisent de nombreuses "
+"sources de paquet, il peut être nécessaire de l'augmenter. La valeur de "
+"<literal>Cache-Grow</literal> définit, en octets, la quantité de mémoire "
+"supplémentaire qui peut être allouée au cache si la valeur définie par "
+"<literal>Cache-Start</literal> est insuffisante. La valeur par défaut de "
+"<literal>Cache-Grow</literal> est de 1048576 octets (environ 1 Mo). Cette "
+"augmentation se fera tant que la taille du cache sera insuffisante pour "
+"contenir toutes les informations nécessaires ou qu'elle atteint la valeur "
+"limite définie par <literal>Cache-Limit</literal>. La valeur par défaut de "
+"<literal>Cache-Limit</literal> est nulle (il n'existe donc pas de limite à "
+"la taille maximale du cache). Si <literal>Cache-Grow</literal> est égal à 0, "
+"l'augmentation automatique de la taille du cache est désactivée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+"Cette option définit les paquets qui sont considérés comme faisant partie "
+"des dépendances essentielles pour la construction de paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+"La sous-section <literal>Get</literal> contrôle l'outil &apt-get;, veuillez "
+"consulter sa documentation pour avoir plus d'informations sur les options en "
+"question."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"La sous-section <literal>Cache</literal> contrôle l'outil &apt-cache;, "
+"veuillez consulter sa documentation pour avoir plus d'informations sur les "
+"options en question."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"La sous-section <literal>CDROM</literal> contrôle l'outil &apt-cdrom;, "
+"veuillez consulter sa documentation pour avoir plus d'informations sur les "
+"options en question."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr "Le groupe Acquire"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+"Le groupe d'options <literal>Acquire</literal> contrôle le téléchargement "
+"des paquets ainsi que les différentes « méthodes d'acquisition » qui "
+"effectuent ce téléchargement (voir aussi &sources-list;)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+"Les options relatives à la sécurité sont positionnées par défaut à « true »,"
+"permettant des vérifications relatives à l'heure. Leur désactivation "
+"signifie qu'on ne peut pas faire confiance à l'heure de la machine, et APT "
+"de ce fait désactivera toutes les vérifications de ce type, telles que "
+"<option>Check-Valid-Until</option> et la vérification que le champ Date d'un "
+"fichier Release n'est pas dans le futur."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+"Durée maximale (en secondes) pendant laquelle un fichier Release est "
+"considéré comme valable, à partir du moment de sa création (tel que cela est "
+"indiqué dans l'en-tête <literal>Date</literal>). La valeur par défaut est "
+"<literal>10</literal>. Un réglage spécifique pour une archive donnée peut "
+"être défini en ajoutant l'étiquette de l'archive au nom de l'option. De "
+"préférence, le même résultat peut être obtenu pour des entrées particulières "
+"de &sources-list; en utilisant ici l'option <option>Date-Max-Future</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+"L'activation de l'option de sécurité qui permet de mettre une limite "
+"temporelle de validité au fichier Release permet d'éviter des attaques de "
+"type « replay » et permet d'éviter d'utiliser des miroirs qui ne sont plus à "
+"jour. Cependant, cette fonctionnalité a besoin que l'horloge du système soit "
+"à jour. Les gestionnaires d'archives devraient créer des fichiers Release "
+"comportant l'en-tête <literal>Valid-Until</literal>. Cependant, si cet en-"
+"tête est absent, ou si une valeur plus stricte est désirée, la valeur du "
+"paramètre <literal>Max-ValidTime</literal> est alors utilisée. L'option "
+"<option>Check-Valid-Until</option> des entrées de &sources-list; devrait "
+"être préférée pour désactiver sélectivement la vérification plutôt que "
+"d'utiliser ce remplacement global."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+"Durée maximale (en secondes) pendant laquelle un fichier Release est "
+"considéré comme valable, à partir du moment de sa création (tel que cela est "
+"indiqué dans l'en-tête <literal>Date</literal>). Si ce fichier lui-même "
+"comporte un en-tête <literal>Valid-Until</literal> la plus ancienne des deux "
+"dates est utilisée comme date d'expiration. La valeur par défaut "
+"(<literal>0</literal>) signifie « valable éternellement ». Un réglage "
+"spécifique pour une archive donnée peut être défini en ajoutant l'étiquette "
+"de l'archive au nom de l'option. De préférence, le même résultat peut être "
+"obtenu pour des entrées particulières de &sources-list; en utilisant ici "
+"l'option <option>Valid-Until-Max</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+"Durée minimale (en secondes) pendant laquelle un fichier Release est "
+"considéré comme valable, à partir du moment de sa création (tel que cela est "
+"indiqué dans l'en-tête <literal>Date</literal>). Il est conseillé d'utiliser "
+"ce réglage si vous utilisez un miroir mis à jour ponctuellement (par exemple "
+"un miroir local) d'une archive mise à jour plus fréquemment avec un en-tête "
+"<literal>Valid-Until</literal> plutôt que de désactiver complètement le "
+"contrôle des dates d'expiration. Un réglage spécifique pour une archive "
+"donnée peut être défini en ajoutant l'étiquette de l'archive au nom de "
+"l'option. De préférence, le même résultat peut être obtenu pour des entrées "
+"particulières de &sources-list; en utilisant ici l'option <option>Valid-"
+"Until-Min</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+"Permet l'utilisation de la prise en charge interne de TLS dans la méthode "
+"http. Si la valeur de l'option est « false », cela désactive totalement la "
+"prise en charge de TLS dans les méthodes propres d'Apt (à l'exclusion de la "
+"méthode https basée sur curl). Plus aucune des fonctions liées à TLS ne peut "
+"être appelée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+"Essayer de télécharger les fichiers différentiels appelés <literal>PDiffs</"
+"literal> pour les index (par exemple les fichiers <filename>Packages</"
+"filename>), plutôt que de les télécharger entièrement. Par défaut à "
+"« true ». De préférence, cela peut être défini pour des entrées "
+"particulières de &sources-list; ou des fichiers d'index en utilisant ici "
+"l'option <option>PDiffs</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+"Deux sous-options permettant de limiter l'utilisation de fichiers « pdiff » "
+"sont également disponibles. <literal>FileLimit</literal> permet d'indiquer "
+"le nombre maximal de fichiers de différences peuvent être téléchargés pour "
+"modifier un fichier. <literal>SizeLimit</literal> permet par ailleurs de "
+"limiter la taille combinée des fichiers de différences récupérés à un "
+"certain pourcentage du fichier à modifier. Si une de ces limites est "
+"dépassée, le fichier complet est téléchargé au lieu de télécharger les "
+"fichiers de différences."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+"Essayer de télécharger les index avec un URI construit à partir de la somme "
+"de hachage du fichier attendu plutôt que de les télécharger à partir d'un "
+"nom de fichier stable bien connu. Par défaut à « true », mais "
+"automatiquement désactivé si la source n'indique pas sa prise en charge. Son "
+"utilisation peut être forcée avec la valeur spéciale « force ». De "
+"préférence, cela peut être défini pour des entrées particulières de &sources-"
+"list; ou des fichiers d'index en utilisant ici l'option <option>By-Hash</"
+"option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+"Mode de file d'attente ; <literal>Queue-Mode</literal> peut prendre les "
+"valeurs <literal>host</literal> ou <literal>access</literal>, ce qui "
+"détermine comment APT parallélise les connexions sortantes. <literal>Host</"
+"literal> signifie qu'une connexion par cible sera initiée, tandis que "
+"<literal>access</literal> signifie qu'une connexion par type d'URI sera "
+"initiée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+"Nombre d'essais à effectuer. Si ce nombre n'est pas nul, APT essaie de "
+"récupérer, le nombre donné de fois, les fichiers dont la récupération a "
+"échoué."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+"Utilise des liens symboliques pour les archives de sources. Positionnée à "
+"« true », cette option crée si possible des liens symboliques vers les "
+"archives de sources au lieu de les copier. Par défaut à « true »."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+"Les options dans ces champs d'action configurent les transports "
+"d'acquisition d'APT pour les protocoles HTTP et HTTPS et sont documentées "
+"dans les pages de manuel &apt-transport-http; et &apt-transport-https; "
+"respectivement."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+"<literal>ftp::Proxy</literal> est le mandataire (proxy) FTP à utiliser par "
+"défaut pour les URI FTP. Il se présente sous la forme standard : "
+"<literal>ftp://[[user][:pass]@]host[:port]/</literal>. On peut spécifier un "
+"mandataire particulier par hôte distant en utilisant la syntaxe : "
+"<literal>ftp::Proxy::&lt;hôte&gt;</literal>. Le mot-clé spécial "
+"<literal>DIRECT</literal> indique alors de n'utiliser aucun mandataire pour "
+"l'hôte. Si aucun des paramètres précédents n'est définis, la variable "
+"d'environnement <envar>ftp_proxy</envar> annule et replace toutes les "
+"options de mandataire FTP. Pour utiliser un mandataire FTP, vous devrez "
+"renseigner l'entrée <literal>ftp::ProxyLogin</literal> dans le fichier de "
+"configuration. Cette entrée spécifie les commandes à envoyer au mandataire "
+"pour lui préciser à quoi il doit se connecter. Voyez &configureindex; pour "
+"savoir comment faire. Les variables de substitution qui représentent le "
+"composant d'URI correspondant sont : <literal>$(PROXY_USER)</literal>, "
+"<literal>$(PROXY_PASS)</literal>, <literal>$(SITE_USER)</literal>, <literal>"
+"$(SITE_PASS)</literal>, <literal>$(SITE)</literal> et <literal>$(SITE_PORT)</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+"L'option <literal>timeout</literal> positionne le compteur d'expiration du "
+"délai (timeout) utilisé par la méthode. Cela s'applique aussi bien à la "
+"connexion qu'aux données."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+"Plusieurs options de configuration sont fournies pour contrôler le mode "
+"passif. Il est généralement plus sûr d'activer le mode passif et cela marche "
+"dans presque tous les environnements. Cependant, certaines situations "
+"nécessitent que le mode passif soit désactivé et que le mode « port » de ftp "
+"soit utilisé à la place. On peut le faire globalement, pour des connexions "
+"qui passent par un mandataire ou pour une machine spécifique (examinez le "
+"modèle de fichier de configuration)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+"Il est possible de faire transiter le trafic FTP par un mandataire HTTP en "
+"positionnant la variable d'environnement <envar>ftp_proxy</envar> à une URL "
+"HTTP -- consultez la méthode http ci-dessus pour la syntaxe. On ne peut pas "
+"le faire dans le fichier de configuration et il n'est de toute façon pas "
+"recommandé d'utiliser FTP au travers de HTTP en raison de la faible "
+"efficacité de cette méthode."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+"L'option <literal>ForceExtended</literal> contrôle l'utilisation des "
+"commandes liées à la RFC 2428, <literal>EPSV</literal> et <literal>EPRT</"
+"literal>. Par défaut, elle vaut « false » ce qui signifie que ces commandes "
+"ne sont utilisées que pour une connexion de type IPv6. Quand elle vaut "
+"« true », on les utilise même si la connexion est de type IPv4. La plupart "
+"des serveurs FTP ne suivent pas la RFC 2428."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr "/cdrom/::Mount \"foo\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+"La seule option de configuration pour les URI qui utilisent la méthode "
+"<literal>cdrom</literal> est le point de montage : <literal>cdrom::Mount</"
+"literal> ; il doit représenter le point de montage du lecteur de CD-ROM (ou "
+"DVD, etc.) indiqué dans <filename>/etc/fstab</filename>. D'autres commandes "
+"de montage et de démontage peuvent être fournies quand le point de montage "
+"ne peut être listé dans le fichier <filename>/etc/fstab</filename>. "
+"Syntaxiquement, il faut placer <placeholder type=\"literallayout\" id=\"0\"/"
+"> dans le bloc <literal>cdrom</literal>. La barre oblique finale est "
+"importante. Les commandes de démontage peuvent être spécifiées en utilisant "
+"<literal>UMount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+"La seule option pour les URI GPGV est <literal>gpgv::Options</literal>, qui "
+"permet de passer des paramètres à gpgv"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr "Acquire::CompressionTypes::<replaceable>ExtensionFichier</replaceable> \"<replaceable>NomMethode</replaceable>\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+"Cette option indique la liste des types de compression comprises par les "
+"méthodes d'acquisition. Des fichiers comme <filename>Packages</filename> "
+"peuvent être disponibles dans divers formats de compression. Par défaut, les "
+"méthodes d'acquisition décompressent et recompressent dans beaucoup de "
+"formats courants les fichiers compressés comme avec <command>xz</command> et "
+"<command>gzip</command> ; ce champ d'action permet de rechercher les formats "
+"pris en charge ou de les modifier, et l'ajout de prise en charge de formats "
+"supplémentaires est aussi possible (voir aussi <option>APT::Compressor</"
+"option>). La syntaxe à utiliser est : <placeholder type=\"synopsis\" id="
+"\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+"Le sous-groupe <literal>Order</literal> peut être également utilisé pour "
+"définir l'ordre dans lequel le système d'acquisition tentera de télécharger "
+"les fichiers compressés. Le premier système mentionné sera essayé en "
+"premier, puis le suivant en cas d'échec. Ainsi, pour privilégier un format "
+"par rapport à un autre, il suffit de le placer en premier dans cette liste. "
+"Les types qui ne sont pas déjà indiqués seront ajoutés implicitement à la "
+"fin de la liste. Ainsi, par exemple, <placeholder type=\"synopsis\" id=\"0\"/"
+"> peut être utilisé pour préférer les fichiers compressés avec "
+"<command>gzip</command> par rapport à tous les autres formats de "
+"compression. Si l'objectif est d'utiliser <command>xz</command> en priorité "
+"par rapport à <command>gzip</command> et <command>bzip2</command>, ce "
+"réglage doit ressembler à <placeholder type=\"synopsis\" id=\"1\"/>. Il est "
+"inutile d'ajouter explicitement <literal>bz2</literal> à liste car il sera "
+"ajouté automatiquement."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+"Veuillez noter que <literal>Dir::Bin::<replaceable>NomMethode</replaceable></"
+"literal> sera contrôlé à l'exécution : si cette option est utilisée et que "
+"la prise en charge de ce format n'est pas construite dans APT, la méthode ne "
+"sera utilisée que si ce fichier existe. Ainsi, pour la méthode "
+"<literal>bzip2</literal>, le réglage (utilisé en interne) est <placeholder "
+"type=\"literallayout\" id=\"0\"/>. Veuillez également noter que les éléments "
+"de liste indiqués à la ligne de commande seront ajoutés à la fin de la liste "
+"indiquée dans les fichiers de configuration, mais avant les valeurs par "
+"défaut. Dans ce cas, pour établir une préférence par rapport aux types "
+"mentionnés dans les fichiers de configuration, il est possible de placer "
+"l'option directement, pas sous forme de liste. Cela ne remplacera pas la "
+"liste par défaut mais elle sera simplement préfixée avec l'option en "
+"question."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+"Le type spécial <literal>uncompressed</literal> peut servir à donner la "
+"préférence aux fichiers non compressés. Veuillez noter que la plupart des "
+"archives ne fournissent pas de fichiers non compressés, donc ce réglage est "
+"surtout destiné aux miroirs locaux."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+"Lorsque des index compressés par gzip doivent être utilisés (pour les "
+"fichiers Packages, Sources, Translations), ceux-ci seront compressés avec "
+"gzip au lieu d'être laissés décompressés. Cela peut permettre de gagner "
+"beaucoup d'espace disque au prix d'une utilisation plus importante du "
+"processeur lorsque les caches locaux sont créés. Valeur par défaut : Faux "
+"(« False »)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+"La sous-section « Languages » contrôle quels fichiers <filename>Translation</"
+"filename> sont téléchargés et dans quel ordre APT les utilisera pour "
+"afficher les traductions de descriptions. APT recherchera d'abord la "
+"première traduction disponible pour le champ Description dans la langue "
+"choisie en premier. Les langues peuvent être indiquées par leur code long ou "
+"court. Veuillez noter que tous les dépôts ne fournissent pas les fichiers "
+"<filename>Translation</filename> pour toutes les langues, les codes longs de "
+"langues étant particulièrement rares."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr "Acquire::Languages { \"environment\"; \"fr\"; \"en\"; \"none\"; \"de\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La liste par défaut contient « environment » et « en ». La valeur "
+"« environment » a une signification spéciale : elle sera remplacée, à "
+"l'exécution, par les codes de langues utilisés dans la variable "
+"d'environnement <literal>LC_MESSAGES</literal>. Les codes utilisés en double "
+"ne seront pas inclus deux fois dans la liste. Si <literal>LC_MESSAGES</"
+"literal> contient « C », seul le fichier <filename>Translation-en</filename> "
+"sera utilisé, s'il est disponible. Pour forcer APT à n'utiliser aucun "
+"fichier de traduction, il est nécessaire d'utiliser le réglage "
+"<literal>Acquire::Languages=none</literal>. La valeur « <literal>none</"
+"literal> » a une signification spéciale et indique de ne rechercher aucun "
+"fichier <filename>Translation</filename>. Cela indique à APT de télécharger "
+"ces traductions, sans nécessairement les utiliser sauf si la variable "
+"d'environnement indique ces langues. Ainsi, dans l'exemple qui suit, l'ordre "
+"utilisé sera « en, fr » si dans un environnement configuré pour l'anglais et "
+"« fr, en » pour un environnement configuré en français. Les fichiers pour "
+"l'allemand seront également téléchargés mais ne sont utilisés que dans un "
+"environnement configuré pour l'allemand. Dans ce dernier cas, l'ordre est "
+"alors « de, fr, en ». <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+"Note : afin d'éviter des problèmes lorsqu'APT est exécuté dans différents "
+"environnements (p. ex. par différents utilisateurs ou différents "
+"programmes), tous les fichiers « Translation »qui sont trouvés dans "
+"<filename>/var/lib/apt/lists/</filename> seront ajoutés à la fin de la liste "
+"(après un « <literal>none</literal> » implicite)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr "Utilisation imposée du protocole IPv4 lors des téléchargements."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr "Utilisation imposée du protocole IPv6 lors des téléchargements."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+"La taille maximale des fichiers Release/Release.gpg/InRelease. La taille par "
+"défaut est 10 Mo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+"Cette option vérifie si APT utilisera l'entrée de serveur DNS SRV telle que "
+"définie dans la RFC 2782 pour choisir un serveur alternatif auquel se "
+"connecter. La valeur par défaut est « true »."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+"Autoriser les opérations de mise à jour à charger des fichiers de données à "
+"partir de dépôts sans informations de sécurité suffisantes. La valeur par "
+"défaut est « <literal>false</literal> ». Le concept, les implications ainsi "
+"que les alternatives sont détaillés dans &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Autoriser les opérations de mise à jour à charger des fichiers de données à "
+"partir de dépôts qui fournissent des informations de sécurité, mais qui ne "
+"sont plus considérés comme suffisamment robustes sur le plan de la "
+"cryptographie. La valeur par défaut est « <literal>false</literal> ». Le "
+"concept, les implications ainsi que les alternatives sont détaillés dans "
+"&apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Permettre qu'un dépôt qui était auparavant signé par pgp devienne non signé "
+"durant l'opération de la mise à jour. Quand il n'y a pas de signature "
+"valable pour un ancien dépôt de confiance, APT refusera la mise à jour. "
+"Cette option peut être utilisée pour contourner cette protection. Vous ne "
+"souhaiterez presque certainement jamais activer cette option. La valeur pas "
+"défaut est « <literal>false</literal> ». Le concept, les implications ainsi "
+"que les alternatives sont détaillés dans &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr "champ d'action"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+"La récupération des journaux des modifications n'est possible que si l'URI "
+"où les télécharger est connu. De préférence, le fichier Release l'indique "
+"dans un champ « Changelogs ». S'il n'est pas disponible, les champs Label ou "
+"Origine du fichier Release sont utilisés pour vérifier si les options "
+"<literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</replaceable></"
+"literal> ou <literal>Acquire::Changelogs::URI::Origin::<replaceable>ORIGINE</"
+"replaceable></literal> existent, et si c'est le cas, cette valeur est prise. "
+"La valeur dans le fichier Release peut être contournée par <literal>Acquire::"
+"Changelogs::URI::Override::Label::<replaceable>LABEL</replaceable></literal> "
+"ou <literal>Acquire::Changelogs::URI::Override::Origin::"
+"<replaceable>ORIGINE</replaceable></literal>. La valeur devrait être un URI "
+"normal vers un fichier texte, à l'exception que les données spécifiques du "
+"paquet sont remplacées par le paramètre <literal>@CHANGEPATH@</literal>. Sa "
+"valeur est la suivante : 1. si le paquet provient d'un composant (par "
+"exemple <literal>main</literal>) il constitue la première partie, sinon elle "
+"est omise ; 2. est la première lettre du nom du paquet source, sauf si le "
+"nom du paquet source commence par <literal>lib</literal> auquel cas les "
+"quatre premières lettres seront utilisées ; 3. le nom complet du paquet "
+"source ; 4. le nom complet une fois de plus ; 5. la version de la source. "
+"Les quatres premières parties (ou trois si le composant est absent) sont "
+"séparées par des barres obliques (« <literal>/</literal> »), et les deux "
+"dernières sont séparées par un caractère de soulignement (« <literal>_</"
+"literal> »). La valeur spéciale « <literal>no</literal> » est disponible "
+"pour indiquer que cette source ne peut être utilisée pour récupérer les "
+"fichiers changelog. Dans ce cas, une autre source sera essayée."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr "Configuration spécifique d'exécutable"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+"Particulièrement avec l'introduction de l'exécutable <command>apt</command> "
+"il peut être utile de configurer certaines options seulement pour un "
+"exécutable particulier dans la mesure ou même des options qui semblent "
+"affecter seulement certains binaires telles que <option>APT::Get::Show-"
+"Versions</option> affectent <command>apt-get</command> autant "
+"qu'<command>apt</command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+"La configuration d'une option pour un exécutable particulier peut être "
+"réalisée en réglant l'option dans le champ d'action <option>Binary::"
+"<replaceable>exécutable-spécifique</replaceable></option>. Affecter l'option "
+"<option>APT::Get::Show-Versions</option> à <command>apt</command> seulement "
+"peut être fait, par exemple en configurant plutôt <option>Binary::apt::APT::"
+"Get::Show-Versions</option>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+"Veuillez noter que comme cela est indiqué dans la section DESCRIPTION plus "
+"haut, il n'est pas possible de configurer les options spécifiques aux "
+"exécutables en ligne de commande ni dans des fichiers de configuration "
+"chargés par la ligne de commande."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr "Les répertoires"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+"Les répertoires de la section <literal>Dir::State</literal> concernent le "
+"système local. <literal>lists</literal> est le répertoire où placer les "
+"listes de paquets téléchargés et <literal>status</literal> est le nom du "
+"fichier d'état de &dpkg;. <literal>preferences</literal> concerne APT : "
+"c'est le nom du fichier <filename>preferences</filename>. <literal>Dir::"
+"State</literal> contient le répertoire par défaut préfixé à tous les sous-"
+"éléments, quand ceux-ci ne commencent pas par <filename>/</filename> ou "
+"<filename>./</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+"<literal>Dir::Cache</literal> contient les emplacements qui renseignent sur "
+"le cache local : par exemple, les deux caches de paquets "
+"<literal>srcpkgcache</literal> et <literal>pkgcache</literal>, ainsi que "
+"l'endroit où sont placées les archives téléchargées, <literal>Dir::Cache::"
+"archives</literal>. On peut empêcher la création des caches en positionnant "
+"<literal>pkgcache</literal> ou <literal>srcpkgcache</literal> à la valeur "
+"<literal>\"\"</literal>. Cela ralentit le démarrage mais économise de "
+"l'espace disque. Il vaut mieux se passer du cache <literal>pkgcache</"
+"literal> plutôt que se passer du cache <literal>srcpkgcache</literal>. Comme "
+"pour <literal>Dir::State</literal>, le répertoire par défaut est contenu "
+"dans <literal>Dir::Cache</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+"<literal>Dir::Etc</literal> contient l'emplacement des fichiers de "
+"configuration, <literal>sourcelist</literal> indique l'emplacement de la "
+"liste de sources et <literal>main</literal> est le fichier de configuration "
+"par défaut (le modifier n'a aucun effet, à moins qu'on ne le modifie avec le "
+"fichier de configuration indiqué par la variable <envar>APT_CONFIG</envar>)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+"<literal>Dir::Parts</literal> lit, par ordre d'entrée, tous les fragments de "
+"configuration dans le répertoire indiqué. Ensuite, le fichier principal de "
+"configuration est chargé."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+"Les programmes binaires sont pointés par <literal>Dir::Bin</literal>. "
+"L'emplacement des gestionnaires de méthodes est indiqué par <literal>Dir::"
+"Bin::Methods</literal> ; <literal>gzip</literal>, <literal>bzip2</literal>, "
+"<literal>lzma</literal>, <literal>dpkg</literal>, <literal>apt-get</"
+"literal>, <literal>dpkg-source</literal>, <literal>dpkg-buildpackage</"
+"literal> et <literal>apt-cache</literal> indiquent l'emplacement des "
+"programmes correspondants."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+"L'option de configuration <literal>RootDir</literal> a une signification "
+"particulière. Lorsqu'elle est définie, tous les chemins sont considérés "
+"relativement à <literal>RootDir</literal>, <emphasis>même les chemins "
+"spécifiés de manière absolue</emphasis>. Ainsi par exemple si "
+"<literal>RootDir</literal> est défini comme <filename>/tmp/staging</"
+"filename>, et que chemin du fichier d'état <literal>Dir::State::status</"
+"literal> est déclaré comme <filename>/var/lib/dpkg/status</filename> alors "
+"ce fichier sera cherché dans <filename>/tmp/staging/var/lib/dpkg/status</"
+"filename>. Si vous souhaitez seulement préfixer des chemins relatifs, "
+"définissez plutôt <literal>Dir</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+"La liste <literal>Ignore-Files-Silently</literal> permet d'indiquer quels "
+"sont les fichiers qu'APT peut ignorer sans avertissement dans les "
+"répertoires contenant des fragments de configuration. Par défaut, les "
+"fichiers qui se terminent par <literal>.disabled</literal>, <literal>~</"
+"literal>, <literal>.bak</literal> ou <literal>.dpkg-[a-z]+</literal> sont "
+"ignorés. Comme cela est visible dans le dernier élément de cette liste, il "
+"est possible d'utiliser la syntaxe des expressions rationnelles."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr "APT et DSelect"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+"Quand APT est utilisé comme une méthode de &dselect;, plusieurs directives "
+"contrôlent le comportement par défaut. On les trouve dans la section "
+"<literal>DSelect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+"Mode de nettoyage du cache ; cette variable peut prendre l'une des valeurs "
+"suivantes : « <literal>always</literal> », « <literal>prompt</literal> », "
+"« <literal>auto</literal> », « <literal>pre-auto</literal> » et "
+"« <literal>never</literal> ». « <literal>always</literal> » et "
+"« <literal>prompt</literal> » suppriment tous les paquets du cache après la "
+"mise à niveau ; « <literal>prompt</literal> » (valeur par défaut) les "
+"supprime après une demande et « <literal>auto</literal> » ne supprime que "
+"les archives qui ne peuvent plus être téléchargées (remplacées, par exemple, "
+"par une nouvelle version). « <literal>pre-auto</literal> » les supprime "
+"avant de récupérer de nouveaux paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+"Le contenu de cette variable est passé comme options de ligne de commande à "
+"&apt-get; lors de la phase d'installation."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+"Le contenu de cette variable est passé comme options de ligne de commande à "
+"&apt-get; lors de la phase de mise à jour."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+"Si cette option est « true », l'opération [U]pdate de &dselect; interroge "
+"toujours l'utilisateur avant de continuer. Par défaut, ce n'est qu'en cas "
+"d'erreur que l'on propose à l'utilisateur d'intervenir."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr "Méthode d'appel de &dpkg; par APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+"Plusieurs directives de configuration contrôlent la manière dont APT invoque "
+"&dpkg; : elles figurent dans la section <literal>DPkg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+"Il s'agit d'une liste d'options à passer à &dpkg;. Les options doivent être "
+"déclarées en utilisant la notation de liste et chaque élément de la liste "
+"est passé comme un seul paramètre à &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+"Il s'agit d'une chaîne qui définit la variable d'environnement <envar>PATH</"
+"envar> utilisée lors de l'exécution de dpkg. Elle peut être définie à "
+"n'importe quelle valeur valable pour cette variable d'environnement ou être "
+"une chaîne vide, dans ce cas la variable n'est pas modifiée."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+"Il s'agit d'une liste de commandes shell à exécuter avant ou après l'appel "
+"de &dpkg;. Tout comme pour <literal>Options</literal>, on doit utiliser la "
+"notation de liste. Les commandes sont appelées dans l'ordre, en utilisant "
+"<filename>/bin/sh</filename> : APT s'arrête dès que l'une d'elles échoue."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+"Il s'agit d'une liste de commandes shell à exécuter avant d'appeler &dpkg;. "
+"Tout comme pour <literal>Options</literal>, on doit utiliser la notation de "
+"liste. Les commandes sont appelées dans l'ordre, en utilisant <filename>/bin/"
+"sh</filename> : APT s'arrête dès que l'une d'elles échoue. APT transmet aux "
+"commandes les noms de tous les fichiers .deb qu'il va installer, à raison "
+"d'un par ligne sur le descripteur de fichier demandé, par défaut sur "
+"l'entrée standard."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+"La version 2 de ce protocole envoie plus d'informations à travers le "
+"descripteur du fichier requis : une ligne avec le texte <literal>VERSION 2</"
+"literal>, l'espace de configuration d'APT et une liste d'actions de paquet "
+"avec le nom de fichier et l'information de version."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+"Chaque ligne de directive de configuration a la forme <literal>clé=valeur</"
+"literal>. Les caractères spéciaux (signes égal, fin de ligne, caractères non "
+"imprimables, guillemets et signe pourcentage dans <literal>clé</literal> et "
+"fin de ligne, caractères non imprimables et signe pourcentage dans "
+"<literal>valeur</literal>) sont %-encodés (encodage URL). Les listes sont "
+"représentés par des lignes <literal>clé::=valeur</literal> multiples avec la "
+"même clé. Les sections de la configuration se terminent par une ligne vide."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+"Les lignes d'action de paquet consistent en cinq champs dans la version 2 : "
+"le nom du paquet (sans qualification d'architecture, même si c'est une "
+"architecture supplémentaire – « foreign »), la version ancienne, la "
+"direction du changement de version (&lt; pour les mises à niveau, &gt; pour "
+"les retours en arrière, = pour pas de modification), la nouvelle version, "
+"l'action. Les champs versions sont « - » pour pas de version du tout (par "
+"exemple lors de la première installation d'un paquet ; pas de version est "
+"traité comme antérieur à n'importe quelle version réelle, ainsi c'est une "
+"mise à jour, indiquée comme <literal>- &lt; 1.23.4</literal>). Le champ "
+"action est « **CONFIGURE** » si le paquet est en cours de configuration, "
+"« **REMOVE** » s'il est en cours de suppression, ou bien le nom d'un "
+"fichier .deb s'il est en cours de dépaquetage."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+"Dans la Version 3, après chaque champ version, se trouve l’architecture de "
+"cette version qui est « - » s'il n'y a pas de version, puis un champ "
+"montrant le type MultiArch « same », « foreign », « allowed » ou « none ». "
+"Veuillez noter que « none » est un nom de type incorrect qui est juste "
+"conservé pour des raisons de compatibilité, il devrait être lu comme « no » "
+"et les utilisateurs sont encouragés à prendre en charge les deux."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+"La version du protocole qu'il faut utiliser pour la commande "
+"<literal><replaceable>cmd</replaceable></literal> peut être choisie en "
+"réglant <literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::"
+"Version</literal> en conséquence, la version par défaut étant la première. "
+"Si APT ne gère pas la version demandée, il enverra les informations dans la "
+"version la plus haute qu'il gère."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+"Le descripteur de fichier à utiliser pour l'envoi des informations peut être "
+"demandé avec l'option <literal>DPkg::Tools::options::<replaceable>cmd</"
+"replaceable>::InfoFD</literal> qui est par défaut <literal>0</literal> comme "
+"entrée standard ; l'option est disponible depuis la version 0.9.11. La prise "
+"en charge de l'option peut être détectée en regardant la variable "
+"d'environnement <envar>APT_HOOK_INFO_FD</envar> qui contient comme "
+"confirmation le numéro du descripteur de fichier utilisé."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+"APT se place dans ce répertoire avant d'appeler &dpkg; ; par défaut, c'est "
+"le répertoire <filename>/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+"Ces options sont passées à &dpkg-buildpackage; lors de la compilation des "
+"paquets ; par défaut la signature est désactivée et tous les binaires sont "
+"créés."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+"Si cette option est choisie, APT lancera <command>dpkg --configure --"
+"pending</command> pour laisser &dpkg; gérer les configurations de paquets et "
+"les actions différées. Cette option est automatiquement activée. Il peut par "
+"contre être utile de la désactiver pour lancer APT plusieurs fois "
+"successives, par exemple quand il est utilisé depuis un outil "
+"d'installation. Dans ce cas, seul le dernier de tous les appels successifs "
+"peut conserver l'option active."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr "Options « Periodic » et « Archive »"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+"Les groupes d'options <literal>APT::Periodic</literal> et <literal>APT::"
+"Archive</literal> configurent les comportements périodiques réalisés par le "
+"script <literal>/usr/lib/apt/apt.systemd.daily</literal>, lancé "
+"quotidiennement."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr "Les options de débogage"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+"Les options de la section <literal>Debug::</literal> servent soit à "
+"provoquer l'affichage d'informations de débogage sur la sortie d'erreur "
+"standard du programme qui utilise les bibliothèques APT, soit à activer des "
+"modes de fonctionnement spéciaux qui sont principalement utiles pour "
+"déboguer le comportement de <literal>APT</literal>. La plupart de ces "
+"options n'ont pas d'intérêt pour un utilisateur normal, mais certaines "
+"peuvent tout de même être utiles :"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+"<literal>Debug::pkgProblemResolver</literal> affiche d'intéressantes "
+"informations sur les décisions prises par les commandes <literal>dist-"
+"upgrade, upgrade, install, remove et purge</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+"<literal>Debug::NoLocking</literal> désactive le verrouillage de fichier de "
+"manière à ce qu'APT puisse effectuer quelques opérations (telles que "
+"<literal>apt-get -s install</literal>) sans avoir les privilèges du "
+"superutilisateur."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+"<literal>Debug::pkgDPkgPM</literal> affiche la ligne de commande à chaque "
+"appel de &dpkg;."
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> désactive l'inclusion de données de "
+"type statfs dans les identifiants de CD."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr "Liste complète des options de débogage de APT :"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+"Affiche les informations concernant les sources de type <literal>cdrom://</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+"Affiche les informations concernant le téléchargement de paquets par FTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+"Affiche les informations concernant le téléchargement de paquets par HTTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr "Print information related to downloading packages using HTTPS."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+"Affiche les informations relatives à la vérification de signatures "
+"cryptographiques avec <literal>gpg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+"Affiche des informations concernant l'accès aux collections de paquets "
+"stockées sur CD."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+"Décrit le processus de résolution des dépendances pour la construction de "
+"paquets source ( « build-dependencies » ) par &apt-get;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+"Affiche toutes les clés de hachage cryptographiques créées par les "
+"librairies d'<literal>apt</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+"Désactive l'inclusion des données de type <literal>statfs</literal> pour la "
+"génération des identifiants de CD, c'est-à-dire le nombre de blocs libres et "
+"utilisés sur le système de fichier du CD."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+"Désactive le verrouillage de fichiers. Cela permet par exemple de lancer "
+"deux instances de <quote><literal>apt-get update</literal></quote> en même "
+"temps."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+"Trace les ajouts et suppressions d'éléments de la queue globale de "
+"téléchargement."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+"Affiche les détails de la vérification des sommes de contrôle et des "
+"signatures cryptographiques des fichiers téléchargés, ainsi que les erreurs "
+"éventuelles."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+"Affiche les informations de téléchargement et de prise en compte des "
+"fichiers différentiels des indexes de paquets, ainsi que les erreurs "
+"éventuelles."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+"Affiche les détails de l'application des fichiers de différences aux listes "
+"de paquets d'APT quand ces fichiers de différences sont téléchargés à la "
+"place des fichiers complets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+"Affiche toutes les interactions avec les processus enfants qui se chargent "
+"effectivement des téléchargements."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+"Affiche les changements concernant le marquage des paquets comme installés "
+"automatiquement, et la suppression des paquets inutiles."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+"Crée les informations de débogage décrivant quels paquets sont installés "
+"automatiquement pour satisfaire les dépendances. Cela concerne la passe "
+"initiale d'installation automatique effectuée par exemple par <literal>apt-"
+"get install</literal> et pas le système de résolution de dépendances complet "
+"de APT ; voir <literal>Debug::pkgProblemResolver</literal> pour ce dernier."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+"Crée les informations de débogage décrivant quels paquets sont gardés/"
+"installés/supprimés pendant le travail de l'outil de résolution de "
+"problèmes. Chaque ajout ou suppression peut impliquer des actions "
+"supplémentaires ; elles sont alors indiquées avec une indentation de deux "
+"espaces de plus que l'action qui les a déclenchées. Le format de chaque "
+"ligne est <literal>MarkKeep</literal>, <literal>MarkDelete</literal> ou "
+"<literal>MarkInstall</literal> suivi de <literal>nom-paquet &lt;a.b.c -&gt; "
+"d.e.f | x.y.z&gt; (section)</literal> où <literal>a.b.c</literal> est la "
+"version actuelle du paquet, <literal>d.e.f</literal> la version devant être "
+"installée et <literal>x.y.z</literal> une version plus récente qui n'est pas "
+"prévue pour être installée (à cause d'un score plus faible). Ces deux "
+"derniers éléments peuvent ne pas être mentionnés s'ils ne sont pas "
+"pertinents où lorsque ils sont identiques à la version installée. "
+"<literal>section</literal> est le nom de la section où figure le paquet."
+"automatiquement pour satisfaire les dépendances. Cela concerne la passe "
+"initiale d'installation automatique effectuée par exemple par <literal>apt-"
+"get install</literal> et pas le système de résolution de dépendances complet "
+"de APT ; voir <literal>Debug::pkgProblemResolver</literal> pour ce dernier."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+"Affiche la commande exacte d'invocation de &dpkg; à chaque appel ; les "
+"paramètres sont séparés par des espaces."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+"Affiche l'ensemble des informations reçues de &dpkg; par l'intermédiaire du "
+"descripteur de fichier d'état, et les éventuelles erreurs d'analyse de ce "
+"fichier."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+"Affiche les étapes de l'algorithme utilisé pour choisir l'ordre dans lequel "
+"<literal>apt</literal> passe les paquets à &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr "Affiche le détail des opérations liées à l'invocation de &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr "Affiche, au lancement, la priorité de chaque liste de paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+"Affiche la trace d'exécution du système de résolution de dépendances (ne "
+"concerne que les cas où un problème de dépendances complexe se présente)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+"Affiche la liste de tous les paquets installés avec leur score calculé par "
+"l'outil de résolution de problèmes. La description du paquet est celle qui "
+"est décrite dans <literal>Debug::pkgDepCache::Marker</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+"Affiche les fournisseurs déclarés dans le fichier <filename>/etc/apt/vendors."
+"list</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+"Affiche les commandes externes qui sont appelés par le point d'entrée apt. "
+"Cela inclut par exemple les options de configuration <literal>DPkg::{Pre,"
+"Post}-Invoke</literal> ou <literal>APT::Update::{Pre,Post}-Invoke</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Exemples"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+"Le fichier &configureindex; contient un modèle de fichier montrant des "
+"exemples pour toutes les options existantes."
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "Fichier de contrôle des préférences pour APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"Le fichier d'APT, <filename>/etc/apt/preferences</filename> et les fichiers "
+"fragments situés dans le dossier <filename>/etc/apt/preferences.d/</"
+"filename>, peuvent être utilisés pour choisir la version des paquets que "
+"l'on veut installer."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Quand le fichier &sources-list; contient des références à plusieurs "
+"distributions (par exemple, <literal>stable</literal> et <literal>testing</"
+"literal>), plusieurs versions d'un paquet peuvent être installées. APT "
+"affecte une priorité à chaque version disponible. La commande <command>apt-"
+"get</command>, tenant compte des contraintes de dépendance, installe la "
+"version qui possède la priorité la plus haute. Le fichier "
+"<filename>preferences</filename> annule les priorités assignées par défaut "
+"aux versions des paquets : ainsi l'utilisateur peut choisir la version qu'il "
+"veut installer."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Si le fichier &sources-list; contient, pour une même distribution, des "
+"références à plusieurs sites de téléchargement, il peut exister plusieurs "
+"exemplaires de la même version d'un paquet. Dans ce cas, <command>apt-get</"
+"command> télécharge l'exemplaire qui apparaît en premier dans le fichier "
+"&sources-list;. Le fichier <filename>preferences</filename> n'influe pas sur "
+"le choix des exemplaires, seulement sur le choix de la version."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"Les préférences sont un outil puissant pour les administrateurs système mais "
+"peuvent devenir leur pire cauchemar si elles sont utilisées sans "
+"précautions. APT ne remettra pas en doute les réglages choisis. Des valeurs "
+"erronées pourront alors conduire à des paquets non installables ou à des "
+"décisions incorrectes lors de la mise à jour des paquets. Des problèmes "
+"supplémentaires peuvent survenir si des distributions multiples sont "
+"mélangées sans une bonne compréhension des paragraphes qui suivent."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"Veuillez noter que les fichiers du répertoire <filename>/etc/apt/preferences."
+"d</filename> sont analysés par ordre alphanumérique ascendant, doivent avoir "
+"l'extension \"<literal>pref</literal>\" ou aucune extension et ne peuvent "
+"contenir que des caractères alphanumériques, des tirets (-), des caractères "
+"de soulignement (_) et des points (.). Dans le cas contraire, APT affichera "
+"un avertissement indiquant qu'il a ignoré un fichier si celui-ci ne "
+"correspond par à un motif défini dans <literal>Dir::Ignore-Files-Silently</"
+"literal> (les fichiers correspondant à cette variable de configuration "
+"étant, eux, ignorés silencieusemennt)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "Priorités affectées par défaut"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>paquet</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"Quand le fichier des préférences n'existe pas, ou quand aucune entrée de ce "
+"fichier ne s'applique à une version précise, la priorité affectée à cette "
+"version est la priorité de la distribution à laquelle elle appartient. On "
+"peut distinguer une distribution et lui donner une priorité plus haute que "
+"celle des autres distributions : on l'appelle la distribution par défaut ou "
+"« target release » et elle peut être définie sur la ligne de commande de "
+"<command>apt-get</command> ou dans le fichier de configuration d'APT, "
+"<filename>/etc/apt/apt.conf</filename>. Par exemple : <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Quand une distribution par défaut a été indiquée, APT utilise l'algorithme "
+"suivant pour déterminer la priorité des versions d'un paquet :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "priorité 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"pour les versions issues d'archives dont le fichier <filename>Release</"
+"filename> comporte la mention « NotAutomatic: yes » mais <emphasis>pas</"
+"emphasis> « ButAutomaticUpgrades: yes » comme l'archive "
+"<literal>experimental</literal> de Debian."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "une priorité égale à 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"pour les versions issues d'archives dont le fichier <filename>Release</"
+"filename> comporte la mention « NotAutomatic: yes » et "
+"« ButAutomaticUpgrades: yes » comme l'archive des rétroportages de Debian "
+"depuis <literal>squeeze-backports</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "une priorité égale à 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that do not belong to the target release."
+msgstr ""
+"est affectée aux versions qui n'appartiennent pas à la distribution par "
+"défaut."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "une priorité égale à 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that belong to the target release."
+msgstr ""
+"est affectée aux versions qui appartiennent à la distribution par défaut."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+"La priorité la plus élevée dont la description correspond à la version est "
+"affectée à la version."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Quand aucune distribution par défaut n'a été indiquée, APT affecte "
+"simplement une priorité égale à 100 à toute version installée d'un paquet et "
+"une priorité égale à 500 à tout version non installée. Cela à l'exception "
+"des versions issues des archives qui ont la mention « NotAutomatic: yes » "
+"dans leur fichier <filename>Release</filename>, qui auront alors une "
+"priorité égale à 1 ou à 100 si elles sont également marquées avec "
+"« ButAutomaticUpgrades: yes »."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"Puis APT applique les règles suivantes pour déterminer la version du paquet "
+"qu'il faut installer (par ordre de priorité) :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Ne jamais revenir en arrière, sauf si la priorité d'une version disponible "
+"dépasse 1000. « Revenir en arrière » signifie installer une version moins "
+"récente que la version installée. Il faut noter qu'aucune des priorités par "
+"défaut n'excède 1000 ; de telles valeurs ne peuvent être définies que dans "
+"le fichier des préférences. Notez aussi qu'il est risqué de revenir en "
+"arrière."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "Installer la version qui possède la priorité la plus haute."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Quand deux (ou plus) versions ont la même priorité, installer la version la "
+"plus récente (c.-à-d. celle dont le numéro de version est le plus grand)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"Quand deux (ou plus) versions ont la même priorité et le même numéro de "
+"version, mais soit les paquets diffèrent par certaines métadonnées, soit "
+"l'option <literal>--reinstall</literal> a été donnée, installer la version "
+"qui n'est pas installée."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"En général, la version installée d'un paquet (priorité 100) n'est pas aussi "
+"récente que les versions disponibles dans les sources listées dans le "
+"fichier &sources-list; (priorité 500 ou 990). Et donc le paquet sera mis à "
+"niveau avec la commande : <command>apt-get install <replaceable>paquet</"
+"replaceable></command> ou <command>apt-get dist-upgrade</command>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"La version installée d'un paquet peut être - rarement - <emphasis>plus</"
+"emphasis> récente que tout autre version disponible. Les commandes "
+"<command>apt-get install <replaceable>paquet</replaceable></command> ou "
+"<command>apt-get upgrade</command> ne provoquent pas de retour en arrière."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"Parfois, la version installée d'un paquet est plus récente que la version "
+"appartenant à la distribution par défaut, mais moins récente que la version "
+"appartenant à une autre distribution. Une telle version sera mise à niveau "
+"par les commandes <command>apt-get install <replaceable>paquet</"
+"replaceable></command> ou <command>apt-get upgrade</command> car au moins "
+"<emphasis>l'une</emphasis> des versions disponibles possède une plus haute "
+"priorité que celle de la version installée."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "Conséquences des préférences"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"Le fichier des préférences permet à l'administrateur système de contrôler "
+"l'affectation des priorités. Ce fichier est constitué d'une ou plusieurs "
+"entrées séparées par des lignes blanches. Ces entrées peuvent avoir deux "
+"formes, une forme particulière et une forme générale."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"La forme particulière affecte une priorité (<emphasis>Pin-Priority</"
+"emphasis>) à un paquet précis, à une version précise ou à un intervalle "
+"spécifiant plusieurs versions. Par exemple, l'entrée suivante affecte une "
+"priorité haute à toutes les versions du paquet <filename>perl</filename> "
+"dont le numéro de version commence par <literal>&good-perl;</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"La forme générale affecte une priorité à toutes les versions d'un paquet "
+"dans une distribution donnée (c'est-à-dire, à toutes les versions d'un "
+"paquet qui sont listées dans un fichier <filename>Release</filename>), ou à "
+"toutes les versions d'un paquet provenant d'un site Internet identifié par "
+"un nom complètement qualifié."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Cette forme générale des entrées du fichier des préférences s'applique "
+"seulement aux groupes de paquets. Par exemple, l'entrée suivante affecte une "
+"priorité haute à toutes les versions disponibles dans le site local."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"Il est important de noter que le mot-clé utilisé ici est « <literal>origin</"
+"literal> » qui peut servir à indiquer un nom d'hôte. Dans l'exemple qui "
+"suit, une haute priorité est donnée à toutes les versions disponibles sur le "
+"serveur identifié par le nom d'hôte « ftp.de.debian.org »."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"Veuillez noter que le mot-clé utilisé ici, <literal>origin</literal>, ne "
+"doit pas être confondu avec l'Origine d'une distribution indiquée dans un "
+"fichier <filename>Release</filename>. Ce qui suit l'étiquette « Origin: » "
+"dans un fichier <filename>Release</filename> n'est pas une adresse Internet "
+"mais le nom d'un auteur ou d'un distributeur, comme « Debian » ou « Ximian »."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"L'entrée suivante affecte une priorité basse à toutes les versions d'un "
+"paquet appartenant à toute distribution dont le nom d'« Archive » est "
+"<literal>unstable</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"L'entrée suivante affecte une priorité haute à toutes les versions d'un "
+"paquet appartenant à toute distribution dont le nom de code est "
+"<literal>&debian-testing-codename;</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"L'entrée suivante affecte une priorité haute à toutes les versions d'un "
+"paquet appartenant à toute distribution dont le nom d'« Archive » est "
+"<literal>stable</literal> et dont le numéro de « Version » est "
+"<literal>&debian-stable-version;</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+"L'effet de l'opérateur virgule est identique à un « and » logique : toutes "
+"les conditions doivent être satisfaites pour que l'épinglage corresponde. Il "
+"existe une exception : pour chaque type de condition (telles que deux "
+"conditions « a »), seule la dernière condition est vérifiée."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "Expressions régulières et syntaxe &glob;"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"APT gére également l'épinglage (« pinning ») avec des expressions &glob; et "
+"des expressions régulières entourées par des barres obliques. Par exemple, "
+"l'exemple qui suit affecte une priorité de 500 à tous les paquets "
+"d'experimental dont le nom commence par gnome (en tant qu'expression de type "
+"&glob;) ou contient le mot kde (sous format d'une expression régulière POSIX "
+"étendue, entourée de barres obliques)."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"La règle pour ces expressions est qu'elles peuvent prendre place dès que la "
+"chaîne correspondante est trouvée. Ainsi, l'épinglage qui suit affecte une "
+"priorité de 990 à tous les paquets d'une version de distribution commençant "
+"par &ubuntu-codename;."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"Si une expression régulière est rencontrée dans un champ <literal>Package</"
+"literal>, le comportement sera celui qui aurait eu lieu si cette expression "
+"était remplacée par la liste de tous les paquets auxquels elle correspond. "
+"Il n'est pas encore décidé si cela sera conservé dans le futur : il est donc "
+"conseillé d'utiliser des épinglages avec caractères génériques en premier "
+"afin qu'ils soient remplacés par des épinglages plus spécifiques. Le motif "
+"« <literal>*</literal> » dans un champ Package n'est pas considéré comme une "
+"expression &glob; en soi."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "Méthode d'interprétation des priorités par APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"Les priorités (P) indiquées dans le fichier des préférences doivent être des "
+"entiers positifs ou négatifs. Ils sont interprétés à peu près comme suit :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"cette priorité entraîne l'installation du paquet même s'il s'agit d'un "
+"retour en arrière."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"la version sera installée, même si elle n'appartient pas à la distribution "
+"par défaut ; mais elle ne sera pas installée si la version installée est "
+"plus récente."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"La version sera installée, sauf s'il existe une version appartenant à la "
+"distribution par défaut ou si la version installée est plus récente."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"la version sera installée, sauf s'il existe une version appartenant à une "
+"autre distribution ou si la version installée est plus récente."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr "la version sera installée si aucune version du paquet n'est installée."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "cette priorité empêche l'installation de la version."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr "P = 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr "a un comportement indéfini, ne pas l'utiliser."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"La première entrée de forme particulière correspondant à une version "
+"disponible de paquet détermine la priorité de la version du paquet. S'il "
+"n'en existe pas, la priorité du paquet est définie comme la plus haute de "
+"toutes les priorités par les entrées de forme générale correspondant à la "
+"version. Les entrées définies en utilisant des motifs dans le champ Pin "
+"autre que « * » sont traitées comme des entrées de forme générale."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Supposons par exemple que le fichier des préférences contienne les trois "
+"entrées décrites ci-dessous :"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "Alors :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"La version la plus récente du paquet <literal>perl</literal> sera installé "
+"pour autant que son numéro de version commence par <literal>&good-perl;</"
+"literal>. Si l'<emphasis>une</emphasis> des versions &good-perl;* existe et "
+"si la version installée est une version &bad-perl;*, il y aura un retour en "
+"arrière."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Les versions des paquets (autres que <literal>perl</literal>) disponibles "
+"dans le site local ont priorité sur les autres versions, même celles "
+"appartenant à la distribution par défaut."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"La version d'un paquet dont l'origine n'est pas le site local mais un site "
+"Internet mentionné dans &sources-list; et qui appartient à une distribution "
+"<literal>unstable</literal>, ne sera installée que si aucune version du "
+"paquet n'est déjà installée."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr ""
+"Détermination de la version des paquets et des propriétés des distributions"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"Chaque source indiquée dans le fichier &sources-list; doit fournir les "
+"fichiers <filename>Packages</filename> et <filename>Release</filename> qui "
+"décrivent les paquets disponibles à cet endroit."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"Le fichier <filename>Packages</filename> se trouve normalement dans le "
+"répertoire <filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>, par exemple, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. Il consiste en entrées composées de lignes, une pour "
+"chaque paquet disponible dans le répertoire. Seules deux lignes des entrées "
+"sont pertinentes pour la détermination des priorités :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "la ligne <literal>Package:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "donne le nom du paquet"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "la ligne <literal>Version:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "donne le numéro de version du paquet"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"Le fichier <filename>Release</filename> se trouve normalement dans le "
+"répertoire <filename>.../dists/<replaceable>nom-distribution</replaceable></"
+"filename>, par exemple, <filename>.../dists/stable/Release</filename>, ou "
+"<filename>.../dists/&debian-stable-codename;/Release</filename>. Il consiste "
+"en une seule entrée composée de plusieurs lignes qui s'applique à "
+"<emphasis>tous</emphasis> les paquets situés dans les répertoires sous le "
+"répertoire parent. Contrairement au fichier <filename>Packages</filename>, "
+"presque toutes les lignes du fichier <filename>Release</filename> sont "
+"pertinentes pour déterminer les priorités :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "La ligne <literal>Archive:</literal> ou <literal>Suite:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"nomme l'archive à laquelle appartiennent tous les paquets situés dans les "
+"répertoires. Par exemple, la ligne <literal>Archive: stable</literal> "
+"indique que tous les paquets dans les répertoires situés sous le répertoire "
+"parent du fichier <filename>Release</filename> appartiennent à l'archive "
+"<literal>stable</literal>. Indiquer cette valeur dans le fichier des "
+"préférences demanderait cette ligne :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "la ligne <literal>Codename:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"indique le nom de code auquel appartiennent tous les paquets situés dans les "
+"répertoires. Par exemple, la ligne <literal>Codename: &debian-testing-"
+"codename;</literal> indique que tous les paquets dans les répertoires situés "
+"sous le répertoire parent du fichier <filename>Release</filename> "
+"appartiennent à la version portant le nom de code <literal>&debian-testing-"
+"codename;</literal>. Indiquer cette valeur dans le fichier des préférences "
+"demanderait cette ligne :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"indique la version de la distribution. Par exemple, les paquets dans les "
+"répertoires peuvent appartenir à la distribution Debian version &debian-"
+"stable-version;. Il n'y a pas de numéro de version pour les distributions "
+"<literal>testing</literal> et <literal>unstable</literal> car elles n'ont "
+"pas encore été publiées. Indiquer cette valeur dans le fichier des "
+"préférences demanderait ces lignes :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "La ligne <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"nomme un composant qui indique le type de licence associée aux paquets "
+"situés dans les répertoires sous le fichier <filename>Release</filename>. "
+"Par exemple, la ligne <literal>Component: main</literal> indique que tous "
+"les exemplaires dans les répertoires appartiennent au composant "
+"<literal>main</literal>, c'est-à-dire que leur licence est en accord avec "
+"les Directives Debian pour le logiciel libre. Indiquer ce composant dans le "
+"fichier des préférences demanderait cette ligne :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "La ligne <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"nomme l'origine des paquets situés dans les répertoires sous le fichier "
+"<filename>Release</filename>. En général, c'est <literal>Debian</literal>. "
+"Indiquer cette origine dans le fichier des préférences demanderait cette "
+"ligne :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "La ligne <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"indique une étiquette pour les paquets qui se trouvent dans les répertoires "
+"sous le fichier <filename>Release</filename>. En général, c'est "
+"<literal>Debian</literal>. Indiquer cette origine dans le fichier des "
+"préférences demanderait cette ligne :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Tous les fichiers <filename>Packages</filename> et <filename>Release</"
+"filename> récupérés dans des sources indiquées dans le fichier &sources-"
+"list; sont conservés dans le répertoire <filename>/var/lib/apt/lists</"
+"filename> ou dans le fichier spécifié par la variable <literal>Dir::State::"
+"Lists</literal> dans le fichier <filename>apt.conf</filename>. Par exemple, "
+"le fichier <filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-"
+"i386_Release</filename> contient le fichier <filename>Release</filename> du "
+"site <literal>debian.lcs.mit.edu</literal>, architecture <literal>binary-"
+"i386</literal> et composant <literal>contrib</literal> de la distribution "
+"<literal>unstable</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "Lignes facultatives dans le fichier des préférences"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"Toute entrée du fichier des préférences peut commencer par une ou plusieurs "
+"lignes contenant le mot <literal>Explanation:</literal>. Cela permet des "
+"commentaires."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "Méthode pour suivre Stable"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Ne pas installer des exemplaires d'origine Debian\n"
+"Explanation: sauf ceux de la distribution stable\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Le fichier des préférences suivant affecte une priorité plus haute que la "
+"priorité par défaut (500) à tous les exemplaires appartenant à la "
+"distribution <literal>stable</literal> et une priorité prohibitivement basse "
+"à tous les exemplaires appartenant à d'autres distributions <literal>Debian</"
+"literal>. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>paquet</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Avec le fichier des préférences ci-dessus et un fichier &sources-list; "
+"adéquat, les commandes suivantes utiliseront les versions les plus récentes "
+"de <literal>stable</literal> pour faire la mise à niveau : <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>paquet</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La commande suivante utilisera la version la plus récente de la distribution "
+"<literal>testing</literal> pour mettre à niveau le paquet spécifié ; "
+"cependant les mises à niveau ultérieures du paquet ne se feront pas à moins "
+"de relancer la commande. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "Méthode pour suivre Testing ou Unstable"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Le fichier des préférences suivant affecte une priorité haute aux versions "
+"des paquets appartenant à la distribution <literal>testing</literal>, une "
+"priorité moindre aux versions appartenant à la distribution "
+"<literal>unstable</literal> et une priorité prohibitivement basse aux "
+"versions appartenant à d'autres distributions <literal>Debian</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Avec un fichier &sources-list; approprié et le fichier des préférences ci-"
+"dessus, les commandes suivantes utiliseront les versions les plus récentes "
+"de <literal>testing</literal> pour faire la mise à niveau : <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>paquet</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La commande suivante utilisera la version la plus récente de la distribution "
+"<literal>unstable</literal> pour mettre à niveau le paquet spécifié ; Par la "
+"suite, <command>apt-get upgrade</command> mettra le paquet à jour avec la "
+"plus récente version dans <literal>testing</literal> si elle est plus "
+"récente que la version installée ou avec la plus récente version dans "
+"<literal>unstable</literal> si elle est plus récente que la version "
+"installée. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "Suivre l'évolution d'une version par son nom de code"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Ne pas installer des exemplaires d'origine Debian\n"
+"Explanation: sauf ceux de la distribution &debian-testing-codename; ou sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable porte toujours le nom sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Le fichier des préférences suivant affecte une priorité plus haute que la "
+"priorité par défaut (500) à tous les exemplaires appartenant à la version "
+"portant le nom de code indiqué et une priorité prohibitivement basse à tous "
+"les exemplaires appartenant à d'autres distributions <literal>Debian</"
+"literal>. Veuillez noter qu'avec ce fichier de préférences, APT suivra la "
+"transformation d'une version <literal>testing</literal> en <literal>stable</"
+"literal> puis <literal>oldstable</literal>. Si, au contraire, vous souhaitez "
+"suivre la version <literal>testing</literal>, vous devriez utiliser un des "
+"exemples précédents. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Avec le fichier des préférences ci-dessus et un fichier &sources-list; "
+"adéquat, les commandes suivantes utiliseront les versions les plus récentes "
+"de <literal>&debian-testing-codename;</literal> pour faire la mise à "
+"niveau : <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>paquet</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"La commande suivante utilisera la version la plus récente de la distribution "
+"<literal>sid</literal> pour mettre à niveau le paquet spécifié ; Par la "
+"suite, <command>apt-get upgrade</command> mettra le paquet à jour avec la "
+"plus récente version dans <literal>&debian-testing-codename;</literal> si "
+"elle est plus récente que la version installée ou avec la plus récente "
+"version dans <literal>sid</literal> si elle est plus récente que la version "
+"installée. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "Liste des sources de données APT configurées"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"Le fichier de liste de sources <filename>/etc/apt/sources.list</filename> et "
+"les fichiers contenus dans <filename>/etc/apt/sources.list.d/</filename> "
+"sont conçus pour pouvoir gérer un nombre quelconque de sources actives et de "
+"médias. Le fichier donne une source par ligne (One-Line style) ou fournit "
+"des paragraphes multilignes définissant une ou plusieurs sources par "
+"paragraphe (style deb822), avec les sources prioritaires en premier (dans le "
+"cas où il y a une seule version disponible à partir de plus d'une source). "
+"L'information relative aux sources configurées est récupérée par la commande "
+"<command>apt-get update</command> (ou par une commande équivalente avec une "
+"autre interface à APT)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"Le répertoire <filename>/etc/apt/sources.list.d</filename> permet de "
+"spécifier des sources de paquets dans des fichiers distincts. Deux formats "
+"de fichiers différents sont permis comme cela est décrit dans les deux "
+"sections suivantes. Les noms de fichier doivent se terminer par <filename>."
+"list</filename> ou par <filename>.sources</filename> selon le format fourni. "
+"Ils ne peuvent contenir que des lettres (a-z et A-Z), des chiffres (0-9), "
+"des caractères de soulignement (_), des tirets (-) et des points (.). Dans "
+"le cas contraire, APT affichera un avertissement indiquant qu'il a ignoré un "
+"fichier si celui-ci ne correspond par à un motif défini dans <literal>Dir::"
+"Ignore-Files-Silently</literal> (les fichiers correspondant à cette variable "
+"de configuration étant, eux, ignorés silencieusement)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr "Format One-Line-Style"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+"Les entrées individuelles ne peuvent pas se poursuivre sur la ligne "
+"suivante. Les lignes vides sont ignorées et un caractère <literal>#</"
+"literal> n'importe où sur une ligne signale que le reste de la ligne est un "
+"commentaire. Par conséquent, une entrée peut être désactivée en commentant "
+"la totalité de la ligne. Si plusieurs options doivent être fournies, elles "
+"sont séparées par des espaces et sont entourées toutes ensembles par des "
+"crochets (<literal>[]</literal>) inclus sur la ligne après le type séparé "
+"par un espace. Si une option permet plusieurs valeurs, elles sont séparées "
+"les unes des autres par une virgule (<literal>,</literal>). Un nom d'option "
+"est séparé de ses options par une signe égal (<literal>=</literal>). Des "
+"options à plusieurs valeurs disposent aussi des séparateurs <literal>-=</"
+"literal> et <literal>+=</literal>, qui, au lieu de remplacer la valeur par "
+"défaut par la ou les valeurs données, modifient la ou les valeurs par défaut "
+"pour supprimer ou inclure les valeurs données."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+"Il s'agit du format traditionnel, géré par toute les version de APT. "
+"Veuillez noter que toutes les options décrites plus bas ne sont pas prises "
+"en charge par toutes les versions d'APT. Notez aussi que certaine des plus "
+"anciennes applications qui analysent ce format elles-mêmes ne s'attendent "
+"pas à rencontrer des options qui étaient rares avant l'introduction de la "
+"prise en charge multi-architecture."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr "Format deb822-Style"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+"Les fichiers dans ce format possèdent l'extension <filename>.sources</"
+"filename>. La syntaxe du format est similaire à celle des autres fichiers "
+"utilisés par Debian et ses dérivés, comme les fichiers de métadonnées qu'APT "
+"télécharge des sources configurées ou le fichier <filename>debian/control</"
+"filename> d'un paquet source de Debian. Les entrées individuelles sont "
+"séparées par une ligne vide ; les lignes vides supplémentaires sont ignorées "
+"et un caractère <literal>#</literal> en début de ligne signale la ligne "
+"comme un commentaire. Une entrée, par conséquent, peut être désactivée en "
+"commentant chaque ligne appartenant au paragraphe, mais il est "
+"habituellement plus facile d'ajouter le champ « Enabled: no » au paragraphe "
+"pour désactiver l'entrée. Retirer ce champ ou le définir à « yes » le "
+"réactive. Les options ont la même syntaxe que tous les autres champs : un "
+"nom de champ séparé par le caractère deux-points (<literal>:</literal>) et "
+"éventuellement des valeurs séparées par des espaces. Veuillez noter "
+"particulièrement que des valeurs multiples sont séparées par des espacements "
+"(espaces, tabulations ou nouvelles lignes) et non par des virgules comme "
+"dans le format « One-Line ». Les champs multivaleurs comme "
+"<literal>Architectures</literal> disposent aussi des options "
+"<literal>Architectures-Add</literal> et <literal>Architectures-Remove</"
+"literal> pour modifier la valeur par défaut plutôt que de la remplacer."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+"Il s'agit d'un nouveau format pris en charge par APT lui-même depuis la "
+"version 1.1. Les versions précédentes ignorent ce type de fichier avec un "
+"message d'avertissement tel que décrit précédemment. L'objectif est de faire "
+"de ce format le format par défaut, et de rendre obsolète le format « One-"
+"Line-Style » décrit plus haut, parce qu'il est plus facile à créer, à "
+"étendre et à modifier pour les humains comme pour les machines, surtout s'il "
+"inclut beaucoup de sources et/ou d'options. Les développeurs qui travaillent "
+"avec les sources apt ou les analysent sont fortement encouragés à ajouter la "
+"prise en charge de ce format et à prendre contact avec l'équipe APT pour "
+"coordonner et partager ce travail. Les utilisateurs sont libres d'adopter "
+"déjà ce format, mais peuvent se confronter à des problèmes avec les "
+"logiciels qui ne le gèrent pas encore."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr "Les types deb et deb-src : format général"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"Le type <literal>deb</literal> décrit une archive Debian classique à deux "
+"niveaux, <filename>distribution/composant</filename>. <literal>distribution</"
+"literal> peut prendre l'une des valeurs suivantes : un nom de suite tel que "
+"<literal>stable</literal> ou <literal>testing</literal> ou bien un nom de "
+"code comme <literal>&debian-stable-codename;</literal> ou <literal>&debian-"
+"testing-codename;</literal>, alors que composant prend les valeurs : "
+"<literal>main</literal>, <literal>contrib</literal> ou <literal>non-free</"
+"literal>. Le type <literal>deb-src</literal> décrit une archive de "
+"distribution de code source pour une distribution Debian dans le même format "
+"que le type <literal>deb</literal>. Une ligne <literal>deb-src</literal> est "
+"nécessaire pour récupérer les index des sources."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"Le format de deux entrées du genre « One-Line-Style » utilisant les types "
+"<literal>deb</literal> et <literal>deb-src</literal> est :"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+"Autrement, l'entrée équivalente de style deb822 ressemble à ceci : "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"L'URI de type <literal>deb</literal> doit indiquer la base de la "
+"distribution Debian dans laquelle APT trouvera les informations dont il a "
+"besoin. <literal>suite</literal> peut spécifier le chemin exact : dans ce "
+"cas, on doit omettre les composants et <literal>suite</literal> doit se "
+"terminer par une barre oblique (<literal>/</literal>). C'est utile quand "
+"seul un sous-répertoire particulier de l'archive décrite par cet URI est "
+"intéressant. Quand <literal>suite</literal> n'indique pas un chemin exact, "
+"un <literal>composant</literal> au moins doit être présent."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>suite</literal> peut aussi contenir une variable <literal>$(ARCH)</"
+"literal>, qui sera remplacée par l'architecture Debian (comme "
+"<literal>amd64</literal> ou <literal>armel</literal>) sur laquelle s'exécute "
+"le système. On peut ainsi utiliser un fichier <filename>sources.list</"
+"filename> qui ne dépend pas d'une architecture. En général, ce n'est "
+"intéressant que si l'on indique un chemin exact ; sinon <literal>APT</"
+"literal> crée automatiquement un URI en fonction de l'architecture effective."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"Particulièrement lorsqu'on utilise le format « One-Line-Style », puisqu'on "
+"ne peut indiquer qu'une seule distribution par ligne, il peut être "
+"nécessaire de disposer le même URI sur plusieurs lignes quand on veut "
+"accéder à un sous-ensemble des distributions ou composants disponibles à "
+"cette adresse. APT trie les URI après avoir crée pour lui-même la liste "
+"complète ; il regroupe les références multiples au même hôte Internet en vue "
+"d'une connexion unique et il évite ainsi, par exemple, d'établir une "
+"connexion FTP, de la fermer, faire autre chose, puis d'établir encore cette "
+"connexion. Cette fonctionnalité permet l'accès à des sites FTP surchargés "
+"qui limitent le nombre de connexions simultanées pour les utilisateurs "
+"anonymes. APT parallélise aussi les connexions à différents hôtes pour tirer "
+"plus efficacement parti des sites à faible bande passante."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"Il est important d'indiquer les sources par ordre de préférence, la source "
+"principale apparaissant en premier. Un tri est fait, de la plus rapide à la "
+"plus lente ; par exemple, un CD suivi par les hôtes d'un réseau local, puis "
+"les hôtes distants."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr "&sourceslist-list-format;"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr "&sourceslist-sources-format;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"À titre d'exemple, les sources de votre distribution au format « One-Line-"
+"Style » pourraient ressembler à ceci : <placeholder type=\"literallayout\" "
+"id=\"0\"/> ou à ceci au format de style deb822 : <placeholder type="
+"\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr "Les types deb et deb-src : options"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+"Chaque entrée de source peut avoir des options spécifiées pour modifier la "
+"source à laquelle accéder et comment les données y sont récupérées. Le "
+"format, la syntaxe et les noms des options peuvent être différents entre le "
+"format « One-Line-Style » et le format de style deb822, mais les mêmes "
+"options sont disponibles dans les deux formats. Pour simplifier, nous "
+"listons les noms de champ avec deb822 et fournissons le nom « One-Line » "
+"entre parenthèses. Il faut se souvenir que en plus du réglage explicite des "
+"options multi-valeurs, il y a aussi l'option de les modifier en se basant "
+"sur les valeurs par défaut, mais nous ne listons pas ces noms explicitement "
+"ici. Les options non prises en charge sont ignorées par toutes les version "
+"d'APT."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<option>Architectures</option> (<option>arch</option>) est une option "
+"multivaleur pour définir les architectures pour lesquelles l'information "
+"doit être téléchargée. Si cette option n'est pas utilisée, l'option par "
+"défaut est toutes les architectures définies par l'option de configuration "
+"<literal>APT::Architectures</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<option>Languages</option> (<option>lang</option>) est une option "
+"multivaleur pour définir les langues pour lesquelles les informations, "
+"telles que les descriptions de paquet traduites, doivent être téléchargées. "
+"Si cette option n'est pas utilisée, l'option par défaut est toutes les "
+"langues définies par l'option de configuration <option>Acquire::Languages</"
+"option>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+"<option>Targets</option> (<option>target</option>) est une option "
+"multivaleur pour définir les cibles qu'apt essaiera d’acquérir à partir de "
+"cette source. Si cette option n'est pas spécifiée, la configuration par "
+"défaut est définie par le champ d'action de configuration <option>Acquire::"
+"IndexTargets</option> (les cibles sont définies par leur nom dans le champ "
+"<literal>Created-By</literal>). De plus, les cibles peuvent être activées ou "
+"désactivées en utilisant le champ <literal>Identifier</literal> comme option "
+"avec une valeur booléenne plutôt que d'utiliser cette option multivaleur."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+"<option>PDiffs</option> (<option>pdiffs</option>) est une valeur yes/no qui "
+"contrôle si APT doit essayer d'utiliser PDiffs pour mettre à jour des index "
+"anciens plutôt que de télécharger les nouveaux index en totalité. La valeur "
+"de cette option est ignorée si le dépôt n'annonce pas la disponibilité de "
+"PDiffs. Elle a, par défaut, la valeur de l'option du même nom pour un "
+"fichier particulier défini dans le champ d'action <option>Acquire::"
+"IndexTargets</option>, qui prend lui-même par défaut la valeur de l'option "
+"de configuration <option>Acquire::PDiffs</option>, dont la valeur par défaut "
+"est <literal>yes</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+"<option>By-Hash</option> (<option>by-hash</option>)peut avoir la valeur "
+"<literal>yes</literal>, <literal>no</literal> ou <literal>force</literal> et "
+"contrôle si APT doit essayer d’acquérir des index grâce à un URI construit à "
+"partir de la somme de hachage du fichier attendu plutôt que d'utiliser le "
+"nom de fichier de stable bien connu de l'index. Son utilisation peut éviter "
+"des décalages de somme de hachage, mais nécessite un miroir de prise en "
+"charge. Une valeur <literal>yes</literal> ou <literal>no</literal> active ou "
+"désactive l'utilisation de cette fonctionnalité si cette source indique sa "
+"prise en charge, tandis que <literal>force</literal> activera la "
+"fonctionnalité quel que soit ce que la source indique. Elle a, par défaut, "
+"la valeur de l'option du même nom pour un fichier particulier défini dans le "
+"champ d'action <option>Acquire::IndexTargets</option>, qui prend lui-même "
+"par défaut la valeur de l'option de configuration <option>Acquire::By-Hash</"
+"option>, dont la valeur par défaut est <literal>yes</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+"Par ailleurs, si certaines options sont définies, elles affectent "
+"<emphasis>toutes</emphasis> les sources avec les mêmes URI et Suite, et donc "
+"doivent être définies sur toutes ces entrées et ne peuvent être modifiées "
+"entre les différents composants. APT essaiera de détecter et provoquera une "
+"erreur avec de telles anomalies."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) et <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) sont des valeurs booléennes dont la valeur par défaut est "
+"<literal>no</literal>. Si elles sont définies à <literal>yes</literal>, "
+"elles contournent certains éléments d'&apt-secure; et par conséquent ne "
+"devraient pas utilisées à la légère."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+"<option>Trusted</option> (<option>trusted</option>) comporte trois valeurs "
+"d'état qui définissent par défaut si APT décide de considérer une source "
+"comme sûre ou doit lancer un avertissement avant qu'un paquet soit, par "
+"exemple, installé à partir de cette source. Cette option peut être utilisée "
+"pour outrepasser cette décision. La valeur <literal>yes</literal> dit à APT "
+"de considérer cette source comme sûre, même si elle échoue au test "
+"d'authentification. Elle désactive des éléments d'&apt-secure; et elle ne "
+"devrait être utilisée que dans un contexte local et sécurisé si possible, "
+"parce qu'autrement elle ouvre une brèche dans la sécurité. La valeur "
+"<literal>no</literal> fait le contraire et fait que la source est traitée "
+"comme non sûre, même si les tests d'authentification sont réussis. La valeur "
+"par défaut ne peut pas être définie explicitement."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+"<option>Signed-By</option> (<option>signed-by</option>) est une option pour "
+"demander la vérification d’un dépot par &apt-secure; avec un certain jeu de "
+"clés plutôt qu’avec la totalité des clés de confiance configurées par apt. "
+"Elle est définie comme une liste de chemins absolus vers des fichiers de "
+"trousseau de clés (qui doivent être accessibles en lecture pour "
+"l'utilisateur <literal>_apt</literal>, et donc, il faut s'assurer que tout "
+"le monde a le droit de lecture sur le fichier) et des empreintes de clés à "
+"sélectionner dans ces trousseaux. Si aucun fichier de clés n’est défini, le "
+"trousseau <filename>trusted.gpg</filename> et tous les trousseaux du "
+"répertoire <filename>trusted.gpg.d/</filename> sont sélectionnés par défaut "
+"(voir <command>apt-key fingerprint</command>). Si aucune empreinte n’est "
+"définie, toutes les clés des trousseaux sont sélectionnées. Une empreinte "
+"acceptera aussi toutes les signatures de sous clés de cette clé, et si ce "
+"n’est pas désiré, un point d’exclamation (<literal>!</literal>) peut être "
+"ajouté à l’empreinte pour désactiver ce comportement. Elle possède la valeur "
+"par défaut de l'option du même nom si elle a été définie dans le fichier "
+"<filename>Release</filename> de ce dépôt récupéré auparavant (seules des "
+"empreintes peuvent être définies par ce biais). Autrement, toutes les clés "
+"des trousseaux de confiance sont considérées comme des signatures valables "
+"pour ce dépôt."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) est "
+"une valeur yes/no qui détermine si APT doit tenter de détecter les attaques "
+"par replay. Un créateur de dépôt peut déclarer une période pendant laquelle "
+"les données fournies par le dépôt peuvent être considérées comme valables, "
+"une fois ce délai échu, et si les données n'ont pas été fournies, elles sont "
+"considérées comme expirées, et un message d'erreur est envoyé. En plus "
+"d'accroître la sécurité, puisqu'un attaquant malveillant ne peut plus "
+"envoyer des données anciennes pour empêcher un utilisateur de mettre à "
+"niveau vers une nouvelle version, elle facilite l'identification de miroirs "
+"qui ne sont plus mis à jour. Néanmoins, certains dépôts, comme les archives "
+"historiques ne sont plus mis à jour à dessein, aussi cette vérification peut "
+"être désactivée en réglant cette option à <literal>no</literal>. Elle "
+"possède la valeur par défaut de l'option <option>Acquire::Check-Valid-Until</"
+"option> qui elle-même possède la valeur <literal>yes</literal> par défaut."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) et "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) peuvent "
+"être utilisées pour augmenter ou diminuer la durée, en secondes pendant "
+"laquelle les données de ce dépôt sont considérées comme valables. -Max peut "
+"être particulièrement utile pour définir une valeur propre si le dépôt ne "
+"fournit pas de champ Valid-Until dans son fichier Release, tandis que -Min "
+"peut être utilisé pour augmenter la durée de validité sur des miroirs "
+"(locaux), rarement mis à jour, d'une archive plus fréquemment mise à jour "
+"mais moins accessible (qui est aussi dans le sources.list), plutôt que de "
+"désactiver totalement la vérification. Elle possède la valeur par défaut des "
+"options de configuration <option>Acquire::Min-ValidTime</option> et "
+"<option>Acquire::Max-ValidTime</option> qui toutes les deux ne sont pas "
+"définies par défaut."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+"<option>Check-Date</option> (<option>check-date</option>) est une valeur yes/"
+"no qui contrôle si APT doit considérer que la date de la machine est "
+"correcte et donc effectuer les vérifications liées au temps, comme vérifier "
+"si le fichier Release n'est pas dans le futur. Sa désactivation désactive "
+"l'option <option>Check-Valid-Until</option> mentionnée ci-dessus."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) contrôle "
+"jusqu'où un dépôt peut être dans le futur. Elle possède la valeur del'option "
+"de configuration <option>Acquire::Max-FutureTime</option> qui est par défaut "
+"de 10 secondes."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) détermine "
+"le chemin du fichier InRelease, relativement à la position normale d'un "
+"fichier <filename>InRelease</filename>. Par défaut, cette option n'est pas "
+"définie et APT cherchera à récupérer un fichier <filename>InRelease</"
+"filename> ou, s'il échoue, un fichier <filename>Release</filename> et le "
+"fichier <filename>Release.gpg</filename> associé. Si cette option est "
+"définie, le chemin spécifié sera essayé à la place du fichier InRelease, et "
+"le repli vers les fichiers <filename>Release</filename> sera désactivé."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr "Spécification des URI"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "Les types d'URI actuellement reconnus sont :"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr "(&apt-transport-http;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+"Le procédé http précise un serveur HTTP pour une archive et c'est la méthode "
+"la plus couramment utilisée. L'URI peut inclure directement les information "
+"de connexion si l'archive le requiert, mais l'utilisation de &apt-authconf; "
+"devrait être préférée. La méthode prend également en charge SOCKS5 et les "
+"mandataires HTTP(S) configurés soit au moyen d'une configuration spécifique "
+"à apt ou spécifiés par la variable d'environnement <envar>http_proxy</envar> "
+"au format <replaceable>http://user:pass@server:port/</replaceable> (en "
+"supposant un mandataire HTTP nécessitant une authentification). Les détails "
+"de l'authentification pour les mandataires peuvent aussi être fournis avec "
+"&apt-authconf;."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+"Veuillez noter que ces formes d'authentification ne sont pas sûres puisque "
+"toutes les communications avec le serveur distant (ou le mandataire) ne sont "
+"pas chiffrées, donc un attaquant suffisamment compétent peut observer et "
+"enregistrer la connexion ainsi que les autres interactions. L'attaquant ne "
+"peut <emphasis>pas</emphasis> modifier la communication dans la mesure où le "
+"modèle de sécurité des données d'Apt est indépendant de la méthode de "
+"transport choisie. Voir &apt-secure; pour plus de détails."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr "(&apt-transport-https;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+"Le procédé https précise un serveur HTTPS pour une archive et il est très "
+"semblable au procédé http en termes d'utilisation et d'options disponibles. "
+"La principale différence est que les communications entre apt et le serveur "
+"(ou le mandataire) sont chiffrées. Veuillez noter que le chiffrage n'empêche "
+"pas un attaquant de savoir avec quel serveur (ou mandataire) apt est en "
+"communication et que des analyses approfondies peuvent encore "
+"potentiellement révéler quelles données sont téléchargées. Si cela est une "
+"préoccupation, des procédés basés sur Tor, mentionnés plus bas, pourraient "
+"être une alternative appropriée."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr "procédé"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr "(&apt-transport-mirror;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+"Le procédé miroir définit la localisation d'une liste de miroirs. Par "
+"défaut, le procédé utilisé par la localisation est <literal>http</literal>, "
+"mais n'importe quel autre procédé peut être utilisé avec la commande "
+"<command>mirror+<replaceable>scheme</replaceable></command>. La liste de "
+"miroirs elle-même peut contenir plusieurs URI de miroirs différentes que le "
+"client APT peut, de façon transparente, repérer, choisir et sur lesquelles "
+"se rabattre, afin d'aider à la fois à répartir la charge sur les miroirs "
+"disponibles et à garantir que les clients puissent récupérer les données "
+"même si certains des miroirs configurés ne sont pas disponibles."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"Le procédé <literal>file</literal> permet qu'un répertoire arbitraire au "
+"sein du système de fichiers soit considéré comme une archive. Cela est "
+"utilisé avec les montages NFS, les miroirs et les archives locaux."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"Le procédé <literal>cdrom</literal> permet l'utilisation d'un lecteur de CD, "
+"de DVD ou USB, avec la possibilité de changer de média. Utilisez le "
+"programme &apt-cdrom; pour créer des entrées <literal>cdrom</literal> dans "
+"la liste des sources."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+"Le procédé <literal>ftp</literal> indique un serveur FTP comme archive. "
+"L'utilisation de FTP décline en faveur de <literal>http</literal> et "
+"<literal>https</literal> et plusieurs archives soit n'ont jamais offert "
+"d'accès FTP, soit le retirent. Si vous avez encore besoin de cette méthode, "
+"plusieurs options de configuration sont disponibles dans le champ d'action "
+"<literal>Acquire::ftp</literal> et détaillées dans &apt-conf;."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"Veuillez noter qu'on peut spécifier un mandataire FTP en utilisant la "
+"variable d'environnement <envar>ftp_proxy</envar>. On peut aussi spécifier "
+"un mandataire HTTP (les serveurs mandataires HTTP comprennent souvent les "
+"URL FTP) en utilisant cette méthode et <emphasis>seulement</emphasis> cette "
+"méthode. Les mandataires qui utilisent HTTP et qui sont spécifiés dans le "
+"fichier de configuration seront ignorés."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"Le procédé <literal>copy</literal> est identique au procédé <literal>file</"
+"literal> excepté que les paquets sont copiés dans le cache du répertoire au "
+"lieu d'être utilisés directement depuis leur emplacement. Ce réglage peut "
+"servir aux utilisateurs qui se servent d'un support amovible pour recopier "
+"des fichiers avec APT."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"Le procédé rsh/ssh utilise rsh/ssh pour se connecter à une machine distante "
+"et pour accéder aux fichiers en tant qu'un certain utilisateur. Il est "
+"recommandé de régler préalablement les hôtes distants (rhosts) ou les clés "
+"RSA. Les commandes standard <command>find</command> et <command>dd</command> "
+"sont utilisées pour l'accès aux fichiers de la machine distante."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "ajout de types d'URI supplémentaires reconnus"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"APT peut être complété avec des méthodes supplémentaires fournies par des "
+"paquets optionnels dont le schéma de nommage est <literal>apt-transport-"
+"<replaceable>méthode</replaceable></literal>. Ainsi, l'équipe de maintenance "
+"d'APT gère un paquet <package>apt-transport-tor</package> qui gère les "
+"méthodes d'accès par URI de type HTTP et HTTPS routées à travers le réseau "
+"Tor."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"Utiliser l'archive stockée localement (ou montée via NFS) dans /home/apt/"
+"debian pour stable/main, stable/contrib et stable/non-free."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/apt/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+"Comme ci-dessus, excepté que cette ligne utilise la distribution "
+"« unstable » (développement)."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr "Indication des sources pour les lignes précédentes."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"La première ligne récupère l'information des paquets pour les architectures "
+"de <literal>APT::Architectures</literal> alors que la deuxième récupère "
+"<literal>amd64</literal> et <literal>armel</literal>."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"Utiliser HTTP pour accéder à l'archive située à archive.debian.org, et "
+"n'utiliser que la section hamm/main."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"Utiliser FTP pour accéder à l'archive située à ftp.debian.org, dans le "
+"répertoire debian, et n'utiliser que la section &debian-stable-codename;/"
+"contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"Utiliser FTP pour accéder à l'archive située à ftp.debian.org, dans le "
+"répertoire debian, et n'utiliser que la section unstable/contrib. Si cette "
+"ligne et celle de l'exemple précédent dans <filename>sources.list</filename> "
+"apparaissent, une seule session FTP sera utilisée pour les deux lignes."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Utiliser HTTP pour accéder à l'archive située à ftp.tlh.debian.org, dans le "
+"répertoire universe, et n'utiliser que les fichiers trouvés dans "
+"<filename>unstable/binary-i386</filename> pour les machines i386, dans "
+"<filename>unstable/binary-amd64</filename> pour les machines amd64 et ainsi "
+"de suite pour les autres architectures reconnues. [Notez que cet exemple "
+"montre seulement la manière d'utiliser la variable à substituer, les "
+"archives Debian officielles n'étant pas structurées de cette manière.] "
+"<placeholder type=\"literallayout\" id=\"0\"/> <placeholder type="
+"\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+"Utiliser HTTP pour pouvoir obtenir les paquets binaires ainsi que les "
+"sources des suites stable, testing et unstable et des composants main et "
+"contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"Outil d'extraction des textes et fichiers de configuration pour "
+"<command>debconf</command> contenu dans un paquet Debian"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>Apt-extracttemplates</command> prend un ou plusieurs paquets Debian "
+"en paramètre et extrait (dans un répertoire temporaire) tous les scripts et "
+"guides de configuration associés. Pour chaque paquet traité contenant des "
+"scripts et guides de configuration, une ligne est affichée au format "
+"suivant :"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "paquet version guide-de-configuration script-de-configuration"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"Les scripts et guides de configuration sont écrits dans le répertoire "
+"temporaire indiqué par l'option <option>-t</option> ou <option>--tempdir</"
+"option> (<literal>APT::ExtractTemplates::TempDir</literal>) ; les noms de "
+"fichier sont de la forme <filename>package.template.XXXXXX</filename> ou "
+"<filename>package.config.XXXXXX</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"Répertoire temporaire dans lequel écrire les scripts de configuration et "
+"modèles d'écrans pour <command>debconf</command>. Élément de configuration : "
+"<literal>APT::ExtractTemplates::TempDir</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command> retourne zéro si tout se passe bien, "
+"le nombre 100 en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "Outil de tri des index de paquets."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>Apt-sortpkgs</command> prend un index (un index de Source ou un "
+"index de paquet) et trie leurs enregistrements selon le nom de paquet. Un "
+"tri des champs de chaque enregistrement est réalisé selon des règles "
+"internes."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"Le résultat est envoyé sur la sortie standard ; l'entrée doit être un "
+"fichier analysable."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"Utiliser un index de sources pour le tri des champs. Élément de "
+"configuration : <literal>APT::SortPkgs::Source</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> retourne zéro si tout se passe bien ou 100 "
+"en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "Outil de création de fichiers d'index"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> est l'outil en ligne de commande qui crée "
+"les index dont APT se sert pour accéder aux sources des distributions. Un "
+"index doit être créé pour un site et basé sur le contenu de ce site."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+"<command>apt-ftparchive</command> est un ensemble comprenant le programme "
+"&dpkg-scanpackages; et toutes ses fonctionnalités via la commande "
+"<literal>packages</literal> ; il comprend aussi un générateur de fichier "
+"« Contents », la commande <literal>contents</literal>, et une technique "
+"élaborée pour automatiser le processus de création d'une archive complète."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+"<command>Apt-ftparchive</command> peut utiliser lui-même des bases de "
+"données binaires pour « cacher » le contenu d'un fichier .deb ; il n'a pas "
+"besoin de programmes extérieurs, sauf &gzip;. Lors d'une exécution, il "
+"vérifie les changements dans les fichiers et crée les fichiers compressés "
+"voulus."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+"La commande packages crée un fichier « Packages » à partir d'une "
+"arborescence. Elle recherche récursivement à travers le répertoire donné les "
+"fichiers .deb et, pour chaque fichier trouvé, envoie une entrée pour ce "
+"paquet sur la sortie standard. Cette commande est approximativement "
+"équivalente à &dpkg-scanpackages;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+"On peut se servir de l'option <option>--db</option> pour demander un cache "
+"binaire."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+"La commande <literal>sources</literal> crée un index des sources à partir "
+"d'une arborescence. Elle recherche récursivement à travers le répertoire "
+"donné les fichiers .dsc et, pour chaque fichier trouvé, envoie une entrée "
+"pour ce paquet sur la sortie standard. Cette commande est approximativement "
+"équivalente à &dpkg-scansources;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+"Quand on précise un fichier « override », c'est un fichier source avec une "
+"extension .src qui est recherché. On peut se servir de l'option --source-"
+"override pour changer de fichier source d'« override »."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+"La commande <literal>contents</literal> crée un fichier « Contents » à "
+"partir d'une arborescence. Elle recherche récursivement à travers le "
+"répertoire donné les fichiers .deb et, pour chaque fichier trouvé, lit la "
+"liste des fichiers. Elle trie la liste des fichiers correspondant à des "
+"paquets et l'envoie sur la sortie standard. Les répertoires ne font pas "
+"partie du résultat. Quand un fichier appartient à plusieurs paquets, une "
+"virgule sépare les paquets."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+"La commande <literal>release</literal> crée un fichier Release à partir "
+"d'une arborescence. Elle recherche récursivement dans le répertoire indiqué "
+"des fichiers <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> et "
+"<filename>icons</filename> non compressés et compressés ainsi que des "
+"fichiers <filename>Release</filename>, <filename>Index</filename> et "
+"<filename>md5sum.txt</filename> par défaut (<literal>APT::FTPArchive::"
+"Release::Default-Patterns</literal>). Des motifs supplémentaires pour les "
+"noms de fichiers peuvent être ajoutés en les mentionnant dans <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. Le fichier <filename>Release</"
+"filename> est ensuite affiché sur la sortie standard et comporte (par "
+"défaut) des sommes de contrôle MD5, SHA1 et SHA256 et SHA512 pour chaque "
+"fichier."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+"La valeur des autres champs de métadonnées du fichier Release sont tirées de "
+"la valeur correspondante dans <literal>APT::FTPArchive::Release</literal>, "
+"p. ex. <literal>APT::FTPArchive::Release::Origin</literal>. Les champs "
+"reconnus sont : <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal>, "
+"<literal>Description</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+"La commande <literal>generate</literal> est conçue pour être exécutable par "
+"le programme cron et elle crée un index en suivant le fichier de "
+"configuration donné. Le langage de configuration fournit un moyen souple de "
+"préciser index et répertoires aussi bien que les paramètres requis."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+"La commande <literal>clean</literal> nettoie les bases de données utilisées "
+"par le fichier de configuration en supprimant les enregistrements qui ne "
+"sont plus nécessaires."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr "Configuration de la commande generate"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+"La commande <literal>generate</literal> utilise un fichier de configuration "
+"pour décrire l'archive qui va être créée. Le format de ce fichier est le "
+"format ISC classique utilisé par des outils ISC comme bind 8 et dhcpd. Le "
+"fichier &apt-conf; décrit ce format. Il faut noter que l'analyse de ce "
+"fichier se fait par section tandis que celle d'&apt-conf; se fait par "
+"arborescence. Cela n'affecte que l'usage de l'étiquette de visée (scope tag)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+"Ce fichier de configuration possède quatre sections, décrites ci-dessous."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr "La section <literal>Dir</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+"La section <literal>Dir</literal> définit les répertoires standards où "
+"situer les fichiers nécessaires au processus de création. Ces répertoires "
+"sont précédés de chemins relatifs définis dans les sections suivantes de "
+"manière à produire un chemin absolu et complet."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+"Indique la racine de l'archive FTP ; Pour une configuration Debian "
+"classique, c'est le répertoire qui contient le fichier <filename>ls-LR</"
+"filename> et les noeuds des distributions."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr "Indique l'emplacement des fichiers d'« override »."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr "Indique l'emplacement des fichiers de cache."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+"Indique l'emplacement des fichiers contenant la liste des fichiers (si on se "
+"sert de la valeur <literal>FileList</literal> définie plus bas)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr "La section <literal>Default</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+"La section <literal>Default</literal> précise les valeurs par défaut et les "
+"paramètres qui contrôlent la marche du générateur. Ces valeurs peuvent être "
+"annulées dans d'autres sections (paramètrage par section)."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+"Indique comment sont compressés les fichiers d'index. C'est une chaîne qui "
+"contient une liste séparée par des espaces qui contient au moins l'un des "
+"compresseurs configuré à travers le champ d'action de configuration "
+"<option>APT::Compressor</option>. La valeur par défaut pour tous les schémas "
+"de compression est « . gzip »."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+"Indique la liste par défaut des extensions de fichier qui constituent des "
+"paquets. Par défaut, c'est « .deb »."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+"Identique à <literal>Packages::Compress</literal> mais précise comment sont "
+"compressés les fichiers sources."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+"Indique la liste par défaut des extensions de fichier qui constituent des "
+"fichiers sources. Par défaut, c'est « .dsc »."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+"Identique à <literal>Packages::Compress</literal> mais précise comment sont "
+"compressés les fichiers « Contents »."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+"Identique à <literal>Packages::Compress</literal> mais précise comment est "
+"compressé le fichier maître Translations-en."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+"Indique le nombre de kilo-octets à délier (et à remplacer par des liens en "
+"dur) pour chaque exécution. On s'en sert, pour chaque section, avec le "
+"paramètre <literal>External-Links</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+"Indique le système de permissions des fichiers d'index créés. Par défaut, "
+"c'est le mode 0644. Tous les fichiers d'index ont ce mode et le masque "
+"utilisateur (umasq) est ignoré."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+"Définit si les descriptions longues doivent être incluses dans le fichier "
+"<filename>Packages</filename> ou déplacées dans un fichier maître "
+"<filename>Translation-en</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "La section <literal>TreeDefault</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+"Indique les valeurs par défaut particulières à la section <literal>Tree</"
+"literal>. Toutes ces variables sont des variables de substitution ; les "
+"chaînes $(DIST), $(SECTION) et $(ARCH) sont remplacées par leur valeur "
+"respective."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+"Indique le nombre de kilo-octets de fichiers « Contents » qui sont créés "
+"chaque jour. Les fichiers « Contents » sont choisis selon le système « round-"
+"robin » de manière que, sur plusieurs jours, tous soient reconstruits."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+"Contrôle le nombre de jours pendant lequel un fichier « Contents » peut être "
+"utilisé sans actualisation. Quand cette limite est franchie, le « mtime » du "
+"fichier « Contents » est mis à jour. Cela peut arriver quand un fichier est "
+"modifié sans que cela modifie le fichier « Contents » (modification par "
+"« override » par exemple). Un délai est permis dans l'espoir que de nouveaux "
+"« .deb » seront installés, exigeant un nouveau « Contents ». Par défaut ce "
+"nombre vaut 10, l'unité étant le jour."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+"Indique la racine de l'arborescence des « .deb ». Par défaut, c'est "
+"<filename>$(DIST)/$(SECTION)/binary-$(ARCH)/</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+"Indique la racine de l'arborescence des paquets source. Par défaut, c'est "
+"<filename>$(DIST)/$(SECTION)/source/</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+"Indique le fichier « Packages » créé. Par défaut, c'est <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/Packages</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+"Indique le fichier « Sources » créé. Par défaut, c'est <filename>$(DIST)/"
+"$(SECTION)/source/Sources</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+"Définit le fichier maître Translation-en qui comporte les descriptions "
+"longues si elles ne sont pas incluses dans le fichier Packages. Valeur par "
+"défaut : <filename>$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+"Indique un préfixe de chemin ; ce préfixe fait qu'un lien symbolique sera "
+"considéré comme un lien interne plutôt que comme un lien externe. Par "
+"défaut, c'est <filename>$(DIST)/$(SECTION)/</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+"Indique le fichier « Contents » créé. Par défaut, c'est <filename>$(DIST)/"
+"Contents-$(ARCH)</filename>. Quand le paramètrage fait que différents "
+"fichiers « Packages » se réfèrent à un seul fichier « Contents », "
+"<command>apt-ftparchive</command> les intègre automatiquement."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr "Indique l'en-tête à préfixer au fichier « Contents » créé."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+"Indique la base de données binaire servant de cache pour cette section. "
+"Différentes sections peuvent partager cette base de données."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+"Indique qu'au lieu de lire l'arborescence, <command>apt-ftparchive</command> "
+"doit lire la liste de fichiers dans le fichier donné en paramètre. Les noms "
+"relatifs sont préfixés par le répertoire de l'archive."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+"Indique qu'au lieu de lire l'arborescence, <command>apt-ftparchive</command> "
+"doit lire la liste de fichiers dans le fichier donné en paramètre. Les noms "
+"relatifs sont préfixés par le répertoire de l'archive. On s'en sert pour "
+"traiter les index de sources."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr "La section <literal>Tree</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+"La section <literal>Tree</literal> définit une arborescence debian classique "
+"avec un répertoire de base, différentes sections dans ce répertoire et "
+"différentes architectures dans chaque section. Le chemin exact est défini "
+"par la variable de substitution <literal>Directory</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+"La section <literal>Tree</literal> accepte une étiquette de visée (scope "
+"tag) qui détermine la variable <literal>$(DIST)</literal> et la racine de "
+"l'arborescence (le chemin est préfixé par <literal>ArchiveDir</literal>). "
+"C'est par exemple : <filename>dists/&debian-stable-codename;</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+"Tous les paramètres définis dans la section <literal>TreeDefault</literal> "
+"peuvent s'utiliser dans la section <literal>Tree</literal> ainsi que les "
+"trois nouvelles variables suivantes."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+"Quand il exécute la section <literal>Tree</literal>, <command>apt-"
+"ftparchive</command> effectue une opération analogue à : <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+"C'est une liste de sections séparées par des espaces qui appartiennent à une "
+"distribution ; classiquement, on trouve <literal>main contrib non-free</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+"C'est une liste de toutes les architectures séparées par des espaces qui "
+"appartiennent à chaque section. L'architecture spéciale « source » indique "
+"que l'arborescence est une arborescence de sources. L'architecture « all » "
+"indique que les fichiers spécifiques à l'architecture comme "
+"<filename>Packages</filename> ne devraient pas inclure d'informations sur "
+"les paquets de l'architecture <literal>all</literal> dans tous les fichiers "
+"comme elles devraient être disponibles dans un fichier dédié."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+"Indique le fichier binaire d'« override ». Ce fichier contient des "
+"informations sur la section, la priorité et le responsable du paquet."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+"Indique le fichier source d'« override ». Ce fichier contient des "
+"informations sur la section."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr "Indique un autre fichier d'« override » pour les binaires."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr "Indique un autre fichier d'« override » pour les sources."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "La section <literal>BinDirectory</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+"La section <literal>bindirectory</literal> définit une arborescence binaire "
+"sans structure particulière. L'étiquette de visée (scope tag) indique "
+"l'emplacement du répertoire binaire et le paramètrage est identique à celui "
+"pour la section <literal>Tree</literal> sans substitution de variables ou au "
+"paramètrage de <literal>Section</literal><literal>Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr "Définit le fichier « Packages » créé."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+"Définit le fichier « Sources » créé. L'un des deux fichiers, "
+"<literal>Packages</literal> ou <literal>Sources</literal> est nécessaire."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr "Définit le fichier « Contents » créé."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr "Définit le fichier d'« override » pour les binaires."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr "Définit le fichier d'« override » pour les sources."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr "Définit la base de données cache."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr "Ajoute un chemin à tous les chemins créés."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "Définit le fichier contenant la liste des fichiers."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr "Le fichier d'« Override » pour les binaires."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+"Le fichier d'« Override » est pleinement compatible avec &dpkg-"
+"scanpackages;. Il contient quatre champs séparés par des espaces. Le premier "
+"est le nom du paquet ; le deuxième est la priorité à donner à ce paquet ; le "
+"troisième est sa section et le dernier champ est un champ pour changer le "
+"nom du responsable de paquet."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "old [// oldn]* => new"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "new"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+"Le champ du responsable est de cette forme : <placeholder type="
+"\"literallayout\" id=\"0\"/> ou simplement, <placeholder type=\"literallayout"
+"\" id=\"1\"/> La première forme permet de spécifier de vieilles adresses "
+"dans une liste (le séparateur est la double barre oblique). Si l'une de ces "
+"deux formes est rencontrée, la valeur de new remplace la valeur du champ. La "
+"deuxième forme remplace inconditionnellement le champ."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr "Le fichier d'« Override » pour les sources"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+"Le fichier d'« Override » est pleinement compatible avec &dpkg-scansources;. "
+"Il contient deux champs. Le premier est le nom du paquet source ; le second, "
+"sa section."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr "Le fichier supplémentaire d'« Override »"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+"Le fichier supplémentaire d'« Override » permet d'ajouter ou de remplacer "
+"des étiquettes sur la sortie. Il possède trois colonnes : la première "
+"représente le paquet, la seconde est une étiquette et la troisième en fin de "
+"ligne est la nouvelle valeur."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+"Crée la somme de contrôle indiquée. Si ces options sont actives par défaut. "
+"Quand elles sont désactivées, les fichiers d'index créés n'auront pas de "
+"champ de somme de contrôle là où cela était possible. Éléments de "
+"configuration :<literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> et <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> où "
+"<literal><replaceable>Index</replaceable></literal> peut être "
+"<literal>Packages</literal>, <literal>Sources</literal> ou <literal>Release</"
+"literal> et <literal><replaceable>Checksum</replaceable></literal> peut être "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"ou <literal>SHA512</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"Utiliser une base de données binaire pour cache. Cela n'a aucun effet sur la "
+"commande generate. Élément de configuration : <literal>APT::FTPArchive::DB</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Mode silencieux ; cette commande produit une sortie destinée à "
+"l'enregistrement dans un fichier-journal en omettant les indicateurs de "
+"progression. Un plus grand nombre de « q » (2 au plus) rend le programme de "
+"plus en plus silencieux. On peut aussi utiliser <option>-q=#</option> pour "
+"définir ce « niveau de silence », et ne plus tenir compte des réglages du "
+"fichier de configuration. Élément de configuration : <literal>quiet</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"Défaire une liaison. Si <literal>External-Links</literal> est activé, cette "
+"option permet réellement de délier les fichiers. Par défaut, elle est "
+"activée mais elle peut être désactivée avec l'option <option>--no-delink</"
+"option>. Élément de configuration : <literal>APT::FTPArchive::DeLinkAct</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+"Permettre la création d'un fichier « Contents ». Quand cette option est "
+"activée et que les index sont créés sous forme de base de données binaire, "
+"la liste des fichiers est aussi extraite et conservée dans la base de "
+"données pour un usage futur. Avec la commande generate, cette option permet "
+"la création de fichiers « Contents ». Par défaut, elle est activée. Élément "
+"de configuration : <literal>APT::FTPArchive::Contents</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"Indique le fichier d'« override » à utiliser avec la commande "
+"<literal>sources</literal>. Élément de configuration : <literal>APT::"
+"FTPArchive::SourceOverride</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"N'autoriser que la lecture pour les bases de données de cache. Élément de "
+"configuration : <literal>APT::FTPArchive::ReadOnlyDB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"N'accepte dans les commandes <literal>packages</literal> et "
+"<literal>contents</literal> que les fichiers de paquets correspondant à "
+"<literal>*_arch.deb</literal> ou <literal>*_all.deb</literal> au lieu de "
+"tous les fichiers de paquets du chemin indiqué.Élément de configuration : "
+"<literal>APT::FTPArchive::Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+"&apt-ftparchive; met le plus de métadonnées possible en cache dans une base "
+"de données. Si les paquets sont recompilés ou republiés avec à nouveau la "
+"même version, cela pourra causer des problèmes car, alors, les métadonnées "
+"en cache (p. ex. les tailles et les sommes de contrôle) seront utilisées. Si "
+"cette option est choisie, cela n'arrivera plus car le fichier sera contrôlé "
+"pour vérifier s'il a été modifié. Veuillez noter que cette option n'est pas "
+"activée par défaut car il est déconseillé d'envoyer dans les archives des "
+"versions identiques. En théorie, donc, ces problème ne devraient pas "
+"survenir et l'ensemble de ces contrôles devient inutile."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+"Cette option de configuration a « <literal>true</literal> » comme valeur par "
+"défaut et ne devrait être placée sur « <literal>false</literal> » que si "
+"l'archive créée avec &apt-ftparchive; fournit également des fichiers "
+"<filename>Translation</filename>. Veuillez noter que le fichier maître "
+"<filename>Translation-en</filename> ne peut être créé que par la commande "
+"generate."
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> packages <replaceable>répertoire</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Création d'un fichier « Packages » compressé pour un répertoire contenant "
+"des paquets binaires (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> retourne zéro si tout se passe bien, le "
+"nombre 100 en cas d'erreur."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+msgid "Login configuration file for APT sources and proxies"
+msgstr ""
+"Fichier de configuration de connexion pour les sources et les mandataires "
+"d'APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+"Les fichiers de configuration d'APT tels que &sources-list; ou &apt-conf; "
+"doivent pouvoir être accessibles à tous ceux qui utilisent les outils d'APT "
+"sur le système pour accéder à toutes les informations relatives aux paquets "
+"telles que les paquets disponibles dans un dépôt. Les informations de "
+"connexion nécessaires pour se connecter à un mandataire ou pour télécharger "
+"des données à partir d'un dépôt, d'un autre côté, ne devraient pas toujours "
+"être accessibles à tous et ne peuvent donc pas être mises dans un fichier "
+"doté de droits de lecture universels."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"Le fichier auth.conf d'APT <filename>/etc/apt/auth.conf</filename> ainsi que "
+"les fichiers .conf dans <filename>/etc/apt/auth.conf.d</filename> peuvent "
+"être utilisés pour stocker les informations de connexion dans un format de "
+"type netrc avec des droits d'accès restreints."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr "format de type netrc"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+"Le format défini ici est analogue au format du fichier <filename>~/.netrc</"
+"filename> utilisé par <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> et des programmes "
+"similaires interagissant avec des serveurs. C'est un format simple basé sur "
+"les jetons qui reconnaît les jetons suivants ; les jetons inconnus seront "
+"ignorés. Les jetons peuvent être séparés par des espaces, des tabulations ou "
+"des changements de ligne."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+"<literal>machine</literal> <replaceable>nom d'hôte</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>chemin</replaceable>]"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+"Les entrées sont trouvées en recherchant le jeton de "
+"<emphasis><literal>machine</literal></emphasis> correspondant au nom d'hôte "
+"de l'URI qui fournit les informations de connexion dont APT a besoin. Comme "
+"extension du format netrc, un numéro de port peut être défini. Si ce n'est "
+"pas le cas, le jeton est valide pour tous les ports. De la même manière, le "
+"chemin est facultatif et seulement nécessaire et utile si plusieurs dépôts, "
+"avec des informations de connexion différentes, sont hébergées sur le même "
+"serveur. Un jeton de machine avec un chemin correspond si le chemin dans "
+"l'URI débute par le chemin donné dans le jeton. Une fois qu'une "
+"correspondance est établie, les jetons suivants sont traités, s'arrêtant "
+"lorsque la fin du fichier est atteinte ou qu'un autre jeton de "
+"<emphasis><literal>machine</literal></emphasis> est rencontré."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "<literal>login</literal> <replaceable>nom</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr "L'identifiant à utiliser"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "<literal>password</literal> <replaceable>chaîne</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr "Le mot de passe à utiliser."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Example"
+msgstr "Exemple"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb http://example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr "machine example.org login apt password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+"La fourniture d'informations de connexion pour un utilisateur nommé "
+"<literal>apt</literal> avec le mot de passe <literal>debian</literal> pour "
+"l'entrée de &sources-list; <placeholder type=\"literallayout\" id=\"0\"/> "
+"peut se faire directement dans l'entrée : <placeholder type=\"literallayout"
+"\" id=\"1\"/> Autrement, une entrée dans le fichier auth.conf telle que la "
+"suivante peut être utilisée : <placeholder type=\"literallayout\" id=\"2\"/> "
+"Ou enfin, en une seule ligne : <placeholder type=\"literallayout\" id=\"3\"/"
+">. Si vous avez besoin d'être plus précis, tout le contenu de ces lignes "
+"s'appliquera également à l'entrée d'exemple : <placeholder type="
+"\"literallayout\" id=\"4\"/> En revanche, aucune des lignes suivantes ne "
+"s'applique : <placeholder type=\"literallayout\" id=\"5\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr "Remarque"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+"Une prise en charge basique de cette fonctionnalité est présente depuis la "
+"version 0.7.25, mais n'était pas documentée depuis des années. La "
+"documentation a été ajoutée dans la version 1.5, modifiant aussi légèrement "
+"l'implémentation. Pour une compatibilité ascendante maximale, vous devriez "
+"éviter d'avoir plusieurs jetons de <literal>machine</literal> avec le même "
+"nom d'hôte, mais si vous devez en avoir plusieurs, il faudrait qu'un chemin "
+"soit précisé dans le jeton de <literal>machine</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"Informations de connexion pour les sources et les mandataires d'APT dans un "
+"format de type netrc. Élément de configuration : <literal>Dir::Etc::netrc</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"Informations de connexion pour les sources et les mandataires d'APT dans un "
+"format de type netrc. Élément de configuration : <literal>Dir::Etc::"
+"netrcparts</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+"Transport d'APT pour téléchargement par HTTP (protocole de transfert "
+"hypertexte)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+"Ce transport d'APT permet d'utiliser les dépôts auxquels on accède au moyen "
+"de HTTP (Hypertext Transfer Protocol). Il est disponible par défaut et il "
+"est probablement le transport le plus utilisé de tous. Veuillez noter qu'un "
+"transport n'est jamais appelé directement par l'utilisateur, mais utilisé "
+"par les outils d'APT s'appuyant sur la configuration de l'utilisateur."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+"HTTP est un protocole de transport non chiffré ce qui veut dire que toutes "
+"les communications avec le serveur distant (ou le mandataire) peuvent être "
+"observées par un attaquant suffisamment compétent appelé couramment « homme "
+"du milieu » (MITM). Cependant, un tel attaquant ne peut <emphasis>pas</"
+"emphasis> modifier la communication pour compromettre la sécurité du système "
+"dans la mesure où le modèle de sécurité des données d'APT est indépendant de "
+"la méthode de transport choisie. Cela est expliqué en détail dans &apt-"
+"secure;. Un aperçu des méthodes de transport disponibles est donné dans "
+"&sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+"Diverses options peuvent être réglées dans un fichier &apt-conf; pour "
+"modifier son comportement depuis la configuration d'un mandataire à des "
+"contournements pour les limites d'un serveur particulier."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Proxy Configuration"
+msgstr "Configuration du mandataire"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+"La variable d'environnement <envar>http_proxy</envar> est prise en charge "
+"pour une configuration au niveau du système. Les mandataires particuliers à "
+"APT peuvent être configurés grâce à l'option <literal>Acquire::http::Proxy</"
+"literal>. Les mandataires qui devraient être utilisés seulement pour "
+"certains hôtes peuvent être spécifiés avec <literal>Acquire::http::Proxy::"
+"<replaceable>hôte</replaceable></literal>. Un contrôle encore plus fin peut "
+"être obtenu avec l'autodétection du mandataire, détaillée ci-dessous. Toutes "
+"ces options utilisent le format d'URI <literal><replaceable>schéma</"
+"replaceable>://[[<replaceable>utilisateur</replaceable>][:"
+"<replaceable>mot_de_passe</replaceable>]@]<replaceable>hôte</replaceable>[:"
+"<replaceable>port</replaceable>]/</literal>. Les schémas d'URI pris en "
+"charge sont <literal> socks5h</literal> (SOCKS5 avec résolution distante de "
+"DNS), <literal>http</literal> et <literal>https</literal>. Les détails "
+"d'authentification peuvent être fournis avec &apt-authconf; plutôt que de "
+"les inclure directement dans l'URI."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+"Les diverses options de configuration d'APT prennent en charge la valeur "
+"particulière <literal>DIRECT</literal> signifiant qu'aucun mandataire ne "
+"doit être utilisé. La variable d'environnement <envar>no_proxy</envar> est "
+"aussi prise en charge dans le même but."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+"De plus, il y a trois options de configuration fournies pour le contrôle des "
+"caches mandataire compatibles avec HTTP/1.1 : <literal>Acquire::http::No-"
+"Cache</literal> dit au mandataire de ne jamais utiliser les réponses qu'il a "
+"stockées. <literal>Acquire::http::Max-Age</literal> établit l'ancienneté "
+"maximale (en secondes) d'un fichier d'index dans le cache du mandataire. "
+"<literal>Acquire::http::No-Store</literal> indique que le mandataire ne doit "
+"pas mettre en cache les fichiers d'archive, ce qui peut éviter de polluer un "
+"cache mandataire avec des fichiers .deb très grands."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Automatic Proxy Configuration"
+msgstr "Configuration automatique du mandataire"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+"L'option <literal>Acquire::http::Proxy-Auto-Detect</literal> peut être "
+"utilisée pour indiquer une commande externe pour découvrir le mandataire "
+"HTTP à utiliser. Le premier et seul paramètre est un URI indiquant l'hôte à "
+"contacter pour permettre une configuration propre à l'hôte. Apt s'attend à "
+"ce que la commande indique le mandataire sur la sortie standard sur une "
+"seule ligne dans le format d'URI précédemment défini ou le mot "
+"<literal>DIRECT</literal> si aucun mandataire ne doit être utilisé. Aucune "
+"sortie indique que le mandataire générique doit être utilisé."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+"Notez que l'auto-détection ne sera pas exécutée si une configuration "
+"spécifique de mandataire hôte a déjà été établie par <literal>Acquire::http::"
+"Proxy::<replaceable>hôte</replaceable></literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+"Voir les paquets &squid-deb-proxy-client; et &auto-apt-proxy; pour des "
+"exemples d'implémentation."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+"Cette option prend le pas sur l'ancien nom d'option <literal>Acquire::http::"
+"ProxyAutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Connection Configuration"
+msgstr "Configuration de connexion"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+"L'option <literal>Acquire::http::Timeout</literal> positionne le compteur "
+"d'expiration du délai (timeout) utilisé par la méthode. Cela s'applique "
+"aussi bien à la connexion qu'aux données."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+"La bande passante utilisée peut être limitée avec <literal>Acquire::http::Dl-"
+"Limit</literal> qui peut prendre une valeur entière, l'unité utilisée étant "
+"le kilo-octet par seconde. La valeur par défaut est 0, ce qui correspond à "
+"aucune limitation de bande passante. Veuillez noter que cette option "
+"désactive implicitement le téléchargement simultané depuis plusieurs "
+"serveurs."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+"Le réglage <literal>Acquire::http::Pipeline-Depth</literal> permet "
+"d'utiliser l'enchaînement HTTP (« HTTP pipelining », RFC 2616 "
+"section 8.1.2.2) ce qui peut être utile par exemple avec des connexions à "
+"latence élevée. Il indique le nombre de requêtes envoyées dans le tuyau. APT "
+"tente de détecter et de contourner les serveurs web et les mandataires qui "
+"se comportent mal à l'exécution, mais si vous savez que vos serveurs ne "
+"respectent pas la norme HTTP/1.1, l'enchaînement peut être désactivé en "
+"définissant cette valeur à 0. Il est activé par défaut avec une valeur de 10."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+"<literal>Acquire::http::AllowRedirect</literal> contrôle le fait qu'APT "
+"suive les redirections. Ce réglage est activé par défaut."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+"L'option <literal>Acquire::http::User-Agent</literal> peut être utilisée "
+"pour envoyer une valeur User-Agent modifiée pour les téléchargements HTTP, "
+"ce qui peut par exemple être utile avec certains mandataires HTTP qui "
+"n'autorisent l'accès qu'aux clients s'identifiant de manière spécifique."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+"<literal>Acquire::http::SendAccept</literal> est activé par défaut et envoie "
+"un champ d'en-tête <literal>Accept: text/*</literal> au serveur pourles "
+"requêtes sans extension de fichier pour éviter que le serveur ne tente une "
+"négociation de contenu."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+"Le transport d'APT pour télécharger par HTTPS (protocole de transfert "
+"hypertexte sécurisé)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+"Ce transport d'APT permet d'utiliser les dépôts auxquels on accède au moyen "
+"de HTTPS (protocole HTTP Secure), aussi appelé HTTP sur TLS. Il est "
+"disponible par défaut depuis apt 1.5 et était disponible auparavant dans "
+"lepaquet <package>apt-transport-https</package>. Veuillez noter qu'un "
+"transport n'est jamais appelé directement par l'utilisateur, maisutilisé par "
+"les outils d'APT s'appuyant sur la configuration de l'utilisateur."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+"HTTP est un protocole de transport non chiffré (comparez avec &apt-transport-"
+"http;), qui, comme l'indique le S ajouté, est enveloppé dans une couche "
+"chiffrée, connue sous le nom de « Transport Layer Security » (TLS), pour "
+"fournir un chiffrement de bout en bout. Un attaquant suffisamment compétent "
+"peut encore observer les partenaires de la communication et une analyse "
+"approfondie de la communication chiffrée pourrait toujours révéler des "
+"détails importants. Un aperçu des méthodes de transport alternatives "
+"disponibles est donné dans &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+"Le protocole HTTPS est basé sur le protocole HTTP, aussi toutes les options "
+"prises en charge par &apt-transport-http; sont aussi disponibles au moyen de "
+"<literal>Acquire::https</literal> et ont par défaut les même valeurs que "
+"celles spécifiées pour <literal>Acquire::http</literal>. Cette page de "
+"manuel ne documentera que les options <emphasis>propres à https</emphasis>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr "Accréditations du serveur"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+"Par défaut, tous les certificats de confiance du système (voir le paquet "
+"<package>ca-certificates</package> sont utilisés pour la vérification du "
+"certificat du serveur. Une autre autorité de certification (CA) peut être "
+"configurée avec l'option <literal>Acquire::https::CAInfo</literal> et son "
+"option spécifique de l'hôte <literal>Acquire::https::CAInfo::"
+"<replaceable>hôte</replaceable></literal>. L'option CAInfo spécifie un "
+"fichier composé des certificats de CA (au format PEM) concaténés pour créer "
+"la chaîne qu'APT peut utiliser pour vérifier le chemin à partir du "
+"certificat racine auto-signée. Si le serveur distant fournit toute la chaîne "
+"pendant l'échange, le fichier ne doit contenir que le certificat racine. "
+"Autrement, toute la chaîne est requise. Si la gestion de plusieurs autorités "
+"est nécessaire, le seul moyen est de tout concaténer."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+"Une liste de révocation de certificats (CRL) personnalisée peut être "
+"configurée avec l'option <literal>Acquire::https::CRLFile</literal> et "
+"<literal>Acquire::https::CRLFile::<replaceable>hôte</replaceable></literal>. "
+"Comme avec l'option précédente, il faut spécifier un fichier au format PEM."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr "Désactiver la sécurité"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+"Durant l'authentification du serveur, si la vérification du certificat "
+"échoue pour une raison quelconque (expiré, révoqué, homme du milieu, etc.), "
+"la connexion échoue. C'est certainement ce que vous souhaitez dans tous les "
+"cas et ce que fournit la valeur par défaut (« <literal>true</literal> ») de "
+"l'option <literal>Acquire::https::Verify-Peer</literal> et de ses variantes "
+"spécifiques à l'hôte. Si vous savez <emphasis>exactement</emphasis> ce que "
+"vous faites, la configuration de cette option à « <literal>false</literal> » "
+"vous permet d'ignorer la vérification du certificat du pair et de faire "
+"réussir l'échange. Une fois de plus, cette option est seulement destinée au "
+"test ou au débogage dans la mesure où elle supprime toute la sécurité "
+"apportée par l'utilisation de HTTPS."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+"De la même façon, l'option <literal>Acquire::https::Verify-Host</literal> et "
+"sa variante spécifique à l'hôte peuvent être utilisées pour désactiver la "
+"fonction de sécurité. Le certificat fourni par le serveur comprend "
+"l'identité du serveur qui devrait correspondre au nom de DNS utilisé pour y "
+"accéder. Par défaut, comme cela est requis par la RFC 2818, le nom du miroir "
+"est vérifié par rapport à l'identité trouvée dans le certificat. Ce "
+"comportement par défaut est sûr et ne devrait pas être modifié, mais si vous "
+"savez que le serveur que vous utilisez à un nom de DNS qui ne correspond pas "
+"à l'identité de son certificat, il est possible de régler l'option à "
+"\"<literal>false</literal>\", ce qui empêchera la réalisation de la "
+"comparaison."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr "Authentification du client"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+"Outre la gestion de l'authentification basée sur les mots de passe (voir "
+"&apt-authconf;) HTTPS prend aussi en charge l'authentification basée sur les "
+"certificats du client avec <literal>Acquire::https::SSLCert</literal> et "
+"<literal>Acquire::https::SSLKey</literal>. Leurs valeurs doivent être "
+"respectivement celle du nom de fichier du certificat X.509 du client et "
+"celle de la clé privée (non chiffrée) associée, toutes les deux au format "
+"PEM. En pratique, l'utilisation des variantes spécifiques à l'hôte des deux "
+"options est fortement recommandée."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr "Transport d'APT pour une sélection plus automatique du miroir"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+"Ce transport d'APT ne met pas en œuvre un protocole pour accéder tout seul à "
+"des dépôts locaux ou distants, mais obtenir une liste de miroirs et redirige "
+"toutes les requêtes vers le(s) miroir(s) choisi(s) dans cette liste, en y "
+"accédant grâce à d'autres transports tels que &apt-transport-http;. La "
+"fonctionnalité de base est disponible depuis apt 0.7.24, mais n'a été "
+"documentée qu'à partir d'apt 1.6 qui fournit une version totalement "
+"retravaillée du transport et des fonctionnalités prises en charge. Veuillez "
+"noter qu'un transport n'est jamais appelé directement par l'utilisateur, "
+"mais utilisé par les outils d'APT s'appuyant sur la configuration de "
+"l'utilisateur."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+"Si la récupération d'un fichier à partir d'un miroir échoue, la méthode "
+"assure qu'un autre miroir possible de la liste est automatiquement essayé "
+"jusqu'à ce que le fichier soit récupéré ou qu'il ne reste plus de miroir sur "
+"la liste, gérant de façon transparente les indisponibilités de serveur ou "
+"d'autres problèmes similaires."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+"Les implications de sécurité du transport dépendent des considérations de "
+"sécurité, associées au transport, qui ont présidé à l'acquisition de la "
+"liste de miroirs et des transports impliqués dans l'accession au(x) "
+"miroir(s) choisi(s) par le transport."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+"Ce transport ne possède pas d'option de configuration pour le moment. La "
+"sélection du miroir est basée uniquement sur les miroirs offerts dans la "
+"liste de miroirs et des fichiers qu'APT doit se procurer."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr "Format de la liste de miroirs"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+"Une liste de miroirs contient une ou plusieurs lignes qui spécifient chacune "
+"l'URI d'un miroir. Les lignes vides et celles commençant par un caractère "
+"dièse (<literal>#</literal>) sont ignorées. Un URI débute toujours par un "
+"schème d'URI qui définit le transport utilisé pour ce miroir. Si, par "
+"exemple, l'URI débute par <literal>http:</literal>, le transport responsable "
+"est &apt-transport-http; qui pourrait avoir des exigences particulières pour "
+"le format du reste de l'URI."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+"Les métadonnées d'un miroir peuvent être placées sur la même ligne, séparées "
+"de l'URI par une tabulation. De multiples éléments de métadonnées peuvent "
+"être eux-mêmes séparés par des tabulations ou des espaces. (C'est une "
+"fonctionnalité avancée seulement disponible avec apt >= 1.6. Les versions "
+"d'APT antérieures échoueront à analyser les listes de miroirs utilisant "
+"cette fonctionnalité.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+"Depuis apt 1.6, l'utilisation de listes de miroirs compressées est aussi "
+"gérée. Veuillez noter que le nom de fichier de la liste de miroirs doit "
+"spécifier l'algorithme de compression utilisé ; il n'y a pas d'auto-"
+"détection basée sur le contenu du fichier."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr "Sélection du miroir par les métadonnées"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+"Comme cela est spécifié dans le format, un miroir peut avoir des métadonnées "
+"supplémentaires attachées pour éviter qu'il soit sélectionné pour la "
+"récupération d'un fichier qui ne correspond pas à ces métadonnées. De cette "
+"façon, la liste de miroirs peut contenir par exemple des miroirs partiels "
+"fournissant seulement certaines architectures et APT choisira "
+"automatiquement un autre miroir pour les fichiers requérant une architecture "
+"non listée. Sont prises en charge les limites liées à l'architecture "
+"(<literal>arch</literal>), au nom de code de la version (<literal>codename</"
+"literal>), aux composants du dépôt où se trouve le fichier "
+"(<literal>component</literal>), à la langue à laquelle le fichier s'applique "
+"(<literal>lang</literal>), au nom de la suite de la version <literal>suite</"
+"literal>) et au type du fichier (<literal>type</literal>)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr "Ordre de repli pour les miroirs"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+"Si aucune priorité n'est donnée à un miroir par la clé de métadonnée "
+"<literal>priority</literal>, l'ordre de contact des miroirs est aléatoire. "
+"Si un ensemble particulier de miroirs doit être essayé avant que n'importe "
+"lequel des autres ensembles ne le soit, une priorité peut être spécifiée "
+"explicitement. Les miroirs avec les numéros les plus bas sont essayés en "
+"premier. Les miroirs qui n'ont pas de priorité explicite portent par défaut "
+"le numéro le plus élevé possible, et donc, sont essayés en dernier. Le choix "
+"entre les miroirs de même priorité est aussi aléatoire."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr "Transports permis dans une liste de miroir"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+"La disponibilité et le choix des transports dans une liste de miroirs sont "
+"limités par la manière dont le client APT accède à la liste des miroirs. Si "
+"un transport local comme <literal>file</literal> ou <literal>copy</literal> "
+"est utilisé, la liste de miroirs peut aussi inclure des sources locales, "
+"alors qu'une liste de miroirs atteinte par <literal>http</literal> ne le "
+"peut pas. Par ailleurs, une liste de miroirs ne peut pas contenir une liste "
+"de miroirs ou d'autres transports enveloppants (comme <package>apt-transport-"
+"tor</package>). Voir la documentation sur ces transports pour connaître la "
+"manière de les utiliser avec la méthode miroir."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+"Veuillez noter que les versions d'APT antérieures à 1.6 ne prennent pas en "
+"charge d'autres transports que <literal>http</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr "Exemple basique"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+"Voici un exemple basique de liste de miroirs prise en charge par toutes les "
+"versions d'APT avec une méthode de miroir (>= 0.7.24) dans lequel le client "
+"choisira n'importe lequel des trois miroirs :"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+"Si un fichier avec ce contenu est stocké sur la machine sous le nom de "
+"<filename>/etc/apt/mirrorlist.txt</filename>, il peut être utilisé comme "
+"cela dans &sources-list; (à partir d'apt 1.6) :"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+"Toutes les versions de la méthode miroir prennent en charge une liste de "
+"miroirs accessible par HTTP, aussi, dans la mesure où elle est disponible à "
+"l'adresse <literal>http://apt.example.org/mirror.lst</literal>, l'entrée de "
+"sources.list ci-dessus peut être écrite plutôt ainsi :"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+"Veuillez noter que depuis apt 1.6, l'utilisation de <literal>mirror+http</"
+"literal> est préférable à <literal>mirror</literal> pour uniformiser. La "
+"fonctionnalité est la même."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr "Exemple de sélection du miroir avec des métadonnées améliorées"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+"Comme cela est expliqué dans la définition de format, les versions d'APT "
+"antérieures à 1.6 ne prennent pas cela en charge et échoueront à analyser la "
+"liste de miroirs. L'exemple de liste de miroirs est complexe "
+"intentionnellement pour montrer certains aspects de la sélection. La "
+"configuration suivante est supposée : le premier miroir est un miroir local "
+"accessible par la méthode « file », mais possiblement incomplet ; le second "
+"miroir possède une excellente connexion, c'est un miroir partiel dans la "
+"mesure où il ne contient que des fichiers liés aux architectures "
+"<literal>amd64</literal> et <literal>all</literal>. Les miroirs restants "
+"sont des miroirs ordinaires qui devraient être contactés seulement si les "
+"précédents ne fonctionnent pas."
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+"Dans une configuration avec cette liste de miroirs, le premier miroir sera "
+"utilisé pour télécharger tous les fichiers d'index en supposant que la liste "
+"de miroirs elle-même est atteinte par un transport local comme "
+"<literal>file</literal>. Si ce n'est pas le cas, si le miroir est "
+"inaccessible ou s'il ne contient pas le fichier requis, un autre miroir sera "
+"utilisé pour récupérer le fichier, choisi selon le type du fichier : un "
+"fichier d'index sera servi par le dernier miroir de la liste, tandis qu'un "
+"paquet de l'architecture <literal>amd64</literal> est servi par le second et "
+"ceux, par exemple, de l'architecture <literal>i386</literal> par un des "
+"trois derniers."
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "fr"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "Guide d'utilisation d'APT"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr "Version &apt-product-version;"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr ""
+"Ce document fournit un aperçu des méthode d'utilisation du gestionnaire de "
+"paquets APT."
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr "Mention de licence "
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"APT, ainsi que ce document, sont libres. Vous pouvez les redistribuer et les "
+"modifier en respectant les conditions de la licence publique générale GNU "
+"telle que publiée par la Free Software Foundation, en version 2 ou "
+"ultérieure."
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"Les détails complets de cette licence sont, sur les systèmes Debian GNU/"
+"Linux, consultables dans le fichier usr/share/common-licenses/GPL."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "Généralités"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"Le paquet APT comporte actuellement deux parties : la méthode APT pour "
+"<command>dselect</command> et l'interface en ligne de commande <command>apt-"
+"get</command>. Les deux fournissent des méthodes d'installation et de "
+"suppression de paquets ainsi que de téléchargement de nouveaux paquets par "
+"Internet."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "Anatomie du système de gestion des paquets"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"Le système de gestion de paquets de Debian intègre de nombreuses "
+"informations associées à chaque paquet afin de garantir qu'il s'intègre "
+"proprement et facilement sur le système. Une des fonctionnalités les plus "
+"immédiatement visibles est le système de gestion des dépendances."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"Le système de gestion des dépendances permet aux programmes de partage des "
+"éléments du système, tels que les bibliothèques de fonctions. Il permet "
+"d'isoler dans des paquets spécifiques certains parties moins utilisées des "
+"programmes afin de limiter le nombre d'éléments que l'utilisateur ordinaire "
+"a besoin d'installer. Ce système de gestion des dépendances permet également "
+"d'effectuer des choix parmi les divers agents de transport de courrier "
+"électronique, les serveurs X et d'autres cxomposants du système."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"La première étape de compréhension de la gestion de dépendances est "
+"d'examiner le fonctionnement d'une dépendance simple. Une dépendance simple "
+"est le cas où un paquet donné a besoin qu'un autre paquet soit installé "
+"simultanément pour pouvoir fonctionner correctement."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"Par example, mailcrypt est une extension à Emacs qui permet de gérer le "
+"courrier électronique chiffré avec GPG. Si GPG n'est pas installé, mailcrypt "
+"est inutile. Donc le paquet mailcrypt a une dépendance simple sur GPG. De "
+"plus, étant une extension à Emacs sans lequel il est totalement inutile, il "
+"a une dépendance simple sur emacs."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"Un autre type de dépendance importante est la dépendance en conflit. Cela "
+"signifie qu'un paquet ne fonctionne pas lorsqu'il est installé en même temps "
+"qu'un autre paquet donné, ce qui peut même être dommageable pour le système. "
+"Un exemple est par exemple constitué par les agents de transport de courrier "
+"tels que sendmail, exim ou qmail. Il n'est pas possible d'installer deux "
+"agents de transport de courrier simultanément puisque les deux ont besoin "
+"d'être à l'écoute sur le réseau pour recevoir le courrier électronique. "
+"Installer deux programmes de ce type sur le même système pourrait conduire à "
+"des pertes de données, ce qui explique que tous les agents de transport de "
+"courrier électronique soient établis comme étant en conflit les uns avec les "
+"autres."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"Il existe également la possibilité pour un paquet donné de prétendre être un "
+"autre paquet. Par exemple, exim et sendmail sont analogues sur de nombreux "
+"aspects ; ils servent tous deux à acheminer le courrier électronique et leur "
+"interface d'utilisation est la même. Pour cette raison, le système de "
+"gestion des paquets leur fournit la possibilité d'indiquer qu'ils sont "
+"chacun un agent de transport de courrier (« mail transport agent ») en "
+"indiquant qu'ils fournissent (« Provides ») « mail-transport-agent ». Ainsi, "
+"un paquet qui a besoin de cette fonctionnalité peut dépendre simplement d'un "
+"paquet « mail-transprot-agent ». Cette fonctionnalité utile peut toutefois "
+"rendre la correction de certains défauts des paquets plus complexe."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"À un instant donné, une dépendance donnée peut être ou pas remplie par des "
+"paquets installés ou pas encore installés. APT tente donc de résoudre les "
+"problèmes de dépendances par l'intermédiaire d'un certain nombre "
+"d'algorithmes automatiques qui simplifient le choix des paquets à installer."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"Le programme <command>apt-get</command> offre une méthode simple pour "
+"installer des paquets à la ligne de commande. À la différence de "
+"<command>dpkg</command>, <command>apt-get</command> ne gère pas directement "
+"les fichiers .deb files. Il travaille avec le nom des paquets et ne peut "
+"installer les archives .deb que depuis une <emphasis>Source</emphasis>."
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"Si vous utilisez un serveur mandataire (« proxy ») HTTP, vous devez d'abord "
+"positionner la variable d'environnement http_proxy, voir sources.list(5)"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"La première action <placeholder type=\"footnote\" id=\"0\"/> à effectuer "
+"avant d'utiliser <command>apt-get</command> est de récupérer les listes de "
+"paquets depuis les <emphasis>Sources</emphasis> afin que le programme sache "
+"quels sont les paquets disponibles. Cela peut être effectué avec la commande "
+"<literal>apt-get update</literal>. Par exemple,"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"Réception de http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Réception de http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Lecture des listes de paquets... Fait\n"
+"Construction de l'arbre des dépendances... Fait\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr ""
+"Une fois cette mise à jour effectuée, plusieurs commandes peuvent être "
+"utilisées :"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"La commande « upgrade » permet de mettre à jour le système de manière non "
+"invasive. Cette commande ne provoquera jamais l'installation de nouveaux "
+"paquets ou la suppression de paquets existants. Elle ne déclenchera pas non "
+"plus la mise à jour d'un paquet si celle-ci casse le fonctionnement d'un "
+"autre paquet. Cette commande peut être utilisé par exemple quotidiennement "
+"pour mettre à jour le système de manière relativement sûre. Lorsqu'elle est "
+"utilisée, la liste des paquets qui ne peuvent être mis à jour sera affichée. "
+"Cela est en général du au fait qu'ils dépendent de nouveaux paquets ou "
+"qu'ils entrent en conflit avec d'autres paquets. Le programme "
+"<command>dselect</command> ou la commande <literal>apt-get install</literal> "
+"peuvet être utilisés pour forcer l'installation de tels paquets."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"La commande « install » permet d'installer des paquets par nom. Le paquet à "
+"installer est automatiquement récupéré et installé. Cela est utile lorsque "
+"le nom du paquet à installer est déjà connu et que l'on ne souhaite pas "
+"passer par une interface graphique pour le choisir. Un nombre quelconque de "
+"paquets peuvent être demandés à être installés ;  ils seront alors tous "
+"récupérés. La commande « install » résout automatiquement les problèmes de "
+"dépendances pour les paquets concernés, puis affiche un résumé avant de "
+"demander une confirmation si des actions autres que ce qui est demandé à la "
+"ligne de commande sont nécessaires."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"La commande « dist-upgrade » est une commande de mise à jour complète "
+"d'abord destinés à permettre les mises à jour entre deux versions "
+"successives de la distribution. Via un algorithme complexe, le meilleur jeu "
+"de paquets à installer, mettre à jour ou supprimer est déterminé dans le but "
+"d'amener une majorité du système vers la nouvelle version. Dans certains "
+"cas, il peut être judicieux d'utiliser « dist-upgrade » plutôt que de "
+"chercher à résoudre manuellement les dépendances avec <command>dselect</"
+"command>. Une fois que « dist-upgrade » a été utilisé, <command>dselect</"
+"command> peut servir à installer les paquets qui auraient pu être laissés de "
+"côté."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"Il est important de regarder de près ce que « dist-upgrade » car ses "
+"décisions peuvent parfois apparaître surprenantes."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"<command>apt-get</command> fournit de nombreuses options de ligne de "
+"commande qui sont expliquées en détail dans sa page de manuel, "
+"<citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>. Une des plus utiles est l'option <literal>-d</"
+"literal> qui récupère sans les installer les fichiers nécessaires. Si le "
+"système a besoin de télécharger un grand nombre de paquets, il est par "
+"exemple souhaitable de pouvoir simplement les récupérer sans les installer "
+"immédiatement, au cas où quelque chose se passe mal. Une fois que <literal>-"
+"d</literal> a été utilisé, il est possible d'installer les archives "
+"téléchargées en exécutant simplement la commande qui a permis de les "
+"récupérer, sans l'option <literal>-d</literal>."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"La méthode APT de <command>dselect</command> permet d'utiliser le système "
+"APT dans son ensemble depuis l'interface graphique de gestion des paquets "
+"<command>dselect</command>. L'interface est alors utilisée pour choisir les "
+"paquets à installer ou supprimer et c'est APT qui effectue les opérations "
+"individuelles d'installation ou suppression."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"Pour activer la méthode APT, il est nécessaire de choisir [A]ccéder dans "
+"<command>dselect</command> puis utiliser le choix permettant d'activer APT. "
+"Des <emphasis>Sources</emphasis> d'installation seront demandées, qui sont "
+"les emplacements d'où les paquets seront récupérés. Cela peut être des sites "
+"Internet distants, des miroirs locaux ou des CD. Chaque source peut fournir "
+"un sous-ensemble de l'archive complète Debian. APT les combinera "
+"automatiquement pour créer un jeu complet de paquets. Avec des supports de "
+"type CD, il est conseillé de les indiquer en premier puis de les compléter "
+"avec un miroir distant qui permettra d'obtenir les versions les plus à jour "
+"s'il y en a. APT utilisera alors les paquets disponibles sur les CD avant de "
+"les télécharger via l'Internet."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" Réglage de la liste des emplacements sources de distribution\n"
+"\n"
+" Veuillez indiquer l'URL de base de la distribution Debian.\n"
+" Les schémas d'accès connus sont : http file\n"
+"\n"
+" Exemple :\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"La configuration des <emphasis>Sources</emphasis> débute par l'indication de "
+"la base de l'archive Debian, par défaut un miroir HTTP. Puis la distribution "
+"est demandée."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" Veuillez indiquer le nom de la distribution à utiliser ou\n"
+" le chemin d'accès au fichier des paquets, terminé par un /.\n"
+" Les noms de distribution sont en général de la forme suivante :\n"
+" stable unstable testing non-US\n"
+"\n"
+" Distribution [stable] :\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"La distribution fait référence à la version de Debian dans l'archive. "
+"<emphasis>stable</emphasis> est la dernière version publiée et "
+"<emphasis>unstable</emphasis> la version en développement. <emphasis>non-US</"
+"emphasis> n'est disponible que sur certains miroirs et fait référence à des "
+"paquets contenant des technologies de chiffrement et d'autres élements dont "
+"l'exportation est interdite depuis les États-Unis d'Amérique. Il est "
+"toutefois autorisé de les y importer. [Note du traducteur : à la date de "
+"cette traduction, 2010, cette notion est totalement obsolète]."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" Veuillez indiquer les composants à utiliser\n"
+" Les composants sont en général de la forme suivante :\n"
+" main contrib non-free\n"
+"\n"
+" Composants [main contrib non-free] :\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"La liste des composants correspond à la liste des sous-ensemble de la "
+"distribution que l'on souhaite utiliser. Les distributions sont en général "
+"divisées ainsi pour des raisons de licences. La sous-distribution « main » "
+"comporte les paquets libre selon les principes du logiciel libre selon "
+"Debian (DFSG) alors que contrib et non-free correspondent à des éléments qui "
+"comprennent des restrictions de distribution ou d'utilisation."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"Un nombre quelconque de sources peuvent être ajoutées. Le script de "
+"configuration continuera à les demander tant que vous n'indiquerez pas que "
+"le processus est terminé."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"Avant d'utiliser <command>dselect</command>, il est nécessaire de mettre à "
+"jour la liste de ce qui est disponible en choisissant « [M]ise à jour » "
+"depuis le menu. Cette action exécutera la commande « apt-get update », ce "
+"qui rendra les informations récupérées disponibles pour <command>dselect</"
+"command>. Elle doit être utilisée même si la commande « apt-get » a déjà été "
+"utilisée sur ce système."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"Une fois cela effectué, vous pouvez poursuivre et utiliser l'option "
+"« [S]électionner » pour choisir les paquets à installer puis « [I]nstaller » "
+"pour les installer. Lorsque la méthode APT est utilisée, les options "
+"« [C]onfigurer » et « [R]etirer » ne sont pas utilisées, car « [I]nstaller » "
+"fait l'ensemble des opérations."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"Par défait, APT supprimera automatiquement les fichiers des paquets "
+"(fichiers .deb) une fois qu'ils ont été installés correctement. Pour "
+"modifier ce comportement, vous pouvez utiliser <literal>Dselect::clean "
+"\"prompt\";</literal> dans /etc/apt/apt.conf."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "L'interface"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"La méthode <command>dselect</command> consiste en fait en un jeu de scripts "
+"qui encapsulent <command>apt-get</command>. Cela approte des fonctionnalités "
+"supplémentaires à celles d'<command>apt-get</command> utilisé isolément."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"La méthode APT de <command>dselect</command> et le programme <command>apt-"
+"get</command> utilisent la même interface. Elle consiste en un système "
+"simple qui indique les opérations qui seront effectuées puis les réalise."
+"<placeholder type=\"footnote\" id=\"0\"/> Après avoir indiqué un résumé des "
+"opérations qui seront effectuées, APT donnera un certain nombre "
+"d'informations permettant d'estimer sa progression, tout au long des actions "
+"qu'il effectue. "
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "Démarrage"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"Avant toute opération autre qu'une mise à jour, APT effectue un certain "
+"nombre d'actions pour préparer ses mécaismes internes de fonctionnement. Il "
+"vérifie également l'état du système. Ces opérations peuvent être effectuées "
+"isolément avec la commande <literal>apt-get check</literal>."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"Lecture de la liste des paquets... Fait\n"
+"Construction de l'arbre des dépendances... Fait\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"En premier lieu, la liste des paquets est lue et placée en mémoire. APT "
+"utilise un mécanisme de cache et cette opération sera plus rapide si elle "
+"est effectuée une deuxième fois.Si certains des fichiers de paquets ne sont "
+"pas trouvés, ils seront ignorés et une informatique sera affichée quand apt-"
+"get se terminera."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"Ensuite, une analyse détaillée des dépendances du système est réalisée. Les "
+"dépendances de chaque paquet installé ou décompressé sont vérifiées. Si un "
+"problème est trouvé, il sera affiché et <command>apt-get</command> bloquera "
+"des opérations ultérieures."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"Lecture de la liste des paquets... Fait\n"
+"Construction de l'arbre des dépendances... Fait\n"
+"Vous pouvez lancer « apt --fix-broken install » pour corriger ces problèmes.\n"
+"Les paquets suivants contiennent des dépendances non satisfaites :\n"
+" 9fonts: Depends: xlib6g mais il n'est pas installé\n"
+" uucp: Depends: mailx mais il n'est pas installé\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) mais il n'est pas installé\n"
+" adduser: Depends: perl-base mais il n'est pas installé\n"
+" aumix: Depends: libgpmg1 mais il n'est pas installé\n"
+" debiandoc-sgml: Depends: sgml-base mais il n'est pas installé\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) mais 2.0-3 est installé\n"
+" cthugha: Depends: svgalibg1 mais il n'est pas installé\n"
+" Depends: xlib6g (&gt;= 3.3-5) mais il n'est pas installé\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"Dans cet exemple, le système comporte plusieurs problèmes, notamment un "
+"problème sérieux avec libreadline2g. Une ligne est affichée pour chaque "
+"paquet dont les dépendances ne sont pas satisfaites, indiquant quel est le "
+"problème. Une explication simple du problème est donnée."
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"Cependant, APT prend en compte les dépendances connues et s'efforce d'éviter "
+"que cette situation ne se produise"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"Il existe deux façons pour le système d'aboutir à cet état. Cela peut "
+"d'abord être causé par des subtilités de relations entre les paquets que "
+"<command>dpkg</command> aurait manquées lors de mises à jour. <placeholder "
+"type=\"footnote\" id=\"0\"/>. Cela peut également être dû à l'échec "
+"antérieur d'une installation de paquet. Dans le cas présent, un paquet a pu "
+"être décompressé sans que ses dépendances ne soient satisfaites."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"La seconde situation est moins grave que la première car APT met certaines "
+"contraintes sur l'ordre d'installation des paquets. Dans les deux cas, "
+"l'option <literal>-f</literal> utilisée avec <command>apt-get</command> "
+"conduira APT à rechercher une solution possible puis à continuer. La méthode "
+"APT de <command>dselect</command> utilise toujours cette option <literal>-f</"
+"literal> afin de pouvoir poursuivre plus facilement ses opérations si un "
+"script de mainteneur échoue de manière inopinée."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"Cependant, si l'option <literal>-f</literal> est utilisée pour corriger un "
+"système fortement corrompu qui est dans le premier cas, il est possible que "
+"l'opération échoue immédiatement ou au cours des diverses tentatives de "
+"réparation effectuées. Dans tous les cas, il peut être nécessaire de "
+"corriger la situation manuellement avec dpkg (éventuellement en utilisant "
+"des options pour forcer certains opérations) avant de pouvoir utiliser à "
+"nouveau APT."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "Le rapport d'état"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"Avant de démarrer ses actions, <command>apt-get</command> en affiche un "
+"résumé. En général, ce rapport dépend du type d'opération qui est "
+"entreprise, mais de nombreux éléments sont communs aux différents types de "
+"rapports. Ainsi, dans tous les cas, les listes reflètent l'état final du "
+"système, en tenant compte de l'option <literal>-f</literal> et des autres "
+"opérations découlant du type de commande utilisée."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "La liste des paquets supplémentaires"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"Les paquets supplémentaires suivants seront installés :\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"La liste des paquets supplémentaires montre tous les paquets installés ou "
+"mis à jour en plus de ceux indiqués à la ligne de commande. Elle n'apparaît "
+"qu'avec la commande <literal>install</literal>. Le plus souvent, les paquets "
+"concernés sont le résultat d'une installation automatique."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "Les paquets à supprimer"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"Les paquets suivants seront ENLEVÉS :\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"La liste des paquets à enlever montre tous les paquets qui seront supprimés "
+"du système. Elle peut apparaître pour tout type d'opération. Il est "
+"conseillé de l'inspecter en détail afin de vérifier qu'aucun paquet "
+"important ne va être supprimé. L'option <literal>-f</literal> provoque "
+"notamment souvent des suppressions de paquets et il est déconseillé d'être "
+"particulièrement attentif dans ce genre de cas. La liste peut comporter des "
+"paquets qui seront supprimés parce qu'ils sont seulement partiellement "
+"installés, par exemple après l'interruption d'une opération d'installation."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "La liste des nouveaux paquets"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"Les NOUVEAUX paquets suivants seront installés :\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"La liste des nouveaux paquets est un simple rappel des opérations qui vont "
+"avoir lieu. Les paquets affichés ne sont pas encore présents sur le système "
+"mais le seront une fois qu'APT aura terminé."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "La liste des paquets conservés"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"Les paquets suivants ont été conservés :\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"À chaque fois que le système entier est mis à jour, il est possible que de "
+"nouvelles versions de paquets ne puissent pas être installées car elles ont "
+"besoins ne nouveaux paquets ou qu'elles entrent en conflit avec des paquets "
+"existants. Ces paquets apparaîtront alors dans la liste des paquets "
+"conservés. Le meilleure méthode pour effectivement installer ces paquets est "
+"souvent de le faire explicitement avec la commande <literal>apt-get install</"
+"literal> ou avec <command>dselect</command>."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "L'avertissement pour paquets retenus"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"Les paquets retenus suivants seront changés :\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"Il peut parfois être utile de demander à APT d'installer un paquet retenu "
+"(« hold »). Dans ce cas, le programme affichera un avertissement indiquant "
+"que le paquet retenu va être modifié. Cela ne se produira que lors de "
+"l'utilisation des commandes dist-upgrade ou install."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "Résumé final"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+"Enfin, APT affichera un résumé de toutes les opérations qui prendront place."
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"206 paquets mis à jour, 8 nouvellement installés, 23 à enlever et 51 non mis à jour.\n"
+"12 paquets partiellement installés ou enlevés.\n"
+"Il est nécessaire de prendre 65,7 Mo/66,7 Mo dans les archives. Après cette opération, 26,5 Mo d'espace disque supplémentaires seront utilisés.\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"La première ligne de ce résumé est une version simplifiée de l'ensemble des "
+"listes et indique le nombre de mises à jour (paquets déjà installés et pour "
+"lesquels une nouvelle version est disponible). La deuxième ligne indique le "
+"nombre de paquets incorrectement configurés, en raison notamment "
+"d'installations interrompues. La dernière ligne indique l'espace disque "
+"nécessaire pour effectuer l'installation. Le premier couple de nombre fait "
+"référence à la taille des fichiers d'archive. Le premier nombre est le "
+"nombre d'octets à récupérer depuis les sites distants et le deuxième la "
+"taille totale de tous les fichiers nécessaires. Le nombre suivant représente "
+"la différence d'espace occupé entre les paquets installés actuellement et ce "
+"qui sera ensuite installé. Il est grossièrement égal à l'espace "
+"supplémentaire nécessaire dans /usr après achèvement de toutes les "
+"opérations. Si de nombreux paquets sont supprimés, cette valeur peut "
+"représenter l'espace qui est alors libéré."
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"D'autres rapports peuvent être créés avec l'option -u qui affiche les "
+"paquets à mettre à jour. Il sont analogues aux exemples précédents."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "L'affichage d'état"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"Pendant le téléchargement des fichiers des paquets, APT affiche un certain "
+"nombre de messages d'avancement."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"Réception de :1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Réception de :2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Atteint http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Réception de :4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Réception de :5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Attente du fichier' 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"Les lignes qui débutent par « Réception de » sont affichées quand APT "
+"démarre la récupération d'un fichier alors que la dernière ligne indique la "
+"progression du téléchargement. La première valeur de pourcentage de la ligne "
+"est le pourcentage de téléchargement déjà effectué, pour l'ensemble des "
+"fichiers. Il faut noter que, comme la taille des fichiers de paquets n'est "
+"pas connue, <literal>apt-get update</literal> estime le pourcentage effectué "
+"ce qui peut conduire à des imprécisions."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"La section suivante de la ligne d'état est répétée pour chaque sous-tâche de "
+"téléchargement. Elle indique l'opération effectuée et d'autres informations "
+"utiles sur ce qui est en cours. Cette section indiquera parfois "
+"<emphasis>Forking</emphasis> ce qui indique que le système charge le module "
+"de téléchargement. Le premier mot après le crochet ouvrant ([) est le numéro "
+"d'ordre de téléchargement comme indiqué dans les lignes d'historique. Le mot "
+"suivant est le nom court de l'objet téléchargé. Pour les archives, il s'agit "
+"du nom du paquet en cours de récupération."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"À l'intérieur des guillemets, on trouve une information sur la progression "
+"de la phase de négociation du téléchargement. Usuellement, elle évolue de "
+"<emphasis>Connexion</emphasis> à <emphasis>Attente du fichier</emphasis>, "
+"puis <emphasis>Téléchargement</emphasis> ou <emphasis>Reprise</emphasis>. La "
+"valeur finale est le nombre d'octets téléchargés depuis le site distant. Une "
+"fois le téléchargement commencé, cette indication prend la forme "
+"<literal>102/10,2ko</literal>, ce qui indique que 102 octets ont été "
+"téléchargés et que 10,2 kilo-octets sont attendus. La taille totale est "
+"toujours représentées sur 4 digits pour des raisons de place disponible. "
+"Après cet affichage de taille, se trouve une barre de progression pour le "
+"téléchargement du fichier lui-même. L'élément suivant est la vitesse "
+"instantanée de téléchargement. Elle est mise à jour toutes les 5 secondes et "
+"représente la vitesse de transfert pour cette période. Enfin, est affiché la "
+"temps de téléchargement restant estimé. Cette information est mise "
+"régulièrement à jour et représete la durée estimée de téléchargement de "
+"toute ce qui est nécessaire, à la vitesse affichée."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"La ligne d'état est mise à jour chaque demi-seconde afin de fournir un "
+"retour régulier sur la progression du téléchargement alors que les lignes "
+"« Réception de » reculent d'une unité à chaque fois qu'un nouveau fichier "
+"est démarré. Comme l'état est mis à jour régulièrement, il ne peut pas "
+"servir pour la journalisation dans un fichier. Il est nécessaire d'utiliser "
+"l'option <literal>-q</literal> pour supprimer cet affichage."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"APT utilise <command>dpkg</command> pour installer les archives et bascule "
+"vers l'interface de ce programme une fois le téléchargement terminé. "
+"<command>dpkg</command> peut poser un certain nombre de questions pendant le "
+"traitement des paquets, qui peuvent eux-même être amener à poser des "
+"questions. Chacune de ces questions comporte un description de ce qui est "
+"attendu et elles sont trop variables d'un paquet à l'autre pour qu'une "
+"description détaillée soit donnée dans ce document."
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "Utilisation d'APT hors ligne"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"Ce document décrit la méthode d'utilisation d'APT hors connexion à un "
+"réseau, et plus particulièrement une approche « sneaker-net » pour les mises "
+"à jour."
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "Introduction"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "Aperçu"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"Normalement, APT a besoin d'avoir un accès direct à une archive Debian, soit "
+"sur un support local, soit via le réseau. Un autre cas intéressant à traiter "
+"est celui d'une machine dotée d'une liaison peu rapide (comme un modem) avec "
+"une autre possédant une connexion à haut débit mais située à distance."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"Une solution est d'utiliser un support amovible de grande taille tel qu'un "
+"disque Zip ou un disque Superdisk (NdT : ce document est daté..:-)). Bien "
+"que ces supports ne disposent pas d'assez de place pour héberger une archive "
+"Debian complète, ils peuvent toutefois contenir un sous-ensemble de taille "
+"suffisante pour les besoins de nombreux utilisateurs. L'idée est alors "
+"d'utiliser APT pour créer une liste de paquets nécessaires, puis de les "
+"récupérer avec une machine disposant d'une bonne connectivité. Il est même "
+"possible d'utiliser soit une autre machine Debian avec APT soit un autre "
+"système d'exploitation et un outil de téléchargement tel que wget. Dans ce "
+"qui suit, <emphasis>machine distante</emphasis> désignera la machine qui "
+"télécharge les paquets et <emphasis>machine cible</emphasis>, celle qui a "
+"une connectivité limitée."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"Il est nécessaire de manipuler le fichier de configuration d'APT de manière "
+"intelligente. Le préalable est d'indiquer à APT d'examiner le contenu d'un "
+"disque pour y trouver les fichiers d'archive. Ce disque doit utiliser un "
+"système de fichier autorisant les noms longs, par exemple ext2, fat32 ou "
+"vfat."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "Utilisation d'APT sur les deux machines"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"Si APT existe sur les deux machines, le cas est relativement simple. L'idée "
+"de base est de mettre une copie du fichier d'état sur le disque et "
+"d'utiliser la machine distante pour récupérer la dernière liste de paquets "
+"et choisir ceux à télécharger. La structure des répertoires du disque "
+"devraient ressembler à :"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "Le fichier de configuration"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"Le fichier de configuration indique à APT où conserver ses fichiers sur le "
+"disque et d'utiliser également les fichiers de configuration du disque. Le "
+"fichier sources.list devrait référencer les sites que vous souhaitez "
+"utiliser depuis la machine distante et le fichier d'état doit être une copie "
+"de <emphasis>/var/lib/dpkg/status</emphasis> de l'<emphasis>ordinateur "
+"cible</emphasis>. Veuillez noter que si sous utilisez une archive locale, "
+"les URI doivent en être copiés. La syntaxe est la même que celle des URI "
+"fichiers."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt.conf</emphasis> doit avoir les informations nécessaires pour "
+"qu'APT utilise le disque.disc:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"Plus d'informations peuvent être trouvées dans la page de manuel du fichier "
+"apt.conf et dans l'exemple de fichier de configuration que l'on peut trouver "
+"dans <emphasis>/usr/share/doc/apt/examples/apt.conf</emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"Sur la machine cible, il est d'abord nécessaire de monter le disque et y "
+"copier le fichier <emphasis>/var/lib/dpkg/status</emphasis>. Il sera aussi "
+"nécessaire de créer les répertoires dans l'aperçu (Overview), "
+"<emphasis>archives/partial/</emphasis> and <emphasis>lists/partial/</"
+"emphasis>. Connecter ensuite le disque à la machine distante et configurer "
+"le fichier sources.list. Sur la machine distante, exécuter la séquence de "
+"commandes suivante :"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT récupère les fichiers des paquets ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT récupère tous les fichiers nécessaires à la mise à jour de la machine distante ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"La commande dist-upgrade peut être remplacée par toute autres commande "
+"usuelle d'APT, notamment dselect-upgrade. Il est même possible d'utiliser "
+"une interface comme <emphasis>dselect</emphasis>. Cependant, cela complique "
+"la communication des choix vers l'ordinateur local."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"Après cette opération, le disque contiendra tous les fichiers d'index et les "
+"archives nécessaires pour mettre à jour la machine cible. Il est alors "
+"possible d'y ramener le disque et exécuter :"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT crée la copie locale des fichiers de cache ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Ou toute autre commande APT ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"Pour un fonctionnement correct, il est indispensable de ré-indiquer que le "
+"fichier d'état est le fichier local. Cela est très important."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"Si vous utilisez dselect, vous pouvez effectuer l'opération dangereuse "
+"consistant à copier disc/status en /var/lib/dpkg/status, afin que les choix "
+"effectués sur la machine distante soient mis à jour. Il est recommandé de "
+"n'éffectuer les choix que sur la machine locale, mais ce n'est pas toujours "
+"possible. NE COPIEZ PAS le fichier d'état si dpkg ou APT ont été exécutés "
+"dans l'intervalle."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "Utilisation d'APT et wget"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> est un outil classique de téléchargement qui peut "
+"être exécuté sur à peu près tout type de machine. À la différence de la "
+"méthode précédente, cela impose que la machine Debian a déjà une liste des "
+"paquets disponibles."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"L'idée de base est de créer un disque qui ne comporte que les fichiers "
+"archive téléchargés depuis le site distant. Cela peut être effectué avec "
+"l'option --print-uris d'apt-get puis de la préparation d'un script wget "
+"permettant de récupérer les paquets/"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "Fonctionnement"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"À la différence de la méthode précédente, aucun fichier de configuration "
+"spécifique n'est nécessaire. Seules les commandes standard d'APT seront "
+"utilisées pour créer la liste de ficheirs."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade \n"
+" [ Répondre négativement à la question, pour être sûr(e) que les actions vous conviennent ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"Toute autre commande que dist-upgrade peut être utilisée, y compris dselect-"
+"upgrade."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"Le fichier /disc/wget-script contiendra alors la liste des commandes wget à "
+"exécuter afin de récupérer les fichiers nécessaires. Ce script doit être "
+"exécuté depuis le point de montage du disque afin que les fichiers soient "
+"écrits sur le disque."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr "Sur la machine distante, il faudra alors exécuter l'équivalent de :"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ attendre.. ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"Une fois les fichiers téléchargés et le disque reconnecté à la machine "
+"Debian, l'installation peut se poursuivre avec :"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr "Cette commande utilisera les fichiers récupérés sur le disque."
+
+#~ msgid ""
+#~ "<literal>http::Proxy</literal> sets the default proxy to use for HTTP "
+#~ "URIs. It is in the standard form of <literal>http://[[user][:pass]@]host[:"
+#~ "port]/</literal>. Per host proxies can also be specified by using the "
+#~ "form <literal>http::Proxy::&lt;host&gt;</literal> with the special "
+#~ "keyword <literal>DIRECT</literal> meaning to use no proxies. If no one of "
+#~ "the above settings is specified, <envar>http_proxy</envar> environment "
+#~ "variable will be used."
+#~ msgstr ""
+#~ "<literal>http::Proxy</literal> est le mandataire (proxy) HTTP à utiliser "
+#~ "par défaut pour les URI HTTP. Il se présente sous la forme standard : "
+#~ "<literal>http://[[utilisateur][:mot_de_passe]@]hôte[:port]/</literal>. On "
+#~ "peut spécifier un mandataire particulier par hôte distant en utilisant la "
+#~ "syntaxe : <literal>http::Proxy::&lt;hôte&gt;</literal>. Le mot-clé "
+#~ "spécial <literal>DIRECT</literal> indique alors de n'utiliser aucun "
+#~ "mandataire pour l'hôte. Si aucun des paramètres précédents n'est défini, "
+#~ "la variable d'environnement <envar>http_proxy</envar> annule et remplace "
+#~ "toutes les options de mandataire HTTP."
+
+#~ msgid ""
+#~ "The <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> and "
+#~ "<literal>proxy</literal> options work for HTTPS URIs in the same way as "
+#~ "for the <literal>http</literal> method, and default to the same values if "
+#~ "they are not explicitly set. The <literal>Pipeline-Depth</literal> option "
+#~ "is not yet supported."
+#~ msgstr ""
+#~ "Les options <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> et "
+#~ "<literal>proxy</literal> fonctionnent pour les URI HTTPS de la même "
+#~ "manière que la méthode <literal>http</literal>. Les valeurs par défaut "
+#~ "sont les mêmes si elles ne sont pas indiquées. L'option <literal>Pipeline-"
+#~ "Depth</literal> n'est pas encore gérée."
+
+#~ msgid ""
+#~ "<literal>CaInfo</literal> suboption specifies place of file that holds "
+#~ "info about trusted certificates. <literal>&lt;host&gt;::CaInfo</literal> "
+#~ "is the corresponding per-host option. <literal>Verify-Peer</literal> "
+#~ "boolean suboption determines whether or not the server's host certificate "
+#~ "should be verified against trusted certificates. <literal>&lt;host&gt;::"
+#~ "Verify-Peer</literal> is the corresponding per-host option. "
+#~ "<literal>Verify-Host</literal> boolean suboption determines whether or "
+#~ "not the server's hostname should be verified. <literal>&lt;host&gt;::"
+#~ "Verify-Host</literal> is the corresponding per-host option. "
+#~ "<literal>SslCert</literal> determines what certificate to use for client "
+#~ "authentication. <literal>&lt;host&gt;::SslCert</literal> is the "
+#~ "corresponding per-host option. <literal>SslKey</literal> determines what "
+#~ "private key to use for client authentication. <literal>&lt;host&gt;::"
+#~ "SslKey</literal> is the corresponding per-host option. "
+#~ "<literal>SslForceVersion</literal> overrides default SSL version to use. "
+#~ "It can contain either of the strings '<literal>TLSv1</literal>' or "
+#~ "'<literal>SSLv3</literal>'. <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> is the corresponding per-host option."
+#~ msgstr ""
+#~ "La sous-option <literal>CaInfo</literal> spécifie le fichier contenant "
+#~ "les informations sur les certificats de confiance. La sous-option "
+#~ "booléenne <literal>Verify-Peer</literal> précise si le certificat d'hôte "
+#~ "du serveur doit être confronté aux certificats de confiance ou pas. La "
+#~ "sous-option booléenne <literal>Verify-Host</literal> précise s'il faut "
+#~ "vérifier ou pas le nom d'hôte du serveur. <literal>SslCert</literal> "
+#~ "détermine le certificat à utiliser pour l'authentification du client. "
+#~ "<literal>SslKey</literal> détermine quelle clé privée doit être utilisée "
+#~ "pour l'authentification du client. <literal>SslForceVersion</literal> "
+#~ "surcharge la valeur par défaut pour la version de SSL à utiliser et peut "
+#~ "contenir l'une des chaînes <literal>TLSv1</literal> ou <literal>SSLv3</"
+#~ "literal>."
+
+#~ msgid ""
+#~ "The http scheme specifies an HTTP server for the archive. If an "
+#~ "environment variable <envar>http_proxy</envar> is set with the format "
+#~ "http://server:port/, the proxy server specified in <envar>http_proxy</"
+#~ "envar> will be used. Users of authenticated HTTP/1.1 proxies may use a "
+#~ "string of the format http://user:pass@server:port/. Note that this is an "
+#~ "insecure method of authentication."
+#~ msgstr ""
+#~ "Le procédé <literal>http</literal> indique un serveur HTTP comme archive. "
+#~ "Si une variable d'environnement <envar>http_proxy</envar> (au format "
+#~ "http://server:port/) existe, le serveur mandataire indiqué par "
+#~ "<envar>http_proxy</envar> est utilisé. Quand un serveur mandataire "
+#~ "HTTP/1.1 demande une authentification, on peut utiliser la chaîne http://"
+#~ "user:pass@server:port/. Notez qu'il s'agit d'une méthode "
+#~ "d'authentification peu sûre."
+
+#~ msgid ""
+#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if "
+#~ "it encounters unauthenticated archives to give a slightly longer grace "
+#~ "period on this backward compatibility effecting change. This exception "
+#~ "will be removed in future releases and you can opt-out of this grace "
+#~ "period by setting the configuration option <option>Binary::apt-get::"
+#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> "
+#~ "or <option>--no-allow-insecure-repositories</option> on the command line."
+#~ msgstr ""
+#~ "Comme exception temporaire, &apt-get; (pas &apt; !) émet seulement une "
+#~ "mise en garde s'il rencontre des archives non authentifiées pour accorder "
+#~ "une période de grâce un peu plus longue à cette modification affectant la "
+#~ "compatibilité ascendante. Cette exception disparaîtra dans les futures "
+#~ "versions et vous pouvez renoncer à ce délai de grâce en configurant "
+#~ "l'option <option>Binary::apt-get::Acquire::AllowInsecureRepositories</"
+#~ "option> à <literal>false</literal> ou en passant l'option <option>--no-"
+#~ "allow-insecure-repositories</option> sur la ligne de commande."
+
+#~ msgid "Archive Configuration"
+#~ msgstr "Configuration d'une archive"
+
+#~ msgid "dpkg trigger usage (and related options)"
+#~ msgstr ""
+#~ "utilisation des actions différées (« triggers ») de dpkg (et options "
+#~ "associées)"
+
+#~ msgid ""
+#~ "APT can call &dpkg; in such a way as to let it make aggressive use of "
+#~ "triggers over multiple calls of &dpkg;. Without further options &dpkg; "
+#~ "will use triggers once each time it runs. Activating these options can "
+#~ "therefore decrease the time needed to perform the install or upgrade. "
+#~ "Note that it is intended to activate these options per default in the "
+#~ "future, but as it drastically changes the way APT calls &dpkg; it needs a "
+#~ "lot more testing. <emphasis>These options are therefore currently "
+#~ "experimental and should not be used in production environments.</"
+#~ "emphasis> It also breaks progress reporting such that all front-ends will "
+#~ "currently stay around half (or more) of the time in the 100% state while "
+#~ "it actually configures all packages."
+#~ msgstr ""
+#~ "APT peut lancer &dpkg; pour utiliser les actions différées de manière "
+#~ "agressive entre les appels successifs à &dpkg;. Sans options "
+#~ "supplémentaires, &dpkg; utilisera les actions différées une fois à "
+#~ "chacune de ses exécutions. Si ces options sont utilisées, le temps "
+#~ "d'exécution peut diminuer fortement dans les actions d'installation ou de "
+#~ "mise à jour. Il est prévu de les activer par défaut dans le futur mais "
+#~ "étant donné qu'elles changent notablement la méthode qu'utilise APT pour "
+#~ "lancer &dpkg;, elles ont besoin d'importantes validations. <emphasis>Ces "
+#~ "options sont donc expérimentales et ne devraient pas être utilisées avec "
+#~ "des environnements de production.</emphasis>. Elles modifient également "
+#~ "le suivi de progression et toutes les interfaces passeront la moitié du "
+#~ "temps à un état terminé à 100% pendant la configuration des paquets."
+
+#~ msgid ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+#~ msgstr ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+
+#~ msgid ""
+#~ "Note that it is not guaranteed that APT will support these options or "
+#~ "that these options will not cause (big) trouble in the future. If you "
+#~ "have understand the current risks and problems with these options, but "
+#~ "are brave enough to help testing them, create a new configuration file "
+#~ "and test a combination of options. Please report any bugs, problems and "
+#~ "improvements you encounter and make sure to note which options you have "
+#~ "used in your reports. Asking &dpkg; for help could also be useful for "
+#~ "debugging proposes, see e.g. <command>dpkg --audit</command>. A defensive "
+#~ "option combination would be <placeholder type=\"literallayout\" id=\"0\"/>"
+#~ msgstr ""
+#~ "Veuillez noter que rien ne garantit qu'APT gérera encore ces options dans "
+#~ "le futur ou qu'elles ne provoqueront pas de nombreux dégâts. Si vous avez "
+#~ "bien compris les implications de ce choix et êtes suffisamment motivé(e) "
+#~ "pour essayer ces options, il vous est donc possible de créer un nouveau "
+#~ "fichier de configuration et essayer une combinaison de ces options. "
+#~ "Veuillez signaler tout bogue, problèmes ou suggestions d'amélioration en "
+#~ "prenant soin de mentionner les options utilisées. Utiliser l'aide "
+#~ "apportée par &dpkg; peut également être utile pour le débogage, par "
+#~ "exemple <command>dpkg --audit</command>. Une combinaison intéressante "
+#~ "d'options pourrait être <placeholder type=\"literallayout\" id=\"0\"/>."
+
+#~ msgid ""
+#~ "Add the no triggers flag to all &dpkg; calls (except the ConfigurePending "
+#~ "call). See &dpkg; if you are interested in what this actually means. In "
+#~ "short: &dpkg; will not run the triggers when this flag is present unless "
+#~ "it is explicitly called to do so in an extra call. Note that this option "
+#~ "exists (undocumented) also in older APT versions with a slightly "
+#~ "different meaning: Previously these option only append --no-triggers to "
+#~ "the configure calls to &dpkg; - now APT will also add this flag to the "
+#~ "unpack and remove calls."
+#~ msgstr ""
+#~ "Ajoute l'option « no-triggers » à tous les appels à &dpkg; (hormis "
+#~ "l'appel « ConfigurePending »). Voir &dpkg; pour plus d'informations sur "
+#~ "la signification de cette option. En résumé, &dpkg; n'effectuera pas les "
+#~ "actions différées (« triggers ») si cette option est utilisée sauf si "
+#~ "cela est demandé explicitement dans une invocation supplémentaire. Cette "
+#~ "option existe en fait déjà (mais n'est pas documentée) dans de plus "
+#~ "anciennes version d'APT avec une signification légèrement différente : "
+#~ "elle n'ajoutait l'option « --no-triggers » qu'aux appels de &dpkg; avec "
+#~ "« configure » alors que cela sera désormais utilisé également avec les "
+#~ "appels à &dpkg; avec les options « unpack » et « remove »."
+
+#~ msgid ""
+#~ "Valid values are \"<literal>all</literal>\", \"<literal>smart</literal>\" "
+#~ "and \"<literal>no</literal>\". The default value is \"<literal>all</"
+#~ "literal>\", which causes APT to configure all packages. The "
+#~ "\"<literal>smart</literal>\" way is to configure only packages which need "
+#~ "to be configured before another package can be unpacked (Pre-Depends), "
+#~ "and let the rest be configured by &dpkg; with a call generated by the "
+#~ "ConfigurePending option (see below). On the other hand, \"<literal>no</"
+#~ "literal>\" will not configure anything, and totally relies on &dpkg; for "
+#~ "configuration (which at the moment will fail if a Pre-Depends is "
+#~ "encountered). Setting this option to any value other than <literal>all</"
+#~ "literal> will implicitly also activate the next option by default, as "
+#~ "otherwise the system could end in an unconfigured and potentially "
+#~ "unbootable state."
+#~ msgstr ""
+#~ "Les valeurs possibles sont « <literal>all</literal> », « <literal>smart</"
+#~ "literal> » et « <literal>no</literal> ». La valeur par défaut est "
+#~ "« <literal>all</literal> » où APT configure tous les paquets. La valeur "
+#~ "« <literal>smart</literal> » permet de ne configurer que les paquets qui "
+#~ "ont besoin de l'être avant la décompaction d'un autre paquet (à cause "
+#~ "d'une pré-dépendance) ; les autres configurations sont laissées pour un "
+#~ "appel ultérieur à &dpkg; via un appel créé par l'option ConfigurePending "
+#~ "(voir plus loin). L'option « <literal>no</literal> » ne provoquera aucune "
+#~ "configuration et s'en remettra totalement à &dpkg; pour ces opérations "
+#~ "(ce qui échouera en cas de pré-dépendances). Si cette option est définie "
+#~ "sur une valeur différente de « <literal>all</literal> », l'option "
+#~ "suivante sera activée par défaut pour éviter de placer le système dans un "
+#~ "état non configuré et donc éventuellement non amorçable."
+
+#~ msgid ""
+#~ "Useful for the <literal>smart</literal> configuration as a package which "
+#~ "has pending triggers is not considered as <literal>installed</literal>, "
+#~ "and &dpkg; treats them as <literal>unpacked</literal> currently which is "
+#~ "a showstopper for Pre-Dependencies (see debbugs #526774). Note that this "
+#~ "will process all triggers, not only the triggers needed to configure this "
+#~ "package."
+#~ msgstr ""
+#~ "Cette option est utile pour la configuration en mode « <literal>smart</"
+#~ "literal> ». En effet, un paquet qui a des actions différées "
+#~ "(« triggers ») en attente n'est pas considéré comme installé (état "
+#~ "« <literal>installed</literal> ») et &dpkg; le considère actuellement "
+#~ "comme simplement décompacté (état « <literal>unpacked</literal> ») ce qui "
+#~ "empêche une gestion correcte des pré-dépendances (voir le bogue Debian "
+#~ "#526774). Veuillez noter que cette option provoquera la gestion de toutes "
+#~ "les actions différées, pas seulement celles concernant le paquet en cours "
+#~ "de traitement."
+
+#~ msgid ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+#~ msgstr ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+
+#~ msgid ""
+#~ "Essential packages (and their dependencies) should be configured "
+#~ "immediately after unpacking. It is a good idea to do this quite early in "
+#~ "the upgrade process as these configure calls also currently require "
+#~ "<literal>DPkg::TriggersPending</literal> which will run quite a few "
+#~ "triggers (which may not be needed). Essentials get per default a high "
+#~ "score but the immediate flag is relatively low (a package which has a Pre-"
+#~ "Depends is rated higher). These option and the others in the same group "
+#~ "can be used to change the scoring. The following example shows the "
+#~ "settings with their default values. <placeholder type=\"literallayout\" "
+#~ "id=\"0\"/>"
+#~ msgstr ""
+#~ "Les paquets essentiels (et leurs dépendances) devraient être configurés "
+#~ "après avoir été décompressés. Il est conseillé que cette opération ait "
+#~ "lieu le plus tôt possible dans le processus de mise à jour car ces "
+#~ "opérations de configuration nécessitent également <literal>DPkg::"
+#~ "TriggersPending</literal>, ce qui peut conduire à l'exécution de certains "
+#~ "actions différées qui ne sont pas nécessairement utiles. Les paquets "
+#~ "essentiels obtiennent par défaut un score élevé mais le marqueur "
+#~ "« immédiat » implique un score assez bas (par exemple un paquet qui "
+#~ "comporte des prédépendances obtient un score plus élevé). Cette option et "
+#~ "les options du même groupe permettent de modifier la façon d'attribuer un "
+#~ "score. L'exemple ci-dessous indique ces réglages avec leurs valeurs par "
+#~ "défaut. <placeholder type=\"literallayout\" id=\"0\"/>"
+
+#~ msgid "List fingerprints of trusted keys."
+#~ msgstr "Afficher les empreintes des clés fiables."
+
+#~ msgid "Local trust database of archive keys."
+#~ msgstr "Base de données locale de fiabilité des clés de l'archive."
+
+#~ msgid "&keyring-filename;"
+#~ msgstr "&keyring-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive trusted keys."
+#~ msgstr "Trousseau des clés fiables de l'archive &keyring-distro;."
+
+#~ msgid "&keyring-removed-filename;"
+#~ msgstr "&keyring-removed-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive removed trusted keys."
+#~ msgstr ""
+#~ "Trousseau des clés fiables supprimées de l'archive &keyring-distro;."
+
+#, fuzzy
+#~| msgid "&apt-cache; &apt-conf;"
+#~ msgid "&apt-get;, &apt-conf;"
+#~ msgstr "&apt-cache; &apt-conf;"
+
+#~ msgid ""
+#~ "This is a space separated list of all the architectures that appear under "
+#~ "search section. The special architecture 'source' is used to indicate "
+#~ "that this tree has a source archive."
+#~ msgstr ""
+#~ "C'est une liste de toutes les architectures séparées par des espaces qui "
+#~ "appartiennent à chaque section. L'architecture spéciale « source » "
+#~ "indique que l'arborescence est une arborescence de sources."
+
+#~ msgid ""
+#~ "<command>apt</command> (Advanced Package Tool) is the command-line tool "
+#~ "for handling packages. It provides a commandline interface for the "
+#~ "package management of the system. See also &apt-get; and &apt-cache; for "
+#~ "more low-level command options."
+#~ msgstr ""
+#~ "<command>apt</command> (Advanced Package Tool) est un outil en ligne de "
+#~ "commande pour gérer les paquets. Il fournit une interface en ligne de "
+#~ "commande au système de gestion de paquets. Voir également &apt-get; et "
+#~ "&apt-cache; pour davantage d'options en ligne de commande."
+
+#~ msgid ""
+#~ "<literal>search</literal> searches for the given term(s) and display "
+#~ "matching packages."
+#~ msgstr ""
+#~ "La commande <literal>search</literal> recherche le(s) terme(s) donnée(s) "
+#~ "et affiche les paquets correspondants."
+
+#~ msgid ""
+#~ "<literal>show</literal> shows the package information for the given "
+#~ "package(s)."
+#~ msgstr ""
+#~ "La commande <literal>show</literal> affiche les informations sur le(s) "
+#~ "paquet(s) donné(s)."
+
+#~ msgid ""
+#~ "<literal>install</literal> is followed by one or more package names "
+#~ "desired for installation or upgrading."
+#~ msgstr ""
+#~ "La commande <literal>install</literal> est suivie du nom de un ou "
+#~ "plusieurs paquets dont l'installation ou la mise à jour est souhaitée."
+
+#~ msgid ""
+#~ "<literal>update</literal> is used to resynchronize the package index "
+#~ "files from their sources."
+#~ msgstr ""
+#~ "La commande <literal>update</literal> permet de resynchroniser un fichier "
+#~ "d'index répertoriant les paquets disponibles et sa source."
+
+#~ msgid "Script usage"
+#~ msgstr "Utilisation de scripts"
+
+#~ msgid "Differences to &apt-get;"
+#~ msgstr "Différences avec &apt-get;"
+
+#~ msgid ""
+#~ "The <command>apt</command> command is meant to be pleasant for end users "
+#~ "and does not need to be backward compatible like &apt-get;. Therefore "
+#~ "some options are different:"
+#~ msgstr ""
+#~ "La commande <command>apt</command> est sensée être agréable à "
+#~ "l'utilisateur et ne pas avoir besoin de compatibilité ascendante comme "
+#~ "&apt-get;. Par conséquent, certaines options sont différentes :"
+
+#~ msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
+#~ msgstr "L'option <literal>DPkg::Progress-Fancy</literal> est activée."
+
+#~ msgid "The option <literal>APT::Color</literal> is enabled."
+#~ msgstr "L'option <literal>APT::Color</literal> est activée."
+
+#~ msgid ""
+#~ "The option <literal>upgrade</literal> has <literal>--with-new-pkgs</"
+#~ "literal> enabled by default."
+#~ msgstr ""
+#~ "La commande <literal>upgrade</literal> a l'option <literal>--with-new-"
+#~ "pkgs</literal> activée par défaut."
+
+#~ msgid ""
+#~ "Pass advanced options to gpg. With adv --recv-key you can download the "
+#~ "public key."
+#~ msgstr ""
+#~ "Passer des options avancées à gpg. Avec la commande adv --recv-key, il "
+#~ "est possible de télécharger une clé publique."
+
+#~ msgid "mark/unmark a package as being automatically-installed"
+#~ msgstr "Indiquer si un paquet a été installé automatiquement ou non"
+
+#~ msgid ""
+#~ "<command>apt-mark</command> will change whether a package has been marked "
+#~ "as being automatically installed."
+#~ msgstr ""
+#~ "Avec la commande <command>apt-mark</command>, on peut indiquer si un "
+#~ "paquet a été automatiquement installé ou pas."
+
+#~ msgid ""
+#~ "<literal>hold</literal> is used to mark a package as held back, which "
+#~ "will prevent the package from being automatically installed, upgraded or "
+#~ "removed. The command is only a wrapper around <command>dpkg --set-"
+#~ "selections</command> and the state is therefore maintained by &dpkg; and "
+#~ "not affected by the <option>--file</option> option."
+#~ msgstr ""
+#~ "<literal>hold</literal> permet de marquer un paquet comme conservé, ce "
+#~ "qui empêchera de l'installer, de le mettre à jour ou de le supprimer "
+#~ "automatiquement. Cette commande est une simple envelopper à la commande "
+#~ "<command>dpkg --set-selections</command>, l'état étant géré par &dpkg; et "
+#~ "non affecté par l'option <option>--file</option>."
+
+#~ msgid ""
+#~ "If a package comes from a archive without a signature, or with a "
+#~ "signature that apt does not have a key for, that package is considered "
+#~ "untrusted, and installing it will result in a big warning. <command>apt-"
+#~ "get</command> will currently only warn for unsigned archives; future "
+#~ "releases might force all sources to be verified before downloading "
+#~ "packages from them."
+#~ msgstr ""
+#~ "Quand un paquet provient d'une archive sans signature ou d'une archive "
+#~ "avec une signature dont apt ne possède pas la clé, ce paquet n'est pas "
+#~ "considéré comme fiable et son installation provoquera un avertissement. "
+#~ "Pour l'instant, <command>apt-get</command> ne signale que les archives "
+#~ "sans signature ; les prochaines versions pourraient rendre obligatoire la "
+#~ "vérification des sources avant tout téléchargement de paquet."
+
+#~ msgid ""
+#~ "No action; perform a simulation of events that would occur but do not "
+#~ "actually change the system. Configuration Item: <literal>APT::Get::"
+#~ "Simulate</literal>."
+#~ msgstr ""
+#~ "Pas d'action ; simule les événements qui devraient se produire sans "
+#~ "effectuer de changement réel sur le système. Élément de configuration : "
+#~ "<literal>APT::Get::Simulate</literal>."
+
+#~ msgid ""
+#~ "Simulated runs performed as a user will automatically deactivate locking "
+#~ "(<literal>Debug::NoLocking</literal>), and if the option <literal>APT::"
+#~ "Get::Show-User-Simulation-Note</literal> is set (as it is by default) a "
+#~ "notice will also be displayed indicating that this is only a simulation. "
+#~ "Runs performed as root do not trigger either NoLocking or the notice - "
+#~ "superusers should know what they are doing without further warnings from "
+#~ "<literal>apt-get</literal>."
+#~ msgstr ""
+#~ "Lorsque la simulation est effectuée par un utilisateur sans privilège, le "
+#~ "verrouillage sera désactivé automatiquement (<literal>Debug::NoLocking</"
+#~ "literal>). Une mention explicite indiquant qu'il s'agit d'une simple "
+#~ "simulation sera affichée si l'option <literal>APT::Get::Show-User-"
+#~ "Simulation-Note</literal> est activée (elle est active par défaut). Ni la "
+#~ "désactivation du verrou (NoLocking) ni l'affichage de la mention de "
+#~ "simulation ne seront déclenchées si la commande est lancée par "
+#~ "l'utilisateur root (pour qui il n'est pas jugé utile qu'<literal>apt-get</"
+#~ "literal> envoie de telles notifications)."
+
+#~ msgid ""
+#~ "Ignore if packages can't be authenticated and don't prompt about it. "
+#~ "This is useful for tools like pbuilder. Configuration Item: "
+#~ "<literal>APT::Get::AllowUnauthenticated</literal>."
+#~ msgstr ""
+#~ "Ignorer le fait que les paquets ne peuvent pas être authentifiés ; ne le "
+#~ "signale pas à l'utilisateur. Cette option est très utile pour certains "
+#~ "outils comme pbuilder. Élément de configuration : <literal>APT::Get::"
+#~ "AllowUnauthenticated</literal>."
+
+#~ msgid ""
+#~ "Version 2 of this protocol dumps more information, including the protocol "
+#~ "version, the APT configuration space and the packages, files and versions "
+#~ "being changed. Version 3 adds the architecture and <literal>MultiArch</"
+#~ "literal> flag to each version being dumped."
+#~ msgstr ""
+#~ "La deuxième version de ce protocole donne plus de renseignements : on "
+#~ "obtient la version du protocole, la configuration de APT et les paquets, "
+#~ "fichiers ou versions qui ont changé. La troisième version ajoute "
+#~ "l'architecture et le marqueur <literal>MultiArch</literal> à chaque "
+#~ "version déposée."
+
+#~ msgid ""
+#~ "to the versions that are not installed and do not belong to the target "
+#~ "release."
+#~ msgstr ""
+#~ "est affectée aux versions qui ne sont pas installées et qui "
+#~ "n'appartiennent pas à la distribution par défaut."
+
+#~ msgid ""
+#~ "Each line specifying a source starts with type (e.g. <literal>deb-src</"
+#~ "literal>) followed by options and arguments for this type. Individual "
+#~ "entries cannot be continued onto a following line. Empty lines are "
+#~ "ignored, and a <literal>#</literal> character anywhere on a line marks "
+#~ "the remainder of that line as a comment."
+#~ msgstr ""
+#~ "Chaque ligne qui indique une source commence par son type (p. ex. "
+#~ "<literal>deb-src</literal>), suivi d'options et paramètres pour ce type. "
+#~ "Les entrées individuelles ne peuvent pas être multilignes. Les lignes "
+#~ "vides sont ignorées et un caractère <literal>#</literal> sur une ligne "
+#~ "indique que le reste de la ligne est un commentaire."
+
+#~ msgid "deb [ options ] uri suite [component1] [component2] [...]"
+#~ msgstr "deb [ options ] uri suite [composant1] [composant2] [...]"
+
+#~ msgid ""
+#~ " Types: deb deb-src\n"
+#~ " URIs: http://example.com\n"
+#~ " Suites: stable testing\n"
+#~ " Sections: component1 component2\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ "\n"
+#~ " Types: deb\n"
+#~ " URIs: http://another.example.com\n"
+#~ " Suites: experimental\n"
+#~ " Sections: component1 component2\n"
+#~ " Enabled: no\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ " "
+#~ msgstr ""
+#~ " Types: deb deb-src\n"
+#~ " URIs: http://example.com\n"
+#~ " Suites: stable testing\n"
+#~ " Sections: component1 component2\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ "\n"
+#~ " Types: deb\n"
+#~ " URIs: http://another.example.com\n"
+#~ " Suites: experimental\n"
+#~ " Sections: composant1 composant2\n"
+#~ " Enabled: no\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ " "
+
+#~ msgid ""
+#~ "<literal>options</literal> is always optional and needs to be surrounded "
+#~ "by square brackets. It can consist of multiple settings in the form "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>. Multiple settings are separated by spaces. The "
+#~ "following settings are supported by APT (note however that unsupported "
+#~ "settings will be ignored silently):"
+#~ msgstr ""
+#~ "<literal>options</literal> est toujours optionnel et doit être entouré "
+#~ "par des crochets. It est constitué de réglages multiples sous la forme "
+#~ "<literal><replaceable>réglage</replaceable>=<replaceable>valeur</"
+#~ "replaceable></literal>. Des réglages multiples sont séparés par des "
+#~ "espaces. Les réglages suivants sont gérés par APT (des réglages non gérés "
+#~ "seront ignorés silencieusement) :"
+
+#~ msgid ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> and <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> which can be "
+#~ "used to add/remove architectures from the set which will be downloaded."
+#~ msgstr ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> et <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> qui peuvent "
+#~ "être utilisés pour ajouter ou supprimer des architectures dans l'ensemble "
+#~ "qui sera téléchargée."
+
+#~ msgid ""
+#~ "<literal>trusted=yes</literal> can be set to indicate that packages from "
+#~ "this source are always authenticated even if the <filename>Release</"
+#~ "filename> file is not signed or the signature can't be checked. This "
+#~ "disables parts of &apt-secure; and should therefore only be used in a "
+#~ "local and trusted context. <literal>trusted=no</literal> is the opposite "
+#~ "which handles even correctly authenticated sources as not authenticated."
+#~ msgstr ""
+#~ "<literal>trusted=yes</literal> peut être utilisée pour indiquer que les "
+#~ "paquets issus de cette source doivent être authentifiés même si le "
+#~ "fichier <filename>Release</filename> n'est pas signé ou que la signature "
+#~ "ne peut pas être vérifiée. Cela désactive certaines parties d'&apt-"
+#~ "secure; et ne devrait donc être utilisé que dans un contexte local ou "
+#~ "sûr. <literal>trusted=no</literal> est l'opposé et considérera même les "
+#~ "sources correctement authentifiées comme non authentifiées."
+
+#~ msgid "Some examples:"
+#~ msgstr "Exemples :"
+
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+
+#~ msgid "apt"
+#~ msgstr "apt"
+
+#~ msgid "16 June 1998"
+#~ msgstr "16 Juin 1998"
+
+#~ msgid "Debian"
+#~ msgstr "Debian"
+
+#~ msgid "NAME"
+#~ msgstr "NOM"
+
+#~ msgid "apt - Advanced Package Tool"
+#~ msgstr "apt - Outil complet de gestion de paquets"
+
+#~ msgid "SYNOPSIS"
+#~ msgstr "RÉSUMÉ"
+
+#~ msgid "B<apt>"
+#~ msgstr "B<apt>"
+
+#~ msgid "DESCRIPTION"
+#~ msgstr "DESCRIPTION"
+
+#, fuzzy
+#~| msgid ""
+#~| "APT is a management system for software packages. For normal day to day "
+#~| "package management there are several front-ends available, such as "
+#~| "B<aptitude>(8) for the command line or B<synaptic>(8) for the X Window "
+#~| "System. Some options are only implemented in B<apt-get>(8) though."
+#~ msgid ""
+#~ "For normal day to day package management there are several front-ends "
+#~ "available, such as B<aptitude>(8) for the command line or "
+#~ "B<synaptic>(8) for the X Window System. Some options are only "
+#~ "implemented in B<apt-get>(8) though."
+#~ msgstr ""
+#~ "APT est un système de gestion de paquets logiciels. Pour la gestion au "
+#~ "quotidien des paquets, il existe plusieurs frontaux comme B<aptitude>(9) "
+#~ "en ligne de commande ou B<synaptic>(8) pour X Window. Cependant, "
+#~ "certaines options ne sont disponibles que dans B<apt-get>(8)."
+
+#~ msgid "SEE ALSO"
+#~ msgstr "VOIR AUSSI"
+
+#, fuzzy
+#~| msgid ""
+#~| "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~| "B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgid ""
+#~ "B<apt>(8), B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources."
+#~ "list>(5), B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgstr ""
+#~ "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~ "B<apt_preferences>(5), B<apt-secure>(8)"
+
+#~ msgid "DIAGNOSTICS"
+#~ msgstr "DIAGNOSTICS"
+
+#~ msgid "apt returns zero on normal operation, decimal 100 on error."
+#~ msgstr ""
+#~ "apt renvoie zéro après une opération normale et la valeur décimale 100 en "
+#~ "cas d'erreur."
+
+#~ msgid "BUGS"
+#~ msgstr "BOGUES"
+
+#~ msgid "This manpage isn't even started."
+#~ msgstr "Cette page de manuel n'a même pas commencé à être rédigée."
+
+#~ msgid ""
+#~ "See E<lt>http://bugs.debian.org/aptE<gt>. If you wish to report a bug in "
+#~ "B<apt>, please see I</usr/share/doc/debian/bug-reporting.txt> or the "
+#~ "B<reportbug>(1) command."
+#~ msgstr ""
+#~ "Voir E<lt>http://bugs.debian.org/aptE<gt>. Si vous souhaitez signaler un "
+#~ "bogue dans B<apt>, veuillez lire I</usr/share/doc/debian/bug-reporting."
+#~ "txt> ou utiliser la commande B<reportbug>(1)."
+
+#~ msgid "AUTHOR"
+#~ msgstr "AUTEURS"
+
+#~ msgid "apt was written by the APT team E<lt>apt@packages.debian.orgE<gt>."
+#~ msgstr ""
+#~ "apt a été écrit par l'équipe de développement APT E<lt>apt@packages."
+#~ "debian.orgE<gt>."
+
+#~ msgid "Package resource list for APT"
+#~ msgstr "Liste des sources de paquets"
+
+#~ msgid ""
+#~ "As the configuration can be deferred to be done at the end by &dpkg; it "
+#~ "can be tried to order the unpack series only by critical needs, e.g. by "
+#~ "Pre-Depends. Default is true and therefore the \"old\" method of ordering "
+#~ "in various steps by everything. While both method were present in earlier "
+#~ "APT versions the <literal>OrderCritical</literal> method was unused, so "
+#~ "this method is very experimental and needs further improvements before "
+#~ "becoming really useful."
+#~ msgstr ""
+#~ "Cette option permet de ne trier les opérations de décompactage qu'en "
+#~ "fonction de leur criticité (c'est à dire en ne considérant que les pré-"
+#~ "dépendances) dans le cas où la configuration des paquets est différée "
+#~ "pour n'être effectuée qu'à la fin par &dpkg;. Cette option est active par "
+#~ "défaut, ce qui revient à la méthode traditionnelle où les opérations ont "
+#~ "lieu en plusieurs étapes, selon l'ensemble des critères de tri. Bien que "
+#~ "les deux méthodes existent même dans les versions, la méthode "
+#~ "« <literal>OrderCritical</literal> » n'était pas utilisée. Elle doit donc "
+#~ "être considérée comme très expérimentale et a besoin de nombreuses "
+#~ "améliorations avant de devenir réellement utile. (Note du traducteur : la "
+#~ "version originale de cette partie des pages de manuel est très confuse. "
+#~ "Il est donc conseillé de s'y reporter en cas de doute car le contresens "
+#~ "de traduction n'est pas exclu...)."
+
+#~ msgid "Dump the default configuration to standard error on startup."
+#~ msgstr ""
+#~ "Affiche, au lancement, l'ensemble de la configuration sur la sortie "
+#~ "d'erreur standard."
+
+#~ msgid ""
+#~ "Defaults to on which will cause APT to install essential and important "
+#~ "packages as fast as possible in the install/upgrade operation. This is "
+#~ "done to limit the effect of a failing &dpkg; call: If this option is "
+#~ "disabled APT does treat an important package in the same way as an extra "
+#~ "package: Between the unpacking of the important package A and his "
+#~ "configuration can then be many other unpack or configuration calls, e.g. "
+#~ "for package B which has no relation to A, but causes the dpkg call to "
+#~ "fail (e.g. because maintainer script of package B generates an error) "
+#~ "which results in a system state in which package A is unpacked but "
+#~ "unconfigured - each package depending on A is now no longer guaranteed to "
+#~ "work as their dependency on A is not longer satisfied. The immediate "
+#~ "configuration marker is also applied to all dependencies which can "
+#~ "generate a problem if the dependencies e.g. form a circle as a dependency "
+#~ "with the immediate flag is comparable with a Pre-Dependency. So in theory "
+#~ "it is possible that APT encounters a situation in which it is unable to "
+#~ "perform immediate configuration, errors out and refers to this option so "
+#~ "the user can deactivate the immediate configuration temporarily to be "
+#~ "able to perform an install/upgrade again. Note the use of the word "
+#~ "\"theory\" here as this problem was only encountered by now in real world "
+#~ "a few times in non-stable distribution versions and was caused by wrong "
+#~ "dependencies of the package in question or by a system in an already "
+#~ "broken state, so you should not blindly disable this option as the "
+#~ "mentioned scenario above is not the only problem immediate configuration "
+#~ "can help to prevent in the first place. Before a big operation like "
+#~ "<literal>dist-upgrade</literal> is run with this option disabled it "
+#~ "should be tried to explicitly <literal>install</literal> the package APT "
+#~ "is unable to configure immediately, but please make sure to report your "
+#~ "problem also to your distribution and to the APT team with the buglink "
+#~ "below so they can work on improving or correcting the upgrade process."
+#~ msgstr ""
+#~ "La valeur par défaut de ce réglage est « on » ce qui conduira APT à "
+#~ "installer les paquets essentiels et importants dès que possible pendant "
+#~ "les opérations d'installation ou de mise à jour. Cela permet de limiter "
+#~ "les conséquences de l'échec d'un appel à &dpkg; : si cette option est "
+#~ "désactivée, APT gérera un paquet important de la même manière qu'un "
+#~ "paquet « extra » ; entre le dépaquetage du paquet important A et sa "
+#~ "configuration pourront prendre place de nombreux autres opérations de "
+#~ "dépaquetage ou de configuration. Ainsi, si le paquet B, qui n'a pas de "
+#~ "rapport avec A, provoque une erreur de &dpkg; (p. ex. en cas d'erreur "
+#~ "dans les scripts du responsable), le paquet A sera alors dans l'état "
+#~ "installé mais non configuré et chaque paquet qui en dépend ne "
+#~ "fonctionnera plus nécessairement puisque sa dépendance n'est pas "
+#~ "satisfaite. Le marqueur de configuration immédiate sera aussi utilisé "
+#~ "pour toute dépendance qui peut créer un problème, par exemple les "
+#~ "dépendances circulaires. En effet, utiliser le marqueur de configuration "
+#~ "immédiate revient à gérer une pré-dépendance. Il est donc possible, en "
+#~ "théorie, qu'APT rencontre une situation où il lui est impossible "
+#~ "d'effectuer la configuration immédiate, qu'il se termine alors avec une "
+#~ "erreur en faisant référence à cette option afin que l'utilisateur puisse "
+#~ "la désactiver temporairement pour retenter l'opération d'installation ou "
+#~ "de mise à jour. Il est à noter que « en théorie » indique ici que cette "
+#~ "situation n'a été rencontrée que dans de rares cas, sur des versions "
+#~ "instables de distributions, la cause étant des dépendances incorrectes ou "
+#~ "un système déjà dans un état instable. Il est donc déconseillé de "
+#~ "désactiver cette option sans réfléchir car la situation décrite "
+#~ "précédemment n'est qu'un des cas où la configuration immédiate permet de "
+#~ "résoudre des situations complexes. Avant de tenter une opération telle "
+#~ "que <literal>dist-upgrade</literal> avec cette option désactivée, il est "
+#~ "largement préférable d'essayer une opération <literal>install</literal> "
+#~ "sur le paquet qu'APT ne peut configurer immédiatement. Il est également "
+#~ "conseillé de signaler ce type de problème dans le système de suivi de "
+#~ "bogues de la distribution utilisée afin qu'il soit étudié et corrigé."
+
+#~ msgid ""
+#~ "The package resource list is used to locate archives of the package "
+#~ "distribution system in use on the system. At this time, this manual page "
+#~ "documents only the packaging system used by the Debian system. This "
+#~ "control file is <filename>/etc/apt/sources.list</filename>."
+#~ msgstr ""
+#~ "La liste des sources de paquets indique où trouver les archives du "
+#~ "système de distribution de paquets utilisé. Pour l'instant, cette page de "
+#~ "manuel ne documente que le système d'empaquetage utilisé par le système "
+#~ "Debian GNU/Linux. Ce fichier de contrôle est <filename>/etc/apt/sources."
+#~ "list</filename>."
+
+#~ msgid ""
+#~ "The source list is designed to support any number of active sources and a "
+#~ "variety of source media. The file lists one source per line, with the "
+#~ "most preferred source listed first. The format of each line is: "
+#~ "<literal>type uri args</literal> The first item, <literal>type</literal> "
+#~ "determines the format for <literal>args</literal>. <literal>uri</literal> "
+#~ "is a Universal Resource Identifier (URI), which is a superset of the more "
+#~ "specific and well-known Universal Resource Locator, or URL. The rest of "
+#~ "the line can be marked as a comment by using a #."
+#~ msgstr ""
+#~ "La liste des sources est conçue pour gérer un nombre quelconque de "
+#~ "sources actives et différents média. Le fichier présente une source par "
+#~ "ligne et la source préférée apparaît en premier. Le format de chaque "
+#~ "ligne est : <literal>type uri paramètres</literal>. Le premier élément, "
+#~ "<literal>type</literal>, détermine le format des <literal>paramètres</"
+#~ "literal>. <literal>uri</literal> est un identificateur universel de "
+#~ "ressources (URI), qui est un sur-ensemble du plus spécifique et bien "
+#~ "connu repère universel de ressources, ou URL. La fin de la ligne peut "
+#~ "être un commentaire commençant par un caractère #."
+
+#~ msgid ""
+#~ "<literal>gencaches</literal> performs the same operation as <command>apt-"
+#~ "get check</command>. It builds the source and package caches from the "
+#~ "sources in &sources-list; and from <filename>/var/lib/dpkg/status</"
+#~ "filename>."
+#~ msgstr ""
+#~ "La commande <literal>gencaches</literal> fait la même chose que "
+#~ "<command>apt-get check</command>. Elle construit les caches des sources "
+#~ "et des paquets à partir des sources répertoriées dans &sources-list; et "
+#~ "dans <filename>/var/lib/dpkg/status</filename>."
+
+#~ msgid ""
+#~ "One setting is provided to control the pipeline depth in cases where the "
+#~ "remote server is not RFC conforming or buggy (such as Squid 2.0.2). "
+#~ "<literal>Acquire::http::Pipeline-Depth</literal> can be a value from 0 to "
+#~ "5 indicating how many outstanding requests APT should send. A value of "
+#~ "zero MUST be specified if the remote host does not properly linger on TCP "
+#~ "connections - otherwise data corruption will occur. Hosts which require "
+#~ "this are in violation of RFC 2068."
+#~ msgstr ""
+#~ "Une option de configuration est fournie pour contrôler la profondeur du "
+#~ "tube pour le cas où un serveur distant n'est pas conforme à la RFC ou est "
+#~ "bogué (comme Squid 2.0.2). <literal>Acquire::http::Pipeline-Depth </"
+#~ "literal> a une valeur comprise entre 0 et 5 : elle indique le nombre de "
+#~ "requêtes en attente qui peuvent être émises. Quand la machine distante ne "
+#~ "conserve pas correctement les connexions TCP, la valeur doit égale à 0. "
+#~ "Dans le cas contraire, des données seront corrompues. Les machines qui "
+#~ "ont besoin de cette option ne respectent pas la RFC 2068."
+
+#~ msgid ""
+#~ "Update the local keyring with the keyring of Debian archive keys and "
+#~ "removes from the keyring the archive keys which are no longer valid."
+#~ msgstr ""
+#~ "Mettre à jour le trousseau de clés local avec le trousseau de clés de "
+#~ "l'archive Debian et supprimer les clés qui y sont périmées."
+
+#, fuzzy
+#~| msgid ""
+#~| "Seconds the Release file should be considered valid after it was "
+#~| "created. The default is \"for ever\" (0) if the Release file of the "
+#~| "archive doesn't include a <literal>Valid-Until</literal> header. If it "
+#~| "does then this date is the default. The date from the Release file or "
+#~| "the date specified by the creation time of the Release file "
+#~| "(<literal>Date</literal> header) plus the seconds specified with this "
+#~| "options are used to check if the validation of a file has expired by "
+#~| "using the earlier date of the two. Archive specific settings can be made "
+#~| "by appending the label of the archive to the option name."
+#~ msgid ""
+#~ "Seconds the Release file should be considered valid after it was created. "
+#~ "The default is \"for ever\" (0) if the Release file of the archive "
+#~ "doesn't include a <literal>Valid-Until</literal> header. If it does then "
+#~ "this date is the default. The date from the Release file or the date "
+#~ "specified by the creation time of the Release file (<literal>Date</"
+#~ "literal> header) plus the seconds specified with this options are used to "
+#~ "check if the validation of a file has expired by using the earlier date "
+#~ "of the two. Archive specific settings can be made by appending the label "
+#~ "of the archive to the option name."
+#~ msgstr ""
+#~ "Durée (en secondes) pendant laquelle un fichier Release est considéré "
+#~ "comme valable, à partir du moment de sa création. La valeur par défaut "
+#~ "est 0 (fichier valable indéfiniment) si le fichier Release de l'archive "
+#~ "ne comporte pas d'en-tête <literal>Valid-Until</literal>. Dans le cas "
+#~ "contraire, c'est la valeur de cet en-tête qui est la valeur par défaut du "
+#~ "paramètre. La date du fichier Release ou la date indiquée dans l'en-tête "
+#~ "<literal>Date</literal>, augmentées du nombre de secondes indiquées sont "
+#~ "comparées à la date courante pour déterminer si un fichier Release donné "
+#~ "est obsolète ou pas. Un réglage spécifique pour une archive donnée peut "
+#~ "être défini en ajoutant l'étiquette de l'archive au nom de l'option."
+
+#~ msgid ""
+#~ "Generate MD5 sums. This defaults to on, when turned off the generated "
+#~ "index files will not have MD5Sum fields where possible. Configuration "
+#~ "Item: <literal>APT::FTPArchive::MD5</literal>"
+#~ msgstr ""
+#~ "Créer la somme de contrôle MD5. Cette option est activée par défaut. "
+#~ "Quand elle est désactivée, les fichiers d'index n'ont pas les champs "
+#~ "MD5Sum là où c'est possible. Élément de configuration : <literal>APT::"
+#~ "FTPArchive::MD5</literal>."
+
+#~ msgid "Show a short usage summary."
+#~ msgstr "Affiche un résumé de l'aide"
+
+#~ msgid "Show the program version."
+#~ msgstr "Affiche la version du programme."
+
+#~ msgid "to the version that is already installed (if any)."
+#~ msgstr "est affectée à la version déjà installée (si elle existe)."
+
+#~ msgid "APT package handling utility -- cache manipulator"
+#~ msgstr "Gestionnaire de paquets APT - manipulation du cache"
+
+#~ msgid ""
+#~ "<literal>add</literal> adds the named package index files to the package "
+#~ "cache. This is for debugging only."
+#~ msgstr ""
+#~ "La commande <literal>add</literal> ajoute des fichiers indexant des "
+#~ "paquets au cache des paquets. Cela sert uniquement pour le débogage."
+
+#~ msgid ""
+#~ "The <literal>release</literal> command generates a Release file from a "
+#~ "directory tree. It recursively searches the given directory for Packages, "
+#~ "Packages.gz, Packages.bz2, Sources, Sources.gz, Sources.bz2, Release and "
+#~ "md5sum.txt files. It then writes to stdout a Release file containing an "
+#~ "MD5 digest and SHA1 digest for each file."
+#~ msgstr ""
+#~ "La commande <literal>release</literal> crée un fichier « Release » à "
+#~ "partir d'un répertoire. Elle cherche récursivement dans ce répertoire les "
+#~ "fichiers Packages, Packages.gz, Packages.bz2, Sources, Sources.gz, "
+#~ "Sources.bz2, Release et md5sum.txt. Elle envoie alors un fichier Release "
+#~ "sur la sortie standard avec un résumé MD5 et un résumé SHA1 pour chaque "
+#~ "fichier."
+
+#~ msgid "Also install recommended packages."
+#~ msgstr "Installer également les paquets recommandés."
+
+#~ msgid "Do not install recommended packages."
+#~ msgstr "Ne pas installer les paquets recommandés."
+
+#~ msgid ""
+#~ "While it is possible to add an empty compression type to the order list, "
+#~ "but APT in its current version doesn't understand it correctly and will "
+#~ "display many warnings about not downloaded files - these warnings are "
+#~ "most of the time false negatives. Future versions will maybe include a "
+#~ "way to really prefer uncompressed files to support the usage of local "
+#~ "mirrors."
+#~ msgstr ""
+#~ "Bien qu'il soit possible d'ajouter un type vide de compression à la liste "
+#~ "ordonnée, APT ne l'interprétera pas correctement et affichera de nombreux "
+#~ "messages d'avertissement à propos d'échec de téléchargement, qui sont le "
+#~ "plus souvent des avertissements sans conséquences. Dans de futures "
+#~ "versions, il deviendra réellement possible d'établir une préférence pour "
+#~ "des fichiers non compressés afin de gérer des miroirs locaux."
+
+#~ msgid ""
+#~ "Uses HTTP to access the archive at nonus.debian.org, under the debian-non-"
+#~ "US directory."
+#~ msgstr ""
+#~ "Utiliser HTTP pour accéder à l'archive située à nonus.debian.org, dans le "
+#~ "répertoire debian-non-US."
+
+#~ msgid ""
+#~ "deb http://nonus.debian.org/debian-non-US stable/non-US main contrib non-"
+#~ "free"
+#~ msgstr ""
+#~ "deb http://nonus.debian.org/debian-non-US stable/non-US main contrib non-"
+#~ "free"
+
+#~ msgid "OPTIONS"
+#~ msgstr "OPTIONS"
+
+#~ msgid "None."
+#~ msgstr "Aucune."
+
+#~ msgid "FILES"
+#~ msgstr "FICHIERS"
+
+#~ msgid "<filename>/var/lib/apt/extended_states</filename>"
+#~ msgstr "<filename>/var/lib/apt/extended_states</filename>"
+
+#~ msgid ""
+#~ "Status list of auto-installed packages. Configuration Item: "
+#~ "<literal>Dir::State</literal> sets the path to the "
+#~ "<filename>extended_states</filename> file."
+#~ msgstr ""
+#~ "États des paquets automatiquement installés. L'élément de configuration "
+#~ "<literal>Dir::State</literal> définit le chemin d'accès au fichier "
+#~ "<filename>extended_states</filename>."
+
+#~ msgid ""
+#~ "APT uses a fixed size memory mapped cache file to store the 'available' "
+#~ "information. This sets the size of that cache (in bytes)."
+#~ msgstr ""
+#~ "APT utilise un fichier de cache chargé en mémoire avec mmap pour ranger "
+#~ "les informations sur les paquets disponibles. Cette option fixe la taille "
+#~ "mémoire allouée (en octets) pour le chargement de ce cache."
+
+#~ msgid ""
+#~ "The <literal>Pin-Priority:</literal> line in each APT preferences record "
+#~ "is optional. If omitted, APT assigns a priority of 1 less than the last "
+#~ "value specified on a line beginning with <literal>Pin-Priority: "
+#~ "release ...</literal>."
+#~ msgstr ""
+#~ "La ligne <literal>Pin-Priority:</literal> d'une entrée est facultative. "
+#~ "Si elle n'existe pas, APT affecte une priorité inférieure de 1 à la "
+#~ "valeur spécifiée sur une ligne commençant par <literal>Pin-Priority: "
+#~ "release ...</literal>."
+
+#~ msgid "Keyring of local trusted keys, new keys will be added here."
+#~ msgstr ""
+#~ "Trousseau de clés locales fiables : les nouvelles clés y seront ajoutées."
+
+#~ msgid ""
+#~ "<filename>apt.conf</filename> is the main configuration file for the APT "
+#~ "suite of tools, all tools make use of the configuration file and a common "
+#~ "command line parser to provide a uniform environment. When an APT tool "
+#~ "starts up it will read the configuration specified by the "
+#~ "<envar>APT_CONFIG</envar> environment variable (if any) and then read the "
+#~ "files in <literal>Dir::Etc::Parts</literal> then read the main "
+#~ "configuration file specified by <literal>Dir::Etc::main</literal> then "
+#~ "finally apply the command line options to override the configuration "
+#~ "directives, possibly loading even more config files."
+#~ msgstr ""
+#~ "Le fichier <filename>apt.conf</filename> est le principal fichier de "
+#~ "configuration de la collection d'outils que constitue APT ; tous les "
+#~ "outils font appel à ce fichier de configuration et utilisent un analyseur "
+#~ "syntaxique en ligne de commande commun afin de fournir un environnement "
+#~ "uniforme. Quand un outil d'APT démarre, il lit la configuration désignée "
+#~ "par variable d'environnement <envar>APT_CONFIG</envar> (si elle existe), "
+#~ "puis il lit les fichiers situés dans <literal>Dir::Etc::Parts</literal> "
+#~ "ainsi que le principal fichier de configuration indiqué par <literal>Dir::"
+#~ "Etc::main</literal> ; enfin il applique les options de la ligne de "
+#~ "commande qui prévalent sur les directives de configuration, chargeant si "
+#~ "nécessaire d'autres fichiers de configuration."
+
+#~ msgid ""
+#~ "Disable Immediate Configuration; This dangerous option disables some of "
+#~ "APT's ordering code to cause it to make fewer dpkg calls. Doing so may be "
+#~ "necessary on some extremely slow single user systems but is very "
+#~ "dangerous and may cause package install scripts to fail or worse. Use at "
+#~ "your own risk."
+#~ msgstr ""
+#~ "Désactive la configuration immédiate ; cette dangereuse option désactive "
+#~ "une partie du code de mise en ordre de APT pour que ce dernier effectue "
+#~ "le moins d'appels possible à &dpkg;. Ça peut être nécessaire sur des "
+#~ "systèmes à un seul utilisateur extrêmement lents, mais cette option est "
+#~ "très dangereuse et peut faire échouer les scripts d'installation, voire "
+#~ "pire. Utilisez-la à vos risques et périls."
+
+#~ msgid ""
+#~ "Storage area for retrieved package files. Configuration Item: "
+#~ "<literal>Dir::Cache::Archives</literal>."
+#~ msgstr ""
+#~ "Zone de stockage pour les paquets récupérés. Élément de configuration : "
+#~ "<literal>Dir::Cache::Archives</literal>."
diff --git a/doc/po/header.pot.txt b/doc/po/header.pot.txt
new file mode 100644
index 0000000..c2e7fed
--- /dev/null
+++ b/doc/po/header.pot.txt
@@ -0,0 +1,3 @@
+# Translation of apt manpages and documentation to LANGUAGE
+# This file is distributed under the same license as the apt-doc package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
diff --git a/doc/po/it.po b/doc/po/it.po
new file mode 100644
index 0000000..79a2654
--- /dev/null
+++ b/doc/po/it.po
@@ -0,0 +1,14510 @@
+# Translation of apt package's po4a documentation
+# Copyright (C) 2000-2017 Debian Italian l10n team <debian-l10n-italian@lists.debian.org>
+# This file is distributed under the same license as the apt package.
+# Translators:
+# Eugenia Franzoni, 2000
+# Hugh Hartmann, 2000-2012
+# Gabriele Stilli, 2012
+# Beatrice Torracca <beatricet@libero.it>, 2012, 2014, 2015, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-02-04 15:34+0100\n"
+"PO-Revision-Date: 2017-03-27 19:05+0200\n"
+"Last-Translator: Beatrice Torracca <beatricet@libero.it>\n"
+"Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>Team APT</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>Pagina QA</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bug</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>Pagina dei bug di APT</ulink>.\n"
+" Se si desidera segnalare un bug in APT, vedere\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> o il\n"
+" comando &reportbug;.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Sezione standard autore -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Autore</title>\n"
+" <para>APT è stato scritto dal Team APT <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Da usare all'interno della sezione opzioni del testo da\n"
+" mettere nella pappardella su -h, -v, -c e -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Mostra un breve riassunto sull'uso.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Mostra la versione del programma.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>File di configurazione; specifica un file di configurazione da usare. \n"
+" Il programma legge il file di configurazione predefinito e poi questo \n"
+" file di configurazione. Se è necessario modificare le impostazioni di \n"
+" configurazione prima che vengano analizzati i file di configurazione \n"
+" predefiniti, specificare un file con la variabile d'ambiente <envar>APT_CONFIG</envar>. \n"
+" Vedere &apt-conf; per informazioni sulla sintassi.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Imposta un'opzione di configurazione; imposterà una qualunque\n"
+" opzione di configurazione. La sintassi è <option>-o Pinco::Pallo=pallo</option>.\n"
+" <option>-o</option> e <option>--option</option> si possono usare più\n"
+" volte per impostare opzioni diverse.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Da usare all'interno della sezione opzioni del testo da\n"
+" mettere nella pappardella su -h, -v, -c e -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>Tutte le opzioni a riga di comando si possono impostare usando il file di\n"
+" configurazione; le descrizioni indicano l'opzione da impostare. Per le opzioni\n"
+" booleane si può scavalcare il file di configurazione usando \n"
+"qualcosa come <option>-f-</option>, <option>--no-f</option>, <option>-f=no</option>\n"
+" o diverse altre varianti.\n"
+" </para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>File di configurazione di APT.\n"
+" Voce di configurazione: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>Frammenti di file di configurazione di APT.\n"
+" Voce di configurazione: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Area di archiviazione per i file dei pacchetti recuperati.\n"
+" Voce di configurazione: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Area di archiviazione per i file dei pacchetti in transito.\n"
+" Voce di configurazione: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> verrà implicitamente aggiunto in fondo al nome)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>File di preferenze di versione.\n"
+" Qui si specifica il &quot;pinning&quot;,\n"
+" ossia una preferenza a prendere determinati pacchetti\n"
+" da una fonte separata\n"
+" o da una diversa versione di una distribuzione.\n"
+" Voce di configurazione: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>Frammenti di file per le preferenze di versione.\n"
+" Voce di configurazione: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Posizioni da cui scaricare i pacchetti.\n"
+" Voce di configurazione: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>Frammenti di file per le posizioni da cui scaricare i pacchetti.\n"
+" Voce di configurazione: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Area di archiviazione per le informazioni sullo stato di ciascuna risorsa dei pacchetti specificata in\n"
+" &sources-list;\n"
+" Voce di configurazione: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Area di archiviazione per le informazioni di stato in transito.\n"
+" Voce di configurazione: <literal>Dir::State::Lists</literal> (<filename>partial</filename> verrà implicitamente aggiunto in fondo al nome)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Portachiavi delle chiavi fidate locali; qui saranno aggiunte le nuove chiavi.\n"
+" Voce di configurazione: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>Frammenti di file per le chiavi fidate, qui potranno essere memorizzati\n"
+" ulteriori portachiavi (da parte di altri pacchetti o dall'amministratore).\n"
+" Voce di configurazione <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Elenco degli stati dei pacchetti installati automaticamente.\n"
+" Voce di configurazione: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRADUZIONE\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" Traduzione in italiano a cura del Team italiano di localizzazione di Debian <email>debian-l10n-italian@lists.debian.org</email>. In particolare hanno contribuito Eugenia Franzoni (2000), Hugh Hartmann (2000-2012), Gabriele Stilli (2012), Beatrice Torracca (2012, 2014, 2015).\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Notare che questa versione tradotta del documento può contenere parti non tradotte. Ciò è voluto, per evitare di perdere contenuti quando la traduzione non è aggiornata rispetto all'originale.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"stringa_config\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"file_config\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"rilascio_obiettivo\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architettura\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pacch\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"numero_versione_pacch\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefisso\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"espr_reg\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"punto_mount_cdrom\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"directory_temporanea\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"nomefile\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"percorso"
+"\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override \"file-"
+"override\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"prefisso_percorso\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"sezione\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"IDchiave\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr "interfaccia a riga di comando"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "Descrizione"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+"<command>apt</command> fornisce un'interfaccia a riga di comando di alto "
+"livello per il sistema di gestione dei pacchetti. È pensata come interfaccia "
+"per l'utente finale e permette in modo predefinito alcune opzioni più adatte "
+"per l'uso interattivo rispetto a strumenti APT più specializzati come &apt-"
+"get; e &apt-cache;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+"Proprio come <command>apt</command> stesso, la sua pagina di manuale è "
+"pensata come interfaccia per l'utente finale e, pertanto, menziona solamente "
+"i comandi e le opzioni più utilizzati, in parte per non duplicare le "
+"informazioni in più posti e in parte per evitare di travolgere i lettori con "
+"una valanga di opzioni e dettagli."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr "(&apt-get;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+"<option>update</option> viene usato per scaricare le informazioni sui "
+"pacchetti da tutte le fonti configurate. Altri comandi operano su questi "
+"dati, ad esempio per effettuare gli aggiornamenti dei pacchetti o per "
+"cercare e visualizzare i dettagli su tutti i pacchetti disponibili per "
+"l'installazione."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+"<option>upgrade</option> viene usato per installare gli aggiornamenti "
+"disponibili per tutti i pacchetti attualmente installati nel sistema "
+"prendendoli dalle fonti configurate attraverso &sources-list;. Nuovi "
+"pacchetti verranno installati se necessari per soddisfare le dipendenze, ma "
+"quelli esistenti non saranno mai rimossi. Se l'aggiornamento di un pacchetto "
+"richiede la rimozione di un pacchetto installato, l'aggiornamento di tale "
+"pacchetto non viene effettuato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+"<literal>full-upgrade</literal> effettua la funzione di aggiornamento ma "
+"rimuove i pacchetti attualmente installati se ciò è necessario per "
+"aggiornare il sistema nel suo complesso."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ","
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+"Effettua l'azione richiesta su uno o più pacchetti specificati attraverso "
+"&regex;, &glob; o una corrispondenza esatta. L'azione richiesta può essere "
+"modificata per pacchetti specifici aggiungendo un segno più (+) al nome di "
+"un pacchetto per installarlo o un segno meno (-) per rimuoverlo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"È possibile selezionare una versione specifica di un pacchetto per "
+"l'installazione scrivendo dopo il nome del pacchetto un segno di uguale (=) "
+"e la versione del pacchetto da selezionare. In alternativa può essere "
+"selezionata la versione da un rilascio specifico scrivendo dopo il nome del "
+"pacchetto una sbarra («/») e il nome in codice (&debian-stable-codename;, "
+"&debian-testing-codename;, sid …) o il nome della suite (stable, testing, "
+"unstable). Se necessarie per soddisfare la richiesta, anche le dipendenze "
+"del pacchetto in oggetto saranno selezionate da questo rilascio."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+"La rimozione di un pacchetto rimuove tutti i dati pacchettizzati, ma "
+"solitamente lascia piccoli file di configurazione utente (modificati), nel "
+"caso la rimozione sia avvenuta per errore. In questo caso basta una "
+"richiesta di installazione del pacchetto rimosso per sbaglio per "
+"ripristinare il suo funzionamento come era prima. D'altro canto ci si può "
+"sbarazzare di questi avanzi di file chiamando <command>purge</command> anche "
+"sui pacchetti già rimossi. Notare che ciò non ha effetto sui dati o le "
+"configurazioni memorizzate nelle directory personali degli utenti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"<literal>autoremove</literal> viene usato per rimuovere i pacchetti che sono "
+"stati installati automaticamente per soddisfare delle dipendenze per altri "
+"pacchetti e che non sono più necessari perché le dipendenze sono cambiate o "
+"perché i pacchetti che li richiedevano sono stati nel frattempo rimossi."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+"Si dovrebbe controllare che la l'elenco non includa applicazioni che sono "
+"nel frattempo diventate desiderate, anche se sono state inizialmente "
+"installate solo come dipendenze di un altro pacchetto. Si possono marcare "
+"tali pacchetti come installati manualmente usando &apt-mark;. Anche i "
+"pacchetti che sono stati esplicitamente installati con <command>install</"
+"command> non vengono mai proposti per la rimozione automatica."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+"<option>search</option> può essere usato per cercare daterminati termini "
+"&regex; nell'elenco dei pacchetti disponibili e per visualizzare le "
+"corrispondenze. Ciò è ad esempio utile se si stanno cercando pacchetti con "
+"una specifica funzionalità. Per cercare un pacchetto che contiene un file "
+"specifico provare &apt-file;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+"Mostra informazioni sui pacchetti specificati, incluse le loro dipendenze, "
+"le dimensioni di installazione e scaricamento, le fonti da cui sono "
+"disponibili, le descrizioni del contenuto dei pacchetti e molto altro. Può "
+"ad esempio essere utile per vedere tutte queste informazioni prima di "
+"permettere ad &apt; di rimuovere un pacchetto o quando si cercano nuovi "
+"pacchetti da installare."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr "(lavoro-in-corso)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+"<option>list</option> è in qualche modo simile a <command>dpkg-query --list</"
+"command>, nel senso che può visualizzare un elenco di pacchetti che "
+"soddisfano determinati criteri. Supporta l'uso di modelli &glob; per le "
+"corrispondenze con i nomi dei pacchetti, così come opzioni per elencare le "
+"versioni installate (<option>--installed</option>), aggiornabili (<option>--"
+"upgradeable</option>) o disponibili (<option>--all-versions</option>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+"<literal>edit-sources</literal> permette di modificare i propri file "
+"&sources-list; nell'editor di testo preferito e fornisce controlli di sanità "
+"di base."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr "Uso di script e differenze rispetto ad altri strumenti APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+"La riga di comando di &apt; è progettata come strumento per l'utente finale "
+"e il suo comportamento può cambiare da una versione ad un'altra. Sebbene si "
+"cerchi di non rompere la compatibilità all'indietro, questa però non è "
+"garantita se una modifica sembra utile per l'uso interattivo."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+"Tutte le funzionalità di &apt; sono anche disponibili in strumenti APT "
+"dedicati come &apt-get; e &apt-cache;. &apt; cambia solamente il valore "
+"predefinito di alcune opzioni (vedere &apt-conf; e in particolare la sezione "
+"Binary). Perciò si raccomanda di preferire l'uso di questi comandi "
+"(potenzialmente con abilitate alcune opzioni aggiuntive) negli script, dato "
+"che essi mantengono il più possibile la compatibilità all'indietro."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "Vedere anche"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, la Guida "
+"dell'utente di APT in &guidesdir;, &apt-preferences;, l'APT Howto."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "Diagnostica"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt</command> restituisce zero in caso di funzionamento normale e "
+"il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr ""
+"strumento APT per la gestione dei pacchetti, interfaccia a riga di comando"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> è lo strumento a riga di comando per gestire "
+"pacchetti e può essere considerato il «backend» dell'utente per altri "
+"strumenti che usano la libreria APT. Esistono diversi «front-end» per "
+"interfaccia, come &aptitude;, &synaptic; e &wajig;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"A meno che non venga fornita l'opzione <option>-h</option> o <option>--help</"
+"option>, deve essere presente uno dei comandi seguenti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"<literal>update</literal> è usato per sincronizzare nuovamente i file degli "
+"indici dei pacchetti dalle loro fonti. Gli indici dei pacchetti disponibili "
+"sono scaricati dalle posizioni specificate in <filename>/etc/apt/sources."
+"list</filename>. Per esempio, quando si usa un archivio Debian, questo "
+"comando recupera e analizza i file <filename>Packages.gz</filename>, in modo "
+"da rendere disponibili informazioni sui pacchetti nuovi e quelli aggiornati. "
+"Si dovrebbe sempre fare un <literal>update</literal> prima di un "
+"<literal>upgrade</literal> o <literal>dist-upgrade</literal>. Notare che "
+"l'indicatore di avanzamento globale non è preciso perché è impossibile "
+"conoscere in anticipo la dimensione dei file degli indici dei pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"<literal>upgrade</literal> è usato per installare le versioni più recenti di "
+"tutti i pacchetti attualmente installati sul sistema, usando le fonti "
+"elencate in <filename>/etc/apt/sources.list</filename>. I pacchetti "
+"attualmente installati con nuove versioni disponibili sono recuperati e "
+"aggiornati; in nessun caso vengono rimossi pacchetti attualmente installati "
+"oppure recuperati e installati pacchetti che non lo sono già. I pacchetti "
+"attualmente installati che hanno una nuova versione, ma che non possono "
+"essere aggiornati senza cambiare lo stato di installazione di un altro "
+"pacchetto, vengono lasciati alla versione attuale. Deve essere prima "
+"effettuato un <literal>update</literal> in modo che <command>apt-get</"
+"command> sappia se sono disponibili nuove versioni dei pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"<literal>dist-upgrade</literal>, oltre ad effettuare le funzioni di "
+"<literal>upgrade</literal>, gestisce anche in maniera intelligente le "
+"modifiche delle dipendenze delle nuove versioni dei pacchetti; <command>apt-"
+"get</command> ha un sistema «intelligente» di risoluzione dei conflitti e "
+"cerca di aggiornare i pacchetti più importanti a scapito di quelli meno "
+"importanti, se necessario. Il comando <literal>dist-upgrade</literal> può "
+"quindi rimuovere alcuni pacchetti. Il file <filename>/etc/apt/sources.list</"
+"filename> contiene un elenco di posizioni da cui recuperare i file di "
+"pacchetto desiderati. Vedere anche &apt-preferences; per un meccanismo per "
+"scavalcare le impostazioni generali per singoli pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> viene usato insieme a &dselect;, il front-"
+"end tradizionale per i pacchetti di Debian. <literal>dselect-upgrade</"
+"literal> segue i cambiamenti fatti da &dselect; al campo <literal>Status</"
+"literal> dei pacchetti disponibili, ed effettua le azioni necessarie per "
+"realizzare tale stato (ad esempio la rimozione di vecchi pacchetti e "
+"l'installazione di nuovi)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"<literal>install</literal> è seguito da uno o più pacchetti da installare o "
+"aggiornare. Ogni pacchetto è un nome di pacchetto, non un nome di file "
+"pienamente qualificato (ad esempio, in un sistema Debian, l'argomento "
+"fornito sarebbe <package>apt-utils</package>, non <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). Tutti i pacchetti richiesti dai "
+"pacchetti specificati per l'installazione saranno anch'essi recuperati e "
+"installati. Il file <filename>/etc/apt/sources.list</filename> viene usato "
+"per localizzare i pacchetti desiderati. Se viene aggiunto un segno meno alla "
+"fine del nome di pacchetto (senza spazio), il pacchetto specificato viene "
+"rimosso, se è installato. Analogamente un segno più può essere usato per "
+"specificare un pacchetto da installare. Queste ultime funzionalità possono "
+"essere usate per scavalcare decisioni prese dal sistema di risoluzione dei "
+"conflitti di apt-get."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"È possibile selezionare una versione specifica di un pacchetto per "
+"l'installazione scrivendo dopo il nome del pacchetto un segno di uguale e la "
+"versione del pacchetto da selezionare. Ciò farà sì che venga localizzata e "
+"selezionata per l'installazione quella versione. In alternativa può essere "
+"selezionata una distribuzione specifica scrivendo dopo il nome del pacchetto "
+"una sbarra («/») e la versione della distribuzione o il nome dell'archivio "
+"(stable, testing, unstable)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"Entrambi i meccanismi di selezione della versione possono far retrocedere "
+"pacchetti e devono essere usati con cautela."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"Questa è l'azione da usare anche quando si desiderano aggiornare uno o più "
+"pacchetti già installati senza aggiornare ogni pacchetto nel sistema. A "
+"differenza dell'azione «upgrade», che aggiorna alla versione più recente "
+"tutti i pacchetti installati, «install» installa la versione più recente "
+"solamente per i pacchetti specificati. Basta fornire il nome dei pacchetti "
+"che si desiderano aggiornare e, se è disponibile una versione più recente, "
+"essa (e tutte le sue dipendenze come descritto sopra) verrà scaricata e "
+"installata."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"Da ultimo, il meccanismo &apt-preferences; permette di creare una politica "
+"di installazione alternativa per i singoli pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"Se nessun pacchetto corrisponde all'espressione specificata e questa "
+"contiene uno tra «.», «?» o «*», allora viene considerata come "
+"un'espressione regolare POSIX e viene confrontata con tutti i nomi di "
+"pacchetto nel database. Ogni corrispondenza viene quindi installata (o "
+"rimossa). Notare che la corrispondenza avviene con sottostringhe, perciò "
+"«bass.*» trova corrispondenza con «quanto-bass» e «bassissimo». Se ciò non è "
+"quello che si desidera, ancorare l'espressione regolare con un carattere «^» "
+"o «$», oppure creare un'espressione regolare più specifica."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "A new <literal>list</literal> command is available similar to "
+#| "<literal>dpkg --list</literal>."
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr ""
+"È disponibile un nuovo comando <literal>list</literal> simile a "
+"<literal>dpkg --list</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"<literal>remove</literal> è identico a <literal>install</literal> tranne per "
+"il fatto che i pacchetti sono rimossi invece che installati. Notare che la "
+"rimozione di un pacchetto lascia i suoi file di configurazione nel sistema. "
+"Se viene aggiunto un segno più in fondo al nome del pacchetto (senza spazi "
+"in mezzo), il pacchetto specificato viene installato invece che rimosso."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"<literal>purge</literal> è identico a <literal>remove</literal> tranne per "
+"il fatto che i pacchetti sono rimossi ed eliminati completamente (viene "
+"eliminato anche ogni file di configurazione)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"<literal>source</literal> fa sì che <command>apt-get</command> scarichi i "
+"pacchetti sorgente. APT esaminerà i pacchetti disponibili per decidere quali "
+"pacchetti sorgente scaricare. Poi, se possibile, troverà e scaricherà nella "
+"directory corrente la versione più recente disponibile di quel pacchetto "
+"sorgente rispettando il rilascio predefinito, impostato con l'opzione "
+"<literal>APT::Default-Release</literal>, l'opzione <option>-t</option> o per "
+"i singoli pacchetti con la sintassi <literal>pacch/rilascio</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"Il sistema tiene traccia dei pacchetti sorgente in modo separato dai "
+"pacchetti binari, attraverso righe <literal>deb-src</literal> nel file "
+"&sources-list;. Ciò significa che sarà necessario aggiungere una riga di "
+"questo tipo per ciascun repository da cui si desiderano ottenere sorgenti; "
+"in caso contrario probabilmente si otterrà la versione sorgente sbagliata "
+"(troppo vecchia o troppo nuova) oppure nessuna versione."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"Se viene specificata l'opzione <option>--compile</option> allora il "
+"pacchetto verrà compilato in un .deb binario usando <command>dpkg-"
+"buildpackage</command> per l'architettura così come definita dall'opzione "
+"<command>--host-architecture</command>. Se viene usata l'opzione <option>--"
+"download-only</option>, allora il pacchetto sorgente non verrà spacchettato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"Può essere recuperata una specifica versione sorgente facendo seguire al "
+"nome del sorgente un segno uguale e quindi la versione da scaricare, in modo "
+"simile al meccanismo usato per i file di pacchetto. Ciò permette la "
+"corrispondenza esatta con il nome e la versione del pacchetto sorgente, "
+"abilitando implicitamente l'opzione <literal>APT::Get::Only-Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"Notare che i pacchetti sorgente non vengono installati né viene tenuta "
+"traccia di essi nel database di <command>dpkg</command> come per i pacchetti "
+"binari; sono semplicemente scaricati nella directory corrente, come archivi "
+"tar dei sorgenti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"<literal>build-dep</literal> fa sì che apt-get installi o rimuova pacchetti, "
+"nel tentativo di soddisfare le dipendenze di compilazione di un pacchetto "
+"sorgente. In modo predefinito sono soddisfatte le dipendenze per compilare "
+"il pacchetto in modo nativo. Se lo si desidera, è possibile invece "
+"specificare un'architettura ospite con l'opzione <option>--host-"
+"architecture</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"<literal>check</literal> è uno strumento diagnostico; aggiorna la cache dei "
+"pacchetti e controlla la presenza di dipendenze non soddisfatte."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> scarica il pacchetto binario specificato nella "
+"directory corrente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"<literal>clean</literal> ripulisce il repository locale dei file di "
+"pacchetto recuperati. Rimuove tutto da <filename>&cachedir;/archives/</"
+"filename> e <filename>&cachedir;/archives/partial/</filename>, tranne il "
+"file di lock."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr "(e l'alias"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr "a partire da 1.1)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"Come <literal>clean</literal>, <literal>autoclean</literal> ripulisce il "
+"repository locale dei file di pacchetto recuperati. La differenza sta nel "
+"fatto che rimuove solo i file di pacchetto che non possono più essere "
+"scaricati e sono per lo più inutili. Questo permette di mantenere una cache "
+"per un periodo lungo senza che cresca fuori controllo. Se l'opzione di "
+"configurazione <literal>APT::Clean-Installed</literal> è disabilitata, "
+"impedisce che vengano eliminati i pacchetti installati."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"<literal>autoremove</literal> viene usato per rimuovere i pacchetti che sono "
+"stati installati automaticamente per soddisfare delle dipendenze per altri "
+"pacchetti e che non sono più necessari."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> cerca di scaricare il changelog di un pacchetto "
+"e lo visualizza usando <command>sensible-pager</command>. In modo "
+"predefinito visualizza il changelog per la versione che è installata. "
+"Tuttavia si possono specificare le stesse opzioni del comando "
+"<option>install</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+"Visualizza in modo predefinito un elenco formattato come deb822 di "
+"informazioni su tutti i file dei dati (alias target indice) che <command>apt-"
+"get update</command> scaricherebbe. Permette l'uso di un'opzione <option>--"
+"format</option> per modificare il formato di output, così come accetta righe "
+"dell'output predefinito con cui filtrare le voci. Il comando è usato "
+"principalmente come interfaccia per strumenti esterni che lavorano con APT "
+"per ottenere informazioni e nomi di file per i file scaricati, in modo che "
+"possano essere usati anch'essi invece di riscaricarli. La documentazione "
+"dettagliata non è presentata qui e può essere invece trovata nel file &apt-"
+"acquire-additional-files; fornito con il pacchetto <package>apt-doc</"
+"package>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "opzioni"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"Non considerare i pacchetti raccomandati come una dipendenza per "
+"l'installazione. Voce di configurazione: <literal>APT::Install-Recommends</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"Considera i pacchetti suggeriti come una dipendenza per l'installazione. "
+"Voce di configurazione:<literal>APT::Install-Suggests</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"Scarica solamente; i file di pacchetto sono solo recuperati e non "
+"spacchettati o installati. Voce di configurazione: <literal>APT::Get::"
+"Download-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"Aggiusta; cerca di correggere un sistema che ha dipendenze non soddisfatte. "
+"Questa opzione, quando usata con install o remove, può omettere qualsiasi "
+"pacchetto per permettere ad APT di trovare una soluzione valida. Se sono "
+"specificati dei pacchetti, questi devono risolvere completamente il "
+"problema. L'opzione è a volte necessaria quando si esegue APT per la prima "
+"volta; APT stesso non permette l'esistenza di pacchetti con dipendenze non "
+"soddisfatte in un sistema. È possibile che la struttura di dipendenze di un "
+"sistema sia corrotta a tal punto da richiedere un intervento manuale (il che "
+"di solito significa usare <command>dpkg --remove</command> per eliminare "
+"alcuni dei pacchetti che creano problemi). L'uso di questa opzione insieme a "
+"<option>-m</option> può in alcune situazioni produrre un errore. Voce di "
+"configurazione: <literal>APT::Get::Fix-Broken</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"Ignora i pacchetti mancanti; se alcuni pacchetti non possono essere "
+"recuperati o fallisce il controllo sulla loro integrità dopo il recupero "
+"(file di pacchetto corrotti), mantiene bloccati tali pacchetti e gestisce il "
+"risultato. L'uso di questa opzione insieme a <option>-f</option> può "
+"produrre un errore in alcune situazioni. Se un pacchetto è selezionato per "
+"l'installazione (particolarmente se è indicato nella riga di comando) e non "
+"può essere scaricato verrà silenziosamente mantenuto invariato. Voce di "
+"configurazione: <literal>APT::Get::Fix-Missing</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"Disabilita lo scaricamento dei pacchetti. È usato al meglio con <option>--"
+"ignore-missing</option> per forzare APT ad usare solo i .deb che ha già "
+"scaricato. Voce di configurazione: <literal>APT::Get::Download</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"Silenzioso; produce un output adatto alla registrazione, omettendo gli "
+"indicatori di avanzamento. L'uso di più «q» produce un output più silenzioso "
+"fino a un massimo di 2. Si può anche usare <option>-q=n</option> per "
+"impostare il livello di silenziosità a n, scavalcando il file di "
+"configurazione. Notare che il livello di silenziosità 2 implica <option>-y</"
+"option>; non si dovrebbe mai usare -qq senza un modificatore che non fa "
+"azioni come -d, --print-uris o -s, dato che APT potrebbe decidere di fare "
+"qualcosa di inatteso. Voce di configurazione: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+"Nessuna azione; effettua una simulazione degli eventi che avverrebbero sulla "
+"base dello stato attuale del sistema, ma non fa nulla per cambiare "
+"effettivamente il sistema. Il lock viene disabilitato (<option>Debug::"
+"NoLocking</option>) perciò lo stato del sistema può cambiare durante "
+"l'esecuzione di <command>apt-get</command>. Le simulazioni possono anche "
+"essere eseguite da utenti non privilegiati che potrebbero non aver accesso "
+"in lettura a tutta la configurazione di apt, rendendo perciò distorta la "
+"simulazione. Per gli utenti diversi da root viene mostrata in modo "
+"predefinito una notifica che avverte di questo (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Voce di configurazione: <literal>APT::Get::"
+"Simulate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"Le esecuzioni simulate stampano una serie di righe, ciascuna delle quali "
+"rappresenta un'operazione di <command>dpkg</command>: configurazione "
+"(<literal>Conf</literal>), rimozione (<literal>Remv</literal>) o "
+"spacchettamento (<literal>Inst</literal>). Le parentesi quadre indicano i "
+"pacchetti difettosi e le parentesi quadre vuote indicano difetti che non "
+"hanno conseguenze (rari)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"Rispondi automaticamente «sì» ai prompt; assume «sì» come risposta a tutti i "
+"prompt e viene eseguito in modo non interattivo. Se si verifica una "
+"situazione non desiderabile, come il cambiamento di un pacchetto bloccato, "
+"il tentativo di installazione di un pacchetto non autenticato o la rimozione "
+"di un pacchetto essenziale, allora <literal>apt-get</literal> annullerà "
+"l'esecuzione. Voce di configurazione: <literal>APT::Get::Assume-Yes</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"Rispondi automaticamente «no» a tutti i prompt. Voce di configurazione: "
+"<literal>APT::Get::Assume-No</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"Non stampa un elenco di tutti i pacchetti che devono essere aggiornati. Voce "
+"di configurazione: <literal>APT::Get::Show-Upgraded</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"Mostra la versione completa dei pacchetti aggiornati e installati. Voce di "
+"configurazione: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"Questa opzione controlla l'architettura per la quale <command>apt-get source "
+"--compile</command> compila i pacchetti e come le dipendenze di compilazione "
+"incrociata sono soddisfatte. In modo predefinito non è impostata, il che "
+"significa che l'architettura ospite è la stessa dell'architettura di "
+"compilazione (che è definita da <literal>APT::Architecture</literal>). Voce "
+"di configurazione: <literal>APT::Get::Host-Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"Questa opzione controlla i profili di compilazione attivi per i quali "
+"<command>apt-get source --compile</command> compila un pacchetto sorgente e "
+"come le dipendenze di compilazione sono soddisfatte. In modo predefinito non "
+"è attivo alcun profilo di compilazione. Più profili di compilazione possono "
+"essere attivati contemporaneamente concatenandoli con una virgola. Voce di "
+"configurazione: <literal>APT::Build-Profiles</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"Compila i pacchetti sorgente dopo averli scaricati. Voce di configurazione: "
+"<literal>APT::Get::Compile</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"Ignora i blocchi sui pacchetti; ciò fa sì che <command>apt-get</command> "
+"ignori il blocco posto su un pacchetto. Può essere utile insieme a "
+"<literal>dist-upgrade</literal> per scavalcare un grande numero di blocchi "
+"non desiderati. Voce di configurazione: <literal>APT::Ignore-Hold</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+"Permette l'installazione di nuovi pacchetti quando usato insieme a "
+"<literal>upgrade</literal>. Ciò è utile se l'aggiornamento di un pacchetto "
+"installato richiede l'installazione di nuove dipendenze. Invece di bloccare "
+"il pacchetto <literal>upgrade</literal> aggiornerà il pacchetto e installerà "
+"le nuove dipendenze. Notare che <literal>upgrade</literal> con questa "
+"opzione non rimuoverà mai pacchetti, permetterà solo l'aggiunta di nuovi. "
+"Voce di configurazione: <literal>APT::Get::Upgrade-Allow-New</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"Non aggiornare i pacchetti; quando usato insieme a <literal>install</"
+"literal>, <literal>no-upgrade</literal> impedisce che i pacchetti nella riga "
+"di comando vengano aggiornati se sono già installati. Voce di "
+"configurazione: <literal>APT::Get::Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"Non installare nuovi pacchetti; quando usato insieme a <literal>install</"
+"literal>, <literal>only-upgrade</literal> installa gli aggiornamenti "
+"solamente per i pacchetti già installati e ignora le richieste di "
+"installarne di nuovi. Voce di configurazione: <literal>APT::Get::Only-"
+"Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"Questa è un'opzione pericolosa che fa sì che apt, se sta facendo delle "
+"retrocessioni a versioni precedenti, continui senza chiedere all'utente. Non "
+"dovrebbe essere usata se non in situazioni molto particolari. Il suo uso può "
+"potenzialmente distruggere il sistema. Voce di configurazione: "
+"<literal>APT::Get::allow-downgrades</literal>. Introdotta in APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"Questa è un'opzione pericolosa che fa sì che apt, se sta rimuovendo dei "
+"pacchetti essenziali, continui senza chiedere all'utente. Non dovrebbe "
+"essere usata se non in situazioni molto particolari. Il suo uso può "
+"potenzialmente distruggere il sistema. Voce di configurazione: "
+"<literal>APT::Get::allow-remove-essential</literal>. Introdotta in APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"Forza «sì»; questa è un'opzione pericolosa che fa sì che apt, se sta "
+"modificando i pacchetti bloccati, continui senza chiedere all'utente. Non "
+"dovrebbe essere usata se non in situazioni molto particolari. Il suo uso può "
+"potenzialmente distruggere il sistema. Voce di configurazione: "
+"<literal>APT::Get::allow-change-held-packages</literal>. Introdotta in APT "
+"1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>. This is deprecated and replaced "
+#| "by <option>--allow-downgrades</option>, <option>--allow-remove-essential</"
+#| "option>, <option>--allow-change-held-packages</option> in 1.1."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"Forza «sì»; questa è un'opzione pericolosa che fa sì che apt, se sta facendo "
+"qualcosa di potenzialmente pericoloso, continui senza chiedere "
+"l'autorizzazione all'utente. Non dovrebbe essere usata se non in situazioni "
+"molto particolari. L'uso di <literal>force-yes</literal> può potenzialmente "
+"distruggere il sistema. Voce di configurazione: <literal>APT::Get::force-"
+"yes</literal>. È deprecata e sostituita in 1.1 da <option>--allow-"
+"downgrades</option>, <option>--allow-remove-essential</option>, <option>--"
+"allow-change-held-packages</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"Invece di scaricare i file per l'installazione, stampa i loro URI. Ogni URI "
+"ha il percorso, il nome del file di destinazione, la dimensione e l'hash MD5 "
+"atteso. Notare che il nome file in cui scrivere non corrisponde sempre al "
+"nome file sul sito remoto. Questo funziona anche con i comandi "
+"<literal>source</literal> e <literal>update</literal>. Quando usato con il "
+"comando <literal>update</literal> l'hash MD5 e la dimensione non sono "
+"inclusi, e sta all'utente decomprimere qualsiasi file compresso. Voce di "
+"configurazione: <literal>APT::Get::Print-URIs</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"Usa purge invece di remove per ogni cosa da rimuovere. Verrà visualizzato un "
+"asterisco («*») vicino ai pacchetti pianificati per l'eliminazione completa. "
+"<option>remove --purge</option> è equivalente al comando <option>purge</"
+"option>. Voce di configurazione: <literal>APT::Get::Purge</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"Reinstalla i pacchetti che sono già installati alla nuova versione. Voce di "
+"configurazione: <literal>APT::Get::ReInstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"Questa opzione è attivata in modo predefinito; usare <literal>--no-list-"
+"cleanup</literal> per disabilitarla. Quando è attivata <command>apt-get</"
+"command> gestisce automaticamente il contenuto di <filename>&statedir;/"
+"lists</filename> per garantire che i file obsoleti siano eliminati. L'unica "
+"ragione per disabilitarla è se si cambia di frequente la propria lista di "
+"fonti. Voce di configurazione: <literal>APT::Get::List-Cleanup</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"Questa opzione controlla l'input predefinito per il motore delle politiche; "
+"crea un pin predefinito alla priorità 990 usando la stringa di rilascio "
+"specificata. Ciò scavalca le impostazioni generali in <filename>/etc/apt/"
+"preferences</filename>. Questa opzione non ha effetto sui pacchetti su cui "
+"si usa specificatamente il pinning. In breve, questa opzione permette di "
+"avere un semplice controllo sulla distribuzione da cui verranno recuperati i "
+"pacchetti. Alcuni esempi comuni possono essere <option>-t '2.1*'</option>, "
+"<option>-t unstable</option> o <option>-t sid</option>. Voce di "
+"configurazione: <literal>APT::Default-Release</literal>; vedere anche la "
+"pagina di manuale di &apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"Effettua solo le operazioni che sono «banali». Può essere correlato "
+"logicamente a <option>--assume-yes</option>: mentre <option>--assume-yes</"
+"option> risponde «sì» a tutti i prompt, <option>--trivial-only</option> "
+"risponde «no». Voce di configurazione: <literal>APT::Get::Trivial-Only</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"Se un qualsiasi pacchetto dovrebbe essere rimosso, apt-get immediatamente "
+"annulla l'operazione senza chiedere. Voce di configurazione: <literal>APT::"
+"Get::Remove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"Se il comando è <literal>install</literal> oppure <literal>remove</literal>, "
+"allora questa opzione si comporta come se si eseguisse il comando "
+"<literal>autoremove</literal>, rimuovendo i pacchetti di dipendenza non "
+"utilizzati. Voce di configurazione: <literal>APT::Get::AutomaticRemove</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"Ha significato solo per i comandi <literal>source</literal> e <literal>build-"
+"dep</literal>. Indica che i nomi dei sorgenti indicati non devono essere "
+"mappati usando la tabella dei binari; ciò significa che, se viene "
+"specificata questa opzione, tali comandi accetteranno solamente nomi di "
+"pacchetti sorgente come argomento, invece di accettare nomi di pacchetti "
+"binari e cercare il pacchetto sorgente corrispondente. Voce di "
+"configurazione: <literal>APT::Get::Only-Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"Scarica solo il file diff, dsc o tar di un archivio sorgente. Voce di "
+"configurazione: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::"
+"Dsc-Only</literal> e <literal>APT::Get::Tar-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"Elabora solo le dipendenze di compilazione dipendenti dall'architettura. "
+"Voce di configurazione: <literal>APT::Get::Arch-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"Elabora solo le dipendenze di compilazione indipendenti dall'architettura. "
+"Voce di configurazione: <literal>APT::Get::Indep-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+"Ignora il fatto che i pacchetti non possono essere autenticati e non chiede "
+"all'utente cosa fare. Questo può essere utile quando si lavora con "
+"repository locali, ma è un enorme rischio per la sicurezza se l'autenticità "
+"dei dati non viene garantita in altro modo dall'utente stesso. L'uso "
+"dell'opzione <option>Trusted</option> per le voci in &sources-list; dovrebbe "
+"solitamente essere preferito rispetto a questa impostazione globale. Voce di "
+"configurazione: <literal>APT::Get::AllowUnauthenticated</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+"Impedisce al comando update di acquisire dati non verificabili dalle fonti "
+"configurate. Il comando update di Apt fallirà per i repository senza firme "
+"crittografiche valide. Vedere anche &apt-secure; per i dettagli sul concetto "
+"e sulle implicazioni. Voce di configurazione: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+"Mostra informazioni sul progresso facili da leggere nella finestra del "
+"terminale quando i pacchetti sono installati, aggiornati o rimossi. Per una "
+"versione analizzabile da macchina di questi dati, vedere README.progress-"
+"reporting nella directory della documentazione di apt. Voce di "
+"configurazione: <literal>Dpkg::Progress</literal> e <literal>Dpkg::Progress-"
+"Fancy</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+"Aggiunge il file specificato come fonte per metadati. Può essere ripetuto "
+"per aggiungere più file. Vedere la descrizione di <option>--with-source</"
+"option> in &apt-cache; per ulteriori dettagli."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "File"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, la guida dell'utente di APT in &guidesdir;, &apt-preferences;, "
+"l'APT Howto."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> restituisce zero in caso di funzionamento normale "
+"e il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "interroga la cache di APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> esegue una varietà di operazioni sulla cache "
+"dei pacchetti di APT. <command>apt-cache</command> non manipola lo stato del "
+"sistema ma fornisce operazioni per fare ricerche e generare risultati "
+"interessanti partendo dai metadati dei pacchetti. I metadati vengono "
+"acquisiti e aggiornati attraverso il comando «update» di, ad esempio, "
+"<command>apt-get</command>, perciò possono non essere più attuali se "
+"l'ultimo aggiornamento è stato fatto troppo tempo prima, ma d'altro canto "
+"<command>apt-cache</command> funziona in modo indipendente dalla "
+"disponibilità delle fonti configurate (cioè anche fuori linea)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> crea la cache dei pacchetti di APT. Ciò viene "
+"fatto implicitamente da tutti i comandi che hanno bisogno di tale cache, se "
+"essa manca o non è aggiornata."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"<literal>showpkg</literal> mostra informazioni sui pacchetti elencati nella "
+"riga di comando. I restanti argomenti sono nomi di pacchetto. Sono elencate "
+"le versioni disponibili e le dipendenze inverse di ogni pacchetto, oltre "
+"alle dipendenze dirette per ogni versione. Le dipendenze dirette (normali) "
+"sono quei pacchetti da cui dipende il pacchetto in questione; le dipendenze "
+"inverse sono quei pacchetti che dipendono dal pacchetto in questione. "
+"Quindi, per un pacchetto, devono essere soddisfatte le dipendenze dirette, "
+"ma non necessariamente quelle inverse. Per esempio, <command>apt-cache "
+"showpkg libreadline2</command> produce un risultato simile al seguente:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/pinco_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"Quindi si vede che libreadline2, versione 2.1-12, dipende da libc5 e "
+"ncurses3.0 che devono essere installati affinché libreadline2 funzioni. A "
+"loro volta, libreadlineg2 e libreadline2-altdev dipendono da libreadline2. "
+"Se libreadline2 è installato, devono esserlo anche libc5 e ncurses3.0 (e "
+"ldso); non necessariamente devono esserlo libreadlineg2 e libreadline2-"
+"altdev. Per il significato specifico del resto dell'output è meglio "
+"consultare il codice sorgente di apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"<literal>stats</literal> mostra alcune statistiche sulla cache. Non sono "
+"previsti ulteriori argomenti. Le statistiche riportate sono:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>Totale nomi dei pacchetti</literal> è il numero di nomi di "
+"pacchetto trovati nella cache."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>Pacchetti normali</literal> è il numero di nomi di pacchetti "
+"regolari, normali; sono pacchetti che hanno una corrispondenza uno-a-uno fra "
+"il loro nome e il nome usato da altri pacchetti per indicarli nelle loro "
+"dipendenze. La maggioranza dei pacchetti ricade in questa categoria."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>Pacchetti virtuali puri</literal> è il numero di pacchetti che "
+"esistono solo come nome di pacchetto virtuale; vale a dire, i pacchetti "
+"«forniscono» solamente il nome del pacchetto virtuale e nessun pacchetto in "
+"realtà usa quel nome. Per esempio, «mail-transport-agent» nel sistema Debian "
+"è un pacchetto virtuale puro; diversi pacchetti forniscono «mail-transport-"
+"agent», ma non c'è alcun pacchetto chiamato «mail-transport-agent»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>Pacchetti virtuali singoli</literal> è il numero di pacchetti "
+"virtuali per cui esiste solo un pacchetto che li fornisce. Per esempio, nel "
+"sistema Debian «X11-text-viewer» è un pacchetto virtuale, ma solo un "
+"pacchetto, xless, fornisce «X11-text-viewer»."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>Pacchetti virtuali misti</literal> è il numero di pacchetti che "
+"forniscono un particolare pacchetto virtuale oppure hanno il nome uguale a "
+"quello del pacchetto virtuale. Per esempio, nel sistema Debian «debconf» è "
+"sia un pacchetto vero e proprio, sia è fornito dal pacchetto debconf-tiny."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>Mancanti</literal> è il numero di nomi di pacchetto che vengono "
+"menzionati in una dipendenza ma non sono forniti da alcun pacchetto. I "
+"pacchetti mancanti possono essere un segno che non si ha accesso a una "
+"distribuzione completa o che un pacchetto (reale o virtuale) è stato "
+"eliminato da una distribuzione. Di solito vengono menzionati da clausole "
+"Conflicts o Breaks."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>Totale versioni distinte</literal> è il numero di versioni di "
+"pacchetti trovate nella cache. Se si ha accesso a più di una distribuzione "
+"(ad esempio sia «stable» che «unstable»), questo valore può essere "
+"decisamente più grande del numero dei nomi totali di pacchetto."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>Totale dipendenze</literal> è il numero di relazioni di dipendenza "
+"dichiarate da tutti i pacchetti nella cache."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> mostra tutti i pacchetti sorgente che "
+"corrispondono ai nomi dei pacchetti specificati. Vengono mostrate tutte le "
+"versioni, così come tutti i record che dichiarano che il nome è quello di un "
+"pacchetto binario. Usare <option>--only-source</option> per visualizzare "
+"solo i nomi di pacchetti sorgente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"<literal>dump</literal> mostra un breve elenco di tutti i pacchetti nella "
+"cache. Serve soprattutto a scopo di debug."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"<literal>dumpavail</literal> stampa una lista di pacchetti disponibili su "
+"stdout. Questa è adatta all'uso con &dpkg; ed è usata dal metodo &dselect;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"<literal>unmet</literal> mostra un riassunto di tutte le dipendenze non "
+"soddisfatte nella cache dei pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"<literal>show</literal> esegue una funzione simile a <command>dpkg --print-"
+"avail</command>; mostra i record dei pacchetti per i pacchetti specificati."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"<literal>search</literal> esegue una ricerca completa a tutto testo in tutti "
+"gli elenchi di pacchetti disponibili cercando il modello di espressione "
+"regolare POSIX specificato; vedere &regex;. Cerca le occorrenze "
+"dell'espressione regolare nei nomi e nelle descrizioni dei pacchetti e "
+"stampa il nome e la descrizione breve dei pacchetti, inclusi quelli "
+"virtuali. Se viene fornita l'opzione <option>--full</option>, per ciascun "
+"pacchetto che soddisfa la ricerca viene prodotto un output identico a quello "
+"di <literal>show</literal>; se viene fornita l'opzione <option>--names-only</"
+"option> la ricerca viene fatta solo sul nome del pacchetto e dei pacchetti "
+"forniti e non sulla descrizione lunga."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+"È possibile usare argomenti separati per specificare più modelli di ricerca "
+"che vengono combinati con un AND."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"<literal>depends</literal> mostra un elenco con ogni dipendenza di un "
+"pacchetto e tutti i possibili altri pacchetti che possono soddisfare quella "
+"dipendenza."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"<literal>rdepends</literal> mostra un elenco di tutte le dipendenze inverse "
+"di un pacchetto."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"Questo comando stampa il nome di tutti i pacchetti che APT conosce. "
+"L'argomento opzionale è un prefisso per filtrare l'elenco dei nomi. Il "
+"risultato è adatto ad essere usato in una funzione di shell di completamento "
+"automatico tramite Tab e viene generato molto rapidamente. Questo comando "
+"viene usato al meglio con l'opzione <option>--generate</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"Notare che un pacchetto che APT conosce non è necessariamente disponibile "
+"per essere scaricato, installabile o installato; ad esempio, i pacchetti "
+"virtuali sono anch'essi compresi nell'elenco generato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"<literal>dotty</literal> accetta un elenco di pacchetti dalla riga di "
+"comando e genera un output adatto all'uso da parte di dotty del pacchetto "
+"<ulink url=\"http://www.research.att.com/sw/tools/graphviz/\">GraphViz</"
+"ulink>. Il risultato sarà un insieme di nodi e linee che rappresentano le "
+"relazioni fra i pacchetti. In modo predefinito dai pacchetti dati si "
+"risalirà a tutti i pacchetti delle dipendenze; ciò può produrre un grafo "
+"molto grande. Per limitare il risultato ai soli pacchetti elencati sulla "
+"riga di comando, impostare l'opzione <literal>APT::Cache::GivenOnly</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"I nodi risultanti avranno diverse forme: i pacchetti normali sono "
+"rettangoli, i pacchetti virtuali puri sono triangoli, i pacchetti virtuali "
+"misti sono rombi, i pacchetti mancanti sono esagoni. I rettangoli arancioni "
+"indicano che la ricorsione è stata arrestata (pacchetti foglia), le linee "
+"blu sono pre-dipendenze, le linee verdi sono conflitti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr ""
+"Attenzione: dotty non può creare i grafi degli insiemi più grandi di "
+"pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"Stessa cosa di <literal>dotty</literal>, ma per xvcg dello <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">strumento VCG</"
+"ulink>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> è pensato per aiutare a fare il debug di problemi "
+"relativi al file delle preferenze. Senza argomenti stampa le priorità di "
+"ciascuna fonte. Altrimenti stampa informazioni dettagliate sulla selezione "
+"di priorità del pacchetto indicato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"Il comando <literal>madison</literal> di <literal>apt-cache</literal> cerca "
+"di imitare il formato di uscita e un sottoinsieme delle funzionalità di "
+"<literal>madison</literal>, lo strumento di gestione dell'archivio di "
+"Debian. Mostra le versioni disponibili di un pacchetto in forma tabellare. "
+"Contrariamente al <literal>madison</literal> originale, può mostrare "
+"informazioni solamente per l'architettura per cui APT ha recuperato gli "
+"elenchi dei pacchetti (<literal>APT::Architecture</literal>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"Seleziona il file in cui memorizzare la cache dei pacchetti. Questa è la "
+"cache primaria usata da tutte le operazioni. Voce di configurazione: "
+"<literal>Dir::Cache::pkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"Seleziona il file in cui memorizzare la cache dei sorgenti. Questa è usata "
+"solo da <literal>gencaches</literal> e memorizza una versione analizzata "
+"delle informazioni sui pacchetti provenienti da fonti remote. Al momento "
+"della costruzione della cache dei pacchetti, la cache dei sorgenti viene "
+"usata per evitare di rileggere tutti i file dei pacchetti. Voce di "
+"configurazione: <literal>Dir::Cache::srcpkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Silenzioso; produce un output adatto per un file di registro, omettendo gli "
+"indicatori di avanzamento. Ulteriori q produrranno un risultato ancor più "
+"silenzioso, fino a un massimo di 2. È anche possibile usare <option>-q=n</"
+"option> per impostare il livello di silenziosità a n, scavalcando il file di "
+"configurazione. Voce di configurazione: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"Stampa solo le dipendenze importanti; da usarsi con <literal>unmet</literal> "
+"e <literal>depends</literal>. Fa sì che vengano stampate solo le relazioni "
+"Depends e Pre-Depends. Voce di configurazione: <literal>APT::Cache::"
+"Important</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"In modo predefinito <command>depends</command> e <command>rdepends</command> "
+"stampano tutte le dipendenze. Ciò può essere modificato con queste opzioni "
+"che omettono il tipo specificato di dipendenza. Voce di configurazione "
+"<literal>APT::Cache::Show<replaceable>TipoDipendenza</replaceable></"
+"literal>, ad es. <literal>APT::Cache::ShowRecommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+"In modo predefinito <command>depends</command> e <command>rdepends</command> "
+"stampano solo le dipendenze esplicitamente espresse nei metadati. Con questa "
+"opzione mostrano anche le dipendenze aggiunte implicitamente sulla base dei "
+"dati incontrati. Ad esempio un <literal>Conflicts: pippo</literal> esprime "
+"implicitamente che questo pacchetto va in conflitto anche con il pacchetto "
+"pippo da qualsiasi altra architettura. Voce di configurazione: <literal>APT::"
+"Cache::ShowImplicit</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"Stampa l'intero record dei pacchetti durante la ricerca. Voce di "
+"configurazione: <literal>APT::Cache::ShowFull</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"Stampa i record completi per tutte le versioni disponibili. Questa è "
+"l'impostazione predefinita; per disattivarla, usare <option>--no-all-"
+"versions</option>. Se si specifica <option>--no-all-versions</option>, verrà "
+"visualizzata solo la versione candidata (quella che sarebbe scelta per "
+"l'installazione). Questa opzione è applicabile solo al comando "
+"<literal>show</literal>. Voce di configurazione: <literal>APT::Cache::"
+"AllVersions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"Esegui la rigenerazione automatica della cache dei pachetti, piuttosto che "
+"usare la cache così com'è. Questa è l'impostazione predefinita; per "
+"disattivarla, usare <option>--no-generate</option>. Voce di configurazione: "
+"<literal>APT::Cache::Generate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"Cerca soltanto nei nomi dei pacchetti e dei pacchetti forniti, non nelle "
+"descrizioni lunghe. Voce di configurazione: <literal>APT::Cache::NamesOnly</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"Fai sì che <literal>pkgnames</literal> stampi tutti i nomi, inclusi i "
+"pacchetti virtuali e le dipendenze mancanti. Voce di configurazione: "
+"<literal>APT::Cache::AllNames</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"Rendi ricorsivi <literal>depends</literal> e <literal>rdepends</literal> in "
+"modo che tutti i pacchetti menzionati siano stampati una sola volta. Voce di "
+"configurazione: <literal>APT::Cache::RecurseDepends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"Limita l'output di <literal>depends</literal> e <literal>rdepends</literal> "
+"ai pacchetti attualmente installati. Voce di configurazione: <literal>APT::"
+"Cache::Installed</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+"Aggiunge il file fornito come fonte di metadati. Può essere ripetuto per "
+"aggiungere più file. Attualmente sono gestiti file <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> e <literal>Packages</literal>, oltre a directory di pacchetti "
+"sorgente. La corrispondenza con i file si basa solo sul nome, non sul loro "
+"contenuto!"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+"<literal>Sources</literal> e <literal>Packages</literal> possono essere "
+"compressi in qualsiasi formato gestito da apt, a patto che abbiano "
+"l'estensione corretta. Se è necessario archiviare più file in una directory "
+"si può aggiungere a un nome a propria scelta un prefisso che termina con un "
+"trattino basso («<literal>_</literal>»). Esempio: mio.esempio_Packages.xz"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"Notare che queste fonti vengono trattate come fidate (vedere &apt-secure;). "
+"Voce di configurazione: <literal>APT::Sources::With</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> restituisce zero in caso di funzionamento "
+"normale e il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "strumento APT per la gestione delle chiavi"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> viene usato per gestire l'elenco delle chiavi "
+"usate da apt per autenticare i pacchetti. I pacchetti che sono stati "
+"autenticati usando queste chiavi verranno considerati fidati."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+"Notare che si desidera usare <command>apt-key</command> è necessaria "
+"l'installazione aggiuntiva della suite GNU Privacy Guard (pacchettizzata in "
+"<package>gnupg</package>). Espressamente per questo motivo l'uso "
+"programmatico (specialmente in script del manutentore per i pacchetti!) è "
+"fortemente sconsigliato. Inoltre il formato di output di tutti i comandi non "
+"è definito e può cambiare, e lo fa, ogni volta che cambiano i comandi "
+"sottostanti. <command>apt-key</command> cerca di rilevare questi usi e "
+"genera in questi casi avvertimenti sullo stderr."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr "File di portachiavi gestiti"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+"apt-key gestisce nei file con l'estensione «<literal>gpg</literal>» "
+"solamente il formato binario OpenPGP (noto anche come «GPG key public "
+"ring»), non il formato di database keybox introdotto come file di "
+"portachiavi predefinito nelle versioni più nuove di &gpg;. I file di "
+"portachiavi binari pensati per essere usati con qualsiasi versione di apt "
+"dovrebbero perciò sempre essere creati con <command>gpg --export</command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+"In alternativa, se tutti i sistemi che devono usare il portachiavi creato "
+"hanno una installata versione di apt almeno >= 1.4, si può utilizzare invece "
+"il formato armored ASCII con l'estensione «<literal>asc</literal>» che può "
+"essere creato con <command>gpg --armor --export</command>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "Comandi"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"Aggiunge una nuova chiave all'elenco delle chiavi fidate. La chiave viene "
+"letta dal file specificato con il parametro &synopsis-param-filename; o, se "
+"il nome file è <literal>-</literal>, dallo standard input."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+"È di importanza critica verificare che le chiavi aggiunte manualmente usando "
+"<command>apt-key</command> appartengano al proprietario del repository per "
+"cui dichiarano di essere, altrimenti l'infrastruttura &apt-secure; viene "
+"completamente minata alla base."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+"<emphasis>Nota bene</emphasis>: invece di usare questo comando un "
+"portachiavi dovrebbe essere messo direttamente nella directory <filename>/"
+"etc/apt/trusted.gpg.d/</filename> con un nome descrittivo e con "
+"«<literal>gpg</literal>» o «<literal>asc</literal>» come estensione di file."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr "Rimuove una chiave dall'elenco delle chiavi fidate."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr ""
+"Visualizza sullo standard output l'&synopsis-param-keyid; della chiave."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "Visualizza sullo standard output tutte le chiavi fidate."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr "Elenca le chiavi fidate con le impronte digitali."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+"Passa opzioni avanzate a gpg. Con <command>adv --recv-key</command> si può, "
+"ad esempio, scaricare una chiave da un server di chiavi direttamente "
+"nell'insieme delle chiavi fidate. Notare che <emphasis>non</emphasis> viene "
+"effettuato alcun controllo, perciò è facile minare completamente "
+"l'infrastruttura &apt-secure; se viene usato senza cautela."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr "(deprecato)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"Aggiorna il portachiavi locale con il portachiavi dell'archivio e rimuove "
+"dal portachiavi locale le chiavi di archivio che non sono più valide. Il "
+"portachiavi degli archivi è fornito nel pacchetto <literal>archive-keyring</"
+"literal> delle diverse distribuzioni, ad esempio il pacchetto &keyring-"
+"package; in &keyring-distro;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+"Notare che una distribuzione non ha più bisogno di usare questo comando, e "
+"di fatto non dovrebbe farlo, e invece fornisce file portachiavi direttamente "
+"nella directory <filename>/etc/apt/trusted.gpg.d/</filename>, dato che "
+"questo evita una dipendenza da <package>gnupg</package> ed è più facile, sia "
+"per i manutentori sia per gli utenti, gestire chiavi semplicemente "
+"aggiungendo e rimuovendo file."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"Effettua un aggiornamento funzionando in modo simile al comando "
+"<command>update</command> descritto prima, ma ottiene invece il portachiavi "
+"degli archivi da un URI e lo convalida usando una chiave master. Ciò "
+"richiede che &wget; sia installato, e una versione di APT configurata per "
+"avere un server da cui scaricare e un portachiavi master per la convalida. "
+"APT in Debian non supporta questo comando, ma fa affidamento sul comando "
+"<command>update</command>; APT in Ubuntu invece lo fa."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "Opzioni"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"Notare che le opzioni devono essere definite prima dei comandi descritti "
+"nella sezione precedente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"Con questa opzione è possibile specificare un particolare file portachiavi "
+"su cui deve operare il comando. Il comportamento predefinito esegue i "
+"comandi sul file <filename>trusted.gpg</filename>, così come su tutte le "
+"parti nella directory <filename>trusted.gpg.d</filename>; <filename>trusted."
+"gpg</filename> è però il portachiavi primario il che significa, ad esempio, "
+"che le nuove chiavi sono aggiunte ad esso."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr "mostra, imposta e deconfigura varie impostazioni per un pacchetto"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+"<command>apt-mark</command> può essere usato come fronted unificato per "
+"configurare varie impostazioni per un pacchetto, come contrassegnarlo come "
+"installato automaticamente/manualmente, oppure per cambiare selezioni di "
+"<command>dpkg</command> come blocco, installazione, rimozione ed "
+"eliminazione completa, che vengono onorate, ad esempio, da <command>apt-get "
+"dselect-upgrade</command> o <command>aptitude</command>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr "Pacchetti installati automaticamente e manualmente"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"Quando viene richiesta l'installazione di un pacchetto e ciò fa sì che altri "
+"pacchetti vengano installati per soddisfare le sue dipendenze, queste ultime "
+"sono contrassegnate come installate automaticamente, mentre i pacchetti che "
+"vengono installati esplicitamente sono contrassegnati come installati "
+"manualmente. Una volta che non c'è più alcun pacchetto installato "
+"manualmente che dipende da un dato pacchetto installato automaticamente, "
+"quest'ultimo viene considerato come non più necessario e, ad esempio, "
+"<command>apt-get</command> o <command>aptitude</command> come minimo "
+"suggeriscono di rimuoverlo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> viene usato per contrassegnare un pacchetto come "
+"installato automaticamente, il che fa sì che il pacchetto venga rimosso "
+"quando non c'è più alcun pacchetto installato manualmente che dipende da "
+"esso."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> viene usato per contrassegnare un pacchetto come "
+"installato manualmente, il che impedisce che un pacchetto venga rimosso "
+"automaticamente se nessun altro dipende da esso."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>auto</literal> is used to mark a package as being automatically "
+#| "installed, which will cause the package to be removed when no more "
+#| "manually installed packages depend on this package."
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>auto</literal> viene usato per contrassegnare un pacchetto come "
+"installato automaticamente, il che fa sì che il pacchetto venga rimosso "
+"quando non c'è più alcun pacchetto installato manualmente che dipende da "
+"esso."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal> viene usato per stampare un elenco di pacchetti "
+"installati automaticamente, ciascuno su una riga. Se non viene specificato "
+"alcun pacchetto, vengono elencati tutti i pacchetti installati "
+"automaticamente. Se vengono specificati dei pacchetti, verranno mostrati "
+"solo quelli automaticamente installati."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> può essere usato nello stesso modo di "
+"<literal>showauto</literal>, tranne per il fatto che stampa invece un elenco "
+"dei pacchetti installati manualmente"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"Legge/Scrive le statistiche sui pacchetti dal file specificato con il "
+"parametro &synopsis-param-filename; invece che dalla posizione predefinita "
+"che è <filename>extended_status</filename> nella directory definita dalla "
+"voce di configurazione <literal>Dir::State</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr "Evitare modifiche ad un pacchetto"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>hold</literal> viene usato per contrassegnare un pacchetto come "
+"bloccato, il che impedisce che un pacchetto venga installato, aggiornato o "
+"rimosso automaticamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> viene usato per annullare un blocco impostato in "
+"precedenza, per permettere nuovamente tutte le azioni."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> viene usato per stampare un elenco di pacchetti "
+"bloccati in modo uguale a ciò che fanno gli altri comandi «show»."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr "Pianificare l'installazione, rimozione ed eliminazione di pacchetti"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+"Alcuni frontend, come <command>apt-get dselect-upgrade</command> possono "
+"essere usati per applicare modifiche allo stato di installazione dei "
+"pacchetti precedentemente pianificate. Queste modifiche possono essere "
+"pianificate usando i comandi <option>install</option>, <option>remove</"
+"option> (noto anche come <option>deinstall</option>) e <option>purge</"
+"option>. I pacchetti con una selezione specifica possono essere visualizzati "
+"rispettivamente con <option>showinstall</option>, <option>showremove</"
+"option> e <option>showpurge</option>. Ulteriori informazioni su queste "
+"cosiddette selezioni di dpkg possono essere trovate in &dpkg;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> restituisce zero in caso di funzionamento "
+"normale e un valore diverso da zero in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "supporto per l'autenticazione degli archivi per APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "Starting with version 0.6, <command>APT</command> contains code that does "
+#| "signature checking of the Release file for all repositories. This ensures "
+#| "that data like packages in the archive can't be modified by people who "
+#| "have no access to the Release file signing key. Starting with version 1.1 "
+#| "<command>APT</command> requires repositories to provide recent "
+#| "authentication information for unimpeded usage of the repository."
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"A partire dalla versione 0.6, <command>APT</command> contiene del codice che "
+"controlla le firme dei file Release per tutti i repository. Ciò assicura che "
+"dati quali i pacchetti nell'archivio non possano essere modificati da "
+"persone che non hanno accesso alla chiave di firma dei file Release. A "
+"partire dalla versione 1.1 <command>APT</command> richiede che i repository "
+"forniscano informazioni di autenticazione recenti per l'uso senza problemi "
+"del repository."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"Nota: tutti i front-end di gestione dei pacchetti basati su APT, come &apt-"
+"get;, &aptitude; e &synaptic;, supportano questa funzionalità di "
+"autenticazione, perciò questa pagina di manuale usa <literal>APT</literal> "
+"per fare riferimento a tutti loro solo per ragioni di semplicità."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted Repositories"
+msgid "Unsigned Repositories"
+msgstr "Repository fidati"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+"Se un archivio ha un file Release non firmato o non ha per nulla un file "
+"Release, tutte le versioni attuali di APT si rifiutano in modo predefinito "
+"di scaricare dati da esso durante le operazioni di <command>update</"
+"command>, e i frontend come <command>apt-get</command>, anche se forzati a "
+"scaricare, richiedono una conferma esplicita se una richiesta di "
+"installazione include un pacchetto da un archivio non autenticato di questo "
+"tipo."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+"Si possono forzare tutti i client APT a dare solo avvertimenti impostando "
+"l'opzione di configurazione <option>Acquire::AllowInsecureRepositories</"
+"option> a <literal>true</literal>. È anche possibile abilitare singoli "
+"repository non sicuri attraverso l'opzione per &sources-list; <literal>allow-"
+"insecure=yes</literal>. Notare che l'uso di repository non sicuri è "
+"fortemente sconsigliato e tutte le opzioni per forzare apt a continuare a "
+"supportarli verranno da ultimo rimosse. Gli utenti hanno a disposizione "
+"anche l'opzione <option>Trusted</option> per disabilitare anche gli "
+"avvertimenti, ma assicurarsi di avere compreso le implicazioni, come "
+"spiegato in dettaglio in &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+"Un repository che in precedenza era autenticato ma che perde il proprio "
+"stato in un'operazione di <command>update</command> genera un errore in "
+"tutti i client APT indipendentemente dall'opzione per permettere o proibire "
+"l'uso di repository non sicuri. L'errore può essere scavalcato impostando in "
+"aggiunta <option>Acquire::AllowDowngradeToInsecureRepositories</option> a "
+"<literal>true</literal> o, per repository individuali, con l'opzione "
+"<literal>allow-downgrade-to-insecure=yes</literal> per &sources-list;."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted Repositories"
+msgid "Signed Repositories"
+msgstr "Repository fidati"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"La catena di fiducia da un archivio APT all'utente finale è composta di vari "
+"passaggi intermedi. <command>apt-secure</command> è l'ultimo della catena; "
+"il fatto che si abbia fiducia in un archivio non significa che si abbia "
+"fiducia che i suoi pacchetti non contengano codice malevolo, ma significa "
+"che si ha fiducia nel manutentore dell'archivio. È responsabilità del "
+"manutentore dell'archivio assicurare che sia preservata l'integrità "
+"dell'archivio."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"apt-secure non controlla le firme a livello di pacchetto. Se si desiderano "
+"strumenti per farlo, si possono guardare <command>debsig-verify</command> e "
+"<command>debsign</command> (forniti rispettivamente nei pacchetti debsig-"
+"verify e devscripts)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"La catena di fiducia in Debian ha inizio (ad esempio) quando un manutentore "
+"carica un nuovo pacchetto o una nuova versione di un pacchetto nell'archivio "
+"Debian. Per poter diventare effettivo, questo caricamento deve essere "
+"firmato con una chiave contenuta in uno dei portachiavi dei manutentori "
+"Debian (disponibili nel pacchetto debian-keyring). Le chiavi dei manutentori "
+"sono firmate da altri manutentori seguendo delle procedure prestabilite, per "
+"assicurare l'identità del proprietario della chiave. Procedure simili "
+"esistono in tutte le distribuzioni basate su Debian."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"Una volta che il pacchetto caricato è verificato e incluso nell'archivio, la "
+"firma del manutentore viene rimossa e i codici di controllo del pacchetto "
+"vengono calcolati e messi nel file Packages. Vengono quindi calcolati i "
+"codici di controllo di tutti i file Packages e vengono messi nel file "
+"Release. Il file Release viene poi firmato con la chiave dell'archivio per "
+"questo rilascio di &keyring-distro; e viene distribuito insieme ai pacchetti "
+"e ai file Packages nei mirror &keyring-distro;. Le chiavi sono nel "
+"portachiavi degli archivi &keyring-distro;, disponibile nel pacchetto "
+"&keyring-package;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"Gli utenti finali possono controllare la firma del file Release, estrarre da "
+"esso il codice di controllo di un pacchetto e confrontarlo con il codice di "
+"controllo del pacchetto che hanno scaricato a mano, oppure possono affidarsi "
+"ad APT che lo fa automaticamente."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"Notare che questo è diverso dal controllare le firme per ciascun pacchetto. "
+"È progettato per prevenire due possibili attacchi:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>Attacchi di rete «man in the middle»</literal>. Senza il controllo "
+"delle firme, soggetti malevoli possono introdursi nel processo di "
+"scaricamento dei pacchetti e fornire software pericoloso controllando un "
+"elemento di rete (router, switch, ecc.) oppure ridirigendo il traffico ad un "
+"server cattivo (attraverso attacchi di falsificazione di DNS e ARP)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>Compromissione della rete dei mirror</literal>. Senza il controllo "
+"delle firme, soggetti malevoli possono compromettere un host mirror e "
+"modificare i file su di esso per propagare il software pericoloso a tutti "
+"gli utenti che scaricano i pacchetti da quell'host."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"Tuttavia non difende dalle compromissioni del server principale stesso (che "
+"firma i pacchetti) o dalla compromissione della chiave usata per firmare i "
+"file Release. In ogni caso, questo meccanismo può complementare le firme a "
+"livello di singolo pacchetto."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr "Configurazione utente"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"<command>apt-key</command> è il programma che gestisce l'elenco delle chiavi "
+"usate da APT per fidarsi dei repository. Può essere usato per aggiungere o "
+"rimuovere chiavi, oltre che per elencare le chiavi fidate. È possibile "
+"limitare quali chiavi possono firmare determinati archivi usando "
+"<option>Signed-By</option> in &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+"Notare che un'installazione predefinita contiene già tutte le chiavi per "
+"acquisire in modo sicuro i pacchetti dai repository predefiniti, perciò le "
+"modifiche fatte a mano con <command>apt-key</command> sono necessarie solo "
+"se vengono aggiunti repository di terze parti."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"Per aggiungere una nuova chiave, è necessario prima scaricarla (ci si "
+"dovrebbe assicurare di usare un canale di comunicazione fidato quando la si "
+"recupera), aggiungerla con <command>apt-key</command> e poi eseguire "
+"<command>apt-get update</command>, in modo che apt possa scaricare e "
+"verificare i file <filename>InRelease</filename> o <filename>Release.gpg</"
+"filename> dagli archivi che sono configurati."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Repository Configuration"
+msgstr "Configurazione utente"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+"Se si desiderano fornire firme per un archivio di cui si è il manutentore, "
+"si deve:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"<emphasis>Creare un file Release di livello più alto</emphasis>, se non "
+"esiste già. Lo si può fare eseguendo <command>apt-ftparchive release</"
+"command> (fornito in apt-utils)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>Firmarlo</emphasis>. Lo si può fare eseguendo <command>gpg --"
+"clearsign -o InRelease Release</command> e <command>gpg -abs -o Release.gpg "
+"Release</command>."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>Pubblicare l'impronta digitale della chiave</emphasis>, in modo "
+"che i propri utenti sappiano quale chiave devono importare per poter "
+"autenticare i file nell'archivio. È meglio distribuire la propria chiave in "
+"un proprio pacchetto portachiavi, come &keyring-distro; fa con &keyring-"
+"package; per essere in grado in futuro di distribuire aggiornamenti e "
+"transizioni di chiave in modo automatico."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+"<emphasis>Fornire istruzioni su come aggiungere il proprio archivio e la "
+"propria chiave</emphasis>. Se i propri utenti non possono acquisire la "
+"chiave in maniera sicura, la catena di fiducia descritta sopra viene "
+"interrotta. Il modo in cui si può aiutare gli utenti ad aggiungere la "
+"propria chiave dipende dal proprio archivio e dalla propria utenza e va da "
+"avere un proprio pacchetto portachiavi incluso in un altro archivio che gli "
+"utenti hanno già configurato (come i repository predefiniti della loro "
+"distribuzione) a sfruttare la rete di fiducia."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"Ogni volta che i contenuti dell'archivio cambiano (sono aggiunti o rimossi "
+"nuovi pacchetti), il manutentore dell'archivio deve compiere nuovamente i "
+"primi due passi descritti sopra."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"Per maggiori informazioni sui concetti alla base di questo sistema, si può "
+"leggere il capitolo <ulink url=\"https://www.debian.org/doc/manuals/securing-"
+"debian-howto/ch7\">Debian Security Infrastructure</ulink> del manuale "
+"Securing Debian (disponibile anche nel pacchetto harden-doc) e il <ulink url="
+"\"http://www.cryptnet.net/fdp/crypto/strong_distro.html\" >Strong "
+"Distribution HOWTO</ulink> di V. Alex Brennen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "Autori della pagina di manuale"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"Questa pagina di manuale è basata sul lavoro di Javier Fernández-Sanguino "
+"Peña, Isaac Jones, Colin Walters, Florian Weimer e Michael Vogt."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "strumento APT per la gestione dei CD-ROM"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"<command>apt-cdrom</command> è usato per aggiungere un nuovo CD-ROM alla "
+"lista delle fonti disponibili per APT. <command>apt-cdrom</command> si "
+"prende cura di determinare la struttura del disco e anche di correggere "
+"possibili errori di masterizzazione e di verificare i file indice."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"Per aggiungere dei CD al sistema APT è necessario usare <command>apt-cdrom</"
+"command>, in quanto ciò non può essere fatto manualmente. Inoltre ogni disco "
+"in un insieme di più CD deve essere inserito e scansionato separatamente per "
+"tenere conto di possibili errori di masterizzazione."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"<literal>add</literal> è usato per aggiungere un nuovo disco alla lista "
+"delle fonti. Smonterà il device del CD-ROM, chiederà di inserire un disco e "
+"poi procederà alla sua scansione e copierà i file indice. Se il disco non ha "
+"una directory <filename>.disk/</filename> corretta, verrà chiesto un titolo "
+"descrittivo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"APT usa un identificativo per i CD-ROM per tenere traccia di quale disco è "
+"attualmente nel lettore e mantiene un database di questi identificativi nel "
+"file <filename>&statedir;/cdroms.list</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"Uno strumento di debug per riportare l'identità del disco corrente così come "
+"il nome dei file memorizzato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"Non cercare di rilevare automaticamente il percorso del CD-ROM. Solitamente "
+"usato insieme all'opzione <option>--cdrom</option>. Voce di configurazione: "
+"<literal>Acquire::cdrom::AutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"Punto di mount; specifica la posizione in cui montare il CD-ROM. Questo "
+"punto di mount deve essere elencato nel file <filename>/etc/fstab</filename> "
+"e configurato correttamente. Voce di configurazione: <literal>Acquire::"
+"cdrom::mount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"Rinomina un disco; cambia l'etichetta di un disco o soppianta l'etichetta "
+"originale del disco. Questa opzione farà sì che <command>apt-cdrom</command> "
+"chieda una nuova etichetta. Voce di configurazione: <literal>APT::CDROM::"
+"Rename</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"Non montare; impedisce ad <command>apt-cdrom</command> di montare e smontare "
+"il punto di mount. Voce di configurazione: <literal>APT::CDROM::NoMount</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"Copia rapida; assume che i file dei pacchetti siano validi e non verifica "
+"ogni pacchetto. Questa opzione dovrebbe essere usata solo se <command>apt-"
+"cdrom</command> è stato già eseguito sul disco e non ha rilevato alcun "
+"errore. Voce di configurazione: <literal>APT::CDROM::Fast</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"Scansione approfondita dei file Package; questa opzione può essere "
+"necessaria con alcuni dischi delle vecchie Debian 1.1/1.2 in cui i file "
+"Package si trovano in posti inconsueti. La scansione dei CD richiederà molto "
+"più tempo, ma troverà tutti i file."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"Nessun cambiamento; non cambia il file &sources-list; e non scrive i file "
+"indice. Tuttavia ogni cosa è comunque verificata. Voce di configurazione: "
+"<literal>APT::CDROM::NoAct</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> restituisce zero in caso di funzionamento "
+"normale e il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "programma di interrogazione della configurazione di APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> è un programma interno usato da varie parti "
+"della suite APT per fornire una configurabilità coerente. Accede al file "
+"principale di configurazione <filename>/etc/apt/apt.conf</filename> in un "
+"modo facile da usare da parte di applicazioni che usano script."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"shell viene usato per accedere alle informazioni di configurazione da parte "
+"di uno script di shell. Riceve coppie di argomenti, il primo dei quali è una "
+"variabile di shell e il secondo è il valore di configurazione da "
+"interrogare. Come risultato elenca il comando shell di assegnazione per "
+"ciascun valore presente. In uno script di shell dovrebbe essere usato in "
+"modo simile a:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPZIONI=\"-f\"\n"
+"RES=`apt-config shell OPZIONI MiaApp::opzioni`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"In questo modo la variabile d'ambiente $OPZIONI della shell verrà impostata "
+"al valore di MiaApp::opzioni con un valore predefinito di <option>-f</"
+"option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"La voce di configurazione può essere seguita da /[fdbi]. f restituisce nomi "
+"di file, d restituisce directory, b restituisce vero o falso e i restituisce "
+"un intero. Ogni valore restituito è normalizzato e verificato internamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "Mostra soltanto i contenuti dello spazio di configurazione."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"Include le opzioni che hanno un valore vuoto. Questo è il comportamento "
+"predefinito, perciò usare --no-empty per rimuoverle dall'output."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"Definisce l'output per ciascuna opzione di configurazione. &percnt;t verrà "
+"sostituito dal suo nome, &percnt;f dal suo nome gerarchico completo e "
+"&percnt;v dal suo valore. Usa le lettere maiuscole e i caratteri speciali "
+"nel valore verranno codificati per assicurare che possano essere usati senza "
+"problemi in una stringa tra virgolette, come definito nella RFC822. In "
+"aggiunta &percnt;n verrà sostituito da un ritorno a capo e &percnt;N da una "
+"tabulazione. Un carattere &percnt; può essere prodotto usando &percnt;"
+"&percnt;. "
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> restituisce zero in caso di funzionamento "
+"normale e il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "Documentazione iniziale di Debug::*."
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "file di configurazione di APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"<filename>/etc/apt/apt.conf</filename> è il file di configurazione "
+"principale condiviso da tutti gli strumenti nella suite APT, anche se non è "
+"affatto l'unico posto in cui possono essere impostate opzioni. La suite "
+"condivide anche un analizzatore comune della riga di comando per fornire un "
+"ambiente uniforme."
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+"Quando uno strumento APT viene avviato, legge i file di configurazione nel "
+"seguente ordine:"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+"il file specificato dalla variabile d'ambiente <envar>APT_CONFIG</envar> (se "
+"presente)"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"tutti i file in <literal>Dir::Etc::Parts</literal>, in ordine alfanumerico "
+"crescente, se il loro nome file non ha estensione o ha «<literal>conf</"
+"literal>» come estensione, e contiene solamente caratteri alfanumerici, "
+"trattini (-), caratteri di sottolineatura (_) e punti (.). Altrimenti, APT "
+"visualizza un messaggio che informa che un file è stato ignorato, a meno che "
+"il file non corrisponda ad un modello nell'elenco di configurazione "
+"<literal>Dir::Ignore-Files-Silently</literal> nel qual caso verrà ignorato "
+"silenziosamente."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+"il file di configurazione principale specificato da <literal>Dir::Etc::main</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+"tutte le opzioni impostate nel sottoalbero di configurazione specifico dei "
+"binari sono spostate nella radice dell'albero."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"le opzioni nella riga di comando sono applicate per scavalcare le direttive "
+"di configurazione o per caricare ulteriori file di configurazione."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "Sintassi"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"Il file di configurazione ha un'organizzazione ad albero con le opzioni "
+"riunite in gruppi funzionali. Un'opzione viene specificata con una notazione "
+"a due punti (:); per esempio <literal>APT::Get::Assume-Yes</literal> è "
+"un'opzione per lo strumento Get all'interno del gruppo dello strumento APT. "
+"Le opzioni non ereditano dai gruppi genitori."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+"Sintatticamente il linguaggio di configurazione è basato sul modello di "
+"quello usato dagli strumenti ISC come bind e dhcp. Le righe che iniziano con "
+"<literal>//</literal> vengono trattate come commenti (ignorate), così come "
+"tutto il testo racchiuso tra <literal>/*</literal> e <literal>*/</literal>, "
+"proprio come i commenti C/C++. Ogni riga ha la forma <literal>APT::Get::"
+"Assume-Yes \"true\";</literal>. Le virgolette e il punto e virgola finale "
+"sono obbligatori. I valori non possono includere barre inverse (\\) o "
+"ulteriori virgolette. I nomi delle opzioni sono costituiti da caratteri "
+"alfanumerici e dai caratteri «/-:._+». Un nuovo ambito può essere aperto con "
+"parentesi graffe come in:"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+"con le nuove righe posizionate in modo da renderle più leggibili. Si possono "
+"creare elenchi aprendo un ambito e includendo una singola stringa racchiusa "
+"tra virgolette e seguita da un punto e virgola. Possono essere incluse più "
+"voci, separate da un punto e virgola."
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+"In generale i file di configurazione d'esempio &configureindex; sono una "
+"buona guida su come debba essere un file di configurazione."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+"I nomi delle voci di configurazione sono insensibili all'uso di maiuscole e "
+"minuscole, perciò nell'esempio precedente si sarebbe potuto usare "
+"<literal>dpkg::pre-install-pkgs</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+"I nomi delle voci di configurazione sono opzionali se viene definito un "
+"elenco come si può vedere nell'esempio <literal>DPkg::Pre-Install-Pkgs</"
+"literal> precedente. Se non si specifica un nome, una nuova voce aggiunge "
+"semplicemente una nuova opzione all'elenco. Se si specifica un nome, si può "
+"sovrascrivere l'opzione come per ogni altra, assegnandole un nuovo valore."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+"Sono definiti due comandi speciali: <literal>#include</literal> (che è "
+"deprecato e non supportato da implementazioni alternative) e "
+"<literal>#clear</literal>. <literal>#include</literal> include il file "
+"indicato a meno che il suo nome non termini con un carattere «/», nel qual "
+"caso viene inclusa l'intera directory. <literal>#clear</literal> viene usato "
+"per eliminare una parte dell'albero di configurazione. L'elemento "
+"specificato e tutti i suoi discendenti vengono eliminati. (Notare che anche "
+"queste righe devono terminare con un punto e virgola.)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+"Il comando <literal>#clear</literal> è l'unico modo di cancellare un elenco "
+"o un intero ambito. Riaprire un ambito (o usare la sintassi descritta più "
+"sotto aggiungendo alla fine <literal>::</literal>) <emphasis>non</emphasis> "
+"sovrascrive le voci precedentemente scritte. Le opzioni possono essere "
+"sovrascritte solamente assegnandovi un nuovo valore; gli elenchi e gli "
+"ambiti non possono essere sovrascritti, solo cancellati."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+"Tutti gli strumenti APT accettano un'opzione -o che permette di specificare "
+"una direttiva di configurazione arbitraria nella riga di comando. La "
+"sintassi è un nome completo di opzione (per esempio <literal>APT::Get::"
+"Assume-Yes</literal>) seguito da un segno di uguaglianza e quindi il nuovo "
+"valore dell'opzione. Per aggiungere un nuovo elemento ad un elenco, "
+"aggiungere <literal>::</literal> alla fine del nome dell'elenco. (Come si "
+"può immaginare, la sintassi per gli ambiti non può essere usata nella riga "
+"di comando.)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+"Notare che aggiungere voci in coda ad un elenco usando <literal>::</literal> "
+"funziona solamente con un elemento per riga, e che non si dovrebbe usarlo "
+"insieme alla sintassi per gli ambiti (che aggiunge implicitamente <literal>::"
+"</literal>). L'uso di entrambe le sintassi insieme fa apparire un bug che "
+"sfortunatamente alcuni utenti utilizzano: un'opzione con l'insolito nome "
+"«<literal>::</literal>» che funziona come una qualsiasi altra opzione con "
+"nome. Ciò introduce molti problemi; innanzitutto gli utenti che scrivono più "
+"righe con questa sintassi <emphasis>sbagliata</emphasis> nella speranza di "
+"aggiungere voci ad un elenco ottengono il risultato opposto, dato che viene "
+"usata solo l'ultima assegnazione per questa opzione «<literal>::</literal>». "
+"Le versioni future di APT causeranno errori e smetteranno di funzionare se "
+"incontrano questo uso scorretto, perciò è bene correggere tali dichiarazioni "
+"ora, quando APT ancora non si lamenta esplicitamente."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr "Il gruppo APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+"Questo gruppo di opzioni controlla il comportamento generale di APT, oltre a "
+"contenere le opzioni per tutti gli strumenti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+"Architettura di sistema; imposta l'architettura da usare quando si "
+"recuperano i file e si analizzano gli elenchi dei pacchetti. Il valore "
+"predefinito interno è l'architettura per la quale apt è stato compilato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+"Tutte le architetture supportate dal sistema. Ad esempio, le CPU che "
+"implementano l'insieme di istruzioni <literal>amd64</literal> (chiamato "
+"anche <literal>x86-64</literal>) sono anche in grado di eseguire binari "
+"compilati per l'insieme di istruzioni <literal>i386</literal> (<literal>x86</"
+"literal>). Questo elenco viene usato quando si recuperano i file e si "
+"analizzano gli elenchi dei pacchetti. Il valore iniziale predefinito è "
+"sempre l'architettura nativa del sistema (<literal>APT::Architecture</"
+"literal>), e le altre architetture vengono aggiunte all'elenco predefinito "
+"quando sono registrate con <command>dpkg --add-architecture</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+"Questo ambito definisce quali formati di compressione sono gestiti, come "
+"possono essere effettuate la compressione e la decompressione se il supporto "
+"per il formato non è incorporato direttamente in apt e un valoro di costo "
+"che indica quanto costoso è comprimere qualcosa in questo formato. Come "
+"esempio, la seguente sezione di configurazione permette ad apt di scaricare "
+"e decomprimere, oltre a creare e archiviare, file con l'estensione a basso "
+"costo <literal>.reversed</literal> che passerà al comando <command>rev</"
+"command> senza parametri aggiuntivi per la compressione e la decompressione "
+"nella riga di comando:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+"Elenco dei profili di compilazione abilitati per la risoluzione delle "
+"dipendenze di compilazione, senza il prefisso dello spazio dei nomi "
+"«<literal>profile.</literal>». In modo predefinito questa lista è vuota. "
+"<envar>DEB_BUILD_PROFILES</envar>, come usata da &dpkg-buildpackage; ha la "
+"precedenza sulla notazione della lista."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+"Il rilascio predefinito da cui installare i pacchetti se è disponibile più "
+"di una versione. Contiene il nome del rilascio, il nome in codice o la "
+"versione del rilascio. Esempi: «stable», «testing», «unstable», «&debian-"
+"stable-codename;», «&debian-testing-codename;», «4.0», «5.0*». Vedere anche "
+"&apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+"Ignora i pacchetti bloccati; questa opzione globale fa sì che il risolutore "
+"di problemi ignori i pacchetti bloccati nel suo processo decisionale."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+"Attiva in modo predefinito. Quando attiva, la funzionalità autoclean rimuove "
+"dalla cache ogni pacchetto che non può più essere scaricato. Se disattivata, "
+"allora sono esclusi dalla rimozione anche i pacchetti che sono installati; "
+"fare attenzione però al fatto che APT non fornisce alcun mezzo diretto per "
+"reinstallarli."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+"Attiva in modo predefinito, il che fa sì che APT installi i pacchetti "
+"essenziali e importanti non appena è possibile durante un'installazione o "
+"aggiornamento, per limitare l'effetto di una chiamata a &dpkg; che non ha "
+"successo. Se questa opzione è disattivata, APT tratta un pacchetto "
+"importante nello stesso modo di un pacchetto extra: tra lo spacchettamento "
+"del pacchetto A e la sua configurazione possono esserci molte altre chiamate "
+"di spacchettamento o configurazione per altri pacchetti non correlati B, C, "
+"ecc. Se queste causano il fallimento della chiamata a &dpkg; (ad esempio "
+"perché lo script del manutentore di B genera un errore), ciò ha come "
+"risultato un sistema in cui il pacchetto A è spacchettato ma non "
+"configurato; perciò non è più garantito il funzionamento di ogni pacchetto "
+"che dipende da A, dato che la dipendenza da A non è più soddisfatta."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+"Il contrassegno di configurazione immediata viene applicato anche nel caso "
+"potenzialmente problematico di dipendenze circolari, dato che una dipendenza "
+"con il contrassegno di immediato è equivalente ad una pre-dipendenza. In "
+"teoria ciò permette ad APT di riconoscere una situazione in cui non è in "
+"grado di effettuare la configurazione immediata, di terminare annullando e "
+"di suggerire all'utente che l'opzione dovrebbe essere temporaneamente "
+"disattivata per permettere la continuazione dell'operazione. Notare come sia "
+"stata usata l'espressione «in teoria»: in realtà questo problema si è "
+"verificato molto di rado, in versioni non stabili di distribuzione, ed è "
+"stato causato da dipendenze sbagliate del pacchetto interessato o da un "
+"sistema che era già in uno stato erroneo; perciò non si dovrebbe disattivare "
+"alla cieca questa opzione, dato che lo scenario descritto sopra non è "
+"l'unico problema che può aiutare a prevenire."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+"Prima di eseguire una grossa operazione come <literal>dist-upgrade</literal> "
+"con questa opzione disattivata, si dovrebbe provare a usare esplicitamente "
+"<literal>install</literal> sul pacchetto che APT non è stato in grado di "
+"configurare immediatamente; assicurarsi però di segnalare il problema alla "
+"propria distribuzione e al Team di APT usando il collegamento per i bug "
+"indicato in seguito, in modo che possano lavorare a migliorare o correggere "
+"il processo di aggiornamento."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+"Non attivare mai questa opzione a meno di non sapere <emphasis>veramente</"
+"emphasis> ciò che si sta facendo. Permette ad APT di rimuovere "
+"temporaneamente un pacchetto essenziale per rompere un ciclo Conflicts/"
+"Conflicts o Conflicts/Pre-Depends tra due pacchetti essenziali. <emphasis>Un "
+"tale ciclo non dovrebbe mai esistere ed è un bug grave</emphasis>. Questa "
+"opzione funziona se i pacchetti essenziali non sono <command>tar</command>, "
+"<command>gzip</command>, <command>libc</command>, <command>dpkg</command>, "
+"<command>dash</command> o qualsiasi altro da cui dipendono tali pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+"APT, a partire dalla versione 0.7.26, usa un file cache ridimensionabile "
+"mappato in memoria per memorizzare le informazioni disponibili. "
+"<literal>Cache-Start</literal> funziona da indicatore della dimensione che "
+"la cache raggiungerà ed è perciò la quantità di memoria che APT richiederà "
+"all'avvio. Il valore predefinito è 20971520 byte (~20 MB). Notare che questa "
+"quantità di spazio deve essere disponibile per APT, altrimenti probabilmente "
+"terminerà con un fallimento in modo molto poco grazioso; perciò per i "
+"dispositivi con memoria limitata questo valore dovrebbe essere abbassato, "
+"mentre nei sistemi con molte fonti configurate dovrebbe essere aumentato. "
+"<literal>Cache-Grow</literal> definisce di quanto verrà aumentata la "
+"dimensione della cache in byte, se lo spazio definito da <literal>Cache-"
+"Start</literal> non è sufficiente; il valore predefinito è 1048576 (~1 MB). "
+"Questo valore verrà applicato più volte, fino a che la cache non è grande "
+"abbastanza per memorizzare tutte le informazioni o la dimensione della cache "
+"raggiunge il valore <literal>Cache-Limit</literal>. Il valore predefinito di "
+"<literal>Cache-Limit</literal> è 0 che indica nessun limite. Se "
+"<literal>Cache-Grow</literal> viene impostato a 0 la crescita automatica "
+"della cache è disabilitata."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+"Definisce quali pacchetti sono considerati dipendenze di compilazione "
+"essenziali."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+"La sottosezione Get controlla lo strumento &apt-get;; vedere la sua "
+"documentazione per maggiori informazioni su queste opzioni."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"La sottosezione Cache controlla lo strumento &apt-cache;; vedere la sua "
+"documentazione per maggiori informazioni su queste opzioni."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"La sottosezione CDROM controlla lo strumento &apt-cdrom;; vedere la sua "
+"documentazione per maggiori informazioni su queste opzioni."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr "Il gruppo Acquire"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+"Il gruppo di opzioni <literal>Acquire</literal> controlla lo scaricamento "
+"dei pacchetti così come i vari «metodi di acquisizione» responsabili per lo "
+"scaricamento stesso (vedere anche &sources-list;)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Maximum time (in seconds) after its creation (as indicated by the "
+#| "<literal>Date</literal> header) that the <filename>Release</filename> "
+#| "file should be considered valid. If the Release file itself includes a "
+#| "<literal>Valid-Until</literal> header the earlier date of the two is used "
+#| "as the expiration date. The default value is <literal>0</literal> which "
+#| "stands for \"valid forever\". Archive specific settings can be made by "
+#| "appending the label of the archive to the option name. Preferably, the "
+#| "same can be achieved for specific &sources-list; entries by using the "
+#| "<option>Valid-Until-Max</option> option there."
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+"Tempo massimo (in secondi) dalla sua creazione (come indicata "
+"dall'intestazione <literal>Date</literal>) per il quale il file "
+"<filename>Release</filename> deve essere considerato valido. Se il file "
+"Release stesso include un'intestazione <literal>Valid-Until</literal>, viene "
+"usata come data di scadenza quella più corta. Il valore predefinito è "
+"<literal>0</literal> che sta per «valido per sempre». Possono essere fatte "
+"impostazioni specifiche per ciascun archivio aggiungendo l'etichetta "
+"dell'archivio in fondo al nome dell'opzione. È preferibile ottenere la "
+"stessa cosa per voci specifiche in &sources-list; usando lì l'opzione "
+"<option>Valid-Until-Max</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+"Opzione relativa alla sicurezza attiva in modo predefinito, poiché dare una "
+"data di scadenza alla convalida di un file Release evita attacchi ripetuti "
+"nel corso del tempo e può anche, per esempio, aiutare gli utenti a "
+"identificare i mirror che non sono più aggiornati, ma la funzionalità "
+"dipende dall'esattezza dell'orologio sul sistema dell'utente. I manutentori "
+"degli archivi sono incoraggiati a creare file Release con l'intestazione "
+"<literal>Valid-Until</literal>, ma se non lo fanno o se si desidera un "
+"valore più restrittivo può essere utilizzata l'opzione <literal>Max-"
+"ValidTime</literal> seguente. Per disabiitare il controllo in modo selettivo "
+"dovrebbe essere preferita l'opzione <option>Check-Valid-Until</option> delle "
+"voci in &sources-list;, invece di usare questa configurazione globale."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+"Tempo massimo (in secondi) dalla sua creazione (come indicata "
+"dall'intestazione <literal>Date</literal>) per il quale il file "
+"<filename>Release</filename> deve essere considerato valido. Se il file "
+"Release stesso include un'intestazione <literal>Valid-Until</literal>, viene "
+"usata come data di scadenza quella più corta. Il valore predefinito è "
+"<literal>0</literal> che sta per «valido per sempre». Possono essere fatte "
+"impostazioni specifiche per ciascun archivio aggiungendo l'etichetta "
+"dell'archivio in fondo al nome dell'opzione. È preferibile ottenere la "
+"stessa cosa per voci specifiche in &sources-list; usando lì l'opzione "
+"<option>Valid-Until-Max</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+"Tempo minimo (in secondi) dalla sua creazione (come indicata "
+"dall'intestazione <literal>Date</literal>) per il quale il file "
+"<filename>Release</filename> deve essere considerato valido. Utilizzare "
+"questa opzione se si deve usare un mirror (locale), aggiornato raramente, di "
+"un archivio aggiornato più spesso che ha un'intestazione <literal>Valid-"
+"Until</literal>, invece di disabilitare completamente il controllo della "
+"data di scadenza. Possono essere fatte impostazioni specifiche per ciascun "
+"archivio aggiungendo l'etichetta dell'archivio in fondo al nome "
+"dell'opzione. È preferibile ottenere la stessa cosa per voci specifiche in "
+"&sources-list; usando lì l'opzione <option>Valid-Until-Min</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+"Cerca di scaricare le differenze chiamate <literal>PDiff</literal> per gli "
+"indici (come i file <filename>Packages</filename>), invece di scaricare "
+"interamente i nuovi. Attiva in modo predefinito. È preferibile fare questa "
+"impostazione per file indice o voci specifiche in &sources-list; usando lì "
+"l'opzione <option>PDiffs</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+"Sono disponibili anche due sotto-opzioni per limitare l'uso dei PDiff: "
+"<literal>FileLimit</literal> può essere usata per specificare un numero "
+"massimo di file PDiff che devono essere scaricati per aggiornare un file. "
+"<literal>SizeLimit</literal>, invece, è la percentuale massima della "
+"dimensione di tutte le patch in rapporto alla dimensione del file finale "
+"considerato. Se uno di questi limiti viene superato, viene scaricato il file "
+"completo invece delle patch."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+"Cerca di scaricare gli indici usando un URI costruito a partire da una somma "
+"hash del file atteso invece che scaricato attraverso un nome di file stable "
+"ben noto. Attiva in modo predefinito, ma disabilitata in modo predefinito se "
+"la fonte non indica il supporto per essa. Il suo uso può essere forzato con "
+"il valore speciale «force». È preferibile impostarla per file indice o voci "
+"specifiche in &sources-list; usando lì l'opzione <option>By-Hash</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+"Modalità di coda; <literal>Queue-Mode</literal> può essere <literal>host</"
+"literal> o <literal>access</literal>, che determinano come APT mette in "
+"parallelo le connessioni in uscita. <literal>host</literal> significa che "
+"viene aperta una connessione per ogni host bersaglio, <literal>access</"
+"literal> significa che viene aperta una connessione per ogni tipo di URI."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+"Numero di tentativi successivi da effettuare. Se è diverso da zero, APT "
+"riproverà per il numero di volte specificato a scaricare i file con cui non "
+"ha avuto successo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+"Usa i collegamenti simbolici per gli archivi sorgente. Se impostata a vero, "
+"allora per gli archivi sorgente verranno creati, quando possibile, dei "
+"collegamenti simbolici invece di fare una copia. Il valore predefinito è "
+"vero."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+"<literal>ftp::Proxy</literal> imposta il proxy predefinito da usare per gli "
+"URI FTP. È nella forma standard <literal>ftp://[[utente][:password]@]host[:"
+"porta]/</literal>. Si possono anche specificare proxy per ciascun host "
+"usando la forma <literal>ftp::Proxy::&lt;host&gt;</literal> con la speciale "
+"parola chiave <literal>DIRECT</literal> che indica di non usare proxy. Se "
+"nessuna delle opzioni precedenti è impostata, viene usata la variabile "
+"d'ambiente <envar>ftp_proxy</envar>. Per usare un proxy FTP è necessario "
+"impostare lo script <literal>ftp::ProxyLogin</literal> nel file di "
+"configurazione. Questa voce specifica i comandi da inviare per dire al "
+"server proxy a cosa connettersi. Vedere &configureindex; per un esempio di "
+"come utilizzarla. Le variabili di sostituzione che rappresentano i "
+"corrispondenti componenti dell'URI sono <literal>$(PROXY_USER)</literal>, "
+"<literal>$(PROXY_PASS)</literal>, <literal>$(SITE_USER)</literal>, <literal>"
+"$(SITE_PASS)</literal>, <literal>$(SITE)</literal> e <literal>$(SITE_PORT)</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+"L'opzione <literal>timeout</literal> imposta il tempo di timeout usato dal "
+"metodo; questo valore si applica sia al timeout per la connessione sia a "
+"quello per i dati."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+"Sono fornite diverse impostazioni per controllare la modalità passiva. "
+"Generalmente è sicuro lasciare attiva la modalità passiva; funziona in quasi "
+"tutti gli ambienti. Tuttavia in alcune situazioni è necessario disabilitare "
+"la modalità passiva e usare invece la modalità per porta FTP. Ciò può essere "
+"fatto globalmente o, per connessioni che passano attraverso un proxy, per "
+"uno specifico host (vedere il file di configurazione d'esempio)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+"È possibile usare FTP attraverso un proxy via HTTP impostando la variabile "
+"d'ambiente <envar>ftp_proxy</envar> ad un URL HTTP; per la sintassi vedere "
+"la spiegazione del metodo http più sopra. Non è possibile impostare questa "
+"opzione nel file di configurazione e l'uso di FTP via HTTP non è raccomando "
+"a causa della sua bassa efficienza."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+"L'impostazione <literal>ForceExtended</literal> controlla l'uso dei comandi "
+"<literal>EPSV</literal> e <literal>EPRT</literal> della RFC 2428. Il valore "
+"predefinito è falso, il che significa che questi comandi sono usati "
+"solamente se la connessione di controllo è IPv6. Impostare questo valore a "
+"vero forza il loro uso anche su connessioni IPv4. Notare che la maggior "
+"parte dei server FTP non supporta la RFC 2428."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr "/cdrom/::Mount \"pippo\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+"Per URI che usano il metodo <literal>cdrom</literal>, l'unica opzione "
+"configurabile è il punto di mount, <literal>cdrom::Mount</literal>, che deve "
+"essere il punto di mount dell'unità CD-ROM (o DVD o quello che è), come "
+"specificato in <filename>/etc/fstab</filename>. È possibile fornire comandi "
+"alternativi per il montaggio e lo smontaggio se il proprio punto di mount "
+"non può essere elencato in fstab. La sintassi prevede di mettere "
+"<placeholder type=\"literallayout\" id=\"0\"/> all'interno del blocco "
+"<literal>cdrom</literal>. È importante che sia presente la barra in fondo. I "
+"comandi per lo smontaggio possono essere specificati usando UMount."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+"Per gli URI GPGV l'unica opzione configurabile è <literal>gpgv::Options</"
+"literal>, che passa parametri aggiuntivi a gpgv."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr "Acquire::CompressionTypes::<replaceable>EstensioneFile</replaceable> \"<replaceable>NomeMetodo</replaceable>\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+"Elenco di tipi di compressione che sono capiti dai metodi di acquisizione. I "
+"file come <filename>Packages</filename> possono essere disponibili in vari "
+"formati di compressione. In modo predefinito i metodi di acquisizione "
+"possono decomprimere e ricomprimere molti formati comuni come <command>xz</"
+"command> e <command>gzip</command>; con questa impostazione si possono "
+"ottenere informazioni sui formati supportati, si può modificarli oltre ad "
+"aggiungere il supporto per altri formati (vedere anche <option>APT::"
+"Compressor</option>). La sintassi è: <placeholder type=\"synopsis\" id=\"0\"/"
+">"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+"Inoltre si può usare il sottogruppo <literal>Order</literal> per definire in "
+"quale ordine il sistema di acquisizione cerca di scaricare i file compressi. "
+"Il sistema tenta con il primo tipo di compressione e in caso di errore passa "
+"al successivo nell'elenco perciò, per preferire un tipo rispetto ad un "
+"altro, basta mettere il tipo preferito per primo; i tipi che non sono già "
+"presenti vengono aggiunti in modo implicito alla fine dell'elenco, perciò si "
+"può usare, ad esempio, <placeholder type=\"synopsis\" id=\"0\"/> per "
+"preferire i file compressi con <command>gzip</command> a tutti gli altri "
+"formati di compressione. Se si volesse preferire <command>xz</command> "
+"rispetto a <command>gzip</command> e <command>bzip2</command>, "
+"l'impostazione di configurazione sarebbe: <placeholder type=\"synopsis\" id="
+"\"1\"/> Non è necessario aggiungere esplicitamente <literal>bz2</literal> "
+"all'elenco, dato che verrà aggiunto automaticamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+"Notare che <literal>Dir::Bin::<replaceable>NomeMetodo</replaceable></"
+"literal> viene controllata al momento dell'esecuzione. Se questa opzione è "
+"stata impostata e il supporto per il formato non è incluso direttamente in "
+"apt, il metodo verrà usato solo se questo file è esistente; ad esempio, per "
+"il metodo <literal>bzip2</literal> l'impostazione (interna) è: <placeholder "
+"type=\"literallayout\" id=\"0\"/> Notare anche che le voci nell'elenco "
+"specificate nella riga di comando vengono aggiunte alla fine dell'elenco "
+"specificato nei file di configurazione, ma prima delle voci predefinite. In "
+"questo caso, per preferire un tipo rispetto a quelli specificati nei file di "
+"configurazione si può impostare l'opzione direttamente, non nello stile per "
+"elenco. Ciò non sovrascrive l'elenco definito; aggiunge solamente il tipo "
+"indicato all'inizio dell'elenco."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+"Il tipo speciale <literal>uncompressed</literal> può essere usato per dare "
+"la precedenza ai file non compressi, ma è bene notare che la maggior parte "
+"degli archivi non fornisce file non compressi, perciò questo è utilizzabile "
+"soprattutto per i mirror locali."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+"Quando si scaricano indici compressi con <literal>gzip</literal> (Packages, "
+"Sources o Translations), li mantiene localmente compressi con gzip invece di "
+"spacchettarli. Questo fa risparmiare parecchio spazio su disco a spese di un "
+"maggiore uso della CPU quando si creano le cache locali dei pacchetti. In "
+"modo predefinito è disabilitato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+"La sottosezione Languages controlla quali file <filename>Translation</"
+"filename> sono scaricati e in quale ordine APT cerca di visualizzare le "
+"traduzioni delle descrizioni. APT cerca di visualizzare la prima descrizione "
+"disponibile nella lingua elencata per prima. Le lingue possono essere "
+"definite con i loro codici brevi o lunghi. Notare che non tutti gli archivi "
+"forniscono i file <filename>Translation</filename> per tutte le lingue; i "
+"codici di lingua lunghi sono particolarmente rari."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr "Acquire::Languages { \"environment\"; \"it\"; \"en\"; \"none\"; \"fr\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"L'elenco predefinito include «environment» ed «en». «<literal>environment</"
+"literal>» ha un significato speciale in questo contesto: viene sostituito al "
+"momento dell'esecuzione dai codici di lingua estratti dalla variabile "
+"d'ambiente <literal>LC_MESSAGES</literal>. Assicura anche che questi codici "
+"non vengano inclusi due volte nell'elenco. Se <literal>LC_MESSAGES</literal> "
+"è impostata a «C», viene usato solamente il file <filename>Translation-en</"
+"filename> (se disponibile). Per forzare APT a non usare alcun file "
+"Translation, usare l'impostazione <literal>Acquire::Languages=none</"
+"literal>. \"<literal>none</literal>\" è un altro codice con significato "
+"speciale che interrompe la ricerca di un file <filename>Translation</"
+"filename> adatto. Questo dice ad APT di scaricare anche queste traduzioni, "
+"senza usarle realmente a meno che l'ambiente non specifichi le lingue. "
+"Perciò il seguente esempio di configurazione avrà come risultato l'ordine "
+"«en, it» in una localizzazione inglese o «it, en» in una italiana. Notare "
+"che «fr» viene scaricato, ma non usato, a meno che APT non venga usato in "
+"una localizzazione francese (dove l'ordine sarebbe «fr, it, en»). "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+"Notare che per prevenire problemi risultanti dall'uso di APT in ambienti "
+"differenti (ad esempio da parte di utenti o programmi diversi), tutti i file "
+"Translation che si trovano in <filename>/var/lib/apt/lists/</filename> "
+"vengono aggiunti alla fine dell'elenco (dopo un \"<literal>none</literal>\" "
+"implicito)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr "Durante gli scaricamenti, forza l'uso del solo protocollo IPv4."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr "Durante gli scaricamenti, forza l'uso del solo protocollo IPv6."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+"La dimensione massima per i file Release/Release.gpg/InRelease. Il valore "
+"predefinito è 10 MB."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+"Questa opzione controlla se apt usa il record del server DNS SRV come "
+"specificato nella RFC 2782 per selezionare un server alternativo a cui "
+"connettersi. In modo predefinito è impostata a vero («true»)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+"Permette alle operazioni di aggiornamento di caricare file dei dati da "
+"repository senza sufficienti informazioni di sicurezza. Il valore "
+"predefinito è «<literal>false</literal>». Il concetto, le implicazioni e le "
+"alternative sono spiegati in dettaglio in &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Permette alle operazioni di aggiornamento di caricare file dei dati da "
+"repository che forniscono informazioni di sicurezza che sono però "
+"considerate non abbastanza robuste dal punto di vista crittografico. Il "
+"valore predefinito è «<literal>false</literal>». Il concetto, le "
+"implicazioni e le alternative sono spiegati in dettaglio in &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Permette che un repository che era in precedenza firmato con gpg diventi non "
+"firmato durante un'operazione di aggiornamento. Quando non c'è una firma "
+"valida per un repository precedentemente fidato, apt rifiuta "
+"l'aggiornamento. Questa opzione può essere usata per scavalcare questa "
+"protezione. Non dovrebbe mai venire abilitata. Il valore predefinito è "
+"«<literal>false</literal>. Il concetto, le implicazioni e le alternative "
+"sono spiegati in dettaglio in &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr "ambito"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+"L'acquisizione di changelog è possibile solamente se è noto un URI da cui "
+"ottenerli. Il file Release indica questa informazione preferibilmente in un "
+"campo «Changelogs». Se questo non è disponibile, viene usato il campo Label/"
+"Origin del file Release per controllare se esiste un'opzione "
+"<literal>Acquire::Changelogs::URI::Label::<replaceable>ETICHETTA</"
+"replaceable></literal> o <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGINE</replaceable></literal> e, se è così, viene preso "
+"questo valore. Il valore nel file Release può essere scavalcato con "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>ETICHETTA</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGINE</replaceable></literal>. Il valore deve essere "
+"un URI normale verso un file di testo, tranne per il fatto che dati "
+"specifici di pacchetto sono sostituito con il segnaposto "
+"<literal>@CHANGEPATH@</literal>. Il valore per esso è: 1. se il pacchetto è "
+"da una componente (es. <literal>main</literal>) è la prima parte, altrimenti "
+"viene omesso; 2. la prima lettera del nome del pacchetto sorgente, tranne "
+"per i pacchetti sorgente con nome che inizia con «<literal>lib</literal>», "
+"nel qual caso saranno le prime quattro lettere; 3. il nome completo del "
+"pacchetto sorgente; 4. il nome completo di nuovo e 5. la versione sorgente. "
+"La prima (se presente), la seconda, la terza e la quarta parte sono separate "
+"da una sbarra («<literal>/</literal>») e tra la quarta e la quinta parte c'è "
+"un trattino basso («<literal>_</literal>»). Per questa opzione è disponibile "
+"il valore speciale «<literal>no</literal>» che indica che questa fonte non "
+"può essere usata per acquisire file changelog. In questo caso viene provata "
+"un'altra fonte, se disponibile."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr "Configurazione specifica per binari"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+"Specialmente con l'introduzione del binario <command>apt</command> può "
+"essere utile impostare determinate opzioni solamente per uno specifico "
+"binario, dato che anche opzioni che sembrerebbero avere effetto solo su un "
+"determinato binario come <option>APT::Get::Show-Versions</option>, hanno "
+"effetto su <command>apt-get</command> così come su <command>apt</command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+"L'impostazione di un'opzione per un solo binario specifico può essere "
+"ottenuta solamente impostando l'opzione all'interno di un ambito "
+"<option>Binary::<replaceable>binario-specifico</replaceable></option>. Ad "
+"esempio impostare l'opzione <option>APT::Get::Show-Versions</option> "
+"solamente per <command>apt</command> può essere fatto impostando invece "
+"<option>Binary::apt::APT::Get::Show-Versions</option>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+"Notare che, come visto nella sezione DESCRIZIONE più in alto, non si possono "
+"impostare opzioni specifiche per un binario dalla riga di comando né nei "
+"file di configurazione caricati tramite la riga di comando"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr "Directory"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+"La sezione <literal>Dir::State</literal> contiene directory che sono "
+"relative a informazioni di stato locali. <literal>lists</literal> è la "
+"directory in cui mettere gli elenchi scaricati dei pacchetti e "
+"<literal>status</literal> è il nome del file di stato di &dpkg;. "
+"<literal>preferences</literal> è il nome del file <filename>preferences</"
+"filename> di APT. <literal>Dir::State</literal> contiene la directory "
+"predefinita da anteporre a tutte le sottovoci che non iniziano con "
+"<filename>/</filename> o <filename>./</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+"<literal>Dir::Cache</literal> contiene le posizioni relative alle "
+"informazioni della cache locale, come le due cache dei pacchetti "
+"<literal>srcpkgcache</literal> e <literal>pkgcache</literal>, così come la "
+"posizione in cui mettere gli archivi scaricati: <literal>Dir::Cache::"
+"archives</literal>. La generazione delle cache può essere disattivata "
+"impostando <literal>pkgcache</literal> o <literal>srcpkgcache</literal> a "
+"<literal>\"\"</literal>. Questo rallenta l'avvio ma fa risparmiare spazio su "
+"disco. È probabilmente preferibile disattivare pkgcache piuttosto che "
+"srcpkgcache. Come per <literal>Dir::State</literal>, la directory "
+"predefinita è contenuta in <literal>Dir::Cache</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+"<literal>Dir::Etc</literal> contiene la posizione dei file di "
+"configurazione; <literal>sourcelist</literal> fornisce la posizione di "
+"sourcelist e <literal>main</literal> è il file di configurazione predefinito "
+"(l'impostazione non ha effetto, a meno che non venga fatta dal file di "
+"configurazione specificato da <envar>APT_CONFIG</envar>)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+"L'impostazione <literal>Dir::Parts</literal> legge dalla directory "
+"specificata tutti i frammenti di configurazione in ordine lessicale. Al "
+"termine viene caricato il file di configurazione principale."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+"<literal>Dir::Bin</literal> punta ai programmi binari; <literal>Dir::Bin::"
+"Methods</literal> specifica la posizione dei gestori dei metodi e "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> e <literal>apt-cache</literal> "
+"specificano la posizione dei rispettivi programmi."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+"La voce di configurazione <literal>RootDir</literal> ha un significato "
+"speciale. Se impostata, tutti i percorsi saranno relativi a "
+"<literal>RootDir</literal>, <emphasis>anche i percorsi che sono specificati "
+"in modo assoluto</emphasis>. Perciò, ad esempio, se <literal>RootDir</"
+"literal> è impostata a <filename>/tmp/staging</filename> e <literal>Dir::"
+"State::status</literal> è impostata a <filename>/var/lib/dpkg/status</"
+"filename>, allora il file di stato verrà cercato in <filename>/tmp/staging/"
+"var/lib/dpkg/status</filename>. Se si desidera un prefisso solo per i "
+"percorsi relativi, impostare invece <literal>Dir</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+"La lista <literal>Ignore-Files-Silently</literal> può essere usata per "
+"specificare quali file debbano essere ignorati in modo silenzioso da APT "
+"mentre analizza i file nelle directory con i frammenti. In modo predefinito "
+"un file il cui nome termina con <literal>.disabled</literal>, <literal>~</"
+"literal>, <literal>.bak</literal> o <literal>.dpkg-[a-z]+</literal> viene "
+"ignorato in modo silenzioso. Come si vede nell'ultimo valore predefinito "
+"questi modelli possono usare una sintassi con espressioni regolari."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr "APT in DSelect"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+"Quando APT viene usato come metodo per &dselect; svariate direttive di "
+"configurazione controllano il comportamento predefinito; queste sono nella "
+"sezione <literal>DSelect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+"Modalità di pulizia della cache; i valori permessi sono <literal>always</"
+"literal>, <literal>prompt</literal>, <literal>auto</literal>, <literal>pre-"
+"auto</literal> e <literal>never</literal>. <literal>always</literal> e "
+"<literal>prompt</literal> rimuovono tutti i pacchetti dalla cache dopo ogni "
+"aggiornamento; <literal>prompt</literal> (il valore predefinito) lo fa in "
+"modo condizionato. <literal>auto</literal> rimuove solo quei pacchetti che "
+"non sono più scaricabili (ad esempio perché sostituiti da una nuova "
+"versione). <literal>pre-auto</literal> effettua questa azione prima di "
+"scaricare i nuovi pacchetti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+"Il contenuto di questa variabile è passato come opzioni per la riga di "
+"comando ad &apt-get;, quando questo viene eseguito per la fase di "
+"installazione."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+"Il contenuto di questa variabile è passato come opzioni per la riga di "
+"comando ad &apt-get;, quando questo viene eseguito per la fase di "
+"aggiornamento."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+"Se impostato a vero l'operazione [A]ggiorna di &dselect; chiederà sempre "
+"conferma prima di continuare. Il comportamento predefinito è di chiedere "
+"solo in caso di errore."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr "Come APT invoca &dpkg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+"Diverse direttive di configurazione controllano il modo in cui APT invoca "
+"&dpkg;; sono nella sezione <literal>DPkg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+"Questa è una lista di opzioni da passare a &dpkg;. Le opzioni devono essere "
+"specificate usando la notazione per le liste e ogni voce nella lista viene "
+"passata a &dpkg; come un singolo argomento."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+"Questa è una lista di comandi di shell da eseguire prima/dopo l'invocazione "
+"di &dpkg;. Come <literal>options</literal> deve essere specificata con la "
+"notazione per le liste. I comandi sono invocati in ordine usando <filename>/"
+"bin/sh</filename>; se qualcuno dei comandi fallisce APT terminerà annullando."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+"Questa è una lista di comandi di shell da eseguire prima di invocare &dpkg;. "
+"Come <literal>options</literal> deve essere specificata con la notazione per "
+"le liste. I comandi sono invocati in ordine usando <filename>/bin/sh</"
+"filename>; se qualcuno dei comandi fallisce APT terminerà annullando. APT "
+"passa i nomi di file di tutti i file .deb che sta per installare ai comandi, "
+"uno per riga sul descrittore di file richiesto, usando in modo predefinito "
+"lo standard input."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+"La versione 2 di questo protocollo invia più informazioni attraverso il "
+"descrittore di file richiesto: una riga con il testo <literal>VERSION 2</"
+"literal>, lo spazio di configurazione di APT e un elenco di azioni di "
+"pacchetto con nome file e informazioni sulle versioni."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+"Ogni riga con una direttiva di configurazione ha la forma "
+"<literal>chiave=valore</literal>. I caratteri speciali (segno di uguale, a "
+"capo, caratteri non stampabili, virgolette e segno di percentuale in "
+"<literal>chiave</literal> e a capo, caratteri non stampabili e segno di "
+"percentuale in <literal>valore</literal>) sono codificati con %-valore. Le "
+"liste sono rappresentate da più righe <literal>chiave::=valore</literal> con "
+"la stessa chiave. La sezione di configurazione termina con una riga vuota."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+"Le righe delle azioni di pacchetto sono costituite nella Versione 2 da "
+"cinque campi: nome di pacchetto (senza qualifica dell'architettura anche se "
+"foreign), vecchia versione, direzione del cambiamento di versione (&lt; per "
+"gli aggiornamenti, &gt; per le retrocessioni a versioni precedenti, = per "
+"nessun cambiamento), nuova versione, azione. I campi di versione sono «-» "
+"per nessuna versione (per esempio quando si installa un pacchetto per la "
+"prima volta; la mancanza di versione viene trattata come precedente a "
+"qualsiasi versione, perciò è un aggiornamento indicato come <literal>- &lt; "
+"1.23.4</literal>). Il campo dell'azione è «**CONFIGURE**» se il pacchetto "
+"viene configurato, «**REMOVE**» se viene rimosso o il nome di un file .deb "
+"se viene spacchettato."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+"Nella Versione 3 ogni campo di versione viene seguito dall'architettura di "
+"questa versione, che è «-» se non c'è versione, e da un campo che mostra il "
+"tipo MultiArch «same», «foreign», «allowed» o «none». Notare che «none» è un "
+"nome di tipo non corretto che viene mantenuto per questioni di compatibilità "
+"e dovrebbe essere letto come «no» e gli utenti sono incoraggiati a "
+"supportarli entrambi."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+"La versione del protocollo da usare per il comando "
+"<literal><replaceable>cmd</replaceable></literal> può essere scelta "
+"impostando in modo appropriato <literal>DPkg::Tools::options::"
+"<replaceable>cmd</replaceable>::Version</literal>, il cui valore predefinito "
+"è la versione 1. Se APT non supporta la versione richiesta invierà invece "
+"l'informazione nella versione più alta per cui ha il supporto."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+"Il descrittore di file da usare per inviare le informazioni può essere "
+"richiesto con <literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::"
+"InfoFD</literal> che è in modo predefinito <literal>0</literal> per lo "
+"standard input ed è disponibile a partire dalla versione 0.9.11. Il supporto "
+"per l'opzione può essere controllato guardando la variabile d'ambiente "
+"<envar>APT_HOOK_INFO_FD</envar> che contiene il numero del descrittore di "
+"file usato per conferma."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+"APT cambia la directory attuale in questa prima di invocare &dpkg;; il "
+"valore predefinito è <filename>/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+"Queste opzioni sono passate a &dpkg-buildpackage; quando vengono compilati i "
+"pacchetti; il valore predefinito disabilita la firma e produce tutti i "
+"binari."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+"Se questa opzione è impostata, APT invoca <command>dpkg --configure --"
+"pending</command> per lasciare che &dpkg; gestisca tutte le configurazioni e "
+"i trigger necessari. Questa opzione è attivata in modo predefinito, ma "
+"potrebbe essere utile disattivarla se si desidera eseguire APT più volte di "
+"seguito, ad esempio in un installatore. In uno scenario simile si può "
+"disattivare questa opzione in tutte le esecuzioni tranne l'ultima."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr "Opzioni Periodic e Archives"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+"I gruppi di opzioni <literal>APT::Periodic</literal> e <literal>APT::"
+"Archives</literal> configurano il comportamento degli aggiornamenti "
+"periodici di apt, ciò viene fatto attraverso lo script <literal>/etc/cron."
+"daily/apt</literal>. Per una breve documentazione di queste opzioni, vedere "
+"all'inizio dello script."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr "Opzioni di debug"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+"Se si abilitano le opzioni nella sezione <literal>Debug::</literal> verranno "
+"inviate delle informazioni di debug nel flusso dello standard error del "
+"programma usando le librerie <literal>apt</literal>, o verranno abilitate "
+"speciali modalità del programma che sono principalmente utili per far il "
+"debug del comportamento di <literal>apt</literal>. La maggior parte di "
+"queste opzioni non è interessante per l'utente normale, ma alcune potrebbero "
+"esserlo:"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+"<literal>Debug::pkgProblemResolver</literal> abilita l'output relativo alle "
+"decisioni prese da <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+"<literal>Debug::NoLocking</literal> disabilita tutti i lock sui file. Può "
+"essere usato per eseguire alcune operazioni (ad esempio <literal>apt-get -s "
+"install</literal>) come utente non root."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+"<literal>Debug::pkgDPkgPM</literal> stampa l'effettiva riga di comando ogni "
+"volta che <literal>apt</literal> invoca &dpkg;."
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> disabilita l'inclusione di dati statfs "
+"negli ID dei CD-ROM."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr "Segue un elenco completo delle opzioni di debug per apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+"Stampa informazioni relative all'accesso a fonti <literal>cdrom://</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+"Stampa informazioni relative allo scaricamento dei pacchetti usando FTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+"Stampa informazioni relative allo scaricamento dei pacchetti usando HTTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+"Stampa informazioni relative allo scaricamento dei pacchetti usando HTTPS."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+"Stampa informazioni relative alla verifica delle firme di cifratura fatta "
+"usando <literal>gpg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+"Produce in output informazioni sul processo di accesso a raccolte di "
+"pacchetti memorizzati su CD-ROM."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+"Descrive il processo di risoluzione delle dipendenze di compilazione in &apt-"
+"get;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+"Produce in output ogni hash crittografico che viene generato dalle librerie "
+"<literal>apt</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+"Quando viene generato l'ID per un CD-ROM, non include informazioni da "
+"<literal>statfs</literal>, cioè il numero di blocchi usati e liberi sul file "
+"system del CD-ROM."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+"Disabilita tutti i lock sui file. Per esempio permette di eseguire due "
+"istanze di <quote><literal>apt-get update</literal></quote> "
+"contemporaneamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+"Registra nel log quando vengono aggiunte o rimosse voci dalla coda globale "
+"degli scaricamenti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+"Produce in output messaggi di stato ed errori relativi alla verifica dei "
+"codici di controllo e delle firme di cifratura dei file scaricati."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+"Produce in output informazioni sullo scaricamento e l'applicazione dei diff "
+"per gli elenchi degli indici dei pacchetti, e gli errori relativi a tali "
+"diff."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+"Produce in output informazioni relative all'applicazione di patch agli "
+"elenchi dei pacchetti di apt quando vengono scaricati i diff per gli indici "
+"invece degli indici completi."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+"Registra nel log tutte le interazioni con i sottoprocessi che effettuano "
+"realmente gli scaricamenti."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+"Registra nel log gli eventi relativi allo stato di automaticamente "
+"installato dei pacchetti e alla rimozione dei pacchetti non utilizzati."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+"Genera messaggi di debug che descrivono quali pacchetti vengono "
+"automaticamente installati per risolvere delle dipendenze. Corrisponde al "
+"passo iniziale di installazione automatica effettuato, ad esempio, in "
+"<literal>apt-get install</literal> e non all'intero risolutore di dipendenze "
+"di <literal>apt</literal>; per quello vedere <literal>Debug::"
+"pkgProblemResolver</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+"Genera messaggi di debug che descrivono quali pacchetto vengono "
+"contrassegnati per essere mantenuti/installati/rimossi mentre il "
+"ProblemResolver fa il suo lavoro. Ogni aggiunta o rimozione può causare "
+"azioni aggiuntive che vengono mostrate con un rientro di due spazi in più "
+"sotto alla voce originale. Il formato per ogni riga è <literal>MarkKeep</"
+"literal>, <literal>MarkDelete</literal> o <literal>MarkInstall</literal> "
+"seguito da <literal>nome-pacchetto &lt;a.b.c -&gt; d.e.f | x.y.z&gt; "
+"(sezione)</literal> dove <literal>a.b.c</literal> è l'attuale versione del "
+"pacchetto, <literal>d.e.f</literal> è la versione presa in considerazione "
+"per l'installazione e <literal>x.y.z</literal> è una versione più recente, "
+"ma non considerata per l'installazione (a causa di un punteggio di pin più "
+"basso). Gli ultimi due possono essere omessi se non esistono o se sono "
+"uguali alla versione installata. <literal>sezione</literal> è il nome della "
+"sezione in cui compare il pacchetto."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+"Quando invoca &dpkg;, produce in output l'esatta riga di comando usata, con "
+"gli argomenti separati da un singolo carattere di spazio."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+"Produce in output tutti i dati ricevuti da &dpkg; sul descrittore del file "
+"di stato ed ogni errore incontrato durante la sua analisi."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+"Genera un trace dell'algoritmo che decide l'ordine in cui <literal>apt</"
+"literal> deve passare i pacchetti a &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+"Produce in output messaggi di stato che indicano i passi effettuati "
+"nell'invocazione di &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr "Produce in output la priorità di ogni elenco di pacchetti all'avvio."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+"Traccia l'esecuzione del risolutore di dipendenze (questo ha effetto solo "
+"per ciò che accade quando viene incontrato un problema complesso di "
+"dipendenze)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+"Visualizza un elenco di tutti i pacchetti installati con il loro punteggio "
+"calcolato che è usato dal pkgProblemResolver. La descrizione dei pacchetti è "
+"la stessa descritta in <literal>Debug::pkgDepCache::Marker</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+"Stampa informazioni sui fornitori lette da <filename>/etc/apt/vendors.list</"
+"filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+"Visualizza i comandi esterni che sono richiamati dagli hook di apt. Ciò "
+"include ad esempio le opzioni di configurazione <literal>DPkg::{Pre,Post}-"
+"Invoke</literal> o <literal>APT::Update::{Pre,Post}-Invoke</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Esempi"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+"&configureindex; è un file di configurazione che mostra valori d'esempio per "
+"tutte le opzioni possibili."
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "file di controllo delle preferenze per APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"Il file delle preferenze di APT, <filename>/etc/apt/preferences</filename> e "
+"i file frammento nella directory <filename>/etc/apt/preferences.d/</"
+"filename> possono essere usati per controllare quale versione verrà "
+"selezionata per l'installazione."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Quando il file &sources-list; contiene riferimenti a più di una "
+"distribuzione, potrebbero essere disponibili per l'installazione diverse "
+"versioni di un pacchetto (ad esempio <literal>stable</literal> e "
+"<literal>testing</literal>). APT assegna una priorità a ciascuna versione "
+"che è disponibile. Tenendo in considerazione i limiti imposti dalle "
+"dipendenze, <command>apt-get</command> seleziona per l'installazione la "
+"versione con la più alta priorità. Le preferenze di APT scavalcano le "
+"priorità che APT assegna in modo predefinito alle versioni dei pacchetti, "
+"dando perciò all'utente il controllo su quale venga selezionata per "
+"l'installazione."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Quando il file &sources-list; contiene riferimenti a più di una fonte, "
+"potrebbero essere disponibili più istanze della stessa versione di un "
+"pacchetto. In questo caso <command>apt-get</command> scarica l'istanza "
+"elencata per prima nel file &sources-list;. Le preferenze di APT non hanno "
+"effetto sulla scelta dell'istanza, ma solo sulla scelta della versione."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"Le preferenze sono uno strumento potente nelle mani di un amministratore di "
+"sistema, ma possono anche diventare il suo incubo peggiore se usate con poca "
+"cautela! APT non mette in dubbio le preferenze scelte, perciò impostazioni "
+"sbagliate possono avere come risultato pacchetti non installabili o "
+"decisioni sbagliate durante l'aggiornamento dei pacchetti. Se vengono "
+"mescolati più rilasci di distribuzione può sorgere un numero ancora più "
+"grande di problemi, se non si sono capiti bene i concetti spiegati nei "
+"prossimi paragrafi. I pacchetti inclusi in uno specifico rilascio non sono "
+"testati (e perciò non sempre funzionano come atteso) in rilasci più vecchi o "
+"più nuovi, o insieme ad altri pacchetti da altri rilasci. Ci si consideri "
+"avvertiti."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"Notare che i file nella directory <filename>/etc/apt/preferences.d</"
+"filename> vengono analizzati in ordine alfanumerico crescente e i loro nomi "
+"devono conformarsi alle seguenti convenzioni: non devono avere estensione o "
+"avere estensione \"<literal>pref</literal>\", e possono contenere solo "
+"caratteri alfanumerici, trattini (-), trattini bassi (_) e punti (.). In "
+"caso contrario APT stampa un messaggio che informa che un file è stato "
+"ignorato, a meno che tale file non corrisponda ad un modello nell'elenco di "
+"configurazione <literal>Dir::Ignore-Files-Silently</literal>, nel qual caso "
+"viene ignorato in modo silenzioso."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "Assegnazioni della priorità predefinite di APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>un-pacchetto</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"Se non c'è alcun file di preferenze o non c'è nel file una voce applicabile "
+"ad una versione particolare, allora la priorità assegnata a quella versione "
+"è la priorità della distribuzione a cui essa appartiene. È possibile "
+"distinguere una distribuzione, il «rilascio obiettivo», che riceve in modo "
+"predefinito una priorità maggiore delle altre distribuzioni. Il rilascio "
+"obiettivo può essere impostato nella riga di comando di <command>apt-get</"
+"command> o nel file di configurazione di APT, <filename>/etc/apt/apt.conf</"
+"filename>. Notare che questa impostazione ha precedenza rispetto a qualsiasi "
+"priorità generale sia stata impostata nel file <filename>/etc/apt/"
+"preferences</filename> descritto in seguito, ma non rispetto a pacchetti per "
+"cui è specificatamente indicato un pin. Per esempio, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Se il rilascio obiettivo è stato specificato, allora APT usa il seguente "
+"algoritmo per impostare le priorità delle versioni di un pacchetto. Assegna:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "priorità 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"alle versioni che provengono da archivi che, nei loro file "
+"<filename>Release</filename>, sono contrassegnati come «NotAutomatic: yes», "
+"ma non come «ButAutomaticUpgrades: yes», come l'archivio Debian "
+"<literal>experimental</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "priorità 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"alla versione che è già installata (se esiste) e alla versioni che "
+"provengono da archivi che, nei loro file <filename>Release</filename>, sono "
+"contrassegnati come «NotAutomatic: yes» e «ButAutomaticUpgrades: yes», come "
+"l'archivio Debian backports a partire da <literal>squeeze-backports</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "priorità 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that do not belong to the target release."
+msgstr "alle versioni che non appartengono al rilascio obiettivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "priorità 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that belong to the target release."
+msgstr "alle versioni che appartengono al rilascio obiettivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+"Alla versione viene assegnata la più alta di queste priorità la cui "
+"descrizione corrisponde alla versione."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Se il rilascio obiettivo non è stato specificato, allora APT assegna "
+"semplicemente la priorità 100 a tutte le versioni di pacchetto installate e "
+"la priorità 500 a tutte le versioni di pacchetto non installate, tranne le "
+"versioni che provengono da archivi che, nei loro file <filename>Release</"
+"filename>, sono contrassegnati come «NotAutomatic: yes»; queste ultime "
+"versioni hanno priorità 1, oppure priorità 100 se sono in aggiunta "
+"contrassegnate come «ButAutomaticUpgrades: yes»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"Per determinare quale versione di un pacchetto installare APT applica poi le "
+"seguenti regole, elencate in ordine di precedenza."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Non retrocede mai ad una versione più bassa, a meno che la priorità della "
+"versione disponibile non sia maggiore di 1000. («Retrocedere» significa "
+"installare una versione meno recente di un pacchetto al posto di una più "
+"recente. Notare che nessuna delle priorità predefinite di APT è maggiore di "
+"1000; priorità così alte possono solo essere impostate nel file delle "
+"preferenze. Notare inoltre che retrocedere un pacchetto può essere "
+"rischioso.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "Installa la versione con la priorità più alta."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Se due o più versioni hanno la stessa priorità, installa la versione più "
+"recente (cioè quella con il numero di versione più alto)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"Se due o più versioni hanno la stessa priorità e lo stesso numero di "
+"versione, ma hanno una qualche differenza in alcuni dei loro metadati, "
+"oppure viene usata l'opzione <literal>--reinstall</literal>, installa quella "
+"non installata."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"In una situazione tipica, la versione installata di un pacchetto (priorità "
+"100) non è così recente come una delle versioni disponibili dalle fonti "
+"elencate nel file &sources-list; (priorità 500 o 990). Quindi il pacchetto "
+"viene aggiornato quando viene eseguito <command>apt-get install "
+"<replaceable>un-pacchetto</replaceable></command> o <command>apt-get "
+"upgrade</command>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Più raramente, la versione installata di un pacchetto è <emphasis>più</"
+"emphasis> recente di qualsiasi altra versione disponibile. Il pacchetto non "
+"viene retrocesso quando viene eseguito <command>apt-get install "
+"<replaceable>un-pacchetto</replaceable></command> o <command>apt-get "
+"upgrade</command>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"A volte la versione installata di un pacchetto è più recente di quella che "
+"appartiene al rilascio obiettivo, ma non così recente come la versione che "
+"appartiene a qualche altra distribuzione. Un tale pacchetto verrà di fatto "
+"aggiornato quando viene eseguito <command>apt-get install <replaceable>un-"
+"pacchetto</replaceable></command> o <command>apt-get upgrade</command>, "
+"perché almeno <emphasis>una</emphasis> delle versioni disponibili ha una "
+"priorità più alta di quella installata."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "L'effetto delle preferenze di APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"Il file delle preferenze di APT permette all'amministratore di sistema di "
+"controllare l'assegnazione delle priorità. Il file consiste di uno o più "
+"record su più righe, separati da righe vuote. I record possono avere una tra "
+"due forme: una forma specifica e una forma generica."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"La forma specifica assegna una priorità (una «Pin-Priority») ad uno o più "
+"pacchetti specifici con una versione o un intervallo di versioni specifici. "
+"Ad esempio, il record seguente assegna una priorità alta a tutte le versioni "
+"del pacchetto <filename>perl</filename> il cui numero di versione inizia con "
+"«<literal>&good-perl;</literal>». Più pacchetti possono essere separati da "
+"spazi."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"La forma generica assegna una priorità a tutte le versioni di pacchetto in "
+"una data distribuzione (cioè a tutte le versioni dei pacchetti che sono "
+"elencati in un determinato file <filename>Release</filename>) o a tutte le "
+"versioni di pacchetto che provengono da un particolare sito Internet "
+"identificato in base al suo nome di dominio pienamente qualificato."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Queste voci in forma generica nel file di preferenze di APT si applicano "
+"solo ai gruppi di pacchetti. Per esempio, il record seguente assegna una "
+"priorità alta a tutte le versioni di pacchetto disponibili dal sito locale."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"Un avvertimento: la parola chiave usata in questo caso è «<literal>origin</"
+"literal>» e può essere usata per indicare un nome host. Il record seguente "
+"assegna una priorità alta a tutte le versioni disponibili dal server "
+"identificato dal nome host «ftp.de.debian.org»"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"Questo <emphasis>non</emphasis> deve essere confuso con l'Origine di una "
+"distribuzione come indicata in un file <filename>Release</filename>. Ciò che "
+"segue il tag «Origin:» in un file <filename>Release</filename> non è un "
+"indirizzo Internet, ma un nome di autore o produttore, come «Debian» o "
+"«Ximian»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"Il record seguente assegna una priorità bassa a tutte le versioni di "
+"pacchetto che appartengono ad una qualsiasi distribuzione il cui nome di "
+"archivio è «<literal>unstable</literal>»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"Il record seguente assegna una priorità alta a tutte le versioni di "
+"pacchetto che appartengono ad una qualsiasi distribuzione il cui nome in "
+"codice è «<literal>&debian-testing-codename;</literal>»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"Il record seguente assegna una priorità alta a tutte le versioni di "
+"pacchetto che appartengono ad un qualsiasi rilascio il cui nome di archivio "
+"è «<literal>stable</literal>» e il cui numero di versione del rilascio è "
+"«<literal>&debian-stable-version;</literal>»."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+"L'effetto dell'operatore virgola è simile ad un «AND» nella logica: tutte le "
+"condizioni devono essere soddisfatte affinche il pin faccia corrispondenza. "
+"Esiste una sola eccezione: per ciascun tipo di condizione (come due "
+"condizioni «a»), solo l'ultima di queste condizioni viene controllata."
+
+# &glob; è rimpiazzato da "glob(7)"
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "Sintassi per le espressioni regolari e &glob;"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"APT permette anche di impostare priorità di pin usando espressioni &glob; ed "
+"espressioni regolari racchiuse tra sbarre («/»). L'esempio seguente assegna, "
+"ad esempio, la priorità 500 a tutti i pacchetti da experimental il cui nome "
+"inizia con gnome (indicato con un'espressione in stile &glob;) oppure "
+"contiene la parola kde (indicato in forma di espressione regolare estesa "
+"POSIX racchiusa tra sbarre)."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"Di norma queste espressioni possono essere utilizzate ovunque c'è una "
+"stringa. Perciò il pin seguente assegna la priorità 990 a tutti i pacchetti "
+"provenienti da un rilascio il cui nome inizia con &ubuntu-codename;."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"Se un'espressione regolare viene usata in un campo <literal>Package</"
+"literal>, il comportamento è equivalente a quello che si otterrebbe se "
+"l'espressione regolare fosse sostituita da un elenco di tutti i nomi di "
+"pacchetto a cui corrisponde. Non è chiaro se questo comportamento verrà "
+"modificato in futuro; perciò si dovrebbero sempre indicare per primi i pin "
+"con caratteri jolly, in modo che i pin specifici successivi abbiano "
+"precedenza su di essi. Il modello «<literal>*</literal>» in un campo Package "
+"non viene considerato come un'espressione &glob;."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "Come APT interpreta le priorità"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"Le priorità (P) assegnate nel file delle preferenze di APT devono essere "
+"rappresentate da interi positivi o negativi. Vengono interpretate nel modo "
+"seguente (semplificando le cose):"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"causa l'installazione di una versione anche se ciò costituisce una "
+"retrocessione del pacchetto"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"causa l'installazione di una versione anche se non proviene dal rilascio "
+"obiettivo, a meno che la versione installata non sia più recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"causa l'installazione di una versione, a meno che non ci sia una versione "
+"disponibile appartenente al rilascio obiettivo o la versione installata non "
+"sia più recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"causa l'installazione di una versione, a meno che non ci sia una versione "
+"disponibile appartenente ad una qualche altra distribuzione o la versione "
+"installata non sia più recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"causa l'installazione di una versione solo se nessuna versione del pacchetto "
+"è installata"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "impedisce l'installazione della versione"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr "P = 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr "ha un comportamento non definito, non usarlo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"Il primo record in forma specifica, che corrisponde ad una versione di "
+"pacchetto disponibile, determina la priorità della versione del pacchetto. "
+"In caso contrario, la priorità del pacchetto viene definita come il valore "
+"massimo di tutte le priorità definite da record in forma generica che "
+"corrispondono alla versione. I record definiti usando modelli nel campo Pin "
+"diversi da «*» sono trattati come record in forma specifica."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Per esempio, supponendo che il file di preferenze di APT contenga i tre "
+"record descritti in precedenza:"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "Allora:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"Verrà installata la più recente versione disponibile del pacchetto "
+"<literal>perl</literal>, fintanto che il suo numero di versione inizia con "
+"«<literal>&good-perl;</literal>». Se è disponibile <emphasis>una qualsiasi</"
+"emphasis> versione &good-perl;* di <literal>perl</literal> e la versione "
+"installata è &bad-perl;*, allora <literal>perl</literal> verrà retrocesso."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Una versione di un qualsiasi pacchetto diverso da <literal>perl</literal> "
+"che sia disponibile sul sistema locale ha la priorità rispetto ad altre "
+"versioni, incluse quelle che appartengono al rilascio obiettivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"Una versione di un pacchetto la cui origine non sia il sistema locale, ma un "
+"qualche altro sito elencato in &sources-list; e che appartiene ad una "
+"distribuzione <literal>unstable</literal>, viene installata solamente se è "
+"selezionata per l'installazione e nessuna versione del pacchetto è già "
+"installata."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr ""
+"Determinazione delle proprietà di versione del pacchetto e di distribuzione"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"Le posizioni elencate nel file &sources-list; dovrebbero fornire i file "
+"<filename>Packages</filename> e <filename>Release</filename> che descrivono "
+"i pacchetti disponibili in quelle posizioni."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"Il file <filename>Packages</filename> si trova normalmente nella directory "
+"<filename>.../dists/<replaceable>nome-dist</replaceable>/"
+"<replaceable>componente</replaceable>/<replaceable>arch</replaceable></"
+"filename>: per esempio, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. È costituito da una serie di record su più righe, uno "
+"per ogni pacchetto disponibile in tale directory. In ciascun record solo due "
+"righe sono rilevanti per l'impostazione delle priorità di APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "la riga <literal>Package:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "indica il nome del pacchetto"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "la riga <literal>Version:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "indica il numero di versione per il pacchetto indicato"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"Il file <filename>Release</filename> si trova normalmente nella directory "
+"<filename>.../dists/<replaceable>nome-dist</replaceable></filename>: ad "
+"esempio, <filename>.../dists/stable/Release</filename> o <filename>.../dists/"
+"&debian-stable-codename;/Release</filename>. Consiste di un record su più "
+"righe che si applica a <emphasis>tutti</emphasis> i pacchetti nell'albero di "
+"directory sottostante alla directory genitrice. A differenza di ciò che "
+"avviene per il file <filename>Packages</filename>, quasi tutte le righe in "
+"un file <filename>Release</filename> sono importanti per l'impostazione "
+"delle priorità di APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "la riga <literal>Archive:</literal> o <literal>Suite:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"indica l'archivio a cui appartengono tutti i pacchetti nell'albero di "
+"directory. Per esempio, la riga «Archive: stable» o «Suite: stable» "
+"specifica che tutti i pacchetti nell'albero di directory sottostante la "
+"directory che contiene il file <filename>Release</filename> sono "
+"nell'archivio <literal>stable</literal>. Per specificare questo valore nelle "
+"preferenze di APT si deve usare la riga:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "la riga <literal>Codename:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"indica il nome in codice a cui appartengono tutti i pacchetti nell'albero di "
+"directory. Per esempio, la riga «Codename: &debian-testing-codename;» "
+"specifica che tutti i pacchetti nell'albero di directory sottostante la "
+"directory che contiene il file <filename>Release</filename> appartengono ad "
+"una versione chiamata <literal>&debian-testing-codename;</literal>. Per "
+"specificare questo valore nelle preferenze di APT si deve usare la riga:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"indica la versione del rilascio. Per esempio, i pacchetti nell'albero "
+"potrebbero appartenere alla versione &debian-stable-version; del rilascio "
+"Debian. Notare che normalmente non esiste un numero di versione per le "
+"distribuzioni <literal>testing</literal> e <literal>unstable</literal>, "
+"perché non sono ancora state rilasciate. Per specificare questo valore nelle "
+"preferenze di APT si deve usare una delle seguenti righe:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "la riga<literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"indica le componenti con le varie licenze associate ai pacchetti nell'albero "
+"di directory del file <filename>Release</filename>. Per esempio, la riga "
+"«Component: main» specifica che tutti i pacchetti nell'albero di directory "
+"provengono dalla componente <literal>main</literal>, e quindi che sono "
+"rilasciati nei termini elencati nelle Linee guida per il Software Libero di "
+"Debian. Per specificare questa componente nelle preferenze di APT si deve "
+"usare la riga:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "la riga <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"indica l'origine dei pacchetti nell'albero di directory del file "
+"<filename>Release</filename>. Normalmente è <literal>Debian</literal>. Per "
+"specificare questa origine nelle preferenze di APT si deve usare la riga:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "la riga <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"indica l'etichetta dei pacchetti nell'albero di directory del file "
+"<filename>Release</filename>. Normalmente è <literal>Debian</literal>. Per "
+"specificare questa etichetta nelle preferenze di APT si deve usare la riga:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Tutti i file <filename>Packages</filename> e <filename>Release</filename> "
+"recuperati dalle posizioni elencate nel file &sources-list; sono memorizzati "
+"nella directory <filename>/var/lib/apt/lists</filename> o nel file indicato "
+"dalla variabile <literal>Dir::State::Lists</literal> nel file <filename>apt."
+"conf</filename>. Per esempio, il file <filename>debian.lcs.mit."
+"edu_debian_dists_unstable_contrib_binary-i386_Release</filename> contiene il "
+"file <filename>Release</filename> recuperato dal sito <literal>debian.lcs."
+"mit.edu</literal> per i file dell'architettura <literal>binary-i386</"
+"literal> nella componente <literal>contrib</literal> della distribuzione "
+"<literal>unstable</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "Righe opzionali in un record delle preferenze di APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"Ogni record nel file delle preferenze di APT può iniziare opzionalmente con "
+"una o più righe che cominciano con la parola <literal>Explanation:</"
+"literal>. Ciò fornisce un posto dove mettere commenti."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "Seguire Stable in modo continuativo"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Disinstallare o non installare ogni versione di\n"
+"Explanation: pacchetto originata da Debian che non sia nella\n"
+"Explanation: distribuzione stable\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Il seguente file di preferenze di APT fa sì che APT assegni una priorità più "
+"alta di quella predefinita (500) a tutte le versioni di pacchetto che "
+"appartengono alla distribuzione <literal>stable</literal>, e una priorità "
+"eccezionalmente bassa alle versioni di pacchetto che appartengono alle altre "
+"distribuzioni <literal>Debian</literal>. <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>nome-pacchetto</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Con un file &sources-list; adatto e il file di preferenze descritto sopra, "
+"uno qualsiasi dei seguenti comandi farà sì che APT aggiorni il sistema alle "
+"versioni più recenti di <literal>stable</literal>. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>pacchetto</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Il seguente comando farà sì che APT aggiorni il pacchetto specificato alla "
+"versione più recente nella distribuzione <literal>testing</literal>; il "
+"pacchetto non verrà successivamente aggiornato a meno di non usare "
+"nuovamente questo comando. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "Seguire Testing o Unstable in modo continuativo"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Il seguente file di preferenze di APT fa sì che APT assegni una priorità "
+"alta alle versioni di pacchetto nella distribuzione <literal>testing</"
+"literal>, una priorità più bassa alle versioni di pacchetto nella "
+"distribuzione <literal>unstable</literal>, e una priorità eccezionalmente "
+"bassa alle versioni di pacchetto nelle altre distribuzioni <literal>Debian</"
+"literal>. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Con un file &sources-list; adatto e il file di preferenze descritto sopra, "
+"uno qualsiasi dei seguenti comandi farà sì che APT aggiorni il sistema alle "
+"versioni più recenti di <literal>testing</literal>. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>pacchetto</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Il comando seguente farà sì che APT aggiorni il pacchetto specificato alla "
+"più recente versione nella distribuzione <literal>unstable</literal>. "
+"Successivamente, <command>apt-get upgrade</command> aggiornerà il pacchetto "
+"alla versione più recente in <literal>testing</literal>, se è più nuova di "
+"quella installata, altrimenti alla più recente versione in "
+"<literal>unstable</literal> se è più recente di quella installata. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "Seguire l'evoluzione di un rilascio in base al nome in codice"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Disinstallare o non installare qualsiasi versione di pacchetto\n"
+"Explanation: originata da Debian che non sia nella distribuzione con\n"
+"Explanation: nome in codice &debian-testing-codename; o sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable ha sempre il nome in codice side\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Il seguente file delle preferenze di APT farà sì che APT assegni una "
+"priorità più alta di quella predefinita (500) a tutte le versioni di "
+"pacchetto che appartengono alla distribuzione con il nome in codice "
+"specificato, e una priorità eccezionalmente bassa alle versioni di pacchetto "
+"che appartengono ad altre distribuzioni, nomi in codice e archivi "
+"<literal>Debian</literal>. Notare che con questa preferenza, APT segue la "
+"migrazione di un rilascio dall'archivio <literal>testing</literal> a "
+"<literal>stable</literal> e successivamente a <literal>oldstable</literal>. "
+"Se si vuole seguire il progresso, ad esempio, di <literal>testing</literal> "
+"indipendentemente dai cambi di nome in codice si devono usare le "
+"configurazioni negli esempi precedenti. <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Con un file &sources-list; adatto e il file di preferenze descritto sopra, "
+"uno qualsiasi dei seguenti comandi farà sì che APT aggiorni il sistema alle "
+"versioni più recenti nel rilascio con nome in codice <literal>&debian-"
+"testing-codename;</literal>. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>pacchetto</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Il comando seguente farà sì che APT aggiorni il pacchetto specificato alla "
+"più recente versione nella distribuzione <literal>sid</literal>. "
+"Successivamente, <command>apt-get upgrade</command> aggiornerà il pacchetto "
+"alla versione più recente in <literal>&debian-testing-codename;</literal>, "
+"se è più nuova di quella installata, altrimenti alla più recente versione in "
+"<literal>sid</literal> se è più recente di quella installata. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "elenco delle fonti di dati configurate per APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"L'elenco delle fonti <filename>/etc/apt/sources.list</filename> e i file "
+"contenuti in <filename>/etc/apt/sources.list.d/</filename> sono progettati "
+"per supportare qualsiasi numero di fonti attive e svariati supporti. I file "
+"elencano una fonte per riga (stile a una riga) o contengono sezioni "
+"multiriga che definiscono una o più fonti per sezione (stile deb822), con la "
+"fonte preferita elencata per prima (nel caso in cui una singola versione sia "
+"disponibile da più di una fonte). Le informazioni disponibili dalle fonti "
+"configurate sono acquisite con <command>apt-get update</command> (o con un "
+"comando equivalente in un'altra interfaccia per APT)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"La directory <filename>/etc/apt/sources.list.d</filename> permette di "
+"aggiungere voci per sources.list in file separati. Sono permessi due formati "
+"di file differenti, come descritto nelle due sezioni seguenti. I nomi dei "
+"file devono terminare con l'estensione <filename>.list</filename> o "
+"<filename>.sources</filename> a seconda del formato contenuto. I nomi di "
+"file possono contenere solamente lettere (a-z e A-Z), cifre (0-9), trattini "
+"bassi (_), trattini (-) e punti (.). In caso contrario APT stampa un "
+"messaggio che notifica che un file è stato ignorato, a meno che il file non "
+"corrisponda ad un modello nell'elenco di configurazione <literal>Dir::Ignore-"
+"Files-Silently</literal>, nel qual caso viene ignorato in modo silenzioso."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr "Formato con stile a una riga"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+"I file in questo formato hanno l'estensione <filename>.list</filename>. Ogni "
+"riga che specifica una fonte inizia con un tipo (es. <literal>deb-src</"
+"literal> seguito da opzioni e argomenti per questo tipo. Voci singole non "
+"possono proseguire su una riga successiva. Le righe vuote sono ignorate e un "
+"carattere <literal>#</literal> in qualunque punto di una riga contrassegna "
+"il resto di tale riga come commento. Di conseguenza una voce può essere "
+"disabilitata commentando l'intera riga. Se devono essere fornite opzioni, "
+"esse sono separate da spazi e tutte insieme sono racchiuse tra parentesi "
+"quadre (<literal>[]</literal>), incluse nella riga dopo il tipo e separate "
+"da esso con uno spazio. Se un'opzione permette più valori, questi sono "
+"separati con una virgola (<literal>,</literal>). Un nome di opzione è "
+"separato dal suo o dai suoi valori da un segno di uguale (<literal>=</"
+"literal>). Opzioni con più valori usano come separatori anche <literal>-=</"
+"literal> e <literal>+=</literal> che, invece di sostituire i valori "
+"predefiniti con quelli specificati, modificano i valori predefiniti per "
+"rimuovere o includere i valori specificati."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+"Questo è il formato tradizionale ed è supportato da tutte le versioni di "
+"apt. Notare che non tutte le opzioni come descritte in seguito sono "
+"supportate da tutte le versioni di apt. Notare anche che alcune applicazioni "
+"più vecchie che analizzano questo formato da sole possono non aspettarsi di "
+"incontrare opzioni, dato che erano non comuni prima dell'introduzione del "
+"supporto multiarchitettura."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr "Formato in stile deb822"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "Files in this format have the extension <filename>.sources</filename>. "
+#| "The format is similar in syntax to other files used by Debian and its "
+#| "derivatives, such as the metadata files that apt will download from the "
+#| "configured sources or the <filename>debian/control</filename> file in a "
+#| "Debian source package. Individual entries are separated by an empty "
+#| "line; additional empty lines are ignored, and a <literal>#</literal> "
+#| "character at the start of the line marks the entire line as a comment. An "
+#| "entry can hence be disabled by commenting out each line belonging to the "
+#| "stanza, but it is usually easier to add the field \"Enabled: no\" to the "
+#| "stanza to disable the entry. Removing the field or setting it to yes re-"
+#| "enables it. Options have the same syntax as every other field: A "
+#| "fieldname separated by a colon (<literal>:</literal>) and optionally "
+#| "spaces from its value(s). Note especially that multiple values are "
+#| "separated by spaces, not by commas as in the one-line format. Multivalue "
+#| "fields like <literal>Architectures</literal> also have "
+#| "<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+#| "literal> to modify the default value rather than replacing it."
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+"I file in questo formato hanno l'estensione <filename>.sources</filename>. "
+"Il formato è simile nella sintassi ad altri file usati in Debian e nelle sue "
+"derivate, come i file dei metadati che apt scarica dalle fonti configurate o "
+"il file <filename>debian/control</filename> in un pacchetto sorgente Debian. "
+"Le singole voci sono separate da una riga vuota; righe vuote aggiuntive sono "
+"ignorate e un carattere <literal>#</literal> all'inizio della riga "
+"contrassegna l'intera riga come un commento. Una voce può quindi essere "
+"disabilitata commentando ogni riga che appartiene alla sezione ma, per "
+"disabilitare la voce, è solitamente più facile aggiungere il campo «Enabled: "
+"no» alla sezione. Rimuovere il campo, o impostarlo a «yes» la riabilita. Le "
+"opzioni hanno la stessa sintassi di ogni altro campo: un nome di campo "
+"separato dai suoi valori con da due punti (<literal>:</literal>) e spazi "
+"opzionali. Notare in particolar modo che valori multipli sono separati da "
+"spazi, non da virgole come nel formato a singola riga. I campi con più "
+"valori, come <literal>Architectures</literal> hanno anche "
+"<literal>Architectures-Add</literal> e <literal>Architectures-Remove</"
+"literal> per modificare il valore predefinito invece di sostituirlo. "
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+"Questo è un nuovo formato supportato da apt stesso a partire dalla versione "
+"1.1. Le versioni precedenti ignorano questo tipo di file con un messaggio di "
+"notifica come descritto in precedenza. L'intenzione è di rendere in modo "
+"graduale questo formato il formato predefinito, rendendo deprecato il "
+"formato con lo stile a singola riga descritto prima, dato che è più facile "
+"da creare, estendere e modificare sia per le persone sia per le macchine, "
+"specialmente se sono coinvolte molte fonti e opzioni. Gli sviluppatori che "
+"lavorano o analizzano fonti di apt sono caldamente incoraggiati ad "
+"aggiungere il supporto per questo formato e a contattare il team di APT per "
+"coordinare e condividere il lavoro. Gli utenti possono già adottare "
+"liberamente questo formato, ma potrebbero incontrare problemi con il "
+"software che non supporta ancora il formato."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr "I tipi deb e deb-src: formato generico"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"Il tipo <literal>deb</literal> è un riferimento a un tipico archivio Debian "
+"a due livelli, <filename>distribuzione/componente</filename>. "
+"<literal>distribuzione</literal> è tipicamente un nome di suite come "
+"<literal>stable</literal> o <literal>testing</literal>, oppure un nome in "
+"codice come <literal>&debian-stable-codename;</literal> o <literal>&debian-"
+"testing-codename;</literal>; componente è uno tra <literal>main</literal>, "
+"<literal>contrib</literal> o <literal>non-free</literal>. Il tipo "
+"<literal>deb-src</literal> è un riferimento al codice sorgente di una "
+"distribuzione Debian nella stessa forma di quella del tipo <literal>deb</"
+"literal>. Per recuperare gli indici dei pacchetti sorgente è necessaria una "
+"riga <literal>deb-src</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"Il formato per due voci in stile a singola riga che usano il tipo "
+"<literal>deb</literal> e <literal>deb-src</literal> è:"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+"deb [ opzione1=valore1 opzione2=valore2 ] uri suite [componente1] [componente2] [...]\n"
+"deb-src [ opzione1=valore1 opzione2=valore2 ] uri suite [componente1] [componente2] [...]"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [componente1] [componente2] [...]\n"
+" opzione1: valore1\n"
+" opzione2: valore2\n"
+" "
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+"In alternativa la voce equivalente in stile deb822 è simile a questa: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"L'URI per il tipo <literal>deb</literal> deve specificare la base della "
+"distribuzione Debian, dalla quale APT troverà le informazioni di cui ha "
+"bisogno. <literal>suite</literal> può specificare un percorso esatto, nel "
+"qual caso le componenti devono essere omesse e <literal>suite</literal> deve "
+"terminare con una sbarra (<literal>/</literal>). Questo è utile nel caso in "
+"cui si è interessati solo a una particolare sottodirectory dell'archivio "
+"indicato dall'URI. Se <literal>suite</literal> non specifica un percorso "
+"esatto, deve essere presente almeno una <literal>componente</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>suite</literal> può anche contenere una variabile <literal>$(ARCH)</"
+"literal> che viene espansa nell'architettura Debian (come <literal>amd64</"
+"literal> o <literal>armel</literal>) usata nel sistema. Ciò consente di "
+"utilizzare file <filename>sources.list</filename> indipendenti "
+"dall'architettura. In generale questo è interessante solo quando viene "
+"specificato un percorso esatto, altrimenti <literal>APT</literal> genera "
+"automaticamente un URI con l'architettura corrente."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"Specialmente nel formato in stile a singola riga, dato che può essere "
+"specificata solo una distribuzione per riga, può essere necessario avere più "
+"righe per lo stesso URI, se si desidera un sottoinsieme di tutte le "
+"distribuzioni o componenti disponibili in quella posizione. APT ordinerà la "
+"lista degli URI dopo aver generato internamente un insieme completo, e "
+"riunirà i riferimenti multipli, per esempio al medesimo host Internet in una "
+"singola connessione; in questo modo non stabilisce in modo inefficiente una "
+"connessione per poi chiuderla, fare qualcos'altro e quindi ristabilire una "
+"connessione con il medesimo host. APT inoltre parallelizza le connessioni a "
+"host differenti, per gestire in maniera più efficiente i siti con scarsa "
+"larghezza di banda."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"È importante elencare le fonti in ordine di preferenza con la fonte "
+"preferita elencata per prima. Tipicamente ciò viene fatto ordinando per "
+"velocità dalla più veloce alla più lenta (per esempio CD-ROM seguiti da host "
+"in una rete locale, seguiti da host Internet distanti)."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr "&sourceslist-list-format;"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr "&sourceslist-sources-format;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Come esempio, le fonti per la propria distribuzione potrebbero essere simili "
+"a queste in formato in stile a singola riga: <placeholder type="
+"\"literallayout\" id=\"0\"/> o a queste in formato in stile deb822: "
+"<placeholder type=\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr "I tipi deb e deb-src: opzioni"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+"Ogni voce di fonte può avere specificate delle opzioni per modificare a "
+"quale fonte venga fatto l'accesso e come vengano acquisiti i dati da essa. "
+"Il formato, la sintassi e i nomi delle opzioni variano, come descritto, tra "
+"i formati in stile a singola riga e in stile deb822, ma entrambi hanno "
+"disponibili le stesse opzioni. Per semplicità viene elencato il nome del "
+"campo deb822 e viene fornito in nome per la singola riga tra parentesi. "
+"Ricordarsi che oltre a impostare esplicitamente le opzioni multivalore, è "
+"anche possibile modificarle sulla base del loro valore predefinito, ma qui "
+"non vengono esplicitamente elencati questi nomi. Le opzioni non supportate "
+"vengono ignorate silenziosamente da tutte le versioni di APT."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<option>Architectures</option> (<option>arch</option>) è un'opzione "
+"multivalore che definisce le architetture per le quali scaricare le "
+"informazioni. Se questa opzione non è impostata il valore predefinito è "
+"tutte le architetture come definite dall'opzione di configurazione "
+"<option>APT::Architectures</option>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<option>Languages</option> (<option>lang</option>) è un'opzione multivalore "
+"che definisce le lingue per cui scaricare informazioni quali le traduzioni "
+"delle descrizioni dei pacchetti. Se questa opzione non è impostata il valore "
+"predefinito è tutte le lingue come definite dall'opzione di configurazione "
+"<option>Acquire::Languages</option>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+"<option>Targets</option> (<option>target</option>) è un'opzione multivalore "
+"che definisce quali rilasci obiettivo di scaricamento apt cercherà di "
+"acquisire da questa fonte. Se non specificata, l'insieme predefinito è "
+"definito dall'ambito di configurazione <option>Acquire::IndexTargets</"
+"option> (i rilasci obiettivo sono specificati con il loro nome nel campo "
+"<literal>Created-By</literal>). In aggiunta target specifici possono essere "
+"abilitati o disabilitati usando il campo <literal>Identifier</literal> come "
+"opzione con un valore booleano invece di usare questa opzione multivalore."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+"<option>PDiffs</option> (<option>pdiffs</option>) è un valore «yes»/«no» che "
+"controlla se APT deve cercare di usare i PDiff per aggiornare i vecchi "
+"indici invece di scaricare interamente i nuovi indici. Il valore di questa "
+"opzione viene ignorato se il repository non annuncia la disponibilità dei "
+"Pdiff. In modo predefinito assume il valore dell'opzione omonima per uno "
+"specifico file indice definito nell'ambito <option>Acquire::IndexTargets</"
+"option>, che a sua volta assume in modo predefinito il valore dell'opzione "
+"di configurazione <option>Acquire::PDiffs</option> che assume in modo "
+"predefinito il valore <literal>yes</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+"<option>By-Hash</option> (<option>by-hash</option>) può avere il valore "
+"<literal>yes</literal>, <literal>no</literal> o <literal>force</literal> "
+"edetermina se APT debba cercare di acquisire gli indici attraverso un URI "
+"costruito a partire da una somma hash del file atteso, invece di usare il "
+"ben noto nome file stabile dell'indice. Il suo uso può evitare mancate "
+"corrispondenze delle somme hash, ma richiede un mirror che la supporti. Un "
+"valore <literal>yes</literal> o <literal>no</literal> attiva o disattiva "
+"l'uso di questa funzionalità se la fonte indica che la supporta, mentre "
+"<literal>force</literal> abilita la funzionalità indipendentemente da ciò "
+"che viene indicato dalla fonte. Assume in modo predefinito il valore "
+"dell'opzione omonima per uno specifico file indice definito nell'ambito "
+"<option>Acquire::IndexTargets</option>, che a sua volta assume in modo "
+"predefinito il valore dell'opzione di configurazione <option>Acquire::By-"
+"Hash</option> che assume in modo predefinito il valore <literal>yes</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+"Inoltre ci sono opzioni che, se impostate, hanno effetto su <emphasis>tutte</"
+"emphasis> le fonti con gli stessi URI e suite, perciò devono essere "
+"impostate su tutte queste voci e non possono essere cambiate tra le diverse "
+"componenti. APT cerca di rilevare queste anomalie e risolverle."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) e <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) sono valori booleani che hanno tutti il valore predefinito "
+"<literal>no</literal>. Se impostati a <literal>yes</literal> aggirano parti "
+"di &apt-secure; e perciò non devono essere usati con leggerezza!"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+"<option>Trusted</option> (<option>trusted</option>) è un valore con tre "
+"stati che in modo predefinito lascia che sia APT a decidere se una fonte è "
+"considerata fidata o se debbano essere prodotti degli avvertimenti prima, ad "
+"esempio, che vengano installati pacchetti da questa fonte. Questa opzione "
+"può essere usata per scavalcare tale decisione. Il valore <literal>yes</"
+"literal> dice ad APT di considerare sempre questa fonte come fidata, anche "
+"se non supera i controlli di autenticazione. Disabilita parti di &apt-"
+"secure; e dovrebbe perciò essere usata (se proprio si deve) solamente in un "
+"contesto locale e fidato, dato che altrimenti la sicurezza è compromessa. Il "
+"valore <literal>no</literal> fa l'opposto, facendo sì che la fonte venga "
+"gestita come non fidata anche se i controlli di autenticazione sono stati "
+"superati con successo. Il valore predefinito non può essere impostato "
+"esplicitamente."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<option>Signed-By</option> (<option>signed-by</option>) is either an "
+#| "absolute path to a keyring file (has to be accessible and readable for "
+#| "the <literal>_apt</literal> user, so ensure everyone has read-permissions "
+#| "on the file) or one or more fingerprints of keys either in the "
+#| "<filename>trusted.gpg</filename> keyring or in the keyrings in the "
+#| "<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+#| "fingerprint</command>). If the option is set, only the key(s) in this "
+#| "keyring or only the keys with these fingerprints are used for the &apt-"
+#| "secure; verification of this repository. Defaults to the value of the "
+#| "option with the same name if set in the previously acquired "
+#| "<filename>Release</filename> file. Otherwise all keys in the trusted "
+#| "keyrings are considered valid signers for this repository."
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+"<option>Signed-By</option> (<option>signed-by</option>) è un percorso "
+"assoluto ad un file di portachiavi (deve essere accessibile e leggibile "
+"dall'utente <literal>_apt</literal>, perciò assicurarsi che tutti abbiano i "
+"permessi di lettura sul file) oppure una o più fingerprint di chiavi nel "
+"portachiavi <filename>trusted.gpg</filename> o nei portachiavi nella "
+"directory <filename>trusted.gpg.d/</filename> (vedere <command>apt-key "
+"fingerprint</command>). Se l'opzione è impostata, solo le chiavi in questo "
+"portachiavi oppure solamente la chiave con queste fingerprint vengono usate "
+"per la verifica con &apt-secure; di questo repository. Il valore predefinito "
+"è quello dell'opzione omonima se impostata nel file <filename>Release</"
+"filename> precedentemente acquisito. Altrimenti tutte le chiavi nei "
+"portachiavi fidati vengono considerate come firmatari validi per questo "
+"repository."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) è "
+"un valore «yes»/«no» che determina se APT debba cercare di rilevare "
+"attacchi di tipo replay. Un creatore di un repository può dichiarare una "
+"data fino alla quale i dati forniti nel repository devono essere considerati "
+"validi e, se viene raggiunta questa data ma non sono stati forniti nuovi "
+"dati, i dati sono considerati scaduti e viene generato un errore. Oltre ad "
+"aumentare la sicurezza, dato che un autore di attacchi malintenzionato non "
+"può inviare vecchi dati per sempre per evitare che un utente aggiorni ad una "
+"nuova versione, questo aiuta anche gli utenti ad identificare i mirror che "
+"non vengono più aggiornati. Alcuni repository, tuttavia, come gli archivi "
+"storici non vengono più aggiornati appositamente, perciò questo controllo "
+"può essere disabilitato impostando questa opzione a <literal>no</literal>. "
+"Assume in modo predefinito il valore dell'opzione di configurazione "
+"<option>Acquire::Check-Valid-Until</option> che a sua volta ha come valore "
+"predefinito <literal>yes</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) e "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) possono "
+"essere usate per aumentare o diminuire il periodo di tempo in secondi per il "
+"quale sono considerati validi i dati da questo repository. -Max può essere "
+"particolarmente utile per impostare un proprio valore se il repository non "
+"fornisce un campo Valid-Until nel suo file Release, mentre -Min può essere "
+"usato per aumentare il tempo di validità di mirror (locali) aggiornati "
+"raramente di un archivio aggiornato più frequentemente ma meno raggiungibile "
+"(che è anch'esso nel sources.list) invece di disabilitare completamente il "
+"controllo. I valori assunti in modo predefinito sono quelli delle opzioni di "
+"configurazione <option>Acquire::Min-ValidTime</option> e <option>Acquire::"
+"Max-ValidTime</option> che sono entrambe non impostate in modo predefinito."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr "Specificare URI"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "I tipi di URI attualmente riconosciuti sono:"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"Il tipo file permette di considerare come un archivio una directory "
+"arbitraria nel file system. È utile per file system NFS montati e mirror o "
+"archivi locali."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The cdrom scheme allows APT to use a local CD-ROM drive with media "
+#| "swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+#| "source list."
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"Il tipo cdrom permette ad APT di usare un'unità CD-ROM locale cambiando i "
+"supporti. Usare il programma &apt-cdrom; per creare voci cdrom nell'elenco "
+"delle fonti."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The ftp scheme specifies an FTP server for the archive. APT's FTP "
+#| "behavior is highly configurable; for more information see the &apt-conf; "
+#| "manual page. Please note that an FTP proxy can be specified by using the "
+#| "<envar>ftp_proxy</envar> environment variable. It is possible to specify "
+#| "an HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+#| "environment variable and <emphasis>only</emphasis> this environment "
+#| "variable. Proxies using HTTP specified in the configuration file will be "
+#| "ignored."
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"Il tipo ftp specifica un server FTP per l'archivio. Il comportamento FTP di "
+"APT è altamente configurabile; per maggiori informazioni vedere la pagina di "
+"manuale &apt-conf;. Notare che è possibile specificare un proxy FTP usando "
+"la variabile d'ambiente <envar>ftp_proxy</envar>. È possibile specificare un "
+"proxy HTTP (i server proxy HTTP spesso gestiscono gli URL FTP) usando questa "
+"e <emphasis>SOLO</emphasis> questa variabile d'ambiente. I proxy che usano "
+"HTTP specificati nel file di configurazione verranno ignorati."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"Il tipo copy è identico al tipo file tranne per il fatto che i pacchetti "
+"vengono copiati nella directory della cache invece di essere usati "
+"direttamente dalla loro posizione. Ciò è utile per coloro che usano supporti "
+"rimovibili, per copiare i file nelle varie posizioni con APT."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"Il metodo rsh/ssh invoca RSH/SSH per connettersi ad un host remoto e "
+"accedere ai file come un determinato utente. È raccomandato configurare "
+"precedentemente le chiavi RSA o rhosts. Per effettuare i trasferimenti di "
+"file dall'host remoto vengono usati i comandi standard <command>find</"
+"command> e <command>dd</command>."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "aggiungere ulteriori tipi di URI riconoscibili"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "APT can be extended with more methods shipped in other optional packages, "
+#| "which should follow the naming scheme <package>apt-transport-"
+#| "<replaceable>method</replaceable></package>. For instance, the APT team "
+#| "also maintains the package <package>apt-transport-https</package>, which "
+#| "provides access methods for HTTPS URIs with features similar to the http "
+#| "method. Methods for using e.g. debtorrent are also available - see &apt-"
+#| "transport-debtorrent;."
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"APT può essere esteso con ulteriori metodi forniti in altri pacchetti "
+"opzionali, i cui nomi devono seguire lo schema <package>apt-transport-"
+"<replaceable>metodo</replaceable></package>. Per esempio, il team di APT "
+"mantiene anche il pacchetto <package>apt-transport-https</package> che "
+"fornisce i metodi di accesso per URI HTTPS con funzionalità simili a quelle "
+"del metodo http. Sono disponibili anche i metodi per usare, ad esempio, "
+"debtorrrent; vedere &apt-transport-debtorrent;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"Usa l'archivio memorizzato in locale (o montato via NFS) in /home/apt/debian "
+"per stable/main, stable/contrib e stable/non-free."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/apt/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+"Come sopra, tranne per il fatto che usa la distribuzione unstable (di "
+"sviluppo)"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr "Indicazione per i sorgenti corrispondente alla precedente."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"La prima riga ottiene le informazioni sui pacchetti per le architetture in "
+"<literal>APT::Architectures</literal>, mentre la seconda scarica sempre "
+"<literal>amd64</literal> e <literal>armel</literal>."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"Usa HTTP per accedere all'archivio in archive.debian.org e usa solo l'area "
+"hamm/main."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"Usa FTP per accedere all'archivio in ftp.debian.org, nella directory debian "
+"e usa solo l'area &debian-stable-codename;/contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"Usa FTP per accedere all'archivio in ftp.debian.org nella directory debian e "
+"usa solo l'area unstable/contrib. Se in <filename>sources.list</filename> "
+"sono presenti sia questa riga sia quella nell'esempio precedente, verrà "
+"usata una sola sessione FTP per entrambe le righe."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Usa HTTP per accedere all'archivio in ftp.tlh.debian.org nella directory "
+"universe e usa solo i file che si trovano in <filename>unstable/binary-i386</"
+"filename> sulle macchine i386, <filename>unstable/binary-amd64</filename> su "
+"quelle amd64 e così via per le altre architetture supportate. [Notare che "
+"questo esempio illustra solamente come usare la variabile per la "
+"sostituzione; gli archivi Debian ufficiali non sono strutturati in questo "
+"modo.] <placeholder type=\"literallayout\" id=\"0\"/> <placeholder type="
+"\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+"Usa HTTP per ottenere i pacchetti binari, così come quelli sorgenti, dalle "
+"suite stable, testing e unstable e le componenti main e contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"utilità per estrarre configurazioni e modelli <command>debconf</command> dai "
+"pacchetti Debian"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>apt-extracttemplates</command> accetta in input uno o più file di "
+"pacchetti Debian e scrive (in una directory temporanea) tutti gli script di "
+"configurazione e i file template associati. Per ogni pacchetto ricevuto che "
+"contenga script di configurazione e template, verrà generata una riga in "
+"output nel formato:"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "pacchetto versione file-template script-di-configurazione"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"file-template e script-di-configurazione sono scritti nella directory "
+"temporanea specificata da <option>-t</option> o <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>), con i nomi dei file "
+"nella forma <filename>pacchetto.template.XXXXXX</filename> e "
+"<filename>pacchetto.config.XXXXXX</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"Directory temporanea dove scrivere gli script di configurazione e i file "
+"template di <command>debconf</command> estratti. Voce di configurazione: "
+"<literal>APT::ExtractTemplates::TempDir</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command>restituisce zero in caso di "
+"funzionamento normale e il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "utilità per ordinare i file indice dei pacchetti"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>apt-sortpkgs</command> accetta un file indice (indice di sorgenti o "
+"di pacchetti) e ordina i record in base al nome del pacchetto. Ordina anche "
+"i campi interni ad ogni record in base alle regole di ordinamento interne."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"Tutto l'output viene inviato sullo standard output; l'input deve essere un "
+"file leggibile con seek."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"Usa l'ordinamento dei campi dell'indice dei sorgenti. Voce di "
+"configurazione: <literal>APT::SortPkgs::Source</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> restituisce zero in caso di funzionamento "
+"normale e il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "strumento per generare file indice"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> è lo strumento a riga di comando che "
+"genera i file indice usati da APT per accedere a una fonte di distribuzione. "
+"I file indice devono essere generati sul sito origine in base al contenuto "
+"di tale sito."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+"<command>apt-ftparchive</command> è un sovrainsieme del programma &dpkg-"
+"scanpackages; e incorpora tutte le sue funzionalità tramite il comando "
+"<literal>packages</literal>. Inoltre contiene un generatore di file dei "
+"contenuti, <literal>contents</literal>, e un modo elaborato per gestire "
+"tramite script il processo di generazione per un archivio completo."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+"Internamente <command>apt-ftparchive</command> può far uso di database "
+"binari per tenere in cache il contenuto di un file .deb e non si basa su "
+"programmi esterni all'infuori di &gzip;. Quando genera un archivio completo, "
+"esegue automaticamente un controllo sui file modificati e crea i file "
+"compressi desiderati in uscita."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+"Il comando packages genera un file dell'indice di pacchetti da un albero di "
+"directory. Prende la directory data e vi ricerca i file .deb ricorsivamente, "
+"emettendo per ciascuno un record sullo stdout. Questo comando è più o meno "
+"equivalente a &dpkg-scanpackages;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+"L'opzione <option>--db</option> può essere usata per specificare un database "
+"binario da usare come cache."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+"Il comando <literal>sources</literal> genera un file indice dei sorgenti da "
+"un albero di directory. Prende la directory data e vi ricerca i file .dsc "
+"ricorsivamente, emettendo per ciascuno un record sullo stdout. Questo "
+"comando è più o meno equivalente a &dpkg-scansources;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+"Se si specifica un file override, allora verrà cercato un file override "
+"sorgente con estensione .src. L'opzione --source-override può essere usata "
+"per cambiare il file override sorgente da usare."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+"Il comando <literal>contents</literal> genera un file di contenuti da un "
+"albero di directory. Prende la directory data e vi ricerca i file .deb "
+"ricorsivamente, leggendo l'elenco dei file da ciascun file. Quindi ordina e "
+"scrive sullo stdout l'elenco di file con i corrispondenti pacchetti. Le "
+"directory non vengono scritte sull'output. Se più pacchetti contengono lo "
+"stesso file, ciascun pacchetto è separato da una virgola nell'output."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+"Il comando <literal>release</literal> genera un file Release da un albero di "
+"directory. In modo predefinito cerca ricorsivamente nella directory data i "
+"file <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> e "
+"<filename>icons</filename> compressi e non compressi, come anche i file "
+"<filename>Release</filename>, <filename>Index</filename> e <filename>md5sum."
+"txt</filename> (<literal>APT::FTPArchive::Release::Default-Patterns</"
+"literal>). Si possono aggiungere ulteriori modelli per i nomi di file "
+"elencandoli in <literal>APT::FTPArchive::Release::Patterns</literal>. Scrive "
+"poi sullo stdout un file <filename>Release</filename> contenente (in modo "
+"predefinito) per ogni file un digest MD5, SHA1, SHA256 e SHA512."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+"I valori dei campi di metadati aggiuntivi nel file Release sono presi dalle "
+"variabili corrispondenti sotto <literal>APT::FTPArchive::Release</literal>, "
+"ad esempio <literal>APT::FTPArchive::Release::Origin</literal>. I campi "
+"supportati sono: <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal>, "
+"<literal>Description</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+"Il comando <literal>generate</literal> è pensato per essere eseguibile da "
+"uno script di cron e costruisce gli indici in base al file di configurazione "
+"fornito. Il linguaggio di configurazione fornisce un mezzo flessibile per "
+"specificare quali file di indice vengano costruiti a partire da quali "
+"directory, oltre a fornire un mezzo semplice per amministrare le "
+"impostazioni desiderate."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+"Il comando <literal>clean</literal> pulisce i database usati dal file di "
+"configurazione dato, rimuovendo tutti i record non più necessari."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr "La configurazione di generate"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+"Il comando <literal>generate</literal> usa un file di configurazione per "
+"descrivere gli archivi da generare. Segue il tipico formato di "
+"configurazione ISC come usato negli strumenti ISC come bind 8 e dhcpd. &apt-"
+"conf; contiene una descrizione della sintassi. Notare che la configurazione "
+"di generate viene letta per sezioni, ma &apt-conf; viene letto ad albero. "
+"Ciò ha effetto soltanto sulla gestione del tag di ambito."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+"La configurazione di generate ha quattro sezioni separate, ciascuna delle "
+"quali è descritta in seguito."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr "Sezione <literal>Dir</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+"La sezione <literal>Dir</literal> definisce le directory standard necessarie "
+"per localizzare i file richiesti durante il processo di generazione. Queste "
+"directory vengono fatte precedere da alcuni percorsi relativi definiti nelle "
+"sezioni successive, per produrre un percorso assoluto completo."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+"Specifica la radice dell'archivio FTP; in una configurazione Debian standard "
+"questa è la directory che contiene i nodi <filename>ls-LR</filename> e dist."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr "Specifica la posizione dei file override."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr "Specifica la posizione dei file cache."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+"Specifica la posizione dei file con gli elenchi dei file, se viene usata "
+"l'impostazione <literal>FileList</literal> sotto."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr "Sezione <literal>Default</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+"La sezione <literal>Default</literal> specifica i valori predefiniti e le "
+"impostazioni che controllano il funzionamento del generatore. Altre sezioni "
+"possono scavalcare questi valori tramite impostazioni definite per sezione."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+"Imposta gli schemi di compressione predefiniti da usare per i file indice "
+"dei pacchetti. È una stringa che contiene una lista separata da spazi con "
+"almeno uno dei compressori configurati con l'ambito di configurazione "
+"<option>APT::Compressor</option>. Il valore predefinito per tutti gli schemi "
+"di compressione è «. gzip»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+"Imposta la lista predefinita di estensioni di file che contraddistinguono i "
+"file dei pacchetti. Il valore predefinito è «.deb»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+"Simile a <literal>Packages::Compress</literal>, tranne per il fatto che "
+"controlla la compressione dei file Sources."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+"Imposta la lista predefinita di estensioni che contraddistinguono i file dei "
+"sorgenti. Il valore predefinito è «.dsc»."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+"Simile a <literal>Packages::Compress</literal>, tranne per il fatto che "
+"controlla la compressione dei file Contents."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+"Simile a <literal>Packages::Compress</literal>, tranne per il fatto che "
+"controlla la compressione del file principale Translation-en."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+"Specifica il numero dei kilobyte da scollegare (e sostituire con "
+"collegamenti fisici) per esecuzione. Viene usato insieme all'impostazione "
+"per sezione <literal>External-Links</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+"Specifica la modalità di tutti i file indice creati. Il valore predefinito è "
+"0644. Tutti i file di indice sono impostati a questa modalità a prescindere "
+"dall'umask."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+"Specifica se le descrizioni lunghe debbano essere incluse nel file "
+"<filename>Packages</filename> o separate in un file <filename>Translation-"
+"en</filename> principale."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "Sezione <literal>TreeDefault</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+"Imposta valori predefiniti specifici per le sezioni <literal>Tree</literal>. "
+"Tutte queste variabili sono variabili di sostituzione in cui le stringhe "
+"$(DIST), $(SECTION) e $(ARCH) verranno sostituite dai loro rispettivi valori."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+"Imposta il numero di kilobyte di file Contents che vengono generati ogni "
+"giorno. I file Contents sono ruotati a turno in modo da venire rigenerati "
+"tutti nel giro di alcuni giorni."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+"Controlla il numero di giorni durante i quali un file Contents può essere "
+"controllato senza modifiche. Al superamento di questo limite, l'orario mtime "
+"del file Contents viene aggiornato. Questo può succedere se il file Packages "
+"viene modificato in un modo che non ha come risultato un nuovo file Contents "
+"[ad esempio una modifica di override]. È consentito un certo ritardo, nella "
+"speranza che vengano installati nuovi pacchetti .deb, il che richiederebbe "
+"comunque la creazione di un nuovo file. Il valore predefinito è 10, i valori "
+"sono espressi in giorni."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+"Imposta la radice dell'albero della directory dei .deb. Il valore "
+"predefinito è <filename>$(DIST)/$(SECTION)/binary-$(ARCH)/</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+"Imposta la radice dell'albero della directory dei pacchetti sorgente. Il "
+"valore predefinito è <filename>$(DIST)/$(SECTION)/source/</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+"Imposta il file Packages di uscita. Il valore predefinito è <filename>"
+"$(DIST)/$(SECTION)/binary-$(ARCH)/Packages</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+"Imposta il file Sources di uscita. Il valore predefinito è <filename>$(DIST)/"
+"$(SECTION)/source/Sources</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+"Imposta il file Translation-en principale di uscita contenente le "
+"descrizioni lunghe se non devono essere incluse nel file Packages. Il valore "
+"predefinito è <filename>$(DIST)/$(SECTION)/i18n/Translation-en</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+"Imposta il prefisso del percorso che fa sì che un collegamento simbolico sia "
+"considerato un collegamento interno invece che esterno. Il valore "
+"predefinito è <filename>$(DIST)/$(SECTION)/</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+"Imposta il file Contents di uscita. Il valore predefinito è <filename>"
+"$(DIST)/$(SECTION)/Contents-$(ARCH)</filename>. Se questa impostazione fa sì "
+"che più file Packages corrispondano a un solo file Contents (come avviene "
+"con il valore predefinito), allora <command>apt-ftparchive</command> unirà "
+"automaticamente insieme questi file dei pacchetti."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr "Imposta il file di intestazione da anteporre all'output dei contenuti."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+"Imposta il database per la cache binaria da usare per questa sezione. Lo "
+"stesso database può essere condiviso da più sezioni."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+"Specifica che invece di percorrere l'albero delle directory, <command>apt-"
+"ftparchive</command> deve leggere la lista dei file dal file dato. I nomi "
+"relativi dei file vengono fatti precedere dalla directory archivio."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+"Specifica che invece di percorrere l'albero delle directory, <command>apt-"
+"ftparchive</command> deve leggere la lista dei file dal file dato. I nomi di "
+"file relativi vengono fatti precedere dalla directory archivio. Questa "
+"opzione viene usata quando si elaborano gli indici dei sorgenti."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr "Sezione <literal>Tree</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+"La sezione <literal>Tree</literal> definisce un albero di file standard "
+"Debian che consiste in una directory di base, quindi più sezioni in quella "
+"directory di base e infine più architetture in ogni sezione. Gli esatti "
+"percorsi usati sono definiti dalla variabile di sostituzione "
+"<literal>Directory</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+"La sezione <literal>Tree</literal> accetta un tag di ambito che imposta la "
+"variabile <literal>$(DIST)</literal> e definisce la radice dell'albero (il "
+"percorso viene fatto precedere da <literal>ArchiveDir</literal>). Di solito "
+"è un'impostazione simile a <filename>dists/&debian-stable-codename;</"
+"filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+"Tutte le impostazioni definite nella sezione <literal>TreeDefault</literal> "
+"possono essere usate in una sezione <literal>Tree</literal>, oltre a tre "
+"nuove variabili."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Genera per DIST=ambito SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+"Quando elabora una sezione <literal>Tree</literal>, <command>apt-ftparchive</"
+"command> esegue un'operazione simile a: <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+"Questa è una lista di sezioni che appaiono sotto la distribuzione, separate "
+"da spazi; tipicamente è simile a <literal>main contrib non-free</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+"Questa è una lista separata da spazi di tutte le architetture che sono "
+"presenti nella sezione ricerca. L'architettura speciale «source» viene usata "
+"per indicare che questo albero ha un archivio sorgente. L'architettura «all» "
+"indica che i file specifici per un'architettura come <filename>Packages</"
+"filename> non dovrebbero includere informazioni sui pacchetti con "
+"architettura <literal>all</literal> in tutti i file, dato che saranno "
+"disponibili in un file dedicato."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+"Imposta il file override binario. Il file override contiene informazioni "
+"sulla sezione, la priorità e l'indirizzo del manutentore."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+"Imposta il file override sorgente. Il file override contiene informazioni "
+"sulla sezione."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr "Imposta il file override binario extra."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr "Imposta il file override sorgente extra."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "Sezione <literal>BinDirectory</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+"La sezione <literal>bindirectory</literal> definisce un albero di directory "
+"dei binari senza una struttura speciale. Il tag di ambito specifica la "
+"posizione della directory dei binari e le impostazioni sono simili a quelle "
+"della sezione <literal>Tree</literal> senza variabili di sostituzione o "
+"impostazioni <literal>Section</literal><literal>Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr "Imposta l'output del file Packages."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+"Imposta l'output del file Sources. È obbligatorio almeno uno fra "
+"<literal>Packages</literal> e <literal>Sources</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr "Imposta l'output del file Contents (opzionale)."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr "Imposta il file override binario."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr "Imposta il file override sorgente."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr "Imposta il DB della cache."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr "Aggiunge un percorso a tutti i percorsi di uscita."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "Specifica il file con l'elenco dei file."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr "Il file override binario"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+"Il file override binario è completamente compatibile con &dpkg-"
+"scanpackages;. Contiene quattro campi separati da spazi. Il primo campo è il "
+"nome del pacchetto, il secondo è la priorità a cui forzare quel pacchetto, "
+"il terzo è la sezione in cui forzare quel pacchetto e l'ultimo campo è il "
+"campo di permutazione del manutentore."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "vecchio [// vecchio...]* => nuovo"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "nuovo"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+"La forma generale del campo manutentore è: <placeholder type=\"literallayout"
+"\" id=\"0\"/> o semplicemente <placeholder type=\"literallayout\" id=\"1\"/"
+">. La prima forma consente di specificare una lista di vecchi indirizzi di "
+"posta elettronica separati da una doppia sbarra. Se qualcuno di essi viene "
+"trovato, allora il campo manutentore viene sostituito con «nuovo». La "
+"seconda forma sostituisce invariabilmente il campo manutentore."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr "Il file override sorgente"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+"Il file override sorgente è completamente compatibile con &dpkg-"
+"scansources;. Contiene due campi separati da spazi. Il primo campo è il nome "
+"del pacchetto sorgente, il secondo è la sezione a cui assegnarlo."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr "Il file override extra"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+"Il file override extra permette di aggiungere o sostituire nell'output un "
+"tag arbitrario. Ha tre colonne: la prima per il pacchetto, la seconda per il "
+"tag e il resto della riga è il nuovo valore."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+"Genera i codici di controllo specificati. Queste opzioni sono abilitate in "
+"modo predefinito; quando vengono disabilitate i file indice non hanno, "
+"quando ciò è possibile, i campi dei codici di controllo. Voci di "
+"configurazione: <literal>APT::FTPArchive::<replaceable>Codice-di-controllo</"
+"replaceable></literal> e <literal>APT::FTPArchive::<replaceable>Indice</"
+"replaceable>::<replaceable>Codice-di-controllo</replaceable></literal> dove "
+"<literal><replaceable>Indice</replaceable></literal> può essere "
+"<literal>Packages</literal>, <literal>Sources</literal> o <literal>Release</"
+"literal> e <literal><replaceable>Codice-di-controllo</replaceable></literal> "
+"può essere <literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</"
+"literal> o <literal>SHA512</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"Usa un DB per la cache binaria. Questo non ha effetto sul comando generate. "
+"Voce di configurazione: <literal>APT::FTPArchive::DB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Silenzioso; produce un output adatto per un file di registro, omettendo gli "
+"indicatori di avanzamento. Ulteriori q produrranno un risultato ancor più "
+"silenzioso, fino a un massimo di 2. È anche possibile usare <option>-q=n</"
+"option> per impostare il livello di silenziosità, scavalcando il file di "
+"configurazione. Voce di configurazione: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"Effettua il de-collegamento. Se viene usata l'impostazione <literal>External-"
+"Links</literal> allora questa opzione abilita di fatto il de-collegamento "
+"dei file. È attiva in modo predefinito e può essere disabilitata con "
+"<option>--no-delink</option>. Voce di configurazione: <literal>APT::"
+"FTPArchive::DeLinkAct</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+"Effettua la generazione dei Contents. Se viene impostata questa opzione e "
+"gli indici dei pacchetti sono generati con un DB della cache, allora anche "
+"l'elenco dei file verrà estratto e memorizzato nel DB per gli usi futuri. "
+"Quando si usa il comando generate questa opzione permette anche la creazione "
+"di qualsiasi file Contents. È attiva in modo predefinito. Voce di "
+"configurazione: <literal>APT::FTPArchive::Contents</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"Seleziona il file override sorgente da usare con il comando "
+"<literal>sources</literal>. Voce di configurazione <literal>APT::FTPArchive::"
+"SourceOverride</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"Rende i database delle cache in sola lettura. Voce di configurazione: "
+"<literal>APT::FTPArchive::ReadOnlyDB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"Accetta per i comandi <literal>packages</literal> e <literal>contents</"
+"literal> solo i file di pacchetto che corrispondono a <literal>*_arch.deb</"
+"literal> o <literal>*_all.deb</literal> invece di tutti i file di pacchetto "
+"nel percorso specificato. Voce di configurazione: <literal>APT::FTPArchive::"
+"Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+"&apt-ftparchive; memorizza in un database cache il maggior numero possibile "
+"di metadati. Se i pacchetti sono ricompilati o ripubblicati nuovamente con "
+"la stessa versione, questo causa problemi dato che verranno usati dei "
+"metadati in cache, come la dimensione e i codici di controllo, non più "
+"aggiornati. Notare che questa opzione è impostata in modo predefinito a "
+"«<literal>false</literal>» dato che non è raccomandabile caricare più "
+"versioni/compilazioni di un pacchetto con lo stesso numero di versione, "
+"perciò in teoria nessuno dovrebbe avere di questi problemi e di conseguenza "
+"tutti questi controlli aggiuntivi sono inutili."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+"Questa opzione di configurazione è impostata a «<literal>true</literal>» in "
+"modo predefinito e dovrebbe essere impostata a <literal>«false»</literal> "
+"solamente se l'archivio generato con &apt-ftparchive; fornisce anche file "
+"<filename>Translation</filename>. Notare che il file principale "
+"<filename>Translation-en</filename> può essere creato solamente con il "
+"comando generate."
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Per creare un file Packages compresso per una directory contenente pacchetti "
+"binari (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> restituisce zero in caso di funzionamento "
+"normale e il valore decimale 100 in caso di errore."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Configuration file for APT"
+msgid "Login configuration file for APT sources and proxies"
+msgstr "file di configurazione di APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "The APT preferences file <filename>/etc/apt/preferences</filename> and "
+#| "the fragment files in the <filename>/etc/apt/preferences.d/</filename> "
+#| "folder can be used to control which versions of packages will be selected "
+#| "for installation."
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"Il file delle preferenze di APT, <filename>/etc/apt/preferences</filename> e "
+"i file frammento nella directory <filename>/etc/apt/preferences.d/</"
+"filename> possono essere usati per controllare quale versione verrà "
+"selezionata per l'installazione."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "apt-get install <replaceable>pacchetto</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "policy <replaceable>[ pkg(s) ]</replaceable>"
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "policy <replaceable>[ pacchetti ]</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Examples"
+msgid "Example"
+msgstr "Esempi"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "<filename>/etc/apt/trustdb.gpg</filename>"
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt/trustdb.gpg</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"Mostra la versione completa dei pacchetti aggiornati e installati. Voce di "
+"configurazione: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "<filename>/etc/apt/trustdb.gpg</filename>"
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt/trustdb.gpg</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"Mostra la versione completa dei pacchetti aggiornati e installati. Voce di "
+"configurazione: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Proxy Configuration"
+msgstr "Configurazione utente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "Three settings are provided for cache control with HTTP/1.1 compliant "
+#| "proxy caches. <literal>No-Cache</literal> tells the proxy not to use its "
+#| "cached response under any circumstances. <literal>Max-Age</literal> sets "
+#| "the allowed maximum age (in seconds) of an index file in the cache of the "
+#| "proxy. <literal>No-Store</literal> specifies that the proxy should not "
+#| "store the requested archive files in its cache, which can be used to "
+#| "prevent the proxy from polluting its cache with (big) .deb files."
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+"Sono fornite tre impostazioni per il controllo della cache in proxy con "
+"cache conformi an HTTP/1.1. <literal>No-Cache</literal> indica al proxy di "
+"non usare la sua risposta in cache in nessuna circostanza. <literal>Max-Age</"
+"literal> imposta l'età massima consentita (in secondi) di un file indice "
+"nella cache del proxy. <literal>No-Store</literal> specifica che il proxy "
+"non deve memorizzare i file archivio richiesti nella sua cache, il che può "
+"essere usato per evitare che il proxy riempia la propria cache con (grandi) "
+"file .deb."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Automatic Proxy Configuration"
+msgstr "Configurazione utente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to "
+#| "specify an external command to discover the http proxy to use. The first "
+#| "and only parameter is an URI denoting the host to be contacted to allow "
+#| "for host-specific configuration. APT expects the command to output the "
+#| "proxy on stdout as a single line in the style <literal>http://proxy:port/"
+#| "</literal> or the word <literal>DIRECT</literal> if no proxy should be "
+#| "used. No output indicates that the generic proxy settings should be "
+#| "used. Note that auto-detection will not be used for a host if a host-"
+#| "specific proxy configuration is already set via <literal>Acquire::http::"
+#| "Proxy::<replaceable>HOST</replaceable></literal>. See the &squid-deb-"
+#| "proxy-client; package for an example implementation that uses avahi. "
+#| "This option takes precedence over the legacy option name "
+#| "<literal>ProxyAutoDetect</literal>."
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> può essere usato per "
+"specificare un comando esterno per rilevare il proxy http da usare. Il primo "
+"è unico parametro è un URI che indica l'host da contattare per permettere "
+"una configurazione specifica per host. APT si aspetta che il comando produca "
+"in output il proxy sullo stdout come singola riga nello stile "
+"<literal>http://proxy:porta/</literal> o la parola <literal>DIRECT</literal> "
+"se non deve essere usato un proxy. L'assenza di output indica che devono "
+"essere usate le impostazioni generiche per proxy. Notare che il rilevamento "
+"automatico non verrà usato per un host se una configurazione di proxy "
+"specifica per host è già impostata con <literal>Acquire::http::Proxy::"
+"<replaceable>HOST</replaceable></literal>. Vedere il pacchetto &squid-deb-"
+"proxy-client; per un esempio di implementazione che usa avahi. Questa "
+"opzione ha la precedenza sull'opzione col nome obsoleto "
+"<literal>ProxyAutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Connection Configuration"
+msgstr "Configurazione utente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The option <literal>timeout</literal> sets the timeout timer used by the "
+#| "method; this value applies to the connection as well as the data timeout."
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+"L'opzione <literal>timeout</literal> imposta il tempo di timeout usato dal "
+"metodo; questo valore si applica sia al timeout per la connessione sia a "
+"quello per i dati."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+#| "literal> which accepts integer values in kilobytes per second. The "
+#| "default value is 0 which deactivates the limit and tries to use all "
+#| "available bandwidth. Note that this option implicitly disables "
+#| "downloading from multiple servers at the same time."
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+"La quantità di banda utilizzata può essere limitata con <literal>Acquire::"
+"http::Dl-Limit</literal> che accetta valori interi in kilobyte al secondo. "
+"Il valore predefinito è 0 che disattiva il limite e cerca di usare tutta la "
+"banda disponibile. Notare che questa opzione implicitamente disabilita lo "
+"scaricamento da più server contemporaneamente."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used "
+#| "to enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be "
+#| "beneficial e.g. on high-latency connections. It specifies how many "
+#| "requests are sent in a pipeline. APT tries to detect and workaround "
+#| "misbehaving webservers and proxies at runtime, but if you know that yours "
+#| "does not conform to the HTTP/1.1 specification pipelining can be disabled "
+#| "by setting the value to 0. It is enabled by default with the value 10."
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+"L'impostazione <literal>Acquire::http::Pipeline-Depth</literal> può essere "
+"usata per abilitare le pipeline HTTP (RFC 2616, sezione 8.1.2.2) che possono "
+"essere utili, ad esempio, in connessioni con grande latenza. Specifica "
+"quante richieste sono inviate in una pipeline. APT cerca di rilevare al "
+"momento dell'esecuzione i server web e i proxy con comportamento non "
+"corretto e di aggirare il problema, ma se è noto che i propri non sono "
+"conformi alla specifica HTTP/1.1, l'uso delle pipeline può essere "
+"disabilitato impostando il valore a 0. In modo predefinito è abilitato con "
+"il valore 10."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+"<literal>Acquire::http::AllowRedirect</literal> specifica se APT segue o "
+"meno le ridirezioni che sono abilitate in modo predefinito."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+"<literal>Acquire::http::User-Agent</literal> può essere usata per impostare "
+"un User-Agent diverso per il metodo di scaricamento http, dato che alcuni "
+"proxy permettono l'accesso per i client solo se usano un identificativo "
+"conosciuto."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+#, fuzzy
+#| msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "it"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "Guida dell'utente di APT"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr "Versione &apt-product-version;"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr ""
+"Questo documento fornisce una panoramica su come usare il gestore di "
+"pacchetti APT."
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr "Licenza"
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"«APT» e questo documento sono software libero; li si può ridistribuire e/o "
+"modificare secondo i termini della Licenza Pubblica Generica GNU (GPL), "
+"pubblicata dalla Free Software Foundation, nella versione 2 o (a propria "
+"scelta) qualsiasi versione successiva."
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"Per ulteriori dettagli, sui sistemi Debian, si veda il testo completo della "
+"licenza nel file /usr/share/common-licenses/GPL."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "Descrizione generale"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"Il pacchetto APT al momento contiene due sezioni, il metodo APT per "
+"<command>dselect</command> e l'interfaccia utente a riga di comando "
+"<command>apt-get</command>; entrambi forniscono un modo per installare e "
+"rimuovere pacchetti, così come per scaricarne di nuovi da Internet."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "Anatomia del sistema dei pacchetti"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"Il sistema dei pacchetti di Debian contiene un gran numero di informazioni "
+"associate a ciascun pacchetto, per garantire che si integri facilmente ed in "
+"maniera pulita nel sistema. La sua caratteristica più importante è il "
+"sistema di dipendenze."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"Il sistema di dipendenze permette ai singoli programmi di fare uso degli "
+"elementi condivisi del sistema, quali le librerie. Semplifica l'inserimento "
+"delle porzioni di un programma usate raramente in pacchetti separati per "
+"ridurre il numero di cose che l'utente medio deve installare. Inoltre, rende "
+"possibile avere più di una scelta per cose quali i programmi di "
+"trasferimento della posta elettronica, i server X e così via."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"Il primo passo per capire il sistema di dipendenze è la comprensione del "
+"concetto di dipendenza semplice: un pacchetto richiede che un altro sia "
+"installato insieme ad esso per poter funzionare."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"Ad esempio, mailcrypt è un'estensione di emacs che aiuta a cifrare i "
+"messaggi di posta elettronica GPG. Se GPG non è installato, mailcrypt è "
+"inutile, quindi mailcrypt ha una dipendenza semplice da GPG. Inoltre, dato "
+"che si tratta di un'estensione di emacs, mailcrypt ha anche una dipendenza "
+"semplice da emacs, senza il quale è totalmente inutile."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"L'altro tipo di dipendenza importante da capire è la dipendenza di "
+"conflitto; significa che un pacchetto, quando è installato insieme ad un "
+"altro, non funziona e potrebbe potenzialmente causare seri danni al sistema. "
+"Come esempio, si consideri un programma di trasporto della posta, quale "
+"sendmail, exim o qmail: non è possibile averne installati due "
+"contemporaneamente, perché entrambi hanno bisogno di restare in ascolto "
+"sulla rete per ricevere la posta. Tentare di installarne due danneggerebbe "
+"seriamente il sistema, quindi ciascun programma di trasporto della posta ha "
+"una dipendenza di conflitto verso tutti gli altri."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"Come ulteriore complicazione, c'è la possibilità per un pacchetto di far "
+"finta di essere un altro. Ad esempio, exim e sendmail sono dal lato pratico "
+"identici, dato che entrambi consegnano la posta e utilizzano un'interfaccia "
+"comune. Il sistema dei pacchetti quindi fornisce un mezzo con cui entrambi "
+"possono dichiarare di essere programmi di trasporto della posta; perciò "
+"entrambi dichiarano di fornire un mail-transport-agent e gli altri pacchetti "
+"che hanno bisogno di un programma di trasferimento della posta possono "
+"dipendere da mail-transport-agent. Quando si cerca di modificare a mano i "
+"pacchetti, questo può portare a moltissima confusione."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"In un determinato momento una singola dipendenza può essere soddisfatta dai "
+"pacchetti già installati o può non esserlo; APT cerca di risolvere i "
+"problemi di dipendenze fornendo svariati algoritmi automatici, che aiutano a "
+"selezionare i pacchetti da installare."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"<command>apt-get</command> fornisce un modo semplice di installare i "
+"pacchetti dalla riga di comando. Diversamente da <command>dpkg</command>, "
+"<command>apt-get</command> non tratta i file .deb, ma utilizza il vero nome "
+"dei pacchetti e può installare archivi .deb solo da una <emphasis>fonte</"
+"emphasis>."
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"Se si sta usando un server proxy http, si deve prima ancora impostare la "
+"variabile d'ambiente http_proxy; vedere sources.list(5)."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"La prima <placeholder type=\"footnote\" id=\"0\"/> cosa da fare prima di "
+"usare <command>apt-get</command> è scaricare gli elenchi dei pacchetti dalle "
+"<emphasis>fonti</emphasis> in modo che il programma sappia quali pacchetti "
+"sono disponibili. Lo si fa con <literal>apt-get update</literal>. Ad esempio,"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"Scaricamento di: http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Scaricamento di: http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Lettura elenco dei pacchetti... Fatto\n"
+"Generazione albero delle dipendenze... Fatto\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr "Una volta aggiornato l'elenco, si possono usare svariati comandi:"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"Upgrade tenterà di fare un aggiornamento indolore del sistema completo, "
+"senza installare mai nuovi pacchetti o rimuoverne di esistenti, e senza mai "
+"aggiornare un pacchetto se ciò ne rende altri difettosi. Può essere usato "
+"quotidianamente per fare un aggiornamento relativamente sicuro del sistema. "
+"Upgrade elencherà tutti i pacchetti che non avrà potuto aggiornare, cosa che "
+"in genere significa che questi dipendono da nuovi pacchetti o che vanno in "
+"conflitto con altri. Per forzare la loro installazione si può usare "
+"<command>dselect</command> o <literal>apt-get install</literal>."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"Install viene usato per installare i pacchetti per nome. Il pacchetto viene "
+"automaticamente scaricato ed installato; questo può essere utile se già se "
+"ne conosce il nome e non si vuole entrare in un'interfaccia grafica per "
+"selezionarlo. Al comando si possono passare anche più pacchetti, che saranno "
+"tutti scaricati. Install cerca automaticamente di risolvere i problemi di "
+"dipendenze dei pacchetti elencati, stampa un riassunto e chiede conferma se "
+"devono essere modificati altri pacchetti che non siano quelli sulla riga di "
+"comando."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"Dist-upgrade fa un aggiornamento completo ed è progettato in modo da rendere "
+"semplici gli aggiornamenti tra i rilasci di Debian. Usa un algoritmo "
+"sofisticato per determinare il miglior insieme di pacchetti da installare, "
+"aggiornare e rimuovere per migrare alla versione più recente la maggior "
+"parte del sistema possibile. In alcune situazioni può essere vantaggioso "
+"usare dist-upgrade invece di dedicare tempo a risolvere manualmente le "
+"dipendenze con <command>dselect</command>. Una volta completato il lavoro di "
+"dist-upgrade, si può usare <command>dselect</command> per installare "
+"eventuali pacchetti che sono stati tralasciati."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"È importante controllare attentamente cosa intende fare dist-upgrade, dato "
+"che le sue decisioni a volte possono essere abbastanza sorprendenti."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"<command>apt-get</command> ha diverse opzioni per la riga di comando, che "
+"sono documentate dettagliatamente nella sua pagina di manuale, "
+"<citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>. L'opzione più utile è <literal>-d</literal>, che "
+"non installa i file scaricati; se il sistema deve scaricare un gran numero "
+"di pacchetti, non è bene iniziare ad installarli nel caso qualcosa dovesse "
+"andare storto. Quando si usa <literal>-d</literal>, gli archivi scaricati "
+"possono essere installati semplicemente eseguendo di nuovo lo stesso comando "
+"senza l'opzione <literal>-d</literal>."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"Il metodo APT di <command>dselect</command> fornisce tutte le funzionalità "
+"del sistema APT con l'interfaccia grafica di selezione dei pacchetti "
+"<command>dselect</command>. <command>dselect</command> viene usato per "
+"selezionare i pacchetti da installare o rimuovere, ed APT fa l'effettiva "
+"installazione."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"Per abilitare il metodo APT si deve selezionare [A]ccess in "
+"<command>dselect</command> e scegliere il metodo APT; verrà chiesto un "
+"insieme di fonti (<emphasis>Sources</emphasis>), cioè di posti da cui "
+"scaricare gli archivi. Possono essere siti Internet remoti, mirror locali di "
+"Debian o CD-ROM; ogni fonte può fornire una parte dell'intero archivio "
+"Debian, ed APT le combinerà automaticamente insieme per formare un insieme "
+"completo di pacchetti. Se si ha un CD-ROM allora è una buona idea indicarlo "
+"per primo e poi specificare un mirror, in modo da avere accesso alle ultime "
+"versioni con le soluzioni dei bug. APT in questo modo userà automaticamente "
+"i pacchetti sul CD-ROM prima di scaricarli da Internet."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"La configurazione delle <emphasis>fonti</emphasis> inizia chiedendo la base "
+"dell'archivio Debian, proponendo in modo predefinito un mirror HTTP; "
+"successivamente viene chiesta la distribuzione da scaricare."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"La distribuzione indica la versione Debian dell'archivio: <emphasis>stable</"
+"emphasis> è l'ultima versione rilasciata e <emphasis>unstable</emphasis> è "
+"quella di sviluppo. <emphasis>non-US</emphasis> è disponibile solo su alcuni "
+"mirror e contiene dei pacchetti in cui viene usata della tecnologia di "
+"cifratura o altre cose che non possono essere esportate dagli Stati Uniti; "
+"importare questi pacchetti negli USA è però legale."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"L'elenco delle componenti indica la lista di sottodistribuzioni da "
+"scaricare. Ciascuna distribuzione viene suddivisa in base alle licenze del "
+"software: la componente main contiene pacchetti liberi secondo le DFSG, "
+"mentre contrib e non-free contengono software che ha diverse restrizioni "
+"sull'uso e sulla distribuzione."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"Si può aggiungere un qualsiasi numero di fonti, e lo script di "
+"configurazione continuerà a chiedere fino a che non sono state specificate "
+"tutte quelle desiderate."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"Prima di cominciare a usare <command>dselect</command> è necessario "
+"aggiornare l'elenco dei pacchetti disponibili selezionando [U]pdate dal "
+"menù: si tratta di un sovrainsieme di ciò che fa <literal>apt-get update</"
+"literal>, che rende le informazioni scaricate disponibili a "
+"<command>dselect</command>. [U]pdate deve essere usato anche se prima è "
+"stato eseguito <literal>apt-get update</literal>."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"Si può a questo punto continuare selezionando i pacchetti desiderati usando "
+"[S]elect e poi installando con [I]nstall. Se si usa il metodo APT, i comandi "
+"[C]onfig e [R]emove non hanno significato, dato che entrambe le fasi sono "
+"contenute in [I]nstall."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"In modo predefinito APT rimuoverà automaticamente i file (.deb) dei "
+"pacchetti che sono stati installati con successo. Per modificare questo "
+"comportamento, inserire <literal>Dselect::clean \"prompt\";</literal> in /"
+"etc/apt/apt.conf."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "L'interfaccia"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"Il metodo <command>dselect</command> è in effetti un insieme di script "
+"wrapper per <command>apt-get</command>. Il metodo fornisce di fatto più "
+"funzionalità di quanto siano presenti nel solo <command>apt-get</command>."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"Sia il metodo APT per <command>dselect</command> sia <command>apt-get</"
+"command> condividono la stessa interfaccia; si tratta di un sistema semplice "
+"che indica in genere cosa sta per fare, e poi lo fa.<placeholder type="
+"\"footnote\" id=\"0\"/> Dopo la stampa di un riassunto delle operazioni che "
+"saranno fatte, APT stampa dei messaggi informativi sullo stato, in modo da "
+"poter avere un'idea del punto a cui arrivato e di quanto ci sia ancora da "
+"fare."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "Avvio"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"Prima di ogni operazione, eccetto update, APT compie alcune operazioni per "
+"preparare il suo stato interno; fa inoltre dei controlli sullo stato del "
+"sistema. In qualsiasi momento le stesse operazioni possono essere fatte con "
+"<literal>apt-get check</literal>."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"Lettura elenco pacchetti... Fatto\n"
+"Generazione albero delle dipendenze... Fatto\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"La prima cosa che fa è leggere tutti i file dei pacchetti in memoria; APT "
+"usa un sistema di cache in modo da rendere la stessa operazione più veloce "
+"la seconda volta che la si fa. Se alcuni dei file dei pacchetti non vengono "
+"trovati, sono ignorati e viene stampato un avvertimento all'uscita di apt-"
+"get."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"L'operazione finale consiste in un'analisi dettagliata delle dipendenze del "
+"sistema: viene controllato che tutte le dipendenze dei singoli pacchetti "
+"installati o non scompattati siano soddisfatte. Se vengono individuati dei "
+"problemi, viene stampato un resoconto, e <command>apt-get</command> esce "
+"senza eseguire alcuna operazione."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"Lettura elenco pacchetti... Fatto\n"
+"Generazione albero delle dipendenze... Fatto\n"
+"È utile eseguire \"run apt --fix-broken install\" per correggere ciò.\n"
+"I seguenti pacchetti hanno dipendenze non soddisfatte:\n"
+" 9fonts: Dipende: xlib6g ma non è installato\n"
+" uucp: Dipende: mailx ma non è installato\n"
+" blast: Dipende: xlib6g (&gt;= 3.3-5) ma non è installato\n"
+" adduser: Dipende: perl-base ma non è installato\n"
+" aumix: Dipende: libgpmg1 ma non è installato\n"
+" debiandoc-sgml: Dipende: sgml-base ma non è installato\n"
+" bash-builtins: Dipende: bash (&gt;= 2.01) ma la versione 2.0-3 è installata\n"
+" cthugha: Dipende: svgalibg1 ma non è installato\n"
+" Dipende: xlib6g (&gt;= 3.3-5) ma non è installato\n"
+" libreadlineg2: Va in conflitto: libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"In questo esempio il sistema ha molti problemi, tra cui uno piuttosto serio "
+"con libreadlineg2. Per ciascun pacchetto che ha dipendenze non soddisfatte, "
+"viene stampata una riga che indica il pacchetto con il problema e quali "
+"dipendenze non sono soddisfatte. Viene inclusa inoltre una breve spiegazione "
+"del perché il pacchetto ha un problema di dipendenze."
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"APT tuttavia considera tutte le dipendenze note e cerca di evitare che i "
+"pacchetti siano difettosi."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"Ci sono due modi in cui un sistema può arrivare in uno stato problematico di "
+"questo genere: il primo avviene se <command>dpkg</command> non ha ravvisato "
+"alcune relazioni delicate tra i pacchetti durante un aggiornamento."
+"<placeholder type=\"footnote\" id=\"0\"/> Il secondo è possibile se "
+"l'installazione di un pacchetto fallisce; in questo caso è possibile che un "
+"pacchetto venga scompattato senza che tutti quelli da cui dipende siano "
+"stati installati."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"La seconda situazione è molto meno seria della prima, dato che APT pone "
+"alcune restrizioni sull'ordine di installazione dei pacchetti. In entrambi i "
+"casi l'opzione <literal>-f</literal> di <command>apt-get</command> farà sì "
+"che APT trovi una soluzione possibile e possa continuare. Il metodo APT di "
+"<command>dselect</command> comprende sempre l'opzione <literal>-f</literal> "
+"per permettere di continuare facilmente anche in caso di script dei "
+"manutentori errati."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"Tuttavia, se l'opzione <literal>-f</literal> viene usata per correggere un "
+"sistema in uno stato molto problematico causato da una situazione del primo "
+"tipo, è possibile che l'operazione fallisca subito o che fallisca durante la "
+"sequenza di installazione. In entrambi i casi è necessario usare dpkg a mano "
+"(probabilmente usando delle opzioni di forzatura) per correggere quanto "
+"basta per poter fare continuare APT."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "Il resoconto sullo stato"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"Prima di procedere, <command>apt-get</command> presenterà un resoconto delle "
+"operazioni che sta per fare. In genere tale resoconto varierà con il tipo di "
+"operazione da fare, ma ci sono svariati elementi comuni: in tutti i casi gli "
+"elenchi riflettono lo stato finale delle cose, e tengono conto dell'opzione "
+"<literal>-f</literal> e di altre attività rilevanti per il comando da "
+"eseguire."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "L'elenco dei pacchetti extra"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"I seguenti pacchetti saranno inoltre installati:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"L'elenco dei pacchetti extra mostra tutti i pacchetti che verranno "
+"installati o aggiornati oltre a quelli indicati sulla riga di comando. Viene "
+"generato solo per il comando <literal>install</literal>. I pacchetti "
+"elencati sono spesso il risultato di un'operazione di installazione "
+"automatica."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "I pacchetti da rimuovere"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"I seguenti pacchetti saranno RIMOSSI:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"L'elenco dei pacchetti da rimuovere indica tutti i pacchetti che verranno "
+"rimossi dal sistema. Può essere mostrato per una qualsiasi delle operazioni, "
+"e deve sempre essere esaminato attentamente per assicurarsi che non venga "
+"eliminato qualcosa di importante. Con l'opzione <literal>-f</literal> è "
+"particolarmente probabile che vengano eliminati dei pacchetti, perciò in "
+"questo caso va fatta particolare attenzione. L'elenco può contenere dei "
+"pacchetti che verranno rimossi perché sono solo parzialmente installati, "
+"forse a causa di un'installazione non terminata correttamente."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "L'elenco dei nuovi pacchetti installati"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"I seguenti pacchetti NUOVI saranno installati:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"L'elenco dei nuovi pacchetti installati è semplicemente un promemoria su "
+"quello che accadrà. I pacchetti nell'elenco non sono al momento installati "
+"nel sistema, ma lo saranno alla fine delle operazioni di APT."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "L'elenco dei pacchetti bloccati"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"I seguenti pacchetti sono stati mantenuti alla versione attuale:\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"In ogni caso in cui il sistema viene aggiornato nel suo insieme, c'è la "
+"possibilità che non possano venire installate nuove versioni di alcuni "
+"pacchetti, dato che potrebbero richiedere l'installazione di pacchetti non "
+"presenti nel sistema o entrare in conflitto con altri già presenti. In "
+"questo caso, il pacchetto viene elencato nella lista di quelli mantenuti "
+"alla versione attuale. Il miglior modo per forzare l'installazione dei "
+"pacchetti elencati in questa lista è installarli con <literal>apt-get "
+"install</literal> o usare <command>dselect</command> per risolvere i "
+"problemi."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "Messaggi di avvertimento sui pacchetti bloccati"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"I seguenti pacchetti bloccati saranno cambiati:\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"A volte si può richiedere ad APT di installare un pacchetto che è stato "
+"bloccato; in questi casi viene stampato un messaggio che avverte che il "
+"pacchetto verrà modificato. Questo dovrebbe accadere solo durante operazioni "
+"di dist-upgrade o di install."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "Resoconto finale"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+"Infine, APT stamperà un riassunto di tutte le modifiche che accadranno."
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"206 aggiornati, 8 installati, 23 da rimuovere e 51 non aggiornati.\n"
+"12 non completamente installati o rimossi..\n"
+"È necessario scaricare 65.7M/66.7M di archivi. Dopo quest'operazione, verranno occupati 26.5M di spazio su disco.\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"La prima riga del riassunto è semplicemente una versione ridotta di tutti "
+"gli elenchi ed include il numero di aggiornamenti, cioè dei pacchetti già "
+"installati per cui è disponibile una nuova versione. La seconda riga indica "
+"il numero di pacchetti con problemi di configurazione, probabilmente in "
+"conseguenza di un'installazione non andata a buon fine. La riga finale "
+"indica i requisiti di spazio dell'installazione; i primi due numeri "
+"riguardano la dimensione dei file archivio: indicano rispettivamente il "
+"numero di byte che devono essere trasferiti da posizioni remote e la "
+"dimensione totale di tutti gli archivi necessari. Il numero successivo "
+"indica la differenza in dimensione tra i pacchetti già installati e quelli "
+"che lo saranno, ed è approssimativamente equivalente allo spazio richiesto "
+"in /usr dopo l'installazione. Se si stanno rimuovendo molti pacchetti, "
+"allora il valore può indicare lo spazio che verrà liberato."
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"Si possono generare altri resoconti usando l'opzione -u per mostrare i "
+"pacchetti da aggiornare, ma sono simili all'esempio precedente."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "La visualizzazione dello stato"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"Durante lo scaricamento degli archivi e dei file dei pacchetti APT stampa "
+"una serie di messaggi di stato."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"Scaricamento di:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Scaricamento di:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Trovato http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Scaricamento di:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Scaricamento di:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"Le righe che cominciano con <emphasis>Scaricamento di</emphasis> vengono "
+"stampate quando APT inizia a scaricare un file, mentre l'ultima riga indica "
+"il progresso dell'operazione. Il primo valore in percentuale nella riga di "
+"progresso indica la percentuale totale scaricata di tutti i file; dato che "
+"la dimensione dei file Package non è nota, purtroppo a volte <literal>apt-"
+"get update</literal> fa una stima poco accurata."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"La sezione successiva della riga di stato viene ripetuta una volta per "
+"ciascuna istanza di scaricamento, ed indica l'operazione in corso, insieme "
+"ad alcune informazioni utili su cosa stia accadendo. A volte questa sezione "
+"contiene solamente <emphasis>Forking</emphasis>, che significa che il "
+"sistema operativo sta caricando il modulo per lo scaricamento. La prima "
+"parola dopo la parentesi quadra aperta è il numero dello scaricamento come "
+"mostrato nelle righe della cronologia. La parola successiva è il nome breve "
+"dell'oggetto che si sta scaricando, che per gli archivi è il nome del "
+"pacchetto."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"All'interno delle virgolette singole c'è una stringa informativa, che indica "
+"il progresso della fase di negoziazione dello scaricamento. Tipicamente "
+"comincia con <emphasis>Connecting</emphasis>, procede con <emphasis>Waiting "
+"for file</emphasis> e poi con <emphasis>Downloading</emphasis> o "
+"<emphasis>Resuming</emphasis>; il valore finale è il numero di byte che sono "
+"stati scaricati dal sito remoto. Una volta cominciato lo scaricamento, viene "
+"rappresentato come <literal>102/10.2k</literal>, che indica che sono stati "
+"scaricati 102 byte su 10,2 kilobyte attesi. La dimensione totale viene "
+"sempre espressa in notazione a quattro cifre, per risparmiare spazio. Dopo "
+"la dimensione viene indicato un indicatore progressivo della percentuale del "
+"file. Il penultimo elemento è la velocità istantanea media, che viene "
+"aggiornata ogni 5 secondi e riflette la velocità di trasferimento dei dati "
+"in quel periodo. Infine, viene visualizzato il tempo stimato per il "
+"trasferimento, che viene aggiornato periodicamente e riflette il tempo "
+"necessario per completare tutte le operazioni alla velocità di trasferimento "
+"mostrata."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"La visualizzazione dello stato viene aggiornata ogni mezzo secondo per "
+"fornire un feedback costante sul processo di scaricamento, e le righe Get "
+"scorrono in alto quando viene avviato lo scaricamento di un nuovo file. Dato "
+"che la visualizzazione dello stato viene costantemente aggiornata, non è "
+"adatta per essere registrata in un file; per non visualizzarla si può usare "
+"l'opzione <literal>-q</literal>."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"APT usa <command>dpkg</command> per installare gli archivi e passerà "
+"all'interfaccia di <command>dpkg</command> una volta completati gli "
+"scaricamenti. <command>dpkg</command> porrà anche alcune domande durante "
+"l'elaborazione dei pacchetti, ed i pacchetti stessi potranno farne altre. "
+"Prima di ciascuna domanda viene proposta di solito una descrizione di ciò "
+"che viene chiesto, e le domande sono troppo diverse per poter essere "
+"discusse in maniera completa in questa occasione."
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "Usare APT offline"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"Questo documento descrive come usare APT in un ambiente non connesso in "
+"rete, specificatamente un approccio «sfrutta-altra-rete» per fare gli "
+"aggiornamenti."
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "Introduzione"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "Panoramica"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"Normalmente APT richiede l'accesso diretto ad un archivio Debian, attraverso "
+"un supporto locale o la rete. Un problema comune è che una macchina Debian "
+"ha un collegamento lento, come un modem, e un'altra macchina ha una "
+"connessione veloce, ma le due sono fisicamente distanti."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"La soluzione è usare supporti rimovibili grandi come un disco Zip o uno "
+"SuperDisk. Questi dischi non sono grandi abbastanza per memorizzare l'intero "
+"archivio Debian, ma possono facilmente contenere un sottoinsieme "
+"sufficientemente grande per la maggior parte degli utenti. L'idea è di usare "
+"APT per generare un elenco di pacchetti che sono necessari e poi scaricarli "
+"nel disco usando un'altra macchina con una buona connettività. È possibile "
+"anche usare un'altra macchina Debian con APT o usare un sistema operativo "
+"completamente diverso e uno strumento per scaricare file come wget. In "
+"questo documento con <emphasis>host remoto</emphasis> viene indicata la "
+"macchina che scarica i pacchetti, e <emphasis>host di destinazione</"
+"emphasis> è quella senza connessione o con una connessione non buona."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"Questo viene ottenuto modificando in modo particolare il file di "
+"configurazione di APT. Come premessa essenziale, si deve dire ad APT di "
+"cercare in un disco i suoi file archivio. Notare che il disco deve essere "
+"formattato con un file system che può gestire i nomi di file lunghi, come "
+"ext2, fat32 o vfat."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "Usare APT su entrambe le macchine"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"La configurazione più semplice si ha se APT è disponibile su entrambe le "
+"macchine. L'idea di base è di mettere una copia del file di stato sul disco "
+"e usare la macchina remota per scaricare i file dei pacchetti più recenti e "
+"per decidere quali pacchetti scaricare. La struttura delle directory sul "
+"disco deve essere simile a:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "Il file di configurazione"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"Il file di configurazione deve indicare ad APT di memorizzare i suoi file "
+"sul disco e di usare i file di configurazione anch'essi sul disco. Il file "
+"sources.list deve contenere i siti appropriati che si desiderano usare dalla "
+"macchina remota e il file di stato dovrebbe essere una copia di <emphasis>/"
+"var/lib/dpkg/status</emphasis> della <emphasis>macchina di destinazione</"
+"emphasis>. Notare che, se si sta usando un archivio locale, si devono usare "
+"URI «copy» la cui sintassi è identica a quella degli URI «file»."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt.conf</emphasis> deve contenere le informazioni necessarie per "
+"far sì che APT usi il disco:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* Questo non è necessario se le due macchine hanno la stessa architettura,\n"
+" dice ad APT remoto qual è l'architettura della macchina di destinazione */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Usa il disco per le informazioni sullo stato e ridirige il file di stato\n"
+" dalla posizione predefinita /var/lib/dpkg */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Le cache binarie saranno memorizzate in locale\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Posizione dell'elenco di fonti.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"Si possono vedere informazioni più dettagliate nella pagina di manuale di "
+"apt.conf e nel file di configurazione d'esempio in <emphasis>/usr/share/doc/"
+"apt/examples/apt.conf</emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"Nella macchina di destinazione, la prima cosa da fare è montare il disco e "
+"copiarvi <emphasis>/var/lib/dpkg/status</emphasis>. Sarà anche necessario "
+"creare le directory elencate nella panoramica: <emphasis>archives/partial/</"
+"emphasis> e <emphasis>lists/partial/</emphasis>. Poi portare il disco nella "
+"macchina remota e configurare il file sources.list; in tale macchina "
+"eseguire:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT scarica i file degli elenchi dei pacchetti ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT scarica tutti i pacchetti necessari per aggiornare la macchina di destinazione ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"Il comando dist-upgrade può essere sostituito con qualsiasi altro comando "
+"APT standard, in particolare dselect-upgrade. Si può persino usare un front-"
+"end per APT come <emphasis>dselect</emphasis>; questo tuttavia pone alcuni "
+"problemi nel comunicare le selezioni fatte al computer locale."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"Ora il disco contiene i file indice e gli archivi necessari per aggiornare "
+"la macchina di destinazione. Riportare il disco alla macchina locale ed "
+"eseguire:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT genera una copia locale dei file di cache ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ O qualsiasi altro comando APT ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"Per il corretto funzionamento è necessario rispecificare il fatto che il "
+"file di stato è quello locale. Questo è molto importante!"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"Se si sta usando dselect si può fare l'operazione molto rischiosa di copiare "
+"disc/status in /var/lib/dpkg/status, in modo che sia aggiornata qualsiasi "
+"selezione fatta nella macchina remota. Si raccomanda di fare le selezioni "
+"solamente nella macchina locale, ma ciò non è sempre possibile. NON copiare "
+"il file di stato se nel frattempo sono stati eseguiti dpkg o APT!"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "Usare APT e wget"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> è uno strumento popolare e portabile per scaricare "
+"file che può essere eseguito quasi su qualsiasi macchina. A differenza del "
+"metodo descritto sopra, questo richiede che la macchina Debian abbia già un "
+"elenco dei pacchetti disponibili."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"L'idea di base è di creare un disco che ha solo i file degli archivi dei "
+"pacchetti, scaricati dal sito remoto. Ciò viene fatto usando l'opzione --"
+"print-uris di apt-get e poi preparando uno script che usa wget per scaricare "
+"effettivamente i pacchetti."
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "Funzionamento"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"A differenza della tecnica precedente, non sono richiesti file di "
+"configurazione speciali; vengono semplicemente usati i comandi APT standard "
+"per generare l'elenco dei file."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade \n"
+" [ Inserire no alla domanda, assicurarsi di approvare le azioni proposte ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"Si può usare qualsiasi comando che non sia dist-upgrade, incluso dselect-"
+"upgrade."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"Il file /disc/wget-script contiene ora un elenco dei comandi wget da "
+"eseguire per poter scaricare gli archivi necessari. Questo script dovrebbe "
+"essere eseguito con il punto di mount del disco come directory attuale di "
+"lavoro, in modo che l'output venga salvato sul disco."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr "Nella macchina remota fare qualcosa come:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ attendere... ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"Una volta che gli archivi sono stati scaricati e il disco è stato riportato "
+"alla macchina Debian, si può procedere con l'installazione usando"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr "che userà gli archivi già scaricati e presenti sul disco."
+
+#~ msgid ""
+#~ "<literal>http::Proxy</literal> sets the default proxy to use for HTTP "
+#~ "URIs. It is in the standard form of <literal>http://[[user][:pass]@]host[:"
+#~ "port]/</literal>. Per host proxies can also be specified by using the "
+#~ "form <literal>http::Proxy::&lt;host&gt;</literal> with the special "
+#~ "keyword <literal>DIRECT</literal> meaning to use no proxies. If no one of "
+#~ "the above settings is specified, <envar>http_proxy</envar> environment "
+#~ "variable will be used."
+#~ msgstr ""
+#~ "<literal>http::Proxy</literal> imposta il proxy predefinito da usare per "
+#~ "gli URI HTTP. È nella forma standard <literal>http://[[utente][:"
+#~ "password]@]host[:porta]/</literal>. Possono anche essere specificati "
+#~ "proxy per ciascun host usando la forma <literal>http::Proxy::&lt;host&gt;"
+#~ "</literal> con la speciale parola chiave <literal>DIRECT</literal> che "
+#~ "significa di non usare un proxy. Se non viene specificata alcuna delle "
+#~ "impostazioni precedenti, viene usata la variabile d'ambiente "
+#~ "<envar>http_proxy</envar>."
+
+#~ msgid ""
+#~ "The <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> and "
+#~ "<literal>proxy</literal> options work for HTTPS URIs in the same way as "
+#~ "for the <literal>http</literal> method, and default to the same values if "
+#~ "they are not explicitly set. The <literal>Pipeline-Depth</literal> option "
+#~ "is not yet supported."
+#~ msgstr ""
+#~ "Le opzioni<literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> e "
+#~ "<literal>proxy</literal> funzionano per gli URI HTTPS nello stesso modo "
+#~ "che per il metodo <literal>http</literal> e assumono in modo predefinito "
+#~ "lo stesso valore, a meno di non essere impostate in modo esplicito. "
+#~ "L'opzione <literal>Pipeline-Depth</literal> non è ancora supportata."
+
+#~ msgid ""
+#~ "<literal>CaInfo</literal> suboption specifies place of file that holds "
+#~ "info about trusted certificates. <literal>&lt;host&gt;::CaInfo</literal> "
+#~ "is the corresponding per-host option. <literal>Verify-Peer</literal> "
+#~ "boolean suboption determines whether or not the server's host certificate "
+#~ "should be verified against trusted certificates. <literal>&lt;host&gt;::"
+#~ "Verify-Peer</literal> is the corresponding per-host option. "
+#~ "<literal>Verify-Host</literal> boolean suboption determines whether or "
+#~ "not the server's hostname should be verified. <literal>&lt;host&gt;::"
+#~ "Verify-Host</literal> is the corresponding per-host option. "
+#~ "<literal>SslCert</literal> determines what certificate to use for client "
+#~ "authentication. <literal>&lt;host&gt;::SslCert</literal> is the "
+#~ "corresponding per-host option. <literal>SslKey</literal> determines what "
+#~ "private key to use for client authentication. <literal>&lt;host&gt;::"
+#~ "SslKey</literal> is the corresponding per-host option. "
+#~ "<literal>SslForceVersion</literal> overrides default SSL version to use. "
+#~ "It can contain either of the strings '<literal>TLSv1</literal>' or "
+#~ "'<literal>SSLv3</literal>'. <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> is the corresponding per-host option."
+#~ msgstr ""
+#~ "La sotto-opzione <literal>CaInfo</literal> specifica la posizione del "
+#~ "file che contiene le informazioni sui certificati fidati; <literal>&lt;"
+#~ "host&gt;::CaInfo</literal> è la corrispondente opzione specifica per "
+#~ "ciascun host. La sotto-opzione booleana <literal>Verify-Peer</literal> "
+#~ "determina se il certificato host del server deve o non deve essere "
+#~ "verificato usando i certificati fidati; <literal>&lt;host&gt;::Verify-"
+#~ "Peer</literal> è la corrispondente opzione specifica per ciascun host. La "
+#~ "sotto-opzione booleana <literal>Verify-Host</literal> determina se il "
+#~ "nome host del server deve o non deve essere verificato; <literal>&lt;"
+#~ "host&gt;::Verify-Host</literal> è la corrispondente opzione specifica per "
+#~ "ciascun host. <literal>SslCert</literal> determina quale certificato "
+#~ "usare per l'autenticazione client; <literal>&lt;host&gt;::SslCert</"
+#~ "literal> è la corrispondente opzione specifica per ciascun host. "
+#~ "<literal>SslKey</literal> determina quale chiave privata usare per "
+#~ "l'autenticazione client; <literal>&lt;host&gt;::SslKey</literal> è la "
+#~ "corrispondente opzione specifica per ciascun host. "
+#~ "<literal>SslForceVersion</literal> scavalca la versione predefinita SSL "
+#~ "da usare e può contenere la stringa «<literal>TLSv1</literal>» o "
+#~ "«<literal>SSLv3</literal>»; <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> è la corrispondente opzione specifica per ciascun host."
+
+#~ msgid ""
+#~ "The http scheme specifies an HTTP server for the archive. If an "
+#~ "environment variable <envar>http_proxy</envar> is set with the format "
+#~ "http://server:port/, the proxy server specified in <envar>http_proxy</"
+#~ "envar> will be used. Users of authenticated HTTP/1.1 proxies may use a "
+#~ "string of the format http://user:pass@server:port/. Note that this is an "
+#~ "insecure method of authentication."
+#~ msgstr ""
+#~ "Il tipo http specifica un server HTTP per l'archivio. Se è impostata una "
+#~ "variabile d'ambiente <envar>http_proxy</envar> con il formato http://"
+#~ "server:porta/, verrà usato il server proxy specificato in "
+#~ "<envar>http_proxy</envar>. Gli utenti con proxy HTTP/1.1 con "
+#~ "autenticazione possono usare una stringa nel formato http://utente:"
+#~ "password@server:porta/. Notare che questo è un metodo di autenticazione "
+#~ "non sicuro."
+
+#~ msgid ""
+#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if "
+#~ "it encounters unauthenticated archives to give a slightly longer grace "
+#~ "period on this backward compatibility effecting change. This exception "
+#~ "will be removed in future releases and you can opt-out of this grace "
+#~ "period by setting the configuration option <option>Binary::apt-get::"
+#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> "
+#~ "or <option>--no-allow-insecure-repositories</option> on the command line."
+#~ msgstr ""
+#~ "Come eccezione temporanea &apt-get; (non &apt;!) dà solo avvertimenti se "
+#~ "incrontra archivi non autenticati, per fornire un periodo di grazia "
+#~ "leggermente più lungo per questa modifica che influenza sulla "
+#~ "compatibilità all'indietro. Questa eccezione sarà rimossa nei rilasci "
+#~ "futuri e si può rinunciare a questo periodo di grazia ipostando l'opzione "
+#~ "di configurazione <option>Binary::apt-get::Acquire::"
+#~ "AllowInsecureRepositories</option> a <literal>false</literal> o <option>--"
+#~ "no-allow-insecure-repositories</option> nella riga di comando."
+
+#~ msgid "Archive Configuration"
+#~ msgstr "Configurazione dell'archivio"
+
+#~ msgid "dpkg trigger usage (and related options)"
+#~ msgstr "Uso dei trigger di dpkg (e relative opzioni)"
+
+#~ msgid ""
+#~ "APT can call &dpkg; in such a way as to let it make aggressive use of "
+#~ "triggers over multiple calls of &dpkg;. Without further options &dpkg; "
+#~ "will use triggers once each time it runs. Activating these options can "
+#~ "therefore decrease the time needed to perform the install or upgrade. "
+#~ "Note that it is intended to activate these options per default in the "
+#~ "future, but as it drastically changes the way APT calls &dpkg; it needs a "
+#~ "lot more testing. <emphasis>These options are therefore currently "
+#~ "experimental and should not be used in production environments.</"
+#~ "emphasis> It also breaks progress reporting such that all front-ends will "
+#~ "currently stay around half (or more) of the time in the 100% state while "
+#~ "it actually configures all packages."
+#~ msgstr ""
+#~ "APT può invocare &dpkg; in modo tale da permettergli di fare un uso più "
+#~ "aggressivo dei trigger su chiamate multiple di &dpkg;. Senza opzioni "
+#~ "ulteriori &dpkg; usa i trigger una volta sola per ogni volta che viene "
+#~ "eseguito. Attivando queste opzioni si può quindi diminuire il tempo "
+#~ "necessario per effettuare l'installazione o l'aggiornamento. Notare che "
+#~ "questo è pensato per attivare queste opzioni in modo predefinito nel "
+#~ "futuro ma, dato che cambia drasticamente il modo in cui APT chiama "
+#~ "&dpkg;, necessita di essere testato ancora molto. <emphasis>Queste "
+#~ "opzioni sono perciò al momento sperimentali e non dovrebbero essere usate "
+#~ "in ambienti di produzione.</emphasis> Inoltre rende difettosi i rapporti "
+#~ "sull'avanzamento, tanto che che tutte le interfacce attualmente rimangono "
+#~ "per metà (o più) del tempo nello stato 100% mentre in realtà stanno "
+#~ "venendo configurati i pacchetti."
+
+#~ msgid ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+#~ msgstr ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+
+#~ msgid ""
+#~ "Note that it is not guaranteed that APT will support these options or "
+#~ "that these options will not cause (big) trouble in the future. If you "
+#~ "have understand the current risks and problems with these options, but "
+#~ "are brave enough to help testing them, create a new configuration file "
+#~ "and test a combination of options. Please report any bugs, problems and "
+#~ "improvements you encounter and make sure to note which options you have "
+#~ "used in your reports. Asking &dpkg; for help could also be useful for "
+#~ "debugging proposes, see e.g. <command>dpkg --audit</command>. A defensive "
+#~ "option combination would be <placeholder type=\"literallayout\" id=\"0\"/>"
+#~ msgstr ""
+#~ "Notare che non è garantito che APT supporterà queste opzioni o che queste "
+#~ "opzioni non causeranno (grossi) problemi in futuro. Se i rischi e i "
+#~ "problemi attuali legati a queste opzioni sono chiari, ma si è abbastanza "
+#~ "coraggiosi da volere aiutare a testarle, creare un nuovo file di "
+#~ "configurazione e provare una combinazione di opzioni. Segnalare ogni bug, "
+#~ "problema o miglioramento che si presenta e assicurarsi di indicare nella "
+#~ "segnalazione quali opzioni sono state usate. Potrebbe anche essere utile "
+#~ "chiedere aiuto a &dpkg; per il debug; vedere ad esempio <command>dpkg --"
+#~ "audit</command>. Una combinazione di opzioni sulla difensiva sarebbe "
+#~ "<placeholder type=\"literallayout\" id=\"0\"/>"
+
+#~ msgid ""
+#~ "Add the no triggers flag to all &dpkg; calls (except the ConfigurePending "
+#~ "call). See &dpkg; if you are interested in what this actually means. In "
+#~ "short: &dpkg; will not run the triggers when this flag is present unless "
+#~ "it is explicitly called to do so in an extra call. Note that this option "
+#~ "exists (undocumented) also in older APT versions with a slightly "
+#~ "different meaning: Previously these option only append --no-triggers to "
+#~ "the configure calls to &dpkg; - now APT will also add this flag to the "
+#~ "unpack and remove calls."
+#~ msgstr ""
+#~ "Aggiunge l'opzione --no-triggers a tutte le invocazioni di &dpkg; (tranne "
+#~ "la chiamata ConfigurePending). Se si è interessati a capire cosa ciò "
+#~ "significhi veramente, vedere &dpkg;. In breve: quando questa opzione è "
+#~ "presente &dpkg; non esegue i trigger, a meno che non sia esplicitamente "
+#~ "chiamato per farlo con una chiamata aggiuntiva. Notare che questa opzione "
+#~ "esiste (non documentata) anche in versioni più vecchie di APT, con un "
+#~ "significato leggermente diverso: prima queste opzioni aggiungevano "
+#~ "solamente --no-triggers alle chiamate di &dpkg; per la configurazione, "
+#~ "ora APT aggiunge questa opzione anche alle chiamate per lo "
+#~ "spacchettamento e la rimozione."
+
+#~ msgid ""
+#~ "Valid values are \"<literal>all</literal>\", \"<literal>smart</literal>\" "
+#~ "and \"<literal>no</literal>\". The default value is \"<literal>all</"
+#~ "literal>\", which causes APT to configure all packages. The "
+#~ "\"<literal>smart</literal>\" way is to configure only packages which need "
+#~ "to be configured before another package can be unpacked (Pre-Depends), "
+#~ "and let the rest be configured by &dpkg; with a call generated by the "
+#~ "ConfigurePending option (see below). On the other hand, \"<literal>no</"
+#~ "literal>\" will not configure anything, and totally relies on &dpkg; for "
+#~ "configuration (which at the moment will fail if a Pre-Depends is "
+#~ "encountered). Setting this option to any value other than <literal>all</"
+#~ "literal> will implicitly also activate the next option by default, as "
+#~ "otherwise the system could end in an unconfigured and potentially "
+#~ "unbootable state."
+#~ msgstr ""
+#~ "Valori permessi sono «<literal>all</literal>», «<literal>smart</literal>» "
+#~ "e «<literal>no</literal>». Il valore predefinito è «<literal>all</"
+#~ "literal>», il che fa sì che APT configuri tutti i pacchetti. Il modo "
+#~ "«<literal>smart</literal>» (intelligente) è quello di configurare solo i "
+#~ "pacchetti che devono essere configurati prima che possa essere "
+#~ "spacchettato un altro pacchetto (Pre-Depends), e lasciare che il resto "
+#~ "venga configurato da &dpkg; con una chiamata generata dall'opzione "
+#~ "ConfigurePending (vedere più sotto). D'altro canto, «<literal>no</"
+#~ "literal>» non configura nulla e si affida completamente a &dpkg; per la "
+#~ "configurazione (che al momento fallisce se viene incontrata una relazione "
+#~ "Pre-Depends). Impostare questo parametro ad un qualsiasi valore diverso "
+#~ "da <literal>all</literal> attiva implicitamente in modo predefinito anche "
+#~ "l'opzione successiva, dato che altrimenti il sistema potrebbe finire in "
+#~ "uno stato non configurato e potenzialmente non avviabile."
+
+#~ msgid ""
+#~ "Useful for the <literal>smart</literal> configuration as a package which "
+#~ "has pending triggers is not considered as <literal>installed</literal>, "
+#~ "and &dpkg; treats them as <literal>unpacked</literal> currently which is "
+#~ "a showstopper for Pre-Dependencies (see debbugs #526774). Note that this "
+#~ "will process all triggers, not only the triggers needed to configure this "
+#~ "package."
+#~ msgstr ""
+#~ "Utile per la configurazione <literal>smart</literal> dato che un "
+#~ "pacchetto che ha trigger in sospeso non è considerato come "
+#~ "<literal>installato</literal> e &dpkg; attualmente lo tratta come "
+#~ "<literal>spacchettato</literal> che è un ostacolo per le relazioni Pre-"
+#~ "Depends (vedere il bug Debian #526774). Notare che questo elaborerà tutti "
+#~ "i trigger, non solo quelli necessari per configurare il pacchetto in "
+#~ "questione."
+
+#~ msgid ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+#~ msgstr ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+
+#~ msgid ""
+#~ "Essential packages (and their dependencies) should be configured "
+#~ "immediately after unpacking. It is a good idea to do this quite early in "
+#~ "the upgrade process as these configure calls also currently require "
+#~ "<literal>DPkg::TriggersPending</literal> which will run quite a few "
+#~ "triggers (which may not be needed). Essentials get per default a high "
+#~ "score but the immediate flag is relatively low (a package which has a Pre-"
+#~ "Depends is rated higher). These option and the others in the same group "
+#~ "can be used to change the scoring. The following example shows the "
+#~ "settings with their default values. <placeholder type=\"literallayout\" "
+#~ "id=\"0\"/>"
+#~ msgstr ""
+#~ "I pacchetti essenziali (e le loro dipendenze) dovrebbero essere "
+#~ "configurati immediatamente dopo essere stati spacchettati. È una buona "
+#~ "idea farlo abbastanza presto nel processo di aggiornamento, dato che "
+#~ "queste chiamate di configurazione al momento richiedono anche "
+#~ "<literal>DPkg::TriggersPending</literal> che esegue un certo numero di "
+#~ "trigger (che potrebbero non essere necessari). I pacchetti essenziali "
+#~ "ottengono in modo predefinito un punteggio alto, ma il contrassegno di "
+#~ "immediatezza è relativamente basso (un pacchetto che ha una relazione Pre-"
+#~ "Depends è valutato con un punteggio maggiore). Queste opzioni e le altre "
+#~ "nello stesso gruppo possono essere usate per cambiare il punteggio. "
+#~ "L'esempio seguente mostra le impostazioni con i loro valori predefiniti. "
+#~ "<placeholder type=\"literallayout\" id=\"0\"/>"
+
+#~ msgid "List fingerprints of trusted keys."
+#~ msgstr "Elenca le impronte digitali delle chiavi fidate."
+
+#~ msgid "Local trust database of archive keys."
+#~ msgstr "Database locale di fiducia delle chiavi archiviate."
+
+#~ msgid "&keyring-filename;"
+#~ msgstr "&keyring-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive trusted keys."
+#~ msgstr "Portachiavi delle chiavi fidate degli archivi &keyring-distro;."
+
+#~ msgid "&keyring-removed-filename;"
+#~ msgstr "&keyring-removed-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive removed trusted keys."
+#~ msgstr ""
+#~ "Portachiavi delle chiavi fidate rimosse degli archivi &keyring-distro;."
+
+#~ msgid ""
+#~ "In the future APT will refuse to work with unauthenticated repositories "
+#~ "by default until support for them is removed entirely. Users have the "
+#~ "option to opt-in to this behavior already by setting the configuration "
+#~ "option <option>Acquire::AllowInsecureRepositories</option> to "
+#~ "<literal>false</literal>."
+#~ msgstr ""
+#~ "In futuro APT si rifiuterà in modo predefinito di lavorare con repository "
+#~ "non autenticati fino a quando il supporto per essi sarà completamente "
+#~ "rimosso. Gli utenti hanno l'opzione di passare di già a questo "
+#~ "comportamento impostando l'opzione di configurazione <option>Acquire::"
+#~ "AllowInsecureRepositories</option> a <literal>false</literal>."
+
+#~ msgid ""
+#~ "Allow the update operation to load data files from a repository without a "
+#~ "trusted signature. If enabled this option no data files will be loaded "
+#~ "and the update operation fails with a error for this source. The default "
+#~ "is false for backward compatibility. This will be changed in the future."
+#~ msgstr ""
+#~ "Permette all'operazione «update» di caricare i file dei dati da un "
+#~ "repository senza una firma fidata. Se questa opzione viene abilitata non "
+#~ "viene caricato alcun file dei dati e l'operazione di «update» fallisce "
+#~ "per tale fonte. Il valore predefinito è impostato a falso per "
+#~ "compatibilità all'indietro. In futuro ciò cambierà."
+
+#~ msgid "&apt-get;, &apt-conf;"
+#~ msgstr "&apt-get;, &apt-conf;"
+
+#~ msgid ""
+#~ "This is a space separated list of all the architectures that appear under "
+#~ "search section. The special architecture 'source' is used to indicate "
+#~ "that this tree has a source archive."
+#~ msgstr ""
+#~ "Questa è una lista di tutte le architetture che appaiono sotto una "
+#~ "sezione, separate da spazi. L'architettura speciale «source» è usata per "
+#~ "indicare che questo albero ha un archivio sorgente."
+
+#~ msgid ""
+#~ "<command>apt</command> (Advanced Package Tool) is the command-line tool "
+#~ "for handling packages. It provides a commandline interface for the "
+#~ "package management of the system. See also &apt-get; and &apt-cache; for "
+#~ "more low-level command options."
+#~ msgstr ""
+#~ "<command>apt</command> (Advanced Package Tool, strumento avanzato per "
+#~ "pacchetti) è lo strumento a riga di comando per maneggiare i pacchetti. "
+#~ "Fornisce un'interfaccia a riga di comando per la gestione dei pacchetti "
+#~ "del sistema. Per altre opzioni di comandi a basso livello vedere anche "
+#~ "&apt-get; e &apt-cache;."
+
+#~ msgid ""
+#~ "<literal>search</literal> searches for the given term(s) and display "
+#~ "matching packages."
+#~ msgstr ""
+#~ "<literal>search</literal> cerca i termini specificati e visualizza i "
+#~ "pacchetti che corrispondono."
+
+#~ msgid ""
+#~ "<literal>show</literal> shows the package information for the given "
+#~ "package(s)."
+#~ msgstr ""
+#~ "<literal>show</literal> mostra le informazioni di pacchetto per i "
+#~ "pacchetti specificati."
+
+#~ msgid ""
+#~ "<literal>install</literal> is followed by one or more package names "
+#~ "desired for installation or upgrading."
+#~ msgstr ""
+#~ "<literal>install</literal> è seguito da uno o più nomi di pacchetto che "
+#~ "si desidera vengano installati o aggiornati."
+
+#~ msgid ""
+#~ "<literal>update</literal> is used to resynchronize the package index "
+#~ "files from their sources."
+#~ msgstr ""
+#~ "<literal>update</literal> viene usato per risincronizzare i file con gli "
+#~ "indici dei pacchetti con le loro fonti."
+
+#~ msgid "Script usage"
+#~ msgstr "Uso di script"
+
+#~ msgid "Differences to &apt-get;"
+#~ msgstr "Differenze con &apt-get;"
+
+#~ msgid ""
+#~ "The <command>apt</command> command is meant to be pleasant for end users "
+#~ "and does not need to be backward compatible like &apt-get;. Therefore "
+#~ "some options are different:"
+#~ msgstr ""
+#~ "Il comando <command>apt</command> non è pensato per essere facile da "
+#~ "usare per gli utenti finali e non è necessario sia compatibile "
+#~ "all'indietro come &apt-get;. Perciò alcune opzioni sono diverse:"
+
+#~ msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
+#~ msgstr "L'opzione <literal>DPkg::Progress-Fancy</literal> è abilitata."
+
+#~ msgid "The option <literal>APT::Color</literal> is enabled."
+#~ msgstr "L'opzione <literal>APT::Color</literal> è abilitata."
+
+#~ msgid ""
+#~ "The option <literal>upgrade</literal> has <literal>--with-new-pkgs</"
+#~ "literal> enabled by default."
+#~ msgstr ""
+#~ "L'opzione <literal>upgrade</literal> ha <literal>--with-new-pkgs</"
+#~ "literal> abilitato in modo predefinito."
+
+#~ msgid ""
+#~ "Pass advanced options to gpg. With adv --recv-key you can download the "
+#~ "public key."
+#~ msgstr ""
+#~ "Passa opzioni avanzate a gpg. Con adv --recv-key è possibile scaricare la "
+#~ "chiave pubblica."
+
+#~ msgid "mark/unmark a package as being automatically-installed"
+#~ msgstr ""
+#~ "mette/toglie il contrassegno di automaticamente installato ai pacchetti"
+
+#~ msgid ""
+#~ "<command>apt-mark</command> will change whether a package has been marked "
+#~ "as being automatically installed."
+#~ msgstr ""
+#~ "<command>apt-mark</command> cambia il contrassegno di un pacchetto che "
+#~ "indica se è stato installato automaticamente."
+
+#~ msgid ""
+#~ "<literal>hold</literal> is used to mark a package as held back, which "
+#~ "will prevent the package from being automatically installed, upgraded or "
+#~ "removed. The command is only a wrapper around <command>dpkg --set-"
+#~ "selections</command> and the state is therefore maintained by &dpkg; and "
+#~ "not affected by the <option>--file</option> option."
+#~ msgstr ""
+#~ "<literal>hold</literal> viene usato per contrassegnare un pacchetto come "
+#~ "bloccato, il che impedisce che il pacchetto venga automaticamente "
+#~ "installato, aggiornato o rimosso. Il comando è solamente un wrapper per "
+#~ "<command>dpkg --set-selections</command> e lo stato è pertanto mantenuto "
+#~ "da &dpkg; e non è influenzato dall'opzione <option>--file</option>."
+
+#~ msgid ""
+#~ "If a package comes from a archive without a signature, or with a "
+#~ "signature that apt does not have a key for, that package is considered "
+#~ "untrusted, and installing it will result in a big warning. <command>apt-"
+#~ "get</command> will currently only warn for unsigned archives; future "
+#~ "releases might force all sources to be verified before downloading "
+#~ "packages from them."
+#~ msgstr ""
+#~ "Se un pacchetto proviene da un archivio senza una firma, o con una firma "
+#~ "per la quale apt non ha una chiave, tale pacchetto viene considerato non "
+#~ "fidato e quando lo si installa si ottiene un importante avvertimento. "
+#~ "<command>apt-get</command> attualmente avverte solamente in caso di "
+#~ "archivi non firmati; le versioni future potrebbero forzare la verifica di "
+#~ "tutte le fonti prima di scaricare pacchetti da esse."
+
+#~ msgid ""
+#~ "No action; perform a simulation of events that would occur but do not "
+#~ "actually change the system. Configuration Item: <literal>APT::Get::"
+#~ "Simulate</literal>."
+#~ msgstr ""
+#~ "Nessuna azione; effettua una simulazione degli eventi che si "
+#~ "verificherebbero, ma non cambia realmente il sistema. Voce di "
+#~ "configurazione: <literal>APT::Get::Simulate</literal>."
+
+#~ msgid ""
+#~ "Simulated runs performed as a user will automatically deactivate locking "
+#~ "(<literal>Debug::NoLocking</literal>), and if the option <literal>APT::"
+#~ "Get::Show-User-Simulation-Note</literal> is set (as it is by default) a "
+#~ "notice will also be displayed indicating that this is only a simulation. "
+#~ "Runs performed as root do not trigger either NoLocking or the notice - "
+#~ "superusers should know what they are doing without further warnings from "
+#~ "<literal>apt-get</literal>."
+#~ msgstr ""
+#~ "Le esecuzioni simulate effettuate da un utente disattivano "
+#~ "automaticamente il lock (<literal>Debug::NoLocking</literal>) e se è "
+#~ "impostata l'opzione <literal>APT::Get::Show-User-Simulation-Note</"
+#~ "literal> (come predefinito), viene anche visualizzato un messaggio che "
+#~ "indica che quella fatta è solo una simulazione. Le esecuzioni effettuate "
+#~ "da root non attivano né NoLocking né i messaggi: i superutenti dovrebbero "
+#~ "sapere ciò che stanno facendo senza bisogno di ulteriori avvertimenti da "
+#~ "<literal>apt-get</literal>."
+
+#~ msgid ""
+#~ "Ignore if packages can't be authenticated and don't prompt about it. "
+#~ "This is useful for tools like pbuilder. Configuration Item: "
+#~ "<literal>APT::Get::AllowUnauthenticated</literal>."
+#~ msgstr ""
+#~ "Ignora se i pacchetti non possono essere autenticati e non chiedere "
+#~ "all'utente cosa fare. È utile per strumenti come pbuilder. Voce di "
+#~ "configurazione: <literal>APT::Get::AllowUnauthenticated</literal>."
+
+#~ msgid ""
+#~ "Version 2 of this protocol dumps more information, including the protocol "
+#~ "version, the APT configuration space and the packages, files and versions "
+#~ "being changed. Version 3 adds the architecture and <literal>MultiArch</"
+#~ "literal> flag to each version being dumped."
+#~ msgstr ""
+#~ "La versione 2 di questo protocollo fa il dump di più informazioni, "
+#~ "inclusi la versione del protocollo, lo spazio di configurazione di APT, e "
+#~ "i pacchetti, file e versioni che vengono modificati. La versione 3 "
+#~ "aggiunge l'architettura e il contrassegno <literal>MultiArch</literal> "
+#~ "per ciascuna versione di cui viene fatto il dump."
+
+#~ msgid ""
+#~ "to the versions that are not installed and do not belong to the target "
+#~ "release."
+#~ msgstr ""
+#~ "alle versioni che non sono installate e non appartengono al rilascio "
+#~ "obiettivo."
+
+#~ msgid ""
+#~ "Each line specifying a source starts with type (e.g. <literal>deb-src</"
+#~ "literal>) followed by options and arguments for this type. Individual "
+#~ "entries cannot be continued onto a following line. Empty lines are "
+#~ "ignored, and a <literal>#</literal> character anywhere on a line marks "
+#~ "the remainder of that line as a comment."
+#~ msgstr ""
+#~ "Ogni riga che specifica una fonte inizia con il tipo (per esempio "
+#~ "<literal>deb-src</literal>), seguito dalle opzioni e dagli argomenti per "
+#~ "tale tipo. Ogni singola voce non può essere divisa su più righe. Le righe "
+#~ "vuote vengono ignorate e un carattere <literal>#</literal> in qualsiasi "
+#~ "punto di una riga contrassegna come commento la parte rimanente della "
+#~ "riga."
+
+#~ msgid "deb [ options ] uri suite [component1] [component2] [...]"
+#~ msgstr "deb [ opzioni ] uri suite [componente1] [componente2] [...]"
+
+#~ msgid ""
+#~ " Types: deb deb-src\n"
+#~ " URIs: http://example.com\n"
+#~ " Suites: stable testing\n"
+#~ " Sections: component1 component2\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ "\n"
+#~ " Types: deb\n"
+#~ " URIs: http://another.example.com\n"
+#~ " Suites: experimental\n"
+#~ " Sections: component1 component2\n"
+#~ " Enabled: no\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ " "
+#~ msgstr ""
+#~ " Types: deb deb-src\n"
+#~ " URIs: http://example.com\n"
+#~ " Suites: stable testing\n"
+#~ " Sections: componente1 componente2\n"
+#~ " Description: breve\n"
+#~ " lunga lunga lunga\n"
+#~ " [opzione1]: [valore-opzione1]\n"
+#~ "\n"
+#~ " Types: deb\n"
+#~ " URIs: http://another.example.com\n"
+#~ " Suites: experimental\n"
+#~ " Sections: componente1 componente2\n"
+#~ " Enabled: no\n"
+#~ " Description:breve\n"
+#~ " lunga lunga lunga\n"
+#~ " [opzione1]: [valore-opzione1]\n"
+#~ " "
+
+#~ msgid ""
+#~ "<literal>options</literal> is always optional and needs to be surrounded "
+#~ "by square brackets. It can consist of multiple settings in the form "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>. Multiple settings are separated by spaces. The "
+#~ "following settings are supported by APT (note however that unsupported "
+#~ "settings will be ignored silently):"
+#~ msgstr ""
+#~ "<literal>opzioni</literal> è sempre opzionale e deve essere racchiuso tra "
+#~ "parentesi quadre. Può consistere di più impostazioni nella forma "
+#~ "<literal><replaceable>impostazione</replaceable>=<replaceable>valore</"
+#~ "replaceable></literal>. Impostazioni multiple vengono separate da spazi. "
+#~ "APT supporta le seguenti impostazioni (notare però che le impostazioni "
+#~ "non supportate verranno ignorate in modo silenzioso):"
+
+#~ msgid ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> and <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> which can be "
+#~ "used to add/remove architectures from the set which will be downloaded."
+#~ msgstr ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> e <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> possono essere "
+#~ "usati per aggiungere e rimuovere architetture dall'insieme di quelle che "
+#~ "verranno scaricate."
+
+#~ msgid ""
+#~ "<literal>trusted=yes</literal> can be set to indicate that packages from "
+#~ "this source are always authenticated even if the <filename>Release</"
+#~ "filename> file is not signed or the signature can't be checked. This "
+#~ "disables parts of &apt-secure; and should therefore only be used in a "
+#~ "local and trusted context. <literal>trusted=no</literal> is the opposite "
+#~ "which handles even correctly authenticated sources as not authenticated."
+#~ msgstr ""
+#~ "<literal>trusted=yes</literal> può essere usato per indicare che i "
+#~ "pacchetti da questa fonte sono sempre autenticati anche se il file "
+#~ "<filename>Release</filename> non è firmato o la firma non può essere "
+#~ "controllata. Ciò disabilita parti di &apt-secure; e dovrebbe quindi "
+#~ "essere usato solo in un contesto locale o fidato. <literal>trusted=no</"
+#~ "literal> fa l'opposto e tratta anche le fonti correttamente autenticate "
+#~ "come non autenticate."
+
+#~ msgid "Some examples:"
+#~ msgstr "Alcuni esempi:"
+
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+
+#~ msgid "apt"
+#~ msgstr "apt"
+
+#~ msgid "16 June 1998"
+#~ msgstr "16 giugno 1998"
+
+#~ msgid "Debian"
+#~ msgstr "Debian"
+
+#~ msgid "NAME"
+#~ msgstr "NOME"
+
+#~ msgid "apt - Advanced Package Tool"
+#~ msgstr "apt - Advanced Package Tool (strumento avanzato per i pacchetti)"
+
+#~ msgid "SYNOPSIS"
+#~ msgstr "SINTASSI"
+
+#~ msgid "B<apt>"
+#~ msgstr "B<apt>"
+
+#~ msgid "DESCRIPTION"
+#~ msgstr "DESCRIZIONE"
+
+#, fuzzy
+#~| msgid ""
+#~| "APT is a management system for software packages. For normal day to day "
+#~| "package management there are several front-ends available, such as "
+#~| "B<aptitude>(8) for the command line or B<synaptic>(8) for the X Window "
+#~| "System. Some options are only implemented in B<apt-get>(8) though."
+#~ msgid ""
+#~ "For normal day to day package management there are several front-ends "
+#~ "available, such as B<aptitude>(8) for the command line or "
+#~ "B<synaptic>(8) for the X Window System. Some options are only "
+#~ "implemented in B<apt-get>(8) though."
+#~ msgstr ""
+#~ "APT è un sistema di gestione per i pacchetti software. Per la normale "
+#~ "gestione quotidiana dei pacchetti sono disponibili diverse interfacce, "
+#~ "quali B<aptitude>(8) per la riga di comando o B<synaptic>(8) per il "
+#~ "sistema X Window. Comunque alcune opzioni sono implementate solo in B<apt-"
+#~ "get>(8)."
+
+#~ msgid "SEE ALSO"
+#~ msgstr "VEDERE ANCHE"
+
+#, fuzzy
+#~| msgid ""
+#~| "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~| "B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgid ""
+#~ "B<apt>(8), B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources."
+#~ "list>(5), B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgstr ""
+#~ "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~ "B<apt_preferences>(5), B<apt-secure>(8)"
+
+#~ msgid "DIAGNOSTICS"
+#~ msgstr "DIAGNOSTICA"
+
+#~ msgid "apt returns zero on normal operation, decimal 100 on error."
+#~ msgstr ""
+#~ "apt restituisce zero in caso di funzionamento normale e il valore "
+#~ "decimale 100 in caso di errore."
+
+#~ msgid "BUGS"
+#~ msgstr "BUG"
+
+#~ msgid "This manpage isn't even started."
+#~ msgstr "Questa pagina di manuale non è neanche stata iniziata."
+
+#~ msgid ""
+#~ "See E<lt>http://bugs.debian.org/aptE<gt>. If you wish to report a bug in "
+#~ "B<apt>, please see I</usr/share/doc/debian/bug-reporting.txt> or the "
+#~ "B<reportbug>(1) command."
+#~ msgstr ""
+#~ "Vedere E<lt>http://bugs.debian.org/aptE<gt>. Per segnalare un bug in "
+#~ "B<apt>, vedere I</usr/share/doc/debian/bug-reporting.txt> o il comando "
+#~ "B<reportbug>(1)."
+
+#~ msgid "AUTHOR"
+#~ msgstr "AUTORE"
+
+#~ msgid "apt was written by the APT team E<lt>apt@packages.debian.orgE<gt>."
+#~ msgstr "apt è stato scritto dal Team APT E<lt>apt@packages.debian.orgE<gt>."
+
+#~ msgid "Debian GNU/Linux"
+#~ msgstr "Debian GNU/Linux"
+
+#~ msgid "OPTIONS"
+#~ msgstr "OPZIONI"
+
+#~ msgid "None."
+#~ msgstr "Nessuna."
+
+#~ msgid "FILES"
+#~ msgstr "FILE"
+
+#~ msgid ""
+#~ "<!-- Some common paths.. --> <!ENTITY docdir \"/usr/share/doc/apt/\"> <!"
+#~ "ENTITY guidesdir \"/usr/share/doc/apt-doc/\"> <!ENTITY configureindex "
+#~ "\"<filename>&docdir;examples/configure-index.gz</filename>\"> <!ENTITY "
+#~ "aptconfdir \"<filename>/etc/apt.conf</filename>\"> <!ENTITY statedir \"/"
+#~ "var/lib/apt\"> <!ENTITY cachedir \"/var/cache/apt\">"
+#~ msgstr ""
+#~ "<!-- Alcuni percorsi comuni. --> <!ENTITY docdir \"/usr/share/doc/apt/\"> "
+#~ "<!ENTITY guidesdir \"/usr/share/doc/apt-doc/\"> <!ENTITY configureindex "
+#~ "\"<filename>&docdir;examples/configure-index.gz</filename>\"> <!ENTITY "
+#~ "aptconfdir \"<filename>/etc/apt.conf</filename>\"> <!ENTITY statedir \"/"
+#~ "var/lib/apt\"> <!ENTITY cachedir \"/var/cache/apt\">"
+
+#~ msgid ""
+#~ "<!-- Cross references to other man pages -->\n"
+#~ "<!ENTITY apt-conf \"<citerefentry>\n"
+#~ " <refentrytitle><filename>apt.conf</filename></refentrytitle>\n"
+#~ " <manvolnum>5</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!-- Riferimenti incrociati ad altre pagine di manuale -->\n"
+#~ "<!ENTITY apt-conf \"<citerefentry>\n"
+#~ " <refentrytitle><filename>apt.conf</filename></refentrytitle>\n"
+#~ " <manvolnum>5</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-get \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-get</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-get \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-get</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-config \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-config</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-config \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-config</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-cdrom \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-cdrom</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-cdrom \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-cdrom</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-cache \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-cache</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-cache \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-cache</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-preferences \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt_preferences</command></refentrytitle>\n"
+#~ " <manvolnum>5</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-preferences \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt_preferences</command></refentrytitle>\n"
+#~ " <manvolnum>5</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-key \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-key</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-key \"<citerefentry>\n"
+#~ " <refentrytitle><command>apt-key</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-secure \"<citerefentry>\n"
+#~ " <refentrytitle>apt-secure</refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-secure \"<citerefentry>\n"
+#~ " <refentrytitle>apt-secure</refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-ftparchive \"<citerefentry>\n"
+#~ " <refentrytitle><filename>apt-ftparchive</filename></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-ftparchive \"<citerefentry>\n"
+#~ " <refentrytitle><filename>apt-ftparchive</filename></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY sources-list \"<citerefentry>\n"
+#~ " <refentrytitle><filename>sources.list</filename></refentrytitle>\n"
+#~ " <manvolnum>5</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY sources-list \"<citerefentry>\n"
+#~ " <refentrytitle><filename>sources.list</filename></refentrytitle>\n"
+#~ " <manvolnum>5</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY reportbug \"<citerefentry>\n"
+#~ " <refentrytitle><command>reportbug</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY reportbug \"<citerefentry>\n"
+#~ " <refentrytitle><command>reportbug</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY dpkg \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY dpkg \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY dpkg-buildpackage \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg-buildpackage</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY dpkg-buildpackage \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg-buildpackage</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY gzip \"<citerefentry>\n"
+#~ " <refentrytitle><command>gzip</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY gzip \"<citerefentry>\n"
+#~ " <refentrytitle><command>gzip</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY dpkg-scanpackages \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg-scanpackages</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY dpkg-scanpackages \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg-scanpackages</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY dpkg-scansources \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg-scansources</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY dpkg-scansources \"<citerefentry>\n"
+#~ " <refentrytitle><command>dpkg-scansources</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY dselect \"<citerefentry>\n"
+#~ " <refentrytitle><command>dselect</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY dselect \"<citerefentry>\n"
+#~ " <refentrytitle><command>dselect</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY aptitude \"<citerefentry>\n"
+#~ " <refentrytitle><command>aptitude</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY aptitude \"<citerefentry>\n"
+#~ " <refentrytitle><command>aptitude</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY synaptic \"<citerefentry>\n"
+#~ " <refentrytitle><command>synaptic</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY synaptic \"<citerefentry>\n"
+#~ " <refentrytitle><command>synaptic</command></refentrytitle>\n"
+#~ " <manvolnum>8</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY debsign \"<citerefentry>\n"
+#~ " <refentrytitle><command>debsign</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY debsign \"<citerefentry>\n"
+#~ " <refentrytitle><command>debsign</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY debsig-verify \"<citerefentry>\n"
+#~ " <refentrytitle><command>debsig-verify</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY debsig-verify \"<citerefentry>\n"
+#~ " <refentrytitle><command>debsig-verify</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY gpg \"<citerefentry>\n"
+#~ " <refentrytitle><command>gpg</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY gpg \"<citerefentry>\n"
+#~ " <refentrytitle><command>gpg</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY gnome-apt \"<citerefentry>\n"
+#~ " <refentrytitle><command>gnome-apt</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY gnome-apt \"<citerefentry>\n"
+#~ " <refentrytitle><command>gnome-apt</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!ENTITY wajig \"<citerefentry>\n"
+#~ " <refentrytitle><command>wajig</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+#~ msgstr ""
+#~ "<!ENTITY wajig \"<citerefentry>\n"
+#~ " <refentrytitle><command>wajig</command></refentrytitle>\n"
+#~ " <manvolnum>1</manvolnum>\n"
+#~ " </citerefentry>\"\n"
+#~ ">\n"
+
+#~ msgid ""
+#~ "<!-- Boiler plate docinfo section -->\n"
+#~ "<!ENTITY apt-docinfo \"\n"
+#~ " <refentryinfo>\n"
+#~ " <address><email>apt@packages.debian.org</email></address>\n"
+#~ " <author>\n"
+#~ " <firstname>Jason</firstname> <surname>Gunthorpe</surname>\n"
+#~ " <contrib></contrib>\n"
+#~ " </author>\n"
+#~ " <copyright><year>1998-2001</year> <holder>Jason Gunthorpe</holder></"
+#~ "copyright>\n"
+#~ " <date>28 October 2008</date>\n"
+#~ " <productname>Linux</productname>\n"
+#~ msgstr ""
+#~ "<!-- Sezione standard docinfo -->\n"
+#~ "<!ENTITY apt-docinfo \"\n"
+#~ " <refentryinfo>\n"
+#~ " <address><email>apt@packages.debian.org</email></address>\n"
+#~ " <author>\n"
+#~ " <firstname>Jason</firstname> <surname>Gunthorpe</surname>\n"
+#~ " <contrib></contrib>\n"
+#~ " </author>\n"
+#~ " <copyright><year>1998-2001</year> <holder>Jason Gunthorpe</holder></"
+#~ "copyright>\n"
+#~ " <date>28 ottobre 2008</date>\n"
+#~ " <productname>Linux</productname>\n"
+
+#~ msgid ""
+#~ " </refentryinfo>\n"
+#~ "\"> \n"
+#~ msgstr ""
+#~ " </refentryinfo>\n"
+#~ "\"> \n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-email \"\n"
+#~ " <address>\n"
+#~ " <email>apt@packages.debian.org</email>\n"
+#~ " </address>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-email \"\n"
+#~ " <address>\n"
+#~ " <email>apt@packages.debian.org</email>\n"
+#~ " </address>\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-author.jgunthorpe \"\n"
+#~ " <author>\n"
+#~ " <firstname>Jason</firstname>\n"
+#~ " <surname>Gunthorpe</surname>\n"
+#~ " <contrib></contrib>\n"
+#~ " </author>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-author.jgunthorpe \"\n"
+#~ " <author>\n"
+#~ " <firstname>Jason</firstname>\n"
+#~ " <surname>Gunthorpe</surname>\n"
+#~ " <contrib></contrib>\n"
+#~ " </author>\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-author.moconnor \"\n"
+#~ " <author>\n"
+#~ " <firstname>Mike</firstname>\n"
+#~ " <surname>O'Connor</surname>\n"
+#~ " <contrib></contrib>\n"
+#~ " </author>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-author.moconnor \"\n"
+#~ " <author>\n"
+#~ " <firstname>Mike</firstname>\n"
+#~ " <surname>O'Connor</surname>\n"
+#~ " <contrib></contrib>\n"
+#~ " </author>\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-product \"\n"
+#~ " <productname>Linux</productname>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-product \"\n"
+#~ " <productname>Linux</productname>\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ "<!ENTITY apt-copyright \"\n"
+#~ " <copyright>\n"
+#~ " <holder>Jason Gunthorpe</holder>\n"
+#~ " <year>1998-2001</year>\n"
+#~ " </copyright>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!ENTITY apt-copyright \"\n"
+#~ " <copyright>\n"
+#~ " <holder>Jason Gunthorpe</holder>\n"
+#~ " <year>1998-2001</year>\n"
+#~ " </copyright>\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ "<!-- Boiler plate Bug reporting section -->\n"
+#~ "<!ENTITY manbugs \"\n"
+#~ " <refsect1><title>Bugs</title>\n"
+#~ " <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</"
+#~ "ulink>. \n"
+#~ " If you wish to report a bug in APT, please see\n"
+#~ " <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+#~ " &reportbug; command.\n"
+#~ " </para>\n"
+#~ " </refsect1>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!-- Sezione standard segnalazione bachi -->\n"
+#~ "<!ENTITY manbugs \"\n"
+#~ " <refsect1><title>Bachi</title>\n"
+#~ " <para><ulink url='http://bugs.debian.org/src:apt'>Pagina dei bachi di "
+#~ "APT</ulink>. \n"
+#~ " Per segnalare un baco in APT, vedere\n"
+#~ " <filename>/usr/share/doc/debian/bug-reporting.txt</filename> o il\n"
+#~ " comando &reportbug;.\n"
+#~ " </para>\n"
+#~ " </refsect1>\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ " <varlistentry>\n"
+#~ " <term><option>-c</option></term>\n"
+#~ " <term><option>--config-file</option></term>\n"
+#~ " <listitem><para>Configuration File; Specify a configuration file to "
+#~ "use. \n"
+#~ " The program will read the default configuration file and then this \n"
+#~ " configuration file. See &apt-conf; for syntax information. \n"
+#~ " </para>\n"
+#~ " </listitem>\n"
+#~ " </varlistentry>\n"
+#~ msgstr ""
+#~ " <varlistentry>\n"
+#~ " <term><option>-c</option></term>\n"
+#~ " <term><option>--config-file</option></term>\n"
+#~ " <listitem><para>File di configurazione; Specifica un file di "
+#~ "configurazione da usare. \n"
+#~ " Il programma leggerà il file di configurazione predefinito e poi "
+#~ "questo \n"
+#~ " file di configurazione. Vedere &apt-conf; per informazioni sulla "
+#~ "sintassi. \n"
+#~ " </para>\n"
+#~ " </listitem>\n"
+#~ " </varlistentry>\n"
+
+#~ msgid ""
+#~ " <varlistentry><term><filename>&cachedir;/archives/partial/</"
+#~ "filename></term>\n"
+#~ " <listitem><para>Storage area for package files in transit.\n"
+#~ " Configuration Item: <literal>Dir::Cache::Archives</literal> "
+#~ "(implicit partial). </para></listitem>\n"
+#~ " </varlistentry>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ " <varlistentry><term><filename>&cachedir;/archives/partial/</"
+#~ "filename></term>\n"
+#~ " <listitem><para>Area di memorizzazione per i file dei pacchetti in "
+#~ "transito.\n"
+#~ " Voce di configurazione: <literal>Dir::Cache::Archives</literal> "
+#~ "(partial implicito). </para></listitem>\n"
+#~ " </varlistentry>\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ " <varlistentry><term><filename>&statedir;/lists/partial/</filename></"
+#~ "term>\n"
+#~ " <listitem><para>Storage area for state information in transit.\n"
+#~ " Configuration Item: <literal>Dir::State::Lists</literal> (implicit "
+#~ "partial).</para></listitem>\n"
+#~ " </varlistentry>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ " <varlistentry><term><filename>&statedir;/lists/partial/</filename></"
+#~ "term>\n"
+#~ " <listitem><para>Area di archiviazione per le informazioni di stato "
+#~ "in transito.\n"
+#~ " Voce di configurazione: <literal>Dir::State::Lists</literal> "
+#~ "(partial implicito).</para></listitem>\n"
+#~ " </varlistentry>\n"
+#~ "\">\n"
+
+#~ msgid "<!ENTITY translation-title \"TRANSLATION\">"
+#~ msgstr "<!ENTITY translation-title \"TRANSLATION\">"
+
+#~ msgid ""
+#~ "<!-- TRANSLATOR: This is a placeholder. You should write here who has "
+#~ "constributed\n"
+#~ " to the translation in the past, who is responsible now and maybe "
+#~ "further information\n"
+#~ " specially related to your translation. -->\n"
+#~ "<!ENTITY translation-holder \"\n"
+#~ " The english translation was done by John Doe <email>john@doe.org</"
+#~ "email> in 2009,\n"
+#~ " 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 "
+#~ "together with the\n"
+#~ " Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</"
+#~ "email>.\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!-- TRADUTTORE: questo è un segnaposto. Qui bisogna scrivere chi ha "
+#~ "contribuito\n"
+#~ " alla traduzione in passato, l'attuale responsabile e nel caso "
+#~ "ulteriori informazioni\n"
+#~ " riguardanti in modo particolare questa traduzione. -->\n"
+#~ "<!ENTITY translation-holder \"\n"
+#~ " La traduzione italiana è stata fatta da Eugenia Franzoni\n"
+#~ " <email>eugenia@linuxcare.com</email> nel 2000 e da Gabriele Stilli\n"
+#~ " <email>superenzima@libero.it</email> nel 2010 insieme a\n"
+#~ " chiunque vorrà unirsi (DA CORREGGERE ALLA FINE).\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ "<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/"
+#~ "fuzzy strings\n"
+#~ " in a shipped manpage will maybe appear english parts. -->\n"
+#~ "<!ENTITY translation-english \"\n"
+#~ " Note that this translated document may contain untranslated parts.\n"
+#~ " This is done on purpose, to avoid losing content when the\n"
+#~ " translation is lagging behind the original content.\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "<!-- TRADUTTORE: poiché una traduzione può avere il 20% di stringhe non "
+#~ "tradotte/fuzzy\n"
+#~ " in una manpage fornita è possibile che compaiano parti in inglese. --"
+#~ ">\n"
+#~ "<!ENTITY translation-english \"\n"
+#~ " Questo documento tradotto può contenere parti non tradotte.\n"
+#~ " Ciò è fatto di proposito, per evitare di perdere contenuti quando "
+#~ "la\n"
+#~ " traduzione è più vecchia del contenuto originale.\n"
+#~ "\">\n"
+
+#~ msgid ""
+#~ "&apt-author.jgunthorpe; &apt-author.team; &apt-email; &apt-product; "
+#~ "<date>29 February 2004</date>"
+#~ msgstr ""
+#~ "&apt-author.jgunthorpe; &apt-author.team; &apt-email; &apt-product; "
+#~ "<date>29 February 2004</date>"
+
+#~ msgid "APT package handling utility -- cache manipulator"
+#~ msgstr "APT strumento di gestione pacchetti -- manipolatore di cache"
+
+#~ msgid ""
+#~ "<command>apt-cache</command> <arg><option>-hvsn</option></arg> "
+#~ "<arg><option>-o=<replaceable>config string</replaceable></option></arg> "
+#~ "<arg><option>-c=<replaceable>file</replaceable></option></arg> <group "
+#~ "choice=\"req\"> <arg>add <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>file</replaceable></arg></arg> <arg>gencaches</arg> "
+#~ "<arg>showpkg <arg choice=\"plain\" rep=\"repeat\"><replaceable>pkg</"
+#~ "replaceable></arg></arg> <arg>showsrc <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>pkg</replaceable></arg></arg> <arg>stats</arg> <arg>dump</"
+#~ "arg> <arg>dumpavail</arg> <arg>unmet</arg> <arg>search <arg choice=\"plain"
+#~ "\"><replaceable>regex</replaceable></arg></arg> <arg>show <arg choice="
+#~ "\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> "
+#~ "<arg>depends <arg choice=\"plain\" rep=\"repeat\"><replaceable>pkg</"
+#~ "replaceable></arg></arg> <arg>rdepends <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>pkg</replaceable></arg></arg> <arg>pkgnames <arg choice="
+#~ "\"plain\"><replaceable>prefix</replaceable></arg></arg> <arg>dotty <arg "
+#~ "choice=\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></"
+#~ "arg> <arg>xvcg <arg choice=\"plain\" rep=\"repeat\"><replaceable>pkg</"
+#~ "replaceable></arg></arg> <arg>policy <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>pkgs</replaceable></arg></arg> <arg>madison <arg choice="
+#~ "\"plain\" rep=\"repeat\"><replaceable>pkgs</replaceable></arg></arg> </"
+#~ "group>"
+#~ msgstr ""
+#~ "<command>apt-cache</command> <arg><option>-hvsn</option></arg> "
+#~ "<arg><option>-o=<replaceable>stringa di configurazione</replaceable></"
+#~ "option></arg> <arg><option>-c=<replaceable>file</replaceable></option></"
+#~ "arg> <group choice=\"req\"> <arg>add <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>file</replaceable></arg></arg> <arg>gencaches</arg> "
+#~ "<arg>showpkg <arg choice=\"plain\" rep=\"repeat\"><replaceable>pacchetto</"
+#~ "replaceable></arg></arg> <arg>showsrc <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>pacchetto</replaceable></arg></arg> <arg>stats</arg> "
+#~ "<arg>dump</arg> <arg>dumpavail</arg> <arg>unmet</arg> <arg>search <arg "
+#~ "choice=\"plain\"><replaceable>regex</replaceable></arg></arg> <arg>show "
+#~ "<arg choice=\"plain\" rep=\"repeat\"><replaceable>pacchetto</"
+#~ "replaceable></arg></arg> <arg>depends <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>pacchetto</replaceable></arg></arg> <arg>rdepends <arg "
+#~ "choice=\"plain\" rep=\"repeat\"><replaceable>pacchetto</replaceable></"
+#~ "arg></arg> <arg>pkgnames <arg choice=\"plain\"><replaceable>prefisso</"
+#~ "replaceable></arg></arg> <arg>dotty <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>pacchetto</replaceable></arg></arg> <arg>xvcg <arg choice="
+#~ "\"plain\" rep=\"repeat\"><replaceable>pacchetto</replaceable></arg></arg> "
+#~ "<arg>policy <arg choice=\"plain\" rep=\"repeat\"><replaceable>pacchetti</"
+#~ "replaceable></arg></arg> <arg>madison <arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>pacchetti</replaceable></arg></arg> </group>"
+
+#~ msgid "add <replaceable>file(s)</replaceable>"
+#~ msgstr "add <replaceable>file</replaceable>"
+
+#~ msgid ""
+#~ "<literal>add</literal> adds the named package index files to the package "
+#~ "cache. This is for debugging only."
+#~ msgstr ""
+#~ "<literal>add</literal> aggiunge i file di indice dei pacchetti menzionati "
+#~ "alla cache dei pacchetti. Questo serve solo per fare il debug."
+
+#~ msgid "gencaches"
+#~ msgstr "gencaches"
+
+#~ msgid ""
+#~ "<literal>gencaches</literal> performs the same operation as <command>apt-"
+#~ "get check</command>. It builds the source and package caches from the "
+#~ "sources in &sources-list; and from <filename>/var/lib/dpkg/status</"
+#~ "filename>."
+#~ msgstr ""
+#~ "<literal>gencaches</literal> esegue la stessa operazione di <command>apt-"
+#~ "get check</command>. Costruisce le cache sorgenti e pacchetti dalle fonti "
+#~ "in &sources-list; e da <filename>/var/lib/dpkg/status</filename>."
+
+#~ msgid "showpkg <replaceable>pkg(s)</replaceable>"
+#~ msgstr "showpkg <replaceable>pacchetti</replaceable>"
+
+#~ msgid "stats"
+#~ msgstr "stats"
+
+#~ msgid ""
+#~ "<literal>Pure virtual packages</literal> is the number of packages that "
+#~ "exist only as a virtual package name; that is, packages only \"provide\" "
+#~ "the virtual package name, and no package actually uses the name. For "
+#~ "instance, \"mail-transport-agent\" in the Debian GNU/Linux system is a "
+#~ "pure virtual package; several packages provide \"mail-transport-agent\", "
+#~ "but there is no package named \"mail-transport-agent\"."
+#~ msgstr ""
+#~ "<literal>Pacchetti virtuali puri</literal> è il numero di pacchetti che "
+#~ "esistono solo come nome di pacchetto virtuale; vale a dire, i pacchetti "
+#~ "\"forniscono\" solo il nome del pacchetto virtuale e nessun pacchetto in "
+#~ "realtà usa quel nome. Per esempio, \"mail-transport-agent\" nel sistema "
+#~ "Debian GNU/Linux è un pacchetto virtuale puro; diversi pacchetti "
+#~ "forniscono \"mail-transport-agent\", ma non c'è alcun pacchetto chiamato "
+#~ "\"mail-transport-agent\"."
+
+#~ msgid ""
+#~ "<literal>Single virtual packages</literal> is the number of packages with "
+#~ "only one package providing a particular virtual package. For example, in "
+#~ "the Debian GNU/Linux system, \"X11-text-viewer\" is a virtual package, "
+#~ "but only one package, xless, provides \"X11-text-viewer\"."
+#~ msgstr ""
+#~ "<literal>Pacchetti virtuali singoli</literal> è il numero di pacchetti "
+#~ "per cui solo un pacchetto fornisce un particolare pacchetto virtuale. Per "
+#~ "esempio, nel sistema Debian GNU/Linux, \"X11-text-viewer\" è un pacchetto "
+#~ "virtuale, ma solo un pacchetto, xless, fornisce \"X11-text-viewer\"."
+
+#~ msgid ""
+#~ "<literal>Mixed virtual packages</literal> is the number of packages that "
+#~ "either provide a particular virtual package or have the virtual package "
+#~ "name as the package name. For instance, in the Debian GNU/Linux system, "
+#~ "\"debconf\" is both an actual package, and provided by the debconf-tiny "
+#~ "package."
+#~ msgstr ""
+#~ "<literal>Pacchetti virtuali misti</literal> è il numero di pacchetti che "
+#~ "forniscono un particolare pacchetto virtuale o che hanno il nome del "
+#~ "pacchetto virtuale come nome del pacchetto. Per esempio, nel sistema "
+#~ "Debian GNU/Linux , \"debconf\" è sia un pacchetto vero e proprio sia "
+#~ "fornito dal pacchetto debconf-tiny."
+
+#~ msgid ""
+#~ "<literal>Total distinct</literal> versions is the number of package "
+#~ "versions found in the cache; this value is therefore at least equal to "
+#~ "the number of total package names. If more than one distribution (both "
+#~ "\"stable\" and \"unstable\", for instance), is being accessed, this value "
+#~ "can be considerably larger than the number of total package names."
+#~ msgstr ""
+#~ "<literal>Totale versioni distinte</literal> è il numero di versioni di "
+#~ "pacchetti trovate nella cache; questo valore pertanto è almeno pari al "
+#~ "numero dei nomi totali di pacchetto. Se si ha accesso a più di una "
+#~ "distribuzione (ad esempio sia \"stable\" che \"unstable\"), questo valore "
+#~ "può essere decisamente più grande del numero dei nomi totali di pacchetti."
+
+#~ msgid "showsrc <replaceable>pkg(s)</replaceable>"
+#~ msgstr "showsrc <replaceable>pacchetti</replaceable>"
+
+#~ msgid ""
+#~ "<literal>showsrc</literal> displays all the source package records that "
+#~ "match the given package names. All versions are shown, as well as all "
+#~ "records that declare the name to be a Binary."
+#~ msgstr ""
+#~ "<literal>showsrc</literal> mostra tutti i pacchetti sorgente che "
+#~ "combaciano coi nomi dei pacchetti dati. Vengono mostrate tutte le "
+#~ "versioni, così come tutti i record che dichiarano che il nome è un "
+#~ "pacchetto binario."
+
+#~ msgid "dump"
+#~ msgstr "dump"
+
+#~ msgid "dumpavail"
+#~ msgstr "dumpavail"
+
+#~ msgid "unmet"
+#~ msgstr "unmet"
+
+#~ msgid "show <replaceable>pkg(s)</replaceable>"
+#~ msgstr "show <replaceable>pacchetti</replaceable>"
+
+#~ msgid "search <replaceable>regex [ regex ... ]</replaceable>"
+#~ msgstr "search <replaceable>regex [ regex ... ]</replaceable>"
+
+#~ msgid ""
+#~ "<literal>search</literal> performs a full text search on all available "
+#~ "package lists for the POSIX regex pattern given, see "
+#~ "<citerefentry><refentrytitle><command>regex</command></refentrytitle> "
+#~ "<manvolnum>7</manvolnum></citerefentry>. It searches the package names "
+#~ "and the descriptions for an occurrence of the regular expression and "
+#~ "prints out the package name and the short description, including virtual "
+#~ "package names. If <option>--full</option> is given then output identical "
+#~ "to <literal>show</literal> is produced for each matched package, and if "
+#~ "<option>--names-only</option> is given then the long description is not "
+#~ "searched, only the package name is."
+#~ msgstr ""
+#~ "<literal>search</literal> esegue una ricerca completa del testo su tutte "
+#~ "le liste di pacchetti disponibili cercando il modellp di regexp POSIX "
+#~ "fornito; vedere <citerefentry><refentrytitle><command>regex</command></"
+#~ "refentrytitle> <manvolnum>7</manvolnum></citerefentry>. Cerca le "
+#~ "occorrenze dell'expressione regolare nei nomi e nelle descrizioni dei "
+#~ "pacchetti e stampa il nome e la descrizione breve dei pacchetti, inclusi "
+#~ "quelli virtuali. Se viene fornita l'opzione <option>--full</option>, il "
+#~ "risultato è identico a <literal>show</literal> per ciascun pacchetto che "
+#~ "soddisfa la ricerca; se viene fornita l'opzione <option>--names-only</"
+#~ "option> la ricerca viene fatta solo sul nome del pacchetto e non sulla "
+#~ "descrizione lunga."
+
+#~ msgid "depends <replaceable>pkg(s)</replaceable>"
+#~ msgstr "depends <replaceable>pacchetti</replaceable>"
+
+#~ msgid "rdepends <replaceable>pkg(s)</replaceable>"
+#~ msgstr "rdepends <replaceable>pacchetti</replaceable>"
+
+#~ msgid "pkgnames <replaceable>[ prefix ]</replaceable>"
+#~ msgstr "pkgnames <replaceable>[ prefisso ]</replaceable>"
+
+#~ msgid "dotty <replaceable>pkg(s)</replaceable>"
+#~ msgstr "dotty <replaceable>pacchetti</replaceable>"
+
+#~ msgid ""
+#~ "The resulting nodes will have several shapes; normal packages are boxes, "
+#~ "pure provides are triangles, mixed provides are diamonds, missing "
+#~ "packages are hexagons. Orange boxes mean recursion was stopped [leaf "
+#~ "packages], blue lines are pre-depends, green lines are conflicts."
+#~ msgstr ""
+#~ "I nodi risultanti avranno diverse forme: i pacchetti normali sono "
+#~ "quadrati, quelli forniti puri sono triangoli, quelli forniti misti sono "
+#~ "rombi, i pacchetti mancanti sono esagoni. I quadrati arancioni indicano "
+#~ "che la ricorsione è stata arrestata [pacchetti foglia], le linee blu sono "
+#~ "pre-dipendenze, le linee verdi sono conflitti."
+
+#~ msgid "xvcg <replaceable>pkg(s)</replaceable>"
+#~ msgstr "xvcg <replaceable>pacchetti</replaceable>"
+
+#~ msgid "madison <replaceable>/[ pkg(s) ]</replaceable>"
+#~ msgstr "madison <replaceable>/[ pacchetti ]</replaceable>"
+
+#~ msgid "<option>-p</option>"
+#~ msgstr "<option>-p</option>"
+
+#~ msgid "<option>--pkg-cache</option>"
+#~ msgstr "<option>--pkg-cache</option>"
+
+#~ msgid "<option>-s</option>"
+#~ msgstr "<option>-s</option>"
+
+#~ msgid "<option>--src-cache</option>"
+#~ msgstr "<option>--src-cache</option>"
+
+#~ msgid "<option>-q</option>"
+#~ msgstr "<option>-q</option>"
+
+#~ msgid "<option>--quiet</option>"
+#~ msgstr "<option>--quiet</option>"
+
+#~ msgid "<option>-i</option>"
+#~ msgstr "<option>-i</option>"
+
+#~ msgid "<option>--important</option>"
+#~ msgstr "<option>--important</option>"
+
+#~ msgid ""
+#~ "Print only important dependencies; for use with unmet and depends. Causes "
+#~ "only Depends and Pre-Depends relations to be printed. Configuration "
+#~ "Item: <literal>APT::Cache::Important</literal>."
+#~ msgstr ""
+#~ "Stampa solo le dipendenze importanti; da usarsi con unmet e depends. Fa "
+#~ "sì che vengano stampate solo le relazioni di Depends e Pre-Depends. Voce "
+#~ "di configurazione: <literal>APT::Cache::Important</literal>."
+
+#~ msgid "<option>-f</option>"
+#~ msgstr "<option>-f</option>"
+
+#~ msgid "<option>--full</option>"
+#~ msgstr "<option>--full</option>"
+
+#~ msgid "<option>-a</option>"
+#~ msgstr "<option>-a</option>"
+
+#~ msgid "<option>--all-versions</option>"
+#~ msgstr "<option>--all-versions</option>"
+
+#~ msgid ""
+#~ "Print full records for all available versions. This is the default; to "
+#~ "turn it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+#~ "versions</option> is specified, only the candidate version will displayed "
+#~ "(the one which would be selected for installation). This option is only "
+#~ "applicable to the <literal>show</literal> command. Configuration Item: "
+#~ "<literal>APT::Cache::AllVersions</literal>."
+#~ msgstr ""
+#~ "Stampa i record completi per tutte le versioni disponibili. Questa è "
+#~ "l'impostazione predefinita; per disattivarla, usare <option>--no-all-"
+#~ "versions</option>. Se si specifica <option>--no-all-versions</option>, "
+#~ "verrà visualizzata solo la versione candidata (quella che sarebbe scelta "
+#~ "per l'installazione). Questa opzione è applicabile solo al comando "
+#~ "<literal>show</literal>. Voce di configurazione: <literal>APT::Cache::"
+#~ "AllVersions</literal>."
+
+#~ msgid "<option>-g</option>"
+#~ msgstr "<option>-g</option>"
+
+#~ msgid "<option>--generate</option>"
+#~ msgstr "<option>--generate</option>"
+
+#~ msgid "<option>--names-only</option>"
+#~ msgstr "<option>--names-only</option>"
+
+#~ msgid "<option>-n</option>"
+#~ msgstr "<option>-n</option>"
+
+#~ msgid "<option>--all-names</option>"
+#~ msgstr "<option>--all-names</option>"
+
+#~ msgid "<option>--recurse</option>"
+#~ msgstr "<option>--recurse</option>"
+
+#~ msgid "<option>--installed</option>"
+#~ msgstr "<option>--installed</option>"
+
+#~ msgid "&apt-commonoptions;"
+#~ msgstr "&apt-commonoptions;"
+
+#~ msgid "&file-sourceslist; &file-statelists;"
+#~ msgstr "&file-sourceslist; &file-statelists;"
+
+#~ msgid ""
+#~ "&apt-author.jgunthorpe; &apt-author.team; &apt-email; &apt-product; "
+#~ "<date>14 February 2004</date>"
+#~ msgstr ""
+#~ "&apt-author.jgunthorpe; &apt-author.team; &apt-email; &apt-product; "
+#~ "<date>14 febbraio 2004</date>"
+
+#~ msgid "apt-cdrom"
+#~ msgstr "apt-cdrom"
+
+#~ msgid "APT CDROM management utility"
+#~ msgstr "Strumento di APT per la gestione dei CDROM"
+
+#~ msgid ""
+#~ "<command>apt-cdrom</command> <arg><option>-hvrmfan</option></arg> "
+#~ "<arg><option>-d=<replaceable>cdrom mount point</replaceable></option></"
+#~ "arg> <arg><option>-o=<replaceable>config string</replaceable></option></"
+#~ "arg> <arg><option>-c=<replaceable>file</replaceable></option></arg> "
+#~ "<group> <arg>add</arg> <arg>ident</arg> </group>"
+#~ msgstr ""
+#~ "<command>apt-cdrom</command> <arg><option>-hvrmfan</option></arg> "
+#~ "<arg><option>-d=<replaceable>punto di mount del cdrom</replaceable></"
+#~ "option></arg> <arg><option>-o=<replaceable>stringa di configurazione</"
+#~ "replaceable></option></arg> <arg><option>-c=<replaceable>file</"
+#~ "replaceable></option></arg> <group> <arg>add</arg> <arg>ident</arg> </"
+#~ "group>"
+
+#~ msgid ""
+#~ "<command>apt-cdrom</command> is used to add a new CDROM to APTs list of "
+#~ "available sources. <command>apt-cdrom</command> takes care of determining "
+#~ "the structure of the disc as well as correcting for several possible mis-"
+#~ "burns and verifying the index files."
+#~ msgstr ""
+#~ "<command>apt-cdrom</command> è usato per aggiungere un nuovo CDROM alla "
+#~ "lista di sorgenti disponibili di APT. <command>apt-cdrom</command> si "
+#~ "prende cura di determinare la struttura del disco e anche di correggere "
+#~ "possibili errori di masterizzazione e verificare i file indice."
+
+#~ msgid ""
+#~ "It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+#~ "system, it cannot be done by hand. Furthermore each disk in a multi-cd "
+#~ "set must be inserted and scanned separately to account for possible mis-"
+#~ "burns."
+#~ msgstr ""
+#~ "Per aggiungere CD al sistema APT è necessario usare <command>apt-cdrom</"
+#~ "command>, in quanto ciò non può essere fatto manualmente. Inoltre ogni "
+#~ "disco in un insieme di più CD deve essere inserito e scansionato "
+#~ "separatamente per tenere conto di possibili errori di masterizzazione."
+
+#~ msgid "add"
+#~ msgstr "add"
+
+#~ msgid ""
+#~ "<literal>add</literal> is used to add a new disc to the source list. It "
+#~ "will unmount the CDROM device, prompt for a disk to be inserted and then "
+#~ "proceed to scan it and copy the index files. If the disc does not have a "
+#~ "proper <filename>disk</filename> directory you will be prompted for a "
+#~ "descriptive title."
+#~ msgstr ""
+#~ "<literal>add</literal> è usato per aggiungere un nuovo CDROM alla lista "
+#~ "delle sorgenti. Smonterà il device del CDROM, chiederà di inserire un "
+#~ "disco e poi procederà alla scansione del cdrom e copierà i file indice. "
+#~ "Se il disco non ha una directory <filename>.disk/</filename> corretta "
+#~ "verrà chiesto un titolo descrittivo."
+
+#~ msgid ""
+#~ "APT uses a CDROM ID to track which disc is currently in the drive and "
+#~ "maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+#~ "filename>"
+#~ msgstr ""
+#~ "APT usa un identificatore del CDROM per tenere traccia di quale disco è "
+#~ "attualmente nel lettore e mantiene un database di questi identificativi "
+#~ "nel file <filename>&statedir;/cdroms.list</filename>."
+
+#~ msgid "ident"
+#~ msgstr "ident"
+
+#~ msgid ""
+#~ "Unless the <option>-h</option>, or <option>--help</option> option is "
+#~ "given one of the commands below must be present. <placeholder type="
+#~ "\"variablelist\" id=\"0\"/>"
+#~ msgstr ""
+#~ "A meno che non venga fornita l'opzione <option>-h</option> o <option>--"
+#~ "help</option>, deve essere presente uno dei comandi seguenti. "
+#~ "<placeholder type=\"variablelist\" id=\"0\"/>"
+
+#~ msgid "<option>-d</option>"
+#~ msgstr "<option>-d</option>"
+
+#~ msgid "<option>--cdrom</option>"
+#~ msgstr "<option>--cdrom</option>"
+
+#~ msgid ""
+#~ "Mount point; specify the location to mount the cdrom. This mount point "
+#~ "must be listed in <filename>/etc/fstab</filename> and properly "
+#~ "configured. Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+#~ msgstr ""
+#~ "Punto di mount; specifica la posizione in cui montare il CDROM. Questo "
+#~ "punto di mount deve essere elencato nel file <filename>/etc/fstab</"
+#~ "filename> e configurato correttamente. Voce di configurazione: "
+#~ "<literal>Acquire::cdrom::mount</literal>."
+
+#~ msgid "<option>-r</option>"
+#~ msgstr "<option>-r</option>"
+
+#~ msgid "<option>--rename</option>"
+#~ msgstr "<option>--rename</option>"
+
+#~ msgid ""
+#~ "Rename a disc; change the label of a disk or override the disks given "
+#~ "label. This option will cause <command>apt-cdrom</command> to prompt for "
+#~ "a new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+#~ msgstr ""
+#~ "Rinomina un disco; cambia l'etichetta di un disco o soppianta l'etichetta "
+#~ "originale del disco. Questa opzione farà sì che <command>apt-cdrom</"
+#~ "command> chieda una nuova etichetta. Voce di configurazione: "
+#~ "<literal>APT::CDROM::Rename</literal>."
+
+#~ msgid "<option>-m</option>"
+#~ msgstr "<option>-m</option>"
+
+#~ msgid "<option>--no-mount</option>"
+#~ msgstr "<option>--no-mount</option>"
+
+#~ msgid "<option>--fast</option>"
+#~ msgstr "<option>--fast</option>"
+
+#~ msgid "<option>--thorough</option>"
+#~ msgstr "<option>--thorough</option>"
+
+#~ msgid "<option>--just-print</option>"
+#~ msgstr "<option>--just-print</option>"
+
+#~ msgid "<option>--recon</option>"
+#~ msgstr "<option>--recon</option>"
+
+#~ msgid "<option>--no-act</option>"
+#~ msgstr "<option>--no-act</option>"
+
+#~ msgid "apt-config"
+#~ msgstr "apt-config"
+
+#~ msgid ""
+#~ "<command>apt-config</command> <arg><option>-hv</option></arg> "
+#~ "<arg><option>-o=<replaceable>config string</replaceable></option></arg> "
+#~ "<arg><option>-c=<replaceable>file</replaceable></option></arg> <group "
+#~ "choice=\"req\"> <arg>shell</arg> <arg>dump</arg> </group>"
+#~ msgstr ""
+#~ "<command>apt-config</command> <arg><option>-hv</option></arg> "
+#~ "<arg><option>-o=<replaceable>stringa di configurazione</replaceable></"
+#~ "option></arg> <arg><option>-c=<replaceable>file</replaceable></option></"
+#~ "arg> <group choice=\"req\"> <arg>shell</arg> <arg>dump</arg> </group>"
+
+#~ msgid ""
+#~ "<command>apt-config</command> is an internal program used by various "
+#~ "portions of the APT suite to provide consistent configurability. It "
+#~ "accesses the main configuration file <filename>/etc/apt/apt.conf</"
+#~ "filename> in a manner that is easy to use by scripted applications."
+#~ msgstr ""
+#~ "<command>apt-config</command> è un programma interno usato da varie parti "
+#~ "della suite APT per fornire una configurabiità coerente. Accede al file "
+#~ "principale di configurazione <filename>/etc/apt/apt.conf</filename> in "
+#~ "modo facile da usare da parte di applicazioni che girano sotto forma di "
+#~ "script."
+
+#~ msgid ""
+#~ "Unless the <option>-h</option>, or <option>--help</option> option is "
+#~ "given one of the commands below must be present."
+#~ msgstr ""
+#~ "A meno che non venga fornita l'opzione <option>-h</option> o <option>--"
+#~ "help</option>, deve essere presente uno dei comandi seguenti."
+
+#~ msgid "shell"
+#~ msgstr "shell"
+
+#~ msgid ""
+#~ "shell is used to access the configuration information from a shell "
+#~ "script. It is given pairs of arguments, the first being a shell variable "
+#~ "and the second the configuration value to query. As output it lists a "
+#~ "series of shell assignments commands for each present value. In a shell "
+#~ "script it should be used like:"
+#~ msgstr ""
+#~ "shell viene usato per accedere alle informazioni di configurazione da "
+#~ "parte di uno script di shell. Riceve coppie di argomenti, il primo dei "
+#~ "quali è una variabile di shell e il secondo è il valore di configurazione "
+#~ "da interrogare. Come risultato elenca una serie di comandi di "
+#~ "assegnazione di shell per ciascun valore presente. In uno script di shell "
+#~ "dovrebbe essere usato in modo simile a:"
+
+#~ msgid "apt-extracttemplates"
+#~ msgstr "apt-extracttemplates"
+
+#~ msgid "Utility to extract DebConf config and templates from Debian packages"
+#~ msgstr ""
+#~ "Utilità per estrarre configurazioni e modelli DebConf dai pacchetti Debian"
+
+#~ msgid ""
+#~ "<command>apt-extracttemplates</command> <arg><option>-hv</option></arg> "
+#~ "<arg><option>-t=<replaceable>temporary directory</replaceable></option></"
+#~ "arg> <arg choice=\"plain\" rep=\"repeat\"><replaceable>file</"
+#~ "replaceable></arg>"
+#~ msgstr ""
+#~ "<command>apt-extracttemplates</command> <arg><option>-hv</option></arg> "
+#~ "<arg><option>-t=<replaceable>directory temporanea</replaceable></option></"
+#~ "arg> <arg choice=\"plain\" rep=\"repeat\"><replaceable>file</"
+#~ "replaceable></arg>"
+
+#~ msgid ""
+#~ "template-file and config-script are written to the temporary directory "
+#~ "specified by the -t or --tempdir (<literal>APT::ExtractTemplates::"
+#~ "TempDir</literal>) directory, with filenames of the form "
+#~ "<filename>package.template.XXXX</filename> and <filename>package.config."
+#~ "XXXX</filename>"
+#~ msgstr ""
+#~ "file-template e script-di-configurazione sono scritti nella directory "
+#~ "temporanea specificata da -t o --tempdir (<literal>APT::ExtractTemplates::"
+#~ "TempDir</literal>) directory, con i nomi dei file nella forma "
+#~ "<filename>pacchetto.template.XXXX</filename> e <filename>pacchetto.config."
+#~ "XXXX</filename>"
+
+#~ msgid "<option>-t</option>"
+#~ msgstr "<option>-t</option>"
+
+#~ msgid "<option>--tempdir</option>"
+#~ msgstr "<option>--tempdir</option>"
+
+#~ msgid ""
+#~ "Temporary directory in which to write extracted debconf template files "
+#~ "and config scripts. Configuration Item: <literal>APT::ExtractTemplates::"
+#~ "TempDir</literal>"
+#~ msgstr ""
+#~ "Directory temporanea dove scrivere i file template di debconf e gli "
+#~ "script di configurazione estratti. Voce di configurazione: <literal>APT::"
+#~ "ExtractTemplates::TempDir</literal>."
+
+#~ msgid ""
+#~ "&apt-author.jgunthorpe; &apt-author.team; &apt-email; &apt-product; "
+#~ "<date>17 August 2009</date>"
+#~ msgstr ""
+#~ "&apt-author.jgunthorpe; &apt-author.team; &apt-email; &apt-product; "
+#~ "<date>17 agosto 2009</date>"
+
+#~ msgid "apt-ftparchive"
+#~ msgstr "apt-ftparchive"
+
+#~ msgid ""
+#~ "<command>apt-ftparchive</command> <arg><option>-hvdsq</option></arg> "
+#~ "<arg><option>--md5</option></arg> <arg><option>--delink</option></arg> "
+#~ "<arg><option>--readonly</option></arg> <arg><option>--contents</option></"
+#~ "arg> <arg><option>--arch <replaceable>architecture</replaceable></"
+#~ "option></arg> <arg><option>-o <replaceable>config</"
+#~ "replaceable>=<replaceable>string</replaceable></option></arg> "
+#~ "<arg><option>-c=<replaceable>file</replaceable></option></arg> <group "
+#~ "choice=\"req\"> <arg>packages<arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>path</replaceable></arg><arg><replaceable>override</"
+#~ "replaceable><arg><replaceable>pathprefix</replaceable></arg></arg></arg> "
+#~ "<arg>sources<arg choice=\"plain\" rep=\"repeat\"><replaceable>path</"
+#~ "replaceable></arg><arg><replaceable>override</"
+#~ "replaceable><arg><replaceable>pathprefix</replaceable></arg></arg></arg> "
+#~ "<arg>contents <arg choice=\"plain\"><replaceable>path</replaceable></"
+#~ "arg></arg> <arg>release <arg choice=\"plain\"><replaceable>path</"
+#~ "replaceable></arg></arg> <arg>generate <arg choice=\"plain"
+#~ "\"><replaceable>config-file</replaceable></arg> <arg choice=\"plain\" rep="
+#~ "\"repeat\"><replaceable>section</replaceable></arg></arg> <arg>clean <arg "
+#~ "choice=\"plain\"><replaceable>config-file</replaceable></arg></arg> </"
+#~ "group>"
+#~ msgstr ""
+#~ "<command>apt-ftparchive</command> <arg><option>-hvdsq</option></arg> "
+#~ "<arg><option>--md5</option></arg> <arg><option>--delink</option></arg> "
+#~ "<arg><option>--readonly</option></arg> <arg><option>--contents</option></"
+#~ "arg> <arg><option>--arch <replaceable>architettura</replaceable></"
+#~ "option></arg> <arg><option>-o <replaceable>configurazione</"
+#~ "replaceable>=<replaceable>stringa</replaceable></option></arg> "
+#~ "<arg><option>-c=<replaceable>file</replaceable></option></arg> <group "
+#~ "choice=\"req\"> <arg>packages<arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>percorso</replaceable></arg><arg><replaceable>override</"
+#~ "replaceable><arg><replaceable>prefisso del percorso</replaceable></arg></"
+#~ "arg></arg> <arg>sources<arg choice=\"plain\" rep=\"repeat"
+#~ "\"><replaceable>percorso</replaceable></arg><arg><replaceable>override</"
+#~ "replaceable><arg><replaceable>prefisso del percorso</replaceable></arg></"
+#~ "arg></arg> <arg>contents <arg choice=\"plain\"><replaceable>percorso</"
+#~ "replaceable></arg></arg> <arg>release <arg choice=\"plain"
+#~ "\"><replaceable>percorso</replaceable></arg></arg> <arg>generate <arg "
+#~ "choice=\"plain\"><replaceable>file-di-configurazione</replaceable></arg> "
+#~ "<arg choice=\"plain\" rep=\"repeat\"><replaceable>sezione</replaceable></"
+#~ "arg></arg> <arg>clean <arg choice=\"plain\"><replaceable>file-di-"
+#~ "configurazione</replaceable></arg></arg> </group>"
+
+#~ msgid "packages"
+#~ msgstr "packages"
+
+#~ msgid "sources"
+#~ msgstr "sources"
+
+#~ msgid "contents"
+#~ msgstr "contents"
+
+#~ msgid "release"
+#~ msgstr "release"
+
+#~ msgid ""
+#~ "The <literal>release</literal> command generates a Release file from a "
+#~ "directory tree. It recursively searches the given directory for Packages, "
+#~ "Packages.gz, Packages.bz2, Sources, Sources.gz, Sources.bz2, Release and "
+#~ "md5sum.txt files. It then writes to stdout a Release file containing an "
+#~ "MD5 digest and SHA1 digest for each file."
+#~ msgstr ""
+#~ "Il comando <literal>release</literal> genera un file Release da un albero "
+#~ "di directory. Cerca ricorivamente file Packages, Packages.gz, Packages."
+#~ "bz2, Sources, Sources.gz, Sources.bz2, Release e md5sum.txt nella "
+#~ "directory data. Quindi scrive su stdout un file Release che contiene un "
+#~ "digest MD5 e SHA1 per ciascun file."
+
+#~ msgid ""
+#~ "Values for the additional metadata fields in the Release file are taken "
+#~ "from the corresponding variables under <literal>APT::FTPArchive::Release</"
+#~ "literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+#~ "supported fields are: <literal>Origin</literal>, <literal>Label</"
+#~ "literal>, <literal>Suite</literal>, <literal>Version</literal>, "
+#~ "<literal>Codename</literal>, <literal>Date</literal>, "
+#~ "<literal>Architectures</literal>, <literal>Components</literal>, "
+#~ "<literal>Description</literal>."
+#~ msgstr ""
+#~ "I valori dei campi di metadati aggiuntivi nel file Release sono presi "
+#~ "dalle variabili corrispondenti sotto <literal>APT::FTPArchive::Release</"
+#~ "literal>, ad esempio <literal>APT::FTPArchive::Release::Origin</"
+#~ "literal>. I campi supportati sono: <literal>Origin</literal>, "
+#~ "<literal>Label</literal>, <literal>Suite</literal>, <literal>Version</"
+#~ "literal>, <literal>Codename</literal>, <literal>Date</literal>, "
+#~ "<literal>Architectures</literal>, <literal>Components</literal>, "
+#~ "<literal>Description</literal>."
+
+#~ msgid "generate"
+#~ msgstr "generate"
+
+#~ msgid "clean"
+#~ msgstr "clean"
+
+#~ msgid ""
+#~ "The generate configuration has 4 separate sections, each described below."
+#~ msgstr ""
+#~ "La configurazione di generate ha 4 sezioni separate, ciascuna delle quali "
+#~ "è descritta sotto."
+
+#~ msgid "Dir Section"
+#~ msgstr "Sezione Dir"
+
+#~ msgid "ArchiveDir"
+#~ msgstr "ArchiveDir"
+
+#~ msgid "OverrideDir"
+#~ msgstr "OverrideDir"
+
+#~ msgid "CacheDir"
+#~ msgstr "CacheDir"
+
+#~ msgid "Specifies the location of the cache files"
+#~ msgstr "Specifica la posizione dei file cache."
+
+#~ msgid "FileListDir"
+#~ msgstr "FileListDir"
+
+#~ msgid "Default Section"
+#~ msgstr "Sezione Default"
+
+#~ msgid "Packages::Compress"
+#~ msgstr "Packages::Compress"
+
+#~ msgid ""
+#~ "Sets the default compression schemes to use for the Package index files. "
+#~ "It is a string that contains a space separated list of at least one of: "
+#~ "'.' (no compression), 'gzip' and 'bzip2'. The default for all compression "
+#~ "schemes is '. gzip'."
+#~ msgstr ""
+#~ "Imposta gli schemi di compressione predefiniti da usare per i file indice "
+#~ "dei pacchetti. È una stringa che contiene una lista separata da spazi "
+#~ "contenente almeno uno fra \".\" (nessuna compressione), \"gzip\" e "
+#~ "\"bzip2\". Il valore predefinito per tutti gli schemi di compressione è "
+#~ "\"gzip\"."
+
+#~ msgid "Packages::Extensions"
+#~ msgstr "Packages::Extensions"
+
+#~ msgid "Sources::Compress"
+#~ msgstr "Sources::Compress"
+
+#~ msgid "Sources::Extensions"
+#~ msgstr "Sources::Extensions"
+
+#~ msgid "Contents::Compress"
+#~ msgstr "Contents::Compress"
+
+#~ msgid "DeLinkLimit"
+#~ msgstr "DeLinkLimit"
+
+#~ msgid "FileMode"
+#~ msgstr "FileMode"
+
+#~ msgid "TreeDefault Section"
+#~ msgstr "Sezione TreeDefault"
+
+#~ msgid "MaxContentsChange"
+#~ msgstr "MaxContentsChange"
+
+#~ msgid "ContentsAge"
+#~ msgstr "ContentsAge"
+
+#~ msgid "Directory"
+#~ msgstr "Directory"
+
+#~ msgid "SrcDirectory"
+#~ msgstr "SrcDirectory"
+
+#~ msgid "Packages"
+#~ msgstr "Packages"
+
+#~ msgid "Sources"
+#~ msgstr "Sources"
+
+#~ msgid "InternalPrefix"
+#~ msgstr "InternalPrefix"
+
+#~ msgid "Contents"
+#~ msgstr "Contents"
+
+#~ msgid ""
+#~ "Sets the output Contents file. Defaults to <filename>$(DIST)/Contents-"
+#~ "$(ARCH)</filename>. If this setting causes multiple Packages files to map "
+#~ "onto a single Contents file (such as the default) then <command>apt-"
+#~ "ftparchive</command> will integrate those package files together "
+#~ "automatically."
+#~ msgstr ""
+#~ "Imposta il file Contents di uscita. Il valore predefinito è <filename>"
+#~ "$(DIST)/Contents-$(ARCH)</filename>. Se questa impostazione fa sì che più "
+#~ "file Packages corrispondano a un solo file Contents (come con il valore "
+#~ "predefinito) allora <command>apt-ftparchive</command> unirà "
+#~ "automaticamente insieme questi file dei pacchetti."
+
+#~ msgid "Contents::Header"
+#~ msgstr "Contents::Header"
+
+#~ msgid "BinCacheDB"
+#~ msgstr "BinCacheDB"
+
+#~ msgid "FileList"
+#~ msgstr "FileList"
+
+#~ msgid "SourceFileList"
+#~ msgstr "SourceFileList"
+
+#~ msgid "Tree Section"
+#~ msgstr "Sezione Tree"
+
+#~ msgid ""
+#~ "The <literal>Tree</literal> section takes a scope tag which sets the "
+#~ "<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+#~ "path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+#~ "setting such as <filename>dists/woody</filename>."
+#~ msgstr ""
+#~ "La sezione <literal>Tree</literal> prende un tag di ambito che imposta la "
+#~ "variabile <literal>$(DIST)</literal> e definisce la radice dell'albero "
+#~ "(il percorso viene prefissato da <literal>ArchiveDir</literal>). Di "
+#~ "solito è un'impostazione simile a <filename>dists/woody</filename>."
+
+#~ msgid ""
+#~ "All of the settings defined in the <literal>TreeDefault</literal> section "
+#~ "can be use in a <literal>Tree</literal> section as well as three new "
+#~ "variables."
+#~ msgstr ""
+#~ "Tutte le impostazioni definite nella sezione <literal>TreeDefault</"
+#~ "literal> possono essere usate in una sezione <literal>Tree</literal>, "
+#~ "oltre a tre nuove variabili."
+
+#~ msgid "Sections"
+#~ msgstr "Sezioni"
+
+#~ msgid ""
+#~ "This is a space separated list of sections which appear under the "
+#~ "distribution, typically this is something like <literal>main contrib non-"
+#~ "free</literal>"
+#~ msgstr ""
+#~ "Questa è una lista di sezioni che appaiono sotto la distribuzione, "
+#~ "separate da spazi; tipicamente è simile a <literal>main contrib non-free</"
+#~ "literal>."
+
+#~ msgid "Architectures"
+#~ msgstr "Architetture"
+
+#~ msgid "BinOverride"
+#~ msgstr "BinOverride"
+
+#~ msgid "SrcOverride"
+#~ msgstr "SrcOverride"
+
+#~ msgid "ExtraOverride"
+#~ msgstr "ExtraOverride"
+
+#~ msgid "SrcExtraOverride"
+#~ msgstr "SrcExtraOverride"
+
+#~ msgid "BinDirectory Section"
+#~ msgstr "Sezione BinDirectory"
+
+#~ msgid "Sets the Contents file output. (optional)"
+#~ msgstr "Imposta il file Contents di uscita (facoltativo)."
+
+#~ msgid "PathPrefix"
+#~ msgstr "PathPrefix"
+
+#~ msgid "FileList, SourceFileList"
+#~ msgstr "FileList, SourceFileList"
+
+#~ msgid ""
+#~ "The binary override file is fully compatible with &dpkg-scanpackages;. It "
+#~ "contains 4 fields separated by spaces. The first field is the package "
+#~ "name, the second is the priority to force that package to, the third is "
+#~ "the section to force that package to and the final field is the "
+#~ "maintainer permutation field."
+#~ msgstr ""
+#~ "Il file override binario è completamente compatibile con &dpkg-"
+#~ "scanpackages;. Contiene 4 campi separati da spazi. Il primo campo è il "
+#~ "nome del pacchetto, il secondo è la priorità a cui forzare quel "
+#~ "pacchetto, il terzo è la sezione in cui forzare quel pacchetto e l'ultimo "
+#~ "campo è il campo di permutazione del manutentore."
+
+#, fuzzy
+#~ msgid "update"
+#~ msgstr "upgrade"
+
+#, fuzzy
+#~ msgid "dselect-upgrade"
+#~ msgstr "dist-upgrade"
+
+#, fuzzy
+#~ msgid "apt-key"
+#~ msgstr "apt-get"
+
+#, fuzzy
+#~ msgid ""
+#~ "For more details, on Debian GNU/Linux systems, see the file /usr/share/"
+#~ "common-licenses/GPL for the full license."
+#~ msgstr ""
+#~ "Per ulteriori dettagli sui sistemi GNU/Linux si veda il testo completo "
+#~ "della licenza nel file /usr/share/common-licenses/GPL."
+
+#, fuzzy
+#~ msgid ""
+#~ "To enable the APT method you need to select [A]ccess in <command>dselect</"
+#~ "command> and then choose the APT method. You will be prompted for a set "
+#~ "of <emphasis>Sources</emphasis> which are places to fetch archives from. "
+#~ "These can be remote Internet sites, local Debian mirrors or CDROMs. Each "
+#~ "source can provide a fragment of the total Debian archive, APT will "
+#~ "automatically combine them to form a complete set of packages. If you "
+#~ "have a CDROM then it is a good idea to specify it first and then specify "
+#~ "a mirror so that you have access to the latest bug fixes. APT will "
+#~ "automatically use packages on your CDROM before downloading from the "
+#~ "Internet."
+#~ msgstr ""
+#~ "Per abilitare il metodo APT dovete selezionare [A]ccess in "
+#~ "<command>dselect</command> e scegliere il metodo APT; vi verrà chiesto un "
+#~ "insieme di fonti (<emphasis>Sources</emphasis>), cioè di posti da cui "
+#~ "scaricare gli archivi. Tali fonti possono essere siti Internet remoti, "
+#~ "mirror locali di Debian o CDROM; ciascuna di esse può fornire una parte "
+#~ "dell'archivio Debian, ed APT le combinerà insieme in un set completo di "
+#~ "pacchetti. Se avete un CDROM è una buona idea indicare quello per primo, "
+#~ "e poi i mirror, in modo da avere accesso alle ultime versioni; APT userà "
+#~ "in questo modo automaticamente i pacchetti sul CDROM prima di scaricarli "
+#~ "da Internet."
diff --git a/doc/po/ja.po b/doc/po/ja.po
new file mode 100644
index 0000000..b83f9d9
--- /dev/null
+++ b/doc/po/ja.po
@@ -0,0 +1,12001 @@
+# Translation of apt package man pages
+# Copyright (C) 2003-2017 Debian Japanese List <debian-japanese@lists.debian.org>
+# This file is distributed under the same license as the apt package.
+#
+# Translators:
+# KURASAWA Nozomu, 2003-2006, 2009-2012.
+# Takuma Yamada <tyamada@takumayamada.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.4\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-02-04 15:34+0100\n"
+"PO-Revision-Date: 2017-01-06 04:50+0900\n"
+"Last-Translator: Takuma Yamada <tyamada@takumayamada.com>\n"
+"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT チーム</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA ページ</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>バグ</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT バグページ</ulink> をご覧ください。 \n"
+" APT のバグを報告する場合は、\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> や\n"
+" &reportbug; コマンドをご覧ください。\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>著者</title>\n"
+" <para>APT は APT チーム <email>apt@packages.debian.org</email> によって書かれました。\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>使い方の短い要約を表示します。\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>プログラムのバージョンを表示します。\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>設定ファイル。 使用する設定ファイルを指定します。\n"
+" このプログラムは、デフォルト設定ファイルを読んでから、この設定ファイルを読みます。\n"
+" この設定をデフォルト設定ファイルよりも前に読む必要がある場合、\n"
+" <envar>APT_CONFIG</envar> 環境変数に指定してください。構文については &apt-conf; をご覧ください。\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>設定オプションのセット。任意の設定オプションをセットします。\n"
+" 構文 <option>-o Foo::Bar=bar</option> となります。\n"
+" 異なるオプションを設定するため、<option>-o</option> と <option>--option</option> は、\n"
+" 複数回使用できます。\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>ここで設定オプションとして説明したコマンドラインオプションは、\n"
+" すべて設定ファイルを使用して設定できます。\n"
+" 設定ファイルに書いた真偽値をとるオプションは\n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" などのようにして上書きできます。\n"
+" </para>\n"
+"\">\n"
+"\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT 設定ファイル。\n"
+" 設定項目: <literal>Dir::Etc::Main</literal></para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT 設定ファイル断片。\n"
+" 設定項目: <literal>Dir::Etc::Parts</literal></para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>取得済みパッケージファイル格納エリア。\n"
+" 設定項目: <literal>Dir::Cache::Archives</literal></para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>取得中パッケージファイル格納エリア。\n"
+" 設定項目: <literal>Dir::Cache::Archives</literal> (暗黙で <filename>partial</filename> を追加)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>バージョンプリファレンスファイル。\n"
+" ここに &quot;pin&quot;の設定を行います。\n"
+" つまり、別々の取得元や異なるディストリビューションのバージョンの、\n"
+" どこからパッケージを取得するかを設定します。\n"
+" 設定項目: <literal>Dir::Etc::Preferences</literal></para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>バージョンプリファレンスファイル断片。\n"
+" 設定項目: <literal>Dir::Etc::PreferencesParts</literal></para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>パッケージ取得元の場所。\n"
+" 設定項目: <literal>Dir::Etc::SourceList</literal></para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>パッケージ取得元の場所のファイル断片\n"
+" 設定項目: <literal>Dir::Etc::SourceParts</literal></para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>&sources-list; に指定した、パッケージリソースごとの状態情報格納エリア。\n"
+" 設定項目: <literal>Dir::State::Lists</literal></para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>取得中状態情報格納エリア。\n"
+" 設定項目: <literal>Dir::State::Lists</literal> (暗黙で <filename>partial</filename> を追加)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>ローカルで信頼済みキーのキーリング、新規キーはここに追加します。\n"
+" 設定項目: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>信頼済みキーのファイル断片、追加キーリングは (他のパッケージや管理者により) ここに格納します。\n"
+" 設定項目: <literal>Dir::Etc::TrustedParts</literal></para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>自動インストールされたパッケージの状態一覧です。\n"
+" 設定項目: <literal>Dir::State::extended_states</literal>\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"翻訳\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" 倉澤 望 <email>nabetaro@debian.or.jp</email> (2003-2006,2009-2012),\n"
+" Takuma Yamada <email>tyamada@takumayamada.com</email> (2016),\n"
+" Debian JP Documentation ML <email>debian-doc@debian.or.jp</email>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" この翻訳文書には未訳部分が含まれている可能性があることに\n"
+" 注意してください。\n"
+" 翻訳がオリジナルに追従できていない場合、\n"
+" 内容を失わないようにこのようにしています。\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"設定文字列\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"設定ファイル\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release \"対象リリー"
+"ス\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"アーキテクチャ\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"パッケージ\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"パッケージバージョン番号\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"正規表現\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"CDROMマウントポイント\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory \"一時ディレ"
+"クトリ\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"ファイル名\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"パス\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"セクション\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"キーID\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr "コマンドラインインターフェイス"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "説明"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+"<command>apt</command> は、パッケージ管理システム用の高レベルのコマンドライン"
+"インターフェースを提供します。エンドユーザインターフェースとして設計されてい"
+"ます。また &apt-get; や &apt-cache; のような専用の APT ツールと比べて、デフォ"
+"ルトでインタラクティブな使用に適したいくつかのオプションが有効になっていま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+"<command>apt</command> 自身と同じように、man ページはエンドユーザインター"
+"フェースとして意図されています。さらに、一部のオプションや詳細の豊富さで読者"
+"を圧倒することを避けるため、複数の場所で部分的に情報を複製しないよう、最も使"
+"用されるコマンドとオプションを言及するように意図されています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr "(&apt-get;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+"<option>update</option> は、設定されたすべての取得元からパッケージ情報をダウ"
+"ンロードするために使用されます。ほかのコマンドは、このデータを操作します。例"
+"えば、パッケージのアップグレードを実行したり、中を検索したり、インストール可"
+"能なすべてのパッケージに関する詳細情報を表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+"<option>upgrade</option> は、&sources-list; で設定された取得元からシステムに"
+"現在インストール済みのすべてのパッケージで利用可能なアップグレードをインス"
+"トールするために使用されます。依存関係を満たすために必要な場合は新しいパッ"
+"ケージがインストールされますが、既存のパッケージが削除されることはありませ"
+"ん。パッケージのアップグレードにインストール済みパッケージの削除が必要な場"
+"合、そのパッケージのアップグレードは行われません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+"<literal>full-upgrade</literal> はアップグレードの機能を実行しますが、システ"
+"ム全体をアップグレードするために必要とされる場合には、現在インストール済みの"
+"パッケージを削除することができます。"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ","
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+"&regex;、&glob; または 完全な一致で指定された 1 つ以上のパッケージに対して要"
+"求された処理を実行します。要求された処理は、特定のパッケージに対してパッケー"
+"ジ名にプラス (+) を追加してパッケージのインストールを、マイナス (-) を追加し"
+"てパッケージの削除を上書きすることができます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"パッケージ名にイコール (=) とパッケージのバージョンを続けることで、選択した"
+"バージョンのパッケージをインストールすることができます。代わりに、パッケージ"
+"名にスラッシュ (/) およびコード名 (&debian-stable-codename;、&debian-testing-"
+"codename;、sid …) またはスイート名 (stable、testing、unstable) を続けること"
+"で、特定のリリースのバージョンをインストールすることができます。また、必要な"
+"場合には、パッケージの依存関係を満たすリリースからバージョンを選択します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+"パッケージの削除はパッケージの全データを削除しますが、削除の事故に備えて、通"
+"常は隠れている小さな (修正された) ユーザ設定ファイルを残します。問題が発生し"
+"たときは、誤って削除したパッケージのインストール要求を発行すると、以前のよう"
+"にその機能を復元します。一方、<command>purge</command> を呼び出すことで、すで"
+"に削除したパッケージの残されたデータを削除することができます。これはあなたの"
+"ホームディレクトリに保存しているデータや設定には影響を与えないことに注意して"
+"ください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"<literal>autoremove</literal> は、ほかのパッケージの依存関係を満たすために自"
+"動的にインストールされた後に、依存関係の変更あるいは必要としていたパッケージ"
+"が削除されたことでもう必要なくなったパッケージの削除に使用することができま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+"別のパッケージの依存関係のため一度インストールされたなどで増えたアプリケー"
+"ションがリストに含まれていないことを確認する必要があります。&apt-mark; を使っ"
+"て、手動でパッケージをインストール済にマークすることができます。"
+"<command>install</command> 経由で明示的にインストールしたパッケージは、自動削"
+"除のために提案されることはありません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+"<option>search</option> は、利用可能なパッケージのリストを指定した &regex; 条"
+"件で検索してマッチした結果を表示するために使用することができます。これは、例"
+"えば特定の機能をもつパッケージを探している場合に有用です。特定のファイルを含"
+"むパッケージを探しているのなら、&apt-file; を試してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+"指定されたパッケージに関する情報を表示します。依存関係、インストールおよびダ"
+"ウンロードサイズ、パッケージが入手可能な取得元、パッケージの内容の説明などを"
+"含みます。例えば &apt; にパッケージの削除をさせる前や、インストールする新しい"
+"パッケージを検索するときに、この情報を見て参考にすることができます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr "(作業中)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+"<option>list</option> は、一定の基準を満たすパッケージのリストを表示すること"
+"ができるという点で、<command>dpkg-query --list</command> に似ています。インス"
+"トール済 (<option>--installed</option>)、アップグレード可能 (<option>--"
+"upgradeable</option>) または利用可能なすべてのバージョン (<option>--all-"
+"versions</option>) の一覧オプションでも、パッケージ名をマッチさせる &glob; パ"
+"ターンをサポートしています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+"<literal>edit-sources</literal> は、お好みのテキストエディタで &sources-"
+"list; ファイルを編集することができます。また、基本的な健全性チェックを提供し"
+"ます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr "スクリプトの使い方およびほかの APT ツールとの違い"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+"&apt; コマンドラインはエンドユーザ向けツールとして設計されています。動作は"
+"バージョン間で変更される可能性があります。後方互換性を損なうことのないように"
+"は努めますが、変更がインタラクティブな使用に有益と思われる場合には、その保証"
+"はありません。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+"&apt; のすべての機能は、&apt-get; や &apt-cache; など専用の APT ツールで利用"
+"可能です。&apt; は、単にいくつかのオプションのデフォルト値を変更します (&apt-"
+"conf; の特にバイナリ範囲を参照)。可能な限り下位互換性を保つように、スクリプト"
+"では (潜在的に有効になっているいくつかの追加オプションをつけて) コマンドを使"
+"うべきです。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "関連項目"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-get;、&apt-cache;、&sources-list;、&apt-conf;、&apt-config;、"
+"&guidesdir; にある APT ユーザガイド、&apt-preferences;、APT Howto."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "診断メッセージ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt</command> は正常終了時に 0 を返します。エラー時には十進の 100 を"
+"返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr "APT パッケージ操作ユーティリティ -- コマンドラインインターフェース"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> は、パッケージを操作するコマンドラインツールで、"
+"APT ライブラリを用いる他のツールのユーザ側「バックエンド」といえるものです。"
+"「フロントエンド」インターフェースには、&aptitude;, &synaptic;, &wajig; など"
+"があります。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"<option>-h</option> オプションや <option>--help</option> オプションを除き、以"
+"下に挙げるコマンドが必要です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"<literal>update</literal>は、取得元からパッケージインデックスファイルの再同期"
+"を行うのに使用します。利用可能なパッケージのインデックスは、<filename>/etc/"
+"apt/sources.list</filename> に記述した場所から取得します。例えば Debian アー"
+"カイブを利用する際、このコマンドが <filename>Packages.gz</filename> ファイル"
+"を検索することで、新規または更新されたパッケージの情報が利用可能となります。"
+"<literal>update</literal> は、<literal>upgrade</literal> や <literal>dist-"
+"upgrade</literal> を行う前に常に実行してください。前もってパッケージファイル"
+"のサイズを知ることができないため、全体の進捗メータは正しく表示されません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"<literal>upgrade</literal> は、現在システムにインストールされている全パッケー"
+"ジの最新バージョンを、<filename>/etc/apt/sources.list</filename> に列挙した取"
+"得元からインストールするのに使用します。現在インストール中のパッケージに新し"
+"いバージョンがあれば更新しますが、いかなる時も現在インストール中のパッケージ"
+"の削除は行いませんし、インストールしていないパッケー所の取得・インストールは"
+"行いません。対象のパッケージが、他のパッケージのインストール状態を変更せずに"
+"更新できない場合は、現在のバージョンのままとなります。最初に "
+"<literal>update</literal> を実行しておき、<command>apt-get</command> にパッ"
+"ケージの新しいバージョンがあることを知らせる必要があります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"<literal>dist-upgrade</literal> は、<literal>upgrade</literal> の機能に加え、"
+"新バージョンのパッケージに対する依存関係の変更を知的に操作します。"
+"<command>apt-get</command> は「洗練された」競合解決システムを持ち、必要とあら"
+"ば比較的重要でないパッケージを犠牲にして、最重要パッケージの更新を試みます。"
+"そのため <literal>dist-upgrade</literal> は、いくつかのパッケージを削除する可"
+"能性があります。<filename>/etc/apt/sources.list</filename> ファイルには、必要"
+"なパッケージファイルを検索する場所のリストが含まれています。特定のパッケージ"
+"向けに、一般的な設定を上書きする機構については、&apt-preferences; をご覧くだ"
+"さい。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> は、伝統的な Debian GNU/Linux パッケージ管"
+"理フロントエンドの &dselect; と共に使用されます。<literal>dselect-upgrade</"
+"literal> は、&dselect; で作られた利用可能パッケージの<literal>Status</"
+"literal> フィールドの変更を追跡し、その状態を反映させるのに必要なアクションを"
+"実行します。(例えば、古いパッケージの削除や新しいパッケージのインストールな"
+"ど)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"<literal>install</literal> の後には、インストールや更新したいパッケージを 1 "
+"つ以上指定します。指定するパッケージは、完全なファイル名ではなくパッケージ名"
+"です (例えば Debian システムでは、<filename>apt-utils_&apt-product-version;"
+"_amd64.deb</filename> ではなく <package>apt-utils</package> を引数として与え"
+"ます)。インストールするよう指定したすべてのパッケージに対し、依存パッケージも"
+"含めて取得・インストールを行います。<filename>/etc/apt/sources.list</"
+"filename> ファイルを、要求するパッケージの場所を特定するのに使用します。パッ"
+"ケージ名の後ろに (空白を含まず) ハイフンが追加されている場合、そのパッケージ"
+"がインストールされていれば削除します。同様に、インストールするパッケージを明"
+"示するのにプラス記号も使用できます。この記号は apt-get の競合解決システムの判"
+"断を上書きするのに利用される可能性があります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"パッケージにイコール記号とバージョンを続けることで、選択したバージョンのパッ"
+"ケージをインストールすることができます。つまり、指定のバージョンのパッケージ"
+"をインストールするように選択する、ということです。別の方法としては、ディスト"
+"リビューションを特定するのに、パッケージ名に続けて、スラッシュとディストリ"
+"ビューションのバージョンやアーカイブ名 (stable, testing, unstable) を記述でき"
+"ます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"バージョン選択機構はダウングレードにも使用できるため、注意して使用しなければ"
+"なりません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"システムにインストール済みのパッケージを、すべてアップグレードするのではな"
+"く、いくつかのパッケージをアップグレードする場合にも、このターゲットを使用で"
+"きます。現在インストールされているパッケージすべての最新版をインストールする "
+"\"upgrade\" ターゲットと異なり、\"install\" は指定したパッケージの最新版のみ"
+"をインストールします。単純にアップグレードしたいパッケージ名を指定してくださ"
+"い。より新しいバージョンが利用できる場合、そのパッケージ (と前述の依存関係に"
+"あるパッケージ) をダウンロード・インストールします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"最後に、&apt-preferences; 機構により、特定のパッケージに対するインストールポ"
+"リシーを作成できます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"構文に '.', '?', '*' を含み、パッケージ名がマッチしなかった場合、POSIX 正規表"
+"現であると見なし、データベース内の全パッケージ名に対して適用します。マッチし"
+"たパッケージすべてがインストール(もしくは削除)されます。'lo.*' のような文字列"
+"は、'how-lo' や 'lowest' にマッチすることに注意してください。そうしたくなけれ"
+"ば、'^' や '$' を付けるか、もっと詳しい正規表現を指定してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr "<literal>Archive:</literal> 行や <literal>Suite:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"<literal>remove</literal> は、パッケージが削除されることを除き、"
+"<literal>install</literal> と同様です。削除されたパッケージの設定ファイルは、"
+"システムに残ったままになることに注意してください。プラス記号がパッケージ名に "
+"(間に空白を含まずに) 付加されると、識別されたパッケージを、削除ではなくインス"
+"トールします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"パッケージが削除かつ完全削除 (すべての設定ファイルも削除) されるのを除き、"
+"<literal>purge</literal> は <literal>remove</literal> と同じです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"<literal>source</literal> は、<command>apt-get</command> にソースパッケージを"
+"取得させます。APT はどのソースパッケージを取得するか決めるため、利用可能な"
+"パッケージを検査します。その後、デフォルトリリースから最新の利用可能なソース"
+"パッケージを見つけ、カレントディレクトリへダウンロードします。デフォルトリ"
+"リースは、可能であれば、<literal>APT::Default-Release</literal> オプション、"
+"<option>-t</option> オプション、パッケージごとの <literal>pkg/release</"
+"literal> 構文で指定します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"ソースパッケージは、&sources-list; ファイルの <literal>deb-src</literal> 行に"
+"より、バイナリパッケージと分けて管理されます。つまり、ソースを取得したいリポ"
+"ジトリを、それぞれ追加する必要があるということです。こうしないと、誤った (古"
+"すぎ・新しすぎな) ソースバージョンを取得したり、何も取得できなくなります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"<option>--compile</option> オプションを指定すると、<command>dpkg-"
+"buildpackage</command> を用いて、<command>--host-architecture</command> オプ"
+"ションで定義したアーキテクチャのバイナリ .deb パッケージをコンパイルします。"
+"<option>--download-only</option> を指定すると、ソースパッケージを展開しませ"
+"ん。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"パッケージと同様に、ソース名の後ろにイコールと取得したいバージョンを置くと、"
+"指定したバージョンのソースを取得できます。<literal>APT::Get::Only-Source</"
+"literal> オプションが暗黙のうちに有効になっているため、ソースパッケージ名と"
+"バージョンに厳密に一致させています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"ソースパッケージはインストールされず、バイナリパッケージのように "
+"<command>dpkg</command> データベースで管理されないことに注意してください。"
+"ソースの tarball のように、単にカレントディレクトリにダウンロードします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"<literal>build-dep</literal> は、ソースパッケージの構築依存関係を満たすよう"
+"に、パッケージのインストール・削除を行います。デフォルトでは、パッケージをネ"
+"イティブに構築する依存関係を満たします。お望みなら、<option>--host-"
+"architecture</option> オプションにより、別のホストアーキテクチャを指定できま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"<literal>check</literal> は、パッケージキャッシュの更新や壊れた依存関係を"
+"チェックする診断ツールです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> は、与えたバイナリパッケージを、カレントディレク"
+"トリにダウンロードします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"<literal>clean</literal> は、取得したパッケージのローカルリポジトリを掃除しま"
+"す。<filename>&cachedir;/archives/</filename> と <filename>&cachedir;/"
+"archives/partial/</filename> からロックファイル以外すべて削除します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr "(および"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr "1.1 以降の別名)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"<literal>clean</literal> のように、<literal>autoclean</literal> は取得した"
+"パッケージのローカルリポジトリを掃除します。違いは、もうダウンロードされるこ"
+"とがないパッケージファイルや、ほとんど不要なパッケージファイルのみを削除する"
+"ことです。このため、キャッシュは、制御不能になるほど成長することなく、長期に"
+"わたって維持することができます。設定オプション <literal>APT::Clean-"
+"Installed</literal> に off をセットしていれば、インストール済みのパッケージ"
+"ファイルが削除されるのを防ぐことができます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"<literal>autoremove</literal> は、他のパッケージの依存関係を満たすために自動"
+"的にインストールされ、もう必要なくなったパッケージを削除するのに使用します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> は、パッケージの changelog をダウンロードし、"
+"<command>sensible-pager</command> で表示します。デフォルトでは、インストール"
+"されているバージョンの changelog を表示します。しかし、<option>install</"
+"option> コマンドと同じオプションを指定することができます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+"デフォルトでは <command>apt-get update</command> でダウンロードすることができ"
+"るすべてのデータファイル (別名インデックスターゲット) に関する情報の deb822 "
+"形式のリストを表示します。出力形式を変更する、またレコードをフィルタするデ"
+"フォルト出力の行を受け付けるための <option>--format</option> オプションをサ"
+"ポートします。コマンドは主に、ダウンロードしたファイルの情報やファイル名を取"
+"得するために、APT を扱う外部ツール用のインターフェースとして使用されます。そ"
+"して、外部ツールが自身で再度ダウンロードする代わりに使用することができます。"
+"詳細なドキュメントはここでは省略しますが、代わりに <package>apt-doc</"
+"package> パッケージに収録されている <literal><filename>doc/acquire-"
+"additional-files.txt</filename></literal> で見つけることができます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "オプション"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"「推奨」パッケージをインストールする依存関係と見なしません。設定項目: "
+"<literal>APT::Install-Recommends</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"「提案」パッケージをインストールする依存関係と見なします。設定項目: "
+"<literal>APT::Install-Suggests</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"ダウンロードのみ - パッケージファイルの取得のみを行い、展開・インストールを行"
+"いません。設定項目: <literal>APT::Get::Download-Only</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"修復 - 依存関係が壊れたシステムの修正を試みます。このオプションを install や "
+"remove と一緒に使うときは、APT が解決法を推測するので、パッケージを指定しなく"
+"てもかまいません。どのパッケージを指定しても、完全に問題を解決します。APT 自"
+"体は、システムに存在する破損したパッケージ依存関係を許すことができないので、"
+"初めて APT を実行する場合、このオプションが必要になることがあります。システム"
+"の依存関係構造にかなり問題がある場合は、手動で修正するよう要求することもあり"
+"ます。(通常は、問題のあるパッケージを取り除くのに <command>dpkg --remove</"
+"command> を使用します) このオプションを <option>-m</option> オプションと同時"
+"に使用すると、エラーになる状況があるかもしれません。設定項目: <literal>APT::"
+"Get::Fix-Broken</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"欠落パッケージの無視 - パッケージが取得できなかったり、(パッケージの破損で) "
+"取得した後の整合性チェックに失敗した場合、そのパッケージの処理を保留し最後ま"
+"で処理を続けます。このオプションを <option>-f</option> オプションと同時に使用"
+"すると、エラーになる状況があるかもしれません。パッケージをインストールするよ"
+"う選択している (特にコマンドラインでの操作する) 場合や、ダウンロードできな"
+"かった場合に、なにも表示せず保留することになります。設定項目: <literal>APT::"
+"Get::Fix-Missing</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"パッケージのダウンロードを無効にします。これはすでにダウンロードした .deb に"
+"対してのみ APT を行う場合に、<option>--ignore-missing</option> と併せて使うの"
+"がよいでしょう。設定項目: <literal>APT::Get::Download</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"静粛 - 進捗表示を省略し、ログをとるのに便利な出力を行います。最大 2 つまで q "
+"を重ねることでより静粛にできます。また、<option>-q=#</option> のように静粛レ"
+"ベルを指定して、設定ファイルを上書きすることもできます。静粛レベル 2 は "
+"<option>-y</option> を含んでいることに注意してください。APT が意図しない決定"
+"を行うかもしれないので -d, --print-uris, -s のような操作を行わないオプション"
+"をつけずに -qq を使用するべきではありません。設定項目: <literal>quiet</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+"何もしない - 現在のシステム状態に基づいて起こるイベントのシミュレーションを行"
+"い、実際にはシステムを変更しません。ロックは無効になる (<option>Debug::"
+"NoLocking</option>) ので、<command>apt-get</command> 実行中にシステムの状態が"
+"変化する可能性があります。シミュレーションは root 以外のユーザが実行できます"
+"が、シミュレーションを歪めるすべての apt 設定への読み取りアクセス権を持ってい"
+"ない可能性があります。この警告を表す通知は、root 以外のユーザではデフォルトで"
+"表示されます (<option>APT::Get::Show-User-Simulation-Note</option>)。設定項"
+"目: <literal>APT::Get::Simulate</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"シミュレートの結果、<command>dpkg</command> の動作を表す一連の行のそれぞれ"
+"に、設定 (<literal>Conf</literal>)、削除 (<literal>Remv</literal>)、展開 "
+"(<literal>Inst</literal>) を表示します。角カッコは壊れたパッケージを表し、(ま"
+"れに) 空の角カッコは大した問題ではないことを表します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"プロンプトへの自動承諾 - すべてのプロンプトに自動的に \"yes\" と答え、非対話"
+"的に実行します。保留したパッケージの状態を変更したり、必須パッケージを削除す"
+"るような不適切な状況の場合、<literal>apt-get</literal> は処理を中断します。設"
+"定項目: <literal>APT::Get::Assume-Yes</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"全ての質問に、自動的に \"no\" と答えます。設定項目: <literal>APT::Get::"
+"Assume-No</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"更新される全パッケージの表示を行いません。設定項目: <literal>APT::Get::Show-"
+"Upgraded</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"更新・インストールするパッケージのバージョンをすべて表示します。設定項目: "
+"<literal>APT::Get::Show-Versions</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"このオプションは、<command>apt-get source --compile</command> で構築するパッ"
+"ケージのアーキテクチャや、どのようにクロス依存関係を解決するかを制御します。"
+"デフォルトでは未定義で、これはホストアーキテクチャは、(<literal>APT::"
+"Architecture</literal> で定義した) ビルドアーキテクチャと同じという意味になり"
+"ます。設定項目: <literal>APT::Get::Host-Architecture</literal>。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"このオプションは、<command>apt-get source --compile</command> でパッケージを"
+"ビルドする際に有効化するビルドプロファイルや、どのようにクロス依存関係を解決"
+"するかを制御します。デフォルトでは有効化するビルドプロファイルはありません。"
+"コンマで連結することで複数のビルドプロファイルを有効化できます。設定項目: "
+"<literal>APT::Get::Host-Architecture</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"ソースパッケージをダウンロード後、コンパイルします。設定項目: <literal>APT::"
+"Get::Compile</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"保留パッケージの無視 - パッケージの保留指示を無視して <command>apt-get</"
+"command> を行います。<literal>dist-upgrade</literal> と共に使用し、パッケージ"
+"を大量に、保留解除するのに便利です。設定項目: <literal>APT::Ignore-Hold</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+"<literal>upgrade</literal> と併せて使った場合に新しいパッケージのインストール"
+"を許可します。これは新しい依存をインストールするために既にインストールされて"
+"いるパッケージを更新する必要がある場合に有用です。パッケージを保留する代わり"
+"に <literal>upgrade</literal> がパッケージをアップグレードして新しい依存をイ"
+"ンストールします。このオプションと併せて使った場合、<literal>upgrade</"
+"literal> がパッケージを削除することはなく、新規追加を許可するだけであることに"
+"注意してください。設定項目: <literal>APT::Get::Upgrade-Allow-New</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"パッケージ更新なし - <literal>install</literal> と同時に使用すると、"
+"<literal>no-upgrade</literal> は、コマンドラインで指定したパッケージが、すで"
+"にインストールしてある場合に更新を行いません。設定項目: <literal>APT::Get::"
+"Upgrade</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"新規パッケージインストールなし - <literal>install</literal> と同時に使用する"
+"と、<literal>only-upgrade</literal> は、すでにインストールされているパッケー"
+"ジのみをアップグレードし、新しいパッケージのインストール要求を無視します。設"
+"定項目: <literal>APT::Get::Only-Upgrade</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"ダウングレードを行う場合でも、確認なしで実行してしまう危険なオプションです。"
+"よほどの状況でなければ、使うべきではありません。このオプションを使うと、シス"
+"テムを破壊しかねません! 設定項目: <literal>APT::Get::allow-downgrades</"
+"literal>。APT 1.1 で導入されました。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"強制承諾 - 必要不可欠なものを削除する場合でも、確認なしで実行してしまう危険な"
+"オプションです。よほどの状況でなければ、使うべきではありません。"
+"<literal>force-yes</literal> を使うと、システムを破壊しかねません! 設定項目: "
+"<literal>APT::Get::allow-remove-essential</literal>。APT 1.1 で導入されまし"
+"た。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"強制承諾 - 保持されたパッケージを変更する場合でも、確認なしで実行してしまう危"
+"険なオプションです。よほどの状況でなければ、使うべきではありません。このオプ"
+"ションを使うと、システムを破壊しかねません! 設定項目: <literal>APT::Get::"
+"allow-change-held-packages</literal>。APT 1.1 で導入されました。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>. This is deprecated and replaced "
+#| "by <option>--allow-downgrades</option>, <option>--allow-remove-essential</"
+#| "option>, <option>--allow-change-held-packages</option> in 1.1."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"強制承諾 - 何か損傷を与えかねない動作をしようとした場合でも、確認なしで実行し"
+"てしまう危険なオプションです。よほどの状況でなければ、使うべきではありませ"
+"ん。<literal>force-yes</literal> を使うと、システムを破壊しかねません! 設定項"
+"目: <literal>APT::Get::force-yes</literal>。これは非推奨で、1.1 で<option>--"
+"allow-downgrades</option>, <option>--allow-remove-essential</option>, "
+"<option>--allow-change-held-packages</option> に置き換えられました。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"インストールするファイルを取得する代わりに、その URI を表示します。URI には、"
+"パス、対象ファイル名、ファイルサイズ、予測される MD5 ハッシュが含まれていま"
+"す。出力したファイル名が、常にリモートサイトのファイル名と一致するわけではな"
+"い、ということに注意してください! これは <literal>source</literal> コマンド、"
+"<literal>update</literal> コマンドでも動作します。<literal>update</literal> "
+"で使用したときには、MD5 やファイルサイズを含みません。このとき、圧縮ファイル"
+"の展開はユーザの責任において行ってください。設定項目: <literal>APT::Get::"
+"Print-URIs</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"削除する際、「削除」ではなく「完全削除」を行います。「完全削除」を行うと指示"
+"したパッケージ名の後には、アスタリスク (\"*\") が付きます。<option>remove --"
+"purge</option> は <option>purge</option> コマンドと等価です。 設定項目: "
+"<literal>APT::Get::Purge</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"すでに最新版がインストールされていても、パッケージを再インストールします。設"
+"定項目: <literal>APT::Get::ReInstall</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"この機能はデフォルトで ON になっています。OFF にするには <literal>--no-list-"
+"cleanup</literal> としてください。ON の場合、<command>apt-get</command> は古"
+"くなったファイルを確実に消去するため、自動的に <filename>&statedir;/lists</"
+"filename> の中身を管理します。これを OFF にするのは、取得元リストを頻繁に変更"
+"する時ぐらいでしょう。設定項目: <literal>APT::Get::List-Cleanup</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"このオプションは、ポリシーエンジンへのデフォルト入力を制御します。また、指定"
+"されたリリース文字列を使用し、デフォルト pin を優先度 990 で作成します。これ"
+"は、<filename>/etc/apt/preferences</filename> にある一般設定を上書きします。"
+"pin で留めるのを明示されたパッケージには、このオプションの値は影響を与えませ"
+"ん。つまりこのオプションで、どの配布パッケージを取得するかを簡単に管理しま"
+"す。一般的な例としては、<option>-t '2.1*'</option>, <option>-t unstable</"
+"option>, <option>-t sid</option> のようになります。設定項目: <literal>APT::"
+"Default-Release</literal>。&apt-preferences; のマニュアルページも参照してくだ"
+"さい。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"「重要でない」操作のみを行います。これは論理的に <option>--assume-yes</"
+"option> の仲間と見なせます。<option>--assume-yes</option> は質問にすべて yes "
+"と答えますが、<option>--trivial-only</option> はすべて no と答えます。設定項"
+"目: <literal>APT::Get::Trivial-Only</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"パッケージが削除される状況になったとき、プロンプトを表示せず中断します。設定"
+"項目: <literal>APT::Get::Remove</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"コマンドが <literal>install</literal> か <literal>remove</literal> である場"
+"合、このオプションは使用していない依存しているパッケージを削除し、"
+"<literal>autoremove</literal> コマンドのように動作します。設定項目: "
+"<literal>APT::Get::AutomaticRemove</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"<literal>source</literal> コマンドと <literal>build-dep</literal> コマンドで"
+"のみ意味があります。指定されたソース名がバイナリテーブルにマップされないよう"
+"にします。これは、このオプションを指定すると、バイナリパッケージ名を受け付け"
+"て対応するソースパッケージを探すのではなく、引数にソースパッケージ名しか受け"
+"付けなくなる、ということです。設定項目: <literal>APT::Get::Only-Source</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"ソースアーカイブの diff ファイルや dsc ファイル、tar ファイルのダウンロードの"
+"みを行います。設定項目: <literal>APT::Get::Diff-Only</literal>, "
+"<literal>APT::Get::Dsc-Only</literal>, <literal>APT::Get::Tar-Only</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"構築依存関係の解決を、アーキテクチャに依存したもののみ行います。設定項目: "
+"<literal>APT::Get::Arch-Only</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"構築依存関係の解決を、アーキテクチャに依存しないもののみ行います。設定項目: "
+"<literal>APT::Get::Arch-Only</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+"パッケージが認証できない場合は無視してください。プロンプトは表示されません。"
+"ローカルリポジトリでの作業中には有用ですが、ユーザ自身が別の方法でデータの信"
+"憑性を確保していない場合は、セキュリティ上の重大なリスクになります。&sources-"
+"list; エントリ用の <option>Trusted</option> オプションの使用は、通常グローバ"
+"ルオーバーライドよりも優先されるはずです。設定項目: <literal>APT::Get::"
+"AllowUnauthenticated</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+"設定された取得元から検証できないデータを取得する update コマンドを禁止しま"
+"す。APT は、有効な暗号による署名のないリポジトリ用の update コマンドで失敗し"
+"ます。概念と影響の詳細については &apt-secure; も参照してください。設定項目: "
+"<literal>Acquire::AllowInsecureRepositories</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+"パッケージのインストール、アップグレード、削除時にユーザにとってわかりやすい"
+"形で進捗情報をターミナルウィンドウ内に表示します。このデータの機械的に解析で"
+"きるバージョンについては apt の doc ディレクトリにある README.progress-"
+"reporting を見てください。設定項目: <literal>Dpkg::Progress</literal>、 "
+"<literal>Dpkg::Progress-Fancy</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+"メタ情報のソースとして指定したファイルを追加します。指定を繰り返すと複数の"
+"ファイルを追加できます。さらなる詳細については &apt-cache; の <option>--with-"
+"source</option> の説明を見てください。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "ファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, &guidesdir; にある APT ユーザガイド, &apt-preferences;, APT "
+"Howto"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> は正常終了時に 0 を返します。エラー時には十進の "
+"100 を返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "APT キャッシュへの問い合わせ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> は APT のパッケージキャッシュに対して、さまざま"
+"な操作を行います。<command>apt-cache</command> は、システム状態の操作は行いま"
+"せんが、パッケージのメタデータを検索したり、興味深い出力を生成するといった操"
+"作を提供します。メタデータは、例えば <command>apt-get</command> の 'update' "
+"コマンドで取得して更新します。そのため、最後の更新が古すぎる場合は、時代遅れ"
+"です。ただし、引き換えに <command>apt-cache</command> は、設定された取得元の"
+"可用性とは独立して動作します (例えばオフライン)。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> は APT のパッケージキャッシュを作成します。この"
+"キャッシュが見つからない、または古くなっている場合、キャッシュを必要とするす"
+"べてのコマンドによって、暗黙で実行されます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"<literal>showpkg</literal> は、コマンドライン上に列挙したパッケージの情報を表"
+"示します。後に続く引数はパッケージ名となります。各パッケージについて、有効な"
+"バージョンと被依存関係を列挙し、さらにその各バージョンについて依存関係を表示"
+"します。(通常の) 依存関係とは、対象のパッケージが依存しているパッケージを指し"
+"ます。また、被依存関係とは、対象のパッケージに依存しているパッケージを指しま"
+"す。従って、パッケージの依存関係は満たさなければなりませんが、被依存関係は満"
+"たす必要はありません。実例として、以下に <command>apt-cache showpkg "
+"libreadline2</command> の出力を掲げます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"つまり、libreadline2 の version 2.1-12 は、libc5 と ncurses3.0 に依存してい"
+"て、libreadline2 が動作するには、これらをインストールする必要があるということ"
+"が判ります。一方、libreadlineg2 と libreadline2-altdev は libreadline2 に依存"
+"しています。libreadline2 をインストールするためには、libc5, ncurses3.0, ldso "
+"をすべてインストールしなければなりませんが、libreadlineg2 と libreadline2-"
+"altdev はインストールする必要はありません。出力の残りの部分の意味については、"
+"apt のソースコードを調べるのが最良でしょう。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"<literal>stats</literal> はキャッシュについての統計情報を表示します。それ以"
+"上、引数は必要ありません。以下の統計情報を表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>パッケージ名総数</literal>は、キャッシュに存在するパッケージ数を表し"
+"ます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>通常パッケージ</literal>は、公式の普通のパッケージ数を表します。これ"
+"は、他のパッケージの依存関係で使用された名称で、それが一対一に対応するパッ"
+"ケージです。大多数のパッケージはこのカテゴリに入ります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>純粋仮想パッケージ</literal>は、仮想パッケージ名としてのみ存在する"
+"パッケージ (仮想パッケージ名のみを「提供」し、実際にはいかなるパッケージもそ"
+"の名称を持たない) の数を表します。例えば、Debian システムでは \"mail-"
+"transport-agent\" は純粋仮想パッケージです。\"mail-transport-agent\" を提供す"
+"るパッケージはいくつもありますが、\"mail-transport-agent\" という名前のパッ"
+"ケージはありません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>単一仮想パッケージ</literal>は、特定の仮想パッケージ名を提供するパッ"
+"ケージが、ただ一つの場合の数を表します。例えば、Debian システムでは、\"X11-"
+"text-viewer\" は仮想パッケージですが、\"X11-text-viewer\" を提供するパッケー"
+"ジは、xless パッケージのみということです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>複合仮想パッケージ</literal>は、その仮想パッケージ名を提供するパッ"
+"ケージが複数あるか、またパッケージ名と同じ仮想パッケージ名を持つパッケージの"
+"数を表します。例えば、Debian システムでは、\"debconf\" は実際のパッケージ名で"
+"もありますが、debconf-tiny によって提供もされています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>欠落</literal>は、依存関係中には存在するのに、どのパッケージにも提供"
+"されていないパッケージ名の数を表します。欠落パッケージは、全ディストリビュー"
+"ションにアクセスできていないか、(実ないし仮想) パッケージがディストリビュー"
+"ションからはずされたという兆候かもしれません。通常、構文が競合や破損するとこ"
+"のようになります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>個別バージョン総数</literal>は、キャッシュに存在するパッケージのバー"
+"ジョンの数を表します。もし複数のディストリビューション (例えば \"stable\" と "
+"\"unstable\") にアクセスする場合、この値はパッケージ名総数よりもかなり大きい"
+"数になります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>依存関係総数</literal>は、キャッシュにあるすべてのパッケージで要求さ"
+"れた依存関係の数です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> は、指定したパッケージ名に一致するソースパッケージ"
+"を、すべて表示します。バイナリパッケージになるときの名称を宣言したレコードと"
+"ともに、すべてのバージョンについて表示します。ソースパッケージ名だけを表示す"
+"るには、<option>--only-source</option> を使用してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"<literal>dump</literal> は、キャッシュ内のパッケージそれぞれについて、短い一"
+"覧を表示します。主にデバッグ用です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"<literal>dumpavail</literal> は、標準出力に利用可能なものの一覧を出力しま"
+"す。 &dpkg; と共に使用すると便利ですし、&dselect; でも使用されます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"<literal>unmet</literal> は、パッケージキャッシュ内にある、不適当な依存関係の"
+"概要を表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"<literal>show</literal> は、<command>dpkg --print-avail</command> と同様の機"
+"能を実行します。これは、指定したパッケージのパッケージレコードの表示です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"<literal>search</literal> は、与えられた POSIX の正規表現 (&regex; を参照) に"
+"より、すべての利用可能なパッケージに対して全文検索を行います。パッケージ名と"
+"説明に対して正規表現で検索を行い、パッケージ名 (仮想パッケージ名を含む) と短"
+"い説明文を表示します。<option>--full</option> が与えられた場合、マッチした"
+"パッケージに対し <literal>show</literal> と同じ情報を出力します。<option>--"
+"names-only</option> が与えられた場合は、長い説明文に対して検索を行わず、パッ"
+"ケージ名と提供されたパッケージのみ対象とします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr "空白で区切った引数で、複数の検索パターンの and をとることができます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"<literal>depends</literal> は、パッケージが持っている依存関係と、その依存関係"
+"を満たす他のパッケージの一覧を表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"<literal>rdepends</literal> は、パッケージが持つ被依存関係を一覧表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"このコマンドは、APT が知っている各パッケージの名前を表示します。オプション引"
+"数は、名前一覧から先頭一致で抽出します。この出力はシェルのタブによる補完機能"
+"で使いやすく、また非常に高速に生成されます。このコマンドは <option>--"
+"generate</option> オプションと共に使用すると非常に便利です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"APT が知っているパッケージは、ダウンロード可能、インストール可能、インストー"
+"ル済みである必要がないことに注意してください。つまり、仮想パッケージも生成し"
+"た一覧にあります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"<literal>dotty</literal> は、コマンドライン上のパッケージ名から、<ulink url="
+"\"http://www.research.att.com/sw/tools/graphviz/\">GraphViz</ulink> パッケー"
+"ジの dotty コマンドで利用するのに便利な出力を生成します。結果はパッケージの関"
+"係を表わす、ノード・エッジのセットで表現されます。デフォルトでは、すべての依"
+"存パッケージをトレースするので、非常に大きい図が得られます。コマンドラインに"
+"列挙したパッケージだけを出力するように制限するには、<literal>APT::Cache::"
+"GivenOnly</literal> をセットしてください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"結果のノードは数種の形状をとります。通常パッケージは四角、純粋仮想パッケージ"
+"は三角、複合仮想パッケージは菱形、欠落パッケージは六角形で表します。オレンジ"
+"の四角は再帰が終了した「リーフパッケージ」、青い線は先行依存、緑の線は競合を"
+"表します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr "注意) dotty は、パッケージのより大きなセットのグラフは描けません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"<literal>dotty</literal> と同様ですが、<ulink url=\"http://rw4.cs.uni-sb.de/"
+"users/sander/html/gsvcg1.html\">VCG tool</ulink> の xvcg 専用です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> は、プリファレンスファイル関係の問題について、デ"
+"バッグを支援します。引数を指定しなかった場合、取得元ごとの優先順位を表示しま"
+"す。一方、パッケージ名を指定した場合、優先順の詳細情報を表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"<literal>apt-cache</literal> の <literal>madison</literal> コマンドは、"
+"Debian アーカイブ管理ツール <literal>madison</literal> の機能のサブセットで、"
+"出力フォーマットを真似ようとします。パッケージの利用可能バージョンを表形式で"
+"表示します。オリジナルの <literal>madison</literal> と違い、APT がパッケージ"
+"一覧を検索したアーキテクチャ (<literal>APT::Architecture</literal>) の情報を"
+"表示するだけです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"パッケージキャッシュを格納するファイルを選択します。パッケージキャッシュは、"
+"すべての操作で使用される一次キャッシュです。設定項目: <literal>Dir::Cache::"
+"pkgcache</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"ソースキャッシュを格納するファイルを選択します。このソースキャッシュは "
+"<literal>gencaches</literal> でのみ使用され、ここに解析された取得元のパッケー"
+"ジ情報が格納されています。パッケージキャッシュを構築する際に、全パッケージ"
+"ファイルの再解析を避けるために、ソースキャッシュが使われます。設定項目: "
+"<literal>Dir::Cache::srcpkgcache</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"静粛 - 進捗表示を省略し、ログをとるのに便利な出力を行います。最大 2 つまで q "
+"を重ねることでさらに静粛にできます。また、<option>-q=#</option> のように静粛"
+"レベルを指定して、設定ファイルを上書きすることもできます。設定項目: "
+"<literal>quiet</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"「重要」依存関係のみ表示 - <literal>unmet</literal> や <literal>depends</"
+"literal> と共に使用し、「依存」関係と「先行依存」関係のみを表示します。設定項"
+"目: <literal>APT::Cache::Important</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"デフォルトでは <command>depends</command> や <command>rdepends</command> は全"
+"依存関係を出力します。この挙動を、ここに挙げたフラグで指定した依存関係を省略"
+"できます。設定項目: <literal>APT::Cache::Show<replaceable>依存関係タイプ</"
+"replaceable></literal> 例: <literal>APT::Cache::ShowRecommends</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+"デフォルトでは <command>depends</command> や <command>rdepends</command> はメ"
+"タデータ中に明示的に表現された依存関係のみを出力します。このフラグを指定する"
+"と、遭遇したデータにもとづいて追加の依存関係を表示します。"
+"<literal>Conflicts: foo</literal> は、例えば、このパッケージがほかのアーキテ"
+"クチャからのパッケージ foo と競合していることを暗黙的に表現しています。設定項"
+"目: <literal>APT::Cache::ShowImplicit</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"search 時に全パッケージレコードを表示します。設定項目: <literal>APT::Cache::"
+"ShowFull</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"全利用可能バージョンのレコード全体を表示します。これはデフォルトの動作で、無"
+"効にするには <option>--no-all-versions</option> を使用してください。"
+"<option>--no-all-versions</option> を指定すると、候補バージョン (インストール"
+"の際に選択されるもの) だけ表示します。このオプションは、<literal>show</"
+"literal> コマンドでのみ適用できます。設定項目: <literal>APT::Cache::"
+"AllVersions</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"そのままキャッシュを使用するのではなく、自動的にパッケージキャッシュを再生成"
+"します。これはデフォルトの動作で、無効にするには <option>--no-generate</"
+"option> を使用してください。設定項目: <literal>APT::Cache::Generate</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"長い説明文ではなく、パッケージおよび提供されたパッケージ名のみ検索します。設"
+"定項目: <literal>APT::Cache::NamesOnly</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"<literal>pkgnames</literal> で、仮想パッケージや欠落依存関係を含めた全名称を"
+"表示します。設定項目: <literal>APT::Cache::AllNames</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"<literal>depends</literal> や <literal>rdepends</literal> で、指定した全パッ"
+"ケージを再帰的に一度に表示します。設定項目: <literal>APT::Cache::"
+"RecurseDepends</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"<literal>depends</literal> や <literal>rdepends</literal> の出力を、現在イン"
+"ストールされているパッケージに限定します。設定項目: <literal>APT::Cache::"
+"Installed</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+"メタ情報のソースとして指定したファイルを追加します。指定を繰り返すと複数の"
+"ファイルを追加できます。現在サポートしているのは <literal>*.deb</literal>、"
+"<literal>*.dsc</literal>、<literal>*.changes</literal>、<literal>Sources</"
+"literal>、<literal>Packages</literal> ファイル並びにソースパッケージのディレ"
+"クトリです。ファイルとの照合はファイル名だけを基にして行い、ファイルの内容と"
+"の照合は行いません!"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+"<literal>Sources</literal> 及び <literal>Packages</literal> は正しい拡張子を"
+"付けていれば APT がサポートする任意の形式で圧縮できます。このファイルを同じ"
+"ディレクトリに複数置く必要がある場合は、自分が付ける名前の部分の最後尾にアン"
+"ダースコア (「<literal>_</literal>」) を付加したものを先頭に付けます。例: my."
+"example_Packages.xz"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"これによって指定したソースは信頼できるものとして扱われる (&apt-secure; 参照) "
+"ことに注意してください。設定項目: <literal>APT::Sources::With</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> は正常終了時に 0 を返します。エラー時には十進の "
+"100 を返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "APT キー管理ユーティリティ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> は、apt が パッケージを認証するのに使用するキーの"
+"一覧を管理するのに使用します。このキーで認証されたパッケージは、信頼するに足"
+"ると見なせるでしょう。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+"<command>apt-key</command> を利用するためには GNU Privacy Guard suite "
+"(<package>gnupg</package> に収録) を追加でインストールする必要があることに注"
+"意してください。そのため、プログラム単体での用途に (特にパッケージのメンテナ"
+"スクリプトで!) 使うことは全く勧められません。さらに、このプログラムのコマンド"
+"の出力形式はどれも規定されておらず、根本となるコマンドに変更があればこちらも"
+"変わるということになります。<command>apt-key</command> はそういった使い方の検"
+"出を試み、その場合には標準エラーに警告を出します。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr "サポートするキーリングファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+"apt-key では拡張子「<literal>gpg</literal>」の付けられた OpenPGP のバイナリ形"
+"式 (いわゆる「GPG キー公開用リング」) を収録するファイルだけをサポートしま"
+"す。&gpg; のもっと新しいバージョンで導入されてキーリングファイルのデフォルト"
+"となっているキーボックスのデータベース形式はサポートしません。そのため、バー"
+"ジョンを問わず apt で利用するためのバイナリキーリングファイルの作成には常に "
+"<command>gpg --export</command> を使ってください。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+"また、作成したキーリングを利用するシステムにインストールされている apt のバー"
+"ジョンが全て 1.4 以降であれば、<command>gpg --armor --export</command> で作成"
+"する、拡張子に「<literal>asc</literal>」を付けられた保護付きアスキー形式を代"
+"わりに使うこともできます。 "
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "コマンド"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"信頼キーのリストに新しいキーを追加します。このキーを &synopsis-param-"
+"filename; パラメータに与えたファイル名から読み込みますが、ファイル名を "
+"<literal>-</literal> とすると、標準入力から読み込みます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+"<command>apt-key</command> を使用して手動で追加されたキーは、リポジトリの所有"
+"者に所属していることが確認されていることが重要です。そうでなければ、&apt-"
+"secure; インフラが完全に損なわれます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+"<emphasis>注意</emphasis>: このコマンドを使う代わりに、キーリングに記述的な名"
+"前 (ファイル名については &apt-conf; ファイルと同一の規則が適用されます) を付"
+"けて、ファイルの拡張子を「<literal>gpg</literal>」または「<literal>asc</"
+"literal>」として <filename>/etc/apt/trusted.gpg.d/</filename> ディレクトリに"
+"直接配置する方法もあります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr "信頼キー一覧からキーを削除します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr "キー &synopsis-param-keyid; を標準出力に出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "信頼するキーをすべて標準出力に出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr "信頼キーとそのフィンガープリントを一覧表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+#, fuzzy
+#| msgid ""
+#| "Pass advanced options to gpg. With <command>adv --recv-key</command> you "
+#| "can e.g. download key from keyservers directly into the the trusted set "
+#| "of keys. Note that there are <emphasis>no</emphasis> checks performed, so "
+#| "it is easy to completely undermine the &apt-secure; infrastructure if "
+#| "used without care."
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+"gpg に高度なオプションを渡します。<command>adv --recv-key</command> を使用し"
+"て、例えば、キーサーバーから信頼されたキーに直接キーをダウンロードすることが"
+"できます。チェックが<emphasis>行われない</emphasis>ことに注意してください。注"
+"意せず使用するなら、容易に &apt-secure; インフラを完全に傷つけます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr "(非推奨)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"ローカルキーリングをアーカイブキーリングで更新し、もう有効でなくなったアーカ"
+"イブキーをローカルキーリングから削除します。アーカイブキーリングは、使用中の"
+"ディストリビューションにある <literal>archive-keyring</literal> パッケージ "
+"(例えば &keyring-distro; では &keyring-package; パッケージ) で提供されていま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+"ディストリビューションでこのコマンドを使う必要はなく、実のところもはやこれを"
+"使うのではなくキーリングファイルを <filename>/etc/apt/trusted.gpg</filename> "
+"ディレクトリに直接配置すべきであることに注意してください。それによって "
+"<package>gnupg</package> への依存を回避でき、鍵の管理は単純にファイルを追加、"
+"削除するだけになるため、メンテナにとってもユーザにとっても同様に容易になりま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"上記の <command>update</command> コマンドと同様に更新しますが、アーカイブキー"
+"リングを URI から取得し、マスターキーを用いて検証します。これには &wget; のイ"
+"ンストールと、 APT のビルドに取得するサーバと検証するマスターキーリングが設定"
+"されていることが必要です。Debian での APT はこのコマンドをサポートしていませ"
+"ん。代わりに <command>update</command> を使用してください。Ubuntu の APT では"
+"有効です。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "オプション"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"前節で説明したコマンドの前に、このオプションを定義する必要があることに注意し"
+"てください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"このオプションでは、コマンドが操作するべき特定のキーリングファイルを指定でき"
+"ます。デフォルトでは、<filename>trusted.gpg</filename> と <filename>trusted."
+"gpg.d</filename> ディレクトリにあるすべてのファイルを用いて、コマンドが動作し"
+"ます。とはいえ、<filename>trusted.gpg</filename> がプライマリキーリングになり"
+"ます。つまり新しいキーはこのファイルに追加されます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr "パッケージの各種設定の表示、設定、設定解除"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+"統合フロントエンドとして使用することができます。例えば、パッケージを自動/手動"
+"インストール済みとマークしたり、<command>dpkg</command> の選択を保留、インス"
+"トール、削除や完全削除に変更できます。例えば <command>apt-get dselect-"
+"upgrade</command> や <command>aptitude</command> によりリスペクトされていま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr "自動および手動インストール済みパッケージ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"パッケージをインストールすると要求し、その結果、別のパッケージが依存関係を満"
+"たすためにインストールされた場合、依存関係に自動インストール済みとマークされ"
+"ます。いったん自動的にインストールされたパッケージは、手動でインストールした"
+"パッケージに依存されなくなると、そのパッケージは、例えば <command>apt-get</"
+"command> や <command>aptitude</command> により削除が提案されます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> は、パッケージを自動インストール済みとマークします。"
+"このパッケージに依存する手動でインストールされたパッケージがなくなると、この"
+"パッケージを削除します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> は、パッケージを手動インストール済みとマークしま"
+"す。このパッケージに依存するほかのパッケージがなくなっても、このパッケージを"
+"自動的に削除するのを防ぎます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>auto</literal> is used to mark a package as being automatically "
+#| "installed, which will cause the package to be removed when no more "
+#| "manually installed packages depend on this package."
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>auto</literal> は、パッケージを自動インストール済みとマークします。"
+"このパッケージに依存する手動でインストールされたパッケージがなくなると、この"
+"パッケージを削除します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal> は、自動的にインストールされたパッケージを、パッ"
+"ケージごとに改行して表示します。パッケージを与えなければ、自動的にインストー"
+"ルされたパッケージをすべて一覧表示します。パッケージを与えた場合は、そのパッ"
+"ケージが自動的にインストールされている場合にのみ、表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> は <literal>showauto</literal> と同様に使用でき"
+"ますが、手動でインストールされたパッケージの一覧を表示します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"デフォルトの場所 (設定項目: <literal>Dir::State</literal> で定義したディレク"
+"トリの <filename>extended_status</filename>) ではなく、パラメータ &synopsis-"
+"param-filename; からパッケージの状態を読み書きします。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr "パッケージの変更を防ぐ"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>hold</literal> は、パッケージを保留としてマークします。パッケージを"
+"自動的なインストール、アップグレード、削除から防ぎます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> は、以前保留したパッケージを、また操作できるよう"
+"キャンセルするのに使用します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> は、他の show コマンドと同様に、保留されている"
+"パッケージを出力します。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr "パッケージのインストール、削除、完全削除をスケジュールする"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+"<command>apt-get dselect-upgrade</command> のようないくつかのフロントエンド"
+"は、パッケージのインストール状態の事前のスケジュール変更を適用するために使用"
+"することができます。このような変更は、<option>install</option>、"
+"<option>remove</option> (<option>deinstall</option> としても知られています) "
+"および <option>purge</option> オプションでスケジュールすることができます。特"
+"定のパッケージの選択は、それぞれ <option>showinstall</option>、"
+"<option>showremove</option> および <option>showpurge</option> で表示すること"
+"ができます。dpkg 選択とも呼ぶこれらの詳細については、dpkg で見つけることがで"
+"きます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> は正常終了時に 0 を返します。エラー時には 0 以外"
+"を返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "APT アーカイブ認証サポート"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "Starting with version 0.6, <command>APT</command> contains code that does "
+#| "signature checking of the Release file for all repositories. This ensures "
+#| "that data like packages in the archive can't be modified by people who "
+#| "have no access to the Release file signing key. Starting with version 1.1 "
+#| "<command>APT</command> requires repositories to provide recent "
+#| "authentication information for unimpeded usage of the repository."
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"バージョン 0.6 より、<command>APT</command> は全リポジトリに対する Release "
+"ファイルの署名チェックコードを収録しています。これにより、アーカイブのパッ"
+"ケージのようなデータが、Release ファイル署名キーにアクセスできない人によって"
+"変更されていないことを保証します。バージョン 1.1 からは、<command>APT</"
+"command> はリポジトリに対し、そのリポジトリが最近遅滞なく使えていることを証明"
+"する情報の提供を要求します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"注意: &apt-get;、&aptitude;、&synaptic; といった APT ベースのパッケージ管理フ"
+"ロントエンドは全てこの新しい証明機能をサポートしています。この man ページでは"
+"単純化するためだけに、その全てを参照するのに <literal>APT</literal> を使って"
+"います。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted Repositories"
+msgid "Unsigned Repositories"
+msgstr "信頼済リポジトリ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+"アーカイブに署名されていない Release ファイルがある、または Release ファイル"
+"が全くない場合は、現在の APT バージョンは <command>update</command> 操作によ"
+"るそこからのダウンロードをデフォルトで拒否し、ダウンロードを強制した場合で"
+"も、インストール要求に証明されていないアーカイブからのパッケージが含まれる場"
+"合には <command>apt-get</command> のようなフロントエンドは明示的な確認を要求"
+"します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+"設定オプション <option>Acquire::AllowInsecureRepositories</option> に "
+"<literal>true</literal> を設定するとどの APT クライアントでも警告だけを出すよ"
+"うに強制できます。&sources-list; オプション <literal>allow-insecure=yes</"
+"literal> を使うと個々のリポジトリについて安全でないことを許可するようにもでき"
+"ます。安全でないリポジトリは全く勧められるものではなく、apt にそのサポート継"
+"続を強制させるオプションは全て最終的には削除されることに注意してください。"
+"ユーザ側では警告についても無効化する <option>Trusted</option> オプションを利"
+"用することもできますが、&sources-list; で述べているように、その影響を必ず理解"
+"してください。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+"以前は証明されていたけれども <command>update</command> 操作の結果その効力がな"
+"くなったリポジトリについては、安全でないリポジトリの利用を許可あるいは禁止す"
+"るオプションに関わらず、どの APT クライアントでもエラーを出します。追加で "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> に "
+"<literal>true</literal> をセットするか &sources-list; のオプション "
+"<literal>allow-downgrade-to-insecure=yes</literal> を個々のリポジトリに設定す"
+"ることでこのエラーを無視させることもできます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted Repositories"
+msgid "Signed Repositories"
+msgstr "信頼済リポジトリ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"APT アーカイブからエンドユーザまでの信頼の輪は、いくつかのステップで構成され"
+"ています。<command>apt-secure</command> は、この輪の最後のステップで、「アー"
+"カイブを信頼する」ということは、パッケージに悪意のあるコードが含まれていない"
+"ことを信頼するということではなく、アーカイブメンテナを信頼するということを意"
+"味します。これは、アーカイブの完全性が保たれていることを保証するのは、アーカ"
+"イブメンテナの責任だということです。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"apt-secure はパッケージレベルの署名検証は行いません。そのようなツールが必要な"
+"場合は、<command>debsig-verify</command> や <command>debsign</command> "
+"(debsig-verify パッケージと devscripts パッケージでそれぞれ提供されています) "
+"を確認してください。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"Debian における信頼の輪は、(例えば) 新しいパッケージやパッケージの新バージョ"
+"ンを、メンテナが Debian アーカイブにアップロードすることから始まります。これ"
+"が有効になるには、アップロードの際に、Debian メンテナキーリング (debian-"
+"keyring パッケージに収録) にあるメンテナのキーで署名する必要があります。メン"
+"テナのキーは、キーの所有者の ID を確保するため、事前に確立した手続きの後で、"
+"他のメンテナに署名されています。同様の手順は、すべての Debian ベースのディス"
+"トリビューションに存在します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"アップロードされたパッケージが検証されてアーカイブに格納されると、メンテナの"
+"署名を取り外し、パッケージのチェックサムを計算して、Packages ファイルに格納し"
+"ます。その後、全 Packages ファイルのチェックサムを計算して、Release ファイル"
+"に格納します。Release ファイルは、その &keyring-distro; リリースのアーカイブ"
+"キーで署名され、&keyring-distro; ミラーサイトでパッケージや Packages ファイル"
+"とともに配布されます。このキーは、<package>debian-archive-keyring</package> "
+"パッケージに収録されている、&keyring-distro; アーカイブキーリングに含まれま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"エンドユーザは誰でも、Release ファイルの署名をチェックし、パッケージのチェッ"
+"クサムを抽出して、手でダウンロードしたパッケージのチェックサムと比較できま"
+"す。また、APT が自動的に行うのに任せることもできます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"以上は、パッケージごとの署名チェックとは違うことに注意してください。以下のよ"
+"うに考えられる 2 種類の攻撃を防ぐよう設計されています。"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>ネットワーク中間者攻撃</literal>。署名をチェックしないと、悪意ある"
+"エージェントがパッケージダウンロードプロセスに割り込んだり、ネットワーク構成"
+"要素 (ルータ、スイッチなど) の制御や、悪漢サーバへのネットワークトラフィック"
+"のリダイレクトなど (ARP スプーフィング攻撃や DNS スプーフィング攻撃) で、悪意"
+"あるソフトウェアを掴まされたりします。"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>ミラーネットワーク感染</literal>。署名をチェックしないと、悪意ある"
+"エージェントがミラーホストに感染し、このホストからダウンロードしたユーザすべ"
+"てに、悪意あるソフトウェアが伝播するようにファイルを変更できます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"しかしこれは、(パッケージに署名する) マスターサーバ自体の侵害や、Release ファ"
+"イルに署名するのに使用したキーの漏洩を防げません。いずれにせよ、この機構は"
+"パッケージごとの署名を補完することができます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr "ユーザ設定"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"<command>apt-key</command> は、リポジトリを信頼するために APT が使用するキー"
+"リストを管理するプログラムです。信頼されたキーのリストにキーを追加または削除"
+"するために使用することができます。キーが署名することができるアーカイブは、"
+"&sources-list; 中の <option>Signed-By</option> を介して制限可能です。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+"デフォルトのインストールでは、すでにデフォルトのリポジトリからセキュアにパッ"
+"ケージを取得するためにすべてのキーが含まれていることに注意してください。その"
+"ため、サードパーティのリポジトリを追加している場合は <command>apt-key</"
+"command> で操作する必要があります。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"新しいキーを追加するためには、まずキーをダウンロードする必要があります (取得"
+"する際には、信頼できる通信チャネルを使用するよう、特に留意してください)。取得"
+"したキーを、<command>apt-key</command> で追加し、<command>apt-get update</"
+"command> を実行してください。以上により、apt は設定済みのアーカイブから、"
+"<filename>InRelease</filename> ファイルや <filename>Release.gpg</filename> "
+"ファイルをダウンロード・検証できるようになります。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Repository Configuration"
+msgstr "ユーザ設定"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+"あなたがメンテナンスしているアーカイブで、アーカイブ署名を提供したい場合、以"
+"下のようにしてください。"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"既に存在しているのでなければ、<emphasis>最上位 Release ファイルを作成してくだ"
+"さい</emphasis>。<command>apt-ftparchive release</command> (apt-utils で提"
+"供) を実行すると、作成できます。"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>署名</emphasis>します。<command>gpg --clearsign -o InRelease "
+"Release</command> や <command>gpg -abs -o Release.gpg Release</command> を実"
+"行して、署名してください。"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>キーのフィンガープリントを公開</emphasis>します。これにより、ユーザ"
+"は、アーカイブ内のファイルを認証するためにインポートする必要があるキーを知る"
+"でしょう。これは、ディストリビューションのアップデートとキーの更新を後で自動"
+"的に行うことができる &keyring-package; を実行する &keyring-distro; のような独"
+"自のキーリングパッケージで鍵を公開するのが最善です。"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+"<emphasis>アーカイブとキーを追加する方法について説明します</emphasis>。ユーザ"
+"がセキュアにキーを取得できない場合は、上述の信頼の輪が壊れています。ユーザの"
+"キー追加を助けることができる方法は、アーカイブとすでに信頼のウェブを活用する"
+"ように (ディストリビューションのデフォルトのリポジトリのように) 設定している"
+"別のアーカイブユーザに含まれたあなたのキーリングパッケージを持つまでは、アー"
+"カイブと対象者に依存します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"アーカイブの内容に変化がある場合 (新しいパッケージの追加や削除)、アーカイブメ"
+"ンテナは前述の最初の 2 ステップに従わなければなりません。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"詳細な背景情報を検証するのなら、Securing Debian Manual (harden-doc パッケージ"
+"にも収録) の <ulink url=\"http://www.debian.org/doc/manuals/securing-debian-"
+"howto/ch7\">Debian Security Infrastructure</ulink> 章や、V. Alex Brennen によ"
+"る <ulink url=\"http://www.cryptnet.net/fdp/crypto/strong_distro.html\" "
+">Strong Distribution HOWTO</ulink> をご覧ください。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "マニュアルページ作者"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"このマニュアルページは Javier Fernández-Sanguino Peña, Isaac Jones, Colin "
+"Walters, Florian Weimer, Michael Vogt の作業を元にしています。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "APT CD-ROM 管理ユーティリティ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"<command>apt-cdrom</command> は利用可能な取得元として、APT のリストに新しい "
+"CD-ROM を追加するのに使用します。<command>apt-cdrom</command> は、ディスクの"
+"構造を測定します。また、焼き損じを可能な限り補正し、インデックスファイルの確"
+"認を行います。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"APT システムに手作業で CD を追加するのは難しいため、<command>apt-cdrom</"
+"command> が必要になります。その上、複数の CD のディスクを 1 枚づつ、焼き損じ"
+"を補正できるか評価しなければなりません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"<literal>add</literal> は、新しいディスクを取得元リストに追加します。CD-ROM "
+"デバイスのアンマウントやディスク挿入のプロンプト表示の後に、ディスクのスキャ"
+"ンとインデックスファイルのコピーを行います。ディスクに正しい <filename>."
+"disk</filename> ディレクトリが存在しない場合、タイトルを入力するよう促しま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"APT は、現在ドライブにあるディスクのトラックから取得した、CD-ROM ID を使用し"
+"ます。またその ID を、<filename>&statedir;/cdroms.list</filename> 内のデータ"
+"ベースで管理します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"格納されているファイル名と現在のディスクが同一かどうかをレポートする、デバッ"
+"グツールです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"CD-ROM パスの自動検出を試行しません。通常、<option>--cdrom</option> オプショ"
+"ンと組み合わせて使います。設定項目: <literal>Acquire::cdrom::AutoDetect</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"マウントポイント - CD-ROM をマウントする場所を指定します。このマウントポイン"
+"トは、<filename>/etc/fstab</filename> に正しく設定されている必要があります。"
+"設定項目: <literal>Acquire::cdrom::mount</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"ディスクの名前変更 - ディスクのラベル変更や、指定したラベルでのラベルの上書き"
+"を行います。このオプションにより、<command>apt-cdrom</command> が新しいラベル"
+"を入力するよう促します。設定項目: <literal>APT::CDROM::Rename</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"マウントなし - <command>apt-cdrom</command> が、マウントポイントにマウント・"
+"アンマウントしないようにします。設定項目: <literal>APT::CDROM::NoMount</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"高速コピー - パッケージファイルが妥当であると仮定し、チェックを全く行いませ"
+"ん。このオプションは、このディスクで以前 <command>apt-cdrom</command> を行っ"
+"ており、エラーを検出しなかった場合のみ使用すべきです。設定項目: "
+"<literal>APT::CDROM::Fast</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"完全パッケージスキャン - 古い Debian 1.1/1.2 のディスクは、パッケージファイル"
+"が違う場所にあるため、このオプションを使う必要があるかもしれません。CD をス"
+"キャンするのに非常に時間がかかりますが、全パッケージファイルを抽出することが"
+"できます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"変更なし - &sources-list; ファイルの変更や、インデックスファイルの書き込みを"
+"行いません。とはいえ、すべてのチェックは行います。設定項目: <literal>APT::"
+"CDROM::NoAct</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> は正常終了時に 0 を返します。エラー時には十進の "
+"100 を返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "APT 設定取得プログラム"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> は、APT スイートの様々な所で一貫した設定を行う"
+"ために使用する、内部プログラムです。スクリプトアプリケーションで使いやすい方"
+"法で、メイン設定ファイル <filename>/etc/apt/apt.conf</filename> にアクセスし"
+"ます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"shell は、シェルスクリプトから設定情報にアクセスするのに使用します。引数とし"
+"て、まずシェル変数、次に取得したい設定値をペアで与えます。出力として、現在の"
+"値ごとのシェル代入コマンドを列挙します。シェルスクリプト内では、以下のように"
+"してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"これは、MyApp::options の値をシェル環境変数 $OPTS にセットします。デフォルト"
+"値は <option>-f</option> となります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"設定項目は /[fdbi] を後ろに付けられます。f はファイル名を、d はディレクトリ"
+"を、b は true か false を、i は整数を返します。返り値ごとに内部で正規化と検証"
+"を行います。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "設定箇所の内容を表示するだけです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"値が空のオプションを含めます。これはデフォルトですので、出力から取り除くには "
+"--no-empty としてください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"各設定オプションの出力を定義します。&percnt;t はオプション名に、&percnt;f は"
+"完全オプション名に、&percnt;v はオプションの値に置換されます。大文字や特殊文"
+"字を使用する値は、安全を保証するために、RFC822 で定義されている quoted-"
+"string でエンコードされることになります。さらに、&percnt;n は改行に、&percnt;"
+"N はタブ文字になります。&percnt; を出力するには、&percnt;&percnt; としてくだ"
+"さい。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> は正常終了時に 0 を返します。エラー時には十進"
+"の 100 を返します。"
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "Debug::* に関する最初のドキュメント"
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "APT の設定ファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"<filename>/etc/apt/apt.conf</filename> は、APT スイートの全ツールで使用するメ"
+"イン設定ファイルです。しかし、間違いなくオプションを設定しておくだけの場所な"
+"どではありません。そのため、APT スイートは統一環境を提供するため、共通のコマ"
+"ンドラインパーサを共有しています。"
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr "APT ツールの起動時に、設定ファイルを以下の順番で読み込みます。"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr "<envar>APT_CONFIG</envar> 環境変数で指定したファイル (存在する場合)"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"<literal>Dir::Etc::Parts</literal> にあるすべてのファイルを英数字の昇順になり"
+"ます。ファイル名には拡張子がないか、\"<literal>conf</literal>\" となってお"
+"り、英数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) で構成されていま"
+"す。そうでなければ、<literal>Dir::Ignore-Files-Silently</literal> 設定リスト"
+"のパターンに一致するもの以外に対して、ファイルを無視するという注意を APT が出"
+"力します。一致する場合は黙って無視します。"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr "<literal>Dir::Etc::Main</literal> で指定される、メイン設定ファイル"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+"バイナリ固有の設定サブツリーに設定されたすべてのオプションは、ツリーのルート"
+"に移動されます。"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"コマンドラインオプションにより、設定ディレクティブの上書きや設定ファイルの追"
+"加読み込みができます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "構文"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"設定ファイルは、機能グループごとに系統立てられたオプションを木構造で表しま"
+"す。オプションの指定は、2 つのコロンで区切ります。例えば <literal>APT::Get::"
+"Assume-Yes</literal> は、APT ツールグループの Get ツール用オプションです。オ"
+"プションは、親グループからは継承しません。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+"設定言語の構文は、bind や dhcp のような ISC ツールをモデルにしています。"
+"<literal>//</literal> で始まる行はコメントとして扱われます (無視)。同様に C/C"
+"++ のコメントのような <literal>/*</literal> と <literal>*/</literal> の間もコ"
+"メントとして扱います。いずれの行も、<literal>APT::Get::Assume-Yes \"true\";</"
+"literal> のような形式です。引用符と行末のセミコロンは必須です。値は1行でなけ"
+"ればならず、文字列結合はありません。値の中にバックスラッシュや余計な引用符が"
+"あってはいけません。オプション名は、英数字と \"/-:._+\" が使用できます。以下"
+"のように波カッコを使うと、新しいスコープを開くことができます。"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+"また適宜改行することで、より読みやすくなります。リストは、開いたスコープ、"
+"クォートで囲まれた 1 単語、そしてセミコロンと続けることで作成できます。セミコ"
+"ロンで区切って、複数のエントリを表せます。"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+"&configureindex; は一般的な設定ファイルのサンプルです。どのように設定するか参"
+"考になるでしょう。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+"設定項目の名前にある文字の大小は、重要ではありません。そのため、前述の例を "
+"<literal>dpkg::pre-install-pkgs</literal> とすることもできます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+"前述した <literal>DPkg::Pre-Install-Pkgs</literal> の例で見られるように、リス"
+"トを定義した場合、設定項目名はオプションになります。名前を指定しない場合、新"
+"しいエントリは、単純に新しいオプションをリストに追加します。名前を指定して同"
+"様にすると、あらゆる他の選択肢をオプションに再割り当てし、オプションを上書き"
+"できます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+"<literal>#include</literal> (これは廃止予定でサポートしない他の実装もありま"
+"す) と <literal>#clear</literal> の 2 つの特別なコマンドがあります。"
+"<literal>#include</literal> は指定したファイルを取り込みます。ファイル名がス"
+"ラッシュで終わった場合には、そのディレクトリをすべて取り込みます。"
+"<literal>#clear</literal> は、設定ツリーの一部を削除するのに使用します。指定"
+"した要素と、それ以下の要素を削除します (これらの行も、セミコロンで終わる必要"
+"があることに注意してください)。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+"<literal>#clear</literal> コマンドは、リストや完全なスコープを削除する唯一の"
+"方法です。スコープの再オープン (や後述する <literal>::</literal> スタイル)"
+"は、それまで書いたエントリを<emphasis>上書きしません</emphasis>。オプションで"
+"は新しい値を与えて上書きするしかありませんが、リストやスコープは上書きできま"
+"せん。クリアされるだけです。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+"すべての APT ツールでは、コマンドラインで任意の設定ディレクティブを指定でき"
+"る -o オプションが使用できます。構文は、完全なオプション名 (例: "
+"<literal>APT::Get::Assume-Yes</literal>) に続き等号、その後オプションの新しい"
+"値となります。リスト名に続き <literal>::</literal> を加えることで、リストを追"
+"加できます (疑問に思われたように、スコープ構文はコマンドラインで使用できませ"
+"ん)。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+"<literal>::</literal> を用いたリストへの項目追加は、1 行で 1 項目の場合にのみ"
+"使用でき、スコープ構文と組み合わせるべきではないことに注意してください (ス"
+"コープ構文には暗黙で <literal>::</literal> が追加されます)。両方の構文を同時"
+"に使用すると、「他のオプションと同様に名前と共に動作する、通常ではありえない"
+"名前 \"<literal>::</literal>\" のオプションである」といった、(残念なことに) "
+"複数のユーザに渡るバグの引き金になります。たくさんの問題の中には、リストに追"
+"加しようと<emphasis>誤った</emphasis>構文で複数行書いたユーザが、このオプショ"
+"ン \"<literal>::</literal>\" を最後に割り当てようとして、正反対の結果を得ると"
+"いうことも含まれます。APT の次期バージョンでは、この誤用を検出すると、動作を"
+"停止しエラーを上げるようになります。そのため、APT がこの件で明白にエラーを吐"
+"かない限りは、自分でそのような構文を修正してください。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr "APT グループ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+"このオプショングループは、ツール全体に影響のある、一般的な APT の振る舞いを制"
+"御します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+"システムアーキテクチャ - ファイルを取得したり、パッケージリストを解析するとき"
+"に使用するアーキテクチャをセットします。内部でのデフォルトは、apt をコンパイ"
+"ルしたアーキテクチャです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+"システムがサポートする、すべてのアーキテクチャです。例えば、<literal>amd64</"
+"literal> (<literal>x86-64</literal> とも呼ばれます) 命令セットを実装した CPU "
+"は、<literal>i386</literal> (<literal>x86</literal>) 命令セット用にコンパイル"
+"されたバイナリも実行できます。このリストは、ファイルを取得しパッケージリスト"
+"を解析する際に利用されます。初期のデフォルト値は、常にシステムのネイティブ"
+"アーキテクチャ (<literal>APT::Architecture</literal>) です。<command>dpkg --"
+"add-architecture</command> を用いて、外部アーキテクチャをデフォルトリストに追"
+"加します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+"この設定項目ではどの圧縮形式をサポートするのか、その形式のサポートが apt に直"
+"接組み込まれていない場合に圧縮と展開をどのように行えばいいのか、それとこの形"
+"式で何か圧縮するのにどれくらいコストがかかるのか、という値を定義します。1つの"
+"例として、以下の内容では拡張子が <literal>.reversed</literal> のコストの低い"
+"ファイルについて、ファイルの作成と保存に加えてダウンロードと展開を apt に許可"
+"し、<command>rev</command> による圧縮と展開の際に渡すコマンドラインパラメータ"
+"を追加しない設定となります:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+"構築依存の解決にあたって有効になっているビルドプロファイルを名前空間の"
+"「<literal>profile.</literal>」接頭辞を取り除いたもの全ての一覧です。デフォル"
+"トではこの一覧は空です。&dpkg-buildpackage; で利用される "
+"<envar>DEB_BUILD_PROFILES</envar> はこの一覧よりも優先されます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+"ひとつ以上のバージョンがある場合に、パッケージをインストールを行うデフォルト"
+"リリースです。リリース名や、コード名、リリースバージョンがあります。例えば "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*' となります。&apt-preferences; も参照してく"
+"ださい。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+"保留パッケージの無視 - このグローバルオプションは、問題解決器に保留と指定した"
+"パッケージを無視します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+"デフォルトで有効です。on の時、autoclean 機能は、ダウンロードできなくなった"
+"パッケージを、すべてキャッシュから削除します。off の場合、ローカルにインス"
+"トールされているパッケージは、削除対象から外します。しかし、 APT はキャッシュ"
+"から削除したパッケージの再インストール方法を、直接提供するわけではないことに"
+"注意してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+"デフォルトは on です。&dpkg; の呼び出し失敗の影響を最小限にするため、インス"
+"トール・更新操作の中で、APT は不可欠パッケージや重要パッケージを、可能な限り"
+"早くインストールするようになります。このオプションを無効にすると、以下のよう"
+"に、重要パッケージを特別パッケージと同様に扱うようになります。パッケージ A の"
+"展開とその設定の間に、パッケージ B や C などの関係ない、たくさんの他のパッ"
+"ケージの展開と設定が行えます。&dpkg; の呼び出しに失敗した場合 (例: パッケー"
+"ジ B のメンテナスクリプトでエラー発生)、システムの状態は、パッケージ A は展開"
+"したが未設定になります。そのため、A に依存したパッケージの動作が保証されなく"
+"なり、A への依存関係は、もう満たせません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+"即時 (immediate) フラグは事前依存関係と等価なため、即時設定マーカも潜在的に、"
+"循環依存関係の問題に対して適用されます。理論上 APT は、即時設定不能と認識し、"
+"中断し、操作を継続するためにこのオプションを一時的に無効にするよう提案できま"
+"す。ここで言う「理論上」という言葉に注意してください。現実世界では、安定版で"
+"はないバージョンでも、この問題にはほとんど遭遇していませんし、問題のパッケー"
+"ジの依存関係が誤っているか、システムの状態がすでに破損している場合に発生して"
+"いました。そのため、盲目的にこのオプションを無効にするべきではありません。前"
+"述のシナリオを解決する方法の、1つにしかすぎないのです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+"このオプションを無効にして <literal>dist-upgrade</literal> のような大きな操作"
+"を実行する前に、パッケージに <literal>install</literal> を明示して、即時設定"
+"が行われないようにするべきです。ですが、動作の改善とアップグレードプロセスの"
+"修正のため、以下のバグリンクから、問題をディストリビューションと APT チームに"
+"も報告していただきたいです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+"何をしようとしているのか<emphasis>本当に</emphasis>判っているのでなければ、絶"
+"対にこのオプションを有効にしないでください。不可欠 (essential) パッケージ同士"
+"で、競合 (Conflicts) /競合や競合/事前依存 (Pre-Depend) のループに落ち込んだと"
+"きに、不可欠パッケージを一時的に削除してループを抜けられるようにします。"
+"<emphasis>そんなループはあり得ないはずで、あるとすれば重大なバグです。</"
+"emphasis>このオプションは、<command>tar</command>, <command>gzip</command>, "
+"<command>libc</command>, <command>dpkg</command>, <command>dash</command> と"
+"それらが依存しているパッケージ以外の不可欠パッケージで動作します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+"APT は、バージョン 0.7.26 から、利用できる情報を格納するため、サイズ可変なメ"
+"モリマップキャッシュファイルを使用します。<literal>Cache-Start</literal> は、"
+"キャッシュサイズが増大していくヒントとして動作し、従って APT が起動時に要求す"
+"るメモリ量です。デフォルト値は、20971520 バイト (~20 MB) です。この領域の量"
+"が、APT に利用可能になっている必要があることに注意してください。そうでなけれ"
+"ば、無様に失敗することになります。そのため、メモリに制限のあるデバイスで、た"
+"くさんのソースが設定され、それが増加していくシステムでは、この値をより低くし"
+"ておくべきです。<literal>Cache-Grow</literal> は、<literal>Cache-Start</"
+"literal> が足りなくなったという領域定義イベントにより、どの程度キャッシュサイ"
+"ズを増加させるかを、バイト数で定義します。デフォルトは 1048576 (~1 MB) です。"
+"この値は全情報を格納できる量になるか、<literal>Cache-Limit</literal> に達する"
+"まで、繰り返し適用されます。<literal>Cache-Limit</literal> のデフォルトは 0 "
+"で、無制限です。<literal>Cache-Grow</literal> に 0 をセットすると、キャッシュ"
+"の自動増加を無効にします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr "構築依存関係で不可欠なパッケージを定義します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+"Get サブセクションは &apt-get; ツールを制御します。このオプションの詳細は "
+"&apt-get; の文書を参照してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"Cache サブセクションは &apt-cache; ツールを制御します。このオプションの詳細"
+"は &apt-cache; の文書を参照してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"CDROM サブセクションは &apt-cdrom; ツールを制御します。このオプションの詳細"
+"は &apt-cdrom; の文書を参照してください。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr "Acquire グループ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+"オプションの <literal>Acquire</literal> グループは、パッケージのダウンロード"
+"やダウンロードに関して責任を持つ、様々な「取得 (acquire) 方法」 を制御します "
+"(&sources-list; も参照)。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Maximum time (in seconds) after its creation (as indicated by the "
+#| "<literal>Date</literal> header) that the <filename>Release</filename> "
+#| "file should be considered valid. If the Release file itself includes a "
+#| "<literal>Valid-Until</literal> header the earlier date of the two is used "
+#| "as the expiration date. The default value is <literal>0</literal> which "
+#| "stands for \"valid forever\". Archive specific settings can be made by "
+#| "appending the label of the archive to the option name. Preferably, the "
+#| "same can be achieved for specific &sources-list; entries by using the "
+#| "<option>Valid-Until-Max</option> option there."
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+"<filename>Release</filename> ファイルを作成してから (<literal>Date</literal> "
+"ヘッダ)、有効であるとみなせる最大時間 (秒数) です。Release ファイル自体に "
+"<literal>Valid-Until</literal> ヘッダがある場合、その 2 つのうち、より早い日"
+"付が有効期間として使用されます。デフォルト値は <literal>0</literal> で「無期"
+"限」を表します。オプション名にアーカイブのラベルを付与することで、アーカイブ"
+"固有の設定を作成できます。または、<option>Valid-Until-Max</option> オプション"
+"を使用して特定の &sources-list; エントリで同じことを達成できます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+"セキュリティ関連のオプションで、デフォルトは true です。Release ファイルの有"
+"効期限検証により、長期間のリプレイ攻撃を防ぎます。さらに、例えばユーザが、も"
+"う更新されないミラーサイトを識別するのを支援します。しかしこの機能は、ユーザ"
+"のシステム時計が正確であることに依存しています。アーカイブメンテナは、"
+"<literal>Valid-Until</literal> ヘッダがある Release ファイルを作成するよう推"
+"奨されていますが、このヘッダを付与しない、またはより厳密な値が必要な場合、以"
+"下の <literal>Max-ValidTime</literal> オプションを使用できます。&sources-"
+"list; エントリの <option>Check-Valid-Until</option> オプションは、グローバル"
+"オーバーライドを使う代わりに選択的にチェックを無効にすることが好ましいです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+"<filename>Release</filename> ファイルを作成してから (<literal>Date</literal> "
+"ヘッダ)、有効であるとみなせる最大時間 (秒数) です。Release ファイル自体に "
+"<literal>Valid-Until</literal> ヘッダがある場合、その 2 つのうち、より早い日"
+"付が有効期間として使用されます。デフォルト値は <literal>0</literal> で「無期"
+"限」を表します。オプション名にアーカイブのラベルを付与することで、アーカイブ"
+"固有の設定を作成できます。または、<option>Valid-Until-Max</option> オプション"
+"を使用して特定の &sources-list; エントリで同じことを達成できます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+"<filename>Release</filename> ファイルを作成してから (<literal>Date</literal> "
+"ヘッダ)、有効であるとみなせる最小時間 (秒数) です。<literal>Valid-Until</"
+"literal> がある頻繁に更新されるアーカイブの、ほとんど更新されない (ローカル) "
+"ミラーを使用する場合に、完全に有効期限チェックを無効にする代わりに使用してく"
+"ださい。オプション名にアーカイブのラベルを付与することで、アーカイブ固有の設"
+"定を作成できます。または、<option>Valid-Until-Min</option> オプションを使用し"
+"て特定の &sources-list; エントリで同じことを達成できます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+"(<filename>Packages</filename> のような) インデックス全体をダウンロードするの"
+"ではなく、<literal>PDiffs</literal> と呼ばれる差分をダウンロードしようとしま"
+"す。デフォルトでは True です。または、<option>PDiffs</option> オプションを使"
+"用して特定の &sources-list; エントリまたはインデックスファイルでこれを設定で"
+"きます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+"PDiffs の使用を制限するふたつのサブオプションがあります。<literal>FileLimit</"
+"literal> では、ファイルを更新するのに、PDiff ファイルをダウンロードできる最大"
+"数を指定します。一方、<literal>SizeLimit</literal> は、対象ファイルのサイズに"
+"対して、全パッチサイズの最大パーセンテージを指定します。どちらの制限を超えて"
+"も、パッチをダウンロードする代わりに、完全なファイルをダウンロードします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+"(<filename>Packages</filename> のような) インデックス全体をダウンロードするの"
+"ではなく、<literal>PDiffs</literal> と呼ばれる差分をダウンロードしようとしま"
+"す。デフォルトでは True です。または、<option>By-Hash</option> オプションを使"
+"用して特定の &sources-list; エントリまたはインデックスファイルでこれを設定で"
+"きます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+"キューモード - <literal>Queue-Mode</literal> は、APT がどのように並列接続を行"
+"うか、<literal>host</literal> か <literal>access</literal> で指定できます。"
+"<literal>host</literal> は、ターゲットホストごとに 1 接続を開きます。"
+"<literal>access</literal> は、URI タイプごとに 1 接続を開きます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+"リトライの回数を設定します。0 でない場合、APT は失敗したファイルに対して、与"
+"えられた回数だけリトライを行います。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+"ソースアーカイブのシンボリックリンクを使用します。true がセットされていると"
+"き、可能ならコピーの代わりにシンボリックリンクを張ります。true がデフォルトで"
+"す。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+"<literal>ftp::Proxy</literal> は、FTP URI を使用する際のデフォルトプロキシを"
+"設定します。<literal>ftp://[[user][:pass]@]host[:port]/</literal> という標準"
+"形で表します。ホストごとのプロキシを、<literal>ftp::Proxy::&lt;host&gt;</"
+"literal> という形で指定できます。この時、プロキシを使用しないという意味の特殊"
+"キーワード <literal>DIRECT</literal> も使用できます。上記の設定をなにも指定し"
+"ないと、環境変数 <envar>ftp_proxy</envar> を使用します。FTP プロキシを使用す"
+"るには、設定ファイルに <literal>ftp::ProxyLogin</literal> スクリプトを設定す"
+"る必要があります。このエントリには、接続する際にプロキシサーバに送信するコマ"
+"ンドを設定します。どのようにするのかは &configureindex; の例を参照してくださ"
+"い。URI を構成するコンポーネントに対応する置換変数は、<literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal>, <literal>$(SITE_PORT)</literal> です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+"<literal>timeout</literal> オプションは、この方法でのタイムアウトまでの時間を"
+"設定します。これには、接続のタイムアウトとデータのタイムアウトが含まれていま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+"設定のいくつかは、パッシブモードを制御するものです。一般的に、パッシブモード"
+"のままにしておく方が安全で、ほぼどんな環境でも動作します。しかしある状況下で"
+"は、パッシブモードが無効のため、代わりにポートモード FTP を使用する必要があり"
+"ます。この設定は、プロキシを通る接続や特定のホストへの接続全般に有効です (設"
+"定例はサンプル設定ファイルを参照してください)。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+"環境変数 <envar>ftp_proxy</envar> に HTTP URL を指定すると FTP over HTTP のプ"
+"ロキシが利用可能になります。構文は前述の http についての説明を参照してくださ"
+"い。設定ファイルの中でこれをセットすることはできません。また、効率が悪いため "
+"FTP over HTTP を使用するのは推奨しません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+"<literal>ForceExtended</literal> の設定は RFC2428 の <literal>EPSV</literal> "
+"コマンドと <literal>EPRT</literal> コマンドの使用を制御します。デフォルトで"
+"は false で、コントロールコネクションが IPv6 の時にのみ、このコマンドを使用す"
+"るということです。これを true にセットすると、IPv4 コネクションでも、強制的に"
+"このコマンドを使用します。ほとんどの FTP サーバは RFC2428 をサポートしていな"
+"いことに注意してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr "/cdrom/::Mount \"foo\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+"<literal>cdrom</literal> メソッドを利用する URI では、設定できるオプションは"
+"マウントポイントだけです。<filename>/etc/fstab</filename> で設定されているよ"
+"うに、CD-ROM (または DVD など) ドライブのマウントポイントを <literal>cdrom::"
+"Mount</literal> に設定しなければなりません。マウントポイントが fstab に記述で"
+"きない場合、かわりにマウント・アンマウントコマンドも使用できます。構文は、"
+"<literal>cdrom</literal> ブロックを <placeholder type=\"literallayout\" id="
+"\"0\"/> の形で記述します。スラッシュを後につけるのが重要です。アンマウントコ"
+"マンドは UMount で指定することができます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+"GPGV URI 用の唯一のオプションは、gpgv に渡す追加パラメータのオプションであ"
+"る、<literal>gpgv::Options</literal> です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+"acquire メソッドが理解できる、圧縮法のリストです。<filename>Packages</"
+"filename> のようなファイルにはさまざまな圧縮形式が利用できます。デフォルトで "
+"acquire メソッドは、<command>xz</command> や <command>gzip</command> 等の一般"
+"的な多くの圧縮形式で展開、再圧縮できます。この設定項目ではサポートする圧縮形"
+"式を参照、変更でき、サポートする圧縮形式をさらに追加することもできます (関連"
+"項目 <option>APT::Compressor</option>)。<placeholder type=\"synopsis\" id="
+"\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+"また、<literal>Order</literal> サブグループを使用して、取得システムが、圧縮"
+"ファイルのダウンロードを試みる順番を定義できます。取得システムは先頭のものを"
+"試行し、エラーが発生すると次の圧縮タイプのダウンロードを開始します。そのた"
+"め、どれかを他のものより優先したい場合、単にそのタイプを先頭に追加してくださ"
+"い。まだ追加していないタイプは、リストの最後に追加されます。つまり、"
+"<placeholder type=\"synopsis\" id=\"0\"/> とすると、<command>gzip</command> "
+"で圧縮されたファイルを他のどれよりも優先的に使用します。もし <command>xz</"
+"command> を <command>gzip</command> や <command>bzip2</command> よりも優先す"
+"るべきなら、設定を以下のようにしてください。<placeholder type=\"synopsis\" "
+"id=\"1\"/> <literal>bz2</literal> は自動的に追加されるため、明示する必要はあ"
+"りません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+"実行時に <literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> "
+"をチェックすることに注意してください。このオプションが設定されていてその形式"
+"のサポートが apt に直接組み込まれていない場合、ファイルがある場合に、この方法"
+"しか使われなくなります。例えば、bzip2 メソッド (内蔵) の設定は以下になりま"
+"す。<placeholder type=\"literallayout\" id=\"0\"/> また、コマンドラインに指定"
+"した一覧のエントリは設定ファイルに指定したものの後、デフォルトエントリの前に"
+"追加されることに注意してください。この場合、設定ファイルに指定した内容よりも"
+"前に指定するには、オプションを直接 (一覧スタイルでなく) 指定してください。こ"
+"れは定義されている一覧を上書きするのではなく、このタイプを先頭に付加するだけ"
+"です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+"特殊なタイプ <literal>uncompressed</literal> は、非圧縮ファイルを優先するため"
+"に使用できますが、ほとんどのアーカイブは非圧縮ファイルを提供しないため、ほと"
+"んどローカルミラーでのみ有効になることに注意してください。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+"<literal>gzip</literal> 圧縮インデックス (Packages, Sources, Translations) を"
+"ダウンロードする際、ローカルで展開せずに、gzip で圧縮したままにします。これに"
+"より、かなりディスク領域を節約できますが、ローカルパッケージキャッシュを構築"
+"する際に、CPU の能力を余計に消費します。デフォルトでは false です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+"Languages サブセクションは、<filename>Translation</filename> ファイルをダウン"
+"ロードし、APT が説明の翻訳を表示しようとする場合の挙動を制御します。APT はリ"
+"ストの先頭にある言語で、まず有効な説明を表示しようとします。Languages は 短い"
+"形式や長い形式の言語コードで、定義できます。すべてのアーカイブが、全言語の "
+"<filename>Translation</filename> ファイルを、提供しているわけではないことに注"
+"意してください。長い言語コードは特に見かけません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"デフォルトのリストには \"environment\" と \"en\" がありま"
+"す。\"<literal>environment</literal>\" はここでは特殊な意味があります。これは"
+"実行時に、<literal>LC_MESSAGES</literal> 環境変数から取得した言語コードに置換"
+"されます。また、このリストには、同じコードが2度現れないように確認してくださ"
+"い。<literal>LC_MESSAGES</literal> が \"C\" に設定されているだけの場合、"
+"<filename>Translation-en</filename> ファイルを (利用可能であれば) 使用しま"
+"す。強制的に APT が Translation ファイルを使用しないようにするには、"
+"<literal>Acquire::Languages=none</literal> と設定してくださ"
+"い。\"<literal>none</literal>\" はもうひとつの特殊な意味を持つコードで、適切"
+"な <filename>Translation</filename> ファイルの検索を中止します。環境から実際"
+"の言語を指定されなかった場合、この値を用いて APT に翻訳をダウンロードさせま"
+"す。そのため、以下の設定例では、英語ロケールの場合 \"en, de\" の順になり、ド"
+"イツ語ロケールの場合 \"de, en\" の順になります。\"fr\" はダウンロードされます"
+"が、フランス語ロケール (\"fr, de, en\" の順になる) でないと、APT が使用しない"
+"ことに注意してください。<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+"注意: 異なる環境 (例: 異なるユーザや他のプログラム) で APT を実行したことによ"
+"る問題を防ぐため、<filename>/var/lib/apt/lists/</filename> にあるすべての "
+"Translation ファイルを、リストの最後 (暗黙の \"<literal>none</literal>\" の"
+"後) に追加します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr "ダウンロード時に IPv4 プロトコルだけを使うように強制します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr "ダウンロード時に IPv6 プロトコルだけを使うように強制します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+"Release/Release.gpg/InRelease ファイルの最大ファイルサイズです。デフォルトは "
+"10MB です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+"apt が 接続するための代替サーバを選択するために RFC 2782 で指定された DRS "
+"SRV サーバレコードを使う場合は、このオプションを制御します。デフォルトは "
+"\"true\" です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+"十分なセキュリティ情報を提供していないリポジトリからのデータファイル読み込み"
+"を行う更新操作を許可します。デフォルトは「<literal>false</literal>」です。概"
+"念や影響、代替手段については &apt-secure; で説明しています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"セキュリティ情報を提供してはいるものの暗号的に十分に強いものとは見なされなく"
+"なっている場合に、そういったリポジトリからのデータファイル読み込みを行う更新"
+"操作を許可します。デフォルトは「<literal>false</literal>」です。概念や影響、"
+"代替手段については &apt-secure; で説明しています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"以前に GPG 署名されたリポジトリが、更新操作中に署名なしにすることを許可しま"
+"す。以前に信頼されたリポジトリの有効な署名が存在しない場合、更新を拒否しま"
+"す。このオプションは、この保護を無効にするために使用することができます。ほぼ"
+"確実に、これを有効にすることはありません。デフォルトは <literal>false</"
+"literal> です。概念や影響、代替手段については &apt-secure; で説明しています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr "スコープ"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+"URI は、それらを取得する場所から知られている場合は、変更履歴の取得のみ行うこ"
+"とができます。好ましいリリースファイルは、「変更履歴」フィールドでこのことを"
+"示します。これが利用できない場合、<literal>Acquire::Changelogs::URI::Label::"
+"<replaceable>LABEL</replaceable></literal> または <literal>Acquire::"
+"Changelogs::URI::Origin::<replaceable>ORIGIN</replaceable></literal> オプショ"
+"ンが存在し、そしてこの値が取られてる場合は、リリースファイルの Label/Origin "
+"フィールドが確認するために使用されます。リリースファイル内の値は、"
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> または <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal> で上書きできます。その"
+"パッケージ固有のデータが <literal>@CHANGEPATH@</literal> プレースホルダに置き"
+"換えられている場合以外は、値はテキストファイルへの正常な URI にする必要があり"
+"ます。値は次の通りです: 1. パッケージがコンポーネント (例えば、"
+"<literal>main</literal>) からのものである場合、それ以外の場合は省略されている"
+"最初の部分です、2. ソースパッケージ名の最初の文字。ただし、ソースパッケージ名"
+"が '<literal>lib</literal>' で始まる場合を除きます (その場合は 最初の 4 文字"
+"になります)。3. 完全なソースパッケージ名。4. 再び完全な名前および 5. ソースの"
+"バージョン。(存在する場合は) 最初、第二、第三、第四の部分はスラッシュ "
+"('<literal>/</literal>') で区切られ、第四と第五の部分の間はアンダースコア "
+"('<literal>_</literal>') です。このソースから変更履歴を取得することができない"
+"ことを示す特別な値 '<literal>no</literal>' がこのオプションで利用可能です。こ"
+"の場合、可能であれば別のソースが試行されます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr "バイナリユーザ設定"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+"特に、<command>apt</command> のバイナリの導入では、<option>APT::Get::Show-"
+"Versions</option> が <command>apt</command> と同様に <command>apt-get</"
+"command> に効果を与えるように、特定のバイナリのみに影響を与えるように見えるオ"
+"プションであっても、特定のバイナリのために特定のオプションを設定することは有"
+"用であり得ます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+"特定のバイナリ用のオプション設定は、<option>Binary::<replaceable>specific-"
+"binary</replaceable></option> スコープ内でオプションを設定して達成することが"
+"できます。 <command>apt</command> 用の<option>APT::Get::Show-Versions</"
+"option> オプションの設定は、例えば、<option>Binary::apt::APT::Get::Show-"
+"Versions</option> 設定の代わりに実行されることができます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+"さらに上記の説明の節に見られるように、コマンドライン上のオプション自体または"
+"コマンドラインからロードされた設定ファイル中でバイナリ固有のオプションを設定"
+"することはできません。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr "ディレクトリ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+"<literal>Dir::State</literal> セクションは、ローカル状態情報に関するディレク"
+"トリを保持します。<literal>lists</literal> は、ダウンロードしたパッケージ一覧"
+"を格納するディレクトリで、<literal>status</literal> は &dpkg; の状態ファイル"
+"の名前を表します。<literal>preferences</literal> は APT の "
+"<filename>preferences</filename> ファイルの名前です。<literal>Dir::State</"
+"literal> には、<filename>/</filename> や <filename>./</filename> で始まらない"
+"サブアイテムすべてに、前に付加するデフォルトディレクトリを含んでいます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+"<literal>Dir::Cache</literal> は、ローカルキャッシュ情報に関する場所を格納し"
+"ています。これは、ダウンロード済アーカイブの場所を示す <literal>Dir::Cache::"
+"archives</literal> と同様に、<literal>srcpkgcache</literal> と "
+"<literal>pkgcache</literal> のパッケージキャッシュの場所になります。"
+"<literal>pkgcache</literal> や <literal>srcpkgcache</literal> に <literal>"
+"\"\"</literal> をセットすることで、キャッシュの生成を無効にできます。これによ"
+"り起動時に遅くなりますが、ディスク容量を節約できます。おそらく、srcpkgcache "
+"よりも pkgcache を無効にすることが多いと思います。<literal>Dir::State</"
+"literal> と同様、<literal>Dir::Cache</literal> はデフォルトディレクトリを含ん"
+"でいます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+"<literal>Dir::Etc</literal> は設定ファイルの場所を格納しています。"
+"<literal>sourcelist</literal> はソースリストの場所を示し、<literal>main</"
+"literal> はデフォルトの設定ファイルです。(<envar>APT_CONFIG</envar> で設定"
+"ファイルを指定された場合のみ、この設定の効果があります)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+"<literal>Dir::Parts</literal> 設定は、指定されたディレクトリから、字句単位の"
+"全ての設定断片を読みこみます。これを設定した後に、メイン設定ファイルをロード"
+"します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+"バイナリプログラムは <literal>Dir::Bin</literal> で指定します。<literal>Dir::"
+"Bin::Methods</literal> はメソッドハンドラの場所を指定し、<literal>gzip</"
+"literal>, <literal>bzip2</literal>, <literal>lzma</literal>, <literal>dpkg</"
+"literal>, <literal>apt-get</literal> <literal>dpkg-source</literal> "
+"<literal>dpkg-buildpackage</literal>, <literal>apt-cache</literal> はそれぞれ"
+"プログラムの場所を指定します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+"設定項目 <literal>RootDir</literal> は特別な意味を持ちます。設定されている"
+"と、すべてのパスは <emphasis>絶対パスとして指定しても</"
+"emphasis><literal>RootDir</literal> からの相対パスとなります。そのため例え"
+"ば、<literal>RootDir</literal> が <filename>/tmp/staging</filename> にセット"
+"されており、<literal>Dir::State::status</literal> が <filename>/var/lib/dpkg/"
+"status</filename> にセットされている場合、status ファイルを <filename>/tmp/"
+"staging/var/lib/dpkg/status</filename> から探します。相対バスのみをプレフィッ"
+"クスにしたい場合は、代わりに <literal>Dir</literal> を設定します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+"<literal>Ignore-Files-Silently</literal> リストは、断片ディレクトリの解析中"
+"に、APT が黙って無視をするファイルを指定します。デフォルトではそれぞれ、"
+"<literal>.disabled</literal>, <literal>~</literal>, <literal>.bak</literal>, "
+"<literal>.dpkg-[a-z]+</literal> で終わるものが、黙って無視されます。最後のデ"
+"フォルト値を見ればわかる通り、このパターンには正規表現を使用できます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr "DSelect での APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+"&dselect; メソッドで APT を使用する際、いくつかの設定ディレクティブでデフォル"
+"トの動作を制御します。これは <literal>DSelect</literal> セクション以下にあり"
+"ます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+"キャッシュクリーンモード - この値は <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal>, <literal>never</literal> のうちひとつを取ります。<literal>always</"
+"literal> と <literal>prompt</literal> は更新後、全パッケージをキャッシュから"
+"削除します。<literal>prompt</literal> (デフォルト) では条件付きで削除します。"
+"<literal>auto</literal> はダウンロード不能パッケージ (例えば新バージョンで置"
+"き換えられたもの) を削除します。<literal>pre-auto</literal> はこの動作を、新"
+"パッケージをダウンロードする直前に行います。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+"この変数の内容は、install 時のコマンドラインオプションと同様に &apt-get; に渡"
+"されます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+"この変数の内容は、update 時のコマンドラインオプションと同様に &apt-get; に渡"
+"されます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+"true の場合、&dselect; の [U]pdate 実行時に、続行のためのプロンプトを毎回表示"
+"します。デフォルトはエラーが発生した場合のみです。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr "APT が &dpkg; を呼ぶ方法"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+"いくつかの設定項目で APT がどのように &dpkg; を呼び出すかを制御できます。"
+"<literal>DPkg</literal> セクションにあります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+"&dpkg; に渡すオプションのリストです。オプションは、リスト記法を使用して指定し"
+"なければなりません。また、各リストは単一の引数として &dpkg; に渡されます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+"&dpkg; を呼び出す前後で実行するシェルコマンドのリストです。<literal>options</"
+"literal> のようにリスト記法で指定しなければなりません。コマンドは <filename>/"
+"bin/sh</filename> を通して呼び出され、何か問題があれば APT が異常終了します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+"&dpkg; を呼び出す前に実行するシェルコマンドのリストです。<literal>options</"
+"literal> のようにリスト記法で指定しなければなりません。コマンドは <filename>/"
+"bin/sh</filename> を通して呼び出され、何か問題があれば、APT は異常終了しま"
+"す。APT はインストールしようとする全 .deb ファイルのファイル名を、要求した"
+"ファイルディスクリプタについて1 行ずつ、デフォルトではコマンドの標準入力に送"
+"ります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+"このプロトコルのバージョン 2 は、要求されたファイルディスクリプタを介してより"
+"多くの情報を送信します: テキスト <literal>VERSION 2</literal> の行、APT 設定"
+"空間、ファイル名とバージョン情報を持つパッケージ処理のリスト。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+"各設定ディレクティブ行は、<literal>key=value</literal> 形式です。特殊文字 "
+"(<literal>key</literal> 中のイコール記号、改行、非印字可能文字、引用符、およ"
+"びパーセント記号、および <literal>value</literal> 中の改行、非印字可能文字、"
+"およびパーセント記号) は、% エンコードされます。リストは、同じキーを持つ複数"
+"の<literal>key::=value</literal> 行で表されます。設定セクションは、空白行で終"
+"わります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+"バージョン 2 ではパッケージアクション行は 5 つのフィールドで構成されていま"
+"す: パッケージ名 (例え外国だとしてもアーキテクチャ資格なしで)、旧バージョン、"
+"バージョン変更の方向 (&lt; アップグレード、&gt; ダウングレード、= 変化なし)、"
+"新バージョン、処理。バージョンなしの場合は、バージョンフィールドはすべて \"-"
+"\" です (例えば、初めてパッケージをインストール時、バージョンなしは、任意の実"
+"際のバージョンよりも前として扱われます。そのため、<literal>- &lt; 1.23.4</"
+"literal>はアップグレードとなります)。パッケージが設定されている場合のアクショ"
+"ンフィールドは \"**CONFIGURE**\" で、削除されている場合は \"**REMOVE**\" 、解"
+"凍されている場合は .deb ファイルのファイル名です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+"バージョン 3 では、各バージョンフィールドの後に、このバージョンのアーキテク"
+"チャが続きます。バージョンなしの場合は \"-\" 、そして MultiArch 型 \"same"
+"\"、\"foreign\"、\"allowed\" または \"none\" を示すフィールド。\"none\" は単"
+"に互換性を維持するために残された、誤った型名であることに注意してください。そ"
+"れは\"no\" と読まれるべきで、ユーザは両方をサポートすることをお勧めします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+"コマンド <literal><replaceable>cmd</replaceable></literal> で利用するプロトコ"
+"ルのバージョンは <literal>DPkg::Tools::options::<replaceable>cmd</"
+"replaceable>::Version</literal> の設定により選択でき、デフォルトはバージョン "
+"1 となっています。リクエストしたバージョンを APT がサポートしていない場合はサ"
+"ポートしている最大のバージョンの情報を代わりに送ります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+"情報の送信に利用するファイルディスクリプタは <literal>DPkg::Tools::options::"
+"<replaceable>cmd</replaceable>::InfoFD</literal> によりリクエストでき、デフォ"
+"ルトは <literal>0</literal> で標準入力を指定します。バージョン 0.9.11 から利"
+"用可能となりました。環境変数 <envar>APT_HOOK_INFO_FD</envar> を見ることでこの"
+"オプションに対応していることを検出でき、それには確認として利用しているファイ"
+"ルディスクリプタの番号が収録されています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+"APT は &dpkg; を呼び出す前にこのディレクトリに移動します。デフォルトは "
+"<filename>/</filename> です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+"これらのオプションは、パッケージのコンパイル時に &dpkg-buildpackage; に渡され"
+"ます。デフォルトでは署名を無効にし、全バイナリを生成します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+"このオプションがセットされると、&dpkg; にすべての必要な設定とトリガを扱わせる"
+"ように、APT は <command>dpkg --configure --pending</command> を呼び出します。"
+"このオプションは、デフォルトで有効となっていますが、APT を複数回連続して実行"
+"する場合 (インストーラなど) には、無効にしたほうが便利かもしれません。このシ"
+"ナリオでは、最後以外のすべての実行で、無効にできます。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr "Periodic オプションと Archives オプション"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+"オプションの <literal>APT::Periodic</literal> グループと <literal>APT::"
+"Archives</literal> グループは、<literal>/usr/lib/apt/apt.systemd.daily</"
+"literal> スクリプトを使用して、apt の定期更新の挙動を設定します。このオプショ"
+"ンのドキュメントは、このスクリプトの先頭を参照してください。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr "デバッグオプション"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+"<literal>Debug::</literal> セクションのオプションを有効にすると、"
+"<literal>apt</literal> ライブラリを利用するプログラムの標準エラー出力に、デ"
+"バッグ情報を送るようになったり、主に <literal>apt</literal> の挙動をデバッグ"
+"するのに便利な、特殊モードを有効にしたりできます。普通のユーザには、ほとんど"
+"のオプションは興味がないでしょうが、以下のものは興味を引くかもしれません。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+"<literal>Debug::pkgProblemResolver</literal> は、<literal>dist-upgrade, "
+"upgrade, install, remove, purge</literal> で行われた判断についての出力を有効"
+"にします。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+"<literal>Debug::NoLocking</literal> はファイルロックをすべて無効にします。こ"
+"れは、非 root ユーザとして操作 (例えば <literal>apt-get -s install</"
+"literal>) を行う場合に使用します。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+"<literal>Debug::pkgDPkgPM</literal> は <literal>apt</literal> が実際に "
+"&dpkg; を起動する際の各コマンドラインを表示します。"
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> は CD-ROM ID にある statfs データを含め"
+"ないようにします。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr "以下は apt に対するデバッグオプションのすべてです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+"<literal>cdrom://</literal> ソースへのアクセスに関する情報を出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr "FTP を用いたパッケージのダウンロードに関する情報を出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr "HTTP を用いたパッケージのダウンロードに関する情報を出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr "HTTPS を用いたパッケージのダウンロードに関する情報を出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+"<literal>gpg</literal> を用いた暗号署名の検証に関する情報を出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+"CD-ROM にあるパッケージ集合に対して、アクセスするプロセスについての情報を出力"
+"します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr "&apt-get; での構築依存関係解決のプロセスを説明します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+"<literal>apt</literal> ライブラリが生成した、暗号化ハッシュを出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+"CD-ROM の ID を生成する際に <literal>statfs</literal> という、CD-ROM ファイル"
+"システムにある使用済・未使用ブロックの数からの情報を含めないようにします。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+"ファイルのロックをすべて無効にします。例えば、同時にふたつの "
+"<quote><literal>apt-get update</literal></quote> を実行できるようになります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+"グローバルダウンロードキューに対する項目の追加・削除の際にログを出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+"ダウンロードしたファイルのチェックサムや暗号署名の確認に関する、状態メッセー"
+"ジやエラーを出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+"パッケージインデックスリスト差分のダウンロード・適用時の、情報やエラーを出力"
+"します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+"インデックス全体ではなくインデックス差分のダウンロードの際に、apt パッケージ"
+"リストへのパッチ適用に関する情報を出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+"実際のダウンロードを行う際の、サブプロセスとのやりとりをログに出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+"パッケージの自動インストールや、不要パッケージの削除に関するイベントを、ログ"
+"に出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+"依存関係解決のために、どのパッケージが自動的にインストールされたかのデバッグ"
+"メッセージを生成します。これは完全な <literal>apt</literal> 依存関係解決プロ"
+"グラム (<literal>Debug::pkgProblemResolver</literal> を参照) ではなく、例え"
+"ば <literal>apt-get install</literal> で実行された、初期の自動インストール経"
+"路に対応しています。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+"ProblemResolver が動作する際に、一時保留・インストール・削除としてマークされ"
+"たパッケージに関する、デバッグメッセージを生成します。各追加・削除は追加アク"
+"ションのトリガとなり、これをオリジナルのエントリの下に、空白 2 個でインデント"
+"して表示します。各行は、<literal>MarkKeep</literal>, <literal>MarkDelete</"
+"literal>, <literal>MarkInstall</literal> となり、<literal>package-name &lt;a."
+"b.c -&gt; d.e.f | x.y.z&gt; (section)</literal> が続きます。ここで、"
+"<literal>a.b.c</literal> は、そのパッケージの現在のバージョン、<literal>d.e."
+"f</literal>は、インストール予定のバージョン、<literal>x.y.z</literal> はより"
+"新しいけれどインストール対象外のバージョン (pin のスコアが低いため) です。後"
+"のふたつは、存在しない、ないしインストール中のバージョンと同じ場合、省略され"
+"ます。<literal>section</literal> はパッケージが現れるセクション名です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+"&dpkg; 起動時に、起動した際の正確なコマンドラインを出力します。引数は空白で区"
+"切られます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+"状態ファイルディスクリプタに、&dpkg; から受信したすべてのデータと、そのデータ"
+"を解析中に発生したエラーを出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+"<literal>apt</literal> が &dpkg; にパッケージを渡す順番を決める、アルゴリズム"
+"のトレースを生成します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr "&dpkg; を呼び出す際に、実行手順を追跡した状態メッセージを出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr "起動時の各パッケージの優先度を表示します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+"依存関係解決システムの実行内容を追跡します (これは複雑な依存関係の問題に遭遇"
+"した場合にのみ、適用されます)。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+"全インストール済みパッケージの、pkgProblemResolver が計算したスコアを一覧表示"
+"します。パッケージの説明は、<literal>Debug::pkgDepCache::Marker</literal> で"
+"説明したものと同じです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+"<filename>/etc/apt/vendors.list</filename> から読み込んだ、ベンダの情報を出力"
+"します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+"aptのフックにより呼び出される外部コマンドを表示します。これには例えば、設定オ"
+"プション <literal>DPkg::{Pre,Post}-Invoke</literal> や <literal>APT::Update::"
+"{Pre,Post}-Invoke</literal> があります。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "サンプル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+"&configureindex; は、全利用可能オプション値のサンプルを参照できる、設定ファイ"
+"ルのサンプルです。"
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "APT 用選択制御ファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"APT プリファレンスファイル <filename>/etc/apt/preferences</filename> と "
+"<filename>/etc/apt/preferences.d/</filename> フォルダにある断片ファイルは、イ"
+"ンストールするパッケージのバージョンを制御するのに使用します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"&sources-list; ファイルに複数のディストリビューション (<literal>stable</"
+"literal> と <literal>testing</literal> など) が指定されていて、パッケージに対"
+"し複数のバージョンがインストールできることがあります。このとき APT は、利用で"
+"きるバージョンごとに優先度を割り当てます。依存関係規則を条件として、"
+"<command>apt-get</command> は、最も高い優先度を持つバージョンをインストールす"
+"るよう選択します。APT プリファレンスファイルは、APT がデフォルトで割り当て"
+"た、パッケージのバージョンの優先度を上書きします。その結果インストールするも"
+"のの選択を、ユーザが選択できるようになります。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"&sources-list; ファイルに複数の参照が書かれている場合、パッケージの同じバー"
+"ジョンのインスタンスが複数利用できる可能性があります。この場合、<command>apt-"
+"get</command> は &sources-list; ファイルの初めの方に指定されているところから"
+"ダウンロードします。APT プリファレンスファイルはバージョンの選択にのみ影響"
+"し、インスタンスの選択には影響しません。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"プリファレンスファイルは、システム管理者の強い力ですが、注意して使わないと大"
+"きな悪夢にもなります! APT はプリファレンスについて問い合わせることはしませ"
+"ん。そのため、設定を誤ったことにより、インストールできないパッケージに誘導さ"
+"れたり、パッケージのアップグレード中に誤った判断をしたりという事がありえま"
+"す。以降の段落の内容をよく理解しないで、複数のディストリビューションリリース"
+"を混ぜてしまうと、より多くの問題が発生する事になります。特定のリリースに含ま"
+"れるパッケージは、古い/新しいリリースや、異なるリリースから持ってきた他のパッ"
+"ケージとでは、テストされていません (し、予想通りに常に動作するとは限りませ"
+"ん)。以上、警告しました。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"<filename>/etc/apt/preferences.d</filename> ディレクトリにあるファイルは、英"
+"数字の昇順で解析され、以下の命名規約に従う必要があることに注意してください。"
+"ファイル名の拡張子はないか、\"<literal>pref</literal>\" となっており、英数"
+"字、ハイフン (-)、アンダースコア (_)、ピリオド (.) でできています。そうでなけ"
+"れば、<literal>Dir::Ignore-Files-Silently</literal> 設定リストのパターンに一"
+"致するもの以外に対して、ファイルを無視するという注意を APT が出力します。一致"
+"する場合は黙って無視します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "APT のデフォルト優先度の割り当て"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"プリファレンスファイルがなかったり、プリファレンスファイルに特定のパッケージ"
+"を割り当てるエントリがない場合、そのバージョンの優先度は、そのバージョンが属"
+"しているディストリビューションの優先度となります。デフォルトで他のディストリ"
+"ビューションより高い優先度を持つ、特定のディストリビューションを「ターゲット"
+"リリース」としておけます。ターゲットリリースは、<command>apt-get</command> の"
+"コマンドラインや、APT 設定ファイル <filename>/etc/apt/apt.conf</filename> で"
+"設定できます。後述する <filename>/etc/apt/preferences</filename> ファイルで設"
+"定した一般優先度よりもこれは優先されますが、pin 止めしたパッケージには及ばな"
+"いことに注意してください。例えば以下のようになります。<placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"ターゲットリリースが指定されると、APT は以下のアルゴリズムで、パッケージの"
+"バージョンの優先度を設定します。以下のように割り当てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "優先度 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"Debian の <literal>experimental</literal> アーカイブのように、"
+"<filename>Release</filename> ファイルに \"NotAutomatic: yes\" とマークさ"
+"れ、\"ButAutomaticUpgrades: yes\" とマークされて<emphasis>いない</emphasis>"
+"アーカイブ由来のバージョン。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "優先度 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"(もしあれば) 既にインストール済みのバージョンや、<literal>squeeze-backports</"
+"literal> 以降である Debian のバックポートアーカイブのような、"
+"<filename>Release</filename> ファイルに \"NotAutomatic: yes\" かつ "
+"\"ButAutomaticUpgrades: yes\" とマークされているアーカイブ由来のバージョン。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "優先度 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that do not belong to the target release."
+msgstr "ターゲットリリースに属していないバージョン。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "優先度 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that belong to the target release."
+msgstr "ターゲットリリースに属するバージョン。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+"説明がバージョンとマッチし、優先順位が最も高いものがバージョンに割り当てられ"
+"ます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"ターゲットリリースが指定されていなければ、APT は単純にインストールしている"
+"パッケージのバージョンには優先度 100 を、インストールしていないパッケージの"
+"バージョンには優先度 500 を割り当てます。ただし、<filename>Release</"
+"filename> ファイルに \"NotAutomatic: yes\" とマークされたアーカイブ由来のバー"
+"ジョンは違います。こういったバージョンでは優先度 1 を割り当て、さらに "
+"\"ButAutomaticUpgrades: yes\" とマークされている場合には、優先度 100 を割り当"
+"てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"APT は、インストールするパッケージのバージョンを決定するために、以下のルール"
+"を上から順番に適用します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"有効なバージョンの優先度が 1000 を越えない場合、決してダウングレードしませ"
+"ん。(「ダウングレード」は、現在のパッケージのバージョンよりも、小さいバージョ"
+"ンのものをインストールします。APT のデフォルト優先度が 1000 を越えないことに"
+"注意してください。そのような優先度は、プリファレンスファイルでのみ設定できま"
+"す。また、パッケージのダウングレードは危険であることにも注意してください)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "最も高い優先度のバージョンをインストールします。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"同じ優先度のバージョンが複数存在する場合、最も新しいもの (最もバージョン番号"
+"が高いもの) をインストールします。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"優先度・バージョン番号が同じものが複数存在し、そのパッケージのメタデータが異"
+"なるか <literal>--reinstall</literal> オプションが与えられている場合、インス"
+"トールされていないものをインストールします。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"よくある状況として、あるインストールされているパッケージのバージョン (優先度 "
+"100) が、&sources-list; ファイルのリストから得られるバージョン (優先度 500 "
+"か 990) よりも新しくないということがあります。この場合、<command>apt-get "
+"install <replaceable>some-package</replaceable></command> や <command>apt-"
+"get upgrade</command> を実行するとパッケージが更新されます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"まれに、インストールされているパッケージのバージョンが、<emphasis>他の有効な"
+"バージョンよりも</emphasis>新しい場合があります。この時 <command>apt-get "
+"install <replaceable>some-package</replaceable></command> や <command>apt-"
+"get upgrade</command> を実行しても、ダウングレードしません。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"時々、インストールしているパッケージのバージョンが、ターゲットリリースに属す"
+"るバージョンよりも新しく、他のディストリビューションよりも古い場合がありま"
+"す。そのようなパッケージに対して <command>apt-get install <replaceable>some-"
+"package</replaceable></command> や <command>apt-get upgrade</command> を実行"
+"すると、パッケージは更新されます。この場合、インストールされているバージョン"
+"よりも、少なくとも<emphasis>ひとつ</emphasis>は、高い優先度を持つ有効なパッ"
+"ケージがあるからです。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "APT プリファレンスファイルの効果"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"APT プリファレンスファイルを使うと、システム管理者が優先度を割り当てられるよ"
+"うになります。ファイルは、空白行で区切られた、複数行からなるレコードで構成さ"
+"れています。レコードは特定形式か、汎用形式のどちらかの形式をとります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"特定形式は、優先度 (\"Pin-Priority\") を、指定したバージョンやバージョン範囲"
+"の、指定したパッケージについて割り当てます。例えば以下のレコードは、バージョ"
+"ン番号が \"<literal>&good-perl;</literal>\" で始まる <filename>perl</"
+"filename> パッケージを、高い優先度に設定します。空白で区切り、複数のパッケー"
+"ジを指定できます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"汎用形式は、与えられたディストリビューションにある、すべてのパッケージ "
+"(<filename>Release</filename> ファイルに列挙したパッケージ) の優先度や、FQDN"
+"で指定した、特定のインターネットサイトから取得するパッケージの優先度を割り当"
+"てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"APT プリファレンスファイルに書かれている汎用形式のエントリは、パッケージのグ"
+"ループについてのみ適用されます。例えば以下のレコードは、ローカルサイトにある"
+"全パッケージについて、高い優先度を割り当てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"注意: ここで使われるキーワードは、ホスト名にマッチするのに使われる "
+"\"<literal>origin</literal>\" です。以下のレコードは、ホスト名が \"ftp.de."
+"debian.org\" で識別されるサーバ由来のすべてのバージョンに、高い優先度を割り当"
+"てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"<filename>Release</filename> ファイルに指定されたような、ディストリビューショ"
+"ンの Origin と <emphasis>混同しない</emphasis>ようにしてください。"
+"<filename>Release</filename> ファイルにある \"Origin:\" タグは、インターネッ"
+"トアドレスではなく、\"Debian\" や \"Ximian\" といった作者やベンダ名です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"以下のレコードは、アーカイブ名が \"<literal>unstable</literal>\" となっている"
+"ディストリビューションに属するパッケージを、すべて低い優先度に割り当てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"以下のレコードは、コード名が \"<literal>&debian-testing-codename;</literal>"
+"\" となっているディストリビューションに属するパッケージのバージョンを、高い優"
+"先度に割り当てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"以下のレコードは、アーカイブ名が \"<literal>stable</literal>\" で、リリース"
+"バージョン番号が \"<literal>&debian-stable-version;</literal>\" となっている"
+"リリースに属するパッケージを、すべて高い優先度に割り当てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+"コンマ演算子の効果は \"and\" 論理に似ています: ピンが一致するようにすべての条"
+"件がピンが一致しなければなりません。一つの例外があります: 条件のいずれかの型"
+"では (例えば、二つの \"a\" 条件)、ただ最後の条件のみがチェックされます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "正規表現と &glob; 構文"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"APT は &glob; 表現と、スラッシュで囲んだ正規表現による pin もサポートしていま"
+"す。例えば以下の例は、gnome で始まる (&glob; 風表現) か kde を含む (スラッ"
+"シュで囲んだ POSIX の拡張正規表現) 名前の、experimental 由来のすべてのパッ"
+"ケージに、優先度500を割り当てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"この表現の規則は、文字が現れうる場所なら、どこでも発生しうるという事です。し"
+"たがって、以下の pin は、&ubuntu-codename; で始まるリリース由来の、すべての"
+"パッケージに、優先度 990 を割り当てます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"<literal>Package</literal> フィールドも正規表現が現れる場合、正規表現を、マッ"
+"チするすべてのパッケージ名のリストに置き換えたものとして、動作します。これは"
+"将来変更されるかどうか、まだ決定していません。そのため、まずはじめにワイルド"
+"カード pin を、常に記述するようにしてください。その後に続く pin で上書きされ"
+"ます。Package フィールドの \"<literal>*</literal>\" パターンは、&glob; 表現自"
+"体とは見なされません。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "APT が優先度に割り込む方法"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"APT プリファレンスファイルで割り当てた優先度 (P) は、正負の整数でなくてはなり"
+"ません。これは (おおざっぱにいうと) 以下のように解釈されます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"パッケージがダウングレードしても、このバージョンのパッケージをインストール"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"インストールされているバージョンの方が新しいのでなければ、ターゲットリリース"
+"に含まれなくても、このバージョンのパッケージをインストール"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"ターゲットリリースに属するバージョンがあったり、インストールされているバー"
+"ジョンの方が新しいのでなければ、このバージョンのパッケージをインストール"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"他のディストリビューションに属するバージョンがあったり、インストールされてい"
+"るバージョンの方が新しいのでなければ、このバージョンのパッケージをインストー"
+"ル"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"このパッケージがインストールされていない場合、このバージョンのパッケージをイ"
+"ンストール"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "このバージョンのインストール禁止"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr "P = 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr "は動作が未定義です、使用しないでください。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"利用可能なパッケージバージョンに一致する最初の特定形式のレコードが、パッケー"
+"ジバージョンの優先度を決定します。それに失敗すると、パッケージバージョンの優"
+"先度は、バージョンに一致する汎用形式のレコードで定義されたすべての優先度の最"
+"大値として定義されます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"例えば、APT プリファレンスファイルの上の方に、以下のレコードが書かれていると"
+"仮定してください。"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "すると、以下のように動作します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"バージョン番号が \"<literal>&good-perl;</literal>\" で始まっていれば、"
+"<literal>perl</literal> の最新の利用可能パッケージがインストールされます。"
+"バージョン &good-perl;* が利用可能で、バージョン &bad-perl;* がインストールさ"
+"れている場合、<literal>perl</literal> はダウングレードされます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"ローカルシステムで有効な、<literal>perl</literal> 以外のどんなパッケージで"
+"も、他のバージョンより (たとえターゲットリリースに属していても) 優先度が高く"
+"なります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"ローカルシステムにはなくても &sources-list; に列挙されたサイトにあるバージョ"
+"ンで、<literal>unstable</literal> ディストリビューションに属しているパッケー"
+"ジは、インストールするよう選択され、既にインストールされているバージョンがな"
+"い場合にのみインストールされます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr "パッケージのバージョンとディストリビューションプロパティの決定"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"&sources-list; ファイルに列挙した場所では、その場所で利用できるパッケージを記"
+"述した、<filename>Packages</filename> ファイルや <filename>Release</"
+"filename> ファイルを提供します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"<filename>Packages</filename> ファイルは通常 <filename>.../dists/"
+"<replaceable>dist-name</replaceable>/<replaceable>component</replaceable>/"
+"<replaceable>arch</replaceable></filename> ディレクトリにあります。例えば、"
+"<filename>.../dists/stable/main/binary-i386/Packages</filename> です。これ"
+"は、ディレクトリにある利用可能パッケージごとに、複数行のレコードからできてい"
+"ます。APT 優先度の設定は、レコードごとに以下の 2 行だけです。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "<literal>Package:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "パッケージ名"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "<literal>Version:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "その名前のパッケージのバージョン番号"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"<filename>Release</filename> ファイルは、通常 <filename>.../dists/"
+"<replaceable>dist-name</replaceable></filename> ディレクトリにあります。例え"
+"ば、<filename>.../dists/stable/Release</filename> や <filename>.../dists/"
+"&debian-stable-codename;/Release</filename> です。これは、このディレクトリ以"
+"下にある<emphasis>全</emphasis>パッケージに適用する、複数行のレコード 1 つか"
+"ら成っています。<filename>Packages</filename> ファイルと違い "
+"<filename>Release</filename> ファイルは、以下のようにほとんどの行が APT 優先"
+"度の設定に関連します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "<literal>Archive:</literal> 行や <literal>Suite:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"このディレクトリツリーに属する全パッケージのアーカイブ名です。例え"
+"ば、\"Archive: stable\" や \"Suite: stable\" という行は、<filename>Release</"
+"filename> ファイルの親ディレクトリツリー以下にある全パッケージが、"
+"<literal>stable</literal> アーカイブだと指定します。APT プリファレンスファイ"
+"ルでこの値を指定するには、以下の行が必要になります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "<literal>Codename:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"このディレクトリツリーに属する全パッケージのコード名です。たとえ"
+"ば、\"Codename: &debian-testing-codename;\" という行は、<filename>Release</"
+"filename> ファイルの親ディレクトリツリー以下にある全パッケージが、"
+"<literal>&debian-testing-codename;</literal> と名前のついたバージョンであると"
+"指定します。APT プリファレンスファイルでこの値を指定するには、以下の行が必要"
+"になります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"リリースバージョン名です。例えば、このツリーのパッケージが、Debian リリース"
+"バージョン &debian-stable-version; に属するとします。通常 <literal>testing</"
+"literal> ディストリビューションや <literal>unstable</literal> ディストリ"
+"ビューションには、まだリリースされていないので、バージョン番号が付きません。"
+"APT プリファレンスファイルでこれを指定するには、以下の行のいずれかが必要にな"
+"ります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "<literal>Component:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"<filename>Release</filename> ファイルの、ディレクトリツリーにあるパッケージの"
+"ライセンスコンポーネント名です。例えば、\"Component: main\" という行は、この"
+"ディレクトリ以下の全ファイルが、<literal>main</literal> コンポーネント "
+"(Debian フリーソフトウェアガイドラインの元でライセンスされている) であること"
+"を表します。APT プリファレンスファイルでこのコンポーネントを指定するには、以"
+"下の行が必要になります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "<literal>Origin:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"<filename>Release</filename> ファイルのディレクトリツリーにあるパッケージの提"
+"供者名です。ほとんど共通で <literal>Debian</literal> です。APT プリファレンス"
+"ファイルでこの提供者を指定するには、以下の行が必要になります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "<literal>Label:</literal> 行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"<filename>Release</filename> ファイルのディレクトリツリーにあるパッケージのラ"
+"ベル名です。ほとんど共通で <literal>Debian</literal> です。APT プリファレンス"
+"ファイルでこのラベルを指定するには、以下の行が必要になります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"&sources-list; ファイルに列挙された場所から取得した <filename>Packages</"
+"filename> ファイルや <filename>Release</filename> ファイルはすべて、"
+"<filename>/var/lib/apt/lists</filename> ディレクトリや、<filename>apt.conf</"
+"filename> ファイルの <literal>Dir::State::Lists</literal> 変数で指定した場所"
+"に取得されます。例えば、<filename>debian.lcs.mit."
+"edu_debian_dists_unstable_contrib_binary-i386_Release</filename> ファイルは、"
+"<literal>debian.lcs.mit.edu</literal> から取得した、<literal>unstable</"
+"literal> ディストリビューションで、<literal>contrib</literal> コンポーネント"
+"な、<literal>binary-i386</literal> アーキテクチャ用の <filename>Release</"
+"filename> ファイルを含んでいます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "APT プリファレンスレコードのオプション行"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"APT プリファレンスファイルのレコードごとに、任意で <literal>Explanation:</"
+"literal> で始まる行を持てます。これは、コメント用の場所を確保します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "安定版の追跡"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"以下の APT プリファレンスファイルは、<literal>stable</literal> ディストリ"
+"ビューションに属する全てのパッケージのバージョンに、デフォルト (500) より高い"
+"優先度を割り当て、他の <literal>Debian</literal> ディストリビューションのパッ"
+"ケージのバージョンには、低くてインストールできないような優先度を割り当てま"
+"す。<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"適切な &sources-list; ファイルと上記のプリファレンスファイルにより、以下のコ"
+"マンドのいずれかで最新の <literal>stable</literal> バージョンにアップグレード"
+"できます。<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>package</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"以下のコマンドで、指定したパッケージを <literal>testing</literal> ディストリ"
+"ビューションの最新バージョンにアップグレードします。このパッケージは、再度こ"
+"のコマンドを発行しないとアップグレードされません。<placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "テスト版や不安定版の追跡"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"以下の APT プリファレンスファイルは、<literal>testing</literal> ディストリ"
+"ビューションのパッケージのバージョンに高い優先度を割り当て、"
+"<literal>unstable</literal> ディストリビューションのパッケージのバージョンに"
+"は低い優先度を割り当てます。また他の <literal>Debian</literal> ディストリ"
+"ビューションのパッケージのバージョンには、低くてインストールできないような優"
+"先度を割り当てます。<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"適切な &sources-list; ファイルと上記のプリファレンスファイルにより、以下のコ"
+"マンドのいずれかで最新の <literal>testing</literal> バージョンにアップグレー"
+"ドできます。<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>package</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"以下のコマンドで、指定したパッケージを <literal>unstable</literal> ディストリ"
+"ビューションの最新バージョンにアップグレードします。それ以降、<command>apt-"
+"get upgrade</command> は <literal>testing</literal> バージョンのパッケージが"
+"更新されていれば <literal>testing</literal> の最新版に、<literal>unstable</"
+"literal> バージョンのパッケージが更新されていれば <literal>unstable</"
+"literal> の最新版にアップグレードします。<placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "コード名リリースの進化の追跡"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"以下の APT プリファレンスファイルは、指定したコード名のディストリビューション"
+"に属する全てのパッケージのバージョンに、デフォルト (500) より高い優先度を割り"
+"当て、他の <literal>Debian</literal> ディストリビューション、コード名、アーカ"
+"イブのパッケージのバージョンには、低くてインストールできないような優先度を割"
+"り当てます。この APT プリファレンスファイルにより、APT は <literal>testing</"
+"literal> アーカイブから、<literal>stable</literal> や最新の "
+"<literal>oldstable</literal> へ移行できます。コード名の変更に関係なく "
+"<literal>testing</literal> を追跡したい場合は、上記の設定例を使用するべきで"
+"す。<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"適切な &sources-list; ファイルと上記のプリファレンスファイルにより、以下のコ"
+"マンドのいずれかで、リリースコード名が <literal>&debian-testing-codename;</"
+"literal> である最新バージョンにアップグレードできます。<placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>package</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"以下のコマンドで、指定したパッケージを <literal>sid</literal> ディストリ"
+"ビューションの最新バージョンにアップグレードします。それ以降、<command>apt-"
+"get upgrade</command> は <literal>&debian-testing-codename;</literal> バー"
+"ジョンのパッケージが更新されていれば <literal>&debian-testing-codename;</"
+"literal> の最新版に、<literal>sid</literal> バージョンのパッケージが更新され"
+"ていれば <literal>sid</literal>の最新版にアップグレードします。<placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "APT のデータ取得元の設定リスト"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"取得元リスト <filename>/etc/apt/sources.list</filename> と <filename>/etc/"
+"apt/sources.list.d/</filename> に含まれるファイルは、複数の取得元や様々なメ"
+"ディアをサポートするよう設計されています。ファイルは、1 行に一つの取得元をリ"
+"ストする (1 行スタイル) かまたはスタンザごとに複数の取得元を定義し、(シングル"
+"バージョンが複数の取得元から入手可能である場合には) 最も好ましい取得元を先頭"
+"に置く複数行のスタンザ (deb822 スタイル) を含みます。設定した取得元から利用可"
+"能な情報は、<command>apt-get update</command> (や、ほかの APT フロントエンド"
+"の同等のコマンド) で取得します。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"<filename>/etc/apt/sources.list.d</filename> ディレクトリは、別々のファイル"
+"で source.list のエントリを追加する方法を提供します。次の二つの節で説明するよ"
+"うに、二つの異なるファイル形式が許可されています。ファイル名は、含まれている"
+"形式に応じて <filename>.list</filename> または <filename>.sources</filename> "
+"のいずれかの拡張子を持っている必要があります。ファイル名は、文字 (a-z と A-"
+"Z)、数字 (0-9)、アンダースコア (_)、ハイフン (-)、ピリオド (.) のみを含むこと"
+"ができます。そうでなければ、<literal>Dir::Ignore-Files-Silently</literal> 設"
+"定リストのパターンに一致するもの以外に対して、ファイルを無視するという注意を "
+"APT が出力します。一致する場合は黙って無視します。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr "1 行スタイル形式"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+"この形式のファイルは、<filename>.list</filename> 拡張子を持っています。取得元"
+"を指定する各行は、この型のオプションと引数が続く型 <literal>deb-src</"
+"literal> から始まります。個々のエントリは、次の行に継続することはできません。"
+"空行は無視され、行の任意の位置の <literal>#</literal> 文字はコメントとして行"
+"の残りの部分をマークします。したがって行全体をコメントアウトすることによっ"
+"て、エントリを無効にすることができます。オプションが提供されている場合、ス"
+"ペースで区切られ、すべて角カッコ (<literal>[]</literal>) で囲まれていて、行の"
+"中でスペースで区切られた型の後ろに含まれます。複数の値が許されるオプションの"
+"場合、カンマ (<literal>,</literal>) で分離されています。オプション名は、イ"
+"コール記号 (<literal>=</literal>) で分離されます。複数値のオプションも "
+"<literal>-=</literal> および <literal>+=</literal> をセパレータとして持ち、デ"
+"フォルト値から与えられた値を削除するか、またはデフォルト値に与えられた値を含"
+"めます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+"伝統的な形式とすべての apt のバージョンでサポートされています。下記のようにす"
+"べてのオプションがすべての apt のバージョンでサポートされているわけでないこと"
+"に注意してください。いくつかの古いアプリケーションは、自分でこの形式をパース"
+"するので、マルチアーキテクチャのサポートの導入前には珍しいオプションに遭遇す"
+"ることを期待しないかもしれないことに注意してください。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr "deb822 スタイル形式"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "Files in this format have the extension <filename>.sources</filename>. "
+#| "The format is similar in syntax to other files used by Debian and its "
+#| "derivatives, such as the metadata files that apt will download from the "
+#| "configured sources or the <filename>debian/control</filename> file in a "
+#| "Debian source package. Individual entries are separated by an empty "
+#| "line; additional empty lines are ignored, and a <literal>#</literal> "
+#| "character at the start of the line marks the entire line as a comment. An "
+#| "entry can hence be disabled by commenting out each line belonging to the "
+#| "stanza, but it is usually easier to add the field \"Enabled: no\" to the "
+#| "stanza to disable the entry. Removing the field or setting it to yes re-"
+#| "enables it. Options have the same syntax as every other field: A "
+#| "fieldname separated by a colon (<literal>:</literal>) and optionally "
+#| "spaces from its value(s). Note especially that multiple values are "
+#| "separated by spaces, not by commas as in the one-line format. Multivalue "
+#| "fields like <literal>Architectures</literal> also have "
+#| "<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+#| "literal> to modify the default value rather than replacing it."
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+"この形式のファイルは、<filename>.sources</filename> 拡張子を持っています。形"
+"式は、設定された取得元または Debian ソースパッケージの debian/control ファイ"
+"ルから apt がダウンロードするメタデータファイルのような、Debian とその派生で"
+"使用されるほかのファイルの構文と似ています。個々のエントリは空行で分離されて"
+"います: 追加の空行は無視され、行頭の <literal>#</literal> 文字は、コメントと"
+"して行全体をマークします。エントリは、スタンザに属する各行をコメントアウトし"
+"て無効にすることができますが、通常は \"Enabled: no\" フィールドスタンザに追加"
+"してエントリを無効にする方が簡単です。フィールドを削除するか、そのフィールド"
+"を yes に設定すると、再び有効にできます。オプションは、ほかのすべてのフィール"
+"ドと同じ構文を持っています: フィールド名はコロン (<literal>:</literal>) で区"
+"切られ、必要に応じてその値から空白を空けます。特に、1 行形式では、複数の値は"
+"空白で区切られ、コンマではないことに注意してください。"
+"<literal>Architectures</literal> のような複数値のフィールドは、設定を置き換え"
+"るのではなく、デフォルト値を変更する <literal>Architectures-Add</literal> お"
+"よび <literal>Architectures-Remove</literal> を持っています。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+"バージョン 1.1 以降の apt 自身によりサポートされる新しい形式です。前述のよう"
+"に以前のバージョンでは、通知メッセージでそのようなファイルを無視します。多く"
+"のソースおよび/またはオプションが関与している場合は特に、人間と機械を問わず、"
+"作成、拡張、変更を簡単にするために、先に述べた 1 行スタイル形式を非推奨にし、"
+"徐々にこの形式をデフォルト形式にすることが意図されています。apt ソースを作業"
+"および/またはパースしている開発者は、このフォーマットのサポートを追加すること"
+"と、調整するために APT チームに連絡すること、この作業を共有することをお勧めし"
+"ます。ユーザはすでに自由にこの形式を採用することができますが、この形式をまだ"
+"サポートしていないソフトウェアで問題が発生する場合があります。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr "deb および deb-src タイプ: 一般形式"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"<literal>deb</literal> タイプでは典型的な 2 段階の Debian アーカイブ "
+"<filename>distribution/component</filename> を参照します。"
+"<literal>distribution</literal> は通常 <literal>stable</literal> や "
+"<literal>testing</literal> または <literal>&debian-stable-codename;</"
+"literal> や <literal>&debian-testing-codename;</literal> のようなコード名にな"
+"ります。component は、<literal>main</literal>, <literal>contrib</literal>, "
+"<literal>non-free</literal> のどれかです。<literal>deb-src</literal> タイプで"
+"は、debian ディストリビューションのソースコードを、<literal>deb</literal> タ"
+"イプと同じ形式で参照します。<literal>deb-src</literal> 行は、ソースインデック"
+"スを取得するのに必要です。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"<literal>deb</literal> および <literal>deb-src</literal> タイプで使用する 2 "
+"つの 1 行スタイルのエントリの形式は、以下のようになります:"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+"他に deb822 スタイルで同等のエントリもサポートしています: <placeholder type="
+"\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"<literal>deb</literal> タイプの URI は、APT が必要な情報を見つけられるよう"
+"に、Debian ディストリビューションの基底を指定しなければなりません。<literal>"
+"スイート</literal>には正確なパスを指定できます。その場合コンポーネントを省略"
+"し、<literal>スイート</literal>はスラッシュ (<literal>/</literal>) で終わらな"
+"くてはなりません。これは URL で指定されたアーカイブの、特定のサブディレクトリ"
+"のみに関心があるときに役に立ちます。<literal>スイート</literal>に正確なパスを"
+"指定しないのなら、少なくとも一つは <literal>コンポーネント</literal> を指定し"
+"なければなりません。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>スイート</literal> は、<literal>$(ARCH)</literal> 変数を含む場合があ"
+"ります。<literal>$(ARCH)</literal> 変数は、システムで使用している Debian アー"
+"キテクチャ (<literal>amd64</literal> や <literal>armel</literal> など) に展開"
+"されます。これにより、アーキテクチャに依存しない <filename>sources.list</"
+"filename> ファイルを使用できます。一般的に、これは正しいパスを指定するときに"
+"気にするだけです。そうでない場合は、<literal>APT</literal> は現在のアーキテク"
+"チャで URI を自動的に生成します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"特に 1 行スタイル形式では 1 行につき 1 つのディストリビューションしか指定でき"
+"ないため、同じ URI の行を複数記述することになるでしょう。APT は内部で URI リ"
+"ストを生成してから、並べ替えます。そして、同じインターネットホストに対しては"
+"複数の参照をまとめます。例えば FTP 接続後、切断してからまた同じホストに再接続"
+"するといった効率の悪いことをせずに、1 接続にまとめます。APT は、帯域の狭いサ"
+"イトを効率よく扱うため異なるホストへは接続を並行して行うようにもしています。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"最優先する取得元を最初に記述するというように、優先順に取得元を記述するのは重"
+"要です。一般的には、スピードの速い順に並べることになる (例えば、CD-ROM に続い"
+"てローカルネットワークのホスト、さらに続いて彼方のインターネットホスト) で"
+"しょう。"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr "&sourceslist-list-format;"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr "&sourceslist-sources-format;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"例として、あなたのディストリビューション用のソースは、1 行スタイル形式で次の"
+"ようになります: <placeholder type=\"literallayout\" id=\"0\"/> または deb822 "
+"スタイル形式でこのようになります: <placeholder type=\"literallayout\" id="
+"\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr "deb および deb-src タイプ: オプション"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+"各取得元エントリは、アクセスされる取得元や取得されるデータを変更するために指"
+"定するオプションを持つことができます。オプションの形式、構文と名前は、記載さ"
+"れているように 1 行スタイルと deb822 スタイルの間で異なりますが、どちらも同じ"
+"オプションが用意されています。簡単にするために、deb822 フィールド名を一覧表示"
+"し、カッコ内に 1 行の名前を提供します。明示的に複数の値を持つオプションを設定"
+"する以外に、デフォルトをベースに変更するためのオプションもあることを忘れない"
+"でください。ここでは明示的にそれらの名前はリストしていません。サポートされて"
+"いないオプションは、すべての APT バージョンで黙って無視されます。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<option>Architectures</option> (<option>arch</option>) は複数の値を持つオプ"
+"ションで、どのアーキテクチャ情報をダウンロードするか指定します。このオプショ"
+"ンを指定しないと、<option>APT::Architectures</option> 設定オプションに定義し"
+"てあるすべてのアーキテクチャをダウンロードします。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+"replaceable>,…</literal> により、どのアーキテクチャ情報をダウンロードするか指"
+"定します。このオプションを指定しないと、<literal>APT::Architectures</"
+"literal> オプションに定義してある全アーキテクチャをダウンロードします。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+"<option>Targets</option> (<option>target</option>) は値を複数取るオプション"
+"で、apt がその取得元から取得するダウンロード対象を定義します。指定しない場合"
+"のデフォルトセットは設定項目 <option>Acquire::IndexTargets</option> で定義さ"
+"れます (対象は <literal>Created-By</literal> の名前により指定されます)。ま"
+"た、複数の値を取るこのオプションに代えて、真偽値を指定した "
+"<literal>Identifier</literal> をオプションとして使うことで有効化、無効化でき"
+"ます。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+"<option>PDiffs</option> (<option>pdiffs</option>) は、新しいインデックスを完"
+"全にダウンロードする代わりに、古いインデックスを更新するため PDiffs を使用す"
+"るかどうかを制御する yes/no 値です。レポジトリが PDiffs の提供を公開していな"
+"い場合は、このオプションの値は無視されます。<option>Acquire::IndexTargets</"
+"option> スコープ中に定義された特定のインデックスファイル用の同じ名前のオプ"
+"ション値がデフォルトになり、設定オプション <option>Acquire::PDiffs</option> "
+"のデフォルト値は <literal>yes</literal> です。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+"<option>By-Hash</option> (<option>by-hash</option>) は、<literal>yes</"
+"literal>、<literal>no</literal> または <literal>force</literal> の値を持つこ"
+"とができます。そして、APT がインデックスのよく知られた安定版の名前を使用する"
+"代わりに、期待されるファイルのハッシュ値から構築された URI を経由してインデッ"
+"クスを取得するかどうかを制御します。これを使用すると、ハッシュ値の不一致を避"
+"けることができますが、ミラーのサポートを必要とします。この取得元がそのサポー"
+"トを示す場合、<literal>yes</literal> または <literal>no</literal> の値は、こ"
+"の機能の使用を有効化/無効化します。<literal>force</literal> は取得元が示すも"
+"のに関係なく、機能を有効にします。<option>Acquire::IndexTargets</option> ス"
+"コープ中に定義された特定のインデックスファイル用の同じ名前のオプション値がデ"
+"フォルトになり、設定オプション <option>Acquire::By-Hash</option> のデフォルト"
+"値は <literal>yes</literal> です。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+"さらに、設定が同じ URI とスイートの<emphasis>すべて</emphasis>の取得元に影響"
+"する場合のオプションがあり、このようなすべてのエントリに設定する必要があり、"
+"異なる要素間で変化することができません。APT はこのような異常を検出してエラー"
+"出力しようとします。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>), <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) は真偽値でデフォルトはどれも <literal>no</literal> となっています。"
+"<literal>yes</literal> をセットすると &apt-secure; の部分を迂回するため安易に"
+"有効化すべきではありません!"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+"<option>Trusted</option> (<option>trusted</option>) は、APT の判断のデフォル"
+"トのトライステート値で、取得元が信頼できる、以前警告が発生した (例えば、パッ"
+"ケージをこの取得元からインストールしたときに)、信頼できないの 3 値です。この"
+"オプションは、APT の決定を上書きするために使用することができます。値 "
+"<literal>yes</literal> は、それが認証チェックに合格しない場合であっても、この"
+"取得元が信頼できると考えられることを常に APT に伝えます。&apt-secure; の一部"
+"を無効にするので、(すべてであれば) ローカルおよび信頼されたコンテキストでのみ"
+"使用するべきです。そうしなければ、セキュリティが破られます。値 <literal>no</"
+"literal> は反対のことを行います。認証チェックに合格した場合でも取得元を信頼で"
+"きないとして扱います。デフォルト値は明示的に設定することはできません。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<option>Signed-By</option> (<option>signed-by</option>) is either an "
+#| "absolute path to a keyring file (has to be accessible and readable for "
+#| "the <literal>_apt</literal> user, so ensure everyone has read-permissions "
+#| "on the file) or one or more fingerprints of keys either in the "
+#| "<filename>trusted.gpg</filename> keyring or in the keyrings in the "
+#| "<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+#| "fingerprint</command>). If the option is set, only the key(s) in this "
+#| "keyring or only the keys with these fingerprints are used for the &apt-"
+#| "secure; verification of this repository. Defaults to the value of the "
+#| "option with the same name if set in the previously acquired "
+#| "<filename>Release</filename> file. Otherwise all keys in the trusted "
+#| "keyrings are considered valid signers for this repository."
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+"<option>Signed-By</option> (<option>signed-by</option>) は、(<literal>_apt</"
+"literal> ユーザがアクセス可能かつ読み取り可能な必要があり、つまりすべてのユー"
+"ザがファイルの読み取り権限を持っている) キーリングファイルへの絶対パス、また"
+"は <filename>trusted.gpg</filename> キーリングや <filename>trusted.gpg.d/</"
+"filename> ディレクトリ中のキーリングのどれかに収録されているキーのフィンガー"
+"プリントです (<command>apt-key fingerprint</command> を参照)。オプションが設"
+"定されている場合、キーリング中のキーのみまたはこのフィンガープリントのキーの"
+"みが、このリポジトリの &apt-secure; 検証で使用されます。<filename>Release</"
+"filename> ファイルで同名オプションが セットされていればその値がデフォルトとな"
+"ります。それ以外の場合は、信頼できるキーリング内のすべてのキーは、このリポジ"
+"トリの有効な署名者とみなされます。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) は、"
+"APT がリプレイ攻撃を検出するかどうかを制御する yes/no 値です。リポジトリの作"
+"成者は、リポジトリに提供されたデータが有効とみなされる時間を宣言することがで"
+"きます。そして、この時間に達しているが、新しいデータが提供されていない場合、"
+"データが期限切れになったとみなされ、エラーが発生します。セキュリティを高める"
+"ことに加えて、新しいバージョンにアップグレードするユーザを守るために、悪意の"
+"ある攻撃者が古いデータを永遠に送れないようにすることで、長期間更新されていな"
+"いミラーをユーザが特定するのに役立ちます。しかしながら、歴史的アーカイブな"
+"ど、いくつかのリポジトリは、設計によりこれ以上更新されないので、このオプショ"
+"ンを <literal>no</literal> に設定することで、このチェックを無効にすることがで"
+"きます。設定オプション <option>Acquire::Check-Valid-Until</option> の値がデ"
+"フォルトになり、そのデフォルトは <literal>yes</literal> です。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) および "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) は、この"
+"リポジトリからのデータの有効期間 (秒単位) を上げたり下げたりするために使用す"
+"ることができます。リポジトリが独自の値を設定するリリースファイルに Valid-"
+"Until フィールドがないものを提供する場合、-Max は特に有用です。-Min は完全に"
+"チェックを無効にする代わりに (sources.list 同様にある) より頻繁に更新があるミ"
+"ラーの、あまりアクセスされないアーカイブの有効期間を増やすことができます。設"
+"定オプション <option>Acquire::Min-ValidTime</option> および <option>Acquire::"
+"Max-ValidTime</option> の値がデフォルトになり、その両方のデフォルト値は "
+"unset です。"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr "URI の仕様"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "現在認識できる URI タイプは以下のとおりです:"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"file スキームは、システム内の任意のディレクトリを、アーカイブとして扱えるよう"
+"にします。これは NFS マウントやローカルミラーで便利です。"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The cdrom scheme allows APT to use a local CD-ROM drive with media "
+#| "swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+#| "source list."
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"cdrom スキームは、APT がローカル CD-ROM ドライブを、メディア交換しながら使え"
+"るようにします。取得元リストに cdrom エントリを追加するには、&apt-cdrom; プロ"
+"グラムを使用してください。"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The ftp scheme specifies an FTP server for the archive. APT's FTP "
+#| "behavior is highly configurable; for more information see the &apt-conf; "
+#| "manual page. Please note that an FTP proxy can be specified by using the "
+#| "<envar>ftp_proxy</envar> environment variable. It is possible to specify "
+#| "an HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+#| "environment variable and <emphasis>only</emphasis> this environment "
+#| "variable. Proxies using HTTP specified in the configuration file will be "
+#| "ignored."
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"ftp スキームは、アーカイブに FTP サーバを指定します。APT の FTP の振る舞い"
+"は、高度に設定できます。詳細は、&apt-conf; のマニュアルページをご覧ください。"
+"FTP プロキシは、<envar>ftp_proxy</envar> 環境変数で指定することに注意してくだ"
+"さい。この環境変数、さらにこの<emphasis>環境変数のみ</emphasis>を使用して、"
+"HTTP プロキシを使用できます (HTTP プロキシサーバは大抵 FTP URL も理解できま"
+"す)。設定ファイルで HTTP を利用するプロキシが指定してあっても、無視されます。"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"copy スキームは、file スキームと同様ですが、パッケージをその場で使用せず、"
+"キャッシュディレクトリにコピーするところが違います。リムーバブルメディアを使"
+"用していて、APT でコピーを行う場合に便利です。"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"rsh/ssh メソッドは、与えられたユーザでリモートホストに接続し、ファイルにアク"
+"セスするのに rsh/ssh を使用します。あらかじめ rhosts や RSA キーの設定をして"
+"おくことをお勧めします。リモートホストからのファイル転送に、標準の "
+"<command>find</command> コマンドと <command>dd</command> コマンドを使用しま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "さらに認識できる URI タイプの追加"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "APT can be extended with more methods shipped in other optional packages, "
+#| "which should follow the naming scheme <package>apt-transport-"
+#| "<replaceable>method</replaceable></package>. For instance, the APT team "
+#| "also maintains the package <package>apt-transport-https</package>, which "
+#| "provides access methods for HTTPS URIs with features similar to the http "
+#| "method. Methods for using e.g. debtorrent are also available - see &apt-"
+#| "transport-debtorrent;."
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"APT は他の追加パッケージ (<package>apt-transport-<replaceable>method</"
+"replaceable></package> という命名規則) により、より多くの方法を使えるよう拡張"
+"できます。例えば、APT チームは、http メソッドと似た機能で HTTPS URI でのアク"
+"セス方法を提供する <package>apt-transport-https</package> パッケージも保守し"
+"ています。使用するメソッドには、例えば debtorrent も利用できます。&apt-"
+"transport-debtorrent; を参照してください。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"/home/apt/debian に格納されている stable/main, stable/contrib, stable/non-"
+"free 用のローカル (または NFS) アーカイブを使用します。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/apt/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr "上記と同様ですが、不安定版 (開発版) を使用します。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr "上記のソースの指定は以下のようになります。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"1 行目は <literal>APT::Architectures</literal> にあるアーキテクチャのパッケー"
+"ジ情報を取得し、2 行目は常に <literal>amd64</literal> アーキテクチャと "
+"<literal>armel</literal> アーキテクチャのパッケージ情報を取得します。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"archive.debian.org のアーカイブに HTTP アクセスし、hamm/main のみを使用しま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"ftp.debian.org のアーカイブに FTP アクセスし、debian ディレクトリ以下の "
+"&debian-stable-codename;/contrib のみを使用します。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"ftp.debian.org のアーカイブに FTP アクセスし、debian ディレクトリ以下の "
+"unstable/contrib のみを使用します。<filename>sources.list</filename> に上記サ"
+"ンプルと一緒に指定された場合、両方のリソース行に対応する FTP セッションはひと"
+"つだけになります。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"ftp.tlh.debian.org のアーカイブに HTTP アクセスし、universe ディレクトリ以下"
+"を使用します。また、i386 マシンでは <filename>unstable/binary-i386</"
+"filename> 以下にあるファイル、amd64 マシンでは <filename>unstable/binary-"
+"amd64</filename> 以下にあるファイル、その他サポートするアーキテクチャごとの"
+"ファイルのみ使用します。[このサンプルは変数展開の使用法の説明でしかないことに"
+"注意してください。公式 debian アーカイブはこのような構造になっていません] "
+"<placeholder type=\"literallayout\" id=\"0\"/> <placeholder type="
+"\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+"安定版、テスト版、不安定版スイートからバイナリパッケージやソース、およびmain "
+"と contrib コンポーネントを入手するため HTTP を使用しています。"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"Debian パッケージから <command>debconf</command> の設定とテンプレートを抽出す"
+"るユーティリティ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>apt-extracttemplates</command> は、入力に複数の Debian パッケージを"
+"とり、関連する設定スクリプトとテンプレートファイルを (一時ディレクトリに) 出"
+"力します。設定スクリプト・テンプレートファイルを持つ、渡されたパッケージそれ"
+"ぞれに対し、以下の形式で 1 行ずつ出力します。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "package version template-file config-script"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"テンプレートファイルや、設定スクリプトは、<option>-t</option> や <option>--"
+"tempdir</option> で指定した一時ディレクトリ (<literal>APT::ExtractTemplates::"
+"TempDir</literal>) に書き出され、ファイル名は、<filename>package.template."
+"XXXXXX</filename> や <filename>package.config.XXXXXX</filename> といった形に"
+"なります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"抽出した <command>debconf</command> テンプレートファイルや設定スクリプトを書"
+"き出す一時ディレクトリ。設定項目: <literal>APT::ExtractTemplates::TempDir</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command> は正常終了時に 0 を返します。エラー時"
+"には十進の 100 を返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "パッケージインデックスファイルのソートユーティリティ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>apt-sortpkgs</command> は、インデックスファイル (ソースインデックス"
+"やパッケージインデックス) からレコードをソートし、パッケージ名順に整えます。"
+"また、内部のソート規則に従って、内部フィールドについてもソートを行います。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"出力はすべて標準出力に送られ、入力は検索できるファイルでなければなりません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"ソースインデックスフィールド順に並べ替えに使用します。設定項目: "
+"<literal>APT::SortPkgs::Source</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> は正常終了時に 0 を返します。エラー時には十進"
+"の 100 を返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "インデックスファイル生成ユーティリティ"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> は、APT が取得元にアクセスするのに必要な、"
+"インデックスファイルを生成するコマンドラインツールです。インデックスファイル"
+"は、元のサイトの内容に基づき生成されるべきです。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+"<command>apt-ftparchive</command> は、&dpkg-scanpackages; プログラムのスー"
+"パーセットで、<literal>packages</literal> コマンド経由で機能全体を取り込んで"
+"います。また、contents ファイルジェネレータ <literal>contents</literal> と完"
+"全なアーカイブの生成プロセス「スクリプト」である綿密な手段を含んでいます。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+"本質的に <command>apt-ftparchive</command> は、.deb ファイルの内容をキャッ"
+"シュするのにバイナリデータベースを使用できます。また、&gzip; 以外のいかなる外"
+"部プログラムにも依存しません。すべて生成する際には、ファイル変更点の検出と希"
+"望した圧縮出力ファイルの作成を自動的に実行します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+"packages コマンドは、ディレクトリツリーからパッケージファイルを生成します。与"
+"えられたディレクトリから再帰検索し、.deb ファイルを取得します。またパッケージ"
+"レコードを標準出力にそれぞれ出力します。このコマンドは、&dpkg-scanpackages; "
+"とほぼ同じです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr "<option>--db</option> オプションで、キャッシュ DB を指定できます。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+"<literal>sources</literal> コマンドは、ディレクトリツリーからソースインデック"
+"スファイルを生成します。与えられたディレクトリから再帰検索し、.dsc ファイルを"
+"取得します。またソースレコードを標準出力にそれぞれ出力します。このコマンド"
+"は、&dpkg-scansources; とほぼ同じです。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+"override ファイルを指定した場合、src 拡張子がついたソースオーバーライドファイ"
+"ルを探します。使用するソースオーバーライドファイルを変更するのには、--source-"
+"override オプションを使用します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+"<literal>contents</literal> コマンドは、ディレクトリツリーからコンテンツファ"
+"イルを生成します。与えられたディレクトリから再帰検索し、.deb ファイルを取得し"
+"ます。またファイルごとにファイル一覧を読み取ります。その後、パッケージに対応"
+"するファイル一覧を標準出力にソートして出力します。ディレクトリは出力に含まれ"
+"ません。複数のパッケージが同じファイルを持つ場合、パッケージ名をカンマ区切り"
+"で出力します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+"<literal>release</literal> コマンドは、ディレクトリツリーから Release ファイ"
+"ルを生成します。与えたディレクトリを再帰的に検索し、未圧縮の "
+"<filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename>, "
+"<filename>icons</filename> 各ファイル、それに <filename>Release</filename>, "
+"<filename>Index</filename>, <filename>md5sum.txt</filename> ファイルをデフォ"
+"ルト (<literal>APT::FTPArchive::Release::Default-Patterns</literal>) で探しま"
+"す。また <literal>APT::FTPArchive::Release::Patterns</literal> に列挙して、さ"
+"らにファイル名のパターンを追加できます。その後、(デフォルトで) MD5, SHA1, "
+"SHA256 と SHA512 の各ダイジェストをファイルごとに格納した <filename>Release</"
+"filename> ファイルを標準出力に書き出します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+"Release ファイルの追加メタデータフィールドの値は、<literal>APT::FTPArchive::"
+"Release</literal> 以下の相当する値 (例: <literal>APT::FTPArchive::Release::"
+"Origin</literal>) をとります。サポートするフィールドは、<literal>Origin</"
+"literal>, <literal>Label</literal>, <literal>Suite</literal>, "
+"<literal>Version</literal>, <literal>Codename</literal>, <literal>Date</"
+"literal>, <literal>NotAutomatic</literal>, <literal>ButAutomaticUpgrades</"
+"literal>, <literal>Acquire-By-Hash</literal>, <literal>Valid-Until</"
+"literal>, <literal>Signed-By</literal>, <literal>Architectures</literal>, "
+"<literal>Components</literal>, <literal>Description</literal> です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+"<literal>generate</literal> コマンドは、cron スクリプトから実行できるよう設計"
+"されており、与えられた設定ファイルに従ってインデックスを生成します。設定言語"
+"は、必要な設定を維持する簡単な方法を提供すると共に、インデックスファイルをど"
+"のディレクトリから作成するかを指定する、柔軟な方法を提供します。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+"<literal>clean</literal> コマンドは、設定ファイルで与えられたデータベースを、"
+"もう必要ないレコードを削除して整理します。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr "Generate 設定"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+"<literal>generate</literal> コマンドは、生成するアーカイブに関する記述をした"
+"設定ファイルを使用します。設定ファイルは、bind 8 や dhcpd といった ISC ツール"
+"に見られるような、ISC 設定フォーマットに従います。&apt-conf; に、構文の説明が"
+"あります。Generate 設定はセクション法で解析しますが、&apt-conf; はツリー法で"
+"解析するのに注意してください。これはスコープタグの扱い方に違いがあるだけで"
+"す。"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+"generate 設定には 4 個の独立したセクションがあります。以下それぞれ説明しま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr "<literal>Dir</literal> セクション"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+"<literal>Dir</literal> セクションは、生成プロセスで必要なファイルを配置するた"
+"めに必要な、標準ディレクトリを定義します。このディレクトリは、完全な絶対パス"
+"を生成するため、後のセクションで定義される相対パスの前に結合されます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+"FTP アーカイブのルートを指定します。標準的な Debian 設定では、このディレクト"
+"リには <filename>ls-LR</filename> と dist ノードがあります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr "オーバーライドファイルの場所を指定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr "キャッシュファイルの場所を指定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+"<literal>FileList</literal> 設定が以下で使用されている場合、ファイルリスト"
+"ファイルの場所を指定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr "<literal>Default</literal> セクション"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+"<literal>Default</literal> セクションではデフォルト値を指定します。また、生成"
+"器の動作を制御する設定も行います。他のセクションでは、ここにあるデフォルト値"
+"を、セクションごとの設定で上書きします。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+"パッケージインデックスファイルのデフォルト圧縮方法を設定します。設定項目 "
+"<option>APT::Compressor</option> によって設定した圧縮形式の最低1つが入る、空"
+"白区切りの文字列です。圧縮方法のデフォルトはすべて '. gzip' です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+"パッケージファイル拡張子のデフォルト値を列挙します。このデフォルト値は '."
+"deb' です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+"<literal>Packages::Compress</literal> と同様に、Sources ファイルの圧縮方法を"
+"指定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+"ソースファイル拡張子のデフォルト値を列挙します。このデフォルト値は '.dsc' で"
+"す。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+"<literal>Packages::Compress</literal> と同様に、Contents ファイルの圧縮方法を"
+"指定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+"<literal>Packages::Compress</literal> と同様に、Translation-en マスターファイ"
+"ルの圧縮を制御します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+"実行するごとに delink (及びハードリンクの置き換え) する量を、キロバイト単位で"
+"指定します。セクションごとの <literal>External-Links</literal> 設定と合わせて"
+"使います。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+"作成したインデックスファイルのモードを指定します。デフォルトは 0644 です。全"
+"インデックスファイルは、umask を無視してこのモードを使用します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+"長い説明文を <filename>Packages</filename> ファイルに含めるか、マスター "
+"<filename>Translation-en</filename> ファイルに分割するかを指定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "<literal>TreeDefault</literal> セクション"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+"特定の <literal>Tree</literal> セクションのデフォルトを設定します。これらの変"
+"数はすべて置換変数であり、文字列 $(DIST), $(SECTION), $(ARCH) をそれぞれの値"
+"に展開します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+"日毎に生成する contents ファイルをキロバイト単位で設定します。contents ファイ"
+"ルをラウンドロビンし、数日経つとすべて再生成します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+"変更がない contents ファイルをチェックする日数を指定します。この制限を越えた "
+"contents ファイルの mtime を、更新します。パッケージファイルが変更されても、"
+"[例えば上書き編集で] contents ファイルが更新されないような場合、こういったこ"
+"とが発生します。新しい .deb ファイルをインストールしたい場合、保留を解除で"
+"き、少なくとも新しいファイルが必要です。デフォルトは 10 で、単位は日です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+".deb ディレクトリツリーの先頭を設定します。デフォルトは <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename> です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+"ソースパッケージディレクトリツリーの先頭を設定します。デフォルトは <filename>"
+"$(DIST)/$(SECTION)/source/</filename> です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+"Packages ファイルの出力先を設定します。デフォルトは <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/Packages</filename> です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+"Sources ファイルの出力先を設定します。デフォルトは <filename>$(DIST)/"
+"$(SECTION)/source/Sources</filename> です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+"万一 Packages ファイルに含まれていない場合、長い説明文がある Translation-en "
+"マスターファイルの出力先を設定します。デフォルトは、<filename>$(DIST)/"
+"$(SECTION)/i18n/Translation-en</filename> です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+"外部リンクではなく、内部リンクと見なす判断材料となる、パスのプレフィックスを"
+"設定します。デフォルトは、<filename>$(DIST)/$(SECTION)/</filename> です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+"Contents ファイルの出力先を設定します。デフォルトは、<filename>$(DIST)/"
+"$(SECTION)/Contents-$(ARCH)</filename> です。複数の Packages ファイルをひとつ"
+"の Contents ファイルにまとめられる設定 (デフォルト) の場合、<command>apt-"
+"ftparchive</command> は自動でパッケージファイルをまとめます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr "contents の出力に付けるヘッダファイルを設定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+"このセクションで使用するバイナリキャッシュデータベースを設定します。複数のセ"
+"クションで同じデータベースを共有できます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+"ディレクトリツリーを走査する代わりに、<command>apt-ftparchive</command> が読"
+"み込むファイル一覧ファイルを指定します。相対ファイル名は、アーカイブディレク"
+"トリが先頭につきます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+"ディレクトリツリーを走査する代わりに、<command>apt-ftparchive</command> が読"
+"み込むファイル一覧ファイルを指定します。相対ファイル名は、アーカイブディレク"
+"トリが先頭につきます。ソースインデックスを処理する際に使用します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr "<literal>Tree</literal> セクション"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+"<literal>Tree</literal> セクションでは、ベースディレクトリからの標準 Debian "
+"ファイルツリー、ベースディレクトリの複数のセクション、最終的にはセクションご"
+"との複数のアーキテクチャを定義します。使用する正確なパスは、"
+"<literal>Directory</literal> 変数で定義されます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+"<literal>Tree</literal> セクションは、<literal>$(DIST)</literal> 変数で設定さ"
+"れているスコープタグをとり、ツリーのルート (<literal>ArchiveDir</literal>が先"
+"頭につくパス) を定義します。通常、この設定は <filename>dists/&debian-stable-"
+"codename;</filename> のようになります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+"<literal>TreeDefault</literal> セクションで定義される設定はすべて、3 個の新し"
+"い変数と同様に、<literal>Tree</literal> セクションで使用できます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+"<literal>Tree</literal> セクションを処理する際、<command>apt-ftparchive</"
+"command> は以下のような操作を行います。<placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+"distribution 以下に現れるセクションを、空白区切りで指定したリストです。通常、"
+"<literal>main contrib non-free</literal> のようになります。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+"検索部の下に表示されるすべてのアーキテクチャの空白区切りリストです。特別な"
+"アーキテクチャ「source」は、このツリーがソースアーカイブを持っていることを示"
+"すために使用されます。アーキテクチャ「all」は、<filename>Packages</filename> "
+"のようなアーキテクチャ固有のファイルがすべてのファイル中のアーキテクチャ "
+"<literal>all</literal> パッケージに関する情報を含まず、専用のファイルで利用で"
+"きることを示します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+"バイナリオーバーライドファイルを設定します。このオーバーライドファイルには、"
+"セクション、優先度、メンテナのアドレスといった情報が含まれています。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+"ソースオーバーライドファイルを設定します。このオーバーライドファイルには、セ"
+"クションの情報が含まれています。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr "バイナリ特別オーバーライドファイルを設定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr "ソース特別オーバーライドファイルを設定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "<literal>BinDirectory</literal> セクション"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+"<literal>bindirectory</literal> セクションでは、特殊な構造を持たないバイナリ"
+"ディレクトリツリーを定義します。スコープタグはバイナリディレクトリの場所を指"
+"定し、設定は変数展開のない <literal>Tree</literal> セクションや "
+"<literal>Section</literal><literal>Architecture</literal> 設定に似ています。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr "Packages ファイルの出力先を設定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+"Sources ファイルの出力先を設定します。少なくとも <literal>Packages</literal> "
+"か <literal>Sources</literal> のうち、ひとつは必要です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr "Contents ファイルの出力先を設定します (オプション)。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr "バイナリオーバーライドファイルを設定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr "ソースオーバーライドファイルを設定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr "キャッシュ DB を設定します。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr "全出力パスに付加するパス。"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "ファイル一覧ファイルを指定します。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr "バイナリオーバーライドファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+"バイナリオーバーライドファイルは、&dpkg-scanpackages; と完全に互換性がありま"
+"す。ここには、空白区切りでフィールドが 4 個あります。先頭のフィールドはパッ"
+"ケージ名、2 番目のフィールドはパッケージに強制する優先度、3 番目のフィールド"
+"はパッケージに強制するセクション、最後のフィールドはメンテナ順列フィールドで"
+"す。"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "old [// oldn]* => new"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "new"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+"メンテナフィールドの一般的な形は以下のようになります。<placeholder type="
+"\"literallayout\" id=\"0\"/> また単純に以下のようにもなります。<placeholder "
+"type=\"literallayout\" id=\"1\"/>最初の形式は、// で区切られた古い email アド"
+"レスのリストを許可します。この形式がある場合は、メンテナフィールドになるよう "
+"new に置換してください。2 番目の形式は無条件にメンテナフィールドに置換しま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr "ソースオーバーライドファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+"ソースオーバーライドファイルは、&dpkg-scansources; と完全に互換性があります。"
+"ここには、空白区切りでフィールドが 2 個あります。先頭のフィールドはソースパッ"
+"ケージ名、2 番目のフィールドは割り当てるセクションです。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr "特別オーバーライドファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+"特別オーバーライドファイルは、出力中に任意のタグを追加・置換できるようにしま"
+"す。3 列からなり、先頭はパッケージ、2番目はタグ、残りは新しい値です。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+"与えたチェックサムを生成します。このオプションはデフォルトで on です。off に"
+"すると生成したインデックスファイルには checksum フィールドが含まれません。設"
+"定項目: <literal>APT::FTPArchive::<replaceable>Checksum</replaceable></"
+"literal> と <literal>APT::FTPArchive::<replaceable>Index</replaceable>::"
+"<replaceable>Checksum</replaceable></literal>。ここで "
+"<literal><replaceable>Index</replaceable></literal> は <literal>Packages</"
+"literal>, <literal>Sources</literal>, <literal>Release</literal> になります。"
+"<literal><replaceable>Checksum</replaceable></literal> は <literal>MD5</"
+"literal>, <literal>SHA1</literal>, <literal>SHA256</literal> または "
+"<literal>SHA512</literal> になります。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"バイナリキャッシュ DB を使用します。generate コマンドには影響しません。設定項"
+"目: <literal>APT::FTPArchive::DB</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"静粛 - 進捗表示を省略し、ログをとるのに便利な出力を行います。最大 2 つまで q "
+"を重ねることでより静粛にできます。また、<option>-q=#</option> のように静粛レ"
+"ベルを指定して、設定ファイルを上書きすることもできます。設定項目: "
+"<literal>quiet</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"Delink を実行します。<literal>External-Links</literal> 設定を使用している場"
+"合、このオプションはファイルの delink を有効にします。デフォルトは on で、"
+"off にするには <option>--no-delink</option> としてください。設定項目: "
+"<literal>APT::FTPArchive::DeLinkAct</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+"contents の生成を行います。このオプションを指定し、パッケージインデックスを"
+"キャッシュ DB と共に生成する際、ファイルリストを後で使用するように、抽出し "
+"DB に格納します。generate コマンドを使用する際、このオプションでいずれの "
+"Contents ファイルも作成できます。デフォルトは on です。設定項目: "
+"<literal>APT::FTPArchive::Contents</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"<literal>sources</literal> コマンドで使用する、ソースオーバーライドファイルを"
+"選択します。設定項目: <literal>APT::FTPArchive::SourceOverride</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"キャッシュデータベースを読み取り専用にします。設定項目: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"<literal>packages</literal> コマンドや <literal>contents</literal> コマンド"
+"で、与えたパスにあるすべてのパッケージファイルではなく、<literal>*_arch.deb</"
+"literal> や <literal>*_all.deb</literal> に一致したパッケージファイルのみを受"
+"け付けます。設定項目: <literal>APT::FTPArchive::Architecture</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+"&apt-ftparchive; は cachedb のメタデータに可能な限りキャッシュします。パッ"
+"ケージを再コンパイルし、また同じバージョンで再発行されると、古くなってしまっ"
+"たキャッシュのメタデータ (サイズやチェックサム) が使われ、これが問題になるこ"
+"とがあります。このオプションを有効にすると、ファイルを更新するとチェックが行"
+"われるため、問題が起こらなくなります。デフォルトでは、このオプションは "
+"\"<literal>false</literal>\" にセットされていることに注意してください。バー"
+"ジョンや、同じバージョン番号のパッケージのビルドを、増やしてアップロードする"
+"のは推奨しないからです。そのため理論上、誰もその問題に行き会わず、すべての追"
+"加チェックには、意味がありません。"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+"この設定オプションはデフォルトで \"<literal>true</literal>\" で、&apt-"
+"ftparchive; が生成したアーカイブが <filename>Translation</filename> ファイル"
+"も提供する場合にのみ <literal>\"false\"</literal> に設定してください。"
+"<filename>Translation-en</filename> マスターファイルは generate コマンドでの"
+"み生成できることに注意してください。"
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"バイナリパッケージ (.deb) があるディレクトリの Packages ファイルを生成するに"
+"は、以下のようにします。<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> は正常終了時に 0 を返します。エラー時には十"
+"進の 100 を返します。"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Configuration file for APT"
+msgid "Login configuration file for APT sources and proxies"
+msgstr "APT の設定ファイル"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "The APT preferences file <filename>/etc/apt/preferences</filename> and "
+#| "the fragment files in the <filename>/etc/apt/preferences.d/</filename> "
+#| "folder can be used to control which versions of packages will be selected "
+#| "for installation."
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"APT プリファレンスファイル <filename>/etc/apt/preferences</filename> と "
+"<filename>/etc/apt/preferences.d/</filename> フォルダにある断片ファイルは、イ"
+"ンストールするパッケージのバージョンを制御するのに使用します。"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "apt-get install <replaceable>package</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "apt-get install <replaceable>package</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Examples"
+msgid "Example"
+msgstr "サンプル"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"更新・インストールするパッケージのバージョンをすべて表示します。設定項目: "
+"<literal>APT::Get::Show-Versions</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"更新・インストールするパッケージのバージョンをすべて表示します。設定項目: "
+"<literal>APT::Get::Show-Versions</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Proxy Configuration"
+msgstr "ユーザ設定"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "Three settings are provided for cache control with HTTP/1.1 compliant "
+#| "proxy caches. <literal>No-Cache</literal> tells the proxy not to use its "
+#| "cached response under any circumstances. <literal>Max-Age</literal> sets "
+#| "the allowed maximum age (in seconds) of an index file in the cache of the "
+#| "proxy. <literal>No-Store</literal> specifies that the proxy should not "
+#| "store the requested archive files in its cache, which can be used to "
+#| "prevent the proxy from polluting its cache with (big) .deb files."
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+"HTTP/1.1 準拠のプロキシキャッシュの制御について 3 種類の設定があります。"
+"<literal>No-Cache</literal> はプロキシに対して、いかなる時もキャッシュを使用"
+"しないと伝えます。<literal>Max-Age</literal> は、プロキシのキャッシュにあるイ"
+"ンデックスファイルの最大利用期間 (秒) を設定します。<literal>No-Store</"
+"literal> は、リクエストしたアーカイブファイルを、プロキシがキャッシュに格納し"
+"ないように指定します。これにより (大きな) .deb ファイルでプロキシのキャッシュ"
+"が汚れるのを防げます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Automatic Proxy Configuration"
+msgstr "ユーザ設定"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to "
+#| "specify an external command to discover the http proxy to use. The first "
+#| "and only parameter is an URI denoting the host to be contacted to allow "
+#| "for host-specific configuration. APT expects the command to output the "
+#| "proxy on stdout as a single line in the style <literal>http://proxy:port/"
+#| "</literal> or the word <literal>DIRECT</literal> if no proxy should be "
+#| "used. No output indicates that the generic proxy settings should be "
+#| "used. Note that auto-detection will not be used for a host if a host-"
+#| "specific proxy configuration is already set via <literal>Acquire::http::"
+#| "Proxy::<replaceable>HOST</replaceable></literal>. See the &squid-deb-"
+#| "proxy-client; package for an example implementation that uses avahi. "
+#| "This option takes precedence over the legacy option name "
+#| "<literal>ProxyAutoDetect</literal>."
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> を使って利用する http プ"
+"ロキシを検出するための外部コマンドを指定できます。最初で唯一のパラメータはホ"
+"スト固有の設定を可能にするために通信する先のホストを示すURIです。APT はコマン"
+"ドが標準出力に1行の <literal>http://proxy:port/</literal> 形式でプロキシを出"
+"力、あるいはプロキシを何も使わない場合には <literal>DIRECT</literal> という語"
+"を出力することを期待しています。出力しない場合は一般のプロキシ設定を利用する"
+"ことになります。<literal>Acquire::http::Proxy::<replaceable>HOST</"
+"replaceable></literal> によってホスト固有のプロキシ設定がセットされているとそ"
+"のホストについては自動検出が行われないことに注意してください。avahi を利用す"
+"る実装例については &squid-deb-proxy-client; パッケージを見てください。このオ"
+"プションは古い <literal>ProxyAutoDetect</literal> よりも優先されます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User Configuration"
+msgid "Connection Configuration"
+msgstr "ユーザ設定"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The option <literal>timeout</literal> sets the timeout timer used by the "
+#| "method; this value applies to the connection as well as the data timeout."
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+"<literal>timeout</literal> オプションは、この方法でのタイムアウトまでの時間を"
+"設定します。これには、接続のタイムアウトとデータのタイムアウトが含まれていま"
+"す。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+#| "literal> which accepts integer values in kilobytes per second. The "
+#| "default value is 0 which deactivates the limit and tries to use all "
+#| "available bandwidth. Note that this option implicitly disables "
+#| "downloading from multiple servers at the same time."
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+"使用する帯域を制限するには、<literal>Acquire::http::Dl-Limit</literal> に秒あ"
+"たりのキロバイトで整数値を与えます。デフォルト値は 0 で、制限を解除し、使用で"
+"きる帯域をすべて使おうとします。このオプションは暗黙的に、同時に複数のサーバ"
+"からダウンロードしなくなることに注意してください。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid ""
+#| "The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used "
+#| "to enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be "
+#| "beneficial e.g. on high-latency connections. It specifies how many "
+#| "requests are sent in a pipeline. APT tries to detect and workaround "
+#| "misbehaving webservers and proxies at runtime, but if you know that yours "
+#| "does not conform to the HTTP/1.1 specification pipelining can be disabled "
+#| "by setting the value to 0. It is enabled by default with the value 10."
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+"<literal>Acquire::http::Pipeline-Depth</literal> の設定は、例えばレイテンシの"
+"高い接続で有益な HTTP パイプライン (RFC 2616 8.1.2.2 節) を有効にするのに使用"
+"できます。APT は、実行時の Web サーバやプロキシの不作法な振る舞いの検出と回避"
+"策を試します。しかし、HTTP/1.1 仕様に準拠していないことがわかっている場合は、"
+"値を 0 に設定することでパイプラインを無効にすることができます。これは、デフォ"
+"ルトで値 10 で有効になっています。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+"<literal>Acquire::http::AllowRedirect</literal> は APT がリダイレクトをたどる"
+"かどうかを制御します。デフォルトでは有効です。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+"クライアントが既知の識別子を使用する場合にのみ、プロキシがアクセスを許可する"
+"場合、<literal>Acquire::http::User-Agent</literal> を使用して、http でダウン"
+"ロードするための、異なる User-Agent を設定できます。"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+#, fuzzy
+#| msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "ja"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "APT ユーザガイド"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr "バージョン &apt-product-version;"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+#, fuzzy
+#| msgid ""
+#| "This document provides an overview of how to use the the APT package "
+#| "manager."
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr "本文書は APT パッケージマネージャの使い方の概要を提供します。"
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr "ライセンスについて"
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "全般"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"APT パッケージは現在、APT <command>dselect</command> メソッドと <command>apt-"
+"get</command> コマンドラインユーザインターフェイスの2つを収録しています。両方"
+"ともインターネットから新しいパッケージをダウンロードするのと同様、パッケージ"
+"をインストール、削除する方法を提供しています。"
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "パッケージシステムの構造"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"Debian パッケージシステムには各パッケージに関連する膨大な情報があり、システム"
+"に手際良く簡単に統合することを支援します。その最も重要な機能は依存システムで"
+"す。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"依存システムにより、システムにあるライブラリ等の共有要素を個々のプログラムを"
+"使えるようになります。簡単に言うと、プログラムのうちまれに利用される部分を別"
+"個のパッケージに配置して、平均的ユーザがインストールを必要とするものの数を減"
+"らします。また、メール転送エージェントや X サーバ等の選択ができるようにもなり"
+"ます。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"依存システムの理解はまず単純な依存の概念を把握することから始まります。単純な"
+"依存というのは、あるパッケージが適切に機能するためには別のパッケージが同時に"
+"インストールされている必要があるということです。"
+
+# Translator's NOTE: maybe s/GPGP/GPG/?
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"例えば mailcrypt は emacs を拡張するプログラムで、GPG によるメールの暗号化を"
+"支援します。GPGP がインストールされていなければ mailcrypt は役に立たないので "
+"mailcrypt には GPG に単純に依存しています。また、これは emacs の拡張なので "
+"emacs に単純に依存し、emacs がないと何の役にも立ちません。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"理解しておかないといけないもう一つの重要な依存に競合する依存があります。これ"
+"はあるパッケージが別のパッケージと同時にインストールされていると機能せず、シ"
+"ステムにとってひどく有害なこともあります。例として sendmail や exim、qmail 等"
+"のメール転送エージェントで考えてみましょう。メール転送エージェントはどれも"
+"メールを受け取るのにネットワークを待ち受ける必要があるため、2つインストールす"
+"ることは不可能です。複数インストールするとシステムに重大な被害を与える可能性"
+"があるため、メール転送エージェントはどれも他のあらゆるメール転送エージェント"
+"と競合依存となっています。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"複雑な例としては、別のパッケージのように装うパッケージがあります。exim と "
+"sendmail について見てみると、その多くの目的は同一で、両方ともメールを配送し、"
+"一般的インターフェイスを解釈します。そこで、パッケージシステムにはどちらも "
+"mail-transport-agents だと宣言する方法があります。そうして exim と sendmail "
+"は両方とも mail-transport-agent を提供すると宣言し、他のメール転送エージェン"
+"トを必要とするパッケージは mail-transport-agent に依存します。手作業により"
+"パッケージを修正しようとしたときに多大な混乱が生まれる可能性があります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"既にインストールされている、あるいはされていないパッケージについて、1つの依存"
+"が生まれる可能性は常にあります。APT はインストールするパッケージの選択を支援"
+"する自動化でのアルゴリズムをいくつか提供することで依存問題の解決支援に努めま"
+"す。"
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"<command>apt-get</command> はコマンドラインからパッケージをインストールする簡"
+"単な方法を提供します。<command>dpkg</command> とは異なり、<command>apt-get</"
+"command> は .deb ファイルを解釈せず、連携するのはパッケージ特有の名前で、イン"
+"ストールできるのは<emphasis>ソース</emphasis>にある .deb アーカイブだけです。"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"http プロキシサーバを使っている場合はまず http_proxy 環境変数をセットする必要"
+"があります。sources.list(5) を見てください"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"<command>apt-get</command> を使う前にまずやるべきことは<placeholder type="
+"\"footnote\" id=\"0\"/>パッケージ一覧を<emphasis>ソース</emphasis>から取得す"
+"ることで、それにより利用できるパッケージがわかるようになります。これには "
+"<literal>apt-get update</literal> を実行します。例えば"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"取得 http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"取得 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"パッケージリストを読み込んでいます... 完了\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr "更新後は複数のコマンドを使えます:"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"upgrade を行うとシステム全体を穏やかにアップグレードします。アップグレードで"
+"は新しいパッケージのインストールや既存のパッケージの削除、アップグレードする"
+"と他のパッケージを破壊する可能性のある場合のそのパッケージのアップグレードは"
+"行いません。これは毎日実行してシステムを比較的安全にアップグレードできます。"
+"upgrade を行うとアップグレードできないパッケージがある場合にその一覧を表示し"
+"ます。これは通常新しいパッケージに依存しているか他のパッケージと競合している"
+"ということになります。<command>dselect</command> や <literal>apt-get "
+"install</literal> を使うとそういったパッケージを強制的にインストールできま"
+"す。"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"install を使ってパッケージを名前によりインストールします。パッケージは自動的"
+"に取得、インストールされます。これはインストールするパッケージの名前が既にわ"
+"かっていて GUI を使って選択したくない場合に有用です。インストールするパッケー"
+"ジはいくらでも指定でき、全て取得されます。install では対象パッケージ一覧から"
+"自動的に依存問題の解決に努めてまとめを提示し、指示以外の変更がある場合は確認"
+"を促します。"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"dist-upgrade は完全なアップグレードを行うように設計されていて、Debian のリ"
+"リース間のアップグレードを単純化します。洗練されたアルゴリズムを使って、シス"
+"テムをできるだけ最新のリリースにするためにインストール、アップグレード、削除"
+"する最善のパッケージ群を決定します。状況によっては <command>dselect</"
+"command> で手作業により時間を掛けて依存を解決するよりも dist-upgrade を使う方"
+"が希望には合うかもしれません。dist-upgrade 完了後は <command>dselect</"
+"command> を使って、残っているパッケージがあればインストールできます。"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"dist-upgrade が実行する内容をよく観察するのは重要です。かなり驚くような判断が"
+"なされることもあります。"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"<command>apt-get</command> にはコマンドラインオプションが複数あり、man ページ"
+"の <citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> で詳細に説明されています。最も有用なオプションは取"
+"得したファイルをインストールしない <literal>-d</literal> です。システムが大量"
+"のパッケージをダウンロードする必要がある場合、何かうまくいかなかったときにイ"
+"ンストールを開始するのは望ましくはないでしょう。<literal>-d</literal> を指定"
+"すると、ダウンロードしたときのコマンドを単純に再び、<literal>-d</literal> を"
+"付けずに実行することでダウンロードしたアーカイブをインストールできます。"
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"APT の <command>dselect</command> メソッドは <command>dselect</command> パッ"
+"ケージ選択 GUI を使った完全な APT システムを提供します。インストールや削除す"
+"るパッケージの選択には <command>dselect</command> を使い、実際のインストール"
+"は APT が行います。"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"APT メソッドを有効にするには、<command>dselect</command> でアクセス(a) を選択"
+"し、それから APT メソッドを選択する必要があります。そうするとアーカイブの取得"
+"先の場所となる<emphasis>ソース</emphasis>群を聞かれます。これにはリモートのイ"
+"ンターネットサイトやローカルの Debian ミラー、CD-ROM を指定できます。各ソース"
+"で Debian アーカイブ全体のうちの一部を提供でき、APT は自動的に組み合わせて"
+"パッケージ群一式を構成します。CD-ROM がある場合はまずそれを指定し、それからミ"
+"ラーを指定するのが良い方法で、そうすることで最新のバグ修正にアクセスできるよ"
+"うになります。APT はインターネットからダウンロードする前に CD-ROM にあるパッ"
+"ケージを自動的に利用します。"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" ディストリビューションソース位置一覧の準備\n"
+"\n"
+" Debian ディストリビューションの基底 URL を指定してください。\n"
+" 認識できるアクセス方法: http file\n"
+"\n"
+" 例:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"<emphasis>ソース</emphasis>の準備は基礎となる Debian アーカイブの質問から始ま"
+"り、デフォルトは HTTP ミラーとなっています。その次は取得するディストリビュー"
+"ションを質問します。"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" 取得するディストリビューションのタグやパッケージファイルへのパスを\n"
+" / で終える形式で指定してください。ディストリビューションのタグには\n"
+" 以下のようなものがあります: stable unstable testing non-US\n"
+"\n"
+" ディストリビューション [stable]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"ディストリビューションはアーカイブ中の Debian バージョンを参照し、"
+"<emphasis>stable</emphasis> は最新のリリース版を、<emphasis>unstable</"
+"emphasis> は開発版を参照します。<emphasis>non-US</emphasis> は一部のミラーで"
+"のみ利用可能で、合衆国からの輸出ができない暗号化技術その他のものを収録する"
+"パッケージを参照します。ただしこういったパッケージの合衆国への輸入は合法で"
+"す。"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" 取得するコンポーネントを指定してください\n"
+" コンポーネントには以下のようなものがあります: main contrib non-free\n"
+"\n"
+" コンポーネント [main contrib non-free]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"コンポーネント一覧は取得するサブディストリビューションの一覧を参照します。こ"
+"のディストリビューションはソフトウェアのライセンスを基にして分けられていま"
+"す。main にあるのは DFSG フリーのパッケージですが contrib や non-free には利"
+"用目的や配布形態に様々な制限を課せられているものが収録されています。"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"ソースはいくらでも追加できます。準備スクリプトは必要なソースを全て指定するま"
+"で聞き続けます。"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"<command>dselect</command> を使う前にメニューから更新(u)を選択して利用可能な"
+"パッケージ一覧を更新する必要があります。これは <literal>apt-get update</"
+"literal> の上位集合で、取得した情報を <command>dselect</command> から利用でき"
+"るようにします。以前に <literal>apt-get update</literal> を実行していても更新"
+"(u)を実行する必要があります。"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"その後は選択(s)を使って選択し、導入(i)を使ってインストールします。APT メソッ"
+"ドを使っている場合は設定(c)や削除(r)コマンドに意味はなく、導入(i)コマンドがそ"
+"の両方を実行します。"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"デフォルトで APT はインストールに成功したパッケージ (.deb) ファイルを自動的に"
+"削除します。この挙動を変更するには /etc/apt/apt.conf 中に <literal>Dselect::"
+"clean \"prompt\";</literal> と記述します。"
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "インターフェース"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"<command>dselect</command> メソッドは実際に <command>apt-get</command> に対す"
+"るラッパースクリプト群です。このメソッドでは <command>apt-get</command> 単体"
+"に存在している以上の機能を実際に提供しています。"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"APT の <command>dselect</command> メソッドと <command>apt-get</command> は共"
+"に同一のインターフェイスを共有しています。通常は行う内容を告知して実行する簡"
+"単なシステムです。<placeholder type=\"footnote\" id=\"0\"/> 実行内容のまとめ"
+"を告知した後 APT が参考になる状態メッセージをいくらか表示するため、どれくらい"
+"進んでいるのか、あるいは残り作業がどれくらいあるのか見積もることができるよう"
+"になっています。"
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "スタートアップ"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"update 以外のあらゆる操作で、APT はいくつか処理を行い内部状態を準備します。ま"
+"た、システムの状態についてもいくらか確認します。この処理は <literal>apt-get "
+"check</literal> によりいつでも実行できます。"
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"パッケージリストを読み込んでいます... 完了\n"
+"依存関係ツリーを作成しています\n"
+"状態情報を読み取っています... 完了\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"これが最初に行うのはパッケージファイルを全てメモリに読み込むことです。APT は"
+"キャッシュを使うようになっているので、この処理は次に実行するときには早く終わ"
+"ります。見つけられないパッケージファイルがある場合は無視され、apt-get 終了時"
+"に注意を表示します。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"最後の処理はシステムの依存関係の詳細な分析です。インストール、あるいは展開さ"
+"れたパッケージの依存関係を全て確認し、問題ないか判断します。問題が見つかった"
+"場合は報告し、<command>apt-get</command> の実行を拒否します。"
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"パッケージリストを読み込んでいます... 完了\n"
+"依存関係ツリーを作成しています\n"
+"状態情報を読み取っています... 完了\n"
+"これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。\n"
+"下のパッケージには満たせない依存関係があります:\n"
+" 9fonts: 依存: xlib6g しかし、インストールされていません\n"
+" uucp: 依存: mailx しかし、インストールされていません\n"
+" blast: 依存: xlib6g (&gt;= 3.3-5) しかし、インストールされていません\n"
+" adduser: 依存: perl-base しかし、インストールされていません\n"
+" aumix: 依存: libgpmg1 しかし、インストールされていません\n"
+" debiandoc-sgml: 依存: sgml-base しかし、インストールされていません\n"
+" bash-builtins: 依存: bash (&gt;= 2.01) しかし、2.0-3 はインストールされています\n"
+" cthugha: 依存: svgalibg1 しかし、インストールされていません\n"
+" 依存: xlib6g (&gt;= 3.3-5) しかし、インストールされていません\n"
+" libreadlineg2: 競合:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"この例ではシステムに libreadlineg2 に関する重大な問題を含めて多数の問題があり"
+"ます。未解決の依存関係があれば各パッケージごとにそのパッケージに問題があるこ"
+"とを示し、併せて未解決の依存関係を1行で出力します。そのパッケージの依存問題の"
+"理由について簡潔な説明も添えられます。"
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"APT はそれでも既知の依存関係を全て検討し、パッケージが壊れた状態となることを"
+"回避しようとします。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"システムがこのように壊れた状態となる原因は2つあります。1つ目はアップグレード"
+"実行時にパッケージ間の難解な依存関係を <command>dpkg</command> がいくらか欠い"
+"ていることによります。<placeholder type=\"footnote\" id=\"0\"/>2つ目はパッ"
+"ケージのインストール処理中に何か失敗した場合です。この状況では依存するパッ"
+"ケージがインストールされないままパッケージが展開されている可能性があります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"APT がパッケージのインストール順序に特定の制約を設けていることにより2つ目の状"
+"況は1つ目の状況と比べて重大ですらなくなります。どちらの場合でも <command>apt-"
+"get</command> に <literal>-f</literal> オプションを指定することで APT は解決"
+"方法を推測し、処理を続けます。APT <command>dselect</command> メソッドでは常"
+"に <literal>-f</literal> オプションを有効にして、メンテナスクリプトでの問題が"
+"起きた場合でも簡単に処理を継続できるようにしています。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"しかし、1つ目の状況により重大な壊れ方になっているシステムの修正に <literal>-"
+"f</literal> オプションを使った場合はインストールにすぐに失敗、あるいはインス"
+"トール順序がおかしくなる可能性があります。どちらの場合も、APT が処理を十分に"
+"進められるところまで手作業により dpkg を使って (恐らく強制するオプションを指"
+"定して) 状況を修正する必要があります。"
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "状態レポート"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"処理を続ける前に <command>apt-get</command> は実行しようとする処理について報"
+"告します。通常この報告は実行される操作の種類を反映したものになりますが、一般"
+"的要素がいくつかあります。どの場合でもこの処理一覧は最終的な状態を示し、"
+"<literal>-f</literal> オプションその他の実行されるコマンドに関連する動作を考"
+"慮したものとなります。"
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "追加パッケージリスト"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"以下の特別パッケージがインストールされます:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"追加パッケージリストはコマンドラインで指示した以外にインストールやアップグ"
+"レードされるパッケージを全て表示します。これは <literal>install</literal> コ"
+"マンドの場合にのみ生成されます。一覧に挙げられるパッケージは自動インストール"
+"の結果による場合が多くなります。"
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "削除するパッケージ"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"以下のパッケージは「削除」されます:\n"
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"削除するパッケージリストはシステムから削除されるパッケージを全て表示します。"
+"これはどの操作でも起きるもので、重要なものが失われることのないように注意深く"
+"確認すべきです。<literal>-f</literal> オプションを使った場合はパッケージの削"
+"除を伴うことが特に多く、そのためこのオプションを指定した場合は特に注意を払う"
+"ようにしてください。この一覧にはインストールの中止等により一部だけがインス"
+"トールされているために削除されるパッケージが含まれることがあります。"
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "新規パッケージリスト"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"以下のパッケージが新たにインストールされます:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"新規パッケージリストでは単純にこれから起きることを再通知します。このパッケー"
+"ジ一覧は現在システムにインストールされておらず、APT 処理後には存在することに"
+"なります。"
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "一時固定リスト"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"以下のパッケージは保留されます\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"システム全体をアップグレードする場合、新しいパッケージが必要であったり既にイ"
+"ンストールされているパッケージと競合するためにパッケージの新しいバージョンが"
+"インストールできないということがあります。この場合、そのパッケージは一時固定"
+"リストに表示されます。この一覧に挙げられたパッケージをインストールする最善の"
+"方法は <literal>apt-get install</literal> または <command>dselect</command> "
+"を使ってその問題を解決することです。"
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "保留パッケージの警告"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"以下の変更禁止パッケージは変更されます:\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"保留となっているパッケージをインストールするように APT に指示することもできま"
+"す。その際、保留となっているパッケージを変更することを警告します。これは "
+"dist-upgrade または install を指示したときにしか起きないはずです。"
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "最後のまとめ"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr "最後に、APT は発生する全変更のまとめを表示します。"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"アップグレード: 206 個、新規インストール: 8 個、削除: 23 個、保留: 51 個。\n"
+"12 個のパッケージが完全にインストールまたは削除されていません。\n"
+"66.7MB 中 65.7MB のアーカイブを取得する必要があります。\n"
+"この操作後に追加で 26.5MB のディスク容量が消費されます。\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"まとめの1行目は単純に一覧を全て短くまとめたもので、アップグレードされる (既に"
+"インストールされていて新しいバージョンが利用可能な) パッケージの数についても"
+"示します。2行目は設定が完了していないパッケージの数を示し、インストールを中止"
+"した場合にこれに集計されることがあります。最終行はそのインストールで必要とな"
+"る容量の要件を示します。最初の数値の組はアーカイブファイルのサイズを示しま"
+"す。この1つ目の数値はリモートから取得してくる必要のあるバイト数、2つ目は必要"
+"となる全アーカイブの合計サイズを示します。次の数値は現在インストールされてい"
+"るパッケージと新しくインストールしたパッケージのサイズの違いを示します。これ"
+"は処理が全て終わった後に /usr で消費される容量にほぼ相当します。パッケージを"
+"大量に削除する場合は解放される容量を示すこともあります。"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"他の報告として、-u オプションを使うとアップグレードされるパッケージを表示しま"
+"す。これは前に示した例と似たものです。"
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "状態表示"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"アーカイブやパッケージファイルのダウンロード中、APT は状態を示す一連のメッ"
+"セージを表示します。"
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"取得:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"取得:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"ヒット http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"取得:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"取得:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"APT がファイルの取得を開始すると、最終行でダウンロードの進捗状況を示しつつ"
+"<emphasis>取得</emphasis>で始まる行が表示されます。進捗の最初のパーセント値は"
+"全ファイルに対する取得済みの全体での割合を示します。残念ながらパッケージファ"
+"イルのサイズは不明なので <literal>apt-get update</literal> は不正確な予測を行"
+"う可能性があります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"状態を示す行の次の節は各ダウンロードスレッドごとに1度ずつ繰り返され、進行中の"
+"操作や処理についての有用な情報をいくらか示します。この節は単純に "
+"<emphasis>Forking</emphasis> となっていることもあり、その場合は OS がダウン"
+"ロード用のモジュールを読み込んでいることを示します。[ の後の最初の語は履歴に"
+"表示されている取得番号です。その次の語はダウンロード対象の名前の短縮形です。"
+"アーカイブの場合は取得中のパッケージの名前が入ります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"単一引用符内はダウンロードのやりとりの進捗を示す有益な文字列です。標準的には"
+"<emphasis>...へ接続しています</emphasis>から<emphasis>ファイルを待っています"
+"</emphasis>へ、それから<emphasis>...をダウンロードしています</emphasis>または"
+"<emphasis>...を再開しています</emphasis>へと進みます。最後の値はリモートサイ"
+"トからダウンロードしたバイト数です。ダウンロードが始まるとこれは "
+"<literal>102/10.2k</literal> のように表示され、この場合10.2キロバイトのうち"
+"102バイトが取得済みであることを示します。合計サイズは常に4ケタで表示され、表"
+"示空間を保つようになっています。サイズ表示の後はそのファイル自体の進捗状況を"
+"百分率で示したものです。その2つ後は瞬間的な平均速度です。この値は5秒ごとに更"
+"新され、その間のデータ転送速度を反映します。最後は推定転送時間を表示していま"
+"す。これは定期的に更新され、表示している転送速度で全て完了する時間を表示しま"
+"す。"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"状態表示は0.5秒ごとに更新してダウンロードの進捗状況を絶えず通知し、取得行は新"
+"しいファイルの処理が始まるたびに流れていきます。状態表示は絶えず更新されるた"
+"めファイルへの記録には適しません。<literal>-q</literal> オプションを使うと状"
+"態を表示しないようにできます。"
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"APT はアーカイブのインストールに <command>dpkg</command> を使い、ダウンロード"
+"の完了後は <command>dpkg</command> インターフェイスに切り替わります。"
+"<command>dpkg</command> もパッケージの処理中にいくつか質問し、パッケージ自体"
+"も複数質問するかもしれません。通常それぞれの質問の前にそれが何を聞いているの"
+"か説明します。その質問の内容は多岐にわたるものであり、ここで説明できるもので"
+"は全くありません。"
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "オフラインでの APT の使用法"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"このドキュメントはネットワークがない環境での APT の使用方法を説明しています。"
+"具体的には、アップグレード時の「スニーカーネット」アプローチです。"
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "はじめに"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "概要"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"通常 APT は Debian アーカイブに、ローカルメディアから、あるいはネットワーク経"
+"由で直接アクセスできる必要があります。他によくある苦情としてはある Debian マ"
+"シンの接続がモデム等のために低速で、別のマシンには非常に高速な接続があるけれ"
+"ども物理的に遠い、といったことがあります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"これに対する解法としては Zip や SuperDisk ディスクといった大容量脱着可能メ"
+"ディアを使います。こういったディスクは Debian アーカイブ全体を格納するには十"
+"分とは言えない容量ですがほとんどのユーザにとって必要なその一部を収めるには十"
+"分余裕があります。その考え方は APT を使って必要なパッケージの一覧を生成し、接"
+"続状態の良好な別のマシンを使ってそのディスク上に取得します。APT を使える別の "
+"Debian マシンや、完全に異なる OS で wget のようなダウンロードツールを使うこと"
+"も可能です。<emphasis>リモートホスト</emphasis>はパッケージをダウンロードする"
+"マシン、<emphasis>対象ホスト</emphasis>は接続がないあるいは良くないマシンだと"
+"考えてください。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"これは APT 設定ファイルを独創的に操作することで実現できます。あるディスクを "
+"APT が検索するようにするために必須となる前提条件はアーカイブファイルです。そ"
+"のディスクは長いファイル名を扱えるファイルシステム、例えば ext2 や fat32、"
+"vfat でフォーマットする必要があることに注意してください。"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "両方のマシンでの APT の使用法"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"APT を両方のマシンで利用できるようにする最も単純な設定を考えます。基本的な考"
+"え方は status ファイルのコピーをそのディスクに置いて最新のパッケージファイル"
+"の取得やダウンロードするパッケージの決定にはリモートマシンを使います。その"
+"ディスクのディレクトリ構造は次のようになります:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "設定ファイル"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"設定ファイルでは APT が管理ファイルをそのディスクに保存し、そのディスク上の設"
+"定ファイルを同様に利用するように指示する必要があります。sources.list ではリ"
+"モートマシンから利用する適切なサイトを指定し、status ファイルは<emphasis>対象"
+"ホスト</emphasis>の <emphasis>/var/lib/dpkg/status</emphasis> をコピーしたも"
+"のを利用します。ローカルアーカイブを使っている場合はその URI を利用しないとい"
+"けないことに注意してください。書式はファイルの URI と同一です。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt.conf</emphasis> には APT がそのディスクを使うようにするのに必要"
+"な情報を記述しないといけません:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"apt.conf の man ページや <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis> にある見本の設定ファイルを調べるとさらなる詳細があります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"対象のマシンでまず行うことはディスクをマウントしてそのディスクに <emphasis>/"
+"var/lib/dpkg/status</emphasis> をコピーすることです。概要にまとめられているよ"
+"うに、ディレクトリ <emphasis>archives/partial/</emphasis> 及び "
+"<emphasis>lists/partial/</emphasis> を作成する必要もあるでしょう。それから"
+"ディスクをリモートマシンに移動して sources.list を設定します。リモートマシン"
+"では以下の手順を実行します:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ package ファイルを APT が取得します ]\n"
+" # apt-get dist-upgrade\n"
+" [ 対象マシンをアップグレードするのに必要なパッケージを、APT が取得します ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"dist-upgrade コマンドは他の任意の標準的な APT コマンド、特に dselect-upgrade "
+"に置き換えることができます。<emphasis>dselect</emphasis> 等の APT フロントエ"
+"ンドを使うこともできます。しかし、それには選択したときにローカルコンピュータ"
+"とやりとりしてしまうという問題があります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"これで、対象のマシンをアップグレードするのに必要な索引ファイルとアーカイブが"
+"全てこのディスクに収録されたということになります。ディスクを戻して実行します:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ キャッシュファイルのローカルコピーを生成します ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ もしくはその他の APT コマンド ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"適切に機能するためにはローカルのファイルを status ファイルに再指定する必要が"
+"あります。これは非常に重要です!"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"dselect を使っている場合、disc/status はリモートマシンで何か選択すると更新さ"
+"れるため /var/lib/dpkg/status にコピーするのは非常に危険です。選択はローカル"
+"マシンでのみ行うことを強く勧めます - しかしこれは常に可能だとは限りません。"
+"dpkg や APT を実行している間は status ファイルをコピー *しないでください* !!"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "APT と wget の使用"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> は人気のある移植性の高いダウンロードツールで、ほぼ"
+"あらゆるマシンで実行できます。上記の方法とは異なり、これには利用可能なパッ"
+"ケージの一覧を Debian マシンで用意しておく必要があります。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"基本的な考え方は、リモートサイトからダウンロードしたアーカイブファイルだけを"
+"収録したディスクを作成するということです。これは apt-get に --print-uris オプ"
+"ションを使って行い、それから wget スクリプトを準備して実際にパッケージを取得"
+"します。"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "操作"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"前の技とは異なり、特別な設定ファイルを必要としません。標準的な APT コマンドを"
+"単純に使ってファイル一覧を生成します。"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade\n"
+" [ 問い合わせには no を回答し、意図しない動作を起こすことのないように ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"dselect-upgrade を含め、ここでは dist-upgrade 以外の任意のコマンドを使えま"
+"す。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"/disc/wget-script ファイルには、必要なアーカイブを取得するために実行する "
+"wget コマンドの一覧を収録するようになっています。ディスク上の出力を減らすた"
+"め、このスクリプトは現在のディレクトリをそのディスクのマウントポイントとして"
+"実行するようにしてください。"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr "リモートマシンでは以下のようにします。"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ お待ちください... ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"アーカイブのダウンロードが終わってディスクが Debian マシンに返ってくるとイン"
+"ストールを続けられるようになります。"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr "これで、ディスクにある取得済みのアーカイブを使用するようになります。"
+
+#~ msgid ""
+#~ "<literal>http::Proxy</literal> sets the default proxy to use for HTTP "
+#~ "URIs. It is in the standard form of <literal>http://[[user][:pass]@]host[:"
+#~ "port]/</literal>. Per host proxies can also be specified by using the "
+#~ "form <literal>http::Proxy::&lt;host&gt;</literal> with the special "
+#~ "keyword <literal>DIRECT</literal> meaning to use no proxies. If no one of "
+#~ "the above settings is specified, <envar>http_proxy</envar> environment "
+#~ "variable will be used."
+#~ msgstr ""
+#~ "<literal>http::Proxy</literal> には、HTTP URI で使用するデフォルトプロキシ"
+#~ "を設定します。<literal>http://[[user][:pass]@]host[:port]/</literal> とい"
+#~ "う標準形で表します。ホストごとのプロキシを、<literal>http::Proxy::&lt;"
+#~ "host&gt;</literal> という形で指定できます。この時、プロキシを使用しないと"
+#~ "いう意味の特殊キーワード <literal>DIRECT</literal> も使用できます。上記の"
+#~ "設定をなにも指定しないと、環境変数 <envar>http_proxy</envar> を使用しま"
+#~ "す。"
+
+#~ msgid ""
+#~ "The <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> and "
+#~ "<literal>proxy</literal> options work for HTTPS URIs in the same way as "
+#~ "for the <literal>http</literal> method, and default to the same values if "
+#~ "they are not explicitly set. The <literal>Pipeline-Depth</literal> option "
+#~ "is not yet supported."
+#~ msgstr ""
+#~ "<literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal>, "
+#~ "<literal>proxy</literal> の各オプションは、HTTPS URI でも <literal>http</"
+#~ "literal> メソッドと同様に動作します。また、明示的に値を指定しない場合のデ"
+#~ "フォルト値も同様です。<literal>Pipeline-Depth</literal> オプションはまだサ"
+#~ "ポートしていません。"
+
+#~ msgid ""
+#~ "<literal>CaInfo</literal> suboption specifies place of file that holds "
+#~ "info about trusted certificates. <literal>&lt;host&gt;::CaInfo</literal> "
+#~ "is the corresponding per-host option. <literal>Verify-Peer</literal> "
+#~ "boolean suboption determines whether or not the server's host certificate "
+#~ "should be verified against trusted certificates. <literal>&lt;host&gt;::"
+#~ "Verify-Peer</literal> is the corresponding per-host option. "
+#~ "<literal>Verify-Host</literal> boolean suboption determines whether or "
+#~ "not the server's hostname should be verified. <literal>&lt;host&gt;::"
+#~ "Verify-Host</literal> is the corresponding per-host option. "
+#~ "<literal>SslCert</literal> determines what certificate to use for client "
+#~ "authentication. <literal>&lt;host&gt;::SslCert</literal> is the "
+#~ "corresponding per-host option. <literal>SslKey</literal> determines what "
+#~ "private key to use for client authentication. <literal>&lt;host&gt;::"
+#~ "SslKey</literal> is the corresponding per-host option. "
+#~ "<literal>SslForceVersion</literal> overrides default SSL version to use. "
+#~ "It can contain either of the strings '<literal>TLSv1</literal>' or "
+#~ "'<literal>SSLv3</literal>'. <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> is the corresponding per-host option."
+#~ msgstr ""
+#~ "<literal>CaInfo</literal> サブオプションは、信頼済み証明書情報の保持場所を"
+#~ "指定します。<literal>&lt;host&gt;::CaInfo</literal> は、同様のホストごとの"
+#~ "オプションです。<literal>Verify-Peer</literal> 真偽値サブオプションは、信"
+#~ "頼済み証明書に対してサーバのホスト証明書を、検証するかどうかを決定します。"
+#~ "<literal>&lt;host&gt;::Verify-Peer</literal> は、同様のホストごとのオプ"
+#~ "ションです。<literal>Verify-Host</literal> 真偽値サブオプションは、サーバ"
+#~ "のホスト名を検証するかどうかを決定します。<literal>&lt;host&gt;::Verify-"
+#~ "Host</literal> は、同様のホストごとのオプションです。<literal>SslCert</"
+#~ "literal> は、クライアント認証に使用する証明書を決定します。<literal>&lt;"
+#~ "host&gt;::SslCert</literal> は、同様のホストごとのオプションです。"
+#~ "<literal>SslKey</literal> は、クライアント認証に使用する秘密鍵を決定しま"
+#~ "す。<literal>&lt;host&gt;::SslKey</literal> は、同様のホストごとのオプショ"
+#~ "ンです。<literal>SslForceVersion</literal> は、デフォルトで使用する SSL の"
+#~ "バージョンを上書きします。'<literal>TLSv1</literal>' か '<literal>SSLv3</"
+#~ "literal>' という文字列を指定できます。<literal>&lt;host&gt;::"
+#~ "SslForceVersion</literal> は、同様のホストごとのオプションです。"
+
+#~ msgid ""
+#~ "The http scheme specifies an HTTP server for the archive. If an "
+#~ "environment variable <envar>http_proxy</envar> is set with the format "
+#~ "http://server:port/, the proxy server specified in <envar>http_proxy</"
+#~ "envar> will be used. Users of authenticated HTTP/1.1 proxies may use a "
+#~ "string of the format http://user:pass@server:port/. Note that this is an "
+#~ "insecure method of authentication."
+#~ msgstr ""
+#~ "http スキームはアーカイブとして、HTTP サーバを指定します。環境変数 "
+#~ "<envar>http_proxy</envar> が、http://server:port/ と言った形で指定されてい"
+#~ "れば、<envar>http_proxy</envar> で指定したプロキシサーバを使用します。ユー"
+#~ "ザ認証が必要な HTTP/1.1 プロキシの場合、http://user:pass@server:port/ とい"
+#~ "う形で指定してください。この認証方法は安全ではないことに注意してください。"
+
+#~ msgid ""
+#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if "
+#~ "it encounters unauthenticated archives to give a slightly longer grace "
+#~ "period on this backward compatibility effecting change. This exception "
+#~ "will be removed in future releases and you can opt-out of this grace "
+#~ "period by setting the configuration option <option>Binary::apt-get::"
+#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> "
+#~ "or <option>--no-allow-insecure-repositories</option> on the command line."
+#~ msgstr ""
+#~ "一時的な例外として &apt-get; (not &apt;!) はこの後方互換性に影響のある変更"
+#~ "に対応するための少しばかり長い猶予期間として、証明されていないアーカイブに"
+#~ "ついてのみ警告します。この例外は将来のリリースでは削除され、設定オプショ"
+#~ "ン <option>Binary::apt-get::Acquire::AllowInsecureRepositories</option> "
+#~ "に <literal>false</literal> を設定するかコマンドラインで <option>--no-"
+#~ "allow-insecure-repositories</option> を指定することでこの猶予期間を無効化"
+#~ "することもできます。"
+
+#~ msgid "Archive Configuration"
+#~ msgstr "アーカイブ設定"
diff --git a/doc/po/nl.po b/doc/po/nl.po
new file mode 100644
index 0000000..5a7bf81
--- /dev/null
+++ b/doc/po/nl.po
@@ -0,0 +1,13482 @@
+# Translation of apt-doc to Dutch
+# This file is distributed under the same license as the apt-doc package.
+# Frans Spiesschaert <Frans.Spiesschaert@yucom.be>, 2015, 2016, 2017, 2018, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.8.0~rc3\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-03-08 09:41+0100\n"
+"PO-Revision-Date: 2019-02-16 20:46+0100\n"
+"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
+"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT-team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA-Pagina</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bugpagina</ulink>.\n"
+" Indien u een bug in APT wilt rapporteren, raadpleeg dan\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> of het\n"
+" &reportbug; commando.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Auteur</title>\n"
+" <para>APT werd geschreven door het APT-team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Een korte samenvatting van het gebruik weergeven.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Het versienummer van het programma weergeven.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuratiebestand; Een te gebruiken configuratiebestand opgeven. \n"
+" Het programma zal het standaard configuratiebestand inlezen en nadien\n"
+" dit configuratiebestand. Als configuratie-instellingen opgegeven moeten\n"
+" worden vooraleer de standaard configuratiebestanden verwerkt worden,\n"
+" geef dan een bestand op met de omgevingsvariabele <envar>APT_CONFIG</envar>.\n"
+" Raadpleeg &apt-conf; voor informatie over de syntaxis.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Een configuratieoptie instellen; Dit stelt een\n"
+" willekeurige configuratieoptie in. De syntaxis is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> en <option>--option</option> kunnen meermaals\n"
+" gebruikt worden om verschillende opties in te stellen.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>Alle commandoregelopties kunnen via het configuratiebestand ingesteld\n"
+" worden. de omschrijving geeft de in te stellen configuratieoptie\n"
+" op. Bij booleaanse opties kunt u instellingen uit het \n"
+" configuratiebestand overschrijven door iets te gebruiken als <option>-f-</option>,\n"
+" <option>--no-f</option>, <option>-f=no</option> en meerdere andere variaties.\n"
+" </para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>Configuratiebestand voor APT.\n"
+" Configuratie-item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>Configuratiebestandsfragmenten voor APT.\n"
+" Configuratie-item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Opslaggebied voor opgehaalde pakketbestanden.\n"
+" Configuratie-item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Opslaggebied voor pakketbestanden tijdens het ophalen.\n"
+" Configuratie-item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> zal impliciet toegevoegd worden)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Bestand met versievoorkeuren.\n"
+" Dit is waar u &quot;pinning&quot; kunt opgeven.\n"
+" Dit is een voorkeur voor het ophalen van bepaalde pakketten\n"
+" uit een aparte pakketbron\n"
+" of uit een andere versie van een distributie.\n"
+" Configuratie-item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>Bestandsfragmenten met versievoorkeuren.\n"
+" Configuratie-item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locaties waarvandaan pakketten opgehaald moeten worden.\n"
+" Configuratie-item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>Bestandsfragmenten met locaties\n"
+" waarvandaan pakketten opgehaald moeten worden.\n"
+" Configuratie-item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Opslaggebied voor statusinformatie over elke pakketbron vermeld in\n"
+" &sources-list;\n"
+" Configuratie-item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Opslaggebied voor statusinformatie tijdens het ophalen.\n"
+" Configuratie-item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> zal impliciet toegevoegd worden)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Sleutelbos met lokaal vertrouwde sleutels.\n"
+" Nieuwe sleutels worden hier toegevoegd.\n"
+" Configuratie-item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>Bestandsfragmenten met vertrouwde sleutels. \n"
+" Bijkomende sleutelbossen kunnen hier opgeslagen worden \n"
+" (door andere pakketten of de systeembeheerder).\n"
+" Configuratie-item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Statuslijst van automatisch geïnstalleerde pakketten.\n"
+" Configuratie-item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"VERTALING\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" De Nederlandse vertaling werd in 2015 gemaakt door Frans Spiesschaert\n"
+" <email>Frans.Spiesschaert@yucom.be</email>, in samenwerking met het\n"
+" Debian Dutch l10n Team <email>debian-l10n-dutch@lists.debian.org</email>.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Merk op dat de vertaling van dit document nog onvertaalde delen kan \n"
+" bevatten. Dit is intentioneel om te vermijden dat inhoud verloren zou \n"
+" gaan door een vertaling die achterop loopt op het origineel.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string "
+"\"configuratietekenreeks\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"configuratiebestand\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release \"doelrelease"
+"\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architectuur\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pakket\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pakketversienummer\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"reguliere_expressie\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cd-aankoppelpunt\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"tijdelijke_map\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"bestandsnaam\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"pad\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-bestand\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"padprefix\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"sectie\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"sleutel-ID\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr "commandoregelinterface"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "Omschrijving"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+"<command>apt</command> biedt een hogere commandoregelinterface voor het "
+"systeem van pakketbeheer. Het is bedoeld als een interface voor de "
+"eindgebruiker en standaard gebruikt het sommige opties op een manier die, "
+"vergeleken met meer gespecialiseerde APT-hulpmiddelen zoals &apt-get; en "
+"&apt-cache;, beter aangepast is aan interactief gebruik."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+"Ook de man-pagina is, in grote mate gelijk <command>apt</command> zelf, "
+"bedoeld als een interface voor de eindgebruiker. In die hoedanigheid "
+"vermeldt ze enkel de meest gebruikte commando's en opties. Deels is dit om "
+"niet op verschillende plaatsen met dezelfde informatie te komen en deels om "
+"te vermijden dat de lezer overstelpt zou worden door een overvloed aan "
+"opties en details."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr "(&apt-get;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+"<option>update</option> wordt gebruikt om pakketinformatie op te halen "
+"vanuit alle ingestelde pakketbronnen. Andere commando's werken met deze "
+"gegevens om bijvoorbeeld opwaarderingen van pakketten uit te voeren of om "
+"informatie op te zoeken en weer te geven over alle pakketten die beschikbaar "
+"zijn voor installatie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+"<literal>upgrade</literal> wordt gebruikt om voor alle pakketten die "
+"momenteel op het systeem geïnstalleerd zijn, de opwaarderingen te "
+"installeren die beschikbaar zijn in de pakketbronnen die in het bestand "
+"&sources-list; geconfigureerd werden. Nieuwe pakketten zullen geïnstalleerd "
+"worden als dat noodzakelijk is om aan vereisten te voldoen, maar "
+"geïnstalleerde pakketten zullen nooit verwijderd worden. Indien de "
+"opwaardering van een pakket vereist dat een geïnstalleerd pakket verwijderd "
+"wordt, zal de opwaardering voor dat pakket niet uitgevoerd worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+"<literal>full-upgrade</literal> vervult de functie van upgrade, maar zal ook "
+"momenteel geïnstalleerde pakketten verwijderen als dat nodig is om het "
+"systeem volledig op te waarderen."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ","
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+"Voert de gevraagde actie uit op een of meer pakketten die opgegeven werden "
+"aan de hand van een &regex;, een &glob; (expansie) of een exacte pakketnaam. "
+"De gevraagde actie kan voor een specifiek pakket gewijzigd worden door aan "
+"de naam van dat pakket een plusteken (+) toe te voegen als dat pakket "
+"geïnstalleerd moet worden of een minteken (-) als het verwijderd moet worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"Een specifieke versie van een pakket kiezen voor installatie kan door de "
+"pakketnaam te laten volgen door een gelijkheidsteken (=) en de te selecteren "
+"versie van het pakket. Anderzijds kan de versie uit een specifieke "
+"distributie geselecteerd worden door de pakketnaam te laten volgen door een "
+"slash en de codenaam &debian-stable-codename;, &debian-testing-codename;, "
+"sid …) of de suitenaam ervan (stable, testing, unstable). Als om aan dit "
+"verzoek te kunnen voldoen, vereisten geïnstalleerd moeten worden, zullen de "
+"daarvoor geselecteerde versies ook uit deze release afkomstig zijn."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+"Bij het verwijderen van een pakket worden alle verpakte gegevens verwijderd, "
+"maar de meestal kleine (aangepaste) gebruikersconfiguratiebestanden worden "
+"op het systeem achtergelaten voor het geval de verwijdering per ongeluk "
+"plaats vond. In dat geval volstaat het om een installatieverzoek uit te "
+"vaardigen voor het per ongeluk verwijderde pakket om zijn vroegere "
+"functionaliteit te herstellen. Daarentegen kunt u van deze restanten afraken "
+"door het commando <command>purge</command> te gebruiken, zelfs bij reeds "
+"verwijderde pakketten. Merk op dat dit geen enkele invloed heeft op "
+"eventuele gegevens of configuratie-instellingen die in uw thuismap "
+"opgeslagen zijn."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"<literal>autoremove</literal> wordt gebruikt om pakketten te verwijderen die "
+"automatisch geïnstalleerd werden om te voldoen aan de vereisten van andere "
+"pakketten en nu niet langer nodig zijn omdat de vereisten veranderden of "
+"omdat de pakketten die van die pakketten afhankelijk waren intussen "
+"verwijderd werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+"U zou moeten nagaan of de lijst geen toepassingen bevat die u leren "
+"waarderen heeft, ook al waren ze ooit enkel geïnstalleerd als een vereiste "
+"voor een ander pakket. Een dergelijk pakket kunt u als handmatig "
+"geïnstalleerd markeren met &apt-mark;. Voor pakketten die u expliciet via "
+"<command>install</command> geïnstalleerd heeft, zal ook nooit voorgesteld "
+"worden om ze automatisch te verwijderderen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+"<option>search</option> kan gebruikt worden om in de lijst van beschikbare "
+"pakketten te zoeken naar de opgegeven &regex;-term(en) en de gevonden "
+"overeenkomsten te tonen. Dit kan bijvoorbeeld nuttig zijn als u op zoek bent "
+"naar pakketten met een specifieke functionaliteit. Indien u op zoek bent "
+"naar een pakket dat een specifiek bestand bevat, gebruikt u best &apt-file;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+"Toont informatie over het/de opgegeven pakket(ten), onder meer welke zijn "
+"vereisten zijn, de installatie- en downloadgrootte, de broncode waarvan het "
+"pakket afkomstig is, de beschrijving van de inhoud van het pakket en nog "
+"veel meer. Het kan bijvoorbeeld nuttig zijn om die informatie te bekijken "
+"vooraleer u &apt; toestaat om een pakket te verwijderen of bij het zoeken "
+"naar nieuw te installeren pakketten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr "(werk-in-uitvoering)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+"<literal>list</literal> is min of meer vergelijkbaar met <command>dpkg-query "
+"--list</command> in die zin dat het een lijst van pakketten kan weergeven "
+"die aan bepaalde criteria beantwoorden. Het kent het gebruik van "
+"expansiepatronen (&glob; patterns) voor het vergelijken van pakketnamen en "
+"het ondersteunt opties om geïnstalleerde (<option>--installed</option>), "
+"opwaardeerbare (<option>--upgradable</option>) of alle beschikbare "
+"(<option>--all-versions</option>) versies weer te geven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+"<literal>edit-sources</literal> laat u toe uw &sources-list;-bestanden te "
+"bewerken met de teksteditor van uw voorkeur terwijl het ook basale "
+"foutcontroles uitvoert."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr "Het gebruik in scripts en verschillen met ander APT-gereedschap"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+"Het commandoregelprogramma &apt; werd ontworpen als een instrument voor de "
+"eindgebruiker en het is mogelijk dat het gedrag ervan verschilt naargelang "
+"de versie van het programma. Hoewel ernaar gestreefd wordt om de neerwaartse "
+"compatibiliteit niet te verbreken, wordt ze ook niet gegarandeerd als blijkt "
+"dat een aanpassing gunstig is voor interactief gebruik."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+"Alle functionaliteit van &apt; is ook beschikbaar via toepassingsspecifiek "
+"APT-gereedschap zoals &apt-get; en &apt-cache;. &apt; wijzigt enkel de "
+"standaardwaarde van sommige opties (zie &apt-conf; en in het bijzonder het "
+"binaire toepassingsgebied). U zou er daarom de voorkeur aan moeten geven om "
+"in uw scripts deze commando's (met eventueel een aantal bijkomende opties) "
+"te gebruiken omdat die zoveel als mogelijk achterwaarts compatibel gehouden "
+"worden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "Zie ook"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, De APT "
+"Gebruikershandleiding in &guidesdir;, &apt-preferences;, de APT Howto."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "Diagnostiek"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt</command> geeft de terugkeerwaarde nul bij een normaal verlopen "
+"operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr ""
+"APT gereedschap voor het behandelen van pakketten -- commandoregelinterface"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> is het gereedschap voor de commandoregel voor het "
+"behandelen van pakketten. Het kan door de gebruiker beschouwd worden als "
+"zijn \"backend\" (het basisinstrument) voor andere gereedschappen die "
+"gebruik maken van de bibliotheek van APT. Er bestaan verschillende \"front-"
+"end\" interfaces, zoals &aptitude;, &synaptic; en &wajig;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"Tenzij de optie <option>-h</option>, of <option>--help</option> opgegeven "
+"werd, moet een van de onderstaande commando's gebruikt worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"<literal>update</literal> wordt gebruikt om de indexbestanden van "
+"beschikbare pakketten terug te synchroniseren met hun pakketbronnen. De "
+"indexen worden opgehaald van de locatie(s) die in <filename>/etc/apt/sources."
+"list</filename> opgegeven werden. Indien bijvoorbeeld een Debian-archief "
+"gebruikt wordt, zal dit commando de bestanden <filename>Packages.gz</"
+"filename> ophalen en doorzoeken zodat de informatie over nieuwe en "
+"bijgewerkte pakketten beschikbaar wordt. Een <literal>update</literal> moet "
+"altijd uitgevoerd worden voor een <literal>upgrade</literal> of een "
+"<literal>dist-upgrade</literal>. U moet er rekening mee houden dat de "
+"globale voortgangsindicator niet betrouwbaar is, aangezien de grootte van de "
+"pakketbestanden vooraf niet gekend is."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"<literal>upgrade</literal> wordt gebruikt om vanaf de pakketbronnen die in "
+"het bestand <filename>/etc/apt/sources.list</filename> vermeld worden, de "
+"recentste versies te installeren van alle pakketten die momenteel op het "
+"systeem geïnstalleerd zijn. Pakketten waarvan een recentere versie "
+"beschikbaar is, worden opgehaald en bijgewerkt. Onder geen beding worden "
+"pakketten die momenteel geïnstalleerd zijn, verwijderd of worden pakketten "
+"die nog niet geïnstalleerd zijn, opgehaald en geïnstalleerd. Recentere "
+"versies van pakketten die momenteel geïnstalleerd zijn en die niet "
+"bijgewerkt kunnen worden zonder de installatiestatus van een ander pakket te "
+"wijzigen, zullen op hun huidige versie behouden blijven. Vooraf moet een "
+"<literal>update</literal> uitgevoerd worden, zodat <command>apt-get</"
+"command> weet dat er nieuwere versies van pakketten beschikbaar zijn."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"<literal>dist-upgrade</literal> vervult niet enkel de functie van "
+"<literal>upgrade</literal>, maar handelt bovendien op een intelligente "
+"manier vereisten af die bij de nieuwere pakketversies veranderd zijn. "
+"<command>apt-get</command> beschikt over een \"slim\" systeem van "
+"conflictoplossing en zal proberen om de belangrijkste pakketten op te "
+"waarderen, eventueel, mocht dat nodig blijken, ten koste van minder "
+"belangrijke. Het kan daarom gebeuren dat het commando <literal>dist-upgrade</"
+"literal> sommige pakketten verwijdert. Het bestand <filename>/etc/apt/"
+"sources.list</filename> bevat een lijst met locaties waarvandaan de gewenste "
+"pakketten opgehaald kunnen worden. Zie ook &apt-preferences; voor een "
+"mechanisme dat toelaat om voor individuele pakketten de algemene "
+"instellingen te overschrijven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> wordt gebruikt in combinatie met "
+"&dselect;, het traditionele front-end van Debian voor pakketbeheer. "
+"<literal>dselect-upgrade</literal> volgt de veranderingen op die &dselect; "
+"aanbrengt in het <literal>Status</literal>-veld van de beschikbare pakketten "
+"en voert de acties uit die nodig zijn om die status waar te maken "
+"(bijvoorbeeld het verwijderen van oude en het installeren van nieuwe "
+"pakketten)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"<literal>install</literal> wordt gevolgd door een of meer pakketten die men "
+"wenst te installeren of op te waarderen. Elk pakket wordt aangeduid met de "
+"pakketnaam, niet met zijn volledige unieke bestandsnaam (in een Debian "
+"systeem bijvoorbeeld zal <package>apt-utils</package> het argument zijn dat "
+"opgegeven wordt en niet <filename>apt-utils_&apt-product-version;_amd64.deb</"
+"filename>). Alle pakketten die door het/de opgegeven te installeren "
+"pakket(ten) vereist worden, zullen eveneens opgehaald en geïnstalleerd "
+"worden. Het bestand <filename>/etc/apt/sources.list</filename> wordt "
+"gebruikt om de gewenste pakketten te vinden. Indien aan het eind van een "
+"pakketnaam een koppelteken (zonder spatie ertussenin) geplaatst wordt, zal "
+"het opgegeven pakket verwijderd worden indien het geïnstalleerd is. Net zo "
+"kan een plus-teken gebruikt worden om op te geven dat een pakket "
+"geïnstalleerd moet worden. Deze laatstgenoemde werkwijzen kunnen gebruikt "
+"worden om beslissingen te overschrijven die door het "
+"conflictoplossingssysteem van apt-get genomen worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"Een specifieke versie van een pakket kiezen voor installatie kan door de "
+"pakketnaam te laten volgen door een gelijkheidsteken en de te selecteren "
+"versie van het pakket. Dit zorgt ervoor dat die versie wordt opgezocht en "
+"voor installatie geselecteerd wordt. Eveneens kan een specifieke distributie "
+"geselecteerd worden door de pakketnaam te laten volgen door een slash en de "
+"versie van de distributie of de archiefnaam ervan (stable, testing, "
+"unstable)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"Beide versieselectiemechanismes kunnen pakketten degraderen en moeten met "
+"zorg gebruikt worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"Dit is ook de aangewezen werkwijze indien u een of meer reeds geïnstalleerde "
+"pakketten wilt opwaarderen zonder alle op het systeem aanwezige pakketten op "
+"te waarderen. In tegenstelling tot het commando \"upgrade\", dat de "
+"recentste versie installeert van alle op het systeem aanwezige pakketten, "
+"zal \"install\" enkel de recentste versie installeren van het/de opgegeven "
+"pakket(ten). Geef gewoon de naam op van het/de pakket(ten) dat/die u wenst "
+"op te waarderen en, indien er een recentere versie beschikbaar is, zal die "
+"(samen met zijn vereisten, zoals hiervoor uitgelegd werd) gedownload en "
+"geïnstalleerd worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"Tot slot stelt het mechanisme &apt-preferences; u in staat om voor "
+"individuele pakketten een ander installatiebeleid te creëren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"Indien geen enkel pakket overeenkomt met de opgegeven expressie en de "
+"expressie een '.', '?' of '*' bevat, dan wordt aangenomen dat het om een "
+"POSIX reguliere expressie gaat en wordt die toegepast op alle pakketnamen "
+"uit de database. Elke overeenkomst wordt dan geïnstalleerd (of verwijderd). "
+"Merk op dat het zoeken naar een overeenkomst gebeurt per deeltekenreeks, "
+"zodat 'lo.*' zowel met 'how-lo' als met 'lowest' een overeenkomst oplevert. "
+"Indien dit niet wenselijk is, veranker de reguliere expressie dan met behulp "
+"van het teken '^' of '$' of maak de reguliere expressie specifieker."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr ""
+"<literal>reinstall</literal> is een alias voor <literal>install --reinstall</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"<literal>remove</literal> is identiek aan <literal>install</literal> behalve "
+"dat pakketten ermee verwijderd in plaats van geïnstalleerd worden. Merk op "
+"dat het verwijderen van een pakket de configuratiebestanden ervan op het "
+"systeem laat staan. Indien een plus-teken aan de pakketnaam toegevoegd wordt "
+"(zonder spatie ertussenin), zal het opgegeven pakket geïnstalleerd in plaats "
+"van verwijderd worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"<literal>purge</literal> is identiek aan <literal>remove</literal> behalve "
+"dat pakketten verwijderd en gewist worden (ook eventuele "
+"configuratiebestanden worden verwijderd)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"<literal>source</literal> doet <command>apt-get</command> bronpakketten "
+"ophalen. APT zal de beschikbare pakketten doorzoeken om uit te maken welk "
+"bronpakket opgehaald moet worden. Het zal de meest recente beschikbare "
+"versie van dat bronpakket opzoeken, ophalen en in de huidige map plaatsen. "
+"Het respecteert daarbij waar mogelijk de standaarduitgave, ingesteld met de "
+"optie <literal>APT::Default-Release</literal>, de optie <option>-t</option> "
+"of opgegeven per pakket via de syntaxis <literal>pkg/release</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+"De argumenten worden beschouwd als namen van binaire en broncodepakketen. "
+"Zie de optie <option>--only-source</option> indien u dit wenst te wijzigen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"De opvolging van bronpakketten gebeurt afzonderlijk, los van de binaire "
+"pakketten, via <literal>deb-src</literal>-regels in het bestand &sources-"
+"list;. Dit betekent dat u een dergelijke regel moet toevoegen per pakketbron "
+"waarvan u bronpakketten wilt ophalen. Anders zult u wellicht de verkeerde "
+"versie (te oud/te recent) van het bronpakket krijgen of helemaal geen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"Indien de optie <option>--compile</option> opgegeven werd, zal het pakket "
+"tot een binair .deb-bestand gecompileerd worden met behulp van de opdracht "
+"<command>dpkg-buildpackage</command> en dit voor de architectuur die met de "
+"optie <command>--host-architecture</command> opgegeven werd. Als de optie "
+"<option>--download-only</option> opgegeven werd, zal het bronpakket niet "
+"uitgepakt worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"Een specifieke versie van de broncode kunt u ophalen door de naam van het "
+"bronpakket te laten volgen door een gelijkheidsteken en de op te halen "
+"versie. Dit mechanisme is gelijkaardig aan datgene wat voor pakketbestanden "
+"gebruikt wordt. Dit maakt het mogelijk een exacte overeenkomst met de naam "
+"en het versienummer van het bronpakket te gebruiken, wat neerkomt op het "
+"impliciet aanzetten van de optie <literal>APT::Get::Only-Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"Merk op dat in tegenstelling tot binaire pakketten, bronpakketten niet "
+"opgenomen en opgevolgd worden in de database van <command>dpkg</command>. Ze "
+"worden gewoon opgehaald en in de huidige map geplaatst, zoals tar-archieven "
+"van broncode."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"<literal>build-dep</literal> doet apt-get pakketten installeren/verwijderen "
+"i een poging om te voldoen aan de vereisten voor het bouwen van een "
+"bronpakket. Standaard wordt voldaan aan de vereisten voor het bouwen van het "
+"pakket voor de architectuur van het systeem. In de plaats daarvan kan "
+"desgewenst een architectuur gespecificeerd worden met de optie <option>--"
+"host-architecture</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+"De argumenten worden beschouwd als namen van binaire en broncodepakketen. "
+"Zie de optie <option>--only-source</option> indien u dit wenst te wijzigen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"<literal>check</literal> is een diagnostisch gereedschap; het werkt de "
+"pakketcache bij en controleert op defecte vereisten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> zal het opgegeven binaire pakket ophalen en in "
+"de huidige map plaatsen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"<literal>clean</literal> ruimt de lokale opslagplaats voor opgehaalde "
+"pakketbestanden op. Op het vergrendelingsbestand na ruimt het in "
+"<filename>&cachedir;/archives/</filename> en <filename>&cachedir;/archives/"
+"partial/</filename> alles op."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr "(en de"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr "alias sinds 1.1)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"Net als <literal>clean</literal> ruimt <literal>autoclean</literal> de "
+"lokale opslagplaats voor opgehaalde pakketbestanden op. Het verschil is dat "
+"het enkel pakketbestanden opruimt die niet langer opgehaald kunnen worden en "
+"goeddeels waardeloos zijn. Dit laat toe om gedurende een lange tijd een "
+"cache bij te houden zonder dat die onbeheersbaar wordt. Door het uitzetten "
+"van de configuratieoptie <literal>APT::Clean-Installed</literal> kan het "
+"opruimen van pakketbestanden van geïnstalleerde pakketten verhinderd worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"<literal>autoremove</literal> wordt gebruikt om pakketten te verwijderen die "
+"automatisch geïnstalleerd werden om te voldoen aan de vereisten van andere "
+"pakketten en nu niet langer nodig zijn."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> tracht het changelog-bestand (logbestand met "
+"veranderingen) van een pakket op te halen en geeft dit weer via het commando "
+"<command>sensible-pager</command>. Standaard wordt het logbestand met "
+"wijzigingen weergegeven voor de geïnstalleerde versie. U kunt evenwel "
+"dezelfde opties opgeven als bij het commando <option>install</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+"Geeft standaard een volgens deb822 ingedeelde lijst weer met informatie over "
+"alle gegevensbestanden (ook soms indexbestanden of indexdoelen genoemd) die "
+"<command>apt-get update</command> zou downloaden. Ondersteunt de optie "
+"<option>--format</option> voor het aanpassen van de indeling van de uitvoer "
+"en accepteert ook regels uit de standaarduitvoer om er de gegevens mee te "
+"filteren. Het commando wordt hoofdzakelijk gebruikt als een interface voor "
+"extern gereedschap dat APT gebruikt om informatie te verkrijgen evenals de "
+"namen van opgehaalde bestanden, zodat ook dat gereedschap er gebruik van kan "
+"maken in plaats van ze ook zelf weer op te halen. Meer gedetailleerde "
+"documentatie wordt hier niet gegeven, maar is daarentegen wel te vinden in "
+"het bestand &apt-acquire-additional-files; dat te vinden is in het pakket "
+"<package>apt-doc</package>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "opties"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"Aanbevolen pakketten niet als te installeren vereisten beschouwen. "
+"Configuratie-item: <literal>APT::Install-Recommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"Voorgestelde pakketten als te installeren vereisten beschouwen. Configuratie-"
+"item: <literal>APT::Install-Suggests</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"Enkel downloaden; pakketbestanden worden enkel opgehaald, niet uitgepakt of "
+"geïnstalleerd. Configuratie-item: <literal>APT::Get::Download-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"Herstellen; proberen een systeem met defecte vereisten te repareren. Als "
+"deze optie gebruikt wordt samen met install/remove, kan ze elk pakket "
+"overslaan om APT toe te laten tot een aannemelijke oplossing te komen. "
+"Indien pakketten opgegeven worden, moeten die het probleem volledig "
+"repareren. Soms is deze optie nodig wanneer APT voor de eerste keer "
+"uitgevoerd wordt. APT zelf laat niet toe dat op een systeem defecte "
+"pakketvereisten voorkomen. Het is mogelijk dat de vereistenstructuur van een "
+"systeem dermate defect is dat een manuele interventie noodzakelijk is "
+"(hetgeen meestal betekent dat <command>dpkg --remove</command> moet gebruikt "
+"worden om sommige problematische pakketten uit de weg te ruimen). Het "
+"gebruik van deze optie samen met <option>-m</option> kan in sommige "
+"omstandigheden een fout opleveren. Configuratie-item: <literal>APT::Get::Fix-"
+"Broken</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"Ontbrekende pakketten negeren; indien pakketten niet opgehaald kunnen worden "
+"of indien na het ophalen de integriteitstoets mislukt (beschadigde "
+"pakketbestanden), behoud dan de geïnstalleerde versie van deze pakketten en "
+"ga om met het resultaat. Het gebruik van deze optie samen met <option>-f</"
+"option> kan in sommige situaties tot een fout leiden. Indien een pakket voor "
+"installatie geselecteerd werd (in het bijzonder wanneer het aan de "
+"commandoregel vermeld werd) en het niet opgehaald kon worden, dan zal het "
+"stilzwijgend op zijn huidige versie behouden blijven. Configuratie-item: "
+"<literal>APT::Get::Fix-Missing</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"Schakelt het downloaden van pakketten uit. Dit wordt best gebruikt samen met "
+"<option>--ignore-missing</option> om APT te verplichten enkel .debs te "
+"gebruiken die het al gedownload heeft. Configuratie-item: <literal>APT::Get::"
+"Download</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"Stil; produceert uitvoer, geschikt voor een logboekbestand. "
+"Voortgangsindicatoren worden overgeslagen. Meer q's, met een maximum van 2, "
+"maken de uitvoer beknopter. U kunt ook <option>-q=#</option> gebruiken om "
+"het niveau van beknopte uitvoer in te stellen en de waarde uit het "
+"configuratiebestand te overschrijven. Merk op dat beknopte uitvoer van het "
+"niveau 2 de optie <option>-y</option> impliceert; u zou nooit -qq zonder een "
+"optie van het type niets doen, zoals -d, --print-uris of -s, moeten "
+"gebruiken, omdat APT kan beslissen iets te gaan doen waaraan u zich niet "
+"verwachtte. Configuratie-item: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+"Geen actie; voer een simulatie uit van de gebeurtenissen die zich zouden "
+"voordoen op basis van de actuele toestand van het systeem, maar voer geen "
+"effectieve wijzigingen aan het systeem door. Vergrendeling wordt "
+"uitgeschakeld (<option>Debug::NoLocking</option>), zodat de toestand van het "
+"systeem eventueel zou kunnen wijzigen terwijl <command>apt-get</command> "
+"bezig is. Ook een niet-systeembeheerder (non-root) kan simulaties uitvoeren "
+"en als die geen leestoegang heeft tot alle configuraties van apt, kan dit de "
+"simulatie vertekenen. Niet-systeembeheerders krijgen standaard ook een "
+"opmerking te zien waarin deze waarschuwing gegeven wordt (<option>APT::Get::"
+"Show-User-Simulation-Note</option>). Configuratie-item: <literal>APT::Get::"
+"Simulate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"Als men een simulatie uitvoert, worden een aantal regels weergegeven, "
+"waarbij elke regel een operatie van <command>dpkg</command> "
+"vertegenwoordigt: configureren (<literal>Conf</literal>), verwijderen "
+"(<literal>Remv</literal>) of uitpakken (<literal>Inst</literal>). Rechte "
+"haakjes duiden op defecte pakketten en lege rechte haakjes duiden op "
+"defecten zonder gevolgen (komt zelden voor)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"Een automatisch ja op vragen; ga uit van een ja-antwoord op alle vragen en "
+"voer de operatie niet-interactief uit. Indien er zich een niet-wenselijke "
+"situatie voordoet, zoals het wijzigen van een op zijn huidige versie "
+"vastgehouden pakket, een poging om een niet-geauthenticeerd pakket te "
+"installeren of het verwijderen van een essentieel pakket, zal <literal>apt-"
+"get</literal> afgebroken worden. Configuratie-item: <literal>APT::Get::"
+"Assume-Yes</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"Een automatisch \"neen\" op alle vragen. Configuratie-item: <literal>APT::"
+"Get::Assume-No</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"Geef geen lijst weer van alle pakketten die opgewaardeerd zullen worden. "
+"Configuratie-item: <literal>APT::Get::Show-Upgraded</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"Geef het volledige versienummer weer van opgewaardeerde en geïnstalleerde "
+"pakketten. Configuratie-item: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"Deze optie regelt voor welke architectuur pakketten gebouwd worden met de "
+"opdracht <command>apt-get source --compile</command> en hoe aan kruiselingse "
+"bouwvereisten voldaan wordt. Standaard staat dit niet ingesteld hetgeen "
+"betekent dat de computer waarop het pakket gebouwd wordt dezelfde "
+"architectuur heeft als die waarvoor het gebouwd wordt (hetgeen ingesteld "
+"wordt met <literal>APT::Architecture</literal>). Configuratie-item: "
+"<literal>APT::Get::Host-Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"Deze optie regelt het activeren van bouwprofielen waarvoor een bronpakket "
+"gebouwd wordt met <command>apt-get source --compile</command>. Ze regelt ook "
+"hoe voldaan wordt aan de bouwvereisten. Standaard is geen enkel bouwprofiel "
+"actief. Er kan meer dan een bouwprofiel tegelijk geactiveerd worden door ze "
+"gescheiden door en komma samen te voegen. Configuratie-item: <literal>APT::"
+"Build-Profiles</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"Bronpakketten na het downloaden compileren. Configuratie-item: <literal>APT::"
+"Get::Compile</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"Instructies dat pakketten op hun huidige versie behouden moeten blijven, "
+"negeren; dit zorgt ervoor dat <command>apt-get</command> de bij een pakket "
+"horende instructie 'behouden op de huidige versie' negeert. Dit kan nuttig "
+"zijn in combinatie met <literal>dist-upgrade</literal> om een groot aantal "
+"onwenselijke instructies van het type 'behouden op de huidige versie' te "
+"overschrijven. Configuratie-item: <literal>APT::Ignore-Hold</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+"Toelaten dat nieuwe pakketten geïnstalleerd worden als dit gebruikt wordt in "
+"combinatie met <literal>upgrade</literal>. Dit is nuttig als het voor het "
+"bijwerken van een geïnstalleerd pakket nodig is om nieuwe vereisten te "
+"installeren. In plaats van het pakket op de huidige versie vast te houden, "
+"zal <literal>upgrade</literal> het pakket opwaarderen en de nieuwe vereisten "
+"installeren. Merk op dat <literal>upgrade</literal> met deze optie nooit "
+"pakketten zal verwijderen. Enkel nieuwe toevoegen is dan toegestaan. "
+"Configuratie-item: <literal>APT::Get::Upgrade-Allow-New</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"Geen pakketten opwaarderen; als <literal>no-upgrade</literal> aan de "
+"commandoregel gebruikt wordt in combinatie met <literal>install</literal>, "
+"zal dat verhinderen dat reeds geïnstalleerde pakketten opgewaardeerd worden. "
+"Configuratie-item: <literal>APT::Get::Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"Geen nieuwe pakketten installeren; wanneer <literal>only-upgrade</literal> "
+"gebruikt wordt in combinatie met <literal>install</literal>, zal het enkel "
+"voor reeds geïnstalleerde pakketten opwaarderingen installeren en verzoeken "
+"om nieuwe pakketten te installeren negeren. Configuratie-item: <literal>APT::"
+"Get::Only-Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"Dit is een gevaarlijke optie die er voor zorgt dat apt zonder vragen "
+"voortgaat als het degradaties doorvoert. U zou dit niet moeten gebruiken "
+"behalve in zeer bijzondere situaties. Dit gebruiken kan mogelijkerwijs tot "
+"de vernietiging van uw systeem leiden! Configuratie-item: <literal>APT::Get::"
+"allow-downgrades</literal>. Geïntroduceerd in APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"Een ja doordrukken; dit is een gevaarlijke optie die er voor zorgt dat apt "
+"zonder vragen voortgaat als het essentiële pakketten verwijdert. U zou dit "
+"niet moeten gebruiken behalve in zeer bijzondere situaties. Dit gebruiken "
+"kan mogelijkerwijs tot de vernietiging van uw systeem leiden! Configuratie-"
+"item: <literal>APT::Get::allow-remove-essential</literal>. Geïntroduceerd in "
+"APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"Een ja doordrukken; dit is een gevaarlijke optie die er voor zorgt dat apt "
+"zonder vragen voortgaat als het te handhaven pakketten wijzigt. U zou dit "
+"niet moeten gebruiken behalve in zeer bijzondere situaties. Dit gebruiken "
+"kan mogelijkerwijs tot de vernietiging van uw systeem leiden! Configuratie-"
+"item: <literal>APT::Get::allow-change-held-packages</literal>. "
+"Geïntroduceerd in APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"Een ja doordrukken; dit is een gevaarlijke optie die er voor zorgt dat apt "
+"zonder vragen voortgaat als het iets doet dat schadelijk kan zijn. U zou dit "
+"niet moeten gebruiken behalve in zeer bijzondere situaties. Het gebruik van "
+"<literal>force-yes</literal> kan mogelijkerwijs tot de vernietiging van uw "
+"systeem leiden! Configuratie-item: <literal>APT::Get::force-yes</literal>. "
+"Deze optie is verouderd en werd in 1.1 vervangen door <option>--allow-"
+"unauthenticated</option> , <option>--allow-downgrades</option> , <option>--"
+"allow-remove-essential</option> , <option>--allow-change-held-packages</"
+"option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"In plaats van pakketten op te halen om ze te installeren wordt hun URI "
+"weergegeven. Elke URI bevat het pad en de naam van het doelbestand, zijn "
+"grootte en de verwachte MD5-frommel. Merk op dat de naam van het bestand "
+"waarnaartoe geschreven wordt niet steeds overeenkomt met de bestandsnaam op "
+"de externe site! Dit werkt ook met de commando's <literal>source</literal> "
+"en <literal>update</literal>. Bij gebruik in combinatie met het commando "
+"<literal>update</literal> zijn de MD5-frommel en de grootte niet inbegrepen "
+"en het is aan de gebruiker om eventuele gecomprimeerde bestanden uit te "
+"pakken. Configuratie-item: <literal>APT::Get::Print-URIs</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"Purge gebruiken in plaats van remove voor alles wat verwijderd zou worden. "
+"Er zal een sterretje (\"*\") staan naast de pakketten die ingepland staan om "
+"opgeruimd te worden. <option>remove --purge</option> is het equivalent van "
+"het commando <option>purge</option>. Configuratie-item: <literal>APT::Get::"
+"Purge</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"Pakketten die reeds met hun nieuwste versie geïnstalleerd zijn opnieuw "
+"installeren. Configuratie-item: <literal>APT::Get::ReInstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"Deze optie is standaard aangezet; gebruik <literal>--no-list-cleanup</"
+"literal> om ze uit te zetten. Indien ze geactiveerd is, zal <command>apt-"
+"get</command> automatisch de inhoud van <filename>&statedir;/lists</"
+"filename> beheren om te garanderen dat in onbruik geraakte bestanden "
+"verwijderd worden. De enige reden waarom u dit zou uitzetten is wanneer u "
+"vaak het bestand sources.list wijzigt. Configuratie-item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"Deze optie regelt de standaard invoer voor het aansturen van de "
+"beleidsvoering; ze stelt een standaard pinwaarde in op 990 voor de opgegeven "
+"release. Dit overschrijft de algemene instellingen uit <filename>/etc/apt/"
+"preferences</filename>. De waarde van deze optie heeft geen invloed op "
+"pakketten met een eigen pinwaarde. Kort samengevat laat deze optie u toe om "
+"op een eenvoudige wijze controle te houden over uit welke distributie "
+"pakketten opgehaald worden. Enkele gebruikelijke voorbeelden zijn <option>-t "
+"'2.1*'</option>, <option>-t unstable</option> en <option>-t sid</option>. "
+"Configuratie-item: <literal>APT::Default-Release</literal>; raadpleeg ook de "
+"man-pagina van &apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"Voer enkel 'banale' operaties uit. Logisch gezien kan men dit beschouwen als "
+"gerelateerd aan <option>--assume-yes</option>. Waar <option>--assume-yes</"
+"option> op elke vraag ja antwoordt, zal <option>--trivial-only</option> nee "
+"antwoorden. Configuratie-item: <literal>APT::Get::Trivial-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"Indien een of ander pakket verwijderd zou moeten worden, zal apt-get "
+"onmiddellijk afgebroken worden zonder een vraag te stellen. Configuratie-"
+"item: <literal>APT::Get::Remove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"Indien het gegeven commando <literal>install</literal> of <literal>remove</"
+"literal> is, dan zal deze optie functioneren zoals wanneer de opdracht "
+"<literal>autoremove</literal> wordt uitgevoerd en zullen pakketten die niet "
+"langer door andere vereist worden, verwijderd worden. Configuratie-item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"Is enkel betekenisvol voor de commando's <literal>source</literal> en "
+"<literal>build-dep</literal>. Geeft aan dat voor de opgegeven namen van "
+"bronpakketten niet naar een overeenkomst gezocht moet worden via de tabel "
+"met binaire pakketten. Dit houdt in dat indien deze optie opgegeven werd, "
+"deze commando's enkel de naam van bronpakketten als argument zullen "
+"aanvaarden en niet de naam van een binair pakket om nadien het "
+"overeenkomstige bronpakket te gaan opzoeken. Configuratie-item: "
+"<literal>APT::Get::Only-Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"Enkel het diff-, dsc- of tar-bestand van een bronarchief downloaden. "
+"Configuratie-item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::"
+"Get::Dsc-Only</literal>, en <literal>APT::Get::Tar-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"Enkel architectuurafhankelijke bouwvereisten verwerken. Configuratie-item: "
+"<literal>APT::Get::Arch-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"Enkel architectuur-onafhankelijke bouwvereisten verwerken. Configuratie-"
+"item: <literal>APT::Get::Indep-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+"Negeer dat pakketten niet geauthenticeerd kunnen worden en stel er geen "
+"vragen over. Dit kan nuttig zijn als met lokale pakketbronnen gewerkt wordt, "
+"maar het houdt een enorm veiligheidsrisico in als de authenticiteit van de "
+"gegevens niet op een andere manier door de gebruiker zelf verzekerd wordt. "
+"Het gebruik van de optie <option>Trusted</option> voor regels uit &sources-"
+"list; valt gewoonlijk te verkiezen boven deze globale vervanging. "
+"Configuratie-item: <literal>APT::Get::AllowUnauthenticated</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+"Sta het commando update niet toe om niet-verifieerbare gegevens op te halen "
+"uit geconfigureerde pakketbronnen. Het commando update van APT zal mislukken "
+"bij pakketbronnen zonder geldige cryptografische ondertekening. Zie ook &apt-"
+"secure; voor meer informatie over het concept en de implicaties. "
+"Configuratie-item: <literal>Acquire::AllowInsecureRepositories</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+"Sta het commando update toe om gegevens te blijven downloaden van een "
+"pakketbron waarvan de informatie over welke release die pakketbron bevat, "
+"gewijzigd is en bijvoorbeeld een nieuwe hoofdrelease aangeeft. Voor "
+"dergelijke pakketbronnen zal APT er niet in slagen het update-commando uit "
+"te voeren, totdat de verandering bevestigd is, om er zeker van te zijn dat "
+"de gebruiker voorbereid is op die verandering. Zie ook &apt-secure; voor "
+"informatie over concept en configuratie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+"Er bestaan specialistische opties (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>veld</replaceable>) om enkel veranderingen toe te staan "
+"voor bepaalde velden, zoals <literal>origin</literal>, <literal>label</"
+"literal>, <literal>codename</literal>, <literal>suite</literal>, "
+"<literal>version</literal> en <literal>defaultpin</literal>. Zie ook &apt-"
+"preferences;. Configuratie-item: <literal>Acquire::AllowReleaseInfoChange</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+"Bij het installeren, opwaarderen of verwijderen van pakketten "
+"gebruikersvriendelijke voortgangsinformatie in het terminalvenster "
+"weergeven. Voor een door een machine te lezen versie van deze gegevens kunt "
+"u README.progress-reporting raadplegen in apt's doc-map. Configuratie-item: "
+"<literal>Dpkg::Progress</literal> en <literal>Dpkg::Progress-Fancy</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+"Voegt het opgegeven bestand toe als een metadatabron. Kan herhaald worden om "
+"meerdere bestanden toe te voegen. Zie voor verdere details de beschrijving "
+"van de optie <option>--with-source</option> in &apt-cache;."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "Bestanden"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, De gebruikershandleiding voor APT in &guidesdir;, &apt-"
+"preferences;, de Howto voor APT."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> geeft de terugkeerwaarde nul bij een normaal "
+"verlopen operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "zoeken in de cache van APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> voert verschillende operaties uit op de "
+"pakketcache van APT. <command>apt-cache</command> wijzigt de toestand van "
+"het systeem niet, maar voorziet in operaties die de metadata van een pakket "
+"doorzoeken en er interessante uitvoer mee genereren. De metadata worden "
+"verkregen en bijgewerkt via het commando 'update' van bijvoorbeeld "
+"<command>apt-get</command>, waardoor ze verouderd kunnen zijn als de laatste "
+"update te lang geleden is. Maar daartegenover staat dat de werking van "
+"<command>apt-cache</command> niet afhankelijk is van de beschikbaarheid van "
+"de geconfigureerde pakketbronnen (bijv. offline)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> maakt de pakketcache van APT aan. Als die "
+"ontbreekt of verouderd is, wordt dit commando impliciet uitgevoerd door alle "
+"commando's die deze cache nodig hebben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"<literal>showpkg</literal> geeft informatie weer over de aan de "
+"commandoregel opgesomde pakketten. De overige argumenten zijn pakketnamen. "
+"De beschikbare versies en achterwaartse vereisten van ieder opgesomd pakket "
+"worden weergegeven, evenals de voorwaartse vereisten voor elke versie. "
+"Voorwaartse (normaal) vereisten zijn die pakketten waarvan het pakket in "
+"kwestie afhankelijk is. Achterwaartse vereisten zijn die pakketten die "
+"afhankelijk zijn van het pakket in kwestie. Dus, aan de voorwaartse "
+"vereisten van een pakket moet voldaan worden, aan de achterwaartse vereisten "
+"niet. Bijvoorbeeld, <command>apt-cache showpkg libreadline2</command> zal "
+"uitvoer genereren in de zin van:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"Hier is dus te zien dat libreadline2, versie 2.1-12, afhankelijk is van "
+"libc5 en ncurses3.0 die geïnstalleerd moeten zijn opdat libreadline2 zou "
+"werken. Op hun beurt zijn libreadlineg2 en libreadline2-altdev afhankelijk "
+"van libreadline2. Indien libreadline2 geïnstalleerd wordt, moeten ook libc5 "
+"en ncurses3.0 (en ldso) geïnstalleerd zijn; libreadlineg2 en libreadline2-"
+"altdev moeten niet geïnstalleerd worden. Om de exacte betekenis van de rest "
+"van de uitvoer te kennen, raadpleegt u best de broncode van apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"<literal>stats</literal> geeft enkele statistieken weer over de cache. Er "
+"worden geen andere argumenten verwacht. De weergegeven statistieken zijn:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>Total package names</literal> is het aantal pakketnamen dat in de "
+"cache gevonden werd."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>Normal packages</literal> is het aantal reguliere, gewone "
+"pakketnamen; dit zijn pakketten met een één-op-één relatie tussen hun naam "
+"en de naam waarmee andere pakketten naar hen verwijzen om een vereiste aan "
+"te geven. De meerderheid van de pakketten valt in deze categorie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>Pure virtual packages</literal> is het aantal pakketten dat enkel "
+"bestaat als een virtuele pakketnaam. Dit houdt in dat pakketten enkel "
+"\"voorzien in\" de virtuele pakketnaam en dat geen enkel pakket echt die "
+"naam gebruikt. Bijvoorbeeld, \"mail-transport-agent\" is in het Debian "
+"systeem een zuiver virtueel pakket. Verschillende pakketten voorzien in "
+"\"mail-transport-agent\", maar er is geen enkel pakket dat de naam \"mail-"
+"transport-agent\" draagt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>Single virtual packages</literal> is het aantal virtuele pakketten "
+"waarvoor slechts een pakket in dat specifieke virtuele pakket voorziet. In "
+"het Debian systeem is bijvoorbeeld \"X11-text-viewer\" een virtueel pakket, "
+"maar slechts een pakket, xless, voorziet in \"X11-text-viewer\"."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>Mixed virtual packages</literal> is het aantal pakketten dat ofwel "
+"voorziet in een specifiek virtueel pakket of als pakketnaam de naam van het "
+"virtueel pakket draagt. In het Debian systeem is \"debconf\" bijvoorbeeld "
+"tegelijk een echt pakket en tevens wordt er in voorzien door het pakket "
+"debconf-tiny."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>Missing</literal> is het aantal pakketnamen waarnaar verwezen wordt "
+"in een vereiste, maar waarin door geen enkel pakket voorzien wordt. "
+"Ontbrekende pakketten kunnen opduiken wanneer men geen toegang heeft tot een "
+"volledige distributie of indien een pakket (reëel of virtueel) verwijderd "
+"werd uit de distributie. Gewoonlijk wordt ernaar verwezen in een Conflicts "
+"of een Breaks declaratie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>Total distinct</literal> versies is het aantal pakketversies dat in "
+"de cache aangetroffen wordt. Indien er gebruik gemaakt wordt van meer dan "
+"een distributie (bijvoorbeeld \"stable\" en \"unstable\"), dan kan deze "
+"waarde aanzienlijk groter zijn dan het totale aantal pakketnamen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>Total dependencies</literal> is het totaal aantal vereistenrelaties "
+"die alle pakketten die zich in de cache bevinden, samen opvragen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> geeft alle fiches van bronpakketten weer die "
+"overeenkomen met de opgegeven pakketnamen. Alle versies worden weergegeven "
+"evenals alle fiches van binaire pakketten die met de naam overeenkomen. "
+"Gebruik <option>--only-source</option> om louter bronpakketten weer te geven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"<literal>dump</literal> geeft een beknopte lijst weer van alle pakketten uit "
+"de cache. Dit is in de eerste plaats bedoeld om te debuggen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"<literal>dumpavail</literal> geeft op stdout een lijst van beschikbare "
+"pakketten weer. Dit is geschikt om gebruikt te worden met &dpkg; en ook de "
+"meethode &dselect; maakt er gebruik van."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"<literal>unmet</literal> geeft een samenvatting van alle vereisten waaraan "
+"in de pakketcache niet voldaan wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"<literal>show</literal> vervult een functie die vergelijkbaar is met "
+"<command>dpkg --print-avail</command>. Het geeft de pakketsteekkaarten weer "
+"van de genoemde pakketten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"<literal>search</literal> doorzoekt de volledige inhoud van alle beschikbare "
+"pakketlijsten aan de hand van de opgegeven POSIX reguliere expressie; zie "
+"&regex;. Het zoekt in de pakketnamen en de beschrijvingen of de reguliere "
+"expressie erin aangetroffen wordt en geeft de pakketnaam en de beknopte "
+"beschrijving weer, met inbegrip van de pakketnamen van virtuele pakketten. "
+"Indien <option>--full</option> opgegeven werd, dan wordt voor elk "
+"overeenkomstig pakket een uitvoer geproduceerd die identiek is aan die van "
+"<literal>show</literal>. En indien <option>--names-only</option> werd "
+"opgegeven, dan wordt niet in de uitgebreide omschrijving gezocht, maar wordt "
+"enkel de pakketnaam en de pakketten waarin voorzien wordt doorzocht."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+"Men kan afzonderlijke argumenten opgeven om verschillende zoekpatronen te "
+"specificeren, waarop dan een logische en toegepast wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"<literal>depends</literal> geeft een lijst weer van alle vereisten van een "
+"pakket en alle mogelijke andere pakketten die aan deze vereisten tegemoet "
+"kunnen komen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"<literal>rdepends</literal> geeft de lijst van alle achterwaartse vereisten "
+"van een pakket weer."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"Dit commando geeft de naam weer van elk pakket dat door APT gekend is. Een "
+"prefix om de lijst van pakketnamen te filteren kan als optioneel argument "
+"gegeven worden. De uitvoer is geschikt om gebruikt te worden met de shell-"
+"functie Tab-aanvulling en ze wordt extreem snel gegenereerd. Dit commando "
+"wordt best gebruikt met de optie <option>--generate</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"Merk op dat een pakket waarvan APT weet heeft niet noodzakelijk gedownload "
+"of geïnstalleerd kan worden of geïnstalleerd is. Virtuele pakketten worden "
+"bijvoorbeeld ook opgenomen in de gegenereerde lijst."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"<literal>dotty</literal> pikt op de commandoregel een lijst pakketten op en "
+"genereert uitvoer die geschikt is om gebruikt te worden door dotty uit het "
+"pakket <ulink url=\"http://www.research.att.com/sw/tools/graphviz/"
+"\">GraphViz</ulink>. Het resultaat is een geheel van knooppunten en gebogen "
+"lijnen die de relaties tussen pakketten voorstellen. Standaard trekken de "
+"als argument opgegeven pakketten al hun vereisten na, hetgeen een zeer "
+"uitgebreide grafiek kan opleveren. Om de uitvoer te beperken tot die "
+"pakketten die expliciet opgegeven werden aan de commandoregel, stelt men de "
+"optie <literal>APT::Cache::GivenOnly</literal> in."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"De knooppunten in het weergegeven resultaat kunnen verschillende vormen "
+"aannemen: gewone pakketten worden als een vierkant voorgesteld, zuivere "
+"virtuele pakketten als een driehoek, gemengde virtuele pakketten als "
+"diamanten en ontbrekende pakketten als een zeshoek. Een vierkant met een "
+"oranje kleur stelt het einde van een recursiviteit voor (leaf package - "
+"eindpakket). Blauwe lijnen stellen een voorafgaandelijke vereiste voor en "
+"groene lijnen symboliseren conflicten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr ""
+"Opgelet, dotty kan geen grafiek maken van een uitgebreide set pakketten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"Hetzelfde als <literal>dotty</literal>, maar dan voor xvcg uit het <ulink "
+"url=\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG "
+"gereedschap</ulink>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> is bedoeld om te helpen bij het debuggen van "
+"problemen die verband houden met het bestand preferences. Zonder argumenten "
+"zal het de prioriteiten van elke pakketbron weergeven. Anders zal het voor "
+"het opgegeven pakket gedetailleerde informatie over de prioriteitskeuze "
+"weergeven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"Het commando <literal>madison</literal> van <literal>apt-cache</literal> "
+"tracht het uitvoerformaat en een deel van de functionaliteit na te bootsen "
+"van <literal>madison</literal>, het Debian gereedschap voor archiefbeheer. "
+"Het geeft de beschikbare versies van een pakket weer in een tabelformaat. In "
+"tegenstelling tot het originele <literal>madison</literal>, kan het enkel "
+"informatie weergeven betreffende de architectuur waarvoor APT pakketlijsten "
+"opgehaald heeft (<literal>APT::Architecture</literal>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"Het bestand waarin de pakketcache opgeslagen wordt kiezen. De pakketcache is "
+"de primaire cache die door alle operaties aangesproken wordt. Configuratie-"
+"item: <literal>Dir::Cache::pkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"Het bestand kiezen waarin de broncache opgeslagen wordt. Deze broncache "
+"wordt enkel door <literal>gencaches</literal> gebruikt en het bevat een "
+"verwerkte versie van de pakketinformatie afkomstig van externe bronnen. "
+"Wanneer de pakketcache opgebouwd wordt, wordt gebruik gemaakt van de "
+"broncache om te vermijden dat alle pakketbestanden opnieuw verwerkt moeten "
+"worden. Configuratie-item: <literal>Dir::Cache::srcpkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Stille modus. Door het weglaten van voortgangsindicatoren genereert het "
+"uitvoer die geschikt is voor logbestanden. Meer q's, met een maximum van 2, "
+"leveren een hogere mate van beknopte uitvoer op. U kunt ook <option>-q=#</"
+"option> gebruiken om de mate van gereduceerde uitvoer in te stellen en zo de "
+"instelling uit het configuratiebestand overschrijven. Configuratie-item: "
+"<literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"Enkel belangrijke vereisten weergeven. Is bedoeld voor gebruik met "
+"<literal>unmet</literal> en <literal>depends</literal>. Maakt dat enkel de "
+"relaties Depends en Pre-Depends weergegeven worden. Configuratie-item: "
+"<literal>APT::Cache::Important</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"Standaard geven de opdrachten <literal>depends</literal> en "
+"<literal>rdepends</literal> alle vereisten weer. Met deze opties kan dit "
+"aangepast worden, waardoor het opgegeven vereistentype weggelaten wordt. "
+"Configuratie-item: <literal>APT::Cache::Show<replaceable>DependencyType</"
+"replaceable></literal>, bijvoorbeeld <literal>APT::Cache::ShowRecommends</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+"Standaard geven <literal>depends</literal> en <literal>rdepends</literal> "
+"enkel die vereisten weer die expliciet in de metadata vermeld worden. Met "
+"deze optie worden ook vereisten getoond die impliciet toegevoegd worden op "
+"basis van de gevonden gegevens. Bijvoorbeeld een <literal>Conflicts: foo</"
+"literal> houdt impliciet in dat dit pakket ook tegenstrijdig is met het "
+"pakket foo uit om het even welke andere architectuur. Configuratie-item: "
+"<literal>APT::Cache::ShowImplicit</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"Bij zoekbewerkingen de volledige steekkaart van pakketten weergeven. "
+"Configuratie-item: <literal>APT::Cache::ShowFull</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"De volledige steekkaart van alle beschikbare versies weergeven. Dit is de "
+"standaard. Om dit uit te schakelen moet u <option>--no-all-versions</option> "
+"gebruiken. Indien <option>--no-all-versions</option> werd opgegeven, zal "
+"enkel de informatie over het pakket dat kandidaat voor installatie is, "
+"getoond worden. Deze optie is enkel op het commando <literal>show</literal> "
+"van toepassing. Configuratie-item: <literal>APT::Cache::AllVersions</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"Automatisch een nieuwe pakketcache genereren, eerder dan de bestaande "
+"pakketcache te gebruiken. Dit is de standaard. Om dit uit te schakelen moet "
+"u <option>--no-generate</option> gebruiken. Configuratie-item: <literal>APT::"
+"Cache::Generate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"Enkel zoeken in de pakketnamen en in de pakketnamen waarin voorzien wordt en "
+"niet in de uitgebreide beschrijvingen. Configuratie-item: <literal>APT::"
+"Cache::NamesOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"<literal>pkgnames</literal> alle namen laten weergeven, inclusief virtuele "
+"pakketten en ontbrekende vereisten. Configuratie-item: <literal>APT::Cache::"
+"AllNames</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"<literal>depends</literal> en <literal>rdepends</literal> recursief laten "
+"werken, zodat alle vermelde pakketten eenmaal weergegeven worden. "
+"Configuratie-item: <literal>APT::Cache::RecurseDepends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"De uitvoer van <literal>depends</literal> en <literal>rdepends</literal> "
+"beperken tot pakketten die momenteel geïnstalleerd zijn. Configuratie-item: "
+"<literal>APT::Cache::Installed</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+"Voegt het opgegeven bestand toe als een bron voor metadata. Kan herhaald "
+"worden om meerdere bestanden toe te voegen. Momenteel worden de bestanden "
+"<literal>*.deb</literal>, <literal>*.dsc</literal>, <literal>*.changes</"
+"literal>, <literal>Sources</literal> en <literal>Packages</literal> "
+"ondersteund evenals mappen van broncodepakketten. Overeenstemmende bestanden "
+"worden enkel op basis van hun naam gevonden, niet op basis van hun inhoud!"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+"Bestanden <literal>Sources</literal> en <literal>Packages</literal> mogen "
+"gecomprimeerd worden in elk formaat dat door apt ondersteund wordt, zolang "
+"ze de correcte extensie hebben. Indien u in één map meerdere van deze "
+"bestanden moet opslaan, kunt u aan de naam een voorvoegsel naar keuze "
+"toevoegen met als laatste letter een liggend streepje (\"<literal>_</literal>"
+"\"). Bijvoorbeeld: mijn.voorbeeld_Packages.xz"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"Merk op dat deze bronnen beschouwd worden als te vertrouwen (zie &apt-"
+"secure;). Configuratie-item: <literal>APT::Sources::With</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> geeft de terugkeerwaarde nul bij een normaal "
+"verlopen operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "Hulpprogramma voor het beheer van de sleutels van APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> wordt gebruikt om de lijst van sleutels te "
+"beheren die door apt gebruikt worden om pakketten te authenticeren. "
+"Pakketten die met deze sleutels geauthenticeerd werden, worden als "
+"betrouwbaar beschouwd."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+"Merk op dat als het gebruik van het commando <command>apt-key</command> "
+"gewenst is, dan ook de installatie van de GNU Privacy Guard suite (verpakt "
+"in het pakket <package>gnupg</package>) vereist is. Enkel omwille daarvan al "
+"wordt het gebruik ervan in programma's (zeker in scripts voor "
+"pakketonderhoud) sterk afgeraden. Daarenboven wordt de indeling van de "
+"uitvoer van alle commando's onvoorspelbaar en kan die wijzigen telkens "
+"wanneer de achterliggende commando's wijzigen. <command>apt-key</command> "
+"zal een dergelijk gebruik trachten te detecteren en geeft in dergelijke "
+"gevallen waarschuwingen op de standaard foutuitvoer."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr "Ondersteunde sleutelbosbestanden"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+"apt-key ondersteunt enkel de binaire indeling van OpenPGP (ook gekend als "
+"\"GPG key public ring\") bij bestanden met de extensie \"<literal>gpg</"
+"literal>\" en niet de database-indeling keybox (sleutelkistje) die in "
+"recentere &gpg;-versies als standaard gebruikt wordt voor "
+"sleutelbosbestanden. Binaire sleutelbosbestanden die met om het even welke "
+"versie van apt gebruikt moeten kunnen worden, moeten daarom steeds "
+"aangemaakt worden met het commando <command>gpg --export</command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+"In het andere geval, als op alle systemen die de aangemaakte sleutelbos "
+"moeten gebruiken, minstens een versie van apt >= 1.4 geïnstalleerd is, kunt "
+"u wel de ASCII-armor indeling met de extensie \"<literal>asc</literal>\" "
+"gebruiken die met het commando <command>gpg --armor --export</command> "
+"gecreëerd kan worden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "Commando's"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"Een nieuwe sleutel toevoegen aan de lijst van betrouwbare sleutels. De "
+"sleutel wordt gelezen uit het bestand waarvan de naam met de parameter "
+"&synopsis-param-filename; opgegeven werd of uit de standaardinvoer als de "
+"bestandsnaam <literal>-</literal> is."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+"Het is van cruciaal belang dat bij sleutels die handmatig toegevoegd worden "
+"via <command>apt-key</command>, geverifieerd wordt of de bewering dat ze "
+"toebehoren aan de eigenaar van de pakketbronnen, wel degelijk met de "
+"werkelijkheid overeenkomt, anders wordt de &apt-secure;-infrastructuur "
+"volledig ondermijnd."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+"<emphasis>Opmerking</emphasis>: In plaats van dit commando te gebruiken zou "
+"u een sleutelbos rechtstreeks in de map <filename>/etc/apt/trusted.gpg.d/</"
+"filename> moeten plaatsen met een descriptieve naam en ofwel \"<literal>gpg</"
+"literal>\" of \"<literal>asc</literal>\" als bestandsextensie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr "Een sleutel verwijderen uit de lijst van betrouwbare sleutels."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr "De sleutel &synopsis-param-keyid; via de standaarduitvoer weergeven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "Alle betrouwbare sleutels op de standaarduitvoer weergeven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr "Som betrouwbare sleutels op met hun vingerafdruk."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+"Geef geavanceerde opties mee met gpg. Met <command>adv --recv-key</command> "
+"kunt u bijvoorbeeld een sleutel rechtstreeks van een sleutelserver naar de "
+"set van betrouwbare sleutels downloaden. Merk op dat er <emphasis>geen</"
+"emphasis> controles uitgevoerd worden. Daarom kan dit gemakkelijk de &apt-"
+"secure;-infrastructuur volledig ondermijnen als het onzorgvuldig gebruikt "
+"wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr "(verouderd)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"De lokale sleutelbos bijwerken met de sleutelbos van het archief en de "
+"archiefsleutels die niet langer geldig zijn verwijderen uit de lokale "
+"sleutelbos. De sleutelbos van het archief bevindt zich in het pakket "
+"<literal>archive-keyring</literal> van uw distributie, bijvoorbeeld het "
+"pakket &keyring-package; in &keyring-distro;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+"Merk op dat een distributie dit commando niet langer hoeft en ook niet zou "
+"mogen gebruiken. In plaats daarvan moeten rechtstreeks sleutelbosbestanden "
+"meegeleverd worden in de map <filename>/etc/apt/trusted.gpg.d/</filename>. "
+"Dit voorkomt dat het pakket <package>gnupg</package> een vereiste is, en "
+"zowel voor pakketonderhouders als voor gebruikers is het makkelijker om "
+"sleutels te beheren door eenvoudigweg bestanden toe te voegen of te "
+"verwijderen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"Een bijwerking uitvoeren zoals hiervoor met het commando <command>update</"
+"command>, maar in plaats daarvan de sleutelbos van het archief ophalen vanaf "
+"een URI en die valideren tegenover een hoofdsleutel. Dit veronderstelt dat "
+"&wget; geïnstalleerd is en vereist een versie van APT die gebouwd werd met "
+"de nodige instellingen om de sleutel van een server te kunnen ophalen en een "
+"hoofdsleutelbos om de validering te kunnen uitvoeren. APT in Debian "
+"ondersteunt dit commando niet en steunt in de plaats daarvan op "
+"<command>update</command>, maar APT in Ubuntu wel."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "Opties"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"Merk op dat opties opgegeven moeten worden voor de commando's die in de "
+"vorige sectie behandeld werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"Met deze optie kunt u een specifiek sleutelbosbestand opgeven waarmee het "
+"commando moet werken. Standaard wordt een commando uitgevoerd op het bestand "
+"<filename>trusted.gpg</filename> en op alle onderdelen uit de map "
+"<filename>trusted.gpg.d</filename>, hoewel <filename>trusted.gpg</filename> "
+"de primaire sleutelbos is, wat betekent dat bijvoorbeeld alle nieuwe "
+"sleutels daar toegevoegd worden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr ""
+"toon verschillende instellingen van een pakket, stel ze in of maak ze "
+"ongedaan"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+"<command>apt-mark</command> kan gebruikt worden als een geïntegreerd "
+"frontend waarmee verschillende instellingen van een pakket ingesteld kunnen "
+"worden, zoals een pakket als automatisch/handmatig geïnstalleerd markeren of "
+"wijzigingen aanbrengen aan <command>dpkg</command>-selecties zoals "
+"handhaven, installeren, verwijderen, wissen, welke bijvoorbeeld door "
+"<command>apt-get dselect-upgrade</command> en <command>aptitude</command> "
+"gerespecteerd worden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr "Automatisch en handmatig geïnstalleerde pakketten"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"Indien u vraagt dat een pakket geïnstalleerd wordt en er worden als gevolg "
+"daarvan andere pakketten geïnstalleerd om aan de vereisten te voldoen, dan "
+"worden die laatste pakketten gemarkeerd als automatisch geïnstalleerd, "
+"terwijl het pakket dat u expliciet installeerde als handmatig geïnstalleerd "
+"gemarkeerd wordt. Wanneer een automatisch geïnstalleerd pakket door geen "
+"enkel handmatig geïnstalleerd pakket meer vereist wordt, zal het als niet "
+"langer noodzakelijk beschouwd worden en bijvoorbeeld <command>apt-get</"
+"command> of <command>aptitude</command> zullen op zijn minst voorstellen om "
+"het te verwijderen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> wordt gebruikt om een pakket als automatisch "
+"geïnstalleerd te markeren. Dit zal tot gevolg hebben dat dit pakket "
+"verwijderd wordt als er geen handmatig geïnstalleerde pakketten meer zijn "
+"die dat pakket nodig hebben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> wordt gebruikt om een pakket als handmatig "
+"geïnstalleerd te markeren. Dit zal voorkomen dat het pakket automatisch "
+"wordt verwijderd als geen andere pakketten ervan afhankelijk zijn."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>minimize-manual</literal> wordt gebruikt om (transitief) vereisten "
+"van metapakketten als automatisch geïnstalleerd te markeren. Dit kan na een "
+"installatie gebruikt worden om bijvoorbeeld het aantal handmatig "
+"geïnstalleerde pakketten te verminderen, of permanent op systemen die "
+"beheerd worden met systeemconfiguratiemetapakketten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal> wordt gebruikt om een lijst weer te geven van "
+"automatisch geïnstalleerde pakketten, waarbij elk pakket op een nieuwe regel "
+"staat. Als geen pakket opgegeven wordt, zullen alle automatisch "
+"geïnstalleerde pakketten weergegeven worden. Indien wel pakketten opgegeven "
+"worden, zullen enkel die pakketten weergegeven worden die automatisch "
+"geïnstalleerd werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> kan op dezelfde manier als <literal>showauto</"
+"literal> gebruikt worden, behalve dat in dit geval een lijst van manueel "
+"geïnstalleerde pakketten weergegeven zal worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"De status van een pakket lezen van/schrijven naar het bestand waarvan de "
+"naam opgegeven werd met de parameter &synopsis-param-filename; en geen "
+"gebruik maken van de standaardlocatie die <filename>extended_status</"
+"filename> is in de map die vermeld wordt in het configuratie-item: "
+"<literal>Dir::State</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr "Voorkomen dat een pakket gewijzigd wordt"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>hold</literal> wordt gebruikt om een pakket als te handhaven te "
+"markeren. Dit zal voorkomen dat het pakket automatisch geïnstalleerd, "
+"opgewaardeerd of verwijderd wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> wordt gebruikt om een eerder ingestelde status "
+"tegengehouden ongedaan te maken, zodat opnieuw alle acties toegelaten zijn."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> wordt gebruikt om op dezelfde manier als voor de "
+"andere show-opdrachten een lijst weer te geven van pakketten die "
+"tegengehouden worden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr "Het installeren, verwijderen en wissen van pakketten inplannen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+"Sommige frontends zoals <command>apt-get dselect-upgrade</command> kunnen "
+"gebruikt worden om eerder geplande wijzigingen aan de installatiestatus van "
+"pakketten toe te passen. Deze wijzigingen kunnen ingepland worden met de "
+"commando's <option>install</option>, <option>remove</option> (ook gekend als "
+"<option>deinstall</option>) en <option>purge</option>. Pakketten met een "
+"specifieke selectie kunnen respectievelijk met <option>showinstall</option>, "
+"<option>showremove</option> en <option>showpurge</option> weergegeven "
+"worden. Meer informatie over deze zogenaamde dpkg-selecties vindt u in "
+"&dpkg;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> geeft de terugkeerwaarde nul bij een normaal "
+"verlopen operatie, niet-nul in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "Ondersteuning in APT voor de authenticatie van archieven"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"Met ingang van versie 0.6 bevat <command>APT</command> code die voor alle "
+"pakketbronnen de ondertekening controleert van het bestand Release. Dit "
+"geeft de garantie dat gegevens uit het archief, zoals pakketten, niet "
+"gewijzigd kunnen worden door mensen die geen toegang hebben tot de sleutel "
+"waarmee het bestand Release ondertekend wordt. Met ingang van versie 1.1 "
+"vereist <command>APT</command> dat pakketbronnen recente authenticatie-"
+"informatie verstrekken om die pakketbron ongehinderd te kunnen gebruiken. "
+"Met ingang van versie 1.5 moet gewijzigde informatie over de pakketbron in "
+"het bestand Release bevestigd worden, vooraleer APT voortgaat met het "
+"toepassen van updates die uit die pakketbron afkomstig zijn."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"Opmerking: Alle op APT gebaseerde front-ends voor pakketbeheer, zoals &apt-"
+"get;, &aptitude; en &synaptic;, ondersteunen deze "
+"authenticatiefunctionaliteit. Het is enkel om het eenvoudig te houden dat "
+"deze man-pagina van <literal>APT</literal> gebruikt wordt om die "
+"functionaliteit aan ze allemaal toe te schrijven."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Unsigned Repositories"
+msgstr "Niet-ondertekende pakketbronnen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+"Indien een archief een niet-ondertekend Release-bestand of helemaal geen "
+"Release-bestand heeft, zullen alle hedendaagse versies van APT bij "
+"<command>update</command>-operaties standaard weigeren om er gegevens van op "
+"te halen. En zelfs als ze tot ophalen verplicht worden, zullen frontends, "
+"zoals &apt-get;, om een expliciete bevestiging vragen als bij een "
+"installatieverzoek een pakket uit een dergelijk niet-geauthenticeerd archief "
+"betrokken is."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+"U kunt alle APT-clients verplichten om enkel waarschuwingen te geven door de "
+"configuratie-optie <option>Acquire::AllowInsecureRepositories</option> op "
+"<literal>true</literal> in te stellen. U kunt ook individuele pakketbronnen "
+"toelaten om onveilig te zijn via de optie <literal>allow-insecure=yes</"
+"literal> in &sources-list;. Merk op dat onveilige pakketbronnen ten "
+"stelligste afgeraden worden en dat alle opties die apt verplichten om deze "
+"te blijven ondersteunen, uiteindelijk verwijderd zullen worden. Gebruikers "
+"beschikken ook over de optie <option>Trusted</option>, waardoor zelfs de "
+"waarschuwingen onderdrukt worden, maar u moet zeker zijn dat u de "
+"implicaties ervan begrijpt die uitgelegd worden in &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+"Een pakketbron die zijn eerdere authenticatie-status zou kwijt spelen zal in "
+"geval van een <command>update</command>-operatie bij alle APT-clients een "
+"foutmelding opleveren, ongeacht het feit of een optie het gebruik van "
+"onveilige pakketbronnen toestaat of verbiedt. Een dergelijke fout kan "
+"voorkomen worden door bijkomend de optie <option>Acquire::"
+"AllowDowngradeToInsecureRepositories</option> op <literal>true</literal> in "
+"te stellen of voor individuele pakketbronnen door de optie <literal>allow-"
+"downgrade-to-insecure=yes</literal> te gebruiken in &sources-list;."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Signed Repositories"
+msgstr "Ondertekende pakketbronnen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"De vertrouwensketen vanaf een APT-archief tot de eindgebruiker, bestaat uit "
+"verschillende schakels. <command>apt-secure</command> is de laatste schakel "
+"in die keten. Een archief vertrouwen betekent niet dat u er op vertrouwt dat "
+"zijn pakketten geen kwaadwillige code bevatten, maar betekent wel dat u de "
+"beheerder van het archief vertrouwt. Het behoort tot de verantwoordelijkheid "
+"van de archiefbeheerder om er voor te zorgen dat de integriteit van het "
+"archief gevrijwaard blijft."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"apt-secure controleert geen handtekeningen op pakketniveau. Indien u "
+"gereedschap nodig heeft om dit te doen, moet u uitkijken naar "
+"<command>debsig-verify</command> en <command>debsign</command> (die "
+"respectievelijk in de pakketten debsig-verify en devscripts te vinden zijn)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"De vertrouwensketen in Debian begint (bijvoorbeeld) wanneer een "
+"pakketonderhouder een nieuw pakket of een nieuwe versie ervan naar het "
+"Debian archief uploadt. Om effectief te worden moet deze upload ondertekend "
+"worden met een sleutel uit de sleutelbos van de pakketonderhouders van "
+"Debian (te vinden in het pakket debian-keyring). De sleutels van "
+"onderhouders worden door andere onderhouders ondertekend. Daarbij worden "
+"vaststaande procedures gevolgd om de identiteit van de sleuteleigenaar te "
+"kunnen garanderen. Vergelijkbare procedures worden in alle op Debian "
+"gebaseerde distributies gehanteerd."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"Nadat het geüpload pakket geverifieerd werd en toegevoegd aan het archief, "
+"wordt de handtekening van de onderhouder verwijderd en wordt de controlesom "
+"voor dat pakket berekend en in het bestand Packages opgeslagen. Daarna wordt "
+"voor alle Packages-bestanden de controlesom berekend en opgeslagen in het "
+"bestand Release. Daarna wordt het bestand Release ondertekend door de "
+"archiefsleutel voor deze &keyring-distro; release en verdeeld met de "
+"pakketten en de Packages-bestanden naar de &keyring-distro;-spiegelservers. "
+"De sleutels bevinden zich in de sleutelbos van het &keyring-distro;-archief "
+"die te vinden is in het pakket &keyring-package;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"Eindgebruikers kunnen de ondertekening van het bestand Release controleren, "
+"er de controlesom voor een pakket uithalen en die vergelijken met de "
+"controlesom van het pakket dat ze handmatig gedownload hebben - of "
+"vertrouwen op APT die dit automatisch doet."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"Merk op dat dit niet hetzelfde is als een controle van handtekeningen op het "
+"niveau van individuele pakketten. Deze werkwijze is ontworpen om twee "
+"mogelijke aanvallen te voorkomen:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>Netwerkaanval van het type \"man-in-the-middle\"</literal>. Zonder "
+"de controle van de ondertekening kunnen kwaadwillige personen binnendringen "
+"in het proces van het downloaden van pakketten en kwaadaardige software "
+"verspreiden. Dit kunnen ze doen via het verwerven van controle over een "
+"element van het netwerk (router, switch, enz.) of via het omleiden van "
+"trafiek naar een kwaadaardige server (via ARP of aanvallen van DNS-spoofing)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>Gecompromitteerd spiegelservernetwerk</literal>. Zonder de controle "
+"van handtekeningen kan een kwaadwillige persoon een spiegelserver "
+"binnendringen en de bestanden die er zich op bevinden wijzigen, om op die "
+"manier kwaadaardige software te verspreiden naar alle gebruikers die "
+"pakketten van die server downloaden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"Ze biedt evenwel geen bescherming tegen een aanval gericht tegen de "
+"hoofdserver van Debian (die de pakketten ondertekent) of tegen een aanval "
+"gericht tegen de sleutel die gebruikt wordt om de Release-bestanden te "
+"ondertekenen. In elk geval biedt dit mechanisme wel een aanvulling op een "
+"ondertekening op pakketniveau."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr "Informatiewijzigingen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+"Het bestand Release bevat behalve de checksums voor de bestanden uit de "
+"pakketbron, ook algemene informatie over de pakketbron, zoals origine, "
+"codenaam en versienummer van de release."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+"Deze informatie wordt op verschillende plaatsen weergegeven en dus zou de "
+"eigenaar van een pakketbron altijd de juistheid ervan moeten garanderen. "
+"Daarenboven kan gebruikersconfiguratie, zoals &apt-preferences;, van deze "
+"informatie gebruik maken en er afhankelijk van zijn. Daarom moet de "
+"gebruiker met ingang van versie 1.5 wijzigingen expliciet bevestigen, om te "
+"signaleren dat deze voldoende voorbereid is op bijvoorbeeld de nieuwe "
+"hoofdrelease van de distributie (bijvoorbeeld aangeduid met de codenaam) die "
+"door de pakketbron verdeeld wordt."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr "Configuratie op gebruikersniveau"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"<command>apt-key</command> is het programma dat de sleutelcatalogus beheert "
+"die door APT gebruikt wordt om pakketbronnen te vertrouwen. Het kan gebruikt "
+"worden om sleutels toe te voegen en te verwijderen en de lijst met "
+"vertrouwde sleutels weer te geven. Het is mogelijk om te begrenzen welke "
+"sleutel(s) welk archief kunnen ondertekenen via de optie <option>Signed-By</"
+"option> in &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+"Merk op dat een standaardinstallatie reeds alle nodige sleutels bevat om op "
+"een veilige manier pakketten op te halen uit de standaard pakketbronnen. Met "
+"<command>apt-key</command> knoeien is dus enkel nodig als pakketbronnen van "
+"derden toegevoegd worden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"Om een nieuwe sleutel toe te voegen, moet u hem eerst downloaden (u moet "
+"zich ervan vergewissen dat u bij het ophalen ervan gebruik maakt van een "
+"betrouwbaar communicatiekanaal). Daarna voegt u hem toe met <command>apt-"
+"key</command> en vervolgens voert u de opdracht <command>apt-get update</"
+"command> uit, zodat apt het bestand <filename>InRelease</filename> of "
+"<filename>Release.gpg</filename> uit de door u geconfigureerde archieven kan "
+"ophalen en verifiëren."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Repository Configuration"
+msgstr "Configuratie van de pakketbron"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+"Indien u voor een door u onderhouden archief in een ondertekening van het "
+"archief wilt voorzien, moet u het volgende doen:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"<emphasis>Maak een Release-bestand aan voor het hoofdniveau</emphasis> als "
+"dit nog niet bestaat. U kunt dit doen met de opdracht <command>apt-"
+"ftparchive release</command> (uit het pakket apt-utils)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>Onderteken het</emphasis>. U doet dit door het uitvoeren van de "
+"commando's <command>gpg --clearsign -o InRelease Release</command> en "
+"<command>gpg -abs -o Release.gpg Release</command>."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>Maak de vingerafdruk van de sleutel openbaar</emphasis>, zodat uw "
+"gebruikers weten welke sleutel ze moeten importeren om de bestanden uit het "
+"archief te authenticeren. U doet er best aan uw sleutel te verspreiden via "
+"een eigen sleutelbospakket, zoals &keyring-distro; doet met &keyring-"
+"package;. Op die manier kunnen later updates en transities van sleutels "
+"automatisch gedistribueerd worden."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+"<emphasis>Geef de nodige instructies voor het toevoegen van uw archief en uw "
+"sleutel</emphasis>. Indien uw gebruikers niet op een veilige manier uw "
+"sleutel kunnen bekomen, wordt de hierboven beschreven vertrouwensketen "
+"verbroken. Hoe u gebruikers kunt helpen om uw sleutel toe te voegen, hangt "
+"af van uw archief en het doelpubliek. Dit kan gaan van het toevoegen van uw "
+"sleutelbospakket aan een ander archief dat de gebruikers reeds "
+"geconfigureerd hebben (zoals de standaard pakketbronnen van hun distributie) "
+"tot het gebruik maken van het web van vertrouwen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"Telkens de inhoud van het archief wijzigt (als nieuwe pakketten toegevoegd "
+"of verwijderd worden) moet de archiefverantwoordelijke de hierboven "
+"beschreven eerste twee stappen hernemen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"Voor bijkomende achtergrondinformatie kunt u het hoofdstuk raadplegen over "
+"de beveiligingsinfrastructuur van Debian, <ulink url=\"https://www.debian."
+"org/doc/manuals/securing-debian-howto/ch7\">Debian Security Infrastructure</"
+"ulink>, uit de Securing Debian Manual (ook te vinden in het pakket harden-"
+"doc), alsook de <ulink url=\"http://www.cryptnet.net/fdp/crypto/"
+"strong_distro.html\" >Strong Distribution HOWTO</ulink> door V. Alex Brennen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "Auteurs van de man-pagina"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"Deze man-pagina is gebaseerd op het werk van Javier Fernández-Sanguino Peña, "
+"Isaac Jones, Colin Walters, Florian Weimer en Michael Vogt."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "Hulpprogramma van APT voor CD-beheer"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"<command>apt-cdrom</command> wordt gebruikt om een nieuwe CD toe te voegen "
+"aan de lijst van beschikbare bronnen voor APT. <command>apt-cdrom</command> "
+"draagt zorg voor het achterhalen van de structuur van de schijf, voor het "
+"uitvoeren van correcties voor verschillende mogelijke fouten tijdens het "
+"branden en voor de controle van de indexbestanden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"Voor het toevoegen van CD's aan het systeem van APT is het gebruik van "
+"<command>apt-cdrom</command> noodzakelijk. U kunt dit niet handmatig "
+"uitvoeren. Bovendien moet iedere CD uit een set schijven afzonderlijk "
+"ingevoerd worden en onderzocht op mogelijke fouten bij het branden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"<literal>add</literal> wordt gebruikt om een nieuwe schijf aan de "
+"pakketbronnen toe te voegen. Het zal het CD-station ontkoppelen, vragen om "
+"een schijf in te voeren, die schijf controleren en de indexbestanden "
+"kopiëren. Indien de schijf geen passende map <filename>.disk</filename> "
+"bevat, zal u om een beschrijvende titel gevraagd worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"APT maakt per schijf gebruik van een ID om vast te stellen welke CD zich "
+"momenteel in het station bevindt en houdt een database van deze ID's bij in "
+"<filename>&statedir;/cdroms.list</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"Een debug-gereedschap dat rapporteert over de identiteit van de huidige "
+"schijf en de naam van het opgeslagen bestand."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"Niet automatisch het CD-pad trachten te achterhalen. Meestal wordt dit "
+"gecombineerd met de optie <option>--cdrom</option>. Configuratie-item: "
+"<literal>Acquire::cdrom::AutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"Aankoppelpunt; de locatie waar de CD aangekoppeld moet worden opgeven. Dit "
+"aankoppelpunt moet in <filename>/etc/fstab</filename> vermeld worden en "
+"correct geconfigureerd zijn. Configuratie-item: <literal>Acquire::cdrom::"
+"mount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"Een schijf hernoemen; de naam van een schijf wijzigen of de aan een schijf "
+"gegeven naam overschrijven. Deze optie doet <command>apt-cdrom</command> om "
+"een nieuwe naam vragen. Configuratie-item: <literal>APT::CDROM::Rename</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"Niet aankoppelen; <command>apt-cdrom</command> verhinderen om het "
+"aankoppelpunt aan en af te koppelen. Configuratie-item: <literal>APT::CDROM::"
+"NoMount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"Snel kopiëren; Aannemen dat de pakketbestanden geldig zijn en niet elk "
+"pakket controleren. Deze optie mag enkel gebruikt worden als op deze schijf "
+"vooraf <command>apt-cdrom</command> uitgevoerd werd en er geen fouten "
+"gevonden werden. Configuratie-item: <literal>APT::CDROM::Fast</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"Grondig naar Package speuren; Deze optie kan noodzakelijk zijn bij sommige "
+"oude schijven die Debian 1.1/1.2 bevatten en waarbij de Package-bestanden "
+"zich op ongewone plaatsen bevinden. Het vraagt veel meer tijd om de CD te "
+"doorzoeken, maar de bestanden zullen allemaal gevonden worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"Geen wijzigingen. Het bestand &sources-list; niet veranderen en geen "
+"indexbestanden wegschrijven. Niettemin wordt alles wel gecontroleerd. "
+"Configuratie-item: <literal>APT::CDROM::NoAct</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> geeft de terugkeerwaarde nul bij een normaal "
+"verlopen operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "Programma om de configuratie van APT op te vragen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> is een intern programma dat door verschillende "
+"onderdelen van de APT-suite gebruikt wordt om op een consistente wijze "
+"configuratiemogelijkheden te bieden. Het maakt gebruik van het "
+"hoofdconfiguratiebestand <filename>/etc/apt/apt.conf</filename> op een "
+"manier die scripts toelaat om er handig gebruik van te maken."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"Men gebruikt shell om in een shell-script configuratie-informatie op te "
+"vragen. Argumenten worden in paren opgegeven. Het eerste argument is een "
+"shell-variabele en het tweede de configuratiewaarde waarnaar gezocht moet "
+"worden. De uitvoer bestaat uit een lijst shell-opdrachten waarin elke "
+"gevonden waarde aan een variabele toegekend wordt. In een shell-script moet "
+"het als volgt gebruikt worden:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"Dit zal aan de shell-omgevingsvariabele $OPTS de waarde toekennen van MyApp::"
+"options met een standaard van <option>-f</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"Achter het configuratie-item mag een /[fdbi] staan. f levert een "
+"bestandsnaam op, d een map, b geeft de terugkeerwaarde true of false en i "
+"geeft een geheel getal als terugkeerwaarde. Elke terugkeerwaarde wordt "
+"intern genormaliseerd en gecontroleerd."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "Enkel de inhoud van de configuratieruimte weergeven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"Opties met een lege waarde opnemen. Dit is de standaard. Gebruik dus --no-"
+"empty om ze uit de uitvoer te verwijderen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"Definieert de uitvoer van elke configuratie-optie. &percnt;t wordt vervangen "
+"door zijn eigen naam, &percnt;f door zijn volledige hiërarchische naam en "
+"&percnt;v door zijn waarde. Gebruik hoofdletters, en als in de waarde "
+"speciale tekens voorkomen, worden ze gecodeerd om er voor te zorgen dat die "
+"waarde bijvoorbeeld veilig gebruikt kan worden in een tekenreeks binnen "
+"aanhalingstekens zoals bepaald door RFC822. Voorts zal &percnt;n vervangen "
+"worden door een nieuwe regel en &percnt;N door een TAB. Om een &percnt; weer "
+"te geven gebruikt men &percnt;&percnt;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> geeft de terugkeerwaarde nul bij een normaal "
+"verlopen operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "Initiële documentatie bij Debug::*."
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "Configuratiebestand van APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"<filename>/etc/apt/apt.conf</filename> is het hoofdconfiguratiebestand dat "
+"gebruikt wordt door alle gereedschappen uit de gereedschappensuite van APT, "
+"maar het is bijlange na niet de enige plaats waar opties ingesteld kunnen "
+"worden. De suite gebruikt ook een gemeenschappelijke parser voor de "
+"commandoregel om zo een uniforme omgeving aan te bieden."
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+"Als een gereedschap van APT opstart, zal het de configuratiebestanden in de "
+"volgende volgorde lezen:"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+"het bestand dat in de omgevingsvariabele <envar>APT_CONFIG</envar> "
+"gespecificeerd wordt (voor zover dit het geval is)"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"alle bestanden uit <literal>Dir::Etc::Parts</literal> in oplopende "
+"alfabetische volgorde die ofwel geen extensie of \"<literal>conf</literal>\" "
+"als extensie van de bestandsnaam hebben en waarvan de inhoud enkel "
+"alfanumerieke tekens, koppeltekens (-), laag liggende streepjes (_) en "
+"punten (.) bevat. Anders zal APT melding maken van het feit dat het een "
+"bestand genegeerd heeft, tenzij dat bestand overeenkomt met een patroon uit "
+"de configuratielijst <literal>Dir::Ignore-Files-Silently</literal>. In dat "
+"laatste geval zal het bestand stilzwijgend genegeerd worden."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+"het hoofdconfiguratiebestand zoals bepaald door <literal>Dir::Etc::main</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+"alle opties die in de subboom met binairspecifieke configuraties ingesteld "
+"waren, worden verplaatst naar het basisniveau van de boomstructuur."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"de opties die aan de commandoregel ingegeven werden om de "
+"configuratierichtlijnen te overschrijven of om nog meer "
+"configuratiebestanden in te lezen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "Syntaxis"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"Het configuratiebestand is opgevat als een boom met opties die gegroepeerd "
+"worden in functionele groepen. De notatie van optiespecificaties gebeurt aan "
+"de hand van dubbele dubbelpunten. <literal>APT::Get::Assume-Yes</literal> "
+"bijvoorbeeld, is een optie binnen de gereedschapsgroep APT voor het "
+"gereedschap Get. Opties worden niet overgeërfd van oudergroepen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+"Op het vlak van de syntaxis volgt de configuratietaal het model dat gebruikt "
+"wordt door gereedschappen als bind en dhcp. Regels die beginnen met "
+"<literal>//</literal> worden als commentaar behandeld (genegeerd) evenals "
+"alle tekst tussen <literal>/*</literal> en <literal>*/</literal> naar het "
+"voorbeeld van commentaar in C/C++. Elke regel heeft de vorm <literal>APT::"
+"Get::Assume-Yes \"true\";</literal>. De aanhalingstekens en de afsluitende "
+"puntkomma zijn nodig. De waarde moet op een regel staan en er wordt geen "
+"vorm van aaneenschakeling van tekenreeksen toegepast. Waarden mogen geen "
+"backslashes of extra aanhalingstekens bevatten. Optienamen worden gevormd "
+"met behulp van alfanumerieke lettertekens en de tekens \"/-:._+\". Een nieuw "
+"bereik wordt geopend met een accolade, op de volgende manier:"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+"en er worden regeleinden gebruikt om de leesbaarheid te verbeteren. Men kan "
+"een lijst aanmaken door een bereik te openen dat een enkele tekenreeks bevat "
+"die tussen aanhalingstekens staat en die gevolgd wordt door een puntkomma. "
+"Men kan meerdere items opnemen die van elkaar gescheiden worden door een "
+"puntkomma."
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+"In het algemeen vormt het voorbeeldconfiguratiebestand &configureindex; een "
+"goede richtlijn voor hoe een configuratiebestand er moet uitzien."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+"In de namen van configuratie-items speelt het gebruik van hoofd- of kleine "
+"letters geen rol. In het voorgaande voorbeeld zou u dus ook <literal>dpkg::"
+"pre-install-pkgs</literal> kunnen gebruiken."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+"Als een lijst gedefinieerd wordt zijn namen voor configuratie-items "
+"optioneel, zoals hierboven in het voorbeeld <literal>DPkg::Pre-Install-Pkgs</"
+"literal> te zien is. Indien u geen naam opgeeft, zal een nieuw item gewoon "
+"een nieuwe optie toevoegen aan de lijst. Indien u wel een naam opgeeft kunt "
+"u de optie op dezelfde wijze overschrijven als om het even welke andere "
+"optie door aan de optie een nieuwe waarde toe te kennen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+"Er werden twee bijzondere commando's gedefinieerd: <literal>#include</"
+"literal> (dat afgeraden wordt en niet ondersteund wordt door alternatieve "
+"toepassingen) en <literal>#clear</literal>. <literal>#include</literal> "
+"voegt het opgegeven bestand in, tenzij de bestandsnaam op een slash eindigt. "
+"In dat laatste geval wordt de hele map ingevoegd. <literal>#clear</literal> "
+"wordt gebruikt om een gedeelte van de configuratieboom te wissen. Het "
+"opgegeven element en alle eronder vallende elementen worden verwijderd. "
+"(Merk op dat ook deze regels op een puntkomma moeten eindigen)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+"Het commando <literal>#clear</literal> is de enige manier om een lijst of "
+"een volledig bereik te wissen. Een bereik heropenen (of de hierna beschreven "
+"syntaxis met een toegevoegde <literal>::</literal> gebruiken) zal eerder "
+"ingevoerde items <emphasis>niet</emphasis> overschrijven. Opties kunnen "
+"enkel overschreven worden door hen een nieuwe waarde te geven - lijsten en "
+"bereiken kunnen niet overschreven worden, enkel gewist."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+"Alle APT-gereedschap kan overweg met de optie -o die toelaat om aan de "
+"commandoregel een willekeurige configuratierichtlijn op te geven. De "
+"syntaxis is een volledige optienaam (bijvoorbeeld <literal>APT::Get::Assume-"
+"Yes</literal>) gevolgd door een gelijkheidsteken en vervolgens de nieuwe "
+"waarde voor de optie. Om een nieuw element aan een lijst toe te voegen, "
+"voegt u aan het eind van de lijstnaam een <literal>::</literal>. (Zoals u "
+"wellicht vermoedde, kan aan de commandoregel de bereik-syntaxis niet "
+"gebruikt worden.)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+"Merk op dat het toevoegen van een item aan een lijst met <literal>::</"
+"literal> enkel werkt met een item per regel en dat u dit niet moet gebruiken "
+"in combinatie met de bereik-syntaxis (die impliciet <literal>::</literal> "
+"toevoegt). Beide syntactische vormen combineren lokt een fout uit waarop "
+"sommige gebruikers ongelukkiglijk zullen voortbouwen: een optie met de "
+"ongewone naam \"<literal>::</literal>\" maar die zich voorts gedraagt als "
+"elke andere optie die een naam heeft. Dit veroorzaakt veel problemen. "
+"Vooreerst zullen gebruikers die meerdere regels in deze <emphasis>verkeerde</"
+"emphasis> syntaxis schrijven in de hoop ze aan een lijst toe te voegen, het "
+"tegenovergestelde bereiken, aangezien enkel de laatste waardetoekenning aan "
+"deze optie \"<literal>::</literal>\" gebruikt zal worden. Toekomstige "
+"versies van APT zullen foutmeldingen geven en ophouden met werken als ze dit "
+"foutieve gebruik tegenkomen. Gelieve voorlopig dergelijke opdrachten te "
+"corrigeren, vermits APT zich er niet expliciet over beklaagt."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr "De APT-groep"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+"Deze groep opties regelt het algemeen gedrag van APT en bevat ook de opties "
+"die alle gereedschappen gemeen hebben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+"Systeemarchitectuur; stelt de te gebruiken architectuur in bij het ophalen "
+"van bestanden en het verwerken van pakketlijsten. De interne standaard is "
+"die architectuur waarvoor apt gecompileerd werd."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+"Alle door het systeem ondersteunde architecturen. Bijvoorbeeld zijn CPU's "
+"die de instructieset <literal>amd64</literal> (ook <literal>x86-64</literal> "
+"genoemd) gebruiken, ook in staat om programma's uit te voeren die "
+"gecompileerd werden voor de instructieset <literal>i386</literal> "
+"(<literal>x86</literal>). Deze lijst wordt gebruikt bij het ophalen van "
+"bestanden en het verwerken van pakketlijsten. De initiële standaard is "
+"altijd de systeemeigen architectuur (<literal>APT::Architecture</literal>) "
+"en vreemde architecturen worden aan de standaardlijst toegevoegd wanneer ze "
+"geregistreerd worden via het commando <command>dpkg --add-architecture</"
+"command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+"Dit bereik definieert welke compressieformaten ondersteund worden, hoe "
+"compressie en decompressie uitgevoerd kunnen worden indien de ondersteuning "
+"voor dit formaat niet rechtstreeks ingebouwd is in apt en het definieert een "
+"kostwaarde die aangeeft hoe duur het is om iets in dit formaat te "
+"comprimeren. De volgende configuratiestanza laat bij wijze van voorbeeld apt "
+"toe om bestanden met de goedkope bestandsextensie <literal>.reversed</"
+"literal> zowel te downloaden en te decomprimeren als aan te maken en op te "
+"slaan, waarbij apt voor het comprimeren en decomprimeren het commando "
+"<command>rev</command> zal gebruiken zonder bijkomende "
+"commandoregelparameters:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+"Lijst met alle bouwprofielen die gebruikt worden bij het oplossen van de "
+"bouwvereisten met weglating van het naamruimte-prefix \"<literal>profile.</"
+"literal>\". Standaard is deze lijst leeg. <envar>DEB_BUILD_PROFILES</envar>, "
+"zoals het door &dpkg-buildpackage; gebruikt wordt, overschrijft de "
+"lijstnotatie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+"De release waarvandaan pakketten standaard geïnstalleerd moeten worden als "
+"er meer dan een versie van beschikbaar is. Bevat releasenaam, codenaam of "
+"releaseversie. Voorbeelden: 'stable', 'testing', 'unstable', '&debian-stable-"
+"codename;', '&debian-testing-codename;', '4.0', '5.0*'. Zie ook &apt-"
+"preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+"Tegengehouden pakketten negeren. Deze globale optie doet de probleemoplosser "
+"tegengehouden pakketten negeren bij zijn besluitvorming."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+"Staat standaard aan. Wanneer de functie autoclean (automatisch opruimen) aan "
+"staat, zal ze automatisch alle pakketten verwijderen die niet langer "
+"gedownload kunnen worden uit de cache. Als ze uitgezet staat, zullen ook "
+"pakketten die lokaal geïnstalleerd werden, niet opgeruimd worden - maar merk "
+"wel op dat APT geen rechtstreeks middel ter beschikking stelt om een "
+"dergelijk pakket opnieuw te installeren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+"Staat standaard aan, hetgeen APT ertoe aanzet om bij een installatie/"
+"opwaarderingsoperatie essentiële en belangrijke pakketten zo snel mogelijk "
+"te installeren om zo het effect van een falende aanroep van &dpkg; te "
+"beperken. Indien deze optie uitgezet werd, behandelt APT een belangrijk "
+"pakket op dezelfde manier als een extra pakket: tussen het uitpakken van "
+"pakket A en de configuratie ervan kunnen er vele andere uitpak- en "
+"configuratieoperaties uitgevoerd worden voor andere niet-verwante pakketten "
+"B, C, enz. Indien een van deze operaties\n"
+" een mislukte aanroep van &dpkg; uitlokt (bijvoorbeeld omdat een script van "
+"de pakketonderhouder van pakket B een fout produceert), zal dit een "
+"systeemtoestand opleveren waarbij pakket A uitgepakt maar niet "
+"geconfigureerd is, waardoor er geen garantie meer bestaat dat alle pakketten "
+"die van A afhangen, nog langer zullen werken, aangezien aan die "
+"afhankelijkheid niet langer voldaan wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+"Een markering voor onmiddellijke configuratie wordt ook toegepast in het "
+"potentieel problematische geval van circulaire afhankelijkheden, aangezien "
+"een vereiste met de vlag 'er onmiddellijk aan voldoen' het equivalent is van "
+"een voorvereiste. In theorie laat dit APT toe om een situatie te herkennen "
+"waarin het geen onmiddellijke configuratie kan uitvoeren, zijn werkzaamheden "
+"in dat geval af te breken en de gebruiker voor te stellen om de optie "
+"tijdelijk uit te zetten zodat de operatie voortgezet kan worden. Noteer dat "
+"hier het woord \"theorie\" gebruikt werd. In het echte leven heeft men een "
+"dergelijk probleem slechts zelden ervaren en dan was het omdat in een niet-"
+"stabiele versie van de distributie het pakket in kwestie foutieve vereisten "
+"had of omdat het systeem zich reeds in een beschadigde toestand bevond. U "
+"zou deze optie dus niet blindweg mogen uitschakelen, omdat het hierboven "
+"beschreven scenario niet het enige probleem is dat deze optie in eerste "
+"instantie kan helpen voorkomen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+"Voor u, met deze optie uitgezet, een grote operatie zoals <literal>dist-"
+"upgrade</literal> uitvoert, zou u het pakket dat APT niet onmiddellijk kan "
+"configureren, expliciet moeten proberen te installeren met <literal>install</"
+"literal>. Maar zorg er ook zeker voor om uw probleem te rapporteren aan uw "
+"distributie en aan het APT-team met de onderstaande buglink. Zo kunnen zij "
+"werken aan het verbeteren of het corrigeren van de opwaarderingsprocedure."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+"Zet deze optie nooit aan tenzij u <emphasis>echt</emphasis> weet wat u doet. "
+"Ze laat APT toe om tijdelijk een essentieel pakket te verwijderen om een lus "
+"van Conflicts/Conflicts of Conflicts/Pre-Depends tussen twee essentiële "
+"pakketten te doorbreken. <emphasis>Een dergelijke lus zou nooit mogen "
+"voorkomen en is een zorgwekkende bug</emphasis>. Deze optie zal werken als "
+"die essentiële pakketten niet <command>tar</command>, <command>gzip</"
+"command>, <command>libc</command>, <command>dpkg</command>, <command>dash</"
+"command> zijn of iets waarvan deze pakketten afhankelijk zijn."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+"Sinds versie 0.7.26 gebruikt APT een in het geheugen geladen cachebestand "
+"van variabele grootte waarin de informatie over beschikbare bestanden "
+"opgeslagen ligt. <literal>Cache-Start</literal> werkt als een hint voor de "
+"grootte die de cache uiteindelijk zal aannemen en is daarom de hoeveelheid "
+"geheugen die APT bij het opstarten zal aanvragen. De standaardwaarde is "
+"20971520 bytes (~20 MB). Merk op dat dit volume geheugenruimte beschikbaar "
+"moet zijn voor APT, anders zal het wellicht op een onelegante wijze falen. "
+"Voor apparaten met beperkt geheugen zou deze waarde dus verlaagd moeten "
+"worden, terwijl ze verhoogd zou moeten worden op systemen met veel "
+"geconfigureerde pakketbronnen. <literal>Cache-Grow</literal> geeft aan, in "
+"bytes met een standaard van 1048576 (~1 MB), hoeveel de cachegrootte "
+"uitgebreid zal worden in het geval de ruimte gedefinieerd door "
+"<literal>Cache-Start</literal> niet volstaat. Steeds weer zal dit bijkomend "
+"geheugenvolume toegevoegd worden totdat uiteindelijk de cachegrootte "
+"uitgebreid genoeg is om alle informatie in op te slaan of totdat de "
+"<literal>Cache-Limit</literal> bereikt wordt. De standaardinstelling voor "
+"<literal>Cache-Limit</literal> is 0, hetgeen staat voor geen limiet. Indien "
+"<literal>Cache-Grow</literal> ingesteld wordt op 0, wordt de automatische "
+"uitbreiding van de cache uitgeschakeld."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr "Bepaalt welke pakketten beschouwd worden als essentiële bouwvereisten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+"De onderafdeling Get regelt het gereedschap &apt-get; raadpleeg de "
+"documentatie daarover voor meer informatie over de opties in kwestie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"De onderafdeling Cache regelt het gereedschap &apt-cache; raadpleeg de "
+"documentatie daarover voor meer informatie over de opties in kwestie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"De onderafdeling CDROM regelt het gereedschap &apt-cdrom; raadpleeg de "
+"documentatie daarover voor meer informatie over de opties in kwestie."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr "De Acquire-groep"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+"De opties die tot de groep <literal>Acquire</literal> behoren, regelen het "
+"downloaden van pakketten evenals de verschillende ophaalmethodes (\"acquire "
+"methods\") die verantwoordelijk zijn voor het downloaden zelf (zie ook "
+"&sources-list;)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+"Beveiligingsgerelateerde optie die standaard waar (true) is en die "
+"tijdgerelateerde toetsingen mogelijk maakt. Deze optie uitschakelen betekent "
+"dat de tijd op de machine niet betrouwbaar is. Zodoende zal APT alle "
+"tijdgerelateerde toetsen uitschakelen, zoals <option>Check-Valid-Until</"
+"option> of controleren of de datum in het datumveld van een release-bestand "
+"zich niet in de toekomst situeert."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+"Maximum tijd (in seconden) voor het tijdstip waarop het <filename>Release</"
+"filename>-bestand aangemaakt werd (zoals vermeld in de koptekst "
+"<literal>Date</literal>), dat het als geldig beschouwd moet worden. De "
+"standaardwaarde is <literal>10</literal>. Archiefspecifieke instellingen "
+"kunnen aangemaakt worden door het label van het archief toe te voegen aan de "
+"optienaam. Bij voorkeur kan voor specifieke regels uit &sources-list; "
+"hetzelfde bereikt worden door daar de optie <option>Date-Max-Future</option> "
+"te gebruiken."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+"Deze met beveiliging verband houdende optie staat standaard ingesteld op "
+"waar (true), aangezien het plaatsen van een vervaldatum op de validering van "
+"een Release-bestand langdurige zogenaamde replay-aanvallen kan voorkomen. Ze "
+"kan gebruikers ook helpen om spiegelservers te identificeren die niet langer "
+"bijgewerkt worden, al is deze functionaliteit afhankelijk van een juist "
+"werkende klok op het systeem van de gebruiker. Onderhouders van archieven "
+"worden aangemoedigd om Release-bestanden aan te maken met een koptekst "
+"<literal>Valid-Until</literal>, maar als ze dat niet doen of indien er een "
+"striktere waarde nodig is, kan de onderstaande optie <literal>Max-ValidTime</"
+"literal> gebruikt worden. In plaats van deze globale vervanging zou bij "
+"voorkeur de optie <option>Check-Valid-Until</option> voor regels in &sources-"
+"list; gebruikt moeten worden om de toets op een selectieve manier uit te "
+"zetten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+"Maximum tijd (in seconden) na het tijdstip waarop het <filename>Release</"
+"filename>-bestand aangemaakt werd (zoals vermeld in de koptekst "
+"<literal>Date</literal>), dat het als geldig beschouwd moet worden. Indien "
+"het Release-bestand zelf een koptekst <literal>Valid-Until</literal> bevat "
+"wordt de meest recente van beide data als vervaldatum genomen. De "
+"standaardwaarde is <literal>0</literal> hetgeen staat voor \"onbeperkt geldig"
+"\". Archiefspecifieke instellingen kunnen aangemaakt worden door de naam van "
+"het archief toe te voegen aan de optienaam. Hetzelfde effect kan voor "
+"specifieke regels uit &sources-list; bereikt worden door daar de optie "
+"<option>Valid-Until-Max</option> te gebruiken, wat bij voorkeur gedaan zou "
+"moeten worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+"Minimum tijd (in seconden) na het tijdstip waarop het <filename>Release</"
+"filename>-bestand aangemaakt werd (zoals vermeld in de koptekst "
+"<literal>Date</literal>), dat het als geldig beschouwd moet worden. Gebruik "
+"dit indien u beroep moet doen op een zelden bijgewerkte (lokale) "
+"spiegelserver van een vaker bijgewerkt archief met een koptekst "
+"<literal>Valid-Until</literal>. Dit is te verkiezen boven het volledig "
+"uitschakelen van de controle van de vervaldatum. Archiefspecifieke "
+"instellingen kunnen en zouden moeten gebruikt worden door de naam van het "
+"archief toe te voegen aan de optienaam. Hetzelfde effect kan voor specifieke "
+"regels uit &sources-list; bereikt worden door daar de optie <option>Valid-"
+"Until-Min</option> te gebruiken, wat bij voorkeur gedaan zou moeten worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+"Sta toe dat de interne TLS-ondersteuning uit de http-methode gebruikt wordt. "
+"Indien deze waarde ingesteld wordt op false, wordt ondersteuning voor TLS in "
+"de eigen methodes van apt volledig uitgeschakeld (met uitzondering van de op "
+"curl gebaseerde https-methode). TLS-gerelateerde functies zullen niet langer "
+"aangeroepen worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+"Tracht de wijzigingen aan indexen (zoals de bestanden <filename>Packages</"
+"filename>), <literal>PDiffs</literal> genaamd, op te halen in plaats van de "
+"volledige bestanden. Standaard ingesteld op waar. Dit kan voor specifieke "
+"regels in &sources-list; of specifieke indexbestanden ingesteld worden door "
+"daar de optie <option>PDiffs</option> te gebruiken, wat bij voorkeur gedaan "
+"zou moeten worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+"Er zijn ook twee subopties beschikbaar om het gebruik van PDiffs te "
+"beperken: <literal>FileLimit</literal> kan gebruikt worden om het maximum "
+"aantal PDiff-bestanden op te geven die gedownload zouden mogen worden om een "
+"bestand bij te werken. <literal>SizeLimit</literal> van zijn kant geeft aan "
+"hoe groot het percentage van alle patches samen mag zijn vergeleken met de "
+"grootte van het bestand waarop ze betrekking hebben. Indien een van beide "
+"limieten overschreden wordt, wordt het ganse bestand gedownload in plaats "
+"van de patches."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+"Tracht indexen te downloaden via een URI die opgebouwd wordt op basis van de "
+"frommelcontrolesom van het verwachte bestand, eerder dan via een welbekende "
+"stabiele bestandsnaam. Dit staat standaard ingesteld op waar (true), maar "
+"als de pakketbron aangeeft dat dit niet ondersteund wordt, wordt het "
+"automatisch uitgeschakeld. Het gebruik ervan kan verplicht worden met de "
+"bijzondere waarde \"force\". Dit kan voor specifieke regels in &sources-"
+"list; of specifieke indexbestanden ingesteld worden door daar de optie "
+"<option>By-Hash</option> te gebruiken, wat bij voorkeur gedaan zou moeten "
+"worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+"Wachtrijmodus; <literal>Queue-Mode</literal> kan ofwel <literal>host</"
+"literal> ofwel <literal>access</literal> zijn en bepaalt hoe APT de "
+"parallellisatie van uitgaande verbindingen organiseert. <literal>host</"
+"literal> betekent dat een verbinding per doelcomputer geopend wordt, "
+"<literal>access</literal> wil zeggen dat een verbinding per URI-type geopend "
+"wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+"Aantal uit te voeren pogingen. Indien dit niet nul is, zal APT bij een "
+"mislukte poging het opgegeven aantal nieuwe pogingen doen om een bestand op "
+"te halen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+"Gebruik symbolische koppelingen voor bronarchieven. Indien dit op true "
+"(waar) ingesteld staat, zal geen kopie van een bronarchief gemaakt worden "
+"als een symbolische koppeling mogelijk is. Waar is de standaardinstelling."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+"De opties in deze gebieden configureren APT's ophaaltransportmethodes voor "
+"de protocollen HTTP en HTTPS en worden gedocumenteerd in de respectieve man-"
+"pagina's &apt-transport-http; en &apt-transport-https;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+"<literal>ftp::Proxy</literal> stelt de te gebruiken standaard-proxy in voor "
+"URI's van het type FTP. De standaardvorm ervan is <literal>ftp://[[user][:"
+"pass]@]host[:port]/</literal>. Proxy's kunnen ook per computer ingesteld "
+"worden volgens het schema <literal>ftp::Proxy::&lt;host&gt;</literal>, "
+"waarbij het bijzondere trefwoord <literal>DIRECT</literal> betekent dat geen "
+"proxy's gebruikt worden. Indien geen van de bovenstaande instellingen "
+"opgegeven werd, zal de omgevingsvariabele <envar>ftp_proxy</envar> gebruikt "
+"worden. Om een FTP-proxy te gebruiken zult u het script <literal>ftp::"
+"ProxyLogin</literal> in het configuratiebestand moeten instellen. Dit item "
+"omschrijft de te verzenden commando's die de proxy-server moeten laten weten "
+"waarmee hij een verbinding moet maken. Raadpleeg &configureindex; voor een "
+"voorbeeld van hoe dit moet gedaan worden. De substitutievariabelen die de "
+"overeenkomstige URI-component vertegenwoordigen, zijn <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> en <literal>$(SITE_PORT)</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+"De optie <literal>timeout</literal> stelt de tijdslimiet in die gehanteerd "
+"moet worden door de timer die door deze methode gebruikt wordt. Deze waarde "
+"is zowel van toepassing op de tijdslimiet van de verbinding als op die van "
+"de data-overdracht."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+"Meerdere instellingen zijn beschikbaar om de passieve modus te controleren. "
+"Over het algemeen is het veilig om de passieve modus aan te laten staan. Hij "
+"werkt in praktisch elke omgeving. Toch vereisen sommige situaties het "
+"uitschakelen van de passieve modus en het gebruik in de plaats daarvan van "
+"FTP in poortmodus. Dit kan globaal gebeuren of voor verbindingen die langs "
+"een proxy passeren of voor een specifieke computer. (raadpleeg voor "
+"voorbeelden het voorbeeldconfiguratiebestand)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+"Het is mogelijk om proxy voor FTP over HTTP te laten verlopen door de "
+"omgevingsvariabele <envar>ftp_proxy</envar> in te stellen op een URL van het "
+"type HTTP - zie de eerdere bespreking van de http-methode voor de syntaxis. "
+"U kunt dit niet in het configuratiebestand instellen en het gebruik van FTP "
+"over HTTP wordt niet aangeraden omwille van zijn geringe efficiëntie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+"De instelling <literal>ForceExtended</literal> regelt het gebruik van de "
+"RFC2428 commando's <literal>EPSV</literal> en <literal>EPRT</literal>. "
+"Standaard staat ze uitgeschakeld (ingesteld op false), hetgeen betekent dat "
+"deze commando's enkel gebruikt worden indien de controleverbinding van het "
+"type IPv6 is. Deze instelling aanzetten (instellen op true) verplicht het "
+"gebruik van deze commando's zelfs bij verbindingen van het type IPv4. Merk "
+"op dat de meeste FTP-servers RFC2428 niet ondersteunen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr "/cdrom/::Mount \"foo\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+"Voor URI's die de methode <literal>cdrom</literal> gebruiken is het "
+"aankoppelpunt, <literal>cdrom::Mount</literal>, de enige optie die "
+"geconfigureerd kan worden. Dit moet het aankoppelpunt voor het CD-station "
+"(of DVD-station of wat dan ook) zijn zoals vermeld in <filename>/etc/fstab</"
+"filename>. Het is mogelijk om te voorzien in vervangende commando's voor de "
+"aankoppelings- en afkoppelingsoperaties als het niet mogelijk is om het "
+"aankoppelpunt in fstab op te nemen. De syntaxis is om <placeholder type="
+"\"literallayout\" id=\"0\"/> binnen het <literal>cdrom</literal>-blok te "
+"plaatsen. Het is belangrijk dat ook de nakomende slash gebruikt wordt. "
+"Afkoppelingsopdrachten kunnen opgegeven worden door UMount te gebruiken."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+"Voor URI's van het type GPGV is de enige optie die geconfigureerd kan worden "
+"<literal>gpgv::Options</literal>. Ze geeft bijkomende parameters door aan "
+"gpgv."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+"Lijst van compressietypes die door de methodes voor het ophalen van "
+"pakketten begrepen worden. Bestanden zoals <filename>Packages</filename> "
+"kunnen in verschillende compressieformaten beschikbaar zijn. Standaard "
+"kunnen de ophaalmethodes veel gebruikelijke formaten zoals <command>xz</"
+"command> en <command>gzip</command> decomprimeren en opnieuw comprimeren. "
+"Met dit bereik kunnen de ondersteunde formaten doorzocht worden, kunnen er "
+"wijzigingen in aangebracht worden en kan ondersteuning voor nog andere "
+"formaten toegevoegd worden (zie ook <option>APT::Compressor</option>). De "
+"syntaxis hiervoor is: <placeholder type=\"synopsis\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+"Voorts kan de subgroep <literal>Order</literal> gebruikt worden om te "
+"bepalen in welke volgorde het ophaalsysteem de gecomprimeerde bestanden zal "
+"trachten te downloaden. Eerst zal het ophaalsysteem het eerste "
+"compressietype proberen en als dat mislukt het volgende uit deze lijst. Om "
+"dus een type boven een ander te laten verkiezen moet u het gewoon vooraan in "
+"de lijst plaatsen. Nog niet vermelde standaardtypes zullen impliciet aan het "
+"einde van de lijst toegevoegd worden. Zo kan bijvoorbeeld <placeholder type="
+"\"synopsis\" id=\"0\"/> gebruikt worden om met <command>gzip</command> "
+"gecomprimeerde bestanden te verkiezen boven alle andere formaten. Indien "
+"<command>xz</command> moet verkozen worden boven <command>gzip</command> en "
+"<command>bzip2</command>, moet de configuratie-instelling er als volgt "
+"uitzien: <placeholder type=\"synopsis\" id=\"1\"/>. Het is onnodig om "
+"<literal>bz2</literal> expliciet aan de lijst toe te voegen, aangezien het "
+"er automatisch aan toegevoegd zal worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+"Merk op dat op het ogenblik van uitvoering gekeken zal worden naar "
+"<literal>Dir::Bin::<replaceable>Naam-van-de-Methode</replaceable></literal>. "
+"Indien deze optie ingesteld werd en ondersteuning voor dit formaat niet "
+"rechtstreeks ingebouwd is in apt, zal de methode enkel gebruikt worden "
+"indien dat bestand bestaat. Voor de methode <literal>bzip2</literal> "
+"bijvoorbeeld, is de (ingebouwde) instelling: <placeholder type="
+"\"literallayout\" id=\"0\"/>. Merk ook op dat de lijstitems die aan de "
+"commandoregel opgegeven worden, toegevoegd zullen worden achteraan de lijst "
+"die in de configuratiebestanden vermeld wordt, maar voorafgaand aan de "
+"standaarditems. Om in dit geval een type boven die uit de "
+"configuratiebestanden te verkiezen, kunt u de optie rechtstreeks instellen - "
+"niet in de lijstopmaak. Dit zal de gedefinieerde lijst niet opheffen. Het "
+"zal de lijst enkel laten beginnen met dat type."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+"Het bijzondere type <literal>uncompressed</literal> kan gebruikt worden om "
+"voorrang te geven aan niet-gecomprimeerde bestanden. Maar u dient te weten "
+"dat de meeste archieven geen niet-gecomprimeerde bestanden aanbieden, zodat "
+"dit type grotendeels enkel bruikbaar is voor lokale spiegelservers."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+"Indexen (Packages, Sources, of Translations) die met <literal>gzip</literal> "
+"gecomprimeerd werden en die u downloadt, laat u best in gecomprimeerde vorm "
+"op de lokale computer staan in plaats van ze uit te pakken. Dit spaart heel "
+"wat schijfruimte, zij het ten koste van een intensiever CPU-gebruik tijdens "
+"het opbouwen van de lokale pakketcaches. Standaard staat dit uit."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+"De subsectie Languages regelt welke <filename>Translation</filename>-"
+"bestanden gedownload worden en in welke volgorde APT probeert de vertaalde "
+"beschrijvingen weer te geven. APT zal proberen de eerste beschikbare "
+"beschrijving weer te geven in de eerst vermelde taal. Talen kunnen "
+"gedefinieerd worden aan de hand van een korte of een lange taalcode. Merk op "
+"dat niet elk archief voor elke taal een <filename>Translation</filename>-"
+"bestand aanbiedt - zeker de lange taalcodes zijn zeldzaam."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr "Acquire::Languages { \"environment\"; \"nl\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"De lijst bevat standaard \"environment\" en \"en\". \"<literal>environment</"
+"literal>\" heeft hier een speciale betekenis: op het moment van uitvoering "
+"zal het vervangen worden door de taalcodes die afgeleid worden uit de "
+"omgevingsvariabele <literal>LC_MESSAGES</literal>. Het zorgt er ook voor dat "
+"deze niet tweemaal voorkomen in de lijst. Als <literal>LC_MESSAGES</literal> "
+"op \"C\" ingesteld staat, wordt enkel het bestand <filename>Translation-en</"
+"filename> (als het beschikbaar is) gebruikt.Om APT te dwingen geen "
+"Translation-bestand te gebruiken, moet u de instelling <literal>Acquire::"
+"Languages=none</literal> gebruiken. Ook de code \"<literal>none</literal>\" "
+"is er een met een speciale betekenis. Ze zorgt ervoor dat niet verder "
+"gezocht wordt naar een passend <filename>Translation</filename>-bestand. Ze "
+"vertelt APT ook om die vertalingen wel te downloaden zonder ze effectief te "
+"gebruiken tenzij er in de omgeving talen gespecificeerd worden. Het volgende "
+"voorbeeld zal dus in de context van een Engelse lokalisatie resulteren in de "
+"volgorde \"en, de\" en in een Duitse lokalisatie in \"de, en\". Merk op dat "
+"\"fr\" wel gedownload wordt, maar niet gebruikt tenzij APT in de context van "
+"een Franse lokalisatie gebruikt wordt (in dat geval zou de volgorde \"fr, "
+"de, en\" zijn). <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+"Noot: om te voorkomen dat er problemen zouden ontstaan door het feit dat APT "
+"uitgevoerd wordt in verschillende omgevingen (bijvoorbeeld door "
+"verschillende gebruikers of door andere programma's) zullen alle Translation-"
+"bestanden die te vinden zijn in <filename>/var/lib/apt/lists/</filename> "
+"toegevoegd worden aan het eind van de lijst (na een impliciet "
+"\"<literal>none</literal>\")."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr ""
+"Afdwingen dat enkel het IPv4-protocol gebruikt wordt bij het downloaden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr ""
+"Afdwingen dat enkel het IPv6-protocol gebruikt wordt bij het downloaden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+"De maximale bestandsgrootte van de bestanden Release/Release.gpg/InRelease. "
+"Standaard is dat 10MB."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+"Deze optie regelt of apt de DNS SRV server record zoals dat in RFC 2782 "
+"gespecificeerd wordt, zal gebruiken om een alternatieve server te selecteren "
+"om mee te verbinden. Standaard is dit \"true\" (aangezet)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+"Aan update-operaties de toestemming geven om data-bestanden op te halen van "
+"pakketbronnen zonder afdoende beveiligingsinformatie. De standaardwaarde is "
+"\"<literal>false</literal>\". Concept, implicaties en alternatieven worden "
+"uiteengezet in &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Aan update-operaties de toestemming geven om data-bestanden op te halen van "
+"pakketbronnen die beveiligingsinformatie leveren, maar waarvan de "
+"cryptografie niet langer als voldoende krachtig beschouwd wordt. De "
+"standaardwaarde is \"<literal>false</literal>\". Concept, implicaties en "
+"alternatieven worden uiteengezet in &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Toelaten dat een pakketbron die voorheen een gpg-ondertekening had, tijdens "
+"een update-bewerking niet langer ondertekend is. Als een pakketbron die "
+"vroeger betrouwbaar was, geen geldige ondertekening meer heeft, zal apt de "
+"update-bewerking weigeren uit te voeren. Deze optie kan gebruikt worden om "
+"die beveiliging op te heffen. Bijna zeker zult u deze optie nooit willen "
+"activeren. Standaard is ze ingesteld op <literal>false</literal>. Concept, "
+"implicaties en alternatieven worden uiteengezet in &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr "bereik"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+"Het ophalen van changelogs (bestanden met de registratie van aangebrachte "
+"wijzigingen) kan enkel gebeuren als er een URI gekend is waar ze opgehaald "
+"kunnen worden. Bij voorkeur vermeldt het bestand Release dit in het veld "
+"'Changelogs'. Indien er geen dergelijk veld is, wordt het veld Label/Origin "
+"van het Release-bestand gebruikt om na te gaan of er een optie "
+"<literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</replaceable></"
+"literal> of <literal>Acquire::Changelogs::URI::Origin::<replaceable>ORIGINE</"
+"replaceable></literal> bestaat en als dat het geval is, wordt die waarde "
+"gebruikt. De waarde in het Release-bestand kan vervangen worden door "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> of <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGINE</replaceable></literal>. De waarde ervan zou "
+"een normale URI naar een tekstbestand moeten zijn, behalve dat de "
+"pakketspecifieke gegevens vervangen worden door de plaatshouder "
+"<literal>@CHANGEPATH@</literal>. De waarde daarvan is: 1. als het pakket uit "
+"een onderdeel afkomstig is (bijv. <literal>main</literal>), vormt dit het "
+"eerste deel, anders wordt het weggelaten, 2. de eerste letter van de "
+"pakketnaam van het bronpakket, behalve als de naam van het bronpakket begint "
+"met '<literal>lib</literal>'. In dat laatste geval zullen het de eerste vier "
+"letters zijn. 3. De volledige naam van het bronpakket. 4. nogmaals de "
+"volledige naam en 5. de versie van de broncode. Het eerste (in voorkomend "
+"geval), tweede, derde en vierde deel worden gescheiden door een slash "
+"('<literal>/</literal>') en tussen het het vierde en het vijfde deel staat "
+"een laag liggend streepje ('<literal>_</literal>'). De speciale waarde "
+"'<literal>no</literal>' kan gebruikt worden voor deze optie om aan te geven "
+"dat deze bron niet gebruikt kan worden om er changelog-bestanden op te "
+"halen. In dat geval zal een andere bron geprobeerd worden als die er is."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr "Programmaspecifieke configuratie"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+"In het bijzonder omwille van de introductie van het binaire programma "
+"<command>apt</command>, kan het zinvol zijn om bepaalde opties enkel voor "
+"een specifiek programma in te stellen. Want zelfs opties die eruit zien "
+"alsof ze enkel betrekking hebben op een bepaald programma, zoals "
+"<option>APT::Get::Show-Versions</option>, hebben zowel uitwerking op "
+"<command>apt-get</command> als op <command>apt</command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+"Een optie enkel instellen voor een specifiek programma kan gerealiseerd "
+"worden door die optie in te stellen binnen het bereik <option>Binary::"
+"<replaceable>specifiek-programma</replaceable></option>. De optie "
+"<option>APT::Get::Show-Versions</option> enkel voor <command>apt</command> "
+"instellen, kan bijvoorbeeld gebeuren door in plaats daarvan <option>Binary::"
+"apt::APT::Get::Show-Versions</option> in te stellen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+"Merk op dat, zoals we hogerop in het onderdeel BESCHRIJVING zagen, u geen "
+"programmaspecifieke opties kunt instellen aan de commandoregel zelf en ook "
+"niet in configuratiebestanden die via de commandoregel ingelezen worden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr "Mappen"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+"De sectie <literal>Dir::State</literal> bevat mappen die de lokale "
+"statusinformatie aanbelangen. <literal>lists</literal> is de map waarin de "
+"opgehaalde pakketlijsten geplaatst moeten worden en <literal>status</"
+"literal> is de naam van het statusbestand van &dpkg;. <literal>preferences</"
+"literal> is de naam van het <filename>preferences</filename>-bestand van "
+"APT. <literal>Dir::State</literal> bevat de standaardmap die als prefix "
+"gebruikt moet worden bij alle subitems die niet beginnen met <filename>/</"
+"filename> of <filename>./</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+"<literal>Dir::Cache</literal> bevat locaties die de lokale cache-informatie "
+"aanbelangen, zoals de twee pakketcaches <literal>srcpkgcache</literal> en "
+"<literal>pkgcache</literal>, alsook de plaats waarin opgehaalde archieven "
+"geplaatst worden, <literal>Dir::Cache::archives</literal>. Het aanmaken van "
+"caches kan uitgezet worden door <literal>pkgcache</literal> of "
+"<literal>srcpkgcache</literal> in te stellen op <literal>\"\"</literal>. Dit "
+"zal het opstarten vertragen, maar schijfruimte besparen. Het valt wellicht "
+"te verkiezen de pkgcache uit te zetten eerder dan de srcpkgcache. Net zoals "
+"dit het geval is bij <literal>Dir::State</literal> ligt de standaardmap "
+"vervat in <literal>Dir::Cache</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+"<literal>Dir::Etc</literal> bevat de locatie van configuratiebestanden. "
+"<literal>sourcelist</literal> geeft de locatie aan van de lijst met "
+"pakketbronnen en <literal>main</literal> is het standaard "
+"configuratiebestand (een instelling die geen uitwerking heeft, tenzij ze "
+"staat in het configuratiebestand dat door <envar>APT_CONFIG</envar>) "
+"gespecificeerd wordt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+"De instelling <literal>Dir::Parts</literal> leest in lexicale volgorde alle "
+"configuratiefragmenten uit de opgegeven map in. Nadien wordt het "
+"hoofdconfiguratiebestand geladen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+"Naar binaire programma's wordt verwezen door <literal>Dir::Bin</literal>. "
+"<literal>Dir::Bin::Methods</literal> geeft de locatie op van de "
+"methodeverwerkers en <literal>gzip</literal>, <literal>bzip2</literal>, "
+"<literal>lzma</literal>, <literal>dpkg</literal>, <literal>apt-get</literal> "
+"<literal>dpkg-source</literal> <literal>dpkg-buildpackage</literal> and "
+"<literal>apt-cache</literal> geven de locatie van de respectieve programma's "
+"op."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+"Het configuratie-item <literal>RootDir</literal> heeft een speciale "
+"betekenis. Als het ingesteld werd, zullen alle paden relatief zijn ten "
+"opzichte van <literal>RootDir</literal>, <emphasis>zelfs paden die absoluut "
+"gespecificeerd werden</emphasis>. Dus als bijvoorbeeld <literal>RootDir</"
+"literal> ingesteld staat op <filename>/tmp/staging</filename> en "
+"<literal>Dir::State::status</literal> op <filename>/var/lib/dpkg/status</"
+"filename>, dan zal naar het statusbestand gezocht worden in <filename>/tmp/"
+"staging/var/lib/dpkg/status</filename>. Indien u enkel een voorvoegsel voor "
+"relatieve paden wilt instellen, gebruikt u eerder <literal>Dir</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+"De lijst <literal>Ignore-Files-Silently</literal> kan gebruikt worden om op "
+"te geven welke bestanden APT stilzwijgend moet negeren bij het verwerken van "
+"de fragmenten uit de mappen die fragmenten bevatten. Standaard worden "
+"bestanden die eindigen op <literal>.disabled</literal>, <literal>~</"
+"literal>, <literal>.bak</literal> of <literal>.dpkg-[a-z]+</literal> "
+"stilzwijgend genegeerd. Zoals bij de laatste standaardwaarde vastgesteld kan "
+"worden, kunnen deze patronen gebruik maken van de syntaxis voor reguliere "
+"expressies."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr "APT in DSelect"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+"Als APT gebruikt wordt als een methode van &dselect; sturen verschillende "
+"configuratierichtlijnen het standaardgedrag aan. Deze zijn te vinden in de "
+"sectie <literal>DSelect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+"Modus voor het opschonen van de cache; deze kan een van de volgende waarden "
+"zijn: <literal>always</literal>, <literal>prompt</literal>, <literal>auto</"
+"literal>, <literal>pre-auto</literal> en <literal>never</literal>. "
+"<literal>always</literal> en <literal>prompt</literal> verwijderen na het "
+"opwaarderen alle pakketten uit de cache, <literal>prompt</literal> (de "
+"standaardwaarde) doet dit voorwaardelijk. <literal>auto</literal> "
+"verwijdert enkel die pakketten die niet langer gedownload kunnen worden "
+"(bijvoorbeeld omdat ze door een nieuwe versie vervangen zijn). <literal>pre-"
+"auto</literal> voert deze actie uit vooraleer nieuwe pakketten gedownload "
+"worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+"De inhoud van deze variabele wordt in de vorm van commandoregelopties "
+"doorgegeven aan &apt-get; als dit commando in de installatiefase uitgevoerd "
+"wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+"De inhoud van deze variabele wordt in de vorm van commandoregelopties "
+"doorgegeven aan &apt-get; als dit commando in de fase van bijwerken "
+"uitgevoerd wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+"Indien ingesteld op true (waar) zal de operatie [U]pdate in &dselect; altijd "
+"om bevestiging vragen vooraleer voort te gaan. De standaardinstelling is om "
+"enkel in geval van een fout om invoer te vragen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr "Hoe APT &dpkg; aanroept"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+"Verschillende configuratierichtlijnen regelen de manier waarop APT &dpkg; "
+"aanroept. Deze zijn te vinden in de sectie <literal>DPkg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+"Dit is een lijst van aan &dpkg; door te geven opties. De lijstnotatie moet "
+"gebruikt worden om de opties op te geven en elk lijstitem wordt als een "
+"apart argument aan &dpkg; doorgegeven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+"Dit is een tekenreeks die de omgevingsvariabele <envar>PATH</envar> "
+"definieert wanneer dpkg uitgevoerd wordt. Deze kan op elke geldige waarde "
+"van die omgevingsvariabele ingesteld worden, of op een lege tekenreeks en in "
+"dat geval wordt de variabele niet veranderd."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+"Dit is een lijst van shell-opdrachten die voor/na het aanroepen van &dpkg; "
+"uitgevoerd moeten worden. Zoals dit het geval is bij <literal>options</"
+"literal> moet de lijstnotatie gebruikt worden. De commando's worden in "
+"volgorde gestart met behulp van <filename>/bin/sh</filename>. Indien er een "
+"mislukt, dan breekt APT af."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+"Dit is een lijst van shell-opdrachten die voor het aanroepen van &dpkg; "
+"uitgevoerd moeten worden. Zoals dit het geval is bij <literal>options</"
+"literal> moet de lijstnotatie gebruikt worden. De commando's worden in "
+"volgorde gestart met behulp van <filename>/bin/sh</filename>. Indien er een "
+"mislukt, dan breekt APT af. APT zal de bestandsnaam van elk .deb-bestand dat "
+"het gaat installeren doorgeven aan de commando's. Dit gebeurt met een naam "
+"per regel op de gevraagde bestandsindicator, die standaard ingesteld staat "
+"op standaardinvoer."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+"Versie 2 van dit protocol stuurt meer informatie naar de gevraagde "
+"bestandsindicator: een regel met de tekst <literal>VERSION 2</literal>, de "
+"configuratieruimte voor APT en een lijst van pakketacties met informatie "
+"over bestandsnaam en versie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+"Elke regel met een configuratierichtlijn heeft de vorm <literal>key=value</"
+"literal> (sleutel=waarde). Bijzondere tekens (gelijkheidstekens, "
+"regeleinden, niet-afdrukbare tekens, aanhalingstekens en percenttekens in "
+"<literal>key</literal> en regeleinden, niet-afdrukbare tekens en "
+"percenttekens in <literal>value</literal>) worden met % gecodeerd. Lijsten "
+"worden voorgesteld door meerdere <literal>key::=value</literal> (sleutel::"
+"=waarde) regels met eenzelfde sleutel. De configuratiesectie eindigt met een "
+"lege regel."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+"In Versie 2 bestaan regels in verband met een pakketactie uit vijf velden: "
+"pakketnaam (zonder architectuuropgave, zelfs indien niet-systeemeigen), oude "
+"versie, richting van de versiewijziging (&lt; voor opwaarderingen, &gt; voor "
+"degradaties, = voor geen wijziging), nieuwe versie, actie. De versievelden "
+"zijn \"-\" voor helemaal geen versie (bijvoorbeeld wanneer een pakket voor "
+"het eerst geïnstalleerd wordt; geen versie wordt behandeld als ouder dan "
+"gelijk welke echte versie, waardoor het een opwaardering betreft, aangeduid "
+"als <literal>- &lt; 1.23.4</literal>). Het actieveld is \"**CONFIGURE**\" "
+"als het pakket geconfigureerd gaat worden, \"**REMOVE**\" als het verwijderd "
+"gaat worden of de bestandsnaam van een .deb-bestand als het uitgepakt gaat "
+"worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+"In Versie 3 volgt na elk versieveld de architectuur van die versie, hetgeen "
+"\"-\" is voor geen versie, en een veld met de aanduiding van het MultiArch-"
+"type (multiarchitectuurtype) \"same\" (zelfde), \"foreign\" (niet-"
+"systeemeigen), \"allowed\" (toegestaan) of \"none\" (geen). Merk op dat "
+"\"none\" een incorrecte typenaam is die om redenen van compatibiliteit "
+"behouden werd. Het moet als \"no\" geïnteerpreteerd worden en gebruikers "
+"worden aangemoedigd om beide te ondersteunen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+"De protocolversie die voor het commando <literal><replaceable>cmd</"
+"replaceable></literal> gebruikt moet worden, kan gekozen worden door "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> dienovereenkomstig in te stellen. Standaard is dit versie 1. Indien "
+"APT de gevraagde versie niet ondersteunt, zal het in de plaats daarvan de "
+"informatie weergeven volgens het protocol van de hoogste ondersteunde versie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+"De bestandsindicator die gebruikt moet worden om de informatie door te "
+"sturen kan aangevraagd worden met <literal>DPkg::Tools::options::"
+"<replaceable>cmd</replaceable>::InfoFD</literal>. Dit staat standaard op "
+"<literal>0</literal> ingesteld, wat staat voor de standaardinvoer. Deze "
+"functionaliteit is beschikbaar sinds versie 0.9.11. Men kan nagaan of deze "
+"optie ondersteund wordt door te kijken naar de omgevingsvariabele "
+"<envar>APT_HOOK_INFO_FD</envar> die ter confirmatie het cijfer bevat dat "
+"staat voor de gebruikte bestandsindicator."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+"APT gaat naar deze map vooraleer &dpkg; aan te roepen. Standaard is dit "
+"<filename>/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+"Deze opties worden doorgegeven aan &dpkg-buildpackage; bij het compileren "
+"van pakketten. Het standaardgedrag is om ondertekening uit te zetten en alle "
+"binaire bestanden te produceren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+"Indien deze optie ingesteld staat zal APT <command>dpkg --configure --"
+"pending</command> aanroepen om &dpkg; alle nodige configuraties en triggers "
+"te laten afhandelen. Standaard staat deze optie automatisch aan. Maar ze "
+"uitzetten kan nuttig zijn indien u APT meerdere keren op rij wenst uit te "
+"voeren - bijvoorbeeld in een installatieprogramma. In een dergelijk scenario "
+"kunt u deze optie uitschakelen voor alle keren dat APT uitgevoerd wordt, "
+"behalve voor de laatste keer."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr "De opties Periodic en Archives"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+"De optiegroepen <literal>APT::Periodic</literal> en <literal>APT::Archives</"
+"literal> configureren het gedrag van de periodieke bijwerkingen die door apt "
+"uitgevoerd worden en die door het script <literal>/usr/lib/apt/apt.systemd."
+"daily</literal> uitgelokt worden. Raadpleeg het begin van dit script voor "
+"een beknopte documentatie over deze opties."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr "Debugopties"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+"Als opties in de sectie <literal>Debug::</literal> geactiveerd worden, heeft "
+"dit tot gevolg dat er met behulp van de bibliotheken van <literal>apt</"
+"literal> debug-informatie gestuurd wordt naar de standaardstroom voor "
+"foutmeldingen van het programma in kwestie, of dat bijzondere modi van dat "
+"programma aangezet worden die vooral nuttig zijn om het gedrag van apt te "
+"debuggen. De meeste van deze opties zijn niet interessant voor een gewone "
+"gebruiker. Slechts enkele kunnen dat wel zijn:"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+"<literal>Debug::pkgProblemResolver</literal> levert uitvoer op over de "
+"beslissingen die genomen werden door <literal>dist-upgrade, upgrade, "
+"install, remove, purge</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+"<literal>Debug::NoLocking</literal> schakelt elke vorm van "
+"bestandsvergrendeling uit. Dit kan bruikbaar zijn voor het uitvoeren van "
+"sommige operaties (bijvoorbeeld <literal>apt-get -s install</literal>) als "
+"niet-systeembeheerder."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+"<literal>Debug::pkgDPkgPM</literal> geeft de werkelijke commandoregel weer "
+"telkens <literal>apt</literal> &dpkg; aanroept."
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> schakelt het opnemen van statfs-"
+"gegevens in de ID's van CD's uit."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr "Hieronder volgt een volledige lijst van de debug-opties van apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+"Weergeven van informatie in verband met het benaderen van pakketbronnen van "
+"het type <literal>cdrom://</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+"Weergeven van informatie in verband met het downloaden van pakketten met "
+"behulp van FTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+"Weergeven van informatie in verband met het downloaden van pakketten met "
+"behulp van HTTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+"Weergeven van informatie in verband met het downloaden van pakketten met "
+"behulp van HTTPS."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+"Weergeven van informatie in verband met het verifiëren van cryptografische "
+"handtekeningen met behulp van <literal>gpg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+"Informatie tonen over het proces van benaderen van verzamelingen pakketten "
+"op CD's."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+"Beschrijft het proces van het oplossen van bouwvereisten door &apt-get;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+"Iedere cryptografische frommel weergeven die door de bibliotheken van "
+"<literal>apt</literal> aangemaakt wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+"Bij het aanmaken van een ID voor een CD geen informatie toevoegen die "
+"afkomstig is van <literal>statfs</literal>, namelijk het aantal gebruikte en "
+"vrije blokken op het bestandssysteem van de CD."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+"Elke vorm van bestandsvergrendeling uitzetten. Dit maakt het bijvoorbeeld "
+"mogelijk om gelijktijdig twee processen van het type <quote><literal>apt-get "
+"update</literal></quote> uit te voeren."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+"In een logbestand opschrijven wanneer items toegevoegd worden aan of "
+"verwijderd uit de algemene download-wachtrij."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+"Statusberichten en fouten weergeven die verband houden met het controleren "
+"van de controlesom en de cryptografische handtekening van gedownloade "
+"bestanden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+"Informatie weergeven over het downloaden en verwerken van de diff's "
+"(bestanden die de aangebrachte wijzigingen bijhouden) voor de "
+"pakketindexbestanden en over fouten die daarmee verband houden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+"Informatie weergeven in verband met het patchen van de pakketlijsten van apt "
+"wanneer niet de volledige indexbestanden maar enkel de diff's (aangebrachte "
+"wijzigingen) gedownload worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+"Alle interacties met de sub-processen die het downloaden werkelijk "
+"uitvoeren, neerschrijven in een logbestand."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+"Gebeurtenissen in een logbestand opschrijven die verband houden met de "
+"status van pakketten die automatisch geïnstalleerd werden en met het "
+"verwijderen van niet-gebruikte pakketten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+"Debug-berichten genereren waarin beschreven wordt welke pakketten "
+"automatisch geïnstalleerd worden om aan vereisten te voldoen. Dit komt "
+"overeen met de initiële doorloop van het type auto-install die bijvoorbeeld "
+"door <literal>apt-get install</literal> uitgevoerd wordt. Het komt niet "
+"overeen met het volledige systeem van apt voor het oplossen van "
+"vereistenproblemen. Raadpleeg in dat verband <literal>Debug::"
+"pkgProblemResolver</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+"Debug-berichten genereren waarin beschreven wordt welke pakketten een "
+"markering krijgen van het type keep/install/remove (vasthouden/installeren/"
+"verwijderen) terwijl de ProblemResolver (probleemoplosser) zijn werk "
+"verricht. Elke toevoeging of verwijdering kan bijkomende acties uitlokken en "
+"die worden onder het originele item weergegeven met een insprong van twee "
+"extra spaties. Het formaat van elke regel is <literal>MarkKeep</literal>, "
+"<literal>MarkDelete</literal> of <literal>MarkInstall</literal> gevolgd door "
+"<literal>pakketnaam &lt;a.b.c -&gt; d.e.f | x.y.z&gt; (sectie)</literal>, "
+"waarbij <literal>a.b.c</literal> de huidige versie van het pakket is, "
+"<literal>d.e.f</literal> de versie is waarvan de installatie overwogen wordt "
+"en <literal>x.y.z</literal> een recentere versie wiens installatie (omwille "
+"van een lagere pin-score) echter niet overwogen wordt. Die beide laatste "
+"kunnen weggelaten worden als ze niet bestaan of als ze dezelfde versie "
+"hebben als de geïnstalleerde versie. <literal>section</literal> is de naam "
+"van de sectie waarin het pakket zich bevindt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+"Als &dpkg; aangeroepen wordt, weergeven wat de exacte commandoregel is "
+"waarmee het aangeroepen wordt, waarbij de argumenten door een enkele spatie "
+"van elkaar gescheiden worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+"Alle gegevens die van &dpkg; verkregen worden over de "
+"statusbestandsindicator en alle fouten die zich voordoen bij het ontleden "
+"ervan weergeven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+"Een opvolging doen van het algoritme dat beslist over de volgorde waarin "
+"<literal>apt</literal> pakketten zou moeten doorgeven aan &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+"Statusberichten tonen bij het volgen van de stappen die bij het aanroepen "
+"van &dpkg; gezet worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr "De prioriteit weergeven van elke pakketlijst bij het opstarten."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+"Het uitvoeren van het oplossen van vereistenproblemen volgen (dit is enkel "
+"van toepassing op wat gebeurt als zich een complex vereistenprobleem "
+"voordoet)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+"Een lijst weergeven van alle geïnstalleerde pakketten met hun berekende "
+"scores zoals die door de pkgProblemResolver gebruikt worden. De "
+"pakketbeschrijving is identiek aan wat in <literal>Debug::pkgDepCache::"
+"Marker</literal> beschreven werd."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+"Informatie weergeven over de leveranciers die in <filename>/etc/apt/vendors."
+"list</filename> vermeld worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+"De externe commando's tonen die aangeroepen worden door apt-uitbreidingen. "
+"Dit houdt bijvoorbeeld de configuratieopties <literal>DPkg::{Pre,Post}-"
+"Invoke</literal> of <literal>APT::Update::{Pre,Post}-Invoke</literal> in."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Voorbeelden"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+"&configureindex; is een configuratiebestand dat voorbeeldwaarden toont voor "
+"alle mogelijke opties."
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "Bestand om de voorkeursinstellingen voor APT te beheren"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"Het bestand met de voorkeursinstellingen voor APT, <filename>/etc/apt/"
+"preferences</filename>, en de bestandsfragmenten uit de map <filename>/etc/"
+"apt/preferences.d/</filename> kunnen gebruikt worden om in te stellen welke "
+"versie van een pakket voor installatie geselecteerd zal worden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Indien het bestand &sources-list; verwijzingen bevat naar meer dan een "
+"uitgave (bijvoorbeeld <literal>stable</literal> en <literal>testing</"
+"literal>), dan kunnen meerdere versies van eenzelfde pakket beschikbaar zijn "
+"voor installatie. APT kent aan elke beschikbare versie een prioriteit toe. "
+"Rekening houdend met eventuele beperkingen ten gevolge van vereisten, zal "
+"<command>apt-get</command> de versie met de grootste prioriteit uitkiezen "
+"voor installatie. De voorkeursinstellingen voor APT overschrijven de "
+"prioriteiten die APT standaard aan pakketversies toekent, waardoor de "
+"gebruiker controle verwerft over welk pakket voor installatie uitgekozen "
+"wordt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Meerdere exemplaren van eenzelfde versie kunnen beschikbaar zijn indien het "
+"bestand &sources-list; verwijzingen bevat naar meer dan een pakketbron. In "
+"dat geval zal <command>apt-get</command> het exemplaar downloaden dat eerst "
+"vermeld wordt in het bestand &sources-list; De APT-voorkeuren hebben geen "
+"invloed op de keuze van het exemplaar, enkel op de versiekeuze."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"Voorkeuren leggen veel macht in de handen van een systeembeheerder, maar ze "
+"kunnen ook tot zijn grootste nachtmerrie uitgroeien als er niet zorgvuldig "
+"mee omgesprongen wordt! APT zal de voorkeuren niet in vraag stellen. "
+"Daardoor kunnen foute instellingen leiden tot niet-installeerbare pakketten "
+"of tot het nemen van foute beslissingen bij het opwaarderen van pakketten. "
+"Nog meer problemen kunnen ontstaan als verschillende uitgaven door elkaar "
+"gebruikt worden zonder een goed begrip van de volgende paragrafen. Pakketten "
+"uit een specifieke uitgave worden niet uitgetest voor (en werken daarom niet "
+"altijd als verwacht in) eerdere of latere uitgaves of samen met andere "
+"pakketten uit verschillende uitgaves. U bent gewaarschuwd."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"Noteer dat de bestanden uit de map <filename>/etc/apt/preferences.d</"
+"filename> in oplopende alfanumerieke volgorde ontleed worden en dat hun naam "
+"aan de volgende conventie moet beantwoorden: de bestanden hebben ofwel geen "
+"bestandsnaamextensie ofwel is dat \"<literal>pref</literal>\" en ze bevatten "
+"enkel alfanumerieke tekens, koppeltekens (-), lage streepjes (_) en punten "
+"(.). In het andere geval zal APT melding maken van het feit dat het een "
+"bestand overgeslagen heeft, tenzij dat bestand overeenkomt met een patroon "
+"uit de configuratielijst <literal>Dir::Ignore-Files-Silently</literal>. In "
+"dat laatste geval zal het stilzwijgend overgeslagen worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "Door APT standaard toegekende prioriteiten"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>een-bepaald-pakket</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"Indien het bestand preferences niet bestaat of indien het geen item bevat "
+"dat op een specifieke versie betrekking heeft, dan wordt aan die versie de "
+"prioriteit toegekend van de uitgave waartoe die versie behoort. Men kan een "
+"bepaalde uitgave uitkiezen als \"the target release\" (de doelrelease), die "
+"dan een hogere prioriteit krijgt dan standaard aan andere uitgaven gegeven "
+"wordt. De doelrelease kan aan de commandoregel van <command>apt-get</"
+"command> ingesteld worden of in <filename>/etc/apt/apt.conf</filename>, het "
+"configuratiebestand van APT. Merk op dat deze instelling voorrang heeft op "
+"gelijk welke algemene prioriteitsinstelling die u vastlegt in het bestand "
+"<filename>/etc/apt/preferences</filename> waarover we het later hebben, maar "
+"geen voorrang op specifieke gepinde pakketten. Bijvoorbeeld <placeholder "
+"type=\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id="
+"\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Indien de doelrelease opgegeven werd, dan gebruikt APT het volgende "
+"algoritme om de prioriteiten van de versies van een pakket te bepalen. Het "
+"toekennen van:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "prioriteit 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"aan de versies die afkomstig zijn uit archieven die volgens hun "
+"<filename>Release</filename>-bestanden gemarkeerd staan als \"NotAutomatic: "
+"yes\" maar <emphasis>niet</emphasis> als \"ButAutomaticUpgrades: yes\", "
+"zoals bijvoorbeeld het Debian-archief <literal>experimental</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "prioriteit 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"aan de reeds geïnstalleerde versie (als er een is) en aan de versies die "
+"afkomstig zijn van archieven die volgens hun <filename>Release</filename>-"
+"bestanden gemarkeerd staan als \"NotAutomatic: yes\" en "
+"\"ButAutomaticUpgrades: yes\", zoals bijvoorbeeld het Debian-archief "
+"backports sinds <literal>squeeze-backports</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "prioriteit 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that do not belong to the target release."
+msgstr "aan de versies die niet behoren tot de doelrelease."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "prioriteit 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that belong to the target release."
+msgstr "aan de versies die behoren tot de doelrelease."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+"De hoogste van deze prioriteiten waarvan de beschrijving overeenkomt met de "
+"versie wordt aan die versie toegekend."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Indien er geen doelrelease opgegeven werd, dan kent APT gewoonweg prioriteit "
+"100 toe aan alle geïnstalleerde pakketversies en prioriteit 500 aan alle "
+"niet-geïnstalleerde pakketversies, behalve aan versies die afkomstig zijn "
+"uit archieven die volgens hun <filename>Release</filename>-bestanden "
+"gemarkeerd staan als \"NotAutomatic: yes\" - deze versies krijgen de "
+"prioriteit 1 of de prioriteit 100 als ze bovendien ook gemarkeerd staan als "
+"\"ButAutomaticUpgrades: yes\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"Om uit te maken welke versie van een pakket geïnstalleerd moet worden, past "
+"APT dan de volgende regels toe, vermeld in volgorde van prioriteit."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Nooit een degradatie uitvoeren tenzij de prioriteit van een beschikbaar "
+"pakket groter is dan 1000. (\"Degraderen\" (downgrading) betekent het "
+"installeren van een minder recente versie van een pakket ter vervanging van "
+"een recentere versie. Noteer dat geen enkele van de standaardprioriteiten "
+"die APT gebruikt, groter dan 1000 is. Dergelijke hoge prioriteiten kunnen "
+"enkel in het bestand preferences ingesteld worden. Merk ook op dat het "
+"degraderen van een pakket riskant kan zijn.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "De versie met de hoogste prioriteit installeren."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Indien twee of meer versies eenzelfde prioriteit hebben, het meest recente "
+"installeren (dat is die met het hoogste versienummer)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"De niet-geïnstalleerde versie installeren indien twee of meer versies "
+"eenzelfde prioriteit en hetzelfde versienummer hebben maar er op het gebied "
+"van de metadata toch een onderling verschil is, of indien de optie "
+"<literal>--reinstall</literal> gebruikt werd."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"In een gewone situatie is de geïnstalleerde versie van een pakket "
+"(prioriteit 100) minder recent dan een van de versies die beschikbaar is in "
+"een pakketbron die in het bestand &sources-list; vermeld wordt (prioriteit "
+"500 of 990). In dat geval zal het pakket opgewaardeerd worden als de "
+"opdracht <command>apt-get install <replaceable>een-bepaald-pakket</"
+"replaceable></command> of <command>apt-get upgrade</command> uitgevoerd "
+"wordt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Een minder vaak voorkomende situatie is die waarbij de geïnstalleerde versie "
+"van een pakket <emphasis>recenter</emphasis> is dan welke andere beschikbare "
+"versie ook. Bij het uitvoeren van de opdracht apt-get install "
+"<command><replaceable>een-bepaald-pakket</replaceable></command> of "
+"<command>apt-get upgrade</command> zal het pakket dan niet gedegradeerd "
+"worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"Soms is de geïnstalleerde versie van een pakket recenter dan de versie van "
+"de doelrelease, maar niet zo recent als een versie van een andere "
+"distributie. Zo een pakket zal wel degelijk opgewaardeerd worden als "
+"<command>apt-get install <replaceable>een-bepaald-pakket</replaceable></"
+"command> of <command>apt-get upgrade</command> uitgevoerd wordt, omdat "
+"minstens <emphasis>een</emphasis> van de beschikbare versies een hogere "
+"prioriteit heeft dan de geïnstalleerde versie."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "Het effect van de voorkeursinstellingen voor APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"Het APT-bestand preferences laat de systeembeheerder toe het toekennen van "
+"prioriteiten te regelen. Het bestand bestaat uit een of meer structuren die "
+"uit meerdere regels bestaan en van elkaar gescheiden worden door lege "
+"regels. De structuren kunnen een van de twee volgende vormen aannemen: een "
+"specifieke vorm of een algemene vorm."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"De specifieke vorm kent een prioriteit (een \"Pin-Priority\") toe aan een of "
+"meer opgegeven pakketten met een specifieke versie of binnen een "
+"versiebereik. De volgende structuur geeft bijvoorbeeld een hoge prioriteit "
+"aan alle versies van het pakket <filename>perl</filename> waarvan het "
+"versienummer begint met \"<literal>&good-perl;</literal>\". Meerdere "
+"pakketten kunnen van elkaar gescheiden worden met spaties."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"De algemene vorm kent een prioriteit toe aan alle pakketversies in een "
+"bepaalde distributie (dit betekent alle versies van pakketten die vermeld "
+"worden in een bepaald <filename>Release</filename>-bestand) of aan alle "
+"pakketversies die afkomstig zijn van een bepaalde internetsite, zoals "
+"aangegeven door de unieke volledige domeinnaam (fully qualified domain name) "
+"van de site."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Zo een item in het preferences-bestand van APT dat aan de algemene vorm "
+"beantwoordt, is enkel op groepen pakketten van toepassing. De volgende "
+"structuur kent bijvoorbeeld een hoge prioriteit toe aan alle pakketversies "
+"die op de lokale site beschikbaar zijn."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"Een aanmaning tot voorzichtigheid: het gebruikte trefwoord hier is "
+"\"<literal>origin</literal>\" dat gebruikt kan worden om een computernaam te "
+"vergelijken. De volgende structuur kent een hoge prioriteit toe aan alle "
+"versies die te verkrijgen zijn op de server die met de computernaam \"ftp.de."
+"debian.org\" geïdentificeerd wordt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"Men mag dit <emphasis>niet</emphasis> verwarren met de oorsprong (Origin) "
+"van een distributie zoals die in een <filename>Release</filename>-bestand "
+"vermeld wordt. Wat in een <filename>Release</filename>-bestand op het label "
+"\"Origin:\" volgt is geen internetadres, maar een auteur of de naam van een "
+"leverancier, zoals \"Debian\" of \"Ximian\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"De volgende structuur kent een lage prioriteit toe aan alle pakketversies "
+"die behoren tot gelijk welke distributie die \"<literal>unstable</literal>\" "
+"als archiefnaam heeft."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"De volgende structuur kent een hoge prioriteit toe aan alle pakketversies "
+"die behoren tot om het even welke distributie met de codenaam "
+"\"<literal>&debian-testing-codename;</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"De volgende structuur kent een hoge prioriteit toe aan alle pakketversies "
+"die behoren tot om het even welke uitgave die \"<literal>stable</literal>\" "
+"als archiefnaam heeft en die \"<literal>&debian-stable-version;</literal>\" "
+"als releaseversienummer heeft."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+"Het effect van de kommaoperator is vergelijkbaar met een \"en\" in de "
+"logica: aan alle voorwaarden moet voldaan zijn opdat er een overeenkomst zou "
+"zijn met de pin. Er is één uitzondering: voor om het even welk type "
+"voorwaarde (zoals twee \"a\"-voorwaarden) geldt dat enkel de laatste "
+"dergelijke voorwaarde getoetst wordt."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "Reguliere expressies en &glob; syntaxis"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"APT ondersteunt bij het pinnen ook het gebruik van &glob;-expressies, en "
+"reguliere expressies die door slashes ingesloten worden. Het volgende "
+"voorbeeld geeft prioriteit 500 aan alle pakketten uit experimental waarvan "
+"de naam begint met gnome (als een &glob;-achtige expressie) of het woord kde "
+"(als een in slashes ingesloten POSIX uitgebreide reguliere expressie) bevat."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"De regel voor deze expressies is dat ze overal kunnen voorkomen waar een "
+"tekenreeks kan voorkomen. De volgende pin kent dus een prioriteit 990 toe "
+"aan alle pakketten van een uitgave die begint met &ubuntu-codename;."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"Indien een reguliere expressie voorkomt in een <literal>Package</literal>-"
+"veld, dan lokt dit hetzelfde gedrag uit als wanneer deze reguliere expressie "
+"vervangen zou worden door een lijst met alle pakketnamen die ermee "
+"overeenkomen. Het is nog niet beslist of dit in de toekomst anders zal "
+"worden. U moet dus altijd jokertekenpins eerst plaatsen, zodat latere "
+"specifieke pins die kunnen overschrijven. Het patroon \"<literal>*</literal>"
+"\" in een Package-veld wordt op zichzelf niet als een &glob;-expressie "
+"beschouwd."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "Hoe APT prioriteiten interpreteert"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"Prioriteiten (P) die in het preferences-bestand van APT toegekend worden, "
+"moeten positieve of negatieve gehele getallen zijn. Zij worden (grof "
+"geschetst) als volgt geïnterpreteerd:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"heeft de installatie van een versie tot gevolg ook al houdt dit een "
+"degradatie van het pakket in"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"heeft de installatie van een versie tot gevolg ook al is ze niet van de "
+"doelrelease afkomstig, tenzij de geïnstalleerde versie recenter is"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"heeft de installatie van een versie tot gevolg tenzij er een versie uit de "
+"doelrelease beschikbaar is of de geïnstalleerde versie recenter is"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"heeft de installatie van een versie tot gevolg tenzij er een versie uit een "
+"andere distributie beschikbaar is of de geïnstalleerde versie recenter is"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"heeft de installatie van een versie tot gevolg enkel en alleen als er geen "
+"versie van het pakket geïnstalleerd is"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0 "
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "voorkomt dat de versie geïnstalleerd wordt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr "P = 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr "heeft ongedefinieerd gedrag; niet te gebruiken."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"Het eerste record van specifieke aard dat een overeenkomst oplevert met een "
+"beschikbare pakketversie, bepaalt de prioriteit van die pakketversie. Bij "
+"gebrek daaraan wordt de prioriteit van het pakket vastgelegd op het maximum "
+"van al de prioriteiten die gedefinieerd worden door records van algemene "
+"aard waarmee die versie een overeenkomst oplevert. Records die bij middel "
+"van andere patronen dan \"*\" in het Pin-veld gedefinieerd worden, worden "
+"behandeld als records van specifieke aard."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Veronderstel bijvoorbeeld dat het APT-bestand preferences de drie structuren "
+"bevat die we eerder bespraken:"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "Dan is dit het gevolg:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"De meest recente beschikbare versie van het pakket <literal>perl</literal> "
+"zal geïnstalleerd worden, zolang het versienummer van die versie begint met "
+"\"<literal>&good-perl;</literal>\". Indien er <emphasis>een of andere</"
+"emphasis> &good-perl;* versie van <literal>perl</literal> beschikbaar is en "
+"de geïnstalleerde versie is &bad-perl;*, dan zal <literal>perl</literal> "
+"gedegradeerd worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Een versie van om het even welk ander pakket dan <literal>perl</literal> dat "
+"vanaf het lokale systeem beschikbaar is, heeft prioriteit over andere "
+"versies, zelfs versies uit de doelrelease."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"Een versie van een pakket waarvan de origine niet het lokale systeem is, "
+"maar een andere site die in &sources-list; vermeld wordt, en die tot een "
+"<literal>unstable</literal> distributie behoort, wordt enkel geïnstalleerd "
+"als het geselecteerd werd om geïnstalleerd te worden en er niet reeds een "
+"versie van het pakket geïnstalleerd is."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr "Het vaststellen van pakketversie en distributie-eigenschappen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"De locaties die in het bestand &sources-list; vermeld worden, moeten de "
+"bestanden <filename>Packages</filename> en <filename>Release</filename> "
+"aanbieden om de pakketten te beschrijven die op die locatie ter beschikking "
+"staan."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"Het bestand <filename>Packages</filename> bevindt zich normaal in de map "
+"<filename>.../dists/<replaceable>distributienaam</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>architectuur</"
+"replaceable></filename>, bijvoorbeeld <filename>.../dists/stable/main/binary-"
+"i386/Packages</filename>. Het bevat een reeks structuren, die uit meerdere "
+"regels bestaan, een per pakket dat in die map beschikbaar is. In elke "
+"structuur zijn slechts twee regels relevant voor het instellen van APT-"
+"prioriteiten:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "de regel <literal>Package:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "vermeldt de pakketnaam"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "de regel <literal>Version:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "vermeldt het versienummer van het genoemde pakket"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"Het bestand <filename>Release</filename> bevindt zich normaal in de map "
+"<filename>.../dists/<replaceable>distributienaam</replaceable></filename>, "
+"bijvoorbeeld <filename>.../dists/stable/Release</filename>, of "
+"<filename>.../dists/&debian-stable-codename;/Release</filename>. Het bevat "
+"een enkele structuur bestaande uit meerdere regels, die van toepassing is op "
+"<emphasis>alle</emphasis> pakketten uit de volledige mappenboom die zich "
+"onder diens bovenliggende map bevindt. In tegenstelling tot wat het geval is "
+"voor het bestand <filename>Packages</filename>, zijn praktisch alle regels "
+"uit een <filename>Release</filename>-bestand relevant voor het instellen van "
+"de APT-prioriteiten:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr ""
+"de regel <literal>Archive:</literal> of de regel <literal>Suite:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"benoemt het archief waartoe alle pakketten uit de mappenboom behoren. "
+"Bijvoorbeeld de regel \"Archive: stable\" of \"Suite: stable\" geeft aan dat "
+"alle pakketten uit de mappenboom die zich onder de bovenliggende map van het "
+"bestand <filename>Release</filename> bevindt, deel uitmaken van een "
+"<literal>stable</literal> archief. Om deze waarde op te geven in het APT-"
+"bestand preferences is de volgende regel nodig:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "de regel <literal>Codename:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"benoemt de codenaam waartoe alle pakketten in de mappenboom behoren. De "
+"regel \"Codename: &debian-testing-codename;\" geeft bijvoorbeeld aan dat "
+"alle pakketten uit de mappenboom die zich onder de bovenliggende map van het "
+"<filename>Release</filename>-bestand bevindt, tot een versie behoren die de "
+"naam <literal>&debian-testing-codename;</literal> draagt. Om deze waarde op "
+"te geven in het APT-bestand preferences is de volgende regel nodig:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"benoemt de releaseversie. De pakketten uit de boomstructuur zouden "
+"bijvoorbeeld kunnen komen uit de Debian releaseversie &debian-stable-"
+"version;. Merk op dat er normaal geen versienummer bestaat voor de "
+"distributies <literal>testing</literal> en <literal>unstable</literal> omdat "
+"ze nog niet uitgegeven werden. Om dit op te geven in het APT-bestand "
+"preferences is een van de volgende regels nodig."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "de regel <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"benoemt de licentiecomponent van de pakketten uit de mappenboom van het "
+"<filename>Release</filename>-bestand. De lijn \"Component: main\" "
+"bijvoorbeeld geeft aan dat alle pakketten uit de mappenboom behoren tot de "
+"component <literal>main</literal>, hetgeen inhoudt dat hun licentie in "
+"overeenstemming is met de Vrije Softwarerichtlijnen van Debian. Om deze "
+"component op te geven in het APT-bestand preferences is de volgende regel "
+"nodig:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "de regel <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"benoemt de maker van de pakketten uit de mappenboom van het "
+"<filename>Release</filename>-bestand. Meest gebruikelijk is dat "
+"<literal>Debian</literal>. Om deze oorsprong op te geven in het APT-bestand "
+"preferences is de volgende regel nodig:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "de regel <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"benoemt het etiket van de pakketten uit de mappenboom van het "
+"<filename>Release</filename>-bestand. Meest gebruikelijk is dat "
+"<literal>Debian</literal>. Om dit etiket op te geven in het APT-bestand "
+"preferences is de volgende regel nodig:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Alle <filename>Packages</filename>- en <filename>Release</filename>-"
+"bestanden die opgehaald worden van locaties die in het bestand &sources-"
+"list; vermeld staan, worden opgeslagen in de map <filename>/var/lib/apt/"
+"lists</filename> of in het bestand dat in het bestand <filename>apt.conf</"
+"filename> door de variabele <literal>Dir::State::Lists</literal> genoemd "
+"wordt. Het bestand <filename>debian.lcs.mit."
+"edu_debian_dists_unstable_contrib_binary-i386_Release</filename> bevat "
+"bijvoorbeeld het <filename>Release</filename>-bestand dat opgehaald werd van "
+"de site <literal>debian.lcs.mit.edu</literal> en dat betrekking heeft op "
+"bestanden voor de architectuur <literal>binary-i386</literal> uit de "
+"component <literal>contrib</literal> van de distributie <literal>unstable</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr ""
+"Facultatieve regels van een structuur in het bestand preferences van APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"In het APT-bestand preferences kan elke structuur facultatief beginnen met "
+"een of meer regels waarvan het eerste woord <literal>Explanation:</literal> "
+"is. Zo wordt ruimte gemaakt voor commentaar."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "De distributie Stable volgen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Installeer geen van Debian afkomstige pakketten met andere\n"
+"Explanation: versies dan die uit de distributie stable of verwijder ze anders\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Het volgende preferences-bestand van APT doet APT een hogere prioriteit dan "
+"standaard (500) toekennen aan alle pakketversies die tot een "
+"<literal>stable</literal>-distributie behoren en een buitensporig lage "
+"prioriteit aan pakketversies die tot andere <literal>Debian</literal>-"
+"distributies behoren. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>pakketnaam</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Met een passend bestand &sources-list; en het bovenstaande preferences-"
+"bestand, zal elk van de volgende commando's APT ertoe aanzetten om op te "
+"waarderen naar de nieuwste versie(s) uit <literal>stable</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>pakket</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Het volgende commando zal APT ertoe aanzetten om het opgegeven pakket op te "
+"waarderen naar de allernieuwste versie uit de distributie <literal>testing</"
+"literal>. Het pakket zal niet opnieuw opgewaardeerd worden tenzij die "
+"opdracht terug gegeven wordt. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "Testing of Unstable volgen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Het volgende preferences-bestand van APT doet APT een hoge prioriteit "
+"toekennen aan pakketversies uit de distributie <literal>testing</literal>, "
+"een lagere prioriteit aan pakketversies uit de distributie "
+"<literal>unstable</literal> en een buitensporig lage prioriteit aan "
+"pakketversies die tot andere <literal>Debian</literal>-distributies behoren. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Met een passend bestand &sources-list; en het bovenstaande preferences-"
+"bestand, zal elk van de volgende commando's APT ertoe aanzetten om op te "
+"waarderen naar de nieuwste versie(s) uit <literal>testing</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>pakket</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Het volgende commando zal APT ertoe aanzetten om het opgegeven pakket op te "
+"waarderen naar de allernieuwste versie uit de distributie <literal>unstable</"
+"literal>. Nadien zal <command>apt-get upgrade</command> het pakket "
+"opwaarderen naar de nieuwste versie uit <literal>testing</literal> als die "
+"recenter is dan de geïnstalleerde versie en anders naar de nieuwste versie "
+"uit <literal>unstable</literal> als die recenter is dan de geïnstalleerde "
+"versie. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "De evolutie van een uitgave volgen aan de hand van zijn codenaam"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Installeer geen van Debian afkomstige pakketversies behalve \n"
+"Explanation: die uit de distributie met codenaam &debian-testing-codename; of sid\n"
+"Explanation: of verwijder ze in het andere geval\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable heeft steeds de codenaam sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Het volgende preferences-bestand van APT doet APT een hogere prioriteit dan "
+"standaard (500) toekennen aan alle pakketversies die tot een distributie met "
+"de opgegeven codenaam behoren en een buitensporig lage prioriteit aan "
+"pakketversies die tot andere <literal>Debian</literal>-distributies, -"
+"codenamen en -archieven behoren. Merk op dat met deze APT-voorkeur APT de "
+"overgang van een release zal volgen vanuit het archief <literal>testing</"
+"literal> naar <literal>stable</literal> en later <literal>oldstable</"
+"literal>. Indien u bijvoorbeeld de voortgang in <literal>testing</literal> "
+"wilt volgen ongeacht de veranderende codenaam, dan moet u de hierboven "
+"gegeven configuratievoorbeelden gebruiken. <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Met een passend bestand &sources-list; en het bovenstaande preferences-"
+"bestand, zal elk van de volgende commando's APT ertoe aanzetten om op te "
+"waarderen naar de nieuwste versie(s) uit de release met de codenaam "
+"<literal>&debian-testing-codename;</literal>. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>pakket</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Het volgende commando zal APT ertoe bewegen om het opgegeven pakket op te "
+"waarderen naar de nieuwste versie uit de distributie <literal>sid</literal>. "
+"Nadien zal de opdracht <command>apt-get upgrade</command> het pakket "
+"opwaarderen naar de meest recente versie uit <literal>&debian-testing-"
+"codename;</literal> indien dat een meer recente versie is dan die welke "
+"geïnstalleerd is of anders naar de meest recente versie uit <literal>sid</"
+"literal> indien dat een meer recente versie is dan die welke geïnstalleerd "
+"is. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "Lijst met geconfigureerde gegevensbronnen van APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"De pakketbronnenlijst <filename>/etc/apt/sources.list</filename> en de "
+"bestanden die in <filename>/etc/apt/sources.list.d/</filename> te vinden "
+"zijn, werden ontwikkeld om gelijk welk aantal actieve bronnen en een "
+"variatie aan bronmedia te ondersteunen. In de bestanden wordt elke "
+"pakketbron op een aparte regel vermeld (de één-regelstijl) of ze bevatten "
+"uit meerdere regels bestaande elementen die per element een of meer "
+"pakketbronnen definiëren (de deb822 stijl), waarbij de meest wenselijke "
+"pakketbron eerst komt (voor het geval een bepaalde versie in meer dan één "
+"pakketbron te vinden is). De op deze geconfigureerde pakketbronnen "
+"beschikbare informatie wordt opgevraagd met <command>apt-get update</"
+"command> (of met een equivalent commando van een ander front-end voor APT)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"De map <filename>/etc/apt/sources.list.d</filename> biedt de mogelijkheid om "
+"items voor sources.list in afzonderlijke bestanden toe te voegen. Zoals "
+"beschreven wordt in de volgende twee secties, zijn twee verschillende "
+"bestandsindelingen toegelaten. Bestandsnamen moeten eindigen op <filename>."
+"list</filename> of <filename>.sources</filename>, afhankelijk van welke "
+"indeling ze bevatten. De bestandsnamen mogen enkel letters (a-z en A-Z), "
+"cijfers (0-9), lage streepjes (_), koppeltekens (-) en punten (.) bevatten. "
+"Is dit niet het geval, dan zal APT melden dat het een bestand overgeslagen "
+"heeft, tenzij dat bestand beantwoordt aan een patroon uit de "
+"configuratielijst <literal>Dir::Ignore-Files-Silently</literal> - in dat "
+"geval zal het stilzwijgend overgeslagen worden."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr "Indeling in één-regelstijl"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+"Bestanden met deze indeling hebben de extensie <filename>.list</filename>. "
+"Iedere regel die een pakketbron specificeert, begint met het type (bijv. "
+"<literal>deb-src</literal>), gevolgd door opties en argumenten voor dat "
+"type. Een individueel item mag niet tot op een volgende regel doorlopen. "
+"Lege regels worden overgeslagen en het teken <literal>#</literal> ergens op "
+"een regel geeft aan dat de rest van die regel commentaar bevat. Als gevolg "
+"daarvan kan een item gedeactiveerd worden door de hele regel uit te "
+"commentariëren. Indien er opties opgegeven moeten worden, worden ze van "
+"elkaar gescheiden door komma's en allemaal samen worden ze tussen rechte "
+"haakjes (<literal>[]</literal>) op de regel geplaatst na het type en daarvan "
+"gescheiden door een komma. Indien een optie meerdere waarden mag hebben, dan "
+"worden ze met een komma (<literal>,</literal>) van elkaar gescheiden. De "
+"naam van een optie wordt van zijn waarde(n) gescheiden met een "
+"gelijkheidsteken (<literal>=</literal>). Multi-waarde opties hebben ook "
+"<literal>-=</literal> en <literal>+=</literal> als scheidingstekens. In "
+"plaats van de standaardwaarde(n) te vervangen door de opgegeven waarde(n), "
+"wijzigen zij de standaardwaarde(n) door er de opgegeven waarden uit te "
+"verwijderen of eraan toe te voegen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+"Dit is de traditionele indeling die door alle versies van apt ondersteund "
+"wordt. Merk op dat niet alle opties die hieronder beschreven worden door "
+"alle versies van apt ondersteund worden. Merk ook op dat sommige oudere "
+"toepassingen die zelfstandig deze indeling ontleden wellicht geen opties "
+"zullen verwachten, aangezien die ongebruikelijk waren voor de invoering van "
+"multi-architectuurondersteuning."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr "Indeling in deb822-stijl"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+"Bestanden met deze indeling hebben de extensie <filename>.sources</"
+"filename>. Op het gebied van de syntaxis is de indeling gelijkaardig aan "
+"andere bestanden die door Debian en zijn derivaten gebruikt worden, zoals de "
+"metadatabestanden die apt ophaalt bij de geconfigureerde pakketbronnen of "
+"het bestand <filename>debian/control</filename> in een Debian "
+"broncodebestand. Individuele items worden van elkaar gescheiden door een "
+"witregel. Bijkomende witregels worden genegeerd en het teken <literal>#</"
+"literal> aan het begin van een regel markeert de volledige regel als "
+"commentaar. Een item kan dus gedeactiveerd worden door elke regel die "
+"onderdeel is van dat item, uit te commentariëren. Maar meestal is het "
+"eenvoudiger om het item te deactiveren door er het veld \"Enabled: no\" aan "
+"toe te voegen. Dat veld verwijderen of het instellen op yes, activeert het "
+"item opnieuw. Opties gebruiken dezelfde syntaxis als elk ander veld: een "
+"veldnaam gescheiden van zijn waarde(n) door een dubbele punt (<literal>:</"
+"literal>) en optionele spaties. Merk in het bijzonder op dat meerdere "
+"waarden onderling gescheiden worden door witruimte (zoals spaties, tabs en "
+"regeleindes) en niet door komma's, zoals het geval is bij de één-"
+"regelindeling. Multi-waarde velden, zoals <literal>Architectures</literal>, "
+"kennen ook <literal>Architectures-Add</literal> en <literal>Architectures-"
+"Remove</literal> om de standaardwaarde aan te passen in plaats van ze te "
+"vervangen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+"Dit is een nieuwe indeling die door apt zelf ondersteund wordt sinds versie "
+"1.1. Eerdere versies negeren dergelijke bestanden met een "
+"kennisgevingsbericht zoals eerder beschreven. Het is de bedoeling dat deze "
+"indeling gaandeweg de standaardindeling wordt en dat de eerder beschreven "
+"één-regelstijl uitgefaseerd wordt, vermits het zowel voor mensen als voor "
+"machines makkelijker is om in deze nieuwe indeling items aan te maken, uit "
+"te breiden en te wijzigen, in het bijzonder als er een heleboel "
+"pakketbronnen en/of opties in het spel zijn. Ontwikkelaars die met "
+"pakketbronnen van apt werken en/of ze ontleden worden sterk aangemoedigd om "
+"ondersteuning voor deze indeling toe te voegen en om met het APT-team "
+"contact te nemen om dit werk te coördineren en met elkaar te delen. "
+"Gebruikers kunnen nu reeds ongehinderd op deze indeling overschakelen, maar "
+"kunnen eventueel problemen ondervinden met software die deze nieuwe indeling "
+"nog niet ondersteunt."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr "De types deb en deb-src: algemene indeling"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"Het type <literal>deb</literal> verwijst naar een typisch Debian-archief met "
+"twee niveaus, <filename>distributie/component</filename>. De "
+"<literal>distributie</literal> is over het algemeen de naam van een suite "
+"zoals <literal>stable</literal> of <literal>testing</literal> of een "
+"codenaam zoals <literal>&debian-stable-codename;</literal> of "
+"<literal>&debian-testing-codename;</literal>, terwijl component een van de "
+"volgende kan zijn: <literal>main</literal>, <literal>contrib</literal> of "
+"<literal>non-free</literal>. Het type <literal>deb-src</literal> verwijst in "
+"dezelfde vorm als het type <literal>deb</literal> naar de broncode van een "
+"Debian distributie. Om bronnenindexen te kunnen ophalen is een <literal>deb-"
+"src</literal>-regel noodzakelijk."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"De indeling van twee items in de één-regelstijl met de types <literal>deb</"
+"literal> en <literal>deb-src</literal>, ziet er zo uit:"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+"deb [ optie1=waarde1 optie2=waarde2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ optie1=waarde1 optie2=waarde2 ] uri suite [component1] [component2] [...]"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" optie1: waarde1\n"
+" optie2: waarde2\n"
+" "
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+"Anderzijds ziet het equivalent van dit item in deb822-stijl er als volgt "
+"uit: <placeholder type=\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"De URI voor het type <literal>deb</literal> moet de basis vermelden van de "
+"Debian distributie waar APT de benodigde informatie kan vinden. "
+"<literal>suite</literal> kan een exact pad opgeven en in dat geval moeten de "
+"componenten weggelaten worden en moet <literal>suite</literal> eindigen op "
+"een slash (<literal>/</literal>). Dit is nuttig in een geval waarbij enkel "
+"een specifieke sub-sectie van het archief dat door de URI aangeduid wordt, "
+"van belang is. Indien <literal>suite</literal> geen exact pad opgeeft, moet "
+"minstens één <literal>component</literal> vermeld worden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>suite</literal> kan ook een variabele, <literal>$(ARCH)</literal>, "
+"bevatten, die omgezet wordt naar de Debian architectuur (zoals "
+"<literal>amd64</literal> of <literal>armel</literal>) die op het systeem in "
+"gebruik is. Dit laat toe om archtectuuronafhankelijke <filename>sources."
+"list</filename>-bestanden te gebruiken. Over het algemeen is dit enkel van "
+"belang wanneer een exact pad opgegeven wordt. Anders zal <literal>APT</"
+"literal> automatisch een URI genereren met de huidige architectuur."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"Als uit een bepaalde locatie een subset van alle beschikbare distributies of "
+"componenten gewenst wordt, kan het bij het hanteren van de één-regelstijl "
+"nodig zijn om meerdere regels voor dezelfde URI te gebruiken, aangezien er "
+"per regel slechts één distributie opgegeven kan worden. Nadat APT intern een "
+"complete set gegenereerd heeft, zal het de URI-lijst sorteren en "
+"bijvoorbeeld meerdere verwijzingen naar eenzelfde computer op het internet, "
+"samenbundelen in eenzelfde verbinding. Dit is om niet op een inefficiënte "
+"manier te werk te gaan door een FTP-verbinding tot stand te brengen, die te "
+"sluiten, iets anders te doen en vervolgens opnieuw een verbinding te moeten "
+"maken met dezelfde computer. APT zet ook parallelle verbindingen op met "
+"verschillende computers om effectiever om te gaan met sites met een geringe "
+"bandbreedte."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"Het is belangrijk om pakketbronnen in volgorde van voorkeur te vermelden met "
+"de grootste voorkeur eerst. Een typisch gebruik is een ordening volgens "
+"snelheid van snelst naar traagst (bijvoorbeeld een CD gevolgd door computers "
+"op een lokaal netwerk en tenslotte afgelegen internetcomputers)."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr "&sourceslist-list-format;"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr "&sourceslist-sources-format;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Bij wijze van voorbeeld zouden de pakketbronnen voor uw distributie er als "
+"volgt kunnen uitzien met de indeling in de één-regelstijl: <placeholder type="
+"\"literallayout\" id=\"0\"/> en als volgt met de indeling in de deb822-"
+"stijl: <placeholder type=\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr "De types deb en deb-src: opties"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+"Bij elk pakketbronitem kunnen opties opgegeven worden om aan te passen welke "
+"bron gebruikt wordt en op welke manier er gegevens van opgehaald worden. "
+"Indeling, syntaxis en namen van de opties variëren naargelang het een één-"
+"regelstijl of een deb822-stijl betreft, zoals eerder beschreven, maar met "
+"beide stijlen kunnen dezelfde opties gebruikt worden. Om het eenvoudig te "
+"houden vermelden we hier de veldnaam voor de deb822-stijl en geven we de "
+"naam voor de één-regelstijl er tussen haakjes bij. Onthoud dat u multi-"
+"waarde opties expliciet kunt vermelden, maar dat u daarnaast over de optie "
+"beschikt om ze aan te passen uitgaande van hun standaardwaarde. Maar hier "
+"geven we hun namen expliciet weer. Niet-ondersteunde opties worden door alle "
+"versies van APT geruisloos genegeerd."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<option>Architectures</option> (<option>arch</option>) is een multi-waarde "
+"optie waarmee opgegeven wordt voor welke architecturen er informatie "
+"opgehaald moet worden. Indien deze optie niet ingesteld werd, geldt als "
+"standaard alle architecturen die in de configuratieoptie <literal>APT::"
+"Architectures</literal> gedefinieerd zijn."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<option>Languages</option> (<option>lang</option>) is een multi-waarde optie "
+"waarmee opgegeven wordt voor welke talen er informatie, zoals vertaalde "
+"pakketbeschrijvingen, opgehaald moet worden. Indien deze optie niet "
+"ingesteld werd, geldt als standaard alle talen die in de configuratieoptie "
+"<literal>Acquire::Languages</literal> gedefinieerd zijn."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+"<option>Targets</option> (<option>target</option>) is een multi-waarde optie "
+"waarmee opgegeven wordt welke downloadtargets apt uit deze pakketbron zal "
+"trachten op te halen. Indien deze optie niet gespecificeerd werd, wordt de "
+"standaardset gedefinieerd door het configuratiebereik <option>Acquire::"
+"IndexTargets</option> (targets worden aan de hand van hun naam gepreciseerd "
+"in het veld <literal>Created-By</literal>). Daarenboven kunnen specifieke "
+"targets geactiveerd of gedeactiveerd worden door het veld "
+"<literal>Identifier</literal> als een optie met een booleaanse waarde te "
+"gebruiken in plaats van op deze multi-waarde optie beroep te doen."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is een yes/no (ja/nee) "
+"waarde die regelt of APT moet proberen om PDiffs op te halen om oude indexen "
+"bij te werken in plaats van de volledige nieuwe indexen te downloaden. De "
+"waarde van deze optie wordt genegeerd als de pakketbron niet aangeeft dat er "
+"PDiffs beschikbaar zijn. Standaard is dit de waarde van de optie met "
+"eenzelfde naam voor een specifiek indexbestand, zoals gedefinieerd in het "
+"bereik <option>Acquire::IndexTargets</option>, dat zelf als standaard de "
+"waarde krijgt van de configuratieoptie <option>Acquire::PDiffs</option>, die "
+"op zijn beurt standaard op <literal>yes</literal> ingesteld staat."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+"<option>By-Hash</option> (<option>by-hash</option>) kan als waarde hebben "
+"<literal>yes</literal>, <literal>no</literal> of <literal>force</literal> en "
+"regelt of APT moet proberen de indexen te bekomen via een URI die "
+"geconstrueerd wordt op basis van de hash-som van het verwachte bestand, in "
+"plaats van de welbekende stabiele bestandsnaam van het indexbestand te "
+"gebruiken. Dit gebruiken kan een discrepantie tussen hash-sommen voorkomen, "
+"maar het vereist wel een spiegelserver die dit ondersteunt. De waarde "
+"<literal>yes</literal> activeert en <literal>no</literal> deactiveert het "
+"gebruik van deze functionaliteit in het geval de pakketbron aangeeft dit te "
+"ondersteunen, terwijl <literal>force</literal> deze functionaliteit "
+"activeert, ongeacht wat de pakketbron aangeeft. Standaard is dit de waarde "
+"van de optie met eenzelfde naam voor een specifiek indexbestand, zoals "
+"gedefinieerd in het bereik <option>Acquire::IndexTargets</option>, dat zelf "
+"als standaard de waarde krijgt van de configuratieoptie <option>Acquire::By-"
+"Hash</option>, die op zijn beurt standaard op <literal>yes</literal> "
+"ingesteld staat."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+"Daarnaast zijn er opties die, als ze ingesteld worden, betrekking hebben op "
+"<emphasis>alle</emphasis> pakketbronnen met dezelfde URI en Suite, waardoor "
+"ze ingesteld moeten worden voor alle soortgelijke items en er niet "
+"gevarieerd kan worden tussen verschillende componenten. Als er zich "
+"dergelijke anomalieën manifesteren, zal APT ze proberen te ontdekken en "
+"verbeteren."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) en <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) zijn booleaanse waarden die allemaal standaard de waarde "
+"<literal>no</literal> hebben. Indien ze op <literal>yes</literal> ingesteld "
+"worden, omzeilen ze delen van &apt-secure; en daarom zouden ze niet "
+"lichtzinnig gebruikt moeten worden!"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+"<option>Trusted</option> (<option>trusted</option>) is een drie-status "
+"waarde die als standaardgedrag heeft dat APT uitmaakt of een pakketbron als "
+"betrouwbaar aanzien wordt, dan wel of er een waarschuwing getoond moet "
+"worden vooraleer bijvoorbeeld pakketten van die pakketbron geïnstalleerd "
+"worden. Deze optie kan gebruikt worden om die beslissing te omzeilen. De "
+"waarde <literal>yes</literal> zegt APT om die pakketbron steeds als "
+"betrouwbaar te beschouwen, zelfs als ze niet slaagt bij "
+"authenticatietoetsen. Ze schakelt delen van &apt-secure; uit en zou daarom "
+"enkel gebruikt mogen worden in een lokale en betrouwbare context (als men ze "
+"hoe dan ook al zou gebruiken), aangezien anders de beveiliging verbroken "
+"wordt. De waarde <literal>no</literal> doet het tegenovergestelde en zorgt "
+"ervoor dat een pakketbron behandeld wordt als onbetrouwbaar, zelfs al was ze "
+"succesvol bij de authenticatietoetsen. De standaardwaarde kan niet expliciet "
+"ingesteld worden."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+"<option>Signed-By</option> (<option>signed-by</option>) is een optie die van "
+"een pakketbron vereist dat de verificatie door &apt-secure; gebeurt aan de "
+"hand van een bepaalde set sleutels in plaats van aan de hand van alle "
+"betrouwbare sleutels die in de configuratie van apt staan. Deze optie wordt "
+"opgegeven als een lijst van absolute paden naar sleutelbosbestanden (moeten "
+"toegankelijk zijn voor en te lezen door de systeemgebruiker <literal>_apt</"
+"literal>; zorg er dus voor dat iedereen leesrechten heeft op het bestand) en "
+"naar de vingerafdrukken van uit die sleutelbossen te selecteren sleutels. "
+"Indien geen sleutelbosbestanden opgegeven werden, geldt als standaard de "
+"sleutelbos <filename>trusted.gpg</filename> en alle sleutelbossen uit de map "
+"<filename>trusted.gpg.d/</filename> (zie <command>apt-key fingerprint</"
+"command>). Indien geen vingerafdruk opgegeven werd, worden alle sleutels uit "
+"de sleutelbossen geselecteerd. Een vingerafdruk aanvaardt ook alle "
+"handtekeningen die met een subsleutel van deze sleutel gemaakt werden. "
+"Indien dit niet het gewenste gedrag is, kan aan de vingerafdruk een "
+"uitroepteken (<literal>!</literal>) toegevoegd worden waardoor dit gedrag "
+"uitgezet wordt. Standaard krijgt de optie de waarde van de optie met "
+"dezelfde naam wanneer die ingesteld staat in het vooraf uit deze pakketbron "
+"opgehaald bestand <filename>Release</filename> (door middel hiervan kunnen "
+"enkel vingerafdrukken opgegeven worden). Anders worden alle sleutels uit de "
+"betrouwbare sleutelbossen als geldige ondertekenaars van deze pakketbron "
+"aanzien."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"een yes/no (ja/nee) waarde die regelt of APT moet proberen om replay-"
+"aanvallen te ontdekken. De maker van een pakketbron kan een tijdstip bepalen "
+"tot wanneer de gegevens die door de pakketbron ter beschikking gesteld "
+"worden, als geldig beschouwd mogen worden. Als dat tijdstip aangebroken is "
+"en er geen nieuwe gegevens ter beschikking gesteld werden, zullen de "
+"gegevens als vervallen beschouwd worden en er zal een foutmelding gegeven "
+"worden. Dit verhoogt niet enkel de veiligheid, aangezien een aanvaller met "
+"kwade bedoelingen niet eeuwig oude gegevens kan blijven versturen om op die "
+"manier een gebruiker van een opwaardering af te houden, het helpt gebruikers "
+"ook om spiegelservers die niet langer bijgewerkt worden te detecteren. "
+"Sommige pakketbronnen, zoals historische archieven, worden evenwel met opzet "
+"niet langer bijgewerkt en om die reden kan deze toets uitgezet worden door "
+"deze optie op <literal>no</literal> in te stellen. Als standaard geldt de "
+"waarde van de configuratieoptie <option>Acquire::Check-Valid-Until</option>, "
+"die op haar beurt <literal>yes</literal> als standaard heeft."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) en "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) kunnen "
+"gebruikt worden om, uitgedrukt in seconden, de periode tot wanneer gegevens "
+"van deze pakketbron als geldig beschouwd mogen worden, te verlengen of te "
+"verkorten. -Max kan vooral nuttig zijn om uw eigen waarde in te stellen in "
+"het geval van een pakketbron met een Release-bestand waarin het veld Valid-"
+"Until ontbreekt, terwijl -Min gebruikt kan worden om de geldigheidsduur te "
+"verlengen van een zelden opgewaardeerde (lokale) spiegelserver van een vaker "
+"bijgewerkt, maar moeilijker toegankelijk archief (dat ook vermeld staat in "
+"sources.list). Op die manier hoeft men deze toets niet volledig uit te "
+"schakelen. Als standaard geldt de waarde van de configuratieopties "
+"<option>Acquire::Min-ValidTime</option> en <option>Acquire::Max-ValidTime</"
+"option>, die beide standaard niet ingesteld zijn."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+"<option>Check-Date</option> (<option>check-date</option>) is een waarde van "
+"het type yes/no. Ze regelt of APT de tijd op de machine als correct moet "
+"beschouwen en dus tijdgerelateerde toetsingen moet uitvoeren, zoals "
+"controleren of een Release-bestand zich niet in de toekomst situeert. Als "
+"men deze optie uitzet zet men ook de hierboven vermelde optie <option>Check-"
+"Valid-Until</option> uit."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) regelt "
+"hoe ver in de toekomst een pakketbron zich mag situeren. Is standaard "
+"ingesteld op de waarde van de configuratieoptie <option>Acquire::Max-"
+"FutureTime</option> die standaard de waarde van 10 seconden heeft."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) bepaalt "
+"het pad naar het InRelease-bestand ten opzichte van de normale positie van "
+"een <filename>InRelease</filename>-bestand. Standaard staat deze optie uit "
+"en zal APT proberen een <filename>InRelease</filename>-bestand op te halen, "
+"en indien dat niet lukt, een <filename>Release</filename>-bestand en het "
+"daaraan gekoppelde <filename>Release.gpg</filename>-bestand. Als deze optie "
+"ingesteld wordt, zal het opgegeven pad gebruikt worden in plaats van het "
+"InRelease-bestand en wordt het terugvallen op <filename>Release</filename>-"
+"bestanden uitgeschakeld."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr "URI-specificatie"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "De momenteel herkende URI-types zijn:"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr "(&apt-transport-http;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+"De methode http geeft een HTTP-server op voor een archief. Dit is de meest "
+"gebruikelijke methode. De URI zelf kan rechtstreeks login-informatie "
+"bevatten als dat door het archief vereist wordt, maar de voorkeur moet "
+"gegeven worden aan het gebruik van &apt-authconf;. De methode biedt ook "
+"ondersteuning voor SOCKS5- en HTTP(S)-proxy's, ofwel geconfigureerd via een "
+"apt-specifieke configuratie, of gespecificeerd met de omgevingsvariabele "
+"<envar>http_proxy</envar> volgens de indeling <replaceable>http://gebruiker:"
+"wachtwoord@server:poort/</replaceable> (er vanuit gaand dat het om een HTTP-"
+"proxy gaat die authenticatie vereist). De authenticatie-informatie voor "
+"proxy's kan ook verstrekt worden via &apt-authconf;."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+"Merk op dat deze authenticatiemethodes onveilig zijn, aangezien de volledige "
+"communicatie met de externe server (of de proxy) onversleuteld verloopt. "
+"Daardoor kan een voldoende onderlegde aanvaller de logingegevens bekijken en "
+"opslaan evenals de rest van de interactie. De aanvaller kan evenwel de "
+"communicatie <emphasis>niet</emphasis> beïnvloeden, vermits het "
+"databeveiligingsmodel dat toegepast wordt door APT, onafhankelijk van de "
+"gekozen transportmethode functioneert. Raadpleeg voor details &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr "(&apt-transport-https;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+"De methode https geeft een HTTPS-server op voor een archief en is inzake "
+"gebruik en beschikbare opties erg vergelijkbaar met de http-methode. Het "
+"grote verschil is dat de communicatie tussen apt en de server (of de proxy) "
+"versleuteld verloopt. Merk op dat de versleuteling niet verhindert dat een "
+"aanvaller kan te weten komen met welke server (of welke proxy) apt "
+"communiceert. En eventueel kan deze via een meer diepgaande analyse toch nog "
+"achterhalen welke gegevens gedownload werden. Indien dit een bekommernis is, "
+"kunnen de op Tor gebaseerde methodes die later behandeld worden, een "
+"adequaat alternatief vormen."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr "methode"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr "(&apt-transport-mirror;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+"De methode mirror (spiegelserver) geeft de locatie van een "
+"spiegelserverlijst aan. Standaard is de methode die voor de locatie gebruikt "
+"wordt, <literal>http</literal>, maar gelijk welke andere methode kan "
+"gebruikt worden via <command>mirror+<replaceable>methode</replaceable></"
+"command>. De spiegelserverlijst zelf kan veel verschillende URI's bevatten "
+"voor spiegelservers, welke de APT-cliënt op transparante wijze kan "
+"uitpikken, kiezen en erop terugvallen om op die manier bij te dragen tot het "
+"verdelen van de werklast over de beschikbare spiegelservers en ervoor te "
+"zorgen dat clients gegevens kunnen verkrijgen, zelfs als bepaalde "
+"geconfigureerde spiegelservers niet beschikbaar zijn."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"De methode file laat toe om gelijk welke map uit het bestandssysteem als een "
+"archief te beschouwen. Dit is nuttig voor aankoppelingen via NFS, voor "
+"lokale spiegelservers en lokale archieven."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"De methode cdrom laat APT toe om een lokaal CD-, DVD- of USB-station te "
+"gebruiken en media te wisselen. Gebruik het programma &apt-cdrom; om regels "
+"met CD-pakketbronnen aan te maken in de lijst met pakketbronnen."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+"De methode ftp geeft een FTP-server op voor een archief. Het gebruik van FTP "
+"is op de terugweg ten voordele van <literal>http</literal> en "
+"<literal>https</literal> en veel archieven hebben ofwel nooit FTP-toegang "
+"aangeboden of trekken die terug in. Indien u deze methode nog steeds nodig "
+"heeft, zijn er veel configuratieopties voor beschikbaar binnen de ruimte "
+"<literal>Acquire::ftp</literal>. Ze worden in &apt-conf; gedetailleerd."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"Noteer dat een FTP-proxy opgegeven kan worden met de omgevingsvariabele "
+"<envar>ftp_proxy</envar>. Met deze omgevingsvariabele en <emphasis>enkel</"
+"emphasis> daarmee kan ook een HTTP-proxy opgegeven worden (HTTP proxyservers "
+"kunnen vaak omgaan met FTP-URL's). Proxy's die HTTP gebruiken en in het "
+"configuratiebestand vermeld staan worden genegeerd."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"De methode copy is identiek aan de methode file behalve dat pakketten "
+"gekopieerd worden naar de cache-map in plaats van ze rechtstreeks op hun "
+"locatie te gebruiken. Dit is nuttig voor gebruikers van verwijderbare media "
+"om met behulp van APT bestanden te kopiëren."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"De methode rsh/ssh maakt gebruik van RSH/SSH om een verbinding met een "
+"externe computer te maken en als een welbepaalde gebruiker toegang te "
+"krijgen tot de bestanden. Voorafgaandelijke configuratie van rhosts of RSA-"
+"sleutels wordt aanbevolen. De standaardcommando's <command>find</command> en "
+"<command>dd</command> worden gebruikt om de overdracht van bestanden van de "
+"externe computer uit te voeren."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "nog andere herkenbare URI-types toevoegen"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"APT kan uitgebreid worden met extra methodes die door andere optionele "
+"pakketten ter beschikking gesteld worden en die moeten voldoen aan het "
+"naamgevingsschema <package>apt-transport-<replaceable>methode</replaceable></"
+"package>. Het APT-team onderhoudt bijvoorbeeld ook het pakket <package>apt-"
+"transport-tor</package>, dat methodes aanbiedt om toegang te krijgen tot "
+"HTTP- en HTTPS-URI's, waarbij een route via het Tor-netwerk genomen wordt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"Gebruikt het lokaal opgeslagen (of via NFS aangekoppelde) archief in /home/"
+"apt/debian voor stable/main, stable/contrib, en stable/non-free."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/apt/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+"Zoals hierboven, behalve dat hier de distributie unstable (distributie in "
+"ontwikkeling) gebruikt wordt."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr "Specificatie voor de bronbestanden van het voorgaande."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"De eerste regel haalt pakketinformatie op voor de architecturen uit "
+"<literal>APT::Architectures</literal> terwijl de tweede steeds "
+"<literal>amd64</literal> en <literal>armel</literal> ophaalt."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"Gebruikt HTTP om toegang te krijgen tot het archief van archive.debian.org "
+"en gebruikt daar enkel het gebied hamm/main."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"Gebruikt FTP om toegang te krijgen tot het archief op ftp.debian.org onder "
+"de map debian en gebruikt er enkel het gebied &debian-stable-codename;/"
+"contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"Gebruikt FTP om toegang te krijgen tot het archief op ftp.debian.org onder "
+"de map debian en gebruikt er enkel het gebied unstable/contrib. Indien deze "
+"regel en die uit het voorgaande voorbeeld allebei voorkomen in "
+"<filename>sources.list</filename> zal een enkele FTP-verbinding gebruikt "
+"worden voor beide regels met pakketbronnen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Gebruikt HTTP om toegang te krijgen tot het archief op ftp.tlh.debian.org "
+"onder de map universe en gebruikt op i386-computers enkel bestanden die te "
+"vinden zijn onder <filename>unstable/binary-i386</filename> en op amd64-"
+"computers bestanden onder <filename>unstable/binary-amd64</filename> en zo "
+"verder voor andere ondersteunde architecturen. [Merk op dat dit voorbeeld "
+"enkel toont hoe de substitutievariabele moet gebruikt worden; officiële "
+"debian-archieven worden niet op die manier georganiseerd] <placeholder type="
+"\"literallayout\" id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+"Gebruikt HTTP om binaire pakketten en broncode uit de suites stable, testing "
+"en unstable en uit de componenten main en contrib op te halen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"Hulpprogramma om configuratie-informatie en sjablonen voor <command>debconf</"
+"command> uit Debian-pakketten te extraheren"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>apt-extracttemplates</command> gebruikt een of meer pakketbestanden "
+"van Debian als invoer en schrijft (naar een tijdelijke map) alle ermee "
+"verband houdende configuratiescripts en sjabloonbestanden weg. Voor elk "
+"verwerkt pakket dat configuratiescripts en sjablonen bevat wordt een regel "
+"met uitvoer aangemaakt volgens de indeling:"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "pakketversie sjabloonbestand configuratiescript"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"sjabloonbestand en configuratiescript worden opgeslagen in de tijdelijke map "
+"die opgegeven werd met de optie <option>-t</option> of <option>--tempdir</"
+"option> (<literal>APT::ExtractTemplates::TempDir</literal>) in bestandsnamen "
+"met de vorm <filename>package.template.XXXXXX</filename> en "
+"<filename>package.config.XXXXXX</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"Tijdelijke map om er geëxtraheerde sjabloonbestanden en configuratiescripts "
+"voor <command>debconf</command> in op te slaan. Configuratie-item: "
+"<literal>APT::ExtractTemplates::TempDir</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command> geeft de terugkeerwaarde nul bij een "
+"normaal verlopen operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "Hulpprogramma om pakketindexbestanden te sorteren"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>apt-sortpkgs</command> neemt een indexbestand (broncode-index of "
+"pakketindex) en sorteert de records zodat ze volgens pakketnaam geordend "
+"worden. Het sorteert ook de interne velden van elk record volgens de interne "
+"sorteerregels."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"Alle uitvoer wordt naar de standaarduitvoer geschreven. De invoer moet een "
+"bestand zijn dat doorzocht kan worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"Veldordening gebruiken bij een broncode-index. Configuratie-item: "
+"<literal>APT::SortPkgs::Source</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> geeft de terugkeerwaarde nul bij een normaal "
+"verlopen operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "Hulpprogramma om indexbestanden te maken"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> is een gereedschap voor de commandoregel "
+"dat de indexbestanden maakt die APT gebruikt om toegang te hebben tot een "
+"distributiebron. De indexbestanden moeten aangemaakt worden op de site van "
+"oorsprong en gebaseerd zijn op de inhoud van die site."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+"<command>apt-ftparchive</command> is een uitbreiding van het programma &dpkg-"
+"scanpackages; dat diens volledige functionaliteit incorporeert via het "
+"commando <literal>packages</literal>. Het bevat ook een programma, "
+"<literal>contents</literal>, voor het aanmaken van contents-bestanden en "
+"degelijk ontwikkelde middelen om dit aanmaakproces voor een volledig archief "
+"door een script te laten uitvoeren."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+"<command>apt-ftparchive</command> kan uit zichzelf gebruik maken van binaire "
+"databases om de inhoud van een .deb-bestand te bufferen en het is van geen "
+"enkel extern programma afhankelijk met uitzondering van &gzip;. Wanneer een "
+"volledige aanmaak gebeurt, zal het automatisch een controle uitvoeren op "
+"gewijzigde bestanden en de gewenste gecomprimeerde uitvoerbestanden bouwen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+"Het commando packages maakt vertrekkend vanuit een mappenboom een package-"
+"bestand aan. Het begint bij de opgegeven map en doorzoekt de onderliggende "
+"mappen op de aanwezigheid van .deb-bestanden en schrijft voor elk ervan een "
+"pakketfiche weg naar de standaarduitvoer. Dit commando is bij benadering "
+"analoog aan &dpkg-scanpackages;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+"De optie <option>--db</option> kan gebruikt worden om een bufferende binaire "
+"database op te geven."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+"Het commando <literal>sources</literal> maakt vertrekkend vanuit een "
+"mappenboom een indexbestand over broncodebestanden aan. Het begint bij de "
+"opgegeven map en doorzoekt de onderliggende mappen op de aanwezigheid van ."
+"dsc-bestanden en schrijft voor elk ervan een broncodebestandsfiche weg naar "
+"de standaarduitvoer. Dit commando is bij benadering analoog aan &dpkg-"
+"scansources;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+"Indien een override-bestand opgegeven werd, zal gezocht worden naar een "
+"broncode-override-bestand met de extensie .src. De optie --source-override "
+"kan gebruikt worden om op te geven dat een ander broncode-override-bestand "
+"gebruikt zal worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+"Het commando <literal>contents</literal> maakt voor een mappenboom een "
+"contents-bestand aan. Het begint bij de opgegeven map en doorzoekt de "
+"onderliggende mappen op de aanwezigheid van .deb-bestanden en leest van elk "
+"bestand de bestandenlijst. Daarna sorteert het de lijst van bestanden en "
+"schrijft die gekoppeld aan een pakket weg naar de standaarduitvoer. Mappen "
+"worden niet naar standaarduitvoer geschreven. Indien hetzelfde bestand aan "
+"meerdere pakketten toebehoort, worden in de uitvoer de pakketten door een "
+"komma gescheiden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+"Het commando <literal>release</literal> maakt voor een mappenboom een "
+"Release-bestand aan. Het begint bij de opgegeven map en zoekt daar en in de "
+"onderliggende mappen standaard naar niet-gecomprimeerde en gecomprimeerde "
+"<filename>Packages</filename>-, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> en "
+"<filename>icons</filename>-bestanden, alsook naar <filename>Release</"
+"filename>-, <filename>Index</filename>- en <filename>md5sum.txt</filename>-"
+"bestanden. (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Bijkomende bestandsnaampatronen kunnen toegevoegd worden door ze op te "
+"sommen in<literal>APT::FTPArchive::Release::Patterns</literal>. Het commando "
+"schrijft vervolgens naar de standaarduitvoer een<filename>Release</filename>-"
+"bestand dat (standaard) voor elk bestand een MD5-, SHA1-, SHA256 en SHA512-"
+"verzameling bevat."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+"De waarden voor de bijkomende velden met metagegevens in het Release-bestand "
+"worden ontleend aan de overeenkomstige variabelen uit <literal>APT::"
+"FTPArchive::Release</literal>, bijvoorbeeld <literal>APT::FTPArchive::"
+"Release::Origin</literal>. De ondersteunde velden zijn: <literal>Origin</"
+"literal>, <literal>Label</literal>, <literal>Suite</literal>, "
+"<literal>Version</literal>, <literal>Codename</literal>, <literal>Date</"
+"literal>, <literal>NotAutomatic</literal>, <literal>ButAutomaticUpgrades</"
+"literal>, <literal>Acquire-By-Hash</literal>, <literal>Valid-Until</"
+"literal>, <literal>Signed-By</literal>, <literal>Architectures</literal>, "
+"<literal>Components</literal> en <literal>Description</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+"Het commando <literal>generate</literal> werd ontworpen voor gebruik in een "
+"cron-script en bouwt indexen volgens het opgegeven configuratiebestand. De "
+"configuratietaal voorziet in een flexibel instrument om op te geven welke "
+"indexbestanden over welke mappen gemaakt moeten worden en ze voorziet ook in "
+"een eenvoudig instrument voor het onderhoud van de vereiste instellingen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+"Het commando <literal>clean</literal> schoont de door het opgegeven "
+"configuratiebestand gebruikte gegevensbestanden op door er de niet langer "
+"gebruikte fiches uit te verwijderen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr "De configuratie van het generate-commando"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+"Het commando <literal>generate</literal> gebruikt een configuratiebestand "
+"met de beschrijving van de archieven die gegenereerd moeten worden. Het "
+"gebruikt het typische ISC configuratieformaat dat men aantreft in ISC-"
+"gereedschap zoals bind 8 en dhcpd. &apt-conf; bevat een beschrijving van de "
+"syntaxis. Noteer dat de configuratie van generate per sectie ontleed wordt, "
+"maar dat &apt-conf; per boom ontleed wordt. Dit heeft enkel invloed op de "
+"manier waarop met het bereiklabel omgesprongen wordt."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+"De configuratie van generate bevat vier aparte secties die hierna besproken "
+"worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr "De sectie <literal>Dir</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+"De sectie <literal>Dir</literal> definieert de standaardmappen waarin men de "
+"bestanden kan lokaliseren die nodig zijn tijdens het maakproces. Deze mappen "
+"worden voorafgegaan door bepaalde relatieve paden die in de volgende secties "
+"gedefinieerd worden om zo een volledig en absoluut pad te bekomen."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+"Geeft de basismap van het FTP-archief op. In een standaardconfiguratie van "
+"Debian is dat de map die de nodes <filename>ls-LR</filename> en dist "
+"bevatten."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr "Geeft de locatie van de override-bestanden op."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr "Geeft de locatie van de cachebestanden op."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+"Geeft de locatie van de bestandenlijst-bestanden op, indien de instelling "
+"<literal>FileList</literal> hieronder gebruikt wordt."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr "De sectie <literal>Default</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+"De sectie <literal>Default</literal> geeft standaardwaarden en instellingen "
+"op die de werking van de generator besturen. Andere secties kunnen deze "
+"standaardwaarden overschrijven met een sectiegebonden instelling."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+"Stelt het standaard compressieschema in dat voor de pakketindexbestanden "
+"gebruikt wordt. Het is een tekenreeks die bestaat uit een door spaties "
+"gescheiden lijst van minstens een van de compressieprogramma's die via het "
+"configuratiebereik <option>APT::Compressor</option> geconfigureerd zijn. "
+"Voor alle compressieschema's is de standaardinstelling '. gzip'."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+"Stelt in wat de lijst is van bestandsextensies die er standaard op wijzen "
+"dat het pakketbestanden betreft. Dit is standaard ingesteld op '.deb'."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+"Dit is gelijkaardig aan <literal>Packages::Compress</literal>, behalve dat "
+"het de compressie van de Sources-bestanden regelt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+"Stelt in wat de lijst is van bestandsextensies die er standaard op wijzen "
+"dat het broncodebestanden betreft. Dit is standaard ingesteld op '.dsc'."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+"Dit is gelijkaardig aan <literal>Packages::Compress</literal>, behalve dat "
+"het de compressie van de Contents-bestanden regelt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+"Dit is gelijkaardig aan <literal>Packages::Compress</literal>, behalve dat "
+"het de compressie van het Translation-en hoofdbestand regelt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+"Geeft het aantal kilobytes op dat per doorloop ontkoppeld (en vervangen door "
+"harde koppelingen) moet worden. Dit wordt gebruikt in samenhang met de "
+"sectiegebonden instelling <literal>External-Links</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+"Stelt de modus in van alle aangemaakte indexbestanden. Standaard is dit "
+"ingesteld op 0644. Alle indexbestanden worden op deze modus ingesteld "
+"ongeacht het umask."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+"Stelt in of de gedetailleerde beschrijvingen moeten opgenomen worden in het "
+"<filename>Packages</filename>-bestand of afgesplitst en in een "
+"<filename>Translation-en</filename> hoofdbestand moeten geplaatst worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "De sectie <literal>TreeDefault</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+"Stelt standaarden in die specifiek zijn voor de secties <literal>Tree</"
+"literal>. Al deze variabelen zijn substitutievariabelen waarbij de "
+"tekenreeksen $(DIST), $(SECTION) en $(ARCH) vervangen worden door hun "
+"respectieve waarden."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+"Stelt in voor welk aantal kilobytes er iedere dag contents-bestanden "
+"gegenereerd worden. Contents-bestanden komen een na een aan de beurt, zodat "
+"ze over een periode van een aantal dagen allemaal opnieuw gebouwd worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+"Regelt het aantal dagen dat een contents-bestand mag gebruikt worden zonder "
+"dat het gewijzigd werd. Indien die limiet overschreden wordt, zal het mtime "
+"van het contents-bestand bijgewerkt worden. Een dergelijke situatie kan zich "
+"voordoen als het pakketbestand op zo een manier gewijzigd wordt dat het niet "
+"resulteert in een nieuw contents-bestand [bijvoorbeeld een wijziging aan "
+"override]. Uitstel is toegelaten als gehoopt mag worden dat nieuwe .deb-"
+"bestanden geïnstalleerd zullen worden wat hoe dan ook een nieuw contents-"
+"bestand vereist. De standaard is 10, waarbij de eenheden in dagen uitgedrukt "
+"worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+"Stelt de basis van de .deb-mappenboom in. Standaard is dat <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+"Stelt de basis in van de mappenboom van broncodepakketten. Standaard is dat "
+"<filename>$(DIST)/$(SECTION)/source/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+"Stelt in waar het Packages-bestand geschreven wordt. Standaard is dat "
+"<filename>$(DIST)/$(SECTION)/binary-$(ARCH)/Packages</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+"Stelt in waar het Sources-bestand geschreven wordt. Standaard is dat "
+"<filename>$(DIST)/$(SECTION)/source/Sources</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+"Stelt in waar het hoofdbestand Translation-en geschreven wordt met daarin de "
+"uitgebreide beschrijvingen in het geval die niet in het bestand Packages "
+"opgenomen werden. De standaard is <filename>$(DIST)/$(SECTION)/i18n/"
+"Translation-en</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+"Stelt het pad-prefix in dat regelt wanneer een symbolische koppeling als een "
+"interne en niet als een externe koppeling beschouwd moet worden. De "
+"standaard is <filename>$(DIST)/$(SECTION)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+"Stelt in waar het Contents-bestand geschreven wordt. De standaard is "
+"<filename>$(DIST)/$(SECTION)/Contents-$(ARCH)</filename>. Indien deze "
+"instelling ertoe leidt dat meerdere Packages-bestanden horen bij een enkel "
+"Contents-bestand (wat standaard het geval is), dan zal <command>apt-"
+"ftparchive</command> deze pakketbestanden automatisch tot een geheel "
+"integreren."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr ""
+"Stelt het koptekstbestand in dat aan het begin van het aangemaakte contents-"
+"bestand moet komen."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+"Stelt de binaire database in om als cache te dienen voor deze sectie. "
+"Meerdere secties kunnen gebruik maken van dezelfde database."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+"Stelt in dat <command>apt-ftparchive</command> de lijst van bestanden moet "
+"halen uit het opgegeven bestand en niet moet opmaken aan de hand van het "
+"doorlopen van de mappenboom. De archiefmap wordt als prefix aan relatieve "
+"bestandsnamen toegevoegd."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+"Stelt in dat <command>apt-ftparchive</command> de lijst van bestanden moet "
+"halen uit het opgegeven bestand en niet moet opmaken aan de hand van het "
+"doorlopen van de mappenboom. De archiefmap wordt als prefix aan relatieve "
+"bestandsnamen toegevoegd. Dit wordt gebruikt bij het verwerken van broncode-"
+"indexen."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr "De sectie <literal>Tree</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+"De sectie <literal>Tree</literal> definieert een standaard bestandsboom voor "
+"Debian die bestaat uit een basismap met daarin dan meerdere secties en "
+"binnen elke sessie tenslotte meerdere architecturen. Het exacte pad dat "
+"gebruikt wordt, wordt gedefinieerd door de substitutievariabele "
+"<literal>Directory</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+"De sectie <literal>Tree</literal> werkt met een bereiklabel dat de variabele "
+"<literal>$(DIST)</literal> instelt en de basis van de boomstructuur "
+"definieert (vooraan aan het pad wordt <literal>ArchiveDir</literal> "
+"toegevoegd). Doorgaans is dat een instelling zoals <filename>dists/&debian-"
+"stable-codename;</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+"Alle in de sectie <literal>TreeDefault</literal> gedefinieerde instellingen "
+"kunnen ook in een <literal>Tree</literal>-sectie gebruikt worden evenals "
+"drie nieuwe variabelen."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+"Als <command>apt-ftparchive</command> een <literal>Tree</literal>-sectie "
+"verwerkt, voert het een operatie uit die vergelijkbaar is met: <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+"Dit is een door spaties gescheiden lijst van secties die onder de "
+"distributie te vinden zijn. Doorgaans is dat iets zoals <literal>main "
+"contrib non-free</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+"Dit is een met spaties gescheiden lijst van alle architecturen die voorkomen "
+"onder de sectie waarin gezocht wordt. De bijzondere architectuur 'source' "
+"wordt gebruikt om aan te geven dat deze boomstructuur een archief met "
+"broncode bevat. De architectuur 'all' signaleert dat architectuurspecifieke "
+"bestanden zoals <filename>Packages</filename>, niet telkens in elk bestand "
+"informatie moeten opnemen over pakketten van het architectuurtype "
+"<literal>all</literal>, aangezien die te vinden is in een specifiek bestand."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+"Stelt het binaire override-bestand in. Het override-bestand bevat informatie "
+"over sectie, prioriteit en het adres van de onderhouder."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+"Stelt het override-bestand van de broncode in. Het override-bestand bevat "
+"informatie over de sectie."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr "Stelt het binaire extra override-bestand in."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr "Stelt het extra override-bestand van de broncode in."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "De sectie <literal>BinDirectory</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+"De sectie <literal>bindirectory</literal> definieert een binaire mappenboom "
+"zonder bijzondere structuur. Het bereiklabel specificeert de locatie van de "
+"binaire map en de instellingen zijn gelijkaardig aan die van de sectie "
+"<literal>Tree</literal> zonder substitutievariabelen of instellingen van het "
+"type <literal>Section</literal><literal>Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr "Stelt in waar het Packages-bestand aangemaakt wordt."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+"Stelt in waar het Sources-bestand aangemaakt wordt. Er is minstens een "
+"bestand <literal>Packages</literal> of <literal>Sources</literal> vereist."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr "Stelt in waar het Contents-bestand aangemaakt wordt (optioneel)."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr "Stelt het binaire override-bestand in."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr "Stelt het override-bestand voor de broncode in."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr "Stelt de cache database in."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr "Voegt een pad toe aan al de paden van de uitvoer."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "Specificeert het bestand met de bestandslijst."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr "Het binaire override-bestand"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+"Het binaire override-bestand is volledig compatibel met &dpkg-scanpackages;. "
+"Het bevat vier door spaties gescheiden velden. Het eerste veld bevat de "
+"pakketnaam, het tweede bevat de prioriteit die aan dat pakket gegeven moet "
+"worden, het derde bevat de sectie waarin dat pakket geplaatst moet worden en "
+"het laatste veld is voorbehouden voor het opgeven van een vervangende "
+"onderhouder."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "oude [// ouden]* => nieuwe"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "nieuwe"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+"De algemene vorm van het onderhouder-veld is: <placeholder type="
+"\"literallayout\" id=\"0\"/>, of gewoon <placeholder type=\"literallayout\" "
+"id=\"1\"/> De eerste vorm laat toe om een lijst van oude e-mailadressen, van "
+"elkaar gescheiden door een dubbele slash, op te geven. Indien een ervan "
+"aangetroffen wordt, dan zal nieuw als de nieuwe waarde voor het onderhouder-"
+"veld gebruikt worden. De tweede vorm vervangt onvoorwaardelijk de inhoud van "
+"het onderhouder-veld."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr "Het override-bestand voor broncode"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+"Het override-bestand voor broncode is volledig compatibel met &dpkg-"
+"scansources;. Het bestaat uit twee velden die van elkaar gescheiden worden "
+"door een spatie. Het eerste veld bevat de naam van het broncodepakket en het "
+"tweede de sectie waartoe het moet behoren."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr "Het extra override-bestand"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+"Het extra override-bestand maakt het mogelijk om gelijk welk arbitrair label "
+"toe te voegen of te vervangen in de uitvoer. Het bestaat uit drie kolommen. "
+"In de eerste staat het pakket vermeld, in de tweede het label en de rest van "
+"de regel bevat de nieuwe waarde die eraan toegekend wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+"De vermelde controlesom genereren. Standaard staan deze opties aan. Indien "
+"ze uitgezet worden, dan zal het aangemaakte indexbestand zo mogelijk geen "
+"velden voor de controlesom bevatten. Configuratie-items: <literal>APT::"
+"FTPArchive::<replaceable>Checksum</replaceable></literal> en <literal>APT::"
+"FTPArchive::<replaceable>Index</replaceable>::<replaceable>Checksum</"
+"replaceable></literal> waarbij <literal><replaceable>Index</replaceable></"
+"literal> kan bestaan uit <literal>Packages</literal>, <literal>Sources</"
+"literal> of <literal>Release</literal> en <literal><replaceable>Checksum</"
+"replaceable></literal> kan bestaan uit <literal>MD5</literal>, "
+"<literal>SHA1</literal>, <literal>SHA256</literal> of <literal>SHA512</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"Een bufferende binaire database gebruiken. Dit heeft geen invloed op het "
+"commando generate. Configuratie-item: <literal>APT::FTPArchive::DB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Stille modus. Door het weglaten van de voortgangsindicatie produceert dit "
+"uitvoer die geschikt is om opgeslagen te worden in een logbestand. Meer q's, "
+"met een maximum van 2, resulteren in een verhoogde stille modus. U kunt ook "
+"<option>-q=#</option> gebruiken om het niveau van de stille modus in te "
+"stellen en op die manier het configuratiebestand te overschrijven. "
+"Configuratie-item: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"Ontkoppelingen uitvoeren. Indien de instelling <literal>External-Links</"
+"literal> gebruikt wordt, dan maakt deze optie het eigenlijk mogelijk om de "
+"bestanden te ontkoppelen. Standaard staat dit aangezet en het kan uitgezet "
+"worden met <option>--no-delink</option>. Configuratie-item: <literal>APT::"
+"FTPArchive::DeLinkAct</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+"Het aanmaken van het contents-bestand uitvoeren. Indien deze optie aangezet "
+"wordt en de pakketindexen gegenereerd worden met een bufferende database, "
+"dan zal ook de bestandslijst geëxtraheerd worden en voor later gebruik in de "
+"database opgeslagen worden. Als het commando generate gebruikt wordt, laat "
+"deze optie ook toe om Contents-bestanden aan te maken. Standaard staat dit "
+"aangezet. Configuratie-item: <literal>APT::FTPArchive::Contents</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"Het override-bestand voor broncode selecteren om met het commando "
+"<literal>sources</literal> te gebruiken. Configuratie-item: <literal>APT::"
+"FTPArchive::SourceOverride</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"De bufferende databases alleen lezen maken. Configuration Item: "
+"<literal>APT::FTPArchive::ReadOnlyDB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"Voor de commando's <literal>packages</literal> en <literal>contents</"
+"literal> enkel pakketbestanden toelaten die overeenkomen met <literal>*_arch."
+"deb</literal> of <literal>*_all.deb</literal> in plaats van alle "
+"pakketbestanden in het opgegeven pad. Configuratie-item: <literal>APT::"
+"FTPArchive::Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+"&apt-ftparchive; buffert zoveel mogelijk metadata in een bufferende "
+"database. Indien er pakketten opnieuw gebouwd en/of uitgebracht worden met "
+"dezelfde versie, zal dit tot problemen leiden, aangezien de dan verouderde "
+"maar in de buffer aanwezige metadata, zoals grootte en controlesommen, "
+"gebruikt zullen worden. Indien deze optie aangezet wordt, zal dit niet meer "
+"gebeuren, vermits gecontroleerd zal worden of het bestand gewijzigd werd. "
+"Noteer dat deze optie standaard ingesteld staat op \"<literal>false</literal>"
+"\" (uit), omdat het niet aangewezen is om meerdere versies/bouwversies van "
+"een pakket met hetzelfde versienummer te uploaden. In theorie zal dus "
+"niemand met deze problemen geconfronteerd worden en daarom zijn al deze "
+"extra controles nutteloos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+"Deze configuratieoptie staat standaard ingesteld op \"<literal>true</literal>"
+"\" (aan) en zou enkel moeten ingesteld worden op <literal>\"false\"</"
+"literal> (uit) indien het archief dat met &apt-ftparchive; gegenereerd wordt "
+"ook <filename>Translation</filename>-bestanden bevat. Merk op dat het "
+"hoofdbestand <filename>Translation-en</filename> enkel aangemaakt kan worden "
+"via het commando generate."
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> pakketten <replaceable>map</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Om voor een map met binaire pakketten (.deb) een gecomprimeerd Packages-"
+"bestand aan te maken: <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> geeft de terugkeerwaarde nul bij een "
+"normaal verlopen operatie, het decimaal getal 100 in geval van een fout."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+msgid "Login configuration file for APT sources and proxies"
+msgstr "Login-configuratiebestand voor APT-bronnen en -proxy's"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+"Configuratiebestanden van APT, zoals &sources-list; of &apt-conf;, moeten "
+"toegankelijk zijn voor iedereen die apt-gereedschap gebruikt op het systeem "
+"om toegang te hebben tot alle informatie in verband met pakketten, zoals de "
+"in een pakketbron beschikbare pakketten. Daarentegen mag login-informatie "
+"die nodig is om verbinding te maken met een proxy of om gegevens op te halen "
+"van een pakketbron, niet steeds voor iedereen toegankelijk zijn. Om die "
+"reden kan ze niet ondergebracht worden in een bestand met permissies die "
+"iedereen leestoegang geven."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"Het bestand auth.conf van APT, <filename>/etc/apt/auth.conf</filename>, en ."
+"conf-bestanden in de map <filename>/etc/apt/auth.conf.d</filename> kunnen "
+"gebruikt worden om er login-informatie in op te slaan in een netrc-achtige "
+"indeling met restrictieve bestandspermissies."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr "netrc-achtige indeling"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+"De hier gedefinieerde indeling is vergelijkbaar met de indeling van het "
+"<filename>~/.netrc</filename>-bestand dat gebruikt wordt door "
+"<citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> en vergelijkbare "
+"programma's in interactie met servers. Het is een eenvoudige trefwoord-"
+"gebaseerde indeling, waarbij de volgende trefwoorden herkend worden. Niet-"
+"herkende trefwoorden worden genegeerd. Trefwoorden kunnen van elkaar "
+"gescheiden worden door spaties, tabs en regeleindes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+"<literal>machine</literal> <replaceable>computernaam</replaceable>[:"
+"<replaceable>poort</replaceable>][/<replaceable>pad</replaceable>]"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+"Een element wordt opgezocht door bij het trefwoord "
+"<emphasis><literal>machine</literal></emphasis> naar de computernaam te "
+"zoeken die overeenkomt met die van de URI waarvoor apt inloggegevens nodig "
+"heeft. Als uitbreiding bij de netrc-indeling kan ook een poortnummer "
+"opgegeven worden. Indien geen poortnummer opgegeven werd, geven alle poorten "
+"een overeenkomst. Net zo is ook het pad facultatief en enkel nodig als op "
+"dezelfde server meerdere pakketbronnen aanwezig zijn met verschillende "
+"inloggegevens. Als bij het trefwoord machine een pad opgegeven werd, is er "
+"een overeenkomst als het pad in de URI begint met het bij het trefwoord "
+"opgegeven pad. Eens er een overeenkomst vastgesteld werd, worden de "
+"daaropvolgende trefwoorden verwerkt tot het einde van het bestand bereikt "
+"wordt of tot een ander trefwoord <emphasis><literal>machine</literal></"
+"emphasis> gevonden wordt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "<literal>login</literal> <replaceable>naam</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr "De te gebruiken gebruikersnaam."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "<literal>password</literal> <replaceable>tekenreeks</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr "Het te gebruiken wachtwoord."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Example"
+msgstr "Voorbeeld"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb http://example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr "machine example.org login apt password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+"Voor een gebruiker met als naam <literal>apt</literal> en met het wachtwoord "
+"<literal>debian</literal> inloginformatie verstrekken voor het element "
+"&sources-list; <placeholder type=\"literallayout\" id=\"0\"/> zou "
+"rechtstreeks in het element kunnen gedaan worden: <placeholder type="
+"\"literallayout\" id=\"1\"/> Als alternatief zou in het bestand auth.conf "
+"een element als het volgende gebruikt kunnen worden: <placeholder type="
+"\"literallayout\" id=\"2\"/> Of anders in één enkele regel: <placeholder "
+"type=\"literallayout\" id=\"3\"/> Indien u meer moet specificeren, zullen al "
+"deze regels ook op het element example van toepassing zijn: <placeholder "
+"type=\"literallayout\" id=\"4\"/> Daarentegen zijn geen van de volgende "
+"regels van toepassing: <placeholder type=\"literallayout\" id=\"5\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr "Noten"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+"Basale ondersteuning voor deze functionaliteit was aanwezig sinds versie "
+"0.7.25 maar bleef jarenlang ongedocumenteerd. De documentatie werd in versie "
+"1.5 toegevoegd met tevens een lichtjes gewijzigde toepassing. Voor maximale "
+"neerwaartse compatibiliteit zou u meerdere <literal>machine</literal>-"
+"trefwoorden met dezelfde computernaam moeten vermijden, maar indien u er "
+"meerdere nodig heeft, moet er bij alle in het trefwoord <literal>machine</"
+"literal> een pad opgegeven worden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"Inloginformatie voor APT-bronnen en -proxy's in a netrc-achtige indeling. "
+"Configuratie-item: <literal>Dir::Etc::netrc</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"Inloginformatie voor APT-bronnen en -proxy's in een netrc-achtige indeling. "
+"Configuratie-item: <literal>Dir::Etc::netrcparts</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+"Transportmethode van APT voor het downloaden via het Hypertext Transfer "
+"Protocol (HTTP)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+"Deze transportmethode van APT laat toe pakketbronnen te gebruiken die "
+"benaderd worden via het Hypertext Transfer Protocol (HTTP). Ze is standaard "
+"beschikbaar en wellicht de meest gebruikte van alle transportmethodes. Merk "
+"op dat een transportmethode nooit rechtstreeks door een gebruiker "
+"aangesproken wordt, maar door APT-gereedschap gebruikt wordt op basis van de "
+"gebruikersconfiguratie."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+"HTTP is een niet-versleuteld transportprotocol, hetgeen betekent dat de "
+"volledige communicatie met de externe server (of de proxy) kan bekeken "
+"worden door een voldoende onderlegde aanvaller, die men gewoonlijk aanduidt "
+"met \"man in the middle\" (MITM - persoon in het midden). De aanvaller kan "
+"evenwel de communicatie <emphasis>niet</emphasis> beïnvloeden om de "
+"beveiliging van uw systeem aan te tasten, vermits het databeveiligingsmodel "
+"dat toegepast wordt door APT, onafhankelijk van de gekozen transportmethode "
+"functioneert. Dit wordt gedetailleerd uitgelegd in &apt-secure;. Een "
+"overzicht van beschikbare transportmethodes wordt in &sources-list; gegeven."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+"In een &apt-conf;-bestand kunnen verschillende opties ingesteld worden om de "
+"werking aan te passen, gaande van proxy-configuratie tot het omzeilen van "
+"specifieke serverbeperkingen."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Proxy Configuration"
+msgstr "Proxyconfiguratie"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+"De omgevingsvariabele <envar>http_proxy</envar> wordt gebruikt voor de "
+"configuratie die op het hele systeem van toepassing is. Proxy's die "
+"specifiek zijn voor APT kunnen via de optie <literal>Acquire::http::Proxy</"
+"literal> geconfigureerd worden. Proxy's die enkel voor bepaalde computers "
+"gebruikt moeten worden, kunnen via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal> opgegeven worden. Er kan zelfs nog "
+"een meer fijnmazige regeling bekomen worden via de automatische "
+"proxydetectie die verderop behandeld wordt. Al deze opties maken gebruik van "
+"de URI-indeling <literal><replaceable>methode</replaceable>://"
+"[[<replaceable>gebruiker</replaceable>][:<replaceable>wachtwoord</"
+"replaceable>]@]<replaceable>computer</replaceable>[:<replaceable>poort</"
+"replaceable>]/</literal>. Ondersteunde URI-methodes zijn <literal>socks5h</"
+"literal> (SOCKS5 met externe DNS-opzoeking), <literal>http</literal> en "
+"<literal>https</literal>. Authenticatie-informatie kan verstrekt worden via "
+"&apt-authconf; in plaats van ze rechtstreeks op te nemen in de URI."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+"De onderscheiden configuratieopties van APT ondersteunen de bijzondere "
+"waarde <literal>DIRECT</literal>, hetgeen betekent dat geen proxy gebruikt "
+"mag worden. Voor hetzelfde doel wordt ook de omgevingsvariabele "
+"<envar>no_proxy</envar> ondersteund."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+"Daarenboven worden drie instellingen voorzien om HTTP/1.1-compatibele proxy-"
+"caches te beheren: <literal>Acquire::http::No-Cache</literal> zegt de proxy "
+"om in geen geval gebruik te maken van het in zijn cache beschikbare "
+"antwoord. <literal>Acquire::http::Max-Age</literal> stelt de maximaal "
+"toegelaten ouderdom (in seconden) in van een indexbestand in de cache van de "
+"proxy. <literal>Acquire::http::No-Store</literal> geeft aan dat de proxy de "
+"opgevraagde archiefbestanden niet in zijn cache moet opslaan. Zo kan men "
+"voorkomen dat de cache van de proxy vervuild raakt met (grote) .deb-"
+"bestanden."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Automatic Proxy Configuration"
+msgstr "Automatische Proxyconfiguratie"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> kan gebruikt worden om "
+"een extern commando op te geven voor het vinden van de te gebruiken HTTP-"
+"proxy. De eerste en enige parameter is een URI die aangeeft met welke "
+"computer contact gemaakt moet worden om computerspecifieke configuratie in "
+"aanmerking te nemen. APT verwacht dat het commando de proxy op de "
+"standaarduitvoer op één enkele regel weergeeft volgens de eerder "
+"gespecificeerde URI-indeling of anders het woord <literal>DIRECT</literal> "
+"in geval geen proxy gebruikt moet worden. Geen uitvoer geeft aan dat de "
+"generieke proxy-instellingen gebruikt moeten worden."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+"Merk op dat geen autodetectie gebruikt zal worden voor een computer indien "
+"reeds een computerspecifieke proxyconfiguratie ingesteld werd via "
+"<literal>Acquire::http::Proxy::<replaceable>computer</replaceable></literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+"Raadpleeg de pakketten &squid-deb-proxy-client; en &auto-apt-proxy; voor "
+"voorbeeldtoepassinggen."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+"Deze optie heeft voorrang op de verouderde optienaam <literal>Acquire::http::"
+"ProxyAutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Connection Configuration"
+msgstr "Verbindingsconfiguratie"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+"De optie <literal>Acquire::http::Timeout</literal> stelt de tijdslimiet in "
+"die gehanteerd moet worden door de timer die door de methode gebruikt wordt. "
+"Deze waarde is zowel van toepassing op de tijdslimiet van de verbinding als "
+"op die van de data-overdracht."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+"De gebruikte bandbreedte kan beperkt worden via <literal>Acquire::http::Dl-"
+"Limit</literal> dat in gehele getallen uitgedrukte waarden in kilobytes per "
+"seconde accepteert. De standaardwaarde is 0 waardoor de limiet gedeactiveerd "
+"wordt en er geprobeerd wordt om alle beschikbare bandbreedte te gebruiken. "
+"Merk op dat deze optie impliciet het gelijktijdig downloaden vanaf meerdere "
+"servers uitschakelt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+"De instelling <literal>Acquire::http::Pipeline-Depth</literal> kan gebruikt "
+"worden om de pijplijnmethode van HTTP (RFC 2616 sectie 8.1.2.2) toe te "
+"passen. Die kan bijvoorbeeld nuttig zijn bij verbindingen met een hoge "
+"vertraging (high-latency connections). Ze definieert hoeveel verzoeken er in "
+"een pijplijn verzonden worden. APT tracht tijdens het uitvoeren van de "
+"bewerking webservers en proxy's die zich niet correct gedragen, te ontdekken "
+"en te omzeilen, maar als u weet dat de uwe niet conform de HTTP/1.1 "
+"specificatie is, kan het werken met een pijplijn uitgeschakeld worden door "
+"de waarde op 0 te zetten. Standaard is dit geactiveerd met de waarde 10."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+"<literal>Acquire::http::AllowRedirect</literal> regelt of APT eventuele "
+"omleidingen volgt. Standaard staat dit aan."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+"<literal>Acquire::http::User-Agent</literal> kan gebruikt worden om voor "
+"User-Agent een andere waarde in te stellen om bij de http-downloadmethode te "
+"gebruiken. Sommige proxy's verlenen een cliënt enkel toegang als die een "
+"gekende identificatie gebruikt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+"<literal>Acquire::http::SendAccept</literal> is standaard geactiveerd en "
+"zendt een kopveld <literal>Accept: text/*</literal> naar de server voor "
+"verzoeken zonder bestandsextensie om te voorkomen dat de server content "
+"negotiation (inhoudsonderhandeling) zou proberen toe te passen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"Mijn APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+"Transportmethode van APT voor het downloaden via het HTTP Secure protocol "
+"(HTTPS)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+"Deze transportmethode van APT laat toe om pakketbronnen te gebruiken die "
+"benaderd worden via het HTTP Secure protocol (HTTPS), ook wel aangeduid als "
+"HTTP over TLS. Ze is standaard beschikbaar sinds apt 1.5 en voordien in het "
+"pakket <package>apt-transport-https</package>. Merk op dat een "
+"transportmethode nooit rechtstreeks door een gebruiker aangesproken wordt, "
+"maar door APT-gereedschap gebruikt wordt op basis van de "
+"gebruikersconfiguratie."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+"HTTP zelf is een niet-versleuteld transportprotocol (vergelijk &apt-"
+"transport-http;), dat zoals de toegevoegde S aangeeft, ingepakt wordt in een "
+"versleutelde laag, die bekend staat als Transport Layer Security (TLS), om "
+"te voorzien in versleuteling van punt naar punt. Een voldoende onderlegde "
+"aanvaller kan nog steeds de communicatiepartners gadeslaan en een grondige "
+"analyse van de versleutelde communicatie kan nog steeds belangrijke details "
+"aan het licht brengen. Een overzicht van beschikbare alternatieve "
+"transportmethodes wordt gegeven in &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+"Het HTTPS-protocol is gebaseerd op het HTTP-protocol, en dus zijn alle "
+"opties die ondersteund worden door &apt-transport-http; ook beschikbaar via "
+"<literal>Acquire::https</literal>. Ze hebben standaard dezelfde waarden als "
+"vermeld bij <literal>Acquire::http</literal>. Deze man-pagina documenteert "
+"enkel de opties die <emphasis>specifiek zijn voor https</emphasis>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr "Servergeloofsbrieven"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+"Standaard worden alle door het systeem vertrouwde certificaten (zie het "
+"pakket <package>ca-certificates</package>) gebruikt om het certificaat van "
+"de server te verifiëren. Een alternatieve certificaatautoriteit (CA) kan "
+"geconfigureerd worden met de optie <literal>Acquire::https::CAInfo</literal> "
+"en zijn computerspecifieke optie <literal>Acquire::https::CAInfo::"
+"<replaceable>computer</replaceable></literal>. De optie CAInfo specificeert "
+"een bestand dat bestaat uit CA-certificaten (in PEM-indeling), die "
+"samengevoegd worden om de keten te vormen die APT moet gebruiken voor het "
+"verifiëren van het pad vanaf het door uzelf ondertekend basiscertificaat. "
+"Indien de externe server tijdens de uitwisseling de hele keten verstrekt, "
+"dan moet het bestand enkel het basiscertificaat bevatten. Anders is de hele "
+"keten vereist. Indien u ondersteuning moet voorzien voor verschillende "
+"autoriteiten, bestaat de enige mogelijkheid erin alles samen te voegen."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+"Er kan een aangepaste lijst van herroepen certificaten (certificate "
+"revocation list - CRL) geconfigureerd worden met de opties <literal>Acquire::"
+"https::CRLFile</literal> en <literal>Acquire::https::CRLFile::"
+"<replaceable>computer</replaceable></literal>. Zoals bij de vorige optie "
+"moet een bestand opgegeven worden in PEM-indeling."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr "Beveiliging uitschakelen"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+"Als tijdens het proces van serverauthenticatie de verificatie van het "
+"certificaat om een af andere reden (vervallen, herroepen, persoon in het "
+"midden, enz.) mislukt, mislukt het tot stand brengen van de verbinding. Dit "
+"is duidelijk wat u in alle gevallen wenst en wat voorzien wordt in de "
+"standaardwaarde (true) van de optie <literal>Acquire::https::Verify-Peer</"
+"literal> en diens computerspecifieke variant. Indien u <emphasis>precies</"
+"emphasis> weet wat u doet, kunt u door deze optie op \"<literal>false</"
+"literal>\" in te stellen, de wederzijdse verificatie van certificaten "
+"overslaan en ervoor zorgen dat de uitwisseling succesvol is. Nogmaals: deze "
+"optie is enkel bedoeld met het oog op foutopsporing en het uitvoeren van "
+"testen, aangezien ze alle beveiliging wegneemt die door het gebruik van "
+"HTTPS geboden wordt."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+"Op dezelfde manier kan de optie <literal>Acquire::https::Verify-Host</"
+"literal> en zijn computerspecifieke variant gebruikt worden om een "
+"beveiligingsfunctie te deactiveren: het door de server geleverde certificaat "
+"bevat de identiteit van de server en die moet overeenkomen met de DNS-naam "
+"die gebruikt wordt om hem te benaderen. Zoals gevraagd wordt door RFC 2818 "
+"wordt de naam van de spiegelserver standaard getoetst aan de identiteit die "
+"in het certificaat gevonden wordt. Dit standaardgedrag is veilig en moet "
+"niet gewijzigd worden, maar indien u weet dat de server die u gebruikt, een "
+"DNS-naam heeft die niet overeenkomst met de identiteit in diens certificaat, "
+"kunt u de optie instellen op \"<literal>false</literal>\", hetgeen zal "
+"voorkomen dat de vergelijking uitgevoerd wordt."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr "Cliëntauthenticatie"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+"Behalve de geboden ondersteuning voor authenticatie via een wachtwoord (zie "
+"&apt-authconf;), ondersteunt HTTPS ook authenticatie op basis van "
+"cliëntcertificaten via <literal>Acquire::https::SSLCert</literal> en "
+"<literal>Acquire::https::SSLKey</literal>. Deze moeten respectievelijk "
+"ingesteld worden op de bestandsnaam van het X.509 cliëntcertificaat en de "
+"ermee verbonden (niet-versleutelde) private sleutel, beide in PEM-indeling. "
+"In de praktijk wordt de computerspecifieke variant van beide opties ten "
+"zeerste aanbevolen."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"Mijn APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/pad/naar/ca/certs.pem\";\n"
+"\tCRLFile \"/pad/naar/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::defecte.example.org \"false\";\n"
+"\tSSLCert::example.org \"/pad/naar/cliënt/cert.pem\";\n"
+"\tSSLKey::example.org \"/pad/naar/cliënt/key.pem\"\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr ""
+"Transportmethode van APT voor een meer geautomatiseerde siegelserverselectie"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+"Deze transportmethode van APT past zelf geen protocol toe om lokale of "
+"externe pakketbronnen te benaderen, maar haalt een spiegelserverlijst op en "
+"leidt alle verzoeken om naar de spiegelserver(s) die uit de lijst uitgekozen "
+"wordt/worden. Deze wordt/worden benaderd via overige transportmethodes, "
+"zoals &apt-transport-http;. De basale functionaliteit hiervan was reeds "
+"beschikbaar vanaf apt 0.7.24, maar bleef ongedocumenteerd tot apt 1.6, "
+"waarin een volledige herwerking van de transportmethode en de erdoor "
+"ondersteunde functies plaats vond. Merk op dat een transportmethode nooit "
+"rechtstreeks door een gebruiker aangesproken wordt, maar door APT-"
+"gereedschap gebruikt wordt op basis van de gebruikersconfiguratie."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+"Indien het verkrijgen van een bestand via een spiegelserver mislukt, zorgt "
+"de methode ervoor dat automatisch een andere mogelijke spiegelserver uit de "
+"lijst geprobeerd wordt, totdat ofwel het bestand opgehaald is of er in de "
+"lijst geen spiegelservers meer overblijven. Op die manier wordt op een "
+"transparante manier omgegaan met storingen bij servers en vergelijkbare "
+"problemen."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+"De implicaties van de methode voor de beveiliging zijn afhankelijk van de "
+"gemaakte keuzes inzake beveiliging voor de transportmethode die gebruikt "
+"wordt om de lijst met spiegelservers op te halen en de transportmethodes die "
+"betrokken zijn bij het benaderen van de gekozen spiegelserver(s) door de "
+"transportmethode."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+"Voor deze transportmethode bestaan momenteel geen configuratieopties. De "
+"selectie van de spiegelserver hangt volledig af van de spiegelservers die in "
+"de spiegelserverlijst aangeboden worden en de bestanden die APT moet "
+"verkrijgen."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr "Indeling van de spiegelserverlijst"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+"Een spiegelserverlijst bestaat uit één of meer regels met een URI van een "
+"spiegelserver. Lege regels en regels die beginnen met een hekje (<literal>#</"
+"literal>) worden genegeerd. Een URI begint steeds meet een URI-methode die "
+"de transportmethode vaststelt die voor die spiegelserver gebruikt wordt. "
+"Indien de URI bijvoorbeeld met <literal>http:</literal> begint, is de "
+"bevoegde transportmethode &apt-transport-http;, welke specifieke eisen kan "
+"stellen aan de indeling van het resterende deel van de URI."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+"Metadata over een spiegelserver kunnen op dezelfde regel opgegeven worden, "
+"gescheiden van de URI met een tab. Verschillende metadata-elementen kunnen "
+"onderling gescheiden worden door tabs of spaties. (Dit is een "
+"gespecialiseerde functionaliteit die enkel beschikbaar is in apt >= 1.6. "
+"Eerdere versies van apt zullen er niet in slagen spiegelserverlijsten met "
+"deze functionaliteit te ontleden.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+"Vanaf apt 1.6 wordt ook het gebruik van gecomprimeerde spiegelserverlijsten "
+"ondersteund. Merk op dat de bestandsnaam van de spiegelserverlijst moet "
+"aangeven welk compressiealgoritme gebruikt wordt. Er gebeurt geen "
+"autodetectie op basis van de inhoud van het bestand."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr "Spiegelserverselectie op basis van metadata"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+"Zoals aangegeven bij de indeling, kunnen metadata toegevoegd worden aan een "
+"spiegelserver om te voorkomen dat een spiegelserver geselecteerd zou worden "
+"voor het bekomen van een bestand dat niet overeenkomt met deze metadata. "
+"Daardoor kan de spiegelserverlijst bijvoorbeeld partiële spiegelservers "
+"bevatten die enkel bepaalde architecturen bedienen en zal APT automatisch "
+"een andere spiegelserver kiezen voor bestanden die voor een niet vermelde "
+"architectuur bedoeld zijn. Worden ondersteund: beperkingen op het gebied van "
+"architectuur (<literal>arch</literal>), de codenaam van de release "
+"(<literal>codename</literal>), de component van de pakketbron waarin het "
+"bestand zich bevindt (<literal>component</literal>), de taal waarvoor het "
+"bestand moet dienen (<literal>lang</literal>), de suitenaam van de release "
+"(<literal>suite</literal>) en het bestandstype (<literal>type</literal>)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr "Volgorde waarin het teruggevallen op spiegelservers gebeurt"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+"Indien voor een spiegelserver geen volgorde opgegeven is via de "
+"metadatasleutel <literal>priority</literal>, is de volgorde waarin "
+"spiegelservers gecontacteerd worden toevallig. Indien een bepaalde groep "
+"spiegelservers eerst uitgeprobeerd moet worden vooraleer eventuele andere "
+"groepen aangesproken worden, kan expliciet een prioriteit ingesteld worden. "
+"De spiegelservers met het laagste getal worden eerst uitgeprobeerd. "
+"Spiegelservers waarvoor geen uitdrukkelijke prioriteit ingesteld werd, "
+"hebben standaard het hoogst mogelijke getal en worden daardoor laatst "
+"uitgeprobeerd. De keuze tussen spiegelservers met dezelfde prioriteit "
+"gebeurt opnieuw op basis van toeval."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr "Toegestane transportmethodes in een spiegelserverlijst"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+"De beschikbaarheid en de keuzemogelijkheden van transportmethodes in een "
+"spiegelserverlijst wordt beperkt door hoe de APT-cliënt de "
+"spiegelserverlijst benadert. Indien een lokale transportmethode, zoals "
+"<literal>file</literal> of <literal>copy</literal> gebruikt wordt, kan de "
+"spiegelserverlijst ook lokale bronnen bevatten, terwijl een "
+"spiegelserverlijst die benaderd wordt via <literal>http</literal> dat niet "
+"kan. Bovendien kan een spiegelserverlijst niet zelf een spiegelserverlijst "
+"bevatten of geen andere transportmethodewikkels (zoals <package>apt-"
+"transport-tor</package>). Zie de documentatie bij deze transportmethodes "
+"over hoe u ze met de spiegelservermethode kunt gebruiken."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+"Merk op dat versies van apt voorafgaand aan 1.6 geen enkele andere "
+"transportmethode dan <literal>http</literal> ondersteunen."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr "Basaal voorbeeld"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+"Een basaal voorbeeld van een spiegelserverlijst die door alle versies van "
+"apt met een spiegelservermethode (>= 0.7.24) ondersteund wordt, waarbij de "
+"cliënt om het even welke van de drie spiegelservers zal kiezen:"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+"In de veronderstelling dat een bestand met deze inhoud op uw computer "
+"opgeslagen werd als <filename>/etc/apt/mirrorlist.txt</filename>, kan het op "
+"de volgende manier gebruikt worden in &sources-list; (sinds apt 1.6):"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+"Alle versies van de spiegelservermethode ondersteunen een spiegelserverlijst "
+"die via HTTP benaderd kan worden. In de veronderstelling dat het beschikbaar "
+"is op <literal>http://apt.example.org/mirror.lst</literal>, kan het element "
+"uit de bovenstaande sources.list ook als volgt geschreven worden:"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+"Merk op dat met het oog op uniformiteit vanaf apt 1.6 het gebruik van "
+"<literal>mirror+http</literal> de voorkeur zou moeten genieten boven "
+"<literal>mirror</literal>. De functionaliteit blijft dezelfde."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr "Voorbeeld van een met metadata verrijkte spiegelserverselectie"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+"Zoals bij de definiëring van de indeling uitgelegd werd, ondersteunen "
+"versies van apt voorafgaand aan 1.6 dit niet. Ze zullen dus de "
+"spiegelserverlijst niet kunnen ontleden. De voorbeeldspiegelserverlijst is "
+"met opzet gecompliceerd gemaakt om een aantal aspecten van het "
+"selectieproces te illustreren. Er wordt uitgegaan van de volgende "
+"opstelling: de eerste spiegelserver is een lokale spiegelserver die via de "
+"methode file kan benaderd worden, maar mogelijk is deze onvolledig. De "
+"tweede spiegelserver heeft een zeer goede verbinding, maar het is een "
+"gedeeltelijke spiegelserver in die zin dat hij enkel bestanden bevat bedoeld "
+"voor de architecturen <literal>amd64</literal> en <literal>all</literal>. De "
+"overige spiegelservers zijn doorsneespiegelservers die enkel gecontacteerd "
+"moeten worden als de voorgaande niet werken."
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+"In deze opstelling met deze spiegelserverlijst, zal de eerste spiegelserver "
+"gebruikt worden om alle indexbestanden te downloaden, in de veronderstelling "
+"dat de spiegelserverlijst zelf benaderd wordt via een lokale "
+"transportmethode zoals <literal>file</literal>. Indien dit niet het geval "
+"is, of indien de spiegelserver om een andere reden niet bereikbaar is, of "
+"indien hij het gevraagde bestand niet ter beschikking heeft, zal een andere "
+"spiegelserver gebruikt worden om het bestand te bekomen, en die zal gekozen "
+"worden op basis van het type bestand: een indexbestand zal door de laatste "
+"server uit de lijst aangeleverd worden, terwijl een pakket voor de "
+"architectuur <literal>amd64</literal> aangeleverd wordt door de tweede en "
+"die voor bijv. de architectuur <literal>i386</literal> door een van de drie "
+"laatste."
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "nl"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "Gebruikershandleiding voor APT"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr "Versie &apt-product-version;"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr ""
+"Dit document geeft een overzicht van het gebruik van de pakketmanager APT."
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr "Toelichting bij de licentie"
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"\"APT\" en dit document zijn vrije software. U kunt ze verspreiden en/of ze "
+"aanpassen overeenkomstig de bepalingen van de GNU General Public License, "
+"versie 2 of (volgens uw keuze) iedere latere versie, zoals die door de Free "
+"Software Foundation gepubliceerd werd. "
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"Meer details en de volledige licentie vindt u op Debian-systemen in het "
+"bestand /usr/share/common-licenses/GPL."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "Algemeen"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"Momenteel bevat het APT-pakket twee secties, de <command>dselect</command>-"
+"methode van APT en het commandoregelprogramma <command>apt-get</command>. "
+"Beide bieden een manier om pakketten te installeren en te verwijderen en "
+"nieuwe pakketten via het internet op te halen."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "Anatomie van het pakketsysteem"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"Het pakketsysteem van Debian maakt gebruik van een grote hoeveelheid aan "
+"informatie over elk pakket om te helpen verzekeren dat het eenvoudig en "
+"netjes in het systeem ingepast kan worden. Het meest prominente aspect van "
+"zijn functionaliteit is het vereistensysteem."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"Het vereistensysteem laat individuele programma's toe om gebruik te maken "
+"van gemeenschappelijke elementen uit het systeem, zoals bibliotheken. Het "
+"vereenvoudigt het onderbrengen van weinig gebruikte aspecten van een "
+"programma in aparte pakketten om het aantal zaken dat een gewone gebruiker "
+"moet installeren, te beperken. Het laat ook toe te kiezen uit verschillende "
+"mailservers (mail transport agents), X-servers, enz."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"Een eerste stap in het begrijpen van het vereistensysteem is het concept van "
+"een eenvoudige vereiste vatten. Een eenvoudige vereiste houdt in dat een "
+"pakket om behoorlijk te kunnen functioneren, vereist dat een ander pakket "
+"gelijktijdig geïnstalleerd wordt."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"Bijvoorbeeld, mailcrypt is een emacs-uitbreiding die helpt bij het "
+"versleutelen van e-mail met GPG. Zonder dat GPG geïnstalleerd is, is "
+"mailcrypt nutteloos. Dus is mailcrypt afhankelijk van GPG (en is GPG een "
+"vereiste voor mailcrypt). Omdat mailcrypt een uitbreiding van emacs is, is "
+"het bovendien ook daarvan afhankelijk. Zonder emacs is het gewoon "
+"onbruikbaar."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"Een andere belangrijke afhankelijkheid die u goed moet begrijpen is een "
+"conflicterende afhankelijkheid. Dit houdt in dat een pakket, mocht het "
+"tegelijk met een ander pakket geïnstalleerd zijn, niet zal werken en "
+"misschien zelfs heel schadelijk voor het systeem kan zijn. Neem bijvoorbeeld "
+"een mail transport agent (mailserver) zoals sendmail, exim of qmail. Het is "
+"niet mogelijk om er twee van te installeren, omdat ze allemaal op het "
+"netwerk moeten luisteren om mail te ontvangen. Mocht men er toch twee "
+"proberen te installeren, dan zou het systeem ernstig beschadigd raken en om "
+"die reden hebben alle mail transport agents een conflictafhankelijkheid "
+"tegenover alle andere mail transport agents."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"Een bijkomende complicatie is dat de mogelijkheid bestaat dat een pakket "
+"zich als een ander pakket voordoet. Bedenk dat exim en sendmail voor vele "
+"doeleinden identiek zijn: allebei bezorgen ze e-mail en allebei kunnen ze "
+"overweg met een gemeenschappelijke interface. Daarom voorziet het "
+"pakketsysteem voor hen in de mogelijkheid om te verklaren dat ze allebei "
+"mail-transport-agents zijn. Dus verklaren exim en sendmail allebei dat ze "
+"een mail-transport-agent aanbieden. En andere pakketten die een mail "
+"transport agent nodig hebben, hebben mail-transport-agent als vereiste. Bij "
+"het manueel proberen repareren van pakketten kan dit tot heel wat verwarring "
+"leiden."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"Aan een eenvoudige vereiste kan op elk moment al dan niet voldaan worden "
+"door pakketten die reeds geïnstalleerd zijn. APT probeert te helpen bij het "
+"oplossen van vereistenproblemen door een aantal automatische algoritmes aan "
+"te bieden die helpen bij het selecteren van te installeren pakketten."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"<command>apt-get</command> biedt een eenvoudige manier om aan de "
+"commandoregel pakketten te installeren. Anders dan <command>dpkg</command> "
+"beheerst <command>apt-get</command> niet het behandelen van .deb-bestanden. "
+"Het werkt met de eigenlijke naam van het pakket en kan enkel .deb-archieven "
+"installeren vanuit een <emphasis>Source</emphasis> (pakketbron)."
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"Indien u van een http proxy-server gebruik maakt, moet u eerst de "
+"omgevingsvariabele http_proxy instellen; zie sources.list(5)"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"Het eerste <placeholder type=\"footnote\" id=\"0\"/> wat men moet doen "
+"vooraleer <command>apt-get</command> te gebruiken, is de pakketlijst ophalen "
+"uit de <emphasis>Sources</emphasis> (pakketbronnen), zodat het op de hoogte "
+"is van de beschikbare pakketten. Dit doet men met <literal>apt-get update</"
+"literal>. Bijvoorbeeld:"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"Ophalen van http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Ophalen van http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Pakketlijsten worden ingelezen... Klaar\n"
+"Boom van vereisten wordt opgebouwd... Klaar\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr ""
+"Na het bijwerken van de pakketlijst kunnen verschillende commando's gebruikt "
+"worden."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"Upgrade zal proberen om op een gematigde manier het hele systeem bij te "
+"werken. Upgrade zal nooit een nieuw pakket installeren of een bestaand "
+"pakket verwijderen en het zal ook nooit een pakket bijwerken dat een ander "
+"pakket onbruikbaar zou kunnen maken. Dit commando kan dagelijks gebruikt "
+"worden om het systeem veilig bij te werken. Upgrade zal alle pakketten die "
+"het niet kon bijwerken vermelden. Gewoonlijk betekent dit dat zij "
+"afhankelijk zijn van nieuwe pakketten of conflicteren met een ander pakket. "
+"Men kan <command>dselect</command> of <literal>apt-get install</literal> "
+"gebruiken om de installatie van deze pakketten af te dwingen."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"Install wordt gebruikt om bij naam genoemde pakketten te installeren. Het "
+"pakket wordt automatisch opgehaald en geïnstalleerd. Dit kan nuttig zijn als "
+"u reeds de naam van het te installeren pakket kent en geen GUI wenst te "
+"gebruiken om het te kiezen. Gelijk welk aantal pakketten kan voor "
+"installatie opgegeven worden. Ze zullen allemaal opgehaald worden. Install "
+"zal automatisch proberen om een oplossing te vinden voor de "
+"vereistenproblemen die zich met de opgegeven pakketten stellen, het zal er "
+"een samenvatting van weergeven en om bevestiging vragen indien er nog andere "
+"wijzigingen door te voeren zijn dan de opgegeven argumenten."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"Dist-upgrade voert een volledige opwaardering uit en is ontworpen om de "
+"opwaardering tussen verschillende uitgaves van Debian te vergemakkelijken. "
+"Het maakt gebruik van een gesofisticeerd algoritme om de beste combinatie "
+"van pakketten te vinden die geïnstalleerd, opgewaardeerd en verwijderd "
+"moeten worden om op die manier een zo groot mogelijk deel van het systeem op "
+"het niveau van de meest recente uitgave te krijgen. In sommige "
+"omstandigheden kan het aangewezen zijn dist-upgrade te gebruiken in plaats "
+"van zelf tijd te investeren in het manueel oplossen in <command>dselect</"
+"command> van vereistenproblemen. Nadat dist-upgrade zijn operatie beëindigd "
+"heeft, kan men dan <command>dselect</command> gebruiken om eventuele "
+"pakketten die achterwege gelaten werden, te installeren."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"Het is van belang om van nabij te onderzoeken wat dist-upgrade van plan is "
+"te doen. Zijn keuzes kunnen soms redelijk verrassend zijn."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"Er kunnen met <command>apt-get</command> verschillende commandoregelopties "
+"gebruikt worden die beschreven worden in de man-pagina "
+"<citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>. De meest bruikbare optie is <literal>-d</literal> "
+"dat de opgehaalde bestanden niet installeert. Indien het systeem een groot "
+"aantal pakketten moet downloaden en er zou iets fout gegaan zijn, dan zou "
+"het onwenselijk zijn dat er met hun installatie begonnen wordt. Als de optie "
+"<literal>-d</literal> gebruikt werd, kan men de opgehaalde archieven "
+"beginnen installeren door gewoon het commando waarmee men ze opgehaald heeft "
+"opnieuw uit te voeren, maar dan zonder de optie <literal>-d</literal>."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"De APT-methode <command>dselect</command> stelt aan het volledige APT "
+"systeem het GUI <command>dselect</command> ter beschikking voor de selectie "
+"van pakketten. <command>dselect</command> wordt gebruikt om de te "
+"installeren of te verwijderen pakketten te selecteren en APT voert de "
+"eigenlijke operatie uit."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"Om de APT-methode te activeren moet u in <command>dselect</command> "
+"[T]oegang ([A]ccess) selecteren en dan voor de APT-methode kiezen. Er wordt "
+"dan om een stel <emphasis>Sources</emphasis> (pakketbronnen) gevraagd. Dat "
+"zijn plaatsen waarvandaan archieven opgehaald kunnen worden. Dat kunnen "
+"externe internetsites zijn, lokale spiegelservers van Debian of CD's. Elke "
+"bron kan een fragment van het volledige archief van Debian aanbieden en APT "
+"zal ze automatisch combineren om een volledige set van pakketten samen te "
+"stellen. Indien u een CD gebruikt is het goed om die eerst te vermelden en "
+"daarna een spiegelserver waardoor u ook toegang krijgt tot de meest recente "
+"reparaties van bugs. APT zal automatisch eerst de pakketten van uw CD "
+"gebruiken vooraleer pakketten van het internet te downloaden."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" Een lijst van locaties met pakketbronnen voor de distributie instellen\n"
+"\n"
+" Voer het basis-URL van de debian distributie in.\n"
+" Toegangsmethodes waarmee ik kan werken zijn: http file\n"
+"\n"
+" Bijvoorbeeld:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"Het instellen van de <emphasis>Sources</emphasis> (pakketbronnen) begint met "
+"een vraag naar de basis van het Debian archief, wat standaard een HTTP-"
+"spiegelserver is. Nadien wordt gevraagd welke distributie opgehaald moet "
+"worden."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" Voer het label van de op te halen distributie in of een pad\n"
+" naar het pakketbestand dat eindig op een /. Een label van een\n"
+" distributie is typisch iets in de zin van : stable unstable testing non-US\n"
+"\n"
+" Distributie [stable]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"De distributie verwijst naar de versie van Debian in het archief. "
+"<emphasis>stable</emphasis> verwijst naar de recentste uitgebrachte versie "
+"en <emphasis>unstable</emphasis> verwijst naar de versie die ontwikkeld "
+"wordt. <emphasis>non-US</emphasis> is enkel op sommige spiegelservers "
+"beschikbaar en verwijst naar pakketten die encryptietechnologie gebruiken of "
+"andere zaken waarvan de uitvoer uit de Verenigde Staten niet toegelaten is. "
+"Deze pakketten invoeren in de Verenigde Staten is echter wel legaal."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" Voer de op te halen componenten in\n"
+" Componenten zijn typisch iets zoals: main contrib non-free\n"
+"\n"
+" Componenten [main contrib non-free]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"De lijst met componenten verwijst naar een lijst van sub-distributies die "
+"opgehaald moeten worden. De distributie is onderverdeeld op basis van "
+"softwarelicenties. Daarbij bevat main pakketten die vrij zijn volgens de "
+"DFSG (vrije software richtlijnen van Debian), terwijl pakketten in contrib "
+"en non-free zaken bevatten met restricties op het vlak van gebruik of "
+"verspreiding."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"Gelijk welk aantal pakketbronnen kan opgegeven worden. Het script dat het "
+"instellen ervan begeleidt, zal vragen blijven stellen totdat u alles wat u "
+"wenste ingegeven hebt."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"Vooraleer met het gebruik van <command>dselect</command> te beginnen moet u "
+"de lijst van beschikbare pakketten bijwerken door in het menu te kiezen voor "
+"[B]ijwerken ([U]pdate). Dit is een uitbreiding van <literal>apt-get update</"
+"literal> die de opgehaalde informatie aan <command>dselect</command> "
+"doorgeeft. [B]ijwerken ([U]pdate) moet uitgevoerd worden, zelfs indien "
+"voordien <literal>apt-get update</literal> uitgevoerd werd."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"U kunt dan voortdoen en uw selectie maken met [S]electeer ([S]elect) en "
+"vervolgens de installatie uitvoeren met [I]nstalleren ([I]nstall). Indien u "
+"de APT-methode gebruikt zijn de commando's [C]onfigureer ([C]onfig) en "
+"[V]erwijder ([R]emove) overbodig. Het commando [I]nstalleren ([I]nstall) "
+"voert ze allemaal samen uit."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"Standaard verwijdert APT automatisch de opgehaalde pakketbestanden (.deb) "
+"nadat ze succesvol geïnstalleerd werden. Om dit gedrag aan te passen moet u "
+"<literal>Dselect::clean \"prompt\";</literal> plaatsen in /etc/apt/apt.conf."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "De interface"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"De <command>dselect</command>-methode is eigenlijk een geheel van scripts "
+"die rondom <command>apt-get</command> gebouwd werden. De methode biedt "
+"eigenlijk meer functionaliteit dan aanwezig is in <command>apt-get</command> "
+"alleen."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"Zowel de <command>dselect</command>-methode van APT als <command>apt-get</"
+"command> maken gebruik van dezelfde interface. Het is een eenvoudig systeem "
+"dat u in het algemeen zegt wat het van plan is te doen en dan voor de "
+"uitvoering ervan gaat. <placeholder type=\"footnote\" id=\"0\"/> Nadat het "
+"een samenvatting gegeven heeft van wat er zal gebeuren, zal APT een aantal "
+"informatieve statusberichten weergeven, waardoor u kunt inschatten hoe ver "
+"het gevorderd is en hoeveel werk er nog te verrichten is."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "Opstarten"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"Alvorens met een operatie te beginnen, behalve bij update, voert APT een "
+"aantal acties uit om zijn interne status klaar te maken. Het voert ook een "
+"aantal controles uit op de status van het systeem. Op om het even welk "
+"moment kunnen deze operaties uitgevoerd worden door het commando "
+"<literal>apt-get check</literal> uit te voeren."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"Pakketlijsten worden ingelezen... Klaar (Reading Package Lists... Done)\n"
+"Boom van vereisten wordt opgebouwd... Klaar (Building Dependency Tree... Done)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"Het eerste wat het doet is alle pakketbestanden in het geheugen laden. APT "
+"maakt gebruik van een bufferingsschema, waardoor de operatie sneller zal "
+"verlopen bij een tweede uitvoering. Indien sommige pakketbestanden niet "
+"gevonden worden, zullen ze overgeslagen worden en er zal een waarschuwing "
+"gegeven worden bij het afsluiten van apt-get."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"De laatste operatie voert een gedetailleerde analyse uit van de "
+"vereistenboom op het systeem. Het voert een controle uit van elke vereiste "
+"van elk geïnstalleerd of uitgepakt pakket en gaat na of die OK is. Mocht "
+"daarbij een probleem ontdekt worden, dan zal een rapport weergegeven worden "
+"en <command>apt-get</command> zal de operatie niet voortzetten."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"Pakketlijsten worden ingelezen... Klaar\n"
+"Boom van vereisten wordt opgebouwd... Klaar\n"
+"U zou 'apt --fix-broken install' kunnen uitvoeren om dit te repareren.\n"
+"Sorry, maar de volgende pakketten hebben niet-voldane vereisten:\n"
+" 9fonts: Vereist: xlib6g maar dit is niet geïnstalleerd\n"
+" uucp: Vereist: mailx maar dit is niet geïnstalleerd\n"
+" blast: Vereist: xlib6g (&gt;= 3.3-5) maar dit is niet geïnstalleerd\n"
+" adduser: Vereist: perl-base maar dit is niet geïnstalleerd\n"
+" aumix: Vereist: libgpmg1 maar dit is niet geïnstalleerd\n"
+" debiandoc-sgml: Vereist: sgml-base maar dit is niet geïnstalleerd\n"
+" bash-builtins: Vereist: bash (&gt;= 2.01) maar 2.0-3 is geïnstalleerd\n"
+" cthugha: Vereist: svgalibg1 maar dit is niet geïnstalleerd\n"
+" Vereist: xlib6g (&gt;= 3.3-5) maar dit is niet geïnstalleerd\n"
+" libreadlineg2: Conflicteert met:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"Het systeem uit dit voorbeeld kampt met veel problemen, inclusief een "
+"ernstig probleem met libreadlineg2. Voor elk pakket met onvoldane vereisten "
+"wordt een regel weergegeven met een aanduiding van het pakket dat met het "
+"probleem geconfronteerd wordt en de vereisten waaraan niet voldaan zijn. Ook "
+"een korte verklaring waarom het pakket een vereistenprobleem heeft wordt "
+"toegevoegd."
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"APT neemt evenwel alle gekende vereisten in overweging en probeert het "
+"ontstaan van defecte pakketten te voorkomen."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"Een systeem kan op twee manieren terechtkomen in een dergelijke defecte "
+"staat. Een eerste oorzaak kan <command>dpkg</command> zijn aan wie sommige "
+"subtiele onderlinge relaties tussen pakketten ontgaan zijn bij het uitvoeren "
+"van opwaarderingen. <placeholder type=\"footnote\" id=\"0\"/>. Een tweede "
+"oorzaak is het mislukken van de operatie in de loop van de installatie van "
+"een pakket. In een dergelijk geval kan een pakket uitgepakt zijn zonder dat "
+"zijn vereisten geïnstalleerd werden."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"De tweede situatie is veel minder ernstig dan de eerste omdat APT sommige "
+"beperkingen instelt op de volgorde waarin pakketten geïnstalleerd worden. In "
+"beide gevallen zal het toevoegen van de optie <literal>-f</literal> aan het "
+"commando <command>apt-get</command> APT ertoe aanzetten om een mogelijke "
+"oplossing voor het probleem te zoeken en om dan voort te gaan. De "
+"<command>dselect</command>-methode van APT voegt steeds de optie <literal>-"
+"f</literal> toe om bij het mislukken van een script van de pakketonderhouder "
+"toch een vlotte voortgang te hebben."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"Nochtans, als de optie <literal>-f</literal> gebruikt wordt voor het "
+"herstellen van een ernstig defect systeem ten gevolge van de eerste oorzaak, "
+"dan kan het gebeuren dat het commando ofwel onmiddellijk faalt of dat het in "
+"de loop van de installatiesequentie tot een mislukking komt. In beide "
+"gevallen zal het nodig zijn om manueel gebruik te maken van dpkg (wellicht "
+"met forceeropties) om de situatie in voldoende mate te corrigeren zodat APT "
+"in staat is voort te gaan."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "Het statusrapport"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"Vooraleer het voortgaat zal <command>apt-get</command> een rapport tonen "
+"over wat er te gebeuren staat. In het algemeen geeft het rapport het type "
+"operatie weer dat uitgevoerd zal worden, maar dit bevat veel "
+"gemeenschappelijke elementen. In alle gevallen reflecteren de lijsten de "
+"eindstand van zaken, rekening houdend met de optie <literal>-f</literal> en "
+"alle andere mogelijke activiteiten die relevant zijn voor het uit te voeren "
+"commando."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "De lijst met extra pakketten"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"De volgende extra pakketten zullen geïnstalleerd worden:\n"
+"(The following extra packages will be installed:)\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"De lijst met extra pakketten geeft alle pakketten weer die geïnstalleerd of "
+"opgewaardeerd zullen worden bovenop degene die aan de commandoregel "
+"opgegeven werden. Die lijst wordt enkel aangemaakt voor een "
+"<literal>install</literal> commando. De weergegeven pakketten zijn vaak het "
+"resultaat van een automatische installatie."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "De te verwijderen pakketten"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"De volgende pakketten zullen VERWIJDERD worden:\n"
+"(The following packages will be REMOVED:)\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"De lijst met te verwijderen pakketten geeft alle pakketten weer die van het "
+"systeem verwijderd zullen worden. Ze kan bij elk van de operaties getoond "
+"worden en zou zorgvuldig nagekeken moeten worden om zich ervan te "
+"vergewissen dat niets belangrijks weggenomen zal worden. Zeker de optie "
+"<literal>-f</literal> lokt vaak het verwijderen van pakketten uit en in dat "
+"geval is extra zorgvuldigheid zeker aangewezen. De lijst kan pakketten "
+"bevatten die verwijderd zullen worden omdat ze slechts ten dele "
+"geïnstalleerd werden, mogelijks ten gevolge van een afgebroken installatie."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "De lijst nieuw te installeren pakketten"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"De volgende NIEUWE pakketten zullen geïnstalleerd worden:\n"
+"(The following NEW packages will installed:)\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"De lijst met nieuwe pakketten is enkel een geheugensteun voor wat er gaat "
+"gebeuren. De vermelde pakketten worden nu nog niet op het systeem "
+"geïnstalleerd, maar dat zal gebeuren als APT uitgevoerd wordt."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "De lijst van tegengehouden pakketten"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"De volgende pakketten werden tegengehouden\n"
+"(The following packages have been kept back)\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"Telkens het hele systeem opgewaardeerd wordt, bestaat de kans dat nieuwe "
+"versies van pakketten niet geïnstalleerd kunnen worden omdat ze nieuwe zaken "
+"vereisen of conflicteren met reeds geïnstalleerde zaken. In dat geval zal "
+"dat pakket vermeld worden in de lijst van tegengehouden pakketten. De beste "
+"manier om de daar vermelde pakketten te overtuigen om zich te laten "
+"installeren is <literal>apt-get install</literal> te gebruiken of "
+"<command>dselect</command> te gebruiken om hen een oplossing voor de "
+"problemen te laten vinden."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "Waarschuwing over tegengehouden pakketten"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"De volgende tegengehouden pakketten zullen gewijzigd worden:\n"
+"(The following held packages will be changed:)\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"Soms kan het gebeuren dat u APT vraagt om een als tegengehouden gemarkeerd "
+"pakket te installeren. In dat geval geeft het een waarschuwing dat het "
+"tegengehouden pakket gewijzigd zal worden. Dit zou enkel mogen voorkomen bij "
+"een dist-upgrade of een install."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "Afsluitende samenvatting"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+"Tenslotte zal APT een samenvatting weergeven van alle wijzigingen die "
+"aangebracht zullen worden."
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"206 pakketten opgewaardeerd, 8 nieuw geïnstalleerd, 23 te verwijderen en 51 niet opgewaardeerd.\n"
+"12 pakketten niet volledig geïnstalleerd of verwijderd.\n"
+"Moet 65.7M/66.7M archieven ophalen. Na uitpakken zal 26.5M gebruikt worden.\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"De eerste regel van de samenvatting is gewoon een beknopte versie van alle "
+"lijsten en bevat het aantal opwaarderingen - dat zijn reeds geïnstalleerde "
+"pakketten waarvoor nieuwere versies beschikbaar zin. De tweede regel toont "
+"het aantal slecht geconfigureerde pakketten, mogelijks het gevolg van een "
+"afgebroken installatie. De laatste regel toont de opslagruimte die door de "
+"installatie gebruikt zal worden. Het eerste paar getallen verwijst naar de "
+"grootte van de archiefbestanden. Het eerste getal geeft het aantal bytes op "
+"dat van externe locaties opgehaald moet worden en het tweede geeft de "
+"gezamenlijke omvang van alle benodigde archieven op. Het volgende getal "
+"geeft het verschil in grootte op tussen de actueel geïnstalleerde pakketten "
+"en de nieuwe situatie. Grofweg is dit vergelijkbaar met de benodigde ruimte "
+"in /usr nadat alles achter de rug is. Indien een groot aantal pakketten "
+"verwijderd wordt, kan de opgegeven waarde verwijzen naar de ruimte die vrij "
+"zal komen."
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"Door de optie -u te gebruiken kan men rapporten laten opmaken over de op te "
+"waarderen pakketten. Deze rapporten zijn vergelijkbaar met de vorige "
+"voorbeelden."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "De statusweergave"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"Tijdens het downloaden van archieven en pakketbestanden geeft APT een aantal "
+"statusberichten weer."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"Ophalen:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Ophalen:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Geraakt http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Ophalen:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Ophalen:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Wachten op bestand' 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"Regels die beginnen met <emphasis>Ophalen</emphasis> worden weergegeven "
+"wanneer APT een bestand begint op te halen, terwijl de laatste regel de "
+"voortgang van de download aangeeft. Het eerste percentage op de "
+"voortgangsregel verwijst naar het totale percentage van alle bestanden samen "
+"dat afgewerkt is. Aangezien de grootte van de Packages-bestanden niet bekend "
+"is, maakt <literal>apt-get update</literal> een schatting van het reeds "
+"afgewerkte percentage, maar die is jammer genoeg in een zekere mate "
+"inaccuraat."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"De volgende sectie van de statusregel wordt voor elke downloadtaak herhaald "
+"en geeft de operatie die uitgevoerd wordt weer evenals wat nuttige "
+"informatie over wat er aan het gebeuren is. Soms zal die sectie gewoon "
+"<emphasis>Forking</emphasis> bevatten, wat er op wijst dat het OS de "
+"downloadmodule aan het laden is. Het eerste woord na het [ is het volgnummer "
+"van de ophaaltaak zoals dat op de voortgangsregels getoond wordt. Het "
+"volgende woord is de verkorte vorm van de naam van het object dat opgehaald "
+"wordt. Als het archieven betreft, zal het de naam van het pakket dat "
+"opgehaald wordt bevatten."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"Tussen de enkelvoudige aanhalingstekens staat een informatieve tekst die de "
+"voortgang weergeeft van de onderhandelingsfase van de download. Gewoonlijk "
+"evolueert dat van <emphasis>Aan het verbinden</emphasis> over <emphasis>Aan "
+"het wachten op bestand</emphasis> naar <emphasis>Aan het downloaden</"
+"emphasis> of <emphasis>Aan het hervatten</emphasis>. De laatste waarde geeft "
+"het aantal bytes weer dat opgehaald werd van de externe site. Als het proces "
+"van downloaden begonnen is, wordt dit weergegeven als <literal>102/10.2k</"
+"literal>, hetgeen betekent dat er reeds 102 bytes opgehaald werden van een "
+"verwacht totaal van 10.2 kilobytes. De weergave van de volledige grootte "
+"wordt steeds getoond in een 4-cijfernotatie om plaats te sparen. Na de "
+"weergave van de grootte komt het reeds opgehaalde percentage van het "
+"bestand. Het voorlaatste element geeft de huidige gemiddelde snelheid op. "
+"Deze waarde wordt elke 5 seconden ververst en geeft de snelheid van de "
+"gegevensoverdracht voor die periode weer. Tenslotte wordt de verwachte duur "
+"van de gegevensoverdracht weergegeven. Dit wordt regelmatig ververst en "
+"weerspiegelt de tijd die nodig is om alles af te werken aan het getoonde "
+"tempo van gegevensoverdracht."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"De statusweergave wordt iedere halve seconde ververst en geeft zo een "
+"constante feedback over het downloadproces terwijl de Ophalen-regels naar "
+"boven scrollen telkens er met een nieuw bestand wordt begonnen. Vermits de "
+"statusweergave permanent ververst wordt, is dit niet geschikt om in een "
+"logbestand opgeslagen te worden. Gebruik de optie <literal>-q</literal> om "
+"de statusweergave te onderdrukken."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"APT gebruikt <command>dpkg</command> om de archieven te installeren en "
+"schakelt na het voltooien van het downloaden over op de interface "
+"<command>dpkg</command>. Tijdens het verwerken van de pakketten zal "
+"<command>dpkg</command> een aantal vragen stellen en ook de pakketten zelf "
+"kunnen verschillende vragen stellen. Aan elke vraag gaat er gewoonlijk een "
+"beschrijving vooraf van waarover de vraag gaat. De vragen zijn dermate "
+"gevarieerd dat het niet mogelijk is om ze hier volledig te behandelen."
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "APT offline gebruiken"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"Dit document beschrijft hoe APT te gebruiken in een netwerkloze omgeving. "
+"Het behandelt in het bijzonder de zogenaamde 'sneaker-net'-benadering voor "
+"het uitvoeren van opwaarderingen (De sneakernet-aanpak gebruikt fysieke "
+"media in plaats van het netwerk)."
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "Inleiding"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "Overzicht"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"Normaal heeft APT rechtstreeks toegang tot een Debian archief nodig, ofwel "
+"op lokale media ofwel via een netwerk. Ook keert regelmatig de klacht terug "
+"dat een bepaalde Debiancomputer over een trage verbinding, zoals een modem, "
+"beschikt, terwijl er een andere computer met een zeer snelle verbinding "
+"beschikbaar is, die echter fysiek op een afstand van elkaar staan."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"Een oplossing hiervoor is gebruik maken van grote verwijderbare media, zoals "
+"een Zip-schijf of een SuperDisc-schijf. Dergelijke schijven zijn onvoldoende "
+"groot om een volledig Debian archief te bevatten, maar ze kunnen er met "
+"gemak een subset van bevatten die voor de meeste gebruikers voldoende groot "
+"is. Het concept is om APT te gebruiken om een lijst van pakketten samen te "
+"stellen die men nodig heeft en die dan op te halen met een computer met een "
+"goede verbinding en ze op de schijf te plaatsen. Het is zelfs mogelijk om "
+"een andere Debian-computer met APT te gebruiken of een computer met een "
+"volledig ander OS en een download-hulpmiddel zoals wget. Laten we aannemen "
+"dat <emphasis>'externe-computer'</emphasis> de computer is die de pakketten "
+"downloadt en <emphasis>'computer-in-kwestie'</emphasis> degene met een "
+"slechte of geen verbinding."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"Dit wordt gerealiseerd door op een creatieve manier het configuratiebestand "
+"van APT te manipuleren. De essentiële aanname is dat APT gezegd wordt om op "
+"een schijf te zoeken naar de archiefbestanden die het nodig heeft. Merk op "
+"dat de schijf geformatteerd moet zijn voor een bestandssysteem dat overweg "
+"kan met lange bestandsnamen, zoals ext2, fat32 of vfat."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "Op beide computers APT gebruiken"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"Indien APT op beide computers aanwezig is, is de configuratie het "
+"makkelijkst. Het basisconcept bestaat erin om een kopie van het "
+"statusbestand op de schijf te plaatsen en 'externe-computer' te gebruiken om "
+"de meest recente pakketbestanden op te halen en uit te laten maken welke "
+"bestanden gedownload moeten worden. De mappenstructuur op de schijf moet er "
+"zo uitzien:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "Het configuratiebestand"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"Het configuratiebestand moet APT opdragen om zijn bestanden op de schijf op "
+"te slaan en om ook de configuratiebestanden op de schijf te gebruiken. In "
+"het bestand sources.list moeten de eigenlijke sites vermeld staan die u "
+"vanaf 'externe-computer' wenst te gebruiken en het statusbestand moet een "
+"kopie zijn van <emphasis>/var/lib/dpkg/status</emphasis> op 'computer-in-"
+"kwestie'. Noteer dat indien u van een lokaal archief gebruik maakt, u URI's "
+"van het type copy moet gebruiken, waarvan de syntaxis identiek is aan die "
+"van URI's van het type file."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt.conf</emphasis> moet de informatie bevatten die nodig is om "
+"APT de schijf te doen gebruiken:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* Dit is niet noodzakelijk als de twee computers dezelfde architectuur\n"
+" hebben. Het vertelt APT van 'externe-computer' welke architectuur\n"
+" 'computer-in-kwestie' heeft */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Gebruik maken van de schijf voor statusinformatie en het statusbestand\n"
+" omleiden van /var/lib/dpkg wat de standaardlocatie ervan is */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binaire caches zullen lokaal opgeslagen worden\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Locatie van de lijst met pakketbronnen.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"U krijgt meer details als u de man-pagina apt.conf raadpleegt en het "
+"voorbeeldconfiguratiebestand in <emphasis>/usr/share/doc/apt/examples/apt."
+"conf</emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"Het eerste wat moet gebeuren is op 'computer-in-kwestie' de schijf "
+"aankoppelen en <emphasis>/var/lib/dpkg/status</emphasis> er naartoe "
+"kopiëren. U zult ook de mappen moeten aanmaken die in het overzicht "
+"beschreven werden, <emphasis>archives/partial/</emphasis> en <emphasis>lists/"
+"partial/</emphasis>. Neem vervolgens de schijf mee naar 'externe-computer' "
+"en configureer het bestand sources.list. Voer op 'externe-computer' de "
+"volgende opdracht uit:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT haalt de bestanden Packages op ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT haalt alle pakketbestanden op die nodig zijn om 'computer-in-kwestie' op te waarderen ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"Het commando dist-upgrade kan door om het even welk ander standaard commando "
+"van APT vervangen worden, in het bijzonder dselect-upgrade. U kunt zelfs een "
+"front-end voor APT gebruiken, zoals <emphasis>dselect</emphasis>. Dit stelt "
+"wel een probleem bij het opnieuw communiceren van de selecties naar "
+"'computer-in-kwestie'."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"Nu bevat de schijf alle indexbestanden en archieven die nodig zijn om "
+"'computer-in-kwestie' op te waarderen. Neem de schijf terug mee en voer het "
+"volgende uit:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT maakt een lokale kopie van de cachebestanden aan ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Of elk ander APT commando ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"Met het oog op een goede werking is het nodig om opnieuw op te geven dat het "
+"statusbestand terug het lokale moet zijn. Dit is zeer belangrijk!"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"Indien u dselect gebruikt, kunt u de zeer riskante operatie uitvoeren om "
+"disc/status naar /var/lib/dpkg/status te kopiëren, waardoor alle selecties "
+"die u op 'externe-computer' uitvoerde, bijgewerkt worden. Ik raad mensen ten "
+"stelligste aan enkel selecties uit te voeren op de lokale computer - maar "
+"het kan zijn dat dit niet altijd mogelijk is. Kopieer het statusbestand NIET "
+"indien APT of dpkg ondertussen uitgevoerd werden!!"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "APT en wget gebruiken"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> is een populair en overdraagbaar gereedschap dat "
+"bijna op elke computer gebruikt kan worden. In tegenstelling tot de "
+"voorgaande methode vereist dit wel dat de Debian-computer reeds een lijst "
+"van beschikbare pakketten heeft."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"Het basisconcept is om een schijf te maken waarop enkel de archiefbestanden "
+"gedownload worden vanaf de externe site. Dit gebeurt door het gebruik van de "
+"optie --print-uris van apt-get, waarna een script voor wget gemaakt wordt "
+"waarmee het eigenlijke ophalen van de pakketten uitgevoerd wordt."
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "Werking"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"In tegenstelling tot de vorige techniek zijn hier geen bijzondere "
+"configuratiebestanden nodig. We maken hoofdzakelijk gebruik van de standaard "
+"commando's van APT om de bestandslijst te genereren."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade\n"
+" [ Antwoord nee op de vraag, vergewis u ervan dat u akkoord gaat met de acties ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"Ook om het even welk ander commando dan dist-upgrade kon hier gebruikt "
+"worden, met inbegrip van dselect-upgrade."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"Het bestand /disc/wget-script zal nu een lijst van wget-commando's bevatten "
+"die uitgevoerd moeten worden om de benodigde archieven op te halen. Dit "
+"script moet uitgevoerd worden terwijl de actieve map gebruikt wordt als "
+"aankoppelpunt voor de schijf, waardoor de uitvoer op de schijf opgeslagen "
+"zal worden."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr ""
+"Op 'externe-computer' wordt dan iets in de zin van het volgende gedaan:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wachten.. ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"Nadat de archieven gedownload werden en de schijf terug meegenomen werd naar "
+"de Debian-computer, kan de installatie voortgezet worden met"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr ""
+"En dit zal gebruik maken van de reeds opgehaalde archieven op de schijf."
+
+#~ msgid ""
+#~ "<literal>http::Proxy</literal> sets the default proxy to use for HTTP "
+#~ "URIs. It is in the standard form of <literal>http://[[user][:pass]@]host[:"
+#~ "port]/</literal>. Per host proxies can also be specified by using the "
+#~ "form <literal>http::Proxy::&lt;host&gt;</literal> with the special "
+#~ "keyword <literal>DIRECT</literal> meaning to use no proxies. If no one of "
+#~ "the above settings is specified, <envar>http_proxy</envar> environment "
+#~ "variable will be used."
+#~ msgstr ""
+#~ "<literal>http::Proxy</literal> stelt de te gebruiken standaard-proxy in "
+#~ "voor URI's van het type HTTP. De standaardvorm ervan is <literal>http://"
+#~ "[[user][:pass]@]host[:port]/</literal>. Proxy's kunnen ook per computer "
+#~ "ingesteld worden volgens het schema <literal>http::Proxy::&lt;host&gt;</"
+#~ "literal>, waarbij het bijzondere trefwoord <literal>DIRECT</literal> "
+#~ "betekent dat geen proxy's gebruikt worden. Indien geen van de "
+#~ "bovenstaande instellingen opgegeven werd, zal de omgevingsvariabele "
+#~ "<envar>http_proxy</envar> gebruikt worden."
+
+#~ msgid ""
+#~ "The <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> and "
+#~ "<literal>proxy</literal> options work for HTTPS URIs in the same way as "
+#~ "for the <literal>http</literal> method, and default to the same values if "
+#~ "they are not explicitly set. The <literal>Pipeline-Depth</literal> option "
+#~ "is not yet supported."
+#~ msgstr ""
+#~ "De opties <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> en "
+#~ "<literal>proxy</literal> werken op dezelfde manier voor URI's van het "
+#~ "type HTTPS als voor de <literal>http</literal>-methode en hebben dezelfde "
+#~ "standaardwaarden als ze niet expliciet ingesteld werden. De optie "
+#~ "<literal>Pipeline-Depth</literal> wordt momenteel nog niet ondersteund."
+
+#~ msgid ""
+#~ "<literal>CaInfo</literal> suboption specifies place of file that holds "
+#~ "info about trusted certificates. <literal>&lt;host&gt;::CaInfo</literal> "
+#~ "is the corresponding per-host option. <literal>Verify-Peer</literal> "
+#~ "boolean suboption determines whether or not the server's host certificate "
+#~ "should be verified against trusted certificates. <literal>&lt;host&gt;::"
+#~ "Verify-Peer</literal> is the corresponding per-host option. "
+#~ "<literal>Verify-Host</literal> boolean suboption determines whether or "
+#~ "not the server's hostname should be verified. <literal>&lt;host&gt;::"
+#~ "Verify-Host</literal> is the corresponding per-host option. "
+#~ "<literal>SslCert</literal> determines what certificate to use for client "
+#~ "authentication. <literal>&lt;host&gt;::SslCert</literal> is the "
+#~ "corresponding per-host option. <literal>SslKey</literal> determines what "
+#~ "private key to use for client authentication. <literal>&lt;host&gt;::"
+#~ "SslKey</literal> is the corresponding per-host option. "
+#~ "<literal>SslForceVersion</literal> overrides default SSL version to use. "
+#~ "It can contain either of the strings '<literal>TLSv1</literal>' or "
+#~ "'<literal>SSLv3</literal>'. <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> is the corresponding per-host option."
+#~ msgstr ""
+#~ "De suboptie <literal>CaInfo</literal> specificeert de plaats waar het "
+#~ "bestand zich bevindt dat informatie bevat over vertrouwde certificaten. "
+#~ "<literal>&lt;host&gt;::CaInfo</literal> is de overeenkomstige optie voor "
+#~ "een specifieke computer. De booleaanse suboptie <literal>Verify-Peer</"
+#~ "literal> bepaalt of het computercertificaat van de server al dan niet "
+#~ "geverifieerd moet worden tegenover de vertrouwde certificaten. "
+#~ "<literal>&lt;host&gt;::Verify-Peer</literal> is de overeenkomstige optie "
+#~ "voor een specifieke computer. De booleaanse suboptie <literal>Verify-"
+#~ "Host</literal> bepaalt of de computernaam van de server wel of niet "
+#~ "geverifieerd moet worden. <literal>&lt;host&gt;::Verify-Host</literal> is "
+#~ "de overeenkomstige optie voor een specifieke computer. <literal>SslCert</"
+#~ "literal> bepaalt welk certificaat gebruikt moet worden voor de "
+#~ "authenticatie van de cliënt. <literal>&lt;host&gt;::SslCert</literal> is "
+#~ "de overeenkomstige optie voor een specifieke computer. <literal>SslKey</"
+#~ "literal> bepaalt welke privésleutel gebruikt moet worden voor de "
+#~ "authenticatie van de cliënt. <literal>&lt;host&gt;::SslKey</literal> is "
+#~ "de overeenkomstige optie voor een specifieke computer. "
+#~ "<literal>SslForceVersion</literal> overschrijft de standaardinstelling "
+#~ "voor de te gebruiken versie van SSL. Het kan ofwel '<literal>TLSv1</"
+#~ "literal>' of '<literal>SSLv3</literal>' als tekenreeks bevatten. "
+#~ "<literal>&lt;host&gt;::SslForceVersion</literal> is de overeenkomstige "
+#~ "optie voor een specifieke computer."
+
+#~ msgid ""
+#~ "The http scheme specifies an HTTP server for the archive. If an "
+#~ "environment variable <envar>http_proxy</envar> is set with the format "
+#~ "http://server:port/, the proxy server specified in <envar>http_proxy</"
+#~ "envar> will be used. Users of authenticated HTTP/1.1 proxies may use a "
+#~ "string of the format http://user:pass@server:port/. Note that this is an "
+#~ "insecure method of authentication."
+#~ msgstr ""
+#~ "De methode http specificeert een HTTP-server voor het archief. Indien een "
+#~ "omgevingsvariabele <envar>http_proxy</envar> bestaat in het formaat "
+#~ "http://server:port/, dan zal de in <envar>http_proxy</envar> opgegeven "
+#~ "proxy-server gebruikt worden. Gebruikers van een geauthenticeerde "
+#~ "HTTP/1.1 proxy kunnen een tekenreeks gebruiken volgens het formaat http://"
+#~ "user:pass@server:port/. Merk op dat dit geen veilige authenticatiemethode "
+#~ "is."
+
+#~ msgid ""
+#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if "
+#~ "it encounters unauthenticated archives to give a slightly longer grace "
+#~ "period on this backward compatibility effecting change. This exception "
+#~ "will be removed in future releases and you can opt-out of this grace "
+#~ "period by setting the configuration option <option>Binary::apt-get::"
+#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> "
+#~ "or <option>--no-allow-insecure-repositories</option> on the command line."
+#~ msgstr ""
+#~ "Bij wijze van tijdelijke uitzondering geeft &apt-get; (niet &apt;!) enkel "
+#~ "waarschuwingen als het niet-geauthenticeerde archieven tegenkomt om zo "
+#~ "deze wijziging die de compatibiliteit aantast, enigszins langer uit te "
+#~ "stellen. Deze uitzondering zal uit toekomstige uitgaven verwijderd worden "
+#~ "en u kunt nu reeds kiezen om geen gebruik te maken van dit uitstel door "
+#~ "de configuratie-optie <option>Binary::apt-get::Acquire::"
+#~ "AllowInsecureRepositories</option> op <literal>false</literal> in te "
+#~ "stellen of door aan de commandoregel de optie <option>--no-allow-insecure-"
+#~ "repositories</option> te gebruiken."
+
+#~ msgid "Archive Configuration"
+#~ msgstr "Configuratie op archiefniveau"
+
+#~ msgid "dpkg trigger usage (and related options)"
+#~ msgstr "het gebruik van triggers door dpkg (en gerelateerde opties)"
+
+#~ msgid ""
+#~ "APT can call &dpkg; in such a way as to let it make aggressive use of "
+#~ "triggers over multiple calls of &dpkg;. Without further options &dpkg; "
+#~ "will use triggers once each time it runs. Activating these options can "
+#~ "therefore decrease the time needed to perform the install or upgrade. "
+#~ "Note that it is intended to activate these options per default in the "
+#~ "future, but as it drastically changes the way APT calls &dpkg; it needs a "
+#~ "lot more testing. <emphasis>These options are therefore currently "
+#~ "experimental and should not be used in production environments.</"
+#~ "emphasis> It also breaks progress reporting such that all front-ends will "
+#~ "currently stay around half (or more) of the time in the 100% state while "
+#~ "it actually configures all packages."
+#~ msgstr ""
+#~ "APT kan &dpkg; zodanig aanroepen dat het op een agressieve manier gebruik "
+#~ "maakt van triggers in de loop van de verschillende stappen waarin &dpkg; "
+#~ "aangeroepen wordt. Zonder extra opties zal &dpkg; een keer gebruik maken "
+#~ "van triggers tijdens iedere uitvoering. Het activeren van deze opties kan "
+#~ "daarom de tijd beperken die nodig is voor het uitvoeren van een "
+#~ "installatie of een opwaardering. Merk op dat het de bedoeling is om deze "
+#~ "opties in de toekomst standaard te activeren, maar aangezien het op een "
+#~ "drastische manier ingrijpt op de manier waarop APT &dpkg; aanroept, is "
+#~ "grondiger testen noodzakelijk. <emphasis>Deze opties worden daarom "
+#~ "momenteel als experimenteel beschouwd en worden best niet in "
+#~ "productieomgevingen gebruikt.</emphasis> Ook de voortgangsindicatie wordt "
+#~ "erdoor ontregeld, met als gevolg dat die bij alle front-ends momenteel "
+#~ "ongeveer de helft van de tijd (of langer) op 100% voltooid blijft staan, "
+#~ "terwijl ondertussen de configuratie van alle pakketten aan de gang is."
+
+#~ msgid ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+#~ msgstr ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+
+#~ msgid ""
+#~ "Note that it is not guaranteed that APT will support these options or "
+#~ "that these options will not cause (big) trouble in the future. If you "
+#~ "have understand the current risks and problems with these options, but "
+#~ "are brave enough to help testing them, create a new configuration file "
+#~ "and test a combination of options. Please report any bugs, problems and "
+#~ "improvements you encounter and make sure to note which options you have "
+#~ "used in your reports. Asking &dpkg; for help could also be useful for "
+#~ "debugging proposes, see e.g. <command>dpkg --audit</command>. A defensive "
+#~ "option combination would be <placeholder type=\"literallayout\" id=\"0\"/>"
+#~ msgstr ""
+#~ "Merk op dat er geen garantie bestaat dat APT deze opties zal blijven "
+#~ "ondersteunen of dat ze in de toekomst geen (grote) problemen zullen "
+#~ "veroorzaken. Indien u een goed begrip heeft van de actuele risico's en "
+#~ "problemen met deze opties, maar moedig genoeg bent om ze te helpen "
+#~ "testen, maakt u best een nieuw configuratiebestand aan om een combinatie "
+#~ "van opties te testen. Gelieve bugs, problemen en verbeteringen die u bent "
+#~ "tegengekomen te rapporteren en vergeet in uw rapport zeker niet te "
+#~ "vermelden welke opties u gebruikte. Ook &dpkg; om hulp vragen kan nuttig "
+#~ "zijn met het oog op het opsporen van problemen, zie bijvoorbeeld "
+#~ "<command>dpkg --audit</command>. Een defensieve combinatie van opties zou "
+#~ "<placeholder type=\"literallayout\" id=\"0\"/> zijn."
+
+#~ msgid ""
+#~ "Add the no triggers flag to all &dpkg; calls (except the ConfigurePending "
+#~ "call). See &dpkg; if you are interested in what this actually means. In "
+#~ "short: &dpkg; will not run the triggers when this flag is present unless "
+#~ "it is explicitly called to do so in an extra call. Note that this option "
+#~ "exists (undocumented) also in older APT versions with a slightly "
+#~ "different meaning: Previously these option only append --no-triggers to "
+#~ "the configure calls to &dpkg; - now APT will also add this flag to the "
+#~ "unpack and remove calls."
+#~ msgstr ""
+#~ "De vlag \"geen triggers\" toevoegen aan alle aanroepen van &dpkg; "
+#~ "(behalve voor de aanroep ConfigurePending). Raadpleeg &dpkg; indien u "
+#~ "geïnteresseerd bent in wat dit daadwerkelijk betekent. In het kort: als "
+#~ "deze vlag aanwezig is, zal &dpkg; de triggers niet uitvoeren tenzij het "
+#~ "in een extra aanroep expliciet opgedragen wordt dat wel te doen. Merk op "
+#~ "dat deze optie in een lichtjes andere betekenis (ongedocumenteerd) ook in "
+#~ "oudere versies van APT aanwezig is: vroeger voegde deze optie enkel --no-"
+#~ "triggers toe aan de configure-aanroep van &dpkg; - nu voegt APT deze vlag "
+#~ "ook toe aan de aanroepen unpack en remove."
+
+#~ msgid ""
+#~ "Valid values are \"<literal>all</literal>\", \"<literal>smart</literal>\" "
+#~ "and \"<literal>no</literal>\". The default value is \"<literal>all</"
+#~ "literal>\", which causes APT to configure all packages. The "
+#~ "\"<literal>smart</literal>\" way is to configure only packages which need "
+#~ "to be configured before another package can be unpacked (Pre-Depends), "
+#~ "and let the rest be configured by &dpkg; with a call generated by the "
+#~ "ConfigurePending option (see below). On the other hand, \"<literal>no</"
+#~ "literal>\" will not configure anything, and totally relies on &dpkg; for "
+#~ "configuration (which at the moment will fail if a Pre-Depends is "
+#~ "encountered). Setting this option to any value other than <literal>all</"
+#~ "literal> will implicitly also activate the next option by default, as "
+#~ "otherwise the system could end in an unconfigured and potentially "
+#~ "unbootable state."
+#~ msgstr ""
+#~ "Geldige waarden zijn \"<literal>all</literal>\", \"<literal>smart</"
+#~ "literal>\" en \"<literal>no</literal>\". De standaardwaarde is "
+#~ "\"<literal>all</literal>\", die APT ertoe aanzet om alle pakketten te "
+#~ "configureren. De \"<literal>smart</literal>\"-manier bestaat erin om "
+#~ "enkel die pakketten te configureren die geconfigureerd moeten zijn "
+#~ "vooraleer een ander pakket uitgepakt kan worden (Pre-Depends "
+#~ "(voorvereisten)) en de configuratie van de andere pakketten over te laten "
+#~ "aan &dpkg; tijdens een door de optie ConfigurePending geïnitieerde "
+#~ "aanroep (zie later). Anderzijds zal \"<literal>no</literal>\" helemaal "
+#~ "niets configureren en volledig op &dpkg; vertrouwen voor de configuratie "
+#~ "(hetgeen momenteel zal mislukken als er een Pre-Depends opduikt). Deze "
+#~ "optie instellen op iets anders dan <literal>all</literal> zal standaard "
+#~ "impliciet ook de volgende optie activeren. Anders bestaat het gevaar dat "
+#~ "het systeem in een niet-geconfigureerde en niet op te starten toestand "
+#~ "achterblijft."
+
+#~ msgid ""
+#~ "Useful for the <literal>smart</literal> configuration as a package which "
+#~ "has pending triggers is not considered as <literal>installed</literal>, "
+#~ "and &dpkg; treats them as <literal>unpacked</literal> currently which is "
+#~ "a showstopper for Pre-Dependencies (see debbugs #526774). Note that this "
+#~ "will process all triggers, not only the triggers needed to configure this "
+#~ "package."
+#~ msgstr ""
+#~ "Nuttig voor de configuratie-instelling <literal>smart</literal>, vermits "
+#~ "een pakket met wachtende triggers niet als <literal>installed</literal> "
+#~ "(geïnstalleerd) beschouwd wordt en &dpkg; een dergelijk pakket momenteel "
+#~ "als <literal>unpacked</literal> (niet uitgepakt) behandelt, hetgeen een "
+#~ "hinderpaal is bij voorvereisten (zie Debian bug #526774). Merk op dat dit "
+#~ "alle triggers verwerkt, niet enkel de triggers die nodig zijn om dit "
+#~ "pakket te configureren."
+
+#~ msgid ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+#~ msgstr ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+
+#~ msgid ""
+#~ "Essential packages (and their dependencies) should be configured "
+#~ "immediately after unpacking. It is a good idea to do this quite early in "
+#~ "the upgrade process as these configure calls also currently require "
+#~ "<literal>DPkg::TriggersPending</literal> which will run quite a few "
+#~ "triggers (which may not be needed). Essentials get per default a high "
+#~ "score but the immediate flag is relatively low (a package which has a Pre-"
+#~ "Depends is rated higher). These option and the others in the same group "
+#~ "can be used to change the scoring. The following example shows the "
+#~ "settings with their default values. <placeholder type=\"literallayout\" "
+#~ "id=\"0\"/>"
+#~ msgstr ""
+#~ "Essentiële pakketten (en de pakketten waarvan zij afhankelijk zijn) "
+#~ "zouden onmiddellijk geconfigureerd moeten worden nadat ze uitgepakt zijn. "
+#~ "Het wordt aanbevolen om dit vrij vroeg in het opwaarderingsproces te doen "
+#~ "aangezien deze configure-aanroepen momenteel ook <literal>DPkg::"
+#~ "TriggersPending</literal> uitlokken, waardoor behoorlijk wat triggers "
+#~ "afgehandeld kunnen worden (wat misschien niet nodig is). Essentiële "
+#~ "pakketten krijgen per definitie een hoge score maar de vlag immediate "
+#~ "heeft een relatief lage score (een pakket met een voorvereiste krijgt een "
+#~ "hogere score). Deze optie en de andere uit dezelfde groep kunnen gebruikt "
+#~ "worden om de score aan te passen. Het volgende voorbeeld toont de "
+#~ "instellingen met hun standaardwaarden. <placeholder type=\"literallayout"
+#~ "\" id=\"0\"/>"
+
+#~ msgid "List fingerprints of trusted keys."
+#~ msgstr "De vingerafdrukken van de betrouwbare sleutels weergeven."
+
+#~ msgid "Local trust database of archive keys."
+#~ msgstr "Lokale database van betrouwbare archiefsleutels."
+
+#~ msgid "&keyring-filename;"
+#~ msgstr "&keyring-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive trusted keys."
+#~ msgstr ""
+#~ "Sleutelbos met betrouwbare sleutels van het archief &keyring-distro;."
+
+#~ msgid "&keyring-removed-filename;"
+#~ msgstr "&keyring-removed-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive removed trusted keys."
+#~ msgstr ""
+#~ "Sleutelbos met uit het archief &keyring-distro; verwijderde betrouwbare "
+#~ "sleutels."
+
+#~ msgid ""
+#~ "In the future APT will refuse to work with unauthenticated repositories "
+#~ "by default until support for them is removed entirely. Users have the "
+#~ "option to opt-in to this behavior already by setting the configuration "
+#~ "option <option>Acquire::AllowInsecureRepositories</option> to "
+#~ "<literal>false</literal>."
+#~ msgstr ""
+#~ "In de toekomst zal APT standaard weigeren om met niet-geauthenticeerde "
+#~ "pakketbronnen te werken totdat die helemaal niet meer ondersteund zullen "
+#~ "worden. Gebruikers hebben de mogelijkheid om nu reeds voor dit gedrag te "
+#~ "kiezen door de configuratieoptie <option>Acquire::"
+#~ "AllowInsecureRepositories</option> in te stellen op <literal>false</"
+#~ "literal>."
+
+#~ msgid ""
+#~ "Allow the update operation to load data files from a repository without a "
+#~ "trusted signature. If enabled this option no data files will be loaded "
+#~ "and the update operation fails with a error for this source. The default "
+#~ "is false for backward compatibility. This will be changed in the future."
+#~ msgstr ""
+#~ "De bewerking update toelaten om databestanden op te halen van een "
+#~ "pakketbron zonder een betrouwbare ondertekening. Indien deze optie "
+#~ "geactiveerd is, zullen geen databestanden opgehaald worden en zal de "
+#~ "update-bewerking voor deze pakketbron mislukken met een foutmelding. "
+#~ "Omwille van achterwaartse compatibiliteit is de standaard false "
+#~ "(uitgezet). In de toekomst zal dit veranderen."
+
+#~ msgid "&apt-get;, &apt-conf;"
+#~ msgstr "&apt-get;, &apt-conf;"
+
+#~ msgid ""
+#~ "<command>apt</command> (Advanced Package Tool) is the command-line tool "
+#~ "for handling packages. It provides a commandline interface for the "
+#~ "package management of the system. See also &apt-get; and &apt-cache; for "
+#~ "more low-level command options."
+#~ msgstr ""
+#~ "<command>apt</command> (Advanced Package Tool - geavanceerd "
+#~ "pakketgereedschap) is gereedschap om aan de commandoregel pakketten te "
+#~ "behandelen. Het biedt een commandoregelinterface voor het pakketbeheer "
+#~ "van het systeem. Raadpleeg ook &apt-get; en &apt-cache; voor bijkomende "
+#~ "basale commando-opties."
+
+#~ msgid ""
+#~ "<literal>search</literal> searches for the given term(s) and display "
+#~ "matching packages."
+#~ msgstr ""
+#~ "<literal>search</literal> zoekt naar de opgegeven term(en) en geeft de "
+#~ "ermee overeenkomende pakketten weer."
+
+#~ msgid ""
+#~ "<literal>show</literal> shows the package information for the given "
+#~ "package(s)."
+#~ msgstr ""
+#~ "<literal>show</literal> geeft over het/de opgegeven pakket(ten) "
+#~ "pakketinformatie weer."
+
+#~ msgid ""
+#~ "<literal>install</literal> is followed by one or more package names "
+#~ "desired for installation or upgrading."
+#~ msgstr ""
+#~ "<literal>install</literal> wordt gevolgd door een of meer pakketnamen die "
+#~ "men wenst te installeren of op te waarderen."
+
+#~ msgid ""
+#~ "<literal>update</literal> is used to resynchronize the package index "
+#~ "files from their sources."
+#~ msgstr ""
+#~ "<literal>update</literal> wordt gebruikt om de indexbestanden met "
+#~ "beschikbare pakketten terug te synchroniseren met hun pakketbronnen."
+
+#~ msgid "Script usage"
+#~ msgstr "Gebruik van scripts"
+
+#~ msgid "Differences to &apt-get;"
+#~ msgstr "Verschillen met &apt-get;"
+
+#~ msgid ""
+#~ "The <command>apt</command> command is meant to be pleasant for end users "
+#~ "and does not need to be backward compatible like &apt-get;. Therefore "
+#~ "some options are different:"
+#~ msgstr ""
+#~ "Het commando <command>apt</command> is bedoeld om prettig aan te voelen "
+#~ "voor eindgebruikers en moet niet neerwaarts compatibel zijn zoals &apt-"
+#~ "get;. Daarom zijn sommige opties verschillend:"
+
+#~ msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
+#~ msgstr "De optie <literal>DPkg::Progress-Fancy</literal> is geactiveerd."
+
+#~ msgid "The option <literal>APT::Color</literal> is enabled."
+#~ msgstr "De optie <literal>APT::Color</literal> is geactiveerd."
+
+#~ msgid ""
+#~ "The option <literal>upgrade</literal> has <literal>--with-new-pkgs</"
+#~ "literal> enabled by default."
+#~ msgstr ""
+#~ "Bij de optie <literal>upgrade</literal> is <literal>--with-new-pkgs</"
+#~ "literal> standaard geactiveerd."
+
+#~ msgid ""
+#~ "No action; perform a simulation of events that would occur but do not "
+#~ "actually change the system. Configuration Item: <literal>APT::Get::"
+#~ "Simulate</literal>."
+#~ msgstr ""
+#~ "Niets doen; het uitvoeren van een simulatie van de operaties die zouden "
+#~ "plaats vinden, maar zonder wijzigingen aan het systeem aan te brengen. "
+#~ "Configuratie-item: <literal>APT::Get::Simulate</literal>."
+
+#~ msgid ""
+#~ "Simulated runs performed as a user will automatically deactivate locking "
+#~ "(<literal>Debug::NoLocking</literal>), and if the option <literal>APT::"
+#~ "Get::Show-User-Simulation-Note</literal> is set (as it is by default) a "
+#~ "notice will also be displayed indicating that this is only a simulation. "
+#~ "Runs performed as root do not trigger either NoLocking or the notice - "
+#~ "superusers should know what they are doing without further warnings from "
+#~ "<literal>apt-get</literal>."
+#~ msgstr ""
+#~ "Als men als gewone gebruiker een simulatie uitvoert, wordt vergrendeling "
+#~ "automatisch uitgeschakeld (<literal>Debug::NoLocking</literal>), en "
+#~ "indien de optie <literal>APT::Get::Show-User-Simulation-Note</literal> "
+#~ "ingesteld staat (wat standaard het geval is), zal er ook een mededeling "
+#~ "getoond worden dat het hier slechts om een simulatie gaat. Door de "
+#~ "systeembeheerder uitgevoerd, lokt deze operatie geen NoLocking "
+#~ "(vergrendeling uitzetten) en geen mededeling uit - systeembeheerders "
+#~ "zouden moeten weten wat ze doen zonder verdere waarschuwingen vanwege "
+#~ "<literal>apt-get</literal>."
+
+#~ msgid ""
+#~ "Ignore if packages can't be authenticated and don't prompt about it. "
+#~ "This is useful for tools like pbuilder. Configuration Item: "
+#~ "<literal>APT::Get::AllowUnauthenticated</literal>."
+#~ msgstr ""
+#~ "Het feit dat pakketten niet geauthenticeerd kunnen worden, negeren en er "
+#~ "geen vragen bij stellen. Dit is nuttig voor gereedschap zoals pbuilder. "
+#~ "Configuratie-item: <literal>APT::Get::AllowUnauthenticated</literal>."
+
+#~ msgid ""
+#~ "Pass advanced options to gpg. With adv --recv-key you can download the "
+#~ "public key."
+#~ msgstr ""
+#~ "Geavanceerde opties doorgeven aan gpg. Met de opdracht adv --recv-key "
+#~ "kunt u de publieke sleutel downloaden."
+
+#~ msgid "mark/unmark a package as being automatically-installed"
+#~ msgstr "Een pakket aan/uitvinken als automatisch geïnstalleerd"
+
+#~ msgid ""
+#~ "<command>apt-mark</command> will change whether a package has been marked "
+#~ "as being automatically installed."
+#~ msgstr ""
+#~ "Met <command>apt-mark</command> kunt u een pakket markeren als "
+#~ "automatisch geïnstalleerd of niet."
+
+#~ msgid ""
+#~ "<literal>hold</literal> is used to mark a package as held back, which "
+#~ "will prevent the package from being automatically installed, upgraded or "
+#~ "removed. The command is only a wrapper around <command>dpkg --set-"
+#~ "selections</command> and the state is therefore maintained by &dpkg; and "
+#~ "not affected by the <option>--file</option> option."
+#~ msgstr ""
+#~ "<literal>hold</literal> wordt gebruikt om een pakket als tegengehouden te "
+#~ "markeren. Dit voorkomt dat het pakket automatisch geïnstalleerd, "
+#~ "opgewaardeerd of verwijderd wordt. Het commando is slechts een wikkel "
+#~ "rond <command>dpkg --set-selections</command> en om die reden wordt de "
+#~ "status bijgehouden door &dpkg; en niet beïnvloed door de optie <option>--"
+#~ "file</option>."
+
+#~ msgid ""
+#~ "If a package comes from a archive without a signature, or with a "
+#~ "signature that apt does not have a key for, that package is considered "
+#~ "untrusted, and installing it will result in a big warning. <command>apt-"
+#~ "get</command> will currently only warn for unsigned archives; future "
+#~ "releases might force all sources to be verified before downloading "
+#~ "packages from them."
+#~ msgstr ""
+#~ "Indien een pakket afkomstig is van een archief zonder ondertekening of "
+#~ "met een ondertekening waarvoor apt geen sleutel heeft, dan wordt dat "
+#~ "pakket als onbetrouwbaar beschouwd. De installatie ervan zal een forse "
+#~ "waarschuwing uitlokken. Momenteel zal <command>apt-get</command> enkel "
+#~ "waarschuwen bij niet-ondertekende archieven. Bij toekomstige uitgaven kan "
+#~ "het zijn dat een verificatie van de pakketbronnen verplicht gesteld wordt "
+#~ "vooraleer er pakketten van opgehaald worden."
+
+#~ msgid ""
+#~ "Version 2 of this protocol dumps more information, including the protocol "
+#~ "version, the APT configuration space and the packages, files and versions "
+#~ "being changed. Version 3 adds the architecture and <literal>MultiArch</"
+#~ "literal> flag to each version being dumped."
+#~ msgstr ""
+#~ "Versie 2 van dit protocol geeft meer informatie weer, onder meer de "
+#~ "protocolversie, de configuratieruimte van APT en de pakketten, bestanden "
+#~ "en versies die gewijzigd worden. Versie 3 voegt aan iedere weergegeven "
+#~ "versie de architectuur toe en de <literal>MultiArch</literal>-vlag."
+
+#~ msgid ""
+#~ "to the versions that are not installed and do not belong to the target "
+#~ "release."
+#~ msgstr ""
+#~ "aan de versies die niet geïnstalleerd zijn en niet behoren tot de "
+#~ "streefrelease."
+
+#~ msgid ""
+#~ "Each line specifying a source starts with type (e.g. <literal>deb-src</"
+#~ "literal>) followed by options and arguments for this type. Individual "
+#~ "entries cannot be continued onto a following line. Empty lines are "
+#~ "ignored, and a <literal>#</literal> character anywhere on a line marks "
+#~ "the remainder of that line as a comment."
+#~ msgstr ""
+#~ "Elke regel waarin een pakketbron beschreven wordt, begint met het type "
+#~ "bron (bijv. <literal>deb-src</literal>), gevolgd door opties en "
+#~ "argumenten voor dat type. Een individueel item kan niet voortlopen op een "
+#~ "volgende regel. Lege regels worden overgeslagen en het teken <literal>#</"
+#~ "literal> ergens op de regel geeft aan dat het vervolg van die regel "
+#~ "commentaar is."
+
+#~ msgid "deb [ options ] uri suite [component1] [component2] [...]"
+#~ msgstr "deb [ opties ] URI suite [component1] [component2] [...]"
+
+#~ msgid ""
+#~ " Types: deb deb-src\n"
+#~ " URIs: http://example.com\n"
+#~ " Suites: stable testing\n"
+#~ " Sections: component1 component2\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ "\n"
+#~ " Types: deb\n"
+#~ " URIs: http://another.example.com\n"
+#~ " Suites: experimental\n"
+#~ " Sections: component1 component2\n"
+#~ " Enabled: no\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ " "
+#~ msgstr ""
+#~ " Types: deb deb-src\n"
+#~ " URIs: http://example.com\n"
+#~ " Suites: stable testing\n"
+#~ " Sections: component1 component2\n"
+#~ " Description: kort\n"
+#~ " lang lang lang\n"
+#~ " [optie1]: [waarde-van-optie1]\n"
+#~ "\n"
+#~ " Types: deb\n"
+#~ " URIs: http://another.example.com\n"
+#~ " Suites: experimental\n"
+#~ " Sections: component1 component2\n"
+#~ " Enabled: no\n"
+#~ " Description: kort\n"
+#~ " lang lang lang\n"
+#~ " [optie1]: [waarde-van-optie1]\n"
+#~ " "
+
+#~ msgid ""
+#~ "<literal>options</literal> is always optional and needs to be surrounded "
+#~ "by square brackets. It can consist of multiple settings in the form "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>. Multiple settings are separated by spaces. The "
+#~ "following settings are supported by APT (note however that unsupported "
+#~ "settings will be ignored silently):"
+#~ msgstr ""
+#~ "<literal>opties</literal> zijn steeds facultatief en moeten binnen "
+#~ "vierkante haakjes staan. Ze kunnen bestaan uit verschillende instellingen "
+#~ "in de vorm van <literal><replaceable>instelling</"
+#~ "replaceable>=<replaceable>waarde</replaceable></literal>. De volgende "
+#~ "instellingen worden ondersteund door APT (weet wel dat niet-ondersteunde "
+#~ "instellingen stilzwijgend genegeerd zullen worden):"
+
+#~ msgid ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> and <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> which can be "
+#~ "used to add/remove architectures from the set which will be downloaded."
+#~ msgstr ""
+#~ "<literal>arch+=<replaceable>architectuur1</replaceable>,"
+#~ "<replaceable>architectuur2</replaceable>,…</literal> en <literal>arch-"
+#~ "=<replaceable>architectuur1</replaceable>,<replaceable>architectuur2</"
+#~ "replaceable>,…</literal> hetgeen gebruikt kan worden om architecturen toe "
+#~ "te voegen aan/te verwijderen uit de set architecturen waarvoor gedownload "
+#~ "moet worden."
+
+#~ msgid ""
+#~ "<literal>trusted=yes</literal> can be set to indicate that packages from "
+#~ "this source are always authenticated even if the <filename>Release</"
+#~ "filename> file is not signed or the signature can't be checked. This "
+#~ "disables parts of &apt-secure; and should therefore only be used in a "
+#~ "local and trusted context. <literal>trusted=no</literal> is the opposite "
+#~ "which handles even correctly authenticated sources as not authenticated."
+#~ msgstr ""
+#~ "<literal>trusted=yes</literal> kan opgegeven worden om aan te geven dat "
+#~ "pakketten uit die pakketbron steeds geauthenticeerd zijn, zelfs al is het "
+#~ "<filename>Release</filename>-bestand niet ondertekend of kan de "
+#~ "handtekening niet gecontroleerd worden. Dit schakelt onderdelen van &apt-"
+#~ "secure; uit en zou daarom enkel gebruikt mogen worden in een lokale en "
+#~ "betrouwbare context. <literal>trusted=no</literal> is het tegengestelde "
+#~ "en behandelt ook correct geauthenticeerde pakketbronnen als niet-"
+#~ "geauthenticeerd."
+
+#~ msgid "Some examples:"
+#~ msgstr "Enkele voorbeelden:"
+
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+
+#~ msgid ""
+#~ "This is a space separated list of all the architectures that appear under "
+#~ "search section. The special architecture 'source' is used to indicate "
+#~ "that this tree has a source archive."
+#~ msgstr ""
+#~ "Dit is een door spaties gescheiden lijst van alle architecturen die te "
+#~ "vinden zijn onder elke sectie. De bijzondere architectuur 'source' wordt "
+#~ "gebruikt om aan te geven dat zich in die boom een broncodearchief bevindt."
diff --git a/doc/po/pl.po b/doc/po/pl.po
new file mode 100644
index 0000000..3b9fe65
--- /dev/null
+++ b/doc/po/pl.po
@@ -0,0 +1,11783 @@
+# Translation of apt package man pages
+# Copyright (C) 2004 Krzysztof Fiertek <akfedux@megapolis.pl>
+# Copyright (C) 2000-2004, 2010, 2012 Robert Luberda <robert@debian.org>
+# This file is distributed under the same license as the apt package.
+#
+# Translators:
+#
+# Krzysztof Fiertek <akfedux@megapolis.pl>, 2004.
+# Robert Luberda <robert@debian.org> 2000-2004, 2010, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-02-04 15:34+0100\n"
+"PO-Revision-Date: 2014-07-04 02:13+0200\n"
+"Last-Translator: Robert Luberda <robert@debian.org>\n"
+"Language-Team: Polish <manpages-pl-list@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>zespół APT</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>Strona QA</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>Strona błędów APT</ulink>. \n"
+" Aby zgłosić błąd w APT, proszę przeczytać\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> lub opis polecenia\n"
+" &reportbug;.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Autor</title>\n"
+" <para>APT zostało napisane przez zespół APT <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Wyświetla krótkie informacje o użyciu.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Wyświetla wersję programu.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Plik konfiguracyjny. Podaje plik konfiguracyjny do użycia.\n"
+" Program najpierw przeczyta swój domyślny plik konfiguracyjny, a następnie plik podany jako argument tej opcji. Jeśli jest potrzeba ustawienia opcji konfiguracji zanim domyślny plik konfiguracyjny zostanie przetworzony, należy podać plik do użycia w zmiennej środowiskowej <envar>APT_CONFIG</envar>.\n"
+" Informacje o składni pliku można znaleźć w &apt-conf;.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Ustawia opcję konfiguracji. Pozwala ustawić dowolną\n"
+" opcję konfiguracji. Składnia jest następująca: <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> i <option>--option</option> można podać wielokrotnie - \n"
+" do ustawiania różnych opcji.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+"<para>Wszystkie opcje linii poleceń mogą być ustawione w pliku konfiguracyjnym.\n"
+" Poniższe opisy wskazują, którą opcję w pliku konfiguracyjnym należy ustawić.\n"
+" W przypadku opcji logicznych, można unieważnić ustawienia pliku konfiguracyjnego,\n"
+" używając <option>-f-</option>, <option>--no-f</option>, <option>-f=no</option>\n"
+" albo czegoś podobnego.\n"
+" </para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>Plik konfiguracyjny APT.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>Części pliku konfiguracyjnego.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Składnica pobranych plików pakietów.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Składnica obecnie pobieranych plików pakietów.\n"
+" Pozycja w pliki konfiguracyjnym: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> zostanie dodane automatycznie)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Plik zawierający preferencje wyboru wersji.\n"
+" Jest to miejsce, w którym określa się tzw. &quot;pinning&quot;,\n"
+" tj. preferencje, skąd brać pewne pakiety -\n"
+" z innego źródła,\n"
+" z innej dystrybucji lub o innej wersji.\n"
+" Pozycja w pliku konfiguracyjnym:<literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>Części pliku preferencji wyboru wersji.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Lokalizacje, z których będą ściągane pakiety.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>Części pliku zawierającego lokalizacje, z której są pobierane pakiety.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Składnica zawierająca informacje o każdym zasobie pakietów podanym w\n"
+" &sources-list;\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Składnica obecnie pobieranych informacji o stanie pakietów.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::State::Lists</literal> (<filename>partial</filename> zostanie dodane automatycznie)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Składnica lokalnych zaufanych kluczy gpg; będą tu dodawane nowe klucze.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>Fragmenty plików zawierających zaufane klucze gpg, można tu składować\n"
+" dodatkowe klucze (dodane przez administratora bądź inne pakiety).\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Lista stanów pakietów zainstalowanych automatycznie.\n"
+" Pozycja w pliku konfiguracyjnym: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr "<!ENTITY translation-title \"TŁUMACZENIE\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-holder \"\n"
+" Tłumaczenie stron podręcznika: Robert Luberda <email>robert@debian.org</email>, 2000-2012.\n"
+" Tłumaczenie przewodnika offline: Krzysztof Fiertek <email>akfedux@megapolis.pl</email>, 2004\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-english \"\n"
+" Proszę zauważyć, że przetłumaczony dokument może zawierać fragmenty nieprzetłumaczone.\n"
+" Ma to na celu uniknięcie utracenia istotnych informacji, w przypadkach gdy\n"
+" oryginał zostanie zaktualizowany, a tłumaczenie - nie.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"opcja_konfiguracji"
+"\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"plik_konfiguracyjny\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"wydanie_docelowe\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architektura\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pakiet\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"nr_wersji_pakietu\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefiks\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"wyr_regularne\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"pkt_montowania_cdromu\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"katalog_tymczasowy\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"nazwa_pliku\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"ścieżka"
+"\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"plik_nadpisań\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"preifks_ścieżki\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"sekcja\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"id_klucza\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "Opis"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+#, fuzzy
+#| msgid "apt-get"
+msgid "(&apt-get;)"
+msgstr "apt-get"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+#, fuzzy
+#| msgid ""
+#| "A specific version of a package can be selected for installation by "
+#| "following the package name with an equals and the version of the package "
+#| "to select. This will cause that version to be located and selected for "
+#| "install. Alternatively a specific distribution can be selected by "
+#| "following the package name with a slash and the version of the "
+#| "distribution or the Archive name (stable, testing, unstable)."
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"Konkretna wersja pakietu może być wybrana do zainstalowania przez "
+"umieszczenie po nazwie pakietu znaku równości, a za nim wybranej wersji "
+"pakietu. Podana wersja zostanie wyszukana i wybrana do zainstalowania. "
+"Również konkretna dystrybucja może być wybrana przez umieszczenie po nazwie "
+"pakietu znaku ukośnika, po którym następuje wersja dystrybucji bądź nazwa "
+"archiwum (stable, testing, unstable)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>autoremove</literal> is used to remove packages that were "
+#| "automatically installed to satisfy dependencies for other packages and "
+#| "are now no longer needed."
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"<literal>autoremove</literal> jest używane do usuwania pakietów, które "
+"zostały zainstalowane automatycznie, żeby rozwiązać zależności w innych "
+"pakietach, i nie są już potrzebne."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+#, fuzzy
+#| msgid "&apt-conf;"
+msgid "(&apt-cache;)"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "Zobacz także"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+#, fuzzy
+#| msgid ""
+#| "&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+#| "&apt-config;, &apt-secure;, The APT User's guide in &guidesdir;, &apt-"
+#| "preferences;, the APT Howto."
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+"&apt-config;, &apt-secure;, Przewodnik APT dla użytkowników w &guidesdir;, "
+"&apt-preferences;, APT Howto."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "Diagnostyka"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+#, fuzzy
+#| msgid ""
+#| "<command>apt-get</command> returns zero on normal operation, decimal 100 "
+#| "on error."
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> zwraca zero, gdy zakończyło się pomyślnie, 100 - "
+"w przypadku błędu."
+
+#
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr "Narzędzie zarządzania pakietami APT -- interfejs linii poleceń"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "<command>apt-get</command> is the command-line tool for handling "
+#| "packages, and may be considered the user's \"back-end\" to other tools "
+#| "using the APT library. Several \"front-end\" interfaces exist, such as "
+#| "&dselect;, &aptitude;, &synaptic; and &wajig;."
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> jest narzędziem do zarządzania pakietami "
+"działającym z linii poleceń, które może być uznane za wewnętrzne narzędzie "
+"innych programów używających biblioteki APT. Istnieje wiele interfejsów "
+"użytkownika, takich jak &dselect;, &aptitude;, &synaptic; oraz &wajig;."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"Jedno z poniższych poleceń musi być użyte, chyba że została podana opcja "
+"<option>-h</option> albo <option>--help</option>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"<literal>update</literal> jest używane do zsynchronizowania zawartości "
+"plików indeksu pakietów z ich źródłami. Lista dostępnych pakietów jest "
+"pobierana z lokalizacji określonych w pliku <filename>/etc/apt/sources.list</"
+"filename>. Na przykład, gdy używane jest archiwum Debiana, to polecenie "
+"pobiera i przegląda pliki <filename>Packages.gz</filename>, tak żeby "
+"udostępnić informacje o nowych i uaktualnionych pakietach. Polecenie "
+"<literal>update</literal> powinno być użyte zawsze przed <literal>upgrade</"
+"literal> lub <literal>dist-upgrade</literal>. Należy zauważyć, że licznik "
+"całkowitego postępu operacji jest błędny, ponieważ rozmiar plików "
+"<filename>Packages.gz</filename> nie jest wcześniej znany."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"<literal>upgrade</literal> instaluje najnowsze wersje wszystkich pakietów, "
+"obecnie zainstalowanych w systemie, na podstawie źródeł wymienionych w pliku "
+"<filename>/etc/apt/sources.list</filename>. Zainstalowane pakiety, których "
+"nowsza wersja jest dostępna, są ściągane i uaktualniane; w żadnym wypadku "
+"podanie tej opcji nie spowoduje usunięcia zainstalowanego pakietu czy "
+"zainstalowania nowego pakietu, wcześniej nie zainstalowanego. Pakiety, "
+"których nowa wersja wymaga zmiany statusu (np. zainstalowania bądź "
+"usunięcia) innego pakietu, będą pozostawione bez zmian. Aby <command>apt-"
+"get</command> wiedział, że są dostępne nowe wersje pakietów, należy "
+"wcześniej wykonać <literal>update</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"<literal>dist-upgrade</literal> wykonuje to samo, co <literal>upgrade</"
+"literal>, jednakże w inteligentny sposób wykrywa zmiany zależności w nowych "
+"wersjach pakietów. <command>apt-get</command> ma wbudowany \"sprytny\" "
+"system rozwiązywania konfliktów i jeśli będzie to potrzebne, podejmie próbę "
+"zaktualizowania najważniejszych pakietów, kosztem tych mniej ważnych. Tak "
+"więc <literal>dist-upgrade</literal> może usunąć niektóre pakiety.Plik "
+"<filename>/etc/apt/sources.list</filename> zawiera listę adresów, z których "
+"będą pobierane żądane pakiety. Zobacz również do &apt-preferences; - "
+"znajduje się tam opis mechanizmu nadpisywania globalnych ustawień dla "
+"poszczególnych pakietów."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> jest używane w połączeniu z programem "
+"&dselect;, tradycyjnym narzędziem do zarządzania pakietami w systemie "
+"Debian. <literal>dselect-upgrade</literal> uwzględnia zmiany zrobione "
+"programem &dselect; w polu <literal>Status</literal> pliku zawierającego "
+"informacje o dostępnych pakietach i wykonuje akcje potrzebne do "
+"zrealizowania tych zmian (na przykład: usunięcie starych pakietów i dodanie "
+"nowych)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"Po <literal>install</literal> musi występować nazwa jednego lub więcej "
+"pakietów przeznaczonych do zainstalowania. Każdy argument jest nazwą "
+"pakietu, a nie pełną nazwą pliku, w którym się znajduje (na przykład w "
+"systemie Debian, tym argumentem byłoby <package>apt-utils</package>, a nie "
+"<literal>apt-utils_&apt-product-version;_amd64.deb</literal>). Wszystkie "
+"pakiety, które są potrzebne do zainstalowania żądanego pakietu (lub żądanych "
+"pakietów), będą także ściągnięte i zainstalowane. Plik <filename>/etc/apt/"
+"sources.list</filename> zawiera listę adresów, z których będą pobierane "
+"żądane pakiety. Jeżeli po nazwie pakietu pojawi się minus (bez spacji "
+"pomiędzy minusem a nazwą pakietu), to ten pakiet zostanie usunięty, o ile "
+"oczywiście jest zainstalowany. Podobnie znak plusa może być użyty w celu "
+"zainstalowania pakietu. Ta ostatnia właściwość może być użyta do nadpisania "
+"decyzji podjętych przez system rozwiązywania konfliktów programu apt-get."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"Konkretna wersja pakietu może być wybrana do zainstalowania przez "
+"umieszczenie po nazwie pakietu znaku równości, a za nim wybranej wersji "
+"pakietu. Podana wersja zostanie wyszukana i wybrana do zainstalowania. "
+"Również konkretna dystrybucja może być wybrana przez umieszczenie po nazwie "
+"pakietu znaku ukośnika, po którym następuje wersja dystrybucji bądź nazwa "
+"archiwum (stable, testing, unstable)."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"Oba mechanizmy wyboru pakietów mogą zainstalować wcześniejsze wersje "
+"pakietów niż są już zainstalowane w systemie, dlatego muszą być używane "
+"ostrożnie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"Jest to także akcja, której należy użyć, aby zaktualizować jeden lub więcej "
+"spośród pakietów już zainstalowanych, bez aktualizowania wszystkich "
+"pozostałych pakietów. W przeciwieństwie do polecenia \"upgrade\", które "
+"instaluje najnowsze wersje wszystkich obecnie zainstalowanych pakietów, "
+"\"install\" zainstaluje najnowsze wersje pakietu (pakietów) podanego "
+"(podanych) w linii poleceń. Wystarczy podać nazwę pakietu (pakietów) do "
+"zaktualizowania i jeśli nowsze wersje są dostępna, to zostaną pobrane i "
+"zainstalowane (łączne z zależnościami, tak jak to opisano powyżej)."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"W końcu, mechanizm &apt-preferences; pozwala określić alternatywny sposób "
+"instalacji poszczególnych pakietów."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"Jeżeli żaden pakiet nie pasuje do podanego wyrażenia, a to wyrażenie zawiera "
+"jeden z następujących znaków: \".\", \"?\" albo \"*\", to zakłada się, że "
+"jest to wyrażenie regularne zgodne z POSIX-em i jest ono stosowane do "
+"wszystkich nazw pakietów w bazie. Pakiety, których nazwy pasują do tego "
+"wyrażenia regularnego, są instalowane (bądź usuwane). Należy zwrócić uwagę "
+"na to, że dopasowywany jest podciąg, tak więc \"lo*\" pasuje zarówno do "
+"\"how-lo\", jak i do \"lowest\". Jeśli jest to niepożądane, można określić "
+"początek lub koniec dopasowania wyrażenia regularnego, używając znaków \"^| "
+"lub \"$\", można też stworzyć bardziej specyficzne wyrażenie regularne."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr "linia <literal>Archive:</literal> lub <literal>Suite:</literal>"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"<literal>remove</literal> odpowiada poleceniu <literal>install</literal> z "
+"tą różnicą, że pakiety są usuwane, a nie instalowane. Jeżeli nazwa pakietu "
+"zostanie poprzedzona znakiem plusa (bez rozdzielającej spacji), wskazany "
+"pakiet zostanie zainstalowany zamiast zostać usunięty."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"<literal>purge</literal> działa tak, jak <literal>remove</literal>, z tą "
+"różnicą, że pakiety są po usunięciu czyszczone (czyli usuwane są również "
+"wszystkie pliki konfiguracyjne)."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"<literal>source</literal> powoduje, że <command>apt-get</command> ściąga "
+"pakiety ze źródłami. APT na podstawie listy dostępnych pakietów decyduje, "
+"który pakiet źródłowy ściągnąć. Następnie szuka najnowszej dostępnej wersji "
+"pakietu źródłowego i pobiera ją do bieżącego katalogu. Jeśli jest to "
+"możliwe, to APT bierze pod uwagę domyślne wydanie, ustawione w <literal>APT::"
+"Default-Release</literal> w pliku konfiguracyjnym albo określone w opcji "
+"<option>-t</option>, albo podane przy użyciu składni <literal>pakiet/"
+"wydanie</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"Pakiety źródłowe są znajdowane inaczej niż pakiety binarne: przez linie "
+"<literal>deb-src</literal> w pliku &sources-list;. Oznacza to, że w pliku "
+"tym należy umieścić taką linię dla każdego repozytorium, z którego będą "
+"pobierane źródła. W przeciwnym wypadku albo może zostać pobrana niepoprawna "
+"(zbyt stara lub zbyt nowa) wersja pakietu źródłowego, albo może nie być "
+"możliwe pobranie jakiejkolwiek wersji pakietu."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"Jeżeli podano opcję <option>--compile</option>, to pakiet źródłowy zostanie "
+"skompilowany do pakietu binarnego .deb za pomocą programu <command>dpkg-"
+"buildpackage</command> dla architektury podanej w opcji <command>--host-"
+"architecture</command>. Podanie opcji <option>--download-only</option> "
+"spowoduje natomiast, że pakiet źródłowy nie zostanie rozpakowany."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"Konkretną wersję pakietu źródłowego można ściągnąć, umieszczając po nazwie "
+"pakietu źródłowego znak równości, a za nim numer wersji do ściągnięcia. "
+"Działa tu taki sam mechanizm jak w przypadku pakietów binarnych. Włączone "
+"zostaje dokładne dopasowywanie nazw i wersji pakietów źródłowych i pośrednio "
+"włączona zostaje opcja <literal>APT::Get::Only-Source</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"Proszę zauważyć, że w odróżnieniu od pakietów binarnych, pakiety źródłowe "
+"nie są instalowane i zapamiętywane w bazie danych <command>dpkg</command>, "
+"ale są po prostu pobierane do bieżącego katalogu jako archiwa programu "
+"<command>tar</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"<literal>build-dep</literal> powoduje, że apt-get zainstaluje/usunie pakiety "
+"tak, żeby spełnić zależności wymagane do zbudowania danego pakietu "
+"źródłowego."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"<literal>check</literal> jest poleceniem diagnostycznym, które odświeża "
+"bufor (cache) pakietów i szuka zepsutych pakietów."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> pobierze podane pakiety binarne do bieżącego "
+"katalogu. "
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>clean</literal> clears out the local repository of retrieved "
+#| "package files. It removes everything but the lock file from "
+#| "<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/"
+#| "archives/partial/</filename>. When APT is used as a &dselect; method, "
+#| "<literal>clean</literal> is run automatically. Those who do not use "
+#| "dselect will likely want to run <literal>apt-get clean</literal> from "
+#| "time to time to free up disk space."
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"<literal>clean</literal> czyści lokalne repozytorium ściągniętych plików z "
+"pakietami. Usuwa wszystko z wyjątkiem pliku blokady <filename>&cachedir;/"
+"archives/</filename> oraz katalogu <filename>&cachedir;/archives/partial/</"
+"filename>. Gdy APT jest używane jako metoda programu &dselect;, "
+"<literal>clean</literal> jest uruchamiane automatycznie. Osoby nie używające "
+"dselect, powinny od czasu do czasu uruchamiać <literal>apt-get clean</"
+"literal>, aby zwolnić trochę miejsca na dysku."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"Podobnie jak <literal>clean</literal>, <literal>autoclean</literal> czyści "
+"lokalne repozytorium pobranych plików z pakietami. Różnica jest taka, że "
+"<literal>autoclean</literal> usuwa tylko te pliki pakietów, które już nie "
+"mogą być ściągnięte i w większości są bezużyteczne. Pozwala to na "
+"utrzymywanie bufora (cache'a) przed długi czas i na uniknięcie "
+"niekontrolowanego jego wzrostu. Wyłączenie opcji konfiguracyjnej "
+"<literal>APT::Clean-Installed</literal> zapobiegnie usuwaniu plików "
+"zawierających zainstalowane pakiety."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"<literal>autoremove</literal> jest używane do usuwania pakietów, które "
+"zostały zainstalowane automatycznie, żeby rozwiązać zależności w innych "
+"pakietach, i nie są już potrzebne."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>changelog</literal> downloads a package changelog and displays "
+#| "it through <command>sensible-pager</command>. The server name and base "
+#| "directory is defined in the <literal>APT::Changelogs::Server</literal> "
+#| "variable (e.g. <ulink url=\"http://packages.debian.org/changelogs"
+#| "\">packages.debian.org/changelogs</ulink> for Debian or <ulink url="
+#| "\"https://changelogs.ubuntu.com/changelogs\">changelogs.ubuntu.com/"
+#| "changelogs</ulink> for Ubuntu). By default it displays the changelog for "
+#| "the version that is installed. However, you can specify the same options "
+#| "as for the <option>install</option> command."
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> pobiera dziennik zmian pakietu i wyświetla go, "
+"używając polecenia <command>sensible-pager</command>. Nazwa serwera i "
+"katalog bazowy jest definiowany w zmiennej <literal>APT::Changelogs::Server</"
+"literal> (np. <ulink url=\"http://packages.debian.org/changelogs\">packages."
+"debian.org/changelogs</ulink> dla Debiana lub <ulink url=\"http://changelogs."
+"ubuntu.com/changelogs\">changelogs.ubuntu.com/changelogs</ulink> dla "
+"Ubuntu). Domyślnie wyświetlany jest dziennik zmian wersji, która już jest "
+"zainstalowana. Jednakże można to zmienić, używając takich samych opcji, jak "
+"te dla polecenia <option>install</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "opcje"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"Nie rozpatruje rekomendowanych pakietów jako zależności do instalacji. "
+"Pozycja w pliku konfiguracyjnym: <literal>APT::Install-Recommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"Uznaje sugerowane pakiety za zależności do instalacji. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Install-Suggests</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"Tylko pobieranie; pliki z pakietami są tylko ściągane, ale nie rozpakowywane "
+"czy instalowane. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"Download-Only</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Fix; attempt to correct a system with broken dependencies in place. This "
+#| "option, when used with install/remove, can omit any packages to permit "
+#| "APT to deduce a likely solution. If packages are specified, these have to "
+#| "completely correct the problem. The option is sometimes necessary when "
+#| "running APT for the first time; APT itself does not allow broken package "
+#| "dependencies to exist on a system. It is possible that a system's "
+#| "dependency structure can be so corrupt as to require manual intervention "
+#| "(which usually means using &dselect; or <command>dpkg --remove</command> "
+#| "to eliminate some of the offending packages). Use of this option together "
+#| "with <option>-m</option> may produce an error in some situations. "
+#| "Configuration Item: <literal>APT::Get::Fix-Broken</literal>."
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"Popraw; podejmuje próbę poprawienia zepsutych zależności. Używanie tej opcji "
+"z install/remove może spowodować pominięcie któregokolwiek z pakietów "
+"podanych w linii poleceń, co pozwoli programowi APT znaleźć właściwe "
+"rozwiązanie problemu. Ta opcja jest czasami potrzebna przy pierwszym "
+"uruchomieniu APT, który nie pozwala, aby w systemie istniały zepsute "
+"zależności. Jest również prawdopodobne, że systemowa struktura zależności "
+"może być tak zepsuta, że będzie wymagała ręcznej naprawy (co zazwyczaj "
+"oznacza użycie &dselect; lub <command>dpkg --remove</command>w celu "
+"usunięcia niektórych naruszonych pakietów). W pewnych sytuacjach użycie tej "
+"opcji łącznie z <option>-m</option> może spowodować błąd. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::Fix-Broken</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"Ignoruj brakujące pakiety. Pakiety, które nie mogą być pobrane lub nie "
+"powiedzie się test spójności pakietu po jego pobraniu (plik z pakietem jest "
+"uszkodzony), zostają wstrzymane. W pewnych sytuacjach użycie tej opcji "
+"łącznie z <option>-f</option> może spowodować błąd. Pakiet, który jest "
+"wybrany do instalacji (w szczególności jest on wymieniony w linii poleceń), "
+"ale nie może zostać pobrany, zostanie pominięty. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::Fix-Missing</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"Wyłącza pobierania pakietów. Najlepiej stosować z <option>--ignore-missing</"
+"option>, aby wymusić na APT używanie tylko tych plików .deb, które zostały "
+"wcześniej ściągnięte. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"Download</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"Cichy; wypisuje tylko informacje potrzebne do logowania, opuszczając "
+"wskaźniki postępu. Więcej znaków q spowoduje jeszcze bardziej ciche wyjście, "
+"maksimum jest 2. Można także ustawić poziom cichości za pomocą <option>-q=#</"
+"option>, nadpisując tym samym opcję z pliku konfiguracyjnego. Należy "
+"zauważyć, że poziom cichości równy 2 implikuje <option>-y</option>, dlatego -"
+"qq nigdy nie powinno być używane bez opcji typu -d, --print-uris lub -s, "
+"gdyż APT może zadecydować o zrobieniu czegoś, czego użytkownik się nie "
+"spodziewa. Pozycja w pliku konfiguracyjnym: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"Symulacja uruchomienia, powodująca wypisanie serii linii, z których każda "
+"reprezentuje operację programu <command>dpkg</command>: konfigurowanie "
+"(<literal>Conf</literal>), usunięcie (<literal>Remv</literal>) lub "
+"rozpakowanie (<literal>Inst</literal>). Nawiasy kwadratowe oznaczają zepsute "
+"pakiety, przy czym puste nawiasy kwadratowe oznaczają, że przyczyna zepsucia "
+"pakietu nie jest znana (rzadkość)."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"Automatycznie odpowiada \"tak\" na pytania. Zakładając odpowiedź \"tak\" na "
+"wszelkie pytania, uruchamia się w trybie nieinteraktywnym. Jeśli wystąpi "
+"jakaś niepożądana sytuacja, na przykład zmiana wstrzymanego pakietu lub "
+"usunięcie pakietu mającego status Essential, <literal>apt-get</literal> "
+"przerwie działanie. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"Assume-Yes</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"Automatycznie odpowiada \"nie\" na wszystkie zapytania. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::Assume-No</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Show upgraded packages; print out a list of all packages that are to be "
+#| "upgraded. Configuration Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"Pokazuje uaktualnione pakiety. Wypisuje listę wszystkich pakietów, które "
+"będą uaktualnione. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::Show-"
+"Upgraded</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"Wyświetla pełne wersje aktualizowanych pakietów Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "This option controls the architecture packages are built for by "
+#| "<command>apt-get source --compile</command> and how cross-"
+#| "builddependencies are satisfied. By default is it not set which means "
+#| "that the host architecture is the same as the build architecture (which "
+#| "is defined by <literal>APT::Architecture</literal>). Configuration Item: "
+#| "<literal>APT::Get::Host-Architecture</literal>"
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"Za pomocą tej opcji można określić architekturę pakietów budowanych przez "
+"<command>apt-get source --compile</command> i sposób, w jaki są spełniane "
+"międzyarchitekturowe zależności czasu budowania. Domyślnie nie jest "
+"ustawiona, co oznacza, że architektura budowanych pakietów jest taka sama "
+"jak architektura bieżącego komputera (definiowana przez <literal>APT::"
+"Architecture</literal>). Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"Host-Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "This option controls the architecture packages are built for by "
+#| "<command>apt-get source --compile</command> and how cross-"
+#| "builddependencies are satisfied. By default is it not set which means "
+#| "that the host architecture is the same as the build architecture (which "
+#| "is defined by <literal>APT::Architecture</literal>). Configuration Item: "
+#| "<literal>APT::Get::Host-Architecture</literal>"
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"Za pomocą tej opcji można określić architekturę pakietów budowanych przez "
+"<command>apt-get source --compile</command> i sposób, w jaki są spełniane "
+"międzyarchitekturowe zależności czasu budowania. Domyślnie nie jest "
+"ustawiona, co oznacza, że architektura budowanych pakietów jest taka sama "
+"jak architektura bieżącego komputera (definiowana przez <literal>APT::"
+"Architecture</literal>). Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"Host-Architecture</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"Skompiluj pakiety źródłowe po ich ściągnięciu. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::Compile</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"Ignoruje status hold (wstrzymany) pakietów. Ta opcja powoduje, że "
+"<command>apt-get</command> zignoruje status hold pakietów. Może to być "
+"użyteczne w połączeniu z <literal>dist-upgrade</literal> do unieważnienia "
+"dużej liczby niepożądanych wstrzymań. Pozycja w pliku konfiguracyjnym: "
+"<literal>APT::Ignore-Hold</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"Nie aktualizuje pakietów. Użyte w połączeniu z <literal>install</literal>, "
+"<literal>no-upgrade</literal> spowoduje, że pakiety, które są już "
+"zainstalowane, nie zostaną zaktualizowane. Pozycja w pliku konfiguracyjnym: "
+"<literal>APT::Get::Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"Nie instaluje nowych pakietów. Użyte w połączeniu z <literal>install</"
+"literal>, <literal>only-upgrade</literal> spowoduje zaktualizowanie pakietów "
+"już zainstalowanych i zignorowanie żądań instalowania nowych pakietów. "
+"Pozycja w pliku konfiguracyjnym: <literal>APT::Get::Only-Upgrade</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"Wymuszenie. Jest to niebezpieczna opcja, która powoduje, że apt-get "
+"kontynuuje swoje działanie bez żadnej interakcji z użytkownikiem, nawet "
+"jeśli robi coś, co może być szkodliwe. Nie powinna być używana, z wyjątkiem "
+"bardzo szczególnych sytuacji. Używanie <literal>force-yes</literal> może "
+"zniszczyć Twój system! Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"force-yes</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"Wymuszenie. Jest to niebezpieczna opcja, która powoduje, że apt-get "
+"kontynuuje swoje działanie bez żadnej interakcji z użytkownikiem, nawet "
+"jeśli robi coś, co może być szkodliwe. Nie powinna być używana, z wyjątkiem "
+"bardzo szczególnych sytuacji. Używanie <literal>force-yes</literal> może "
+"zniszczyć Twój system! Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"force-yes</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"Wymuszenie. Jest to niebezpieczna opcja, która powoduje, że apt-get "
+"kontynuuje swoje działanie bez żadnej interakcji z użytkownikiem, nawet "
+"jeśli robi coś, co może być szkodliwe. Nie powinna być używana, z wyjątkiem "
+"bardzo szczególnych sytuacji. Używanie <literal>force-yes</literal> może "
+"zniszczyć Twój system! Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"force-yes</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Force yes; this is a dangerous option that will cause apt to continue "
+#| "without prompting if it is doing something potentially harmful. It should "
+#| "not be used except in very special situations. Using <literal>force-yes</"
+#| "literal> can potentially destroy your system! Configuration Item: "
+#| "<literal>APT::Get::force-yes</literal>."
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"Wymuszenie. Jest to niebezpieczna opcja, która powoduje, że apt-get "
+"kontynuuje swoje działanie bez żadnej interakcji z użytkownikiem, nawet "
+"jeśli robi coś, co może być szkodliwe. Nie powinna być używana, z wyjątkiem "
+"bardzo szczególnych sytuacji. Używanie <literal>force-yes</literal> może "
+"zniszczyć Twój system! Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"force-yes</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"Nie ściąga pakietów do zainstalowania, tylko wypisuje ich URI. Każdy URI "
+"składa się z lokalizacji, nazwy pliku przeznaczenia, rozmiaru oraz "
+"oczekiwanej sumy kontrolnej MD5. Należy zauważyć, że nazwa pliku "
+"przeznaczenia nie musi być taka sama jak nazwa zdalnego pliku! Działa to "
+"także z poleceniami <literal>source</literal> i <literal>update</literal>. "
+"Używane z poleceniem <literal>update</literal>, nie wypisuje sum MD5 i "
+"rozmiaru, a także w gestii użytkownika leży wtedy rozpakowywanie spakowanych "
+"plików. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::Print-URIs</"
+"literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"Używa polecenia purge (wyczyść), zamiast remove (usuń) dla wszystkiego, co "
+"miałoby zostać usunięte. Obok pakietów, które są przeznaczone do "
+"wyczyszczenia, wyświetlana jest gwiazdka (\"*\"). <option>remove --purge</"
+"option> jest odpowiednikiem polecenia <option>purge</option>. Pozycja w "
+"pliku konfiguracyjnym: <literal>APT::Get::Purge</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"Ponownie instaluje pakiety, których najnowsza wersja już jest zainstalowana "
+"Pozycja w pliku konfiguracyjnym: <literal>APT::Get::ReInstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"Ta opcja jest domyślnie włączona, można ją wyłączyć używając <literal>--no-"
+"list-cleanup</literal>. Jeżeli jest włączona, <command>apt-get</command> "
+"będzie automatycznie zarządzał zawartością <filename>&statedir;/lists</"
+"filename>,tak aby przestarzałe pliki były usuwane. Jedynym powodem dla jej "
+"wyłączenia mogłyby być częste zmiany w sources.list. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::List-Cleanup</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"Ta opcja tworzy domyślny pin o priorytecie 990, używając podanego łańcucha "
+"znaków oznaczającego wersję dystrybucji. Nadpisuje to ogólne ustawienia z "
+"pliku <filename>/etc/apt/preferences</filename>. Opcja nie zmienia pinu "
+"pakietów, które mają własne (szczegółowe) ustawienia w powyższym pliku "
+"preferencji. W skrócie - ta opcja pozwala pozwala na prostą kontrolę, z "
+"których dystrybucji będą pobierane pakiety. Przykłady: <option>-t '2.1*'</"
+"option>, <option>-t unstable</option> lub <option>-t sid</option> Pozycja w "
+"pliku konfiguracyjnym: <literal>APT::Default-Release</literal>; zobacz także "
+"stronę podręcznika &apt-preferences;."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"Wykonuje tylko \"banalne\" (ang. \"trivial\") operacje. Tę opcję można "
+"porównać z <option>--assume-yes</option>, ale tam gdzie <option>--assume-"
+"yes</option> odpowiedziałoby \"tak\" na pytanie, <option>--trivial-only</"
+"option> odpowie \"nie\". Pozycja w pliku konfiguracyjnym: <literal>APT::"
+"Get::Trivial-Only</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"Jeżeli jakikolwiek pakiet miałby zostać usunięty, apt-get natychmiast kończy "
+"działanie. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::Remove</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"Jeżeli polecenie to albo <literal>install</literal>, albo <literal>remove</"
+"literal>, to ta opcja działa tak, jak uruchomienie polecenia "
+"<literal>autoremove</literal> i usuwa pakiety mające nieużywane już "
+"zależności. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"AutomaticRemove</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"Ma znaczenie tylko dla poleceń <literal>source</literal> i <literal>build-"
+"dep</literal>. Wskazuje na to, że podane nazwy pakietów źródłowych nie "
+"powinny być mapowane w tabeli pakietów binarnych. Oznacza to, że gdy podano "
+"tę opcję, to powyższe polecenia zaakceptują tylko nazwy pakietów źródłowych."
+"Nie będą akceptować nazw pakietów binarnych ani wyszukiwać odpowiadających "
+"im pakietów źródłowych. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"Only-Source</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"Ściągnij tylko plik diff, dsc albo tar pakietu źródłowego. Pozycje w pliku "
+"konfiguracyjnym: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::"
+"Dsc-Only</literal> oraz <literal>APT::Get::Tar-Only</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"Przetwarza tylko te pakiety z zależnościami wymaganymi do zbudowania pakietu "
+"ze źródeł (build-dependencies), które są zależnie od architektury "
+"komputera. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::Arch-Only</"
+"literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "Only process architecture-dependent build-dependencies. Configuration "
+#| "Item: <literal>APT::Get::Arch-Only</literal>."
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"Przetwarza tylko te pakiety z zależnościami wymaganymi do zbudowania pakietu "
+"ze źródeł (build-dependencies), które są zależnie od architektury "
+"komputera. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::Arch-Only</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "Pliki"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+#, fuzzy
+#| msgid ""
+#| "&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+#| "&apt-config;, &apt-secure;, The APT User's guide in &guidesdir;, &apt-"
+#| "preferences;, the APT Howto."
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;, &apt-conf;, "
+"&apt-config;, &apt-secure;, Przewodnik APT dla użytkowników w &guidesdir;, "
+"&apt-preferences;, APT Howto."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> zwraca zero, gdy zakończyło się pomyślnie, 100 - "
+"w przypadku błędu."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "odpytanie bufora APT"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<command>apt-cache</command> performs a variety of operations on APT's "
+#| "package cache. <command>apt-cache</command> does not manipulate the state "
+#| "of the system but does provide operations to search and generate "
+#| "interesting output from the package metadata."
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> wykonuje różnorodne operacje na buforze (cache) "
+"pakietów programu APT. <command>apt-cache</command> nie zmienia stanu "
+"systemu, ale dostarcza mechanizmów przeszukiwania metadanych pakietów i "
+"generowania interesującego wyjścia."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> tworzy bufor (cache) APT pakietów. Wywoływane "
+"jest automatycznie przez wszystkie polecenia potrzebujące bufora, jeśli nie "
+"istnieje lub jest przestarzały."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"<literal>showpkg</literal> wyświetla informacje na temat pakietów podanych w "
+"linii poleceń. Pozostałymi argumentami są nazwy pakietów. Wyświetlane są "
+"dostępne wersje oraz odwrotne zależności każdego z podanych pakietów, jak "
+"również zwykłe zależności dla każdej z wersji Normalne (zwykłe) zależności "
+"to są pakiety, od których dany pakiet zależy, odwrotne zależności stanowią "
+"te pakiety, które zależą od danego pakietu. Tak więc, pakiet musi spełniać "
+"normalne zależności, ale odwrotnych zależności - nie musi. Na przykład, "
+"<command>apt-cache showpkg libreadline2</command> wypisze wyjście podobne do "
+"poniższego:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"Jak widać libreadline2 w wersji 2.1-12 zależy od libc5 i ncurses3.0, które "
+"muszą być zainstalowane, aby libreadline2 działała. Z kolei libreadlineg2 i "
+"libreadline2-altdev zależą od libreadline2. Jeżeli libreadline2 jest "
+"zainstalowany, to libc5 i ncurses3.0 (i ldso) muszą być także zainstalowane; "
+"natomiast libreadlineg2 oraz libreadline2-altdev nie muszą być "
+"zainstalowane. W celu zrozumienia, co oznaczają pozostałe linie, najlepiej "
+"przejrzeć kod źródłowy programu apt."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"<literal>stats</literal> wyświetla statystyki dotyczące bufora pakietów. "
+"Nie wymaga żadnych argumentów. Wypisywane są następujące statystyki:"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>Całkowita liczba nazw pakietów (Total package names)</literal> - "
+"liczba nazw pakietów znajdujących się w buforze."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>Zwykłe pakiety (Normal packages)</literal> jest to liczba zwykłych, "
+"regularnych nazw pakietów; są to pakiety, dla których istnieje relacja "
+"\"jeden do jednego\" między ich nazwami a nazwami używanymi przez inne "
+"pakiety jako zależności. Większość pakietów należy do tej kategorii."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>Czyste pakiety wirtualne (Pure virtual packages)</literal> określa "
+"liczbę pakietów, które istnieją tylko jako nazwa pakietu wirtualnego; to "
+"jest pewne pakiety \"dostarczają\" tej nazwy wirtualnej, ale żaden pakiet "
+"nie używa tej nazwy. Na przykład \"mail-transport-agent\" w systemie Debian "
+"jest czystym pakietem wirtualnym; kilka pakietów dostarcza \"mail-transport-"
+"agenta\", ale żaden pakiet nie nazywa się \"mail-transport-agent\"."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>Pojedyncze pakiety wirtualne (Single virtual packages)</literal> - "
+"liczba pakietów, dla których istnieje tylko jeden pakiet, który dostarcza "
+"danego pakietu wirtualnego. Na przykład, w systemie Debian \"X11-text-viewer"
+"\" jest pakietem wirtualnym, ale tylko jeden pakiet, mianowicie \"xless\","
+"dostarcza \"X11-text-viewer\"."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>Mieszane pakiety wirtualne (Mixed virtual packages)</literal> - "
+"liczba pakietów, które albo dostarczają poszczególnych pakietów wirtualnych, "
+"albo nazywają się tak, jak nazwa pakietu wirtualnego. Na przykład w "
+"systemie Debian \"debconf\" jest zarówno zwykłym pakietem, jak i jest "
+"pakietem dostarczanym przez pakiet \"debconf-tiny\"."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>Brakujące (Missing)</literal> jest liczbą nazw pakietów, do których "
+"odnoszą się jakieś zależności, ale które nie są spełnione przez żaden z "
+"dostępnych pakietów. Brakujące pakiety mogą być dowodem, że nie ma dostępu "
+"do całej dystrybucji albo że pakiet (rzeczywisty lub wirtualny) został "
+"usunięty z dystrybucji. Zazwyczaj odniesienia takie znajdują się w "
+"zależnościach typu \"Conflicts\" lub \"Breaks\"."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>Total distinct</literal> versions is the number of package "
+#| "versions found in the cache; this value is therefore at least equal to "
+#| "the number of total package names. If more than one distribution is being "
+#| "accessed (for instance, \"stable\" and \"unstable\"), this value can be "
+#| "considerably larger than the number of total package names."
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>Całkowita liczba różnych wersji (Total distinct versions)</literal> "
+"jest to liczba wersji pakietów znajdujących się w buforze, tak więc ta "
+"wartość jest co najmniej równa liczbie wszystkich nazw pakietów. Jeżeli "
+"pobierane są pakiety z więcej niż jednej dystrybucji (na przykład zarówno ze "
+"\"stable\", jak i z \"unstable\"), wartość ta może być znacznie większa niż "
+"liczba wszystkich nazw pakietów."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>Całkowite zależności (Total dependencies)</literal> to liczba "
+"więzów zależności wymaganych przez wszystkie pakiety w buforze."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>showsrc</literal> displays all the source package records that "
+#| "match the given package names. All versions are shown, as well as all "
+#| "records that declare the name to be a binary package."
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> wyświetla wszystkie pakiety źródłowe, które "
+"odpowiadają podanym nazwom pakietów. Wyświetlone zostaną wszystkie wersje "
+"tych pakietów oraz pakiety, których podana nazwa odpowiada nazwie pakietu "
+"binarnego."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"<literal>dump</literal> pokazuje krótką listę wszystkich pakietów w buforze. "
+"Jest używany głównie w celu odpluskwiania."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"<literal>dumpavail</literal> wypisuje na standardowe wyjście (stdout) listę "
+"dostępnych pakietów. Jest to polecenie odpowiednie do użycia z programem "
+"&dpkg; i jest używane w metodzie &dselect; tego programu."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"<literal>unmet</literal> pokazuje podsumowanie wszystkich niespełnionych "
+"zależności w buforze pakietów"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"<literal>show</literal> spełnia funkcje podobne do <command>dpkg --print-"
+"avail</command>; pokazuje szczegółowe informacje o podanych pakietach."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>search</literal> performs a full text search on all available "
+#| "package lists for the POSIX regex pattern given, see &regex;. It "
+#| "searches the package names and the descriptions for an occurrence of the "
+#| "regular expression and prints out the package name and the short "
+#| "description, including virtual package names. If <option>--full</option> "
+#| "is given then output identical to <literal>show</literal> is produced for "
+#| "each matched package, and if <option>--names-only</option> is given then "
+#| "the long description is not searched, only the package name is."
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"<literal>search</literal> wykonuje pełne wyszukiwanie podanego wzorca "
+"będącego wyrażeniem regularnym POSIX (patrz &regex;) we wszystkich "
+"dostępnych listach pakietów. Przeszukuje nazwy pakietów (w tym pakietów "
+"wirtualnych) i ich szczegółowe (długie) opisy, szukając w nich podanego "
+"wyrażenia regularnego i wypisuje nazwę pakietu i jego krótki opis. Jeżeli "
+"podana jest opcja <option>--full</option>, to wtedy dla każdego znalezionego "
+"pakietu informacje na wyjściu są podobne do tego, co pokazuje polecenie "
+"<literal>show</literal>. Jeżeli podano opcję <option>--names-only</option>, "
+"to są przeszukiwane tylko nazwy pakietów, bez ich długich opisów."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+"Oddzielne argumenty mogą być używane do podania kilku wzorców, które będą "
+"traktowane jakby były połączone spójnikiem logicznym \"i\"."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"<literal>depends</literal> wyświetla listę wszystkich zależności danego "
+"pakietu i wszystkie możliwe pakiety, które mogą spełnić te zależności."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"<literal>rdepends</literal> pokazuje listę wszystkich odwrotnych zależności "
+"danego pakietu."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"To polecenie wyświetla nazwy wszystkich pakietów znanych systemowi APT. "
+"Opcjonalnym argumentem jest przedrostek nazwy pakietów. Wynik jest "
+"odpowiedni do użycia z funkcją powłoki (shella) uzupełniania nazw za pomocą "
+"klawisza tabulacji i jest wypisywany bardzo szybko. Tego polecenia najlepiej "
+"używać z opcją <option>--generate</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"Proszę zauważyć, że to, iż pakiet jest znany systemowi APT, niekoniecznie "
+"oznacza, że jest dostępny do pobrania i zainstalowania albo zainstalowany. "
+"Może być np. pakietem wirtualnym, które także są wypisane w wygenerowanej "
+"liście."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"<literal>dotty</literal> bierze jako argument listę pakietów i generuje "
+"wyjście odpowiednie dla programu dotty z pakietu <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink>. Wynikiem będzie "
+"zbiór wierzchołków i krawędzi reprezentujących powiązania między pakietami. "
+"Domyślnie podane pakiety wyśledzą wszystkie pakiety zależne. Może to "
+"spowodować wypisanie bardzo dużego grafu. Aby wypisać powiązania tylko "
+"pomiędzy pakietami podanymi w linii poleceń, należy użyć opcji <literal>APT::"
+"Cache::GivenOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"Wynikowe wierzchołki będą miały różnorakie kształty: zwykłe pakiety są "
+"prostokątami, czyste pakiety wirtualne to trójkąty, mieszane pakiety "
+"wirtualne są rombami, sześciokąty oznaczają brakujące pakiety . Pomarańczowe "
+"prostokąty oznaczają koniec rekurencji (liście), niebieskie linie to pre-"
+"zależności, linie zielone to konflikty."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr "Uwaga: dotty nie potrafi narysować większego zbioru pakietów."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"Robi to samo, co <literal>dotty</literal>, tylko dla xvcg z <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">narzędzia VCG</"
+"ulink>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> jest pomyślane w celu debugowania zagadnień "
+"związanych z plikiem preferencji. Jeżeli nie podano żadnych opcji, wypisane "
+"zostaną informacje o priorytecie każdego źródła. W przeciwnym wypadku, "
+"wypisuje szczegółowe informacje o priorytecie danego pakietu."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"polecenie <literal>madison</literal> z <literal>apt-cache</literal> próbuje "
+"naśladować format wyjścia i część funkcjonalności programu <literal>madison</"
+"literal> - narzędzia zarządzania archiwum Debiana. Wyświetla dostępne wersje "
+"pakietów w formacie tabeli. W przeciwieństwie do oryginału, może wyświetlić "
+"informacje tylko dla tych architektur, dla których APT pobrało listy "
+"pakietów (<literal>APT::Architecture</literal>)."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"Podaje nazwę pliku to przechowywania bufora pakietów, który jest podstawowym "
+"buforem używanym we wszystkich operacjach. Pozycja w pliku konfiguracyjnym: "
+"<literal>Dir::Cache::pkgcache</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"Podaje nazwę pliku to przechowywania bufora źródeł. Jest używany tylko przez "
+"akcję <literal>gencaches</literal> i przechowuje sparsowaną wersję "
+"informacji o pakietach pobraną ze zdalnych źródeł. Podczas budowania bufora "
+"pakietów, bufor źródeł jest używany w celu uniknięcia ponownego parsowania "
+"wszystkich plików pakietów. Pozycja w pliku konfiguracyjnym: <literal>Dir::"
+"Cache::srcpkgcache</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Cichy; wypisuje tylko informacje potrzebne do logowania, opuszczając "
+"wskaźniki postępu. Więcej znaków q spowoduje jeszcze bardziej ciche wyjście, "
+"maksimum jest 2. Można także ustawić poziom cichości za pomocą <option>-q=#</"
+"option>,nadpisując tym samym opcję z pliku konfiguracyjnego. Pozycja w "
+"pliku konfiguracyjnym: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"Wyświetla tylko ważne zależności; do używania z akcjami <literal>unmet</"
+"literal> o <literal>depends</literal>. Powoduje wypisanie tylko zależności "
+"typu Depends i Pre-Depends. Pozycja w pliku konfiguracyjnym: <literal>APT::"
+"Cache::Important</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "Per default the <literal>depends</literal> and <literal>rdepends</"
+#| "literal> print all dependencies. This can be tweaked with these flags "
+#| "which will omit the specified dependency type. Configuration Item: "
+#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
+#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"Domyślnie <literal>depends</literal> i <literal>rdepends</literal> wypisują "
+"wszystkie zależności. Można to zmienić, używając tych flag, które spowodują "
+"pominięcie podanych typów zależności. Pozycja w pliku konfiguracyjnym: "
+"<literal>APT::Cache::Show<replaceable>TypZależności</replaceable></literal>, "
+"na przykład <literal>APT::Cache::ShowRecommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"Podczas szukania wypisuj pełną informację o pakiecie. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Cache::ShowFull</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"Akcja show wypisuje wszystkie rekordy dla wszystkich dostępnych wersji. Jest "
+"to opcja domyślna, aby ją wyłączyć, proszę użyć <option>--no-all-versions</"
+"option>. Jeżeli podano <option>--no-all-versions</option>, to będzie "
+"wyświetlana tylko wersja-kandydat (czyli ta, która byłaby wybrana do "
+"instalacji). Ta opcja ma znaczenie tylko dla polecenia <literal>show</"
+"literal>. Pozycja w pliku konfiguracyjnym: <literal>APT::Cache::AllVersions</"
+"literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"Automatycznie odbudowuje bufor pakietów, zamiast używać istniejącego "
+"bufora. Ta opcja jest domyślnie włączona, aby ją wyłączyć, należy użyć "
+"<option>--no-generate</option>. Pozycja w pliku konfiguracyjnym: "
+"<literal>APT::Cache::Generate</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "Only search on the package names, not the long descriptions. "
+#| "Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"Przeszukaj tylko nazwy pakietów, pomijając szczegółowe opisy. Pozycja w "
+"pliku konfiguracyjnym: <literal>APT::Cache::NamesOnly</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"Powoduje, że akcja <literal>pkgnames</literal> wypisze nazwy wszystkich "
+"pakietów, łącznie z pakietami wirtualnymi oraz pakietami mającymi brakujące "
+"zależności. Pozycja w pliku konfiguracyjnym: <literal>APT::Cache::AllNames</"
+"literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"Powoduje, że zależności w poleceniach <literal>depends</literal> i "
+"<literal>rdepends</literal> będą zależnościami rekurencyjnymi, tak że "
+"wszystkie wymienione pakiety zostaną wypisane tylko raz. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Cache::RecurseDepends</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"Ogranicza wyjście poleceń <literal>depends</literal> i <literal>rdepends</"
+"literal> tylko do pakietów, które są obecnie zainstalowane. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Cache::Installed</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+#, fuzzy
+#| msgid ""
+#| "Use source index field ordering. Configuration Item: <literal>APT::"
+#| "SortPkgs::Source</literal>."
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"Używa kolejności pól indeksu pliku Source. Pozycja w pliku konfiguracji: "
+"<literal>APT::SortPkgs::Source</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> zwraca zero, gdy zakończyło się pomyślnie, 100 "
+"- w przypadku błędu."
+
+#
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "Narzędzie zarządzanie kluczami APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> jest używane do zarządzania listami kluczy "
+"używanych przez APT do sprawdzania autentyczności pakietów. Pakiety, których "
+"autentyczność została sprawdzona przy użyciu tych kluczy, są uznawane za "
+"zaufane."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "Polecenia"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"Dodaje nowy klucz do listy zaufanych kluczy. Klucz jest czytany z pliku "
+"podanego jako parametr &synopsis-param-filename; lub ze standardowego "
+"wejścia, jeśli zamiast nazwy pliku podano <literal>-</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr "Usuwa klucz z listy zaufanych kluczy."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr "Wyświetla klucz &synopsis-param-keyid; na standardowym wyjściu."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "Wypisuje na standardowe wyjście wszystkie zaufane klucze."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+#, fuzzy
+#| msgid "List trusted keys."
+msgid "List trusted keys with fingerprints."
+msgstr "Wyświetla listę zaufanych kluczy."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"Aktualizuje lokalną składnicę kluczy używając składnicy kluczy archiwum i "
+"usuwa z lokalnej składnicy niepoprawne klucze archiwum. Składnica kluczy "
+"archiwum jest dostarczana przez pakiet <literal>archive-keyring</literal> "
+"Twojej dystrybucji, np. pakiet &keyring-package; w systemach &keyring-"
+"distro;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"Aktualizuje składnicę kluczy, działając podobnie do powyższego polecenia "
+"<command>update</command>, z tą różnicą, że pobiera składnicę kluczy "
+"archiwum z URI i waliduje go względem klucza głównego. Wymaga "
+"zainstalowanego programu &wget; oraz podanego (podczas budowania APT) "
+"serwera, z którego główny klucz będzie pobrany. APT w Debianie nie obsługuje "
+"tego polecenia i opiera się zamiast niego na poleceniu <command>update</"
+"command>, ale APT w Ubuntu je obsługuje."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "Opcje"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"Proszę zauważyć, że poniższe opcje muszą być podane przed poleceniami "
+"opisanymi w poprzednim rozdziale."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"Opcja pozwala na podanie pliku składnicy kluczy publicznych używanego w "
+"programie. Domyślnie program używa pliku <filename>trusted.gpg</filename> "
+"oraz wszystkich plików częściowych w katalogu <filename>trusted.gpg.d</"
+"filename>. <filename>trusted.gpg</filename> jest jednakże podstawową "
+"składnicą kluczy, co oznacza na przykład to, że nowe klucze będą dodawane "
+"właśnie tam."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "When you request that a package is installed, and as a result other "
+#| "packages are installed to satisfy its dependencies, the dependencies are "
+#| "marked as being automatically installed. Once these automatically "
+#| "installed packages are no longer depended on by any manually installed "
+#| "packages, they will be removed by e.g. <command>apt-get</command> or "
+#| "<command>aptitude</command>."
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"Kiedy użytkownik zażąda zainstalowania pakietu, to zazwyczaj instalowane są "
+"również inne pakiety, zależące od żądanego pakietu. Te zależne pakiety są "
+"oznaczane jako zainstalowane automatycznie. Kiedy takie automatycznie "
+"zainstalowane pakiety nie są już potrzebne (czyli żaden inny pakiet od nich "
+"nie zależy), zostaną usunięte na przykład przez <command>apt-get</command> "
+"lub <command>aptitude</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> jest używane do zaznaczania pakietu jako "
+"zainstalowanego automatycznie, co spowoduje jego usunięcie, w sytuacji gdy "
+"żaden inny ręcznie zainstalowany pakiet nie będzie od niego zależał."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> jest używane do zaznaczania pakietu jako "
+"zainstalowanego ręcznie, co go uchroni przed automatycznym usunięciem, w "
+"sytuacji gdy żaden inny pakiet nie będzie od niego zależał."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>auto</literal> is used to mark a package as being automatically "
+#| "installed, which will cause the package to be removed when no more "
+#| "manually installed packages depend on this package."
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>auto</literal> jest używane do zaznaczania pakietu jako "
+"zainstalowanego automatycznie, co spowoduje jego usunięcie, w sytuacji gdy "
+"żaden inny ręcznie zainstalowany pakiet nie będzie od niego zależał."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal> jest używane do wypisania listy wszystkich "
+"pakietów zainstalowanych automatycznie. Każdy pakiet jest wypisywany w "
+"osobnej linii. Jeśli nie podano żadnej nazwy pakietu, to zostaną wypisane "
+"wszystkie zainstalowane automatycznie pakiety. Jeśli podano nazwy pakietów, "
+"to zostaną wypisane tylko te z nich, które są automatycznie zainstalowane."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> może zostać użyte w dokładnie taki sam sposób, "
+"jak <literal>showauto</literal> z tym wyjątkiem, że wypisze listę ręcznie "
+"zainstalowanych pakietów."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"Informacje o stanie pakietów są czytane z (lub zapisywane do) pliku "
+"przekazanego w parametrze &synopsis-param-filename; zamiast z pliku "
+"domyślnego, którym jest <filename>extended_status</filename> w katalogu "
+"określonym w pliku konfiguracyjnym w pozycji<literal>Dir::State</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>manual</literal> is used to mark a package as being manually "
+#| "installed, which will prevent the package from being automatically "
+#| "removed if no other packages depend on it."
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>manual</literal> jest używane do zaznaczania pakietu jako "
+"zainstalowanego ręcznie, co go uchroni przed automatycznym usunięciem, w "
+"sytuacji gdy żaden inny pakiet nie będzie od niego zależał."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> jest używane do usunięcia stanu wstrzymania "
+"pakietu ustawionego poprzednio i pozwolenia na wykonywanie wszystkich akcji "
+"na tym pakiecie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> jest używane do wypisania listy wszystkich "
+"pakietów wstrzymanych, w taki sam sposób jak pozostałe polecenia \"show\"."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> zwraca zero, gdy zakończyło się pomyślnie, "
+"wartość niezerową - w przypadku błędu."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "Wsparcie APT dla autentykacji archiwum."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "Starting with version 0.6, <command>apt</command> contains code that does "
+#| "signature checking of the Release file for all archives. This ensures "
+#| "that packages in the archive can't be modified by people who have no "
+#| "access to the Release file signing key."
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"Począwszy od wersji 0.6 <command>apt</command> zawiera kod sprawdzający "
+"sygnatury plików \"Release\" wszystkich archiwów. Zapewnia to, że pakiety w "
+"archiwum nie mogą być zmieniane przez ludzi nie mających dostępu do klucza "
+"używanego do podpisywania plików \"Release\"."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "The package front-ends &apt-get;, &aptitude; and &synaptic; support this "
+#| "new authentication feature."
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"Nakładki na APT typu &apt-get;, &aptitude; i &synaptic; obsługują ten nowy "
+"sposób autoryzacji pakietów."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted archives"
+msgid "Unsigned Repositories"
+msgstr "Zaufane archiwa"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "Trusted archives"
+msgid "Signed Repositories"
+msgstr "Zaufane archiwa"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "The chain of trust from an apt archive to the end user is made up of "
+#| "several steps. <command>apt-secure</command> is the last step in this "
+#| "chain; trusting an archive does not mean that you trust its packages not "
+#| "to contain malicious code, but means that you trust the archive "
+#| "maintainer. It's the archive maintainer's responsibility to ensure that "
+#| "the archive's integrity is preserved."
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"Łańcuch zaufania prowadzący z archiwum APT do użytkownika końcowego składa "
+"się z kilku różnych kroków. <command>apt-secure</command> jest ostatnim z "
+"nich. Ufanie archiwum nie oznacza, że pakiety z tego archiwum nie zawierają "
+"złośliwego kodu, ale oznacza ufanie opiekunowi archiwum. Obowiązkiem "
+"opiekuna archiwum jest zapewnienie poprawności integralności archiwum."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"apt-secure nie sprawdza sygnatur na poziomie pakietów. Aby sprawdzać te "
+"rzeczy, powinno się przyjrzeć poleceniom <command>debsig-verify</command> i "
+"<command>debsign</command> (dostarczanych odpowiednio w pakietach debsig-"
+"verify i devscripts)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "The chain of trust in Debian starts when a maintainer uploads a new "
+#| "package or a new version of a package to the Debian archive. In order to "
+#| "become effective, this upload needs to be signed by a key contained in "
+#| "the Debian Maintainers keyring (available in the debian-keyring package). "
+#| "Maintainers' keys are signed by other maintainers following pre-"
+#| "established procedures to ensure the identity of the key holder."
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"Łańcuch zaufania w Debianie zaczyna się od wgrania nowego pakietu lub nowej "
+"wersji pakietu przez jego opiekuna do archiwum Debiana. Dostarczony przez "
+"opiekuna pakiet musi być podpisany przez klucz opiekuna znajdujący się w "
+"składnicy kluczy opiekunów Debiana (dostępnej w pakiecie debian-keyring). "
+"Klucze opiekunów są podpisane przez innych opiekunów, tak jak wymagają tego "
+"odpowiednie procedury używane w Debianie do identyfikacji posiadacza klucza."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"Po tym jak dostarczony przez opiekuna pakiet zostanie zweryfikowany i "
+"dołączony do archiwum, sygnatura opiekuna jest usuwana, a sumy kontrolne "
+"pakietu są wyliczane i umieszczane w pliku Packages. Sumy kontrolne "
+"wszystkich plików Packages są następnie wyliczane i umieszczane w pliku "
+"Release. Plik Release jest następnie podpisywany przy użyciu klucza archiwum "
+"tego wydania dystrybucji &keyring-distro; i dystrybuowany wraz z pakietami i "
+"plikami Packages przez serwery lustrzane &keyring-distro;. Klucze archiwum "
+"znajdują się w składnicy kluczy &keyring-distro; dostępnej w pakiecie "
+"&keyring-package;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"Użytkownicy końcowi mogą sprawdzić sygnaturę pliku Release, wydobyć z niego "
+"sumę kontrolną MD5 pakietu i porównać ją z sumą kontrolną MD5 pobranego "
+"pakietu. Mogą też polegać na tym, że APT zrobi to automatycznie."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"Proszę zauważyć, że jest to czym innym niż sprawdzanie sygnatur "
+"poszczególnych pakietów. Zostało to zaprojektowane tak, aby uchronić przed "
+"dwoma możliwymi typami ataków:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>Ataki sieciowe \"człowiek pośrodku\" (ang. \"man in the middle\")</"
+"literal>. Jeżeli sygnatury nie są sprawdzane, to ktoś złośliwy może "
+"wprowadzić siebie w proces pobierania pakietów i dostarczyć złośliwe "
+"oprogramowanie albo przez przejęcie kontroli elementu infrastruktury "
+"sieciowej (router, przełącznik itp.), albo przez przekierowanie ruchu do "
+"fałszywego serwera (przez rozsyłanie fałszywych pakietów ARP lub DNS, ang. "
+"\"ARP (DNS) spoofing\")."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>Złamanie zabezpieczeń sieci serwerów lustrzanych (ang. \"mirror "
+"network compromise\")</literal>. Jeśli sygnatury nie są sprawdzane, to ktoś "
+"złośliwy może włamać się na serwer lustrzany, zmodyfikować tam pliki, co "
+"spowodowałoby udostępnienie złośliwego oprogramowania wszystkim użytkownikom "
+"pobierającym pakiety z tego serwera."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "However, it does not defend against a compromise of the Debian master "
+#| "server itself (which signs the packages) or against a compromise of the "
+#| "key used to sign the Release files. In any case, this mechanism can "
+#| "complement a per-package signature."
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"Jednakże nie chroni przed złamaniem zabezpieczeń głównego serwera Debiana "
+"(używanego do podpisywania pakietów) lub złamaniem zabezpieczeń klucza "
+"używanego do podpisywania plików Release. Mechanizm ten stanowi uzupełnienie "
+"dla sprawdzania sygnatur poszczególnych pakietów."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "User configuration"
+msgid "User Configuration"
+msgstr "Konfiguracja użytkownika"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "<command>apt-key</command> is the program that manages the list of keys "
+#| "used by apt. It can be used to add or remove keys, although an "
+#| "installation of this release will automatically contain the default "
+#| "Debian archive signing keys used in the Debian package repositories."
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"<command>apt-key</command> jest programem służącym do zarządzania listą "
+"kluczy używanych przez APT. Można go użyć do dodania lub usunięcia klucza, "
+"chociaż zainstalowanie bieżącego wydania automatycznie dostarczy domyślny "
+"klucz używany w repozytoriach pakietów Debiana do podpisywania archiwów "
+"Debiana."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"Aby dodać nowy klucz, należy go najpierw pobrać (używając zaufanego kanału "
+"komunikacji podczas pobierania), dodać go poleceniem <command>apt-key</"
+"command> oraz uruchomić <command>apt-get update</command>, tak żeby APT "
+"mogło pobrać i zweryfikować pliki <filename>InRelease</filename> lub "
+"<filename>Release.gpg</filename> ze skonfigurowanych archiwów."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid "User configuration"
+msgid "Repository Configuration"
+msgstr "Konfiguracja użytkownika"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr "Aby dołączyć sygnatury do archiwum, którym się opiekujesz, należy:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"<emphasis>Utworzyć plik Release w katalogu najwyższego poziomu</emphasis>, "
+"jeśli jeszcze nie istnieje. Można to zrobić używając <command>apt-ftparchive "
+"release</command> (dostarczanego w pakiecie apt-utils)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>Podpisać go</emphasis>. Można to zrobić za pomocą poleceń "
+"<command>gpg --clearsign -o InRelease Release</command> i <command>gpg -abs -"
+"o Release.gpg Release</command>."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "<emphasis>Publish the key fingerprint</emphasis>, that way your users "
+#| "will know what key they need to import in order to authenticate the files "
+#| "in the archive."
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>Opublikować odcisk klucza (ang. \"key fingerprint\")</emphasis>, "
+"tak żeby użytkownicy wiedzieli, który klucz zaimportować, żeby móc "
+"autoryzować plików w archiwum."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"Po każdej zmianie zawartości archiwum (dodaniu lub usunięciu pakietów), "
+"opiekun archiwum musi wykonać pierwsze dwa z wymienionych powyżej kroków."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+#, fuzzy
+#| msgid ""
+#| "For more background information you might want to review the <ulink url="
+#| "\"http://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+#| "Security Infrastructure</ulink> chapter of the Securing Debian Manual "
+#| "(available also in the harden-doc package) and the <ulink url=\"http://"
+#| "www.cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution "
+#| "HOWTO</ulink> by V. Alex Brennen."
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"Więcej informacji można znaleźć w rozdziale \"<ulink url=\"http://www.debian."
+"org/doc/manuals/securing-debian-howto/ch7\">Debian Security Infrastructure</"
+"ulink>\" podręcznika \"Securing Debian Manual\" i w dokumencie \"<ulink url="
+"\"http://www.cryptnet.net/fdp/crypto/strong_distro.html\" >Strong "
+"Distribution HOWTO</ulink>\" napisanym przez V. Alexa Brennena."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "Autorzy strony podręcznika"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"Ta strona podręcznika jest oparta na pracy następujących osób: Javier "
+"Fernández-Sanguino Peña, Isaac Jones, Colin Walters, Florian Weimer i "
+"Michael Vogt."
+
+#
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "Narzędzie APT do zarządzania źródłami typu CD-ROM"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"<command>apt-cdrom</command> jest używany w celu dodania nowego CD-ROM-u do "
+"listy dostępnych źródeł programu APT. <command>apt-cdrom</command> określa "
+"strukturę dysku, poprawia ewentualne błędy powstałe podczas produkcji CD-ROM-"
+"u i weryfikuje pliki indeksów."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"Dodanie nowych CD do systemu APT nie może być zrobione ręcznie, tak więc "
+"używanie <command>apt-cdrom</command> jest konieczne. Co więcej, każdy dysk "
+"w wielodyskowym archiwum musi być włożony i zeskanowany oddzielnie."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"<literal>add</literal> jest używane do dodania nowego dysku do listy źródeł. "
+"Odmontuje urządzenie CD-ROM, poprosi o włożenie dysku, a następnie zeskanuje "
+"go i skopiuje pliki indeksu. Jeżeli dysk nie ma właściwego katalogu "
+"<filename>.disk</filename>, użytkownik zostanie poproszony o podanie opisu "
+"dysku."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"APT używa identyfikatora CD-ROM-u do określenia, który dysk obecnie znajduje "
+"się w napędzie, oraz przechowuje bazę tych identyfikatorów w pliku "
+"<filename>&statedir;/cdroms.list</filename>"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"Narzędzie debugujące, wyświetlające identyfikator włożonego dysku oraz nazwę "
+"pliku, w którym jest przechowywany."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+#, fuzzy
+#| msgid ""
+#| "Mount point; specify the location to mount the CD-ROM. This mount point "
+#| "must be listed in <filename>/etc/fstab</filename> and properly "
+#| "configured. Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"Punkt montowania. Podaje lokalizację katalogu, w którym będzie zamontowany "
+"CD-ROM. Musi istnieć odpowiednia konfiguracja dla tego punktu montowania w "
+"pliku <filename>/etc/fstab</filename>. Pozycja w pliku konfiguracyjnym: "
+"<literal>Acquire::cdrom::mount</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"Punkt montowania. Podaje lokalizację katalogu, w którym będzie zamontowany "
+"CD-ROM. Musi istnieć odpowiednia konfiguracja dla tego punktu montowania w "
+"pliku <filename>/etc/fstab</filename>. Pozycja w pliku konfiguracyjnym: "
+"<literal>Acquire::cdrom::mount</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"Przemianuj dysk. Zmienia etykietę dysku lub unieważnia etykietę wcześniej "
+"daną dyskowi. Podanie tej opcji spowoduje, że <command>apt-cdrom</command> "
+"spyta się o nową etykietę. Pozycja w pliku konfiguracyjnym: <literal>APT::"
+"CDROM::Rename</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"Nie montuj. Uniemożliwia programowi <command>apt-cdrom</command> montowanie "
+"i odmontowywanie CDROM-u. Pozycja w pliku konfiguracyjnym: <literal>APT::"
+"CDROM::NoMount</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"Szybkie kopiowanie. Zakłada, że pliki z pakietami są poprawne i nie sprawdza "
+"każdego pakietu. Ta opcja powinna być używana tylko wtedy, jeżeli "
+"<command>apt-cdrom</command> był już uruchomiony na danym dysku i nie wykrył "
+"na nim żadnych błędów. Pozycja w pliku konfiguracyjnym: <literal>APT::"
+"CDROM::Fast</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"Gruntowne przeglądanie pakietów. Ta opcja może być potrzebna do indeksowania "
+"starych dysków z Debianem 1.1/1.2, w których pliki Package były umieszczone "
+"w dziwnych miejscach. Indeksowanie całego CD zabiera więcej czasu, ale "
+"znajdzie wszystkie takie pliki."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"Bez zmian. Nie zmienia pliku &sources-list; i nie zapisuje pików "
+"indeksowych. Jednakże nadal wszystko jest sprawdzane. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::CDROM::NoAct</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> zwraca zero, gdy zakończyło się pomyślnie, 100 "
+"- w przypadku błędu."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "Program odpytywania konfiguracji APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> jest wewnętrznym programem używanym przez "
+"różne części pakietu APT w celu zapewnienia spójności konfiguracji. Uzyskuje "
+"dostęp do głównego pliku konfiguracyjnego <filename>/etc/apt/apt.conf</"
+"filename> w sposób łatwy do użycia w programach skryptowych."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"shell pozwala skryptom powłoki na uzyskanie informacji o konfiguracji. "
+"Wymaga podania pary argumentów: pierwszym z nich jest zmienna powłoki, a "
+"drugim nazwa zmiennej konfiguracyjnej do odczytania. Wyjściem jest lista "
+"przypisań zmiennych powłoki dla każdej odczytanej wartości konfiguracji. "
+"Przykład użycia w skrypcie powłoki:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MojaAplikacja::opcje`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"Powyższe ustawi wartość zmiennej środowiskowej powłoki $OPTS na wartość "
+"zmiennej MojaAplikacja::opcje, z domyślną wartością <option>-f</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"Do zmienna konfiguracji można dołączyć /[fbdi]. f zwraca nazwy plików, d - "
+"katalogi, b - true lub false, a i - liczbę. Każda ze zwracanych wartości "
+"jest ujednolicana i weryfikowana."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "Wyświetla zawartość przestrzeni konfiguracji."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"Dołącza opcje mające pustą wartość. Jest to zachowanie domyślne, prosimy "
+"użyć <literal>--no-empty</literal>, aby usunąć takie opcje z wyjścia."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"Definiuje wyjście każdej opcji konfiguracji. &percnt;t zostanie zastąpiony "
+"indywidualną nazwą znacznika, &percnt;f - pełną nazwą hierarchiczną opcji, a "
+"&percnt;v - wartością opcji. Jeśli użyje się dużych liter, to znaki "
+"specjalne występujące w wartości zostaną zakodowane, w taki sposób, żeby "
+"można ich było bezpiecznie użyć wewnątrz łańcuchów typu \"quoted-string\" "
+"definiowanych przez RFC822. Dodatkowo &percnt;n będzie zastąpiony przez znak "
+"nowej linii, a &percnt;N przez znak tabulacji. Znak &percnt; można uzyskać, "
+"używając &percnt;&percnt;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> zwraca zero, gdy zakończyło się pomyślnie, 100 "
+"- w przypadku błędu."
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "Wstępna dokumentacja hierarchii Debug::*."
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "Plik konfiguracyjny dla APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"<filename>/etc/apt/apt.conf</filename> jest głównym plikiem konfiguracyjnym "
+"dzielonym przez wszystkie narzędzia pakietu APT. Nie jest jednak jedynym "
+"miejscem, w którym mogą być zmieniane opcje konfiguracji. Wszystkie "
+"narzędzia używają także wspólnego parsera linii poleceń, zapewniając "
+"jednolite środowisko pracy."
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+"Kiedy narzędzie APT rozpoczyna działanie, czyta pliki konfiguracyjne w "
+"następującym porządku:"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+"plik podany w zmiennej środowiskowej <envar>APT_CONFIG</envar> (jeśli jest "
+"ustawiona)."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"wszystkie pliki w <literal>Dir::Etc::Parts</literal> w rosnącym porządku "
+"alfanumerycznym, których nazwy nie mają rozszerzenia lub mają rozszerzenie "
+"\"<literal>conf</literal>\" i składają się tylko ze znaków alfanumerycznych, "
+"myślników (-), podkreśleń (_) i kropek (.). W przeciwnym wypadku APT "
+"wyświetli informacje o zignorowaniu pliku, o ile nazwa tego pliku pasuje do "
+"wzorca skonfigurowanego w opcji <literal>Dir::Ignore-Files-Silently</"
+"literal>, w którym to przypadku plik zostanie zignorowany bez wypisywania "
+"żadnych informacji."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+"główny plik konfiguracyjny określony przez <literal>Dir::Etc::main</literal>."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"opcje linii poleceń są stosowane do nadpisania dyrektyw konfiguracji lub do "
+"załadowania kolejnych plików konfiguracyjnych."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "Składnia"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"Plik konfiguracyjny jest zorganizowany jako struktura drzewiasta z opcjami "
+"podzielonymi według grup funkcjonalności. Specyfikacja opcji jest podawana w "
+"notacji podwójnych dwukropków, na przykład <literal>APT::Get::Assume-Yes</"
+"literal> jest opcją narzędzia Get w grupie narzędzi APT . Opcje nie "
+"dziedziczą ustawień od swoich przodków."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "Acquire::CompressionTypes::Order { \"lzma\"; \"gz\"; };"
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"lzma\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+#, fuzzy
+#| msgid "User configuration"
+msgid "Binary specific configuration"
+msgstr "Konfiguracja użytkownika"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+#, fuzzy
+msgid "Debug options"
+msgstr "opcje"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+#, fuzzy
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CDROM IDs."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Przykłady"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "Plik kontrolny preferencji APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"Plik preferencji APT <filename>/etc/apt/preferences</filename> i pliki "
+"częściowe w katalogu <filename>/etc/apt/preferences.d/</filename> są używane "
+"do określania wersji pakietów wybieranych do instalacji."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Jeżeli plik &sources-list; zawiera odniesienia do więcej niż jednej "
+"dystrybucji (na przykład <literal>stable</literal> i <literal>testing</"
+"literal>), to do zainstalowania może być dostępnych kilka wersji tego "
+"samego pakietu. APT nadaje priorytet każdej z dostępnych wersji. "
+"<command>apt-get</command> wybiera do zainstalowania wersję o najwyższym "
+"priorytecie (jeśli zależności pakietu pozwalają na jego zainstalowanie). "
+"Preferencje APT nadpisują domyślne priorytety ustawiane wersjom pakietów, "
+"pozwalając użytkownikowi kontrolować, które wersje pakietów są wybierane do "
+"zainstalowania."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Może być dostępnych kilka instancji tej samej wersji pakietu, jeśli plik "
+"&sources-list; zawiera odwołania do więcej niż jednego źródła. W takim "
+"wypadku <command>apt-get</command> pobierze instancję ze źródła wymienionego "
+"najwcześniej w pliku &sources-list;. Preferencje APT nie mają wpływu na "
+"wybór instancji, ale na wybór wersji."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"Preferencje są mocnym narzędziem w rękach administratora systemu, ale mogą "
+"stać się też jego największym koszmarem, jeśli zostaną nieostrożnie użyte! "
+"APT nie podważa preferencji, tak więc błędne ustawienia spowodują "
+"pojawienie się nieinstalowalnych pakietów lub podejmowanie przez APT "
+"niepoprawnych decyzji podczas aktualizacji pakietów. Mogą wystąpić jeszcze "
+"większe problemy, gdy w pliku preferencji APT zostanie skonfigurowanych "
+"wiele wydań dystrybucji bez zrozumienia zawartości kolejnych rozdziałów tej "
+"strony. Pakiety dołączone do określonego wydania nie są testowane w "
+"połączeniu z pakietami z innych (starszych lub nowszych) wydań, więc w "
+"takich sytuacjach nie zawsze działają, tak jakby się tego od nich "
+"oczekiwało. Ostrzegamy!"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"Proszę zauważyć, że pliki w katalogu <filename>/etc/apt/preferences.d</"
+"filename> są przetwarzane w rosnącym porządku alfanumerycznym. Należy "
+"również przestrzegać następującej konwencji: pliki albo nie powinny mieć "
+"żadnego rozszerzenia, albo rozszerzeniem powinno być \"<literal>pref</"
+"literal>\", a ich nazwy powinny zawierać tylko i wyłącznie znaki "
+"alfanumeryczne oraz myślniki (\"-\"), podkreślenia (\"_\") i kropki (\".\"). "
+"W przeciwnym wypadku APT zignoruje plik o niepoprawnej nazwie i jeśli nazwa "
+"pliku nie pasuje do wzorca podanego w liście zmiennych konfiguracji "
+"<literal>Dir::Ignore-Files-Silently</literal>, to wypisze odpowiedni "
+"komunikat."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "Domyślne przypisania priorytetów APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>jakiś-pakiet</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"Jeśli plik preferencji nie istnieje lub nie zawiera wpisu pasującego do "
+"pewnej wersji, to priorytetem przypisanym do tej wersji jest priorytet "
+"dystrybucji, do której wersja należy. Jest możliwe wybranie jednej "
+"dystrybucji, tak zwanego \"wydania docelowego\", która otrzyma priorytet "
+"wyższy niż priorytet domyślnie przypisywany innym dystrybucjom. To wydanie "
+"docelowe można ustawić w linii poleceń <command>apt-get</command> lub w "
+"pliku konfiguracyjnym APT <filename>/etc/apt/apt.conf</filename>. Proszę "
+"zauważyć, że wydanie docelowe nadpisuje jakikolwiek ogólny priorytet "
+"ustawiony w opisanym poniżej pliku <filename>/etc/apt/preferences</"
+"filename>, ale nie nadpisuje priorytetów szczegółowych przypisanych do "
+"poszczególnych pakietów. Na przykład <placeholder type=\"programlisting\" id="
+"\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Jeśli wydanie docelowe zostało podane, to APT używa następującego algorytmu "
+"do ustawiania priorytetów wersjom pakietu. Przypisuje:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "priorytet 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"wersjom pochodzącym z archiwów, których pliki <filename>Release</filename> "
+"mają wpis \"NotAutomatic: yes\" i <emphasis>nie mają</emphasis> wpisu "
+"\"ButAutomaticUpgrades: yes\". Przykładem takiego archiwum jest archiwum "
+"<literal>experimental</literal> Debiana."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "priorytet 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"wersji, która jest już zainstalowana (o ile jakaś jest) i wersjom "
+"pochodzącym z archiwów, które w swoich plikach <filename>Release</filename> "
+"mają wpisy \"NotAutomatic: yes\" i \"ButAutomaticUpgrades: yes\", tak jak to "
+"robią archiwa backport-ów Debiana począwszy od <literal>squeeze-backports</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "priorytet 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+#| msgid ""
+#| "to the versions that are not installed and belong to the target release."
+msgid "to the versions that do not belong to the target release."
+msgstr "wersjom niezainstalowanym i należącym do wydania docelowego."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "priorytet 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+#| msgid ""
+#| "to the versions that are not installed and belong to the target release."
+msgid "to the versions that belong to the target release."
+msgstr "wersjom niezainstalowanym i należącym do wydania docelowego."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Jeśli nie określono wydania docelowego, to APT przypisuje priorytet 100 "
+"wszystkim zainstalowanym wersjom pakietów oraz priorytet 500 wszystkim "
+"niezainstalowanym wersjom pakietów, z wyjątkiem wersji pochodzących z "
+"archiwów, których pliki <filename>Release</filename> są oznaczone jako "
+"\"NotAutomatic: yes\" - takie wersje otrzymują priorytet 1 lub priorytet "
+"100, jeśli dodatkowo są oznaczone jako \"ButAutomaticUpgrades: yes\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"APT, do określenia, którą wersję pakietu należy zainstalować, stosuje wtedy "
+"następujące reguły wymienione w kolejności, w jakiej są stosowane."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Nigdy nie zastępuje pakietu jego wcześniejszą wersją (tzw. \"downgrading\"), "
+"chyba że priorytet tej wcześniejszej, dostępnej wersji przekracza 1000. "
+"(Należy zauważyć, że żaden z domyślnych priorytetów APT nie przekracza 1000; "
+"tak wysokie priorytety mogą być ustawiane tylko w pliku konfiguracyjnym. "
+"Instalowanie wcześniejszych wersji pakietów może być ryzykowną operacją)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "Instaluje wersję o najwyższym priorytecie."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Jeśli dwie lub więcej wersji ma ten sam priorytet, to zainstalowana zostanie "
+"wersja nowsza (czyli z większym numerem wersji)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"Jeśli dwie lub więcej wersji ma ten sam priorytet i numer wersji ale albo "
+"pakiety różnią się niektórymi metadanymi, albo użyto opcji <literal>--"
+"reinstall</literal>, to zainstalowany zostanie pakiet jeszcze "
+"niezainstalowany."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"W typowej sytuacji zainstalowana wersja pakietu (priorytet 100) jest starsza "
+"od którejś z wersji dostępnych ze źródeł wymienionych w pliku &sources-list; "
+"(priorytet 500 lub 999). W takim wypadku polecenia <command>apt-get install "
+"<replaceable>jakiś-pakiet</replaceable></command> lub <command>apt-get "
+"upgrade</command> zaktualizują ten pakiet."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Rzadziej, ale się zdarza, że zainstalowana wersja pakietu jest "
+"<emphasis>nowsza</emphasis> niż jakakolwiek inna dostępna wersja. Polecenia "
+"<command>apt-get install <replaceable>jakiś-pakiet</replaceable></command> i "
+"<command>apt-get upgrade</command> nie zastąpią takiego pakietu wcześniejszą "
+"wersją."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"Czasami zainstalowana wersja pakietu jest nowsza niż wersja należąca do "
+"wydania docelowego, ale nie tak nowa jak wersja należąca do innej "
+"dystrybucji. Polecenia <command>apt-get install <replaceable>jakiś-pakiet</"
+"replaceable></command> oraz <command>apt-get upgrade</command> zaktualizują "
+"taki pakiet, ponieważ przynajmniej <emphasis>jedna</emphasis> z dostępnych "
+"wersji ma większy priorytet niż wersja zainstalowana."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "Efekt stosowania preferencji APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"Plik preferencji APT pozwala administratorowi systemu na kontrolowanie "
+"przypisań priorytetów. Plik składa się z jednego lub większej liczby "
+"wieloliniowych rekordów rozdzielonych pustymi liniami. Rekordy mogą "
+"przyjmować jedną z dwóch postaci: szczegółową i ogólną."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"Postać szczegółowa przypisuje priorytet (\"Pin-Priority\") do jednego lub "
+"większej liczby podanych pakietów i podanych wersji lub zakresów wersji. Na "
+"przykład następujący rekord ustawia wysoki priorytet wszystkim wersjom "
+"pakietu <filename>perl</filename>, których numer wersji zaczyna się od "
+"\"<literal>&good-perl;</literal>\". Można podać wiele nazw pakietów, "
+"rozdzielając je od siebie spacjami."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"Postać ogólna przypisuje priorytet wszystkim wersjom pakietów w podanej "
+"dystrybucji (to jest wszystkim wersjom pakietów wymienionych w pewnym pliku "
+"<filename>Release</filename>) lub wszystkim wersjom pakietów pochodzących ze "
+"strony internetowej identyfikowanej przez pełną nazwę domenową strony."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Ten wpis w postaci ogólnej w pliku preferencji APT ma zastosowanie tylko do "
+"grup pakietów. Na przykład następujący rekord przypisuje wysoki priorytet "
+"wszystkim wersjom pakietów dostępnych na lokalnym komputerze."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"Uwaga: słowem kluczowym używanym tutaj jest \"<literal>origin</literal>\", "
+"które może zostać użyte do dopasowania nazwy komputera. Następujący rekord "
+"ustawi wysoki priorytet wszystkim wersjom dostępnym na serwerze "
+"identyfikowanym przez nazwę komputera \"ftp.de.debian.org\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"<emphasis>Nie</emphasis> należy tego mylić z polem <literal>Origin</literal> "
+"podanym w pliku <filename>Release</filename>. Wartością pola "
+"<literal>Origin</literal> w pliku <filename>Release</filename> jest nie "
+"adres internetowy, ale nazwa autora lub dystrybutora, taka jak \"Debian\" "
+"lub \"Ximian\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"Następujący rekord przypisuje niski priorytet wszystkim wersjom pakietów "
+"należących do jakiejkolwiek dystrybucji, której nazwą archiwum jest "
+"\"<literal>unstable</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"Następujący rekord przypisuje niski priorytet wszystkim wersjom pakietów "
+"należących do jakiejkolwiek dystrybucji, której nazwą kodową jest "
+"\"<literal>&debian-testing-codename;</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"Następujący rekord przypisuje wysoki priorytet wszystkim wersjom pakietów "
+"należącym do jakiegokolwiek wydania, którego pole <literal>Archive</literal> "
+"(zawierające nazwę archiwum) jest równe \"<literal>stable</literal>\", a "
+"pole <literal>Version</literal> (numer wersji wydania) wynosi "
+"\"<literal>&debian-stable-version;</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "Składnia wyrażeń regularnych i &glob;"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"APT także wspiera dopasowywanie przy użyciu wzorców &glob; i wyrażeń "
+"regularnych otoczonych znakami /. Następujący przykład ustawia priorytet 500 "
+"wszystkim pakietom z dystrybucji <literal>experimental</literal>, których "
+"nazwa zaczyna się od <literal>gnome</literal> (jako wzorzec &glob;) lub "
+"zawiera słowo <literal>kde</literal> (jako rozszerzone wyrażenie regularne "
+"POSIX otoczone ukośnikami)."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"Wyrażenia te mogą wystąpić wszędzie, gdzie tylko może wystąpić łańcuch "
+"znaków. Dlatego następujący przykład przypisuje priorytet 990 wszystkim "
+"pakietom z wydania o nazwie zaczynającej się od &ubuntu-codename;."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"Jeśli wyrażenie regularne występuje w polu <literal>Package</literal>, to "
+"zachowanie jest takie samo, jakby to wyrażenie regularne zostało zastąpione "
+"listą wszystkich pakietów, których nazwy pasują do tego wyrażenia "
+"regularnego. Nie wiadomo jeszcze, czy to się nie zmieni w przyszłości, "
+"dlatego powinno się zawsze umieszczać preferencje zawierające wzorce "
+"pakietów na początku, tak żeby mogły zostać nadpisane przez preferencje "
+"dotyczące specyficznych pakietów. Wzorzec \"<literal>*</literal>\" w polu "
+"<literal>Package</literal> nie jest uznawany za wyrażenie &glob;."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "Jak APT interpretuje priorytety"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"Priorytety (P) przypisane w pliku preferencji APT muszą być liczbami "
+"całkowitymi dodatnimi lub ujemnymi. Są interpretowane następująco (ogólnie "
+"rzecz biorąc):"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"powoduje, że wersja zostanie zainstalowana, nawet jeśli oznacza to "
+"zastąpienie pakietu jego wcześniejszą wersją."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"powoduje, że wersja zostanie zainstalowana, nawet jeśli nie pochodzi z "
+"wydania docelowego, chyba że zainstalowana wersja jest nowsza."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"powoduje, że wersja zostanie zainstalowana, jeśli nie ma żadnej dostępnej "
+"wersji należącej do wydania docelowego lub gdy nowsza wersja już jest "
+"zainstalowana."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"powoduje, że wersja zostanie zainstalowana, o ile nie jest dostępna wersja "
+"należąca do innej dystrybucji lub nowsza wersja jest zainstalowana"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"powoduje, że wersja zostanie zainstalowana tylko wtedy, jeżeli żadna wersja "
+"pakietu nie jest jeszcze zainstalowana"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "zapobiega instalowaniu wersji"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+#| msgid ""
+#| "If any specific-form records match an available package version then the "
+#| "first such record determines the priority of the package version. "
+#| "Failing that, if any general-form records match an available package "
+#| "version then the first such record determines the priority of the package "
+#| "version."
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"Jeśli jakiekolwiek rekordy w postaci szczegółowej pasują do dostępnej wersji "
+"pakietu, to priorytet tej wersji jest określany na podstawie pierwszego z "
+"takich rekordów. W przeciwnym razie, jeśli jakiekolwiek rekordy w postaci "
+"ogólnej pasują do dostępnej wersji pakietu, to priorytet tej wersji jest "
+"określany na podstawie pierwszego z takich rekordów."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Na przykład, załóżmy, że plik preferencji APT zawiera trzy pokazane "
+"wcześniej rekordy:"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "Wtedy:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"Zostanie zainstalowana najnowsza dostępna wersja pakietu <literal>perl</"
+"literal>, jeśli tylko numer tej wersji zaczyna się od \"<literal>&good-perl;"
+"</literal>\". Jeśli <emphasis>jakakolwiek</emphasis> wersja &good-perl;* "
+"jest dostępna, ale zainstalowana jest już wersja &bad-perl;*, to pakiet "
+"<literal>perl</literal> zostanie zastąpiony tą dostępną wcześniejszą wersją "
+"&good-perl;*."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Wersja jakiegokolwiek pakietu innego niż <literal>perl</literal> dostępna na "
+"lokalnym systemie ma wyższy priorytet niż jakakolwiek inna wersja tego "
+"pakietu, włączając w to wersję należącą do wydania docelowego."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"Wersja pakietu pochodząca nie z lokalnego systemu, ale z jakiegoś innego "
+"źródła wymienionego w &sources-list; i należąca do dystrybucji "
+"<literal>unstable</literal> będzie zainstalowana tylko wtedy, gdy zostanie "
+"wybrana (przez użytkownika) do instalacji i żadna inna wersja tego pakietu "
+"nie jest jeszcze zainstalowana."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr "Określanie wersji pakietu i właściwości dystrybucji"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"Lokalizacje wymienione w pliku &sources-list; powinny zawierać pliki "
+"<filename>Packages</filename> i <filename>Release</filename> opisujące "
+"pakiety dostępne w danej lokalizacji."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"Plik <filename>Packages</filename> zazwyczaj znajduje się w "
+"katalogu<filename>.../dists/<replaceable>nazwa-dystrybucji</replaceable>/"
+"<replaceable>komponent</replaceable>/<replaceable>architektura</"
+"replaceable></filename>: na przykład <filename>.../dists/stable/main/binary-"
+"i386/Packages</filename>. Składa się z serii wieloliniowych rekordów, po "
+"jednym na każdy pakiet dostępny w tym katalogu. Podczas ustawiania "
+"priorytetów APT bierze pod uwagę tylko dwie linie z każdego rekordu:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "linia <literal>Package:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "podaje nazwę pakietu"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "linia <literal>Version:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "podaje numer wersji danego pakietu"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"Plik <filename>Release</filename> znajduje się zazwyczaj w "
+"katalogu<filename>.../dists/<replaceable>nazwa-dystrybucji</replaceable></"
+"filename>: na przykład <filename>.../dists/stable/Release</filename> lub "
+"<filename>.../dists/&debian-stable-codename;/Release</filename>. Składa się "
+"z jednego wieloliniowego rekordu, który odnosi się do <emphasis>wszystkich</"
+"emphasis> pakietów znajdujących się w drzewie katalogów o korzeniu w "
+"katalogu, w którym znajduje się opisywany plik. W przeciwieństwie do pliku "
+"<filename>Packages</filename>, prawie wszystkie linie z pliku "
+"<filename>Release</filename> są brane pod uwagę podczas ustawiania "
+"priorytetów APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "linia <literal>Archive:</literal> lub <literal>Suite:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"nazywa archiwum, do którego należą wszystkie pakiety znajdujące się w "
+"drzewie katalogów. Na przykład linia \"Archive: stable\" lub \"Suite: stable"
+"\" mówi, że wszystkie pakiety w drzewie katalogów poniżej katalogu "
+"nadrzędnego pliku <filename>Release</filename> należą do archiwum "
+"<literal>stable</literal>. Wartość tę można podać w pliku preferencji APT w "
+"następujący sposób:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "linia <literal>Codename:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"nazwa kodowa dystrybucji, do której należą wszystkie pakiety w drzewie "
+"katalogów. Na przykład linia \"Codename: &debian-testing-codename;\" mówi, "
+"że wszystkie pakiety w drzewie katalogów poniżej katalogu nadrzędnego pliku "
+"<filename>Release</filename> należą do wersji nazwanej <literal>&debian-"
+"testing-codename;</literal>. Wartość tę można podać w pliku preferencji APT "
+"w następujący sposób:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"określa wersję wydania. Na przykład pakiety w drzewie katalogów mogłyby "
+"należeć do wersji &debian-stable-version; dystrybucji Debiana. Proszę "
+"zauważyć, że zazwyczaj dystrybucje <literal>testing</literal> i "
+"<literal>unstable</literal> nie mają przypisanego numeru wersji, ponieważ "
+"nie są one oficjalnie wydawane. Wersję wydania można podać w pliku "
+"preferencji APT w następujący sposób:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "linia <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"określa komponent licencji powiązany z pakietami w drzewie katalogów pliku "
+"<filename>Release</filename>. Na przykład linia \"Component: main\" mówi, że "
+"wszystkie pakiety w drzewie katalogów pochodzą z komponentu <literal>main</"
+"literal>, co oznacza, że wszystkie są licencjonowane w 100% zgodnie z "
+"\"Wytycznymi Debiana dotyczącymi Wolnego Oprogramowania\" (\"Debian Free "
+"Software Guidelines\"). Komponent można podać w pliku preferencji APT w "
+"następujący sposób:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "linia <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"określa twórcę pakietów w drzewie katalogów pliku <filename>Release</"
+"filename>. Najczęściej jest to <literal>Debian</literal>. Twórcę pakietów "
+"można podać w pliku preferencji APT w następujący sposób:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "linia <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"określa etykietę pakietów w drzewie katalogów pliku <filename>Release</"
+"filename>. Najczęściej jest to <literal>Debian</literal>. Etykietę tę można "
+"podać w pliku preferencji APT w następujący sposób:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Wszystkie pliki <filename>Packages</filename> i <filename>Release</filename> "
+"pobierane z lokalizacji podanych w pliku &sources-list; są przechowywane w "
+"katalogu <filename>/var/lib/apt/lists</filename> lub w pliku o nazwie "
+"będącej wartością zmiennej <literal>Dir::State::Lists</literal> z pliku "
+"<filename>apt.conf</filename>. Na przykład plik o nazwie <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"zawiera plik <filename>Release</filename> pobrany z komputera "
+"<literal>debian.lcs.mit.edu</literal> dla plików komponentu "
+"<literal>contrib</literal> architektury <literal>binary-i386</literal> "
+"dystrybucji <literal>unstable</literal> ."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "Opcjonalne linie w rekordzie preferencji APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"Każdy rekord w pliku preferencji APT może opcjonalnie zaczynać się od jednej "
+"lub większej liczby linii zaczynających się od wyrazu <literal>Explanation:</"
+"literal> (tj. objaśnienie). Pozwala to na dodawanie komentarzy do rekordów."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "Śledzenie dystrybucji stabilnej"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Odinstaluj lub nie instaluj wersji pakietów pochodzących z Debiana\n"
+"Explanation: innych niż te w dystrybucji stabilnej\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Następujący plik preferencji APT spowoduje przypisanie priorytetu większego "
+"niż domyślny (500) wszystkim wersjom pakietu należącym do dystrybucji "
+"<literal>stable</literal> i zakazująco niskiego priorytetu wersjom pakietów "
+"należącym do innych dystrybucji <literal>Debian</literal>a. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>nazwa-pakietu</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Z odpowiednim plikiem &sources-list; i z powyższym plikiem preferencji, "
+"każde z następujących poleceń spowoduje, że APT zaktualizuje pakiety do "
+"najnowszych wersji z dystrybucji <literal>stable </literal>.<placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>pakiet</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Następujące polecenie spowoduje, że APT zaktualizuje podany pakiet do "
+"najnowszej wersji z dystrybucji <literal>testing</literal>. Pakiet nie "
+"będzie aktualizowany do czasu ponownego wydania tego samego polecenia. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "Śledzenie dystrybucji testowej lub niestabilnej"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Następujący plik preferencji APT spowoduje przypisanie wysokiego priorytetu "
+"wersjom pakietów z dystrybucji <literal>testing</literal>, niskiego "
+"priorytetu wersjom pakietów z dystrybucji <literal>unstable</literal> oraz "
+"zakazująco niskiego priorytetu wersjom pakietów należącym do innych "
+"dystrybucji <literal>Debian</literal>a. <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Z odpowiednim plikiem &sources-list; i z powyższym plikiem preferencji, "
+"każde z następujących poleceń spowoduje, że APT zaktualizuje pakiety do "
+"najnowszych wersji z dystrybucji <literal>testing</literal>.<placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>pakiet</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Następujące polecenie spowoduje, że APT zaktualizuje podany pakiet do "
+"najnowszej wersji z dystrybucji <literal>unstable</literal>. Od tej pory "
+"<command>apt-get upgrade</command> będzie aktualizował pakiet do najnowszej "
+"wersji z dystrybucji <literal>testing</literal>, jeśli ta wersja będzie "
+"nowsza od wersji zainstalowanej, lub w przeciwnym wypadku - do najnowszej "
+"wersji z dystrybucji <literal>unstable</literal>, jeśli ta wersja będzie "
+"nowsza od wersji zainstalowanej. <placeholder type=\"programlisting\" id="
+"\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "Śledzenie ewolucji wydania o danej nazwie kodowej"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explanation: Odinstaluj lub nie instaluj wersji pakietów pochodzących z Debiana\n"
+"Explanation: innych niż te w dystrybucji &debian-testing-codename; lub sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable jest zawsze nazwany sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Następujący plik preferencji APT spowoduje przypisanie priorytetu większego "
+"niż domyślny (500) wszystkim wersjom pakietu należącym do dystrybucji o "
+"podanej nazwie kodowej oraz zakazująco niskiego priorytetu wersjom pakietów "
+"należącym do innych dystrybucji <literal>Debian</literal>a, nazw kodowych i "
+"archiwów. Proszę zauważyć, że z tym plikiem preferencji APT będzie śledziło "
+"migrację wydania z archiwum <literal>testing</literal> przez "
+"<literal>stable</literal> aż do <literal>oldstable</literal>. Aby śledzić "
+"postępy na przykład w dystrybucji <literal>testing</literal> niezależnie od "
+"nazwy kodowej tej dystrybucji, należy użyć jednej z zaprezentowanych "
+"powyżej przykładowych konfiguracji. <placeholder type=\"programlisting\" id="
+"\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Z odpowiednim plikiem &sources-list; i z powyższym plikiem preferencji, "
+"każde z następujących poleceń spowoduje, że APT zaktualizuje pakiety do "
+"najnowszych wersji z wydania nazwanego <literal>&debian-testing-codename;</"
+"literal>. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>pakiet</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Następujące polecenie spowoduje, że APT zaktualizuje podany pakiet do "
+"najnowszej wersji z dystrybucji <literal>sid</literal>. Od tej pory "
+"<command>apt-get upgrade</command> będzie aktualizował pakiet do najnowszej "
+"wersji z dystrybucji <literal>&debian-testing-codename;</literal>, jeśli ta "
+"wersja będzie nowsza od wersji zainstalowanej, lub w przeciwnym wypadku - do "
+"najnowszej wersji z dystrybucji <literal>sid</literal>, jeśli ta wersja "
+"będzie nowsza od wersji zainstalowanej. <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "Lista skonfigurowanych źródeł danych APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The source list <filename>/etc/apt/sources.list</filename> is designed to "
+#| "support any number of active sources and a variety of source media. The "
+#| "file lists one source per line, with the most preferred source listed "
+#| "first. The information available from the configured sources is acquired "
+#| "by <command>apt-get update</command> (or by an equivalent command from "
+#| "another APT front-end)."
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"Plik źródeł <filename>/etc/apt/sources.list</filename> został zaprojektowany "
+"tak, by obsłużyć dowolną liczbę aktywnych źródeł i różne nośniki źródeł. W "
+"każdej linii jest wymienione jedno źródło, linie są posortowane według "
+"preferencji źródeł, te najbardziej preferowane wymienione są na początku "
+"pliku. Informacje dostępne w skonfigurowanych źródłach są pobierane przez "
+"<command>apt-get update</command> (lub przez podobne polecenie innego "
+"programu użytkowego będącego interfejsem do systemu APT)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The <filename>/etc/apt/sources.list.d</filename> directory provides a way "
+#| "to add sources.list entries in separate files. The format is the same as "
+#| "for the regular <filename>sources.list</filename> file. File names need "
+#| "to end with <filename>.list</filename> and may only contain letters (a-z "
+#| "and A-Z), digits (0-9), underscore (_), hyphen (-) and period (.) "
+#| "characters. Otherwise APT will print a notice that it has ignored a "
+#| "file, unless that file matches a pattern in the <literal>Dir::Ignore-"
+#| "Files-Silently</literal> configuration list - in which case it will be "
+#| "silently ignored."
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"Katalog <filename>/etc/apt/sources.list.d</filename> umożliwia podzielenie "
+"pliku źródeł na osobne pliki. Format jest dokładnie taki sam, jak w "
+"przypadku zwykłego pliku <filename>sources.list</filename>. Nazwy plików w "
+"tym katalogu muszą się kończyć rozszerzeniem <filename>.list</filename> i "
+"mogą składać się tylko z liter (a-z i A-Z), cyfr (0-9), znaku podkreślenia "
+"(\"_\"), pauzy (\"-\") i kropki (\".\"). W przeciwnym wypadku APT zignoruje "
+"taki plik i jeśli nazwa pliku nie pasuje do wzorca podanego w liście "
+"zmiennych konfiguracji <literal>Dir::Ignore-Files-Silently</literal>, to "
+"wypisze odpowiedni komunikat."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "The deb and deb-src types"
+msgid "The deb and deb-src Types: General Format"
+msgstr "Typy deb i deb-src"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The <literal>deb</literal> type references a typical two-level Debian "
+#| "archive, <filename>distribution/component</filename>. The "
+#| "<literal>distribution</literal> is generally an archive name like "
+#| "<literal>stable</literal> or <literal>testing</literal> or a codename "
+#| "like <literal>&debian-stable-codename;</literal> or <literal>&debian-"
+#| "testing-codename;</literal> while component is one of <literal>main</"
+#| "literal>, <literal>contrib</literal> or <literal>non-free</literal>. The "
+#| "<literal>deb-src</literal> type references a Debian distribution's source "
+#| "code in the same form as the <literal>deb</literal> type. A <literal>deb-"
+#| "src</literal> line is required to fetch source indexes."
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"Typ <literal>deb</literal> opisuje typowe dwupoziomowe archiwum Debiana: "
+"<filename>dystrybucja/komponent</filename>. Zazwyczaj <literal>dystrybucja</"
+"literal> jest nazwą archiwum, taką jak: <literal>stable</literal> lub "
+"<literal>testing</literal>, albo nazwą kodową, taką jak: <literal>&debian-"
+"stable-codename;</literal> lub <literal>&debian-testing-codename;</literal>, "
+"a <filename>komponent</filename> jest jednym z: <literal>main</literal>, "
+"<literal>contrib</literal> lub <literal>non-free</literal>. Typ <literal>deb-"
+"src</literal> opisuje lokalizacje kodów źródłowych dystrybucji Debiana i "
+"używa takiego samego formatu jak typ <literal>deb</literal>. Linia "
+"<literal>deb-src</literal> jest wymagana do pobierania indeksów kodów "
+"źródłowych."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The format for a <filename>sources.list</filename> entry using the "
+#| "<literal>deb</literal> and <literal>deb-src</literal> types is:"
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"Formaty wpisu w <filename>sources.list</filename> używającego typów "
+"<literal>deb</literal> i <literal>deb-src</literal> jest następujący:"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The URI for the <literal>deb</literal> type must specify the base of the "
+#| "Debian distribution, from which APT will find the information it needs. "
+#| "<literal>distribution</literal> can specify an exact path, in which case "
+#| "the components must be omitted and <literal>distribution</literal> must "
+#| "end with a slash (<literal>/</literal>). This is useful for the case when "
+#| "only a particular sub-section of the archive denoted by the URI is of "
+#| "interest. If <literal>distribution</literal> does not specify an exact "
+#| "path, at least one <literal>component</literal> must be present."
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"URI typu <literal>deb</literal> musi podawać bazową lokalizację dystrybucji "
+"Debiana, w której APT znajdzie potrzebne informacje. <literal>Dystrybucja</"
+"literal> może być dokładną ścieżką - w takim przypadku komponenty trzeba "
+"pominąć, a <literal>dystrybucja</literal> musi się kończyć znakiem ukośnika "
+"(\"<literal>/</literal>\"). Jest to użyteczne, gdy interesuje nas szczególna "
+"pod-sekcja archiwum, podana jako URI. Jeśli <literal>dystrybucja</literal> "
+"nie podaje dokładnej ścieżki, to musi być obecny przynajmniej jeden "
+"<literal>komponent</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>distribution</literal> may also contain a variable, <literal>"
+#| "$(ARCH)</literal> which expands to the Debian architecture (such as "
+#| "<literal>amd64</literal> or <literal>armel</literal>) used on the system. "
+#| "This permits architecture-independent <filename>sources.list</filename> "
+#| "files to be used. In general this is only of interest when specifying an "
+#| "exact path, <literal>APT</literal> will automatically generate a URI with "
+#| "the current architecture otherwise."
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>Dystrybucja</literal> może zawierać także zmienną <literal>$(ARCH)</"
+"literal>, która zostanie rozwinięta do architektury Debiana (takiej jak "
+"<literal>amd64</literal> lub <literal>armel</literal>) używanej w systemie. "
+"Pozwala to na używanie plików <filename>sources.list</filename> niezależnych "
+"od architektury. W ogólności jest to interesujące tylko wtedy, gdy podaje "
+"się dokładną ścieżkę, w innym przypadku <literal>APT</literal> automatycznie "
+"wygeneruje URI zawierający bieżącą architekturę."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "Since only one distribution can be specified per line it may be necessary "
+#| "to have multiple lines for the same URI, if a subset of all available "
+#| "distributions or components at that location is desired. APT will sort "
+#| "the URI list after it has generated a complete set internally, and will "
+#| "collapse multiple references to the same Internet host, for instance, "
+#| "into a single connection, so that it does not inefficiently establish an "
+#| "FTP connection, close it, do something else, and then re-establish a "
+#| "connection to that same host. This feature is useful for accessing busy "
+#| "FTP sites with limits on the number of simultaneous anonymous users. APT "
+#| "also parallelizes connections to different hosts to more effectively deal "
+#| "with sites with low bandwidth."
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"Ponieważ w pojedynczej linii można podać tylko jedną dystrybucję, może być "
+"potrzebne wymienienie tego samego URI w wielu liniach, jeżeli pożądany jest "
+"podzbiór wszystkich dostępnych dystrybucji lub komponentów w danej "
+"lokalizacji. APT wewnętrznie posortuje listę URI po wygenerowaniu "
+"kompletnego zbioru i użyje pojedynczego połączenia do pobrania wszystkich "
+"odniesień do tego samego zdalnego komputera, tak żeby niepotrzebnie nie "
+"nawiązywać połączenia FTP, zamykać go, robić cokolwiek innego, a potem "
+"ponownie łączyć się do tego samego zasobu. Ta cecha jest użyteczna do "
+"uzyskiwania dostępu do obciążonych serwerów FTP ograniczających liczbę "
+"jednoczesnych anonimowych połączeń. APT tworzy równoległe połączenia do "
+"różnych komputerów, tak żeby efektywnie radzić sobie z komputerami w "
+"sieciach o niskiej przepustowości łączy."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"Ważne jest, aby źródła pakietów były wymienione w kolejności preferencji "
+"użytkownika, zaczynając od tego najbardziej preferowanego. Zazwyczaj "
+"wynikiem tego będzie sortowanie od najszybszego do najwolniejszego (na "
+"przykład CD-ROM przed komputerami w lokalnej sieci przed odległymi "
+"komputerami w Internecie)."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "The deb and deb-src types"
+msgid "The deb and deb-src types: Options"
+msgstr "Typy deb i deb-src"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#| "replaceable>,…</literal> can be used to specify for which architectures "
+#| "information should be downloaded. If this option is not set all "
+#| "architectures defined by the <literal>APT::Architectures</literal> option "
+#| "will be downloaded."
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+"replaceable>,…</literal> może zostać użyte do podania architektur, dla "
+"których będą pobierane informacje o pakietach. Jeśli ta opcja nie jest "
+"ustawiona, będą pobierane informacje dla wszystkich architektur określonych "
+"w opcji konfiguracji <literal>APT::Architectures</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#| "replaceable>,…</literal> can be used to specify for which architectures "
+#| "information should be downloaded. If this option is not set all "
+#| "architectures defined by the <literal>APT::Architectures</literal> option "
+#| "will be downloaded."
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+"replaceable>,…</literal> może zostać użyte do podania architektur, dla "
+"których będą pobierane informacje o pakietach. Jeśli ta opcja nie jest "
+"ustawiona, będą pobierane informacje dla wszystkich architektur określonych "
+"w opcji konfiguracji <literal>APT::Architectures</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "URI specification"
+msgid "URI Specification"
+msgstr "Określanie URI"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "Obecnie rozpoznawane są następujące typy URI:"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"Schemat file pozwala używać jako archiwum dowolnego katalogu w systemie "
+"plików. Jest użyteczny dla katalogów montowanych przez NFS i lokalnych kopii "
+"archiwów."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The cdrom scheme allows APT to use a local CD-ROM drive with media "
+#| "swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+#| "source list."
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"Schemat cdrom pozwala APT na użycie lokalnego dysku CD-ROM ze zmianą dysków. "
+"Prosimy używać programu &apt-cdrom; do dodawania takich wpisów w sources."
+"list."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "The ftp scheme specifies an FTP server for the archive. APT's FTP "
+#| "behavior is highly configurable; for more information see the &apt-conf; "
+#| "manual page. Please note that an FTP proxy can be specified by using the "
+#| "<envar>ftp_proxy</envar> environment variable. It is possible to specify "
+#| "an HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+#| "environment variable and <emphasis>only</emphasis> this environment "
+#| "variable. Proxies using HTTP specified in the configuration file will be "
+#| "ignored."
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"Schemat ftp opisuje serwer FTP archiwum. Zachowanie modułu FTP można "
+"dowolnie konfigurować, szczegóły można znaleźć na stronie podręcznika &apt-"
+"conf;. Proszę zauważyć, że można podać serwer proxy FTP, używając zmiennej "
+"środowiskowej <envar>ftp_proxy</envar>. Możliwe jest podanie serwera proxy "
+"HTTP (które to serwery często rozumieją lokalizacje zasobów FTP), używając "
+"tej i <emphasis>tylko</emphasis> tej zmiennej środowiskowej. Podane w pliku "
+"konfiguracyjnym serwery proxy używające HTTP zostaną zignorowane."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"Schemat copy jest identyczny ze schematem file, z tym wyjątkiem, że pakiety "
+"nie są używane bezpośrednio z podanej lokalizacji, tylko są kopiowane do "
+"katalogu bufora. Jest to użyteczne w przypadku używania nośnika przenośnego "
+"do skopiowania plików przy użyciu APT."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"Metoda rsh/ssh uruchamia RSH/SSH do połączenia się ze zdalnym komputerem i "
+"uzyskania dostępu do plików jako podany użytkownik. Dobrym pomysłem jest "
+"wcześniejsze przygotowanie kluczy RSA lub dostępu rhosts. APT używa "
+"standardowych poleceń <command>find</command> i <command>dd</command> do "
+"przetransferowania plików ze zdalnego komputera."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "dodawanie innych rozpoznawanych typów URI"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "APT can be extended with more methods shipped in other optional packages, "
+#| "which should follow the naming scheme <package>apt-transport-"
+#| "<replaceable>method</replaceable></package>. For instance, the APT team "
+#| "also maintains the package <package>apt-transport-https</package>, which "
+#| "provides access methods for HTTPS URIs with features similar to the http "
+#| "method. Methods for using e.g. debtorrent are also available - see &apt-"
+#| "transport-debtorrent;."
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"APT może być rozszerzone o więcej metod, pochodzących z innych opcjonalnych "
+"pakietów, które powinny się nazywać <package>apt-transport-"
+"<replaceable>metoda</replaceable></package>. Na przykład zespół APT opiekuje "
+"się pakietem <package>apt-transport-https</package>, dostarczającym metody "
+"dostępu dla URI typu HTTPS, działającej podobnie do metody HTTP. Dostępne są "
+"również inne metody pozwalające na przykład używać debtorrenta, proszę "
+"zobaczyć &apt-transport-debtorrent;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "Uses the archive stored locally (or NFS mounted) at /home/jason/debian "
+#| "for stable/main, stable/contrib, and stable/non-free."
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"Użycie archiwum lokalnego (lub montowanego przez NFS) w katalogu /home/jason/"
+"debian dla zasobów stable/main, stable/contrib i stable/non-free."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb file:/home/jason/debian stable main contrib non-free"
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/jason/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb file:/home/jason/debian stable main contrib non-free"
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr "deb file:/home/jason/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+"Jak wyżej, z tą różnicą że używa dystrybucji niestabilnej (deweloperskiej)."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb file:/home/jason/debian unstable main contrib non-free"
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/jason/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb file:/home/jason/debian unstable main contrib non-free"
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr "deb file:/home/jason/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "Source line for the above"
+msgid "Sources specification for the above."
+msgstr "Linie źródeł dla powyższego przykładu"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb-src file:/home/jason/debian unstable main contrib non-free"
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/jason/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb-src file:/home/jason/debian unstable main contrib non-free"
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr "deb-src file:/home/jason/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"Pierwsza linia pobiera informacje o pakiecie dla architektur w <literal>APT::"
+"Architectures</literal> , podczas gdy druga zawsze pobiera <literal>amd64</"
+"literal> i <literal>armel</literal>."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid ""
+#| "deb http://ftp.debian.org/debian &debian-stable-codename; main\n"
+#| "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &debian-stable-codename; main"
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://ftp.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://ftp.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid ""
+#| "deb http://ftp.debian.org/debian &debian-stable-codename; main\n"
+#| "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &debian-stable-codename; main"
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"deb http://ftp.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://ftp.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"Użycie HTTP do uzyskania dostępu do archiwum na komputerze archive.debian."
+"org i dystrybucji hamm/main."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"Użycie FTP do uzyskania dostępu do archiwum na komputerze ftp.debian.org w "
+"katalogu debian i używa tylko dystrybucji &debian-stable-codename;/contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"Użycie FTP do uzyskania dostępu do archiwum na komputerze ftp.debian.org, "
+"dystrybucji unstable/contrib. Jeśli poniższa linia wystąpi razem z linią z "
+"poprzedniego przykładu w tym samym pliku <filename>sources.list</filename>, "
+"to pojedyncza sesja FTP będzie użyta w celu uzyskania dostępu do obu zasobów."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid ""
+#| "Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+#| "directory, and uses only files found under <filename>unstable/binary-"
+#| "i386</filename> on i386 machines, <filename>unstable/binary-amd64</"
+#| "filename> on amd64, and so forth for other supported architectures. [Note "
+#| "this example only illustrates how to use the substitution variable; "
+#| "official debian archives are not structured like this] <placeholder type="
+#| "\"literallayout\" id=\"0\"/>"
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Użycie HTTP do uzyskania dostępu do archiwum na komputerze ftp.tlh.debian."
+"org, w katalogu universe. Dla komputerów i386 używa tylko plików "
+"znalezionych w podkatalogu <filename>unstable/binary-i386</filename>, a dla "
+"komputerów amd64 - <filename>unstable/binary-amd64</filename> i tak dalej "
+"dla innych obsługiwanych architektur. (Uwaga: ten przykład jest tylko "
+"ilustracją, jak używać zmiennych podstawienia, oficjalne archiwum Debiana "
+"nie zawiera takiej struktury). <placeholder type=\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+#, fuzzy
+#| msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"Narzędzie wyciągające z pakietów Debiana skrypty konfiguracyjne i szablony "
+"<command>debconf</command>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>apt-extracttemplates</command> pobiera jeden lub więcej pakietów "
+"Debiana i zapisuje (w katalogu tymczasowym) wszystkie skojarzone z nimi "
+"skrypty konfiguracyjne i pliki szablonów. Dla każdego pakietu zawierającego "
+"te skrypty i szablony, zostanie wypisana linia w następującym formacie:"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "pakiet wersja plik-template skrypt-config"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"plik-template i skrypt-config są zapisywane w katalogu tymczasowym podanym "
+"jako argument opcji <option>-t</option> lub <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>). Nazwy tych plików są w "
+"postaci <filename>pakiet.template.XXXXXX</filename> oraz <filename>pakiet."
+"config.XXXXXX</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"Katalog tymczasowy, w którym zapisywane będą wyciągnięte szablony "
+"<command>debconf</command> i pliki konfiguracyjne. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::ExtractTemplates::TempDir</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command> zwraca zero, gdy zakończyło się "
+"pomyślnie, 100 - w przypadku błędu."
+
+#
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "Narzędzie użytkowe do sortowania plików indeksu"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>apt-sortpkgs</command> bierze plik indeksu (Source lub Packages) i "
+"sortuje rekordy po nazwie pakietu. Posortuje także pola w każdym rekordzie, "
+"zgodnie z wewnętrznymi zasadami sortowania."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"Wyjście programu jest wypisywane na standardowe wyjście, wejście musi "
+"pochodzić z pliku."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"Używa kolejności pól indeksu pliku Source. Pozycja w pliku konfiguracji: "
+"<literal>APT::SortPkgs::Source</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> zwraca zero, gdy zakończyło się pomyślnie, "
+"100 - w przypadku błędu."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "Narzędzie użytkowe do generowania plików indeksu"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> jest narzędziem linii poleceń generującym "
+"pliki indeksowe używane przez APT do uzyskania dostępu do źródeł "
+"dystrybucji. Pliki indeksowe powinny być generowane na he origin site based "
+"on the content of that site."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "The Generate Configuration"
+msgstr "Plik konfiguracyjny"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid "the <literal>Origin:</literal> line"
+msgid "<literal>Dir</literal> Section"
+msgstr "linia <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid "the <literal>Label:</literal> line"
+msgid "<literal>Default</literal> Section"
+msgstr "linia <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid "the <literal>Label:</literal> line"
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "linia <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid "the <literal>Label:</literal> line"
+msgid "<literal>Tree</literal> Section"
+msgstr "linia <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid "the <literal>Component:</literal> line"
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "linia <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "Określa plik zawierający listę plików."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "The Binary Override File"
+msgstr "Wprowadzenie"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "old [// oldn]* => new"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "new"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "The Source Override File"
+msgstr "Wprowadzenie"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"Przeszukaj tylko nazwy pakietów, pomijając szczegółowe opisy. Pozycja w "
+"pliku konfiguracyjnym: <literal>APT::Cache::NamesOnly</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Cichy; wypisuje tylko informacje potrzebne do logowania, opuszczając "
+"wskaźniki postępu. Więcej znaków q spowoduje jeszcze bardziej ciche wyjście, "
+"maksimum jest 2. Można także ustawić poziom cichości za pomocą <option>-q=#</"
+"option>, nadpisując tym samym opcję z pliku konfiguracyjnego. Pozycja w "
+"pliku konfiguracyjnym: <literal>quiet</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"Automatycznie odbudowuje bufor pakietów, zamiast używać istniejącego "
+"bufora. Ta opcja jest domyślnie włączona, aby ją wyłączyć, należy użyć "
+"<option>--no-generate</option>. Pozycja w pliku konfiguracyjnym: "
+"<literal>APT::Cache::Generate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"Ogranicza wyjście poleceń <literal>depends</literal> i <literal>rdepends</"
+"literal> tylko do pakietów, które są obecnie zainstalowane. Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Cache::Installed</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"Przeszukaj tylko nazwy pakietów, pomijając szczegółowe opisy. Pozycja w "
+"pliku konfiguracyjnym: <literal>APT::Cache::NamesOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+#, fuzzy
+#| msgid ""
+#| "If the command is either <literal>install</literal> or <literal>remove</"
+#| "literal>, then this option acts like running <literal>autoremove</"
+#| "literal> command, removing the unused dependency packages. Configuration "
+#| "Item: <literal>APT::Get::AutomaticRemove</literal>."
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"Jeżeli polecenie to albo <literal>install</literal>, albo <literal>remove</"
+"literal>, to ta opcja działa tak, jak uruchomienie polecenia "
+"<literal>autoremove</literal> i usuwa pakiety mające nieużywane już "
+"zależności. Pozycja w pliku konfiguracyjnym: <literal>APT::Get::"
+"AutomaticRemove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> packages <replaceable>katalog</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> zwraca zero, gdy zakończyło się pomyślnie, "
+"100 - w przypadku błędu."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Configuration file for APT"
+msgid "Login configuration file for APT sources and proxies"
+msgstr "Plik konfiguracyjny dla APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "The APT preferences file <filename>/etc/apt/preferences</filename> and "
+#| "the fragment files in the <filename>/etc/apt/preferences.d/</filename> "
+#| "folder can be used to control which versions of packages will be selected "
+#| "for installation."
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"Plik preferencji APT <filename>/etc/apt/preferences</filename> i pliki "
+"częściowe w katalogu <filename>/etc/apt/preferences.d/</filename> są używane "
+"do określania wersji pakietów wybieranych do instalacji."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "apt-get install <replaceable>pakiet</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "add <replaceable>file(s)</replaceable>"
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "add <replaceable>plik(i)</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Examples"
+msgid "Example"
+msgstr "Przykłady"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "<filename>/etc/apt/trustdb.gpg</filename>"
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt/trustdb.gpg</filename>"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"Wyświetla pełne wersje aktualizowanych pakietów Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "<filename>/etc/apt/trustdb.gpg</filename>"
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt/trustdb.gpg</filename>"
+
+#
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid ""
+#| "Show full versions for upgraded and installed packages. Configuration "
+#| "Item: <literal>APT::Get::Show-Versions</literal>."
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"Wyświetla pełne wersje aktualizowanych pakietów Pozycja w pliku "
+"konfiguracyjnym: <literal>APT::Get::Show-Versions</literal>."
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User configuration"
+msgid "Proxy Configuration"
+msgstr "Konfiguracja użytkownika"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User configuration"
+msgid "Automatic Proxy Configuration"
+msgstr "Konfiguracja użytkownika"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "User configuration"
+msgid "Connection Configuration"
+msgstr "Konfiguracja użytkownika"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+
+#
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+#, fuzzy
+#| msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, fuzzy, no-wrap
+#| msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "pl"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "Podręcznik użytkownika APT"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr "Dokument zawiera opis używania menadżera pakietów APT."
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"\"APT\" i ten dokument są oprogramowaniem wolnodostępnym, które można "
+"rozpowszechniać oraz zmieniać zgodnie z postanowieniami drugiej albo (wedle "
+"uznania) dowolnej późniejszej wersji \"Ogólnej Licencji Publicznej GNU"
+"\" (GNU General Public License) publikowanej przez \"Fundację Wolnego "
+"Oprogramowania (Free Software Foundation)."
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"Więcej szczegółów można uzyskać, przeglądając plik zawierający pełen tekst "
+"licencji (w systemach Debian jest to plik /usr/share/common-licenses/GPL)."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "Ogólne"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"Pakiet APT składa się z dwóch części: z metody APT programu "
+"<command>dselect</command> oraz z programu <command>apt-get</command> "
+"będącego interfejsem linii poleceń. Obie części pozwalają na instalowanie i "
+"usuwanie pakietów oraz na pobieranie nowych pakietów z Internetu."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "Budowa systemu pakietów"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"System pakietów Debiana zawiera sporą ilość informacji skojarzonych z każdym "
+"pakietem, zapewniających integralność pakietów w systemie. Najbardziej "
+"widoczną cechą systemu pakietów jest system zależności."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"System zależności pozwala poszczególnym programom używać wspólnych elementów "
+"systemu, takich jak biblioteki. Upraszcza także umieszczanie rzadko "
+"używanych części programów w oddzielnych pakietach, tak aby zmniejszyć "
+"liczbę pakietów instalowanych przez przeciętnego użytkownika. Pozwala także "
+"wybierać programy odpowiedzialne za dostarczanie poczty, serwery X-ów itp."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"Pierwszym krokiem potrzebnym do zrozumienia systemu zależności jest "
+"zrozumienie koncepcji prostej zależności. Prosta zależność oznacza, że dany "
+"pakiet do poprawnego działania wymaga zainstalowania innego pakietu."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"Na przykład mailcrypt jest rozszerzeniem edytora emacs, umożliwiającym "
+"szyfrowanie e-maili za pomocą programu GPG. Bez zainstalowanego pakietu GPG, "
+"mailcrypt jest bezużyteczny, dlatego mailcrypt zawiera prostą zależność od "
+"GPG. Ma także prostą zależność od pakietu emacs, ponieważ jest rozszerzeniem "
+"emacsa, więc i bez emacsa jest równie bezużyteczny."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"Inną ważną zależnością, którą należy zrozumieć, jest konflikt. Oznacza to, "
+"że dany pakiet może nie działać albo może być szkodliwy dla systemu, jeżeli "
+"razem z nim jest zainstalowany inny pakiet. Jako przykład rozważmy program "
+"odpowiedzialny za dostarczanie poczty (ang. \"mail transport agent\") taki "
+"jak sendmail, exim lub qmail. Nie jest możliwe jednoczesne zainstalowanie "
+"dwóch takich programów, ponieważ oba musiałyby nasłuchiwać na tym samym "
+"porcie sieciowym, żeby odebrać e-maile. Próba zainstalowanie obu poważnie "
+"uszkodzi system. Dlatego też wszystkie programy obsługi dostarczania poczty "
+"są w konflikcie ze wszystkimi innymi programami obsługującymi dostarczanie "
+"poczty."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"Dodatkową komplikacją jest możliwość, że dany pakiet może udawać inny "
+"pakiet. Proszę rozważyć jako przykład, że exim i sendmail praktycznie rzecz "
+"biorąc są identyczne - oba dostarczają pocztę, oba mają wspólny interfejs. "
+"Dlatego też system pakietów daje im możliwość zadeklarowania, że oba są "
+"programami obsługującymi dostarczanie poczty.Tak więc zarówno exim, jak i "
+"sendmail deklarują, że dostarczają pakiet o nazwie mail-transport-agent, od "
+"którego mogą zależeć pakiety, wymagające do swojego działania programu "
+"obsługi poczty. Może to być bardzo mylące podczas próby ręcznego naprawiania "
+"zależności pakietów."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"W dowolnym czasie pojedyncza zależność może być lub nie być spełniona przez "
+"obecnie zainstalowane pakiety. ATP próbuje rozwiązać zależności używając "
+"pewnej liczby algorytmów pomagających w wyborze pakietów do zainstalowania."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"<command>apt-get</command> dostarcza prostego sposobu na zainstalowanie "
+"pakietów z linii poleceń. W przeciwieństwie do <command>dpkg</command>, "
+"<command>apt-get</command> nie posługuje się nazwami plików \".deb\", lecz "
+"używa nazw pakietów i może zainstalować tylko archiwa \".deb\" ze "
+"skonfigurowanych <emphasis>źródeł</emphasis>."
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"Aby używać serwera proxy, należy najpierw ustawić zmienną środowiskową "
+"http_proxy, proszę przeczytać sources.list(5)"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"Pierwszą rzeczą <placeholder type=\"footnote\" id=\"0\"/>, którą należy "
+"zrobić przed użyciem <command>apt-get</command> jest pobranie listy pakietów "
+"(ze <emphasis>źródeł</emphasis> wymienionych w pliku sources.list(5)), tak "
+"żeby APT wiedział, jakie pakiety są dostępne. Robi się to za pomocą "
+"polecenia <literal>apt-get update</literal>. Na przykład:"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"Pob: http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Pob: http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Czytanie list pakietów... Gotowe\n"
+"Budowanie drzewa zależności... Gotowe\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr "Po zaktualizowaniu można użyć następnych poleceń:"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"Upgrade spróbuje delikatnie zaktualizować cały system. Upgrade nigdy nie "
+"zainstaluje nowego pakietu ani nie usunie istniejącego pakiety, ani też nie "
+"zaktualizuje pakietu do wersji powodującej, że inny pakiet przestanie "
+"działać. Można używać tego polecenia codziennie do w miarę bezpiecznych "
+"aktualizacji systemu. Upgrade wypisze listę pakietów, których nie potrafił "
+"zaktualizować, co zazwyczaj oznacza, że zależą one od nowych pakietów lub są "
+"w konflikcie z innymi pakietami. Można wymusić instalację takich pakietów, "
+"używając do tego <command>dselect</command> lub <literal>apt-get install</"
+"literal>."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"Install jest używane do instalowania pakietów przez podanie ich nazwy. "
+"Pakiet jest automatycznie pobierany i instalowany. Może być to użyteczne, "
+"gdy już zna się nazwę pakietu do zainstalowania i nie chce się uruchamiać "
+"graficznego interfejsu wyboru pakietów. Można podać dowolną liczbę nazw "
+"pakietów do zainstalowania - wszystkie będą pobrane. Install próbuje "
+"automatycznie rozwiązać problemy z zależnościami w podanych pakietach, "
+"wypisze podsumowanie i poprosi o potwierdzenie, jeśli zamierza zmienić "
+"cokolwiek innego niż pakiety podane jako jego argumenty."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"Dist-upgrade powoduje całkowitą aktualizację systemu i jest zaprojektowany "
+"do uproszczenia aktualizacji z jednego wydania Debiana do kolejnego. Używa "
+"wyrafinowanych algorytmów do określenia najlepszego zbioru pakietów do "
+"zainstalowania, aktualizacji lub usunięcia, tak aby zaktualizować jak "
+"najwięcej pakietów w systemie do nowszego wydania. W niektórych sytuacjach, "
+"może być prościej użyć dist-upgrade niż ręcznie rozwiązywać zależności w "
+"programie <command>dselect</command>. Kiedy dist-upgrade zakończy działanie, "
+"można użyć programu <command>dselect</command> do zainstalowania pominiętych "
+"pakietów."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"Jest ważne, aby dokładnie przyjrzeć się temu, co dist-upgrade zamierza "
+"zrobić, gdyż jego decyzje mogą czasami zdumiewać."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"Zachowanie programu <command>apt-get</command> można kontrolować za pomocą "
+"opcji linii poleceń szczegółowo opisanych w stronie podręcznika ekranowego "
+"<citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>. Najbardziej użyteczną z nich jest <literal>-d</"
+"literal>, która nie instaluje pobranych plików. Jeśli system musi pobrać "
+"dużą liczbę pakietów, instalowanie ich może być niepożądane, jeśli coś "
+"pójdzie nie tak. Jeśli użyto <literal>-d</literal>, to pobrane archiwa można "
+"zainstalować, ponownie uruchamiając polecenie, które spowodowało ich "
+"pobranie, tym razem bez opcji <literal>-d</literal>."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"Metoda APT <command>dselect</command> dostarcza kompletnego systemu APT w "
+"interfejsie użytkownika programu wyboru pakietów <command>dselect</command>. "
+"<command>dselect</command> może być użyty do wybrania pakietów "
+"przeznaczonych do zainstalowania lub usunięcia, a APT zainstaluje lub usunie "
+"te pakiety."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"Aby włączyć metodę APT należy wybrać opcję \"[A] Dostęp\" w programie "
+"<command>dselect</command> , a następnie wybrać metodę APT. Użytkownik "
+"zostanie poproszony o skonfigurowanie listy <emphasis>źródeł</emphasis>, "
+"będących lokalizacjami, z których będą pobierane pakiety. Mogą być to strony "
+"internetowe, lokalne serwery lustrzane Debiana lub CD-ROM-y. Każde źródło "
+"może dostarczać tylko fragmentu pełnego archiwum Debiana, a APT "
+"automatycznie połączy je w kompletny zbiór pakietów. Jeśli używany jest CD-"
+"ROM, to dobrym pomysłem jest podanie najpierw jego, a potem podanie mirrorów "
+"umożliwiających dostęp do najnowszych wersji pakietów zawierających poprawki "
+"błędów. APT automatycznie użyje pakietów z CD-ROM-u zanim zacznie pobierać "
+"pakiety z Internetu."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" Ustawianie listy źródłowych lokalizacji dystrybucji\n"
+"\n"
+" Proszę podać bazowy URL dystrybucji Debiana.\n"
+" Obsługiwane schematy połączeń to: http ftp file\n"
+"\n"
+" Przykłady:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.pl.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"Ustawianie źródeł zaczyna się od pytania o bazową lokalizację Debiana. "
+"Domyślną wartością jest mirror HTTP. Następnie użytkownik jest pytany o "
+"dystrybucję do pobrania."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" Proszę podać znacznik dystrybucji do pobrania lub ścieżkę do pliku\n"
+" pakietów kończącą się znakiem \"/\". Zazwyczaj znacznikiem dystrybucji\n"
+" jest coś w rodzaju: stable unstable testing non-US\n"
+"\n"
+" Dystrybucja [stable]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"Dystrybucja odnosi się do wersji Debiana: <emphasis>stable</"
+"emphasis>(stabilna) to najnowsza wydana wersja, a <emphasis>unstable</"
+"emphasis> (niestabilna) to wersja rozwojowa. <emphasis>non-US</emphasis> "
+"jest dostępna tylko na wybranych serwerach lustrzanych i zawiera pakiety, "
+"które wykorzystują technologie szyfrowania danych lub inne rzeczy, które nie "
+"mogą być eksportowane z serwerów umieszczonych w Stanach Zjednoczonych. "
+"Importowanie tych pakietów do Stanów Zjednoczonych jest jednakże legalne."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" Proszę podać komponenty do pobrania\n"
+" Zazwyczaj komponentem jest coś w rodzaju: main contrib non-free\n"
+"\n"
+" Komponenty [main contrib non-free]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"Lista komponentów jest listą pod-dystrybucji do pobrania. Dystrybucja jest "
+"podzielona ze względu na licencje oprogramowania: main (główna) zawiera "
+"pakiety zgodne z DFSG (\"Wytycznymi Debiana w sprawie Wolnego Oprogramowania"
+"\"),contrib i non-free zawierają pakiety, które zawierają restrykcje "
+"związane z ich używaniem lub rozpowszechnianiem."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"Można dodać dowolną liczbę źródeł. Skrypt konfigurujący będzie kontynuował "
+"odpytywanie użytkownika dopóty, dopóki nie poda wszystkich źródeł, które "
+"chciał skonfigurować."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"Przed rozpoczęciem używania programu <command>dselect</command> należy w "
+"menu tego programu wybrać \"[U] Aktualizacja\", abyzaktualizować listę "
+"dostępnych pakietów. To polecenie jest nadzbiorem polecenia <literal>apt-get "
+"update</literal>, zapewniającym programowi <command>dselect</command> dostęp "
+"do pobranych informacji o pakietach. \"[U] Aktualizacja\" musi być wykonana, "
+"nawet jeśli wcześniej uruchomiono <literal>apt-get update</literal>."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"Następnie można wybrać pakiety do zainstalowania, używając opcji \"[S] Wybór"
+"\", a potem zainstalować te pakiety opcją \"[I] Instalacja\". Używanie "
+"metody APT czyni opcje \"[C] Konfiguracja\" i \"[R] Usuwanie\" "
+"bezużytecznymi, gdyż \"[I] Instalacja\" przeprowadza również te dwie "
+"operacje."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"Domyślnie APT automatycznie usunie pliki pakietów (.deb), gdy tylko zostaną "
+"zainstalowane. Aby zmienić to zachowanie, proszę umieścić <literal>Dselect::"
+"clean \"prompt\";</literal> w /etc/apt/apt.conf."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "Interfejs"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"Metoda programu <command>dselect</command> jest tak naprawdę zbiorem "
+"skryptów wywołujących <command>apt-get</command>. Metoda ta ma jednakże "
+"większą funkcjonalność niż sam program <command>apt-get</command>."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"Metoda APT programu <command>dselect</command> i program <command>apt-get</"
+"command> dzielą wspólny interfejs. Jest to prosty system, który najpierw "
+"informuje użytkownika, co będzie zrobione, a następnie to robi. <placeholder "
+"type=\"footnote\" id=\"0\"/> Po wyświetleniu podsumowania informującego o "
+"tym, co będzie zrobione, APT wyświetla komunikaty dotyczące postępu "
+"przeprowadzanych operacji, tak żeby można było oszacować czas pozostały do "
+"ich zakończenia."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "Uruchamianie"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"Przed każdą operacją, z wyjątkiem update, APT przeprowadza pewne akcje "
+"przygotowujące wewnętrzny stan. Sprawdza również stan systemu. Te same "
+"operacje można przeprowadzić w dowolnej chwili, uruchamiając <literal>apt-"
+"get check</literal>."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"Czytanie list pakietów... Gotowe\n"
+"Budowanie drzewa zależności... Gotowe\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"Pierwszą rzeczą, którą robi, jest wczytanie wszystkich plików pakietów do "
+"pamięci. APT używa buforowania, tak żeby przyspieszyć tę operację przy "
+"następnym uruchomieniu. Jeśli nie znajdzie niektórych plików pakietów, to "
+"wypisze ostrzeżenie, a te pakiety zignoruje."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"Końcową operacją jest szczegółowa analiza zależności w systemie. Sprawdzana "
+"jest każda zależność każdego pakietu zainstalowanego lub rozpakowanego. W "
+"razie wykrycia problemów z zależnościami <command>apt-get</command> wypisze "
+"odpowiedni komunikat i odmówi dalszego działania."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"Czytanie list pakietów... Gotowe\n"
+"Budowanie drzewa zależności... Gotowe\n"
+"Należy uruchomić \"apt --fix-broken install\", aby je naprawić.\n"
+"Następujące pakiety mają niespełnione zależności:\n"
+" 9fonts: Wymaga: xlib6g ale nie jest zainstalowany\n"
+" uucp: Wymaga: mailx ale nie jest zainstalowany\n"
+" blast: Wymaga: xlib6g (&gt;= 3.3-5) ale nie jest zainstalowany\n"
+" adduser: Wymaga: perl-base ale nie jest zainstalowany\n"
+" aumix: Wymaga: libgpmg1 but ale nie jest zainstalowany\n"
+" debiandoc-sgml: Wymaga: sgml-base ale nie jest zainstalowany\n"
+" bash-builtins: Wymaga: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Wymaga: svgalibg1 but it is not installed\n"
+" Wymaga: xlib6g (&gt;= 3.3-5) ale nie jest zainstalowany\n"
+" libreadlineg2: Jest w konflikcie z: libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"Powyższy przykład przedstawia system mający wiele problemów, włączając to "
+"poważny problem z libreadlineg2. Każdy pakiet mający niespełnione zależności "
+"jest wypisywany w osobnej linii razem z niespełnionymi zależnościami. Podane "
+"jest również krótkie wyjaśnienie dotyczące przyczyny problemu."
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"APT rozważa wszystkie znane zależności i próbuje nie dopuścić do zepsucia "
+"pakietów."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"Są dwie przyczyny, z których powodu system może być zepsuty w powyższy "
+"sposób. Pierwszą jest to, że <command>dpkg</command> podczas aktualizacji "
+"systemu nie zauważył jakiejś subtelnej relacji między pakietami<placeholder "
+"type=\"footnote\" id=\"0\"/>. Drugą przyczyną jest wystąpienie błędu w "
+"czasie instalowania pakietu. W takim przypadku pakiet może być rozpakowany, "
+"mimo że pakiety od niego zależące nie są zainstalowane."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"Druga przyczyna jest o wiele mniej poważna niż pierwsza, ponieważ APT "
+"wymusza pewne więzy integralności dotyczące kolejności instalowania "
+"pakietów. W obu przypadkach przekazanie programowi <command>apt-get</"
+"command> opcji <literal>-f</literal> wymusi na APT znalezienie rozwiązania "
+"umożliwiającego mu kontynuowanie działania. Metoda APT programu "
+"<command>dselect</command> zawsze przekazuje opcję <literal>-f</literal>, "
+"aby móc kontynuować po wystąpieniu błędu w skryptach opiekunów pakietów."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"Jednak gdy opcja <literal>-f</literal> jest używana do poprawienia "
+"zależności w poważnie uszkodzonym systemie (pierwsza z opisanych wyżej "
+"przyczyn), możliwe jest że albo od razu zwróci błąd, albo nie powiedzie się "
+"sekwencja instalowania pakietów. W obu przypadkach należy poprawić "
+"zależności ręcznie, używając do tego dpkg (być może przekazując mu opcje "
+"wymuszające \"--force-...\"), w takim stopniu, aby umożliwić działanie "
+"systemowi APT."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "Raport stanu"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"Przed rozpoczęciem przetwarzania <command>apt-get</command> wyświetli raport "
+"zawierający informacje o tym, co będzie zrobione. W ogólności raport ten "
+"zależy od typu wykonywanej operacji, jednakże występuje w nim kilka "
+"elementów wspólnych dla wszystkich typów. We wszystkich wypadkach "
+"wyświetlane są informacje o końcowym stanie, brana jest pod uwagę opcja "
+"<literal>-f</literal>, a także wszystkie istotne działania wykonywanego "
+"polecenia."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "Lista dodatkowych pakietów"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"Zostaną zainstalowane następujące dodatkowe pakiety:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"Lista dodatkowych pakietów wyświetla wszystkie pakiety, które będą "
+"zainstalowane lub zaktualizowane oprócz tych wymienionych w linii poleceń. "
+"Jest generowana tylko dla polecenia <literal>install</literal>. Wymienione "
+"pakiety są najczęściej wynikiem automatycznej instalacji."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "Pakiety przeznaczone do usunięcia"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"Następujące pakiety zostaną USUNIĘTE:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"Lista pakietów przeznaczonych do usunięcia wyświetla wszystkie pakiety, "
+"które zostaną usunięte z systemu. Może być pokazana dla każdej operacji i "
+"powinna być szczegółowo przeanalizowana, aby zapewnić, że żaden istotny "
+"pakiet nie będzie usunięty. W szczególności opcja <literal>-f</literal> może "
+"wygenerować sporo pakietów do usunięcia, także w przypadku jej użycia należy "
+"szczególnie dokładnie przeanalizować wyświetlany raport. Lista może zawierać "
+"pakiety usuwane z powodu ich tylko częściowego zainstalowania, wynikającego "
+"być może z przerwania wcześniejszej instalacji."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "Lista nowych pakietów"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"Zostaną zainstalowane następujące NOWE pakiety:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"Lista nowych pakietów to proste przypomnienie o tym, co się stanie. Wypisane "
+"pakiety nie są obecnie zainstalowane w systemie, ale będą, kiedy APT skończy "
+"działanie."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "Lista zatrzymanych pakietów"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"Następujące pakiety zostały zatrzymane:\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"Jeśli aktualizowany jest cały system, to jest możliwe, że nowe wersje "
+"pakietów nie będą mogły być zainstalowane, ponieważ wymagają nowych pakietów "
+"lub są w konflikcie z już zainstalowanymi pakietami. W takim wypadku pakiet "
+"pojawi się na liście pakietów zatrzymanych. Najlepszym sposobem na "
+"zainstalowanie takich pakietów jest użycie <literal>apt-get install</"
+"literal> lub rozwiązanie problemów z zależnościami za pomocą programu "
+"<command>dselect</command>."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "Ostrzeżenie o zmianie zatrzymanych pakietów"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"Zostaną zmienione następujące zatrzymane pakiety:\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"Czasami można poprosić APT o zainstalowanie pakietu, który jest zatrzymany. "
+"W takim przypadku wypisywane jest ostrzeżenie o zmianie zatrzymanego "
+"pakietu. Może się to zdarzyć tylko podczas dist-upgrade lub install."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "Podsumowanie"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+"APT zakończy raport podsumowaniem wszystkich zmian, które przeprowadzi."
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"206 aktualizowanych, 8 nowo instalowanych, 25 usuwanych i 51 nieaktualizowanych.\n"
+"12 nie w pełni zainstalowanych lub usuniętych.\n"
+"Konieczne pobranie 65.7M/66.7M archiwów. Po rozpakowaniu zostanie użyte 26.5M.\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"Pierwsza linia podsumowania jest uproszczoną wersją powyższych list i "
+"zawiera liczbę aktualizacji - to jest pakietów już zainstalowanych, których "
+"nowsze wersje są dostępne. W drugiej linii wyświetlono liczbę nie do końca "
+"skonfigurowanych pakietów, prawdopodobnie w wyniku przerwania poprzedniej "
+"instalacji. Ostatnia linia zawiera dane dotyczące miejsca na dysku. Pierwsza "
+"para liczb odnosi się do rozmiaru plików archiwum: pierwsza liczba oznacza "
+"liczbę bajtów, które muszą zostać pobrane ze zdalnych serwerów, a druga - "
+"całkowity rozmiar wszystkich żądanych archiwów. Kolejna liczba oznacza "
+"różnicę rozmiarów pomiędzy obecnie zainstalowanymi pakietami, a nowo "
+"instalowanymi pakietami. W przybliżeniu odpowiada przestrzeni dysku, która "
+"będzie zajęta w /usr po zakończeniu instalacji. Wartość ta może wskazywać na "
+"zwolnienie miejsca na dysku, jeśli usuwana jest duża liczba pakietów."
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"Używając opcji -u, można wygenerować raport pokazujący pakiety przeznaczone "
+"do aktualizacji, podobny do tego pokazanego w poprzednim przykładzie."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "Wyświetlanie stanu przetwarzania"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"Podczas pobierania archiwów i plików pakietów APT wyświetla serię "
+"komunikatów o stanie."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"Pob:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Pob:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Traf http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Pob:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Pob:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Oczekiwane na nagłówki' 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"Linie zaczynające się od <emphasis>Pob:</emphasis> są wypisywane, kiedy APT "
+"zaczyna pobierać plik, a ostatnia linia oznacza postęp pobierania. Pierwsza "
+"wartość podana w procentach określa całkowity procent pobierania wszystkich "
+"plików. Niestety rozmiar plików Package nie jest znany, tak więc "
+"<literal>apt-get update</literal> estymuje procent wykonanego pobierania, co "
+"powoduje pewne nieścisłości."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"Następna sekcja linii statusu powtarza się dla każdego wątku pobierania, "
+"oznacza przeprowadzanie operacji i podaje kilka użytecznych informacji na "
+"temat tego, co się dzieje. Czasem sekcja ta zawiera komunikat "
+"<emphasis>Tworzenie procesu potomnego</emphasis>, co oznacza, że system "
+"operacyjny ładuje moduł pobierania. Pierwszym słowem po znaku \"[\" jest "
+"liczba pobrań, dokładnie taka jaka jest pokazana liczba linii historii "
+"pobrań. Następnie w skróconej formie wyświetlana jest nazwa pobieranego "
+"obiektu. W przypadku archiwów nazwa ta będzie zawierać nazwę pobieranego "
+"pakietu."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"W pojedynczych cudzysłowach podawany jest komunikat wskazujący na postęp "
+"tworzenia połączenia pobierania danych. Zazwyczaj postęp ten jest sekwencją "
+"zdarzeń od <emphasis>Podłączanie</emphasis> przez <emphasis>Oczekiwanie na "
+"nagłówki</emphasis> do <emphasis>Pobieranie</emphasis> lub "
+"<emphasis>Wznawianie</emphasis>. Końcową wartością jest liczba bajtów "
+"pobranych ze zdalnego serwera. Kiedy tylko pobieranie się rozpocznie, "
+"wartość ta jest wyświetlana jw formacie typu <literal>102/10.2k</literal>, "
+"co oznacza, że pobrano 102 bajty, a oczekuje się jeszcze pobrania 10.2 "
+"kilobajtów. Aby zaoszczędzić miejsce, całkowity rozmiar jest zawsze "
+"wyświetlany jako w postaci 4-znakowej. Po rozmiarze następuje procentowy "
+"wskaźnik postępu pobierania danego pliku. Przedostatnim elementem jest "
+"bieżąca średnia prędkość pobierania, która jest aktualizowane co każde 5 "
+"sekund i odzwierciedla tempo pobierania w tym okresie. W końcu wyświetlany "
+"jest estymowany czas pobierania, regularnie aktualizowany i "
+"odzwierciedlający czas pozostały do zakończenia pobierania przy założeniu "
+"utrzymania się pokazanego tempa pobierania."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"Linia stanu jest aktualizowana co każde pół sekundy, aby na bieżąco "
+"informować użytkownika o postępie pobierania, podczas gdy linie \"Pob:\" są "
+"przesuwane w dół, gdy tylko zacznie się pobieranie nowego pliku. Ponieważ "
+"linia stanu jest ciągle zmieniana, wyjście programu nie jest odpowiednie do "
+"przekierowania do pliku. Aby usunąć linie stanu, należy użyć opcji <literal>-"
+"q</literal>."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"APT używa programu <command>dpkg</command> do instalowania archiwów i "
+"przełączy się do interfejsu <command>dpkg</command>, gdy tylko zakończy "
+"pobieranie plików. <command>dpkg</command> może również zadawać pytania "
+"podczas przetwarzania pakietów, a same pakiety także mogą zadawać pytania. "
+"Każde pytanie zazwyczaj jest poprzedzone opisem, a same pytania są zbyt "
+"zróżnicowane, by je tutaj opisać."
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "Używanie APT w trybie offline"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"Dokument ten opisuje używanie programu APT w środowiskach pozbawionych "
+"dostępu, do sieci, a w szczególności metodę pozwalającą na przeprowadzanie "
+"aktualizacji systemu."
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "Wstęp"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "Wprowadzenie"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"Zazwyczaj APT wymaga bezpośredniego dostępu do archiwów Debiana przez sieć "
+"lokalną albo przez sieć internetową. Kolejną niedogodnością może być fakt, "
+"że nasz komputer, który pracuje na powolnym łączu takim jak modem, jest "
+"znacznie oddalony od innego komputera z szybkim łączem."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"Rozwiązaniem tego problemu jest użycie pojemnych przenośnych nośników takich "
+"jak dyskietka Zip lub dysk SuperDisk. Nośniki te nie są wystarczająco "
+"pojemne, by zgromadzić kompletne archiwum Debiana, ale można śmiało "
+"dopasować podzbiór dużego archiwum wystarczający dla większości "
+"użytkowników. Pomysł polega na tym, by użyć programu APT do wygenerowania "
+"listy pakietów, które są wymagane, a następnie pobraniu ich na dysk, "
+"używając innego komputera z właściwą zwartością. Jest nawet możliwe, by użyć "
+"innego komputera z Debianem z zainstalowanym programem APT lub zupełnie "
+"innym systemem operacyjnym i programem narzędziowym do pobierania plików "
+"takim jak wget."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+#, fuzzy
+#| msgid ""
+#| "This is achieved by creatively manipulating the APT configuration file. "
+#| "The essential premise to tell APT to look on a disc for it's archive "
+#| "files. Note that the disc should be formated with a filesystem that can "
+#| "handle long file names such as ext2, fat32 or vfat."
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"Osiągane jest to przez twórcze manipulowanie plikiem konfiguracyjnym "
+"programu APT. Rzeczą niezbędną jest poinformowanie programu APT, aby "
+"wskazywał na dysk z plikami archiwum. Należy zauważyć, że dysk powinien być "
+"sformatowany do obsługi systemu plików pozwalającego posługiwać się długimi "
+"nazwami plików (np. ext2, fat32 albo vfat)."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "Używanie programu APT na obu komputerach"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"APT dostępny na obu komputerach daje najprostszą kombinację. Zasadniczym "
+"pomysłem tej metody jest umieszczenie kopii pliku status na dysku i użycie "
+"odległego komputera, aby uzyskać najnowsze pliki pakietów i zdecydować, "
+"które pakiety trzeba pobrać. Struktura katalogów na dysku powinna wyglądać "
+"następująco:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "Plik konfiguracyjny"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"Plik konfiguracyjny powinien informować program APT, aby przechowywał swoje "
+"pliki na dysku, a także używał plików konfiguracyjnych z dysku. Plik sources."
+"list powinien zawierać prawidłowe odnośniki, których należy użyć na zdalnym "
+"komputerze, a plik status powinien być kopią <emphasis>/var/lib/dpkg/status</"
+"emphasis>. Należy zauważyć, że podczas używania lokalnego archiwum trzeba "
+"użyć tych samych odnośników o identycznej składni."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt.conf</emphasis> musi zawierać niezbędne wpisy, by APT "
+"korzystał z dysku:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* Wpis nie jest wymagany, jeśli oba komputery mają tę samą architekturę;\n"
+" podaje architekturę naszego komputera programowi APT na odległym komputerze */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Używaj katalogu disc na informacje stanu i przekieruj plik status\n"
+" z domyślnego /var/lib/dpkg */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Katalog lokalnie przechowywanych pakietów binarnych\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Lokalizacja pliku sources.list.\n"
+" Etc \"/disc\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"Więcej szczegółów można zobaczyć w stronie podręcznika apt.conf i w "
+"przykładowym pliku konfiguracyjnym <emphasis>/usr/share/doc/apt/examples/apt."
+"conf</emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"Pierwszą rzeczą, jaką należy zrobić na oddalonym komputerze z Debianem to "
+"zamontować dysk i przekopiować na niego plik <emphasis>/var/lib/dpkg/status</"
+"emphasis>. Trzeba także utworzyć strukturę katalogów przedstawioną we "
+"\"Wprowadzeniu\": <emphasis>archives/partial/</emphasis> i <emphasis>lists/"
+"partial/</emphasis>. Następnie należy przenieść dysk do oddalonego komputera "
+"z szybkim łączem i skonfigurować plik sources.list. Na oddalonym komputerze "
+"wykonujemy kolejno:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT aktualizuje ustawienia ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT pobiera wszystkie pakiety potrzebne do aktualizacji Twojego systemu ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"Polecenie dist-upgrade można zastąpić każdym innym podstawowym poleceniem "
+"APT, w szczególności dselect-upgrade. Można nawet użyć APT jako metody "
+"dostępu dla <emphasis>dselect</emphasis>. Jednak stworzy to problem w "
+"przeniesieniu Twoich operacji wyborów z powrotem na lokalny komputer."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"W tej chwili katalog disc zawiera wszystkie pliki indeksowe oraz archiwa "
+"niezbędne do aktualizacji maszyny z Debianem. Bierzemy dysk z powrotem do "
+"siebie i wpisujemy:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT tworzy lokalną kopię plików cache ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Może też być inne polecenie programu APT ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"Do prawidłowego działania koniecznie należy podać plik status z lokalnej "
+"maszyny. To jest bardzo ważne!"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"Jeśli używasz dselect, możesz wykonać bardzo ryzykowną operację skopiowania "
+"disc/status do /var/lib/dpkg/status, tak że wszystkie zmiany, których "
+"dokonałeś na odległym komputerze, będą przeniesione. Mocno zalecam, aby "
+"dokonywać doboru pakietów tylko na lokalnym komputerze, ale nie zawsze jest "
+"to możliwe. NIE podmieniaj pliku status, jeśli dpkg lub APT były uruchamiane "
+"w międzyczasie!"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "Używanie programów APT i wget"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> jest popularnym i przenośnym programem "
+"narzędziowym pobierania plików, który działa prawie na każdym komputerze. W "
+"przeciwieństwie do metody opisanej powyżej ta wymaga, aby na lokalnym "
+"komputerze była aktualna lista dostępnych pakietów."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"Należy stworzyć katalog disc tylko na pakiety do pobrania z innego "
+"komputera. Użyta zostanie do tego opcja --print-uris programu apt-get, a "
+"następnie przygotujemy skrypt dla programu wget, który pobierze właściwe "
+"pakiety."
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "Kolejne kroki"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"W odróżnieniu od poprzedniej metody działania ta nie wymaga specjalnych "
+"plików konfiguracyjnych. Używamy jedynie podstawowych poleceń APT, by "
+"wygenerować listę plików."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade \n"
+" [ Wybierz \"no\" po znaku zachęty, upewnij się, czy to właściwy wybór ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"Można tu użyć także polecenia innego niż dist-upgrade, na przykład dselect-"
+"upgrade."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"Plik skryptu /disc/wget-script będzie teraz zawierać listę wywołań programu "
+"wget, niezbędnych do pobrania potrzebnych archiwów. Skrypt ten należy "
+"uruchomić w bieżącym katalogu o punkcie montowania disc, tak aby zapisywał "
+"dane na tym dysku."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr "Na oddalonym komputerze należy wykonać coś takiego"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ czekaj.. ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"Gdy archiwa zostaną pobrane i dysk wróci do komputera z Debianem, "
+"instalowanie można prowadzić dalej poleceniem:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr "Które użyje pobranych uprzednio archiwów z dysku."
+
+#~ msgid ""
+#~ "The http scheme specifies an HTTP server for the archive. If an "
+#~ "environment variable <envar>http_proxy</envar> is set with the format "
+#~ "http://server:port/, the proxy server specified in <envar>http_proxy</"
+#~ "envar> will be used. Users of authenticated HTTP/1.1 proxies may use a "
+#~ "string of the format http://user:pass@server:port/. Note that this is an "
+#~ "insecure method of authentication."
+#~ msgstr ""
+#~ "Schemat http opisuje serwer archiwum HTTP. Jeśli ustawiono zmienną "
+#~ "środowiskową <envar>http_proxy</envar> w formacie http://serwer:port/, to "
+#~ "APT użyje serwera proxy określonego w tej zmiennej. Użytkownicy serwerów "
+#~ "proxy wymagających autoryzacji mogą ustawić tę zmienną na http://"
+#~ "użytkownik:hasło@serwer:port/. Proszę zauważyć, że taki sposób "
+#~ "autoryzacji nie jest bezpieczny."
+
+#, fuzzy
+#~| msgid "Archive configuration"
+#~ msgid "Archive Configuration"
+#~ msgstr "Konfiguracja archiwum"
+
+#~ msgid ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+#~ msgstr ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+
+#~ msgid ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+#~ msgstr ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+
+#~ msgid "List fingerprints of trusted keys."
+#~ msgstr "Wyświetla listę odcisków zaufanych kluczy."
+
+#~ msgid "Local trust database of archive keys."
+#~ msgstr "Lokalna składnica zaufanych kluczy archiwum."
+
+#~ msgid "&keyring-filename;"
+#~ msgstr "&keyring-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive trusted keys."
+#~ msgstr "Składnica zaufanych kluczy archiwum &keyring-distro;."
+
+#~ msgid "&keyring-removed-filename;"
+#~ msgstr "&keyring-removed-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive removed trusted keys."
+#~ msgstr "Składnica usuniętych zaufanych kluczy archiwum &keyring-distro;."
+
+#, fuzzy
+#~| msgid "&apt-cache; &apt-conf;"
+#~ msgid "&apt-get;, &apt-conf;"
+#~ msgstr "&apt-cache;, &apt-conf;"
+
+#
+#, fuzzy
+#~| msgid ""
+#~| "<literal>rdepends</literal> shows a listing of each reverse dependency a "
+#~| "package has."
+#~ msgid ""
+#~ "<literal>show</literal> shows the package information for the given "
+#~ "package(s)."
+#~ msgstr ""
+#~ "<literal>rdepends</literal> pokazuje listę wszystkich odwrotnych "
+#~ "zależności danego pakietu."
+
+#, fuzzy
+#~| msgid ""
+#~| "<literal>showhold</literal> is used to print a list of packages on hold "
+#~| "in the same way as for the other show commands."
+#~ msgid ""
+#~ "<literal>update</literal> is used to resynchronize the package index "
+#~ "files from their sources."
+#~ msgstr ""
+#~ "<literal>showhold</literal> jest używane do wypisania listy wszystkich "
+#~ "pakietów wstrzymanych, w taki sam sposób jak pozostałe polecenia \"show\"."
+
+#, fuzzy
+#~| msgid "the <literal>Package:</literal> line"
+#~ msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
+#~ msgstr "linia <literal>Package:</literal>"
+
+#, fuzzy
+#~| msgid "the <literal>Component:</literal> line"
+#~ msgid "The option <literal>APT::Color</literal> is enabled."
+#~ msgstr "linia <literal>Component:</literal>"
+
+#, fuzzy
+#~| msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+#~ msgid ""
+#~ "The option <literal>upgrade</literal> has <literal>--with-new-pkgs</"
+#~ "literal> enabled by default."
+#~ msgstr "linia <literal>Archive:</literal> lub <literal>Suite:</literal>"
+
+#~ msgid ""
+#~ "Pass advanced options to gpg. With adv --recv-key you can download the "
+#~ "public key."
+#~ msgstr ""
+#~ "Przekazuje zaawansowane opcje do gpg. Na przykład adv --recv-key "
+#~ "umożliwia pobranie klucza publicznego."
+
+#~ msgid "mark/unmark a package as being automatically-installed"
+#~ msgstr "Zaznaczanie/odznaczanie pakietu jako zainstalowanego automatycznie."
+
+#~ msgid ""
+#~ "<command>apt-mark</command> will change whether a package has been marked "
+#~ "as being automatically installed."
+#~ msgstr ""
+#~ "<command>apt-mark</command> zmienia flagę mówiącą o tym, czy pakiet był "
+#~ "zainstalowany automatycznie."
+
+#~ msgid ""
+#~ "<literal>hold</literal> is used to mark a package as held back, which "
+#~ "will prevent the package from being automatically installed, upgraded or "
+#~ "removed. The command is only a wrapper around <command>dpkg --set-"
+#~ "selections</command> and the state is therefore maintained by &dpkg; and "
+#~ "not affected by the <option>--file</option> option."
+#~ msgstr ""
+#~ "<literal>hold</literal> jest używane do wstrzymania pakietu, co zabroni "
+#~ "automatycznego instalowania, aktualizowania lub usuwania pakietu. "
+#~ "Polecenie jest nakładką na <command>dpkg --set-selections</command>, stan "
+#~ "pakietu jest zarządzany przez &dpkg;, a opcja <option>--file</option> nie "
+#~ "wpływa na działanie tego polecenia."
+
+#~ msgid ""
+#~ "If a package comes from a archive without a signature, or with a "
+#~ "signature that apt does not have a key for, that package is considered "
+#~ "untrusted, and installing it will result in a big warning. <command>apt-"
+#~ "get</command> will currently only warn for unsigned archives; future "
+#~ "releases might force all sources to be verified before downloading "
+#~ "packages from them."
+#~ msgstr ""
+#~ "Jeśli pakiet pochodzi z archiwum niemającego sygnatury lub mającego "
+#~ "sygnaturę, dla której APT nie ma klucza, to pakiet taki jest uznawany za "
+#~ "niezaufany, a podczas jego instalacji zostanie wypisane ostrzeżenie. "
+#~ "Obecnie <command>apt-get</command> tylko wypisuje ostrzeżenia o "
+#~ "niepodpisanych archiwach, przyszłe wydania mogą wymuszać, by wszystkie "
+#~ "źródła były zweryfikowane, zanim w ogóle APT spróbuje z nich pobrać "
+#~ "pakiety."
+
+#
+#~ msgid ""
+#~ "No action; perform a simulation of events that would occur but do not "
+#~ "actually change the system. Configuration Item: <literal>APT::Get::"
+#~ "Simulate</literal>."
+#~ msgstr ""
+#~ "Brak akcji; wykonuje symulację zdarzeń, które mogłyby się przytrafić, ale "
+#~ "nic nie zmienia w systemie. Pozycja w pliku konfiguracyjnym: "
+#~ "<literal>APT::Get::Simulate</literal>."
+
+#~ msgid ""
+#~ "Simulated runs performed as a user will automatically deactivate locking "
+#~ "(<literal>Debug::NoLocking</literal>), and if the option <literal>APT::"
+#~ "Get::Show-User-Simulation-Note</literal> is set (as it is by default) a "
+#~ "notice will also be displayed indicating that this is only a simulation. "
+#~ "Runs performed as root do not trigger either NoLocking or the notice - "
+#~ "superusers should know what they are doing without further warnings from "
+#~ "<literal>apt-get</literal>."
+#~ msgstr ""
+#~ "Symulowane uruchomienia przeprowadzane przez przez zwykłego użytkownika "
+#~ "automatycznie wyłączą blokady (<literal>Debug::NoLocking</literal>). "
+#~ "Jeżeli jest ustawiona opcja <literal>APT::Get::Show-User-Simulation-Note</"
+#~ "literal> (a domyślnie jest ona ustawiona), to zostanie wyświetlona "
+#~ "informacja o tym, że to jest tylko symulacja. Symulacje przeprowadzane "
+#~ "przez administratora systemu nie powodują wyłączenia blokad ani nie "
+#~ "pokazują informacji - administratorzy powinni wiedzieć, co robią, bez "
+#~ "dodatkowych ostrzeżeń ze strony <literal>apt-get</literal>."
+
+#~ msgid ""
+#~ "Ignore if packages can't be authenticated and don't prompt about it. "
+#~ "This is useful for tools like pbuilder. Configuration Item: "
+#~ "<literal>APT::Get::AllowUnauthenticated</literal>."
+#~ msgstr ""
+#~ "Ignorowanie sytuacji, w których nie powiedzie się autentykacja pakietów i "
+#~ "nieostrzeganie o tym. Jest to użyteczne dla programów typu pbuilder. "
+#~ "Pozycja w pliku konfiguracyjnym: <literal>APT::Get::AllowUnauthenticated</"
+#~ "literal>."
+
+#~ msgid ""
+#~ "to the versions that are not installed and do not belong to the target "
+#~ "release."
+#~ msgstr "wersjom niezainstalowanym i nienależącym do wydania docelowego."
+
+#~ msgid ""
+#~ "Each line specifying a source starts with type (e.g. <literal>deb-src</"
+#~ "literal>) followed by options and arguments for this type. Individual "
+#~ "entries cannot be continued onto a following line. Empty lines are "
+#~ "ignored, and a <literal>#</literal> character anywhere on a line marks "
+#~ "the remainder of that line as a comment."
+#~ msgstr ""
+#~ "Każda linia określająca źródło rozpoczyna się od typu (np. <literal>deb-"
+#~ "src</literal>), po którym następują opcje i argumenty dla tego typu. "
+#~ "Wpisy nie mogą być kontynuowane w nowych liniach. Puste linie są "
+#~ "ignorowane, a znak \"<literal>#</literal> \" występujący gdziekolwiek w "
+#~ "linii oznacza, że dalsza część linii stanowi komentarz."
+
+#, fuzzy
+#~| msgid "deb [ options ] uri distribution [component1] [component2] [...]"
+#~ msgid "deb [ options ] uri suite [component1] [component2] [...]"
+#~ msgstr "deb [ opcje ] uri dystrybucja [komponent1] [komponent2] [...]"
+
+#~ msgid ""
+#~ "<literal>options</literal> is always optional and needs to be surrounded "
+#~ "by square brackets. It can consist of multiple settings in the form "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>. Multiple settings are separated by spaces. The "
+#~ "following settings are supported by APT (note however that unsupported "
+#~ "settings will be ignored silently):"
+#~ msgstr ""
+#~ "<literal>opcje</literal> nigdy nie są wymagane i powinny być otoczone "
+#~ "przez nawiasy kwadratowe. Mogą się składać z wielu ustawień w formacie "
+#~ "<literal><replaceable>ustawienie</replaceable>=<replaceable>wartość</"
+#~ "replaceable></literal> oddzielonych od siebie znakami spacji. APT "
+#~ "obsługuje następujące ustawienia (a ustawienia nieobsługiwane są "
+#~ "ignorowane bez wypisywania żadnego ostrzeżenia):"
+
+#, fuzzy
+#~| msgid ""
+#~| "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~| "replaceable>,…</literal> can be used to specify for which architectures "
+#~| "information should be downloaded. If this option is not set all "
+#~| "architectures defined by the <literal>APT::Architectures</literal> "
+#~| "option will be downloaded."
+#~ msgid ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> and <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> which can be "
+#~ "used to add/remove architectures from the set which will be downloaded."
+#~ msgstr ""
+#~ "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> może zostać użyte do podania architektur, dla "
+#~ "których będą pobierane informacje o pakietach. Jeśli ta opcja nie jest "
+#~ "ustawiona, będą pobierane informacje dla wszystkich architektur "
+#~ "określonych w opcji konfiguracji <literal>APT::Architectures</literal>."
+
+#~ msgid ""
+#~ "<literal>trusted=yes</literal> can be set to indicate that packages from "
+#~ "this source are always authenticated even if the <filename>Release</"
+#~ "filename> file is not signed or the signature can't be checked. This "
+#~ "disables parts of &apt-secure; and should therefore only be used in a "
+#~ "local and trusted context. <literal>trusted=no</literal> is the opposite "
+#~ "which handles even correctly authenticated sources as not authenticated."
+#~ msgstr ""
+#~ "<literal>trusted=yes</literal> może być użyte do wskazania, że pakiety z "
+#~ "tego źródła są zawsze zautentykowane, nawet jeśli plik <filename>Release</"
+#~ "filename> nie jest podpisany lub nie można sprawdzić podpisu. Wyłącza to "
+#~ "częściowo &apt-secure; i dlatego powinno być używane tylko dla źródeł "
+#~ "lokalnych i zaufanych. Przeciwieństwem tej opcji jest "
+#~ "<literal>trusted=no</literal>, która obsługuje nawet poprawnie "
+#~ "zautentykowane źródła jako niezautentykowane."
+
+#~ msgid "Some examples:"
+#~ msgstr "Kilka przykładów:"
+
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+
+#~ msgid "apt"
+#~ msgstr "apt"
+
+#~ msgid "16 June 1998"
+#~ msgstr "16 czerwca 1998"
+
+#~ msgid "Debian"
+#~ msgstr "Debian"
+
+#~ msgid "NAME"
+#~ msgstr "NAZWA"
+
+#~ msgid "apt - Advanced Package Tool"
+#~ msgstr "apt - Zaawansowane narzędzie zarządzania pakietami"
+
+#~ msgid "SYNOPSIS"
+#~ msgstr "SKŁADNIA"
+
+#~ msgid "B<apt>"
+#~ msgstr "B<apt>"
+
+#~ msgid "DESCRIPTION"
+#~ msgstr "OPIS"
+
+#, fuzzy
+#~| msgid ""
+#~| "APT is a management system for software packages. For normal day to day "
+#~| "package management there are several front-ends available, such as "
+#~| "B<aptitude>(8) for the command line or B<synaptic>(8) for the X Window "
+#~| "System. Some options are only implemented in B<apt-get>(8) though."
+#~ msgid ""
+#~ "For normal day to day package management there are several front-ends "
+#~ "available, such as B<aptitude>(8) for the command line or "
+#~ "B<synaptic>(8) for the X Window System. Some options are only "
+#~ "implemented in B<apt-get>(8) though."
+#~ msgstr ""
+#~ "APT jest systemem zarządzania pakietami oprogramowania. Jest kilka "
+#~ "nakładek przydatnych do codziennego zarządzania pakietami, takich jak "
+#~ "B<aptitude>(8), działające w linii poleceń, lub B<synaptic>(8), "
+#~ "wymagający środowiska X Window. Niemniej jednak niektóre opcje są "
+#~ "dostępne tylko w B<apt-get>(8)."
+
+#~ msgid "SEE ALSO"
+#~ msgstr "ZOBACZ TAKŻE"
+
+#, fuzzy
+#~| msgid ""
+#~| "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~| "B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgid ""
+#~ "B<apt>(8), B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources."
+#~ "list>(5), B<apt_preferences>(5), B<apt-secure>(8)"
+#~ msgstr ""
+#~ "B<apt-cache>(8), B<apt-get>(8), B<apt.conf>(5), B<sources.list>(5), "
+#~ "B<apt_preferences>(5), B<apt-secure>(8)"
+
+#~ msgid "DIAGNOSTICS"
+#~ msgstr "DIAGNOSTYKA"
+
+#~ msgid "apt returns zero on normal operation, decimal 100 on error."
+#~ msgstr ""
+#~ "apt zwraca zero, jeżeli zakończyło się pomyślnie, 100 dziesiętnie w "
+#~ "przypadku błędu."
+
+#~ msgid "BUGS"
+#~ msgstr "BŁĘDY"
+
+#~ msgid "This manpage isn't even started."
+#~ msgstr "Ta strona podręcznika nie jest nawet zaczęta."
+
+#~ msgid ""
+#~ "See E<lt>http://bugs.debian.org/aptE<gt>. If you wish to report a bug in "
+#~ "B<apt>, please see I</usr/share/doc/debian/bug-reporting.txt> or the "
+#~ "B<reportbug>(1) command."
+#~ msgstr ""
+#~ "Patrz E<lt>http://bugs.debian.org/aptE<gt>. Aby wysłać zgłoszenie o "
+#~ "błędzie w programie B<apt>, przeczytaj I</usr/share/doc/debian/bug-"
+#~ "reporting.txt> lub użyj polecenia B<reportbug>(1)."
+
+#~ msgid "AUTHOR"
+#~ msgstr "AUTOR"
+
+#~ msgid "apt was written by the APT team E<lt>apt@packages.debian.orgE<gt>."
+#~ msgstr ""
+#~ "apt zostało napisane przez zespół APT E<lt>apt@packages.debian.orgE<gt>."
+
+#~ msgid "Package resource list for APT"
+#~ msgstr "Lista zasobów pakietów dla APT"
+
+#~ msgid ""
+#~ "The package resource list is used to locate archives of the package "
+#~ "distribution system in use on the system. At this time, this manual page "
+#~ "documents only the packaging system used by the Debian system. This "
+#~ "control file is <filename>/etc/apt/sources.list</filename>."
+#~ msgstr ""
+#~ "Lista zasobów pakietów jest używana do zlokalizowania archiwów pakietów "
+#~ "używanego systemu dystrybucji pakietów. Obecnie ta strona podręcznika "
+#~ "opisuje tylko system pakietów używany w systemie Debian. Plikiem "
+#~ "kontrolnym jest <filename>/etc/apt/sources.list</filename>."
+
+#~ msgid ""
+#~ "The source list is designed to support any number of active sources and a "
+#~ "variety of source media. The file lists one source per line, with the "
+#~ "most preferred source listed first. The format of each line is: "
+#~ "<literal>type uri args</literal> The first item, <literal>type</literal> "
+#~ "determines the format for <literal>args</literal>. <literal>uri</literal> "
+#~ "is a Universal Resource Identifier (URI), which is a superset of the more "
+#~ "specific and well-known Universal Resource Locator, or URL. The rest of "
+#~ "the line can be marked as a comment by using a #."
+#~ msgstr ""
+#~ "Listę źródeł zaprojektowano tak, aby obsługiwała dowolną liczbę aktywnych "
+#~ "źródeł i różnorodne lokalizacje źródeł. Każde źródło jest wymienione w "
+#~ "osobnej linii, zaczynając od źródeł najbardziej preferowanych. Format "
+#~ "każdej linii jest następujący: <literal>typ uri argumenty</literal>. "
+#~ "Pierwsza pozycja, <literal>typ</literal>, wyznacza format "
+#~ "<literal>argumentów</literal>. <literal>uri</literal> jest uniwersalnym "
+#~ "identyfikatorem zasobu (ang. Universal Resource Identifier - URI), który "
+#~ "jest nadzbiorem dobrze znanego uniwersalnego lokalizatora zasobu (ang. "
+#~ "Universal Resource Locator - URL). Pozostała część linii może być "
+#~ "komentarzem, jeśli zaczyna się od znaku \"#\"."
+
+#~ msgid ""
+#~ "<literal>gencaches</literal> performs the same operation as <command>apt-"
+#~ "get check</command>. It builds the source and package caches from the "
+#~ "sources in &sources-list; and from <filename>/var/lib/dpkg/status</"
+#~ "filename>."
+#~ msgstr ""
+#~ "<literal>gencaches</literal> wykonuje te same operacje, co <command>apt-"
+#~ "get check</command>. Buduje bufor pakietów oraz źródeł pakietów na "
+#~ "podstawie źródeł wymienionych w &sources-list; oraz pliku <filename>/var/"
+#~ "lib/dpkg/status</filename>."
+
+#~ msgid ""
+#~ "Unless the <option>-h</option>, or <option>--help</option> option is "
+#~ "given one of the commands below must be present. <placeholder type="
+#~ "\"variablelist\" id=\"0\"/>"
+#~ msgstr ""
+#~ "Jedno z poniższych poleceń musi być użyte, chyba że została podana opcja "
+#~ "<option>-h</option> lub <option>--help</option>. <placeholder type="
+#~ "\"variablelist\" id=\"0\"/>"
+
+#~ msgid "APT package handling utility -- cache manipulator"
+#~ msgstr "Narzędzie zarządzania pakietami APT -- manipulator bufora"
+
+#~ msgid ""
+#~ "<literal>add</literal> adds the named package index files to the package "
+#~ "cache. This is for debugging only."
+#~ msgstr ""
+#~ "<literal>add</literal> dodaje pliki zawierające indeks nazw pakietów do "
+#~ "bufora. Ta opcja jest przydatna głównie w celu odpluskwiania."
+
+#~ msgid "Also install recommended packages."
+#~ msgstr "Instaluje również rekomendowane pakiety."
+
+#~ msgid "Do not install recommended packages."
+#~ msgstr "Nie instaluje rekomendowanych pakietów."
+
+#~ msgid ""
+#~ "Uses HTTP to access the archive at nonus.debian.org, under the debian-non-"
+#~ "US directory."
+#~ msgstr ""
+#~ "Użycie HTTP do uzyskania dostępu do archiwum na komputerze nonus.debian."
+#~ "org, w katalogu debian-non-US."
+
+#~ msgid ""
+#~ "Status list of auto-installed packages. Configuration Item: "
+#~ "<literal>Dir::State</literal> sets the path to the "
+#~ "<filename>extended_states</filename> file."
+#~ msgstr ""
+#~ "Lista stanów pakietów zainstalowanych automatycznie. Pozycja w pliku "
+#~ "konfiguracyjnym: <literal>Dir::State</literal> ustawia ścieżkę do pliku "
+#~ "o nazwie <filename>extended_states</filename>."
diff --git a/doc/po/pt.po b/doc/po/pt.po
new file mode 100644
index 0000000..66622ea
--- /dev/null
+++ b/doc/po/pt.po
@@ -0,0 +1,13093 @@
+# Translation of apt manpages to European Portuguese
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the apt package.
+#
+# Américo Monteiro <a_monteiro@gmx.com>, 2014 - 2017, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.8.0\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-05-21 14:35+0200\n"
+"PO-Revision-Date: 2019-04-07 22:02+0000\n"
+"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n"
+"Language-Team: Portuguese <>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>Equipa do APT</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>página de bugs do APT</ulink>. \n"
+" Se deseja reportar um bug no APT, por favor veja\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> ou o\n"
+" comando &reportbug;.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Autor</title>\n"
+" <para>APT foi escrito pela equipa do APT <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Mostra um sumário curto da utilização.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Mostra a versão do programa.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Ficheiro de Configuração; Especifica o ficheiro de \n"
+" configuração a usar. \n"
+" O programa irá ler o ficheiro de configuração predefinido e depois este \n"
+" ficheiro de configuração. Se as definições de configuração precisarem de \n"
+" ser definidas antes, os ficheiros de configuração predefinidos são \n"
+" analisados especificando um ficheiro com a variável de ambiente \n"
+" <envar>APT_CONFIG</envar>. Veja &apt-conf; para informação de sintaxe.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Define uma Opção de Configuração; Isto irá definir uma opção\n"
+" de configuração arbitrária. A sintaxe é <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> e <option>--option</option> podem ser usadas várias\n"
+" vezes para definir opções diferentes.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>Todas as opções de linha de comandos podem ser definidas usando o ficheiro de configuração, as\n"
+" descrições indicam a opção de configuração a definir. Para opções\n"
+" booleanas você pode sobre por o ficheiro de configuração usando algo como \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" ou várias outras variantes.\n"
+" </para>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>Ficheiro de configuração do APT.\n"
+" Item de Configuração: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>Ficheiros de configuração fragmentados do APT.\n"
+" Item de Configuração: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Área de armazenamento para ficheiros de pacotes obtidos.\n"
+" Item de Configuração: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Área de armazenamento para ficheiros de pacotes em curso.\n"
+" Item de Configuração: <literal>Dir::Cache::Archives</literal> será implicitamente acrescentado (<filename>partial</filename>)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Ficheiro de preferências de versão.\n"
+" Isto é onde você deve especificar &quot;pinning&quot;,\n"
+" isto é, uma preferência para obter certos pacotes\n"
+" A partir de uma fonte separada\n"
+" ou a partir duma versão diferente de uma distribuição.\n"
+" Item de Configuração: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>Ficheiros fragmentados para as preferências de versão.\n"
+" Item de Configuração: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Localizações de onde obter pacotes.\n"
+" Item de Configuração: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>Ficheiros fragmentados para localizações de onde obter pacotes.\n"
+" Item de Configuração: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Área de armazenamento para informação de estado para cada recurso de pacote especificado em\n"
+" &sources-list;\n"
+" Tem de Configuração: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Área de armazenamento para informação de estado em trânsito.\n"
+" Item de Configuração: <literal>Dir::State::Lists</literal> será implicitamente acrescentado (<filename>partial</filename>)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Chaveiro de chaves de confiança locais, as novas chaves serão adicionadas aqui.\n"
+" Item de Configuração: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>Fragmentos de ficheiro para as chaves de confiança, chaveiros adicionais podem\n"
+" ser armazenados aqui (por outros pacotes ou pelo administrador).\n"
+" Item de Configuração <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Lista de estado de pacotes auto-instalados.\n"
+" Item de Configuração: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRADUÇÂO\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-holder \"\n"
+" A tradução Portuguesa foi feita por Américo Monteiro <email>a_monteiro@netcabo.pt</email> de 2009 a 2012.\n"
+" A tradução foi revista pela equipa de traduções portuguesas da Debian <email>traduz@debianpt.org</email>.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+"<!-- TRANSLATOR: É permitido que uma tradução tenha 20% de strings não traduzidas/aproximadas\n"
+" num manual publicado os parágrafos novos/modificados irão talvez aparecer em inglês\n"
+" no manual gerado. Isto está aqui para dizer ao leitor que isto não\n"
+" é um erro do tradutor - obviamente o objectivo é que pelo menos para as versões estáveis\n"
+" esta declaração não é necessária. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note que este documento traduzido pode conter partes não traduzidas.\n"
+" Isto é feito propositadamente, para evitar perdas de conteúdo quando a\n"
+" tradução está atrasada relativamente ao conteúdo original.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como -o=config_string ex. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como -c=config_file ex. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"ficheiro_de_configuração\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como -t=target_release ou pkg/target_release ex. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release \"lançamento-"
+"alvo\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como -a=architecture ex. -a=armel --> <!ENTITY "
+"synopsis-architecture \"arquitectura\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como apt-get install pkg ex. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como pkg=pkg_version_number ex. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"número_de_versão_do_pacote\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como apt-cache pkgnames prefix ex. apt-cache pkgnames "
+"apt --> <!ENTITY synopsis-prefix \"prefixo\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como apt-cache search regex ex. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como apt-cdrom -d=cdrom_mount_point ex. apt-cdrom -d=/"
+"media/cdrom --> <!ENTITY synopsis-cdrom-mount \"ponto_de_montagem-do_cdrom\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como apt-extracttemplates -t=temporary_directory ex. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"directório_temporário\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"nome_do_ficheiro\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como parâmetro para apt-ftparchive ex. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"caminho"
+"\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como parâmetro para apt-ftparchive ex. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"ficheiro_de_sobreposição\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como parâmetro para apt-ftparchive ex. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"prefixo_de_caminho\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como parâmetro para apt-ftparchive ex. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"secção\">"
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+"<!-- TRANSLATOR: usado como id de chave de exportação do apt-key ex. apt-key "
+"export 473041FA --> <!ENTITY synopsis-keyid \"id_de_chave\">"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr "8"
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr "APT"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr "interface de linha de comandos"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Description"
+msgstr "Descrição"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+"O <command>apt</command> disponibiliza uma interface de linha de comandos de "
+"alto nível para o sistema de gestão de pacotes. Destina-se a ser uma "
+"interface para utilizador final e dispõe algumas opções mais apropriadas "
+"para utilização interactiva por predefinição em comparação com ferramentas "
+"especializadas do APT como o &apt-get; e o &apt-cache;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+"Muito como o próprio <command>apt</command>, o seu manual destina-se a ser "
+"uma interface de utilizador final e como tal apenas menciona os comandos "
+"mais usados e parte das opções para não duplicar informação em múltiplos "
+"locais e em parte para evitar saturar os leitores com uma cornucópia de "
+"opções e detalhes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr "apt-get"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+"<option>update</option> é usado para descarregar informação de pacotes de "
+"todas as fontes configuradas. Outros comandos operam com estes dados para , "
+"por ex, executar actualizações de pacotes ou procurar e mostrar detalhes "
+"acerta de todos os pacotes disponíveis para instalação."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+"<literal>upgrade</literal> é usado para instalar actualizações disponíveis "
+"de todos os pacotes actualmente instalados no sistema a partir das fontes "
+"configuradas via &sources-list;. Se necessário para satisfazer dependências "
+"serão instalados novos pacotes, mas pacotes existentes nunca serão "
+"removidos. Se a actualização de um pacote necessitar da remoção de um pacote "
+"instalado, a actualização deste pacote não será executada."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+"<literal>full-upgrade</literal> executa a função de upgrade mas irá remover "
+"pacotes actualmente instalados se tal for necessário para actualizar o "
+"sistema como um todo."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ","
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+"Executa a acção requisitada em um ou mais pacotes especificados via &regex;, "
+"&glob; ou por correspondência exacta. A acção requisitada pode ser "
+"sobreposta para pacotes específicos ao acrescentar um mais (+) ao nome do "
+"pacote para instalar esse pacote ou um menos (-) para o remover."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+"Pode ser seleccionada para instalação uma versão específica de um pacote ao "
+"adicionar ao nome do pacote o símbolo igual (=) e a versão do pacote a "
+"seleccionar. Alternativamente a versão de um lançamento específico pode ser "
+"seleccionada ao adicionar ao nome do pacote uma barra de divisão (/) e o "
+"nome de código (&debian-stable-codename;, &debian-testing-codename;, sid …) "
+"ou o nome de suite (stable, testing, unstable). Isto irá também seleccionar "
+"versões a partir deste lançamento para as dependências deste pacote se "
+"necessário para satisfazer o pedido."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+"Remover um pacote remove todos os dados empacotados, mas deixa ficar "
+"ficheiros (modificados) de configuração do utilizador geralmente pequenos, "
+"para o caso da remoção ter sido um acidente. Apenas fazer um pedido de "
+"instalação para o pacote removido acidentalmente irá restaurar a sua função "
+"como estava anteriormente. Por outro lado você pode ver-se livre desses "
+"restos ao chamar <command>purge</command> mesmo em pacotes já removidos. "
+"Note que isto não afecta nenhuns dados ou configurações armazenados no seu "
+"directório home pessoal."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+"<literal>autoremove</literal> é usado para remover pacotes que foram "
+"instalados automaticamente para satisfazer dependências de outros pacotes e "
+"que já não são necessários porque as dependências alteraram ou porque os "
+"pacotes que precisavam delas foram entretanto removidos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+"Você deve verificar que a lista não inclua aplicações de que passou a gostar "
+"apesar de terem sido instaladas apenas como uma dependência de outro pacote. "
+"Você pode marcar tal pacote como instalado manualmente ao usar &apt-mark;. "
+"Os pacotes que você instalou explicitamente via comando <command>install</"
+"command> também nunca são propostos para remoção automática."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+"<option>search</option> pode ser usado para procurar por termo(s) &regex; "
+"fornecidos na lista de pacotes disponíveis e apresentar correspondências. "
+"Isto pode, por exemplo, ser útil se procura pacotes com uma característica "
+"específica. Se está à procura de um pacote que inclua um ficheiro específico "
+"tente o &apt-file;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+"Mostra informação acerca do(s) pacote(s) indicados incluindo as suas "
+"dependências, tamanho de instalação e de download, fontes a partir das quais "
+"o pacote está disponível, a descrição do conteúdo dos pacotes e muito mais. "
+"Pode, por exemplo, ser útil para ver esta informação antes de permitir ao "
+"&apt; remover um pacote ou enquanto procura por novos pacotes para instalar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr "(work-in-progress)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+"<option>list</option> é de certa maneira semelhante a <command>dpkg-query --"
+"list</command> pois pode mostrar uma lista de pacotes que satisfaçam certos "
+"critérios. Suporta padrões &glob; para coincidir com nomes de pacotes assim "
+"como opções para listar instalados (<option>--installed</option>), "
+"actualizáveis (<option>--upgradeable</option>) ou todas as versões "
+"disponíveis (<option>--all-versions</option>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+"<literal>edit-sources</literal> permite-lhe editar os seus ficheiros "
+"&sources-list; no seu editor de texto preferido enquanto também "
+"disponibiliza verificações básicas aos mesmos."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr "Utilização de Scripts e Diferenças com Outras Ferramentas do APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+"A linha de comandos do &apt; foi desenhada como ferramenta de utilizador "
+"final e pode variar o comportamento entre versões. Apesar de tentar não "
+"perder a compatibilidade com versões anteriores isto não é garantido se uma "
+"alteração parecer benéfica para uso interactivo."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+"Todas as funcionalidades do &apt; estão também disponíveis em ferramentas "
+"dedicadas ao APT como &apt-get; e &apt-cache;. O &apt; apenas varia o valor "
+"predefinido de algumas opções (veja &apt-conf; e especialmente o âmbito "
+"Binário). Portanto você deverá preferir usar estes comandos (potencialmente "
+"com algumas opções adicionais activas) nos seus scripts pois eles mantêm "
+"compatibilidade com versões anteriores sempre que possível."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+msgid "See Also"
+msgstr "Veja também"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, O guia de "
+"utilizadores do The APT em &guidesdir;, &apt-preferences;, o Howto do APT."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr "Diagnóstico"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt</command> devolve zero na operação normal, 100 decimal em erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr ""
+"Utilitário de manuseamento de pacotes do APT -- interface de linha de "
+"comandos"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+"<command>apt-get</command> é a ferramenta de linha de comandos para lidar "
+"com pacotes, e pode ser considerada o \"back-end\" dos utilizadores para "
+"outras ferramentas que usam a biblioteca APT. Existem várias interfaces "
+"\"front-end\" como o &aptitude;, &synaptic; e &wajig;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+"A menos que a opção <option>-h</option>, ou <option>--help</option> seja "
+"fornecida, um dos comandos abaixo têm que estar presentes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+"<literal>update</literal> é usado para re-sincronizar os ficheiros de "
+"índices de pacotes a partir das suas fontes. Os índices dos pacotes "
+"disponíveis são obtidos a partir das localizações em <filename>/etc/apt/"
+"sources.list</filename>. Por exemplo, quando se usa um arquivo Debian, este "
+"comando recolhe e analisa os ficheiros <filename>Packages.gz</filename> para "
+"que a informação sobre pacotes novos e actualizados fique disponível. Um "
+"<literal>update</literal> deve ser sempre executado antes de um "
+"<literal>upgrade</literal> ou <literal>dist-upgrade</literal>. Por favor "
+"note que a medição do processo total ira estar incorrecta pois o tamanho dos "
+"ficheiros de pacotes não pode ser conhecido com antecedência."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+"<literal>upgrade</literal> é usado para instalar as versões mais recentes de "
+"todos os pacotes presentemente instalados no sistema a partir das fontes "
+"enumeradas em <filename>/etc/apt/sources.list</filename>. Os pacotes "
+"presentemente instalados com versões novas são obtidos e instalados; em "
+"nenhumas circunstâncias os pacotes presentemente instalados serão removidos, "
+"nem pacotes já instalados serão obtidos e instalados.Os pacotes "
+"presentemente instalados com novas versões e que não possam ser actualizados "
+"sem alterarem o estado da instalação de outro pacote serão deixados na "
+"versão presente. Deve ser executado primeiro um <literal>update</literal> "
+"para que o <command>apt-get</command> fique a saber que estão disponíveis "
+"novas versões de pacotes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+"<literal>dist-upgrade</literal> adicionalmente a executar a função do "
+"<literal>upgrade</literal>, também lida inteligentemente com as alterações "
+"de dependências com as novas versões de pacotes; o <command>apt-get</"
+"command> tem um sistema de resolução de conflitos 'inteligente', que irá "
+"tentar actualizar os pacotes mais importantes a custo dos pacotes menos "
+"importantes, caso necessário. Portanto, o comando <literal>dist-upgrade</"
+"literal> pode remover alguns pacotes. O ficheiro <filename>/etc/apt/sources."
+"list</filename> contém uma lista de localizações de onde obter os ficheiros "
+"de pacotes desejados. Veja também &apt-preferences; para um mecanismo para "
+"sobrepor as definições gerais em pacotes individuais."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+"<literal>dselect-upgrade</literal> é usado em conjunto com o front-end de "
+"pacotes Debian tradicional, &dselect;. <literal>dselect-upgrade</literal> "
+"segue as alterações feitas pelo &dselect; ao campo <literal>Status</literal> "
+"dos pacotes disponíveis, e executa as acções necessárias para realizar esse "
+"estado (por exemplo, a remoção de pacotes antigos e a instalação de novos)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+"<literal>install</literal> é seguido por um ou mais pacotes desejados para "
+"instalação ou actualização. Cada pacote é um nome de pacote, não um nome de "
+"ficheiro completamente qualificado (por exemplo, num sistema Debian GNU/"
+"Linux, <package>apt-utils</package> seria o argumento fornecido e não "
+"<filename>apt-utils_&apt-product-version;_amd64.deb</filename>). Todos os "
+"pacotes necessários pelos pacotes especificados para instalação irão também "
+"ser obtidos e instalados. O ficheiro <filename>/etc/apt/sources.list</"
+"filename> é usado para localizar os pacotes desejados. Se for acrescentado "
+"um sinal menos (-) ao nome do pacote (sem nenhum espaço a separar), o pacote "
+"identificado irá ser removido se estiver instalado. À semelhança, um sinal "
+"mais (+) pode ser usado para designar um pacote a instalar. Estas últimas "
+"funcionalidades podem ser usadas para sobrepor decisões feitas pelo sistema "
+"de resolução de conflitos do apt-get."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+"Pode ser seleccionada para instalação uma versão específica de um pacote ao "
+"continuar o nome do pacote com um igual (=) e a versão do pacote a "
+"seleccionar. Isto irá fazer com que essa versão seja localizada e "
+"seleccionada para instalação. Alternativamente pode ser seleccionada uma "
+"distribuição específica ao continuar o nome do pacote com uma slash (/) e a "
+"versão da distribuição ou o nome de Arquivo (stable, testing, unstable)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+"Ambos os mecanismos de selecção de versão podem regredir pacotes (downgrade) "
+"e devem ser usados com cuidado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+"Este é também o objectivo a usar se deseja actualizar um ou mais pacotes já "
+"instalados sem actualizar todos os pacotes que tem no seu sistema. Ao "
+"contrário do objectivo \"upgrade\", o qual instala as versões mais recentes "
+"de todos os pacotes presentemente instalados, o \"install\" irá instalar a "
+"versão mais recente apenas dos pacotes especificados. Simplesmente forneça o "
+"nome do(s) pacote(s) que deseja actualizar, e se estiver disponível uma nova "
+"versão, ela ( e as suas dependências, como descrito em cima) serão "
+"descarregadas e instaladas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+"Finalmente, o mecanismo &apt-preferences; permite-lhe criar uma política de "
+"instalação alternativa para pacotes individuais."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+"Se nenhum pacote coincidir com a expressão fornecida e a expressão conter um "
+"de '.', '?' ou '*' então é assumido ser uma expressão regular POSIX, e é "
+"aplicada a todos os nomes de pacotes da base de dados. Quaisquer "
+"correspondências são então instaladas (ou removidas). Note que a "
+"correspondência é feita por substring, portanto 'lo.*' corresponde a 'how-"
+"lo' e 'lowest'. Se isto for indesejável, ancore a expressão regular com a "
+"caractere '^' ou '$', para criar uma expressão regular mais específica."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr ""
+"<literal>reinstall</literal> é um alias para <literal>install --reinstall</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+"<literal>remove</literal> é idêntico a <literal>install</literal> à "
+"excepção que os pacotes são removidos em vez de instalados. Note que remover "
+"um pacote deixa os seus ficheiros de configuração no sistema. Se um sinal "
+"mais (+) for acrescentado ao nome do pacote (sem nenhum espaço a separar), o "
+"pacote identificado será instalado em vez de removido."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+"<literal>purge</literal> é idêntico ao <literal>remove</literal> com a "
+"excepção que os pacotes são removidos e purgados (quaisquer ficheiros de "
+"configuração são também apagados)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+"<literal>source</literal> faz com que o <command>apt-get</command> procure "
+"pacotes fonte. O APT irá examinar os pacotes disponíveis para decidir qual "
+"pacote fonte obter. Irá então encontrar e descarregar para o directório "
+"actual a versão disponível mais recente desse pacote fonte enquanto respeita "
+"o lançamento predefinido, definido com a opção <literal>APT::Default-"
+"Release</literal>, a opção <option>-t</option> ou por pacote com a sintaxe "
+"<literal>pkg/release</literal>, se possível."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+"Os argumentos são interpretados como nomes de pacotes binários e de fonte. "
+"Veja a opção <option>--only-source</option> se desejar alterar isso."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+"Os pacotes fonte são acompanhados em separado dos pacotes binários via "
+"linhas <literal>deb- src</literal> no ficheiro &sources-list;. Isto quer "
+"dizer que você precisa de adicionar uma dessas linhas para cada repositório "
+"de onde deseja obter fontes; caso contrário, irá provavelmente obter versões "
+"de fonte erradas (muito antigas/muito novas) ou mesmo nenhuma."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+"Se for especificada a opção <option>--compile</option> então o pacote irá "
+"ser compilado para um binário .deb usando <command>dpkg-buildpackage</"
+"command> para a arquitectura definida pela opção <command>--host-"
+"architecture</command>. Se for especificado <option>--download-only</option> "
+"então o pacote fonte não será desempacotado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+"Uma versão fonte específica pode ser obtida ao pós-fixar o nome da fonte com "
+"um igual (=) e depois a versão a procurar, semelhante ao mecanismo usado "
+"para os ficheiros de pacotes. Isto activa a correspondência exacta do pacote "
+"fonte, nome e versão, activando implicitamente a opção <literal>APT::Get::"
+"Only-Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+"Note que os pacotes fonte não são instalados e acompanhados na base de dados "
+"do <command>dpkg</command> como os pacotes binários; eles são simplesmente "
+"descarregados para o directório actual, como tarballs fonte."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+"<literal>build-dep</literal> faz o apt-get instalar/remover pacotes numa "
+"tentativa de satisfazer dependências de compilação para um pacote fonte. Por "
+"predefinição, as dependências são satisfeitas para compilar o pacote "
+"nativamente. Se desejado, em vez disso, pode ser especificada uma "
+"arquitectura-anfitriã com a opção <option>--host-architecture</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+"Os argumentos são interpretados como nomes de pacotes binários ou de fonte. "
+"Veja a opção <option>--only-source</option> se desejar alterar isso."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+"<literal>check</literal> é uma ferramenta de diagnóstico; actualiza a cache "
+"de pacotes e verifica por dependências quebradas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+"<literal>download</literal> irá descarregar o pacote binário dado para o "
+"directório actual."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+"<literal>clean</literal> limpa o repositório local dos ficheiros de pacotes "
+"obtidos. Remove tudo excepto o ficheiro lock de <filename>&cachedir;/"
+"archives/</filename> e <filename>&cachedir;/archives/partial/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr "(e o"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr "alias desde 1.1)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+"Tal como o <literal>clean</literal>, <literal>autoclean</literal> limpa o "
+"repositório local de ficheiros de pacotes obtidos. A diferença é que apenas "
+"remove ficheiros de pacotes que já não podem ser mais descarregados, e são "
+"na maioria dos casos inúteis. Isto permite a manutenção de uma cache durante "
+"um longo período sem que ela cresça descontroladamente. A opção de "
+"configuração <literal>APT::Clean-Installed</literal> irá prevenir que "
+"pacotes instalados sejam apagados se estiver definida para 'off'."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+"<literal>autoremove</literal> é usado para remover pacotes que foram "
+"instalados automaticamente para satisfazer dependências de outros pacotes e "
+"que já não são necessários."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+"<literal>changelog</literal> tenta descarregar o registo de alterações de um "
+"pacote e mostra-o através do <command>sensible-pager</command>. Por "
+"predefinição mostra o registo de alterações da versão que está instalada. No "
+"entanto, você pode especificar as mesmas opções que são para o comando "
+"<option>install</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+"Mostra por predefinição uma listagem em formato deb822 de informação acerca "
+"de todos os ficheiros de dados (os alvos dos índices) que um <command>apt-"
+"get update</command> deveria descarregar. Suporta uma opção <option>--"
+"format</option> para ir modificando o formato do resultado assim que vai "
+"aceitando linhas do resultado predefinido para ir filtrando a informação. O "
+"comando é usado principalmente como uma interface para ferramentas externas "
+"que funcionam com o APT para obter informação assim como os nomes de "
+"ficheiros para os ficheiros descarregados para que os possa usar também em "
+"vez de os descarregar outra vez por sua conta. Não existe aqui documentação "
+"detalhada e esta pode ser encontrada no ficheiro &apt-acquire-additional-"
+"files; existente no pacote <package>apt-doc</package>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr "opções"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+"Não considera pacotes recomendados como dependências para instalação. Item "
+"de Configuração: <literal>APT::Install-Recommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+"Considera pacotes sugeridos como uma dependência para instalação. Item de "
+"Configuração: <literal>APT::Install-Suggests</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+"Apenas descarrega; os ficheiros pacotes são apenas obtidos, não são "
+"desempacotados nem instalados. Item de Configuração: <literal>APT::Get::"
+"Download-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+"Corrige; tenta corrigir um sistema com dependências quebradas no lugar. Esta "
+"opção, quando usada com install/remove, pode omitir quaisquer pacotes para "
+"permitir ao APT deduzir uma solução provável. Se forem especificados "
+"pacotes, este têm de corrigir completamente o problema. A opção é por vezes "
+"necessária quando se corre o APT pela primeira vez. O próprio APT não "
+"permite que existam num sistema dependências de pacotes quebradas. É "
+"possível que uma estrutura de dependências de um sistema esteja tão "
+"corrompida ao ponto de requerer intervenção manual (o que normalmente "
+"significa usar o <command>dpkg --remove</command> para eliminar alguns dos "
+"pacotes ofensivos). O uso desta opção juntamente com <option>-m</option> "
+"pode produzir um erro em algumas situações. Item de Configuração: "
+"<literal>APT::Get::Fix-Broken</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+"Ignora pacotes em falta; Se pacotes não podem ser obtidos ou falham a "
+"verificação de integridade após obtenção (ficheiros de pacotes corrompidos), "
+"retêm esses pacotes e manuseia o resultado. Usar esta opção em conjunto com "
+"<option>-f</option> pode produzir erros em algumas situações. Se um pacote "
+"for seleccionado para instalação (particularmente se for mencionado na linha "
+"de comandos) e não pode ser descarregado estão será segurado em silêncio. "
+"Item de Configuração: <literal>APT::Get::Fix-Missing</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+"Desactiva a descarga de pacotes. Isto é melhor ser usado com <option>--"
+"ignore-missing</option> para forçar o APT a usar os .debs que já foram "
+"descarregados. Item de Configuração: <literal>APT::Get::Download</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+"Silencioso; produz saída apropriada para registar em log, omitindo "
+"indicadores de progresso. Mais q's irá resultar em mais silêncio até o "
+"máximo de 2. Você também pode usar <option>-q=#</option> para definir o "
+"nível de silêncio, sobrepondo o ficheiro de configuração. Note que o "
+"silêncio nível 2 implica <option>-y</option>, você nunca deve usar -qq sem "
+"um modificador de 'nenhuma acção' tal como -d, --print-uris ou -s pois o APT "
+"pode decidir fazer algo que você não esperava. Item de Configuração: "
+"<literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+"Nenhuma acção; executa uma simulação de eventos que deveriam ocorrer com "
+"base no estado actual do sistema mas não muda realmente o sistema. O "
+"bloqueio será desactivado (<option>Debug::NoLocking</option>) para que o "
+"estado do sistema possa mudar enquanto o <command>apt-get</command> está a "
+"correr. As simulações também podem ser executadas por utilizadores não-root "
+"os quais podem não ter acesso de leitura a todas as configurações do apt "
+"distorcendo a simulação. Também é mostrada por predefinição uma nota "
+"expressando este aviso aos utilizadores não-root. (<option>APT::Get::Show-"
+"User-Simulation-Note</option>). Item de Configuração: <literal>APT::Get::"
+"Simulate</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+"As simulações escrevem uma série de linhas cada uma representando uma "
+"operação do <command>dpkg</command>: configurar (<literal>Conf</literal>), "
+"remover (<literal>Remv</literal>) ou desempacotar (<literal>Inst</literal>). "
+"Parêntesis rectos ([]) indicam pacotes quebrados e parêntesis rectos vazios "
+"indicam quebras que não têm consequência (raro)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+"Responde sim automaticamente aos avisos; assume \"yes\" como resposta a "
+"todos os avisos e corre não-interactivamente. Se uma situação indesejável "
+"ocorrer, tal como alterar um pacote segurado, tentar instalar um pacote não "
+"autenticado ou remover um pacote essencial, então o <literal>apt-get</"
+"literal> irá abortar. Item de Configuração: <literal>APT::Get::Assume-Yes</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+"Resposta \"Não\" automática a todos os avisos. Item de Configuração: "
+"<literal>APT::Get::Assume-No</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+"Não mostra uma lista de todos os pacotes que estão prestes a ser "
+"actualizados. Item de Configuração: <literal>APT::Get::Show-Upgraded</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+"Mostra as versões completas para pacotes actualizados e instalados. Item de "
+"Configuração: <literal>APT::Get::Show-Versions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+"Esta opção controla a arquitectura para que os pacotes são compilados pelo "
+"<command>apt-get source --compile</command> e como as dependências cruzadas "
+"de compilação são satisfeitas. Por predefinição não está activa o que "
+"significa que a arquitectura anfitriã é a mesma que a arquitectura de "
+"compilação (a qual é definida por <literal>APT::Architecture</literal>). "
+"item de Configuração: <literal>APT::Get::Host-Architecture</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+"Esta opção controla perfis de compilação activados pelos quais um pacote "
+"fonte é compilado por <command>apt-get source --compile</command> e como as "
+"dependências de compilação são satisfeitas. Por predefinição, nenhum perfil "
+"de compilação está activo. Podem ser activados ao mesmo tempo mais do que um "
+"perfil de compilação ao concatená-los com uma vírgula. Item de configuração: "
+"<literal>APT::Build-Profiles</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+"Compila pacotes fonte após os descarregar. Item de Configuração: "
+"<literal>APT::Get::Compile</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+"Ignora pacotes retidos; Isto faz com que o <command>apt-get</command> ignore "
+"a retenção de um pacote. Isto pode ser útil em conjunto com <literal>dist-"
+"upgrade</literal> para sobrepor um grande número de retenções não desejadas. "
+"Item de Configuração: <literal>APT::Ignore-Hold</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+"Permite a instalação de novos pacotes quando usado em conjunto com "
+"<literal>upgrade</literal>. Isto é útil se a actualização de um pacote "
+"instalado requerer que sejam instaladas novas dependências. Em vez de reter "
+"o pacote, o <literal>upgrade</literal>irá actualizar o pacote e instalar as "
+"novas dependências. Note que <literal>upgrade</literal> com esta opção nunca "
+"irá remover pacotes, apenas permitir adicionar novos. Item de configuração: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+"Não actualiza pacotes; Quando usado em conjunto com <literal>install</"
+"literal>, o <literal>no-upgrade</literal> irá prevenir que pacotes sejam "
+"actualizados na linha de comandos se estes já estiverem instalados. Item de "
+"Configuração: <literal>APT::Get::Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+"Não instala pacotes novos; quando usado em conjunto com <literal>install</"
+"literal>, <literal>only-upgrade</literal> irá instalar apenas actualizações "
+"para pacotes já instalados e ignorar pedidos para instalar novos pacotes. "
+"Item de Configuração: <literal>APT::Get::Only-Upgrade</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+"Esta é uma opção perigosa que irá fazer com que o apt continue sem avisar "
+"quando está a instalar versões anteriores (downgrades) Não deve ser usado "
+"excepto em situações muito especiais. Usá-lo pode potencialmente destruir o "
+"seu sistema! Item de Configuração: <literal>APT::Get::allow-downgrades</"
+"literal>. introduzido no APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+"Força o sim; Esta é uma opção perigosa que irá fazer com que o apt continue "
+"sem avisar quando está a remover coisas essenciais. Não deve ser usado "
+"excepto em situações muito especiais. Usá-lo pode potencialmente destruir o "
+"seu sistema! Item de Configuração: <literal>APT::Get::allow-remove-"
+"essential</literal>. Introduzido no APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+"Força o sim; Esta é uma opção perigosa que irá fazer com que o apt continue "
+"sem avisar se estiver a alterar pacotes segurados. Não deve ser usado "
+"excepto em situações muito especiais. Usá-lo pode destruir potencialmente o "
+"seu sistema! Item de Configuração: <literal>APT::Get::allow-change-held-"
+"packages</literal>. Introduzido em APT 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+"Força o sim; Esta é uma opção perigosa que irá fazer com que o apt continue "
+"sem avisar quando está a fazer algo potencialmente prejudicial. Não deve ser "
+"usado excepto em situações muito especiais. Usar o <literal>force-yes</"
+"literal> pode destruir potencialmente o seu sistema! Item de Configuração: "
+"<literal>APT::Get::force-yes</literal>. Isto está descontinuado e foi "
+"substituído por <option>--allow-unauthenticated</option> , <option>--allow-"
+"downgrades</option> , <option>--allow-remove-essential</option> , <option>--"
+"allow-change-held-packages</option> em 1.1."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+"Ao invés de ir buscar os ficheiros para instalar, escreve os seus URIs. Cada "
+"URI irá ter o caminho, o nome de ficheiro de destino, o tamanho e o hash MD5 "
+"esperado. Note que o nome de ficheiro a escrever nem sempre irá condizer com "
+"o nome do ficheiro no site remoto! Isto também funciona com os comandos "
+"<literal>source</literal> e <literal>update</literal>. Quando usado com o "
+"comando <literal>update</literal> o MD5 e o tamanho não são incluídos, e "
+"cabe ao utilizador descomprimir quaisquer ficheiros comprimidos. Item de "
+"Configuração: <literal>APT::Get::Print-URIs</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+"Usa purgar em vez de remoção para tudo o que seja removido. Um asterisco (\"*"
+"\") será mostrado junto dos pacotes que estão agendados para serem purgados. "
+"<option>remove --purge</option> é equivalente ao comando <option>purge</"
+"option>. Item de Configuração: <literal>APT::Get::Purge</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+"Re-instala pacotes que já estão instalados e na versão mais recente. Item de "
+"Configuração: <literal>APT::Get::ReInstall</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+"Esta opção está ligada por predefinição; use <literal>--no-list-cleanup</"
+"literal> para a desligar. Quando ligada o <command>apt-get</command> irá "
+"gerir automaticamente os conteúdos de <filename>&statedir;/lists</filename> "
+"para assegurar que os ficheiros obsoletos são apagados. A única razão para "
+"desligar isto é no caso de você alterar frequentemente a sua lista de "
+"fontes. Item de Configuração: <literal>APT::Get::List-Cleanup</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+"Esta opção controla a entrada predefinida para o motor de políticas, cria um "
+"pin predefinido na prioridade 990 usando a string de lançamento "
+"especificada. Isto sobrepõe as definições gerais em <filename>/etc/apt/"
+"preferences</filename>. Os pacotes com pin específico não são afectados pelo "
+"valor desta opção. Em resumo, esta opção permite-lhe ter controlo simples "
+"sobre de qual distribuição os pacotes serão obtidos. Alguns exemplos comuns "
+"podem ser <option>-t '2.1*'</option>, <option>-t unstable</option> ou "
+"<option>-t sid</option>. Item de Configuração: <literal>APT::Default-"
+"Release</literal>; veja também o manual &apt-preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+"Apenas executa operações 'triviais'. Na lógica isto pode ser considerado "
+"relacionado ao <option>--assume-yes</option>, onde <option>--assume-yes</"
+"option> irá responder 'sim' a todos os avisos, <option>--trivial-only</"
+"option> irá responder 'não'. Item de Configuração: <literal>APT::Get::"
+"Trivial-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+"Se quaisquer pacotes estiverem para ser removidos, o apt-get aborta "
+"imediatamente sem aviso. Item de Configuração: <literal>APT::Get::Remove</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+"Se o comando for <literal>install</literal> ou <literal>remove</literal>, "
+"então esta opção age como se corresse o comando <literal>autoremove</"
+"literal>, removendo os pacotes de dependências não utilizados. Item de "
+"Configuração: <literal>APT::Get::AutomaticRemove</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+"Apenas tem significado para os comandos <literal>source</literal> e "
+"<literal>build-dep</literal>. Indica que os nomes de fontes fornecidos não "
+"são para serem mapeados através da tabela de binários. Isto quer dizer que "
+"se esta opção for especificada, estes comandos apenas irão aceitar nomes de "
+"pacotes fonte como argumentos, em vez de aceitarem nomes de pacotes binários "
+"e procurar o pacote fonte correspondente. Item de Configuração: "
+"<literal>APT::Get::Only-Source</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+"Descarrega apenas o ficheiro diff, dsc, ou tar de um pacote fonte. Item de "
+"Configuração: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-"
+"Only</literal>, e <literal>APT::Get::Tar-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+"Apenas processa dependências de compilação dependentes da arquitectura. Item "
+"de Configuração: <literal>APT::Get::Arch-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+"Apenas processa dependências de compilação independentes da arquitectura. "
+"Item de Configuração: <literal>APT::Get::Indep-Only</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+"Ignora se os pacotes não podem autenticados e não avisa acerca disso. Isto "
+"pode ser útil enquanto se trabalha com repositórios locais, mas é um enorme "
+"risco de segurança se a autenticidade dos dados não poder ser assegurada de "
+"outro modo pelo próprio utilizador. A utilização da opção <option>Trusted</"
+"option> para entradas da &sources-list; deve normalmente ser preferida em "
+"vez desta sobreposição global. Item de configuração: <literal>APT::Get::"
+"AllowUnauthenticated</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+"Proíbe o comando de actualização de adquirir dados não verificáveis a partir "
+"de fontes configuradas O APT irá falhar no comando de actualização para "
+"repositórios sem assinaturas criptograficamente válidas. Veja também &apt-"
+"secure; para detalhes no conceito e nas implicações. Item de Configuração: "
+"<literal>Acquire::AllowInsecureRepositories</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+"Permite ao comando update continuar a descarregar dados de um repositório "
+"que alterou a sua informação do lançamento contido no repositório indicando, "
+"por exemplo, um novo lançamento superior. O APT irá falhar no comando update "
+"para tal repositório até que a alteração seja confirmada para assegurar que "
+"o utilizador está preparado para a alteração. Veja também &apt-secure; para "
+"detalhes no conceito e configuração."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+"Opções especialistas (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) existem para permitir alterações "
+"apenas para certos campos como <literal>origin</literal>, <literal>label</"
+"literal>, <literal>codename</literal>, <literal>suite</literal>, "
+"<literal>version</literal> e <literal>defaultpin</literal>. Veja também &apt-"
+"preferences;. Item de Configuração: <literal>Acquire::"
+"AllowReleaseInfoChange</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+"Mostra informação de progresso compreensível para o utilizador na janela de "
+"terminal quando os pacotes são instalados, actualizados ou removidos. Para "
+"uma versão \"analisável por máquina\" destes dados veja o README.progress-"
+"reporting no directório doc do apt. Itens de Configuração: <literal>Dpkg::"
+"Progress</literal> e <literal>Dpkg::Progress-Fancy</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+"Adiciona o ficheiro fornecido como uma fonte para meta-dados. Pode ser "
+"repetido para adicionar vários ficheiros. Veja a descrição de <option>--with-"
+"source</option> em &apt-cache; para mais detalhes."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr "Ficheiros"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, O guia de utilizadores do The APT em &guidesdir;, &apt-"
+"preferences;, o Howto do APT."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+"<command>apt-get</command> devolve zero na operação normal, 100 decimal em "
+"erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr "pesquisa a cache do APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+"<command>apt-cache</command> executa uma variedade de operações na cache de "
+"pacotes do APT. <command>apt-cache</command> não manipula o estado do "
+"sistema mas fornece operações para procurar e gerar resultados interessantes "
+"a partir dos metadados do pacote. Os metadados são adquiridos e actualizados "
+"via comando 'update' de, por exemplo, <command>apt-get</command>, portanto "
+"podem estar desactualizados se a última actualização aconteceu à muito "
+"tempo, mas em troca o <command>apt-cache</command> funciona "
+"independentemente da disponibilidade das fontes configuradas (por exemplo em "
+"offline)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+"<literal>gencaches</literal> cria a cache de pacotes do APT. Isto é feito "
+"implicitamente por todos os comandos que precisam desta cache se esta "
+"estiver em falta ou desactualizada."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr "&synopsis-pkg;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+"<literal>showpkg</literal> mostra informação acerca dos pacotes listados na "
+"linha de comandos. Os argumentos restantes são nomes de pacotes. São "
+"listadas as versões disponíveis e dependências reversas de cada pacote "
+"listado, assim como as dependências dianteiras de cada versão. Dependências "
+"dianteiras (normais) são aqueles pacotes de que o pacote em questão depende; "
+"dependências reversas são aqueles pacotes que dependem do pacote em questão. "
+"Assim, as dependências dianteiras de um pacote têm de ser satisfeitas, mas "
+"as dependências reversas não precisam de ser. Por exemplo, <command>apt-"
+"cache showpkg libreadline2</command> deverá produzir resultados semelhantes "
+"ao seguinte:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+"Pacote: libreadline2\n"
+"Versões: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Dependências Reversas Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependências:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Fornecimentos:\n"
+"2.1-12 - \n"
+"Fornecimentos Reversos: \n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+"Assim pode-se ver que libreadline2, versão 2.1-12, depende de libc5 e "
+"ncurses3.0 que têm que ser instalados para que libreadline2 funcione. Por "
+"sua vez, libreadlineg2 e libreadline2-altdev dependem de libreadline2. Se "
+"libreadline2 for instalado, libc5 e ncurses3.0 (e ldso) também têm que ser "
+"instalados; libreadlineg2 e libreadline2-altdev não precisam de ser "
+"instalados. Para o significado específico do lembrete da saída é melhor "
+"consultar o código fonte do apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+"<literal>stats</literal> mostra algumas estatísticas acerca da cache. Não "
+"são esperados mais argumentos. As estatísticas reportadas são:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+"<literal>Total package names</literal> é o número de nomes de pacotes "
+"encontrados na cache."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+"<literal>Normal packages</literal> é o número de nomes de pacotes regulares "
+"e ordinários; estes são pacotes que têm uma correspondência de um-para-um "
+"entre os seus nomes e os nomes usados por outros pacotes para eles nas "
+"dependências. A maioria dos pacotes caem nesta categoria."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+"<literal>Pure virtual packages</literal> é o número de pacotes que existem "
+"apenas como nome de pacote virtual; isto é, os pacotes apenas "
+"\"disponibilizam\" o nome do pacote virtual, e nenhum pacote usa realmente o "
+"nome. Por exemplo, \"mail-transport-agent\" no sistema Debian é um pacote "
+"puramente virtual; vários pacotes disponibilizam \"mail-transport-agent\", "
+"mas não existe um existe um pacote chamado \"mail-transport-agent\"."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+"<literal>Single virtual packages</literal> é o número de pacotes com apenas "
+"um pacote a disponibilizar um pacote virtual particular. Por exemplo, no "
+"sistema Debian, \"X11-text-viewer\" é um pacote virtual, mas apenas um "
+"pacote, xless, disponibiliza \"X11-text-viewer\"."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+"<literal>Mixed virtual packages</literal> é o número de pacotes que ou "
+"disponibilizam um pacote virtual particular ou têm o nome de pacote virtual "
+"como o nome de pacote. Por exemplo, no sistema Debian, \"debconf\" é tanto "
+"um pacote real, como também disponibilizado pelo pacote debconf-tiny."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+"<literal>Missing</literal> é o número de nomes de pacotes que são "
+"referenciados numa dependência mas não foram disponibilizados por nenhum "
+"pacote. Os pacotes em falta podem ser uma evidência de que não se está a "
+"aceder ao total de uma distribuição, ou que um pacote (real ou virtual) foi "
+"removido da distribuição. Normalmente são referenciados a partir de "
+"declarações de Conflitos ou Breaks."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+"<literal>Total distinct versions</literal> é o número de versões de pacotes "
+"encontrados na cache. Se for acedida a mais do que uma distribuição (por "
+"exemplo \"stable\" e \"unstable\"), este valor pode ser consideravelmente "
+"maior que o número do total de nomes de pacotes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+"<literal>Total dependencies</literal> é o número de relacionamentos com "
+"dependências reivindicadas por todos os pacotes na cache."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+"<literal>showsrc</literal> mostra todos os registos de pacotes fonte que "
+"correspondem aos nomes de pacotes fornecidos. Todas as versões são "
+"mostradas, assim como todos os registos que declaram o nome como sendo um "
+"pacote binário. Use <option>--only-source</option> para mostrar apenas nomes "
+"de pacotes fonte."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+"<literal>dump</literal> mostra uma listagem curta de todos os pacotes na "
+"cache. É principalmente para depuração."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+"<literal>dumpavail</literal> escreve uma lista de disponibilidades no "
+"stdout. Isto é apropriado para usar com o &dpkg; e é usado pelo método "
+"&dselect;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+"<literal>unmet</literal> mostra um sumário de todas as dependências "
+"insatisfeitas na cache do pacote."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+"<literal>show</literal> executa uma função semelhante ao <command>dpkg --"
+"print-avail</command>; mostra os registos do pacote para os pacotes nomeados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr "&synopsis-regex;"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+"<literal>search</literal> executa uma busca de texto completo em todas as "
+"listas de pacotes disponíveis para o padrão POSIX regex fornecido, veja "
+"&regex;. Procura nos nomes de pacotes e nas descrições por uma ocorrência da "
+"expressão regular e escreve o nome do pacote e a descrição curta, incluindo "
+"nomes de pacotes virtuais. Se for fornecido <option>--full</option> então "
+"são produzidos resultados idênticos ao <literal>show</literal> para cada "
+"pacote correspondente, e se for fornecido <option>--names-only</option> "
+"então não há procura na descrição longa, apenas no nome do pacote dos "
+"pacotes fornecidos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+"Podem ser usados argumentos separados para especificar múltiplos padrões de "
+"busca os quais são lidados em conjunto."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+"<literal>depends</literal> mostra uma listagem de cada dependência que um "
+"pacote tem e todos os outros pacotes possíveis que podem satisfazer essa "
+"dependência."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+"<literal>rdepends</literal> mostra uma listagem de cada dependência reversa "
+"que um pacote tem."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+"Este comando escreve o nome de cada pacote que o APT conhece. O argumento "
+"opcional é um prefixo de correspondência para filtrar a lista de nomes. O "
+"resultado é apropriado para usar numa função completa de consola e o "
+"resultado é gerado com extrema rapidez. Este comando fica melhor usado com a "
+"opção <option>--generate</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+"Note que um pacote que o APT conheça não está necessariamente disponível "
+"para download, instalável ou instalado, por exemplo, os pacotes virtuais "
+"também são listados na lista gerada."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+"<literal>dotty</literal> recebe uma lista de pacotes na linha de comandos e "
+"gera resultados apropriados para uso pelo dotty do pacote <ulink url="
+"\"http://www.research.att.com/sw/tools/graphviz/\">GraphViz</ulink>. O "
+"resultado será um conjunto de nós e orlas que representam os relacionamentos "
+"entre os pacotes. Por predefinição, os pacotes fornecidos irão seguir todos "
+"os pacotes dependentes; isto pode produzir um gráfico muito grande. Para "
+"limitar os resultados apenas aos pacotes listados na linha de comandos, "
+"defina a opção <literal>APT::Cache::GivenOnly</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+"Os nós resultantes irão ter várias formas; pacotes normais são caixas, "
+"pacotes virtuais puros são triângulos, pacotes virtuais de mistura são "
+"diamantes, pacotes desaparecidos são hexágonos. Caixas cor de laranja "
+"significam que a recursão parou (pacotes leaf), linhas azuis são pré-"
+"dependências, linhas verdes são conflitos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr ""
+"Atenção, o dotty não consegue fazer gráficos com grandes conjuntos de "
+"pacotes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+"O mesmo que <literal>dotty</literal>, apenas para xvcg a partir de <ulink "
+"url=\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">Ferramenta "
+"VCG</ulink>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+"<literal>policy</literal> destina-se a ajudar a depurar problemas "
+"relacionados com o ficheiro de preferências. Sem argumentos irá escrever as "
+"propriedades de cada fonte. Caso contrário escreve informação detalhada "
+"acerca da selecção de prioridade do pacote nomeado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+"O comando <literal>madison</literal> do <literal>apt-cache</literal> tenta "
+"imitar o formato de saída e um subconjunto das funcionalidades da ferramenta "
+"<literal>madison</literal> de gestão de pacotes da Debian. Mostra versões "
+"disponíveis de um pacote num formato tabular. Ao contrário do "
+"<literal>madison</literal> original, apenas pode mostrar informação para a "
+"arquitectura que o APT recolheu listas de pacotes (<literal>APT::"
+"Architecture</literal>)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+"Selecciona o ficheiro para armazenar a cache do pacote. A cache do pacote é "
+"a cache principal usada por todas as operações. Item de Configuração: "
+"<literal>Dir::Cache::pkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+"Selecciona o ficheiro para armazenar a cache de fonte. A fonte é usada "
+"apenas pelo <literal>gencaches</literal> e armazena uma versão analisada da "
+"informação do pacote a partir de fontes remotas. Ao construir a cache de "
+"pacote é usada a cache fonte para evitar reanalisar todos os ficheiros do "
+"pacote. Item de Configuração: <literal>Dir::Cache::srcpkgcache</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Quiet; produz resultados apropriados para registar em logs, omitindo os "
+"indicadores de progresso. Mais q's irão produzir mais serenidade até um "
+"máximo de 2. Você também pode usar <option>-q=#</option> para definir o "
+"nível de serenidade, sobrepondo o ficheiro de configuração. Item de "
+"Configuração: <literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+"Escreve apenas dependências importantes; para usar com <literal>unmet</"
+"literal> e <literal>depends</literal>. Separa apenas relações de Depends e "
+"Pre-Depends para serem escritas. Item de Configuração: <literal>APT::Cache::"
+"Important</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+"Por predefinição o <command>depends</command> and <command>rdepends</"
+"command> escrevem todas as dependências. Isto pode ser \"afinado\" com estas "
+"bandeiras que irão omitir o tipo de dependência especificado. Item de "
+"Configuração: <literal>APT::Cache::Show<replaceable>DependencyType</"
+"replaceable></literal> ex. <literal>APT::Cache::ShowRecommends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+"Por predefinição <command>depends</command> e <command>rdepends</command> "
+"apresentam apenas dependências expressamente explícitas nos meta-dados. Com "
+"esta bandeira irá também mostrar dependências adicionadas implicitamente com "
+"base nos dados encontrados. Um <literal>Conflicts: foo</literal> por "
+"exemplo, expressa implicitamente que este pacote também entra em conflito "
+"com o pacote foo de qualquer outra arquitectura. Item de Configuração: "
+"<literal>APT::Cache::ShowImplicit</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+"Escreve registos de pacote completos quando procura. Item de Configuração: "
+"<literal>APT::Cache::ShowFull</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+"Escreve registos completos para todas as versões disponíveis. Isto é a "
+"predefinição; para a desligar, use <option>--no-all-versions</option>. Se "
+"<option>--no-all-versions</option> for especificada, apenas a versão "
+"candidata será mostrada (aquela que seria seleccionada para instalação). "
+"Esta opção é aplicável apenas ao comando <literal>show</literal>. Item de "
+"Configuração: <literal>APT::Cache::AllVersions</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+"Executa regeneração automática da cache de pacote, em vez de usar a cache "
+"como está. Isto é a predefinição; para a desligar, use <option>--no-"
+"generate</option>. Item de Configuração: <literal>APT::Cache::Generate</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+"Apenas procura no pacote e nos nomes dos pacotes fornecidos, e não nas "
+"descrições longas. Item de Configuração: <literal>APT::Cache::NamesOnly</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+"Faz com que o <literal>pkgnames</literal> escreva todos os nomes, incluindo "
+"pacotes virtuais e dependências em falta. Item de configuração: "
+"<literal>APT::Cache::AllNames</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+"Torna <literal>depends</literal> e <literal>rdepends</literal> recursivo "
+"para que todos os pacotes mencionados sejam escritos uma vez. Item de "
+"Configuração <literal>APT::Cache::RecurseDepends</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+"Limita a saída de <literal>depends</literal> e <literal>rdepends</literal> "
+"aos pacotes que estão actualmente instalados. Item de Configuração: "
+"<literal>APT::Cache::Installed</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+"Adiciona o ficheiro fornecido como a fonte para meta-dados. Pode ser "
+"repetido para adicionar múltiplos ficheiros. Presentemente são suportados "
+"ficheiros <literal>*.deb</literal>, <literal>*.dsc</literal>, <literal>*."
+"changes</literal>, <literal>Sources</literal> e <literal>Packages</literal> "
+"assim como directórios de pacotes fonte: A correspondência dos ficheiros é "
+"baseada apenas com base no seu nome, não no seu conteúdo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+"<literal>Sources</literal> e <literal>Packages</literal> podem ser "
+"comprimidos em qualquer formato suportado pelo apt desde de contenham a "
+"extensão correcta. Se você precisar de armazenar vários ficheiros destes num "
+"directório pode usar um prefixo no nome à sua escolha com um underscore no "
+"último caractere (\"<literal>_</literal>\"). Exemplo: meu.exemplo_Packages.xz"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+"Note que estas fontes são tratadas como de confiança (veja &apt-secure;). "
+"Item de Configuração: <literal>APT::Sources::With</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr "&apt-conf;, &sources-list;, &apt-get;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cache</command> devolve zero em operação normal, 100 decimal em "
+"erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr "Utilitário de gestão de chaves do APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+"<command>apt-key</command> é usado para gerir uma lista de chaves usadas "
+"pelo apt para autenticar pacotes. Os pacotes que foram autenticados com "
+"estas chaves serão considerados de confiança."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+"Note que se a utilização do <command>apt-key</command> for desejada, é "
+"necessária a instalação adicional da suite GNU Privacy Guard (empacotada no "
+"<package>gnupg</package>). Apenas por esta razão a utilização programática é "
+"fortemente desencorajada (especialmente no pacote maintainerscripts!). Mais "
+"ainda o formato de saída de todos os comandos não está definido e pode "
+"alterar (e altera mesmo) sempre que os comandos subjacentes mudam. O "
+"<command>apt-key</command> irá tentar detectar tal utilização e gerar avisos "
+"no stderr nestes casos."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr "Ficheiros de chaveiro suportados"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+"O apt-key suporta apenas o formato binário OpenPGP (também conhecido como "
+"\"GPG key public ring\") em ficheiros com a extensão \"<literal>gpg</literal>"
+"\", não o formato de base de dados keybox introduzido em novas versões &gpg; "
+"como predefinição para ficheiros de chaveiro. Os ficheiros chaveiro binários "
+"que se destinam a ser usados com qualquer versão do apt devem por isto ser "
+"sempre criados com <command>gpg --export</command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+"Como alternativa, se todos os sistemas que devem estar a usar o chaveiro "
+"criado têm pelo menos a versão de apt >= 1.4 instalada, você pode usar o "
+"formato blindado de ASCII com a extensão \"<literal>asc</literal>\" em "
+"substituição o qual pode ser criado com <command>gpg --armor --export</"
+"command>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr "Comandos"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+"Adiciona uma chave nova à lista de chaves de confiança. A chave é lida a "
+"partir do nome de ficheiro dado com o parâmetro &synopsis-param-filename; ou "
+"se o nome do ficheiro for <literal>-</literal> a partir da entrada standard."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+"É crítico que as chaves adicionadas manualmente via <command>apt-key</"
+"command> sejam verificadas que pertencem ao dono dos repositórios que elas "
+"afirmam ser, caso contrário a infraestrutura &apt-secure; fica completamente "
+"indeterminada."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+"<emphasis>Note</emphasis>: Em vez de se usar este comando, deve-se colocar "
+"um chaveiro directamente no directório <filename>/etc/apt/trusted.gpg.d/</"
+"filename> com um nome descritivo e com \"<literal>gpg</literal>\" ou "
+"\"<literal>asc</literal>\" como extensão de ficheiro."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr "Remove uma chave da lista de chaves de confiança."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr "Escreve o &synopsis-param-keyid; da chave na saída standard."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr "Escreve todas as chaves de confiança na saída standard."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr "Lista as chaves de confiança com impressões digitais."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+"Passa opções avançadas ao gpg. Com <command>adv --recv-key</command> você "
+"pode por exemplo descarregar uma chave de servidores de chaves directamente "
+"para o conjunto de chaves de confiança. Note que <emphasis>não</emphasis> "
+"são feitas verificações, portanto é fácil enfraquecer completamente a "
+"infraestrutura &apt-secure; se for usado sem cuidado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr "(descontinuado)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+"Actualiza o chaveiro local com o chaveiro do arquivo e remove do chaveiro "
+"local as chaves de arquivo que já não são válidas. O chaveiro do arquivo é "
+"submetido no pacote <literal>archive-keyring</literal> da sua distribuição, "
+"por exemplo o pacote &keyring-package; em &keyring-distro;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+"Note que uma distribuição não precisa e de facto nem deve usar mais este "
+"comando e em vez disso empacotar ficheiros chaveiro no directório "
+"<filename>/etc/apt/trusted.gpg.d</filename> directamente pois isto evita uma "
+"dependência no <package>gnupg</package> e é mais fácil gerir as chaves ao "
+"simplesmente adicionar e remover ficheiros para responsáveis e utilizadores "
+"de modo semelhante."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+"Executa uma actualização que funciona de modo semelhante ao comando "
+"<command>update</command> em cima, mas obtém o chaveiro do arquivo a partir "
+"de um URI e valida-o com uma chave mestra. Isto requer um &wget; instalado e "
+"uma compilação de APT configurada para ter um servidor de onde obter e um "
+"chaveiro mestre para validação. O APT em Debian não suporta este comando, "
+"confiando em vez disso no <command>update</command>, mas o APT do Ubuntu fá-"
+"lo."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr "Opções"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+"Note que as opções precisam ser definidas antes dos comandos descritos na "
+"secção prévia."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+"Com esta opção é possível especificar um ficheiro de chaveiro específico com "
+"o qual o comando deve operar. A predefinição é que um comando é executado no "
+"ficheiro <filename>trusted.gpg</filename> assim como em todas as partes do "
+"directório <filename>trusted.gpg.d</filename>, assim <filename>trusted.gpg</"
+"filename> é o chaveiro principal o que significa que, por exemplo, as novas "
+"chaves são adicionadas a este."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr "mostrar, definir e apagar várias definições para um pacote"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+"<command>apt-mark</command> pode ser usado como um front-end unificado para "
+"definir várias definições para um pacote, tal como marcar um pacote como "
+"sendo instalado automaticamente/manualmente ou alterar selecções do "
+"<command>dpkg</command> como manter, instalar, desinstalar e purgar as quais "
+"são respeitadas, por exemplo, por <command>apt-get dselect-upgrade</command> "
+"ou <command>aptitude</command>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr "Pacotes Instalados Automaticamente e Manualmente"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+"Quando você pede que um pacote seja instalado, e como resultado outros "
+"pacotes são instalados para satisfazer as suas dependências, as dependências "
+"são marcadas como sendo instaladas automaticamente, enquanto que o pacote "
+"que você instalou explicitamente é marcado como instalado manualmente. Uma "
+"vez que um pacote instalado automaticamente não é mais uma dependência de "
+"nenhum pacote instalado manualmente, é considerado como não sendo mais "
+"necessário e por ex o <command>apt-get</command> ou o <command>aptitude</"
+"command> irão sugerir removê-lo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+"<literal>auto</literal> é usado para marcar um pacote como sendo instalado "
+"automaticamente, o que irá causar a remoção do pacote quando mais nenhum "
+"pacote instalado manualmente depender deste pacote."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+"<literal>manual</literal> é usado para marcar um pacote como sendo instalado "
+"manualmente, o que irá prevenir que o pacote seja removido automaticamente "
+"se nenhum outro pacote depender dele."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+"<literal>minimize-manual</literal> é usado para marcar (transitivo) "
+"dependências is used to mark (transitive) dependencies de meta-pacotes como "
+"instalados automaticamente. Isto pode ser usado após uma instalação por "
+"exemplo, para minimizar o número de pacotes instalados manualmente, ou "
+"continuamente em sistemas geridos por meta-pacotes de configuração do "
+"sistema."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+"<literal>showauto</literal> é usado para escrever uma lista dos pacotes "
+"instalados automaticamente com cada pacote numa linha nova. Serão listados "
+"todos os pacotes instalados automaticamente se não for dado um pacote. Se "
+"forem dados pacotes então só serão mostrados aqueles que foram instalados "
+"automaticamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+"<literal>showmanual</literal> pode ser usado do mesmo modo que o "
+"<literal>showauto</literal>, excepto que irá escrever uma lista dos pacotes "
+"instalados manualmente."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+"Lê/Escreve o estado de pacote a partir do nome de ficheiro dado com o "
+"parâmetro &synopsis-param-filename; em vez de o fazer a partir da "
+"localização predefinida, a qual é <filename>extended_status</filename> no "
+"directório definido pelo Item de Configuração: <literal>Dir::State</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr "Prevenir Alterações para um Pacote"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+"<literal>hold</literal> é usado para marcar um pacote como segurado, o que "
+"irá impedir o pacote de ser instalado automaticamente, actualizado ou "
+"removido."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+"<literal>unhold</literal> é usado para cancelar um \"hold\" previamente "
+"definido num pacote para permitir de novo todas as acções."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+"<literal>showhold</literal> é usado para escrever uma lista dos pacotes em "
+"retenção do mesmo modo que os outros comandos show."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr "Agendar Pacotes para Instalar, Remover e Purgar"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+"Alguns front-ends como o <command>apt-get dselect-upgrade</command> podem "
+"ser usados para aplicar alterações previamente agendadas ao estado de "
+"instalação de pacotes. Tais alterações podem ser agendadas com os comandos "
+"<option>install</option>, <option>remove</option> (também conhecido por "
+"<option>deinstall</option>) e <option>purge</option>. Os pacotes com uma "
+"selecção específica podem ser mostrados com <option>showinstall</option>, "
+"<option>showremove</option> e <option>showpurge</option> respectivamente. "
+"Mais informação acerca destas chamadas selecções do dpkg pode ser encontrada "
+"em &dpkg;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+"<command>apt-mark</command> devolve zero na operação normal, 100 decimal em "
+"erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr "Suporte de autenticação de arquivos para o APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+"A partir da versão 0.6, o <command>APT</command> contém código que faz "
+"verificação de assinaturas do ficheiro Release para todos os repositórios. "
+"Isto assegura que dados como pacotes no arquivo não podem ser modificados "
+"por pessoas que não têm acesso à chave de assinatura do ficheiro Release. A "
+"partir da versão 1.1 o <command>APT</command> requer repositórios para "
+"disponibilizar informação recente de autenticação para uma utilização "
+"desimpedida do repositório. Desde a versão 1.5, as alterações na informação "
+"contida no ficheiro Release acerca do repositório precisam de ser "
+"confirmadas antes do APT continuar a aplicar actualizações a partir deste "
+"repositório."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+"Note: Todos os front-ends de gestão de pacotes como o &apt-get;, &aptitude; "
+"e &synaptic; suportam esta funcionalidade de autenticação, portanto este "
+"manual usa o <literal>APT</literal> para se referir a eles todos apenas para "
+"simplificar."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Unsigned Repositories"
+msgstr "Repositórios Não Assinados"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+"Se um arquivo tem um ficheiro Release não assinado ou nem sequer tem um "
+"ficheiro Release, por predefinição todas as versões actuais do APT irão "
+"recusar descarregar dados dele em operações <command>update</command> e "
+"mesmo que seja forçadas a fazê-lo, front-ends como o &apt-get; irão precisar "
+"de confirmação explícita se um pedido de instalação incluir um pacote que "
+"venha de um tal arquivo não autenticado."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+"Você pode forçar todos os clientes do APT a elevar apenas avisos ao definir "
+"a opção de configuração <option>Acquire::AllowInsecureRepositories</option> "
+"para <literal>true</literal>. Também se consegue permitir que repositórios "
+"individuais possam ser inseguros via &sources-list; opção <literal>allow-"
+"insecure=yes</literal>. Note que repositórios inseguros são fortemente "
+"desencorajados e todas as opções para forçar o apt a continuar a suportá-os "
+"serão eventualmente removidas. Os utilizadores também têm a opção "
+"<option>Trusted</option> disponível para desactivar até os avisos, mas tenha "
+"certeza de intender as implicações como está detalhado em &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+"Um repositório que anteriormente era autenticado mas que perdeu este estado "
+"numa operação <command>update</command> provoca um erro em todos os clientes "
+"do APT independentemente da opção de permitir ou proibir a utilização de "
+"repositórios não seguros. O erro pode ser superado ao definir adicionalmente "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> para "
+"<literal>true</literal> ou para repositórios individuais com a opção de "
+"&sources-list; <literal>allow-downgrade-to-insecure=yes</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Signed Repositories"
+msgstr "Repositórios Assinados"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+"A corrente de confiança desde um arquivo APT até ao utilizador final é feita "
+"em diferentes passos. O <command>apt-secure</command> é o último passo nesta "
+"corrente, confiar num arquivo não quer dizer que os pacotes em que confia "
+"não possam conter código malicioso, mas que dizer que você confia no "
+"responsável do arquivo. É da responsabilidade do responsável do arquivo "
+"assegurar que a integridade do arquivo está correcta."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+"O apt-secure não revê as assinaturas ao nível do pacote. Se você necessita "
+"de ferramentas que o façam deve procurar pelo <command>debsig-verify</"
+"command> e <command>debsign</command> (disponibilizados nos pacotes debsig-"
+"verify e devscripts respectivamente)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+"A corrente de confiança em Debian começa (por exemplo) quando o responsável "
+"faz o upload de um novo pacote ou de uma nova versão de um pacote para o "
+"arquivo Debian. De modo a se tornar efectivo, este upload precisa de ser "
+"assinado por uma chave contida em um dos chaveiros de responsável de pacotes "
+"Debian (disponível no pacote debian-keyring). As chaves dos responsáveis são "
+"assinadas por outros responsáveis seguindo procedimentos pré-estabelecidos "
+"para assegurar a identidade do dono da chave. Existem procedimentos "
+"semelhantes em todas as distribuições baseadas em Debian."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+"Assim que o pacote submetido é verificado e incluído no arquivo, a "
+"assinatura do responsável é despojada, são computados sumários de "
+"verificação do pacote e colocado no ficheiro Packages. Os sumários de "
+"verificação de todos os ficheiros Packages são então computados e colocados "
+"no ficheiro Release. O ficheiro Release é então assinado pela chave de "
+"arquivo para este lançamento de &keyring-distro;, e distribuído juntamente "
+"com os pacotes e os ficheiros Packages em mirrors de &keyring-distro;. As "
+"chaves estão no chaveiro do arquivo &keyring-distro; no pacote &keyring-"
+"package;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+"Os utilizadores finais podem verificar a assinatura do ficheiro Release, "
+"extrair um sumario de verificação de um pacote a partir dele e compará-lo "
+"com o sumario de verificação do pacote que descarregaram manualmente - ou "
+"confiar no APT que faz isto automaticamente."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+"Note que isto é diferente de verificar assinaturas por cada pacote. É "
+"desenhado para prevenir dois ataques possíveis:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+"<literal>Ataques de rede \"man in the middle\"</literal>. Sem verificação de "
+"assinatura, um agente malicioso pode introduzir-se ele próprio no processo "
+"de descarga de pacotes e disponibilizar software malicioso seja ao controlar "
+"um elemento de rede (router, switch, etc.) ou ao redireccionar tráfego para "
+"um servidor impostor (através de ataques de fraude de ARP ou DNS)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+"<literal>Mirror network compromise</literal>. Sem verificação de assinatura, "
+"um agente malicioso pode comprometer uma máquina mirror e modificar os "
+"ficheiros dele para propagar software malicioso a todos os utilizadores que "
+"descarregam pacotes a partir dessa máquina."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+"No entanto, isto não defende contra um compromisso do próprio servidor "
+"mestre (o qual assina os pacotes) ou contra um compromisso da chave usada "
+"para assinar os ficheiros Release. Em qualquer caso, este mecanismo pode "
+"complementar uma assinatura por-pacote."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr "Alterações na informação"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+"Um ficheiro Release contém, para além dos sumários de verificação para os "
+"ficheiros no repositório, também informação geral acerca do repositório como "
+"a origem, nome de código ou número de versão do lançamento."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+"Este informação é mostrada em diversos lugares para que o dono do "
+"repositório deve sempre assegurar a exactidão. Mais ainda, mais configuração "
+"do utilizador como &apt-preferences; podem depender e fazer uso desta "
+"informação. Desde a versão 1.5 que o utilizador tem de confirmar "
+"explicitamente as alterações para sinalizar que o utilizador está "
+"suficientemente preparado, por exemplo, para o novo lançamento maior da da "
+"distribuição enviada para o repositório (como por exemplo indicada pelo nome "
+"de código)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr "Configuração do Utilizador"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+"O <command>apt-key</command> é o programa que gere a lista de chaves usada "
+"pelo APT para confiar nos repositórios. Pode ser usado para adicionar assim "
+"como para listar as chaves confiadas. Limitando quais chave(s) são capazes "
+"de assinar qual arquivo é possível via <option>Signed-By</option> em "
+"&sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+"Note que uma instalação predefinida já contém todas as chaves para adquirir "
+"em segurança pacotes a partir dos repositórios predefinidos, portanto perder "
+"tempo com o <command>apt-key</command> só é necessário se forem adicionados "
+"repositórios de terceiros."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+"De modo a adicionar uma chave nova você precisa primeiro de descarregá-la "
+"(você deve certificar-se que está a usar um canal de comunicação de "
+"confiança quando a obtém), adicioná-la com <command>apt-key</command> e "
+"depois correr <command>apt-get update</command> para que o apt possa "
+"descarregar e verificar os ficheiros <filename>InRelease</filename> ou "
+"<filename>Release.gpg</filename> dos arquivos que você configurou."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Repository Configuration"
+msgstr "Configuração do Repositório"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+"Se você deseja fornecer assinaturas de arquivo a um arquivo sob sua "
+"manutenção, você tem que:"
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+"<emphasis>Criar um ficheiro Release de nível de topo</emphasis>, se este já "
+"não existir. Você pode fazer isto ao correr <command>apt-ftparchive release</"
+"command> (disponibilizado no apt-utils)."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+"<emphasis>Assiná-lo</emphasis>. Você pode fazer isso ao correr <command>gpg "
+"--clearsign -o InRelease Release</command> e <command>gpg -abs -o Release."
+"gpg Release</command>."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+"<emphasis>Publicar a impressão digital da chave</emphasis>, para que os seus "
+"utilizadores irão saber que chave precisam de importar de modo a autenticar "
+"os ficheiros no arquivo. É melhor enviar a sua chave no seu próprio pacote "
+"chaveiro como &keyring-distro; faz com &keyring-package; para ser capaz de "
+"distribuir actualizações e transições de chave mais tarde automaticamente."
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+"<emphasis>Disponibilize instruções em como adicionar o seu arquivo e chave</"
+"emphasis>. Se os seus utilizadores não conseguirem a sua chave seguramente a "
+"cadeia de confiança descrita em cima fica comprometida. Como você pode os "
+"utilizadores a adicionar a sua chave depende do seu arquivo e do alcance de "
+"audiência ao ter o sue pacote de ficheiro incluído num outro arquivo que os "
+"utilizadores já têm configurado (como os repositórios predefinidos da "
+"distribuição que usam) para elevar a teia da confiança."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+"Sempre que o conteúdo do arquivo mude (são adicionados novos pacotes ou "
+"removidos), o responsável do arquivo tem que seguir os primeiros dois passos "
+"previamente delineados."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+"Para mais informação de fundo você deve querer reler a <ulink url=\"https://"
+"www.debian.org/doc/manuals/securing-debian-howto/ch7\">Infraestrutura de "
+"Segurança da Debian</ulink> no capítulo do Manual Debian de Segurança "
+"(disponível também no pacote harden-doc) e o <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> de V. Alex Brennen."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr "Autores do manual"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+"Este manual é baseado no trabalho de Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer e Michael Vogt."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr "Utilitário de gestão de CD-ROM do APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+"O <command>apt-cdrom</command> é usado para adicionar um novo CD-ROM à lista "
+"de fontes disponíveis do APT. O <command>apt-cdrom</command> encarrega-se de "
+"determinar a estrutura do disco assim como corrigir várias falhas possíveis "
+"e verificar os ficheiros de índice."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+"É necessário usar o <command>apt-cdrom</command> para adicionar CDs ao "
+"sistema APT, não pode ser feito manualmente. Mais, cada disco de um conjunto "
+"de vários discos tem que ser inserido e sondado separadamente para ter em "
+"conta possíveis falhas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+"<literal>add</literal> é usado para adicionar um novo disco à lista de "
+"fontes. Irá desmontar o dispositivo CD-ROM, pedir que seja inserido um disco "
+"e depois prosseguir com a sua sondagem e cópia dos ficheiros índice. Se o "
+"disco não possuir um directório <filename>.disk</filename> apropriado, ser-"
+"lhe-à pedido um título descritivo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+"O APT usa um ID de CD-ROM para acompanhar qual disco está actualmente na "
+"drive e mantêm uma base de dados desses IDs em <filename>&statedir;/cdroms."
+"list</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+"Uma ferramenta de depuração para reportar a identificação do disco actual "
+"assim como o nome de ficheiro armazenado"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+"Não tente a auto-detecção do caminho do CD-ROM. Normalmente combinada com a "
+"opção <option>--cdrom</option>. Item de Configuração: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+"Ponto de Montagem; especifica a localização para montar o cdrom. Este ponto "
+"de montagem deve estar listado em <filename>/etc/fstab</filename> e "
+"configurado apropriadamente. Item de configuração: <literal>Acquire::cdrom::"
+"mount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+"Renomear um disco; muda a etiqueta de um disco ou sobrepõe a etiqueta "
+"fornecida do disco. Esta opção irá fazer com que o <command>apt-cdrom</"
+"command> pergunte por uma nova etiqueta. Item de configuração: <literal>APT::"
+"CDROM::Rename</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+"Nenhuma montagem; impede o <command>apt-cdrom</command> de montar e "
+"desmontar o ponto de montagem. Item de configuração: <literal>APT::CDROM::"
+"NoMount</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+"Copia rápida; Assume que os ficheiros do pacote são válidos e não verifica "
+"cada pacote. Este opção só deve ser usada se o <command>apt-cdrom</command> "
+"já foi corrido com este disco e não detectou nenhum erro. Item de "
+"configuração: <literal>APT::CDROM::Fast</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+"Sondagem de pacote exaustiva; Esta opção pode ser necessária com alguns "
+"discos Debian antigos 1.1/1.2 que têm ficheiros de pacotes em lugares "
+"estranhos. Demora muito mais tempo a sondar o CD mas irá apanhá-los a todos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+"Nenhuma alteração; Não altera o ficheiro &sources-list; e não escreve "
+"ficheiros índice. No entanto, tudo continua a ser verificado. Item de "
+"configuração: <literal>APT::CDROM::NoAct</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-cdrom</command> devolve zero em operação normal, 100 decimal em "
+"erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr "Programa de Consulta de Configuração do APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+"<command>apt-config</command> é um programa interno usado por várias partes "
+"da suite APT para fornecer uma configurabilidade consistente. Acede ao "
+"ficheiro de configuração principal <filename>/etc/apt/apt.conf</filename> de "
+"um modo que é fácil de usar para aplicações em script."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+"shell é usado para aceder à informação de configuração a partir de um script "
+"shell. É fornecido pares de argumentos, sendo o primeiro uma variável de "
+"shell e o segundo o valor de configuração a consultar. Como resultado cria "
+"uma lista de comandos atribuídos a shell para cada valor presente. Num "
+"script shell deverá ser usado como se segue:"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+"Isto irá definir a variável de ambiente shell $OPTS ao valor de MyApp::"
+"options com uma predefinição de <option>-f</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+"O item de configuração pode ser pós-fixado com um /[fdbi]. f devolve nomes "
+"de ficheiros, d devolve directórios, b devolve verdadeiro ou falso e i "
+"devolve um número inteiro. Cada um dos valores devolvidos é normalizado e "
+"verificado internamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr "Apenas mostra o conteúdo do espaço de configuração."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+"Inclui opções que têm um valor vazio. Isto é a predefinição, então use --no-"
+"empty para removê-las dos resultados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+"Define a saída de cada opção de configuração. &percnt;t irá ser substituído "
+"com o seu nome individual, &percnt;f com o seu nome hierárquico e &percnt;v "
+"com o seu valor. O uso de letras maiúsculas e caracteres especiais no valor "
+"será codificado para assegurar que pode, por exemplo, ser usado em segurança "
+"numa string citada como definido por RFC822. Adicionalmente &percnt;n será "
+"substituído por uma nova linha, e &percnt;N por um separador. Um &percnt; "
+"pode ser escrito ao usar &percnt;&percnt;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+"<command>apt-config</command> devolve zero em operação normal, 100 decimal "
+"em erro."
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr "Documentação inicial do Debug::*."
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr "dburrows@debian.org"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr "5"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr "Ficheiro de configuração para o APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+"<filename>/etc/apt/apt.conf</filename> é o ficheiro de configuração "
+"principal partilhado por todas as ferramentas na suite de ferramentas do "
+"APT, no entanto não é de maneira nenhuma o único local onde se pode definir "
+"opções. A suite também partilha um analisador comum de linha de comandos "
+"para disponibilizar um ambiente uniforme."
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+"Quando a ferramenta APT arranca irá ler os ficheiros de configuração pela "
+"seguinte ordem:"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+"o ficheiro especificado pela variável de ambiente <envar>APT_CONFIG</envar> "
+"(se existir)"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+"todos os ficheiros em <literal>Dir::Etc::Parts</literal> em ordem ascendente "
+"alfa-numérica não têm extensão ou têm \"<literal>conf</literal>\" como "
+"extensão do nome de ficheiro e que apenas contêm caracteres alfa-numéricos, "
+"traços (-), underscores (_) e pontos (.). Caso contrário o APT irá escrever "
+"um aviso de que ignorou um ficheiro, a menos que o ficheiro corresponda a um "
+"padrão na lista de configuração de <literal>Dir::Ignore-Files-Silently</"
+"literal> - que então nesse caso será ignorado em silêncio."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+"o ficheiro de configuração principal especificado por <literal>Dir::Etc::"
+"main</literal>"
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+"todas as opções definidas na sub-árvore de configuração específica de "
+"binário são movidas para a raiz da árvore."
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+"as opções de linha de comandos são aplicadas para sobrepor as directivas de "
+"configuração ou para carregar mais ficheiros de configuração."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr "Sintaxe"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+"O ficheiro de configuração é organizado numa árvore com as opções "
+"organizadas em grupos de funcionamento. A especificação das opções é dada "
+"com um sinal de dois pontos duplo , por exemplo <literal>APT::Get::Assume-"
+"Yes</literal> é uma opção dentro do grupo de ferramentas do APT, para a "
+"ferramenta Get. A opções não herdam dos seus grupos parentes."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+"Sintácticamente a linguagem de configuração é modelada após o que as "
+"ferramentas ISC usam, como o bind e o dhcp. As linhas que começam com "
+"<literal>//</literal> são tratadas como comentários (ignoradas), assim como "
+"todo o texto entre <literal>/*</literal> e <literal>*/</literal>, tal como "
+"os comentários de C/C++. Cada linha é do formato <literal>APT::Get::Assume-"
+"Yes \"true\";</literal>. As aspas e o ponto-e-vírgula final são necessários. "
+"O valor deve estar em uma linha, e não existe nenhum tipo de concatenação de "
+"string. Os valores não podem incluir barras invertidas ou aspas extras. Os "
+"nomes das opções são feitos de caracteres alfa-numéricos e os caracteres "
+"\"/-:._+\". Um novo scope pode ser aberto com chavetas, assim:"
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+"com novas linhas colocadas para o tornar mais legível. As listas podem ser "
+"criadas ao abrir um scope e incluindo uma string única entre aspas seguida "
+"por um ponto e vírgula. Podem ser incluídas múltiplas entradas, separadas "
+"por um ponto e vírgula (;)."
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+"Em geral o exemplo de ficheiro de configuração &configureindex; é um bom "
+"guia de como deve ficar."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+"Maiúsculas e minúsculas não são significativas nos nomes dos items de "
+"configuração, portanto no exemplo prévio você poderia usar <literal>dpkg::"
+"pre-install-pkgs</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+"Os nomes dos items de configuração são opcionais se uma lista for definida "
+"com pode ser vista no exemplo <literal>DPkg::Pre-Install-Pkgs</literal> "
+"acima. Se você não especificar um nome, uma nova entrada irá simplesmente "
+"adicionar uma nova opção à lista. Se você especificar um nome, você pode "
+"sobrepor a opção como qualquer outra opção ao re-atribuir um novo valor à "
+"opção."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+"Estão definidos dois comandos especiais, <literal>#include</literal> (a qual "
+"está obsoleto e não é suportado por implementações alternativas) e "
+"<literal>#clear</literal>: <literal>#include</literal> irá incluir o "
+"ficheiro fornecido, a menos que o nome do ficheiro termine numa barra (/), "
+"que no caso todo o directório é incluído. <literal>#clear</literal> é usado "
+"para apagar uma parte da árvore de configuração. O elemento especificado e "
+"os seus descendentes são apagados. (Note que estas linhas também precisam de "
+"acabar com um 'ponto e vírgula' (;) .)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+"O comando <literal>#clear</literal> é a única maneira de apagar uma lista ou "
+"um scope completo. Reabrindo um scope (ou usando a sintaxe descrita em baixo "
+"com um <literal>::</literal> acrescentado) <emphasis>não</emphasis> irá "
+"sobrepor entradas escritas anteriormente. As opções podem apenas ser "
+"sobrepostas ao atribuir um novo valor a elas - listas e scopes não podem ser "
+"sobrepostos, apenas limpos."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+"Todas as ferramentas do APT recebem uma opção -o que permite uma directiva "
+"de configuração arbitrária para ser especificada na linha de comandos. A "
+"sintaxe é um nome de opção completo (<literal>APT::Get::Assume-Yes</literal> "
+"por exemplo) seguido por um igual (=) e depois o valor da opção. Para "
+"acrescentar um novo elemento a uma lista, adicione um <literal>::</literal> "
+"ao final do nome da lista. (Como deve suspeitar, a sintaxe de scope não pode "
+"ser usada na linha de comandos.)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+"Note que acrescentar itens a uma lista usando <literal>::</literal> só "
+"funciona para um item por linha, e que não o deverá usar em combinação com a "
+"sintaxe scope (a qual adiciona <literal>::</literal> implicitamente). Usar "
+"ambas as sintaxes juntamente irá disparar um bug de que infelizmente alguns "
+"utilizadores dependem: uma opção com o nome pouco usual \"<literal>::</"
+"literal>\" o qual actua como qualquer outra opção com um nome. Isto introduz "
+"muitos problemas: por um lado, os utilizadores que escrevem múltiplas linhas "
+"nesta sintaxe <emphasis>errada</emphasis> na esperança de acrescentarem numa "
+"lista irão obter o oposto, pois apenas será usada a última atribuição para "
+"esta opção \"<literal>::</literal>\". Versões futuras do APT irão dar erros "
+"e parar de funcionar se encontrarem esta má utilização, portanto, por favor, "
+"corrija tais declarações agora enquanto o APT ainda não se queixa "
+"explicitamente delas."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr "O Grupo APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+"Este grupo de opções controla o comportamento geral do APT assim como mantém "
+"as opções para todas as ferramentas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+"System Architecture; define a arquitectura a usar quando procura ficheiros e "
+"analisa listas de pacotes. A predefinição interna é a arquitectura para a "
+"qual o APT foi compilado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+"Todas as arquitecturas que o sistema suporta. Por exemplo, CPUs que "
+"implementam o conjunto de instruções <literal>amd64</literal> (também "
+"chamada <literal>x86-64</literal>) são também capazes de executar binários "
+"compilados para o conjunto de instruções <literal>i386</literal> "
+"(<literal>x86</literal>). Esta lista é usada quando se busca ficheiros e "
+"analisa listas de pacotes. A predefinição inicial é sempre a arquitectura "
+"nativa do sistema (<literal>APT::Architecture</literal>), e as arquitecturas "
+"alienígenas são adicionadas à lista predefinida quando são registadas via "
+"<command>dpkg --add-architecture</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+"Este escopo define quais formatos de compressão são suportados, como a "
+"compressão e descompressão pode ser executada se o suporte para este formato "
+"não está compilado directamente no apt e um valor de custo que indica o "
+"custo de se comprimir algo neste formato. Como um exemplo a seguinte estrofe "
+"de configuração iria permitir ao apt descarregar e descomprimir assim como "
+"criar e armazenar ficheiros com a extensão <literal>.reversed</literal> de "
+"baixo custo os quais irá passar ao comando <command>rev</command> sem "
+"parâmetros adicionais de linha de comandos para a compressão e descompressão."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+"Lista todos os perfis de compilação activos para resolução de dependências "
+"de compilação, sem o prefixo \"<literal>profile.</literal>\" no espaço do "
+"nome. Por predefinição esta lista está vazia. O <envar>DEB_BUILD_PROFILES</"
+"envar> usado pelo &dpkg-buildpackage; sobrepõe a notação da lista."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+"Lançamento predefinido de onde instalar pacotes se existir mais de uma "
+"versão disponível. Contém o nome do lançamento, nome de código ou versão de "
+"lançamento. Exemplos: 'stable', 'testing', 'unstable', '&debian-stable-"
+"codename;', '&debian-testing-codename;', '4.0', '5.0*'. Veja também &apt-"
+"preferences;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+"Ignore Held packages; Esta opção global faz com que ao resolver problemas, "
+"os pacotes segurados sejam ignorados na sua decisão de marcação."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+"A predefinição é ligada. Quando ligada, a funcionalidade autoclean irá "
+"remover quaisquer pacotes que já não possam ser descarregados a partir da "
+"cache. Se desligada, então os pacotes que estão instalados localmente são "
+"também excluídos da limpeza - mas note que o APT não disponibiliza um meio "
+"directo de os reinstalar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+"A predefinição é ligada, o que irá fazer com que o APT instale pacotes "
+"essenciais e importantes assim que possível numa operação de instalação/"
+"actualização, de modo a limitar o efeito de uma chamada ao &dpkg; falhada. "
+"Se esta opção for desactivada, o APT trata um pacote importante do mesmo "
+"modo que um pacote extra: entre o desempacotamento do pacote A e a sua "
+"configuração podem existir muitas outras chamadas de desempacotamento ou "
+"configuração para outros pacotes B, C, etc não relacionados. Se eles "
+"causarem a falha da chamada do &dpkg; (ex. porque os scripts do maintainer "
+"do pacote B geram um erro), isto resulta num estado do sistema em que o "
+"pacote A fica desempacotado mas não configurado - então não fica garantido o "
+"funcionamento de qualquer pacote que dependa de A, porque a sua dependência "
+"de A não está mais satisfeita."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+"O marcador de configuração imediata também é aplicado no caso potencialmente "
+"problemático de dependências circulares, pois uma dependência com a bandeira "
+"de imediato é equivalente a uma Pré-Dependência. Em teoria isto permite ao "
+"APT reconhecer uma situação na qual está incapaz de executar configuração "
+"imediata, abortar, e sugerir ao utilizador que a opção deverá ser "
+"desactivada temporariamente de modo a permitir que a operação prossiga. Note "
+"o uso da palavra \"teoria\" aqui; no mundo real este problema tem sido "
+"raramente encontrado, em versões não-estável da distribuição, e foram "
+"causados por dependências erradas do pacote em questão ou por um sistema já "
+"no estado corrompido; portanto você não deve desactivar esta opção às cegas. "
+"porque em primeiro lugar o cenário mencionado em cima não é o único problema "
+"que pode ajudar a prevenir."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+"Antes de uma grande operação como <literal>dist-upgrade</literal> ser "
+"executada com esta opção desactivada você deve tentar explicitamente um "
+"<literal>install</literal> ao pacote que o APT não é capaz de configurar "
+"imediatamente; mas por favor certifique-se que também reporta o seu problema "
+"à sua distribuição e á equipa do APT com o link de bug em baixo, para que "
+"eles possa trabalhar em melhorar ou corrigir o processo de actualização."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+"Nunca active esta opção a menos que <emphasis>realmente</emphasis> saiba o "
+"que está a fazer. Ela permite que o APT remova temporariamente um pacote "
+"essencial para quebrar um ciclo infinito de Conflito/Conflito ou Conflito/"
+"Pré-Dependência entre dois pacotes essenciais. <emphasis>Tal ciclo nunca "
+"deveria existir e é um bug grave.</emphasis>. Esta opção irá funcionar se os "
+"pacotes essenciais não forem <command>tar</command>, <command>gzip</"
+"command>, <command>libc</command>, <command>dpkg</command>, <command>dash</"
+"command> ou nada de que esses pacotes dependam."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+"O APT usa desde a versão 0.7.26 um ficheiro de cache com mapa de memória de "
+"tamanho ajustável para armazenar a informação disponível. <literal>Cache-"
+"Start</literal> actua como uma dica do tamanho que a cache irá crescer, e é "
+"por isso a quantidade de memória que o APT irá requerer no arranque. O valor "
+"predefinido é 20971520 bytes (~20 MB). Note que esta quantidade de espaço "
+"precisa estar disponível para o APT; caso contrário ele irá com certeza "
+"falhar, portanto para dispositivos com pouca memória este valor deve ser "
+"diminuído enquanto que em sistemas com muitas fontes configuradas este deve "
+"ser aumentado. <literal>Cache-Grow</literal> define em bytes com a "
+"predefinição de 1048576 (~1 MB) em quanto o tamanho da Cache será aumentado "
+"no caso do espaço definido por <literal>Cache-Start</literal> não ser "
+"suficiente. Este valor será aplicado várias vezes até que a cache seja "
+"suficientemente grande para armazenar toda a informação ou que o tamanho da "
+"cache alcance o <literal>Cache-Limit</literal>. O valor predefinido de "
+"<literal>Cache-Limit</literal> é 0 o que significa nenhum limite. Se "
+"<literal>Cache-Grow</literal> for definido para 0, o crescimento automático "
+"da cache é desactivado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+"Define quais pacotes são considerados dependências essenciais de compilação."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+"A subsecção Get controla a ferramenta &apt-get;, por favor veja a sua "
+"documentação para mais informação acerca das opções daqui."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"A subsecção Cache controla a ferramenta &apt-cache;, por favor veja a sua "
+"documentação para mais informação acerca das opções daqui."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+"A subsecção CDROM controla a ferramenta &apt-cdrom;, por favor veja a sua "
+"documentação para mais informação acerca das opções de aqui."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr "O Grupo Acquire"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+"O grupo de opções <literal>Acquire</literal> controla a descarga de pacotes "
+"assim como os vários \"métodos de obtenção\" responsáveis pela própria "
+"descarga (veja também &sources-list;)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+"Opção relacionada com segurança que predefine para verdadeira, activando as "
+"verificações relativas a hora. Desactivá-la significa que a hora da máquina "
+"não pode ser confiada,e o APT irá então desactivar todos as verificações "
+"relacionadas com horas, tais como <option>Check-Valid-Until</option> e "
+"verificar que o campo Date de um ficheiro release não está no futuro."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+"O tempo máximo (em segundos) antes da sua criação (como indicado pelo "
+"cabeçalho <literal>Date</literal>) que o ficheiro <filename>Release</"
+"filename> deve ser considerado como válido. O valor predefinido é "
+"<literal>10</literal>. Podem ser criadas definições específicas de arquivo "
+"ao acrescentar a etiqueta do arquivo ao nome da opção. Preferencialmente, o "
+"mesmo pode ser conseguido para entradas &sources-list; específicas ao usar "
+"lá a opção <option>Date-Max-Future</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+"Opção relacionada com segurança com predefinição a 'verdadeiro', como dar a "
+"ficheiros Release uma data de expiração previne ataques repetidos durante "
+"longo tempo e pode, por exemplo, ajudar os utilizadores a identificar "
+"mirrors que não são actualizados à muito tempo - mas a funcionalidade "
+"depende da precisão de hora no sistema do utilizador. Os responsáveis do "
+"arquivo são encorajados a criar ficheiros Release com o cabeçalho "
+"<literal>Valid-Until</literal>, mas se não o fizerem ou se preferir-se um "
+"valor mais rigoroso pode-se usar a opção <literal>Max-ValidTime</literal> "
+"seguinte. A opção <option>Check-Valid-Until</option> das entradas &sources-"
+"list; deve ser preferida para desactivar a verificação selectiva em vez de "
+"usar esta sobreposição global."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+"O tempo máximo (em segundos) após a sua criação (como indicado pelo "
+"cabeçalho <literal>Date</literal>) que o ficheiro <filename>Release</"
+"filename> deve ser considerado como válido. Se o próprio ficheiro Release "
+"incluir um cabeçalho <literal>Valid-Until</literal> é usada como data de "
+"expiração a data que expira mais cedo. O valor predefinido é <literal>0</"
+"literal> o que significa \"válido para sempre\". Podem ser criadas "
+"definições específicas de arquivo ao acrescentar a etiqueta do arquivo ao "
+"nome da opção. Preferencialmente, o mesmo pode ser conseguido para entradas "
+"&sources-list; específicas ao usar aqui a opção <option>Valid-Until-Max</"
+"option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+"O tempo mínimo (em segundos) após a sua criação (como indicado no cabeçalho "
+"<literal>Date</literal>) que o ficheiro <filename>Release</filename> deve "
+"ser considerado como válido. Utilize isto se você necessitar de usar um "
+"mirror raramente actualizado (local) de um arquivo actualizado mais "
+"frequentemente com um cabeçalho <literal>Valid-Until</literal> em vez de "
+"desactivar completamente a verificação de data de expiração. Podem e devem "
+"ser usadas definições especificas do arquivo ao acrescentar a etiqueta do "
+"arquivo ao nome da opção. Preferencialmente, pode ser conseguido o mesmo "
+"para entradas &sources-list; específicas ao usar aqui a opção <option>Valid-"
+"Until-Min</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+"Permite o uso do suporte TLS interno no método http. Se definido para falso, "
+"isto desactiva completamente o suporte para TLS nos métodos próprios do apt "
+"(excluindo o método https baseado em curl). Não serão mais chamadas funções "
+"relacionadas com TLS."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+"Tenta descarregar deltas chamados <literal>PDiffs</literal> para índices "
+"(como os ficheiros <filename>Packages</filename>) em vez de os descarregar "
+"por inteiro. Verdadeiro por predefinição. Preferencialmente, isto pode ser "
+"definido para entradas &sources-list; específicas ou ficheiros index ao usar "
+"aqui a opção <option>PDiffs</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+"Estão também disponíveis duas sub-opções para limitar o uso de PDiffs: "
+"<literal>FileLimit</literal> pode ser usada para especificar um número "
+"máximo de ficheiros PDiff que devem ser descarregados para actualizar um "
+"ficheiro. Por outro lado <literal>SizeLimit</literal> é a percentagem máxima "
+"do tamanho de todas as patches comparadas com o tamanho do ficheiro de "
+"destino. Se um destes limites for excedido, é descarregado o ficheiro "
+"completo em vez das patches."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+"Tenta descarregar índices via um URL construído a partir de um sumário "
+"\"hashsum\" do ficheiro esperado, em vez de descarregar via um nome de "
+"ficheiro bem conhecido como estável. Verdadeiro por predefinição, mas "
+"desactivado automaticamente se a fonte indicar que não tem suporte para tal. "
+"A utilização pode ser forçada com o valor especial \"force\". "
+"Preferencialmente, isto pode ser definido para entradas &sources-list; "
+"específicas ou ficheiros index ao usar aqui a opção <option>By-Hash</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+"Modo de fila; <literal>Queue-Mode</literal> pode ser um de <literal>host</"
+"literal> ou <literal>access</literal> que determina como o APT paraleliza "
+"ligações de saída. <literal>host</literal> significa que será aberta uma "
+"ligação por máquina destino, <literal>access</literal> significa que será "
+"aberta uma ligação por tipo de URI."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+"Número de tentativas a executar. Se isto for diferente de zero o APT irá "
+"tentar, no número fornecido de vezes, obter ficheiros falhados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+"Usa links simbólicos para arquivos fonte. Se definido para verdadeiro, então "
+"os arquivos fonte serão links simbólicos, quando possível, em vez de cópias. "
+"A predefinição é verdadeiro."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+"As opções nesses scopes configuram a obtenção de transportes do APT para os "
+"protocolos HTTP e HTTPS e estão documentadas nos manuais &apt-transport-"
+"http; e &apt-transport-https; respectivamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+"<literal>ftp::Proxy</literal> define o proxy predefinido a usar para URIs "
+"FTP. Está no formato standard de <literal>ftp://[[user][:pass]@]host[:port]/"
+"</literal>. Os proxies por máquina podem também ser especificados ao usar o "
+"formato <literal>ftp::Proxy::&lt;host&gt;</literal> com a palavra chave "
+"especial <literal>DIRECT</literal> que significa não usar nenhum proxy. Se "
+"nenhuma das definições acima for especificada, será usada a variável de "
+"ambiente <envar>ftp_proxy</envar>. Para usar um proxy FTP você tem que "
+"definir o script <literal>ftp::ProxyLogin</literal> no ficheiro de "
+"configuração. Esta entrada especifica os comandos a enviar para dizer ao "
+"servidor proxy ao que se ligar. Por favor veja &configureindex; para um "
+"exemplo de como fazer isto. As variáveis de substituição que representam o "
+"componente URI correspondente são <literal>$(PROXY_USER)</literal> <literal>"
+"$(PROXY_PASS)</literal> <literal>$(SITE_USER)</literal> <literal>"
+"$(SITE_PASS)</literal> <literal>$(SITE)</literal> e <literal>$(SITE_PORT)</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+"A opção <literal>timeout</literal> define o tempo limite usado por este "
+"método, este valor aplica-se à ligação assim como os tempos de limite de "
+"dados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+"São disponibilizadas várias definições para controlar o modo passivo. "
+"Geralmente é seguro deixar o modo passivo ligado, funciona em quase todos "
+"ambientes. No entanto algumas situações requerem que o modo passivo seja "
+"desactivado e em vez disso usar o modo port ftp. Isto pode ser feito "
+"globalmente ou para ligações que passam por um proxy ou para uma máquina "
+"específica (veja a amostra de ficheiro de configuração para exemplos)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+"É possível usar proxy FTP sobre HTTP ao definir a variável de ambiente "
+"<envar>ftp_proxy</envar> para um URL HTTP - veja a discussão do método http "
+"em cima para a sintaxe. Você não pode definir isto no ficheiro de "
+"configuração e não é recomendado usar FTP sobre HTTP devido à sua baixa "
+"eficiência."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+"A definição <literal>ForceExtended</literal> controla o uso de comandos "
+"RFC2428 <literal>EPSV</literal> e <literal>EPRT</literal>. A predefinição é "
+"falso, o que significa que estes comandos apenas são usados se a ligação de "
+"controle for IPv6. Definir isto para verdadeiro força o seu uso mesmo em "
+"ligações IPv4. Note que a maioria dos servidores FTP não suporta RFC2428."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr "/cdrom/::Mount \"foo\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+"Para URIs que usam o método <literal>cdrom</literal>, a única opção "
+"configurável é ponto de montagem, <literal>cdrom::Mount</literal>, o qual "
+"deve ser o ponto de montagem para o leitor de CD-ROM (ou DVD, etc.) como "
+"especificado em <filename>/etc/fstab</filename>.É possível fornecer comandos "
+"de montar e desmontar alternativos se o seu ponto de montagem não puder ser "
+"listado na fstab. A sintaxe é colocar <placeholder type=\"literallayout\" "
+"id=\"0\"/> dentro do bloco <literal>cdrom</literal>. É importante ter a "
+"barra final. Comandos para desmontar podem ser especificados usando o UMount."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+"Para URIs de GPGV a única opção configurável é <literal>gpgv::Options</"
+"literal>, a qual passa parâmetros adicionais ao gpgv."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr "Acquire::CompressionTypes::<replaceable>Extensão de Ficheiro</replaceable> \"<replaceable>Nome de método</replaceable>\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+"Lista dos tipos de compressão que são compreendidos pelos métodos de "
+"aquisição. Ficheiros como <filename>Packages</filename> podem estar "
+"disponíveis em vários formatos de compressão. Por predefinição os métodos de "
+"aquisição podem descomprimir e re-comprimir muitos formatos comuns como "
+"<command>xz</command> e <command>gzip</command>; com este scope os formatos "
+"suportados podem ser consultados, modificados assim como pode ser adicionado "
+"suporte para mais formatos (veja também <option>APT::Compressor</option>). A "
+"sintaxe para isto é: <placeholder type=\"synopsis\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr "Acquire::CompressionTypes::Order:: \"gz\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+"Também o subgrupo <literal>Order</literal> pode ser usado para definir em "
+"que ordem o sistema de aquisição irá tentar descarregar os ficheiros "
+"comprimidos. O sistema de aquisição irá tentar com o primeiro e prosseguir "
+"com o próximo tipo de compressão na lista em caso de erro, portanto para "
+"preferir um sobre outro tipo, simplesmente adicione o tipo preferido em "
+"primeiro lugar - tipos não já adicionados serão acrescentados implicitamente "
+"ao fim da lista, então, ex. <placeholder type=\"synopsis\" id=\"0\"/> pode "
+"ser usado para preferir ficheiros comprimidos em <command>gzip</command> "
+"sobre todos os outros formatos de compressão. Se o <command>xz</command> "
+"deve ser preferido sobre o <command>gzip</command> e o <command>bzip2</"
+"command> a definição de configuração deverá parecer-se com isto: "
+"<placeholder type=\"synopsis\" id=\"1\"/>. Não é necessário adicionar "
+"explicitamente <literal>bz2</literal> à lista pois isso será adicionado "
+"automaticamente."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+"Note que o <literal>Dir::Bin::<replaceable>nome de método</replaceable></"
+"literal> será verificado em tempo de execução. Se esta definição estiver "
+"definida e o suporte para este formato não está compilado directamente no "
+"apt, o método apenas será usado se este ficheiro existir; ex. para o método "
+"<literal>bzip2</literal> (o embutido) a definição é: <placeholder type="
+"\"literallayout\" id=\"0\"/>. Note também que as entradas na lista "
+"especificadas na linha de comandos serão adicionadas no fim da lista "
+"especificada nos ficheiros de configuração, mas antes das entradas "
+"predefinidas. Para preferir um tipo neste caso sobre aqueles especificados "
+"nos ficheiros de configuração você pode definir a opção directamente - não "
+"em estilo de lista. Isto não irá sobrepor a lista definida, irá apenas "
+"prefixar a lista com este tipo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+"O tipo especial <literal>uncompressed</literal> pode ser usado para dar "
+"preferência a ficheiros não comprimidos, mas note que a maioria dos arquivos "
+"não disponibiliza ficheiros não comprimidos, portanto isto é usado "
+"maioritariamente apenas para mirrors locais."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+"Quando descarrega índices comprimidos em <literal>gzip</literal> (Pacotes, "
+"Fontes ou Traduções), mantêm-os localmente comprimidos em gzip em vez de os "
+"desempacotar. Isto poupa imenso espaço no disco à custa de mais pedidos à "
+"CPU quando constrói as caches de pacotes locais. Falso por predefinição."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+"A subsecção Languages controla quais ficheiros <filename>Translation</"
+"filename> são descarregados e em que ordem o APT tenta mostrar as traduções "
+"das descrições. O APT irá tentar mostrar a primeira descrição disponível "
+"para a linguagem que está listada em primeiro. As linguagens podem ser "
+"definidas com os seus códigos de linguagem curtos ou longos. Note que nem "
+"todos os arquivos disponibilizam ficheiros <filename>Translation</filename> "
+"para todas as linguagens - os códigos de linguagem longos são "
+"especialmenteraros."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"A lista predefinida inclui \"environment\" e \"en\". \"<literal>environment</"
+"literal>\" tem um significado especial aqui: será substituída em tempo de "
+"execução por códigos de linguagem extraídos a partir da variável de ambiente "
+"<literal>LC_MESSAGES</literal>. Também irá assegurar que estes códigos não "
+"são incluídos duas vezes na lista. Se <literal>LC_MESSAGES</literal> estiver "
+"definida para \"C\" apenas o ficheiro <filename>Translation-en</filename> "
+"será usado (se disponível). Para forçar o apt a não usar nenhum ficheiro de "
+"tradução use a definição <literal>Acquire::Languages=none</literal>. "
+"\"<literal>none</literal>\" é outro código de significado especial que irá "
+"parar a procura por um ficheiro <filename>Translation</filename> apropriado. "
+"Isto diz ao APT para também descarregar estes ficheiros sem realmente os "
+"usar a menos que o ambiente especifique as linguagens. Portanto o seguinte "
+"exemplo de configuração irá resultar na ordem \"en, de\" num ambiente em "
+"Inglês e \"de, en\" num ambiente em Alemão. Note que o \"fr\" é "
+"descarregado, mas não é usado a menos que o APT seja usado num ambiente em "
+"Francês (onde a ordem deveria ser \"fr, de, en\". <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+"Nota: Para prevenir problemas resultantes do APT ser executado em ambientes "
+"diferentes (ex. por diferentes utilizadores ou por outros programas) todos "
+"os ficheiros de Tradução que se encontram em <filename>/var/lib/apt/lists/</"
+"filename> serão adicionados ao final da lista (após um \"<literal>none</"
+"literal>\" implícito)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr "Ao descarregar, força o uso exclusivo do protocolo IPv4."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr "Ao descarregar, força o uso exclusivo do protocolo IPv6."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+"O tamanho máximo dos ficheiros Release/Release.gpg/InRelease. A predefinição "
+"é 10MB."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+"Esta opção controla se o apt irá usar o registo do servidor DNS SRV como "
+"especificado em RFC 2782 para seleccionar um servidor alternativo a onde "
+"ligar: A predefinição é \"true\"."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+"Permite às operações de actualização carregarem ficheiros de dados a partir "
+"de repositórios se informação se segurança suficiente. O valor predefinido é "
+"<literal>false</literal>\". O conceito, implicações assim como alternativas "
+"estão detalhados em &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Permite às operações de actualização carregarem ficheiros de dados a partir "
+"de repositórios que disponibilizam informação de segurança, mas estes já não "
+"são considerados suficiente fortes criptograficamente. O valor predefinido é "
+"<literal>false</literal>\". O conceito, implicações assim como alternativas "
+"estão detalhados em &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+"Permite que um repositório anteriormente assinado com gpg se torne em não-"
+"assinado durante uma operação de actualização. Quando não existe uma "
+"assinatura válida para um repositório anteriormente de confiança, o apt irá "
+"recusar a actualização. Esta opção pode ser usada para ultrapassar esta "
+"protecção. Certamente você nunca vai querer activar isto. A predefinição é "
+"<literal>false</literal>. O conceito, implicações assim como alternativas "
+"estão detalhadas em &apt-secure;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr "scope"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+"Adquirir changelogs só pode ser feito se for conhecido um URL de onde os "
+"obter. De preferência o ficheiro Release indica isto num campo 'Changelogs'. "
+"Se isto não estiver disponível, é usado o campo Label/Origin do ficheiro "
+"Release para verificar se uma opção <literal>Acquire::Changelogs::URI::"
+"Label::<replaceable>LABEL</replaceable></literal> ou <literal>Acquire::"
+"Changelogs::URI::Origin::<replaceable>ORIGIN</replaceable></literal> existem "
+"e se sim é utilizado este valor. Este valor no ficheiro Release pode ser "
+"sobreposto com <literal>Acquire::Changelogs::URI::Override::Label::"
+"<replaceable>LABEL</replaceable></literal> ou <literal>Acquire::Changelogs::"
+"URI::Override::Origin::<replaceable>ORIGIN</replaceable></literal>. O valor "
+"deve ser um URI normal para um ficheiro de texto, excepto se os dados desse "
+"pacote específico for substituído pelo marcador de posição "
+"<literal>@CHANGEPATH@</literal>. O valor para isto é: 1. se o pacote "
+"pertence a um componente (ex. <literal>main</literal>) esta é a primeira "
+"parte, caso contrário é omitida. 2. a primeira letra do nome do pacote "
+"fonte, excepto se o nome do pacote fonte começar com '<literal>lib</"
+"literal>' e neste caso será as primeiras quatro letras. 3. O nome completo "
+"do pacote fonte. 4. O nome completo outra vez e 5. a versão da fonte. A "
+"primeira (se presente), segunda, terceira e quarta partes são separadas por "
+"uma barra ('<literal>/</literal>') e entre a quarta e quinta partes fica um "
+"underscore ('<literal>_</literal>'). O valor especial '<literal>no</"
+"literal>' está disponível para esta opção e indica que esta fonte não pode "
+"ser usada para adquirir ficheiros changelog a partir dela. Neste caso será "
+"tentada outra fonte se estiver disponível."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr "Configuração específica de binário"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+"Especialmente com a introdução do binário <command>apt</command> pode ser "
+"útil para definir certas opções apenas para um binário específico mesmo como "
+"opções que parecessem apenas afectar um certo binário como <option>APT::Get::"
+"Show-Versions</option> afecta <command>apt-get</command> assim como "
+"<command>apt</command>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+"Definir uma opção para apenas um binário específico só pode ser conseguido "
+"ao definir a opção dentro escopo <option>Binary::<replaceable>specific-"
+"binary</replaceable></option>. Definir a opção <option>APT::Get::Show-"
+"Versions</option> apenas para o <command>apt</command> pode, por exemplo, "
+"ser feito de outra maneira definindo <option>Binary::apt::APT::Get::Show-"
+"Versions</option>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+"Note que como visto na secção DESCRIÇÃO mais acima, você não pode definir "
+"opções binário-especificas na própria linha de comandos nem em ficheiros de "
+"configuração carregados via linha de comandos."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr "Directórios"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+"A secção <literal>Dir::State</literal> tem directórios que pertencem à "
+"informação de estado local. <literal>lists</literal> é o directório para "
+"colocar listas de pacotes descarregadas e <literal>status</literal> é o nome "
+"do ficheiro de estado do &dpkg;. <literal>preferences</literal> é o nome do "
+"ficheiro <filename>preferences</filename> do APT. <literal>Dir::State</"
+"literal> contém o directório predefinido para pré-fixar em todos os sub-"
+"items que não começam com <filename>/</filename> ou <filename>./</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+"<literal>Dir::Cache</literal> contém localizações pertencentes a informação "
+"da cache local, como as caches de dois pacotes <literal>srcpkgcache</"
+"literal> e <literal>pkgcache</literal> assim como a localização onde colocar "
+"arquivos descarregados, <literal>Dir::Cache::archives</literal>. A geração "
+"de caches pode ser desligada ao definir <literal>pkgcache</literal> ou "
+"<literal>srcpkgcache</literal> para <literal>\"\"</literal>. Isto irá "
+"abrandar o arranque mas poupar espaço em disco. Provavelmente é preferível "
+"desligar o pkgcache em vez do srcpkgcache. Tal como <literal>Dir::State</"
+"literal> o directório predefinido é contido em <literal>Dir::Cache</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+"<literal>Dir::Etc</literal> contém a localização dos ficheiros de "
+"configuração, <literal>sourcelist</literal> fornece a localização da "
+"sourcelist e <literal>main</literal> é o ficheiro da configuração "
+"predefinida (definição não tem efeito, a menos que seja feita a partir do "
+"ficheiro de configuração especificado por <envar>APT_CONFIG</envar>)."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+"A definição <literal>Dir::Parts</literal> lê todos os fragmentos de "
+"configuração em ordem léxica a partir do directório especificado. Após isto "
+"estar feito então é carregado o ficheiro de configuração principal."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+"Programas binários são apontados por <literal>Dir::Bin</literal>. "
+"<literal>Dir::Bin::Methods</literal> especifica a localização dos "
+"manipuladores do método e de <literal>gzip</literal>, <literal>bzip2</"
+"literal>, <literal>lzma</literal>, <literal>dpkg</literal>, <literal>apt-"
+"get</literal> <literal>dpkg-source</literal> <literal>dpkg-buildpackage</"
+"literal> e <literal>apt-cache</literal> especifica a localização dos "
+"respectivos programas."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+"O item de configuração <literal>RootDir</literal> tem um significado "
+"especial. Se definido, todos os caminhos serão relativos a <literal>RootDir</"
+"literal>, <emphasis>mesmo caminhos que estão absolutamente especificados</"
+"emphasis>. Então, por exemplo, se <literal>RootDir</literal> estiver "
+"definido para <filename>/tmp/staging</filename> e <literal>Dir::State::"
+"status</literal> estiver definido para <filename>/var/lib/dpkg/status</"
+"filename>, então o ficheiro status será procurado em <filename>/tmp/staging/"
+"var/lib/dpkg/status</filename>. Se desejar usar como prefixo apenas caminhos "
+"relativos, defina antes <literal>Dir</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+"A lista <literal>Ignore-Files-Silently</literal> pode ser usada para "
+"especificar quais os ficheiros que o APT deve ignorar em silêncio enquanto "
+"analisa os ficheiros nos directórios de fragmento. Por predefinição que "
+"termine com <literal>.disabled</literal>, <literal>~</literal>, <literal>."
+"bak</literal> ou <literal>.dpkg-[a-z]+</literal> é ignorado em silêncio. "
+"Como visto no último valor predefinido, estes padrões podem usar sintaxe de "
+"expressão regular."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr "APT em DSelect"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+"Quando o APT é usado com um método &dselect;, várias directivas de "
+"configuração controlam o comportamento predefinido. Estas estão na secção "
+"<literal>DSelect</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+"Modo Cache Clean: este valor deve ser um de <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> e <literal>never</literal>. <literal>always</literal> e "
+"<literal>prompt</literal> irão remover todos os pacotes da cache após a "
+"actualização, <literal>prompt</literal> (a predefinição) fá-lo "
+"condicionalmente. <literal>auto</literal> apenas aqueles pacotes que já não "
+"podem ser descarregados (por exemplo, substituídos por uma nova versão). "
+"<literal>pre-auto</literal> executa esta acção antes de descarregar novos "
+"pacotes."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+"O conteúdo desta variável é passado ao &apt-get; como opções de linha de "
+"comandos quando é corrido para a fase de instalação."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+"O conteúdo desta variável é passado ao &apt-get; como opções de linha de "
+"comandos quando é executado para a fase de actualização."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+"Se for verdadeira a operação [U]pdate no &dselect; irá sempre avisar para "
+"continuar. A predefinição é avisar apenas em caso de erro."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr "Como o APT chama o &dpkg;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+"Várias directivas de configuração controlam como o APT invoca o invokes "
+"&dpkg;. Estas estão na secção <literal>DPkg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+"Isto é uma lista de opções para passar ao &dpkg;. As opções têm de ser "
+"especificadas usando a notação de lista e cada item da lista é passado como "
+"um argumento único ao &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+"Esta é uma string que define a variável de ambiente <envar>PATH</envar> "
+"usada quando se corre o dpkg. Pode ser definida para qualquer valor válido "
+"dessa variável de ambiente, ou para string vazia, e neste caso a variável "
+"não é alterada."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+"Isto é uma lista de comandos shell para executar antes/após invocar o "
+"&dpkg;. Tal como as <literal>opções</literal> isto tem que ser especificado "
+"em notação listada. Os comandos são invocados em ordem usando <filename>/"
+"bin/sh</filename>, caso algum deles falhe, o APT irá abortar."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+"Isto é uma lista de comandos shell para executar antes de invocar o &dpkg;. "
+"Tal como as <literal>opções</literal> isto tem que ser especificado em "
+"notação listada. Os comandos são invocados em ordem usando <filename>/bin/"
+"sh</filename>, caso algum deles falhe, o APT irá abortar. O APT irá passar "
+"para os comandos os nomes de ficheiros de todos os ficheiros .deb que vai "
+"instalar, um por cada linha no descritor de ficheiro requisitado, usando por "
+"predefinição a entrada standard."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+"A versão 2 deste protocolo envia mais informação através do descritor de "
+"ficheiro requerido: uma linha com o texto <literal>VERSION 2</literal>, o "
+"espaço de configuração do APT, e uma lista de acções de pacote com "
+"informação de nome de ficheiro e versão."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+"Cada linha directiva de configuração tem a forma <literal>chave=valor</"
+"literal>. Caracteres especiais (sinais de igual, novas-linhas, caracteres "
+"não imprimíveis, aspas, e sinais de percentagem na <literal>chave</literal> "
+"e novas-linhas, caracteres não imprimíveis, e sinais de percentagem no "
+"<literal>value</literal>) são %-codificados. As listas são representadas por "
+"múltiplas linhas <literal>chave=valor</literal> com a mesma chave. A secção "
+"de configuração termina com uma linha vazia."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+"As linhas de acção de pacotes consistem de cinco campos na Versão 2: nome do "
+"pacote (sem a qualificação da arquitectura mesmo que alienígena), versão "
+"anterior, direcção da alteração de versão (&lt; para actualizações, &gt; "
+"para regresses (downgrades), = para nenhuma alteração), nova versão, acção. "
+"Os campos da versão são \"-\" para nenhuma versão (por exemplo quando se "
+"instala um pacote pela primeira vez; nenhuma versão é tratada como anterior "
+"a nenhuma versão real, então isso é uma actualização, indicada como "
+"<literal>- &lt; 1.23.4</literal>). O campo de acção é \"**CONFIGURE**\" se o "
+"pacote está a ser configurado, \"**REMOVE**\" se está a ser removido, ou o "
+"nome de ficheiro de um ficheiro .deb se estiver a ser desempacotado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+"Na versão 3 após cada campo de versão segue-se a arquitectura dessa versão, "
+"a qual é \"-\" se não existir nenhuma versão, e um campo que mostra o tipo "
+"de MultiArch \"same\", \"foreign\", \"allowed\" ou \"none\". Note que \"none"
+"\" é um nome de tipo incorrecto o qual é apenas mantido para permanecer "
+"compatível, deve ser lido como \"no\" e os utilizadores são encorajados a "
+"suportar ambos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+"A versão do protocolo a ser usado para o comando <literal><replaceable>cmd</"
+"replaceable></literal> pode ser escolhida ao definir <literal>DPkg::Tools::"
+"options::<replaceable>cmd</replaceable>::Version</literal> correctamente, "
+"sendo a predefinição a versão 1. Se o APT não suportar a versão requisitada "
+"irá então enviar a informação na versão mais alta que suporta."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+"O descritor de ficheiro a ser usado para enviar a informação pode ser "
+"requisitado com <literal>DPkg::Tools::options::<replaceable>cmd</"
+"replaceable>::InfoFD</literal> o qual usa <literal>0</literal> por "
+"predefinição para a saída standard e está disponível desde a versão 0.9.11. "
+"como confirmação pode ser detectado o suporte para a opção ao observar a "
+"variável de ambiente <envar>APT_HOOK_INFO_FD</envar> que contém o número do "
+"descritor de ficheiro usado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+"O APT muda para este directório (chdir) antes de invocar o &dpkg;, a "
+"predefinição é <filename>/</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+"Estas opções são passadas ao &dpkg-buildpackage; quando compila pacotes, a "
+"predefinição é desactivar a assinatura e produzir todos os binários."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+"Se esta opção for definida, o APT irá chamar <command>dpkg --configure --"
+"pending</command> para permitir ao &dpkg; lidar como todas as configurações "
+"e triggers requisitados. Esta opção é activada por predefinição, mas "
+"desactivá-la pode ser útil se deseja correr o APT múltiplas vezes numa "
+"sequência - ex. numa instalação. Neste cenário você pode desactivar esta "
+"opção em todas excepto na última execução."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr "Opções Periodic e Archives"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+"Os grupos de opções <literal>APT::Periodic</literal> e <literal>APT::"
+"Archives</literal> configuram o comportamento das actualizações periódicas "
+"do APT, o que é feito pelo script <literal>/usr/lib/apt/apt.systemd.daily</"
+"literal>. Veja o cabeçalho deste script para uma breve documentação das suas "
+"opções."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr "Opções de depuração"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+"Activar opções na secção <literal>Debug::</literal> irá causar o envio de "
+"informação de depuração para o fluxo de erros standard do programa "
+"utilizando as bibliotecas do <literal>apt</literal>, ou activar modos "
+"especiais do programa que são principalmente úteis para depurar o "
+"comportamento do <literal>apt</literal>. A maioria destas opções não têm "
+"interesse para o utilizador normal, mas algumas podem ter:"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+"<literal>Debug::pkgProblemResolver</literal> activa mensagens na saída "
+"acerca das decisões tomadas por <literal>dist-upgrade, upgrade, install, "
+"remove, purge</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+"<literal>Debug::NoLocking</literal> desactiva o bloqueio de todos os "
+"ficheiros. Isto pode ser usado para executar algumas operações (por exemplo, "
+"<literal>apt-get -s install</literal>) como um utilizador não root."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+"<literal>Debug::pkgDPkgPM</literal> escreve a linha de comandos actual de "
+"cada vez que o <literal>apt</literal> invoca o &dpkg;."
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+"<literal>Debug::IdentCdrom</literal> desactiva a inclusão de dados statfs em "
+"IDs de CD-ROM."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr "Segue-se uma lista completa de opções de depuração para o apt."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+"Escreve informação relacionada com o acesso a fontes de <literal>cdrom://</"
+"literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+"Escreve informação relacionada com o descarregamento de pacotes usando FTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+"Escreve informação relacionada com o descarregamento de pacotes usando HTTP."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+"Escreve informação relacionada com o descarregamento de pacotes usando HTTPS."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+"Escreve informação relacionada com a verificação de assinaturas "
+"criptográficas usando <literal>gpg</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+"Escreve informação acerca do processo de aceder a colecções de pacotes "
+"armazenados em CD-ROMs."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+"Descreve os processos de resolver dependências de compilação no &apt-get;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+"Escreve cada hash criptográfico que é gerado pelas bibliotecas do "
+"<literal>apt</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+"Não inclui informação de <literal>statfs</literal>, nomeadamente o número de "
+"blocos usados e livres no sistema de ficheiros do CD-ROM, quando gera um ID "
+"para um CD-ROM."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+"Desactiva o bloqueio de todos os ficheiros. Por exemplo, isto irá permitir o "
+"funcionamento de duas instâncias do <quote><literal>apt-get update</"
+"literal></quote> ao mesmo tempo."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+"Regista no log quando os items são adicionados ou removidos da fila de "
+"download global."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+"Escreve mensagens de estado e erros relacionados com a verificação de "
+"checksums e assinaturas criptográficas dos ficheiros descarregados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+"Escreve informação acerca do download e aplicação de diffs de lista de "
+"índice do pacote, e erros relacionados com as diffs de lista de índice do "
+"pacote."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+"Escreve informação relacionada com a aplicação de patch na lista de pacotes "
+"do apt quando se descarrega diffs de índice em vez de índices completos."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+"Regista todas as interacções com os sub-processos que realmente executam os "
+"downloads."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+"Regista no log eventos relacionados com o estado instalado-automaticamente "
+"de pacotes e com a remoção de pacotes não utilizados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+"Gera mensagens de depuração descrevendo quais pacotes estão a ser instalados "
+"automaticamente para resolver dependências. Isto corresponde ao passo de "
+"instalação-automática inicial executado em, ex, <literal>apt-get install</"
+"literal>, e não ao resolvedor de dependências total do <literal>apt</"
+"literal>; veja <literal>Debug::pkgProblemResolver</literal> para isso."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+"Gera mensagens de depuração descrevendo qual pacote está marcado como manter/"
+"instalar/remover enquanto o \"solucionador-de-problemas\" faz o seu "
+"trabalho. Cada adição ou remoção pode activar acções adicionais; elas são "
+"mostradas indentadas dois espaços adicionais sob da entrada original. O "
+"formato de cada linha é <literal>MarkKeep</literal>, <literal>MarkDelete</"
+"literal> ou <literal>MarkInstall</literal> seguido por <literal>package-name "
+"&lt;a.b.c -&gt; d.e.f | x.y.z&gt; (secção)</literal> onde <literal>a.b.c</"
+"literal> é a versão actual do pacote, <literal>d.e.f</literal> é a versão "
+"considerada para instalação e <literal>x.y.z</literal> é a versão mais "
+"recente, mas não considerada para instalação (devido a baixa pontuação). Os "
+"dois últimos podem ser omitidos se não existir nenhum ou for a mesma versão "
+"que aquela instalada. <literal>section</literal> é o nome da secção onde o "
+"pacote aparece."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+"Ao invocar o &dpkg;, escreve com precisão a linha de comandos com a qual "
+"está a ser invocado, com argumentos separados por um caractere de espaço "
+"único."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+"Escreve todos os dados recebidos do &dpkg; no descritor de ficheiro de "
+"estado e quaisquer erros encontrados enquanto os analisa."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+"Gera um rastro do algoritmo que decide a ordem na qual o <literal>apt</"
+"literal> deve passar os pacotes ao &dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+"Escreve mensagens de estado seguindo os passos executados quando invoca o "
+"&dpkg;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr "Escreve a prioridade da cada lista de pacote no arranque."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+"Rastreia a execução do resolvedor de dependências (isto só se aplica ao que "
+"acontece quando é encontrado um problema de dependências complexo)."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+"Mostra uma lista de todos os pacotes instalados com as suas pontuações "
+"calculadas usadas pelo pkgProblemResolver. A descrição do do pacote é a "
+"mesma que é descrita em <literal>Debug::pkgDepCache::Marker</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+"Escreve informação acerca dos fornecedores lida de <filename>/etc/apt/"
+"vendors.list</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+"Mostra os comandos externos que são chamados por hooks do apt. Isto inclui "
+"por exemplo as opções de configuração <literal>DPkg::{Pre,Post}-Invoke</"
+"literal> ou <literal>APT::Update::{Pre,Post}-Invoke</literal>."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Exemplos"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+"&configureindex; é um ficheiro de configuração que mostra valores exemplo "
+"para todas as opções possíveis."
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+msgid "Preference control file for APT"
+msgstr "Ficheiro de controle de preferências para o APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"O ficheiro de preferências do APT <filename>/etc/apt/preferences</filename> "
+"e os ficheiros fragmentados no directório <filename>/etc/apt/preferences.d/</"
+"filename> podem ser usados para controlar quais as versões de pacotes irão "
+"ser seleccionadas para instalação."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Várias versões de um pacote podem estar disponíveis para instalação quando o "
+"ficheiro &sources-list; contém referências a mais do que uma distribuição "
+"(por exemplo, <literal>stable</literal> e <literal>testing</literal>). O APT "
+"atribui uma prioridade a cada versão que está disponível. Sujeito a "
+"constrangimentos de dependências, o <command>apt-get</command> selecciona a "
+"versão com a prioridade mais alta para instalação. As preferências do APT "
+"sobrepõem as prioridades que o APT atribui às versões de pacotes por "
+"predefinição, assim dando controle ao utilizador sobre qual é seleccionado "
+"para instalação."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Podem estar disponíveis várias instâncias da mesma versão de um pacote "
+"quando o ficheiro &sources-list; contém referências a mais do que uma fonte. "
+"Neste caso o <command>apt-get</command> descarrega a instância listada mais "
+"cedo no ficheiro &sources-list;. As preferências do APT não afectam a "
+"escolha da instância, apenas a escolha da versão."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+"As preferências são um poder forte nas mãos de um administrador de sistemas "
+"mas também se podem tornar no seu maior pesadelo se forem usadas sem "
+"cuidado! O APT não irá questionar as preferências, portanto as definições "
+"erradas irão acabar em pacotes não instaláveis ou decisões erradas ao "
+"actualizar pacotes. Irão surgir ainda mais problemas se forem misturadas "
+"múltiplas distribuições sem o perfeito entendimento dos parágrafos "
+"seguintes. Os pacotes incluídos num lançamento específico não são testados e "
+"por isso nem sempre funcionam como esperado nos lançamentos mais antigos ou "
+"recentes ou em conjunto com outros pacotes de lançamentos diferentes. Você "
+"foi avisado."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+"Note que os ficheiros no directório <filename>/etc/apt/preferences.d</"
+"filename> são analisados em ordem alfanumérica ascendente e precisam "
+"obedecer à convenção de nomes seguinte: Os ficheiros ou não têm extensão ou "
+"têm \"<literal>pref</literal>\" na extensão do nome de ficheiro e apenas "
+"contêm caracteres alfanuméricos, traço (-), underscore (_) e ponto (.). Caso "
+"contrário o APT irá escrever um aviso de que ignorou um ficheiro, a menos "
+"que esse ficheiro corresponda a um padrão da lista de configuração "
+"<literal>Dir::Ignore-Files-Silently</literal> - e neste caso será ignorado "
+"em silêncio."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "APT's Default Priority Assignments"
+msgstr "Atribuições de Prioridade Predefinidas do APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr "<command>apt-get install -t testing <replaceable>algum-pacote</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"Senão existir um ficheiro de preferências ou se não existe uma entrada no "
+"ficheiro que se aplique a uma versão particular então a prioridade atribuída "
+"a essa versão é a prioridade da distribuição à qual essa versão pertence. É "
+"possível definir uma distribuição singular, \"o lançamento de destino\", a "
+"qual recebe uma prioridade mais alta que as outras distribuições por "
+"predefinição. O lançamento de destino pode ser definido na linha de comandos "
+"do <command>apt-get</command> ou no ficheiro de configuração do APT "
+"<filename>/etc/apt/apt.conf</filename>. Note que isto tem precedências sobre "
+"qualquer prioridade geral que possa definir no ficheiro <filename>/etc/apt/"
+"preferences</filename> descrito mais tarde, mas não sobre pacotes "
+"especificamente imobilizados. Por exemplo, <placeholder type=\"programlisting"
+"\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Se o lançamento destinado foi especificado, então o APT usa o seguinte "
+"algoritmo para definir as prioridades das versões de um pacote. Atribuir:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 1"
+msgstr "priority 1"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+"para as versões vindas de arquivos cujos ficheiros <filename>Release</"
+"filename> estejam marcados como \"NotAutomatic: yes\" mas <emphasis>não</"
+"emphasis> como \"ButAutomaticUpgrades: yes\" como o arquivo "
+"<literal>experimental</literal> da Debian."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 100"
+msgstr "priority 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+"para a versão que já está instalada (se alguma) e para as versões vindas de "
+"arquivos cujos ficheiros <filename>Release</filename> estejam marcados como "
+"\"NotAutomatic: yes\" e \"ButAutomaticUpgrades: yes\" como o arquivo "
+"backports da Debian desde <literal>squeeze-backports</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 500"
+msgstr "priority 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that do not belong to the target release."
+msgstr "para as versões que não pertencem ao lançamento destinado."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "priority 990"
+msgstr "priority 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "to the versions that belong to the target release."
+msgstr "para as versões que pertencem ao lançamento destinado."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+"A mais alta dessas prioridades cuja descrição coincide com a versão é "
+"especificada para a versão."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Se o lançamento de destino não foi especificado, então o APT simplesmente "
+"atribui prioridade 100 a todas as versões de pacotes instalados e prioridade "
+"500 e todas as versões de pacotes não instalados, à excepção de versões que "
+"venham de arquivos cujos ficheiros <filename>Release</filename> estejam "
+"marcados como \"NotAutomatic: yes\" - estas versões ficam com prioridade 1 "
+"ou prioridade 100 se for marcado adicionalmente como \"ButAutomaticUpgrades: "
+"yes\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"O APT então aplica as seguintes regras, listadas em ordem de precedência, "
+"para determinar qual versão de um pacote deve instalar."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Nunca faz downgrade a menos que uma versão disponível exceda 1000. "
+"(\"Downgrading\" é instalar uma versão menos recente de um pacote no lugar "
+"de uma versão mais recente. Note que nenhuma das prioridades predefinidas do "
+"APT excede 1000; tais altas prioridades só podem ser definidas no ficheiro "
+"de preferências. Note também que fazer o downgrade a um pacote pode ser "
+"arriscado.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "Install the highest priority version."
+msgstr "Instala a versão de prioridade mais alta."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Se duas ou mais versões tiverem a mesma prioridade, instala a mais recente "
+"(isto é, aquela com o número de versão mais alto)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"Se duas ou mais versões têm a mesma prioridade e o mesmo número de versão "
+"mas ou os pacotes diferem em alguns dos seus metadados ou a opção <literal>--"
+"reinstall</literal> é fornecida, instala a que foi desinstalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Numa situação típica, a versão instalada de um pacote (prioridade 100) não é "
+"tão recente como uma das versões disponíveis nas fontes listadas no ficheiro "
+"&sources-list; (prioridade 500 ou 990). Então o pacote será actualizado "
+"quando for executado <command>apt-get install <replaceable>algum-pacote</"
+"replaceable></command> ou <command>apt-get upgrade</command>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Mais raramente, a versão instalada de um pacote é <emphasis>mais</emphasis> "
+"recente que qualquer das outras versões disponíveis. O pacote não será "
+"regredido para uma versão inferior quando for executado <command>apt-get "
+"install <replaceable>algum-pacote</replaceable></command> ou <command>apt-"
+"get upgrade</command>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"Por vezes a versão instalada de um pacote é mais recente que a versão "
+"pertencente ao lançamento de destino, mas não tão recente que uma versão "
+"pertencente a alguma outra distribuição. Tal pacote será de facto "
+"actualizado quando for executado <command>apt-get install <replaceable>algum-"
+"pacote</replaceable></command> ou <command>apt-get upgrade</command>, porque "
+"pelo menos <emphasis>uma</emphasis> das versões disponíveis tem uma "
+"prioridade mais alta que a versão instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "The Effect of APT Preferences"
+msgstr "O Efeito das Preferências do APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"O ficheiro de preferências do APT permite ao administrador do sistema "
+"controlar a atribuição de prioridades. O ficheiro consiste em um ou mais "
+"registos de multi-linhas separados por linhas vazias. Os registos podem ter "
+"um ou dois formatos, um formato específico e um formato geral."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"O formato específico atribui um prioridade (um \"Pin-Priority\") a um ou "
+"mais pacotes específicos e versão específica ou série de versões. Por "
+"exemplo, o seguinte registo atribui uma alta prioridade a todas as versões "
+"do pacote <filename>perl</filename> cujo número de versão começa com "
+"\"<literal>&good-perl;</literal>\". Múltiplos pacotes podem ser separados "
+"por espaços."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"O formato geral atribui uma prioridade a todas as versões de pacotes numa "
+"dada distribuição (isto é, a todas as versões de pacotes que estão listados "
+"num certo ficheiro <filename>Release</filename>) ou a todas as versões de "
+"pacotes vindos de um site de Internet particular, como identificado pelo "
+"nome de domínio totalmente qualificado do site."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Esta entrada general-form no ficheiro de preferências do APT aplica-se "
+"apenas a grupos de pacotes. Por exemplo, o seguinte registo atribui uma alta "
+"prioridade a todas as versões de pacotes disponíveis a partir de um site "
+"local."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+"Uma nota de atenção: a palavra chave usada aqui é \"<literal>origin</literal>"
+"\" que pode ser usada para corresponder a um nome de máquina. O seguinte "
+"registo irá atribuir uma alta prioridade a todas as versões disponíveis do "
+"servidor identificadas pelo nome de máquina \"ftp.de.debian.org\""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"Isto <emphasis>não</emphasis> deve ser confundido com a Origem de uma "
+"distribuição como especificada num ficheiro <filename>Release</filename>. O "
+"que representa a etiqueta \"Origin:\" num ficheiro <filename>Release</"
+"filename> não é um endereço de Internet mas um nome de autor ou marca, tal "
+"como \"Debian\" ou \"Ximian\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"O seguinte registo atribui uma baixa prioridade a todas as versões de "
+"pacotes pertencentes a qualquer distribuição cujo nome de Arquivo é "
+"\"<literal>unstable</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"O seguinte registo atribui uma alta prioridade a todas as versões de pacotes "
+"pertencentes a qualquer distribuição cujo nome de código é "
+"\"<literal>&debian-testing-codename;</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"O seguinte registo atribui alta prioridade a todas as versões de pacotes "
+"pertencentes a qualquer lançamento cujo nome de Arquivo é \"<literal>stable</"
+"literal>\" e cujo número de Versão de lançamento é \"<literal>&debian-stable-"
+"version;</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+"O efeito do operador vírgula é semelhante a um \"e\" lógico. Todas as "
+"condições têm de ser satisfeitas para o pin corresponder. Há uma excepção: "
+"Para qualquer tipo de condição (tal como duas condições \"a\"), apenas a "
+"última de tais condições é verificada."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr "Expressões regulares e sintaxe &glob;"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+"O APT também suporta \"pinning\" por expressões &glob;, e expressões "
+"regulares rodeadas por barras. Por exemplo, o seguinte designa a prioridade "
+"de 500 a todos os pacotes de experimental onde o nome começa com gnome (como "
+"uma expressão tipo &glob;) ou contém a palavra kde (como uma expressão "
+"regular extensa do POSIX rodeada de barras)."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+"A regra para essas expressões é que elas podem ocorrer em qualquer sítio "
+"onde uma string pode ocorrer. Assim, o seguinte pin designa a prioridade 990 "
+"a todos os pacotes de um lançamento que começa com &ubuntu-codename;."
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+"Se ocorrer uma expressão regular num campo <literal>Package</literal>, o "
+"comportamento é o mesmo como se esta expressão regular fosse substituída por "
+"uma lista de todos os nomes de pacotes a que ela coincide. No entanto não "
+"está decidido se isto irá mudar no futuro; assim você deve sempre listar os "
+"pins \"wild-card\" primeiro, para que depois os pins específicos os "
+"sobreporem. O padrão \"<literal>*</literal>\" num campo Package não é "
+"considerado uma expressão &glob; em si próprio."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "How APT Interprets Priorities"
+msgstr "Como o APT Interpreta as Prioridades"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"As prioridades (P) atribuídas no ficheiro de preferências do APT têm de ser "
+"inteiros positivos ou negativos. Elas são interpretadas como o seguinte "
+"(falando grosso):"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"provoca que uma versão seja instalada mesmo que isso constitua uma redução "
+"na versão do pacote (downgrade)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"provoca que uma versão seja instalada mesmo que não venha do lançamento de "
+"destino, a menos que a versão instalada seja mais recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"provoca que uma versão seja instalada a menos que exista uma versão "
+"disponível pertencente ao lançamento de destino ou se a versão instalada é "
+"mais recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"provoca que uma versão seja instalada a menos que exista uma versão "
+"disponível pertencente a outra distribuição ou se a versão instalada é mais "
+"recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"provoca que uma versão seja instalada apenas se não existir nenhuma versão "
+"instalada do pacote"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "prevents the version from being installed"
+msgstr "previne a instalação da versão"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr "P = 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr "tem comportamento não definido, não o utilize."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"O primeiro registo de forma-especifica que corresponda a uma versão de "
+"pacote disponível determina a prioridade da versão do pacote. Falhando isso, "
+"a prioridade do pacote é definida como o máximo de todas as prioridades "
+"definidas por registos de forma-genérica que correspondam à versão. Os "
+"registos definidos que usem padrões diferentes de \"*\" no campo Pin são "
+"tratados como registos de forma-especifica."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Por exemplo, suponha que o ficheiro de preferências do APT contém os três "
+"registos apresentados atrás:"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr "Então:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"Será instalada a versão mais recente disponível do pacote <literal>perl</"
+"literal>, desde que o número da versão comece com \"<literal>&good-perl;</"
+"literal>\". Se <emphasis>qualquer</emphasis> versão &good-perl;* do "
+"<literal>perl</literal> estiver disponível e a versão instalada for &bad-"
+"perl;*, então será feito um downgrade ao <literal>perl</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Uma versão de qualquer pacote que não seja o <literal>perl</literal> e que "
+"esteja disponível a partir do sistema local tem prioridade sobre outras "
+"versões, mesmo versões que pertencem ao lançamento de destino."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"Uma versão de um pacote cuja origem não é o sistema local mas qualquer outro "
+"site listado em &sources-list; e o qual pertence a uma distribuição "
+"<literal>unstable</literal> apenas é instalado se for seleccionado para "
+"instalação e se nenhuma versão do pacote já estiver instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Determination of Package Version and Distribution Properties"
+msgstr "Determinação da Versão do Pacote e Propriedades da Distribuição"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"As localizações listadas no ficheiro &sources-list; devem fornecer os "
+"ficheiros <filename>Packages</filename> e <filename>Release</filename> para "
+"descrever os pacotes disponíveis nessa localização."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"O ficheiro <filename>Packages</filename> é normalmente encontrado no "
+"directório <filename>.../dists/<replaceable>nome-da-distribuição</"
+"replaceable>/<replaceable>componente</replaceable>/"
+"<replaceable>arquitectura</replaceable></filename>: por exemplo, "
+"<filename>.../dists/stable/main/binary-i386/Packages</filename>. Consiste "
+"numa série de registos de várias linhas, um para cada pacote disponível "
+"nesse directório. Apenas duas linhas em cada registo são relevantes para "
+"definir prioridades do APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Package:</literal> line"
+msgstr "a linha <literal>Package:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the package name"
+msgstr "fornece o nome do pacote"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Version:</literal> line"
+msgstr "a linha <literal>Version:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "gives the version number for the named package"
+msgstr "fornece o número de versão do pacote nomeado"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"O ficheiro <filename>Release</filename> fica normalmente no directório "
+"<filename>.../dists/<replaceable>nome da distribuição</replaceable></"
+"filename>: por exemplo, <filename>.../dists/stable/Release</filename>, ou "
+"<filename>.../dists/&debian-stable-codename;/Release</filename>. Consiste "
+"num único registo de várias linhas que se aplica a <emphasis>todos</"
+"emphasis> os pacotes na árvore de directórios sob o seu pai. Ao contrário do "
+"ficheiro <filename>Packages</filename>, quase todas as linhas num ficheiro "
+"<filename>Release</filename> são relevantes para definir as prioridades do "
+"APT:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "a linha <literal>Archive:</literal> ou <literal>Suite:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"nomeia o arquivo ao qual pertencem todos os pacotes na árvore de "
+"directórios. Por exemplo, a linha \"Archive: stable\" ou \"Suite: stable\" "
+"especifica que todos os pacotes na árvore de directórios abaixo do pai do "
+"ficheiro <filename>Release</filename> estão num arquivo <literal>stable</"
+"literal>. Especificar este valor no ficheiro de preferências do APT irá "
+"requerer a linha:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Codename:</literal> line"
+msgstr "a linha <literal>Codename:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"nomeia o nome de código a qual todos os pacotes na árvore de directórios "
+"pertencem. Por exemplo, a linha \"Codename: &debian-testing-codename;\" "
+"especifica que todos os pacotes na árvore de directórios abaixo do pai do "
+"ficheiro <filename>Release</filename> pertencem a uma versão chamada "
+"<literal>&debian-testing-codename;</literal>. Especificar este valor no "
+"ficheiro de preferências do APT requer a linha:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"nomeia a versão de lançamento. Por exemplo, os pacotes na árvore podem "
+"pertencer ao lançamento de Debian versão &debian-stable-version;. Note que "
+"não há normalmente um número de versão para as distribuições "
+"<literal>testing</literal> e <literal>unstable</literal>. porque ainda não "
+"foram lançadas. Especificar isto no ficheiro de preferências do APT irá "
+"requerer uma das seguintes linhas:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Component:</literal> line"
+msgstr "a linha <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"nomeia o componente de licenciamento associado com os pacotes na árvore de "
+"directórios do ficheiro <filename>Release</filename>. Por exemplo, a linha "
+"\"Component: main\" especifica que todos os pacotes na árvore de directórios "
+"são do componente <literal>main</literal>, o que implica que estão "
+"licenciados sob os termos listados em Debian Free Software Guidelines. "
+"Especificar este componente no ficheiro de preferências do APT irá requerer "
+"a linha:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Origin:</literal> line"
+msgstr "a linha <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"nomeia a originador dos pacotes na árvore de directórios do ficheiro "
+"<filename>Release</filename>. Geralmente, isto é <literal>Debian</literal>. "
+"Especificar esta etiqueta no ficheiro de preferências do APT irá requerer a "
+"linha:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "the <literal>Label:</literal> line"
+msgstr "a linha <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"nomeia a etiqueta dos pacotes na árvore de directórios do ficheiro "
+"<filename>Release</filename>. Geralmente, isto é <literal>Debian</literal>. "
+"Especificar esta etiqueta no ficheiro de preferências do APT irá requerer a "
+"linha:"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Todos os ficheiros <filename>Packages</filename> e <filename>Release</"
+"filename> obtidos das localizações listadas no ficheiro &sources-list; são "
+"armazenados no directório <filename>/var/lib/apt/lists</filename>, ou no "
+"ficheiro nomeado pela variável <literal>Dir::State::Lists</literal> no "
+"ficheiro <filename>apt.conf</filename>. Por exemplo, o ficheiro "
+"<filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-"
+"i386_Release</filename> contém o ficheiro <filename>Release</filename> "
+"obtido do site <literal>debian.lcs.mit.edu</literal> para ficheiros da "
+"arquitectura <literal>binary-i386</literal> do componente <literal>contrib</"
+"literal> da distribuição <literal>unstable</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "Linhas Opcionais num Registo de Preferências do APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"Cada registo no ficheiro de preferências do APT por começar opcionalmente "
+"com uma ou mais linhas começadas com a palavra <literal>Explanation:</"
+"literal>. Isto disponibiliza um espaço para comentários."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Stable"
+msgstr "Acompanhando Stable"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explicação: Desinstala ou não instala quaisquer versões de pacotes originais\n"
+"Explicação: Debian para além daquelas da distribuição stable\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O seguinte ficheiro de preferências do APT irá fazer com que o APT atribua "
+"uma prioridade mais alta que o predefinido (500) a todos as versões de "
+"pacotes que pertencem a uma distribuição <literal>stable</literal> e uma "
+"prioridade proibitivamente baixa a versões de pacotes pertencentes a outras "
+"distribuições <literal>Debian</literal>. <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"apt-get install <replaceable>nome-do-pacote</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Com um ficheiro &sources-list; apropriado e o ficheiro de preferências "
+"acima, qualquer dos seguintes comandos irá fazer com que o APT actualize "
+"para as versões <literal>stable</literal> mais recentes. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr "apt-get install <replaceable>pacote</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O seguinte comandos irá fazer com que o APT actualize o pacote especificado "
+"para a versão mais recente da distribuição <literal>testing</literal>; o "
+"pacote não será actualizado de novo a menos que seja executado este comando "
+"outra vez. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking Testing or Unstable"
+msgstr "Acompanhando Testing ou Unstable"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O seguinte ficheiro de preferências do APT irá fazer com que o APT atribua "
+"uma prioridade alta a versões de pacotes da distribuição <literal>testing</"
+"literal>, uma prioridade mais baixa a versões de pacotes da distribuição "
+"<literal>unstable</literal>, e uma prioridade proibitivamente baixa a "
+"versões de pacotes de outras distribuições <literal>Debian</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Com um ficheiro &sources-list; apropriado e o ficheiro de preferências "
+"acima, qualquer dos seguintes comandos irá fazer com que o APT actualize "
+"para as versões <literal>testing</literal> mais recentes. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>pacote</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O comando seguinte irá fazer com que o APT actualize o pacote especificado "
+"para a versão mais recente da distribuição <literal>unstable</literal>. "
+"Posteriormente, o <command>apt-get upgrade</command> irá actualizar o pacote "
+"para a versão <literal>testing</literal> mais recente se essa for mais "
+"recente que a versão instalada, caso contrário, para a versão "
+"<literal>unstable</literal> mais recente se essa for mais recente que a "
+"versão instalada. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr "Acompanhando a evolução de um nome de código de lançamento"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Explicação: Desinstala ou não instala nenhumas versões de pacotes originais Debian\n"
+"Explicação: para além daquelas da distribuição com nome de código &debian-testing-codename; ou sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explicação: Debian unstable tem sempre o nome de código sid\n"
+"Package: *\n"
+"Pin: release a=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O seguinte ficheiro de preferências do APT irá fazer com que o APT atribua "
+"uma prioridade mais alta que a predefinida (500) a todas as versões de "
+"pacotes pertencentes a um nome de código especificado de uma distribuição "
+"com uma prioridade proibitivamente baixa a versões de pacotes pertencentes a "
+"outras distribuições, nomes de código ou arquivos <literal>Debian</literal>. "
+"Note que com estas preferências o APT irá seguir a migração de um lançamento "
+"a partir do arquivo <literal>testing</literal> para <literal>stable</"
+"literal> e mais tarde <literal>oldstable</literal>. Se você que seguir por "
+"exemplo o progresso em <literal>testing</literal> não obstante as alterações "
+"do nome de código, você deve usar as configurações exemplo acima. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Com um ficheiro &sources-list; apropriado e o ficheiro de preferências "
+"acima, qualquer dos seguintes comandos fará com que o APT actualize para a "
+"versão mais recente no lançamento com nome de código <literal>&debian-"
+"testing-codename;</literal>. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>pacote</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O seguinte comando irá fazer com que o APT actualize o pacote especificado "
+"para a versão mais recente da distribuição <literal>sid</literal>. "
+"Posteriormente, <command>apt-get upgrade</command> irá actualizar o pacote "
+"para a versão <literal>&debian-testing-codename;</literal> mais recente se "
+"essa for mais recente que a versão instalada, caso contrário, para a versão "
+"<literal>sid</literal> mais recente se essa for mais recente que a versão "
+"instalada. <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr "Lista das fontes de dados APT configuradas"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+"A lista de fontes <filename>/etc/apt/sources.list</filename> e os ficheiros "
+"contidos em <filename>/etc/apt/sources.list.d/</filename> estão desenhados "
+"para suportar qualquer número de fontes activas e uma variedade de meios de "
+"fontes. Os ficheiros listam uma fonte por linha (estilo-uma-linha) ou contêm "
+"múltiplas estrofes definindo uma ou mais fontes por estrofe (estilo deb822), "
+"com a fonte de maior preferência listada em primeiro lugar (no caso de uma "
+"versão única estar disponível a partir de mais do que uma fonte). A "
+"informação disponível a partir das fontes configuradas é obtida pelo "
+"<command>apt-get update</command> (ou por um comando equivalente de outro "
+"front-end do APT)."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr "sources.list.d"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+"O directório <filename>/etc/apt/sources.list.d</filename> disponibiliza um "
+"modo de adicionar entradas na sources.list em ficheiros separados. São "
+"permitidos dois formatos diferentes de ficheiro como descrito nas próximas "
+"duas secções. Os nomes de ficheiros precisam de ter ou a extensão <filename>."
+"list</filename> ou <filename>.sources</filename> dependendo do formato "
+"contido. Os nomes dos ficheiros podem apenas conter letras (a-z e A-Z), "
+"dígitos (0-9), e os caracteres underscore (_), menos (-) e ponto (.). De "
+"outro modo o APT irá escrever um aviso de que ignorou um ficheiro, a menos "
+"que esse ficheiro coincida com um padrão na lista de configuração "
+"<literal>Dir::Ignore-Files-Silently</literal> - que neste caso serão "
+"ignorados em silêncio."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr "Formato Estilo-Uma-Linha"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+"Os ficheiros neste formato têm a extensão <filename>.list</filename>. Cada "
+"linha que especifica uma fonte começa com um tipo (ex. <literal>deb-src</"
+"literal>) seguido de opções e argumentos para esse tipo. Entradas "
+"individuais não podem ser continuadas até a linha seguinte. As linhas vezias "
+"são ignoradas,e um caractere <literal>#</literal> em qualquer pondo de uma "
+"linha marca o restante da linha como um comentário. Consequentemente uma "
+"entrada pode ser desactivada ao comentar a linha inteira. Se for preciso "
+"fornecer opções, estas são separadas por espaços e elas todas juntas são "
+"posicionas entre parênteses rectos (<literal>[]</literal>) incluídos na "
+"linha após o tipo e separado dele por um espaço. Se uma opção permitir "
+"vários valores estes são separados entre eles com uma vírgula (<literal>,</"
+"literal>). Um nome de opção é separado do(s) seu(s) valor(es) por um sinal "
+"de igual (<literal>=</literal>). Opções de multi-valor também têm <literal>-"
+"=</literal> e <literal>+=</literal> como separadores, os quais em vez de "
+"substituir a predefinição pelos valor(es) fornecidos modificam os valor(es) "
+"predefinidos para remover ou incluir os valores fornecidos."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+"Este é o formato tradicional e suportado por todas as versões do apt. Note "
+"que nem todas as opções descritas abaixo são suportadas por todas as versões "
+"do apt. Note também que algumas aplicações mais antigas que analisem este "
+"formato por si mesmas podem não esperar encontrar opções pois estas não eram "
+"comuns antes da introdução do suporte a multi-arquitecturas."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr "Formato Estilo-deb822"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+"Os ficheiros neste formato têm a extensão <filename>.sources</filename>. O "
+"formato é semelhante em sintaxe a outros ficheiros usados por Debian e seus "
+"derivados, tais como os ficheiros de meta-dados que o apt irá descarregar "
+"das fontes configuradas ou o ficheiro <filename>debian/control</filename> de "
+"um pacote fonte Debian. As entradas individuais são separadas por uma linha "
+"vazia; as linha vazias adicionais são ignoradas, e um caractere <literal>#</"
+"literal> no inicia da linha marca a linha inteira como um comentário. Uma "
+"entrada pode assim ser desactivada ao comentar cada linha que pertence à "
+"estrofe, mas é geralmente mais fácil adicionar o campo \"Enabled: no\" à "
+"estrofe para desactivar a entrada. Removendo o campo ou defini-lo para \"yes"
+"\" volta a activá-la. As opções têm a mesma sintaxe que todos os outros "
+"campos. Um nome de campo é separado por dois pontos (<literal>:</literal>) e "
+"opcionalmente por espaços dos seus valor(es). Note especialmente que "
+"múltiplos valores são separados por espaços em branco (como espaços, tabs e "
+"novas-linhas), não por vírgulas como no formado de uma-linha. Os campos de "
+"multi-valor como <literal>Architectures</literal> também têm "
+"<literal>Architectures-Add</literal> e <literal>Architectures-Remove</"
+"literal> para modificar o valor predefinido em vez de o substituir."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+"Este é um novo formato suportado pelo apt desde versão 1.1. As versões "
+"anteriores ignoravam tais ficheiros com uma mensagem descrita antes. É "
+"objectivo tornar gradualmente este formato no formato predefinido, "
+"descontinuando o anteriormente descrito formato de estilo-uma-linha, pois é "
+"mais fácil de criar, aumentar e modificar para as pessoas e para as máquinas "
+"especialmente se estiverem envolvidas muitas fontes e/ou opções. Os "
+"desenvolvedores que estão a trabalhar com e/ou a analisar fontes do apt são "
+"altamente encorajados a adicionar suporte a este formato e a contactar a "
+"equipa do APT para coordenar e partilhar este trabalho. Os utilizadores "
+"podem já livremente adoptar este formato, mas podem encontrar problemas com "
+"software que ainda não suporte o formato."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr "Os Tipos deb e deb-src: Formato Geral"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+"O tipo <literal>deb</literal> descreve um arquivo Debian típico de dois "
+"níveis, <filename>distribution/component</filename>. A "
+"<literal>distribution</literal> é geralmente um nome de uma suite como "
+"<literal>stable</literal> ou <literal>testing</literal> ou um nome de código "
+"como <literal>&debian-stable-codename;</literal> ou <literal>&debian-testing-"
+"codename;</literal> enquanto que componente é um de <literal>main</literal>, "
+"<literal>contrib</literal> ou <literal>non-free</literal>. O tipo "
+"<literal>deb-src</literal> faz referência a um código fonte de distribuição "
+"Debian no mesmo formato que o tipo <literal>deb</literal>. É necessária uma "
+"linha <literal>deb-src</literal> para obter índices das fontes."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+"O formato para duas entradas estilo-uma-linha usando os tipos <literal>deb</"
+"literal> e <literal>deb-src</literal> é:"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+"Em alternativa, a entrada equivalente em estilo deb822 parece-se com isto: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+"O URI para o tipo <literal>deb</literal> tem de especificar a base da "
+"distribuição Debian, a partir do qual o APT irá encontrar a informação que "
+"precisa. <literal>suite</literal> pode especificar um caminho exacto, que no "
+"caso os componente têm de ser omitidos e <literal>suite</literal> deve "
+"terminar com uma barra (<literal>/</literal>). Isto é útil para o caso de "
+"apenas ser de interesse um sub-directório particular do arquivo denotado "
+"pelo URI. Se <literal>suite</literal> não especificar um caminho exacto, "
+"pelo menos um <literal>component</literal> tem de estar presente."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+"<literal>suite</literal> também pode conter uma variável. <literal>$(ARCH)</"
+"literal> a qual se expande à arquitectura Debian (tal como <literal>amd64</"
+"literal> ou <literal>armel</literal>) usada no sistema. Isto permite que "
+"seja usados ficheiros <filename>sources.list</filename> independentes da "
+"arquitectura. Em geral, isto é apenas de interesse quando se especifica um "
+"caminho exacto; de outro modo o <literal>APT</literal> irá gerar "
+"automaticamente um URI com a arquitectura actual."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+"Especialmente no formato de estilo uma-linha como apenas pode ser "
+"especificada por linha uma distribuição, pode ser necessário ter várias "
+"linhas para o mesmo URI, se só for desejado um sub-conjunto de todas as "
+"distribuições e componentes dessa localização. O APT irá ordenar a lista de "
+"URI após ter gerado internamente um conjunto completo, e irá desabar as "
+"várias referências à mesma máquina na Internet, por exemplo, numa única "
+"ligação, para que não estabeleça uma ligação ineficiente, a feche, faça "
+"outra coisa, e depois volte a estabelecer ligação à mesma máquina. O APT "
+"também paraleliza ligações a máquinas diferentes para lidar mais "
+"eficientemente com sites com largura de banda baixa."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+"É importante listar as fontes por ordem de preferência, com a fonte mais "
+"preferida listada em primeiro lugar. Tipicamente isto irá resultar numa "
+"ordenação por velocidades desde o mais rápido até ao mais lento (CD-ROM "
+"seguido por máquinas numa rede local, seguido por máquinas distantes na "
+"Internet, por exemplo)."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr "&sourceslist-list-format;"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr "&sourceslist-sources-format;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Como um exemplo, as fontes da sua distribuição podem-se parecer com isto no "
+"formato estilo uma-linha: <placeholder type=\"literallayout\" id=\"0\"/> ou "
+"com isto no formato estilo deb822: <placeholder type=\"literallayout\" id="
+"\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr "Os tipos deb e deb-src: Opções"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+"Cada entrada de fonte pode ter opções especificas para modificar qual fonte "
+"é acedida e como os dados são adquiridos dela. O formato, sintaxe e nomes "
+"das opções varia entre os formatos de estilo-uma-linha e estilo-deb822 como "
+"descrito, mas estes não têm as mesmas opções disponíveis. Para simplificar "
+"listamos o nome-de-campo deb822 e disponibilizamos o nome de uma-linha entre "
+"parênteses. Lembre-se que além de definir explicitamente opções de multi-"
+"valor, existe também a opção de modificá-os com base na predefinição, mas "
+"não estamos a listar explicitamente esses nomes aqui. As opções não "
+"suportadas são ignoradas em silêncio por todas as versões do APT."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+"<option>Architectures</option> (<option>arch</option>) é uma opção multi-"
+"valor que define para quais arquitecturas deve ser descarregada a "
+"informação. Se esta opção não for definida é todas as arquitecturas como "
+"definido pela opção de configuração <option>APT::Architectures</option>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+"<option>Languages</option> (<option>lang</option>) é uma opção multi-valor "
+"que define para quais linguagens deve ser descarregada informação tal como "
+"as descrições de pacotes traduzidas. Se esta opção for definida a "
+"predefinição é todas as linguagens como definido pela opção de configuração "
+"<option>Acquire::Languages</option>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+"<option>Targets</option> (<option>target</option>) é uma opção multi-valor "
+"que define quais alvos de download o apt irá tentar adquirir a partir desta "
+"fonte. Se não for especificado, o valor predefinido é definido pelo scope de "
+"configuração <option>Acquire::IndexTargets</option> (os alvos são "
+"especificados pelo seu nome no campo <literal>Created-By</literal>). "
+"Adicionalmente, pode-se activar ou desactivar alvos ao usar campo "
+"<literal>Identifier</literal> como uma opção com um valor booleano em vez de "
+"se usar esta opção multi-valor."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+"<option>PDiffs</option> (<option>pdiffs</option>) é um valor sim/não que "
+"controla se o APT deve tentar usar PDiffs para actualizar índices antigos em "
+"vez de descarregar totalmente novos índices. O valor desta opção é ignorado "
+"se o repositório não anunciar a disponibilidade de PDiffs. Usa por "
+"predefinição o valor da opção com o mesmo nome para um ficheiro índice "
+"específico definido no scope <option>Acquire::IndexTargets</option>, o qual "
+"usa por predefinição o valor da opção de configuração <option>Acquire::"
+"PDiffs</option> o qual usa por predefinição <literal>yes</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+"<option>By-Hash</option> (<option>by-hash</option>) pode ter o valor "
+"<literal>yes</literal>, <literal>no</literal> ou <literal>force</literal> e "
+"controlam se o APT deve tentar obter índices via um URL construído a partir "
+"de um hashsum do ficheiro esperado em vez de usar um nome de ficheiro "
+"estável e bem conhecido do índice. Usar isto pode evitar erros de "
+"correspondência de hashsum, mas requer um mirror que suporte. Um valor "
+"<literal>yes</literal> ou <literal>no</literal> activa/desactiva o uso desta "
+"funcionalidade se esta fonte indicar suporte para tal, enquanto "
+"<literal>force</literal> irá activar a funcionalidade independentemente do "
+"que a fonte indique. Recorre à predefinição do valor da opção com o mesmo "
+"nome para um ficheiro index específico definido no scope <option>Acquire::"
+"IndexTargets</option>, que o próprio usa por predefinição o valor da opção "
+"de configuração <option>Acquire::By-Hash</option> a qual é predefinida para "
+"<literal>yes</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+"Mais ainda, existem opções que se definidas afectam <emphasis>todas</"
+"emphasis> as fontes com o mesmo URL e Suite, então elas têm de ser definidas "
+"em todas as tais entradas e não podem variar entre componentes diferentes. O "
+"APT irá tentar detectar e terminar em erro em tais anomalias."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) e <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) são valores booleanos os todos são predefinidos com <literal>no</"
+"literal>. Se definidos para <literal>yes</literal> eles contornam partes de "
+"&apt-secure; e por isto não devem ser usados de forma leviana!"
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+"<option>Trusted</option> (<option>trusted</option>) é um valor de três "
+"estados o qual é predefinido para o APT decidir se uma fonte é de confiança "
+"ou se levem ser activados avisos antes de, por ex, pacotes serem instalados "
+"a partir dessa fonte. Esta opção pode ser usada para sobrepor essa decisão. "
+"O valor <literal>yes</literal> diz ao APT que deve sempre considerar essa "
+"fonte como de confiança, mesmo que não aprove nas verificações de "
+"autenticação. Desactiva partes de &apt-secure;, e portanto apenas deve ser "
+"usada num contexto local e de confiança (e se assim for mesmo) pois caso "
+"contrário a segurança perde-se. O valor <literal>no</literal> faz o aposto, "
+"fazendo com que a fonte seja lidada como não confiável mesmo que as "
+"verificações de autenticação passem com sucesso. O valor predefinido não "
+"pode ser regulado explicitamente."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+"<option>Signed-By</option> (<option>signed-by</option>) é uma opção para "
+"requerer a um repositório para passar a verificação &apt-secure; com um "
+"certo conjunto de chaves em vez das chaves de tudo confiança que o apt tem "
+"configurado. É especificada como uma lista de caminhos absolutos para "
+"ficheiros de chaveiro (têm de estar acessíveis e legíveis para o utilizador "
+"do sistema <literal>_apt</literal>, portanto assegure que todos têm "
+"permissões de leitura ao ficheiro) e impressões digitais de chaves para "
+"seleccionar a partir destes chaveiros. Se não forem especificados nenhuns "
+"ficheiros chaveiro, o predefinido é o chaveiro <filename>trusted.gpg</"
+"filename> e todos os chaveiros no directório <filename>trusted.gpg.d/</"
+"filename> (veja <command>apt-key fingerprint</command>). Se não for "
+"especificada nenhuma impressão digital, são seleccionadas todas as chaves "
+"nos chaveiros. Uma impressão digital irá também aceitar todas as assinaturas "
+"por uma sub-chave dessa chave. Se isto não for desejado pode ser adicionado "
+"um ponto de exclamação (<literal>!</literal>) à impressão digital para "
+"desactivar este comportamento. A opção usa por predefinição o valor da opção "
+"com o mesmo nome se for definida no ficheiro <filename>Release</filename> "
+"previamente adquirido deste repositório (apenas impressões digitais podem "
+"ser especificadas lá totalmente). Caso contrário, todas as chaves nos "
+"chaveiros de confiança são consideradas assinantes válidos para este "
+"repositório."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) é "
+"um valor yes/no que controla se o APT deverá tentar detectar ataques de "
+"repetição. Um criador de repositório pode declarar uma hora limite para os "
+"dados disponibilizados no repositório serem considerados como válidos, e se "
+"esta hora for atingida, e nenhuns novos dados forem fornecidos, os dados são "
+"considerados expirados e é provocado um erro. Para além de aumentar a "
+"segurança, pois um atacante malicioso não pode enviar dados antigos "
+"eternamente para impedir um utilizador de actualizar para uma nova versão, "
+"isto também ajuda os utilizadores a identificar mirrors que não estão mais "
+"actualizados. No entanto, alguns repositórios tais como os arquivos "
+"históricos que não são mais actualizados propositadamente, assim esta "
+"verificação pode ser desactivada ao definir esta opção para <literal>no</"
+"literal>. Usa por predefinição o valor da opção de configuração "
+"<option>Acquire::Check-Valid-Until</option> a qual ela própria usa por "
+"predefinição <literal>yes</literal>."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) e "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) podem "
+"ser usadas para elevar ou baixar o período de tempo em segundos no qual os "
+"dados deste repositório são considerados válidos. -Max pode ser "
+"especialmente útil para definir o sue próprio valor se o repositório não "
+"disponibilizar um campo Valid-Until no seu ficheiro Release, enquanto -Min "
+"pode ser usado para aumentar o tempo válido em mirrors raramente "
+"actualizados (locais) de um arquivo mais frequentemente actualizado mas "
+"menos acessível (o qual está também em sources.list) em vez de desactivar "
+"completamente a verificação. Usa por predefinição o valor das opções de "
+"configuração <option>Acquire::Min-ValidTime</option> and <option>Acquire::"
+"Max-ValidTime</option> que estão ambas não definidas por predefinição."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+"<option>Check-Date</option> (<option>check-date</option>) é um valor yes/no "
+"que controla se o APT deve considerar a hora da máquina correcta e assim "
+"executar as verificações relacionadas com horas, tal como verificar que um "
+"ficheiro Release não veio do futuro. Desactivá-lo também desactiva a opção "
+"<option>Check-Valid-Until</option> mencionada em cima."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controla "
+"quão longe do futuro um repositório pode estar. Usa por predefinição o valor "
+"da opção de configuração <option>Acquire::Max-FutureTime</option> a qual é "
+"10 segundo por predefinição."
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) determina "
+"o caminho para o ficheiro InRelease, relativamente à posição normal de um "
+"ficheiro <filename>InRelease</filename>. Por predefinição, esta opção não "
+"está definida e o APT irá tentar obter um <filename>InRelease</filename> ou, "
+"se isso falhar, um ficheiro <filename>Release</filename> e o seu ficheiro "
+"associado <filename>Release.gpg</filename>. Ao definir esta opção, será "
+"tentado o caminho especificado em vez do ficheiro InRelease, e o recurso a "
+"ficheiros <filename>Release</filename> será desactivado."
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr "Especificação da URI"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr "Os tipos de URI actualmente reconhecidos são:"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr "(&apt-transport-http;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+"O esquema http especifica um servidor HTTP para um arquivo e o método mais "
+"comum usado. O URI pode incluir directamente informação de login se o "
+"arquivo o requerer, mas deve ser preferível o uso de &apt-authconf;. O "
+"método também suporta proxies SOCKS5 e HTTP(S) sejam configurados via "
+"configuração específica do apt ou especificada pela variável de ambiente "
+"<envar>http_proxy</envar> no formato (assumindo um proxy HTTP que requer "
+"autenticação) <replaceable>http://user:pass@server:port/</replaceable>. Os "
+"detalhes de autenticação para proxies também pode ser fornecidos via &apt-"
+"authconf;."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+"Note que estas formas de autenticação são inseguras pois toda a comunicação "
+"com o servidor remoto (ou proxy) não está encriptada, portanto um atacante "
+"suficientemente capaz pode observar e guarda o login assim como todas as "
+"outras interacções. O atacante pode <emphasis>não</emphasis> pode modificar "
+"a comunicação totalmente pois o modelo de segurança de dados do APT é "
+"independente do método de transporte escolhido. Veja &apt-secure; para mais "
+"detalhes."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr "(&apt-transport-https;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+"O esquema https especifica um servidor HTTPS para um arquivo e é muito "
+"semelhante em utilização e opções disponíveis ao esquema http. A principal "
+"diferença é que a comunicação entre o apt e o servidor (ou proxy) é "
+"encriptada. Note que a encriptação não previne um atacante de saber com qual "
+"servidor (ou proxy) o apt está a comunicar e com uma análise mais profunda "
+"pode potencialmente ainda revelar que dados estão a ser descarregados. Se "
+"isto for preocupante, os esquemas baseados em Tor mencionados mais abaixo "
+"podem ser uma alternativa apropriada."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr "esquema"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr "(&apt-transport-mirror;)"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+"O esquema mirror especifica a localização de uma mirrorlist. Por "
+"predefinição o esquema usado para a localização é <literal>http</literal>, "
+"mas pode ser usado qualquer outro esquema via <command>mirror"
+"+<replaceable>esquema</replaceable></command>. A própria mirrorlist pode "
+"conter vários URIs diferentes para mirrors que o cliente do APT pode "
+"transparentemente pegar, escolher e recorrer entre os pretendentes para "
+"ajudar tanto com a distribuição da carga sobre os mirrors disponíveis e "
+"assegurando que os clientes podem adquirir dados mesmo que alguns dos "
+"mirrors configurados não estejam disponíveis."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+"O esquema file permite que um directório arbitrário do sistema de ficheiros "
+"seja considerado um arquivo. Isto é útil para montagens NFS e mirrors ou "
+"arquivos locais."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+"O esquema cdrom permite ao APT usar uma drive de CD-ROM, DVD ou caneta USB "
+"local com mudança de media. Use o programa &apt-cdrom; para criar entradas "
+"cdrom na lista de fontes."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+"O esquema ftp especifica um servidor FTP para um arquivo. O uso de FTP está "
+"em declínio em favor de <literal>http</literal> e <literal>https</literal> e "
+"muitos arquivos ou nunca ofereceram ou estão a retirar o acesso FTP. Se você "
+"ainda precisa deste método, estão disponíveis muitas opções de configuração "
+"no escopo <literal>Acquire::ftp</literal> e detalhadas em &apt-conf;."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+"Por favor note que pode ser especificado um proxy FTP ao usar a variável de "
+"ambiente <envar>ftp_proxy</envar>. É possível especifica um proxy HTTP (os "
+"servidores proxy HTTP geralmente compreendem URLs de FTP) usando esta "
+"variável de ambiente e <emphasis>apenas</emphasis> esta variável de "
+"ambiente. Os proxies que usam HTTP especificados no ficheiro de configuração "
+"serão ignorados."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+"O esquema copy é idêntico ao esquema file com a excepção que os pacotes são "
+"copiados para o directório cache em vez serem usados directamente da sua "
+"localização. Isto é útil para quem use um meio amovível para copiar "
+"ficheiros com o APT."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+"O método rsh/ssh invoca RSH/SSH a ligar a uma máquina remota e aceder a "
+"ficheiros como um dado utilizador. É recomendada a configuração prévia de "
+"rhosts ou chaves RSA. Os comandos standard <command>find</command> e "
+"<command>dd</command> são usados para executar as transferências de "
+"ficheiros a partir da máquina remota."
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr "adicionando mais tipos de URI reconhecíveis"
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+"O APT pode ser estendido com mais métodos lançados em outros pacotes "
+"opcionais, que devem seguir o esquema de nomeação <literal>apt-transport-"
+"<replaceable>método</replaceable></literal>. Por exemplo, a equipa do APT "
+"também mantém o pacote <package>apt-transport-tor</package>, o qual "
+"disponibiliza métodos de acesso para URIs de HTTP e HTTPS com rota via rede "
+"Tor."
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+"Usa o arquivo armazenado localmente (ou montagem NFS) em /home/apt/debian "
+"para stable/main, stable/contrib, e stable/non-free."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr "deb file:/home/apt/debian stable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+"Como em cima, excepto que usa a distribuição unstable (de desenvolvimento)."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr "Especificação de fontes para o referido acima."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr "deb-src file:/home/apt/debian unstable main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+"A primeira linha obtém a informação do pacote para a arquitectura em "
+"<literal>APT::Architectures</literal> enquanto a segunda obtém sempre "
+"<literal>amd64</literal> e <literal>armel</literal>."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+"Usa HTTP para aceder ao arquivo em archive.debian.org, e usa apenas a área "
+"hamm/main."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr "deb http://archive.debian.org/debian-archive hamm main"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+"Usa FTP para aceder ao arquivo em ftp.debian.org, sob o directório debian, e "
+"usa apenas a área &debian-stable-codename;/contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+"Usa FTP para aceder ao arquivo em ftp.debian.org, sob o directório debian, e "
+"usa apenas a área unstable/contrib. Se esta linha aparecer também como "
+"aquela no exemplo anterior em <filename>sources.list</filename> será usada "
+"uma única sessão FTP para ambas linhas de recurso."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr "deb ftp://ftp.debian.org/debian unstable contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+"Usa HTTP para aceder ao arquivo em ftp.tlh.debian.org, sob o directório "
+"universe, e usa apenas os ficheiros encontrados sob <filename>unstable/"
+"binary-i386</filename> em máquinas i386, <filename>unstable/binary-amd64</"
+"filename> em amd64, e assim por diante para outras arquitecturas suportadas. "
+"[Note que este exemplo apenas mostra como usar a variável de substituição; "
+"os arquivos oficiais debian não estão estruturados assim] <placeholder type="
+"\"literallayout\" id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+"Usa HTTP para obter pacotes binários assim como fontes a partir das suites "
+"stable, testing e unstable e os componentes main e contrib."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr "1"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+"Utilitário para extrair configurações e modelos <command>debconf</command> a "
+"partir de pacotes Debian"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+"<command>apt-extracttemplates</command> irá receber um ou mais ficheiros de "
+"pacotes Debian na sua entrada e escrever (para um directório temporário) "
+"todos os scripts de configuração associados e ficheiros de modelo. Por cada "
+"pacote passado por ele que contenha scripts de configuração e modelos, será "
+"gerada uma linha no formato:"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr "pacote versão ficheiro-modelo script-de-configuração"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+"ficheiro-modelo e script-de-configuração são escritos num directório "
+"temporário especificado por <option>-t</option> ou <option>--tempdir</"
+"option> (<literal>APT::ExtractTemplates::TempDir</literal>) directório, com "
+"nomes de ficheiros no formato <filename>pacote.modelo.XXXXXX</filename> e "
+"<filename>pacote.configuração.XXXXXX</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+"Directório temporário para onde escrever ficheiros <command>debconf</"
+"command> modelo extraídos e scripts de configuração. Item de Configuração: "
+"<literal>APT::ExtractTemplates::TempDir</literal>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+"<command>apt-extracttemplates</command> devolve zero na operação normal, 100 "
+"decimal em erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr "Utilitário para organizar ficheiros índice de pacotes"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+"<command>apt-sortpkgs</command> irá pegar num ficheiro índice (índice de "
+"fontes ou índice de pacotes) e organizar os registos para que fiquem "
+"ordenados pelo nome do pacote. Também organiza os campos internos de cada "
+"registo de acordo com as regras de organização internas."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+"Todas as saídas são enviadas para a saída standard, a entrada tem de ser um "
+"ficheiro passível de pesquisa."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+"Usa ordenação de campo de índice Source. Item de Configuração: <literal>APT::"
+"SortPkgs::Source</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-sortpkgs</command> devolve zero na operação normal, 100 decimal "
+"em erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr "Utilitário para gerar ficheiros de índice"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+"<command>apt-ftparchive</command> é a ferramenta de linha de comandos que "
+"cria os ficheiros índice que o APT usa para aceder a uma fonte de "
+"distribuição. Os ficheiros índice devem ser gerados no site de origem "
+"baseados no conteúdo desse site."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+"<command>apt-ftparchive</command> é um super conjunto do programa &dpkg-"
+"scanpackages;, incorporando todas as suas funcionalidades através do comando "
+"<literal>packages</literal>. Também contém um gerador de ficheiro de "
+"conteúdos, <literal>contents</literal>, e um meio elaborado de colocar em "
+"script o processo de geração para um arquivo completo."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+"Internamente o <command>apt-ftparchive</command> pode fazer uso de bases de "
+"dados binárias para por em cache os conteúdos de um ficheiro .deb e não "
+"precisa de nenhum programa externo à excepção do &gzip;. Quando faz uma "
+"geração completa, executa automaticamente verificações de alterações de "
+"ficheiros e constrói os ficheiros comprimidos desejados."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+"O comando packages gera um ficheiro pacote a partir duma árvore de "
+"directórios. Recebe um dado directório e procura recursivamente por "
+"ficheiros .deb, emitindo um registo de pacote para o stdout por cada um. "
+"Este comando é aproximadamente equivalente ao &dpkg-scanpackages;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+"A opção <option>--db</option> pode ser usada para especificar uma base de "
+"dados de cache binária."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+"O comando <literal>sources</literal> gera um índice de fonte a partir duma "
+"árvore de directórios. Recebe um dado directório e procura recursivamente "
+"por ficheiros .dsc, emitindo um registo de fonte para o stdout por cada um. "
+"Este comando é aproximadamente equivalente ao &dpkg-scansources;."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+"Se for especificado um ficheiro de sobreposição então será procurado um "
+"ficheiro de sobreposição de fonte com uma extensão de .src. A opção --"
+"source-override pode ser usada para alterar o ficheiro de sobreposição de "
+"fonte que irá ser usado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+"O comando<literal>contents</literal> gera um ficheiro de conteúdos a partir "
+"duma árvore de directórios. Recebe um dado directório e procura "
+"recursivamente por ficheiros .deb, e lê a lista de ficheiros de cada "
+"ficheiro. Então organiza e escreve para o stdout a lista de ficheiros "
+"correspondente a pacotes. Os directórios não são escritos no saída. Se "
+"múltiplos pacotes possuírem o mesmo ficheiro então cada pacote é separado "
+"por uma vírgula na saída."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+"O comando <literal>release</literal> gera um ficheiro Release a partir de "
+"uma árvore de directórios. Por predefinição, procura recursivamente no "
+"directório fornecido por ficheiros <filename>Packages</filename>, "
+"<filename>Sources</filename>, <filename>Contents</filename>, "
+"<filename>Components</filename> e <filename>icons</filename> comprimidos e "
+"não comprimidos assim como ficheiros <filename>Release</filename>, "
+"<filename>Index</filename> e <filename>md5sum.txt</filename> por "
+"predefinição. (<literal>APT::FTPArchive::Release::Default-Patterns</"
+"literal>). Padrões adicionais de nomes de ficheiros pode ser adicionados ao "
+"listá-los em <literal>APT::FTPArchive::Release::Patterns</literal>. Depois "
+"escreve para o stdout um ficheiro <filename>Release</filename> que contém "
+"(por predefinição) um resultado de MD5, SHA1, SHA256 e SHA512 para cada "
+"ficheiro."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+"Valores para os campos de metadados adicionais no ficheiro Release são "
+"tomados a partir das variáveis correspondentes sob <literal>APT::FTPArchive::"
+"Release</literal>, ex. <literal>APT::FTPArchive::Release::Origin</literal>. "
+"Os campos suportados são <literal>Origin</literal>, <literal>Label</"
+"literal>, <literal>Suite</literal>, <literal>Version</literal>, "
+"<literal>Codename</literal>, <literal>Date</literal>, <literal>NotAutomatic</"
+"literal>, <literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</"
+"literal>, <literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> e "
+"<literal>Description</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+"O comando <literal>generate</literal> é desenhado para ser executado a "
+"partir dum script cron e constrói índices de acordo com o ficheiro de "
+"configuração fornecido. A linguagem de configuração disponibiliza um meio "
+"flexível de de especificar quais ficheiros índice são construídos a partir "
+"de quais directórios, assim como disponibilizar um meio simples de manter as "
+"definições requeridas."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+"O comando <literal>clean</literal> arruma as bases de dados usadas pelo "
+"ficheiro de configuração fornecido ao remover quaisquer registos que já não "
+"são necessários."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr "A Configuração do Generate"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+"O comando <literal>generate</literal> usa um ficheiro de configuração para "
+"descrever os arquivos que vão ser gerados. Segue o formato típico de "
+"configuração ISC como visto em ferramentas ISC como o bind 8 e dhcpd. &apt-"
+"conf; contém uma descrição da sintaxe. Note que a configuração gerada é "
+"analisada de maneira seccional, mas o &apt-conf; é analisado numa maneira de "
+"árvore. Isto apenas afecta o modo de como a etiqueta scope é manuseada."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+"A configuração do generate tem 4 secções separadas, cada uma descrita mais "
+"abaixo."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Dir</literal> Section"
+msgstr "Secção <literal>Dir</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+"A secção <literal>Dir</literal> define os directórios standard necessários "
+"para localizar os ficheiros requisitados durante o processo de geração. "
+"Estes directórios precedem a certos caminhos relativos definidos em secções "
+"posteriores para produzir um caminho completo e absoluto."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+"Especifica a raiz do arquivo FTP, numa configuração Debian standard este é o "
+"directório que contém o <filename>ls-LR</filename> e nós da distribuição."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr "Especifica a localização dos ficheiros de sobrepor."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr "Especifica a localização dos ficheiros de cache"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+"Especifica a localização dos ficheiros de listas de ficheiros, se a "
+"definição <literal>FileList</literal> for usada mais abaixo."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Default</literal> Section"
+msgstr "Secção <literal>Default</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+"A secção <literal>Default</literal> especifica valores predefinidos, e "
+"definições que controlam a operação do gerador. Outras secções podem "
+"sobrepor estas predefinições em uma definição por-secção."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+"Define os esquemas de compressão predefinidos a usar para os ficheiros de "
+"índice package. É uma string que contém uma lista separada por espaços de "
+"pelo menos um dos compressores configurados via scope de configuração "
+"<option>APT::Compressor</option>. A predefinição para todos os esquemas de "
+"compressão é '. gzip'."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+"Define a lista predefinida das extensões de ficheiros que são ficheiros "
+"pacote. A predefinição é '.deb'."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+"Isto é semelhante a <literal>Packages::Compress</literal> excepto que "
+"controla a compressão para os ficheiros das Fontes."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+"Define a lista predefinida das extensões de ficheiros que são ficheiros de "
+"fontes. A predefinição é '.dsc'."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+"Isto é semelhante a <literal>Packages::Compress</literal> excepto que "
+"controla a compressão para os ficheiros de Conteúdos."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+"Isto é semelhante a <literal>Packages::Compress</literal> excepto que "
+"controla a compressão para o ficheiro mestre Translation-en."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+"Especifica o número de kilobytes para delink (e substitui com hard links) "
+"por execução. Isto é usado em conjunto com a definição <literal>External-"
+"Links</literal> por secção."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+"Especifica o modo de todos os ficheiros índice criados. A predefinição é "
+"0644. Todos os ficheiros índice são definidos para este modo "
+"independentemente do umask."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+"Define se as descrições longas devem ser incluídas no ficheiro "
+"<filename>Packages</filename> ou divididas em um ficheiro "
+"<filename>Translation-en</filename> mestre."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "Secção <literal>TreeDefault</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+"Define predefinições específicas para as secções <literal>Tree</literal>. "
+"Todas estas variáveis são variáveis de substituição e têm as strings "
+"$(DIST), $(SECTION) e $(ARCH) substituídas pelos seus respectivos valores."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+"Define o número de kilobytes dos ficheiros de conteúdo que são gerados a "
+"cada dia. Os ficheiros de conteúdo são re-circulados para que ao fim de "
+"alguns dias todos sejam reconstruídos."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+"Controla o número de dias que se permite a um ficheiro de conteúdo ser "
+"verificado sem alteração. Se este limite for ultrapassado o mtime do "
+"ficheiro de conteúdo é actualizado. Este caso pode ocorrer se o ficheiro de "
+"pacote é alterado num modo que não resulta num novo ficheiro de conteúdo "
+"[por exemplo uma edição de sobreposição]. É permitido um soltar na esperança "
+"que novos .debs sejam instalados, requerendo um novo ficheiro de qualquer "
+"modo. A predefinição é 10, as unidades são em dias."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+"Define o topo da árvore de directórios .deb. A predefinição é <filename>"
+"$(DIST)/$(SECTION)/binary-$(ARCH)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+"Define o topo da árvore de directórios de pacotes fonte. A predefinição é "
+"<filename>$(DIST)/$(SECTION)/source/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+"Define o ficheiro Packages de saída. A predefinição é <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/Packages</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+"Define o ficheiro Sources de saída. A predefinição é <filename>$(DIST)/"
+"$(SECTION)/source/Sources</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+"Define se o ficheiro mestre Translation-en de saída com as descrições longas "
+"não deve ser incluído no ficheiro Packages. A predefinição é <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+"Define o prefixo de caminho que causa que um symlink seja considerado um "
+"link interno em vez de um link externo. A predefinição é <filename>$(DIST)/"
+"$(SECTION)/</filename>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+"Define a saída do ficheiro Contents. A predefinição é <filename>$(DIST)/"
+"Contents-$(ARCH)</filename>. Se esta definição causar múltiplos ficheiros "
+"Packages para mapear em um único ficheiro Contents (tal como a predefinição) "
+"então o <command>apt-ftparchive</command> irá automaticamente integrar esses "
+"ficheiros pacotes todos juntos."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr "Define o ficheiro cabeçalho para prefixar a saída de conteúdos."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+"Define a base de dados de cache binária a usar para esta secção. Múltiplas "
+"secções podem partilhar a mesma base de dados."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+"Especifica que em vez de navegar na árvore de directórios, o <command>apt-"
+"ftparchive</command> deverá ler a lista de ficheiros a partir do ficheiro "
+"fornecido. Nomes de ficheiros relativos são prefixados com o directório de "
+"arquivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+"Especifica que em vez de navegar na árvore de directórios, o <command>apt-"
+"ftparchive</command> deverá ler a lista de ficheiros a partir do ficheiro "
+"fornecido. Nomes de ficheiros relativos são prefixados com o directório de "
+"arquivo. Isto é usado quando se processa índices de fonte."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>Tree</literal> Section"
+msgstr "Secção <literal>Tree</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+"A secção <literal>Tree</literal> define uma árvore de ficheiros Debian "
+"standard que consiste de um directório base, depois múltiplas secções nesse "
+"directório base e finalmente múltiplas Arquitecturas em cada secção. O "
+"caminho exacto usado é definido pela variável de substituição "
+"<literal>Directory</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+"A secção <literal>Tree</literal> recebe uma etiqueta scope que define a "
+"variável <literal>$(DIST)</literal> e define a raiz da árvore (o caminho é "
+"prefixado por <literal>ArchiveDir</literal>). Tipicamente esta é uma "
+"definição tal como <filename>dists/&debian-stable-codename;</filename>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+"Todas as definições definidas na secção <literal>TreeDefault</literal> podem "
+"ser usadas na secção <literal>Tree</literal> assim como as novas três "
+"variáveis."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+"Quando processa uma secção <literal>Tree</literal>, o <command>apt-"
+"ftparchive</command> executa uma operação semelhante a: <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+"Isto é uma lista de secções separada por espaços que aparece sob a "
+"distribuição, tipicamente isto é algo como <literal>main contrib non-free</"
+"literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+"Esta é uma lista separada por espaços de todas as arquitecturas que aparecem "
+"sob a secção de busca. A arquitectura especial 'source' é usada para indicar "
+"que esta árvore tem um arquivo fonte. A arquitectura 'all' assinala que "
+"ficheiros específicos de arquitectura como o <filename>Packages</filename> "
+"não devem incluir informação acerca de pacotes de <literal>todas</literal> "
+"as arquitecturas em todos os ficheiros pois estes estarão disponíveis num "
+"ficheiro dedicado."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+"Define o ficheiro de sobreposição binário. O ficheiro de sobreposição "
+"informação de secção, prioridade e endereço do responsável."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+"Define o ficheiro de sobreposição fonte. O ficheiro de sobreposição "
+"informação de secção."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr "Define o ficheiro de sobreposição extra binário."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr "Define o ficheiro de sobreposição extra fonte."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "Secção <literal>BinDirectory</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+"A secção <literal>bindirectory</literal> define uma árvore de directórios "
+"binários sem nenhuma estrutura especial. A etiqueta scope especifica a "
+"localização do directório binário e as definições são semelhantes às da "
+"secção <literal>Tree</literal> sem nenhumas variáveis de substituição ou "
+"definições <literal>Section</literal><literal>Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr "Define a saída do ficheiro Packages."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+"Define a saída do ficheiro Sources. É necessário pelo menos um de "
+"<literal>Packages</literal> ou <literal>Sources</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr "Define a saída do ficheiro Contents (opcional)"
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr "Define o ficheiro de sobreposição binário."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr "Define o ficheiro de sobreposição fonte."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr "Define a base de dados de cache."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr "Acrescenta um caminho a todos os caminhos de saída."
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr "Especifica o ficheiro de lista de ficheiros."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr "O Ficheiro Binary Override"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+"O ficheiro de sobreposição binário é totalmente compatível com &dpkg-"
+"scanpackages;. Contém 4 campos separados por espaços. O primeiro campo é o "
+"nome do pacote, o segundo é a prioridade a qual forçar esse pacote, o "
+"terceiro é a secção onde forçar esse pacote e o último campo é o campo de "
+"permutação do responsável."
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr "old [// oldn]* => new"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr "new"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+"O formato geral do campo do responsável é: <placeholder type=\"literallayout"
+"\" id=\"0\"/> ou simplesmente, <placeholder type=\"literallayout\" id=\"1\"/"
+">. O primeiro formato permite uma lista separada por um duplo slash (//) de "
+"antigos endereços e email a serem especificados. Se nenhum destes for "
+"encontrado então 'new' é substituído para o campo do responsável. O segundo "
+"formato substitui incondicionalmente o campo do responsável."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr "O Ficheiro Source Override"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+"O ficheiro de sobreposição de fonte é totalmente compatível com &dpkg-"
+"scansources;. Contém dois campos separados por espaços. O primeiro campo é o "
+"nome de pacote fonte, o segundo é a secção onde o atribuir."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr "O Ficheiro Extra Override"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+"O ficheiro de sobreposição extra permite que qualquer etiqueta arbitrária "
+"seja adicionada ou substituída na saída. Tem 3 colunas, a primeira é o "
+"pacote, a segunda é a etiqueta e restante da linha é o novo valor."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+"Gera o sumário de verificação dado. Estas opções estão ligadas por "
+"predefinição, quando são desligadas os ficheiros de índice gerados não terão "
+"os campos de sumário de verificação onde forem possíveis. Items de "
+"Configuração: <literal>APT::FTPArchive::<replaceable>Checksum</replaceable></"
+"literal> e <literal>APT::FTPArchive::<replaceable>Index</replaceable>::"
+"<replaceable>Checksum</replaceable></literal> Onde "
+"<literal><replaceable>Index</replaceable></literal> pode ser "
+"<literal>Packages</literal>, <literal>Sources</literal> ou <literal>Release</"
+"literal> e <literal><replaceable>Checksum</replaceable></literal> pode ser "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"ou <literal>SHA512</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+"Usa uma base de dados de cache binária. Isto não tem efeito no comando "
+"generate. Item de configuração: <literal>APT::FTPArchive::DB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+"Silencioso; produz saída apropriada para registar em logs, omitindo "
+"indicadores de progresso. Mais q's irão produzir mais silencio até um máximo "
+"de 2. Você também pode usar <option>-q=#</option> para definir o nível de "
+"silêncio, sobrepondo o ficheiro de configuração. Item de Configuração: "
+"<literal>quiet</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+"Executa Dissociação. Se é usada a definição <literal>External-Links</"
+"literal> então esta opção activa a dissociação dos ficheiros. A sua "
+"predefinição é ligada e e pode ser desligada com <option>--no-delink</"
+"option>. Item de Configuração: <literal>APT::FTPArchive::DeLinkAct</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+"Executa a geração de conteúdos. Quando esta opção está definida e os índices "
+"de pacotes são gerados com um base de dados cache então a listagem de "
+"ficheiros também será extraída e guardada na base de dados para utilização "
+"posterior. Quando se usa o comando generate, esta opção também permite a "
+"criação de quaisquer ficheiros de Conteúdos. A predefinição é ligado. Item "
+"de Configuração: <literal>APT::FTPArchive::Contents</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+"Selecciona o ficheiro de sobreposição de fonte a usar com o comando "
+"<literal>sources</literal>. Item de Configuração: <literal>APT::FTPArchive::"
+"SourceOverride</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+"Torna as bases de dados de cache apenas de leitura. Item de Configuração: "
+"<literal>APT::FTPArchive::ReadOnlyDB</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+"Aceita nos comandos <literal>packages</literal> e <literal>contents</"
+"literal> apenas ficheiros de pacotes que condizem com <literal>*_arch.deb</"
+"literal> ou <literal>*_all.deb</literal> em vez de todos os ficheiros de "
+"pacotes presentes no caminho fornecido. Item de Configuração: <literal>APT::"
+"FTPArchive::Architecture</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+"&apt-ftparchive; põe em cache o máximo possível de metadados numa base de "
+"dados de cache. Se os pacotes forem recompilados e/ou republicados de novo "
+"com a mesma versão, irá originar problemas porque serão usados os metadados "
+"desactualizados em cache como o tamanho e sumários de verificação. Com esta "
+"opção activa isto não irá mais acontecer porque será verificado se o "
+"ficheiro foi alterado. Note que esta opção vem regulada para "
+"\"<literal>false</literal>\" por predefinição pois não é recomendado "
+"disponibilizar múltiplas versões/compilações de um pacote com o mesmo número "
+"de versão, portanto em teoria ninguém irá ter estes problemas e então todas "
+"as verificações extras serão desnecessárias."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+"Esta opção de configuração tem a predefinição de \"<literal>true</literal>\" "
+"e deve apenas ser definida para <literal>\"false\"</literal> se o Arquivo "
+"gerado com &apt-ftparchive; também disponibilizar ficheiros "
+"<filename>Translation</filename>. Note que o ficheiro mestre "
+"<filename>Translation-en</filename> só pode ser criado no comando generate."
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr "<command>apt-ftparchive</command> pacotes <replaceable>directório</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Para criar um ficheiro Packages comprimido para um directório que contém "
+"pacotes binários (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+"<command>apt-ftparchive</command> devolve zero na operação normal, 100 "
+"decimal em erro."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+msgid "Login configuration file for APT sources and proxies"
+msgstr "Ficheiro de configuração de Login para fontes e proxies do APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+"Os ficheiros de configuração do APT como &sources-list; ou &apt-conf; "
+"precisam de estar acessíveis para todos os que usam as ferramentas do apt no "
+"sistema para terem acesso a toda a informação relacionadas com pacotes como "
+"os pacotes disponíveis num repositório. Por outro lado, a informação de "
+"login necessária para ligação a um proxy ou para descarregar dados de um "
+"repositório não deve estar sempre acessível a todos e não deve ser colocada "
+"num ficheiro com palavras legíveis e permissões de leitura."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"O ficheiro auth.conf do APT <filename>/etc/apt/auth.conf</filename>, e os "
+"ficheiros .conf dentro de <filename>/etc/apt/auth.conf.d</filename> podem "
+"ser usados para armazenar informação de login num formato estilo netrc com "
+"permissões de ficheiro restritas."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr "formato tipo netrc"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+"O formato definido aqui é semelhante ao formato do ficheiro <filename>~/."
+"netrc</filename> usado pelo <citerefentry><refentrytitle><command>ftp</"
+"command></refentrytitle><manvolnum>1</manvolnum></citerefentry> e programas "
+"semelhantes que interagem com servidores. É um formato simples baseado em "
+"token com os seguintes tokens a serem reconhecidos. Os tokens desconhecidos "
+"serão ignorados. Os tokens podem ser separados por espaços, tabs ou nova-"
+"linha."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+"<literal>machine</literal> <replaceable>nome-de-máquina</replaceable>[:"
+"<replaceable>porto</replaceable>][/<replaceable>caminho</replaceable>]"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+"As entradas são procuradas ao pesquisar pelo token "
+"<emphasis><literal>machine</literal></emphasis> que corresponde ao nome de "
+"máquina do URI para que o apt precisa de informação de login. Estendendo o "
+"formato netrc, pode ser especificado um número de porto. Se nenhum porto for "
+"fornecido o token corresponde a todos os portos. De modo semelhante, o "
+"caminho é opcional e apenas necessário e útil se residirem no mesmo servidor "
+"vários repositórios com informação de login diferentes. Um token de máquina "
+"com um caminho corresponde se o caminho no URI começar com o caminho "
+"fornecido no token. Quando existe uma correspondência, os tokens "
+"subsequentes são processados, parando quando é alcançado o final do ficheiro "
+"ou é encontrado outro token <emphasis><literal>machine</literal></emphasis>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "<literal>login</literal> <replaceable>nome</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr "O nome de utilizador a ser usado."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "<literal>password</literal> <replaceable>string</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr "A palavra passe a ser usada"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Example"
+msgstr "Exemplo"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb http://example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr "machine example.org login apt password debian"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+"Fornecer informação de login para um utilizador chamado <literal>apt</"
+"literal> com a palavra passe <literal>debian</literal> para a entrada "
+"<placeholder type=\"literallayout\" id=\"0\"/> de &sources-list; pode ser "
+"feito na entrada directamente: <placeholder type=\"literallayout\" id=\"1\"/"
+"> Alternativamente, pode ser usada uma entrada como a seguinte no ficheiro "
+"auth.conf: <placeholder type=\"literallayout\" id=\"2\"/> Ou "
+"alternativamente dentro de uma linha única: <placeholder type=\"literallayout"
+"\" id=\"3\"/> Se precisar de ser mais específico, todas estas linha poderão "
+"ser aplicadas no exemplo de entrada: <placeholder type=\"literallayout\" id="
+"\"4\"/> Por outro lado nenhuma das seguintes linhas aplicam-se: "
+"<placeholder type=\"literallayout\" id=\"5\"/>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr "Notas"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+"O suporte básico para esta funcionalidade está presente desde a versão "
+"0.7.25, mas esteve sem documentação durante anos. A documentação foi "
+"adicionada na versão 1.5 mudando também ligeiramente a implementação. Para o "
+"máximo de compatibilidade regressiva, você deve evitar múltiplos tokens "
+"<literal>machine</literal> com o mesmo nome-de-máquina, mas se precisar de "
+"múltiplos eles deves todos ter um caminha especificado no token "
+"<literal>machine</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+"Informação de login para fontes e proxies do APT em formato estilo netrc. "
+"Item de Configuração: <literal>Dir::Etc::netrc</literal>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+"Informação de login para fontes e proxies do APT em formato estilo netrc "
+"Item de Configuração: <literal>Dir::Etc::netrcparts</literal>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+"Transporte do APT para descarregar via Hypertext Transfer Protocol (HTTP)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+"Este transporte do APT permite o uso de repositórios acedidos via Hypertext "
+"Transfer Protocol (HTTP). Está disponível por predefinição e é provavelmente "
+"o mais usado de todos os transportes. Note que um transporte nunca chamado "
+"directamente por um utilizador mas é usado pelas ferramentas do APT baseadas "
+"na configuração do utilizador."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+"HTTP é um protocolo de transporte não encriptado o que significa que toda a "
+"comunicação com o servidor remoto (ou proxy) pode ser observada por um "
+"atacante com capacidades suficientes que geralmente é referido por \"man in "
+"the middle\" (MITM). No entanto, tal atacante <emphasis>não</emphasis> "
+"consegue modificar a comunicação para comprometer a segurança do seu "
+"sistema, pois o modelo de segurança dos dados do APT é independente do "
+"método de transporte escolhido. Isto está explicado em detalhe em &apt-"
+"secure;. Uma visão geral dos métodos de transporte disponíveis é dada em "
+"&sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+"Várias opções podem ser definidas num ficheiro &apt-conf; para modificar "
+"este comportamento, indo de configuração de proxy até maneiras de contornar "
+"limitações específicas de servidores."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Proxy Configuration"
+msgstr "Configuração do Proxy"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+"A variável de ambiente <envar>http_proxy</envar> é suportada pela "
+"configuração de todo o sistema. Proxies específicos para o APT podem ser "
+"configurados via opção <literal>Acquire::http::Proxy</literal>. Proxies que "
+"devem ser usados apenas para certas máquinas podem ser especificados via "
+"<literal>Acquire::http::Proxy::<replaceable>máquina</replaceable></literal>. "
+"Até um controle mais afinado pode ser obtido via auto-detecção de proxy, "
+"detalhado mais abaixo. Todas estas opções usam o formato URI "
+"<literal><replaceable>esquema</replaceable>://[[<replaceable>utilizador</"
+"replaceable>][:<replaceable>palavra-passe</"
+"replaceable>]@]<replaceable>maquina</replaceable>[:<replaceable>porto</"
+"replaceable>]/</literal>. OS esquemas URI suportados são <literal>socks5h</"
+"literal> (SOCKS5 com resolução DNS remota), <literal>http</literal> e "
+"<literal>https</literal>. Os detalhes de autenticação podem ser fornecidos "
+"via &apt-authconf; em vez de os incluir directamente no URI."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+"as várias opções de configuração do APT suportam o valor especial "
+"<literal>DIRECT</literal> significando que nenhum proxy deverá ser usado. A "
+"variável de ambiente <envar>no_proxy</envar> é também suportada para o mesmo "
+"objectivo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+"Mais ainda, existem três definições disponibilizadas para controle de cache "
+"como caches de proxy compatíveis com HTTP/1.1. <literal>Acquire::http::No-"
+"Cache</literal> diz ao proxy para não usar a sua resposta em cache sob "
+"nenhumas circunstâncias, <literal>Acquire::http::Max-Age</literal> define a "
+"idade máxima permitida (em segundos) de um ficheiro índice na cache do "
+"proxy. <literal>Acquire::http::No-Store</literal> especifica que o proxy não "
+"deve armazenar os ficheiros de arquivo pedidos na sua cache, o que pode ser "
+"usado para prevenir que o proxy polua a sua cache com (grandes) ficheiros ."
+"deb."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Automatic Proxy Configuration"
+msgstr "Configuração do Proxy Automática"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> pode ser usado para "
+"especificar um comando externo para descobrir o proxy HTTP a usar. O "
+"primeiro e único parâmetro é um URL que aponta para a máquina a contactar "
+"para permitir uma configuração específica para essa máquina. O APT espera "
+"que o comando forneça o resultado do proxy no stdout numa única linha no "
+"formato URI anteriormente especificado ou a palavra <literal>DIRECT</"
+"literal> se não deverá ser usado nenhum proxy. Nenhum resultado fornecido "
+"indica que devem ser usadas as definições de proxy genéricas."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+"Note que a auto-detecção não será usada para uma máquina se uma configuração "
+"de proxy específica de máquina já estiver definida via <literal>Acquire::"
+"http::Proxy::<replaceable>máquina</replaceable></literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+"Veja os pacotes &squid-deb-proxy-client; e &auto-apt-proxy; para exemplos de "
+"implementações."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+"Esta opção toma precedência sobre a opção antiga de nome <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Connection Configuration"
+msgstr "Configuração de Ligação"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+"A opção <literal>Acquire::http::Timeout</literal> define o tempo limite "
+"usado por este método, este valor aplica-se à ligação assim como os tempos "
+"de limite de dados."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+"A largura de banda usada pode ser limitada com <literal>Acquire::http::Dl-"
+"Limit</literal> que aceita valores inteiros em kilobytes por segundo. O "
+"valor predefinido é 0 que desactiva o limite e tenta usar toda a largura de "
+"banda disponível. Note que esta opção implicitamente desactiva a descarga a "
+"partir de múltiplos servidores ao mesmo tempo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+"A definição <literal>Acquire::http::Pipeline-Depth</literal> pode ser usada "
+"para activar o 'pipelining' de HTTP (RFC 2616 secção 8.1.2.2) a qual pode "
+"ser benéfica por exemplo em ligações de alta latência. Especifica quantos "
+"pedidos são enviados num pipeline. O APT tenta detectar e contornar "
+"servidores web e proxies com comportamentos impróprios durante a sua "
+"execução, mas se você sabe que o seu não está em conformidade com a "
+"especificação HTTP/1.1, a ligação via pipe pode ser desactivada ao definir o "
+"valor para 0. Por predefinição está activado com o valor 10."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+"<literal>Acquire::http::AllowRedirect</literal> controla se o APT irá seguir "
+"os redireccionamentos, o que está activo por predefinição."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+"<literal>Acquire::http::User-Agent</literal> pode ser usado para definir um "
+"Utilizador-Agente diferente para o método de download por http, porque "
+"alguns proxies apenas permitem acesso a clientes se o cliente usar um "
+"identificador conhecido."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+"<literal>Acquire::http::SendAccept</literal> está activa por predefinição e "
+"envia um campo de cabeçalho <literal>Accept: text/*</literal> para o "
+"servidor para pedidos sem extensão do ficheiro para prevenir que o servidor "
+"tente negociação de conteúdo."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr "Transporte do APT para descarregar via Protocolo Seguro HTTP (HTTPS)"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+"Este transporte do APT permite o uso de repositórios acedidos via HTTP "
+"Secure protocol (HTTPS), também chamado de HTTP sobre TLS. Está disponível "
+"por predefinição desde o apt 1.5 e estava disponível antes no pacote "
+"<package>apt-transport-https</package>. Note que um transporte nunca é "
+"chamado directamente por um utilizador mas usado pelas ferramentas do APT "
+"com base na configuração do utilizador."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+"HTTP é por si próprio um protocolo de transporte não encriptado (comprove "
+"&apt-transport-http;), o qual, sendo indicado pelo S acrescentado, fica "
+"embrulhado numa camada encriptada conhecida por Transport Layer Security "
+"(TLS) para disponibilizar encriptação fim-para-fim. Um atacante com "
+"habilidades suficientes pode mesmo assim observar os colegas de comunicação "
+"e uma análise mais profunda à comunicação encriptada pode mesmo assim "
+"revelar detalhes importantes. Uma visão geral sobre métodos de transporte "
+"disponíveis alternativos é dada em &sources-list;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+"O protocolo HTTPS é baseado no protocolo HTTP, assim todas as opções "
+"suportadas pelo &apt-transport-http; são também suportadas via "
+"<literal>Acquire::https</literal> e irão usa por predefinição os mesmos "
+"valores especificados para <literal>Acquire::http</literal>. Esta manual irá "
+"apenas documentar as opções <emphasis>únicas para https</emphasis>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr "Credenciais do Servidor"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+"Por predefinição todos os pacotes confiáveis pelo sistema (veja o pacote "
+"<package>ca-certificates</package>) são usados para a verificação do "
+"certificado do servidor. Uma autoridade de certificação (CA) alternativa "
+"pode ser configurada com a opção <literal>Acquire::https::CAInfo</literal> e "
+"a sua opção especifica de máquina <literal>Acquire::https::CAInfo::"
+"<replaceable>máquina</replaceable></literal>. A opção CAInfo especifica um "
+"ficheiro feito de certificados CA (em formato PEM) todos concatenados para "
+"criar a cadeia que o APT deve usar para verificar o caminho do seu "
+"certificado de raiz auto-assinado. Se o servidor remoto fornecer a cadeia "
+"inteira durante a transferência, o ficheiro precisa apenas de conter o "
+"certificado de raiz. Caso contrário, é precisa a cadeia inteira. Se "
+"precisar de suportar múltiplas autoridades, a única maneira é concatenar "
+"tudo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+"Uma lista de revogação de certificados personalizada (CRL) pode ser "
+"configurada com as opções <literal>Acquire::https::CRLFile</literal> e "
+"<literal>Acquire::https::CRLFile::<replaceable>máquina</replaceable></"
+"literal>. Como a opção anterior, um ficheiro em formato PEM precisa de ser "
+"especificado."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr "Desactivar a segurança"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+"Durante a autenticação do servidor, se a verificação do certificado falhar "
+"por alguma razão (expirada, revogada, intermediários, etc), a ligação falha. "
+"Isto é obviamente o que você espera em todos os casos e o que o valor "
+"predefinido (true) da opção <literal>Acquire::https::Verify-Peer</literal> e "
+"o que a variante especifica da máquina fornece. Se você sabe "
+"<emphasis>exactamente</emphasis> o que está a fazer, definir esta opção para "
+"\"<literal>false</literal>\" permite saltar a verificação de certificado de "
+"peer e concluir a transacção com sucesso. Mais uma vez, esta opção serve "
+"para objectivos de depuração e testes apenas pois ela remove toda a "
+"segurança fornecida pelo uso de HTTPS."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+"De modo semelhante a opção <literal>Acquire::https::Verify-Host</literal> e "
+"a sua variante especifica de máquina pode ser usada para desactivar uma "
+"funcionalidade de segurança. O certificado fornecido pelo servidor inclui a "
+"identidade do servidor a qual deve corresponder ao nome DNS usado para lhe "
+"aceder. Por predefinição, e como pedido por RFC 2818, o nome do mirror é "
+"verificado contra a identidade encontrada no certificado. Este comportamento "
+"predefinido é seguro e não deve ser alterado, ,mas se você sabe que o "
+"servidor que está a usar tem um nome DNS que não corresponde à identidade no "
+"seu certificado, você pode definir a opção para \"<literal>false</literal>"
+"\", o que irá impedir que a comparação seja feita."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr "Autenticação do cliente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+"Para além de suportar autenticação baseada em palavra-passe (veja &apt-"
+"authconf;) o HTTPS também suporta autenticação baseada em certificados do "
+"cliente via <literal>Acquire::https::SSLCert</literal> e <literal>Acquire::"
+"https::SSLKey</literal>. Estes devem ser definidos respectivamente no nome "
+"de ficheiro do certificado de cliente X.509 e a chave privada (não "
+"encriptada) associada, ambos em formato PEM. Na prática o uso de variantes "
+"especificas da máquina de ambas opções é altamente recomendado."
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr "Transporte do APT para selecção de mirror mais automatizada"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+"Este transporte do APT não está por si só a implementar um protocolo para "
+"aceder a repositórios locais ou remotos, mas obtêm uma mirrorlist e "
+"redirecciona todos os pedidos para os mirro(s) retirados dessa lista, "
+"acedendo a eles via outros transportes como &apt-transport-http;. A "
+"funcionalidade básica esteve disponível desde o apt 0.7.24, mas não esteve "
+"documentada até ao apt 1.6 o qual continha uma reconstrução do transporte e "
+"das suas funcionalidades suportadas. Note que um transporte nunca é chamado "
+"directamente por um utilizador mas é usado pelas ferramentas do APT com base "
+"na configuração do utilizador."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+"Se a aquisição de um ficheiro via um mirror falhar, o método assegura que "
+"outro mirror possível da lista é tentado automaticamente até que o ficheiro "
+"seja obtido ou não houver mais nenhum mirror na lista lidando "
+"transparentemente com servidores desligados e problemas semelhantes."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+"As implicações de segurança do transporte dependem das considerações de "
+"segurança associadas ao transporte usado para adquirir a mirrorlist e os "
+"transportes envolvidos no acesso ao(s) mirror(s) escolhidos pelo transporte."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+"Este transporte presentemente não tem opções de configuração. A selecção do "
+"mirror é inteiramente baseada nos mirrors oferecidos na mirrorlist e nos "
+"ficheiros que o APT precisa de obter."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr "Formato de mirrorlist"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+"Uma mirrorlist contêm uma ou mais linhas cada uma especificando um URI para "
+"um mirror. São ignoradas as linhas vazias e aquelas começadas com um "
+"cardinal (<literal>#</literal>). Um URI começa sempre com um esquema URI que "
+"define o transporte usado para esse mirror. Se por exemplo o URI começar com "
+"<literal>http:</literal>, o transporte responsável é &apt-transport-http; o "
+"qual pode ter requerimentos específicos para o formato da parte restante do "
+"URI."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+"Podem ser fornecidos na mesma linha meta-dados acerca do mirror, separados "
+"do URI por um tab. Múltiplos itens de meta-dados podem eles próprios serem "
+"separados por tabs ou espaços. (Esta é uma funcionalidade avançada apenas "
+"disponível no apt >= 1.6. As versões anteriores do apt irão falhar ao "
+"analisar mirrorlists que usem esta funcionalidade.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+"Desde o apt 1.6 que é também suportado o uso de mirrorlists comprimidas. "
+"Note que o nome do ficheiro da mirrorlist têm de especificar o algoritmo de "
+"compressão usado, não há auto-detecção baseada no conteúdo do ficheiro."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr "Selecção do Mirror por meta-dados"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+"Como especificado no formato, um mirror pode ter meta-dados adicionais "
+"acrescentados para impedir que um mirror seja seleccionado para obter um "
+"ficheiro que não corresponda a esses meta-dados. Deste modo a mirrorlist "
+"pode por exemplo conter mirrors parciais que servem apenas certas "
+"arquitecturas e o APT irá automaticamente escolher um mirror diferente para "
+"ficheiros que requeiram uma arquitectura não listada. São suportados limites "
+"para a arquitectura (<literal>arch</literal>), nome de código do lançamento "
+"(<literal>codename</literal>), componente do repositório onde o ficheiro "
+"está (<literal>component</literal>), linguagem a que o ficheiro se aplica "
+"(<literal>lang</literal>), nome de suite do lançamento (<literal>suite</"
+"literal>) e o tipo do ficheiro (<literal>type</literal>)."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr "Ordem de recurso para mirrors"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+"Se nenhuma prioridade for dada para um mirror via chave de meta-dados "
+"<literal>priority</literal>, a ordem em que os mirrors são contactados é "
+"aleatória. Se um certo conjunto de mirrors deve ser tentado primeiro antes "
+"de qualquer outro, pode ser explicitamente definida uma prioridade. Os "
+"mirrors com o número menor são tentados primeiro. Os mirrors que não têm "
+"prioridade explícita definida são definidos com o número mais alto possível "
+"e assim são tentados em último. A escolha entre mirrors com a mesma "
+"prioridade é de novo aleatória."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr "Transportes permitidos numa mirrorlist"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+"A disponibilidade e escolha dos transportes numa mirrorlist está limitada em "
+"como io cliente do APT está a aceder à mirrorlist. Se for usado um "
+"transporte local como <literal>file</literal> ou <literal>copy</literal>, a "
+"mirrorlist também pode incluir fontes locais, enquanto que uma mirrorlist "
+"acedida via <literal>http</literal> não pode. Adicionalmente, uma mirrorlist "
+"não pode conter outra mirrorlist ou outros transportes de invólucro (como "
+"<package>apt-transport-tor</package>). Veja a documentação destes "
+"transportes em como os usar com o método de mirror."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+"Note que as versões do apt anteriores a 1.6 não suportam mais nenhum "
+"transporte para além de <literal>http</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr "Exemplo básico"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+"Um exemplo de mirrorlist básico suportado por todas as versões do apt com um "
+"método de mirror (>= 0.7.24) no qual o cliente irá pegar em qualquer um dos "
+"três mirrors:"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+"Assumindo que um ficheiro com este conteúdo está armazenado em <filename>/"
+"etc/apt/mirrorlist.txt</filename> na sua máquina, pode ser usado desta "
+"maneira em &sources-list; (desde o apt 1.6):"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+"Todas as versões do método mirror suportam uma mirrorlist acessível via "
+"HTTP, portanto assumindo que está disponível em <literal>http://apt.example."
+"org/mirror.lst</literal> a entrada sources.list de cima poderá, em vez "
+"dessa, ser escrita como:"
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+"Note que desde o apt 1.6 que o uso de <literal>mirror+http</literal> deve "
+"ser preferido a <literal>mirror</literal> para uniformidade. A "
+"funcionalidade é a mesma."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr "Exemplo com selecção de mirror de meta-dados-avançado"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+"Como explicado nas definições de formato as versões do apt anteriores a 1.6 "
+"não suportam isto e irão falhar ao analisar a mirrorlist. Este exemplo de "
+"mirrorlist é complicada intencionalmente para mostrar alguns aspectos da "
+"selecção. É assumida a seguinte configuração: O primeiro mirror é um mirror "
+"local acedido via método file, mas potencialmente incompleto. O segundo "
+"mirror tem uma boa ligação, mas é um mirror parcial pois só contém ficheiros "
+"relacionados com as arquitecturas <literal>amd64</literal> e <literal>all</"
+"literal>. Os restantes mirrors são mirrors médios que são devem ser "
+"contactados se os anteriores não funcionarem."
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+"Nesta configuração com esta mirrorlist o primeiro mirror será usado para "
+"descarregar todos os ficheiros de índice assumindo que a própria mirrorlist "
+"é acedida via transporte local como <literal>file</literal>. Se não o for, o "
+"mirror é caso contrário inacessível ou se não conter o ficheiro requisitado, "
+"será usado outro mirror para obter o ficheiro, escolhido dependendo do tipo "
+"de ficheiro. Um ficheiro index será servido pelo último mirror da lista, "
+"enquanto um pacote da arquitectura <literal>amd64</literal> é servido pelo "
+"segundo e aqueles, por exemplo, da arquitectura <literal>i386</literal> por "
+"um dos últimos três."
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr "pt"
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr "Guia de Utilizador do APT"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr "Jason Gunthorpe"
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr "jgg@debian.org"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr "Versão &apt-product-version;"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr ""
+"Este documento disponibiliza uma visão geral de como usar o gestor de "
+"pacotes APT."
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr "Aviso de Licença"
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"\"APT\" e este documento são software livre; você pode distribuí-lo e/ou "
+"modificá-lo sob os termos da GNU General Public License como publicada pela "
+"Free Software Foundation; seja na versão 2 da Licença, ou (por sua opção) "
+"qualquer versão posterior."
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+"Para mais detalhes em sistemas Debian, veja o ficheiro /usr/share/common-"
+"licenses/GPL para a licença completa."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr "Geral"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+"O pacote APT contém actualmente duas secções, o método <command>dselect</"
+"command> do APT e a interface de utilizador de linha de comandos "
+"<command>apt-get</command>. Ambos disponibilizam uma maneira de instalar e "
+"remover pacotes assim como descarregar novos pacotes da Internet."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr "Anatomia do Sistema de Pacotes"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+"O sistema de pacotes Debian tem uma grande quantidade de informação "
+"associada a cada pacote para ajudar a assegurar que este se integra de modo "
+"limpo e fácil no sistema. A mais proeminente das suas funcionalidades é o "
+"sistema de dependências."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+"O sistema de dependências permite a programas individuais fazerem uso de "
+"elementos partilhados no sistema tais como as bibliotecas. Facilita a "
+"colocação de porções de um programa usadas raramente em pacotes separados "
+"para reduzir o número de coisas que é necessário instalar ao utilizador "
+"médio. Também permite opções em agentes de transporte de mail, servidores X "
+"e mais."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+"O primeiro passo para compreender o sistema de dependências é pegar no "
+"conceito de uma dependência simples. O significado de uma dependência "
+"simples é que um pacote requer outro pacote seja instalado ao mesmo tempo "
+"para funcionar correctamente."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+"Por exemplo, mailcrypt é uma extensão do emacs que ajuda a encriptar mail "
+"com GPG. Sem o GPGP instalado o mailcrypt é inútil, então o mailcrypt tem "
+"uma dependência simples do GPG. Também, porque é uma extensão do emacs, tem "
+"uma dependência simples do emacs, e sem o emacs é completamente inútil."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+"A outra dependência importante a compreender é a dependência de conflito. "
+"Significa que um pacote, quando instalado com outro pacote, não irá "
+"funcionar e pode ser extremamente prejudicial para o sistema. Como exemplo "
+"considere um agente de transporte de mail como o sendmail, exim ou qmail. "
+"Não é possível ter dois agentes de transporte de mail instalados porque "
+"ambos precisam de escutar na rede para receberem mail. Tentar instalar dois "
+"irá danificar seriamente o sistema, por isso todos os agentes de transporte "
+"de mail têm uma dependência de conflito com todos os outros agentes de "
+"transporte de mail."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+"Como uma complicação adicional existe a possibilidade de um pacote fingir "
+"ser outro pacote. Considere que exim e sendmail para muitas intenções são "
+"idênticos, ambos entregam mail e compreendem uma interface comum. Por isso, "
+"o sistema de pacotes tem um modo para eles declararem que são ambos mail-"
+"transport-agents. Portanto, ambos exim e sendmail declaram que "
+"disponibilizam um mail-transport-agent e outros pacotes que precisam de um "
+"agente de transporte de mail dependem de um mail-transport-agent. Isto pode "
+"adicionar uma grande confusão quando se tenta corrigir pacotes manualmente."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+"Em qualquer altura uma única dependência pode ser satisfeita por pacotes que "
+"já estão instalados ou podem não estar. O APT tenta ajudar a resolver "
+"problemas com dependências ao disponibilizar um número de algoritmos "
+"automáticos que ajudam a seleccionar os pacotes para instalação."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr "apt-get"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+"<command>apt-get</command> fornece uma maneira simples de instalar pacotes a "
+"partir da linha de comandos. Ao contrário do <command>dpkg</command>, o "
+"<command>apt-get</command> não compreende os ficheiros .deb, funciona com o "
+"nome próprio do pacote e apenas pode instalar arquivos .deb a partir de uma "
+"<emphasis>Source</emphasis>."
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+"se você está a usar um servidor proxy http você tem que definir a variável "
+"de ambiente http_proxy primeiro, veja sources.list(5)"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+"O primeira <placeholder type=\"footnote\" id=\"0\"/> coisa que deve ser "
+"feita antes de usar <command>apt-get</command> é obter as listas de pacotes "
+"a partir das <emphasis>Sources</emphasis> para que ele saiba que pacotes "
+"estão disponíveis. Isto é feito com <literal>apt-get update</literal>. Por "
+"exemplo,"
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr "Uma vez actualizado existem vários comandos que podem ser usados:"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr "upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+"Upgrade irá tentar actualizar gentilmente todo o sistema. Upgrade nunca irá "
+"instalar um pacote novo ou remover um pacote existente, nem nunca irá "
+"actualizar um pacote que possa causar a quebra de outro pacote. Isto pode "
+"ser usado diariamente para actualizar o sistema com relativa segurança. "
+"Upgrade ira listar todos os pacotes que não pode actualizar, isto geralmente "
+"significa que eles dependem de novos pacotes ou entram em conflito com algum "
+"outro pacote. <command>dselect</command> ou <literal>apt-get install</"
+"literal> podem ser usados para forçar estes pacotes a instalar."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr "install"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+"Install é usado para instalar pacotes pelo nome. O pacote é obtido "
+"automaticamente e instalado. Isto pode ser útil se você já conhecer o nome "
+"do pacote a instalar e não quer ir para uma GUI para o seleccionar. Podem "
+"ser passados qualquer número de pacotes para instalar, todos eles serão "
+"obtidos. Install tenta automaticamente resolver problemas de dependências "
+"com os pacotes listados e irá escrever um sumário e pedir confirmação se "
+"algo mais que os seus argumentos serão alterados."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr "dist-upgrade"
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+"Dist-upgrade é um actualizador completo desenhado para simplificar a "
+"actualização entre lançamentos da Debian. Usa um algoritmo sofisticado para "
+"determinar o melhor conjunto de pacotes a instalar, actualizar ou remover "
+"para obter o máximo do sistema para o novo lançamento. Em algumas situações "
+"pode ser desejável usar o dist-upgrade em vez de passar o tempo a resolver "
+"dependências manualmente no <command>dselect</command>. Assim que o dist-"
+"upgrade tiver terminado então pode ser usado o <command>dselect</command> "
+"para instalar quaisquer pacotes que tenham ficado de fora."
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+"É importante observar de perto o que o dist-upgrade vai fazer, as suas "
+"decisões podem por vezes ser bastante surpreendentes."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+"<command>apt-get</command> tem várias opções de linha de comandos que estão "
+"detalhados no seu manual, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. A opção mais útil é "
+"<literal>-d</literal> que não instala os pacotes obtidos, Se o sistema tiver "
+"que descarregar um grande número de pacotes seria indesejável começar a "
+"instalá-los no caso de algo correr mal. Quando se usa <literal>-d</literal> "
+"os arquivos descarregados podem ser instalados simplesmente ao correr de "
+"novo comando que s descarregou mas sem o <literal>-d</literal>."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr "DSelect"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+"O método <command>dselect</command> do APT disponibiliza o sistema APT "
+"completo com a GUI de selecção de pacotes <command>dselect</command>. O "
+"<command>dselect</command> é usado para seleccionar os pacotes a serem "
+"instalados ou removidos e o APT instala-os."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+"Para activar o método APT você precisa de seleccionar [A]ccess no "
+"<command>dselect</command> e depois escolher o método APT. Ser-lhe-à "
+"perguntado por um conjunto de <emphasis>Sources</emphasis> que são os "
+"lugares de onde obter os arquivos. Estes podem ser sites remotos da "
+"Internet, mirrors Debian locais ou CD-ROMs. Cada source pode disponibilizar "
+"um fragmento do arquivo Debian total. O APT irá automaticamente combiná-los "
+"para formar um conjunto completo de pacotes. Se tem um CD-ROM, então é boa "
+"ideia especificá-lo em primeiro lugar e depois especificar um mirror para "
+"ter acesso às correcções de bugs mais recentes. O APT irá automaticamente "
+"usar os pacotes no seu CD-ROM antes de descarregar da Internet."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+" Configurar uma lista de localizações fonte da distribuição\n"
+"\n"
+" Por favor forneça o URL base da distribuição Debian.\n"
+" Os esquemas de acesso que conheço são: http file\n"
+"\n"
+" Por exemplo:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+"A configuração de <emphasis>Sources</emphasis> começa por perguntar pela "
+"base do arquivo Debian, usando por predefinição um mirror HTTP. Depois "
+"pergunta qual a distribuição a obter."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+" Por favor forneça a etiqueta da distribuição a obter ou um caminho para o\n"
+" ficheiro package terminando com um /. As etiquetas da\n"
+" distribuição são tipicamente algo como: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+"A distribuição refere-se à versão Debian no arquivo, <emphasis>stable</"
+"emphasis> refere-se à última versão lançada e <emphasis>unstable</emphasis> "
+"refere-se à versão de desenvolvimento. <emphasis>non-US</emphasis> apenas "
+"está disponível em alguns mirrors e refere-se a pacotes que contém "
+"tecnologia de encriptação ou outras coisas que não podem ser exportadas dos "
+"Estados Unidos. No entanto importar estes pacotes para os US é legal."
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+" Por favor forneça os componentes a obter\n"
+" Tipicamente os componentes são algo como: main contrib non-free\n"
+"\n"
+" Componentes [main contrib non-free]:\n"
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+"A lista de componentes refere-se à lista das sub-distribuições a obter. A "
+"distribuição é dividida baseando-se nas licenças do software, sendo main "
+"pacotes livres DFSG enquanto contrib e non-free contêm coisas que têm várias "
+"restrições colocadas no seu uso e distribuição."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+"Pode ser adicionado qualquer número de fontes, o script de configuração irá "
+"continuar a perguntar-lhe até que tenha especificado todas as que deseja."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+"Antes de começar a usar o <command>dselect</command> é necessário actualizar "
+"a lista disponível ao seleccionar [U]pdate no menu. Isto é um super-conjunto "
+"do <literal>apt-get update</literal> que torna a informação obtida "
+"disponível ao <command>dselect</command>. Deve ser executado o [U]pdate "
+"mesmo que tenha sido feito <literal>apt-get update</literal> antes."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+"Você pode depois fazer as suas selecções usando [S]elect e depois executar a "
+"instalação usando [I]nstall. Quando se usa o método APT os comandos [C]onfig "
+"e [R]emove não fazem sentido, o comando [I]nstall executa ambos juntamente."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+"Por predefinição o APT irá automaticamente remover o ficheiro de pacote (."
+"deb) assim que ele tenha sido instalado com sucesso. Para alterar este "
+"comportamento coloque <literal>Dselect::clean \"prompt\";</literal> em /etc/"
+"apt/apt.conf."
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr "A Interface"
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+"O método <command>dselect</command> na verdade é um conjunto de scripts "
+"wrapper para o <command>apt-get</command>. O método disponibiliza mais "
+"funcionalidades que aquelas presentes no <command>apt-get</command> sozinho."
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+"Ambos método <command>dselect</command> do APT e <command>apt-get</command> "
+"partilham a mesma interface. É um sistema simples que geralmente lhe diz o "
+"que vai fazer e depois fá-lo. <placeholder type=\"footnote\" id=\"0\"/> Após "
+"escrever um sumário do que vai acontecer, o APT depois irá escrever algumas "
+"mensagens de estado informativo para que você possa estimar o progresso e "
+"quanto falta fazer."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr "Arranque"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+"Antes de todas as operações, excepto a update, o APT executa um número de "
+"acções para preparar o seu estado interno. Também faz algumas verificações "
+"do estado do sistema. A qualquer altura estas operações pode ser executadas "
+"correndo <literal>apt-get check</literal>."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+"A primeira coisa que faz é ler todos os ficheiros de pacotes para a memória. "
+"O APT usa um esquema de cache para que esta operação seja mais rápida na "
+"segunda vez que é executada. Se alguns dos ficheiros de pacotes não forem "
+"encontrados serão ignorados e será mostrado um aviso quando o apt-get "
+"terminar."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+"A operação final executa uma análise detalhada das dependências do sistema. "
+"Verifica cada dependência de cada pacote instalado ou desempacotado e "
+"considera se está OK. Caso isto encontre um problema, então é escrito um "
+"relatório e o <command>apt-get</command> recusa-se a funcionar."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+"Neste exemplo o sistema tem muitos problemas, incluindo um sério problema "
+"com libreadlineg2. Para cada pacote que tem dependências não satisfeitas, é "
+"escrita uma linha indicando o pacote com o problema e as dependências que "
+"não estão satisfeitas. É também incluída uma explicação curta de porquê o "
+"pacote tem um problema de dependência."
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+"No entanto o APT considera todas as dependências conhecidas e tenta prevenir "
+"pacotes quebrados"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+"Existem duas maneiras de um sistema entrar num estado de quebra como este. A "
+"primeira é causada pelo <command>dpkg</command> que não vê algumas relações "
+"subtis entre pacotes quando executa actualizações. <placeholder type="
+"\"footnote\" id=\"0\"/>. A segunda é se uma instalação de pacote falha "
+"durante uma operação. Nesta situação um pacote pode ter sido desempacotado "
+"sem que as suas dependências tenham sido instaladas."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+"A segunda situação é muito menos séria que a primeira porque o APT coloca "
+"certos constrangimentos na ordem que os pacotes são instalados. Em ambos os "
+"casos, fornecer a opção <literal>-f</literal> ao <command>apt-get</command> "
+"irá fazer com que o APT deduza uma solução possível para o problema e depois "
+"continue. O método <command>dselect</command> do APT fornece sempre a opção "
+"<literal>-f</literal> para permitir uma continuação fácil de scripts do "
+"responsável com falhas."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+"No entanto, se for usada a opção <literal>-f</literal> para corrigir um "
+"sistema seriamente quebrado causado pelo primeiro caso, então é possível que "
+"ou falhe imediatamente ou falhe na sequência de instalação. Em qualquer dos "
+"casos é necessário usar o dpkg manualmente (possivelmente com opções de "
+"forçar) para corrigir a situação o suficiente para permitir ao APT continuar."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr "O Relatório de Estado"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+"Antes de prosseguir, o <command>apt-get</command> irá apresentar um "
+"relatório do que irá acontecer. Geralmente o relatório reflecte o tipo de "
+"operações a ser executadas mas há vários elementos comuns. Em todos os casos "
+"a lista reflecte o estado final das coisas, tendo em conta a opção <literal>-"
+"f</literal> e quaisquer outras actividades relevantes ao comando que vai ser "
+"executado."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr "A lista de Pacotes Extra"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+"Os seguinte pacotes extra serão instalados:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+"A lista de Pacotes Extra mostra todos os pacotes que irão ser instalados ou "
+"actualizados em excesso daqueles mencionados na linha de comandos. É apenas "
+"gerada para um comando <literal>install</literal>. Os pacotes listados são "
+"geralmente o resultado de uma Auto instalação."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr "Os Pacotes para Remover"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+"Os seguintes pacotes irão ser REMOVIDOS:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+"A lista Pacotes para Remover mostra todos os pacotes que irão ser removidos "
+"do sistema. Pode ser mostrada para qualquer das operações e deve ser-lhe "
+"dada uma inspecção cuidadosa para assegurar que nada de importante vai ser "
+"removido. A opção <literal>-f</literal> é especialmente boa a gerar pacotes "
+"para remover, portanto neste caso deve-se usar cuidados extremos. A lista "
+"pode conter pacotes que vão ser removidos porque estão apenas parcialmente "
+"instalados, possivelmente devido a uma instalação abortada."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr "A lista de Novos Pacotes"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+"Os seguintes pacotes NOVOS irão ser instalados:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+"A lista de Novos Pacotes é simplesmente um lembrete do que vai acontecer. Os "
+"pacotes listados não estão instalados presentemente no sistema mas irão "
+"estar quando o APT terminar."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr "A lista Kept Back"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+"Os seguintes pacotes formam mantidos na versão antiga\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+"Sempre que todo o sistema é actualizado existe a possibilidade que novas "
+"versões de pacotes não possam ser instaladas porque requerem coisas novas ou "
+"entram em conflito com coisas já instaladas. Nestes casos o pacote irá "
+"aparecer na lista Kept Back. A melhor maneira de convencer os pacotes "
+"listados aqui a instalarem é com o <literal>apt-get install</literal> ou "
+"usando o <command>dselect</command> para resolver os seus problemas."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr "Aviso de Pacotes Segurados"
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+"Os seguintes pacotes segurados irão ser alterados:\n"
+" cvs\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+"Por vezes você pode pedir ao APT para instalar um pacote que está retido, "
+"nestes casos ele mostra um aviso que o pacote segurado vai ser alterado. "
+"Isto apenas deve acontecer durante um dist-upgrade ou install."
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr "Sumário final"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+"Finalmente, o APT irá escrever um sumário de todas as alterações que irão "
+"acontecer."
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+"206 pacotes actualizados, 8 instalados de novo, 23 para remover e 51 não actualizados.\n"
+"12 pacotes não totalmente instalados ou removidos.\n"
+"É necessário obter 65.7M/66.7M de arquivos. Após desempacotamento será usado 26.5M.\n"
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+"A primeira linha do sumário é simplesmente uma versão reduzida de todas as "
+"listas e inclui o número de actualizações - que é os pacotes já instalados "
+"que têm novas versões disponíveis. A segunda linha indica o número de "
+"pacotes mal configurados, possivelmente o resultado de uma instalação "
+"abortada. A linha final mostra os requisitos de espaço que a instalação "
+"precisa. O primeiro par de número refere-se ao tamanho dos ficheiros de "
+"arquivos. O primeiro número indica o número de bytes que precisam ser "
+"obtidos a partir das localizações remotas e o segundo indica o tamanho total "
+"do todos os arquivos necessários. O número seguinte indica a diferença de "
+"tamanho entre os pacotes presentemente instalados e os pacotes instalados de "
+"fresco. É aproximadamente equivalente ao espaço requerido em /usr após tudo "
+"estar feito. Se forem removidos um grande número de pacotes então o valor "
+"pode indicar a quantidade de espaço que irá ser libertado."
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+"Outros relatórios podem ser gerados ao usar a opção -u para mostrar os "
+"pacotes a actualizar, e são semelhantes aos exemplos prévios."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr "O Mostrador de Estado"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+"Durante a descarga dos arquivos e ficheiros de pacotes, o APT escreve uma "
+"série de mensagens de estado."
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+"A linhas iniciadas com <emphasis>Get</emphasis> são escritas quando o APT "
+"começa a obter um ficheiro enquanto a última linha indica o progresso da "
+"descarga. O primeiro valor percentual na linha de progresso indica a "
+"percentagem total completa de todos os ficheiros. Infelizmente como o "
+"tamanho dos ficheiros de Pacotes é desconhecido o <literal>apt-get update</"
+"literal> estima a percentagem de pronto o que causa algumas imprecisões."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+"A secção seguinte da linha de estado é repetida para cada processo de "
+"descarga e indica a operação a ser executada e alguma informação útil acerca "
+"do que está a acontecer. Por vezes esta secção irá simplesmente ler "
+"<emphasis>Forking</emphasis> o que representa que o SO está a carregar o "
+"módulo de download. A primeira palavra após o [ é o número de obtenção como "
+"mostrado nas linhas de histórico. A palavra seguinte é o nome em formato "
+"curto do objecto a ser descarregado. Para os arquivos irá conter o nome do "
+"pacote que está a ser descarregado."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+"Dentro da única citação está uma string de informação que indica o progresso "
+"da fase de negociação do download. Progride tipicamente de <emphasis>A "
+"Ligar</emphasis> para <emphasis>À espera do ficheiro</emphasis> para "
+"<emphasis>A descarregar</emphasis> ou <emphasis>A resumir</emphasis>. O "
+"valor final é o número de bytes descarregados a partir do site remoto. Uma "
+"vez começado a descarga isto é representado como <literal>102/10.2k</"
+"literal> indicando que 102 bytes foram obtidos e são esperados "
+"10.2kilobytes. O tamanho total é sempre representado numa anotação de 4 "
+"figuras para preservar espaço. Após a amostragem do tamanho está um medidor "
+"de percentagem para o próprio ficheiro. O segundo último elemento é a "
+"velocidade média instantânea. Estes valores são actualizados a cada 5 "
+"segundos e reflectem a taxa de dados transferidos para esse período. "
+"Finalmente é mostrado o tempo estimado de transferência. Isto é actualizado "
+"regularmente e reflecte o tempo para completar tudo ao ritmo de "
+"transferência mostrado."
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+"O mostrador de estado actualiza-se a cada meio segundo para disponibilizar "
+"uma informação de retorno constante do progresso de descarga enquanto as "
+"linhas Get deslocam-se para trás sempre que uma nova linha é iniciada. Como "
+"o mostrador de estado é constantemente actualizado não é apropriado para "
+"registar num ficheiro, use a opção <literal>-q</literal> para remover o "
+"mostrador de estado."
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr "Dpkg"
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+"O APT usa o <command>dpkg</command> para instalar os arquivos e irá mudar "
+"para a interface do <command>dpkg</command> assim que a descarga estiver "
+"completa. O <command>dpkg</command> irá também fazer um número de perguntas "
+"conforme vai processando os pacotes e os próprios pacotes podem também fazer "
+"várias questões. Antes de cada pergunta há geralmente uma descrição do que "
+"se está a perguntar e as perguntas são demasiado variadas para serem "
+"discutidas aqui."
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr "Usando o APT Offline"
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+"Este documento descreve como usar o APT num ambiente sem rede, "
+"especificamente uma aproximação 'sneaker-net' para executar actualizações."
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr "Visão geral"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+"Normalmente o APT requer acesso directo a um arquivo Debian, seja duma media "
+"local ou através de rede. Outra queixa comum e que uma máquina Debian está "
+"numa ligação lenta, como um modem e outra máquina tem uma ligação muito "
+"rápida mas estão fisicamente distantes."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+"A solução para isto é usar grandes médias amovíveis como um disco Zip ou um "
+"disco SuperDisk. Estes discos não são suficientemente grandes para armazenar "
+"o arquivo Debian inteiro mas podem facilmente conter um subconjunto "
+"suficientemente grande para a maioria dos utilizadores. A ideia é usar o APT "
+"para gerar uma lista de pacotes que são necessários e depois obter-los para "
+"o disco usando outra máquina com boa ligação. É até possível usar outra "
+"máquina Debian com APT ou usar um SO completamente diferente e uma "
+"ferramenta de download como o wget. Deixe <emphasis>remote host</emphasis> "
+"representar a máquina que descarrega os pacotes, e <emphasis>target host</"
+"emphasis> aquela com má ou nenhuma ligação."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+"Isto é conseguido ao manipular com criatividade o ficheiro de configuração "
+"do APT. A premissa essencial para dizer ao APT para procurar num disco pelos "
+"seus ficheiros de arquivo. Note que o disco deve estar formatado com um "
+"sistema de ficheiros que saiba lidar com nomes de ficheiros longos como o "
+"ext2, fat32 ou vfat."
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr "Usando o APT em ambas máquinas"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+"Estando o APT disponível em ambas máquinas dá a configuração mais simples. A "
+"ideia básica é colocar uma cópia do ficheiro de estado no disco e usar a "
+"máquina remota para obter os ficheiros de pacotes mais recentes e decidir "
+"quais pacotes descarregar. A estrutura de directórios do disco deverá "
+"parecer-se com:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr "O ficheiro de configuração"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+"O ficheiro de configuração deve dizer ao APT para armazenar os seus ficheiro "
+"no disco e usar os ficheiros de configuração do disco também. O sources.list "
+"deve conter os sites apropriados que deseja usar a partir da máquina remota, "
+"e o ficheiro de estado deve ser uma cópia de <emphasis>/var/lib/dpkg/status</"
+"emphasis> a partir do <emphasis>target host</emphasis>. Por favor note, se "
+"está a usar um arquivo local você deve usar copy URIs, a sintaxe é idêntica "
+"a file URIs."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+"<emphasis>apt.conf</emphasis> tem de conter a informação necessária para "
+"fazer o APT usar o disco:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+" APT\n"
+" {\n"
+" /* Isto não é necessário se as duas máquinas forem da mesma arquitectura, diz\n"
+" ao APT remoto que arquitectura tem a máquina de destino */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Usa o disco para informação de estado e redirecciona o ficheiro de estado a partir de\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Caches binárias serão armazenadas localmente\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Localização da lista de fontes.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+"Mais detalhes podem ser vistos ao examinar o manual do apt.conf e o exemplo "
+"de ficheiro de configuração em <emphasis>/usr/share/doc/apt/examples/apt."
+"conf</emphasis>."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+"Na máquina de destino a primeira coisa a fazer é montar o disco e copiar "
+"<emphasis>/var/lib/dpkg/status</emphasis> para ele. Você também precisa de "
+"criar os directórios delineados na Visão Geral, <emphasis>archives/partial/</"
+"emphasis> e <emphasis>lists/partial/</emphasis>. Depois leve o disco até à "
+"máquina remota e configure o sources.list. Na máquina remota execute o "
+"seguinte:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT obtém os ficheiros de pacotes ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT obtém todos os pacotes necessários para actualizar a máquina de destino ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+"O comando dist-upgrade pode ser substituído por qualquer outro comando APT "
+"standard, particularmente dselect-upgrade. Você até pode usar um front-end "
+"do APT como o <emphasis>dselect</emphasis>. No entanto isto apresenta um "
+"problema ao comunicar as suas selecções de volta ao computador local."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+"Agora o disco contém todos os ficheiros de índice e os arquivos necessários "
+"para actualizar a máquina de destino. Devolva o disco e corra:"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT gera uma cópia local dos ficheiros de cache ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Ou qualquer outro comando APT ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+"Para uma função apropriada é necessário re-especificar que o ficheiro de "
+"estado seja o ficheiro local. Isto é muito importante!"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+"Se está a usar dselect você pode fazer a operação muito arriscada de copiar "
+"disc/status para /var/lib/dpkg/status para que quaisquer selecções que faça "
+"na máquina remota sejam actualizadas. Eu recomendo altamente que as pessoas "
+"apenas façam selecções na máquina local - mas isto pode nem sempre ser "
+"possível. NÃO copie o ficheiro de estado se entretanto correu o dpkg ou o "
+"APT!!"
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr "Usando APT e wget"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+"<emphasis>wget</emphasis> é uma ferramenta popular e portável de download "
+"que pode correr praticamente em qualquer máquina. Ao contrário do método "
+"acima, este requer que a máquina Debian já tenha uma lista de pacotes "
+"disponíveis."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+"A ideia básica é criar um disco que tem apenas os ficheiros de arquivo "
+"descarregados do site remoto. Isto é feito ao usar a opção --print-uris no "
+"apt-get e depois preparar um script wget para realmente ir buscar os pacotes."
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Operation"
+msgstr "Operação"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+"Ao contrário da técnica anterior, não são necessários ficheiros de "
+"configuração especiais. Nós usamos meramente os comandos standard do APT "
+"para gerar a lista de ficheiros."
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+" # apt-get dist-upgrade \n"
+" [ Escolha não quando perguntado, certifique-se que está contente com as acções ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+"Qualquer comando além do dist-upgrade pode ser usado aqui, incluindo dselect-"
+"upgrade."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+"O ficheiro /disc/wget-script irá agora conter uma lista de comandos do wget "
+"para executar de modo a obter os arquivos necessários. Este script deve ser "
+"corrido com o directório actual sendo o ponto de montagem do disco para que "
+"grave os resultados no disco."
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr "A máquina remota deverá fazer algo como"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+"Após os arquivos serem descarregados e o disco retornado à máquina Debian, a "
+"instalação pode prosseguir usando,"
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr "O qual irá usar os arquivos já obtidos e que estão no disco."
+
+#~ msgid ""
+#~ "<literal>http::Proxy</literal> sets the default proxy to use for HTTP "
+#~ "URIs. It is in the standard form of <literal>http://[[user][:pass]@]host[:"
+#~ "port]/</literal>. Per host proxies can also be specified by using the "
+#~ "form <literal>http::Proxy::&lt;host&gt;</literal> with the special "
+#~ "keyword <literal>DIRECT</literal> meaning to use no proxies. If no one of "
+#~ "the above settings is specified, <envar>http_proxy</envar> environment "
+#~ "variable will be used."
+#~ msgstr ""
+#~ "<literal>http::Proxy</literal> define o proxy http predefinido a usar "
+#~ "para URIs de HTTP. Está no formato standard de <literal>http://[[user][:"
+#~ "pass]@]host[:port]/</literal>. Também podem ser especificados proxies por "
+#~ "máquina ao usar o formato <literal>http::Proxy::&lt;host&gt;</literal> "
+#~ "com a palavra chave especial <literal>DIRECT</literal> que significa não "
+#~ "usar proxies. Se nenhuma das definições acima for especificada, será "
+#~ "usada a variável de ambiente <envar>http_proxy</envar>."
+
+#~ msgid ""
+#~ "The <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> and "
+#~ "<literal>proxy</literal> options work for HTTPS URIs in the same way as "
+#~ "for the <literal>http</literal> method, and default to the same values if "
+#~ "they are not explicitly set. The <literal>Pipeline-Depth</literal> option "
+#~ "is not yet supported."
+#~ msgstr ""
+#~ "As opções <literal>Cache-control</literal>, <literal>Timeout</literal>, "
+#~ "<literal>AllowRedirect</literal>, <literal>Dl-Limit</literal> e "
+#~ "<literal>proxy</literal> funcionam para URIs HTTPS do mesmo modo que para "
+#~ "o método <literal>http</literal>, e tem por predefinição os mesmos "
+#~ "valores se estes não forem definidos especificamente A opção "
+#~ "<literal>Pipeline-Depth</literal> ainda não é suportada."
+
+#~ msgid ""
+#~ "<literal>CaInfo</literal> suboption specifies place of file that holds "
+#~ "info about trusted certificates. <literal>&lt;host&gt;::CaInfo</literal> "
+#~ "is the corresponding per-host option. <literal>Verify-Peer</literal> "
+#~ "boolean suboption determines whether or not the server's host certificate "
+#~ "should be verified against trusted certificates. <literal>&lt;host&gt;::"
+#~ "Verify-Peer</literal> is the corresponding per-host option. "
+#~ "<literal>Verify-Host</literal> boolean suboption determines whether or "
+#~ "not the server's hostname should be verified. <literal>&lt;host&gt;::"
+#~ "Verify-Host</literal> is the corresponding per-host option. "
+#~ "<literal>SslCert</literal> determines what certificate to use for client "
+#~ "authentication. <literal>&lt;host&gt;::SslCert</literal> is the "
+#~ "corresponding per-host option. <literal>SslKey</literal> determines what "
+#~ "private key to use for client authentication. <literal>&lt;host&gt;::"
+#~ "SslKey</literal> is the corresponding per-host option. "
+#~ "<literal>SslForceVersion</literal> overrides default SSL version to use. "
+#~ "It can contain either of the strings '<literal>TLSv1</literal>' or "
+#~ "'<literal>SSLv3</literal>'. <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> is the corresponding per-host option."
+#~ msgstr ""
+#~ "A sub-opção <literal>CaInfo</literal> especifica o lugar do ficheiro que "
+#~ "contém informação acerca de certificados de confiança. <literal>&lt;"
+#~ "host&gt;::CaInfo</literal> é a opção 'por máquina' correspondente. A sub-"
+#~ "opção booleana <literal>Verify-Peer</literal> determina se o certificado "
+#~ "da máquina anfitriã deve ou não ser verificado com certificados de "
+#~ "confiança. <literal>&lt;host&gt;::Verify-Peer</literal> é a opção 'por "
+#~ "máquina' correspondente. A sub-opção booleana <literal>Verify-Host</"
+#~ "literal> determina se o nome da máquina servidora deve ao não ser "
+#~ "verificado. <literal>&lt;host&gt;::Verify-Host</literal> é a opção 'por "
+#~ "máquina' correspondente. <literal>SslCert</literal> determina qual "
+#~ "certificado a usar para autenticação de clientes. <literal>&lt;host&gt;::"
+#~ "SslCert</literal> é a opção 'por máquina' correspondente. "
+#~ "<literal>SslKey</literal> determina qual a chave privada a usar para "
+#~ "autenticação de clientes. <literal>&lt;host&gt;::SslKey</literal> é a "
+#~ "opção 'por máquina' correspondente. <literal>SslForceVersion</literal> "
+#~ "sobrepõe a versão SSL predefinida a usar. Pode conter qualquer uma das "
+#~ "strings 'TLSv1' ou 'SSLv3'. <literal>&lt;host&gt;::SslForceVersion</"
+#~ "literal> é a opção 'por máquina' correspondente."
+
+#~ msgid ""
+#~ "The http scheme specifies an HTTP server for the archive. If an "
+#~ "environment variable <envar>http_proxy</envar> is set with the format "
+#~ "http://server:port/, the proxy server specified in <envar>http_proxy</"
+#~ "envar> will be used. Users of authenticated HTTP/1.1 proxies may use a "
+#~ "string of the format http://user:pass@server:port/. Note that this is an "
+#~ "insecure method of authentication."
+#~ msgstr ""
+#~ "O esquema http especifica um servidor HTTP para o arquivo. Se uma "
+#~ "variável de ambiente <envar>http_proxy</envar> estiver definida com o "
+#~ "formato http://server:port/, será usado o servidor proxy especificado em "
+#~ "<envar>http_proxy</envar>. Os utilizadores de proxies HTTP/1.1 "
+#~ "autenticados pode usar uma string do formato http://user:pass@server:"
+#~ "port/. Note que este não é um método de autenticação seguro."
+
+#~ msgid "Archive Configuration"
+#~ msgstr "Configuração de Arquivo"
+
+#~ msgid "dpkg trigger usage (and related options)"
+#~ msgstr "Utilização trigger do dpkg (e opções relacionadas)"
+
+#~ msgid ""
+#~ "APT can call &dpkg; in such a way as to let it make aggressive use of "
+#~ "triggers over multiple calls of &dpkg;. Without further options &dpkg; "
+#~ "will use triggers once each time it runs. Activating these options can "
+#~ "therefore decrease the time needed to perform the install or upgrade. "
+#~ "Note that it is intended to activate these options per default in the "
+#~ "future, but as it drastically changes the way APT calls &dpkg; it needs a "
+#~ "lot more testing. <emphasis>These options are therefore currently "
+#~ "experimental and should not be used in production environments.</"
+#~ "emphasis> It also breaks progress reporting such that all front-ends will "
+#~ "currently stay around half (or more) of the time in the 100% state while "
+#~ "it actually configures all packages."
+#~ msgstr ""
+#~ "O APT pode chamar o &dpkg; num tal modo que o deixa fazer uso agressivo "
+#~ "dos triggers sobre múltiplas chamadas do &dpkg;. Sem mais opções o &dpkg; "
+#~ "irá usar triggers uma vez por cada vez que corre. Activando estas opções "
+#~ "pode portanto diminuir o tempo necessário para executar a instalação ou "
+#~ "actualização. Note que é intenção futura activar estas opções por "
+#~ "predefinição, mas como muda drasticamente a maneira como o APT chama o "
+#~ "&dpkg;, precisa de muitos mais testes. <emphasis>Estas opções são "
+#~ "portanto presentemente experimentais e não deve ser usadas em ambientes "
+#~ "produtivos.</emphasis> Também interrompe o relatório de progresso de modo "
+#~ "que todos os front-ends irão permanecer a cerca de metade (ou mais) do "
+#~ "tempo no estado de 100% enquanto na realidade está a configurar todos os "
+#~ "pacotes."
+
+#~ msgid ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+#~ msgstr ""
+#~ "DPkg::NoTriggers \"true\";\n"
+#~ "PackageManager::Configure \"smart\";\n"
+#~ "DPkg::ConfigurePending \"true\";\n"
+#~ "DPkg::TriggersPending \"true\";"
+
+#~ msgid ""
+#~ "Note that it is not guaranteed that APT will support these options or "
+#~ "that these options will not cause (big) trouble in the future. If you "
+#~ "have understand the current risks and problems with these options, but "
+#~ "are brave enough to help testing them, create a new configuration file "
+#~ "and test a combination of options. Please report any bugs, problems and "
+#~ "improvements you encounter and make sure to note which options you have "
+#~ "used in your reports. Asking &dpkg; for help could also be useful for "
+#~ "debugging proposes, see e.g. <command>dpkg --audit</command>. A defensive "
+#~ "option combination would be <placeholder type=\"literallayout\" id=\"0\"/>"
+#~ msgstr ""
+#~ "Note que não é garantido que o APT irá suportar estas opções ou que estas "
+#~ "opções não irão causar (grandes) problemas no futuro. Se você compreendeu "
+#~ "os riscos e problemas actuais com estas opções, mas tem coragem "
+#~ "suficiente para ajudar a testá-la, crie um novo ficheiro de configuração "
+#~ "e teste uma combinação de opções. Por favor reporte quaisquer bugs, "
+#~ "problemas e melhoramentos que encontre e certifique-se de anotar nos seus "
+#~ "relatórios quais as opções que usou. Pedir ajuda ao &dpkg; também pode "
+#~ "ser útil para propósitos de depuração, veja ex. <command>dpkg --audit</"
+#~ "command>. Uma combinação de opções defensiva seria <placeholder type="
+#~ "\"literallayout\" id=\"0\"/>"
+
+#~ msgid ""
+#~ "Add the no triggers flag to all &dpkg; calls (except the ConfigurePending "
+#~ "call). See &dpkg; if you are interested in what this actually means. In "
+#~ "short: &dpkg; will not run the triggers when this flag is present unless "
+#~ "it is explicitly called to do so in an extra call. Note that this option "
+#~ "exists (undocumented) also in older APT versions with a slightly "
+#~ "different meaning: Previously these option only append --no-triggers to "
+#~ "the configure calls to &dpkg; - now APT will also add this flag to the "
+#~ "unpack and remove calls."
+#~ msgstr ""
+#~ "Adiciona a bandeira 'no triggers' a todas as chamadas do &dpkg; (excepto "
+#~ "a chamada ConfigurePending). Veja &dpkg; se está interessado no que isto "
+#~ "realmente representa. Em resumo: o &dpkg; não irá correr os triggers "
+#~ "quando esta bandeira está presente a menos que seja explicitamente "
+#~ "chamado a fazê-lo numa chamada extra. Note que esta opção existe (não "
+#~ "documentada) também em versões mais antigas do APT com um significado "
+#~ "ligeiramente diferente: Anteriormente esta opção apenas acrescentava --no-"
+#~ "triggers às chamadas configure para o &dpkg; - agora o APT irá adicionar "
+#~ "esta bandeira também às chamadas unpack e remove."
+
+#~ msgid ""
+#~ "Valid values are \"<literal>all</literal>\", \"<literal>smart</literal>\" "
+#~ "and \"<literal>no</literal>\". The default value is \"<literal>all</"
+#~ "literal>\", which causes APT to configure all packages. The "
+#~ "\"<literal>smart</literal>\" way is to configure only packages which need "
+#~ "to be configured before another package can be unpacked (Pre-Depends), "
+#~ "and let the rest be configured by &dpkg; with a call generated by the "
+#~ "ConfigurePending option (see below). On the other hand, \"<literal>no</"
+#~ "literal>\" will not configure anything, and totally relies on &dpkg; for "
+#~ "configuration (which at the moment will fail if a Pre-Depends is "
+#~ "encountered). Setting this option to any value other than <literal>all</"
+#~ "literal> will implicitly also activate the next option by default, as "
+#~ "otherwise the system could end in an unconfigured and potentially "
+#~ "unbootable state."
+#~ msgstr ""
+#~ "Valores válidos são \"<literal>all</literal>\", \"<literal>smart</literal>"
+#~ "\" e \"<literal>no</literal>\". O valor predefinido é \"<literal>all</"
+#~ "literal>\" que faz com que o APT configure todos os pacotes. O modo "
+#~ "\"<literal>smart</literal>\" serve para configurar apenas pacotes que "
+#~ "precisam de ser configurados antes que outro pacote possa ser "
+#~ "desempacotado (pré-dependências) e o resto configurado pelo &dpkg; com "
+#~ "uma chamada gerada pela opção ConfigurePending (veja em baixo). Por outro "
+#~ "lado, \"<literal>no</literal>\" não irá configurar nada e confiar no "
+#~ "&dpkg; para configurações (o que de momento irá falhar se encontrar uma "
+#~ "pré-dependência). Definir esta opção para qualquer valor que diferente de "
+#~ "<literal>all</literal> irá também implicitamente activar a próxima opção "
+#~ "predefinida caso contrário o sistema poderia acabar num estado não "
+#~ "configurado onde potencialmente poderia não arrancar."
+
+#~ msgid ""
+#~ "Useful for the <literal>smart</literal> configuration as a package which "
+#~ "has pending triggers is not considered as <literal>installed</literal>, "
+#~ "and &dpkg; treats them as <literal>unpacked</literal> currently which is "
+#~ "a showstopper for Pre-Dependencies (see debbugs #526774). Note that this "
+#~ "will process all triggers, not only the triggers needed to configure this "
+#~ "package."
+#~ msgstr ""
+#~ "Útil para configuração <literal>smart</literal>, pois um pacote que tenha "
+#~ "triggers pendentes não é considerado como <literal>installed</literal> e "
+#~ "o &dpkg; trata-o como actualmente <literal>unpacked</literal> o que é um "
+#~ "modo de lidar com pré-dependências (veja debbugs #526774). Note que isto "
+#~ "irá processar todos os triggers, e não apenas os triggers necessários "
+#~ "para configurar este pacote."
+
+#~ msgid ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+#~ msgstr ""
+#~ "OrderList::Score {\n"
+#~ "\tDelete 500;\n"
+#~ "\tEssential 200;\n"
+#~ "\tImmediate 10;\n"
+#~ "\tPreDepends 50;\n"
+#~ "};"
+
+#~ msgid ""
+#~ "Essential packages (and their dependencies) should be configured "
+#~ "immediately after unpacking. It is a good idea to do this quite early in "
+#~ "the upgrade process as these configure calls also currently require "
+#~ "<literal>DPkg::TriggersPending</literal> which will run quite a few "
+#~ "triggers (which may not be needed). Essentials get per default a high "
+#~ "score but the immediate flag is relatively low (a package which has a Pre-"
+#~ "Depends is rated higher). These option and the others in the same group "
+#~ "can be used to change the scoring. The following example shows the "
+#~ "settings with their default values. <placeholder type=\"literallayout\" "
+#~ "id=\"0\"/>"
+#~ msgstr ""
+#~ "Os pacotes essenciais ( e as suas dependências) deve ser configurados "
+#~ "imediatamente após a descompactação. Será uma boa ideia fazer isto bem "
+#~ "cedo no processo de actualização pois estas chamadas de configuração "
+#~ "também requerem actualmente <literal>DPkg::TriggersPending</literal> o "
+#~ "que irá correr alguns triggers (que talvez não sejam necessários). Os "
+#~ "essenciais obtêm por predefinição uma pontuação alta mas a bandeira "
+#~ "'imediato' é relativamente baixa (um pacote que tenha uma pré-dependência "
+#~ "tem pontuação mais alta). Esta opção e as outras no mesmo grupo podem ser "
+#~ "usadas para alterar a pontuação. O exemplo seguinte mostra as definições "
+#~ "que são valores predefinidos. <placeholder type=\"literallayout\" id="
+#~ "\"0\"/>"
+
+#~ msgid "List fingerprints of trusted keys."
+#~ msgstr "Lista as fingerprints das chaves de confiança."
+
+#~ msgid "Local trust database of archive keys."
+#~ msgstr "Base de dados local de confiança de chaves de arquivos."
+
+#~ msgid "&keyring-filename;"
+#~ msgstr "&keyring-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive trusted keys."
+#~ msgstr "Chaveiro das chaves de confiança dos arquivos &keyring-distro;."
+
+#~ msgid "&keyring-removed-filename;"
+#~ msgstr "&keyring-removed-filename;"
+
+#~ msgid "Keyring of &keyring-distro; archive removed trusted keys."
+#~ msgstr ""
+#~ "Chaveiro das chaves de confiança removidas dos arquivos &keyring-distro;."
+
+#~ msgid "&apt-get;, &apt-conf;"
+#~ msgstr "&apt-get;, &apt-conf;"
+
+#~ msgid ""
+#~ "This is a space separated list of all the architectures that appear under "
+#~ "search section. The special architecture 'source' is used to indicate "
+#~ "that this tree has a source archive."
+#~ msgstr ""
+#~ "Isto é uma lista separada por espaços de todas as arquitecturas que "
+#~ "aparecem sob a secção de buscas. A arquitectura especial 'source' é usada "
+#~ "para indicar que esta árvore tem um arquivo fonte."
+
+#~ msgid ""
+#~ "<command>apt</command> (Advanced Package Tool) is the command-line tool "
+#~ "for handling packages. It provides a commandline interface for the "
+#~ "package management of the system. See also &apt-get; and &apt-cache; for "
+#~ "more low-level command options."
+#~ msgstr ""
+#~ "<command>apt</command> (Advanced Package Tool) é uma ferramenta de linha "
+#~ "de comandos para manuseamento de pacotes. Disponibiliza uma interface de "
+#~ "linha de comandos para a gestão de pacotes do sistema. Veja também &apt-"
+#~ "get; e &apt-cache; para mais opções de baixo nível dos comandos."
+
+#~ msgid ""
+#~ "<literal>search</literal> searches for the given term(s) and display "
+#~ "matching packages."
+#~ msgstr ""
+#~ "<literal>search</literal> procura por termo(s) determinado(s) e mostra os "
+#~ "pacotes correspondentes."
+
+#~ msgid ""
+#~ "<literal>show</literal> shows the package information for the given "
+#~ "package(s)."
+#~ msgstr ""
+#~ "<literal>show</literal> mostra a informação do pacote para o(s) pacote(s) "
+#~ "determinado(s)."
+
+#~ msgid ""
+#~ "<literal>install</literal> is followed by one or more package names "
+#~ "desired for installation or upgrading."
+#~ msgstr ""
+#~ "<literal>install</literal> é seguido por um ou mais nomes de pacotes que "
+#~ "se deseja instalar ou actualizar."
+
+#~ msgid ""
+#~ "<literal>update</literal> is used to resynchronize the package index "
+#~ "files from their sources."
+#~ msgstr ""
+#~ "<literal>update</literal> é usado para re-sincronizar o índice dos "
+#~ "pacotes a partir das suas fontes."
+
+#~ msgid "Script usage"
+#~ msgstr "Utilização de script"
+
+#~ msgid "Differences to &apt-get;"
+#~ msgstr "Diferenças para o &apt-get;"
+
+#~ msgid ""
+#~ "The <command>apt</command> command is meant to be pleasant for end users "
+#~ "and does not need to be backward compatible like &apt-get;. Therefore "
+#~ "some options are different:"
+#~ msgstr ""
+#~ "O comando <command>apt</command> destina-se a ser agradável para os "
+#~ "utilizadores finais e não precisa de ser compatível com as versões "
+#~ "anteriores como o &apt-get;. Por isso algumas opções são diferentes."
+
+#~ msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
+#~ msgstr "A opção <literal>DPkg::Progress-Fancy</literal> está activada."
+
+#~ msgid "The option <literal>APT::Color</literal> is enabled."
+#~ msgstr "A opção <literal>APT::Color</literal> está activada."
+
+#~ msgid ""
+#~ "The option <literal>upgrade</literal> has <literal>--with-new-pkgs</"
+#~ "literal> enabled by default."
+#~ msgstr ""
+#~ "A opção <literal>upgrade</literal> tem <literal>--with-new-pkgs</literal> "
+#~ "activado por predefinição."
+
+#~ msgid ""
+#~ "Pass advanced options to gpg. With adv --recv-key you can download the "
+#~ "public key."
+#~ msgstr ""
+#~ "Passa opções avançadas ao gpg. Com adv --recv-key você pode descarregar a "
+#~ "chave pública."
+
+#~ msgid "mark/unmark a package as being automatically-installed"
+#~ msgstr "marca/desmarca um pacote como sendo instalado automaticamente"
+
+#~ msgid ""
+#~ "<command>apt-mark</command> will change whether a package has been marked "
+#~ "as being automatically installed."
+#~ msgstr ""
+#~ "<command>apt-mark</command> irá modificar se um pacote foi marcado como "
+#~ "sendo instalado automaticamente."
+
+#~ msgid ""
+#~ "<literal>hold</literal> is used to mark a package as held back, which "
+#~ "will prevent the package from being automatically installed, upgraded or "
+#~ "removed. The command is only a wrapper around <command>dpkg --set-"
+#~ "selections</command> and the state is therefore maintained by &dpkg; and "
+#~ "not affected by the <option>--file</option> option."
+#~ msgstr ""
+#~ "<literal>hold</literal> é usado para marcar um pacote como retido, o que "
+#~ "vai prevenir que o pacote seja automaticamente instalado, actualizado ou "
+#~ "removido. O comando é apenas um invólucro em redor de <command>dpkg --set-"
+#~ "selections</command> e o estado é assim mantido pelo &dpkg; e não é "
+#~ "afectado pela opção <option>--file</option>."
+
+#~ msgid ""
+#~ "If a package comes from a archive without a signature, or with a "
+#~ "signature that apt does not have a key for, that package is considered "
+#~ "untrusted, and installing it will result in a big warning. <command>apt-"
+#~ "get</command> will currently only warn for unsigned archives; future "
+#~ "releases might force all sources to be verified before downloading "
+#~ "packages from them."
+#~ msgstr ""
+#~ "Se um pacote vem dum arquivo sem assinatura ou com uma assinatura para a "
+#~ "qual o apt não tem a chave, esse pacote é considerado 'não sendo de "
+#~ "confiança' e instalá-lo irá resultar num grande aviso. Actualmente o "
+#~ "<command>apt-get</command> irá avisar apenas de arquivos não assinados, "
+#~ "lançamentos futuros poderão vir a forçar que todas as fontes sejam "
+#~ "verificadas antes de descarregar pacotes delas."
+
+#~ msgid ""
+#~ "No action; perform a simulation of events that would occur but do not "
+#~ "actually change the system. Configuration Item: <literal>APT::Get::"
+#~ "Simulate</literal>."
+#~ msgstr ""
+#~ "Nenhuma acção; executa uma simulação dos eventos que irão ocorrer mas na "
+#~ "realidade não altera o sistema. Item de Configuração: <literal>APT::Get::"
+#~ "Simulate</literal>."
+
+#~ msgid ""
+#~ "Simulated runs performed as a user will automatically deactivate locking "
+#~ "(<literal>Debug::NoLocking</literal>), and if the option <literal>APT::"
+#~ "Get::Show-User-Simulation-Note</literal> is set (as it is by default) a "
+#~ "notice will also be displayed indicating that this is only a simulation. "
+#~ "Runs performed as root do not trigger either NoLocking or the notice - "
+#~ "superusers should know what they are doing without further warnings from "
+#~ "<literal>apt-get</literal>."
+#~ msgstr ""
+#~ "As simulações executadas como um utilizador irão desactivar "
+#~ "automaticamente o bloqueio (<literal>Debug::NoLocking</literal>), e se a "
+#~ "opção <literal>APT::Get::Show-User-Simulation-Note</literal> estiver "
+#~ "definida (como está por predefinição) será também mostrado um aviso "
+#~ "indicando que é apenas uma simulação. As execuções executadas pelo root "
+#~ "não accionam nem o NoLocking nem o aviso - os super-utilizadores devem "
+#~ "saber o que estão a fazer sem mais avisos do <literal>apt-get</literal>."
+
+#~ msgid ""
+#~ "Ignore if packages can't be authenticated and don't prompt about it. "
+#~ "This is useful for tools like pbuilder. Configuration Item: "
+#~ "<literal>APT::Get::AllowUnauthenticated</literal>."
+#~ msgstr ""
+#~ "Ignora se os pacotes não podem ser autenticados e não avisa sobre isso. "
+#~ "Isto é útil para ferramentas como o pbuilder. Item de Configuração: "
+#~ "<literal>APT::Get::AllowUnauthenticated</literal>."
+
+#~ msgid ""
+#~ "Version 2 of this protocol dumps more information, including the protocol "
+#~ "version, the APT configuration space and the packages, files and versions "
+#~ "being changed. Version 3 adds the architecture and <literal>MultiArch</"
+#~ "literal> flag to each version being dumped."
+#~ msgstr ""
+#~ "A versão 2 deste protocolo despeja mais informação, incluindo a versão de "
+#~ "protocolo, o espaço de configuração do APT e os pacotes, ficheiros e "
+#~ "versões que foram alteradas. A versão 3 adiciona a arquitectura e a "
+#~ "bandeira <literal>MultiArch</literal> a cada versão a ser despejada."
+
+#~ msgid ""
+#~ "to the versions that are not installed and do not belong to the target "
+#~ "release."
+#~ msgstr ""
+#~ "para as versões que não estão instaladas e não pertencem ao lançamento "
+#~ "destinado."
+
+#~ msgid ""
+#~ "Each line specifying a source starts with type (e.g. <literal>deb-src</"
+#~ "literal>) followed by options and arguments for this type. Individual "
+#~ "entries cannot be continued onto a following line. Empty lines are "
+#~ "ignored, and a <literal>#</literal> character anywhere on a line marks "
+#~ "the remainder of that line as a comment."
+#~ msgstr ""
+#~ "Cada linha que especifica uma fonte começa com o tipo (ex. <literal>deb-"
+#~ "src</literal>) seguido das opções e argumentos para esse tipo. As "
+#~ "entradas individuais não podem ser continuadas para a linha seguinte. As "
+#~ "linhas vazias são ignoradas, e um caracter <literal>#</literal> em "
+#~ "qualquer ponto numa linha marca o restante dessa linha como um comentário."
+
+#~ msgid "deb [ options ] uri suite [component1] [component2] [...]"
+#~ msgstr "deb [ opções ] uri suite [componente1] [componente2] [...]"
+
+#~ msgid ""
+#~ " Types: deb deb-src\n"
+#~ " URIs: http://example.com\n"
+#~ " Suites: stable testing\n"
+#~ " Sections: component1 component2\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ "\n"
+#~ " Types: deb\n"
+#~ " URIs: http://another.example.com\n"
+#~ " Suites: experimental\n"
+#~ " Sections: component1 component2\n"
+#~ " Enabled: no\n"
+#~ " Description: short\n"
+#~ " long long long\n"
+#~ " [option1]: [option1-value]\n"
+#~ " "
+#~ msgstr ""
+#~ " Tipos: deb deb-src\n"
+#~ " URIs: http://exemplo.com\n"
+#~ " Suites: stable testing\n"
+#~ " Secções: component1 component2\n"
+#~ " Descrição: curta\n"
+#~ " longa longa longa\n"
+#~ " [opção1]: [opção1-valor]\n"
+#~ "\n"
+#~ " Tipos: deb\n"
+#~ " URIs: http://outro.exemlo.com\n"
+#~ " Suites: experimental\n"
+#~ " Secções: component1 component2\n"
+#~ " Activo: não\n"
+#~ " Descrição: curta\n"
+#~ " longa longa longa\n"
+#~ " [opção1]: [opção1-valor]\n"
+#~ " "
+
+#~ msgid ""
+#~ "<literal>options</literal> is always optional and needs to be surrounded "
+#~ "by square brackets. It can consist of multiple settings in the form "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>. Multiple settings are separated by spaces. The "
+#~ "following settings are supported by APT (note however that unsupported "
+#~ "settings will be ignored silently):"
+#~ msgstr ""
+#~ "<literal>options</literal> é sempre opcional e precisa de ser rodeado por "
+#~ "parênteses rectos. Pode consistir um múltiplas definições no formato "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>. As múltiplas definições são separadas por "
+#~ "espaços. As seguinte definições são suportadas pelo APT (no entanto note "
+#~ "que as definições não suportadas serão ignoradas em silêncio):"
+
+#~ msgid ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> and <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> which can be "
+#~ "used to add/remove architectures from the set which will be downloaded."
+#~ msgstr ""
+#~ "<literal>arch+=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> e <literal>arch-=<replaceable>arch1</"
+#~ "replaceable>,<replaceable>arch2</replaceable>,…</literal> que podem ser "
+#~ "usadas para adicionar/remover arquitecturas do conjunto que será "
+#~ "descarregado."
+
+#~ msgid ""
+#~ "<literal>trusted=yes</literal> can be set to indicate that packages from "
+#~ "this source are always authenticated even if the <filename>Release</"
+#~ "filename> file is not signed or the signature can't be checked. This "
+#~ "disables parts of &apt-secure; and should therefore only be used in a "
+#~ "local and trusted context. <literal>trusted=no</literal> is the opposite "
+#~ "which handles even correctly authenticated sources as not authenticated."
+#~ msgstr ""
+#~ "<literal>trusted=yes</literal> pode ser definido para indicar que os "
+#~ "pacotes desta fonte são sempre autênticos mesmo que o ficheiro "
+#~ "<filename>Release</filename> não esteja assinado ou a assinatura não "
+#~ "possa ser verificada. Isto desactiva partes do &apt-secure; e deve por "
+#~ "isso ser usado apenas num contexto local e de confiança. "
+#~ "<literal>trusted=no</literal> é o oposto que lida com fontes mesmo "
+#~ "actualmente autenticadas como não sendo autênticas."
+
+#~ msgid "Some examples:"
+#~ msgstr "Alguns exemplos:"
+
+#, fuzzy
+#~| msgid ""
+#~| "deb http://ftp.debian.org/debian &stable-codename; main contrib non-"
+#~| "free\n"
+#~| "deb http://security.debian.org/ &stable-codename;/updates main contrib "
+#~| "non-free\n"
+#~| " "
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &debian-stable-codename; main contrib "
+#~ "non-free\n"
+#~ "deb http://security.debian.org/ &debian-stable-codename;/updates main "
+#~ "contrib non-free\n"
+#~ " "
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~ "deb http://security.debian.org/ &stable-codename;/updates main contrib "
+#~ "non-free\n"
+#~ " "
+
+#~ msgid ""
+#~ "As a temporary exception &apt-get; (not &apt;!) raises warnings only if "
+#~ "it encounters unauthenticated archives to give a slightly longer grace "
+#~ "period on this backward compatibility effecting change. This exception "
+#~ "will be removed in future releases and you can opt-out of this grace "
+#~ "period by setting the configuration option <option>Binary::apt-get::"
+#~ "Acquire::AllowInsecureRepositories</option> to <literal>false</literal> "
+#~ "or <option>--no-allow-insecure-repositories</option> on the command line."
+#~ msgstr ""
+#~ "Como uma excepção temporária o &apt-get; (não o &apt;!) dispara avisos "
+#~ "apenas se encontrar arquivos não autenticados para dar um período de "
+#~ "graça ligeiramente mais longo nesta alteração que afecta a "
+#~ "compatibilidade com versões anteriores. Esta excepção será removida em "
+#~ "lançamentos futuros e você pode optar por não usar este período de graça "
+#~ "ao definir a opção de configuração <option>Binary::apt-get::Acquire::"
+#~ "AllowInsecureRepositories</option> para <literal>false</literal> ou "
+#~ "<option>--no-allow-insecure-repositories</option> na linha de comandos."
+
+#~ msgid ""
+#~ "In the future APT will refuse to work with unauthenticated repositories "
+#~ "by default until support for them is removed entirely. Users have the "
+#~ "option to opt-in to this behavior already by setting the configuration "
+#~ "option <option>Acquire::AllowInsecureRepositories</option> to "
+#~ "<literal>false</literal>."
+#~ msgstr ""
+#~ "No futuro o APT irá recusar trabalhar com repositórios não autenticados "
+#~ "por predefinição até que o suporte para eles seja completamente removido. "
+#~ "Os utilizadores têm a opção de optar já por este comportamento ao definir "
+#~ "a opção de configuração <option>Acquire::AllowInsecureRepositories</"
+#~ "option> para <literal>false</literal>."
+
+#~ msgid ""
+#~ "Allow the update operation to load data files from a repository without a "
+#~ "trusted signature. If enabled this option no data files will be loaded "
+#~ "and the update operation fails with a error for this source. The default "
+#~ "is false for backward compatibility. This will be changed in the future."
+#~ msgstr ""
+#~ "Permite que a operação de actualização carregue ficheiros de dados de um "
+#~ "repositório sem uma assinatura confiável. Se esta opção estiver activa, "
+#~ "nenhum ficheiro de dados será carregado e a operação de actualização "
+#~ "falhará com um erro para esta fonte. A predefinição é ser falso para "
+#~ "compatibilidade com versões anteriores. Isto será modificado no futuro."
diff --git a/doc/po/pt_BR.po b/doc/po/pt_BR.po
new file mode 100644
index 0000000..92fbfc4
--- /dev/null
+++ b/doc/po/pt_BR.po
@@ -0,0 +1,9319 @@
+# Translation of apt package man pages
+# This file is distributed under the same license as the apt package.
+#
+# Translators:
+# André Luís Lopes <andrelop@ig.com.br>, 2003-2004
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt-doc 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2019-02-04 15:34+0100\n"
+"PO-Revision-Date: 2004-09-20 17:02+0000\n"
+"Last-Translator: André Luís Lopes <andrelop@debian.org>\n"
+"Language-Team: <debian-l10n-portuguese@lists.debian.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-author.team \"\n"
+" <author>\n"
+" <othername>APT team</othername>\n"
+" <contrib></contrib>\n"
+" </author>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY apt-qapage \"\n"
+"\t<para>\n"
+"\t\t<ulink url='http://packages.qa.debian.org/a/apt.html'>QA Page</ulink>\n"
+"\t</para>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, fuzzy, no-wrap
+msgid ""
+"<!-- Boiler plate Bug reporting section -->\n"
+"<!ENTITY manbugs \"\n"
+" <refsect1><title>Bugs</title>\n"
+" <para><ulink url='http://bugs.debian.org/src:apt'>APT bug page</ulink>.\n"
+" If you wish to report a bug in APT, please see\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</filename> or the\n"
+" &reportbug; command.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"\n"
+" <RefSect1><Title>Bugs</>\n"
+" <para>\n"
+" Consulte a <ulink url='http://bugs.debian.org/apt'>página de bugs do APT</>.\n"
+" Caso você queira relatar um bug no APT, por favor consulte o arquivo\n"
+" <filename>/usr/share/doc/debian/bug-reporting.txt</> ou o comando &reportbug;.\n"
+" </RefSect1>\n"
+
+#. type: Plain text
+#: apt.ent
+#, fuzzy, no-wrap
+msgid ""
+"<!-- Boiler plate Author section -->\n"
+"<!ENTITY manauthor \"\n"
+" <refsect1><title>Author</title>\n"
+" <para>APT was written by the APT team <email>apt@packages.debian.org</email>.\n"
+" </para>\n"
+" </refsect1>\n"
+"\">\n"
+msgstr ""
+"\n"
+" <RefSect1><Title>Author</>\n"
+" <para>\n"
+" O APT foi escrito pela equipe APT <email>apt@packages.debian.org</>.\n"
+" </RefSect1>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-commonoptions \"\n"
+" <varlistentry><term><option>-h</option></term>\n"
+" <term><option>--help</option></term>\n"
+" <listitem><para>Show a short usage summary.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-v</option></term>\n"
+" <term><option>--version</option></term>\n"
+" <listitem><para>Show the program version.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-c</option></term>\n"
+" <term><option>--config-file</option></term>\n"
+" <listitem><para>Configuration File; Specify a configuration file to use. \n"
+" The program will read the default configuration file and then this \n"
+" configuration file. If configuration settings need to be set before the\n"
+" default configuration files are parsed specify a file with the <envar>APT_CONFIG</envar>\n"
+" environment variable. See &apt-conf; for syntax information.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry>\n"
+" <term><option>-o</option></term>\n"
+" <term><option>--option</option></term>\n"
+" <listitem><para>Set a Configuration Option; This will set an arbitrary\n"
+" configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n"
+" <option>-o</option> and <option>--option</option> can be used multiple\n"
+" times to set different options.\n"
+" </para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, fuzzy, no-wrap
+msgid ""
+"<!-- Should be used within the option section of the text to\n"
+" put in the blurb about -h, -v, -c and -o -->\n"
+"<!ENTITY apt-cmdblurb \"\n"
+" <para>All command line options may be set using the configuration file, the\n"
+" descriptions indicate the configuration option to set. For boolean\n"
+" options you can override the config file by using something like \n"
+" <option>-f-</option>,<option>--no-f</option>, <option>-f=no</option>\n"
+" or several other variations.\n"
+" </para>\n"
+"\">\n"
+msgstr ""
+"\n"
+" <para>\n"
+" Todas as opções de linha de comando podem ser definidas usando o\n"
+" arquivo de configuração, as descrições indicam a opção de configuração\n"
+" a ser definida. Para opções booleanas você pode sobrepor o arquivo de\n"
+" configuração usando algo como <option/-f-/,<option/--no-f/,\n"
+" <option/-f=no/ ou diversas outras variantes.\n"
+" </para>\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-aptconf \"\n"
+" <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n"
+" <listitem><para>APT configuration file.\n"
+" Configuration Item: <literal>Dir::Etc::Main</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/apt.conf.d/</filename></term>\n"
+" <listitem><para>APT configuration file fragments.\n"
+" Configuration Item: <literal>Dir::Etc::Parts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-cachearchives \"\n"
+" <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n"
+" <listitem><para>Storage area for retrieved package files.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n"
+" <listitem><para>Storage area for package files in transit.\n"
+" Configuration Item: <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-preferences \"\n"
+" <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n"
+" <listitem><para>Version preferences file.\n"
+" This is where you would specify &quot;pinning&quot;,\n"
+" i.e. a preference to get certain packages\n"
+" from a separate source\n"
+" or from a different version of a distribution.\n"
+" Configuration Item: <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n"
+" <listitem><para>File fragments for the version preferences.\n"
+" Configuration Item: <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-sourceslist \"\n"
+" <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n"
+" <listitem><para>Locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n"
+" <listitem><para>File fragments for locations to fetch packages from.\n"
+" Configuration Item: <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-statelists \"\n"
+" <varlistentry><term><filename>&statedir;/lists/</filename></term>\n"
+" <listitem><para>Storage area for state information for each package resource specified in\n"
+" &sources-list;\n"
+" Configuration Item: <literal>Dir::State::Lists</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n"
+" <listitem><para>Storage area for state information in transit.\n"
+" Configuration Item: <literal>Dir::State::Lists</literal> (<filename>partial</filename> will be implicitly appended)</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-trustedgpg \"\n"
+" <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n"
+" <listitem><para>Keyring of local trusted keys, new keys will be added here.\n"
+" Configuration Item: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+" <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n"
+" <listitem><para>File fragments for the trusted keys, additional keyrings can\n"
+" be stored here (by other packages or the administrator).\n"
+" Configuration Item <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!ENTITY file-extended_states \"\n"
+" <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n"
+" <listitem><para>Status list of auto-installed packages.\n"
+" Configuration Item: <literal>Dir::State::extended_states</literal>.\n"
+" </para></listitem>\n"
+" </varlistentry>\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
+" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
+"<!ENTITY translation-title \"TRANSLATION\">\n"
+msgstr "<!ENTITY translation-title \"TRADUÇÃO\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: This is a placeholder. You should write here who has contributed\n"
+" to the translation in the past, who is responsible now and maybe further information\n"
+" specially related to your translation. -->\n"
+"<!ENTITY translation-holder \"\n"
+" The english translation was done by John Doe <email>john@doe.org</email> in 2009,\n"
+" 2010 and Daniela Acme <email>daniela@acme.us</email> in 2010 together with the\n"
+" Debian Dummy l10n Team <email>debian-l10n-dummy@lists.debian.org</email>.\n"
+"\">\n"
+msgstr ""
+"<!ENTITY translation-holder \"\n"
+" Esta página de manual foi traduzida para o Português do Brasil por\n"
+" André Luís Lopes <email>andrelop@ig.com.br</email>.\n"
+"\">\n"
+
+#. type: Plain text
+#: apt.ent
+#, no-wrap
+msgid ""
+"<!-- TRANSLATOR: As a translation is allowed to have 20% of untranslated/fuzzy strings\n"
+" in a shipped manpage newer/modified paragraphs will maybe appear in english in\n"
+" the generated manpage. This sentence is therefore here to tell the reader that this\n"
+" is not a mistake by the translator - obviously the target is that at least for stable\n"
+" releases this sentence is not needed. :) -->\n"
+"<!ENTITY translation-english \"\n"
+" Note that this translated document may contain untranslated parts.\n"
+" This is done on purpose, to avoid losing content when the\n"
+" translation is lagging behind the original content.\n"
+"\">\n"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -o=config_string e.g. -o=Debug::"
+"pkgProblemResolver=1 --> <!ENTITY synopsis-config-string \"config_string\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -c=config_file e.g. -c=./apt.conf --> <!ENTITY "
+"synopsis-config-file \"config_file\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -t=target_release or pkg/target_release e.g. -"
+"t=squeeze apt/experimental --> <!ENTITY synopsis-target-release "
+"\"target_release\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in -a=architecture e.g. -a=armel --> <!ENTITY "
+"synopsis-architecture \"architecture\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-get install pkg e.g. apt-get install awesome "
+"--> <!ENTITY synopsis-pkg \"pkg\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in pkg=pkg_version_number e.g. apt=0.8.15 --> <!"
+"ENTITY synopsis-pkg-ver-number \"pkg_version_number\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache pkgnames prefix e.g. apt-cache "
+"pkgnames apt --> <!ENTITY synopsis-prefix \"prefix\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cache search regex e.g. apt-cache search "
+"awesome --> <!ENTITY synopsis-regex \"regex\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-cdrom -d=cdrom_mount_point e.g. apt-cdrom -"
+"d=/media/cdrom --> <!ENTITY synopsis-cdrom-mount \"cdrom_mount_point\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates -t=temporary_directory e.g. "
+"apt-extracttemplates -t=/tmp --> <!ENTITY synopsis-tmp-directory "
+"\"temporary_directory\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-extracttemplates filename --> <!ENTITY "
+"synopsis-filename \"filename\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-path \"path\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-override "
+"\"override-file\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"packages path override-file pathprefix --> <!ENTITY synopsis-pathprefix "
+"\"pathprefix\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as parameter for apt-ftparchive e.g. apt-ftparchive "
+"generate section --> <!ENTITY synopsis-section \"section\">"
+msgstr ""
+
+#. type: Plain text
+#: apt.ent
+msgid ""
+"<!-- TRANSLATOR: used as in apt-key export keyid e.g. apt-key export "
+"473041FA --> <!ENTITY synopsis-keyid \"keyid\">"
+msgstr ""
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml
+msgid "8"
+msgstr ""
+
+#. type: Content of: <refentry><refmeta><refmiscinfo>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "APT"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.8.xml
+msgid "command-line interface"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+#, fuzzy
+msgid "Description"
+msgstr "Descrição"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> provides a high-level commandline interface for the "
+"package management system. It is intended as an end user interface and "
+"enables some options better suited for interactive usage by default compared "
+"to more specialized APT tools like &apt-get; and &apt-cache;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"Much like <command>apt</command> itself, its manpage is intended as an end "
+"user interface and as such only mentions the most used commands and options "
+"partly to not duplicate information in multiple places and partly to avoid "
+"overwhelming readers with a cornucopia of options and details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-get;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>update</option> is used to download package information from all "
+"configured sources. Other commands operate on this data to e.g. perform "
+"package upgrades or search in and display details about all packages "
+"available for installation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>upgrade</option> is used to install available upgrades of all "
+"packages currently installed on the system from the sources configured via "
+"&sources-list;. New packages will be installed if required to satisfy "
+"dependencies, but existing packages will never be removed. If an upgrade for "
+"a package requires the removal of an installed package the upgrade for this "
+"package isn't performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>full-upgrade</literal> performs the function of upgrade but will "
+"remove currently installed packages if this is needed to upgrade the system "
+"as a whole."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: apt.8.xml apt-key.8.xml sources.list.5.xml
+msgid ","
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Performs the requested action on one or more packages specified via &regex;, "
+"&glob; or exact match. The requested action can be overridden for specific "
+"packages by append a plus (+) to the package name to install this package or "
+"a minus (-) to remove it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals (=) and the version of the package "
+"to select. Alternatively the version from a specific release can be selected "
+"by following the package name with a forward slash (/) and codename (&debian-"
+"stable-codename;, &debian-testing-codename;, sid …) or suite name (stable, "
+"testing, unstable). This will also select versions from this release for "
+"dependencies of this package if needed to satisfy the request."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Removing a package removes all packaged data, but leaves usually small "
+"(modified) user configuration files behind, in case the remove was an "
+"accident. Just issuing an installation request for the accidentally removed "
+"package will restore its function as before in that case. On the other hand "
+"you can get rid of these leftovers by calling <command>purge</command> even "
+"on already removed packages. Note that this does not affect any data or "
+"configuration stored in your home directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed as dependencies changed or the package(s) needing them "
+"were removed in the meantime."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"You should check that the list does not include applications you have grown "
+"to like even though they were once installed just as a dependency of another "
+"package. You can mark such a package as manually installed by using &apt-"
+"mark;. Packages which you have installed explicitly via <command>install</"
+"command> are also never proposed for automatic removal."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(&apt-cache;)"
+msgstr "(&apt-cache;)"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>search</option> can be used to search for the given &regex; term(s) "
+"in the list of available packages and display matches. This can e.g. be "
+"useful if you are looking for packages having a specific feature. If you "
+"are looking for a package including a specific file try &apt-file;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"Show information about the given package(s) including its dependencies, "
+"installation and download size, sources the package is available from, the "
+"description of the packages content and much more. It can e.g. be helpful to "
+"look at this information before allowing &apt; to remove a package or while "
+"searching for new packages to install."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.8.xml
+msgid "(work-in-progress)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<option>list</option> is somewhat similar to <command>dpkg-query --list</"
+"command> in that it can display a list of packages satisfying certain "
+"criteria. It supports &glob; patterns for matching package names as well as "
+"options to list installed (<option>--installed</option>), upgradeable "
+"(<option>--upgradeable</option>) or all available (<option>--all-versions</"
+"option>) versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.8.xml
+msgid ""
+"<literal>edit-sources</literal> lets you edit your &sources-list; files in "
+"your preferred texteditor while also providing basic sanity checks."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml
+msgid "Script Usage and Differences from Other APT Tools"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"The &apt; commandline is designed as an end-user tool and it may change "
+"behavior between versions. While it tries not to break backward "
+"compatibility this is not guaranteed either if a change seems beneficial for "
+"interactive use."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"All features of &apt; are available in dedicated APT tools like &apt-get; "
+"and &apt-cache; as well. &apt; just changes the default value of some "
+"options (see &apt-conf; and specifically the Binary scope). So you should "
+"prefer using these commands (potentially with some additional options "
+"enabled) in your scripts as they keep backward compatibility as much as "
+"possible."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml
+#: apt-secure.8.xml apt-cdrom.8.xml apt-config.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml sources.list.5.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml apt_auth.conf.5.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#, fuzzy
+msgid "See Also"
+msgstr "Consulte também"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"&apt-get;, &apt-cache;, &sources-list;, &apt-conf;, &apt-config;, The APT "
+"User's guide in &guidesdir;, &apt-preferences;, the APT Howto."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.8.xml apt-get.8.xml apt-cache.8.xml apt-mark.8.xml apt-cdrom.8.xml
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "Diagnostics"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.8.xml
+msgid ""
+"<command>apt</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-get.8.xml
+msgid "APT package handling utility -- command-line interface"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> is the command-line tool for handling packages, "
+"and may be considered the user's \"back-end\" to other tools using the APT "
+"library. Several \"front-end\" interfaces exist, such as &aptitude;, "
+"&synaptic; and &wajig;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml apt-cache.8.xml apt-cdrom.8.xml apt-config.8.xml
+#: apt-ftparchive.1.xml
+msgid ""
+"Unless the <option>-h</option>, or <option>--help</option> option is given, "
+"one of the commands below must be present."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>update</literal> is used to resynchronize the package index files "
+"from their sources. The indexes of available packages are fetched from the "
+"location(s) specified in <filename>/etc/apt/sources.list</filename>. For "
+"example, when using a Debian archive, this command retrieves and scans the "
+"<filename>Packages.gz</filename> files, so that information about new and "
+"updated packages is available. An <literal>update</literal> should always be "
+"performed before an <literal>upgrade</literal> or <literal>dist-upgrade</"
+"literal>. Please be aware that the overall progress meter will be incorrect "
+"as the size of the package files cannot be known in advance."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>upgrade</literal> is used to install the newest versions of all "
+"packages currently installed on the system from the sources enumerated in "
+"<filename>/etc/apt/sources.list</filename>. Packages currently installed "
+"with new versions available are retrieved and upgraded; under no "
+"circumstances are currently installed packages removed, or packages not "
+"already installed retrieved and installed. New versions of currently "
+"installed packages that cannot be upgraded without changing the install "
+"status of another package will be left at their current version. An "
+"<literal>update</literal> must be performed first so that <command>apt-get</"
+"command> knows that new versions of packages are available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dist-upgrade</literal> in addition to performing the function of "
+"<literal>upgrade</literal>, also intelligently handles changing dependencies "
+"with new versions of packages; <command>apt-get</command> has a \"smart\" "
+"conflict resolution system, and it will attempt to upgrade the most "
+"important packages at the expense of less important ones if necessary. The "
+"<literal>dist-upgrade</literal> command may therefore remove some packages. "
+"The <filename>/etc/apt/sources.list</filename> file contains a list of "
+"locations from which to retrieve desired package files. See also &apt-"
+"preferences; for a mechanism for overriding the general settings for "
+"individual packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>dselect-upgrade</literal> is used in conjunction with the "
+"traditional Debian packaging front-end, &dselect;. <literal>dselect-upgrade</"
+"literal> follows the changes made by &dselect; to the <literal>Status</"
+"literal> field of available packages, and performs the actions necessary to "
+"realize that state (for instance, the removal of old and the installation of "
+"new packages)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>install</literal> is followed by one or more packages desired for "
+"installation or upgrading. Each package is a package name, not a fully "
+"qualified filename (for instance, in a Debian system, <package>apt-utils</"
+"package> would be the argument provided, not <filename>apt-utils_&apt-"
+"product-version;_amd64.deb</filename>). All packages required by the "
+"package(s) specified for installation will also be retrieved and installed. "
+"The <filename>/etc/apt/sources.list</filename> file is used to locate the "
+"desired packages. If a hyphen is appended to the package name (with no "
+"intervening space), the identified package will be removed if it is "
+"installed. Similarly a plus sign can be used to designate a package to "
+"install. These latter features may be used to override decisions made by apt-"
+"get's conflict resolution system."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific version of a package can be selected for installation by "
+"following the package name with an equals and the version of the package to "
+"select. This will cause that version to be located and selected for install. "
+"Alternatively a specific distribution can be selected by following the "
+"package name with a slash and the version of the distribution or the Archive "
+"name (stable, testing, unstable)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Both of the version selection mechanisms can downgrade packages and must be "
+"used with care."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is also the target to use if you want to upgrade one or more already-"
+"installed packages without upgrading every package you have on your system. "
+"Unlike the \"upgrade\" target, which installs the newest version of all "
+"currently installed packages, \"install\" will install the newest version of "
+"only the package(s) specified. Simply provide the name of the package(s) "
+"you wish to upgrade, and if a newer version is available, it (and its "
+"dependencies, as described above) will be downloaded and installed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Finally, the &apt-preferences; mechanism allows you to create an alternative "
+"installation policy for individual packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If no package matches the given expression and the expression contains one "
+"of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and "
+"it is applied to all package names in the database. Any matches are then "
+"installed (or removed). Note that matching is done by substring so 'lo.*' "
+"matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular "
+"expression with a '^' or '$' character, or create a more specific regular "
+"expression."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+#, fuzzy
+msgid ""
+"<literal>reinstall</literal> is an alias for <literal>install --reinstall</"
+"literal>."
+msgstr "a linha <literal>Archive:</literal>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>remove</literal> is identical to <literal>install</literal> except "
+"that packages are removed instead of installed. Note that removing a package "
+"leaves its configuration files on the system. If a plus sign is appended to "
+"the package name (with no intervening space), the identified package will be "
+"installed instead of removed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>purge</literal> is identical to <literal>remove</literal> except "
+"that packages are removed and purged (any configuration files are deleted "
+"too)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>source</literal> causes <command>apt-get</command> to fetch source "
+"packages. APT will examine the available packages to decide which source "
+"package to fetch. It will then find and download into the current directory "
+"the newest available version of that source package while respecting the "
+"default release, set with the option <literal>APT::Default-Release</"
+"literal>, the <option>-t</option> option or per package with the "
+"<literal>pkg/release</literal> syntax, if possible."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary and source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Source packages are tracked separately from binary packages via <literal>deb-"
+"src</literal> lines in the &sources-list; file. This means that you will "
+"need to add such a line for each repository you want to get sources from; "
+"otherwise you will probably get either the wrong (too old/too new) source "
+"versions or none at all."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the <option>--compile</option> option is specified then the package will "
+"be compiled to a binary .deb using <command>dpkg-buildpackage</command> for "
+"the architecture as defined by the <command>--host-architecture</command> "
+"option. If <option>--download-only</option> is specified then the source "
+"package will not be unpacked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"A specific source version can be retrieved by postfixing the source name "
+"with an equals and then the version to fetch, similar to the mechanism used "
+"for the package files. This enables exact matching of the source package "
+"name and version, implicitly enabling the <literal>APT::Get::Only-Source</"
+"literal> option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Note that source packages are not installed and tracked in the "
+"<command>dpkg</command> database like binary packages; they are simply "
+"downloaded to the current directory, like source tarballs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>build-dep</literal> causes apt-get to install/remove packages in an "
+"attempt to satisfy the build dependencies for a source package. By default "
+"the dependencies are satisfied to build the package natively. If desired a "
+"host-architecture can be specified with the <option>--host-architecture</"
+"option> option instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"The arguments are interpreted as binary or source package names. See the "
+"<option>--only-source</option> option if you want to change that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>check</literal> is a diagnostic tool; it updates the package cache "
+"and checks for broken dependencies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>download</literal> will download the given binary package into the "
+"current directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>clean</literal> clears out the local repository of retrieved "
+"package files. It removes everything but the lock file from "
+"<filename>&cachedir;/archives/</filename> and <filename>&cachedir;/archives/"
+"partial/</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "(and the"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-get.8.xml
+msgid "alias since 1.1)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Like <literal>clean</literal>, <literal>autoclean</literal> clears out the "
+"local repository of retrieved package files. The difference is that it only "
+"removes package files that can no longer be downloaded, and are largely "
+"useless. This allows a cache to be maintained over a long period without it "
+"growing out of control. The configuration option <literal>APT::Clean-"
+"Installed</literal> will prevent installed packages from being erased if it "
+"is set to off."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>autoremove</literal> is used to remove packages that were "
+"automatically installed to satisfy dependencies for other packages and are "
+"now no longer needed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"<literal>changelog</literal> tries to download the changelog of a package "
+"and displays it through <command>sensible-pager</command>. By default it "
+"displays the changelog for the version that is installed. However, you can "
+"specify the same options as for the <option>install</option> command."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Displays by default a deb822 formatted listing of information about all data "
+"files (aka index targets) <command>apt-get update</command> would download. "
+"Supports a <option>--format</option> option to modify the output format as "
+"well as accepts lines of the default output to filter the records by. The "
+"command is mainly used as an interface for external tools working with APT "
+"to get information as well as filenames for downloaded files so they can use "
+"them as well instead of downloading them again on their own. Detailed "
+"documentation is omitted here and can instead be found in the file &apt-"
+"acquire-additional-files; shipped by the <package>apt-doc</package> package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-config.8.xml apt-extracttemplates.1.xml
+#: apt-sortpkgs.1.xml apt-ftparchive.1.xml
+msgid "options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not consider recommended packages as a dependency for installing. "
+"Configuration Item: <literal>APT::Install-Recommends</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Consider suggested packages as a dependency for installing. Configuration "
+"Item: <literal>APT::Install-Suggests</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only; package files are only retrieved, not unpacked or installed. "
+"Configuration Item: <literal>APT::Get::Download-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Fix; attempt to correct a system with broken dependencies in place. This "
+"option, when used with install/remove, can omit any packages to permit APT "
+"to deduce a likely solution. If packages are specified, these have to "
+"completely correct the problem. The option is sometimes necessary when "
+"running APT for the first time; APT itself does not allow broken package "
+"dependencies to exist on a system. It is possible that a system's dependency "
+"structure can be so corrupt as to require manual intervention (which usually "
+"means using <command>dpkg --remove</command> to eliminate some of the "
+"offending packages). Use of this option together with <option>-m</option> "
+"may produce an error in some situations. Configuration Item: <literal>APT::"
+"Get::Fix-Broken</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore missing packages; if packages cannot be retrieved or fail the "
+"integrity check after retrieval (corrupted package files), hold back those "
+"packages and handle the result. Use of this option together with <option>-f</"
+"option> may produce an error in some situations. If a package is selected "
+"for installation (particularly if it is mentioned on the command line) and "
+"it could not be downloaded then it will be silently held back. "
+"Configuration Item: <literal>APT::Get::Fix-Missing</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Disables downloading of packages. This is best used with <option>--ignore-"
+"missing</option> to force APT to use only the .debs it has already "
+"downloaded. Configuration Item: <literal>APT::Get::Download</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Note that quiet level 2 implies <option>-y</option>; you should never "
+"use -qq without a no-action modifier such as -d, --print-uris or -s as APT "
+"may decide to do something you did not expect. Configuration Item: "
+"<literal>quiet</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"No action; perform a simulation of events that would occur based on the "
+"current system state but do not actually change the system. Locking will be "
+"disabled (<option>Debug::NoLocking</option>) so the system state could "
+"change while <command>apt-get</command> is running. Simulations can also be "
+"executed by non-root users which might not have read access to all apt "
+"configuration distorting the simulation. A notice expressing this warning "
+"is also shown by default for non-root users (<option>APT::Get::Show-User-"
+"Simulation-Note</option>). Configuration Item: <literal>APT::Get::Simulate</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Simulated runs print out a series of lines, each representing a "
+"<command>dpkg</command> operation: configure (<literal>Conf</literal>), "
+"remove (<literal>Remv</literal>) or unpack (<literal>Inst</literal>). "
+"Square brackets indicate broken packages, and empty square brackets indicate "
+"breaks that are of no consequence (rare)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic yes to prompts; assume \"yes\" as answer to all prompts and run "
+"non-interactively. If an undesirable situation, such as changing a held "
+"package, trying to install an unauthenticated package or removing an "
+"essential package occurs then <literal>apt-get</literal> will abort. "
+"Configuration Item: <literal>APT::Get::Assume-Yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Automatic \"no\" to all prompts. Configuration Item: <literal>APT::Get::"
+"Assume-No</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not show a list of all packages that are to be upgraded. Configuration "
+"Item: <literal>APT::Get::Show-Upgraded</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show full versions for upgraded and installed packages. Configuration Item: "
+"<literal>APT::Get::Show-Versions</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the architecture packages are built for by <command>apt-"
+"get source --compile</command> and how cross-builddependencies are "
+"satisfied. By default is it not set which means that the host architecture "
+"is the same as the build architecture (which is defined by <literal>APT::"
+"Architecture</literal>). Configuration Item: <literal>APT::Get::Host-"
+"Architecture</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the activated build profiles for which a source package "
+"is built by <command>apt-get source --compile</command> and how build "
+"dependencies are satisfied. By default no build profile is active. More "
+"than one build profile can be activated at a time by concatenating them with "
+"a comma. Configuration Item: <literal>APT::Build-Profiles</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Compile source packages after downloading them. Configuration Item: "
+"<literal>APT::Get::Compile</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore package holds; this causes <command>apt-get</command> to ignore a "
+"hold placed on a package. This may be useful in conjunction with "
+"<literal>dist-upgrade</literal> to override a large number of undesired "
+"holds. Configuration Item: <literal>APT::Ignore-Hold</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow installing new packages when used in conjunction with "
+"<literal>upgrade</literal>. This is useful if the update of an installed "
+"package requires new dependencies to be installed. Instead of holding the "
+"package back <literal>upgrade</literal> will upgrade the package and install "
+"the new dependencies. Note that <literal>upgrade</literal> with this option "
+"will never remove packages, only allow adding new ones. Configuration Item: "
+"<literal>APT::Get::Upgrade-Allow-New</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not upgrade packages; when used in conjunction with <literal>install</"
+"literal>, <literal>no-upgrade</literal> will prevent packages on the command "
+"line from being upgraded if they are already installed. Configuration Item: "
+"<literal>APT::Get::Upgrade</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Do not install new packages; when used in conjunction with <literal>install</"
+"literal>, <literal>only-upgrade</literal> will install upgrades for already "
+"installed packages only and ignore requests to install new packages. "
+"Configuration Item: <literal>APT::Get::Only-Upgrade</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This is a dangerous option that will cause apt to continue without prompting "
+"if it is doing downgrades. It should not be used except in very special "
+"situations. Using it can potentially destroy your system! Configuration "
+"Item: <literal>APT::Get::allow-downgrades</literal>. Introduced in APT 1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is removing essentials. It should not be used except "
+"in very special situations. Using it can potentially destroy your system! "
+"Configuration Item: <literal>APT::Get::allow-remove-essential</literal>. "
+"Introduced in APT 1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is changing held packages. It should not be used "
+"except in very special situations. Using it can potentially destroy your "
+"system! Configuration Item: <literal>APT::Get::allow-change-held-packages</"
+"literal>. Introduced in APT 1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Force yes; this is a dangerous option that will cause apt to continue "
+"without prompting if it is doing something potentially harmful. It should "
+"not be used except in very special situations. Using <literal>force-yes</"
+"literal> can potentially destroy your system! Configuration Item: "
+"<literal>APT::Get::force-yes</literal>. This is deprecated and replaced by "
+"<option>--allow-unauthenticated</option> , <option>--allow-downgrades</"
+"option> , <option>--allow-remove-essential</option> , <option>--allow-change-"
+"held-packages</option> in 1.1."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Instead of fetching the files to install their URIs are printed. Each URI "
+"will have the path, the destination file name, the size and the expected MD5 "
+"hash. Note that the file name to write to will not always match the file "
+"name on the remote site! This also works with the <literal>source</literal> "
+"and <literal>update</literal> commands. When used with the <literal>update</"
+"literal> command the MD5 and size are not included, and it is up to the user "
+"to decompress any compressed files. Configuration Item: <literal>APT::Get::"
+"Print-URIs</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Use purge instead of remove for anything that would be removed. An asterisk "
+"(\"*\") will be displayed next to packages which are scheduled to be purged. "
+"<option>remove --purge</option> is equivalent to the <option>purge</option> "
+"command. Configuration Item: <literal>APT::Get::Purge</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Re-install packages that are already installed and at the newest version. "
+"Configuration Item: <literal>APT::Get::ReInstall</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option is on by default; use <literal>--no-list-cleanup</literal> to "
+"turn it off. When it is on, <command>apt-get</command> will automatically "
+"manage the contents of <filename>&statedir;/lists</filename> to ensure that "
+"obsolete files are erased. The only reason to turn it off is if you "
+"frequently change your sources list. Configuration Item: <literal>APT::Get::"
+"List-Cleanup</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"This option controls the default input to the policy engine; it creates a "
+"default pin at priority 990 using the specified release string. This "
+"overrides the general settings in <filename>/etc/apt/preferences</"
+"filename>. Specifically pinned packages are not affected by the value of "
+"this option. In short, this option lets you have simple control over which "
+"distribution packages will be retrieved from. Some common examples might be "
+"<option>-t '2.1*'</option>, <option>-t unstable</option> or <option>-t sid</"
+"option>. Configuration Item: <literal>APT::Default-Release</literal>; see "
+"also the &apt-preferences; manual page."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only perform operations that are 'trivial'. Logically this can be considered "
+"related to <option>--assume-yes</option>; where <option>--assume-yes</"
+"option> will answer yes to any prompt, <option>--trivial-only</option> will "
+"answer no. Configuration Item: <literal>APT::Get::Trivial-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If any packages are to be removed apt-get immediately aborts without "
+"prompting. Configuration Item: <literal>APT::Get::Remove</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"If the command is either <literal>install</literal> or <literal>remove</"
+"literal>, then this option acts like running the <literal>autoremove</"
+"literal> command, removing unused dependency packages. Configuration Item: "
+"<literal>APT::Get::AutomaticRemove</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only has meaning for the <literal>source</literal> and <literal>build-dep</"
+"literal> commands. Indicates that the given source names are not to be "
+"mapped through the binary table. This means that if this option is "
+"specified, these commands will only accept source package names as "
+"arguments, rather than accepting binary package names and looking up the "
+"corresponding source package. Configuration Item: <literal>APT::Get::Only-"
+"Source</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Download only the diff, dsc, or tar file of a source archive. Configuration "
+"Item: <literal>APT::Get::Diff-Only</literal>, <literal>APT::Get::Dsc-Only</"
+"literal>, and <literal>APT::Get::Tar-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-dependent build-dependencies. Configuration Item: "
+"<literal>APT::Get::Arch-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Only process architecture-independent build-dependencies. Configuration "
+"Item: <literal>APT::Get::Indep-Only</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Ignore if packages can't be authenticated and don't prompt about it. This "
+"can be useful while working with local repositories, but is a huge security "
+"risk if data authenticity isn't ensured in another way by the user itself. "
+"The usage of the <option>Trusted</option> option for &sources-list; entries "
+"should usually be preferred over this global override. Configuration Item: "
+"<literal>APT::Get::AllowUnauthenticated</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Forbid the update command to acquire unverifiable data from configured "
+"sources. APT will fail at the update command for repositories without valid "
+"cryptographically signatures. See also &apt-secure; for details on the "
+"concept and the implications. Configuration Item: <literal>Acquire::"
+"AllowInsecureRepositories</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Allow the update command to continue downloading data from a repository "
+"which changed its information of the release contained in the repository "
+"indicating e.g a new major release. APT will fail at the update command for "
+"such repositories until the change is confirmed to ensure the user is "
+"prepared for the change. See also &apt-secure; for details on the concept "
+"and configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Specialist options (<literal>--allow-releaseinfo-change-</"
+"literal><replaceable>field</replaceable>) exist to allow changes only for "
+"certain fields like <literal>origin</literal>, <literal>label</literal>, "
+"<literal>codename</literal>, <literal>suite</literal>, <literal>version</"
+"literal> and <literal>defaultpin</literal>. See also &apt-preferences;. "
+"Configuration Item: <literal>Acquire::AllowReleaseInfoChange</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Show user friendly progress information in the terminal window when packages "
+"are installed, upgraded or removed. For a machine parsable version of this "
+"data see README.progress-reporting in the apt doc directory. Configuration "
+"Items: <literal>Dpkg::Progress</literal> and <literal>Dpkg::Progress-Fancy</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-get.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. See <option>--with-source</option> description in &apt-"
+"cache; for further details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-get.8.xml apt-cache.8.xml apt-key.8.xml apt-mark.8.xml apt.conf.5.xml
+#: apt_preferences.5.xml apt_auth.conf.5.xml
+msgid "Files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"&apt-cache;, &apt-cdrom;, &dpkg;, &sources-list;, &apt-conf;, &apt-config;, "
+"&apt-secure;, The APT User's guide in &guidesdir;, &apt-preferences;, the "
+"APT Howto."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-get.8.xml
+msgid ""
+"<command>apt-get</command> returns zero on normal operation, decimal 100 on "
+"error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cache.8.xml
+msgid "query the APT cache"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> performs a variety of operations on APT's "
+"package cache. <command>apt-cache</command> does not manipulate the state of "
+"the system but does provide operations to search and generate interesting "
+"output from the package metadata. The metadata is acquired and updated via "
+"the 'update' command of e.g. <command>apt-get</command>, so that it can be "
+"outdated if the last update is too long ago, but in exchange <command>apt-"
+"cache</command> works independently of the availability of the configured "
+"sources (e.g. offline)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>gencaches</literal> creates APT's package cache. This is done "
+"implicitly by all commands needing this cache if it is missing or outdated."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-pkg;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showpkg</literal> displays information about the packages listed on "
+"the command line. Remaining arguments are package names. The available "
+"versions and reverse dependencies of each package listed are listed, as well "
+"as forward dependencies for each version. Forward (normal) dependencies are "
+"those packages upon which the package in question depends; reverse "
+"dependencies are those packages that depend upon the package in question. "
+"Thus, forward dependencies must be satisfied for a package, but reverse "
+"dependencies need not be. For instance, <command>apt-cache showpkg "
+"libreadline2</command> would produce output similar to the following:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-cache.8.xml
+#, no-wrap
+msgid ""
+"Package: libreadline2\n"
+"Versions: 2.1-12(/var/state/apt/lists/foo_Packages),\n"
+"Reverse Depends: \n"
+" libreadlineg2,libreadline2\n"
+" libreadline2-altdev,libreadline2\n"
+"Dependencies:\n"
+"2.1-12 - libc5 (2 5.4.0-0) ncurses3.0 (0 (null))\n"
+"Provides:\n"
+"2.1-12 - \n"
+"Reverse Provides: \n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Thus it may be seen that libreadline2, version 2.1-12, depends on libc5 and "
+"ncurses3.0 which must be installed for libreadline2 to work. In turn, "
+"libreadlineg2 and libreadline2-altdev depend on libreadline2. If "
+"libreadline2 is installed, libc5 and ncurses3.0 (and ldso) must also be "
+"installed; libreadlineg2 and libreadline2-altdev do not have to be "
+"installed. For the specific meaning of the remainder of the output it is "
+"best to consult the apt source code."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>stats</literal> displays some statistics about the cache. No "
+"further arguments are expected. Statistics reported are:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total package names</literal> is the number of package names found "
+"in the cache."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Normal packages</literal> is the number of regular, ordinary "
+"package names; these are packages that bear a one-to-one correspondence "
+"between their names and the names used by other packages for them in "
+"dependencies. The majority of packages fall into this category."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Pure virtual packages</literal> is the number of packages that "
+"exist only as a virtual package name; that is, packages only \"provide\" the "
+"virtual package name, and no package actually uses the name. For instance, "
+"\"mail-transport-agent\" in the Debian system is a pure virtual package; "
+"several packages provide \"mail-transport-agent\", but there is no package "
+"named \"mail-transport-agent\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Single virtual packages</literal> is the number of packages with "
+"only one package providing a particular virtual package. For example, in the "
+"Debian system, \"X11-text-viewer\" is a virtual package, but only one "
+"package, xless, provides \"X11-text-viewer\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Mixed virtual packages</literal> is the number of packages that "
+"either provide a particular virtual package or have the virtual package name "
+"as the package name. For instance, in the Debian system, \"debconf\" is both "
+"an actual package, and provided by the debconf-tiny package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Missing</literal> is the number of package names that were "
+"referenced in a dependency but were not provided by any package. Missing "
+"packages may be an evidence if a full distribution is not accessed, or if a "
+"package (real or virtual) has been dropped from the distribution. Usually "
+"they are referenced from Conflicts or Breaks statements."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total distinct</literal> versions is the number of package versions "
+"found in the cache. If more than one distribution is being accessed (for "
+"instance, \"stable\" and \"unstable\"), this value can be considerably "
+"larger than the number of total package names."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Total dependencies</literal> is the number of dependency "
+"relationships claimed by all of the packages in the cache."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>showsrc</literal> displays all the source package records that "
+"match the given package names. All versions are shown, as well as all "
+"records that declare the name to be a binary package. Use <option>--only-"
+"source</option> to display only source package names."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dump</literal> shows a short listing of every package in the cache. "
+"It is primarily for debugging."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dumpavail</literal> prints out an available list to stdout. This is "
+"suitable for use with &dpkg; and is used by the &dselect; method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>unmet</literal> displays a summary of all unmet dependencies in the "
+"package cache."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>show</literal> performs a function similar to <command>dpkg --print-"
+"avail</command>; it displays the package records for the named packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-cache.8.xml
+msgid "&synopsis-regex;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>search</literal> performs a full text search on all available "
+"package lists for the POSIX regex pattern given, see &regex;. It searches "
+"the package names and the descriptions for an occurrence of the regular "
+"expression and prints out the package name and the short description, "
+"including virtual package names. If <option>--full</option> is given then "
+"output identical to <literal>show</literal> is produced for each matched "
+"package, and if <option>--names-only</option> is given then the long "
+"description is not searched, only the package name and provided packages are."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Separate arguments can be used to specify multiple search patterns that are "
+"and'ed together."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>depends</literal> shows a listing of each dependency a package has "
+"and all the possible other packages that can fulfill that dependency."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>rdepends</literal> shows a listing of each reverse dependency a "
+"package has."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+msgstr "<optional><replaceable>&synopsis-prefix;</replaceable></optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"This command prints the name of each package APT knows. The optional "
+"argument is a prefix match to filter the name list. The output is suitable "
+"for use in a shell tab complete function and the output is generated "
+"extremely quickly. This command is best used with the <option>--generate</"
+"option> option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that a package which APT knows of is not necessarily available to "
+"download, installable or installed, e.g. virtual packages are also listed in "
+"the generated list."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>dotty</literal> takes a list of packages on the command line and "
+"generates output suitable for use by dotty from the <ulink url=\"http://www."
+"research.att.com/sw/tools/graphviz/\">GraphViz</ulink> package. The result "
+"will be a set of nodes and edges representing the relationships between the "
+"packages. By default the given packages will trace out all dependent "
+"packages; this can produce a very large graph. To limit the output to only "
+"the packages listed on the command line, set the <literal>APT::Cache::"
+"GivenOnly</literal> option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The resulting nodes will have several shapes; normal packages are boxes, "
+"pure virtual packages are triangles, mixed virtual packages are diamonds, "
+"missing packages are hexagons. Orange boxes mean recursion was stopped (leaf "
+"packages), blue lines are pre-depends, green lines are conflicts."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid "Caution, dotty cannot graph larger sets of packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"The same as <literal>dotty</literal>, only for xvcg from the <ulink url="
+"\"http://rw4.cs.uni-sb.de/users/sander/html/gsvcg1.html\">VCG tool</ulink>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-cache.8.xml
+msgid "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+msgstr "<optional><replaceable>&synopsis-pkg;</replaceable>…</optional>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>policy</literal> is meant to help debug issues relating to the "
+"preferences file. With no arguments it will print out the priorities of each "
+"source. Otherwise it prints out detailed information about the priority "
+"selection of the named package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>apt-cache</literal>'s <literal>madison</literal> command attempts "
+"to mimic the output format and a subset of the functionality of the Debian "
+"archive management tool, <literal>madison</literal>. It displays available "
+"versions of a package in a tabular format. Unlike the original "
+"<literal>madison</literal>, it can only display information for the "
+"architecture for which APT has retrieved package lists (<literal>APT::"
+"Architecture</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the package cache. The package cache is the primary "
+"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
+"pkgcache</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Select the file to store the source cache. The source is used only by "
+"<literal>gencaches</literal> and it stores a parsed version of the package "
+"information from remote sources. When building the package cache the source "
+"cache is used to avoid reparsing all of the package files. Configuration "
+"Item: <literal>Dir::Cache::srcpkgcache</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quietness up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quietness level, overriding the "
+"configuration file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print only important dependencies; for use with <literal>unmet</literal> and "
+"<literal>depends</literal>. Causes only Depends and Pre-Depends relations to "
+"be printed. Configuration Item: <literal>APT::Cache::Important</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default the <command>depends</command> and <command>rdepends</command> "
+"print all dependencies. This can be tweaked with these flags which will omit "
+"the specified dependency type. Configuration Item: <literal>APT::Cache::"
+"Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
+"Cache::ShowRecommends</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Per default <command>depends</command> and <command>rdepends</command> print "
+"only dependencies explicitly expressed in the metadata. With this flag it "
+"will also show dependencies implicitly added based on the encountered data. "
+"A <literal>Conflicts: foo</literal> e.g. expresses implicitly that this "
+"package also conflicts with the package foo from any other architecture. "
+"Configuration Item: <literal>APT::Cache::ShowImplicit</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full package records when searching. Configuration Item: "
+"<literal>APT::Cache::ShowFull</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Print full records for all available versions. This is the default; to turn "
+"it off, use <option>--no-all-versions</option>. If <option>--no-all-"
+"versions</option> is specified, only the candidate version will be displayed "
+"(the one which would be selected for installation). This option is only "
+"applicable to the <literal>show</literal> command. Configuration Item: "
+"<literal>APT::Cache::AllVersions</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Perform automatic package cache regeneration, rather than use the cache as "
+"it is. This is the default; to turn it off, use <option>--no-generate</"
+"option>. Configuration Item: <literal>APT::Cache::Generate</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Only search on the package and provided package names, not the long "
+"descriptions. Configuration Item: <literal>APT::Cache::NamesOnly</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>pkgnames</literal> print all names, including virtual packages "
+"and missing dependencies. Configuration Item: <literal>APT::Cache::"
+"AllNames</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Make <literal>depends</literal> and <literal>rdepends</literal> recursive so "
+"that all packages mentioned are printed once. Configuration Item: "
+"<literal>APT::Cache::RecurseDepends</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Limit the output of <literal>depends</literal> and <literal>rdepends</"
+"literal> to packages which are currently installed. Configuration Item: "
+"<literal>APT::Cache::Installed</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Adds the given file as a source for metadata. Can be repeated to add "
+"multiple files. Supported are currently <literal>*.deb</literal>, "
+"<literal>*.dsc</literal>, <literal>*.changes</literal>, <literal>Sources</"
+"literal> and <literal>Packages</literal> files as well as source package "
+"directories. Files are matched based on their name only, not their content!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"<literal>Sources</literal> and <literal>Packages</literal> can be compressed "
+"in any format apt supports as long as they have the correct extension. If "
+"you need to store multiple of these files in one directory you can prefix a "
+"name of your choice with the last character being an underscore "
+"(\"<literal>_</literal>\"). Example: my.example_Packages.xz"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cache.8.xml
+msgid ""
+"Note that these sources are treated as trusted (see &apt-secure;). "
+"Configuration Item: <literal>APT::Sources::With</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid "&apt-conf;, &sources-list;, &apt-get;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cache.8.xml
+msgid ""
+"<command>apt-cache</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-key.8.xml
+msgid "APT key management utility"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"<command>apt-key</command> is used to manage the list of keys used by apt to "
+"authenticate packages. Packages which have been authenticated using these "
+"keys will be considered trusted."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that if usage of <command>apt-key</command> is desired the additional "
+"installation of the GNU Privacy Guard suite (packaged in <package>gnupg</"
+"package>) is required. For this reason alone the programmatic usage "
+"(especially in package maintainerscripts!) is strongly discouraged. Further "
+"more the output format of all commands is undefined and can and does change "
+"whenever the underlying commands change. <command>apt-key</command> will try "
+"to detect such usage and generates warnings on stderr in these cases."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Supported keyring files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"apt-key supports only the binary OpenPGP format (also known as \"GPG key "
+"public ring\") in files with the \"<literal>gpg</literal>\" extension, not "
+"the keybox database format introduced in newer &gpg; versions as default for "
+"keyring files. Binary keyring files intended to be used with any apt version "
+"should therefore always be created with <command>gpg --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Alternatively, if all systems which should be using the created keyring have "
+"at least apt version >= 1.4 installed, you can use the ASCII armored format "
+"with the \"<literal>asc</literal>\" extension instead which can be created "
+"with <command>gpg --armor --export</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml
+msgid "Commands"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Add a new key to the list of trusted keys. The key is read from the "
+"filename given with the parameter &synopsis-param-filename; or if the "
+"filename is <literal>-</literal> from standard input."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"It is critical that keys added manually via <command>apt-key</command> are "
+"verified to belong to the owner of the repositories they claim to be for "
+"otherwise the &apt-secure; infrastructure is completely undermined."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"<emphasis>Note</emphasis>: Instead of using this command a keyring should be "
+"placed directly in the <filename>/etc/apt/trusted.gpg.d/</filename> "
+"directory with a descriptive name and either \"<literal>gpg</literal>\" or "
+"\"<literal>asc</literal>\" as file extension."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Remove a key from the list of trusted keys."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output the key &synopsis-param-keyid; to standard output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "Output all trusted keys to standard output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid "List trusted keys with fingerprints."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Pass advanced options to gpg. With <command>adv --recv-key</command> you can "
+"e.g. download key from keyservers directly into the trusted set of keys. "
+"Note that there are <emphasis>no</emphasis> checks performed, so it is easy "
+"to completely undermine the &apt-secure; infrastructure if used without care."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt-key.8.xml
+msgid "(deprecated)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Update the local keyring with the archive keyring and remove from the local "
+"keyring the archive keys which are no longer valid. The archive keyring is "
+"shipped in the <literal>archive-keyring</literal> package of your "
+"distribution, e.g. the &keyring-package; package in &keyring-distro;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Note that a distribution does not need to and in fact should not use this "
+"command any longer and instead ship keyring files in the <filename>/etc/apt/"
+"trusted.gpg.d/</filename> directory directly as this avoids a dependency on "
+"<package>gnupg</package> and it is easier to manage keys by simply adding "
+"and removing files for maintainers and users alike."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"Perform an update working similarly to the <command>update</command> command "
+"above, but get the archive keyring from a URI instead and validate it "
+"against a master key. This requires an installed &wget; and an APT build "
+"configured to have a server to fetch from and a master keyring to validate. "
+"APT in Debian does not support this command, relying on <command>update</"
+"command> instead, but Ubuntu's APT does."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-key.8.xml apt-mark.8.xml apt-cdrom.8.xml apt-transport-http.1.xml
+#: apt-transport-https.1.xml apt-transport-mirror.1.xml
+msgid "Options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid ""
+"Note that options need to be defined before the commands described in the "
+"previous section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-key.8.xml
+msgid ""
+"With this option it is possible to specify a particular keyring file the "
+"command should operate on. The default is that a command is executed on the "
+"<filename>trusted.gpg</filename> file as well as on all parts in the "
+"<filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</"
+"filename> is the primary keyring which means that e.g. new keys are added to "
+"this one."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-key.8.xml
+msgid "&apt-get;, &apt-secure;"
+msgstr "&apt-get;, &apt-secure;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-mark.8.xml
+msgid "show, set and unset various settings for a package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> can be used as a unified front-end to set "
+"various settings for a package, such as marking a package as being "
+"automatically/manually installed or changing <command>dpkg</command> "
+"selections such as hold, install, deinstall and purge which are respected e."
+"g. by <command>apt-get dselect-upgrade</command> or <command>aptitude</"
+"command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Automatically and Manually Installed Packages"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"When you request that a package is installed, and as a result other packages "
+"are installed to satisfy its dependencies, the dependencies are marked as "
+"being automatically installed, while the package you installed explicitly is "
+"marked as manually installed. Once an automatically installed package is no "
+"longer depended on by any manually installed package it is considered no "
+"longer needed and e.g. <command>apt-get</command> or <command>aptitude</"
+"command> will at least suggest removing them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>auto</literal> is used to mark a package as being automatically "
+"installed, which will cause the package to be removed when no more manually "
+"installed packages depend on this package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>manual</literal> is used to mark a package as being manually "
+"installed, which will prevent the package from being automatically removed "
+"if no other packages depend on it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>minimize-manual</literal> is used to mark (transitive) dependencies "
+"of metapackages as automatically installed. This can be used after an "
+"installation for example, to minimize the number of manually installed "
+"packages; or continuously on systems managed by system configuration "
+"metapackages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showauto</literal> is used to print a list of automatically "
+"installed packages with each package on a new line. All automatically "
+"installed packages will be listed if no package is given. If packages are "
+"given only those which are automatically installed will be shown."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showmanual</literal> can be used in the same way as "
+"<literal>showauto</literal> except that it will print a list of manually "
+"installed packages instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"Read/Write package stats from the filename given with the parameter "
+"&synopsis-param-filename; instead of from the default location, which is "
+"<filename>extended_status</filename> in the directory defined by the "
+"Configuration Item: <literal>Dir::State</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Prevent Changes for a Package"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>hold</literal> is used to mark a package as held back, which will "
+"prevent the package from being automatically installed, upgraded or removed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>unhold</literal> is used to cancel a previously set hold on a "
+"package to allow all actions again."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-mark.8.xml
+msgid ""
+"<literal>showhold</literal> is used to print a list of packages on hold in "
+"the same way as for the other show commands."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-mark.8.xml
+msgid "Schedule Packages for Install, Remove and Purge"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"Some front-ends like <command>apt-get dselect-upgrade</command> can be used "
+"to apply previously scheduled changes to the install state of packages. Such "
+"changes can be scheduled with the <option>install</option>, <option>remove</"
+"option> (also known as <option>deinstall</option>) and <option>purge</"
+"option> commands. Packages with a specific selection can be displayed with "
+"<option>showinstall</option>, <option>showremove</option> and "
+"<option>showpurge</option> respectively. More information about these so "
+"called dpkg selections can be found in &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-mark.8.xml
+msgid ""
+"<command>apt-mark</command> returns zero on normal operation, non-zero on "
+"error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-secure.8.xml
+msgid "Archive authentication support for APT"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Starting with version 0.6, <command>APT</command> contains code that does "
+"signature checking of the Release file for all repositories. This ensures "
+"that data like packages in the archive can't be modified by people who have "
+"no access to the Release file signing key. Starting with version 1.1 "
+"<command>APT</command> requires repositories to provide recent "
+"authentication information for unimpeded usage of the repository. Since "
+"version 1.5 changes in the information contained in the Release file about "
+"the repository need to be confirmed before APT continues to apply updates "
+"from this repository."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note: All APT-based package management front-ends like &apt-get;, &aptitude; "
+"and &synaptic; support this authentication feature, so this manpage uses "
+"<literal>APT</literal> to refer to them all for simplicity only."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Unsigned Repositories"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If an archive has an unsigned Release file or no Release file at all current "
+"APT versions will refuse to download data from them by default in "
+"<command>update</command> operations and even if forced to download front-"
+"ends like &apt-get; will require explicit confirmation if an installation "
+"request includes a package from such an unauthenticated archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"You can force all APT clients to raise only warnings by setting the "
+"configuration option <option>Acquire::AllowInsecureRepositories</option> to "
+"<literal>true</literal>. Individual repositories can also be allowed to be "
+"insecure via the &sources-list; option <literal>allow-insecure=yes</"
+"literal>. Note that insecure repositories are strongly discouraged and all "
+"options to force apt to continue supporting them will eventually be "
+"removed. Users also have the <option>Trusted</option> option available to "
+"disable even the warnings, but be sure to understand the implications as "
+"detailed in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A repository which previously was authenticated but would loose this state "
+"in an <command>update</command> operation raises an error in all APT clients "
+"irrespective of the option to allow or forbid usage of insecure "
+"repositories. The error can be overcome by additionally setting "
+"<option>Acquire::AllowDowngradeToInsecureRepositories</option> to "
+"<literal>true</literal> or for Individual repositories with the &sources-"
+"list; option <literal>allow-downgrade-to-insecure=yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Signed Repositories"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust from an APT archive to the end user is made up of several "
+"steps. <command>apt-secure</command> is the last step in this chain; "
+"trusting an archive does not mean that you trust its packages not to contain "
+"malicious code, but means that you trust the archive maintainer. It's the "
+"archive maintainer's responsibility to ensure that the archive's integrity "
+"is preserved."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"apt-secure does not review signatures at a package level. If you require "
+"tools to do this you should look at <command>debsig-verify</command> and "
+"<command>debsign</command> (provided in the debsig-verify and devscripts "
+"packages respectively)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"The chain of trust in Debian starts (e.g.) when a maintainer uploads a new "
+"package or a new version of a package to the Debian archive. In order to "
+"become effective, this upload needs to be signed by a key contained in one "
+"of the Debian package maintainer keyrings (available in the debian-keyring "
+"package). Maintainers' keys are signed by other maintainers following pre-"
+"established procedures to ensure the identity of the key holder. Similar "
+"procedures exist in all Debian-based distributions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Once the uploaded package is verified and included in the archive, the "
+"maintainer signature is stripped off, and checksums of the package are "
+"computed and put in the Packages file. The checksums of all of the Packages "
+"files are then computed and put into the Release file. The Release file is "
+"then signed by the archive key for this &keyring-distro; release, and "
+"distributed alongside the packages and the Packages files on &keyring-"
+"distro; mirrors. The keys are in the &keyring-distro; archive keyring "
+"available in the &keyring-package; package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"End users can check the signature of the Release file, extract a checksum of "
+"a package from it and compare it with the checksum of the package they "
+"downloaded by hand - or rely on APT doing this automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Notice that this is distinct from checking signatures on a per package "
+"basis. It is designed to prevent two possible attacks:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Network \"man in the middle\" attacks</literal>. Without signature "
+"checking, malicious agents can introduce themselves into the package "
+"download process and provide malicious software either by controlling a "
+"network element (router, switch, etc.) or by redirecting traffic to a rogue "
+"server (through ARP or DNS spoofing attacks)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<literal>Mirror network compromise</literal>. Without signature checking, a "
+"malicious agent can compromise a mirror host and modify the files in it to "
+"propagate malicious software to all users downloading packages from that "
+"host."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"However, it does not defend against a compromise of the master server itself "
+"(which signs the packages) or against a compromise of the key used to sign "
+"the Release files. In any case, this mechanism can complement a per-package "
+"signature."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Information changes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"A Release file contains beside the checksums for the files in the repository "
+"also general information about the repository like the origin, codename or "
+"version number of the release."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This information is shown in various places so a repository owner should "
+"always ensure correctness. Further more user configuration like &apt-"
+"preferences; can depend and make use of this information. Since version 1.5 "
+"the user must therefore explicitly confirm changes to signal that the user "
+"is sufficiently prepared e.g. for the new major release of the distribution "
+"shipped in the repository (as e.g. indicated by the codename)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "User Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"<command>apt-key</command> is the program that manages the list of keys used "
+"by APT to trust repositories. It can be used to add or remove keys as well "
+"as list the trusted keys. Limiting which key(s) are able to sign which "
+"archive is possible via the <option>Signed-By</option> in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Note that a default installation already contains all keys to securely "
+"acquire packages from the default repositories, so fiddling with "
+"<command>apt-key</command> is only needed if third-party repositories are "
+"added."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"In order to add a new key you need to first download it (you should make "
+"sure you are using a trusted communication channel when retrieving it), add "
+"it with <command>apt-key</command> and then run <command>apt-get update</"
+"command> so that apt can download and verify the <filename>InRelease</"
+"filename> or <filename>Release.gpg</filename> files from the archives you "
+"have configured."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Repository Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"If you want to provide archive signatures in an archive under your "
+"maintenance you have to:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Create a toplevel Release file</emphasis>, if it does not exist "
+"already. You can do this by running <command>apt-ftparchive release</"
+"command> (provided in apt-utils)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Sign it</emphasis>. You can do this by running <command>gpg --"
+"clearsign -o InRelease Release</command> and <command>gpg -abs -o Release."
+"gpg Release</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Publish the key fingerprint</emphasis>, so that your users will "
+"know what key they need to import in order to authenticate the files in the "
+"archive. It is best to ship your key in its own keyring package like "
+"&keyring-distro; does with &keyring-package; to be able to distribute "
+"updates and key transitions automatically later."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: apt-secure.8.xml
+msgid ""
+"<emphasis>Provide instructions on how to add your archive and key</"
+"emphasis>. If your users can't acquire your key securely the chain of trust "
+"described above is broken. How you can help users add your key depends on "
+"your archive and target audience ranging from having your keyring package "
+"included in another archive users already have configured (like the default "
+"repositories of their distribution) to leveraging the web of trust."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"Whenever the contents of the archive change (new packages are added or "
+"removed) the archive maintainer has to follow the first two steps outlined "
+"above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-ftparchive;, "
+"&debsign;, &debsig-verify;, &gpg;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"For more background information you might want to review the <ulink url="
+"\"https://www.debian.org/doc/manuals/securing-debian-howto/ch7\">Debian "
+"Security Infrastructure</ulink> chapter of the Securing Debian Manual (also "
+"available in the harden-doc package) and the <ulink url=\"http://www."
+"cryptnet.net/fdp/crypto/strong_distro.html\" >Strong Distribution HOWTO</"
+"ulink> by V. Alex Brennen."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-secure.8.xml
+msgid "Manpage Authors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-secure.8.xml
+msgid ""
+"This man-page is based on the work of Javier Fernández-Sanguino Peña, Isaac "
+"Jones, Colin Walters, Florian Weimer and Michael Vogt."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-cdrom.8.xml
+msgid "APT CD-ROM management utility"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> is used to add a new CD-ROM to APT's list of "
+"available sources. <command>apt-cdrom</command> takes care of determining "
+"the structure of the disc as well as correcting for several possible mis-"
+"burns and verifying the index files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"It is necessary to use <command>apt-cdrom</command> to add CDs to the APT "
+"system; it cannot be done by hand. Furthermore each disc in a multi-CD set "
+"must be inserted and scanned separately to account for possible mis-burns."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<literal>add</literal> is used to add a new disc to the source list. It will "
+"unmount the CD-ROM device, prompt for a disc to be inserted and then proceed "
+"to scan it and copy the index files. If the disc does not have a proper "
+"<filename>.disk</filename> directory you will be prompted for a descriptive "
+"title."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"APT uses a CD-ROM ID to track which disc is currently in the drive and "
+"maintains a database of these IDs in <filename>&statedir;/cdroms.list</"
+"filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"A debugging tool to report the identity of the current disc as well as the "
+"stored file name"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Do not try to auto-detect the CD-ROM path. Usually combined with the "
+"<option>--cdrom</option> option. Configuration Item: <literal>Acquire::"
+"cdrom::AutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Mount point; specify the location to mount the CD-ROM. This mount point must "
+"be listed in <filename>/etc/fstab</filename> and properly configured. "
+"Configuration Item: <literal>Acquire::cdrom::mount</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Rename a disc; change the label of a disc or override the disc's given "
+"label. This option will cause <command>apt-cdrom</command> to prompt for a "
+"new label. Configuration Item: <literal>APT::CDROM::Rename</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No mounting; prevent <command>apt-cdrom</command> from mounting and "
+"unmounting the mount point. Configuration Item: <literal>APT::CDROM::"
+"NoMount</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Fast Copy; Assume the package files are valid and do not check every "
+"package. This option should be used only if <command>apt-cdrom</command> has "
+"been run on this disc before and did not detect any errors. Configuration "
+"Item: <literal>APT::CDROM::Fast</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"Thorough Package Scan; This option may be needed with some old Debian "
+"1.1/1.2 discs that have Package files in strange places. It takes much "
+"longer to scan the CD but will pick them all up."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-cdrom.8.xml
+msgid ""
+"No Changes; Do not change the &sources-list; file and do not write index "
+"files. Everything is still checked however. Configuration Item: "
+"<literal>APT::CDROM::NoAct</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-cdrom.8.xml
+msgid ""
+"<command>apt-cdrom</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-config.8.xml
+msgid "APT Configuration Query program"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> is an internal program used by various "
+"portions of the APT suite to provide consistent configurability. It accesses "
+"the main configuration file <filename>/etc/apt/apt.conf</filename> in a "
+"manner that is easy to use for scripted applications."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"shell is used to access the configuration information from a shell script. "
+"It is given pairs of arguments, the first being a shell variable and the "
+"second the configuration value to query. As output it lists shell assignment "
+"commands for each value present. In a shell script it should be used as "
+"follows:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt-config.8.xml
+#, no-wrap
+msgid ""
+"OPTS=\"-f\"\n"
+"RES=`apt-config shell OPTS MyApp::options`\n"
+"eval $RES\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"This will set the shell environment variable $OPTS to the value of MyApp::"
+"options with a default of <option>-f</option>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"The configuration item may be postfixed with a /[fdbi]. f returns file "
+"names, d returns directories, b returns true or false and i returns an "
+"integer. Each of the returns is normalized and verified internally."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid "Just show the contents of the configuration space."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Include options which have an empty value. This is the default, so use --no-"
+"empty to remove them from the output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option><replaceable>
+#: apt-config.8.xml
+msgid "&percnt;f &#x0022;&percnt;v&#x0022;;&percnt;n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-config.8.xml
+msgid ""
+"Defines the output of each config option. &percnt;t will be replaced with "
+"its individual name, &percnt;f with its full hierarchical name and &percnt;v "
+"with its value. Use uppercase letters and special characters in the value "
+"will be encoded to ensure that it can e.g. be safely used in a quoted-string "
+"as defined by RFC822. Additionally &percnt;n will be replaced by a newline, "
+"and &percnt;N by a tab. A &percnt; can be printed by using &percnt;&percnt;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml apt-extracttemplates.1.xml apt-sortpkgs.1.xml
+#: apt-ftparchive.1.xml
+msgid "&apt-conf;"
+msgstr "&apt-conf;"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-config.8.xml
+msgid ""
+"<command>apt-config</command> returns zero on normal operation, decimal 100 "
+"on error."
+msgstr ""
+
+#. type: Content of: <refentry><refentryinfo><author><contrib>
+#: apt.conf.5.xml
+msgid "Initial documentation of Debug::*."
+msgstr ""
+
+#. type: Content of: <refentry><refentryinfo><author><email>
+#: apt.conf.5.xml
+msgid "dburrows@debian.org"
+msgstr ""
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt_auth.conf.5.xml
+msgid "5"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt.conf.5.xml
+msgid "Configuration file for APT"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<filename>/etc/apt/apt.conf</filename> is the main configuration file shared "
+"by all the tools in the APT suite of tools, though it is by no means the "
+"only place options can be set. The suite also shares a common command line "
+"parser to provide a uniform environment."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><para>
+#: apt.conf.5.xml
+msgid ""
+"When an APT tool starts up it will read the configuration files in the "
+"following order:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the file specified by the <envar>APT_CONFIG</envar> environment variable (if "
+"any)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+"order which have either no or \"<literal>conf</literal>\" as filename "
+"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+"and period (.) characters. Otherwise APT will print a notice that it has "
+"ignored a file, unless that file matches a pattern in the <literal>Dir::"
+"Ignore-Files-Silently</literal> configuration list - in which case it will "
+"be silently ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the main configuration file specified by <literal>Dir::Etc::main</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"all options set in the binary specific configuration subtree are moved into "
+"the root of the tree."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"the command line options are applied to override the configuration "
+"directives or to load even more configuration files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Syntax"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration file is organized in a tree with options organized into "
+"functional groups. Option specification is given with a double colon "
+"notation; for instance <literal>APT::Get::Assume-Yes</literal> is an option "
+"within the APT tool group, for the Get tool. Options do not inherit from "
+"their parent groups."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Syntactically the configuration language is modeled after what the ISC tools "
+"such as bind and dhcp use. Lines starting with <literal>//</literal> are "
+"treated as comments (ignored), as well as all text between <literal>/*</"
+"literal> and <literal>*/</literal>, just like C/C++ comments. Each line is "
+"of the form <literal>APT::Get::Assume-Yes \"true\";</literal>. The "
+"quotation marks and trailing semicolon are required. The value must be on "
+"one line, and there is no kind of string concatenation. Values must not "
+"include backslashes or extra quotation marks. Option names are made up of "
+"alphanumeric characters and the characters \"/-:._+\". A new scope can be "
+"opened with curly braces, like this:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT {\n"
+" Get {\n"
+" Assume-Yes \"true\";\n"
+" Fix-Broken \"true\";\n"
+" };\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"with newlines placed to make it more readable. Lists can be created by "
+"opening a scope and including a single string enclosed in quotes followed by "
+"a semicolon. Multiple entries can be included, separated by a semicolon."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "DPkg::Pre-Install-Pkgs {\"/usr/sbin/dpkg-preconfigure --apt\";};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"In general the sample configuration file &configureindex; is a good guide "
+"for how it should look."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Case is not significant in names of configuration items, so in the previous "
+"example you could use <literal>dpkg::pre-install-pkgs</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Names for the configuration items are optional if a list is defined as can "
+"be seen in the <literal>DPkg::Pre-Install-Pkgs</literal> example above. If "
+"you don't specify a name a new entry will simply add a new option to the "
+"list. If you specify a name you can override the option in the same way as "
+"any other option by reassigning a new value to the option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Two special commands are defined: <literal>#include</literal> (which is "
+"deprecated and not supported by alternative implementations) and "
+"<literal>#clear</literal>. <literal>#include</literal> will include the "
+"given file, unless the filename ends in a slash, in which case the whole "
+"directory is included. <literal>#clear</literal> is used to erase a part of "
+"the configuration tree. The specified element and all its descendants are "
+"erased. (Note that these lines also need to end with a semicolon.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>#clear</literal> command is the only way to delete a list or a "
+"complete scope. Reopening a scope (or using the syntax described below with "
+"an appended <literal>::</literal>) will <emphasis>not</emphasis> override "
+"previously written entries. Options can only be overridden by addressing a "
+"new value to them - lists and scopes can't be overridden, only cleared."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"All of the APT tools take an -o option which allows an arbitrary "
+"configuration directive to be specified on the command line. The syntax is a "
+"full option name (<literal>APT::Get::Assume-Yes</literal> for instance) "
+"followed by an equals sign then the new value of the option. To append a new "
+"element to a list, add a trailing <literal>::</literal> to the name of the "
+"list. (As you might suspect, the scope syntax can't be used on the command "
+"line.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that appending items to a list using <literal>::</literal> only works "
+"for one item per line, and that you should not use it in combination with "
+"the scope syntax (which adds <literal>::</literal> implicitly). Using both "
+"syntaxes together will trigger a bug which some users unfortunately depend "
+"on: an option with the unusual name \"<literal>::</literal>\" which acts "
+"like every other option with a name. This introduces many problems; for one "
+"thing, users who write multiple lines in this <emphasis>wrong</emphasis> "
+"syntax in the hope of appending to a list will achieve the opposite, as only "
+"the last assignment for this option \"<literal>::</literal>\" will be used. "
+"Future versions of APT will raise errors and stop working if they encounter "
+"this misuse, so please correct such statements now while APT doesn't "
+"explicitly complain about them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The APT Group"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"This group of options controls general APT behavior as well as holding the "
+"options for all of the tools."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"System Architecture; sets the architecture to use when fetching files and "
+"parsing package lists. The internal default is the architecture apt was "
+"compiled for."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"All Architectures the system supports. For instance, CPUs implementing the "
+"<literal>amd64</literal> (also called <literal>x86-64</literal>) "
+"instruction set are also able to execute binaries compiled for the "
+"<literal>i386</literal> (<literal>x86</literal>) instruction set. This list "
+"is used when fetching files and parsing package lists. The initial default "
+"is always the system's native architecture (<literal>APT::Architecture</"
+"literal>), and foreign architectures are added to the default list when they "
+"are registered via <command>dpkg --add-architecture</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This scope defines which compression formats are supported, how compression "
+"and decompression can be performed if support for this format isn't built "
+"into apt directly and a cost-value indicating how costly it is to compress "
+"something in this format. As an example the following configuration stanza "
+"would allow apt to download and uncompress as well as create and store files "
+"with the low-cost <literal>.reversed</literal> file extension which it will "
+"pass to the command <command>rev</command> without additional commandline "
+"parameters for compression and uncompression:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid ""
+"APT::Compressor::rev {\n"
+"\tName \"rev\";\n"
+"\tExtension \".reversed\";\n"
+"\tBinary \"rev\";\n"
+"\tCompressArg {};\n"
+"\tUncompressArg {};\n"
+"\tCost \"10\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of all build profiles enabled for build-dependency resolution, without "
+"the \"<literal>profile.</literal>\" namespace prefix. By default this list "
+"is empty. The <envar>DEB_BUILD_PROFILES</envar> as used by &dpkg-"
+"buildpackage; overrides the list notation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Default release to install packages from if more than one version is "
+"available. Contains release name, codename or release version. Examples: "
+"'stable', 'testing', 'unstable', '&debian-stable-codename;', '&debian-"
+"testing-codename;', '4.0', '5.0*'. See also &apt-preferences;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Ignore held packages; this global option causes the problem resolver to "
+"ignore held packages in its decision making."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on. When turned on the autoclean feature will remove any "
+"packages which can no longer be downloaded from the cache. If turned off "
+"then packages that are locally installed are also excluded from cleaning - "
+"but note that APT provides no direct means to reinstall them."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Defaults to on, which will cause APT to install essential and important "
+"packages as soon as possible in an install/upgrade operation, in order to "
+"limit the effect of a failing &dpkg; call. If this option is disabled, APT "
+"treats an important package in the same way as an extra package: between the "
+"unpacking of the package A and its configuration there can be many other "
+"unpack or configuration calls for other unrelated packages B, C etc. If "
+"these cause the &dpkg; call to fail (e.g. because package B's maintainer "
+"scripts generate an error), this results in a system state in which package "
+"A is unpacked but unconfigured - so any package depending on A is now no "
+"longer guaranteed to work, as its dependency on A is no longer satisfied."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The immediate configuration marker is also applied in the potentially "
+"problematic case of circular dependencies, since a dependency with the "
+"immediate flag is equivalent to a Pre-Dependency. In theory this allows APT "
+"to recognise a situation in which it is unable to perform immediate "
+"configuration, abort, and suggest to the user that the option should be "
+"temporarily deactivated in order to allow the operation to proceed. Note "
+"the use of the word \"theory\" here; in the real world this problem has "
+"rarely been encountered, in non-stable distribution versions, and was caused "
+"by wrong dependencies of the package in question or by a system in an "
+"already broken state; so you should not blindly disable this option, as the "
+"scenario mentioned above is not the only problem it can help to prevent in "
+"the first place."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Before a big operation like <literal>dist-upgrade</literal> is run with this "
+"option disabled you should try to explicitly <literal>install</literal> the "
+"package APT is unable to configure immediately; but please make sure you "
+"also report your problem to your distribution and to the APT team with the "
+"buglink below, so they can work on improving or correcting the upgrade "
+"process."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Never enable this option unless you <emphasis>really</emphasis> know what "
+"you are doing. It permits APT to temporarily remove an essential package to "
+"break a Conflicts/Conflicts or Conflicts/Pre-Depends loop between two "
+"essential packages. <emphasis>Such a loop should never exist and is a grave "
+"bug</emphasis>. This option will work if the essential packages are not "
+"<command>tar</command>, <command>gzip</command>, <command>libc</command>, "
+"<command>dpkg</command>, <command>dash</command> or anything that those "
+"packages depend on."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT uses since version 0.7.26 a resizable memory mapped cache file to store "
+"the available information. <literal>Cache-Start</literal> acts as a hint of "
+"the size the cache will grow to, and is therefore the amount of memory APT "
+"will request at startup. The default value is 20971520 bytes (~20 MB). Note "
+"that this amount of space needs to be available for APT; otherwise it will "
+"likely fail ungracefully, so for memory restricted devices this value should "
+"be lowered while on systems with a lot of configured sources it should be "
+"increased. <literal>Cache-Grow</literal> defines in bytes with the default "
+"of 1048576 (~1 MB) how much the cache size will be increased in the event "
+"the space defined by <literal>Cache-Start</literal> is not enough. This "
+"value will be applied again and again until either the cache is big enough "
+"to store all information or the size of the cache reaches the <literal>Cache-"
+"Limit</literal>. The default of <literal>Cache-Limit</literal> is 0 which "
+"stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the "
+"automatic growth of the cache is disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Defines which packages are considered essential build dependencies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Get subsection controls the &apt-get; tool; please see its documentation "
+"for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Cache subsection controls the &apt-cache; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The CDROM subsection controls the &apt-cdrom; tool; please see its "
+"documentation for more information about the options here."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "The Acquire Group"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Acquire</literal> group of options controls the download of "
+"packages as well as the various \"acquire methods\" responsible for the "
+"download itself (see also &sources-list;)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, enabling time-related checks. "
+"Disabling it means that the machine's time cannot be trusted, and APT will "
+"hence disable all time-related checks, such as <option>Check-Valid-Until</"
+"option> and verifying that the Date field of a release file is not in the "
+"future."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) before its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. The default value is <literal>10</literal>. "
+"Archive specific settings can be made by appending the label of the archive "
+"to the option name. Preferably, the same can be achieved for specific "
+"&sources-list; entries by using the <option>Date-Max-Future</option> option "
+"there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Security related option defaulting to true, as giving a Release file's "
+"validation an expiration date prevents replay attacks over a long timescale, "
+"and can also for example help users to identify mirrors that are no longer "
+"updated - but the feature depends on the correctness of the clock on the "
+"user system. Archive maintainers are encouraged to create Release files with "
+"the <literal>Valid-Until</literal> header, but if they don't or a stricter "
+"value is desired the <literal>Max-ValidTime</literal> option below can be "
+"used. The <option>Check-Valid-Until</option> option of &sources-list; "
+"entries should be preferred to disable the check selectively instead of "
+"using this global override."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Maximum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. If the Release file itself includes a "
+"<literal>Valid-Until</literal> header the earlier date of the two is used as "
+"the expiration date. The default value is <literal>0</literal> which stands "
+"for \"valid forever\". Archive specific settings can be made by appending "
+"the label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Max</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Minimum time (in seconds) after its creation (as indicated by the "
+"<literal>Date</literal> header) that the <filename>Release</filename> file "
+"should be considered valid. Use this if you need to use a seldom updated "
+"(local) mirror of a more frequently updated archive with a <literal>Valid-"
+"Until</literal> header instead of completely disabling the expiration date "
+"checking. Archive specific settings can and should be used by appending the "
+"label of the archive to the option name. Preferably, the same can be "
+"achieved for specific &sources-list; entries by using the <option>Valid-"
+"Until-Min</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow use of the internal TLS support in the http method. If set to false, "
+"this completely disables support for TLS in apt's own methods (excluding the "
+"curl-based https method). No TLS-related functions will be called anymore."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download deltas called <literal>PDiffs</literal> for indexes (like "
+"<filename>Packages</filename> files) instead of downloading whole ones. True "
+"by default. Preferably, this can be set for specific &sources-list; entries "
+"or index files by using the <option>PDiffs</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Two sub-options to limit the use of PDiffs are also available: "
+"<literal>FileLimit</literal> can be used to specify a maximum number of "
+"PDiff files should be downloaded to update a file. <literal>SizeLimit</"
+"literal> on the other hand is the maximum percentage of the size of all "
+"patches compared to the size of the targeted file. If one of these limits is "
+"exceeded the complete file is downloaded instead of the patches."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Try to download indexes via an URI constructed from a hashsum of the "
+"expected file rather than downloaded via a well-known stable filename. True "
+"by default, but automatically disabled if the source indicates no support "
+"for it. Usage can be forced with the special value \"force\". Preferably, "
+"this can be set for specific &sources-list; entries or index files by using "
+"the <option>By-Hash</option> option there."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Queuing mode; <literal>Queue-Mode</literal> can be one of <literal>host</"
+"literal> or <literal>access</literal> which determines how APT parallelizes "
+"outgoing connections. <literal>host</literal> means that one connection per "
+"target host will be opened, <literal>access</literal> means that one "
+"connection per URI type will be opened."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Number of retries to perform. If this is non-zero APT will retry failed "
+"files the given number of times."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Use symlinks for source archives. If set to true then source archives will "
+"be symlinked when possible instead of copying. True is the default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The options in these scopes configure APTs acquire transports for the "
+"protocols HTTP and HTTPS and are documented in the &apt-transport-http; and "
+"&apt-transport-https; manpages respectively."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>ftp::Proxy</literal> sets the default proxy to use for FTP URIs. "
+"It is in the standard form of <literal>ftp://[[user][:pass]@]host[:port]/</"
+"literal>. Per host proxies can also be specified by using the form "
+"<literal>ftp::Proxy::&lt;host&gt;</literal> with the special keyword "
+"<literal>DIRECT</literal> meaning to use no proxies. If no one of the above "
+"settings is specified, <envar>ftp_proxy</envar> environment variable will be "
+"used. To use an FTP proxy you will have to set the <literal>ftp::ProxyLogin</"
+"literal> script in the configuration file. This entry specifies the commands "
+"to send to tell the proxy server what to connect to. Please see "
+"&configureindex; for an example of how to do this. The substitution "
+"variables representing the corresponding URI component are <literal>"
+"$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>"
+"$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, <literal>$(SITE)</"
+"literal> and <literal>$(SITE_PORT)</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The option <literal>timeout</literal> sets the timeout timer used by the "
+"method; this value applies to the connection as well as the data timeout."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Several settings are provided to control passive mode. Generally it is safe "
+"to leave passive mode on; it works in nearly every environment. However, "
+"some situations require that passive mode be disabled and port mode FTP used "
+"instead. This can be done globally or for connections that go through a "
+"proxy or for a specific host (see the sample config file for examples)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"It is possible to proxy FTP over HTTP by setting the <envar>ftp_proxy</"
+"envar> environment variable to an HTTP URL - see the discussion of the http "
+"method above for syntax. You cannot set this in the configuration file and "
+"it is not recommended to use FTP over HTTP due to its low efficiency."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The setting <literal>ForceExtended</literal> controls the use of RFC2428 "
+"<literal>EPSV</literal> and <literal>EPRT</literal> commands. The default is "
+"false, which means these commands are only used if the control connection is "
+"IPv6. Setting this to true forces their use even on IPv4 connections. Note "
+"that most FTP servers do not support RFC2428."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "/cdrom/::Mount \"foo\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For URIs using the <literal>cdrom</literal> method, the only configurable "
+"option is the mount point, <literal>cdrom::Mount</literal>, which must be "
+"the mount point for the CD-ROM (or DVD, or whatever) drive as specified in "
+"<filename>/etc/fstab</filename>. It is possible to provide alternate mount "
+"and unmount commands if your mount point cannot be listed in the fstab. The "
+"syntax is to put <placeholder type=\"literallayout\" id=\"0\"/> within the "
+"<literal>cdrom</literal> block. It is important to have the trailing slash. "
+"Unmount commands can be specified using UMount."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"For GPGV URIs the only configurable option is <literal>gpgv::Options</"
+"literal>, which passes additional parameters to gpgv."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> \"<replaceable>Methodname</replaceable>\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"List of compression types which are understood by the acquire methods. "
+"Files like <filename>Packages</filename> can be available in various "
+"compression formats. By default the acquire methods can decompress and "
+"recompress many common formats like <command>xz</command> and <command>gzip</"
+"command>; with this scope the supported formats can be queried, modified as "
+"well as support for more formats added (see also <option>APT::Compressor</"
+"option>). The syntax for this is: <placeholder type=\"synopsis\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order:: \"gz\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><synopsis>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::CompressionTypes::Order { \"xz\"; \"gz\"; };"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Also, the <literal>Order</literal> subgroup can be used to define in which "
+"order the acquire system will try to download the compressed files. The "
+"acquire system will try the first and proceed with the next compression type "
+"in this list on error, so to prefer one over the other type simply add the "
+"preferred type first - types not already added will be implicitly appended "
+"to the end of the list, so e.g. <placeholder type=\"synopsis\" id=\"0\"/> "
+"can be used to prefer <command>gzip</command> compressed files over all "
+"other compression formats. If <command>xz</command> should be preferred "
+"over <command>gzip</command> and <command>bzip2</command> the configure "
+"setting should look like this: <placeholder type=\"synopsis\" id=\"1\"/> It "
+"is not needed to add <literal>bz2</literal> to the list explicitly as it "
+"will be added automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that the <literal>Dir::Bin::<replaceable>Methodname</replaceable></"
+"literal> will be checked at run time. If this option has been set and "
+"support for this format isn't directly built into apt, the method will only "
+"be used if this file exists; e.g. for the <literal>bzip2</literal> method "
+"(the inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> "
+"Note also that list entries specified on the command line will be added at "
+"the end of the list specified in the configuration files, but before the "
+"default entries. To prefer a type in this case over the ones specified in "
+"the configuration files you can set the option direct - not in list style. "
+"This will not override the defined list; it will only prefix the list with "
+"this type."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The special type <literal>uncompressed</literal> can be used to give "
+"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files so this is mostly only usable for local mirrors."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When downloading <literal>gzip</literal> compressed indexes (Packages, "
+"Sources, or Translations), keep them gzip compressed locally instead of "
+"unpacking them. This saves quite a lot of disk space at the expense of more "
+"CPU requirements when building the local package caches. False by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The Languages subsection controls which <filename>Translation</filename> "
+"files are downloaded and in which order APT tries to display the description-"
+"translations. APT will try to display the first available description in the "
+"language which is listed first. Languages can be defined with their short or "
+"long language codes. Note that not all archives provide "
+"<filename>Translation</filename> files for every language - the long "
+"language codes are especially rare."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><programlisting>
+#: apt.conf.5.xml
+#, no-wrap
+msgid "Acquire::Languages { \"environment\"; \"de\"; \"en\"; \"none\"; \"fr\"; };"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The default list includes \"environment\" and \"en\". "
+"\"<literal>environment</literal>\" has a special meaning here: it will be "
+"replaced at runtime with the language codes extracted from the "
+"<literal>LC_MESSAGES</literal> environment variable. It will also ensure "
+"that these codes are not included twice in the list. If "
+"<literal>LC_MESSAGES</literal> is set to \"C\" only the "
+"<filename>Translation-en</filename> file (if available) will be used. To "
+"force APT to use no Translation file use the setting <literal>Acquire::"
+"Languages=none</literal>. \"<literal>none</literal>\" is another special "
+"meaning code which will stop the search for a suitable "
+"<filename>Translation</filename> file. This tells APT to download these "
+"translations too, without actually using them unless the environment "
+"specifies the languages. So the following example configuration will result "
+"in the order \"en, de\" in an English locale or \"de, en\" in a German one. "
+"Note that \"fr\" is downloaded, but not used unless APT is used in a French "
+"locale (where the order would be \"fr, de, en\"). <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Note: To prevent problems resulting from APT being executed in different "
+"environments (e.g. by different users or by other programs) all Translation "
+"files which are found in <filename>/var/lib/apt/lists/</filename> will be "
+"added to the end of the list (after an implicit \"<literal>none</literal>\")."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv4 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "When downloading, force to use only the IPv6 protocol."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The maximum file size of Release/Release.gpg/InRelease files. The default "
+"is 10MB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This option controls if apt will use the DNS SRV server record as specified "
+"in RFC 2782 to select an alternative server to connect to. The default is "
+"\"true\"."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories without "
+"sufficient security information. The default value is \"<literal>false</"
+"literal>\". Concept, implications as well as alternatives are detailed in "
+"&apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow update operations to load data files from repositories which provide "
+"security information, but these are deemed no longer cryptographically "
+"strong enough. The default value is \"<literal>false</literal>\". Concept, "
+"implications as well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Allow that a repository that was previously gpg signed to become unsigned "
+"during an update operation. When there is no valid signature for a "
+"previously trusted repository apt will refuse the update. This option can be "
+"used to override this protection. You almost certainly never want to enable "
+"this. The default is <literal>false</literal>. Concept, implications as "
+"well as alternatives are detailed in &apt-secure;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt.conf.5.xml
+msgid "scope"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Acquiring changelogs can only be done if an URI is known from where to get "
+"them. Preferable the Release file indicates this in a 'Changelogs' field. "
+"If this isn't available the Label/Origin field of the Release file is used "
+"to check if a <literal>Acquire::Changelogs::URI::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Origin::"
+"<replaceable>ORIGIN</replaceable></literal> option exists and if so this "
+"value is taken. The value in the Release file can be overridden with "
+"<literal>Acquire::Changelogs::URI::Override::Label::<replaceable>LABEL</"
+"replaceable></literal> or <literal>Acquire::Changelogs::URI::Override::"
+"Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a "
+"normal URI to a text file, except that package specific data is replaced "
+"with the placeholder <literal>@CHANGEPATH@</literal>. The value for it is: "
+"1. if the package is from a component (e.g. <literal>main</literal>) this "
+"is the first part otherwise it is omitted, 2. the first letter of source "
+"package name, except if the source package name starts with '<literal>lib</"
+"literal>' in which case it will be the first four letters. 3. The complete "
+"source package name. 4. the complete name again and 5. the source version. "
+"The first (if present), second, third and fourth part are separated by a "
+"slash ('<literal>/</literal>') and between the fourth and fifth part is an "
+"underscore ('<literal>_</literal>'). The special value '<literal>no</"
+"literal>' is available for this option indicating that this source can't be "
+"used to acquire changelog files from. Another source will be tried if "
+"available in this case."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Binary specific configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Especially with the introduction of the <command>apt</command> binary it can "
+"be useful to set certain options only for a specific binary as even options "
+"which look like they would effect only a certain binary like <option>APT::"
+"Get::Show-Versions</option> effect <command>apt-get</command> as well as "
+"<command>apt</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Setting an option for a specific binary only can be achieved by setting the "
+"option inside the <option>Binary::<replaceable>specific-binary</"
+"replaceable></option> scope. Setting the option <option>APT::Get::Show-"
+"Versions</option> for the <command>apt</command> only can e.g. by done by "
+"setting <option>Binary::apt::APT::Get::Show-Versions</option> instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Note that as seen in the DESCRIPTION section further above you can't set "
+"binary-specific options on the commandline itself nor in configuration files "
+"loaded via the commandline."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Directories"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::State</literal> section has directories that pertain to "
+"local state information. <literal>lists</literal> is the directory to place "
+"downloaded package lists in and <literal>status</literal> is the name of the "
+"&dpkg; status file. <literal>preferences</literal> is the name of the APT "
+"<filename>preferences</filename> file. <literal>Dir::State</literal> "
+"contains the default directory to prefix on all sub-items if they do not "
+"start with <filename>/</filename> or <filename>./</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Cache</literal> contains locations pertaining to local cache "
+"information, such as the two package caches <literal>srcpkgcache</literal> "
+"and <literal>pkgcache</literal> as well as the location to place downloaded "
+"archives, <literal>Dir::Cache::archives</literal>. Generation of caches can "
+"be turned off by setting <literal>pkgcache</literal> or "
+"<literal>srcpkgcache</literal> to <literal>\"\"</literal>. This will slow "
+"down startup but save disk space. It is probably preferable to turn off the "
+"pkgcache rather than the srcpkgcache. Like <literal>Dir::State</literal> "
+"the default directory is contained in <literal>Dir::Cache</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Dir::Etc</literal> contains the location of configuration files, "
+"<literal>sourcelist</literal> gives the location of the sourcelist and "
+"<literal>main</literal> is the default configuration file (setting has no "
+"effect, unless it is done from the config file specified by "
+"<envar>APT_CONFIG</envar>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Dir::Parts</literal> setting reads in all the config fragments "
+"in lexical order from the directory specified. After this is done then the "
+"main config file is loaded."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Binary programs are pointed to by <literal>Dir::Bin</literal>. <literal>Dir::"
+"Bin::Methods</literal> specifies the location of the method handlers and "
+"<literal>gzip</literal>, <literal>bzip2</literal>, <literal>lzma</literal>, "
+"<literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</"
+"literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</"
+"literal> specify the location of the respective programs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The configuration item <literal>RootDir</literal> has a special meaning. If "
+"set, all paths will be relative to <literal>RootDir</literal>, "
+"<emphasis>even paths that are specified absolutely</emphasis>. So, for "
+"instance, if <literal>RootDir</literal> is set to <filename>/tmp/staging</"
+"filename> and <literal>Dir::State::status</literal> is set to <filename>/var/"
+"lib/dpkg/status</filename>, then the status file will be looked up in "
+"<filename>/tmp/staging/var/lib/dpkg/status</filename>. If you want to "
+"prefix only relative paths, set <literal>Dir</literal> instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"The <literal>Ignore-Files-Silently</literal> list can be used to specify "
+"which files APT should silently ignore while parsing the files in the "
+"fragment directories. Per default a file which ends with <literal>.disabled</"
+"literal>, <literal>~</literal>, <literal>.bak</literal> or <literal>.dpkg-[a-"
+"z]+</literal> is silently ignored. As seen in the last default value these "
+"patterns can use regular expression syntax."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "APT in DSelect"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"When APT is used as a &dselect; method several configuration directives "
+"control the default behavior. These are in the <literal>DSelect</literal> "
+"section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Cache Clean mode; this value may be one of <literal>always</literal>, "
+"<literal>prompt</literal>, <literal>auto</literal>, <literal>pre-auto</"
+"literal> and <literal>never</literal>. <literal>always</literal> and "
+"<literal>prompt</literal> will remove all packages from the cache after "
+"upgrading, <literal>prompt</literal> (the default) does so conditionally. "
+"<literal>auto</literal> removes only those packages which are no longer "
+"downloadable (replaced with a new version for instance). <literal>pre-auto</"
+"literal> performs this action before downloading new packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the install phase."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The contents of this variable are passed to &apt-get; as command line "
+"options when it is run for the update phase."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If true the [U]pdate operation in &dselect; will always prompt to continue. "
+"The default is to prompt only on error."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "How APT calls &dpkg;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Several configuration directives control how APT invokes &dpkg;. These are "
+"in the <literal>DPkg</literal> section."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of options to pass to &dpkg;. The options must be specified "
+"using the list notation and each list item is passed as a single argument to "
+"&dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a string that defines the <envar>PATH</envar> environment variable "
+"used when running dpkg. It may be set to any valid value of that environment "
+"variable; or the empty string, in which case the variable is not changed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before/after invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"This is a list of shell commands to run before invoking &dpkg;. Like "
+"<literal>options</literal> this must be specified in list notation. The "
+"commands are invoked in order using <filename>/bin/sh</filename>; should any "
+"fail APT will abort. APT will pass the filenames of all .deb files it is "
+"going to install to the commands, one per line on the requested file "
+"descriptor, defaulting to standard input."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Version 2 of this protocol sends more information through the requested file "
+"descriptor: a line with the text <literal>VERSION 2</literal>, the APT "
+"configuration space, and a list of package actions with filename and version "
+"information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Each configuration directive line has the form <literal>key=value</"
+"literal>. Special characters (equal signs, newlines, nonprintable "
+"characters, quotation marks, and percent signs in <literal>key</literal> and "
+"newlines, nonprintable characters, and percent signs in <literal>value</"
+"literal>) are %-encoded. Lists are represented by multiple <literal>key::"
+"=value</literal> lines with the same key. The configuration section ends "
+"with a blank line."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Package action lines consist of five fields in Version 2: package name "
+"(without architecture qualification even if foreign), old version, direction "
+"of version change (&lt; for upgrades, &gt; for downgrades, = for no change), "
+"new version, action. The version fields are \"-\" for no version at all (for "
+"example when installing a package for the first time; no version is treated "
+"as earlier than any real version, so that is an upgrade, indicated as "
+"<literal>- &lt; 1.23.4</literal>). The action field is \"**CONFIGURE**\" if "
+"the package is being configured, \"**REMOVE**\" if it is being removed, or "
+"the filename of a .deb file if it is being unpacked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"In Version 3 after each version field follows the architecture of this "
+"version, which is \"-\" if there is no version, and a field showing the "
+"MultiArch type \"same\", \"foreign\", \"allowed\" or \"none\". Note that "
+"\"none\" is an incorrect typename which is just kept to remain compatible, "
+"it should be read as \"no\" and users are encouraged to support both."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The version of the protocol to be used for the command "
+"<literal><replaceable>cmd</replaceable></literal> can be chosen by setting "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</"
+"literal> accordingly, the default being version 1. If APT isn't supporting "
+"the requested version it will send the information in the highest version it "
+"has support for instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"The file descriptor to be used to send the information can be requested with "
+"<literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</"
+"literal> which defaults to <literal>0</literal> for standard input and is "
+"available since version 0.9.11. Support for the option can be detected by "
+"looking for the environment variable <envar>APT_HOOK_INFO_FD</envar> which "
+"contains the number of the used file descriptor as a confirmation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"APT chdirs to this directory before invoking &dpkg;, the default is "
+"<filename>/</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"These options are passed to &dpkg-buildpackage; when compiling packages; the "
+"default is to disable signing and produce all binaries."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"If this option is set APT will call <command>dpkg --configure --pending</"
+"command> to let &dpkg; handle all required configurations and triggers. This "
+"option is activated by default, but deactivating it could be useful if you "
+"want to run APT multiple times in a row - e.g. in an installer. In this "
+"scenario you could deactivate this option in all but the last run."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Periodic and Archives options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>APT::Periodic</literal> and <literal>APT::Archives</literal> groups "
+"of options configure behavior of apt periodic updates, which is done by the "
+"<literal>/usr/lib/apt/apt.systemd.daily</literal> script. See the top of "
+"this script for the brief documentation of these options."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml
+msgid "Debug options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"Enabling options in the <literal>Debug::</literal> section will cause "
+"debugging information to be sent to the standard error stream of the program "
+"utilizing the <literal>apt</literal> libraries, or enable special program "
+"modes that are primarily useful for debugging the behavior of <literal>apt</"
+"literal>. Most of these options are not interesting to a normal user, but a "
+"few may be:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgProblemResolver</literal> enables output about the "
+"decisions made by <literal>dist-upgrade, upgrade, install, remove, purge</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::NoLocking</literal> disables all file locking. This can be "
+"used to run some operations (for instance, <literal>apt-get -s install</"
+"literal>) as a non-root user."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::pkgDPkgPM</literal> prints out the actual command line each "
+"time that <literal>apt</literal> invokes &dpkg;."
+msgstr ""
+
+#. TODO: provide a
+#. motivating example, except I haven't a clue why you'd want
+#. to do this.
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"<literal>Debug::IdentCdrom</literal> disables the inclusion of statfs data "
+"in CD-ROM IDs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "A full list of debugging options to apt follows."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to accessing <literal>cdrom://</literal> sources."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using FTP."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTP."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Print information related to downloading packages using HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information related to verifying cryptographic signatures using "
+"<literal>gpg</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about the process of accessing collections of packages "
+"stored on CD-ROMs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Describes the process of resolving build-dependencies in &apt-get;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output each cryptographic hash that is generated by the <literal>apt</"
+"literal> libraries."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Do not include information from <literal>statfs</literal>, namely the number "
+"of used and free blocks on the CD-ROM filesystem, when generating an ID for "
+"a CD-ROM."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Disable all file locking. For instance, this will allow two instances of "
+"<quote><literal>apt-get update</literal></quote> to run at the same time."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Log when items are added to or removed from the global download queue."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages and errors related to verifying checksums and "
+"cryptographic signatures of downloaded files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information about downloading and applying package index list diffs, "
+"and errors relating to package index list diffs."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output information related to patching apt package lists when downloading "
+"index diffs instead of full indices."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log all interactions with the sub-processes that actually perform downloads."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Log events related to the automatically-installed status of packages and to "
+"the removal of unused packages."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are being automatically "
+"installed to resolve dependencies. This corresponds to the initial auto-"
+"install pass performed in, e.g., <literal>apt-get install</literal>, and not "
+"to the full <literal>apt</literal> dependency resolver; see <literal>Debug::"
+"pkgProblemResolver</literal> for that."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate debug messages describing which packages are marked as keep/install/"
+"remove while the ProblemResolver does his work. Each addition or deletion "
+"may trigger additional actions; they are shown indented two additional "
+"spaces under the original entry. The format for each line is "
+"<literal>MarkKeep</literal>, <literal>MarkDelete</literal> or "
+"<literal>MarkInstall</literal> followed by <literal>package-name &lt;a.b.c -"
+"&gt; d.e.f | x.y.z&gt; (section)</literal> where <literal>a.b.c</literal> is "
+"the current version of the package, <literal>d.e.f</literal> is the version "
+"considered for installation and <literal>x.y.z</literal> is a newer version, "
+"but not considered for installation (because of a low pin score). The later "
+"two can be omitted if there is none or if it is the same as the installed "
+"version. <literal>section</literal> is the name of the section the package "
+"appears in."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"When invoking &dpkg;, output the precise command line with which it is being "
+"invoked, with arguments separated by a single space character."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output all the data received from &dpkg; on the status file descriptor and "
+"any errors encountered while parsing it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Generate a trace of the algorithm that decides the order in which "
+"<literal>apt</literal> should pass packages to &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Output status messages tracing the steps performed when invoking &dpkg;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid "Output the priority of each package list on startup."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Trace the execution of the dependency resolver (this applies only to what "
+"happens when a complex dependency problem is encountered)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display a list of all installed packages with their calculated score used by "
+"the pkgProblemResolver. The description of the package is the same as "
+"described in <literal>Debug::pkgDepCache::Marker</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Print information about the vendors read from <filename>/etc/apt/vendors."
+"list</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt.conf.5.xml
+msgid ""
+"Display the external commands that are called by apt hooks. This includes e."
+"g. the config options <literal>DPkg::{Pre,Post}-Invoke</literal> or "
+"<literal>APT::Update::{Pre,Post}-Invoke</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt.conf.5.xml apt_preferences.5.xml sources.list.5.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "Examples"
+msgstr "Exemplos"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid ""
+"&configureindex; is a configuration file showing example values for all "
+"possible options."
+msgstr ""
+
+#. ? reading apt.conf
+#. type: Content of: <refentry><refsect1><para>
+#: apt.conf.5.xml
+msgid "&apt-cache;, &apt-config;, &apt-preferences;."
+msgstr "&apt-cache;, &apt-config;, &apt-preferences;."
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "Preference control file for APT"
+msgstr "Arquivo de controle de preferências para o APT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The APT preferences file <filename>/etc/apt/preferences</filename> and the "
+"fragment files in the <filename>/etc/apt/preferences.d/</filename> folder "
+"can be used to control which versions of packages will be selected for "
+"installation."
+msgstr ""
+"O arquivo de preferências do APT <filename>/etc/apt/preferences</filename> "
+"pode ser usado para controlar quais versões de pacotes serão selecionadas "
+"para instalação."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"Several versions of a package may be available for installation when the "
+"&sources-list; file contains references to more than one distribution (for "
+"example, <literal>stable</literal> and <literal>testing</literal>). APT "
+"assigns a priority to each version that is available. Subject to dependency "
+"constraints, <command>apt-get</command> selects the version with the highest "
+"priority for installation. The APT preferences override the priorities that "
+"APT assigns to package versions by default, thus giving the user control "
+"over which one is selected for installation."
+msgstr ""
+"Diversas versões de um pacote podem estar disponíveis para instalação quando "
+"o arquivo &sources-list; contém referências para mais de uma distribuição "
+"(por exemplo, <literal>stable</literal> e <literal>testing</literal>). O APT "
+"atribui uma prioridade para cada versão que esteja disponível. Sujeito a "
+"obstáculos de dependências, o <command>apt-get</command> seleciona para "
+"instalação a versão com a maior prioridade. O arquivo de preferências do APT "
+"sobrepoe as prioridades que o APT atribui a cada versão de pacote por "
+"padrão, dando assim ao usuário controle sobre qual versão do pacote é "
+"selecionada para instalação."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"Several instances of the same version of a package may be available when the "
+"&sources-list; file contains references to more than one source. In this "
+"case <command>apt-get</command> downloads the instance listed earliest in "
+"the &sources-list; file. The APT preferences do not affect the choice of "
+"instance, only the choice of version."
+msgstr ""
+"Diversas instâncias da mesma versão de um pacote pode estar disponíveis "
+"quando o arquivo &sources-list; contém referências a mais de uma fonte. "
+"Nesse caso, o <command>apt-get</command> faz o download da instância listada "
+"antes no arquivo &sources-list; . O arquivo de preferências do APT não afeta "
+"a escolha da instância."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Preferences are a strong power in the hands of a system administrator but "
+"they can become also their biggest nightmare if used without care! APT will "
+"not question the preferences, so wrong settings can lead to uninstallable "
+"packages or wrong decisions while upgrading packages. Even more problems "
+"will arise if multiple distribution releases are mixed without a good "
+"understanding of the following paragraphs. Packages included in a specific "
+"release aren't tested in (and therefore don't always work as expected in) "
+"older or newer releases, or together with other packages from different "
+"releases. You have been warned."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid ""
+"Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+"directory are parsed in alphanumeric ascending order and need to obey the "
+"following naming convention: The files have either no or \"<literal>pref</"
+"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"underscore (_) and period (.) characters. Otherwise APT will print a notice "
+"that it has ignored a file, unless that file matches a pattern in the "
+"<literal>Dir::Ignore-Files-Silently</literal> configuration list - in which "
+"case it will be silently ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "APT's Default Priority Assignments"
+msgstr "Atribuições de Prioridade Padrão do APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, fuzzy, no-wrap
+msgid "<command>apt-get install -t testing <replaceable>some-package</replaceable></command>\n"
+msgstr ""
+"<programlisting>\n"
+"<command>apt-get install -t testing <replaceable>algum-pacote</replaceable></command>\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "APT::Default-Release \"stable\";\n"
+msgstr "APT::Default-Release \"stable\";\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"If there is no preferences file or if there is no entry in the file that "
+"applies to a particular version then the priority assigned to that version "
+"is the priority of the distribution to which that version belongs. It is "
+"possible to single out a distribution, \"the target release\", which "
+"receives a higher priority than other distributions do by default. The "
+"target release can be set on the <command>apt-get</command> command line or "
+"in the APT configuration file <filename>/etc/apt/apt.conf</filename>. Note "
+"that this has precedence over any general priority you set in the <filename>/"
+"etc/apt/preferences</filename> file described later, but not over "
+"specifically pinned packages. For example, <placeholder type="
+"\"programlisting\" id=\"0\"/> <placeholder type=\"programlisting\" id=\"1\"/>"
+msgstr ""
+"Caso não exista um arquivo de preferências ou caso não exista uma entrada no "
+"arquivo que se aplique a uma instância em particular, a prioridade atribuída "
+"a essa instância é a prioridade da distribuição para a qual a instância "
+"pertence. É possível selecionar uma distribuição, conhecida como \"a versão "
+"alvo\" (the target release), que recebe uma prioridade maior do que as "
+"outras distribuições. A versão alvo pode ser definida na linha de comando do "
+"<command>apt-get</command> ou no arquivo de configuração do APT <filename>/"
+"etc/apt/apt.conf</filename>. Por exemplo,"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"If the target release has been specified then APT uses the following "
+"algorithm to set the priorities of the versions of a package. Assign:"
+msgstr ""
+"Caso uma versão alvo tenha sido especificada o APT usará o seguinte "
+"algoritmo para definir as prioridades das instâncias de um pacote. "
+"Atribuirá :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "priority 1"
+msgstr "prioridade 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the versions coming from archives which in their <filename>Release</"
+"filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
+"emphasis> as \"ButAutomaticUpgrades: yes\" like the Debian "
+"<literal>experimental</literal> archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "priority 100"
+msgstr "prioridade 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"to the version that is already installed (if any) and to the versions coming "
+"from archives which in their <filename>Release</filename> files are marked "
+"as \"NotAutomatic: yes\" and \"ButAutomaticUpgrades: yes\" like the Debian "
+"backports archive since <literal>squeeze-backports</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "priority 500"
+msgstr "prioridade 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "to the versions that do not belong to the target release."
+msgstr ""
+"para as instâncias que não estejam instaladas e pertençam a versão alvo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "priority 990"
+msgstr "prioridade 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "to the versions that belong to the target release."
+msgstr ""
+"para as instâncias que não estejam instaladas e pertençam a versão alvo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The highest of those priorities whose description matches the version is "
+"assigned to the version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"If the target release has not been specified then APT simply assigns "
+"priority 100 to all installed package versions and priority 500 to all "
+"uninstalled package versions, except versions coming from archives which in "
+"their <filename>Release</filename> files are marked as \"NotAutomatic: yes\" "
+"- these versions get the priority 1 or priority 100 if it is additionally "
+"marked as \"ButAutomaticUpgrades: yes\"."
+msgstr ""
+"Caso nenhuma versão alvo tenha sido especificada, o APT simplesmente irá "
+"atribuir a prioridade 100 para todas as instâncias de pacotes instaladas e a "
+"prioridade 500 para todas as instâncias de pacotes não instaladas."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"APT then applies the following rules, listed in order of precedence, to "
+"determine which version of a package to install."
+msgstr ""
+"O APT aplica as regras a seguir, listadas em ordem de precedência, para "
+"determinar qual instância de um pacote instalar."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"Never downgrade unless the priority of an available version exceeds 1000. "
+"(\"Downgrading\" is installing a less recent version of a package in place "
+"of a more recent version. Note that none of APT's default priorities "
+"exceeds 1000; such high priorities can only be set in the preferences file. "
+"Note also that downgrading a package can be risky.)"
+msgstr ""
+"Nunca faz um downgrade a menos que a prioridade de uma instância disponível "
+"exceda 1000. (Fazer um \"downgrade\" é instalar uma versão menos recente de "
+"um pacote no lugar de uma versão mais recente. Note que nenhuma das "
+"prioridades padrão do APT excede 1000; prioridades altas como essa podem ser "
+"definidas somente no arquivo de preferências. Note também que fazer um "
+"\"downgrade\" pode ser arriscado.)"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "Install the highest priority version."
+msgstr "Instala a instância de prioridade mais alta."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"If two or more versions have the same priority, install the most recent one "
+"(that is, the one with the higher version number)."
+msgstr ""
+"Caso duas ou mais instâncias possuam a mesma prioridade, instala a instância "
+"mais recente (ou seja, aquela com o maior número de versão)."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"If two or more versions have the same priority and version number but either "
+"the packages differ in some of their metadata or the <literal>--reinstall</"
+"literal> option is given, install the uninstalled one."
+msgstr ""
+"Caso duas ou mais instâncias possuam a mesma prioridade e número de versão "
+"mas os pacotes sejam diferentes em alguns de seus metadados ou a opção "
+"<literal>--reinstall</literal> seja fornecida, instala aquela desinstalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"In a typical situation, the installed version of a package (priority 100) "
+"is not as recent as one of the versions available from the sources listed in "
+"the &sources-list; file (priority 500 or 990). Then the package will be "
+"upgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Em uma situação típica, a instância instalada de um pacote (prioridade 100) "
+"não é tão recente quanto uma das versões disponíveis nas fontes listadas no "
+"arquivo &sources-list; (prioridade 500 ou 990). Então o pacote será "
+"atualizado quando os comandos <command>apt-get install <replaceable>algum-"
+"pacote</replaceable></command> ou <command>apt-get dist-upgrade</command> "
+"forem executados."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"More rarely, the installed version of a package is <emphasis>more</emphasis> "
+"recent than any of the other available versions. The package will not be "
+"downgraded when <command>apt-get install <replaceable>some-package</"
+"replaceable></command> or <command>apt-get upgrade</command> is executed."
+msgstr ""
+"Mais raramente, a versão instalada de um pacote é <emphasis>mais</emphasis> "
+"recente do que qualquer uma das outras versões disponíveis. O dowgrade do "
+"pacote não será feito quando os comandos <command>apt-get install "
+"<replaceable>algum-pacote</replaceable></command> ou <command>apt-get "
+"upgrade</command> forem executados."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"Sometimes the installed version of a package is more recent than the version "
+"belonging to the target release, but not as recent as a version belonging to "
+"some other distribution. Such a package will indeed be upgraded when "
+"<command>apt-get install <replaceable>some-package</replaceable></command> "
+"or <command>apt-get upgrade</command> is executed, because at least "
+"<emphasis>one</emphasis> of the available versions has a higher priority "
+"than the installed version."
+msgstr ""
+"Algumas vezes a versão instalada de um pacote é mais recente que a versão "
+"que pertence a versão alvo, mas não tão recente quanto a versão que pertence "
+"a alguma outra distribuição. Um pacote como esse será na verdade atualizado "
+"quando os comandos <command>apt-get install <replaceable>algum-pacote</"
+"replaceable></command> ou <command>apt-get upgrade</command> forem "
+"executados, devido a pelo menos <emphasis>uma</emphasis> das versões "
+"disponíveis possuir uma prioridade maior do que a versão instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "The Effect of APT Preferences"
+msgstr "O Efeito das Preferências do APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The APT preferences file allows the system administrator to control the "
+"assignment of priorities. The file consists of one or more multi-line "
+"records separated by blank lines. Records can have one of two forms, a "
+"specific form and a general form."
+msgstr ""
+"O arquivo de preferências do APT permite ao administrador do sistema "
+"personalizar prioridades. O arquivo consiste de um ou mais registros de "
+"múltiplas linhas separados por linhas em branco. Registros podem possuir uma "
+"das duas formas, uma forma específica e uma forma geral."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The specific form assigns a priority (a \"Pin-Priority\") to one or more "
+"specified packages with a specified version or version range. For example, "
+"the following record assigns a high priority to all versions of the "
+"<filename>perl</filename> package whose version number begins with "
+"\"<literal>&good-perl;</literal>\". Multiple packages can be separated by "
+"spaces."
+msgstr ""
+"A forma específica atribui uma uma prioridade (uma \"Pin-Priority\") para um "
+"pacote e versão ou faixa de versão especificados. Por exemplo, o registro a "
+"seguir atribui uma prioridade alta para todas as versões do pacote "
+"<filename>perl</filename> os quais tenham seus números de versão iniciando "
+"com \"<literal>5.8</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The general form assigns a priority to all of the package versions in a "
+"given distribution (that is, to all the versions of packages that are listed "
+"in a certain <filename>Release</filename> file) or to all of the package "
+"versions coming from a particular Internet site, as identified by the site's "
+"fully qualified domain name."
+msgstr ""
+"O forma geral atribui uma prioridade para todas as versões de pacotes em uma "
+"dada distribuição (isto é, para toda as versões de pacotes que estejam em um "
+"certo arquivo <filename>Release</filename>) ou para todas as versões de "
+"pacotes que provenientes de um site Internet em particular, como "
+"identificado pelo nome de domínio totalmente qualificado do site Internet."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"This general-form entry in the APT preferences file applies only to groups "
+"of packages. For example, the following record assigns a high priority to "
+"all package versions available from the local site."
+msgstr ""
+"Essa entrada de forma geral no arquivo de preferências do APT aplica-se "
+"somente a grupos de pacotes. Por exemplo, o registro a seguir faz com que o "
+"APT atribua uma prioridade alta para todas as versões de pacotes disponíveis "
+"no site local."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+msgid ""
+"A note of caution: the keyword used here is \"<literal>origin</literal>\" "
+"which can be used to match a hostname. The following record will assign a "
+"high priority to all versions available from the server identified by the "
+"hostname \"ftp.de.debian.org\""
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+msgstr ""
+"Package: *\n"
+"Pin: origin \"ftp.de.debian.org\"\n"
+"Pin-Priority: 999\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"This should <emphasis>not</emphasis> be confused with the Origin of a "
+"distribution as specified in a <filename>Release</filename> file. What "
+"follows the \"Origin:\" tag in a <filename>Release</filename> file is not an "
+"Internet address but an author or vendor name, such as \"Debian\" or \"Ximian"
+"\"."
+msgstr ""
+"Uma nota de aviso : a palavra-chave usada aqui é \"<literal>origin</literal>"
+"\". Esta palavra não deve ser confundida com a origem (\"Origin:\") de uma "
+"distribuição como especificado em um arquivo <filename>Release</filename>. O "
+"que segue a tag \"Origin:\" em um arquivo <filename>Release</filename> não é "
+"um endereço de site Internet mas sim nome de autor ou distribuidor (vendor), "
+"como \"Debian\" ou \"Ximian\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following record assigns a low priority to all package versions "
+"belonging to any distribution whose Archive name is \"<literal>unstable</"
+"literal>\"."
+msgstr ""
+"O registro a seguir atribui uma prioridade baixa para todas as versões de "
+"pacote que pertençam a qualquer distribuição cujo nome do Repositório seja "
+"\"<literal>unstable</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any distribution whose Codename is \"<literal>&debian-testing-"
+"codename;</literal>\"."
+msgstr ""
+"O registro a seguir atribui uma prioridade baixa para todas as versões de "
+"pacote que pertençam a qualquer distribuição cujo nome do Repositório seja "
+"\"<literal>unstable</literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following record assigns a high priority to all package versions "
+"belonging to any release whose Archive name is \"<literal>stable</literal>\" "
+"and whose release Version number is \"<literal>&debian-stable-version;</"
+"literal>\"."
+msgstr ""
+"O registro a seguir atribui uma prioridade alta para todas as versões de "
+"pacotes que pertençam a qualquer versão cujo nome do Repositório seja "
+"\"<literal>stable</literal>\" e cujo número de versão seja \"<literal>3.0</"
+"literal>\"."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The effect of the comma operator is similar to an \"and\" in logic: All "
+"conditions must be satisfied for the pin to match. There is one exception: "
+"For any type of condition (such as two \"a\" conditions), only the last such "
+"condition is checked."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Regular expressions and &glob; syntax"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"APT also supports pinning by &glob; expressions, and regular expressions "
+"surrounded by slashes. For example, the following example assigns the "
+"priority 500 to all packages from experimental where the name starts with "
+"gnome (as a &glob;-like expression) or contains the word kde (as a POSIX "
+"extended regular expression surrounded by slashes)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+msgstr ""
+"Package: gnome* /kde/\n"
+"Pin: release a=experimental\n"
+"Pin-Priority: 500\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The rule for those expressions is that they can occur anywhere where a "
+"string can occur. Thus, the following pin assigns the priority 990 to all "
+"packages from a release starting with &ubuntu-codename;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+msgstr ""
+"Package: *\n"
+"Pin: release n=&ubuntu-codename;*\n"
+"Pin-Priority: 990\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"If a regular expression occurs in a <literal>Package</literal> field, the "
+"behavior is the same as if this regular expression were replaced with a list "
+"of all package names it matches. It is undecided whether this will change in "
+"the future; thus you should always list wild-card pins first, so later "
+"specific pins override it. The pattern \"<literal>*</literal>\" in a "
+"Package field is not considered a &glob; expression in itself."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "How APT Interprets Priorities"
+msgstr "Como o APT Interpreta Prioridades"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"Priorities (P) assigned in the APT preferences file must be positive or "
+"negative integers. They are interpreted as follows (roughly speaking):"
+msgstr ""
+"Prioridades (P) atribuídas no arquivo de preferências do APT devem ser "
+"números inteiros positivos ou negativos. Eles são interpretados como a "
+"seguir (a grosso modo):"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &gt;= 1000"
+msgstr "P &gt;= 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"causes a version to be installed even if this constitutes a downgrade of the "
+"package"
+msgstr ""
+"faz com que uma instância seja instalada mesmo caso isso constitua um "
+"dowgrade do pacote"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "990 &lt;= P &lt; 1000"
+msgstr "990 &lt;= P &lt; 1000"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"causes a version to be installed even if it does not come from the target "
+"release, unless the installed version is more recent"
+msgstr ""
+"faz com que uma versão seja instalada mesmo caso a mesma não venha de uma "
+"versão alvo, a menos que a versão instalada seja mais recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "500 &lt;= P &lt; 990"
+msgstr "500 &lt;= P &lt; 990"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to the target release or the installed version is more recent"
+msgstr ""
+"faz com que uma versão seja instalada a menos que exista uma versão "
+"disponível pertencente a versão alvo ou a versão instalada seja mais recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "100 &lt;= P &lt; 500"
+msgstr "100 &lt;= P &lt; 500"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"causes a version to be installed unless there is a version available "
+"belonging to some other distribution or the installed version is more recent"
+msgstr ""
+"faz com que uma versão seja instalada a menos que exista uma versão "
+"disponível pertencente a alguma outra distribuição ou a versão instalada "
+"seja mais recente"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "0 &lt; P &lt; 100"
+msgstr "0 &lt; P &lt; 100"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"causes a version to be installed only if there is no installed version of "
+"the package"
+msgstr ""
+"faz com que uma versão seja instalada somente caso não exista uma versão "
+"instalada do pacote"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P &lt; 0"
+msgstr "P &lt; 0"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "prevents the version from being installed"
+msgstr "impede a versão de ser instalada"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+msgid "P = 0"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+msgid "has undefined behaviour, do not use it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The first specific-form record matching an available package version "
+"determines the priority of the package version. Failing that, the priority "
+"of the package is defined as the maximum of all priorities defined by "
+"generic-form records matching the version. Records defined using patterns "
+"in the Pin field other than \"*\" are treated like specific-form records."
+msgstr ""
+"Caso um dos registro de forma específica descritos acima case (match) com "
+"uma versão disponível do pacote então o primeiro desses registros "
+"encontrados determinará a prioridade da versão do pacote. Na falha desse "
+"cenário, caso quaisquer registros de forma genérica casem (match) com uma "
+"versão do pacote disponível então o primeiro desses registros encontrado "
+"determinará a prioridade da versão do pacote."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"For example, suppose the APT preferences file contains the three records "
+"presented earlier:"
+msgstr ""
+"Por exemplo, suponha que o arquivo de preferências do APT contenha os três "
+"registros apresentados anteriormente :"
+
+#. type: Content of: <refentry><refsect1><refsect2><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+msgstr ""
+"Package: perl\n"
+"Pin: version &good-perl;*\n"
+"Pin-Priority: 1001\n"
+"\n"
+"Package: *\n"
+"Pin: origin \"\"\n"
+"Pin-Priority: 999\n"
+"\n"
+"Package: *\n"
+"Pin: release unstable\n"
+"Pin-Priority: 50\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid "Then:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The most recent available version of the <literal>perl</literal> package "
+"will be installed, so long as that version's version number begins with "
+"\"<literal>&good-perl;</literal>\". If <emphasis>any</emphasis> &good-perl;"
+"* version of <literal>perl</literal> is available and the installed version "
+"is &bad-perl;*, then <literal>perl</literal> will be downgraded."
+msgstr ""
+"A versão mais recente disponível do pacote <literal>perl</literal> será "
+"instalado, contanto que esse número de versão da versão inicie com "
+"\"<literal>5.8</literal>\". Caso <emphasis>qualquer</emphasis> versão 5.8* "
+"de <literal>perl</literal> esteja disponível e a versão instalada seja 5.9*, "
+"será feito um downgrade do <literal>perl</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"A version of any package other than <literal>perl</literal> that is "
+"available from the local system has priority over other versions, even "
+"versions belonging to the target release."
+msgstr ""
+"Uma versão de qualquer pacote diferente de <literal>perl</literal> que "
+"esteja disponível no sistema local possui prioridade sobre outras versões, "
+"mesmo versões pertencentes a versão alvo."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><itemizedlist><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"A version of a package whose origin is not the local system but some other "
+"site listed in &sources-list; and which belongs to an <literal>unstable</"
+"literal> distribution is only installed if it is selected for installation "
+"and no version of the package is already installed."
+msgstr ""
+"Uma versão de um pacote cuja origem não seja o sistema local mas sim algum "
+"outro site listado no arquivo &sources-list; e que pertença a uma "
+"distribuição <literal>unstable</literal> é instalada somente caso a mesma "
+"seja selecionada para instalação e nenhuma versão do pacote já esteja "
+"instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "Determination of Package Version and Distribution Properties"
+msgstr "Determinação da Versão do Pacote e Propriedades da Distribuição"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The locations listed in the &sources-list; file should provide "
+"<filename>Packages</filename> and <filename>Release</filename> files to "
+"describe the packages available at that location."
+msgstr ""
+"As localidades listadas em um arquivo &sources-list; devem fornecer arquivos "
+"<filename>Packages</filename> e <filename>Release</filename> para descrever "
+"os pacotes disponíveis nessas localidades."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The <filename>Packages</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable>/"
+"<replaceable>component</replaceable>/<replaceable>arch</replaceable></"
+"filename>: for example, <filename>.../dists/stable/main/binary-i386/"
+"Packages</filename>. It consists of a series of multi-line records, one for "
+"each package available in that directory. Only two lines in each record are "
+"relevant for setting APT priorities:"
+msgstr ""
+"O arquivo <filename>Packages</filename> é normalmente encontrado no "
+"diretório <filename>.../dists/<replaceable>nome-distribuição</replaceable>/"
+"<replaceable>componente</replaceable>/<replaceable>arquitetura</"
+"replaceable></filename> : por exemplo, <filename>.../dists/stable/main/"
+"binary-i386/Packages</filename>. O arquivo consiste de uma série de "
+"registros de múltiplas linhas, uma para cada pacote disponível no diretório. "
+"Somente duas linhas em cada registro são relevantes para definir prioridades "
+"do APT :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "the <literal>Package:</literal> line"
+msgstr "a linha <literal>Package:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "gives the package name"
+msgstr "informa o nome do pacote"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "the <literal>Version:</literal> line"
+msgstr "a linha <literal>Version:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "gives the version number for the named package"
+msgstr "informa o número de versão do pacote"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The <filename>Release</filename> file is normally found in the directory "
+"<filename>.../dists/<replaceable>dist-name</replaceable></filename>: for "
+"example, <filename>.../dists/stable/Release</filename>, or <filename>.../"
+"dists/&debian-stable-codename;/Release</filename>. It consists of a single "
+"multi-line record which applies to <emphasis>all</emphasis> of the packages "
+"in the directory tree below its parent. Unlike the <filename>Packages</"
+"filename> file, nearly all of the lines in a <filename>Release</filename> "
+"file are relevant for setting APT priorities:"
+msgstr ""
+"O arquivo <filename>Release</filename> é normalmente encontrado no diretório "
+"<filename>.../dists/<replaceable>nome-distribuição</replaceable></"
+"filename> : por exemplo, <filename>.../dists/stable/Release</filename>, ou "
+"<filename>.../dists/woody/Release</filename>. O arquivo consiste de um "
+"registro de múltiplas linhas o qual se aplica a <emphasis>todos</emphasis> "
+"os pacotes na àrvore de diretórios abaixo de seu diretório pai. Diferente do "
+"arquivo <filename>Packages</filename>, quase todas as linhas em um arquivo "
+"<filename>Release</filename> são relevantes para a definição de prioridades "
+"do APT :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "the <literal>Archive:</literal> or <literal>Suite:</literal> line"
+msgstr "a linha <literal>Archive:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"names the archive to which all the packages in the directory tree belong. "
+"For example, the line \"Archive: stable\" or \"Suite: stable\" specifies "
+"that all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file are in a <literal>stable</literal> "
+"archive. Specifying this value in the APT preferences file would require "
+"the line:"
+msgstr ""
+"dá nome ao repositório para o qual todos os pacotes na àrvore de diretório "
+"pertencem. Por exemplo, a linha \"Archive: stable\" especifica que todos os "
+"pacotes na àrvore de diretório abaixo do diretório pai do arquivo "
+"<filename>Release</filename> estão no respositório <literal>stable</"
+"literal>. Especificar esse valor no arquivo de preferências do APT iria "
+"requerer a linha :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release a=stable\n"
+msgstr "Pin: release a=stable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "the <literal>Codename:</literal> line"
+msgstr "a linha <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"names the codename to which all the packages in the directory tree belong. "
+"For example, the line \"Codename: &debian-testing-codename;\" specifies that "
+"all of the packages in the directory tree below the parent of the "
+"<filename>Release</filename> file belong to a version named <literal>&debian-"
+"testing-codename;</literal>. Specifying this value in the APT preferences "
+"file would require the line:"
+msgstr ""
+"dá nome ao repositório para o qual todos os pacotes na àrvore de diretório "
+"pertencem. Por exemplo, a linha \"Archive: stable\" especifica que todos os "
+"pacotes na àrvore de diretório abaixo do diretório pai do arquivo "
+"<filename>Release</filename> estão no respositório <literal>stable</"
+"literal>. Especificar esse valor no arquivo de preferências do APT iria "
+"requerer a linha :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release n=&debian-testing-codename;\n"
+msgstr "Pin: release n=&debian-testing-codename;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"names the release version. For example, the packages in the tree might "
+"belong to Debian release version &debian-stable-version;. Note that there "
+"is normally no version number for the <literal>testing</literal> and "
+"<literal>unstable</literal> distributions because they have not been "
+"released yet. Specifying this in the APT preferences file would require one "
+"of the following lines."
+msgstr ""
+"dá nome a versão da distribuição. Por exemplo, os pacote na àrvore podem "
+"pertencer a distribuição Debian versão 3.0. Note que normalmente não existe "
+"número de versão para as distribuições <literal>testing</literal> e "
+"<literal>unstable</literal> devido as mesmas não terem sido lançadas ainda. "
+"Especificar isso no arquivo de preferências do APT iria requerer uma das "
+"linhas a seguir."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+msgstr ""
+"Pin: release v=&debian-stable-version;\n"
+"Pin: release a=stable, v=&debian-stable-version;\n"
+"Pin: release &debian-stable-version;\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "the <literal>Component:</literal> line"
+msgstr "a linha <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"names the licensing component associated with the packages in the directory "
+"tree of the <filename>Release</filename> file. For example, the line "
+"\"Component: main\" specifies that all the packages in the directory tree "
+"are from the <literal>main</literal> component, which entails that they are "
+"licensed under terms listed in the Debian Free Software Guidelines. "
+"Specifying this component in the APT preferences file would require the line:"
+msgstr ""
+"dá nome ao componente de licenciamento associado com os pacotes na àrvore de "
+"diretório do arquivo <filename>Release</filename>. Por exemplo, a linha "
+"\"Component: main\" especifica que todos os pacotes na àrvore de diretório "
+"são do componente <literal>main</literal>, o que significa que as mesmas "
+"estão licenciadas sob os termos da Linhas Guias Debian para o Software Livre "
+"(a DFSG). Especificar esse componente no arquivo de preferências do APT iria "
+"requerer a linha :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release c=main\n"
+msgstr "Pin: release c=main\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "the <literal>Origin:</literal> line"
+msgstr "a linha <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"names the originator of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this origin in the APT preferences file would require "
+"the line:"
+msgstr ""
+"dá nome ao produtor dos pacotes na àrvore de diretório do arquivo "
+"<filename>Release</filename>. O mais comum é esse valor ser <literal>Debian</"
+"literal>. Especificar essa origem no arquivo de preferências do APT iria "
+"requerer a linha :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, fuzzy, no-wrap
+msgid "Pin: release o=Debian\n"
+msgstr "Pin: release o=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "the <literal>Label:</literal> line"
+msgstr "a linha <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"names the label of the packages in the directory tree of the "
+"<filename>Release</filename> file. Most commonly, this is <literal>Debian</"
+"literal>. Specifying this label in the APT preferences file would require "
+"the line:"
+msgstr ""
+"dá nome ao rótulo (label) dos pacotes na árvore de diretório. O mais comum é "
+"esse valor ser <literal>Debian</literal>. Especificar esse rótulo (label) no "
+"arquivo de preferências do APT iria requerer a linha :"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "Pin: release l=Debian\n"
+msgstr "Pin: release l=Debian\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"All of the <filename>Packages</filename> and <filename>Release</filename> "
+"files retrieved from locations listed in the &sources-list; file are stored "
+"in the directory <filename>/var/lib/apt/lists</filename>, or in the file "
+"named by the variable <literal>Dir::State::Lists</literal> in the "
+"<filename>apt.conf</filename> file. For example, the file <filename>debian."
+"lcs.mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> "
+"contains the <filename>Release</filename> file retrieved from the site "
+"<literal>debian.lcs.mit.edu</literal> for <literal>binary-i386</literal> "
+"architecture files from the <literal>contrib</literal> component of the "
+"<literal>unstable</literal> distribution."
+msgstr ""
+"Todos os arquivos <filename>Packages</filename> e <filename>Release</"
+"filename> obtidos das localidades listadas no arquivo &sources-list; são "
+"mantidos no diretório <filename>/var/lib/apt/lists</filename> ou no arquivo "
+"indicado pela variável <literal>Dir::State::Lists</literal> no arquivo "
+"<filename>apt.conf</filename>. Por exemplo, o arquivo <filename>debian.lcs."
+"mit.edu_debian_dists_unstable_contrib_binary-i386_Release</filename> contém "
+"o arquivo <filename>Release</filename> obtido do site <literal>debian.lcs."
+"mit.edu</literal> para a arquitetura <literal>binary-i386</literal>, "
+"arquivos do componente <literal>contrib</literal> da distribuição "
+"<literal>unstable</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "Optional Lines in an APT Preferences Record"
+msgstr "Linhas Opcionais em um Registro de Preferências do APT"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"Each record in the APT preferences file can optionally begin with one or "
+"more lines beginning with the word <literal>Explanation:</literal>. This "
+"provides a place for comments."
+msgstr ""
+"Cada registro em um arquivo de preferências do APT pode opcionalmente "
+"iniciar com uma ou mais linhas iniciadas com a palavra <literal>Explanation:"
+"</literal>. Isto oferece um local para inserir comentários."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "Tracking Stable"
+msgstr "Acompanhando a Stable"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, fuzzy, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated\n"
+"Explanation: package versions other than those in the stable distro\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"<programlisting>\n"
+"Explanation: Desinstala ou não instala nenhuma versão de pacote originada\n"
+"Explanation: do Debian a não ser aquelas na distribuição stable\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"<literal>stable</literal> distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> "
+"distributions. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O arquivo de preferências do APT a seguir fará com que o APT atribua uma "
+"prioridade maior do que a prioridade padrão (500) para todas as versões de "
+"pacotes pertencentes a distribuição <literal>stable</literal> e uma "
+"prioridade proibitivamente baixa para versões de pacotes pertencentes a "
+"outras distribuições <literal>Debian</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, fuzzy, no-wrap
+msgid ""
+"apt-get install <replaceable>package-name</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+msgstr ""
+"<programlisting>\n"
+"apt-get install <replaceable>nome-pacote</replaceable>\n"
+"apt-get upgrade\n"
+"apt-get dist-upgrade\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>stable</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Com um arquivo &sources-list; apropriado e o arquivo de preferências acima, "
+"quaisquer um dos comandos a seguir farão com que o APT atualize para a(s) "
+"ulítma(s) versão(ôes) <literal>stable</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, fuzzy, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/testing\n"
+msgstr ""
+"<programlisting>\n"
+"apt-get install <replaceable>pacote</replaceable>/testing\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>testing</literal> distribution; the package "
+"will not be upgraded again unless this command is given again. <placeholder "
+"type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O comando a seguir fará com que o APT atualize o pacote especificado para a "
+"última versão da distribuição <literal>testing</literal>; o pacote não serpa "
+"atualizado novamente a menos que esse comando seja executado novamente."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid "Tracking Testing or Unstable"
+msgstr "Acompanhando a Testing"
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"Package: *\n"
+"Pin: release a=testing\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release a=unstable\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following APT preferences file will cause APT to assign a high priority "
+"to package versions from the <literal>testing</literal> distribution, a "
+"lower priority to package versions from the <literal>unstable</literal> "
+"distribution, and a prohibitively low priority to package versions from "
+"other <literal>Debian</literal> distributions. <placeholder type="
+"\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O arquivo de preferências do APT a seguir fará com que o APT atribua uma "
+"prioridade maior para versões de pacote da distribuição <literal>testing</"
+"literal>, uma prioridade menor para versões de pacotes da distribuição "
+"<literal>unstable</literal> e uma prioridade proibitivamente baixa para "
+"versões de pacotes de outras distribuições <literal>Debian</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest "
+"<literal>testing</literal> version(s). <placeholder type=\"programlisting\" "
+"id=\"0\"/>"
+msgstr ""
+"Com um arquivo &sources-list; adequado e o arquivo de preferências do APT "
+"acima, quaisquer dos comandos a seguir farão com que o APT atualize para "
+"a(s) última(s) versão(ões) <literal>testing</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/unstable\n"
+msgstr "apt-get install <replaceable>pacote</replaceable>/unstable\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>unstable</literal> distribution. "
+"Thereafter, <command>apt-get upgrade</command> will upgrade the package to "
+"the most recent <literal>testing</literal> version if that is more recent "
+"than the installed version, otherwise, to the most recent <literal>unstable</"
+"literal> version if that is more recent than the installed version. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O comando a seguir fará com que o APT atualize o pacote especificado para a "
+"última versão da distribuição <literal>unstable</literal>. Assim, o comando "
+"<command>apt-get upgrade</command> irá atualizar o pacote para a versão "
+"<literal>testing</literal> mais recente caso essa versão seja mais recente "
+"que a versão instalada, caso não seja, o pacote será atualizado para a "
+"versão <literal>unstable</literal> mais recente caso a mesma seja mais "
+"recente que a versão instalada."
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt_preferences.5.xml
+msgid "Tracking the evolution of a codename release"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, fuzzy, no-wrap
+msgid ""
+"Explanation: Uninstall or do not install any Debian-originated package versions\n"
+"Explanation: other than those in the distribution codenamed with &debian-testing-codename; or sid\n"
+"Package: *\n"
+"Pin: release n=&debian-testing-codename;\n"
+"Pin-Priority: 900\n"
+"\n"
+"Explanation: Debian unstable is always codenamed with sid\n"
+"Package: *\n"
+"Pin: release n=sid\n"
+"Pin-Priority: 800\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+msgstr ""
+"<programlisting>\n"
+"Explanation: Desinstala ou não instala nenhuma versão de pacote originada\n"
+"Explanation: do Debian a não ser aquelas na distribuição stable\n"
+"Package: *\n"
+"Pin: release a=stable\n"
+"Pin-Priority: 900\n"
+"\n"
+"Package: *\n"
+"Pin: release o=Debian\n"
+"Pin-Priority: -10\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+msgid ""
+"The following APT preferences file will cause APT to assign a priority "
+"higher than the default (500) to all package versions belonging to a "
+"specified codename of a distribution and a prohibitively low priority to "
+"package versions belonging to other <literal>Debian</literal> distributions, "
+"codenames and archives. Note that with this APT preference APT will follow "
+"the migration of a release from the archive <literal>testing</literal> to "
+"<literal>stable</literal> and later <literal>oldstable</literal>. If you "
+"want to follow for example the progress in <literal>testing</literal> "
+"notwithstanding the codename changes you should use the example "
+"configurations above. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"With a suitable &sources-list; file and the above preferences file, any of "
+"the following commands will cause APT to upgrade to the latest version(s) in "
+"the release codenamed with <literal>&debian-testing-codename;</literal>. "
+"<placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"Com um arquivo &sources-list; apropriado e o arquivo de preferências acima, "
+"quaisquer um dos comandos a seguir farão com que o APT atualize para a(s) "
+"ulítma(s) versão(ôes) <literal>stable</literal>."
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt_preferences.5.xml
+#, no-wrap
+msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgstr "apt-get install <replaceable>pacote</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt_preferences.5.xml
+#, fuzzy
+msgid ""
+"The following command will cause APT to upgrade the specified package to the "
+"latest version from the <literal>sid</literal> distribution. Thereafter, "
+"<command>apt-get upgrade</command> will upgrade the package to the most "
+"recent <literal>&debian-testing-codename;</literal> version if that is more "
+"recent than the installed version, otherwise, to the most recent "
+"<literal>sid</literal> version if that is more recent than the installed "
+"version. <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+"O comando a seguir fará com que o APT atualize o pacote especificado para a "
+"última versão da distribuição <literal>unstable</literal>. Assim, o comando "
+"<command>apt-get upgrade</command> irá atualizar o pacote para a versão "
+"<literal>testing</literal> mais recente caso essa versão seja mais recente "
+"que a versão instalada, caso não seja, o pacote será atualizado para a "
+"versão <literal>unstable</literal> mais recente caso a mesma seja mais "
+"recente que a versão instalada."
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_preferences.5.xml
+msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: sources.list.5.xml
+msgid "List of configured APT data sources"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The source list <filename>/etc/apt/sources.list</filename> and the files "
+"contained in <filename>/etc/apt/sources.list.d/</filename> are designed to "
+"support any number of active sources and a variety of source media. The "
+"files list one source per line (one-line style) or contain multiline stanzas "
+"defining one or more sources per stanza (deb822 style), with the most "
+"preferred source listed first (in case a single version is available from "
+"more than one source). The information available from the configured sources "
+"is acquired by <command>apt-get update</command> (or by an equivalent "
+"command from another APT front-end)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "sources.list.d"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <filename>/etc/apt/sources.list.d</filename> directory provides a way to "
+"add sources.list entries in separate files. Two different file formats are "
+"allowed as described in the next two sections. Filenames need to have "
+"either the extension <filename>.list</filename> or <filename>.sources</"
+"filename> depending on the contained format. The filenames may only contain "
+"letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period "
+"(.) characters. Otherwise APT will print a notice that it has ignored a "
+"file, unless that file matches a pattern in the <literal>Dir::Ignore-Files-"
+"Silently</literal> configuration list - in which case it will be silently "
+"ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "One-Line-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.list</filename>. Each "
+"line specifying a source starts with a type (e.g. <literal>deb-src</"
+"literal>) followed by options and arguments for this type. Individual "
+"entries cannot be continued onto a following line. Empty lines are ignored, "
+"and a <literal>#</literal> character anywhere on a line marks the remainder "
+"of that line as a comment. Consequently an entry can be disabled by "
+"commenting out the entire line. If options should be provided they are "
+"separated by spaces and all of them together are enclosed by square brackets "
+"(<literal>[]</literal>) included in the line after the type separated from "
+"it with a space. If an option allows multiple values these are separated "
+"from each other with a comma (<literal>,</literal>). An option name is "
+"separated from its value(s) by an equals sign (<literal>=</literal>). "
+"Multivalue options also have <literal>-=</literal> and <literal>+=</literal> "
+"as separators, which instead of replacing the default with the given "
+"value(s) modify the default value(s) to remove or include the given values."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is the traditional format and supported by all apt versions. Note that "
+"not all options as described below are supported by all apt versions. Note "
+"also that some older applications parsing this format on their own might not "
+"expect to encounter options as they were uncommon before the introduction of "
+"multi-architecture support."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "deb822-Style Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Files in this format have the extension <filename>.sources</filename>. The "
+"format is similar in syntax to other files used by Debian and its "
+"derivatives, such as the metadata files that apt will download from the "
+"configured sources or the <filename>debian/control</filename> file in a "
+"Debian source package. Individual entries are separated by an empty line; "
+"additional empty lines are ignored, and a <literal>#</literal> character at "
+"the start of the line marks the entire line as a comment. An entry can hence "
+"be disabled by commenting out each line belonging to the stanza, but it is "
+"usually easier to add the field \"Enabled: no\" to the stanza to disable the "
+"entry. Removing the field or setting it to yes re-enables it. Options have "
+"the same syntax as every other field: A fieldname separated by a colon "
+"(<literal>:</literal>) and optionally spaces from its value(s). Note "
+"especially that multiple values are separated by whitespaces (like spaces, "
+"tabs and newlines), not by commas as in the one-line format. Multivalue "
+"fields like <literal>Architectures</literal> also have "
+"<literal>Architectures-Add</literal> and <literal>Architectures-Remove</"
+"literal> to modify the default value rather than replacing it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"This is a new format supported by apt itself since version 1.1. Previous "
+"versions ignore such files with a notice message as described earlier. It "
+"is intended to make this format gradually the default format, deprecating "
+"the previously described one-line-style format, as it is easier to create, "
+"extend and modify for humans and machines alike especially if a lot of "
+"sources and/or options are involved. Developers who are working with and/or "
+"parsing apt sources are highly encouraged to add support for this format and "
+"to contact the APT team to coordinate and share this work. Users can freely "
+"adopt this format already, but may encounter problems with software not "
+"supporting the format yet."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src Types: General Format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The <literal>deb</literal> type references a typical two-level Debian "
+"archive, <filename>distribution/component</filename>. The "
+"<literal>distribution</literal> is generally a suite name like "
+"<literal>stable</literal> or <literal>testing</literal> or a codename like "
+"<literal>&debian-stable-codename;</literal> or <literal>&debian-testing-"
+"codename;</literal> while component is one of <literal>main</literal>, "
+"<literal>contrib</literal> or <literal>non-free</literal>. The <literal>deb-"
+"src</literal> type references a Debian distribution's source code in the "
+"same form as the <literal>deb</literal> type. A <literal>deb-src</literal> "
+"line is required to fetch source indexes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The format for two one-line-style entries using the <literal>deb</literal> "
+"and <literal>deb-src</literal> types is:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]\n"
+"deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+" Types: deb deb-src\n"
+" URIs: uri\n"
+" Suites: suite\n"
+" Components: [component1] [component2] [...]\n"
+" option1: value1\n"
+" option2: value2\n"
+" "
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Alternatively the equivalent entry in deb822 style looks like this: "
+"<placeholder type=\"literallayout\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The URI for the <literal>deb</literal> type must specify the base of the "
+"Debian distribution, from which APT will find the information it needs. "
+"<literal>suite</literal> can specify an exact path, in which case the "
+"components must be omitted and <literal>suite</literal> must end with a "
+"slash (<literal>/</literal>). This is useful for the case when only a "
+"particular sub-directory of the archive denoted by the URI is of interest. "
+"If <literal>suite</literal> does not specify an exact path, at least one "
+"<literal>component</literal> must be present."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"<literal>suite</literal> may also contain a variable, <literal>$(ARCH)</"
+"literal> which expands to the Debian architecture (such as <literal>amd64</"
+"literal> or <literal>armel</literal>) used on the system. This permits "
+"architecture-independent <filename>sources.list</filename> files to be used. "
+"In general this is only of interest when specifying an exact path; "
+"<literal>APT</literal> will automatically generate a URI with the current "
+"architecture otherwise."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Especially in the one-line-style format since only one distribution can be "
+"specified per line it may be necessary to have multiple lines for the same "
+"URI, if a subset of all available distributions or components at that "
+"location is desired. APT will sort the URI list after it has generated a "
+"complete set internally, and will collapse multiple references to the same "
+"Internet host, for instance, into a single connection, so that it does not "
+"inefficiently establish a connection, close it, do something else, and then "
+"re-establish a connection to that same host. APT also parallelizes "
+"connections to different hosts to more effectively deal with sites with low "
+"bandwidth."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"It is important to list sources in order of preference, with the most "
+"preferred source listed first. Typically this will result in sorting by "
+"speed from fastest to slowest (CD-ROM followed by hosts on a local network, "
+"followed by distant Internet hosts, for example)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-list-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "&sourceslist-sources-format;"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"As an example, the sources for your distribution could look like this in one-"
+"line-style format: <placeholder type=\"literallayout\" id=\"0\"/> or like "
+"this in deb822 style format: <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "The deb and deb-src types: Options"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Each source entry can have options specified to modify which source is "
+"accessed and how data is acquired from it. Format, syntax and names of the "
+"options vary between the one-line-style and deb822-style formats as "
+"described, but they both have the same options available. For simplicity we "
+"list the deb822 fieldname and provide the one-line name in brackets. "
+"Remember that besides setting multivalue options explicitly, there is also "
+"the option to modify them based on the default, but we aren't listing those "
+"names explicitly here. Unsupported options are silently ignored by all APT "
+"versions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Architectures</option> (<option>arch</option>) is a multivalue "
+"option defining for which architectures information should be downloaded. If "
+"this option isn't set the default is all architectures as defined by the "
+"<option>APT::Architectures</option> config option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Languages</option> (<option>lang</option>) is a multivalue option "
+"defining for which languages information such as translated package "
+"descriptions should be downloaded. If this option isn't set the default is "
+"all languages as defined by the <option>Acquire::Languages</option> config "
+"option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Targets</option> (<option>target</option>) is a multivalue option "
+"defining which download targets apt will try to acquire from this source. If "
+"not specified, the default set is defined by the <option>Acquire::"
+"IndexTargets</option> configuration scope (targets are specified by their "
+"name in the <literal>Created-By</literal> field). Additionally, targets can "
+"be enabled or disabled by using the <literal>Identifier</literal> field as "
+"an option with a boolean value instead of using this multivalue option."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>PDiffs</option> (<option>pdiffs</option>) is a yes/no value which "
+"controls if APT should try to use PDiffs to update old indexes instead of "
+"downloading the new indexes entirely. The value of this option is ignored if "
+"the repository doesn't announce the availability of PDiffs. Defaults to the "
+"value of the option with the same name for a specific index file defined in "
+"the <option>Acquire::IndexTargets</option> scope, which itself defaults to "
+"the value of configuration option <option>Acquire::PDiffs</option> which "
+"defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>By-Hash</option> (<option>by-hash</option>) can have the value "
+"<literal>yes</literal>, <literal>no</literal> or <literal>force</literal> "
+"and controls if APT should try to acquire indexes via a URI constructed from "
+"a hashsum of the expected file instead of using the well-known stable "
+"filename of the index. Using this can avoid hashsum mismatches, but requires "
+"a supporting mirror. A <literal>yes</literal> or <literal>no</literal> value "
+"activates/disables the use of this feature if this source indicates support "
+"for it, while <literal>force</literal> will enable the feature regardless of "
+"what the source indicates. Defaults to the value of the option of the same "
+"name for a specific index file defined in the <option>Acquire::IndexTargets</"
+"option> scope, which itself defaults to the value of configuration option "
+"<option>Acquire::By-Hash</option> which defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Furthermore, there are options which if set affect <emphasis>all</emphasis> "
+"sources with the same URI and Suite, so they have to be set on all such "
+"entries and can not be varied between different components. APT will try to "
+"detect and error out on such anomalies."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Allow-Insecure</option> (<option>allow-insecure</option>), "
+"<option>Allow-Weak</option> (<option>allow-weak</option>) and <option>Allow-"
+"Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</"
+"option>) are boolean values which all default to <literal>no</literal>. If "
+"set to <literal>yes</literal> they circumvent parts of &apt-secure; and "
+"should therefore not be used lightly!"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Trusted</option> (<option>trusted</option>) is a tri-state value "
+"which defaults to APT deciding if a source is considered trusted or if "
+"warnings should be raised before e.g. packages are installed from this "
+"source. This option can be used to override that decision. The value "
+"<literal>yes</literal> tells APT always to consider this source as trusted, "
+"even if it doesn't pass authentication checks. It disables parts of &apt-"
+"secure;, and should therefore only be used in a local and trusted context "
+"(if at all) as otherwise security is breached. The value <literal>no</"
+"literal> does the opposite, causing the source to be handled as untrusted "
+"even if the authentication checks passed successfully. The default value "
+"can't be set explicitly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Signed-By</option> (<option>signed-by</option>) is an option to "
+"require a repository to pass &apt-secure; verification with a certain set of "
+"keys rather than all trusted keys apt has configured. It is specified as a "
+"list of absolute paths to keyring files (have to be accessible and readable "
+"for the <literal>_apt</literal> system user, so ensure everyone has read-"
+"permissions on the file) and fingerprints of keys to select from these "
+"keyrings. If no keyring files are specified the default is the "
+"<filename>trusted.gpg</filename> keyring and all keyrings in the "
+"<filename>trusted.gpg.d/</filename> directory (see <command>apt-key "
+"fingerprint</command>). If no fingerprint is specified all keys in the "
+"keyrings are selected. A fingerprint will accept also all signatures by a "
+"subkey of this key, if this isn't desired an exclamation mark (<literal>!</"
+"literal>) can be appended to the fingerprint to disable this behaviour. The "
+"option defaults to the value of the option with the same name if set in the "
+"previously acquired <filename>Release</filename> file of this repository "
+"(only fingerprints can be specified there through). Otherwise all keys in "
+"the trusted keyrings are considered valid signers for this repository."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Valid-Until</option> (<option>check-valid-until</option>) is "
+"a yes/no value which controls if APT should try to detect replay attacks. A "
+"repository creator can declare a time until which the data provided in the "
+"repository should be considered valid, and if this time is reached, but no "
+"new data is provided, the data is considered expired and an error is "
+"raised. Besides increasing security, as a malicious attacker can't send old "
+"data forever to prevent a user from upgrading to a new version, this also "
+"helps users identify mirrors which are no longer updated. However, some "
+"repositories such as historic archives are not updated any more by design, "
+"so this check can be disabled by setting this option to <literal>no</"
+"literal>. Defaults to the value of configuration option <option>Acquire::"
+"Check-Valid-Until</option> which itself defaults to <literal>yes</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Valid-Until-Min</option> (<option>valid-until-min</option>) and "
+"<option>Valid-Until-Max</option> (<option>valid-until-max</option>) can be "
+"used to raise or lower the time period in seconds in which the data from "
+"this repository is considered valid. -Max can be especially useful if the "
+"repository provides no Valid-Until field on its Release file to set your own "
+"value, while -Min can be used to increase the valid time on seldom updated "
+"(local) mirrors of a more frequently updated but less accessible archive "
+"(which is in the sources.list as well) instead of disabling the check "
+"entirely. Default to the value of the configuration options "
+"<option>Acquire::Min-ValidTime</option> and <option>Acquire::Max-ValidTime</"
+"option> which are both unset by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Check-Date</option> (<option>check-date</option>) is a yes/no value "
+"which controls if APT should consider the machine's time correct and hence "
+"perform time related checks, such as verifying that a Release file is not "
+"from the future. Disabling it also disables the <option>Check-Valid-Until</"
+"option> option mentioned above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>Date-Max-Future</option> (<option>date-max-future</option>) controls "
+"how far from the future a repository may be. Default to the value of the "
+"configuration option <option>Acquire::Max-FutureTime</option> which is 10 "
+"seconds by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"<option>InRelease-Path</option> (<option>inrelease-path</option>) "
+"determines the path to the InRelease file, relative to the normal position "
+"of an <filename>InRelease</filename> file. By default, this option is unset "
+"and APT will try to fetch an <filename>InRelease</filename> or, if that "
+"fails, a <filename>Release</filename> file and its associated "
+"<filename>Release.gpg</filename> file. By setting this option, the specified "
+"path will be tried instead of the InRelease file, and the fallback to "
+"<filename>Release</filename> files will be disabled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: sources.list.5.xml
+msgid "URI Specification"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "The currently recognized URI types are:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-http;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The http scheme specifies an HTTP server for an archive and is the most "
+"commonly used method. The URI can directly include login information if the "
+"archive requires it, but the use of &apt-authconf; should be preferred. The "
+"method also supports SOCKS5 and HTTP(S) proxies either configured via apt-"
+"specific configuration or specified by the environment variable "
+"<envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring "
+"authentication) <replaceable>http://user:pass@server:port/</replaceable>. "
+"The authentication details for proxies can also be supplied via &apt-"
+"authconf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Note that these forms of authentication are insecure as the whole "
+"communication with the remote server (or proxy) is not encrypted so a "
+"sufficiently capable attacker can observe and record login as well as all "
+"other interactions. The attacker can <emphasis>not</emphasis> modify the "
+"communication through as APTs data security model is independent of the "
+"chosen transport method. See &apt-secure; for details."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-https;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The https scheme specifies an HTTPS server for an archive and is very "
+"similar in use and available options to the http scheme. The main difference "
+"is that the communication between apt and server (or proxy) is encrypted. "
+"Note that the encryption does not prevent an attacker from knowing which "
+"server (or proxy) apt is communicating with and deeper analysis can "
+"potentially still reveal which data was downloaded. If this is a concern the "
+"Tor-based schemes mentioned further below might be a suitable alternative."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable>
+#: sources.list.5.xml
+msgid "scheme"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "(&apt-transport-mirror;)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The mirror scheme specifies the location of a mirrorlist. By default the "
+"scheme used for the location is <literal>http</literal>, but any other "
+"scheme can be used via <command>mirror+<replaceable>scheme</replaceable></"
+"command>. The mirrorlist itself can contain many different URIs for mirrors "
+"the APT client can transparently pick, choose and fallback between intended "
+"to help both with distributing the load over the available mirrors and "
+"ensuring that clients can acquire data even if some configured mirrors are "
+"not available."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The file scheme allows an arbitrary directory in the file system to be "
+"considered an archive. This is useful for NFS mounts and local mirrors or "
+"archives."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with "
+"media swapping. Use the &apt-cdrom; program to create cdrom entries in the "
+"source list."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The ftp scheme specifies an FTP server for an archive. Use of FTP is on the "
+"decline in favour of <literal>http</literal> and <literal>https</literal> "
+"and many archives either never offered or are retiring FTP access. If you "
+"still need this method many configuration options for it are available in "
+"the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"Please note that an FTP proxy can be specified by using the "
+"<envar>ftp_proxy</envar> environment variable. It is possible to specify an "
+"HTTP proxy (HTTP proxy servers often understand FTP URLs) using this "
+"environment variable and <emphasis>only</emphasis> this environment "
+"variable. Proxies using HTTP specified in the configuration file will be "
+"ignored."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The copy scheme is identical to the file scheme except that packages are "
+"copied into the cache directory instead of used directly at their location. "
+"This is useful for people using removable media to copy files around with "
+"APT."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"The rsh/ssh method invokes RSH/SSH to connect to a remote host and access "
+"the files as a given user. Prior configuration of rhosts or RSA keys is "
+"recommended. The standard <command>find</command> and <command>dd</command> "
+"commands are used to perform the file transfers from the remote host."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term>
+#: sources.list.5.xml
+msgid "adding more recognizable URI types"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: sources.list.5.xml
+msgid ""
+"APT can be extended with more methods shipped in other optional packages, "
+"which should follow the naming scheme <package>apt-transport-"
+"<replaceable>method</replaceable></package>. For instance, the APT team "
+"also maintains the package <package>apt-transport-tor</package>, which "
+"provides access methods for HTTP and HTTPS URIs routed via the Tor network."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses the archive stored locally (or NFS mounted) at /home/apt/debian for "
+"stable/main, stable/contrib, and stable/non-free."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian stable main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: stable\n"
+"Components: main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "As above, except this uses the unstable (development) distribution."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb file:/home/apt/debian unstable main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "Sources specification for the above."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb-src file:/home/apt/debian unstable main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb-src\n"
+"URIs: file:/home/apt/debian\n"
+"Suites: unstable\n"
+"Components: main contrib non-free"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"The first line gets package information for the architectures in "
+"<literal>APT::Architectures</literal> while the second always retrieves "
+"<literal>amd64</literal> and <literal>armel</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian &debian-stable-codename; main\n"
+"deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"\n"
+"Types: deb\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: main\n"
+"Architectures: amd64 armel\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at archive.debian.org, and uses only the "
+"hamm/main area."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://archive.debian.org/debian-archive hamm main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://archive.debian.org/debian-archive\n"
+"Suites: hamm\n"
+"Components: main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the &debian-stable-codename;/contrib area."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: &debian-stable-codename;\n"
+"Components: contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses FTP to access the archive at ftp.debian.org, under the debian "
+"directory, and uses only the unstable/contrib area. If this line appears as "
+"well as the one in the previous example in <filename>sources.list</filename> "
+"a single FTP session will be used for both resource lines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb ftp://ftp.debian.org/debian unstable contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: ftp://ftp.debian.org/debian\n"
+"Suites: unstable\n"
+"Components: contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid "deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb\n"
+"URIs: http://ftp.tlh.debian.org/universe\n"
+"Suites: unstable/binary-$(ARCH)/"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to access the archive at ftp.tlh.debian.org, under the universe "
+"directory, and uses only files found under <filename>unstable/binary-i386</"
+"filename> on i386 machines, <filename>unstable/binary-amd64</filename> on "
+"amd64, and so forth for other supported architectures. [Note this example "
+"only illustrates how to use the substitution variable; official debian "
+"archives are not structured like this] <placeholder type=\"literallayout\" "
+"id=\"0\"/> <placeholder type=\"literallayout\" id=\"1\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid ""
+"Uses HTTP to get binary packages as well as sources from the stable, testing "
+"and unstable suites and the components main and contrib."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"deb http://deb.debian.org/debian stable main contrib\n"
+"deb-src http://deb.debian.org/debian stable main contrib\n"
+"deb http://deb.debian.org/debian testing main contrib\n"
+"deb-src http://deb.debian.org/debian testing main contrib\n"
+"deb http://deb.debian.org/debian unstable main contrib\n"
+"deb-src http://deb.debian.org/debian unstable main contrib"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: sources.list.5.xml
+#, no-wrap
+msgid ""
+"Types: deb deb-src\n"
+"URIs: http://deb.debian.org/debian\n"
+"Suites: stable testing unstable\n"
+"Components: main contrib\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: sources.list.5.xml
+msgid "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+msgstr "&apt-get;, &apt-conf;, &apt-acquire-additional-files;"
+
+#. type: Content of: <refentry><refmeta><manvolnum>
+#: apt-extracttemplates.1.xml apt-sortpkgs.1.xml apt-ftparchive.1.xml
+#: apt-transport-http.1.xml apt-transport-https.1.xml
+#: apt-transport-mirror.1.xml
+msgid "1"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Utility to extract <command>debconf</command> config and templates from "
+"Debian packages"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> will take one or more Debian package "
+"files as input and write out (to a temporary directory) all associated "
+"config scripts and template files. For each passed in package that contains "
+"config scripts and templates, one line of output will be generated in the "
+"format:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid "package version template-file config-script"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"template-file and config-script are written to the temporary directory "
+"specified by the <option>-t</option> or <option>--tempdir</option> "
+"(<literal>APT::ExtractTemplates::TempDir</literal>) directory, with "
+"filenames of the form <filename>package.template.XXXXXX</filename> and "
+"<filename>package.config.XXXXXX</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"Temporary directory in which to write extracted <command>debconf</command> "
+"template files and config scripts. Configuration Item: <literal>APT::"
+"ExtractTemplates::TempDir</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-extracttemplates.1.xml
+msgid ""
+"<command>apt-extracttemplates</command> returns zero on normal operation, "
+"decimal 100 on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-sortpkgs.1.xml
+msgid "Utility to sort package index files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> will take an index file (source index or "
+"package index) and sort the records so that they are ordered by the package "
+"name. It will also sort the internal fields of each record according to the "
+"internal sorting rules."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"All output is sent to standard output; the input must be a seekable file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"Use source index field ordering. Configuration Item: <literal>APT::"
+"SortPkgs::Source</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-sortpkgs.1.xml
+msgid ""
+"<command>apt-sortpkgs</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-ftparchive.1.xml
+msgid "Utility to generate index files"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is the command line tool that generates "
+"the index files that APT uses to access a distribution source. The index "
+"files should be generated on the origin site based on the content of that "
+"site."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> is a superset of the &dpkg-scanpackages; "
+"program, incorporating its entire functionality via the <literal>packages</"
+"literal> command. It also contains a contents file generator, "
+"<literal>contents</literal>, and an elaborate means to 'script' the "
+"generation process for a complete archive."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Internally <command>apt-ftparchive</command> can make use of binary "
+"databases to cache the contents of a .deb file and it does not rely on any "
+"external programs aside from &gzip;. When doing a full generate it "
+"automatically performs file-change checks and builds the desired compressed "
+"output files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The packages command generates a package file from a directory tree. It "
+"takes the given directory and recursively searches it for .deb files, "
+"emitting a package record to stdout for each. This command is approximately "
+"equivalent to &dpkg-scanpackages;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The option <option>--db</option> can be used to specify a binary caching DB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>sources</literal> command generates a source index file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .dsc files, emitting a source record to stdout for each. This command is "
+"approximately equivalent to &dpkg-scansources;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"If an override file is specified then a source override file will be looked "
+"for with an extension of .src. The --source-override option can be used to "
+"change the source override file that will be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>contents</literal> command generates a contents file from a "
+"directory tree. It takes the given directory and recursively searches it "
+"for .deb files, and reads the file list from each file. It then sorts and "
+"writes to stdout the list of files matched to packages. Directories are not "
+"written to the output. If multiple packages own the same file then each "
+"package is separated by a comma in the output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>release</literal> command generates a Release file from a "
+"directory tree. It recursively searches the given directory for uncompressed "
+"and compressed <filename>Packages</filename>, <filename>Sources</filename>, "
+"<filename>Contents</filename>, <filename>Components</filename> and "
+"<filename>icons</filename> files as well as <filename>Release</filename>, "
+"<filename>Index</filename> and <filename>md5sum.txt</filename> files by "
+"default (<literal>APT::FTPArchive::Release::Default-Patterns</literal>). "
+"Additional filename patterns can be added by listing them in <literal>APT::"
+"FTPArchive::Release::Patterns</literal>. It then writes to stdout a "
+"<filename>Release</filename> file containing (by default) an MD5, SHA1, "
+"SHA256 and SHA512 digest for each file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Values for the additional metadata fields in the Release file are taken from "
+"the corresponding variables under <literal>APT::FTPArchive::Release</"
+"literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The "
+"supported fields are <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, "
+"<literal>ButAutomaticUpgrades</literal>, <literal>Acquire-By-Hash</literal>, "
+"<literal>Valid-Until</literal>, <literal>Signed-By</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal> and "
+"<literal>Description</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command is designed to be runnable from a "
+"cron script and builds indexes according to the given config file. The "
+"config language provides a flexible means of specifying which index files "
+"are built from which directories, as well as providing a simple means of "
+"maintaining the required settings."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>clean</literal> command tidies the databases used by the given "
+"configuration file by removing any records that are no longer necessary."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Generate Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>generate</literal> command uses a configuration file to "
+"describe the archives that are going to be generated. It follows the typical "
+"ISC configuration format as seen in ISC tools like bind 8 and dhcpd. &apt-"
+"conf; contains a description of the syntax. Note that the generate "
+"configuration is parsed in sectional manner, but &apt-conf; is parsed in a "
+"tree manner. This only effects how the scope tag is handled."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The generate configuration has four separate sections, each described below."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "<literal>Dir</literal> Section"
+msgstr "a linha <literal>Origin:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Dir</literal> section defines the standard directories needed "
+"to locate the files required during the generation process. These "
+"directories are prepended certain relative paths defined in later sections "
+"to produce a complete an absolute path."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the root of the FTP archive, in a standard Debian configuration "
+"this is the directory that contains the <filename>ls-LR</filename> and dist "
+"nodes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the override files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the location of the cache files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the location of the file list files, if the <literal>FileList</"
+"literal> setting is used below."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "<literal>Default</literal> Section"
+msgstr "a linha <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Default</literal> section specifies default values, and "
+"settings that control the operation of the generator. Other sections may "
+"override these defaults with a per-section setting."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default compression schemes to use for the package index files. It "
+"is a string that contains a space separated list of at least one of the "
+"compressors configured via the <option>APT::Compressor</option> "
+"configuration scope. The default for all compression schemes is '. gzip'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are package files. This "
+"defaults to '.deb'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Sources files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the default list of file extensions that are source files. This "
+"defaults to '.dsc'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Contents files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is similar to <literal>Packages::Compress</literal> except that it "
+"controls the compression for the Translation-en master file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the number of kilobytes to delink (and replace with hard links) "
+"per run. This is used in conjunction with the per-section <literal>External-"
+"Links</literal> setting."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies the mode of all created index files. It defaults to 0644. All "
+"index files are set to this mode with no regard to the umask."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies whether long descriptions should be included in the "
+"<filename>Packages</filename> file or split out into a master "
+"<filename>Translation-en</filename> file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "<literal>TreeDefault</literal> Section"
+msgstr "a linha <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets defaults specific to <literal>Tree</literal> sections. All of these "
+"variables are substitution variables and have the strings $(DIST), "
+"$(SECTION) and $(ARCH) replaced with their respective values."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the number of kilobytes of contents files that are generated each day. "
+"The contents files are round-robined so that over several days they will all "
+"be rebuilt."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Controls the number of days a contents file is allowed to be checked without "
+"changing. If this limit is passed the mtime of the contents file is updated. "
+"This case can occur if the package file is changed in such a way that does "
+"not result in a new contents file [override edit for instance]. A hold off "
+"is allowed in hopes that new .debs will be installed, requiring a new file "
+"anyhow. The default is 10, the units are in days."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the .deb directory tree. Defaults to <filename>$(DIST)/"
+"$(SECTION)/binary-$(ARCH)/</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the top of the source package directory tree. Defaults to <filename>"
+"$(DIST)/$(SECTION)/source/</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Packages file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"binary-$(ARCH)/Packages</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Sources file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"source/Sources</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Translation-en master file with the long descriptions if "
+"they should be not included in the Packages file. Defaults to <filename>"
+"$(DIST)/$(SECTION)/i18n/Translation-en</filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the path prefix that causes a symlink to be considered an internal link "
+"instead of an external link. Defaults to <filename>$(DIST)/$(SECTION)/</"
+"filename>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the output Contents file. Defaults to <filename>$(DIST)/$(SECTION)/"
+"Contents-$(ARCH)</filename>. If this setting causes multiple Packages files "
+"to map onto a single Contents file (as is the default) then <command>apt-"
+"ftparchive</command> will integrate those package files together "
+"automatically."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets header file to prepend to the contents output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary cache database to use for this section. Multiple sections "
+"can share the same database."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Specifies that instead of walking the directory tree, <command>apt-"
+"ftparchive</command> should read the list of files from the given file. "
+"Relative files names are prefixed with the archive directory. This is used "
+"when processing source indexes."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "<literal>Tree</literal> Section"
+msgstr "a linha <literal>Label:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section defines a standard Debian file tree "
+"which consists of a base directory, then multiple sections in that base "
+"directory and finally multiple Architectures in each section. The exact "
+"pathing used is defined by the <literal>Directory</literal> substitution "
+"variable."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>Tree</literal> section takes a scope tag which sets the "
+"<literal>$(DIST)</literal> variable and defines the root of the tree (the "
+"path is prefixed by <literal>ArchiveDir</literal>). Typically this is a "
+"setting such as <filename>dists/&debian-stable-codename;</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"All of the settings defined in the <literal>TreeDefault</literal> section "
+"can be used in a <literal>Tree</literal> section as well as three new "
+"variables."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid ""
+"for i in Sections do \n"
+" for j in Architectures do\n"
+" Generate for DIST=scope SECTION=i ARCH=j\n"
+" "
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"When processing a <literal>Tree</literal> section <command>apt-ftparchive</"
+"command> performs an operation similar to: <placeholder type=\"programlisting"
+"\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of sections which appear under the "
+"distribution; typically this is something like <literal>main contrib non-"
+"free</literal>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This is a space separated list of all the architectures that appear under "
+"search section. The special architecture 'source' is used to indicate that "
+"this tree has a source archive. The architecture 'all' signals that "
+"architecture specific files like <filename>Packages</filename> should not "
+"include information about architecture <literal>all</literal> packages in "
+"all files as they will be available in a dedicated file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the binary override file. The override file contains section, priority "
+"and maintainer address information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the source override file. The override file contains section "
+"information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary extra override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source extra override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-ftparchive.1.xml
+#, fuzzy
+msgid "<literal>BinDirectory</literal> Section"
+msgstr "a linha <literal>Component:</literal>"
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The <literal>bindirectory</literal> section defines a binary directory tree "
+"with no special structure. The scope tag specifies the location of the "
+"binary directory and the settings are similar to the <literal>Tree</literal> "
+"section with no substitution variables or <literal>Section</"
+"literal><literal>Architecture</literal> settings."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Packages file output."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Sets the Sources file output. At least one of <literal>Packages</literal> or "
+"<literal>Sources</literal> is required."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the Contents file output (optional)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the binary override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the source override file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Sets the cache DB."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Appends a path to all the output paths."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid "Specifies the file list file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Binary Override File"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The binary override file is fully compatible with &dpkg-scanpackages;. It "
+"contains four fields separated by spaces. The first field is the package "
+"name, the second is the priority to force that package to, the third is the "
+"section to force that package to and the final field is the maintainer "
+"permutation field."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "old [// oldn]* => new"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "new"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The general form of the maintainer field is: <placeholder type="
+"\"literallayout\" id=\"0\"/> or simply, <placeholder type=\"literallayout\" "
+"id=\"1\"/> The first form allows a double-slash separated list of old email "
+"addresses to be specified. If any of those are found then new is substituted "
+"for the maintainer field. The second form unconditionally substitutes the "
+"maintainer field."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Source Override File"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The source override file is fully compatible with &dpkg-scansources;. It "
+"contains two fields separated by spaces. The first field is the source "
+"package name, the second is the section to assign it."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt-ftparchive.1.xml
+msgid "The Extra Override File"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"The extra override file allows any arbitrary tag to be added or replaced in "
+"the output. It has three columns, the first is the package, the second is "
+"the tag and the remainder of the line is the new value."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Generate the given checksum. These options default to on, when turned off "
+"the generated index files will not have the checksum fields where possible. "
+"Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
+"replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
+"replaceable>::<replaceable>Checksum</replaceable></literal> where "
+"<literal><replaceable>Index</replaceable></literal> can be "
+"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
+"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
+"<literal>MD5</literal>, <literal>SHA1</literal>, <literal>SHA256</literal> "
+"or <literal>SHA512</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Use a binary caching DB. This has no effect on the generate command. "
+"Configuration Item: <literal>APT::FTPArchive::DB</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Quiet; produces output suitable for logging, omitting progress indicators. "
+"More q's will produce more quiet up to a maximum of 2. You can also use "
+"<option>-q=#</option> to set the quiet level, overriding the configuration "
+"file. Configuration Item: <literal>quiet</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform Delinking. If the <literal>External-Links</literal> setting is used "
+"then this option actually enables delinking of the files. It defaults to on "
+"and can be turned off with <option>--no-delink</option>. Configuration "
+"Item: <literal>APT::FTPArchive::DeLinkAct</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Perform contents generation. When this option is set and package indexes are "
+"being generated with a cache DB then the file listing will also be extracted "
+"and stored in the DB for later use. When using the generate command this "
+"option also allows the creation of any Contents files. The default is on. "
+"Configuration Item: <literal>APT::FTPArchive::Contents</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Select the source override file to use with the <literal>sources</literal> "
+"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Make the caching databases read only. Configuration Item: <literal>APT::"
+"FTPArchive::ReadOnlyDB</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"Accept in the <literal>packages</literal> and <literal>contents</literal> "
+"commands only package files matching <literal>*_arch.deb</literal> or "
+"<literal>*_all.deb</literal> instead of all package files in the given "
+"path. Configuration Item: <literal>APT::FTPArchive::Architecture</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
+"packages are recompiled and/or republished with the same version again, this "
+"will lead to problems as the now outdated cached metadata like size and "
+"checksums will be used. With this option enabled this will no longer happen "
+"as it will be checked if the file was changed. Note that this option is set "
+"to \"<literal>false</literal>\" by default as it is not recommend to upload "
+"multiply versions/builds of a package with the same versionnumber, so in "
+"theory nobody will have these problems and therefore all these extra checks "
+"are useless."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"This configuration option defaults to \"<literal>true</literal>\" and should "
+"only be set to <literal>\"false\"</literal> if the Archive generated with "
+"&apt-ftparchive; also provides <filename>Translation</filename> files. Note "
+"that the <filename>Translation-en</filename> master file can only be created "
+"in the generate command."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><programlisting>
+#: apt-ftparchive.1.xml
+#, no-wrap
+msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"To create a compressed Packages file for a directory containing binary "
+"packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-ftparchive.1.xml
+msgid ""
+"<command>apt-ftparchive</command> returns zero on normal operation, decimal "
+"100 on error."
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt_auth.conf.5.xml
+msgid "Login configuration file for APT sources and proxies"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"APT configuration files like &sources-list; or &apt-conf; need to be "
+"accessible for everyone using apt tools on the system to have access to all "
+"package-related information like the available packages in a repository. "
+"Login information needed to connect to a proxy or to download data from a "
+"repository on the other hand shouldn't always be accessible by everyone and "
+"can hence not be placed in a file with world-readable file permissions."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+msgid ""
+"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf "
+"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store "
+"login information in a netrc-like format with restrictive file permissions."
+msgstr ""
+"O arquivo de preferências do APT <filename>/etc/apt/preferences</filename> "
+"pode ser usado para controlar quais versões de pacotes serão selecionadas "
+"para instalação."
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "netrc-like format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"The format defined here is similar to the format of the <filename>~/.netrc</"
+"filename> file used by <citerefentry><refentrytitle><command>ftp</command></"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs "
+"interacting with servers. It is a simple token-based format with the "
+"following tokens being recognized; Unknown tokens will be ignored. Tokens "
+"may be separated by spaces, tabs or newlines."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+msgid ""
+"<literal>machine</literal> <replaceable>hostname</replaceable>[:"
+"<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Entries are looked up by searching for the <emphasis><literal>machine</"
+"literal></emphasis> token matching the hostname of the URI apt needs login "
+"information for. Extending the netrc-format a portnumber can be specified. "
+"If no port is given the token matches for all ports. Similar the path is "
+"optional and only needed and useful if multiple repositories with different "
+"login information reside on the same server. A machine token with a path "
+"matches if the path in the URI starts with the path given in the token. "
+"Once a match is made, the subsequent tokens are processed, stopping when the "
+"end of file is reached or another <emphasis><literal>machine</literal></"
+"emphasis> token is encountered."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>login</literal> <replaceable>name</replaceable>"
+msgstr "apt-get install <replaceable>pacote</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The username to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "apt-get install <replaceable>package</replaceable>/sid\n"
+msgid "<literal>password</literal> <replaceable>string</replaceable>"
+msgstr "apt-get install <replaceable>pacote</replaceable>/sid\n"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid "The password to be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "Examples"
+msgid "Example"
+msgstr "Exemplos"
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://example.org/debian &debian-stable-codename; main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org\n"
+"login apt\n"
+"password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid "machine example.org login apt password debian"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org/deb login apt password debian\n"
+"machine example.org/debian login apt password debian\n"
+"machine example.org/debian/ login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para><literallayout>
+#: apt_auth.conf.5.xml
+#, no-wrap
+msgid ""
+"machine example.org:80 login apt password debian\n"
+"machine example.org/deb/ login apt password debian\n"
+"machine example.org/ubuntu login apt password debian\n"
+"machine example.orga login apt password debian\n"
+"machine example.net login apt password debian\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Supplying login information for a user named <literal>apt</literal> with the "
+"password <literal>debian</literal> for the &sources-list; entry <placeholder "
+"type=\"literallayout\" id=\"0\"/> could be done in the entry directly: "
+"<placeholder type=\"literallayout\" id=\"1\"/> Alternatively an entry like "
+"the following in the auth.conf file could be used: <placeholder type="
+"\"literallayout\" id=\"2\"/> Or alternatively within a single line: "
+"<placeholder type=\"literallayout\" id=\"3\"/> If you need to be more "
+"specific all of these lines will also apply to the example entry: "
+"<placeholder type=\"literallayout\" id=\"4\"/> On the other hand neither of "
+"the following lines apply: <placeholder type=\"literallayout\" id=\"5\"/>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: apt_auth.conf.5.xml
+msgid "Notes"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Basic support for this feature is present since version 0.7.25, but was "
+"undocumented for years. The documentation was added in version 1.5 changing "
+"also the implementation slightly. For maximum backward compatibility you "
+"should avoid multiple <literal>machine</literal> tokens with the same "
+"hostname, but if you need multiple they should all have a path specified in "
+"the <literal>machine</literal> token."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+msgid "<filename>/etc/apt/auth.conf</filename>"
+msgstr "<filename>/etc/apt.conf</>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrc</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: apt_auth.conf.5.xml
+#, fuzzy
+msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>"
+msgstr "<filename>/etc/apt.conf</>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: apt_auth.conf.5.xml
+msgid ""
+"Login information for APT sources and proxies in a netrc-like format. "
+"Configuration Item: <literal>Dir::Etc::netrcparts</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt_auth.conf.5.xml
+#, fuzzy
+#| msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgid "&apt-conf; &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-http.1.xml
+msgid ""
+"APT transport for downloading via the Hypertext Transfer Protocol (HTTP)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the Hypertext "
+"Transfer Protocol (HTTP). It is available by default and probably the most "
+"used of all transports. Note that a transport is never called directly by a "
+"user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"HTTP is an unencrypted transport protocol meaning that the whole "
+"communication with the remote server (or proxy) can be observed by a "
+"sufficiently capable attacker commonly referred to as a \"man in the middle"
+"\" (MITM). However, such an attacker can <emphasis>not</emphasis> modify "
+"the communication to compromise the security of your system, as APT's data "
+"security model is independent of the chosen transport method. This is "
+"explained in detail in &apt-secure;. An overview of available transport "
+"methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Various options can be set in an &apt-conf; file to modify its behavior, "
+"ranging from proxy configuration to workarounds for specific server "
+"limitations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Proxy Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The environment variable <envar>http_proxy</envar> is supported for system "
+"wide configuration. Proxies specific to APT can be configured via the "
+"option <literal>Acquire::http::Proxy</literal>. Proxies which should be "
+"used only for certain hosts can be specified via <literal>Acquire::http::"
+"Proxy::<replaceable>host</replaceable></literal>. Even more finegrained "
+"control can be achieved via proxy autodetection, detailed further below. "
+"All these options use the URI format <literal><replaceable>scheme</"
+"replaceable>://[[<replaceable>user</replaceable>][:<replaceable>pass</"
+"replaceable>]@]<replaceable>host</replaceable>[:<replaceable>port</"
+"replaceable>]/</literal>. Supported URI schemes are <literal>socks5h</"
+"literal> (SOCKS5 with remote DNS resolution), <literal>http</literal> and "
+"<literal>https</literal>. Authentication details can be supplied via &apt-"
+"authconf; instead of including it in the URI directly."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The various APT configuration options support the special value "
+"<literal>DIRECT</literal> meaning that no proxy should be used. The "
+"environment variable <envar>no_proxy</envar> is also supported for the same "
+"purpose."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Furthermore, there are three settings provided for cache control with "
+"HTTP/1.1 compliant proxy caches: <literal>Acquire::http::No-Cache</literal> "
+"tells the proxy not to use its cached response under any circumstances. "
+"<literal>Acquire::http::Max-Age</literal> sets the allowed maximum age (in "
+"seconds) of an index file in the cache of the proxy. <literal>Acquire::"
+"http::No-Store</literal> specifies that the proxy should not store the "
+"requested archive files in its cache, which can be used to prevent the proxy "
+"from polluting its cache with (big) .deb files."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Automatic Proxy Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::Proxy-Auto-Detect</literal> can be used to specify "
+"an external command to discover the HTTP proxy to use. The first and only "
+"parameter is a URI denoting the host to be contacted, to allow for host-"
+"specific configuration. APT expects the command to output the proxy on "
+"stdout as a single line in the previously specified URI format or the word "
+"<literal>DIRECT</literal> if no proxy should be used. No output indicates "
+"that the generic proxy settings should be used."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"Note that auto-detection will not be used for a host if a host-specific "
+"proxy configuration is already set via <literal>Acquire::http::Proxy::"
+"<replaceable>host</replaceable></literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"See the &squid-deb-proxy-client; and &auto-apt-proxy; packages for example "
+"implementations."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"This option takes precedence over the legacy option name <literal>Acquire::"
+"http::ProxyAutoDetect</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-http.1.xml
+msgid "Connection Configuration"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The option <literal>Acquire::http::Timeout</literal> sets the timeout timer "
+"used by the method; this value applies to the connection as well as the data "
+"timeout."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The used bandwidth can be limited with <literal>Acquire::http::Dl-Limit</"
+"literal> which accepts integer values in kilobytes per second. The default "
+"value is 0 which deactivates the limit and tries to use all available "
+"bandwidth. Note that this option implicitly disables downloading from "
+"multiple servers at the same time."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to "
+"enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e."
+"g. on high-latency connections. It specifies how many requests are sent in a "
+"pipeline. APT tries to detect and work around misbehaving webservers and "
+"proxies at runtime, but if you know that yours does not conform to the "
+"HTTP/1.1 specification, pipelining can be disabled by setting the value to "
+"0. It is enabled by default with the value 10."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::AllowRedirect</literal> controls whether APT will "
+"follow redirects, which is enabled by default."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::User-Agent</literal> can be used to set a different "
+"User-Agent for the http download method as some proxies allow access for "
+"clients only if the client uses a known identifier."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-http.1.xml
+msgid ""
+"<literal>Acquire::http::SendAccept</literal> is enabled by default and sends "
+"an <literal>Accept: text/*</literal> header field to the server for requests "
+"without file extensions to prevent the server from attempting content "
+"negotiation."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-http.1.xml
+#, no-wrap
+msgid ""
+"Acquire::http {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-http-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTP\";\n"
+"\tSendAccept \"false\";\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-http.1.xml
+#, fuzzy
+#| msgid "&apt-conf;, &apt-get;, &sources-list;"
+msgid "&apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-conf;, &apt-get;, &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-https.1.xml
+msgid "APT transport for downloading via the HTTP Secure protocol (HTTPS)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"This APT transport allows the use of repositories accessed via the HTTP "
+"Secure protocol (HTTPS), also referred to as HTTP over TLS. It is available "
+"by default since apt 1.5 and was available before that in the package "
+"<package>apt-transport-https</package>. Note that a transport is never "
+"called directly by a user but used by APT tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"HTTP is by itself an unencrypted transport protocol (compare &apt-transport-"
+"http;), which, as indicated by the appended S, is wrapped in an encrypted "
+"layer known as Transport Layer Security (TLS) to provide end-to-end "
+"encryption. A sufficiently capable attacker can still observe the "
+"communication partners and deeper analysis of the encrypted communication "
+"might still reveal important details. An overview over available "
+"alternative transport methods is given in &sources-list;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+msgid ""
+"The HTTPS protocol is based on the HTTP protocol, so all options supported "
+"by &apt-transport-http; are also available via <literal>Acquire::https</"
+"literal> and will default to the same values specified for <literal>Acquire::"
+"http</literal>. This manpage will only document the options <emphasis>unique "
+"to https</emphasis>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Server credentials"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"By default all certificates trusted by the system (see <package>ca-"
+"certificates</package> package) are used for the verification of the server "
+"certificate. An alternative certificate authority (CA) can be configured "
+"with the <literal>Acquire::https::CAInfo</literal> option and its host-"
+"specific option <literal>Acquire::https::CAInfo::<replaceable>host</"
+"replaceable></literal>. The CAInfo option specifies a file made up of CA "
+"certificates (in PEM format) concatenated together to create the chain "
+"which APT should use to verify the path from your self-signed root "
+"certificate. If the remote server provides the whole chain during the "
+"exchange, the file need only contain the root certificate. Otherwise, the "
+"whole chain is required. If you need to support multiple authorities, the "
+"only way is to concatenate everything."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"A custom certificate revocation list (CRL) can be configured with the "
+"options <literal>Acquire::https::CRLFile</literal> and <literal>Acquire::"
+"https::CRLFile::<replaceable>host</replaceable></literal>. As with the "
+"previous option, a file in PEM format needs to be specified."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Disabling security"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"During server authentication, if certificate verification fails for some "
+"reason (expired, revoked, man in the middle, etc.), the connection fails. "
+"This is obviously what you want in all cases and what the default value "
+"(true) of the option <literal>Acquire::https::Verify-Peer</literal> and its "
+"host-specific variant provides. If you know <emphasis>exactly</emphasis> "
+"what you are doing, setting this option to \"<literal>false</literal>\" "
+"allows you to skip peer certificate verification and make the exchange "
+"succeed. Again, this option is for debugging or testing purposes only as it "
+"removes all security provided by the use of HTTPS."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Similarly the option <literal>Acquire::https::Verify-Host</literal> and its "
+"host-specific variant can be used to deactivate a security feature: The "
+"certificate provided by the server includes the identity of the server which "
+"should match the DNS name used to access it. By default, as requested by RFC "
+"2818, the name of the mirror is checked against the identity found in the "
+"certificate. This default behavior is safe and should not be changed, but if "
+"you know that the server you are using has a DNS name which does not match "
+"the identity in its certificate, you can set the option to \"<literal>false</"
+"literal>\", which will prevent the comparison from being performed."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-https.1.xml
+msgid "Client authentication"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-https.1.xml
+msgid ""
+"Besides supporting password-based authentication (see &apt-authconf;) HTTPS "
+"also supports authentication based on client certificates via "
+"<literal>Acquire::https::SSLCert</literal> and <literal>Acquire::https::"
+"SSLKey</literal>. These should be set respectively to the filename of the "
+"X.509 client certificate and the associated (unencrypted) private key, both "
+"in PEM format. In practice the use of the host-specific variants of both "
+"options is highly recommended."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><literallayout>
+#: apt-transport-https.1.xml
+#, no-wrap
+msgid ""
+"Acquire::https {\n"
+"\tProxy::example.org \"DIRECT\";\n"
+"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n"
+"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n"
+"\tNo-Cache \"true\";\n"
+"\tMax-Age \"3600\";\n"
+"\tNo-Store \"true\";\n"
+"\tTimeout \"10\";\n"
+"\tDl-Limit \"42\";\n"
+"\tPipeline-Depth \"0\";\n"
+"\tAllowRedirect \"false\";\n"
+"\tUser-Agent \"My APT-HTTPS\";\n"
+"\tSendAccept \"false\";\n"
+"\n"
+"\tCAInfo \"/path/to/ca/certs.pem\";\n"
+"\tCRLFile \"/path/to/all/crl.pem\";\n"
+"\tVerify-Peer \"true\";\n"
+"\tVerify-Host::broken.example.org \"false\";\n"
+"\tSSLCert::example.org \"/path/to/client/cert.pem\";\n"
+"\tSSLKey::example.org \"/path/to/client/key.pem\"\n"
+"};\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-https.1.xml
+#, fuzzy
+#| msgid "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+msgid "&apt-transport-http; &apt-conf; &apt-authconf; &sources-list;"
+msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: apt-transport-mirror.1.xml
+msgid "APT transport for more automated mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This APT transport isn't implementing a protocol to access local or remote "
+"repositories on its own, but acquires a mirrorlist and redirects all "
+"requests to the mirror(s) picked from this list, accessing them via other "
+"transports like &apt-transport-http;. The basic functionality has been "
+"available since apt 0.7.24, but was undocumented until apt 1.6 which "
+"contained a complete rework of the transport and its supported features. "
+"Note that a transport is never called directly by a user but used by APT "
+"tools based on user configuration."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If the acquisition of a file via a mirror fails, the method ensures that "
+"another possible mirror from the list is automatically tried until either "
+"the file is retrieved or no mirror is left in the list, transparently "
+"handling server downtimes and similar problems."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The security implications of the transport depend on the security "
+"considerations associated with the transport used to acquire the mirrorlist "
+"and the transports involved in accessing the chosen mirror(s) by the "
+"transport."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"This transport has no configuration options at present. The mirror selection "
+"is based entirely on the mirrors offered in the mirrorlist and the files APT "
+"needs to acquire."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirrorlist format"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A mirrorlist contains one or more lines each specifying a URI for a mirror. "
+"Empty lines and those starting with a hash character (<literal>#</literal>) "
+"are ignored. A URI always starts with a URI scheme which defines the "
+"transport used for this mirror. If for example the URI starts with "
+"<literal>http:</literal>, the responsible transport is &apt-transport-http; "
+"which might have specific requirements for the format of the remaining part "
+"of the URI."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Metadata about a mirror can be given on the same line, separated from the "
+"URI by a tab. Multiple items of metadata can themselves be separated by "
+"either tabs or spaces. (This is an advanced feature only available with apt "
+">= 1.6. Earlier apt versions will fail to parse mirrorlists using this "
+"feature.)"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Since apt 1.6 the use of compressed mirrorlists is also supported. Note "
+"that the filename of the mirrorlist must specify the compression algorithm "
+"used; there is no auto-detection based on file contents."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Mirror selection by metadata"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As specified in the format, a mirror can have additional metadata attached "
+"to prevent a mirror from being selected for acquiring a file not matching "
+"this metadata. This way the mirrorlist can e.g. contain partial mirrors "
+"serving only certain architectures and APT will automatically choose a "
+"different mirror for files requiring an unlisted architecture. Supported are "
+"limits for the architecture (<literal>arch</literal>), codename of the "
+"release (<literal>codename</literal>), component of the repository the file "
+"is in (<literal>component</literal>), language the file applies to "
+"(<literal>lang</literal>), suite name of the release (<literal>suite</"
+"literal>) and type of the file (<literal>type</literal>)."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Fallback order for mirrors"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"If no priority is given for a mirror via the metadata key <literal>priority</"
+"literal>, the order in which mirrors are contacted is random. If a certain "
+"set of mirrors should be tried first before any of another set is tried, a "
+"priority can be explicitly set. The mirrors with the lowest number are tried "
+"first. Mirrors which have no explicit priority set default to the highest "
+"possible number and are therefore tried last. The choice between mirrors "
+"with the same priority is again random."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Allowed transports in a mirrorlist"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"The availability and choice of transports in a mirrorlist is limited by how "
+"the APT client is accessing the mirrorlist. If a local transport like "
+"<literal>file</literal> or <literal>copy</literal> is used, the mirrorlist "
+"can also include local sources, while a mirrorlist accessed via "
+"<literal>http</literal> can not. Additionally, a mirrorlist can not contain "
+"a mirrorlist or other wrapping transports (like <package>apt-transport-tor</"
+"package>). See the documentation of these transports on how to use them "
+"with the mirror method."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that apt versions before 1.6 do not support any other transport than "
+"<literal>http</literal>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Basic example"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"A basic mirrorlist example supported by all apt versions with a mirror "
+"method (>= 0.7.24) in which the client will pick any of the three mirrors:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"http://ftp.de.debian.org/debian/\n"
+"http://ftp.us.debian.org/debian/\n"
+"http://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Assuming a file with this content is stored as <filename>/etc/apt/mirrorlist."
+"txt</filename> on your machine it can be used like this in &sources-list; "
+"(since apt 1.6):"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror+file:/etc/apt/mirrorlist.txt &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"All versions of the mirror method support a mirrorlist accessible via HTTP, "
+"so assuming it is available at <literal>http://apt.example.org/mirror.lst</"
+"literal> the sources.list entry from above could instead be written as:"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid "deb mirror://apt.example.org/mirror.lst &debian-stable-codename; main\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"Note that since apt 1.6 the use of <literal>mirror+http</literal> should be "
+"preferred over <literal>mirror</literal> for uniformity. The functionality "
+"is the same."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><title>
+#: apt-transport-mirror.1.xml
+msgid "Example with metadata-enhanced mirror selection"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"As explained in the format definition apt versions before 1.6 do not support "
+"this and will fail parsing the mirrorlist. The example mirrorlist is "
+"intentionally complicated to show some aspects of the selection. The "
+"following setup is assumed: The first mirror is a local mirror accessible "
+"via the file method, but potentially incomplete. The second mirror has a "
+"great connection, but is a partial mirror insofar as it only contains files "
+"related to the architectures <literal>amd64</literal> and <literal>all</"
+"literal>. The remaining mirrors are average mirrors which should be "
+"contacted only if the earlier ones didn't work."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><literallayout>
+#: apt-transport-mirror.1.xml
+#, no-wrap
+msgid ""
+"file:/srv/local/debian/mirror/\tpriority:1 type:index\n"
+"http://partial.example.org/mirror/\tpriority:2 arch:amd64 arch:all type:deb\n"
+"http://ftp.us.debian.org/debian/\ttype:deb\n"
+"http://ftp.de.debian.org/debian/\ttype:deb\n"
+"https://deb.debian.org/debian/\n"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><refsect2><para>
+#: apt-transport-mirror.1.xml
+msgid ""
+"In this setup with this mirrorlist the first mirror will be used to download "
+"all index files assuming the mirrorlist itself is accessed via a local "
+"transport like <literal>file</literal>. If it isn't, if the mirror is "
+"otherwise inaccessible or if it does not contain the requested file another "
+"mirror will be used to acquire the file, chosen depending on the type of the "
+"file: An index file will be served by the last mirror in the list, while a "
+"package of architecture <literal>amd64</literal> is served by the second and "
+"those of e.g. architecture <literal>i386</literal> by one of the last three."
+msgstr ""
+
+#. type: Attribute 'lang' of: <book>
+#: guide.dbk offline.dbk
+msgid "en"
+msgstr ""
+
+#. type: Content of: <book><title>
+#: guide.dbk
+msgid "APT User's Guide"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><authorgroup><author><personname>
+#: guide.dbk offline.dbk
+msgid "Jason Gunthorpe"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><authorgroup><author><email>
+#: guide.dbk offline.dbk
+msgid "jgg@debian.org"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: guide.dbk offline.dbk
+msgid "Version &apt-product-version;"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: guide.dbk
+msgid ""
+"This document provides an overview of how to use the APT package manager."
+msgstr ""
+
+#. type: Content of: <book><bookinfo>
+#: guide.dbk
+msgid ""
+"<copyright><year>1998</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><title>
+#: guide.dbk offline.dbk
+msgid "License Notice"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"\"APT\" and this document are free software; you can redistribute them and/"
+"or modify them under the terms of the GNU General Public License as "
+"published by the Free Software Foundation; either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: guide.dbk offline.dbk
+msgid ""
+"For more details, on Debian systems, see the file /usr/share/common-licenses/"
+"GPL for the full license."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "General"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT package currently contains two sections, the APT <command>dselect</"
+"command> method and the <command>apt-get</command> command line user "
+"interface. Both provide a way to install and remove packages as well as "
+"download new packages from the Internet."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Anatomy of the Package System"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The Debian packaging system has a large amount of information associated "
+"with each package to help assure that it integrates cleanly and easily into "
+"the system. The most prominent of its features is the dependency system."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The dependency system allows individual programs to make use of shared "
+"elements in the system such as libraries. It simplifies placing infrequently "
+"used portions of a program in separate packages to reduce the number of "
+"things the average user is required to install. Also, it allows for choices "
+"in mail transport agents, X servers and so on."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first step to understanding the dependency system is to grasp the "
+"concept of a simple dependency. The meaning of a simple dependency is that a "
+"package requires another package to be installed at the same time to work "
+"properly."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"For instance, mailcrypt is an emacs extension that aids in encrypting email "
+"with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a "
+"simple dependency on GPG. Also, because it is an emacs extension it has a "
+"simple dependency on emacs, without emacs it is completely useless."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The other important dependency to understand is a conflicting dependency. It "
+"means that a package, when installed with another package, will not work and "
+"may possibly be extremely harmful to the system. As an example consider a "
+"mail transport agent such as sendmail, exim or qmail. It is not possible to "
+"have two mail transport agents installed because both need to listen to the "
+"network to receive mail. Attempting to install two will seriously damage the "
+"system so all mail transport agents have a conflicting dependency with all "
+"other mail transport agents."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"As an added complication there is the possibility for a package to pretend "
+"to be another package. Consider that exim and sendmail for many intents are "
+"identical, they both deliver mail and understand a common interface. Hence, "
+"the package system has a way for them to declare that they are both mail-"
+"transport-agents. So, exim and sendmail both declare that they provide a "
+"mail-transport-agent and other packages that need a mail transport agent "
+"depend on mail-transport-agent. This can add a great deal of confusion when "
+"trying to manually fix packages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"At any given time a single dependency may be met by packages that are "
+"already installed or it may not be. APT attempts to help resolve dependency "
+"issues by providing a number of automatic algorithms that help in selecting "
+"packages for installation."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "apt-get"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> provides a simple way to install packages from "
+"the command line. Unlike <command>dpkg</command>, <command>apt-get</command> "
+"does not understand .deb files, it works with the package's proper name and "
+"can only install .deb archives from a <emphasis>Source</emphasis>."
+msgstr ""
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"If you are using an http proxy server you must set the http_proxy "
+"environment variable first, see sources.list(5)"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The first <placeholder type=\"footnote\" id=\"0\"/> thing that should be "
+"done before using <command>apt-get</command> is to fetch the package lists "
+"from the <emphasis>Sources</emphasis> so that it knows what packages are "
+"available. This is done with <literal>apt-get update</literal>. For instance,"
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
+"Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid "Once updated there are several commands that can be used:"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "upgrade"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Upgrade will attempt to gently upgrade the whole system. Upgrade will never "
+"install a new package or remove an existing package, nor will it ever "
+"upgrade a package that might cause some other package to break. This can be "
+"used daily to relatively safely upgrade the system. Upgrade will list all of "
+"the packages that it could not upgrade, this usually means that they depend "
+"on new packages or conflict with some other package. <command>dselect</"
+"command> or <literal>apt-get install</literal> can be used to force these "
+"packages to install."
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "install"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Install is used to install packages by name. The package is automatically "
+"fetched and installed. This can be useful if you already know the name of "
+"the package to install and do not want to go into a GUI to select it. Any "
+"number of packages may be passed to install, they will all be fetched. "
+"Install automatically attempts to resolve dependency problems with the "
+"listed packages and will print a summary and ask for confirmation if "
+"anything other than its arguments are changed."
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><term>
+#: guide.dbk
+msgid "dist-upgrade"
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"Dist-upgrade is a complete upgrader designed to simplify upgrading between "
+"releases of Debian. It uses a sophisticated algorithm to determine the best "
+"set of packages to install, upgrade and remove to get as much of the system "
+"to the newest release. In some situations it may be desired to use dist-"
+"upgrade rather than spend the time manually resolving dependencies in "
+"<command>dselect</command>. Once dist-upgrade has completed then "
+"<command>dselect</command> can be used to install any packages that may have "
+"been left out."
+msgstr ""
+
+#. type: Content of: <book><chapter><variablelist><varlistentry><listitem><para>
+#: guide.dbk
+msgid ""
+"It is important to closely look at what dist-upgrade is going to do, its "
+"decisions may sometimes be quite surprising."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"<command>apt-get</command> has several command line options that are "
+"detailed in its man page, <citerefentry><refentrytitle>apt-get</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. The most useful "
+"option is <literal>-d</literal> which does not install the fetched files. If "
+"the system has to download a large number of package it would be undesired "
+"to start installing them in case something goes wrong. When <literal>-d</"
+"literal> is used the downloaded archives can be installed by simply running "
+"the command that caused them to be downloaded again without <literal>-d</"
+"literal>."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "DSelect"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The APT <command>dselect</command> method provides the complete APT system "
+"with the <command>dselect</command> package selection GUI. <command>dselect</"
+"command> is used to select the packages to be installed or removed and APT "
+"actually installs them."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"To enable the APT method you need to select [A]ccess in <command>dselect</"
+"command> and then choose the APT method. You will be prompted for a set of "
+"<emphasis>Sources</emphasis> which are places to fetch archives from. These "
+"can be remote Internet sites, local Debian mirrors or CD-ROMs. Each source "
+"can provide a fragment of the total Debian archive, APT will automatically "
+"combine them to form a complete set of packages. If you have a CD-ROM then "
+"it is a good idea to specify it first and then specify a mirror so that you "
+"have access to the latest bug fixes. APT will automatically use packages on "
+"your CD-ROM before downloading from the Internet."
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Set up a list of distribution source locations\n"
+"\n"
+" Please give the base URL of the debian distribution.\n"
+" The access schemes I know about are: http file\n"
+"\n"
+" For example:\n"
+" file:/mnt/debian,\n"
+" ftp://ftp.debian.org/debian,\n"
+" http://ftp.de.debian.org/debian,\n"
+"\n"
+"\n"
+" URL [http://llug.sep.bnl.gov/debian]:\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The <emphasis>Sources</emphasis> setup starts by asking for the base of the "
+"Debian archive, defaulting to an HTTP mirror. Next it asks for the "
+"distribution to get."
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the distribution tag to get or a path to the\n"
+" package file ending in a /. The distribution\n"
+" tags are typically something like: stable unstable testing non-US\n"
+"\n"
+" Distribution [stable]:\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The distribution refers to the Debian version in the archive, "
+"<emphasis>stable</emphasis> refers to the latest released version and "
+"<emphasis>unstable</emphasis> refers to the developmental version. "
+"<emphasis>non-US</emphasis> is only available on some mirrors and refers to "
+"packages that contain encryption technology or other things that cannot be "
+"exported from the United States. Importing these packages into the US is "
+"legal however."
+msgstr ""
+
+#. type: Content of: <book><chapter><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+" Please give the components to get\n"
+" The components are typically something like: main contrib non-free\n"
+"\n"
+" Components [main contrib non-free]:\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"The components list refers to the list of sub distributions to fetch. The "
+"distribution is split up based on software licenses, main being DFSG free "
+"packages while contrib and non-free contain things that have various "
+"restrictions placed on their use and distribution."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Any number of sources can be added, the setup script will continue to prompt "
+"until you have specified all that you want."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Before starting to use <command>dselect</command> it is necessary to update "
+"the available list by selecting [U]pdate from the menu. This is a superset "
+"of <literal>apt-get update</literal> that makes the fetched information "
+"available to <command>dselect</command>. [U]pdate must be performed even if "
+"<literal>apt-get update</literal> has been run before."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"You can then go on and make your selections using [S]elect and then perform "
+"the installation using [I]nstall. When using the APT method the [C]onfig and "
+"[R]emove commands have no meaning, the [I]nstall command performs both of "
+"them together."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"By default APT will automatically remove the package (.deb) files once they "
+"have been successfully installed. To change this behavior place "
+"<literal>Dselect::clean \"prompt\";</literal> in /etc/apt/apt.conf."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: guide.dbk
+msgid "The Interface"
+msgstr ""
+
+#. type: Content of: <book><chapter><para><footnote><para>
+#: guide.dbk
+msgid ""
+"The <command>dselect</command> method actually is a set of wrapper scripts "
+"to <command>apt-get</command>. The method actually provides more "
+"functionality than is present in <command>apt-get</command> alone."
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: guide.dbk
+msgid ""
+"Both that APT <command>dselect</command> method and <command>apt-get</"
+"command> share the same interface. It is a simple system that generally "
+"tells you what it will do and then goes and does it. <placeholder type="
+"\"footnote\" id=\"0\"/> After printing out a summary of what will happen APT "
+"then will print out some informative status messages so that you can "
+"estimate how far along it is and how much is left to do."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Startup"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before all operations except update, APT performs a number of actions to "
+"prepare its internal state. It also does some checks of the system's state. "
+"At any time these operations can be performed by running <literal>apt-get "
+"check</literal>."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The first thing it does is read all the package files into memory. APT uses "
+"a caching scheme so this operation will be faster the second time it is run. "
+"If some of the package files are not found then they will be ignored and a "
+"warning will be printed when apt-get exits."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The final operation performs a detailed analysis of the system's "
+"dependencies. It checks every dependency of every installed or unpacked "
+"package and considers if it is OK. Should this find a problem then a report "
+"will be printed out and <command>apt-get</command> will refuse to run."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get check\n"
+"Reading Package Lists... Done\n"
+"Building Dependency Tree... Done\n"
+"You might want to run 'apt --fix-broken install' to correct these.\n"
+"Sorry, but the following packages have unmet dependencies:\n"
+" 9fonts: Depends: xlib6g but it is not installed\n"
+" uucp: Depends: mailx but it is not installed\n"
+" blast: Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" adduser: Depends: perl-base but it is not installed\n"
+" aumix: Depends: libgpmg1 but it is not installed\n"
+" debiandoc-sgml: Depends: sgml-base but it is not installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) but 2.0-3 is installed\n"
+" cthugha: Depends: svgalibg1 but it is not installed\n"
+" Depends: xlib6g (&gt;= 3.3-5) but it is not installed\n"
+" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 2.1-2.1)\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"In this example the system has many problems, including a serious problem "
+"with libreadlineg2. For each package that has unmet dependencies a line is "
+"printed out indicating the package with the problem and the dependencies "
+"that are unmet. A short explanation of why the package has a dependency "
+"problem is also included."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para><footnote><para>
+#: guide.dbk
+msgid ""
+"APT however considers all known dependencies and attempts to prevent broken "
+"packages"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"There are two ways a system can get into a broken state like this. The first "
+"is caused by <command>dpkg</command> missing some subtle relationships "
+"between packages when performing upgrades. <placeholder type=\"footnote\" id="
+"\"0\"/>. The second is if a package installation fails during an operation. "
+"In this situation a package may have been unpacked without its dependents "
+"being installed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The second situation is much less serious than the first because APT places "
+"certain constraints on the order that packages are installed. In both cases "
+"supplying the <literal>-f</literal> option to <command>apt-get</command> "
+"will cause APT to deduce a possible solution to the problem and then "
+"continue on. The APT <command>dselect</command> method always supplies the "
+"<literal>-f</literal> option to allow for easy continuation of failed "
+"maintainer scripts."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"However, if the <literal>-f</literal> option is used to correct a seriously "
+"broken system caused by the first case then it is possible that it will "
+"either fail immediately or the installation sequence will fail. In either "
+"case it is necessary to manually use dpkg (possibly with forcing options) to "
+"correct the situation enough to allow APT to proceed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Report"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Before proceeding <command>apt-get</command> will present a report on what "
+"will happen. Generally the report reflects the type of operation being "
+"performed but there are several common elements. In all cases the lists "
+"reflect the final state of things, taking into account the <literal>-f</"
+"literal> option and any other relevant activities to the command being "
+"executed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Extra Package list"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following extra packages will be installed:\n"
+" libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n"
+" mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n"
+" bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n"
+" squake pgp-i python-base debmake ldso perl libreadlineg2\n"
+" ssh\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Extra Package list shows all of the packages that will be installed or "
+"upgraded in excess of the ones mentioned on the command line. It is only "
+"generated for an <literal>install</literal> command. The listed packages are "
+"often the result of an Auto Install."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Packages to Remove"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages will be REMOVED:\n"
+" xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n"
+" xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n"
+" xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n"
+" nas xpilot xfig\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The Packages to Remove list shows all of the packages that will be removed "
+"from the system. It can be shown for any of the operations and should be "
+"given a careful inspection to ensure nothing important is to be taken off. "
+"The <literal>-f</literal> option is especially good at generating packages "
+"to remove so extreme care should be used in that case. The list may contain "
+"packages that are going to be removed because they are only partially "
+"installed, possibly due to an aborted installation."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The New Packages list"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following NEW packages will installed:\n"
+" zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The New Packages list is simply a reminder of what will happen. The packages "
+"listed are not presently installed in the system but will be when APT is "
+"done."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "The Kept Back list"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following packages have been kept back\n"
+" compface man-db tetex-base msql libpaper svgalib1\n"
+" gs snmp arena lynx xpat2 groff xscreensaver\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Whenever the whole system is being upgraded there is the possibility that "
+"new versions of packages cannot be installed because they require new things "
+"or conflict with already installed things. In this case the package will "
+"appear in the Kept Back list. The best way to convince packages listed there "
+"to install is with <literal>apt-get install</literal> or by using "
+"<command>dselect</command> to resolve their problems."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Held Packages warning"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"The following held packages will be changed:\n"
+" cvs\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Sometimes you can ask APT to install a package that is on hold, in such a "
+"case it prints out a warning that the held package is going to be changed. "
+"This should only happen during dist-upgrade or install."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><title>
+#: guide.dbk
+msgid "Final summary"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Finally, APT will print out a summary of all the changes that will occur."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.\n"
+"12 packages not fully installed or removed.\n"
+"Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"The first line of the summary simply is a reduced version of all of the "
+"lists and includes the number of upgrades - that is packages already "
+"installed that have new versions available. The second line indicates the "
+"number of poorly configured packages, possibly the result of an aborted "
+"installation. The final line shows the space requirements that the "
+"installation needs. The first pair of numbers refer to the size of the "
+"archive files. The first number indicates the number of bytes that must be "
+"fetched from remote locations and the second indicates the total size of all "
+"the archives required. The next number indicates the size difference between "
+"the presently installed packages and the newly installed packages. It is "
+"roughly equivalent to the space required in /usr after everything is done. "
+"If a large number of packages are being removed then the value may indicate "
+"the amount of space that will be freed."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><section><para>
+#: guide.dbk
+msgid ""
+"Some other reports can be generated by using the -u option to show packages "
+"to upgrade, they are similar to the previous examples."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "The Status Display"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"During the download of archives and package files APT prints out a series of "
+"status messages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: guide.dbk
+#, no-wrap
+msgid ""
+"# apt-get update\n"
+"Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n"
+"Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
+"Hit http://llug.sep.bnl.gov/debian/ testing/main Packages\n"
+"Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n"
+"Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n"
+"11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The lines starting with <emphasis>Get</emphasis> are printed out when APT "
+"begins to fetch a file while the last line indicates the progress of the "
+"download. The first percent value on the progress line indicates the total "
+"percent done of all files. Unfortunately since the size of the Package files "
+"is unknown <literal>apt-get update</literal> estimates the percent done "
+"which causes some inaccuracies."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The next section of the status line is repeated once for each download "
+"thread and indicates the operation being performed and some useful "
+"information about what is happening. Sometimes this section will simply read "
+"<emphasis>Forking</emphasis> which means the OS is loading the download "
+"module. The first word after the [ is the fetch number as shown on the "
+"history lines. The next word is the short form name of the object being "
+"downloaded. For archives it will contain the name of the package that is "
+"being fetched."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"Inside of the single quote is an informative string indicating the progress "
+"of the negotiation phase of the download. Typically it progresses from "
+"<emphasis>Connecting</emphasis> to <emphasis>Waiting for file</emphasis> to "
+"<emphasis>Downloading</emphasis> or <emphasis>Resuming</emphasis>. The final "
+"value is the number of bytes downloaded from the remote site. Once the "
+"download begins this is represented as <literal>102/10.2k</literal> "
+"indicating that 102 bytes have been fetched and 10.2 kilobytes is expected. "
+"The total size is always shown in 4 figure notation to preserve space. After "
+"the size display is a percent meter for the file itself. The second last "
+"element is the instantaneous average speed. This values is updated every 5 "
+"seconds and reflects the rate of data transfer for that period. Finally is "
+"shown the estimated transfer time. This is updated regularly and reflects "
+"the time to complete everything at the shown transfer rate."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"The status display updates every half second to provide a constant feedback "
+"on the download progress while the Get lines scroll back whenever a new file "
+"is started. Since the status display is constantly updated it is unsuitable "
+"for logging to a file, use the <literal>-q</literal> option to remove the "
+"status display."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: guide.dbk
+msgid "Dpkg"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: guide.dbk
+msgid ""
+"APT uses <command>dpkg</command> for installing the archives and will switch "
+"over to the <command>dpkg</command> interface once downloading is completed. "
+"<command>dpkg</command> will also ask a number of questions as it processes "
+"the packages and the packages themselves may also ask several questions. "
+"Before each question there is usually a description of what it is asking and "
+"the questions are too varied to discuss completely here."
+msgstr ""
+
+#. type: Content of: <book><title>
+#: offline.dbk
+msgid "Using APT Offline"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><abstract><para>
+#: offline.dbk
+msgid ""
+"This document describes how to use APT in a non-networked environment, "
+"specifically a 'sneaker-net' approach for performing upgrades."
+msgstr ""
+
+#. type: Content of: <book><bookinfo>
+#: offline.dbk
+msgid ""
+"<copyright><year>1999</year><holder>Jason Gunthorpe</holder></copyright>"
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Introduction"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "Overview"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Normally APT requires direct access to a Debian archive, either from a local "
+"media or through a network. Another common complaint is that a Debian "
+"machine is on a slow link, such as a modem and another machine has a very "
+"fast connection but they are physically distant."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The solution to this is to use large removable media such as a Zip disc or a "
+"SuperDisk disc. These discs are not large enough to store the entire Debian "
+"archive but can easily fit a subset large enough for most users. The idea is "
+"to use APT to generate a list of packages that are required and then fetch "
+"them onto the disc using another machine with good connectivity. It is even "
+"possible to use another Debian machine with APT or to use a completely "
+"different OS and a download tool like wget. Let <emphasis>remote host</"
+"emphasis> mean the machine downloading the packages, and <emphasis>target "
+"host</emphasis> the one with bad or no connection."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"This is achieved by creatively manipulating the APT configuration file. The "
+"essential premise to tell APT to look on a disc for it's archive files. Note "
+"that the disc should be formatted with a filesystem that can handle long "
+"file names such as ext2, fat32 or vfat."
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT on both machines"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"APT being available on both machines gives the simplest configuration. The "
+"basic idea is to place a copy of the status file on the disc and use the "
+"remote machine to fetch the latest package files and decide which packages "
+"to download. The disk directory structure should look like:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" /disc/\n"
+" archives/\n"
+" partial/\n"
+" lists/\n"
+" partial/\n"
+" status\n"
+" sources.list\n"
+" apt.conf\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+msgid "The configuration file"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The configuration file should tell APT to store its files on the disc and to "
+"use the configuration files on the disc as well. The sources.list should "
+"contain the proper sites that you wish to use from the remote machine, and "
+"the status file should be a copy of <emphasis>/var/lib/dpkg/status</"
+"emphasis> from the <emphasis>target host</emphasis>. Please note, if you are "
+"using a local archive you must use copy URIs, the syntax is identical to "
+"file URIs."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>apt.conf</emphasis> must contain the necessary information to make "
+"APT use the disc:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" APT\n"
+" {\n"
+" /* This is not necessary if the two machines are the same arch, it tells\n"
+" the remote APT what architecture the target machine is */\n"
+" Architecture \"i386\";\n"
+"\n"
+" Get::Download-Only \"true\";\n"
+" };\n"
+"\n"
+" Dir\n"
+" {\n"
+" /* Use the disc for state information and redirect the status file from\n"
+" the /var/lib/dpkg default */\n"
+" State \"/disc/\";\n"
+" State::status \"status\";\n"
+"\n"
+" // Binary caches will be stored locally\n"
+" Cache::archives \"/disc/archives/\";\n"
+" Cache \"/tmp/\";\n"
+"\n"
+" // Location of the source list.\n"
+" Etc \"/disc/\";\n"
+" };\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"More details can be seen by examining the apt.conf man page and the sample "
+"configuration file in <emphasis>/usr/share/doc/apt/examples/apt.conf</"
+"emphasis>."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"On the target machine the first thing to do is mount the disc and copy "
+"<emphasis>/var/lib/dpkg/status</emphasis> to it. You will also need to "
+"create the directories outlined in the Overview, <emphasis>archives/partial/"
+"</emphasis> and <emphasis>lists/partial/</emphasis>. Then take the disc to "
+"the remote machine and configure the sources.list. On the remote machine "
+"execute the following:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get update\n"
+" [ APT fetches the package files ]\n"
+" # apt-get dist-upgrade\n"
+" [ APT fetches all the packages needed to upgrade the target machine ]\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The dist-upgrade command can be replaced with any other standard APT "
+"commands, particularly dselect-upgrade. You can even use an APT front end "
+"such as <emphasis>dselect</emphasis>. However this presents a problem in "
+"communicating your selections back to the local computer."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Now the disc contains all of the index files and archives needed to upgrade "
+"the target machine. Take the disc back and run:"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # export APT_CONFIG=\"/disc/apt.conf\"\n"
+" # apt-get check\n"
+" [ APT generates a local copy of the cache files ]\n"
+" # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade\n"
+" [ Or any other APT command ]\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"It is necessary for proper function to re-specify the status file to be the "
+"local one. This is very important!"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"If you are using dselect you can do the very risky operation of copying disc/"
+"status to /var/lib/dpkg/status so that any selections you made on the remote "
+"machine are updated. I highly recommend that people only make selections on "
+"the local machine - but this may not always be possible. DO NOT copy the "
+"status file if dpkg or APT have been run in the mean time!!"
+msgstr ""
+
+#. type: Content of: <book><chapter><title>
+#: offline.dbk
+msgid "Using APT and wget"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"<emphasis>wget</emphasis> is a popular and portable download tool that can "
+"run on nearly any machine. Unlike the method above this requires that the "
+"Debian machine already has a list of available packages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The basic idea is to create a disc that has only the archive files "
+"downloaded from the remote site. This is done by using the --print-uris "
+"option to apt-get and then preparing a wget script to actually fetch the "
+"packages."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><title>
+#: offline.dbk
+#, fuzzy
+msgid "Operation"
+msgstr "Descrição"
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Unlike the previous technique no special configuration files are required. "
+"We merely use the standard APT commands to generate the file list."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # apt-get dist-upgrade\n"
+" [ Press no when prompted, make sure you are happy with the actions ]\n"
+" # apt-get -qq --print-uris dist-upgrade &gt; uris\n"
+" # awk '{print \"wget -O \" $2 \" \" $1}' &lt; uris &gt; /disc/wget-script\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Any command other than dist-upgrade could be used here, including dselect-"
+"upgrade."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"The /disc/wget-script file will now contain a list of wget commands to "
+"execute in order to fetch the necessary archives. This script should be run "
+"with the current directory as the disc's mount point so as to save the "
+"output on the disc."
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "The remote machine would do something like"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid ""
+" # cd /disc\n"
+" # sh -x ./wget-script\n"
+" [ wait.. ]\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid ""
+"Once the archives are downloaded and the disc returned to the Debian machine "
+"installation can proceed using,"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><screen>
+#: offline.dbk
+#, no-wrap
+msgid " # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade\n"
+msgstr ""
+
+#. type: Content of: <book><chapter><section><para>
+#: offline.dbk
+msgid "Which will use the already fetched archives on the disc."
+msgstr ""
+
+#, fuzzy
+#~ msgid "&apt-get;, &apt-conf;"
+#~ msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#, fuzzy
+#~ msgid "The option <literal>DPkg::Progress-Fancy</literal> is enabled."
+#~ msgstr "a linha <literal>Package:</literal>"
+
+#, fuzzy
+#~ msgid "The option <literal>APT::Color</literal> is enabled."
+#~ msgstr "a linha <literal>Component:</literal>"
+
+#, fuzzy
+#~ msgid ""
+#~ "The option <literal>upgrade</literal> has <literal>--with-new-pkgs</"
+#~ "literal> enabled by default."
+#~ msgstr "a linha <literal>Archive:</literal>"
+
+#, fuzzy
+#~ msgid ""
+#~ "to the versions that are not installed and do not belong to the target "
+#~ "release."
+#~ msgstr ""
+#~ "para as instâncias que não estã instaladas e que não pertencem a versão "
+#~ "alvo."
+
+#, fuzzy
+#~ msgid "Some examples:"
+#~ msgstr "Exemplos"
+
+#, fuzzy
+#~ msgid ""
+#~ "See E<lt>http://bugs.debian.org/aptE<gt>. If you wish to report a bug in "
+#~ "B<apt>, please see I</usr/share/doc/debian/bug-reporting.txt> or the "
+#~ "B<reportbug>(1) command."
+#~ msgstr ""
+#~ "\n"
+#~ " <RefSect1><Title>Bugs</>\n"
+#~ " <para>\n"
+#~ " Consulte a <ulink url='http://bugs.debian.org/apt'>página de bugs do "
+#~ "APT</>.\n"
+#~ " Caso você queira relatar um bug no APT, por favor consulte o arquivo\n"
+#~ " <filename>/usr/share/doc/debian/bug-reporting.txt</> ou o comando "
+#~ "&reportbug;.\n"
+#~ " </RefSect1>\n"
+
+#, fuzzy
+#~ msgid "apt was written by the APT team E<lt>apt@packages.debian.orgE<gt>."
+#~ msgstr ""
+#~ "\n"
+#~ " <RefSect1><Title>Author</>\n"
+#~ " <para>\n"
+#~ " O APT foi escrito pela equipe APT <email>apt@packages.debian.org</>.\n"
+#~ " </RefSect1>\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Package: *\n"
+#~ "Pin: release n=karmic*\n"
+#~ "Pin-Priority: 990\n"
+#~ msgstr ""
+#~ "<programlisting>\n"
+#~ "Package: *\n"
+#~ "Pin: release a=unstable\n"
+#~ "Pin-Priority: 50\n"
+
+#, fuzzy
+#~ msgid "Dir Section"
+#~ msgstr "Descrição"
+
+#, fuzzy
+#~ msgid "<replaceable>&synopsis-filename;</replaceable>"
+#~ msgstr ""
+#~ "<programlisting>\n"
+#~ "apt-get install <replaceable>pacote</replaceable>/testing\n"
+
+#, fuzzy
+#~ msgid "&apt-get;,&aptitude;,&apt-conf;"
+#~ msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#, fuzzy
+#~ msgid "&file-preferences;"
+#~ msgstr "apt_preferences"
+
+#, fuzzy
+#~ msgid "&apt-author.team; &apt-email; &apt-product;"
+#~ msgstr "&apt-get; &apt-cache; &apt-conf; &sources-list;"
+
+#, fuzzy
+#~ msgid ""
+#~ "<!-- Boiler plate docinfo section -->\n"
+#~ "<!ENTITY apt-docinfo \"\n"
+#~ " <refentryinfo>\n"
+#~ " <address><email>apt@packages.debian.org</email></address>\n"
+#~ " <author>\n"
+#~ " <firstname>Jason</firstname> <surname>Gunthorpe</surname>\n"
+#~ " <contrib></contrib>\n"
+#~ " </author>\n"
+#~ " <copyright><year>1998-2001</year> <holder>Jason Gunthorpe</holder></"
+#~ "copyright>\n"
+#~ " <date>28 October 2008</date>\n"
+#~ " <productname>Linux</productname>\n"
+#~ " </refentryinfo>\n"
+#~ "\">\n"
+#~ msgstr ""
+#~ "\n"
+#~ " <docinfo>\n"
+#~ " <address><email>apt@packages.debian.org</></address>\n"
+#~ " <author><firstname>Jason</> <surname>Gunthorpe</></>\n"
+#~ " <copyright><year>1998-2001</> <holder>Jason Gunthorpe</></>\n"
+#~ " <date>12 Março 2001</>\n"
+#~ " </docinfo>\n"
+
+#, fuzzy
+#~ msgid "to the version that is already installed (if any)."
+#~ msgstr "para a instância que já esteja instalada (caso exista)."
+
+#, fuzzy
+#~ msgid ""
+#~ "The <literal>Pin-Priority:</literal> line in each APT preferences record "
+#~ "is optional. If omitted, APT assigns a priority of 1 less than the last "
+#~ "value specified on a line beginning with <literal>Pin-Priority: "
+#~ "release ...</literal>."
+#~ msgstr ""
+#~ "A linha <literal>Pin-Priority:</literal> em cada registro de preferências "
+#~ "do APT é opcional. Caso omitida, o APT atribuirá uma prioridade de 1 "
+#~ "menos o último valor especificado em uma linha iniciando com <literal>Pin-"
+#~ "Priority: release ...</literal>."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ " <VarListEntry><term><option/-h/</><term><option/--help/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Show a short usage summary.\n"
+#~ " </VarListEntry>\n"
+#~ " \n"
+#~ " <VarListEntry><term><option/-v/</><term><option/--version/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Show the program version.\n"
+#~ " </VarListEntry>\n"
+#~ "\n"
+#~ " <VarListEntry><term><option/-c/</><term><option/--config-file/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Configuration File; Specify a configuration file to use. \n"
+#~ " The program will read the default configuration file and then this \n"
+#~ " configuration file. See &apt-conf; for syntax information. \n"
+#~ " </VarListEntry>\n"
+#~ " \n"
+#~ " <VarListEntry><term><option/-o/</><term><option/--option/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Set a Configuration Option; This will set an arbitary "
+#~ "configuration \n"
+#~ " option. The syntax is <option>-o Foo::Bar=bar</>.\n"
+#~ " </VarListEntry>\n"
+#~ msgstr ""
+#~ "\n"
+#~ " <VarListEntry><term><option/-h/</><term><option/--help/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Exibe um pequeno resumo de uso.\n"
+#~ " </VarListEntry>\n"
+#~ " \n"
+#~ " <VarListEntry><term><option/-v/</><term><option/--version/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Exibe a versão do programa.\n"
+#~ " </VarListEntry>\n"
+#~ "\n"
+#~ " <VarListEntry><term><option/-c/</><term><option/--config-file/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Arquivo de Configuração; Especifica um arquivo de configuração\n"
+#~ " a ser usado. O programa irá ler o arquivo de configuração padrão\n"
+#~ " e então este arquivo de configuração. Consulte &apt-conf; para\n"
+#~ " informação de sintaxe. \n"
+#~ " </VarListEntry>\n"
+#~ " \n"
+#~ " <VarListEntry><term><option/-o/</><term><option/--option/</>\n"
+#~ " <ListItem><Para>\n"
+#~ " Defie uma Opção de Configuração; Esta opção irá definir uma opção\n"
+#~ " de configuração arbitrária. A sintaxe é <option>-o Foo::Bar=bar</>.\n"
+#~ " </VarListEntry>\n"
+
+#, fuzzy
+#~ msgid "</programlisting> Then:"
+#~ msgstr "</programlisting> Então :"
diff --git a/doc/po4a.conf b/doc/po4a.conf
new file mode 100644
index 0000000..587215a
--- /dev/null
+++ b/doc/po4a.conf
@@ -0,0 +1,48 @@
+# location of pot and po
+[po_directory] po
+
+# Entities need to be present, even if not translated
+[po4a_alias:entity] text opt:"-k 0"
+[po4a_alias:manpage] docbook opt:"\
+ -o untranslated='<term><option> <refname> <refentrytitle> <date> <refentryinfo> <phrase> <variablelist> <term><command>' \
+ -o break='<term><option> <term><command>' \
+ -o nodefault='<option> <refname> <refentrytitle> <date> <refentryinfo> <phrase> <variablelist> <command>' \
+ -o inline='<para><option> <refentrytitle> <para><command> <programlisting><command> <refentrytitle><command> <refpurpose><command>' \
+ -o translated='<para><command> <programlisting><command> <refentrytitle><command> <refpurpose><command>'"
+
+# define source file and translated file (one file per line)
+[type: entity] apt.ent $lang:$lang/apt.ent
+[type: manpage] apt.8.xml $lang:$lang/apt.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt-get.8.xml $lang:$lang/apt-get.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt-cache.8.xml $lang:$lang/apt-cache.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt-key.8.xml $lang:$lang/apt-key.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt-mark.8.xml $lang:$lang/apt-mark.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt-secure.8.xml $lang:$lang/apt-secure.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt-cdrom.8.xml $lang:$lang/apt-cdrom.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt-config.8.xml $lang:$lang/apt-config.$lang.8.xml add_$lang:xml.add
+[type: manpage] apt.conf.5.xml $lang:$lang/apt.conf.$lang.5.xml add_$lang:xml.add
+[type: manpage] apt_preferences.5.xml $lang:$lang/apt_preferences.$lang.5.xml add_$lang:xml.add
+[type: manpage] sources.list.5.xml $lang:$lang/sources.list.$lang.5.xml add_$lang:xml.add
+[type: manpage] apt-extracttemplates.1.xml $lang:$lang/apt-extracttemplates.$lang.1.xml add_$lang:xml.add
+[type: manpage] apt-sortpkgs.1.xml $lang:$lang/apt-sortpkgs.$lang.1.xml add_$lang:xml.add
+[type: manpage] apt-ftparchive.1.xml $lang:$lang/apt-ftparchive.$lang.1.xml add_$lang:xml.add
+[type: manpage] apt_auth.conf.5.xml $lang:$lang/apt_auth.conf.$lang.5.xml add_$lang:xml.add
+[type: manpage] apt-transport-http.1.xml $lang:$lang/apt-transport-http.$lang.1.xml add_$lang:xml.add
+[type: manpage] apt-transport-https.1.xml $lang:$lang/apt-transport-https.$lang.1.xml add_$lang:xml.add
+[type: manpage] apt-transport-mirror.1.xml $lang:$lang/apt-transport-mirror.$lang.1.xml add_$lang:xml.add
+
+[type: docbook] guide.dbk $lang:$lang/guide.$lang.dbk
+# add_$lang::$lang/addendum/docbook_$lang.add
+[type: docbook] offline.dbk $lang:$lang/offline.$lang.dbk
+# add_$lang::$lang/addendum/docbook_$lang.add
+#[type: docbook] cache.dbk $lang:$lang/cache.$lang.dbk \
+# add_$lang::$lang/addendum/docbook_$lang.add
+#[type: docbook] design.dbk $lang:$lang/design.$lang.dbk\
+# add_$lang::$lang/addendum/docbook_$lang.add
+#[type: docbook] dpkg-tech.dbk $lang:$lang/dpkg-tech.$lang.dbk\
+# add_$lang::$lang/addendum/docbook_$lang.add
+#[type: docbook] files.dbk $lang:$lang/files.$lang.dbk\
+# add_$lang::$lang/addendum/docbook_$lang.add
+#[type: docbook] method.dbk $lang:$lang/method.$lang.dbk\
+# add_$lang::$lang/addendum/docbook_$lang.add
+
diff --git a/doc/progress-reporting.md b/doc/progress-reporting.md
new file mode 100644
index 0000000..c4963af
--- /dev/null
+++ b/doc/progress-reporting.md
@@ -0,0 +1,76 @@
+Install-progress reporting
+--------------------------
+
+If the apt options `APT::Status-Fd` is set, apt will send status
+reports to that fd. The status information is separated with a '`:`',
+there are the following status conditions:
+
+* pmstatus
+* dlstatus
+* conffile-prompt
+* error
+* media-change
+
+The reason for using a fd instead of an OpProgress class is that many
+apt front-end fork a (vte) terminal for the actual installation.
+
+The reason to do the mapping and l10n of the dpkg states to human
+readable (and translatable) strings is that this way the translation
+needs to be done only once for all front-ends.
+
+
+pmstatus
+--------
+Status of the package manager (dpkg). This is send when packages
+are installed/removed.
+ pmstatus:pkgname:TotalPercentage:action-description
+
+* PkgName = the name of the package
+* TotalPercentage = the total progress between [0..100]
+* description = a i18ned human readable description of the current action
+
+Example:
+
+ # ./apt-get install -o APT::Status-Fd=2 3dchess >/dev/null
+ pmstatus:3dchess:20:Preparing 3dchess
+ pmstatus:3dchess:40:Unpacking 3dchess
+ pmstatus:3dchess:60:Preparing to configure 3dchess
+ pmstatus:3dchess:80:Configuring 3dchess
+ pmstatus:3dchess:100:Installed 3dchess
+
+pmerror
+-------
+ pmerror:deb:TotalPercentage:error string
+
+Example:
+
+ pmerror: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : 75% : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data
+
+
+pmconffile
+----------
+ pmconffile:conffile:percent:'current-conffile' 'new-conffile' useredited distedited
+
+
+media-change
+------------
+ media-change:medium:drive:human-readable string
+
+Example:
+
+ media-change: Ubuntu 5.10 _Breezy Badger_ - Alpha i386 (20050830):/cdrom/:Please insert the disc labeled: 'Ubuntu 5.10 _Breezy Badger_ - Alpha i386 (20050830)' in the drive '/cdrom/' and press enter.
+
+
+dlstatus
+--------
+ dlstatus:AlreadDownloaded:TotalPercentage:action-description
+
+* AlreadyDownloaded = the number of already downloaded packages
+* TotalPercentage = the total progress between [0..100]
+* description = a i18ned human readable description of the current action
+
+Example:
+
+ dlstatus:1:9.05654:Downloading file 1 of 3 (4m40s remaining)
+ dlstatus:1:9.46357:Downloading file 1 of 3 (4m39s remaining)
+ dlstatus:1:9.61022:Downloading file 1 of 3 (4m38s remaining)
diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml
new file mode 100644
index 0000000..3021549
--- /dev/null
+++ b/doc/sources.list.5.xml
@@ -0,0 +1,586 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % aptent SYSTEM "apt.ent"> %aptent;
+<!ENTITY % aptverbatiment SYSTEM "apt-verbatim.ent"> %aptverbatiment;
+<!ENTITY % aptvendor SYSTEM "apt-vendor.ent"> %aptvendor;
+]>
+
+<refentry>
+
+ <refentryinfo>
+ &apt-author.jgunthorpe;
+ &apt-author.team;
+ &apt-email;
+ &apt-product;
+ <!-- The last update date -->
+ <date>2018-08-17T00:00:00Z</date>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>sources.list</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="manual">APT</refmiscinfo>
+ </refmeta>
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>sources.list</refname>
+ <refpurpose>List of configured APT data sources</refpurpose>
+ </refnamediv>
+
+ <refsect1><title>Description</title>
+ <para>
+ The source list <filename>/etc/apt/sources.list</filename> and the
+ files contained in <filename>/etc/apt/sources.list.d/</filename> are
+ designed to support any number of active sources and a variety of source
+ media. The files list one source per line (one-line style) or contain multiline
+ stanzas defining one or more sources per stanza (deb822 style), with the
+ most preferred source listed first (in case a single version is
+ available from more than one source). The information available from the
+ configured sources is acquired by <command>apt-get update</command> (or
+ by an equivalent command from another APT front-end).
+ </para>
+ </refsect1>
+
+ <refsect1><title>sources.list.d</title>
+ <para>The <filename>/etc/apt/sources.list.d</filename> directory provides
+ a way to add sources.list entries in separate files.
+ Two different file formats are allowed as described in the next two sections.
+ Filenames need to have either the extension <filename>.list</filename> or
+ <filename>.sources</filename> depending on the contained format.
+ The filenames may only contain letters (a-z and A-Z),
+ digits (0-9), underscore (_), hyphen (-) and period (.) characters.
+ Otherwise APT will print a notice that it has ignored a file, unless that
+ file matches a pattern in the <literal>Dir::Ignore-Files-Silently</literal>
+ configuration list - in which case it will be silently ignored.</para>
+ </refsect1>
+
+ <refsect1><title>One-Line-Style Format</title>
+ <para>
+ Files in this format have the extension <filename>.list</filename>.
+ Each line specifying a source starts with a type (e.g. <literal>deb-src</literal>)
+ followed by options and arguments for this type.
+
+ Individual entries cannot be continued onto a following line. Empty lines
+ are ignored, and a <literal>#</literal> character anywhere on a line marks
+ the remainder of that line as a comment. Consequently an entry can be
+ disabled by commenting out the entire line.
+
+ If options should be provided they are separated by spaces and all of
+ them together are enclosed by square brackets (<literal>[]</literal>)
+ included in the line after the type separated from it with a space.
+ If an option allows multiple values these are separated from each other
+ with a comma (<literal>,</literal>). An option name is separated from its
+ value(s) by an equals sign (<literal>=</literal>). Multivalue options also
+ have <literal>-=</literal> and <literal>+=</literal> as separators, which
+ instead of replacing the default with the given value(s) modify the default
+ value(s) to remove or include the given values.
+ </para><para>
+ This is the traditional format and supported by all apt versions.
+ Note that not all options as described below are supported by all apt versions.
+ Note also that some older applications parsing this format on their own might not
+ expect to encounter options as they were uncommon before the introduction of
+ multi-architecture support.
+ </para>
+ </refsect1>
+
+ <refsect1><title>deb822-Style Format</title>
+ <para>
+ Files in this format have the extension <filename>.sources</filename>.
+ The format is similar in syntax to other files used by Debian and its
+ derivatives, such as the metadata files that apt will download from the configured
+ sources or the <filename>debian/control</filename> file in a Debian source package.
+
+ Individual entries are separated by an empty line; additional empty
+ lines are ignored, and a <literal>#</literal> character at the start of
+ the line marks the entire line as a comment. An entry can hence be
+ disabled by commenting out each line belonging to the stanza, but it is
+ usually easier to add the field "Enabled: no" to the stanza to disable
+ the entry. Removing the field or setting it to yes re-enables it.
+
+ Options have the same syntax as every other field: A fieldname separated by
+ a colon (<literal>:</literal>) and optionally spaces from its value(s).
+ Note especially that multiple values are separated by whitespaces (like spaces,
+ tabs and newlines), not by commas as in the one-line format.
+
+ Multivalue fields like <literal>Architectures</literal> also have
+ <literal>Architectures-Add</literal> and <literal>Architectures-Remove</literal>
+ to modify the default value rather than replacing it.
+ </para><para>
+ This is a new format supported by apt itself since version 1.1. Previous
+ versions ignore such files with a notice message as described earlier.
+ It is intended to make this format gradually the default format,
+ deprecating the previously described one-line-style format, as it is
+ easier to create, extend and modify for humans and machines alike
+ especially if a lot of sources and/or options are involved.
+
+ Developers who are working with and/or parsing apt sources are highly
+ encouraged to add support for this format and to contact the APT team
+ to coordinate and share this work. Users can freely adopt this format
+ already, but may encounter problems with software not supporting
+ the format yet.
+ </para>
+ </refsect1>
+
+ <refsect1><title>The deb and deb-src Types: General Format</title>
+ <para>The <literal>deb</literal> type references a typical two-level Debian
+ archive, <filename>distribution/component</filename>. The
+ <literal>distribution</literal> is generally a suite name like
+ <literal>stable</literal> or <literal>testing</literal> or a codename like
+ <literal>&debian-stable-codename;</literal> or <literal>&debian-testing-codename;</literal>
+ while component is one of <literal>main</literal>, <literal>contrib</literal> or
+ <literal>non-free</literal>. The
+ <literal>deb-src</literal> type references a Debian distribution's source
+ code in the same form as the <literal>deb</literal> type.
+ A <literal>deb-src</literal> line is required to fetch source indexes.</para>
+
+ <para>The format for two one-line-style entries using the
+ <literal>deb</literal> and <literal>deb-src</literal> types is:</para>
+
+ <literallayout>deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]
+deb-src [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]</literallayout>
+
+ <para>Alternatively the equivalent entry in deb822 style looks like this:
+ <literallayout>
+ Types: deb deb-src
+ URIs: uri
+ Suites: suite
+ Components: [component1] [component2] [...]
+ option1: value1
+ option2: value2
+ </literallayout>
+ </para>
+
+ <para>The URI for the <literal>deb</literal> type must specify the base of the
+ Debian distribution, from which APT will find the information it needs.
+ <literal>suite</literal> can specify an exact path, in which case the
+ components must be omitted and <literal>suite</literal> must end with
+ a slash (<literal>/</literal>). This is useful for the case when only a
+ particular sub-directory of the archive denoted by the URI is of interest.
+ If <literal>suite</literal> does not specify an exact path, at least
+ one <literal>component</literal> must be present.</para>
+
+ <para><literal>suite</literal> may also contain a variable,
+ <literal>$(ARCH)</literal>
+ which expands to the Debian architecture (such as <literal>amd64</literal> or
+ <literal>armel</literal>) used on the system. This permits architecture-independent
+ <filename>sources.list</filename> files to be used. In general this is only
+ of interest when specifying an exact path; <literal>APT</literal> will
+ automatically generate a URI with the current architecture otherwise.</para>
+
+ <para>Especially in the one-line-style format since only one distribution
+ can be specified per line it may be necessary to have multiple lines for
+ the same URI, if a subset of all available distributions or components at
+ that location is desired. APT will sort the URI list after it has
+ generated a complete set internally, and will collapse multiple
+ references to the same Internet host, for instance, into a single
+ connection, so that it does not inefficiently establish a
+ connection, close it, do something else, and then re-establish a
+ connection to that same host. APT also parallelizes connections to
+ different hosts to more effectively deal with sites with low
+ bandwidth.</para>
+
+ <para>It is important to list sources in order of preference, with the most
+ preferred source listed first. Typically this will result in sorting
+ by speed from fastest to slowest (CD-ROM followed by hosts on a local
+ network, followed by distant Internet hosts, for example).</para>
+
+ <para>As an example, the sources for your distribution could look like this
+ in one-line-style format:
+ <literallayout>&sourceslist-list-format;</literallayout> or like this in
+ deb822 style format:
+ <literallayout>&sourceslist-sources-format;</literallayout></para>
+ </refsect1>
+
+ <refsect1><title>The deb and deb-src types: Options</title>
+ <para>Each source entry can have options specified to modify which source
+ is accessed and how data is acquired from it. Format, syntax and names
+ of the options vary between the one-line-style and deb822-style formats
+ as described, but they both have the same options available. For simplicity
+ we list the deb822 fieldname and provide the one-line name in brackets.
+ Remember that besides setting multivalue options explicitly, there is also
+ the option to modify them based on the default, but we aren't listing those
+ names explicitly here. Unsupported options are silently ignored by all
+ APT versions.
+
+ <itemizedlist>
+ <listitem><para><option>Architectures</option>
+ (<option>arch</option>) is a multivalue option defining for
+ which architectures information should be downloaded. If this
+ option isn't set the default is all architectures as defined by
+ the <option>APT::Architectures</option> config option.
+ </para></listitem>
+
+ <listitem><para><option>Languages</option>
+ (<option>lang</option>) is a multivalue option defining for
+ which languages information such as translated package
+ descriptions should be downloaded. If this option isn't set
+ the default is all languages as defined by the
+ <option>Acquire::Languages</option> config option.
+ </para></listitem>
+
+ <listitem><para><option>Targets</option>
+ (<option>target</option>) is a multivalue option defining
+ which download targets apt will try to acquire from this
+ source. If not specified, the default set is defined by the
+ <option>Acquire::IndexTargets</option> configuration scope
+ (targets are specified by their name in the
+ <literal>Created-By</literal> field).
+ Additionally, targets can be enabled or disabled by using the
+ <literal>Identifier</literal> field as an option with a boolean
+ value instead of using this multivalue option.
+ </para></listitem>
+
+ <listitem><para><option>PDiffs</option> (<option>pdiffs</option>)
+ is a yes/no value which controls if APT should try to use PDiffs
+ to update old indexes instead of downloading the new indexes
+ entirely. The value of this option is ignored if the repository
+ doesn't announce the availability of PDiffs. Defaults to the
+ value of the option with the same name for a specific index file
+ defined in the <option>Acquire::IndexTargets</option> scope,
+ which itself defaults to the value of configuration option
+ <option>Acquire::PDiffs</option> which defaults to
+ <literal>yes</literal>.
+ </para></listitem>
+
+ <listitem><para><option>By-Hash</option> (<option>by-hash</option>)
+ can have the value <literal>yes</literal>, <literal>no</literal>
+ or <literal>force</literal> and controls if APT should try to
+ acquire indexes via a URI constructed from a hashsum of the
+ expected file instead of using the well-known stable filename
+ of the index. Using this can avoid hashsum mismatches, but
+ requires a supporting mirror. A <literal>yes</literal> or
+ <literal>no</literal> value activates/disables the use of this
+ feature if this source indicates support for it, while
+ <literal>force</literal> will enable the feature regardless of
+ what the source indicates. Defaults to the value of the option
+ of the same name for a specific index file defined in the
+ <option>Acquire::IndexTargets</option> scope, which itself
+ defaults to the value of configuration option
+ <option>Acquire::By-Hash</option> which defaults to
+ <literal>yes</literal>.
+ </para></listitem>
+
+ </itemizedlist>
+
+ Furthermore, there are options which if set affect
+ <emphasis>all</emphasis> sources with the same URI and Suite, so they
+ have to be set on all such entries and can not be varied between
+ different components. APT will try to detect and error out on such
+ anomalies.
+
+ <itemizedlist>
+ <listitem><para><option>Allow-Insecure</option> (<option>allow-insecure</option>),
+ <option>Allow-Weak</option> (<option>allow-weak</option>) and
+ <option>Allow-Downgrade-To-Insecure</option> (<option>allow-downgrade-to-insecure</option>)
+ are boolean values which all default to <literal>no</literal>.
+ If set to <literal>yes</literal> they circumvent parts of &apt-secure;
+ and should therefore not be used lightly!
+ </para></listitem>
+
+ <listitem><para><option>Trusted</option> (<option>trusted</option>)
+ is a tri-state value which defaults to APT deciding if a source
+ is considered trusted or if warnings should be raised before e.g.
+ packages are installed from this source. This option can be used
+ to override that decision. The value <literal>yes</literal> tells APT
+ always to consider this source as trusted, even if it doesn't pass
+ authentication checks. It disables parts of &apt-secure;, and should
+ therefore only be used in a local and trusted context (if at all) as
+ otherwise security is breached. The value <literal>no</literal> does
+ the opposite, causing the source to be handled as untrusted even if
+ the authentication checks passed successfully. The default value can't
+ be set explicitly.
+ </para></listitem>
+
+ <listitem><para><option>Signed-By</option> (<option>signed-by</option>)
+ is an option to require a repository to pass &apt-secure; verification
+ with a certain set of keys rather than all trusted keys apt has configured.
+ It is specified as a list of absolute paths to keyring files (have to be
+ accessible and readable for the <literal>_apt</literal> system user,
+ so ensure everyone has read-permissions on the file) and fingerprints
+ of keys to select from these keyrings. If no keyring files are specified
+ the default is the <filename>trusted.gpg</filename> keyring and
+ all keyrings in the <filename>trusted.gpg.d/</filename> directory
+ (see <command>apt-key fingerprint</command>). If no fingerprint is
+ specified all keys in the keyrings are selected. A fingerprint will
+ accept also all signatures by a subkey of this key, if this isn't
+ desired an exclamation mark (<literal>!</literal>) can be appended to
+ the fingerprint to disable this behaviour.
+ The option defaults to the value of the option with the same name
+ if set in the previously acquired <filename>Release</filename> file
+ of this repository (only fingerprints can be specified there through).
+ Otherwise all keys in the trusted keyrings are considered valid
+ signers for this repository.
+ </para></listitem>
+
+ <listitem><para><option>Check-Valid-Until</option> (<option>check-valid-until</option>)
+ is a yes/no value which controls if APT should try to detect
+ replay attacks. A repository creator can declare a time until
+ which the data provided in the repository should be considered valid,
+ and if this time is reached, but no new data is provided, the data
+ is considered expired and an error is raised. Besides
+ increasing security, as a malicious attacker can't send old data
+ forever to prevent a user from upgrading to a new version,
+ this also helps users identify mirrors which are no longer
+ updated. However, some repositories such as historic archives
+ are not updated any more by design, so this check can be
+ disabled by setting this option to <literal>no</literal>.
+ Defaults to the value of configuration option
+ <option>Acquire::Check-Valid-Until</option> which itself
+ defaults to <literal>yes</literal>.
+ </para></listitem>
+
+ <listitem><para><option>Valid-Until-Min</option>
+ (<option>valid-until-min</option>) and
+ <option>Valid-Until-Max</option>
+ (<option>valid-until-max</option>) can be used to raise or
+ lower the time period in seconds in which the data from this
+ repository is considered valid. -Max can be especially useful
+ if the repository provides no Valid-Until field on its Release
+ file to set your own value, while -Min can be used to increase
+ the valid time on seldom updated (local) mirrors of a more
+ frequently updated but less accessible archive (which is in the
+ sources.list as well) instead of disabling the check entirely.
+ Default to the value of the configuration options
+ <option>Acquire::Min-ValidTime</option> and
+ <option>Acquire::Max-ValidTime</option> which are both unset by
+ default.
+ </para></listitem>
+
+ <listitem><para><option>Check-Date</option> (<option>check-date</option>)
+ is a yes/no value which controls if APT should consider
+ the machine's time correct and hence perform time related
+ checks, such as verifying that a Release file is not
+ from the future. Disabling it also disables the
+ <option>Check-Valid-Until</option> option
+ mentioned above.
+ </para></listitem>
+
+ <listitem><para><option>Date-Max-Future</option>
+ (<option>date-max-future</option>) controls how far
+ from the future a repository may be.
+ Default to the value of the configuration option
+ <option>Acquire::Max-FutureTime</option> which is
+ 10 seconds by default.
+ </para></listitem>
+
+ <listitem><para><option>InRelease-Path</option> (<option>inrelease-path</option>)
+ determines the path to the InRelease file, relative
+ to the normal position of an <filename>InRelease</filename> file.
+ By default, this option is unset and APT will try to fetch an <filename>InRelease</filename>
+ or, if that fails, a <filename>Release</filename> file and its associated <filename>Release.gpg</filename> file. By setting this option,
+ the specified path will be tried instead of the InRelease file,
+ and the fallback to <filename>Release</filename> files will be disabled.
+ </para></listitem>
+
+ </itemizedlist>
+
+ </para>
+ </refsect1>
+
+ <refsect1><title>URI Specification</title>
+
+ <para>The currently recognized URI types are:
+ <variablelist>
+ <varlistentry><term><command>http</command> (&apt-transport-http;)</term>
+ <listitem><para>
+ The http scheme specifies an HTTP server for an archive and is the most
+ commonly used method. The URI can directly include login information if the
+ archive requires it, but the use of &apt-authconf; should be preferred.
+ The method also supports SOCKS5 and HTTP(S) proxies either configured via
+ apt-specific configuration or specified by the environment variable
+ <envar>http_proxy</envar> in the format (assuming an HTTP proxy requiring
+ authentication) <replaceable>http://user:pass@server:port/</replaceable>.
+ The authentication details for proxies can also be supplied via
+ &apt-authconf;.</para>
+ <para>Note that these forms of authentication are insecure as the whole
+ communication with the remote server (or proxy) is not encrypted so a
+ sufficiently capable attacker can observe and record login as well as all
+ other interactions. The attacker can <emphasis>not</emphasis> modify the
+ communication through as APTs data security model is independent of the
+ chosen transport method. See &apt-secure; for details.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><command>https</command> (&apt-transport-https;)</term>
+ <listitem><para>
+ The https scheme specifies an HTTPS server for an archive and is very
+ similar in use and available options to the http scheme. The main
+ difference is that the communication between apt and server (or proxy) is
+ encrypted. Note that the encryption does not prevent an attacker from
+ knowing which server (or proxy) apt is communicating with and deeper
+ analysis can potentially still reveal which data was downloaded. If this is
+ a concern the Tor-based schemes mentioned further below might be a suitable
+ alternative.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><command>mirror</command>, <command>mirror+<replaceable>scheme</replaceable></command> (&apt-transport-mirror;)</term>
+ <listitem><para>
+ The mirror scheme specifies the location of a mirrorlist. By default the
+ scheme used for the location is <literal>http</literal>, but any other
+ scheme can be used via <command>mirror+<replaceable>scheme</replaceable></command>.
+ The mirrorlist itself can contain many different URIs for mirrors the APT client
+ can transparently pick, choose and fallback between intended to help both
+ with distributing the load over the available mirrors and ensuring that
+ clients can acquire data even if some configured mirrors are not available.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><command>file</command></term>
+ <listitem><para>
+ The file scheme allows an arbitrary directory in the file system to be
+ considered an archive. This is useful for NFS mounts and local mirrors or
+ archives.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><command>cdrom</command></term>
+ <listitem><para>
+ The cdrom scheme allows APT to use a local CD-ROM, DVD or USB drive with media
+ swapping. Use the &apt-cdrom; program to create cdrom entries in the
+ source list.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><command>ftp</command></term>
+ <listitem><para>
+ The ftp scheme specifies an FTP server for an archive. Use of FTP is on the
+ decline in favour of <literal>http</literal> and <literal>https</literal>
+ and many archives either never offered or are retiring FTP access. If you
+ still need this method many configuration options for it are available in
+ the <literal>Acquire::ftp</literal> scope and detailed in &apt-conf;.</para>
+ <para>Please note that an FTP proxy can be specified
+ by using the <envar>ftp_proxy</envar> environment variable. It is possible
+ to specify an HTTP proxy (HTTP proxy servers often understand FTP URLs)
+ using this environment variable and <emphasis>only</emphasis> this
+ environment variable. Proxies using HTTP specified in
+ the configuration file will be ignored.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><command>copy</command></term>
+ <listitem><para>
+ The copy scheme is identical to the file scheme except that packages are
+ copied into the cache directory instead of used directly at their location.
+ This is useful for people using removable media to copy files around with APT.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><command>rsh</command></term><term><command>ssh</command></term>
+ <listitem><para>
+ The rsh/ssh method invokes RSH/SSH to connect to a remote host and
+ access the files as a given user. Prior configuration of rhosts or RSA keys
+ is recommended. The standard <command>find</command> and <command>dd</command>
+ commands are used to perform the file transfers from the remote host.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term>adding more recognizable URI types</term>
+ <listitem><para>
+ APT can be extended with more methods shipped in other optional packages, which should
+ follow the naming scheme <package>apt-transport-<replaceable>method</replaceable></package>.
+ For instance, the APT team also maintains the package <package>apt-transport-tor</package>,
+ which provides access methods for HTTP and HTTPS URIs routed via the Tor network.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1><title>Examples</title>
+ <para>Uses the archive stored locally (or NFS mounted) at /home/apt/debian
+ for stable/main, stable/contrib, and stable/non-free.</para>
+ <literallayout>deb file:/home/apt/debian stable main contrib non-free</literallayout>
+ <literallayout>Types: deb
+URIs: file:/home/apt/debian
+Suites: stable
+Components: main contrib non-free</literallayout>
+
+ <para>As above, except this uses the unstable (development) distribution.</para>
+ <literallayout>deb file:/home/apt/debian unstable main contrib non-free</literallayout>
+ <literallayout>Types: deb
+URIs: file:/home/apt/debian
+Suites: unstable
+Components: main contrib non-free</literallayout>
+
+ <para>Sources specification for the above.</para>
+ <literallayout>deb-src file:/home/apt/debian unstable main contrib non-free</literallayout>
+ <literallayout>Types: deb-src
+URIs: file:/home/apt/debian
+Suites: unstable
+Components: main contrib non-free</literallayout>
+
+ <para>The first line gets package information for the architectures in <literal>APT::Architectures</literal>
+ while the second always retrieves <literal>amd64</literal> and <literal>armel</literal>.</para>
+ <literallayout>deb http://deb.debian.org/debian &debian-stable-codename; main
+deb [ arch=amd64,armel ] http://deb.debian.org/debian &debian-stable-codename; main</literallayout>
+ <literallayout>Types: deb
+URIs: http://deb.debian.org/debian
+Suites: &debian-stable-codename;
+Components: main
+
+Types: deb
+URIs: http://deb.debian.org/debian
+Suites: &debian-stable-codename;
+Components: main
+Architectures: amd64 armel
+</literallayout>
+
+ <para>Uses HTTP to access the archive at archive.debian.org, and uses only
+ the hamm/main area.</para>
+ <literallayout>deb http://archive.debian.org/debian-archive hamm main</literallayout>
+ <literallayout>Types: deb
+URIs: http://archive.debian.org/debian-archive
+Suites: hamm
+Components: main</literallayout>
+
+ <para>Uses FTP to access the archive at ftp.debian.org, under the debian
+ directory, and uses only the &debian-stable-codename;/contrib area.</para>
+ <literallayout>deb ftp://ftp.debian.org/debian &debian-stable-codename; contrib</literallayout>
+ <literallayout>Types: deb
+URIs: ftp://ftp.debian.org/debian
+Suites: &debian-stable-codename;
+Components: contrib</literallayout>
+
+ <para>Uses FTP to access the archive at ftp.debian.org, under the debian
+ directory, and uses only the unstable/contrib area. If this line appears as
+ well as the one in the previous example in <filename>sources.list</filename>
+ a single FTP session will be used for both resource lines.</para>
+ <literallayout>deb ftp://ftp.debian.org/debian unstable contrib</literallayout>
+ <literallayout>Types: deb
+URIs: ftp://ftp.debian.org/debian
+Suites: unstable
+Components: contrib</literallayout>
+
+ <para>Uses HTTP to access the archive at ftp.tlh.debian.org, under the
+ universe directory, and uses only files found under
+ <filename>unstable/binary-i386</filename> on i386 machines,
+ <filename>unstable/binary-amd64</filename> on amd64, and so
+ forth for other supported architectures. [Note this example only
+ illustrates how to use the substitution variable; official debian
+ archives are not structured like this]
+ <literallayout>deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/</literallayout>
+ <literallayout>Types: deb
+URIs: http://ftp.tlh.debian.org/universe
+Suites: unstable/binary-$(ARCH)/</literallayout>
+ </para>
+
+ <para>Uses HTTP to get binary packages as well as sources from the stable, testing and unstable
+ suites and the components main and contrib.</para>
+ <literallayout>deb http://deb.debian.org/debian stable main contrib
+deb-src http://deb.debian.org/debian stable main contrib
+deb http://deb.debian.org/debian testing main contrib
+deb-src http://deb.debian.org/debian testing main contrib
+deb http://deb.debian.org/debian unstable main contrib
+deb-src http://deb.debian.org/debian unstable main contrib</literallayout>
+ <literallayout>Types: deb deb-src
+URIs: http://deb.debian.org/debian
+Suites: stable testing unstable
+Components: main contrib
+</literallayout>
+
+ </refsect1>
+
+ <refsect1><title>See Also</title>
+ <para>&apt-get;, &apt-conf;, &apt-acquire-additional-files;</para>
+ </refsect1>
+
+ &manbugs;
+
+</refentry>
diff --git a/doc/srv-records-support.md b/doc/srv-records-support.md
new file mode 100644
index 0000000..004811c
--- /dev/null
+++ b/doc/srv-records-support.md
@@ -0,0 +1,22 @@
+DNS SRV record support in apt
+=============================
+
+Apt supports a subset of the DNS SRV server records protocol as
+described in [RFC 2782](https://tools.ietf.org/html/rfc2782) for service discovery.
+
+Before connecting to the requested server APT will send a SRV
+record request of the form `_$protocol._tcp._$host`, e.g.
+`_http._tcp.ftp.debian.org` or `_http._tcp.security.debian.org`.
+
+If the server sends SRV records
+as a reply APT will use those to connect to the server(s) in
+this reply. It will honor the `priority` field in the reply.
+
+However it does not implement the `weight` algorithm as described
+in RFC 2782. It will use an equal weight for each server of the
+same priority.
+
+If connecting to a server fails APT will retry with the next one
+and remove the server from the list of valid servers for this
+session.
+
diff --git a/doc/style.txt b/doc/style.txt
new file mode 100644
index 0000000..cd5f8b6
--- /dev/null
+++ b/doc/style.txt
@@ -0,0 +1,75 @@
+Acronyms
+~~~~~~~~
+* dpkg is a 'word' the first d may be upper case - Dpkg
+* APT is a proper Acronym, all upper case please.
+
+Pkg - A Package
+Ver - A version
+
+Indenting, Comments, Etc
+~~~~~~~~~~~~~~~~~~~~~~~~
+Would make Linus cry :P However it is what I prefer. 3 space indent,
+8 space tab all braces on separate lines, function return on the same line
+as the function, cases aligned with their code. The 'indent' options for
+this style are:
+ indent -bl -bli0 -di1 -i3 -nsc -ts8 -npcs -npsl
+
+Each file gets a block at the top that should describe what the file does,
+basically a summary of purpose along with any special notes and
+attributions. The }}} and {{{ are folding marks if you have a folding
+editor such as jed, the function separators are intended to give
+a visual separate between functions for easier browsing of the larger files,
+or indexed folding if you have such an editor.
+
+Each file should have 1 or 0 primary include files, that include
+file must always be the first include file included by the .cc. G++
+#pragma interface/implementation is used, as well as anti-include-twice
+#ifdefs.
+
+Include files, since there are so many, get their own subdirectory off
+the include search path, this is used consistently throughout all the code.
+#include "" should never be used for a global exported header file, only
+local ones.
+
+C++ Features
+~~~~~~~~~~~~
+Due to the legacy compiler heritage, exceptions, RTTI and name spaces are
+not used. Templates are used *sparingly* since G++ has traditionally had
+very weak support for them, this includes STL templates.
+
+Namespaces will probably be put in the code sometime after G++ 3, which will
+be a huge re-org again to make sanity, the majority of all nested things
+will go away.
+
+The C++ standard library's non parameterized types (string is included in
+this) are used freely when appropriate.
+
+The new C++ #include <iostream> (note the lack of a .h) is used for the
+standard library, but not for my code.
+
+Arguments and Ownership
+~~~~~~~~~~~~~~~~~~~~~~~
+[much of the code follows this now]
+These guidelines should be followed except in two cases.. the first
+is where it makes no sense, such as in a casting operator and the second is to
+retain API compatibility (this should be rare, since a change in the input
+almost always designates a change in ownership rules).
+
+ * Pass by value or pass by reference should borrow the object from the
+ caller
+ * Pass by non-const reference may be used to indicate a OUT type variable
+ * Pass by pointer (except in the case where the pointer is really an array)
+ should be used when the object will be retained or ownership will be
+ transferred. Ownership transference should be rare and noted by a comment.
+ * Standard C things (FILE * etc) should be left as is.
+
+ * Return by references should indicate a borrowed object
+ * Return by pointer (except arrays) should indicate ownership is
+ transferred. Return by pointer should not be used unless ownership is
+ transferred.
+ * Return by pointer to variable indicates ownership transfer unless the
+ pointer is an 'input' parameter (designated generally by an =0,
+ indicating a default of 'none')
+
+Non-ownership transferring arrays/lists should probably return an iterator
+typedef or references..
diff --git a/doc/xml.add b/doc/xml.add
new file mode 100644
index 0000000..9311c05
--- /dev/null
+++ b/doc/xml.add
@@ -0,0 +1,5 @@
+PO4A-HEADER:mode=after;position=manbugs;beginboundary=^</refentry>
+ <refsect1><title>&translation-title;</title>
+ <para>&translation-holder;</para>
+ <para>&translation-english;</para>
+ </refsect1>
diff --git a/dselect/CMakeLists.txt b/dselect/CMakeLists.txt
new file mode 100644
index 0000000..804306e
--- /dev/null
+++ b/dselect/CMakeLists.txt
@@ -0,0 +1,4 @@
+install(PROGRAMS install setup update
+ DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/dpkg/methods/apt)
+install(FILES desc.apt names
+ DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/dpkg/methods/apt)
diff --git a/dselect/desc.apt b/dselect/desc.apt
new file mode 100644
index 0000000..5601919
--- /dev/null
+++ b/dselect/desc.apt
@@ -0,0 +1,9 @@
+The APT installation method encompasses most other installation methods
+under the umbrella of the new Package Acquisition code. This method allows
+installation from locations in the filesystem, ftp and http URLs, supports
+full installation ordering and dependency checking as well as multiple
+sources. See the man pages apt-get(8) and sources.list(5)
+
+HTTP proxies can be used by setting http_proxy="http://proxy:port/" before
+running DSelect. FTP proxies require special configuration detailed in
+the apt.conf(5) man page (see /usr/share/doc/apt/examples/apt.conf)
diff --git a/dselect/install b/dselect/install
new file mode 100755
index 0000000..75f0c0f
--- /dev/null
+++ b/dselect/install
@@ -0,0 +1,111 @@
+#!/bin/bash
+
+# Set the textdomain for the translations using $"..."
+TEXTDOMAIN="apt"
+
+# Get the configuration from /etc/apt/apt.conf
+CLEAN="prompt"
+OPTS=""
+DSELECT_UPGRADE_OPTS="-f"
+APTGET="/usr/bin/apt-get"
+DPKG="/usr/bin/dpkg"
+DPKG_OPTS="--admindir=$1"
+APT_OPT0="-oDir::State::status=$1/status"
+APT_OPT1="-oDPkg::Options::=$DPKG_OPTS"
+set -e
+RES=$(apt-config shell CLEAN DSelect::Clean OPTS DSelect::Options \
+ DPKG Dir::Bin::dpkg/f APTGET Dir::Bin::apt-get/f \
+ ARCHIVES Dir::Cache::Archives/d \
+ WAIT DSelect::WaitAfterDownload/b \
+ CHECKDIR DSelect::CheckDir/b)
+eval $RES
+set +e
+
+# Yes/No Prompter
+yesno() {
+# $1 = prompt
+# $2 = default(y)
+ local ans def defp
+ if [ "$2" ];then
+ case $2 in
+ Y|y) defp="[Y/n]" def=y;;
+ N|n) defp="[y/N]" def=n;;
+ *) echo $"Bad default setting!" 1>&2; exit 1;;
+ esac
+ else
+ defp="[y/N]" def=n
+ fi
+ while :;do
+ echo -n "$1 $defp " 1>&3
+ read ans
+ case $ans in
+ Y|y|N|n) break;;
+ "") ans=$def;break;;
+ esac
+ echo
+ done
+ echo $ans | tr YN yn
+}
+
+if [ "$WAIT" = "true" ]; then
+ $APTGET $DSELECT_UPGRADE_OPTS $OPTS "$APT_OPT0" "$APT_OPT1" -d dselect-upgrade
+ echo $"Press [Enter] to continue." && read RES
+ $APTGET $DSELECT_UPGRADE_OPTS $OPTS "$APT_OPT0" "$APT_OPT1" dselect-upgrade
+ RES=$?
+else
+ $APTGET $DSELECT_UPGRADE_OPTS $OPTS "$APT_OPT0" "$APT_OPT1" dselect-upgrade
+ RES=$?
+fi
+
+# 1 means the user choose no at the prompt
+if [ $RES -eq 1 ]; then
+ exit 0
+fi
+
+# Finished OK
+if [ $RES -eq 0 ]; then
+
+ if [ $(ls $ARCHIVES $ARCHIVES/partial | grep -E -v "^lock$|^partial$" | wc -l) \
+ -eq 0 ]; then
+ exit 0
+ fi
+
+ NEWLS=$(ls -ld $ARCHIVES)
+ if [ "$CHECKDIR" = "true" ]; then
+ if [ "$OLDLS" = "$NEWLS" ]; then
+ exit 0
+ fi
+ fi
+
+ # Check the cleaning mode
+ case $(echo $CLEAN | tr '[:upper:]' '[:lower:]') in
+ auto)
+ $APTGET "$APT_OPT0" "$APT_OPT1" autoclean &&
+ echo $"Press [Enter] to continue." && read RES && exit 0;
+ ;;
+ always)
+ $APTGET "$APT_OPT0" "$APT_OPT1" clean &&
+ echo $"Press [Enter] to continue." && read RES && exit 0;
+ ;;
+ prompt)
+ exec 3>&1
+ echo -n $"Do you want to erase any previously downloaded .deb files?"
+ if [ $(yesno "" y) = y ]; then
+ $APTGET "$APT_OPT0" "$APT_OPT1" clean &&
+ echo $"Press [Enter] to continue." && read RES && exit 0;
+ fi
+ ;;
+ *)
+ ;;
+ esac
+else
+ echo $"Some errors occurred while unpacking. Packages that were installed"
+ echo $"will be configured. This may result in duplicate errors"
+ echo $"or errors caused by missing dependencies. This is OK, only the errors"
+ echo $"above this message are important. Please fix them and run [I]nstall again"
+ echo $"Press [Enter] to continue."
+ read RES && $DPKG "$DPKG_OPTS" --configure -a
+ exit 100
+fi
+
+exit $?
diff --git a/dselect/names b/dselect/names
new file mode 100644
index 0000000..8daa537
--- /dev/null
+++ b/dselect/names
@@ -0,0 +1 @@
+70 apt APT Acquisition [file,http,ftp]
diff --git a/dselect/setup b/dselect/setup
new file mode 100755
index 0000000..8689d23
--- /dev/null
+++ b/dselect/setup
@@ -0,0 +1,286 @@
+#!/usr/bin/perl -w
+# -*- Mode: Perl -*-
+# setup.pl ---
+# Author : Manoj Srivastava ( srivasta@tiamat.datasync.com )
+# Created On : Wed Mar 4 15:11:47 1998
+# Created On Node : tiamat.datasync.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Tue May 19 11:25:32 1998
+# Last Machine Used: tiamat.datasync.com
+# Update Count : 87
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+# This file is designed to go into /usr/lib/apt/methods/setup
+#
+
+#use strict;
+#use diagnostics;
+#printf STDERR "DEBUG: Arguments $ARGV[0];$ARGV[1];$ARGV[2];\n";
+
+
+# Handle the arguments
+my $vardir=$ARGV[0];
+my $method=$ARGV[1];
+my $option=$ARGV[2];
+my $config_file = '/etc/apt/sources.list';
+
+my $boldon=`setterm -bold on`;
+my $boldoff=`setterm -bold off`;
+
+my @known_types = ('deb');
+my @known_access = ('http', 'ftp', 'file');
+my @typical_distributions = ('stable', 'unstable', 'testing', 'non-US');
+my @typical_components = ('main', 'contrib', 'non-free');
+
+my %known_access = map {($_,$_)} @known_access;
+my %typical_distributions = map {($_,$_)} @typical_distributions;
+
+# Read the config file, creating source records
+sub read_config {
+ my %params = @_;
+ my @Config = ();
+
+ die "Required parameter Filename Missing" unless
+ $params{'Filename'};
+
+ open (CONFIG, "$params{'Filename'}") ||
+ die "Could not open $params{'Filename'}: $!";
+ while (<CONFIG>) {
+ chomp;
+ my $rec = {};
+ my ($type, $urn, $distribution, $components) =
+ m/^\s*(\S+)\s+(\S+)\s+(\S+)\s*(?:\s+(\S.*))?$/o;
+ $rec->{'Type'} = $type;
+ $rec->{'URN'} = $urn;
+ $rec->{'Distribution'} = $distribution;
+ $rec->{'Components'} = $components;
+ push @Config, $rec;
+ }
+ close(CONFIG);
+
+ return @Config;
+}
+
+# write the config file; writing out the current set of source records
+sub write_config {
+ my %params = @_;
+ my $rec;
+ my %Seen = ();
+
+ die "Required parameter Filename Missing" unless
+ $params{'Filename'};
+ die "Required parameter Config Missing" unless
+ $params{'Config'};
+
+ open (CONFIG, ">$params{'Filename'}") ||
+ die "Could not open $params{'Filename'} for writing: $!";
+ for $rec (@{$params{'Config'}}) {
+ my $line = "$rec->{'Type'} $rec->{'URN'} $rec->{'Distribution'} ";
+ $line .= "$rec->{'Components'}" if $rec->{'Components'};
+ $line .= "\n";
+ print CONFIG $line unless $Seen{$line}++;
+ }
+ close(CONFIG);
+}
+
+# write the config file; writing out the current set of source records
+sub print_config {
+ my %params = @_;
+ my $rec;
+ my %Seen = ();
+
+ die "Required parameter Config Missing" unless
+ $params{'Config'};
+
+ for $rec (@{$params{'Config'}}) {
+ next unless $rec;
+
+ my $line = "$rec->{'Type'} " if $rec->{'Type'};
+ $line .= "$rec->{'URN'} " if $rec->{'URN'};
+ $line .= "$rec->{'Distribution'} " if $rec->{'Distribution'};
+ $line .= "$rec->{'Components'}" if $rec->{'Components'};
+ $line .= "\n";
+ print $line unless $Seen{$line}++;
+ }
+}
+
+# Ask for and add a source record
+sub get_source {
+ my %params = @_;
+ my $rec = {};
+ my $answer;
+ my ($type, $urn, $distribution, $components);
+
+ if ($params{'Default'}) {
+ ($type, $urn, $distribution, $components) =
+ $params{'Default'} =~ m/^\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S.*)$/o;
+ }
+
+ $type = 'deb';
+ $urn = "http://http.us.debian.org/debian" unless $urn;
+ $distribution = "stable" unless $distribution;
+ $components = "main contrib non-free" unless $components;
+
+
+ $rec->{'Type'} = 'deb';
+ $| = 1;
+
+ my $done = 0;
+
+ while (!$done) {
+ print "\n";
+ print "$boldon URL [$urn]: $boldoff";
+
+ $answer=<STDIN>;
+ chomp ($answer);
+ $answer =~ s/\s*//og;
+
+ if ($answer =~ /^\s*$/o) {
+ $rec->{'URN'} = $urn;
+ last;
+ }
+ else {
+ my ($scheme) = $answer =~ /^\s*([^:]+):/o;
+ if (! defined $known_access{$scheme}) {
+ print "Unknown access scheme $scheme in $answer\n";
+ print " The available access methods known to me are\n";
+ print join (' ', @known_access), "\n";
+ print "\n";
+ }
+ else {
+ $rec->{'URN'} = $answer;
+ last;
+ }
+ }
+ }
+
+ print "\n";
+
+ print " Please give the distribution tag to get or a path to the\n";
+ print " package file ending in a /. The distribution\n";
+ print " tags are typically something like:$boldon ";
+ print join(' ', @typical_distributions), "$boldoff\n";
+ print "\n";
+ print "$boldon Distribution [$distribution]:$boldoff ";
+ $answer=<STDIN>;
+ chomp ($answer);
+ $answer =~ s/\s*//og;
+
+ if ($answer =~ /^\s*$/o) {
+ $rec->{'Distribution'} = $distribution;
+ $rec->{'Components'} = &get_components($components);
+ }
+ elsif ($answer =~ m|/$|o) {
+ $rec->{'Distribution'} = "$answer";
+ $rec->{'Components'} = "";
+ }
+ else {
+ # A distribution tag, eh?
+ warn "$answer does not seem to be a typical distribution tag\n"
+ unless defined $typical_distributions{$answer};
+
+ $rec->{'Distribution'} = "$answer";
+ $rec->{'Components'} = &get_components($components);
+ }
+
+ return $rec;
+}
+
+sub get_components {
+ my $default = shift;
+ my $answer;
+
+ print "\n";
+ print " Please give the components to get\n";
+ print " The components are typically something like:$boldon ";
+ print join(' ', @typical_components), "$boldoff\n";
+ print "\n";
+ print "$boldon Components [$default]:$boldoff ";
+ $answer=<STDIN>;
+ chomp ($answer);
+ $answer =~ s/\s+/ /og;
+
+ if ($answer =~ /^\s*$/o) {
+ return $default;
+ }
+ else {
+ return $answer;
+ }
+}
+
+sub get_sources {
+ my @Config = ();
+ my $done = 0;
+
+ my @Oldconfig = ();
+
+ if (-e $config_file) {
+ @Oldconfig = &read_config('Filename' => $config_file)
+ }
+
+ print "\t$boldon Set up a list of distribution source locations $boldoff \n";
+ print "\n";
+
+ print " Please give the base URL of the debian distribution.\n";
+ print " The access schemes I know about are:$boldon ";
+ print join (' ', @known_access), "$boldoff\n";
+# print " The mirror scheme is special that it does not specify the\n";
+# print " location of a debian archive but specifies the location\n";
+# print " of a list of mirrors to use to access the archive.\n";
+ print "\n";
+ print " For example:\n";
+ print " file:/mnt/debian,\n";
+ print " ftp://ftp.debian.org/debian,\n";
+ print " http://ftp.de.debian.org/debian,\n";
+# print " and the special mirror scheme,\n";
+# print " mirror:http://www.debian.org/archivemirrors \n";
+ print "\n";
+
+ my $index = 0;
+ while (!$done) {
+ if ($Oldconfig[$index]) {
+ push (@Config, &get_source('Default' => $Oldconfig[$index++]));
+ }
+ else {
+ push (@Config, &get_source());
+ }
+ print "\n";
+ print "$boldon Would you like to add another source?[y/N]$boldoff ";
+ my $answer = <STDIN>;
+ chomp ($answer);
+ $answer =~ s/\s+/ /og;
+ if ($answer =~ /^\s*$/o) {
+ last;
+ }
+ elsif ($answer !~ m/\s*y/io) {
+ last;
+ }
+ }
+
+ return @Config;
+}
+
+sub main {
+ if (-e $config_file) {
+ my @Oldconfig = &read_config('Filename' => $config_file);
+
+ print "$boldon I see you already have a source list.$boldoff\n";
+ print "-" x 72, "\n";
+ &print_config('Config' => \@Oldconfig);
+ print "-" x 72, "\n";
+ print "$boldon Do you wish to overwrite it? [y/N]$boldoff ";
+ my $answer = <STDIN>;
+ chomp ($answer);
+ $answer =~ s/\s+/ /og;
+ exit 0 unless $answer =~ m/\s*y/io;
+ }
+ # OK. They want to be here.
+ my @Config = &get_sources();
+ #&print_config('Config' => \@Config);
+ &write_config('Config' => \@Config, 'Filename' => $config_file);
+}
+
+&main();
+
+
diff --git a/dselect/update b/dselect/update
new file mode 100755
index 0000000..0ab317e
--- /dev/null
+++ b/dselect/update
@@ -0,0 +1,48 @@
+#!/bin/bash
+set -e
+
+# Set the textdomain for the translations using $"..."
+TEXTDOMAIN="apt"
+
+# Get the configuration from /etc/apt/apt.conf
+CLEAN="prompt"
+OPTS=""
+APTGET="/usr/bin/apt-get"
+APTCACHE="/usr/bin/apt-cache"
+DPKG="/usr/bin/dpkg"
+DPKG_OPTS="--admindir=$1"
+APT_OPT0="-oDir::State::status=$1/status"
+APT_OPT1="-oDPkg::Options::=$DPKG_OPTS"
+CACHEDIR="/var/cache/apt"
+PROMPT="false"
+RES=`apt-config shell CLEAN DSelect::Clean OPTS DSelect::UpdateOptions \
+ DPKG Dir::Bin::dpkg/f APTGET Dir::Bin::apt-get/f \
+ APTCACHE Dir::Bin::apt-cache/f CACHEDIR Dir::Cache/d \
+ PROMPT DSelect::PromptAfterUpdate/b`
+eval $RES
+
+# It looks slightly ugly to have a double / in the dpkg output
+CACHEDIR=`echo $CACHEDIR | sed -e "s|/$||"`
+
+STATUS=1
+if $APTGET $OPTS "$APT_OPT0" "$APT_OPT1" update
+then
+ echo $"Merging available information"
+ rm -f $CACHEDIR/available
+ $APTCACHE dumpavail > $CACHEDIR/available
+ $DPKG "$DPKG_OPTS" --update-avail $CACHEDIR/available
+ rm -f $CACHEDIR/available
+
+ case "$CLEAN" in
+ Pre-Auto|PreAuto|pre-auto)
+ $APTGET "$APT_OPT0" "$APT_OPT1" autoclean;;
+ esac
+
+ STATUS=0
+fi
+
+if [ x$PROMPT = "xtrue" ]; then
+ echo $"Press [Enter] to continue." && read RES;
+fi
+
+exit $STATUS
diff --git a/ftparchive/CMakeLists.txt b/ftparchive/CMakeLists.txt
new file mode 100644
index 0000000..bbd2848
--- /dev/null
+++ b/ftparchive/CMakeLists.txt
@@ -0,0 +1,13 @@
+include_directories(${BERKELEY_DB_INCLUDE_DIRS})
+# Definition of the C++ files used to build the program - note that this
+# is expanded at CMake time, so you have to rerun cmake if you add or remove
+# a file (you can just run cmake . in the build directory)
+file(GLOB_RECURSE source "*.cc")
+add_executable(apt-ftparchive ${source})
+
+# Link the executables against the libraries
+target_include_directories(apt-ftparchive PRIVATE ${BERKELEY_DB_INCLUDE_DIRS})
+target_link_libraries(apt-ftparchive apt-inst apt-pkg apt-private ${BERKELEY_DB_LIBRARIES})
+
+# Install the executables
+install(TARGETS apt-ftparchive RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc
new file mode 100644
index 0000000..077701c
--- /dev/null
+++ b/ftparchive/apt-ftparchive.cc
@@ -0,0 +1,1058 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ apt-ftparchive - Efficient work-alike for dpkg-scanpackages
+
+ Let contents be disabled from the conf
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/strutl.h>
+
+#include <apt-private/private-cmndline.h>
+#include <apt-private/private-main.h>
+#include <apt-private/private-output.h>
+
+#include <algorithm>
+#include <chrono>
+#include <climits>
+#include <functional>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <locale.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <time.h>
+#include <math.h>
+
+#include "apt-ftparchive.h"
+#include "cachedb.h"
+#include "multicompress.h"
+#include "override.h"
+#include "writer.h"
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+unsigned Quiet = 0;
+
+static struct timeval GetTimevalFromSteadyClock() /*{{{*/
+{
+ auto const Time = std::chrono::steady_clock::now().time_since_epoch();
+ auto const Time_sec = std::chrono::duration_cast<std::chrono::seconds>(Time);
+ auto const Time_usec = std::chrono::duration_cast<std::chrono::microseconds>(Time - Time_sec);
+ return { Time_sec.count(), Time_usec.count() };
+}
+ /*}}}*/
+
+// struct PackageMap - List of all package files in the config file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+struct PackageMap
+{
+ // General Stuff
+ string BaseDir;
+ string InternalPrefix;
+ string FLFile;
+ string PkgExt;
+ string SrcExt;
+
+ // Stuff for the Package File
+ string PkgFile;
+ string BinCacheDB;
+ string SrcCacheDB;
+ string BinOverride;
+ string ExtraOverride;
+
+ // We generate for this given arch
+ string Arch;
+ bool IncludeArchAll;
+
+ // Stuff for the Source File
+ string SrcFile;
+ string SrcOverride;
+ string SrcExtraOverride;
+
+ // Translation master file
+ bool LongDesc;
+ TranslationWriter *TransWriter;
+
+ // Contents
+ string Contents;
+ string ContentsHead;
+
+ // Random things
+ string Tag;
+ string PkgCompress;
+ string CntCompress;
+ string SrcCompress;
+ string PathPrefix;
+ unsigned int DeLinkLimit;
+ mode_t Permissions;
+
+ bool ContentsDone;
+ bool PkgDone;
+ bool SrcDone;
+ time_t ContentsMTime;
+
+ struct ContentsCompare : public binary_function<PackageMap,PackageMap,bool>
+ {
+ inline bool operator() (const PackageMap &x,const PackageMap &y)
+ {return x.ContentsMTime < y.ContentsMTime;};
+ };
+
+ struct DBCompare : public binary_function<PackageMap,PackageMap,bool>
+ {
+ inline bool operator() (const PackageMap &x,const PackageMap &y)
+ {return x.BinCacheDB < y.BinCacheDB;};
+ };
+
+ struct SrcDBCompare : public binary_function<PackageMap,PackageMap,bool>
+ {
+ inline bool operator() (const PackageMap &x,const PackageMap &y)
+ {return x.SrcCacheDB < y.SrcCacheDB;};
+ };
+
+ void GetGeneral(Configuration &Setup,Configuration &Block);
+ bool GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats);
+ bool GenSources(Configuration &Setup,struct CacheDB::Stats &Stats);
+ bool GenContents(Configuration &Setup,
+ vector<PackageMap>::iterator Begin,
+ vector<PackageMap>::iterator End,
+ unsigned long &Left);
+
+ PackageMap() : IncludeArchAll(true), LongDesc(true), TransWriter(NULL),
+ DeLinkLimit(0), Permissions(1), ContentsDone(false),
+ PkgDone(false), SrcDone(false), ContentsMTime(0) {};
+};
+ /*}}}*/
+
+// PackageMap::GetGeneral - Common per-section definitions /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void PackageMap::GetGeneral(Configuration &Setup,Configuration &Block)
+{
+ PathPrefix = Block.Find("PathPrefix");
+
+ if (Block.FindB("External-Links",true) == false)
+ DeLinkLimit = Setup.FindI("Default::DeLinkLimit", std::numeric_limits<unsigned int>::max());
+ else
+ DeLinkLimit = 0;
+
+ PkgCompress = Block.Find("Packages::Compress",
+ Setup.Find("Default::Packages::Compress",". gzip").c_str());
+ CntCompress = Block.Find("Contents::Compress",
+ Setup.Find("Default::Contents::Compress",". gzip").c_str());
+ SrcCompress = Block.Find("Sources::Compress",
+ Setup.Find("Default::Sources::Compress",". gzip").c_str());
+
+ SrcExt = Block.Find("Sources::Extensions",
+ Setup.Find("Default::Sources::Extensions",".dsc").c_str());
+ PkgExt = Block.Find("Packages::Extensions",
+ Setup.Find("Default::Packages::Extensions",".deb").c_str());
+
+ Permissions = Setup.FindI("Default::FileMode",0644);
+
+ if (FLFile.empty() == false)
+ FLFile = flCombine(Setup.Find("Dir::FileListDir"),FLFile);
+
+ if (Contents == " ")
+ Contents= string();
+}
+ /*}}}*/
+// PackageMap::GenPackages - Actually generate a Package file /*{{{*/
+// ---------------------------------------------------------------------
+/* This generates the Package File described by this object. */
+bool PackageMap::GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats)
+{
+ if (PkgFile.empty() == true)
+ return true;
+
+ string ArchiveDir = Setup.FindDir("Dir::ArchiveDir");
+ string OverrideDir = Setup.FindDir("Dir::OverrideDir");
+ string CacheDir = Setup.FindDir("Dir::CacheDir");
+
+ struct timeval StartTime = GetTimevalFromSteadyClock();
+
+ PkgDone = true;
+
+ // Create a package writer object.
+ MultiCompress Comp(flCombine(ArchiveDir,PkgFile),
+ PkgCompress,Permissions);
+ PackagesWriter Packages(&Comp.Input, TransWriter, flCombine(CacheDir,BinCacheDB),
+ flCombine(OverrideDir,BinOverride),
+ flCombine(OverrideDir,ExtraOverride),
+ Arch, IncludeArchAll);
+ if (PkgExt.empty() == false && Packages.SetExts(PkgExt) == false)
+ return _error->Error(_("Package extension list is too long"));
+ if (_error->PendingError() == true)
+ return _error->Error(_("Error processing directory %s"),BaseDir.c_str());
+
+ Packages.PathPrefix = PathPrefix;
+ Packages.DirStrip = ArchiveDir;
+ Packages.InternalPrefix = flCombine(ArchiveDir,InternalPrefix);
+
+ Packages.LongDescription = LongDesc;
+
+ Packages.Stats.DeLinkBytes = Stats.DeLinkBytes;
+ Packages.DeLinkLimit = DeLinkLimit;
+
+ if (_error->PendingError() == true)
+ return _error->Error(_("Error processing directory %s"),BaseDir.c_str());
+
+ c0out << ' ' << BaseDir << ":" << flush;
+
+ // Do recursive directory searching
+ if (FLFile.empty() == true)
+ {
+ if (Packages.RecursiveScan(flCombine(ArchiveDir,BaseDir)) == false)
+ return false;
+ }
+ else
+ {
+ if (Packages.LoadFileList(ArchiveDir,FLFile) == false)
+ return false;
+ }
+
+ Packages.Output = 0; // Just in case
+
+ // Finish compressing
+ unsigned long long Size;
+ if (Comp.Finalize(Size) == false)
+ {
+ c0out << endl;
+ return _error->Error(_("Error processing directory %s"),BaseDir.c_str());
+ }
+
+ if (Size != 0)
+ c0out << " New "
+ << SizeToStr(Size) << "B ";
+ else
+ c0out << ' ';
+
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
+
+ c0out << Packages.Stats.Packages << " files " <<
+/* SizeToStr(Packages.Stats.MD5Bytes) << "B/" << */
+ SizeToStr(Packages.Stats.Bytes) << "B " <<
+ TimeToStr(llround(Delta.count())) << endl;
+
+ if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
+ c0out << " Misses in Cache: " << Packages.Stats.Misses<< endl;
+
+ Stats.Add(Packages.Stats);
+ Stats.DeLinkBytes = Packages.Stats.DeLinkBytes;
+
+ return !_error->PendingError();
+}
+
+ /*}}}*/
+// PackageMap::GenSources - Actually generate a Source file /*{{{*/
+// ---------------------------------------------------------------------
+/* This generates the Sources File described by this object. */
+bool PackageMap::GenSources(Configuration &Setup,struct CacheDB::Stats &Stats)
+{
+ if (SrcFile.empty() == true)
+ return true;
+
+ string ArchiveDir = Setup.FindDir("Dir::ArchiveDir");
+ string OverrideDir = Setup.FindDir("Dir::OverrideDir");
+ string CacheDir = Setup.FindDir("Dir::CacheDir");
+
+ struct timeval StartTime = GetTimevalFromSteadyClock();
+ SrcDone = true;
+
+ // Create a package writer object.
+ MultiCompress Comp(flCombine(ArchiveDir,SrcFile),
+ SrcCompress,Permissions);
+ SourcesWriter Sources(&Comp.Input, flCombine(CacheDir, SrcCacheDB),
+ flCombine(OverrideDir,BinOverride),
+ flCombine(OverrideDir,SrcOverride),
+ flCombine(OverrideDir,SrcExtraOverride));
+ if (SrcExt.empty() == false && Sources.SetExts(SrcExt) == false)
+ return _error->Error(_("Source extension list is too long"));
+ if (_error->PendingError() == true)
+ return _error->Error(_("Error processing directory %s"),BaseDir.c_str());
+
+ Sources.PathPrefix = PathPrefix;
+ Sources.DirStrip = ArchiveDir;
+ Sources.InternalPrefix = flCombine(ArchiveDir,InternalPrefix);
+
+ Sources.DeLinkLimit = DeLinkLimit;
+ Sources.Stats.DeLinkBytes = Stats.DeLinkBytes;
+
+ if (_error->PendingError() == true)
+ return _error->Error(_("Error processing directory %s"),BaseDir.c_str());
+
+ c0out << ' ' << BaseDir << ":" << flush;
+
+ // Do recursive directory searching
+ if (FLFile.empty() == true)
+ {
+ if (Sources.RecursiveScan(flCombine(ArchiveDir,BaseDir))== false)
+ return false;
+ }
+ else
+ {
+ if (Sources.LoadFileList(ArchiveDir,FLFile) == false)
+ return false;
+ }
+ Sources.Output = 0; // Just in case
+
+ // Finish compressing
+ unsigned long long Size;
+ if (Comp.Finalize(Size) == false)
+ {
+ c0out << endl;
+ return _error->Error(_("Error processing directory %s"),BaseDir.c_str());
+ }
+
+ if (Size != 0)
+ c0out << " New "
+ << SizeToStr(Size) << "B ";
+ else
+ c0out << ' ';
+
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
+
+ c0out << Sources.Stats.Packages << " pkgs in " <<
+ TimeToStr(llround(Delta.count())) << endl;
+
+ if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
+ c0out << " Misses in Cache: " << Sources.Stats.Misses << endl;
+
+ Stats.Add(Sources.Stats);
+ Stats.DeLinkBytes = Sources.Stats.DeLinkBytes;
+
+ return !_error->PendingError();
+}
+ /*}}}*/
+// PackageMap::GenContents - Actually generate a Contents file /*{{{*/
+// ---------------------------------------------------------------------
+/* This generates the contents file partially described by this object.
+ It searches the given iterator range for other package files that map
+ into this contents file and includes their data as well when building. */
+bool PackageMap::GenContents(Configuration &Setup,
+ vector<PackageMap>::iterator Begin,
+ vector<PackageMap>::iterator End,
+ unsigned long &Left)
+{
+ if (Contents.empty() == true)
+ return true;
+
+ if (Left == 0)
+ return true;
+
+ string ArchiveDir = Setup.FindDir("Dir::ArchiveDir");
+ string CacheDir = Setup.FindDir("Dir::CacheDir");
+ string OverrideDir = Setup.FindDir("Dir::OverrideDir");
+
+ struct timeval StartTime = GetTimevalFromSteadyClock();
+
+ // Create a package writer object.
+ MultiCompress Comp(flCombine(ArchiveDir,this->Contents),
+ CntCompress,Permissions);
+ Comp.UpdateMTime = Setup.FindI("Default::ContentsAge",10)*24*60*60;
+ ContentsWriter Contents(&Comp.Input, "", Arch, IncludeArchAll);
+ if (PkgExt.empty() == false && Contents.SetExts(PkgExt) == false)
+ return _error->Error(_("Package extension list is too long"));
+ if (_error->PendingError() == true)
+ return false;
+
+ if (_error->PendingError() == true)
+ return false;
+
+ // Write the header out.
+ if (ContentsHead.empty() == false)
+ {
+ FileFd Head(flCombine(OverrideDir,ContentsHead),FileFd::ReadOnly);
+ if (_error->PendingError() == true)
+ return false;
+
+ unsigned long long Size = Head.Size();
+ unsigned char Buf[4096];
+ while (Size != 0)
+ {
+ unsigned long long ToRead = Size;
+ if (Size > sizeof(Buf))
+ ToRead = sizeof(Buf);
+
+ if (Head.Read(Buf,ToRead) == false)
+ return false;
+
+ if (Comp.Input.Write(Buf, ToRead) == false)
+ return _error->Errno("fwrite",_("Error writing header to contents file"));
+
+ Size -= ToRead;
+ }
+ }
+
+ /* Go over all the package file records and parse all the package
+ files associated with this contents file into one great big honking
+ memory structure, then dump the sorted version */
+ c0out << ' ' << this->Contents << ":" << flush;
+ for (vector<PackageMap>::iterator I = Begin; I != End; ++I)
+ {
+ if (I->Contents != this->Contents)
+ continue;
+
+ Contents.Prefix = ArchiveDir;
+ Contents.ReadyDB(flCombine(CacheDir,I->BinCacheDB));
+ Contents.ReadFromPkgs(flCombine(ArchiveDir,I->PkgFile),
+ I->PkgCompress);
+
+ I->ContentsDone = true;
+ }
+
+ Contents.Finish();
+
+ // Finish compressing
+ unsigned long long Size;
+ if (Comp.Finalize(Size) == false || _error->PendingError() == true)
+ {
+ c0out << endl;
+ return _error->Error(_("Error processing contents %s"),
+ this->Contents.c_str());
+ }
+
+ if (Size != 0)
+ {
+ c0out << " New " << SizeToStr(Size) << "B ";
+ if (Left > Size)
+ Left -= Size;
+ else
+ Left = 0;
+ }
+ else
+ c0out << ' ';
+
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
+
+ if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
+ c0out << " Misses in Cache: " << Contents.Stats.Misses<< endl;
+
+ c0out << Contents.Stats.Packages << " files " <<
+ SizeToStr(Contents.Stats.Bytes) << "B " <<
+ TimeToStr(llround(Delta.count())) << endl;
+
+ return true;
+}
+ /*}}}*/
+
+// LoadTree - Load a 'tree' section from the Generate Config /*{{{*/
+// ---------------------------------------------------------------------
+/* This populates the PkgList with all the possible permutations of the
+ section/arch lists. */
+static void LoadTree(vector<PackageMap> &PkgList, std::vector<TranslationWriter*> &TransList, Configuration &Setup)
+{
+ // Load the defaults
+ string DDir = Setup.Find("TreeDefault::Directory",
+ "$(DIST)/$(SECTION)/binary-$(ARCH)/");
+ string DSDir = Setup.Find("TreeDefault::SrcDirectory",
+ "$(DIST)/$(SECTION)/source/");
+ string DPkg = Setup.Find("TreeDefault::Packages",
+ "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages");
+ string DTrans = Setup.Find("TreeDefault::Translation",
+ "$(DIST)/$(SECTION)/i18n/Translation-en");
+ string DIPrfx = Setup.Find("TreeDefault::InternalPrefix",
+ "$(DIST)/$(SECTION)/");
+ string DContents = Setup.Find("TreeDefault::Contents",
+ "$(DIST)/$(SECTION)/Contents-$(ARCH)");
+ string DContentsH = Setup.Find("TreeDefault::Contents::Header","");
+ string DBCache = Setup.Find("TreeDefault::BinCacheDB",
+ "packages-$(ARCH).db");
+ string SrcDBCache = Setup.Find("TreeDefault::SrcCacheDB",
+ "sources-$(SECTION).db");
+ string DSources = Setup.Find("TreeDefault::Sources",
+ "$(DIST)/$(SECTION)/source/Sources");
+ string DFLFile = Setup.Find("TreeDefault::FileList", "");
+ string DSFLFile = Setup.Find("TreeDefault::SourceFileList", "");
+
+ mode_t const Permissions = Setup.FindI("Default::FileMode",0644);
+
+ bool const LongDescription = Setup.FindB("Default::LongDescription",
+ _config->FindB("APT::FTPArchive::LongDescription", true));
+ string const TranslationCompress = Setup.Find("Default::Translation::Compress",". gzip").c_str();
+ bool const ConfIncludeArchAllExists = _config->Exists("APT::FTPArchive::IncludeArchitectureAll");
+ bool const ConfIncludeArchAll = _config->FindB("APT::FTPArchive::IncludeArchitectureAll", true);
+
+ // Process 'tree' type sections
+ const Configuration::Item *Top = Setup.Tree("tree");
+ for (Top = (Top == 0?0:Top->Child); Top != 0;)
+ {
+ Configuration Block(Top);
+ string Dist = Top->Tag;
+
+ // Parse the sections
+ string Tmp = Block.Find("Sections");
+ const char *Sections = Tmp.c_str();
+ string Section;
+ while (ParseQuoteWord(Sections,Section) == true)
+ {
+ struct SubstVar Vars[] = {{"$(DIST)",&Dist},
+ {"$(SECTION)",&Section},
+ {"$(ARCH)",nullptr},
+ {nullptr, nullptr}};
+ mode_t const Perms = Block.FindI("FileMode", Permissions);
+ bool const LongDesc = Block.FindB("LongDescription", LongDescription);
+ TranslationWriter *TransWriter = nullptr;
+
+ std::string Tmp2 = Block.Find("Architectures");
+ std::transform(Tmp2.begin(), Tmp2.end(), Tmp2.begin(), ::tolower);
+ std::vector<std::string> const Archs = VectorizeString(Tmp2, ' ');
+ bool IncludeArchAll;
+ if (ConfIncludeArchAllExists == true)
+ IncludeArchAll = ConfIncludeArchAll;
+ else
+ IncludeArchAll = std::find(Archs.begin(), Archs.end(), "all") == Archs.end();
+ for (auto const& Arch: Archs)
+ {
+ if (Arch.empty()) continue;
+ Vars[2].Contents = &Arch;
+ PackageMap Itm;
+ Itm.Permissions = Perms;
+ Itm.BinOverride = SubstVar(Block.Find("BinOverride"),Vars);
+ Itm.InternalPrefix = SubstVar(Block.Find("InternalPrefix",DIPrfx.c_str()),Vars);
+
+ if (Arch == "source")
+ {
+ Itm.SrcOverride = SubstVar(Block.Find("SrcOverride"),Vars);
+ Itm.BaseDir = SubstVar(Block.Find("SrcDirectory",DSDir.c_str()),Vars);
+ Itm.SrcFile = SubstVar(Block.Find("Sources",DSources.c_str()),Vars);
+ Itm.Tag = SubstVar("$(DIST)/$(SECTION)/source",Vars);
+ Itm.FLFile = SubstVar(Block.Find("SourceFileList",DSFLFile.c_str()),Vars);
+ Itm.SrcExtraOverride = SubstVar(Block.Find("SrcExtraOverride"),Vars);
+ Itm.SrcCacheDB = SubstVar(Block.Find("SrcCacheDB",SrcDBCache.c_str()),Vars);
+ }
+ else
+ {
+ Itm.BinCacheDB = SubstVar(Block.Find("BinCacheDB",DBCache.c_str()),Vars);
+ Itm.BaseDir = SubstVar(Block.Find("Directory",DDir.c_str()),Vars);
+ Itm.PkgFile = SubstVar(Block.Find("Packages",DPkg.c_str()),Vars);
+ Itm.Tag = SubstVar("$(DIST)/$(SECTION)/$(ARCH)",Vars);
+ Itm.Arch = Arch;
+ Itm.IncludeArchAll = IncludeArchAll;
+ Itm.LongDesc = LongDesc;
+ if (TransWriter == NULL && DTrans.empty() == false && LongDesc == false && DTrans != "/dev/null")
+ {
+ string const TranslationFile = flCombine(Setup.FindDir("Dir::ArchiveDir"),
+ SubstVar(Block.Find("Translation", DTrans.c_str()), Vars));
+ string const TransCompress = Block.Find("Translation::Compress", TranslationCompress);
+ TransWriter = new TranslationWriter(TranslationFile, TransCompress, Perms);
+ TransList.push_back(TransWriter);
+ }
+ Itm.TransWriter = TransWriter;
+ Itm.Contents = SubstVar(Block.Find("Contents",DContents.c_str()),Vars);
+ Itm.ContentsHead = SubstVar(Block.Find("Contents::Header",DContentsH.c_str()),Vars);
+ Itm.FLFile = SubstVar(Block.Find("FileList",DFLFile.c_str()),Vars);
+ Itm.ExtraOverride = SubstVar(Block.Find("ExtraOverride"),Vars);
+ }
+
+ Itm.GetGeneral(Setup,Block);
+ PkgList.push_back(Itm);
+ }
+ }
+
+ Top = Top->Next;
+ }
+}
+ /*}}}*/
+static void UnloadTree(std::vector<TranslationWriter*> const &Trans) /*{{{*/
+{
+ for (std::vector<TranslationWriter*>::const_reverse_iterator T = Trans.rbegin(); T != Trans.rend(); ++T)
+ delete *T;
+}
+ /*}}}*/
+// LoadBinDir - Load a 'bindirectory' section from the Generate Config /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static void LoadBinDir(vector<PackageMap> &PkgList,Configuration &Setup)
+{
+ mode_t const Permissions = Setup.FindI("Default::FileMode",0644);
+
+ // Process 'bindirectory' type sections
+ const Configuration::Item *Top = Setup.Tree("bindirectory");
+ for (Top = (Top == 0?0:Top->Child); Top != 0;)
+ {
+ Configuration Block(Top);
+
+ PackageMap Itm;
+ Itm.PkgFile = Block.Find("Packages");
+ Itm.SrcFile = Block.Find("Sources");
+ Itm.BinCacheDB = Block.Find("BinCacheDB");
+ Itm.SrcCacheDB = Block.Find("SrcCacheDB");
+ Itm.BinOverride = Block.Find("BinOverride");
+ Itm.ExtraOverride = Block.Find("ExtraOverride");
+ Itm.SrcExtraOverride = Block.Find("SrcExtraOverride");
+ Itm.SrcOverride = Block.Find("SrcOverride");
+ Itm.BaseDir = Top->Tag;
+ Itm.FLFile = Block.Find("FileList");
+ Itm.InternalPrefix = Block.Find("InternalPrefix",Top->Tag.c_str());
+ Itm.Contents = Block.Find("Contents");
+ Itm.ContentsHead = Block.Find("Contents::Header");
+ Itm.Permissions = Block.FindI("FileMode", Permissions);
+
+ Itm.GetGeneral(Setup,Block);
+ PkgList.push_back(Itm);
+
+ Top = Top->Next;
+ }
+}
+ /*}}}*/
+
+static bool ShowHelp(CommandLine &) /*{{{*/
+{
+ std::cout <<
+ _("Usage: apt-ftparchive [options] command\n"
+ "Commands: packages binarypath [overridefile [pathprefix]]\n"
+ " sources srcpath [overridefile [pathprefix]]\n"
+ " contents path\n"
+ " release path\n"
+ " generate config [groups]\n"
+ " clean config\n"
+ "\n"
+ "apt-ftparchive generates index files for Debian archives. It supports\n"
+ "many styles of generation from fully automated to functional replacements\n"
+ "for dpkg-scanpackages and dpkg-scansources\n"
+ "\n"
+ "apt-ftparchive generates Package files from a tree of .debs. The\n"
+ "Package file contains the contents of all the control fields from\n"
+ "each package as well as the MD5 hash and filesize. An override file\n"
+ "is supported to force the value of Priority and Section.\n"
+ "\n"
+ "Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+ "The --source-override option can be used to specify a src override file\n"
+ "\n"
+ "The 'packages' and 'sources' command should be run in the root of the\n"
+ "tree. BinaryPath should point to the base of the recursive search and \n"
+ "override file should contain the override flags. Pathprefix is\n"
+ "appended to the filename fields if present. Example usage from the \n"
+ "Debian archive:\n"
+ " apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+ " dists/potato/main/binary-i386/Packages\n"
+ "\n"
+ "Options:\n"
+ " -h This help text\n"
+ " --md5 Control MD5 generation\n"
+ " -s=? Source override file\n"
+ " -q Quiet\n"
+ " -d=? Select the optional caching database\n"
+ " --no-delink Enable delinking debug mode\n"
+ " --contents Control contents file generation\n"
+ " -c=? Read this configuration file\n"
+ " -o=? Set an arbitrary configuration option") << endl;
+ return true;
+}
+ /*}}}*/
+// SimpleGenPackages - Generate a Packages file for a directory tree /*{{{*/
+// ---------------------------------------------------------------------
+/* This emulates dpkg-scanpackages's command line interface. 'mostly' */
+static bool SimpleGenPackages(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() < 2)
+ return ShowHelp(CmdL);
+
+ string Override;
+ if (CmdL.FileSize() >= 3)
+ Override = CmdL.FileList[2];
+
+ // Create a package writer object.
+ PackagesWriter Packages(NULL, NULL, _config->Find("APT::FTPArchive::DB"),
+ Override, "", _config->Find("APT::FTPArchive::Architecture"),
+ _config->FindB("APT::FTPArchive::IncludeArchitectureAll", true));
+ if (_error->PendingError() == true)
+ return false;
+
+ if (CmdL.FileSize() >= 4)
+ Packages.PathPrefix = CmdL.FileList[3];
+
+ // Do recursive directory searching
+ if (Packages.RecursiveScan(CmdL.FileList[1]) == false)
+ return false;
+
+ // Give some stats if asked for
+ if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
+ c0out << " Misses in Cache: " << Packages.Stats.Misses<< endl;
+
+ return true;
+}
+ /*}}}*/
+// SimpleGenContents - Generate a Contents listing /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool SimpleGenContents(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() < 2)
+ return ShowHelp(CmdL);
+
+ // Create a package writer object.
+ ContentsWriter Contents(NULL, _config->Find("APT::FTPArchive::DB"), _config->Find("APT::FTPArchive::Architecture"));
+ if (_error->PendingError() == true)
+ return false;
+
+ // Do recursive directory searching
+ if (Contents.RecursiveScan(CmdL.FileList[1]) == false)
+ return false;
+
+ Contents.Finish();
+
+ return true;
+}
+ /*}}}*/
+// SimpleGenSources - Generate a Sources file for a directory tree /*{{{*/
+// ---------------------------------------------------------------------
+/* This emulates dpkg-scanpackages's command line interface. 'mostly' */
+static bool SimpleGenSources(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() < 2)
+ return ShowHelp(CmdL);
+
+ string Override;
+ if (CmdL.FileSize() >= 3)
+ Override = CmdL.FileList[2];
+
+ string SOverride;
+ if (Override.empty() == false)
+ SOverride = Override + ".src";
+
+ SOverride = _config->Find("APT::FTPArchive::SourceOverride",
+ SOverride.c_str());
+
+ // Create a package writer object.
+ SourcesWriter Sources(NULL, _config->Find("APT::FTPArchive::DB"),Override,SOverride);
+ if (_error->PendingError() == true)
+ return false;
+
+ if (CmdL.FileSize() >= 4)
+ Sources.PathPrefix = CmdL.FileList[3];
+
+ // Do recursive directory searching
+ if (Sources.RecursiveScan(CmdL.FileList[1]) == false)
+ return false;
+
+ // Give some stats if asked for
+ if(_config->FindB("APT::FTPArchive::ShowCacheMisses", false) == true)
+ c0out << " Misses in Cache: " << Sources.Stats.Misses<< endl;
+
+ return true;
+}
+ /*}}}*/
+// SimpleGenRelease - Generate a Release file for a directory tree /*{{{*/
+// ---------------------------------------------------------------------
+static bool SimpleGenRelease(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() < 2)
+ return ShowHelp(CmdL);
+
+ string Dir = CmdL.FileList[1];
+
+ ReleaseWriter Release(NULL, "");
+ Release.DirStrip = Dir;
+
+ if (_error->PendingError() == true)
+ return false;
+
+ if (Release.RecursiveScan(Dir) == false)
+ return false;
+
+ Release.Finish();
+
+ return true;
+}
+
+ /*}}}*/
+// DoGeneratePackagesAndSources - Helper for Generate /*{{{*/
+// ---------------------------------------------------------------------
+static bool DoGeneratePackagesAndSources(Configuration &Setup,
+ vector<PackageMap> &PkgList,
+ struct CacheDB::Stats &SrcStats,
+ struct CacheDB::Stats &Stats,
+ CommandLine &CmdL)
+{
+ if (CmdL.FileSize() <= 2)
+ {
+ for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); ++I)
+ if (I->GenPackages(Setup,Stats) == false)
+ _error->DumpErrors();
+ for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); ++I)
+ if (I->GenSources(Setup,SrcStats) == false)
+ _error->DumpErrors();
+ }
+ else
+ {
+ // Make a choice list out of the package list..
+ RxChoiceList *List = new RxChoiceList[2*PkgList.size()+1];
+ RxChoiceList *End = List;
+ for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); ++I)
+ {
+ End->UserData = &(*I);
+ End->Str = I->BaseDir.c_str();
+ End++;
+
+ End->UserData = &(*I);
+ End->Str = I->Tag.c_str();
+ End++;
+ }
+ End->Str = 0;
+
+ // Regex it
+ if (RegexChoice(List,CmdL.FileList + 2,CmdL.FileList + CmdL.FileSize()) == 0)
+ {
+ delete [] List;
+ return _error->Error(_("No selections matched"));
+ }
+ _error->DumpErrors();
+
+ // Do the generation for Packages
+ for (End = List; End->Str != 0; ++End)
+ {
+ if (End->Hit == false)
+ continue;
+
+ PackageMap * const I = static_cast<PackageMap *>(End->UserData);
+ if (I->PkgDone == true)
+ continue;
+ if (I->GenPackages(Setup,Stats) == false)
+ _error->DumpErrors();
+ }
+
+ // Do the generation for Sources
+ for (End = List; End->Str != 0; ++End)
+ {
+ if (End->Hit == false)
+ continue;
+
+ PackageMap * const I = static_cast<PackageMap *>(End->UserData);
+ if (I->SrcDone == true)
+ continue;
+ if (I->GenSources(Setup,SrcStats) == false)
+ _error->DumpErrors();
+ }
+
+ delete [] List;
+ }
+ return true;
+}
+
+ /*}}}*/
+// DoGenerateContents - Helper for Generate to generate the Contents /*{{{*/
+// ---------------------------------------------------------------------
+static bool DoGenerateContents(Configuration &Setup,
+ vector<PackageMap> &PkgList,
+ CommandLine &CmdL)
+{
+ c1out << "Packages done, Starting contents." << endl;
+
+ // Sort the contents file list by date
+ string ArchiveDir = Setup.FindDir("Dir::ArchiveDir");
+ for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); ++I)
+ {
+ struct stat A;
+ if (MultiCompress::GetStat(flCombine(ArchiveDir,I->Contents),
+ I->CntCompress,A) == false)
+ time(&I->ContentsMTime);
+ else
+ I->ContentsMTime = A.st_mtime;
+ }
+ stable_sort(PkgList.begin(),PkgList.end(),PackageMap::ContentsCompare());
+
+ /* Now for Contents.. The process here is to do a make-like dependency
+ check. Each contents file is verified to be newer than the package files
+ that describe the debs it indexes. Since the package files contain
+ hashes of the .debs this means they have not changed either so the
+ contents must be up to date. */
+ unsigned long MaxContentsChange = Setup.FindI("Default::MaxContentsChange",
+ std::numeric_limits<unsigned int>::max())*1024;
+ for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); ++I)
+ {
+ // This record is not relevant
+ if (I->ContentsDone == true ||
+ I->Contents.empty() == true)
+ continue;
+
+ // Do not do everything if the user specified sections.
+ if (CmdL.FileSize() > 2 && I->PkgDone == false)
+ continue;
+
+ struct stat A,B;
+ if (MultiCompress::GetStat(flCombine(ArchiveDir,I->Contents),I->CntCompress,A) == true)
+ {
+ if (MultiCompress::GetStat(flCombine(ArchiveDir,I->PkgFile),I->PkgCompress,B) == false)
+ {
+ _error->Warning(_("Some files are missing in the package file group `%s'"),I->PkgFile.c_str());
+ continue;
+ }
+
+ if (A.st_mtime > B.st_mtime)
+ continue;
+ }
+
+ if (I->GenContents(Setup,PkgList.begin(),PkgList.end(),
+ MaxContentsChange) == false)
+ _error->DumpErrors();
+
+ // Hit the limit?
+ if (MaxContentsChange == 0)
+ {
+ c1out << "Hit contents update byte limit" << endl;
+ break;
+ }
+ }
+
+ return true;
+}
+
+ /*}}}*/
+// Generate - Full generate, using a config file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool Generate(CommandLine &CmdL)
+{
+ struct CacheDB::Stats SrcStats;
+ if (CmdL.FileSize() < 2)
+ return ShowHelp(CmdL);
+
+ struct timeval StartTime = GetTimevalFromSteadyClock();
+ struct CacheDB::Stats Stats;
+
+ // Read the configuration file.
+ Configuration Setup;
+ if (ReadConfigFile(Setup,CmdL.FileList[1],true) == false)
+ return false;
+
+ vector<PackageMap> PkgList;
+ std::vector<TranslationWriter*> TransList;
+ LoadTree(PkgList, TransList, Setup);
+ LoadBinDir(PkgList,Setup);
+
+ // Sort by cache DB to improve IO locality.
+ stable_sort(PkgList.begin(),PkgList.end(),PackageMap::DBCompare());
+ stable_sort(PkgList.begin(),PkgList.end(),PackageMap::SrcDBCompare());
+
+ // Generate packages
+ if (_config->FindB("APT::FTPArchive::ContentsOnly", false) == false)
+ {
+ if(DoGeneratePackagesAndSources(Setup, PkgList, SrcStats, Stats, CmdL) == false)
+ {
+ UnloadTree(TransList);
+ return false;
+ }
+ } else {
+ c1out << "Skipping Packages/Sources generation" << endl;
+ }
+
+ // do Contents if needed
+ if (_config->FindB("APT::FTPArchive::Contents", true) == true)
+ if (DoGenerateContents(Setup, PkgList, CmdL) == false)
+ {
+ UnloadTree(TransList);
+ return false;
+ }
+
+ struct timeval NewTime = GetTimevalFromSteadyClock();
+ std::chrono::duration<double> Delta =
+ std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
+ std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
+ c1out << "Done. " << SizeToStr(Stats.Bytes) << "B in " << Stats.Packages
+ << " archives. Took " << TimeToStr(llround(Delta.count())) << endl;
+
+ UnloadTree(TransList);
+ return true;
+}
+
+ /*}}}*/
+// Clean - Clean out the databases /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static bool Clean(CommandLine &CmdL)
+{
+ if (CmdL.FileSize() != 2)
+ return ShowHelp(CmdL);
+
+ // Read the configuration file.
+ Configuration Setup;
+ if (ReadConfigFile(Setup,CmdL.FileList[1],true) == false)
+ return false;
+ // we don't need translation creation here
+ Setup.Set("TreeDefault::Translation", "/dev/null");
+
+ vector<PackageMap> PkgList;
+ std::vector<TranslationWriter*> TransList;
+ LoadTree(PkgList, TransList, Setup);
+ LoadBinDir(PkgList,Setup);
+
+ // Sort by cache DB to improve IO locality.
+ stable_sort(PkgList.begin(),PkgList.end(),PackageMap::DBCompare());
+ stable_sort(PkgList.begin(),PkgList.end(),PackageMap::SrcDBCompare());
+
+ string CacheDir = Setup.FindDir("Dir::CacheDir");
+
+ for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); )
+ {
+ if(I->BinCacheDB != "")
+ c0out << I->BinCacheDB << endl;
+ if(I->SrcCacheDB != "")
+ c0out << I->SrcCacheDB << endl;
+ CacheDB DB(flCombine(CacheDir,I->BinCacheDB));
+ CacheDB DB_SRC(flCombine(CacheDir,I->SrcCacheDB));
+ if (DB.Clean() == false)
+ _error->DumpErrors();
+ if (DB_SRC.Clean() == false)
+ _error->DumpErrors();
+
+ I = std::find_if(I, PkgList.end(),
+ [&](PackageMap const &PM) { return PM.BinCacheDB != I->BinCacheDB || PM.SrcCacheDB != I->SrcCacheDB;
+ });
+ }
+
+ return true;
+}
+ /*}}}*/
+
+static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
+{
+ return {
+ {"packages",&SimpleGenPackages, nullptr},
+ {"contents",&SimpleGenContents, nullptr},
+ {"sources",&SimpleGenSources, nullptr},
+ {"release",&SimpleGenRelease, nullptr},
+ {"generate",&Generate, nullptr},
+ {"clean",&Clean, nullptr},
+ {nullptr, nullptr, nullptr}
+ };
+}
+ /*}}}*/
+int main(int argc, const char *argv[]) /*{{{*/
+{
+ // Parse the command line and initialize the package library
+ CommandLine CmdL;
+ auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_FTPARCHIVE, &_config, NULL, argc, argv, ShowHelp, &GetCommands);
+
+ _config->CndSet("quiet",0);
+ Quiet = _config->FindI("quiet",0);
+ InitOutput(clog.rdbuf());
+
+ return DispatchCommandLine(CmdL, Cmds);
+}
+ /*}}}*/
diff --git a/ftparchive/apt-ftparchive.h b/ftparchive/apt-ftparchive.h
new file mode 100644
index 0000000..e669555
--- /dev/null
+++ b/ftparchive/apt-ftparchive.h
@@ -0,0 +1,26 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Writer
+
+ The file writer classes. These write various types of output, sources,
+ packages and contents.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APT_FTPARCHIVE_H
+#define APT_FTPARCHIVE_H
+
+#include <fstream>
+
+using std::ostream;
+using std::ofstream;
+
+extern ostream c0out;
+extern ostream c1out;
+extern ostream c2out;
+extern ofstream devnull;
+extern unsigned Quiet;
+
+#endif
diff --git a/ftparchive/byhash.cc b/ftparchive/byhash.cc
new file mode 100644
index 0000000..b24f615
--- /dev/null
+++ b/ftparchive/byhash.cc
@@ -0,0 +1,61 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ ByHash
+
+ ByHash helper functions
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <algorithm>
+#include <string>
+
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "byhash.h"
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+
+// Delete all files in a directory except the most recent N ones
+void DeleteAllButMostRecent(std::string dir, int KeepFiles)
+{
+ struct Cmp {
+ bool operator() (const std::string& lhs, const std::string& rhs) {
+ struct stat buf_l, buf_r;
+ stat(lhs.c_str(), &buf_l);
+ stat(rhs.c_str(), &buf_r);
+ if (buf_l.st_mtim.tv_sec == buf_r.st_mtim.tv_sec)
+ return buf_l.st_mtim.tv_nsec < buf_r.st_mtim.tv_nsec;
+ return buf_l.st_mtim.tv_sec < buf_r.st_mtim.tv_sec;
+ }
+ };
+
+ if (!DirectoryExists(dir))
+ return;
+
+ auto files = GetListOfFilesInDir(dir, false);
+ std::sort(files.begin(), files.end(), Cmp());
+
+ for (auto I=files.begin(); I<files.end()-KeepFiles; ++I)
+ RemoveFile("DeleteAllButMostRecent", *I);
+}
+
+// Takes a input filename (e.g. binary-i386/Packages) and a hashstring
+// of the Input data and transforms it into a suitable by-hash filename
+std::string GenByHashFilename(std::string ByHashOutputFile, HashString const &h)
+{
+ std::string const ByHash = "/by-hash/" + h.HashType() + "/" + h.HashValue();
+ size_t trailing_slash = ByHashOutputFile.find_last_of("/");
+ if (trailing_slash == std::string::npos)
+ trailing_slash = 0;
+ ByHashOutputFile = ByHashOutputFile.replace(
+ trailing_slash,
+ ByHashOutputFile.substr(trailing_slash+1).size()+1,
+ ByHash);
+ return ByHashOutputFile;
+}
diff --git a/ftparchive/byhash.h b/ftparchive/byhash.h
new file mode 100644
index 0000000..9fbb479
--- /dev/null
+++ b/ftparchive/byhash.h
@@ -0,0 +1,25 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ ByHash
+
+ ByHash helper functions
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef BYHASH_H
+#define BYHASH_H
+
+#include <string>
+
+class HashString;
+
+// Delete all files in "dir" except for the number specified in "KeepFiles"
+// that are the most recent ones
+void DeleteAllButMostRecent(std::string dir, int KeepFiles);
+
+// takes a regular input filename
+std::string GenByHashFilename(std::string Input, HashString const &h);
+
+#endif
diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc
new file mode 100644
index 0000000..1890c28
--- /dev/null
+++ b/ftparchive/cachedb.cc
@@ -0,0 +1,582 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CacheDB
+
+ Simple uniform interface to a cache database.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/sha2.h>
+#include <apt-pkg/strutl.h>
+
+#include <ctype.h>
+#include <netinet/in.h> // htonl, etc
+#include <stddef.h>
+#include <strings.h>
+#include <sys/stat.h>
+
+#include "cachedb.h"
+
+#include <apti18n.h>
+ /*}}}*/
+
+CacheDB::CacheDB(std::string const &DB)
+ : Dbp(0), Fd(NULL), DebFile(0)
+{
+ TmpKey[0]='\0';
+ ReadyDB(DB);
+}
+
+CacheDB::~CacheDB()
+{
+ ReadyDB();
+ delete DebFile;
+ CloseFile();
+}
+
+// CacheDB::ReadyDB - Ready the DB2 /*{{{*/
+// ---------------------------------------------------------------------
+/* This opens the DB2 file for caching package information */
+bool CacheDB::ReadyDB(std::string const &DB)
+{
+ int err;
+
+ ReadOnly = _config->FindB("APT::FTPArchive::ReadOnlyDB",false);
+
+ // Close the old DB
+ if (Dbp != 0)
+ Dbp->close(Dbp,0);
+
+ /* Check if the DB was disabled while running and deal with a
+ corrupted DB */
+ if (DBFailed() == true)
+ {
+ _error->Warning(_("DB was corrupted, file renamed to %s.old"),DBFile.c_str());
+ rename(DBFile.c_str(),(DBFile+".old").c_str());
+ }
+
+ DBLoaded = false;
+ Dbp = 0;
+ DBFile = std::string();
+
+ if (DB.empty())
+ return true;
+
+ db_create(&Dbp, NULL, 0);
+ if ((err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_BTREE,
+ (ReadOnly?DB_RDONLY:DB_CREATE),
+ 0644)) != 0)
+ {
+ if (err == DB_OLD_VERSION)
+ {
+ _error->Warning(_("DB is old, attempting to upgrade %s"),DBFile.c_str());
+ err = Dbp->upgrade(Dbp, DB.c_str(), 0);
+ if (!err)
+ err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_HASH,
+ (ReadOnly?DB_RDONLY:DB_CREATE), 0644);
+
+ }
+ // the database format has changed from DB_HASH to DB_BTREE in
+ // apt 0.6.44
+ if (err == EINVAL)
+ {
+ _error->Error(_("DB format is invalid. If you upgraded from an older version of apt, please remove and re-create the database."));
+ }
+ if (err)
+ {
+ Dbp = 0;
+ return _error->Error(_("Unable to open DB file %s: %s"),DB.c_str(), db_strerror(err));
+ }
+ }
+
+ DBFile = DB;
+ DBLoaded = true;
+ return true;
+}
+ /*}}}*/
+// CacheDB::OpenFile - Open the file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::OpenFile()
+{
+ // always close existing file first
+ CloseFile();
+
+ // open a new file
+ Fd = new FileFd(FileName,FileFd::ReadOnly);
+ if (_error->PendingError() == true)
+ {
+ CloseFile();
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+// CacheDB::CloseFile - Close the file /*{{{*/
+void CacheDB::CloseFile()
+{
+ if(Fd != NULL)
+ {
+ delete Fd;
+ Fd = NULL;
+ }
+}
+ /*}}}*/
+// CacheDB::OpenDebFile - Open a debfile /*{{{*/
+bool CacheDB::OpenDebFile()
+{
+ // always close existing file first
+ CloseDebFile();
+
+ // first open the fd, then pass it to the debDebFile
+ if(OpenFile() == false)
+ return false;
+ DebFile = new debDebFile(*Fd);
+ if (_error->PendingError() == true)
+ return false;
+ return true;
+}
+ /*}}}*/
+// CacheDB::CloseDebFile - Close a debfile again /*{{{*/
+void CacheDB::CloseDebFile()
+{
+ CloseFile();
+
+ if(DebFile != NULL)
+ {
+ delete DebFile;
+ DebFile = NULL;
+ }
+}
+ /*}}}*/
+// CacheDB::GetFileStat - Get stats from the file /*{{{*/
+// ---------------------------------------------------------------------
+/* This gets the size from the database if it's there. If we need
+ * to look at the file, also get the mtime from the file. */
+bool CacheDB::GetFileStat(bool const &doStat)
+{
+ if ((CurStat.Flags & FlSize) == FlSize && doStat == false)
+ return true;
+
+ /* Get it from the file. */
+ if (OpenFile() == false)
+ return false;
+
+ // Stat the file
+ struct stat St;
+ if (fstat(Fd->Fd(),&St) != 0)
+ {
+ CloseFile();
+ return _error->Errno("fstat",
+ _("Failed to stat %s"),FileName.c_str());
+ }
+ CurStat.FileSize = St.st_size;
+ CurStat.mtime = htonl(St.st_mtime);
+ CurStat.Flags |= FlSize;
+
+ return true;
+}
+ /*}}}*/
+// CacheDB::GetCurStatCompatOldFormat /*{{{*/
+// ---------------------------------------------------------------------
+/* Read the old (32bit FileSize) StateStore format from disk */
+bool CacheDB::GetCurStatCompatOldFormat()
+{
+ InitQueryStats();
+ Data.data = &CurStatOldFormat;
+ Data.flags = DB_DBT_USERMEM;
+ Data.ulen = sizeof(CurStatOldFormat);
+ if (Get() == false)
+ {
+ CurStat.Flags = 0;
+ } else {
+ CurStat.Flags = CurStatOldFormat.Flags;
+ CurStat.mtime = CurStatOldFormat.mtime;
+ CurStat.FileSize = CurStatOldFormat.FileSize;
+ memcpy(CurStat.MD5, CurStatOldFormat.MD5, sizeof(CurStat.MD5));
+ memcpy(CurStat.SHA1, CurStatOldFormat.SHA1, sizeof(CurStat.SHA1));
+ memcpy(CurStat.SHA256, CurStatOldFormat.SHA256, sizeof(CurStat.SHA256));
+ }
+ return true;
+}
+ /*}}}*/
+// CacheDB::GetCurStatCompatOldFormat /*{{{*/
+// ---------------------------------------------------------------------
+/* Read the new (64bit FileSize) StateStore format from disk */
+bool CacheDB::GetCurStatCompatNewFormat()
+{
+ InitQueryStats();
+ Data.data = &CurStat;
+ Data.flags = DB_DBT_USERMEM;
+ Data.ulen = sizeof(CurStat);
+ if (Get() == false)
+ {
+ CurStat.Flags = 0;
+ }
+ return true;
+}
+ /*}}}*/
+// CacheDB::GetCurStat - Set the CurStat variable. /*{{{*/
+// ---------------------------------------------------------------------
+/* Sets the CurStat variable. Either to 0 if no database is used
+ * or to the value in the database if one is used */
+bool CacheDB::GetCurStat()
+{
+ memset(&CurStat,0,sizeof(CurStat));
+
+ if (DBLoaded)
+ {
+ // do a first query to just get the size of the data on disk
+ InitQueryStats();
+ Data.data = &CurStat;
+ Data.flags = DB_DBT_USERMEM;
+ Data.ulen = 0;
+ Get();
+
+ if (Data.size == 0)
+ {
+ // nothing needs to be done, we just have not data for this deb
+ }
+ // check if the record is written in the old format (32bit filesize)
+ else if(Data.size == sizeof(CurStatOldFormat))
+ {
+ GetCurStatCompatOldFormat();
+ }
+ else if(Data.size == sizeof(CurStat))
+ {
+ GetCurStatCompatNewFormat();
+ } else {
+ return _error->Error("Cache record size mismatch (%ul)", Data.size);
+ }
+
+ CurStat.Flags = ntohl(CurStat.Flags);
+ CurStat.FileSize = ntohl(CurStat.FileSize);
+ }
+ return true;
+}
+ /*}}}*/
+// CacheDB::GetFileInfo - Get all the info about the file /*{{{*/
+// ---------------------------------------------------------------------
+bool CacheDB::GetFileInfo(std::string const &FileName, bool const &DoControl, bool const &DoContents,
+ bool const &GenContentsOnly, bool const DoSource, unsigned int const DoHashes,
+ bool const &checkMtime)
+{
+ this->FileName = FileName;
+
+ if (GetCurStat() == false)
+ return false;
+ OldStat = CurStat;
+
+ if (GetFileStat(checkMtime) == false)
+ return false;
+
+ /* if mtime changed, update CurStat from disk */
+ if (checkMtime == true && OldStat.mtime != CurStat.mtime)
+ CurStat.Flags = FlSize;
+
+ Stats.Bytes += CurStat.FileSize;
+ ++Stats.Packages;
+
+ if ((DoControl && LoadControl() == false)
+ || (DoContents && LoadContents(GenContentsOnly) == false)
+ || (DoSource && LoadSource() == false)
+ || (DoHashes != 0 && GetHashes(false, DoHashes) == false)
+ )
+ {
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
+bool CacheDB::LoadSource() /*{{{*/
+{
+ // Try to read the control information out of the DB.
+ if ((CurStat.Flags & FlSource) == FlSource)
+ {
+ // Lookup the control information
+ InitQuerySource();
+ if (Get() == true && Dsc.TakeDsc(Data.data, Data.size) == true)
+ {
+ return true;
+ }
+ CurStat.Flags &= ~FlSource;
+ }
+ if (OpenFile() == false)
+ return false;
+
+ Stats.Misses++;
+ if (Dsc.Read(FileName) == false)
+ return false;
+
+ if (Dsc.Length == 0)
+ return _error->Error(_("Failed to read .dsc"));
+
+ // Write back the control information
+ InitQuerySource();
+ if (Put(Dsc.Data.c_str(), Dsc.Length) == true)
+ CurStat.Flags |= FlSource;
+
+ return true;
+}
+ /*}}}*/
+// CacheDB::LoadControl - Load Control information /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::LoadControl()
+{
+ // Try to read the control information out of the DB.
+ if ((CurStat.Flags & FlControl) == FlControl)
+ {
+ // Lookup the control information
+ InitQueryControl();
+ if (Get() == true && Control.TakeControl(Data.data,Data.size) == true)
+ return true;
+ CurStat.Flags &= ~FlControl;
+ }
+
+ if(OpenDebFile() == false)
+ return false;
+
+ Stats.Misses++;
+ if (Control.Read(*DebFile) == false)
+ return false;
+
+ if (Control.Control == 0)
+ return _error->Error(_("Archive has no control record"));
+
+ // Write back the control information
+ InitQueryControl();
+ if (Put(Control.Control,Control.Length) == true)
+ CurStat.Flags |= FlControl;
+ return true;
+}
+ /*}}}*/
+// CacheDB::LoadContents - Load the File Listing /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::LoadContents(bool const &GenOnly)
+{
+ // Try to read the control information out of the DB.
+ if ((CurStat.Flags & FlContents) == FlContents)
+ {
+ if (GenOnly == true)
+ return true;
+
+ // Lookup the contents information
+ InitQueryContent();
+ if (Get() == true)
+ {
+ if (Contents.TakeContents(Data.data,Data.size) == true)
+ return true;
+ }
+
+ CurStat.Flags &= ~FlContents;
+ }
+
+ if(OpenDebFile() == false)
+ return false;
+
+ Stats.Misses++;
+ if (Contents.Read(*DebFile) == false)
+ return false;
+
+ // Write back the control information
+ InitQueryContent();
+ if (Put(Contents.Data,Contents.CurSize) == true)
+ CurStat.Flags |= FlContents;
+ return true;
+}
+ /*}}}*/
+// CacheDB::GetHashes - Get the hashes /*{{{*/
+static std::string bytes2hex(uint8_t *bytes, size_t length) {
+ char buf[3];
+ std::string space;
+
+ space.reserve(length*2 + 1);
+ for (size_t i = 0; i < length; i++) {
+ snprintf(buf, sizeof(buf), "%02x", bytes[i]);
+ space.append(buf);
+ }
+ return space;
+}
+
+static inline unsigned char xdig2num(char const &dig) {
+ if (isdigit(dig)) return dig - '0';
+ if ('a' <= dig && dig <= 'f') return dig - 'a' + 10;
+ if ('A' <= dig && dig <= 'F') return dig - 'A' + 10;
+ return 0;
+}
+
+static void hex2bytes(uint8_t *bytes, const char *hex, int length) {
+ while (length-- > 0) {
+ *bytes = 0;
+ if (isxdigit(hex[0]) && isxdigit(hex[1])) {
+ *bytes = xdig2num(hex[0]) * 16 + xdig2num(hex[1]);
+ hex += 2;
+ }
+ bytes++;
+ }
+}
+bool CacheDB::GetHashes(bool const GenOnly, unsigned int const DoHashes)
+{
+ unsigned int notCachedHashes = 0;
+ if ((CurStat.Flags & FlMD5) != FlMD5)
+ {
+ notCachedHashes = notCachedHashes | Hashes::MD5SUM;
+ }
+ if ((CurStat.Flags & FlSHA1) != FlSHA1)
+ {
+ notCachedHashes = notCachedHashes | Hashes::SHA1SUM;
+ }
+ if ((CurStat.Flags & FlSHA256) != FlSHA256)
+ {
+ notCachedHashes = notCachedHashes | Hashes::SHA256SUM;
+ }
+ if ((CurStat.Flags & FlSHA512) != FlSHA512)
+ {
+ notCachedHashes = notCachedHashes | Hashes::SHA512SUM;
+ }
+ unsigned int FlHashes = DoHashes & notCachedHashes;
+ HashesList.clear();
+
+ if (FlHashes != 0)
+ {
+ if (OpenFile() == false)
+ return false;
+
+ Hashes hashes(FlHashes);
+ if (Fd->Seek(0) == false || hashes.AddFD(*Fd, CurStat.FileSize) == false)
+ return false;
+
+ HashStringList hl = hashes.GetHashStringList();
+ for (HashStringList::const_iterator hs = hl.begin(); hs != hl.end(); ++hs)
+ {
+ HashesList.push_back(*hs);
+ if (strcasecmp(hs->HashType().c_str(), "SHA512") == 0)
+ {
+ Stats.SHA512Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.SHA512, hs->HashValue().data(), sizeof(CurStat.SHA512));
+ CurStat.Flags |= FlSHA512;
+ }
+ else if (strcasecmp(hs->HashType().c_str(), "SHA256") == 0)
+ {
+ Stats.SHA256Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.SHA256, hs->HashValue().data(), sizeof(CurStat.SHA256));
+ CurStat.Flags |= FlSHA256;
+ }
+ else if (strcasecmp(hs->HashType().c_str(), "SHA1") == 0)
+ {
+ Stats.SHA1Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.SHA1, hs->HashValue().data(), sizeof(CurStat.SHA1));
+ CurStat.Flags |= FlSHA1;
+ }
+ else if (strcasecmp(hs->HashType().c_str(), "MD5Sum") == 0)
+ {
+ Stats.MD5Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.MD5, hs->HashValue().data(), sizeof(CurStat.MD5));
+ CurStat.Flags |= FlMD5;
+ }
+ else if (strcasecmp(hs->HashType().c_str(), "Checksum-FileSize") == 0)
+ {
+ // we store it in a different field already
+ }
+ else
+ return _error->Error("Got unknown unrequested hashtype %s", hs->HashType().c_str());
+ }
+ }
+ if (GenOnly == true)
+ return true;
+
+ bool ret = true;
+#define PUSH_BACK_HASH(FLAG, TYPE, VALUE) \
+ if ((CurStat.Flags & FLAG) == FLAG) \
+ ret &= HashesList.push_back(HashString(TYPE, bytes2hex(VALUE, sizeof(VALUE))));
+ PUSH_BACK_HASH(FlMD5, "MD5Sum", CurStat.MD5);
+ PUSH_BACK_HASH(FlSHA1, "SHA1", CurStat.SHA1);
+ PUSH_BACK_HASH(FlSHA256, "SHA256", CurStat.SHA256);
+ PUSH_BACK_HASH(FlSHA512, "SHA512", CurStat.SHA512);
+ return ret;
+}
+ /*}}}*/
+// CacheDB::Finish - Write back the cache structure /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::Finish()
+{
+ // Optimize away some writes.
+ if (CurStat.Flags == OldStat.Flags &&
+ CurStat.mtime == OldStat.mtime)
+ return true;
+
+ // Write the stat information
+ CurStat.Flags = htonl(CurStat.Flags);
+ CurStat.FileSize = htonl(CurStat.FileSize);
+ InitQueryStats();
+ Put(&CurStat,sizeof(CurStat));
+ CurStat.Flags = ntohl(CurStat.Flags);
+ CurStat.FileSize = ntohl(CurStat.FileSize);
+
+ return true;
+}
+ /*}}}*/
+// CacheDB::Clean - Clean the Database /*{{{*/
+// ---------------------------------------------------------------------
+/* Tidy the database by removing files that no longer exist at all. */
+bool CacheDB::Clean()
+{
+ if (DBLoaded == false)
+ return true;
+
+ /* I'm not sure what VERSION_MINOR should be here.. 2.4.14 certainly
+ needs the lower one and 2.7.7 needs the upper.. */
+ DBC *Cursor;
+ if ((errno = Dbp->cursor(Dbp, NULL, &Cursor, 0)) != 0)
+ return _error->Error(_("Unable to get a cursor"));
+
+ DBT Key;
+ DBT Data;
+ memset(&Key,0,sizeof(Key));
+ memset(&Data,0,sizeof(Data));
+ while ((errno = Cursor->c_get(Cursor,&Key,&Data,DB_NEXT)) == 0)
+ {
+ const char *Colon = (char*)memrchr(Key.data, ':', Key.size);
+ if (Colon)
+ {
+ if (stringcmp(Colon + 1, (char *)Key.data+Key.size,"st") == 0 ||
+ stringcmp(Colon + 1, (char *)Key.data+Key.size,"cl") == 0 ||
+ stringcmp(Colon + 1, (char *)Key.data+Key.size,"cs") == 0 ||
+ stringcmp(Colon + 1, (char *)Key.data+Key.size,"cn") == 0)
+ {
+ std::string FileName = std::string((const char *)Key.data,Colon);
+ if (FileExists(FileName) == true) {
+ continue;
+ }
+ }
+ }
+ Cursor->c_del(Cursor,0);
+ }
+ int res = Dbp->compact(Dbp, NULL, NULL, NULL, NULL, DB_FREE_SPACE, NULL);
+ if (res < 0)
+ _error->Warning("compact failed with result %i", res);
+
+ if(_config->FindB("Debug::APT::FTPArchive::Clean", false) == true)
+ Dbp->stat_print(Dbp, 0);
+
+
+ return true;
+}
+ /*}}}*/
diff --git a/ftparchive/cachedb.h b/ftparchive/cachedb.h
new file mode 100644
index 0000000..399e1f1
--- /dev/null
+++ b/ftparchive/cachedb.h
@@ -0,0 +1,195 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CacheDB
+
+ Simple uniform interface to a cache database.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef CACHEDB_H
+#define CACHEDB_H
+
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/hashes.h>
+
+#include <db.h>
+#include <string>
+#include <errno.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "contents.h"
+#include "sources.h"
+
+class FileFd;
+
+
+class CacheDB
+{
+ protected:
+
+ // Database state/access
+ DBT Key;
+ DBT Data;
+ char TmpKey[600];
+ DB *Dbp;
+ bool DBLoaded;
+ bool ReadOnly;
+ std::string DBFile;
+
+ // Generate a key for the DB of a given type
+ void _InitQuery(const char *Type)
+ {
+ memset(&Key,0,sizeof(Key));
+ memset(&Data,0,sizeof(Data));
+ Key.data = TmpKey;
+ Key.size = snprintf(TmpKey,sizeof(TmpKey),"%s:%s",FileName.c_str(), Type);
+ }
+
+ void InitQueryStats() {
+ _InitQuery("st");
+ }
+ void InitQuerySource() {
+ _InitQuery("cs");
+ }
+ void InitQueryControl() {
+ _InitQuery("cl");
+ }
+ void InitQueryContent() {
+ _InitQuery("cn");
+ }
+
+ inline bool Get()
+ {
+ return Dbp->get(Dbp,0,&Key,&Data,0) == 0;
+ };
+ inline bool Put(const void *In,unsigned long const &Length)
+ {
+ if (ReadOnly == true)
+ return true;
+ Data.size = Length;
+ Data.data = (void *)In;
+ if (DBLoaded == true && (errno = Dbp->put(Dbp,0,&Key,&Data,0)) != 0)
+ {
+ DBLoaded = false;
+ return false;
+ }
+ return true;
+ }
+ bool OpenFile();
+ void CloseFile();
+
+ bool OpenDebFile();
+ void CloseDebFile();
+
+ // GetCurStat needs some compat code, see lp #1274466)
+ bool GetCurStatCompatOldFormat();
+ bool GetCurStatCompatNewFormat();
+ bool GetCurStat();
+
+ bool GetFileStat(bool const &doStat = false);
+ bool LoadControl();
+ bool LoadContents(bool const &GenOnly);
+ bool LoadSource();
+ bool GetHashes(bool const GenOnly, unsigned int const DoHashes);
+
+ // Stat info stored in the DB, Fixed types since it is written to disk.
+ enum FlagList {FlControl = (1<<0),FlMD5=(1<<1),FlContents=(1<<2),
+ FlSize=(1<<3), FlSHA1=(1<<4), FlSHA256=(1<<5),
+ FlSHA512=(1<<6), FlSource=(1<<7)
+ };
+
+ // the on-disk format changed (FileSize increased to 64bit) in
+ // commit 650faab0 which will lead to corruption with old caches
+ struct StatStoreOldFormat
+ {
+ uint32_t Flags;
+ uint32_t mtime;
+ uint32_t FileSize;
+ uint8_t MD5[16];
+ uint8_t SHA1[20];
+ uint8_t SHA256[32];
+ } CurStatOldFormat;
+
+ // WARNING: this struct is read/written to the DB so do not change the
+ // layout of the fields (see lp #1274466), only append to it
+ struct StatStore
+ {
+ uint32_t Flags;
+ uint32_t mtime;
+ uint64_t FileSize;
+ uint8_t MD5[16];
+ uint8_t SHA1[20];
+ uint8_t SHA256[32];
+ uint8_t SHA512[64];
+ } CurStat;
+ struct StatStore OldStat;
+
+ // 'set' state
+ std::string FileName;
+ FileFd *Fd;
+ debDebFile *DebFile;
+
+ public:
+
+ // Data collection helpers
+ debDebFile::MemControlExtract Control;
+ ContentsExtract Contents;
+ DscExtract Dsc;
+ HashStringList HashesList;
+
+ // Runtime statistics
+ struct Stats
+ {
+ double Bytes;
+ double MD5Bytes;
+ double SHA1Bytes;
+ double SHA256Bytes;
+ double SHA512Bytes;
+ unsigned long Packages;
+ unsigned long Misses;
+ unsigned long long DeLinkBytes;
+
+ inline void Add(const Stats &S) {
+ Bytes += S.Bytes;
+ MD5Bytes += S.MD5Bytes;
+ SHA1Bytes += S.SHA1Bytes;
+ SHA256Bytes += S.SHA256Bytes;
+ SHA512Bytes += S.SHA512Bytes;
+ Packages += S.Packages;
+ Misses += S.Misses;
+ DeLinkBytes += S.DeLinkBytes;
+ };
+ Stats() : Bytes(0), MD5Bytes(0), SHA1Bytes(0), SHA256Bytes(0),
+ SHA512Bytes(0),Packages(0), Misses(0), DeLinkBytes(0) {};
+ } Stats;
+
+ bool ReadyDB(std::string const &DB = "");
+ inline bool DBFailed() {return Dbp != 0 && DBLoaded == false;};
+ inline bool Loaded() {return DBLoaded == true;};
+
+ inline unsigned long long GetFileSize(void) {return CurStat.FileSize;}
+
+ bool SetFile(std::string const &FileName,struct stat St,FileFd *Fd);
+
+ // terrible old overloaded interface
+ bool GetFileInfo(std::string const &FileName,
+ bool const &DoControl,
+ bool const &DoContents,
+ bool const &GenContentsOnly,
+ bool const DoSource,
+ unsigned int const DoHashes,
+ bool const &checkMtime = false);
+
+ bool Finish();
+
+ bool Clean();
+
+ explicit CacheDB(std::string const &DB);
+ ~CacheDB();
+};
+
+#endif
diff --git a/ftparchive/contents.cc b/ftparchive/contents.cc
new file mode 100644
index 0000000..a743283
--- /dev/null
+++ b/ftparchive/contents.cc
@@ -0,0 +1,409 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ contents - Archive contents generator
+
+ The GenContents class is a back end for an archive contents generator.
+ It takes a list of per-deb file name and merges it into a memory
+ database of all previous output. This database is stored as a set
+ of binary trees linked across directories to form a tree of all files+dirs
+ given to it. The tree will also be sorted as it is built up thus
+ removing the massive sort time overhead.
+
+ By breaking all the pathnames into components and storing them
+ separately a space saving is realized by not duplicating the string
+ over and over again. Ultimately this saving is sacrificed to storage of
+ the tree structure itself but the tree structure yields a speed gain
+ in the sorting and processing. Ultimately it takes about 5 seconds to
+ do 141000 nodes and about 5 meg of ram.
+
+ The tree looks something like:
+
+ usr/
+ / \ / libslang
+ bin/ lib/ --> libc6
+ / \ \ libfoo
+ games/ sbin/
+
+ The ---> is the DirDown link
+
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "contents.h"
+
+#include <apti18n.h>
+ /*}}}*/
+
+// GenContents::~GenContents - Free allocated memory /*{{{*/
+// ---------------------------------------------------------------------
+/* Since all our allocations are static big-block allocations all that is
+ needed is to free all of them. */
+GenContents::~GenContents()
+{
+ while (BlockList != 0)
+ {
+ BigBlock *Old = BlockList;
+ BlockList = Old->Next;
+ free(Old->Block);
+ delete Old;
+ }
+}
+ /*}}}*/
+// GenContents::Mystrdup - Custom strdup /*{{{*/
+// ---------------------------------------------------------------------
+/* This strdup also uses a large block allocator to eliminate glibc
+ overhead */
+char *GenContents::Mystrdup(const char *From)
+{
+ unsigned int Len = strlen(From) + 1;
+ if (StrLeft <= Len)
+ {
+ StrLeft = 4096*10;
+ StrPool = (char *)malloc(StrLeft);
+
+ BigBlock *Block = new BigBlock;
+ Block->Block = StrPool;
+ Block->Next = BlockList;
+ BlockList = Block;
+ }
+
+ memcpy(StrPool,From,Len);
+ StrLeft -= Len;
+
+ char *Res = StrPool;
+ StrPool += Len;
+ return Res;
+}
+ /*}}}*/
+// GenContents::Node::operator new - Big block allocator /*{{{*/
+// ---------------------------------------------------------------------
+/* This eliminates glibc's malloc overhead by allocating large blocks and
+ having a continuous set of Nodes. This takes about 8 bytes off each nodes
+ space needs. Freeing is not supported. */
+void *GenContents::Node::operator new(size_t Amount,GenContents *Owner)
+{
+ if (Owner->NodeLeft == 0)
+ {
+ Owner->NodeLeft = 10000;
+ Owner->NodePool = static_cast<Node *>(malloc(Amount*Owner->NodeLeft));
+ BigBlock *Block = new BigBlock;
+ Block->Block = Owner->NodePool;
+ Block->Next = Owner->BlockList;
+ Owner->BlockList = Block;
+ }
+
+ Owner->NodeLeft--;
+ return Owner->NodePool++;
+}
+ /*}}}*/
+// GenContents::Grab - Grab a new node representing Name under Top /*{{{*/
+// ---------------------------------------------------------------------
+/* This grabs a new node representing the pathname component Name under
+ the node Top. The node is given the name Package. It is assumed that Name
+ is inside of top. If a duplicate already entered name is found then
+ a note is made on the Dup list and the previous in-tree node is returned. */
+GenContents::Node *GenContents::Grab(GenContents::Node *Top,const char *Name,
+ const char *Package)
+{
+ /* We drop down to the next dir level each call. This simplifies
+ the calling routine */
+ if (Top->DirDown == 0)
+ {
+ Node *Item = new(this) Node;
+ Item->Path = Mystrdup(Name);
+ Item->Package = Package;
+ Top->DirDown = Item;
+ return Item;
+ }
+ Top = Top->DirDown;
+
+ int Res;
+ while (1)
+ {
+ Res = strcmp(Name,Top->Path);
+
+ // Collision!
+ if (Res == 0)
+ {
+ // See if this is the same package (multi-version dup)
+ if (Top->Package == Package ||
+ strcasecmp(Top->Package,Package) == 0)
+ return Top;
+
+ // Look for an already existing Dup
+ for (Node *I = Top->Dups; I != 0; I = I->Dups)
+ if (I->Package == Package ||
+ strcasecmp(I->Package,Package) == 0)
+ return Top;
+
+ // Add the dup in
+ Node *Item = new(this) Node;
+ Item->Path = Top->Path;
+ Item->Package = Package;
+ Item->Dups = Top->Dups;
+ Top->Dups = Item;
+ return Top;
+ }
+
+ // Continue to traverse the tree
+ if (Res < 0)
+ {
+ if (Top->BTreeLeft == 0)
+ break;
+ Top = Top->BTreeLeft;
+ }
+ else
+ {
+ if (Top->BTreeRight == 0)
+ break;
+ Top = Top->BTreeRight;
+ }
+ }
+
+ // The item was not found in the tree
+ Node *Item = new(this) Node;
+ Item->Path = Mystrdup(Name);
+ Item->Package = Package;
+
+ // Link it into the tree
+ if (Res < 0)
+ {
+ Item->BTreeLeft = Top->BTreeLeft;
+ Top->BTreeLeft = Item;
+ }
+ else
+ {
+ Item->BTreeRight = Top->BTreeRight;
+ Top->BTreeRight = Item;
+ }
+
+ return Item;
+}
+ /*}}}*/
+// GenContents::Add - Add a path to the tree /*{{{*/
+// ---------------------------------------------------------------------
+/* This takes a full pathname and adds it into the tree. We split the
+ pathname into directory fragments adding each one as we go. Technically
+ in output from tar this should result in hitting previous items. */
+void GenContents::Add(const char *Dir,const char *Package)
+{
+ Node *Root = &this->Root;
+
+ // Drop leading slashes
+ while (*Dir == '/' && *Dir != 0)
+ Dir++;
+
+ // Run over the string and grab out each bit up to and including a /
+ const char *Start = Dir;
+ const char *I = Dir;
+ while (*I != 0)
+ {
+ if (*I != '/' || I - Start <= 1)
+ {
+ I++;
+ continue;
+ }
+ I++;
+
+ // Copy the path fragment over
+ char Tmp[1024];
+ strncpy(Tmp,Start,I - Start);
+ Tmp[I - Start] = 0;
+
+ // Grab a node for it
+ Root = Grab(Root,Tmp,Package);
+
+ Start = I;
+ }
+
+ // The final component if it does not have a trailing /
+ if (I - Start >= 1)
+ Grab(Root,Start,Package);
+}
+ /*}}}*/
+// GenContents::WriteSpace - Write a given number of white space chars /*{{{*/
+// ---------------------------------------------------------------------
+/* We mod 8 it and write tabs where possible. */
+void GenContents::WriteSpace(std::string &out, size_t Current, size_t Target)
+{
+ if (Target <= Current)
+ Target = Current + 1;
+
+ /* Now we write tabs so long as the next tab stop would not pass
+ the target */
+ for (; (Current/8 + 1)*8 < Target; Current = (Current/8 + 1)*8)
+ out.append("\t");
+
+ // Fill the last bit with spaces
+ for (; Current < Target; Current++)
+ out.append(" ");
+}
+ /*}}}*/
+// GenContents::Print - Display the tree /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the final result function. It takes the tree and recursively
+ calls itself and runs over each section of the tree printing out
+ the pathname and the hit packages. We use Buf to build the pathname
+ summed over all the directory parents of this node. */
+void GenContents::Print(FileFd &Out)
+{
+ char Buffer[1024];
+ Buffer[0] = 0;
+ DoPrint(Out,&Root,Buffer);
+}
+void GenContents::DoPrint(FileFd &Out,GenContents::Node *Top, char *Buf)
+{
+ if (Top == 0)
+ return;
+
+ // Go left
+ DoPrint(Out,Top->BTreeLeft,Buf);
+
+ // Print the current dir location and then descend to lower dirs
+ char *OldEnd = Buf + strlen(Buf);
+ if (Top->Path != 0)
+ {
+ strcat(Buf,Top->Path);
+
+ // Do not show the item if it is a directory with dups
+ if (Top->Path[strlen(Top->Path)-1] != '/' /*|| Top->Dups == 0*/)
+ {
+ std::string out = Buf;
+ WriteSpace(out, out.length(), 60);
+ for (Node *I = Top; I != 0; I = I->Dups)
+ {
+ if (I != Top)
+ out.append(",");
+ out.append(I->Package);
+ }
+ out.append("\n");
+ Out.Write(out.c_str(), out.length());
+ }
+ }
+
+ // Go along the directory link
+ DoPrint(Out,Top->DirDown,Buf);
+ *OldEnd = 0;
+
+ // Go right
+ DoPrint(Out,Top->BTreeRight,Buf);
+}
+ /*}}}*/
+// ContentsExtract Constructor /*{{{*/
+ContentsExtract::ContentsExtract()
+ : Data(0), MaxSize(0), CurSize(0)
+{
+}
+ /*}}}*/
+// ContentsExtract Destructor /*{{{*/
+ContentsExtract::~ContentsExtract()
+{
+ free(Data);
+}
+ /*}}}*/
+// ContentsExtract::Read - Read the archive /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ContentsExtract::Read(debDebFile &Deb)
+{
+ Reset();
+ return Deb.ExtractArchive(*this);
+}
+ /*}}}*/
+// ContentsExtract::DoItem - Extract an item /*{{{*/
+// ---------------------------------------------------------------------
+/* This just tacks the name onto the end of our memory buffer */
+bool ContentsExtract::DoItem(Item &Itm, int &/*Fd*/)
+{
+ unsigned long Len = strlen(Itm.Name);
+
+ // Strip leading ./'s
+ if (Itm.Name[0] == '.' && Itm.Name[1] == '/')
+ {
+ // == './'
+ if (Len == 2)
+ return true;
+
+ Len -= 2;
+ Itm.Name += 2;
+ }
+
+ // Allocate more storage for the string list
+ if (CurSize + Len + 2 >= MaxSize || Data == 0)
+ {
+ if (MaxSize == 0)
+ MaxSize = 512*1024/2;
+ char *NewData = (char *)realloc(Data,MaxSize*2);
+ if (NewData == 0)
+ return _error->Error(_("realloc - Failed to allocate memory"));
+ Data = NewData;
+ MaxSize *= 2;
+ }
+
+ strcpy(Data+CurSize,Itm.Name);
+ CurSize += Len + 1;
+ return true;
+}
+ /*}}}*/
+// ContentsExtract::TakeContents - Load the contents data /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ContentsExtract::TakeContents(const void *NewData,unsigned long long Length)
+{
+ if (Length == 0)
+ {
+ CurSize = 0;
+ return true;
+ }
+
+ // Allocate more storage for the string list
+ if (Length + 2 >= MaxSize || Data == 0)
+ {
+ if (MaxSize == 0)
+ MaxSize = 512*1024/2;
+ while (MaxSize*2 <= Length)
+ MaxSize *= 2;
+
+ char *NewData = (char *)realloc(Data,MaxSize*2);
+ if (NewData == 0)
+ return _error->Error(_("realloc - Failed to allocate memory"));
+ Data = NewData;
+ MaxSize *= 2;
+ }
+ memcpy(Data,NewData,Length);
+ CurSize = Length;
+
+ return Data[CurSize-1] == 0;
+}
+ /*}}}*/
+// ContentsExtract::Add - Read the contents data into the sorter /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void ContentsExtract::Add(GenContents &Contents,std::string const &Package)
+{
+ const char *Start = Data;
+ char *Pkg = Contents.Mystrdup(Package.c_str());
+ for (const char *I = Data; I < Data + CurSize; I++)
+ {
+ if (*I == 0)
+ {
+ Contents.Add(Start,Pkg);
+ Start = ++I;
+ }
+ }
+}
+ /*}}}*/
diff --git a/ftparchive/contents.h b/ftparchive/contents.h
new file mode 100644
index 0000000..7460705
--- /dev/null
+++ b/ftparchive/contents.h
@@ -0,0 +1,92 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ contents - Contents of archive things.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef CONTENTS_H
+#define CONTENTS_H
+
+#include <apt-pkg/dirstream.h>
+
+#include <string>
+#include <stddef.h>
+#include <stdio.h>
+
+class debDebFile;
+class FileFd;
+
+class GenContents
+{
+ struct Node
+ {
+ // Binary Tree links
+ Node *BTreeLeft;
+ Node *BTreeRight;
+ Node *DirDown;
+ Node *Dups;
+ const char *Path;
+ const char *Package;
+
+ void *operator new(size_t Amount,GenContents *Owner);
+ void operator delete(void *) {};
+
+ Node() : BTreeLeft(0), BTreeRight(0), DirDown(0), Dups(0),
+ Path(0), Package(0) {};
+ };
+ friend struct Node;
+
+ struct BigBlock
+ {
+ void *Block;
+ BigBlock *Next;
+ };
+
+ Node Root;
+
+ // Big block allocation pools
+ BigBlock *BlockList;
+ char *StrPool;
+ unsigned long StrLeft;
+ Node *NodePool;
+ unsigned long NodeLeft;
+
+ Node *Grab(Node *Top,const char *Name,const char *Package);
+ void WriteSpace(std::string &out, size_t Current, size_t Target);
+ void DoPrint(FileFd &Out,Node *Top, char *Buf);
+
+ public:
+
+ char *Mystrdup(const char *From);
+ void Add(const char *Dir,const char *Package);
+ void Print(FileFd &Out);
+
+ GenContents() : BlockList(0), StrPool(0), StrLeft(0),
+ NodePool(0), NodeLeft(0) {};
+ ~GenContents();
+};
+
+class ContentsExtract : public pkgDirStream
+{
+ public:
+
+ // The Data Block
+ char *Data;
+ unsigned long long MaxSize;
+ unsigned long long CurSize;
+ void AddData(const char *Text);
+
+ bool Read(debDebFile &Deb);
+
+ virtual bool DoItem(Item &Itm,int &Fd) APT_OVERRIDE;
+ void Reset() {CurSize = 0;};
+ bool TakeContents(const void *Data,unsigned long long Length);
+ void Add(GenContents &Contents,std::string const &Package);
+
+ ContentsExtract();
+ virtual ~ContentsExtract();
+};
+
+#endif
diff --git a/ftparchive/multicompress.cc b/ftparchive/multicompress.cc
new file mode 100644
index 0000000..19e6563
--- /dev/null
+++ b/ftparchive/multicompress.cc
@@ -0,0 +1,363 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ MultiCompressor
+
+ This class is very complicated in order to optimize for the common
+ case of its use, writing a large set of compressed files that are
+ different from the old set. It spawns off compressors in parallel
+ to maximize compression throughput and has a separate task managing
+ the data going into the compressors.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashsum_template.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/strutl.h>
+
+#include <ctype.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <vector>
+
+#include "multicompress.h"
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+static std::vector<APT::Configuration::Compressor>::const_iterator findMatchingCompressor(std::string::const_iterator &I,
+ std::string::const_iterator const &End, std::vector<APT::Configuration::Compressor> const &Compressors)
+{
+ // Grab a word (aka: a compressor name)
+ for (; I != End && isspace(*I); ++I);
+ string::const_iterator Start = I;
+ for (; I != End && !isspace(*I); ++I);
+
+ auto const Comp = std::find_if(Compressors.begin(), Compressors.end(),
+ [&](APT::Configuration::Compressor const &C) { return stringcmp(Start, I, C.Name.c_str()) == 0;
+ });
+ if (Comp == Compressors.end())
+ _error->Warning(_("Unknown compression algorithm '%s'"),string(Start,I).c_str());
+ return Comp;
+}
+
+// MultiCompress::MultiCompress - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Setup the file outputs, compression modes and fork the writer child */
+MultiCompress::MultiCompress(string const &Output,string const &Compress,
+ mode_t const &Permissions,bool const &Write) :
+ Permissions(Permissions)
+{
+ Outputs = 0;
+ Outputter = -1;
+ UpdateMTime = 0;
+
+ auto const Compressors = APT::Configuration::getCompressors();
+ // Parse the compression string, a space separated lists of compression types
+ for (auto I = Compress.cbegin(); I != Compress.cend();)
+ {
+ auto const Comp = findMatchingCompressor(I, Compress.cend(), Compressors);
+ if (Comp == Compressors.end())
+ continue;
+
+ // Create and link in a new output
+ Files *NewOut = new Files;
+ NewOut->Next = Outputs;
+ Outputs = NewOut;
+ NewOut->CompressProg = *Comp;
+ NewOut->Output = Output + Comp->Extension;
+
+ struct stat St;
+ if (stat(NewOut->Output.c_str(),&St) == 0)
+ NewOut->OldMTime = St.st_mtime;
+ else
+ NewOut->OldMTime = 0;
+ }
+
+ if (Write == false)
+ return;
+
+ /* Open all the temp files now so we can report any errors. File is
+ made unreable to prevent people from touching it during creating. */
+ for (Files *I = Outputs; I != 0; I = I->Next)
+ I->TmpFile.Open(I->Output + ".new", FileFd::WriteOnly | FileFd::Create | FileFd::Empty, FileFd::Extension, 0600);
+ if (_error->PendingError() == true)
+ return;
+
+ if (Outputs == 0)
+ {
+ _error->Error(_("Compressed output %s needs a compression set"),Output.c_str());
+ return;
+ }
+
+ Start();
+}
+ /*}}}*/
+// MultiCompress::~MultiCompress - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Just erase the file linked list. */
+MultiCompress::~MultiCompress()
+{
+ Die();
+
+ for (; Outputs != 0;)
+ {
+ Files *Tmp = Outputs->Next;
+ delete Outputs;
+ Outputs = Tmp;
+ }
+}
+ /*}}}*/
+// MultiCompress::GetStat - Get stat information for compressed files /*{{{*/
+// ---------------------------------------------------------------------
+/* This checks each compressed file to make sure it exists and returns
+ stat information for a random file from the collection. False means
+ one or more of the files is missing. */
+bool MultiCompress::GetStat(string const &Output,string const &Compress,struct stat &St)
+{
+ auto const Compressors = APT::Configuration::getCompressors();
+
+ // Parse the compression string, a space separated lists of compression types
+ bool DidStat = false;
+ for (auto I = Compress.cbegin(); I != Compress.cend();)
+ {
+ auto const Comp = findMatchingCompressor(I, Compress.cend(), Compressors);
+ if (Comp == Compressors.end())
+ continue;
+
+ string Name = Output + Comp->Extension;
+ if (stat(Name.c_str(),&St) != 0)
+ return false;
+ DidStat = true;
+ }
+ return DidStat;
+}
+ /*}}}*/
+// MultiCompress::Start - Start up the writer child /*{{{*/
+// ---------------------------------------------------------------------
+/* Fork a child and setup the communication pipe. */
+bool MultiCompress::Start()
+{
+ // Create a data pipe
+ int Pipe[2] = {-1,-1};
+ if (pipe(Pipe) != 0)
+ return _error->Errno("pipe",_("Failed to create IPC pipe to subprocess"));
+ for (int I = 0; I != 2; I++)
+ SetCloseExec(Pipe[I],true);
+
+ // The child..
+ Outputter = fork();
+ if (Outputter == 0)
+ {
+ close(Pipe[1]);
+ Child(Pipe[0]);
+ if (_error->PendingError() == true)
+ {
+ _error->DumpErrors();
+ _exit(100);
+ }
+ _exit(0);
+ };
+
+ close(Pipe[0]);
+ if (Input.OpenDescriptor(Pipe[1], FileFd::WriteOnly, true) == false)
+ return false;
+
+ if (Outputter == -1)
+ return _error->Errno("fork",_("Failed to fork"));
+ return true;
+}
+ /*}}}*/
+// MultiCompress::Die - Clean up the writer /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool MultiCompress::Die()
+{
+ if (Input.IsOpen() == false)
+ return true;
+
+ Input.Close();
+ bool Res = ExecWait(Outputter,_("Compress child"),false);
+ Outputter = -1;
+ return Res;
+}
+ /*}}}*/
+// MultiCompress::Finalize - Finish up writing /*{{{*/
+// ---------------------------------------------------------------------
+/* This is only necessary for statistics reporting. */
+bool MultiCompress::Finalize(unsigned long long &OutSize)
+{
+ OutSize = 0;
+ if (Input.IsOpen() == false || Die() == false)
+ return false;
+
+ time_t Now;
+ time(&Now);
+
+ // Check the mtimes to see if the files were replaced.
+ bool Changed = false;
+ for (Files *I = Outputs; I != 0; I = I->Next)
+ {
+ struct stat St;
+ if (stat(I->Output.c_str(),&St) != 0)
+ return _error->Error(_("Internal error, failed to create %s"),
+ I->Output.c_str());
+
+ if (I->OldMTime != St.st_mtime)
+ Changed = true;
+ else
+ {
+ // Update the mtime if necessary
+ if (UpdateMTime > 0 &&
+ (Now - St.st_mtime > (signed)UpdateMTime || St.st_mtime > Now))
+ {
+ utimes(I->Output.c_str(), NULL);
+ Changed = true;
+ }
+ }
+
+ // Force the file permissions
+ if (St.st_mode != Permissions)
+ chmod(I->Output.c_str(),Permissions);
+
+ OutSize += St.st_size;
+ }
+
+ if (Changed == false)
+ OutSize = 0;
+
+ return true;
+}
+ /*}}}*/
+// MultiCompress::OpenOld - Open an old file /*{{{*/
+// ---------------------------------------------------------------------
+/* This opens one of the original output files, possibly decompressing it. */
+bool MultiCompress::OpenOld(FileFd &Fd)
+{
+ Files *Best = Outputs;
+ for (Files *I = Outputs; I != 0; I = I->Next)
+ if (Best->CompressProg.Cost > I->CompressProg.Cost)
+ Best = I;
+
+ // Open the file
+ return Fd.Open(Best->Output, FileFd::ReadOnly, FileFd::Extension);
+}
+ /*}}}*/
+// MultiCompress::Child - The writer child /*{{{*/
+// ---------------------------------------------------------------------
+/* The child process forks a bunch of compression children and takes
+ input on FD and passes it to all the compressor child. On the way it
+ computes the MD5 of the raw data. After this the raw data in the
+ original files is compared to see if this data is new. If the data
+ is new then the temp files are renamed, otherwise they are erased. */
+bool MultiCompress::Child(int const &FD)
+{
+ /* Okay, now we just feed data from FD to all the other FDs. Also
+ stash a hash of the data to use later. */
+ SetNonBlock(FD,false);
+ unsigned char Buffer[32*1024];
+ unsigned long long FileSize = 0;
+ MD5Summation MD5;
+ while (1)
+ {
+ WaitFd(FD,false);
+ int Res = read(FD,Buffer,sizeof(Buffer));
+ if (Res == 0)
+ break;
+ if (Res < 0)
+ continue;
+
+ MD5.Add(Buffer,Res);
+ FileSize += Res;
+ for (Files *I = Outputs; I != 0; I = I->Next)
+ {
+ if (I->TmpFile.Write(Buffer, Res) == false)
+ {
+ _error->Errno("write",_("IO to subprocess/file failed"));
+ break;
+ }
+ }
+ }
+
+ if (_error->PendingError() == true)
+ return false;
+
+ /* Now we have to copy the files over, or erase them if they
+ have not changed. First find the cheapest decompressor */
+ bool Missing = false;
+ for (Files *I = Outputs; I != 0; I = I->Next)
+ {
+ if (I->OldMTime == 0)
+ {
+ Missing = true;
+ break;
+ }
+ }
+
+ // Check the MD5 of the lowest cost entity.
+ while (Missing == false)
+ {
+ FileFd CompFd;
+ if (OpenOld(CompFd) == false)
+ {
+ _error->Discard();
+ break;
+ }
+
+ // Compute the hash
+ MD5Summation OldMD5;
+ unsigned long long NewFileSize = 0;
+ while (1)
+ {
+ unsigned long long Res = 0;
+ if (CompFd.Read(Buffer,sizeof(Buffer), &Res) == false)
+ return _error->Errno("read",_("Failed to read while computing MD5"));
+ if (Res == 0)
+ break;
+ NewFileSize += Res;
+ OldMD5.Add(Buffer,Res);
+ }
+ CompFd.Close();
+
+ // Check the hash
+ if (OldMD5.Result() == MD5.Result() &&
+ FileSize == NewFileSize)
+ {
+ for (Files *I = Outputs; I != 0; I = I->Next)
+ {
+ I->TmpFile.Close();
+ RemoveFile("MultiCompress::Child", I->TmpFile.Name());
+ }
+ return !_error->PendingError();
+ }
+ break;
+ }
+
+ // Finalize
+ for (Files *I = Outputs; I != 0; I = I->Next)
+ {
+ // Set the correct file modes
+ chmod(I->TmpFile.Name().c_str(),Permissions);
+
+ if (rename(I->TmpFile.Name().c_str(),I->Output.c_str()) != 0)
+ _error->Errno("rename",_("Failed to rename %s to %s"),
+ I->TmpFile.Name().c_str(),I->Output.c_str());
+ I->TmpFile.Close();
+ }
+
+ return !_error->PendingError();
+}
+ /*}}}*/
+
diff --git a/ftparchive/multicompress.h b/ftparchive/multicompress.h
new file mode 100644
index 0000000..c237269
--- /dev/null
+++ b/ftparchive/multicompress.h
@@ -0,0 +1,62 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ MultiCompressor
+
+ Multiple output class. Takes a single FILE* and writes it simultaneously
+ to many compressed files. Then checks if the resulting output is
+ different from any previous output and overwrites the old files. Care is
+ taken to ensure that the new files are not generally readable while they
+ are being written.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef MULTICOMPRESS_H
+#define MULTICOMPRESS_H
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/fileutl.h>
+
+#include <string>
+#include <stdio.h>
+#include <sys/types.h>
+#include <time.h>
+
+class MultiCompress
+{
+ // An output file
+ struct Files
+ {
+ std::string Output;
+ APT::Configuration::Compressor CompressProg;
+ Files *Next;
+ FileFd TmpFile;
+ pid_t CompressProc;
+ time_t OldMTime;
+ };
+
+ Files *Outputs;
+ pid_t Outputter;
+ mode_t Permissions;
+
+ bool Child(int const &Fd);
+ bool Start();
+ bool Die();
+
+ public:
+
+ // The FD to write to for compression.
+ FileFd Input;
+ unsigned long UpdateMTime;
+
+ bool Finalize(unsigned long long &OutSize);
+ bool OpenOld(FileFd &Fd);
+ static bool GetStat(std::string const &Output,std::string const &Compress,struct stat &St);
+
+ MultiCompress(std::string const &Output,std::string const &Compress,
+ mode_t const &Permissions, bool const &Write = true);
+ ~MultiCompress();
+};
+
+#endif
diff --git a/ftparchive/override.cc b/ftparchive/override.cc
new file mode 100644
index 0000000..16fefec
--- /dev/null
+++ b/ftparchive/override.cc
@@ -0,0 +1,288 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Override
+
+ Store the override file.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/strutl.h>
+
+#include <utility>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "override.h"
+
+#include <apti18n.h>
+ /*}}}*/
+
+// Override::ReadOverride - Read the override file /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses the override file and reads it into the map */
+bool Override::ReadOverride(string const &File,bool const &Source)
+{
+ if (File.empty() == true)
+ return true;
+
+ FILE *F = fopen(File.c_str(),"r");
+ if (F == 0)
+ return _error->Errno("fopen",_("Unable to open %s"),File.c_str());
+
+ char Line[1000];
+ unsigned long long Counter = 0;
+ while (fgets(Line,sizeof(Line),F) != 0)
+ {
+ Counter++;
+ Item Itm;
+
+ // Silence
+ for (char *I = Line; *I != 0; I++)
+ if (*I == '#')
+ *I = 0;
+
+ // Strip space leading up to the package name, skip blank lines
+ char *Pkg = Line;
+ for (; isspace(*Pkg) && *Pkg != 0;Pkg++);
+ if (*Pkg == 0)
+ continue;
+
+#define APT_FIND_NEXT_FIELD \
+ for (End++; isspace(*End) != 0 && *End != 0; ++End) \
+ /* skip spaces */ ; \
+ Start = End; \
+ for (; isspace(*End) == 0 && *End != 0; ++End) \
+ /* find end of word */ ;
+
+#define APT_WARNING_MALFORMED_LINE(FIELD) \
+ if (*End == 0) \
+ { \
+ _error->Warning(_("Malformed override %s line %llu (%s)"),File.c_str(), \
+ Counter, FIELD ); \
+ continue; \
+ } \
+ *End = 0;
+
+ // Find the package and zero..
+ char *Start;
+ char *End = Pkg;
+ for (; isspace(*End) == 0 && *End != 0; End++);
+ APT_WARNING_MALFORMED_LINE("pkgname");
+
+ APT_FIND_NEXT_FIELD;
+
+ // Find the priority
+ if (Source == false)
+ {
+ APT_WARNING_MALFORMED_LINE("priority");
+ Itm.Priority = Start;
+
+ APT_FIND_NEXT_FIELD;
+ }
+
+ // Find the Section
+ APT_WARNING_MALFORMED_LINE("section");
+ Itm.FieldOverride["Section"] = Start;
+
+ // Source override files only have the two columns
+ if (Source == true)
+ {
+ Mapping[Pkg] = Itm;
+ continue;
+ }
+
+ // Find the =>
+ for (End++; isspace(*End) != 0 && *End != 0; End++);
+ if (*End != 0)
+ {
+ Start = End;
+ for (; *End != 0 && (End[0] != '=' || End[1] != '>'); End++);
+ if (*End == 0 || strlen(End) < 4)
+ {
+ Itm.OldMaint = "*";
+ Itm.NewMaint = _strstrip(Start);
+ }
+ else
+ {
+ *End = 0;
+ Itm.OldMaint = _strstrip(Start);
+
+ End += 3;
+ Itm.NewMaint = _strstrip(End);
+ }
+ }
+
+ Mapping[Pkg] = Itm;
+ }
+
+ if (ferror(F))
+ _error->Errno("fgets",_("Failed to read the override file %s"),File.c_str());
+ fclose(F);
+ return true;
+}
+ /*}}}*/
+// Override::ReadExtraOverride - Read the extra override file /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses the extra override file and reads it into the map */
+bool Override::ReadExtraOverride(string const &File,bool const &/*Source*/)
+{
+ if (File.empty() == true)
+ return true;
+
+ FILE *F = fopen(File.c_str(),"r");
+ if (F == 0)
+ return _error->Errno("fopen",_("Unable to open %s"),File.c_str());
+
+ char Line[1000];
+ unsigned long long Counter = 0;
+ while (fgets(Line,sizeof(Line),F) != 0)
+ {
+ Counter++;
+
+ // Silence
+ for (char *I = Line; *I != 0; I++)
+ if (*I == '#')
+ *I = 0;
+
+ // Strip space leading up to the package name, skip blank lines
+ char *Pkg = Line;
+ for (; isspace(*Pkg) && *Pkg != 0;Pkg++);
+ if (Pkg == 0)
+ continue;
+
+ // Find the package and zero..
+ char *End = Pkg;
+ for (; isspace(*End) == 0 && *End != 0; End++);
+ if (*End == 0)
+ {
+ _error->Warning(_("Malformed override %s line %llu #1"),File.c_str(),
+ Counter);
+ continue;
+ }
+ *End = 0;
+
+ // Find the field
+ for (End++; isspace(*End) != 0 && *End != 0; End++);
+ char *Field = End;
+ for (; isspace(*End) == 0 && *End != 0; End++);
+ if (*End == 0)
+ {
+ _error->Warning(_("Malformed override %s line %llu #2"),File.c_str(),
+ Counter);
+ continue;
+ }
+ *End = 0;
+
+ // Find the field value
+ for (End++; isspace(*End) != 0 && *End != 0; End++);
+ char *Value = End;
+ for (; *End != 0; End++);
+ for (; isspace(*(End-1)) && End > Value; End--);
+ if (End == Value)
+ {
+ _error->Warning(_("Malformed override %s line %llu #3"),File.c_str(),
+ Counter);
+ continue;
+ }
+ *End = 0;
+
+ Mapping[Pkg].FieldOverride[Field] = Value;
+ }
+
+ if (ferror(F))
+ _error->Errno("fgets",_("Failed to read the override file %s"),File.c_str());
+ fclose(F);
+ return true;
+}
+ /*}}}*/
+
+// Override::GetItem - Get a architecture specific item /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns a override item for the given package and the given architecture.
+ * Treats "all" special
+ */
+Override::Item* Override::GetItem(string const &Package, string const &Architecture)
+{
+ map<string,Item>::const_iterator I = Mapping.find(Package);
+ map<string,Item>::iterator J = Mapping.find(Package + "/" + Architecture);
+
+ if (I == Mapping.end() && J == Mapping.end())
+ {
+ return 0;
+ }
+
+ Item *result = new Item;
+ if (I == Mapping.end()) *result = J->second;
+ else
+ {
+ *result = I->second;
+ if (J != Mapping.end())
+ {
+ Item *R = &J->second;
+ if (R->Priority != "") result->Priority = R->Priority;
+ if (R->OldMaint != "") result->OldMaint = R->OldMaint;
+ if (R->NewMaint != "") result->NewMaint = R->NewMaint;
+ for (map<string,string>::const_iterator foI = R->FieldOverride.begin();
+ foI != R->FieldOverride.end(); ++foI)
+ {
+ result->FieldOverride[foI->first] = foI->second;
+ }
+ }
+ }
+ return result;
+}
+
+
+// Override::Item::SwapMaint - Swap the maintainer field if necessary /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns the new maintainer string after evaluating the rewriting rule. If
+ there is a rule but it does not match then the empty string is returned,
+ also if there was no rewrite rule the empty string is returned. Failed
+ indicates if there was some kind of problem while rewriting. */
+string Override::Item::SwapMaint(string const &Orig,bool &Failed)
+{
+ Failed = false;
+
+ // Degenerate case..
+ if (NewMaint.empty() == true)
+ return OldMaint;
+
+ if (OldMaint == "*")
+ return NewMaint;
+
+ /* James: ancient, eliminate it, however it is still being used in the main
+ override file. Thus it persists.*/
+#if 1
+ // Break OldMaint up into little bits on double slash boundaries.
+ string::const_iterator End = OldMaint.begin();
+ while (1)
+ {
+ string::const_iterator Start = End;
+ for (; End < OldMaint.end() &&
+ (End + 3 >= OldMaint.end() || End[0] != ' ' ||
+ End[1] != '/' || End[2] != '/'); ++End);
+ if (stringcasecmp(Start,End,Orig.begin(),Orig.end()) == 0)
+ return NewMaint;
+
+ if (End >= OldMaint.end())
+ break;
+
+ // Skip the divider and white space
+ for (; End < OldMaint.end() && (*End == '/' || *End == ' '); ++End);
+ }
+#else
+ if (stringcasecmp(OldMaint.begin(),OldMaint.end(),Orig.begin(),Orig.end()) == 0)
+ return NewMaint;
+#endif
+
+ Failed = true;
+ return string();
+}
+ /*}}}*/
diff --git a/ftparchive/override.h b/ftparchive/override.h
new file mode 100644
index 0000000..af62a04
--- /dev/null
+++ b/ftparchive/override.h
@@ -0,0 +1,48 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Override
+
+ Store the override file.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef OVERRIDE_H
+#define OVERRIDE_H
+
+#include <map>
+#include <string>
+
+using std::string;
+using std::map;
+
+class Override
+{
+ public:
+
+ struct Item
+ {
+ string Priority;
+ string OldMaint;
+ string NewMaint;
+
+ map<string,string> FieldOverride;
+ string SwapMaint(string const &Orig,bool &Failed);
+ ~Item() {};
+ };
+
+ map<string,Item> Mapping;
+
+ inline Item *GetItem(string const &Package)
+ {
+ return GetItem(Package, "");
+ }
+ Item *GetItem(string const &Package, string const &Architecture);
+
+ bool ReadOverride(string const &File,bool const &Source = false);
+ bool ReadExtraOverride(string const &File,bool const &Source = false);
+};
+
+#endif
+
diff --git a/ftparchive/sources.cc b/ftparchive/sources.cc
new file mode 100644
index 0000000..60a8617
--- /dev/null
+++ b/ftparchive/sources.cc
@@ -0,0 +1,60 @@
+#include <sstream>
+#include <string>
+
+// for memcpy
+#include <cstring>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/gpgv.h>
+
+#include "sources.h"
+
+bool DscExtract::TakeDsc(const void *newData, unsigned long long newSize)
+{
+ if (newSize == 0)
+ {
+ // adding two newlines 'off record' for pkgTagSection.Scan() calls
+ Data = "\n\n";
+ Length = 0;
+ return true;
+ }
+
+ Data = std::string((const char*)newData, newSize);
+ // adding two newlines 'off record' for pkgTagSection.Scan() calls
+ Data.append("\n\n");
+ Length = newSize;
+
+ return true;
+}
+
+bool DscExtract::Read(std::string FileName)
+{
+ Data.clear();
+ Length = 0;
+
+ FileFd F;
+ if (OpenMaybeClearSignedFile(FileName, F) == false)
+ return false;
+
+ IsClearSigned = (FileName != F.Name());
+
+ std::ostringstream data;
+ char buffer[1024];
+ do {
+ unsigned long long actual = 0;
+ if (F.Read(buffer, sizeof(buffer)-1, &actual) == false)
+ return _error->Errno("read", "Failed to read dsc file %s", FileName.c_str());
+ if (actual == 0)
+ break;
+ Length += actual;
+ buffer[actual] = '\0';
+ data << buffer;
+ } while(true);
+
+ // adding two newlines 'off record' for pkgTagSection.Scan() calls
+ data << "\n\n";
+ Data = data.str();
+ return true;
+}
+
+
diff --git a/ftparchive/sources.h b/ftparchive/sources.h
new file mode 100644
index 0000000..a125ec6
--- /dev/null
+++ b/ftparchive/sources.h
@@ -0,0 +1,24 @@
+#ifndef SOURCES_H
+#define SOURCES_H
+
+#include <apt-pkg/tagfile.h>
+
+#include <string>
+
+class DscExtract
+{
+ public:
+ std::string Data;
+ pkgTagSection Section;
+ unsigned long long Length;
+ bool IsClearSigned;
+
+ bool TakeDsc(const void *Data, unsigned long long Size);
+ bool Read(std::string FileName);
+
+ DscExtract() : Length(0), IsClearSigned(false) {};
+ ~DscExtract() {};
+};
+
+
+#endif
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
new file mode 100644
index 0000000..dbc097a
--- /dev/null
+++ b/ftparchive/writer.cc
@@ -0,0 +1,1205 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Writer
+
+ The file writer classes. These write various types of output, sources,
+ packages and contents.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/sha2.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <algorithm>
+#include <ctime>
+#include <iomanip>
+#include <iostream>
+#include <memory>
+#include <sstream>
+#include <utility>
+#include <ctype.h>
+#include <fnmatch.h>
+#include <ftw.h>
+#include <locale.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "apt-ftparchive.h"
+#include "byhash.h"
+#include "cachedb.h"
+#include "multicompress.h"
+#include "writer.h"
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+FTWScanner *FTWScanner::Owner;
+
+// ConfigToDoHashes - which hashes to generate /*{{{*/
+static void SingleConfigToDoHashes(unsigned int &DoHashes, std::string const &Conf, unsigned int const Flag)
+{
+ if (_config->FindB(Conf, (DoHashes & Flag) == Flag) == true)
+ DoHashes |= Flag;
+ else
+ DoHashes &= ~Flag;
+}
+static void ConfigToDoHashes(unsigned int &DoHashes, std::string const &Conf)
+{
+ SingleConfigToDoHashes(DoHashes, Conf + "::MD5", Hashes::MD5SUM);
+ SingleConfigToDoHashes(DoHashes, Conf + "::SHA1", Hashes::SHA1SUM);
+ SingleConfigToDoHashes(DoHashes, Conf + "::SHA256", Hashes::SHA256SUM);
+ SingleConfigToDoHashes(DoHashes, Conf + "::SHA512", Hashes::SHA512SUM);
+}
+ /*}}}*/
+
+// FTWScanner::FTWScanner - Constructor /*{{{*/
+FTWScanner::FTWScanner(FileFd * const GivenOutput, string const &Arch, bool const IncludeArchAll)
+ : Arch(Arch), IncludeArchAll(IncludeArchAll), DoHashes(~0)
+{
+ if (GivenOutput == NULL)
+ {
+ Output = new FileFd;
+ OwnsOutput = true;
+ Output->OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly, false);
+ }
+ else
+ {
+ Output = GivenOutput;
+ OwnsOutput = false;
+ }
+ ErrorPrinted = false;
+ NoLinkAct = !_config->FindB("APT::FTPArchive::DeLinkAct",true);
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive");
+}
+ /*}}}*/
+FTWScanner::~FTWScanner()
+{
+ if (Output != NULL && OwnsOutput)
+ delete Output;
+}
+// FTWScanner::Scanner - FTW Scanner /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the FTW scanner, it processes each directory element in the
+ directory tree. */
+int FTWScanner::ScannerFTW(const char *File,const struct stat * /*sb*/,int Flag)
+{
+ if (Flag == FTW_DNR)
+ {
+ Owner->NewLine(1);
+ ioprintf(c1out, _("W: Unable to read directory %s\n"), File);
+ }
+ if (Flag == FTW_NS)
+ {
+ Owner->NewLine(1);
+ ioprintf(c1out, _("W: Unable to stat %s\n"), File);
+ }
+ if (Flag != FTW_F)
+ return 0;
+
+ return ScannerFile(File, true);
+}
+ /*}}}*/
+static bool FileMatchesPatterns(char const *const File, std::vector<std::string> const &Patterns) /*{{{*/
+{
+ const char *LastComponent = strrchr(File, '/');
+ if (LastComponent == nullptr)
+ LastComponent = File;
+ else
+ ++LastComponent;
+
+ return std::any_of(Patterns.cbegin(), Patterns.cend(), [&](std::string const &pattern) {
+ return fnmatch(pattern.c_str(), LastComponent, 0) == 0;
+ });
+}
+ /*}}}*/
+int FTWScanner::ScannerFile(const char *const File, bool const ReadLink) /*{{{*/
+{
+ if (FileMatchesPatterns(File, Owner->Patterns) == false)
+ return 0;
+
+ Owner->FilesToProcess.emplace_back(File, ReadLink);
+ return 0;
+}
+ /*}}}*/
+int FTWScanner::ProcessFile(const char *const File, bool const ReadLink) /*{{{*/
+{
+ /* Process it. If the file is a link then resolve it into an absolute
+ name.. This works best if the directory components the scanner are
+ given are not links themselves. */
+ char Jnk[2];
+ char *RealPath = NULL;
+ Owner->OriginalPath = File;
+ if (ReadLink &&
+ readlink(File,Jnk,sizeof(Jnk)) != -1 &&
+ (RealPath = realpath(File,NULL)) != 0)
+ {
+ Owner->DoPackage(RealPath);
+ free(RealPath);
+ }
+ else
+ Owner->DoPackage(File);
+
+ if (_error->empty() == false)
+ {
+ // Print any errors or warnings found
+ string Err;
+ bool SeenPath = false;
+ while (_error->empty() == false)
+ {
+ Owner->NewLine(1);
+
+ bool const Type = _error->PopMessage(Err);
+ if (Type == true)
+ cerr << _("E: ") << Err << endl;
+ else
+ cerr << _("W: ") << Err << endl;
+
+ if (Err.find(File) != string::npos)
+ SeenPath = true;
+ }
+
+ if (SeenPath == false)
+ cerr << _("E: Errors apply to file ") << "'" << File << "'" << endl;
+ return 0;
+ }
+
+ return 0;
+}
+ /*}}}*/
+// FTWScanner::RecursiveScan - Just scan a directory tree /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FTWScanner::RecursiveScan(string const &Dir)
+{
+ /* If noprefix is set then jam the scan root in, so we don't generate
+ link followed paths out of control */
+ if (InternalPrefix.empty() == true)
+ {
+ char *RealPath = nullptr;
+ if ((RealPath = realpath(Dir.c_str(), nullptr)) == 0)
+ return _error->Errno("realpath",_("Failed to resolve %s"),Dir.c_str());
+ InternalPrefix = RealPath;
+ free(RealPath);
+ }
+
+ // Do recursive directory searching
+ Owner = this;
+ int const Res = ftw(Dir.c_str(),ScannerFTW,30);
+
+ // Error treewalking?
+ if (Res != 0)
+ {
+ if (_error->PendingError() == false)
+ _error->Errno("ftw",_("Tree walking failed"));
+ return false;
+ }
+
+ using PairType = decltype(*FilesToProcess.cbegin());
+ std::sort(FilesToProcess.begin(), FilesToProcess.end(), [](PairType a, PairType b) {
+ return a.first < b.first;
+ });
+ for (PairType it : FilesToProcess)
+ if (ProcessFile(it.first.c_str(), it.second) != 0)
+ return false;
+ FilesToProcess.clear();
+ return true;
+}
+ /*}}}*/
+// FTWScanner::LoadFileList - Load the file list from a file /*{{{*/
+// ---------------------------------------------------------------------
+/* This is an alternative to using FTW to locate files, it reads the list
+ of files from another file. */
+bool FTWScanner::LoadFileList(string const &Dir, string const &File)
+{
+ /* If noprefix is set then jam the scan root in, so we don't generate
+ link followed paths out of control */
+ if (InternalPrefix.empty() == true)
+ {
+ char *RealPath = nullptr;
+ if ((RealPath = realpath(Dir.c_str(), nullptr)) == 0)
+ return _error->Errno("realpath",_("Failed to resolve %s"),Dir.c_str());
+ InternalPrefix = RealPath;
+ free(RealPath);
+ }
+
+ Owner = this;
+ FILE *List = fopen(File.c_str(),"r");
+ if (List == 0)
+ return _error->Errno("fopen",_("Failed to open %s"),File.c_str());
+
+ /* We are a tad tricky here.. We prefix the buffer with the directory
+ name, that way if we need a full path with just use line.. Sneaky and
+ fully evil. */
+ char Line[1000];
+ char *FileStart;
+ if (Dir.empty() == true || Dir.end()[-1] != '/')
+ FileStart = Line + snprintf(Line,sizeof(Line),"%s/",Dir.c_str());
+ else
+ FileStart = Line + snprintf(Line,sizeof(Line),"%s",Dir.c_str());
+ while (fgets(FileStart,sizeof(Line) - (FileStart - Line),List) != 0)
+ {
+ char *FileName = _strstrip(FileStart);
+ if (FileName[0] == 0)
+ continue;
+
+ if (FileName[0] != '/')
+ {
+ if (FileName != FileStart)
+ memmove(FileStart,FileName,strlen(FileStart));
+ FileName = Line;
+ }
+
+#if 0
+ struct stat St;
+ int Flag = FTW_F;
+ if (stat(FileName,&St) != 0)
+ Flag = FTW_NS;
+#endif
+ if (FileMatchesPatterns(FileName, Patterns) == false)
+ continue;
+
+ if (ProcessFile(FileName, false) != 0)
+ break;
+ }
+
+ fclose(List);
+ return true;
+}
+ /*}}}*/
+// FTWScanner::Delink - Delink symlinks /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FTWScanner::Delink(string &FileName,const char *OriginalPath,
+ unsigned long long &DeLinkBytes,
+ unsigned long long const &FileSize)
+{
+ // See if this isn't an internally prefix'd file name.
+ if (InternalPrefix.empty() == false &&
+ InternalPrefix.length() < FileName.length() &&
+ stringcmp(FileName.begin(),FileName.begin() + InternalPrefix.length(),
+ InternalPrefix.begin(),InternalPrefix.end()) != 0)
+ {
+ if (DeLinkLimit != 0 && DeLinkBytes/1024 < DeLinkLimit)
+ {
+ // Tidy up the display
+ if (DeLinkBytes == 0)
+ cout << endl;
+
+ NewLine(1);
+ ioprintf(c1out, _(" DeLink %s [%s]\n"), (OriginalPath + InternalPrefix.length()),
+ SizeToStr(FileSize).c_str());
+ c1out << flush;
+
+ if (NoLinkAct == false)
+ {
+ char OldLink[400];
+ if (readlink(OriginalPath,OldLink,sizeof(OldLink)) == -1)
+ _error->Errno("readlink",_("Failed to readlink %s"),OriginalPath);
+ else
+ {
+ if (RemoveFile("FTWScanner::Delink", OriginalPath))
+ {
+ if (link(FileName.c_str(),OriginalPath) != 0)
+ {
+ // Panic! Restore the symlink
+ if (symlink(OldLink,OriginalPath) != 0)
+ _error->Errno("symlink", "failed to restore symlink");
+ return _error->Errno("link",_("*** Failed to link %s to %s"),
+ FileName.c_str(),
+ OriginalPath);
+ }
+ }
+ }
+ }
+
+ DeLinkBytes += FileSize;
+ if (DeLinkBytes/1024 >= DeLinkLimit)
+ ioprintf(c1out, _(" DeLink limit of %sB hit.\n"), SizeToStr(DeLinkBytes).c_str());
+ }
+
+ FileName = OriginalPath;
+ }
+
+ return true;
+}
+ /*}}}*/
+// FTWScanner::SetExts - Set extensions to support /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FTWScanner::SetExts(string const &Vals)
+{
+ ClearPatterns();
+ string::size_type Start = 0;
+ while (Start <= Vals.length()-1)
+ {
+ string::size_type const Space = Vals.find(' ',Start);
+ string::size_type const Length = ((Space == string::npos) ? Vals.length() : Space) - Start;
+ if ( Arch.empty() == false )
+ {
+ AddPattern(string("*_") + Arch + Vals.substr(Start, Length));
+ if (IncludeArchAll == true && Arch != "all")
+ AddPattern(string("*_all") + Vals.substr(Start, Length));
+ }
+ else
+ AddPattern(string("*") + Vals.substr(Start, Length));
+
+ Start += Length + 1;
+ }
+
+ return true;
+}
+ /*}}}*/
+
+// PackagesWriter::PackagesWriter - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+PackagesWriter::PackagesWriter(FileFd * const GivenOutput, TranslationWriter * const transWriter,
+ string const &DB,string const &Overrides,string const &ExtOverrides,
+ string const &Arch, bool const IncludeArchAll) :
+ FTWScanner(GivenOutput, Arch, IncludeArchAll), Db(DB), Stats(Db.Stats), TransWriter(transWriter)
+{
+ SetExts(".deb .ddeb .udeb");
+ DeLinkLimit = 0;
+
+ // Process the command line options
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive::Packages");
+ DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false);
+ DoContents = _config->FindB("APT::FTPArchive::Contents",true);
+ NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
+ LongDescription = _config->FindB("APT::FTPArchive::LongDescription",true);
+
+ if (Db.Loaded() == false)
+ DoContents = false;
+
+ // Read the override file
+ if (Overrides.empty() == false && Over.ReadOverride(Overrides) == false)
+ return;
+ else
+ NoOverride = true;
+
+ if (ExtOverrides.empty() == false)
+ Over.ReadExtraOverride(ExtOverrides);
+
+ _error->DumpErrors();
+}
+ /*}}}*/
+// PackagesWriter::DoPackage - Process a single package /*{{{*/
+// ---------------------------------------------------------------------
+/* This method takes a package and gets its control information and
+ MD5, SHA1 and SHA256 then writes out a control record with the proper fields
+ rewritten and the path/size/hash appended. */
+bool PackagesWriter::DoPackage(string FileName)
+{
+ // Pull all the data we need form the DB
+ if (Db.GetFileInfo(FileName,
+ true, /* DoControl */
+ DoContents,
+ true, /* GenContentsOnly */
+ false, /* DoSource */
+ DoHashes, DoAlwaysStat) == false)
+ {
+ return false;
+ }
+
+ unsigned long long FileSize = Db.GetFileSize();
+ if (Delink(FileName,OriginalPath,Stats.DeLinkBytes,FileSize) == false)
+ return false;
+
+ // Lookup the override information
+ pkgTagSection &Tags = Db.Control.Section;
+ string Package = Tags.FindS("Package");
+ string Architecture;
+ // if we generate a Packages file for a given arch, we use it to
+ // look for overrides. if we run in "simple" mode without the
+ // "Architectures" variable in the config we use the architecture value
+ // from the deb file
+ if(Arch != "")
+ Architecture = Arch;
+ else
+ Architecture = Tags.FindS("Architecture");
+ unique_ptr<Override::Item> OverItem(Over.GetItem(Package,Architecture));
+
+ if (Package.empty() == true)
+ return _error->Error(_("Archive had no package field"));
+
+ // If we need to do any rewriting of the header do it now..
+ if (OverItem.get() == 0)
+ {
+ if (NoOverride == false)
+ {
+ NewLine(1);
+ ioprintf(c1out, _(" %s has no override entry\n"), Package.c_str());
+ }
+
+ OverItem = unique_ptr<Override::Item>(new Override::Item);
+ OverItem->FieldOverride["Section"] = Tags.FindS("Section");
+ OverItem->Priority = Tags.FindS("Priority");
+ }
+
+ // Strip the DirStrip prefix from the FileName and add the PathPrefix
+ string NewFileName;
+ if (DirStrip.empty() == false &&
+ FileName.length() > DirStrip.length() &&
+ stringcmp(FileName.begin(),FileName.begin() + DirStrip.length(),
+ DirStrip.begin(),DirStrip.end()) == 0)
+ NewFileName = string(FileName.begin() + DirStrip.length(),FileName.end());
+ else
+ NewFileName = FileName;
+ if (PathPrefix.empty() == false)
+ NewFileName = flCombine(PathPrefix,NewFileName);
+
+ /* Configuration says we don't want to include the long Description
+ in the package file - instead we want to ship a separated file */
+ string desc;
+ if (LongDescription == false) {
+ desc = Tags.FindS("Description").append("\n");
+ OverItem->FieldOverride["Description"] = desc.substr(0, desc.find('\n')).c_str();
+ }
+
+ // This lists all the changes to the fields we are going to make.
+ std::vector<pkgTagSection::Tag> Changes;
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Size", std::to_string(FileSize)));
+
+ for (HashStringList::const_iterator hs = Db.HashesList.begin(); hs != Db.HashesList.end(); ++hs)
+ {
+ if (hs->HashType() == "MD5Sum")
+ Changes.push_back(pkgTagSection::Tag::Rewrite("MD5sum", hs->HashValue()));
+ else if (hs->HashType() == "Checksum-FileSize")
+ continue;
+ else
+ Changes.push_back(pkgTagSection::Tag::Rewrite(hs->HashType(), hs->HashValue()));
+ }
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Filename", NewFileName));
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Priority", OverItem->Priority));
+ Changes.push_back(pkgTagSection::Tag::Remove("Status"));
+ Changes.push_back(pkgTagSection::Tag::Remove("Optional"));
+
+ string DescriptionMd5;
+ if (LongDescription == false) {
+ MD5Summation descmd5;
+ descmd5.Add(desc.c_str());
+ DescriptionMd5 = descmd5.Result().Value();
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Description-md5", DescriptionMd5));
+ if (TransWriter != NULL)
+ TransWriter->DoPackage(Package, desc, DescriptionMd5);
+ }
+
+ // Rewrite the maintainer field if necessary
+ bool MaintFailed;
+ string NewMaint = OverItem->SwapMaint(Tags.FindS("Maintainer"),MaintFailed);
+ if (MaintFailed == true)
+ {
+ if (NoOverride == false)
+ {
+ NewLine(1);
+ ioprintf(c1out, _(" %s maintainer is %s not %s\n"),
+ Package.c_str(), Tags.FindS("Maintainer").c_str(), OverItem->OldMaint.c_str());
+ }
+ }
+
+ if (NewMaint.empty() == false)
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Maintainer", NewMaint));
+
+ /* Get rid of the Optional tag. This is an ugly, ugly, ugly hack that
+ dpkg-scanpackages does. Well sort of. dpkg-scanpackages just does renaming
+ but dpkg does this append bit. So we do the append bit, at least that way the
+ status file and package file will remain similar. There are other transforms
+ but optional is the only legacy one still in use for some lazy reason. */
+ string OptionalStr = Tags.FindS("Optional");
+ if (OptionalStr.empty() == false)
+ {
+ if (Tags.FindS("Suggests").empty() == false)
+ OptionalStr = Tags.FindS("Suggests") + ", " + OptionalStr;
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Suggests", OptionalStr));
+ }
+
+ for (map<string,string>::const_iterator I = OverItem->FieldOverride.begin();
+ I != OverItem->FieldOverride.end(); ++I)
+ Changes.push_back(pkgTagSection::Tag::Rewrite(I->first, I->second));
+
+ // Rewrite and store the fields.
+ if (Tags.Write(*Output, TFRewritePackageOrder, Changes) == false ||
+ Output->Write("\n", 1) == false)
+ return false;
+
+ return Db.Finish();
+}
+ /*}}}*/
+PackagesWriter::~PackagesWriter() /*{{{*/
+{
+}
+ /*}}}*/
+
+// TranslationWriter::TranslationWriter - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* Create a Translation-Master file for this Packages file */
+TranslationWriter::TranslationWriter(string const &File, string const &TransCompress,
+ mode_t const &Permissions) : Comp(NULL), Output(NULL)
+{
+ if (File.empty() == true)
+ return;
+
+ Comp = new MultiCompress(File, TransCompress, Permissions);
+ Output = &Comp->Input;
+}
+ /*}}}*/
+// TranslationWriter::DoPackage - Process a single package /*{{{*/
+// ---------------------------------------------------------------------
+/* Create a Translation-Master file for this Packages file */
+bool TranslationWriter::DoPackage(string const &Pkg, string const &Desc,
+ string const &MD5)
+{
+ if (Output == NULL)
+ return true;
+
+ // Different archs can include different versions and therefore
+ // different descriptions - so we need to check for both name and md5.
+ string const Record = Pkg + ":" + MD5;
+
+ if (Included.find(Record) != Included.end())
+ return true;
+
+ std::string out;
+ strprintf(out, "Package: %s\nDescription-md5: %s\nDescription-en: %s\n",
+ Pkg.c_str(), MD5.c_str(), Desc.c_str());
+ Output->Write(out.c_str(), out.length());
+
+ Included.insert(Record);
+ return true;
+}
+ /*}}}*/
+// TranslationWriter::~TranslationWriter - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+TranslationWriter::~TranslationWriter()
+{
+ if (Comp != NULL)
+ delete Comp;
+}
+ /*}}}*/
+
+// SourcesWriter::SourcesWriter - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+SourcesWriter::SourcesWriter(FileFd * const GivenOutput, string const &DB, string const &BOverrides,string const &SOverrides,
+ string const &ExtOverrides) :
+ FTWScanner(GivenOutput), Db(DB), Stats(Db.Stats)
+{
+ AddPattern("*.dsc");
+ DeLinkLimit = 0;
+ Buffer = 0;
+ BufSize = 0;
+
+ // Process the command line options
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive::Sources");
+ NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
+ DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false);
+
+ // Read the override file
+ if (BOverrides.empty() == false && BOver.ReadOverride(BOverrides) == false)
+ return;
+ else
+ NoOverride = true;
+
+ // WTF?? The logic above: if we can't read binary overrides, don't even try
+ // reading source overrides. if we can read binary overrides, then say there
+ // are no overrides. THIS MAKES NO SENSE! -- ajt@d.o, 2006/02/28
+
+ if (ExtOverrides.empty() == false)
+ SOver.ReadExtraOverride(ExtOverrides);
+
+ if (SOverrides.empty() == false && FileExists(SOverrides) == true)
+ SOver.ReadOverride(SOverrides,true);
+}
+ /*}}}*/
+// SourcesWriter::DoPackage - Process a single package /*{{{*/
+static std::string getDscHash(unsigned int const DoHashes,
+ Hashes::SupportedHashes const DoIt, pkgTagSection &Tags, char const * const FieldName,
+ HashString const * const Hash, unsigned long long Size, std::string const &FileName)
+{
+ if ((DoHashes & DoIt) != DoIt || Tags.Exists(FieldName) == false || Hash == NULL)
+ return "";
+ std::ostringstream out;
+ out << "\n " << Hash->HashValue() << " " << std::to_string(Size) << " " << FileName
+ << "\n " << Tags.FindS(FieldName);
+ return out.str();
+}
+bool SourcesWriter::DoPackage(string FileName)
+{
+ // Pull all the data we need form the DB
+ if (Db.GetFileInfo(FileName,
+ false, /* DoControl */
+ false, /* DoContents */
+ false, /* GenContentsOnly */
+ true, /* DoSource */
+ DoHashes, DoAlwaysStat) == false)
+ {
+ return false;
+ }
+
+ // we need to perform a "write" here (this is what finish is doing)
+ // because the call to Db.GetFileInfo() in the loop will change
+ // the "db cursor"
+ Db.Finish();
+
+ pkgTagSection Tags;
+ if (Tags.Scan(Db.Dsc.Data.c_str(), Db.Dsc.Data.length()) == false)
+ return _error->Error("Could not find a record in the DSC '%s'",FileName.c_str());
+
+ if (Tags.Exists("Source") == false)
+ return _error->Error("Could not find a Source entry in the DSC '%s'",FileName.c_str());
+ Tags.Trim();
+
+ // Lookup the override information, finding first the best priority.
+ string BestPrio;
+ string Bins = Tags.FindS("Binary");
+ char Buffer[Bins.length() + 1];
+ unique_ptr<Override::Item> OverItem(nullptr);
+ if (Bins.empty() == false)
+ {
+ strcpy(Buffer,Bins.c_str());
+
+ // Ignore too-long errors.
+ char *BinList[400];
+ TokSplitString(',',Buffer,BinList,sizeof(BinList)/sizeof(BinList[0]));
+
+ // Look at all the binaries
+ unsigned char BestPrioV = pkgCache::State::Extra;
+ for (unsigned I = 0; BinList[I] != 0; I++)
+ {
+ unique_ptr<Override::Item> Itm(BOver.GetItem(BinList[I]));
+ if (Itm.get() == 0)
+ continue;
+
+ unsigned char NewPrioV = debListParser::GetPrio(Itm->Priority);
+ if (NewPrioV < BestPrioV || BestPrio.empty() == true)
+ {
+ BestPrioV = NewPrioV;
+ BestPrio = Itm->Priority;
+ }
+
+ if (OverItem.get() == 0)
+ OverItem = std::move(Itm);
+ }
+ }
+
+ // If we need to do any rewriting of the header do it now..
+ if (OverItem.get() == 0)
+ {
+ if (NoOverride == false)
+ {
+ NewLine(1);
+ ioprintf(c1out, _(" %s has no override entry\n"), Tags.FindS("Source").c_str());
+ }
+
+ OverItem.reset(new Override::Item);
+ }
+
+ struct stat St;
+ if (stat(FileName.c_str(), &St) != 0)
+ return _error->Errno("fstat","Failed to stat %s",FileName.c_str());
+
+ unique_ptr<Override::Item> SOverItem(SOver.GetItem(Tags.FindS("Source")));
+ // const unique_ptr<Override::Item> autoSOverItem(SOverItem);
+ if (SOverItem.get() == 0)
+ {
+ ioprintf(c1out, _(" %s has no source override entry\n"), Tags.FindS("Source").c_str());
+ SOverItem = unique_ptr<Override::Item>(BOver.GetItem(Tags.FindS("Source")));
+ if (SOverItem.get() == 0)
+ {
+ ioprintf(c1out, _(" %s has no binary override entry either\n"), Tags.FindS("Source").c_str());
+ SOverItem = unique_ptr<Override::Item>(new Override::Item);
+ *SOverItem = *OverItem;
+ }
+ }
+
+ // Add the dsc to the files hash list
+ string const strippedName = flNotDir(FileName);
+ std::string const Files = getDscHash(DoHashes, Hashes::MD5SUM, Tags, "Files", Db.HashesList.find("MD5Sum"), St.st_size, strippedName);
+ std::string ChecksumsSha1 = getDscHash(DoHashes, Hashes::SHA1SUM, Tags, "Checksums-Sha1", Db.HashesList.find("SHA1"), St.st_size, strippedName);
+ std::string ChecksumsSha256 = getDscHash(DoHashes, Hashes::SHA256SUM, Tags, "Checksums-Sha256", Db.HashesList.find("SHA256"), St.st_size, strippedName);
+ std::string ChecksumsSha512 = getDscHash(DoHashes, Hashes::SHA512SUM, Tags, "Checksums-Sha512", Db.HashesList.find("SHA512"), St.st_size, strippedName);
+
+ // Strip the DirStrip prefix from the FileName and add the PathPrefix
+ string NewFileName;
+ if (DirStrip.empty() == false &&
+ FileName.length() > DirStrip.length() &&
+ stringcmp(DirStrip,OriginalPath,OriginalPath + DirStrip.length()) == 0)
+ NewFileName = string(OriginalPath + DirStrip.length());
+ else
+ NewFileName = OriginalPath;
+ if (PathPrefix.empty() == false)
+ NewFileName = flCombine(PathPrefix,NewFileName);
+
+ string Directory = flNotFile(OriginalPath);
+ string Package = Tags.FindS("Source");
+
+ // Perform operation over all of the files
+ string ParseJnk;
+ const char *C = Files.c_str();
+ char *RealPath = NULL;
+ for (;isspace(*C); C++);
+ while (*C != 0)
+ {
+ // Parse each of the elements
+ if (ParseQuoteWord(C,ParseJnk) == false ||
+ ParseQuoteWord(C,ParseJnk) == false ||
+ ParseQuoteWord(C,ParseJnk) == false)
+ return _error->Error("Error parsing file record");
+
+ string OriginalPath = Directory + ParseJnk;
+
+ // Add missing hashes to source files
+ if (((DoHashes & Hashes::SHA1SUM) == Hashes::SHA1SUM && !Tags.Exists("Checksums-Sha1")) ||
+ ((DoHashes & Hashes::SHA256SUM) == Hashes::SHA256SUM && !Tags.Exists("Checksums-Sha256")) ||
+ ((DoHashes & Hashes::SHA512SUM) == Hashes::SHA512SUM && !Tags.Exists("Checksums-Sha512")))
+ {
+ if (Db.GetFileInfo(OriginalPath,
+ false, /* DoControl */
+ false, /* DoContents */
+ false, /* GenContentsOnly */
+ false, /* DoSource */
+ DoHashes,
+ DoAlwaysStat) == false)
+ {
+ return _error->Error("Error getting file info");
+ }
+
+ for (HashStringList::const_iterator hs = Db.HashesList.begin(); hs != Db.HashesList.end(); ++hs)
+ {
+ if (hs->HashType() == "MD5Sum" || hs->HashType() == "Checksum-FileSize")
+ continue;
+ char const * fieldname;
+ std::string * out;
+ if (hs->HashType() == "SHA1")
+ {
+ fieldname = "Checksums-Sha1";
+ out = &ChecksumsSha1;
+ }
+ else if (hs->HashType() == "SHA256")
+ {
+ fieldname = "Checksums-Sha256";
+ out = &ChecksumsSha256;
+ }
+ else if (hs->HashType() == "SHA512")
+ {
+ fieldname = "Checksums-Sha512";
+ out = &ChecksumsSha512;
+ }
+ else
+ {
+ _error->Warning("Ignoring unknown Checksumtype %s in SourcesWriter::DoPackages", hs->HashType().c_str());
+ continue;
+ }
+ if (Tags.Exists(fieldname) == true)
+ continue;
+ std::ostringstream streamout;
+ streamout << "\n " << hs->HashValue() << " " << std::to_string(Db.GetFileSize()) << " " << ParseJnk;
+ out->append(streamout.str());
+ }
+
+ // write back the GetFileInfo() stats data
+ Db.Finish();
+ }
+
+ // Perform the delinking operation
+ char Jnk[2];
+
+ if (readlink(OriginalPath.c_str(),Jnk,sizeof(Jnk)) != -1 &&
+ (RealPath = realpath(OriginalPath.c_str(),NULL)) != 0)
+ {
+ string RP = RealPath;
+ free(RealPath);
+ if (Delink(RP,OriginalPath.c_str(),Stats.DeLinkBytes,St.st_size) == false)
+ return false;
+ }
+ }
+
+ Directory = flNotFile(NewFileName);
+ if (Directory.length() > 2)
+ Directory.erase(Directory.end()-1);
+
+ // This lists all the changes to the fields we are going to make.
+ // (5 hardcoded + checksums + maintainer + end marker)
+ std::vector<pkgTagSection::Tag> Changes;
+
+ Changes.push_back(pkgTagSection::Tag::Remove("Source"));
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Package", Package));
+ if (Files.empty() == false)
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Files", Files));
+ else
+ Changes.push_back(pkgTagSection::Tag::Remove("Files"));
+ if (ChecksumsSha1.empty() == false)
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Checksums-Sha1", ChecksumsSha1));
+ else
+ Changes.push_back(pkgTagSection::Tag::Remove("Checksums-Sha1"));
+ if (ChecksumsSha256.empty() == false)
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Checksums-Sha256", ChecksumsSha256));
+ else
+ Changes.push_back(pkgTagSection::Tag::Remove("Checksums-Sha256"));
+ if (ChecksumsSha512.empty() == false)
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Checksums-Sha512", ChecksumsSha512));
+ else
+ Changes.push_back(pkgTagSection::Tag::Remove("Checksums-Sha512"));
+ if (Directory != "./")
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Directory", Directory));
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Priority", BestPrio));
+ Changes.push_back(pkgTagSection::Tag::Remove("Status"));
+
+ // Rewrite the maintainer field if necessary
+ bool MaintFailed;
+ string NewMaint = OverItem->SwapMaint(Tags.FindS("Maintainer"), MaintFailed);
+ if (MaintFailed == true)
+ {
+ if (NoOverride == false)
+ {
+ NewLine(1);
+ ioprintf(c1out, _(" %s maintainer is %s not %s\n"), Package.c_str(),
+ Tags.FindS("Maintainer").c_str(), OverItem->OldMaint.c_str());
+ }
+ }
+ if (NewMaint.empty() == false)
+ Changes.push_back(pkgTagSection::Tag::Rewrite("Maintainer", NewMaint.c_str()));
+
+ for (map<string,string>::const_iterator I = SOverItem->FieldOverride.begin();
+ I != SOverItem->FieldOverride.end(); ++I)
+ Changes.push_back(pkgTagSection::Tag::Rewrite(I->first, I->second));
+
+ // Rewrite and store the fields.
+ if (Tags.Write(*Output, TFRewriteSourceOrder, Changes) == false ||
+ Output->Write("\n", 1) == false)
+ return false;
+
+ Stats.Packages++;
+
+ return true;
+}
+ /*}}}*/
+
+// ContentsWriter::ContentsWriter - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+ContentsWriter::ContentsWriter(FileFd * const GivenOutput, string const &DB,
+ string const &Arch, bool const IncludeArchAll) :
+ FTWScanner(GivenOutput, Arch, IncludeArchAll), Db(DB), Stats(Db.Stats)
+
+{
+ SetExts(".deb");
+}
+ /*}}}*/
+// ContentsWriter::DoPackage - Process a single package /*{{{*/
+// ---------------------------------------------------------------------
+/* If Package is the empty string the control record will be parsed to
+ determine what the package name is. */
+bool ContentsWriter::DoPackage(string FileName, string Package)
+{
+ if (!Db.GetFileInfo(FileName,
+ Package.empty(), /* DoControl */
+ true, /* DoContents */
+ false, /* GenContentsOnly */
+ false, /* DoSource */
+ 0, /* DoHashes */
+ false /* checkMtime */))
+ {
+ return false;
+ }
+
+ // Parse the package name
+ if (Package.empty() == true)
+ {
+ Package = Db.Control.Section.FindS("Package");
+ }
+
+ Db.Contents.Add(Gen,Package);
+
+ return Db.Finish();
+}
+ /*}}}*/
+// ContentsWriter::ReadFromPkgs - Read from a packages file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ContentsWriter::ReadFromPkgs(string const &PkgFile,string const &PkgCompress)
+{
+ MultiCompress Pkgs(PkgFile,PkgCompress,0,false);
+ if (_error->PendingError() == true)
+ return false;
+
+ // Open the package file
+ FileFd Fd;
+ if (Pkgs.OpenOld(Fd) == false)
+ return false;
+
+ pkgTagFile Tags(&Fd);
+ if (_error->PendingError() == true)
+ return false;
+
+ // Parse.
+ pkgTagSection Section;
+ while (Tags.Step(Section) == true)
+ {
+ string File = flCombine(Prefix,Section.FindS("FileName"));
+ string Package = Section.FindS("Section");
+ if (Package.empty() == false && Package.end()[-1] != '/')
+ {
+ Package += '/';
+ Package += Section.FindS("Package");
+ }
+ else
+ Package += Section.FindS("Package");
+
+ DoPackage(File,Package);
+ if (_error->empty() == false)
+ {
+ _error->Error("Errors apply to file '%s'",File.c_str());
+ _error->DumpErrors();
+ }
+ }
+
+ // Tidy the compressor
+ Fd.Close();
+
+ return true;
+}
+
+ /*}}}*/
+
+// ReleaseWriter::ReleaseWriter - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static std::string formatUTCDateTime(time_t const now)
+{
+ bool const NumericTimezone = _config->FindB("APT::FTPArchive::Release::NumericTimezone", true);
+ // TimeRFC1123 uses GMT to satisfy HTTP/1.1
+ std::string datetime = TimeRFC1123(now, NumericTimezone);
+ if (NumericTimezone == false)
+ {
+ auto const lastspace = datetime.rfind(' ');
+ if (likely(lastspace != std::string::npos))
+ datetime.replace(lastspace + 1, 3, "UTC");
+ }
+ return datetime;
+}
+ReleaseWriter::ReleaseWriter(FileFd * const GivenOutput, string const &/*DB*/) : FTWScanner(GivenOutput)
+{
+ if (_config->FindB("APT::FTPArchive::Release::Default-Patterns", true) == true)
+ {
+ AddPattern("Packages");
+ AddPattern("Packages.*");
+ AddPattern("Translation-*");
+ AddPattern("Sources");
+ AddPattern("Sources.*");
+ AddPattern("Release");
+ AddPattern("Contents-*");
+ AddPattern("Index");
+ AddPattern("Index.*");
+ AddPattern("icons-*.tar");
+ AddPattern("icons-*.tar.*");
+ AddPattern("Components-*.yml");
+ AddPattern("Components-*.yml.*");
+ AddPattern("md5sum.txt");
+ }
+ AddPatterns(_config->FindVector("APT::FTPArchive::Release::Patterns"));
+
+ time_t const now = time(NULL);
+ time_t const validuntil = now + _config->FindI("APT::FTPArchive::Release::ValidTime", 0);
+
+ map<string,bool> BoolFields;
+ map<string,string> Fields;
+ Fields["Origin"] = "";
+ Fields["Label"] = "";
+ Fields["Suite"] = "";
+ Fields["Version"] = "";
+ Fields["Codename"] = "";
+ Fields["Date"] = formatUTCDateTime(now);
+ if (validuntil != now)
+ Fields["Valid-Until"] = formatUTCDateTime(validuntil);
+ Fields["Architectures"] = "";
+ Fields["Components"] = "";
+ Fields["Description"] = "";
+ Fields["Signed-By"] = "";
+ BoolFields["Acquire-By-Hash"] = _config->FindB("APT::FTPArchive::DoByHash", false);
+ BoolFields["NotAutomatic"] = false;
+ BoolFields["ButAutomaticUpgrades"] = false;
+
+ // Read configuration for string fields, but don't output them
+ for (auto &&I : Fields)
+ {
+ string Config = string("APT::FTPArchive::Release::") + I.first;
+ I.second = _config->Find(Config, I.second);
+ }
+
+ // Read configuration for bool fields, and add them to Fields if true
+ for (auto &&I : BoolFields)
+ {
+ string Config = string("APT::FTPArchive::Release::") + I.first;
+ I.second = _config->FindB(Config, I.second);
+ if (I.second)
+ Fields[I.first] = "yes";
+ }
+
+ // All configuration read and stored in Fields; output
+ for (auto &&I : Fields)
+ {
+ if (I.second.empty())
+ continue;
+ std::string const out = I.first + ": " + I.second + "\n";
+ Output->Write(out.c_str(), out.length());
+ }
+
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive::Release");
+}
+ /*}}}*/
+// ReleaseWriter::DoPackage - Process a single package /*{{{*/
+// ---------------------------------------------------------------------
+bool ReleaseWriter::DoPackage(string FileName)
+{
+ // Strip the DirStrip prefix from the FileName and add the PathPrefix
+ string NewFileName;
+ if (DirStrip.empty() == false &&
+ FileName.length() > DirStrip.length() &&
+ stringcmp(FileName.begin(),FileName.begin() + DirStrip.length(),
+ DirStrip.begin(),DirStrip.end()) == 0)
+ {
+ NewFileName = string(FileName.begin() + DirStrip.length(),FileName.end());
+ while (NewFileName[0] == '/')
+ NewFileName = string(NewFileName.begin() + 1,NewFileName.end());
+ }
+ else
+ NewFileName = FileName;
+
+ if (PathPrefix.empty() == false)
+ NewFileName = flCombine(PathPrefix,NewFileName);
+
+ FileFd fd(FileName, FileFd::ReadOnly);
+
+ if (!fd.IsOpen())
+ {
+ return false;
+ }
+
+ CheckSums[NewFileName].size = fd.Size();
+
+ Hashes hs(DoHashes);
+ hs.AddFD(fd);
+ CheckSums[NewFileName].Hashes = hs.GetHashStringList();
+ fd.Close();
+
+ // FIXME: wrong layer in the code(?)
+ // FIXME2: symlink instead of create a copy
+ if (_config->FindB("APT::FTPArchive::DoByHash", false) == true)
+ {
+ std::string Input = FileName;
+ HashStringList hsl = hs.GetHashStringList();
+ for(HashStringList::const_iterator h = hsl.begin();
+ h != hsl.end(); ++h)
+ {
+ if (!h->usable())
+ continue;
+ if (flNotDir(FileName) == "Release" || flNotDir(FileName) == "InRelease")
+ continue;
+
+ std::string ByHashOutputFile = GenByHashFilename(Input, *h);
+ std::string ByHashOutputDir = flNotFile(ByHashOutputFile);
+ if(!CreateDirectory(flNotFile(Input), ByHashOutputDir))
+ return _error->Warning("can not create dir %s", flNotFile(ByHashOutputFile).c_str());
+
+ // write new hashes
+ FileFd In(Input, FileFd::ReadOnly);
+ FileFd Out(ByHashOutputFile, FileFd::WriteEmpty);
+ if(!CopyFile(In, Out))
+ return _error->Warning("failed to copy %s %s", Input.c_str(), ByHashOutputFile.c_str());
+ }
+ }
+
+ return true;
+}
+
+ /*}}}*/
+// ReleaseWriter::Finish - Output the checksums /*{{{*/
+// ---------------------------------------------------------------------
+static void printChecksumTypeRecord(FileFd &Output, char const * const Type, map<string, ReleaseWriter::CheckSum> const &CheckSums)
+{
+ {
+ std::string out;
+ strprintf(out, "%s:\n", Type);
+ Output.Write(out.c_str(), out.length());
+ }
+ for(map<string,ReleaseWriter::CheckSum>::const_iterator I = CheckSums.begin();
+ I != CheckSums.end(); ++I)
+ {
+ HashString const * const hs = I->second.Hashes.find(Type);
+ if (hs == NULL)
+ continue;
+ std::string out;
+ strprintf(out, " %s %16llu %s\n",
+ hs->HashValue().c_str(),
+ (*I).second.size,
+ (*I).first.c_str());
+ Output.Write(out.c_str(), out.length());
+ }
+}
+void ReleaseWriter::Finish()
+{
+ if ((DoHashes & Hashes::MD5SUM) == Hashes::MD5SUM)
+ printChecksumTypeRecord(*Output, "MD5Sum", CheckSums);
+ if ((DoHashes & Hashes::SHA1SUM) == Hashes::SHA1SUM)
+ printChecksumTypeRecord(*Output, "SHA1", CheckSums);
+ if ((DoHashes & Hashes::SHA256SUM) == Hashes::SHA256SUM)
+ printChecksumTypeRecord(*Output, "SHA256", CheckSums);
+ if ((DoHashes & Hashes::SHA512SUM) == Hashes::SHA512SUM)
+ printChecksumTypeRecord(*Output, "SHA512", CheckSums);
+
+ // go by-hash cleanup
+ map<string,ReleaseWriter::CheckSum>::const_iterator prev = CheckSums.begin();
+ if (_config->FindB("APT::FTPArchive::DoByHash", false) == true)
+ {
+ for(map<string,ReleaseWriter::CheckSum>::const_iterator I = CheckSums.begin();
+ I != CheckSums.end(); ++I)
+ {
+ if (I->first == "Release" || I->first == "InRelease")
+ continue;
+
+ // keep iterating until we find a new subdir
+ if(flNotFile(I->first) == flNotFile(prev->first))
+ continue;
+
+ // clean that subdir up
+ int keepFiles = _config->FindI("APT::FTPArchive::By-Hash-Keep", 3);
+ // calculate how many compressors are used (the amount of files
+ // in that subdir generated for this run)
+ keepFiles *= std::distance(prev, I);
+ prev = I;
+
+ HashStringList hsl = prev->second.Hashes;
+ for(HashStringList::const_iterator h = hsl.begin();
+ h != hsl.end(); ++h)
+ {
+
+ if (!h->usable())
+ continue;
+
+ std::string RealFilename = DirStrip+"/"+prev->first;
+ std::string ByHashOutputFile = GenByHashFilename(RealFilename, *h);
+ DeleteAllButMostRecent(flNotFile(ByHashOutputFile), keepFiles);
+ }
+ }
+ }
+}
diff --git a/ftparchive/writer.h b/ftparchive/writer.h
new file mode 100644
index 0000000..9aa2168
--- /dev/null
+++ b/ftparchive/writer.h
@@ -0,0 +1,208 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Writer
+
+ The file writer classes. These write various types of output, sources,
+ packages and contents.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef WRITER_H
+#define WRITER_H
+
+#include <apt-pkg/hashes.h>
+
+#include <iostream>
+#include <map>
+#include <set>
+#include <string>
+#include <utility>
+#include <vector>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "apt-ftparchive.h"
+#include "cachedb.h"
+#include "contents.h"
+#include "override.h"
+
+using std::string;
+using std::cout;
+using std::endl;
+using std::vector;
+using std::map;
+
+class FTWScanner
+{
+ protected:
+ vector<string> Patterns;
+ vector<std::pair<string, bool>> FilesToProcess;
+ string Arch;
+ bool IncludeArchAll;
+ const char *OriginalPath;
+ bool ErrorPrinted;
+
+ // Stuff for the delinker
+ bool NoLinkAct;
+
+ static FTWScanner *Owner;
+ static int ScannerFTW(const char *File,const struct stat *sb,int Flag);
+ static int ScannerFile(const char *const File, bool const ReadLink);
+ static int ProcessFile(const char *const File, bool const ReadLink);
+
+ bool Delink(string &FileName,const char *OriginalPath,
+ unsigned long long &Bytes,unsigned long long const &FileSize);
+
+ inline void NewLine(unsigned const &Priority)
+ {
+ if (ErrorPrinted == false && Quiet <= Priority)
+ {
+ c1out << endl;
+ ErrorPrinted = true;
+ }
+ }
+
+ public:
+ FileFd *Output;
+ bool OwnsOutput;
+ unsigned int DoHashes;
+
+ unsigned long DeLinkLimit;
+ string InternalPrefix;
+
+ virtual bool DoPackage(string FileName) = 0;
+ bool RecursiveScan(string const &Dir);
+ bool LoadFileList(string const &BaseDir,string const &File);
+ void ClearPatterns() { Patterns.clear(); };
+ void AddPattern(string const &Pattern) { Patterns.push_back(Pattern); };
+ void AddPattern(char const *Pattern) { Patterns.push_back(Pattern); };
+ void AddPatterns(std::vector<std::string> const &patterns) { Patterns.insert(Patterns.end(), patterns.begin(), patterns.end()); };
+ bool SetExts(string const &Vals);
+
+ FTWScanner(FileFd * const Output, string const &Arch = string(), bool const IncludeArchAll = true);
+ virtual ~FTWScanner();
+};
+
+class MultiCompress;
+
+class TranslationWriter
+{
+ MultiCompress *Comp;
+ std::set<string> Included;
+ FileFd *Output;
+
+ public:
+ bool DoPackage(string const &Pkg, string const &Desc, string const &MD5);
+
+ TranslationWriter(string const &File, string const &TransCompress, mode_t const &Permissions);
+ ~TranslationWriter();
+};
+
+class PackagesWriter : public FTWScanner
+{
+ Override Over;
+ CacheDB Db;
+
+ public:
+
+ // Some flags
+ bool DoAlwaysStat;
+ bool NoOverride;
+ bool DoContents;
+ bool LongDescription;
+
+ // General options
+ string PathPrefix;
+ string DirStrip;
+ struct CacheDB::Stats &Stats;
+ TranslationWriter * const TransWriter;
+
+ inline bool ReadOverride(string const &File) {return Over.ReadOverride(File);};
+ inline bool ReadExtraOverride(string const &File)
+ {return Over.ReadExtraOverride(File);};
+ virtual bool DoPackage(string FileName) APT_OVERRIDE;
+
+ PackagesWriter(FileFd * const Output, TranslationWriter * const TransWriter, string const &DB,
+ string const &Overrides,
+ string const &ExtOverrides = "",
+ string const &Arch = "",
+ bool const IncludeArchAll = true);
+ virtual ~PackagesWriter();
+};
+
+class ContentsWriter : public FTWScanner
+{
+ CacheDB Db;
+
+ GenContents Gen;
+
+ public:
+
+ // General options
+ struct CacheDB::Stats &Stats;
+ string Prefix;
+
+ bool DoPackage(string FileName,string Package);
+ virtual bool DoPackage(string FileName) APT_OVERRIDE
+ {return DoPackage(FileName,string());};
+ bool ReadFromPkgs(string const &PkgFile,string const &PkgCompress);
+
+ void Finish() {Gen.Print(*Output);};
+ inline bool ReadyDB(string const &DB) {return Db.ReadyDB(DB);};
+
+ ContentsWriter(FileFd * const Output, string const &DB, string const &Arch = string(),
+ bool const IncludeArchAll = true);
+ virtual ~ContentsWriter() {};
+};
+
+class SourcesWriter : public FTWScanner
+{
+ CacheDB Db;
+ Override BOver;
+ Override SOver;
+ char *Buffer;
+ unsigned long long BufSize;
+
+ public:
+
+ bool NoOverride;
+ bool DoAlwaysStat;
+
+ // General options
+ string PathPrefix;
+ string DirStrip;
+ struct CacheDB::Stats &Stats;
+
+ virtual bool DoPackage(string FileName) APT_OVERRIDE;
+
+ SourcesWriter(FileFd * const Output, string const &DB,string const &BOverrides,string const &SOverrides,
+ string const &ExtOverrides=string());
+ virtual ~SourcesWriter() {free(Buffer);};
+};
+
+class ReleaseWriter : public FTWScanner
+{
+public:
+ ReleaseWriter(FileFd * const Output, string const &DB);
+ virtual bool DoPackage(string FileName) APT_OVERRIDE;
+ void Finish();
+
+ // General options
+ string PathPrefix;
+ string DirStrip;
+
+ struct CheckSum
+ {
+ HashStringList Hashes;
+ // Limited by FileFd::Size()
+ unsigned long long size;
+ ~CheckSum() {};
+ };
+protected:
+ map<string,struct CheckSum> CheckSums;
+};
+
+#endif
diff --git a/git-clang-format.sh b/git-clang-format.sh
new file mode 100755
index 0000000..6348652
--- /dev/null
+++ b/git-clang-format.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd "$(dirname "$0")"
+CLANG_FORMAT="$(find $(echo "$PATH" | tr ':' ' ') -name 'git-clang-format-*' | sort | tail -n1 )"
+if [ -z "$CLANG_FORMAT" ]; then
+ echo >&2 'Could not find a clang-format to use. Is the package clang-format installed?'
+ exit 1
+fi
+git "$(basename "$CLANG_FORMAT" | cut -d'-' -f 2-)" --diff "$@" | \
+ sed "s#+/\*\}\}\}\*/#+ /*}}}*/#" | \
+ patch -p1
diff --git a/methods/CMakeLists.txt b/methods/CMakeLists.txt
new file mode 100644
index 0000000..c4a32b4
--- /dev/null
+++ b/methods/CMakeLists.txt
@@ -0,0 +1,33 @@
+# Create the executable targets
+include_directories($<$<BOOL:${SECCOMP_FOUND}>:${SECCOMP_INCLUDE_DIR}>)
+link_libraries(apt-pkg $<$<BOOL:${SECCOMP_FOUND}>:${SECCOMP_LIBRARIES}>)
+
+add_library(connectlib OBJECT connect.cc rfc2553emu.cc)
+
+add_executable(file file.cc)
+add_executable(copy copy.cc)
+add_executable(store store.cc)
+add_executable(gpgv gpgv.cc)
+add_executable(cdrom cdrom.cc)
+add_executable(http http.cc basehttp.cc $<TARGET_OBJECTS:connectlib>)
+add_executable(mirror mirror.cc)
+add_executable(ftp ftp.cc $<TARGET_OBJECTS:connectlib>)
+add_executable(rred rred.cc)
+add_executable(rsh rsh.cc)
+
+target_compile_definitions(connectlib PRIVATE ${GNUTLS_DEFINITIONS})
+target_include_directories(connectlib PRIVATE ${GNUTLS_INCLUDE_DIR})
+
+# Additional libraries to link against for networked stuff
+target_link_libraries(http ${GNUTLS_LIBRARIES})
+target_link_libraries(ftp ${GNUTLS_LIBRARIES})
+
+# Install the library
+install(TARGETS file copy store gpgv cdrom http ftp rred rsh mirror
+ RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/methods)
+
+add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods mirror mirror+ftp mirror+http mirror+https mirror+file mirror+copy)
+add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods rsh ssh)
+
+
+add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods http https)
diff --git a/methods/aptmethod.h b/methods/aptmethod.h
new file mode 100644
index 0000000..02ef04c
--- /dev/null
+++ b/methods/aptmethod.h
@@ -0,0 +1,547 @@
+#ifndef APT_APTMETHOD_H
+#define APT_APTMETHOD_H
+
+#include "config.h"
+
+#include <apt-pkg/acquire-method.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/netrc.h>
+
+#include <algorithm>
+#include <locale>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+
+#ifdef HAVE_SECCOMP
+#include <signal.h>
+
+#include <seccomp.h>
+#endif
+
+enum class ResultState
+{
+ TRANSIENT_ERROR,
+ FATAL_ERROR,
+ SUCCESSFUL
+};
+
+static bool hasDoubleColon(std::string const &n)
+{
+ return n.find("::") != std::string::npos;
+}
+
+class aptMethod : public pkgAcqMethod
+{
+protected:
+ std::string const Binary;
+ unsigned long SeccompFlags;
+ enum Seccomp
+ {
+ BASE = (1 << 1),
+ NETWORK = (1 << 2),
+ DIRECTORY = (1 << 3),
+ };
+
+ public:
+ virtual bool Configuration(std::string Message) APT_OVERRIDE
+ {
+ if (pkgAcqMethod::Configuration(Message) == false)
+ return false;
+
+ std::string const conf = std::string("Binary::") + Binary;
+ _config->MoveSubTree(conf.c_str(), NULL);
+
+ DropPrivsOrDie();
+ if (LoadSeccomp() == false)
+ return false;
+
+ return true;
+ }
+
+ bool RunningInQemu(void)
+ {
+ int status;
+ pid_t pid;
+
+ pid = fork();
+ if (pid == 0)
+ {
+ close(0);
+ close(1);
+ close(2);
+ setenv("QEMU_VERSION", "meow", 1);
+ char path[] = LIBEXEC_DIR "/apt-helper";
+ char *const argv[] = {path, NULL};
+ execv(argv[0], argv);
+ _exit(255);
+ }
+
+ // apt-helper is supposed to exit with an error. If it exited with 0,
+ // qemu-user had problems with QEMU_VERSION and returned 0 => running in
+ // qemu-user.
+
+ if (waitpid(pid, &status, 0) == pid && WIFEXITED(status) && WEXITSTATUS(status) == 0)
+ return true;
+
+ return false;
+ }
+
+ bool LoadSeccomp()
+ {
+#ifdef HAVE_SECCOMP
+ int rc;
+ scmp_filter_ctx ctx = NULL;
+
+ if (SeccompFlags == 0)
+ return true;
+
+ if (_config->FindB("APT::Sandbox::Seccomp", false) == false)
+ return true;
+
+ if (RunningInQemu() == true)
+ {
+ Warning("Running in qemu-user, not using seccomp");
+ return true;
+ }
+
+ ctx = seccomp_init(SCMP_ACT_TRAP);
+ if (ctx == NULL)
+ return _error->FatalE("HttpMethod::Configuration", "Cannot init seccomp");
+
+#define ALLOW(what) \
+ if ((rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(what), 0))) \
+ return _error->FatalE("HttpMethod::Configuration", "Cannot allow %s: %s", #what, strerror(-rc));
+
+ for (auto &custom : _config->FindVector("APT::Sandbox::Seccomp::Trap"))
+ {
+ if ((rc = seccomp_rule_add(ctx, SCMP_ACT_TRAP, seccomp_syscall_resolve_name(custom.c_str()), 0)))
+ return _error->FatalE("HttpMethod::Configuration", "Cannot trap %s: %s", custom.c_str(), strerror(-rc));
+ }
+
+ ALLOW(access);
+ ALLOW(arch_prctl);
+ ALLOW(brk);
+ ALLOW(chmod);
+ ALLOW(chown);
+ ALLOW(chown32);
+ ALLOW(clock_getres);
+ ALLOW(clock_gettime);
+ ALLOW(clock_nanosleep);
+ ALLOW(close);
+ ALLOW(creat);
+ ALLOW(dup);
+ ALLOW(dup2);
+ ALLOW(dup3);
+ ALLOW(exit);
+ ALLOW(exit_group);
+ ALLOW(faccessat);
+ ALLOW(fchmod);
+ ALLOW(fchmodat);
+ ALLOW(fchown);
+ ALLOW(fchown32);
+ ALLOW(fchownat);
+ ALLOW(fcntl);
+ ALLOW(fcntl64);
+ ALLOW(fdatasync);
+ ALLOW(flock);
+ ALLOW(fstat);
+ ALLOW(fstat64);
+ ALLOW(fstatat64);
+ ALLOW(fstatfs);
+ ALLOW(fstatfs64);
+ ALLOW(fsync);
+ ALLOW(ftime);
+ ALLOW(ftruncate);
+ ALLOW(ftruncate64);
+ ALLOW(futex);
+ ALLOW(futimesat);
+ ALLOW(getegid);
+ ALLOW(getegid32);
+ ALLOW(geteuid);
+ ALLOW(geteuid32);
+ ALLOW(getgid);
+ ALLOW(getgid32);
+ ALLOW(getgroups);
+ ALLOW(getgroups32);
+ ALLOW(getpeername);
+ ALLOW(getpgid);
+ ALLOW(getpgrp);
+ ALLOW(getpid);
+ ALLOW(getppid);
+ ALLOW(getrandom);
+ ALLOW(getresgid);
+ ALLOW(getresgid32);
+ ALLOW(getresuid);
+ ALLOW(getresuid32);
+ ALLOW(getrlimit);
+ ALLOW(get_robust_list);
+ ALLOW(getrusage);
+ ALLOW(gettid);
+ ALLOW(gettimeofday);
+ ALLOW(getuid);
+ ALLOW(getuid32);
+ ALLOW(ioctl);
+ ALLOW(lchown);
+ ALLOW(lchown32);
+ ALLOW(_llseek);
+ ALLOW(lseek);
+ ALLOW(lstat);
+ ALLOW(lstat64);
+ ALLOW(madvise);
+ ALLOW(mmap);
+ ALLOW(mmap2);
+ ALLOW(mprotect);
+ ALLOW(mremap);
+ ALLOW(msync);
+ ALLOW(munmap);
+ ALLOW(nanosleep);
+ ALLOW(newfstatat);
+ ALLOW(_newselect);
+ ALLOW(oldfstat);
+ ALLOW(oldlstat);
+ ALLOW(oldolduname);
+ ALLOW(oldstat);
+ ALLOW(olduname);
+ ALLOW(open);
+ ALLOW(openat);
+ ALLOW(pipe);
+ ALLOW(pipe2);
+ ALLOW(poll);
+ ALLOW(ppoll);
+ ALLOW(prctl);
+ ALLOW(prlimit64);
+ ALLOW(pselect6);
+ ALLOW(read);
+ ALLOW(readv);
+ ALLOW(rename);
+ ALLOW(renameat);
+ ALLOW(renameat2);
+ ALLOW(restart_syscall);
+ ALLOW(rt_sigaction);
+ ALLOW(rt_sigpending);
+ ALLOW(rt_sigprocmask);
+ ALLOW(rt_sigqueueinfo);
+ ALLOW(rt_sigreturn);
+ ALLOW(rt_sigsuspend);
+ ALLOW(rt_sigtimedwait);
+ ALLOW(sched_yield);
+ ALLOW(select);
+ ALLOW(set_robust_list);
+ ALLOW(sigaction);
+ ALLOW(sigpending);
+ ALLOW(sigprocmask);
+ ALLOW(sigreturn);
+ ALLOW(sigsuspend);
+ ALLOW(stat);
+ ALLOW(stat64);
+ ALLOW(statfs);
+ ALLOW(statfs64);
+#ifdef __NR_statx
+ ALLOW(statx);
+#endif
+ ALLOW(sync);
+ ALLOW(syscall);
+ ALLOW(sysinfo);
+ ALLOW(time);
+ ALLOW(truncate);
+ ALLOW(truncate64);
+ ALLOW(ugetrlimit);
+ ALLOW(umask);
+ ALLOW(uname);
+ ALLOW(unlink);
+ ALLOW(unlinkat);
+ ALLOW(utime);
+ ALLOW(utimensat);
+ ALLOW(utimes);
+ ALLOW(write);
+ ALLOW(writev);
+
+ if ((SeccompFlags & Seccomp::NETWORK) != 0)
+ {
+ ALLOW(bind);
+ ALLOW(connect);
+ ALLOW(getsockname);
+ ALLOW(getsockopt);
+ ALLOW(recv);
+ ALLOW(recvfrom);
+ ALLOW(recvmmsg);
+ ALLOW(recvmsg);
+ ALLOW(send);
+ ALLOW(sendmmsg);
+ ALLOW(sendmsg);
+ ALLOW(sendto);
+ ALLOW(setsockopt);
+ ALLOW(shutdown);
+ ALLOW(socket);
+ ALLOW(socketcall);
+ }
+
+ if ((SeccompFlags & Seccomp::DIRECTORY) != 0)
+ {
+ ALLOW(readdir);
+ ALLOW(getdents);
+ ALLOW(getdents64);
+ }
+
+ if (getenv("FAKED_MODE"))
+ {
+ ALLOW(semop);
+ ALLOW(semget);
+ ALLOW(msgsnd);
+ ALLOW(msgrcv);
+ ALLOW(msgget);
+ ALLOW(msgctl);
+ ALLOW(ipc);
+ }
+
+ for (auto &custom : _config->FindVector("APT::Sandbox::Seccomp::Allow"))
+ {
+ if ((rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, seccomp_syscall_resolve_name(custom.c_str()), 0)))
+ return _error->FatalE("aptMethod::Configuration", "Cannot allow %s: %s", custom.c_str(), strerror(-rc));
+ }
+
+#undef ALLOW
+
+ rc = seccomp_load(ctx);
+ if (rc == -EINVAL)
+ Warning("aptMethod::Configuration: could not load seccomp policy: %s", strerror(-rc));
+ else if (rc != 0)
+ return _error->FatalE("aptMethod::Configuration", "could not load seccomp policy: %s", strerror(-rc));
+
+ if (_config->FindB("APT::Sandbox::Seccomp::Print", true))
+ {
+ struct sigaction action;
+ memset(&action, 0, sizeof(action));
+ sigemptyset(&action.sa_mask);
+ action.sa_sigaction = [](int, siginfo_t *info, void *) {
+ // Formats a number into a 10 digit ASCII string
+ char buffer[10];
+ int number = info->si_syscall;
+
+ for (int i = sizeof(buffer) - 1; i >= 0; i--)
+ {
+ buffer[i] = (number % 10) + '0';
+ number /= 10;
+ }
+
+ constexpr const char *str1 = "\n **** Seccomp prevented execution of syscall ";
+ constexpr const char *str2 = " on architecture ";
+ constexpr const char *str3 = " ****\n";
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-result"
+#endif
+ write(2, str1, strlen(str1));
+ write(2, buffer, sizeof(buffer));
+ write(2, str2, strlen(str2));
+ write(2, COMMON_ARCH, strlen(COMMON_ARCH));
+ write(2, str3, strlen(str3));
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+ _exit(31);
+ };
+ action.sa_flags = SA_SIGINFO;
+
+ sigaction(SIGSYS, &action, nullptr);
+ }
+#endif
+ return true;
+ }
+
+ bool CalculateHashes(FetchItem const * const Itm, FetchResult &Res) const APT_NONNULL(2)
+ {
+ Hashes Hash(Itm->ExpectedHashes);
+ FileFd Fd;
+ if (Fd.Open(Res.Filename, FileFd::ReadOnly) == false || Hash.AddFD(Fd) == false)
+ return false;
+ Res.TakeHashes(Hash);
+ return true;
+ }
+
+ void Warning(const char *Format,...)
+ {
+ va_list args;
+ va_start(args,Format);
+ PrintStatus("104 Warning", Format, args);
+ va_end(args);
+ }
+
+ std::vector<std::string> methodNames;
+ void setPostfixForMethodNames(char const * const postfix) APT_NONNULL(2)
+ {
+ methodNames.erase(std::remove_if(methodNames.begin(), methodNames.end(), hasDoubleColon), methodNames.end());
+ decltype(methodNames) toAdd;
+ for (auto && name: methodNames)
+ toAdd.emplace_back(name + "::" + postfix);
+ std::move(toAdd.begin(), toAdd.end(), std::back_inserter(methodNames));
+ }
+ bool DebugEnabled() const
+ {
+ if (methodNames.empty())
+ return false;
+ auto const sni = std::find_if_not(methodNames.crbegin(), methodNames.crend(), hasDoubleColon);
+ if (unlikely(sni == methodNames.crend()))
+ return false;
+ auto const ln = methodNames[methodNames.size() - 1];
+ // worst case: all three are the same
+ std::string confln, confsn, confpn;
+ strprintf(confln, "Debug::Acquire::%s", ln.c_str());
+ strprintf(confsn, "Debug::Acquire::%s", sni->c_str());
+ auto const pni = sni->substr(0, sni->find('+'));
+ strprintf(confpn, "Debug::Acquire::%s", pni.c_str());
+ return _config->FindB(confln,_config->FindB(confsn, _config->FindB(confpn, false)));
+ }
+ std::string ConfigFind(char const * const postfix, std::string const &defValue) const APT_NONNULL(2)
+ {
+ for (auto name = methodNames.rbegin(); name != methodNames.rend(); ++name)
+ {
+ std::string conf;
+ strprintf(conf, "Acquire::%s::%s", name->c_str(), postfix);
+ auto const value = _config->Find(conf);
+ if (value.empty() == false)
+ return value;
+ }
+ return defValue;
+ }
+ std::string ConfigFind(std::string const &postfix, std::string const &defValue) const
+ {
+ return ConfigFind(postfix.c_str(), defValue);
+ }
+ bool ConfigFindB(char const * const postfix, bool const defValue) const APT_NONNULL(2)
+ {
+ return StringToBool(ConfigFind(postfix, defValue ? "yes" : "no"), defValue);
+ }
+ int ConfigFindI(char const * const postfix, int const defValue) const APT_NONNULL(2)
+ {
+ char *End;
+ std::string const value = ConfigFind(postfix, "");
+ auto const Res = strtol(value.c_str(), &End, 0);
+ if (value.c_str() == End)
+ return defValue;
+ return Res;
+ }
+
+ bool TransferModificationTimes(char const * const From, char const * const To, time_t &LastModified) APT_NONNULL(2, 3)
+ {
+ if (strcmp(To, "/dev/null") == 0)
+ return true;
+
+ struct stat Buf2;
+ if (lstat(To, &Buf2) != 0 || S_ISLNK(Buf2.st_mode))
+ return true;
+
+ struct stat Buf;
+ if (stat(From, &Buf) != 0)
+ return _error->Errno("stat",_("Failed to stat"));
+
+ // we don't use utimensat here for compatibility reasons: #738567
+ struct timeval times[2];
+ times[0].tv_sec = Buf.st_atime;
+ LastModified = times[1].tv_sec = Buf.st_mtime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ if (utimes(To, times) != 0)
+ return _error->Errno("utimes",_("Failed to set modification time"));
+ return true;
+ }
+
+ // This is a copy of #pkgAcqMethod::Dequeue which is private & hidden
+ void Dequeue()
+ {
+ FetchItem const *const Tmp = Queue;
+ Queue = Queue->Next;
+ if (Tmp == QueueBack)
+ QueueBack = Queue;
+ delete Tmp;
+ }
+
+ aptMethod(std::string &&Binary, char const *const Ver, unsigned long const Flags) APT_NONNULL(3)
+ : pkgAcqMethod(Ver, Flags), Binary(Binary), SeccompFlags(0), methodNames({Binary})
+ {
+ try {
+ std::locale::global(std::locale(""));
+ } catch (...) {
+ setlocale(LC_ALL, "");
+ }
+ }
+};
+class aptAuthConfMethod : public aptMethod
+{
+ std::vector<std::unique_ptr<FileFd>> authconfs;
+
+ public:
+ virtual bool Configuration(std::string Message) APT_OVERRIDE
+ {
+ if (pkgAcqMethod::Configuration(Message) == false)
+ return false;
+
+ std::string const conf = std::string("Binary::") + Binary;
+ _config->MoveSubTree(conf.c_str(), NULL);
+
+ // ignore errors with opening the auth file as it doesn't need to exist
+ _error->PushToStack();
+ auto const netrc = _config->FindFile("Dir::Etc::netrc");
+ if (netrc.empty() == false)
+ {
+ authconfs.emplace_back(new FileFd());
+ authconfs.back()->Open(netrc, FileFd::ReadOnly);
+ }
+
+ auto const netrcparts = _config->FindDir("Dir::Etc::netrcparts");
+ if (netrcparts.empty() == false)
+ {
+ for (auto const &netrc : GetListOfFilesInDir(netrcparts, "conf", true, true))
+ {
+ authconfs.emplace_back(new FileFd());
+ authconfs.back()->Open(netrc, FileFd::ReadOnly);
+ }
+ }
+ _error->RevertToStack();
+
+ DropPrivsOrDie();
+
+ if (LoadSeccomp() == false)
+ return false;
+
+ return true;
+ }
+
+ bool MaybeAddAuthTo(URI &uri)
+ {
+ bool result = true;
+
+ if (uri.User.empty() == false || uri.Password.empty() == false)
+ return true;
+
+ for (auto &authconf : authconfs)
+ {
+ if (authconf->IsOpen() == false)
+ continue;
+ if (authconf->Seek(0) == false)
+ {
+ result = false;
+ continue;
+ }
+
+ result &= MaybeAddAuth(*authconf, uri);
+ }
+
+ return result;
+ }
+
+ aptAuthConfMethod(std::string &&Binary, char const *const Ver, unsigned long const Flags) APT_NONNULL(3)
+ : aptMethod(std::move(Binary), Ver, Flags) {}
+};
+#endif
diff --git a/methods/basehttp.cc b/methods/basehttp.cc
new file mode 100644
index 0000000..f8dd7c0
--- /dev/null
+++ b/methods/basehttp.cc
@@ -0,0 +1,909 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ HTTP and HTTPS share a lot of common code and these classes are
+ exactly the dumping ground for this common code
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <limits>
+#include <map>
+#include <string>
+#include <vector>
+#include <ctype.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "basehttp.h"
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+string BaseHttpMethod::FailFile;
+int BaseHttpMethod::FailFd = -1;
+time_t BaseHttpMethod::FailTime = 0;
+
+// Number of successful requests in a pipeline needed to continue
+// pipelining after a connection reset.
+constexpr int PIPELINE_MIN_SUCCESSFUL_ANSWERS_TO_CONTINUE = 3;
+
+// ServerState::RunHeaders - Get the headers before the data /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns 0 if things are OK, 1 if an IO error occurred and 2 if a header
+ parse error occurred */
+ServerState::RunHeadersResult ServerState::RunHeaders(RequestState &Req,
+ const std::string &Uri)
+{
+ Owner->Status(_("Waiting for headers"));
+ do
+ {
+ string Data;
+ if (ReadHeaderLines(Data) == false)
+ continue;
+
+ if (Owner->Debug == true)
+ clog << "Answer for: " << Uri << endl << Data;
+
+ for (string::const_iterator I = Data.begin(); I < Data.end(); ++I)
+ {
+ string::const_iterator J = I;
+ for (; J != Data.end() && *J != '\n' && *J != '\r'; ++J);
+ if (Req.HeaderLine(string(I,J)) == false)
+ return RUN_HEADERS_PARSE_ERROR;
+ I = J;
+ }
+
+ // 100 Continue is a Nop...
+ if (Req.Result == 100)
+ continue;
+
+ // Tidy up the connection persistence state.
+ if (Req.Encoding == RequestState::Closes && Req.HaveContent == true)
+ Persistent = false;
+
+ return RUN_HEADERS_OK;
+ } while (LoadNextResponse(false, Req) == ResultState::SUCCESSFUL);
+
+ return RUN_HEADERS_IO_ERROR;
+}
+ /*}}}*/
+bool RequestState::HeaderLine(string const &Line) /*{{{*/
+{
+ if (Line.empty() == true)
+ return true;
+
+ if (Result == 0 && Line.size() > 4 && stringcasecmp(Line.data(), Line.data() + 4, "HTTP") == 0)
+ {
+ // Evil servers return no version
+ if (Line[4] == '/')
+ {
+ int const elements = sscanf(Line.c_str(),"HTTP/%3u.%3u %3u%359[^\n]",&Major,&Minor,&Result,Code);
+ if (elements == 3)
+ {
+ Code[0] = '\0';
+ if (Owner != NULL && Owner->Debug == true)
+ clog << "HTTP server doesn't give Reason-Phrase for " << std::to_string(Result) << std::endl;
+ }
+ else if (elements != 4)
+ return _error->Error(_("The HTTP server sent an invalid reply header"));
+ }
+ else
+ {
+ Major = 0;
+ Minor = 9;
+ if (sscanf(Line.c_str(),"HTTP %3u%359[^\n]",&Result,Code) != 2)
+ return _error->Error(_("The HTTP server sent an invalid reply header"));
+ }
+
+ /* Check the HTTP response header to get the default persistence
+ state. */
+ if (Major < 1)
+ Server->Persistent = false;
+ else
+ {
+ if (Major == 1 && Minor == 0)
+ {
+ Server->Persistent = false;
+ }
+ else
+ {
+ Server->Persistent = true;
+ if (Server->PipelineAllowed)
+ Server->Pipeline = true;
+ }
+ }
+
+ return true;
+ }
+
+ // Blah, some servers use "connection:closes", evil.
+ // and some even send empty header fields…
+ string::size_type Pos = Line.find(':');
+ if (Pos == string::npos)
+ return _error->Error(_("Bad header line"));
+ ++Pos;
+
+ // Parse off any trailing spaces between the : and the next word.
+ string::size_type Pos2 = Pos;
+ while (Pos2 < Line.length() && isspace_ascii(Line[Pos2]) != 0)
+ Pos2++;
+
+ string const Tag(Line,0,Pos);
+ string const Val(Line,Pos2);
+
+ if (stringcasecmp(Tag,"Content-Length:") == 0)
+ {
+ auto ContentLength = strtoull(Val.c_str(), NULL, 10);
+ if (ContentLength == 0)
+ return true;
+ if (Encoding == Closes)
+ Encoding = Stream;
+ HaveContent = true;
+
+ unsigned long long * DownloadSizePtr = &DownloadSize;
+ if (Result == 416 || (Result >= 300 && Result < 400))
+ DownloadSizePtr = &JunkSize;
+
+ *DownloadSizePtr = ContentLength;
+ if (*DownloadSizePtr >= std::numeric_limits<unsigned long long>::max())
+ return _error->Errno("HeaderLine", _("The HTTP server sent an invalid Content-Length header"));
+ else if (*DownloadSizePtr == 0)
+ HaveContent = false;
+
+ // On partial content (206) the Content-Length less than the real
+ // size, so do not set it here but leave that to the Content-Range
+ // header instead
+ if(Result != 206 && TotalFileSize == 0)
+ TotalFileSize = DownloadSize;
+
+ return true;
+ }
+
+ if (stringcasecmp(Tag,"Content-Type:") == 0)
+ {
+ HaveContent = true;
+ return true;
+ }
+
+ // The Content-Range field only has a meaning in HTTP/1.1 for the
+ // 206 (Partial Content) and 416 (Range Not Satisfiable) responses
+ // according to RFC7233 "Range Requests", §4.2, so only consider it
+ // for such responses.
+ if ((Result == 416 || Result == 206) && stringcasecmp(Tag,"Content-Range:") == 0)
+ {
+ HaveContent = true;
+
+ // §14.16 says 'byte-range-resp-spec' should be a '*' in case of 416
+ if (Result == 416 && sscanf(Val.c_str(), "bytes */%llu",&TotalFileSize) == 1)
+ ; // we got the expected filesize which is all we wanted
+ else if (sscanf(Val.c_str(),"bytes %llu-%*u/%llu",&StartPos,&TotalFileSize) != 2)
+ return _error->Error(_("The HTTP server sent an invalid Content-Range header"));
+ if (StartPos > TotalFileSize)
+ return _error->Error(_("This HTTP server has broken range support"));
+
+ // figure out what we will download
+ DownloadSize = TotalFileSize - StartPos;
+ return true;
+ }
+
+ if (stringcasecmp(Tag,"Transfer-Encoding:") == 0)
+ {
+ HaveContent = true;
+ if (stringcasecmp(Val,"chunked") == 0)
+ Encoding = Chunked;
+ return true;
+ }
+
+ if (stringcasecmp(Tag,"Connection:") == 0)
+ {
+ if (stringcasecmp(Val,"close") == 0)
+ {
+ Server->Persistent = false;
+ Server->Pipeline = false;
+ /* Some servers send error pages (as they are dynamically generated)
+ for simplicity via a connection close instead of e.g. chunked,
+ so assuming an always closing server only if we get a file + close */
+ if (Result >= 200 && Result < 300 && Server->PipelineAnswersReceived < PIPELINE_MIN_SUCCESSFUL_ANSWERS_TO_CONTINUE)
+ {
+ Server->PipelineAllowed = false;
+ Server->PipelineAnswersReceived = 0;
+ }
+ }
+ else if (stringcasecmp(Val,"keep-alive") == 0)
+ Server->Persistent = true;
+ return true;
+ }
+
+ if (stringcasecmp(Tag,"Last-Modified:") == 0)
+ {
+ if (RFC1123StrToTime(Val.c_str(), Date) == false)
+ return _error->Error(_("Unknown date format"));
+ return true;
+ }
+
+ if (stringcasecmp(Tag,"Location:") == 0)
+ {
+ Location = Val;
+ return true;
+ }
+
+ if (stringcasecmp(Tag, "Accept-Ranges:") == 0)
+ {
+ std::string ranges = ',' + Val + ',';
+ ranges.erase(std::remove(ranges.begin(), ranges.end(), ' '), ranges.end());
+ if (ranges.find(",bytes,") == std::string::npos)
+ Server->RangesAllowed = false;
+ return true;
+ }
+
+ return true;
+}
+ /*}}}*/
+// ServerState::ServerState - Constructor /*{{{*/
+ServerState::ServerState(URI Srv, BaseHttpMethod *Owner) :
+ ServerName(Srv), TimeOut(30), Owner(Owner)
+{
+ Reset();
+}
+ /*}}}*/
+bool RequestState::AddPartialFileToHashes(FileFd &File) /*{{{*/
+{
+ File.Truncate(StartPos);
+ return Server->GetHashes()->AddFD(File, StartPos);
+}
+ /*}}}*/
+void ServerState::Reset() /*{{{*/
+{
+ Persistent = false;
+ Pipeline = false;
+ PipelineAllowed = true;
+ RangesAllowed = true;
+ PipelineAnswersReceived = 0;
+}
+ /*}}}*/
+
+// BaseHttpMethod::DealWithHeaders - Handle the retrieved header data /*{{{*/
+// ---------------------------------------------------------------------
+/* We look at the header data we got back from the server and decide what
+ to do. Returns DealWithHeadersResult (see http.h for details).
+ */
+BaseHttpMethod::DealWithHeadersResult
+BaseHttpMethod::DealWithHeaders(FetchResult &Res, RequestState &Req)
+{
+ // Not Modified
+ if (Req.Result == 304)
+ {
+ RemoveFile("server", Queue->DestFile);
+ Res.IMSHit = true;
+ Res.LastModified = Queue->LastModified;
+ Res.Size = 0;
+ return IMS_HIT;
+ }
+
+ /* Note that it is only OK for us to treat all redirection the same
+ because we *always* use GET, not other HTTP methods.
+ Codes not mentioned are handled as errors later as required by the
+ HTTP spec to handle unknown codes the same as the x00 code. */
+ constexpr unsigned int RedirectCodes[] = {
+ 301, // Moved Permanently
+ 302, // Found
+ 303, // See Other
+ 307, // Temporary Redirect
+ 308, // Permanent Redirect
+ };
+ if (AllowRedirect && std::find(std::begin(RedirectCodes), std::end(RedirectCodes), Req.Result) != std::end(RedirectCodes))
+ {
+ if (Req.Location.empty() == true)
+ ;
+ else if (Req.Location[0] == '/' && Queue->Uri.empty() == false)
+ {
+ URI Uri = Queue->Uri;
+ if (Uri.Host.empty() == false)
+ NextURI = URI::SiteOnly(Uri);
+ else
+ NextURI.clear();
+ NextURI.append(DeQuoteString(Req.Location));
+ if (Queue->Uri == NextURI)
+ {
+ SetFailReason("RedirectionLoop");
+ _error->Error("Redirection loop encountered");
+ if (Req.HaveContent == true)
+ return ERROR_WITH_CONTENT_PAGE;
+ return ERROR_UNRECOVERABLE;
+ }
+ return TRY_AGAIN_OR_REDIRECT;
+ }
+ else
+ {
+ NextURI = DeQuoteString(Req.Location);
+ URI tmpURI = NextURI;
+ if (tmpURI.Access.find('+') != std::string::npos)
+ {
+ _error->Error("Server tried to trick us into using a specific implementation: %s", tmpURI.Access.c_str());
+ if (Req.HaveContent == true)
+ return ERROR_WITH_CONTENT_PAGE;
+ return ERROR_UNRECOVERABLE;
+ }
+ URI Uri = Queue->Uri;
+ if (Binary.find('+') != std::string::npos)
+ {
+ auto base = Binary.substr(0, Binary.find('+'));
+ if (base != tmpURI.Access)
+ {
+ tmpURI.Access = base + '+' + tmpURI.Access;
+ if (tmpURI.Access == Binary)
+ {
+ std::string tmpAccess = Uri.Access;
+ std::swap(tmpURI.Access, Uri.Access);
+ NextURI = tmpURI;
+ std::swap(tmpURI.Access, Uri.Access);
+ }
+ else
+ NextURI = tmpURI;
+ }
+ }
+ if (Queue->Uri == NextURI)
+ {
+ SetFailReason("RedirectionLoop");
+ _error->Error("Redirection loop encountered");
+ if (Req.HaveContent == true)
+ return ERROR_WITH_CONTENT_PAGE;
+ return ERROR_UNRECOVERABLE;
+ }
+ Uri.Access = Binary;
+ // same protocol redirects are okay
+ if (tmpURI.Access == Uri.Access)
+ return TRY_AGAIN_OR_REDIRECT;
+ // as well as http to https
+ else if ((Uri.Access == "http" || Uri.Access == "https+http") && tmpURI.Access == "https")
+ return TRY_AGAIN_OR_REDIRECT;
+ else
+ {
+ auto const tmpplus = tmpURI.Access.find('+');
+ if (tmpplus != std::string::npos && tmpURI.Access.substr(tmpplus + 1) == "https")
+ {
+ auto const uriplus = Uri.Access.find('+');
+ if (uriplus == std::string::npos)
+ {
+ if (Uri.Access == tmpURI.Access.substr(0, tmpplus)) // foo -> foo+https
+ return TRY_AGAIN_OR_REDIRECT;
+ }
+ else if (Uri.Access.substr(uriplus + 1) == "http" &&
+ Uri.Access.substr(0, uriplus) == tmpURI.Access.substr(0, tmpplus)) // foo+http -> foo+https
+ return TRY_AGAIN_OR_REDIRECT;
+ }
+ }
+ _error->Error("Redirection from %s to '%s' is forbidden", Uri.Access.c_str(), NextURI.c_str());
+ }
+ /* else pass through for error message */
+ }
+ // retry after an invalid range response without partial data
+ else if (Req.Result == 416)
+ {
+ struct stat SBuf;
+ if (stat(Queue->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
+ {
+ bool partialHit = false;
+ if (Queue->ExpectedHashes.usable() == true)
+ {
+ Hashes resultHashes(Queue->ExpectedHashes);
+ FileFd file(Queue->DestFile, FileFd::ReadOnly);
+ Req.TotalFileSize = file.FileSize();
+ Req.Date = file.ModificationTime();
+ resultHashes.AddFD(file);
+ HashStringList const hashList = resultHashes.GetHashStringList();
+ partialHit = (Queue->ExpectedHashes == hashList);
+ }
+ else if ((unsigned long long)SBuf.st_size == Req.TotalFileSize)
+ partialHit = true;
+ if (partialHit == true)
+ {
+ // the file is completely downloaded, but was not moved
+ if (Req.HaveContent == true)
+ {
+ // nuke the sent error page
+ Server->RunDataToDevNull(Req);
+ Req.HaveContent = false;
+ }
+ Req.StartPos = Req.TotalFileSize;
+ Req.Result = 200;
+ }
+ else if (RemoveFile("server", Queue->DestFile))
+ {
+ NextURI = Queue->Uri;
+ return TRY_AGAIN_OR_REDIRECT;
+ }
+ }
+ }
+
+ /* We have a reply we don't handle. This should indicate a perm server
+ failure */
+ if (Req.Result < 200 || Req.Result >= 300)
+ {
+ if (_error->PendingError() == false)
+ {
+ std::string err;
+ strprintf(err, "HttpError%u", Req.Result);
+ SetFailReason(err);
+ _error->Error("%u %s", Req.Result, Req.Code);
+ }
+ if (Req.HaveContent == true)
+ return ERROR_WITH_CONTENT_PAGE;
+ return ERROR_UNRECOVERABLE;
+ }
+
+ // This is some sort of 2xx 'data follows' reply
+ Res.LastModified = Req.Date;
+ Res.Size = Req.TotalFileSize;
+ return FILE_IS_OPEN;
+}
+ /*}}}*/
+// BaseHttpMethod::SigTerm - Handle a fatal signal /*{{{*/
+// ---------------------------------------------------------------------
+/* This closes and timestamps the open file. This is necessary to get
+ resume behavior on user abort */
+void BaseHttpMethod::SigTerm(int)
+{
+ if (FailFd == -1)
+ _exit(100);
+
+ struct timeval times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(FailFile.c_str(), times);
+ close(FailFd);
+
+ _exit(100);
+}
+ /*}}}*/
+// BaseHttpMethod::Fetch - Fetch an item /*{{{*/
+// ---------------------------------------------------------------------
+/* This adds an item to the pipeline. We keep the pipeline at a fixed
+ depth. */
+bool BaseHttpMethod::Fetch(FetchItem *)
+{
+ if (Server == nullptr || QueueBack == nullptr)
+ return true;
+
+ // If pipelining is disabled, we only queue 1 request
+ auto const AllowedDepth = Server->Pipeline ? PipelineDepth : 0;
+ // how deep is our pipeline currently?
+ decltype(PipelineDepth) CurrentDepth = 0;
+ for (FetchItem const *I = Queue; I != QueueBack; I = I->Next)
+ ++CurrentDepth;
+ if (CurrentDepth > AllowedDepth)
+ return true;
+
+ do {
+ // Make sure we stick with the same server
+ if (Server->Comp(QueueBack->Uri) == false)
+ break;
+
+ bool const UsableHashes = QueueBack->ExpectedHashes.usable();
+ // if we have no hashes, do at most one such request
+ // as we can't fixup pipeling misbehaviors otherwise
+ if (CurrentDepth != 0 && UsableHashes == false)
+ break;
+
+ if (UsableHashes && FileExists(QueueBack->DestFile))
+ {
+ FileFd partial(QueueBack->DestFile, FileFd::ReadOnly);
+ Hashes wehave(QueueBack->ExpectedHashes);
+ if (QueueBack->ExpectedHashes.FileSize() == partial.FileSize())
+ {
+ if (wehave.AddFD(partial) &&
+ wehave.GetHashStringList() == QueueBack->ExpectedHashes)
+ {
+ FetchResult Res;
+ Res.Filename = QueueBack->DestFile;
+ Res.ResumePoint = QueueBack->ExpectedHashes.FileSize();
+ URIStart(Res);
+ // move item to the start of the queue as URIDone will
+ // always dequeued the first item in the queue
+ if (Queue != QueueBack)
+ {
+ FetchItem *Prev = Queue;
+ for (; Prev->Next != QueueBack; Prev = Prev->Next)
+ /* look for the previous queue item */;
+ Prev->Next = QueueBack->Next;
+ QueueBack->Next = Queue;
+ Queue = QueueBack;
+ QueueBack = Prev->Next;
+ }
+ Res.TakeHashes(wehave);
+ URIDone(Res);
+ continue;
+ }
+ else
+ RemoveFile("Fetch-Partial", QueueBack->DestFile);
+ }
+ }
+ auto const Tmp = QueueBack;
+ QueueBack = QueueBack->Next;
+ SendReq(Tmp);
+ ++CurrentDepth;
+ } while (CurrentDepth <= AllowedDepth && QueueBack != nullptr);
+
+ return true;
+}
+ /*}}}*/
+// BaseHttpMethod::Loop - Main loop /*{{{*/
+int BaseHttpMethod::Loop()
+{
+ signal(SIGTERM,SigTerm);
+ signal(SIGINT,SigTerm);
+
+ Server = 0;
+
+ int FailCounter = 0;
+ while (1)
+ {
+ // We have no commands, wait for some to arrive
+ if (Queue == 0)
+ {
+ if (WaitFd(STDIN_FILENO) == false)
+ return 0;
+ }
+
+ /* Run messages, we can accept 0 (no message) if we didn't
+ do a WaitFd above.. Otherwise the FD is closed. */
+ int Result = Run(true);
+ if (Result != -1 && (Result != 0 || Queue == 0))
+ {
+ if(FailReason.empty() == false ||
+ ConfigFindB("DependOnSTDIN", true) == true)
+ return 100;
+ else
+ return 0;
+ }
+
+ if (Queue == 0)
+ continue;
+
+ // Connect to the server
+ if (Server == 0 || Server->Comp(Queue->Uri) == false)
+ {
+ if (!Queue->Proxy().empty())
+ {
+ URI uri = Queue->Uri;
+ _config->Set("Acquire::" + uri.Access + "::proxy::" + uri.Host, Queue->Proxy());
+ }
+ Server = CreateServerState(Queue->Uri);
+ setPostfixForMethodNames(::URI(Queue->Uri).Host.c_str());
+ AllowRedirect = ConfigFindB("AllowRedirect", true);
+ PipelineDepth = ConfigFindI("Pipeline-Depth", 10);
+ Debug = DebugEnabled();
+ }
+
+ /* If the server has explicitly said this is the last connection
+ then we pre-emptively shut down the pipeline and tear down
+ the connection. This will speed up HTTP/1.0 servers a tad
+ since we don't have to wait for the close sequence to
+ complete */
+ if (Server->Persistent == false)
+ Server->Close();
+
+ // Reset the pipeline
+ if (Server->IsOpen() == false) {
+ QueueBack = Queue;
+ Server->PipelineAnswersReceived = 0;
+ }
+
+ // Connect to the host
+ switch (Server->Open())
+ {
+ case ResultState::FATAL_ERROR:
+ Fail(false);
+ Server = nullptr;
+ continue;
+ case ResultState::TRANSIENT_ERROR:
+ Fail(true);
+ Server = nullptr;
+ continue;
+ case ResultState::SUCCESSFUL:
+ break;
+ }
+
+ // Fill the pipeline.
+ Fetch(0);
+
+ RequestState Req(this, Server.get());
+ // Fetch the next URL header data from the server.
+ switch (Server->RunHeaders(Req, Queue->Uri))
+ {
+ case ServerState::RUN_HEADERS_OK:
+ break;
+
+ // The header data is bad
+ case ServerState::RUN_HEADERS_PARSE_ERROR:
+ {
+ _error->Error(_("Bad header data"));
+ Fail(true);
+ Server->Close();
+ RotateDNS();
+ continue;
+ }
+
+ // The server closed a connection during the header get..
+ default:
+ case ServerState::RUN_HEADERS_IO_ERROR:
+ {
+ FailCounter++;
+ _error->Discard();
+ Server->Close();
+ Server->Pipeline = false;
+ Server->PipelineAllowed = false;
+
+ if (FailCounter >= 2)
+ {
+ Fail(_("Connection failed"),true);
+ FailCounter = 0;
+ }
+
+ RotateDNS();
+ continue;
+ }
+ };
+
+ // Decide what to do.
+ FetchResult Res;
+ Res.Filename = Queue->DestFile;
+ switch (DealWithHeaders(Res, Req))
+ {
+ // Ok, the file is Open
+ case FILE_IS_OPEN:
+ {
+ URIStart(Res);
+
+ // Run the data
+ ResultState Result = ResultState::SUCCESSFUL;
+
+ // ensure we don't fetch too much
+ // we could do "Server->MaximumSize = Queue->MaximumSize" here
+ // but that would break the clever pipeline messup detection
+ // so instead we use the size of the biggest item in the queue
+ Req.MaximumSize = FindMaximumObjectSizeInQueue();
+
+ if (Req.HaveContent)
+ {
+ /* If the server provides Content-Length we can figure out with it if
+ this satisfies any request we have made so far (in the pipeline).
+ If not we can kill the connection as whatever file the server is trying
+ to send to us would be rejected with a hashsum mismatch later or triggers
+ a maximum size error. We don't run the data to /dev/null as this can be MBs
+ of junk data we would waste bandwidth on and instead just close the connection
+ to reopen a fresh one which should be more cost/time efficient */
+ if (Req.DownloadSize > 0)
+ {
+ decltype(Queue->ExpectedHashes.FileSize()) const filesize = Req.StartPos + Req.DownloadSize;
+ bool found = false;
+ for (FetchItem const *I = Queue; I != 0 && I != QueueBack; I = I->Next)
+ {
+ auto const fs = I->ExpectedHashes.FileSize();
+ if (fs == 0 || fs == filesize)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found == false)
+ {
+ SetFailReason("MaximumSizeExceeded");
+ _error->Error(_("File has unexpected size (%llu != %llu). Mirror sync in progress?"),
+ filesize, Queue->ExpectedHashes.FileSize());
+ Result = ResultState::FATAL_ERROR;
+ }
+ }
+ if (Result == ResultState::SUCCESSFUL)
+ Result = Server->RunData(Req);
+ }
+
+ /* If the server is sending back sizeless responses then fill in
+ the size now */
+ if (Res.Size == 0)
+ Res.Size = Req.File.Size();
+
+ // Close the file, destroy the FD object and timestamp it
+ FailFd = -1;
+ Req.File.Close();
+
+ // Timestamp
+ struct timeval times[2];
+ times[0].tv_sec = times[1].tv_sec = Req.Date;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(Queue->DestFile.c_str(), times);
+
+ // Send status to APT
+ if (Result == ResultState::SUCCESSFUL)
+ {
+ Hashes * const resultHashes = Server->GetHashes();
+ HashStringList const hashList = resultHashes->GetHashStringList();
+ if (PipelineDepth != 0 && Queue->ExpectedHashes.usable() == true && Queue->ExpectedHashes != hashList)
+ {
+ // we did not get the expected hash… mhhh:
+ // could it be that server/proxy messed up pipelining?
+ FetchItem * BeforeI = Queue;
+ for (FetchItem *I = Queue->Next; I != 0 && I != QueueBack; I = I->Next)
+ {
+ if (I->ExpectedHashes.usable() == true && I->ExpectedHashes == hashList)
+ {
+ // yes, he did! Disable pipelining and rewrite queue
+ if (Server->Pipeline == true)
+ {
+ Warning(_("Automatically disabled %s due to incorrect response from server/proxy. (man 5 apt.conf)"), "Acquire::http::Pipeline-Depth");
+ Server->Pipeline = false;
+ Server->PipelineAllowed = false;
+ // we keep the PipelineDepth value so that the rest of the queue can be fixed up as well
+ }
+ Rename(Res.Filename, I->DestFile);
+ Res.Filename = I->DestFile;
+ BeforeI->Next = I->Next;
+ I->Next = Queue;
+ Queue = I;
+ break;
+ }
+ BeforeI = I;
+ }
+ }
+ if (Server->Pipeline == true)
+ {
+ Server->PipelineAnswersReceived++;
+ }
+ Res.TakeHashes(*resultHashes);
+ URIDone(Res);
+ }
+ else
+ {
+ if (Server->IsOpen() == false)
+ {
+ FailCounter++;
+ _error->Discard();
+ Server->Close();
+
+ if (FailCounter >= 2)
+ {
+ Fail(_("Connection failed"),true);
+ FailCounter = 0;
+ }
+
+ QueueBack = Queue;
+ }
+ else
+ {
+ Server->Close();
+ switch (Result)
+ {
+ case ResultState::TRANSIENT_ERROR:
+ Fail(true);
+ break;
+ case ResultState::FATAL_ERROR:
+ case ResultState::SUCCESSFUL:
+ Fail(false);
+ break;
+ }
+ }
+ }
+ break;
+ }
+
+ // IMS hit
+ case IMS_HIT:
+ {
+ URIDone(Res);
+ break;
+ }
+
+ // Hard server error, not found or something
+ case ERROR_UNRECOVERABLE:
+ {
+ Fail();
+ break;
+ }
+
+ // Hard internal error, kill the connection and fail
+ case ERROR_NOT_FROM_SERVER:
+ {
+ Fail();
+ RotateDNS();
+ Server->Close();
+ break;
+ }
+
+ // We need to flush the data, the header is like a 404 w/ error text
+ case ERROR_WITH_CONTENT_PAGE:
+ {
+ Server->RunDataToDevNull(Req);
+ constexpr unsigned int TransientCodes[] = {
+ 408, // Request Timeout
+ 429, // Too Many Requests
+ 500, // Internal Server Error
+ 502, // Bad Gateway
+ 503, // Service Unavailable
+ 504, // Gateway Timeout
+ 599, // Network Connect Timeout Error
+ };
+ if (std::find(std::begin(TransientCodes), std::end(TransientCodes), Req.Result) != std::end(TransientCodes))
+ Fail(true);
+ else
+ Fail();
+ break;
+ }
+
+ // Try again with a new URL
+ case TRY_AGAIN_OR_REDIRECT:
+ {
+ // Clear rest of response if there is content
+ if (Req.HaveContent)
+ Server->RunDataToDevNull(Req);
+ Redirect(NextURI);
+ break;
+ }
+
+ default:
+ Fail(_("Internal error"));
+ break;
+ }
+
+ FailCounter = 0;
+ }
+
+ return 0;
+}
+ /*}}}*/
+unsigned long long BaseHttpMethod::FindMaximumObjectSizeInQueue() const /*{{{*/
+{
+ unsigned long long MaxSizeInQueue = 0;
+ for (FetchItem *I = Queue; I != 0 && I != QueueBack; I = I->Next)
+ MaxSizeInQueue = std::max(MaxSizeInQueue, I->MaximumSize);
+ return MaxSizeInQueue;
+}
+ /*}}}*/
+BaseHttpMethod::BaseHttpMethod(std::string &&Binary, char const *const Ver, unsigned long const Flags) /*{{{*/
+ : aptAuthConfMethod(std::move(Binary), Ver, Flags), Server(nullptr),
+ AllowRedirect(false), Debug(false), PipelineDepth(10)
+{
+}
+ /*}}}*/
+bool BaseHttpMethod::Configuration(std::string Message) /*{{{*/
+{
+ if (aptAuthConfMethod::Configuration(Message) == false)
+ return false;
+
+ _config->CndSet("Acquire::tor::Proxy",
+ "socks5h://apt-transport-tor@127.0.0.1:9050");
+ return true;
+}
+ /*}}}*/
+bool BaseHttpMethod::AddProxyAuth(URI &Proxy, URI const &Server) /*{{{*/
+{
+ MaybeAddAuthTo(Proxy);
+ if (std::find(methodNames.begin(), methodNames.end(), "tor") != methodNames.end() &&
+ Proxy.User == "apt-transport-tor" && Proxy.Password.empty())
+ {
+ std::string pass = Server.Host;
+ pass.erase(std::remove_if(pass.begin(), pass.end(), [](char const c) { return std::isalnum(c) == 0; }), pass.end());
+ if (pass.length() > 255)
+ Proxy.Password = pass.substr(0, 255);
+ else
+ Proxy.Password = std::move(pass);
+ }
+ return true;
+}
+ /*}}}*/
diff --git a/methods/basehttp.h b/methods/basehttp.h
new file mode 100644
index 0000000..5fdff69
--- /dev/null
+++ b/methods/basehttp.h
@@ -0,0 +1,173 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Classes dealing with the abstraction of talking to a end via a text
+ protocol like HTTP (which is used by the http and https methods)
+
+ ##################################################################### */
+ /*}}}*/
+
+#ifndef APT_SERVER_H
+#define APT_SERVER_H
+
+#include "aptmethod.h"
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <memory>
+#include <string>
+#include <time.h>
+
+using std::cout;
+using std::endl;
+
+class Hashes;
+class BaseHttpMethod;
+struct ServerState;
+
+struct RequestState
+{
+ unsigned int Major = 0;
+ unsigned int Minor = 0;
+ unsigned int Result = 0;
+ char Code[360];
+
+ // total size of the usable content (aka: the file)
+ unsigned long long TotalFileSize = 0;
+ // size we actually download (can be smaller than Size if we have partial content)
+ unsigned long long DownloadSize = 0;
+ // size of junk content (aka: server error pages)
+ unsigned long long JunkSize = 0;
+ // The start of the data (for partial content)
+ unsigned long long StartPos = 0;
+
+ unsigned long long MaximumSize = 0;
+
+ time_t Date;
+ bool HaveContent = false;
+ enum {Chunked,Stream,Closes} Encoding = Closes;
+ enum {Header, Data} State = Header;
+ std::string Location;
+
+ FileFd File;
+
+ BaseHttpMethod * const Owner;
+ ServerState * const Server;
+
+ bool HeaderLine(std::string const &Line);
+ bool AddPartialFileToHashes(FileFd &File);
+
+ RequestState(BaseHttpMethod * const Owner, ServerState * const Server) :
+ Owner(Owner), Server(Server) { time(&Date); }
+};
+struct ServerState
+{
+ bool Persistent;
+ bool PipelineAllowed;
+ bool RangesAllowed;
+ unsigned long PipelineAnswersReceived;
+
+ bool Pipeline;
+ URI ServerName;
+ URI Proxy;
+ unsigned long TimeOut;
+
+ protected:
+ BaseHttpMethod *Owner;
+
+ virtual bool ReadHeaderLines(std::string &Data) = 0;
+ virtual ResultState LoadNextResponse(bool const ToFile, RequestState &Req) = 0;
+
+ public:
+
+ /** \brief Result of the header acquire */
+ enum RunHeadersResult {
+ /** \brief Header ok */
+ RUN_HEADERS_OK,
+ /** \brief IO error while retrieving */
+ RUN_HEADERS_IO_ERROR,
+ /** \brief Parse error after retrieving */
+ RUN_HEADERS_PARSE_ERROR
+ };
+ /** \brief Get the headers before the data */
+ RunHeadersResult RunHeaders(RequestState &Req, const std::string &Uri);
+
+ bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;};
+ virtual void Reset();
+ virtual bool WriteResponse(std::string const &Data) = 0;
+
+ /** \brief Transfer the data from the socket */
+ virtual ResultState RunData(RequestState &Req) = 0;
+ virtual ResultState RunDataToDevNull(RequestState &Req) = 0;
+
+ virtual ResultState Open() = 0;
+ virtual bool IsOpen() = 0;
+ virtual bool Close() = 0;
+ virtual bool InitHashes(HashStringList const &ExpectedHashes) = 0;
+ virtual ResultState Die(RequestState &Req) = 0;
+ virtual bool Flush(FileFd * const File) = 0;
+ virtual ResultState Go(bool ToFile, RequestState &Req) = 0;
+ virtual Hashes * GetHashes() = 0;
+
+ ServerState(URI Srv, BaseHttpMethod *Owner);
+ virtual ~ServerState() {};
+};
+
+class BaseHttpMethod : public aptAuthConfMethod
+{
+ protected:
+ virtual bool Fetch(FetchItem *) APT_OVERRIDE;
+
+ std::unique_ptr<ServerState> Server;
+ std::string NextURI;
+
+ bool AllowRedirect;
+
+ // Find the biggest item in the fetch queue for the checking of the maximum
+ // size
+ unsigned long long FindMaximumObjectSizeInQueue() const APT_PURE;
+
+ public:
+ bool Debug;
+ unsigned long PipelineDepth;
+
+ /** \brief Result of the header parsing */
+ enum DealWithHeadersResult {
+ /** \brief The file is open and ready */
+ FILE_IS_OPEN,
+ /** \brief We got a IMS hit, the file has not changed */
+ IMS_HIT,
+ /** \brief The server reported a unrecoverable error */
+ ERROR_UNRECOVERABLE,
+ /** \brief The server reported a error with a error content page */
+ ERROR_WITH_CONTENT_PAGE,
+ /** \brief An error on the client side */
+ ERROR_NOT_FROM_SERVER,
+ /** \brief A redirect or retry request */
+ TRY_AGAIN_OR_REDIRECT
+ };
+ /** \brief Handle the retrieved header data */
+ virtual DealWithHeadersResult DealWithHeaders(FetchResult &Res, RequestState &Req);
+
+ // In the event of a fatal signal this file will be closed and timestamped.
+ static std::string FailFile;
+ static int FailFd;
+ static time_t FailTime;
+ static APT_NORETURN void SigTerm(int);
+
+ int Loop();
+
+ virtual void SendReq(FetchItem *Itm) = 0;
+ virtual std::unique_ptr<ServerState> CreateServerState(URI const &uri) = 0;
+ virtual void RotateDNS() = 0;
+ virtual bool Configuration(std::string Message) APT_OVERRIDE;
+
+ bool AddProxyAuth(URI &Proxy, URI const &Server);
+
+ BaseHttpMethod(std::string &&Binary, char const * const Ver,unsigned long const Flags);
+ virtual ~BaseHttpMethod() {};
+};
+
+#endif
diff --git a/methods/cdrom.cc b/methods/cdrom.cc
new file mode 100644
index 0000000..77270b0
--- /dev/null
+++ b/methods/cdrom.cc
@@ -0,0 +1,290 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ CDROM URI method for APT
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/cdrom.h>
+#include <apt-pkg/cdromutl.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/strutl.h>
+
+#include "aptmethod.h"
+
+#include <string>
+#include <vector>
+#include <sys/stat.h>
+
+#include <iostream>
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+class CDROMMethod : public aptMethod
+{
+ bool DatabaseLoaded;
+ bool Debug;
+
+ ::Configuration Database;
+ string CurrentID;
+ string CDROM;
+ bool MountedByApt;
+ pkgUdevCdromDevices UdevCdroms;
+
+ bool IsCorrectCD(URI want, string MountPath, string& NewID);
+ bool AutoDetectAndMount(const URI, string &NewID);
+ virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE;
+ string GetID(string Name);
+ virtual void Exit() APT_OVERRIDE;
+ virtual bool Configuration(std::string Message) APT_OVERRIDE;
+
+ public:
+
+ CDROMMethod();
+};
+
+// CDROMMethod::CDROMethod - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+CDROMMethod::CDROMMethod() : aptMethod("cdrom", "1.0",SingleInstance | LocalOnly |
+ SendConfig | NeedsCleanup |
+ Removable),
+ DatabaseLoaded(false),
+ Debug(false),
+ MountedByApt(false)
+{
+ UdevCdroms.Dlopen();
+}
+ /*}}}*/
+// CDROMMethod::Exit - Unmount the disc if necessary /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void CDROMMethod::Exit()
+{
+ if (MountedByApt == true)
+ UnmountCdrom(CDROM);
+}
+ /*}}}*/
+// CDROMMethod::GetID - Search the database for a matching string /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string CDROMMethod::GetID(string Name)
+{
+ // Search for an ID
+ const Configuration::Item *Top = Database.Tree("CD");
+ if (Top != 0)
+ Top = Top->Child;
+
+ for (; Top != 0;)
+ {
+ if (Top->Value == Name)
+ return Top->Tag;
+
+ Top = Top->Next;
+ }
+ return string();
+}
+ /*}}}*/
+// CDROMMethod::AutoDetectAndMount /*{{{*/
+// ---------------------------------------------------------------------
+/* Modifies class variable CDROM to the mountpoint */
+bool CDROMMethod::AutoDetectAndMount(const URI Get, string &NewID)
+{
+ vector<struct CdromDevice> v = UdevCdroms.Scan();
+
+ // first check if its mounted somewhere already
+ for (unsigned int i=0; i < v.size(); i++)
+ {
+ if (v[i].Mounted)
+ {
+ if (Debug)
+ clog << "Checking mounted cdrom device " << v[i].DeviceName << endl;
+ if (IsCorrectCD(Get, v[i].MountPath, NewID))
+ {
+ CDROM = v[i].MountPath;
+ return true;
+ }
+ }
+ }
+
+ // we are not supposed to mount, exit
+ if (_config->FindB("APT::CDROM::NoMount",false) == true)
+ return false;
+
+ // check if we have the mount point
+ string AptMountPoint = _config->FindDir("Dir::Media::MountPath");
+ if (!FileExists(AptMountPoint))
+ mkdir(AptMountPoint.c_str(), 0750);
+
+ // now try mounting
+ for (unsigned int i=0; i < v.size(); i++)
+ {
+ if (!v[i].Mounted)
+ {
+ if(MountCdrom(AptMountPoint, v[i].DeviceName))
+ {
+ if (IsCorrectCD(Get, AptMountPoint, NewID))
+ {
+ MountedByApt = true;
+ CDROM = AptMountPoint;
+ return true;
+ } else {
+ UnmountCdrom(AptMountPoint);
+ }
+ }
+ }
+ }
+
+ return false;
+}
+ /*}}}*/
+// CDROMMethod::IsCorrectCD /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CDROMMethod::IsCorrectCD(URI want, string MountPath, string& NewID)
+{
+ for (unsigned int Version = 2; Version != 0; Version--)
+ {
+ if (IdentCdrom(MountPath,NewID,Version) == false)
+ return false;
+
+ if (Debug)
+ clog << "ID " << Version << " " << NewID << endl;
+
+ // A hit
+ if (Database.Find("CD::" + NewID) == want.Host)
+ return true;
+ }
+
+ return false;
+}
+ /*}}}*/
+// CDROMMethod::Fetch - Fetch a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CDROMMethod::Fetch(FetchItem *Itm)
+{
+ FetchResult Res;
+
+ URI Get = Itm->Uri;
+ string File = Get.Path;
+ Debug = DebugEnabled();
+
+ if (Debug)
+ clog << "CDROMMethod::Fetch " << Itm->Uri << endl;
+
+ /* All IMS queries are returned as a hit, CDROMs are readonly so
+ time stamps never change */
+ if (Itm->LastModified != 0)
+ {
+ Res.LastModified = Itm->LastModified;
+ Res.IMSHit = true;
+ Res.Filename = Itm->DestFile;
+ URIDone(Res);
+ return true;
+ }
+
+ // Load the database
+ if (DatabaseLoaded == false)
+ {
+ // Read the database
+ string DFile = _config->FindFile("Dir::State::cdroms");
+ if (FileExists(DFile) == true)
+ {
+ if (ReadConfigFile(Database,DFile) == false)
+ return _error->Error(_("Unable to read the cdrom database %s"),
+ DFile.c_str());
+ }
+ DatabaseLoaded = true;
+ }
+
+ // All non IMS queries for package files fail.
+ if (Itm->IndexFile == true || GetID(Get.Host).empty() == true)
+ {
+ Fail(_("Please use apt-cdrom to make this CD-ROM recognized by APT."
+ " apt-get update cannot be used to add new CD-ROMs"));
+ return true;
+ }
+
+ // We already have a CD inserted, but it is the wrong one
+ if (CurrentID.empty() == false &&
+ CurrentID != "FAIL" &&
+ Database.Find("CD::" + CurrentID) != Get.Host)
+ {
+ Fail(_("Wrong CD-ROM"),true);
+ return true;
+ }
+
+ bool const AutoDetect = ConfigFindB("AutoDetect", true);
+ CDROM = _config->FindDir("Acquire::cdrom::mount");
+ if (Debug)
+ clog << "Looking for CDROM at " << CDROM << endl;
+
+ if (CDROM[0] == '.')
+ CDROM= SafeGetCWD() + '/' + CDROM;
+
+ string NewID;
+ while (CurrentID.empty() == true)
+ {
+ if (AutoDetect)
+ AutoDetectAndMount(Get, NewID);
+
+ if(!IsMounted(CDROM))
+ MountedByApt = MountCdrom(CDROM);
+
+ if (IsCorrectCD(Get, CDROM, NewID))
+ break;
+
+ // I suppose this should prompt somehow?
+ if (_config->FindB("APT::CDROM::NoMount",false) == false &&
+ UnmountCdrom(CDROM) == false)
+ return _error->Error(_("Unable to unmount the CD-ROM in %s, it may still be in use."),
+ CDROM.c_str());
+ if (MediaFail(Get.Host,CDROM) == false)
+ {
+ CurrentID = "FAIL";
+ return _error->Error(_("Disk not found."));
+ }
+ }
+
+ // Found a CD
+ Res.Filename = CDROM + File;
+ struct stat Buf;
+ if (stat(Res.Filename.c_str(),&Buf) != 0)
+ return _error->Error(_("File not found"));
+
+ URIStart(Res);
+ if (NewID.empty() == false)
+ CurrentID = NewID;
+ Res.LastModified = Buf.st_mtime;
+ Res.Size = Buf.st_size;
+
+ Hashes Hash(Itm->ExpectedHashes);
+ FileFd Fd(Res.Filename, FileFd::ReadOnly);
+ Hash.AddFD(Fd);
+ Res.TakeHashes(Hash);
+
+ URIDone(Res);
+ return true;
+}
+ /*}}}*/
+bool CDROMMethod::Configuration(std::string Message) /*{{{*/
+{
+ _config->CndSet("Binary::cdrom::Debug::NoDropPrivs", true);
+ return aptMethod::Configuration(Message);
+}
+ /*}}}*/
+
+int main()
+{
+ return CDROMMethod().Run();
+}
diff --git a/methods/connect.cc b/methods/connect.cc
new file mode 100644
index 0000000..1d6f891
--- /dev/null
+++ b/methods/connect.cc
@@ -0,0 +1,1052 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Connect - Replacement connect call
+
+ This was originally authored by Jason Gunthorpe <jgg@debian.org>
+ and is placed in the Public Domain, do with it what you will.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/acquire-method.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/srvrec.h>
+#include <apt-pkg/strutl.h>
+
+#include <gnutls/gnutls.h>
+#include <gnutls/x509.h>
+
+#include <list>
+#include <set>
+#include <sstream>
+#include <string>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+// Internet stuff
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <sys/select.h>
+#include <sys/socket.h>
+
+#include "aptmethod.h"
+#include "connect.h"
+#include "rfc2553emu.h"
+#include <apti18n.h>
+ /*}}}*/
+
+static std::string LastHost;
+static int LastPort = 0;
+static struct addrinfo *LastHostAddr = 0;
+static struct addrinfo *LastUsed = 0;
+
+static std::vector<SrvRec> SrvRecords;
+
+// Set of IP/hostnames that we timed out before or couldn't resolve
+static std::set<std::string> bad_addr;
+
+// RotateDNS - Select a new server from a DNS rotation /*{{{*/
+// ---------------------------------------------------------------------
+/* This is called during certain errors in order to recover by selecting a
+ new server */
+void RotateDNS()
+{
+ if (LastUsed != 0 && LastUsed->ai_next != 0)
+ LastUsed = LastUsed->ai_next;
+ else
+ LastUsed = LastHostAddr;
+}
+ /*}}}*/
+static bool ConnectionAllowed(char const * const Service, std::string const &Host)/*{{{*/
+{
+ if (unlikely(Host.empty())) // the only legal empty host (RFC2782 '.' target) is detected by caller
+ return false;
+ if (APT::String::Endswith(Host, ".onion") && _config->FindB("Acquire::BlockDotOnion", true))
+ {
+ // TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+ _error->Error(_("Direct connection to %s domains is blocked by default."), ".onion");
+ if (strcmp(Service, "http") == 0)
+ _error->Error(_("If you meant to use Tor remember to use %s instead of %s."), "tor+http", "http");
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+
+// File Descriptor based Fd /*{{{*/
+struct FdFd : public MethodFd
+{
+ int fd = -1;
+ int Fd() APT_OVERRIDE { return fd; }
+ ssize_t Read(void *buf, size_t count) APT_OVERRIDE { return ::read(fd, buf, count); }
+ ssize_t Write(void *buf, size_t count) APT_OVERRIDE { return ::write(fd, buf, count); }
+ int Close() APT_OVERRIDE
+ {
+ int result = 0;
+ if (fd != -1)
+ result = ::close(fd);
+ fd = -1;
+ return result;
+ }
+};
+
+bool MethodFd::HasPending()
+{
+ return false;
+}
+std::unique_ptr<MethodFd> MethodFd::FromFd(int iFd)
+{
+ FdFd *fd = new FdFd();
+ fd->fd = iFd;
+ return std::unique_ptr<MethodFd>(fd);
+}
+ /*}}}*/
+// DoConnect - Attempt a connect operation /*{{{*/
+// ---------------------------------------------------------------------
+/* This helper function attempts a connection to a single address. */
+struct Connection
+{
+ struct addrinfo *Addr;
+ std::string Host;
+ aptMethod *Owner;
+ std::unique_ptr<FdFd> Fd;
+ char Name[NI_MAXHOST];
+ char Service[NI_MAXSERV];
+
+ Connection(struct addrinfo *Addr, std::string const &Host, aptMethod *Owner) : Addr(Addr), Host(Host), Owner(Owner), Fd(new FdFd()), Name{0}, Service{0}
+ {
+ }
+
+ // Allow moving values, but not connections.
+ Connection(Connection &&Conn) = default;
+ Connection(const Connection &Conn) = delete;
+ Connection &operator=(const Connection &) = delete;
+ Connection &operator=(Connection &&Conn) = default;
+
+ ~Connection()
+ {
+ if (Fd != nullptr)
+ {
+ Fd->Close();
+ }
+ }
+
+ std::unique_ptr<MethodFd> Take()
+ {
+ /* Store the IP we are using.. If something goes
+ wrong this will get tacked onto the end of the error message */
+ std::stringstream ss;
+ ioprintf(ss, _("[IP: %s %s]"), Name, Service);
+ Owner->SetIP(ss.str());
+ Owner->Status(_("Connected to %s (%s)"), Host.c_str(), Name);
+ _error->Discard();
+ Owner->SetFailReason("");
+ LastUsed = Addr;
+ return std::move(Fd);
+ }
+
+ ResultState DoConnect();
+
+ ResultState CheckError();
+};
+
+ResultState Connection::DoConnect()
+{
+ getnameinfo(Addr->ai_addr,Addr->ai_addrlen,
+ Name,sizeof(Name),Service,sizeof(Service),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+ Owner->Status(_("Connecting to %s (%s)"),Host.c_str(),Name);
+
+ // if that addr did timeout before, we do not try it again
+ if(bad_addr.find(std::string(Name)) != bad_addr.end())
+ return ResultState::TRANSIENT_ERROR;
+
+ // Get a socket
+ if ((static_cast<FdFd *>(Fd.get())->fd = socket(Addr->ai_family, Addr->ai_socktype,
+ Addr->ai_protocol)) < 0)
+ {
+ _error->Errno("socket", _("Could not create a socket for %s (f=%u t=%u p=%u)"),
+ Name, Addr->ai_family, Addr->ai_socktype, Addr->ai_protocol);
+ return ResultState::FATAL_ERROR;
+ }
+
+ SetNonBlock(Fd->Fd(), true);
+ if (connect(Fd->Fd(), Addr->ai_addr, Addr->ai_addrlen) < 0 &&
+ errno != EINPROGRESS)
+ {
+ _error->Errno("connect", _("Cannot initiate the connection "
+ "to %s:%s (%s)."),
+ Host.c_str(), Service, Name);
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ return ResultState::SUCCESSFUL;
+}
+
+ResultState Connection::CheckError()
+{
+ // Check the socket for an error condition
+ unsigned int Err;
+ unsigned int Len = sizeof(Err);
+ if (getsockopt(Fd->Fd(), SOL_SOCKET, SO_ERROR, &Err, &Len) != 0)
+ {
+ _error->Errno("getsockopt", _("Failed"));
+ return ResultState::FATAL_ERROR;
+ }
+
+ if (Err != 0)
+ {
+ errno = Err;
+ if(errno == ECONNREFUSED)
+ Owner->SetFailReason("ConnectionRefused");
+ else if (errno == ETIMEDOUT)
+ Owner->SetFailReason("ConnectionTimedOut");
+ bad_addr.insert(bad_addr.begin(), std::string(Name));
+ _error->Errno("connect", _("Could not connect to %s:%s (%s)."), Host.c_str(),
+ Service, Name);
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ Owner->SetFailReason("");
+
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+// Order the given host names returned by getaddrinfo() /*{{{*/
+static std::vector<struct addrinfo *> OrderAddresses(struct addrinfo *CurHost)
+{
+ std::vector<struct addrinfo *> preferredAddrs;
+ std::vector<struct addrinfo *> otherAddrs;
+ std::vector<struct addrinfo *> allAddrs;
+
+ // Partition addresses into preferred and other address families
+ while (CurHost != 0)
+ {
+ if (preferredAddrs.empty() || CurHost->ai_family == preferredAddrs[0]->ai_family)
+ preferredAddrs.push_back(CurHost);
+ else
+ otherAddrs.push_back(CurHost);
+
+ // Ignore UNIX domain sockets
+ do
+ {
+ CurHost = CurHost->ai_next;
+ } while (CurHost != 0 && CurHost->ai_family == AF_UNIX);
+
+ /* If we reached the end of the search list then wrap around to the
+ start */
+ if (CurHost == 0 && LastUsed != 0)
+ CurHost = LastHostAddr;
+
+ // Reached the end of the search cycle
+ if (CurHost == LastUsed)
+ break;
+ }
+
+ // Build a new address vector alternating between preferred and other
+ for (auto prefIter = preferredAddrs.cbegin(), otherIter = otherAddrs.cbegin();
+ prefIter != preferredAddrs.end() || otherIter != otherAddrs.end();)
+ {
+ if (prefIter != preferredAddrs.end())
+ allAddrs.push_back(*prefIter++);
+ if (otherIter != otherAddrs.end())
+ allAddrs.push_back(*otherIter++);
+ }
+
+ return std::move(allAddrs);
+}
+ /*}}}*/
+// Check for errors and report them /*{{{*/
+static ResultState WaitAndCheckErrors(std::list<Connection> &Conns, std::unique_ptr<MethodFd> &Fd, long TimeoutMsec, bool ReportTimeout)
+{
+ // The last error detected
+ ResultState Result = ResultState::TRANSIENT_ERROR;
+
+ struct timeval tv = {
+ // Split our millisecond timeout into seconds and microseconds
+ .tv_sec = TimeoutMsec / 1000,
+ .tv_usec = (TimeoutMsec % 1000) * 1000,
+ };
+
+ // We will return once we have no more connections, a time out, or
+ // a success.
+ while (!Conns.empty())
+ {
+ fd_set Set;
+ int nfds = -1;
+
+ FD_ZERO(&Set);
+
+ for (auto &Conn : Conns)
+ {
+ int fd = Conn.Fd->Fd();
+ FD_SET(fd, &Set);
+ nfds = std::max(nfds, fd);
+ }
+
+ {
+ int Res;
+ do
+ {
+ Res = select(nfds + 1, 0, &Set, 0, (TimeoutMsec != 0 ? &tv : 0));
+ } while (Res < 0 && errno == EINTR);
+
+ if (Res == 0)
+ {
+ if (ReportTimeout)
+ {
+ for (auto &Conn : Conns)
+ {
+ Conn.Owner->SetFailReason("Timeout");
+ bad_addr.insert(bad_addr.begin(), Conn.Name);
+ _error->Error(_("Could not connect to %s:%s (%s), "
+ "connection timed out"),
+ Conn.Host.c_str(), Conn.Service, Conn.Name);
+ }
+ }
+ return ResultState::TRANSIENT_ERROR;
+ }
+ }
+
+ // iterate over connections, remove failed ones, and return if
+ // there was a successful one.
+ for (auto ConnI = Conns.begin(); ConnI != Conns.end();)
+ {
+ if (!FD_ISSET(ConnI->Fd->Fd(), &Set))
+ {
+ ConnI++;
+ continue;
+ }
+
+ Result = ConnI->CheckError();
+ if (Result == ResultState::SUCCESSFUL)
+ {
+ Fd = ConnI->Take();
+ return Result;
+ }
+
+ // Connection failed. Erase it and continue to next position
+ ConnI = Conns.erase(ConnI);
+ }
+ }
+
+ return Result;
+}
+ /*}}}*/
+// Connect to a given Hostname /*{{{*/
+static ResultState ConnectToHostname(std::string const &Host, int const Port,
+ const char *const Service, int DefPort, std::unique_ptr<MethodFd> &Fd,
+ unsigned long const TimeOut, aptMethod *const Owner)
+{
+ if (ConnectionAllowed(Service, Host) == false)
+ return ResultState::FATAL_ERROR;
+ // Convert the port name/number
+ char ServStr[300];
+ if (Port != 0)
+ snprintf(ServStr,sizeof(ServStr),"%i", Port);
+ else
+ snprintf(ServStr,sizeof(ServStr),"%s", Service);
+
+ /* We used a cached address record.. Yes this is against the spec but
+ the way we have setup our rotating dns suggests that this is more
+ sensible */
+ if (LastHost != Host || LastPort != Port)
+ {
+ Owner->Status(_("Connecting to %s"),Host.c_str());
+
+ // Free the old address structure
+ if (LastHostAddr != 0)
+ {
+ freeaddrinfo(LastHostAddr);
+ LastHostAddr = 0;
+ LastUsed = 0;
+ }
+
+ // We only understand SOCK_STREAM sockets.
+ struct addrinfo Hints;
+ memset(&Hints,0,sizeof(Hints));
+ Hints.ai_socktype = SOCK_STREAM;
+ Hints.ai_flags = 0;
+#ifdef AI_IDN
+ if (_config->FindB("Acquire::Connect::IDN", true) == true)
+ Hints.ai_flags |= AI_IDN;
+#endif
+ // see getaddrinfo(3): only return address if system has such a address configured
+ // useful if system is ipv4 only, to not get ipv6, but that fails if the system has
+ // no address configured: e.g. offline and trying to connect to localhost.
+ if (_config->FindB("Acquire::Connect::AddrConfig", true) == true)
+ Hints.ai_flags |= AI_ADDRCONFIG;
+ Hints.ai_protocol = 0;
+
+ if(_config->FindB("Acquire::ForceIPv4", false) == true)
+ Hints.ai_family = AF_INET;
+ else if(_config->FindB("Acquire::ForceIPv6", false) == true)
+ Hints.ai_family = AF_INET6;
+ else
+ Hints.ai_family = AF_UNSPEC;
+
+ // if we couldn't resolve the host before, we don't try now
+ if (bad_addr.find(Host) != bad_addr.end())
+ {
+ _error->Error(_("Could not resolve '%s'"), Host.c_str());
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ // Resolve both the host and service simultaneously
+ while (1)
+ {
+ int Res;
+ if ((Res = getaddrinfo(Host.c_str(),ServStr,&Hints,&LastHostAddr)) != 0 ||
+ LastHostAddr == 0)
+ {
+ if (Res == EAI_NONAME || Res == EAI_SERVICE)
+ {
+ if (DefPort != 0)
+ {
+ snprintf(ServStr, sizeof(ServStr), "%i", DefPort);
+ DefPort = 0;
+ continue;
+ }
+ bad_addr.insert(bad_addr.begin(), Host);
+ Owner->SetFailReason("ResolveFailure");
+ _error->Error(_("Could not resolve '%s'"), Host.c_str());
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ if (Res == EAI_AGAIN)
+ {
+ Owner->SetFailReason("TmpResolveFailure");
+ _error->Error(_("Temporary failure resolving '%s'"),
+ Host.c_str());
+ return ResultState::TRANSIENT_ERROR;
+ }
+ if (Res == EAI_SYSTEM)
+ _error->Errno("getaddrinfo", _("System error resolving '%s:%s'"),
+ Host.c_str(), ServStr);
+ else
+ _error->Error(_("Something wicked happened resolving '%s:%s' (%i - %s)"),
+ Host.c_str(), ServStr, Res, gai_strerror(Res));
+ return ResultState::TRANSIENT_ERROR;
+ }
+ break;
+ }
+
+ LastHost = Host;
+ LastPort = Port;
+ }
+
+ // When we have an IP rotation stay with the last IP.
+ auto Addresses = OrderAddresses(LastUsed != nullptr ? LastUsed : LastHostAddr);
+ std::list<Connection> Conns;
+ ResultState Result = ResultState::SUCCESSFUL;
+
+ for (auto Addr : Addresses)
+ {
+ Connection Conn(Addr, Host, Owner);
+ if (Conn.DoConnect() != ResultState::SUCCESSFUL)
+ continue;
+
+ Conns.push_back(std::move(Conn));
+
+ Result = WaitAndCheckErrors(Conns, Fd, Owner->ConfigFindI("ConnectionAttemptDelayMsec", 250), false);
+
+ if (Result == ResultState::SUCCESSFUL)
+ return ResultState::SUCCESSFUL;
+ }
+
+ if (!Conns.empty())
+ return WaitAndCheckErrors(Conns, Fd, TimeOut * 1000, true);
+ if (Result != ResultState::SUCCESSFUL)
+ return Result;
+ if (_error->PendingError() == true)
+ return ResultState::FATAL_ERROR;
+ _error->Error(_("Unable to connect to %s:%s:"), Host.c_str(), ServStr);
+ return ResultState::TRANSIENT_ERROR;
+}
+ /*}}}*/
+// Connect - Connect to a server /*{{{*/
+// ---------------------------------------------------------------------
+/* Performs a connection to the server (including SRV record lookup) */
+ResultState Connect(std::string Host, int Port, const char *Service,
+ int DefPort, std::unique_ptr<MethodFd> &Fd,
+ unsigned long TimeOut, aptMethod *Owner)
+{
+ if (_error->PendingError() == true)
+ return ResultState::FATAL_ERROR;
+
+ if (ConnectionAllowed(Service, Host) == false)
+ return ResultState::FATAL_ERROR;
+
+ if(LastHost != Host || LastPort != Port)
+ {
+ SrvRecords.clear();
+ if (_config->FindB("Acquire::EnableSrvRecords", true) == true)
+ {
+ GetSrvRecords(Host, DefPort, SrvRecords);
+ // RFC2782 defines that a lonely '.' target is an abort reason
+ if (SrvRecords.size() == 1 && SrvRecords[0].target.empty())
+ {
+ _error->Error("SRV records for %s indicate that "
+ "%s service is not available at this domain",
+ Host.c_str(), Service);
+ return ResultState::FATAL_ERROR;
+ }
+ }
+ }
+
+ size_t stackSize = 0;
+ // try to connect in the priority order of the srv records
+ std::string initialHost{std::move(Host)};
+ auto const initialPort = Port;
+ while(SrvRecords.empty() == false)
+ {
+ _error->PushToStack();
+ ++stackSize;
+ // PopFromSrvRecs will also remove the server
+ auto Srv = PopFromSrvRecs(SrvRecords);
+ Host = Srv.target;
+ Port = Srv.port;
+ auto const ret = ConnectToHostname(Host, Port, Service, DefPort, Fd, TimeOut, Owner);
+ if (ret == ResultState::SUCCESSFUL)
+ {
+ while(stackSize--)
+ _error->RevertToStack();
+ return ret;
+ }
+ }
+ Host = std::move(initialHost);
+ Port = initialPort;
+
+ // we have no (good) SrvRecords for this host, connect right away
+ _error->PushToStack();
+ ++stackSize;
+ auto const ret = ConnectToHostname(Host, Port, Service, DefPort, Fd,
+ TimeOut, Owner);
+ while(stackSize--)
+ if (ret == ResultState::SUCCESSFUL)
+ _error->RevertToStack();
+ else
+ _error->MergeWithStack();
+ return ret;
+}
+ /*}}}*/
+// UnwrapSocks - Handle SOCKS setup /*{{{*/
+// ---------------------------------------------------------------------
+/* This does socks magic */
+static bool TalkToSocksProxy(int const ServerFd, std::string const &Proxy,
+ char const *const type, bool const ReadWrite, uint8_t *const ToFrom,
+ unsigned int const Size, unsigned int const Timeout)
+{
+ if (WaitFd(ServerFd, ReadWrite, Timeout) == false)
+ {
+ if (ReadWrite)
+ return _error->Error("Timed out while waiting to write '%s' to proxy %s", type, URI::SiteOnly(Proxy).c_str());
+ else
+ return _error->Error("Timed out while waiting to read '%s' from proxy %s", type, URI::SiteOnly(Proxy).c_str());
+ }
+ if (ReadWrite == false)
+ {
+ if (FileFd::Read(ServerFd, ToFrom, Size) == false)
+ return _error->Error("Reading the %s from SOCKS proxy %s failed", type, URI::SiteOnly(Proxy).c_str());
+ }
+ else
+ {
+ if (FileFd::Write(ServerFd, ToFrom, Size) == false)
+ return _error->Error("Writing the %s to SOCKS proxy %s failed", type, URI::SiteOnly(Proxy).c_str());
+ }
+ return true;
+}
+
+ResultState UnwrapSocks(std::string Host, int Port, URI Proxy, std::unique_ptr<MethodFd> &Fd,
+ unsigned long Timeout, aptMethod *Owner)
+{
+ /* We implement a very basic SOCKS5 client here complying mostly to RFC1928 expect
+ * for not offering GSSAPI auth which is a must (we only do no or user/pass auth).
+ * We also expect the SOCKS5 server to do hostname lookup (aka socks5h) */
+ std::string const ProxyInfo = URI::SiteOnly(Proxy);
+ Owner->Status(_("Connecting to %s (%s)"), "SOCKS5h proxy", ProxyInfo.c_str());
+#define APT_WriteOrFail(TYPE, DATA, LENGTH) \
+ if (TalkToSocksProxy(Fd->Fd(), ProxyInfo, TYPE, true, DATA, LENGTH, Timeout) == false) \
+ return ResultState::TRANSIENT_ERROR
+#define APT_ReadOrFail(TYPE, DATA, LENGTH) \
+ if (TalkToSocksProxy(Fd->Fd(), ProxyInfo, TYPE, false, DATA, LENGTH, Timeout) == false) \
+ return ResultState::TRANSIENT_ERROR
+ if (Host.length() > 255)
+ {
+ _error->Error("Can't use SOCKS5h as hostname %s is too long!", Host.c_str());
+ return ResultState::FATAL_ERROR;
+ }
+ if (Proxy.User.length() > 255 || Proxy.Password.length() > 255)
+ {
+ _error->Error("Can't use user&pass auth as they are too long (%lu and %lu) for the SOCKS5!", Proxy.User.length(), Proxy.Password.length());
+ return ResultState::FATAL_ERROR;
+ }
+ if (Proxy.User.empty())
+ {
+ uint8_t greeting[] = {0x05, 0x01, 0x00};
+ APT_WriteOrFail("greet-1", greeting, sizeof(greeting));
+ }
+ else
+ {
+ uint8_t greeting[] = {0x05, 0x02, 0x00, 0x02};
+ APT_WriteOrFail("greet-2", greeting, sizeof(greeting));
+ }
+ uint8_t greeting[2];
+ APT_ReadOrFail("greet back", greeting, sizeof(greeting));
+ if (greeting[0] != 0x05)
+ {
+ _error->Error("SOCKS proxy %s greets back with wrong version: %d", ProxyInfo.c_str(), greeting[0]);
+ return ResultState::FATAL_ERROR;
+ }
+ if (greeting[1] == 0x00)
+ ; // no auth has no method-dependent sub-negotiations
+ else if (greeting[1] == 0x02)
+ {
+ if (Proxy.User.empty())
+ {
+ _error->Error("SOCKS proxy %s negotiated user&pass auth, but we had not offered it!", ProxyInfo.c_str());
+ return ResultState::FATAL_ERROR;
+ }
+ // user&pass auth sub-negotiations are defined by RFC1929
+ std::vector<uint8_t> auth = {{0x01, static_cast<uint8_t>(Proxy.User.length())}};
+ std::copy(Proxy.User.begin(), Proxy.User.end(), std::back_inserter(auth));
+ auth.push_back(static_cast<uint8_t>(Proxy.Password.length()));
+ std::copy(Proxy.Password.begin(), Proxy.Password.end(), std::back_inserter(auth));
+ APT_WriteOrFail("user&pass auth", auth.data(), auth.size());
+ uint8_t authstatus[2];
+ APT_ReadOrFail("auth report", authstatus, sizeof(authstatus));
+ if (authstatus[0] != 0x01)
+ {
+ _error->Error("SOCKS proxy %s auth status response with wrong version: %d", ProxyInfo.c_str(), authstatus[0]);
+ return ResultState::FATAL_ERROR;
+ }
+ if (authstatus[1] != 0x00)
+ {
+ _error->Error("SOCKS proxy %s reported authorization failure: username or password incorrect? (%d)", ProxyInfo.c_str(), authstatus[1]);
+ return ResultState::FATAL_ERROR;
+ }
+ }
+ else
+ {
+ _error->Error("SOCKS proxy %s greets back having not found a common authorization method: %d", ProxyInfo.c_str(), greeting[1]);
+ return ResultState::FATAL_ERROR;
+ }
+ union {
+ uint16_t *i;
+ uint8_t *b;
+ } portu;
+ uint16_t port = htons(static_cast<uint16_t>(Port));
+ portu.i = &port;
+ std::vector<uint8_t> request = {{0x05, 0x01, 0x00, 0x03, static_cast<uint8_t>(Host.length())}};
+ std::copy(Host.begin(), Host.end(), std::back_inserter(request));
+ request.push_back(portu.b[0]);
+ request.push_back(portu.b[1]);
+ APT_WriteOrFail("request", request.data(), request.size());
+ uint8_t response[4];
+ APT_ReadOrFail("first part of response", response, sizeof(response));
+ if (response[0] != 0x05)
+ {
+ _error->Error("SOCKS proxy %s response with wrong version: %d", ProxyInfo.c_str(), response[0]);
+ return ResultState::FATAL_ERROR;
+ }
+ if (response[2] != 0x00)
+ {
+ _error->Error("SOCKS proxy %s has unexpected non-zero reserved field value: %d", ProxyInfo.c_str(), response[2]);
+ return ResultState::FATAL_ERROR;
+ }
+ std::string bindaddr;
+ if (response[3] == 0x01) // IPv4 address
+ {
+ uint8_t ip4port[6];
+ APT_ReadOrFail("IPv4+Port of response", ip4port, sizeof(ip4port));
+ portu.b[0] = ip4port[4];
+ portu.b[1] = ip4port[5];
+ port = ntohs(*portu.i);
+ strprintf(bindaddr, "%d.%d.%d.%d:%d", ip4port[0], ip4port[1], ip4port[2], ip4port[3], port);
+ }
+ else if (response[3] == 0x03) // hostname
+ {
+ uint8_t namelength;
+ APT_ReadOrFail("hostname length of response", &namelength, 1);
+ uint8_t hostname[namelength + 2];
+ APT_ReadOrFail("hostname of response", hostname, sizeof(hostname));
+ portu.b[0] = hostname[namelength];
+ portu.b[1] = hostname[namelength + 1];
+ port = ntohs(*portu.i);
+ hostname[namelength] = '\0';
+ strprintf(bindaddr, "%s:%d", hostname, port);
+ }
+ else if (response[3] == 0x04) // IPv6 address
+ {
+ uint8_t ip6port[18];
+ APT_ReadOrFail("IPv6+port of response", ip6port, sizeof(ip6port));
+ portu.b[0] = ip6port[16];
+ portu.b[1] = ip6port[17];
+ port = ntohs(*portu.i);
+ strprintf(bindaddr, "[%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X]:%d",
+ ip6port[0], ip6port[1], ip6port[2], ip6port[3], ip6port[4], ip6port[5], ip6port[6], ip6port[7],
+ ip6port[8], ip6port[9], ip6port[10], ip6port[11], ip6port[12], ip6port[13], ip6port[14], ip6port[15],
+ port);
+ }
+ else
+ {
+ _error->Error("SOCKS proxy %s destination address is of unknown type: %d",
+ ProxyInfo.c_str(), response[3]);
+ return ResultState::FATAL_ERROR;
+ }
+ if (response[1] != 0x00)
+ {
+ char const *errstr = nullptr;
+ auto errcode = response[1];
+ bool Transient = false;
+ // Tor error reporting can be a bit arcane, lets try to detect & fix it up
+ if (bindaddr == "0.0.0.0:0")
+ {
+ auto const lastdot = Host.rfind('.');
+ if (lastdot == std::string::npos || Host.substr(lastdot) != ".onion")
+ ;
+ else if (errcode == 0x01)
+ {
+ auto const prevdot = Host.rfind('.', lastdot - 1);
+ if (prevdot == std::string::npos && (lastdot == 16 || lastdot == 56))
+ ; // valid .onion address
+ else if (prevdot != std::string::npos && ((lastdot - prevdot) == 17 || (lastdot - prevdot) == 57))
+ ; // valid .onion address with subdomain(s)
+ else
+ {
+ errstr = "Invalid hostname: onion service name must be either 16 or 56 characters long";
+ Owner->SetFailReason("SOCKS");
+ }
+ }
+ // in all likelihood the service is either down or the address has
+ // a typo and so "Host unreachable" is the better understood error
+ // compared to the technically correct "TLL expired".
+ else if (errcode == 0x06)
+ errcode = 0x04;
+ }
+ if (errstr == nullptr)
+ {
+ switch (errcode)
+ {
+ case 0x01:
+ errstr = "general SOCKS server failure";
+ Owner->SetFailReason("SOCKS");
+ break;
+ case 0x02:
+ errstr = "connection not allowed by ruleset";
+ Owner->SetFailReason("SOCKS");
+ break;
+ case 0x03:
+ errstr = "Network unreachable";
+ Owner->SetFailReason("ConnectionTimedOut");
+ Transient = true;
+ break;
+ case 0x04:
+ errstr = "Host unreachable";
+ Owner->SetFailReason("ConnectionTimedOut");
+ Transient = true;
+ break;
+ case 0x05:
+ errstr = "Connection refused";
+ Owner->SetFailReason("ConnectionRefused");
+ Transient = true;
+ break;
+ case 0x06:
+ errstr = "TTL expired";
+ Owner->SetFailReason("Timeout");
+ Transient = true;
+ break;
+ case 0x07:
+ errstr = "Command not supported";
+ Owner->SetFailReason("SOCKS");
+ break;
+ case 0x08:
+ errstr = "Address type not supported";
+ Owner->SetFailReason("SOCKS");
+ break;
+ default:
+ errstr = "Unknown error";
+ Owner->SetFailReason("SOCKS");
+ break;
+ }
+ }
+ _error->Error("SOCKS proxy %s could not connect to %s (%s) due to: %s (%d)",
+ ProxyInfo.c_str(), Host.c_str(), bindaddr.c_str(), errstr, response[1]);
+ return Transient ? ResultState::TRANSIENT_ERROR : ResultState::FATAL_ERROR;
+ }
+ else if (Owner->DebugEnabled())
+ ioprintf(std::clog, "http: SOCKS proxy %s connection established to %s (%s)\n",
+ ProxyInfo.c_str(), Host.c_str(), bindaddr.c_str());
+
+ if (WaitFd(Fd->Fd(), true, Timeout) == false)
+ {
+ _error->Error("SOCKS proxy %s reported connection to %s (%s), but timed out",
+ ProxyInfo.c_str(), Host.c_str(), bindaddr.c_str());
+ return ResultState::TRANSIENT_ERROR;
+ }
+#undef APT_ReadOrFail
+#undef APT_WriteOrFail
+
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+// UnwrapTLS - Handle TLS connections /*{{{*/
+// ---------------------------------------------------------------------
+/* Performs a TLS handshake on the socket */
+struct TlsFd : public MethodFd
+{
+ std::unique_ptr<MethodFd> UnderlyingFd;
+ gnutls_session_t session;
+ gnutls_certificate_credentials_t credentials;
+ std::string hostname;
+ unsigned long Timeout;
+
+ int Fd() APT_OVERRIDE { return UnderlyingFd->Fd(); }
+
+ ssize_t Read(void *buf, size_t count) APT_OVERRIDE
+ {
+ return HandleError(gnutls_record_recv(session, buf, count));
+ }
+ ssize_t Write(void *buf, size_t count) APT_OVERRIDE
+ {
+ return HandleError(gnutls_record_send(session, buf, count));
+ }
+
+ ssize_t DoTLSHandshake()
+ {
+ int err;
+ // Do the handshake. Our socket is non-blocking, so we need to call WaitFd()
+ // accordingly.
+ do
+ {
+ err = gnutls_handshake(session);
+ if ((err == GNUTLS_E_INTERRUPTED || err == GNUTLS_E_AGAIN) &&
+ WaitFd(this->Fd(), gnutls_record_get_direction(session) == 1, Timeout) == false)
+ {
+ _error->Errno("select", "Could not wait for server fd");
+ return err;
+ }
+ } while (err < 0 && gnutls_error_is_fatal(err) == 0);
+
+ if (err < 0)
+ {
+ // Print reason why validation failed.
+ if (err == GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR)
+ {
+ gnutls_datum_t txt;
+ auto type = gnutls_certificate_type_get(session);
+ auto status = gnutls_session_get_verify_cert_status(session);
+ if (gnutls_certificate_verification_status_print(status, type, &txt, 0) == 0)
+ {
+ _error->Error("Certificate verification failed: %s", txt.data);
+ }
+ gnutls_free(txt.data);
+ }
+ _error->Error("Could not handshake: %s", gnutls_strerror(err));
+ }
+ return err;
+ }
+
+ template <typename T>
+ T HandleError(T err)
+ {
+ // Server may request re-handshake if client certificates need to be provided
+ // based on resource requested
+ if (err == GNUTLS_E_REHANDSHAKE)
+ {
+ int rc = DoTLSHandshake();
+ // Only reset err if DoTLSHandshake() fails.
+ // Otherwise, we want to follow the original error path and set errno to EAGAIN
+ // so that the request is retried.
+ if (rc < 0)
+ err = rc;
+ }
+
+ if (err < 0 && gnutls_error_is_fatal(err))
+ errno = EIO;
+ else if (err < 0)
+ errno = EAGAIN;
+ else
+ errno = 0;
+ return err;
+ }
+
+ int Close() APT_OVERRIDE
+ {
+ auto err = HandleError(gnutls_bye(session, GNUTLS_SHUT_RDWR));
+ auto lower = UnderlyingFd->Close();
+ return err < 0 ? HandleError(err) : lower;
+ }
+
+ bool HasPending() APT_OVERRIDE
+ {
+ return gnutls_record_check_pending(session) > 0;
+ }
+};
+
+ResultState UnwrapTLS(std::string Host, std::unique_ptr<MethodFd> &Fd,
+ unsigned long Timeout, aptMethod *Owner)
+{
+ if (_config->FindB("Acquire::AllowTLS", true) == false)
+ {
+ _error->Error("TLS support has been disabled: Acquire::AllowTLS is false.");
+ return ResultState::FATAL_ERROR;
+ }
+
+ int err;
+ TlsFd *tlsFd = new TlsFd();
+
+ tlsFd->hostname = Host;
+ tlsFd->UnderlyingFd = MethodFd::FromFd(-1); // For now
+ tlsFd->Timeout = Timeout;
+
+ if ((err = gnutls_init(&tlsFd->session, GNUTLS_CLIENT | GNUTLS_NONBLOCK)) < 0)
+ {
+ _error->Error("Internal error: could not allocate credentials: %s", gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+
+ FdFd *fdfd = dynamic_cast<FdFd *>(Fd.get());
+ if (fdfd != nullptr)
+ {
+ gnutls_transport_set_int(tlsFd->session, fdfd->fd);
+ }
+ else
+ {
+ gnutls_transport_set_ptr(tlsFd->session, Fd.get());
+ gnutls_transport_set_pull_function(tlsFd->session,
+ [](gnutls_transport_ptr_t p, void *buf, size_t size) -> ssize_t {
+ return reinterpret_cast<MethodFd *>(p)->Read(buf, size);
+ });
+ gnutls_transport_set_push_function(tlsFd->session,
+ [](gnutls_transport_ptr_t p, const void *buf, size_t size) -> ssize_t {
+ return reinterpret_cast<MethodFd *>(p)->Write((void *)buf, size);
+ });
+ }
+
+ if ((err = gnutls_certificate_allocate_credentials(&tlsFd->credentials)) < 0)
+ {
+ _error->Error("Internal error: could not allocate credentials: %s", gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+
+ // Credential setup
+ std::string fileinfo = Owner->ConfigFind("CaInfo", "");
+ if (fileinfo.empty())
+ {
+ // No CaInfo specified, use system trust store.
+ err = gnutls_certificate_set_x509_system_trust(tlsFd->credentials);
+ if (err == 0)
+ Owner->Warning("No system certificates available. Try installing ca-certificates.");
+ else if (err < 0)
+ {
+ _error->Error("Could not load system TLS certificates: %s", gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+ }
+ else
+ {
+ // CA location has been set, use the specified one instead
+ gnutls_certificate_set_verify_flags(tlsFd->credentials, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
+ err = gnutls_certificate_set_x509_trust_file(tlsFd->credentials, fileinfo.c_str(), GNUTLS_X509_FMT_PEM);
+ if (err < 0)
+ {
+ _error->Error("Could not load certificates from %s (CaInfo option): %s", fileinfo.c_str(), gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+ }
+
+ if (!Owner->ConfigFind("IssuerCert", "").empty())
+ {
+ _error->Error("The option '%s' is not supported anymore", "IssuerCert");
+ return ResultState::FATAL_ERROR;
+ }
+ if (!Owner->ConfigFind("SslForceVersion", "").empty())
+ {
+ _error->Error("The option '%s' is not supported anymore", "SslForceVersion");
+ return ResultState::FATAL_ERROR;
+ }
+
+ // For client authentication, certificate file ...
+ std::string const cert = Owner->ConfigFind("SslCert", "");
+ std::string const key = Owner->ConfigFind("SslKey", "");
+ if (cert.empty() == false)
+ {
+ if ((err = gnutls_certificate_set_x509_key_file(
+ tlsFd->credentials,
+ cert.c_str(),
+ key.empty() ? cert.c_str() : key.c_str(),
+ GNUTLS_X509_FMT_PEM)) < 0)
+ {
+ _error->Error("Could not load client certificate (%s, SslCert option) or key (%s, SslKey option): %s", cert.c_str(), key.c_str(), gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+ }
+
+ // CRL file
+ std::string const crlfile = Owner->ConfigFind("CrlFile", "");
+ if (crlfile.empty() == false)
+ {
+ if ((err = gnutls_certificate_set_x509_crl_file(tlsFd->credentials,
+ crlfile.c_str(),
+ GNUTLS_X509_FMT_PEM)) < 0)
+ {
+ _error->Error("Could not load custom certificate revocation list %s (CrlFile option): %s", crlfile.c_str(), gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+ }
+
+ if ((err = gnutls_credentials_set(tlsFd->session, GNUTLS_CRD_CERTIFICATE, tlsFd->credentials)) < 0)
+ {
+ _error->Error("Internal error: Could not add certificates to session: %s", gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+
+ if ((err = gnutls_set_default_priority(tlsFd->session)) < 0)
+ {
+ _error->Error("Internal error: Could not set algorithm preferences: %s", gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+
+ if (Owner->ConfigFindB("Verify-Peer", true))
+ {
+ gnutls_session_set_verify_cert(tlsFd->session, Owner->ConfigFindB("Verify-Host", true) ? tlsFd->hostname.c_str() : nullptr, 0);
+ }
+
+ // set SNI only if the hostname is really a name and not an address
+ {
+ struct in_addr addr4;
+ struct in6_addr addr6;
+
+ if (inet_pton(AF_INET, tlsFd->hostname.c_str(), &addr4) == 1 ||
+ inet_pton(AF_INET6, tlsFd->hostname.c_str(), &addr6) == 1)
+ /* not a host name */;
+ else if ((err = gnutls_server_name_set(tlsFd->session, GNUTLS_NAME_DNS, tlsFd->hostname.c_str(), tlsFd->hostname.length())) < 0)
+ {
+ _error->Error("Could not set host name %s to indicate to server: %s", tlsFd->hostname.c_str(), gnutls_strerror(err));
+ return ResultState::FATAL_ERROR;
+ }
+ }
+
+ // Set the FD now, so closing it works reliably.
+ tlsFd->UnderlyingFd = std::move(Fd);
+ Fd.reset(tlsFd);
+
+ // Do the handshake.
+ err = tlsFd->DoTLSHandshake();
+
+ if (err < 0)
+ return ResultState::FATAL_ERROR;
+
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
diff --git a/methods/connect.h b/methods/connect.h
new file mode 100644
index 0000000..86f6d52
--- /dev/null
+++ b/methods/connect.h
@@ -0,0 +1,49 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Connect - Replacement connect call
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef CONNECT_H
+#define CONNECT_H
+
+#include <memory>
+#include <string>
+#include <stddef.h>
+
+#include "aptmethod.h"
+
+/**
+ * \brief Small representation of a file descriptor for network traffic.
+ *
+ * This provides support for TLS, SOCKS, and HTTP CONNECT proxies.
+ */
+struct MethodFd
+{
+ /// \brief Returns -1 for unusable, or an fd to select() on otherwise
+ virtual int Fd() = 0;
+ /// \brief Should behave like read(2)
+ virtual ssize_t Read(void *buf, size_t count) = 0;
+ /// \brief Should behave like write(2)
+ virtual ssize_t Write(void *buf, size_t count) = 0;
+ /// \brief Closes the file descriptor. Can be called multiple times.
+ virtual int Close() = 0;
+ /// \brief Destructor
+ virtual ~MethodFd(){};
+ /// \brief Construct a MethodFd from a UNIX file descriptor
+ static std::unique_ptr<MethodFd> FromFd(int iFd);
+ /// \brief If there is pending data.
+ virtual bool HasPending();
+};
+
+ResultState Connect(std::string To, int Port, const char *Service, int DefPort,
+ std::unique_ptr<MethodFd> &Fd, unsigned long TimeOut, aptMethod *Owner);
+
+ResultState UnwrapSocks(std::string To, int Port, URI Proxy, std::unique_ptr<MethodFd> &Fd, unsigned long Timeout, aptMethod *Owner);
+ResultState UnwrapTLS(std::string To, std::unique_ptr<MethodFd> &Fd, unsigned long Timeout, aptMethod *Owner);
+
+void RotateDNS();
+
+#endif
diff --git a/methods/copy.cc b/methods/copy.cc
new file mode 100644
index 0000000..9a86654
--- /dev/null
+++ b/methods/copy.cc
@@ -0,0 +1,94 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Copy URI - This method takes a uri like a file: uri and copies it
+ to the destination file.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include "aptmethod.h"
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/strutl.h>
+
+#include <string>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+class CopyMethod : public aptMethod
+{
+ virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE;
+
+ public:
+ CopyMethod() : aptMethod("copy", "1.0", SingleInstance | SendConfig)
+ {
+ SeccompFlags = aptMethod::BASE;
+ }
+};
+
+// CopyMethod::Fetch - Fetch a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CopyMethod::Fetch(FetchItem *Itm)
+{
+ // this ensures that relative paths work in copy
+ std::string const File = Itm->Uri.substr(Itm->Uri.find(':')+1);
+
+ // Stat the file and send a start message
+ struct stat Buf;
+ if (stat(File.c_str(),&Buf) != 0)
+ return _error->Errno("stat",_("Failed to stat"));
+
+ // Forumulate a result and send a start message
+ FetchResult Res;
+ Res.Size = Buf.st_size;
+ Res.Filename = Itm->DestFile;
+ Res.LastModified = Buf.st_mtime;
+ Res.IMSHit = false;
+ URIStart(Res);
+
+ // just calc the hashes if the source and destination are identical
+ if (File == Itm->DestFile || Itm->DestFile == "/dev/null")
+ {
+ CalculateHashes(Itm, Res);
+ URIDone(Res);
+ return true;
+ }
+
+ // See if the file exists
+ FileFd From(File,FileFd::ReadOnly);
+ FileFd To(Itm->DestFile,FileFd::WriteAtomic);
+ To.EraseOnFailure();
+
+ // Copy the file
+ if (CopyFile(From,To) == false)
+ {
+ To.OpFail();
+ return false;
+ }
+
+ From.Close();
+ To.Close();
+
+ if (TransferModificationTimes(File.c_str(), Res.Filename.c_str(), Res.LastModified) == false)
+ return false;
+
+ CalculateHashes(Itm, Res);
+ URIDone(Res);
+ return true;
+}
+ /*}}}*/
+
+int main()
+{
+ return CopyMethod().Run();
+}
diff --git a/methods/file.cc b/methods/file.cc
new file mode 100644
index 0000000..ff43015
--- /dev/null
+++ b/methods/file.cc
@@ -0,0 +1,134 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ File URI method for APT
+
+ This simply checks that the file specified exists, if so the relevant
+ information is returned. If a .gz filename is specified then the file
+ name with .gz removed will also be checked and information about it
+ will be returned in Alt-*
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include "aptmethod.h"
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/strutl.h>
+
+#include <string>
+#include <sys/stat.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+class FileMethod : public aptMethod
+{
+ virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE;
+
+ public:
+ FileMethod() : aptMethod("file", "1.0", SingleInstance | SendConfig | LocalOnly)
+ {
+ SeccompFlags = aptMethod::BASE;
+ }
+};
+
+// FileMethod::Fetch - Fetch a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FileMethod::Fetch(FetchItem *Itm)
+{
+ URI Get = Itm->Uri;
+ std::string File = Get.Path;
+ FetchResult Res;
+ if (Get.Host.empty() == false)
+ return _error->Error(_("Invalid URI, local URIS must not start with //"));
+
+ struct stat Buf;
+ // deal with destination files which might linger around
+ if (lstat(Itm->DestFile.c_str(), &Buf) == 0)
+ {
+ if ((Buf.st_mode & S_IFREG) != 0)
+ {
+ if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0)
+ {
+ HashStringList const hsl = Itm->ExpectedHashes;
+ if (Itm->ExpectedHashes.VerifyFile(File))
+ {
+ Res.Filename = Itm->DestFile;
+ Res.IMSHit = true;
+ }
+ }
+ }
+ }
+ if (Res.IMSHit != true)
+ RemoveFile("file", Itm->DestFile);
+
+ int olderrno = 0;
+ // See if the file exists
+ if (stat(File.c_str(),&Buf) == 0)
+ {
+ Res.Size = Buf.st_size;
+ Res.Filename = File;
+ Res.LastModified = Buf.st_mtime;
+ Res.IMSHit = false;
+ if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0)
+ {
+ unsigned long long const filesize = Itm->ExpectedHashes.FileSize();
+ if (filesize != 0 && filesize == Res.Size)
+ Res.IMSHit = true;
+ }
+
+ CalculateHashes(Itm, Res);
+ }
+ else
+ olderrno = errno;
+ if (Res.IMSHit == false)
+ URIStart(Res);
+
+ // See if the uncompressed file exists and reuse it
+ FetchResult AltRes;
+ AltRes.Filename.clear();
+ std::vector<std::string> extensions = APT::Configuration::getCompressorExtensions();
+ for (std::vector<std::string>::const_iterator ext = extensions.begin(); ext != extensions.end(); ++ext)
+ {
+ if (APT::String::Endswith(File, *ext) == true)
+ {
+ std::string const unfile = File.substr(0, File.length() - ext->length());
+ if (stat(unfile.c_str(),&Buf) == 0)
+ {
+ AltRes.Size = Buf.st_size;
+ AltRes.Filename = unfile;
+ AltRes.LastModified = Buf.st_mtime;
+ AltRes.IMSHit = false;
+ if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0)
+ AltRes.IMSHit = true;
+ break;
+ }
+ // no break here as we could have situations similar to '.gz' vs '.tar.gz' here
+ }
+ }
+
+ if (AltRes.Filename.empty() == false)
+ URIDone(Res,&AltRes);
+ else if (Res.Filename.empty() == false)
+ URIDone(Res);
+ else
+ {
+ errno = olderrno;
+ return _error->Errno(File.c_str(), _("File not found"));
+ }
+
+ return true;
+}
+ /*}}}*/
+
+int main()
+{
+ return FileMethod().Run();
+}
diff --git a/methods/ftp.cc b/methods/ftp.cc
new file mode 100644
index 0000000..8213f1b
--- /dev/null
+++ b/methods/ftp.cc
@@ -0,0 +1,1188 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ FTP Acquire Method - This is the FTP acquire method for APT.
+
+ This is a very simple implementation that does not try to optimize
+ at all. Commands are sent synchronously with the FTP server (as the
+ rfc recommends, but it is not really necessary..) and no tricks are
+ done to speed things along.
+
+ RFC 2428 describes the IPv6 FTP behavior
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <ctype.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+// Internet stuff
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+
+#include "connect.h"
+#include "ftp.h"
+#include "rfc2553emu.h"
+
+#include <apti18n.h>
+ /*}}}*/
+
+using namespace std;
+
+/* This table is for the EPRT and EPSV commands, it maps the OS address
+ family to the IETF address families */
+struct AFMap
+{
+ unsigned long Family;
+ unsigned long IETFFamily;
+};
+
+#ifndef AF_INET6
+struct AFMap AFMap[] = {{AF_INET,1},{0, 0}};
+#else
+struct AFMap AFMap[] = {{AF_INET,1},{AF_INET6,2},{0, 0}};
+#endif
+
+unsigned long TimeOut = 30;
+URI Proxy;
+string FtpMethod::FailFile;
+int FtpMethod::FailFd = -1;
+time_t FtpMethod::FailTime = 0;
+
+// FTPConn::FTPConn - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+FTPConn::FTPConn(URI Srv) : Len(0), ServerFd(MethodFd::FromFd(-1)), DataFd(-1),
+ DataListenFd(-1), ServerName(Srv),
+ ForceExtended(false), TryPassive(true),
+ PeerAddrLen(0), ServerAddrLen(0)
+{
+ Debug = _config->FindB("Debug::Acquire::Ftp",false);
+ PasvAddr = 0;
+ Buffer[0] = '\0';
+}
+ /*}}}*/
+// FTPConn::~FTPConn - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+FTPConn::~FTPConn()
+{
+ Close();
+}
+ /*}}}*/
+// FTPConn::Close - Close down the connection /*{{{*/
+// ---------------------------------------------------------------------
+/* Just tear down the socket and data socket */
+void FTPConn::Close()
+{
+ ServerFd->Close();
+ close(DataFd);
+ DataFd = -1;
+ close(DataListenFd);
+ DataListenFd = -1;
+
+ if (PasvAddr != 0)
+ freeaddrinfo(PasvAddr);
+ PasvAddr = 0;
+}
+ /*}}}*/
+// FTPConn::Open - Open a new connection /*{{{*/
+// ---------------------------------------------------------------------
+/* Connect to the server using a non-blocking connection and perform a
+ login. */
+ResultState FTPConn::Open(aptMethod *Owner)
+{
+ // Use the already open connection if possible.
+ if (ServerFd->Fd() != -1)
+ return ResultState::SUCCESSFUL;
+
+ Close();
+
+ // Determine the proxy setting
+ string SpecificProxy = _config->Find("Acquire::ftp::Proxy::" + ServerName.Host);
+ if (!SpecificProxy.empty())
+ {
+ if (SpecificProxy == "DIRECT")
+ Proxy = "";
+ else
+ Proxy = SpecificProxy;
+ }
+ else
+ {
+ string DefProxy = _config->Find("Acquire::ftp::Proxy");
+ if (!DefProxy.empty())
+ {
+ Proxy = DefProxy;
+ }
+ else
+ {
+ char* result = getenv("ftp_proxy");
+ Proxy = result ? result : "";
+ }
+ }
+
+ // Parse no_proxy, a , separated list of domains
+ if (getenv("no_proxy") != 0)
+ {
+ if (CheckDomainList(ServerName.Host,getenv("no_proxy")) == true)
+ Proxy = "";
+ }
+
+ // Determine what host and port to use based on the proxy settings
+ int Port = 0;
+ string Host;
+ if (Proxy.empty() == true)
+ {
+ if (ServerName.Port != 0)
+ Port = ServerName.Port;
+ Host = ServerName.Host;
+ }
+ else
+ {
+ if (Proxy.Port != 0)
+ Port = Proxy.Port;
+ Host = Proxy.Host;
+ }
+
+ /* Connect to the remote server. Since FTP is connection oriented we
+ want to make sure we get a new server every time we reconnect */
+ RotateDNS();
+ auto result = Connect(Host, Port, "ftp", 21, ServerFd, TimeOut, Owner);
+ if (result != ResultState::SUCCESSFUL)
+ return result;
+
+ // Login must be before getpeername otherwise dante won't work.
+ Owner->Status(_("Logging in"));
+ result = Login();
+ if (result != ResultState::SUCCESSFUL)
+ return result;
+
+ // Get the remote server's address
+ PeerAddrLen = sizeof(PeerAddr);
+ if (getpeername(ServerFd->Fd(), (sockaddr *)&PeerAddr, &PeerAddrLen) != 0)
+ {
+ _error->Errno("getpeername", _("Unable to determine the peer name"));
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ // Get the local machine's address
+ ServerAddrLen = sizeof(ServerAddr);
+ if (getsockname(ServerFd->Fd(), (sockaddr *)&ServerAddr, &ServerAddrLen) != 0)
+ {
+ _error->Errno("getsockname", _("Unable to determine the local name"));
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+// FTPConn::Login - Login to the remote server /*{{{*/
+// ---------------------------------------------------------------------
+/* This performs both normal login and proxy login using a simples script
+ stored in the config file. */
+ResultState FTPConn::Login()
+{
+ unsigned int Tag;
+ string Msg;
+
+ // Setup the variables needed for authentication
+ string User = "anonymous";
+ string Pass = "apt_get_ftp_2.1@debian.linux.user";
+
+ // Fill in the user/pass
+ if (ServerName.User.empty() == false)
+ User = ServerName.User;
+ if (ServerName.Password.empty() == false)
+ Pass = ServerName.Password;
+
+ // Perform simple login
+ if (Proxy.empty() == true)
+ {
+ // Read the initial response
+ if (ReadResp(Tag,Msg) == false)
+ return ResultState::TRANSIENT_ERROR;
+ if (Tag >= 400)
+ {
+ _error->Error(_("The server refused the connection and said: %s"), Msg.c_str());
+ return ResultState::FATAL_ERROR;
+ }
+
+ // Send the user
+ if (WriteMsg(Tag,Msg,"USER %s",User.c_str()) == false)
+ return ResultState::TRANSIENT_ERROR;
+ if (Tag >= 400)
+ {
+ _error->Error(_("USER failed, server said: %s"), Msg.c_str());
+ return ResultState::FATAL_ERROR;
+ }
+
+ if (Tag == 331) { // 331 User name okay, need password.
+ // Send the Password
+ if (WriteMsg(Tag,Msg,"PASS %s",Pass.c_str()) == false)
+ return ResultState::TRANSIENT_ERROR;
+ if (Tag >= 400)
+ {
+ _error->Error(_("PASS failed, server said: %s"), Msg.c_str());
+ return ResultState::FATAL_ERROR;
+ }
+ }
+
+ // Enter passive mode
+ if (_config->Exists("Acquire::FTP::Passive::" + ServerName.Host) == true)
+ TryPassive = _config->FindB("Acquire::FTP::Passive::" + ServerName.Host,true);
+ else
+ TryPassive = _config->FindB("Acquire::FTP::Passive",true);
+ }
+ else
+ {
+ // Read the initial response
+ if (ReadResp(Tag,Msg) == false)
+ return ResultState::TRANSIENT_ERROR;
+ if (Tag >= 400)
+ {
+ _error->Error(_("The server refused the connection and said: %s"), Msg.c_str());
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ // Perform proxy script execution
+ Configuration::Item const *Opts = _config->Tree("Acquire::ftp::ProxyLogin");
+ if (Opts == 0 || Opts->Child == 0)
+ {
+ _error->Error(_("A proxy server was specified but no login "
+ "script, Acquire::ftp::ProxyLogin is empty."));
+ return ResultState::FATAL_ERROR;
+ }
+ Opts = Opts->Child;
+
+ // Iterate over the entire login script
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+
+ // Substitute the variables into the command
+ string Tmp = Opts->Value;
+ Tmp = SubstVar(Tmp,"$(PROXY_USER)",Proxy.User);
+ Tmp = SubstVar(Tmp,"$(PROXY_PASS)",Proxy.Password);
+ Tmp = SubstVar(Tmp,"$(SITE_USER)",User);
+ Tmp = SubstVar(Tmp,"$(SITE_PASS)",Pass);
+ if (ServerName.Port != 0)
+ {
+ std::string SitePort;
+ strprintf(SitePort, "%u", ServerName.Port);
+ Tmp = SubstVar(Tmp,"$(SITE_PORT)", SitePort);
+ }
+ else
+ Tmp = SubstVar(Tmp,"$(SITE_PORT)", "21");
+ Tmp = SubstVar(Tmp,"$(SITE)",ServerName.Host);
+
+ // Send the command
+ if (WriteMsg(Tag,Msg,"%s",Tmp.c_str()) == false)
+ return ResultState::TRANSIENT_ERROR;
+ if (Tag >= 400)
+ {
+ _error->Error(_("Login script command '%s' failed, server said: %s"), Tmp.c_str(), Msg.c_str());
+ return ResultState::FATAL_ERROR;
+ }
+ }
+
+ // Enter passive mode
+ TryPassive = false;
+ if (_config->Exists("Acquire::FTP::Passive::" + ServerName.Host) == true)
+ TryPassive = _config->FindB("Acquire::FTP::Passive::" + ServerName.Host,true);
+ else
+ {
+ if (_config->Exists("Acquire::FTP::Proxy::Passive") == true)
+ TryPassive = _config->FindB("Acquire::FTP::Proxy::Passive",true);
+ else
+ TryPassive = _config->FindB("Acquire::FTP::Passive",true);
+ }
+ }
+
+ // Force the use of extended commands
+ if (_config->Exists("Acquire::FTP::ForceExtended::" + ServerName.Host) == true)
+ ForceExtended = _config->FindB("Acquire::FTP::ForceExtended::" + ServerName.Host,true);
+ else
+ ForceExtended = _config->FindB("Acquire::FTP::ForceExtended",false);
+
+ // Binary mode
+ if (WriteMsg(Tag,Msg,"TYPE I") == false)
+ return ResultState::TRANSIENT_ERROR;
+ if (Tag >= 400)
+ {
+ _error->Error(_("TYPE failed, server said: %s"), Msg.c_str());
+ return ResultState::FATAL_ERROR;
+ }
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+// FTPConn::ReadLine - Read a line from the server /*{{{*/
+// ---------------------------------------------------------------------
+/* This performs a very simple buffered read. */
+bool FTPConn::ReadLine(string &Text)
+{
+ if (ServerFd->Fd() == -1)
+ return false;
+
+ // Suck in a line
+ while (Len < sizeof(Buffer))
+ {
+ // Scan the buffer for a new line
+ for (unsigned int I = 0; I != Len; I++)
+ {
+ // Escape some special chars
+ if (Buffer[I] == 0)
+ Buffer[I] = '?';
+
+ // End of line?
+ if (Buffer[I] != '\n')
+ continue;
+
+ I++;
+ Text = string(Buffer,I);
+ memmove(Buffer,Buffer+I,Len - I);
+ Len -= I;
+ return true;
+ }
+
+ // Wait for some data..
+ if (WaitFd(ServerFd->Fd(), false, TimeOut) == false)
+ {
+ Close();
+ return _error->Error(_("Connection timeout"));
+ }
+
+ // Suck it back
+ int Res = ServerFd->Read(Buffer + Len, sizeof(Buffer) - Len);
+ if (Res == 0)
+ _error->Error(_("Server closed the connection"));
+ if (Res <= 0)
+ {
+ _error->Errno("read",_("Read error"));
+ Close();
+ return false;
+ }
+ Len += Res;
+ }
+
+ return _error->Error(_("A response overflowed the buffer."));
+}
+ /*}}}*/
+// FTPConn::ReadResp - Read a full response from the server /*{{{*/
+// ---------------------------------------------------------------------
+/* This reads a reply code from the server, it handles both p */
+bool FTPConn::ReadResp(unsigned int &Ret,string &Text)
+{
+ // Grab the first line of the response
+ string Msg;
+ if (ReadLine(Msg) == false)
+ return false;
+
+ // Get the ID code
+ char *End;
+ Ret = strtol(Msg.c_str(),&End,10);
+ if (End - Msg.c_str() != 3)
+ return _error->Error(_("Protocol corruption"));
+
+ // All done ?
+ Text = Msg.c_str()+4;
+ if (*End == ' ')
+ {
+ if (Debug == true)
+ cerr << "<- '" << QuoteString(Text,"") << "'" << endl;
+ return true;
+ }
+
+ if (*End != '-')
+ return _error->Error(_("Protocol corruption"));
+
+ /* Okay, here we do the continued message trick. This is foolish, but
+ proftpd follows the protocol as specified and wu-ftpd doesn't, so
+ we filter. I wonder how many clients break if you use proftpd and
+ put a '- in the 3rd spot in the message? */
+ char Leader[4];
+ strncpy(Leader,Msg.c_str(),3);
+ Leader[3] = 0;
+ while (ReadLine(Msg) == true)
+ {
+ // Short, it must be using RFC continuation..
+ if (Msg.length() < 4)
+ {
+ Text += Msg;
+ continue;
+ }
+
+ // Oops, finished
+ if (strncmp(Msg.c_str(),Leader,3) == 0 && Msg[3] == ' ')
+ {
+ Text += Msg.c_str()+4;
+ break;
+ }
+
+ // This message has the wu-ftpd style reply code prefixed
+ if (strncmp(Msg.c_str(),Leader,3) == 0 && Msg[3] == '-')
+ {
+ Text += Msg.c_str()+4;
+ continue;
+ }
+
+ // Must be RFC style prefixing
+ Text += Msg;
+ }
+
+ if (Debug == true && _error->PendingError() == false)
+ cerr << "<- '" << QuoteString(Text,"") << "'" << endl;
+
+ return !_error->PendingError();
+}
+ /*}}}*/
+// FTPConn::WriteMsg - Send a message to the server /*{{{*/
+// ---------------------------------------------------------------------
+/* Simple printf like function.. */
+bool FTPConn::WriteMsg(unsigned int &Ret,string &Text,const char *Fmt,...)
+{
+ va_list args;
+ va_start(args,Fmt);
+
+ // sprintf the description
+ char S[400];
+ vsnprintf(S,sizeof(S) - 4,Fmt,args);
+ strcat(S,"\r\n");
+ va_end(args);
+
+ if (Debug == true)
+ cerr << "-> '" << QuoteString(S,"") << "'" << endl;
+
+ // Send it off
+ unsigned long Len = strlen(S);
+ unsigned long Start = 0;
+ while (Len != 0)
+ {
+ if (WaitFd(ServerFd->Fd(), true, TimeOut) == false)
+ {
+ Close();
+ return _error->Error(_("Connection timeout"));
+ }
+
+ int Res = ServerFd->Write(S + Start, Len);
+ if (Res <= 0)
+ {
+ _error->Errno("write",_("Write error"));
+ Close();
+ return false;
+ }
+
+ Len -= Res;
+ Start += Res;
+ }
+
+ return ReadResp(Ret,Text);
+}
+ /*}}}*/
+// FTPConn::GoPasv - Enter Passive mode /*{{{*/
+// ---------------------------------------------------------------------
+/* Try to enter passive mode, the return code does not indicate if passive
+ mode could or could not be established, only if there was a fatal error.
+ We have to enter passive mode every time we make a data connection :| */
+bool FTPConn::GoPasv()
+{
+ /* The PASV command only works on IPv4 sockets, even though it could
+ in theory suppory IPv6 via an all zeros reply */
+ if (((struct sockaddr *)&PeerAddr)->sa_family != AF_INET ||
+ ForceExtended == true)
+ return ExtGoPasv();
+
+ if (PasvAddr != 0)
+ freeaddrinfo(PasvAddr);
+ PasvAddr = 0;
+
+ // Try to enable pasv mode
+ unsigned int Tag;
+ string Msg;
+ if (WriteMsg(Tag,Msg,"PASV") == false)
+ return false;
+
+ // Unsupported function
+ string::size_type Pos = Msg.find('(');
+ if (Tag >= 400)
+ return true;
+
+ //wu-2.6.2(1) ftp server, returns
+ //227 Entering Passive Mode 193,219,28,140,150,111
+ //without parentheses, let's try to cope with it.
+ //wget(1) and ftp(1) can.
+ if (Pos == string::npos)
+ Pos = Msg.rfind(' ');
+ else
+ ++Pos;
+
+ // Still unsupported function
+ if (Pos == string::npos)
+ return true;
+
+ // Scan it
+ unsigned a0,a1,a2,a3,p0,p1;
+ if (sscanf(Msg.c_str() + Pos,"%u,%u,%u,%u,%u,%u",&a0,&a1,&a2,&a3,&p0,&p1) != 6)
+ return true;
+
+ /* Some evil servers return 0 to mean their addr. We can actually speak
+ to these servers natively using IPv6 */
+ if (a0 == 0 && a1 == 0 && a2 == 0 && a3 == 0)
+ {
+ // Get the IP in text form
+ char Name[NI_MAXHOST];
+ char Service[NI_MAXSERV];
+ getnameinfo((struct sockaddr *)&PeerAddr,PeerAddrLen,
+ Name,sizeof(Name),Service,sizeof(Service),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+
+ struct addrinfo Hints;
+ memset(&Hints,0,sizeof(Hints));
+ Hints.ai_socktype = SOCK_STREAM;
+ Hints.ai_family = ((struct sockaddr *)&PeerAddr)->sa_family;
+ Hints.ai_flags |= AI_NUMERICHOST;
+
+ // Get a new passive address.
+ char Port[100];
+ snprintf(Port,sizeof(Port),"%u",(p0 << 8) + p1);
+ if (getaddrinfo(Name,Port,&Hints,&PasvAddr) != 0)
+ return true;
+ return true;
+ }
+
+ struct addrinfo Hints;
+ memset(&Hints,0,sizeof(Hints));
+ Hints.ai_socktype = SOCK_STREAM;
+ Hints.ai_family = AF_INET;
+ Hints.ai_flags |= AI_NUMERICHOST;
+
+ // Get a new passive address.
+ char Port[100];
+ snprintf(Port,sizeof(Port),"%u",(p0 << 8) + p1);
+ char Name[100];
+ snprintf(Name,sizeof(Name),"%u.%u.%u.%u",a0,a1,a2,a3);
+ if (getaddrinfo(Name,Port,&Hints,&PasvAddr) != 0)
+ return true;
+ return true;
+}
+ /*}}}*/
+// FTPConn::ExtGoPasv - Enter Extended Passive mode /*{{{*/
+// ---------------------------------------------------------------------
+/* Try to enter extended passive mode. See GoPasv above and RFC 2428 */
+bool FTPConn::ExtGoPasv()
+{
+ if (PasvAddr != 0)
+ freeaddrinfo(PasvAddr);
+ PasvAddr = 0;
+
+ // Try to enable pasv mode
+ unsigned int Tag;
+ string Msg;
+ if (WriteMsg(Tag,Msg,"EPSV") == false)
+ return false;
+
+ // Unsupported function
+ string::size_type Pos = Msg.find('(');
+ if (Tag >= 400 || Pos == string::npos)
+ return true;
+
+ // Scan it
+ string::const_iterator List[4];
+ unsigned Count = 0;
+ Pos++;
+ for (string::const_iterator I = Msg.begin() + Pos; I < Msg.end(); ++I)
+ {
+ if (*I != Msg[Pos])
+ continue;
+ if (Count >= 4)
+ return true;
+ List[Count++] = I;
+ }
+ if (Count != 4)
+ return true;
+
+ // Break it up ..
+ unsigned long Proto = 0;
+ unsigned long Port = 0;
+ string IP;
+ IP = string(List[1]+1,List[2]);
+ Port = atoi(string(List[2]+1,List[3]).c_str());
+ if (IP.empty() == false)
+ Proto = atoi(string(List[0]+1,List[1]).c_str());
+
+ if (Port == 0)
+ return false;
+
+ // String version of the port
+ char PStr[100];
+ snprintf(PStr,sizeof(PStr),"%lu",Port);
+
+ // Get the IP in text form
+ struct addrinfo Hints;
+ memset(&Hints,0,sizeof(Hints));
+ Hints.ai_socktype = SOCK_STREAM;
+ Hints.ai_flags |= AI_NUMERICHOST;
+
+ /* The RFC defined case, connect to the old IP/protocol using the
+ new port. */
+ if (IP.empty() == true)
+ {
+ // Get the IP in text form
+ char Name[NI_MAXHOST];
+ char Service[NI_MAXSERV];
+ getnameinfo((struct sockaddr *)&PeerAddr,PeerAddrLen,
+ Name,sizeof(Name),Service,sizeof(Service),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+ IP = Name;
+ Hints.ai_family = ((struct sockaddr *)&PeerAddr)->sa_family;
+ }
+ else
+ {
+ // Get the family..
+ Hints.ai_family = 0;
+ for (unsigned J = 0; AFMap[J].Family != 0; J++)
+ if (AFMap[J].IETFFamily == Proto)
+ Hints.ai_family = AFMap[J].Family;
+ if (Hints.ai_family == 0)
+ return true;
+ }
+
+ // Get a new passive address.
+ if (getaddrinfo(IP.c_str(),PStr,&Hints,&PasvAddr) != 0)
+ return true;
+
+ return true;
+}
+ /*}}}*/
+// FTPConn::Size - Return the size of a file /*{{{*/
+// ---------------------------------------------------------------------
+/* Grab the file size from the server, 0 means no size or empty file */
+bool FTPConn::Size(const char *Path,unsigned long long &Size)
+{
+ // Query the size
+ unsigned int Tag;
+ string Msg;
+ Size = 0;
+ if (WriteMsg(Tag,Msg,"SIZE %s",Path) == false)
+ return false;
+
+ char *End;
+ Size = strtoull(Msg.c_str(),&End,10);
+ if (Tag >= 400 || End == Msg.c_str())
+ Size = 0;
+ return true;
+}
+ /*}}}*/
+// FTPConn::ModTime - Return the modification time of the file /*{{{*/
+// ---------------------------------------------------------------------
+/* Like Size no error is returned if the command is not supported. If the
+ command fails then time is set to the current time of day to fool
+ date checks. */
+bool FTPConn::ModTime(const char *Path, time_t &Time)
+{
+ Time = time(&Time);
+
+ // Query the mod time
+ unsigned int Tag;
+ string Msg;
+ if (WriteMsg(Tag,Msg,"MDTM %s",Path) == false)
+ return false;
+ if (Tag >= 400 || Msg.empty() == true || isdigit(Msg[0]) == 0)
+ return true;
+
+ // Parse it
+ return FTPMDTMStrToTime(Msg.c_str(), Time);
+}
+ /*}}}*/
+// FTPConn::CreateDataFd - Get a data connection /*{{{*/
+// ---------------------------------------------------------------------
+/* Create the data connection. Call FinalizeDataFd after this though.. */
+bool FTPConn::CreateDataFd()
+{
+ close(DataFd);
+ DataFd = -1;
+
+ // Attempt to enter passive mode.
+ if (TryPassive == true)
+ {
+ if (GoPasv() == false)
+ return false;
+
+ // Oops, didn't work out, don't bother trying again.
+ if (PasvAddr == 0)
+ TryPassive = false;
+ }
+
+ // Passive mode?
+ if (PasvAddr != 0)
+ {
+ // Get a socket
+ if ((DataFd = socket(PasvAddr->ai_family,PasvAddr->ai_socktype,
+ PasvAddr->ai_protocol)) < 0)
+ return _error->Errno("socket",_("Could not create a socket"));
+
+ // Connect to the server
+ SetNonBlock(DataFd,true);
+ if (connect(DataFd,PasvAddr->ai_addr,PasvAddr->ai_addrlen) < 0 &&
+ errno != EINPROGRESS)
+ return _error->Errno("socket",_("Could not create a socket"));
+
+ /* This implements a timeout for connect by opening the connection
+ nonblocking */
+ if (WaitFd(DataFd,true,TimeOut) == false)
+ return _error->Error(_("Could not connect data socket, connection timed out"));
+ unsigned int Err;
+ unsigned int Len = sizeof(Err);
+ if (getsockopt(DataFd,SOL_SOCKET,SO_ERROR,&Err,&Len) != 0)
+ return _error->Errno("getsockopt",_("Failed"));
+ if (Err != 0)
+ return _error->Error(_("Could not connect passive socket."));
+
+ return true;
+ }
+
+ // Port mode :<
+ close(DataListenFd);
+ DataListenFd = -1;
+
+ // Get the information for a listening socket.
+ struct addrinfo *BindAddr = NULL;
+ struct addrinfo Hints;
+ memset(&Hints,0,sizeof(Hints));
+ Hints.ai_socktype = SOCK_STREAM;
+ Hints.ai_flags |= AI_PASSIVE;
+ Hints.ai_family = ((struct sockaddr *)&ServerAddr)->sa_family;
+ if (getaddrinfo(0,"0",&Hints,&BindAddr) != 0 || BindAddr == NULL)
+ return _error->Error(_("getaddrinfo was unable to get a listening socket"));
+
+ // Construct the socket
+ if ((DataListenFd = socket(BindAddr->ai_family,BindAddr->ai_socktype,
+ BindAddr->ai_protocol)) < 0)
+ {
+ freeaddrinfo(BindAddr);
+ return _error->Errno("socket",_("Could not create a socket"));
+ }
+
+ // Bind and listen
+ if (::bind(DataListenFd,BindAddr->ai_addr,BindAddr->ai_addrlen) < 0)
+ {
+ freeaddrinfo(BindAddr);
+ return _error->Errno("bind",_("Could not bind a socket"));
+ }
+ freeaddrinfo(BindAddr);
+ if (listen(DataListenFd,1) < 0)
+ return _error->Errno("listen",_("Could not listen on the socket"));
+ SetNonBlock(DataListenFd,true);
+
+ // Determine the name to send to the remote
+ struct sockaddr_storage Addr;
+ socklen_t AddrLen = sizeof(Addr);
+ if (getsockname(DataListenFd,(sockaddr *)&Addr,&AddrLen) < 0)
+ return _error->Errno("getsockname",_("Could not determine the socket's name"));
+
+
+ // Reverse the address. We need the server address and the data port.
+ char Name[NI_MAXHOST];
+ char Service[NI_MAXSERV];
+ char Service2[NI_MAXSERV];
+ getnameinfo((struct sockaddr *)&Addr,AddrLen,
+ Name,sizeof(Name),Service,sizeof(Service),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+ getnameinfo((struct sockaddr *)&ServerAddr,ServerAddrLen,
+ Name,sizeof(Name),Service2,sizeof(Service2),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+
+ // Send off an IPv4 address in the old port format
+ if (((struct sockaddr *)&Addr)->sa_family == AF_INET &&
+ ForceExtended == false)
+ {
+ // Convert the dots in the quad into commas
+ for (char *I = Name; *I != 0; I++)
+ if (*I == '.')
+ *I = ',';
+ unsigned long Port = atoi(Service);
+
+ // Send the port command
+ unsigned int Tag;
+ string Msg;
+ if (WriteMsg(Tag,Msg,"PORT %s,%d,%d",
+ Name,
+ (int)(Port >> 8) & 0xff, (int)(Port & 0xff)) == false)
+ return false;
+ if (Tag >= 400)
+ return _error->Error(_("Unable to send PORT command"));
+ return true;
+ }
+
+ // Construct an EPRT command
+ unsigned Proto = 0;
+ for (unsigned J = 0; AFMap[J].Family != 0; J++)
+ if (AFMap[J].Family == ((struct sockaddr *)&Addr)->sa_family)
+ Proto = AFMap[J].IETFFamily;
+ if (Proto == 0)
+ return _error->Error(_("Unknown address family %u (AF_*)"),
+ ((struct sockaddr *)&Addr)->sa_family);
+
+ // Send the EPRT command
+ unsigned int Tag;
+ string Msg;
+ if (WriteMsg(Tag,Msg,"EPRT |%u|%s|%s|",Proto,Name,Service) == false)
+ return false;
+ if (Tag >= 400)
+ return _error->Error(_("EPRT failed, server said: %s"),Msg.c_str());
+ return true;
+}
+ /*}}}*/
+// FTPConn::Finalize - Complete the Data connection /*{{{*/
+// ---------------------------------------------------------------------
+/* If the connection is in port mode this waits for the other end to hook
+ up to us. */
+bool FTPConn::Finalize()
+{
+ // Passive mode? Do nothing
+ if (PasvAddr != 0)
+ return true;
+
+ // Close any old socket..
+ close(DataFd);
+ DataFd = -1;
+
+ // Wait for someone to connect..
+ if (WaitFd(DataListenFd,false,TimeOut) == false)
+ return _error->Error(_("Data socket connect timed out"));
+
+ // Accept the connection
+ struct sockaddr_in Addr;
+ socklen_t Len = sizeof(Addr);
+ DataFd = accept(DataListenFd,(struct sockaddr *)&Addr,&Len);
+ if (DataFd < 0)
+ return _error->Errno("accept",_("Unable to accept connection"));
+
+ close(DataListenFd);
+ DataListenFd = -1;
+
+ return true;
+}
+ /*}}}*/
+// FTPConn::Get - Get a file /*{{{*/
+// ---------------------------------------------------------------------
+/* This opens a data connection, sends REST and RETR and then
+ transfers the file over. */
+bool FTPConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
+ Hashes &Hash,bool &Missing, unsigned long long MaximumSize,
+ pkgAcqMethod *Owner)
+{
+ Missing = false;
+ if (CreateDataFd() == false)
+ return false;
+
+ unsigned int Tag;
+ string Msg;
+ if (Resume != 0)
+ {
+ if (WriteMsg(Tag,Msg,"REST %u",Resume) == false)
+ return false;
+ if (Tag >= 400)
+ Resume = 0;
+ }
+
+ if (To.Truncate(Resume) == false)
+ return false;
+
+ if (To.Seek(0) == false)
+ return false;
+
+ if (Resume != 0)
+ {
+ if (Hash.AddFD(To,Resume) == false)
+ {
+ _error->Errno("read",_("Problem hashing file"));
+ return false;
+ }
+ }
+
+ // Send the get command
+ if (WriteMsg(Tag,Msg,"RETR %s",Path) == false)
+ return false;
+
+ if (Tag >= 400)
+ {
+ if (Tag == 550)
+ Missing = true;
+ return _error->Error(_("Unable to fetch file, server said '%s'"),Msg.c_str());
+ }
+
+ // Finish off the data connection
+ if (Finalize() == false)
+ return false;
+
+ // Copy loop
+ unsigned char Buffer[4096];
+ while (1)
+ {
+ // Wait for some data..
+ if (WaitFd(DataFd,false,TimeOut) == false)
+ {
+ Close();
+ return _error->Error(_("Data socket timed out"));
+ }
+
+ // Read the data..
+ int Res = read(DataFd,Buffer,sizeof(Buffer));
+ if (Res == 0)
+ break;
+ if (Res < 0)
+ {
+ if (errno == EAGAIN)
+ continue;
+ break;
+ }
+
+ Hash.Add(Buffer,Res);
+ if (To.Write(Buffer,Res) == false)
+ {
+ Close();
+ return false;
+ }
+
+ if (MaximumSize > 0 && To.Tell() > MaximumSize)
+ {
+ Owner->SetFailReason("MaximumSizeExceeded");
+ return _error->Error(_("File has unexpected size (%llu != %llu). Mirror sync in progress?"),
+ To.Tell(), MaximumSize);
+ }
+ }
+
+ // All done
+ close(DataFd);
+ DataFd = -1;
+
+ // Read the closing message from the server
+ if (ReadResp(Tag,Msg) == false)
+ return false;
+ if (Tag >= 400)
+ return _error->Error(_("Data transfer failed, server said '%s'"),Msg.c_str());
+ return true;
+}
+ /*}}}*/
+
+// FtpMethod::FtpMethod - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+FtpMethod::FtpMethod() : aptAuthConfMethod("ftp", "1.0", SendConfig)
+{
+ SeccompFlags = aptMethod::BASE | aptMethod::NETWORK;
+ signal(SIGTERM,SigTerm);
+ signal(SIGINT,SigTerm);
+
+ Server = 0;
+ FailFd = -1;
+}
+ /*}}}*/
+// FtpMethod::SigTerm - Handle a fatal signal /*{{{*/
+// ---------------------------------------------------------------------
+/* This closes and timestamps the open file. This is necessary to get
+ resume behavior on user abort */
+void FtpMethod::SigTerm(int)
+{
+ if (FailFd == -1)
+ _exit(100);
+
+ // Timestamp
+ struct timeval times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(FailFile.c_str(), times);
+
+ close(FailFd);
+
+ _exit(100);
+}
+ /*}}}*/
+// FtpMethod::Configuration - Handle a configuration message /*{{{*/
+// ---------------------------------------------------------------------
+/* We stash the desired pipeline depth */
+bool FtpMethod::Configuration(string Message)
+{
+ if (aptAuthConfMethod::Configuration(Message) == false)
+ return false;
+
+ TimeOut = _config->FindI("Acquire::Ftp::Timeout",TimeOut);
+
+ return true;
+}
+ /*}}}*/
+// FtpMethod::Fetch - Fetch a file /*{{{*/
+// ---------------------------------------------------------------------
+/* Fetch a single file, called by the base class.. */
+bool FtpMethod::Fetch(FetchItem *Itm)
+{
+ URI Get = Itm->Uri;
+ const char *File = Get.Path.c_str();
+ FetchResult Res;
+ Res.Filename = Itm->DestFile;
+ Res.IMSHit = false;
+
+ MaybeAddAuthTo(Get);
+
+ // Connect to the server
+ if (Server == 0 || Server->Comp(Get) == false)
+ {
+ delete Server;
+ Server = new FTPConn(Get);
+ }
+
+ // Could not connect is a transient error..
+ switch (Server->Open(this))
+ {
+ case ResultState::TRANSIENT_ERROR:
+ Server->Close();
+ Fail(true);
+ return true;
+ case ResultState::FATAL_ERROR:
+ Server->Close();
+ Fail(false);
+ return true;
+ case ResultState::SUCCESSFUL:
+ break;
+ }
+
+ // Get the files information
+ Status(_("Query"));
+ unsigned long long Size;
+ if (Server->Size(File,Size) == false ||
+ Server->ModTime(File,FailTime) == false)
+ {
+ Fail(true);
+ return true;
+ }
+ Res.Size = Size;
+
+ // See if it is an IMS hit
+ if (Itm->LastModified == FailTime)
+ {
+ Res.Size = 0;
+ Res.IMSHit = true;
+ URIDone(Res);
+ return true;
+ }
+
+ // See if the file exists
+ struct stat Buf;
+ if (stat(Itm->DestFile.c_str(),&Buf) == 0)
+ {
+ if (Size == (unsigned long long)Buf.st_size && FailTime == Buf.st_mtime)
+ {
+ Res.Size = Buf.st_size;
+ Res.LastModified = Buf.st_mtime;
+ Res.ResumePoint = Buf.st_size;
+ URIDone(Res);
+ return true;
+ }
+
+ // Resume?
+ if (FailTime == Buf.st_mtime && Size > (unsigned long long)Buf.st_size)
+ Res.ResumePoint = Buf.st_size;
+ }
+
+ // Open the file
+ Hashes Hash(Itm->ExpectedHashes);
+ {
+ FileFd Fd(Itm->DestFile,FileFd::WriteAny);
+ if (_error->PendingError() == true)
+ return false;
+
+ URIStart(Res);
+
+ FailFile = Itm->DestFile;
+ FailFile.c_str(); // Make sure we don't do a malloc in the signal handler
+ FailFd = Fd.Fd();
+
+ bool Missing;
+ if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing,Itm->MaximumSize,this) == false)
+ {
+ Fd.Close();
+
+ // Timestamp
+ struct timeval times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(FailFile.c_str(), times);
+
+ // If the file is missing we hard fail and delete the destfile
+ // otherwise transient fail
+ if (Missing == true) {
+ RemoveFile("ftp", FailFile);
+ return false;
+ }
+ Fail(true);
+ return true;
+ }
+
+ Res.Size = Fd.Size();
+
+ // Timestamp
+ struct timeval times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(Fd.Name().c_str(), times);
+ FailFd = -1;
+ }
+
+ Res.LastModified = FailTime;
+ Res.TakeHashes(Hash);
+
+ URIDone(Res);
+
+ return true;
+}
+ /*}}}*/
+
+int main(int, const char *argv[])
+{
+ /* See if we should be come the http client - we do this for http
+ proxy urls */
+ if (getenv("ftp_proxy") != 0)
+ {
+ URI Proxy = string(getenv("ftp_proxy"));
+
+ // Run the HTTP method
+ if (Proxy.Access == "http")
+ {
+ // Copy over the environment setting
+ char S[300];
+ snprintf(S,sizeof(S),"http_proxy=%s",getenv("ftp_proxy"));
+ putenv(S);
+ putenv((char *)"no_proxy=");
+
+ // Run the http method
+ string Path = flNotFile(argv[0]) + "http";
+ execl(Path.c_str(),Path.c_str(),(char *)NULL);
+ cerr << _("Unable to invoke ") << Path << endl;
+ exit(100);
+ }
+ }
+ return FtpMethod().Run();
+}
diff --git a/methods/ftp.h b/methods/ftp.h
new file mode 100644
index 0000000..da9887b
--- /dev/null
+++ b/methods/ftp.h
@@ -0,0 +1,91 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ FTP Acquire Method - This is the FTP acquire method for APT.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APT_FTP_H
+#define APT_FTP_H
+
+#include "aptmethod.h"
+#include "connect.h"
+#include <apt-pkg/strutl.h>
+
+#include <string>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <time.h>
+
+class FTPConn
+{
+ char Buffer[1024*10];
+ unsigned long Len;
+ std::unique_ptr<MethodFd> ServerFd;
+ int DataFd;
+ int DataListenFd;
+ URI ServerName;
+ bool ForceExtended;
+ bool TryPassive;
+ bool Debug;
+
+ struct addrinfo *PasvAddr;
+
+ // Generic Peer Address
+ struct sockaddr_storage PeerAddr;
+ socklen_t PeerAddrLen;
+
+ // Generic Server Address (us)
+ struct sockaddr_storage ServerAddr;
+ socklen_t ServerAddrLen;
+
+ // Private helper functions
+ bool ReadLine(std::string &Text);
+ ResultState Login();
+ bool CreateDataFd();
+ bool Finalize();
+
+ public:
+
+ bool Comp(URI Other) {return Other.Host == ServerName.Host && Other.Port == ServerName.Port && Other.User == ServerName.User && Other.Password == ServerName.Password; };
+
+ // Raw connection IO
+ bool ReadResp(unsigned int &Ret,std::string &Text);
+ bool WriteMsg(unsigned int &Ret,std::string &Text,const char *Fmt,...);
+
+ // Connection control
+ ResultState Open(aptMethod *Owner);
+ void Close();
+ bool GoPasv();
+ bool ExtGoPasv();
+
+ // Query
+ bool Size(const char *Path,unsigned long long &Size);
+ bool ModTime(const char *Path, time_t &Time);
+ bool Get(const char *Path,FileFd &To,unsigned long long Resume,
+ Hashes &MD5,bool &Missing, unsigned long long MaximumSize,
+ pkgAcqMethod *Owner);
+
+ explicit FTPConn(URI Srv);
+ ~FTPConn();
+};
+
+class FtpMethod : public aptAuthConfMethod
+{
+ virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE;
+ virtual bool Configuration(std::string Message) APT_OVERRIDE;
+
+ FTPConn *Server;
+
+ static std::string FailFile;
+ static int FailFd;
+ static time_t FailTime;
+ static APT_NORETURN void SigTerm(int);
+
+ public:
+
+ FtpMethod();
+};
+
+#endif
diff --git a/methods/gpgv.cc b/methods/gpgv.cc
new file mode 100644
index 0000000..f66e335
--- /dev/null
+++ b/methods/gpgv.cc
@@ -0,0 +1,522 @@
+#include <config.h>
+
+#include "aptmethod.h"
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+#include <apt-pkg/strutl.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <array>
+#include <iostream>
+#include <iterator>
+#include <map>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <apti18n.h>
+
+using std::string;
+using std::vector;
+
+#define GNUPGPREFIX "[GNUPG:]"
+#define GNUPGBADSIG "[GNUPG:] BADSIG"
+#define GNUPGERRSIG "[GNUPG:] ERRSIG"
+#define GNUPGNOPUBKEY "[GNUPG:] NO_PUBKEY"
+#define GNUPGVALIDSIG "[GNUPG:] VALIDSIG"
+#define GNUPGGOODSIG "[GNUPG:] GOODSIG"
+#define GNUPGEXPKEYSIG "[GNUPG:] EXPKEYSIG"
+#define GNUPGEXPSIG "[GNUPG:] EXPSIG"
+#define GNUPGREVKEYSIG "[GNUPG:] REVKEYSIG"
+#define GNUPGNODATA "[GNUPG:] NODATA"
+#define APTKEYWARNING "[APTKEY:] WARNING"
+#define APTKEYERROR "[APTKEY:] ERROR"
+
+struct Digest {
+ enum class State {
+ Untrusted,
+ Weak,
+ Trusted,
+ } state;
+ char name[32];
+
+ State getState() const {
+ std::string optionUntrusted;
+ std::string optionWeak;
+ strprintf(optionUntrusted, "APT::Hashes::%s::Untrusted", name);
+ strprintf(optionWeak, "APT::Hashes::%s::Weak", name);
+ if (_config->FindB(optionUntrusted, false) == true)
+ return State::Untrusted;
+ if (_config->FindB(optionWeak, false) == true)
+ return State::Weak;
+
+ return state;
+ }
+};
+
+static constexpr Digest Digests[] = {
+ {Digest::State::Untrusted, "Invalid digest"},
+ {Digest::State::Untrusted, "MD5"},
+ {Digest::State::Untrusted, "SHA1"},
+ {Digest::State::Untrusted, "RIPE-MD/160"},
+ {Digest::State::Trusted, "Reserved digest"},
+ {Digest::State::Trusted, "Reserved digest"},
+ {Digest::State::Trusted, "Reserved digest"},
+ {Digest::State::Trusted, "Reserved digest"},
+ {Digest::State::Trusted, "SHA256"},
+ {Digest::State::Trusted, "SHA384"},
+ {Digest::State::Trusted, "SHA512"},
+ {Digest::State::Trusted, "SHA224"},
+};
+
+static Digest FindDigest(std::string const & Digest)
+{
+ int id = atoi(Digest.c_str());
+ if (id >= 0 && static_cast<unsigned>(id) < _count(Digests)) {
+ return Digests[id];
+ } else {
+ return Digests[0];
+ }
+}
+
+struct Signer {
+ std::string key;
+ std::string note;
+};
+static bool IsTheSameKey(std::string const &validsig, std::string const &goodsig) {
+ // VALIDSIG reports a fingerprint (40 = 24 + 16), GOODSIG can be longid (16) or
+ // fingerprint according to documentation in DETAILS.gz
+ if (goodsig.length() == 40 + strlen("GOODSIG "))
+ return validsig.compare(0, 40, goodsig, strlen("GOODSIG "), 40) == 0;
+ return validsig.compare(24, 16, goodsig, strlen("GOODSIG "), 16) == 0;
+}
+
+struct APT_HIDDEN SignersStorage {
+ std::vector<std::string> Good;
+ std::vector<std::string> Bad;
+ std::vector<std::string> Worthless;
+ // a worthless signature is a expired or revoked one
+ std::vector<Signer> SoonWorthless;
+ std::vector<std::string> NoPubKey;
+ std::vector<std::string> Valid;
+ std::vector<std::string> SignedBy;
+};
+class GPGVMethod : public aptMethod
+{
+ private:
+ string VerifyGetSigners(const char *file, const char *outfile,
+ vector<string> const &keyFpts,
+ vector<string> const &keyFiles,
+ SignersStorage &Signers);
+ protected:
+ virtual bool URIAcquire(std::string const &Message, FetchItem *Itm) APT_OVERRIDE;
+ public:
+ GPGVMethod() : aptMethod("gpgv", "1.1", SingleInstance | SendConfig){};
+};
+static void PushEntryWithKeyID(std::vector<std::string> &Signers, char * const buffer, bool const Debug)
+{
+ char * const msg = buffer + sizeof(GNUPGPREFIX);
+ char *p = msg;
+ // skip the message
+ while (*p && !isspace(*p))
+ ++p;
+ // skip the separator whitespace
+ ++p;
+ // skip the hexdigit fingerprint
+ while (*p && isxdigit(*p))
+ ++p;
+ // cut the rest from the message
+ *p = '\0';
+ if (Debug == true)
+ std::clog << "Got " << msg << " !" << std::endl;
+ Signers.push_back(msg);
+}
+static void PushEntryWithUID(std::vector<std::string> &Signers, char * const buffer, bool const Debug)
+{
+ std::string msg = buffer + sizeof(GNUPGPREFIX);
+ auto const nuke = msg.find_last_not_of("\n\t\r");
+ if (nuke != std::string::npos)
+ msg.erase(nuke + 1);
+ if (Debug == true)
+ std::clog << "Got " << msg << " !" << std::endl;
+ Signers.push_back(msg);
+}
+static void implodeVector(std::vector<std::string> const &vec, std::ostream &out, char const * const sep)
+{
+ if (vec.empty())
+ return;
+ std::copy(vec.begin(), std::prev(vec.end()), std::ostream_iterator<std::string>(out, sep));
+ out << *vec.rbegin();
+ return;
+}
+string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
+ vector<string> const &keyFpts,
+ vector<string> const &keyFiles,
+ SignersStorage &Signers)
+{
+ bool const Debug = DebugEnabled();
+
+ if (Debug == true)
+ std::clog << "inside VerifyGetSigners" << std::endl;
+
+ int fd[2];
+
+ if (pipe(fd) < 0)
+ return "Couldn't create pipe";
+
+ pid_t pid = fork();
+ if (pid < 0)
+ return string("Couldn't spawn new process") + strerror(errno);
+ else if (pid == 0)
+ {
+ std::ostringstream keys;
+ implodeVector(keyFiles, keys, ",");
+ ExecGPGV(outfile, file, 3, fd, keys.str());
+ }
+ close(fd[1]);
+
+ FILE *pipein = fdopen(fd[0], "r");
+
+ // Loop over the output of apt-key (which really is gnupg), and check the signatures.
+ std::vector<std::string> ErrSigners;
+ std::map<std::string, std::vector<std::string>> SubKeyMapping;
+ size_t buffersize = 0;
+ char *buffer = NULL;
+ bool gotNODATA = false;
+ while (1)
+ {
+ if (getline(&buffer, &buffersize, pipein) == -1)
+ break;
+ if (Debug == true)
+ std::clog << "Read: " << buffer << std::endl;
+
+ // Push the data into three separate vectors, which
+ // we later concatenate. They're kept separate so
+ // if we improve the apt method communication stuff later
+ // it will be better.
+ if (strncmp(buffer, GNUPGBADSIG, sizeof(GNUPGBADSIG)-1) == 0)
+ PushEntryWithUID(Signers.Bad, buffer, Debug);
+ else if (strncmp(buffer, GNUPGERRSIG, sizeof(GNUPGERRSIG)-1) == 0)
+ PushEntryWithKeyID(ErrSigners, buffer, Debug);
+ else if (strncmp(buffer, GNUPGNOPUBKEY, sizeof(GNUPGNOPUBKEY)-1) == 0)
+ {
+ PushEntryWithKeyID(Signers.NoPubKey, buffer, Debug);
+ ErrSigners.erase(std::remove_if(ErrSigners.begin(), ErrSigners.end(), [&](std::string const &errsig) {
+ return errsig.compare(strlen("ERRSIG "), 16, buffer, sizeof(GNUPGNOPUBKEY), 16) == 0; }), ErrSigners.end());
+ }
+ else if (strncmp(buffer, GNUPGNODATA, sizeof(GNUPGNODATA)-1) == 0)
+ gotNODATA = true;
+ else if (strncmp(buffer, GNUPGEXPKEYSIG, sizeof(GNUPGEXPKEYSIG)-1) == 0)
+ PushEntryWithUID(Signers.Worthless, buffer, Debug);
+ else if (strncmp(buffer, GNUPGEXPSIG, sizeof(GNUPGEXPSIG)-1) == 0)
+ PushEntryWithUID(Signers.Worthless, buffer, Debug);
+ else if (strncmp(buffer, GNUPGREVKEYSIG, sizeof(GNUPGREVKEYSIG)-1) == 0)
+ PushEntryWithUID(Signers.Worthless, buffer, Debug);
+ else if (strncmp(buffer, GNUPGGOODSIG, sizeof(GNUPGGOODSIG)-1) == 0)
+ PushEntryWithKeyID(Signers.Good, buffer, Debug);
+ else if (strncmp(buffer, GNUPGVALIDSIG, sizeof(GNUPGVALIDSIG)-1) == 0)
+ {
+ std::istringstream iss(buffer + sizeof(GNUPGVALIDSIG));
+ vector<string> tokens{std::istream_iterator<string>{iss},
+ std::istream_iterator<string>{}};
+ auto const sig = tokens[0];
+ // Reject weak digest algorithms
+ Digest digest = FindDigest(tokens[7]);
+ switch (digest.getState()) {
+ case Digest::State::Weak:
+ // Treat them like an expired key: For that a message about expiry
+ // is emitted, a VALIDSIG, but no GOODSIG.
+ Signers.SoonWorthless.push_back({sig, digest.name});
+ if (Debug == true)
+ std::clog << "Got weak VALIDSIG, key ID: " << sig << std::endl;
+ break;
+ case Digest::State::Untrusted:
+ // Treat them like an expired key: For that a message about expiry
+ // is emitted, a VALIDSIG, but no GOODSIG.
+ Signers.Worthless.push_back(sig);
+ Signers.Good.erase(std::remove_if(Signers.Good.begin(), Signers.Good.end(), [&](std::string const &goodsig) {
+ return IsTheSameKey(sig, goodsig); }), Signers.Good.end());
+ if (Debug == true)
+ std::clog << "Got untrusted VALIDSIG, key ID: " << sig << std::endl;
+ break;
+
+ case Digest::State::Trusted:
+ if (Debug == true)
+ std::clog << "Got trusted VALIDSIG, key ID: " << sig << std::endl;
+ break;
+ }
+
+ Signers.Valid.push_back(sig);
+
+ if (tokens.size() > 9 && sig != tokens[9])
+ SubKeyMapping[tokens[9]].emplace_back(sig);
+ }
+ else if (strncmp(buffer, APTKEYWARNING, sizeof(APTKEYWARNING)-1) == 0)
+ Warning("%s", buffer + sizeof(APTKEYWARNING));
+ else if (strncmp(buffer, APTKEYERROR, sizeof(APTKEYERROR)-1) == 0)
+ _error->Error("%s", buffer + sizeof(APTKEYERROR));
+ }
+ fclose(pipein);
+ free(buffer);
+ std::move(ErrSigners.begin(), ErrSigners.end(), std::back_inserter(Signers.Worthless));
+
+ // apt-key has a --keyid parameter, but this requires gpg, so we call it without it
+ // and instead check after the fact which keyids where used for verification
+ if (keyFpts.empty() == false)
+ {
+ if (Debug == true)
+ {
+ std::clog << "GoodSigs needs to be limited to keyid(s): ";
+ implodeVector(keyFpts, std::clog, ", ");
+ std::clog << "\n";
+ }
+ std::vector<std::string> filteredGood;
+ for (auto &&good: Signers.Good)
+ {
+ if (Debug == true)
+ std::clog << "Key " << good << " is good sig, is it also a valid and allowed one? ";
+ bool found = false;
+ for (auto l : keyFpts)
+ {
+ bool exactKey = false;
+ if (APT::String::Endswith(l, "!"))
+ {
+ exactKey = true;
+ l.erase(l.length() - 1);
+ }
+ if (IsTheSameKey(l, good))
+ {
+ // GOODSIG might be "just" a longid, so we check VALIDSIG which is always a fingerprint
+ if (std::find(Signers.Valid.cbegin(), Signers.Valid.cend(), l) == Signers.Valid.cend())
+ continue;
+ found = true;
+ Signers.SignedBy.push_back(l + "!");
+ break;
+ }
+ else if (exactKey == false)
+ {
+ auto const master = SubKeyMapping.find(l);
+ if (master == SubKeyMapping.end())
+ continue;
+ for (auto const &sub : master->second)
+ if (IsTheSameKey(sub, good))
+ {
+ if (std::find(Signers.Valid.cbegin(), Signers.Valid.cend(), sub) == Signers.Valid.cend())
+ continue;
+ found = true;
+ Signers.SignedBy.push_back(l);
+ Signers.SignedBy.push_back(sub + "!");
+ break;
+ }
+ if (found)
+ break;
+ }
+ }
+ if (Debug)
+ std::clog << (found ? "yes" : "no") << "\n";
+ if (found)
+ filteredGood.emplace_back(std::move(good));
+ else
+ Signers.NoPubKey.emplace_back(std::move(good));
+ }
+ Signers.Good= std::move(filteredGood);
+ }
+ else
+ {
+ // for gpg an expired key is valid, too, but we want only the valid & good ones
+ for (auto const &v : Signers.Valid)
+ if (std::any_of(Signers.Good.begin(), Signers.Good.end(),
+ [&v](std::string const &g) { return IsTheSameKey(v, g); }))
+ Signers.SignedBy.push_back(v + "!");
+ for (auto sub : SubKeyMapping)
+ if (std::any_of(sub.second.begin(), sub.second.end(),
+ [&](std::string const &s) {
+ if (std::find(Signers.Valid.begin(), Signers.Valid.end(), s) == Signers.Valid.end())
+ return false;
+ return std::any_of(Signers.Good.begin(), Signers.Good.end(),
+ [&s](std::string const &g) { return IsTheSameKey(s, g); });
+ }))
+ Signers.SignedBy.push_back(sub.first);
+ }
+ std::sort(Signers.SignedBy.begin(), Signers.SignedBy.end());
+
+ int status;
+ waitpid(pid, &status, 0);
+ if (Debug == true)
+ {
+ ioprintf(std::clog, "gpgv exited with status %i\n", WEXITSTATUS(status));
+ }
+
+ if (Debug)
+ {
+ std::cerr << "Summary:\n Good: ";
+ implodeVector(Signers.Good, std::cerr, ", ");
+ std::cerr << "\n Valid: ";
+ implodeVector(Signers.Valid, std::cerr, ", ");
+ std::cerr << "\n Bad: ";
+ implodeVector(Signers.Bad, std::cerr, ", ");
+ std::cerr << "\n Worthless: ";
+ implodeVector(Signers.Worthless, std::cerr, ", ");
+ std::cerr << "\n SoonWorthless: ";
+ std::for_each(Signers.SoonWorthless.begin(), Signers.SoonWorthless.end(), [](Signer const &sig) { std::cerr << sig.key << ", "; });
+ std::cerr << "\n NoPubKey: ";
+ implodeVector(Signers.NoPubKey, std::cerr, ", ");
+ std::cerr << "\n Signed-By: ";
+ implodeVector(Signers.SignedBy, std::cerr, ", ");
+ std::cerr << std::endl << " NODATA: " << (gotNODATA ? "yes" : "no") << std::endl;
+ }
+
+ if (WEXITSTATUS(status) == 112)
+ {
+ // acquire system checks for "NODATA" to generate GPG errors (the others are only warnings)
+ std::string errmsg;
+ //TRANSLATORS: %s is a single techy word like 'NODATA'
+ strprintf(errmsg, _("Clearsigned file isn't valid, got '%s' (does the network require authentication?)"), "NODATA");
+ return errmsg;
+ }
+ else if (gotNODATA)
+ {
+ // acquire system checks for "NODATA" to generate GPG errors (the others are only warnings)
+ std::string errmsg;
+ //TRANSLATORS: %s is a single techy word like 'NODATA'
+ strprintf(errmsg, _("Signed file isn't valid, got '%s' (does the network require authentication?)"), "NODATA");
+ return errmsg;
+ }
+ else if (WEXITSTATUS(status) == 0)
+ {
+ if (keyFpts.empty() == false)
+ {
+ // gpgv will report success, but we want to enforce a certain keyring
+ // so if we haven't found the key the valid we found is in fact invalid
+ if (Signers.Good.empty())
+ return _("At least one invalid signature was encountered.");
+ }
+ else
+ {
+ if (Signers.Good.empty())
+ return _("Internal error: Good signature, but could not determine key fingerprint?!");
+ }
+ return "";
+ }
+ else if (WEXITSTATUS(status) == 1)
+ return _("At least one invalid signature was encountered.");
+ else if (WEXITSTATUS(status) == 111)
+ return _("Could not execute 'apt-key' to verify signature (is gnupg installed?)");
+ else
+ return _("Unknown error executing apt-key");
+}
+
+bool GPGVMethod::URIAcquire(std::string const &Message, FetchItem *Itm)
+{
+ URI const Get = Itm->Uri;
+ string const Path = Get.Host + Get.Path; // To account for relative paths
+ SignersStorage Signers;
+
+ std::vector<std::string> keyFpts, keyFiles;
+ for (auto &&key : VectorizeString(LookupTag(Message, "Signed-By"), ','))
+ if (key.empty() == false && key[0] == '/')
+ keyFiles.emplace_back(std::move(key));
+ else
+ keyFpts.emplace_back(std::move(key));
+
+ // Run apt-key on file, extract contents and get the key ID of the signer
+ string const msg = VerifyGetSigners(Path.c_str(), Itm->DestFile.c_str(), keyFpts, keyFiles, Signers);
+ if (_error->PendingError())
+ return false;
+
+ // Check if all good signers are soon worthless and warn in that case
+ if (std::all_of(Signers.Good.begin(), Signers.Good.end(), [&](std::string const &good) {
+ return std::any_of(Signers.SoonWorthless.begin(), Signers.SoonWorthless.end(), [&](Signer const &weak) {
+ return IsTheSameKey(weak.key, good);
+ });
+ }))
+ {
+ for (auto const & Signer : Signers.SoonWorthless)
+ // TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+ Warning(_("Signature by key %s uses weak digest algorithm (%s)"), Signer.key.c_str(), Signer.note.c_str());
+ }
+
+ if (Signers.Good.empty() || !Signers.Bad.empty() || !Signers.NoPubKey.empty())
+ {
+ string errmsg;
+ // In this case, something bad probably happened, so we just go
+ // with what the other method gave us for an error message.
+ if (Signers.Bad.empty() && Signers.Worthless.empty() && Signers.NoPubKey.empty())
+ errmsg = msg;
+ else
+ {
+ if (!Signers.Bad.empty())
+ {
+ errmsg += _("The following signatures were invalid:\n");
+ for (auto const &I : Signers.Bad)
+ errmsg.append(I).append("\n");
+ }
+ if (!Signers.Worthless.empty())
+ {
+ errmsg += _("The following signatures were invalid:\n");
+ for (auto const &I : Signers.Worthless)
+ errmsg.append(I).append("\n");
+ }
+ if (!Signers.NoPubKey.empty())
+ {
+ errmsg += _("The following signatures couldn't be verified because the public key is not available:\n");
+ for (auto const &I : Signers.NoPubKey)
+ errmsg.append(I).append("\n");
+ }
+ }
+ // this is only fatal if we have no good sigs or if we have at
+ // least one bad signature. good signatures and NoPubKey signatures
+ // happen easily when a file is signed with multiple signatures
+ if (Signers.Good.empty() or !Signers.Bad.empty())
+ return _error->Error("%s", errmsg.c_str());
+ }
+
+ std::unordered_map<std::string, std::string> fields;
+ fields.emplace("URI", Itm->Uri);
+ fields.emplace("Filename", Itm->DestFile);
+ if (Signers.SignedBy.empty() == false)
+ {
+ std::ostringstream out;
+ implodeVector(Signers.SignedBy, out, "\n");
+ fields.emplace("Signed-By", out.str());
+ }
+ {
+ // Just pass the raw output up, because passing it as a real data
+ // structure is too difficult with the method stuff. We keep it
+ // as three separate vectors for future extensibility.
+ std::vector<std::string> gpgvoutput;
+ std::move(Signers.Good.begin(), Signers.Good.end(), std::back_inserter(gpgvoutput));
+ std::move(Signers.Bad.begin(), Signers.Bad.end(), std::back_inserter(gpgvoutput));
+ std::move(Signers.NoPubKey.begin(), Signers.NoPubKey.end(), std::back_inserter(gpgvoutput));
+ if (gpgvoutput.empty() == false)
+ {
+ std::ostringstream out;
+ implodeVector(gpgvoutput, out, "\n");
+ fields.emplace("GPGVOutput", out.str());
+ }
+ }
+ SendMessage("201 URI Done", std::move(fields));
+ Dequeue();
+
+ if (DebugEnabled())
+ std::clog << "apt-key succeeded\n";
+
+ return true;
+}
+
+
+int main()
+{
+ return GPGVMethod().Run();
+}
diff --git a/methods/http.cc b/methods/http.cc
new file mode 100644
index 0000000..d75e9fe
--- /dev/null
+++ b/methods/http.cc
@@ -0,0 +1,1051 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ HTTP Acquire Method - This is the HTTP acquire method for APT.
+
+ It uses HTTP/1.1 and many of the fancy options there-in, such as
+ pipelining, range, if-range and so on.
+
+ It is based on a doubly buffered select loop. A groupe of requests are
+ fed into a single output buffer that is constantly fed out the
+ socket. This provides ideal pipelining as in many cases all of the
+ requests will fit into a single packet. The input socket is buffered
+ the same way and fed into the fd for the file (may be a pipe in future).
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/proxy.h>
+#include <apt-pkg/strutl.h>
+
+#include <chrono>
+#include <cstring>
+#include <iostream>
+#include <sstream>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <signal.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/select.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+#include "config.h"
+#include "connect.h"
+#include "http.h"
+
+#include <apti18n.h>
+ /*}}}*/
+using namespace std;
+
+unsigned long long CircleBuf::BwReadLimit=0;
+unsigned long long CircleBuf::BwTickReadData=0;
+std::chrono::steady_clock::duration CircleBuf::BwReadTick{0};
+const unsigned int CircleBuf::BW_HZ=10;
+
+// CircleBuf::CircleBuf - Circular input buffer /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+CircleBuf::CircleBuf(HttpMethod const * const Owner, unsigned long long Size)
+ : Size(Size), Hash(NULL), TotalWriten(0)
+{
+ Buf = new unsigned char[Size];
+ Reset();
+
+ CircleBuf::BwReadLimit = Owner->ConfigFindI("Dl-Limit", 0) * 1024;
+}
+ /*}}}*/
+// CircleBuf::Reset - Reset to the default state /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void CircleBuf::Reset()
+{
+ InP = 0;
+ OutP = 0;
+ StrPos = 0;
+ TotalWriten = 0;
+ MaxGet = (unsigned long long)-1;
+ OutQueue = string();
+ if (Hash != NULL)
+ {
+ delete Hash;
+ Hash = NULL;
+ }
+}
+ /*}}}*/
+// CircleBuf::Read - Read from a FD into the circular buffer /*{{{*/
+// ---------------------------------------------------------------------
+/* This fills up the buffer with as much data as is in the FD, assuming it
+ is non-blocking.. */
+bool CircleBuf::Read(std::unique_ptr<MethodFd> const &Fd)
+{
+ while (1)
+ {
+ // Woops, buffer is full
+ if (InP - OutP == Size)
+ return true;
+
+ // what's left to read in this tick
+ unsigned long long const BwReadMax = CircleBuf::BwReadLimit/BW_HZ;
+
+ if(CircleBuf::BwReadLimit) {
+ auto const now = std::chrono::steady_clock::now().time_since_epoch();
+ auto const d = now - CircleBuf::BwReadTick;
+
+ auto const tickLen = std::chrono::microseconds(std::chrono::seconds(1)) / BW_HZ;
+ if(d > tickLen) {
+ CircleBuf::BwReadTick = now;
+ CircleBuf::BwTickReadData = 0;
+ }
+
+ if(CircleBuf::BwTickReadData >= BwReadMax) {
+ usleep(tickLen.count());
+ return true;
+ }
+ }
+
+ // Write the buffer segment
+ ssize_t Res;
+ if(CircleBuf::BwReadLimit) {
+ Res = Fd->Read(Buf + (InP % Size),
+ BwReadMax > LeftRead() ? LeftRead() : BwReadMax);
+ } else
+ Res = Fd->Read(Buf + (InP % Size), LeftRead());
+
+ if(Res > 0 && BwReadLimit > 0)
+ CircleBuf::BwTickReadData += Res;
+
+ if (Res == 0)
+ return false;
+ if (Res < 0)
+ {
+ if (errno == EAGAIN)
+ return true;
+ return false;
+ }
+
+ InP += Res;
+ }
+}
+ /*}}}*/
+// CircleBuf::Read - Put the string into the buffer /*{{{*/
+// ---------------------------------------------------------------------
+/* This will hold the string in and fill the buffer with it as it empties */
+bool CircleBuf::Read(string const &Data)
+{
+ OutQueue.append(Data);
+ FillOut();
+ return true;
+}
+ /*}}}*/
+// CircleBuf::FillOut - Fill the buffer from the output queue /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void CircleBuf::FillOut()
+{
+ if (OutQueue.empty() == true)
+ return;
+ while (1)
+ {
+ // Woops, buffer is full
+ if (InP - OutP == Size)
+ return;
+
+ // Write the buffer segment
+ unsigned long long Sz = LeftRead();
+ if (OutQueue.length() - StrPos < Sz)
+ Sz = OutQueue.length() - StrPos;
+ memcpy(Buf + (InP%Size),OutQueue.c_str() + StrPos,Sz);
+
+ // Advance
+ StrPos += Sz;
+ InP += Sz;
+ if (OutQueue.length() == StrPos)
+ {
+ StrPos = 0;
+ OutQueue = "";
+ return;
+ }
+ }
+}
+ /*}}}*/
+// CircleBuf::Write - Write from the buffer into a FD /*{{{*/
+// ---------------------------------------------------------------------
+/* This empties the buffer into the FD. */
+bool CircleBuf::Write(std::unique_ptr<MethodFd> const &Fd)
+{
+ while (1)
+ {
+ FillOut();
+
+ // Woops, buffer is empty
+ if (OutP == InP)
+ return true;
+
+ if (OutP == MaxGet)
+ return true;
+
+ // Write the buffer segment
+ ssize_t Res;
+ Res = Fd->Write(Buf + (OutP % Size), LeftWrite());
+
+ if (Res == 0)
+ return false;
+ if (Res < 0)
+ {
+ if (errno == EAGAIN)
+ return true;
+
+ return false;
+ }
+
+ TotalWriten += Res;
+
+ if (Hash != NULL)
+ Hash->Add(Buf + (OutP%Size),Res);
+
+ OutP += Res;
+ }
+}
+ /*}}}*/
+// CircleBuf::WriteTillEl - Write from the buffer to a string /*{{{*/
+// ---------------------------------------------------------------------
+/* This copies till the first empty line */
+bool CircleBuf::WriteTillEl(string &Data,bool Single)
+{
+ // We cheat and assume it is unneeded to have more than one buffer load
+ for (unsigned long long I = OutP; I < InP; I++)
+ {
+ if (Buf[I%Size] != '\n')
+ continue;
+ ++I;
+
+ if (Single == false)
+ {
+ if (I < InP && Buf[I%Size] == '\r')
+ ++I;
+ if (I >= InP || Buf[I%Size] != '\n')
+ continue;
+ ++I;
+ }
+
+ Data = "";
+ while (OutP < I)
+ {
+ unsigned long long Sz = LeftWrite();
+ if (Sz == 0)
+ return false;
+ if (I - OutP < Sz)
+ Sz = I - OutP;
+ Data += string((char *)(Buf + (OutP%Size)),Sz);
+ OutP += Sz;
+ }
+ return true;
+ }
+ return false;
+}
+ /*}}}*/
+// CircleBuf::Write - Write from the buffer to a string /*{{{*/
+// ---------------------------------------------------------------------
+/* This copies everything */
+bool CircleBuf::Write(string &Data)
+{
+ Data = std::string((char *)Buf + (OutP % Size), LeftWrite());
+ OutP += LeftWrite();
+ return true;
+}
+ /*}}}*/
+CircleBuf::~CircleBuf() /*{{{*/
+{
+ delete [] Buf;
+ delete Hash;
+}
+ /*}}}*/
+
+// UnwrapHTTPConnect - Does the HTTP CONNECT handshake /*{{{*/
+// ---------------------------------------------------------------------
+/* Performs a TLS handshake on the socket */
+struct HttpConnectFd : public MethodFd
+{
+ std::unique_ptr<MethodFd> UnderlyingFd;
+ std::string Buffer;
+
+ int Fd() APT_OVERRIDE { return UnderlyingFd->Fd(); }
+
+ ssize_t Read(void *buf, size_t count) APT_OVERRIDE
+ {
+ if (!Buffer.empty())
+ {
+ auto read = count < Buffer.size() ? count : Buffer.size();
+
+ memcpy(buf, Buffer.data(), read);
+ Buffer.erase(Buffer.begin(), Buffer.begin() + read);
+ return read;
+ }
+
+ return UnderlyingFd->Read(buf, count);
+ }
+ ssize_t Write(void *buf, size_t count) APT_OVERRIDE
+ {
+ return UnderlyingFd->Write(buf, count);
+ }
+
+ int Close() APT_OVERRIDE
+ {
+ return UnderlyingFd->Close();
+ }
+
+ bool HasPending() APT_OVERRIDE
+ {
+ return !Buffer.empty();
+ }
+};
+
+static ResultState UnwrapHTTPConnect(std::string Host, int Port, URI Proxy, std::unique_ptr<MethodFd> &Fd,
+ unsigned long Timeout, aptAuthConfMethod *Owner)
+{
+ Owner->Status(_("Connecting to %s (%s)"), "HTTP proxy", URI::SiteOnly(Proxy).c_str());
+ // The HTTP server expects a hostname with a trailing :port
+ std::stringstream Req;
+ std::string ProperHost;
+
+ if (Host.find(':') != std::string::npos)
+ ProperHost = '[' + Proxy.Host + ']';
+ else
+ ProperHost = Proxy.Host;
+
+ // Build the connect
+ Req << "CONNECT " << Host << ":" << std::to_string(Port) << " HTTP/1.1\r\n";
+ if (Proxy.Port != 0)
+ Req << "Host: " << ProperHost << ":" << std::to_string(Proxy.Port) << "\r\n";
+ else
+ Req << "Host: " << ProperHost << "\r\n";
+
+ Owner->MaybeAddAuthTo(Proxy);
+ if (Proxy.User.empty() == false || Proxy.Password.empty() == false)
+ Req << "Proxy-Authorization: Basic "
+ << Base64Encode(Proxy.User + ":" + Proxy.Password) << "\r\n";
+
+ Req << "User-Agent: " << Owner->ConfigFind("User-Agent", "Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") << "\r\n";
+
+ Req << "\r\n";
+
+ CircleBuf In(dynamic_cast<HttpMethod *>(Owner), 4096);
+ CircleBuf Out(dynamic_cast<HttpMethod *>(Owner), 4096);
+ std::string Headers;
+
+ if (Owner->DebugEnabled() == true)
+ cerr << Req.str() << endl;
+ Out.Read(Req.str());
+
+ // Writing from proxy
+ while (Out.WriteSpace() > 0)
+ {
+ if (WaitFd(Fd->Fd(), true, Timeout) == false)
+ {
+ _error->Errno("select", "Writing to proxy failed");
+ return ResultState::TRANSIENT_ERROR;
+ }
+ if (Out.Write(Fd) == false)
+ {
+ _error->Errno("write", "Writing to proxy failed");
+ return ResultState::TRANSIENT_ERROR;
+ }
+ }
+
+ while (In.ReadSpace() > 0)
+ {
+ if (WaitFd(Fd->Fd(), false, Timeout) == false)
+ {
+ _error->Errno("select", "Reading from proxy failed");
+ return ResultState::TRANSIENT_ERROR;
+ }
+ if (In.Read(Fd) == false)
+ {
+ _error->Errno("read", "Reading from proxy failed");
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ if (In.WriteTillEl(Headers))
+ break;
+ }
+
+ if (Owner->DebugEnabled() == true)
+ cerr << Headers << endl;
+
+ if (!(APT::String::Startswith(Headers, "HTTP/1.0 200") || APT::String::Startswith(Headers, "HTTP/1.1 200")))
+ {
+ _error->Error("Invalid response from proxy: %s", Headers.c_str());
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ if (In.WriteSpace() > 0)
+ {
+ // Maybe there is actual data already read, if so we need to buffer it
+ std::unique_ptr<HttpConnectFd> NewFd(new HttpConnectFd());
+ In.Write(NewFd->Buffer);
+ NewFd->UnderlyingFd = std::move(Fd);
+ Fd = std::move(NewFd);
+ }
+
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+
+// HttpServerState::HttpServerState - Constructor /*{{{*/
+HttpServerState::HttpServerState(URI Srv,HttpMethod *Owner) : ServerState(Srv, Owner), In(Owner, 64*1024), Out(Owner, 4*1024)
+{
+ TimeOut = Owner->ConfigFindI("Timeout", TimeOut);
+ ServerFd = MethodFd::FromFd(-1);
+ Reset();
+}
+ /*}}}*/
+// HttpServerState::Open - Open a connection to the server /*{{{*/
+// ---------------------------------------------------------------------
+/* This opens a connection to the server. */
+ResultState HttpServerState::Open()
+{
+ // Use the already open connection if possible.
+ if (ServerFd->Fd() != -1)
+ return ResultState::SUCCESSFUL;
+
+ Close();
+ In.Reset();
+ Out.Reset();
+ Persistent = true;
+
+ bool tls = (ServerName.Access == "https" || APT::String::Endswith(ServerName.Access, "+https"));
+
+ // Determine the proxy setting
+ // Used to run AutoDetectProxy(ServerName) here, but we now send a Proxy
+ // header in the URI Acquire request and set "Acquire::"+uri.Access+"::proxy::"+uri.Host
+ // to it in BaseHttpMethod::Loop()
+ string SpecificProxy = Owner->ConfigFind("Proxy::" + ServerName.Host, "");
+ if (!SpecificProxy.empty())
+ {
+ if (SpecificProxy == "DIRECT")
+ Proxy = "";
+ else
+ Proxy = SpecificProxy;
+ }
+ else
+ {
+ string DefProxy = Owner->ConfigFind("Proxy", "");
+ if (!DefProxy.empty())
+ {
+ Proxy = DefProxy;
+ }
+ else
+ {
+ char *result = getenv("http_proxy");
+ Proxy = result ? result : "";
+ if (tls == true)
+ {
+ char *result = getenv("https_proxy");
+ if (result != nullptr)
+ {
+ Proxy = result;
+ }
+ }
+ }
+ }
+
+ // Parse no_proxy, a , separated list of domains
+ if (getenv("no_proxy") != 0)
+ {
+ if (CheckDomainList(ServerName.Host,getenv("no_proxy")) == true)
+ Proxy = "";
+ }
+
+ if (Proxy.empty() == false)
+ Owner->AddProxyAuth(Proxy, ServerName);
+
+ auto const DefaultService = tls ? "https" : "http";
+ auto const DefaultPort = tls ? 443 : 80;
+ if (Proxy.Access == "socks5h")
+ {
+ auto result = Connect(Proxy.Host, Proxy.Port, "socks", 1080, ServerFd, TimeOut, Owner);
+ if (result != ResultState::SUCCESSFUL)
+ return result;
+
+ result = UnwrapSocks(ServerName.Host, ServerName.Port == 0 ? DefaultPort : ServerName.Port,
+ Proxy, ServerFd, Owner->ConfigFindI("TimeOut", 30), Owner);
+ if (result != ResultState::SUCCESSFUL)
+ return result;
+ }
+ else
+ {
+ // Determine what host and port to use based on the proxy settings
+ int Port = 0;
+ string Host;
+ if (Proxy.empty() == true || Proxy.Host.empty() == true)
+ {
+ if (ServerName.Port != 0)
+ Port = ServerName.Port;
+ Host = ServerName.Host;
+ }
+ else if (Proxy.Access != "http" && Proxy.Access != "https")
+ {
+ _error->Error("Unsupported proxy configured: %s", URI::SiteOnly(Proxy).c_str());
+ return ResultState::FATAL_ERROR;
+ }
+ else
+ {
+ if (Proxy.Port != 0)
+ Port = Proxy.Port;
+ Host = Proxy.Host;
+
+ if (Proxy.Access == "https" && Port == 0)
+ Port = 443;
+ }
+ auto result = Connect(Host, Port, DefaultService, DefaultPort, ServerFd, TimeOut, Owner);
+ if (result != ResultState::SUCCESSFUL)
+ return result;
+ if (Host == Proxy.Host && Proxy.Access == "https")
+ {
+ result = UnwrapTLS(Proxy.Host, ServerFd, TimeOut, Owner);
+ if (result != ResultState::SUCCESSFUL)
+ return result;
+ }
+ if (Host == Proxy.Host && tls)
+ {
+ result = UnwrapHTTPConnect(ServerName.Host, ServerName.Port == 0 ? DefaultPort : ServerName.Port, Proxy, ServerFd, Owner->ConfigFindI("TimeOut", 30), Owner);
+ if (result != ResultState::SUCCESSFUL)
+ return result;
+ }
+ }
+
+ if (tls)
+ return UnwrapTLS(ServerName.Host, ServerFd, TimeOut, Owner);
+
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+// HttpServerState::Close - Close a connection to the server /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool HttpServerState::Close()
+{
+ ServerFd->Close();
+ return true;
+}
+ /*}}}*/
+// HttpServerState::RunData - Transfer the data from the socket /*{{{*/
+ResultState HttpServerState::RunData(RequestState &Req)
+{
+ Req.State = RequestState::Data;
+
+ // Chunked transfer encoding is fun..
+ if (Req.Encoding == RequestState::Chunked)
+ {
+ while (1)
+ {
+ // Grab the block size
+ ResultState Last = ResultState::SUCCESSFUL;
+ string Data;
+ In.Limit(-1);
+ do
+ {
+ if (In.WriteTillEl(Data,true) == true)
+ break;
+ } while ((Last = Go(false, Req)) == ResultState::SUCCESSFUL);
+
+ if (Last != ResultState::SUCCESSFUL)
+ return Last;
+
+ // See if we are done
+ unsigned long long Len = strtoull(Data.c_str(),0,16);
+ if (Len == 0)
+ {
+ In.Limit(-1);
+
+ // We have to remove the entity trailer
+ Last = ResultState::SUCCESSFUL;
+ do
+ {
+ if (In.WriteTillEl(Data,true) == true && Data.length() <= 2)
+ break;
+ } while ((Last = Go(false, Req)) == ResultState::SUCCESSFUL);
+ return Last;
+ }
+
+ // Transfer the block
+ In.Limit(Len);
+ while (Go(true, Req) == ResultState::SUCCESSFUL)
+ if (In.IsLimit() == true)
+ break;
+
+ // Error
+ if (In.IsLimit() == false)
+ return ResultState::TRANSIENT_ERROR;
+
+ // The server sends an extra new line before the next block specifier..
+ In.Limit(-1);
+ Last = ResultState::SUCCESSFUL;
+ do
+ {
+ if (In.WriteTillEl(Data,true) == true)
+ break;
+ } while ((Last = Go(false, Req)) == ResultState::SUCCESSFUL);
+ if (Last != ResultState::SUCCESSFUL)
+ return Last;
+ }
+ }
+ else
+ {
+ /* Closes encoding is used when the server did not specify a size, the
+ loss of the connection means we are done */
+ if (Req.JunkSize != 0)
+ In.Limit(Req.JunkSize);
+ else if (Req.DownloadSize != 0)
+ {
+ if (Req.MaximumSize != 0 && Req.DownloadSize > Req.MaximumSize)
+ {
+ Owner->SetFailReason("MaximumSizeExceeded");
+ _error->Error(_("File has unexpected size (%llu != %llu). Mirror sync in progress?"),
+ Req.DownloadSize, Req.MaximumSize);
+ return ResultState::FATAL_ERROR;
+ }
+ In.Limit(Req.DownloadSize);
+ }
+ else if (Persistent == false)
+ In.Limit(-1);
+
+ // Just transfer the whole block.
+ while (true)
+ {
+ if (In.IsLimit() == false)
+ {
+ auto const result = Go(true, Req);
+ if (result == ResultState::SUCCESSFUL)
+ continue;
+ return result;
+ }
+
+ In.Limit(-1);
+ return _error->PendingError() ? ResultState::FATAL_ERROR : ResultState::SUCCESSFUL;
+ }
+ }
+
+ if (Flush(&Req.File) == false)
+ return ResultState::TRANSIENT_ERROR;
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+ResultState HttpServerState::RunDataToDevNull(RequestState &Req) /*{{{*/
+{
+ // no need to clean up if we discard the connection anyhow
+ if (Persistent == false)
+ return ResultState::SUCCESSFUL;
+ Req.File.Open("/dev/null", FileFd::WriteOnly);
+ return RunData(Req);
+}
+ /*}}}*/
+bool HttpServerState::ReadHeaderLines(std::string &Data) /*{{{*/
+{
+ return In.WriteTillEl(Data);
+}
+ /*}}}*/
+ResultState HttpServerState::LoadNextResponse(bool const ToFile, RequestState &Req) /*{{{*/
+{
+ return Go(ToFile, Req);
+}
+ /*}}}*/
+bool HttpServerState::WriteResponse(const std::string &Data) /*{{{*/
+{
+ return Out.Read(Data);
+}
+ /*}}}*/
+APT_PURE bool HttpServerState::IsOpen() /*{{{*/
+{
+ return (ServerFd->Fd() != -1);
+}
+ /*}}}*/
+bool HttpServerState::InitHashes(HashStringList const &ExpectedHashes) /*{{{*/
+{
+ delete In.Hash;
+ In.Hash = new Hashes(ExpectedHashes);
+ return true;
+}
+ /*}}}*/
+void HttpServerState::Reset() /*{{{*/
+{
+ ServerState::Reset();
+ ServerFd->Close();
+}
+ /*}}}*/
+
+APT_PURE Hashes * HttpServerState::GetHashes() /*{{{*/
+{
+ return In.Hash;
+}
+ /*}}}*/
+// HttpServerState::Die - The server has closed the connection. /*{{{*/
+ResultState HttpServerState::Die(RequestState &Req)
+{
+ unsigned int LErrno = errno;
+
+ // Dump the buffer to the file
+ if (Req.State == RequestState::Data)
+ {
+ if (Req.File.IsOpen() == false)
+ return ResultState::SUCCESSFUL;
+ // on GNU/kFreeBSD, apt dies on /dev/null because non-blocking
+ // can't be set
+ if (Req.File.Name() != "/dev/null")
+ SetNonBlock(Req.File.Fd(),false);
+ while (In.WriteSpace() == true)
+ {
+ if (In.Write(MethodFd::FromFd(Req.File.Fd())) == false)
+ {
+ _error->Errno("write", _("Error writing to the file"));
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ // Done
+ if (In.IsLimit() == true)
+ return ResultState::SUCCESSFUL;
+ }
+ }
+
+ // See if this is because the server finished the data stream
+ if (In.IsLimit() == false && Req.State != RequestState::Header &&
+ Persistent == true)
+ {
+ Close();
+ if (LErrno == 0)
+ {
+ _error->Error(_("Error reading from server. Remote end closed connection"));
+ return ResultState::TRANSIENT_ERROR;
+ }
+ errno = LErrno;
+ _error->Errno("read", _("Error reading from server"));
+ return ResultState::TRANSIENT_ERROR;
+ }
+ else
+ {
+ In.Limit(-1);
+
+ // Nothing left in the buffer
+ if (In.WriteSpace() == false)
+ return ResultState::TRANSIENT_ERROR;
+
+ // We may have got multiple responses back in one packet..
+ Close();
+ return ResultState::SUCCESSFUL;
+ }
+
+ return ResultState::TRANSIENT_ERROR;
+}
+ /*}}}*/
+// HttpServerState::Flush - Dump the buffer into the file /*{{{*/
+// ---------------------------------------------------------------------
+/* This takes the current input buffer from the Server FD and writes it
+ into the file */
+bool HttpServerState::Flush(FileFd * const File)
+{
+ if (File != nullptr)
+ {
+ // on GNU/kFreeBSD, apt dies on /dev/null because non-blocking
+ // can't be set
+ if (File->Name() != "/dev/null")
+ SetNonBlock(File->Fd(),false);
+ if (In.WriteSpace() == false)
+ return true;
+
+ while (In.WriteSpace() == true)
+ {
+ if (In.Write(MethodFd::FromFd(File->Fd())) == false)
+ return _error->Errno("write",_("Error writing to file"));
+ if (In.IsLimit() == true)
+ return true;
+ }
+
+ if (In.IsLimit() == true || Persistent == false)
+ return true;
+ }
+ return false;
+}
+ /*}}}*/
+// HttpServerState::Go - Run a single loop /*{{{*/
+// ---------------------------------------------------------------------
+/* This runs the select loop over the server FDs, Output file FDs and
+ stdin. */
+ResultState HttpServerState::Go(bool ToFile, RequestState &Req)
+{
+ // Server has closed the connection
+ if (ServerFd->Fd() == -1 && (In.WriteSpace() == false ||
+ ToFile == false))
+ return ResultState::TRANSIENT_ERROR;
+
+ // Handle server IO
+ if (ServerFd->HasPending() && In.ReadSpace() == true)
+ {
+ errno = 0;
+ if (In.Read(ServerFd) == false)
+ return Die(Req);
+ }
+
+ fd_set rfds,wfds;
+ FD_ZERO(&rfds);
+ FD_ZERO(&wfds);
+
+ /* Add the server. We only send more requests if the connection will
+ be persisting */
+ if (Out.WriteSpace() == true && ServerFd->Fd() != -1 && Persistent == true)
+ FD_SET(ServerFd->Fd(), &wfds);
+ if (In.ReadSpace() == true && ServerFd->Fd() != -1)
+ FD_SET(ServerFd->Fd(), &rfds);
+
+ // Add the file
+ auto FileFD = MethodFd::FromFd(-1);
+ if (Req.File.IsOpen())
+ FileFD = MethodFd::FromFd(Req.File.Fd());
+
+ if (In.WriteSpace() == true && ToFile == true && FileFD->Fd() != -1)
+ FD_SET(FileFD->Fd(), &wfds);
+
+ // Add stdin
+ if (Owner->ConfigFindB("DependOnSTDIN", true) == true)
+ FD_SET(STDIN_FILENO,&rfds);
+
+ // Figure out the max fd
+ int MaxFd = FileFD->Fd();
+ if (MaxFd < ServerFd->Fd())
+ MaxFd = ServerFd->Fd();
+
+ // Select
+ struct timeval tv;
+ tv.tv_sec = TimeOut;
+ tv.tv_usec = 0;
+ int Res = 0;
+ if ((Res = select(MaxFd+1,&rfds,&wfds,0,&tv)) < 0)
+ {
+ if (errno == EINTR)
+ return ResultState::SUCCESSFUL;
+ _error->Errno("select", _("Select failed"));
+ return ResultState::TRANSIENT_ERROR;
+ }
+
+ if (Res == 0)
+ {
+ _error->Error(_("Connection timed out"));
+ return Die(Req);
+ }
+
+ // Handle server IO
+ if (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &rfds))
+ {
+ errno = 0;
+ if (In.Read(ServerFd) == false)
+ return Die(Req);
+ }
+
+ if (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &wfds))
+ {
+ errno = 0;
+ if (Out.Write(ServerFd) == false)
+ return Die(Req);
+ }
+
+ // Send data to the file
+ if (FileFD->Fd() != -1 && FD_ISSET(FileFD->Fd(), &wfds))
+ {
+ if (In.Write(FileFD) == false)
+ {
+ _error->Errno("write", _("Error writing to output file"));
+ return ResultState::TRANSIENT_ERROR;
+ }
+ }
+
+ if (Req.MaximumSize > 0 && Req.File.IsOpen() && Req.File.Failed() == false && Req.File.Tell() > Req.MaximumSize)
+ {
+ Owner->SetFailReason("MaximumSizeExceeded");
+ _error->Error(_("File has unexpected size (%llu != %llu). Mirror sync in progress?"),
+ Req.File.Tell(), Req.MaximumSize);
+ return ResultState::FATAL_ERROR;
+ }
+
+ // Handle commands from APT
+ if (FD_ISSET(STDIN_FILENO,&rfds))
+ {
+ if (Owner->Run(true) != -1)
+ exit(100);
+ }
+
+ return ResultState::SUCCESSFUL;
+}
+ /*}}}*/
+
+// HttpMethod::SendReq - Send the HTTP request /*{{{*/
+// ---------------------------------------------------------------------
+/* This places the http request in the outbound buffer */
+void HttpMethod::SendReq(FetchItem *Itm)
+{
+ URI Uri = Itm->Uri;
+ {
+ auto const plus = Binary.find('+');
+ if (plus != std::string::npos)
+ Uri.Access = Binary.substr(plus + 1);
+ }
+
+ // The HTTP server expects a hostname with a trailing :port
+ std::stringstream Req;
+ string ProperHost;
+
+ if (Uri.Host.find(':') != string::npos)
+ ProperHost = '[' + Uri.Host + ']';
+ else
+ ProperHost = Uri.Host;
+
+ /* RFC 2616 §5.1.2 requires absolute URIs for requests to proxies,
+ but while its a must for all servers to accept absolute URIs,
+ it is assumed clients will sent an absolute path for non-proxies */
+ std::string requesturi;
+ if ((Server->Proxy.Access != "http" && Server->Proxy.Access != "https") || APT::String::Endswith(Uri.Access, "https") || Server->Proxy.empty() == true || Server->Proxy.Host.empty())
+ requesturi = Uri.Path;
+ else
+ requesturi = Uri;
+
+ // The "+" is encoded as a workaround for a amazon S3 bug
+ // see LP bugs #1003633 and #1086997.
+ requesturi = QuoteString(requesturi, "+~ ");
+
+ /* Build the request. No keep-alive is included as it is the default
+ in 1.1, can cause problems with proxies, and we are an HTTP/1.1
+ client anyway.
+ C.f. https://tools.ietf.org/wg/httpbis/trac/ticket/158 */
+ Req << "GET " << requesturi << " HTTP/1.1\r\n";
+ if (Uri.Port != 0)
+ Req << "Host: " << ProperHost << ":" << std::to_string(Uri.Port) << "\r\n";
+ else
+ Req << "Host: " << ProperHost << "\r\n";
+
+ // generate a cache control header (if needed)
+ if (ConfigFindB("No-Cache",false) == true)
+ Req << "Cache-Control: no-cache\r\n"
+ << "Pragma: no-cache\r\n";
+ else if (Itm->IndexFile == true)
+ Req << "Cache-Control: max-age=" << std::to_string(ConfigFindI("Max-Age", 0)) << "\r\n";
+ else if (ConfigFindB("No-Store", false) == true)
+ Req << "Cache-Control: no-store\r\n";
+
+ // If we ask for uncompressed files servers might respond with content-
+ // negotiation which lets us end up with compressed files we do not support,
+ // see 657029, 657560 and co, so if we have no extension on the request
+ // ask for text only. As a sidenote: If there is nothing to negotate servers
+ // seem to be nice and ignore it.
+ if (ConfigFindB("SendAccept", true) == true)
+ {
+ size_t const filepos = Itm->Uri.find_last_of('/');
+ string const file = Itm->Uri.substr(filepos + 1);
+ if (flExtension(file) == file)
+ Req << "Accept: text/*\r\n";
+ }
+
+ // Check for a partial file and send if-queries accordingly
+ struct stat SBuf;
+ if (Server->RangesAllowed && stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
+ Req << "Range: bytes=" << std::to_string(SBuf.st_size) << "-\r\n"
+ << "If-Range: " << TimeRFC1123(SBuf.st_mtime, false) << "\r\n";
+ else if (Itm->LastModified != 0)
+ Req << "If-Modified-Since: " << TimeRFC1123(Itm->LastModified, false).c_str() << "\r\n";
+
+ if ((Server->Proxy.Access == "http" || Server->Proxy.Access == "https") &&
+ (Server->Proxy.User.empty() == false || Server->Proxy.Password.empty() == false))
+ Req << "Proxy-Authorization: Basic "
+ << Base64Encode(Server->Proxy.User + ":" + Server->Proxy.Password) << "\r\n";
+
+ MaybeAddAuthTo(Uri);
+ if (Uri.User.empty() == false || Uri.Password.empty() == false)
+ Req << "Authorization: Basic "
+ << Base64Encode(Uri.User + ":" + Uri.Password) << "\r\n";
+
+ Req << "User-Agent: " << ConfigFind("User-Agent",
+ "Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") << "\r\n";
+
+ auto const referer = ConfigFind("Referer", "");
+ if (referer.empty() == false)
+ Req << "Referer: " << referer << "\r\n";
+
+ Req << "\r\n";
+
+ if (Debug == true)
+ cerr << Req.str() << endl;
+
+ Server->WriteResponse(Req.str());
+}
+ /*}}}*/
+std::unique_ptr<ServerState> HttpMethod::CreateServerState(URI const &uri)/*{{{*/
+{
+ return std::unique_ptr<ServerState>(new HttpServerState(uri, this));
+}
+ /*}}}*/
+void HttpMethod::RotateDNS() /*{{{*/
+{
+ ::RotateDNS();
+}
+ /*}}}*/
+BaseHttpMethod::DealWithHeadersResult HttpMethod::DealWithHeaders(FetchResult &Res, RequestState &Req)/*{{{*/
+{
+ auto ret = BaseHttpMethod::DealWithHeaders(Res, Req);
+ if (ret != BaseHttpMethod::FILE_IS_OPEN)
+ return ret;
+ if (Req.File.Open(Queue->DestFile, FileFd::WriteAny) == false)
+ return ERROR_NOT_FROM_SERVER;
+
+ FailFile = Queue->DestFile;
+ FailFile.c_str(); // Make sure we don't do a malloc in the signal handler
+ FailFd = Req.File.Fd();
+ FailTime = Req.Date;
+
+ if (Server->InitHashes(Queue->ExpectedHashes) == false || Req.AddPartialFileToHashes(Req.File) == false)
+ {
+ _error->Errno("read",_("Problem hashing file"));
+ return ERROR_NOT_FROM_SERVER;
+ }
+ if (Req.StartPos > 0)
+ Res.ResumePoint = Req.StartPos;
+
+ SetNonBlock(Req.File.Fd(),true);
+ return FILE_IS_OPEN;
+}
+ /*}}}*/
+HttpMethod::HttpMethod(std::string &&pProg) : BaseHttpMethod(std::move(pProg), "1.2", Pipeline | SendConfig) /*{{{*/
+{
+ SeccompFlags = aptMethod::BASE | aptMethod::NETWORK;
+
+ auto addName = std::inserter(methodNames, methodNames.begin());
+ if (Binary != "http")
+ addName = "http";
+ auto const plus = Binary.find('+');
+ if (plus != std::string::npos)
+ {
+ auto name2 = Binary.substr(plus + 1);
+ if (std::find(methodNames.begin(), methodNames.end(), name2) == methodNames.end())
+ addName = std::move(name2);
+ addName = Binary.substr(0, plus);
+ }
+}
+ /*}}}*/
+
+int main(int, const char *argv[])
+{
+ // ignore SIGPIPE, this can happen on write() if the socket
+ // closes the connection (this is dealt with via ServerDie())
+ signal(SIGPIPE, SIG_IGN);
+ std::string Binary = flNotDir(argv[0]);
+ if (Binary.find('+') == std::string::npos && Binary != "https" && Binary != "http")
+ Binary.append("+http");
+ return HttpMethod(std::move(Binary)).Loop();
+}
diff --git a/methods/http.h b/methods/http.h
new file mode 100644
index 0000000..5668f0b
--- /dev/null
+++ b/methods/http.h
@@ -0,0 +1,142 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ HTTP Acquire Method - This is the HTTP acquire method for APT.
+
+ ##################################################################### */
+ /*}}}*/
+
+#ifndef APT_HTTP_H
+#define APT_HTTP_H
+
+#include <apt-pkg/strutl.h>
+
+#include <chrono>
+#include <iostream>
+#include <memory>
+#include <string>
+#include <sys/time.h>
+
+#include "basehttp.h"
+#include "connect.h"
+
+using std::cout;
+using std::endl;
+
+class FileFd;
+class HttpMethod;
+class Hashes;
+
+class CircleBuf
+{
+ unsigned char *Buf;
+ unsigned long long Size;
+ unsigned long long InP;
+ unsigned long long OutP;
+ std::string OutQueue;
+ unsigned long long StrPos;
+ unsigned long long MaxGet;
+
+ static unsigned long long BwReadLimit;
+ static unsigned long long BwTickReadData;
+ static std::chrono::steady_clock::duration BwReadTick;
+ static const unsigned int BW_HZ;
+
+ unsigned long long LeftRead() const
+ {
+ unsigned long long Sz = Size - (InP - OutP);
+ if (Sz > Size - (InP%Size))
+ Sz = Size - (InP%Size);
+ return Sz;
+ }
+ unsigned long long LeftWrite() const
+ {
+ unsigned long long Sz = InP - OutP;
+ if (InP > MaxGet)
+ Sz = MaxGet - OutP;
+ if (Sz > Size - (OutP%Size))
+ Sz = Size - (OutP%Size);
+ return Sz;
+ }
+ void FillOut();
+
+ public:
+ Hashes *Hash;
+ // total amount of data that got written so far
+ unsigned long long TotalWriten;
+
+ // Read data in
+ bool Read(std::unique_ptr<MethodFd> const &Fd);
+ bool Read(std::string const &Data);
+
+ // Write data out
+ bool Write(std::unique_ptr<MethodFd> const &Fd);
+ bool Write(std::string &Data);
+ bool WriteTillEl(std::string &Data,bool Single = false);
+
+ // Control the write limit
+ void Limit(long long Max) {if (Max == -1) MaxGet = 0-1; else MaxGet = OutP + Max;}
+ bool IsLimit() const {return MaxGet == OutP;};
+ void Print() const {cout << MaxGet << ',' << OutP << endl;};
+
+ // Test for free space in the buffer
+ bool ReadSpace() const {return Size - (InP - OutP) > 0;};
+ bool WriteSpace() const {return InP - OutP > 0;};
+
+ void Reset();
+
+ CircleBuf(HttpMethod const * const Owner, unsigned long long Size);
+ ~CircleBuf();
+};
+
+struct HttpServerState: public ServerState
+{
+ // This is the connection itself. Output is data FROM the server
+ CircleBuf In;
+ CircleBuf Out;
+ std::unique_ptr<MethodFd> ServerFd;
+
+ protected:
+ virtual bool ReadHeaderLines(std::string &Data) APT_OVERRIDE;
+ virtual ResultState LoadNextResponse(bool const ToFile, RequestState &Req) APT_OVERRIDE;
+ virtual bool WriteResponse(std::string const &Data) APT_OVERRIDE;
+
+ public:
+ virtual void Reset() APT_OVERRIDE;
+
+ virtual ResultState RunData(RequestState &Req) APT_OVERRIDE;
+ virtual ResultState RunDataToDevNull(RequestState &Req) APT_OVERRIDE;
+
+ virtual ResultState Open() APT_OVERRIDE;
+ virtual bool IsOpen() APT_OVERRIDE;
+ virtual bool Close() APT_OVERRIDE;
+ virtual bool InitHashes(HashStringList const &ExpectedHashes) APT_OVERRIDE;
+ virtual Hashes * GetHashes() APT_OVERRIDE;
+ virtual ResultState Die(RequestState &Req) APT_OVERRIDE;
+ virtual bool Flush(FileFd * const File) APT_OVERRIDE;
+ virtual ResultState Go(bool ToFile, RequestState &Req) APT_OVERRIDE;
+
+ HttpServerState(URI Srv, HttpMethod *Owner);
+ virtual ~HttpServerState() {Close();};
+};
+
+class HttpMethod : public BaseHttpMethod
+{
+ public:
+ virtual void SendReq(FetchItem *Itm) APT_OVERRIDE;
+
+ virtual std::unique_ptr<ServerState> CreateServerState(URI const &uri) APT_OVERRIDE;
+ virtual void RotateDNS() APT_OVERRIDE;
+ virtual DealWithHeadersResult DealWithHeaders(FetchResult &Res, RequestState &Req) APT_OVERRIDE;
+
+ protected:
+ std::string AutoDetectProxyCmd;
+
+ public:
+ friend struct HttpServerState;
+
+ explicit HttpMethod(std::string &&pProg);
+};
+
+#endif
diff --git a/methods/mirror.cc b/methods/mirror.cc
new file mode 100644
index 0000000..add9f08
--- /dev/null
+++ b/methods/mirror.cc
@@ -0,0 +1,406 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Mirror URI – This method helps avoiding hardcoding of mirrors in the
+ sources.lists by looking up a list of mirrors first to which the
+ following requests are redirected.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include "aptmethod.h"
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/metaindex.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/strutl.h>
+
+#include <functional>
+#include <random>
+#include <string>
+#include <unordered_map>
+
+#include <sys/utsname.h>
+
+#include <apti18n.h>
+ /*}}}*/
+constexpr char const *const disallowLocal[] = {"ftp", "http", "https"};
+
+static void sortByLength(std::vector<std::string> &vec) /*{{{*/
+{
+ // this ensures having mirror://foo/ and mirror://foo/bar/ works as expected
+ // by checking for the longest matches first
+ std::sort(vec.begin(), vec.end(), [](std::string const &a, std::string const &b) {
+ return a.length() > b.length();
+ });
+}
+ /*}}}*/
+class MirrorMethod : public aptMethod /*{{{*/
+{
+ std::mt19937 genrng;
+ std::vector<std::string> sourceslist;
+ std::unordered_map<std::string, std::string> msgCache;
+ enum MirrorFileState
+ {
+ REQUESTED,
+ FAILED,
+ AVAILABLE
+ };
+ struct MirrorInfo
+ {
+ std::string uri;
+ unsigned long priority = std::numeric_limits<decltype(priority)>::max();
+ decltype(genrng)::result_type seed = 0;
+ std::unordered_map<std::string, std::vector<std::string>> tags;
+ MirrorInfo(std::string const &u, std::vector<std::string> &&ptags = {}) : uri(u)
+ {
+ for (auto &&tag : ptags)
+ {
+ auto const colonfound = tag.find(':');
+ if (unlikely(colonfound == std::string::npos))
+ continue;
+ auto name = tag.substr(0, colonfound);
+ auto value = tag.substr(colonfound + 1);
+ if (name == "arch")
+ tags["Architecture"].emplace_back(std::move(value));
+ else if (name == "lang")
+ tags["Language"].emplace_back(std::move(value));
+ else if (name == "priority")
+ priority = std::strtoul(value.c_str(), nullptr, 10);
+ else if (likely(name.empty() == false))
+ {
+ if (name == "codename" || name == "suite")
+ tags["Release"].push_back(value);
+ name[0] = std::toupper(name[0]);
+ tags[std::move(name)].emplace_back(std::move(value));
+ }
+ }
+ }
+ };
+ struct MirrorListInfo
+ {
+ MirrorFileState state;
+ std::string baseuri;
+ std::vector<MirrorInfo> list;
+ };
+ std::unordered_map<std::string, MirrorListInfo> mirrorfilestate;
+
+ virtual bool URIAcquire(std::string const &Message, FetchItem *Itm) APT_OVERRIDE;
+
+ void RedirectItem(MirrorListInfo const &info, FetchItem *const Itm, std::string const &Message);
+ bool MirrorListFileRecieved(MirrorListInfo &info, FetchItem *const Itm);
+ std::string GetMirrorFileURI(std::string const &Message, FetchItem *const Itm);
+ void DealWithPendingItems(std::vector<std::string> const &baseuris, MirrorListInfo const &info, FetchItem *const Itm, std::function<void()> handler);
+
+ public:
+ MirrorMethod(std::string &&pProg) : aptMethod(std::move(pProg), "2.0", SingleInstance | Pipeline | SendConfig | AuxRequests), genrng(clock())
+ {
+ SeccompFlags = aptMethod::BASE | aptMethod::DIRECTORY;
+ }
+};
+ /*}}}*/
+void MirrorMethod::RedirectItem(MirrorListInfo const &info, FetchItem *const Itm, std::string const &Message) /*{{{*/
+{
+ std::unordered_map<std::string, std::string> matchers;
+ matchers.emplace("Architecture", LookupTag(Message, "Target-Architecture"));
+ matchers.emplace("Codename", LookupTag(Message, "Target-Codename"));
+ matchers.emplace("Component", LookupTag(Message, "Target-Component"));
+ matchers.emplace("Language", LookupTag(Message, "Target-Language"));
+ matchers.emplace("Release", LookupTag(Message, "Target-Release"));
+ matchers.emplace("Suite", LookupTag(Message, "Target-Suite"));
+ matchers.emplace("Type", LookupTag(Message, "Target-Type"));
+ decltype(info.list) possMirrors;
+ for (auto const &mirror : info.list)
+ {
+ bool failedMatch = false;
+ for (auto const &m : matchers)
+ {
+ if (m.second.empty())
+ continue;
+ auto const tagsetiter = mirror.tags.find(m.first);
+ if (tagsetiter == mirror.tags.end())
+ continue;
+ auto const tagset = tagsetiter->second;
+ if (tagset.empty() == false && std::find(tagset.begin(), tagset.end(), m.second) == tagset.end())
+ {
+ failedMatch = true;
+ break;
+ }
+ }
+ if (failedMatch)
+ continue;
+ possMirrors.push_back(mirror);
+ }
+ for (auto &&mirror : possMirrors)
+ mirror.seed = genrng();
+ std::sort(possMirrors.begin(), possMirrors.end(), [](MirrorInfo const &a, MirrorInfo const &b) {
+ if (a.priority != b.priority)
+ return a.priority < b.priority;
+ return a.seed < b.seed;
+ });
+ std::string const path = Itm->Uri.substr(info.baseuri.length());
+ std::string altMirrors;
+ std::unordered_map<std::string, std::string> fields;
+ fields.emplace("URI", Queue->Uri);
+ for (auto curMirror = possMirrors.cbegin(); curMirror != possMirrors.cend(); ++curMirror)
+ {
+ std::string mirror = curMirror->uri;
+ if (APT::String::Endswith(mirror, "/") == false)
+ mirror.append("/");
+ mirror.append(path);
+ if (curMirror == possMirrors.cbegin())
+ fields.emplace("New-URI", mirror);
+ else if (altMirrors.empty())
+ altMirrors.append(mirror);
+ else
+ altMirrors.append("\n").append(mirror);
+ }
+ fields.emplace("Alternate-URIs", altMirrors);
+ SendMessage("103 Redirect", std::move(fields));
+ Dequeue();
+}
+ /*}}}*/
+void MirrorMethod::DealWithPendingItems(std::vector<std::string> const &baseuris, /*{{{*/
+ MirrorListInfo const &info, FetchItem *const Itm,
+ std::function<void()> handler)
+{
+ FetchItem **LastItm = &Itm->Next;
+ while (*LastItm != nullptr)
+ LastItm = &((*LastItm)->Next);
+ while (Queue != Itm)
+ {
+ if (APT::String::Startswith(Queue->Uri, info.baseuri) == false ||
+ std::any_of(baseuris.cbegin(), baseuris.cend(), [&](std::string const &b) { return APT::String::Startswith(Queue->Uri, b); }))
+ {
+ // move the item behind the aux file not related to it
+ *LastItm = Queue;
+ Queue = QueueBack = Queue->Next;
+ (*LastItm)->Next = nullptr;
+ LastItm = &((*LastItm)->Next);
+ }
+ else
+ {
+ handler();
+ }
+ }
+ // now remove out trigger
+ QueueBack = Queue = Queue->Next;
+ delete Itm;
+}
+ /*}}}*/
+bool MirrorMethod::MirrorListFileRecieved(MirrorListInfo &info, FetchItem *const Itm) /*{{{*/
+{
+ std::vector<std::string> baseuris;
+ for (auto const &i : mirrorfilestate)
+ if (info.baseuri.length() < i.second.baseuri.length() &&
+ i.second.state == REQUESTED &&
+ APT::String::Startswith(i.second.baseuri, info.baseuri))
+ baseuris.push_back(i.second.baseuri);
+ sortByLength(baseuris);
+
+ FileFd mirrorlist;
+ if (FileExists(Itm->DestFile) && mirrorlist.Open(Itm->DestFile, FileFd::ReadOnly, FileFd::Extension))
+ {
+ auto const accessColon = info.baseuri.find(':');
+ auto access = info.baseuri.substr(0, accessColon);
+ std::string prefixAccess;
+ if (APT::String::Startswith(access, "mirror") == false)
+ {
+ auto const plus = info.baseuri.find('+');
+ prefixAccess = info.baseuri.substr(0, plus);
+ access.erase(0, plus + 1);
+ }
+ std::vector<std::string> limitAccess;
+ // If the mirror file comes from an online source, allow only other online
+ // sources, not e.g. file:///. If the mirrorlist comes from there we can assume
+ // the admin knows what (s)he is doing through and not limit the options.
+ if (std::any_of(std::begin(disallowLocal), std::end(disallowLocal),
+ [&access](char const *const a) { return APT::String::Endswith(access, std::string("+") + a); }) ||
+ access == "mirror")
+ {
+ for (auto const &a : disallowLocal)
+ limitAccess.emplace_back(a);
+ }
+ std::string line;
+ while (mirrorlist.ReadLine(line))
+ {
+ if (line.empty() || line[0] == '#')
+ continue;
+ auto const access = line.substr(0, line.find(':'));
+ if (limitAccess.empty() == false && std::find(limitAccess.begin(), limitAccess.end(), access) == limitAccess.end())
+ continue;
+ auto const tab = line.find('\t');
+ if (tab == std::string::npos)
+ {
+ if (prefixAccess.empty())
+ info.list.emplace_back(std::move(line));
+ else
+ info.list.emplace_back(prefixAccess + '+' + line);
+ }
+ else
+ {
+ auto uri = line.substr(0, tab);
+ if (prefixAccess.empty() == false)
+ uri = prefixAccess + '+' + uri;
+ auto tagline = line.substr(tab + 1);
+ std::replace_if(tagline.begin(), tagline.end(), isspace_ascii, ' ');
+ auto tags = VectorizeString(tagline, ' ');
+ tags.erase(std::remove_if(tags.begin(), tags.end(), [](std::string const &a) { return a.empty(); }), tags.end());
+ info.list.emplace_back(std::move(uri), std::move(tags));
+ }
+ }
+ mirrorlist.Close();
+
+ if (info.list.empty())
+ {
+ info.state = FAILED;
+ DealWithPendingItems(baseuris, info, Itm, [&]() {
+ std::string msg;
+ strprintf(msg, "Mirror list %s is empty for %s", Itm->DestFile.c_str(), Queue->Uri.c_str());
+ Fail(msg, false);
+ });
+ }
+ else
+ {
+ info.state = AVAILABLE;
+ DealWithPendingItems(baseuris, info, Itm, [&]() {
+ RedirectItem(info, Queue, msgCache[Queue->Uri]);
+ });
+ msgCache.clear();
+ }
+ }
+ else
+ {
+ info.state = FAILED;
+ DealWithPendingItems(baseuris, info, Itm, [&]() {
+ std::string msg;
+ strprintf(msg, "Downloading mirror file %s failed for %s", Itm->DestFile.c_str(), Queue->Uri.c_str());
+ Fail(msg, false);
+ });
+ }
+ return true;
+}
+ /*}}}*/
+std::string MirrorMethod::GetMirrorFileURI(std::string const &Message, FetchItem *const Itm) /*{{{*/
+{
+ if (APT::String::Startswith(Itm->Uri, Binary))
+ {
+ std::string const repouri = LookupTag(Message, "Target-Repo-Uri");
+ if (repouri.empty() == false && std::find(sourceslist.cbegin(), sourceslist.cend(), repouri) == sourceslist.cend())
+ sourceslist.push_back(repouri);
+ }
+ if (sourceslist.empty())
+ {
+ // read sources.list and find the matching base uri
+ pkgSourceList sl;
+ if (sl.ReadMainList() == false)
+ {
+ _error->Error(_("The list of sources could not be read."));
+ return "";
+ }
+ std::string const needle = Binary + ":";
+ for (auto const &SL : sl)
+ {
+ std::string uristr = SL->GetURI();
+ if (APT::String::Startswith(uristr, needle))
+ sourceslist.push_back(uristr);
+ }
+ sortByLength(sourceslist);
+ }
+ for (auto uristr : sourceslist)
+ {
+ if (APT::String::Startswith(Itm->Uri, uristr))
+ {
+ uristr.erase(uristr.length() - 1); // remove the ending '/'
+ auto const colon = uristr.find(':');
+ if (unlikely(colon == std::string::npos))
+ continue;
+ auto const plus = uristr.find("+");
+ if (plus < colon)
+ {
+ // started as tor+mirror+http we want to get the file via tor+http
+ auto access = uristr.substr(0, colon);
+ std::string prefixAccess;
+ if (APT::String::Startswith(access, "mirror") == false)
+ {
+ prefixAccess = uristr.substr(0, plus);
+ access.erase(0, plus + 1);
+ uristr.erase(plus, strlen("mirror") + 1);
+ return uristr;
+ }
+ else
+ return uristr.substr(plus + 1);
+ }
+ else
+ {
+ uristr.replace(0, strlen("mirror"), "http");
+ return uristr;
+ }
+ }
+ }
+ return "";
+}
+ /*}}}*/
+bool MirrorMethod::URIAcquire(std::string const &Message, FetchItem *Itm) /*{{{*/
+{
+ auto mirrorinfo = mirrorfilestate.find(Itm->Uri);
+ if (mirrorinfo != mirrorfilestate.end())
+ return MirrorListFileRecieved(mirrorinfo->second, Itm);
+
+ std::string const mirrorfileuri = GetMirrorFileURI(Message, Itm);
+ if (mirrorfileuri.empty())
+ {
+ _error->Error("Couldn't determine mirror list to query for %s", Itm->Uri.c_str());
+ return false;
+ }
+ if (DebugEnabled())
+ std::clog << "Mirror-URI: " << mirrorfileuri << " for " << Itm->Uri << std::endl;
+
+ // have we requested this mirror file already?
+ auto const state = mirrorfilestate.find(mirrorfileuri);
+ if (state == mirrorfilestate.end())
+ {
+ msgCache[Itm->Uri] = Message;
+ MirrorListInfo info;
+ info.state = REQUESTED;
+ info.baseuri = mirrorfileuri + '/';
+ auto const colon = info.baseuri.find(':');
+ if (unlikely(colon == std::string::npos))
+ return false;
+ info.baseuri.replace(0, colon, Binary);
+ mirrorfilestate[mirrorfileuri] = info;
+ std::unordered_map<std::string, std::string> fields;
+ fields.emplace("URI", Itm->Uri);
+ fields.emplace("MaximumSize", std::to_string(1 * 1024 * 1024)); //FIXME: 1 MB is enough for everyone
+ fields.emplace("Aux-ShortDesc", "Mirrorlist");
+ fields.emplace("Aux-Description", mirrorfileuri + " Mirrorlist");
+ fields.emplace("Aux-Uri", mirrorfileuri);
+ SendMessage("351 Aux Request", std::move(fields));
+ return true;
+ }
+
+ switch (state->second.state)
+ {
+ case REQUESTED:
+ // lets wait for the requested mirror file
+ msgCache[Itm->Uri] = Message;
+ return true;
+ case FAILED:
+ Fail("Downloading mirror file failed", false);
+ return true;
+ case AVAILABLE:
+ RedirectItem(state->second, Itm, Message);
+ return true;
+ }
+ return false;
+}
+ /*}}}*/
+
+int main(int, const char *argv[])
+{
+ return MirrorMethod(flNotDir(argv[0])).Run();
+}
diff --git a/methods/rfc2553emu.cc b/methods/rfc2553emu.cc
new file mode 100644
index 0000000..72b3fc4
--- /dev/null
+++ b/methods/rfc2553emu.cc
@@ -0,0 +1,244 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ RFC 2553 Emulation - Provides emulation for RFC 2553 getaddrinfo,
+ freeaddrinfo and getnameinfo
+
+ This is really C code, it just has a .cc extensions to play nicer with
+ the rest of APT.
+
+ Originally written by Jason Gunthorpe <jgg@debian.org> and placed into
+ the Public Domain, do with it what you will.
+
+ ##################################################################### */
+ /*}}}*/
+#include <config.h>
+
+#include "rfc2553emu.h"
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef HAVE_GETADDRINFO
+// getaddrinfo - Resolve a hostname /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+int getaddrinfo(const char *nodename, const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res)
+{
+ struct addrinfo **Result = res;
+ hostent *Addr;
+ unsigned int Port;
+ int Proto;
+ const char *End;
+ char **CurAddr;
+
+ // Try to convert the service as a number
+ Port = htons(strtol(servname,(char **)&End,0));
+ Proto = SOCK_STREAM;
+
+ if (hints != 0 && hints->ai_socktype != 0)
+ Proto = hints->ai_socktype;
+
+ // Not a number, must be a name.
+ if (End != servname + strlen(servname))
+ {
+ struct servent *Srv = 0;
+
+ // Do a lookup in the service database
+ if (hints == 0 || hints->ai_socktype == SOCK_STREAM)
+ Srv = getservbyname(servname,"tcp");
+ if (hints != 0 && hints->ai_socktype == SOCK_DGRAM)
+ Srv = getservbyname(servname,"udp");
+ if (Srv == 0)
+ return EAI_NONAME;
+
+ // Get the right protocol
+ Port = Srv->s_port;
+ if (strcmp(Srv->s_proto,"tcp") == 0)
+ Proto = SOCK_STREAM;
+ else
+ {
+ if (strcmp(Srv->s_proto,"udp") == 0)
+ Proto = SOCK_DGRAM;
+ else
+ return EAI_NONAME;
+ }
+
+ if (hints != 0 && hints->ai_socktype != Proto &&
+ hints->ai_socktype != 0)
+ return EAI_SERVICE;
+ }
+
+ // Hostname lookup, only if this is not a listening socket
+ if (hints != 0 && (hints->ai_flags & AI_PASSIVE) != AI_PASSIVE)
+ {
+ Addr = gethostbyname(nodename);
+ if (Addr == 0)
+ {
+ if (h_errno == TRY_AGAIN)
+ return EAI_AGAIN;
+ if (h_errno == NO_RECOVERY)
+ return EAI_FAIL;
+ return EAI_NONAME;
+ }
+
+ // No A records
+ if (Addr->h_addr_list[0] == 0)
+ return EAI_NONAME;
+
+ CurAddr = Addr->h_addr_list;
+ }
+ else
+ CurAddr = (char **)&End; // Fake!
+
+ // Start constructing the linked list
+ *res = 0;
+ for (; *CurAddr != 0; CurAddr++)
+ {
+ // New result structure
+ *Result = (struct addrinfo *)calloc(sizeof(**Result),1);
+ if (*Result == 0)
+ {
+ freeaddrinfo(*res);
+ return EAI_MEMORY;
+ }
+ if (*res == 0)
+ *res = *Result;
+
+ (*Result)->ai_family = AF_INET;
+ (*Result)->ai_socktype = Proto;
+
+ // If we have the IPPROTO defines we can set the protocol field
+ #ifdef IPPROTO_TCP
+ if (Proto == SOCK_STREAM)
+ (*Result)->ai_protocol = IPPROTO_TCP;
+ if (Proto == SOCK_DGRAM)
+ (*Result)->ai_protocol = IPPROTO_UDP;
+ #endif
+
+ // Allocate space for the address
+ (*Result)->ai_addrlen = sizeof(struct sockaddr_in);
+ (*Result)->ai_addr = (struct sockaddr *)calloc(sizeof(sockaddr_in),1);
+ if ((*Result)->ai_addr == 0)
+ {
+ freeaddrinfo(*res);
+ return EAI_MEMORY;
+ }
+
+ // Set the address
+ ((struct sockaddr_in *)(*Result)->ai_addr)->sin_family = AF_INET;
+ ((struct sockaddr_in *)(*Result)->ai_addr)->sin_port = Port;
+
+ if (hints != 0 && (hints->ai_flags & AI_PASSIVE) != AI_PASSIVE)
+ ((struct sockaddr_in *)(*Result)->ai_addr)->sin_addr = *(in_addr *)(*CurAddr);
+ else
+ {
+ // Already zerod by calloc.
+ break;
+ }
+
+ Result = &(*Result)->ai_next;
+ }
+
+ return 0;
+}
+ /*}}}*/
+// freeaddrinfo - Free the result of getaddrinfo /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void freeaddrinfo(struct addrinfo *ai)
+{
+ while (ai != 0)
+ {
+ free(ai->ai_addr);
+ ai = ai->ai_next;
+ free(ai);
+ }
+}
+ /*}}}*/
+#endif // HAVE_GETADDRINFO
+
+#ifndef HAVE_GETNAMEINFO
+// getnameinfo - Convert a sockaddr to a string /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+int getnameinfo(const struct sockaddr *sa, socklen_t salen,
+ char *host, size_t hostlen,
+ char *serv, size_t servlen,
+ int flags)
+{
+ struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+
+ // This routine only supports internet addresses
+ if (sa->sa_family != AF_INET)
+ return EAI_ADDRFAMILY;
+
+ if (host != 0)
+ {
+ // Try to resolve the hostname
+ if ((flags & NI_NUMERICHOST) != NI_NUMERICHOST)
+ {
+ struct hostent *Ent = gethostbyaddr((char *)&sin->sin_addr,sizeof(sin->sin_addr),
+ AF_INET);
+ if (Ent != 0)
+ strncpy(host,Ent->h_name,hostlen);
+ else
+ {
+ if ((flags & NI_NAMEREQD) == NI_NAMEREQD)
+ {
+ if (h_errno == TRY_AGAIN)
+ return EAI_AGAIN;
+ if (h_errno == NO_RECOVERY)
+ return EAI_FAIL;
+ return EAI_NONAME;
+ }
+
+ flags |= NI_NUMERICHOST;
+ }
+ }
+
+ // Resolve as a plain numberic
+ if ((flags & NI_NUMERICHOST) == NI_NUMERICHOST)
+ {
+ strncpy(host,inet_ntoa(sin->sin_addr),hostlen);
+ }
+ }
+
+ if (serv != 0)
+ {
+ // Try to resolve the hostname
+ if ((flags & NI_NUMERICSERV) != NI_NUMERICSERV)
+ {
+ struct servent *Ent;
+ if ((flags & NI_DATAGRAM) == NI_DATAGRAM)
+ Ent = getservbyport(ntohs(sin->sin_port),"udp");
+ else
+ Ent = getservbyport(ntohs(sin->sin_port),"tcp");
+
+ if (Ent != 0)
+ strncpy(serv,Ent->s_name,servlen);
+ else
+ {
+ if ((flags & NI_NAMEREQD) == NI_NAMEREQD)
+ return EAI_NONAME;
+
+ flags |= NI_NUMERICSERV;
+ }
+ }
+
+ // Resolve as a plain numberic
+ if ((flags & NI_NUMERICSERV) == NI_NUMERICSERV)
+ {
+ snprintf(serv,servlen,"%u",ntohs(sin->sin_port));
+ }
+ }
+
+ return 0;
+}
+ /*}}}*/
+#endif // HAVE_GETNAMEINFO
diff --git a/methods/rfc2553emu.h b/methods/rfc2553emu.h
new file mode 100644
index 0000000..65d744d
--- /dev/null
+++ b/methods/rfc2553emu.h
@@ -0,0 +1,112 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ RFC 2553 Emulation - Provides emulation for RFC 2553 getaddrinfo,
+ freeaddrinfo and getnameinfo
+
+ These functions are necessary to write portable protocol independent
+ networking. They transparently support IPv4, IPv6 and probably many
+ other protocols too. This implementation is needed when the host does
+ not support these standards. It implements a simple wrapper that
+ basically supports only IPv4.
+
+ Perfect emulation is not provided, but it is passable..
+
+ Originally written by Jason Gunthorpe <jgg@debian.org> and placed into
+ the Public Domain, do with it what you will.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef RFC2553EMU_H
+#define RFC2553EMU_H
+
+#include <netdb.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+
+// Autosense getaddrinfo
+#if defined(AI_PASSIVE) && defined(EAI_NONAME)
+#define HAVE_GETADDRINFO
+#endif
+
+// Autosense getnameinfo
+#if defined(NI_NUMERICHOST)
+#define HAVE_GETNAMEINFO
+#endif
+
+// getaddrinfo support?
+#ifndef HAVE_GETADDRINFO
+ // Renamed to advoid type clashing.. (for debugging)
+ struct addrinfo_emu
+ {
+ int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
+ int ai_family; /* PF_xxx */
+ int ai_socktype; /* SOCK_xxx */
+ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+ size_t ai_addrlen; /* length of ai_addr */
+ char *ai_canonname; /* canonical name for nodename */
+ struct sockaddr *ai_addr; /* binary address */
+ struct addrinfo_emu *ai_next; /* next structure in linked list */
+ };
+ #define addrinfo addrinfo_emu
+
+ int getaddrinfo(const char *nodename, const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res);
+ void freeaddrinfo(struct addrinfo *ai);
+
+ #ifndef AI_PASSIVE
+ #define AI_PASSIVE (1<<1)
+ #endif
+
+ #ifndef EAI_NONAME
+ #define EAI_NONAME -1
+ #define EAI_AGAIN -2
+ #define EAI_FAIL -3
+ #define EAI_NODATA -4
+ #define EAI_FAMILY -5
+ #define EAI_SOCKTYPE -6
+ #define EAI_SERVICE -7
+ #define EAI_ADDRFAMILY -8
+ #define EAI_SYSTEM -10
+ #define EAI_MEMORY -11
+ #endif
+
+ /* If we don't have getaddrinfo then we probably don't have
+ sockaddr_storage either (same RFC) so we definitely will not be
+ doing any IPv6 stuff. Do not use the members of this structure to
+ retain portability, cast to a sockaddr. */
+ #define sockaddr_storage sockaddr_in
+#endif
+
+// getnameinfo support (glibc2.0 has getaddrinfo only)
+#ifndef HAVE_GETNAMEINFO
+
+ int getnameinfo(const struct sockaddr *sa, socklen_t salen,
+ char *host, size_t hostlen,
+ char *serv, size_t servlen,
+ int flags);
+
+ #ifndef NI_MAXHOST
+ #define NI_MAXHOST 1025
+ #define NI_MAXSERV 32
+ #endif
+
+ #ifndef NI_NUMERICHOST
+ #define NI_NUMERICHOST (1<<0)
+ #define NI_NUMERICSERV (1<<1)
+// #define NI_NOFQDN (1<<2)
+ #define NI_NAMEREQD (1<<3)
+ #define NI_DATAGRAM (1<<4)
+ #endif
+
+ #define sockaddr_storage sockaddr_in
+#endif
+
+// Glibc 2.0.7 misses this one
+#ifndef AI_NUMERICHOST
+#define AI_NUMERICHOST 0
+#endif
+
+#endif
diff --git a/methods/rred.cc b/methods/rred.cc
new file mode 100644
index 0000000..d4cf105
--- /dev/null
+++ b/methods/rred.cc
@@ -0,0 +1,788 @@
+// Copyright (c) 2014 Anthony Towns
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+
+#include <config.h>
+
+#include "aptmethod.h"
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <list>
+#include <string>
+#include <vector>
+#include <stddef.h>
+
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+#include <apti18n.h>
+
+#define BLOCK_SIZE (512*1024)
+
+class MemBlock {
+ char *start;
+ size_t size;
+ char *free;
+ MemBlock *next;
+
+ explicit MemBlock(size_t size) : size(size), next(NULL)
+ {
+ free = start = new char[size];
+ }
+
+ size_t avail(void) { return size - (free - start); }
+
+ public:
+
+ MemBlock(void) {
+ free = start = new char[BLOCK_SIZE];
+ size = BLOCK_SIZE;
+ next = NULL;
+ }
+
+ ~MemBlock() {
+ delete [] start;
+ delete next;
+ }
+
+ void clear(void) {
+ free = start;
+ if (next)
+ next->clear();
+ }
+
+ char *add_easy(char *src, size_t len, char *last)
+ {
+ if (last) {
+ for (MemBlock *k = this; k; k = k->next) {
+ if (k->free == last) {
+ if (len <= k->avail()) {
+ char *n = k->add(src, len);
+ assert(last == n);
+ if (last == n)
+ return NULL;
+ return n;
+ } else {
+ break;
+ }
+ } else if (last >= start && last < free) {
+ break;
+ }
+ }
+ }
+ return add(src, len);
+ }
+
+ char *add(char *src, size_t len) {
+ if (len > avail()) {
+ if (!next) {
+ if (len > BLOCK_SIZE) {
+ next = new MemBlock(len);
+ } else {
+ next = new MemBlock;
+ }
+ }
+ return next->add(src, len);
+ }
+ char *dst = free;
+ free += len;
+ memcpy(dst, src, len);
+ return dst;
+ }
+};
+
+struct Change {
+ /* Ordering:
+ *
+ * 1. write out <offset> lines unchanged
+ * 2. skip <del_cnt> lines from source
+ * 3. write out <add_cnt> lines (<add>/<add_len>)
+ */
+ size_t offset;
+ size_t del_cnt;
+ size_t add_cnt; /* lines */
+ size_t add_len; /* bytes */
+ char *add;
+
+ explicit Change(size_t off)
+ {
+ offset = off;
+ del_cnt = add_cnt = add_len = 0;
+ add = NULL;
+ }
+
+ /* actually, don't write <lines> lines from <add> */
+ void skip_lines(size_t lines)
+ {
+ while (lines > 0) {
+ char *s = (char*) memchr(add, '\n', add_len);
+ assert(s != NULL);
+ s++;
+ add_len -= (s - add);
+ add_cnt--;
+ lines--;
+ if (add_len == 0) {
+ add = NULL;
+ assert(add_cnt == 0);
+ assert(lines == 0);
+ } else {
+ add = s;
+ assert(add_cnt > 0);
+ }
+ }
+ }
+};
+
+class FileChanges {
+ std::list<struct Change> changes;
+ std::list<struct Change>::iterator where;
+ size_t pos; // line number is as far left of iterator as possible
+
+ bool pos_is_okay(void) const
+ {
+#ifdef POSDEBUG
+ size_t cpos = 0;
+ std::list<struct Change>::const_iterator x;
+ for (x = changes.begin(); x != where; ++x) {
+ assert(x != changes.end());
+ cpos += x->offset + x->add_cnt;
+ }
+ return cpos == pos;
+#else
+ return true;
+#endif
+ }
+
+ public:
+ FileChanges() {
+ where = changes.end();
+ pos = 0;
+ }
+
+ std::list<struct Change>::iterator begin(void) { return changes.begin(); }
+ std::list<struct Change>::iterator end(void) { return changes.end(); }
+
+ std::list<struct Change>::reverse_iterator rbegin(void) { return changes.rbegin(); }
+ std::list<struct Change>::reverse_iterator rend(void) { return changes.rend(); }
+
+ void add_change(Change c) {
+ assert(pos_is_okay());
+ go_to_change_for(c.offset);
+ assert(pos + where->offset == c.offset);
+ if (c.del_cnt > 0)
+ delete_lines(c.del_cnt);
+ assert(pos + where->offset == c.offset);
+ if (c.add_len > 0) {
+ assert(pos_is_okay());
+ if (where->add_len > 0)
+ new_change();
+ assert(where->add_len == 0 && where->add_cnt == 0);
+
+ where->add_len = c.add_len;
+ where->add_cnt = c.add_cnt;
+ where->add = c.add;
+ }
+ assert(pos_is_okay());
+ merge();
+ assert(pos_is_okay());
+ }
+
+ private:
+ void merge(void)
+ {
+ while (where->offset == 0 && where != changes.begin()) {
+ left();
+ }
+ std::list<struct Change>::iterator next = where;
+ ++next;
+
+ while (next != changes.end() && next->offset == 0) {
+ where->del_cnt += next->del_cnt;
+ next->del_cnt = 0;
+ if (next->add == NULL) {
+ next = changes.erase(next);
+ } else if (where->add == NULL) {
+ where->add = next->add;
+ where->add_len = next->add_len;
+ where->add_cnt = next->add_cnt;
+ next = changes.erase(next);
+ } else {
+ ++next;
+ }
+ }
+ }
+
+ void go_to_change_for(size_t line)
+ {
+ while(where != changes.end()) {
+ if (line < pos) {
+ left();
+ continue;
+ }
+ if (pos + where->offset + where->add_cnt <= line) {
+ right();
+ continue;
+ }
+ // line is somewhere in this slot
+ if (line < pos + where->offset) {
+ break;
+ } else if (line == pos + where->offset) {
+ return;
+ } else {
+ split(line - pos);
+ right();
+ return;
+ }
+ }
+ /* it goes before this patch */
+ insert(line-pos);
+ }
+
+ void new_change(void) { insert(where->offset); }
+
+ void insert(size_t offset)
+ {
+ assert(pos_is_okay());
+ assert(where == changes.end() || offset <= where->offset);
+ if (where != changes.end())
+ where->offset -= offset;
+ changes.insert(where, Change(offset));
+ --where;
+ assert(pos_is_okay());
+ }
+
+ void split(size_t offset)
+ {
+ assert(pos_is_okay());
+
+ assert(where->offset < offset);
+ assert(offset < where->offset + where->add_cnt);
+
+ size_t keep_lines = offset - where->offset;
+
+ Change before(*where);
+
+ where->del_cnt = 0;
+ where->offset = 0;
+ where->skip_lines(keep_lines);
+
+ before.add_cnt = keep_lines;
+ before.add_len -= where->add_len;
+
+ changes.insert(where, before);
+ --where;
+ assert(pos_is_okay());
+ }
+
+ void delete_lines(size_t cnt)
+ {
+ std::list<struct Change>::iterator x = where;
+ assert(pos_is_okay());
+ while (cnt > 0)
+ {
+ size_t del;
+ del = x->add_cnt;
+ if (del > cnt)
+ del = cnt;
+ x->skip_lines(del);
+ cnt -= del;
+
+ ++x;
+ if (x == changes.end()) {
+ del = cnt;
+ } else {
+ del = x->offset;
+ if (del > cnt)
+ del = cnt;
+ x->offset -= del;
+ }
+ where->del_cnt += del;
+ cnt -= del;
+ }
+ assert(pos_is_okay());
+ }
+
+ void left(void) {
+ assert(pos_is_okay());
+ --where;
+ pos -= where->offset + where->add_cnt;
+ assert(pos_is_okay());
+ }
+
+ void right(void) {
+ assert(pos_is_okay());
+ pos += where->offset + where->add_cnt;
+ ++where;
+ assert(pos_is_okay());
+ }
+};
+
+class Patch {
+ FileChanges filechanges;
+ MemBlock add_text;
+
+ static bool retry_fwrite(char *b, size_t l, FileFd &f, Hashes * const start_hash, Hashes * const end_hash = nullptr) APT_NONNULL(1)
+ {
+ if (f.Write(b, l) == false)
+ return false;
+ if (start_hash)
+ start_hash->Add((unsigned char*)b, l);
+ if (end_hash)
+ end_hash->Add((unsigned char*)b, l);
+ return true;
+ }
+
+ static void dump_rest(FileFd &o, FileFd &i,
+ Hashes * const start_hash, Hashes * const end_hash)
+ {
+ char buffer[BLOCK_SIZE];
+ unsigned long long l = 0;
+ while (i.Read(buffer, sizeof(buffer), &l)) {
+ if (l ==0 || !retry_fwrite(buffer, l, o, start_hash, end_hash))
+ break;
+ }
+ }
+
+ static void dump_lines(FileFd &o, FileFd &i, size_t n,
+ Hashes * const start_hash, Hashes * const end_hash)
+ {
+ char buffer[BLOCK_SIZE];
+ while (n > 0) {
+ if (i.ReadLine(buffer, sizeof(buffer)) == NULL)
+ buffer[0] = '\0';
+ size_t const l = strlen(buffer);
+ if (l == 0 || buffer[l-1] == '\n')
+ n--;
+ retry_fwrite(buffer, l, o, start_hash, end_hash);
+ }
+ }
+
+ static void skip_lines(FileFd &i, int n, Hashes * const start_hash)
+ {
+ char buffer[BLOCK_SIZE];
+ while (n > 0) {
+ if (i.ReadLine(buffer, sizeof(buffer)) == NULL)
+ buffer[0] = '\0';
+ size_t const l = strlen(buffer);
+ if (l == 0 || buffer[l-1] == '\n')
+ n--;
+ if (start_hash)
+ start_hash->Add((unsigned char*)buffer, l);
+ }
+ }
+
+ static void dump_mem(FileFd &o, char *p, size_t s, Hashes *hash) APT_NONNULL(2) {
+ retry_fwrite(p, s, o, nullptr, hash);
+ }
+
+ public:
+
+ bool read_diff(FileFd &f, Hashes * const h)
+ {
+ char buffer[BLOCK_SIZE];
+ bool cmdwanted = true;
+
+ Change ch(std::numeric_limits<size_t>::max());
+ if (f.ReadLine(buffer, sizeof(buffer)) == NULL)
+ return _error->Error("Reading first line of patchfile %s failed", f.Name().c_str());
+ do {
+ if (h != NULL)
+ h->Add(buffer);
+ if (cmdwanted) {
+ char *m, *c;
+ size_t s, e;
+ errno = 0;
+ s = strtoul(buffer, &m, 10);
+ if (unlikely(m == buffer || s == std::numeric_limits<unsigned long>::max() || errno != 0))
+ return _error->Error("Parsing patchfile %s failed: Expected an effected line start", f.Name().c_str());
+ else if (*m == ',') {
+ ++m;
+ e = strtol(m, &c, 10);
+ if (unlikely(m == c || e == std::numeric_limits<unsigned long>::max() || errno != 0))
+ return _error->Error("Parsing patchfile %s failed: Expected an effected line end", f.Name().c_str());
+ if (unlikely(e < s))
+ return _error->Error("Parsing patchfile %s failed: Effected lines end %lu is before start %lu", f.Name().c_str(), e, s);
+ } else {
+ e = s;
+ c = m;
+ }
+ if (s > ch.offset)
+ return _error->Error("Parsing patchfile %s failed: Effected line is after previous effected line", f.Name().c_str());
+ switch(*c) {
+ case 'a':
+ cmdwanted = false;
+ ch.add = NULL;
+ ch.add_cnt = 0;
+ ch.add_len = 0;
+ ch.offset = s;
+ ch.del_cnt = 0;
+ break;
+ case 'c':
+ if (unlikely(s == 0))
+ return _error->Error("Parsing patchfile %s failed: Change command can't effect line zero", f.Name().c_str());
+ cmdwanted = false;
+ ch.add = NULL;
+ ch.add_cnt = 0;
+ ch.add_len = 0;
+ ch.offset = s - 1;
+ ch.del_cnt = e - s + 1;
+ break;
+ case 'd':
+ if (unlikely(s == 0))
+ return _error->Error("Parsing patchfile %s failed: Delete command can't effect line zero", f.Name().c_str());
+ ch.offset = s - 1;
+ ch.del_cnt = e - s + 1;
+ ch.add = NULL;
+ ch.add_cnt = 0;
+ ch.add_len = 0;
+ filechanges.add_change(ch);
+ break;
+ default:
+ return _error->Error("Parsing patchfile %s failed: Unknown command", f.Name().c_str());
+ }
+ } else { /* !cmdwanted */
+ if (strcmp(buffer, ".\n") == 0) {
+ cmdwanted = true;
+ filechanges.add_change(ch);
+ } else {
+ char *last = NULL;
+ char *add;
+ size_t l;
+ if (ch.add)
+ last = ch.add + ch.add_len;
+ l = strlen(buffer);
+ add = add_text.add_easy(buffer, l, last);
+ if (!add) {
+ ch.add_len += l;
+ ch.add_cnt++;
+ } else {
+ if (ch.add) {
+ filechanges.add_change(ch);
+ ch.del_cnt = 0;
+ }
+ ch.offset += ch.add_cnt;
+ ch.add = add;
+ ch.add_len = l;
+ ch.add_cnt = 1;
+ }
+ }
+ }
+ } while(f.ReadLine(buffer, sizeof(buffer)));
+ return true;
+ }
+
+ void write_diff(FileFd &f)
+ {
+ unsigned long long line = 0;
+ std::list<struct Change>::reverse_iterator ch;
+ for (ch = filechanges.rbegin(); ch != filechanges.rend(); ++ch) {
+ line += ch->offset + ch->del_cnt;
+ }
+
+ for (ch = filechanges.rbegin(); ch != filechanges.rend(); ++ch) {
+ std::list<struct Change>::reverse_iterator mg_i, mg_e = ch;
+ while (ch->del_cnt == 0 && ch->offset == 0)
+ {
+ ++ch;
+ if (unlikely(ch == filechanges.rend()))
+ return;
+ }
+ line -= ch->del_cnt;
+ std::string buf;
+ if (ch->add_cnt > 0) {
+ if (ch->del_cnt == 0) {
+ strprintf(buf, "%llua\n", line);
+ } else if (ch->del_cnt == 1) {
+ strprintf(buf, "%lluc\n", line+1);
+ } else {
+ strprintf(buf, "%llu,%lluc\n", line+1, line+ch->del_cnt);
+ }
+ f.Write(buf.c_str(), buf.length());
+
+ mg_i = ch;
+ do {
+ dump_mem(f, mg_i->add, mg_i->add_len, NULL);
+ } while (mg_i-- != mg_e);
+
+ buf = ".\n";
+ f.Write(buf.c_str(), buf.length());
+ } else if (ch->del_cnt == 1) {
+ strprintf(buf, "%llud\n", line+1);
+ f.Write(buf.c_str(), buf.length());
+ } else if (ch->del_cnt > 1) {
+ strprintf(buf, "%llu,%llud\n", line+1, line+ch->del_cnt);
+ f.Write(buf.c_str(), buf.length());
+ }
+ line -= ch->offset;
+ }
+ }
+
+ void apply_against_file(FileFd &out, FileFd &in,
+ Hashes * const start_hash = nullptr, Hashes * const end_hash = nullptr)
+ {
+ std::list<struct Change>::iterator ch;
+ for (ch = filechanges.begin(); ch != filechanges.end(); ++ch) {
+ dump_lines(out, in, ch->offset, start_hash, end_hash);
+ skip_lines(in, ch->del_cnt, start_hash);
+ if (ch->add_len != 0)
+ dump_mem(out, ch->add, ch->add_len, end_hash);
+ }
+ dump_rest(out, in, start_hash, end_hash);
+ out.Flush();
+ }
+};
+
+class RredMethod : public aptMethod {
+ private:
+ bool Debug;
+
+ struct PDiffFile {
+ std::string FileName;
+ HashStringList ExpectedHashes;
+ PDiffFile(std::string const &FileName, HashStringList const &ExpectedHashes) :
+ FileName(FileName), ExpectedHashes(ExpectedHashes) {}
+ };
+
+ HashStringList ReadExpectedHashesForPatch(unsigned int const patch, std::string const &Message)
+ {
+ HashStringList ExpectedHashes;
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ std::string tagname;
+ strprintf(tagname, "Patch-%d-%s-Hash", patch, *type);
+ std::string const hashsum = LookupTag(Message, tagname.c_str());
+ if (hashsum.empty() == false)
+ ExpectedHashes.push_back(HashString(*type, hashsum));
+ }
+ return ExpectedHashes;
+ }
+
+ protected:
+ virtual bool URIAcquire(std::string const &Message, FetchItem *Itm) APT_OVERRIDE {
+ Debug = DebugEnabled();
+ URI Get = Itm->Uri;
+ std::string Path = Get.Host + Get.Path; // rred:/path - no host
+
+ FetchResult Res;
+ Res.Filename = Itm->DestFile;
+ if (Itm->Uri.empty())
+ {
+ Path = Itm->DestFile;
+ Itm->DestFile.append(".result");
+ } else
+ URIStart(Res);
+
+ std::vector<PDiffFile> patchfiles;
+ Patch patch;
+
+ HashStringList StartHashes;
+ for (char const * const * type = HashString::SupportedHashes(); *type != nullptr; ++type)
+ {
+ std::string tagname;
+ strprintf(tagname, "Start-%s-Hash", *type);
+ std::string const hashsum = LookupTag(Message, tagname.c_str());
+ if (hashsum.empty() == false)
+ StartHashes.push_back(HashString(*type, hashsum));
+ }
+
+ if (FileExists(Path + ".ed") == true)
+ {
+ HashStringList const ExpectedHashes = ReadExpectedHashesForPatch(0, Message);
+ std::string const FileName = Path + ".ed";
+ if (ExpectedHashes.usable() == false)
+ return _error->Error("No hashes found for uncompressed patch: %s", FileName.c_str());
+ patchfiles.push_back(PDiffFile(FileName, ExpectedHashes));
+ }
+ else
+ {
+ _error->PushToStack();
+ std::vector<std::string> patches = GetListOfFilesInDir(flNotFile(Path), "gz", true, false);
+ _error->RevertToStack();
+
+ std::string const baseName = Path + ".ed.";
+ unsigned int seen_patches = 0;
+ for (std::vector<std::string>::const_iterator p = patches.begin();
+ p != patches.end(); ++p)
+ {
+ if (p->compare(0, baseName.length(), baseName) == 0)
+ {
+ HashStringList const ExpectedHashes = ReadExpectedHashesForPatch(seen_patches, Message);
+ if (ExpectedHashes.usable() == false)
+ return _error->Error("No hashes found for uncompressed patch %d: %s", seen_patches, p->c_str());
+ patchfiles.push_back(PDiffFile(*p, ExpectedHashes));
+ ++seen_patches;
+ }
+ }
+ }
+
+ std::string patch_name;
+ for (std::vector<PDiffFile>::iterator I = patchfiles.begin();
+ I != patchfiles.end();
+ ++I)
+ {
+ patch_name = I->FileName;
+ if (Debug == true)
+ std::clog << "Patching " << Path << " with " << patch_name
+ << std::endl;
+
+ FileFd p;
+ Hashes patch_hash(I->ExpectedHashes);
+ // all patches are compressed, even if the name doesn't reflect it
+ if (p.Open(patch_name, FileFd::ReadOnly, FileFd::Gzip) == false ||
+ patch.read_diff(p, &patch_hash) == false)
+ {
+ _error->DumpErrors(std::cerr, GlobalError::DEBUG, false);
+ return false;
+ }
+ p.Close();
+ HashStringList const hsl = patch_hash.GetHashStringList();
+ if (hsl != I->ExpectedHashes)
+ return _error->Error("Hash Sum mismatch for uncompressed patch %s", patch_name.c_str());
+ }
+
+ if (Debug == true)
+ std::clog << "Applying patches against " << Path
+ << " and writing results to " << Itm->DestFile
+ << std::endl;
+
+ FileFd inp, out;
+ if (inp.Open(Path, FileFd::ReadOnly, FileFd::Extension) == false)
+ {
+ if (Debug == true)
+ std::clog << "FAILED to open inp " << Path << std::endl;
+ return _error->Error("Failed to open inp %s", Path.c_str());
+ }
+ if (out.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create | FileFd::Empty | FileFd::BufferedWrite, FileFd::Extension) == false)
+ {
+ if (Debug == true)
+ std::clog << "FAILED to open out " << Itm->DestFile << std::endl;
+ return _error->Error("Failed to open out %s", Itm->DestFile.c_str());
+ }
+
+ Hashes end_hash(Itm->ExpectedHashes);
+ if (StartHashes.usable())
+ {
+ Hashes start_hash(StartHashes);
+ patch.apply_against_file(out, inp, &start_hash, &end_hash);
+ if (start_hash.GetHashStringList() != StartHashes)
+ _error->Error("The input file hadn't the expected hash!");
+ }
+ else
+ patch.apply_against_file(out, inp, nullptr, &end_hash);
+
+ out.Close();
+ inp.Close();
+
+ if (_error->PendingError() == true) {
+ if (Debug == true)
+ std::clog << "FAILED to read or write files" << std::endl;
+ return false;
+ }
+
+ if (Debug == true) {
+ std::clog << "rred: finished file patching of " << Path << "." << std::endl;
+ }
+
+ struct stat bufbase, bufpatch;
+ if (stat(Path.c_str(), &bufbase) != 0 ||
+ stat(patch_name.c_str(), &bufpatch) != 0)
+ return _error->Errno("stat", _("Failed to stat %s"), Path.c_str());
+
+ struct timeval times[2];
+ times[0].tv_sec = bufbase.st_atime;
+ times[1].tv_sec = bufpatch.st_mtime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ if (utimes(Itm->DestFile.c_str(), times) != 0)
+ return _error->Errno("utimes",_("Failed to set modification time"));
+
+ if (stat(Itm->DestFile.c_str(), &bufbase) != 0)
+ return _error->Errno("stat", _("Failed to stat %s"), Itm->DestFile.c_str());
+
+ Res.LastModified = bufbase.st_mtime;
+ Res.Size = bufbase.st_size;
+ Res.TakeHashes(end_hash);
+ URIDone(Res);
+
+ return true;
+ }
+
+ public:
+ RredMethod() : aptMethod("rred", "2.0", SendConfig), Debug(false)
+ {
+ SeccompFlags = aptMethod::BASE | aptMethod::DIRECTORY;
+ }
+};
+
+int main(int argc, char **argv)
+{
+ int i;
+ bool just_diff = true;
+ bool test = false;
+ Patch patch;
+
+ if (argc <= 1) {
+ return RredMethod().Run();
+ }
+
+ // Usage: rred -t input output diff ...
+ if (argc > 1 && strcmp(argv[1], "-t") == 0) {
+ // Read config files so we see compressors.
+ pkgInitConfig(*_config);
+ just_diff = false;
+ test = true;
+ i = 4;
+ } else if (argc > 1 && strcmp(argv[1], "-f") == 0) {
+ just_diff = false;
+ i = 2;
+ } else {
+ i = 1;
+ }
+
+ for (; i < argc; i++) {
+ FileFd p;
+ if (p.Open(argv[i], FileFd::ReadOnly) == false) {
+ _error->DumpErrors(std::cerr);
+ exit(1);
+ }
+ if (patch.read_diff(p, NULL) == false)
+ {
+ _error->DumpErrors(std::cerr);
+ exit(2);
+ }
+ }
+
+ if (test) {
+ FileFd out, inp;
+ std::cerr << "Patching " << argv[2] << " into " << argv[3] << "\n";
+ inp.Open(argv[2], FileFd::ReadOnly,FileFd::Extension);
+ out.Open(argv[3], FileFd::WriteOnly | FileFd::Create | FileFd::Empty | FileFd::BufferedWrite, FileFd::Extension);
+ patch.apply_against_file(out, inp);
+ out.Close();
+ } else if (just_diff) {
+ FileFd out;
+ out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create);
+ patch.write_diff(out);
+ out.Close();
+ } else {
+ FileFd out, inp;
+ out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create | FileFd::BufferedWrite);
+ inp.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly);
+ patch.apply_against_file(out, inp);
+ out.Close();
+ }
+ return 0;
+}
diff --git a/methods/rsh.cc b/methods/rsh.cc
new file mode 100644
index 0000000..0da1869
--- /dev/null
+++ b/methods/rsh.cc
@@ -0,0 +1,547 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ RSH method - Transfer files via rsh compatible program
+
+ Written by Ben Collins <bcollins@debian.org>, Copyright (c) 2000
+ Licensed under the GNU General Public License v2 [no exception clauses]
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/strutl.h>
+
+#include "rsh.h"
+#include <errno.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+unsigned long TimeOut = 30;
+Configuration::Item const *RshOptions = 0;
+time_t RSHMethod::FailTime = 0;
+std::string RSHMethod::FailFile;
+int RSHMethod::FailFd = -1;
+
+// RSHConn::RSHConn - Constructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+RSHConn::RSHConn(std::string const &pProg, URI Srv) : Len(0), WriteFd(-1), ReadFd(-1),
+ ServerName(Srv), Prog(pProg), Process(-1) {
+ Buffer[0] = '\0';
+}
+ /*}}}*/
+// RSHConn::RSHConn - Destructor /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+RSHConn::~RSHConn()
+{
+ Close();
+}
+ /*}}}*/
+// RSHConn::Close - Forcibly terminate the connection /*{{{*/
+// ---------------------------------------------------------------------
+/* Often this is called when things have gone wrong to indicate that the
+ connection is no longer usable. */
+void RSHConn::Close()
+{
+ if (Process == -1)
+ return;
+
+ close(WriteFd);
+ close(ReadFd);
+ kill(Process,SIGINT);
+ ExecWait(Process,"",true);
+ WriteFd = -1;
+ ReadFd = -1;
+ Process = -1;
+}
+ /*}}}*/
+// RSHConn::Open - Connect to a host /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RSHConn::Open()
+{
+ // Use the already open connection if possible.
+ if (Process != -1)
+ return true;
+
+ if (Connect(ServerName.Host,ServerName.Port,ServerName.User) == false)
+ return false;
+
+ return true;
+}
+ /*}}}*/
+// RSHConn::Connect - Fire up rsh and connect /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RSHConn::Connect(std::string Host, unsigned int Port, std::string User)
+{
+ char *PortStr = NULL;
+ if (Port != 0)
+ {
+ if (asprintf (&PortStr, "%d", Port) == -1 || PortStr == NULL)
+ return _error->Errno("asprintf", _("Failed"));
+ }
+
+ // Create the pipes
+ int Pipes[4] = {-1,-1,-1,-1};
+ if (pipe(Pipes) != 0 || pipe(Pipes+2) != 0)
+ {
+ _error->Errno("pipe",_("Failed to create IPC pipe to subprocess"));
+ for (int I = 0; I != 4; I++)
+ close(Pipes[I]);
+ return false;
+ }
+ for (int I = 0; I != 4; I++)
+ SetCloseExec(Pipes[I],true);
+
+ Process = ExecFork();
+
+ // The child
+ if (Process == 0)
+ {
+ const char *Args[400];
+ unsigned int i = 0;
+
+ dup2(Pipes[1],STDOUT_FILENO);
+ dup2(Pipes[2],STDIN_FILENO);
+
+ // Probably should do
+ // dup2(open("/dev/null",O_RDONLY),STDERR_FILENO);
+
+ Args[i++] = Prog.c_str();
+
+ // Insert user-supplied command line options
+ Configuration::Item const *Opts = RshOptions;
+ if (Opts != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ Args[i++] = Opts->Value.c_str();
+ }
+ }
+
+ if (User.empty() == false) {
+ Args[i++] = "-l";
+ Args[i++] = User.c_str();
+ }
+ if (PortStr != NULL) {
+ Args[i++] = "-p";
+ Args[i++] = PortStr;
+ }
+ if (Host.empty() == false) {
+ Args[i++] = Host.c_str();
+ }
+ Args[i++] = "/bin/sh";
+ Args[i] = 0;
+ execvp(Args[0],(char **)Args);
+ exit(100);
+ }
+
+ if (PortStr != NULL)
+ free(PortStr);
+
+ ReadFd = Pipes[0];
+ WriteFd = Pipes[3];
+ SetNonBlock(Pipes[0],true);
+ SetNonBlock(Pipes[3],true);
+ close(Pipes[1]);
+ close(Pipes[2]);
+
+ return true;
+}
+bool RSHConn::Connect(std::string Host, std::string User)
+{
+ return Connect(Host, 0, User);
+}
+ /*}}}*/
+// RSHConn::ReadLine - Very simple buffered read with timeout /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RSHConn::ReadLine(std::string &Text)
+{
+ if (Process == -1 || ReadFd == -1)
+ return false;
+
+ // Suck in a line
+ while (Len < sizeof(Buffer))
+ {
+ // Scan the buffer for a new line
+ for (unsigned int I = 0; I != Len; I++)
+ {
+ // Escape some special chars
+ if (Buffer[I] == 0)
+ Buffer[I] = '?';
+
+ // End of line?
+ if (Buffer[I] != '\n')
+ continue;
+
+ I++;
+ Text = std::string(Buffer,I);
+ memmove(Buffer,Buffer+I,Len - I);
+ Len -= I;
+ return true;
+ }
+
+ // Wait for some data..
+ if (WaitFd(ReadFd,false,TimeOut) == false)
+ {
+ Close();
+ return _error->Error(_("Connection timeout"));
+ }
+
+ // Suck it back
+ int Res = read(ReadFd,Buffer + Len,sizeof(Buffer) - Len);
+ if (Res <= 0)
+ {
+ _error->Errno("read",_("Read error"));
+ Close();
+ return false;
+ }
+ Len += Res;
+ }
+
+ return _error->Error(_("A response overflowed the buffer."));
+}
+ /*}}}*/
+// RSHConn::WriteMsg - Send a message with optional remote sync. /*{{{*/
+// ---------------------------------------------------------------------
+/* The remote sync flag appends a || echo which will insert blank line
+ once the command completes. */
+bool RSHConn::WriteMsg(std::string &Text,bool Sync,const char *Fmt,...)
+{
+ va_list args;
+ va_start(args,Fmt);
+
+ // sprintf into a buffer
+ char Tmp[1024];
+ vsnprintf(Tmp,sizeof(Tmp),Fmt,args);
+ va_end(args);
+
+ // concat to create the real msg
+ std::string Msg;
+ if (Sync == true)
+ Msg = std::string(Tmp) + " 2> /dev/null || echo\n";
+ else
+ Msg = std::string(Tmp) + " 2> /dev/null\n";
+
+ // Send it off
+ const char *S = Msg.c_str();
+ unsigned long Len = strlen(S);
+ unsigned long Start = 0;
+ while (Len != 0)
+ {
+ if (WaitFd(WriteFd,true,TimeOut) == false)
+ {
+
+ Close();
+ return _error->Error(_("Connection timeout"));
+ }
+
+ int Res = write(WriteFd,S + Start,Len);
+ if (Res <= 0)
+ {
+ _error->Errno("write",_("Write error"));
+ Close();
+ return false;
+ }
+
+ Len -= Res;
+ Start += Res;
+ }
+
+ if (Sync == true)
+ return ReadLine(Text);
+ return true;
+}
+ /*}}}*/
+// RSHConn::Size - Return the size of the file /*{{{*/
+// ---------------------------------------------------------------------
+/* Right now for successful transfer the file size must be known in
+ advance. */
+bool RSHConn::Size(const char *Path,unsigned long long &Size)
+{
+ // Query the size
+ std::string Msg;
+ Size = 0;
+
+ if (WriteMsg(Msg,true,"find %s -follow -printf '%%s\\n'",Path) == false)
+ return false;
+
+ // FIXME: Sense if the bad reply is due to a File Not Found.
+
+ char *End;
+ Size = strtoull(Msg.c_str(),&End,10);
+ if (End == Msg.c_str())
+ return _error->Error(_("File not found"));
+ return true;
+}
+ /*}}}*/
+// RSHConn::ModTime - Get the modification time in UTC /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RSHConn::ModTime(const char *Path, time_t &Time)
+{
+ Time = time(&Time);
+ // Query the mod time
+ std::string Msg;
+
+ if (WriteMsg(Msg,true,"TZ=UTC find %s -follow -printf '%%TY%%Tm%%Td%%TH%%TM%%TS\\n'",Path) == false)
+ return false;
+
+ // Parse it
+ return FTPMDTMStrToTime(Msg.c_str(), Time);
+}
+ /*}}}*/
+// RSHConn::Get - Get a file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RSHConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
+ Hashes &Hash,bool &Missing, unsigned long long Size)
+{
+ Missing = false;
+
+ // Round to a 2048 byte block
+ Resume = Resume - (Resume % 2048);
+
+ if (To.Truncate(Resume) == false)
+ return false;
+ if (To.Seek(0) == false)
+ return false;
+
+ if (Resume != 0) {
+ if (Hash.AddFD(To,Resume) == false) {
+ _error->Errno("read",_("Problem hashing file"));
+ return false;
+ }
+ }
+
+ // FIXME: Detect file-not openable type errors.
+ std::string Jnk;
+ if (WriteMsg(Jnk,false,"dd if=%s bs=2048 skip=%u", Path, Resume / 2048) == false)
+ return false;
+
+ // Copy loop
+ unsigned long long MyLen = Resume;
+ unsigned char Buffer[4096];
+ while (MyLen < Size)
+ {
+ // Wait for some data..
+ if (WaitFd(ReadFd,false,TimeOut) == false)
+ {
+ Close();
+ return _error->Error(_("Data socket timed out"));
+ }
+
+ // Read the data..
+ int Res = read(ReadFd,Buffer,sizeof(Buffer));
+ if (Res == 0)
+ {
+ Close();
+ return _error->Error(_("Connection closed prematurely"));
+ }
+
+ if (Res < 0)
+ {
+ if (errno == EAGAIN)
+ continue;
+ break;
+ }
+ MyLen += Res;
+
+ Hash.Add(Buffer,Res);
+ if (To.Write(Buffer,Res) == false)
+ {
+ Close();
+ return false;
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+
+// RSHMethod::RSHMethod - Constructor /*{{{*/
+RSHMethod::RSHMethod(std::string &&pProg) : aptMethod(std::move(pProg),"1.0",SendConfig)
+{
+ signal(SIGTERM,SigTerm);
+ signal(SIGINT,SigTerm);
+ Server = 0;
+ FailFd = -1;
+}
+ /*}}}*/
+// RSHMethod::Configuration - Handle a configuration message /*{{{*/
+// ---------------------------------------------------------------------
+bool RSHMethod::Configuration(std::string Message)
+{
+ // enabling privilege dropping for this method requires configuration…
+ // … which is otherwise lifted straight from root, so use it by default.
+ _config->Set(std::string("Binary::") + Binary + "::APT::Sandbox::User", "");
+
+ if (aptMethod::Configuration(Message) == false)
+ return false;
+
+ std::string const timeconf = std::string("Acquire::") + Binary + "::Timeout";
+ TimeOut = _config->FindI(timeconf, TimeOut);
+ std::string const optsconf = std::string("Acquire::") + Binary + "::Options";
+ RshOptions = _config->Tree(optsconf.c_str());
+
+ return true;
+}
+ /*}}}*/
+// RSHMethod::SigTerm - Clean up and timestamp the files on exit /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void RSHMethod::SigTerm(int)
+{
+ if (FailFd == -1)
+ _exit(100);
+
+ // Transfer the modification times
+ struct timeval times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(FailFile.c_str(), times);
+ close(FailFd);
+
+ _exit(100);
+}
+ /*}}}*/
+// RSHMethod::Fetch - Fetch a URI /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool RSHMethod::Fetch(FetchItem *Itm)
+{
+ URI Get = Itm->Uri;
+ const char *File = Get.Path.c_str();
+ FetchResult Res;
+ Res.Filename = Itm->DestFile;
+ Res.IMSHit = false;
+
+ // Connect to the server
+ if (Server == 0 || Server->Comp(Get) == false) {
+ delete Server;
+ Server = new RSHConn(Binary, Get);
+ }
+
+ // Could not connect is a transient error..
+ if (Server->Open() == false) {
+ Server->Close();
+ Fail(true);
+ return true;
+ }
+
+ // We say this mainly because the pause here is for the
+ // ssh connection that is still going
+ Status(_("Connecting to %s"), Get.Host.c_str());
+
+ // Get the files information
+ unsigned long long Size;
+ if (Server->Size(File,Size) == false ||
+ Server->ModTime(File,FailTime) == false)
+ {
+ //Fail(true);
+ //_error->Error(_("File not found")); // Will be handled by Size
+ return false;
+ }
+ Res.Size = Size;
+
+ // See if it is an IMS hit
+ if (Itm->LastModified == FailTime) {
+ Res.Size = 0;
+ Res.IMSHit = true;
+ URIDone(Res);
+ return true;
+ }
+
+ // See if the file exists
+ struct stat Buf;
+ if (stat(Itm->DestFile.c_str(),&Buf) == 0) {
+ if (Size == (unsigned long long)Buf.st_size && FailTime == Buf.st_mtime) {
+ Res.Size = Buf.st_size;
+ Res.LastModified = Buf.st_mtime;
+ Res.ResumePoint = Buf.st_size;
+ URIDone(Res);
+ return true;
+ }
+
+ // Resume?
+ if (FailTime == Buf.st_mtime && Size > (unsigned long long)Buf.st_size)
+ Res.ResumePoint = Buf.st_size;
+ }
+
+ // Open the file
+ Hashes Hash(Itm->ExpectedHashes);
+ {
+ FileFd Fd(Itm->DestFile,FileFd::WriteAny);
+ if (_error->PendingError() == true)
+ return false;
+
+ URIStart(Res);
+
+ FailFile = Itm->DestFile;
+ FailFile.c_str(); // Make sure we don't do a malloc in the signal handler
+ FailFd = Fd.Fd();
+
+ bool Missing;
+ if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing,Res.Size) == false)
+ {
+ Fd.Close();
+
+ // Timestamp
+ struct timeval times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(FailFile.c_str(), times);
+
+ // If the file is missing we hard fail otherwise transient fail
+ if (Missing == true)
+ return false;
+ Fail(true);
+ return true;
+ }
+
+ Res.Size = Fd.Size();
+ struct timeval times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_usec = times[1].tv_usec = 0;
+ utimes(Fd.Name().c_str(), times);
+ FailFd = -1;
+ }
+
+ Res.LastModified = FailTime;
+ Res.TakeHashes(Hash);
+
+ URIDone(Res);
+
+ return true;
+}
+ /*}}}*/
+
+int main(int, const char *argv[])
+{
+ return RSHMethod(flNotDir(argv[0])).Run();
+}
diff --git a/methods/rsh.h b/methods/rsh.h
new file mode 100644
index 0000000..acdcb64
--- /dev/null
+++ b/methods/rsh.h
@@ -0,0 +1,75 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ RSH method - Transfer files via rsh compatible program
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef APT_RSH_H
+#define APT_RSH_H
+
+#include <string>
+#include <time.h>
+
+#include <apt-pkg/strutl.h>
+
+class Hashes;
+class FileFd;
+
+class RSHConn
+{
+ char Buffer[1024*10];
+ unsigned long Len;
+ int WriteFd;
+ int ReadFd;
+ URI ServerName;
+ std::string const Prog;
+
+ // Private helper functions
+ bool ReadLine(std::string &Text);
+
+ public:
+
+ pid_t Process;
+
+ // Raw connection IO
+ bool WriteMsg(std::string &Text,bool Sync,const char *Fmt,...);
+ bool Connect(std::string Host, std::string User);
+ bool Connect(std::string Host, unsigned int Port, std::string User);
+ bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;};
+
+ // Connection control
+ bool Open();
+ void Close();
+
+ // Query
+ bool Size(const char *Path,unsigned long long &Size);
+ bool ModTime(const char *Path, time_t &Time);
+ bool Get(const char *Path,FileFd &To,unsigned long long Resume,
+ Hashes &Hash,bool &Missing, unsigned long long Size);
+
+ RSHConn(std::string const &Prog, URI Srv);
+ ~RSHConn();
+};
+
+#include "aptmethod.h"
+
+class RSHMethod : public aptMethod
+{
+ virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE;
+ virtual bool Configuration(std::string Message) APT_OVERRIDE;
+
+ RSHConn *Server;
+
+ static std::string FailFile;
+ static int FailFd;
+ static time_t FailTime;
+ static APT_NORETURN void SigTerm(int);
+
+ public:
+
+ explicit RSHMethod(std::string &&Prog);
+};
+
+#endif
diff --git a/methods/store.cc b/methods/store.cc
new file mode 100644
index 0000000..7b9e202
--- /dev/null
+++ b/methods/store.cc
@@ -0,0 +1,147 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Store method - Takes a file URI and stores its content (for which it will
+ calculate the hashes) in the given destination. The input file will be
+ extracted based on its file extension (or with the given compressor if
+ called with one of the compatible symlinks) and potentially recompressed
+ based on the file extension of the destination filename.
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <config.h>
+
+#include "aptmethod.h"
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/strutl.h>
+
+#include <string>
+#include <vector>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+#include <apti18n.h>
+ /*}}}*/
+
+class StoreMethod : public aptMethod
+{
+ virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE;
+
+ public:
+
+ explicit StoreMethod(std::string &&pProg) : aptMethod(std::move(pProg),"1.2",SingleInstance | SendConfig)
+ {
+ SeccompFlags = aptMethod::BASE;
+ if (Binary != "store")
+ methodNames.insert(methodNames.begin(), "store");
+ }
+};
+
+static bool OpenFileWithCompressorByName(FileFd &fileFd, std::string const &Filename, unsigned int const Mode, std::string const &Name)
+{
+ if (Name == "store")
+ return fileFd.Open(Filename, Mode, FileFd::Extension);
+
+ std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+ std::vector<APT::Configuration::Compressor>::const_iterator compressor = compressors.begin();
+ for (; compressor != compressors.end(); ++compressor)
+ if (compressor->Name == Name)
+ break;
+ if (compressor == compressors.end())
+ return _error->Error("Extraction of file %s requires unknown compressor %s", Filename.c_str(), Name.c_str());
+ return fileFd.Open(Filename, Mode, *compressor);
+}
+
+
+ /*}}}*/
+bool StoreMethod::Fetch(FetchItem *Itm) /*{{{*/
+{
+ URI Get = Itm->Uri;
+ std::string Path = Get.Host + Get.Path; // To account for relative paths
+
+ FetchResult Res;
+ Res.Filename = Itm->DestFile;
+ URIStart(Res);
+
+ // Open the source and destination files
+ FileFd From;
+ if (_config->FindB("Method::Compress", false) == false)
+ {
+ if (OpenFileWithCompressorByName(From, Path, FileFd::ReadOnly, Binary) == false)
+ return false;
+ if(From.IsCompressed() && From.FileSize() == 0)
+ return _error->Error(_("Empty files can't be valid archives"));
+ }
+ else
+ From.Open(Path, FileFd::ReadOnly, FileFd::Extension);
+ if (From.IsOpen() == false || From.Failed() == true)
+ return false;
+
+ FileFd To;
+ if (Itm->DestFile != "/dev/null" && Itm->DestFile != Path)
+ {
+ if (_config->FindB("Method::Compress", false) == false)
+ To.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create | FileFd::Atomic, FileFd::Extension);
+ else if (OpenFileWithCompressorByName(To, Itm->DestFile, FileFd::WriteOnly | FileFd::Create | FileFd::Empty, Binary) == false)
+ return false;
+
+ if (To.IsOpen() == false || To.Failed() == true)
+ return false;
+ To.EraseOnFailure();
+ }
+
+ // Read data from source, generate checksums and write
+ Hashes Hash(Itm->ExpectedHashes);
+ bool Failed = false;
+ Res.Size = 0;
+ while (1)
+ {
+ unsigned char Buffer[4*1024];
+ unsigned long long Count = 0;
+
+ if (!From.Read(Buffer,sizeof(Buffer),&Count))
+ {
+ if (To.IsOpen())
+ To.OpFail();
+ return false;
+ }
+ if (Count == 0)
+ break;
+ Res.Size += Count;
+
+ Hash.Add(Buffer,Count);
+ if (To.IsOpen() && To.Write(Buffer,Count) == false)
+ {
+ Failed = true;
+ break;
+ }
+ }
+
+ From.Close();
+ To.Close();
+
+ if (Failed == true)
+ return false;
+
+ if (TransferModificationTimes(Path.c_str(), Itm->DestFile.c_str(), Res.LastModified) == false)
+ return false;
+
+ // Return a Done response
+ Res.TakeHashes(Hash);
+
+ URIDone(Res);
+ return true;
+}
+ /*}}}*/
+
+int main(int, char *argv[])
+{
+ return StoreMethod(flNotDir(argv[0])).Run();
+}
diff --git a/mirror-failure.py b/mirror-failure.py
new file mode 100644
index 0000000..e7d2bbf
--- /dev/null
+++ b/mirror-failure.py
@@ -0,0 +1,23 @@
+# File: cgihttpserver-example-1.py
+
+import CGIHTTPServer
+import BaseHTTPServer
+
+class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
+ #cgi_directories = ["/cgi"]
+ def do_POST(self):
+ print "do_POST"
+ #print self.command
+ #print self.path
+ #print self.headers
+ print self.client_address
+ data = self.rfile.read(int(self.headers["content-length"]))
+ print data
+ self.wfile.write("200 Ok\n");
+
+PORT = 8000
+
+httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler)
+print "serving at port", PORT
+httpd.serve_forever()
+
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100644
index 0000000..a8893e8
--- /dev/null
+++ b/po/CMakeLists.txt
@@ -0,0 +1,52 @@
+include(Translations)
+
+set(languages_excluded
+ he ## disabled by translator request #313283
+)
+
+apt_add_translation_domain(
+ DOMAIN libapt-pkg${APT_PKG_MAJOR}
+ TARGETS apt-pkg
+ EXCLUDE_LANGUAGES ${languages_excluded}
+)
+
+apt_add_translation_domain(
+ DOMAIN apt
+ TARGETS apt apt-cache apt-get apt-config apt-cdrom apt-helper apt-mark
+ apt-private
+ # Methods
+ connectlib file copy store gpgv cdrom http ftp rred rsh mirror
+ SCRIPTS ../dselect/install ../dselect/update
+ EXCLUDE_LANGUAGES ${languages_excluded}
+)
+
+apt_add_translation_domain(
+ DOMAIN apt-utils
+ TARGETS apt-sortpkgs
+ apt-extracttemplates
+ apt-internal-solver
+ apt-dump-solver
+ apt-internal-planner
+ apt-ftparchive
+ EXCLUDE_LANGUAGES ${languages_excluded}
+)
+
+apt_add_translation_domain(
+ DOMAIN libapt-inst${APT_INST_MAJOR}
+ TARGETS apt-inst
+ EXCLUDE_LANGUAGES ${languages_excluded}
+)
+
+apt_add_update_po(
+ TEMPLATE
+ apt-all
+ DOMAINS
+ libapt-pkg${APT_PKG_MAJOR}
+ libapt-inst${APT_INST_MAJOR}
+ apt
+ apt-utils
+ EXCLUDE_LANGUAGES
+ ${languages_excluded}
+)
+
+apt_add_po_statistics("${languages_excluded}")
diff --git a/po/apt-all.pot b/po/apt-all.pot
new file mode 100644
index 0000000..7a2bf16
--- /dev/null
+++ b/po/apt-all.pot
@@ -0,0 +1,3613 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.8.2.3\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2021-04-19 16:47+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Unknown TAR header type %u"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr ""
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr ""
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr ""
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr ""
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr ""
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr ""
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr ""
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr ""
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr ""
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr ""
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr ""
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr ""
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr ""
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr ""
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr ""
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr ""
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr ""
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr ""
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr ""
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr ""
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr ""
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr ""
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr ""
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr ""
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr ""
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr ""
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr ""
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr ""
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "The following packages will be marked as automatically installed:"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "reinstall packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr ""
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr ""
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr ""
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr ""
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+
+#: dselect/update
+msgid "Merging available information"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr ""
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr ""
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr ""
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr ""
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr ""
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr ""
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr ""
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr ""
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr ""
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr ""
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr ""
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr ""
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr ""
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr ""
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr ""
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr ""
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr ""
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr ""
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr ""
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr ""
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr ""
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr ""
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..0b0487e
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,3849 @@
+# translation of apt_po.po to Arabic
+# This file is put in the public domain.
+#
+# Ossama M. Khayat <okhayat@yahoo.com>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2006-10-20 21:28+0300\n"
+"Last-Translator: Ossama M. Khayat <okhayat@yahoo.com>\n"
+"Language-Team: Arabic <support@arabeyes.org>\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Arabic\n"
+"X-Poedit-Country: Lebanon\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "توقيع الأرشيف غير صالح"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "الأرشيف قصير جداً"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "فشلت قراءة ترويسات الأرشيف"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "أرشيف فاسد"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "فشل تحقّق Checksum لملف Tar، الأرشيف فاسد"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Unknown TAR header type %u"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "خطأ داخلي، تعذر العثور على العضو %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr ""
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "فشلت كتابة الملف %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "فشل إغلاق الملف %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "المسار %s طويل جداً"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "فكّ تحزيم %s أكثر من مرّة"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr ""
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr ""
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "فشل تغيير اسم %s إلى %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "المسار طويل جداً"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr ""
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "تعذرت قراءة %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "خطأ داخلي في AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "ملف تهيئة مُزدوج %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "المسار %s طويل جداً"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "المسار %s طويل جداً"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "المسار %s طويل جداً"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "المسار %s طويل جداً"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "المسار %s طويل جداً"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Hash Sum mismatch"
+msgstr "MD5Sum غير متطابقة"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "فشل إعادة التسمية ، %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "الحجم غير متطابق"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "عمليّة غير صالحة %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "خطأ في الكتابة"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "فشل إحضار %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "الاتصال بـ%s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "الرجاء إدخال القرص المُسمّى '%s' في السوّاقة '%s' وضغط مفتاح الإدخال."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "تعذر قفل دليل القائمة"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "نظام الحزم '%s' غير مدعوم"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "قد يساعدك تنفيذ الأمر apt-get update في تصحيح هذه المشاكل"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "تعذرت قراءة قائمة المصادر."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "تعذر العثور على الإصدارة '%s' للحزمة '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "تعذر العثور على النسخة '%s' للحزمة '%s'"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "فك تركيب القرص المدمج...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "بانتظار القرص...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "تركيب القرص...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "جاري التعرف..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "هذا الاسم غير صالح، حاول مجدداً.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"هذا القرص مسمى: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "نسخ قوائم الحزم..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "كتابة لائحة المصادر الجديدة\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "خيار سطر الأمر '%c' [من %s] مجهول."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "خيار سطر الأمر %s غير مفهوم"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "الخيار %s يتطلّب مُعطى."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "الخيار '%s' طويل جداً"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "عمليّة غير صالحة %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "اختصار نوع مجهول: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "مشكلة في إغلاق الملف"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr ""
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "خطأ في القراءة"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "خطأ في الكتابة"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "مشكلة في إغلاق الملف"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "فشل إغلاق الملف %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "مشكلة في إغلاق الملف"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "مشكلة في مزامنة الملف"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "مشكلة في مزامنة الملف"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "تعذر إنشاء %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "تعذرت الكتابة إلى %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "تعذر التغيير إلى %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "تعذر فتح %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "تعذر إرسال الأمر PORT"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "فشلت كتابة الملف %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... خطأ!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... تمّ"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... تمّ"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "تعذر العثور على التحديد %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "تعذر فتح ملف قاعدة البيانات %s: %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "لاحظ، تحديد %s بدلاً من %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "لاحظ، تحديد %s بدلاً من %s\n"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "تعذر قفل دليل القائمة"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "تعذر قفل دليل القائمة"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "تحضير %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "التحضير لتهيئة %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "التحضير لإزالة %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "التحضير لإزالة %s بالكامل"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "تم تثبيت %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "تهيئة %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "فشل إغلاق الملف %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "فتح %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr "تم تثبيت %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "إزالة %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "تمت إزالة %s بالكامل"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "تمت إزالة %s بالكامل"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "تعذرت الكتابة إلى %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "دمج المعلومات المتوفرة"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "فشل فتح %s"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "فشلت كتابة الملف %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "MD5Sum غير متطابقة"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "نظام الحزم '%s' غير مدعوم"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr ""
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "فشل إغلاق الملف %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "يعتمد"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "يعتمد مسبقاً"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "يستحسن"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "يعارض"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "يقترح"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "يستبدل"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "يُلغي"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "مهم"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "مطلوب"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "قياسي"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "إضافي"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "اختياري"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr ""
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "حدث خطأ أثناء معالجة %s (NewVersion1)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "قراءة قوائم الحزم"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr ""
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "حساب الترقية"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "جلب:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "تجاهل:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "خطأ:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "جلب %sب في %s (%sب/ث)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [يعمل]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"تغيير الوسط: الرجاء إدخال القرص المُسمّى\n"
+" '%s'\n"
+"في السوّاقة '%s' وضغط مفتاح الإدخال\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "تصحيح المعتمدات..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " فشل."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "لم يمكن تصحيح المعتمدات"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "لم يمكن تقليص مجموعة الترقية"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " تم"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "قد ترغب بتنفيذ الأمر 'apt --fix-broken install' لتصحيح هذه."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"مُعتمدات غير مستوفاة. جرب 'apt --fix-broken install' بدون أسماء حزم (أو حدّد "
+"حلاً)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "لاحظ، تحديد %s بسبب صيغة regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "لاحظ، تحديد %s بسبب صيغة regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "لاحظ، تحديد %s بسبب صيغة regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "الحزمة %s وهميّة وتوفّرها:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [مُثبّتة]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "يجب اختيار واحدة بالتحديد لتثبيتها."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "على أيّ فإن الحزم التالية تحلّ مكانها:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "الحزمة %s ليس لها مرشح تثبيت"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "الحزمة %s غير مُثبّتة، لذلك لن تُزال\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "الحزمة %s غير مُثبّتة، لذلك لن تُزال\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "لاحظ، تحديد %s بدلاً من %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "لم يُعثر على أية حزم"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "تحذير: تعذرت المصادقة على الحزم التالية!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "تم غض النظر عن تحذير المصادقة.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "تعذرت المصادقة على بعض الحزم"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "تثبيت هذه الحزم دون التحقق منها؟"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "هناك مشاكل وتم استخدام -y دون --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "تعذر حساب المساحة الحرة في %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "ليس هناك مساحة كافية في %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "تعذر قَفْل دليل التنزيل"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "قد تساعد المعلومات التالية في حل المشكلة:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "حزم معطوبة"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"تعذر إحضار بعض الأرشيف، ربما يمكنك محاولة تنفيذ apt-get update أو إضافة --"
+"fix-missing؟"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "خطأ داخلي، تم طلب InstallPackages مع وجود حزم معطوبة!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "حزم بحاجة للإزالة لكن الإزالة مُعطّلة."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "هناك مشاكل وتم استخدام -y دون --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "هناك مشاكل وتم استخدام -y دون --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "خطأ داخلي، لم تنته عملية الترتيب"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "يا للغرابة... لم تتطابق الأحجام، الرجاء مراسلة apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "بحاجة إلى جلب %sب/%sب من الأرشيف.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "بحاجة إلى جلب %sب من الأرشيف.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "بعد الاستخراج %sب من المساحة الإضافيّة سيتمّ استخدامها.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "بعد الاستخراج %sب من المساحة ستفرّغ.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "نعم، افعل ما أقوله!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"أنت على وشك أن تقوم بشيء ضارّ جداً\n"
+"كي تستمر اكتب العبارة '%s'\n"
+" ؟] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "إجهاض."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "هل تريد الاستمرار؟"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "فشل تنزيل بعض الملفات"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "اكتمل التنزيل وفي وضع التنزيل فقط"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing وتبديل الأوساط غير مدعومة حالياً"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "تعذر تصحيح الحزم المفقودة."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "إجهاض التثبيت."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "خطأ داخلي، عطب AllUpgrade بعض الأشياء"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "سيتم تثبيت الحزم الجديدة التالية:"
+msgstr[1] "سيتم تثبيت الحزم الجديدة التالية:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "سيتم تثبيت الحزم الجديدة التالية:"
+msgstr[1] "سيتم تثبيت الحزم الجديدة التالية:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "سيتم تثبيت الحزم الإضافيّة التالية:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "الحزم المقترحة:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "الحزم المستحسنة:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "تخطّي %s، حيث أنها مثبتة ولم يتمّ تعيين الترقية.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "تخطّي %s، حيث أنها مثبتة ولم يتمّ تعيين الترقية.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "إعادة تثبيت %s غير ممكنة، حيث أنّه لا يمكن تنزيلها.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s هي النسخة الأحدث.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "النسخة المحددة %s (%s) للإصدارة %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "النسخة المحددة %s (%s) للإصدارة %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [مُثبّتة]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [مُثبّتة]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [مُثبّتة]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [مُثبّتة]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "إلا أن %s مثبت"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "إلا أنه غير قابل للتثبيت"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "إلا أنها حزمة وهمية"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "إلا أنه لن يتم تثبيتها"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "إلا أنها غير مثبتة"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " أو"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "سيتم تثبيت الحزم الجديدة التالية:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "سيتم إزالة الحزم التالية:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "سيتم الإبقاء على الحزم التالية:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "ستتم ترقية الحزم التالية:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "سيتم تثبيط الحزم التالية:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "سيتم تغيير الحزم المبقاة التالية:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (بسبب %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"تحذير: ستتم إزالة الحزم الأساسية التالية.\n"
+"لا يجب أن تقوم بهذا إلى إن كنت تعرف تماماً ما تقوم به!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu سيتم ترقيتها، %lu مثبتة حديثاً، "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu أعيد تثبيتها، "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu مثبطة، "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu لإزالتها و %lu لم يتم ترقيتها.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu غير مثبتة بالكامل أو مزالة.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Y/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[y/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "يجب أن تعطي صيغة واحدة بالضبط"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "ملفات الحزم:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "الحزم المُدبّسة:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " مُثبّت:"
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " مرشّح: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(لاشيء)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " جدول النسخ:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "يجب تحديد حزمة واحدة على الأقل لجلب مصدرها"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "تعذر العثور على مصدر الحزمة %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "تخطي الملف '%s' المنزل مسبقاً\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "يجب جلب %sب/%sب من الأرشيفات المصدرية.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "يجب جلب %sب من الأرشيفات المصدريّة.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "إحضار المصدر %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "فشل إحضار بعض الأرشيفات."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "أمر فك الحزمة '%s' فشل.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "أمر البناء '%s' فشل.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr ""
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "فشل تغيير اسم %s إلى %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "الحزمة %s النسخة %s لها معتمد غير مستوفى:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "لا يقبل الأمر update أية مُعطيات"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "لا يقبل الأمر update أية مُعطيات"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "أسماء الحزم الكلية :"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "أسماء الحزم الكلية :"
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " الحزم العادية:"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr "الحزمة الوهمية تماماً:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " الحزمة الوهمية المفردة:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " الحزم الوهمية المختلطة:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " مفقودة:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "مجموع النسخ الفريدة:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "مجموع النسخ الفريدة:"
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "مجموع المعتمدات:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "مجموع علاقات النسخ/الملفات:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "مجموع علاقات النسخ/الملفات:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "مجموع علاقات النسخ/الملفات:"
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "مجموع المساحة المحسوب حسابها:"
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "الرجاء كتابة اسم لهذا القرص، مثال 'Debian 2.1r1 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "الرجاء إدخال قرص في السواقة وضغط الزر enter"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "فشل تغيير اسم %s إلى %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "كرر هذه العملية لباقي الأقراص المدمجة في المجموعة."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "تعذر الحصول على نسخة debconf. هل هي مثبتة؟"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "تعذر العثور على الحزمة %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "الوحدات المدعومة:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Retrieve new lists of packages"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Remove packages"
+msgstr "حزم معطوبة"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Download source archives"
+msgstr "يجب جلب %sب من الأرشيفات المصدريّة.\n"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "يجب تحديد حزمة واحدة على الأقل لجلب مصدرها"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "إلا أنها غير مثبتة"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "سيتم تثبيت الحزم الجديدة التالية:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s هي النسخة الأحدث.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s هي النسخة الأحدث.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "فشل فتح %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "سيتم تثبيت الحزم الجديدة التالية:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "سجل حزمة مجهول!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "قراءة قوائم الحزم"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "الحزم المُدبّسة:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "الحزم المُدبّسة:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "حزم معطوبة"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "إلا أنه سيتم تثبيت %s"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "دمج المعلومات المتوفرة"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "إعداد افتراضيّ سيّء!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "اضغط مفتاح الإدخال للاستمرار."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "حدثت بعض الأخطاء أثناء فك الحزمة. سأقوم بتهيئة "
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "الحزم التي تم تثبيتها. قد يتسبب هذا بظهر أخطاء متكررة"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "أو أخطاء سبّبتها المُعتمدات المفقودة. لا بأس بهذا، فقط الأخطاء"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "أعلى هذه الرسالة مهمّة. الرجاء تصحيحها وتشغيل التثبيت مجدداً"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "دمج المعلومات المتوفرة"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "قائمة توسيعات الحزمة طويلة جداً"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "خطأ في معالجة الدليل %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "قائمة توسيعات المصدر طويلة جداً"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "خطأ في كتابة الترويسة إلى ملف المحتويات"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "خطأ في معالجة المحتويات %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "لم تُطابق أية تحديدات"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "بعض الملفات مفقودة في مجموعة ملف الحزمة `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "قاعدة البيانات كانت فاسدة، فتم تغيير اسمها إلى %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "قاعدة البيانات قديمة، محاولة ترقية %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "تعذر فتح ملف قاعدة البيانات %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "تعذرت إزالة %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr ""
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - فشل تعيين الذاكرة"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr ""
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "خطأ داخلي، تعذر إنشاء %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "تعذر فتح %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: تعذرت قراءة الدليل %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "فشل فتح %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** فشل ربط %s بـ%s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "بانتظار الترويسات"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "أرسل خادم http ترويسة ردّ غير صالحة"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "سطر ترويسة سيء"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "أرسل خادم http ترويسة طول محتويات (ِContent-Length) غير صالحة"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "أرسل خادم http ترويسة مدى محتويات (ِContent-Range) غير صالحة"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "خادم http له دعم مدى معطوب"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "نسق تاريخ مجهول"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "بيانات ترويسة سيئة"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "فشل الاتصال"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "خطأ داخلي"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "تعذرت قراءة قاعدة بيانات القرص المدمج %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"الرجاء استخدام apt-cdrom لتعريف APT بهذا القرص المدمج. لا يمكن استخدام apt-"
+"get update لإضافة أقراص مدمجة جديدة."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "القرص المدمج الخطأ"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "تعذر فكّ القرص المدمج من %s، إذ قد يكون لا يزال قيد الاستخدام."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "لم يُعثر على القرص."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "لم يُعثر على الملف"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "الاتصال بـ%s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "الاتصال بـ%s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "تعذر تمهيد الاتصال بـ%s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "فشل"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "تعذر الاتصال بـ%s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "تعذر الاتصال بـ%s:%s (%s)، انتهى وقت الاتصال"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "الاتصال بـ%s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "تعذر الاتصال بـ%s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "فشيل تنفيذ stat"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr ""
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "تسجيل الدخول"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "رفض الخادم اتصالنا بالرد: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "فشل USER، ردّ الخادم: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "فشل PASS، ردّ الخادم: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"تم تحديد خادم بروكسي ولكن دون نص تسجيل دخول برمجي، Acquire::ftp::ProxyLogin "
+"فارغ."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "فشل أمر نص تسجيل الدخول البرمجي '%s'، ردّ الخادم: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "فشل TYPE، ردّ الخادم: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "انتهى وقت الاتصال"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "أغلق الخادم الاتصال"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "تعذر إرسال الأمر PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "فشل EPRT، ردّ الخادم: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "تعذر قبول الاتصال"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "تعذر إحضار الملف، ردّ الخادم '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "فشل نقل البيانات، ردّ الخادم '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "استعلام"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr ""
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr ""
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "خطأ في الكتابة إلى الملف"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "خطأ في القراءة من الخادم. أقفل الطرف الآخر الاتصال"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "خطأ في القراءة من الخادم"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "خطأ في الكتابة إلى الملف"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "فشل التحديد"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "انتهى وقت الاتصال"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "خطأ في الكتابة إلى ملف المُخرجات"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "فشل تعيين وقت التعديل"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr ""
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "توقيع الأرشيف غير صالح"
+
+#~ msgid "Removed %s"
+#~ msgstr "تم إزالة %s"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "فشل إغلاق الملف %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "فشل إغلاق الملف %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "فتح ملف التهيئة %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "فتح %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "مُعتمدات غير مستوفاة. حاول استخدام --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "قد ترغب بتشغيل 'apt --fix-broken install' لتصحيح هذه:"
+
+#~ msgid "(not found)"
+#~ msgstr "(غير موجود)"
+
+#~ msgid "Failed to fetch %s %s\n"
+#~ msgstr "فشل إحضار %s %s\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "المسار %s طويل جداً"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "يجب تحديد حزمة واحدة على الأقل لجلب مصدرها"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "فشل تنفيذ gzip"
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s لـ%s %s مُجمّع على %s %s\n"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "تعذر فتح ملف قاعدة البيانات %s: %s"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "ليس هناك مساحة كافية في %s"
+
+#~ msgid "Done"
+#~ msgstr "تمّ"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "إجهاض التثبيت."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "خطأ داخلي، عطب AllUpgrade بعض الأشياء"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ليس حزمة DEB صالحة."
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum غير متطابقة"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "فتح ملف التهيئة %s"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "فشل تغيير دليل الإدارة إلى %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "خطأ داخلي أثناء الحصول على اسم الحزمة"
+
+#~ msgid "Reading file listing"
+#~ msgstr "قراءة سرد الملفات"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "فشلت قراءة ملف القائمة %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "خطأ داخلي أثناء الحصول على node"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "تعذر التغيير إلى %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "فشل العثور على ملف تحكّم صالح"
+
+#, fuzzy
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "فشل إغلاق الملف %s"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (UserPackage1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (UserPackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (UsePackage3)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewFileVer1)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "خطأ داخلي، تعذر العثور على العضو"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewVersion2)"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "خطأ في معالجة الدليل %s"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "السطر %d طويل جداً (أقصاه %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "السطر %d طويل جداً (أقصاه %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "حدث خطأ أثناء معالجة %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "فشل التحديد"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "تغير تاريخ الملف %s"
diff --git a/po/ast.po b/po/ast.po
new file mode 100644
index 0000000..cb0cf53
--- /dev/null
+++ b/po/ast.po
@@ -0,0 +1,4345 @@
+# iñigo varela <ivarela@softastur.org>, 2010.
+# maacub <maacub@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.7.18\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2010-10-02 23:35+0100\n"
+"Last-Translator: Iñigo Varela <ivarela@softastur.org>\n"
+"Language-Team: Asturian (ast)\n"
+"Language: ast\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Virtaal 0.5.2\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Robla del ficheru inválida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Fallu al lleer la testera de miembru del ficheru"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Testera de miembru del ficheru inválida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "El ficheru ye perpequeñu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Falló al lleer les testeres del ficheru"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nun puede alcontrase'l rexistru d'autenticación pa: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Ficheru tollíu"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Falló la suma de control de tar, ficheru tollíu"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Testera del TAR triba %u desconocida, miembru %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Esti nun ye un ficheru DEB válidu, falta'l miembru '%s'"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Error internu, nun se pue atopar el miembru %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Ficheru de control inanalizable"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Falló la escritura nel ficheru %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Falló al pesllar el ficheru %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "La trayeutoria %s ye enforma llarga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Desempaquetando %s más d'una vegada"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "El direutorio %s ta desviáu"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "El paquete ta tentando escribir nel oxetivu desviáu %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "La trayeutoria de desviación ye enforma llarga"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Nun pudo lleese %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Nun pudo renomase %s como %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "El direutoriu %s ta reemplazándose por un non-direutoriu"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Fallu al atopar el nodu nel so bote d'enllaz"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "La trayeutoria ye perllarga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Sobreescribiendo concordancia del paquete ensin versión pa %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "El ficheru %s/%s sobreescribe al que ta nel paquete %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Nun ye a lleer %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Nun ye a lleer %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Llamóse a DropNode nun nodu que ta entá enllazáu"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "¡Fallu al atopar l'elementu enllazáu!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Falló al allugar una desvíu"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Fallu internu en AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Intentando sobrescribir un desvíu, %s -> %s and %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Doble suma de desvíu %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Ficheru de configuración duplicáu %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "El direutorio %s ta desviáu"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "El direutorio %s ta desviáu"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "El direutorio %s ta desviáu"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "El direutorio %s ta desviáu"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "El direutorio %s ta desviáu"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Nun pudo lleese l'enllaz %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "La suma hash nun concasa"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "falló'l cambiu de nome, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "El tamañu nun concasa"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Operación incorreuta: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Fallu d'escritura"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Hebo un fallu durante la verificación de la robla. El repositoriu nun ta "
+"anováu y va usase un ficheru índiz. Fallu GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Fallu GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Conflictu de distribución: %s (esperábase %s pero obtúvose %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Falló algamar %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Nun pudo alcontrase un ficheru pal paquete %s. Esto puede significar que "
+"necesites iguar manualmente esti paquete (por faltar una arquitectura)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Coneutando a %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Nun pudo alncontrase'l controlador de métodu %s."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Comprueba qu'el paquete 'dpkg-dev' ta instaláu.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "El métodu %s nun entamó correchamente"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Por favor, introduz el discu '%s' nel preséu '%s' y calca Intro."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Falta'l direutoriu de llistes %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Falta'l direutoriu d'archivos %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Nun pudo bloquiase'l direutoriu %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "La triba de ficheru d'indiz '%s' nun ta sofitada"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Descargando ficheru %li de %li (falten %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Descargando ficheru %li de %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"El paquete %s necesita reinstalase, pero nun s'alcuentra un archivu pa el."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Error, pkgProblemResolver::Resolve xeneró frañadures, esto puede ser pola "
+"mor de paquetes reteníos."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Nun pueden iguase los problemes; tienes paquetes frañaos reteníos."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Nun pudieron analizase o abrise les llistes de paquetes o el ficheru d'estáu."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Has d'executar apt-get update pa iguar estos problemes"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Nun pudo lleese la llista de fontes."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Error de compilación d'espresión regular - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Nun s'alcontró la distribución '%s' pa '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Nun s'alcontró la versión '%s' pa '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Nun pudo alcontrase la xera '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Nun pudo alcontrase dengún paquete por regex '%s'"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Nun pudo alcontrase dengún paquete por regex '%s'"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Nun pue alcontrase'l paquete %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Nun pueden seleicionase versiones pal paquete'%s' como puramente virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Nun puede seleicionase la versión más nueva pal paquete'%s' como puramente "
+"virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Nun puede seleicionase versión candidata pal paquete %s que nun tien "
+"candidata"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Nun puede seleicionase versión instalada pal paquete %s que nun ta instalada"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Nun puede seleicionase l'instalador o versión candidata pal paquete '%s' "
+"como non tien nengún d'ellos"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Llinia %u enforma llarga na llista d'oríxenes %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Desmontando'l CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Usando el puntu de montaxe de CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Esperando'l discu...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montando'l CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificando... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Etiqueta guardada: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Buscando nel discu ficheros d'índices...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Atopáu %zu indices de paquete, %zu indices de fonte, %zu indices de torna y "
+"%zu firmes\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Nun s'alcuentra dengún paquete de ficheros, seique nun ye un Discu Debian o "
+"hai una arquiteutura inválida?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Atopóse la etiqueta: '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Esi nun ye un nome válidu; inténtalo otra vuelta.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Esti discu llámase: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Copiando les llistes de paquetes..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Escribiendo llista nueva d'oríxenes\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Les entraes de la llista d'oríxenes pa esti discu son:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nun se pudo cambiar a %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Nun pudo lleese %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Nun puede algamase información del puntu de montaxe %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Nun se pudo montar el CD-ROM"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "La opción de llinia d'ordes '%c' [de %s] ye desconocida."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Nun s'entiende la opción %s de la llinia d'ordes"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "La opción %s de la llinia d'ordes nun ye un valor booleanu"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "La opción %s necesita un argumentu."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Opción %s: L'axuste del elementu de configuración ha tener un =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "La opción %s pide un argumentu enteru, non '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opción '%s' enforma llarga"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "El sentíu %s nun s'entiende, prueba con braeru o falsu."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operación incorreuta: %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Triba d'abreviatura que nun se reconoz: «%c»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Fallu de sintaxis %s:%u: Nun hai un nome al entamu del bloque."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Fallu de sintaxis %s:%u: Marca mal formada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Fallu de sintaxis %s:%u: Puxarra extra dempués del valor"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Error de sintaxis %s:%u: Les directives pueden facese sólo nel nivel cimeru"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Fallu de sintaxis %s:%u: Demasiaes inclusiones añeraes"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Fallu de sintaxis %s:%u: Incluyendo dende equí"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Error de sintaxis %s:%u: La directiva '%s' nun ta sofitada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Fallu de sintaxis %s:%u: Directiva llimpia requier un tres opciones como "
+"argumentos"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Fallu de sintaxis %s:%u: Puxarra extra al final del ficheru"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Hai problemes desvenceyando'l ficheru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Nun ta usándose bloquéu pal ficheru de bloquéu de sólo llectura %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Nun puede abrise'l ficheru de bloquéu %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Nun ta usándose bloquéu pal ficheru de bloquéu %s montáu per nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Nun se pudo torgar %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Esperaba %s pero nun taba ellí"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "El subprocesu %s recibió un fallu de segmentación."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "El subprocesu %s recibió una señal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "El subprocesu %s devolvió un códigu d'error (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "El subprocesu %s terminó de manera inesperada"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Fallu de llectura"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Fallu d'escritura"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problemes zarrando'l ficheru gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Nun pudo criase'l soprocesu IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Nun pudo executase'l compresor "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nun se pudo abrir el ficheru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nun pudo abrise un ficheru descriptor %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lleíos, entá tenía de lleer %lu pero nun queda nada"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "escritos, entá tenía d'escribir %lu pero nun pudo facerse"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problemes zarrando'l ficheru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Hai problemes al renomar el ficheru %s a %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Hai problemes al sincronizar el ficheru"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Nun ye a lleer %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Nun se pue escribir en %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Nun se puede facer mmap d'un ficheru baleru"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Nun se pudo facer mmap de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Nun pudo duplicase'l ficheru descriptor %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Nun pudo zarrase mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Nun se pudo sincronizase mmap "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Nun se pudo facer mmap de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Falló al francer el ficheru"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dynamic MMap escosó l'espaciu. Por favor aumenta'l tamañu de APT::Cache-"
+"Start. El valor actual ye : %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Nun pudó incrementase'l tamañu de MMap col llímite de %lu bytes ya torgáu"
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Nun pudó incrementase'l tamañu de MMap ya que crecer automáticamente ta "
+"desactivao pol usuariu."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... ¡Fallu!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Fecho"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Fecho"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Escoyeta %s que nun s'atopa"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Nun se pudo parchear el ficheru release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Ensin seiciones nel ficheru release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Ensin entrada Hash nel ficheru release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Entrada inválida pa '%s' nel ficheru release %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Nun se pudo tratar el ficheru de paquetes %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Nun pudó bloquease'l direutoriu d'alministración (%s), ¿hai otru procesu "
+"usándolu?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Nun pudo bloquiase'l direutoriu d'alministración (%s), ¿yes root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg interrumpióse, tienes qu'executar manualmente '%s' pa iguar el "
+"problema. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Nun pudó bloquease'l direutoriu d'alministración (%s), ¿hai otru procesu "
+"usándolu?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Nun pudo bloquiase'l direutoriu d'alministración (%s), ¿yes root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Non bloquiáu"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Preparando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Preparándose pa configurar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Preparándose pa desinstalar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Preparándose pa desinstalar dafechu %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Anotando desaniciáu de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Executando activador de post-instalación de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s instaláu"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Configurando %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Falta'l direutoriu '%s'."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Nun pudo abrise'l ficheru '%s'"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Desempaquetando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Instalando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Desinstalando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Desinstalóse dafechu %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Desinstalóse dafechu %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Nun se pue escribir en %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Ensin informe escritu d'apport porque MaxReports llegó dafechu"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problemes de dependencies - déxase ensin configurar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Ensin informe escritu d'apport porque'l mensax de fallu indica un fallu que "
+"siguió dende un fallu previu"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Ensin informe escritu d'apport porque'l mensax de fallu indica un fallu de "
+"discu llenu"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Ensin informe escritu d'apport porque'l mensax de fallu indica un fallu de "
+"memoria"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Ensin informe escritu d'apport porque'l mensax de fallu indica un fallu de "
+"discu llenu"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Ensin informe escritu d'apport porque'l mensax de fallu indica un fallu E/S "
+"dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Creando árbol de dependencies"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versiones candidates"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Xeneración de dependencies"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Lleendo información d'estáu"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Nun se pudo abrir el ficheru d'estáu %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Falló la escritura del ficheru temporal d'estáu %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i rexistros escritos.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i rexistros escritos con %i ficheros de menos.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i rexistros escritos con %i ficheros mal empareyaos\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Escribiéronse %i rexistros con %i ficheros perdíos y %i ficheros que nun "
+"concasen\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Nun puede alcontrase'l rexistru d'autenticación pa: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "El hash nun concasa pa: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "El sistema d'empaquetáu '%s' nun ta sofitáu"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Nun pudo determinase una triba de sistema d'empaquetáu afayadiza"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Executando dpkt"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Nun pudó facese la configuración inmediatamente en '%s'. Por favor, mira man "
+"5 apt.conf embaxo APT::Immediate-Configure for details. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Nun pudo abrise'l ficheru '%s'"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Esta execución d'instalación va requerir desaniciar temporalmente'l paquete "
+"esencial %s por un cote de Conflictos/Pre-Dependencies. Esto normalmente ye "
+"malo, pero si daveres quies facelo, activa la opción APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Caché de paquetes balera."
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "El ficheru de caché de paquetes ta tollíu"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "El ficheru de caché de paquetes ye una versión incompatible"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Esti APT nun soporta'l sistema de versiones '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "La caché de paquetes creóse pa una arquitectura estremada"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "El ficheru de caché de paquetes ta tollíu"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Depende de"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Predepende de"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Suxer"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "En conflictu con"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recomienda"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Sustituye a"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Ruempe"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Aumenta"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Fai obsoletu a"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "importante"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "requeríu"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "estándar"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "La caché tien un sistema de versiones incompatible"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Hebo un error al procesar %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Coime, perpasaste'l númberu de nomes de paquete qu'esti APT ye a remanar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Vaya, perpasaste'l númberu de versiones coles que puede esti APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Coime, perpasaste'l númberu de descripciones qu'esti APT ye a remanar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Vaya, perpasaste'l númberu de dependencies coles que puede esti APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Lleendo llista de paquetes"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Fallu de E/S al grabar caché d'oríxenes"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "La triba de ficheru d'indiz '%s' nun ta sofitada"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Rexistru inválidu nel ficheru de preferencies %s, nun hai cabecera Paquete"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Nun s'entiende'l tipu de pin %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Nun hai prioridá (o ye cero) conseñada pa pin"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Saltu mal formáu %s llinia %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Llinia %u mal formada na llista d'oríxenes %s (triba)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Triba '%s' desconocida na llinia %u de la llista d'oríxenes %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Llinia %u mal formada na llista d'oríxenes %s (triba)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Triba '%s' desconocida na llinia %u de la llista d'oríxenes %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Has de poner delles URIs 'fonte' nel ficheru sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Nun pudieron descargase dellos ficheros d'índiz; inoráronse o usáronse los "
+"antiguos nel so llugar."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Calculando l'anovamientu"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Oxe:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Des:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Descargaos %sB en %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Tresnando]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Cambeu de mediu: Por favor meti'l discu etiquetáu\n"
+" '%s'\n"
+"na unidá '%s' y calca Intro\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Iguando dependencies..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " falló."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Nun pudieron iguase les dependencies"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Nun pue amenorgase'l conxuntu d'actualización"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Fecho"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Habríes d'executar 'apt --fix-broken install' para igualo."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dependencies ensin cubrir. Tenta 'apt --fix-broken install' ensin paquetes "
+"(o conseña una solución)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Nota, escoyendo '%s' pa la xera '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Nota, escoyendo '%s' pa regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Nota, escoyendo '%s' pa regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "El paquete %s ye un paquete virtual ufríu por:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Instaláu]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Nun ye versión candidata]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Has d'escoyer esplícitamente unu pa instalar."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"El paquete %s nun ta disponible, otru paquete refierse a él.\n"
+"Esto puede significar que falta el paquete, ta arrumbáu, o sólo\n"
+"ta disponible dende otra fonte\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Sicasí, los siguientes paquetes reemplacenlu:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "El paquete '%s' nun tien candidatu pa instalación"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Los paquetes virtuales como '%s' nun pueden desaniciase\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "El paquete %s nun ta instalau, nun va desaniciase\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "El paquete %s nun ta instalau, nun va desaniciase\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Nota, escoyendo %s nel llugar de %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Esti APT tien Poderes de Super Vaca."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Nun s'alcontraron paquetes"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "AVISU: ¡Nun pudieron autenticase los siguientes paquetes!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Avisu d'autenticación saltáu.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Dellos paquetes nun pudieron autenticase"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "¿Instalar esos paquetes ensin verificación?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Hai problemes y utilizose -y ensin --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Nun pue determinase l'espaciu llibre de %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Nun tienes espaciu libre bastante en %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Nun pue bloquiase'l direutoriu de descarga"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Dellos paquetes nun pudieron instalase. Esto puede significar que\n"
+"conseñaste una situación imposible o, si tas usando la distribución\n"
+"inestable, que dellos paquetes necesarios nun se crearon o que\n"
+"s'allugaron fuera d'Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "La siguiente información pue aidar a resolver la situación:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Paquetes frañaos"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Nun pudieron algamase dellos archivos, ¿seique executando apt-get update o "
+"tentando --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Error internu, ¡InstallPackages llamose con paquetes frañaos!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Fai falta desaniciar los paquetes pero desaniciar ta torgáu."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Hai problemes y utilizose -y ensin --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Hai problemes y utilizose -y ensin --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Error internu, ordenar nun finó"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Que raro... Los tamaños nun concasen, escribe a apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Hai que descargar %sB/%sB d'archivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Hai que descargar %sB d'archivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Tres d'esta operación, van usase %sB d'espaciu de discu adicional.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Tres d'esta operación, van lliberase %sB d'espaciu de discu.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Conseñose Trivial Only pero ésta nun ye una operación trivial."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Sí, ¡facer lo que digo!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Tas a piques de facer daqué potencialmente dañible.\n"
+"Pa continuar escribe la frase '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Encaboxar."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "¿Quies continuar?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Dellos ficheros nun pudieron descargase"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Descarga completa y en mou de sólo descarga"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing y cambéu de mediu nun ta sofitao actualmente"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Nun pudieron iguase los paquetes que falten."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Encaboxando la instalación."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"El siguiente paquete desapareció del sistema como\n"
+"tolos ficheros fueron sobroescritos por otros paquetes:"
+msgstr[1] ""
+"Los siguientes paquetes desaparecieron del sistema como\n"
+"tolos ficheros fueron sobroescritos por otros paquetes:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Nota: Esto faise automáticamente y baxo demanda por dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Suponse que nun vamos esborrar coses; nun pue entamase AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, paez que AutoRemover destruyó daqué, lo que nun tendría\n"
+"por qué pasar. Por favor, unvía un informe de fallu escontra apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Error internu, AutoRemover rompió coses"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "El siguiente paquete instalóse mou automáticu y yá nun se necesita:"
+msgstr[1] ""
+"Los siguientes paquetes instaláronse de manera automática y ya nun se "
+"necesiten:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "El paquete %lu instalóse de mou automáticu y yá nun se necesita.\n"
+msgstr[1] ""
+"Los paquetes %lu instaláronse de manera automática y ya nun se necesiten\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Usa '%s' pa desinstalalos."
+msgstr[1] "Usa '%s' pa desinstalalos."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Instalaránse los siguientes paquetes extra:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Paquetes afalaos:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Paquetes encamentaos"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Saltando %s, ya ta instalau y la actualización nun ta activada.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Saltando %s, nun ta instaláu y namái se requieren anovamientos.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "La reinstalación de %s nun ye dable, nun pue descargase.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s yá ta na versión más nueva.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s axustáu como instaláu manualmente.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Esbillada la versión %s (%s) pa %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Esbillada la versión %s (%s) pa %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"NOTA: ¡Esto sólo ye una simulación!\n"
+" %s necesita privilexos de root pa la execución real.\n"
+" ¡Ten tamién en cuenta que'l bloquéu ta desactiváu,\n"
+" asina que nun dependen de la pertinencia de la verdadera situación "
+"actual!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Instaláu]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Instaláu]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Instaláu]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Instaláu]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "pero %s ta instaláu"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "pero %s ta pa instalar"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "pero nun ye instalable"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "pero ye un paquete virtual"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "pero nun va instalase"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "pero nun ta instaláu"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " o"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Los siguientes paquetes nun cumplen dependencies:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Van instalase los siguientes paquetes NUEVOS:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Los siguientes paquetes van DESANICIASE:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Los siguientes paquetes tan reteníos:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Los siguientes paquetes van actualizase:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Los siguientes paquetes van DESACTUALIZASE:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Van camudase los siguientes paquetes reteníos:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (por %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"AVISU: Los siguientes paquetes esenciales van desaniciase.\n"
+"¡Esto NUN hai que facelo si nun sabes esautamente lo que faes!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu actualizaos, %lu nuevos instalaos, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstalaos, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu desactualizaos, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu para desaniciar y %lu nun actualizaos.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu nun instalaos dafechu o desaniciaos.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[S/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[s/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "S"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Has de dar polo menos un patrón de gueta"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Ficheros de paquete:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"La caché nun ta sincronizada, nun puede facese x-ref a un ficheru de paquete"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Paquetes na chincheta:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instaláu: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidatu: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(dengún)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabla de versiones:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Nun pudo alcontrase dengún paquete por regex '%s'"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Nun pudo alcontrase dengún paquete por regex '%s'"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Nun pudo alcontrase dengún paquete por regex '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Tomando '%s' como paquetes d'oríxenes en llugar de '%s'\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Inorar versión non disponible de '%s' del paquete '%s'"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Has de conseñar polo menos un paquete p'algamar so fonte"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Nun pudo alcontrase un paquete fonte pa %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"AVISU: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Por favor, usa:\n"
+"bzr get %s\n"
+"pa baxar los caberos anovamientos (posiblemente tovía nun sacaos) pal "
+"paquete.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Saltando'l ficheru yá descargáu '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Hai falta descargar %sB/%sB d'archivos fonte.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Hai falta descargar %sB d'archivos fonte.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Fonte descargada %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Falló la descarga de dellos archivos."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Saltando'l desempaquetáu de la fonte yá desempaquetada en %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Falló la orde de desempaquetáu '%s'.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Comprueba qu'el paquete 'dpkg-dev' ta instaláu.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Falló la orde build '%s'.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Nun pudo algamase información de dependencies de construcción pa %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s nun tien dependencies de construcción.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Hai que conseñar polo menos un paquete pa verificar les dependencies de "
+"construcción"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Fallu al procesar les dependencies de construcción"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Fallu al procesar les dependencies de construcción"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Nun pudo renomase %s como %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "El paquete %s versión %s nun cumple una dependencia:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "La orde update nun lleva argumentos"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "La orde update nun lleva argumentos"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Total de nomes de paquetes: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Total de cadarmes de paquetes: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Paquetes normales: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Paquetes virtuales puros: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Paquetes virtuales cenciellos: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Paquetes virtuales amestaos: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Falten: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Versiones distintes en total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Descripciones distintes en total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Dependencies totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Rellaciones versión/ficheru en total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Rellaciones descripción/ficheru en total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Mapes de provisiones en total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Cadenes globalizaes en total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Espaciu ociosu en total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Informe del total d'espaciu: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Amuesa los rexistros de fonte"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Restola na llista de paquetes por el patrón d'una espresión regular"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Amuesa la información de dependencies en bruto d'un paquete"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Amuesa la información de dependencies inverses d'un paquete"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Amuesa un rexistru lleíble pal paquete"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Llista los nomes de tolos paquetes nel sistema"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Amuesa los axustes de les normes"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Da-y un nome a esti discu, como 'Debian 5.0.3 Discu 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Inxerta un discu nel preséu y calca intro"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Falló al montar '%s' a '%s'"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Repite'l procesu colos demás CDs del conxuntu."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumentos non empareyaos"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Usu: apt-config [opciones] orde\n"
+"\n"
+"apt-config ye una ferramienta pa lleer el ficheru de configuración d'APT.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Usu: apt-extracttemplates ficheru1 [ficheru2 ...]\n"
+"\n"
+"apt-extracttemplates ye un preséu pa sacar información de\n"
+"configuración y plantíes de paquetes de debian.\n"
+"\n"
+"Opciones:\n"
+"-h Esti testu d'aida.\n"
+"-t Define'l direutoriu temporal\n"
+"-c=? Llei esti ficheru de configuración\n"
+"-o=? Afita una opción de configuración arbitraria, p. ej. -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Nun se pue alcontrar la versión de debconf. ¿Ta instaláu debconf?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Nun pudo alcontrase'l paquete %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s axustáu como instaláu automáticamente.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Error internu, l'iguador de problemes frañó coses"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Módulos sofitaos:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Usu: apt-get [opciones] comandu\n"
+" apt-get [opciones] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [opciones] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get ye una interface de llínia de comandos simple pa baxar ya\n"
+"instalar paquetes. L'usu más frecuente de comandos ye p'anovar\n"
+"ya instalar.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Algamar nueva llista de paquetes"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Facer una anovación"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalar nuevos paquetes (pkg ye libc6 non libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalar nuevos paquetes (pkg ye libc6 non libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Desaniciar paquetes"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Quitar y desaniciar paquetes"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Desaniciar automáticamente tolos paquetes non usaos"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Actualización de la distribución, ver apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Siguir seleiciones dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configurar dependencies pa los paquetes fonte"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Esborrar los ficheros de ficheros baxaos"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Esborrar ficheros de ficheros vieyos baxaos"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verificar que nun hai dependencies frayaes"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Baxar fonte del ficheru"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Has de conseñar polo menos un paquete p'algamar so fonte"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Usu: apt-extracttemplates ficheru1 [ficheru2 ...]\n"
+"\n"
+"apt-extracttemplates ye un preséu pa sacar información de\n"
+"configuración y plantíes de paquetes de debian.\n"
+"\n"
+"Opciones:\n"
+"-h Esti testu d'aida.\n"
+"-t Define'l direutoriu temporal\n"
+"-c=? Llei esti ficheru de configuración\n"
+"-o=? Afita una opción de configuración arbitraria, p. ej. -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Usu: apt-extracttemplates ficheru1 [ficheru2 ...]\n"
+"\n"
+"apt-extracttemplates ye un preséu pa sacar información de\n"
+"configuración y plantíes de paquetes de debian.\n"
+"\n"
+"Opciones:\n"
+"-h Esti testu d'aida.\n"
+"-t Define'l direutoriu temporal\n"
+"-c=? Llei esti ficheru de configuración\n"
+"-o=? Afita una opción de configuración arbitraria, p. ej. -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "pero nun ta instaláu"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s axustáu como instaláu manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s axustáu como instaláu automáticamente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Van instalase los siguientes paquetes NUEVOS:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s yá ta na versión más nueva.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s yá ta na versión más nueva.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s axustáu como instaláu manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Nun pudo abrise %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s axustáu como instaláu automáticamente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Comprueba qu'el paquete 'dpkg-dev' ta instaláu.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s axustáu como instaláu automáticamente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s axustáu como instaláu automáticamente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s axustáu como instaláu manualmente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "¡Rexistru de paquetes desconocíu!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Lleendo llista de paquetes"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Paquetes na chincheta:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Paquetes na chincheta:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Paquetes frañaos"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s axustáu como instaláu manualmente.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Lleendo información d'estáu"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "¡Mal axuste por omisión!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Calca Intro pa continuar."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "¿Quies desaniciar los ficheros .deb descargaos previamente?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Ocurrieron dellos errores al desempaquetar. Los paquetes que s'instalaron "
+"configurarse'l"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "van configurase. Esto pue causar errores duplicaos"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"o fallos causaos por dependencies que nun tán. Esto ta BIEN, sólo los fallos"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"enriba d'esti mensaxe son importante. Por favor, íguales y executa [I]nstall "
+"otra vuelta"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Fusionando información disponible"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "La llista d'estensión de paquetes ye enforma llarga"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Error al procesar el direutoriu %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "La llista d'estensión de fontes ye enforma llarga"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Error al escribir la cabecera al ficheru de conteníos"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Error al procesar conteníos %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Uso: apt-ftparchive [escoyetes] orde\n"
+"Ordes: packages camin-binariu [ficheru-disvíos [prefixu-camin]]\n"
+" sources camin-fonte [ficheru-disvíos [prefixu-camin]]\n"
+" contents camin\n"
+" release camin\n"
+" generate config [grupos]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive xenera índices p'archivos de Debian. Sofita dellos\n"
+"estilos de xeneración de reemplazos pa dpkg-scanpackages y\n"
+"dpkg-scansources, dende los automatizáos dafechu a los funcionales .\n"
+"\n"
+"apt-ftparchive xenera ficheros Package d'un árbol de .debs. El ficheru\n"
+"Package tien los conteníos de tolos campos de control de cada paquete,\n"
+"neto que la suma MD5 y el tamañu del ficheru. Puede usase un ficheru\n"
+"de disvíos pa forzar el valor de Priority y Section.\n"
+"\n"
+"De mou asemeyáu, apt-ftparchive xenera ficheros Sources pa un árbol\n"
+"de .dscs. Puede utilizase la opción --source-override pa conseñar un\n"
+"ficheru de disvíu de fonte.\n"
+"\n"
+"Les ordes «packages» y «sources» han d'executase na raiz de l'árbol.\n"
+"BinaryPath tien qu'apuntar a la base de la gueta recursiva, y el ficheru\n"
+"de disvíos tien que contener les marques de los disvíos. El prefixu de\n"
+"camín, si esiste, améstase a los campos de nome de ficheru. Darréu,\n"
+"un exemplu d'usu basáu nos archivos de Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Escoyetes:\n"
+" -h Esti testu d'aida\n"
+" --md5 Xenerar control MD5 \n"
+" -s=? Ficheru de desvíu de fontes\n"
+" -q Sele\n"
+" -d=? Seleiciona la base de datos de caché opcional \n"
+" --no-delink Activa'l mou de depuración de desenllaces\n"
+" --contents Xenerar ficheru de conteníos de control\n"
+" -c=? Lleer esti ficheru de configuración\n"
+" -o=? Afita una escoyeta de configuración propia"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nun concasó denguna seleición"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Falten dellos ficheros nel grupu de ficheros de paquete `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "La BD corrompiose, ficheru renomáu como %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "La DB ye antigua, tentando actualizar %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"El formatu de la base de datos nun ye válidu. Si anovaste dende una versión "
+"anterior d'apt, desanicia y recrea la base de datos."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Nun pudo abrise'l ficheru de BD %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Nun pudo lleese l'enllaz %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "L'archivu nun tien rexistru de control"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Nun pudo algamase un cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Nun pudo allugase memoria"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algoritmu de compresión desconocíu '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "La salida comprimida %s necesita un xuegu de compresión"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Falló criar un tubu IPC al soprocesu"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Nun pudo biforcase"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Comprimir fíu"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Error internu, nun pudo criase %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Fallu na ES al soprocesu/ficheru"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Nun pudo lleese al computar MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Nun pudo abrise %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Saltu mal formáu %s llinia %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Nun pudo lleese'l ficheru de saltos %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Saltu mal formáu %s llinia %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Saltu mal formáu %s llinia %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Saltu mal formáu %s llinia %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: Nun pudo lleese'l direutoriu %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: Nun pudo lleese %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Errores aplicables al ficheru "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Nun pudo resolvese %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Falló'l percorríu pol árbol"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Nun pudo abrise %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Desenllazar %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Falló enllazar enllazr %s a %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Alcanzose'l llímite of %sB de desenllaz.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "L'archivu nun tien el campu paquetes"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s nun tien la entrada saltos\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " el curiador de %s ye %s y non %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s nun tien la entrada saltos de fonte\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s tampoco nun tiene una entrada binaria de saltos\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Esperando les testeres"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "El sirvidor HTTP mandó una testera incorreuta de rempuesta"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Fallu na llinia testera"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "El sirvidor HTTP mandó una testera incorreuta de Content-Length"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "El sirvidor HTTP mandó una testera incorreuta de Content-Range"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Esti sirvidor HTTP tien rotu'l soporte d'alcance"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Formatu de data desconocíu"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Datos de testera incorreutos"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Fallo la conexón"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Fallu internu"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Nun se pudo lleer la base datos %s del CD-ROM"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Por favor usa apt-cdrom pa facer qu'APT reconoza esti CD. apt-get update nun "
+"se puede usar p'amestar CDs nuevos"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD-ROM malu"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Nun se pudo desmontar el CD-ROM de %s; puede que se tea usando entá."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Nun s'atopa'l discu."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Nun s'atopa'l ficheru."
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Coneutando a %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Coneutando a %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Nun se pudo crear un socket pa %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Nun se pudo coneutar a %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Falló"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Nun se pudo coneutar a %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Nun se pudo coneutar a %s:%s (%s); expiró'l tiempu de conexón"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Coneutando a %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nun se pudo resolver '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Fallu temporal al resolver '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Daqué raro asocedió resolviendo '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Daqué raro asocedió resolviendo '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nun pudo coneutase a %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Falló al lleer"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI malu, los URIS llocales nun pueden entamar por //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Entrando"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Nun se pudo determinar el nome del par"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Nun se pudo determinar el nome llocal"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "El sirvidor refugó la conexón, y dixo: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "L'usuariu (USER) falló; el sirvidor dixo: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "La contraseña (PASS) falló; el sirvidor dixo: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Especificóse un sirvidor proxy pero non un script d'entrada, Acquire::ftp::"
+"ProxyLogin ta baleru."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Falló la orde '%s' del guión d'entrada; el sirvidor dixo: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "La triba (TYPE) falló; el sirvidor dixo: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Gandió'l tiempu de conexón"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "El sirvidor zarró la conexón"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Una rempuesta revirtió'l buffer."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Corrupción del protocolu"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Nun se pudo crear un socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Nun se pudo coneutar el zócalu de datos; gandió'l tiempu de conexón"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Nun se pudo coneutar un socket pasivu."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo nun pudo obtener un zócalu oyente"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Nun se pudo enllazar con un socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Nun se pudo escuchar nel socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Nun se pudo determinar el nome del socket"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Nun se pudo mandar la orde PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Direición de familia %u desconocida (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT falló; el sirvidor dixo: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Gandió'l tiempu de conexón col zócalu de datos"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Nun se pudo aceptar la conexón"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Hebo un problema al xenerar el hash del ficheru"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Nun se pudo descargar el ficheru; el sirvidor dixo '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Gandió'l tiempu del zócalu de datos"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Falló la tresferencia de datos; el sirvidor dixo '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Consulta"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Nun se pudo invocar "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Atopóse polo menos una robla mala."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Fallu internu: Robla bona, pero nun se pudo determinar la so buelga dixital?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Nun pudo executase 'apt-key' pa verificar la robla (¿ta instaláu gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Fallu desconocíu al executar apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Les siguientes robles nun valieron:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Les robles siguientes nun pudieron verificase porque la to llave pública nun "
+"ta a mano:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Fallu al escribir nel ficheru"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Fallu al lleer nel sirvidor. El llau remotu zarró la conexón."
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Fallu al lleer nel sirvidor"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Fallu al escribir nel ficheru"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Falló la escoyeta"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Gandió'l tiempu de conexón"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Fallu al escribir nel ficheru de salida"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Nun se pudo afitar la hora de modificación"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Conexón encaboxada prematuramente"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Testera de miembru del archivu %s inválida"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s desinstaláu"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "El ficheru de paquetes %s nun ta sincronizáu."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Los ficheros d'indiz de paquetes tan corrompíos. Nun hai campu Filename: "
+#~ "pal paquete %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Nun s'alcontró ficheru espeyu '%s'"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Nun s'alcontró ficheru espeyu '%s'"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Nun s'alcontró ficheru espeyu '%s'"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Espeyu: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Abriendo ficheros de configuración %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Abriendo %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dependencies incumplíes. Téntalo usando --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "Habríes d'executar 'apt --fix-broken install' para iguar estos:"
+
+#~ msgid "(not found)"
+#~ msgstr "(nun s'alcontró)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Chincheta de paquetes: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Nun hai clave pública denguna disponible pa les IDs de clave darréu:\n"
+
+#~ msgid "Failed to fetch %s %s\n"
+#~ msgstr "Falló algamar %s %s\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "El direutorio %s ta desviáu"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "La dependencia %s en %s nun puede satisfacese porque nun se puede atopar "
+#~ "el paquete %s"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "La dependencia %s en %s nun puede satisfacese porque nun se puede atopar "
+#~ "el paquete %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Nun se pudo satisfacer la dependencia %s pa %s: El paquete instaláu %s ye "
+#~ "enforma nuevu"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "La dependencia %s en %s nun puede satisfacese porque denguna versión "
+#~ "disponible del paquete %s satisfaz los requisitos de versión"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "La dependencia %s en %s nun puede satisfacese porque nun se puede atopar "
+#~ "el paquete %s"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Fallu pa satisfacer la dependencia %s pa %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Les dependencies de construcción de %s nun pudieron satisfacese."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problema al desenllazar %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Nun pudo desenllazase %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Usu: apt-cache [opciones] orde\n"
+#~ " apt-cache [opciones] show paq1 [paq2 ...]\n"
+#~ "\n"
+#~ "apt-cache ye una ferramienta de baxu nivel usada pa remanar\n"
+#~ "ficheros de caché binarios d'APT y consultar información d'ellos\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Opciones:\n"
+#~ " -h Esti testu d'aida.\n"
+#~ " -p=? La cache de paquetes.\n"
+#~ " -s=? La cache de fontes.\n"
+#~ " -q Desactiva l'indicador de progresu.\n"
+#~ " -i Amuesa sólo les dependencies importantes de la orde incumplida.\n"
+#~ " -c=? Lleer esti ficheru de configuración\n"
+#~ " -o=? Conseña una opción de configuración arbitraria, ex -o dir::cache=/"
+#~ "tmp\n"
+#~ "Ver les páxines del manual apt-cache(8) y apt.conf(5) pa más "
+#~ "información.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opciones:\n"
+#~ " -h Esti testu d'aida.\n"
+#~ " -c=? Llee esti ficheru de configuración\n"
+#~ " -o=? Conseña una opción de configuración arbitraria, p. ex.\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Usu: apt-sortpkgs [opciones] ficheru1 [ficheru2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs ye un preséu cenciellu pa tresnar ficheros de paquetes.\n"
+#~ "La opción -s úsase pa indicar qué triba de ficheru ye.\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ "-h Esti testu d'aida.\n"
+#~ "-s Usa ordenamientu de ficheros fonte\n"
+#~ "-c=? Llei esti ficheru de configuración\n"
+#~ "-o=? Afita una opción de configuración arbitraria, p. ej. -o dir::\n"
+#~ "cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Falló el procesu fíu"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Has de conseñar polo menos un paquete p'algamar so fonte"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Fallu al crear les tuberíes"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Fallu al executar gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s pa %s compiláu en %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Nun pudo criase FICHERU*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Llinia %lu mal formada na llista d'oríxenes %s (analís d'URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Llinia %lu mal formada na llista d'oríxe %s ([opción] nun parcheable)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Llinia %lu mal formada na llista d'oríxenes %s ([option] enforma curtia)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Llinia %lu mal formada na llista d'oríxenes %s ([%s] nun ye una "
+#~ "asignación)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Llinia %lu mal formada na llista d'oríxenes %s ([%s] nun tien clave)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Llinia %lu mal formada na llista d'oríxenes %s ([%s] clave %s nun tien "
+#~ "valor)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Llinia %lu mal formada na llista d'oríxenes %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Llinia %lu mal formada na llista d'oríxenes %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Llinia %lu mal formada na llista d'oríxenes %s (analís d'URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Llinia %lu mal formada na llista d'oríxenes %s (dist absoluta)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Llinia %lu mal formada na llista d'oríxenes %s (analís de dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Al procesar dependencies de ficheros nun s'alcontró el paquete %s %s"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Nun se puede lleer la llista de paquetes d'oríxenes %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Recoyendo ficheros qu'apurren"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Nun se pudo parchear el ficheru release %s"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "El bloque de fornidor %s nun contién una buelga dixital"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Espaciu de dependencies de versión en total: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Nun hai espaciu llibre bastante en %s"
+
+#~ msgid "Done"
+#~ msgstr "Fecho"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "L'aniellu de claves nun s'instaló en %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Error internu, AllUpgrade rompió coses"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s nun ye un paquete DEB válidu."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Usando el puntu de montaxe de CD-ROM %s\n"
+#~ "Montando el CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nun pudo parchease %s con mmap y col usu de la operación de ficheru - el "
+#~ "parche parez corruptu."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nun pudo parchease %s con mmap (pero nun ye un fallu especificu de mmap) "
+#~ "- el parche parez corruptu."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Inorar release destín non disponible '%s' pal paquete '%s'"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Esti nun ye un ficheru DEB válidu, falta'l miembru '%s', '%s' o '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "La suma MD5 nun concasa"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Nun pudo alcontrase un ficheru pal paquete %s. Esto puede significar que "
+#~ "necesites iguar manualmente esti paquete"
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Nun puede escribise nel rexistru, falló openpty() (¿/dev/pts nun ta "
+#~ "montáu?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Saltando'l ficheru non esistente %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Nun ye a desaniciar %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Nun ye a crear %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Nun ye a lleer %s"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Los direutorios info y temp tienen de tar nel mesmu sistema de ficheros"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Fallu al camudar al direutoriu d'alministración %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Fallu internu al obtener un Nome de Paquete"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Lleendo llistáu de ficheros"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Nun pude abrir el ficheru de llista '%sinfo/%s'. ¡Si nun yes a "
+#~ "restablecer esti ficheru entós crea ún baleru y darréu reinstala la mesma "
+#~ "versión del paquete!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Fallu al lleer el ficheru de llista %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Fallu internu al obtener un nodu"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Fallu al abrir el ficheru de desviación %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "El ficheru de desviación ta tollíu"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Llinia inválida nel ficheru de desviación: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Fallu internu al amestar una desviación"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "El caché del paquete tien d'entamase primero"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Fallu al atopar un paquete: Testera, desplazamientu %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Estaya mala del ConfFile nel ficheru d'estñau. Desplazamientu %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Fallu al lleer Md5. Desplazamientu %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Nun fui a camudar a %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Nun fui a atopar un ficheru de control válidu"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nun se pudo abrir una tubería pa %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Fallu de llectura dende'l procesu %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Obtúvose una sola llinia de testera penriba de %u carauteres"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Nota: Esto faise automáticamente y baxo demanda por dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Saltu mal formáu %s llinia %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Saltu mal formáu %s llinia %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Saltu mal formáu %s llinia %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "descompresor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "lleíos, entá tenía de lleer %lu pero nun queda nada"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "escritos, entá tenía d'escribir %lu pero nun pudo facerse"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Nun pudó facese la configuración inmediatamente nel desempaquetáu '%s'. "
+#~ "Por favor, mira man 5 apt.conf embaxo APT::Immediate-Configure for "
+#~ "details."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Hebo un error al procesar %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Hebo un error al procesar %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Hebo un error al procesar %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Hebo un error al procesar %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Hebo un error al procesar %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Hebo un error al procesar %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Hebo un error al procesar %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Hebo un error al procesar %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Hebo un error al procesar %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Hebo un error al procesar %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Fallu internu, nun fui a atopar el miembru"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Fallu internu, grupu '%s' nun tien paquete pseudo instalable"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "El ficheru release espiró, inorando %s (nun válidu dende %s)"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Llista d'argumentos d'Acquire::gpgv::Options demasiao llarga. Colando."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Hebo un error al procesar %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Llinia %u mal formada na llista d'oríxenes %s (id del proveedor)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Nun se pudo acceder al aniellu de claves '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Nun fui quien a parchiar el ficheru"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "No source package '%s' picking '%s' instead\n"
+#~ msgstr "Nenguna fonte de paquetes'% s' esbillada '% s' ehí\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Procesando disparadores pa %s"
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..6b1b70f
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,4467 @@
+# translation of apt-all.pot to Bulgarian
+# Bulgarian translation of apt.
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the apt package.
+#
+# Yavor Doganov <yavor@doganov.org>, 2006.
+# Damyan Ivanov <dmn@debian.org>, 2008, 2009, 2010, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.7.21\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2012-06-25 17:23+0300\n"
+"Last-Translator: Damyan Ivanov <dmn@debian.org>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Невалиден подпис на архива"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Грешка при четене на заглавната част на елемента на архива"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Невалидна заглавна част на елемента на архива"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Архивът е твърде кратък"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Неуспех при четенето на заглавните части на архива"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Не е намерен oторизационен запис за: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Развален архив"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Невярна контролна сума на tar, развален архив"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Непозната заглавна част на TAR тип %u, елемент %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Това не е валиден DEB архив, липсва елемент „%s“"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Вътрешна грешка, неуспех при намирането на съставна част %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Контролен файл, невъзможен за анализ"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Неуспех при запис на файл %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Неуспех при затварянето на файл %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Пътят %s е твърде дълъг"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Разпакетиране на %s повече от веднъж"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Директорията %s е отклонена"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Пакетът се опитва да пише в целта за отклонение %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Пътят за отклонение е твърде дълъг"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Грешка при получаването на атрибути за %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Неуспех при преименуването на %s на %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Директорията %s се заменя с не-директория"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Неуспех при намирането на възел в неговия хеш"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Пътят е твърде дълъг"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Файловете се заменят със съдържанието на пакета %s без версия"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Файл %s/%s заменя този в пакет %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Неуспех при четенето на %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Неуспех при получаването на атрибути за %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Извикан е DropNode за все още използван възел"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Грешка при намирането на хеш-елемента!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Неуспех при установяване на отклонението"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Вътрешна грешка в AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Опит за изменение на отклонение, %s -> %s и %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Двойно добавяне на отклонение %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Дублиран конфигурационен файл %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Директорията %s е отклонена"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Директорията %s е отклонена"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Директорията %s е отклонена"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Директорията %s е отклонена"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Директорията %s е отклонена"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Неуспех при прочитането на връзка %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Несъответствие на контролната сума"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "преименуването се провали, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Несъответствие на размера"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Невалидна операция %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Грешка при запис"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Грешка при проверка на цифровия подпис. Хранилището не е обновено и ще се "
+"използват старите индексни файлове. Грешка от GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Грешка от GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Файлът със служебна информация за „%s“ е остарял (валиден до %s). Няма да се "
+"прилагат обновявания от това хранилище."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Файлът със служебна информация за „%s“ е остарял (валиден до %s). Няма да се "
+"прилагат обновявания от това хранилище."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Конфликт в дистрибуцията: %s (очаквана: %s, намерена: %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Неуспех при изтеглянето на %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Неуспех при намирането на файл за пакет %s. Това може да означава, че трябва "
+"ръчно да оправите този пакет (поради пропусната архитектура)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Не е открит източник, от който да се изтегли версия „%s“ на „%s“"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Журнал на промените в %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Неуспех при намирането на драйвер за метод %s."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Проверете дали имате инсталиран пакета „dpkg-dev“.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Методът %s не стартира правилно"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Сложете диска, озаглавен „%s“ в устройство „%s“ и натиснете „Enter“."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Директорията със списъци %s липсва."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Директорията за архиви %s липсва."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Неуспех при заключване на директорията %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Не се поддържа индексен файл от типа „%s“"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Изтегляне на файл %li от %li (остават %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Изтегляне на файл %li от %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Пакетът %s трябва да бъде преинсталиран, но не може да се намери архив за "
+"него."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Грешка, pkgProblemResolver::Resolve генерира повреди, това може да е "
+"причинено от задържани пакети."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Неуспех при коригирането на проблемите, имате задържани счупени пакети."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Списъците с пакети или файлът за състояние не можаха да бъдат анализирани "
+"или отворени."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Може да искате да изпълните „apt-get update“, за да коригирате тези проблеми"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Списъкът с източници не можа да бъде прочетен."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Грешка при компилирането на регулярния израз - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Не е намерено издание „%s“ на „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Не е намерена версия „%s“ на „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Неуспех при намиране на задача „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Не са намерен пакети, отговарящ на регулярния израз „%s“"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Не са намерен пакети, отговарящ на регулярния израз „%s“"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Пакетът %s не може да бъде намерен"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Не е възможно избиране на версия за пакета „%s“ понеже е виртуален"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Не е възможно избиране на на последната версия за пакета „%s“, защото е "
+"виртуален"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Не е възможно избиране на кандидат-версия за пакета „%s“, защото няма "
+"подходящ кандидати"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Не е възможно избиране на инсталирана версия на пакета „%s“, защото не е "
+"инсталиран"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Не е възможно избиране на инсталирана или кандидат версия за пакета „%s“ "
+"понеже той няма нито едната"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Ред %u в списъка с източници %s е твърде дълъг."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Демонтиране на CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Използване на точка за монтиране на CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Чакане за диск...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Монтиране на CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Идентифициране..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Запазен етикет: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Сканиране на диска за индексни файлове...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Намерени са %zu индекса на пакети, %zu индекса на пакети с изходен код, %zu "
+"индекса с преводи и %zu подписа.\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Не са намерени файлове с пакети. Мое би дискът не е с Дебиан или е за "
+"погрешна компютърна архитектура."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Намерен е етикет „%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Това не е валидно име, опитайте отново.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Наименование на този диск: \n"
+"„%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Копиране на списъците с пакети..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Запазване на новия списък с източници\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Записите в списъка с източници за този диск са:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Неуспех при преминаването в %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Неуспех при получаването на атрибути на %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Неуспех при намирането на атрибутите на точка за монтиране %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Неуспех при намирането на атрибутите на cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Неизвестна опция за команден ред „%c“ [от %s]."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Опцията за команден ред %s не е разпозната"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Опцията за команден ред %s не е булева"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Опция %s изисква аргумент."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Опция %s: Значението трябва да има =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Опция %s изисква аргумент цяло число, не „%s“"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Опция „%s“ е твърде дълга"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Смисълът %s не е ясен, опитайте true или false."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Невалидна операция %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Неизвестен тип на абревиатура: „%c“"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Синтактична грешка %s:%u: В началото на блока няма име."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Синтактична грешка %s:%u: Лошо форматиран таг"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Синтактична грешка %s:%u: Излишни символи след стойността"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Синтактична грешка %s:%u: Директиви могат да се задават само в най-горното "
+"ниво"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Синтактична грешка %s:%u: Твърде много вложени „include“"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Синтактична грешка %s:%u: Извикан „include“ оттук"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Синтактична грешка %s:%u: Неподдържана директива „%s“"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Синтактична грешка %s:%u: директивата clear изисква аргумент дърво от опции"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Синтактична грешка %s:%u: Излишни символи в края на файла"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Проблем при изтриване на файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Не се използва заключване за файл за заключване %s, който е само за четене"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Неуспех при отварянето на файл за заключване %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Не се използва заключване за файл за заключване %s, който е монтиран по NFS"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Неуспех при достъпа до заключване %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Не може да се създаде списък от файлове, защото „%s“ не е директория"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Пропускане на „%s“ в директорията „%s“, понеже не е обикновен файл"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "Пропускане на файла „%s“ в директорията „%s“, понеже няма разширение"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Пропускане на файла „%s“ в директорията „%s“, понеже разширението му е грешно"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Изчака се завършването на %s, но той не беше пуснат"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Нарушение на защитата на паметта (segmentation fault) в подпроцеса %s."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Под-процесът %s получи сигнал %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Подпроцесът %s върна код за грешка (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Подпроцесът %s завърши неочаквано"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Грешка при четене"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Грешка при запис"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Проблем при затваряне на компресираният файл %s (gzip)"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Неуспех при създаването на подпроцес IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Неуспех при изпълнението на компресиращата програма "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Неуспех при отварянето на файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Неуспех при отварянето на файлов манипулатор %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+"грешка при четене, все още има %llu за четене, но няма нито един останал"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "грешка при запис, все още име %llu за запис, но не успя"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Проблем при затваряне на файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Проблем при преименуване на файла %s на %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Проблем при синхронизиране на файла"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Неуспех при получаването на атрибути за %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Неуспех при записа на %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Невъзможно е да се прехвърли в паметта празен файл"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Неуспех при прехвърлянето в паметта на %llu байта"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Неуспех при дублиране на файлов манипулатор %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Неуспех при затваряне на mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Неуспех при синхронизирането на mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Неуспех при прехвърлянето в паметта на %lu байта"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Неуспех при отрязване на края на файла"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Недостатъчна памет за MMap. Увеличете стойността на променливата APT::Cache-"
+"Start. Текуща стойност: %lu (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Неуспех при увеличаване на паметта за MMap. Достигнато е текущото "
+"ограничение от %lu байта."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Неуспех при увеличаване на паметта за MMap. Автоматичното увеличаване е "
+"забранено от потребителя."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Грешка!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Готово"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Готово"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%liд %liч %liм %liс"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%liч %liм %liс"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%liм %liс"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%liс"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Изборът %s не е намерен"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Неуспех при анализиране на файл Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Във файла Release %s липсват раздели"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Във файла Release %s липсва контролна сума"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Неправилна стойност за „%s“ във файла Release %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Неуспех при анализирането на пакетен файл %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Неуспех при заключване на административната директория (%s). Може би се "
+"използва от друг процес?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Неуспех при заключване на административната директория (%s). Може би липсват "
+"административни права?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"Процесът dpkg е беше прекъснат. Проблемът трябва да се коригира чрез ръчно "
+"изпълнение на „%s“."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Неуспех при заключване на административната директория (%s). Може би се "
+"използва от друг процес?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Неуспех при заключване на административната директория (%s). Може би липсват "
+"административни права?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Без заключване"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Подготвяне на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Подготвяне на %s за конфигуриране"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Подготвяне за премахване на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Подготовка за пълно премахване на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Отбелязване на изчезването на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Изпълнение на тригер след инсталиране %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s е инсталиран"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Конфигуриране на %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Директорията „%s“ липсва"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Неуспех при отваряне на файла „%s“"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Разпакетиране на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Инсталиране на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Премахване на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Окончателно премахване на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s е напълно премахнат"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Неуспех при записа на %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Операцията е прекъсната"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Поради достигане на максималния брой доклади (MaxReports) не е записан нов "
+"доклад за зависимостите."
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "отлагане на настройката поради неудовлетворени зависимости"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Доклад за зависимостите не е записан защото съобщението за грешка е породено "
+"от друга грешка."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Доклад за зависимостите не е записан защото грешката е причинена от "
+"недостатъчно дисково пространство"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Доклад за зависимостите не е записан защото грешката е причинена от "
+"недостатъчна оперативна памет"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Доклад за зависимостите не е записан защото грешката е причинена от "
+"недостатъчно дисково пространство"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Доклад за зависимостите не е записан поради входно-изходна грешка с dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Изграждане на дървото със зависимости"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Версии кандидати"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Генериране на зависимости"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Четене на информацията за състоянието"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Неуспех при отварянето на StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Неуспех при запис на временен StateFile %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Изпращане на сценарий към програмата за удовлетворяване на зависимости"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Изпращане на заявка към програмата за удовлетворяване на зависимости"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Подготовка за приемане на решение"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+"Външната програма за удовлетворяване на зависимости се провали без да изведе "
+"съобщение за грешка"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Изпълняване на външна програма за удовлетворяване на зависимости"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Изпълняване на външна програма за удовлетворяване на зависимости"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Изпращане на заявка към програмата за удовлетворяване на зависимости"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Изпращане на сценарий към програмата за удовлетворяване на зависимости"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr ""
+"Външната програма за удовлетворяване на зависимости се провали без да изведе "
+"съобщение за грешка"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Записани са %i записа.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Записани са %i записа с %i липсващи файла.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Записани са %i записа с %i несъответстващи файла\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Записани са %i записа с %i липсващи и %i несъответстващи файла\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Не е намерен oторизационен запис за: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Несъответствие на контролната сума за: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Пакетната система „%s“ не е поддържана"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Неуспех при определянето на подходяща пакетна система"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Изпълняване на dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Неуспех при незабавната настройка на „%s“. За повече информация вижте "
+"информацията за APT::Immediate-Configure в „man 5 apt.conf“. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Неуспех при конфигуриране на „%s“. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"В следствие на циклични зависимости от типа „В конфликт с/Предварително "
+"зависи от“, за да се продължи инсталацията трябва да се премахне необходимия "
+"пакет %s. Това често е лошо, но ако наистина искате да го направите, "
+"активирайте опцията APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Празен кеш на пакети"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Файлът за кеш на пакети е повреден"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Файлът за кеш на пакети е несъвместима версия"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Тази версия на APT не поддържа система за версии „%s“"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Кешът на пакети е бил направен за различна архитектура"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Файлът за кеш на пакети е повреден, твърде малък е"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Зависи от"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Предварително зависи от"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Предлага се"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "В конфликт с"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Препоръчва се"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Заменя"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Чупи"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Подобрява"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Изважда от употреба"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "важен"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "изискван"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "стандартен"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "допълнителен"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "незадължителен"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Кешът има несъвместима система за версии"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Възникна грешка при обработката на %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Еха, надхвърлихте броя имена на пакети, на който е способна тази версия на "
+"APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Еха, надхвърлихте броя версии, на който е способна тази версия на APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Еха, надхвърлихте броя описания, на който е способна тази версия на APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Еха, надхвърлихте броя зависимости, на който е способна тази версия на APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Четене на списъците с пакети"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Входно/изходна грешка при запазването на кеша на пакети с изходен код"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Не се поддържа индексен файл от типа „%s“"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Стойността „%s“ на APT::Default-Release не е правилна, понеже в източниците "
+"няма такова издание"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Невалиден запис във файла с настройки %s, липсва заглавна част Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Неизвестен тип за отбиване %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Няма указан приоритет (или е нула) на отбиването"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Неправилно форматиран override %s, ред %llu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Лошо форматиран ред %u в списъка с източници %s (тип)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Типът „%s“ на ред %u в списъка с източници %s е неизвестен."
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Лошо форматиран ред %u в списъка с източници %s (тип)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Типът „%s“ на ред %u в списъка с източници %s е неизвестен."
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Трябва да добавите адреси-URI от тип „source“ в sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Някои индексни файлове не можаха да бъдат изтеглени. Те са пренебрегнати или "
+"са използвани по-стари."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Изчисляване на актуализацията"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Поп:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Изт:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Игн:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Грш:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Изтеглени %sB за %s (%sB/сек)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [В процес на работа]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Смяна на носител: сложете диска с етикет\n"
+" „%s“\n"
+"в устройството „%s“ и натиснете „Enter“\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Коригиране на зависимостите..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " пропадна."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Неуспех при коригирането на зависимостите"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Неуспех при минимизирането на набора актуализации"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Готово"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Възможно е да изпълните „apt --fix-broken install“, за да коригирате тези "
+"неизправности."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Неудовлетворени зависимости. Опитайте „apt --fix-broken install“ без пакети "
+"(или укажете разрешение)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Избиране на %s за задача „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Избиране на %s за регулярен израз „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Избиране на %s за регулярен израз „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Пакетът %s е виртуален пакет, осигурен от:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Инсталиран]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [версията не е кандидат]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Трябва изрично да изберете един за инсталиране."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Пакетът %s не е наличен, но е в списъка със зависимости на друг пакет.\n"
+"Това може да означава, че пакета липсва, остарял е, или е достъпен\n"
+"само от друг източник\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Обаче следните пакети го заместват:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Пакетът „%s“ няма кандидат за инсталиране"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Виртуални пакети като „%s“ не могат да се премахват\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Пакетът „%s“ не е инсталиран, така че не е премахнат. Може би имахте предвид "
+"„%s“?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Пакетът „%s“ не е инсталиран, така че не е премахнат\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Избиране на „%s“ вместо „%s“\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Това APT има Върховни Сили."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Няма намерени пакети"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ПРЕДУПРЕЖДЕНИЕ: Следните пакети не могат да бъдат удостоверени!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Предупреждението за удостоверяването е пренебрегнато.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Някои пакети не можаха да бъдат удостоверени"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Инсталиране на тези пакети без проверка?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Има проблеми и „-y“ е използвано без „--force-yes“"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Неуспех при определянето на свободното пространство в %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Нямате достатъчно свободно пространство в %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Неуспех при заключването на директорията за изтегляне"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Някои пакети не можаха да бъдат инсталирани. Това може да означава,\n"
+"че сте изискали невъзможна ситуация или ако използвате нестабилната\n"
+"дистрибуция, че някои необходими пакети още не са създадени или пък\n"
+"са били преместени от Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+"Следната информация може да помогне за намиране на изход от ситуацията:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Счупени пакети"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Неуспех при изтеглянето на някои архиви, може да изпълните „apt-get update“ "
+"или да опитате с „--fix-missing“?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Вътрешна грешка, „InstallPackages“ е предизвикано при счупени пакети!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Трябва да бъдат премахнати пакети, но премахването е изключено."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Има проблеми и „-y“ е използвано без „--force-yes“"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Има проблеми и „-y“ е използвано без „--force-yes“"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Вътрешна грешка, „Ordering“ не завърши"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Странно... Размерите не съвпадат, изпратете е-поща на apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Необходимо е да се изтеглят %sB/%sB архиви.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Необходимо е да се изтеглят %sB архиви.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"След тази операция ще бъде използвано %sB допълнително дисково "
+"пространство.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "След тази операция ще бъде освободено %sB дисково пространство.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Указано е „Trivial Only“, но това не е тривиална операция."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Да, прави каквото казвам!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"На път сте да направите нещо потенциално опасно.\n"
+"За да продължите, въведете фразата „%s“\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Прекъсване."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Искате ли да продължите?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Някои файлове не можаха да бъдат изтеглени"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Изтеглянето завърши в режим само на изтегляне"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "„--fix-missing“ и превключване на носители не се поддържа все още"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Неуспех при коригирането на липсващите пакети."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Прекъсване на инсталирането."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Следният пакет е отстранен от системата поради препокриване на всичките му "
+"файлове от други пакети:"
+msgstr[1] ""
+"Следните пакети са отстранени от системата поради препокриване на всичките "
+"им файлове от други пакети:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Това се прави автоматично от dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Не би трябвало да се изтрива. AutoRemover няма да бъде стартиран"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Хм, изглежда AutoRemover скапа нещо, а това не би трябвало\n"
+"да се случва. Съобщете за грешка в пакета apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Вътрешна грешка, AutoRemover счупи нещо в системата"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Следният пакет е бил инсталиран автоматично и вече не е необходим:"
+msgstr[1] ""
+"Следните пакети са били инсталирани автоматично и вече не са необходими:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu пакет е бил инсталиран автоматично и вече не е необходим:\n"
+msgstr[1] ""
+"%lu пакета са били инсталирани автоматично и вече не са необходими:\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Използвайте „%s“ за да го премахнете."
+msgstr[1] "Използвайте „%s“ за да ги премахнете."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Следните допълнителни пакети ще бъдат инсталирани:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Предложени пакети:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Препоръчвани пакети:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Пропускане на %s, вече е инсталиран и не е маркиран за актуализация.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Пропускане на %s, който не е инсталиран при заявени само обновявания.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Преинсталацията на %s не е възможна, не може да бъде изтеглен.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s вече е най-новата версия.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s е отбелязан като ръчно инсталиран.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Избрана е версия %s (%s) за %s\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Избрана е версия „%s“ (%s) за „%s“ заради „%s“\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"Забележка: това е само симулация!\n"
+" %s има нужда от административни права за да работи.\n"
+" Заключването е деактивирано, така че не разчитайте\n"
+" на повтаряемост в реална ситуация.\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Инсталиран]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Инсталиран]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Инсталиран]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Инсталиран]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "но е инсталиран %s"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "но ще бъде инсталиран %s"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "но той не може да бъде инсталиран"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "но той е виртуален пакет"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "но той няма да бъде инсталиран"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "но той не е инсталиран"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " или"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Следните пакети имат неудовлетворени зависимости:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Следните НОВИ пакети ще бъдат инсталирани:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Следните пакети ще бъдат ПРЕМАХНАТИ:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Следните пакети няма да бъдат променени:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Следните пакети ще бъдат актуализирани:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Следните пакети ще бъдат ВЪРНАТИ КЪМ ПО-СТАРА ВЕРСИЯ:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Следните задържани пакети ще бъдат променени:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (поради %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ПРЕДУПРЕЖДЕНИЕ: Следните необходими пакети ще бъдат премахнати.\n"
+"Това НЕ би трябвало да става освен ако знаете точно какво правите!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu актуализирани, %lu нови инсталирани, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu преинсталирани, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu върнати към по-стара версия, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu за премахване и %lu без промяна.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu не са напълно инсталирани или премахнати.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Y/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[y/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Трябва да въведете поне един шаблон за търсене"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Пакетни файлове:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Кешът не е синхронизиран, не може да се изпълни „x-ref“ на пакетен файл"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Отбити пакети:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Инсталирана: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Кандидат: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(няма)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Таблица с версиите:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Не са намерен пакети, отговарящ на регулярния израз „%s“"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Не са намерен пакети, отговарящ на регулярния израз „%s“"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Не са намерен пакети, отговарящ на регулярния израз „%s“"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Използване на пакет източник „%s“ вместо „%s“\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Игнориране на несъществуваща версия „%s“ на пакета „%s“"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Трябва да укажете поне един пакет за изтегляне на изходния му код"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Неуспех при намирането на изходен код на пакет %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"Пакетирането на „%s“ се разработва в система за контрол на версиите „%s“ на "
+"адрес:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Използвайте:\n"
+"%s\n"
+"за да изтеглите последните промени в пакета (евентуално в процес на "
+"разработка).\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Пропускане на вече изтегления файл „%s“\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Необходимо е да се изтеглят %sB/%sB архиви изходен код.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Необходимо е да се изтеглят %sB архиви изходен код.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Изтегляне на изходен код %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Неуспех при изтеглянето на някои архиви."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+"Пропускане на разпакетирането на вече разпакетирания изходен код в %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Командата за разпакетиране „%s“ пропадна.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Проверете дали имате инсталиран пакета „dpkg-dev“.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Командата за компилиране „%s“ пропадна.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+"Неуспех при получаването на информация за зависимостите за компилиране на %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s няма зависимости за компилиране.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Липсва информация за архитектурата %s. Прегледайте информацията за APT::"
+"Architectures в apt.conf(5)."
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Трябва да укажете поне един пакет за проверка на зависимости за компилиране"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Неуспех при обработката на зависимостите за компилиране"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Неуспех при обработката на зависимостите за компилиране"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Неуспех при преименуването на %s на %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Пакетът %s версия %s има неудовлетворена зависимост:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Командата „update“ не възприема аргументи"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Командата „update“ не възприема аргументи"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Общо имена на пакети : "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Общо пакетни структури: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Нормални пакети: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Чисти виртуални пакети: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Единични виртуални пакети: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Смесени виртуални пакети: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Липсващи: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Общо уникални версии: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Общо уникални описания: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Общо зависимости: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Общо отношения версия/файл: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Общо отношения описание/файл: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Общо отношения „Осигурява“: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Общо разгърнати низове: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Общо празно пространство: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Общо отчетено пространство: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Тази командата е остаряла. Използвайте „apt-mark showauto“ вместо нея."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Показване на записите за пакети с изходен код"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Търсене в списъка с пакети за регулярен израз"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Необработена информация за зависимостите на даден пакет"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Информация за обратните зависимости на даден пакет"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Показване на записа за пакет"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Списък с имената на всички пакети, за които има информация"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Показване на настройките на политиката"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Укажете име за този диск, например „Debian 5.0.3 Disk1“"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Сложете диск в устройството и натиснете „Enter“"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Неуспех при монтиране на %s на %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Повторете този процес за останалите дискове от комплекта."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Аргументите не са по двойки"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Употреба: apt-config [опции] команда\n"
+"\n"
+"apt-config е опростен инструмент за четене на конфигурационния файл на APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Употреба: apt-extracttemplates файл1 [файл2 ...]\n"
+"\n"
+"apt-extracttemplates е инструмент за извличане на конфигурационна "
+"информация\n"
+"и шаблони от дебиански пакети\n"
+"\n"
+"Опции:\n"
+" -h Този помощен текст.\n"
+" -t Настройване на временна директория\n"
+" -c=? Четене на този конфигурационен файл.\n"
+" -o=? Настройване на произволна конфигурационна опция, т.е. -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Не може да се извлече версията на debconf. Debconf инсталиран ли е?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Неуспех при намирането на пакет %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s е отбелязан като автоматично инсталиран.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Тази команда е остаряла. Вместо нея използвайте „apt-mark auto“ и „apt-mark "
+"manual“."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Вътрешна грешка, „problem resolver“ счупи нещо в системата"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Поддържани модули:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Употреба: apt-get [опции] команда\n"
+" apt-get [опции] install|remove пакет1 [пакет2 ...]\n"
+" apt-get [опции] source пакет1 [пакет2 ...]\n"
+"\n"
+"apt-get е опростен интерфейс за командния ред за изтегляне и\n"
+"инсталиране на пакети. Най-често използваните команди са „update“\n"
+"и „install“.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Изтегляне на нови списъци с пакети"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Обновяване на системата"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Инсталиране на нови пакети (пакет е libc6, а не libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Инсталиране на нови пакети (пакет е libc6, а не libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Премахване на пакети"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Премахване на пакети, включително файловете им с настройки"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Автоматично премахване на всички неизползвани пакети"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Обновяване на дистрибуцията, вж. apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Следване на избора на dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Конфигуриране на зависимостите за компилиране на пакети от изходен код"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Изтриване на изтеглените файлове"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Изтриване на стари изтеглени файлове"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Проверка за неудовлетворени зависимости"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Изтегляне на изходен код на пакети"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Изтегляне на двоичен пакет в текущата директория"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Изтегляне и показване на журнала с промени в даден пакет"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Трябва да укажете поне един пакет за изтегляне на изходния му код"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Употреба: apt-internal-solver\n"
+"\n"
+"apt-internal-solver е интерфейс към вградения в APT механизъм за "
+"удовлетворяване на зависимости\n"
+"\n"
+"Опции:\n"
+" -h Този помощен текст\n"
+" -q Изход, подходящ за журнал — без индикатор на напредъка\n"
+" -c=? Указване на файл с настройки\n"
+" -o=? Указване на произволна настройка, напр. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Употреба: apt-internal-solver\n"
+"\n"
+"apt-internal-solver е интерфейс към вградения в APT механизъм за "
+"удовлетворяване на зависимости\n"
+"\n"
+"Опции:\n"
+" -h Този помощен текст\n"
+" -q Изход, подходящ за журнал — без индикатор на напредъка\n"
+" -c=? Указване на файл с настройки\n"
+" -o=? Указване на произволна настройка, напр. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "Пакетът „%s“ не може да бъде маркиран, защото не е инсталиран.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "Пакетът „%s“ вече е отбелязан като ръчно инсталиран.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "Пакетът „%s“ вече е отбелязан като автоматично инсталиран.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Следните НОВИ пакети ще бъдат инсталирани:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "Пакетът „%s“ вече е задуржан.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "Пакетът „%s“ вече е задържан.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Неуспех при изпълняване на dpkg. Имате ли административни права?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "Пакетът „%s“ е задържан.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Отмяна на задържането на пакета „%s“.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Употреба: apt-mark [опции] {auto|manual} пкт1 [пкт2 …]\n"
+"\n"
+"apt-mark предоставя команден интерфейс за маркиране на пакети\n"
+"като инсталирани ръчно или автоматично. Предлага се и показване\n"
+"на текущата маркировка.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Маркиране на пакети като инсталирани автоматично"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Маркиране на пакети като инсталирани ръчно"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Маркиране на пакети като инсталирани автоматично"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Непознат запис за пакет!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Четене на списъците с пакети"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Отбити пакети:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Отбити пакети:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Счупени пакети"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "но той е виртуален пакет"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Четене на информацията за състоянието"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Лоша стандартна настройка!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Натиснете „Enter“, за да продължите."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Желаете ли да изтриете изтеглените пакетни файлове?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Възникнаха някои грешки при разпакетирането. инсталираните пакети"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "ще бъдат конфигурирани. Това може да доведе до дублирани грешки"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"или грешки, причинени от липсващи зависимости. Това е нормално, само грешките"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"над това съобщение за важни. Коригирайте ги и изпълнете [I]nstall наново"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Смесване на наличната информация"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Списъкът с разширения на пакети и твърде дълъг"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Грешка при обработката на директория %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Списъкът с разширения на източници е твърде дълъг"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Грешка при запазването на заглавната част във файла със съдържание"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Грешка при обработката на съдържание %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Употреба: apt-ftparchive [опции] команда\n"
+"Команди: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents път\n"
+" release път\n"
+" generate config [групи]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive генерира индексни файлове за архиви на Дебиан. Поддържа\n"
+"много стилове на генериране от напълно автоматично до функционални\n"
+"замени на dpkg-scanpackages и dpkg-scansources.\n"
+"\n"
+"apt-ftparchive генерира „Package“ файлове от дърво с .deb файлове. Файлът\n"
+"„Package“ представлява съдържанието на всички контролни полета на всеки\n"
+"пакет, както и MD5 хеш и размер на файла. Стойностите на полетата \n"
+"„Priority“ и „Section“ могат да бъдат изменени с файл „override“.\n"
+"\n"
+"По подобен начин apt-ftparchive генерира „Sources“ файлове от дърво с .dsc \n"
+"файлове. Опцията --source-override може да се използва за указване на файл\n"
+"„override“ за пакети с изходен код.\n"
+"\n"
+"Командите „packages“ и „sources“ трябва да се изпълняват в корена на "
+"дървото.\n"
+"BinaryPath трябва да сочи към основата, където започва рекурсивното търсене "
+"и\n"
+"файла „override“ трябва да съдържа всички флагове за преназначаване. "
+"Pathprefix\n"
+"се прибавя към полетата на файловите имена, ако съществува. Пример за "
+"употреба\n"
+"от архива на Дебиан:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Опции:\n"
+" -h Този помощен текст.\n"
+" --md5 Управление на генерирането на MD5.\n"
+" -s=? Файл „override“ за пакети с изходен код.\n"
+" -q Без показване на съобщения.\n"
+" -d=? Избор на допълнителна база от данни за кеширане.\n"
+" --no-delink Включване на режим за премахване на връзки.\n"
+" --contents Управление на генерирането на файлове със съдържание.\n"
+" -c=? Четене на този конфигурационен файл.\n"
+" -o=? Настройване на произволна конфигурационна опция"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Няма съвпадения на избора"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Липсват някои файлове от групата с файлови пакети „%s“"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "БД е повредена, файлът е преименуван на %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "БД е стара, опит за актуализиране на %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Невалиден формат на БД. Ако сте обновили от по-стара версия на apt, "
+"премахнете базата от данни и я създайте наново."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Неуспех при отварянето на файл %s от БД: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Неуспех при прочитането на връзка %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "В архива няма поле „control“"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Неуспех при получаването на курсор"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Неуспех при заделянето на памет"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Непознат алгоритъм за компресия „%s“"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Компресираният изход %s изисква настройка за компресирането"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Неуспех при създаването на IPC pipe към подпроцеса"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Неуспех при пускането на подпроцес"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Процес-потомък за компресиране"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Вътрешна грешка, неуспех при създаването на %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "В/И към подпроцеса/файла пропадна"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Неуспех при четене докато се изчислява MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Неуспех при отварянето на %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Неправилно форматиран override %s, ред %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Неуспех при четенето на override файл %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Неправилно форматиран override %s, ред %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Неправилно форматиран override %s, ред %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Неправилно форматиран override %s, ред %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Неуспех при четенето на директория %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Неуспех при четенето на %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Грешките се отнасят за файла "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Неуспех при превръщането на %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Неуспех при обхода на дървото"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Неуспех при отварянето на %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr "DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Неуспех при създаването на връзка %s към %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr "Превишен лимит на DeLink от %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Архивът няма поле „package“"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s няма запис „override“\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " поддържащия пакета %s е %s, а не %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s няма запис „source override“\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s няма също и запис „binary override“\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Чакане на заглавни части"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP сървърът изпрати невалидна заглавна част като отговор"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Невалиден ред на заглавна част"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP сървърът изпрати невалидна заглавна част „Content-Length“"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP сървърът изпрати невалидна заглавна част „Content-Range“"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "HTTP сървърът няма поддръжка за прехвърляне на фрагменти на файлове"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Неизвестен формат на дата"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Невалидни данни на заглавната част"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Неуспех при свързването"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Вътрешна грешка"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Неуспех при четенето на базата %s със CD-ROM"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Използвайте „apt-cdrom“, за да може този CD-ROM да се разпознава от APT. "
+"„apt-get update“ не може да се използва за добавяне на нови дискове"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Грешен CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Неуспех при демонтирането на CD-ROM в %s, може все още да се използва."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Дискът не е намерен."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Файлът не е намерен"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Свързване с %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Свързване с %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Неуспех при създаването на гнездо за %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Не може да се започне свързване с %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Неуспех"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Неуспех при свързване с %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Неуспех при свързване с %s:%s (%s), допустимото време изтече"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Свързване с %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Неуспех при намирането на IP адреса на „%s“"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Временен неуспех при намирането на IP адреса на „%s“"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Нещо лошо се случи при намирането на IP адреса на „%s:%s“ (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Нещо лошо се случи при намирането на IP адреса на „%s:%s“ (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Неуспех при свързване с %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Неуспех при получаването на атрибути"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Невалиден адрес-URI, локалните адреси-URI не трябва да започват с „//“"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Влизане"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Неуспех при установяването на името на отдалечения сървър"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Неуспех при установяването на локалното име"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Сървърът отказа свързване и съобщи: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER се провали, сървърът съобщи: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS се провали, сървърът съобщи: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Беше указан сървър-посредник, но няма скрипт за влизане, Acquire::ftp::"
+"ProxyLogin е празен."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Командата „%s“ на скрипта за влизане се провали, сървърът съобщи: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE се провали, сървърът съобщи: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Допустимото време за свързването изтече"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Сървърът разпадна връзката"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Отговорът препълни буфера."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Развален протокол"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Неуспех при създаването на гнездо"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Неуспех при свързването на гнездо за данни, допустимото време за свързване "
+"изтече"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Неуспех при свързването на пасивно гнездо."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo не успя да се добере до слушащо гнездо"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Неуспех при свързването на гнездо"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Неуспех при слушането на гнездото"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Неуспех при определянето на името на гнездото"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Неуспех при изпращането на командата PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Неизвестно семейство адреси %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT се провали, сървърът съобщи: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Времето за установяване на връзка с гнездо за данни изтече"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Невъзможно е да се приеме свързването"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Проблем при хеширане на файла"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Неуспех при изтеглянето на файла, сървърът съобщи „%s“"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Времето за връзка с гнездо за данни изтече"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Неуспех при прехвърлянето на данни, сървърът съобщи: „%s“"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Запитване"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Неуспех при извикването на "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Намерен е поне един невалиден подпис."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Вътрешна грешка: Валиден подпис, но не може да се провери отпечатъка на "
+"ключа?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Неуспех при изпълнение на „apt-key“ за проверка на подписа (инсталиран ли е "
+"gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Неизвестна грешка при изпълнението на apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Следните подписи са невалидни:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Следните подписи не можаха да бъдат проверени, защото публичния ключ не е "
+"наличен:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Грешка при записа на файла"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Грешка при четене от сървъра. Отдалеченият сървър прекъсна връзката"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Грешка при четене от сървъра"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Грешка при записа на файл"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Неуспех на избора"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Допустимото време за свързване изтече"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Грешка при записа на изходен файл"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Неуспех при задаването на време на промяна"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Връзката прекъсна преждевременно"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Празни файлове не могат да бъдат валидни архиви"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Невалидна заглавна част %s на елемента на архива"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s е премахнат"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Пакетният файл %s не е синхронизиран."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Индексните файлове на пакета са повредени. Няма поле Filename: за пакет "
+#~ "%s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Файлът „%s“ на огледалния сървър не е намерен "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Грешка при четене файла „%s“ от огледалния сървър"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Грешка при четене файла „%s“ от огледалния сървър"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Огледален сървър: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Отваряне на конфигурационен файл %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Отваряне на %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Не може да се открие елемент „%s“ във файла Release (объркан ред в "
+#~ "sources.list или повреден файл)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Неудовлетворени зависимости. Опитайте с „--fix-broken“."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Възможно е да изпълните „apt --fix-broken install“, за да коригирате:"
+
+#~ msgid "(not found)"
+#~ msgstr "(не са намерени)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Отбиване на пакета: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Няма налични публични ключове за следните идентификатори на ключове:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Директорията %s е отклонена"
+
+#~ msgid "Failed to fetch %s %s\n"
+#~ msgstr "Неуспех при изтеглянето на %s %s\n"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Зависимост %s за пакета %s не може да бъде удовлетворена, %s не се "
+#~ "позволява за пакети „%s“"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Зависимост %s за пакета %s не може да бъде удовлетворена, понеже пакета "
+#~ "%s не може да бъде намерен"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Неуспех при удовлетворяването на зависимост %s за пакета %s: "
+#~ "Инсталираният пакет %s е твърде нов"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Зависимост %s за пакета %s не може да бъде удовлетворена, понеже версията "
+#~ "кандидат на пакета %s не може да удовлетвори изискването за версия"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "Зависимост %s за пакета %s не може да бъде удовлетворена, понеже пакета "
+#~ "%s няма подходящи версии"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Неуспех при удовлетворяването на зависимост %s за пакета %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr ""
+#~ "Зависимостите за компилиране на %s не можаха да бъдат удовлетворени."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Неуспех при премахването на връзка на %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Неуспех при премахването на връзка %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Употреба: apt-cache [опции] команда\n"
+#~ " apt-cache [опции] show пакет1 [пакет2 ...]\n"
+#~ "\n"
+#~ "apt-cache е инструмент на ниско ниво за извличане на информация от\n"
+#~ "двоичните кеш файлове на APT\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Опции:\n"
+#~ " -h Този помощен текст.\n"
+#~ " -p=? Кешът за пакети.\n"
+#~ " -s=? Кешът за пакети с изходен код.\n"
+#~ " -q Премахване на индикатора за напредък.\n"
+#~ " -i Показване само на важни зависимости при командата „unmet“.\n"
+#~ " -c=? Указване на файл с настройки.\n"
+#~ " -o=? Настройване на произволна конфигурационна опция, например -o dir::"
+#~ "cache=/tmp\n"
+#~ "За повече информация вижте наръчниците apt-cache(8) и apt.conf(5).\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Опции:\n"
+#~ " -h Тази помощна информация\n"
+#~ " -q Изход без информация за напредъка, подходящ за съхраняване\n"
+#~ " -qq Без изход, освен при грешки\n"
+#~ " -s Симулация. Само се извежда какво би било направено\n"
+#~ " -f Четене/запис на информацията за маркировката от указания файл\n"
+#~ " -c=? Указване на файл с настройки\n"
+#~ " -o=? Указване на произволна настройка, напр. -o dir::cache=/tmp\n"
+#~ "За повече информация прегледайте ръководствата apt-mark(8) и apt.conf(5)."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Опции:\n"
+#~ " -h Този помощен текст.\n"
+#~ " -c=? Четене на този конфигурационен файл.\n"
+#~ " -o=? Настройване на произволна конфигурационна опция, т.е. -o dir::"
+#~ "cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Опции:\n"
+#~ " -h Тази помощна информация\n"
+#~ " -q Изход без информация за напредъка, подходящ за съхраняване\n"
+#~ " -qq Без изход, освен при грешки\n"
+#~ " -s Симулация. Само се извежда какво би било направено\n"
+#~ " -f Четене/запис на информацията за маркировката от указания файл\n"
+#~ " -c=? Указване на файл с настройки\n"
+#~ " -o=? Указване на произволна настройка, напр. -o dir::cache=/tmp\n"
+#~ "За повече информация прегледайте ръководствата apt-mark(8) и apt.conf(5)."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Употреба: apt-sortpkgs [опции] файл1 [файл2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs е опростен инструмент за сортиране на пакетни файлове. "
+#~ "Опцията\n"
+#~ "„-s“ се използва, за да покаже типа на файла.\n"
+#~ "\n"
+#~ "Опции:\n"
+#~ " -h Този помощен текст.\n"
+#~ " -s Използване на сортиране по изходен код.\n"
+#~ " -c=? Четене на този конфигурационен файл.\n"
+#~ " -o=? Настройване на произволна конфигурационна опция, т.е. -o dir::"
+#~ "cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Процесът-потомък пропадна"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Трябва да укажете поне един пакет за изтегляне на изходния му код"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Неуспех при създаването на програмни канали"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Неуспех при изпълнението на gzip"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s за %s компилиран на %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Неуспех при създаването на FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s (анализ на адрес-URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s (неразбираема [опция])"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s (твърде кратка [опция])"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s ([%s] не е присвояване)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s (липсва ключ в [%s])"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s ([%s] ключът %s няма "
+#~ "стойност)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Лошо форматиран ред %lu в списъка с източници %s (адрес-URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Лошо форматиран ред %lu в списъка с източници %s (дистрибуция)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s (анализ на адрес-URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s (неограничена "
+#~ "дистрибуция)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %lu в списъка с източници %s (анализ на дистрибуция)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Пакетът %s %s не беше открит при обработката на файла със зависимости"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr ""
+#~ "Неуспех при получаването на атрибути на списъка с пакети с изходен код %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Събиране на информация за „Осигурява“"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Файлът %s не започва с информация за подписване в обикновен текст."
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Не е открита контролна сума за „%s“ във файла Release"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Блокът на производителя %s не съдържа отпечатък"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Общо пространство за зависимости по версии: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Нямате достатъчно свободно пространство в %s"
+
+#~ msgid "Done"
+#~ msgstr "Готово"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "В %s няма инсталиран ключодържател."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Вътрешна грешка, „AllUpgrade“ счупи нещо в системата"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s не е валиден DEB пакет."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Използване на точка за монтиране на CD-ROM %s\n"
+#~ "Монтиране на CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Неуспех при закърпване на %s с mmap и операции с файл – кръпката изглежда "
+#~ "повредена."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Неуспех при закърпване на %s с mmap (без грешка, специфична за mmap) – "
+#~ "кръпката изглежда повредена."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Игнориране на несъществуващо издание „%s“ на пакета „%s“"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Изтегляне на %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "Това не е валиден DEB архив, няма елемент „%s“, „%s“ или „%s“"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Несъответствие на контролна сума MD5"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Неуспех при намирането на файл за пакет %s. Това може да означава, че "
+#~ "трябва ръчно да оправите този пакет."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Неуспех при запис в журнала, openpty() се провали (дали /dev/pts е "
+#~ "монтирана?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Пропускане на несъществуващ файл %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Неуспех при премахването на %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Неуспех при създаването на %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Неуспех при получаването на атрибути %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Директориите info и temp трябва да бъдат на една и съща файлова система"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Неуспех при преминаването в администраторската директория %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Вътрешна грешка при получаването на името на пакета"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Четене на списъка на файловете"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Неуспех при отварянето на списъка с файлове „%sinfo/%s“. Ако не може да "
+#~ "възстановите този файл, запишете го като празен и веднага преинсталирайте "
+#~ "същата версия на пакета!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Неуспех при четенето на списъка с файлове %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Вътрешна грешка при получаването на възел"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Неуспех при отварянето на файл с отклонения %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Файлът с отклонения е повреден"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Неправилен ред във файла с отклонения: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Вътрешна грешка при добавянето на отклонение"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Първо трябва да се инициализира кеша с пакети"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Неуспех при намирането на заглавна част „Package:“, изместване %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Неправилна секция „ConfFile“ във файла за състояние. Изместване %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Грешка при анализирането на MD5. Изместване %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Неуспех при преминаването в %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Неуспех при намирането на валиден контролен файл"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Неуспех при отварянето на програмен канал за %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Грешка при четене от процес %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Получен е един ред на заглавна част с над %u символа"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Това се прави автоматично от dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Неправилно форматиран override %s, ред %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Неправилно форматиран override %s, ред %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Неправилно форматиран override %s, ред %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "декомпресираща програма"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr ""
+#~ "грешка при четене, все още има %lu за четене, но няма нито един останал"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "грешка при запис, все още име %lu за запис, но не успя"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Неуспех при незабавна настройка на разпакетиран „%s“. За повече "
+#~ "информация прочетете за APT::Immediate-Configure в „man 5 apt.conf“."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Възникна грешка при обработката на %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Възникна грешка при обработката на %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Възникна грешка при обработката на %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Възникна грешка при обработката на %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Възникна грешка при обработката на %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Грешка при обработка на %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Възникна грешка при обработката на %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Възникна грешка при обработката на %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Възникна грешка при обработката на %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Възникна грешка при обработката на %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Вътрешна грешка, не може да се открие елемент"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr ""
+#~ "Вътрешна грешка, групата „%s“ няма псевдо-пакет, подходящ за инсталиране"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr ""
+#~ "Файлът %s вече не е валиден и ще бъде игнориран. (изтекъл е преди %s)"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Списъкът с аргументи от Acquire::gpgv::Options е твърде дълъг. "
+#~ "Завършване на работа."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Възникна грешка при обработката на %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr ""
+#~ "Лошо форматиран ред %u в списъка с източници %s (идентификатор на "
+#~ "производител)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Неуспех при достъпа до набор на ключове: „%s“"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Неуспех при закърпване на файла"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Обработка на тригерите на %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "Недостатъчен ресурс при налагане на файл в паметта"
diff --git a/po/bs.po b/po/bs.po
new file mode 100644
index 0000000..8c03c94
--- /dev/null
+++ b/po/bs.po
@@ -0,0 +1,3724 @@
+# APT - Advanced Package Transfer
+# This file is put in the public domain.
+# Safir Šećerović <sapphire@linux.org.ba>, 2004
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.5.26\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2004-05-06 15:25+0100\n"
+"Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n"
+"Language-Team: Bosnian <lokal@lugbih.org>\n"
+"Language: bs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arhiva je prekratka"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Oštećena arhiva"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Provjera Tar kontrolnog zbira nije uspjela, arhiva oštećena"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Unknown TAR header type %u"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr ""
+
+#: apt-inst/dirstream.cc
+#, fuzzy, c-format
+msgid "Failed to write file %s"
+msgstr "Ne mogu ukloniti %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr ""
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr ""
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Putanja je preduga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr ""
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Ne mogu čitati %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Greška pri pisanju"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, fuzzy, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Ne mogu kreirati %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Čitam spisak datoteke"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr ""
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Ne mogu pronaći paket %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Unmounting CD-ROM...\n"
+msgstr "Pogrešan CD"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Waiting for disc...\n"
+msgstr "Čekam na zaglavlja"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Copying package lists..."
+msgstr "Čitam spiskove paketa"
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr ""
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Greška pri čitanju"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Greška pri pisanju"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Ne mogu ukloniti %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Ne mogu kreirati %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Ne mogu zapisati na %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Ne mogu kreirati %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Ne mogu kreirati %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "Ne mogu ukloniti %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr ""
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Ne mogu otvoriti DB datoteku %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr ""
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Preparing %s"
+msgstr "Otvaram %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installed %s"
+msgstr " Instalirano:"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Configuring %s"
+msgstr "Povezujem se sa %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Unpacking %s"
+msgstr "Otvaram %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr " Instalirano:"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Removing %s"
+msgstr "Otvaram %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "Ne mogu ukloniti %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removed %s"
+msgstr "Ne mogu ukloniti %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Ne mogu zapisati na %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Gradim stablo zavisnosti"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Verzije kandidata"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Stvaranje zavisnosti"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "Sastavljam dostupne informacije"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Ne mogu ukloniti %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr ""
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr ""
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Zavisi"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Unaprijed zavisi"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Predlaže"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "Conflicts"
+msgstr "Sukobljava se sa"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Preporučuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Zamjenjuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Zastarijeva"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "važno"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "zahtijevano"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standardno"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcionalno"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr ""
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Čitam spiskove paketa"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr ""
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Računam nadogradnju"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Ispravljam zavisnosti..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Ne mogu ispraviti zavisnosti"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Urađeno"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "ali je virtuelni paket"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr "[Instalirano]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Verzije kandidata"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Međutim, slijedeći paketi ga zamjenjuju:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Paketi nisu pronađeni"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "Slijedeći paketi će biti nadograđeni:"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr ""
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Oštećeni paketi"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Da, uradi kako kažem!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Odustani."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Da li želite nastaviti?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr ""
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Odustajem od instalacije."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Slijedeći NOVI paketi će biti instalirani:"
+msgstr[1] "Slijedeći NOVI paketi će biti instalirani:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Slijedeći NOVI paketi će biti instalirani:"
+msgstr[1] "Slijedeći NOVI paketi će biti instalirani:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Slijedeći dodatni paketi će biti instalirani:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Predloženi paketi:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Preporučeni paketi:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr ""
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "ali se %s treba instalirati"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr ""
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[Instalirano]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr "[Instalirano]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr "[Instalirano]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr "[Instalirano]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ali je %s instaliran"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ali se %s treba instalirati"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ali se ne može instalirati"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ali je virtuelni paket"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ali se neće instalirati"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ali nije instaliran"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ili"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Slijedeći NOVI paketi će biti instalirani:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Slijedeći paketi će biti UKLONJENI:"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "The following packages have been kept back:"
+msgstr "Slijedeći paketi su zadržani:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Slijedeći paketi će biti nadograđeni:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Datoteke paketa:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr ""
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalirano:"
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr ""
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr ""
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Ne mogu otvoriti %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Paket %s verzije %s ima nezadovoljenu zavisnost:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr ""
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Ukupno naziva paketa:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Ukupno naziva paketa:"
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normalni paketi:"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Čisto virtuelni paketi:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pojedinačni virutuelni paketi:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Miješani virtuelni paketi:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Nedostajući:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Ukupno različitih verzija:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "Ukupno različitih verzija:"
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Ukupno zavisnosti:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Ukupno Verzija/Datoteka odnosa:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "Ukupno Verzija/Datoteka odnosa:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Ne mogu otvoriti %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumenti nisu u parovima"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Upotreba: apt-config [opcije] naredba\n"
+"\n"
+"apt-config je jednostavni alat za čitanje APT konfiguracijske datoteke\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr ""
+"Ne mogu odrediti verziju debconf programa. Da li je debconf instaliran?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Podržani moduli:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Retrieve new lists of packages"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Remove packages"
+msgstr "Oštećeni paketi"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "ali nije instaliran"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Slijedeći NOVI paketi će biti instalirani:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Ne mogu otvoriti %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Slijedeći NOVI paketi će biti instalirani:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Nepoznat zapis paketa\""
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Čitam spiskove paketa"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr " Pojedinačni virutuelni paketi:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr " Pojedinačni virutuelni paketi:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Oštećeni paketi"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "ali se %s treba instalirati"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Sastavljam dostupne informacije"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Loša podrazumjevana postavka!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Pritisnite enter za nastavak."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Sastavljam dostupne informacije"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB je bila oštećena, datoteka preimenovana u %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB je stara, pokušavam nadogradnju %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, fuzzy, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Ne mogu otvoriti DB datoteku %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Ne mogu ukloniti %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arhiva nema kontrolnog zapisa"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr ""
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr ""
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr ""
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Ne mogu otvoriti %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Čekam na zaglavlja"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Nepoznat oblik datuma"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Povezivanje neuspješno"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Unutrašnja greška"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr ""
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+
+#: methods/cdrom.cc
+#, fuzzy
+msgid "Wrong CD-ROM"
+msgstr "Pogrešan CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Ne mogu demontirati CD-ROM na %s, moguće je da se još uvijek koristi."
+
+#: methods/cdrom.cc
+#, fuzzy
+msgid "Disk not found."
+msgstr "Datoteka nije pronađena"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Datoteka nije pronađena"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr ""
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s"
+msgid "Connected to %s (%s)"
+msgstr "Povezujem se sa %s"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Neuspješno"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Povezujem se sa %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Ne mogu se povezati sa %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr ""
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr ""
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Prijavljujem se"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Server je zatvorio vezu"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr ""
+
+#: methods/ftp.cc
+#, fuzzy
+msgid "Protocol corruption"
+msgstr "Oštećenje protokola"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr ""
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr ""
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr ""
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr ""
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "The following signatures were invalid:\n"
+msgstr "Slijedeći dodatni paketi će biti instalirani:"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr ""
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr ""
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr ""
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr ""
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr ""
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Removed %s"
+#~ msgstr "Preporučuje"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Ne mogu otvoriti %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Ne mogu otvoriti %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Otvaram %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Nezadovoljene zavisnosti. Pokušajte koristeći --fix-broken."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opcije:\n"
+#~ " -h Ovaj tekst pomoći.\n"
+#~ " -c=? Pročitaj ovu konfiguracijsku datoteku\n"
+#~ " -o=? Podesi odgovarajuću konfiguracijsku opciju, npr. -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Ne mogu izvršiti gzip"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Ne mogu otvoriti DB datoteku %s"
+
+#~ msgid "Done"
+#~ msgstr "Urađeno"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Odustajem od instalacije."
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s nije ispravan DEB paket."
+
+#~ msgid "Reading file listing"
+#~ msgstr "Čitam spisak datoteke"
+
+#, fuzzy
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Ne mogu otvoriti %s"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Povezivanje neuspješno"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Datum datoteke je promijenjen %s"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..2af830d
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,4042 @@
+# Catalan translation of APT.
+# Copyright © 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011, 2012 Software in the Public Interest, Inc.
+# Antoni Bella Perez <bella5@teleline.es>, 2002, 2003.
+# Matt Bonner <mateubonet@yahoo.com>, 2003.
+# Jordi Mallach <jordi@debian.org>, 2004, 2005, 2006, 2008, 2009, 2011, 2012.
+# Agustí Grau <fletxa@gmail.com>, 2010.
+# Oriol Debian <oriol.debian@gmail.com>, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.4~beta1\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2016-12-05 21:09+0100\n"
+"Last-Translator: Oriol Debian <oriol.debian@gmail.com>\n"
+"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Signatura de l'arxiu no vàlida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "S'ha produït un error en llegir la capçalera del membre de l'arxiu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "La capçalera del membre de l'arxiu no és vàlida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "L'arxiu és massa petit"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Ha fallat la lectura de les capçaleres de l'arxiu"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "No s'ha pogut trobar cap compressor configurat per: «%s»"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Arxiu corromput"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "La suma de comprovació de tar ha fallat, arxiu corromput"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Capçalera TAR desconeguda del tipus %u, membre %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Aquest no és un arxiu DEB vàlid, falta el membre «%s»"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Error intern, no s'ha pogut localitzar al membre %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "El fitxer de control no es pot analitzar"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "No s'ha pogut escriure el fitxer %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Ha fallat el tancament del fitxer %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "La ruta %s és massa llarga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "S'està desempaquetant %s més d'una vegada"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "El directori %s està desviat"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "El paquet està intentant escriure en l'objectiu desviat %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "La ruta de desviació és massa llarga"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "No es pot determinar l'estat de %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "No s'ha pogut canviar el nom de %s a %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "El directori %s està sent reemplaçat per un no-directori"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "No s'ha trobat el node dins de la taula"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "La ruta és massa llarga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "S'està sobreescrivint el corresponent paquet sense versió per a %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "El fitxer %s/%s sobreescriu al que està en el paquet %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "No es pot llegir %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "No es pot veure l'estat de %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode crida a un node que encara està enllaçat"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "No s'ha trobat l'element disseminat!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "No s'ha pogut assignar la desviació"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "S'ha produït un error intern en AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "S'està intentant sobreescriure una desviació, %s -> %s i %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Afegit doble d'una desviació %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Fitxer de conf. duplicat %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"No es pot actualitzar d'un repositori com aquest de forma segura i per tant "
+"està desactivat per omissió."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Les dades d'un repositori com aquest no es poden autenticar i per tant el "
+"seu ús és potencialment perillós."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Miri la pàgina de manual apt-secure(8) per veure els detalls sobre la "
+"creació de repositoris i la configuració d'usuaris."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "El directori «%s» ja no està signat."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "El directori «%s» ja no té fitxer de publicació «Release»."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Normalment no està permès, però s'ha donat l'opció «Acquire::"
+"AllowDowngradeToInsecureRepositories» per anul·lar-ho."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "El repositori «%s» no està signat."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "El repositori «%s» ja no té fitxer de publicació «Release»."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "El repositori «%s» només proporciona informació de seguretat feble."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "No s'ha pogut llegir l'enllaç %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "La suma resum no concorda"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"La informació disponible és insuficient per realitzar la baixada de manera "
+"segura"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "no s'ha pogut canviar el nom, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "La mida no concorda"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "El format de fitxer no és vàlid"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Hi ha hagut un error en la signatura"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"El fitxer signat en clar no és vàlid, s'ha obtingut «%s». Comprovi si la "
+"xarxa requereix autenticació."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"S'ha produït un error durant la verificació de la signatura. El repositori "
+"no està actualitzat i s'emprarà el fitxer d'índex anterior. Error del GPG: "
+"%s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "S'ha produït un error amb el GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"S'omet l'ús del fitxer configurat «%s» ja que el repositori «%s» no admet "
+"l'arquitectura «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"S'omet l'ús del fitxer configurat «%s» ja que el repositori «%s» no admet "
+"l'arquitectura «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"S'omet l'ús del fitxer configurat «%s» ja que el repositori «%s» no admet "
+"l'arquitectura «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"S'omet l'adquisició del fitxer configurat «%s» ja que el repositori «%s» "
+"només proporciona informació de seguretat feble per fer-ho"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"El fitxer Release per a %s ha caducat (invàlid des de %s). Les "
+"actualitzacions per a aquest dipòsit no s'aplicaran."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"El fitxer Release per a %s ha caducat (invàlid des de %s). Les "
+"actualitzacions per a aquest dipòsit no s'aplicaran."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Distribució en conflicte: %s (s'esperava %s però s'ha obtingut %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "No s'ha pogut obtenir %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"No ha estat possible localitzar un fitxer pel paquet %s. Això podria "
+"significar que haureu d'arreglar aquest paquet manualment (segons "
+"arquitectura)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "No es troba una font per baixar la versió «%s» de «%s»"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "El registre de canvis no està disponible per a %s=%s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "El mètode «%s» està desactivat explícitament per la configuració."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "Si vol usar Tor recordi d'usar «%s» en lloc de «%s»"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "No s'ha pogut trobar el mètode de control %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Està instal·lat el paquet %s?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "El mètode %s no s'ha iniciat correctament"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Inseriu el disc amb l'etiqueta: «%s» en la unitat «%s» i premeu [Intro]."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Falta el directori de llistes %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Falta el directori d'arxius %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "No es pot blocar el directori %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"No existeix l'usuari d'entorn segur «%s», no es poden ignorar els privilegis"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Can't drop privileges for downloading as file '%s' couldn't be accessed "
+#| "by user '%s'."
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"No es poden ignorar els privilegis per descarregar mentre no es pugui "
+"accedir a «%s» amb l'usuari «%s»."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "No està suportada la neteja de «%s» "
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "S'està obtenint el fitxer %li de %li (falten %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "S'està obtenint el fitxer %li de %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"El paquet %s necessita ser reinstal·lat, però no se li pot trobar un arxiu."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Error, pkgProblemResolver::Resolve ha generat pauses, això pot haver estat "
+"causat per paquets retinguts."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"No es poden corregir els problemes, teniu paquets retinguts que estan "
+"trencats."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"No s'han pogut analitzar o obrir les llistes de paquets o el fitxer d'estat."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Potser voldreu executar apt-get update per a corregir aquests problemes"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "No s'ha pogut llegir la llista de les fonts."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "S'ha produït un error de compilació de l'expressió regular - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "No s'ha trobat la versió puntual «%s» per a «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "No s'ha trobat la versió «%s» per a «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "No s'ha pogut trobar la tasca «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "No s'ha pogut trobar el paquet a través de l'expressió regular «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "No s'ha pogut trobar cap paquet a través de l'expressió regular «%s»"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "No s'ha trobat el paquet %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"No s'han pogut seleccionar les versions del paquet «%s» ja que és purament "
+"virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"No s'ha pogut seleccionar la versió més nova del paquet «%s» ja que és "
+"purament virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"No s'ha pogut seleccionar la versió candidata del paquet %s ja que no té "
+"candidata"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"No s'ha pogut seleccionar la versió instal·lada del paquet %s ja que no està "
+"instal·lada"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"No s'han pogut seleccionar la versió instal·lada ni la candidata del paquet "
+"«%s» ja que no estan disponibles cap de les dues"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "La línia %u és massa llarga en la llista de fonts %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "S'està desmuntant el CD-ROM…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "S'està utilitzant el punt de muntatge de CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "S'està esperant al disc…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "S'està muntant el CD-ROM…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "S'està identificant…"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "S'ha emmagatzemat l'etiqueta: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "S'està analitzant el disc per a fitxers d'índex…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"S'han trobat %zu índexos de paquets, %zu índexos de fonts, %zu índex de "
+"traduccions i %zu signatures\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"No s'ha trobat cap fitxer de paquets, potser no és un disc de Debian o la "
+"arquitectura és incorrecta?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "S'ha trobat l'etiqueta «%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Aquest no és un nom vàlid, torneu-ho a provar.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"El disc es diu:\n"
+"«%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "S'estan copiant les llistes de paquets…"
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "S'està escrivint una nova llista de fonts\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Les entrades de la llista de fonts per a aquest disc són:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "No es pot canviar a %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "No es pot veure l'estat de %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "No es pot obtenir informació del punt de muntatge %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "No s'ha pogut fer «stat» del cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"No s'admet l'opció de la línia d'ordres «%c» [de %s] en combinació amb "
+"altres opcions"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"No s'admet l'opció de la línia d'ordres %s en combinació amb altres opcions"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "No és lògica l'opció de la línia d'ordres %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "L'opció de la línia d'ordres %s precisa un paràmetre."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Opció %s: Paràmetre de configuració ha de ser en la forma =<val>"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "L'opció %s precisa un paràmetre numèric, no '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "L'opció '%s' és massa llarga"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "El sentit %s no s'entén, proveu «true» (vertader) o «false» (fals)."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operació no vàlida %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Abreujament de tipus no reconegut: «%c»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Error sintàctic %s:%u: No comença el camp amb un nom."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Error sintàctic %s:%u: Etiqueta malformada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Error sintàctic %s:%u Text extra després del valor"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Error sintàctic %s:%u: Es permeten directrius només al nivell més alt"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Error sintàctic %s:%u: Hi ha masses fitxers include niats"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Error sintàctic %s:%u: Inclòs des d'aquí"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Error sintàctic %s:%u: Directriu no suportada «%s»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Error sintàctic %s:%u: la directiva clear requereix un arbre d'opcions com a "
+"argument"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Error sintàctic %s:%u: Text extra al final del fitxer"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Ha hagut un problema en desenllaçar el fitxer %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"No s'empren bloquejos per a llegir el fitxer de blocat de sols lectura %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "No es pot resoldre el fitxer de blocat %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "No s'empren bloquejos per al fitxer de blocat %s de muntar nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "No s'ha pogut blocar %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "No es pot crear la llista de fitxers perquè «%s» no és un directori"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "S'està descartant «%s» al directori «%s» perquè no és un fitxer normal"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"S'està descartant «%s» al directori «%s» perquè no té extensió del nom de "
+"fitxer"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"S'està descartant «%s» al directori «%s» perquè té una extensió del nom de "
+"fitxer invàlida"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Esperava %s però no hi era"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "El sub-procés %s ha rebut una violació de segment."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "El sub-procés %s ha rebut un senyal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "El sub-procés %s ha retornat un codi d'error (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "El sub-procés %s ha sortit inesperadament"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Error de lectura"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Error d'escriptura"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Ha hagut un problema en tancar el fitxer gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Fi de fitxer no esperat"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "No s'ha pogut crear el subprocés IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "No s'ha pogut executar el compressor "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "No s'ha pogut obrir el fitxer %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "No s'ha pogut obrir el descriptor del fitxer %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "llegits, falten %llu per llegir, però no queda res"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "escrits, falten %llu per escriure però no s'ha pogut"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Ha hagut un problema en tancar el fitxer %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Ha hagut un problema en reanomenar el fitxer %s a %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Ha hagut un problema en sincronitzar el fitxer"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "No es pot crear el fitxer temporal %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "No es pot escriure en %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "No es pot transferir un fitxer buit a memòria"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "No s'ha pogut crear un mapa de memòria de %llu octets"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "No s'ha pogut duplicar el descriptor del fitxer %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "No es pot tancar el mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "No es pot sincronitzar el mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "No s'ha pogut crear un mapa de memòria de %lu octets"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "No s'ha pogut truncar el fitxer %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"No hi ha espai per al «Dynamic MMap». Incrementeu la mida d'APT::Cache-"
+"Start. Valor actual: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"No s'ha pogut incrementar la mida del MMap ja que el limit de %lu bytes ja "
+"s'ha superat."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"No s'ha pogut incrementar la mida del MMap ja que el creixement automàtic "
+"està deshabilitat per l'usuari."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s… Error!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s… Fet"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "…"
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s… %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "No s'ha trobat la selecció %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr "L'objectiu %s vol obtenir el mateix fitxer (%s) que %s de l'origen %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "L'objectiu %s (%s) està configurat diverses vegades en %s i %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "No es pot analitzar el fitxer Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "No hi ha seccions al fitxer Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "No hi ha una entrada Hash al fitxer Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"No existeix una entrada Resum «Hash» en l'arxiu «Release» %s que es "
+"considera suficientment fort per raons de seguretat"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "El camp «%s» al fitxer Release %s és invàlid"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"S'han establert valors en conflicte per a l'opció %s segons l'origen %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+"S'han establert valors no vàlids per a l'opció %s segons l'origen %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"S'han establert valors en conflicte per a l'opció %s segons l'origen %s %s: "
+"%s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "No es pot analitzar el fitxer del paquet %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"No s'ha pogut bloquejar el directori d'administració (%s), hi ha cap altre "
+"procés utilitzant-lo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "No es pot blocar el directori d'administració (%s), sou root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"S'ha interromput el dpkg, hauríeu d'executar manualment «%s» per a corregir "
+"el problema."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"No s'ha pogut bloquejar el directori d'administració (%s), hi ha cap altre "
+"procés utilitzant-lo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "No es pot blocar el directori d'administració (%s), sou root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "No blocat"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "S'està preparant el paquet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "S'està preparant per a configurar el paquet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "S'està preparant per a la supressió del paquet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "S'està preparant per a suprimir completament el paquet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "S'està anotant la desaparició de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "S'està executant l'activador de postinstal·lació %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "S'ha instal·lat el paquet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "S'està configurant el paquet %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Manca el directori «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "No s'ha pogut obrir el fitxer «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "S'està desempaquetant %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "S'està instal·lant %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "S'està suprimint el paquet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "S'ha suprimit completament %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "S'ha suprimit completament el paquet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "No es pot escriure en el fitxer de registre (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Comprovi que «/dev/pts» està muntat"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "S'ha interromput l'operació abans que pogués finalitzar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "No s'ha escrit cap informe perquè ja s'ha superat MaxReports"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "S'han produït problemes de depències, es deixa sense configurar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"No s'ha escrit cap informe perquè el missatge d'error indica que és un error "
+"de seguiment de una fallida anterior."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"No s'ha escrit cap informe perquè el missatge d'error indica una fallida per "
+"disc ple"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"No s'ha escrit cap informe perquè el missatge d'error indica una fallida per "
+"falta de memòria"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"No s'ha escrit cap informe perquè el missatge d'error indica una fallida en "
+"el sistema local"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"No s'ha escrit cap informe perquè el missatge d'error indica d'una fallida "
+"d'E/S del dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "S'està construint l'arbre de dependències"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versions candidates"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Dependències que genera"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "S'està llegint la informació de l'estat"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "No s'ha pogut obrir el fitxer d'estat %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "No s'ha pogut escriure el fitxer d'estat temporal %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Envia l'escenari al resoledor"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Envia la petició al resoledor"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Prepara per a rebre una solució"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "El resoledor extern ha fallat sense un missatge d'error adient"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Executa un resoledor extern"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Executa un planificador extern"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Envia la petició al planificador"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Envia l'escenari al planificador"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "El planificador extern ha fallat sense un missatge d'error adient"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "S'han escrit %i registres.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "S'han escrit %i registres, on falten %i fitxers.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "S'han escrit %i registres, on hi ha %i fitxers no coincidents\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"S'han escrit %i registres, on falten %i fitxers i hi ha %i fitxers no "
+"coincidents\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "No s'ha pogut trobar el registre d'autenticatió per a: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "El resum no coincideix per a: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "El sistema d'empaquetament «%s» no està suportat"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "No es pot determinar un tipus de sistema d'empaquetament adequat."
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Progrés: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "S'està executant dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"No s'ha pogut realitzar la configuració immediata de «%s». Vegeu man 5 apt."
+"conf, sota APT::Immediate-Configure per a més detalls. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "No s'ha pogut configurar «%s»."
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Aquesta instal·lació requereix suprimir temporalment el paquet essencial %s "
+"per qüestió d'un bucle de Conflictes/Pre-dependències. Això sol ser una cosa "
+"dolenta, però si realment desitgeu fer-la, activeu l'opció APT::Force-"
+"LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Memòria cau de paquets és buida"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "El fitxer de memòria cau de paquets està corromput"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "El fitxer de memòria cau de paquets és una versió incompatible"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Aquest APT no suporta el sistema de versions «%s»"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+"La memòria cau de paquets fou creada per a una arquitectura diferent: %s "
+"contra %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+"El fitxer de memòria cau de paquets està corromput, té un resum «hash» "
+"incorrecte"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Depèn"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Predepèn"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Suggereix"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Entra en conflicte"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recomana"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Reemplaça"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Trenca"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Millora"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Fa obsolet"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "important"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "requerit"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "estàndard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "La memòria cau té un sistema de versions incompatible"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "S'ha produït un error en processar %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Uau, heu excedit el nombre de paquets que aquest APT és capaç de gestionar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Uau, heu excedit el nombre de versions que aquest APT és capaç de gestionar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Uau, heu excedit el nombre de descripcions que aquest APT és capaç de "
+"gestionar. "
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Uau, heu excedit el nombre de dependències que aquest APT és capaç de "
+"gestionar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "S'està llegint la llista de paquets"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Error d'E/S en desar la memòria cau de la font"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "El tipus de fitxer índex «%s» no està suportat"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"El valor «%s» és invàlid per a APT:Default-Release donat que aquest "
+"llançament no és disponible a les fonts"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Registre no vàlid al fitxer de preferències %s, paquet sense capçalera"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "No s'ha entès el pin de tipus %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: El valor %s està fora del rang de les prioritats de pin vàlid (%d a %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "No hi ha prioritat especificada per al pin (o és zero)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "L'entrada %u està mal formada en %s en el fitxer %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "La línia %u és malformada en la llista de fonts %s (tipus)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "El tipus «%s» no és conegut en la línia %u de la llista de fonts %s"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "La línia %u està mal formada en la llista de fonts %s (tipus)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Es desconeix el tipus «%s» en la línia %u de la llista de fonts %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "S'ha subministrat el fitxer no admès %s en la línia d'ordres"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Heu de posar algunes URI 'font' en el vostre sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "No s'ha pogut convertir %s a sencer: fora de rang"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Alguns índex no s'han pogut baixar. S'han descartat, o en el seu lloc s'han "
+"emprat els antics."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "S'està calculant l'actualització"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Obj:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Bai:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Err:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "S'ha baixat %sB en %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Treballant]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Canvi de medi: inseriu el disc amb l'etiqueta\n"
+" «%s»\n"
+"en la unitat «%s» i premeu [Intro]\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "S'estan corregint les dependències…"
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " ha fallat."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "No es poden corregir les dependències"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "No es pot minimitzar el joc de versions revisades"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Fet"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Potser voldreu executar «apt --fix-broken install» per a corregir-ho."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dependències insatisfetes. Proveu amb «apt --fix-broken install» sense "
+"paquets (o especifiqueu una solució)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Ordenant"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Nota: s'està seleccionant «%s» per a la tasca «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr ""
+"Tingues en compte que s'està seleccionant «%s» per a l'expressió regular "
+"genèrica «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Nota: s'està seleccionant «%s» per a l'expressió regular «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "El paquet %s és un paquet virtual proveït per:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Instal·lat]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr "[Versió no candidata]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Necessiteu seleccionar-ne un explícitament per a instal·lar-lo."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"El paquet %s no té versió disponible, però un altre paquet\n"
+"en fa referència. Això normalment vol dir que el paquet falta,\n"
+"s'ha tornat obsolet o només és disponible des d'una altra font.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Tot i que els següents paquets el reemplacen:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "El paquet «%s» no té candidat d'instal·lació"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Els paquets virtuals com «%s» no es poden suprimir\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"El paquet «%s» no està instal·lat, així doncs no es suprimirà. Volíeu dir "
+"«%s»?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "El paquet «%s» no està instal·lat, així doncs no es suprimirà\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Nota: s'està seleccionant «%s» en lloc de «%s»\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Ordres més utilitzades:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Vegi %s per a més informació sobre les ordres disponibles."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Les opcions i sintaxi de configuració es detallen en apt.conf(5).\n"
+"Pot trobar informació sobre com configurar les fonts en sources.list(5).\n"
+"Les eleccions de versió i de paquets es poden expressar per mitjà de "
+"apt_preferences(5).\n"
+"Els detalls de la seguretat estan disponibles en apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Aquest APT té superpoders bovins."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Aquest Ajudant d'APT té poders de Super Plor."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes està en desús, en el seu lloc utilitzi una de les opcions que "
+"comencen per --allow."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "No s'han trobat paquets"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "AVÍS: No es poden autenticar els següents paquets!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "S'ha descartat l'avís d'autenticació.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "No s'ha pogut autenticar alguns paquets"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Voleu instal·lar aquests paquets sense verificar-los?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Hi ha paquets sense autenticació i s'ha emprat -y sense --allow-"
+"unauthenticated (permetre no autenticats)"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "No s'ha pogut determinar l'espai lliure en %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "No teniu prou espai lliure en %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "No és possible blocar el directori de descàrrega"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"No s'han pogut instal·lar alguns paquets. Això pot ser degut a que heu\n"
+"demanat una situació impossible o que esteu emprant la distribució\n"
+"«unstable» i alguns paquets requerits encara no han estat creats o bé\n"
+"encara no els hi han introduït des d'«Incoming»."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "La informació següent pot ajudar-vos a resoldre la situació:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Paquets trencats"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"No es poden baixar alguns arxius, proveu a executar apt-get update o "
+"intenteu-ho amb --fix-missing."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+"S'ha produït un error intern, s'ha cridat a InstallPackages amb paquets "
+"trencats!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"Els paquets necessiten ser suprimits però s'ha inhabilitat la supressió."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"S'han eliminats paquets essencials i s'ha usat -y sense --allow-remove-"
+"essencial (permetre eliminar essencials)"
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Els paquets s'han revertit i s'ha usat -y sense --allow-downgrades (permetre "
+"revertir)."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Es van canviar els paquets retinguts i es va utilitzar -y sense --allow-"
+"change-held-packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "S'ha produït un error intern, l'ordenació no ha acabat"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Què estrany… les mides no coincideixen, informeu a apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "S'ha d'obtenir %sB/%sB d'arxius.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "S'ha d'obtenir %sB d'arxius.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Després d'aquesta operació s'empraran %sB d'espai en disc addicional.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Després d'aquesta operació s'alliberaran %sB d'espai en disc.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "S'ha especificat «Trivial Only» però aquesta operació no és trivial."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Sí, fes el que et dic!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Esteu a punt de fer quelcom potencialment nociu.\n"
+"Per continuar escriviu la frase «%s»\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Avortat."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Voleu continuar?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Alguns fitxers no s'han pogut baixar"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Baixada completa i en mode de només baixada"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing i els medi intercanviables actualment no estan suportats"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "No es poden corregir els paquets que falten."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "S'està avortant la instal·lació."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"El següent paquet ha desaparegut del vostre sistema ja\n"
+"que tots els fitxers s'han sobreescrit per altres paquets:"
+msgstr[1] ""
+"El següents paquets han desaparegut del vostre sistema ja\n"
+"que tots els fitxers s'han sobreescrit per altres paquets:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Nota: Això ho fa el dpkg automàticament i a propòsit."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Es suposa que no hauriem de suprimir coses, no es pot iniciar el supressor "
+"automàtic"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Sembla que el supressor automàtic ha destruït alguna cosa que no deuria. Si "
+"us plau, envieu un informe d'error per a l'apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "S'ha produït un error intern, el supressor automàtic ha trencat coses"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"El paquet següent s'ha instal·lat automàticament i ja no serà necessari:"
+msgstr[1] ""
+"El paquets següents s'han instal·lat automàticament i ja no serà necessaris:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"El paquet %lu es va instal·lar automàticament i ja no és necessari:\n"
+msgstr[1] ""
+"Els paquets %lu es van instal·lar automàticament i ja no són necessaris:\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Empreu «%s» per a suprimir-lo."
+msgstr[1] "Empreu «%s» per a suprimir-los."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "S'instal·laran els següents paquets extres:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Paquets suggerits:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Paquets recomanats:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"S'està ometent %s, ja està instal·lat i l'actualització no està establerta.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"S'està ometent '%s', no està instal·lat i només es demana l'actualització.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "No es possible la reinstal·lació del paquet %s, no es pot baixar.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ja està en la versió més recent (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "S'ha marcat %s com instal·lat manualment.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versió seleccionada «%s» (%s) per a «%s»\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versió seleccionada «%s» (%s) per a «%s» degut a «%s»\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Llistant"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "Hi ha %i versió addicional. Utilitzi l'opció «-a» per veure-les"
+msgstr[1] "Hi han %i versions addicionals. Utilitzi l'opció «-a» per veure-les"
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"Nota: Això només és una simulació!\n"
+" L'%s necessita privilegis de root per a l'execució real.\n"
+" Tingueu en ment que el bloqueig està desactivat,\n"
+" per tant, no es depèn de la situació actual real.\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "desconegut"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[Instal·lat, actualitzable a: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[instal·lat,local]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[instal·lat, auto-eliminable]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[instal·lat,automàtic]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[instal·lat]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[actualitzable des de: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[configuració-residual]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "però està instal·lat %s"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "però s'instal·larà %s"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "però no és instal·lable"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "però és un paquet virtual"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "però no serà instal·lat"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "però no està instal·lat"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " o"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Els següents paquets tenen dependències sense satisfer:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "S'instal·laran els paquets NOUS següents:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Es SUPRIMIRAN els paquets següents:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "S'han mantingut els paquets següents:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "S'actualitzaran els paquets següents:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Es DESACTUALITZARAN els paquets següents:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Es canviaran els paquets retinguts següents:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (per %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"AVÍS: Es suprimiran els paquets essencials següents.\n"
+"Això NO s'ha de fer a menys que sapigueu exactament el que esteu fent!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu actualitzats, %lu nous a instal·lar, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstal·lats, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu desactualitzats, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu a suprimir i %lu no actualitzats.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu no instal·lats o suprimits completament.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[S/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[s/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "S"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Heu de donar com a mínim un patró de cerca"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Buscar en tot el text"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "Hi ha %i registre addicional. Utilitzi l'opció «-a» per veure'l."
+msgstr[1] ""
+"Hi han %i registres addicionals. Utilitzi l'opció «-a» per veure'ls."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "no és un paquet real (virtual)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Fitxers de paquets:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Memòria cau no sincronitzada, no es pot fer x-ref a un fitxer del paquet"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Paquets etiquetats:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s amb prioritat %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instal·lat: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(cap)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Taula de versió:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "No s'ha pogut trobar el paquet per l'arquitectura «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "No s'ha pogut trobar el paquet «%s» amb versió «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "No s'ha pogut trobar el paquet «%s» amb publicació «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "S'està agafant «%s» com a paquet font en lloc de '%s'\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "No s'ha pogut trobar la versió «%s» del paquet «%s»"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Haureu d'especificar un paquet de codi font per a baixar"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "No es pot trobar un paquet de fonts per a %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"Avís: L'empaquetat de «%s» és mantingut amb el sistema de control de\n"
+"versions «%s» a:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Empreu:\n"
+"%s\n"
+"per obtenir les últimes actualitzacions (possiblement no publicades) del "
+"paquet.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "S'està ometent el fitxer ja baixat «%s»\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Es necessita baixar %sB/%sB d'arxius font.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Es necessita baixar %sB d'arxius font.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Obtén el font %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "No s'ha pogut baixar alguns arxius."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+"S'està ometent el desempaquetament de les fonts que ja ho estan en %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "L'ordre de desempaquetar «%s» ha fallat.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Comproveu si el paquet «dpkgdev» està instal·lat.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "L'ordre de construir «%s» ha fallat.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+"No es pot obtenir informació sobre les dependències de construcció per a %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s no té dependències de construcció.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"No hi ha informació d'arquitectura disponible per a %s. Vegeu apt.conf(5) "
+"APT::Architectures per a configurar-ho"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"S'ha d'especificar un paquet per a verificar les dependències de construcció "
+"per a"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+"Tingues en compte que s'està utilitzant «%s» per obtenir les dependències de "
+"compilació\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+"Tingues en compte que s'està fent servir el fitxer «%s» per obtenir les "
+"dependències de construcció\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "No es poden processar les dependències de construcció"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "No s'ha pogut analitzar %s. Vol tornar-lo a editar? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "El fitxer «%s» ha canviat, executi «apt-get update».\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "El paquet %s versió %s té una dependència sense satisfer:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "L'ordre update no pren arguments"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"Es pot actualitzar %i paquet. Executi «apt list --upgradable» per veure'l.\n"
+msgstr[1] ""
+"Es poden actualitzar %i paquets. Executi «apt list --upgradable» per "
+"veure'ls.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Tots els paquets estan actualitzats."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "%s no pren cap argument"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Nombre total de paquets: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Nombre total d'estructures de paquets: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Paquets normals: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Paquets virtuals purs: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Paquets virtuals únics: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Paquets virtuals mixtes: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Falten: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Nombre total de versions diferents: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Nombre total de descripcions diferents: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Nombre total de dependències: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Nombre total de relacions versió/fitxer: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Nombre total de relacions descripció/fitxer: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Nombre total dels mapes aportats: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Nombre total de cadenes globals: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Nombre total de l'espai desaprofitat: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Nombre total de l'espai atribuït a: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Aquesta ordre és desaconsellada. Empreu «apt-mark showauto» en el seu lloc."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Forma d'ús: apt-cache [opcions] ordre\n"
+" apt-cache [opcions] show paq1 [paq2 ...]\n"
+"\n"
+"apt-cache sol·licita i mostra la informació disponible sobre els paquets\n"
+"instal·lats i els instal·lables. Funciona exclusivament amb les dades "
+"obtingudes\n"
+"en la memòria cau local mitjançant l'ordre «update», p.ex. «apt-get». Per "
+"tant, \n"
+"la informació mostrada pot estar desactualitzada si l'última actualització\n"
+"es va fer fa molt, però a canvi apt-cache funciona independentment de la\n"
+"disponibilitat de les fonts configurades (p.ex., sense connexió).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Mostra un registre d'un paquet font"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Cerca en la llista de paquets per un patró d'expressió regular"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Mostra informació de dependències (en cru) d'un paquet"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Mostra informació de dependències inverses d'un paquet"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Mostra un registre llegible pel paquet"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Llista els noms de tots els paquets del sistema"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Mostra la configuració de política"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Doneu un nom per a aquest disc, com per exemple «Debian 5.0.3 Disc 1»"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Inseriu un disc en la unitat i premeu [Intro]"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "No s'ha pogut muntar «%s» a «%s»"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"No s'ha pogut detectar cap CD-ROM automàticament o mitjançant el punt de "
+"muntatge predeterminat.\n"
+"Pot intentar l'opció --cdrom per establir el punt de muntatge del CD-ROM.\n"
+"Vegi «man apt-cdrom» para més informació sobre l'autodetecció i el punt de "
+"muntatge del CD-ROM."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Repetiu aquest procés per a la resta de CD del vostre joc."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Forma d'ús: apt-cdrom [opcions] ordre\n"
+"\n"
+"apt-cdrom s'utilitza per afegir CDROM's, memòries flaix USB i altres tipus "
+"de\n"
+"mitjans desmuntables com a orígens de paquets a APT. El punt de muntatge i "
+"la \n"
+"informació sobre el dispositiu s'obtenen de apt.conf(5), udev(7) i "
+"fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Els arguments no són en parells"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Forma d'ús: apt-config [opcions] ordre\n"
+"\n"
+"apt-config és una interfície per configurar les opcions usades per \n"
+"totes les eines APT, destinada principalment a la depuració i \n"
+"les seqüències d'intèrpret d'ordres.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+"obtenir valors de configuració mitjançant l'avaluació de l'intèrpret d'ordres"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "mostrar la configuració activa establerta"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Forma d'ús: apt-dump-solver\n"
+"\n"
+"apt-dump-solver és una interfície per emmagatzemar un escenari EDSP en un "
+"fitxer i opcionalment enviar-lo a un altre resolutor.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Forma d'ús: apt-extracttemplates fitxer1 [fitxer2 ...]\n"
+"\n"
+"apt-extracttemplates és una eina per a extreure informació dels \n"
+"fitxers de configuració i plantilla dels paquets debian.\n"
+"L'usa bàsicament debconf(1) per fer preguntes sobre la configuració\n"
+"abans d'instal·lar els paquets\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "No es pot determinar la versió de debconf. Està instal·lat debconf?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "No s'ha pogut trobar el paquet %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "S'ha marcat %s com instal·lat automàticament.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Aquesta ordre és desaconsellada. Empreu «apt-mark auto» i «apt-mark manual» "
+"en el seu lloc."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+"S'ha produït un error intern, el solucionador de problemes ha trencat coses"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Mòduls suportats:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Forma d'ús: apt-get [opcions] ordre\n"
+" apt-get [opcions] install|remove paq1 [paq2 …]\n"
+" apt-get [opcions] source paq1 [paq2 …]\n"
+"\n"
+"apt-get és una interfície de línia d'ordres per baixar paquets\n"
+"i obtenir-ne informació d'orígens segurs. També per instal·lació,\n"
+"actualització i eliminació de paquets conjuntament amb les seves\n"
+"dependències.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Obtén llistes noves dels paquets"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Realitza una actualització"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instal·la nous paquets (el paquet és libc6, no libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instal·la nous paquets (el paquet és libc6, no libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Suprimeix paquets"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Suprimeix i purga paquets"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Suprimeix automàticament tots els paquets en desús"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Actualitza la distribució, vegeu apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Segueix les seleccions del dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configura dependències de construcció pels paquets font"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Suprimeix els fitxers d'arxiu baixats"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Suprimeix els fitxers d'arxiu antics baixats"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verifica que no hi hagi dependències trencades"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Baixa arxius font"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Baixa el paquet binari al directori actual"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Baixa i mostra el registre de canvis del paquet"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Es necessita un URL com a argument"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Haureu d'especificar com a mínim un parell de url/nom_de_fitxer"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Ha fallat la baixada"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "Ha fallat GetSrvRec per %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Forma d'ús: apt-helper [opcions] ordre\n"
+" apt-helper [opcions] fitxer-cat fitxer ...\n"
+" apt-helper [opcions] fitxer-descarrega uri ruta-destí\n"
+"\n"
+"apt-helper reuneix un conjunt d'ordres perquè s'utilitzin en seqüències\n"
+"d'intèrpret d'ordres. Per exemple la mateixa configuració de proxy \n"
+"o el mateix sistema que APT.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "descarrega la uri proporcionada a la ruta de destinació"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "buscar un registre SRV (per exemple, _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "concatenar fitxers, amb descompressió automàtica"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "detecta el servidor intermediari usant apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Forma d'ús: apt-internal-planner\n"
+"\n"
+"apt-internal-planner és una interfície per usar el planificador\n"
+"intern actual d'instal·lació. Tant per la família APT com per una\n"
+"externa, per depuració i d'altres.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Forma d'ús: apt-internal-solver\n"
+"\n"
+"apt-internal-solver és una interfície per usar el resolutor\n"
+"intern actual. Tant per la família APT com per una externa, \n"
+"per depuració i d'altres.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s no es pot marcar perquè no està instal·lat.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s ja estava marcat com instal·lat manualment.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s ja estava marcat com instal·lat automàticament.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "S'instal·laran els paquets NOUS següents:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ja estava retingut.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ja estava no retingut.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "L'execució del dpkg ha fallat. Sou root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "S'ha marcat %s com retingut.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "S'ha cancel·lat la marca de retenció en %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "Seleccionat %s per purgar.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Seleccionat %s per eliminar.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Seleccionat %s per instal·lar.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Forma d'ús: apt-mark [opcions] {auto|manual} paq1 [paq2 ...]\n"
+"\n"
+"apt-mark és una senzilla interfície de línia d'ordres per marcar paquets\n"
+"com instal·lables tant manualment com automàticament. També es pot utilitzar "
+"per\n"
+"manipular els estats de selecció de paquets de dpkg(1) i per llistar\n"
+"tots els paquets amb o sense una marca determinada.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Marca els paquets proporcionats com instal·lables automàticament"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Marca els paquets proporcionats com instal·lables manualment"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Marca els paquets proporcionats com instal·lables automàticament"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Marca el paquet com retingut"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Desmarca un paquet marcat com retingut"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Mostra la llista dels paquets instal·lats automàticament"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Mostra la llista dels paquets instal·lats manualment"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Mostra la llista dels paquets retinguts"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Registre del paquet desconegut!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Forma d'ús: apt-sortpkgs [opcions] fitxer1 [fitxer2 ...]\n"
+"\n"
+"apt-sortpkgs és una senzilla eina per ordenar els fitxers\n"
+"d'informació dels paquets. De forma predeterminada, ordena a través\n"
+"de la informació del paquet binari, però es pot utilitzar l'opció\n"
+"-s per ordenar a través del l'origen.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Forma d'ús: apt [opcions] ordre\n"
+"\n"
+"apt és un gestor de paquets de línia d'ordres que proporciona ordres\n"
+"per a la cerca i gestió així com la sol·licitud d'informació sobre\n"
+"els paquets. Proporciona la mateixa funcionalitat que les eines\n"
+"APT especialitzades, com apt-get i apt-cache, però permet opcions \n"
+"més apropiades per a un ús interactiu de forma predeterminada.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "llista els paquets segons els noms"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "cerca en les descripcions dels paquets"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "mostra detalls del paquet"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "instal·la paquets"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "instal·la paquets"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "elimina paquets"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "actualitza la llista dels paquets disponibles"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "actualitza el sistema instal·lant/actualitzant paquets"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "actualitza el sistema eliminant/instal·lant/actualitzant paquets"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "edita el fitxer d'informació d'origen"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Paràmetre per defecte incorrecte!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Premeu [Intro] per a continuar."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Voleu suprimir els paquets .deb baixats prèviament?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"S'han produït alguns errors en desempaquetar. Els paquets que s'han "
+"instal·lat"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "seran configurats. Això pot provocar errors duplicats"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"o errors causats per dependències sense satisfer. Això està bé, només els "
+"errors"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"anteriors a aquest missatge són importants. Corregiu-los i torneu a executar "
+"[I]nstal·la una altra vegada"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "S'està fusionant la informació disponible"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "La llista de les extensions dels paquets és massa llarga"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "S'ha produït un error en processar el directori %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "La llista d'extensions de les fonts és massa llarga"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "S'ha produït un error en escriure la capçalera al fitxer de continguts"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "S'ha produït un error en processar el fitxer de continguts %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Forma d'ús: apt-ftparchive [opcions] ordre\n"
+"Ordres: packages camí_binaris [fitxer_substitucions prefix_camí]]\n"
+" sources camí_fonts [fitxer_substitucions [prefix_camí]]\n"
+" contents camí\n"
+" release camí\n"
+" generate config [grups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive genera fitxers d'índex per als arxius de Debian.\n"
+"Gestiona molts estils per a generar-los, des dels completament automàtics\n"
+"als substituts funcionals per dpkg-scanpackages i dpkg-scansources.\n"
+"\n"
+"apt-ftparchive genera fitxers Package des d'un arbre de .deb. El\n"
+"fitxer Package conté tots els camps de control de cada paquet així com\n"
+"la suma MD5 i la mida del fitxer. Es suporten els fitxers de substitució\n"
+"per a forçar el valor de Prioritat i Secció.\n"
+"\n"
+"D'un mode semblant, apt-ftparchive genera fitxers Sources des d'un arbre\n"
+"de .dsc. Es pot utilitzar l'opció --source-override per a especificar un\n"
+"fitxer de substitucions de src.\n"
+"\n"
+"L'ordre «packages» i «sources» hauria d'executar-se en l'arrel de\n"
+"l'arbre. CamíBinaris hauria de ser el punt base de la recerca recursiva\n"
+"i el fitxer de substitucions hauria de contenir senyaladors de substitució.\n"
+"Prefixcamí s'afegeix als camps del nom de fitxer si està present.\n"
+"Exemple d'ús a l'arxiu de Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opcions:\n"
+" -h Aquest text d'ajuda\n"
+" --md5 Generació del control MD5\n"
+" -s=? Fitxer de substitucions per a fonts\n"
+" -q Silenciós\n"
+" -d=? Selecciona la base de dades de memòria cau opcional\n"
+" --no-delink Habilita el mode de depuració delink\n"
+" --contents Genera el fitxer amb els continguts de control\n"
+" -c=? Llegeix aquest fitxer de configuració\n"
+" -o=? Estableix una opció de configuració arbitrària"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "No s'ha trobat cap selecció"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "No es troben alguns fitxers dins del grup de fitxers del paquet `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "La base de dades està corrompuda, fitxer renomenat a %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "La BD és vella, s'està intentant actualitzar %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"El format de la base de dades és invàlid. Si heu actualitzat des d'una "
+"versió més antiga de l'apt, suprimiu i torneu a crear la base de dades."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "No es pot obrir el fitxer de DB %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "No s'ha pogut llegir el fitxer .dsc"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arxiu sense registre de control"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "No es pot aconseguir un cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - No s'ha pogut assignar espai en memòria"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algorisme de compressió desconegut '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "La sortida comprimida %s necessita un joc de compressió"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "No s'ha pogut crear el conducte IPC al subprocés"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "No s'ha pogut bifurcar"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Comprimeix el fil"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "S'ha produït un error intern, no s'ha pogut crear %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Ha fallat l'E/S del subprocés sobre el fitxer"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "No s'ha pogut llegir mentre es calculava la suma MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "No es pot obrir %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Hi ha una sobreescriptura mal formada %s en la línia %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "No s'ha pogut llegir la línia predominant del fitxer %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Línia predominant %s malformada %llu núm 1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Línia predominant %s malformada %llu núm 2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Línia predominant %s malformada %llu núm 3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: No es pot llegir el directori %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: No es pot veure l'estat %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Els errors s'apliquen al fitxer "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "No s'ha pogut resoldre %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "L'arbre està fallant"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "No s'ha pogut obrir %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** No s'ha pogut enllaçar %s a %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink s'ha arribat al límit de %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arxiu sense el camp paquet"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s no té una entrada dominant\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " el mantenidor de %s és %s, no %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s no té una entrada dominant de font\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s no té una entrada dominant de binari\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "S'estan esperant les capçaleres"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "El servidor HTTP ha enviat una capçalera de resposta no vàlida"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Línia de capçalera incorrecta"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "El servidor HTTP ha enviat una capçalera de Content-Length no vàlida"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "El servidor HTTP ha enviat una capçalera de Content-Range no vàlida"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Aquest servidor HTTP té el suport d'abast trencat"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Format de la data desconegut"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Capçalera de dades no vàlida"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Ha fallat la connexió"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"S'ha desactivat automàticament %s a causa d'una resposta incorrecta del "
+"servidor o del servidor intermedi. (man 5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Error intern"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "No es pot llegir la base de dades del cdrom %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Si us plau, useu apt-cdrom per a que aquest CD sigui reconegut per APT. No "
+"pot emprar-se apt-get update per afegir-ne de nous"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD erroni"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "No es pot muntar el CD-ROM en %s, potser estigui encara en ús."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "No s'ha trobat el disc"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Fitxer no trobat"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "Les connexions directes als dominis %s estan bloquejades per defecte."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "S'està connectant amb %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "S'està connectant amb %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "No s'ha pogut crear un sòcol per a %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "No es pot iniciar la connexió amb %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Ha fallat"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "No s'ha pogut connectar amb %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "No s'ha pogut connectar amb %s:%s (%s), temps de connexió excedit"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "S'està connectant amb %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "No s'ha pogut resoldre «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "S'ha produït un error temporal en resoldre «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Hi ha hagut un error de sistema en resoldre «%s:%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Ha passat alguna cosa estranya en resoldre «%s:%s» (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "No es pot connectar amb %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "L'estat ha fallat"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI no vàlid, els URI locals no han de començar per //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "S'està accedint a"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "No es pot determinar el nom de la màquina distant"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "No es pot determinar el nom local"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "El servidor ha rebutjat la nostra connexió i ha dit: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER ha fallat, el servidor ha dit: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS ha fallat, el servidor ha dit: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"S'ha especificat un servidor intermediari però no un script d'accés, "
+"Acquire::ftp::ProxyLogin està buit."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "L'ordre «%s» del guió d'accés ha fallat, el servidor ha dit: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE ha fallat, el servidor ha dit: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Temps de connexió finalitzat"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "El servidor ha tancat la connexió"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Una resposta ha desbordat la memòria intermèdia."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protocol corromput"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "No s'ha pogut crear un sòcol"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "No s'ha pogut connectar amb el sòcol de dades, connexió finalitzada"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "No s'ha pogut connectar amb el sòcol passiu."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "gettaddrinfo no es pot obtenir un sòcol que escolte"
+
+# abastar? huh? jm
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "No s'ha pogut vincular a un connector"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "No s'ha pogut escoltar sobre el sòcol"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "No s'ha pogut determinar el nom del sòcol"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "No es pot enviar l'ordre PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "La família d'adreces %u és desconeguda (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT ha fallat, el servidor ha dit: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "S'ha esgotat el temps de connexió al sòcol de dades"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "No es pot acceptar la connexió"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problema escollint el fitxer"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "No és possible obtenir el fitxer, el servidor ha dit '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "S'ha esgotat el temps d'espera per al sòcol de dades"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Ha fallat la transferència de dades, el servidor ha dit '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Consulta"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "No es pot invocar"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"El fitxer signat en clar no és vàlid, s'ha obtingut «%s». Comprovi si la "
+"xarxa requereix autenticació."
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "S'ha trobat almenys una signatura invàlida."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Error intern: La signatura és correcta, però no s'ha pogut determinar "
+"l'empremta digital de la clau!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"No s'ha pogut executar el «apt-key» per a verificar la signatura (està "
+"instal·lat el gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "S'ha produït un error desconegut en executar el apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "La signatura per la clau %s usa un algoritme de repte dèbil (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Les signatures següents són invàlides:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Les signatures següents no s'han pogut verificar perquè la clau pública no "
+"està disponible:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "S'ha produït un error en escriure al fitxer"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+"S'ha produït un error en llegir, el servidor remot ha tancat la connexió"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "S'ha produït un error en llegir des del servidor"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "S'ha produït un error en escriure al fitxer"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Ha fallat la selecció"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Connexió finalitzada"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "S'ha produït un error en escriure al fitxer de sortida"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "No s'ha pogut establir el temps de modificació"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "La connexió s'ha tancat prematurament"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Els fitxers buits no poden ser arxius vàlids"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "La capçalera %s del membre de l'arxiu no és vàlida"
+
+#~ msgid "Removed %s"
+#~ msgstr "S'ha suprimit el paquet %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "El fitxer %s del paquet està desincronitzat."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "L'índex dels fitxers en el paquet està corromput. El fitxer no existeix: "
+#~ "camp per al paquet %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "No s'ha trobat el fitxer rèplica «%s»"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "No es pot llegir el fitxer rèplica «%s»"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "No s'ha trobat l'entrada en el fitxer de rèplica «%s»"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Rèplica: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "S'està obrint el fitxer de configuració %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "S'està obrint %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "No s'ha trobat l'entrada «%s» esperada, al fitxer Release (entrada "
+#~ "errònia al sources.list o fitxer malformat)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dependències sense satisfer. Proveu-ho emprant --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "Potser voldreu executar «apt --fix-broken install» per corregir-ho:"
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..f7d40ba
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,4484 @@
+# Czech translation of APT
+# This file is put in the public domain.
+# Miroslav Kure <kurem@debian.cz>, 2004-2017.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.4.2\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2017-05-06 11:08+0200\n"
+"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
+"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>=2 && n<=4 ? 1 : 2;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Neplatný podpis archivu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Chyba při čtení záhlaví prvku archivu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Neplatné záhlaví prvku archivu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Archiv je příliš krátký"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Chyba při čtení hlaviček archivu"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nelze najít zadaný komprimační program „%s“"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Porušený archiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Kontrolní součet taru selhal, archiv je poškozený"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Neznámá hlavička TARu typ %u, člen %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Toto není platný DEB archiv, chybí část „%s“"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Vnitřní chyba, nelze najít část %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Nezpracovatelný kontrolní soubor"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Selhal zápis souboru %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Selhalo zavření souboru %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Cesta %s je příliš dlouhá"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s se rozbaluje vícekrát"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Adresář %s je odkloněn"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Balík se pokouší zapisovat do diverzního cíle %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Diverzní cesta je příliš dlouhá"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Nelze vyhodnotit %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Selhalo přejmenování %s na %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Adresář %s bude nahrazen neadresářem"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Nelze nalézt uzel v jeho hashovacím kbelíku"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Cesta je příliš dlouhá"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Přepsat vyhovující balík bez udání verze pro %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Soubor %s/%s přepisuje ten z balíku %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Nelze číst %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Nelze vyhodnotit %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Pokus o uvolnění uzlu (DropNode) na stále propojeném uzlu"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Nelze lokalizovat hashovací prvek!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Nelze alokovat diverzi"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Vnitřní chyba při AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Pokus o přepsání diverze, %s -> %s a %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dvojí přidání diverze %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Duplicitní konfigurační soubor %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Aktualizaci z takového repositáře nelze provést zabezpečeně a je proto "
+"implicitně zakázána."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Data z takového repositáře nelze ověřit a proto je jejich použití "
+"potenciálně nebezpečné."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Podrobnosti o vytváření a nastavení repositářů naleznete v manuálové stránce "
+"apt-secure(8)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Repositář „%s“ již není podepsán."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Repositář „%s“ již neobsahuje soubor Release."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Toto není běžně povoleno, ale bylo to vynuceno volbou Acquire::"
+"AllowDowngradeToInsecureRepositories."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Repositář „%s“ není podepsán."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Repositář „%s“ neobsahuje soubor Release."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Repositář „%s“ nabízí pouze slabé zabezpečení."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Nelze přečíst link %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Neshoda kontrolních součtů"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr "Neexisuje dostatek informací pro bezpečné stažení"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "přejmenování selhalo, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Velikosti nesouhlasí"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Neplatná formát souboru"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Chyba podpisu"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Podepsaný soubor není platný, obdrženo „%s“ (vyžaduje přístup na síť "
+"ověření?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Při ověřování podpisů se objevila chyba. Repositář není aktualizovaný, tudíž "
+"se použijí předchozí indexové soubory. Chyba GPG: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Chyba GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Přeskakuje se stažení souboru „%s“, protože repositář „%s“ nepodporuje "
+"architekturu „%s“"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Přeskakuje se stažení souboru „%s“, protože repositář „%s“ nepodporuje "
+"architekturu „%s“"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Přeskakuje se stažení souboru „%s“, protože repositář „%s“ nepodporuje "
+"architekturu „%s“"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Přeskakuje se stažení souboru „%s“, protože repositář „%s“ o něm poskytuje "
+"pouze slabé bezpečnostní informace"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Soubor Release pro %s již expiroval (neplatný od %s). Aktualizace z tohoto "
+"repositáře se nepoužijí."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Soubor Release pro %s již expiroval (neplatný od %s). Aktualizace z tohoto "
+"repositáře se nepoužijí."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Konfliktní distribuce: %s (očekáváno %s, obdrženo %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Selhalo stažení %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Nebylo možné nalézt soubor s balíkem %s. To by mohlo znamenat, že tento "
+"balík je třeba opravit ručně (kvůli chybějící architektuře)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Nelze najít zdroj pro stažení verze „%s“ balíku „%s“"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Seznam změn pro %s=%s není dostupný"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "Metoda „%s“ je v nastavení explicitně zakázána."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "Jestliže jste chtěli použít Tor, použijte %s namísto %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Ovladač metody %s nemohl být nalezen."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Je balík %s nainstalován?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Metoda %s nebyla spuštěna správně"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Vložte prosím disk nazvaný „%s“ do mechaniky „%s“ a stiskněte [Enter]."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Adresář seznamů %s chybí."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Archivní adresář %s chybí."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Nelze uzamknout adresář %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr "V systému neexistuje omezený uživatel „%s“, nelze se zbavit oprávnění"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Stažení probíhá nechráněně pod uživatelem root, jelikož soubor „%s“ nebyl "
+"přístupný uživateli „%s“."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Vyčištění %s není podporováno"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Stahuje se soubor %li z %li (zbývá %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Stahuje se soubor %li z %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "Balík %s je potřeba přeinstalovat, ale nemohu pro něj nalézt archiv."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Chyba, pkgProblemResolver::Resolve vytváří poruchy, to může být způsobeno "
+"podrženými balíky."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Nelze opravit problémy, některé balíky držíte v porouchaném stavu."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Seznamy balíků nebo stavový soubor nemohly být zpracovány nebo otevřeny."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Pro nápravu těchto problémů můžete zkusit spustit apt-get update"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Nelze přečíst seznam zdrojů."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Chyba při kompilaci regulárního výrazu - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Vydání „%s“ pro „%s“ nebylo nalezeno"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Verze „%s“ pro „%s“ nebyla nalezena"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Nelze najít úlohu „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Nelze najít balík vyhovující regulárnímu výrazu „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Nelze najít balík vyhovující masce „%s“"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Nelze najít balík %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Nelze vybrat verze balíku „%s“, protože je čistě virtuální"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr "Nelze vybrat nejnovější verzi balíku „%s“, protože je čistě virtuální"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "Nelze vybrat kandidátskou verzi balíku %s, protože žádnou nemá"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr "Nelze vybrat nainstalované verze balíku %s, protože není nainstalován"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Nelze vybrat nainstalovanou ani kandidátskou verzi balíku „%s“, protože "
+"žádné takové verze nemá"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Řádek %u v seznamu zdrojů %s je příliš dlouhý."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Odpojuje se CD-ROM…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Používá se přípojný bod %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Čeká se na disk…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Připojuje se CD-ROM…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Rozpoznává se… "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Uložený název: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Na disku se hledají indexové soubory…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Nalezeny indexy balíků (%zu), indexy zdrojů (%zu), indexy popisů (%zu) a "
+"podpisy (%zu)\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Nenalezeny žádné balíky. Možná to není disk s Debianem, nebo je pro jinou "
+"architekturu?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Nalezený název: „%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Nejedná se o platné jméno, zkuste to znovu.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Tento disk se nazývá: \n"
+"„%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopírují se seznamy balíků…"
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Zapisuje se nový seznam balíků\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Seznamy zdrojů na tomto disku jsou:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nelze přejít do %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Nebylo možno vyhodnotit %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Nelze vyhodnotit přípojný bod %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Nezdařilo se vyhodnotit cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"Parametr příkazové řádky „%c“ [z %s] nedává v kombinaci s ostatními "
+"parametry smysl."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"Parametr příkazové řádky %s nedává v kombinaci s ostatními parametry smysl."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Parametr příkazové řádky %s není pravdivostní hodnota"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Volba %s vyžaduje argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Parametr %s: Zadání konfigurační položky musí obsahovat =<hodn>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Volba %s vyžaduje jako argument celé číslo (integer), ne „%s“"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Volba „%s“ je příliš dlouhá"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Nechápu význam %s, zkuste true nebo false."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Neplatná operace %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Nerozpoznaná zkratka typu: „%c“"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaktická chyba %s:%u: Blok nezačíná jménem."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaktická chyba %s:%u: Zkomolená značka"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaktická chyba %s:%u: Za hodnotou následuje zbytečné smetí"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Syntaktická chyba %s:%u: Direktivy je možné provádět pouze na nejvyšší úrovni"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaktická chyba %s:%u: Příliš mnoho vnořených propojení (include)"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaktická chyba %s:%u: Zahrnuto odtud"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaktická chyba %s:%u: Nepodporovaná direktiva „%s“"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Syntaktická chyba %s:%u: Direktiva clear vyžaduje jako argument strom "
+"možností"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaktická chyba %s:%u: Na konci souboru je zbytečné smetí"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problém při odstraňování souboru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Nepoužívá se zamykání pro zámkový soubor %s, který je pouze pro čtení"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Nešlo otevřít zámkový soubor %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Nepoužívá se zamykání pro zámkový soubor %s připojený přes nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Nelze získat zámek %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Seznam souborů nelze vytvořit, jelikož „%s“ není adresář"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Ignoruji „%s“ v adresáři „%s“, jelikož to není obyčejný soubor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "Ignoruji soubor „%s“ v adresáři „%s“, jelikož nemá příponu"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr "Ignoruji soubor „%s“ v adresáři „%s“, jelikož má neplatnou příponu"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Čekali jsme na %s, ale nebyl tam"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Podproces %s obdržel chybu segmentace."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Podproces %s obdržel signál %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Podproces %s vrátil chybový kód (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Podproces %s neočekávaně skončil"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Chyba čtení"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Chyba zápisu"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problém při zavírání gzip souboru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Neočekávaný konec souboru"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Nelze vytvořit podproces IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Nezdařilo se spustit kompresor "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nelze otevřít soubor %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nelze otevřít popisovač souboru %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "čtení, stále se má přečíst %llu, ale už nic nezbývá"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "zápis, stále se má zapsat %llu, ale nejde to"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problém při zavírání souboru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problém při přejmenování souboru %s na %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problém při synchronizování souboru"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Nelze zavolat mkstemp %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Nelze zapsat do %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Nelze provést mmap prázdného souboru"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Nešlo mmapovat %llu bajtů"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Nelze duplikovat popisovač souboru %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Nelze zavřít mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Nelze synchronizovat mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Nešlo mmapovat %lu bajtů"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Nelze zmenšit soubor"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dynamickému MMapu došlo místo. Zvyšte prosím hodnotu APT::Cache-Start. "
+"Současná hodnota: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr "Nelze zvýšit velikost MMapu, protože limit %lu bajtů již byl dosažen."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Nelze zvýšit velikost MMapu, protože automatické zvětšování bylo uživatelem "
+"zakázáno."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s… Chyba!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s… Hotovo"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "…"
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s… %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Výběr %s nenalezen"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr "Cíl %s chce stáhnout stejný soubor (%s) jako %s ze zdroje %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "Cíl %s (%s) je nastaven vícekrát v %s a %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Nelze zpracovat Release soubor %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Release soubor %s neobsahuje žádné sekce"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Release soubor %s neobsahuje Hash záznam"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Release soubor %s neobsahuje Hash záznam, který by byl pro bezpečnost "
+"považován za dostatečně silný"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Neplatná položka „%s“ v Release souboru %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr "Pro volbu %s byly nastaveny kolidující hodnoty zdroje %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr "Pro volbu %s byla nastavena kolidující hodnota zdroje %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr "Pro volbu %s byly nastaveny kolidující hodnoty zdroje %s %s: %s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Nelze zpracovat soubor %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr "Nelze uzamknout administrační adresář (%s). Používá jej jiný proces?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Nelze uzamknout administrační adresář (%s). Jste root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr "dpkg byl přerušen, pro nápravu problému musíte ručně spustit „%s“."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr "Nelze uzamknout administrační adresář (%s). Používá jej jiný proces?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Nelze uzamknout administrační adresář (%s). Jste root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Není uzamčen"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Připravuje se %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Připravuje se nastavení %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Připravuje se odstranění %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Připravuje se úplné odstranění %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Značím si zmizení %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Spouští se poinstalační spouštěč %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Nainstalován %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Nastavuje se %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Adresář „%s“ chybí"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Nelze otevřít soubor „%s“"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Rozbaluje se %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Instaluje se %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Odstraňuje se %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Kompletně se odstraňuje %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Kompletně odstraněn %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Nelze zapsat log (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Je /dev/pts připojeno?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Operace byla přerušena dříve, než mohla skončit"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Žádné apport hlášení nebylo vytvořeno, protože již byl dosažen MaxReports"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problémy se závislostmi - ponechávám nezkonfigurované"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Žádné apport hlášení nebylo vytvořeno, protože chybová hláška naznačuje, že "
+"se jedná o chybu způsobenou předchozí chybou."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Žádné apport hlášení nebylo vytvořeno, protože chybová hláška naznačuje, že "
+"je chyba způsobena zcela zaplněným diskem."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Žádné apport hlášení nebylo vytvořeno, protože chybová hláška naznačuje, že "
+"je chyba způsobena zcela zaplněnou pamětí."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Žádné apport hlášení nebylo vytvořeno, protože chybová hláška naznačuje, že "
+"je chyba na lokálním systému."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Žádné apport hlášení nebylo vytvořeno, protože chybová hláška naznačuje V/V "
+"chybu dpkg."
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Vytváří se strom závislostí"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Kandidátské verze"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Generování závislostí"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Načítají se stavové informace"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Nelze otevřít stavový soubor %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Nelze zapsat dočasný stavový soubor %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Scénář odeslán řešiteli"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Požadavek odeslán řešiteli"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Příprava na obdržení řešení"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Externí řešitel selhal, aniž by zanechal rozumnou chybovou hlášku"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Spuštění externího řešitele"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Spuštění externího plánovače"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Požadavek odeslán plánovači"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Scénář odeslán plánovači"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "Externí plánovač selhal, aniž by zanechal rozumnou chybovou hlášku"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Zapsáno %i záznamů.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Zapsáno %i záznamů s chybějícími soubory (%i).\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Zapsáno %i záznamů s nesouhlasícími soubory (%i).\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Zapsáno %i záznamů s chybějícími (%i) a nesouhlasícími (%i) soubory.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Nelze najít autentizační záznam pro: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Neshoda kontrolních součtů pro: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Balíčkovací systém „%s“ není podporován"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Nebylo možno určit vhodný typ balíčkovacího systému"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Postup: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Spouští se dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Nelze spustit okamžitou konfiguraci balíku „%s“. Podrobnosti naleznete v man "
+"5 apt.conf v části APT::Immediate-Configure. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Nelze nastavit „%s“."
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Tento běh instalace si vyžádá dočasné odstranění nezbytného balíku %s kvůli "
+"smyčce v Conflicts/Pre-Depends. To je často špatné, ale pokud to skutečně "
+"chcete udělat, aktivujte možnost APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Cache balíků je prázdná"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Cache soubor balíků je poškozen"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Cache soubor balíků má nekompatibilní verzi"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Tato APT nepodporuje systém pro správu verzí „%s“"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Cache balíků byla vytvořena pro jinou architekturu: %s vs %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Cache soubor balíků je poškozen, kontrolní součet nesouhlasí"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Závisí na"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Předzávisí na"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Navrhuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Koliduje s"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Doporučuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Nahrazuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Porušuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Rozšiřuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Zastarává"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "důležitý"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "vyžadovaný"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standardní"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "volitelný"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Cache má nekompatibilní systém správy verzí"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Chyba při zpracování %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Wow, překročili jste počet jmen balíků, které tato APT umí zpracovat."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Wow, překročili jste počet verzí, které tato APT umí zpracovat."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Wow, překročili jste počet popisů, které tato APT umí zpracovat."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Wow, překročili jste počet závislostí, které tato APT umí zpracovat."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Načítají se seznamy balíků"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Chyba IO při ukládání zdrojové cache"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Indexový typ souboru „%s“ není podporován"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Hodnota „%s“ není v APT::Default-Release platná, protože toto vydání není "
+"dostupné v sources.list"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Neplatný záznam v souboru preferencí %s, chybí hlavička Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Nerozumím vypíchnutí typu %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr "%s: Hodnota %s leží mimo rozsah platných priorit (%d až %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Pro vypíchnutí nebyla zadána žádná (nebo nulová) priorita"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Zkomolený řádek %u v %s souboru %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Zkomolený řádek %u v seznamu zdrojů %s (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typ „%s“ na řádce %u v seznamu zdrojů %s není známý"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Zkomolená část %u v seznamu zdrojů %s (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typ „%s“ v části %u v seznamu zdrojů %s není známý"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Zadán nepodporovaný soubor %s"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Do sources.list musíte zadat „zdrojové“ URI"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "Nelze převést %s na celé číslo: mimo rozsah"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Některé indexové soubory se nepodařilo stáhnout. Jsou ignorovány, nebo jsou "
+"použity starší verze."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Propočítává se aktualizace"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Mám:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Stahuje se:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Err:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Staženo %sB za %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Pracuji]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Výměna média: vložte prosím disk nazvaný\n"
+" „%s“\n"
+"do mechaniky „%s“ a stiskněte [Enter]\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Opravují se závislosti…"
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " selhalo."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Nelze opravit závislosti"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Nelze minimalizovat sadu pro aktualizaci"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Hotovo"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Pro opravení můžete spustit „apt --fix-broken install“."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Nesplněné závislosti. Zkuste spustit „apt --fix-broken install“ bez balíků "
+"(nebo navrhněte řešení)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Řadí se"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Pozn: vybírám „%s“ pro úlohu „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Pozn: vybírám „%s“ pro masku „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Pozn: vybírám „%s“ pro regulární výraz „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Balík %s je virtuální balík poskytovaný:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Nainstalovaný]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Není kandidátská verze]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Měli byste explicitně vybrat jeden k instalaci."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Balík %s není dostupný, ale jiný balík se na něj odkazuje.\n"
+"To může znamenat že balík chybí, byl zastarán, nebo je dostupný\n"
+"pouze z jiného zdroje\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Nicméně následující balíky jej nahrazují:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Balík „%s“ nemá kandidáta pro instalaci"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Virtuální balíky jako „%s“ nemohou být odstraněny\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Balík „%s“ není nainstalován, nelze tedy odstranit. Mysleli jste „%s“?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Balík „%s“ není nainstalován, nelze tedy odstranit\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Pozn: Vybírám „%s“ místo „%s“\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Nejpoužívanější příkazy:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Více informací o dostupných příkazech naleznete v %s."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Konfigurační volby a syntaxe jsou popsány v apt.conf(5).\n"
+"Informace o nastavení zdrojů se nachází v sources.list(5).\n"
+"Výběr balíků a verzí je možno vyjádřit pomocí apt_preferences(5).\n"
+"Podrobnosti o zabezpečení jsou dostupné v apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Tato APT má schopnosti svaté krávy."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Tento APT pomocník má schopnosti svatého čehokoliv."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes je zastaralé, použijte některou z voleb začínajících --allow."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Nebyly nalezeny žádné balíky"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "VAROVÁNÍ: Následující balíky nemohou být autentizovány!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Autentizační varování potlačeno.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Některé balíky nemohly být autentizovány"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Instalovat tyto balíky bez ověření?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Vyskytly se neověřené balíky a -y bylo použito bez --allow-unauthenticated."
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Nelze určit volné místo v %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "V %s nemáte dostatek volného místa."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Nelze zamknout adresář pro stahování"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Některé balíky nemohly být instalovány. To může znamenat, že požadujete\n"
+"nemožnou situaci, nebo, pokud používáte nestabilní distribuci, že\n"
+"vyžadované balíky ještě nebyly vytvořeny nebo přesunuty z Příchozí fronty."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Následující informace vám mohou pomoci vyřešit tuto situaci:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Poškozené balíky"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Nelze stáhnout některé archivy. Možná spusťte apt-get update nebo zkuste --"
+"fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Vnitřní chyba, InstallPackages byl zavolán s porušenými balíky!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Balík je potřeba odstranit ale funkce Odstranit je vypnuta."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Nezbytné balíky byly odstraněny a -y bylo použito bez --allow-remove-"
+"essential."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Balíky byly degradovány a -y bylo použito bez --allow-downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Podržené balíky byly změněny a -y bylo použito bez --allow-change-held-"
+"packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Vnitřní chyba, třídění nedoběhlo do konce"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Jak podivné… velikosti nesouhlasí, ohlaste to na apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Nutno stáhnout %sB/%sB archivů.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Nutno stáhnout %sB archivů.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Po této operaci bude na disku použito dalších %sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Po této operaci bude na disku uvolněno %sB.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Udáno „pouze triviální“, ovšem toto není triviální operace."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ano, udělej to tak, jak říkám!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Chystáte se vykonat něco potenciálně škodlivého.\n"
+"Pro pokračování opište frázi „%s“\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Přerušeno."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Chcete pokračovat?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Některé soubory nemohly být staženy"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Stahování dokončeno v režimu pouze stáhnout"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing a výměna média nejsou momentálně podporovány"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Nelze opravit chybějící balíky."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Instalace se přerušuje."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Následující balík z tohoto systému zmizel, protože\n"
+"všechny jeho soubory byly přepsány jinými balíky:"
+msgstr[1] ""
+"Následující balíky z tohoto systému zmizely, protože\n"
+"všechny jejich soubory byly přepsány jinými balíky:"
+msgstr[2] ""
+"Následující balíky z tohoto systému zmizely, protože\n"
+"všechny jejich soubory byly přepsány jinými balíky:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Poznámka: Toto má svůj důvod a děje se automaticky v dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Neměli bychom mazat věci, nelze spustit AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, zdá se, že AutoRemover zničil něco, co neměl.\n"
+"Nahlaste prosím chybu v apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Vnitřní chyba, AutoRemover pokazil věci"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Následující balík byl nainstalován automaticky a již není potřeba:"
+msgstr[1] ""
+"Následující balíky byly nainstalovány automaticky a již nejsou potřeba:"
+msgstr[2] ""
+"Následující balíky byly nainstalovány automaticky a již nejsou potřeba:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu balík byl nainstalován automaticky a již není potřeba.\n"
+msgstr[1] "%lu balíky byly nainstalovány automaticky a již nejsou potřeba.\n"
+msgstr[2] "%lu balíků bylo nainstalováno automaticky a již nejsou potřeba.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Pro jeho odstranění použijte „%s“."
+msgstr[1] "Pro jejich odstranění použijte „%s“."
+msgstr[2] "Pro jejich odstranění použijte „%s“."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "Následující dodatečné balíky budou instalovány:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Navrhované balíky:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Doporučované balíky:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "%s bude přeskočen, protože je již nainstalován.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"%s bude přeskočen, protože není nainstalován a vyžadovány jsou pouze "
+"aktualizace.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Přeinstalace %s není možná, protože nelze stáhnout.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s je již nejnovější verze (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s nastaven jako instalovaný ručně.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Vybraná verze „%s“ (%s) pro „%s“\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Vybraná verze „%s“ (%s) pro „%s“ kvůli „%s“\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Vypisuje se"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "Existuje %i další verze. Zobrazíte ji přepínačem „-a“."
+msgstr[1] "Existují %i další verze. Zobrazíte je přepínačem „-a“."
+msgstr[2] "Existuje %i dalších verzí. Zobrazíte je přepínačem „-a“."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"INFO: Toto je pouze simulace!\n"
+" %s vyžaduje pro skutečný běh rootovská oprávnění.\n"
+" Mějte také na paměti, že je vypnuto zamykání, tudíž\n"
+" tyto výsledky nemusí mít s realitou nic společného!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "neznámá"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[instalovaný,aktualizovatelný na: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[instalovaný,lokální]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[instalovaný,automaticky-odstranitelný]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[instalovaný,automaticky]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[instalovaný]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[aktualizovatelný z: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[zbytkové-konfigurační-coubory]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ale %s je nainstalován"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ale %s se bude instalovat"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ale nedá se nainstalovat"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ale je to virtuální balík"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ale nebude se instalovat"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ale není nainstalovaný"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " nebo"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Následující balíky mají nesplněné závislosti:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Následující NOVÉ balíky budou nainstalovány:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Následující balíky budou ODSTRANĚNY:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Následující balíky jsou podrženy v aktuální verzi:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Následující balíky budou aktualizovány:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Následující balíky budou DEGRADOVÁNY:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Následující podržené balíky budou změněny:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (kvůli %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"VAROVÁNÍ: Následující nezbytné balíky budou odstraněny.\n"
+"Pokud přesně nevíte, co děláte, NEDĚLEJTE to!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu aktualizováno, %lu nově instalováno, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu přeinstalováno, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu degradováno, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu k odstranění a %lu neaktualizováno.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu instalováno nebo odstraněno pouze částečně.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Y/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[y/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Musíte zadat alespoň jeden vyhledávací vzor"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Fulltextové hledání"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "Existuje %i další záznam. Zobrazíte jej přepínačem „-a“."
+msgstr[1] "Existují %i další záznamy. Zobrazíte je přepínačem „-a“."
+msgstr[2] "Existuje %i dalších záznamů. Zobrazíte je přepínačem „-a“."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "není skutečný balík (virtuální)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Soubory balíku:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Cache není synchronizovaná, nelze se odkázat na soubor balíku"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Vypíchnuté balíky:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s s prioritou %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalovaná verze: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidát: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(žádná)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabulka verzí:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Nelze najít balík pro architekturu „%s“"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Nelze najít balík „%s“ s verzí „%s“"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Nelze najít balík „%s“ z vydání „%s“"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Vybírám „%s“ jako zdrojový balík místo „%s“\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Nelze najít verzi „%s“ balíku „%s“"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Musíte zadat aspoň jeden balík, pro který se stáhnou zdrojové texty"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Nelze najít zdrojový balík pro %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"INFO: Balík „%s“ je spravován v systému pro správu verzí „%s“ na:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Pro stažení nejnovějších (možná dosud nevydaných) aktualizací balíku prosím "
+"použijte:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Přeskakuje se dříve stažený soubor „%s“\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Nutno stáhnout %sB/%sB zdrojových archivů.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Nutno stáhnout %sB zdrojových archivů.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Stažení zdroje %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Stažení některých archivů selhalo."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Přeskakuje se rozbalení již rozbaleného zdroje v %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Příkaz pro rozbalení „%s“ selhal.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Zkontrolujte, zda je nainstalován balík „dpkg-dev“.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Příkaz pro sestavení „%s“ selhal.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Nelze získat závislosti pro sestavení %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s nemá žádné závislosti pro sestavení.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"O architektuře %s nejsou známy žádné informace. Pro nastavení si přečtěte "
+"část APT::Architectures v manuálové stránce apt.conf(5)"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Musíte zadat alespoň jeden balík, pro který budou kontrolovány závislosti "
+"pro sestavení"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "Pro získání závislostí pro sestavení se používá adresář „%s“\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Pro získání závislostí pro sestavení se používá soubor „%s“\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Chyba při zpracování závislostí pro sestavení"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Nepodařilo se zpracovat %s. Zkusit znovu upravit?"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "Soubor „%s“ se změnil, spusťte prosím „apt-get update“.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Balík %s verze %s má nesplněné závislosti:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Příkaz update neakceptuje žádné argumenty"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i balík může být aktualizován. Zobrazíte jej „apt list --upgradable“.\n"
+msgstr[1] ""
+"%i balíky mohou být aktualizovány. Zobrazíte je „apt list --upgradable“.\n"
+msgstr[2] ""
+"%i balíků může být aktualizováno. Zobrazíte je „apt list --upgradable“.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Všechny balíky jsou aktuální."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "%s neakceptuje žádné argumenty"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Celkem názvů balíků: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Celkem struktur balíků: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normálních balíků: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Čistě virtuálních balíků: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Jednoduchých virtuálních balíků: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Smíšených virtuálních balíků: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Chybějících: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Celkem různých verzí: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Celkem různých popisů: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Celkem závislostí: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Celkem vztahů ver/soubor: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Celkem vztahů popis/soubor: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Celkem poskytnutých mapování: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Celkem globovaných řetězců: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Celkem jalového místa: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Celkem přiřazeného místa: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Tento příkaz je zastaralý, použijte místo něj „apt-mark showauto“."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Použití: apt-cache [volby] příkaz\n"
+" apt-cache [volby] show balík1 [balík2 …]\n"
+"\n"
+"apt-cache dotazuje a zobrazuje dostupné informace o instalovaných\n"
+"a instalovatelných balících. Pracuje pouze s lokálními daty získanými\n"
+"příkazem „update“ např. programu apt-get. Zobrazené informace tedy\n"
+"mohou být zastaralé (pokud poslední aktualizace proběhla dávněji),\n"
+"ale zato apt-cache pracuje nezávisle na dostupnosti nastavených\n"
+"zdrojů (např. offline).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Zobrazí zdrojové záznamy"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "V seznamu balíků hledá regulární výraz"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Zobrazí závislosti balíku"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Zobrazí reverzní závislosti balíku"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Zobrazí informace o balíku"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Vypíše jména všech balíků v systému"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Zobrazí nastavenou politiku"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Zadejte prosím název tohoto média, např. „Debian 5.0.3 Disk 1“"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Vložte prosím médium do mechaniky a stiskněte [Enter]"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Selhalo připojení „%s“ na „%s“"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Na výchozím přípojném bodu nebylo rozpoznáno/nalezeno žádné CD-ROM.\n"
+"Můžete zkusit zadat přípojný bod CD-ROM volbou --cdrom.\n"
+"Více o rozpoznávání CD-ROM a přípojných bodech naleznete v „man apt-cdrom“."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Tento proces opakujte pro všechna zbývající média."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Použití: apt-cdrom [volby] příkaz\n"
+"\n"
+"apt-cdrom se používá pro přidání CD, USB klíčenek a jiných\n"
+"vyjímatelných médií jako zdrojů pro APT. Přípojný bod a informace\n"
+"o zařízení se získává z apt.conf(5), udev(7) a fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumenty nejsou v párech"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Použití: apt-config [volby] příkaz\n"
+"\n"
+"apt-config je jednoduchý nástroj pro nastavení voleb používaných všemi\n"
+"nástroji rodiny APT. Převážně je zamýšlen pro ladění a skriptování.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "získá nastavení přes shellové vyhodnocování"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "zobrazí aktuálně platné nastavení"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Použití: apt-dump-solver\n"
+"\n"
+"apt-dump-solver slouží pro uložení EDSP scénáře do\n"
+"souboru a případnému přeposlání jinému řešiteli.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Použití: apt-extracttemplates soubor1 [soubor2 …]\n"
+"\n"
+"apt-extracttemplates umí z balíků vytáhnout konfigurační skripty\n"
+"a šablony. Využívá ho hlavně debconf(1) pro zobrazení některých\n"
+"otázek ještě před samotnou instalací balíků.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Nelze určit verzi programu debconf. Je debconf nainstalován?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Nelze najít balík %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s nastaven jako instalovaný automaticky.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Tento příkaz je zastaralý, použijte místo něj „apt-mark auto“ a „apt-mark "
+"manual“."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Vnitřní chyba, řešitel problémů pokazil věci"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Podporované moduly:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Použití: apt-get [volby] příkaz\n"
+" apt-get [volby] install|remove balík1 [balík2 …]\n"
+" apt-get [volby] source balík1 [balík2 …]\n"
+"\n"
+"apt-get je řádkové rozhraní pro stahování balíků a informací o nich\n"
+"z ověřených zdrojů a pro instalaci, aktualizaci a odstranění balíků\n"
+"včetně jejich závislostí.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Získá seznam nových balíků"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Provede aktualizaci"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instaluje nové balíky (balík je libc6, ne libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instaluje nové balíky (balík je libc6, ne libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Odstraní balíky"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Odstraní balíky včetně konfiguračních souborů"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "automaticky odstraní nepoužívané balíky"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Aktualizace distribuce, viz apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Řídí se podle výběru v dselectu"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Pro zdrojové balíky nastaví build-dependencies"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Smaže stažené archivy"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Smaže staré stažené archivy"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Ověří, zda se nevyskytují porušené závislosti"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Stáhne zdrojové archivy"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Stáhne binární balík to aktuálního adresáře"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Stáhne a zobrazí seznam změn daného balíku"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Jako argument vyžaduje jedno URL"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Musíte zadat aspoň jeden pár url/jméno souboru"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Stažení selhalo"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec %s selhalo"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Použití: apt-helper [volby] příkaz\n"
+" apt-helper [volby] cat-file soubor\n"
+" apt-helper [volby] download-file uri cílová_cesta\n"
+"\n"
+"apt-helper zaobaluje nejrůznější příkazy pro shellové skripty,\n"
+"např. aby použily stejné nastavení proxy nebo způsob stahování,\n"
+"jako by použila APT.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "stáhne zadané uri do cílové cesty"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "vyhledá SRV záznam (např. _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "spojí soubory, automaticky je rozbalí"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "detekuje proxy pomocí apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Použití: apt-internal-planner\n"
+"\n"
+"apt-internal-planner je rozhraní k aktuálnímu internímu plánovači\n"
+"instalací, aby se dal použít jako externí nástroj, např. pro ladění.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Použití: apt-internal-solver\n"
+"\n"
+"apt-internal-solver je rozhraní k aktuálnímu internímu řešiteli\n"
+"závislostí, aby se dal použít jako externí nástroj, např. pro ladění.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s nemůže být označen, protože není nainstalovaný.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s již byl nastaven jako instalovaný ručně.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s již byl nastaven jako instalovaný automaticky.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Následující NOVÉ balíky budou nainstalovány:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s již byl podržen v aktuální verzi.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s již nebyl držen v aktuální verzi.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Spuštění dpkg selhalo. Jste root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s bude podržen v aktuální verzi.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Podržení balíku %s v aktuální verzi bylo zrušeno.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "%s byl vybrán pro odstranění včetně konfguračních souborů.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "%s byl vybrán pro odstranění.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "%s byl vybrán pro instalaci.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Použití: apt-mark [volby] {auto|manual} balík1 [balík2 …]\n"
+"\n"
+"apt-mark je jednoduché řádkové rozhraní pro označování balíků jako\n"
+"instalovaných ručně nebo automaticky. Také umí manipulovat s dpkg(1)\n"
+"stavem balíků a vypsat všechny balíky s/bez konkrétního označení.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Označí dané balíky jako instalované automaticky"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Označí dané balíky jako instalované ručně"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Označí dané balíky jako instalované automaticky"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Označí balík jako podržený v aktuální verzi"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Zruší podržení balíku v aktuální verzi"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Vypíše seznam balíků instalovaných automaticky"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Vypíše seznam balíků instalovaných ručně"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Vypíše seznam podržených balíků"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Neznámý záznam o balíku!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Použtí: apt-sortpkgs [volby] soubor1 [soubor2 …]\n"
+"\n"
+"apt-sortpkgs je jednoduchý nástroj pro setřídění souborů Packages.\n"
+"Standardně řadí dle binárních balíků, ale volbou -s je možno\n"
+"přepnout na řazení dle zdrojových balíků.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Použití: apt [volby] příkaz\n"
+"\n"
+"apt je řádkový správce balíků a poskytuje příkazy pro jejich hledání,\n"
+"správu a také pro zjišťování informací o balících.\n"
+"Poskytuje stejnou funkcionalitu jako specializované APT nástroje typu\n"
+"apt-get a apt-cache, ale je lépe nastaven pro interaktivní použití.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "vypíše balíky podle jmen"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "hledá v popisech balíků"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "zobrazí podrobnosti balíku"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "nainstaluje balíky"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "nainstaluje balíky"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "odstraní balíky"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "aktualizuje seznam dostupných balíků"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "aktualizuje systém instalací/aktualizací balíků"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "aktualizuje systém instalací/aktualizací/odstraněním balíků"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "upraví soubor se zdroji balíků"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Chybné standardní nastavení!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Pro pokračování stiskněte [Enter]."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Chcete smazat všechny dříve stažené .deb soubory?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Během rozbalování se vyskytly chyby. Balíky, které se nainstalovaly"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "budou zkonfigurovány. To může způsobit duplicitní chybové hlášky"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "o nesplněných závislostech. To je v pořádku, důležité jsou pouze"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "chyby nad touto hláškou. Opravte je a poté znovu spusťte [I]nstalovat"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Slučují se dostupné informace"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Seznam rozšíření balíku je příliš dlouhý"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Chyba zpracování adresáře %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Seznam zdrojových rozšíření je příliš dlouhý"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Chyba při zapisování hlavičky do souboru"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Chyba při zpracovávání obsahu %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Použití: apt-ftparchive [volby] příkaz\n"
+"Příkazy: packages binárnícesta [souboroverride [prefixcesty]]\n"
+" sources zdrojovácesta [souboroverride [prefixcesty]]\n"
+" contents cesta\n"
+" release cesta\n"
+" generate konfiguračnísoubor [skupiny]\n"
+" clean konfiguračnísoubor\n"
+"\n"
+"apt-ftparchive generuje indexové soubory debianích archivů. Podporuje\n"
+"několik režimů vytváření - od plně automatického až po funkční ekvivalent\n"
+"příkazů dpkg-scanpackages a dpkg-scansources.\n"
+"\n"
+"apt-ftparchive vytvoří ze stromu .deb souborů soubory Packages. Soubor\n"
+"Packages obsahuje kromě všech kontrolních polí každého balíku také jeho\n"
+"velikost a MD5 součet. Podporován je také soubor override, kterým můžete \n"
+"vynutit hodnoty polí Priority a Section.\n"
+"\n"
+"Podobně umí apt-ftparchive vygenerovat ze stromu souborů .dsc soubory\n"
+"Sources. Volbou --source-override můžete zadat zdrojový soubor override.\n"
+"\n"
+"Příkazy „packages“ a „sources“ by se měly spouštět z kořene stromu.\n"
+"BinárníCesta by měla ukazovat na začátek rekurzivního hledání a soubor \n"
+"override by měl obsahovat příznaky pro přepis. PrefixCesty, pokud je\n"
+"přítomen, je přidán do polí Filename.\n"
+"Reálný příklad na archivu Debianu:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Volby:\n"
+" -h Tato nápověda\n"
+" --md5 Vygeneruje kontrolní MD5\n"
+" -s=? Zdrojový soubor override\n"
+" -q Tichý režim\n"
+" -d=? Vybere volitelnou databázi pro vyrovnávací paměť\n"
+" --no-delink Povolí ladicí režim\n"
+" --contents Vygeneruje soubor Contents\n"
+" -c=? Načte tento konfigurační soubor\n"
+" -o=? Nastaví libovolnou volbu"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Žádný výběr nevyhověl"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Některé soubory chybí v balíkovém souboru skupiny %s"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB je porušená, soubor přejmenován na %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB je stará, zkouším aktualizovat %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Formát databáze je neplatný. Pokud jste přešli ze starší verze apt, databázi "
+"prosím odstraňte a poté ji znovu vytvořte."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Nelze otevřít DB soubor %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Nelze přečíst .dsc"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Archiv nemá kontrolní záznam"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Nelze získat kurzor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Selhal pokus o přidělení paměti"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Neznámý kompresní algoritmus „%s“"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Komprimovaný výstup %s potřebuje kompresní sadu"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Selhalo vytvoření meziprocesové roury k podprocesu"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Volání fork() se nezdařilo"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Komprimovat potomka"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Interní chyba, nezdařilo se vytvořit %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "V/V operace s podprocesem/souborem selhala"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Chyba čtení při výpočtu MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Nelze otevřít %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Zkomolený override soubor %s, řádek %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Nezdařilo se přečíst override soubor %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Zkomolený override soubor %s, řádek %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Zkomolený override soubor %s, řádek %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Zkomolený override soubor %s, řádek %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Nelze číst adresář %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Nelze vyhodnotit %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Chyby se týkají souboru "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Chyba při zjišťování %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Průchod stromem selhal"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Nelze otevřít %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr "Odlinkování %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Nezdařilo se slinkovat %s s %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Odlinkovací limit %sB dosažen.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Archiv nemá pole Package"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s nemá žádnou položku pro override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " správce %s je %s, ne %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s nemá žádnou zdrojovou položku pro override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s nemá ani žádnou binární položku pro override\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Čeká se na hlavičky"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Http server poslal neplatnou hlavičku odpovědi"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Chybná hlavička"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Http server poslal neplatnou hlavičku Content-Length"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Http server poslal neplatnou hlavičku Content-Range"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Tento HTTP server má porouchanou podporu rozsahů"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Neznámý formát data"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Špatné datové záhlaví"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Spojení selhalo"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"Automaticky zakázáno %s kvůli chybné odpovědi od serveru/proxy. (man 5 apt."
+"conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Vnitřní chyba"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Nelze číst databázi na cdrom %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Pro přidání CD do APTu použijte apt-cdrom. apt-get update nelze využít pro "
+"přidávání nových CD."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Chybné CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Nelze odpojit CD-ROM v %s - možná se stále používá."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disk nebyl nalezen."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Soubor nebyl nalezen"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "Přímé spojení k doménám %s je implicitně blokováno."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Připojování k %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Připojování k %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Nelze vytvořit socket pro %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Nelze navázat spojení na %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Selhalo"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Nelze se připojit k %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Nelze se připojit k %s:%s (%s), čas spojení vypršel"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Připojování k %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nelze přeložit „%s“"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Dočasné selhání při zjišťování „%s“"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Systémová chyba při překladu „%s:%s“"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Něco hodně ošklivého se přihodilo při překladu „%s:%s“ (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nelze se připojit k %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Selhalo vyhodnocení"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Neplatné URI, lokální URI nesmí začínat na //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Přihlašování"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Nelze určit jméno druhé strany"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Nelze určit lokální jméno"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Server zamítl naše spojení a řekl: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER selhal, server řekl: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS selhal, server řekl: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Byl zadán proxy server, ale ne přihlašovací skript. Acquire::ftp::ProxyLogin "
+"je prázdný."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Příkaz „%s“ přihlašovacího skriptu selhal, server řekl: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE selhal, server řekl: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Čas spojení vypršel"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Server uzavřel spojení"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Odpověď přeplnila buffer."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Porušení protokolu"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Nelze vytvořit socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Nelze připojit datový socket, čas spojení vypršel"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Nelze připojit pasivní socket."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo nezískal naslouchající socket"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Nelze navázat socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Nelze naslouchat na socketu"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Nelze určit jméno socketu"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Nelze odeslat příkaz PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Neznámá rodina adres %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT selhal, server řekl: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Spojení datového socketu vypršelo"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Nelze přijmout spojení"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problém s kontrolním součtem souboru"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Nelze stáhnout soubor, server řekl „%s“"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Datový socket vypršel"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Přenos dat selhal, server řekl „%s“"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Dotaz"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Nelze vyvolat "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Podepsaný soubor není platný, obdrženo „%s“ (vyžaduje přístup na síť "
+"ověření?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Byl zaznamenán nejméně jeden neplatný podpis. "
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "Vnitřní chyba: Dobrý podpis, ale nelze zjistit otisk klíče?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr "Nelze spustit „apt-key“ pro ověření podpisu (je gnupg nainstalováno?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Neznámá chyba při spouštění apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "Podpis klíčem %s používá slabý algoritmus (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Následující podpisy jsou neplatné:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Následující podpisy nemohly být ověřeny, protože není dostupný veřejný "
+"klíč:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Chyba zápisu do souboru"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Chyba čtení ze serveru. Druhá strana zavřela spojení"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Chyba čtení ze serveru"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Chyba zápisu do souboru"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Výběr selhal"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Čas spojení vypršel"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Chyba zápisu do výstupního souboru"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Nelze nastavit čas modifikace"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Spojení bylo předčasně ukončeno"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Prázdné soubory nejsou platnými archivy"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Neplatné záhlaví prvku archivu %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Odstraněn %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Soubor balíku %s je špatně synchronizovaný."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Indexové soubory balíku jsou narušeny. Chybí pole Filename: u balíku %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Soubor se zrcadly „%s“ nebyl nalezen "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Nelze číst soubor se zrcadly „%s“"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "V souboru se zrcadly „%s“ nebyl nalezen žádný záznam"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Zrcadlo: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Otevírá se konfigurační soubor %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Otevírá se %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "V souboru Release nelze najít očekávanou položku „%s“ (chybný sources."
+#~ "list nebo porušený soubor)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Nesplněné závislosti. Zkuste použít --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Pro opravení následujících můžete spustit „apt --fix-broken install“:"
+
+#~ msgid "(not found)"
+#~ msgstr "(nenalezeno)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Vypíchnutý balík: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "K následujícím ID klíčů není dostupný veřejný klíč:\n"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "závislost %s pro %s nemůže být splněna, protože %s není na balících „%s“ "
+#~ "dovolena"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "závislost %s pro %s nemůže být splněna, protože balík %s nebyl nalezen"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Selhalo splnění závislosti %s pro %s: Instalovaný balík %s je příliš nový"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "závislost %s pro %s nemůže být splněna, protože kandidátská verze balíku "
+#~ "%s nesplňuje požadavek na verzi"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "závislost %s pro %s nemůže být splněna, protože balík %s nemá "
+#~ "kandidátskou verzi"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Selhalo splnění závislosti %s pro %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Závislosti pro sestavení %s nemohly být splněny."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problém s odlinkováním %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Nelze odlinkovat %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Použití: apt-cache [volby] příkaz\n"
+#~ " apt-cache [volby] show balík1 [balík2 …]\n"
+#~ "\n"
+#~ "apt-cache je nízkoúrovňový nástroj pro získávání informací o balících.\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Příkazy:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Volby:\n"
+#~ " -h Tato nápověda.\n"
+#~ " -p=? Vyrovnávací paměť balíků.\n"
+#~ " -s=? Vyrovnávací paměť zdrojů.\n"
+#~ " -q Nezobrazí indikátor postupu.\n"
+#~ " -i U příkazu unmet zobrazí pouze důležité závislosti.\n"
+#~ " -c=? Načte daný konfigurační soubor\n"
+#~ " -o=? Nastaví libovolnou volbu, např. -o dir::cache=/tmp\n"
+#~ "Více informací viz manuálové stránky apt-cache(8) a apt.conf(5).\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Použití: apt [volby] příkaz\n"
+#~ "\n"
+#~ "Řádkové rozhraní pro apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Volby:\n"
+#~ " -h Tato nápověda.\n"
+#~ " -q Nezobrazí indikátor postupu - vhodné pro záznam\n"
+#~ " -qq Nezobrazí nic než chyby\n"
+#~ " -s Pouze simuluje prováděné akce\n"
+#~ " -f Přečte/zapíše ruční/automatické značky z/do daného souboru\n"
+#~ " -c=? Načte daný konfigurační soubor\n"
+#~ " -o=? Nastaví libovolnou volbu, např. -o dir::cache=/tmp\n"
+#~ "Více informací viz manuálové stránky apt-mark(8) a apt.conf(5)."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Volby:\n"
+#~ " -h Tato nápověda.\n"
+#~ " -c=? Načte tento konfigurační soubor\n"
+#~ " -o=? Nastaví libovolnou volbu, např. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Volby:\n"
+#~ " -h Tato nápověda.\n"
+#~ " -q Nezobrazí indikátor postupu - vhodné pro záznam\n"
+#~ " -qq Nezobrazí nic než chyby\n"
+#~ " -s Pouze simuluje prováděné akce\n"
+#~ " -f Přečte/zapíše ruční/automatické značky z/do daného souboru\n"
+#~ " -c=? Načte daný konfigurační soubor\n"
+#~ " -o=? Nastaví libovolnou volbu, např. -o dir::cache=/tmp\n"
+#~ "Více informací viz manuálové stránky apt-mark(8) a apt.conf(5)."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Použití: apt-sortpkgs [volby] soubor1 [soubor2 …]\n"
+#~ "\n"
+#~ "apt-sortpkgs je jednoduchý nástroj pro setřídění souborů Packages.\n"
+#~ "Volbou -s volíte typ souboru.\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -h Tato nápověda\n"
+#~ " -s Setřídí zdrojový soubor\n"
+#~ " -c=? Načte tento konfigurační soubor\n"
+#~ " -o=? Nastaví libovolnou volbu, např. -o dir::cache=/tmp\n"
+
+#~ msgid "Use --allow-insecure-repositories to force the update"
+#~ msgstr "Pro vynucení aktualizace použijte --allow-insecure-repositories"
+
+#~ msgid ""
+#~ "The data from '%s' is not signed. Packages from that repository can not "
+#~ "be authenticated."
+#~ msgstr ""
+#~ "Data z „%s“ nejsou podepsaná. Balíky z tohoto repositáře nemohou být "
+#~ "ověřeny."
+
+#~ msgid ""
+#~ "The repository '%s' does not have a Release file. This is deprecated, "
+#~ "please contact the owner of the repository."
+#~ msgstr ""
+#~ "Repositář „%s“ neobsahuje soubor Release. To již není podporováno, "
+#~ "kontaktujte prosím správce repositáře."
+
+#~ msgid "Child process failed"
+#~ msgstr "Synovský proces selhal"
+
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Musíte zadat aspoň jeden SRV záznam"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Selhalo vytvoření roury"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Selhalo spuštění gzipu "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s pro %s zkompilován na %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Selhalo vytvoření FILE*"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Zkomolená část %u v seznamu zdrojů %s (zpracování URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (nezpracovatelná [volba])"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (příliš krátká [volba])"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s ([%s] není přiřazení)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s ([%s] nemá klíč)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s ([%s] klíč %s nemá hodnotu)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (zpracování URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (absolutní dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (zpracování dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Při zpracování závislostí nebyl nalezen balík %s %s"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Nešlo vyhodnotit seznam zdrojových balíků %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Collecting File poskytuje"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "V souboru Release nelze najít kontrolní součet „%s“"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Blok výrobce %s neobsahuje otisk klíče"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Celkem místa závislých verzí: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Na %s nemáte dostatek volného místa"
+
+#~ msgid "Done"
+#~ msgstr "Hotovo"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "V %s není nainstalována žádná klíčenka."
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "Je standardní výstup terminál?"
+
+#~ msgid "ioctl(TIOCGWINSZ) failed"
+#~ msgstr "volání ioctl(TIOCGWINSZ) selhalo"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s není platný DEB balík."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Používám přípojný bod %s\n"
+#~ "Připojuji CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nelze záplatovat %s pomocí mmapu a souborových operací - zdá se, že je "
+#~ "záplata porušená."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nelze záplatovat %s pomocí mmapu (ovšem žádná chyba specifická pro mmap "
+#~ "nebyla zaznamenána) - zdá se, že je záplata porušená."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Ignoruje se nedostupné vydání „%s“ balíku „%s“"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Stahuje se %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "Toto není platný DEB archiv, neobsahuje část „%s“, „%s“ ani „%s“"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Neshoda MD5 součtů"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Nebylo možné nalézt soubor s balíkem %s. Asi budete muset tento balík "
+#~ "opravit ručně."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Nelze zapsat log, volání openpty() selhalo (/dev/pts není připojen?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Přeskakuji neexistující soubor %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Selhalo odstranění %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Nelze vytvořit %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Selhalo vyhodnocení %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Adresáře info a temp musí být na stejném souborovém systému"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Nepodařilo se změnit na admin adresář %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Vnitřní chyba při získávání jména balíku"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Čtu výpis souborů"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Selhalo otevření souboru seznamů „%sinfo/%s“. Pokud nemůžete tento soubor "
+#~ "obnovit, vytvořte jej nový prázdný a ihned znovu nainstalujte tu samou "
+#~ "verzi balíku!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Chyba při čtení souboru se seznamy %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Vnitřní chyba při získávání uzlu"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Selhalo otevření souboru s diverzemi %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Diverzní soubor je porušen"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Neplatná řádka v diverzním souboru: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Vnitřní chyba při přidávání diverze"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Cache balíků se musí nejprve inicializovat"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Chyba při hledání Balíku: Hlavička, offset %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Špatná sekce ConfFile ve stavovém souboru na pozici %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Chyba při zpracování MD5. Offset %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Nelze přejít do %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Nelze najít platný kontrolní soubor"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nelze otevřít rouru pro %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Chyba čtení z procesu %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Získal jsem jednu řádku hlavičky přes %u znaků"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Poznámka: Toto má svůj důvod a děje se automaticky v dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Zkomolený soubor %s, řádek %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Zkomolený soubor %s, řádek %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Zkomolený soubor %s, řádek %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "dekompresor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "čtení, stále mám k přečtení %lu, ale už nic nezbývá"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "zápis, stále mám %lu k zápisu, ale nejde to"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Nelze spustit okamžitou konfiguraci již rozbaleného balíku „%s“. "
+#~ "Podrobnosti naleznete v man 5 apt.conf v části APT::Immediate-Configure."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Při zpracování %s se objevila chyba (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Při zpracování %s se objevila chyba (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Při zpracování %s se objevila chyba (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Chyba při zpracování %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Při zpracování %s se objevila chyba (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Vnitřní chyba, nemohu nalézt člen"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Interní chyba, skupina „%s“ nemá instalovatelný pseudobalík"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Souboru Release vypršela platnost, ignoruji %s (neplatný již %s)"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Seznam argumentů Acquire::gpgv::Options je příliš dlouhý. Končím."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Zkomolený řádek %u v seznamu zdrojů %s (id výrobce)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Nelze přistoupit ke klíčence: „%s“"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Nelze záplatovat soubor"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Zpracovávám spouštěče pro %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "Dynamickému MMapu došlo místo"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Protože jste požádali pouze o jednoduchou operaci, je téměř jisté, že\n"
+#~ "balík není instalovatelný a měl byste o tom zaslat hlášení o chybě\n"
+#~ "(bug report)."
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Řádek %d je příliš dlouhý (max %lu)"
+
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Řádek %d je příliš dlouhý (max %d)"
+
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewFileDesc1)"
+
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Při zpracování %s se objevila chyba (NewFileDesc2)"
+
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Uložený název: %s \n"
+
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "Nalezl jsem indexy balíků (%i), indexy zdrojů (%i), indexy překladů (%i) "
+#~ "a podpisy (%i)\n"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Datum souboru se změnil %s"
+
+#~ msgid "Reading file list"
+#~ msgstr "Čtu seznam souborů"
+
+#~ msgid "Could not execute "
+#~ msgstr "Nelze spustit "
+
+#~ msgid "Preparing for remove with config %s"
+#~ msgstr "Připravuji odstranění %s včetně konfiguračních souborů"
+
+#~ msgid "Removed with config %s"
+#~ msgstr "Odstraněn %s včetně konfiguračního souboru"
diff --git a/po/cy.po b/po/cy.po
new file mode 100644
index 0000000..3f6febd
--- /dev/null
+++ b/po/cy.po
@@ -0,0 +1,4371 @@
+# APT yn Gymraeg: APT in Welsh.
+# This file is under the same licence as APT itself.
+# Dafydd Harries <daf@muse.19inch.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2005-06-06 13:46+0100\n"
+"Last-Translator: Dafydd Harries <daf@muse.19inch.net>\n"
+"Language-Team: Welsh <cy@pengwyn.linux.org.uk>\n"
+"Language: cy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n==2) ? 1 : 0;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Llofnod archif annilys"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Gwall wrth ddarllen pennawd aelod archif"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Pennawd aelod archif annilys"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Mae'r archif yn rhy fyr"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Methwyd darllen pennawdau'r archif"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Methwyd canfod pecyn %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Archif llygredig"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Methodd swm gwirio Tar, archif llygredig"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Math pennawd TAR anhysbys %u, aelod %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Nid yw hyn yn archif DEB dilys, aelod '%s' ar goll"
+
+#: apt-inst/deb/debfile.cc
+#, fuzzy, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Gwall Mewnol, methwyd lleoli aelod %s"
+
+#: apt-inst/deb/debfile.cc
+#, fuzzy
+msgid "Unparsable control file"
+msgstr "Ffeil rheoli ni ellir ei ramadegu"
+
+#: apt-inst/dirstream.cc
+#, fuzzy, c-format
+msgid "Failed to write file %s"
+msgstr "Methwyd ysgrifennu ffeil %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Methwyd cau ffeil %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Mae'r llwybr %s yn rhy hir"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Yn dadbacio %s mwy nag unwaith"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Mae'r pecyn yn ceisio ysgrifennu i'r targed dargyfeiriad %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Mae llwybr y dargyfeiriad yn rhy hir"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Methodd stat() o %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Methwyd ailenwi %s at %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr ""
+"Mae'r cyfeiriadur %s yn cael ei amnewid efo rhywbeth nid cyfeiriadur ydyw"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Methwyd lleoli nôd yn ei fwced stwnsh"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Mae'r llwybr yn rhy hir"
+
+# FIXME: wtf?
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Cyfatebiad pecyn trosysgrifo gyda dim fersiwn am %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Mae'r ffeil %s/%s yn trosysgrifo'r un yn y pecyn %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Ni ellir darllen %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Ni ellir gwneud stat() o %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Galwyd DropNode ar nôd sydd o hyd wedi ei gysylltu"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Methyd lleoli yr elfen <hash>!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Methwyd neilltuo dargyfeiriad"
+
+#: apt-inst/filelist.cc
+#, fuzzy
+msgid "Internal error in AddDiversion"
+msgstr "Gwall Mewnol yn AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Yn ceisio trosysgrifo dargyfeiriad, %s -> %s a %s/%s"
+
+# FIXME: "the"
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Ychwanegiad dwbl o'r dargyfeiriad %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Ffeil cyfluniad dyblyg %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Methwyd darllen y cyswllt %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Hash Sum mismatch"
+msgstr "Camgyfatebiaeth swm MD5"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "methwyd ailenwi, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Camgyfatebiaeth maint"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Gweithred annilys %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Gwall ysgrifennu"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Methwyd cyrchu %s %s"
+
+# FIXME: case
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Methais i leoli ffeila r gyfer y pecyn %s. Fa all hyn olygu bod rhaid i chi "
+"drwsio'r pecyn hyn a law. (Oherwydd pensaerniaeth coll.)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Yn cysylltu i %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Methwyd canfod y gyrrydd dull %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Ni gychwynodd y dull %s yn gywir"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Newid Cyfrwng: Os gwelwch yn dda, rhowch y disg a'r label\n"
+" '%s'\n"
+"yn y gyrriant '%s' a gwasgwch Enter\n"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Mae'r cyfeiriadur rhestrau %s ar goll."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Mae'r cyfeiriadur archif %s ar goll."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Ni ellir cloi'r cyfeiriadur rhestr"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Ni chynhelir y math ffeil mynegai '%s'"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Yn Darllen Rhestr Ffeiliau"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Mae angen ailsefydlu'r pecyn %s, ond dydw i ddim yn gallu canfod archif ar "
+"ei gyfer."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Gwall: Cynhyrchodd pkgProblemResolver::Resolve doriadau. Fe all hyn fod wedi "
+"ei achosi gan pecynnau wedi eu dal."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Ni ellir cywiro'r problemau gan eich bod chi wedi dal pecynnau torredig."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Methwyd agor neu ramadegu'r ffeil rhestrau neu statws."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Efallai hoffech rhedege apt-get update er mwyn cywiro'r problemau hyn."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Methwyd darllen y rhestr ffynhonellau."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Gwall crynhoi patrwm - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Ni chanfuwyd y rhyddhad '%s' o '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Ni chanfuwyd y fersiwn '%s' o '%s' "
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Methwyd canfod pecyn %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Methwyd canfod pecyn %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Methwyd canfod pecyn %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Ni ellir lleoli'r pecyn %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Llinell %u yn rhy hir yn y rhestr ffynhonell %s."
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Unmounting CD-ROM...\n"
+msgstr "CD Anghywir"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Waiting for disc...\n"
+msgstr "Yn aros am benawdau"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Copying package lists..."
+msgstr "Yn Darllen Rhestrau Pecynnau"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Writing new source list\n"
+msgstr "Llinell %u yn rhy hir yn y rhestr ffynhonell %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Ni ellir newid i %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Ni ellir gwneud stat() o %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Ni ellir gwneud stat() o'r pwynt clymu %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Methwyd gwneud stat() o'r CD-ROM"
+
+# FIXME
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Ni adnabyddir yr opsiwn llinell orchymyn '%c' (o %s)."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Ni adnabyddir yr opsiwn llinell orchymyn %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Nid yw'r opsiwn llinell orchymyn %s yn fŵleaidd"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Mae'r opsiwn %s yn mynnu ymresymiad."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Opsiwn %s: Rhaid i benodiad eitem cyfluniad gael =<gwerth>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Mae'r opsiwn %s yn mynnu ymresymiad cyfanrif, nid '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opsiwn '%s' yn rhy hir"
+
+# FIXME: 'Sense'?
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Ni ddeallir %s, ceiswich ddefnyddio 'true' neu 'false'."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Gweithred annilys %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Talgryniad math anhysbys: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Gwall cystrawen %s:%u: Mae bloc yn cychwyn efo dim enw."
+
+# FIXME
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Gwall cystrawen %s:%u: Tag wedi camffurfio"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Gwall cystrawen %s:%u: Sbwriel ychwanegol ar ôl y gwerth"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Gwall cystrawen %s:%u: Ceir defnyddio cyfarwyddyd ar y lefel dop yn unig"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Gwall cystrawen %s:%u: Gormod o gynhwysion nythol"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Gwall cystrawen %s:%u: Cynhwyswyd o fan hyn"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Gwall cystrawen %s:%u: Cyfarwyddyd ni gynhelir '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Gwall cystrawen %s:%u: Ceir defnyddio cyfarwyddyd ar y lefel dop yn unig"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Gwall cystrawen %s:%u: Sbwriel ychwanegol ar ddiwedd y ffeil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Gwall wrth dadgysylltu'r ffeil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Ddim yn cloi'r ffeil clo darllen-yn-unig %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Methwyd agor y ffeil clo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Ddim yn cloi'r ffeil clo ar NFS %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Methwyd cael y clo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, fuzzy, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Arhoswyd am %s ond nid oedd e yna"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Derbyniodd is-broses %s wall segmentu."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Derbyniodd is-broses %s wall segmentu."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Dychwelodd is-broses %s gôd gwall (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Gorffenodd is-broses %s yn annisgwyl"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Gwall darllen"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Gwall ysgrifennu"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Gwall wrth gau'r ffeil"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Methwyd creu isbroses IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Methwyd gweithredu cywasgydd "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Methwyd agor ffeil %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Methwyd agor pibell ar gyfer %s"
+
+# FIXME
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "o hyd %lu i ddarllen ond dim ar ôl"
+
+# FIXME
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "o hyd %lu i ysgrifennu ond methwyd"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Gwall wrth gau'r ffeil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Gwall wrth gyfamseru'r ffeil"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Gwall wrth gyfamseru'r ffeil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Ni ellir gwneud stat() o %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Ni ellir ysgrifennu i %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Ni ellir defnyddio mmap() ar ffeil gwag"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Methwyd gwneud mmap() efo %lu beit"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Methwyd agor pibell ar gyfer %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Ni ellir agor %s"
+
+# FIXME
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Methwyd gweithredu "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Methwyd gwneud mmap() efo %lu beit"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "Methwyd ysgrifennu ffeil %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Gwall!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Wedi Gorffen"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Wedi Gorffen"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Ni chanfuwyd y dewis %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+# FIXME: number?
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Ni ellir gramadegu ffeil becynnau %s (1)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Sylwer, yn dewis %s yn hytrach na %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Llinell annilys yn y ffeil dargyfeirio: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Ni ellir gramadegu ffeil becynnau %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Ni ellir cloi'r cyfeiriadur rhestr"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Ni ellir cloi'r cyfeiriadur rhestr"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Preparing %s"
+msgstr "Yn agor %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Preparing to configure %s"
+msgstr "Yn agor y ffeil cyfluniad %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Yn agor y ffeil cyfluniad %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installed %s"
+msgstr " Wedi Sefydlu: "
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Configuring %s"
+msgstr "Yn cysylltu i %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Directory '%s' missing"
+msgstr "Mae'r cyfeiriadur rhestrau %s ar goll."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Methwyd agor ffeil %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Unpacking %s"
+msgstr "Yn agor %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr " Wedi Sefydlu: "
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Removing %s"
+msgstr "Yn agor %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "Methwyd dileu %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removed %s"
+msgstr "Methwyd dileu %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Ni ellir ysgrifennu i %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Building dependency tree"
+msgstr "Yn Aideladu Coeden Dibyniaeth"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Candidate versions"
+msgstr "Fersiynau Posib"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Dependency generation"
+msgstr "Cynhyrchaid Dibyniaeth"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "Yn cyfuno manylion Ar Gael"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Methwyd agor %s"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Methwyd ysgrifennu ffeil %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Camgyfatebiaeth swm MD5"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Ni chynhelir y system pecynnu '%s'"
+
+#: apt-pkg/init.cc
+#, fuzzy
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Ni ellir canfod math system addas"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Methwyd agor ffeil %s"
+
+# FIXME: %s may have an arbirrary length
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Bydd y rhediad sefydlu hwn yn gorfodi tynnu'r pecyn angenrheidiol %s "
+"oherwydd lŵp gwrthdaro/cynddibynu. Mae hyn yn aml yn wael, ond os ydych wir "
+"eisiau ei wneud ef, gweithredwch yr opsiwn APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Storfa pecyn gwag"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Mae'r ffeil storfa pecyn yn llygredig"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Mae'r ffeil storfa pecyn yn fersiwn anghyflawn"
+
+# FIXME: capitalisation?
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Nid yw'r APT yma yn cefnogi'r system fersiwn '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Adeiladwyd y storfa pecyn ar gyfer pernsaerniaeth gwahanol"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Mae'r ffeil storfa pecyn yn llygredig"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Dibynnu"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "CynDdibynnu"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Awgrymu"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Gwrthdaro"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Argymell"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Amnewid"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Darfodi"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "pwysig"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "angenrheidiol"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "safonnol"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "ychwanegol"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opsiynnol"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Mae can y storfa system fersiwn anghyfaddas"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Digwyddod gwall wrth brosesu %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Jiw, rhagoroch chi'r nifer o enwau pecyn mae'r APT hwn yn gallu ei drin."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Jiw, rhagoroch chi'r nifer o fersiynau mae'r APT hwn yn gallu ei drin."
+
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Jiw, rhagoroch chi'r nifer o fersiynau mae'r APT hwn yn gallu ei drin."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Jiw, rhagoroch chi'r nifer o ddibyniaethau mae'r APT hwn yn gallu ei drin."
+
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy
+msgid "Reading package lists"
+msgstr "Yn Darllen Rhestrau Pecynnau"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Gwall M/A wrth gadw'r storfa ffynhonell"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Ni chynhelir y math ffeil mynegai '%s'"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+# FIXME: literal
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Cofnod annilys yn y ffeil hoffterau, dim pennawd 'Package'"
+
+# FIXME: tense
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Methwyd daeall y math pin %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Dim blaenoriath (neu sero) wedi ei benodi ar gyfer pin"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Gwrthwneud camffurfiol %s llinell %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Llinell camffurfiol %u yn y rhestr ffynhonell %s (math)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Mae'r math '%s' yn anhysbys ar linell %u yn y rhestr ffynhonell %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Llinell camffurfiol %u yn y rhestr ffynhonell %s (math)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Mae'r math '%s' yn anhysbys ar linell %u yn y rhestr ffynhonell %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+# FIXME: ...file
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Rhaid i chi rhoi rhai URI 'source' yn eich ffeil sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Methwodd rhai ffeiliau mynegai lawrlwytho: maent wedi eu anwybyddu, neu hen "
+"rai eu defnyddio yn lle."
+
+#: apt-pkg/upgrade.cc
+#, fuzzy
+msgid "Calculating upgrade"
+msgstr "Yn Cyfrifo'r Uwchraddiad"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Presennol:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Cyrchu:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Anwybyddu:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Gwall:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Cyrchwyd %sB yn %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Gweithio]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Newid Cyfrwng: Os gwelwch yn dda, rhowch y disg a'r label\n"
+" '%s'\n"
+"yn y gyrriant '%s' a gwasgwch Enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Yn cywiro dibyniaethau..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " wedi methu."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Ni ellir cywiro dibyniaethau"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Ni ellir bychanu y set uwchraddio"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Wedi Gorffen"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Efallai hoffech rhedeg 'apt --fix-broken install' er mwyn cywiro'r rhain."
+
+# FIXME
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dibyniaethau heb eu bodloni. Ceisiwch rhedeg 'apt --fix-broken install' efo "
+"dim pecyn (neu penodwch ddatrys)"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Sylwer, yn dewis %s ar gyfer y patrwm '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Sylwer, yn dewis %s ar gyfer y patrwm '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Sylwer, yn dewis %s ar gyfer y patrwm '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Mae'r pecyn %s yn becyn rhithwir a ddarparir gan:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Sefydliwyd]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Fersiynau Posib"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Dylech ddewis un yn benodol i'w sefydlu."
+
+# FIXME: punctuation
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Does dim fersiwn gan y pecyn %s, ond mae'n bodoli yn y cronfa data.\n"
+"Mae hyn fel arfer yn golygu y crybwyllwyd y pecyn mewn dibyniaeth ond heb\n"
+"gael ei uwchlwytho, cafodd ei ddarfod neu nid yw ar gael drwy gynnwys y\n"
+"ffeil sources.list.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Fodd bynnag, mae'r pecynnau canlynol yn cymryd ei le:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Does dim ymgeisydd sefydlu gan y pecyn %s"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "Nid yw'r pecyn %s wedi ei sefydlu, felly ni chaif ei dynnu\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Nid yw'r pecyn %s wedi ei sefydlu, felly ni chaif ei dynnu\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Sylwer, yn dewis %s yn hytrach na %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Mae gan yr APT hwn bŵerau buwch hudol."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Canfuwyd dim pecyn"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "RHYBUDD: Ni ellir dilysu'r pecynnau canlynol yn ddiogel!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid "Some packages could not be authenticated"
+msgstr "RHYBUDD: Ni ellir dilysu'r pecynnau canlynol yn ddiogel!"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr ""
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Mae problemau a defnyddwyd -y heb --force-yes"
+
+#: apt-private/private-download.cc
+#, fuzzy, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Does dim digon o le rhydd yn %s gennych"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Does dim digon o le rhydd gennych yn %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Ni ellir cloi'r cyfeiriadur lawrlwytho"
+
+# FIXME: needs commas
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Methwyd sefydlu rhai pecynnau. Gall hyn olygu eich bod chi wedi gofyn\n"
+"am sefyllfa amhosib neu, os ydych chi'n defnyddio'r dosraniad\n"
+"ansefydlog, fod rhai pecynnau angenrheidiol heb gael eu creu eto neu\n"
+"heb gael eu symud allan o Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Gall y wybodaeth canlynol gynorthwyo'n datrys y sefyllfa:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Pecynnau wedi torri"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Ni ellir cyrchu rhai archifau, efallai dylwch rhedeg apt-get update, neu "
+"geidio defnyddio --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Rhaid tynnu pecynnau on mae Tynnu wedi ei analluogi."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Mae problemau a defnyddwyd -y heb --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Mae problemau a defnyddwyd -y heb --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal error, Ordering didn't finish"
+msgstr "Gwall Mewnol wrth ychwanegu dargyfeiriad"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Mae angeyn cyrchu %sB/%sB o archifau.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Mae angen cyrchu %sB o archifau.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Ar ôl dadbacio defnyddir %sB o ofod disg ychwanegol.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Ar ôl dadbactio caiff %sB o ofod disg ei rhyddhau.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Penodwyd Syml Yn Unig ond nid yw hyn yn weithred syml."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ie, gwna fel rydw i'n dweud!"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Rydych ar fin gwneud rhywbeth a all fod yn niweidiol\n"
+"Er mwyn mynd ymlaen, teipiwch y frawddeg '%s'\n"
+" ?]"
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Erthylu."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Ydych chi eisiau mynd ymlaen?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Methodd rhai ffeiliau lawrlwytho"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Lawrlwytho yn gyflawn ac yn y modd lawrlwytho'n unig"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "Ni chynhelir cyfnewid cyfrwng efo --fix-missing ar hyn o bryd"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Ni ellir cywiro pecynnau ar goll."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Aborting install."
+msgstr "Yn Erthylu'r Sefydliad."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Gwall Mewnol, torrodd AllUpgrade bethau"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Caiff y pecynnau NEWYDD canlynol eu sefydlu:"
+msgstr[1] "Caiff y pecynnau NEWYDD canlynol eu sefydlu:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Caiff y pecynnau NEWYDD canlynol eu sefydlu:"
+msgstr[1] "Caiff y pecynnau NEWYDD canlynol eu sefydlu:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Caiff y pecynnau canlynol ychwanegol eu sefydlu:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Pecynnau a awgrymmir:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Pecynnau a argymhellir:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Yn hepgor %s, mae wedi ei sefydlu a nid yw uwchraddio wedi ei osod.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Yn hepgor %s, mae wedi ei sefydlu a nid yw uwchraddio wedi ei osod.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Nid yw ailsefydlu %s yn bosib, gan ni ellir ei lawrlwytho.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "Mae %s y fersiwn mwyaf newydd eisioes.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Dewiswyd fersiwn %s (%s) ar gyfer %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Dewiswyd fersiwn %s (%s) ar gyfer %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Sefydliwyd]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Sefydliwyd]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Sefydliwyd]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Sefydliwyd]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ond mae %s wedi ei sefydlu"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ond ni ellir ei sefydlu"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ond mae'n becyn rhithwir"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ond nid yw'n mynd i gael ei sefydlu"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ond nid yw wedi ei sefydlu"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " neu"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Mae gan y pecynnau canlynol ddibyniaethau heb eu bodloni:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Caiff y pecynnau NEWYDD canlynol eu sefydlu:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Caiff y pecynnau canlynol eu TYNNU:"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "The following packages have been kept back:"
+msgstr "Mae'r pecynnau canlynol wedi eu dal yn ôl"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "The following packages will be upgraded:"
+msgstr "Caiff y pecynnau canlynol eu uwchraddio"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Caiff y pecynnau canlynol eu ISRADDIO"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Caiff y pecynnau wedi eu dal canlynol eu newid:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (oherwydd %s)"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"RHYBUDD: Caiff y pecynnau hanfodol canlynol eu tynnu\n"
+"NI DDYLIR gwneud hyn os nad ydych chi'n gwybod yn union beth rydych chi'n\n"
+"ei wneud!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu wedi uwchraddio, %lu newydd eu sefydlu, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu wedi ailsefydlu, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu wedi eu israddio, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu i'w tynnu a %lu heb eu uwchraddio.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu heb eu sefydlu na tynnu'n gyflawn.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "I"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "Rhaid i chi ddarparu un patrwm yn union"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, fuzzy
+msgid "Package files:"
+msgstr "Ffeiliau Pecynnau:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Nid yw'r storfa yn gydamserol, ni ellir croesgyfeirio ffeil pecym"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+#, fuzzy
+msgid "Pinned packages:"
+msgstr "Pecynnau wedi eu Pinio:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Wedi Sefydlu: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Ymgeisydd: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(dim)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+#, fuzzy
+msgid " Version table:"
+msgstr " Tabl Fersiynnau:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Methwyd canfod pecyn %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Methwyd canfod pecyn %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Methwyd canfod pecyn %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Methwyd stat() o'r rhestr pecyn ffynhonell %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Rhaid penodi o leiaf un pecyn i gyrchi ffynhonell ar ei gyfer"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Ni ellir canfod pecyn ffynhonell ar gyfer %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Yn hepgor dadbacio y ffynhonell wedi ei dadbacio eisioes yn %s\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Rhaid cyrchu %sB/%sB o archifau ffynhonell.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Rhaid cyrchu %sB o archifau ffynhonell.\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Fetch source %s\n"
+msgstr "Cyrchu Ffynhonell %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Methwyd cyrchu rhai archifau."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Yn hepgor dadbacio y ffynhonell wedi ei dadbacio eisioes yn %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Methodd y gorchymyn dadbacio '%s'.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Methodd y gorchymyn adeiladu '%s'.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Ni ellir cyrchu manylion dibyniaeth adeiladu ar gyfer %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "Nid oes dibyniaethau adeiladu gan %s.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Rhaid penodi o leiaf un pecyn i wirio dibyniaethau adeiladu ar eu cyfer"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Methwyd prosesu dibyniaethau adeiladu"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Methwyd prosesu dibyniaethau adeiladu"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Methwyd ailenwi %s at %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Mae gan y pecyn %s fersiwn %s ddibyniaeth heb ei gwrdd:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Nid yw'r gorchymyn diweddaru yn derbyn ymresymiadau"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Nid yw'r gorchymyn diweddaru yn derbyn ymresymiadau"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package names: "
+msgstr "Cyfanswm Enwau Pecynnau : "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Cyfanswm Enwau Pecynnau : "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid " Normal packages: "
+msgstr " Pecynnau Normal: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid " Pure virtual packages: "
+msgstr " Pecynnau Cwbl Rhithwir: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid " Single virtual packages: "
+msgstr " Pecynnau Rhithwir Sengl: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid " Mixed virtual packages: "
+msgstr " Pecynnau Rhithwir Cymysg: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Ar Goll: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct versions: "
+msgstr "Cyfanswm Fersiynau Gwahanol: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "Cyfanswm Fersiynau Gwahanol: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total dependencies: "
+msgstr "Cyfanswm Dibyniaethau: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total ver/file relations: "
+msgstr "Cyfanswm perthyniadau fersiwn/ffeil: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "Cyfanswm perthyniadau fersiwn/ffeil: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Provides mappings: "
+msgstr "Cyfanswm Mapiau Darpariath: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total globbed strings: "
+msgstr "Cyfanswm Llinynau Glob: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total slack space: "
+msgstr "Cyfanswm gofod Slac: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total space accounted for: "
+msgstr "Cyfanswm Gofod Cyfrifwyd: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Dangos cofnodion ffynhonell"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr ""
+"Newid Cyfrwng: Os gwelwch yn dda, rhowch y disg a'r label\n"
+" '%s'\n"
+"yn y gyrriant '%s' a gwasgwch Enter\n"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Methwyd ailenwi %s at %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Nid yw ymresymiadau mewn parau"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Defnydd: apt-config [opsiynnau] gorchymyn\n"
+"\n"
+"Mae apt-config yn erfyn syml sy'n darllen ffeil cyfluniad APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+# FIXME: "debian"
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Defnydd: apt-extracttemplates ffeil1 [ffeil2 ...]\n"
+"\n"
+"Mae apt-extracttemplates yn erfyn ar gyfer echdynnu manylion cyfluniad a\n"
+"templed o becynnau Debian.\n"
+"\n"
+"Opsiynnau:\n"
+" -h Dangos y testun cymorth hwn\n"
+" -t Gosod y cyfeiriadur dros dro\n"
+" -c=? Darllen y ffeil cyfluniad hwn\n"
+" -o=? Gosod opsiwn cyfluniad mympwyol e.e. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Ni ellir cael fersiwn debconf. Ydi debconf wedi ei sefydlu?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Methwyd canfod pecyn %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Gwall Mewnol, torrodd AllUpgrade bethau"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Supported modules:"
+msgstr "Modylau a Gynhelir:"
+
+# FIXME: split
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Defnydd: apt-get [opsiynnau] gorchymyn\n"
+" apt-get [opsiynnau] install|remove pecyn1 [pecyn2 ...]\n"
+" apt-get [opsiynnau] source pecyn1 [pecyn2 ...]\n"
+"\n"
+"Mae apt-get yn rhyngwyneb llinell orchymyn syml ar gyfer lawrlwytho a\n"
+"sefydlu pecynnau. Y gorchmynion \"update\" a \"install\" yw'r rhai a\n"
+"ddefnyddir amlaf.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Cyrchu rhestrau pecynnau newydd"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Uwchraddio pecynnau wedi sefydlu"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Sefydlu pecynnau newydd (defnyddiwch libc6 nid libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Sefydlu pecynnau newydd (defnyddiwch libc6 nid libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Tynnu pecynnau"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Uwchraddio dosraniad, gweler apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Dilyn dewisiadau dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Cyflunio dibyniaethau adeiladu ar gyfer pecynnau ffynhonell"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Dileu ffeiliau archif wedi eu lawrlwytho"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Dileu hen ffeiliau archif wedi eu lawrlwytho"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Gwirio fod dim dibyniaethau torredig"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Lawrlwytho archifau ffynhonell"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Rhaid penodi o leiaf un pecyn i gyrchi ffynhonell ar ei gyfer"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+# FIXME: "debian"
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Defnydd: apt-extracttemplates ffeil1 [ffeil2 ...]\n"
+"\n"
+"Mae apt-extracttemplates yn erfyn ar gyfer echdynnu manylion cyfluniad a\n"
+"templed o becynnau Debian.\n"
+"\n"
+"Opsiynnau:\n"
+" -h Dangos y testun cymorth hwn\n"
+" -t Gosod y cyfeiriadur dros dro\n"
+" -c=? Darllen y ffeil cyfluniad hwn\n"
+" -o=? Gosod opsiwn cyfluniad mympwyol e.e. -o dir::cache=/tmp\n"
+
+# FIXME: "debian"
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Defnydd: apt-extracttemplates ffeil1 [ffeil2 ...]\n"
+"\n"
+"Mae apt-extracttemplates yn erfyn ar gyfer echdynnu manylion cyfluniad a\n"
+"templed o becynnau Debian.\n"
+"\n"
+"Opsiynnau:\n"
+" -h Dangos y testun cymorth hwn\n"
+" -t Gosod y cyfeiriadur dros dro\n"
+" -c=? Darllen y ffeil cyfluniad hwn\n"
+" -o=? Gosod opsiwn cyfluniad mympwyol e.e. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "ond nid yw wedi ei sefydlu"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Caiff y pecynnau NEWYDD canlynol eu sefydlu:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "Mae %s y fersiwn mwyaf newydd eisioes.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "Mae %s y fersiwn mwyaf newydd eisioes.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Methwyd agor %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Caiff y pecynnau NEWYDD canlynol eu sefydlu:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Cofnod pecyn anhysbys!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Yn Darllen Rhestrau Pecynnau"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Pecynnau wedi eu Pinio:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Pecynnau wedi eu Pinio:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Pecynnau wedi torri"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "ond mae %s yn mynd i gael ei sefydlu"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Yn cyfuno manylion Ar Gael"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Rhagosodiad gwael!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Gwasgwch Enter er mwyn mynd ymlaen."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Digwyddod rhau gwallau wrth dadbacio. Rydw i'n mynd i gyflunio'r"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "pecynnau a gafwyd eu sefydlu. Gall hyn achosi gwallau dyblyg neu"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "wallau a achosir gan ddibyniaethau coll. Mae hyn yn iawn, dim ond y"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"gwallau uwchben y neges hwn sy'n bwysig. Trwsiwch nhw a rhedwch [S]efydlu "
+"eto."
+
+#: dselect/update
+#, fuzzy
+msgid "Merging available information"
+msgstr "Yn cyfuno manylion Ar Gael"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Mae'r rhestr estyniad pecyn yn rhy hir."
+
+#: ftparchive/apt-ftparchive.cc
+#, fuzzy, c-format
+msgid "Error processing directory %s"
+msgstr "Gwall wrth brosesu'r cyfeiriadur %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Mae'r rhestr estyniad ffynhonell yn rhy hir"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Gwall wrth ysgrifennu pennawd i'r ffeil cynnwys"
+
+#: ftparchive/apt-ftparchive.cc
+#, fuzzy, c-format
+msgid "Error processing contents %s"
+msgstr "Gwall wrth Brosesu Cynnwys %s"
+
+# FIXME: full stops
+#: ftparchive/apt-ftparchive.cc
+#, fuzzy
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Defnydd: apt-ftparchive [opsiynnau] gorchymyn\n"
+"Gorchmynion: packages llwybrdeuol [ffeilgwrthwneud [cynddodiadllwybr]]\n"
+" sources llwybrffynhonell [ffeilgwrthwneud [cynddodiadllwybr]]\n"
+" contents llwybr\n"
+" release llwybr\n"
+" generate cyfluniad [grŵpiau]\n"
+" clean cyfluniad\n"
+"\n"
+"Mae apt-ftparchive yn cynhyrchu ffeiliau mynegai ar gyfer archifau Debian.\n"
+"Mae'n cynnal nifer o arddulliau o gynhyrchiad, yn cynnwys modd wedi\n"
+"awtomeiddio'n llwyr a modd yn debyg i dpkg-scanpackages a dpkg-scansources.\n"
+"\n"
+"Gall apt-ftparchive gynhyrchu ffeil Package o goeden o ffeiliau .deb.\n"
+"Mae'r ffeil Package yn cynnwys yr holl feysydd rheoli o bob pecyn yn\n"
+"ogystal a'r stwnsh MD5 a maint y ffeil. Cynhelir ffeil gwrthwneud er mwyn\n"
+"gorfodi'r gwerthoedd Priority a Section.\n"
+"\n"
+"Yn debyg, gall apt-ftparchive gynhyrchu ffeil Sources o goeden o ffeiliau\n"
+".dsc. Gellir defnyddio'r opsiwn --source-override er mwyn penodi ffeil\n"
+"gwrthwneud ffynhonell.\n"
+"\n"
+"Dylid rhedeg y gorchmynion 'packages' a 'sources' yng ngwraidd y goeden.\n"
+"Fe ddylai llwybrdeuol bwyntio at sail y chwilio ailadroddus a fe ddylai\n"
+"ffeilgwrthwneud gynnwys y gosodiadau gwrthwneud. Ychwanegir\n"
+"cynddodiadllwybr i'r meysydd enw ffeil os ydynt yn bresennol. Esiampl\n"
+"defnydd o'r archif Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opsiynnau:\n"
+" -h Y testun cymorth hwn\n"
+" --md5 Rheoli cynhyrchiad stwnch MD5\n"
+" -s=? Ffeil gwrthwneud ffynhonell\n"
+" -q Tawel\n"
+" -d=? Dewis cronda data storfa opsiynnol\n"
+" --no-delink Galluogi'r modd datgysylltu datnamu\n"
+" --contents Rheoli cynhyrchiad ffeil cynnwys\n"
+" -c=? Darllen y ffeil cyfluniad hwn\n"
+" -o=? Gosod opsiwn cyfluniad mympwyol"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Dim dewisiadau'n cyfateb"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Mae rhai ffeiliau ar goll yn y grŵp ffeiliau pecyn `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Llygrwyd y cronfa data, ailenwyd y ffeil i %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Hen gronfa data, yn ceisio uwchraddio %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Ni ellir agor y ffeil DB2 %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Methwyd darllen y cyswllt %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Does dim cofnod rheoli gan yr archif"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Ni ellir cael cyrchydd"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Methwyd neilltuo cof"
+
+#: ftparchive/multicompress.cc
+#, fuzzy, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Dull Cywasgu Anhysbys '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Mae'r allbwn cywasgiedig %s angen cywasgiad wedi ei osod"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Methwyd creu pibell cyfathrebu at isbroses"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Methodd fork()"
+
+#: ftparchive/multicompress.cc
+#, fuzzy
+msgid "Compress child"
+msgstr "Plentyn Cywasgu"
+
+#: ftparchive/multicompress.cc
+#, fuzzy, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Gwall Mewnol, Methwyd creu %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Methodd MA i isbroses/ffeil"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Methwyd darllen wrth gyfrifo MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Ni ellir agor %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Gwrthwneud camffurfiol %s llinell %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Methwydd darllen y ffeil dargyfeirio %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Gwrthwneud camffurfiol %s llinell %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Gwrthwneud camffurfiol %s llinell %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Gwrthwneud camffurfiol %s llinell %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "Rh: Ni ellir darllen y cyfeiriadur %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "Rh: Ni ellir gwneud stat() o %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "G: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "Rh: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "G: Mae gwallau yn cymhwyso i'r ffeil "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Methwyd datrys %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Methwyd cerdded y goeden"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Methwyd agor %s"
+
+# FIXME
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DatGysylltu %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Methwyd cysylltu %s at %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Tarwyd y terfyn cyswllt %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Doedd dim maes pecyn gan yr archif"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " Does dim cofnod gwrthwneud gan %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " Cynaliwr %s yw %s nid %s\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no source override entry\n"
+msgstr " Does dim cofnod gwrthwneud gan %s\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " Does dim cofnod gwrthwneud gan %s\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Yn aros am benawdau"
+
+#: methods/basehttp.cc
+#, fuzzy
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Danfonodd y gweinydd HTTP bennawd ateb annilys"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Llinell pennawd gwael"
+
+#: methods/basehttp.cc
+#, fuzzy
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Danfonodd y gweinydd HTTP bennawd Content-Length annilys"
+
+#: methods/basehttp.cc
+#, fuzzy
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Danfonodd y gweinydd HTTP bennawd Content-Range annilys"
+
+#: methods/basehttp.cc
+#, fuzzy
+msgid "This HTTP server has broken range support"
+msgstr "Mae cynaliaeth amrediad y gweinydd hwn wedi torri"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Fformat dyddiad anhysbys"
+
+#: methods/basehttp.cc
+#, fuzzy
+msgid "Bad header data"
+msgstr "Data pennawd gwael"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Methodd y cysylltiad"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Gwall mewnol"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Methwyd darllen y cronfa ddata CD-ROM %s"
+
+#: methods/cdrom.cc
+#, fuzzy
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Defnyddiwch apt-cdrom fel bo APT yn adnabod y CD hwn. Ni ellir defnyddio apt-"
+"get update i ychwanegu CDau newydd."
+
+#: methods/cdrom.cc
+#, fuzzy
+msgid "Wrong CD-ROM"
+msgstr "CD Anghywir"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Ni ellir datglymu'r CD-ROM yn %s. Efallai ei fod e'n cael ei ddefnyddio."
+
+#: methods/cdrom.cc
+#, fuzzy
+msgid "Disk not found."
+msgstr "Ffeil heb ei ganfod"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Ffeil heb ei ganfod"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Yn cysylltu i %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Yn cysylltu i %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Methwyd creu soced ar gyfer %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Ni ellir cychwyn y cysylltiad i %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Methwyd"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Methwyd cysylltu i %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Methwyd cysylltu i %s:%s (%s), goramserodd y cysylltiad"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Yn cysylltu i %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Methwyd datrys '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Methiant dros dro yn datrys '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Digwyddodd rhywbweth hyll wrth ddatrys '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Digwyddodd rhywbweth hyll wrth ddatrys '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Methwyd cysylltu i %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Methwyd stat()"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI annilys: rhaid i URIs lleol beidio a cychwyn efo \"//\""
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Yn mewngofnodi"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Ni ellir darganfod enw'r cymar"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Ni ellir darganfod yr enw lleol"
+
+#: methods/ftp.cc
+#, fuzzy, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Gwrthodwyd y gweinydd ein cysyllriad, a dwedodd: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Methodd gorchymyn USER; meddai'r gweinydd: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Methodd gorchymyn PASS; meddai'r gweinydd: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Penodwyd gweinydd dirprwy ond dim sgript mengofnodi. (Mae Acquire::ftp::"
+"ProxyLogin yn wag.)"
+
+# FIXME
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Methodd y gorchymyn sgript mewngofnodi '%s'; meddai'r gweinydd: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Methodd gorchymyn TYPE; meddai'r gweinydd: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Goramser cysylltu"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Caeodd y gweinydd y cysylltiad"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Gorlifodd ateb y byffer."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Llygr protocol"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Methwyd creu soced"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Methwyd cysylltu soced data, goramserodd y cyslltiad"
+
+#: methods/ftp.cc
+#, fuzzy
+msgid "Could not connect passive socket."
+msgstr "Methwyd cysylltu soced goddefol"
+
+# FIXME
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "Methodd getaddrinfo gael soced gwrando"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Methwyd rhwymo soced"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Methwyd gwrando ar y soced"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Methwyd canfod enw'r soced"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Methwyd danfod gorchymyn PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Teulu cyfeiriad anhysbys %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Methodd gorchymyn EPRT; meddai'r gweinydd: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Goramserodd cysylltiad y soced data"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Methwyd derbyn cysylltiad"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problem wrth stwnshio ffeil"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Methwyd cyrchu ffeil; meddai'r gweinydd '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Goramserodd soced data"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Methodd trosgludiad data; meddai'r gweinydd '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Ymholiad"
+
+# FIXME
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Methwyd gweithredu "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr ""
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "The following signatures were invalid:\n"
+msgstr "Caiff y pecynnau canlynol ychwanegol eu sefydlu:"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Gwall wrth ysgrifennu at y ffeil"
+
+#: methods/http.cc
+#, fuzzy
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Gwall wrth ddarllen o'r gweinydd: caeodd yr ochr pell y cysylltiad"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Gwall wrth ddarllen o'r gweinydd"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Gwall wrth ysgrifennu at ffeil"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Methwyd dewis"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Goramserodd y cysylltiad"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Gwall wrth ysgrifennu i ffeil allbwn"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Methwyd gosod amser newid"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Caewyd y cysylltiad yn gynnar"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Pennawd aelod archif annilys"
+
+#, fuzzy
+#~ msgid "Removed %s"
+#~ msgstr "Argymell"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Nid yw'r ffeil pecyn %s yn gydamseredig."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Mae'r ffeiliau mynegai pecyn yn llygr. Dim maes Filename: gan y pecyn %s."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Methwyd agor ffeil %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Methwyd agor ffeil %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Yn agor y ffeil cyfluniad %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Yn agor %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dibyniaethau heb eu bodloni. Ceisiwch ddefnyddio --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Efallai hoffech rhedeg 'apt --fix-broken install' er mwyn cywiro'r rhain:"
+
+#~ msgid "(not found)"
+#~ msgstr "(heb ganfod)"
+
+#, fuzzy
+#~ msgid " Package pin: "
+#~ msgstr " Pin Pecyn: "
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Mae'r cyfeiriadur %s wedi ei ddargyfeirio"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Ni ellir bodloni dibyniaeth %s ar gyfer %s oherwydd ni ellir canfod y "
+#~ "pecyn %s"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Ni ellir bodloni dibyniaeth %s ar gyfer %s oherwydd ni ellir canfod y "
+#~ "pecyn %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Methwyd bodloni dibynniaeth %s am %s: Mae'r pecyn sefydliedig %s yn rhy "
+#~ "newydd"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Ni ellir bodloni'r dibyniaeth %s ar gyfer %s oherwydd does dim fersiwn "
+#~ "sydd ar gael o'r pecyn %s yn gallu bodloni'r gofynion ferswin"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "Ni ellir bodloni dibyniaeth %s ar gyfer %s oherwydd ni ellir canfod y "
+#~ "pecyn %s"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Methwyd bodloni dibyniaeth %s am %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Methwyd bodloni'r dibyniaethau adeiladu ar gyfer %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Gwall wrth datgysylltu %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Methwyd datgysylltu %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Defnydd: apt-cache [opsiynnau] gorchymyn\n"
+#~ " apt-cache [opsiynnau] show pecyn1 [pecyn2 ...]\n"
+#~ "\n"
+#~ "Mae apt-cache yn erfyn lefel isel a ddefnyddir i ymdrin a ffeiliau storfa "
+#~ "deuol APT, ac ymholi gwybodaeth ohonynt\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opsiynnau:\n"
+#~ " -h Y testun cymorth hwn\n"
+#~ " -c=? Darllen y ffeil cyfluniad\n"
+#~ " -o=? Gosod opsiwn cyfluniad mympwyol, ee -o dir::cache=/tmp\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Defnydd: apt-sortpkgs [opsiynnau] ffeil1 [ffeil2 ...]\n"
+#~ "\n"
+#~ "Mae apt-sortpkgs yn erfyn syml er mwyn trefnu ffeiliau pecyn. Defnyddir "
+#~ "yr\n"
+#~ "opsiwn -s er mwyn penodi pa fath o ffeil ydyw.\n"
+#~ "\n"
+#~ "Opsiynnau:\n"
+#~ " -h Y testun cymorth hwn\n"
+#~ " -s Defnyddio trefnu ffeil ffynhonell\n"
+#~ " -c=? Darllen y ffeil cyfluniad hwn\n"
+#~ " -o=? Gosod opsiwn cyfluniad mympwyol, ee -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Methodd proses plentyn"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Rhaid penodi o leiaf un pecyn i gyrchi ffynhonell ar ei gyfer"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Methwyd creu pibau"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Methwyd gweithredu gzip"
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s ar gyfer %s %s wedi ei grynhow ar %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Methwyd creu FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (gramadegu URI)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (gramadegu dosranniad)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (dosranniad)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (gramadegu dosranniad)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (gramadegu dosranniad)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (gramadegu dosranniad)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (dosranniad)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (gramadegu URI)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (dosranniad llwyr)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr ""
+#~ "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (gramadegu dosranniad)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Ni chanfuwyd pecyn %s %s wrth brosesu dibyniaethau ffeil"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Methwyd stat() o'r rhestr pecyn ffynhonell %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Yn Casglu Darpariaethau Ffeil"
+
+# FIXME: number?
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Ni ellir gramadegu ffeil becynnau %s (1)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Nid yw'r bloc darparwr %s yn cynnwys ôl bys"
+
+#, fuzzy
+#~ msgid "Total dependency version space: "
+#~ msgstr "Cyfanswm gofod Fersiwn Dibyniaeth: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Does dim digon o le rhydd yn %s gennych"
+
+#~ msgid "Done"
+#~ msgstr "Wedi Gorffen"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Yn Erthylu'r Sefydliad."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Gwall Mewnol, torrodd AllUpgrade bethau"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "Nid yw %s yn becyn DEB dilys."
+
+#, fuzzy
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "Nid yw hyn yn archif DEB dilys, aelod '%s' ar goll"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Camgyfatebiaeth swm MD5"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Methais i leoli ffeila r gyfer y pecyn %s. Fa all hyn olygu bod rhaid i "
+#~ "chi drwsio'r pecyn hyn a law."
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Yn agor y ffeil cyfluniad %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Methwyd dileu %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Ni ellir creu %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Methwyd stat() ar %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Rhaid i'r cyfeiriaduron 'info' a 'temp' for ar yr un system ffeiliau"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Methwyd newid i'r cyfeiriadur gweinyddiaeth %sinfo"
+
+# FIXME
+#, fuzzy
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Gwall mewnol wrth gyrchu enw pecyn"
+
+#, fuzzy
+#~ msgid "Reading file listing"
+#~ msgstr "Yn Darllen Rhestr Ffeiliau"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Methwyd agor y ffeil rhestr '%sinfo/%s'. Os na allwch adfer y ffeil hwn "
+#~ "yna gwnewch e'n wag ac yna ail sefydlwch yr un ferswin o'r pecyn yn syth!"
+
+# FIXME
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Methwyd darllen y ffeil rhestr %sinfo/%s"
+
+#, fuzzy
+#~ msgid "Internal error getting a node"
+#~ msgstr "Gwall Mewnol wrth gael Nôd"
+
+# FIXME: literal
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Methwyd agor y ffeil dargyfeirio %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Mae'r ffeil dargyfeirio wed ei lygru"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Llinell annilys yn y ffeil dargyfeirio: %s"
+
+#, fuzzy
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Gwall Mewnol wrth ychwanegu dargyfeiriad"
+
+#, fuzzy
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Rhaid i'r storfa pecynnau gael ei ymgychwyn yn gyntaf"
+
+#, fuzzy
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Methwyd canfod pennawd \"Package:\". Atred: %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Adrean \"ConfFile\" gwael yn y ffeil statws. Atred: %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Gwall wrth ramadegu MD5. Atred: %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Methwyd newid i %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Methwyd lleoli ffeil rheoli dilys"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Methwyd agor pibell ar gyfer %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Gwall darllen o broses %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Derbynnwyd llinell pennaws sengl dros %u nod"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Gwrthwneud camffurfiol %s llinell %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Gwrthwneud camffurfiol %s llinell %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Gwrthwneud camffurfiol %s llinell %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "datgywasgydd"
+
+# FIXME
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "o hyd %lu i ddarllen ond dim ar ôl"
+
+# FIXME
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "o hyd %lu i ysgrifennu ond methwyd"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewPackage)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (UsePackage1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (UsePackage2)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewVersion1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (UsePackage3)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (FindPkg)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (CollectFileProvides)"
+
+#, fuzzy
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Gwall Methwyd, methwyd lleoli aelod"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewVersion2)"
+
+#, fuzzy
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Llinell camffurfiol %lu yn y rhestr ffynhonell %s (dosranniad)"
+
+#, fuzzy
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Methwyd datrys '%s'"
+
+#, fuzzy
+#~ msgid "Could not patch file"
+#~ msgstr "Methwyd agor ffeil %s"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Gwall wrth brosesu'r cyfeiriadur %s"
+
+# FIXME: commas, wrapping
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Gan y gofynnoch am weithred syml yn unig, mae'n debygol nad yw'r pecyn\n"
+#~ "yn sefydladwy a dylid cyflwyno adroddiad nam yn erbyn y pecyn hwnnw."
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Linell %d yn rhy hir (uchaf %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Linell %d yn rhy hir (uchaf %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Digwyddod gwall wrth brosesu %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Methwyd dewis"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Dyddiad ffeil wedi newid %s"
+
+#, fuzzy
+#~ msgid "Reading file list"
+#~ msgstr "Yn Darllen Rhestr Ffeiliau"
+
+#, fuzzy
+#~ msgid "Could not execute "
+#~ msgstr "Methwyd cael y clo %s"
+
+#~ msgid "Abort? [Y/n] "
+#~ msgstr "Erthylu? [I/n] "
+
+#~ msgid "Write Error"
+#~ msgstr "Gwall Ysgrifennu"
+
+#~ msgid "File Not Found"
+#~ msgstr "Ni Chanfuwyd Y Ffeil"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..92e2e31
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,3971 @@
+# Danish translation apt.
+# Copyright (C) 2014 apt & nedenstående oversættere.
+# This file is distributed under the same license as the apt package.
+# Claus Hindsgaul <claus.hindsgaul@gmail.com>, 2002, 2003, 2004, 2005, 2006, 2007.
+# Joe Hansen <joedalton2@yahoo.dk>, 2010, 2012, 2013, 2014, 2017.
+#
+# checksum -> kontrolsum
+# signature -> signatur (bemærk at den ikke er underskrift i den her).
+# solver -> problemløser
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.4~rc2\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2017-03-02 23:51+0200\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Ugyldig arkivsignatur"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Fejl under læsning af arkivelements hoved"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Ugyldigt arkivelementhoved"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arkivet er for kort"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Kunne ikke læse arkivhovederne"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Kan ikke finde konfigureret komprimeringsprogram for »%s«"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Ødelagt arkiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar-kontrolsum fejlede, arkivet er ødelagt"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Ukendt TAR-hovedtype %u, element %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Dette er ikke et gyldigt DEB-arkiv, mangler »%s«-elementet"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Intern fejl, kunne ikke finde elementet %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Ikke-tolkbar kontrolfil"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Kunne ikke skrive filen %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Kunne ikke lukke filen %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Stien %s er for lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Pakkede %s ud flere gange"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Mappen %s er omrokeret"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Pakken forsøger at skrive til omrokeret mål %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Omrokeringsstien er for lang"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Kunne ikke finde %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Kunne ikke omdøbe %s til %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Mappen %s bliver erstattet af en ikke-mappe"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Kunne ikke finde knuden i sin hash-bucket"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Stien er for lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Overskriv pakkematch uden version for %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "File %s/%s overskriver filen i pakken %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Kunne ikke læse %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Kunne ikke finde %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode kaldt med endnu forbundet knude"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Kunne ikke finde hash-element!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Kunne ikke allokere omrokering"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Intern fejl i AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Forsøger at overskrive en omrokering, %s -> %s og %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dobbelt tilføjelse af omrokering %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Dobbelt opsætningsfil %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Opdatering, fra et sådant arkiv, kan ikke udføres sikkert og er derfor "
+"deaktiveret som standard."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Data, fra et sådant arkiv, kan ikke godkendes og er derfor potentielt farlig "
+"at anvende."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Se apt-secure(8)-manualsiden for detaljer om arkivoprettelse og "
+"brugerkonfiguration."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Arkivet »%s« er ikke længere underskrevet."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Arkivet »%s« har ikke længere en udgivelsesfil."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Dette er normalt ikke tilladt, men tilvalget Acquire::"
+"AllowDowngradeToInsecureRepositories blev angivet for at overskrive."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Arkivet »%s« er ikke underskrevet."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Arkivet »%s« har ikke en udgivelsesfil."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Arkivet »%s« tilbyder kun svag sikkerhedsinformation."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Kunne ikke »readlink« %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hashsum stemmer ikke"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"Utilstrækkelig information er tilgængelig for at udføre denne overførsel "
+"sikkert"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "omdøbning mislykkedes, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Størrelsen stemmer ikke"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Ugyldigt filformat"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Signaturfejl"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Clearsigned-fil er ikke gyldig, fik »%s« (kræver netværket ikke "
+"autentificering?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Der opstod en fejl under signaturbekræftelse. Arkivet er ikke opdateret og "
+"den forrige indeksfil vil blive brugt. GPG-fejl: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG-fejl: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« ikke "
+"understøtter arkitekturen »%s«"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« ikke "
+"understøtter arkitekturen »%s«"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« ikke "
+"understøtter arkitekturen »%s«"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Udelader erhvervelse af konfigureret fil »%s«, da arkivet »%s« kun tilbyder "
+"svag sikkerhedsinformation"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Udgivelsesfil for %s er udløbet (ugyldig siden %s). Opdateringer for dette "
+"arkiv vil ikke blive anvendt."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Udgivelsesfil for %s er udløbet (ugyldig siden %s). Opdateringer for dette "
+"arkiv vil ikke blive anvendt."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Konfliktdistribution: %s (forventede %s men fik %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Kunne ikke hente %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Jeg kunne ikke lokalisere filen til %s-pakken. Det betyder muligvis at du er "
+"nødt til manuelt at reparere denne pakke. (grundet manglende arch)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Kan ikke finde en kilde til at hente version »%s« for »%s«"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Ændringslog utilgængelig for %s=%s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "Metoden »%s« er eksplicit deaktiveret via konfiguration."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "Hvis du ønskede at bruge Tor så husk at bruge %s i stedet for %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Metodedriveren %s blev ikke fundet."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Er pakken %s installeret?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Metoden %s startede ikke korrekt"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Indsæt venligst disken med navnet: »%s« i drevet »%s« og tryk [Retur]."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Listemappen %s mangler."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Arkivmappen %s mangler."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Kunne ikke låse mappen %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr "Ingen sandkassebruger »%s« på systemet; kan ikke droppe privilegier"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Overførsel udføres uden for sandkassen som root, da filen »%s« ikke kunne "
+"tilgås af brugeren »%s«."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Rensning af %s er ikke understøttet"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Henter fil %li ud af %li (%s tilbage)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Henter fil %li ud af %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Pakken %s skal geninstalleres, men jeg kan ikke finde noget arkiv med den."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Fejl, pkgProblemResolver::Resolve satte stopklodser op, det kan skyldes "
+"tilbageholdte pakker."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Kunne ikke korrigere problemerne, da du har tilbageholdt ødelagte pakker."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Pakkelisterne eller statusfilen kunne ikke tolkes eller åbnes."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Du kan muligvis rette problemet ved at køre »apt-get update«"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Listen med kilder kunne ikke læses."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Fejl ved tolkning af regulært udtryk - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Udgaven »%s« for »%s« blev ikke fundet"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Versionen »%s« for »%s« blev ikke fundet"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Kunne ikke finde opgaven »%s«"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Kunne ikke finde nogle pakker med regulært udtryk »%s«"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Kunne ikke finde nogle pakker med glob »%s«"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Kunne ikke lokalisere pakken %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Kan ikke vælge versioner fra pakke »%s« som er vitalt"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr "Kan ikke vælge nyeste version fra pakke »%s« som er vital"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Kan ikke vælge kandidatversion fra pakke %s da den ikke har nogen kandidat"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Kan ikke vælge installeret version fra pakke %s da den ikke er installeret"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Kan ikke vælge installeret eller kandidatversion fra pakke »%s« da den ikke "
+"har nogen af dem"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Linjen %u er for lang i kildelisten %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Afmonterer CD-ROM ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Bruger CD-ROM-monteringspunktet %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Venter på disken ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Monterer CD-ROM ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificerer ... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Gemt mærkat: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Skanner disken for indeksfiler ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Fandt %zu pakkeindekser, %zu kildeindekser, %zu oversættelsesindekser og %zu "
+"signaturer\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Kunne ikke finde nogen pakkefiler, det er muligvis ikke en Debiandisk eller "
+"den forkerte arkitektur?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Fandt mærkatet »%s«\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Det er ikke et gyldigt navn, prøv igen.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Denne disk hedder: \n"
+"»%s«\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopierer pakkelisterne ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Skriver ny kildeliste\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Denne disk har følgende kildeliste-indgange:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Kunne ikke skifte til %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Kunne ikke finde %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Kunne ikke finde monteringspunktet %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Kunne ikke finde cdrommen"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"Kommandolinjetilvalget »%c« [fra %s] forstås ikke i kombination med de andre "
+"tilvalg."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"Kommandolinjetilvalget %s forstås ikke i kombination med de andre tilvalg"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Kommandolinjetilvalget %s er ikke boolsk"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Tilvalget %s kræver et parameter."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Tilvalg %s: Opsætningspostens specifikation skal have en =<værdi>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Tilvalget %s kræver et heltalligt parameter, ikke »%s«"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Tilvalget »%s« er for langt"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "%s blev ikke forstået, prøv med »true« eller »false«."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Ugyldig handling %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Ukendt type-forkortelse: »%c«"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaksfejl %s:%u: Blokken starter uden navn."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaksfejl %s:%u: Forkert udformet mærke"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaksfejl %s:%u: Overskydende affald efter værdien"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Syntaksfejl %s:%u: Direktiver kan kun angives i topniveauet"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaksfejl %s:%u: For mange sammenkædede inkluderinger"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaksfejl %s:%u: Inkluderet herfra"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaksfejl %s:%u: Ikke-understøttet direktiv »%s«"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "Syntaksfejl %s:%u: ryd direktiv kræver et tilvalgstræ som argument"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaksfejl %s:%u: Overskydende affald i slutningen af filen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Fejl ved frigivelse af filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Benytter ikke låsning for skrivebeskyttet låsefil %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Kunne ikke åbne låsefilen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Benytter ikke låsning for nfs-monteret låsefil %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Kunne ikke opnå låsen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Liste over filer kan ikke oprettes da »%s« ikke er en mappe"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Ignorerer »%s« i mappe »%s« da det ikke er en regulær fil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "Ignorerer fil »%s« i mappe »%s« da den ikke har en filendelse"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr "Ignorerer fil »%s« i mappe »%s« da den har en ugyldig filendelse"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Ventede på %s, men den var der ikke"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Underprocessen %s modtog en segmenteringsfejl."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Underprocessen %s modtog en signal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Underprocessen %s returnerede en fejlkode (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Underprocessen %s afsluttedes uventet"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Læsefejl"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Skrivefejl"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problem under lukning af gzip-filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Uventet filafslutning"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Kunne ikke oprette underproces IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Kunne ikke udføre komprimeringsprogram "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Kunne ikke åbne filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Kunne ikke åbne filbeskrivelse %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "læs, mangler stadig at læse %llu men der er ikke flere"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "skriv, mangler stadig at skrive %llu men kunne ikke"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problem under lukning af filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problem under omdøbning af filen %s til %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problem under synkronisering af fil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Kunne ikke mkstemp %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Kunne ikke skrive til %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Kan ikke udføre mmap for en tom fil"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Kunne ikke udføre mmap for %llu byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Kunne ikke duplikere filbeskrivelse %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Kunne ikke lukke mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Kunne ikke synkronisere mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Kunne ikke udføre mmap for %lu byte"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Kunne ikke afkorte filen"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dynamisk MMap løb tør for plads. Øg venligst størrelsen på APT::Cache-Start. "
+"Aktuel værdi: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Kunne ikke øge størrelsen på MMap da begrænsningen på %lu byte allerede er "
+"nået."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Kunne ikke øge størrelsen på MMap da automatisk øgning er deaktiveret af "
+"bruger."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Fejl!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Færdig"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Det valgte %s blev ikke fundet"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr "Målet %s ønsker at erhverve den samme fil (%s) som %s fra kilden %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "Målet %s (%s) er konfigureret flere gange i %s og %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Kunne ikke fortolke udgivelsesfil %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Ingen afsnit i udgivelsesfil %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Intet hashpunkt i udgivelsesfil %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Intet hash-punkt i Release-filen %s, som anses for stærk nok til "
+"sikkerhedsformål."
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Ugyldigt punkt »%s« i udgivelsesfil %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"Værdisæt er ikke i overensstemmelse for tilvalget %s jævnfør kilden %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr "Ugyldigt værdisæt for tilvalget %s jævnfør kilden %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Værdisæt er ikke i overenstemmelse for tilvalget %s jævnfør kilden %s %s: "
+"%s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Kunne ikke tolke pakkefilen %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Kunne ikke låse administrationsmappen (%s), bruger en anden proces den?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Kunne ikke låse administrationsmappen (%s), er du rod (root)?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr "dpkg blev afbrudt, du skal manuelt køre »%s« for at rette problemet. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Kunne ikke låse administrationsmappen (%s), bruger en anden proces den?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Kunne ikke låse administrationsmappen (%s), er du rod (root)?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Ikke låst"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Klargør %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Gør klar til at sætte %s op"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Gør klar til afinstallation af %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Gør klar til at fjerne %s helt"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Bemærker forsvinding af %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Kører førinstallationsudløser %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Installerede %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Sætter %s op"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Mappe »%s« mangler"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Kunne ikke åbne filen »%s«"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Pakker %s ud"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Installerer %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Fjerner %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Fjerner %s helt"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Fjernede %s helt"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Kan ikke skrive log (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Er /dev/pts monteret?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Handling blev afbrudt før den kunne afsluttes"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Ingen apportrapport skrevet da MaxReports (maks rapporter) allerede er nået"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "afhængighedsproblemer - efterlader ukonfigureret"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Ingen apportrapport skrevet da fejlbeskeden indikerer, at det er en "
+"opfølgningsfejl fra en tidligere fejl."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Ingen apportrapport skrevet da fejlbeskeden indikerer en fuld disk-fejl"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Ingen apportrapport skrevet da fejlbeskeden indikerer en ikke nok "
+"hukommelsesfejl"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Ingen apportrapport skrevet da fejlbeskeden indikerer en fejl på det lokale "
+"system"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr "Ingen apportrapport skrevet da fejlbeskeden indikerer en dpkg I/O-fejl"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Opbygger afhængighedstræ"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Kandidatversioner"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Afhængighedsgenerering"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Læser tilstandsoplysninger"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Kunne ikke åbne StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Kunne ikke skrive den midlertidige StateFile %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Send scenarie til problemløser"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Send forespørgsel til problemløser"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Forbered for modtagelse af løsning"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Ekstern problemløser fejlede uden en korrekt fejlbesked"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Kør ekstern problemløser"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Kør ekstern planlægger"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Send forespørgsel til planlægger"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Send scenarie til planlægger"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "Ekstern planlægger mislykkedes uden en korrekt fejlbesked"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Skrev %i poster.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Skrev %i poster med %i manglende filer.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Skrev %i poster med %i ikke-trufne filer\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Skrev %i poster med %i manglende filer og %i ikke-trufne filer\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Kan ikke finde godkendelsesregistrering for: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hashsum stemmer ikke: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Pakkesystemet »%s« understøttes ikke"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Kunne ikke bestemme en passende pakkesystemtype"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Status: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Kører dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Kunne ikke udføre øjeblikkelig konfiguration på »%s«. Se venligst man 5 apt."
+"conf under APT:Immediate-Cinfigure for detaljer. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Kunne ikke åbne filen »%s«. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Kørsel af denne installation kræver midlertidig afinstallation af den "
+"essentielle pakke %s grundet en afhængighedsløkke. Det er ofte en dårlig "
+"ide, men hvis du virkelig vil gøre det, kan du aktivere valget »APT::Force-"
+"LoopBreak«."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Tomt pakke-mellemlager"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Pakke-mellemlagerets fil er ødelagt"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Pakke-mellemlagerets fil er af en inkompatibel version"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Denne APT understøtter ikke versionssystemet »%s«"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Pakke-mellemlageret blev kompileret for andre arkitekturer: %s vs %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Pakke-mellemlagerets fil er ødelagt, den har forkert hash"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Afhængigheder"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Præ-afhængigheder"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Foreslåede"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Konflikter"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Anbefalede"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Erstatter"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Ødelægger"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Forbedringer"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Overflødiggør"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "vigtig"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "krævet"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "ekstra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "frivillig"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Mellemlageret benytter en inkompatibel versionsstyring"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Der opstod en fejl under behandlingen af %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Hold da op! Du nåede over det antal pakkenavne, denne APT kan håndtere."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Hold da op! Du nåede over det antal versioner, denne APT kan håndtere."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Hold da op! Du nåede over det antal versioner, denne APT kan håndtere."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Hold da op! Du nåede over det antal afhængigheder, denne APT kan håndtere."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Indlæser pakkelisterne"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IO-fejl ved gemning af kilde-mellemlageret"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Indeksfiler af typen »%s« understøttes ikke"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Værdien »%s« er ugyldig for APT::Default-Release da sådan en udgivelse ikke "
+"er tilgængelig i kilderne"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Ugyldig indgang i indstillingsfilen %s, pakkehovedet mangler"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Kunne ikke forstå pin-type %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: Værdien %s er uden for intervallet med gyldige pin-prioriteringer (%d "
+"til %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Ingen prioritet (eller prioritet nul) angivet ved pin"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Forkert udformet punkt %u i %s-linjen %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Ugyldig linje %u i kildelisten %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typen »%s« er ukendt på linje %u i kildelisten %s"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Forkert udformet stanza %u i kildelisten %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typen »%s« er ukendt på stanza %u i kildelisten %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Filen %s er ikke understøttet når angivet på kommandolinjen"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Du skal have nogle »source«-URI'er i din sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "Kan ikke konvertere %s til heltal: uden for interval"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Nogle indeksfiler kunne ikke hentes. De er blevet ignoreret eller de gamle "
+"bruges i stedet."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Beregner opgraderingen"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Havde:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Henter:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ignorerer:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Fejl:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Hentede %sB på %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Arbejder]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Medieskift: Indsæt venligst disken med navnet\n"
+" »%s«\n"
+"i drevet »%s« og tryk [Retur]\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Retter afhængigheder ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " mislykkedes."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Kunne ikke rette afhængigheder"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Kunne ikke minimere opgraderingssættet"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Færdig"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Du kan muligvis rette dette ved at køre »apt --fix-broken install«."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Uopfyldte afhængigheder. Prøv »apt --fix-broken install« uden pakker (eller "
+"angiv en løsning)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Sortering"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Bemærk, vælger »%s« for opgaven »%s«\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Bemærk, vælger »%s« for glob'en »%s«\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Bemærk, vælger »%s« for glob'en »%s«\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Pakken %s er en virtuel pakke tilbudt af:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Installeret]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Ingen kandidatversion]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Du skal eksplicit vælge en at installere."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Pakken %s er ikke tilgængelig, men der refereres til den af en\n"
+"anden pakke. Det kan betyde at pakken mangler, er blevet forældet\n"
+"eller kun er tilgængelig fra en anden kilde\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "De følgende pakker vil dog erstatte den:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Pakken »%s« har ingen installationskandidat"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Virtuelle pakker som »%s« kan ikke fjernes\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Pakken »%s« er ikke installeret, så blev ikke fjernet. Mente du »%s«?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Pakken »%s« er ikke installeret, så blev ikke fjernet\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Bemærk, vælger »%s« i stedet for »%s«\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "De mest anvendte kommandoer:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Se %s for yderligere information om de tilgængelige kommandoer."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Konfigurationstilvalg og -syntaks er omtalt detaljeret i apt.conf(5).\n"
+"Information om hvordan kilder konfigureres kan findes i sources.list(5).\n"
+"Pakke- og versionsvalg kan udtrykkes via apt_preferences(5).\n"
+"Sikkerhedsdetaljer er tilgængelige i apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Denne APT har »Super Cow Powers«."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Dette APT-hjælpeprogram har Super Meep Powers."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes er forældet, brug i stedet for et af tilvalgene startende med --"
+"allow"
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Fandt ingen pakker"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ADVARSEL: Følgende pakkers autenticitet kunne ikke verificeres!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Autentifikationsadvarsel tilsidesat.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Nogle pakker kunne ikke autentificeres"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Installér disse pakker uden verifikation?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Der var pakker uden godkendelser og -y blev brugt uden --allow-"
+"unauthenticated"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Kunne ikke bestemme ledig plads i %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Du har ikke nok ledig plads i %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Kunne ikke låse nedhentningsmappen"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Nogle pakker kunne ikke installeres. Det kan betyde at du har ønsket\n"
+"en umulig situation eller bruger den ustabile distribution, hvor enkelte\n"
+"pakker endnu ikke er lavet eller gjort tilgængelige."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Følgende oplysninger kan hjælpe dig med at klare situationen:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Ødelagte pakker"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Kunne ikke hente nogle af arkiverne. Prøv evt. at køre »apt-get update« "
+"eller prøv med --fix-missing."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Intern fejl. InstallPackages blev kaldt med ødelagte pakker!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pakker skal afinstalleres, men Remove er deaktiveret."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Essentielle pakker blev fjernet og -y blev brugt uden --allow-remove-"
+"essential."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Pakker blev nedgraderet og -y blev brugt uden --allow-downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Tilbageholdte pakker blev ændret og -y blev brugt uden --allow-change-held-"
+"packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Intern fejl. Sortering blev ikke fuldført"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Mystisk... Størrelserne passede ikke, skriv til apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "%sB/%sB skal hentes fra arkiverne.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "%sB skal hentes fra arkiverne.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Efter denne handling, vil %sB yderligere diskplads være brugt.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Efter denne handling, vil %sB diskplads blive frigjort.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "»Trivial Only« angivet, men dette er ikke en triviel handling."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ja, gør som jeg siger!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Du er ved at gøre noget, der kan være skadeligt\n"
+"For at fortsætte, skal du skrive »%s«\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Afbryder."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Vil du fortsætte?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Nedhentningen af filer mislykkedes"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Nedhentning afsluttet i »hent-kun«-tilstand"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing og medieskift understøttes endnu ikke"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Kunne ikke rette manglende pakker."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Afbryder installationen."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Den følgende pakke forsvandt fra dit system, da\n"
+"alle filer er blevet overskrevet af andre pakker:"
+msgstr[1] ""
+"De følgende pakker forsvandt fra dit system, da\n"
+"alle filer er blevet overskrevet af andre pakker:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Bemærk: Dette sker automatisk og med vilje af dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Det er ikke meningen, at vi skal slette ting og sager, kan ikke starte "
+"AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, det lader til at AutoRemover smadrede noget, der virkelig ikke\n"
+"burde kunne ske. Indsend venligst en fejlrapport om apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Intern fejl. AutoRemover ødelagde noget"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Følgende pakke blev installeret automatisk, og behøves ikke længere:"
+msgstr[1] ""
+"Følgende pakker blev installeret automatisk, og behøves ikke længere:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Pakken %lu blev installeret automatisk, og behøves ikke længere.\n"
+msgstr[1] ""
+"Pakkerne %lu blev installeret automatisk, og behøves ikke længere.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Brug »%s« til at fjerne den."
+msgstr[1] "Brug »%s« til at fjerne dem."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "De følgende yderligere pakker vil blive installeret:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Foreslåede pakker:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Anbefalede pakker:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Springer over %s, den er allerede installeret og opgradering er ikke "
+"angivet.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Springer over %s, den er ikke installeret og der blev kun anmodt om "
+"opgraderinger.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Geninstallation af %s er ikke muligt, pakken kan ikke hentes.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s er allerede den nyeste version (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s sat til manuelt installeret.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Valgt version »%s« (%s) for »%s«\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Valgt version »%s« (%s) for »%s« på grund af »%s«\n"
+
+# måske visning, kategorisering
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Listing"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Der er %i yderlig version. Brug venligst kontakten »-a« til at se den."
+msgstr[1] ""
+"Der er %i yderligere versioner. Brug venligst kontakten »-a« til at se dem."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"BEMÆRK: Dette er kun en simulering!\n"
+" %s kræver rootprivilegier for reel kørsel.\n"
+" Husk også at låsning er deaktiveret,\n"
+" så stol ikke på relevansen for den reelle aktuelle situation!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "ukendt"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[installeret,kan opgraderes til: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[Installeret,lokalt]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[installeret,kan auto-fjernes]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[Installeret,automatisk]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[Installeret]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[kan opgraderes fra: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[residual-konfig]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "men %s er installeret"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "men %s forventes installeret"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "men den kan ikke installeres"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "men det er en virtuel pakke"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "men den bliver ikke installeret"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "men den er ikke installeret"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " eller"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Følgende pakker har uopfyldte afhængigheder:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Følgende NYE pakker vil blive installeret:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Følgende pakker vil blive AFINSTALLERET:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Følgende pakker er blevet holdt tilbage:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Følgende pakker vil blive opgraderet:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Følgende pakker vil blive NEDGRADERET:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Følgende tilbageholdte pakker vil blive ændret:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (grundet %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ADVARSEL: Følgende essentielle pakker vil blive afinstalleret\n"
+"Dette bør IKKE ske medmindre du er helt klar over, hvad du laver!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu opgraderes, %lu nyinstalleres, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu geninstalleres, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu nedgraderes, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu afinstalleres og %lu opgraderes ikke.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu ikke fuldstændigt installerede eller afinstallerede.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[J/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[j/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "J"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Du skal angive mindst ét søgemønster"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Fuldtekst-søgning"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Der er %i yderligere post. Brug venligst kontakten »-a« for at se den."
+msgstr[1] ""
+"Der er %i yderligere poster. Brug venligst kontakten »-a« for at se dem."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "ikke en reel pakke (virtuel)"
+
+# Overskriften til apt-cache policy,
+# forkorter "Package" væk. CH
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Pakkefiler:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Mellemlageret er ude af trit, kan ikke krydsreferere en pakkefil"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "»Pinned« pakker:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s med prioritet %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Installeret: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ingen)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versionstabel:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Kan ikke finde en pakke for arkitektur »%s«"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Kan ikke finde en pakke »%s« med version »%s«"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Kan ikke finde en pakke »%s« med udgivelse »%s«"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Vælger »%s« som kildepakke fremfor »%s«\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Kan ikke finde version »%s« for pakke »%s«"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Du skal angive mindst én pakke at hente kildeteksten til"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Kunne ikke finde kildetekstpakken for %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"BEMÆRK: Pakning af »%s« vedligeholdes i versionskontrolsystemet »%s« på:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Brug venligst:\n"
+"%s\n"
+"for at hente de seneste (muligvis ikke udgivet) opdateringer til pakken.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Overspringer allerede hentet fil »%s«\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "%sB/%sB skal hentes fra kildetekst-arkiverne.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "%sB skal hentes fra kildetekst-arkiverne.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Henter kildetekst %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Nogle arkiver kunne ikke hentes."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Overspringer udpakning af allerede udpakket kildetekst i %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Udpakningskommandoen »%s« fejlede.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Tjek om pakken »dpkg-dev« er installeret.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Opbygningskommandoen »%s« fejlede.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Kunne ikke hente oplysninger om opbygningsafhængigheder for %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s har ingen opbygningsafhængigheder.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Ingen arkitekturinformation tilgængelig for %s. Se apt.conf(5) APT::"
+"Architectures for opsætning"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "Skal angive mindst én pakke at tjekke opbygningsafhængigheder for"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "Bemærk, bruger mappen »%s« til at hente kompileringsafhængighederne\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Bemærk, bruger filen »%s« til at hente kompileringsafhængighederne\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Kunne ikke behandler opbygningsafhængighederne"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Kunne ikke fortolke %s. Rediger igen? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "Din »%s« fil blev ændret, kør venligst »apt-get update«.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Pakken %s version %s har en uopfyldt afhængighed:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "»update«-kommandoen benytter ingen parametre"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i pakke kan opgraderes. Kør »apt list --upgradable« for at se den.\n"
+msgstr[1] ""
+"%i pakker kan opgraderes. Kør »apt list --upgradable« for at se dem.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Alle pakker er opdateret."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "»%s« benytter ingen parametre"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Samlet antal pakkenavne: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Samlet antal pakkestrukturer: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normale pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Rene virtuelle pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Enkelte virtuelle pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Blandede virtuelle pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Manglende: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Totale forskellige versioner: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Sammenlagt forskellige beskrivelser: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Sammenlagt afhængigheder: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Sammenlagt version/fil-relationer: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Sammenlagt version/fil-relationer: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Sammenlagt »Tilbyder«-markeringer: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Totalle søgemønsterstrenge: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Total »Slack«-plads: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Total plads, der kan gøres rede for: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Denne kommando er forældet. Brug venligst »apt-mark showauto« i stedet for."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Brug: apt-cache [tilvalg] kommando\n"
+" apt-cache [tilvalg] show pakke1 [pakke2 ...]\n"
+"\n"
+"apt-cache forespørger og viser tilgængelig information om installerede\n"
+"pakker og pakker der kan installeres. Programmet fungerer eksklusivt på\n"
+"data hentet i det lokale mellemlager via kommandoen »update« for f.eks.\n"
+"apt-get. Den viste information kan derfor være forældet, hvis den sidste\n"
+"opdatering ikke var så lang tid siden, men til gengæld fungerer apt-cache\n"
+"uafhængig af tilgængeligheden for de konfigurerede kilder (f.eks.\n"
+"frakoblet).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Vis kildetekstposter"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Gennemsøg pakkelisten med et regulært udtryk"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Vis de rå afhængighedsoplysninger for en pakke"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Vis omvendte afhængighedsoplysninger for en pakke"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Vis en læsbar post for pakken"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Vis navnene på alle pakker"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Vis policy-indstillinger"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Angiv venligst et navn for denne disk, som f.eks. »Debian 5.0.3 Disk 1«"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Indsæt venligst en disk i drevet og tryk [Retur]"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Kunne ikke montere »%s« til »%s«"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Ingen cd-rom kunne detekteres eller findes via standardmonteringspunktet.\n"
+"Du kan prøve tilvalget --cdrom for at angive cd-rom-monteringspunktet.\n"
+"Se »man apt-cdrom« for yderligere information om automatisk detektering af "
+"cd-rom og monteringspunkt."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Gentag processen for resten af cd'erne i dit sæt."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Brug: apt-cdrom [tilvalg] kommando\n"
+"\n"
+"apt-cdrom bruges til at tilføje cd-rom'er, USB-flashdrev og andre\n"
+"eksterne medietyper som pakkekilder til APT. Monteringspunktet og\n"
+"enhedsinformationen tages fra apt.conf(5), udev(7) og fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Parametre ikke angivet i par"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Brug: apt-config [tilvalg] kommando\n"
+"\n"
+"apt-config er en grænseflade til konfigurationsindstillingerne\n"
+"brugt af alle APT-værktøjer, hovedsagelig lavet til fejlsøgning\n"
+"og skalskriptopbygning.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "hent konfigurationsværdier via skalevaluering"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "vis den aktive konfigurationsindstilling"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Brug: apt-dump-solver\n"
+"\n"
+"apt-dump-solver er en grænseflade til at lagre et EDSP-scenarie i\n"
+"en fil og valgfrit videresende den til en anden problemløser.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Brug: apt-extracttemplates fil1 [fil2 ...]\n"
+"\n"
+"apt-extracttemplates bruges til at udtrække konfigurations- og\n"
+"skabelonfiler fra Debianpakker. Programmet bruges derfor hovedsagelig\n"
+"af debconf(1) til at stille konfigurationsspørgsmål før installationen\n"
+"af pakker.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Kan ikke finde debconfs version. Er debconf installeret?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Kunne ikke finde pakken %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s sat til automatisk installation.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Denne kommando er forældet. Brug venligst »apt-mark auto« og »apt-mark "
+"manual« i stedet for."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Intern fejl. Problemløseren ødelagde noget"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Understøttede moduler:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Brug: apt-get [tilvalg] kommando\n"
+" apt-get [tilvalg] install|remove pakke1 [pakke2 ...]\n"
+" apt-get [tilvalg] source pakke1 [pakke2 ...]\n"
+"\n"
+"apt-get er en kommandolinjegrænseflade til at hente pakker og\n"
+"information om dem fra godkendte kilder og for installation,\n"
+"opgradering og fjernelse af pakker sammen med deres afhængigheder.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Hent nye lister over pakker"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Udfør en opgradering"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Installer nye pakker (pakke er libc6, ikke libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Installer nye pakker (pakke er libc6, ikke libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Afinstaller pakker"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Fjern pakker og konfigurationsfiler"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Afinstaller automatisk alle ubrugte pakker"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Distributionsopgradering, se apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Følg valgene fra dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Sæt opbygningsafhængigheder op for kildetekstpakker"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Slet hentede arkivfiler"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Slet gamle hentede arkivfiler"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Tjek at der ikke er uopfyldte afhængigheder"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Hent kildetekstarkiver"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Hent den binære pakke til den aktuelle mappe"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Hent og vis ændringsloggen for den angivne pakke"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Skal bruge en adresse som argument"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Du skal angive mindst et par i form af adresse/filnavn"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Kunne ikke hente pakkerne"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec mislykkedes for %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Brug: apt-helper [tilvalg] kommando\n"
+" apt-helper [tilvalg] cat-file-fil ...\n"
+" apt-helper [tilvalg] download-file uri mål-sti\n"
+"\n"
+"apt-helper samler en række kommandoer som skalskripter kan bruge\n"
+"f.eks. den samme proxykonfiguration eller indhentelsessystem som\n"
+"APT ville anvende.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "hent den angivne uri til mål-sti"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "slå en SRV-post op (f.eks. _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "sammenkæd filer, med automatisk dekomprimering"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "detekter proxy via apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Brug: apt-internal-planner\n"
+"\n"
+"apt-internal-planner er en grænseflade, til at bruge den nuværende\n"
+"interne installationsplanlægger for APT-familien såsom en ekstern,\n"
+"til fejlsøgning eller lignende.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Brug: apt-internal-solver\n"
+"\n"
+"apt-internal-solver er en grænseflade, der skal bruge den nuværende\n"
+"problemløser for APT-familien som en ekstern, til fejlsøgning eller\n"
+"lignende\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s kan ikke markeres, da den ikke er installeret.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s var allerede sat til manuelt installeret.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s var allerede sat til automatisk installeret.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Følgende NYE pakker vil blive installeret:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s var allerede sat i bero.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s var allerede ikke i bero.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Kørsel af dpkg fejlede. Er du root (administrator)?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s sat i bero.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Afbrød i bero for %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "Valgte %s for fuldstænding fjernelse.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Valgte %s for fjernelse.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Valgte %s for installation.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Brug: apt-mark [tilvalg] {auto|manual} pakke1 [pakke2 ...]\n"
+"\n"
+"apt-mark er en simpel kommandolinjegrænseflade for markering af pakker\n"
+"som manuelt eller automatisk installeret. Programmet kan også bruges\n"
+"til at manipulere dpkg(1)-markeringstilstande for pakker, og til at\n"
+"vise alle pakker med eller uden en bestemt markering.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Marker de givne pakker som automatisk installeret"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Marker de givne pakker som manuelt installeret"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Marker de givne pakker som automatisk installeret"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Marker en pakke som tilbageholdt"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Fjern tilbageholdelse på pakke"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Vis listen over automatisk installerede pakker"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Vis listen over manuelt installerede pakker"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Vis listen over tilbageholdte pakker"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Ukendt pakkeindgang!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Brug: apt-sortpkgs [tilvalg] fil1 [fil2 ...]\n"
+"\n"
+"apt-sortpkgs er et simpelt værktøj til at sortere informationsfiler for\n"
+"pakker. Som standard sorteres efter den binære pakkeinformation, men\n"
+"tilvalget -s kan bruges til at skifte til kildepakkerækkefølge i stedet\n"
+"for.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Brug: apt [tilvalg] kommando\n"
+"\n"
+"apt er en pakkehåndtering for kommandolinjen og den tilbyder kommandoer\n"
+"for søgning og håndtering samt forespørgsel af information om pakker.\n"
+"Den tilbyder den samme funktionalitet som de specialiserede APT-værktøjer,\n"
+"såsom apt-get og apt-cache, men aktiverer tilvalg mere egnet for\n"
+"interaktiv brug som standard.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "vis pakker baseret på pakkenavn"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "søg i pakkebeskrivelser"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "vis pakkedetaljer"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "installer pakker"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "installer pakker"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "fjern pakker"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "opdater listen over tilgængelige pakker"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "opgradere systemet ved at installere/opgradere pakker"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+"full-upgrade - opgradere systemet ved at fjerne/installere/opgradere pakker"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "rediger source-informationsfilen (kildefilen)"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Ugyldig standardindstilling!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Tryk [Retur] for at fortsætte."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Ønsker du at slette nogle tidligere hentede .deb-filer?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Der opstod fejl under udpakningen. Pakker som blev installeret"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "vil blive konfigureret. Det kan give gentagne fejl"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"eller fejl, der skyldes manglende afhængigheder. Dette er o.k. Det er kun"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"fejlene over denne besked, der er vigtige. Ret dem og kør [I]nstallér igen"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Sammenfletter tilgængelighedsoplysninger"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Pakkeudvidelseslisten er for lang"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Fejl under behandling af mappen %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Kildeudvidelseslisten er for lang"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Fejl under skrivning af hovedet til indholdsfil"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Fejl under behandling af indhold %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Brug: apt-ftparchive [tilvalg] kommando\n"
+"Kommandoer: packges binærsti [tvangsfil [sti]]\n"
+" sources kildesti [tvangsfil [sti]]\n"
+" contents sti\n"
+" release sti\n"
+" generate config [grupper]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive laver indeksfiler til Debianarkiver. Det understøtter \n"
+"mange former for generering, lige fra fuldautomatiske til funktionelle\n"
+"erstatninger for dpkg-scanpackages og dpkg-scansources\n"
+"\n"
+"apt-ftparchive genererer Package-filer ud fra træer af .deb'er.\n"
+"Package-filen indeholder alle styrefelterne fra hver pakke såvel\n"
+"som MD5-mønstre og filstørrelser. En tvangsfil understøttes til at\n"
+"gennemtvinge indholdet af Priority og Section.\n"
+"\n"
+"På samme måde genererer apt-ftparchive Sources-filer ud fra træer\n"
+"med .dsc'er. Tvangstilvalget --source-override kan bruges til at\n"
+"angive en src-tvangsfil.\n"
+"\n"
+"Kommandoerne »packages« og »sources« skal køres i roden af træet.\n"
+"binærsti skal pege på basen af rekursive søgninger og tvangsfilen\n"
+"skal indeholde tvangsflagene. Sti foranstilles eventuelle\n"
+"filnavnfelter. Et eksempel på brug fra Debianarkivet:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Tilvalg:\n"
+" -h Denne hjælpetekst\n"
+" --md5 Styr generering af MD5\n"
+" -s=? Kilde-tvangsfil\n"
+" -q Stille\n"
+" -d=? Vælg den valgfrie mellemlager-database\n"
+" --no-delink Aktivér \"delinking\"-fejlsporingstilstand\n"
+" --contents Bestem generering af indholdsfil\n"
+" -c=? Læs denne opsætningsfil\n"
+" -o=? Sæt en opsætnings-indstilling"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Ingen valg passede"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Visse filer mangler i pakkefilgruppen »%s«"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB var ødelagt, filen omdøbt til %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB er gammel, forsøger at opgradere %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Databaseformatet er ugyldigt. Hvis du har opgraderet fra en ældre version af "
+"apt, så fjern og genskab databasen."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Kunne ikke åbne DB-filen %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Kunne ikke læse .dsc"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arkivet har ingen kontrolindgang"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Kunne skaffe en markør"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Kunne ikke allokere hukommelse"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Ukendt komprimeringsalgoritme »%s«"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Komprimerede uddata %s kræver et komprimeringssæt"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Kunne ikke oprette IPC-videreførsel til underproces"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Kunne ikke spalte"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Komprimer barn"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Intern fejl. Kunne ikke oprette %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "IO til underproces/fil mislykkedes"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Kunne ikke læse under beregning af MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Kunne ikke åbne %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Ugyldig overskrivning af %s-linjen %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Kunne ikke læse gennemtvangsfilen %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Ugyldig gennemtvangs %s-linje %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Ugyldig gennemtvangs %s-linje %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Ugyldig gennemtvangs %s-linje %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: Kunne ikke læse mappen %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Kunne ikke finde %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "F: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "F: Fejlene vedrører filen "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Kunne ikke omsætte navnet %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Trævandring mislykkedes"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Kunne ikke åbne %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Kunne ikke lænke %s til %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Nåede DeLink-begrænsningen på %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arkivet havde intet package-felt"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s har ingen tvangs-post\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " pakkeansvarlig for %s er %s, ikke %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s har ingen linje med tilsidesættelse af standard for kildefiler\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+" %s har ingen linje med tilsidesættelse af standard for binøre filer\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Afventer hoveder"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Http-serveren sendte et ugyldigt svarhovede"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Ugyldig linje i hovedet"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Http-serveren sendte et ugyldigt Content-Length-hovede"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Http-serveren sendte et ugyldigt Content-Range-hovede"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr ""
+"Denne http-servere har fejlagtig understøttelse af intervaller (»ranges«)"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Ukendt datoformat"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Ugyldige hoved-data"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Forbindelsen mislykkedes"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"Deaktiverede automatisk %s på grund af ukorrekt svar fra server/proxy. (man "
+"5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Intern fejl"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Kunne ikke læse cdrom-databasen %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Brug apt-cdrom for at apt kan lære den at kende. apt-get update kan ikke "
+"bruges til at tilføje nye cd'er"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Forkert cd"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Kunne ikke afmontere cdrommen i %s, den er muligvis stadig i brug."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disk blev ikke fundet."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Fil blev ikke fundet"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "Direkte forbindelse til %s-domæner er som standard blokeret."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Forbinder til %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Forbinder til %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Kunne ikke oprette sokkel til %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Kan ikke oprette forbindelse til %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Mislykkedes"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Kunne ikke forbinde til %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Kunne ikke forbinde til %s:%s (%s) grundet tidsudløb"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Forbinder til %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Kunne ikke omsætte navnet »%s«"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Midlertidig fejl ved omsætning af navnet »%s«"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Systemfejl under opløsning af »%s:%s«"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Der skete noget underligt under opløsning af »%s:%s« (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Kunne ikke forbinde til %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Kunne ikke finde"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Ugyldig URI, lokale URI'er må ikke starte med //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Logget på"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Kunne ikke bestemme serverens navn"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Kunne ikke bestemme det lokale navn"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Serveren nægtede os forbindelse og sagde: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "angivelse af brugernavn mislykkedes, serveren sagde: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "angivelse af adgangskode mislykkedes, serveren sagde: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Der blev angivet en proxyserver men intet logpå-skript; Acquire::ftp::"
+"ProxyLogin er tom."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Logpå-skriptets kommando »%s« mislykkedes. Serveren sagde: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE mislykkedes. Serveren sagde: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Tidsudløb på forbindelsen"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Serveren lukkede forbindelsen"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Mellemlageret blev overfyldt af et svar."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protokolfejl"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Kunne ikke oprette sokkel"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Kunne ikke forbinde datasokkel, tidsudløb på forbindelsen"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Kunne ikke forbinde passiv sokkel."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo kunne ikke få en lyttesokkel"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Kunne ikke tilknytte en sokkel"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Kunne ikke lytte på soklen"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Kunne ikke finde soklens navn"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Kunne ikke sende PORT-kommando"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Ukendt adressefamilie %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT mislykkedes. Serveren sagde: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Tidsudløb på datasokkel-forbindelse"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Kunne ikke acceptere forbindelse"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problem ved \"hashing\" af fil"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Kunne ikke hente fil. Serveren sagde »%s«"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Tidsudløb ved datasokkel"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Dataoverførsel mislykkedes, serveren sagde »%s«"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Forespørgsel"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Kunne ikke udføre "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Underskrevet fil er ikke gyldig, fik »%s« (kræver netværket godkendelse?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Stødte på mindst én ugyldig signatur."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Intern fejl: Gyldig signatur, men kunne ikke afgøre nøgle-fingeraftryk?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Kunne ikke køre »apt-key« for at verificere signaturen (er gnupg "
+"installeret?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Ukendt fejl ved kørsel af apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "Signaturen med nøglen %s bruger en svag sammendragsalgoritme (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Følgende signaturer var ugyldige:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Følgende signaturer kunne ikke verificeret, da den offentlige nøgle ikke er "
+"tilgængelig:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Fejl ved skrivning til filen"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Fejl ved læsning fra serveren. Den fjerne ende lukkede forbindelsen"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Fejl ved læsning fra server"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Fejl ved skrivning til fil"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Valg mislykkedes"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Tidsudløb på forbindelsen"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Fejl ved skrivning af uddatafil"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Kunne ikke angive ændringstidspunkt"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Forbindelsen lukkedes for hurtigt"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Tomme filer kan ikke være gyldige arkiver"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Ugyldigt arkivelementhoved %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Fjernede %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Pakkefilen %s er ude af trit."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Pakkeindeksfilerne er i stykker. Intet »Filename:«-felt for pakken %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Ingen spejlfil »%s« fundet "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Kan ikke læse spejlfil »%s«"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Ingen post fundet i spejlfil »%s«"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Spejl: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Åbner konfigurationsfilen %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Åbner %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Kunne ikke finde uventet punkt »%s« i udgivelsesfil (forkert sources.list-"
+#~ "punkt eller forkert udformet fil)"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..eba4ce0
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,4625 @@
+# German messages for the apt suite.
+# Copyright (C) 1997, 1998, 1999 Jason Gunthorpe and others.
+# Holger Wansing <linux@wansing-online.de>, 2008, 2009, 2010, 2012, 2014, 2017, 2018.
+# Jens Seidel <jensseidel@users.sf.net>, 2008.
+# Michael Piefel <piefel@informatik.hu-berlin.de>, 2001, 2002, 2003, 2004, 2006.
+# Rüdiger Kuhlmann <Uebersetzung@ruediger-kuhlmann.de>, 2002.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.6\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2018-01-11 21:11+0100\n"
+"Last-Translator: Holger Wansing <linux@wansing-online.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Ungültige Archiv-Signatur"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Fehler beim Lesen der Archivdatei-Kopfzeilen"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Ungültige Archivdatei-Kopfzeilen"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Archiv ist zu kurz."
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Archiv-Kopfzeilen konnten nicht gelesen werden."
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Konfigurierter Kompressionsbefehl für %s konnte nicht gefunden werden."
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Beschädigtes Archiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar-Prüfsumme fehlgeschlagen, Archiv beschädigt"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Unbekannter Tar-Kopfzeilen-Typ %u, Bestandteil %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Dies ist kein gültiges DEB-Archiv, da es »%s« nicht enthält."
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Interner Fehler, Bestandteil %s konnte nicht gefunden werden"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Auswerten der »control«-Datei nicht möglich"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Datei %s konnte nicht geschrieben werden."
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Datei %s konnte nicht geschlossen werden."
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Der Pfad %s ist zu lang."
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s mehr als einmal entpackt"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Das Verzeichnis %s ist umgeleitet."
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Schreibversuch vom Paket auf das Umleitungsziel %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Der Umleitungspfad ist zu lang."
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s mit »stat« abfragen fehlgeschlagen"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "%s konnte nicht in %s umbenannt werden."
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Das Verzeichnis %s wird durch ein Nicht-Verzeichnis ersetzt."
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Knoten konnte nicht in seinem Hash gefunden werden."
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Der Pfad ist zu lang."
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Pakettreffer ohne Version für %s wird überschrieben."
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Durch die Datei %s/%s wird die Datei in Paket %s überschrieben."
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s kann nicht gelesen werden."
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s mit »stat« abfragen nicht möglich"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "»DropNode« auf noch verknüpften Knoten aufgerufen"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Hash-Element konnte nicht gefunden werden!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Umleitung konnte nicht reserviert werden."
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Interner Fehler in »AddDiversion«"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Es wird versucht, eine Umleitung zu überschreiben: %s -> %s und %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Doppelte Hinzufügung der Umleitung %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Doppelte Konfigurationsdatei %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Eine Aktualisierung von solch einem Depot kann nicht auf eine sichere Art "
+"durchgeführt werden, daher ist es standardmäßig deaktiviert."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Daten von solch einem Depot können nicht authentifiziert werden und deren "
+"Nutzung ist daher potentiell gefährlich."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Weitere Details zur Erzeugung von Paketdepots sowie zu deren "
+"Benutzerkonfiguration finden Sie in der Handbuchseite apt-secure(8)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Das Depot »%s« ist nicht mehr signiert."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Das Depot »%s« enthält keine Release-Datei mehr."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Dies ist normalerweise nicht erlaubt, was aber wegen der angegebenen Option "
+"»Acquire::AllowDowngradeToInsecureRepositories« unbeachtet blieb."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Das Depot »%s« ist nicht signiert."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Das Depot »%s« enthält keine Release-Datei."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr ""
+"Das Depot »%s« stellt nur schwache Sicherheitsinformationen zur Verfügung."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "readlink von %s fehlgeschlagen"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hash-Summe stimmt nicht überein"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"Es sind nur unzureichende Informationen verfügbar, um diesen Download auf "
+"sichere Art durchzuführen."
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "Umbenennen fehlgeschlagen, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Größe stimmt nicht überein"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Ungültiges Dateiformat"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Signaturfehler"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Durch Clearsign signierte Datei ist nicht gültig, »%s« erhalten (erfordert "
+"das Netzwerk eine Authentifizierung?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Während der Überprüfung der Signatur trat ein Fehler auf. Das Depot wurde "
+"nicht aktualisiert und die vorherigen Indexdateien werden verwendet. GPG-"
+"Fehler: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG-Fehler: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Das Laden der konfigurierten Datei »%s« wird übersprungen, da das Depot »%s« "
+"die Komponente »%s« nicht enthält. (Schreibfehler bei der Angabe der "
+"Komponente in sources.list?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Das Laden der konfigurierten Datei »%s« wird übersprungen, da das Depot »%s« "
+"die Architektur »%s« nicht unterstützt."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Das Laden der konfigurierten Datei »%s« wird übersprungen, da das Depot »%s« "
+"die Datei scheinbar nicht bereitstellt. (Schreibfehler bei der Angabe der "
+"Komponente in sources.list?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Das Laden der konfigurierten Datei »%s« wird übersprungen, da das Depot »%s« "
+"für diese Datei nur schwache Sicherheitsinformationen bereitstellt."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Release-Datei für %s ist abgelaufen (ungültig seit %s). Aktualisierungen für "
+"dieses Depot werden nicht angewendet."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Release-Datei für %s ist abgelaufen (ungültig seit %s). Aktualisierungen für "
+"dieses Depot werden nicht angewendet."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Konflikt bei Distribution: %s (%s erwartet, aber %s bekommen)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "Für das Depot »%s« wurde der »%s«-Wert von »%s« in »%s« geändert."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+"Für das Depot »%s« wurde die Standardpriorität für %s von »%hi« in »%hi« "
+"geändert."
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+"Weitere Informationen hierzu finden Sie online in den "
+"Veröffentlichungshinweisen unter %s."
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"Sie müssen dies explizit bestätigen, bevor Aktualisierungen von diesem Depot "
+"angewendet werden können. Lesen Sie die %s-Handbuchseite, wenn Sie weitere "
+"Informationen benötigen."
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Fehlschlag beim Holen von %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Es konnte keine Datei für Paket %s gefunden werden. Das könnte heißen, dass "
+"Sie dieses Paket von Hand korrigieren müssen (aufgrund fehlender "
+"Architektur)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+"Es konnte keine Quelle gefunden werden, um Version »%s« von »%s« "
+"herunterzuladen."
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Änderungsprotokoll (Changelog) nicht verfügbar für %s=%s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "Die Methode »%s« ist über die Konfiguration explizit deaktiviert."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+"Falls Sie Tor verwenden wollten, denken Sie daran, %s anstatt von %s zu "
+"benutzen."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Der Treiber für Methode %s konnte nicht gefunden werden."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Ist das Paket %s installiert?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Methode %s ist nicht korrekt gestartet."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Bitte legen Sie das Medium mit dem Namen »%s« in Laufwerk »%s« ein und "
+"drücken Sie die Eingabetaste [Enter]."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Listenverzeichnis %s fehlt."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Archivverzeichnis %s fehlt."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Das Verzeichnis %s kann nicht gesperrt werden."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"Kein Sandbox-Benutzer »%s« auf dem System angelegt, Privilegien können nicht "
+"abgegeben werden."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Der Download wird als root und nicht Sandbox-geschützt durchgeführt, da auf "
+"die Datei »%s« durch den Benutzer »%s« nicht zugegriffen werden kann."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Leeren von %s wird nicht unterstützt."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Holen der Datei %li von %li (noch %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Holen der Datei %li von %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Das Paket %s muss neu installiert werden, es kann jedoch kein Archiv dafür "
+"gefunden werden."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Fehler: Unterbrechungen durch pkgProblemResolver::Resolve hervorgerufen; "
+"dies könnte durch zurückgehaltene Pakete verursacht worden sein."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Probleme können nicht korrigiert werden, Sie haben zurückgehaltene defekte "
+"Pakete."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Die Paketliste oder die Statusdatei konnte nicht eingelesen oder geöffnet "
+"werden."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Probieren Sie »apt-get update«, um diese Probleme zu korrigieren."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Die Liste der Quellen konnte nicht gelesen werden."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Fehler beim Kompilieren eines regulären Ausdrucks - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Veröffentlichung »%s« für »%s« konnte nicht gefunden werden."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Version »%s« für »%s« konnte nicht gefunden werden."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Task »%s« konnte nicht gefunden werden."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Mittels regulärem Ausdruck »%s« konnte kein Paket gefunden werden."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Mittels des Musters »%s« konnte kein Paket gefunden werden."
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Paket %s kann nicht gefunden werden."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Es können keine Versionen von Paket »%s« ausgewählt werden, da es rein "
+"virtuell ist."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Die neueste Version von Paket »%s« kann nicht ausgewählt werden, da es rein "
+"virtuell ist."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Es kann kein Installationskandidat von Paket »%s« ausgewählt werden, da kein "
+"solcher existiert."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Die installierte Version von Paket »%s« kann nicht ausgewählt werden, da es "
+"nicht installiert ist."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Es kann weder eine installierte Version noch ein Installationskandidat von "
+"Paket »%s« ausgewählt werden, da beide nicht existieren."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Zeile %u in Quellliste %s zu lang."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Einbindung der CD-ROM wird gelöst ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Verwendeter CD-ROM-Einbindungspunkt: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Warten auf Medium ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "CD-ROM wird eingebunden ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identifizieren ... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Gespeicherte Kennzeichnung: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Durchsuchen des Mediums nach Index-Dateien ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"%zu Paketindizes, %zu Quellindizes, %zu Übersetzungsindizes und %zu "
+"Signaturen gefunden\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Es konnten keine Paketdateien gefunden werden; möglicherweise ist dies keine "
+"Debian-Disk oder eine für die falsche Architektur?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Kennzeichnung »%s« gefunden\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Dies ist kein gültiger Name, versuchen Sie es erneut.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Dieses Medium heißt: \n"
+"»%s«\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopieren der Paketlisten ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Schreiben der neuen Quellliste\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Quelllisteneinträge für dieses Medium sind:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Es konnte nicht nach %s gewechselt werden."
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s mit stat abfragen nicht möglich"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Einbindungspunkt %s mit »stat« abfragen nicht möglich."
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "CD-ROM mit »stat« abfragen fehlgeschlagen"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"Befehlszeilenoption »%c« [aus %s] kann in Kombination mit den anderen "
+"Optionen nicht interpretiert werden."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"Befehlszeilenoption »%s« kann in Kombination mit den anderen Optionen nicht "
+"interpretiert werden."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Befehlszeilenoption %s ist nicht Bool'sch."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Option %s erfordert ein Argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Option %s: Konfigurationswertspezifikation benötigt ein »=<Wert>«."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Option %s erfordert ein Ganzzahl-Argument, nicht »%s«."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Option »%s« ist zu lang."
+
+# Check for boolean; -1 is unspecified, 0 is yes 1 is no
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Der Sinn von »%s« ist nicht klar, versuchen Sie »true« oder »false«."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Ungültige Operation %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Nicht erkannte Typabkürzung: »%c«"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaxfehler %s:%u: Block beginnt ohne Namen."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaxfehler %s:%u: Missgestaltete Markierung"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaxfehler %s:%u: Zusätzlicher Unsinn nach Wert"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Syntaxfehler %s:%u: Direktiven können nur auf oberster Ebene benutzt werden"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaxfehler %s:%u: Zu viele verschachtelte Einbindungen (includes)"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaxfehler %s:%u: Eingefügt von hier"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaxfehler %s:%u: Nicht unterstützte Direktive »%s«"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Syntaxfehler %s:%u: Löschdirektiven benötigen einen Optionsbaum als Argument"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaxfehler %s:%u: Zusätzlicher Unsinn am Dateiende"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problem beim Entfernen (unlink) der Datei %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Es wird keine Sperre für schreibgeschützte Sperrdatei %s verwendet."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Sperrdatei %s konnte nicht geöffnet werden."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Es wird keine Sperre für per NFS eingebundene Sperrdatei %s verwendet."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Konnte Sperre %s nicht bekommen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Dateiliste kann nicht erstellt werden, da »%s« kein Verzeichnis ist."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+"»%s« in Verzeichnis »%s« wird ignoriert, da es keine reguläre Datei ist."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Datei »%s« in Verzeichnis »%s« wird ignoriert, da sie keine Dateinamen-"
+"Erweiterung hat."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Datei »%s« in Verzeichnis »%s« wird ignoriert, da sie eine ungültige "
+"Dateinamen-Erweiterung hat."
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Es wurde auf %s gewartet, war jedoch nicht vorhanden"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Unterprozess %s hat einen Speicherzugriffsfehler empfangen."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Unterprozess %s hat das Signal %u empfangen."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Unterprozess %s hat Fehlercode zurückgegeben (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Unterprozess %s unerwartet beendet"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Lesefehler"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Schreibfehler"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problem beim Schließen der gzip-Datei %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Unerwartetes Dateiende (end of file)"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr ""
+"Interprozesskommunikation mit Unterprozess konnte nicht aufgebaut werden."
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Fehler beim Ausführen von Komprimierer "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Datei %s konnte nicht geöffnet werden."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Datei-Deskriptor %d konnte nicht geöffnet werden."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+"Lesevorgang: es verbleiben noch %llu zu lesen, jedoch ist nichts mehr übrig."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr ""
+"Schreibvorgang: es verbleiben noch %llu zu schreiben, Schreiben ist jedoch "
+"nicht möglich."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problem beim Schließen der Datei %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problem beim Umbenennen der Datei %s nach %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problem beim Synchronisieren der Datei"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "mkstemp %s nicht möglich"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Schreiben nach %s nicht möglich"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Eine leere Datei kann nicht mit mmap abgebildet werden."
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "mmap mit %llu Byte Größe konnte nicht erzeugt werden."
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Datei-Deskriptor %i konnte nicht dupliziert werden."
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "mmap konnte nicht geschlossen werden."
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "mmap konnte nicht synchronisiert werden."
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "mmap mit %lu Byte Größe konnte nicht erzeugt werden."
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Datei konnte nicht eingekürzt werden."
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Nicht genügend Platz für »Dynamic MMap«. Bitte erhöhen Sie den Wert von APT::"
+"Cache-Start. Aktueller Wert: %lu. (Siehe auch man 5 apt.conf.)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Unmöglich, die Größe der MMap zu erhöhen, da das Limit von %lu Byte bereits "
+"erreicht ist."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Unmöglich, die Größe der MMap zu erhöhen, da das automatische Anwachsen der "
+"MMap vom Benutzer deaktiviert ist."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Fehler!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Fertig"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%li d %li h %li min %li s"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%li h %li min %li s"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%li min %li s"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%li s"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Auswahl %s nicht gefunden"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+"Für das Ziel %s soll die gleiche Datei (%s) heruntergeladen werden wie %s "
+"aus der Quelle %s."
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "Ziel %s (%s) ist mehrfach konfiguriert in %s und %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Release-Datei %s kann nicht verarbeitet werden."
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Keine Bereiche (Sections) in Release-Datei %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Kein Hash-Eintrag in Release-Datei %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Kein Hash-Eintrag in der Release-Datei %s vorhanden, der für "
+"Sicherheitsbelange als stark genug angesehen wird."
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Ungültiger »%s«-Eintrag in Release-Datei %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"Widersprüchliche Werte gesetzt für Option %s betreffend die Quelle %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr "Ungültiger Wert gesetzt für Option %s betreffend die Quelle %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Widersprüchliche Werte gesetzt für Option %s betreffend die Quelle %s %s: "
+"%s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Paketdatei %s konnte nicht verarbeitet werden (%d)."
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Sperren des Administrationsverzeichnisses (%s) nicht möglich, wird es von "
+"einem anderen Prozess verwendet?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Sperren des Administrationsverzeichnisses (%s) nicht möglich, sind Sie root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"Der dpkg-Prozess wurde unterbrochen; Sie müssen manuell »%s« ausführen, um "
+"das Problem zu beheben."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Sperren des Administrationsverzeichnisses (%s) nicht möglich, wird es von "
+"einem anderen Prozess verwendet?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Sperren des Administrationsverzeichnisses (%s) nicht möglich, sind Sie root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Nicht gesperrt"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s wird vorbereitet."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Konfiguration von %s wird vorbereitet."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Entfernen von %s wird vorbereitet."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Vollständiges Entfernen von %s wird vorbereitet."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Verschwinden von %s festgestellt"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Aufruf des Nach-Installations-Triggers %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s installiert"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s wird konfiguriert."
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Verzeichnis »%s« fehlt"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Datei »%s« konnte nicht geöffnet werden."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s wird entpackt."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s wird installiert."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s wird entfernt."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s wird vollständig entfernt."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s vollständig entfernt"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Schreiben des Protokolls nicht möglich (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Ist /dev/pts eingebunden?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Operation wurde unterbrochen, bevor sie beendet werden konnte."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Es wurde kein Apport-Bericht verfasst, da das Limit MaxReports bereits "
+"erreicht ist."
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "Abhängigkeitsprobleme - verbleibt unkonfiguriert"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Es wurde kein Apport-Bericht verfasst, da die Fehlermeldung darauf "
+"hindeutet, dass dies lediglich ein Folgefehler eines vorherigen Problems ist."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Es wurde kein Apport-Bericht verfasst, da die Fehlermeldung auf einen Fehler "
+"wegen voller Festplatte hindeutet."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Es wurde kein Apport-Bericht verfasst, da die Fehlermeldung auf einen Fehler "
+"wegen erschöpftem Arbeitsspeicher hindeutet."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Es wurde kein Apport-Bericht verfasst, da die Fehlermeldung auf einen Fehler "
+"im lokalen System hindeutet."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Es wurde kein Apport-Bericht verfasst, da die Fehlermeldung auf einen Ein-/"
+"Ausgabe-Fehler von Dpkg hindeutet."
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Abhängigkeitsbaum wird aufgebaut."
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Installationskandidat-Versionen"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Abhängigkeitsgenerierung"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Statusinformationen werden eingelesen."
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "StateFile %s konnte nicht geöffnet werden."
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Temporäres StateFile %s konnte nicht geschrieben werden."
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Szenario an Problemlöser senden"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Anfrage an Problemlöser senden"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Vorbereiten, eine Lösung zu erhalten"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Externer Problemlöser ohne ordnungsgemäße Fehlermeldung fehlgeschlagen"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Externen Problemlöser ausführen"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Externen Planer ausführen"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Anfrage an Planer senden"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Szenario an Planer senden"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "Externer Planer ist ohne ordnungsgemäße Fehlermeldung fehlgeschlagen."
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Es wurden %i Datensätze geschrieben.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Es wurden %i Datensätze mit %i fehlenden Dateien geschrieben.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Es wurden %i Datensätze mit %i nicht passenden Dateien geschrieben.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Es wurden %i Datensätze mit %i fehlenden und %i nicht passenden Dateien "
+"geschrieben.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Authentifizierungs-Datensatz konnte nicht gefunden werden für: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash-Summe stimmt nicht überein für: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Paketierungssystem »%s« wird nicht unterstützt."
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Bestimmung eines passenden Paketierungssystemtyps nicht möglich"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Fortschritt: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Ausführen von dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"»%s« konnte nicht unmittelbar konfiguriert werden. Lesen Sie »man 5 apt."
+"conf« unter APT::Immediate-Configure bezüglich weiterer Details. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "»%s« konnte nicht konfiguriert werden. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Dieser Installationslauf erfordert, dass vorübergehend das essentielle Paket "
+"%s aufgrund einer Konflikt-/Vor-Abhängigkeits-Schleife entfernt wird. Das "
+"ist oft schlimm, aber wenn Sie es wirklich tun wollen, aktivieren Sie bitte "
+"die Option APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Leerer Paketzwischenspeicher"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Die Paketzwischenspeicher-Datei ist beschädigt."
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr ""
+"Die Paketzwischenspeicher-Datei liegt in einer inkompatiblen Version vor."
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Das Versionssystem »%s« wird durch dieses APT nicht unterstützt."
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+"Der Paketzwischenspeicher wurde für andere Architekturen aufgebaut: %s <-> %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+"Die Paketzwischenspeicher-Datei ist beschädigt, sie hat den falschen Hash-"
+"Wert."
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Hängt ab von"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Hängt ab von (vorher)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Schlägt vor"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Kollidiert mit"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Empfiehlt"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Ersetzt"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Beschädigt"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Wertet auf"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Löst ab"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "wichtig"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "erforderlich"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "optional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Zwischenspeicher hat ein inkompatibles Versionssystem."
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Fehler aufgetreten beim Verarbeiten von %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Na so was, Sie haben die Anzahl an Paketen überschritten, mit denen diese "
+"APT-Version umgehen kann."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Na so was, Sie haben die Anzahl an Versionen überschritten, mit denen diese "
+"APT-Version umgehen kann."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Na so was, Sie haben die Anzahl an Beschreibungen überschritten, mit denen "
+"diese APT-Version umgehen kann."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Na so was, Sie haben die Anzahl an Abhängigkeiten überschritten, mit denen "
+"diese APT-Version umgehen kann."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Paketlisten werden gelesen"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "E/A-Fehler beim Speichern des Quell-Zwischenspeichers"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Indexdateityp »%s« wird nicht unterstützt."
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Der Wert »%s« ist für APT::Default-Release ungültig, da solch eine "
+"Veröffentlichung in den Paketquellen nicht verfügbar ist."
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Ungültiger Eintrag in Einstellungsdatei %s, keine »Package«-Kopfzeile(n)"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Pinning-Typ %s kann nicht interpretiert werden."
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: Wert %s ist außerhalb des Bereichs gültiger Pin-Prioritäten (%d bis %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Keine Priorität (oder Null) für Pin angegeben"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Missgestalteter Eintrag %u in %s Datei %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Missgestaltete Zeile %u in Quellliste %s (Typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typ »%s« in Zeile %u der Quellliste %s ist unbekannt."
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Missgestalteter Absatz %u in Quellliste %s (Typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typ »%s« ist in Absatz %u der Quellliste %s ist unbekannt."
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Nicht unterstützte Datei %s auf Befehlszeile angegeben"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"Sie müssen einige »source«-URIs für Quellpakete in die sources.list-Datei "
+"eintragen."
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "%s kann nicht in Integer konvertiert werden: außerhalb des Bereichs"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Einige Indexdateien konnten nicht heruntergeladen werden. Sie wurden "
+"ignoriert oder alte an ihrer Stelle benutzt."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Paketaktualisierung (Upgrade) wird berechnet"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "OK:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Holen:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Fehl:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Es wurden %sB in %s geholt (%sB/s).\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Wird verarbeitet]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Medienwechsel: Bitte legen Sie das Medium mit dem Namen\n"
+"»%s«\n"
+"in Laufwerk »%s« ein und drücken Sie die Eingabetaste [Enter].\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+"Möchten Sie diese Änderungen übernehmen und mit der Aktualisierung von "
+"diesem Depot fortfahren?"
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Abhängigkeiten werden korrigiert ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " fehlgeschlagen."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Abhängigkeiten konnten nicht korrigiert werden."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Menge der zu aktualisierenden Pakete konnte nicht minimiert werden."
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Fertig"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Probieren Sie »apt --fix-broken install«, um dies zu korrigieren."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Unerfüllte Abhängigkeiten. Versuchen Sie »apt --fix-broken install« ohne "
+"Angabe eines Pakets (oder geben Sie eine Lösung an)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Sortierung"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Hinweis: »%s« wird für Task »%s« gewählt.\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Hinweis: »%s« wird für das Suchmuster »%s« gewählt.\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Hinweis: »%s« wird für regulären Ausdruck »%s« gewählt.\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Paket %s ist ein virtuelles Paket, das bereitgestellt wird von:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Installiert]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Nicht die Installationskandidat-Version]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Sie sollten eines explizit zum Installieren auswählen."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Paket %s ist nicht verfügbar, wird aber von einem anderen Paket\n"
+"referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst\n"
+"wurde oder nur aus einer anderen Quelle verfügbar ist.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Doch die folgenden Pakete ersetzen es:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Für Paket »%s« existiert kein Installationskandidat."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Virtuelle Pakete wie »%s« können nicht entfernt werden.\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Paket »%s« ist nicht installiert, wird also auch nicht entfernt. Meinten Sie "
+"»%s«?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Paket »%s« ist nicht installiert, wird also auch nicht entfernt.\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Hinweis: »%s« wird an Stelle von »%s« gewählt.\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Meist verwendete Befehle:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+"Lesen Sie %s bezüglich weiterer Informationen über die verfügbaren Befehle."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Konfigurationsoptionen und Syntax sind in apt.conf(5) detailliert "
+"beschrieben.\n"
+"Informationen dazu, wie Quellen konfiguriert werden, finden Sie in sources.\n"
+"list(5).\n"
+"Paket- und Versionsauswahlen können über apt_preferences(5) festgelegt "
+"werden.\n"
+"Details zu Sicherheitsbelangen sind in apt-secure(8) zu finden.\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Dieses APT hat Super-Kuh-Kräfte."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Dieses APT-Hilfsprogramm hat Super-Road-Runner-Kräfte."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes ist veraltet, verwenden Sie stattdessen eine der Optionen, die "
+"mit --allow beginnen."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Keine Pakete gefunden"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "WARNUNG: Die folgenden Pakete können nicht authentifiziert werden!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Authentifizierungswarnung überstimmt.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Einige Pakete konnten nicht authentifiziert werden."
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Diese Pakete ohne Überprüfung installieren?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Der Befehl betrifft nicht-authentifizierte Pakete und -y wurde ohne --allow-"
+"unauthenticated verwendet."
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Freier Platz in %s konnte nicht bestimmt werden."
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Sie haben nicht genug Platz in %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Das Downloadverzeichnis konnte nicht gesperrt werden."
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Einige Pakete konnten nicht installiert werden. Das kann bedeuten, dass\n"
+"Sie eine unmögliche Situation angefordert haben oder, wenn Sie die\n"
+"Unstable-Distribution verwenden, dass einige erforderliche Pakete noch\n"
+"nicht erstellt wurden oder Incoming noch nicht verlassen haben."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+"Die folgenden Informationen helfen Ihnen vielleicht, die Situation zu lösen:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Beschädigte Pakete"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Einige Archive konnten nicht heruntergeladen werden; vielleicht »apt-get "
+"update« ausführen oder mit »--fix-missing« probieren?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Interner Fehler, InstallPackages mit defekten Paketen aufgerufen!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pakete müssen entfernt werden, aber Entfernen ist abgeschaltet."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Essentielle Pakete wurden entfernt und -y wurde ohne --allow-remove-"
+"essential verwendet."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Für einige Pakete wurde ein Downgrade durchgeführt und -y wurde ohne --allow-"
+"downgrades verwendet."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Der Status gehaltener Pakete wurde geändert und -y wurde ohne --allow-change-"
+"held-packages verwendet."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Interner Fehler, Anordnung beendete nicht"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Wie merkwürdig ... die Größen haben nicht übereingestimmt; schreiben Sie "
+"eine E-Mail an apt@packages.debian.org (auf Englisch bitte)."
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Es müssen noch %sB von %sB an Archiven heruntergeladen werden.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Es müssen %sB an Archiven heruntergeladen werden.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Nach dieser Operation werden %sB Plattenplatz zusätzlich benutzt.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Nach dieser Operation werden %sB Plattenplatz freigegeben.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"»--trivial-only« wurde angegeben, aber dies ist keine triviale Operation."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ja, tue was ich sage!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Sie sind im Begriff, etwas potentiell Schädliches zu tun.\n"
+"Zum Fortfahren geben Sie bitte »%s« ein.\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Abbruch."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Möchten Sie fortfahren?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Einige Dateien konnten nicht heruntergeladen werden."
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Herunterladen abgeschlossen; Nur-Herunterladen-Modus aktiv"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing und Wechselmedien werden derzeit nicht unterstützt."
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Fehlende Pakete konnten nicht korrigiert werden."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Installation abgebrochen."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Das folgende Paket verschwand von Ihrem System, da alle\n"
+"Dateien von anderen Paketen überschrieben wurden:"
+msgstr[1] ""
+"Die folgenden Pakete verschwanden von Ihrem System, da alle\n"
+"Dateien von anderen Paketen überschrieben wurden:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Hinweis: Dies wird automatisch und absichtlich von dpkg durchgeführt."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Es soll nichts gelöscht werden, AutoRemover kann nicht gestartet werden."
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, es sieht so aus, als ob der AutoRemover etwas beschädigt hat, was\n"
+"wirklich nicht geschehen sollte. Bitte erstellen Sie einen Fehlerbericht\n"
+"über apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Interner Fehler, AutoRemover hat etwas beschädigt."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Das folgende Paket wurde automatisch installiert und wird nicht mehr "
+"benötigt:"
+msgstr[1] ""
+"Die folgenden Pakete wurden automatisch installiert und werden nicht mehr "
+"benötigt:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu Paket wurde automatisch installiert und wird nicht mehr benötigt.\n"
+msgstr[1] ""
+"%lu Pakete wurden automatisch installiert und werden nicht mehr benötigt.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Verwenden Sie »%s«, um es zu entfernen."
+msgstr[1] "Verwenden Sie »%s«, um sie zu entfernen."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "Die folgenden zusätzlichen Pakete werden installiert:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Vorgeschlagene Pakete:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Empfohlene Pakete:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"%s wird übersprungen; es ist schon installiert und ein Upgrade ist nicht "
+"angefordert.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"%s wird übersprungen; es ist nicht installiert und lediglich Upgrades sind "
+"angefordert.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+"Erneute Installation von %s ist nicht möglich,\n"
+"es kann nicht heruntergeladen werden.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ist schon die neueste Version (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s wurde als manuell installiert festgelegt.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Version »%s« (%s) für »%s« gewählt.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Version »%s« (%s) für »%s« gewählt aufgrund von »%s«.\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Auflistung"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Es gibt %i zusätzliche Version. Bitte verwenden Sie die Option »-a«, um sie "
+"anzuzeigen."
+msgstr[1] ""
+"Es gibt %i zusätzliche Versionen. Bitte verwenden Sie die Option »-a«, um "
+"sie anzuzeigen."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"HINWEIS: Dies ist nur eine Simulation!\n"
+" %s benötigt root-Privilegien für die reale Ausführung.\n"
+" Behalten Sie ebenfalls in Hinterkopf, dass die Sperren deaktiviert\n"
+" sind, verlassen Sie sich also bezüglich des reellen aktuellen\n"
+" Status der Sperre nicht darauf!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "unbekannt"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Installiert,aktualisierbar auf: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr " [Installiert,lokal]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[installiert,automatisch-entfernbar]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr " [Installiert,automatisch]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr " [installiert]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[aktualisierbar von: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[Konfiguration-verbleibend]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "aber %s ist installiert"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "aber %s soll installiert werden"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ist aber nicht installierbar"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ist aber ein virtuelles Paket"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "soll aber nicht installiert werden"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ist aber nicht installiert"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " oder"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Die folgenden Pakete haben unerfüllte Abhängigkeiten:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Die folgenden NEUEN Pakete werden installiert:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Die folgenden Pakete werden ENTFERNT:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Die folgenden Pakete sind zurückgehalten worden:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Die folgenden Pakete werden aktualisiert (Upgrade):"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr ""
+"Die folgenden Pakete werden durch eine ÄLTERE VERSION ERSETZT (Downgrade):"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Die folgenden zurückgehaltenen Pakete werden verändert:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (wegen %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"WARNUNG: Die folgenden essentiellen Pakete werden entfernt.\n"
+"Dies sollte NICHT geschehen, außer Sie wissen genau, was Sie tun!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu aktualisiert, %lu neu installiert, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu erneut installiert, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu durch eine ältere Version ersetzt, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu zu entfernen und %lu nicht aktualisiert.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu nicht vollständig installiert oder entfernt.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[J/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[j/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "J"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Sie müssen mindestens ein Suchmuster angeben"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Volltextsuche"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Es gibt %i zusätzlichen Eintrag. Bitte verwenden Sie die Option »-a«, um ihn "
+"anzuzeigen."
+msgstr[1] ""
+"Es gibt %i zusätzliche Einträge. Bitte verwenden Sie die Option »-a«, um sie "
+"anzuzeigen."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "kein reales Paket (virtuell)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Paketdateien:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Zwischenspeicher ist nicht synchron, Querverweisen einer Paketdatei nicht "
+"möglich"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Mit Pinning verwaltete Pakete:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s mit Priorität %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Installiert: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Installationskandidat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(keine)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versionstabelle:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Es kann kein Paket für Architektur »%s« gefunden werden"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Es kann kein Paket »%s« mit Version »%s« gefunden werden"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Es kann kein Paket »%s« in der Veröffentlichung »%s« gefunden werden"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Als Quellpaket wird »%s« statt »%s« gewählt.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Es kann keine Version »%s« des Pakets »%s« gefunden werden"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"Es muss mindestens ein Paket angegeben werden, dessen Quellen geholt werden "
+"sollen."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Quellpaket für %s kann nicht gefunden werden."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"HINWEIS: »%s«-Paketierung wird betreut im »%s«-Versionsverwaltungssystem "
+"auf:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Bitte verwenden Sie:\n"
+"%s\n"
+"um die neuesten (möglicherweise noch unveröffentlichten) Aktualisierungen\n"
+"für das Paket abzurufen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Bereits heruntergeladene Datei »%s« wird übersprungen.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Es müssen noch %sB von %sB an Quellarchiven heruntergeladen werden.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Es müssen %sB an Quellarchiven heruntergeladen werden.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Quelle %s wird heruntergeladen.\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Einige Archive konnten nicht heruntergeladen werden."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Das Entpacken der bereits entpackten Quelle in %s wird übersprungen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Entpackbefehl »%s« fehlgeschlagen.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Überprüfen Sie, ob das Paket »dpkg-dev« installiert ist.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Build-Befehl »%s« fehlgeschlagen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+"Informationen zu Bauabhängigkeiten für %s konnten nicht gefunden werden."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s hat keine Bauabhängigkeiten.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Keine Architekturinformation für %s verfügbar. Weiteres zur Einrichtung "
+"finden Sie unter apt.conf(5) APT::Architectures."
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Es muss mindestens ein Paket angegeben werden, dessen Bauabhängigkeiten "
+"überprüft werden sollen."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+"Hinweis: Verzeichnis »%s« wird verwendet, um die Bauabhängigkeiten zu "
+"bekommen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+"Hinweis: Datei »%s« wird verwendet, um die Paketabhängigkeiten zu bekommen.\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Verarbeitung der Bauabhängigkeiten fehlgeschlagen"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Verarbeitung von %s fehlgeschlagen. Erneut bearbeiten?"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+"Ihre »%s«-Datei wurde verändert, bitte führen Sie »apt-get update« aus.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Paket %s Version %s hat eine unerfüllte Abhängigkeit:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Der Befehl »update« akzeptiert keine Argumente."
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+"Die Verwendung von %s sollte gegenüber der Methode bevorzugt werden, Login-"
+"Informationen direkt in den %s-Abschnitt für »%s« einzutragen."
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"Aktualisierung für %i Paket verfügbar. Führen Sie »apt list --upgradable« "
+"aus, um es anzuzeigen.\n"
+msgstr[1] ""
+"Aktualisierung für %i Pakete verfügbar. Führen Sie »apt list --upgradable« "
+"aus, um sie anzuzeigen.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Alle Pakete sind aktuell."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "Der Befehl »%s« akzeptiert keine Argumente."
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Gesamtzahl an Paketnamen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Gesamtzahl an Paketstrukturen: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " davon gewöhnliche Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " davon rein virtuelle Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " davon einzelne virtuelle Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " davon gemischte virtuelle Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " davon fehlend: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Gesamtzahl an unterschiedlichen Versionen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Gesamtzahl an unterschiedlichen Beschreibungen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Gesamtzahl an Abhängigkeiten: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Gesamtzahl an Version/Datei-Beziehungen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Gesamtzahl an Beschreibung/Datei-Beziehungen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Gesamtzahl an Bereitstellungen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Gesamtzahl an Mustern: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Gesamtmenge an Slack: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Gesamtmenge an Speicher: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Dieser Befehl ist überholt. Bitte verwenden Sie stattdessen »apt-mark "
+"showauto«."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Aufruf: apt-cache [Optionen] befehl\n"
+" apt-cache [Optionen] show paket1 [paket2 ...]\n"
+"\n"
+"apt-cache ermöglicht die Abfrage und Anzeige verfügbarer Informationen über\n"
+"installierte und installierbare Pakete. Es arbeitet ausschließlich mit den\n"
+"Daten, die über den »update«-Befehl in den lokalen Zwischenspeicher geladen\n"
+"wurden, z.B. durch apt-get. Die angezeigten Informationen können daher\n"
+"veraltet sein, wenn der letzte Aktualisierungsvorgang schon länger her ist,\n"
+"aber dafür funktioniert es unabhängig von der Verfügbarkeit der "
+"konfigurierten\n"
+"Paketquellen (z.B. kann es auch offline arbeiten).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Aufzeichnungen zu Quellen ausgeben"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "die Paketliste mittels regulärem Ausdruck durchsuchen"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "rohe Abhängigkeitsinformationen eines Pakets ausgeben"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "umgekehrte Abhängigkeitsinformationen eines Pakets ausgeben"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "einen lesbaren Datensatz für das Paket ausgeben"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "die Namen aller Pakete im System auflisten"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Policy-Einstellungen ausgeben"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Bitte geben Sie einen Namen für dieses Medium an, wie zum Beispiel »Debian "
+"5.0.3 Disk 1«"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr ""
+"Bitte legen Sie ein Medium in das Laufwerk ein und drücken Sie die "
+"Eingabetaste [Enter]."
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "»%s« konnte nicht in »%s« eingebunden werden."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Über den Standard-Einbindungspunkt konnte automatisch keine CD-ROM erkannt "
+"werden.\n"
+"Sie könnten die Option --cdrom ausprobieren, um den Einbindungspunkt der CD-"
+"ROM festzulegen.\n"
+"Weitere Informationen über automatische Erkennung von CD-ROMs und "
+"Einbindungspunkte\n"
+"bekommen Sie mit »man apt-cdrom«."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+"Wiederholen Sie dieses Prozedere für die restlichen Disks Ihres Satzes."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Aufruf: apt-cdrom [Optionen] befehl\n"
+"\n"
+"apt-cdrom wird verwendet, um CD-ROMs, USB-Speicher und andere Wechselmedien\n"
+"als Paketquelle für APT hinzuzufügen. Der Einbindungspunkt und andere\n"
+"Informationen werden aus apt.conf(5), udev(7) und fstab(5) ermittelt.\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumente nicht paarweise"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Aufruf: apt-config [Optionen] befehl\n"
+"\n"
+"apt-config ist eine Schnittstelle zu den Konfigurationseinstellungen, die "
+"von\n"
+"den APT-Werkzeugen verwendet werden; es ist hauptsächlich für Fehlersuche\n"
+"und Shell-Skript-Verarbeitung gedacht.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "Konfigurationswerte per Shell-Auswertung laden"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "die aktive Konfigurationseinstellung anzeigen"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Aufruf: apt-dump-solver\n"
+"\n"
+"apt-dump-solver ist eine Schnittstelle zur Speicherung eines EDSP-Szenarios\n"
+"in einer Datei sowie zur optionalen Weiterleitung an ein anderes "
+"Problemlöser-\n"
+"Programm.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Aufruf: apt-extracttemplates datei1 [datei2 ...]\n"
+"\n"
+"apt-extracttemplates wird verwendet, um Konfigurations- und Vorlagendateien\n"
+"(Templates) aus Debian-Paketen zu extrahieren.\n"
+"Es wird hauptsächlich von debconf(1) genutzt, um vor einer Installation\n"
+"Fragen zur Paketkonfiguration anzuzeigen.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr ""
+"Debconf-Version konnte nicht ermittelt werden. Ist debconf installiert?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Paket %s konnte nicht gefunden werden"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s wurde als automatisch installiert festgelegt.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Dieser Befehl ist überholt. Bitte verwenden Sie stattdessen »apt-mark auto« "
+"und »apt-mark manual«."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Interner Fehler, der Problemlöser hat etwas beschädigt."
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Unterstützte Module:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Aufruf: apt-get [Optionen] befehl\n"
+" apt-get [Optionen] install|remove paket1 [paket2 ...]\n"
+" apt-get [Optionen] source paket1 [paket2 ...]\n"
+"\n"
+"apt-get ist ein Befehlszeilenwerkzeug zum Herunterladen von Paketen (und\n"
+"Informationen zu diesen Paketen) von authentifizierten Paketquellen sowie\n"
+"für deren Installation, Aktualisierung und Entfernung zusammen mit ihren\n"
+"Paketabhängigkeiten.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "neue Paketinformationen holen"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Upgrade (Paketaktualisierung) durchführen"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "neue Pakete installieren (paket ist libc6, nicht libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "neue Pakete installieren (paket ist libc6, nicht libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Pakete entfernen"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Pakete vollständig entfernen (inkl. Konfigurationsdateien)"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "alle nicht mehr verwendeten Pakete automatisch entfernen"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr ""
+"Upgrade (Paketaktualisierung) für die komplette Distribution durchführen, "
+"siehe apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "der Auswahl von »dselect« folgen"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Bauabhängigkeiten für Quellpakete konfigurieren"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "heruntergeladene Archive löschen"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "veraltete heruntergeladene Archive löschen"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "überprüfen, ob es unerfüllte Abhängigkeiten gibt"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Quellarchive herunterladen"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "das Binärpaket in das aktuelle Verzeichnis herunterladen"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Änderungsprotokoll für das angegebene Paket herunterladen und anzeigen"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Eine URL als Argument wird benötigt"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Es muss mindestens ein URL/Dateinamen-Paar angegeben werden"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Herunterladen fehlgeschlagen"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec für %s fehlgeschlagen"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Aufruf: apt-helper [Optionen] befehl\n"
+" apt-helper [Optionen] cat-file datei ...\n"
+" apt-helper [Optionen] download-file URI Zielpfad\n"
+"\n"
+"apt-helper vereint eine Vielzahl von Befehlen zur Shell-Skript-"
+"Verarbeitung,\n"
+"um z.B. die gleiche Proxy-Konfiguration oder das gleiche Acquire-System "
+"(zum\n"
+"Herunterladen von Paketen) zu benutzen, wie APT es tun würde.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "den angegebenen URI in den Zielpfad herunterladen"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "einen SRV-Eintrag abfragen (z.B. _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "verketten von Dateien, mit automatischer Dekomprimierung"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "erkennen eines Proxy-Servers mittels apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr "warten, bis das System online ist"
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Aufruf: apt-internal-planer\n"
+"\n"
+"apt-internal-planer ist eine Schnittstelle, um den derzeitigen internen\n"
+"Installations-Planer aus der APT-Familie wie einen externen zu verwenden,\n"
+"zwecks Fehlersuche oder ähnlichem.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Aufruf: apt-internal-solver\n"
+"\n"
+"apt-internal-solver ist eine Schnittstelle, um den derzeitigen internen\n"
+"Problemlöser aus der APT-Familie wie einen externen zu verwenden, zwecks\n"
+"Fehlersuche oder ähnlichem.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr ""
+"Markierung für %s kann nicht gesetzt werden, da es nicht installiert ist.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s wurde bereits auf manuell installiert gesetzt.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s wurde bereits auf automatisch installiert gesetzt.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Die folgenden NEUEN Pakete werden installiert:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s wurde bereits auf Halten gesetzt.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "Die Halten-Markierung für %s wurde bereits entfernt.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Ausführen von dpkg fehlgeschlagen. Sind Sie root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s auf Halten gesetzt.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Halten-Markierung für %s entfernt.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "%s zum vollständigen Entfernen vorgewählt.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "%s zum Entfernen vorgewählt.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "%s zur Installation vorgewählt.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Aufruf: apt-mark [Optionen] {auto|manual} paket1 [paket2 ...]\n"
+"\n"
+"apt-mark ist ein einfaches Befehlszeilenprogramm, um Pakete als manuell "
+"oder\n"
+"automatisch installiert zu markieren. Es kann auch verwendet werden, um den\n"
+"von dpkg(1) gesetzten Auswahlstatus von Paketen zu verändern oder alle "
+"Pakete\n"
+"aufzulisten, die eine bestimmte Markierung haben oder nicht haben.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "das angegebene Paket als »Automatisch installiert« markieren"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "das angegebene Paket als »Manuell installiert« markieren"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "das angegebene Paket als »Automatisch installiert« markieren"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "ein Paket als zurückgehalten markieren"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "ein Paket als nicht mehr zurückgehalten markieren"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "eine Liste aller automatisch installierten Pakete anzeigen"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "eine Liste aller manuell installierten Pakete anzeigen"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "eine Liste aller zurückgehaltenen Pakete anzeigen"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Unbekannter Paketeintrag!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Aufruf: apt-sortpkgs [options] datei1 [datei2 ...]\n"
+"\n"
+"apt-sortpkgs ist ein einfaches Werkzeug zur Sortierung von "
+"Paketinformations-\n"
+"dateien. Standardmäßig sortiert es nach binären Paketinformationen, aber "
+"die\n"
+"Option -s kann verwendet werden, um stattdessen nach "
+"Quellpaketinformationen\n"
+"zu sortieren.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Aufruf: apt [Optionen] befehl\n"
+"\n"
+"apt ist ein Paketmanager für die Befehlszeile und bietet Befehle für die\n"
+"Suche und Verwaltung von Paketen sowie für die Abfrage von Informationen\n"
+"zu diesen Paketen.\n"
+"Es stellt die gleiche Funktionalität zur Verfügung wie die spezialisierten\n"
+"APT-Werkzeuge apt-get und apt-cache, aber seine Optionen sind eher passend\n"
+"für die interaktive Nutzung.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "Pakete basierend auf dem Paketnamen auflisten"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "Paketbeschreibungen durchsuchen"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "Paketdetails anzeigen"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "Pakete installieren"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "Pakete installieren"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "Pakete entfernen"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "Liste verfügbarer Pakete aktualisieren"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "das System durch Installation/Aktualisierung der Pakete hochrüsten"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+"das System durch Entfernung/Installation/Aktualisierung der Pakete "
+"vollständig hochrüsten"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "die Datei für die Paketquellen bearbeiten"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Fehlerhafte Voreinstellung!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Zum Fortfahren die Eingabetaste [Enter] drücken."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Möchten Sie alle bisher heruntergeladenen .deb-Dateien löschen?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Einige Fehler traten während des Entpackens auf. Installierte Pakete"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+"werden konfiguriert. Dies kann zu doppelten Fehlermeldungen oder Fehlern "
+"durch"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "fehlende Abhängigkeiten führen. Das ist in Ordnung, nur die Fehler"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"oberhalb dieser Meldung sind wichtig. Bitte beseitigen Sie sie und "
+"[I]nstallieren Sie erneut."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Verfügbare Informationen werden zusammengeführt."
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Paketerweiterungsliste ist zu lang."
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Fehler beim Verarbeiten von Verzeichnis %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Quellerweiterungsliste ist zu lang."
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Fehler beim Schreiben der Kopfzeilen in die Inhaltsdatei"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Fehler beim Verarbeiten der Inhalte %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Aufruf: apt-ftparchive [optionen] befehl\n"
+"Befehle: packages Binärpfad [Override-Datei [Pfadpräfix]]\n"
+" sources Quellpfad [Override-Datei [Pfadpräfix]]\n"
+" contents Pfad\n"
+" release Pfad\n"
+" generate Konfigurationsdatei [Gruppen]\n"
+" clean Konfigurationsdatei\n"
+"\n"
+"apt-ftparchive erstellt Indexdateien für Debian-Archive. Es unterstützt "
+"viele\n"
+"verschiedene Arten der Erstellung, von vollautomatisch bis hin zu den\n"
+"funktionalen Äquivalenten von dpkg-scanpackages und dpkg-scansources.\n"
+"\n"
+"apt-ftparchive erstellt Package-Dateien aus einem Baum von .debs. Die "
+"Package-\n"
+"Datei enthält den Inhalt aller Steuerfelder aus jedem Paket sowie einen "
+"MD5-\n"
+"Hashwert und die Dateigröße. Eine Override-Datei wird unterstützt, um Werte "
+"für\n"
+"Priorität und Bereich (Section) zu erzwingen.\n"
+"\n"
+"Auf ganz ähnliche Weise erstellt apt-ftparchive Sources-Dateien aus einem "
+"Baum\n"
+"von .dscs. Die Option --source-override kann benutzt werden, um eine "
+"Override-\n"
+"Datei für Quellen anzugeben.\n"
+"\n"
+"Die Befehle »packages« und »source« sollten von der Wurzel des Baums aus\n"
+"aufgerufen werden. Binärpfad sollte auf die Basis der rekursiven Suche "
+"zeigen\n"
+"und Override-Datei sollte die Override-Flags enthalten. Pfadpräfix wird, so\n"
+"vorhanden, jedem Dateinamen vorangestellt. Beispielaufruf im Debian-Archiv:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Optionen:\n"
+" -h dieser Hilfe-Text\n"
+" --md5 MD5-Hashes erzeugen\n"
+" -s=? Override-Datei für Quellen\n"
+" -q ruhig\n"
+" -d=? optionale Zwischenspeicher-Datenbank auswählen\n"
+" --no-delink Debug-Modus für Delinking aktivieren\n"
+" --contents Inhaltsdatei erzeugen\n"
+" -c=? diese Konfigurationsdatei lesen\n"
+" -o=? eine beliebige Konfigurationsoption setzen"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Keine Auswahl traf zu"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Einige Dateien fehlen in der Paketdateigruppe »%s«."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Datenbank wurde beschädigt, Datei umbenannt in %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Datenbank ist veraltet; es wird versucht, %s zu erneuern."
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Datenbankformat ist ungültig. Wenn Sie ein Upgrade (Paketaktualisierung) von "
+"einer älteren apt-Version gemacht haben, entfernen Sie bitte die Datenbank "
+"und erstellen Sie sie neu."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Datenbankdatei %s kann nicht geöffnet werden: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Lesen von .dsc fehlgeschlagen"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Archiv hat keinen Steuerungsdatensatz."
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Unmöglich, einen Cursor zu bekommen"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Speicheranforderung fehlgeschlagen"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Unbekannter Komprimierungsalgorithmus »%s«"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Komprimierte Ausgabe %s benötigt einen Komprimierungssatz."
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr ""
+"Interprozesskommunikation mit Unterprozess konnte nicht aufgebaut werden."
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Fork fehlgeschlagen"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Komprimierungs-Kindprozess"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Interner Fehler, %s konnte nicht erzeugt werden."
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "E/A zu Kindprozess/Datei fehlgeschlagen"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Lesevorgang während der MD5-Berechnung fehlgeschlagen"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s konnte nicht geöffnet werden."
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Missgestaltetes Override %s Zeile %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Override-Datei %s konnte nicht gelesen werden."
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Missgestaltetes Override %s Zeile %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Missgestaltetes Override %s Zeile %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Missgestaltetes Override %s Zeile %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Verzeichnis %s kann nicht gelesen werden.\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: %s mit »stat« abfragen nicht möglich.\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "F: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "F: Fehler gehören zu Datei "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s konnte nicht aufgelöst werden."
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Durchlaufen des Verzeichnisbaums fehlgeschlagen"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Öffnen von %s fehlgeschlagen"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Erzeugen einer Verknüpfung von %s zu %s fehlgeschlagen"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink-Limit von %sB erreicht\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Archiv hatte kein Feld »package«"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s hat keinen Eintrag in der Override-Liste.\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s-Betreuer ist %s und nicht %s.\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s hat keinen Eintrag in der Source-Override-Liste.\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s hat keinen Eintrag in der Binary-Override-Liste.\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Warten auf Kopfzeilen"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Vom HTTP-Server wurde eine ungültige Antwort-Kopfzeile gesandt."
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Ungültige Kopfzeile"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+"Vom HTTP-Server wurde eine ungültige »Content-Length«-Kopfzeile gesandt."
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr ""
+"Vom HTTP-Server wurde eine ungültige »Content-Range«-Kopfzeile gesandt."
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr ""
+"Teilweise Dateiübertragung wird vom HTTP-Server nur fehlerhaft unterstützt."
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Unbekanntes Datumsformat"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Fehlerhafte Kopfzeilendaten"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Verbindung fehlgeschlagen"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+"Datei hat eine unerwartete Größe (%llu != %llu). Eventuell läuft gerade eine "
+"Spiegel-Synchronisierung?"
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"Funktion %s aufgrund inkorrekter Antwort vom Server/Proxy automatisch "
+"deaktiviert. Näheres unter apt.conf(5)."
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Interner Fehler"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "CD-ROM-Datenbank %s kann nicht gelesen werden."
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Bitte verwenden Sie apt-cdrom, um APT diese CD-ROM bekannt zu machen. apt-"
+"get update kann nicht dazu verwendet werden, neue CD-ROMs hinzuzufügen."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Falsche CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Einbindung von CD-ROM in %s kann nicht gelöst werden, möglicherweise wird "
+"sie noch verwendet."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Medium nicht gefunden"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Datei nicht gefunden"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "Direkte Verbindung zu %s-Domains wird standardmäßig blockiert."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr "Verbunden mit %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Verbindung mit %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Socket für %s konnte nicht erzeugt werden (f=%u t=%u p=%u)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Verbindung mit %s:%s kann nicht aufgebaut werden (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Fehlgeschlagen"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Verbindung mit %s:%s nicht möglich (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+"Verbindung mit %s:%s konnte nicht aufgebaut werden (%s), Zeitüberschreitung "
+"aufgetreten"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Verbindung mit %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "»%s« konnte nicht aufgelöst werden."
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Temporärer Fehlschlag beim Auflösen von »%s«"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Systemfehler bei der Auflösung von »%s:%s«"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Beim Auflösen von »%s:%s« ist etwas Schlimmes passiert (%i - %s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Verbindung mit %s:%s nicht möglich:"
+
+# looks like someone hardcoded English grammar
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Abfrage mit »stat« fehlgeschlagen"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Ungültige URI, lokale URIs dürfen nicht mit // beginnen."
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Anmeldung läuft"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Name des Kommunikationspartners kann nicht bestimmt werden."
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Lokaler Name kann nicht bestimmt werden."
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Verbindung durch Server abgelehnt; Server meldet: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Befehl USER fehlgeschlagen, Server meldet: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Befehl PASS fehlgeschlagen, Server meldet: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Es war ein Proxy-Server angegeben, aber kein Login-Skript, Acquire::ftp::"
+"ProxyLogin ist leer."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Befehl »%s« des Login-Skriptes fehlgeschlagen, Server meldet: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Befehl TYPE fehlgeschlagen: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Zeitüberschreitung der Verbindung"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Verbindung durch Server geschlossen"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Durch eine Antwort wurde der Puffer zum Überlaufen gebracht."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protokoll beschädigt"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Socket konnte nicht erzeugt werden."
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Daten-Socket konnte wegen Zeitüberschreitung nicht verbunden werden."
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Passiver Socket konnte nicht verbunden werden."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr ""
+"Von der Funktion getaddrinfo wurde kein auf Verbindungen wartender Socket "
+"gefunden."
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Verbindung des Sockets nicht möglich"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Warten auf Verbindungen auf dem Socket nicht möglich"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Name des Sockets konnte nicht bestimmt werden."
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "PORT-Befehl konnte nicht gesendet werden."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Unbekannte Adressfamilie %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Befehl EPRT fehlgeschlagen: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Zeitüberschreitung bei Datenverbindungsaufbau"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Verbindung konnte nicht angenommen werden."
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problem bei Bestimmung des Hashwertes einer Datei"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Datei konnte nicht heruntergeladen werden; Server meldet: »%s«"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Zeitüberschreitung bei Datenverbindung"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Datenübertragung fehlgeschlagen; Server meldet: »%s«"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Abfrage"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Aufruf nicht möglich: "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Signierte Datei ist nicht gültig, »%s« erhalten. (Erfordert das Netzwerk "
+"eine Authentifizierung?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Mindestens eine ungültige Signatur wurde entdeckt."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Interner Fehler: Gültige Signatur, Fingerabdruck des Schlüssels konnte "
+"jedoch nicht ermittelt werden?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"»apt-key« konnte zur Überprüfung der Signatur nicht ausgeführt werden (ist "
+"gnupg installiert?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Unbekannter Fehler beim Ausführen von apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+"Signatur von Schlüssel %s verwendet einen schwachen Hash-Algorithmus (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Die folgenden Signaturen waren ungültig:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Die folgenden Signaturen konnten nicht überprüft werden, weil ihr "
+"öffentlicher\n"
+"Schlüssel nicht verfügbar ist:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Fehler beim Schreiben der Datei"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+"Fehler beim Lesen vom Server: Verbindung wurde durch den Server auf der "
+"anderen Seite geschlossen."
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Fehler beim Lesen vom Server"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Fehler beim Schreiben in Datei"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Auswahl fehlgeschlagen"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Zeitüberschreitung bei Verbindung"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Fehler beim Schreiben der Ausgabedatei"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Änderungszeitpunkt kann nicht gesetzt werden."
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Verbindung vorzeitig beendet"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Leere Dateien können kein gültiges Archiv sein."
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Ungültige Archivbestandteil-Kopfzeile %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s entfernt"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Paketdatei %s ist nicht synchronisiert."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Die Paketindexdateien sind beschädigt: Kein Filename:-Feld für Paket %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Keine Datei von Spiegelserver »%s« gefunden"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Datei »%s« von Spiegelserver kann nicht gelesen werden."
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Kein Eintrag in Spiegeldatei »%s« gefunden"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Spiegelserver: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Konfigurationsdatei %s wird geöffnet"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s wird geöffnet."
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Erwarteter Eintrag »%s« konnte in Release-Datei nicht gefunden werden "
+#~ "(falscher Eintrag in sources.list oder missgebildete Datei)."
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Unerfüllte Abhängigkeiten. Versuchen Sie, --fix-broken zu benutzen."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "Probieren Sie »apt --fix-broken install«, um dies zu korrigieren:"
+
+#~ msgid "(not found)"
+#~ msgstr "(nicht gefunden)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Paket-Pinning: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Es gibt keine öffentlichen Schlüssel für die folgenden Schlüssel-IDs:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Das Verzeichnis %s ist umgeleitet."
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "»%s«-Abhängigkeit für %s kann nicht erfüllt werden, da %s bei »%s«-"
+#~ "Paketen nicht erlaubt ist."
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "»%s«-Abhängigkeit für %s kann nicht erfüllt werden, da Paket %s nicht "
+#~ "gefunden werden kann."
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "»%s«-Abhängigkeit für %s kann nicht erfüllt werden: Installiertes Paket "
+#~ "%s ist zu neu."
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "»%s«-Abhängigkeit für %s kann nicht erfüllt werden, da die Version des "
+#~ "Installationskandidaten für das Paket %s die Versionsanforderungen nicht "
+#~ "erfüllen kann."
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "»%s«-Abhängigkeit für %s kann nicht erfüllt werden, da für Paket %s kein "
+#~ "Installationskandidat existiert."
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "»%s«-Abhängigkeit für %s konnte nicht erfüllt werden: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Bauabhängigkeiten für %s konnten nicht erfüllt werden."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problem beim Entfernen (unlink) von %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Entfernen (unlink) von %s fehlgeschlagen"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Aufruf: apt-cache [Optionen] befehl\n"
+#~ " apt-cache [Optionen] show paket1 [paket2 ...]\n"
+#~ "\n"
+#~ "apt-cache ist ein untergeordnetes Werkzeug, um Informationen aus den\n"
+#~ "binären Zwischenspeicher-Dateien von APT abzufragen.\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Befehle:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Optionen:\n"
+#~ " -h dieser Hilfe-Text\n"
+#~ " -p=? der Paket-Zwischenspeicher\n"
+#~ " -s=? der Quell-Zwischenspeicher\n"
+#~ " -q Fortschrittsanzeige abschalten\n"
+#~ " -i nur wichtige Abhängigkeiten für den »unmet«-Befehl ausgeben\n"
+#~ " -c=? diese Konfigurationsdatei lesen\n"
+#~ " -o=? eine beliebige Konfigurationsoption setzen, z.B. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Weitere Informationen finden Sie in den Handbuchseiten von apt-cache(8)\n"
+#~ "und apt.conf(5).\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Aufruf: apt [Optionen] Befehl\n"
+#~ "\n"
+#~ "Befehlszeilen-Schnittstelle (CLI) für apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Optionen:\n"
+#~ " -h dieser Hilfetext\n"
+#~ " -q protokollierbare Ausgabe – keine Fortschrittsanzeige\n"
+#~ " -qq keine Ausgabe, außer bei Fehlern\n"
+#~ " -s nichts tun, nur eine Simulation der Aktionen durchführen\n"
+#~ " -f Autom./Manuell-Markierung in der angegebenen Datei lesen/"
+#~ "schreiben\n"
+#~ " -c=? Diese Konfigurationsdatei benutzen\n"
+#~ " -o=? Beliebige Konfigurationsoption setzen, z.B. -o dir::cache=/tmp\n"
+#~ "Siehe auch die Handbuchseiten apt-mark(8) und apt.conf(5) bezüglich\n"
+#~ "weitergehender Informationen."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Optionen:\n"
+#~ " -h Dieser Hilfetext\n"
+#~ " -c=? Diese Konfigurationsdatei lesen\n"
+#~ " -o=? Eine beliebige Konfigurationsoption setzen, z.B. -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Optionen:\n"
+#~ " -h dieser Hilfetext\n"
+#~ " -q protokollierbare Ausgabe – keine Fortschrittsanzeige\n"
+#~ " -qq keine Ausgabe, außer bei Fehlern\n"
+#~ " -s nichts tun, nur eine Simulation der Aktionen durchführen\n"
+#~ " -f Autom./Manuell-Markierung in der angegebenen Datei lesen/"
+#~ "schreiben\n"
+#~ " -c=? Diese Konfigurationsdatei benutzen\n"
+#~ " -o=? Beliebige Konfigurationsoption setzen, z.B. -o dir::cache=/tmp\n"
+#~ "Siehe auch die Handbuchseiten apt-mark(8) und apt.conf(5) bezüglich\n"
+#~ "weitergehender Informationen."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Aufruf: apt-sortpkgs [optionen] datei1 [datei2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs ist ein einfaches Werkzeug, um Paketdateien zu sortieren. "
+#~ "Die\n"
+#~ "Option -s wird benutzt, um anzuzeigen, um was für eine Datei es sich "
+#~ "handelt.\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ " -h Dieser Hilfetext\n"
+#~ " -s Quelldateisortierung benutzen\n"
+#~ " -c=? Diese Konfigurationsdatei lesen\n"
+#~ " -o=? Eine beliebige Konfigurationsoption setzen, z.B. -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Kindprozess fehlgeschlagen"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Es muss mindestens ein URL/Dateinamen-Paar angegeben werden"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Pipes (Weiterleitungen) konnten nicht erzeugt werden."
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "gzip konnte nicht ausgeführt werden."
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s für %s, kompiliert am %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "FILE* konnte nicht erzeugt werden."
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Missgestalteter Absatz %u in Quellliste %s (»URI parse«)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Missgestaltete Zeile %lu in Quellliste %s ([Option] nicht auswertbar)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Missgestaltete Zeile %lu in Quellliste %s ([Option] zu kurz)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Missgestaltete Zeile %lu in Quellliste %s ([%s] ist keine Zuweisung)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Missgestaltete Zeile %lu in Quellliste %s ([%s] hat keinen Schlüssel)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Missgestaltete Zeile %lu in Quellliste %s ([%s] Schlüssel %s hat keinen "
+#~ "Wert)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Missgestaltete Zeile %lu in Quellliste %s (»URI«)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Missgestaltete Zeile %lu in Quellliste %s (»dist«)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Missgestaltete Zeile %lu in Quellliste %s (»URI parse«)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Missgestaltete Zeile %lu in Quellliste %s (»absolute dist«)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Missgestaltete Zeile %lu in Quellliste %s (»dist parse«)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Paket %s %s wurde beim Verarbeiten der Dateiabhängigkeiten nicht gefunden."
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Die Quellpaket-Liste %s konnte nicht mit »stat« abgefragt werden"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Sammeln der angebotenen Funktionalitäten (Provides) aus den Dateien"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Datei %s beginnt nicht mit einer Klartext-signierten Nachricht."
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Hash-Summe für »%s« kann in Release-Datei nicht gefunden werden."
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Herstellerblock %s enthält keinen Fingerabdruck."
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Gesamtmenge des Abhängigkeits-/Versionsspeichers: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Sie haben nicht genügend freien Speicherplatz in %s."
+
+#~ msgid "Done"
+#~ msgstr "Fertig"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Kein Schlüsselring in %s installiert"
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "Ist stdout ein Terminal?"
+
+#~ msgid "ioctl(TIOCGWINSZ) failed"
+#~ msgstr "ioctl(TIOCGWINSZ) fehlgeschlagen"
+
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Interner Fehler, Upgrade hat etwas beschädigt."
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ist kein gültiges DEB-Paket."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Verwendeter CD-ROM-Einbindungspunkt: %s\n"
+#~ "CD-ROM wird eingebunden.\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Patch konnte nicht mit mmap und unter Verwendung von Dateioperationen auf "
+#~ "%s angewendet werden - der Patch scheint beschädigt zu sein."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Patch konnte nicht mit mmap auf %s angewendet werden (es ist jedoch "
+#~ "nichts mmap-spezifisches fehlgeschlagen) - der Patch scheint beschädigt "
+#~ "zu sein."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr ""
+#~ "Nicht verfügbare Veröffentlichung »%s« von Paket »%s« wird ignoriert."
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Herunterladen von %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Dies ist kein gültiges DEB-Archiv, da es weder »%s«, »%s« noch »%s« "
+#~ "enthält."
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5-Summe stimmt nicht überein"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Es konnte keine Datei für Paket %s gefunden werden. Das könnte heißen, "
+#~ "dass Sie dieses Paket von Hand korrigieren müssen."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Schreiben des Protokolls nicht möglich, openpty() fehlgeschlagen (/dev/"
+#~ "pts nicht eingebunden?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Nicht vorhandene Datei %s wird übersprungen."
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "%s konnte nicht entfernt werden."
+
+#~ msgid "Unable to create %s"
+#~ msgstr "%s konnte nicht erzeugt werden."
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "%sinfo mit »stat« abfragen fehlgeschlagen"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Die »info«- und »temp«-Verzeichnisse müssen in demselben Dateisystem "
+#~ "liegen."
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Wechsel in das Administrationsverzeichnis %sinfo fehlgeschlagen"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Interner Fehler beim Holen eines Paketnamens"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Paketauflistung wird gelesen"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Öffnen der Listendatei »%sinfo/%s« fehlgeschlagen. Wenn Sie diese Datei "
+#~ "nicht wiederherstellen können, dann leeren Sie sie und installieren Sie "
+#~ "sofort dieselbe Version des Paketes erneut!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Fehler beim Lesen der Listendatei %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Interner Fehler beim Holen eines Knotens"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Fehler beim Öffnen der Umleitungsdatei %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Die Umleitungsdatei ist beschädigt."
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Ungültige Zeile in der Umleitungsdatei: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Interner Fehler beim Hinzufügen einer Umleitung"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Der Paketzwischenspeicher muss zuerst initialisiert werden."
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Es konnte keine »Package:«-Kopfzeile gefunden werden, Offset %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Fehlerhafter »ConfFile«-Abschnitt in der Statusdatei, Offset %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Fehler beim Verarbeiten der MD5-Summe. Offset %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Wechsel nach %s nicht möglich"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Es konnte keine gültige »control«-Datei gefunden werden."
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Pipe (Weiterleitung) für %s konnte nicht geöffnet werden."
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Lesefehler von Prozess %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Einzelne Kopfzeile aus %u Zeichen erhalten"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr ""
+#~ "Hinweis: Dies wird automatisch und absichtlich von dpkg durchgeführt."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Missgestaltetes Override %s Zeile %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Missgestaltetes Override %s Zeile %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Missgestaltetes Override %s Zeile %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "Dekomprimierer"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr ""
+#~ "Lesevorgang: es verbleiben noch %lu zu lesen, jedoch nichts mehr übrig"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr ""
+#~ "Schreibvorgang: es verbleiben noch %lu zu schreiben, jedoch Schreiben "
+#~ "nicht möglich"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "»%s« (bereits entpackt) konnte nicht unmittelbar konfiguriert werden. "
+#~ "Lesen Sie »man 5 apt.conf« unter APT::Immediate-Configure bezüglich "
+#~ "weiterer Details."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Interner Fehler, Bestandteil konnte nicht gefunden werden"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Interner Fehler, Gruppe »%s« hat kein installierbares Pseudo-Paket"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Release-Datei abgelaufen, %s wird ignoriert (ungültig seit %s)"
diff --git a/po/dz.po b/po/dz.po
new file mode 100644
index 0000000..0bc7fb6
--- /dev/null
+++ b/po/dz.po
@@ -0,0 +1,4301 @@
+# This file is put in the public domain.
+# Kinley Tshering <gasepkuenden2k3@hotmail.com>, 2006
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2006-09-19 09:49+0530\n"
+"Last-Translator: Kinley Tshering <gasepkuenden2k3@hotmail.com>\n"
+"Language-Team: Dzongkha <pgeyleg@dit.gov.bt>\n"
+"Language: dz\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2;plural=(n!=1)\n"
+"X-Poedit-Language: Dzongkha\n"
+"X-Poedit-Country: Bhutan\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "ནུས་མེད་ཡིག་མཛོད་ཀྱི་མིང་རྟགས།"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "ཡིག་མཛོད་འཐུས་མི་མགོ་ཡིག་ལྷག་ནིའི་འཛོལ་བ།"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "ནུས་མེད་ཡིག་མཛོད་འཐུས་མི་གི་མགོ་ཡིག་"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "ཡིག་མཛོད་འདི་གནམ་མེད་ས་མེད་ཐུང་ཀུ་འདུག"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "ཡིག་མཛོད་མགོ་ཡིག་ཚུ་ལྷག་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "ངན་ཅན་གྱི་ཡིག་མཛོད།"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "ཊར་ཅེག་སམ་དེ་འཐུས་ཤོར་བྱུང་ཡོད་ ཡིག་མཛོད་ངན་ཅན་བྱུང་ནུག"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "མ་ཤེས་པའི་ ཊཱར་་མགོ་ཡིག་་དབྱེ་བ་ %u་ འཐུས་མི་ %s།"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "འ་ནི་འདི་ ཌི་ཨི་བི་ཡིག་མཛོད་ནུས་ཅན་ཅིག་མེན་པས་ '%s'འཐུས་མི་བརླག་སྟོར་ཞུགས་དོ།"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "ནང་འཁོད་འཛོལ་བ་གིས་འཐུས་མི་%sའདི་ག་ཡོད་འཚོལ་མ་འཐོབ།"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "མིང་དཔྱད་འབད་མ་བཏུབ་པའི་ཚད་འཛིན་ཡིག་སྣོད།"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "%s་ཡིག་སྣོད་འདི་འབྲི་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "%s་ཡིག་སྣོད་འདི་ཁ་བསྡམས་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "%s་འགྲུལ་ལམ་དེ་གནམ་མེད་ས་མེད་རིངམ་འདུག"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "སྦུང་ཚན་བཟོ་བཤོལ་%s་གཅིག་ལས་ལྷག་སྟེ་འདུག"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "སྣོད་ཐོ་%s་འདི་ཁ་ཕྱོགས་སྒྱུར་དེ་ཡོད།"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "ཐུམ་སྒྲིལ་འདི་གིས་ག་སྒྱུར་དམིགས་གཏད་%s/%s་ལུ་འབྲི་ནིའི་འབད་རྩོལ་བསྐྱེདཔ་དེ་ཡོད།"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "ཁ་སྒྱུར་འགྲུལ་ལམ་འདི་གནམ་མེད་ས་མེད་རིངམ་ཨིན་པས།"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s་སིཊེཊི་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "%s་ལུ་%s་བསྐྱར་མིང་བཏགས་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "སྣོད་ཡིག་%s་འདི་སྣོད་ཡིག་མེན་མི་ཅིག་གིས་ཚབ་བཙུག་དེ་ཡོདཔ་ཨིན།"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "ཁོང་རའི་དྲྭ་རྟགས། (#)རྡོབ་ནང་ལུ་མཐུད་མཚམས་ག་ཡོད་འཚོལ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "འགྲུལ་ལམ་དེ་གནམ་མེད་ས་མེད་རིངམ་ཅིག་ཨིན་པས།"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "%s་གི་དོན་ལུ་ཚབ་སྲུང་འབད་བའི་ཐུམ་སྒྲིལ་དེ་གིས་འཐོན་རིམ་གཅིག་ད་ཡང་མཐུན་སྒྲིག་མི་འབད་བས།"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "ཐུམ་སྒྲིལ་%s་ནང་ལུ་་ཡིག་སྣོད་%s/%sགིས་གཅིག་ཚབ་སྲུང་འབདཝ་ཨིན།"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s་འདི་ལུ་ལྷག་མ་ཚུགས།"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s་འདི་ལུ་ངོ་བཤུས་འབད་མ་ཚུགས།"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "ད་ལྟོ་ཡང་འབྲེལ་ལམ་ཡོད་པའི་མཐུད་མཚམས་གུར་བཀོག་བཞག་མཐུད་མཚམས་དེ་བོད་བརྡ་འབད་འདི་ཡོད།"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "དྲྭ་རྟགས་རྒྱུ་རྫས་འདི་ག་ཡོད་འཚོལ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "ཁ་ཕྱོགས་སྤྲོད་བཞག་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "ཁ་ཕྱོགས་ཁ་སྐོང་རྐྱབ་ནི་ནང་ ནང་འཁོད་ཀྱི་འཛོལ་བ།"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "%s -> %s ་དང་ %s/%s་ཁ་ཕྱོགས་ཅིག་ཚབ་སྲུང་འབད་ནི་ལུ་འབད་རྩོལ་བསྐྱེད་དོ།"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "%s -> %s་ཁ་ཕྱོགས་ཀྱི་ལོག་བལྟབ་ཁ་སྐོང་།"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "རིམ་སྒྲིག་ཡིག་སྣོད་%s/%s་འདི་ངོ་བཤུས་བཟོ།"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "སྣོད་ཐོ་%s་འདི་ཁ་ཕྱོགས་སྒྱུར་དེ་ཡོད།"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "སྣོད་ཐོ་%s་འདི་ཁ་ཕྱོགས་སྒྱུར་དེ་ཡོད།"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "སྣོད་ཐོ་%s་འདི་ཁ་ཕྱོགས་སྒྱུར་དེ་ཡོད།"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "སྣོད་ཐོ་%s་འདི་ཁ་ཕྱོགས་སྒྱུར་དེ་ཡོད།"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "སྣོད་ཐོ་%s་འདི་ཁ་ཕྱོགས་སྒྱུར་དེ་ཡོད།"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "%s་འབྲེལ་ལམ་ལྷག་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Hash Sum mismatch"
+msgstr "ཨེམ་ཌི་༥་ ཁྱོན་བསྡོམས་མ་མཐུན་པ།"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "%s (%s -> %s)བསྐྱར་མིང་བཏགས་ནི་འདི་འཐུས་ཤོར་བྱུང་ཡོདཔ་ཨིན།"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "ཚད་མ་མཐུན།"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "ནུས་མེད་བཀོལ་སྤྱོད་%s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "འཛོལ་བ་འབྲི།"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "%s %s་ ལེན་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+" %s་ཐུམ་སྒྲིལ་གི་དོན་ལུ་ང་་གི་ཡིག་སྣོད་ཅིག་ག་ཡོད་འཚོལ་མི་འཐོབ་པས། འདི་འབདཝ་ལས་ཁྱོད་ཀྱི་ལག་ཐོག་ལས་ "
+"འ་ནི་ཐུམ་སྒྲིལ་འདི་གི་དཀའ་ངལ་སེལ་དགོཔ་འདུག (arch འདི་བྱིག་སོངམ་ལས་བརྟེན།)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "%s (%s)་ལུ་མཐུད་དོ།"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "ཐབས་ལམ་འདྲེན་བྱེད་%s་འདི་མ་འཐོབ།"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "'dpkg-dev'་ཐུམ་སྒྲིལ་དེ་གཞི་བཙུགས་འབད་ཡོད་པ་ཅིན་ཨེབ་གཏང་འབད།\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "ཐབས་ལམ་ %s འདི་ངེས་བདེན་སྦེ་འགོ་མ་བཙུགས་འབད།"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "ཁ་ཡིག་བཀོད་ཡོད་པའི་ ཌིསི་འདི་བཙུགས་གནང་། '%s'འདྲེན་འཕྲུལ་ནང་'%s' དང་ལོག་ལྡེ་འདི་ཨེབ།་"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "ཐོ་བཀོད་འབད་མི་སྣོད་ཐོ་%s་ཆ་ཤས་འདི་བརླག་སྟོར་ཟུགས་ཏེ་འདུག"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "ཡིག་མཛོད་སྣོད་ཐོ་ %s་ ཆ་ཤས་འདི་བརླག་སྟོར་ཞུགས་ཏེ་འདུག"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "ཐོ་བཀོད་འབད་ཡོད་པའི་སྣོད་ཡིག་འདི་ལྡེ་མིག་རྐྱབ་མ་ཚུགས།"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "ཟུར་ཐོ་ཡིག་སྣོད་ཀྱི་དབྱེ་བ་ '%s' འདི་རྒྱབ་སྐྱོར་མ་འབད་བས།"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "%li་ གི་བརླག་སྟོར་ཞུགས་པའི་ཡིག་སྣོད་%li (%s ལྷག་ལུས་དོ།)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr " %li་གི་བརླག་སྟོར་ཟུགསཔའི་ཡིག་སྣོད་ %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"ཐུམ་སྒྲིལ་%s་འདི་ལོག་འདི་རང་གཞི་བཙུགས་འབད་དགོཔ་འདུག་ འདི་འབདཝ་ད་འདི་གི་དོན་ལུ་ཡིག་མཛོད་ཅིག་འཚོལ་"
+"མ་ཐོབ།"
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"འཛོལ་བ་ pkgProblemResolver::གིས་བཟོ་བཏོན་འབད་ཡོད་པའི་མཚམས་དེ་ཚུ་མོས་མཐུན་བཟོཝ་ཨིན འ་ནི་ཐུམ་"
+"སྒྲིལ་ཚུ་འཛིན་པའི་རྒྱུ་རྐྱེན་ལས་བརྟེན་ཨིན་པས།"
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "དཀའ་ངལ་འདི་ནོར་བཅོས་འབད་མ་ཚུགས་ ཁྱོད་ཀྱི་ཐུམ་སྒྲིལ་ཆད་པ་ཚུ་འཆང་འདི་འདུག"
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "ཐུམ་སྒྲིལ་གྱི་ཐོ་ཡིག་ཡང་ན་གནས་ཚད་ཡིག་སྣོད་ཚུ་ མིང་དཔྱད་ཡང་ན་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "འ་ནི་དཀའ་ངལ་འདི་ཚུ་སེལ་ནིའི་ལུ་ ཁྱོད་ཀྱི་ apt-get update་དེ་གཡོག་བཀོལ་དགོཔ་འོང་།"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "འབྱུང་ཁུངས་ཚུ་ཀྱི་ཐོ་ཡིག་དེ་ལྷག་མི་ཚུགས་པས།"
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "རི་ཇེགསི་ཕྱོགས་སྒྲིག་འཛོལ་བ་- %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "%sགི་དོན་ལུ་འཛིན་གྲོལ་'%s'་དེ་མ་འཐོབ་པས།"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "'%s'་གི་དོན་ལུ་འཐོན་རིམ་'%s'་དེ་མ་འཐོབ་པས།"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "%sཐུམ་སྒྲིལ་འདི་ག་ཡོད་ཟཚོལ་མ་ཐོབ།"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "གྲལ་ཐིག་%u་འདི་འབྱུང་ཁུངས་ཐོ་ཡིག་%s་ནང་ལུ་གནམ་མེད་ས་མེད་རིངམོ་འདུག"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Unmounting CD-ROM...\n"
+msgstr "སི་ཌི་-རོམ་སྦྱར་བརྩེགས་མ་འབད་བར་བཞག་དོ..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr " %s སི་ཌི-རོམ་སྦྱར་བརྩེགས་ཀྱི་ས་ཚིགས་ལག་ལེན་འཐབ་དོ།\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "ཌིསིཀ་གི་དོན་ལུ་བསྒུག་དོ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "སི་ཌི་-རོམ་སྦྱར་བརྩེགས་འབད་དོ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "ངོས་འཛིན་འབད་དོ..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "གསོག་འཇོག་འབད་ཡོད་པའི་ཁ་ཡིག:%s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "ཟུར་ཐོ་ཡིག་སྣོད་ཚུ་གི་དོན་ལུ་ ཌིསིཀ་ཞིབ་ལྟ་འབད་དོ...\n"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr "%i་ཐུམ་སྒྲིལ་གྱི་ཟུར་ཐོ་ཚུ་ཐོབ་ཅི་ %i་འབྱུང་ཁུངས་ཟུར་ཐོ་ཚུ་དང་ %iམིང་རྟགས་ཚུ།\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "Found label '%s'\n"
+msgstr "གསོག་འཇོག་འབད་ཡོད་པའི་ཁ་ཡིག:%s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "དེ་ནུས་ཅན་གྱི་མིང་ཅིག་མེན་པས་ ལོག་སྟེ་རང་འབད་རྩོལ་བསྐྱེད།\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"ཌིསིཀ་འདི་བོད་བརྡ་འབད་དོ་ཡོདཔ་ཨིན།\n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "ཐུམ་སྒྲིལ་གྱིཐོ་ཡིག་ཚུ་འདྲ་བཤུས་རྐྱབ་དོ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "འབྱུང་ཁུངས་ཀྱི་ཐོ་ཡིག་གསརཔ་ཅིག་འབྲི་དོ།\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "འ་ནི་ ཌིསིཀ་གི་དོན་ལུ་ འབྱུང་ཁུངས་ཧྲིལ་བུ་ཚུ་:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "%s་ལུ་བསྒྱུར་བཅོས་འབད་མ་ཚུགས།"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s་ ངོ་བཤུས་འབད་མ་ཚུགས།"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "སྦྱར་བརྩེགས་ས་ཚིགས་%s་འདི་ངོ་བཤུས་འབད་མ་ཚུགས།"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "སི་ཌི་རོམ་འདི་ངོ་བཤུས་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "བརྡ་བཀོད་གྲལ་ཐིག་གྱི་གདམ་ཁ་'%c'[%s་ནང་ལས་]འདི་མ་ཤེས་པས།"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "བ་རྡ་བཀོད་གྲལ་ཐིག་གི་གདམ་ཁ་%s་འདི་ཧ་མ་གོ་བས།"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "བརྡ་བཀོད་གྲལ་ཐིག་གི་གདམ་ཁ་%s་འདི་བུ་ལིན་མེན་པས།"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "གདམ་ཁ་%s་ལུ་སྒྲུབ་རྟགས་ཅིག་དགོ་པས།"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "གདམ་ཁ་%s:རིམ་སྒྲིག་གི་རྣམ་གྲངས་གསལ་བཀོད་ལུ་ =<val> ་ཅིག་དགོཔ་ཨིན།"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "གདམ་ཁ་ %s ་ལུ་'%s'་མེན་པར་ ཧྲིལ་ཨང་སྒྲུབ་རྟགས་ཅིག་དགོས་མཁོ་ཡོདཔ་ཨིན"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "གདམ་ཁ་'%s'འདི་གནམ་མེད་ས་མེད་རིངམ་འདུག"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "དྲན་ཤེས་ %s་འདི་ཧ་གོ་མ་ཚུགས་པས་ བདེན་པ་ཡང་ན་རྫུན་པ་ལུ་འབད་རྩོལ་བསྐྱེདཔ།"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "ནུས་མེད་བཀོལ་སྤྱོད་%s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "ངོ་མ་ཤེས་པའི་སྡུད་ཚིག་གི་དབྱེ་བ:'%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "་ཚིག་སྦྱོར་འཛོལ་བ་%s:%u: སྡེབ་ཚན་གྱིས་མིང་མེད་མི་དང་གཅིག་ཁར་འགོ་བཙུགསཔ་ཨིན"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u:བཟོ་ཉེས་འགྱུར་བའི་ངོ་རྟགས།"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u:གནས་གོང་གི་ཤུལ་ལས་མཁོ་མེད་ཐེབས།"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u:བཀོད་རྒྱ་ཚུ་ཆེ་རིམ་ནང་རྐྱངམ་ཅིག་བྱིན་ཚུགས།"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u:འདུ་འཛོམས་འབད་འབདཝ་ལེ་ཤཱ་གྲངས་སུ་བཙུགསཔ་ཨིན།"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u: ནཱ་ལས་རང་འགོ་བཙུགས་གྲངས་སུ་བཙུགས་ཏེ་ཡོད།"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u: རྒྱབ་སྐྱོར་མ་འབད་བར་ཡོད་པའི་'%s'བཀོད་རྒྱ།"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u:བཀོད་རྒྱ་ཚུ་ཆེ་རིམ་ནང་རྐྱངམ་ཅིག་བྱིན་ཚུགས།"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "ཚིག་སྦྱོར་འཛོལ་བ་%s:%u: ཡིག་སྣོད་ཀྱི་མཇུག་ལུ་མཁོ་མེད་ཐེབས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "ཡིག་སྣོད་འདི་འབྲེལལམ་མེདཔ་བཟོ་བའི་བསྒང་དཀའ་ངལ།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "%s ལྷག་ནི་རྐྱངམ་ཅིག་འབད་མི་ལྡེ་མིག་ཡིག་སྣོད་འདི་གི་དོན་ལུ་ལྡེ་མིག་རྐྱབ་ནི་ལག་ལེན་མི་འཐབ་པས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "ལྡེ་མིག་རྐྱབས་ཡོད་པའི་ཡིག་སྣོད་%s་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"ཨེན་ཨེཕ་ཨེསི་ %s སྦྱར་བརྩེགས་འབད་ཡོད་པའི་ལྡེ་མིག་ཡིག་སྣོད་ཀྱི་དོན་ལུ་ལྡེ་མིག་རྐྱབ་ནི་ལག་ལེན་མི་འཐབ་པས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "%sལྡེ་མིག་རྐྱབ་ནི་ལེན་མ་ཚུགས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "%s་གི་དོན་ལུ་བསྒུག་སྡོད་ཅི་ འདི་འབདཝ་ད་ཕར་མིན་འདུག"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "ཡན་ལག་ལས་སྦྱོར་%s་ལུ་ཆ་བགོས་ཀྱི་སྐྱོན་ཅིག་ཐོབ་ཡོདཔ་ཨིན།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "ཡན་ལག་ལས་སྦྱོར་%s་ལུ་ཆ་བགོས་ཀྱི་སྐྱོན་ཅིག་ཐོབ་ཡོདཔ་ཨིན།"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "ཡན་ལག་ལས་སྦྱོར་%s་གིས་འཛོལ་བའི་ཨང་རྟགས་(%u)ཅིག་སླར་ལོག་འབད་ཡོདཔ་ཨིན།"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "ཡན་ལག་ལས་སྦྱོར་་%s་གིས་རེ་བ་མེད་པར་ཕྱིར་ཐོན་ཡོདཔ་ཨིན།"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "འཛོལ་བ་ལྷབ།"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "འཛོལ་བ་འབྲི།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "ཡིག་སྣོད་འདི་ཁ་བསྡམས་པའི་བསྒང་དཀའ་ངལ།"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "ཡན་ལག་ལས་སྦྱོར་ ཨའི་པི་སི་ གསར་བསྐྲུན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "ཨེབ་འཕྲུལ་ལག་ལེན་འཐབ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "%s་ཡིག་སྣོད་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "%s་གི་དོན་ལུ་རྒྱུད་དུང་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "ལྷག་ ད་ལྟོ་ཡང་ལྷག་ནི་ལུ་%lu་ཡོད་འདི་འབདཝ་ད་ཅི་ཡང་ལྷག་ལུས་མིན་འདུག"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "འབྲི་ ད་ལྟོ་ཡང་འབྲི་ནི་ལུ་%lu་ཡོད་འདི་འདབཝ་ད་འབད་མ་ཚུགས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "ཡིག་སྣོད་འདི་ཁ་བསྡམས་པའི་བསྒང་དཀའ་ངལ།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "ཡིག་སྣོད་མཉམ་བྱུང་འབདཝ་ད་དཀའ་ངལ།"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "ཡིག་སྣོད་མཉམ་བྱུང་འབདཝ་ད་དཀའ་ངལ།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "%s་འདི་ལུ་ངོ་བཤུས་འབད་མ་ཚུགས།"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr " %sལུ་འབྲི་མ་ཚུགས།"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "ཡིག་སྣོད་སྟོངམ་འདི་mmap་འབད་མ་ཚུགས།"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "%lu་བཱའིཊིསི་གི་mmap་བཟོ་མ་ཚུགས།"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "%s་གི་དོན་ལུ་རྒྱུད་དུང་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "%s་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "ལས་བཀོལ་འབད་མ་ཚུགས།"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "%lu་བཱའིཊིསི་གི་mmap་བཟོ་མ་ཚུགས།"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "%s་ཡིག་སྣོད་འདི་འབྲི་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... འཛོལ་བ་!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... འབད་ཚར་ཡོད།"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... འབད་ཚར་ཡོད།"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "སེལ་འཐུ་%s ་མ་འཐོབ།"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "%s (༡་)་ཐུམ་སྒྲིལ་ཡིག་སྣོད་འདི་མིང་དཔྱད་འབད་མ་ཚུགས།"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "%s་གི་ཚབ་ལུ་%s་སེལ་འཐུ་འབད་ནི་སེམས་ཁར་བཞག\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "%s་ཁ་ཕྱོགས་ཡིག་སྣོད་ནང་ནུས་མེད་གྲལ་ཐིག"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "%s (%d)་ཐུམ་སྒྲིལ་ཡིག་སྣོད་འདི་མིང་དཔྱད་འབད་མ་ཚུགས།"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "ཐོ་བཀོད་འབད་ཡོད་པའི་སྣོད་ཡིག་འདི་ལྡེ་མིག་རྐྱབ་མ་ཚུགས།"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "ཐོ་བཀོད་འབད་ཡོད་པའི་སྣོད་ཡིག་འདི་ལྡེ་མིག་རྐྱབ་མ་ཚུགས།"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s་ གྲ་སྒྲིག་འབད་དོ།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "%s་ རིམ་སྒྲིག་ལུ་གྲ་སྒྲིག་འབད་དོ།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "%s་ རྩ་བསྐྲད་གཏང་ནིའི་དོན་ལུ་གྲ་སྒྲིག་འབད་དོ།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "%s མཇུག་བསྡུཝ་སྦེ་རང་རྩ་བསྐྲད་གཏང་ནིའི་དོན་ལུ་གྲ་སྒྲིག་འབད་དོ།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "གཞི་བཙུགས་འབད་ཡོད་པའི་%s།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s་རིམ་སྒྲིག་འབད་དོ།"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Directory '%s' missing"
+msgstr "ཐོ་བཀོད་འབད་མི་སྣོད་ཐོ་%s་ཆ་ཤས་འདི་བརླག་སྟོར་ཟུགས་ཏེ་འདུག"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "%s་ཡིག་སྣོད་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr " %s་ གི་སྦུང་ཚན་བཟོ་བཤོལ་འབད་དོ།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr "གཞི་བཙུགས་འབད་ཡོད་པའི་%s།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s་རྩ་བསྐྲད་གཏང་དོ།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "%s མཇུག་བསྡུཝ་སྦེ་རང་རྩ་བསྐྲད་བཏང་ཡོད།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s མཇུག་བསྡུཝ་སྦེ་རང་རྩ་བསྐྲད་བཏང་ཡོད།"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr " %sལུ་འབྲི་མ་ཚུགས།"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "རྟེན་འབྲེལ་གྱི་རྩ་འབྲེལ་བཟོ་བརྩིགས་འབད་དོ།"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "མི་ངོ་འཐོན་རིམཚུ།"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "བརྟེན་པའི་བཟོ་བཏོན།"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "འཐོབ་ཚུགས་པའི་བརྡ་དོན་མཉམ་བསྡོམས་འབད་དོ།"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "%s་ག་ཕྱེ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "%s་ཡིག་སྣོད་འདི་འབྲི་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i་དྲན་མཐོ་དེ་ཚུ་བྲིས་ཡོད།\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i བྱིག་འགྱོ་ཡོད་པའི་ཡིག་སྣོད་ཚུ་དང་གཅིག་ཁར་ %i དྲན་ཐོ་འདི་ཚུ་བྲིས་ཡོད།\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i་མཐུན་སྒྲིག་མེདཔ་པའི་ཡིག་སྣོད་ཚུ་དང་གཅིག་ཁར་ %i་དྲན་ཐོ་ཚུ་བྲིས་བཞག་ཡོདཔ་ཨིན།\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"%i བྱིག་འགྱོ་ཡོད་པའི་ཡིག་སྣོད་ཚུ་དང་ %iམཐུན་སྒྲིག་མེད་པའི་ཡིག་སྣོད་ཚུ་དང་གཅིག་ཁར་ %i དྲན་ཐོ་འདི་ཚུ་བྲིས་"
+"ཡོདཔ་ཨིན།\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "ཨེམ་ཌི་༥་ ཁྱོན་བསྡོམས་མ་མཐུན་པ།"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "སྦུང་ཚན་བཟོ་ནིའི་རིམ་ལུགས་ '%s' འདི་ལུ་རྒྱབ་སྐྱོར་མ་འབད་བས།"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "འོས་འབབ་དང་ལྡན་པའི་སྦུང་ཚན་རིམ་ལུགས་ཀྱི་དབྱེ་བ་ཅིག་གཏན་འབེབས་བཟོ་མི་ཚུགས་པས།"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "%s་ཡིག་སྣོད་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"མི་མཐུན་/སྔོན་རྟེན་འཕྲལ་བཀོལ་ལས་བརྟེན་ འ་ནི་གཞི་བཙུགས་གཡོག་བཀོལ་འདི་ལུ་ མེད་དུ་མི་རུང་བའི་%sཐུམ་"
+"སྒྲིལ་ གནས་སྐབས་ཀྱི་རྩ་བསྐྲད་གཏང་ནི་འདི་དགོས་མཁོ་ཡོདཔ་ཨིན། འདི་འཕྲལ་འཕྲལ་རང་བྱང་ཉེས་ཅིག་ཨིན་པས་ "
+"འདི་འབདཝ་ད་ཁྱོད་ཀྱི་ཐད་རི་འབའ་རི་འབད་དགོཔ་ཨིན་པ་ཅིན་ APT::Force-LoopBreak གདམ་ཁ་འདི་ཤུགས་"
+"ལྡན་བཟོ།"
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "ཐུམ་སྒྲིལ་འདྲ་མཛོད་སྟོངམ།"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "ཐུམ་སྒྲིལ་འདྲ་མཛོད་ཡིག་སྣོད་འདི་ངན་ཅན་ཨིན་པས།"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "ཐུམ་སྒྲིས་འདྲ་མཛོད་ཡིག་སྣོད་འདི་ མི་མཐུན་པའི་འཐོན་རིམ་ཅིག་ཨིན་པས།"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "འ་ནི་ཨེ་པི་ཊི་ འདི་གིས་ '%s'འཐོན་རིམ་བཟོ་ནིའི་རིམ་ལུགས་དེ་ལུ་རྒྱབ་སྐྱོར་མི་འབད་བས།"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "ཐུམ་སྒྲིལ་འདྲ་མཛོད་འདི་བཟོ་བཀོད་སོ་སོ་ཅིག་གི་དོན་ལུ་བཟོ་བརྩིགས་འབད་འབདཝ་ཨིནཔས།"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "ཐུམ་སྒྲིལ་འདྲ་མཛོད་ཡིག་སྣོད་འདི་ངན་ཅན་ཨིན་པས།"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "རྟེནམ་ཨིན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "སྔོན་གོང་མ་རྟེནམ་ཨིན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "བསམ་འཆར་བཀོདཔ་ཨིན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "མི་མཐུནམ་ཨིན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "འོས་སྦྱོར་འབདཝ་ཨིན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "ཚབ་བཙུགསཔ་ཨིན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "ཕན་མེདཔ་བཟོཝ་ཨིན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "གལ་ཅན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "དགོས་མཁོ་ཡོདཔ།"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "ཚད་ལྡན།"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "ཐེབས།"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "གདམ་ཁ་ཅན།"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "འདྲ་མཛོད་ལུ་མཐུན་འགྱུར་མེན་པའི་འཐོན་རིམ་བཟོ་ནིའི་རིམ་ལུགས་ཅིག་འདུག"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "%s (པི་ཀེ་ཇི་འཚོལ་ནི)དེ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "པའོ་་་ཁྱོད་ཀྱིས་ ཨེ་པི་ཊི་འདི་གིས་བཟོད་ཐུབ་པའི་ཐུམ་སྒྲིལ་ཨང་གྲངས་ལས་ལྷག་ནུག"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "པའོ་་་ཁྱོད་ཀྱིས་ ཨེ་པི་ཊི་འདི་གིས་བཟོད་ཐུབ་པའི་ཐོན་རིམ་ཨང་གྲངས་ལས་ལྷག་ནུག"
+
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "པའོ་་་ཁྱོད་ཀྱིས་ ཨེ་པི་ཊི་འདི་གིས་བཟོད་ཐུབ་པའི་ཐོན་རིམ་ཨང་གྲངས་ལས་ལྷག་ནུག"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "པའོ་་་ཁྱོད་ཀྱིས་ ཨེ་པི་ཊི་འདི་གིས་བཟོད་ཐུབ་པའི་བརྟེན་པའི་ཨང་གྲངས་ལས་ལྷག་ནུག"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "ཐུམ་སྒྲིལ་ཐོ་ཡིག་ཚུ་ལྷག་དོ།"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IO འཛོལ་བ་འབྱུང་ཁུངས་འདྲ་མཛོད་སྲུང་བཞག་འབད་དོ།"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "ཟུར་ཐོ་ཡིག་སྣོད་ཀྱི་དབྱེ་བ་ '%s' འདི་རྒྱབ་སྐྱོར་མ་འབད་བས།"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "དགའ་གདམ་ཡིག་སྣོད་ནང་ལུ་ནུས་མེད་ཀྱི་དྲན་ཐོ་ ཐུམ་སྒྲིལ་མགོ་ཡིག་མིན་འདུག"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "ངོ་རྟགས་ཨང་གི་དབྱེ་བ་ %s འདི་ཧ་གོ་མ་ཚུགས།"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "གོ་རྟགས་ཨང་གི་དོན་ལུ་ གཙོ་རིམ་(ཡང་ན་ ཀླད་ཀོར་)ཚུ་གསལ་བཀོད་མ་འབད་བས།"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%s གྲལ་ཐིག་%lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%u་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s (དབྱེ་བ)་ནང་ན།"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "དབྱེ་བ་'%s'་འདི་གྲལ་ཐིག་%u་གུར་ལུ་ཡོདཔ་འབྱུང་ཁུངས་ཐོ་ཡིག་%s་གི་ནང་ན་མ་ཤེས་པས།"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%u་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s (དབྱེ་བ)་ནང་ན།"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "དབྱེ་བ་'%s'་འདི་གྲལ་ཐིག་%u་གུར་ལུ་ཡོདཔ་འབྱུང་ཁུངས་ཐོ་ཡིག་%s་གི་ནང་ན་མ་ཤེས་པས།"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"ཁྱོད་རའི་sources.listགི་ཐོ་ཡིག་ནང་ལུ་ཁྱོད་ཀྱི་ 'འབྱུང་ཁུངས་' ཡུ་ཨར་ཨའི་ཚུ་་ལ་ལུ་ཅིག་བཙུགས་དགོ"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"ཟུར་ཐོ་ཡིག་སྣོད་ལ་ལུ་ཅིག་ཕབ་ལེན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ནུག་ འདི་ཚུ་སྣང་མེད་སྦེ་བཞགཔ་མ་ཚད་ ཚབ་ལུ་"
+"རྙིངམ་འདི་ཚུ་ལག་ལེན་འཐབ་ནུག"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "ཡར་བསྐྱེད་རྩིས་བཏོན་དོ་"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "ཨེབ།:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "ལེན:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "ཨེལ་ཇི་ཨེན:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "ཨི་ཨར་ཨར།:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%s (%sB/s)་ནང་ལུ་%sB་དེ་ལེན་ཡོདཔ་ཨིན།\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [ལཱ་འབད་དོ།]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"བརྡ་ལམ་བསྒྱུར་བཅོས:ཁ་ཡིག་བཀོད་ཡོད་པའི་ཌིསིཀ་འདི་\n"
+" '%s'\n"
+"འདྲེན་འཕྲུལ་'%s'ནང་བཙུགས་བཞིནམ་ལས་ལོག་ལྡེ་འདི་ཨེབ།\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "རྟེན་འབྲེལ་ནོར་བཅོས་འབད་དོ།"
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr "འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "རྟེན་འབྲེལ་འདི་ནོར་བཅོས་འབད་མི་ཚུགས་པས།"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "ཡར་བསྐྱེད་འབད་ཡོད་པའི་ཆ་ཚན་འདི་ཆུང་ཀུ་བཟོ་མི་ཚུགས་པས།"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr "འབད་ཚར་ཡི།"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"འ་ནི་འདི་ཚུ་ནོར་བཅོས་འབད་ནི་ལུ་ཁྱོད་ཀྱི་'apt --fix-broken install'དེ་གཡོག་བཀོལ་དགོཔ་འོང་།"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"མ་ཚང་བའི་རྟེན་འབྲེལ་ ཐུས་སྒྲིལ་མེད་མི་ཚུ་དང་གཅིག་ཁར་ 'apt --fix-broken install'དེ་འབཐ་རྩོལ་"
+"བསྐྱེདཔ།(ཡང་ན་ཐབས་ཤེས་ཅིག་གསལ་བཀོད་འབད།)"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "དྲན་འཛིན་ རི་ཇེགསི་'%s'གི་དོན་ལུ་%s་སེལ་འཐུ་འབད་དོ།\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "དྲན་འཛིན་ རི་ཇེགསི་'%s'གི་དོན་ལུ་%s་སེལ་འཐུ་འབད་དོ།\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "དྲན་འཛིན་ རི་ཇེགསི་'%s'གི་དོན་ལུ་%s་སེལ་འཐུ་འབད་དོ།\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "གྱིས་བྱིན་ཏེ་ཡོད་པའི་ཐུམ་སྒྲིལ་%s་འདི་བར་ཅུ་ཡལ་ཐུམ་སྒྲིལ་ཅིག་ཨིན།\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [གཞི་བཙུགས་འབད་ཡོད།]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "མི་ངོ་འཐོན་རིམཚུ།"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "ཁྱོད་ཀྱི་གཞི་བཙུགས་འབད་ནི་ལུ་གཏན་འཁལ་སྦེ་གཅིག་སེལ་འཐུ་འབད་དགོ"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"ཐུམ་སྒྲིལ་%s་འདི་འཐོབ་མི་ཚུགས་པས་ འདི་འབདཝ་ད་ཐུམ་སྒྲིལ་གཞན་ཅིག་གིས་གྲོས་བསྟུན་འབད་དེ་ཡོད།\n"
+"འདི་གིས་ཐུམ་སྒྲིལ་ཅིག་བརླག་སྟོར་ཞུགས་ཡོདཔ་ཨིནམ་སྟོནམ་ཨིནམ་དང་ ཕན་མེད་སྦེ་གནས་ཡོདཔ་ ཡང་ན་\n"
+"འདི་གཞན་འབྱུང་ཅིག་ནང་ལས་ལས་རྐྱངམ་ཅིག་འཐོབ་ཚུགསཔ་ཨིན་པས།\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "ག་དེ་སྦེ་ཨིན་རུང་འོག་གི་ཐུམ་སྒྲིལ་ཚུ་གིས་ འདི་ཚབ་བཙུགསཔ་ཨིན:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "ཐུམ་སྒྲིལ་%s་ལུ་གཞི་བཙུགས་ཀྱི་མི་ངོ་མིན་འདུག"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "ཐུམ་སྒྲིལ་%s་འདི་གཞི་བཙུགས་མ་འབད་བས་ འདི་འབད་ནི་དི་གིས་རྩ་བསྐྲད་མ་གཏང་པས།་\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "ཐུམ་སྒྲིལ་%s་འདི་གཞི་བཙུགས་མ་འབད་བས་ འདི་འབད་ནི་དི་གིས་རྩ་བསྐྲད་མ་གཏང་པས།་\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "%s་གི་ཚབ་ལུ་%s་སེལ་འཐུ་འབད་ནི་སེམས་ཁར་བཞག\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "འ་ནི་ ཨེ་ཊི་པི་འདི་ལུ་ཡང་དག་ ཀའུ་ ནུས་ཤུགས་ཚུ་ཡོད།"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "ཐུམ་སྒྲིལ་ཚུ་མ་ཐོབ།"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ཉེན་བརྡ:འོག་གི་ཐུམ་སྒྲིལ་འདི་ཚུ་བདེན་བཤད་འབད་མི་བཏུབ་པས།"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "བདེན་བཤད་ཉེན་བརྡ་འདི་ཟུར་འབད་ཡོད།\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "ཐུམ་སྒྲིལ་ལ་ལུ་ཅིག་བདེན་བཤད་འབད་མ་ཚུགས།"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid "Install these packages without verification?"
+msgstr "བདེན་སྦྱོར་མ་འབད་བར་འ་ནི་ཐུམ་སྒྲིལ་འདི་ཚུ་གཞི་བཙུགས་འབད་ནི་ཨིན་ན་"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "དཀའ་ངལ་ཚུ་ཡོདཔ་ལས་-y ་འདི་ --force-yes་མེདཐོག་ལས་ལག་ལེན་འཐབ་སྟེ་ཡོད།"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "%s་ནང་བར་སྟོང་"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "%s ནང་ཁྱོད་ལུ་བར་སྟོང་དལཝ་ལངམ་སྦེ་མིན་འདུག"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "ཕབ་ལེན་འབད་ནིའི་སྣོད་ཡིག་འདི་ལྡེ་མིག་རྐྱབས་མ་ཚུགས་པས།"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"ཐུམ་སྒྲིལ་ལ་ལུ་ཅིག་གཞི་བཙུགས་འབད་མ་ཚུགས། འ་ནི་གི་དོན་དག་དེ་ཁྱོད་ཀྱི་ མི་སྲིད་པའི་དུས་སྐབས་ཅིག་ཞུ་བ་"
+"འབད་འབདཝ་འོང་ནི་མས་ ཡང་ན་ད་ལྟོ་ཡང་གསར་བསྐྲུན་མ་འབད་བར་ཡོད་པའི་ཐུམ་སྒྲིལ་ལ་ལུ་ཅིག་ཡང་ན་ནང་"
+"འབྱོར་གྱི་ཕྱི་ཁར་རྩ་བསྐྲད་བཏང་ཡོད་པའི་རྩ་བརྟན་མེད་པའི་བགོ་འགྲེམ་ཚུ་ལག་ལེན་འཐབ་དོ་ཡོདཔ་འོང་ནི་ཨིན་པས།"
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "འོག་གི་བརྡ་དོན་དེ་གིས་དུས་སྐབས་འདི་མོས་མཐུན་བཟོ་ནི་ལུ་གྲོགས་རམ་འབད་འོང་:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "ཆད་པ་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ།"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"ཡིག་མཛོད་ལ་ལུ་ཅིག་ལེན་མི་ཚུགས་པས་ apt-get་དུས་མཐུན་བཟོ་ནི་གཡོག་བཀོལ་ནི་ཨིན་ན་ཡང་ན་--fix-"
+"missing་དང་གཅིག་ཁར་འབད་རྩོལ་བསྐྱེད་ནི་ཨིན་ན་?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+"ནང་འཁོད་ཀྱི་འཛོལ་བ་ གཞི་བཙུགས་ཐུམ་སྒྲིལ་ཚུ་ ཆད་པ་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ་དང་གཅིག་ཁར་བོད་བརྡ་འབད་འདི་"
+"ཡོད!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "ཐུམ་སྒྲིལ་ཚུ་རྩ་བསྐྲད་བཏང་དགོཔ་འདུག་འདི་འབདགཝ་ད་རྩ་བསྐྲད་གཏང་ནི་འདི་ལྕོགས་མིན་ཐལ་ཏེ་འདུག"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "དཀའ་ངལ་ཚུ་ཡོདཔ་ལས་-y ་འདི་ --force-yes་མེདཐོག་ལས་ལག་ལེན་འཐབ་སྟེ་ཡོད།"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "དཀའ་ངལ་ཚུ་ཡོདཔ་ལས་-y ་འདི་ --force-yes་མེདཐོག་ལས་ལག་ལེན་འཐབ་སྟེ་ཡོད།"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "ནང་འཁོད་འཛོལ་བ་ གོ་རིམ་བཟོ་ནི་ཚུ་མཇུག་མ་བསྡུ་བས།"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"ག་ཅི་གི་ཡ་མཚན་ཆེ་མི་ཆེ་ ཚད་འདི་གིས་ email apt@packages.debian.org་ལུ་མཐུན་སྒྲིག་མི་འབད་"
+"བས།"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "%sBལེན་ནི་ལུ་དགོཔ་པས། ཡིག་མཛོད་ཚི་གི་%sB་\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "ཡིག་མཛོད་ཀྱི་%sB་འདི་ལེན་དགོ་པས།\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "ཁ་སྐོང་གི་%sB་འདི་བཤུབ་པའི་ཤུལ་ལས་ཌིཀསི་གི་བར་སྟོང་དེ་ལག་ལེན་འཐབ་འོང་།\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "%sB་འདི་ཤུབ་པའི་ཤུལ་ལས་ཀྱི་བར་སྟོང་དེ་དལཝ་སྦེ་ལུས་འོང་།\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "གལ་ཆུང་རྐྱངམ་ཅིག་ཁསལ་བཀོད་འབད་ནུག་ འདི་འབདཝ་ད་འ་ནི་འདི་གལ་ཆུང་གི་བཀོལ་སྤྱོད་མེན།"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "ཨིན་ ང་གིས་སླབ་དོ་བཟུམ་སྦེ་རང་འབད!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"ཁྱོད་ཀྱི་གནོད་ངན་འབྱུང་ནིའི་ལཱ་ཅི་འབད་ནི་འབད་དོ།\n"
+"འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་'%s'ཚིག་ཚན་ནང་ལུ་ཡིག་དཔར་རྐྱབས།\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "བར་བཤོལ་འབད།"
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+#, fuzzy
+msgid "Do you want to continue?"
+msgstr "ཁྱོན་ཀྱི་འཕྲོ་མཐུད་ནི་འབད་ནི་ཨིན་ན་"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "ཡིག་སྣོད་ལ་ལུ་ཅིག་ཕབ་ལེན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "ཕབ་ལེན་ཐབས་ལམ་རྐྱངམ་གཅིག་ནང་མཇུག་བསྡུཝ་སྦེ་རང་ཕབ་ལེན་འབད།"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing་དང་བརྡ་ལམ་བརྗེ་སོར་འབད་ནི་འདི་ད་ལྟོ་ལས་རང་རྒྱབ་སྐྱོར་མི་འབད་བས།"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "བརླག་སྟོར་ཞུགས་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ་ནོར་བཅོས་འབད་མི་ཚུགས་པས།"
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "གཞི་བཙུགས་བར་བཤོལ་འབད་དོ།"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "ནང་འཁོད་འཛོལ་བ་ དཀའ་ངལ་མོས་མཐུན་འབད་མི་ཅ་ཆས་ཚུ་མེདཔ་ཐལ་ཡོད།"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "འོག་གི་ཐུམ་སྒྲིས་གསརཔ་འདི་ཚུ་ཁཞི་བཙུགས་འབད་འོང་:"
+msgstr[1] "འོག་གི་ཐུམ་སྒྲིས་གསརཔ་འདི་ཚུ་ཁཞི་བཙུགས་འབད་འོང་:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "འོག་གི་ཐུམ་སྒྲིས་གསརཔ་འདི་ཚུ་ཁཞི་བཙུགས་འབད་འོང་:"
+msgstr[1] "འོག་གི་ཐུམ་སྒྲིས་གསརཔ་འདི་ཚུ་ཁཞི་བཙུགས་འབད་འོང་:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "འོག་གི་ཐུམ་སྒྲིལ་ཐེབས་ཚུ་གཞི་བཙུགས་འབད་འོང་:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "བསམ་འཆར་བཀོད་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "འོས་སྦྱོར་འབད་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"%s་གོམ་འགྱོ་འབད་དོ་ འདི་ཧེ་མ་ལས་རང་གཞི་བཙུགས་འབད་འོདཔ་དང་དུས་ཡར་བསྐྱེད་འབད་ནི་འདི་གཞི་སྒྲིག་མ་"
+"འབད་བས།\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"%s་གོམ་འགྱོ་འབད་དོ་ འདི་ཧེ་མ་ལས་རང་གཞི་བཙུགས་འབད་འོདཔ་དང་དུས་ཡར་བསྐྱེད་འབད་ནི་འདི་གཞི་སྒྲིག་མ་"
+"འབད་བས།\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "%s ་ལོག་གཞི་བཙུགས་འབད་ནི་འདི་མི་སྲིད་པ་ཅིག་ཨིན་པས་ འདི་ཕབ་ལེན་འབད་མི་བཏུབ་པས།\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ་འདི་ཧེ་མ་ལས་རང་འཐོན་རིམ་གསར་ཤོས་ཅིག་ཨིན།\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "(%s)གི་དོན་ལུ་སེལ་འཐུ་འབད་ཡོད་པའི་འཐོན་རིམ་'%s'(%s)\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "(%s)གི་དོན་ལུ་སེལ་འཐུ་འབད་ཡོད་པའི་འཐོན་རིམ་'%s'(%s)\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [གཞི་བཙུགས་འབད་ཡོད།]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [གཞི་བཙུགས་འབད་ཡོད།]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [གཞི་བཙུགས་འབད་ཡོད།]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [གཞི་བཙུགས་འབད་ཡོད།]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "འདི་འབདཝ་ད་%s་འདི་གཞི་བཙུགས་འབད་ཡོད།"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "འདི་འབདཝ་ད་%s་འདི་གཟི་བཙུགས་འབད་མི་བཏུབ་པས།"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "འདི་འབདཝ་ད་ འདི་བར་ཅུ་ཡལ་ཐུམ་སྒྲིལ་ཅིག་ཨིན་པས།"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "འདི་འབདཝ་ད་འདི་གཞི་བཙུགས་མི་འབད་ནི་ཨིན་པས།"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "འདི་འབདཝ་ད་འདི་གཞི་བཙུགས་མ་འབད་བས།"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr "ཡང་ན།"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "འོག་གི་ཐུམ་སྒྲིལ་ཚུ་ལུ་རྟེན་འབྲེལ་མ་ཚང་པས:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "འོག་གི་ཐུམ་སྒྲིས་གསརཔ་འདི་ཚུ་ཁཞི་བཙུགས་འབད་འོང་:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "འོག་གི་ཐུམ་སྒྲིལ་འདི་ཚུ་རྩ བསྐྲད་གཏང་འོང་:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "འོག་གི་ཐུམ་སྒྲིལ་འདི་ཚུ་ལོག་སྟེ་རང་བཞག་ནུག:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "འོག་གི་ཐུམ་སྒྲིལ་འདི་ཚུ་ཡར་བསྐྱེད་འབད་འོང་:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "འོག་གི་ཐུམ་སྒྲལ་འདི་ཚུ་མར་ཕབ་འབད་འོང་:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "འོག་གི་འཆང་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ་བསྒྱུར་བཅོས་འབད་འོང་:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s( %s་གིས་སྦེ)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ཉེན་བརྡ:འོག་གི་ཉོ་མཁོ་བའི་ཐུམ་སྒྲིལ་ཚུ་རྩ་བསྐྲད་གཏང་འོང་།\n"
+"ཁྱོད་ཀྱིས་ཁྱོད་རང་ག་ཅི་འབདཝ་ཨིན་ན་ངེས་སྦེ་མ་ཤེས་ཚུན་འདི་འབད་ནི་མི་འོང་།!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu་ཡར་བསྐྱེད་འབད་ཡོད་ %lu་འདི་གསརཔ་སྦེ་གཞི་བཙུགས་འབད་ཡོད།"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu་འདི་ལོག་གཞི་བཙུགས་འབད་ཡོད།"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu་འདི་མར་ཕབ་འབད་ཡོད།"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "རྩ་བསྐྲད་འབད་ནི་ལུ་%lu་དང་%lu་ཡར་བསྐྱེད་མ་འབད་བས།\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu་འདི་ཆ་ཚང་སྦེ་གཞི་བཙུགས་མ་འབད་ཡང་ན་རྩ་བསྐྲད་མ་གཏང་པས།\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "ཝའི།"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "ཁྱོད་ཀྱིས་ཏག་ཏག་སྦེ་དཔེ་གཞི་གཅིག་བྱིན་དགོ"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "ཐུམ་སྒྲིལ་གྱི་ཡིག་སྣོད:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"འདྲ་མཛོད་འདི་མཉམ་བྱུང་གི་ཕྱི་ཁར་ཨིན་པས་ ཐུམ་སྒྲིལ་ཡིག་སྣོད་ཅིག་ལུ་ ཨེགསི་-རེཕ་འབད་མི་ཚུགས་པས།"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "ཁབ་གཟེར་བཏབ་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr "གཞི་བཙུགས་འབད་ཡོདཔ།"
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr "མི་ངོ:"
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ཅི་མེད།)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr "ཐོན་རིམ་ཐིག་ཁྲམ།:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "འབྱུང་ཁུངས་ཐུམ་སྒྲིལ་གྱི་ཐོ་ཡིག་%s་དེ་ངོ་བཤུས་འབད་མ་ཚུགས།"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "གི་དོན་ལུ་འབྱུང་ཁུངས་ལེན་ནི་ལུ་ཉུང་མཐའ་རང་ཐུམ་སྒྲིལ་གཅིག་ལེན་དགོ"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "%s་གི་དོན་ལུ་འབྱུང་ཁུངས་ཐུམ་སྒྲིལ་ཅིག་འཚོལ་མ་འཐོབ"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "གོམ་འགྱོ་གིས་ཧེ་མ་ལས་རང་'%s'་ཡིག་སྣོད་དེ་ཕབ་ལེན་འབད་ནུག\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "%sB་ལེན་དགོཔ་འདུག་ འབྱུང་ཁུངས་ཡིག་མཛོད་ཀྱི་%sB།\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "འབྱུང་ཁུངས་ཡིག་མཛོད་ཚུ་ཀྱི་%sB་ལེན་དགོ་པསས།\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "%s་འབྱུང་ཁུངས་ལེན།\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "ཡིག་མཛོད་ལ་ལུ་ཅིག་ལེན་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "%s་ནང་ཧེ་མ་ལས་སྦུང་ཚན་བཟོ་བཤོལ་ཨིན་མའི་སྦུང་ཚན་བཟོ་བཤོལ་གོམ་འགྱོ་འབད་དོ།\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "'%s'སྦུང་ཚན་བཟོ་བཤོལ་འཐུས་ཤོར་བྱུང་ཡོད།\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "'dpkg-dev'་ཐུམ་སྒྲིལ་དེ་གཞི་བཙུགས་འབད་ཡོད་པ་ཅིན་ཨེབ་གཏང་འབད།\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "'%s'་བཟོ་བརྩིགས་བརྡ་བཀོད་འཐུས་ཤོར་བྱུང་ཡོད།\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "%s་གི་དོན་ལུ་བཟོ་བརྩིགས་-རྟེན་འབྲེལ་བརྡ་དོན་དེ་ལེན་མ་ཚུགས།"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s ལུ་བཟོ་བརྩིགས་རྟེན་འབྲེལ་མིན་འདུག\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "builddeps ཞིབ་དཔྱད་འབད་ནིའི་དོན་ལུ་ཉུང་མཐའ་རང་ཐུམ་སྒྲིལ་གཅིག་གསལ་བཀོད་འབད་དགོ"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "བཟོ་བརྩིགས་རྟེན་འབྲེལ་འདི་ལས་སྦྱོར་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ་ཨིན།"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "བཟོ་བརྩིགས་རྟེན་འབྲེལ་འདི་ལས་སྦྱོར་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ་ཨིན།"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "%s་ལུ་%s་བསྐྱར་མིང་བཏགས་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "ཐུམ་སྒྲིལ་ %s ཐོན་རིམ་ %s ལུ་ ཌེཔ་མ་ཚང་ཅིག་འདུག:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "དུས་མཐུན་བཟོ་བའི་བརྡ་བཀོད་འདི་གིས་སྒྲུབ་རྟགས་ཚུ་མི་འབག་འབད།"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "དུས་མཐུན་བཟོ་བའི་བརྡ་བཀོད་འདི་གིས་སྒྲུབ་རྟགས་ཚུ་མི་འབག་འབད།"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "ཐུམ་སྒྲིལ་བསྡོམས་ཀྱི་མིང་ཚུ:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "ཐུམ་སྒྲིལ་བསྡོམས་ཀྱི་མིང་ཚུ:"
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr "སྤྱིར་བཏང་ཐུམ་སྒྲིལ་ཚུ།"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr "བར་ཅུ་ཡལ་ཐུམ་སྒྲིལ་གཙང་མ་ཚུ:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr "བར་ཅུ་ཡལ་ཐུམ་སྒྲིལ་རྐྱང་པ་ཚུ:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr "བར་ཅུ་ཡལ་ཐུམ་སྒྲིལ་སླ་བསྲེ་ཡོད་མི་ཚུ:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr "བརླག་སྟོར་ཞུགས་པ:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "ཁྱད་རྟགས་ཅན་གྱི་ཐོན་རིམ་ཚུ་གི་བསྡོམས:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "ཁྱད་རྟགས་ཅན་གྱི་ཐོན་རིམ་ཚུ་གི་བསྡོམས:"
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "རྟེན་འབྲེལ་བསྡོམས:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "ཐེན་རིམ་/ཡིག་སྣོད་ མཐུན་འབྲེལ་གྱི་བསྡོམས:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "ཐེན་རིམ་/ཡིག་སྣོད་ མཐུན་འབྲེལ་གྱི་བསྡོམས:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "ཡོངས་བསྡོམས་ཀྱིས་ས་ཁྲ་བཟོ་བ་ཚུ་བྱིནམ་ཨིན:"
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "སྤུངས་ཡོད་པའི་ཡིག་རྒྱུན་གྱི་བསྡོམས:"
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "བར་སྟོང་ལྷུག་ལྷུག་གི་བསྡོམས:"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "གི་དོན་ལུ་རྩིས་ཐོ་བཏོན་ཡོད་པའི་བར་སྟོང:"
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "འདི་གིས་འབྱུང་ཁུངས་ཀྱི་དྲན་ཐོ་ཚུ་སྟོནམ་ཨིན།"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "འདི་གིས་ རི་ཇེགསི་དཔེ་གཞི་ཅིག་གི་དོན་ལུ་ ཐུམ་སྒྲིལ་ཐོ་ཡིག་དེ་འཚོལ་ཞིབ་འབདཝ་ཨིན།"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "འདི་གིས་ཐུམ་སྒྲིལ་གི་དོན་ལུ་ རགས་པ་རྟེན་འབྲེལ་གྱི་བརྡ་དོན་ཅིག་ སྟོནམ་ཨིན།"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "འདི་གིས་ ཐུམ་སྒྲིལ་ཅིག་གི་དོན་ལུ་ རིམ་ལོག་རྟེན་འབྲེལ་གྱི་བརྡ་དོན་དེ་སྟོནམ་ཨིན།"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "འདི་གིས་ཐུམ་སྒྲིལ་གི་དོན་ལུ་ ལྷག་བཏུབ་པའི་དྲན་ཐོ་ཅིག་སྟོནམ་ཨིན།"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "འདི་གིས་ཐུམ་སྒྲིལ་ཚུ་ཆ་མཉམ་གི་མིང་ཚུ་ཐོ་བཀོད་འབདཝ་ཨིན།"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "འདི་གིས་ སྲིད་བྱུས་སྒྲིག་སྟངས་ཚུ་སྟོནམ་ཨིན།"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "ཌིསིཀ་འདི་གི་དོན་ལུ་མིང་ཅིག་བླིན་གནང་ དཔེར་ན་ 'Debian 2.1r1 Disk 1'བཟུམ།"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "ཌིསིཀ་ཅིག་འདྲེན་འཕྲུལ་ནང་བཙུགས་བཞིནམ་ལས་ལོག་ལྡེ་འདི་ཨེབ།"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "%s་ལུ་%s་བསྐྱར་མིང་བཏགས་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "ཁྱོད་ཀྱི་ཆ་ཚན་ནང་གི་སི་ཌི་ལྷག་ལུས་ཡོད་མི་གི་དོན་ལུ་འ་ནི་ལས་སྦྱོར་དེ་ཡང་བསྐྱར་འབད།"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "སྒྲུབས་རྟགས་ཚུ་ཟུང་ནང་མིན་འདུག"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"ལག་ལེན:apt-config [གདམ་ཁ་ཚུ་] བརྡ་བཀོད།\n"
+"\n"
+"apt-config་འདི་APT config་ཡིག་སྣོད་ལྷག་ནིའི་དོན་ལུ་འཇམ་སམ་ལག་ཆས་ཅིག་ཨིན།\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"ལག་ལེན་: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates འདི་ཌེ་བི་ཡཱན་ ཐུམ་སྒྲིལ་ཚུ་ནང་ལས་\n"
+"རིམ་སྒྲིག་དང་ ཊེམ་པེལེཊི་ བརྡ་དོན་ཕྱིར་དོན་འབད་ནིའི་ལག་ཆས་ཅིགཨིན།\n"
+"གདམ་ཁ་ཚུ།\n"
+" -h འདི་གིས་ཚིག་ཡིག་འདི་གྲོགས་རམ་འབདཝ་ཨིན།\n"
+" -t འདི་གིས་temp་སྣོད་ཐོ་འདི་གཞི་སྒྲིག་འབདཝ་ཨིན།\n"
+" -c=? འདི་གིས་ རིམ་སྒྲིག་ཡིག་སྣོད་འདི་ལྷགཔ་ཨིན།\n"
+" -o=? འདི་གིས་མཐུན་སྒྲིག་རིམ་སྒྲིག་གདམ་ཁ་ཅིག་གཞི་སྒྲིག་འབདཝ་ཨིན་ དཔེར་ན་-o dir::cache=/tmp་"
+"བཟུམ།\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "debconf ་་འཐོན་རིམ་འདི་ལེན་མ་ཚུགས། debconf འདི་གཞི་བཙུགས་འབད་ཡི་ག་?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "%s་ཐུམ་སྒྲིལ་འཚོལ་མ་ཐོབ།"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "ནང་འཁོད་འཛོལ་བ་ དཀའ་ངལ་མོས་མཐུན་འབད་མི་ཅ་ཆས་ཚུ་མེདཔ་ཐལ་ཡོད།"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "རྒྱབ་སྐྱོར་འབད་ཡོད་པའི་ཚད་གཞི་ཚུ:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"ལག་ལེན་:apt-get [options] command\n"
+"apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get འདི་ཐུམ་སྒྲིལ་ཚུ་ཕབ་ལེན་འབད་ནི་དང་\n"
+"གཞི་བཙུགས་འབད་ནིའི་དོན་ལུ་ འཇམ་སམ་བརྡ་བཀོད་གྲལ་ཐིག་གི་ངོས་འདྲ་བ་ཅིག་ཨིན། མང་ཤོས་རང་་སྦེ་རང་"
+"ལག་ལེན་འཐབ་ཡོད་པའི་བརྡ་བཀོད་ཚུ་\n"
+" དུས་མཐུན་དང་གཞི་བཙུགས་འབད་ནི་དེ་ཨིན།\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "འདི་གིས་ཐུམ་སྒྲིལ་ཚུ་གི་ཐོ་ཡིག་གསརཔ་ཚུ་སླར་འདྲེན་འབདཝ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "འདི་གིས་ ཡར་བསྐྱེད་ཀྱི་ལཱ་འགན་ཅིག་འགྲུབ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "འདི་གིས་ ཐུམ་སྒྲིལ་(pkg is libc6 not libc6.deb)གསརཔ་་ཚུ་གཞི་བཙུགས་འབདཝ་ཨིན།"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "འདི་གིས་ ཐུམ་སྒྲིལ་(pkg is libc6 not libc6.deb)གསརཔ་་ཚུ་གཞི་བཙུགས་འབདཝ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "འདི་གིས་ ཐུམ་སྒྲིལ་ཚུ་རྩ་བསྐྲད་གཏངམ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "འདི་གིས་ བགོ་བཀྲམ་འདི་ཡར་བསྐྱེད་འབདཝ་ཨིན། apt-get(8)ལུ་བལྟ།"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "འདི་གིས་ སེལ་འཐུ་བཤོལ་གྱི་ སེལ་འཐུ་ཚུ་འབདཝ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "འདི་གིས་འབྱུང་ཁུངས་ཐུམ་སྒྲིལ་ཚུ་གི་དོན་ལུ་བཟོ་བརྩིགས་-རྟེན་འབྲེལ་ཚུ་རིམ་སྒྲིག་འབདཝ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "འདི་གིས་ ཕབ་ལེན་འབད་ཡོད་པའི་ཡིག་མཛོད་ཀྱི་ཡིག་སྣོད་ཚུ་ཀྲེག་གཏངམ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "འདི་གིས་ ཕབ་ལེན་འབད་འབདཝ་རྙིངམ་གྱི་ཡིག་མཛོད་ཡིག་སྣོད་ཚུ་ཀྲེག་གཏངམ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "ཆད་པ་འགྱོ་འགྱོ་བའི་རྟེན་འབྲེལ་ཚུ་མེདཔ་སྦེ་བདེན་སྦྱོར་འབདཝ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "འདི་གིས་འབྱུང་ཁུངས་ཀྱི་ཡིག་མཛོད་ཚུ་ཕབ་ལེན་འབདཝ་ཨིན།"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "གི་དོན་ལུ་འབྱུང་ཁུངས་ལེན་ནི་ལུ་ཉུང་མཐའ་རང་ཐུམ་སྒྲིལ་གཅིག་ལེན་དགོ"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"ལག་ལེན་: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates འདི་ཌེ་བི་ཡཱན་ ཐུམ་སྒྲིལ་ཚུ་ནང་ལས་\n"
+"རིམ་སྒྲིག་དང་ ཊེམ་པེལེཊི་ བརྡ་དོན་ཕྱིར་དོན་འབད་ནིའི་ལག་ཆས་ཅིགཨིན།\n"
+"གདམ་ཁ་ཚུ།\n"
+" -h འདི་གིས་ཚིག་ཡིག་འདི་གྲོགས་རམ་འབདཝ་ཨིན།\n"
+" -t འདི་གིས་temp་སྣོད་ཐོ་འདི་གཞི་སྒྲིག་འབདཝ་ཨིན།\n"
+" -c=? འདི་གིས་ རིམ་སྒྲིག་ཡིག་སྣོད་འདི་ལྷགཔ་ཨིན།\n"
+" -o=? འདི་གིས་མཐུན་སྒྲིག་རིམ་སྒྲིག་གདམ་ཁ་ཅིག་གཞི་སྒྲིག་འབདཝ་ཨིན་ དཔེར་ན་-o dir::cache=/tmp་"
+"བཟུམ།\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"ལག་ལེན་: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates འདི་ཌེ་བི་ཡཱན་ ཐུམ་སྒྲིལ་ཚུ་ནང་ལས་\n"
+"རིམ་སྒྲིག་དང་ ཊེམ་པེལེཊི་ བརྡ་དོན་ཕྱིར་དོན་འབད་ནིའི་ལག་ཆས་ཅིགཨིན།\n"
+"གདམ་ཁ་ཚུ།\n"
+" -h འདི་གིས་ཚིག་ཡིག་འདི་གྲོགས་རམ་འབདཝ་ཨིན།\n"
+" -t འདི་གིས་temp་སྣོད་ཐོ་འདི་གཞི་སྒྲིག་འབདཝ་ཨིན།\n"
+" -c=? འདི་གིས་ རིམ་སྒྲིག་ཡིག་སྣོད་འདི་ལྷགཔ་ཨིན།\n"
+" -o=? འདི་གིས་མཐུན་སྒྲིག་རིམ་སྒྲིག་གདམ་ཁ་ཅིག་གཞི་སྒྲིག་འབདཝ་ཨིན་ དཔེར་ན་-o dir::cache=/tmp་"
+"བཟུམ།\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "འདི་འབདཝ་ད་འདི་གཞི་བཙུགས་མ་འབད་བས།"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "འོག་གི་ཐུམ་སྒྲིས་གསརཔ་འདི་ཚུ་ཁཞི་བཙུགས་འབད་འོང་:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ་འདི་ཧེ་མ་ལས་རང་འཐོན་རིམ་གསར་ཤོས་ཅིག་ཨིན།\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ་འདི་ཧེ་མ་ལས་རང་འཐོན་རིམ་གསར་ཤོས་ཅིག་ཨིན།\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "%s་ག་ཕྱེ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "'dpkg-dev'་ཐུམ་སྒྲིལ་དེ་གཞི་བཙུགས་འབད་ཡོད་པ་ཅིན་ཨེབ་གཏང་འབད།\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "མ་ཤེས་པའི་ཐུམ་སྒྲིལ་གི་དྲན་ཐོ།"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "ཐུམ་སྒྲིལ་ཐོ་ཡིག་ཚུ་ལྷག་དོ།"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "ཁབ་གཟེར་བཏབ་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "ཁབ་གཟེར་བཏབ་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "ཆད་པ་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ།"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "འདི་འབདཝ་ད་%sའདི་གཞི་བཙུགས་འབད་ནི་ཨིན།"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "འཐོབ་ཚུགས་པའི་བརྡ་དོན་མཉམ་བསྡོམས་འབད་དོ།"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "སྔོན་སྒྲིག་བྱང་ཉེས་གཞི་སྒྲིག་འབད་དོ་!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "འཕྲོ་མཐུད་འབད་ནིའི་དོན་ལུ་ལོག་ལྡེ་འདི་ཨེབ།"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "སྦུང་ཚན་བཟོ་བཤོལ་འབད་བའི་བར་ན་ འཛོལ་བ་དག་པ་ཅིག་བྱུང་ནུག་ ང་གི་"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "གཞི་བཙུགས་འབད་ཡོད་པའི་ཐུམ་སྒྲིལ་ཚུ་རིམ་སྒྲིག་འབད་ནི་ཨིན།་འ་ནི་འདི་གིས་ ངོ་བཤུས་རྫུན་མ་"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"ཡང་ན་བརླག་སྟོར་ཞུགས་ཡོད་པའི་རྟེན་འབྲེལ་གི་རྒྱུ་རྐྱེན་ལས་བརྟེན་པའི་འཛོལ་བ་ཚུ་ནང་ལུ་གྲུབ་འབྲས་འཐོན་འོང་། "
+"འདི་དེ་བཏུབ་པས་"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"འ་ནི་འཕྲིན་དོན་གྱི་ལྟག་ལས་ཡོད་པའི་འཛོལ་བ་དེ་ཚུ་གལ་ཅན་ཅིག་ཨིན། འདི་ཚུ་གི་དཀའ་ངལ་སེལ་བཞིནམ་ལས་ "
+"[I] གཞི་བཙུགས་དེ་ལོག་སྟེ་རང་གཡོག་བཀོལ།"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "འཐོབ་ཚུགས་པའི་བརྡ་དོན་མཉམ་བསྡོམས་འབད་དོ།"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "ཐུམ་སྒྲིལ་རྒྱ་བསྐྱེད་ཐོག་ཡིག་འདི་གནམ་མེད་ས་མེད་རིངམ་འདུག"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "སྣོད་ཐོ་%s་ལས་སྦྱོར་འབདཝ་ད་འཛོལ་བ་འཐོན་ཡི།"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "འབྱུང་ཁུངས་རྒྱ་བསྐྱེད་ཀྱི་ཐོག་ཡིག་འདི་གནམ་མེད་ས་མེད་རིང་པས།"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "ནང་དོན་ཡིག་སྣོད་ལུ་མགོ་ཡིག་འཛོལ་བ་འབྲི་ནིའི་མགོ་ཡིག"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "%sའཛོལ་བ་ལས་སྦྱོར་འབད་ནིའི་ནང་དོན།"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"ལག་ལེན:apt-ftparchive [options] command\n"
+"བརྡ་བཀོད་ཚུ:packages binarypath [overridefile [pathprefix]]\n"
+"sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive་འདི་གིས་ ཌི་བི་ཡཱན་ཡིག་མཛོད་ཚུ་གི་དོན་ལུ་ ཚིག་ཡིག་གི་ཡིག་སྣོད་ཚུ་བཟོ་བཏོན་འབདཝ་"
+"ཨིན། dpkg-scanpackages དང་ dpkg-scansources་གི་དོན་ལུ་ལས་འགན་ཚབ་མ་ཚུ་ལུ་ཆ་ཚང་སྦེ་ "
+"རང་བཞིན་གྱི་སྦེ་བཟོ་བཟོཝ་་ནང་ལས་བཟོ་བཏོན་གྱི་བཟོ་རྣམ་ཚུ་ལྷམ་པ་མ་འདྲཝ་སྦེ་ཡོད་མི་ལུ་རྒྱབ་སྐྱོར་འབདཝ་"
+"ཨིན།\n"
+"\n"
+"apt-ftparchive་ འདི་གིས་.debs་གི་རྩ་འབྲེལ་ཅིག་ནང་ལས་ཐུམ་སྒྲིལ་གྱི་ཡིག་སྣོད་ཚུ་བཟོ་བཏོན་འབདཝ་ཨིན། "
+"ཐུམ་སྒྲིལ་\n"
+" ཡིག་སྣོད་འདི་གི་ནང་ན་ ཐུམ་སྒྲིལ་རེ་རེ་བཞིན་ནང་གི་ཚད་འཛིན་ས་སྒོ་ཚུ་ཆ་མཉམ་གི་ནང་དོན་དང་ ཨེམ་ཌི་༥་དྲྭ་"
+"རྟགས། (#)་དང་ཡིག་སྣོད་ཀྱི་ཚད་ཚུ་ཡང་ཡོདཔ་ཨིན། ཟུར་བཞག་ཡིག་སྣོད་འདི་\n"
+"གཙོ་རིམ་དང་དབྱེ་ཚན་གྱི་གནས་གོང་དེ་བང་བཙོང་འབད་ནི་ལུ་རྒྱབ་སྐྱོར་འབད་ཡོདཔ་ཨིན།\n"
+"\n"
+"འདི་དང་ཆ་འདྲཝ་སྦེ་ apt-ftparchive་ འདི་གིས་.dscs་གི་རྩ་འབྲེལ་ཅིག་ནང་ལས་འབྱུང་ཁུངས་ཡིག་སྣོད་ཚུ་"
+"བཟོ་བཏོན་འབདཝ་ཨིན།\n"
+" --source-ཟུར་བཞག་གི་གདམ་ཁ་འདི་ ཨེསི་ཨར་སི་ ཟུར་བཞག་ཡིག་སྣོད་ཅིག་གསལ་བཀོད་འབད་ནི་ལུ་ལག་ལེན་"
+"འཐབ་བཐུབ་ཨིན།\n"
+"\n"
+"'ཐུམ་སྒྲིལ་ཚུ་'་དང་'འབྱུང་ཁུངས་་' བརྡ་བཀོད་ཚུ་རྩ་འབྲེལ་འདི་གི་་རྩ་བ་ནང་ལུ་སྦེ་གཡོག་བཀོལ་དགོཔ་ཨིན། ཟུང་"
+"ལྡན་འགྲུལ་ལམ་འདི་གིས་ལོག་རིམ་འཚོལ་ཞིབ་འདི་གི་གཞི་རྟེན་ལུ་དཔག་དགོཔ་ཨིནམ་དང་\n"
+"ཟུར་བཞག་ཡིག་སྣོད་འདི་ལུ་ཟུར་བཞག་གི་ཟུར་རྟགས་འོང་དགོཔ་ཨིན། འགྲུལ་ལམ་སྔོན་ཚིག་འདི་\n"
+"ཡོད་པ་ཅིན་ཡིག་སྣོད་མིང་གི་ས་སྒོ་ཚུ་ལུ་འཇུག་སྣོན་འབད་དེ་ཡོདཔ་ཨིན། དཔེར་ན་ ཌི་བི་ཡཱན་ཡིག་མཛོད་ལས་ལག་"
+"ལེན་བཟུམ:\n"
+"apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"གདམ་ཁ་ཚུ:\n"
+" -h འདི་གིས་ཚིག་ཡིག་ལུ་གྲོགས་རམ་འབདཝ་ཨིན།\n"
+" --md5 ཨེམ་ཌི་༥་ བཟོ་བཏོན་འདི་ཚད་འཛིན་འབདཝ་ཨིན།\n"
+" -s=? འབྱུང་ཁུངས་ཟུར་བཞག་གི་ཡིག་སྣོད།\n"
+" -q ཁུ་སིམ་སིམ།\n"
+" -d=? གདམ་ཁ་ཅན་གྱི་འདྲ་མཛོད་གནད་སྡུད་གཞི་རྟེན་འདི་སེལ་འཐུ་འབད།\n"
+" --no-delink འབྲེལ་ལམ་མེད་སྦེ་བཟོ་་ནིའི་རྐྱེན་སེལ་ཐབས་ལམ་འདི་ལྕོགས་ཅན་བཟོ།\n"
+" --contents ནང་དོན་གི་ཡིག་སྣོད་བཟོ་བཏོན་འདི་ཚད་འཛིན་འབད།\n"
+" -c=? འ་ནི་རིམ་སྒྲིག་ཡིག་སྣོད་འདི་ལྷག\n"
+" -o=? མཐུན་སྒྲིག་རིམ་སྒྲིག་གི་གདམ་ཁ་ཅིག་གཞི་སྒྲིག་འབད།"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "སེལ་འཐུ་ཚུ་མཐུན་སྒྲིག་མིན་འདུག"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "ཡིག་སྣོད་ལ་ལུ་ཅིག་ཐུམ་སྒྲིལ་ཡིག་སྣོད་སྡེ་ཚན་`%s'ནང་བརླག་སྟོར་ཞུགས་ནུག"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "ཌི་བི་ངན་ཅན་བྱུང་ནུག་ %s.རྒསཔ་ལུ་ཡིག་སྣོད་འདི་བསྐྱར་མིང་བཏགས་ཡི།"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "ཌི་བི་འདི་རྙིངམ་ཨིན་པས་ %s་ཡར་བསྐྱེད་འབད་ནིའི་དོན་ལུ་དཔའ་བཅམ་དོ།"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"ཌི་བི་རྩ་སྒྲིག་འདི་ ནུས་མེད་ཨིན་པས། ཁྱོད་ཀྱི་ apt་ གྱི་འཐོན་རིམ་རྙིངམ་ཅིག་ནང་ལས་ ཡར་བསྐྱེད་འབད་ཡོད་"
+"པ་ཅིན་ རྩ་བསྐྲད་གཏང་ཞིནམ་ལས་ གནད་སྡུད་གཞི་རྟེན་འདི་ ལོག་དེ་གསར་བསྐྲུན་འབད། "
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "%s: %s་ཌི་བི་ཡིག་སྣོད་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "%s་འབྲེལ་ལམ་ལྷག་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "ཡིག་མཛོད་འདི་ལུ་ཚད་འཛིན་དྲན་ཐོ་མིན་འདུག"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "འོད་རྟགས་ལེན་མ་ཚུགས།"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "དྲན་ཚད་སྤྲོད་ནིའི་དོན་ལུ་ རི་ཨེ་ལོཀ་ འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr " མ་ཤེས་ཨེབ་བཙུགས་ཨཱལ་གོ་རི་དམ'%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "ཨེབ་བཙུགས་འབད་ཡོད་པའི་ཨའུཊི་པུཊི་%sལུ་ཨེབ་བཙུགས་ཆ་ཚན་ཅིག་དགོཔ་འདུག"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "ཡན་ལག་ལས་སྦྱོར་ལུ་ཨའི་པི་སི་རྒྱུད་དུང་གསར་བསྐྲུན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "ཁ་སྤེལ་འབད་ནི་ལུ་འཐུ་ཤོར་བྱུང་ཡོད།"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "ཆ་ལག་ཨེབ་བཙུགས་འབད།"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "ནང་འཁོད་འཛོལ་བ་ %s་གསར་བསྐྲུན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "ཡན་ལག་ལས་སྦྱོར་ལུ་IO/ཡིག་སྣོད་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "ཨེམ་ཌི་༥་གློག་རིག་རྐྱབ་པའི་སྐབས་ལྷག་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%s གྲལ་ཐིག་%lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "ཟུར་བཞག་ཡིག་སྣོད་%sའདི་ལྷག་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%s གྲལ་ཐིག་%lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%sགྲལ་ཐིག%lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%sགྲལ་ཐིག%lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "ཌབ་ལུ:%sསྣོད་ཐོ་འདི་ལྷག་མ་ཚུགས།\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "ཌབ་ལུ་ %s སིཊེཊི་འབད་མ་ཚུགས།\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "ཨི:"
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "ཌབ་ལུ:"
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "ཨི:འཛོལ་བ་ཚུ་ཡིག་སྣོད་ལུ་འཇུག་སྤྱོད་འབད།"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s་མོས་མཐུན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "རྩ་འབྲེལ་ཕྱིར་བགྲོད་འབད་ནི་ལུ་འཐུ་ཤོར་བྱུང་ཡོདཔ།"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s་ག་ཕྱེ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** %s་ལས་%sལུ་འབྲེལ་འཐུད་འབད་ནི་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr "%sB་ཧེང་བཀལ་བཀྲམ་ནིའི་འབྲེལ་མེད་བཅད་མཚམས།\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "ཡིག་མཛོད་ལུ་ཐུམ་སྒྲིལ་ཅི་ཡང་འཐུས་ཤོར་མ་བྱུང་།"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %sལུ་ཟུར་བཞག་ཐོ་བཀོད་མེད།\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s ་རྒྱུན་སྐྱོང་པ་འདི་ %s ཨིན་ %s མེན།\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s ལུ་འབྱུང་ཁུངས་མེདཔ་གཏང་ནིའི་ཐོ་བཀོད་འདི་མེད།\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %sལུ་ཟུང་ལྡན་མེདཔ་གཏང་ནིའི་་ཐོ་བཀོད་གང་རུང་ཡང་མིན་འདུག།\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "མགོ་ཡིག་ཚུ་གི་དོན་ལུ་བསྒ྄ག་དོ།"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "ཨེཆི་ཊི་ཊི་པི་ སར་བར་འདི་གིས་ནུས་མེད་ལན་གསལ་གི་མགོ་ཡིག་ཅིག་བཏང་ཡོད།"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "མགོ་ཡིག་གི་གྲལ་ཐིག་བྱང་ཉེས།"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "ཨེཆི་ཊི་ཊི་པི་སར་བར་འདི་གིས་ནུས་མེད་ནང་དོན་རིང་-ཚད་ཀྱི་མགོ་ཡིག་ཅིག་བཏང་ཡོད།"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "ཨེཆི་ཊི་ཊི་པི་ སར་བར་འདི་གིས་ ནུས་མེད་ ནང་དོན་-ཁྱབ་ཚད་ཀྱི་མགོ་ཡིག་ཅིག་བཏང་ཡོད།"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "འ་ནི་ ཨེཆི་ཊི་ཊི་པི་ སར་བར་འདི་གིས་ ཁྱབ་ཚད་ཀྱི་རྒྱབ་སྐྱོར་དེ་ཆད་པ་བཟོ་བཏང་ནུག"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "མ་ཤེས་པའི་ཚེས་རྩ་སྒྲིག"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "མགོ་ཡིག་གནད་སྡུད་བྱང་ཉེས།"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "བཐུད་ལམ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "ནང་འཁོད་འཛོལ་བ།"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "སི་ཌི་རོམ་གནད་སྡུད་གཞི་རྟེན་%s་འདི་ལྷག་མ་ཚུགས།"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"འ་ནི་སི་ཌི་-རོམ་འདི་ཨེ་པི་ཊི་་གིས་ ངོས་འཛིན་འབད་ཚུགསཔ་སྦེ་བཟོ་ནིའི་་དོན་ལུ་ ཨེ་པི་ཊི་-སི་ཌི་རོམ་ལག་ལེན་"
+"འཐབ་གནང། apt-get་དུས་མཐུན་བཟོ་ནི་དེ་ སི་ཌི་-རོམས་གསརཔ་ཁ་སྐོང་རྐྱབ་ནི་ལུ་ལག་ལེན་འཐབ་མི་བཏུབ།"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "སི་དི་-རོམ་ཕྱི་འགྱུར།"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"%s་ནང་་སི་ཌི་-རོམ་འདི་བརྩེགས་བཤོལ་འབད་མ་ཚུགས་ འདི་ད་ལྟོ་ཡང་ལག་ལེན་འཐབ་སྟེ་ཡོདཔ་འོང་ནི་མས།"
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "ཌིཀསི་དེ་འཚོལ་མ་ཐོབ།"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "ཡིག་སྣོད་འཚོལ་མ་ཐོབ།"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "%s (%s)་ལུ་མཐུད་དོ།"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "%s (%s)་ལུ་མཐུད་དོ།"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "%s (f=%u t=%u p=%u)གི་དོན་ལུ་སོ་ཀེཊི་ཅིག་གསར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "%s:%s (%s)ལུ་མཐུད་ལམ་དེ་འགོ་འབྱེད་འབད་མ་ཚུགས།"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr " %s:%s (%s)ལུ་མཐུད་མ་ཚུགས།"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr " %s:%s (%s)ལུ་མཐུད་མ་ཚུགས་ མཐུད་ལམ་ངལ་མཚམས།"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "%s་ལུ་མཐུད་དོ།"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "'%s'མོས་མཐུན་འབད་མ་ཚུགས།"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "'%s'མོས་མཐུན་འབད་ནི་ལུ་གནས་སྐབས་ཀྱི་འཐུས་ཤོར།"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "'%s:%s' (%i)་མོས་མཐུན་འབདཝ་ད་ངན་པ་ཅིག་བྱུང་ཡི།"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "'%s:%s' (%i)་མོས་མཐུན་འབདཝ་ད་ངན་པ་ཅིག་བྱུང་ཡི།"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "%s %s:ལུ་མཐུད་མ་ཚུགས།"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "ངོ་བཤུས་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "ཡུ་ཨར་ཨེལ་ ནུས་མེད་ ཉེ་གནས་ ཡུ་ཨར་ཨེལ་ཨེསི་འདི་གིས་//་དང་གཅིག་ཁར་འགོ་བཙུགས་ནི་མི་འོང་།"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "ནང་བསྐྱོད་འབད་དོ།"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "དོ་བཉམ་གི་མིང་འདི་གཏན་འབེབས་བཟོ་མ་ཚུགས།"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "ཉེ་གནས་མིང་འདི་གཏན་འབེེབས་བཟོ་མ་ཚུགས།"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "སར་བར་འདི་གིས་ མཐུད་ལམ་འདི་ངོས་ལེན་འབད་མ་བཏུབ་པར་སླབ་མས: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "ལག་ལེན་པ་འཐུས་ཤོར་བྱུང་ཡོད་ སར་བར་གྱིས་སླབ་མས་: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "རྩི་སྤྲོད་འཐུས་ཤོར་བྱུང་ཡོད་ སར་བར་གྱིས་སླབ་མས་: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"པོརོ་སི་སར་བར་ཅིག་གསལ་བཀོད་འབད་ཡོད་འདི་འབདཝ་ད་ ནང་བསྐྱོད་ཡིག་ཚུགས་མིན་འདུག་ Acquire::ftp::"
+"ProxyLoginའདི་སྟོངམ་ཨིན་པས།"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "ནང་བསྐྱོད་ཡིག་ཚུགས་ བརྡ་བཀོད་'%s'་འདི་འཐོས་ཤོར་བྱུང་ཡོད་ སར་བར་གྱིས་སླབ་མས:%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "ཡིག་དཔར་རྐྱབ་མ་བཏུབ་སར་བར་གྱིས་སླབ་མས། %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "མཐུད་ལམ་ངལ་མཚམས"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "སར་བར་གྱིས་མཐུད་ལམ་འདི་ཁ་བསྡམས་ཏེ་ཡོདཔ་ཨིན།"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "ལན་གྱིས་ གནད་ཁོངས་གུར་ལས་ ལུད་སོང་སྟེ་ཡོདཔ་ཨིན།"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "གནད་སྤེལ་ལམ་ལུགས་ ངན་ཅན།"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "སོ་ཀེཊི་ཅིག་གསར་བསྐྲུན་འབད་མ་ཚུགས་པར་ཡོདཔ་ཨིན།"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "གནད་སྡུད་སོ་ཀེཊི་མཐུད་མ་ཚུགས་པར་ཡོདཔ་ཨིན་ མཐུད་ལམ་ངལ་མཚམས།"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "བྱ་ཡུལ་གྱི་སོ་ཀེཊི་མཐུད་མ་ཚུགས།"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo་འདི་གིས་ཉན་ནིའི་སོ་ཀེཊི་ཅིག་ལེན་མ་ཚུགས།"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "སོ་ཀེཊི་ཅིག་བསྡམས་མ་ཚུགས།"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "སོ་ཀེཊི་གུར་ཉེན་མ་ཚུགས།"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "སོ་ཀེཊི་གི་མིང་འདི་གཏན་འབེབས་བཟོ་མ་ཚུགས།"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "འདྲེན་ལམ་གྱི་བརྡ་བཀོད་འདི་བཏང་མ་ཚུགས།"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "མ་ཤེས་པའི་ཁ་བྱང་གི་རིགས་ཚན་%u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "ཨི་པི་ཨར་ཊི་ འཐུས་ཤོར་བྱུང་ཡོད་ སར་བར་གིས་སླབ་མས:%s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "གནད་སྡུད་སོ་ཀེཊི་ མཐུད་ནི་ངལ་མཚམས་བྱུང་ནུག"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "མཐུད་ལམ་འདི་དང་ལེན་འབད་མ་ཚུགས།"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "ཡིག་སྣོད་ལུ་་དྲྭ་རྟགས་བཀལ་བའི་བསྒང་དཀའ་ངལ།"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "ཡིག་སྣོད་ལེན་མ་ཚུགས་ སར་བར་'%s'གིས་སླབ་མས"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "གནད་སྡུད་སོ་ཀེཊི་ངལ་མཚམས།"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "གནད་སྡུད་གནས་སོར་དེ་འཐུས་ཤོར་བྱུང་ཡོད་ སར་བར་'%s'་གིས་སླབ་མས།"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "འདྲི་དཔྱད།"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "ལས་བཀོལ་འབད་མ་ཚུགས།"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "ཉུང་མཐའ་རང་ནུས་མེད་ཀྱི་མིང་རྟགས་ཅིག་གདོང་ཐུག་བྱུང་སྟེ་ཡོདཔ་ཨིན།"
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"ནང་འཁོད་འཛོལ་བ: མིང་རྟགས་འདི་ལེགས་ཤོམ་ཅིག་འདུག་ འདི་འབདཝ་ད་མཛུབ་རྗེས་ལྡེ་མིག་དེ་གཏན་འབེབས་བཟོ་"
+"མ་ཚུགས?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"མིང་རྟགས་བདེན་སྦྱོར་འབད་ནི་ལུ་'%s'འདི་ལག་ལེན་འཐབ་མ་ཚུགས། (gnupg་དེ་ཁཞི་བཙུགས་འབད་ཡོདཔ་ཨིན་"
+"ན།?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "apt-key་ལག་ལེན་འཐབ་ནི་ལུ་མ་ཤེས་པའི་འཛོལ་བ་།"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "འོག་གི་མིང་རྟགས་ཚུ་ནུས་མེད་ཨིན་པས།:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"འོག་གི་མིང་རྟགས་ཚུ་བདེན་སྦྱོར་་འབད་མ་ཚུགས་ག་ཅི་སྦེ་ཟེར་བ་ཅིན་མི་དམང་ལྡེ་མིག་དེ་འཐོབ་མི་ཚུགས་པས:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "ཡིག་སྣོད་འདི་ལུ་འབྲིཝ་ད་འཛོལ་བ།"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "སར་བར་ནང་ལས་ལྷག་པའི་བསྒང་འཛོལ་བ། ཐག་རིང་མཇུག་གི་མཐུད་ལམ་དེ་ཁ་བསྡམས།"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "སར་བར་ནང་ལས་ལྷག་པའི་བསྒང་འཛོལ་བ།"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "ཡིག་སྣོད་ལུ་འབྲིཝ་ད་འཛོལ་བ།"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "སེལ་འཐུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "མཐུད་ལམ་ངལ་མཚམས་འབད་ཡོད།"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "ཨའུཊི་པུཊི་ཡིག་སྣོད་ལུ་འབྲིཝ་ད་འཛོལ་བ།"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "ཆུ་ཚོད་ལེགས་བཅོས་གཞི་སྒྲིག་འབཐ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "དུས་སུ་མ་འབབ་པ་རང་མཐུད་ལམ་འདི་ག་བསྡམས་ཡོད།"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "ནུས་མེད་ཡིག་མཛོད་འཐུས་མི་གི་མགོ་ཡིག་"
+
+#~ msgid "Removed %s"
+#~ msgstr "རྩ་བསྐྲད་བཏང་ཡོད་པའི་%s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "ཐུམ་སྒྲིལ་ཡིག་སྣོད་ %sའདི་མཉམ་འབྱུང་གི་ཕྱི་ཁར་ཨིན་པས།"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "ཐུམ་སྒྲིལ་ ཟུར་ཐོ་ཡིག་སྣོད་ཚུ་ངན་ཅན་འགྱོ་ནུག ཡིག་སྣོད་ཀྱི་མིང་མིན་འདུག: %s་ཐུམ་སྒྲིལ་གྱི་དོན་ལུ་ས་སྒོ།"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "%s་ཡིག་སྣོད་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "%s་ཡིག་སྣོད་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "རིམ་སྒྲིག་ཡིག་སྣོད་%s་འདི་ཁ་ཕྱེ་དོ།"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s་ཁ་ཕྱེ་དོ།"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "མ་ཚང་པའི་རྟེན་འབྲེལ་ཚུ། --fix-broken ལག་ལེན་འཐབ་སྟེ་འབད་རྩོལ་བསྐྱེད།"
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "འདི་ཚུ་ནོར་བཅོས་འབད་ནིའི་དོན་ལུ་ཁྱོད་ཀྱི་'apt --fix-broken install'དེ་གཡོག་བཀོལ་དགོཔ་འོང་:"
+
+#~ msgid "(not found)"
+#~ msgstr "(མ་ཐོབ།)"
+
+#~ msgid " Package pin: "
+#~ msgstr "ཐུམ་སྒྲིལ་གྱི་ཁབ་གཟེར:"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "འོག་གི་ ཨའི་ཌི་་ ལྡེ་མིག་ཚུ་གི་དོན་ལུ་མི་དམང་གི་ལྡེ་མིག་འདི་འཐོབ་མི་ཚུགས་པས:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "སྣོད་ཐོ་%s་འདི་ཁ་ཕྱོགས་སྒྱུར་དེ་ཡོད།"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr "%sཐུམ་སྒྲིལ་འདི་འཐོབ་མ་ཚུགསཔ་ལས་བརྟེན་ %sགི་དོན་ལུ་%s རྟེན་འབྲེལ་དེ་ངལ་རང་མ་ཚུགས་པས།"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "%sཐུམ་སྒྲིལ་འདི་འཐོབ་མ་ཚུགསཔ་ལས་བརྟེན་ %sགི་དོན་ལུ་%s རྟེན་འབྲེལ་དེ་ངལ་རང་མ་ཚུགས་པས།"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "%s:གི་དོན་ལུ་%s་རྟེན་འབྲེལ་དེ་གི་རེ་བ་སྐོང་ནི་འདི་འཐུས་ཤོར་བྱུང་ཡོདཔ་ཨིན་ གཞི་བཙུགས་འབད་ཡོད་པའི་"
+#~ "ཐུམ་སྒྲིལ་%s་དེ་གནམ་མེད་ས་མེད་གསརཔ་ཨིན་པས།"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%s གི་དོན་ལུ་%s་རྟེན་འབྲེལ་འདི་གི་རེ་བ་སྐོང་མི་ཚུགས་ནུག་ག་ཅི་འབད་ཟེར་བ་ཅིན་ཐུམ་སྒརིལ་%s་གི་འཐོན་"
+#~ "རིམ་ཚུ་འཐོབ་མ་ཚུགསཔ་ལས་བརྟེན་འཐོན་རིམ་དགོས་མཁོ་ཚུ་གི་རེ་བ་དོ་སྐོང་མ་ཚུགས་པས།"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "%sཐུམ་སྒྲིལ་འདི་འཐོབ་མ་ཚུགསཔ་ལས་བརྟེན་ %sགི་དོན་ལུ་%s རྟེན་འབྲེལ་དེ་ངལ་རང་མ་ཚུགས་པས།"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "%s: %s་གི་དོན་ལུ་་%s་རྟེན་འབྲེལ་འདི་ངལ་རངས་འབད་ནི་འཐུས་ཤོར་བྱུང་ནུག"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr " %s་གི་དོན་ལུ་བཟོ་བརྩིགས་-རྟེན་འབྲེལ་འདི་ངལ་རངས་མ་ཚུགས་པས།"
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "%s་འབྲེལ་འཐུད་མེདཔ་བཟོ་ནི་ལུ་དཀའ་ངལ།"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "%s་འབྲེལ་ལམ་མེད་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "ལག་ལེན།: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ " apt-cacheའདི་གནས་རིམ་དམའ་དྲག་གི་ལག་ཆས་ APT's binary\n"
+#~ "་ འདྲ་མཛོད་ཡིག་སྣོད་གཡོག་བཀོལ་དོན་ལུ་ལག་ལེན་འཐབ་ནི་དང་་དེ་ཚུ་ནང་ལས་བརྡ་དོན་འདྲི་དཔྱད་འབད་ནིའི་"
+#~ "དོན་ལུ་ཨིན།\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -h འདི་གིས་ཚིག་ཡིག་ལུ་ཆ་རོགས་འབདཝ་ཨིན།.\n"
+#~ " -p=? འདི་འབྱུང་ཁུངས་འའདྲ་མཛོད་ཨིན།.\n"
+#~ " -s=? འདི་འབྱུང་ཁུངས་འདྲ་མཛོད་ཨིན།.\n"
+#~ " -q འདི་གིས་ ཡར་འཕེལ་བརྡ་སྟོན་པ་འདི་ལྕོགས་མིན་བཟོཝ་ཨིན།.\n"
+#~ " -i འདི་གིས་ མ་ཚང་པའི་བརྡ་བཀོད་ཚུ་གི་དོན་ལུ་ གལ་ཅན་གྱི་ཌེཔསི་རྐྱངམ་ཅིག་སྟོན།.\n"
+#~ " -c=? འདི་གིས་ འ་ནི་རིམ་སྒྲིག་ཡིག་སྣོད་འདི་ལྷགཔ་ཨིན།.\n"
+#~ " -o=? འདི་གིས་ མཐུན་སྒྲིག་རིམ་སྒྲིག་གི་གདམ་ཁ་འདི་གཞི་སྒྲིག་འབདཝ་ཨིན་ དཔེར་ན་ eg -o dir::"
+#~ "cache=/tmp\n"
+#~ " ཧེང་བཀལ་བརྡ་དོན་གི་དོན་ལུ་ ཨེ་apt-cache(8)དང་apt.conf(5)ལག་ཐོག་ཤོག་ལེབ་ཚུ་བལྟ།.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "གདམ་ཁ་ཚུ:\n"
+#~ " -h འདི་གིས་ཚིག་ཡིག་ལུ་གྲོགས་རམ་འབདཝ་ཨིན།\n"
+#~ " -c=? འདི་གིས་འ་ནི་རིམ་སྒྲིག་ཡིག་སྣོད་འདི་ལྷགཔ་ཨིན།\n"
+#~ " -o=? མཐུན་སྒྲིག་གི་རིམ་སྒྲིག་འདི་གཞི་སྒྲིག་འབདཝ་ཨིན་ དཔེར་ན་-o dir::cache=/tmp་བཟུམ།\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "ལག་ལེན: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs་ འདི་ཐུམ་སྒྲིལ་གི་ཡིག་སྣོད་ཚུ་དབྱེ་སེལ་འབད་ནི་ལུ་ འཇམ་སམ་གྱི་ལག་ཆས་ཅིག་ཨིན། -"
+#~ "s གདམ་ཁ་འདི་ ཡིག་སྣོད་ཀྱི་དབྱེ་ཁག་ག་ཅི་བཟུམ་ཅིག་ཨིན་ན\n"
+#~ "་བརྡ་སྟོན་འབད་ནིའི་དོན་ལུ་ལག་ལེན་འཐབ་སྟེ་ཡོདཔ་ཨིན།\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ:\n"
+#~ " -h འ་ནི་འདི་གིས་ཚིག་ཡིག་ལུ་གྲོགས་རམ་འབདཝ་ཨིན།\n"
+#~ " -s འདི་གིས་འབྱུང་ཁུངས་ ཡིག་སྣོད་གསོག་འཇོག་འབད་དོན་ལུ་ལག་ལེན་འཐབ་ཨིན།\n"
+#~ " -c=? འདི་གིས་འ་ནི་རིམ་སྒྲིག་ཡིག་སྣོད་འདི་ལྷགཔ་ཨིན།\n"
+#~ " -o=? འདི་གིས་ མཐུན་སྒྲིག་ རིམ་སྒྲིག་གི་གདམ་ཁ་ཚུ་ཁཞི་སྒྲིག་འབདཝ་ཨིན་ དཔེར་ན་-o dir::"
+#~ "cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "ཆ་ལག་ལས་སྦྱོར་དེ་འཐུས་ཤོར་བྱུང་ནུག"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "གི་དོན་ལུ་འབྱུང་ཁུངས་ལེན་ནི་ལུ་ཉུང་མཐའ་རང་ཐུམ་སྒྲིལ་གཅིག་ལེན་དགོ"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "རྒྱུད་དུང་ཚུ་གསར་བསྐྲུན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "ཇི་ཛིཔ་འདི་ལག་ལེན་འཐབ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s་གི་དོན་ལུ་%s %sགུར་ཕྱོགས་སྒྲིག་འབད་ཡོད་པའི་%s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "ཡིག་སྣོད་*་ གསར་བསྐྲུན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཐོ་ཡིག་ %s(ཡུ་ཨར་ཨའི་ མིང་དཔྱད་འབད་ནི)གི་ནང་ན།"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s(dist མིང་དཔྱད་འབད་ནི་)ནང་ན།"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་ %lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s (dist)གི་ནང་ན།"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s(dist མིང་དཔྱད་འབད་ནི་)ནང་ན།"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s(dist མིང་དཔྱད་འབད་ནི་)ནང་ན།"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s(dist མིང་དཔྱད་འབད་ནི་)ནང་ན།"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་ %lu འབྱུང་ཁུངས་ཐོ་ཡིག་ %s (ཡུ་ཨར་ཨའི་)གི་ནང་ན།"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་ %lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s (dist)གི་ནང་ན།"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཐོ་ཡིག་ %s(ཡུ་ཨར་ཨའི་ མིང་དཔྱད་འབད་ནི)གི་ནང་ན།"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s(ཡང་དག་ dist)གི་ནང་ན།"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%lu་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s(dist མིང་དཔྱད་འབད་ནི་)ནང་ན།"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "ཡིག་སྣོད་རྟེན་འབྲེལ་འདི་ཚུ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་ཐུམ་སྒྲིལ་ %s %s ་འདི་མ་ཐོབ་པས།"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "འབྱུང་ཁུངས་ཐུམ་སྒྲིལ་གྱི་ཐོ་ཡིག་%s་དེ་ངོ་བཤུས་འབད་མ་ཚུགས།"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "ཡིག་སྣོད་བྱིན་མི་ཚུ་བསྡུ་ལེན་འབད་དོ།"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "%s (༡་)་ཐུམ་སྒྲིལ་ཡིག་སྣོད་འདི་མིང་དཔྱད་འབད་མ་ཚུགས།"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "%sསིལ་ཚོང་པ་སྡེབ་ཚན་གྱི་ནང་ན་མཛུབ་རྗེས་མིན་འདུག"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "རྟེན་འབྲེལ་ཐོན་རིམ་བར་སྟོང་གྱི་བསྡོམས:"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr " %s་ནང་ཁྱོད་ལུ་བར་སྟོང་ཚུ་ལངམ་སྦེ་མིན་འདུག་"
+
+#~ msgid "Done"
+#~ msgstr "འབད་ཚར་ཡི།"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "གཞི་བཙུགས་བར་བཤོལ་འབད་དོ།"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "ནང་འགོད་འཛོལ་བ་ ཡར་བསྐྱེད་ཀྱི་ཅ་ཆས་ཆ་མཉམ་མེདཔ་ཐལ་ཡོད།"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s འདི་ནུས་ཅན་གྱི་ ཌི་ཨི་བི་ཅིག་མེན་པས།"
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ " %s སི་ཌི-རོམ་སྦྱར་བརྩེགས་ཀྱི་ས་ཚིགས་ལག་ལེན་འཐབ་དོ།\n"
+#~ "སི་ཌི་-རོམ་སྦྱར་བརྩེགས་འབད་དོ།\n"
+
+#, fuzzy
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "འ་ནི་འདི་ཌི་ཨི་བི་ཡིག་མཛོད་ནུས་ཅན་ཅིག་མེན་པས་ འདི་ལུ་'%s'ཡང་ན་'%s'འཐུས་མི་མིན་འདུག"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "ཨེམ་ཌི་༥་ ཁྱོན་བསྡོམས་མ་མཐུན་པ།"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ " %s་ཐུམ་སྒྲིལ་གི་དོན་ལུ་ང་་གི་ཡིག་སྣོད་ཅིག་ག་ཡོད་འཚོལ་མི་འཐོབ་པས། འདི་འབདཝ་ལས་ཁྱོད་ཀྱི་ལག་ཐོག་"
+#~ "ལས་ འ་ནི་ཐུམ་སྒྲིལ་འདི་གི་དཀའ་ངལ་སེལ་དགོཔ་འདུག "
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "རིམ་སྒྲིག་ཡིག་སྣོད་%s་འདི་ཁ་ཕྱེ་དོ།"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "%s་རྩ་བསྐྲད་གཏང་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "%s་གསར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "%sinfo་ངོ་བཤུས་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "info ་དང་ temp་སྣོད་ཐོ་ཚུ་ཡིག་སྣོད་རིམ་ལུགས་གཅིག་གུར་ལུ་བཞག་དགོཔ་ཨིན།"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "བདག་སྐྱོང་སྣོད་ཐོ་ %sinfo་ལུ་བསྒྱུར་བཅོས་འབད་ནི་ འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "ནང་འཁོད་འཛོལ་བ་གིས་ཐུམ་སྒྲིལ་མིང་ཅིག་ལེན་དོ།"
+
+#~ msgid "Reading file listing"
+#~ msgstr "ཡིག་ཐོ་བཀོད་འབད་མི་ཚུ་ལྷག་དོ།"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "'%sinfo/%s'ཡིག་སྣོད་ཐོག་ཡིག་ཁ་ཕྱེ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད། ཁྱོད་ཀྱི་ཡིག་སྣོད་འདི་སོར་ཆུད་འབད་མ་"
+#~ "ཚུགས་པ་ཅིན་ འདི་སྟོངམ་བཟོ་བཞིནམ་ལས་ དེ་འཕྲལ་ལས་རང་ཐུམ་སྒྲིལ་གི་འཐོན་རིམ་གཅིགཔ་འདི་རང་ལོང་གཞི་"
+#~ "བཙུགས་འབད།"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "%sinfo/%s་ཡིག་སྣོད་ཐོ་བཀོད་འདི་ལྷག་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "ནང་འཁོད་འཛོལ་བ་གིས་མཐུད་མཚམས་ལེན་དོ།"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "ཁ་ཕྱོགས་ཡིག་སྣོད་%sdiversionsཚུ་ཁ་ཕྱེ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "ཁ་ཕྱོགས་ཡིག་སྣོད་འདི་ངན་ཅན་འགྱོ་ནུག"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "%s་ཁ་ཕྱོགས་ཡིག་སྣོད་ནང་ནུས་མེད་གྲལ་ཐིག"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "ནང་འཁོད་འཛོལ་ ཁ་ཕྱོགས་ཅིག་ཁ་སྐོང་རྐྱབ་དོ།"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "པི་ཀེ་ཇི་ འདྲ་མཛོད་དེ་ དང་པ་རང་འགོ་བྱེད་འབད་དགོ"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "ཐུམ་སྒྲིལ་ཅིག་འཚོལ་་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ་ཨིན:མགོ་ཡིག་ པར་ལེན%lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "གནད་ཚད་ཡིག་སྣོད་དབྱེ་ཚན་ནང་ལུ་ རིམ་སྒྲིག་ཡིག་སྣོད་བྱང་ཉེས། པར་ལེན་ %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "ཨེམ་ཌི་༥་ འཛོལ་བ་མིང་དཔྱད་འབད་དོ། པར་ལེན་ %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "%s་ལུ་བསྒྱུར་བཅོས་འབད་མ་ཚུགས།"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "ནུས་ཅན་ཡོད་པའི་ཚད་འཛིན་ཡིག་སྣོད་ཅིག་ག་ཡོད་འཚོལ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོདཔ་ཨིན།"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "%s་གི་དོན་ལུ་རྒྱུད་དུང་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "%s་ལས་སྦྱོར་ནང་ལས་འཛོལ་བ་ཚུ་ལྷག"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "%u་ཡིག་འབྲུ་ཚུ་གི་ལྟག་ལས་མགོ་ཡིག་རྐྱང་པ་ཅིག་ཐོབ་ཡོད།"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%s གྲལ་ཐིག་%lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%sགྲལ་ཐིག%lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%sགྲལ་ཐིག%lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "ཨེབ་བཤོལ་འཕྲུལ་ཆས།"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "ལྷག་ ད་ལྟོ་ཡང་ལྷག་ནི་ལུ་%lu་ཡོད་འདི་འབདཝ་ད་ཅི་ཡང་ལྷག་ལུས་མིན་འདུག"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "འབྲི་ ད་ལྟོ་ཡང་འབྲི་ནི་ལུ་%lu་ཡོད་འདི་འདབཝ་ད་འབད་མ་ཚུགས།"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "%s (ཐུམ་སྒྲིལ་གསརཔ་)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "%s (ལག་ལེན་འཐུམ་སྒྲིལ་ ༡་)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་འཐོན་ནུག"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "%s (ཡིག་སྣོད་འཐོན་རིམ་གསརཔ་ ༡)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "%s (ལག་ལེན་འཐུམ་སྒྲིལ་ ༢་)དེ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་འཐོན་ནུག"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "%s (ཡིག་སྣོད་འཐོན་རིམ་གསརཔ་ ༡)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr " %s (འཐོན་རིམ་གསརཔ་ ༡་)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "%s (ལག་ལེན་ཐུམ་སྒྲིལ་ ༣་)དེ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོབ་ཅིག་བྱུང་ནུག"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "%s (ཡིག་སྣོད་འཐོན་རིམ་གསརཔ་ ༡)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "%s (པི་ཀེ་ཇི་འཚོལ་ནི)དེ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "%s (CollectFileProvides)དེ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "ནང་འཁོད་འཛོལ་བ་ འཐུས་མི་ག་ཡོད་འཚོལ་མ་ཐོབ།"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Acquire::gpgv::Options་ནང་ལས་ཀྱི་སྒྲུབ་རྟགས་ཀྱི་ཐོ་ཡིག་དེ་གནམ་མེད་ས་མེད་རིངམ་འདུག ཕྱིར་"
+#~ "འཐོན་དོ།"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "%s (འཐོན་རིམ་གསརཔ་ ༢)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "བཟོ་ཉེས་འགྱུར་བའི་གྲལ་ཐིག་%u་ འབྱུང་ཁུངས་ཐོ་ཡིག་%s(སིལ་ཚོང་པ་ ཨའི་ཌི)གི་ནང་ན།"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "'%s'ལྡེ་འཁོར་འདི་འཛུལ་སྤྱོད་འབད་མ་ཚུགས།"
+
+#, fuzzy
+#~ msgid "Could not patch file"
+#~ msgstr "%s་ཡིག་སྣོད་འདི་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#~ msgid " %4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "སྣོད་ཐོ་%s་ལས་སྦྱོར་འབདཝ་ད་འཛོལ་བ་འཐོན་ཡི།"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "ད་ཚུན་ཁྱོད་ཀྱི་བཀོལ་སྤྱོད་རྐྱང་པ་ཅིག་རྐྱང་པ་ རྐྱངམ་ཅིག་ཞུ་བ་འབད་ཡོདཔ་ལས་ ཧ་ཅང་གི་ཐུམ་སྒྲིལ་འདི་གཞི་"
+#~ "བཙུགས་འབད་མི་བཏུབ་ནི་དེ་སྲིད་ནི་བཟུམ་ཅིག་དང་ཐུམ་སྒྲིལ་དི་གི་ཁ་ཐད་དུ་རྐྱེན་གྱི་སྙན་ཞུ་འདི་བཀང་བཞག་དགོ"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "གྲལ་ཐིག་%d་འདི་གནམ་མེད་ས་མེད་རིངམ་འདུག(%d་མཐོ་ཤོས)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "གྲལ་ཐིག་%d་འདི་གནམ་མེད་ས་མེད་རིངམ་འདུག(%d་མཐོ་ཤོས)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "%s (ཡིག་སྣོད་འཐོན་རིམ་གསརཔ་ ༡)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "%s (ཡིག་སྣོད་འཐོན་རིམ་གསརཔ་ ༡)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "གསོག་འཇོག་འབད་ཡོད་པའི་ཁ་ཡིག:%s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr "%i་ཐུམ་སྒྲིལ་གྱི་ཟུར་ཐོ་ཚུ་ཐོབ་ཅི་ %i་འབྱུང་ཁུངས་ཟུར་ཐོ་ཚུ་དང་ %iམིང་རྟགས་ཚུ།\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "སེལ་འཐུ་འཐུས་ཤོར་བྱུང་ཡོད།"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "ཡིག་སྣོད་ཚེས་གྲངས་འདི་གིས་%sདེ་བསྒྱུར་བཅོས་འབད་ནུག"
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..2da8823
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,4334 @@
+# translation of apt_po_el.po to Greek
+# translation of apt_po_el.po to
+# Greek Translation of APT.
+# This file is put in the public domain.
+#
+# Fanis Dokianakis <madf@hellug.gr>, 2003.
+# Konstantinos Margaritis <markos@debian.org>, 2003, 2004, 2006.
+# George Papamichelakis <george@step.gr>, 2004.
+# George Papamichalakis <george@step.gr>, 2004.
+# Greek Translation Team <debian-l10n-greek@lists.debian.org>, 2005.
+# quad-nrg.net <galaxico@quad-nrg.net>, 2005.
+# Serafeim Zanikolas <serzan@hellug.gr>, 2008.
+# quad-nrg.net <yodesy@quad-nrg.net>, 2008.
+# Θανάσης Νάτσης <natsisthanasis@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2008-08-26 18:25+0300\n"
+"Last-Translator: Θανάσης Νάτσης <natsisthanasis@gmail.com>\n"
+"Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Μη έγκυρη υπογραφή αρχειοθήκης"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Σφάλμα κατά την ανάγνωση της επικεφαλίδας του μέλους της αρχειοθήκης"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Μη έγκυρη επικεφαλίδα μέλος της αρχειοθήκης"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Η αρχειοθήκη είναι πολύ μικρή"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Αποτυχία ανάγνωσης των επικεφαλίδων της αρχειοθήκης"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Αδύνατη η εύρεση του πακέτου %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Κατεστραμμένη αρχειοθήκη"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Το Checksum του tar απέτυχε, η αρχείοθήκη είναι κατεστραμμένη"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Άγνωστη επικεφαλίδα TAR τύπος %u, μέλος %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Αυτό δεν είναι ένα έγκυρο αρχείο DEB, αγνοείται το μέλος '%s'"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Εσωτερικό Σφάλμα, αδυναμία εντοπισμού του μέλους %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Μη αναλύσιμο αρχείο control"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Αποτυχία εγγραφής του αρχείου %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Αποτυχία στο κλείσιμο του αρχείου %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Η διαδρομή %s έχει υπερβολικό μήκος"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Αποσυμπίεση του %s πάνω από μια φορά"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Ο φάκελος %s έχει εκτραπεί"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Το πακέτο προσπαθεί να γράψει στον προορισμό εκτροπής %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Η διαδρομή εκτροπής έχει υπερβολικό μήκος"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Αποτυχία εύρεσης της κατάστασης του %s."
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Αποτυχία μετονομασίας του %s σε %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Ο φάκελος %s αντικαθίσταται από ένα μη-φάκελο"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Αποτυχία εντοπισμού του κόμβου στην ομάδα hash του"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Η διαδρομή έχει υπερβολικό μήκος"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Αντικατάσταση πακέτου χωρίς καμία έκδοση %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Το αρχείο %s/%s αντικαθιστά αυτό στο πακέτο %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Αδύνατη η ανάγνωση του %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Αδύνατη η εύρεση της κατάστασης του %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Κλήση του DropNode σε έναν ήδη συνδεδεμένο κόμβο"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Αποτυχία εντοπισμού του στοιχείου hash!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Αδυναμία εντοπισμού εκτροπής"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Εσωτερικό Σφάλμα στο AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Προσπάθεια για αντικατάσταση εκτροπής, %s -> %s και %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Διπλή προσθήκη εκτροπής %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Διπλό αρχείο ρυθμίσεων %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Ο φάκελος %s έχει εκτραπεί"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Ο φάκελος %s έχει εκτραπεί"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Ο φάκελος %s έχει εκτραπεί"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Ο φάκελος %s έχει εκτραπεί"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Ο φάκελος %s έχει εκτραπεί"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Αποτυχία ανάγνωσης του %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Ανόμοιο MD5Sum"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "απέτυχε η μετονομασία, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Ανόμοιο μέγεθος"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Μη έγκυρη λειτουργία %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Σφάλμα εγγραφής"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Αποτυχία ανάκτησης του %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Αδύνατος ο εντοπισμός ενός αρχείου για το πακέτο %s. Αυτό ίσως σημαίνει ότι "
+"χρειάζεται να διορθώσετε χειροκίνητα το πακέτο. (λόγω χαμένου αρχείου)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Changelog για %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Ο οδηγός μεθόδου %s δεν μπορεί να εντοπιστεί."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Ελέγξτε αν είναι εγκαταστημένο το πακέτο 'dpkg-dev'.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Η μέθοδος %s δεν εκκινήθηκε σωστά"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Παρακαλώ εισάγετε το δίσκο με ετικέτα '%s' στη συσκευή '%s' και πατήστε "
+"enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Ο φάκελος λιστών %s αγνοείται."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Ο φάκελος αρχειοθηκών %s αγνοείται."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Αδύνατο το κλείδωμα του καταλόγου"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Ο τύπος αρχείου ευρετηρίου '%s' δεν υποστηρίζεται"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Κατέβασμα του αρχείου %li του %li (απομένουν %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Λήψη αρχείου %li του %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Το πακέτο '%s' χρειάζεται να επανεγκατασταθεί, αλλά είναι αδύνατη η εύρεση "
+"κάποιας κατάλληλης αρχείοθήκης."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Σφάλμα, το pkgProblemResolver::Resolve παρήγαγε διακοπές, αυτό ίσως "
+"προκλήθηκε από κρατούμενα πακέτα."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Αδύνατη η διόρθωση προβλημάτων, έχετε κρατούμενα ελαττωματικά πακέτα."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Αδύνατο το άνοιγμα ή η ανάλυση των λιστών πακέτων ή του αρχείου κατάστασης."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Ίσως να πρέπει να τρέξετε apt-get update για να διορθώσετε αυτά τα προβλήματα"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Αδύνατη η ανάγνωση της λίστας πηγών."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "σφάλμα μεταγλωτισμου - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Η έκδοση %s για το %s δεν βρέθηκε"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Η έκδοση %s για το %s δεν βρέθηκε"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Αδύνατη η εύρεση του συνόλου πακέτων %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Αδύνατη η εύρεση του πακέτου %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Αδύνατη η εύρεση του πακέτου %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Αδυναμία εντοπισμού του πακέτου %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Η γραμμή %u έχει υπερβολικό μήκος στη λίστα πηγών %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Αποπροσάρτηση του CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Χρησιμοποιείται το σημείο προσάρτησης %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Αναμονή για δίσκο...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Προσάρτηση του CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Αναγνώριση..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Αποθήκευση Ετικέτας: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Σάρωση του δίσκου για περιεχόμενα...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Βρέθηκαν %zu κατάλογοι πακέτων, %zu κατάλογοι πηγαίων, %zu κατάλογοι "
+"μεταφράσεων και %zu υπογραφές\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Εύρεση ετικέτας: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Αυτό δεν είναι έγκυρο όνομα, προσπαθείστε ξανά. \n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Ο δίσκος αυτός ονομάζεται: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Αντιγραφή λιστών πακέτων..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Eγγραφή νέας λίστας πηγών\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Οι κατάλογοι με τις πηγές αυτού του δίσκου είναι: \n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Αδύνατη η αλλαγή σε %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Αδύνατη η εύρεση της κατάστασης του %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Αδύνατη η εύρεση της κατάστασης του σημείου επαφής %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Αδύνατη η εύρεση της κατάστασης του cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Η επιλογή γραμμής εντολών '%c' [από %s] δεν είναι γνωστή."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Η επιλογή γραμμής εντολών %s δεν είναι κατανοητή"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Η επιλογή γραμμής εντολών %s δεν είναι boolean"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Η επιλογή %s απαιτεί ένα όρισμα."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Επιλογή %s: Οι προδιαγραφές του αντικειμένου ρυθμίσεων απαιτούν =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Επιλογή %s: απαιτείται ένας ακέραιος αριθμός ως όρισμα, όχι '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Η επιλογή '%s' έχει υπερβολικό μήκος"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Η τιμή %s δεν είναι κατανοητή, δοκιμάστε σωστό (true) ή λάθος (false)."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Μη έγκυρη λειτουργία %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Μη αναγνωρισμένος τύπος σύντμησης: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Συντακτικό σφάλμα %s:%u: Το block αρχίζει χωρίς όνομα."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Συντακτικό σφάλμα %s:%u: Λάθος μορφή Ετικέτας (Tag)"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Συντακτικό σφάλμα %s:%u: Άχρηστοι χαρακτήρες μετά την τιμή"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Συντακτικό σφάλμα %s:%u: Οι οδηγίες βρίσκονται μόνο στο ανώτατο επίπεδο"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Συντακτικό σφάλμα %s:%u: Υπερβολικός αριθμός συνδυασμένων includes"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Συντακτικό σφάλμα %s:%u: Συμπεριλαμβάνεται από εδώ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Συντακτικό σφάλμα %s:%u: Μη υποστηριζόμενη εντολή '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Συντακτικό σφάλμα %s:%u: Οι οδηγίες βρίσκονται μόνο στο ανώτατο επίπεδο"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Συντακτικό σφάλμα %s:%u: Άχρηστοι χαρακτήρες στο τέλος του αρχείου"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Πρόβλημα κατά την διαγραφή του αρχείου"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Δε θα χρησιμοποιηθεί κλείδωμα για το ανάγνωσης μόνο αρχείο κλειδώματος %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Αδύνατο το άνοιγμα του αρχείου κλειδώματος %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Δε θα χρησιμοποιηθεί κλείδωμα για το συναρμοσμένο από nfs αρχείο κλειδώματος "
+"%s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Αδύνατο το κλείδωμα %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Αναμονή του %s, αλλά δε βρισκόταν εκεί"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Η υποδιεργασία %s έλαβε ένα σφάλμα καταμερισμού (segfault)"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Η υποδιεργασία %s έλαβε ένα σφάλμα καταμερισμού (segfault)"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Η υποδιεργασία %s επέστρεψε ένα κωδικός σφάλματος (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Η υποδιεργασία %s εγκατέλειψε απρόσμενα"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Σφάλμα ανάγνωσης"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Σφάλμα εγγραφής"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Πρόβλημα κατά το κλείσιμο του αρχείου"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Αποτυχία δημιουργίας IPC στην υποδιεργασία"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Αποτυχία εκτέλεσης του συμπιεστή "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Αδύνατο το άνοιγμα διασωλήνωσης για το %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "αναγνώστηκαν, απομένουν ακόμη %lu για ανάγνωση αλλά δεν απομένουν άλλα"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "γράφτηκαν, απομένουν %lu για εγγραφή αλλά χωρίς επιτυχία"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Πρόβλημα κατά το κλείσιμο του αρχείου"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Πρόβλημα κατά τον συγχρονισμό του αρχείου"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Πρόβλημα κατά τον συγχρονισμό του αρχείου"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Αδύνατη η εύρεση της κατάστασης του %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Αδύνατη η εγγραφή στο %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Αδύνατη η απεικόνιση mmap ενός άδειου αρχείου"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Αδύνατη η απεικόνιση μέσω mmap %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Αδύνατο το άνοιγμα διασωλήνωσης για το %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Αδύνατο το άνοιγμα του %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Αδύνατη η εκτέλεση"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Αδύνατη η απεικόνιση μέσω mmap %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "Αποτυχία εγγραφής του αρχείου %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Σφάλμα!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Ολοκληρώθηκε"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Ολοκληρώθηκε"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Η επιλογή %s δε βρέθηκε"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Αδύνατη η ανάλυση του αρχείου πακέτου %s (1)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Σημείωση, επιλέχθηκε το %s αντί του%s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Μη έγκυρη γραμμή στο αρχείο παρακάμψεων: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, fuzzy, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Αδύνατη η ανάλυση του αρχείου πακέτου %s (%s)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Αδύνατο το κλείδωμα του καταλόγου"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Αδύνατο το κλείδωμα του καταλόγου"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Προετοιμασία του %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Προετοιμασία ρύθμισης του %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Προετοιμασία για την αφαίρεση του %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Προετοιμασία πλήρης αφαίρεσης του %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Εκτέλεση του post-installation trigger %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Έγινε εγκατάσταση του %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Ρύθμιση του %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Ο φάκελος %s αγνοείται."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Ξεπακετάρισμα του %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Εγκατάσταση του %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Αφαιρώ το %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "Το %s διαγράφηκε πλήρως"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Το %s διαγράφηκε πλήρως"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Αδύνατη η εγγραφή στο %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Κατασκευή Δένδρου Εξαρτήσεων"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Υποψήφιες Εκδόσεις"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Παραγωγή Εξαρτήσεων"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Ανάγνωση περιγραφής της τρέχουσας κατάσταση"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Αποτυχία ανοίγματος του αρχείου κατάστασης %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Αποτυχία εγγραφής του αρχείου κατάστασης %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Εγιναν %i εγγραφές.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Εγιναν %i εγγραφές με %i απώντα αρχεία.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Εγιναν %i εγγραφές με %i ασύμβατα αρχεία.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Εγιναν %i εγγραφές με %i απώντα αρχεία και %i ασύμβατα αρχεία\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Ανόμοιο MD5Sum"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Το σύστημα συσκευασίας '%s' δεν υποστηρίζεται"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Αδύνατος ο καθορισμός ενός κατάλληλου τύπου συστήματος πακέτων"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Αυτή η προσπάθεια εγκατάστασης απαιτεί προσωρινή αφαίρεση του σημαντικού "
+"πακέτου %s λόγω ενός βρόγχου Ασυμβατότητας/ΠροΕξάρτησης. Αυτό συνήθως δεν "
+"είναι καλό, αλλά εάν πραγματικά θέλετε να συνεχίσετε ενεργοποιήστε την "
+"επιλογή APT::Force-LoopBreak option."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Άδειο cache πακέτων"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Το αρχείο cache των πακέτων είναι κατεστραμμένο"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Το αρχείο cache των πακέτων είναι ασύμβατης έκδοσης"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Αυτό το APT δεν υποστηρίζει το Σύστημα Απόδοσης Έκδοσης '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Η cache πακέτων κατασκευάστηκε για μια διαφορετική αρχιτεκτονική"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Το αρχείο cache των πακέτων είναι κατεστραμμένο"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Εξαρτάται από"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "ΠροΕξαρτάται από"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Προτείνει"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Ασύμβατο με"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Συστήνει"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Αντικαθιστά"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Χαλάει"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Απαρχαιώνει"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "σημαντικό"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "απαιτούμενο"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "καθιερωμένο"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "επιπλέον"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "προαιρετικό"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Η cache έχει ασύμβατο σύστημα απόδοσης έκδοσης"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Εκπληκτικό, υπερβήκατε τον αριθμό των ονομάτων πακέτων που υποστηρίζει το "
+"APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Εκπληκτικό, υπερβήκατε τον αριθμό των εκδόσεων που υποστηρίζει το APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Εκπληκτικό, υπερβήκατε τον αριθμό των περιγραφών που υποστηρίζει το APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Εκπληκτικό, υπερβήκατε τον αριθμό των εξαρτήσεων που υποστηρίζει το APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Ανάγνωση Λιστών Πακέτων"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Σφάλμα IO κατά την αποθήκευση της cache πηγών"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Ο τύπος αρχείου ευρετηρίου '%s' δεν υποστηρίζεται"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Μη έγκυρη εγγραφή στο αρχείο προτιμήσεων, καμία επικεφαλίδα Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Αδύνατη η κατανόηση του τύπου καθήλωσης %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+"Δεν έχει οριστεί προτεραιότητα (ή έχει οριστεί μηδενική) για την καθήλωση"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Λάθος μορφή της γραμμής %u στη λίστα πηγών %s (τύπος)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Ο τύπος '%s' στη γραμμή %u στη λίστα πηγών %s είναι άγνωστος "
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Λάθος μορφή της γραμμής %u στη λίστα πηγών %s (τύπος)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Ο τύπος '%s' στη γραμμή %u στη λίστα πηγών %s είναι άγνωστος "
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Πρέπει να τοποθετήσετε μερικά URI 'πηγών' στο sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Μερικά αρχεία δεν μεταφορτώθηκαν, αγνοήθηκαν ή χρησιμοποιήθηκαν παλαιότερα "
+"στη θέση τους."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Υπολογισμός της αναβάθμισης"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Hit:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Φέρε:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Αγνόησε:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Σφάλμα:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Μεταφορτώθηκαν %sB σε %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Επεξεργασία]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Αλλαγή Μέσου: Παρακαλώ εισάγετε το δίσκο με ετικέτα\n"
+" '%s'\n"
+"στη συσκευή '%s' και πιέστε enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Διόρθωση εξαρτήσεων..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " απέτυχε."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Αδύνατη η διόρθωση των εξαρτήσεων"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Αδύνατη η ελαχιστοποίηση του συνόλου αναβαθμίσεων"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Ετοιμο"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Ίσως να πρέπει να τρέξετε apt --fix-broken install για να διορθώσετε αυτά τα "
+"προβλήματα."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Ανεπίλυτες εξαρτήσεις. Δοκιμάστε 'apt --fix-broken install' χωρίς να ορίσετε "
+"πακέτο (ή καθορίστε μια λύση)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Σημείωση, επιλέχτηκε το %s στη θέση του '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Σημείωση, επιλέχτηκε το %s στη θέση του '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Σημείωση, επιλέχτηκε το %s στη θέση του '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Το πακέτο %s είναι εικονικό και παρέχεται από τα:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Εγκατεστημένα]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr "[Μγ Υποψήφια Εκδόση]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Θα πρέπει επακριβώς να επιλέξετε ένα για εγκατάσταση."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Το πακέτο %s δεν είναι διαθέσιμο, αλλά υπάρχει αναφορά για αυτό από άλλο "
+"πακέτο.\n"
+"Αυτό σημαίνει ότι το πακέτο αυτό λείπει, είναι παλαιωμένο, ή είναι διαθέσιμο "
+"από άλλη πηγή\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Πάραυτα το ακόλουθο πακέτο το αντικαθιστά:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Το πακέτο %s δεν έχει υποψήφια εγκατάσταση"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Εικονικά πακέτα όπως το '%s' δεν μπορούν να αφαιρεθούν\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Το πακέτο %s δεν είναι εγκατεστημένο και δεν θα αφαιρεθεί. Εννοείτε '%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Το πακέτο %s δεν είναι εγκατεστημένο και δεν θα αφαιρεθεί\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Σημείωση, επιλέχθηκε το %s αντί του %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Δε βρέθηκαν πακέτα"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Τα ακόλουθα πακέτα δεν εξακριβώθηκαν!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Παράκαμψη προειδοποίησης ταυτοποίησης.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Μερικά πακέτα δεν εξαακριβώθηκαν"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Εγκατάσταση των πακέτων χωρίς επαλήθευση;"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Υπάρχουν προβλήματα και δώσατε -y χωρίς το --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Δεν μπόρεσα να προσδιορίσω τον ελεύθερο χώρο στο %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Δεν διαθέτετε αρκετό ελεύθερο χώρο στο %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Αδύνατο το κλείδωμα του καταλόγου μεταφόρτωσης"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Μερικά πακέτα είναι αδύνατον να εγκατασταθούν. Αυτό μπορεί να σημαίνει ότι\n"
+"δημιουργήσατε μια απίθανη κατάσταση ή αν χρησιμοποιείτε την ασταθή\n"
+"διανομή, ότι μερικά από τα πακέτα δεν έχουν ακόμα δημιουργηθεί ή έχουν\n"
+"μετακινηθεί από τα εισερχόμενα."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Οι ακόλουθες πληροφορίες ίσως βοηθήσουν στην επίλυση του προβλήματος:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Χαλασμένα πακέτα"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Αδύνατη η μεταφόρτωση μερικών αρχείων, ίσως αν δοκιμάζατε με apt-get update "
+"ή το --fix-missing;"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Εσωτερικό σφάλμα, έγινε κλήση του Install Packages με σπασμένα πακέτα!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"Μερικά πακέτα πρέπει να αφαιρεθούν αλλά η Αφαίρεση είναι απενεργοποιημένη."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Υπάρχουν προβλήματα και δώσατε -y χωρίς το --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Υπάρχουν προβλήματα και δώσατε -y χωρίς το --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Εσωτερικό Σφάλμα, η Ταξινόμηση δεν ολοκληρώθηκε"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Πολύ περίεργο! Τα μεγέθη δεν ταιριάζουν, στείλτε μήνυμα στο apt@packages."
+"debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Χρειάζεται να μεταφορτωθούν %sB/%sB από αρχεία.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Χρειάζεται να μεταφορτωθούν %sB από αρχεία.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Μετά από αυτή τη λειτουργία, θα χρησιμοποιηθούν %sB χώρου από το δίσκο.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Μετά από αυτή τη λειτουργία, θα ελευθερωθούν %sB χώρου από το δίσκο.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Καθορίσατε συνηθισμένο, αλλά αυτή δεν είναι μια συνηθισμένη εργασία"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ναι, κανε ότι λέω!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Πρόκειται να κάνετε κάτι πιθανόν πολύ επιζήμιο.\n"
+"Για να συνεχίσετε πληκτρολογήστε τη φράση '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Εγκατάλειψη."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Θέλετε να συνεχίσετε;"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Για μερικά αρχεία απέτυχε η μεταφόρτωση"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Ολοκληρώθηκε η μεταφόρτωση μόνο"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+"ο συνδυασμός --fix-missing με εναλλαγή μέσων δεν υποστηρίζεται για την ώρα"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Αδύνατη η επίλυση των χαμένων πακέτων."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Εγκατάλειψη της εγκατάστασης."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Δεν επιτρέπεται οποιαδήποτε διαγραφή· αδυναμία εκκίνησης του AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Φαίνεται πως το AutoRemover κατέστρεψε κάτι ενώ δεν θα έπρεπε. Παρακαλείστε "
+"να υποβάλλετε αναφορά σφάλματος για το apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Εσωτερικό Σφάλμα, το AutoRemover δημιούργησε κάποιο πρόβλημα"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Το ακόλουθο πακέτο εγκαταστάθηκε αυτόματα και δεν χρειάζεται πλέον:"
+msgstr[1] ""
+"Τα ακόλουθα πακέτα εγκαταστάθηκαν αυτόματα και δεν χρειάζονται πλέον:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu το ακόλουθο πακέτο εγκαταστάθηκε αυτόματα και δεν χρειάζεται πλέον:"
+msgstr[1] ""
+"%lu τα ακόλουθα πακέτα εγκαταστάθηκαν αυτόματα και δεν χρειάζονται πλέον:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Χρησιμοποιήστε '%s' για να το διαγράψετε."
+msgstr[1] "Χρησιμοποιήστε '%s' για να τα διαγράψετε."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Τα ακόλουθα επιπλέον πακέτα θα εγκατασταθούν:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Προτεινόμενα πακέτα:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Συνιστώμενα πακέτα:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Παράκαμψη του %s, είναι εγκατεστημένο και η αναβάθμιση δεν έχει οριστεί.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Παράκαμψη του %s, είναι εγκατεστημένο και μόνο αναβαθμίσεις έχουν οριστεί.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+"Η επανεγκατάσταση του %s δεν είναι εφικτή, δεν είναι δυνατή η μεταφόρτωσή "
+"του\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "το %s είναι ήδη η τελευταία έκδοση.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Επιλέχθηκε η έκδοση %s (%s) για το %s\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Επιλέχθηκε η έκδοση %s (%s) για το %s λόγω του %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Εγκατεστημένα]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Εγκατεστημένα]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Εγκατεστημένα]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Εγκατεστημένα]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "αλλά το %s είναι εγκατεστημένο"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "αλλά το %s πρόκειται να εγκατασταθεί"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "αλλά δεν είναι εγκαταστάσημο"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "αλλά είναι ένα εικονικό πακέτο"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "αλλά δεν πρόκειται να εγκατασταθεί"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "αλλά δεν είναι εγκατεστημένο"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " η"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Τα ακόλουθα πακέτα έχουν ανεπίλυτες εξαρτήσεις:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Τα ακόλουθα ΝΕΑ πακέτα θα εγκατασταθούν:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Τα ακόλουθα πακέτα θα ΑΦΑΙΡΕΘΟΥΝ:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Τα ακόλουθα πακέτα θα μείνουν ως έχουν:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Τα ακόλουθα πακέτα θα αναβαθμιστούν:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Τα ακόλουθα πακέτα θα ΥΠΟΒΑΘΜΙΣΤΟΥΝ:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Τα ακόλουθα κρατημένα πακέτα θα αλλαχθούν:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (λόγω του %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Τα ακόλουθα απαραίτητα πακέτα θα αφαιρεθούν\n"
+"Αυτό ΔΕΝ θα έπρεπε να συμβεί, εκτός αν ξέρετε τι ακριβώς κάνετε!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu αναβαθμίστηκαν, %lu νέο εγκατεστημένα, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu επανεγκατεστημένα,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu υποβαθμισμένα, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu θα αφαιρεθούν και %lu δεν αναβαθμίζονται.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu μη πλήρως εγκατεστημένα ή αφαιρέθηκαν.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Ν/ο]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[ν/Ο]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Πρέπει να δώσετε τουλάχιστον ένα μοτίβο αναζήτησης"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Αρχεία Πακέτου:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Η cache δεν είναι ενημερωμένη, αδυναμία παραπομπής σε ένα αρχείο πακέτου"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Καθηλωμένα Πακέτα:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Εγκατεστημένα: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Υποψήφιο: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(κανένα)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Πίνακας Έκδοσης:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Αδύνατη η εύρεση του πακέτου %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Αδύνατη η εύρεση του πακέτου %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Αδύνατη η εύρεση του πακέτου %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Επιλογή του %s ώς λίστας πηγαίων πακέτων αντί της %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"Θα πρέπει να καθορίσετε τουλάχιστον ένα πακέτο για να μεταφορτώσετε τον "
+"κωδικάτου"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Αδυναμία εντοπισμού του κώδικά του πακέτου %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Παράκαμψη του ήδη μεταφορτωμένου αρχείου `%s`\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Χρειάζεται να μεταφορτωθούν %sB/%sB πηγαίου κώδικα.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Χρειάζεται να μεταφορτωθούν %sB πηγαίου κώδικα.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Μεταφόρτωση Κωδικα %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Αποτυχία μεταφόρτωσης μερικών αρχειοθηκών."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Παράκαμψη της αποσυμπίεσης ήδη μεταφορτωμένου κώδικα στο %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Απέτυχε η εντολή αποσυμπίεσης %s\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Ελέγξτε αν είναι εγκαταστημένο το πακέτο 'dpkg-dev'.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Απέτυχε η εντολή χτισίματος %s.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Αδύνατη η εύρεση πληροφοριών χτισίματος για το %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "το %s δεν έχει εξαρτήσεις χτισίματος.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Θα πρέπει να καθορίσετε τουλάχιστον ένα πακέτο για έλεγχο των εξαρτήσεων του"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Αποτυχία επεξεργασίας εξαρτήσεων χτισίματος"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Αποτυχία επεξεργασίας εξαρτήσεων χτισίματος"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Αποτυχία μετονομασίας του %s σε %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Το πακέτο %s με έκδοση %s έχει ανικανοποίητες εξαρτήσεις:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Η εντολή update δεν παίρνει ορίσματα"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Η εντολή update δεν παίρνει ορίσματα"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Συνολικά Ονόματα Πακέτων : "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Συνολο Δομών Πακέτου : "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Κανονικά Πακέτα: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Πλήρως Εικονικά Πακέτα: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Μονά Εικονικά Πακέτα: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Μικτά Εικονικά Πακέτα: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr "Αγνοούμενα: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Σύνολο Διαφορετικών Εκδόσεων: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Σύνολο Διαφορετικών Εκδόσεων: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Σύνολο Εξαρτήσεων: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Σύνολο σχέσεων Εκδ/Αρχείων: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Σύνολο σχέσεων Εκδ/Αρχείων: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Σύνολο Αντιστοιχίσεων Παροχών: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Σύνολο Κοινών Στοιχειοσειρών : "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Σύνολο χώρου ασφαλείας: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Συνολικός Καταμετρημένος Χώρος: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Εμφάνιση εγγραφών για πηγαίο πακέτο"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Αναζήτηση στη λίστα πακέτων για αυτή τη κανονική παράσταση"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Εμφάνιση των εξαρτήσεων ενός πακέτου"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Εμφάνιση αντίστροφων εξαρτήσεων ενός πακέτου"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Εμφάνιση μιας αναγνώσιμης εγγραφής για το πακέτο"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Εμφάνιση λίστας με τα ονόματα όλων των πακέτων"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Εμφάνιση προτεραιοτήτων πηγών"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Παρακαλώ δώστε ένα όνομα για αυτόν τον δίσκο, όπως 'Debian 5.0.3 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Παρακαλώ εισάγετε το δίσκο στη συσκευή και πατήστε enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Αποτυχία σύνδεσης του %s σε %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Επαναλάβετε την διαδικασία για τα υπόλοιπα CD από το σετ σας."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Τα ορίσματα δεν είναι σε ζεύγη"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Χρήση: apt-config [επιλογές] εντολή\n"
+"\n"
+"το apt-config είναι ένα απλό εργαλείο για την ανάγνωση του αρχείου ρυθμίσεων "
+"APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Χρήση: apt-extracttemplates αρχείο1 [αρχείο2 ...]\n"
+"\n"
+"το apt-extracttemplates είναι ένα βοήθημα για να εξάγετε ρυθμίσεις \n"
+"και πρότυπα από πακέτα debian\n"
+"\n"
+"Επιλογές:\n"
+" -h Το παρόν κείμενο βοήθειας\n"
+" -t Καθορισμός προσωρινού καταλόγου\n"
+" -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
+" -o=? Καθορισμός αυθαίρετης επιλογής παραμέτρου, πχ -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Δεν βρέθηκε η έκδοση του debconf. Είναι το debconf εγκατεστημένο;"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Αδύνατη η εύρεση του πακέτου %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+"Εσωτερικό Σφάλμα, η προσπάθεια επίλυσης του προβλήματος \"έσπασε\" κάποιο "
+"υλικό"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Υποστηριζόμενοι Οδηγοί:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Χρήση: apt-get [παράμετροι] εντολή\n"
+" apt-get [παράμετροι] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [παράμετροι] source pkg1 [pkg2 ...]\n"
+"\n"
+"η apt-get είναι μια απλή διασύνδεση για τη μεταφόρτωση και την\n"
+"εγκατάσταση πακέτων. Οι πιο συχνές εντολές είναι η update\n"
+"και η install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Ανάκτηση νέων καταλόγων πακέτων"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Διενέργεια αναβάθμισης"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Εγκατάσταση νέων πακέτων (χωρίς την επέκταση .deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Εγκατάσταση νέων πακέτων (χωρίς την επέκταση .deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Αφαίρεση πακέτων"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Αναβάθμιση διανομής, δες το apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Τήρηση των επιλογών του dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Ρύθμιση εξαρτήσεων χτισίματος για πακέτα πηγαίου κώδικα"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Καθαρισμός των μεταφορτωμένων αρχείων"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Καθαρισμός παλαιότερα μεταφορτωμένων αρχείων"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Εξακρίβωση για τυχόν σπασμένες εξαρτήσεις"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Μεταφόρτωση πακέτων πηγαίου κώδικα"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr ""
+"Θα πρέπει να καθορίσετε τουλάχιστον ένα πακέτο για να μεταφορτώσετε τον "
+"κωδικάτου"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Χρήση: apt-extracttemplates αρχείο1 [αρχείο2 ...]\n"
+"\n"
+"το apt-extracttemplates είναι ένα βοήθημα για να εξάγετε ρυθμίσεις \n"
+"και πρότυπα από πακέτα debian\n"
+"\n"
+"Επιλογές:\n"
+" -h Το παρόν κείμενο βοήθειας\n"
+" -t Καθορισμός προσωρινού καταλόγου\n"
+" -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
+" -o=? Καθορισμός αυθαίρετης επιλογής παραμέτρου, πχ -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Χρήση: apt-extracttemplates αρχείο1 [αρχείο2 ...]\n"
+"\n"
+"το apt-extracttemplates είναι ένα βοήθημα για να εξάγετε ρυθμίσεις \n"
+"και πρότυπα από πακέτα debian\n"
+"\n"
+"Επιλογές:\n"
+" -h Το παρόν κείμενο βοήθειας\n"
+" -t Καθορισμός προσωρινού καταλόγου\n"
+" -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
+" -o=? Καθορισμός αυθαίρετης επιλογής παραμέτρου, πχ -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "αλλά δεν είναι εγκατεστημένο"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Τα ακόλουθα ΝΕΑ πακέτα θα εγκατασταθούν:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "το %s είναι ήδη η τελευταία έκδοση.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "το %s είναι ήδη η τελευταία έκδοση.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Αποτυχία ανοίγματος του %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Ελέγξτε αν είναι εγκαταστημένο το πακέτο 'dpkg-dev'.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Άγνωστη εγγραφή πακέτου!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Ανάγνωση Λιστών Πακέτων"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Καθηλωμένα Πακέτα:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Καθηλωμένα Πακέτα:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Χαλασμένα πακέτα"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Ανάγνωση περιγραφής της τρέχουσας κατάσταση"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Κακή προκαθορισμένη ρύθμιση!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Πιέστε enter για συνέχεια."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Επιθυμείτε τη διαγραφή ήδη μεταφορτωμένων αρχείων .deb;"
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Προέκυψανσφάλματα κατά την αποσυμπίεση. Θα ρυθμίσω τα "
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "πακέτα που εγκαταστάθηκαν. Αυτό μπορεί να παράγει διπλά λάθη"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"ή σφάλματα που προκύπτουν από χαλασμένες εξαρτήσεις. Αυτό είναι εντάξει, "
+"μόνο τα λάθη"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"πριν από το μήνυμα αυτό έχει σημασία. Παρακαλώ διορθώστε τα και τρέξτε "
+"[I]nstall ξανά"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Σύμπτυξη Διαθέσιμων Πληροφοριών"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Ο κατάλογος επεκτάσεων του πακέτου είναι υπερβολικά μακρύς"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Σφάλμα επεξεργασίας του καταλόγου %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Ο κατάλογος επεκτάσεων των πηγών είναι υπερβολικά μακρύς"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Σφάλμα εγγραφής κεφαλίδων στο αρχείο περιεχομένων"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Σφάλμα επεξεργασίας περιεχομένων του %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Χρήση: apt-ftparchive [επιλογές] εντολή\n"
+"Εντολές: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"Το apt-ftparchive παράγει αρχεία περιεχομένων για τις αρχειοθήκες Debian\n"
+"Υποστηρίζει πολλές παραλλαγές παραγωγής, από απόλυτα αυτοματοποιημένες έως\n"
+"λειτουργικές αντικαταστάσεις για την dpkg-scanpackages και dpkg-scansources\n"
+"\n"
+"Το apt-ftparchive παράγει αρχεία Package από ένα σύνολο αρχείων .debs. Στο\n"
+"αρχείο Package περιέχονται όλα τα πεδία ελέγχου κάθε πακέτου καθώς και\n"
+"το μέγεθος τους και το MD5 hash. Υποστηρίζει την ύπαρξη αρχείου παράκαμψης\n"
+"για τη βεβιασμένη αλλαγή των πεδίων Priority (Προτεραιότητα) και Section\n"
+"(Τομέας).\n"
+"\n"
+"Με τον ίδιο τρόπο, το apt-ftparchive παράγει αρχεία πηγών (Sources) από μια\n"
+"ιεραρχία αρχείων .dsc. Η επιλογή --source-override μπορεί να χρησιμοποιηθεί\n"
+"για παράκαμψη των αρχείων πηγών src.\n"
+"\n"
+"Οι εντολές 'packages' και 'sources' θα πρέπει να εκτελούνται στον βασικό\n"
+"κατάλογο της ιεραρχίας.Το BinaryPath θα πρέπει να δείχνει στον αρχικό\n"
+"κατάλογο που θα ξεκινάει η αναδρομική αναζήτηση και το αρχείο παράκαμψης\n"
+"θα πρέπει να περιέχει τις επιλογές παράκαμψης. Το Pathprefix προστίθεται "
+"στα\n"
+"πεδία όνομάτων αρχείων, αν υπάρχει. Δείτε παράδειγμα χρήσης στην αρχειοθήκη\n"
+"πακέτων του Debian :\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Επιλογές:\n"
+" -h Αυτό το κείμενο βοηθείας\n"
+" --md5 Έλεγχος παραγωγής MD5\n"
+" -s=? αρχείο παράκαμψης πηγών\n"
+" -q Χωρίς έξοδο\n"
+" -d=? Επιλογή προαιρετικής βάσης δεδομένων cache\n"
+" --no-delink Αποσφαλμάτωση του delinking\n"
+" --contents Έλεγχος παραγωγής αρχείου περιεχομένων\n"
+" -c=? Χρήση αυτού του αρχείου ρυθμίσεων\n"
+" -o=? Ορισμός αυθαίρετης επιλογής ρύθμισης"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Δεν ταιριαξε καμία επιλογή"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Λείπουν μερικά αρχεία από την ομάδα πακέτων '%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Η βάση είναι κατεστραμμένη, το αρχείο μετονομάστηκε σε %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Η βάση δεν είναι ενημερωμένη, γίνεται προσπάθεια να αναβαθμιστεί το %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Το φορμά της βάσης δεν είναι έγκυρο. Εάν αναβαθμίσατε το apt σε νεότερη "
+"έκδοση, παρακαλώ αφαιρέστε και δημιουργήστε τη βάση εκ νέου."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Το άνοιγμά του αρχείου της βάσης %s: %s απέτυχε"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Αποτυχία ανάγνωσης του %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Η αρχειοθήκη δεν περιέχει πεδίο ελέγχου"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Αδύνατη η πρόσβαση σε δείκτη"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realoc - Αδυναμία εκχώρησης μνήμης"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Άγνωστος Αλγόριθμος Συμπίεσης '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Η συμπιεσμένη έξοδος του %s χρειάζεται καθορισμό συμπίεσης"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Αποτυχία κατά τη δημιουργία διασωλήνωσης IPC στην υποδιεργασία"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Αποτυχία αγκίστρωσης"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Συμπίεση απογόνου"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Εσωτερικό Σφάλμα, Αποτυχία δημιουργίας του %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "απέτυχε η Ε/Ε στην υποδιεργασία/αρχείο"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Αποτυχία ανάγνωσης κατά τον υπολογισμό MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Αδύνατο το άνοιγμα του %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Αποτυχία ανάγνωσης του αρχείου παράκαμψης %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Αδύνατη η ανάγνωση του καταλόγου %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Αδύνατη η εύρεση της κατάστασης του %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Σφάλματα στο αρχείο"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Αδύνατη η εύρεση του %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Αποτυχία ανεύρεσης"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Αποτυχία ανοίγματος του %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr "Αποσύνδεση %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr " Αποτυχία σύνδεσης του %s με το %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Αποσύνδεση ορίου του %sB hit.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Η αρχειοθήκη δεν περιέχει πεδίο πακέτων"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s δεν περιέχει εγγραφή παράκαμψης\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s συντηρητής είναι ο %s όχι ο %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s δεν έχει εγγραφή πηγαίας παράκαμψης\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s δεν έχει ούτε εγγραφή δυαδικής παράκαμψης\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Αναμονή επικεφαλίδων"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Ο διακομιστής http έστειλε μια άκυρη επικεφαλίδα απάντησης"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Ελαττωματική γραμμή επικεφαλίδας"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Ο διακομιστής http έστειλε μια άκυρη επικεφαλίδα Content-Length"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Ο διακομιστής http έστειλε μια άκυρη επικεφαλίδα Content-Range"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Ο διακομιστής http δεν υποστηρίζει πλήρως το range"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Άγνωστη μορφή ημερομηνίας"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Ελαττωματικά δεδομένα επικεφαλίδας"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Η σύνδεση απέτυχε"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Εσωτερικό Σφάλμα"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Αδύνατη η ανάγνωση της βάσης δεδομένων του cdrom %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Παρακαλώ χρησιμοποιείστε το apt-cdrom για να αναγνωριστεί αυτό το CD από το "
+"APT. Το apt-get update δε χρησιμεύει για να προσθέτει νέα CD"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Λάθος CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Αδυναμία απόσυναρμογής του CD-ROM στο %s, μπορεί να είναι σε χρήση."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Ο δίσκος δεν βρέθηκε."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Το αρχείο Δε Βρέθηκε"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Σύνδεση στο %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Σύνδεση στο %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Αδύνατη η δημιουργία υποδοχής για το %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Αδύνατη η αρχικοποίηση της σύνδεσης στο %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Απέτυχε"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Αδύνατη η σύνδεση στο %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Αδύνατη η σύνδεση στο %s:%s (%s), λήξη χρόνου σύνδεσης"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Σύνδεση στο %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Αδύνατη η εύρεση του '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Προσωρινή αποτυχία στην εύρεση του '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Κάτι παράξενο συνέβη κατά την εύρεση του '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Κάτι παράξενο συνέβη κατά την εύρεση του '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Αδύνατη η σύνδεση στο %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Αποτυχία εύρεσης της κατάστασης"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Μη έγκυρο URI, τα τοπικά URI δεν πρέπει να αρχίζουν με //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Σύνδεση στο σύστημα"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Αδύνατος ο καθορισμός του ονόματος του ομότιμου (peer)"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Αδύνατος ο καθορισμός του τοπικού ονόματος"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Ο διακομιστής αρνήθηκε την σύνδεση με μήνυμα: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Η εντολή USER απέτυχε, ο διακομιστής απάντησε: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Η εντολή PASS απέτυχε, ο διακομιστής απάντησε: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Ο διαμεσολαβητής έχει οριστεί αλλά χωρίς σενάριο εισόδου, το Acquire::ftp::"
+"ProxyLogin είναι άδειο"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Η εντολή '%s' στο σενάριο εισόδου απέτυχε, ο διακομιστής απάντησε: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Η εντολή TYPE απέτυχε, ο διακομιστής απάντησε: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Λήξη χρόνου σύνδεσης"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Ο διακομιστής έκλεισε την σύνδεση"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Το μήνυμα απάντησης υπερχείλισε την ενδιάμεση μνήμη."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Αλλοίωση του πρωτοκόλλου"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Αδύνατη η δημιουργία μιας υποδοχής (socket)"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Αδύνατη η σύνδεση υποδοχής δεδομένων, λήξη χρόνου σύνδεσης"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Αδύνατη η σύνδεση σε παθητική υποδοχή (socket)."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "Το getaddrinfo ήταν αδύνατο να δέσμευση υποδοχή παρακολούθησης"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Αδύνατη η πρόσδεση στην υποδοχή (socket)"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Αδύνατη η παρακολούθηση της υποδοχής (socket)"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Αδύνατος ο καθορισμός του ονόματος της υποδοχής (socket)"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Αδύνατη η αποστολή της εντολής PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Άγνωστη οικογένεια διευθύνσεων %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Το EPRT απέτυχε, ο διακομιστής απάντησε: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Λήξη χρόνου σύνδεσης στην υποδοχή δεδομένων"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Αδύνατη η αποδοχή συνδέσεων"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Πρόβλημα κατά το hashing του αρχείου"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Αδυναμία λήψης του αρχείου, ο διακομιστής απάντησε '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Λήξη χρόνου υποδοχής δεδομένων"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Αποτυχία κατά τη μεταφορά δεδομένων, ο διακομιστής απάντησε '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Επερώτηση"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Αδύνατη η εκτέλεση"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Βρέθηκε τουλάχιστον μια μη έγκυρη υπογραφή."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Εσωτερικό σφάλμα: Η υπογραφή είναι καλή, αλλά αδυναμία προσδιορισμού του "
+"αποτυπώματος?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Αδυναμία εκτέλεσης του '%s' για την επαλήθευση της υπογραφής (είναι "
+"εγκατεστημένο το gnupg;)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Άγνωστο σφάλμα κατά την εκτέλεση του apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Οι παρακάτω υπογραφές ήταν μη έγκυρες:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Οι παρακάτω υπογραφές δεν ήταν δυνατόν να επαληθευτούν επειδή δεν ήταν "
+"διαθέσιμο το δημόσιο κλειδί:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Σφάλμα στην εγγραφή στο αρχείο"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+"Σφάλμα στην ανάγνωση από το διακομιστή, το άλλο άκρο έκλεισε τη σύνδεση"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Σφάλμα στην ανάγνωση από το διακομιστή"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Σφάλμα στην εγγραφή στο αρχείο"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Η επιλογή απέτυχε"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Λήξη χρόνου σύνδεσης"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Σφάλμα στην εγγραφή στο αρχείο εξόδου"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Αποτυχία ορισμού του χρόνου τροποποίησης"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Η σύνδεση έκλεισε πρόωρα"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Μη έγκυρη επικεφαλίδα μέλος της αρχειοθήκης"
+
+#~ msgid "Removed %s"
+#~ msgstr "Αφαίρεσα το %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Το αρχείο πακέτου %s δεν είναι ενημερωμένο."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Κατεστραμμένα αρχεία ευρετηρίου πακέτων. Δεν υπάρχει πεδίο Filename: στο "
+#~ "πακέτο %s."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Άνοιγμα του αρχείου ρυθμίσεων %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Άνοιγμα του %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Ανεπίλυτες εξαρτήσεις. Δοκιμάστε με το --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Aν τρέξετε 'apt --fix-broken install' ίσως να διορθώσετε αυτά τα "
+#~ "προβλήματα:"
+
+#~ msgid "(not found)"
+#~ msgstr "(δε βρέθηκαν)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Καθήλωση Πακέτου: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Δεν υπάρχει διαθέσιμο δημόσιο κλειδί για τα ακολουθα κλειδιά:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Ο φάκελος %s έχει εκτραπεί"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "%s εξαρτήσεις για το %s δεν ικανοποιούνται επειδή το %s δεν επιτρέπεται "
+#~ "στο πακέτο %s"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%s εξαρτήσεις για το %s δεν ικανοποιούνται επειδή το πακέτο %s δεν βρέθηκε"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Αποτυχία ικανοποίησης %s εξαρτήσεων για το %s: Το εγκατεστημένο πακέτο %s "
+#~ "είναι νεώτερο"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%s εξαρτήσεις για το %s δεν ικανοποιούνται επειδή δεν υπάρχουν διαθέσιμες "
+#~ "εκδόσεις του πακέτου %s που να ικανοποιούν τις απαιτήσεις της έκδοσης"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%s εξαρτήσεις για το %s δεν ικανοποιούνται επειδή το πακέτο %s δεν έχει "
+#~ "υποψήφιαέκδοση"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Αποτυχία ικανοποίησης %s εξάρτησης για το %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Οι εξαρτήσεις χτισίματος για το %s δεν ικανοποιούνται."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Πρόβλημα κατά την αποσύνδεση του %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Αποτυχία αποσύνδεσης του %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Χρήση: apt-cache [επιλογές] εντολή\n"
+#~ " apt-cache [επιλογές] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "το apt-cache είναι ένα χαμηλού επιπέδου εργαλείο που χρησιμοποιείται για\n"
+#~ "το χειρισμό των δυαδικών αρχείων cache του APT, και να εξάγει "
+#~ "πληροφορίες\n"
+#~ "από αυτά\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Επιλογές:\n"
+#~ " -h Αυτό το κείμενο βοήθειας.\n"
+#~ " -p=? Η cache πακέτων.\n"
+#~ " -s=? Η cache πηγών.\n"
+#~ " -q Απενεργοποίηση του δείκτη προόδου.\n"
+#~ " -i Εμφάνιση μόνο των σημαντικών εξαρτήσεων για την εντολή unmet.\n"
+#~ " -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
+#~ " -o=? Χρήση μιας αυθαίρετη επιλογής ρυθμίσεων, πχ -o dir::cache=/tmp\n"
+#~ "Δείτε τις σελίδες man του apt-cache(8) και apt.conf(5) για πληροφορίες.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -d Download only - do NOT install or unpack archives\n"
+#~ " -s No-act. Perform ordering simulation\n"
+#~ " -y Assume Yes to all queries and do not prompt\n"
+#~ " -f Attempt to correct a system with broken dependencies in place\n"
+#~ " -m Attempt to continue if archives are unlocatable\n"
+#~ " -u Show a list of upgraded packages as well\n"
+#~ " -b Build the source package after fetching it\n"
+#~ " -V Show verbose version numbers\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-get(8), sources.list(5) and apt.conf(5) manual\n"
+#~ "pages for more information and options.\n"
+#~ " This APT has Super Cow Powers.\n"
+#~ msgstr ""
+#~ "Παράμετροι:\n"
+#~ " -h Αυτό το βοηθητικό κείμενο.\n"
+#~ " -q Χωρίς αναλυτική ένδειξη προόδου (κατάλληλο για αποθήκευση της "
+#~ "εξόδου)\n"
+#~ " -qq Χωρίς λεπτομέρειες εκτός από τα λάθη\n"
+#~ " -d Μεταφόρτωση μόνο - ΜΗΝ αποσυμπιέσεις ή εγκαταστήσεις αρχεία\n"
+#~ " -s Χωρίς ενέργεια. Διενέργεια προσομοίωσης βημάτων εγκατάστασης\n"
+#~ " -y Υπόθεσε Ναι για όλες τις ερωτήσεις και μην περιμένεις απάντηση\n"
+#~ " -f Προσπάθησε να συνεχίσεις αν αποτύχει ο έλεγχος ακεραιότητας\n"
+#~ " -m Προσπάθησε να συνεχίσεις αν υπάρχουν άγνωστα πακέτα\n"
+#~ " -u Εμφάνισε επίσης ένα κατάλογο από αναβαθμιζόμενα πακέτα\n"
+#~ " -b Χτίσε το πηγαίο πακέτο μετά την μεταφόρτωση του\n"
+#~ " -V Εμφάνισε λεπτομερείς αριθμούς εκδόσεων\n"
+#~ " -c=? Διάβασε αυτό το αρχείο ρυθμίσεων\n"
+#~ " -o=? Θέσε μια αυθαίρετη παράμετρο, πχ -o dir::cache=/tmp\n"
+#~ "Δείτε τις σελίδες εγχειριδίου apt-get(8), sources.list(5) και apt."
+#~ "conf(5)\n"
+#~ "για περισσότερες πληροφορίες και επιλογές.\n"
+#~ " This APT has Super Cow Powers.\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Χρήση: apt-sortpkgs [παράμετροι] file1 [file2 ...]\n"
+#~ "\n"
+#~ "το apt-sortpkgs είναι ένα απλό εργαλείο για να ταξινομήσετε αρχεία "
+#~ "πηγαίου κώδικα. Η επιλογή\n"
+#~ "-s δείχνει τον τύπο του αρχείου.\n"
+#~ "\n"
+#~ "Παράμετροι:\n"
+#~ " -h Αυτό το κείμενο βοήθειας\n"
+#~ " -s Χρήση του τύπου αρχείου\n"
+#~ " -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
+#~ " -o=? Θέσε μια αυθαίρετη παράμετρο,πχ -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Η απογονική διεργασία απέτυχε"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr ""
+#~ "Θα πρέπει να καθορίσετε τουλάχιστον ένα πακέτο για να μεταφορτώσετε τον "
+#~ "κωδικάτου"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Αποτυχία κατά τη δημιουργία διασωληνώσεων"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Αποτυχία κατά την εκτέλεση του gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s για %s είναι μεταγλωττισμένο σε %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Αποτυχία δημιουργίας του ΑΡΧΕΙΟΥ"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Ανάλυση URI)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Ανάλυση dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Ανάλυση dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Ανάλυση dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Ανάλυση dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Ανάλυση URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Απόλυτο dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Λάθος μορφή της γραμμής %lu στη λίστα πηγών %s (Ανάλυση dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Το πακέτο %s %s δε βρέθηκε κατά την επεξεργασία εξαρτήσεων του αρχείου"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Αδύνατη η εύρεση της κατάστασης της λίστας πηγαίων πακέτων %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Συλλογή Παροχών Αρχείου"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Αδύνατη η ανάλυση του αρχείου πακέτου %s (1)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Η εγγραφή κατασκευαστή %s δεν περιέχει ταυτότητα"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Συνολικός χώρος Εξαρτήσεων Εκδόσεων: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Δεν διαθέτετε αρκετό ελεύθερο χώρο στο %s"
+
+#~ msgid "Done"
+#~ msgstr "Ετοιμο"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Εγκατάλειψη της εγκατάστασης."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Εσωτερικό Σφάλμα, η διαδικασία αναβάθμισης χάλασε"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "Το %s δεν είναι έγκυρο πακέτο DEB."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Χρησιμοποιείται το σημείο προσάρτησης %s\n"
+#~ "Προσαρτάται το CD-ROM\n"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Αυτό δεν είναι ένα έγκυρο αρχείο DEB, δεν περιέχει το μέλος '%s', '%s' ή "
+#~ "'%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Ανόμοιο MD5Sum"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Αδύνατος ο εντοπισμός ενός αρχείου για το πακέτο %s. Αυτό ίσως σημαίνει "
+#~ "ότι χρειάζεται να διορθώσετε χειροκίνητα το πακέτο."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Αδυναμία εγγραφής στο αρχείο γεγονότων, λόγω αποτυχίας του openpyt() "
+#~ "(είναι προσαρτημένο το /dev/pts;)\n"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Άνοιγμα του αρχείου ρυθμίσεων %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Αποτυχία διαγραφής του %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Αδύνατη η δημιουργία του %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Αποτυχία εύρεσης της κατάστασης του %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Οι φάκελοι info και temp πρέπει να βρίσκονται στο ίδιο σύστημα αρχείων"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Αποτυχία αλλαγής καταλόγου στο φάκελο διαχείρισης %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Εσωτερικό Σφάλμα στην ανάκτηση ενός Ονόματος Πακέτου"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Ανάγνωση Λίστας Πακέτων"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Αποτυχία κατά το άνοιγμα του αρχείου λίστας '%sinfo/%s'.Εάν δε μπορείτε "
+#~ "να επαναφέρετε το αρχείο, τότε αδειάστε το και άμεσα εγκαταστήστε ξανά "
+#~ "την ίδια έκδοση του πακέτου!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Αποτυχία κατά την ανάγνωση του αρχείου λίστας %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Εσωτερικό Σφάλμα στη λήψη ενός Κόμβου"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Αποτυχία στο άνοιγμα του αρχείου παρακάμψεων %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Το αρχείο παρακάμψεων είναι κατεστραμμένο"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Μη έγκυρη γραμμή στο αρχείο παρακάμψεων: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Εσωτερικό Σφάλμα στην προσθήκη μιας παράκαμψης"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Η cache των πακέτων θα πρέπει να πρώτα να αρχικοποιηθεί"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Αποτυχία εύρεσης μιας κεφαλίδας Package:, γραμμή %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Ελαττωματική εγγραφή ConfFile στο αρχείο κατάστασης. Γραμμή %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Σφάλμα στην ανάλυση του MD5. Γραμμή %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Αδύνατη η αλλαγή σε %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Αποτυχία εντοπισμού ενός έγκυρου αρχείου control"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Αδύνατο το άνοιγμα διασωλήνωσης για το %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Σφάλμα ανάγνωσης από τη διεργασία %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Λήψη μίας και μόνης γραμμής επικεφαλίδας πάνω από %u χαρακτήρες"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "αποσυμπιεστής"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr ""
+#~ "αναγνώστηκαν, απομένουν ακόμη %lu για ανάγνωση αλλά δεν απομένουν άλλα"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "γράφτηκαν, απομένουν %lu για εγγραφή αλλά χωρίς επιτυχία"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Προέκευψε σφάλμα κατά την επεξεργασία του %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Προέκευψε σφάλμα κατά την επεξεργασία του %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Προέκευψε σφάλμα κατά την επεξεργασία του %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Εσωτερικό Σφάλμα, αδυναμία εντοπισμού του μέλους"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "Ε: Λίστα Ορισμάτων από Acquire::gpgv::Options πολύ μεγάλη. Έξοδος."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Λάθος μορφή της γραμμής %u στη λίστα πηγών %s (id κατασκευαστή)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Αδύνατη η εύρεση του συνόλου κλειδιών '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Αδύνατη η διόρθωση του αρχείου"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Επεξεργασία triggers για το %s"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Εφόσον ζητήσατε μια και μόνη λειτουργία, είναι πολύ πιθανόν ότι\n"
+#~ "το πακέτο αυτό δεν είναι εγκαταστάσιμο και θα πρέπει να κάνετε μια\n"
+#~ "αναφορά σφάλματος για αυτό το πακέτο."
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..292c9e2
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,5062 @@
+# Advanced Package Transfer - APT message translation catalog
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+#
+# Current translator:
+# - Manuel "Venturi" Porras Peralta <venturi@openmailbox.org>, 2014-2016
+#
+# Previous Translators and reviewers:
+# - Rafael Sepulveda <drs@gnulinux.org.mx>, 2002.
+# - Asier Llano Palacios <asierllano@infonegocio.com>
+# - Ruben Porras Campo <nahoo@inicia.es> 2004
+# - Javier Fernandez-Sanguino <jfs@debian.org> 2003, 2006-2008
+#
+# Traductores, si no conoce el formato PO, merece la pena leer la
+# documentación de gettext, especialmente las secciones dedicadas a este
+# formato, por ejemplo ejecutando:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Equipo de traducción al español, por favor lean antes de traducir
+# los siguientes documentos:
+#
+# - El proyecto de traducción de Debian al español
+# http://www.debian.org/intl/spanish/
+# especialmente las notas y normas de traducción en
+# http://www.debian.org/intl/spanish/notas
+#
+# Si tiene dudas o consultas sobre esta traducción consulte con el último
+# traductor (campo Last-Translator) y ponga en copia a la lista de
+# traducción de Debian al español (<debian-l10n-spanish@lists.debian.org>)
+# Manuel "Venturi" Porras Peralta <venturi@openmailbox.org>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.8.10\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2016-01-26 01:51+0100\n"
+"Last-Translator: Manuel \"Venturi\" Porras Peralta <venturi@openmailbox."
+"org>\n"
+"Language-Team: Español; Castellano <debian-l10n-spanish@lists.debian.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-POFile-SpellExtra: BD getaddrinfo dist show xvcg Filename sources cachés\n"
+"X-POFile-SpellExtra: dumpavail apport scanpackages yes pts URIs upgrade\n"
+"X-POFile-SpellExtra: Hash TAR mmap fix Immediate li source add Pathprefix\n"
+"X-POFile-SpellExtra: ftparchive policy main URIS qq Resolve Incoming\n"
+"X-POFile-SpellExtra: NewFileVer depends get libc GPG URI sdiversions\n"
+"X-POFile-SpellExtra: Length Limit PASS ConfFile NewVersion showpkg IPC\n"
+"X-POFile-SpellExtra: Super unmet APT registrable NewPackage AddDiversion\n"
+"X-POFile-SpellExtra: dists release dselect dir Hmmm debconf force dump ej\n"
+"X-POFile-SpellExtra: list Section GraphViz Priority FindPkg gencaches\n"
+"X-POFile-SpellExtra: Valid remove Ign DEB PORT LoopBreak tmp ftp\n"
+"X-POFile-SpellExtra: AutoRemover stats AF Until delink unmarkauto firms\n"
+"X-POFile-SpellExtra: ref Dpkg tar autoremove Obj missing update binary\n"
+"X-POFile-SpellExtra: sobreescribe proxy org packages debs generate MD\n"
+"X-POFile-SpellExtra: search ProxyLogin limin AllUpgrade Md Range dotty Pre\n"
+"X-POFile-SpellExtra: NewFileDesc empaquetamiento root realloc gpgv apt\n"
+"X-POFile-SpellExtra: pkgnames Release BinaryPath old DeLink showauto\n"
+"X-POFile-SpellExtra: pkgProblemResolver parseable nstall\n"
+"X-POFile-SpellExtra: desempaquetamiento script DESACTUALIZARÁN\n"
+"X-POFile-SpellExtra: InstallPackages PreDepende lu sobreescribir Packages\n"
+"X-POFile-SpellExtra: shell desincronizado override MaxReports cdrom dpkg\n"
+"X-POFile-SpellExtra: socket info md Force temp dep CollectFileProvides\n"
+"X-POFile-SpellExtra: spartial scansources Only dev purge nfs Intro install\n"
+"X-POFile-SpellExtra: deb Sobreescribiendo openpty USER UsePackage vd\n"
+"X-POFile-SpellExtra: markauto DB DropNode Content rdepends conf zu hash\n"
+"X-POFile-SpellExtra: check contents paq Err Sources MMap lih decompresor\n"
+"X-POFile-SpellExtra: build config EPRT http Package liseg dscs Remove\n"
+"X-POFile-SpellExtra: sortpkgs sB man extracttemplates bzr potato clear\n"
+"X-POFile-SpellExtra: autoclean showsrc desactualizados clean gzip TYPE\n"
+"X-POFile-SpellExtra: sinfo Acquire\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Firma del archivo inválida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Error leyendo la cabecera de miembro del archivo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Cabecera de miembro del archivo inválida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "El archivo es muy pequeño"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Fallo al leer las cabeceras del archivo"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "No se pudo encontrar un compresor configurado para «%s»"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Archivo dañado"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr ""
+"Se produjo un fallo al calcular la suma de control de tar, archivo dañado"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Cabecera del TAR tipo %u desconocida, miembro %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Este no es un archivo DEB válido, falta el miembro «%s»"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Error interno, no se pudo localizar el miembro %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Archivo de control inanalizable"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Fallo al escribir el archivo %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Fallo al cerrar el archivo %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "La trayectoria %s es demasiado larga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Desempaquetando %s más de una vez"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "El directorio %s está desviado"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "El paquete está tratando de escribir al objetivo desviado %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "La ruta de la desviación es demasiado larga"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Fallo al leer %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Fallo al renombrar %s a %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Se está reemplazando el directorio %s por un no-directorio"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Fallo al localizar el nodo en su posición en el hash"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "La ruta es demasiado larga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Sobreescribiendo concordancia del paquete sin versión para %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "El archivo %s/%s sobreescribe al que está en el paquete %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "No se pudo leer %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "No se pudo leer %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode llamado en un nodo todavía conectado"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "¡Fallo al localizar el elemento enlazado!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Fallo al asignar una desviación"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Error interno en AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Intentando sobreescribir una desviación, %s -> %s y %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Doble suma de desviación %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Fichero de configuración duplicado %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"No se puede actualizar de un repositorio como este de forma segura y por "
+"tanto está deshabilitado por omisión."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Los datos de un repositorio como este no se pueden autenticar y por tanto su "
+"uso es potencialmente peligroso."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Vea la página de manual apt-secure(8) para los detalles sobre la creación de "
+"repositorios y la configuración de usuarios."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "El repositorio «%s» ya no está firmado."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "El repositorio «%s» no tiene un fichero de Publicación."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Normalmente no está permitido, pero se ha dado la opción «Acquire::"
+"AllowDowngradeToInsecureRepositories» para anularlo."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "El repositorio «%s» no está firmado."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "El repositorio «%s» no tiene un fichero de Publicación."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr ""
+"Omitiendo el uso del fichero configurado «%s» ya que el repositorio «%s» "
+"proporciona solo información de seguridad débil para ello"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "No se pudo leer el enlace %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "La suma hash difiere"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "falló el cambio de nombre, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "El tamaño difiere"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Formato inválido de fichero"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Error de firma"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"El fichero firmado en claro no es válido, «%s» obtenido (¿la red requiere "
+"autenticación?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Se produjo un error durante la verificación de las firmas. El repositorio no "
+"está actualizado y se utilizarán los ficheros de índice antiguos. Error de "
+"GPG: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Error de GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Omitiendo el uso del fichero configurado «%s» ya que el repositorio «%s» no "
+"admite la arquitectura «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Omitiendo el uso del fichero configurado «%s» ya que el repositorio «%s» no "
+"admite la arquitectura «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Omitiendo el uso del fichero configurado «%s» ya que el repositorio «%s» no "
+"admite la arquitectura «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Omitiendo el uso del fichero configurado «%s» ya que el repositorio «%s» "
+"proporciona solo información de seguridad débil para ello"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"El archivo «Release» para %s está caducado (inválido desde %s). No se "
+"aplicará ninguna actualización de este repositorio."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"El archivo «Release» para %s está caducado (inválido desde %s). No se "
+"aplicará ninguna actualización de este repositorio."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Distribución conflictiva: %s (se esperaba %s, pero se obtuvo %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Fallo al obtener %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"No se pudo localizar un archivo para el paquete %s. Esto puede significar "
+"que necesita arreglar manualmente este paquete (debido a que falta una "
+"arquitectura)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+"No se puede encontrar una fuente para descargar la versión «%s» de «%s»"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "No está disponible el informe de cambios para %s=%s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "No se pudo encontrar el método %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "¿Está instalado el paquete %s?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "El método %s no se inició correctamente"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Inserte el disco con la etiqueta: «%s» en la unidad «%s» y pulse [Enter]."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Falta el directorio de listas %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Falta el directorio de archivos %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "No se pudo bloquear el directorio %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"No existe el usuario de entorno seguro «%s», no se pueden ignorar los "
+"privilegios"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Can't drop privileges for downloading as file '%s' couldn't be accessed "
+#| "by user '%s'."
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"No se podrán ignorar los privilegios para descargar mientras no se pueda "
+"acceder a «%s» con el usuario «%s»."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "No se admite la limpieza de «%s»"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Descargando fichero %li de %li (falta %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Descargando fichero %li de %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"El paquete %s necesita ser reinstalado, pero no se encuentra el archivo para "
+"ello."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Error, pkgProblemResolver::Resolve generó cortes, esto puede deberse a "
+"paquetes retenidos."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"No se pudieron corregir los problemas, usted ha retenido paquetes rotos."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"No se pudieron analizar o abrir las listas de paquetes o el archivo de "
+"estado."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Tal vez deba ejecutar «apt-get update» para corregir estos problemas"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "No se pudieron leer las listas de fuentes."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Error de compilación de expresiones regulares - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "No se encontró la distribución «%s» para «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "No se encontró la versión «%s» para «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "No se pudo encontrar la tarea «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "No se pudo encontrar ningún paquete con la expresión regular «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "No se pudo encontrar ningún paquete usando «*» con «%s»"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "No se ha podido localizar el paquete %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"No se pueden seleccionar distintas versiones del paquete «%s» porque es "
+"puramente virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"No se puede seleccionar la última versión del paquete «%s» dado que es "
+"puramente virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"No se puede seleccionar la versión candidata del paquete %s dado que no "
+"tiene candidatos"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"No se puede seleccionar la versión instalada del paquete «%s» puesto que no "
+"está instalado"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"No se puede seleccionar una versión instalada o candidata para el paquete "
+"«%s» dado que éste no tiene ninguna de éstas"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Línea %u demasiado larga en la lista de fuentes %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Desmontando el CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Usando el punto de montaje %s del CD-ROM\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Esperando el disco...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montando el CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificando... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Etiqueta guardada: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Buscando en el disco ficheros de índices...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Se encontraron %zu índices de paquetes, %zu índices de fuentes, %zu índices "
+"de traducción y %zu firmas\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"No se pudo localizar ningún archivo de paquete, ¿quizás este no sea un disco "
+"de Debian o sea de otra arquitectura?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Se encontró la etiqueta: «%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Ese no es un nombre válido, inténtelo de nuevo.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Este disco se llama: \n"
+"«%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Copiando las listas de paquetes..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Escribiendo nueva lista de fuentes\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Las entradas de la lista de fuentes para este disco son:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "No se pudo cambiar a %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "No se pudo leer %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "No se puede obtener información del punto de montaje %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "No pude montar el cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"No tiene sentido la opción de línea de órdenes «%c» [de %s] combinada con "
+"las otras opciones."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"No tiene sentido la opción de línea de órdenes %s combinada con las otras "
+"opciones"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "La opción de línea de órdenes %s no es un booleano"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "La opción %s necesita un argumento."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Opción %s: La especificación del elemento de configuración debe tener un "
+"=<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "La opción %s exige un argumento entero, no «%s»"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opción «%s» demasiado larga"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "El sentido %s no se entiende, pruebe verdadero o falso."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operación inválida: %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Tipo de abreviación no reconocida: «%c»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Error de sintaxis %s:%u: No hay un nombre al comienzo del bloque."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Error de sintaxis %s:%u: Marca mal formada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Error de sintaxis %s:%u: Basura extra después del valor"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Error de sintaxis %s:%u: Las directivas sólo se pueden poner en el primer "
+"nivel"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Error de sintaxis %s:%u: Demasiadas inclusiones anidadas"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Error de sintaxis %s:%u: Incluido desde aquí"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Error de sintaxis %s:%u: Directiva «%s» no soportada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Error de sintaxis %s:%u: la directiva «clear» tiene que incluir un árbol de "
+"opciones como argumento"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Error de sintaxis %s:%u: Basura extra al final del archivo"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Se produjo un problema al desligar el fichero %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "No se utilizan bloqueos para el fichero de bloqueo de sólo lectura %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "No se pudo abrir el fichero de bloqueo «%s»"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "No se utilizan bloqueos para el fichero de bloqueo de montaje nfs %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "No se pudo bloquear %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+"La lista de los ficheros no se pudo crear, ya que «%s» no es un directorio"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Omitiendo «%s» del directorio «%s», ya que no es un fichero regular"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Omitiendo fichero «%s» del directorio «%s», ya que no tiene extensión de "
+"nombre de fichero"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Omitiendo el fichero «%s» del directorio «%s», ya que tiene una extensión de "
+"nombre de fichero no válida"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Se esperaba %s pero no estaba presente"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "El subproceso %s recibió un fallo de segmentación."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "El subproceso %s recibió la señal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "El subproceso %s devolvió un código de error (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "El subproceso %s terminó de forma inesperada"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Error de lectura"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Error de escritura"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Se produjo un problema al cerrar el fichero gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Fin de fichero inesperado"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "No se pudo crear el subproceso IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "No se pudo ejecutar el compresor "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "No pude abrir el fichero %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "No se pudo abrir el descriptor de fichero %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "leídos, todavía quedaban por leer %llu pero no queda ninguna"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "escritos, todavía quedaban por escribir %llu pero no se pudo hacer"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Se produjo un problema al cerrar el fichero %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Se produjo un problema al renombrar el fichero %s a %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Se produjo un problema al sincronizar el fichero"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "No pude leer %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "No se pudo escribir en %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "No puedo hacer mmap de un fichero vacío"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "No se puede hacer mmap de %llu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "No pude duplicar el descriptor de fichero %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "No se pudo cerrar «mmap»"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "No pude sincronizar «mmap»"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "No pude hacer mmap de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Falló al truncar el archivo"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"La asignación dinámica MMap no tiene más espacio. Por favor, incrementa el "
+"valor de «APT::Cache-Start». El valor actual es: %lu (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"No se pudo incrementar el tamaño del MMap dado que se ha alcanzado ya el "
+"límite de %lu bytes."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"No se pudo incrementar el tamaño de MMap dado que el usuario ha "
+"deshabilitado el crecimiento automático."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... ¡Error!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Hecho"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Selección %s no encontrada"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+"El objetivo %s quiere obtener el mismo fichero (%s) que %s del origen %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "El objetivo %s (%s) está configurado varias veces en %s y %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "No se pudo leer el archivo «Release» %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "No se encontraron secciones en el archivo «Release» %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "No existe una entrada «Hash» en el archivo «Release» %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"No existe una entrada «Hash» en el archivo «Release» %s, lo cual se "
+"considera suficientemente robusto para propósitos de seguridad"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Entrada «%s» inválida en el archivo «Release» %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"Valores establecidos en conflicto para la opción %s según el origen %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+"Valor establecido inválido para la opción %s según el origen %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Valores establecidos en conflicto para la opción %s según el origen %s %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "No se pudo analizar el archivo de paquetes %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"No se pudo bloquear el directorio de administración (%s), ¿quizás haya algún "
+"otro proceso utilizándolo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"No se pudo bloquear el directorio de administración (%s), ¿está como "
+"superusuario?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"se interrumpió la ejecución de dpkg, debe ejecutar manualmente «%s» para "
+"corregir el problema"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"No se pudo bloquear el directorio de administración (%s), ¿quizás haya algún "
+"otro proceso utilizándolo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"No se pudo bloquear el directorio de administración (%s), ¿está como "
+"superusuario?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "No bloqueado"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Preparando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Preparándose para configurar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Preparándose para eliminar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Preparándose para eliminar completamente %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Se detectó la desaparición de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Ejecutando disparador post-instalación %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s instalado"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Configurando %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Falta el directorio «%s»."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "No se pudo abrir el fichero «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Desempaquetando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Instalando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Eliminando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Borrando completamente %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s se borró completamente"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "No se pudo escribir el informe (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "¿Está montado «/dev/pts»?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Se interrumpió la operación antes de que pudiera terminar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"No se escribió ningún informe «apport» porque ya se ha alcanzado el valor de "
+"«MaxReports»"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problemas de dependencias - dejando sin configurar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"No se escribió un informe «apport» porque el mensaje de error indica que es "
+"un mensaje de error asociado a un fallo previo."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"No se escribió un informe «apport» porque el mensaje de error indica que el "
+"error es de disco lleno"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"No se escribió un informe «apport» porque el mensaje de error indica un "
+"error de memoria excedida"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"No se escribió un informe «apport» porque el mensaje de error indica un "
+"problema en el sistema local"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"No se escribió un informe «apport» porque el mensaje de error indica un "
+"error de E/S de dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Creando árbol de dependencias"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versiones candidatas"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Generación de dependencias"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Leyendo la información de estado"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "No se pudo abrir el fichero de estado %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Falló la escritura del fichero de estado temporal %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Enviar situación al solucionador"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Enviar petición al solucionador"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Preparar para recibir una solución"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Falló solucionador externo sin un mensaje de error apropiado"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Ejecutar solucionador externo"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Ejecutar solucionador externo"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Enviar petición al solucionador"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Enviar situación al solucionador"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "Falló solucionador externo sin un mensaje de error apropiado"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i registros escritos.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i registros escritos con %i ficheros de menos.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i registros escritos con %i ficheros mal emparejados\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"%i registros escritos con %i fichero de menos y %i ficheros mal emparejados\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "No se pudo encontrar un registro de autenticación para: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "La suma hash difiere para: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "No se admite el sistema de paquetes «%s»"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "No se pudo determinar un tipo de sistema de paquetes adecuado"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Progreso: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Ejecutando dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"No se pudo realizar la configuración inmediata de «%s». Consulte la página "
+"de manual con «man 5 apt.conf» bajo «APT::Immediate-Configure» para más "
+"información. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "No se pudo configurar «%s»"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Esta ejecución de la instalación requiere eliminar temporalmente el paquete "
+"esencial %s debido a un bucle de Conflictos/Pre-Dependencias. Normalmente "
+"esto es malo, pero si quiere hacerlo de todas formas, active la opción |APT::"
+"Force-LoopBreak»."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Caché de paquetes vacía."
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "El fichero de caché de paquetes está dañado"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "El fichero de caché de paquetes es una versión incompatible"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Esta versión de APT no admite el sistema de versiones «%s»"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+"La caché de paquetes se creó para una arquitectura diferente: %s contra %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+"El fichero de caché de paquetes está dañado, la suma de comprobación está mal"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Depende"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "PreDepende"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Sugiere"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Entra en conflicto"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recomienda"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Reemplaza"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Rompe"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Mejora"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Hace obsoleto"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "importante"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "requiere"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "estándar"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "La caché tiene una versión incompatible de sistema de versiones"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Se produjo un error mientras se procesaba %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Excedió la cantidad de nombres de paquetes que admite este APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Excedió la cantidad de versiones que admite este APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Excedió la cantidad de descripciones que admite este APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Excedió la cantidad de dependencias que admite este APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Leyendo lista de paquetes"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Error de E/S al guardar la caché fuente"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "El tipo de fichero de índice «%s» no se admite"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"El valor «%s» no es válido para APT::Default-Release ya que dicha "
+"distribución no está disponible en las fuentes"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Registro inválido en el archivo de preferencias %s, no tiene cabecera "
+"«Package»"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "No se entendió el pin tipo %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: El valor %s está fuera del rango de las prioridades de pin válido (%d a "
+"%d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "No hay prioridad especificada para pin (o es cero)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Entrada %u mal especificada en %s fichero %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Línea %u mal formada en la lista de fuentes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Tipo «%s» desconocido en la línea %u de la lista de fuentes %s"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Predominio %u mal especificado en la lista de fuentes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Tipo «%s» desconocido en el bloque %u de la lista de fuentes %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Se ha suministrado el fichero no admitido %s en la línea de órdenes"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Debe poner algunos URIs fuente («source») en su sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "No se pudo convertir %s a entero: fuera de rango"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"No se han podido descargar algunos archivos de índice, se han omitido, o se "
+"han utilizado unos antiguos en su lugar."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Calculando la actualización"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Obj:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Des:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Err:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Descargados %sB en %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Trabajando]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Cambio de medio: Inserte el disco etiquetado como\n"
+" «%s»\n"
+"en la unidad «%s» y pulse [Enter]\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Corrigiendo dependencias..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " falló."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "No se pueden corregir las dependencias"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "No se puede minimizar el conjunto de actualización"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Listo"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Tal vez quiera ejecutar «apt --fix-broken install» para corregirlo."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dependencias incumplidas. Intente «apt --fix-broken install» sin paquetes (o "
+"especifique una solución)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Ordenando"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Nota, seleccionando «%s» para la tarea «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Nota, seleccionando «%s» para el global «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Nota, seleccionando «%s» para la expresión regular «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "El paquete %s es un paquete virtual provisto por:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr "[Instalado]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [No es la versión candidata]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Necesita seleccionar explícitamente uno para instalar."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"El paquete %s no está disponible, pero algún otro paquete hace referencia\n"
+"a él. Esto puede significar que el paquete falta, está obsoleto o sólo se\n"
+"encuentra disponible desde alguna otra fuente\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Sin embargo, los siguientes paquetes lo reemplazan:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "El paquete «%s» no tiene un candidato para la instalación"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "No pueden eliminarse los paquetes virtuales como «%s»\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"El paquete «%s» no está instalado, no se eliminará. ¿Quiso decir «%s»?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "El paquete «%s» no está instalado, no se eliminará\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Nota, seleccionando «%s» en lugar de «%s»\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Órdenes más utilizadas:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Vea %s para más información sobre las órdenes disponibles."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Las opciones y sintaxis de configuración se detallan en apt.conf(5).\n"
+"Puede encontrar información sobre cómo configurar las fuentes en sources."
+"list(5).\n"
+"Las elecciones de versión y de paquetes se pueden expresar por medio de "
+"apt_preferences(5).\n"
+"Los detalles de la seguridad están disponibles en apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Este APT tiene poderes de Super Vaca."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Este Ayudante de APT tiene poderes de Super Llanto."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes está desactualizado, en su lugar utilice una de las opciones que "
+"empiezan por --allow."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "No se encontró ningún paquete"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ATENCIÓN: ¡No se han podido autenticar los siguientes paquetes!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Aviso de autenticación ignorado.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Algunos paquetes no se pueden autenticar"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "¿Instalar estos paquetes sin verificación?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Había paquetes sin autenticar y se utilizó -y sin --allow-unauthenticated"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "No se pudo determinar el espacio libre en %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "No tiene suficiente espacio libre en %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "No se puede bloquear el directorio de descarga"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"No se pudieron instalar algunos paquetes. Esto puede significar que\n"
+"usted pidió una situación imposible o, si está usando la distribución\n"
+"inestable, que algunos paquetes necesarios aún no se han creado o se\n"
+"han sacado de «Incoming»."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "La siguiente información puede ayudar a resolver la situación:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Paquetes rotos"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"No se pudieron obtener algunos archivos, ¿quizás deba ejecutar «apt-get "
+"update» o deba intentarlo de nuevo con --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Error interno, ¡se llamó a «InstallPackages» con paquetes rotos!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"Se necesita eliminar paquetes, pero está desactivada la posibilidad de "
+"eliminar."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Se eliminaron paquetes esenciales y se utilizó -y sin --allow-remove-"
+"essential."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Se instalaron versiones anteriores de algunos paquetes y se utilizó -y sin --"
+"allow-downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Se cambiaron los paquetes retenidos y se utilizó -y sin --allow-change-held-"
+"packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Error interno, no terminó la ordenación"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Qué extraño... Los tamaños no concuerdan, mande un correo a apt@packages."
+"debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Se necesita descargar %sB/%sB de archivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Se necesita descargar %sB de archivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Se utilizarán %sB de espacio de disco adicional después de esta operación.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Se liberarán %sB después de esta operación.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Se especificó «Trivial Only» pero esta no es una operación trivial."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Sí, ¡haga lo que le digo!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Está a punto de hacer algo potencialmente dañino\n"
+"Para continuar escriba la frase «%s»\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Anulado."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "¿Desea continuar?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "No se pudieron descargar algunos archivos"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Descarga completa y en modo de solo descarga"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "Actualmente no se admite --fix-missing ni intercambio de medio"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "No se pudieron corregir los paquetes que faltan."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Anulando la instalación."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"El paquete mostrado a continuación ha desaparecido de su sistema\n"
+"dado que otros paquetes han sobrescrito todos sus paquetes:"
+msgstr[1] ""
+"Los paquetes mostrados a continuación han desaparecido de su sistema\n"
+"dado que otros paquetes han sobreescrito todos sus paquetes:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Nota: dpkg realiza esto de forma automática y a propósito."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Se supone que no se van a eliminar cosas, no se puede iniciar «AutoRemover»"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Parece que «AutoRemover» destruyó algo y eso no debería haber pasado.\n"
+"Envíe un informe de errores al programa apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Error interno, «AutoRemover» rompió cosas"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"El paquete indicado a continuación se instaló de forma automática y ya no es "
+"necesario."
+msgstr[1] ""
+"Los paquetes indicados a continuación se instalaron de forma automática y ya "
+"no son necesarios."
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Se instaló %lu paquete de forma automática y ya no es necesario.\n"
+msgstr[1] ""
+"Se instalaron %lu paquetes de forma automática y ya no son necesarios.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Utilice «%s» para eliminarlo."
+msgstr[1] "Utilice «%s» para eliminarlos."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "Se instalarán los siguientes paquetes adicionales:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Paquetes sugeridos:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Paquetes recomendados:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Omitiendo %s, ya está instalado y no está activada la actualización.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Omitiendo %s, no está instalado y solo se están solicitando "
+"actualizaciones.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "No es posible reinstalar el paquete %s, no se pudo descargar.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ya está en su versión más reciente (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "fijado %s como instalado manualmente.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versión seleccionada «%s» (%s) para «%s»\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versión seleccionada «%s» (%s) para «%s» debido a «%s»\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Listando"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "Hay %i versión adicional. Utilice la opción «-a» para verla"
+msgstr[1] "Hay %i versiones adicionales. Utilice la opción «-a» para verlas"
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"NOTA: ¡Esto es sólo una simulación!\n"
+" %s necesita privilegios de administrador para la ejecución real.\n"
+" Tenga también en cuenta que se han desactivado los bloqueos,\n"
+" ¡no dependa la situación real actual de la relevancia de esto!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "desconocido"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[instalado, actualizable a: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[instalado, local]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[instalado, autodesinstalable]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[instalado, automático]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[instalado]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[actualizable desde: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[configuración-residual]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "pero %s está instalado"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "pero %s va a ser instalado"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "pero no es instalable"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "pero es un paquete virtual"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "pero no va a instalarse"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "pero no está instalado"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " o"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Los siguientes paquetes tienen dependencias incumplidas:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Se instalarán los siguientes paquetes NUEVOS:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Los siguientes paquetes se ELIMINARÁN:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Los siguientes paquetes se han retenido:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Se actualizarán los siguientes paquetes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Se DESACTUALIZARÁN los siguientes paquetes:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Se cambiarán los siguientes paquetes retenidos:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (por %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ATENCIÓN: Se van a eliminar los siguientes paquetes esenciales.\n"
+"¡NO debe hacerse a menos que sepa exactamente lo que está haciendo!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu actualizados, %lu nuevos se instalarán, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstalados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu desactualizados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu para eliminar y %lu no actualizados.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu no instalados del todo o eliminados.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[S/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[s/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "S"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Debe proporcionar al menos un patrón de búsqueda"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Buscar en todo el texto"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "Hay %i registro adicional. Utilice la opción «-a» para verlo."
+msgstr[1] "Hay %i registros adicionales. Utilice la opción «-a» para verlos."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "no es un paquete real (virtual)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Archivos de paquetes:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Caché fuera de sincronismo, no se puede hacer x-ref a un archivo de paquetes"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Paquetes con pin:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s con prioridad %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalados: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidato: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ninguno)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabla de versión:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "No se pudo encontrar ningún paquete para la arquitectura «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "No se pudo encontrar el paquete «%s» en la versión «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "No se pudo encontrar el paquete «%s» en la versión de publicación «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Escogiendo «%s» como paquete fuente en lugar de «%s»\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "No se pudo encontrar la versión «%s» del paquete «%s»"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Debe especificar al menos un paquete para obtener su código fuente"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "No se pudo encontrar el paquete de fuentes para %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"NOTA: el empaquetamiento de «%s» se mantiene en el sistema de control de "
+"versiones «%s» en:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Utilice:\n"
+"%s\n"
+"para obtener las últimas actualizaciones (posiblemente no publicadas aún) "
+"del paquete.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Omitiendo el fichero ya descargado «%s»\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Se necesita descargar %sB/%sB de archivos fuente.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Se necesita descargar %sB de archivos fuente.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Fuente obtenida %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "No se pudieron obtener algunos archivos."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+"Omitiendo desempaquetamiento de paquetes fuente ya desempaquetados en %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Falló la orden de desempaquetamiento «%s».\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Compruebe que el paquete «dpkg-dev» esté instalado.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Falló la orden de construcción «%s».\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "No se pudo obtener información de dependencias de construcción para %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s no tiene dependencias de construcción.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"No hay información disponible de arquitectura para %s. Vea apt.conf(5) APT::"
+"Arquitecturas para la configuración"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Debe especificar al menos un paquete para verificar sus dependencias de "
+"construcción"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+"Nota, se está utilizando «%s» para obtener las dependencias de compilación\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+"Nota, utilizando el fichero «%s» para obtener las dependencias de "
+"construcción\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "No se pudieron procesar las dependencias de construcción"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Fallo al analizar %s. ¿Editar de nuevo?"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "El fichero «%s» cambió, ejecute «apt-get update».\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "El paquete %s versión %s tiene dependencias incumplidas:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "La orden de actualización no necesita argumentos"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"Se puede actualizar %i paquete. Ejecute «apt list --upgradable» para verlo.\n"
+msgstr[1] ""
+"Se pueden actualizar %i paquetes. Ejecute «apt list --upgradable» para "
+"verlos.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Todos los paquetes están actualizados."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "«%s» no necesita argumentos"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Nombres de paquetes totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Estructuras de paquetes totales: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Paquetes normales: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Paquetes virtuales puros: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Paquetes virtuales únicos: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Paquetes virtuales mixtos: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Faltan: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Versiones diferentes totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Descripciones diferentes totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Dependencias totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Relaciones versión/archivo totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Relaciones descripción/archivo totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Mapeo Total de Provisiones: "
+
+# globbed -> globalizadas ? (jfs)
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Cadenas globalizadas totales: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Espacio desperdiciado total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Espacio registrado total: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Esta orden está desfasada. Utilice «apt-mark showauto» en su lugar."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Uso: apt-cache [opciones] orden\n"
+" apt-cache [opciones] show paq1 [paq2 ...]\n"
+"\n"
+"apt-cache solicita y muestra la información disponible sobre los paquetes\n"
+"instalados y los instalables. Funciona exclusivamente con los datos "
+"obtenidos\n"
+"en el caché local mediante la orden «update», como «apt-get». Por tanto, \n"
+"la información mostrada puede estar desactualizada si la última "
+"actualización\n"
+"se hizo hace mucho, pero a cambio apt-cache funciona independientemente de "
+"la\n"
+"disponibilidad de las fuentes configuradas (por ejemplo, sin conexión).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Muestra la información de fuentes"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Busca en la lista de paquetes según un patrón de expresión regular"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Muestra la información de dependencias en bruto para el paquete"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Muestra la información de dependencias inversas del paquete"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Muestra un registro legible para el paquete"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Lista los nombres de todos los paquetes en el sistema"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Muestra parámetros de las normas"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Proporcione un nombre para este disco, como pueda ser «Debian 5.0.3 Disco 1»"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Introduzca un disco en la unidad y pulse [Enter]"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "No se pudo montar «%s» como «%s»"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"No se pudo detectar automáticamente ningún CD-ROM o no está usando el punto "
+"de montaje predeterminado.\n"
+"Puede intentar la opción --cdrom para establecer el punto de montaje del CD-"
+"ROM.\n"
+"Vea «man apt-cdrom» para más información sobre la autodetección y el punto "
+"de montaje del CD-ROM."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Repita este proceso para el resto de los CDs del conjunto."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Uso: apt-cdrom [opciones] orden\n"
+"\n"
+"apt-cdrom se utiliza para añadir CDROM's, memorias flash USB y otros tipos "
+"de\n"
+"medios desmontables como orígenes de paquetes a APT. El punto de montaje y "
+"la \n"
+"información sobre el dispositivo se obtienen de apt.conf(5), udev(7) y "
+"fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumentos no emparejados"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Uso: apt-config [opciones] orden\n"
+"\n"
+"apt-config es una interfaz para leer el archivo de configuración utilizado\n"
+"por todas las herramientas de APT, pensada para depuración y para guiones.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "obtener valores de configuración mediante la evaluación del intérprete"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "mostrar la configuración activa establecida"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Uso: apt-extracttemplates fichero1 [fichero2 ...]\n"
+"\n"
+"apt-extracttemplates se utiliza para extraer los ficheros de\n"
+"configuración y de plantilla de los paquetes debian. Lo utiliza\n"
+"principalmente debconf(1) para realizar las preguntas de configuración\n"
+"previas a la instalación de los paquetes.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "No se puede encontrar la versión de debconf. ¿Está debconf instalado?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "No se pudo encontrar el paquete %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "fijado %s como instalado automáticamente.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Esta orden está desfasada. Utilice «apt-mark auto» y «apt-mark manual» en su "
+"lugar."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+"Error interno, el sistema de solución de problemas rompió algunas cosas"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Módulos admitidos:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Uso: apt-get [opciones] orden\n"
+" apt-get [opciones] install|remove paq1 [paq2 ...]\n"
+" apt-get [opciones] source paq1 [paq2 ...]\n"
+"\n"
+"apt-get es una interfaz de línea de órdenes para la obtención de\n"
+"paquetes y de información sobre ellos de orígenes autenticados y\n"
+"para la instalación, actualización y eliminación de paquetes junto\n"
+"a sus dependencias.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Descarga nuevas listas de paquetes"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Realiza una actualización"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instala nuevos paquetes (paquete es libc6 y no libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instala nuevos paquetes (paquete es libc6 y no libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Elimina paquetes"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Elimina y purga paquetes"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Elimina automáticamente todos los paquetes sin utilizar"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Actualiza la distribución, vea apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Sigue las selecciones de dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configura las dependencias de construcción para paquetes fuente"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Elimina los archivos descargados"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Elimina los archivos descargados antiguos"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verifica que no haya dependencias incumplidas"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Descarga archivos fuente"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Descarga el paquete binario al directorio actual"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Descarga y muestra el informe de cambios para el paquete proporcionado"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Se necesita una URL como argumento"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Debe especificar al menos una pareja url/nombre-fichero"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Falló la descarga"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "Falló GetSrvRec para %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Uso: apt-helper [opciones] orden\n"
+" apt-helper [opciones] fichero-descarga uri ruta-destino\n"
+"\n"
+"apt-helper reune un conjunto de órdenes para que los guiones utilicen\n"
+"por ejemplo la misma configuración de proxy o el mismo sistema de "
+"configuración que APT usaría.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "descarga la uri proporcionada a la ruta de destino"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "buscar un registro SRV (por ejemplo, _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "concatenar ficheros, con descompresión automática"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "detecta el proxy usando apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Uso: apt-internal-solver\n"
+"\n"
+"apt-internal-solver es una interfaz para utilizar el resolutor\n"
+"interno actual para la familia APT como uno externo, para depuración o\n"
+"similares.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Uso: apt-internal-solver\n"
+"\n"
+"apt-internal-solver es una interfaz para utilizar el resolutor\n"
+"interno actual para la familia APT como uno externo, para depuración o\n"
+"similares.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s no se puede marcar porque no está instalado.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s ya estaba fijado como instalado manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s ya estaba fijado como instalado automáticamente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Se instalarán los siguientes paquetes NUEVOS:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ya estaba fijado como retenido.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ya no estaba retenido.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Fallo al ejecutar dpkg. ¿Está como superusuario?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s fijado como retenido.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Se ha cancelado la retención de %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "Seleccionado %s para purgar.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Seleccionado %s para eliminar.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Seleccionado %s para su instalación.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Uso: apt-mark [opciones] {auto|manual} paq1 [paq2 ...]\n"
+"\n"
+"apt-mark es una sencilla interfaz de línea de órdenes para marcar paquetes\n"
+"como instalados manualmente o automáticamente. También se puede utilizar "
+"para\n"
+"manipular los estados de selección de paquetes de dpkg(1) y para listar\n"
+"todos los paquetes con o sin una marca determinada.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Marca los paquetes proporcionados como instalados automáticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Marca los paquetes proporcionados como instalados manualmente"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Marca los paquetes proporcionados como instalados automáticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Marca el paquete como retenido"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Desmarca un paquete marcado como retenido"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Muestra la lista de paquetes instalados automáticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Muestra la lista de paquetes instalados manualmente"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Muestra la lista de paquetes retenidos"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "¡Registro de paquete desconocido!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Uso: apt-sortpkgs [opciones] fichero1 [fichero2 ...]\n"
+"\n"
+"apt-sortpkgs es una herramienta sencilla para ordenar los ficheros de\n"
+"información de los paquetes. De forma predeterminada, ordena por\n"
+"la información del paquete binario, pero se puede utilizar la opción\n"
+"-s para cambiar a ordenación por origen del paquete en su lugar.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Uso: apt [opciones] orden\n"
+"\n"
+"apt es un gestor de paquetes de línea de órdenes y proporciona órdenes\n"
+"para la búsqueda y gestión así como la solicitud de información sobre\n"
+"los paquetes. Proporciona la misma funcionalidad que las herramientas\n"
+"APT especializadas, como apt-get y apt-cache, pero permite de forma "
+"predeterminada\n"
+"opciones más apropiadas para un uso interactivo.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "lista los paquetes según los nombres"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "busca en las descripciones de los paquetes"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "muestra detalles del paquete"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "instala paquetes"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "instala paquetes"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "elimina paquetes"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "actualiza la lista de paquetes disponibles"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "actualiza el sistema instalando/actualizando paquetes"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "actualiza el sistema eliminando/instalando/actualizando paquetes"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "edita el fichero de información de fuentes"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "¡Parámetro predeterminado incorrecto!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Pulse [Enter] para continuar."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "¿Desea borrar los archivos .deb descargados con anterioridad?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Se produjeron algunos problemas mientras se desempaquetaba. Los paquetes que "
+"se instalaron"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "van a configurarse. Esto puede dar lugar a errores duplicados"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"o errores causados por dependencias no presentes. Esto está BIEN, sólo los "
+"errores"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"encima de este mensaje son importantes. Corríjalas y ejecute «[I]nstall» "
+"otra vez"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Fusionando información disponible"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "La lista de extensión de paquetes es demasiado larga"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Error procesando el directorio %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "La lista de extensión de fuentes es demasiado larga"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Error escribiendo cabeceras de archivos de contenido"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Error procesando contenidos %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Uso: apt-ftparchive [opciones] orden\n"
+"Comandos: packages ruta-binaria [archivo-predominio\n"
+" [prefijo-ruta]]\n"
+" sources ruta-fuente [archivo-predominio \n"
+" [prefijo-ruta]]\n"
+" contents ruta\n"
+" release ruta\n"
+" generate config [grupos]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive genera índices para archivos de Debian. Soporta\n"
+"varios estilos de generación de reemplazos desde los completamente\n"
+"automatizados a los funcionales para dpkg-scanpackages y dpkg-scansources.\n"
+"\n"
+"apt-ftparchive genera ficheros Package de un árbol de .debs. El fichero\n"
+"Package contiene los contenidos de todos los campos de control de cada\n"
+"paquete al igual que la suma MD5 y el tamaño del archivo. Se puede usar\n"
+"un archivo de predominio para forzar el valor de Priority y\n"
+"Section.\n"
+"\n"
+"Igualmente, apt-ftparchive genera ficheros Sources para un árbol de\n"
+".dscs. Se puede utilizar la opción --source-override para especificar un\n"
+"fichero de predominio de fuente.\n"
+"\n"
+"Las órdenes «packages» y «sources» deben ejecutarse en la raíz del\n"
+"árbol. BinaryPath debe apuntar a la base de la búsqueda\n"
+"recursiva, y el archivo de predominio debe de contener banderas de\n"
+"predominio. Se añade Pathprefix a los campos de nombre de fichero\n"
+"si existen. A continuación se muestra un ejemplo de uso basado en los \n"
+"archivos de Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opciones:\n"
+" -h Este texto de ayuda\n"
+" --md5 Generación de control MD5 \n"
+" -s=? Archivo fuente de predominio\n"
+" -q Silencioso\n"
+" -d=? Selecciona la base de datos de caché opcional \n"
+" --no-delink Habilita modo de depuración delink\n"
+" --contents Generación del contenido del archivo «Control»\n"
+" -c=? Lee este archivo de configuración\n"
+" -o=? Establece una opción de configuración arbitraria"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Ninguna selección coincide"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Faltan algunos archivos en el grupo de archivo de paquetes «%s»"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "BD dañada, se renombró el archivo a %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB anticuada, intentando actualizar %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"El formato de la base de datos no es válido. Debe eliminar y recrear la base "
+"de datos si vd. se actualizó de una versión anterior de apt."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "No se pudo abrir el archivo DB %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "No se pudo leer el enlace %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "No hay registro de control del archivo"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "No se pudo obtener un cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - No pudo reservar memoria"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algoritmo desconocido de compresión «%s»"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Salida comprimida %s necesita una herramienta de compresión"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Fallo al crear una tubería IPC para el subproceso"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "No se pudo bifurcar"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Hijo compresión"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Error interno, no se pudo crear %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Falló la ES a subproceso/archivo"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "No se pudo leer mientras se computaba MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "No se pudo abrir %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Predominio mal formado %s línea %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "No se pudo leer el fichero de predominio %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Predominio mal formado %s línea %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Predominio mal formado %s línea %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Predominio mal formado %s línea %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: No se pudo leer directorio %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: No se pudo leer %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Errores aplicables al archivo "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "No se pudo resolver %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Falló el recorrido por el árbol."
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "No se pudo abrir %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** No pude enlazar %s con %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink se ha llegado al límite de %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Archivo no tiene campo de paquetes"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s no tiene entrada de predominio\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " el encargado de %s es %s y no %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s no tiene una entrada fuente predominante\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s tampoco tiene una entrada binaria predominante\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Esperando las cabeceras"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "El servidor de http envió una cabecera de respuesta inválida"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Línea de cabecera incorrecta"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "El servidor de http envió una cabecera de «Content-Length» inválida"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "El servidor de http envió una cabecera de «Content-Range» inválida"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Este servidor de http admite alcance roto"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Formato de fecha desconocido"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Datos de cabecera incorrectos"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Falló la conexión"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"Se ha deshabilitado automáticamente %s debido a una respuesta incorrecta del "
+"servidor/proxy. (man 5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Error interno"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "No se pudo leer la base de datos %s del cdrom"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Utilice «apt-cdrom» para hacer que APT reconozca este CD. No puede utilizar "
+"«apt-get update» para añadir nuevos CDs"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD equivocado"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "No se puede desmontar el CD-ROM de %s, tal vez aún se está utilizando."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disco no encontrado."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Fichero no encontrado"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Conectando a %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Conectando a %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "No se pudo crear un socket para %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "No se puede iniciar la conexión a %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Falló"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "No se pudo conectar a %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "No se pudo conectar a %s:%s (%s), caducó el tiempo para conexión"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Conectando a %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "No se pudo resolver «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Fallo temporal al resolver «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Error de sistema al resolver «%s:%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Algo raro pasó al resolver «%s:%s» (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "No se pudo conectar a %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Fallo al leer"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI inválido, los URIS locales no deben empezar por //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Ingresando"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "No se pudo determinar el nombre del par"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "No se pudo determinar el nombre local"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "El servidor rechazó la conexión y devolvió: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Usuario (USER) falló, el servidor devolvió: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Clave (PASS) falló, el servidor devolvió: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Se especificó un servidor proxy pero no un script de entrada, «Acquire::ftp::"
+"ProxyLogin» está vacío."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Falló la orden «%s» del script de entrada, el servidor devolvió: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Tipo (TYPE) falló, el servidor devolvió: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Caducó la conexión"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "El servidor cerró la conexión"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "La respuesta desbordó la memoria intermedia (buffer)."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Fallo del protocolo"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "No se pudo crear el socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "No se pudo conectar el socket de datos, caducó el tiempo de conexión"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "No se pudo conectar el socket pasivo."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "«getaddrinfo» no pudo obtener un socket pasivo"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "No se pudo asociar el socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "No se pudo escuchar en el socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "No se pudo determinar el nombre del socket"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "No se pudo mandar la orden PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Familia de direcciones %u desconocida (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT falló, el servidor devolvió: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Caducó conexión al socket de datos"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "No se pudo aceptar la conexión"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problema al cifrar el fichero"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "No se pudo obtener el fichero, el servidor devolvió «%s»"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Caducó el socket de datos"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Falló transferencia de datos, el servidor devolvió «%s»"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Consulta"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "No se pudo invocar "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, fuzzy, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"El fichero firmado en claro no es válido, «%s» obtenido (¿la red requiere "
+"autenticación?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Se encontró al menos una firma inválida."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Error interno: Firma correcta, ¡¿pero no se pudo determinar su huella "
+"digital?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"No se pudo ejecutar «apt-key» para verificar la firma (¿está instalado "
+"gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Error desconocido ejecutando «apt-key»"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Las siguientes firmas no fueron válidas:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Las firmas siguientes no se pudieron verificar porque su clave pública no "
+"está disponible:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Error escribiendo al archivo"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Error leyendo del servidor, el lado remoto cerró la conexión."
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Error leyendo del servidor"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Error escribiendo a archivo"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Falló la selección"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Caducó la conexión"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Error escribiendo al fichero de salida"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Fallo al establecer el tiempo de modificación"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "La conexión se cerró prematuramente"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Los ficheros vacíos no pueden ser archivos válidos"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Cabecera de miembro del archivo inválida %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s eliminado"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "El archivo de paquetes %s está desincronizado."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Los archivos de índice de paquetes están dañados. No existe un campo "
+#~ "«Filename:» para el paquete %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "No se encontró el archivo de réplica «%s»"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "No se puede leer el archivo de réplica «%s»"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "No se encontró ninguna entrada en el archivo de réplica «%s»"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Réplica: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Abriendo fichero de configuración %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Abriendo %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "No se pudo encontrar la entrada esperada «%s» en el archivo "
+#~ "«Release» (entrada incorrecta en «sources.list» o fichero mal formado)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dependencias incumplidas. Pruebe de nuevo utilizando --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "Tal vez quiera ejecutar «apt --fix-broken install» para corregirlo:"
+
+#~ msgid "(not found)"
+#~ msgstr "(no encontrado)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Pin del paquete: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "No existe ninguna clave pública disponible para los siguientes "
+#~ "identificadores de clave:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "El repositorio «%s» no está firmado."
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "La dependencia %s para %s no puede satisfacerse porque no se permite %s "
+#~ "en los paquetes «%s»"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "La dependencia %s para %s no puede satisfacerse porque no se puede "
+#~ "encontrar el paquete %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "No se pudo satisfacer la dependencia %s para %s: El paquete instalado %s "
+#~ "es demasiado nuevo"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "La dependencia %s para %s no puede satisfacerse porque la versión "
+#~ "presentada del paquete %s no puede satisfacer los requisitos de versión"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "La dependencia %s para %s no puede satisfacerse porque el paquete %s no "
+#~ "tiene ninguna versión presentada"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "No se pudo satisfacer la dependencia %s para %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "No se pudieron satisfacer las dependencias de construcción de %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Se produjo un problema al desligar %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "No se pudo desligar %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Modo de uso: apt-cache [opciones] orden\n"
+#~ " apt-cache [opciones] show paq1 [paq2 ...]\n"
+#~ "\n"
+#~ "apt-cache es una herramienta de bajo nivel que se utiliza para consultar\n"
+#~ "información sobre los archivos binarios de caché de APT\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Órdenes:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Opciones:\n"
+#~ " -h Este texto de ayuda.\n"
+#~ " -p=? La caché de paquetes.\n"
+#~ " -s=? La caché de fuentes.\n"
+#~ " -q Desactiva el indicador de progreso.\n"
+#~ " -i Muestra solo dependencias importantes para la orden incumplida.\n"
+#~ " -c=? Lee este archivo de configuración\n"
+#~ " -o=? Establece una opción de configuración arbitraria, p.ej. -o dir::"
+#~ "cache=/tmp\n"
+#~ "Vea las páginas del manual apt-cache(8) y apt.conf(5) para más "
+#~ "información.\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Uso: apt [opciones] orden\n"
+#~ "\n"
+#~ "Interfaz de línea de órdenes (CLI) para apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Uso: apt-cdrom [opciones] orden\n"
+#~ "\n"
+#~ "apt-cdrom es una herramienta para agregar CDROM para las fuentes de\n"
+#~ "APT. El punto de montaje del CDROM y la información del dispositivo\n"
+#~ "se extrae de apt.conf y /etc/fstab.\n"
+#~ "\n"
+#~ "Comandos:\n"
+#~ " add - Agrega un CDROM\n"
+#~ " ident - Reporta la identificación del CDROM\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -h Este texto de ayuda\n"
+#~ " -d Punto de montaje del CD-ROM\n"
+#~ " -r Renombra un CD-ROM reconocido\n"
+#~ " -m No monta\n"
+#~ " -f Modo rápido, no comprueba archivos de paquetes\n"
+#~ " -a A través de modo de búsqueda\n"
+#~ " -c=? Lee esto archivo de configuración\n"
+#~ " -o=? Establece una opción de configuración arbitraria, ej -o dir::\n"
+#~ "cache=/tmp\n"
+#~ "Ver fstab(5)\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opciones:\n"
+#~ " -h Este texto de ayuda.\n"
+#~ " -c=? Lee este fichero de configuración\n"
+#~ " -o=? Establece una opción de configuración arbitraria, p. ej. -o dir::\n"
+#~ " cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Opciones:\n"
+#~ " -h Este texto de ayuda.\n"
+#~ " -q Salida registrable - sin indicador de progreso\n"
+#~ " -qq Sin salida, expceto si hay errores\n"
+#~ " -s No actúa. Realiza una simulación.\n"
+#~ " -f Lee y escribe la marca auto/manual en el fichero proporcionado\n"
+#~ " -c=? Lee este fichero de configuración\n"
+#~ " -o=? Establece una opción de configuración arbitraria, p. ej.\n"
+#~ " -o dir::cache=/tmp\n"
+#~ "Ver las páginas de manual de apt-mark(8) y apt.conf(5) para más "
+#~ "información."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Uso: apt-sortpkgs [opciones] archivo1 [archivo2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs es una herramienta sencilla para ordenar archivos de "
+#~ "paquetes.\n"
+#~ "La opción -s se utiliza para indicar qué tipo de archivo es.\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -h Este texto de ayuda.\n"
+#~ " -s Utiliza ordenamiento de archivos fuente\n"
+#~ " -c=? Lee este archivo de configuración\n"
+#~ " -o=? Establece una opción de configuración arbitraria, p. ej. -o dir::\n"
+#~ "cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Falló el proceso hijo"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Debe especificar al menos una pareja url/nombre-fichero"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Fallo al crear las tuberías"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Fallo al ejecutar gzip"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s para %s compilado en %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "No se pudo crear FICHERO*"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Línea %u mal formada en la lista de fuentes %s (análisis de URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Línea %lu mal formada en la lista de fuentes %s ([opción] no analizable)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Línea %lu mal formada en la lista de fuentes %s ([opción] demasiado corta)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Línea %lu mal formada en la lista de fuentes %s ([%s] no es una "
+#~ "asignación)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Línea %lu mal formada en la lista de fuentes %s (no hay clave para [%s])"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Línea %lu mal formada en la lista de fuentes %s ([%s] la clave %s no "
+#~ "tiene asociado un valor)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Línea %lu mal formada en la lista de fuentes %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Línea %lu mal formada en la lista de fuentes %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Línea %lu mal formada en la lista de fuentes %s (análisis de URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Línea %lu mal formada en la lista de fuentes %s (dist absoluta)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Línea %lu mal formada en la lista de fuentes %s (análisis de dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "No se encontró el paquete %s %s mientras se procesaban las dependencias"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "No se pudo leer la lista de paquetes fuente %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Recogiendo archivos que proveen"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "No se pudo leer el archivo «Release» %s"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Bloque de fabricante %s sin huella digital"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Espacio de versión de dependencias total: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "No tiene suficiente espacio libre en %s"
+
+#~ msgid "Done"
+#~ msgstr "Listo"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "No se instaló ningún anillo de claves %s."
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "¿Es «stdout» una terminal?"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Error Interno, AllUpgrade rompió cosas"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s no es un paquete DEB válido."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Usando el punto de montaje del CD-ROM %s\n"
+#~ "Montando el CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "No se pudo parchear %s con mmap y con el modo de uso de la operación de "
+#~ "ficheros - el paquete parece dañado."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "No se pudo parchear %s con mmap (pero no hay un fallo mmap específico) - "
+#~ "el parche parece dañado."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr ""
+#~ "Ignorar la distribución objetivo no disponible «%s» del paquete «%s»"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Este no es un archivo DEB válido, falta el miembro «%s», «%s» o «%s»"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "La suma MD5 difiere"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "No se pudo localizar un archivo para el paquete %s. Esto puede significar "
+#~ "que necesita arreglar manualmente este paquete."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "No pudo escribirse el registro, falló la llamada a openpty() (¿está "
+#~ "montado «/dev/pts?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Omitiendo el fichero inexistente %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "No pude borrar %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "No pude crear %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "No pude leer %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Los directorios info y temp deben de estar en el mismo sistema de archivos"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "No pude cambiarme al directorio de administración %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Error interno obteniendo un Nombre de Paquete"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Leyendo Listado de Archivos"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "No pude abrir el archivo de lista «%sinfo/%s». ¡Si no puede restablecer "
+#~ "este archivo entonces cree uno vacío e inmediatamente reinstale la misma "
+#~ "versión del paquete!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "No pude leer el archivo de lista %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Error interno obteniendo un nodo"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "No pude abrir el archivo de desviación %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "El archive de desviaciones está dañado"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Linea inválida en el archivo de desviación: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Error interno agregando una desviación"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "El caché del paquete debe de inicializarse primero"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "No pude encontrar un paquete: Cabecera, desplazo %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Mala sección del ConfFile en el archivo de estado. Desplazo %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Error leyendo Md5. Desplazo %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "No pude cambiar a %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "No pude localizar un archivo de control válido"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "No pude abrir una tubería para %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Error de lectura de %s procesos"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Obtuve una sola línea de cabecera arriba de %u caracteres"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Nota: Dpkg realiza esto de forma automática y a propósito."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Predominio mal formado %s línea %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Predominio mal formado %s línea %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Predominio mal formado %s línea %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "decompresor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "leídos, todavía debía leer %lu pero no queda nada"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "escritos, todavía tenía que escribir %lu pero no pude hacerlo"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "No se pudo realizar la configuración inmediata sobre el paquete ya "
+#~ "desempaquetado «%s». Consulte la página de manual con «man 5 apt.conf» "
+#~ "bajo «APT::Immediate-Configure» para más información."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Error interno, no pude localizar el miembro"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr ""
+#~ "Error interno, el grupo «%s» no tiene ningún pseudo-paquete instalable"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr ""
+#~ "El archivo «Release» ha expirado, ignorando %s (inválido desde hace %s)"
+
+#~ msgid "You must give exactly one pattern"
+#~ msgstr "Debe dar exactamente un patrón"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Lista de argumentos de Acquire::gpgv::Options demasiado larga. "
+#~ "Terminando."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Línea %u mal formada en la lista de fuentes %s (id del fabricante)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "No se pudo acceder al anillo de claves: «%s»"
+
+#~ msgid "Could not patch file"
+#~ msgstr "No pude parchear el fichero"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Procesando disparadores para %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "La función «Dynamic MMap» se quedó sin espacio"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Como sólo solicito una única operación, es extremadamente posible que el\n"
+#~ "paquete simplemente no sea instalable y debería de rellenar un informe "
+#~ "de\n"
+#~ "error contra ese paquete."
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Línea %d demasiado larga (máx %lu)"
+
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Línea %d demasiado larga (máx %d)"
+
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewFileDesc1)"
+
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Se produjo un error mientras se procesaba %s (NewFileDesc2)"
+
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Etiqueta guardada: %s \n"
+
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "Se encontraron %i índices de paquetes, %i índices de fuentes, %i índices "
+#~ "de traducción y %i firmas\n"
+
+#~ msgid "openpty failed\n"
+#~ msgstr "Falló openpty\n"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Cambió la fecha del archivo %s"
+
+#~ msgid "Reading file list"
+#~ msgstr "Leyendo Lista de Archivos"
+
+#~ msgid "Could not execute "
+#~ msgstr "No se pudo ejecutar "
+
+#~ msgid "Preparing for remove with config %s"
+#~ msgstr "Preparándose para eliminar con su configuración %s"
+
+#~ msgid "Removed with config %s"
+#~ msgstr "Eliminado con su configuración %s"
+
+#~ msgid "Unknown vendor ID '%s' in line %u of source list %s"
+#~ msgstr ""
+#~ "ID del fabricante «%s» desconocido en la línea %u de la lista de\n"
+#~ "fuentes %s"
+
+#~ msgid ""
+#~ "Some broken packages were found while trying to process build-"
+#~ "dependencies.\n"
+#~ "You might want to run 'apt --fix-broken install' to correct these."
+#~ msgstr ""
+#~ "Se encontraron algunos paquetes rotos mientras se intentaba procesar\n"
+#~ "las dependencies de construcción. Tal vez quiera ejecutar \n"
+#~ "'apt --fix-broken install' para corregirlos."
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] add file1 [file1 ...]\n"
+#~ " apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
+#~ " apt-cache [options] showsrc pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to manipulate APT's binary\n"
+#~ "cache files, and query information from them\n"
+#~ "\n"
+#~ "Commands:\n"
+#~ " add - Add an package file to the source cache\n"
+#~ " gencaches - Build both the package and source cache\n"
+#~ " showpkg - Show some general information for a single package\n"
+#~ " showsrc - Show source records\n"
+#~ " stats - Show some basic statistics\n"
+#~ " dump - Show the entire file in a terse form\n"
+#~ " dumpavail - Print an available file to stdout\n"
+#~ " unmet - Show unmet dependencies\n"
+#~ " search - Search the package list for a regex pattern\n"
+#~ " show - Show a readable record for the package\n"
+#~ " depends - Show raw dependency information for a package\n"
+#~ " pkgnames - List the names of all packages\n"
+#~ " dotty - Generate package graphs for GraphVis\n"
+#~ " policy - Show policy settings\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Uso: apt-cache [opciones] orden\n"
+#~ " apt-cache [opciones] add archivo1 [archivo1 ...]\n"
+#~ " apt-cache [opciones] showpkg paq1 [paq2 ...]\n"
+#~ "\n"
+#~ "apt-cache es una herramienta usada para manipular los archivos binarios\n"
+#~ "de caché de APT, y consultar información de éstos.\n"
+#~ "\n"
+#~ "Comandos:\n"
+#~ " add - Añade un archivo de paquete a la caché fuente\n"
+#~ " gencaches - Crea el caché de ambos, del paquete y del fuente\n"
+#~ " showpkg - Muestra alguna información general para un solo paquete\n"
+#~ " showsrc - Muestra la información de las fuentes\n"
+#~ " stats - Muestra algunas estadísticas básicas\n"
+#~ " dump - Muestra el archivo entero en formato detallado\n"
+#~ " dumpavail - Imprime un archivo de paquetes disponibles a salida\n"
+#~ "estándar\n"
+#~ " unmet - Muestra dependencias incumplidas\n"
+#~ " search - Busca en la lista de paquetes por un patrón de expresión\n"
+#~ "regular\n"
+#~ " show - Muestra un registro del paquete\n"
+#~ " depends - Muestra información de dependencias en bruto para el\n"
+#~ "paquete\n"
+#~ " pkgnames - Lista los nombres de todos los paquetes\n"
+#~ " dotty - Genera gráficas del paquete para GraphVis\n"
+#~ " policy - Muestra los parámetros de las normas\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -h Este texto de ayuda.\n"
+#~ " -p=? El caché del paquete.\n"
+#~ " -s=? El caché de la fuente.\n"
+#~ " -q Deshabilita el indicador de progreso.\n"
+#~ " -i Muestra sólo dependencias importantes para el comando de\n"
+#~ "incumplido.\n"
+#~ " -c=? Lee este archivo de configuración\n"
+#~ " -o=? Establece una opción de configuración arbitraria, p. ej. -o dir::\n"
+#~ "cache=/tmp\n"
+#~ "Consulte las páginas del manual apt-cache(8) y apt.conf(5) para más\n"
+#~ "información.\n"
+
+#~ msgid ""
+#~ "%s dependency on %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "La dependencia %s en %s no puede satisfacerse porque el paquete %s\n"
+#~ "no se puede encontrar"
+
+#~ msgid "The package cache was build for a different architecture"
+#~ msgstr "La caché de archivos fue creado para una arquitectura diferente"
+
+#~ msgid "Sorry, you don't have enough free space in %s to hold all the .debs."
+#~ msgstr ""
+#~ "Lo siento, no tiene suficiente espacio libre en %s para colocar todos "
+#~ "los .debs."
+
+#~ msgid "Sorry, but the following packages have unmet dependencies:"
+#~ msgstr ""
+#~ "Disculpe, pero los siguientes paquetes tienen dependencias incumplidas:"
+
+#~ msgid "Need to get %sB/%sB of archives. "
+#~ msgstr "Se necesitan descargar %sB/%sB de ficheros. "
+
+#~ msgid "Need to get %sB of archives. "
+#~ msgstr "Necesito descargar %sB de ficheros. "
+
+#~ msgid "After unpacking %sB will be used.\n"
+#~ msgstr "Se usarán %sB después de desempaquetar.\n"
+
+#~ msgid "After unpacking %sB will be freed.\n"
+#~ msgstr "Se liberarán %sB después de desempaquetar.\n"
+
+#~ msgid ""
+#~ "Sorry, re-installation of %s is not possible, it cannot be downloaded.\n"
+#~ msgstr ""
+#~ "Lo siento, no es posible la reinstalación del paquete %s, no puede ser "
+#~ "descargado.\n"
+
+#~ msgid "Sorry, %s is already the newest version.\n"
+#~ msgstr "Lo siento, %s ya está en su versión más reciente.\n"
+
+#~ msgid "Sorry, broken packages"
+#~ msgstr "Lo siento, paquetes rotos"
+
+#~ msgid "Sorry, you don't have enough free space in %s"
+#~ msgstr "Lo siento, no tiene suficiente espacio libre en %s"
+
+#~ msgid "Sorry, you must put some 'source' URIs in your sources.list"
+#~ msgstr "Lo siento, debe poner algunos URIs 'fuente' en su sources.list"
+
+#~ msgid "<- '"
+#~ msgstr "<- '"
+
+#~ msgid "'"
+#~ msgstr "'"
+
+#~ msgid "-> '"
+#~ msgstr "-> '"
+
+#~ msgid "Followed conf file from "
+#~ msgstr "Archivo de configuración seguido por"
+
+#~ msgid " to "
+#~ msgstr " a "
+
+#~ msgid "Extract "
+#~ msgstr "Extraer"
+
+#~ msgid "Aborted, backing out"
+#~ msgstr "Abortado, retractándome"
+
+#~ msgid "De-replaced "
+#~ msgstr "De-reemplazado"
+
+#~ msgid " from "
+#~ msgstr " de "
+
+#~ msgid "Backing out "
+#~ msgstr "Retractando "
+
+#~ msgid " [new node]"
+#~ msgstr " [nodo nuevo] "
+
+#~ msgid "Replaced file "
+#~ msgstr "Fichero reemplazado"
+
+#~ msgid "Unimplemented"
+#~ msgstr "No está implementado"
+
+#~ msgid "Generating cache"
+#~ msgstr "Generando el caché"
+
+#~ msgid "Problem with SelectFile"
+#~ msgstr "Se produjo un problema con «SelectFile»"
+
+#~ msgid "Problem with MergeList"
+#~ msgstr "Se produjo un problema con «MergeList»"
+
+#~ msgid "Regex compilation error"
+#~ msgstr "Error de compilación de Regex"
+
+#~ msgid "Write to stdout failed"
+#~ msgstr "No pude escribir a la salida estándar"
+
+#~ msgid "Generate must be enabled for this function"
+#~ msgstr "Generate debe de estar habilitado para esta función"
+
+#~ msgid "Failed to stat %s%s"
+#~ msgstr "No pude leer %s%s"
+
+#~ msgid "Failed to rename %s.new to %s"
+#~ msgstr "No se pudo renombrar %s.new a %s"
+
+#~ msgid "I found (binary):"
+#~ msgstr "Encontré (binario):"
+
+#~ msgid "I found (source):"
+#~ msgstr "Encontré (fuente):"
+
+#~ msgid "Found "
+#~ msgstr "Encontré "
+
+#~ msgid " source indexes."
+#~ msgstr " índice de fuentes."
+
+#~ msgid " '"
+#~ msgstr " »"
+
+#~ msgid "Internal error, non-zero counts"
+#~ msgstr "Error interno, cuenta diferentes de cero"
+
+#~ msgid "Couldn't wait for subprocess"
+#~ msgstr "No pude esperar al subproceso"
+
+#~ msgid "....\"Have you mooed today?\"..."
+#~ msgstr "....\"¿Has mugido hoy?\"..."
+
+#~ msgid " New "
+#~ msgstr " Nuevo "
+
+#~ msgid "B "
+#~ msgstr "B "
+
+#~ msgid " files "
+#~ msgstr " archivos "
+
+#~ msgid " pkgs in "
+#~ msgstr " paquetes en "
+
+#~ msgid ""
+#~ "Usage: apt-ftparchive [options] command\n"
+#~ "Commands: packges binarypath [overridefile [pathprefix]]\n"
+#~ " sources srcpath [overridefile [pathprefix]]\n"
+#~ " contents path\n"
+#~ " generate config [groups]\n"
+#~ " clean config\n"
+#~ msgstr ""
+#~ "Uso: apt-ftparchive [opciones] orden\n"
+#~ "Comandos: packges trayectoria-binaria [archivo-sobrepaso\n"
+#~ " [prefijo-trayectoria]]\n"
+#~ " sources trayectoria-fuente [archivo-sobrepaso \n"
+#~ " [prefijo-trayectoria]]\n"
+#~ " contents trayectoria\n"
+#~ " generate config [grupos]\n"
+#~ " clean config\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " --md5 Control MD5 generation\n"
+#~ " -s=? Source override file\n"
+#~ " -q Quiet\n"
+#~ " -d=? Select the optional caching database\n"
+#~ " --no-delink Enable delinking debug mode\n"
+#~ " --contents Control contents file generation\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option\n"
+#~ msgstr ""
+#~ "Opciones:\n"
+#~ " -h Este texto de ayuda\n"
+#~ " --md5 Generación de control MD5 \n"
+#~ " -s=? Archivo fuente de predominio\n"
+#~ " -q Callado\n"
+#~ " -d=? Selecciona la base de datos opcional de cache\n"
+#~ " --no-delink Habilita modo de depuración delink\n"
+#~ " --contents Generación del contenido del archivo 'Control'\n"
+#~ " -c=? Lee este archivo de configuración\n"
+#~ " -o=? Establece una opción de configuración arbitraria\n"
+
+#~ msgid "Done Packages, Starting contents."
+#~ msgstr "Paquetes terminados, empezando contenidos."
+
+#~ msgid "Hit contents update byte limit"
+#~ msgstr "Se encontró el límite de bytes de actualización de contenidos"
+
+#~ msgid "Done. "
+#~ msgstr "Listo."
+
+#~ msgid "B in "
+#~ msgstr "B en "
+
+#~ msgid " archives. Took "
+#~ msgstr " archivos. Tomo "
+
+#~ msgid "B hit."
+#~ msgstr "B Eco."
+
+#~ msgid " not "
+#~ msgstr " no "
+
+#~ msgid "DSC file '%s' is too large!"
+#~ msgstr "¡El archivo DSC «%s» es demasiado grande!"
+
+#~ msgid "Could not find a record in the DSC '%s'"
+#~ msgstr "No se pudo encontrar un registro en el archive DSC «%s»"
+
+#~ msgid "Error parsing file record"
+#~ msgstr "Error leyendo archivo de registros"
+
+#~ msgid "Failed too stat %s"
+#~ msgstr "No pude leer %s"
+
+#~ msgid "Errors apply to file '%s'"
+#~ msgstr "Los errores aplican al fichero «%s»"
+
+#~ msgid "Unkonwn address family %u (AF_*)"
+#~ msgstr "Dirección de familia %u desconocida (AF_*)"
+
+#~ msgid "Failed to mount the cdrom."
+#~ msgstr "No pude montar el cdrom"
+
+#~ msgid ""
+#~ "apt-ftparchive generates index files for Debian archives. It supports\n"
+#~ "many styles of generation from fully automated to functional "
+#~ "replacements\n"
+#~ "for dpkg-scanpackages and dpkg-scansources\n"
+#~ "\n"
+#~ "apt-ftparchive generates Package files from a tree of .debs. The\n"
+#~ "Package file contains the contents of all the control fields from\n"
+#~ "each package as well as the MD5 hash and filesize. An override file\n"
+#~ "is supported to force the value of Priority and Section.\n"
+#~ "\n"
+#~ "Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+#~ "The --source-override option can be used to specify a src override file\n"
+#~ "\n"
+#~ "The 'packages' and 'sources' command should be run in the root of the\n"
+#~ "tree. BinaryPath should point to the base of the recursive search and \n"
+#~ "override file should contian the override flags. Pathprefix is\n"
+#~ "appended to the filename fields if present. Example usage from the \n"
+#~ "debian archive:\n"
+#~ " apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+#~ " dists/potato/main/binary-i386/Packages\n"
+#~ msgstr ""
+#~ "apt-ftparchive genera archivos de índice para archivos de Debian.\n"
+#~ "Soporta varios estilos de generación de reemplazos completamente\n"
+#~ "automatizados a funcionales para dpkg-scanpackages y dpkg-scansources\n"
+#~ "\n"
+#~ "apt-ftparchive genera archivos Package de un árbol de .debs. El Archivo\n"
+#~ "Package contiene los contenidos de todos los campos de control de cada\n"
+#~ "paquete al igual que el enlace MD5 y el tamaño del archivo. Se\n"
+#~ "soporta el uso de un archivo de predominio para forzar el valor de\n"
+#~ "Priority y Section.\n"
+#~ "\n"
+#~ "Igualmente, apt-ftparchive genera archivos de Fuentes para el árbol de\n"
+#~ ".dscs. Puede usarse la opción --source-override para especificar un\n"
+#~ "fichero de predominio fuente.\n"
+#~ "\n"
+#~ "Las órdenes 'packages' y 'sources' se deben de ejecutar en la raíz del\n"
+#~ "árbol. BinaryPath debe de apuntar a la base del archivo de búsqueda\n"
+#~ "recursiva, y el archivo de predominio debe contener banderas de\n"
+#~ "predominio. Pathprefix se agregado a los campos del nombre del archivo\n"
+#~ "si están presentes. Ejemplo de uso tomado de los archivos de Debian:\n"
+#~ " apt-ftparchive packages dists/potato/main/binary-i386/ > \\\\\n"
+#~ " dists/potato/main/binary-i386/Packages\n"
+
+#~ msgid "W: Unable to read directory "
+#~ msgstr "A: No se pudo leer directorio "
+
+#~ msgid "W: Unable to stat "
+#~ msgstr "A: No se pudo leer "
+
+#~ msgid "E: Errors apply to file '"
+#~ msgstr "E: Errores aplicables al archivo «"
+
+#~ msgid " DeLink limit of "
+#~ msgstr " DeLink límite de"
+
+#~ msgid " has no override entry"
+#~ msgstr " no tiene entrada de predominio"
+
+#~ msgid " maintainer is "
+#~ msgstr " el encargado es "
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..552fd4c
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,4264 @@
+# translation of apt_po_eu.po to Euskara
+# This file is put in the public domain.
+#
+# Hizkuntza Politikarako Sailburuordetza <hizkpol@ej-gv.es>, 2005.
+# Piarres Beobide <pi@beobide.net>, 2005, 2006, 2007, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2009-05-17 00:41+0200\n"
+"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
+"Language-Team: Euskara <debian-l10n-basque@lists.debian.org>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Artxibo sinadura baliogabea"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Errorea artxiboko kidearen goiburua irakurtzean"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Artxiboko kidearen goiburua baliogabea da"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Artxiboa laburregia da"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Huts egin artxibo goiburuak irakurtzean"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Ezin izan da %s paketea aurkitu"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Hondatutako artxiboa"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar egiaztapenak huts egin, hondatutakofitxategia"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "%u TAR goiburu mota ezezaguna, %s kidea"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Ez da baliozko DEB artxiboa; '%s' kidea falta da"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Barne Errorea, ezin da %s atala kokatu"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Kontrol fitxategi ezin analizagarria"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Ezin izan da %s fitxategian idatzi"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Ezin izan da %s fitxategia itxi"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "%s bidea luzeegia da"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s behin baino gehiagotan deskonprimitzen"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "%s direktorioa desbideratuta dago"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Paketea desbideratze helburuan %s/%s idazten saiatzen ari da"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Desbideratzearen bidea luzeegia da"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Huts egin du %s(e)tik datuak lortzean"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Huts egin du %s izenaren ordez %s ipintzean"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "%s direktorioa ez-direktorio batekin ordezten ari da"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Huts egin du nodoa bere hash-ontzian lokalizatzean"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Bidea luzeegia da"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Gainidatzi pakete-konkordantzia %s(r)en bertsiorik gabe"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "%s/%s fitxategiak %s paketekoa gainidazten du"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Ezin da %s irakurri"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Ezin da daturik lortu %s(e)tik"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode-ri dei egin zaio oraindik estekatutako nodoan"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Huts egin du hash-elementua lokalizatzean!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Huts egin du desbideratzea lokalizatzean"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "AddDiversion-n barne errorea"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Desbideratze bat gainidazten saiatzen: %s -> %s eta %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Desbideratzearen gehitze bikoitza: %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Konfigurazio fitxategi bikoiztua: %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "%s direktorioa desbideratuta dago"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "%s direktorioa desbideratuta dago"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "%s direktorioa desbideratuta dago"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "%s direktorioa desbideratuta dago"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "%s direktorioa desbideratuta dago"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Huts egin du %s esteka irakurtzean"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Egiaztapena ez dator bat"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "huts egin du izen-aldaketak, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Tamaina ez dator bat"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Eragiketa baliogabea: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Idazketa errorea"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Ezin da lortu %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Ezin izan dut %s paketeko fitxategi bat lokalizatu. Beharbada eskuz konpondu "
+"beharko duzu paketea. (arkitektura falta delako)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Konektatzen -> %s.(%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Ezin izan da %s metodo kontrolatzailea aurkitu."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Egiaztatu 'dpkg-dev' paketea instalaturik dagoen.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "%s metodoa ez da behar bezala abiarazi"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Mesedez sa ''%s' izeneko diska '%s' gailuan eta enter sakatu"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "%s zerrenda-direktorioa falta da."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "%s artxibo direktorioa falta da."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Ezin da zerrenda direktorioa blokeatu"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "'%s' motako indize fitxategirik ez da onartzen"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "%li fitxategi deskargatzen %li -tik (%s falta da)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "%li fitxategia jasotzen %li-tik"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"%s paketea berriro instalatu behar da, baina ezin dut artxiborik aurkitu."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Errorea: pkgProblemResolver::Resolve. Etenak sortu ditu, beharbada "
+"atxikitako paketeek eraginda."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Ezin dira arazoak konpondu; hautsitako paketeak atxiki dituzu."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Pakete zerrenda edo egoera fitxategia ezin dira analizatu edo ireki."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Beharbada 'apt-get update' exekutatu nahiko duzu arazoak konpontzeko"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Ezin izan da Iturburu zerrenda irakurri."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Adierazpen erregularren konpilazio errorea - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "'%2$s'(r)en '%1$s' banaketa ez da aurkitu"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "'%2$s'(r)en '%1$s' bertsioa ez da aurkitu"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Ezin izan da %s zeregina aurkitu"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Ezin izan da %s paketea aurkitu"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Ezin izan da %s paketea aurkitu"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Ezin da %s paketea lokalizatu"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "%2$s iturburu zerrendako %1$u lerroa luzeegia da."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "CD-ROM Desmuntatzen...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "%s CD-ROM muntatze puntua erabiltzen\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Diska itxaroten...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "CD-ROM-a muntatzen...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Egiaztatzen... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Gordetako Etiketa: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Indize fitxategien bila diska arakatzen...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"%zu pakete indize, %zu jatorri indize %zu itzulpen indize eta %zu sinadura "
+"aurkitu dira\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Aurkitutako Etiketa: '%s' \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Hau ez baliozko izen bat, froga berriro.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Diskaren izen:\n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Pakete zerrendak kopiatzen..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Jatorri zerrenda berria idazten\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Diskoarentzako jatorri sarrerak:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Ezin da %s(e)ra aldatu"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Ezin da %s atzitu."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Ezin da atzitu %s muntatze puntua"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Huts egin du CDROMa atzitzean"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Ez da ezagutzen komando lerroko '%c' aukera [%s]."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Ez da ulertzen komando lerroko %s aukera"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Komando lerroko %s aukera ez da boolearra."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "%s aukerak argumentu bat behar du."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"%s aukera: konfigurazio elementuaren zehaztapenak =<val> eduki behar du."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "%s aukerak osoko argumentu bat behar du, eta ez '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "'%s' aukera luzeegia da"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "%s zentzua ez da ulertzen; probatu egiazkoa edo faltsua."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Eragiketa baliogabea: %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Mota ezezaguneko laburtzapena: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Sintaxi errorea, %s:%u: Blokearen hasieran ez dago izenik."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Sintaxi errorea %s:%u: Gaizki eratutako"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Sintaxi errorea, %s:%u: Zabor gehigarria balioaren ondoren"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Sintaxi errorea, %s:%u: Direktibak goi-mailan bakarrik egin daitezke"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Sintaxi errorea, %s:%u: habiaratutako elementu gehiegi"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Sintaxi errorea, %s:%u: hemendik barne hartuta"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Sintaxi errorea, %s:%u: onartu gabeko '%s' direktiba"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "Sintaxi errorea, %s:%u: Direktibak goi-mailan bakarrik egin daitezke"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Sintaxi errorea, %s:%u: Zabor gehigarria fitxategi amaieran"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Arazoa fitxategia desestekatzean"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Ez da blokeorik erabiltzen ari irakurtzeko soilik den %s blokeo "
+"fitxategiarentzat"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Ezin izan da %s blokeo fitxategia ireki"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Ez da blokeorik erabiltzen ari nfs %s muntatutako blokeo fitxategiarentzat"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Ezin izan da %s blokeoa hartu"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "%s espero zen baina ez zegoen han"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "%s azpiprozesuak segmentaziuo hutsegitea jaso du."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "%s azpiprozesuak segmentaziuo hutsegitea jaso du."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "%s azpiprozesuak errore kode bat itzuli du (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "%s azpiprozesua ustekabean amaitu da"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Irakurketa errorea"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Idazketa errorea"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Arazoa fitxategia ixtean"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Huts egin du IPC azpiprozesua sortzean"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Huts egin du konpresorea exekutatzean "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "%s fitxategia ezin izan da ireki"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Ezin izan da %s(r)en kanalizazioa ireki"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "irakurrita; oraindik %lu irakurtzeke, baina ez da ezer geratzen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "idatzita; oraindik %lu idazteke, baina ezin da"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Arazoa fitxategia ixtean"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Arazoa fitxategia sinkronizatzean"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Arazoa fitxategia sinkronizatzean"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Ezin da daturik lortu %s(e)tik"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "%s : ezin da idatzi"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Ezin da fitxategi huts baten mmap egin"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Ezin izan da %lu byteren mmap egin"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Ezin izan da %s(r)en kanalizazioa ireki"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Ezin da %s ireki"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Ezin da deitu "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Ezin izan da %lu byteren mmap egin"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Huts fitxategia mozterakoan"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"MMAP dinamikoa memoriaz kanpo. Mesedez handitu APT::Cache-Start muga. Uneko "
+"balioa: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Errorea!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Eginda"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Eginda"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "%s hautapena ez da aurkitu"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Ezin da %s pakete fitxategia analizatu (1)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Oharra, %s hautatzen %s(r)en ordez\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Lerro baliogabea desbideratze fitxategian: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Ezin da %s pakete fitxategia analizatu (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Ezin da zerrenda direktorioa blokeatu"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Ezin da zerrenda direktorioa blokeatu"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s prestatzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "%s konfiguratzeko prestatzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "%s kentzeko prestatzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "%s guztiz ezabatzeko prestatzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Inbstalazio-ondorengo %s abiarazlea exekutatzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s Instalatuta"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s konfiguratzen"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "'%s' direktorioa falta da"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "%s fitxategia ezin izan da ireki"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s irekitzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s Instalatzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s kentzen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "%s guztiz ezabatu da"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s guztiz ezabatu da"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "%s : ezin da idatzi"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Dependentzia zuhaitza eraikitzen"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Hautagaien bertsioak"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Dependentzi Sormena"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Egoera argibideak irakurtzen"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Huts egin du %s EgoeraFitxategia irekitzean"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Ezin izan da %s aldiroko EgoeraFitrxategia idatzi"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i erregistro grabaturik.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i erregistro eta %i galdutako fitxategi grabaturik.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i erregistro eta %i okerreko fitxategi grabaturik\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"%i erregistro, %i galdutako fitxategi eta %i okerreko fitxategi grabaturik\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Egiaztapena ez dator bat"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "'%s' pakete sistema ez da onartzen"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Ezin da pakete sistemaren mota egokirik zehaztu"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "%s fitxategia ezin izan da ireki"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Instalazio hau exekutatzeko, funtsezko %s paketea aldi baterako kendu behar "
+"da, Gatazka/Aurre-mendekotasun begizta baten ondorioz. Normalean arriskutsua "
+"izaten da, baina hala ere egin nahi baduzu, aktibatu APT::Force-LoopBreak "
+"aukera."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Paketeen katxea hutsik"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Paketeen katxe fitxategia hondatuta dago"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Paketeen katxe fixategiaren bertsioa ez da bateragarria"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "APT honek ez du '%s' bertsio sistema onartzen"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Paketeen katxea beste arkitektura batentzat sortuta dago"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Paketeen katxe fitxategia hondatuta dago"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Mendekotasuna:"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Aurremendekotasuna:"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Iradokizuna:"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Gatazka:"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Gomendioa:"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Ordeztea:"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Apurturik"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Zaharkitzea:"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "garrantzitsua"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "beharrezkoa"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "estandarra"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "estra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "aukerakoa"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Katxearen bertsio sistema ez da bateragarria"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Errorea gertatu da %s prozesatzean (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "APT honek maneia dezakeen pakete izenen kopurua gainditu duzu."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "APT honek maneia dezakeen bertsio kopurua gainditu duzu."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "APT honek maneia dezakeen azalpen kopurua gainditu duzu."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "APT honek maneia dezakeen mendekotasun muga gainditu duzu."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Pakete Zerrenda irakurtzen"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "S/I errorea iturburu katxea gordetzean"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "'%s' motako indize fitxategirik ez da onartzen"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Erregistro baliogabea hobespenen fitxategian, pakete goibururik ez"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Ez da ulertu %s orratz-mota (pin)"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Ez da lehentasunik zehaztu orratzarentzat (pin) (edo zero da)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Gaizki osatutako override %s, lerroa: %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Gaizki osatutako %u lerroa %s Iturburu zerrendan (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "'%s' mota ez da ezagutzen %u lerroan %s Iturburu zerrendan"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Gaizki osatutako %u lerroa %s Iturburu zerrendan (type)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "'%s' mota ez da ezagutzen %u lerroan %s Iturburu zerrendan"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "'Iturburu' URI batzuk jarri behar dituzu sources.list-en"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Indize fitxategi batzuk ezin izan dira deskargatu; ez ikusi egin zaie, edo "
+"zaharrak erabili dira haien ordez."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Berriketak kalkulatzen"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Atzituta:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Hartu:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ez ikusi:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Lortuta: %sB (%s) (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Lanean]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Medio Aldaketa: Mesedez sar\n"
+" '%s'\n"
+"izeneko diska '%s' gailuan eta enter sakatu\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Mendekotasunak zuzentzen..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " : huts egin du."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Ezin dira mendekotasunak zuzendu"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Ezin da bertsio berritzeko multzoa minimizatu"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Eginda"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Beharbada 'apt --fix-broken install' exekutatu nahiko duzu zuzentzeko."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Bete gabeko mendekotasunak. Probatu 'apt --fix-broken install' paketerik "
+"gabe (edo zehaztu konponbide bat)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Oharra: %s hautatzen '%s' adierazpen erregularrarentzat\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Oharra: %s hautatzen '%s' adierazpen erregularrarentzat\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Oharra: %s hautatzen '%s' adierazpen erregularrarentzat\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "%s pakete birtual bat da, honek hornitua:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Instalatuta]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Hautagaien bertsioak"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Zehazki bat hautatu behar duzu instalatzeko."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"%s paketea ez dago erabilgarri, baina beste pakete batek erreferentzia \n"
+"egiten dio. Beharbada paketea faltako da, edo zaharkituta egongo da, edo \n"
+"beste iturburu batean bakarrik egongo da erabilgarri\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Baina ondorengo paketeek ordezten dute:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "%s paketeak ez du instalatzeko hautagairik"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "%s paketea ez dago instalatuta, eta, beraz, ez da kenduko\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "%s paketea ez dago instalatuta, eta, beraz, ez da kenduko\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Oharra, %s hautatzen %s(r)en ordez\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "APT honek Super Behiaren Ahalmenak ditu."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Ez da paketerik aurkitu"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "KONTUZ: Hurrengo paketeak ezin dira egiaztatu!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Egiaztapen abisua gainidazten.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Zenbait pakete ezin dira egiaztatu"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Paketeak egiaztapen gabe instalatu?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Arazoak daude, eta -y erabili da --force-yes gabe"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Ezin da %s(e)n duzun leku librea atzeman."
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Ez daukazu nahikoa leku libre %s(e)n."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Ezin da deskarga direktorioa blokeatu"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Pakete batzuk ezin izan dira instalatu. Beharbada ezinezko egoera \n"
+"bat eskatu duzu, edo, banaketa ezegonkorra erabiltzen ari bazara,\n"
+"beharrezko pakete batzuk ez ziren sortuko oraindik, edo \n"
+"Sarrerakoetan (Incoming) egoten jarraituko dute."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Informazio honek arazoa konpontzen lagun dezake:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Hautsitako paketeak"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Ezin izan dira artxibo batzuk lortu; beharbada apt-get update exekutatu, edo "
+"--fix-missing aukerarekin saiatu?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Barne errorea, InstallPackages apurturiko paketeez deitu da!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Paketeak ezabatu beharra dute baina Ezabatzea ezgaiturik dago."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Arazoak daude, eta -y erabili da --force-yes gabe"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Arazoak daude, eta -y erabili da --force-yes gabe"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Barne errorea, ez da ordenatzeaz amaitu"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Hau bitxia... Tamainak ez dira berdina, idatzi apt@packages.debian.org-ra "
+"berri emanez (ingelesez)"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Artxiboetako %sB/%sB eskuratu behar dira.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Artxiboetako %sB eskuratu behar dira.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Ekintza honen ondoren, %sB gehiago erabiliko dira diskoan.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Ekintza honen ondoren, %sB libratuko dira diskoan.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "'Trivial Only' zehaztu da, baina hau ez da eragiketa tribial bat."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Bai, egin esandakoa!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Egin nahi duzunak kalte larriak eragin ditzake\n"
+"Jarraitzeko, idatzi '%s' esaldia\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Abortatu."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Aurrera jarraitu nahi al duzu?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Fitxategi batzuk ezin izan dira deskargatu"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Deskarga amaituta eta deskarga soileko moduan"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing eta euskarri aldaketa ez dira onartzen oraingoz"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Falta diren paketeak ezin dira zuzendu."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Abortatu instalazioa."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Suposatu ez dugun zerbait ezabatuko da, ezin da AutoRemover abiarazi"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, dirudienez AutoRemover-ek gertatu behar ez zen apurtu du\n"
+"Mesedez programa errore txosten bat bete mesedez."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Barne Errorea, AutoRemover-ek zerbait apurtu du"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Ondorengo pakete automatikoki instalatuak izan ziren eta ez dira luzaroago "
+"behar."
+msgstr[1] ""
+"Ondorengo pakete automatikoki instalatuak izan ziren eta ez dira luzaroago "
+"behar."
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"Ondorengo pakete automatikoki instalatuak izan ziren eta ez dira luzaroago "
+"behar."
+msgstr[1] ""
+"Ondorengo pakete automatikoki instalatuak izan ziren eta ez dira luzaroago "
+"behar."
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "'%s' erabili ezabatzeko."
+msgstr[1] "'%s' erabili ezabatzeko."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Ondorengo pakete gehigarriak instalatuko dira:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Iradokitako paketeak:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Gomendatutako paketeak:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "%s saltatzen. Instalatuta dago, eta ez dago bertsio-berritzerik.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "%s saltatzen. Instalatuta dago, eta ez dago bertsio-berritzerik.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "%s berriro instalatzea ez da posible; ezin da deskargatu.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s bertsiorik berriena da jada.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Hautatutako bertsioa: %s (%s) -- %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Hautatutako bertsioa: %s (%s) -- %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Instalatuta]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Instalatuta]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Instalatuta]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Instalatuta]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "baina %s instalatuta dago"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "baina %s instalatzeko dago"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "baina ez da instalagarria"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "baina pakete birtuala da"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "baina ez da instalatuko"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "baina ez dago instalatuta"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " edo"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Ondorengo paketeetan bete gabeko mendekotasunak daude:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Ondorengo pakete BERRIAK instalatuko dira:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Ondorengo paketeak KENDUKO dira:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Ondorengo paketeak mantendu egin dira:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Ondorengo paketeak bertsio-berrituko dira:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Ondorengo paketeak AURREKO BERTSIORA itzuliko dira:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Ondorengo pakete atxikiak aldatu egingo dira:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (arrazoia: %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"KONTUZ: Ondorengo funtsezko paketeak kendu egingo dira\n"
+"EZ ezazu horrelakorik egin, ez badakizu ondo zertan ari zaren!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu bertsio berritua(k), %lu berriki instalatuta, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu berrinstalatuta, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu aurreko bertsiora itzulita, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu kentzeko, eta %lu bertsio-berritu gabe.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu ez erabat instalatuta edo kenduta.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[B/e]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[b/E]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "Zehazki eredu bat eman behar duzu."
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Pakete Fitxategiak:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Katxea ez dago sinkronizatuta, ezin zaio erreferentziarik (x-ref) egin "
+"pakete fitxategi bati"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pin duten Paketeak:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalatuta: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Hautagaia: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(bat ere ez)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Bertsio taula:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Ezin izan da %s paketea aurkitu"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Ezin izan da %s paketea aurkitu"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Ezin izan da %s paketea aurkitu"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Ezin da atzitu %s iturburu paketeen zerrenda"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Gutxienez pakete bat zehaztu behar duzu iturburua lortzeko"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Ezin da iturburu paketerik aurkitu %s(r)entzat"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Dagoeneko deskargaturiko '%s' fitxategia saltatzen\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Iturburu artxiboetako %sB/%sB eskuratu behar dira.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Iturburu artxiboetako %sB eskuratu behar dira.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Eskuratu %s iturburua\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Huts egin du zenbat artxibo lortzean."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+"%s(e)n dagoeneko deskonprimitutako iturburua deskonprimitzea saltatzen\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Deskonprimitzeko '%s' komandoak huts egin du.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Egiaztatu 'dpkg-dev' paketea instalaturik dagoen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Eraikitzeko '%s' komandoak huts egin du.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Ezin izan da %s(r)en eraikitze mendekotasunen informazioa eskuratu"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s: ez du eraikitze mendekotasunik.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Gutxienez pakete bat zehaztu behar duzu eraikitze mendekotasunak egiaztatzeko"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Huts egin du eraikitze mendekotasunak prozesatzean"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Huts egin du eraikitze mendekotasunak prozesatzean"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Huts egin du %s izenaren ordez %s ipintzean"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "%s paketeak (%s bertsioa) mendekotasun arazo bat du:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Eguneratzeko komandoak ez du argumenturik hartzen"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Eguneratzeko komandoak ez du argumenturik hartzen"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Pakete Izenak Guztira : "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Pakete Izenak Guztira : "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Pakete normalak:"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Pakete birtual puruak:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Bakanako pakete birtualak: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Nahastutako pakete birtualak: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Falta direnak: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Bertsio Ezberdinak Guztira: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Azalpen Ezberdinak Guztira: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Dependentziak Guztira: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Guztira Bertsio/fitxategi erlazioak: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Fitx/Azalpen erlazioak guztira: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Guztira Saltzaile Mapatzea: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Guztira bateratutako kateak: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Guztira galdutako tokia:"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Guztira erregistratutako lekua: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Iturburu erregistroak erakusten ditu"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Adierazpen erregularrak bilatzen ditu pakete zerrendan"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Pakete baten mendekotasunak erakusten ditu"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Paketearen erregistro irakurgarri bat erakusten du"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Pakete guztien izenak zerrendatzen ditu"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Gidalerroen ezarpenak erakusten ditu"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Mesedez idatzi izen bat diska honentzat, 'Debian 2.1r1 1 Diska' antzerakoan"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Mesedez sar diska bat gailuan eta enter sakatu"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Huts egin du %s izenaren ordez %s ipintzean"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Prozesu hau bildumako beste CD guztiekin errepikatu."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Parekatu gabeko argumentuak"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Erabilera: apt-config [aukerak] komandoa\n"
+"\n"
+"apt-config APT konfigurazio fitxategia irakurtzeko tresna soil bat da\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Erabilera: apt-extracttemplates fitxategia1 [fitxategia2 ...]\n"
+"\n"
+"apt-extracttemplates debian-eko paketeen konfigurazioaren eta txantiloien\n"
+"informazioa ateratzeko tresna bat da\n"
+"\n"
+"Aukerak:\n"
+" -h Laguntza testu hau\n"
+" -t Ezarri aldi baterako direktorioa\n"
+" -c=? Irakurri konfigurazio fitxategi hau\n"
+" -o=? Ezarri konfigurazio aukera arbitrario bat. Adib.: -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Ezin da debconf bertsioa eskuratu. Debconf instalatuta dago?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Ezin izan da %s paketea aurkitu"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Barne Errorea, arazo konpontzaileak zerbait apurtu du"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Onartutako Moduluak:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Erabilera: apt-get [aukerak] komandoa\n"
+" apt-get [aukerak] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [aukerak] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get paketeak deskargatu eta instalatzeko komando lerroko interfaze soil\n"
+"bat da. Gehien erabiltzen diren komandoak eguneratzekoa eta instalatzekoa \n"
+"dira: update eta install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Eskuratu pakete zerrenda berriak"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Egin bertsio berritzea"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalatu pakete berriak (paketea libc6 da, eta ez libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalatu pakete berriak (paketea libc6 da, eta ez libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Kendu paketeak"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Paketeak kendu eta garbitu"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Automatikoki kendu erabiltzen ez diren paketeak"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Banaketaren bertsio berritzea: ikus apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Jarraitu dselect hautapenak"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Konfiguratu iturburu paketeen eraikitze dependentziak"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Ezabatu deskargatutako artxibo fitxategiak"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Ezabatu deskargatutako artxibo fitxategi zaharrak"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Egiaztatu ez dagoela hautsitako mendekotasunik"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Deskargatu iturburu artxiboak"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Gutxienez pakete bat zehaztu behar duzu iturburua lortzeko"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Erabilera: apt-extracttemplates fitxategia1 [fitxategia2 ...]\n"
+"\n"
+"apt-extracttemplates debian-eko paketeen konfigurazioaren eta txantiloien\n"
+"informazioa ateratzeko tresna bat da\n"
+"\n"
+"Aukerak:\n"
+" -h Laguntza testu hau\n"
+" -t Ezarri aldi baterako direktorioa\n"
+" -c=? Irakurri konfigurazio fitxategi hau\n"
+" -o=? Ezarri konfigurazio aukera arbitrario bat. Adib.: -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Erabilera: apt-extracttemplates fitxategia1 [fitxategia2 ...]\n"
+"\n"
+"apt-extracttemplates debian-eko paketeen konfigurazioaren eta txantiloien\n"
+"informazioa ateratzeko tresna bat da\n"
+"\n"
+"Aukerak:\n"
+" -h Laguntza testu hau\n"
+" -t Ezarri aldi baterako direktorioa\n"
+" -c=? Irakurri konfigurazio fitxategi hau\n"
+" -o=? Ezarri konfigurazio aukera arbitrario bat. Adib.: -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "baina ez dago instalatuta"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Ondorengo pakete BERRIAK instalatuko dira:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s bertsiorik berriena da jada.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s bertsiorik berriena da jada.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Huts egin du %s irekitzean"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Egiaztatu 'dpkg-dev' paketea instalaturik dagoen.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Pakete erregistro ezezaguna!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Pakete Zerrenda irakurtzen"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Pin duten Paketeak:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Pin duten Paketeak:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Hautsitako paketeak"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s eskuz instalatua bezala ezarri.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Egoera argibideak irakurtzen"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Okerreko ezarpen lehenetsia!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Jarraitzeko, sakatu Sartu."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Deskargaturiko .deb fitxategi guztiak ezabatu nahi al dituzu?"
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Errore batzuk gertatu dira deskonprimitzean. Konfiguratu egingo ditut"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "instalatutako paketeak. Horrek errore bikoiztuak eragin ditzake"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "edo falta diren mendekotasunen erroreak. Hori ondo dago; mezu honen"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"aurreko erroreak dira garrantzitsuak. Konpondu eta exekutatu [I]nstall "
+"berriro"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Eskuragarrien datuak biltzen"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Pakete luzapenen zerrenda luzeegia da"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Errorea direktorioa prozesatzean %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Iturburu luzapenen zerrenda luzeegia da"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Errorea eduki fitxategiaren goiburua idaztean"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Errorea edukiak prozesatzean %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Erabilera: apt-ftparchive [aukerak] komandoa\n"
+"Komandoak: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive Debian artxiboen indizeak sortzeko erabiltzen da. Sortzeko \n"
+"estilo asko onartzen ditu, erabat automatizatuak nahiz ordezte funtzionalak\n"
+"'dpkg-scanpackages' eta 'dpkg-scansources'erako\n"
+"Package izeneko fitxategiak sortzen ditu .deb fitxategien zuhaitz batetik.\n"
+"Package fitxategiak pakete bakoitzaren kontrol eremu guztiak izaten ditu,\n"
+"MD5 hash balioa eta fitxategi tamaina barne. Override fitxategia erabiltzen\n"
+"da lehentasunaren eta sekzioaren balioak behartzeko.\n"
+"\n"
+"Era berean, iturburu fitxategiak ere sortzen ditu .dsc fitxategien\n"
+"zuhaitzetik. --source-override aukera erabil daiteke src override \n"
+"fitxategi bat zehazteko.\n"
+"'packages' eta 'sources' komandoa zuhaitzaren erroan exekutatu behar dira.\n"
+"BinaryPath-ek bilaketa errekurtsiboaren oinarria seinalatu behar du, eta\n"
+"override fitxategiak override banderak izan behar ditu. Pathprefix \n"
+"fitxategi izenen eremuei eransten zaie (halakorik badago). Hona hemen\n"
+"Debian artxiboko erabilera argibide bat:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Aukerak:\n"
+" -h Laguntza testu hau\n"
+" --md5 Kontrolatu MD5 sortzea\n"
+" -s=? Iturburuaren override fitxategia\n"
+" -q Isilik\n"
+" -d=? Hautatu aukerako katxearen datu-basea\n"
+" --no-delink Gaitu delink arazketa modua\n"
+" --contents Kontrolatu eduki fitxategia sortzea\n"
+" -c=? Irakurri konfigurazio fitxategi hau\n"
+" -o=? Ezarri konfigurazio aukera arbitrario bat"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Ez dago bat datorren hautapenik"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Fitxategi batzuk falta dira `%s' pakete fitxategien taldean"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Datu-basea hondatuta dago; fitxategiari %s.old izena jarri zaio"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Datu-basea zaharra da; %s bertsio-berritzen saiatzen ari da"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"DB formatu baliogabe da. Apt bertsio zaharrago batetik eguneratu baduzu, "
+"mesedez datubasea ezabatu eta birsortu."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Ezin da ireki %s datu-base fitxategia: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Huts egin du %s esteka irakurtzean"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Artxiboak ez du kontrol erregistrorik"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Ezin da kurtsorerik eskuratu"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Huts egin du memoria esleitzean"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "'%s' Konpresio Algoritmo Ezezaguna"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "%s irteera konprimituak konpresio-tresna bat behar du"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Huts egin du azpiprozesuarentzako IPC kanalizazio bat sortzean"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Huts egin du sardetzean"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Konprimatu Umeak"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Barne Errorea, Huts %s sortzerakoan"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Huts egin du azpiprozesu/fitxategiko S/Iak"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Huts egin du MD5 konputatzean"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Ezin da %s ireki"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Gaizki osatutako override %s, lerroa: %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Huts egin du %s override fitxategia irakurtzean"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Gaizki osatutako override %s, lerroa: %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Gaizki osatutako override %s, lerroa: %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Gaizki osatutako override %s, lerroa: %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: Ezin da %s direktorioa irakurri\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: Ezin da %s atzitu\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Erroreak fitxategiari dagozkio "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Huts egin du %s ebaztean"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Huts egin dute zuhaitz-urratsek"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Huts egin du %s irekitzean"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Ezin izan da %s %s(r)ekin estekatu"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink-en mugara (%sB) heldu da.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Artxiboak ez du pakete eremurik"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s: ez du override sarrerarik\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s mantentzailea %s da, eta ez %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s: ez du jatorri gainidazketa sarrerarik\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s: ez du bitar gainidazketa sarrerarik\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Goiburuen zain"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "http zerbitzariak erantzun goiburu baliogabe bat bidali du."
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Okerreko goiburu-lerroa"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "http zerbitzariak Content-Length buru baliogabe bat bidali du"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "http zerbitzariak Content-Range buru baliogabe bat bidali du"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "http zerbitzariak barruti onarpena apurturik du"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Datu formatu ezezaguna"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Goiburu data gaizki dago"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Konexioak huts egin du"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Barne errorea"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Ezin da cdrom-eko %s datu-basea irakurri"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Mesedez erabili apt-cdrom APT-k CD hau ezagutu dezan.\n"
+"apt-get update ezin da erabili CD berriak gehitzeko"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD okerra"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Ezin izan da %s(e)ko CD-ROMa desmuntatu; beharbada erabiltzen ariko da."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Ez da diska aurkitu"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Ez da fitxategia aurkitu"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Konektatzen -> %s.(%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Konektatzen -> %s.(%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Ezin izan da socket-ik sortu honentzat: %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Ezin izan da konexioa hasi -> %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Huts egin du"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Ezin izan da konektatu -> %s:%s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+"Ezin izan da konektatu -> %s:%s (%s). Konexioak denbora muga gainditu du"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Konektatzen -> %s..."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Ezin izan da '%s' ebatzi"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Aldi baterako akatsa '%s' ebaztean"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Zerbait arraroa pasatu da '%s:%s' (%i) ebaztean"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Zerbait arraroa pasatu da '%s:%s' (%i) ebaztean"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Ezin da konektatu -> %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Huts egin du atzitzean"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI baliogabea. URI lokalek ezin dute // eduki hasieran"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Sartzen"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Ezin izan da peer edo parekoaren izena zehaztu"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Ezin izan da izen lokala zehaztu"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Zerbitzariak gure konexioa ukatu eta hau esan du: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USERek huts egin du, eta zerbitzariak hau esan du: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASSek huts egin du, eta zerbitzariak hau esan du: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Proxy zerbitzari bat zehaztu da, baina sarrerako script-ik ez. Acquire::ftp::"
+"ProxyLogin hutsik dago."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+"Sarrerako script-eko '%s' komandoak huts egin du, eta zerbitzariak hau esan "
+"du: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPEk huts egin du, eta zerbitzariak hau esan du: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Konexioa denboraz kanpo"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Zerbitzariak konexioa itxi du"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Erantzun batek bufferrari gainez eragin dio."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protokolo hondatzea"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Ezin izan da socket-a sortu"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Ezin izan da datu-socketa konektatu; konexioak denbora muga gainditu du"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Ezin izan da socket pasibora konektatu."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo-k ezin izan du socket entzule bat eskuratu"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Ezin izan da socket bat lotu"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Ezin izan da socket-ean entzun"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Ezin izan da socket-aren izena zehaztu"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Ezin da PORT komandoa bidali"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Helbide familia ezezagunaa: %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRTek huts egin du, eta zerbitzariak hau esan du: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Datu-socket konexioak denbora muga gainditu du"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Ezin da konexioa onartu"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Arazoa fitxategiaren hash egitean"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Ezin da fitxategia lortu; zerbitzariak hau esan du: '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Datu-socketak denbora muga gainditu du"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Datu transferentziak huts egin du, eta zerbitzariak hau esan du: '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Kontsulta"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Ezin da deitu "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Beintza sinadura baliogabe bat aurkitu da."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "Barne errorea: Sinadura zuzena, baina ezin da egiaztapen marka zehaztu"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Ezin da %s abiarazi sinadura egiaztatzeko (gnupg instalaturik al dago?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Errore ezezaguna apt-key exekutatzean"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Ondorengo sinadurak baliogabeak dira:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Ondorengo sinadurak ezin dira egiaztatu gako publikoa ez bait dago "
+"eskuragarri:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Errorea fitxategian idaztean"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Errorea zerbitzaritik irakurtzen Urrunetik amaitutako konexio itxiera"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Errorea zerbitzaritik irakurtzean"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Errorea fitxategian idaztean"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Hautapenak huts egin du"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Konexioaren denbora muga gainditu da"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Errorea irteerako fitxategian idaztean"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Huts egin du aldaketa ordua ezartzean"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Konexioa behar baino lehenago itxi da"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Artxiboko kidearen goiburua baliogabea da"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s kendurik"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "%s pakete fitxategia ez dago sinkronizatuta."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Paketearen indize fitxategiak hondatuta daude. 'Filename:' eremurik ez %s "
+#~ "paketearentzat."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "%s fitxategia ezin izan da ireki"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "%s fitxategia ezin izan da ireki"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "%s konfigurazio fitxategia irekitzen"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s irekitzen"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Bete gabeko mendekotasunak. Probatu --fix-broken erabiliz."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Beharbada 'apt --fix-broken install' exekutatu nahiko duzu hauek "
+#~ "zuzentzeko:"
+
+#~ msgid "(not found)"
+#~ msgstr "(ez da aurkitu)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Paketearen pin-a:"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Ez dago gako publiko erabilgarririk hurrengo gako ID hauentzat:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "%s direktorioa desbideratuta dago"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "%2$s(r)en %1$s mendekotasuna ezin da bete, %3$s paketea ezin delako "
+#~ "aurkitu"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%2$s(r)en %1$s mendekotasuna ezin da bete, %3$s paketea ezin delako "
+#~ "aurkitu"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Huts egin du %2$s(r)en %1$s mendekotasuna betetzean: instalatutako %3$s "
+#~ "paketea berriegia da"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%2$s(r)en %1$s mendekotasuna ezin da bete, ez baitago bertsio-eskakizunak "
+#~ "betetzen dituen %3$s paketearen bertsio erabilgarririk"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%2$s(r)en %1$s mendekotasuna ezin da bete, %3$s paketea ezin delako "
+#~ "aurkitu"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Huts egin du %2$s(r)en %1$s mendekotasuna betetzean: %3$s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "%s(r)en eraikitze mendekotasunak ezin izan dira bete."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Arazoa %s desestekatzean"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Huts egin du %s desestekatzean"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Erabilera: apt-cache [aukerak] komandoa\n"
+#~ " apt-cache [aukerak] show pak1 [pak2 ...]\n"
+#~ "\n"
+#~ "APTren katxe fitxategi bitarrak manipulatzeko eta kontsultatzeko "
+#~ "erabiltzen\n"
+#~ "den behe-mailako tresna bat da, apt-cache.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Aukerak:\n"
+#~ " -h Laguntza testu hau.\n"
+#~ " -p=? Paketearen katxea.\n"
+#~ " -s=? Iturburuaren katxea.\n"
+#~ " -q Desgaitu progresio adierazlea.\n"
+#~ " -i Mendekotasun nagusiak soilik erakutsi.\n"
+#~ " -c=? Irakurri konfigurazio fitxategi hau\n"
+#~ " -o=? Ezarri konfigurazio aukera arbitrario bat. Adib.: -o dir::cache=/"
+#~ "tmp\n"
+#~ "Informazio gehiago nahi izanez gero: ikus apt-cache(8) eta apt.conf(5).\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Aukerak:\n"
+#~ " -h Laguntza testu hau.\n"
+#~ " -c=? Irakurri konfigurazio fitxategi hau\n"
+#~ " -o=? Ezarri konfigurazio aukera arbitrario bat. Adib.: -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Erabilera: apt-sortpkgs [aukerak] fitxategia1 [fitxategia2...]\n"
+#~ "\n"
+#~ "apt-sortpkgs pakete fitxategiak ordenatzeko tresna soil bat da. Zein\n"
+#~ "motatako fitxategia den adierazteko -s aukera erabiltzen da.\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -h Laguntza testu hau\n"
+#~ " -s Erabili iturburu fitxategien ordenatzea\n"
+#~ " -c=? Irakurri konfigurazio fitxategi hau\n"
+#~ " -o=? Ezarri konfigurazio aukera arbitrario bat. Adib: -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Prozesu umeak huts egin du"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Gutxienez pakete bat zehaztu behar duzu iturburua lortzeko"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Huts egin du kanalizazioak sortzean"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Huts egin du gzip exekutatzean "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s %s-rentzat %s %s-ean konpilatua\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Huts egin du FILE* sortzean"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (URI analisia)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (dist analisia)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (dist analisia)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (dist analisia)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (dist analisia)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (URI analisia)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Gaizkieratutako %lu lerroa %s iturburu zerrendan (banaketa orokorra)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Gaizki osatutako %lu lerroa %s Iturburu zerrendan (dist analisia)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "%s %s paketea ez da aurkitu fitxategi mendekotasunak prozesatzean"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Ezin da atzitu %s iturburu paketeen zerrenda"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Fitxategiaren erreferentziak biltzen"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Ezin da %s pakete fitxategia analizatu (1)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "%s saltzaile blokeak ez du egiaztapen markarik"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Guztira bertsio dependentzia lekua: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Ez daukazu nahikoa leku libre %s(e)n."
+
+#~ msgid "Done"
+#~ msgstr "Eginda"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Abortatu instalazioa."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Barne Errorea, AllUpgade-k zerbait apurtu du"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ez da baliozko DEB pakete bat."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "%s CD-ROM muntatze puntua erabiltzen\n"
+#~ "CD-ROM-a muntatzen\n"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Hau ez da baliozko DEB fitxategi bat, ez du '%s', '%s' edo '%s' atalik "
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum ez dator bat"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Ezin izan dut %s paketeko fitxategi bat lokalizatu. Beharbada eskuz "
+#~ "konpondu beharko duzu paketea."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Ezin da erregistroa idatzi, openpty() -ek huts egin du (/dev/pts ez dago "
+#~ "muntaturik?)\n"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "%s konfigurazio fitxategia irekitzen"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Huts egin du %s kentzean"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Ezin da %s sortu"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Huts egin du %sinfo-tik datuak lortzean"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "info eta temp direktorioek fitxategi sistema berean egon behar dute"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Huts egin du %sinfo administrazio direktoriora aldatzean"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Barne errorea pakete Izen bat eskuratzerakoan"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Fitxategi zerrendaketa irakurtzen"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Huts egin du '%sinfo/%s' zerrenda-fitxategia irekitzean. Fitxategi hori "
+#~ "ezin baduzu leheneratu, hustu ezazu, eta berrinstalatu berehala "
+#~ "paketearen bertsio bera!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Huts egin du %sinfo/%s zerrenda fitxategia irakurtzean"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Barne errorea nodo bat eskuratzerakoan"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Huts egin du desbideratzeen %sdiversions fitxategia irekitzean"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Desbideratze fitxategia hondatuta dago"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Lerro baliogabea desbideratze fitxategian: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Barne errorea desbideratze bat gehitzean"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Paketearen katxea hasieratu behar da lehendabizi"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Ezin izan da pakete bat aurkitu: Burua, mugitu %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Okerreko ConfFile sekzioa egoera fitxategian. Desplazamendua %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Errorea MD5 analizatzean. Desplazamendua %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Ezin izan da %s(e)ra aldatu"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Ezin izan da baliozko kontrol fitxategi bat lokalizatu"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Ezin izan da %s(r)en kanalizazioa ireki"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Irakurri errorea %s prozesutik"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Goiburu-lerro bakarra eskuratu da %u karaktereen gainean"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Gaizki osatutako override %s, lerroa: %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Gaizki osatutako override %s, lerroa: %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Gaizki osatutako override %s, lerroa: %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "deskonpresorea"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "irakurrita; oraindik %lu irakurtzeke, baina ez da ezer geratzen"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "idatzita; oraindik %lu idazteke, baina ezin da"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Barne Errorea, ezin da atala kokatu"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "E: Acquire::gpgv::Options argumentu zerrenda luzeegia. Uzten."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Errorea gertatu da %s prozesatzean (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Gaizki osatutako %u lerroa %s Iturburu zerrendan (hornitzaile id-a)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Ezin da eraztuna ebatzi: '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Ezin izan zaio fitxategiari adabakia ezarri"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "%s-ren abiarazleak prozesatzen"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..bc6c872
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,4290 @@
+# translation of fi.po to Finnish
+# Finnish translation of apt.
+# This file is put in the public domain.
+# Tapio Lehtonen <tale@debian.org>, 2004-2006,2008.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.5.26\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2008-12-11 14:52+0200\n"
+"Last-Translator: Tapio Lehtonen <tale@debian.org>\n"
+"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Arkiston tarkistussumma on virheellinen"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Tapahtui virhe luettaessa arkiston tiedoston otsikkoa"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Arkiston tiedoston otsikko on virheellinen"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arkisto on pienempi kuin pitäisi"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Arkiston otsikoiden luku ei onnistunut"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Pakettia %s ei löytynyt"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Arkisto on turmeltunut"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar-ohjelman laskema tarkistussumma ei täsmää, arkisto on turmeltunut"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Tuntematon TAR-otsikon tyyppi %u, tiedosto %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Tämä ei ole kelvollinen DEB-arkisto, puuttuu tiedosto \"%s\""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Tapahtui sisäinen virhe, tiedostoa %s ei löydy"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Ohjaustiedosto ei jäsenny"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Tiedoston %s kirjoittaminen ei onnistunut"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Tiedoston %s sulkeminen ei onnistunut"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Polku %s on liian pitkä"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Purettiin %s useammin kuin kerran"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Kansio %s on korvautunut"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Paketti yrittää kirjoittaa korvautuksen kohteeseen %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Korvautuspolku on liian pitkä"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Tiedostolle %s ei toimi stat"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Nimen muuttaminen %s -> %s ei onnistunut"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Kansiota %s ollaan korvaamassa muulla kuin kansiolla"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Solmua ei löytynyt sen hajautuslokerosta"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Polku on liian pitkä"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Päälle kirjoitettava paketti täsmää mutta paketille %s ei ole versiota"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Tiedosto %s/%s kirjoitetaan paketista %s tulleen päälle"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Tiedostoa %s ei voi lukea"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Tiedostolle %s ei toimi stat"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Kutsuttiin DropNode mutta tiedostoon on vielä linkki"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Hajautusalkiota ei löytynyt!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Korvautuksen varaus ei onnistunut"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "AddDiversion: sisäinen virhe"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Yritetään kirjoittaa korvautuksen päälle, %s -> %s ja %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Korvautuksen kaksoislisäys %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Asetustiedoston kaksoiskappale %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Kansio %s on korvautunut"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Kansio %s on korvautunut"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Kansio %s on korvautunut"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Kansio %s on korvautunut"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Kansio %s on korvautunut"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "readlink %s ei onnistunut"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Tarkistussumma ei täsmää"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "nimen vaihto ei onnistunut, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Koko ei täsmää"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Virheellinen toiminto %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Virhe kirjoitettaessa"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Tiedoston %s nouto ei onnistunut %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"En löytänyt pakettia %s vastaavaa tiedostoa. Voit ehkä joutua korjaamaan "
+"tämän paketin itse (puuttuvan arkkitehtuurin vuoksi)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Avataan yhteys %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Menetelmän ajuria %s ei löytynyt"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Tarkista onko paketti \"dpkg-dev\" asennettu.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Menetelmä %s ei käynnistynyt oikein"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Pistä levy nimeltään: \"%s\" asemaan \"%s\" ja paina Enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Luettelokansio %s puuttuu."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Arkistokansio %s puuttuu."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Luettelokansiota ei voitu lukita"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Hakemistotiedoston tyyppi \"%s\" ei ole tuettu"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Noudetaan tiedosto %li / %li (jäljellä %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Noudetaan tiedosto %li / %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "Paketti %s olisi asennettava uudelleen, mutta sen arkistoa ei löydy."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Virhe, pkgProblemResolver::Resolve tuotti katkoja, syynä voi olla pysytetyt "
+"paketit."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Pulmia ei voi korjata, rikkinäisiä paketteja on pysytetty."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Pakettiluettelonn tai tilatiedoston avaaminen tai jäsennys epäonnistui."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Voit haluta suorittaa apt-get update näiden pulmien korjaamiseksi"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Lähteiden luetteloa ei pystynyt lukemaan."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Käännösvirhe lausekkeessa - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Julkaisua \"%s\" paketille \"%s\" ei löytynyt"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Versiota \"%s\" paketille \"%s\" ei löytynyt"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Tehtävää %s ei löytynyt"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Pakettia %s ei löytynyt"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Pakettia %s ei löytynyt"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Pakettia %s ei löydy"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Rivi %u on liian pitkä lähdeluettelossa %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Irrotetaan romppu...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Käytetään rompun liitoskohtaa %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Odotetaan levyä...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Liitetään romppu...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Tunnistetaan... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Tallennettu nimio: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Etsitään levyltä hakemistotiedostoja...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Hakemistoja löytyi: Asennuspakettien %zu, lähdekoodipakettien %zu, "
+"käännösten %zu ja allekirjoituksia löytyi %zu\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Löytyi nimiö: \"%s\"\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Tuo ei kelpaa nimeksi, yritä uudelleen.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Tämä levy on: \n"
+"\"%s\"\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopioidaan pakettiluetteloita..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Kirjoitetaan uusi lähdeluettelo\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Tämän levyn lähdekoodipakettien luettelon tietueita ovat:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Kansioon %s vaihto ei onnistu"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "stat %s ei onnistu."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Komento stat ei toiminut liitoskohdalle %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Komento stat ei toiminut rompulle"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Komentorivin valitsin \"%c\" [%s] on tuntematon."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Komentorivin valitsin %s on tuntematon"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Komentorivin valitsin %s ei ole totuusarvoinen"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Valitsin %s tarvitsee parametrin"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Valitsin %s: Asetusarvon määrityksessä on oltava =<arvo>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Valitsin %s tarvitsee kokonaislukuparametrin, ei \"%s\""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Valitsin \"%s\" on liian pitkä"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Arvo %s on tuntematon, yritä tosi tai epätosi."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Virheellinen toiminto %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Tuntematon tyypin lyhenne: \"%c\""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaksivirhe %s: %u: Lohko alkaa ilman nimeä."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaksivirhe %s: %u: väärän muotoinen nimikenttä"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaksivirhe %s: %u: Arvon jälkeen ylimääräistä roskaa"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Syntaksivirhe %s: %u: Direktiivejä voi olla vain ylimmällä tasolla"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaksivirhe %s: %u: Liian monta sisäkkäistä includea"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaksivirhe %s: %u: Sisällytetty tästä"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaksivirhe %s: %u: Tätä direktiiviä ei tueta \"%s\""
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "Syntaksivirhe %s: %u: Direktiivejä voi olla vain ylimmällä tasolla"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaksivirhe %s: %u: Ylimääräistä roskaa tiedoston lopussa"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Pulmia tehtäessä tiedostolle unlink"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Lukkoa ei käytetä kirjoitussuojatulle tiedostolle %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Lukkotiedostoa %s ei voitu avata"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Lukitusta ei käytetä NFS-liitetylle tiedostolle %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Lukkoa %s ei saada"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Odotettiin %s, mutta sitä ei ollut"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Aliprosessi %s aiheutti suojausvirheen."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Aliprosessi %s aiheutti suojausvirheen."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Aliprosessi %s palautti virhekoodin (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Aliprosessi %s lopetti odottamatta"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Lukuvirhe"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Virhe kirjoitettaessa"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Pulmia tiedoston sulkemisessa"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Prosessien välistä kommunikaatiota aliprosessiin ei saatu luotua"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Pakkaajan käynnistäminen ei onnistunut"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Tiedostoa %s ei voitu avata"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Putkea %s ei voitu avata"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "read, vielä %lu lukematta mutta tiedosto loppui"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "write, vielä %lu kirjoittamatta mutta epäonnistui"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Pulmia tiedoston sulkemisessa"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Pulmia tehtäessä tiedostolle sync"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Pulmia tehtäessä tiedostolle sync"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Tiedostolle %s ei toimi stat"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Tiedostoon %s kirjoittaminen ei onnistu"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Tyhjälle tiedostolle ei voi tehdä mmap:ia"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Ei voitu tehdä %lu tavun mmap:ia"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Putkea %s ei voitu avata"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Tiedoston %s avaaminen ei onnistunut"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Käynnistys ei onnistu"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Ei voitu tehdä %lu tavun mmap:ia"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Tiedoston typistäminen ei onnistunut"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Virhe!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Valmis"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Valmis"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Valintaa %s ei löydy"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Pakettitiedostoa %s (1) ei voi jäsentää"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Huomautus, valitaan %s eikä %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Virheellinen rivi korvautustiedostossa: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Pakettitiedostoa %s ei voi jäsentää (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Luettelokansiota ei voitu lukita"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Luettelokansiota ei voitu lukita"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Valmistellaan %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Valmistaudutaan tekemään asetukset: %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Valmistaudutaan poistamaan %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Valmistaudutaan poistamaan %s kokonaan"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Suoritetaan jälkiasennusliipaisin %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s asennettu"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Tehdään asetukset: %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Kansio \"%s\" puuttuu."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Tiedostoa %s ei voitu avata"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Puretaan %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Asennetaan %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Poistetaan %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "%s poistettiin kokonaan"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s poistettiin kokonaan"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Tiedostoon %s kirjoittaminen ei onnistu"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Muodostetaan riippuvuussuhteiden puu"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Mahdolliset versiot"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Luodaan riippuvuudet"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Luetaan tilatiedot"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Tilatiedoston %s avaaminen ei onnistunut"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Tilapäisen tilatiedoston %s kirjoittaminen ei onnistunut"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Kirjoitettiin %i tietuetta.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Kirjoitettiin %i tietuetta joissa oli %i puuttuvaa tiedostoa.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Kirjoitettiin %i tietuetta joissa oli %i paritonta tiedostoa\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Kirjoitettiin %i tietuetta joissa oli %i puuttuvaa ja %i paritonta "
+"tiedostoa\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Kohteen %s tarkistussumma ei täsmää"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Paketointijärjestelmä \"%s\" ei ole tuettu"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Sopivaa paketointijärjestelmän tyyppiä ei saa selvitettyä"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Tiedostoa %s ei voitu avata"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Tämän asennusajo vaatii tilapäisesti poistettavaksi välttämättömän paketin "
+"%s Conflicts/Pre-Depends -kehämäärittelyn takia. Tämä on usein pahasta, "
+"mutta jos varmasti haluat tehdä niin, käytä APT::Force-LoopBreak -valitsinta."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Pakettivarasto on tyhjä"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Pakettivarasto on turmeltunut"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Pakettivaraston versio on yhteensopimaton"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Tämä APT ei tue versionhallintajärjestelmää \"%s\""
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Pakettivarasto on tehty muulle arkkitehtuurille"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Pakettivarasto on turmeltunut"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Riippuvuudet"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Esiriippuvuudet"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Ehdotukset"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Ristiriidat"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Suosittelut"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Korvaavuudet"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Rikkoo"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Täydet korvaavuudet"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "tärkeä"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "välttämätön"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "perus"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "ylimääräinen"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "valinnainen"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Pakettivaraston versionhallintajärjestelmä ei ole yhteensopiva"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Tapahtui virhe käsiteltäessä %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Jummijammi, annoit enemmän pakettien nimiä kuin tämä APT osaa käsitellä."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Jummijammi, annoit enemmän versioita kuin tämä APT osaa käsitellä."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Jummijammi, tämä APT ei osaa käsitellä noin montaa kuvausta."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Jummijammi, annoit enemmän riippuvuuksia kuin tämä APT osaa käsitellä."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Luetaan pakettiluetteloita"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Syöttö/Tulostus -virhe tallennettaessa pakettivarastoa"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Hakemistotiedoston tyyppi \"%s\" ei ole tuettu"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Asetustiedostossa on virheellinen tietue, Package-otsikko puuttuu"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Tunnistetyyppi %s on tuntematon"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Tärkeysjärjestystä ei määritetty tunnisteelle (tai se on nolla)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Rivi %u on väärän muotoinen lähdeluettelossa %s (tyyppi)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Tyyppi \"%s\" on tuntematon rivillä %u lähdeluettelossa %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Rivi %u on väärän muotoinen lähdeluettelossa %s (tyyppi)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Tyyppi \"%s\" on tuntematon rivillä %u lähdeluettelossa %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Tiedostossa sources.list on oltava rivejä joissa \"lähde\"-URI"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Joidenkin hakemistotiedostojen nouto ei onnistunut, ne on ohitettu tai "
+"käytetty vanhoja. "
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Käsitellään päivitystä"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Löytyi:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Nouda:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Siv:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Vrhe:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Noudettiin %st ajassa %s (%st/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Työskennellään]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Taltion vaihto: Pistä levy \n"
+"\"%s\"\n"
+"asemaan \"%s\" ja paina Enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Korjataan riippuvuuksia..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " ei onnistunut."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Riippuvuuksien korjaus ei onnistu"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Päivitysjoukon minimointi ei onnistu"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Valmis"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Halunnet suorittaa \"apt --fix-broken install\" korjaamaan nämä."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Kaikkia riippuvuuksia ei ole tyydytetty. Kokeile \"apt --fix-broken install"
+"\" ilmanpaketteja (tai ratkaise itse)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Huomautus, valitaan %s lausekkeella \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Huomautus, valitaan %s lausekkeella \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Huomautus, valitaan %s lausekkeella \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Paketti %s on näennäispaketti, jonka kattaa:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Asennettu]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Mahdolliset versiot"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Yksi pitää valita asennettavaksi."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Pakettia %s ei ole saatavilla, mutta toinen paketti viittaa siihen.\n"
+"Tämä voi tarkoittaa paketin puuttuvan, olevan vanhentunut tai\n"
+"saatavilla vain jostain muusta lähteestä\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Seuraavat paketit kuitenkin korvaavat sen:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Paketilla %s ei ole asennettavaa valintaa"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "Pakettia %s ei ole asennettu, niinpä sitä ei poisteta\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Pakettia %s ei ole asennettu, niinpä sitä ei poisteta\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Huomautus, valitaan %s eikä %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Yhtään pakettia ei löytynyt"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "VAROITUS: Seuraavian pakettien alkuperää ei voi varmistaa!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Varoitus varmistamisesta on ohitettu.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Joidenkin pakettien alkuperästä ei voitu varmistua"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Asennetaanko nämä paketit ilman todennusta?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Oli pulmia ja -y käytettiin ilman valitsinta --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Kansion %s vapaan tilan määrä ei selvinnyt"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Kansiossa %s ei ole riittävästi vapaata tilaa."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Noutokansiota ei saatu lukittua"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Joitakin paketteja ei voitu asentaa. On ehkä vaadittu mahdottomia tai,\n"
+"jos käytetään epävakaata jakelua, joitain vaadittuja paketteja ei ole\n"
+"vielä luotu tai siirretty Incoming-kansiosta."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Seuraavista tiedoista voi olla hyötyä selvitettäessä tilannetta:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Rikkinäiset paketit"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Joidenkin arkistojen nouto ei onnistunut, ehkä \"apt-get update\" auttaa tai "
+"kokeile --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Sisäinen virhe, InstallPackages kutsuttiin rikkinäisille paketeille!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Paketteja pitäisi poistaa mutta Remove ei ole käytössä."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Oli pulmia ja -y käytettiin ilman valitsinta --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Oli pulmia ja -y käytettiin ilman valitsinta --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Tapahtui sisäinen virhe, järjestäminen keskeytyi"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"No jo on... Koot eivät täsmää, sähköpostita email apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Noudettavaa arkistoa %st/%st.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Noudettavaa arkistoa %st.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Toiminnon jälkeen käytetään %s t lisää levytilaa.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Toiminnon jälkeen vapautuu %s t levytilaa.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"On määritetty Trivial Only mutta tämä ei ole itsestäänselvä toimenpide."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Kyllä, tee kuten käsketään!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Olet aikeissa tehdä mahdollisesti vahingollisen toimenpiteen.\n"
+"Jatka kirjoittamalla \"%s\"\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Keskeytä."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Haluatko jatkaa?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Joidenkin tiedostojen nouto ei onnistunut"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Nouto on valmis ja määrätty vain nouto"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing ja taltion vaihto ei ole nyt tuettu"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Puuttuvia paketteja ei voi korjata."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Asennus keskeytetään."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"On tarkoitus olla poistamatta mitään, joten AutoRemover:ia ei voi käynnistää"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, nähtävästi AutoRemover tuhosi jotain, mitä ei pitäisi tapahtua.\n"
+"Tekisitkö vikailmoituksen apt:sta."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Sisäinen virhe, AutoRemover rikkoi jotain"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Seuraavat paketit asennettiin automaattisesti, eivätkä ne ole enää "
+"vaadittuja:"
+msgstr[1] ""
+"Seuraavat paketit asennettiin automaattisesti, eivätkä ne ole enää "
+"vaadittuja:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"Seuraavat paketit asennettiin automaattisesti, eivätkä ne ole enää "
+"vaadittuja:"
+msgstr[1] ""
+"Seuraavat paketit asennettiin automaattisesti, eivätkä ne ole enää "
+"vaadittuja:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Poista ne komennolla \"%s\"."
+msgstr[1] "Poista ne komennolla \"%s\"."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Seuraavat ylimääräiset paketit on merkitty asennettaviksi:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Ehdotetut paketit:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Suositellut paketit:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Ohitetaan %s, se on jo asennettu eikä ole komennettu päivitystä.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Ohitetaan %s, se on jo asennettu eikä ole komennettu päivitystä.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Paketin %s uudelleenasennus ei ole mahdollista, sitä ei voi noutaa.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s on jo uusin versio.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Valittiin versio %s (%s) paketille %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Valittiin versio %s (%s) paketille %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Asennettu]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Asennettu]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Asennettu]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Asennettu]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "mutta %s on asennettu"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "mutta %s on merkitty asennettavaksi"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "mutta ei ole asennuskelpoinen"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "mutta on näennäispaketti"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "mutta ei ole merkitty asennettavaksi"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "mutta ei ole asennettu"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " tai"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Näillä paketeilla on tyydyttämättömiä riippuvuuksia:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Seuraavat UUDET paketit asennetaan:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Seuraavat paketit POISTETAAN:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Nämä paketit on jätetty odottamaan:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Nämä paketit päivitetään:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Nämä paketit VARHENNETAAN:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Seuraavat pysytetyt paketit muutetaan:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (syynä %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"VAROITUS: Seuraavat välttämättömät paketit poistetaan.\n"
+"Näin EI PITÄISI tehdä jos ei aivan tarkkaan tiedä mitä tekee!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu päivitetty, %lu uutta asennusta, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu uudelleen asennettua, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu varhennettua, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu poistettavaa ja %lu päivittämätöntä.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu ei asennettu kokonaan tai poistettiin.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[K/e]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "K"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "On annettava täsmälleen yksi lauseke"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Pakettitiedostot:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Varasto ei ole ajan tasalla, pakettitiedostoa ei löydy kansiosta"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Paketit joissa tunniste:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Asennettu: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Ehdokas: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ei mitään)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versiotaulukko:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Pakettia %s ei löytynyt"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Pakettia %s ei löytynyt"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Pakettia %s ei löytynyt"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "stat ei toiminut lähdepakettiluettelolle %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "On annettava ainakin yksi paketti jonka lähdekoodi noudetaan"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Paketin %s lähdekoodipakettia ei löytynyt"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Ohitetaan jo noudettu tiedosto \"%s\"\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "On noudettava %st/%st lähdekoodiarkistoja.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "On noudettava %st lähdekoodiarkistoja.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Nouda lähdekoodi %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Joidenkin arkistojen noutaminen ei onnistunut."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Ohitetaan purku jo puretun lähdekoodin %s kohdalla\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Purkukomento \"%s\" ei onnistunut.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Tarkista onko paketti \"dpkg-dev\" asennettu.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Paketointikomento \"%s\" ei onnistunut.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Paketille %s ei ole saatavilla riippuvuustietoja"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "Paketille %s ei ole määritetty paketointiriippuvuuksia.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"On annettava ainakin yksi paketti jonka paketointiriippuvuudet tarkistetaan"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Paketointiriippuvuuksien käsittely ei onnistunut"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Paketointiriippuvuuksien käsittely ei onnistunut"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Nimen muuttaminen %s -> %s ei onnistunut"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Paketin %s versiossa %s on tyydyttämätön riippuvuus:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Komento update ei käytä parametreja"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Komento update ei käytä parametreja"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Pakettien kokonaismäärä : "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Pakettien kokonaismäärä : "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Tavallisia paketteja: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Aitoja näennäispaketteja: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Yksinkertaisia näennäispaketteja: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Sekanäennäispaketteja: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Puuttuu: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Eri versioita yhteensä: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Eri kuvauksia yhteensä: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Riippuvuuksia yhteensä: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Versio/tdsto suhteita yht: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Kuvaus/tdsto suhteita yht: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Tarjoamiskuvauksia yhteensä: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Erilaisia merkkijonoja yhteensä: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Löysää tilaa yhteensä: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Käytetty tila yhteensä: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Näytä lähdetietueet"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Etsi pakettiluettelosta säännöllisellä lausekkeella"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Näytä paketin riippuvuustiedot käsittelemättömässä muodossa"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Näytä paketin käänteiset riippuvuudet"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Näytä paketin tietue luettavassa muodossa"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Luettele järjestelmän kaikkien pakettien nimet"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Näytä mistä asennuspaketteja haetaan"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Kirjoita levylle nimi, kuten \"Debian 2.1r1 Levy 1\""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Aseta levy asemaan ja paina Enter"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Nimen muuttaminen %s -> %s ei onnistunut"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Toista tämä lopuille rompuille kasassasi."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Parametrit eivät ole pareittain"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Käyttö: apt-config [valitsimet] komento\n"
+"\n"
+"apt-config on yksinkertainen työkalu APT:n asetustiedoston lukemiseen\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Käyttö: apt-extracttemplates tdsto1 [tdsto2 ...]\n"
+"\n"
+"apt-extracttemplates on työkalu asetus- ja mallitietojen \n"
+"poimintaan debian-paketeista\n"
+"\n"
+"Valitsimet:\n"
+" -h Tämä ohje\n"
+" -t Aseta väliaikaisten tiedostojen kansio\n"
+" -c=? Lue tämä asetustiedosto\n"
+" -o=? Aseta mikä asetusvalitsin tahansa, esim. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Ohjelman debconf versiota ei saa selvitettyä. Onko debconf asennettu?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Pakettia %s ei löytynyt"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Sisäinen virhe, resolver rikkoi jotain"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Tuetut moduulit:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Käyttö: apt-get [valitsimet] komento\n"
+" apt-get [valitsimet] install|remove pkt1 [pkt2 ...]\n"
+" apt-get [valitsimet] source pkt1 [pkt2 ...]\n"
+"\n"
+"apt-get on yksinkertainen komentorivityökalu pakettien noutamiseen\n"
+"ja asentamiseen. Useimmiten käytetyt komennot ovat update ja \n"
+"install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Nouda uusi pakettiluettelo"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Tee päivitys"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Asenna uusia paketteja (esim. libc6 eikä libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Asenna uusia paketteja (esim. libc6 eikä libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Poista paketteja"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Poista paketit asennustiedostoineen"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Poista kaikki käyttämättömät paketit"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Koko jakelun päivitys, katso apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Noudata dselect:n valintoja"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Määritä paketointiriippuvuudet lähdekoodipaketeille"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Poista noudetut pakettitiedostot"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Poista vanhat noudetut tiedostot"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Tarkasta ettei ole tyydyttämättömiä riippuvuuksia"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Nouda lähdekoodiarkistoja"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "On annettava ainakin yksi paketti jonka lähdekoodi noudetaan"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Käyttö: apt-extracttemplates tdsto1 [tdsto2 ...]\n"
+"\n"
+"apt-extracttemplates on työkalu asetus- ja mallitietojen \n"
+"poimintaan debian-paketeista\n"
+"\n"
+"Valitsimet:\n"
+" -h Tämä ohje\n"
+" -t Aseta väliaikaisten tiedostojen kansio\n"
+" -c=? Lue tämä asetustiedosto\n"
+" -o=? Aseta mikä asetusvalitsin tahansa, esim. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Käyttö: apt-extracttemplates tdsto1 [tdsto2 ...]\n"
+"\n"
+"apt-extracttemplates on työkalu asetus- ja mallitietojen \n"
+"poimintaan debian-paketeista\n"
+"\n"
+"Valitsimet:\n"
+" -h Tämä ohje\n"
+" -t Aseta väliaikaisten tiedostojen kansio\n"
+" -c=? Lue tämä asetustiedosto\n"
+" -o=? Aseta mikä asetusvalitsin tahansa, esim. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "mutta ei ole asennettu"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Seuraavat UUDET paketit asennetaan:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s on jo uusin versio.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s on jo uusin versio.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Tiedoston %s avaaminen ei onnistunut"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Tarkista onko paketti \"dpkg-dev\" asennettu.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Tuntematon pakettitietue!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Luetaan pakettiluetteloita"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Paketit joissa tunniste:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Paketit joissa tunniste:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Rikkinäiset paketit"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s on merkitty käyttäjän toimesta asennetuksi.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Luetaan tilatiedot"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Oletusasetus ei kelpaa!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Jatka painamalla Enter."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Haluatko poistaa aiemmin noudettuja .deb-tiedostoja?"
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Tapahtui virheitä purettaessa. Tehdään asennettujen"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "pakettien asetukset. Samat virheet voivat tulla toiseen kertaan"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"tai tyydyttämättömät riippuvuudet aiheuttavat virheitä. Tämä ei haittaa"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"vain tätä viestiä ennen tulleilla virheillä on merkitystä. Korjaa ne ja aja "
+"[I]nstall uudestaan"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Yhdistetään saatavuustiedot"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Paketin laajennuslista on liian pitkä"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Tapahtui virhe käsiteltäessa kansiota %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lähteiden laajennuslista on liian pitkä"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr ""
+"Tapahtui virhe kirjoitettaessa otsikkotietoa sisällysluettelotiedostoon"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Tapahtui virhe käsiteltäessä sisällysluetteloa %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Käyttö: apt-ftparchive [valitsimet] komento\n"
+"Komennot: packages binääripolku [poikkeustdsto [polun alku]]\n"
+" sources lähdepolku [poikkeustdsto [polun alku]]\n"
+" contents polku\n"
+" release polku\n"
+" generate asetukset [ryhmät]\n"
+" clean asetukset\n"
+"\n"
+"apt-ftparchive tuottaa hakemistoja Debianin arkistoista. Monta "
+"tuottamistapaa\n"
+"on tuettu alkaen täysin automaattisista toiminnallisesti samoihin kuin\n"
+"dpkg-scanpackages ja dpkg-scansources.\n"
+"\n"
+"apt-ftparchive tuottaa pakettitiedostoja .deb-tiedostojen puusta.\n"
+"Pakettitiedostossa on kunkin paketin kaikkien ohjauskenttien\n"
+"sisältö sekä MD5 tiiviste ja tiedoston koko. Poikkeus-\n"
+"tiedostolla voidaan arvot Priority ja Section pakottaa halutuiksi.\n"
+"\n"
+"Samaan tapaan apt-ftparchive tuottaa lähdetiedostoja\n"
+".dscs-tiedostojen puusta. Valitsimella --source-overrride voidaan\n"
+"määrittää lähteiden poikkeustiedosto.\n"
+"\n"
+"Komennot \"packages\" ja \"sources\" olisi suoritettava puun juuressa.\n"
+"Binääripolun olisi osoitettava rekursiivisen haun alkukohtaan ja\n"
+"poikkeustiedostossa olisi oltava poikkeusilmaisimet. Polun alku\n"
+"yhdistetään tiedoston nimeen jos se on annettu. Esimerkki\n"
+"käytöstä Debianin arkiston kanssa:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Valitsimet:\n"
+" -h Tämä ohje\n"
+" --md5 MD5 luonti\n"
+" -s=? Lähteiden poikkeustdosto\n"
+" -q Ei tulostusta\n"
+" -d=? Valinnainen välimuistitietokanta\n"
+" --no-delink delinking-virheenjäljitys päälle\n"
+" --contents Sisällysluettelotiedoston luonti\n"
+" -c=? Lue tämä asetustiedosto\n"
+" -o=? Aseta mikä asetusvalitsin tahansa"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Mitkään valinnat eivät täsmänneet"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Pakettitiedostojen ryhmästä \"%s\" puuttuu joitain tiedostoja"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Tietokanta on turmeltunut, tiedosto nimetty %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Tietokanta on vanha, yritetään päivittää %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Tietokannan muoto ei kelpaa. Jos tehtiin päivitys vanhasta apt:n versiosta, "
+"on tietokanta poistettava ja luotava uudelleen."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Tietokantatiedostoa %s ei saatu avattua: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "readlink %s ei onnistunut"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arkistolla ei ole ohjaustietuetta"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Kohdistinta ei saada"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Muistin varaaminen ei onnistunut"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Tuntematon pakkausalgoritmi \"%s\""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Pakattu tulostus %s tarvitsee pakkausjoukon"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "IPC-putken luominen aliprosessiin ei onnistunut"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "fork ei onnistunut"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Compress-lapsiprosessi"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Sisäinen virhe, prosessin %s luominen ei onnistunut"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Syöttö/tulostus aliprosessiin/tiedostoon ei onnistunut"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Lukeminen ei onnistunut laskettaessa MD5:ttä"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Tiedoston %s avaaminen ei onnistunut"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Poikkeustiedoston %s lukeminen ei onnistunut"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Kansiota %s ei voi lukea\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Tdstolle %s ei toimi stat\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Tiedostossa virheitä "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Osoitteen %s selvitys ei onnistunut"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Puun läpikäynti ei onnistunut"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Tiedoston %s avaaminen ei onnistunut"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Linkin %s -> %s luonti ei onnistunut"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLinkin yläraja %st saavutettu.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arkistossa ei ollut pakettikenttää"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s:llä ei ole poikkeustietuetta\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s ylläpitäjä on %s eikä %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s:llä ei ole poikkeustietuetta\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s:llä ei ole binääristäkään poikkeustietuetta\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Odotetaan otsikoita"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP-palvelin lähetti virheellisen vastausotsikon"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Virheellinen otsikkorivi"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP-palvelin lähetti virheellisen Content-Length-otsikon"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP-palvelin lähetti virheellisen Content-Range-otsikon"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "HTTP-palvelimen arvoaluetuki on rikki"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Tuntematon päiväysmuoto"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Virheellinen otsikkotieto"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Yhteys ei toiminut"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Sisäinen virhe"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Rompputietokantaa %s ei voi lukea"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Käytä komentoa apt-cdrom jotta APT tunnistaa tämän rompun, apt-get update ei "
+"osaa lisätä uusia romppuja"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Väärä romppu"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Rompun %s irrottaminen ei onnistu, se on ehkä käytössä."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Levyä ei löydy"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Tiedostoa ei löydy"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Avataan yhteys %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Avataan yhteys %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Pistokeen luonti ei onnistu %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Yhteyden %s avaus ei onnistu: %s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Ei onnistunut"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Yhteyttä %s ei voitu muodostaa: %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Yhteyttä %s ei voitu muodostaa: %s (%s), yhteys aikakatkaistiin"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Avataan yhteys %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nimeä \"%s\" ei voitu selvittää"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Tilapäinen häiriö selvitettäessä \"%s\""
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Jotain kenkkua tapahtui selvitettäessä \"%s: %s\" (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Jotain kenkkua tapahtui selvitettäessä \"%s: %s\" (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Ei ole mahdollista muodostaa yhteyttä %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Komento stat ei toiminut"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI on kelvoton, paikallinen URI ei saa alkaa //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Kirjaudutaan sisään"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Vastapään nimeä ei saa selville"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Paikallista nimeä ei saa selville"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Palvelin ei huolinut yhteyttä ilmoituksella: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER ei onnistunut, palvelimen ilmoitus: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS ei onnistunut, palvelimen ilmoitus: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Määritettiin välipalvelin mutta ei komentotiedostoa kirjautumiseen, Acquire::"
+"ftp::ProxyLogin on tyhjä."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Komentotiedoston rivi \"%s\" ei toiminut, palvelin ilmoitti: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE ei toiminut, palvelin ilmoitti: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Yhteys aikakatkaistiin"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Palvelin sulki yhteyden"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Vastaus aiheutti puskurin ylivuodon."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Yhteyskäytäntö on turmeltunut"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Pistoketta ei voitu luoda"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Pistoketta ei voitu kytkeä, yhteys aikakatkaistiin"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Passiivista pistoketta ei voitu kytkeä."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo ei saanut kuuntelupistoketta"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Pistoketta ei voitu nimetä"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Pistoketta ei voitu kuunnella"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Pistokkeen nimeä ei saatu selville"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Komennon PORT lähetys ei onnistu"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Tuntematon osoiteperhe %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT ei onnistunut, palvelin ilmoitti: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Pistokkeen kytkeminen aikakatkaistiin"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Yhteyttä ei voitu hyväksyä"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Pulmia tiedoston hajautuksessa"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Tiedostoa ei saatu noudettua, palvelin ilmoitti \"%s\""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Pistoke aikakatkaistiin"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Tiedonsiirto ei onnistunut, palvelin ilmoitti \"%s\""
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Kysely"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Käynnistys ei onnistu"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "LÖytyi ainakin yksi kelvoton allekirjoitus."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Sisäinen virhe: Allekirjoitus kelpaa, mutta avaimen sormenjälki tuntematon?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Ei käynnistynyt \"%s\" allekirjoitusta tarkistamaan (onko gnupg asennettu?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Tapahtui tuntematon virhe suoritettaessa apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Seuraavat allekirjoitukset eivät olleet kelvollisia:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Seuraavia allekirjoituksia ei voinut varmentaa koska julkista avainta ei ole "
+"saatavilla:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Tapahtui virhe kirjoitettaessa tiedostoon"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Tapahtui virhe luettaessa palvelimelta. Etäpää sulki yhteyden"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Tapahtui virhe luettaessa palvelimelta"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Tapahtui virhe kirjoitettaessa tiedostoon"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Select ei toiminut"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Yhteys aikakatkaistiin"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Tapahtui virhe kirjoitettaessa tulostustiedostoon"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Tiedoston muutospäivämäärää ei saatu vaihdettua"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Yhteys katkesi ennenaikaisesti"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Arkiston tiedoston otsikko on virheellinen"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s poistettu"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Pakettitiedosto %s ei ole ajan tasalla."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Pakettihakemistotiedostot ovat turmeltuneet. Paketille %s ei ole Filename-"
+#~ "kenttää."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Tiedostoa %s ei voitu avata"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Tiedostoa %s ei voitu avata"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Avataan asetustiedosto %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Avataan %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Tyydyttämättömiä riippuvuuksia. Koita käyttää --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Saatat haluta suorittaa \"apt --fix-broken install\" korjaamaan nämä:"
+
+#~ msgid "(not found)"
+#~ msgstr "(ei löydy)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Paketin tunnistenumero: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Julkisia avaimia ei ole saatavilla, avainten ID:t ovat:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Kansio %s on korvautunut"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "riippuvuutta %s paketille %s ei voi tyydyttää koska pakettia %s ei löydy"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "riippuvuutta %s paketille %s ei voi tyydyttää koska pakettia %s ei löydy"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Riippuvutta %s paketille %s ei voi tyydyttää: Asennettu paketti %s on "
+#~ "liian uusi"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%s riippuvuutta paketille %s ei voi tyydyttää koska mikään paketin %s "
+#~ "versio ei vastaa versioriippuvuuksia"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "riippuvuutta %s paketille %s ei voi tyydyttää koska pakettia %s ei löydy"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Riippuvuutta %s paketille %s ei voi tyydyttää: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Paketointiriippuvuuksia paketille %s ei voi tyydyttää."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Ilmeni pulmia poistettaessa tiedosto %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "unlink %s ei onnistunut"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Käyttö : apt-cache [valitsimet] komento\n"
+#~ " apt-cache [valitsimet] show pkt1 [pkt2 ...]\n"
+#~ "\n"
+#~ "apt-cache on alemman tason työkalu APT:n konekielisten\n"
+#~ "välimuistitiedostojen käsittelyyn ja tutkimiseen\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Valitsimet:\n"
+#~ " -h Tämä ohje\n"
+#~ " -p=? Pakettivarasto\n"
+#~ " -s=? Lähdevälimuisti\n"
+#~ " -q Poista edistymisen ilmaisin\n"
+#~ " -i Näytä vain tärkeät riippuvuudet unmet-komennossa\n"
+#~ " -c=? Lue tämä asetustiedosto\n"
+#~ " -o=? Aseta mikä asetusvalitsin tahansa, esim. -o dir::cache=/tmp\n"
+#~ "Lisätietoja apt-cache(8) ja apt.conf(5) käsikirjasivuilla.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Valitsimet:\n"
+#~ " -h Tämä ohje\n"
+#~ " -c=? Lue tämä asetustiedosto\n"
+#~ " -o=? Aseta mikä asetusvalitsin tahansa, esim. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -d Download only - do NOT install or unpack archives\n"
+#~ " -s No-act. Perform ordering simulation\n"
+#~ " -y Assume Yes to all queries and do not prompt\n"
+#~ " -f Attempt to correct a system with broken dependencies in place\n"
+#~ " -m Attempt to continue if archives are unlocatable\n"
+#~ " -u Show a list of upgraded packages as well\n"
+#~ " -b Build the source package after fetching it\n"
+#~ " -V Show verbose version numbers\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-get(8), sources.list(5) and apt.conf(5) manual\n"
+#~ "pages for more information and options.\n"
+#~ " This APT has Super Cow Powers.\n"
+#~ msgstr ""
+#~ "Valitsimet:\n"
+#~ " -h Tämä ohje\n"
+#~ " -q Lokiin sopiva tulostus - edistymisen ilmaisin jätetään pois\n"
+#~ " -qq Ei lainkaan tulostusta paitsi virheistä\n"
+#~ " -d Vain nouto - paketteja EI asenneta tai pureta\n"
+#~ " -s Älä tee mitään. Oikean toiminnan simulaatio\n"
+#~ " -y Vastataan Kyllä kaikkiin kysymyksiin eikä kehoitetta näytetä\n"
+#~ " -f Yritä jatkaa jos eheystarkastus löysi virheen\n"
+#~ " -m Yritä jatkaa jos arkistojen sijainti ei selviä\n"
+#~ " -u Näytä luettelo myös päivitetyistä paketeista\n"
+#~ " -b Käännä lähdekoodipaketti noudon jälkeen\n"
+#~ " -V Näytä pitkät versionumerot\n"
+#~ " -c=? Lue tämä asetustiedosto\n"
+#~ " -o=? Aseta mikä asetusvalitsin tahansa, esim. -o dir::cache=/tmp\n"
+#~ "Katso apt-get(8), sources.list(5) ja apt.conf(5) käsikirjasivuilta\n"
+#~ "lisätietoja ja lisää valitsimia.\n"
+#~ " This APT has Super Cow Powers.\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Käyttö: apt-sortpkgs [valitsimet] tdsto1 [tdsto2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs on yksinkertainen työkalu pakettitiedostojen lajitteluun.\n"
+#~ "Valitsimella -s ilmaistaan minkälainen tiedosto on.\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -h Tämä ohje\n"
+#~ " -s Käytä lähdetiedostolajittelua\n"
+#~ " -c=? Lue tämä asetustiedosto\n"
+#~ " -o=? Aseta mikä asetusvalitsin tahansa, esim. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Lapsiprosessi kaatui"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "On annettava ainakin yksi paketti jonka lähdekoodi noudetaan"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Putkien luonti ei onnistunut"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "exec gzip ei onnistunut"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s laitealustalle %s käännöksen päiväys %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "FILE* luominen ei onnistunut"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (URI-jäsennys)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (dist-jäsennys)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (dist-jäsennys)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (dist-jäsennys)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (dist-jäsennys)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (URI-jäsennys)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (Absoluuttinen dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Väärän muotoinen rivi %lu lähdeluettelossa %s (dist-jäsennys)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Pakettia %s %s ei löytynyt käsiteltäessä tiedostojen riippuvuuksia."
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "stat ei toiminut lähdepakettiluettelolle %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Kootaan tiedostojen tarjoamistietoja"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Pakettitiedostoa %s (1) ei voi jäsentää"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Toimittajan lohkosta %s puuttuu sormenjälki"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Versioriippuvuustila yhteensä: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Kansiossa %s ei ole riittävästi vapaata tilaa"
+
+#~ msgid "Done"
+#~ msgstr "Valmis"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Asennus keskeytetään."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Sisäinen virhe, AllUpgrade rikkoi jotain"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ei kelpaa DEB-paketiksi."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Käytetään rompun liitoskohtaa %s\n"
+#~ "Liitetään romppu\n"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Tämä ei ole kelvollinen DEB-arkisto, jokin osista \"%s\", \"%s\" tai \"%s"
+#~ "\" puuttuu."
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum ei täsmää"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Pakettia %s vastaavaa tiedostoa ei löytynyt. Voit ehkä joutua korjaamaan "
+#~ "tämän paketin itse."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Lokiin ei voi kirjoittaa, openpty() epäonnistui (onko /dev/pts "
+#~ "liittämättä?)\n"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Avataan asetustiedosto %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Tiedoston %s poistaminen ei onnistunut"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Tiedostoa %s ei voi luoda"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "stat ei toimi: %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Kansioiden info ja temp pitää olla samassa tiedostojärjestelmässä"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Ylläpitokansioon %sinfo vaihtaminen ei onnistunut"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Tapahtui sisäinen virhe haettaessa paketin nimeä"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Luetaan tiedostoluetteloa"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Luettelotiedoston \"%sinfo/%s\" avaaminen ei onnistunut. Jos tätä "
+#~ "tiedostoa ei voi palauttaa, tyhjennä tiedosto ja asenna välittömästi "
+#~ "paketin sama versio uudelleen!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Tapahtui virhe luettelotiedostoa %sinfo/%s luettaessa"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Tapahtui sisäinen virhe varattaessa tiedostosolmua"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Tapahtui virhe avattaessa korvautustiedostoa %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Korvautustiedosto on turmeltunut"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Virheellinen rivi korvautustiedostossa: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Tapahtui sisäinen virhe lisättäessä korvautusta"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Pakettivarasto on ensin alustettava"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Paketin otsikkoa ei löydy, kohta %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Virheellinen ConfFile-lohko tilatiedostossa. Kohta %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Tapahtui virhe jäsennettäessä MD5:ttä. Kohta %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Kansioon %s vaihto ei onnistunut"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Kelvollista ohjaustiedostoa ei löydy"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Putkea %s ei voitu avata"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Prosessi %s ilmoitti lukuvirheestä"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Vastaanotettiin yksi otsikkorivi pituudeltaan yli %u merkkiä"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 3"
+
+#~ msgid "decompressor"
+#~ msgstr "purkaja"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "read, vielä %lu lukematta mutta tiedosto loppui"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "write, vielä %lu kirjoittamatta mutta epäonnistui"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Tapahtui sisäinen virhe, tiedostoa ei löydy"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Parametrien luettelo Acquire::gpgv::Options liian pitkä. Lopetetaan."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Tapahtui virhe käsiteltäessä %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr ""
+#~ "Rivi %u on väärän muotoinen lähdeluettelossa%s (toimittajan tunniste)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Avainrengasta \"%s\" ei saatavilla"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Tiedostoa %s ei voitu avata"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Käsitellään %s:n liipaisimia"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "Tila loppui kesken dynaamiselta MMap:lta"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..b5d816e
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,4679 @@
+# translation of apt to French
+# Advanced Package Transfer - APT message translation catalog
+# French messages
+#
+# Pierre Machard <pmachard@tuxfamily.org>, 2002,2003,2004.
+# Christian Perrier <bubulle@debian.org>, 2004-2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Julien Patriarca <leatherface@debian.org>, 2013, 2017, 2018.
+# Baptiste Jammet <baptiste@mailoo.org>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2019-01-21 09:19+0100\n"
+"Last-Translator: Julien Patriarca <leatherface@debian.org>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.5\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Signature d'archive non valable"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Erreur de lecture de l'en-tête du membre d'archive"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "En-tête du membre d'archive non valable"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "L'archive est trop petite"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Échec de la lecture des en-têtes d'archive"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Impossible de trouver un archiveur configuré pour %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Archive corrompue"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Échec dans la somme de contrôle de tar, l'archive est corrompue"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Type d'en-tête %u inconnu pour TAR, partie %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Ce n'est pas une archive DEB valable, partie « %s » manquante"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Erreur interne, ne peut localiser la partie %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Fichier de contrôle non traitable"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Erreur d'écriture du fichier %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Échec de clôture du fichier %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Le chemin %s est trop long"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Veuillez décompresser %s plus d'une fois"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Le répertoire %s est détourné"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Le paquet est en train d'essayer d'écrire sur la cible détournée %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Le chemin de déviation est trop long"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Impossible de statuer %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Impossible de changer le nom %s en %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Le répertoire %s va être remplacé par un non-répertoire"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Échec pour localiser le nœud dans la table de hachage"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Le chemin est trop long"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Écrase la correspondance de paquet sans version pour %s "
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Le fichier %s/%s écrase celui inclus dans le paquet %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Impossible de lire %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Impossible de statuer pour %s."
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode appelé sur un nœud toujours lié"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Impossible de situer l'élément haché !"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Échec lors de l'allocation de la déviation"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Erreur interne dans AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Essaye d'écraser une déviation, %s -> %s et %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Addition double d'une déviation %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Fichier de configuration en double %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Les mises à jour depuis un tel dépôt ne peuvent s'effectuer de manière "
+"sécurisée, et sont donc désactivées par défaut."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Les données depuis un tel dépôt ne peuvent être authentifiées et sont donc "
+"potentiellement dangereuses à utiliser."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Voir les pages de manuel d'apt-secure(8) pour la création des dépôts et les "
+"détails de configuration d'un utilisateur."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Le dépôt %s n'est plus signé"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Le dépôt %s ne contient plus de fichier Release."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Ceci n'est généralement pas autorisé, mais l'option Acquire::"
+"AllowDowngradeToInsecureRepositories a été passée pour l'outrepasser."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Le dépôt %s n'est pas signé."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Le dépôt %s n'a pas de fichier Release."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Le dépôt %s ne fournit que de faibles informations de sécurité."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Impossible de lire le lien %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Somme de contrôle de hachage incohérente"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"Manque d'information disponible pour réaliser ce téléchargement de manière "
+"sécurisée."
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "impossible de changer le nom, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Taille incohérente"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Format de fichier non valable"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Erreur de signature"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Le fichier signé en clair n'est pas valable, ce qui a été reçu est « %s ». "
+"Peut-être le réseau nécessite-t-il une authentification."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Une erreur s'est produite lors du contrôle de la signature. Le dépôt n'est "
+"pas mis à jour et les fichiers d'index précédents seront utilisés. Erreur de "
+"GPG : %s : %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Erreur de GPG : %s : %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Le fichier configuré « %s » ne sera pas pris en compte car le dépôt « %s » "
+"ne dispose pas de la source « %s » (erreur de saisie dans sources.list ?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Le fichier configuré « %s » ne sera pas pris en compte car le dépôt « %s » "
+"ne prend pas en charge l'architecture « %s »"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Le fichier configuré « %s » ne sera pas pris en compte car le dépôt « %s » "
+"ne semble pas capable de le fournir (erreur de saisie dans sources.list ?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Le fichier configuré « %s » ne sera pas pris en compte car le dépôt « %s » "
+"fournit seulement des informations de sécurité faibles à son propos"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Le fichier « Release » pour %s est périmé (invalide depuis %s). Les mises à "
+"jour depuis ce dépôt ne s'effectueront pas."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Le fichier « Release » pour %s n'est pas encore valable (invalide pendant "
+"encore %s). Les mises à jour depuis ce dépôt ne s'effectueront pas."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Distribution en conflit : %s (%s attendu, mais %s obtenu)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "Le dépôt « %s » a modifié sa valeur « %s » de « %s » à « %s »"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+"Le dépôt « %s » a modifié sa priorité par défaut pour « %s » de « %hi » à "
+"« %hi »."
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr "Plus d'information disponible dans la note de mise à jour ici : %s"
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"Ceci doit être pleinement accepté avant que les mises à jour depuis ce dépôt "
+"puissent être appliquées. Veuillez vous référer aux pages de manuel « %s » "
+"pour plus de détails."
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Impossible de récupérer %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Impossible de localiser un fichier du paquet %s. Cela signifie que vous "
+"devrez corriger ce paquet vous-même (absence d'architecture)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+"Impossible de trouver une source de téléchargement de la version « %s » de "
+"« %s »"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Journal des modifications indisponible pour %s=%s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "La méthode « %s » est volontairement désactivée par configuration."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+".Si vous souhaitiez utiliser Tor, veuillez alors utiliser « %s » plutôt que "
+"« %s »."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Le pilote pour la méthode %s n'a pu être trouvé."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Le paquet %s est-il installé ?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "La méthode %s n'a pas démarré correctement"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Veuillez insérer le disque nommé « %s » dans le lecteur « %s » et appuyez "
+"sur la touche Entrée."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Le répertoire %s pour les listes n'existe pas."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Le répertoire d'archive %s n'existe pas."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Impossible de verrouiller le répertoire %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"Il n'existe aucun utilisateur « %s » pour le bac à sable sur ce système, il "
+"est impossible de supprimer les droits."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Le téléchargement est effectué en dehors du bac à sable en tant que « root » "
+"car le fichier « %s » n'est pas accessible par l'utilisateur « %s »."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Le nettoyage de « %s » n'est pas pris en charge"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Téléchargement du fichier %li sur %li (%s restant)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Téléchargement du fichier %li sur %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Le paquet %s doit être réinstallé, mais il est impossible de trouver son "
+"archive."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Erreur, pkgProblem::Resolve a généré des ruptures, ce qui a pu être causé "
+"par les paquets devant être gardés en l'état."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Impossible de corriger les problèmes, des paquets défectueux sont en mode "
+"« garder en l'état »."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Les listes de paquets ou le fichier « status » ne peuvent être analysés ou "
+"lus."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Vous pouvez lancer « apt-get update » pour corriger ces problèmes."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "La liste des sources ne peut être lue."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Erreur de compilation de l'expression rationnelle - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "La version « %s » de « %s » est introuvable"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "La version « %s » de « %s » n'a pu être trouvée"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Impossible de trouver la tâche « %s »"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr ""
+"Impossible de trouver de paquet correspondant à l'expression rationnelle "
+"« %s »"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr ""
+"Impossible de trouver de paquet correspondant à l'expression rationnelle "
+"« %s »"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Impossible de trouver le paquet %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Impossible de choisir les versions du paquet « %s » qui n'est qu'un paquet "
+"virtuel"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Impossible de choisir une nouvelle version du paquet « %s » qui n'est qu'un "
+"paquet virtuel"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Impossible de choisir une version candidate du paquet « %s » qui n'en n'a pas"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Impossible de choisir la version installée du paquet « %s » qui n'est pas "
+"installé"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Impossible de choisir une version installée ou candidate du paquet « %s » "
+"qui n'en n'a aucune"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "La ligne %u du fichier des listes de sources %s est trop longue."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Démontage du cédérom...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Utilisation du point de montage %s pour le cédérom\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Attente du disque...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montage du cédérom...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identification ..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Étiquette stockée : %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Examen du disque à la recherche de fichiers d'index...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"%zu index de paquets trouvés, %zu index de sources, %zu index de traductions "
+"et %zu signatures\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Aucun fichier de paquets trouvé. Ceci n'est peut-être pas un disque Debian "
+"ou bien l'architecture est-elle incorrecte."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Étiquette « %s » trouvée\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Ce nom n'est pas valable, veuillez recommencer.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Ce disque s'appelle :\n"
+"« %s »\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Copie des listes de paquets..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Écriture de la nouvelle liste de sources\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Les entrées de listes de sources pour ce disque sont :\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Impossible d'accéder à %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Impossible de localiser %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Impossible de localiser le point de montage %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Impossible d'accéder au cédérom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"L'option « %c » de la ligne de commande [%s] n'est pas reconnue quand elle "
+"est utilisée avec d'autres options."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"L'option %s de la ligne de commande n'est pas reconnue quand elle est "
+"utilisée avec d'autres options."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "L'option %s de la ligne de commande n'est pas une valeur booléenne"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "L'option %s nécessite un paramètre."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Option %s : l'item configuration doit être spécifiée avec un =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "L'option %s prend un nombre entier en paramètre, et non « %s »"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "L'option « %s » est trop longue"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr ""
+"La signification %s n'est pas comprise, veuillez essayer « true » ou "
+"« false »."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "L'opération %s n'est pas valable"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Type d'abréviation non reconnue : « %c »"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Erreur syntaxique %s:%u : le bloc commence sans aucun nom."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Erreur syntaxique %s:%u : balise mal formée"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Erreur syntaxique %s:%u : valeur suivie de choses illicites"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Erreur syntaxique %s:%u : ces directives ne peuvent être appliquées qu'au "
+"niveau le plus haut"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Erreur syntaxique %s:%u: trop de niveaux d'imbrication d'includes"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Erreur syntaxique %s:%u : inclus à partir d'ici"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Erreur syntaxique %s:%u : directive « %s » non tolérée"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Erreur de syntaxe %s:%u : la directive « clear » a besoin d'un arbre "
+"d'options comme paramètre"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Erreur syntaxique %s:%u : valeur aberrante à la fin du fichier"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problème de suppression du lien %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Verrou non utilisé pour le fichier %s en lecture seule"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Impossible d'ouvrir le fichier verrou %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Verrou non utilisé pour le fichier %s se situant sur une partition nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Impossible d'obtenir le verrou %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+"La liste des fichiers ne peut pas être créée car « %s » n'est pas un "
+"répertoire"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+"« %s » dans le répertoire « %s » a été ignoré car ce n'est pas un fichier "
+"ordinaire"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"« %s » dans le répertoire « %s » a été ignoré car il n'utilise pas "
+"d'extension"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"« %s » dans le répertoire « %s » a été ignoré car il utilise une extension "
+"non valable"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "A attendu %s, mais il n'était pas présent"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Le sous-processus %s a commis une violation d'accès mémoire"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Le sous-processus %s a reçu le signal %u"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Le sous-processus %s a renvoyé un code d'erreur (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Le sous-processus %s s'est arrêté prématurément"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Erreur de lecture"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Erreur d'écriture"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problème de fermeture du fichier gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Fin de fichier incohérente"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Impossible de créer un sous-processus IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Impossible d'exécuter la compression "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Impossible d'ouvrir le fichier %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Impossible d'ouvrir le descripteur de fichier %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lu(s), %llu restant à lire, mais rien n'est disponible"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "écrit(s), %llu restant à écrire, mais l'écriture est impossible"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problème de fermeture du fichier %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problème de renommage du fichier %s en %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problème de synchronisation du fichier"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Impossible d'appliquer mkstemp pour %s."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Impossible d'écrire sur %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Impossible de mapper un fichier vide en mémoire"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Impossible de réaliser un mappage de %llu octets en mémoire"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Impossible de dupliquer le descripteur de fichier %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Impossible de fermer la « mmap »"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Impossible de synchroniser la « mmap »"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Impossible de réaliser un mappage de %lu octets en mémoire"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Échec de la troncature du fichier"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"La zone dynamique d'allocation mémoire (« Dynamic MMap ») n'a plus de place. "
+"Vous devriez augmenter la taille de APT::Cache-Start, dont la valeur "
+"actuelle est de %lu (voir « man 5 apt.conf »)."
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Impossible d'augmenter la taille de la « mmap » car la limite de %lu octets "
+"est déjà atteinte."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Impossible d'augmenter la taille de la « mmap » car l'augmentation "
+"automatique a été désactivée par une option utilisateur."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Erreur !"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Fait"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "…"
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s… %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "La sélection %s n'a pu être trouvée"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+"La cible %s tente d'accéder au même fichier (%s) que %s comme source %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "La cible %s (%s) est spécifiée plusieurs fois dans %s et %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Impossible d'analyser le fichier Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Pas de sections dans le fichier Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Pas d'entrée de hachage dans le fichier Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Il n'existe aucun hachage dans le fichier Release %s suffisamment robuste "
+"pour être utilisé de manière sécurisée"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Entrée « %s » non valable dans le fichier Release %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"Des valeurs entrant en conflit sont renseignées pour l'option %s à propos de "
+"la source %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+"Une valeur invalide a été renseignée pour l'option %s à propos de la source "
+"%s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Des valeurs entrant en conflit ont été renseignées pour l'option %s à propos "
+"de la source %s %s: %s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Impossible de traiter le fichier %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Impossible d'obtenir le verrou de dpkg (%s). Il est possible qu'un autre "
+"processus l'utilise."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Impossible d'obtenir le verrou de dpkg (%s). Avez-vous les droits du "
+"superutilisateur ?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg a été interrompu. Il est nécessaire d'utiliser « %s » pour corriger le "
+"problème."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Impossible de verrouiller le répertoire d'administration (%s). Il est "
+"possible qu'un autre processus l'utilise."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Impossible de verrouiller le répertoire d'administration (%s). Avez-vous les "
+"droits du superutilisateur ?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Non verrouillé"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Préparation de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Préparation de la configuration de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Préparation de la suppression de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Préparation de la suppression complète de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Disparition de %s constatée"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Exécution des actions différées (« trigger ») de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s installé"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Configuration de %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Répertoire %s inexistant"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Impossible d'ouvrir le fichier « %s »"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Décompression de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Installation de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Suppression de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Suppression complète de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s complètement supprimé"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Impossible d'écrire le journal (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Est-ce que /dev/pts est monté ?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "L'opération a été interrompue avant de se terminer"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Aucun rapport « apport » écrit car MaxReports a déjà été atteint"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problème de dépendances : laissé non configuré"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Aucun rapport « apport » n'a été créé car le message d'erreur indique une "
+"erreur consécutive à un échec précédent."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Aucun rapport « apport » n'a été créé car un disque plein a été signalé"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Aucun rapport « apport » n'a été créé car une erreur de dépassement de "
+"capacité mémoire a été signalée"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Aucun rapport « apport » n'a été créé car le message d'erreur rapporte un "
+"problème sur le système local"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Aucun rapport « apport » n'a été créé car une erreur d'entrée/sortie de dpkg "
+"a été signalée"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Construction de l'arbre des dépendances"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versions possibles"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Génération des dépendances"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Lecture des informations d'état"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Impossible d'ouvrir le fichier d'état %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Erreur d'écriture du fichier d'état temporaire %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Envoi du scénario au solveur"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Envoi d'une requête au solveur"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Préparation à la réception de la solution"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Échec du solveur externe sans message d'erreur adapté"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Exécution du solveur externe"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Exécution du planificateur externe"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Envoi d'une requête au planificateur"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Envoi du scénario au planificateur"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "Échec du planificateur externe sans message d'erreur adapté"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i enregistrements écrits.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i enregistrements écrits avec %i fichiers manquants.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i enregistrements écrits avec %i fichiers qui ne correspondent pas\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"%i enregistrements écrits avec %i fichiers manquants et %i qui ne "
+"correspondent pas\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Impossible de trouver l'enregistrement d'authentification pour %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Somme de contrôle de hachage incohérente pour %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Le système de paquet « %s » n'est pas pris en charge"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Impossible de déterminer un type du système de paquets adéquat"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Progression : [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Exécution de dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Impossible d'effectuer la configuration immédiate de « %s ». Veuillez "
+"consulter la page de manuel apt.conf(5) et notamment la section à propos de "
+"APT::Immediate-Configure, pour plus d'informations. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Impossible de configurer « %s »."
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Cette installation va temporairement nécessiter l'enlèvement du paquet "
+"essentiel %s en raison d'une boucle entre les champs Conflicts et Pre-"
+"Depends. C'est souvent une mauvaise chose, mais si vous souhaitez réellement "
+"le faire, activez l'option APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Cache des paquets vide"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Le fichier de cache des paquets est corrompu"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Le fichier de cache des paquets a une version incompatible"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Cet APT ne prend pas en charge le système de version « %s »"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+"Le cache des paquets a été construit pour une architecture différente : %s "
+"contre %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+"Le fichier de cache des paquets est corrompu, il possède une mauvaise "
+"signature"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Dépend"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Pré-Dépend"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Suggère"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Est en conflit avec"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recommande"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Remplace"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Casse"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Améliore"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Rend obsolète"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "important"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "nécessaire"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "supplémentaire"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "optionnel"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Le cache possède un système de version incompatible"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Erreur apparue lors du traitement de %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Vous avez dépassé le nombre de noms de paquets que cette version d'APT est "
+"capable de traiter."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Vous avez dépassé le nombre de versions que cette version d'APT est capable "
+"de traiter."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Vous avez dépassé le nombre de descriptions que cette version d'APT est "
+"capable de traiter."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Vous avez dépassé le nombre de dépendances que cette version d'APT est "
+"capable de traiter."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Lecture des listes de paquets"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr ""
+"Erreur d'entrée/sortie lors de la sauvegarde du fichier de cache des sources"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Le type de fichier d'index « %s » n'est pas accepté"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"La valeur « %s » n'est pas valable pour APT::Default-Release car cette "
+"version ne fait pas partie des sources disponibles."
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Enregistrement non valable dans le fichier de préférences %s, aucune entrée "
+"« Package »."
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Type d'épinglage %s inconnu"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s : la valeur %s est en dehors de la plage de priorités d'épinglage valide "
+"(%d à %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Aucune priorité (ou zéro) n'a été spécifiée pour l'épinglage"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Entrée %u mal formée dans %s fichier %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Ligne %u mal formée dans la liste des sources %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr ""
+"Le type « %s » est inconnu sur la ligne %u dans la liste des sources %s"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Ligne %u mal formée dans la liste des sources %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr ""
+"Le type « %s » est inconnu sur la ligne %u dans la liste des sources %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Le fichier donné %s n'est pas compris sur la ligne de commande"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"Vous devez insérer quelques adresses « sources » dans votre sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "Impossible de convertir %s en entier : en dehors de la plage"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Le téléchargement de quelques fichiers d'index a échoué, ils ont été "
+"ignorés, ou les anciens ont été utilisés à la place."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Calcul de la mise à jour"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Atteint :%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Réception de :%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign :%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Err :%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%so réceptionnés en %s (%so/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [En cours]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Changement de support : veuillez insérer le disque nommé\n"
+"« %s »\n"
+"dans le lecteur « %s » et appuyez sur la touche Entrée\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+"Souhaitez-vous accepter ces modifications et continuer à mettre à jour "
+"depuis ce dépôt ?"
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Correction des dépendances..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " a échoué."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Impossible de corriger les dépendances"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Impossible de minimiser le nombre des paquets mis à jour"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Fait"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Vous pouvez lancer « apt --fix-broken install » pour corriger ces problèmes."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dépendances non satisfaites. Essayez « apt --fix-broken install » sans "
+"paquet\n"
+"(ou indiquez une solution)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "En train de trier"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Note : sélection de %s pour la tâche « %s »\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Note : sélection de %s pour l'expression rationnelle « %s »\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Note : sélection de %s pour l'expression rationnelle « %s »\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Le paquet %s est un paquet virtuel fourni par :\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr "[Installé]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Pas de version candidate]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Vous devez explicitement sélectionner un paquet à installer."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Aucune version du paquet %s n'est disponible, mais il existe dans la base\n"
+"de données. Cela signifie en général que le paquet est manquant, qu'il est "
+"devenu obsolète\n"
+"ou qu'il n'est disponible que sur une autre source\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Cependant les paquets suivants le remplacent :"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Le paquet « %s » n'a pas de version susceptible d'être installée"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Les paquets virtuels comme « %s » ne peuvent pas être supprimés\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Le paquet « %s » n'est pas installé, et ne peut donc être supprimé. Peut-"
+"être vouliez-vous écrire « %s » ?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Le paquet « %s » n'est pas installé, et ne peut donc être supprimé\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Note : sélection de « %s » au lieu de « %s »\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Commandes les plus utilisées :"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+"Veuillez vous référer à %s pour plus d'information à propos des commandes "
+"disponibles."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Les options de configuration ainsi que la syntaxe sont détaillées dans apt."
+"conf(5).\n"
+"Des informations sur la configuration des sources sont disponibles dans "
+"sources.list(5).\n"
+"Les choix de paquet ainsi que la version peuvent être renseignés grâce à "
+"apt_preferences(5).\n"
+"Les informations à propos de la sécurité sont disponibles dans apt-"
+"secure(8).\n"
+"\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Cet APT a les « Super Cow Powers »"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Cet assistant APT a les « Super Meep Powers »."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes est obsolète, veuillez plutôt utiliser l'une des options "
+"commençant par --allow."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Aucun paquet n'a été trouvé"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ATTENTION : les paquets suivants n'ont pas été authentifiés !"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Avertissement d'authentification ignoré.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Certains paquets n'ont pas pu être authentifiés"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Faut-il installer ces paquets sans vérification ?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Il y a eu des paquets non authentifiés et -y a été employé sans --allow-"
+"unauthenticated"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Impossible de déterminer l'espace disponible sur %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Pas assez d'espace disponible sur %s"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Impossible de verrouiller le répertoire de téléchargement"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Certains paquets ne peuvent être installés. Ceci peut signifier\n"
+"que vous avez demandé l'impossible, ou bien, si vous utilisez\n"
+"la distribution unstable, que certains paquets n'ont pas encore\n"
+"été créés ou ne sont pas sortis d'Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "L'information suivante devrait vous aider à résoudre la situation : "
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Paquets défectueux"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Impossible de récupérer certaines archives, peut-être devrez-vous lancer apt-"
+"get update ou essayer avec --fix-missing ?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Erreur interne, « InstallPackages » appelé avec des paquets cassés."
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"Les paquets doivent être enlevés, mais la désinstallation est désactivée."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Des paquets essentiels ont été supprimés et -y a été employé sans --allow-"
+"remove-essential."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Des paquets ont été rétrogradés et -y a été employé sans --allow-downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Les paquets gelés ont été modifiés et -y a été utilisé dans --allow-change-"
+"held-packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Erreur interne. Le tri a été interrompu."
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Étrangement, les tailles ne correspondent pas. Veuillez le signaler par "
+"courriel à apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Il est nécessaire de prendre %so/%so dans les archives.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Il est nécessaire de prendre %so dans les archives.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Après cette opération, %so d'espace disque supplémentaires seront utilisés.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Après cette opération, %so d'espace disque seront libérés.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"L'option --trivial-only a été indiquée, mais il ne s'agit pas d'une "
+"opération triviale."
+
+# The space before the exclamation mark must not be a non-breaking space; this
+# sentence is supposed to be typed by a user who cannot see the difference.
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Oui, faites ce que je vous dis !"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Vous êtes sur le point de faire quelque chose de potentiellement dangereux\n"
+"Pour continuer, tapez la phrase « %s »\n"
+" ?]"
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Annulation."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Souhaitez-vous continuer ?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Certains fichiers n'ont pu être téléchargés."
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Téléchargement achevé et dans le mode téléchargement uniquement"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+"l'option --fix-missing et l'échange de support ne sont pas encore reconnus."
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Impossible de corriger le fait que des paquets manquent."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Annulation de l'installation."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Le paquet suivant a disparu du système car tous ses fichiers\n"
+"ont été remplacés par d'autres paquets :"
+msgstr[1] ""
+"Les paquets suivants ont disparu du système car tous leurs fichiers\n"
+"ont été remplacés par d'autres paquets :"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+"Note : cette opération volontaire (effectuée par dpkg) est automatique."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Aucune suppression n'est censée se produire : impossible de lancer "
+"« AutoRemover »"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Il semble que l'outil de suppression automatique (« AutoRemover ») ait\n"
+"supprimé quelque chose, ce qui est inattendu. Veuillez envoyer un\n"
+"rapport de bogue pour le paquet « apt »."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr ""
+"Erreur interne, l'outil de suppression automatique a cassé quelque chose."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Le paquet suivant a été installé automatiquement et n'est plus nécessaire :"
+msgstr[1] ""
+"Les paquets suivants ont été installés automatiquement et ne sont plus "
+"nécessaires :"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu paquet a été installé automatiquement et n'est plus nécessaire.\n"
+msgstr[1] ""
+"%lu paquets ont été installés automatiquement et ne sont plus nécessaires.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Veuillez utiliser « %s » pour le supprimer."
+msgstr[1] "Veuillez utiliser « %s » pour les supprimer."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "Les paquets supplémentaires suivants seront installés : "
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Paquets suggérés :"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Paquets recommandés :"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Passe %s, il est déjà installé et la mise à jour n'est pas prévue.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"%s ignoré : il n'est pas installé et seules des mises à jour ont été "
+"demandées.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+"La réinstallation de %s est impossible, il ne peut pas être téléchargé.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s est déjà la version la plus récente (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s passé en « installé manuellement ».\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Version choisie « %s » (%s) pour « %s »\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Version choisie « %s » (%s) pour « %s » à cause de « %s »\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "En train de lister"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Il y a une version supplémentaire %i. Veuillez utiliser l'opérande « -a » "
+"pour la voir."
+msgstr[1] ""
+"Il y a des versions supplémentaires %i. Veuillez utiliser l'opérande « -a » "
+"pour les voir."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"NOTE: Ceci n'est qu'une simulation !\n"
+" %s a besoin des privilèges du superutilisateur\n"
+" pour pouvoir vraiment fonctionner.\n"
+" Veuillez aussi noter que le verrouillage est désactivé,\n"
+" et la situation n'est donc pas forcément représentative\n"
+" de la réalité !\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "inconnu"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[installé, pouvant être mis à jour vers : %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr " [installé, local]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[installé, pouvant être supprimé automatiquement]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr " [installé, automatique]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr " [installé]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[pouvant être mis à jour depuis : %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[configuration restante]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "mais %s est installé"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "mais %s devra être installé"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "mais il n'est pas installable"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "mais c'est un paquet virtuel"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "mais ne sera pas installé"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "mais il n'est pas installé"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ou"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Les paquets suivants contiennent des dépendances non satisfaites :"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Les NOUVEAUX paquets suivants seront installés :"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Les paquets suivants seront ENLEVÉS :"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Les paquets suivants ont été conservés :"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Les paquets suivants seront mis à jour :"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Les paquets suivants seront mis à une VERSION INFÉRIEURE :"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Les paquets retenus suivants seront changés :"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (en raison de %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ATTENTION : Les paquets essentiels suivants vont être enlevés.\n"
+"Vous NE devez PAS faire ceci, à moins de savoir exactement ce\n"
+"que vous êtes en train de faire."
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu mis à jour, %lu nouvellement installés, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu réinstallés, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu remis à une version inférieure, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu à enlever et %lu non mis à jour.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu partiellement installés ou enlevés.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[O/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[o/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "O"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Vous devez fournir au moins un motif de recherche"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Recherche en texte intégral"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Il y a %i enregistrement supplémentaire. Veuillez utiliser l'opérande « -a » "
+"pour le voir"
+msgstr[1] ""
+"Il y a %i enregistrements supplémentaires. Veuillez utiliser l'opérande « -a "
+"» pour les voir."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "pas un véritable paquet (virtuel)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Fichiers du paquet :"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Le cache est désynchronisé, impossible de référencer un fichier"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Paquets épinglés :"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s avec la priorité %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Installé : "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidat : "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(aucun)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Table de version :"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Impossible de trouver de paquet correspondant à l'architecture « %s »"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr ""
+"Impossible de trouver de paquet «%s » correspondant à la version « %s »"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr ""
+"Impossible de trouver de paquet « %s » correspondant à la publication « %s »"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Choix de « %s » comme paquet source à la place de « %s »\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Impossible de trouver la version « %s » du paquet « %s »"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Vous devez spécifier au moins un paquet source"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Impossible de trouver une source de paquet pour %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"Note : la maintenance du paquet de « %s » est réalisée dans le système de "
+"suivi de versions « %s » à l'adresse :\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Veuillez utiliser la commande :\n"
+"%s\n"
+"pour récupérer les dernières mises à jour (éventuellement non encore "
+"publiées) du paquet.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Saut du téléchargement du fichier « %s », déjà téléchargé\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Nécessité de prendre %so/%so dans les sources.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Nécessité de prendre %so dans les sources.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Récupération des sources %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Échec lors de la récupération de quelques archives."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Saut du décompactage des paquets sources déjà décompactés dans %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "La commande de décompactage « %s » a échoué.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Veuillez vérifier si le paquet dpkg-dev est installé.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "La commande de construction « %s » a échoué.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Impossible d'obtenir les dépendances de construction pour %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s n'a pas de dépendance de construction.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Aucune information sur l'architecture n'est disponible pour %s. Veuillez "
+"consulter la section à propos de APT::Architectures dans la page de manuel "
+"apt.conf(5)."
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Il faut spécifier au moins un paquet pour vérifier les dépendances de "
+"construction"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+"Note, utilisation du répertoire %s pour obtenir les dépendances de "
+"construction\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+"Note, utilisation du fichier %s pour obtenir les dépendances de "
+"construction\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Impossible d'activer les dépendances de construction"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Impossible de lire %s. Faut-il l'éditer à nouveau ?"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "Votre fichier « %s » a changé, veuillez lancer « apt-get update ».\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Le paquet %s de version %s contient une dépendance absente :\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "La commande de mise à jour ne prend pas de paramètre"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+"L'utilisation de %s devrait être préférée plutôt que d'embarquer les "
+"informations d'identification directement dans %s pour « %s »"
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i paquet peut être mis à jour. Exécutez « apt list --upgradable » pour le "
+"voir.\n"
+msgstr[1] ""
+"%i paquets peuvent être mis à jour. Exécutez « apt list --upgradable » pour "
+"les voir.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Tous les paquets sont à jour."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+#| msgid "apt-cache stats does not take any arguments"
+msgid "%s does not take any arguments"
+msgstr "La commande apt-cache ne prend pas de paramètre"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Nombre total de paquets : "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Nombre total de structures de paquets : "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Paquets ordinaires : "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Paquets entièrement virtuels : "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Paquets virtuels simples : "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Paquets virtuels mixtes : "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Manquants : "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Nombre de versions distinctes : "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Nombre de descriptions distinctes : "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Nombre de dépendances : "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Nombre de relations version/fichier : "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Nombre de relations description/fichier : "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Nombre de relations « Provides » : "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Nombre de motifs rationnels : "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Espace disque gaspillé : "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Total de l'espace attribué : "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Cette commande est obsolète. Veuillez utiliser « apt-mark showauto »."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Utilisation : apt-cache [options] commande\n"
+"\tapt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache recherche et affiche les informations disponibles à propos\n"
+"des paquets installés et installables. Il fonctionne exclusivement sur\n"
+"les données trouvées dans le cache local grâce à la commande « update »\n"
+"d'apt-get par exemple. Les informations affichées peuvent cependant être\n"
+"obsolètes si la dernière mise à jour est trop ancienne, mais en revanche\n"
+"apt-cache fonctionne indépendamment de la disponibilité des sources\n"
+"configurées (hors-ligne par exemple).\n"
+"\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Affiche les enregistrements des sources"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Cherche une expression rationnelle dans la liste des paquets"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Affiche toutes les dépendances d'un paquet"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Affiche les dépendances inverses d'un paquet"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Affiche la description du paquet"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Liste le nom de tous les paquets du système"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Affiche l'épinglage (Pin) en vigueur"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Veuillez indiquer le nom de ce disque, par exemple « Debian 5.0.3 Disk 1 »"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr ""
+"Veuillez insérer un disque dans le lecteur et appuyez sur la touche [Entrée]"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Impossible de monter « %s » sur « %s »"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Aucun CD n'a été détecté ou trouvé sur le point de montage par défaut.\n"
+"Vous pouvez utiliser l'option --cdrom pour indiquer le point de montage du "
+"CD-ROM.\n"
+"Voir la page de manuel d'« apt-cdrom » pour plus d'informations sur l'auto-"
+"détection des CD et le point de montage."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+"Veuillez répéter cette opération pour tous les disques de votre jeu de "
+"cédéroms."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Utilisation : apt-cdrom [options] commande\n"
+"\n"
+"apt-cdrom est utilisé pour ajouter des CDROMS, clés USB et autre\n"
+"périphériques démontables en tant que sources pour APT. Les détails\n"
+"du point de montage et du périphérique sont extraits depuis apt-conf(5)\n"
+"udev(7) et fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Les paramètres ne sont pas appariés"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Usage : apt-config [options] commande\n"
+"\n"
+"apt-config est une interface pour lire le fichier de configuration utilisé "
+"par\n"
+"tous les outils APT, et généralement à des fins de débogage ou d'écriture\n"
+"de scripts pour l'interpréteur de commandes.\n"
+"\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+"Obtenir les valeurs de configuration grâce à l'évaluation de l'interpréteur "
+"de commandes"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "Afficher le paramètre de la configuration active"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Usage : apt-dump-solver\n"
+"\n"
+"apt-dump-solver est une interface pour stocker les scénario EDSP\n"
+"dans un fichier et éventuellement le faire suivre à un autre résolveur.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Usage : apt-extracttemplates fichier1 [fichier2 ...]\n"
+"\n"
+"apt-extracttemplates est un outil pour extraire la configuration et les\n"
+"gabarits des paquets Debian. Il est utilisé principalement par debconf(1)\n"
+"pour poser des questions à propos de la configuration avant d'installer les "
+"paquets\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr ""
+"Impossible d'obtenir la version de debconf. Est-ce que debconf est installé ?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Impossible de trouver le paquet %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s passé en « installé automatiquement ».\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Cette commande est obsolète. Veuillez utiliser « apt-mark auto » et « apt-"
+"mark manual »."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+"Erreur interne, la tentative de résolution du problème a cassé certaines "
+"parties"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Modules reconnus :"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Usage : apt-get [options] commandes\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get est une interface en ligne de commande servant à\n"
+"télécharger des paquets ainsi que des informations à leur propos\n"
+"depuis des sources de confiance ainsi qu'à les installer, les mettre à jour\n"
+"avec leurs dépendances.\n"
+"\n"
+"\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Récupère les nouvelles listes de paquets"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Réalise une mise à jour"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Installe de nouveaux paquets (pkg1 est libc6 et non libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Installe de nouveaux paquets (pkg1 est libc6 et non libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Supprime des paquets"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Supprime des paquets et leurs fichiers de configuration"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Supprime automatiquement les dépendances inutilisées"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Met à jour la distribution, reportez-vous à apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Suit les sélections de dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configure build-dependencies pour les paquets sources"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Supprime dans le cache local tous les fichiers téléchargés"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Supprime dans le cache local les fichiers inutiles"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Vérifie qu'il n'y a pas de rupture de dépendances"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Télécharge les archives de sources"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Télécharge le paquet binaire dans le répertoire courant"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+"Télécharge et affiche le journal des modifications (« changelog ») du paquet "
+"indiqué"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Nécessite une adresse URL comme argument"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Vous devez spécifier au moins un couple adresse url/fichier"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Le téléchargement a échoué"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec a échoué pour %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Usage : apt-helper [options] commande\n"
+" apt-helper [options] cat-file fichier ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper embarque un grand nombre de commandes que les scripts pour\n"
+"l'interpréteur de commandes peuvent utiliser\n"
+"par exemple, la même configuration de proxy ou d'acquisition qu'APT "
+"utiliserait.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "Télécharger l'adresse uri donnée vers le chemin cible"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+"Cherche à résoudre l'enregistrement SRV (par exemple : _http._tcp.ftp.debian."
+"org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "Concaténer des fichiers, avec décompression automatique"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "Détecter la configuration proxy en utilisant apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr "En attente de la connexion du système"
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr "Se débarrasser des privilèges avant d'exécuter la commande donnée"
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Usage : apt-internal-planner\n"
+"\n"
+"apt-internal-planner est une interface en ligne de commande\n"
+"permettant d'utiliser le planificateur interne pour la famille d'APT\n"
+"de manière externe à des fins de débogage ou équivalent\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Utilisation : apt-internal-solver\n"
+"\n"
+"apt-internal-solver est une interface en ligne de commande\n"
+"permettant d'utiliser la résolution interne pour la famille d'APT\n"
+"de manière externe à des fins de débogage ou équivalent\n"
+"\n"
+"\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s ne peut pas être marqué car il n'est pas installé.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s était déjà marqué comme installé manuellement.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s était déjà marqué comme installé automatiquement.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Les NOUVEAUX paquets suivants seront installés :"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s était déjà marqué comme figé (« hold »).\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s était déjà marqué comme non figé.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+"Échec de l'exécution de dpkg. Possédez-vous les droits du superutilisateur ?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s passé en figé (« hold »).\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Annulation de l'état figé pour %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "Sélection de %s pour suppression complète.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Sélection de %s pour suppression.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Sélection de %s pour installation.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Utilisation : apt-mark [options] {auto|manual} paquet 1 [paquet2 ...]\n"
+"\n"
+"apt-mark est une interface simple, en ligne de commande, qui permet\n"
+"de marquer des paquets comme installés manuellement ou automatiquement.\n"
+"Cette commande permet également d'utiliser la sélection d'états de dpkg(1), "
+"et de\n"
+"lister tous les paquets avec ou sans un certain marquage.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Marquer les paquets indiqués comme installés automatiquement"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Marquer les paquets indiqués comme installés manuellement"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Marquer les paquets indiqués comme installés automatiquement"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Marquer un paquet comme maintenu dans une version"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Supprimer le marquage d'un paquet maintenu dans une version"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Afficher la liste des paquets automatiquement installés"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Afficher la liste des paquets installés manuellement"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Afficher la liste des paquets maintenus dans une version"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Enregistrement de paquet inconnu !"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Usage : apt-sortpkgs [options] fichier1 [fichier2 ...]\n"
+"\n"
+"apt-sortpgks est un outil simple permettant de trier les informations à\n"
+"propos d'un paquet. Par défaut, il trie par information de paquets "
+"binaires,\n"
+"mais l'option -s peut être utilisée pour passer au tri par paquet source.\n"
+"\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Usage : apt [options] commande\n"
+"\n"
+"apt est un outil en ligne de commande pour gérer les paquets.\n"
+"Il fournit des commandes pour chercher et gérer autant que pour\n"
+"rechercher des informations à propos des paquets. Il fournit les mêmes\n"
+"fonctions que les outils APT spécialisés, tels qu'apt-get et apt-cache,\n"
+"mais dispose d'options plus adaptées pour une utilisation interactive.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "liste les paquets selon leur nom"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "cherche dans les descriptions de paquet"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "affiche les détails du paquet"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "installes les paquets"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "installes les paquets"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "supprime des paquets"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "met à jour la liste des paquets disponibles"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "met à jour le système en installant/mettant à jour les paquets"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+"met à jour le système en supprimant/installant/mettant à jour les paquets"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "édite le fichier d'information source"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Mauvais paramètre par défaut !"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Veuillez appuyer sur [Entrée] pour continuer."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Voulez-vous effacer les fichiers .deb précédemment téléchargés ?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Quelques erreurs sont apparues lors du décompactage. Les paquets qui"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+"ont été installés vont être configurés. Il peut en résulter d'autres erreurs"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"ou des erreurs provoquées par les dépendances manquantes. C'est bénin, "
+"seules les erreurs"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"précédant ce message sont importantes. Veuillez les corriger et\n"
+"démarrer l'[I]nstallation une nouvelle fois."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Fusion des informations disponibles"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "La liste d'extension du paquet est trop longue"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Erreur lors du traitement du répertoire %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "La liste d'extension des sources est trop grande"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Erreur lors de l'écriture de l'en-tête du fichier contenu"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Erreur du traitement du contenu %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Usage : apt-ftparchive [options] commande\n"
+"Commandes : packages binarypath [fichier d'« override » [chemin du "
+"préfixe]]\n"
+" sources srcpath [fichier d'« override » [chemin du préfixe]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groupes]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive génère des fichiers d'index pour les archives Debian. Il\n"
+"prend en charge de nombreux types de génération, d'une automatisation "
+"complète\n"
+"à des remplacements fonctionnels pour dpkg-scanpackages et dpkg-scansources\n"
+"\n"
+"apt-ftparchive génère les fichiers de paquets à partir d'un arbre de .debs.\n"
+"Le fichier des paquets contient les contenus de tous les champs de contrôle\n"
+"de chaque paquet aussi bien que les hachages MD5 et la taille du fichier. "
+"Un\n"
+"fichier d'« override » est accepté pour forcer la valeur des priorités et\n"
+"des sections\n"
+"\n"
+"De façon similaire, apt-ftparchive génère des fichiers de source à partir\n"
+"d'un arbre de .dscs. L'option --source-override peut être employée pour\n"
+"spécifier un fichier src d'« override »\n"
+"\n"
+"Les commandes « packages » et « sources » devraient être démarrées à la\n"
+"racine de l'arbre. « BinaryPath » devrait pointer sur la base d'une\n"
+"recherche récursive et le fichier d'« override » devrait contenir les\n"
+"drapeaux d'annulation. « Pathprefix » est ajouté au champ du nom de\n"
+"fichier s'il est présent. Exemple d'utilisation d'archive Debian :\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options :\n"
+" -h Ce texte d'aide\n"
+" --md5 Contrôle la génération des MD5\n"
+" -s=? Fichier d'« override » pour les sources\n"
+" -q Silencieux\n"
+" -d=? Sélectionne la base de données optionnelle de cache\n"
+" --no-delink Permet le mode de débogage délié\n"
+" --contents Contrôle la génération de fichier\n"
+" -c=? Lit ce fichier de configuration\n"
+" -o=? Place une option de configuration arbitraire"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Aucune sélection ne correspond"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr ""
+"Quelques fichiers sont manquants dans le groupe de fichiers de paquets « %s »"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Base de données corrompue, fichier renommé en %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Base de données ancienne, tentative de mise à jour de %s\""
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Le format de la base de données n'est pas valable. Si vous mettez APT à "
+"jour, veuillez supprimer puis recréer la base de données."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Impossible d'ouvrir le fichier de base de données %s : %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Impossible de lire le .dsc"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "L'archive n'a pas d'enregistrement de contrôle"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Impossible d'obtenir un curseur"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Échec de l'allocation de mémoire"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algorithme de compression « %s » inconnu"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "La sortie compressée %s a besoin d'un ensemble de compression"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Impossible de créer le tube IPC sur le sous-processus"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Échec du fork"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Fils compressé"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Erreur interne, impossible de créer %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Échec d'entrée/sortie du sous-processus sur le fichier"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Impossible de lire lors du calcul de la somme MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Impossible d'ouvrir %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Entrée « override » %s mal formée ligne %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Impossible de lire le fichier d'« override » %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Entrée « override » %s mal formée ligne %llu n° 1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Entrée « override » %s mal formée %llu n° 2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Entrée « override » %s mal formée %llu n° 3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A : Impossible de lire le contenu du répertoire %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A : Impossible de statuer %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E : "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A : "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E : des erreurs sont survenues sur le fichier "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Impossible de résoudre %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Échec du parcours de l'arbre"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Impossible d'ouvrir %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Délier %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Impossible de lier %s à %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Seuil de delink de %so atteint.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "L'archive ne possède pas de champ de paquet"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr "%s ne possède pas d'entrée « override »\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " le responsable de %s est %s et non %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s ne possède pas d'entrée « source override »\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s ne possède pas également d'entrée « binary override »\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Attente des fichiers d'en-tête"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Le serveur http a envoyé une réponse dont l'en-tête est invalide"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Mauvaise ligne d'en-tête"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Le serveur http a envoyé un en-tête « Content-Length » invalide"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Le serveur http a envoyé un en-tête « Content-Range » invalide"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Ce serveur http possède une gestion des limites non-valide"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Format de date inconnu"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Mauvais en-tête de donnée"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Échec de la connexion"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+"Le fichier a une taille incohérente (%llu != %llu). Le miroir est peut-être "
+"en cours de mise à jour ?"
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"%s a été automatiquement désactivé à cause d'une réponse incorrecte du "
+"serveur ou du proxy. (man 5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Erreur interne"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Impossible de lire la base de données %s du cédérom"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Veuillez utiliser apt-cdrom afin de faire reconnaître ce cédérom par votre "
+"APT. apt-get update ne peut être employé pour ajouter de nouveaux cédéroms"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Mauvais cédérom"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Impossible de démonter le cédérom dans %s, il doit toujours être en cours "
+"d'utilisation."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disque non trouvé."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Fichier non trouvé"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "La connexion directe vers les domaines %s est bloquée par défaut."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP : %s %s]"
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr "Connecté à %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Connexion à %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Impossible de créer de connexion pour %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Impossible d'initialiser la connexion à %s: %s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Échec"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Connexion à %s: %s (%s) impossible."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Connexion à %s: %s (%s) impossible, délai de connexion dépassé"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Connexion à %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Ne parvient pas à résoudre « %s »"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Erreur temporaire de résolution de « %s »"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Erreur système lors de la résolution de « %s:%s »"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+"Quelque chose d'imprévisible est survenu lors de la détermination de « %s:"
+"%s » (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Impossible de se connecter à %s:%s :"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Impossible de statuer"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Liens invalides, les liens locaux ne doivent pas débuter par //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Connexion en cours"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Impossible de déterminer le nom de la machine distante"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Impossible de déterminer le nom local"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Le serveur a refusé la connexion et a répondu : %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER incorrect, le serveur a répondu : %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS incorrect, le serveur a répondu : %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Un serveur proxy a été spécifié, mais aucun script de connexion, Acquire::"
+"ftp::ProxyLogin est vide."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+"La commande « %s » du script de connexion a échoué, le serveur a répondu : %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Échec de TYPE, le serveur a répondu : %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Dépassement du délai de connexion"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Le serveur a fermé la connexion"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Une réponse a fait déborder le tampon."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Corruption du protocole"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Impossible de créer un connecteur"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Impossible de se connecter sur le port de données, délai de connexion dépassé"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Impossible de se connecter au port en mode passif."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo n'a pu obtenir un port d'écoute"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Impossible de se connecter à un port"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Impossible d'écouter sur le port"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Impossible de déterminer le nom du port"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Impossible d'envoyer la commande PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Famille d'adresses %u inconnue (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT a échoué, le serveur a répondu : %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Délai de connexion au port de données dépassé"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Impossible d'accepter une connexion"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problème de hachage du fichier"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Impossible de récupérer le fichier, le serveur a répondu « %s »"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Pas de réponse du port de données dans les délais"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Le transfert de données a échoué, le serveur a répondu « %s »"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Requête"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Impossible d'invoquer "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Le fichier signé n'est pas valable, ce qui a été reçu est « %s » (peut-être "
+"le réseau nécessite-t-il une authentification ?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Au moins une signature non valable a été rencontrée."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Erreur interne : signature correcte, mais il est impossible de déterminer "
+"l'empreinte de la clé."
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Impossible d'exécuter « apt-key » pour contrôler la signature (veuillez "
+"vérifier si gnupg est installé)."
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Erreur inconnue à l'exécution de apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+"la signature par la clé %s utilise des algorithmes « digest » faibles (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Les signatures suivantes ne sont pas valables :\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Les signatures suivantes n'ont pas pu être vérifiées car la clé publique "
+"n'est pas disponible :\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Erreur d'écriture sur le fichier"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Erreur de lecture depuis le serveur distant et clôture de la connexion"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Erreur de lecture du serveur"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Erreur d'écriture sur un fichier"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Sélection défaillante"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Délai de connexion dépassé"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Erreur d'écriture du fichier de sortie"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Impossible de modifier l'heure "
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Connexion fermée prématurément"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Les fichiers vides ne peuvent être des archives valables"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "En-tête du membre d'archive %s non valable"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s supprimé"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Fichier du paquet %s désynchronisé."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Les fichiers d'index des paquets sont corrompus. Aucun champ "
+#~ "« Filename: » pour le paquet %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Aucun fichier miroir « %s » n'a été trouvé"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Impossible de lire le fichier de miroir « %s »."
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Pas d'entrée trouvée dans le fichier de miroir « %s »."
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Miroir : %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Ouverture du fichier de configuration %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Ouverture de %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Impossible de trouver l'entrée « %s » attendue dans le fichier "
+#~ "« Release » : ligne non valable dans sources.list ou fichier corrompu"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dépendances manquantes. Essayez d'utiliser l'option --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Vous pouvez lancer « apt --fix-broken install » pour corriger ces "
+#~ "problèmes :"
+
+#~ msgid "(not found)"
+#~ msgstr "(non trouvé)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Épinglage de paquet : "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Aucune clé publique n'est disponible pour la/les clé(s) suivante(s) :\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Le répertoire %s est détourné"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "La dépendance %s vis-à-vis de %s ne peut être satisfaite car %s n'est pas "
+#~ "autorisé avec les paquets « %s »."
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "La dépendance %s vis-à-vis de %s ne peut être satisfaite car le paquet %s "
+#~ "ne peut être trouvé"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Impossible de satisfaire la dépendance %s pour %s : le paquet installé %s "
+#~ "est trop récent"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "La dépendance %s vis-à-vis de %s ne peut être satisfaite car aucune "
+#~ "version disponible du paquet %s ne peut satisfaire les prérequis de "
+#~ "version."
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "La dépendance %s vis-à-vis de %s ne peut être satisfaite car le paquet %s "
+#~ "n'a pas de version disponible."
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Impossible de satisfaire les dépendances %s pour %s : %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr ""
+#~ "Les dépendances de compilation pour %s ne peuvent pas être satisfaites."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problème en déliant %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Impossible de délier %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Usage : apt-cache [options] commande\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache est un outil de bas niveau pour obtenir des informations\n"
+#~ "des fichiers de cache binaires d'APT.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Options :\n"
+#~ " -h Ce texte d'aide\n"
+#~ " -p=? Le cache des paquets\n"
+#~ " -s=? Le cache des sources\n"
+#~ " -q Enlève l'indicateur de progression\n"
+#~ " -i Affiche seulement les dépendances importantes pour la commande "
+#~ "« unmet »\n"
+#~ " -c=? Lit ce fichier de configuration\n"
+#~ " -o=? Spécifie une option de configuration, p. ex. -o dir::cache=/tmp\n"
+#~ "Veuillez consulter les pages de manuel de apt-cache(8) et apt.conf(5) "
+#~ "pour plus\n"
+#~ "d'informations.\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Utilisation : apt [options] commande\n"
+#~ "\n"
+#~ "Interface Ligne de Commande (CLI) pour apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Options:\n"
+#~ " -h Affiche la présente aide.\n"
+#~ " -q Affichage journalisable - pas de barre de progression\n"
+#~ " -qq Pas d'affichage à part les erreurs\n"
+#~ " -s Mode simulation : aucune action effectuée.\n"
+#~ " Affiche simplement ce qui serait effectué.\n"
+#~ " -f lecture/écriture des états dans le fichier indiqué\n"
+#~ " -c=? lecture du fichier de configuration indiqué\n"
+#~ " -o=? utilisation d'une option de configuration,\n"
+#~ " p. ex. -o dir::cache=/tmp\n"
+#~ "Veuillez consulter les pages de manuel apt-mark(8) et apt.conf(5)\n"
+#~ "pour plus d'informations."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Options :\n"
+#~ " -h Ce texte d'aide\n"
+#~ " -c=? Lit ce fichier de configuration\n"
+#~ " -o=? Spécifie une option de configuration, p. ex. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Options:\n"
+#~ " -h Affiche la présente aide.\n"
+#~ " -q Affichage journalisable - pas de barre de progression\n"
+#~ " -qq Pas d'affichage à part les erreurs\n"
+#~ " -s Mode simulation : aucune action effectuée.\n"
+#~ " Affiche simplement ce qui serait effectué.\n"
+#~ " -f lecture/écriture des états dans le fichier indiqué\n"
+#~ " -c=? lecture du fichier de configuration indiqué\n"
+#~ " -o=? utilisation d'une option de configuration,\n"
+#~ " p. ex. -o dir::cache=/tmp\n"
+#~ "Veuillez consulter les pages de manuel apt-mark(8) et apt.conf(5)\n"
+#~ "pour plus d'informations."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Usage : apt-sortpkgs [options] fichier1 [fichier2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs est un outil simple pour trier les paquets. L'option -s est\n"
+#~ "employée pour indiquer le type de fichier dont il s'agit.\n"
+#~ "\n"
+#~ "Options :\n"
+#~ " -h Ce texte d'aide\n"
+#~ " -s Trie le fichier source\n"
+#~ " -c=? Lit ce fichier de configuration\n"
+#~ " -o=? Place une option de configuration arbitraire, p. ex. -o dir::"
+#~ "cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Échec du processus fils"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Vous devez spécifier au moins un paquet source"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Échec de création de tubes"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Impossible d'exécuter gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s pour %s compilé sur %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Impossible de créer FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s (analyse de l'URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s (impossible d'analyser "
+#~ "[option])"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste de sources %s ([option] trop courte)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s ([%s] n'est pas une "
+#~ "affectation)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s ([%s] n'a pas de clé)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s ([%s] la clé %s n'a pas "
+#~ "de valeur)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Ligne %lu mal formée dans le fichier de source %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Ligne %lu mal formée dans la liste de sources %s (distribution)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s (analyse de l'URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s (distribution absolue)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr ""
+#~ "Ligne %lu mal formée dans la liste des sources %s (analyse de "
+#~ "distribution)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Le paquet %s %s n'a pu être trouvé lors du traitement des dépendances des "
+#~ "fichiers"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Impossible de localiser la liste des paquets sources %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Assemblage des fichiers listés dans les champs Provides"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Le fichier %s ne commence pas par un message signé en clair."
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr ""
+#~ "Impossible de trouver la somme de contrôle de « %s » dans le fichier "
+#~ "Release"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Le bloc de fournisseur %s ne comporte pas d'empreinte"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Espace occupé par les versions des dépendances : "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Pas assez d'espace disponible sur %s"
+
+#~ msgid "Done"
+#~ msgstr "Fait"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Pas de porte-clés installé dans %s."
+
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Erreur interne, Upgrade a cassé le boulot !"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Impossible de modifier %s avec mmap et l'utilisation des opérations de "
+#~ "fichiers : le correctif semble être corrompu."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Impossible de modifier %s avec mmap (sans échec particulier de mmap) : le "
+#~ "correctif semble être corrompu."
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s n'est pas un paquet Debian valide."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Utilisation du point de montage %s pour le cédérom\n"
+#~ "Montage du cédérom\n"
+
+#~ msgid "Unmounting CD-ROM\n"
+#~ msgstr "Démontage du cédérom\n"
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "Est-ce que stdout est un terminal ?"
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr ""
+#~ "La distribution cible « %s » indisponible pour le paquet « %s » est "
+#~ "ignorée"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Téléchargement de %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Ce n'est pas une archive DEB valide, elle n'a pas de membre « %s », "
+#~ "« %s » ou « %s »"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Somme de contrôle MD5 incohérente"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Impossible de localiser un fichier du paquet %s. Cela signifie que vous "
+#~ "devrez corriger ce paquet vous-même."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Impossible d'écrire le journal, échec d'openpty()\n"
+#~ "(/dev/pts est-il monté ?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Fichier %s inexistant ignoré"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Impossible de supprimer %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Impossible de créer %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Impossible de statuer pour %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Les répertoires info et temp doivent se trouver sur le même système de "
+#~ "fichiers"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Impossible de changer pour le répertoire d'administration %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Erreur interne lors de l'obtention d'un nom de paquet"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Lecture de la liste de fichiers"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Impossible d'ouvrir le fichier de liste « %sinfo/%s ». Si vous ne "
+#~ "parvenez pas à restaurer ce fichier, veuillez le vider et réinstaller "
+#~ "immédiatement la même version du paquet !"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Échec de la lecture du fichier de liste %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Erreur interne lors de l'obtention d'un Nœud"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Impossible d'ouvrir le fichier des déviations %sdiversions "
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Le fichier des déviations est corrompu"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Ligne invalide dans le fichier des déviations : %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Erreur interne en ajoutant une déviation"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Le cache des paquets doit être initialisé en premier"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Impossible de trouver un en-tête « Package: », décalage %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr ""
+#~ "Mauvaise section « ConfFile » dans le fichier « status ». Décalage %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Erreur lors du traitement de la somme MD5. Décalage %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Impossible d'accéder à %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Impossible de localiser un fichier de contrôle valide"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Ne parvient pas à ouvrir le tube pour %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Erreur de lecture du processus %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "J'ai une simple ligne d'en-tête au-dessus du caractère %u"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Entrée « override » %s mal formée ligne %lu n° 1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Entrée « override » %s mal formée %lu n° 2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Entrée « override » %s mal formée %lu n° 3"
+
+#~ msgid "decompressor"
+#~ msgstr "décompacteur"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr ""
+#~ "Note : cette opération volontaire (effectuée par dpkg) est automatique."
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "lu(s), %lu restant à lire, mais rien n'est disponible"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "écrit(s), %lu restant à écrire, mais l'écriture est impossible"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Impossible d'effectuer la configuration immédiate du paquet « %s », déjà "
+#~ "décompressé. Veuillez consulter la page de manuel apt.conf(5) et "
+#~ "notamment la section à propos de APT::Immediate-Configure, pour plus "
+#~ "d'informations."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Erreur apparue lors du traitement de %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Erreur apparue lors du traitement de %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Erreur apparue lors du traitement de %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Erreur apparue lors du traitement de %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Erreur apparue lors du traitement de %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Erreur apparue lors du traitement de %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Erreur apparue lors du traitement de %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Erreur apparue lors du traitement de %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Erreur apparue lors du traitement de %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Erreur apparue lors du traitement de %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Erreur interne, ne peut localiser le membre"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr ""
+#~ "Erreur interne : le groupe « %s » n'a pas de pseudo-paquet installable"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Le fichier Release a expiré, %s ignoré (non valable depuis %s)"
+
+#~ msgid "E: Too many keyrings should be passed to gpgv. Exiting."
+#~ msgstr "E: trop de porte-clés devraient être passés à gpgv. Abandon."
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: liste de paramètres trop longue pour Acquire::gpgv::Options. Abandon."
+
+#~ msgid ""
+#~ "The size of a MMap has already reached the defined limit of %lu bytes,"
+#~ "abort the try to grow the MMap."
+#~ msgstr ""
+#~ "La taille d'une « MMap » (carte en mémoire) a déjà atteint la limite "
+#~ "définie de %lu octets. Abandon de la tentative d'agrandir la « MMap »."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Erreur apparue lors du traitement de %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr ""
+#~ "Ligne %u mal formée dans la liste des sources %s (identifiant du "
+#~ "fournisseur)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Impossible d'accéder au porte-clés : « %s »"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Impossible de corriger le fichier"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "No source package '%s' picking '%s' instead\n"
+#~ msgstr "Pas de paquet source « %s ». Utilisation de « %s » à la place\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Traitement des déclencheurs (« triggers ») pour %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "La zone dynamique d'allocation mémoire n'a plus de place"
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..da02e28
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,4368 @@
+# translation of apt_po_gl.po to galician
+# Galician translation of apt
+# This file is put in the public domain.
+#
+# Jacobo Tarrío <jtarrio@debian.org>, 2005, 2007, 2008.
+# mvillarino <mvillarino@users.sourceforge.net>, 2008.
+# Miguel Anxo Bouzada <mbouzada@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2011-05-12 15:28+0100\n"
+"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
+"Language-Team: galician <proxecto@trasno.net>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-Language: Galician\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Sinatura de arquivo incorrecta"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Produciuse un erro ao ler a cabeceira do membro do arquivo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Cabeceira do membro do arquivo incorrecta"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "O arquivo é curto de máis"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Non foi posíbel ler as cabeceiras dos arquivos"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Non é posíbel atopar un rexistro de autenticación para: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Arquivo danado"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "A suma de comprobación do arquivo tar non coincide, está danado"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Tipo de cabeceira TAR %u descoñecido, membro %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Este non é un arquivo DEB correcto, falta o membro «%s»"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Produciuse un erro interno, non foi posíbel atopar o membro %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Ficheiro de control non analizábel"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Non foi posíbel escribir no ficheiro «%s»"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Non foi posíbel pechar o ficheiro %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "A ruta %s é longa de máis"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Desempaquetando %s máis dunha vez"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "O directorio %s está desviado"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "O paquete tenta escribir no destino do desvío %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "A ruta do desvío é longa de máis"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Non foi posíbel determinar o estado %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Non foi posíbel cambiar o nome de %s a %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "O directorio %s estase a substituír por algo que non é un directorio"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Non foi posíbel atopar o nodo no seu contedor hash"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "A ruta é longa de máis"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Coincidencia na sobrescritura sen versión para %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "O ficheiro %s/%s sobrescribe o do paquete %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Non é posíbel ler %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Non é posíbel determinar o estado %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Chamouse a DropNode nun nodo aínda ligado"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Non foi posíbel atopar o elemento hash"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Non foi posíbel reservar un desvío"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Produciuse un erro interno en AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Téntase sobrescribir un desvío, %s -> %s e %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Desvío %s -> %s engadido dúas veces"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Ficheiro de configuración %s/%s duplicado"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "O directorio %s está desviado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "O directorio %s está desviado"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "O directorio %s está desviado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "O directorio %s está desviado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "O directorio %s está desviado"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Non foi posíbel ler a ligazón %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "A sumas «hash» non coinciden"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "non foi posíbel cambiar o nome, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Os tamaños non coinciden"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Operación incorrecta: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Produciuse un erro de escritura"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Produciuse un erro durante a verificación da sinatura. O repositorio non foi "
+"actualizado, empregaranse os ficheiros de índice anteriores. Erro de GPG: "
+"%s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Produciuse un erro de GPG: %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Conflito na distribución: %s (agardábase %s mais obtívose %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Non foi posíbel obter %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Non é posíbel atopar un ficheiro para o paquete %s. Isto pode significar que "
+"ten que arranxar este paquete a man. (Falta a arquitectura)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Rexistro de cambios de %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Non foi posíbel atopar o controlador de métodos %s."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Comprobe que o paquete «dpkg-dev» estea instalado.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "O método %s non se iniciou correctamente"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Insira o disco etiquetado: «%s» na unidade «%s» e prema Intro."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Non se atopa a lista de directorios %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Non se atopa a lista de arquivos %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Non é posíbel bloquear o directorio %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "O tipo de ficheiros de índices «%s» non está admitido"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Obtendo o ficheiro %li de %li (restan %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Obtendo o ficheiro %li de %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"O paquete %s ten que ser reinstalado, mais non é posíbel atopar o seu "
+"arquivo."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Erro, pkgProblemResolver::Resolve xerou interrupcións, isto pode estar "
+"causado por paquetes retidos."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Non é posíbel solucionar os problemas, ten retidos paquetes rotos."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Non foi posíbel analizar ou abrir as listas de paquetes ou ficheiro de "
+"estado."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Pode querer executar «apt-get update» para corrixir estes problemas"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Non foi posíbel ler a lista de orixes."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Produciuse un erro na compilación da expresión regular - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Non se atopou a publicación «%s» de «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Non se atopou a versión «%s» de «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Non foi posíbel atopar a tarefa «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Non foi posíbel atopar ningún paquete pola expresión de rexistro «%s»"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Non foi posíbel atopar ningún paquete pola expresión de rexistro «%s»"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Non foi posíbel atopar o paquete %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Non é posíbel seleccionar distintas versións do paquete «%s» xa que é "
+"puramente virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Non é posíbel seleccionar a versión máis recente do paquete «%s» xa que é "
+"puramente virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Non é posíbel seleccionar a versión candidata do paquete %s xa que non ten "
+"candidata"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Non é posíbel seleccionar a versión instalada do paquete %s xa que non está "
+"instalado"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Non é posíbel seleccionar nin a versión instalada nin a candidata do paquete "
+"«%s» xa que non ten ningunha delas"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Liña %u longa de máis na lista de orixes %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Desmontando o CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Empregando o punto de montaxe de CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Agardando polo disco...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montando o CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificando... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Etiqueta almacenada: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Buscando os ficheiros de índices no disco...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Atopáronse %zu índices de paquetes, %zu índices de orixes, %zu índices de "
+"traducións e %zu sinaturas\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Non é posíbel localizar ningún ficheiro de paquetes. É posíbel que non sexa "
+"un disco de Debian ou que a arquitectura sexa incorrecta."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Atopouse a etiqueta «%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Ese non é un nome correcto, volva tentalo.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Este disco chámase: \n"
+"«%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Copiando as listas de paquetes..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Escribindo a nova lista de orixes\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "As entradas da lista de orixes deste disco son:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Non é posíbel cambiar a %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Non é posíbel analizar %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Non é posíbel analizar o punto de montaxe %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Non foi posíbel analizar o CD-ROM"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Non se coñece a opción de liña de ordes «%c» [de %s]."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Non se entende a opción de liña de ordes %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "A opción de liña de ordes %s non é booleana"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "A opción %s precisa dun argumento."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Opción %s: A especificación de elemento de configuración debe ter un =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "A opción %s precisa dun argumento enteiro, non «%s»"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "A opción «%s» é longa de máis"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "O senso %s non se entende, probe «true» ou «false»."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operación incorrecta: %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Abreviatura de tipo «%c» descoñecida"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Produciuse un erro de sintaxe %s:%u: O bloque comeza sen un nome."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Produciuse un erro de sintaxe %s:%u: Etiqueta mal formada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Produciuse un erro de sintaxe %s:%u: Lixo extra despois do valor"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Produciuse un erro de sintaxe %s:%u: Só se poden facer directivas no nivel "
+"superior"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Produciuse un erro de sintaxe %s:%u: Includes aniñados de máis"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Produciuse un erro de sintaxe %s:%u: Incluído de aquí"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Produciuse un erro de sintaxe %s:%u: Non se admite a directiva «%s»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Produciuse un erro de sintaxe %s:%u: a directiva «clear» require unha árbore "
+"de opción como argumento"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Produciuse un erro de sintaxe %s:%u: Lixo extra á fin da liña"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Produciuse un problema ao desligar o ficheiro %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Non se empregan bloqueos para o ficheiro de bloqueo de só lectura %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Non foi posíbel abrir o ficheiro de bloqueo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Non se empregan bloqueos para o ficheiro de bloqueo montado por NFS %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Non foi posíbel obter o bloqueo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "A lista de ficheiros non pode ser creada como «%s» non é un directorio"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Ignorando «%s» no directorio «%s» xa que non é un ficheiro regular"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Ignorando o ficheiro «%s» no directorio «%s» xa que non ten extensión de nome"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Ignorando o ficheiro «%s» no directorio «%s» xa que ten unha extensión de "
+"nome incorrecta"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Agardouse por %s pero non estaba alí"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "O subproceso %s recibiu un fallo de segmento."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "O subproceso %s recibiu o sinal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "O subproceso %s devolveu un código de erro (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "O subproceso %s saíu de xeito inesperado"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Produciuse un erro de lectura"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Produciuse un erro de escritura"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Produciuse un problema ao pechar o arquivo gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Non foi posíbel crear o IPC do subproceso"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Non foi posíbel executar o compresor "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Non foi posíbel abrir o ficheiro %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Non foi posíbel abrir o descritor de ficheiro %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lectura, aínda hai %lu para ler pero non queda ningún"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "escritura, aínda hai %lu para escribir pero non se puido"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Produciuse un problema ao pechar o ficheiro %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Produciuse un problema ao renomear o ficheiro %s a %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Produciuse un problema ao sincronizar o ficheiro"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Non é posíbel determinar o estado %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Non é posíbel escribir en %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Non é posíbel facer mmap sobre un ficheiro baleiro"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Non foi posíbel facer mmap de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Non foi posíbel duplicar o descritor de ficheiro %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Non é posíbel pechar mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Non é posíbel sincronizar mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Non foi posíbel facer mmap de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Non foi posíbel truncar o ficheiro"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dynamic MMap executouse fora do lugar. Incremente o tamaño de APT::Cache-"
+"Start. O valor actual é : %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Non é posíbel aumentar o tamaño de MMap xa que o límite de %lu bytes xa foi "
+"acadado."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Non é posíbel aumentar o tamaño de MMap xa que o crecemento automático foi "
+"desactivado polo usuario."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Erro!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Feito"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Feito"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Non se atopou a selección %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Non se puido analizar o ficheiro de publicación %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Non hai seccións no ficheiro de publicación %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Non hai entrada de Hash no ficheiro de publicación %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "A entrada «%s» no ficheiro de publicación %s non é válida"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Non é posíbel analizar o ficheiro de paquetes %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Non é posíbel bloquear o directorio de administración (%s). Esta usandoo "
+"algún outro proceso?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Non é posíbel bloquear o directorio de administración (%s). É o "
+"administrador?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg interrompeuse, debe executar manualmente «%s» para corrixir o problema. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Non é posíbel bloquear o directorio de administración (%s). Esta usandoo "
+"algún outro proceso?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Non é posíbel bloquear o directorio de administración (%s). É o "
+"administrador?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Non está bloqueado"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Preparando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Preparandose para configurar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Preparándose para o retirado de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Preparándose para retirar %s completamente"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Tomando nota da desaparición de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Executando o disparador de post-instalación %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Instalouse %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Configurando %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Falta o directorio «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Non foi posíbel abrir o ficheiro «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Desempaquetando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Instalando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Retirando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s completamente retirado"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Retirouse %s completamente"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Non é posíbel escribir en %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Non se escribiu ningún informe de Apport porque xa se acadou o nivel "
+"MaxReports"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problemas de dependencias - déixase sen configurar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Non se escribiu ningún informe de Apport porque a mensaxe de erro indica que "
+"é un error provinte dun fallo anterior."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Non se escribiu ningún informe de Apport porque a mensaxe de erro indica un "
+"erro de disco cheo."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Non se escribiu un informe de contribución porque a mensaxe de erro indica "
+"un erro de falta de memoria"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Non se escribiu ningún informe de Apport porque a mensaxe de erro indica un "
+"erro de disco cheo."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Non se escribiu ningún informe de Apport porque a mensaxe de erro indica un "
+"erro de E/S en dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Construindo a árbore de dependencias"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versións candidatas"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Xeración de dependencias"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Lendo a información do estado"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Non foi posíbel abrir o ficheiro de estado %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Non foi posíbel gravar o ficheiro de estado temporal %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Escribíronse %i rexistros.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Escribíronse %i rexistros con %i ficheiros que faltan.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Escribíronse %i rexistros con %i ficheiros que non coinciden\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Escribíronse %i rexistros con %i ficheiros que faltan e %i ficheiros que non "
+"coinciden\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Non é posíbel atopar un rexistro de autenticación para: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Valor de hash non coincidente para: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "O sistema de empaquetado «%s» non está admitido"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Non é posíbel determinar un tipo de sistema de empaquetado axeitado"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Executando dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Non foi posíbel facer a configuración inmediata en «%s». Vexa man 5 apt.conf "
+"baixo APT::Immediate-Configure para obter máis detalles. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Non foi posíbel abrir o ficheiro «%s»"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Esta instalación requirirá que se retire temporalmente o paquete esencial %s "
+"por mor dun bucle de Conflitos e Pre-dependencias. Isto adoita ser malo, "
+"pero se o quere facer, active a opción APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Caché de paquetes baleira"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "O ficheiro de caché de paquetes está danado"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "O ficheiro de caché de paquetes é unha versión incompatíbel"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Este APT non admite o sistema de versionado «%s»"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "A caché de paquetes construíuse para unha arquitectura diferente"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "O ficheiro de caché de paquetes está danado"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Depende"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "PreDepende"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Suxire"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Conflitos"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recomenda"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Substitúe a"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Estraga"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Mellora"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Fai obsoleto a"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "importante"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "requirido"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "estándar"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "A caché ten un sistema de versionado incompatíbel"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Produciuse un erro ao procesar %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Vaites!, superou o número de nomes de paquetes que este APT pode manexar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Vaites!, superou o número de versións que este APT pode manexar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Vaites!, superou o número de descricións que este APT pode manexar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Vaites!, superou o número de dependencias que este APT pode manexar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Lendo as listas de paquetes"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Produciuse un erro de E/S ao gravar a caché de fontes"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "O tipo de ficheiros de índices «%s» non está admitido"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Rexistro incorrecto no ficheiro de preferencias %s; falta a cabeceira Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Non se entendeu o tipo de inmobilización %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+"Non se indicou unha prioridade (ou indicouse cero) para a inmobilización"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "«Override» %s liña %lu incorrecta (1)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Liña %u mal construída na lista de orixes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "O tipo «%s» non se coñece na liña %u da lista de orixes %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Liña %u mal construída na lista de orixes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "O tipo «%s» non se coñece na liña %u da lista de orixes %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Debe introducir algúns URI «orixe» no seu ficheiro sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Algúns ficheiros de índice fallaron durante a descarga. Ignoráronse, ou "
+"foron utilizados algúns antigos no seu lugar"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Calculando a anovación"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Teño:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Rcb:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Obtivéronse %sB en %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Traballando]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Cambio de soporte: introduza o disco etiquetado\n"
+" «%s»\n"
+"na unidade «%s» e prema Intro\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Corrixindo as dependencias..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " fallou."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Non foi posíbel corrixir as dependencias."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Non foi posíbel minimizar o conxunto de anovacións"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Feito"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Pode querer executar «apt --fix-broken install» para corrixilos."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dependencias incumpridas. Probe «apt --fix-broken install» sen paquetes (ou "
+"especifique unha solución)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Nota, seleccione «%s» para a tarefa «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Nota, seleccione «%s» para a expresión regular «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Nota, seleccione «%s» para a expresión regular «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "O paquete %s é un paquete virtual fornecido por:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Instalado]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Non hai unha versión candidata]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Debería escoller un para instalar."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"O paquete %s non está dispoñíbel, mais outro paquete fai referencia a el.\n"
+"Isto pode significar que falta o paquete, está obsoleto ou só está\n"
+"dispoñíbel noutra fonte.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Porén, os seguintes paquetes substitúeno:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "O paquete «%s» non ten unha instalación candidata"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Non se poden retirar os paquetes virtuais como «%s»\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "O paquete %s non está instalado, así que non foi retirado\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "O paquete %s non está instalado, así que non foi retirado\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Nota, seleccione «%s» no canto de «%s»\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Este APT ten poderes da Super Vaca."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Non se atopou ningún paquete"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "AVISO: Non se poden autenticar os seguintes paquetes!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Ignórase o aviso de autenticación.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Non foi posíbel autenticar algúns paquetes"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Instalar estes paquetes sen verificación?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Xurdiron problemas e empregouse -y sen --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Non foi posíbel determinar o espazo libre en %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Non hai espazo libre abondo en %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Non é posíbel bloquear o directorio de descargas"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Non foi posíbel instalar algúns paquetes. Isto pode significar que "
+"solicitou\n"
+"unha situación imposíbel ou, se emprega a distribución inestábel, que\n"
+"algúns paquetes solicitados aínda non se creasen ou que se movesen da "
+"entrada."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "A seguinte información pode axudar a solucionar a situación:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Paquetes estragados"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Non foi posíbel obter algúns arquivos; probe con apt-get update ou --fix-"
+"missing."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+"Produciuse un erro interno, chamouse a InstallPackages con paquetes "
+"estragados."
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Hai que retirar paquetes mais o retirado está desactivado."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Xurdiron problemas e empregouse -y sen --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Xurdiron problemas e empregouse -y sen --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Produciuse un erro interno; non rematou a ordenación"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Que estraño... Os tamaños non coinciden; envíe un correo-e a apt@packages."
+"debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Ten que recibir %sB/%sB de arquivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Ten que recibir %sB de arquivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Despois desta operación ocuparanse %sB de disco adicionais.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Despois desta operación liberaranse %sB de espazo de disco.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Especificouse «Só triviais» mais esta non é unha operación trivial."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Si, fai o que digo!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Está a piques de facer algo perigoso.\n"
+"Para continuar escriba a frase «%s»\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Interromper."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Quere continuar?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Non foi posíbel descargar algúns ficheiros"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Completouse a descarga no modo de só descargas"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+"O emprego conxunto de --fix-missing e intercambio de discos non está admitido"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Non é posíbel corrixir os paquetes non dispoñíbeis."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Interrompendo a instalación."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"O seguinte paquete desapareceu do seu sistema e todos os \n"
+"ficheiros serán sobrescritos por outros paquetes:"
+msgstr[1] ""
+"Os seguintes paquetes desapareceron do seu sistema e todos os \n"
+"ficheiros serán sobrescritos por outros paquetes:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Nota: Isto será feito automaticamente por dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Non se agarda que eliminemos cousas, non se pode iniciar o Retirado "
+"automático"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Vaia, semella que o Retirado automático destruíu algo que realmente\n"
+"non debería ter feito. Informe deste erro de apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Produciuse un erro interno, o Retirado automático estragou cousas"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"O seguinte paquete foi instalado automaticamente e xa non é necesario:"
+msgstr[1] ""
+"Os seguintes paquetes foron instalados automaticamente e xa non son "
+"necesarios:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu paquete foi instalado automaticamente e xa non é necesario.\n"
+msgstr[1] ""
+"%lu paquetes foron instalados automaticamente e xa non son necesarios.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Empregue «%s» para eliminalos."
+msgstr[1] "Empregue «%s» para eliminalos."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Instalaranse os seguintes paquetes extra:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Paquetes suxeridos:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Paquetes recomendados:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Omítese %s, xa está instalado e non se especificou a anovación.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Omitindo %s, non está instalado e só se solicitaron as anovacións.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "A reinstalación de %s non é posíbel, non se pode descargar.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s xa é a versión máis recente.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s cambiado a instalado manualmente.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versión seleccionada «%s» (%s) para «%s»\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versión seleccionada «%s» (%s) para «%s» xa que «%s»\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"NOTA: Isto é só unha simulación!\n"
+" %s precisa de privilexios de administrador para executarse realmente.\n"
+" Lembre tamén que o bloqueo está desactivado,\n"
+" polo que non debe depender da relevancia da situación actual real.\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "mais %s está instalado"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "mais vaise instalar %s"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "mais non é instalábel"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "mais é un paquete virtual"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "mais non se vai a instalar"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "mais non está instalado"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ou"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Os seguintes paquetes teñen dependencias sen cumprir:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Os seguintes paquetes NOVOS hanse instalar:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Vanse RETIRAR os paquetes seguintes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Consérvanse os seguintes paquetes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Vanse anovar os paquetes seguintes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Vanse REVERTER os seguintes paquetes :"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Vanse modificar os paquetes retidos seguintes:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (por mor de %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"AVISO: Retiraranse os seguintes paquetes esenciais.\n"
+"Isto NON se debe facer a menos que saiba exactamente o que está a facer!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu anovados, %lu instalados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstalados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu revertidos, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "Vanse retirar %lu e deixar %lu sen anovar.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu non instalados ou retirados de todo.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[S/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[s/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "S"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Debe fornecer cando menos un patrón de busca"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Ficheiros de paquetes:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"A caché está sen sincronizar, non se pode facer referencia a un ficheiro de "
+"paquetes"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Paquetes inmobilizados:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalado: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidato: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ningún)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Táboa de versións:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Non foi posíbel atopar ningún paquete pola expresión de rexistro «%s»"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Non foi posíbel atopar ningún paquete pola expresión de rexistro «%s»"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Non foi posíbel atopar ningún paquete pola expresión de rexistro «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Tome «%s» como paquete fonte no canto de «%s»\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Ignorar a versión non dispoñíbel «%s» do paquete «%s»"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Ten que especificar polo menos un paquete para obter o código fonte"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Non sé posíbel atopar un paquete fonte para %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"AVISO: o paquete «%s» mantense no sistema de control de versións «%s» en:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Empregue:\n"
+"%s\n"
+"para obter as últimas actualizacións (posibelmente non publicadas) do "
+"paquete.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Omítese o ficheiro xa descargado «%s»\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Ten que recibir %sB/%sB de arquivos de fonte.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Ten que recibir %sB de arquivos de fonte.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Obter fonte %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Non se puideron obter algúns arquivos."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Omítese o desempaquetado do código fonte xa desempaquetado en %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Fallou a orde de desempaquetado «%s».\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Comprobe que o paquete «dpkg-dev» estea instalado.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Fallou a orde de construción de «%s».\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Non é posíbel obter a información de dependencias de compilación de %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s non ten dependencias de compilación.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Ten que especificar polo menos un paquete para comprobarlle as dependencias "
+"de compilación"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Non se puideron procesar as dependencias de construción"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Non se puideron procesar as dependencias de construción"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Non foi posíbel cambiar o nome de %s a %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "O paquete %s versión %s ten unha dependencia incumprida:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "A orde «update» non toma argumentos"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "A orde «update» non toma argumentos"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Número total de nomes de paquetes : "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Estruturas de paquetes totais: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Paquetes normais: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Paquetes virtuais puros: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Paquetes virtuais simples: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Paquetes virtuais mixtos: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Non atopados: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Número total de versións distintas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Número total de descricións distintas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Número total de dependencias: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Número total de relacións versión/ficheiro: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Número total de relacións descrición/ficheiro: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Número total de asignacións provistas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Número total de cadeas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Espazo de reserva total: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Espazo total contabilizado: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Mostra rexistros da fonte"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Busca na lista de paquetes por unha expresión regular"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Mostra informacións brutas de dependencia para un paquete"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Mostra informacións de dependencia inversa para un paquete"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Mostra un rexistro lexíbel para o paquete"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Lista os nomes de todos os paquetes no sistema"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Mostra configuracións da política"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Forneza un nome para este disco, como «Debian 5.0.3 Disco 1»"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Insira un disco na unidade e prema Intro"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Produciuse un fallo ao montar «%s» en «%s»"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Repita este proceso para o resto de CD do seu conxunto."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Os argumentos non van en parellas"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Uso: apt-config [opcións] orde\n"
+"\n"
+"apt-config é unha ferramenta simple para ler a configuración de APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Uso: apt-extracttemplates fich1 [fich2 ...]\n"
+"\n"
+"apt-extracttemplates é unha ferramenta para extraer información\n"
+"de configuración e patróns dos paquetes debian\n"
+"\n"
+"Opcións:\n"
+" -h Este texto de axuda\n"
+" -t Estabelece o directorio temporal\n"
+" -c=? Le este ficheiro de configuración\n"
+" -o=? Estabelece unha opción de configuración, por exemplo: -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Non é posíbel obter a versión de debconf. Debconf está instalado?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Non foi posíbel atopar o paquete %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s está estabelecido para a súa instalación automática.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Produciuse un erro interno, o solucionador interno estragou cousas"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Módulos admitidos:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Uso: apt-get [opcións] orde\n"
+" apt-get [opcións] install|remove paquete1 [paquete2 ...]\n"
+" apt-get [opcións] source paquete1 [paquete2 ...]\n"
+"\n"
+"apt-get é unha sinxela interface de liña de ordes para a descarga e\n"
+"instalación de paquetes. As ordes empregadas con máis frecuencia\n"
+"son actualizadas e instaladas. \n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Recupera unha nova lista de paquetes"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Executa unha actualización"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instala novos paquetes (o paquete é libc6 non libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instala novos paquetes (o paquete é libc6 non libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Retira paquetes"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Retira paquetes e ficheiros de configuración"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Retira automaticamente todos os paquetes sen uso"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Actualiza a distribución, vexa apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Segue as seleccións de dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configura as dependencias para paquetes de fontes"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Borra os arquivos de ficheiros"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Borra os arquivos de ficheiros antigos"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Comproba que non haxa dependencias sen cumprir"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Descarga os arquivos de fontes"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Descarga o paquete binario no directorio actual"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Descarga e mostra o rexistro de cambios para o paquete proposto"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Ten que especificar polo menos un paquete para obter o código fonte"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Uso: apt-extracttemplates fich1 [fich2 ...]\n"
+"\n"
+"apt-extracttemplates é unha ferramenta para extraer información\n"
+"de configuración e patróns dos paquetes debian\n"
+"\n"
+"Opcións:\n"
+" -h Este texto de axuda\n"
+" -t Estabelece o directorio temporal\n"
+" -c=? Le este ficheiro de configuración\n"
+" -o=? Estabelece unha opción de configuración, por exemplo: -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Uso: apt-extracttemplates fich1 [fich2 ...]\n"
+"\n"
+"apt-extracttemplates é unha ferramenta para extraer información\n"
+"de configuración e patróns dos paquetes debian\n"
+"\n"
+"Opcións:\n"
+" -h Este texto de axuda\n"
+" -t Estabelece o directorio temporal\n"
+" -c=? Le este ficheiro de configuración\n"
+" -o=? Estabelece unha opción de configuración, por exemplo: -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "mais non está instalado"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s cambiado a instalado manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s está estabelecido para a súa instalación automática.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Os seguintes paquetes NOVOS hanse instalar:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s xa é a versión máis recente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s xa é a versión máis recente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s cambiado a instalado manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Non foi posíbel abrir %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s está estabelecido para a súa instalación automática.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Comprobe que o paquete «dpkg-dev» estea instalado.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s está estabelecido para a súa instalación automática.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s está estabelecido para a súa instalación automática.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s cambiado a instalado manualmente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Rexistro de paquete descoñecido!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Lendo as listas de paquetes"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Paquetes inmobilizados:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Paquetes inmobilizados:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Paquetes estragados"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s cambiado a instalado manualmente.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Lendo a información do estado"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Configuración predeterminada incorrecta!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Prema Intro para continuar."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Quere borrar os ficheiros .deb descargados anteriormente?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Ocorreron algúns erros ao desempaquetar, Os paquetes que se instalaron"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "serán configurados, Isto pode dar erros de duplicación"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"ou erros causados por dependencias incumpridas. Isto é normal, só os erros"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"que hai enriba desta mensaxe son importantes. Arránxeos e volva a instalar."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Mesturando a información sobre paquetes dispoñíbeis"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "A lista de extensións de paquetes é longa de máis"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Produciuse un erro ao procesar o directorio %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "A lista de extensións de fontes é longa de máis"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Produciuse un erro ao gravar a cabeceira no ficheiro de contido"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Produciuse un erro ao procesar o contido %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Emprego: apt-ftparchive [opcións] orde\n"
+"Ordes: packages rutabinaria [fichoverride [prefixoruta]]\n"
+" sources rutafontes [fichoverride [prefixoruta]]\n"
+" contents ruta\n"
+" release ruta\n"
+" generate config [grupos]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive xera ficheiros de índices para arquivos de Debian. Admite\n"
+"varios estilos de xeración, de totalmente automática a substitutos "
+"funcionais\n"
+"de dpkg-scanpackages e dpkg-scansources\n"
+"\n"
+"apt-ftparchive xera ficheiros Packages dunha árbore de .debs. O ficheiro\n"
+"Packages ten o contido de todos os campos de control de cada paquete, así\n"
+"coma a suma MD5 e o tamaño do ficheiro. Admitese un ficheiro de «overrides»\n"
+"para forzar o valor dos campos Priority e Section.\n"
+"\n"
+"De xeito semellante, apt-ftparchive xera ficheiros Sources dunha árbore de\n"
+".dscs. Pódese empregar a opción --source-override para especificar un "
+"ficheiro\n"
+"de «overrides» para fontes.\n"
+"\n"
+"As ordes «packages» e «sources» deberían executarse na raíz da árbore.\n"
+"«Rutabinaria» debería apuntar á base da busca recursiva e o ficheiro\n"
+"«fichoverride» debería conter os modificadores de «override». «Prefixoruta»\n"
+"engádese aos campos de nomes de ficheiros se está presente. Un exemplo\n"
+"de emprego do arquivo de Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opcións:\n"
+" -h Este texto de axuda\n"
+" --md5 Controla a xeración de MD5\n"
+" -s=? Ficheiro de «override» de fontes\n"
+" -q Non produce ningunha saída por pantalla\n"
+" -d=? Escolle a base de datos de caché opcional\n"
+" --no-delink Activa o modo de depuración de desligado\n"
+" --contents Controla a xeración do ficheiro de contido\n"
+" -c=? Le este ficheiro de configuración\n"
+" -o=? Estabelece unha opción de configuración"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Non coincide ningunha selección"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Faltan ficheiros no grupo de ficheiros de paquetes «%s»"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "A base de datos estaba danada, cambiouse o nome do ficheiro a %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "A base de datos é antiga, tentando anovar %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"O formato da base de datos non é correcto. Se a anovou desde unha versión "
+"antiga de apt, retirea e volva a crear a base de datos"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Non é posíbel abrir o ficheiro de base de datos %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Non foi posíbel ler a ligazón %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "O arquivo non ten un rexistro de control"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Non é posíbel obter un cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Non foi posíbel reservar memoria"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algoritmo de compresión «%s» descoñecido"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "A saída comprimida %s precisa dun conxunto de compresión"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Non foi posíbel crear a canle IPC ao subproceso"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Non foi posíbel facer a bifurcación"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Fillo de compresión"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Produciuse un erro interno, non foi posíbel crear %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Produciuse un fallo na E/S do subproceso/ficheiro"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Non foi posíbel ler ao calcular o MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Non é posíbel puido abrir %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "«Override» %s liña %lu incorrecta (1)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Non foi posíbel ler o ficheiro de «override» %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "«Override» %s liña %lu incorrecta (1)"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "«Override» %s liña %lu incorrecta (2)"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "«Override» %s liña %lu incorrecta (3)"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: non é posíbel ler o directorio %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: non é posíbel atopar %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: os erros aplícanse ao ficheiro "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Non foi posíbel solucionar %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Fallou o percorrido da árbore"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Non foi posíbel abrir %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DesLig %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Non foi posíbel ligar %s con %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Acadouse o límite de desligado de %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "O arquivo non tiña un campo Package"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s non ten unha entrada de «override»\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " O mantedor de %s é %s, non %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s non ten unha entrada de «override» de código fonte\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s tampouco ten unha entrada de «override» de binarios\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Agardando polas cabeceiras"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "O servidor HTTP enviou unha cabeceira de resposta incorrecta"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Liña de cabeceira incorrecta"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+"O servidor HTTP enviou unha cabeceira cunha lonxitude de contido incorrecta"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "O servidor HTTP enviou unha cabeceira cun rango de contido incorrecto"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Este servidor HTTP ten a compatibilidade de rangos estragada"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Formato de datos descoñecido"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Datos da cabeceira incorrectos"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Produciuse un fallo na conexión"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Produciuse un erro interno"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Non é posíbel ler a base de datos do CD-ROM %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Empregue apt-cdrom para que APT poida recoñecer este CD-ROM. Non foi posíbel "
+"empregar apt-get update para engadir un CD-ROM"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD-ROM incorrecto"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Non é posíbel desmontar o CD-ROM de %s, pode estarse empregando aínda."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Non se atopou o disco"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Non se atopou o ficheiro"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Conectando a %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Conectando a %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Non foi posíbel crear un socket para %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Non é posíbel iniciar a conexión a %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Fallou"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Non foi posíbel conectar a %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Non foi posíbel conectar a %s:%s (%s), a conexión esgotou o tempo"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Conectando a %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Non foi posíbel atopar «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Produciuse un fallo temporal ao buscar «%s»"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Aconteceu algo malo, buscando «%s:%s» (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Aconteceu algo malo, buscando «%s:%s» (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Non é posíbel conectar %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Non foi posíbel determinar o estado"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI incorrecto, os URI locais non deben comezar por //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Identificándose"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Non é posíbel determinar o nome do outro extremo"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Non é posíbel determinar o nome local"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "O servidor rexeitou a conexión e dixo: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Fallou a orde USER, o servidor dixo: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Fallou a orde PASS, o servidor dixo: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Especificouse un servidor proxy pero non un script de conexión, Acquire::"
+"ftp::ProxyLogin está baleiro."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Fallou a orde do script de acceso «%s», o servidor dixo: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Fallou a orde TYPE, o servidor dixo: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Esgotouse o tempo para a conexión"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "O servidor pechou a conexión"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Unha resposta desbordou o búfer."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Dano no protocolo"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Non é posíbel crear un socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Non é posíbel conectar o socket de datos, o tempo esgotouse para a conexión"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Non é posíbel conectar o socket pasivo."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo non puido obter un socket no que atender"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Non é posíbel ligar un socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Non é posíbel escoitar no socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Non é posíbel determinar o nome do socket"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Non é posíbel enviar a orde PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Familia de enderezos %u (AF_*) descoñecida"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Produciuse un fallou na orde EPRT, o servidor dixo: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "A conexión do socket de datos esgotou o tempo"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Non é posíbel aceptar a conexión"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Xurdiu un problema ao calcular o hash do ficheiro"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Non é posíbel obter o ficheiro, o servidor dixo «%s»"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "O socket de datos esgotou o tempo"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Produciuse un fallou na transferencia de datos, o servidor dixo «%s»"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Petición"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Non é posíbel chamar a "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Atopouse polo menos unha sinatura incorrecta."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Erro interno: Sinatura correcta, pero non foi posíbel determinar a pegada "
+"dixital da chave"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Non é posíbel executar «apt-key» para verificar a sinatura (Está instalado "
+"gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Produciuse un erro descoñecido ao executar apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "As seguintes sinaturas non eran correctas:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Non se puideron verificar as seguintes sinaturas porque a chave pública non "
+"está dispoñíbel:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Produciuse un erro ao escribir no ficheiro"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+"Produciuse un erro ao ler do servidor. O extremo remoto pechou a conexión"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Produciuse un erro ao ler do servidor"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Produciuse un erro ao escribir nun ficheiro"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Fallou a chamada a select"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "A conexión esgotou o tempo"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Produciuse un erro ao escribir no ficheiro de saída"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Non foi posíbel estabelecer a hora de modificación"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "A conexión pechouse prematuramente"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Os ficheiros baleiros non poden ser arquivadores válidos"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Cabeceira do membro do arquivo incorrecta %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Retirouse %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "O ficheiro de paquete %s está sen sincronizar."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Os ficheiros de índices de paquetes están danados. Non hai un campo "
+#~ "Filename: para o paquete %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Non se atopou ningún ficheiro de replica «%s» "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Non é posíbel ler o ficheiro de replica «%s»"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Non é posíbel ler o ficheiro de replica «%s»"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Replica: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Abrindo o ficheiro de configuración %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Abrindo %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Non é posíbel atopar a entrada agardada «%s» no ficheiro de publicación "
+#~ "(entrada sources.list incorrecta ou ficheiro con formato incorrecto)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dependencias incumpridas. Probe a empregar --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "Pode querer executar «apt --fix-broken install» para corrixir isto:"
+
+#~ msgid "(not found)"
+#~ msgstr "(non se atopou)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Inmobilizado: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Non hai unha chave pública dispoñíbel para os seguintes ID de chave:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "O directorio %s está desviado"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "A dependencia «%s» de %s non se pode satisfacer porque non se pode atopar "
+#~ "o paquete %s"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "A dependencia «%s» de %s non se pode satisfacer porque non se pode atopar "
+#~ "o paquete %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Non foi posíbel satisfacer a dependencia «%s» de %s: O paquete instalado "
+#~ "%s é novo de máis"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "A dependencia «%s» de %s non se pode satisfacer porque ningunha versión "
+#~ "dispoñíbel do paquete %s satisfai os requirimentos de versión"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "A dependencia «%s» de %s non se pode satisfacer porque non se pode atopar "
+#~ "o paquete %s"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Non foi posíbel satisfacer a dependencia «%s» de %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Non se puideron satisfacer as dependencias de construción de %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Xurdiu un problema ao desligar %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Non foi posíbel desligar %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Uso: apt-cache [opcións] orde\n"
+#~ " apt-cache [opcións] show paquete1 [paquete2 ...]\n"
+#~ "\n"
+#~ "apt-cache é unha ferramenta de baixo nivel usada para consultar\n"
+#~ "informacións dos ficheiros binarios da cache do APT\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Options:\n"
+#~ " -h Este texto de axuda.\n"
+#~ " -p=? A cache do paquete.\n"
+#~ " -s=? A cache da fonte.\n"
+#~ " -q Desactiva o indicador de progreso.\n"
+#~ " -i Mostra soamente dependencias importantes para a orde unmet.\n"
+#~ " -c=? Ler este ficheiro de configuración\n"
+#~ " -o=? Define unha opción arbitraria de configuración, ex. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Vexa a páxina de manual apt-cache(8) e apt.conf(5) para obter mais "
+#~ "información.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opcións:\n"
+#~ " -h Este texto de axuda.\n"
+#~ " -c=? Le este ficheiro de configuración\n"
+#~ " -o=? Estabelece unha opción de configuración, por exemplo: -o dir::"
+#~ "cache=/tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Emprego: apt-sortpkgs [opcións] fich1 [fich2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs é unha ferramenta simple para ordenar ficheiros de "
+#~ "paquetes.\n"
+#~ "A opción -s emprégase para indicar o tipo de ficheiro que é.\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -h Este texto de axuda\n"
+#~ " -s Emprega ordenamento por ficheiros fonte\n"
+#~ " -c=? Le este ficheiro de configuración\n"
+#~ " -o=? Estabelece unha opción de configuración; por exemplo, -o dir::"
+#~ "cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "O proceso fillo fallou"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Ten que especificar polo menos un paquete para obter o código fonte"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Non foi posíbel crear as canles"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Non foi posíbel executar gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s para %s compilado en %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Non foi posíbel crear o FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Liña %lu mal construída na lista de orixes %s (análise de URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Liña %lu mal construída na lista de fontes %s ([opción] non analizábel)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Liña %lu mal construída na lista de fontes %s ([opción] demasiado curta)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Liña %lu mal construída na lista de fontes %s ([%s] non é unha asignación)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Liña %lu mal construída na lista de fontes %s ([%s] non ten chave)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Liña %lu mal construída na lista de fontes %s ([%s] a chave %s non ten "
+#~ "valor)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Liña %lu mal construída na lista de orixes %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Liña %lu mal construída na lista de orixes %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Liña %lu mal construída na lista de orixes %s (análise de URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Liña %lu mal construída na lista de orixes %s (dist absoluta)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Liña %lu mal construída na lista de orixes %s (análise de dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Non foi posíbel atopar o paquete %s %s ao procesar as dependencias de "
+#~ "ficheiros"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Non foi posíbel atopar a lista de paquetes fonte %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Recollendo as provisións de ficheiros"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr ""
+#~ "Non é posíbel ler a suma de comprobación para «%s» no ficheiro de "
+#~ "publicación"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "O bloque de provedor %s non contén unha pegada dixital"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Espazo total de versións de dependencias: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Non hai espazo libre abondo en %s"
+
+#~ msgid "Done"
+#~ msgstr "Feito"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Non ha ningún chaveiro instalado en %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Produciuse un erro interno, AllUpgrade estragou cousas"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s non é un paquete DEB válido."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Empregando o punto de montaxe de CD-ROMs %s\n"
+#~ "Montando o CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Non foi posíbel actualizar %s con mmap e co ficheiro usado na operación - "
+#~ "a actualización semella estar danada."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Non foi posíbel actualizar %s con mmap e (mais non hai un fallo "
+#~ "específico de mmap) - a actualización semella estar danada."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Ignorase a versión de destino «%s» non dispoñíbel do paquete «%s»"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Descargando %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Este non é un arquivo DEB correcto, non ten un membro «%s», «%s» ou «%s»"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "A MD5Sum non coincide"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Non é posíbel atopar un ficheiro para o paquete %s. Isto pode significar "
+#~ "que ten que arranxar este paquete a man."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Non foi posíbel escribir no rexistro, a chamada a openpty() fallou (/dev/"
+#~ "pts non estaba montado?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Omitindo o ficheiro inexistente %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Non foi posíbel retirar %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Non é posíbel crear %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Non foi posíbel atopar %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Os directorios info e temp teñen que estar no mesmo sistema de ficheiros"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Non foi posíbel cambiar ao directorio de administración %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Produciuse un erro interno ao obter un nome de paquete"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Lendo a lista de ficheiros"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Non foi posíbel abrir o ficheiro de listas «%sinfo/%s». Se non pode "
+#~ "recuperalo, baléireo e reinstale a mesma versión do paquete."
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Non foi posíbel ler o ficheiro de listas %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Produciuse un erro interno ao obter un nodo"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Non foi posíbel abrir o ficheiro de desvíos %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "O ficheiro de desvíos está danado"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Liña incorrecta no ficheiro de desvíos: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Produciuse un erro interno ao engadir un desvío"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Antes ten que inicializarse a caché de paquetes"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Non foi posíbel atopar unha cabeceira Package:, desprazamento %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr ""
+#~ "Sección ConfFile incorrecta no ficheiro de estado. Desprazamento %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Produciuse un erro ao analizar o MD5. Desprazamento %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Non foi posíbel cambiar a %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Non foi posíbel atopar un ficheiro de control correcto"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Non foi posíbel abrir unha canle para %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Erro de lectura do proceso %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Obtivose unha soa liña de cabeceira en %u caracteres"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Nota: Isto será feito automaticamente por dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "«Override» %s liña %lu incorrecta (1)"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "«Override» %s liña %lu incorrecta (2)"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "«Override» %s liña %lu incorrecta (3)"
+
+#~ msgid "decompressor"
+#~ msgstr "descompresor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "lectura, aínda hai %lu para ler pero non queda ningún"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "escritura, aínda hai %lu para escribir pero non se puido"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Non foi posíbel realizar a configuración inmediata no paquete, aínda sen "
+#~ "desempaquetar, «%s». Vexa man 5 apt.conf baixo APT::Immediate-Configure "
+#~ "para obter máis detalles."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Produciuse un erro ao procesar %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Produciuse un erro ao procesar %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Produciuse un erro ao procesar %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Produciuse un erro ao procesar %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Produciuse un erro ao procesar %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Produciuse un erro ao procesar %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Produciuse un erro ao procesar %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Produciuse un erro ao procesar %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Produciuse un erro ao procesar %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Produciuse un erro ao procesar %s (CollectFileProvides)"
+
+#, fuzzy
+#~| msgid "Internal error, could not locate member %s"
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Produciuse un erro interno, non foi posíbel atopar o membro %s"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr ""
+#~ "Caducou o ficheiro de publicación, ignorando %s (non válido desde %s)"
+
+#~ msgid " %4i %s\n"
+#~ msgstr "\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "\n"
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..2f7b7f4
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,2836 @@
+# English translation of apt_po.
+# This file is put in the public domain.
+# Lior Kaplan <webmaster@guides.co.il>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.5.25\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2010-01-01 19:13+0100\n"
+"PO-Revision-Date: 2004-06-10 19:58+0300\n"
+"Last-Translator: Lior Kaplan <webmaster@guides.co.il>\n"
+"Language: he\n"
+"Language-Team: Hebrew\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: cmdline/apt-cache.cc:141
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "לחבילה %s בגרסה %s יש תלויות שלא נענו:\n"
+
+#: cmdline/apt-cache.cc:181 cmdline/apt-cache.cc:550 cmdline/apt-cache.cc:644
+#: cmdline/apt-cache.cc:797 cmdline/apt-cache.cc:1021
+#: cmdline/apt-cache.cc:1423 cmdline/apt-cache.cc:1575
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "לא מצליח לאתר את החבילה %s"
+
+#: cmdline/apt-cache.cc:245
+msgid "Total package names: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:285
+msgid " Normal packages: "
+msgstr "חבילות נורמליות:"
+
+#: cmdline/apt-cache.cc:286
+msgid " Pure virtual packages: "
+msgstr "חבילות וירטואליות לחלוטין:"
+
+#: cmdline/apt-cache.cc:287
+msgid " Single virtual packages: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:288
+msgid " Mixed virtual packages: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:289
+msgid " Missing: "
+msgstr "חסרות:"
+
+#: cmdline/apt-cache.cc:291
+msgid "Total distinct versions: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:293
+msgid "Total distinct descriptions: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:295
+msgid "Total dependencies: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:298
+msgid "Total ver/file relations: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:300
+msgid "Total Desc/File relations: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:302
+msgid "Total Provides mappings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:314
+msgid "Total globbed strings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:328
+msgid "Total dependency version space: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:333
+msgid "Total slack space: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:341
+msgid "Total space accounted for: "
+msgstr ""
+
+#: cmdline/apt-cache.cc:469 cmdline/apt-cache.cc:1221
+#, c-format
+msgid "Package file %s is out of sync."
+msgstr "קובץ החבילה %s לא מסונכרן."
+
+#: cmdline/apt-cache.cc:1297
+msgid "You must give exactly one pattern"
+msgstr "אתה חייב לתת בדיוק תבנית אחת"
+
+#: cmdline/apt-cache.cc:1451
+msgid "No packages found"
+msgstr "לא נמצאו חבילות"
+
+#: cmdline/apt-cache.cc:1528
+msgid "Package files:"
+msgstr "קבצי חבילה:"
+
+#: cmdline/apt-cache.cc:1535 cmdline/apt-cache.cc:1622
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+
+#. Show any packages have explicit pins
+#: cmdline/apt-cache.cc:1549
+msgid "Pinned packages:"
+msgstr "חבילות נעוצות:"
+
+#: cmdline/apt-cache.cc:1561 cmdline/apt-cache.cc:1602
+msgid "(not found)"
+msgstr "(לא נמצא)"
+
+#. Installed version
+#: cmdline/apt-cache.cc:1582
+msgid " Installed: "
+msgstr "מותקן:"
+
+#: cmdline/apt-cache.cc:1584 cmdline/apt-cache.cc:1592
+msgid "(none)"
+msgstr "(none)"
+
+#. Candidate Version
+#: cmdline/apt-cache.cc:1589
+msgid " Candidate: "
+msgstr "מועמדים:"
+
+#: cmdline/apt-cache.cc:1599
+msgid " Package pin: "
+msgstr "נעץ חבילה:"
+
+#. Show the priority tables
+#: cmdline/apt-cache.cc:1608
+msgid " Version table:"
+msgstr ""
+
+#: cmdline/apt-cache.cc:1718 cmdline/apt-cdrom.cc:134 cmdline/apt-config.cc:70
+#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:547
+#: cmdline/apt-get.cc:2665 cmdline/apt-sortpkgs.cc:144
+#, fuzzy, c-format
+msgid "%s %s for %s compiled on %s %s\n"
+msgstr "%s %s בשביל %s %s קומפל על %s %s\n"
+
+#: cmdline/apt-cache.cc:1725
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] add file1 [file2 ...]\n"
+" apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
+" apt-cache [options] showsrc pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache is a low-level tool used to manipulate APT's binary\n"
+"cache files, and query information from them\n"
+"\n"
+"Commands:\n"
+" add - Add a package file to the source cache\n"
+" gencaches - Build both the package and source cache\n"
+" showpkg - Show some general information for a single package\n"
+" showsrc - Show source records\n"
+" stats - Show some basic statistics\n"
+" dump - Show the entire file in a terse form\n"
+" dumpavail - Print an available file to stdout\n"
+" unmet - Show unmet dependencies\n"
+" search - Search the package list for a regex pattern\n"
+" show - Show a readable record for the package\n"
+" depends - Show raw dependency information for a package\n"
+" rdepends - Show reverse dependency information for a package\n"
+" pkgnames - List the names of all packages in the system\n"
+" dotty - Generate package graphs for GraphViz\n"
+" xvcg - Generate package graphs for xvcg\n"
+" policy - Show policy settings\n"
+"\n"
+"Options:\n"
+" -h This help text.\n"
+" -p=? The package cache.\n"
+" -s=? The source cache.\n"
+" -q Disable progress indicator.\n"
+" -i Show only important deps for the unmet command.\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+"See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc:77
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc:92
+msgid "Please insert a Disc in the drive and press enter"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc:114
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+
+#: cmdline/apt-config.cc:41
+msgid "Arguments not in pairs"
+msgstr ""
+
+#: cmdline/apt-config.cc:76
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is a simple tool to read the APT config file\n"
+"\n"
+"Commands:\n"
+" shell - Shell mode\n"
+" dump - Show the configuration\n"
+"\n"
+"Options:\n"
+" -h This help text.\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc:98
+#, c-format
+msgid "%s not a valid DEB package."
+msgstr "%s הוא לא חבילת DEB תקינה."
+
+#: cmdline/apt-extracttemplates.cc:232
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is a tool to extract config and template info\n"
+"from debian packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" -t Set the temp dir\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:830
+#, c-format
+msgid "Unable to write to %s"
+msgstr "לא מצליח לכתוב ל-%s"
+
+#: cmdline/apt-extracttemplates.cc:310
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "לא מצליח לקבל את גרסת debconf. האם debconf מותקן?"
+
+#: ftparchive/apt-ftparchive.cc:164 ftparchive/apt-ftparchive.cc:338
+msgid "Package extension list is too long"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc:166 ftparchive/apt-ftparchive.cc:180
+#: ftparchive/apt-ftparchive.cc:203 ftparchive/apt-ftparchive.cc:253
+#: ftparchive/apt-ftparchive.cc:267 ftparchive/apt-ftparchive.cc:289
+#, c-format
+msgid "Error processing directory %s"
+msgstr "שגיאה בעיבוד ספריה %s"
+
+#: ftparchive/apt-ftparchive.cc:251
+msgid "Source extension list is too long"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc:368
+msgid "Error writing header to contents file"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc:398
+#, c-format
+msgid "Error processing contents %s"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc:553
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc:759
+msgid "No selections matched"
+msgstr "אין התאמות"
+
+#: ftparchive/apt-ftparchive.cc:832
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "חלק מהקבצים חסרים בקבוצת קבצי החבילה `%s'"
+
+#: ftparchive/cachedb.cc:43
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "מסד הנתונים אינו תקין, הקובץ הועבר ל-%s.old"
+
+#: ftparchive/cachedb.cc:61
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "מסד הנתונים ישן, מנסה לשדרג ל-%s"
+
+#: ftparchive/cachedb.cc:72
+msgid ""
+"DB format is invalid. If you upgraded from a older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc:77
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "לא מצליח לפתוח את קובץ מסד הנתונים %s: %s"
+
+#: ftparchive/cachedb.cc:123 apt-inst/extract.cc:178 apt-inst/extract.cc:190
+#: apt-inst/extract.cc:207 apt-inst/deb/dpkgdb.cc:117
+#, c-format
+msgid "Failed to stat %s"
+msgstr ""
+
+#: ftparchive/cachedb.cc:238
+msgid "Archive has no control record"
+msgstr ""
+
+#: ftparchive/cachedb.cc:444
+msgid "Unable to get a cursor"
+msgstr ""
+
+#: ftparchive/writer.cc:76
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: לא מצליח לקרוא את הספריה %s\n"
+
+#: ftparchive/writer.cc:81
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc:132
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc:134
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc:141
+msgid "E: Errors apply to file "
+msgstr "E: שגיאות תקפות לקובץ"
+
+#: ftparchive/writer.cc:158 ftparchive/writer.cc:188
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "כשלון בפענוח %s"
+
+#: ftparchive/writer.cc:170
+msgid "Tree walking failed"
+msgstr ""
+
+#: ftparchive/writer.cc:195
+#, c-format
+msgid "Failed to open %s"
+msgstr "כשלון בפתיחת %s"
+
+#: ftparchive/writer.cc:254
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr ""
+
+#: ftparchive/writer.cc:262
+#, c-format
+msgid "Failed to readlink %s"
+msgstr ""
+
+#: ftparchive/writer.cc:266
+#, c-format
+msgid "Failed to unlink %s"
+msgstr ""
+
+#: ftparchive/writer.cc:273
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** כשלון בקישור %s ל-%s"
+
+#: ftparchive/writer.cc:283
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr ""
+
+#: ftparchive/writer.cc:388
+msgid "Archive had no package field"
+msgstr ""
+
+#: ftparchive/writer.cc:396 ftparchive/writer.cc:627
+#, c-format
+msgid " %s has no override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc:457 ftparchive/writer.cc:715
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr "המתחזק של %s הוא %s ולא %s\n"
+
+#: ftparchive/writer.cc:637
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc:641
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+
+#: ftparchive/contents.cc:321
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr ""
+
+#: ftparchive/contents.cc:358 ftparchive/contents.cc:389
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - כשלון בהקצאת זיכרון"
+
+#: ftparchive/override.cc:34 ftparchive/override.cc:142
+#, c-format
+msgid "Unable to open %s"
+msgstr "לא מצליח לפתוח את %s"
+
+#: ftparchive/override.cc:60 ftparchive/override.cc:166
+#, c-format
+msgid "Malformed override %s line %lu #1"
+msgstr ""
+
+#: ftparchive/override.cc:74 ftparchive/override.cc:178
+#, c-format
+msgid "Malformed override %s line %lu #2"
+msgstr ""
+
+#: ftparchive/override.cc:88 ftparchive/override.cc:191
+#, c-format
+msgid "Malformed override %s line %lu #3"
+msgstr ""
+
+#: ftparchive/override.cc:127 ftparchive/override.cc:201
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr ""
+
+#: ftparchive/multicompress.cc:72
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "'%s' אלגוריתם דחיה לא ידוע"
+
+#: ftparchive/multicompress.cc:102
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr ""
+
+#: ftparchive/multicompress.cc:169 methods/rsh.cc:91
+msgid "Failed to create IPC pipe to subprocess"
+msgstr ""
+
+#: ftparchive/multicompress.cc:195
+msgid "Failed to create FILE*"
+msgstr ""
+
+#: ftparchive/multicompress.cc:198
+msgid "Failed to fork"
+msgstr "כשלון בביצוע fork"
+
+#: ftparchive/multicompress.cc:212
+msgid "Compress child"
+msgstr ""
+
+#: ftparchive/multicompress.cc:235
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "שגיאה פנימית, כלשון ביצירת %s"
+
+#: ftparchive/multicompress.cc:286
+msgid "Failed to create subprocess IPC"
+msgstr ""
+
+#: ftparchive/multicompress.cc:321
+msgid "Failed to exec compressor "
+msgstr ""
+
+#: ftparchive/multicompress.cc:360
+msgid "decompressor"
+msgstr ""
+
+#: ftparchive/multicompress.cc:403
+msgid "IO to subprocess/file failed"
+msgstr ""
+
+#: ftparchive/multicompress.cc:455
+msgid "Failed to read while computing MD5"
+msgstr ""
+
+#: ftparchive/multicompress.cc:472
+#, c-format
+msgid "Problem unlinking %s"
+msgstr ""
+
+#: ftparchive/multicompress.cc:487 apt-inst/extract.cc:185
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "כשלון בשינוי השם %s ל-%s"
+
+#: cmdline/apt-get.cc:127
+msgid "Y"
+msgstr "Y"
+
+#: cmdline/apt-get.cc:149 cmdline/apt-get.cc:1730
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:244
+msgid "The following packages have unmet dependencies:"
+msgstr "לחבילות הבאות יש תלויות שלא נענו:"
+
+#: cmdline/apt-get.cc:334
+#, c-format
+msgid "but %s is installed"
+msgstr "אבל %s מותקנת"
+
+#: cmdline/apt-get.cc:336
+#, c-format
+msgid "but %s is to be installed"
+msgstr "אבל %s הולכת להיות מותקנת"
+
+#: cmdline/apt-get.cc:343
+msgid "but it is not installable"
+msgstr "אבל היא אינה ניתנת להתקנה"
+
+#: cmdline/apt-get.cc:345
+msgid "but it is a virtual package"
+msgstr "אבל היא חבילה וירטואלית"
+
+#: cmdline/apt-get.cc:348
+msgid "but it is not installed"
+msgstr "אבל היא לא מותקנת"
+
+#: cmdline/apt-get.cc:348
+msgid "but it is not going to be installed"
+msgstr "אבל היא אינה הולכת להיות מותקנת"
+
+#: cmdline/apt-get.cc:353
+msgid " or"
+msgstr "או"
+
+#: cmdline/apt-get.cc:382
+msgid "The following NEW packages will be installed:"
+msgstr "החבילות החדשות הבאות הולכות להיות מותקנות:"
+
+#: cmdline/apt-get.cc:408
+msgid "The following packages will be REMOVED:"
+msgstr "החבילות הבאות יוסרו:"
+
+#: cmdline/apt-get.cc:430
+msgid "The following packages have been kept back:"
+msgstr "החבילות הבאות מעובות:"
+
+#: cmdline/apt-get.cc:451
+msgid "The following packages will be upgraded:"
+msgstr "החבילות הבאות ישודרגו:"
+
+#: cmdline/apt-get.cc:472
+msgid "The following packages will be DOWNGRADED:"
+msgstr "החבילות הבאות ישודרגו מטה:"
+
+#: cmdline/apt-get.cc:492
+msgid "The following held packages will be changed:"
+msgstr "החבילות המחוזקות הבאות ישונו:"
+
+#: cmdline/apt-get.cc:545
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (בגלל %s)"
+
+#: cmdline/apt-get.cc:553
+#, fuzzy
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"א ז ה ר ה: החבילות החיוניות הבאות יוסרו\n"
+"על הפעולה להעשות *רק* אם אתה יודע מה אתה עושה!"
+
+#: cmdline/apt-get.cc:584
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu משודרגים, %lu מותקנים חדשים, "
+
+#: cmdline/apt-get.cc:588
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu מותקנות מחדש, "
+
+#: cmdline/apt-get.cc:590
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu משודרגות מטה, "
+
+#: cmdline/apt-get.cc:592
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu יוסרו ו-%lu לא ישודרגו.\n"
+
+#: cmdline/apt-get.cc:596
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu לא מותקנות לחלוטין או הוסרו.\n"
+
+#: cmdline/apt-get.cc:669
+msgid "Correcting dependencies..."
+msgstr "מתקן תלויות..."
+
+#: cmdline/apt-get.cc:672
+msgid " failed."
+msgstr "כשלון."
+
+#: cmdline/apt-get.cc:675
+msgid "Unable to correct dependencies"
+msgstr "לא מצליח לתקן תלויות"
+
+#: cmdline/apt-get.cc:678
+msgid "Unable to minimize the upgrade set"
+msgstr "א ז ה ר ה: החבילות החיוניות הבאות יוסרו"
+
+#: cmdline/apt-get.cc:680
+msgid " Done"
+msgstr "סיום"
+
+#: cmdline/apt-get.cc:684
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "אולי תרצה להריץ 'apt --fix-broken install' כדי לתקן את אלו."
+
+#: cmdline/apt-get.cc:687
+msgid "Unmet dependencies. Try using --fix-broken."
+msgstr "תלויות שלא נענו. נסה להשתמש באפשרות --fix-broken."
+
+#: cmdline/apt-get.cc:712
+#, fuzzy
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "החבילות הבאות ישודרגו:"
+
+#: cmdline/apt-get.cc:716
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:723
+msgid "Install these packages without verification [y/N]? "
+msgstr ""
+
+#: cmdline/apt-get.cc:725
+msgid "Some packages could not be authenticated"
+msgstr ""
+
+#: cmdline/apt-get.cc:734 cmdline/apt-get.cc:890
+msgid "There are problems and -y was used without --force-yes"
+msgstr "היו בעיות והאפשרות -y היתה בשימוש ללא האפשרות --force-yes"
+
+#: cmdline/apt-get.cc:775
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
+#: cmdline/apt-get.cc:784
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+
+#: cmdline/apt-get.cc:795
+msgid "Internal error, Ordering didn't finish"
+msgstr ""
+
+#: cmdline/apt-get.cc:811 cmdline/apt-get.cc:2072 cmdline/apt-get.cc:2105
+msgid "Unable to lock the download directory"
+msgstr "לא מצליח לנעול את ספרית ההורדה."
+
+#: cmdline/apt-get.cc:821 cmdline/apt-get.cc:2153 cmdline/apt-get.cc:2406
+#: apt-pkg/cachefile.cc:65
+msgid "The list of sources could not be read."
+msgstr "רשימת המקורות לא ניתנת לקריאה."
+
+#: cmdline/apt-get.cc:836
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+
+#: cmdline/apt-get.cc:841
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "צריך לקבל %sB/%sB מתוך הארכיונים.\n"
+
+#: cmdline/apt-get.cc:844
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "צריך לקבל %sB מתוך הארכיונים.\n"
+
+#: cmdline/apt-get.cc:849
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "אחרי פריסה %sB נוספים יהיו בשימוש.\n"
+
+#: cmdline/apt-get.cc:852
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "אחרי פריסה %sB נוספים ישוחררו.\n"
+
+#: cmdline/apt-get.cc:867 cmdline/apt-get.cc:870 cmdline/apt-get.cc:2249
+#: cmdline/apt-get.cc:2252
+#, fuzzy, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "אין לך מספיק מקום פנוי ב-%s."
+
+#: cmdline/apt-get.cc:880
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "אין לך מספיק מקום פנוי ב-%s."
+
+#: cmdline/apt-get.cc:896 cmdline/apt-get.cc:916
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+
+#: cmdline/apt-get.cc:898
+msgid "Yes, do as I say!"
+msgstr "כן, עשה כפי שאני אומר!"
+
+#: cmdline/apt-get.cc:900
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+
+#: cmdline/apt-get.cc:906 cmdline/apt-get.cc:925
+msgid "Abort."
+msgstr "בטל."
+
+#: cmdline/apt-get.cc:921
+#, fuzzy
+msgid "Do you want to continue [Y/n]? "
+msgstr "האם אתה רוצה להמשיך? [Y/n]"
+
+#: cmdline/apt-get.cc:993 cmdline/apt-get.cc:2303 apt-pkg/algorithms.cc:1389
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "כשלון בהבאת %s %s"
+
+#: cmdline/apt-get.cc:1011
+msgid "Some files failed to download"
+msgstr "כשלון בהורדת חלק מהקבצים"
+
+#: cmdline/apt-get.cc:1012 cmdline/apt-get.cc:2312
+msgid "Download complete and in download only mode"
+msgstr "ההורדה הסתיימה במסגרת מצב הורדה בלבד."
+
+#: cmdline/apt-get.cc:1018
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+
+#: cmdline/apt-get.cc:1022
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+
+#: cmdline/apt-get.cc:1027
+msgid "Unable to correct missing packages."
+msgstr ""
+
+#: cmdline/apt-get.cc:1028
+msgid "Aborting install."
+msgstr ""
+
+#: cmdline/apt-get.cc:1086
+#, c-format
+msgid "Note, selecting %s instead of %s\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1097
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1115
+#, c-format
+msgid "Package %s is not installed, so not removed\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1126
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1138
+msgid " [Installed]"
+msgstr ""
+
+#: cmdline/apt-get.cc:1143
+msgid "You should explicitly select one to install."
+msgstr ""
+
+#: cmdline/apt-get.cc:1148
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1167
+msgid "However the following packages replace it:"
+msgstr ""
+
+#: cmdline/apt-get.cc:1170
+#, c-format
+msgid "Package %s has no installation candidate"
+msgstr ""
+
+#: cmdline/apt-get.cc:1190
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1198
+#, c-format
+msgid "%s is already the newest version.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1227
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr ""
+
+#: cmdline/apt-get.cc:1229
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr ""
+
+#: cmdline/apt-get.cc:1235
+#, c-format
+msgid "Selected version %s (%s) for %s\n"
+msgstr ""
+
+#. if (VerTag.empty() == false && Last == 0)
+#: cmdline/apt-get.cc:1311 cmdline/apt-get.cc:1379
+#, c-format
+msgid "Ignore unavailable version '%s' of package '%s'"
+msgstr ""
+
+#: cmdline/apt-get.cc:1313
+#, c-format
+msgid "Ignore unavailable target release '%s' of package '%s'"
+msgstr ""
+
+#: cmdline/apt-get.cc:1342
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1395
+msgid "The update command takes no arguments"
+msgstr ""
+
+#: cmdline/apt-get.cc:1408
+msgid "Unable to lock the list directory"
+msgstr ""
+
+#: cmdline/apt-get.cc:1464
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: cmdline/apt-get.cc:1513
+#, fuzzy
+msgid ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr "החבילות החדשות הבאות הולכות להיות מותקנות:"
+
+#: cmdline/apt-get.cc:1515
+#, fuzzy, c-format
+msgid "%lu packages were automatically installed and are no longer required.\n"
+msgstr "החבילות החדשות הבאות הולכות להיות מותקנות:"
+
+#: cmdline/apt-get.cc:1516
+msgid "Use '%s' to remove them."
+msgstr ""
+
+#: cmdline/apt-get.cc:1521
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << endl;
+#. }
+#.
+#: cmdline/apt-get.cc:1524 cmdline/apt-get.cc:1814
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+
+#: cmdline/apt-get.cc:1528
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "שגיאה פנימית, כלשון ביצירת %s"
+
+#: cmdline/apt-get.cc:1547
+msgid "Internal error, AllUpgrade broke stuff"
+msgstr ""
+
+#: cmdline/apt-get.cc:1602
+#, c-format
+msgid "Couldn't find task %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:1717 cmdline/apt-get.cc:1753
+#, c-format
+msgid "Couldn't find package %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:1740
+#, c-format
+msgid "Note, selecting %s for regex '%s'\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:1771
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "אבל %s הולכת להיות מותקנת"
+
+#: cmdline/apt-get.cc:1784
+msgid "You might want to run 'apt --fix-broken install' to correct these:"
+msgstr ""
+
+#: cmdline/apt-get.cc:1787
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a "
+"solution)."
+msgstr ""
+
+#: cmdline/apt-get.cc:1799
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+
+#: cmdline/apt-get.cc:1817
+msgid "Broken packages"
+msgstr ""
+
+#: cmdline/apt-get.cc:1846
+msgid "The following extra packages will be installed:"
+msgstr ""
+
+#: cmdline/apt-get.cc:1935
+msgid "Suggested packages:"
+msgstr ""
+
+#: cmdline/apt-get.cc:1936
+msgid "Recommended packages:"
+msgstr ""
+
+#: cmdline/apt-get.cc:1965
+msgid "Calculating upgrade"
+msgstr ""
+
+#: cmdline/apt-get.cc:1968 methods/ftp.cc:708 methods/connect.cc:112
+msgid "Failed"
+msgstr ""
+
+#: cmdline/apt-get.cc:1973
+msgid "Done"
+msgstr ""
+
+#: cmdline/apt-get.cc:2040 cmdline/apt-get.cc:2048
+#, fuzzy
+msgid "Internal error, problem resolver broke stuff"
+msgstr "שגיאה פנימית, כלשון ביצירת %s"
+
+#: cmdline/apt-get.cc:2148
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+
+#: cmdline/apt-get.cc:2178 cmdline/apt-get.cc:2424
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:2227
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2262
+#, c-format
+msgid "You don't have enough free space in %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:2268
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2271
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2277
+#, c-format
+msgid "Fetch source %s\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2308
+msgid "Failed to fetch some archives."
+msgstr ""
+
+#: cmdline/apt-get.cc:2336
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2348
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2349
+#, c-format
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2366
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2385
+msgid "Child process failed"
+msgstr ""
+
+#: cmdline/apt-get.cc:2401
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+
+#: cmdline/apt-get.cc:2429
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:2449
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2501
+#, c-format
+msgid ""
+"%s dependency for %s cannot be satisfied because the package %s cannot be "
+"found"
+msgstr ""
+
+#: cmdline/apt-get.cc:2554
+#, c-format
+msgid ""
+"%s dependency for %s cannot be satisfied because no available versions of "
+"package %s can satisfy version requirements"
+msgstr ""
+
+#: cmdline/apt-get.cc:2590
+#, c-format
+msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+msgstr ""
+
+#: cmdline/apt-get.cc:2617
+#, c-format
+msgid "Failed to satisfy %s dependency for %s: %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:2633
+#, c-format
+msgid "Build-dependencies for %s could not be satisfied."
+msgstr ""
+
+#: cmdline/apt-get.cc:2638
+msgid "Failed to process build dependencies"
+msgstr ""
+
+#: cmdline/apt-get.cc:2670
+msgid "Supported modules:"
+msgstr ""
+
+#: cmdline/apt-get.cc:2711
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a simple command line interface for downloading and\n"
+"installing packages. The most frequently used commands are update\n"
+"and install.\n"
+"\n"
+"Commands:\n"
+" update - Retrieve new lists of packages\n"
+" upgrade - Perform an upgrade\n"
+" install - Install new packages (pkg is libc6 not libc6.deb)\n"
+" remove - Remove packages\n"
+" autoremove - Remove automatically all unused packages\n"
+" purge - Remove packages and config files\n"
+" source - Download source archives\n"
+" build-dep - Configure build-dependencies for source packages\n"
+" dist-upgrade - Distribution upgrade, see apt-get(8)\n"
+" dselect-upgrade - Follow dselect selections\n"
+" clean - Erase downloaded archive files\n"
+" autoclean - Erase old downloaded archive files\n"
+" check - Verify that there are no broken dependencies\n"
+"\n"
+"Options:\n"
+" -h This help text.\n"
+" -q Loggable output - no progress indicator\n"
+" -qq No output except for errors\n"
+" -d Download only - do NOT install or unpack archives\n"
+" -s No-act. Perform ordering simulation\n"
+" -y Assume Yes to all queries and do not prompt\n"
+" -f Attempt to correct a system with broken dependencies in place\n"
+" -m Attempt to continue if archives are unlocatable\n"
+" -u Show a list of upgraded packages as well\n"
+" -b Build the source package after fetching it\n"
+" -V Show verbose version numbers\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+"See the apt-get(8), sources.list(5) and apt.conf(5) manual\n"
+"pages for more information and options.\n"
+" This APT has Super Cow Powers.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc:2879
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: cmdline/acqprogress.cc:55
+#, c-format
+msgid "Hit:%lu %s"
+msgstr ""
+
+#: cmdline/acqprogress.cc:79
+#, c-format
+msgid "Get:%lu %s"
+msgstr ""
+
+#: cmdline/acqprogress.cc:110
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#: cmdline/acqprogress.cc:114
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: cmdline/acqprogress.cc:135
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr ""
+
+#: cmdline/acqprogress.cc:225
+#, c-format
+msgid " [Working]"
+msgstr ""
+
+#: cmdline/acqprogress.cc:271
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press enter\n"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc:86
+msgid "Unknown package record!"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc:150
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package files. The -s option is used\n"
+"to indicate what kind of file it is.\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" -s Use source file sorting\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+msgstr ""
+
+#: dselect/install:32
+msgid "Bad default setting!"
+msgstr ""
+
+#: dselect/install:51 dselect/install:83 dselect/install:87 dselect/install:94
+#: dselect/install:105 dselect/update:45
+msgid "Press enter to continue."
+msgstr ""
+
+#: dselect/install:91
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install:101
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+
+#: dselect/install:102
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+
+#: dselect/install:103
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+
+#: dselect/install:104
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+
+#: dselect/update:30
+msgid "Merging available information"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc:114
+msgid "Failed to create pipes"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc:141
+msgid "Failed to exec gzip "
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc:178 apt-inst/contrib/extracttar.cc:204
+msgid "Corrupted archive"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc:193
+msgid "Tar checksum failed, archive corrupted"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc:296
+#, c-format
+msgid "Unknown TAR header type %u, member %s"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc:70
+msgid "Invalid archive signature"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc:78
+msgid "Error reading archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc:90
+#, c-format
+msgid "Invalid archive member header %s"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc:102
+msgid "Invalid archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc:128
+msgid "Archive is too short"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc:132
+msgid "Failed to read the archive headers"
+msgstr ""
+
+#: apt-inst/filelist.cc:380
+msgid "DropNode called on still linked node"
+msgstr ""
+
+#: apt-inst/filelist.cc:412
+msgid "Failed to locate the hash element!"
+msgstr ""
+
+#: apt-inst/filelist.cc:459
+msgid "Failed to allocate diversion"
+msgstr ""
+
+#: apt-inst/filelist.cc:464
+msgid "Internal error in AddDiversion"
+msgstr ""
+
+#: apt-inst/filelist.cc:477
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr ""
+
+#: apt-inst/filelist.cc:506
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr ""
+
+#: apt-inst/filelist.cc:549
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr ""
+
+#: apt-inst/dirstream.cc:41 apt-inst/dirstream.cc:46 apt-inst/dirstream.cc:49
+#, fuzzy, c-format
+msgid "Failed to write file %s"
+msgstr "כשלון בפענוח %s"
+
+#: apt-inst/dirstream.cc:92 apt-inst/dirstream.cc:100
+#, c-format
+msgid "Failed to close file %s"
+msgstr ""
+
+#: apt-inst/extract.cc:93 apt-inst/extract.cc:164
+#, c-format
+msgid "The path %s is too long"
+msgstr ""
+
+#: apt-inst/extract.cc:124
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr ""
+
+#: apt-inst/extract.cc:134
+#, c-format
+msgid "The directory %s is diverted"
+msgstr ""
+
+#: apt-inst/extract.cc:144
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+
+#: apt-inst/extract.cc:154 apt-inst/extract.cc:297
+msgid "The diversion path is too long"
+msgstr ""
+
+#: apt-inst/extract.cc:240
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr ""
+
+#: apt-inst/extract.cc:280
+msgid "Failed to locate node in its hash bucket"
+msgstr ""
+
+#: apt-inst/extract.cc:284
+msgid "The path is too long"
+msgstr ""
+
+#: apt-inst/extract.cc:414
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr ""
+
+#: apt-inst/extract.cc:431
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr ""
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc:464 apt-pkg/contrib/configuration.cc:843
+#: apt-pkg/contrib/cdromutl.cc:157 apt-pkg/sourcelist.cc:166
+#: apt-pkg/sourcelist.cc:172 apt-pkg/sourcelist.cc:327 apt-pkg/acquire.cc:419
+#: apt-pkg/init.cc:90 apt-pkg/init.cc:98 apt-pkg/clean.cc:33
+#: apt-pkg/policy.cc:281 apt-pkg/policy.cc:287
+#, c-format
+msgid "Unable to read %s"
+msgstr ""
+
+#: apt-inst/extract.cc:491
+#, c-format
+msgid "Unable to stat %s"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:51 apt-inst/deb/dpkgdb.cc:57
+#, c-format
+msgid "Failed to remove %s"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:106 apt-inst/deb/dpkgdb.cc:108
+#, c-format
+msgid "Unable to create %s"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:114
+#, c-format
+msgid "Failed to stat %sinfo"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:119
+msgid "The info and temp directories need to be on the same filesystem"
+msgstr ""
+
+#. Build the status cache
+#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:763
+#: apt-pkg/pkgcachegen.cc:832 apt-pkg/pkgcachegen.cc:837
+#: apt-pkg/pkgcachegen.cc:961
+msgid "Reading package lists"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:176
+#, c-format
+msgid "Failed to change to the admin dir %sinfo"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:197 apt-inst/deb/dpkgdb.cc:351
+#: apt-inst/deb/dpkgdb.cc:444
+msgid "Internal error getting a package name"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:201 apt-inst/deb/dpkgdb.cc:382
+msgid "Reading file listing"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:212
+#, c-format
+msgid ""
+"Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+"then make it empty and immediately re-install the same version of the "
+"package!"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:225 apt-inst/deb/dpkgdb.cc:238
+#, c-format
+msgid "Failed reading the list file %sinfo/%s"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:262
+msgid "Internal error getting a node"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:305
+#, c-format
+msgid "Failed to open the diversions file %sdiversions"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:320
+msgid "The diversion file is corrupted"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:327 apt-inst/deb/dpkgdb.cc:332
+#: apt-inst/deb/dpkgdb.cc:337
+#, c-format
+msgid "Invalid line in the diversion file: %s"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:358
+msgid "Internal error adding a diversion"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:379
+msgid "The pkg cache must be initialized first"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:439
+#, c-format
+msgid "Failed to find a Package: header, offset %lu"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:461
+#, c-format
+msgid "Bad ConfFile section in the status file. Offset %lu"
+msgstr ""
+
+#: apt-inst/deb/dpkgdb.cc:466
+#, c-format
+msgid "Error parsing MD5. Offset %lu"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc:38 apt-inst/deb/debfile.cc:43
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc:50
+#, c-format
+msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc:110
+#, c-format
+msgid "Couldn't change to %s"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc:140
+msgid "Internal error, could not locate member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc:173
+msgid "Failed to locate a valid control file"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc:258
+msgid "Unparsable control file"
+msgstr ""
+
+#: methods/cdrom.cc:200
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr ""
+
+#: methods/cdrom.cc:209
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+
+#: methods/cdrom.cc:219
+msgid "Wrong CD-ROM"
+msgstr ""
+
+#: methods/cdrom.cc:245
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+
+#: methods/cdrom.cc:250
+#, fuzzy
+msgid "Disk not found."
+msgstr "(לא נמצא)"
+
+#: methods/cdrom.cc:258 methods/file.cc:79 methods/rsh.cc:264
+msgid "File not found"
+msgstr ""
+
+#: methods/copy.cc:43 methods/gzip.cc:141 methods/gzip.cc:150
+#: methods/rred.cc:234 methods/rred.cc:243
+msgid "Failed to stat"
+msgstr ""
+
+#: methods/copy.cc:80 methods/gzip.cc:147 methods/rred.cc:240
+msgid "Failed to set modification time"
+msgstr ""
+
+#: methods/file.cc:44
+msgid "Invalid URI, local URIS must not start with //"
+msgstr ""
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc:168
+msgid "Logging in"
+msgstr ""
+
+#: methods/ftp.cc:174
+msgid "Unable to determine the peer name"
+msgstr ""
+
+#: methods/ftp.cc:179
+msgid "Unable to determine the local name"
+msgstr ""
+
+#: methods/ftp.cc:210 methods/ftp.cc:238
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr ""
+
+#: methods/ftp.cc:216
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc:223
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc:243
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+
+#: methods/ftp.cc:271
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc:297
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc:335 methods/ftp.cc:446 methods/rsh.cc:183 methods/rsh.cc:226
+msgid "Connection timeout"
+msgstr ""
+
+#: methods/ftp.cc:341
+msgid "Server closed the connection"
+msgstr ""
+
+#: methods/ftp.cc:344 apt-pkg/contrib/fileutl.cc:543 methods/rsh.cc:190
+msgid "Read error"
+msgstr ""
+
+#: methods/ftp.cc:351 methods/rsh.cc:197
+msgid "A response overflowed the buffer."
+msgstr ""
+
+#: methods/ftp.cc:368 methods/ftp.cc:380
+msgid "Protocol corruption"
+msgstr ""
+
+#: methods/ftp.cc:452 apt-pkg/contrib/fileutl.cc:582 methods/rsh.cc:232
+msgid "Write error"
+msgstr ""
+
+#: methods/ftp.cc:693 methods/ftp.cc:699 methods/ftp.cc:735
+msgid "Could not create a socket"
+msgstr ""
+
+#: methods/ftp.cc:704
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+
+#: methods/ftp.cc:710
+msgid "Could not connect passive socket."
+msgstr ""
+
+#: methods/ftp.cc:728
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr ""
+
+#: methods/ftp.cc:742
+msgid "Could not bind a socket"
+msgstr ""
+
+#: methods/ftp.cc:746
+msgid "Could not listen on the socket"
+msgstr ""
+
+#: methods/ftp.cc:753
+msgid "Could not determine the socket's name"
+msgstr ""
+
+#: methods/ftp.cc:785
+msgid "Unable to send PORT command"
+msgstr ""
+
+#: methods/ftp.cc:795
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr ""
+
+#: methods/ftp.cc:804
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc:824
+msgid "Data socket connect timed out"
+msgstr ""
+
+#: methods/ftp.cc:831
+msgid "Unable to accept connection"
+msgstr ""
+
+#: methods/ftp.cc:870 methods/http.cc:999 methods/rsh.cc:303
+msgid "Problem hashing file"
+msgstr ""
+
+#: methods/ftp.cc:883
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr ""
+
+#: methods/ftp.cc:898 methods/rsh.cc:322
+msgid "Data socket timed out"
+msgstr ""
+
+#: methods/ftp.cc:928
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr ""
+
+#. Get the files information
+#: methods/ftp.cc:1005
+msgid "Query"
+msgstr ""
+
+#: methods/ftp.cc:1117
+msgid "Unable to invoke "
+msgstr ""
+
+#: methods/connect.cc:70
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr ""
+
+#: methods/connect.cc:81
+#, c-format
+msgid "[IP: %s %s]"
+msgstr ""
+
+#: methods/connect.cc:90
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr ""
+
+#: methods/connect.cc:96
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc:104
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+
+#: methods/connect.cc:119
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr ""
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc:147 methods/rsh.cc:425
+#, c-format
+msgid "Connecting to %s"
+msgstr ""
+
+#: methods/connect.cc:165 methods/connect.cc:184
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr ""
+
+#: methods/connect.cc:190
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr ""
+
+#: methods/connect.cc:193
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+
+#: methods/connect.cc:240
+#, fuzzy, c-format
+#| msgid "Unable to write to %s"
+msgid "Unable to connect to %s:%s:"
+msgstr "לא מצליח לכתוב ל-%s"
+
+#: methods/gpgv.cc:71
+#, c-format
+msgid "Couldn't access keyring: '%s'"
+msgstr ""
+
+#: methods/gpgv.cc:107
+msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+msgstr ""
+
+#: methods/gpgv.cc:223
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc:228
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc:232
+#, c-format
+msgid "Could not execute '%s' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc:237
+msgid "Unknown error executing apt-key"
+msgstr ""
+
+#: methods/gpgv.cc:271 methods/gpgv.cc:278
+#, fuzzy
+msgid "The following signatures were invalid:\n"
+msgstr "החבילות החדשות הבאות הולכות להיות מותקנות:"
+
+#: methods/gpgv.cc:285
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
+#: methods/gzip.cc:64
+#, c-format
+msgid "Couldn't open pipe for %s"
+msgstr ""
+
+#: methods/gzip.cc:109
+#, c-format
+msgid "Read error from %s process"
+msgstr ""
+
+#: methods/http.cc:385
+msgid "Waiting for headers"
+msgstr ""
+
+#: methods/http.cc:531
+#, c-format
+msgid "Got a single header line over %u chars"
+msgstr ""
+
+#: methods/http.cc:539
+msgid "Bad header line"
+msgstr ""
+
+#: methods/http.cc:558 methods/http.cc:565
+msgid "The HTTP server sent an invalid reply header"
+msgstr ""
+
+#: methods/http.cc:594
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+
+#: methods/http.cc:609
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr ""
+
+#: methods/http.cc:611
+msgid "This HTTP server has broken range support"
+msgstr ""
+
+#: methods/http.cc:635
+msgid "Unknown date format"
+msgstr ""
+
+#: methods/http.cc:790
+msgid "Select failed"
+msgstr ""
+
+#: methods/http.cc:795
+msgid "Connection timed out"
+msgstr ""
+
+#: methods/http.cc:818
+msgid "Error writing to output file"
+msgstr ""
+
+#: methods/http.cc:849
+msgid "Error writing to file"
+msgstr ""
+
+#: methods/http.cc:877
+msgid "Error writing to the file"
+msgstr ""
+
+#: methods/http.cc:891
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+
+#: methods/http.cc:893
+msgid "Error reading from server"
+msgstr ""
+
+#: methods/http.cc:984 apt-pkg/contrib/mmap.cc:215
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "כשלון בפענוח %s"
+
+#: methods/http.cc:1149
+msgid "Bad header data"
+msgstr ""
+
+#: methods/http.cc:1166 methods/http.cc:1221
+msgid "Connection failed"
+msgstr ""
+
+#: methods/http.cc:1313
+msgid "Internal error"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc:76
+msgid "Can't mmap an empty file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc:81 apt-pkg/contrib/mmap.cc:187
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc:234
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#. d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc:346
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc:353
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc:360
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. s means seconds
+#: apt-pkg/contrib/strutl.cc:365
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc:1040
+#, c-format
+msgid "Selection %s not found"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:458
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:516
+#, c-format
+msgid "Opening configuration file %s"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:684
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:703
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:720
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:760
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:767
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:771 apt-pkg/contrib/configuration.cc:776
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:780
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc:831
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc:153
+#, c-format
+msgid "%c%s... Error!"
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc:155
+#, c-format
+msgid "%c%s... Done"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:77
+#, c-format
+msgid "Command line option '%c' [from %s] is not known."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:103 apt-pkg/contrib/cmndline.cc:111
+#: apt-pkg/contrib/cmndline.cc:119
+#, c-format
+msgid "Command line option %s is not understood"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:124
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:163 apt-pkg/contrib/cmndline.cc:184
+#, c-format
+msgid "Option %s requires an argument."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:198 apt-pkg/contrib/cmndline.cc:204
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:234
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:265
+#, c-format
+msgid "Option '%s' is too long"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:298
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc:348
+#, c-format
+msgid "Invalid operation %s"
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc:52
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/contrib/cdromutl.cc:187
+#: apt-pkg/acquire.cc:425 apt-pkg/acquire.cc:450 apt-pkg/clean.cc:39
+#, c-format
+msgid "Unable to change to %s"
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc:195
+msgid "Failed to stat the cdrom"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:149
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:154
+#, c-format
+msgid "Could not open lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:172
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:176
+#, c-format
+msgid "Could not get lock %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:444
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:456
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:458
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:462
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:464
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:508
+#, c-format
+msgid "Could not open file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:564
+#, c-format
+msgid "read, still have %lu to read but none left"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:594
+#, c-format
+msgid "write, still have %lu to write but couldn't"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:669
+msgid "Problem closing the file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:675
+msgid "Problem unlinking the file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:686
+msgid "Problem syncing the file"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:133
+msgid "Empty package cache"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:139
+msgid "The package cache file is corrupted"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:144
+msgid "The package cache file is an incompatible version"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:149
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:154
+msgid "The package cache was built for a different architecture"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:225
+msgid "Depends"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:225
+msgid "PreDepends"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:225
+msgid "Suggests"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:226
+msgid "Recommends"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:226
+msgid "Conflicts"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:226
+msgid "Replaces"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:227
+msgid "Obsoletes"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:227
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:227
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:238
+msgid "important"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:238
+msgid "required"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:238
+msgid "standard"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:239
+msgid "optional"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc:239
+msgid "extra"
+msgstr ""
+
+#: apt-pkg/depcache.cc:123 apt-pkg/depcache.cc:152
+msgid "Building dependency tree"
+msgstr ""
+
+#: apt-pkg/depcache.cc:124
+msgid "Candidate versions"
+msgstr ""
+
+#: apt-pkg/depcache.cc:153
+msgid "Dependency generation"
+msgstr ""
+
+#: apt-pkg/depcache.cc:173 apt-pkg/depcache.cc:193 apt-pkg/depcache.cc:197
+msgid "Reading state information"
+msgstr ""
+
+#: apt-pkg/depcache.cc:223
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "כשלון בפתיחת %s"
+
+#: apt-pkg/depcache.cc:229
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "כשלון בפענוח %s"
+
+#: apt-pkg/tagfile.cc:102
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:90
+#, c-format
+msgid "Malformed line %lu in source list %s (URI)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:92
+#, c-format
+msgid "Malformed line %lu in source list %s (dist)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:95
+#, c-format
+msgid "Malformed line %lu in source list %s (URI parse)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:101
+#, c-format
+msgid "Malformed line %lu in source list %s (absolute dist)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:108
+#, c-format
+msgid "Malformed line %lu in source list %s (dist parse)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:206
+#, c-format
+msgid "Opening %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:223 apt-pkg/cdrom.cc:445
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:243
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:247
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc:255 apt-pkg/sourcelist.cc:258
+#, c-format
+msgid "Malformed line %u in source list %s (vendor id)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc:324 apt-pkg/packagemanager.cc:586
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc:440
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+
+#: apt-pkg/packagemanager.cc:478
+#, c-format
+msgid ""
+"Could not perform immediate configuration on already unpacked '%s'. Please "
+"see man 5 apt.conf under APT::Immediate-Configure for details."
+msgstr ""
+
+#: apt-pkg/pkgrecords.cc:32
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/algorithms.cc:248
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+
+#: apt-pkg/algorithms.cc:1138
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+
+#: apt-pkg/algorithms.cc:1140
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+
+#: apt-pkg/algorithms.cc:1415 apt-pkg/algorithms.cc:1417
+msgid ""
+"Some index files failed to download, they have been ignored, or old ones "
+"used instead."
+msgstr ""
+
+#: apt-pkg/acquire.cc:60
+#, c-format
+msgid "Lists directory %s is missing."
+msgstr ""
+
+#: apt-pkg/acquire.cc:64
+#, c-format
+msgid "Archive directory %s is missing."
+msgstr ""
+
+#. only show the ETA if it makes sense
+#. two days
+#: apt-pkg/acquire.cc:826
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc:828
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc:110
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc:159
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc:413
+#, c-format
+msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
+msgstr ""
+
+#: apt-pkg/init.cc:133
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/init.cc:149
+msgid "Unable to determine a suitable packaging system type"
+msgstr ""
+
+#: apt-pkg/clean.cc:56
+#, c-format
+msgid "Unable to stat %s."
+msgstr ""
+
+#: apt-pkg/srcrecords.cc:44
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+
+#: apt-pkg/cachefile.cc:71
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+
+#: apt-pkg/cachefile.cc:75
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+
+#: apt-pkg/policy.cc:347
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+
+#: apt-pkg/policy.cc:369
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr ""
+
+#: apt-pkg/policy.cc:377
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:74
+msgid "Cache has an incompatible versioning system"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:117
+#, c-format
+msgid "Error occurred while processing %s (NewPackage)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:132
+#, c-format
+msgid "Error occurred while processing %s (UsePackage1)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:166
+#, c-format
+msgid "Error occurred while processing %s (NewFileDesc1)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:191
+#, c-format
+msgid "Error occurred while processing %s (UsePackage2)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:195
+#, c-format
+msgid "Error occurred while processing %s (NewFileVer1)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:226
+#, c-format
+msgid "Error occurred while processing %s (NewVersion1)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:230
+#, c-format
+msgid "Error occurred while processing %s (UsePackage3)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:234
+#, c-format
+msgid "Error occurred while processing %s (NewVersion2)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:258
+#, c-format
+msgid "Error occurred while processing %s (NewFileDesc2)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:264
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:267
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:270
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:273
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:301
+#, c-format
+msgid "Error occurred while processing %s (FindPkg)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:314
+#, c-format
+msgid "Error occurred while processing %s (CollectFileProvides)"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:320
+#, c-format
+msgid "Package %s %s was not found while processing file dependencies"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:693
+#, c-format
+msgid "Couldn't stat source package list %s"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:778
+msgid "Collecting File Provides"
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc:907 apt-pkg/pkgcachegen.cc:914
+msgid "IO Error saving source cache"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:128
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:395
+msgid "MD5Sum mismatch"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:649 apt-pkg/acquire-item.cc:1411
+msgid "Hash Sum mismatch"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:1106
+msgid "There is no public key available for the following key IDs:\n"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:1216
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:1275
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:1316
+#, c-format
+msgid ""
+"The package index files are corrupted. No Filename: field for package %s."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc:1403
+msgid "Size mismatch"
+msgstr ""
+
+#: apt-pkg/indexrecords.cc:40
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "לא מצליח לפתוח את קובץ מסד הנתונים %s: %s"
+
+#: apt-pkg/indexrecords.cc:47
+#, c-format
+msgid "No sections in Release file %s"
+msgstr ""
+
+#: apt-pkg/indexrecords.cc:81
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/vendorlist.cc:66
+#, c-format
+msgid "Vendor block %s contains no fingerprint"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:525
+#, c-format
+msgid ""
+"Using CD-ROM mount point %s\n"
+"Mounting CD-ROM\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:534 apt-pkg/cdrom.cc:622
+msgid "Identifying... "
+msgstr ""
+
+#: apt-pkg/cdrom.cc:559
+#, c-format
+msgid "Stored label: %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:566 apt-pkg/cdrom.cc:836
+msgid "Unmounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:585
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:607
+msgid "Waiting for disc...\n"
+msgstr ""
+
+#. Mount the new CDROM
+#: apt-pkg/cdrom.cc:615
+msgid "Mounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:633
+msgid "Scanning disc for index files...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:673
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and %"
+"zu signatures\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:684
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:710
+#, c-format
+msgid "Found label '%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:739
+msgid "That is not a valid name, try again.\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:755
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:759
+msgid "Copying package lists..."
+msgstr ""
+
+#: apt-pkg/cdrom.cc:785
+msgid "Writing new source list\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:794
+msgid "Source list entries for this disc are:\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:835
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:837
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:840
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:843
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc:530
+#, c-format
+msgid "Skipping nonexistent file %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc:536
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc:542
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:49
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr "מותקן:"
+
+#: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:661
+#, c-format
+msgid "Configuring %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:668
+#, c-format
+msgid "Removing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:52
+#, c-format
+msgid "Completely removing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:53
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:558
+#, c-format
+msgid "Directory '%s' missing"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:654
+#, c-format
+msgid "Preparing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:655
+#, c-format
+msgid "Unpacking %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:660
+#, c-format
+msgid "Preparing to configure %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:662
+#, fuzzy, c-format
+msgid "Installed %s"
+msgstr "מותקן:"
+
+#: apt-pkg/deb/dpkgpm.cc:667
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:669
+#, c-format
+msgid "Removed %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:674
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:675
+#, c-format
+msgid "Completely removed %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:879
+msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:909
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc:70
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc:73
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "לא מצליח לנעול את ספרית ההורדה."
+
+#: apt-pkg/deb/debsystem.cc:82
+msgid ""
+"dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct "
+"the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc:100
+msgid "Not locked"
+msgstr ""
+
+#: methods/rred.cc:219
+msgid "Could not patch file"
+msgstr ""
+
+#: methods/rsh.cc:330
+msgid "Connection closed prematurely"
+msgstr ""
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "שגיאה בעיבוד ספריה %s"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "כשלון."
+
+#~ msgid "File date has changed %s"
+#~ msgstr "תאריך הקובץ השתנה %s"
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..b3924a5
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,4476 @@
+# Advanced Package Transfer - APT message translation catalog
+# Hungarian messages
+#
+# PASZTOR Gyorgy <pasztor@linux.gyakg.u-szeged.hu>, 2002.
+# Gabor Kelemen <kelemeng at gnome dot hu>, 2004, 2005, 2011, 2012, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2016-04-10 19:46+0200\n"
+"Last-Translator: Gabor Kelemen <kelemeng@ubuntu.com>\n"
+"Language-Team: Hungarian <gnome-hu-list@gnome.org>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Launchpad-Export-Date: 2016-04-10 19:31+0000\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Érvénytelen archívum-aláírás"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Hiba az archívumtag-fejléc olvasásakor"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Érvénytelen archívumtag-fejléc"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Az archívum túl rövid"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Nem sikerült olvasni az archívumfejléceket"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nem található egy beállított tömörítő ehhez: „%s”"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Hibás archívum"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar ellenőrzőösszeg nem egyezik, az archívum megsérült"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Ismeretlen a(z) %u TAR fejléctípus, %s tag"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Ez nem egy érvényes DEB archívum, hiányzik a(z) „%s” tag"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Belső hiba, %s tag nem található"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Értelmezhetetlen control fájl"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "A(z) %s fájl írása sikertelen"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "A(z) %s fájl bezárása sikertelen"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "A(z) %s útvonal túl hosszú"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "A(z) %s többszöri kicsomagolása"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "A(z) %s könyvtár eltérítve"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "A csomag megpróbál írni a(z) %s/%s eltérített célpontba"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Az eltérített útvonal túl hosszú"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s elérése sikertelen"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "„%s” átnevezése sikertelen erre: %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "A(z) %s könyvtár nem egy könyvtárral lesz helyettesítve"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Nem sikerült a node helyét megtalálni a hashtárolóban"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Az útvonal túl hosszú"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Csomagtalálat felülírása %s verziója nélkül"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "A(z) %s/%s fájl felülírja a(z) %s csomagban levőt"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s nem olvasható"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s nem érhető el"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "A DropNode hívása egy még mindig linkelt node-ra történt"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "A hash elem nem található!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Nem lehet eltérítést lefoglalni"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Belső hiba az AddDiversion hívásban"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Kísérlet eltérítés felülírására: %s -> %s és %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "A(z) %s -> %s eltérítés hozzáadásának duplázása"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Dupla %s/%s konfigurációs fájl"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Az ilyen tárolóból való frissítés nem végezhető el biztonságosan, így "
+"alapesetben ki van kapcsolva."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Az ilyen tárolóból való adatok nem hitelesíthetők, így használatuk veszélyes "
+"lehet."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Lásd az apt-secure(8) kézikönyvoldalt a tárolólétrehozással és felhasználói "
+"beállításokkal kapcsolatos részletekért."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "A(z) „%s” tároló már nincs aláírva."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "A(z) „%s” tárolónak nincs Release fájlja."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Ez általában nem engedélyezett, de az Acquire::"
+"AllowDowngradeToInsecureRepositories beállítás meg lett adva a "
+"felülbírálásához."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "A(z) „%s” tároló nincs aláírva."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "A(z) „%s” tárolónak nincs Release fájlja."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr ""
+"A beállított „%s” fájl beszerzésének kihagyása, mert a(z) „%s” tároló csak "
+"gyenge biztonsági információkat biztosít hozzá"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "readlink nem hajtható végre erre: %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "A Hash Sum nem megfelelő"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "sikertelen átnevezés, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "A méret nem megfelelő"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Érvénytelen fájlformátum"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Aláírási hiba"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"A digitálisan aláírt fájl nem érvényes, érkezett: „%s” (igényel a hálózat "
+"hitelesítést?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Hiba történt az aláírás ellenőrzése közben. A tároló nem frissült, és az "
+"előző indexfájl lesz használva. GPG hiba: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG hiba: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"A beállított „%s” fájl beszerzésének kihagyása, mert a(z) „%s” tároló nem "
+"támogatja a(z) „%s” architektúrát"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"A beállított „%s” fájl beszerzésének kihagyása, mert a(z) „%s” tároló nem "
+"támogatja a(z) „%s” architektúrát"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"A beállított „%s” fájl beszerzésének kihagyása, mert a(z) „%s” tároló nem "
+"támogatja a(z) „%s” architektúrát"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"A beállított „%s” fájl beszerzésének kihagyása, mert a(z) „%s” tároló csak "
+"gyenge biztonsági információkat biztosít hozzá"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"A Release fájl elavult ehhez: %s (érvénytelen ez óta: %s). A tároló "
+"frissítései nem kerülnek alkalmazásra."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"A Release fájl elavult ehhez: %s (érvénytelen ez óta: %s). A tároló "
+"frissítései nem kerülnek alkalmazásra."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Ütköző disztribúció: %s (a várt %s helyett %s érkezett)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Sikertelen letöltés: %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Egy fájl nem található a(z) %s csomaghoz. Ez azt jelentheti, hogy kézzel "
+"kell kijavítani a csomagot. (hiányzó arch. miatt)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Nem található forrás a(z) „%2$s” „%1$s” verziójának letöltéséhez"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Nem érhető el változásnapló ehhez: %s=%s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "A(z) %s metódusvezérlő nem található."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "A(z) „%s” csomag telepítve van?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "A(z) %s metódus nem indult el megfelelően"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Helyezze be a(z) %s címkéjű lemezt a(z) %s meghajtóba, és nyomja meg az "
+"Entert."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "A(z) %s listakönyvtár hiányzik."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "A(z) %s archívumkönyvtár hiányzik."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "%s könyvtár zárolása sikertelen"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr "Nincs „%s” felhasználó a rendszeren, a jogosultságok nem dobhatók el"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Can't drop privileges for downloading as file '%s' couldn't be accessed "
+#| "by user '%s'."
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Nem dobhatók el a jogosultságok a letöltéshez, mivel a(z) „%s” fájl nem "
+"érhető el a felhasználó („%s”) által."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "A(z) „%s” tisztítása nem támogatott"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "%li/%li fájl letöltése (%s marad)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "%li/%li fájl letöltése"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"A(z) %s csomagot újra kell telepíteni, de nem található hozzá archívum."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Hiba, a pkgProblemResolver::Resolve töréseket generált, ezt visszatartott "
+"csomagok okozhatják."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "A problémák nem javíthatók, sérült csomagokat fogott vissza."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"A csomaglisták vagy az állapotfájl nem dolgozhatók fel vagy nem nyithatók "
+"meg."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Próbálja futtatni az „apt-get update” parancsot ezen hibák javításához"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "A források listája olvashatatlan."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Regex fordítási hiba - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "„%s” kiadás nem található ehhez: „%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "„%s” verzió nem található ehhez: „%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "„%s” feladat nem található"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Nem található csomag a(z) „%s” reguláris kifejezéssel"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Nem található csomag a(z) „%s” glob kifejezéssel"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Ez a csomag nem található: %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "„%s” csomagból nem választható verzió, mert teljesen virtuális"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"„%s” csomag legújabb verziója nem választható ki, mert teljesen virtuális"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"„%s” csomag kiadásra jelölt verziója nem választható ki, mert nincs jelöltje"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"„%s” csomag telepített verziója nem választható ki, mert nincs telepítve"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"„%s” csomagból nem választható sem telepített, sem kiadásra jelölt verzió, "
+"mert egyikkel sem rendelkezik"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "A(z) %u. sor túl hosszú a(z) %s forráslistában."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "CD-ROM leválasztása...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "%s CD-ROM csatolási pont használata\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Várakozás a lemezre...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "CD-ROM csatolása...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Azonosítás... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Tárolt címke: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Indexfájlok keresése a lemezen...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"%zu csomagindex, %zu forrásindex, %zu fordításindex és %zu aláírás "
+"megtalálva\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Nem találhatók csomagfájlok, lehet hogy ez nem Debian lemez, vagy nem "
+"megfelelő az architektúra?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Talált címke: „%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "A név érvénytelen, próbálja újra.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"A lemez neve: \n"
+"„%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Csomaglisták másolása..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Új forráslista írása\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "A lemezhez tartozó forráslista-bejegyzések a következők:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nem sikerült ide váltani: %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s nem érhető el."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "%s csatolási pont nem érhető el"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Nem sikerült elérni a CD-ROM-ot."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"A(z) „%c” parancssori kapcsoló [a következőből: %s] értelmezhetetlen a többi "
+"kapcsolóval kombinálva."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"A(z) „%s” parancssori kapcsoló értelmezhetetlen a többi kapcsolóval "
+"kombinálva"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "%s parancssori kapcsoló nem logikai"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "%s kapcsolóhoz argumentum szükséges."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"%s kapcsoló: a konfigurációs elem megadásához szükséges egy =<érték> rész."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "%s kapcsoló egész, és nem „%s” típusú argumentumot követel meg"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Túl hosszú „%s” kapcsoló"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "%s jelentés nem értelmezhető, próbálja a true vagy false értékeket."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "%s érvénytelen művelet"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Ismeretlen típusrövidítés: „%c”"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Szintaktikai hiba %s: %u: A blokk név nélkül kezdődik."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Szintaktikai hiba %s: %u: rosszul formázott címke"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Szintaktikai hiba %s: %u: fölösleges szemét az érték után"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Szintaktikai hiba %s: %u: Csak legfelső szinten használhatók előírások"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Szintaktikai hiba %s: %u: Túl sok beágyazott include"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Szintaktikai hiba %s: %u: ugyaninnen include-olva"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Szintaktikai hiba %s:%u: „%s” nem támogatott előírás"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Szintaktikai hiba %s:%u: a törlési parancs egy beállítási fát vár "
+"argumentumként"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Szintaktikai hiba %s: %u: fölösleges szemét a fájl végén"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Hiba a(z) %s fájl törlésekor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Nem lesz zárolva a(z) „%s” csak olvasható zárolási fájl"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "%s zárolási fájl nem nyitható meg"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Nem lesz zárolva a(z) %s NFS-csatolású zárolási fájl"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Nem sikerült zárolni: %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "A fájlok listáját nem lehetett létrehozni, mert „%s” nem könyvtár"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+"„%s” figyelmen kívül hagyása a(z) „%s” könyvtárban, mert nem szabályos fájl"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"„%s” fájl figyelmen kívül hagyása a(z) „%s” könyvtárban, mert nincs "
+"fájlkiterjesztése"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"„%s” fájl figyelmen kívül hagyása a(z) „%s” könyvtárban, mert érvénytelen "
+"fájlkiterjesztése van"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Nem található a(z) %s, a várakozás után sem"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "%s alfolyamat szegmentálási hibát okozott."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "A(z) %s alfolyamat %u számú szignált kapott."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "%s alfolyamat hibakóddal tért vissza (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "%s alfolyamat váratlanul kilépett"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Olvasási hiba"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Írási hiba"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Hiba a(z) %s gzip fájl bezárásakor"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Túl korai fájlvég"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Nem sikerült az alfolyamat IPC-t létrehozni"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Nem sikerült elindítani a tömörítőt "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nem lehet megnyitni a(z) %s fájlt"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nem lehet megnyitni a(z) %d fájlleírót"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "olvasás, még kellene %llu, de már az összes elfogyott"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "írás, még kiírandó %llu, de ez nem lehetséges"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Hiba a(z) %s fájl bezárásakor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Hiba a(z) %s fájl átnevezésekor erre: %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Hiba a fájl szinkronizálásakor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Az mkstemp %s meghiúsult"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Nem lehet írni ebbe: %s"
+
+# FIXME
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Nem lehet mmap-olni egy üres fájlt"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Nem sikerült %llu bájtot mmap-olni"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Nem lehetett kettőzni a(z) %i fájlleírót"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Nem lehet bezárni az mmapot"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Nem lehet szinkronizálni az mmapot"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Nem sikerült %lu bájtot mmap-olni"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "A fájl csonkítása meghiúsult"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"A dinamikus MMap helye elfogyott. Növelje az APT::Cache-Start méretét. A "
+"jelenlegi érték: %lu. (lásd: man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Nem lehet növelni az MMap méretét, mert a(z) %lu bájt korlátot már elérte."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Nem lehet növelni az MMap méretét, mert a felhasználó letiltotta az "
+"automatikus emelést."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Hiba!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Kész"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lin %lió %lip %limp"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lió %lip %limp"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%lip %limp"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%limp"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "%s kiválasztás nem található"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+"%s cél ugyanazt a fájlt (%s) próbálja meg beszerezni, mint %s ebből a "
+"forrásból: %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "A(z) %s (%s) cél többször is be van állítva itt: %s és %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "A(z) %s Release fájl nem dolgozható fel"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "A(z) %s Release fájl nem tartalmaz szakaszokat"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Nincs Hash bejegyzés a(z) %s Release fájlban"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Nincs Hash bejegyzés a(z) %s Release fájlban, ami biztonsági szempontból "
+"elég erősnek tekinthető"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Érvénytelen „%s” bejegyzés a(z) %s Release fájlban"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"Ütköző értékek vannak megadva a(z) %s beállításhoz ezen forrásra "
+"vonatkozóan: %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+"Érvénytelen érték van megadva a(z) %s beállításhoz ezen forrásra "
+"vonatkozóan: %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Ütköző értékek vannak megadva a(z) %s beállításhoz ezen forrásra "
+"vonatkozóan: %s %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Nem lehet a(z) %s csomagfájlt feldolgozni (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Az adminisztrációs könyvtár (%s) nem zárolható, lehet hogy másik folyamat "
+"használja?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Az adminisztrációs könyvtár (%s) nem zárolható, rendszergazdaként próbálja?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"A dpkg megszakadt, saját kezűleg kell futtatnia a(z) „%s” parancsot a "
+"probléma megoldásához. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Az adminisztrációs könyvtár (%s) nem zárolható, lehet hogy másik folyamat "
+"használja?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Az adminisztrációs könyvtár (%s) nem zárolható, rendszergazdaként próbálja?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Nincs zárolva"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s előkészítése"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "%s konfigurálásának előkészítése"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "%s eltávolításának előkészítése"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "%s teljes eltávolításának előkészítése"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "„%s” eltűnése feljegyezve"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "A(z) %s telepítés utáni trigger futtatása"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s telepítve"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s konfigurálása"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "A(z) „%s” könyvtár hiányzik"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "A(z) „%s” fájl megnyitása sikertelen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s kicsomagolása"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s telepítése"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s eltávolítása"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s teljes eltávolítása"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s teljesen eltávolítva"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Nem lehet a naplót írni (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "A /dev/pts csatolva van?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "A művelet megszakadt, mielőtt befejeződhetett volna"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Nem került írásra apport jelentés, mivel a MaxReports már elérve"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "függőségi hibák - a csomag beállítatlan maradt"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Nem került kiírásra apport jelentés, mivel a hibaüzenet szerint ez a hiba "
+"egy korábbi hiba következménye."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Nem került kiírásra apport jelentés, mivel a hibaüzenet szerint megtelt a "
+"lemez"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Nem került kiírásra apport jelentés, mivel a hibaüzenet memóriaelfogyási "
+"hibát jelez"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Nem került kiírásra apport jelentés, mert a hibaüzenet a helyi rendszeren "
+"lévő hibát jelez"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Nem került kiírásra apport jelentés, mert a hibaüzenet dpkg I/O hibát jelez"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Függőségi fa építése"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Lehetséges verziók"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Függőséggenerálás"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Állapotinformációk olvasása"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "%s állapotfájl megnyitása sikertelen"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "%s átmeneti állapotfájl írása sikertelen"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "A helyzet elküldése a solvernek"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Kérés küldése a solvernek"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Felkészülés megoldás fogadására"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "A külső solver megfelelő hibaüzenet nélkül hibázott"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Külső solver végrehajtása"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Külső solver végrehajtása"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Kérés küldése a solvernek"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "A helyzet elküldése a solvernek"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "A külső solver megfelelő hibaüzenet nélkül hibázott"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i rekord kiírva.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i rekord kiírva, %i hiányzó fájllal.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i rekord kiírva %i eltérő fájllal\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "%i rekord kiírva %i hiányzó és %i eltérő fájllal\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "%s hitelesítési rekordja nem található"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "%s ellenőrzőösszege nem megfelelő"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "A(z) „%s” csomagrendszer nem támogatott"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "A megfelelő csomagrendszertípus nem határozható meg"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Haladás: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "A dpkg futtatása"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Nem lehetett a(z) „%s” közvetlen beállítását végrehajtani. A részletekért "
+"lásd a man 5 apt.conf oldalt az APT::Immediate-Configure címszó alatt. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "A(z) „%s” beállítása sikertelen"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Ez a telepítési lépés átmenetileg megköveteli a(z) %s alapvető csomag "
+"eltávolítását, ami ütközési/előfüggőségi hurkot okoz. Ez gyakran rossz, de "
+"ha tényleg ezt akarja tenni, aktiválja az APT::Force-LoopBreak opciót."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Üres csomaggyorsítótár"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "A csomaggyorsítótár fájl megsérült"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "A csomaggyorsítótár-fájl inkompatibilis verziójú"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Ez az APT nem támogatja a(z) „%s” verziórendszert"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "A csomaggyorsítótár más architektúrákhoz készült: %s és %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "A csomaggyorsítótár-fájl sérült, hibás a hash-e"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Függ ettől"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Függ ettől (előfüggés)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Javasolja"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Ütközik"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Ajánlja"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Kicseréli"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Töri"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Bővíti"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Elavulttá teszi"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "fontos"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "szükséges"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "szabványos"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcionális"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "A gyorsítótárnak inkompatibilis verziórendszere van"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Hiba történt a(z) %s feldolgozása során (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Az APT által kezelhető csomagnevek száma túllépve."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Az APT által kezelhető csomagverziók száma túllépve."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Az APT által kezelhető csomagleírások száma túllépve."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Az APT által kezelhető függőségek száma túllépve."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Csomaglisták olvasása"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IO hiba a forrás-gyorsítótár mentésekor"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "A(z) „%s” indexfájltípus nem támogatott"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"A(z) „%s” érték érvénytelen az APT::Default-Release beállításhoz, mert nincs "
+"ilyen kiadás a forrásokban"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Érvénytelen rekord a(z) %s beállításfájlban, nincs Package fejléc"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "A(z) %s rögzítéstípus nem értelmezhető"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: A(z) %s érték kívül esik az érvényes rögzítési prioritások tartományán "
+"(%d – %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Nincs prioritás (vagy nulla) megadva a rögzítéshez"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "%u. bejegyzés rosszul formált a(z) %s %s fájlban (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "A(z) %u. sor hibás a(z) %s forráslistában (típus)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "„%1$s” típus nem ismert a(z) %3$s forráslista %2$u. sorában"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "A(z) %u. utasítás hibás a(z) %s forráslistában (típus)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "„%1$s” típus nem ismert a(z) %3$s forráslista %2$u. utasításában"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Nem támogatott %s fájlt adott meg a parancssorban"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Néhány „source” URI-t el kell helyezni a sources.list fájlban"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "%s nem alakítható egésszé: kívül esik a tartományon"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Néhány indexfájlt nem sikerült letölteni. Figyelmen kívül lettek hagyva, "
+"vagy régebbiek lettek felhasználva."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Frissítés kiszámítása"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Találat:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Letöltés:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Mellőz:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Hiba:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Letöltve %sB %s alatt (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Folyamatban]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Helyezze be a(z)\n"
+" „%s”\n"
+"címkéjű lemezt a(z) %s meghajtóba, és nyomja meg az Entert\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Függőségek javítása..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " sikertelen."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Nem lehet javítani a függőségeket"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Nem lehet minimalizálni a frissítendő csomagok mennyiségét"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Kész"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Próbálja futtatni az „apt --fix-broken install” parancsot ezek javításához."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Teljesítetlen függőségek. Próbálja kiadni az „apt --fix-broken install” "
+"parancsot csomagok nélkül (vagy telepítse a függőségeket is!)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Rendezés"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Megjegyzés: „%s” kijelölése „%s” feladathoz\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Megjegyzés: „%s” kijelölése „%s” globhoz\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Megjegyzés: „%s” kijelölése „%s” regexhez\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "%s egy virtuális csomag, melyet az alábbi csomagok biztosítanak:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Telepítve]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Nem jelölt verzió]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Egyet név szerint ki kell jelölni a telepítésre."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"%s csomag nem elérhető, de egy másik hivatkozik rá.\n"
+"A kért csomag hiányzik, elavult vagy csak más forrásból érhető el\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "De az alábbi csomagok helyettesítik:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "„%s” csomagnak nincs telepítésre jelölt verziója"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "A virtuális csomagokat, mint a(z) „%s” nem lehet eltávolítani\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"A(z) „%s” csomag nincs telepítve, így nem lett törölve. Erre gondolt: „%s”?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "A(z) „%s” csomag nincs telepítve, így nem lett törölve\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Megjegyzés: „%s” kijelölése „%s” helyett\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Legtöbbet használt parancsok:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Az elérhető parancsokkal kapcsolatban további információkért lásd: %s."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"A konfigurációs beállítások és a szintaxis az apt.conf(5) fájlban "
+"találhatók.\n"
+"A források beállításával kapcsolatos információkat a sources.list(5) "
+"tartalmazza.\n"
+"A csomag- és verzióválasztások az apt_preferences(5) használatával adhatók "
+"meg.\n"
+"A biztonsági adatok az apt-secure(8)-ban vannak.\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Ez az APT a SzuperTehén Hatalmával rendelkezik."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Ez az APT segéd a Szuper Meep Hatalmával rendelkezik."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr "a --force-yes elavult, használja a --allow kezdetű kapcsolók egyikét."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Nem találhatók csomagok"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "FIGYELMEZTETÉS: Az alábbi csomagok nem hitelesíthetők!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "A hitelesítési figyelmeztetés felülbírálva.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Néhány csomag nem hitelesíthető"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Valóban ellenőrzés nélkül telepíti a csomagokat?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Hitelesítetlen csomagok vannak, és a -y kapcsolót használta\n"
+"a --allow-unauthenticated nélkül."
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Nem határozható meg a szabad hely mennyisége itt: %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Nincs elég szabad hely itt: %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Nem lehet zárolni a letöltési könyvtárat"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Néhány csomagot nem lehetett telepíteni. Ez azt jelentheti, hogy\n"
+"egy lehetetlen állapotot kért, vagy ha az unstable disztribúciót\n"
+"használja, akkor néhány igényelt csomag még nem készült el vagy ki\n"
+"lett mozdítva az Incoming-ból."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Az alábbi információk segíthetnek megoldani a problémát:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Törött csomagok"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Nem lehet letölteni néhány archívumot. Próbálja futtatni az „apt-get update” "
+"parancsot, vagy használja a --fix-missing kapcsolót."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Belső hiba, az InstallPackages törött csomagokkal lett meghívva!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Csomagokat kellene eltávolítani, de az eltávolítás nem engedélyezett."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Alapvető csomagok lettek eltávolítva, és a -y kapcsolót használta\n"
+"a --allow-remove-essential nélkül."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Vissza lettek fejlesztve csomagok, és a -y kapcsolót használta\n"
+"a --allow-downgrades nélkül."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Visszatartott csomagok módosultak, és a -y kapcsolót használta\n"
+"a --allow-change-held-packages nélkül."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Belső hiba, a rendezés nem fejeződött be"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "A méretek nem egyeznek, írjon az apt@packages.debian.org címre"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Letöltendő adatmennyiség: %sB/%sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Letöltendő adatmennyiség: %sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "A művelet után %sB lemezterület kerül felhasználásra.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "A művelet után %sB lemezterület szabadul fel.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "A „Trivial Only” meg van adva, de ez nem egy triviális művelet."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Igen, tedd amit mondok!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Ártalmasnak tűnő műveletet készül végrehajtani.\n"
+"A folytatáshoz írja be ezt a mondatot: „%s”\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Megszakítva."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Folytatni akarja?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Néhány fájlt nem sikerült letölteni"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "A letöltés befejeződött a „csak letöltés” módban"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "A --fix-missing és az adathordozó-csere jelenleg nem támogatott"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Nem lehet javítani a hiányzó csomagokat."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Telepítés megszakítása."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"A következő csomag eltűnt a rendszerből, mivel\n"
+"az összes fájlt más csomagok fölülírták:"
+msgstr[1] ""
+"A következő csomagok eltűntek a rendszerből, mivel\n"
+"az összes fájlt más csomagok fölülírták:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Megjegyzés: ezt a dpkg automatikusan és szándékosan hajtja végre."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Nem kellene semmit törölni, az AutoRemover nem indítható"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Úgy tűnik, az AutoRemover hibát okozott, ez nem történhetne meg.\n"
+"Küldjön hibajelentést az apt csomaghoz."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Belső hiba, az AutoRemover sérült"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"A következő csomag automatikusan lett telepítve, és már nincs rá szükség:"
+msgstr[1] ""
+"A következő csomagok automatikusan lettek telepítve, és már nincs rájuk "
+"szükség:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu csomag automatikusan lett telepítve, és már nincs rá szükség.\n"
+msgstr[1] ""
+"%lu csomag automatikusan lett telepítve, és már nincs rájuk szükség.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Ezt az „%s” paranccsal törölheti."
+msgstr[1] "Ezeket az „%s” paranccsal törölheti."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "A következő további csomagok lesznek telepítve:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Javasolt csomagok:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Ajánlott csomagok:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "%s kihagyása, ez már telepítve van, és a frissítés nincs beállítva.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "„%s” kihagyása, nincs telepítve, és csak frissítések lettek kérve.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "%s újratelepítése nem lehetséges, mert nem lehet letölteni.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s már a legújabb verzió (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s kézi telepítésűre állítva.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "„%s” (%s) verzió lett kijelölve ehhez: „%s”\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "„%s” (%s) verzió lett kijelölve ehhez: „%s”, a(z) „%s” miatt\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Felsorolás"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+"%i további verzió van. A megjelenítéséhez használja a „-a” kapcsolót"
+msgstr[1] ""
+"%i további verzió van. A megjelenítésükhöz használja a „-a” kapcsolót"
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"NE FELEDJE: Ez csak szimuláció!\n"
+" Az %s rendszergazdai jogokat igényel a tényleges végrehajtáshoz.\n"
+" Ne feledje, hogy a zárolás is ki van kapcsolva,\n"
+" így ne számítson a jelenlegi helyzet valósságára!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[telepítve, frissíthető erre: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[telepítve, helyi]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[telepítve, auto-eltávolítható]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[telepítve, automatikus]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[telepítve]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[frissíthető erről: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[megmaradt konfig]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "de %s van telepítve"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "de csak %s telepíthető"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "de az nem telepíthető"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "de az egy virtuális csomag"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "de az nincs telepítésre megjelölve"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "de az nincs telepítve"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " vagy"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Az alábbi csomagoknak teljesítetlen függőségei vannak:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Az alábbi ÚJ csomagok lesznek telepítve:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Az alábbi csomagok el lesznek TÁVOLÍTVA:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Az alábbi csomagok vissza lesznek tartva:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Az alábbi csomagok frissítve lesznek:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Az alábbi csomagok VISSZAFEJLESZTÉSRE kerülnek:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "A következő visszatartott csomagok cseréje:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (%s miatt)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"FIGYELMEZTETÉS: Az alábbi alapvető csomagok el lesznek távolítva.\n"
+"NE tegye ezt, hacsak nem tudja pontosan, mit csinál!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu frissített, %lu újonnan telepített, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu újratelepítendő, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu visszafejlesztendő, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu eltávolítandó és %lu nem frissített.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu nincs teljesen telepítve/eltávolítva.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[I/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[i/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "I"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Legalább egy keresési mintát meg kell adnia"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Keresés a teljes szövegben"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"%i további rekord van. A megjelenítéséhez használja a „-a” kapcsolót"
+msgstr[1] ""
+"%i további rekord van. A megjelenítésükhöz használja a „-a” kapcsolót"
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "nem valódi csomag (virtuális)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Csomagfájlok:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"A gyorsítótár nincs szinkronban, nem lehet kereszthivatkozni a csomagfájlra"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Rögzített csomagok:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s, %d prioritással\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Telepítve: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Jelölt: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(nincs)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Verziótáblázat:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Nem található csomag a(z) „%s” architektúrához"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Nem található „%s” csomag „%s” verzióval"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Nem található „%s” csomag „%s” kiadással"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "„%s” kiválasztása forráscsomagként „%s” helyett\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "A(z) „%2$s” csomag „%1$s” verziója nem érhető el"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"Legalább egy csomagot meg kell adni, amelynek a forrását le kell tölteni"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Nem található forráscsomag ehhez: %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"MEGJEGYZÉS: a(z) „%s” csomagolása a(z) „%s” verziókövető rendszerben van "
+"karbantartva:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Használja a következő parancsot:\n"
+"%s\n"
+"a csomag legújabb (esetleg kiadatlan) frissítéseinek letöltéséhez.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "A már letöltött „%s” fájl kihagyása\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Letöltendő forrásadat-mennyiség: %sB/%sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Letöltendő forrásadat-mennyiség: %sB.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Forrás letöltése: %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Nem sikerült néhány archívumot letölteni."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Egy már kibontott forrás kibontásának kihagyása itt: %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "„%s” kibontási parancs nem sikerült.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Ellenőrizze, hogy a „dpkg-dev” csomag telepítve van-e.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "„%s” elkészítési parancs nem sikerült.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Nem lehet %s fordítási függőségeinek információit letölteni"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "Nincs fordítási függősége a következőnek: %s.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Nem érhetők el architektúrainformációk ehhez: %s. A beállításokkal "
+"kapcsolatban lásd az apt.conf(5) APT::Architectures részét."
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Legalább egy csomagot adjon meg, amelynek fordítási függőségeit ellenőrizni "
+"kell"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+"Megjegyzés: %s könyvtár használata a fordítási függőségek lekéréséhez\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Megjegyzés: %s fájl használata a fordítási függőségek lekéréséhez\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Nem sikerült az építési függőségeket feldolgozni"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "%s feldolgozása sikertelen. Újra szerkeszti? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "A(z) „%s” fájl megváltozott, adja ki az „apt-get update” parancsot.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "%s csomag %s verziójának teljesítetlen függősége van:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Az update parancsnak nincsenek argumentumai"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i csomag frissíthető. A megjelenítéséhez futtassa az „apt list --"
+"upgradable” parancsot.\n"
+msgstr[1] ""
+"%i csomag frissíthető. A megjelenítésükhöz futtassa az „apt list --"
+"upgradable” parancsot.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Minden csomag naprakész."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "Az %s parancsnak nincsenek argumentumai"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Csomagnevek összesen : "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Csomagstruktúrák összesen: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normális csomagok: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Teljesen virtuális csomagok: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Egyedi virtuális csomagok: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Vegyes virtuális csomagok: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Hiányzik: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Különböző verziók összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Összes különböző leírás: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Függőségek összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Verzió/Fájl kapcsolatok összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Leírás/Fájl kapcsolatok összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "„Biztosítja” kapcsolatok összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Minták összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Slack terület összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Nyilvántartott terület összesen: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Ez a parancs elavult. Használja helyette az „apt-mark showauto”-t."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Használat: apt-cache [kapcsolók] parancs\n"
+" apt-cache [kapcsolók] show csom1 [csom2 ...]\n"
+"\n"
+"Az apt-cache telepített és telepíthető csomagokról kérdezi le és jeleníti\n"
+"meg az elérhető információkat. Kizárólag a helyi gyorsítótárba az\n"
+"apt-get (vagy hasonló) update parancsával beszerzett adatokon dolgozik.\n"
+"A megjelenő információk így elavultak lehetnek, ha az utolsó frissítés\n"
+"túl régen volt, cserébe az apt-cache a beállított források elérhetőségétől\n"
+"függetlenül működik, például kapcsolat nélküli módban.\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Megjeleníti a forrásrekordokat"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "A csomaglistában keres reguláris kifejezéseket"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Nyers függőségi információt mutat a csomagról"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Fordított függőségi információkat jelenít meg a csomagról"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Megjeleníti a csomag leírását"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Kilistázza az összes csomag nevét"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Megjeleníti a policy beállításokat"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Adja meg a lemez nevét, mint például „Debian 5.0.3 1. lemez”"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Helyezzen be egy lemezt a meghajtóba, és nyomja meg az Entert"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "„%s” csatolása a(z) „%s” könyvtárba meghiúsult"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Nem ismerhető fel automatikusan, vagy nem található CD-ROM az "
+"alapértelmezett csatolási pont használatával.\n"
+"Megpróbálhatja a --cdrom kapcsolóval beállítani a CD-ROM csatolási pontját.\n"
+"A CD-ROM automatikus felismerésével és csatolási pontjával kapcsolatos "
+"információkért lásd a „man apt-cdrom” parancsot."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Ismételje meg a folyamatot készlete többi CD-jével is."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Használat: apt-cdrom [kapcsolók] parancs\n"
+"\n"
+"Az apt-cdrom használatával CD-ROM-ok, USB pendrive-ok és más cserélhető\n"
+"adathordozók vehetők fel csomagforrásként az APT-hoz. A csatolási pont és "
+"az\n"
+"eszközinformációk az apt.conf(5), udev(7) és fstab(5) használatával állnak "
+"elő.\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Az argumentumok nincsenek párban"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Használat: apt-config [kapcsolók] parancs\n"
+"\n"
+"Az apt-config egy felület az APT eszközök által használt konfigurációs\n"
+"beállításokhoz, főleg hibakereséshez és parancsfájlokhoz tervezve.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "konfigurációs értékek lekérése parancsértelmező-kiértékelés útján"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "az aktív konfigurációs beállítás megjelenítése"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Használat: apt-extracttemplates fájl1 [fájl2 ...]\n"
+"\n"
+"Az apt-extracttemplates konfigurációs- és sabloninformációk debian-\n"
+"csomagokból való kinyerésére használható. Elsősorban a debconf(1)\n"
+"használja konfigurációs kérdések feltételéhez a csomagok telepítése előtt.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Nem lehet megállapítani a debconf verziót. A debconf telepítve van?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Az alábbi csomag nem található: %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s megjelölve automatikusan telepítettként.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Ez a parancs elavult. Használja helyette az „apt-mark auto” és az „apt-mark "
+"auto” parancsokat."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Belső hiba, a problémamegoldó hibát okozott"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Támogatott modulok:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Használat: apt-get [kapcsolók] parancs\n"
+" apt-get [kapcsolók] install|remove csom1 [csom2 ...]\n"
+" apt-get [kapcsolók] source csom1 [csom2 ...]\n"
+"\n"
+"Az apt-get egy parancssori felület csomagok és információk letöltésére\n"
+"hitelesített forrásokból, valamint csomagok telepítésére,\n"
+"frissítésére és eltávolítására a függőségeikkel együtt.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Frissíti a csomaglistákat"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Frissítés végrehajtása"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Új csomagok telepítése (csomag a libc6 és nem a libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Új csomagok telepítése (csomag a libc6 és nem a libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Csomagok eltávolítása"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Eltávolítja és teljesen törli a csomagokat"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Automatikusan eltávolítja a nem használt csomagokat"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Disztribúciófrissítés, lásd apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Követi a dselect kijelöléseit"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Forráscsomagok építési függőségét konfigurálja"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Törli a letöltött archívumfájlokat"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Törli a régi letöltött archívumfájlokat"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Ellenőrzi, hogy nincsenek-e törött függőségek"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Forrásarchívumok letöltése"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Bináris csomag letöltése a jelenlegi mappába"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Adott csomag változási naplójának letöltése és megjelenítése"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Szükséges egy URL argumentum"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Legalább egy pár URL-t/fájlnevet meg kell adni"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "A letöltés meghiúsult"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "A GetSrvRec hívás meghiúsult ehhez: %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Használat: apt-helper [kapcsolók] parancs\n"
+" apt-helper [kapcsolók] cat-file fájl ...\n"
+" apt-helper [kapcsolók] download-file uri célútvonal\n"
+"\n"
+"Az apt-helper különböző parancsokat csomagol össze parancsfájlok számára,\n"
+"hogy azok például ugyanazokat proxybeállításokat vagy beszerzési\n"
+"rendszert használhassák, mint az APT.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "a megadott URI letöltése a célútvonalra"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "SRV rekord kikeresése (például: _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "fájlok összefűzése, automatikus kibontással"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "proxyfelismerés az apt-conf használatával"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Használat: apt-internal-solver\n"
+"\n"
+"Az apt-internal-solver felülettel az aktuális belső feloldó külső\n"
+"feloldóként használható az APT családhoz hibakeresési vagy hasonló céllal\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Használat: apt-internal-solver\n"
+"\n"
+"Az apt-internal-solver felülettel az aktuális belső feloldó külső\n"
+"feloldóként használható az APT családhoz hibakeresési vagy hasonló céllal\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s nem jelölhető meg, mivel nincs telepítve.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s már be van állítva kézi telepítésűre.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s már meg van jelölve automatikusan telepítettként.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Az alábbi ÚJ csomagok lesznek telepítve:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s már be van állítva visszatartásra.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s eddig sem volt visszatartva.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "A dpkg futtatása sikertelen. Van root jogosultsága?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s beállítva visszatartásra.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Visszatartás törölve ezen: %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "%s kijelölve teljes törlésre.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "%s kijelölve eltávolításra.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "%s kijelölve telepítésre.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Használat: apt-mark [kapcsolók] {auto|manual} csom1 [csom2 ...]\n"
+"\n"
+"Az apt-mark egy egyszerű parancssori felület csomagok megjelölésére\n"
+"kézileg vagy automatikusan telepítettként. Használható a csomagok dpkg(1)\n"
+"kijelölési állapotainak manipulálására is, valamint adott kijelöléssel\n"
+"rendelkező vagy nem rendelkező összes csomag kiíratására is.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Az adott csomagok megjelölése automatikusan telepítettként"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Az adott csomagok megjelölése kézzel telepítettként"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Az adott csomagok megjelölése automatikusan telepítettként"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Csomag megjelölése visszatartottként"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Csomag visszatartottként megjelölésének törlése"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Automatikusan telepített csomagok listájának kiírása"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Kézileg telepített csomagok listájának kiírása"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Visszatartott csomagok listájának megjelölése"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Ismeretlen csomagbejegyzés!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Használat: apt-sortpkgs [kapcsolók] fájl1 [fájl2 ...]\n"
+"\n"
+"Az apt-sortpkgs csomaginformációs fájlok rendezésére szolgál.\n"
+"Alapesetben bináris csomagok információi alapján rendez, de a -s "
+"kapcsolóval\n"
+"át lehet váltani forrás csomagok szerinti sorrendre.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Használat: apt [kapcsolók] parancs\n"
+"\n"
+"Az apt egy parancssori csomagkezelő, amely parancsokat biztosít csomagok\n"
+"keresésére és kezelésére, illetve információk lekérésére.\n"
+"Ugyanazokat a funkciókat biztosítja, mint a specializált APT eszközök,\n"
+"például az apt-get és az apt-cache, de az interaktív használathoz\n"
+"megfelelőbb beállításokat tesz alapértelmezésben elérhetővé.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "csomagok kiírása csomagnevek alapján"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "keresés csomagleírásokban"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "csomagrészletek megjelenítése"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "csomagok telepítése"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "csomagok telepítése"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "csomagok eltávolítása"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "elérhető csomagok listájának frissítése"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "a rendszer frissítése csomagok telepítésével/frissítésével"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+"a rendszer frissítése csomagok eltávolításával/telepítésével/frissítésével"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "a forrásinformációs fájl szerkesztése"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Hibás alapértelmezett beállítás!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "A folytatáshoz nyomja meg az Entert."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Törli a korábban letöltött .deb fájlokat?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Hiba történt a kicsomagolás során. A telepített csomagok"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "beállításra kerülnek. Ez többszörös"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"vagy hiányzó függőségek miatti hibákat okozhat. Ez így van rendben, csak az "
+"ezen üzenet"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "előtti hibák fontosak. Javítsa azokat, és futtassa az [I]nstallt újra"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Elérhető információk egyesítése"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "A csomagkiterjesztések listája túl hosszú"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Hiba a(z) %s könyvtár feldolgozásakor"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "A forráskiterjesztések listája túl hosszú"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Hiba a tartalomfájl fejlécének írásakor"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Hiba %s tartalmának feldolgozásakor"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Használat: apt-ftparchive [kapcsolók] parancs\n"
+"Parancsok: packages binarypath [felülbírálófájl [útvonalelőtag]]\n"
+" sources srcpath [felülbírálófájl [útvonalelőtag]]\n"
+" contents útvonal\n"
+" release útvonal\n"
+" generate konfigfájl [csoportok]\n"
+" clean konfigfájl\n"
+"\n"
+"Az apt-ftparchive indexfájlokat generál a Debian archívumokhoz. A generálás\n"
+"sok stílusát támogatja, a teljesen automatizálttól kezdve a\n"
+"dpkg-scanpackages és a dpkg-scansources funkcionális helyettesítéséig.\n"
+"\n"
+"Az apt-ftparchive Package fájlokat generál a .deb-ek fájából. A Package\n"
+"fájl minden vezérlő mezőt tartalmaz minden egyes csomagról úgy az MD5\n"
+"hasht mint a fájlméretet. Az override (felülbíráló) fájl támogatott a\n"
+"Prioritás és Szekció mezők értékének kényszerítésére.\n"
+"\n"
+"Hasonlóképpen az apt-ftparchive Sources fájlokat generál .dsc-k fájából.\n"
+"A --source-override opció használható forrás-felülbíráló fájlok megadására\n"
+"\n"
+"A „packages” és „sources” parancsokat a fa gyökeréből kell futtatni.\n"
+"A BinaryPath-nak a rekurzív keresés kiindulópontjára kell mutatnia, és\n"
+"a felülbírálófájlnak a felülbíráló jelzőket kell tartalmaznia. Az "
+"útvonalelőtag\n"
+"hozzáadódik a fájlnév mezőkhöz, ha meg van adva. Felhasználására egy példa "
+"a\n"
+"Debian archívumból:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Kapcsolók:\n"
+" -h Ez a súgó szöveg\n"
+" --md5 MD5 generálás vezérlése\n"
+" -s=? Forrás-felülbíráló fájl\n"
+" -q Szűkszavú mód\n"
+" -d=? Opcionális gyorsítótár-adatbázis kiválasztása\n"
+" --no-delink „delink” hibakereső mód bekapcsolása\n"
+" --contents Tartalom fájl generálásának ellenőrzése\n"
+" -c=? Ezt a konfigurációs fájlt olvassa be\n"
+" -o=? Beállít egy tetszőleges konfigurációs opciót"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nincs illeszkedő kiválasztás"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Néhány fájl hiányzik a(z) „%s” csomagfájlcsoportból"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "A DB megsérült, a fájl átnevezve %s.old-ra"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "A DB régi, kísérlet a következő frissítésére: %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Az adatbázis-formátum érvénytelen. Ha az apt egy korábbi verziójáról "
+"frissített, akkor távolítsa el, és hozza létre újra az adatbázist."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "A(z) %s DB fájlt nem lehet megnyitni: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Nem sikerült olvasni a .dsc fájlt"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Az archívumnak nincs vezérlő rekordja"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Nem sikerült egy mutatóhoz jutni"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Nem sikerült memóriát lefoglalni"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "„%s” tömörítési algoritmus ismeretlen"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "%s tömörített kimenetnek egy tömörítő készletre van szüksége"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Nem sikerült IPC-adatcsatornát létrehozni az alfolyamathoz"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Nem sikerült forkolni"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Gyermekfolyamat tömörítése"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Belső hiba, %s létrehozása sikertelen"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "IO az alfolyamathoz/fájlhoz nem sikerült"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Olvasási hiba az MD5 kiszámításakor"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s megnyitása sikertelen"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "%s felülbírálás deformált a(z) %llu. sorában (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Nem lehet a(z) %s felülbírálófájlt olvasni"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "%s felülbírálás deformált a(z) %llu. sorában #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "%s felülbírálás deformált a(z) %llu. sorában #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "%s felülbírálás deformált a(z) %llu. sorában #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "F: nem lehet a(z) %s könyvtárat olvasni\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "F: %s nem érhető el\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "H: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "F: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "H: Hibás a fájl "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Nem sikerült feloldani ezt: %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Fabejárás nem sikerült"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s megnyitása sikertelen"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** %s linkelése sikertelen ehhez: %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " a DeLink korlátja (%sB) elérve.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Az archívumnak nem volt csomag mezője"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s nem rendelkezik felülbíráló bejegyzéssel\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s karbantartója %s, nem %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s nem rendelkezik forrás-felülbíráló bejegyzéssel\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s nem rendelkezik bináris-felülbíráló bejegyzéssel sem\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Várakozás a fejlécekre"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "A HTTP-kiszolgáló érvénytelen válaszfejlécet küldött"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Rossz fejlécsor"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "A HTTP-kiszolgáló érvénytelen Content-Length fejlécet küldött"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "A HTTP-kiszolgáló érvénytelen Content-Range fejlécet küldött"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "A HTTP-kiszolgáló tartománytámogatása sérült"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Ismeretlen dátumformátum"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Rossz fejlécadatok"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Sikertelen kapcsolódás"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"%s automatikusan letiltva, mert hibás válasz érkezett a kiszolgálótól/"
+"proxytól. (lásd: man 5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Belső hiba"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "%s CD-ROM adatbázis nem olvasható"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Használja az apt-cdrom parancsot a CD felismertetésére. Az apt-get update "
+"nem használható új CD-k hozzáadására."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Hibás CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Nem lehet leválasztani az itt lévő CD-ROM-ot: %s, még használatban lehet."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "A lemez nem található."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "A fájl nem található"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Csatlakozás: %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Csatlakozás: %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Foglalat létrehozása sikertelen ehhez: %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Kapcsolat létrehozása sikertelen ehhez: %s: %s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Sikertelen"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Nem lehet kapcsolódni ehhez: %s: %s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Időtúllépés miatt nem lehet kapcsolódni a következőhöz: %s: %s (%s)"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Kapcsolódás: %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nem lehet feloldani a következőt: „%s”"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Átmeneti hiba „%s” feloldása közben"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Rendszerhiba „%s:%s” feloldásakor"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Hiba történt „%s:%s” feloldásakor (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nem lehet csatlakozni ehhez: %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Nem érhető el"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Érvénytelen URI, helyi URI-k nem kezdődhetnek //-rel"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Bejelentkezés"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Nem lehet a partner nevét megállapítani"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Nem lehet a helyi nevet megállapítani"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "A kiszolgáló visszautasította a kapcsolatot: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Hibás USER, a kiszolgáló üzenete: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Hibás PASS, a kiszolgáló üzenete: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Meg lett adva proxy kiszolgáló, de nincs bejelentkezési parancsfájl és az "
+"Acquire::ftp::ProxyLogin üres."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+"A bejelentkezési parancsfájl „%s” parancsa sikertelen, a kiszolgáló üzenete: "
+"%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Hibás TYPE, a kiszolgáló üzenete: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Időtúllépés a kapcsolatban"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "A kiszolgáló lezárta a kapcsolatot"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "A válasz túlcsordította a puffert."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protokollhiba"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Nem lehet létrehozni a foglalatot"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Nem lehet kapcsolódni az adatfoglalathoz, a kapcsolat túllépte az időkorlátot"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Nem lehet kapcsolódni a passzív foglalathoz."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "A getaddrinfo nem talált figyelőfoglalatot"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Nem lehet összekapcsolódni a foglalattal"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Nem lehet figyelni a foglalaton"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Nem lehet megállapítani a foglalat nevét"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Nem lehet PORT parancsot küldeni"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Ismeretlen címcsalád: %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Hibás EPRT, a kiszolgáló üzenete: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Az adatfoglalathoz kapcsolódás túllépte az időkorlátot"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Nem lehet elfogadni a kapcsolatot"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Probléma a fájl hash értékének meghatározásakor"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Nem lehet letölteni a fájlt, a kiszolgáló üzenete: „%s”"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Az adatfoglalat túllépte az időkorlátot"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Az adatátvitel sikertelen, a kiszolgáló üzenete: „%s”"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Lekérdezés"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Nem lehet meghívni "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, fuzzy, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"A digitálisan aláírt fájl nem érvényes, érkezett: „%s” (igényel a hálózat "
+"hitelesítést?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Legalább egy aláírás érvénytelen."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "Belső hiba: Jó aláírás, de nem állapítható meg a kulcs ujjlenyomata."
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Nem indítható el a „apt-key” az aláírás ellenőrzéséhez (telepítve van a "
+"gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Ismeretlen apt-key futtatási hiba"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "%s kulcs aláírása gyenge kivonatoló algoritmust használ (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Az alábbi aláírások érvénytelenek voltak:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Az alábbi aláírások nem ellenőrizhetők, mert a nyilvános kulcs nem érhető "
+"el:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Hiba a fájl írásakor"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Hiba a kiszolgálóról olvasáskor, a túloldal lezárta a kapcsolatot"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Hiba a kiszolgálóról olvasáskor"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Hiba a fájl írásakor"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "A kiválasztás sikertelen"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Időtúllépés a kapcsolatban"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Hiba a kimeneti fájl írásakor"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "A módosítási idő beállítása sikertelen"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "A kapcsolat idő előtt lezárult"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Az üres fájlok biztosan nem érvényes csomagok"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Érvénytelen archívumtag-fejléc: %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s eltávolítva"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "%s csomagfájl nincs szinkronban."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "A csomagindexfájlok megsérültek. Nincs Filename: mező a(z) %s csomaghoz."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Nem található a(z) „%s” tükörfájl "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "A(z) „%s” tükörfájl nem olvasható"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Nem található bejegyzés a(z) „%s” tükörfájlban"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Tükör: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "%s konfigurációs fájl megnyitása"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s megnyitása"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "A várt „%s” bejegyzés nem található a Release fájlban (Rossz sources.list "
+#~ "bejegyzés vagy helytelenül formázott fájl)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Teljesítetlen függőségek. Próbálja a --fix-broken használatával."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Próbálja futtatni az „apt --fix-broken install” parancsot az alábbiak "
+#~ "javításához:"
+
+#~ msgid "(not found)"
+#~ msgstr "(nem található)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Csomagrögzítés: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Nem érhető el nyilvános kulcs az alábbi kulcsazonosítókhoz:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "A(z) %s könyvtár eltérítve"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "%2$s csomag %1$s függősége nem elégíthető ki, mert a(z) %3$s nem "
+#~ "engedélyezett a(z) „%4$s” csomagokon"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%2$s csomag %1$s függősége nem elégíthető ki, mert a(z) %3$s csomag nem "
+#~ "található"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "%2$s csomag %1$s függősége nem elégíthető ki: a telepített %3$s csomag "
+#~ "túl friss"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%2$s csomag %1$s függősége nem elégíthető ki, mert a(z) %3$s csomag "
+#~ "elérhető verziója nem elégíti ki a verziókövetelményeket"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%2$s csomag %1$s függősége nem elégíthető ki, mert a(z) %3$s csomagnak "
+#~ "nincs jelölt verziója"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "%2$s csomag %1$s függősége nem elégíthető ki: %3$s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "%s építési függőségei nem elégíthetők ki."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Hiba %s törlésekor"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "%s törlése sikertelen"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Használat: apt-cache [kapcsolók] parancs\n"
+#~ " apt-cache [kapcsolók] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "Az apt-cache egy alacsony szintű eszköz információk lekérdezésére\n"
+#~ "az APT bináris gyorsítótár-fájljaiból\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Parancsok:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Kapcsolók:\n"
+#~ " -h Ez a súgó szöveg. \n"
+#~ " -p=? A csomag-gyorsítótár.\n"
+#~ " -s=? A forrás-gyorsítótár.\n"
+#~ " -q Letiltja az állapotjelzőt.\n"
+#~ " -i Csak a fontos függőségeket jeleníti meg az unmet parancsnál.\n"
+#~ " -c=? Ezt a konfigurációs fájlt olvassa be\n"
+#~ " -o=? Beállít egy tetszőleges konfigurációs opciót, pl. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Lásd az apt-cache(8) és apt.conf(5) kézikönyvlapokat további "
+#~ "információkért.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Kapcsolók:\n"
+#~ " -h Ez a súgó szöveg.\n"
+#~ " -q Naplózható kimenet - nincs folyamatjelző\n"
+#~ " -qq Nincs kimenet, kivéve a hibákat\n"
+#~ " -s Szimulációs mód. Csak kiírja, mi történne.\n"
+#~ " -f auto/kézi megjelölés olvasása/írása az adott fájlból/fájlba\n"
+#~ " -c=? Ezt a konfigurációs fájlt olvassa be\n"
+#~ " -o=? Beállít egy tetszőleges konfigurációs opciót, pl. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Lásd még az apt-mark(8) és apt.conf(5) kézikönyvlapokat további\n"
+#~ "információkért."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Kapcsolók:\n"
+#~ " -h Ez a súgó szöveg\n"
+#~ " -c=? Ezt a konfigurációs fájlt olvassa be\n"
+#~ " -o=? Beállít egy tetszőleges konfigurációs opciót, pl -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Kapcsolók:\n"
+#~ " -h Ez a súgó szöveg.\n"
+#~ " -q Naplózható kimenet - nincs folyamatjelző\n"
+#~ " -qq Nincs kimenet, kivéve a hibákat\n"
+#~ " -s Szimulációs mód. Csak kiírja, mi történne.\n"
+#~ " -f auto/kézi megjelölés olvasása/írása az adott fájlból/fájlba\n"
+#~ " -c=? Ezt a konfigurációs fájlt olvassa be\n"
+#~ " -o=? Beállít egy tetszőleges konfigurációs opciót, pl. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Lásd még az apt-mark(8) és apt.conf(5) kézikönyvlapokat további\n"
+#~ "információkért."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Használat: apt-sortpkgs [kapcsolók] fájl1 [fájl2 ...]\n"
+#~ "\n"
+#~ "Az apt-sortpkgs egy egyszerű eszköz csomagfájlok rendezésére. A -s "
+#~ "kapcsolót\n"
+#~ "lehet használni annak jelzésére hogy ez milyen típusú fájl.\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -h Ez a súgó szöveg\n"
+#~ " -s Forrásfájlrendezést használ\n"
+#~ " -c=? Ezt a konfigurációs fájlt olvassa be\n"
+#~ " -o=? Beállít egy tetszőleges konfigurációs opciót, pl -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Hiba a gyermekfolyamatnál"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr ""
+#~ "Legalább egy csomagot meg kell adni, amelynek a forrását le kell tölteni"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Nem sikerült adatcsatornákat létrehozni"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Nem sikerült a gzipet futtatni "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s erre: %s lefordítva ekkor: %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Nem sikerült FILE*-ot létrehozni"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "A(z) %lu. sor hibás a(z) %s forráslistában (URI-feldolgozás)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Helytelenül formázott a(z) %lu. sor a(z) %s forráslistában (az [option] "
+#~ "feldolgozhatatlan)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Helytelenül formázott a(z) %lu. sor a(z) %s forráslistában (az [option] "
+#~ "túl rövid)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Helytelenül formázott a(z) %lu. sor a(z) %s forráslistában ([%s] nem "
+#~ "érvényes hozzárendelés)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Helytelenül formázott a(z) %lu. sor a(z) %s forráslistában ([%s] nem "
+#~ "tartalmaz kulcsot)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Helytelenül formázott a(z) %lu. sor a(z) %s forráslistában ([%s] %s "
+#~ "kulcsnak nincs értéke)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "A(z) %lu. sor hibás a(z) %s forráslistában (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "A(z) %lu. sor hibás a(z) %s forráslistában (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "A(z) %lu. sor hibás a(z) %s forráslistában (URI-feldolgozás)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "A(z) %lu. sor hibás a(z) %s forráslistában (Abszolút dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "A(z) %lu. sor hibás a(z) %s forráslistában (dist feldolgozás)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "A(z) %s %s csomag nem volt megtalálható a fájl függőségeinek feldolgozása "
+#~ "közben"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Nem lehet a(z) %s forrás csomaglistáját elérni"
+
+# FIXME
+#~ msgid "Collecting File Provides"
+#~ msgstr "„Biztosítja” kapcsolatok összegyűjtése"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "A(z) %s fájl nem digitálisan aláírt üzenettel kezdődik"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Nem található a(z) „%s” ellenőrzőösszege a Release fájlban"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "A(z) %s terjesztőblokk nem tartalmaz ujjlenyomatot"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Függőségiverzió-terület összesen: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Nincs elég szabad hely itt: %s"
+
+#~ msgid "Done"
+#~ msgstr "Kész"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Nincs kulcstartó telepítve ide: %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Belső hiba, az AllUpgrade megsértett valamit"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s nem egy érvényes DEB csomag."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "%s CD-ROM csatolási pont használata\n"
+#~ "CD-ROM csatolása\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s nem foltozható mmappel és fájlművelet használatával - a folt sérültnek "
+#~ "tűnik."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s nem foltozható mmappel (nem mmap specifikus hiba) - a folt sérültnek "
+#~ "tűnik."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr ""
+#~ "A(z) „%2$s” csomag el nem érhető „%1$s” cél kiadásának figyelmen kívül "
+#~ "hagyása"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Letöltés: %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "Érvénytelen DEB archívum, nincs „%s”, „%s” vagy „%s” tagja"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Az MD5Sum nem megfelelő"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Egy fájl nem található a(z) %s csomaghoz. Ez azt jelentheti, hogy kézzel "
+#~ "kell kijavítani a csomagot."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Nem írható a napló, sikertelen openpty() (a /dev/pts nincs csatolva?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "A nem létező %s fájl kihagyása"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "%s eltávolítása sikertelen"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "%s létrehozása sikertelen"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "%sinfo nem érhető el"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Az info és temp könyvtáraknak azonos fájlrendszeren kell lenniük"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Nem sikerült a(z) %sinfo adminisztrációs könyvtárba váltani"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Belső hiba a csomagnév lekérésekor"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Fájllista olvasása"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Nem sikerült a(z) „%sinfo/%s” listafájlt megnyitni. Ha nem lehet "
+#~ "helyreállítani ezt a fájlt, akkor ürítse ki, és azonnal telepítse újra a "
+#~ "csomag ugyanezen verzióját!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Nem sikerült a(z) %sinfo/%s listafájlt olvasni"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Belső hiba a csomópont lekérésekor"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Nem sikerült a(z) %sdiversions eltérítő fájlt megnyitni"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Az eltérítő fájl hibás"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Érvénytelen sor az eltérítő fájlban: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Belső hiba egy eltérítés hozzáadásakor"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "A csomaggyorsítótárat kell előbb előkészíteni"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Nem található a csomagfejléc, eltolás: %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Hibás ConfFile szakasz az állapotfájlban. Eltolás: %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "MD5 értelmezési hiba. Eltolás: %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Nem lehet váltani ebbe: %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Nem található érvényes control fájl"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nem lehet adatcsatornát nyitni ehhez: %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Olvasási hiba %s folyamattól"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Egyetlen fejlécsor érkezett, amely több, mint %u karakter"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Megjegyzés: ezt a dpkg automatikusan és szándékosan hajtja végre."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Deformált felülbírálás %s %lu. sorában #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Deformált felülbírálás %s %lu. sorában #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Deformált felülbírálás %s %lu. sorában #3"
+
+#~ msgid "decompressor"
+#~ msgstr "kicsomagoló"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "olvasás, még kellene %lu, de már az összes elfogyott"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "írás, még kiírandó %lu, de ez nem lehetséges"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Nem lehetett a már kicsomagolt „%s” közvetlen beállítását végrehajtani. A "
+#~ "részletekért lásd a man 5 apt.conf oldalt az APT::Immediate-Configure "
+#~ "címszó alatt."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Hiba történt %s feldolgozásakor (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Hiba történt %s feldolgozásakor (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Hiba történt %s feldolgozásakor (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Hiba történt %s feldolgozásakor (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Hiba történt %s feldolgozásakor (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Hiba történt a(z) %s (NewVersion%d) feldolgozása során"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Hiba történt %s feldolgozásakor (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Hiba történt %s feldolgozásakor (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Hiba történt %s feldolgozásakor (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Hiba történt %s feldolgozásakor (CollectFileProvides)"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..27c5dc6
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,4027 @@
+# Italian translation of apt
+# Copyright (C) 2002-2010, 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2019 The Free Software Foundation, Inc.
+# This file is distributed under the same license as the apt package.
+# Samuele Giovanni Tonon <samu@debian.org>, 2002.
+# Milo Casagrande <milo@milo.name>, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2019-03-04 11:05+0100\n"
+"Last-Translator: Milo Casagrande <milo@milo.name>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 2.2.1\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Firma dell'archivio non valida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Errore nel leggere l'intestazione membro dell'archivio"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Intestazione membro dell'archivio non valida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "L'archivio è troppo piccolo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Lettura delle intestazioni dell'archivio non riuscita"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Impossibile trovare un compressore configurato per \"%s\""
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Archivio danneggiato"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Checksum di tar non riuscito, archivio danneggiato"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Intestazione TAR di tipo %u sconosciuta, membro %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Questo non è un archivio DEB valido: membro \"%s\" mancante"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Errore interno, impossibile trovare il membro %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "File \"control\" non analizzabile"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Scrittura del file %s non riuscita"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Chiusura del file %s non riuscita"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Il percorso %s è troppo lungo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Estrazione di %s eseguita più di una volta"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "La directory %s è deviata"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+"Il pacchetto sta cercando di scrivere nell'obiettivo di deviazione %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Il percorso della deviazione è troppo lungo"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Impossibile eseguire stat su %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Rinomina di %s in %s non riuscita"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "La directory %s sta per essere sostituita da una non-directory"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Localizzazione del nodo nel suo hash bucket non riuscita"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Il percorso è troppo lungo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Il pacchetto sovrascritto corrisponde senza versione per %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Il file %s/%s sovrascrive quello nel pacchetto %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Impossibile leggere %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Impossibile eseguire stat su %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode invocata su un nodo ancora collegato"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Localizzazione dell'elemento hash non riuscita."
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Allocazione della deviazione non riuscita"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Errore interno in AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Tentativo di sovrascrivere una deviazione, %s -> %s e %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Doppia aggiunta di deviazione %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "File di configurazione duplicato %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"L'aggiornamento da tale repository non può essere eseguito in modo sicuro ed "
+"è quindi disabilitato come impostazione predefinita."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"I dati da tale repository non possono essere autenticati e può essere "
+"pericoloso utilizzarli."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Consultare la pagina man apt-secure(8) per la creazione di un repository e "
+"la configurazione utente."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Il repository \"%s\" non è più firmato."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Il repository \"%s\" non ha più un file Release."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Ciò non è solitamente consentito, ma è stata fornita l'opzione Acquire::"
+"AllowDowngradeToInsecureRepositories per aggirare il problema."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Il repository \"%s\" non è firmato."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Il repository \"%s\" non ha un file Release."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr ""
+"Il repository \"%s\" fornisce solamente informazioni di sicurezza deboli."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Esecuzione di readlink su %s non riuscita"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Somma hash non corrispondente"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"Informazioni disponibili non sufficienti per eseguire lo scaricamento in "
+"modo sicuro"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "rename() non riuscita: %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Le dimensioni non corrispondono"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Formato file non valido"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Errore di firma"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Il file con la firma in chiaro non è valido, ottenuto \"%s\" (la rete "
+"richiede autenticazione?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Si è verificato un errore nel verificare la firma. Il repository non è "
+"aggiornato e verranno usati i file indice precedenti. Errore GPG: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Errore GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Acquisizione del file \"%s\" saltata in quanto il repository \"%s\" non "
+"presenta il componente \"%s\" (nome del componente errato in sources.list?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Acquisizione del file \"%s\" saltata in quanto il repository \"%s\" non "
+"supporta l'architettura \"%s\""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Acquisizione del file \"%s\" saltata in quanto il repository \"%s\" non "
+"sembra fornire tale file (voce in sources.list errata?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Acquisizione del file \"%s\" saltata in quanto il repository \"%s\" fornisce "
+"solamente informazioni di sicurezza deboli per tale file"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Il file Release per %s è scaduto (non valido dal %s). Gli aggiornamenti per "
+"questo repository non verranno applicati."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Il file Release per %s non è ancora valido (non valido per %s). Gli "
+"aggiornamenti per questo repository non verranno applicati."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Distribuzione in conflitto: %s (atteso %s ma ottenuto %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "Il repository \"%s\" ha modificato il valore \"%s\" da \"%s\" a \"%s\""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+"Il repository \"%s\" ha modificato la priorità predefinita per %s da %hi a "
+"%hi."
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+"Maggiori informazioni possono essere trovare online nel file Release presso: "
+"%s"
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"Ciò deve essere accettato prima di poter applicare gli aggiornamenti da "
+"questo repository. Per maggiori informazioni consultare la pagina man %s."
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Impossibile recuperare %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Impossibile trovare un file per il pacchetto %s. Potrebbe essere necessario "
+"sistemare manualmente questo pacchetto (a causa dell'architettura mancante)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+"Impossibile trovare una sorgente per scaricare la versione \"%s\" di \"%s\""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Changelog per %s=%s non disponibile"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+"Il metodo \"%s\" non è supportato ed è disabilitato: passare a http(s). Per "
+"abilitarlo nuovamente, impostare Dir::Bin::Methods::%s a \"%s\"."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "Il metodo \"%s\" è disabilitato tramite la configurazione."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "Se si intendeva usare Tor, ricordarsi di usare %s al posto di %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Impossibile trovare un driver per il metodo %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Il pacchetto %s è installato?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Il metodo %s non si è avviato correttamente"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Inserire il disco chiamato \"%s\" nell'unità \"%s\" e premere Invio."
+
+# (ndt) sarebbe da controllare meglio assieme a quella dopo
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Manca la directory di liste %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Manca la directory di archivio %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Impossibile bloccare la directory %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"Nessun utente sandbox \"%s\" sul sistema, impossibile perdere i privilegi"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Lo scaricamento è eseguito come root, ma non in una sandbox, poiché l'utente "
+"\"%2$s\" non ha accesso al file \"%1$s\"."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "La pulizia di %s non è supportata"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Scaricamento file %li di %li (%s rimanente)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Scaricamento file %li di %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Il pacchetto %s deve essere reinstallato, ma non è possibile trovarne un "
+"archivio."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Errore, pkgProblemResolver::Resolve ha generato delle interruzioni. Questo "
+"potrebbe essere causato da pacchetti bloccati."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Impossibile correggere i problemi, ci sono pacchetti danneggiati bloccati."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"L'elenco dei pacchetti o il file di stato non può essere letto o aperto."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"È consigliato eseguire \"apt-get update\" per correggere questi problemi"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Impossibile leggere l'elenco dei sorgenti."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Errore di compilazione dell'espressione regolare - %s"
+
+# (ndt) dovrebbe essere inteso il file Release
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Release \"%s\" per \"%s\" non trovato."
+
+# (ndt) dovrebbe essere inteso il Version
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Version \"%s\" per \"%s\" non trovato"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Impossibile trovare il task \"%s\""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr ""
+"Impossibile trovare alcun pacchetto tramite l'espressione regolare \"%s\""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Impossibile trovare alcun pacchetto tramite il glob \"%s\""
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Impossibile trovare il pacchetto %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Impossibile selezionare le versioni dal pacchetto \"%s\" poiché è virtuale"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Impossibile selezionare la versione più recente dal pacchetto \"%s\" poiché "
+"è virtuale"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Impossibile selezionare la versione candidata dal pacchetto %s poiché non ha "
+"alcun candidato"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Impossibile selezionare la versione installata dal pacchetto %s poiché non è "
+"installato"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Impossibile selezionare la versione installata o la candidata dal pacchetto "
+"\"%s\" poiché non sono presenti"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Riga %u troppo lunga nel file %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Smontaggio CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Viene usato il punto di mount del CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "In attesa del disco...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montaggio CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificazione... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Etichetta archiviata: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Analisi del disco per file indice...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Trovati %zu indici di pacchetto, %zu indici di sorgente, %zu indici di "
+"traduzione e %zu firme\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Impossibile trovare alcun file di pacchetto. Questo potrebbe non essere un "
+"disco Debian o potrebbe essere l'architettura errata."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Trovata l'etichetta \"%s\"\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Questo non è un nome valido, riprovare.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Questo disco è chiamato: \n"
+"\"%s\"\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Copia elenco pacchetti..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Scrittura nuovo elenco sorgenti\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Le voci dell'elenco sorgenti per questo disco sono:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Impossibile passare a %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Impossibile eseguire stat su %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Impossibile eseguire stat sul punto di mount %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Esecuzione di stat sul CD-ROM non riuscita"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"Opzione a riga di comando \"%c\" [da %s] non riconosciuta in combinazione "
+"con le altre opzioni."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"Opzione a riga di comando %s non riconosciuta in combinazione con le altre "
+"opzioni"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Opzione a riga di comando %s non booleana"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "L'opzione %s richiede un argomento."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Opzione %s: la specifica di configurazione dell'oggetto deve avere un "
+"=<valore>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "L'opzione %s richiede un argomento intero, non \"%s\""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opzione \"%s\" troppo lunga"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Il valore %s non è comprensibile, provare \"true\" o \"false\"."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operazione %s non valida"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Tipo di abbreviazione non riconosciuto: \"%c\""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Errore di sintassi %s:%u: il blocco inizia senza nome"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Errore di sintassi %s:%u: tag non corretto"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Errore di sintassi %s:%u: caratteri extra dopo il valore"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Errore di sintassi %s:%u: le direttive possono essere fatte solo al livello "
+"più alto"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Errore di sintassi %s:%u: troppe inclusioni annidate"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Errore di sintassi %s:%u: incluso da qui"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Errore di sintassi %s:%u: direttiva \"%s\" non supportata"
+
+# (ndt) sarebbe da controllare meglio...
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Errore di sintassi %s:%u: la direttiva clear richiede un albero di opzioni "
+"come argomento"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Errore di sintassi %s:%u: caratteri extra alla fine del file"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Si è verificato un problema nell'eseguire l'unlink del file %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Blocco disabilitato per il file di blocco in sola lettura %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Impossibile aprire il file di blocco %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Blocco disabilitato per il file di blocco %s montato via nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Impossibile impostare il blocco %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+"L'elenco dei file non può essere creato poiché \"%s\" non è una directory"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+"Viene ignorato \"%s\" nella directory \"%s\" poiché non è un file regolare"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Viene ignorato il file \"%s\" nella directory \"%s\" poiché non ha "
+"un'estensione"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Viene ignorato il file \"%s\" nella directory \"%s\" poiché ha un'estensione "
+"non valida"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "In attesa di %s ma non era presente"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Il sottoprocesso %s ha ricevuto un segmentation fault."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Il sottoprocesso %s ha ricevuto il segnale %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Il sottoprocesso %s ha restituito un codice d'errore (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Il sottoprocesso %s è uscito inaspettatamente"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Errore di lettura"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Errore di scrittura"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Si è verificato un problema nel chiudere il file gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Fine file non attesa"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Creazione di un sottoprocesso IPC non riuscita"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Esecuzione non riuscita del compressore "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Impossibile aprire il file %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Impossibile aprire il descrittore del file %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lettura, ancora %llu da leggere, ma non è stato trovato nulla"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "scrittura, ancora %llu da scrivere, ma non è possibile"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Si è verificato un problema nel chiudere il file %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Si è verificato un problema nel rinominare il file %s in %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Si è verificato un problema nel sincronizzare il file"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Impossibile eseguire mkstemp %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Impossibile scrivere in %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Impossibile eseguire mmap su un file vuoto"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Impossibile creare mmap di %llu byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Impossibile duplicare il descrittore del file %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Impossibile chiudere mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Impossibile sincronizzare mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Impossibile eseguire mmap di %lu byte"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Troncamento del file non riuscito"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"MMap dinamica esaurita. Aumentare la dimensione di APT::Cache-Start. Il "
+"valore attuale è: %lu (man 5 apt.conf)."
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Impossibile incrementare la dimensione della MMap poiché il limite di %lu "
+"byte è stato raggiunto."
+
+# (ndt) lunghetta...
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Impossibile incrementare la dimensione della MMap poiché il "
+"ridimensionamento automatico è stato disabilitato dall'utente."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Errore."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Fatto"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lig %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Selezione %s non trovata"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+"L'obiettivo %s vuole acquisire lo stesso file (%s) di %s dalla sorgente %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "L'obiettivo %s (%s) è configurato molteplici volte in %s e %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Impossibile analizzare il file Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Nessuna sezione nel file Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Nessuna voce Hash nel file Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Nessuna voce Hash nel file Release %s che possa essere considerata "
+"abbastanza sicura"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Voce \"%s\" nel file Release %s non valida"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"Impostati valori in conflitto per l'opzione %s riguardo alla sorgente %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+"Impostato un valore non valido per l'opzione %s riguardo alla sorgente %s %s "
+"(%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Impostati valori in conflitto per l'opzione %s riguardo alla sorgente %s %s: "
+"%s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Impossibile analizzare il file di pacchetto %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Impossibile acquisire il blocco sul frontend dpkg (%s). Un altro processo "
+"potrebbe tenerlo occupato."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Impossibile acquisire il blocco sul frontend dpkg (%s). È necessario essere "
+"root."
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg è stato interrotto. È necessario eseguire \"%s\" per correggere il "
+"problema. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Impossibile acquisire il blocco sulla directory di amministrazione (%s). Un "
+"altro processo potrebbe tenerla occupata."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Impossibile acquisire il blocco sulla directory di amministrazione (%s). È "
+"necessario essere root."
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Non bloccato"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Preparazione di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Preparazione alla configurazione di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Preparazione alla rimozione di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Preparazione alla rimozione completa di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Notata la sparizione di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Esecuzione comando di post installazione %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Pacchetto %s installato"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Configurazione di %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Directory \"%s\" mancante"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Impossibile aprire il file \"%s\""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Estrazione di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Installazione di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Rimozione di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Rimozione completa di %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Pacchetto %s rimosso completamente"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Impossibile scrivere il registro (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "È /dev/pts montato?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "L'operazione è stata interrotta prima di essere completata"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Segnalazione apport non scritta poiché è stato raggiunto il valore massimo "
+"di MaxReports"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "Problemi con le dipendenze - Viene lasciato non configurato"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Segnalazione apport non scritta poiché il messaggio di errore indica la "
+"presenza di un fallimento precedente."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Segnalazione apport non scritta poiché il messaggio di errore indica un "
+"errore per disco pieno."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Segnalazione apport non scritta poiché il messaggio di errore indica un "
+"errore di memoria esaurita."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Segnalazione apport non scritta poiché il messaggio di errore indica un "
+"errore nel sistema locale."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Segnalazione apport non scritta poiché il messaggio di errore indica un "
+"errore di I/O di dpkg."
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Generazione albero delle dipendenze"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versioni candidate"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Generazione delle dipendenze"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Lettura informazioni sullo stato"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Apertura del file di stato %s non riuscita"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Scrittura del file temporaneo di stato %s non riuscita"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Invia lo scenario al solver"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Invia la richiesta al solver"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Preparazione alla ricezione della soluzione"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Il solver esterno è terminato senza un messaggio di errore"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Esecuzione solver esterno"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Esecuzione planner esterno"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Invia la richiesta al planner"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Invia lo scenario al planner"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "Il planner esterno è terminato senza un messaggio di errore"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Scritti %i record.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Scritti %i record con %i file mancanti.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Scritti %i record con %i file senza corrispondenze\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Scritti %i record con %i file mancanti e %i file senza corrispondenze\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Impossibile trovare il record di autenticazione per %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash non corrispondente per %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Il sistema di pacchetti \"%s\" non è supportato"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Impossibile determinare un tipo di sistema appropriato di pacchetti"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Avanzamento: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Esecuzione di dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Impossibile eseguire immediatamente la configurazione su \"%s\". Per "
+"maggiori informazioni, consultare \"man 5 apt.conf\" alla sezione \"APT::"
+"Immediate-Configure\" (%d)."
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Impossibile configurare \"%s\". "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"L'installazione necessita della rimozione temporanea del pacchetto "
+"essenziale %s a causa di un ciclo conflitto/pre-dipendenza. Questa è una "
+"situazione critica, ma se si vuole realmente procedere, attivare l'opzione "
+"APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Cache dei pacchetti vuota"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Il file della cache dei pacchetti è danneggiato"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "La versione del file della cache dei pacchetti è incompatibile"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Questo APT non supporta il sistema di versione \"%s\""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+"Il file della cache dei pacchetti è stato generato per un'altra "
+"architettura: %s vs. %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Il file della cache dei pacchetti è danneggiato, hash non corretto"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Dipende"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Pre-dipende"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Consiglia"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Va in conflitto"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Raccomanda"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Sostituisce"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Rompe"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Migliora"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Rende obsoleto"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "importante"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "richiesto"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opzionale"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "La cache ha un sistema di gestione delle versioni incompatibile"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Si è verificato un errore nell'elaborare %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"È stato superato il numero di nomi di pacchetti che questo APT può gestire."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "È stato superato il numero di versioni che questo APT può gestire."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "È stato superato il numero di descrizioni che questo APT può gestire."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "È stato superato il numero di dipendenze che questo APT può gestire."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Lettura elenco dei pacchetti"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Errore di I/O nel salvare la cache sorgente"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Il file indice di tipo \"%s\" non è supportato"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Il valore \"%s\" non è valido per APT::Default-Release poiché tale release "
+"non è disponibile dalle sorgenti"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Campo non valido nel file delle preferenze %s, manca l'intestazione \"Package"
+"\""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Impossibile comprendere il tipo di gancio %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+"%s: il valore speciale \"Pin-Priority: %s\" può essere usato solamente con "
+"voci \"Package: *\""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: il valore %s non rientra nell'intervallo di priorità di gancio valide "
+"(%d - %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Priorità per il gancio non specificata (o zero)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Voce %u non corretta nel file %s (%s %s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "La riga %u nel file %s non è corretta (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Tipo \"%s\" non riconosciuto alla riga %u nel file delle sorgenti %s"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "La stanza %u nell'elenco delle sorgenti %s non è corretta (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr ""
+"Tipo \"%s\" non riconosciuto nella stanza %u nel file delle sorgenti %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "File %s non supportato passato sulla riga di comando"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"È necessario inserire alcuni URI di tipo \"source\" nel file sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "Impossibile convertire %s a intero: fuori dall'intervallo"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Impossibile scaricare alcuni file di indice: saranno ignorati o verranno "
+"usati quelli vecchi."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Calcolo dell'aggiornamento"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Trovato:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Scaricamento di:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ignorato:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Errore:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Recuperati %sB in %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [In lavorazione]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Cambio disco: inserire il disco chiamato\n"
+" \"%s\"\n"
+"nell'unità \"%s\" e premere Invio\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+"Accettare le modifiche e continuare l'aggiornamento da questo repository?"
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Correzione delle dipendenze..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " non riuscita."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Impossibile correggere le dipendenze"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Impossibile minimizzare l'insieme da aggiornare"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Fatto"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "È utile eseguire \"apt --fix-broken install\" per correggere ciò."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dipendenze non soddisfatte. Provare \"apt --fix-broken install\" senza "
+"pacchetti (o specificare una soluzione)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Ordinamento"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Nota, viene selezionato \"%s\" per il task \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Nota, viene selezionato \"%s\" per l'espressione glob \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Nota, viene selezionato \"%s\" per l'espressione regolare \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Il pacchetto %s è un pacchetto virtuale fornito da:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Installato]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Versione non candidata]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "È necessario sceglierne uno da installare."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Il pacchetto %s non ha versioni disponibili, ma è nominato da un altro\n"
+"pacchetto. Questo potrebbe indicare che il pacchetto è mancante, obsoleto\n"
+"oppure è disponibile solo all'interno di un'altra sorgente\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Tuttavia questi pacchetti lo sostituiscono:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Il pacchetto \"%s\" non ha candidati da installare"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Pacchetti virtuali come \"%s\" non possono essere rimossi\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Il pacchetto \"%s\" non è installato e quindi non è stato rimosso: si "
+"intendeva \"%s\"?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Il pacchetto \"%s\" non è installato e quindi non è stato rimosso\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Nota, viene selezionato \"%s\" al posto di \"%s\"\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Comandi più utilizzati:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+"Per maggiori informazioni riguardo ai comandi disponibili, consultare %s."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Le opzioni di configurazione e la sintassi sono dettagliate in atp.conf(5).\n"
+"Le informazioni per configurare le sorgenti sono dettagliate in sources."
+"list(5).\n"
+"Scelte di pacchetti e versioni possono essere espresse tramite "
+"apt_preferences(5).\n"
+"Informazioni di sicurezza sono presenti in apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Questo APT ha i poteri della Super Mucca."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Questo APT ha super poteri."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes è deprecata, utilizzare una delle opzioni che iniziano con --"
+"allow."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Nessun pacchetto trovato"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ATTENZIONE: i seguenti pacchetti non possono essere autenticati."
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Avviso di autenticazione disabilitato.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Alcuni pacchetti non possono essere autenticati"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Installare questi pacchetti senza verificarli?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Erano presenti pacchetti non autenticati ed è stata usata -y senza --allow-"
+"unauthenticated"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Impossibile determinare lo spazio libero in %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Spazio libero in %s insufficiente."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Impossibile bloccare la directory di scaricamento"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Alcuni pacchetti non possono essere installati. Questo può voler dire\n"
+"che è stata richiesta una situazione impossibile oppure, se si sta\n"
+"usando una distribuzione in sviluppo, che alcuni pacchetti richiesti\n"
+"non sono ancora stati creati o sono stati rimossi da Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Le seguenti informazioni possono aiutare a risolvere la situazione:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Pacchetti danneggiati"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Impossibile scaricare alcuni pacchetti. Potrebbe essere utile eseguire \"apt-"
+"get update\" o provare l'opzione \"--fix-missing\"."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+"Errore interno, InstallPackages è stato chiamato con un pacchetto "
+"danneggiato."
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"I pacchetti devono essere rimossi, ma l'azione di rimozione è disabilitata."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Pacchetti essenziali sono stati rimossi ed è stata usata -y senza --allow-"
+"remove-essential."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Pacchetti sono stati retrocessi è stata usata -y senza --allow-downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Pacchetti bloccati sono stati modificati ed è stata usata -y senza --allow-"
+"change-held-packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Errore interno, l'ordinamento non è stato terminato"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Le dimensioni non corrispondono. Inviare un'email a: apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "È necessario scaricare %sB/%sB di archivi.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "È necessario scaricare %sB di archivi.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Dopo quest'operazione, verranno occupati %sB di spazio su disco.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Dopo quest'operazione, verranno liberati %sB di spazio su disco.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"È stata specificata la modalità \"Trivial Only\", ma questa non è "
+"un'operazione banale."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Sì, esegui come da richiesta."
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Si sta per compiere un'azione potenzialmente pericolosa.\n"
+"Per continuare scrivere la frase \"%s\"\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Interrotto."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Continuare?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Scaricamento di alcuni file non riuscito"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Scaricamento completato e in modalità solo scaricamento"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing su supporti estraibili non è ancora supportato"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Impossibile correggere i pacchetti mancanti."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Interruzione dell'installazione."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Il seguente pacchetto è sparito dal sistema poiché\n"
+"tutti i file sono stati sovrascritti da altri pacchetti:"
+msgstr[1] ""
+"I seguenti pacchetti sono spariti dal sistema poiché\n"
+"tutti i file sono stati sovrascritti da altri pacchetti:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Nota: questo viene svolto automaticamente e volutamente da dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Non si è autorizzati a rimuovere nulla, impossibile avviare AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Sembra che AutoRemover abbia rovinato qualcosa e questo\n"
+"non doveva accadere. Segnalare un bug riguardo apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Errore interno, AutoRemover ha rovinato qualche cosa"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Il seguente pacchetto è stato installato automaticamente e non è più "
+"richiesto:"
+msgstr[1] ""
+"I seguenti pacchetti sono stati installati automaticamente e non sono più "
+"richiesti:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu pacchetto è stato installato automaticamente e non è più richiesto.\n"
+msgstr[1] ""
+"%lu pacchetti sono stati installati automaticamente e non sono più "
+"richiesti.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Usare \"%s\" per rimuoverlo."
+msgstr[1] "Usare \"%s\" per rimuoverli."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "I seguenti pacchetti aggiuntivi saranno inoltre installati:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Pacchetti suggeriti:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Pacchetti raccomandati:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Viene saltato %s poiché è già installato e l'aggiornamento non è impostato.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Viene saltato %s poiché non è installato e sono richiesti solo gli "
+"aggiornamenti.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "La reinstallazione di %s non è possibile, non può essere scaricato.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s è già alla versione più recente (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "È stato impostato %s per l'installazione manuale.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versione \"%s\" (%s) selezionata per \"%s\"\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versione \"%s\" (%s) selezionata per \"%s\" per via di \"%s\"\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Elencazione"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "C'è %i versione aggiuntiva: usare \"-a\" per visualizzarla"
+msgstr[1] "Ci sono %i versioni aggiuntive: usare \"-a\" per visualizzarle"
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"Nota: questa è solo una simulazione.\n"
+" %s necessita dei privilegi di root per la normale esecuzione.\n"
+" Inoltre, il meccanismo di blocco non è attivato e non è quindi\n"
+" utile dare importanza a tutto ciò per una situazione reale.\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[installato, aggiornabile a: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[installato, locale]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[installato, auto-rimovibile]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[installato, automatico]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[installato]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[aggiornabile da: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[configurazione residua]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ma la versione %s è installata"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ma la versione %s sta per essere installata"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ma non è installabile"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ma è un pacchetto virtuale"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ma non sta per essere installato"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ma non è installato"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " oppure"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "I seguenti pacchetti hanno dipendenze non soddisfatte:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "I seguenti pacchetti NUOVI saranno installati:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "I seguenti pacchetti saranno RIMOSSI:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "I seguenti pacchetti sono stati mantenuti alla versione attuale:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "I seguenti pacchetti saranno aggiornati:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "I seguenti pacchetti saranno RETROCESSI:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "I seguenti pacchetti bloccati saranno cambiati:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (a causa di %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ATTENZIONE: i seguenti pacchetti essenziali stanno per essere rimossi.\n"
+"Questo non dovrebbe essere fatto a meno che non si sappia esattamente cosa "
+"si sta facendo."
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu aggiornati, %lu installati, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstallati, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu retrocessi, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu da rimuovere e %lu non aggiornati.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu non completamente installati o rimossi.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[S/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[s/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "S"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "È necessario specificare almeno un modello per la ricerca"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Ricerca sul testo"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "C'è %i record aggiuntivo: usare \"-a\" per visualizzarlo"
+msgstr[1] "Ci sono %i record aggiuntivi: usare \"-a\" per visualizzarli"
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "non un vero pacchetto (virtuale)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "File dei pacchetti:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"La cache non è sincronizzata, impossibile referenziare un file di pacchetti"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pacchetti con gancio:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s con priorità %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Installato: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidato: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(nessuno)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabella versione:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Impossibile trovare un pacchetto per l'architettura \"%s\""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Impossibile trovare un pacchetto \"%s\" con versione \"%s\""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Impossibile trovare un pacchetto \"%s\" con release \"%s\""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Scelto \"%s\" come pacchetto sorgente al posto di \"%s\"\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Impossibile trovare la versione \"%s\" del pacchetto \"%s\""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"È necessario specificare almeno un pacchetto di cui recuperare il sorgente"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Impossibile trovare un pacchetto sorgente per %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"Nota: il processo di pacchettizzazione di \"%s\" è mantenuto\n"
+"all'interno del sistema di controllo della versione \"%s\" presso:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Utilizzare:\n"
+"%s\n"
+"per recuperare gli ultimi (forse non rilasciati) aggiornamenti del "
+"pacchetto.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Il pacchetto \"%s\" già scaricato viene saltato\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "È necessario recuperare %sB/%sB di sorgenti.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "È necessario scaricare %sB di sorgenti.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Recupero sorgente %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Recupero di alcuni archivi non riuscito."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Estrazione del pacchetto sorgente già estratto in %s saltata\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Comando di estrazione \"%s\" non riuscito.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Verificare che il pacchetto \"dpkg-dev\" sia installato.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Comando \"%s\" di generazione non riuscito.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Impossibile ottenere informazioni di dipendenza di generazione per %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s non ha dipendenze di generazione.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Informazioni sull'architettura non disponibili per %s. Consultare apt."
+"conf(5) APT::Architectures per l'impostazione"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"È necessario specificare almeno un pacchetto di cui controllare le "
+"dipendenze di generazione"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+"Viene usata la directory \"%s\" per recuperare le dipendenze di generazione\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+"Nota, viene usato il file \"%s\" per recuperare le dipendenze di "
+"generazione\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Elaborazione delle dipendenze di generazione non riuscita"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Analisi di %s non riuscita: modificare nuovamente?"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+"Il proprio file \"%s\" è stato modificato: eseguire \"apt-get update\".\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Il pacchetto %s versione %s ha una dipendenza non soddisfatta:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Il comando update non accetta argomenti"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+"È preferibile usare %s invece di incorporare le informazioni di accesso "
+"direttamente nella voce %s di \"%s\""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i pacchetto può essere aggiornato: eseguire \"apt list --upgradable\" per "
+"vederlo.\n"
+msgstr[1] ""
+"%i pacchetti possono essere aggiornati: eseguire \"apt list --upgradable\" "
+"per vederli.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Tutti i pacchetti sono aggiornati."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "Il comando \"%s\" non accetta alcun argomento"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Totale nomi dei pacchetti: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Totale strutture dei pacchetti: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Pacchetti normali: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Pacchetti virtuali puri: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pacchetti virtuali singoli: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Pacchetti virtuali misti: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Mancante: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Totale versioni distinte: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Totale descrizioni distinte: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Totale dipendenze: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Totale relazioni ver/file: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Totale relazioni desc/file: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Totale corrispondenze fornite: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Totale stringhe globalizzate: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Totale spazio inutilizzato: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Totale spazio occupato: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Questo comando è deprecato. Utilizzare \"apt-mark showauto\" al suo posto."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Uso: apt-cache [OPZIONI] COMANDO\n"
+" apt-cache [OPZIONI] show PACCHETTO1 [PACCHETTO2 ...]\n"
+"\n"
+"apt-cache interroga e visualizza informazioni riguardo ai pacchetti "
+"installati\n"
+"e che possono essere installati. Funziona esclusivamente con i dati "
+"acquisiti\n"
+"nella cache locale tramite il comando \"update\" di, per esempio, apt-get. "
+"Le\n"
+"informazioni potrebbero quindi non essere aggiornate in base alla data\n"
+"dell'ultimo aggiornamento, ma apt-cache può funzionare comunque anche in\n"
+"assenza delle sorgenti configurate (mancanza di connessione di rete).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Mostra i campi dei sorgenti"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Cerca nell'elenco dei pacchetti un'espressione regolare"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Mostra informazioni di dipendenza per un pacchetto"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Mostra informazioni di dipendenza all'incontrario per un pacchetto"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Mostra un campo leggibile per il pacchetto specificato"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Elenca i nomi di tutti i pacchetti nel sistema"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Mostra le preferenze adottate"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Dare un nome a questo disco, tipo \"Debian 5.0.3 Disco 1\""
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Inserire un disco nell'unità e premere Invio"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Mount di \"%s\" su \"%s\" non riuscito"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Impossibile rilevare automaticamente un CD-ROM oppure non è stato trovato "
+"con\n"
+"il punto di montaggio predefinito.\n"
+"Provare l'opzione --cdrom per impostare il punto di montaggio del CD-ROM.\n"
+"Per maggiori informazioni sul rilevamento automatico e sul punto di "
+"montaggio\n"
+"del CD-ROM, consultare \"man apt-cdrom\"."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Ripetere questo processo per il resto dei CD."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Uso: apt-cdrom [OPZIONI] COMANDO\n"
+"\n"
+"apt-cdrom è utilizzato per aggiungere CD-ROM, dispositivi USB e altri "
+"supporti\n"
+"rimovibili come sorgenti per APT. Il punto di montaggio e le informazioni "
+"sul\n"
+"dispositivo sono acquisite tramite apt.conf(5), udev(7) e fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argomenti non in coppia"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Uso: apt-config [OPZIONI] COMANDO\n"
+"\n"
+"apt-config è un'interfaccia sulle impostazioni utilizzate da tutti gli\n"
+"strumenti APT. È principalmente usato per debug e programmi shell.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "Ottiene i valori della configurazione tramite valutazione della shell"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "Mostra la configurazione attiva"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver è un'interfaccia per salvare su file uno scenario EDSP e\n"
+"inviarlo, opzionalmente, a un altro risolutore.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Uso: apt-extracttemplates FILE1 [FILE2 ...]\n"
+"\n"
+"apt-extracttemplates è uno strumento per estrarre configurazioni e template "
+"dai\n"
+"pacchetti debian. Viene utilizzato principalmente da debconf(1) per "
+"chiedere\n"
+"all'utente parametri di configurazione prima di installare i pacchetti.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Impossibile trovare la versione di debconf. È installato?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Impossibile trovare il pacchetto %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "È stato impostato %s per l'installazione automatica.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Questo comando è deprecato. Utilizzare \"apt-mark auto\" e \"apt-mark manual"
+"\" al suo posto."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Errore interno, \"problem resolver\" ha rovinato qualcosa"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Moduli supportati:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Uso: apt-get [OPZIONI] COMANDO\n"
+" apt-get [OPZIONI] install|remove PACCHETTO1 [PACCHETTO2 ...]\n"
+" apt-get [OPZIONI] source PACCHETTO1 [PACCHETTO2 ...]\n"
+"\n"
+"apt-get è un'interfaccia a riga di comando per scaricare pacchetti e le "
+"loro\n"
+"informazioni da sorgenti autenticate, per installare, aggiornare e "
+"rimuovere\n"
+"pacchetti assieme alle loro dipendenze.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Scarica l'elenco aggiornato dei pacchetti"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Esegue un aggiornamento dei pacchetti installati"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Installa nuovi pacchetti (PKG è libc6 non libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Installa nuovamente pacchetti (PKG è libc6 non libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Rimuove i pacchetti"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Rimuove i pacchetti e la loro configurazione"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Rimuove automaticamente i pacchetti inutilizzati"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Esegue un avanzamento della distribuzione, consultare apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Segue le selezioni di dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configura le dipendenze di generazione per i pacchetti sorgente"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Elimina i file dei pacchetti scaricati"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Elimina i vecchi pacchetti scaricati"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verifica che non ci siano dipendenze insoddisfatte"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Scarica i pacchetti sorgente"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Scarica il pacchetto binario nella directory attuale"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Scarica e visualizza il changelog per il pacchetto indicato"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Necessario un URL come argomento"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "È necessario specificare almeno una coppia URL/nome file"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Scaricamento non riuscito"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec per %s non riuscita"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Uso: apt-helper [OPZIONI] COMANDO\n"
+" apt-helper [OPZIONI] cat-file FILE ...\n"
+" apt-helper [OPZIONI] download-file URI PERCORSO\n"
+"\n"
+"apt-helper integra una serie di comandi utilizzabili da programmi shell "
+"per,\n"
+"per esempio, sfruttare la stessa configurazione proxy o l'acquisizione del\n"
+"sistema allo stesso modo di APT.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "Scarica l'URI fornito in percorso"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "Cerca un record SRV (per es. _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "Concatena i file con decompressione automatica"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "Rileva proxy utilizzando apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr "Attende che il sistema sia online"
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr "Rilascia i privilegi prima di eseguire il comando fornito"
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Uso: apt-internal-planner\n"
+"\n"
+"apt-internal-planner è un'interfaccia per l'utilizzo del pianificatore di\n"
+"installazione interno come pianificatore esterno per eseguire il debug "
+"degli\n"
+"strumenti APT.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Uso: apt-internal-solver\n"
+"\n"
+"apt-internal-solver è un'interfaccia per l'utilizzo del resolver interno\n"
+"come resolver esterno per eseguire il debug degli strumenti APT.\n"
+"\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s non può essere segnato perché non è installato.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s è già stato impostato come installato manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s è già stato impostato come installato automaticamente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr "Nessuna modifica necessaria"
+
+#: cmdline/apt-mark.cc
+msgid "The following packages will be marked as automatically installed:"
+msgstr "I seguenti pacchetti verranno segnati come installati automaticamente:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s è già stato impostato come bloccato.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s era già non bloccato.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Esecuzione di dpkg non riuscita. È stato lanciato come root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s impostato come bloccato.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Blocco su %s annullato.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "Selezionato %s per la rimozione totale.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Selezionato %s per la rimozione.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Selezionato %s per l'installazione.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Uso: apt-mark [OPZIONI] {auto|manual} PACCHETTO1 [PACCHETTO2 ...]\n"
+"\n"
+"apt-mark è una semplice interfaccia a riga di comando per segnalare i "
+"pacchetti\n"
+"come installati manualmente o automaticamente. Può essere utilizzato anche "
+"per\n"
+"manipolare gli stati di selezione dei pacchetti tramite dpkg(1) e per "
+"elencare\n"
+"tutti i pacchetti con o senza alcune segnalazioni.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Segna i pacchetti forniti come installati automaticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Segna i pacchetti forniti come installati manualmente"
+
+#: cmdline/apt-mark.cc
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr ""
+"Segna tutte le dipendenze dei meta pacchetti come installate automaticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Segna un pacchetto come bloccato a una vecchia versione"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Sblocca un pacchetto bloccato a una vecchia versione"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Stampa l'elenco dei pacchetti installati automaticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Stampa l'elenco dei pacchetti installati manualmente"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Stampa l'elenco dei pacchetti bloccati"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Record del pacchetto sconosciuto."
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Uso: apt-sortpkgs [OPZIONI] FILE1 [FILE2 ...]\n"
+"\n"
+"apt-sortpkgs è un semplice strumento per l'ordinamento dei file di "
+"informazione\n"
+"dei pacchetti. Per impostazione predefinita ordina in base alle "
+"informazioni\n"
+"sui pacchetti binari, ma tramite l'opzione -s è possibile passare\n"
+"all'ordinamento sui pacchetti sorgenti.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Uso: apt [OPZIONI] COMANDO\n"
+"\n"
+"apt è un gestore di pacchetti a riga di comando che fornisce comandi per la\n"
+"gestione, la ricerca e la ricerca di informazioni sui pacchetti. Dispone\n"
+"delle stesse funzionalità degli strumenti APT specifici (come apt-get e\n"
+"apt-cache), abilitando opzioni aggiuntive utili per un utilizzo "
+"interattivo.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "Elenca i pacchetti in base al nome"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "Cerca tra le descrizioni dei pacchetti"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "Mostra dettagli di un pacchetto"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "Installa pacchetti"
+
+#: cmdline/apt.cc
+msgid "reinstall packages"
+msgstr "Installa nuovamente pacchetti"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "Rimuove pacchetti"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "Aggiorna l'elenco dei pacchetti disponibili"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+"Esegue l'avanzamento di versione del sistema installando e aggiornando i "
+"pacchetti"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+"Esegue l'avanzamento di versione del sistema rimuovendo, installando e "
+"aggiornando i pacchetti"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "Modifica il file sulle informazioni delle sorgenti"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Impostazione predefinita errata."
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Premere Invio per continuare."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Eliminare tutti i file .deb precedentemente scaricati?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Si sono verificati alcuni errori nell'estrazione. Verrà tentata la"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+"configurazione dei pacchetti installati. Questo potrebbe generare errori"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"duplicati o causati da dipendenze mancanti. Ciò non causa problemi, solo gli"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"errori precedenti sono importanti. Correggerli e rieseguire l'installazione "
+"[I]"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Unione delle informazioni disponibili"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "L'elenco dell'estensione del pacchetto è troppo lungo"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Errore nell'elaborare la directory %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "L'elenco dell'estensione del sorgente è troppo lungo"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Errore nella scrittura dell'intestazione nel file \"contents\""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Errore nell'elaborare i contenuti %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Uso: apt-ftparchive [OPZIONI] COMANDO\n"
+"Comandi: packages PERCORSO_AL_BINARIO [FILE_OVERRIDE [PREFISSO_PERCORSO]\n"
+" sources PERCORSO_AI_SORGENTI [FILE_OVERRIDE [PREFISSO_PERCORSO]\n"
+" contents PERCORSO\n"
+" release PERCORSO\n"
+" generate CONFIGURAZIONE [GRUPPI]\n"
+" clean CONFIGURAZIONE\n"
+"\n"
+"apt-ftparchive genera file di indice per gli archivi Debian. Supporta\n"
+"molti stili di generazione da completamente automatici ad alternative\n"
+"funzionali per dpkg-scanpackages e dpkg-scansources\n"
+"\n"
+"apt-ftparchive genera file Packages da un albero di \".deb\". Il file\n"
+"Package contiene le informazioni di tutti i campi control da ogni\n"
+"pacchetto, così come l'hash MD5 e la dimensione del file. Un file override\n"
+"è supportato per forzare i valori di priorità e sezione.\n"
+"\n"
+"Similmente, apt-ftparchive genera file Sources da un albero di .dscs.\n"
+"L'opzione --source-override può essere usata per specificare un file\n"
+"di override per i sorgenti\n"
+"\n"
+"I comandi \"packages\" e \"sources\" devono essere eseguiti nella root \n"
+"dell'albero. Il percorso al binario deve puntare alla base della ricerca \n"
+"ricorsiva e il file override deve contenere le opzioni di override.\n"
+"Il prefisso del percorso è aggiunto al campo filename se presente. Esempio\n"
+"di utilizzo dall'archivio Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages \n"
+"\n"
+"Opzioni:\n"
+" -h Mostra questo aiuto\n"
+" --md5 Controlla la generazione dell'MD5\n"
+" -s=? File override dei sorgenti\n"
+" -q Silenzioso\n"
+" -d=? Seleziona il database di cache opzionale\n"
+" --no-delink Abilita la modalità di debug del delinking\n"
+" --contents Controlla la generazione del file \"contents\"\n"
+" -c=? Legge come configurazione il file specificato\n"
+" -o=? Imposta un'opzione arbitraria di configurazione"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nessuna selezione corrisponde"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Mancano alcuni file nel file group di pacchetti \"%s\""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Il database era danneggiato, il file è stato rinominato in %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Il database è vecchio, tentativo di aggiornamento %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Il formato del database non è valido. Se è stato eseguito l'aggiornamento da "
+"una vecchia versione di apt, rimuovere e ricreare il database."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Impossibile aprire il file del database %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Lettura di .dsc non riuscita"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "L'archivio non ha un campo \"control\""
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Impossibile ottenere un cursore"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Allocazione della memoria non riuscita"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algoritmo di compressione \"%s\" sconosciuto"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "L'output compresso %s necessita di un insieme di compressione"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Creazione di una pipe IPC verso il sottoprocesso non riuscita"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Fork non riuscita"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Sottoprocesso compresso"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Errore interno, creazione di %s non riuscita"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "I/O al sottoprocesso/file non riuscito"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Lettura durante l'elaborazione MD5 non riuscita"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Impossibile aprire %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Override %s riga %llu malformato (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Lettura del file override %s non riuscita"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Override %s riga %llu malformato #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Override %s riga %llu malformato #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Override %s riga %llu malformato #3"
+
+# (ndt) messo A per Avviso
+# Inizio con la maiuscola dopo i : perché mi sa che in molti
+# casi molte stringhe sono così
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: Impossibile leggere la directory %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: Impossibile eseguire stat su %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Gli errori si applicano al file "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Risoluzione di %s non riuscita"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Visita dell'albero non riuscita"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Apertura di %s non riuscita"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Delink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Collegamento di %s a %s non riuscito"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Raggiunto il limite di DeLink di %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "L'archivio non ha un campo \"package\""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s non ha un campo override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " il responsabile di %s è %s non %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s non ha un campo source override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s non ha neppure un campo binario override\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "In attesa degli header"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Il server HTTP ha inviato un header di risposta non valido"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Riga header non corretta"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Il server HTTP ha inviato un header Content-Length non valido"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Il server HTTP ha inviato un header Content-Range non valido"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Questo server HTTP ha un supporto del range non corretto"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Formato della data sconosciuto"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Header dati non corretto"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Connessione non riuscita"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+"Il file ha una dimensione non attesa (%llu != %llu). Sincronizzazione del "
+"mirror in corso?"
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"%s disabilitato automaticamente a causa della risposta non corretta dal "
+"server/proxy (man 5 apt.conf)."
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Errore interno"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Impossibile leggere il database del CD-ROM %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Usare apt-cdrom per far riconoscere questo CD-ROM da APT. apt-get update non "
+"può essere usato per aggiungere nuovi CD-ROM"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD-ROM sbagliato"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Impossibile smontare il CD-ROM in %s, potrebbe essere ancora in uso."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disco non trovato."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "File non trovato"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+"Il collegamento diretto ai domini %s è bloccato per impostazione predefinita."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr "Connessi a %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Connessione a %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Impossibile creare un socket per %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Impossibile iniziare la connessione a %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Non riuscito"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Impossibile connettersi a %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+"Impossibile connettersi a %s:%s (%s), tempo esaurito per la connessione"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Connessione a %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Impossibile risolvere \"%s\""
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Risoluzione di \"%s\" temporaneamente non riuscita"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Errore di sistema nella risoluzione di \"%s:%s\""
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+"Si è verificato qualcosa di anormale nella risoluzione di \"%s:%s\" (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Impossibile connettersi a %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Esecuzione di stat non riuscita"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI non valido, gli URI locali non devono iniziare con //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Accesso in corso"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Impossibile determinare il nome del nodo"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Impossibile determinare il nome locale"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Il server ha rifiutato la connessione e riporta: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER non riuscito, il server riporta: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS non riuscito, il server riporta: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"È stato specificato un server proxy, ma nessuno script di accesso: Acquire::"
+"ftp::ProxyLogin è vuoto."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+"Comando dello script di accesso \"%s\" non riuscito, il server riporta: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE non riuscito, il server riporta: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Connessione scaduta"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Il server ha chiuso la connessione"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Una risposta ha superato le dimensioni del buffer."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protocollo danneggiato"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Impossibile creare un socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Impossibile connettersi al socket dati, tempo esaurito per la connessione"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Impossibile connettersi al socket passivo."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "Impossibile ottenere un socket in ascolto con getaddrinfo()"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Impossibile eseguire bind() su un socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Impossibile eseguire listen() su un socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Impossibile determinare il nome del socket"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Impossibile inviare il comando PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Famiglia di indirizzamento %u (AF_*) sconosciuta"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT non riuscito, il server riporta: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Connessione al socket dati terminata"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Impossibile accettare connessioni"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Si è verificato un problema nel creare l'hash del file"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Impossibile recuperare il file, il server riporta: \"%s\""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Socket dati terminato"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Trasferimento dati non riuscito, il server riporta: \"%s\""
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Interrogazione"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Impossibile invocare "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Il file firmato non è valido, ottenuto \"%s\" (la rete richiede "
+"autenticazione?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "È stata trovata almeno una firma non valida."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Errore interno: firma corretta, ma non è possibile determinare l'impronta "
+"della chiave."
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Impossibile eseguire \"apt-key\" per verificare la firma (forse gnupg non è "
+"installato)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Errore sconosciuto durante l'esecuzione di apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "La firma con chiave %s utilizza un algoritmo di digest debole (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Le seguenti firme non erano valide:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Le seguenti firme non sono state verificate perché la chiave pubblica non è "
+"disponibile:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Errore nello scrivere sul file"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Errore nel leggere dal server. Il lato remoto ha chiuso la connessione"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Errore nel leggere dal server"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Errore nello scrivere su file"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Select non riuscita"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Connessione terminata"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Errore nello scrivere sul file di output"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Impostazione della data di modifica non riuscita"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Connessione chiusa prematuramente"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "File vuoti non possono essere archivi validi"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Intestazione membro dell'archivio %s non valida"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..bc81ab0
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,3981 @@
+# Japanese messages for apt.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Project Vine, Daisuke SUZUKI <daisuke@linux.or.jp>, 2001-2002
+# Debian Project, Masato Taruishi <taru@debian.org>, 2002
+# Debian Project, Keita Maehara <maehara@debian.org>, 2003
+# Debian Project, Kenshi Muto <kmuto@debian.org>, 2004-2012
+# Takuma Yamada <tyamada@takumayamada.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.4\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2017-01-06 04:50+0900\n"
+"Last-Translator: Takuma Yamada <tyamada@takumayamada.com>\n"
+"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 2.91.6\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "不正なアーカイブ署名"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "アーカイブメンバーヘッダの読み込みに失敗しました"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "不正なアーカイブメンバーヘッダ"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "アーカイブが不足しています"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "アーカイブヘッダの読み込みに失敗しました"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "'%s' のために設定された圧縮プログラムが見つかりません"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "壊れたアーカイブ"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "tar チェックサム検証が失敗しました。アーカイブが壊れています"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "未知の TAR ヘッダタイプ %u、メンバー %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "'%s' メンバーがないため、正しい DEB アーカイブではありません"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "内部エラー、メンバー %s を特定できません"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "解析できないコントロールファイル"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "ファイル %s の書き込みに失敗しました"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "%s のクローズに失敗しました"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "パス %s は長すぎます"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s を複数回展開しています"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "ディレクトリ %s は divert されています"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+"このパッケージは diversion のターゲットの %s/%s に書き込もうとしています"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "diversion パスが長すぎます"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s の状態を取得するのに失敗しました"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "%s を %s に名前変更できませんでした"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "ディレクトリ %s が非ディレクトリに置換されようとしています"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "ハッシュバケツ内でノードを特定するのに失敗しました"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "パスが長すぎます"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "%s に対するバージョンのないパッケージマッチを上書きします"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "ファイル %s/%s がパッケージ %s のものを上書きします"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s を読み込むことができません"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s の状態を取得できません"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "リンクされているノードで DropNode が呼ばれました"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "ハッシュ要素を特定することができません!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "diversion の割り当てに失敗しました"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "AddDiversion での内部エラー"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "%s -> %s と %s/%s の diversion を上書きしようとしています"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "%s -> %s の diversion が二重に追加されています"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "設定ファイル %s/%s が重複しています"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更"
+"新が無効になっています。"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"このようなリポジトリから取得したデータは認証できないので、データの使用は潜在"
+"的に危険です。"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してくだ"
+"さい。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "リポジトリ %s はもう署名されていません。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "リポジトリ %s には Release ファイルがなくなっています。"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"通常は許可されませんが、オプション Acquire::"
+"AllowDowngradeToInsecureRepositories が上書きするために指定されました。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "リポジトリ %s は署名されていません。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "リポジトリ %s には Release ファイルがありません。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "リポジトリ '%s' は弱いセキュリティ情報しか提供していません。"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "%s のリンク読み取りに失敗しました"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "ハッシュサムが適合しません"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr "このダウンロードを安全に実施するのに十分な情報が得られません。"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "名前の変更に失敗しました。%s (%s -> %s)"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "サイズが適合しません"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "不正なファイル形式"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "署名エラー"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"クリアサインされたファイルが有効ではなく、'%s' を得ました (認証にネットワーク"
+"が必要?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックス"
+"ファイルが使われます。GPG エラー: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG エラー: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"リポジトリ '%2$s' がアーキテクチャ '%3$s' をサポートしないため設定ファイル "
+"'%1$s' の取得をスキップ"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"リポジトリ '%2$s' がアーキテクチャ '%3$s' をサポートしないため設定ファイル "
+"'%1$s' の取得をスキップ"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
+#| "support architecture '%s'"
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"リポジトリ '%2$s' がアーキテクチャ '%3$s' をサポートしないため設定ファイル "
+"'%1$s' の取得をスキップ"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"リポジトリ '%2$s' は弱いセキュリティ情報のみを提供しているため、設定ファイル "
+"'%1$s' の取得をスキップします"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"%s の Release ファイルは期限切れ (%s 以来無効) です。このリポジトリからの更新"
+"物は適用されません。"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"%s の Release ファイルは期限切れ (%s 以来無効) です。このリポジトリからの更新"
+"物は適用されません。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+"ディストリビューションが競合しています: %s (%s を期待していたのに %s を取得し"
+"ました)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "%s の取得に失敗しました %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"パッケージ %s のファイルの位置を特定できません。おそらくこのパッケージを手動"
+"で修正する必要があります (存在しないアーキテクチャのため)。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "'%2$s' のバージョン '%1$s' をダウンロードするソースが見つかりません"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "%s=%s のため変更履歴が利用できません"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "メソッド '%s' は設定によりはっきりと無効にされています。"
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+"Tor を利用する場合には %2$s ではなく %1$s を使うことを覚えておいてください。"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "メソッドドライバ %s が見つかりません。"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "パッケージ %s はインストールされていますか?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "メソッド %s が正常に開始しませんでした"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"'%s' とラベルの付いたディスクをドライブ '%s' に入れて [Enter] キーを押してく"
+"ださい。"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "リストディレクトリ %s が見つかりません。"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "アーカイブディレクトリ %s が見つかりません。"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "ディレクトリ %s をロックできません"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr "システムにサンドボックスユーザ '%s' がありません。権限を削除できません"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"ファイル '%s' がユーザ '%s' からアクセスできないため、ダウンロードは root で"
+"サンドボックスを通さずに行われます。"
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "%s の消去はサポートされていません"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "ファイルを取得しています %li/%li (残り %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "ファイルを取得しています %li/%li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"パッケージ %s を再インストールする必要がありますが、そのためのアーカイブを見"
+"つけることができませんでした。"
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"エラー、pkgProblemResolver::Resolve は停止しました。おそらく変更禁止パッケー"
+"ジが原因です。"
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "問題を解決することができません。壊れた変更禁止パッケージがあります。"
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"パッケージリストまたはステータスファイルを解釈またはオープンすることができま"
+"せん。"
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"これらの問題を解決するためには apt-get update を実行する必要があるかもしれま"
+"せん"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "ソースのリストを読むことができません。"
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "正規表現の展開エラー - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "'%2$s' のリリース '%1$s' が見つかりませんでした"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "'%2$s' のバージョン '%1$s' が見つかりませんでした"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "タスク '%s' が見つかりません"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "正規表現 '%s' ではパッケージは見つかりませんでした"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "'%s' に一致するパッケージは見つかりませんでした"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "パッケージ %s が見つかりません"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "純粋な仮想パッケージのため、パッケージ '%s' のバージョンを選べません"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"純粋な仮想パッケージのため、パッケージ '%s' の最新バージョンを選べません"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "候補が存在しないので、パッケージ %s の候補バージョンを選べません"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"インストールされていないので、パッケージ %s のインストール済みバージョンを選"
+"べません。"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"パッケージ '%s' のインストール済みまたは候補のバージョンはいずれも存在しない"
+"ので選べません"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "ソースリスト %2$s の %1$u 行目が長すぎます。"
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "CD-ROM をアンマウントしています ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "CD-ROM マウントポイント %s を使用します\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "ディスクを待っています ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "CD-ROM をマウントしています ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "確認しています... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "格納されたラベル: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "ディスクのインデックスファイルを走査しています ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"%zu のパッケージインデックス、%zu のソースインデックス、%zu の翻訳インデック"
+"ス、%zu の署名を見つけました\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"パッケージファイルを配置できません。Debian のディスクではないか、誤ったアーキ"
+"テクチャではないでしょうか?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "ラベル '%s' を見つけました\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "これは有効な名前ではありません。再試行してください。\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"このディスクは以下のように呼ばれます: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "パッケージリストをコピーしています ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "新しいソースリストを書き込んでいます\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "このディスクのソースリストのエントリ:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "%s へ変更することができません"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s の状態を取得できません。"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "マウントポイント %s の状態を取得できません"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "CD-ROM の状態を取得するのに失敗しました"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"コマンドラインオプション '%c' [%s から] は、ほかのオプションとの組み合わせで"
+"理解できません。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"コマンドラインオプション %s は、ほかのオプションとの組み合わせで理解できませ"
+"ん"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "コマンドラインオプション %s は boolean ではありません"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "オプション %s には引数が必要です。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "オプション %s: 設定項目には =<値> を指定する必要があります。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "オプション %s には '%s' ではなく整数の引数が必要です"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "オプション '%s' は長すぎます"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "%s を解釈することができません。true か false を試してください。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "不正な操作 %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "理解できない省略形式です: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "文法エラー %s:%u: ブロックが名前なしで始まっています。"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "文法エラー %s:%u: 不正なタグです"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "文法エラー %s:%u: 値の後に余分なゴミが入っています"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "文法エラー %s:%u: 命令はトップレベルでのみ実行できます"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "文法エラー %s:%u: インクルードのネストが多すぎます"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "文法エラー %s:%u: ここからインクルードされています"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "文法エラー %s:%u: 未対応の命令 '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"文法エラー %s:%u: clear ディレクティブは、引数としてオプションツリーを必要と"
+"します"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "文法エラー %s:%u: ファイルの最後に余計なゴミがあります"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "ファイル %s の削除中に問題が発生しました"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "読み込み専用のロックファイル %s にロックは使用しません"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "ロックファイル %s をオープンできません"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "nfs マウントされたロックファイル %s にはロックを使用しません"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "ロック %s が取得できませんでした"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "'%s' がディレクトリではないため、ファイルの一覧を作成できません"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "ディレクトリ '%2$s' の '%1$s' が通常ファイルではないため、無視します"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"ディレクトリ '%2$s' の '%1$s' がファイル名拡張子を持たないため、無視します"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"ディレクトリ '%2$s' の '%1$s' が無効なファイル名拡張子を持っているため、無視"
+"します"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "%s を待ちましたが、そこにはありませんでした"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "子プロセス %s がセグメンテーション違反を受け取りました。"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "子プロセス %s がシグナル %u を受け取りました。"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "子プロセス %s がエラーコード (%u) を返しました"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "子プロセス %s が予期せず終了しました"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "読み込みエラー"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "書き込みエラー"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "gzip ファイル %s のクローズ中に問題が発生しました"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "予期しないファイル終端 (EOF)"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "子プロセス IPC の生成に失敗しました"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "以下の圧縮ツールの実行に失敗しました: "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "ファイル %s をオープンできませんでした"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "ファイルデスクリプタ %d を開けませんでした"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "読み込みが %llu 残っているはずですが、何も残っていません"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "あと %llu 書き込む必要がありますが、書き込むことができませんでした"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "ファイル %s のクローズ中に問題が発生しました"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "%s から %s へのファイル名変更中に問題が発生しました"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "ファイルの同期中に問題が発生しました"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "mkstemp %s を実行できません"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "%s に書き込めません"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "空のファイルを mmap できません"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "%llu バイトの mmap ができませんでした"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "ファイルデスクリプタ %i は重複できません"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "mmap をクローズできません"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "mmap を同期できません"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "%lu バイトの mmap ができませんでした"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "ファイルの切り詰めに失敗しました"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"動的 MMap が範囲を越えました。APT::Cache-Start の大きさを増やしてください。現"
+"在値は %lu です (man 5 apt.conf を参照)。"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr "%lu バイトの上限に達しているため、MMap のサイズを増やせません。"
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"自動増加がユーザによって無効にされているため、MMap のサイズを増やせません。"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... エラー!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... 完了"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%li日 %li時間 %li分 %li秒"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%li時間 %li分 %li秒"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%li分 %li秒"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%li秒"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "選択された %s が見つかりません"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+"ターゲット %1$s はソース %4$s から %3$s と同じファイル (%2$s) の取得を求めて"
+"います"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "ターゲット %s (%s) は %s と %s で複数回設定されています"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Release ファイル %s を解釈することができません"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Release ファイル %s にセクションがありません"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Release ファイル %s に Hash エントリがありません"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Release ファイル %s にセキュリティ目的のために十分に強いと考えられているハッ"
+"シュエントリがありません"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Release ファイル %2$s に無効な '%1$s' エントリがあります"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr "ソース %2$s %3$s に関してオプション %1$s の値が競合します"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+"ソース %2$s %3$s (%4$s) に関してオプション %1$s に設定された値が無効です"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"ソース %2$s %3$s に関してオプション %1$s の値が競合します: %4$s != %5$s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "パッケージファイル %s を解釈することができません (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"管理用ディレクトリ (%s) をロックできません。これを使う別のプロセスが動いてい"
+"ませんか?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"管理用ディレクトリ (%s) をロックできません。root 権限で実行していますか?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg は中断されました。問題を修正するには '%s' を手動で実行する必要がありま"
+"す。"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"管理用ディレクトリ (%s) をロックできません。これを使う別のプロセスが動いてい"
+"ませんか?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"管理用ディレクトリ (%s) をロックできません。root 権限で実行していますか?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "ロックされていません"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s を準備しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "%s の設定を準備しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "%s の削除を準備しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "%s を完全に削除する準備をしています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "%s の消失を記録しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "インストール後トリガ %s を実行しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s をインストールしました"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s を設定しています"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "ディレクトリ '%s' が見つかりません"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "ファイル '%s' をオープンできませんでした"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s を展開しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s をインストールしています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s を削除しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s を完全に削除しています"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s を完全に削除しました"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "ログを書き込めません (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "/dev/pts はマウントされていますか?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "操作はそれが完了する前に中断されました"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "MaxReports にすでに達しているため、レポートは書き込まれません"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "依存関係の問題 - 未設定のままにしています"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"エラーメッセージは前の失敗から続くエラーであることを示しているので、レポート"
+"は書き込まれません。"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"エラーメッセージはディスクフルエラーであることを示しているので、レポートは書"
+"き込まれません。"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"エラーメッセージはメモリ超過エラーであることを示しているので、レポートは書き"
+"込まれません。"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"エラーメッセージはローカルシステムの問題であることを示しているので、レポート"
+"は書き込まれません。"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"エラーメッセージは dpkg I/O エラーであることを示しているので、レポートは書き"
+"込まれません。"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "依存関係ツリーを作成しています"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "候補バージョン"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "依存関係の生成"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "状態情報を読み取っています"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "状態ファイル %s のオープンに失敗しました"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "一時状態ファイル %s の書き込みに失敗しました"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "ソルバにシナリオを送信"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "ソルバにリクエストを送信"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "解決を受け取る準備"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "外部ソルバが適切なエラーメッセージなしに失敗しました"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "外部ソルバを実行"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "外部プランナーを実行"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "プランナーにリクエストを送信"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "プランナーにシナリオを送信"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "外部プランナーが適切なエラーメッセージなしに失敗しました"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i レコードを書き込みました。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i レコードを書き込みました。%i 個のファイルが存在しません。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i レコードを書き込みました。%i 個の適合しないファイルがあります。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"%i レコードを書き込みました。%i 個のファイルが見つからず、%i 個の適合しない"
+"ファイルがあります。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "認証レコードが見つかりません: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "ハッシュサムが適合しません: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "パッケージングシステム '%s' はサポートされていません"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "適切なパッケージシステムタイプを特定できません"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "進捗: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "dpkg を実行しています"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"'%s' の即時設定は動作しません。詳細については man 5 apt.conf の APT::"
+"Immediate-Configure の項を参照してください。(%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "'%s' を設定できませんでした。"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"このインストールは、競合/先行依存のループが原因で、一時的に重要な不可欠パッ"
+"ケージ %s を削除します。これは多くの場合に問題が起こる原因となります。本当に"
+"これを行いたいなら、APT::Force-LoopBreak オプションを有効にしてください。"
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "空のパッケージキャッシュ"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "パッケージキャッシュファイルが壊れています"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "このパッケージキャッシュファイルは互換性がないバージョンです"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "この APT はバージョニングシステム '%s' をサポートしていません"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+"パッケージキャッシュが異なるアーキテクチャ用に構築されています: %s vs %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "パッケージキャッシュファイルが壊れています。ハッシュが違います"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "依存"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "先行依存"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "提案"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "競合"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "推奨"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "置換"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "破壊"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "拡張"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "廃止"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "重要"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "要求"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "標準"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "特別"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "任意"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "キャッシュに非互換なバージョニングシステムがあります"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "%s を処理中にエラーが発生しました (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "この APT が対応している以上の数のパッケージが指定されました。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "この APT が対応している以上の数のバージョンが要求されました。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "この APT が対応している以上の数の説明が要求されました。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "この APT が対応している以上の数の依存関係が発生しました。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "パッケージリストを読み込んでいます"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "ソースキャッシュの保存中に IO エラーが発生しました"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "インデックスファイルのタイプ '%s' はサポートされていません"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"APT::Default-Release の 値 '%s' は、そのようなリリースをソース中から利用でき"
+"ないため、無効です"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"不正なレコードがプリファレンスファイル %s に存在します。パッケージヘッダがあ"
+"りません"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "pin タイプ %s を理解できませんでした"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr "%s: 値 %s は pin の有効な優先度の範囲外です (%d から %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "pin で優先度 (または 0) が指定されていません"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "不正なエントリ %u 行目 %s ファイル %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "ソースリスト %2$s の %1$u 行目が不正です (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "ソースリスト %3$s の %2$u 行にあるタイプ '%1$s' は不明です"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "ソースリスト %2$s の %1$u 個目の節が不正です (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "ソースリスト %3$s の %2$u 個目の節 '%1$s' は不明です"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "コマンドラインで指定されたファイル %s はサポートされていません"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "sources.list に 'ソース' URI を指定する必要があります"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "%s を整数に変換できません: 範囲外"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視され"
+"るか、古いものが代わりに使われます。"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "アップグレードパッケージを検出しています"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "ヒット:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "取得:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "無視:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "エラー:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%sB を %s で取得しました (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [処理中]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"メディア変更: \n"
+" '%s'\n"
+"とラベルの付いたディスクをドライブ '%s' に入れて [Enter] キーを押してくださ"
+"い\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "依存関係を解決しています ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " 失敗しました。"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "依存関係を訂正できません"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "アップグレードセットを最小化できません"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " 完了"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれ"
+"ません。"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"未解決の依存関係です。'apt --fix-broken install' を実行してみてください (また"
+"は解法を明示してください)。"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "ソート中"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "注意、タスク '%2$s' のために '%1$s' を選択します\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "注意、glob '%2$s' のために '%1$s' を選択します\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "注意、regex '%2$s' のために '%1$s' を選択します\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "パッケージ %s は、以下によって提供される仮想パッケージです:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr "[インストール済み]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr "[候補バージョンでない]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "インストールするには、明示的にいずれかを選択する必要があります。"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"パッケージ %s は使用できませんが、別のパッケージから参照されます。\n"
+"これは、パッケージが欠落しているか、廃止されたか、または別のソース\n"
+"からのみ利用可能であることを意味します。\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "しかし、以下のパッケージが置き換えます:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "パッケージ '%s' にはインストール候補がありません"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "'%s' のような仮想パッケージを削除することはできません\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"パッケージ '%s' はインストールされていないため削除もされません。削除したかっ"
+"たのは '%s' でしょうか?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "パッケージ '%s' はインストールされていないため削除もされません\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "注意、'%2$s' の代わりに '%1$s' を選択します\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "最も使用されているコマンド:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "利用可能なコマンドの詳細は %s を参照してください。"
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"設定オプションと構文は apt.conf(5) に詳述されています。\n"
+"ソースを設定する方法の詳細は sources.list(5) で見つけることができます。\n"
+"パッケージとバージョンの選択は apt_preferences(5) で表現できます。\n"
+"セキュリティの詳細は apt-secure(8) を参照してください。\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "この APT は Super Cow Powers 化されています。"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "この APT helper は Super Meep Powers 化されています。"
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes は時代遅れです、代わりに --allow で始まるオプションのいずれかを使"
+"用します。"
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "パッケージが見つかりません"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "警告: 以下のパッケージは認証されていません!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "認証の警告は上書きされました。\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "いくつかのパッケージを認証できませんでした"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "検証なしにこれらのパッケージをインストールしますか?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"認証されていないパッケージがあり、-y オプションが --allow-unauthenticated な"
+"しで使用されました"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "%s の空き領域を測定できません"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "%s に充分な空きスペースがありません。"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "ダウンロードディレクトリをロックできません"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"インストールすることができないパッケージがありました。おそらく、あり得\n"
+"ない状況を要求したか、(不安定版ディストリビューションを使用しているの\n"
+"であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移\n"
+"動されていないことが考えられます。"
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "以下の情報がこの問題を解決するために役立つかもしれません:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "壊れたパッケージ"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"いくつかのアーカイブを取得できません。apt-get update を実行するか --fix-"
+"missing オプションを付けて試してみてください。"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "内部エラー、InstallPackages が壊れたパッケージで呼び出されました!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "パッケージを削除しなければなりませんが、削除が無効になっています。"
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"不可欠パッケージが削除され、-y オプションが --allow-remove-essential なしで使"
+"用されました"
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"パッケージがダウングレードされ、-y オプションが --allow-downgrades なしで使用"
+"されました。"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"保留パッケージが変更され、-y オプションが --allow-change-held-packages なしで"
+"使用されました。"
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "内部エラー、調整が終わっていません"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"おっと、サイズがマッチしません。apt@packages.debian.org にメールしてください"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "%2$sB 中 %1$sB のアーカイブを取得する必要があります。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "%sB のアーカイブを取得する必要があります。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "この操作後に追加で %sB のディスク容量が消費されます。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "この操作後に %sB のディスク容量が解放されます。\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Trivial Only が指定されましたが、これは簡単な操作ではありません。"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Yes, do as I say!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"重大な問題を引き起こす可能性のあることをしようとしています。\n"
+"続行するには、'%s' というフレーズをタイプしてください。\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "中断しました。"
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "続行しますか?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "いくつかのファイルの取得に失敗しました"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "ダウンロードオンリーモードでパッケージのダウンロードが完了しました"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing とメディア交換は現在同時にはサポートされていません"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "足りないパッケージを直すことができません。"
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "インストールを中断します。"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"以下のパッケージは、全ファイルが別のパッケージで上書きされたため、\n"
+"システムから消えました:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "注意: これは dpkg により自動でわざと行われれます。"
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"一連のものを削除するようになっていないので、AutoRemover を開始できません"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"AutoRemover が、本来起きるべきでない何かを壊したようです。\n"
+"apt にバグ報告を送ってください。"
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "内部エラー、AutoRemover が何かを破壊しました"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"以下のパッケージが自動でインストールされましたが、もう必要とされていません:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu つのパッケージが自動でインストールされましたが、もう必要とされていませ"
+"ん:\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "これを削除するには '%s' を利用してください。"
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "以下の追加パッケージがインストールされます:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "提案パッケージ:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "推奨パッケージ:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"%s はすでにインストール済みで upgrade がセットされていないため、インストール"
+"をスキップします。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"%s はインストールされておらず、アップグレードだけの要求なので、インストール"
+"をスキップします。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "%s はダウンロードできないため、再インストールは不可能です。\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s はすでに最新バージョン (%s) です。\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s は手動でインストールしたと設定されました。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "'%3$s' のバージョン '%1$s' (%2$s) を選択しました\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "'%4$s' のために '%3$s' のバージョン '%1$s' (%2$s) を選択しました\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "一覧表示"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+"追加バージョンが %i 件あります。表示するには '-a' スイッチを付けてください。"
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"注意: これはシミュレーションにすぎません!\n"
+" %s は実際の実行に root 権限を必要とします。\n"
+" ロックが非アクティブであることから、今この時点の状態に妥当性が\n"
+" あるとは言い切れないことに注意してください!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "不明"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[インストール済み、%s にアップグレード可]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[インストール済み、ローカル]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[インストール済み、自動削除可]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[インストール済み、自動]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[インストール済み]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[%s からアップグレード可]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[設定が残存]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "しかし、%s はインストールされています"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "しかし、%s はインストールされようとしています"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "しかし、インストールすることができません"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "しかし、これは仮想パッケージです"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "しかし、インストールされようとしていません"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "しかし、インストールされていません"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " または"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "以下のパッケージには満たせない依存関係があります:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "以下のパッケージが新たにインストールされます:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "以下のパッケージは「削除」されます:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "以下のパッケージは保留されます:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "以下のパッケージはアップグレードされます:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "以下のパッケージは「ダウングレード」されます:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "以下の変更禁止パッケージは変更されます:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (%s のため)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"警告: 以下の不可欠パッケージが削除されます。\n"
+"何をしようとしているか本当にわかっていない場合は、実行してはいけません!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "アップグレード: %lu 個、新規インストール: %lu 個、"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "再インストール: %lu 個、"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "ダウングレード: %lu 個、"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "削除: %lu 個、保留: %lu 個。\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu 個のパッケージが完全にインストールまたは削除されていません。\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Y/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[y/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "検索パターンはちょうど 1 つだけ指定してください"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "全文検索"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"追加レコードが %i 件あります。表示するには '-a' スイッチを付けてください。"
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "実際のパッケージではありません (仮想)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "パッケージファイル:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "キャッシュが同期しておらず、パッケージファイルを相互参照できません"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pin されたパッケージ:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s 優先度 %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " インストールされているバージョン: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " 候補: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(なし)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " バージョンテーブル:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "アーキテクチャ '%s' 用のパッケージは見つかりませんでした"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "パッケージ '%s' のバージョン '%s' は見つかりませんでした"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "リリース '%2$s' にはパッケージ '%1$s' は見つかりませんでした"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "'%2$s' の代わりに '%1$s' をソースパッケージとして選出しています\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "パッケージ '%2$s' のバージョン '%1$s' は見つかりませんでした"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"ソースを取得するには少なくとも 1 つのパッケージ名を指定する必要があります"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "%s のソースパッケージが見つかりません"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"注意: '%s' パッケージは以下の場所の '%s' バージョン制御システムで保守されてい"
+"ます:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"パッケージの最新の (まだリリースされていないかもしれない) 更新を取得するに"
+"は、\n"
+"%s\n"
+"を使用してください。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "すでにダウンロードされたファイル '%s' をスキップします\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "%2$sB 中 %1$sB のソースアーカイブを取得する必要があります。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "%sB のソースアーカイブを取得する必要があります。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "ソース %s を取得\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "いくつかのアーカイブの取得に失敗しました。"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "すでに %s に展開されたソースがあるため、展開をスキップします\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "展開コマンド '%s' が失敗しました。\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+"'dpkg-dev' パッケージがインストールされていることを確認してください。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "ビルドコマンド '%s' が失敗しました。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "%s のビルド依存情報を取得できません"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s にはビルド依存情報が指定されていません。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"%s に利用可能なアーキテクチャ情報がありません。セットアップのために apt."
+"conf(5) の APT::Architectures を参照してください。"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"ビルド依存関係をチェックするパッケージを少なくとも 1 つ指定する必要があります"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "注意、ビルドの依存関係を取得するためディレクトリ '%s' を使用します\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "注意、ビルドの依存関係を取得するためファイル '%s' を使用します\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "ビルド依存関係の処理に失敗しました"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "%s の解析に失敗しました。再編集しますか? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+"'%s' ファイルが変更されています。「apt-get update」を実行してください。\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "パッケージ %s のバージョン %s には解決不可能な依存関係があります:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "update コマンドは引数をとりません"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"アップグレードできるパッケージが %i 個あります。表示するには 'apt list --"
+"upgradable' を実行してください。\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "パッケージはすべて最新です。"
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "%s は引数をとりません"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "パッケージ名総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "パッケージ構造総数: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " 通常パッケージ: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " 純粋仮想パッケージ: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " 単一仮想パッケージ: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " 複合仮想パッケージ: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " 欠落: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "個別バージョン総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "個別説明総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "依存関係総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "バージョン/ファイル関係総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "説明/ファイル関係総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "提供マッピング総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Glob 文字列の総数: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "総空き容量: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "総占有容量: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"このコマンドは時代遅れです。'apt-mark showauto' を代わりに使用してください。"
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"使用方法: apt-cache [オプション] コマンド\n"
+" apt-cache [オプション] show パッケージ名1 [パッケージ名2 ...]\n"
+"\n"
+"apt-cache はインストール済みとインストール可能なパッケージの情報を\n"
+"問い合わせて表示します。例えば apt-get の「更新」コマンドによって\n"
+"ローカルキャッシュに取得されたデータと排他的に動作します。したがって、\n"
+"最後の更新が古すぎる場合には、表示される情報は時代遅れかもしれません。\n"
+"しかし、引き換えに、apt-cache は設定されたソースの可用性とは独立して\n"
+"動作します (例えばオフライン)。\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "ソースレコードを表示する"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "正規表現パターンによってパッケージ一覧を検索する"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "パッケージの生の依存情報を表示する"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "パッケージの生の逆依存情報を表示する"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "パッケージの情報を表示する"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "システム内のすべてのパッケージ名一覧を表示する"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "ポリシー設定情報を表示する"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "このディスクに、'Debian 5.0.3 Disk 1' のような名前を付けてください"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "ディスクをドライブに入れて [Enter] キーを押してください"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "'%s' を '%s' にマウントできませんでした"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"CD-ROM が自動検出されなかったか、デフォルトで利用するマウントポイントに見当た"
+"りませんでした。\n"
+"CD-ROM のマウントポイントを設定するために --cdrom オプションを試すことができ"
+"ます。\n"
+"CD-ROM の自動検出およびマウントポイントの詳細については、'man apt-cdrom' を参"
+"照してください。"
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+"あなたの持っている CD セットの残り全部に、この手順を繰り返してください。"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"使用方法: apt-cdrom [オプション] コマンド\n"
+"\n"
+"apt-cdrom は、CD-ROM、USB フラッシュドライブやその他のリムーバブル\n"
+"メディアを APT のパッケージソースに追加するために使用されます。\n"
+"マウントポイントとデバイス情報は、apt.conf(5)、udev(7) と fstab(5)\n"
+"から取得されます。\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "引数がペアではありません"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"使用方法: apt-config [オプション] コマンド\n"
+"\n"
+"apt-config はすべての APT ツールで使用される設定へのインター\n"
+"フェースで、主にデバッグとシェルスクリプト向けです。\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "シェルの評価を経由して設定値を取得"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "アクティブな設定を表示"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"使用方法: apt-dump-solver\n"
+"\n"
+"apt-dump-solver は EDSP シナリオをファイルに残し、\n"
+"オプションで別のソルバに転送するインターフェイスです。\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"使用方法: apt-extracttemplates ファイル名1 [ファイル名2 ...]\n"
+"\n"
+"apt-extracttemplates は debian パッケージから設定とテンプレートファイルを\n"
+"抽出するためのツールです。パッケージのインストールの前に設定に関する質問を\n"
+"要求する debconf(1) によって主に使用されます。\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr ""
+"debconf のバージョンを取得できません。debconf はインストールされていますか?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "パッケージ %s が見つかりません"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s は自動でインストールしたと設定されました。\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"このコマンドは時代遅れです。'apt-mark auto' および 'apt-mark manual' を代わり"
+"に使用してください。"
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "内部エラー、問題リゾルバが何かを破壊しました"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "サポートされているモジュール:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"使用法: apt-get [オプション] コマンド\n"
+" apt-get [オプション] install|remove パッケージ名1 [パッケージ名"
+"2 ...]\n"
+" apt-get [オプション] source パッケージ名1 [パッケージ名2 ...]\n"
+"\n"
+"apt-get は、認証されたソースからのパッケージと情報の検索、\n"
+"および依存関係を伴うパッケージのインストール、アップグレード、\n"
+"削除のためのコマンドラインインターフェースです。\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "新しいパッケージリストを取得する"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "アップグレードを行う"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+"新規パッケージをインストールする (pkg は libc6.deb ではなく libc6 のように指"
+"定する)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+"新規パッケージをインストールする (pkg は libc6.deb ではなく libc6 のように指"
+"定する)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "パッケージを削除する"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "設定ファイルまで含めてパッケージを削除する"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "自動インストールされ使われていないすべてのパッケージを削除する"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "ディストリビューションをアップグレードする (apt-get(8) を参照)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "dselect の選択に従う"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "ソースパッケージの構築依存関係を設定する"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "ダウンロードしたアーカイブファイルを削除する"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "ダウンロードした古いアーカイブファイルを削除する"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "壊れた依存関係がないかチェックする"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "ソースアーカイブをダウンロードする"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "バイナリパッケージをカレントディレクトリにダウンロードする"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "指定のパッケージの変更履歴をダウンロードして表示する"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "引数として URL が 1 つ必要です"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "少なくとも URL / ファイル名を 1 組指定する必要があります"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "ダウンロード失敗"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec は %s のため失敗しました"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"使用法: apt-helper [オプション] コマンド\n"
+" apt-helper [オプション] cat-file ファイル ...\n"
+" apt-helper [オプション] download-file uri 目標パス\n"
+"\n"
+"apt-helper はシェルスクリプトが使用するさまざまなコマンドをバンドル\n"
+"しています。例えば、同じプロキシ設定や APT と同様のシステム取得。\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "指定した uri を目標パスにダウンロードする"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "SRV レコードを検索 (例えば _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "自動解凍とファイル結合"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "apt.conf を使ってプロキシを検出する"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"使用方法: apt-internal-solver\n"
+"\n"
+"apt-internal-planner は、デバッグなどの用途で、現在の内部プランナーを\n"
+"APT ファミリの外部プランナーのように使うためのインターフェイスです。\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"使用方法: apt-internal-solver\n"
+"\n"
+"apt-internal-solver は、デバッグなどの用途で、現在の内部リゾルバを\n"
+"APT ファミリの外部リゾルバのように使うためのインターフェイスです。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s をインストールされていないものとしてマークできません\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s は手動でインストールしたとすでに設定されています。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s は自動でインストールしたとすでに設定されています。\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "以下のパッケージが新たにインストールされます:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s はすでに保留に設定されています。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s はすでに保留されていません。\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "dpkg の実行に失敗しました。root 権限で実行していますか?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s は保留に設定されました。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "%s の保留を解除しました。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "%s は完全削除で選択されました。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "%s は削除で選択されました。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "%s はインストールで選択されました。\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Usage: apt-mark [オプション] {auto|manual} パッケージ1 [パッケージ2 ...]\n"
+"\n"
+"apt-mark は、パッケージを手動または自動でインストールされたものとして\n"
+"マークする簡単なコマンドラインインターフェイスです。また、dpkg(1) の\n"
+"パッケージ選択状態を操作したり、マークを特定せずにすべてのパッケージの\n"
+"一覧表示したりもできます。\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "指定のパッケージを自動でインストールされたものとしてマークする"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "指定のパッケージを手動でインストールしたものとしてマークする"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "指定のパッケージを自動でインストールされたものとしてマークする"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "パッケージを保留としてマークする"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "パッケージの保留を解除する"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "自動的にインストールされたパッケージの一覧を表示する"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "手作業でインストールしたパッケージの一覧を表示する"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "保留されているパッケージの一覧を表示する"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "不明なパッケージレコードです!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"使用方法: apt-sortpkgs [オプション] ファイル名1 [ファイル名2 ...]\n"
+"\n"
+"apt-sortpkgs は、パッケージ情報ファイルをソートするシンプルなツールです。\n"
+"デフォルトではバイナリパッケージ情報でソートしますが、-s オプションを使って\n"
+"ソースパッケージの順序に切り替えることができます。\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"使用方法: apt [オプション] コマンド\n"
+"\n"
+"apt は、検索や管理、パッケージに関する情報を問い合わせるコマンドを\n"
+"提供するコマンドラインパッケージマネージャです。apt-get や apt-cache\n"
+"のような特化した APT ツールと同じ機能を提供しますが、デフォルトで\n"
+"対話的に使用するために適切なオプションを有効にします。\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "パッケージ名を基にパッケージの一覧を表示"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "パッケージの説明を検索"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "パッケージの詳細を表示"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "パッケージをインストール"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "パッケージをインストール"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "パッケージを削除"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "利用可能パッケージの一覧を更新"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "パッケージをインストール/更新してシステムをアップグレード"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "パッケージを削除/インストール/更新してシステムをアップグレード"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "ソース情報ファイルを編集"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "不正なデフォルト設定です!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "[Enter] キーを押すと続行します。"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "過去にダウンロードした .deb ファイルを削除しますか?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "展開中に何らかのエラーが発生しました。インストールされたパッケージを"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "設定します。これにより、エラーが複数出るか、依存関係の欠如に"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "よるエラーが出るかもしれません。これには問題はなく、上記のメッセージ"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "が重要です。これを修正して「導入」を再度実行してください"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "入手可能情報をマージしています"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "パッケージ拡張子リストが長すぎます"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "ディレクトリ %s の処理中にエラーが発生しました"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "ソース拡張子リストが長すぎます"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Contents ファイルへのヘッダの書き込み中にエラーが発生しました"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Contents %s の処理中にエラーが発生しました"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"使用方法: apt-ftparchive [オプション] コマンド\n"
+"コマンド: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive は Debian アーカイブ用のインデックスファイルを生成しま\n"
+"す。全自動のものから、dpkg-scanpackages と dpkg-scansources の代替機能\n"
+"となるものまで、多くの生成方法をサポートしています。\n"
+"\n"
+"apt-ftparchive は .deb のツリーから Packages ファイルを生成します。\n"
+"Packages ファイルは MD5 ハッシュやファイルサイズに加えて、各パッケージ\n"
+"のすべての制御フィールドの内容を含んでいます。Priority と Section の値\n"
+"を強制するために override ファイルがサポートされています。\n"
+"\n"
+"同様に apt-ftparchive は .dsc のツリーから Sources ファイルを生成しま\n"
+"す。--source-override オプションを使用するとソース override ファイルを\n"
+"指定できます。\n"
+"\n"
+"'packages' および 'sources' コマンドはツリーのルートで実行する必要があ\n"
+"ります。BinaryPath には再帰検索のベースディレクトリを指定し、override \n"
+"ファイルは override フラグを含んでいる必要があります。もし pathprefix \n"
+"が存在すればファイル名フィールドに付加されます。debian アーカイブでの\n"
+"使用方法の例:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"オプション:\n"
+" -h このヘルプを表示する\n"
+" --md5 MD5 の生成を制御する\n"
+" -s=? ソース override ファイル\n"
+" -q 表示を抑制する\n"
+" -d=? オプションのキャッシュデータベースを選択する\n"
+" --no-delink delinking デバッグモードを有効にする\n"
+" --contents contents ファイルの生成を制御する\n"
+" -c=? 指定の設定ファイルを読む\n"
+" -o=? 任意の設定オプションを設定する"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "選択にマッチするものがありません"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "パッケージファイルグループ `%s' に見当たらないファイルがあります"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB が壊れていたため、ファイル名を %s.old に変更しました"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB が古いため、%s のアップグレードを試みます"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"DB フォーマットが無効です。apt の古いバージョンから更新したのであれば、データ"
+"ベースを削除し、再作成してください。"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "DB ファイル %s を開くことができません: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr ".dsc の読み取りに失敗しました"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "アーカイブにコントロールレコードがありません"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "カーソルを取得できません"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - メモリの割り当てに失敗しました"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "'%s' は未知の圧縮アルゴリズムです"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "圧縮出力 %s には圧縮セットが必要です"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "子プロセスへの IPC パイプの作成に失敗しました"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "fork に失敗しました"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "圧縮子プロセス"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "内部エラー、%s の作成に失敗しました"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "子プロセス/ファイルへの IO が失敗しました"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "MD5 の計算中に読み込みに失敗しました"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "'%s' をオープンできません"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "不正な override %s %llu 行目 (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "override ファイル %s を読み込むのに失敗しました"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "不正な override %s %llu 行目 #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "不正な override %s %llu 行目 #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "不正な override %s %llu 行目 #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "警告: ディレクトリ %s が読めません\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "警告: %s の状態を取得できません\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "エラー: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "警告: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "エラー: エラーが適用されるファイルは "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s の解決に失敗しました"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "ツリー内での移動に失敗しました"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s のオープンに失敗しました"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " リンク %s [%s] を外します\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** %s を %s にリンクするのに失敗しました"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " リンクを外す制限の %sB に到達しました。\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "アーカイブにパッケージフィールドがありませんでした"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s に override エントリがありません\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %1$s メンテナは %3$s ではなく %2$s です\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s にソース override エントリがありません\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s にバイナリ override エントリがありません\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "ヘッダの待機中です"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP サーバが不正なリプライヘッダを送信してきました"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "不正なヘッダ行です"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP サーバが不正な Content-Length ヘッダを送信してきました"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP サーバが不正な Content-Range ヘッダを送信してきました"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "HTTP サーバのレンジサポートが壊れています"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "不明な日付フォーマットです"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "不正なヘッダです"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "接続失敗"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"サーバ/プロキシからの不正な応答のため自動的に %s を無効にしました。(man 5 "
+"apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "内部エラー"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "CD-ROM データベース %s を読み込むことができません"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"この CD-ROM を APT に認識させるには apt-cdrom を使用してください。新しい CD-"
+"ROM を追加するために apt-get update は使用できません。"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD が違います"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "%s の CD-ROM は使用中のためアンマウントすることができません。"
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "ディスクが見つかりません。"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "ファイルが見つかりません"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "%s ドメインへの直接の接続はデフォルトでブロックされています。"
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "%s (%s) へ接続しています"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "%s (%s) へ接続しています"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "%s (f=%u t=%u p=%u) に対するソケットを作成できません"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "%s:%s (%s) への接続を開始できません。"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "失敗"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "%s:%s (%s) へ接続できませんでした。"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "%s:%s (%s) へ接続できませんでした。接続がタイムアウトしました"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "%s へ接続しています"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "'%s' を解決できませんでした"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "'%s' が一時的に解決できません"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "'%s:%s' の解決中にシステムエラーが発生しました"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "'%s:%s' (%i - %s) の解決中に何か問題が起こりました"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "%s:%s へ接続できません:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "状態の取得に失敗しました"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "不正な URI です。ローカルの URI は // で始まってはいけません"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "ログインしています"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "ピアネームを決定することができません"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "ローカルネームを決定することができません"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "サーバから接続を拒絶されました。応答: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER 失敗、サーバ応答: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS 失敗、サーバ応答: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"プロキシサーバが指定されていますが、ログインスクリプトが設定されていません。"
+"Acquire::ftp::ProxyLogin が空です。"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "ログインスクリプトのコマンド '%s' 失敗、サーバ応答: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE 失敗、サーバ応答: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "接続タイムアウト"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "サーバが接続を切断しました"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "レスポンスがバッファをオーバフローさせました。"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "プロトコルが壊れています"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "ソケットを作成できません"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "データソケットへ接続できませんでした。接続がタイムアウトしました"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "パッシブソケットに接続できません。"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo はリスニングソケットを取得できませんでした"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "ソケットをバインドできませんでした"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "ソケットをリスンできませんでした"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "ソケットの名前を特定できませんでした"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "PORT コマンドを送信できません"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "未知のアドレスファミリ %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT に失敗しました。サーバ応答: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "データソケット接続タイムアウト"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "接続を accept できません"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "ファイルのハッシュでの問題"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "ファイルを取得できません。サーバ応答 '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "データソケットタイムアウト"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "データ転送に失敗しました。サーバ応答 '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "問い合わせ"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "呼び出せません"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"署名されたファイルが有効ではなく、'%s' を得ました (ネットワークに認証が必要?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "少なくとも 1 つの不正な署名が発見されました。"
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "内部エラー: 正しい署名ですが、鍵指紋を確定できません?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"署名を検証するための 'apt-key' の実行ができませんでした (gnupg はインストール"
+"されていますか?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "apt-key の実行中に未知のエラーが発生"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "鍵 %s による署名は弱い digest アルゴリズム (%s) を使用しています"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "以下の署名が無効です:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "公開鍵を利用できないため、以下の署名は検証できませんでした:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "ファイルへの書き込みでエラーが発生しました"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "リモート側で接続がクローズされてサーバからの読み込みに失敗しました"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "サーバからの読み込みに失敗しました"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "ファイルへの書き込みでエラーが発生しました"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "select に失敗しました"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "接続タイムアウト"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "出力ファイルへの書き込みでエラーが発生しました"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "変更時刻の設定に失敗しました"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "途中で接続がクローズされました"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "空のファイルは有効なアーカイブと認められません"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "不正なアーカイブメンバーヘッダ %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s を削除しました"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Package ファイル %s が同期していません。"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "パッケージインデックスファイルが壊れています。パッケージ %s に Filename: "
+#~ "フィールドがありません。"
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "ミラーファイル '%s' が見つかりません "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "ミラーファイル '%s' を読み込めません"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "ミラーファイル '%s' のエントリが見つかりません"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[ミラー: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "設定ファイル %s をオープンできませんでした"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s をオープンしています"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "期待されるエントリ '%s' が Release ファイル内に見つかりません (誤った "
+#~ "sources.list エントリか、壊れたファイル)"
diff --git a/po/km.po b/po/km.po
new file mode 100644
index 0000000..afb65b0
--- /dev/null
+++ b/po/km.po
@@ -0,0 +1,4301 @@
+# translation of apt_po_km.po to Khmer
+# translation of apt_po_km.po to
+# This file is put in the public domain.
+#
+# Eng Vannak <evannak@khmeros.info>, 2006.
+# Poch Sokun <sokun_poch@khmeros.info>, 2006.
+# auk piseth <piseth_dv@khmeros.info>, 2006.
+# Khoem Sokhem <khoemsokhem@khmeros.info>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2006-10-10 09:48+0700\n"
+"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
+"Language-Team: Khmer <support@khmeros.info>\n"
+"Language: km\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "ហត្ថលេខា​ប័ណ្ណសា​រមិន​ត្រឹមត្រូវ​"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "កំហុស​ក្នុងការ​អានបឋមកថា​សមាជិក​ប័ណ្ណសារ"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "បឋមកថា​សមាជិក​ប័ណ្ណសារ"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "ប័ណ្ណសារ ខ្លីពេក"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "បរាជ័យ​ក្នុងការ​អាន​បឋមកថា​ប័ណ្ណសារ"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "ប័ណ្ណសារ​បាន​ខូច​"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar ឆេកសាំ​បាន​បរាជ័យ ប័ណ្ណសារ​បាន​ខូច"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "មិន​ស្គាល់​ប្រភេទ​បឋមកថា​ TAR %u ដែលជា​សមាជិក​ %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "នេះ​ជាមិនមែនជា​ប័ណ្ណសារ​ DEB ​ត្រឹមត្រូវទេ បាត់បង់សមាជិក​ '%s'​"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "កំហុស​ខាងក្នុង ​មិន​អាច​កំណត់​ទីតាំង​សមាជិក​ %s បានឡើយ"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "ឯកសារត្រួតពិនិត្យ​ដែលមិនអាច​ញែកបាន"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "បរាជ័យ​ក្នុងការ​សរសេរ​ឯកសារ %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "បរាជ័យ​ក្នុងការ​បិទឯកសារ %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "ផ្លូវ​ %s វែង​ពេក"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "កំពុង​ពន្លា​ %s ច្រើន​ជាង​ម្តង​"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "ថត​ %s ត្រូវបាន​បង្វែរ"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "កញ្ចប់ ​កំពុង​ព្យាយាម​សរសេរ​ទៅកាន់​គោលដៅ​បង្វែរ​ %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "ផ្លូវ​បង្វែរ វែងពេក"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការថ្លែង %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "បរាជ័យ​ក្នុង​ការ​ប្តូរ​ឈ្មោះ %s ទៅ %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "ថត​ %s ត្រូវ​បាន​ជំនួស​ដោយ​មិនមែន​ជា​ថត​"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "បរាជ័យ​ក្នុងការ​ដាក់ថ្នាំង​នៅក្នុង​ធុង​រាយប៉ាយ​របស់វា"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "ផ្លូវ​វែង​ពេក"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "សរសេរ​ជាន់​លើកញ្ចប់ផ្គួផ្គង​ដោយ​គ្មាន​កំណែ​សម្រាប់ %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "ឯកសារ​ %s/%s សរសេរជាន់​ពីលើ​មួយ​ក្នុង​កញ្ចប់ %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "មិន​អាច​អាន​ %s បានឡើយ"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "មិន​អាច​ថ្លែង %s បានឡើយ"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "ទម្លាក់​ថ្នាំង​ដែល​បាន​ហៅ​លើ​ថ្នាំងដែល​នៅតែតភ្ជាប់"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "បរាជ័យ​ក្នុងការ​ដាក់ទីតាំង​ធាតុ​ដែលរាយប៉ាយ !"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "បរាជ័យ​ក្នុងការ​បម្រុងទុក​ការបង្វែរ"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "កំហុស​ខាងក្នុង នៅក្នុង AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "កំពុង​ព្យាយាម​សរសេរ​ជាន់​ពីលើ​ការបង្វែរ %s -> %s និង​ %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "ការបន្ថែម​ស្ទួន នៃការបង្វែរ​ %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "ឯកសារ​កំណត់​រចនាសម្ព័ន្ធ​ស្ទួន​ %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "ថត​ %s ត្រូវបាន​បង្វែរ"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "ថត​ %s ត្រូវបាន​បង្វែរ"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "ថត​ %s ត្រូវបាន​បង្វែរ"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "ថត​ %s ត្រូវបាន​បង្វែរ"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "ថត​ %s ត្រូវបាន​បង្វែរ"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការ​អាន​តំណ​ %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Hash Sum mismatch"
+msgstr "MD5Sum មិន​ផ្គួផ្គង​"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "ប្តូរ​ឈ្មោះ​បានបរាជ័យ​, %s (%s -> %s) ។"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "ទំហំ​មិនបាន​ផ្គួផ្គង​"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "ប្រតិបត្តិការ​មិន​ត្រឹមត្រូវ​ %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "ការសរសេរ​មានកំហុស"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "បរាជ័យ​ក្នុង​ការ​ទៅ​ប្រមូល​យក​ %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"ខ្ញុំ​មិន​អាច​រកទីតាំង​ឯកសារ​សម្រាប់​កញ្ចប់ %s បាន​ទេ ។ ​មាន​ន័យ​ថា​អ្នក​ត្រូវការ​ជួសជុល​កញ្ចប់​នេះ​ដោយ​ដៃ ។ "
+"(ដោយសារ​​បាត់​ស្ថាបត្យកម្ម)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "កំពុង​តភ្ជាប់​ទៅ​កាន់​ %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "មិនអាច​រកឃើញ​កម្មវិធី​បញ្ជា​វិធីសាស្ត្រ %s ឡើយ ។"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "ពិនិត្យ​ប្រសិន​បើកញ្ចប់ 'dpkg-dev' មិន​ទាន់​បាន​ដំឡើង​ ។\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "វិធីសាស្ត្រ​ %s មិន​អាច​ចាប់​ផ្តើម​ត្រឹមត្រូវ​ទេ​"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "សូម​បញ្ចូល​ស្លាក​ឌីស​ ៖ '%s' ក្នុង​ដ្រាយ​ '%s' ហើយ​សង្កត់​ចូល ។"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "រាយបញ្ជី​ថត​ %s គឺ​បាត់បង់​ ។"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "ថត​ប័ណ្ណសារ​ %s គឺ​បាត់បង់​ ។"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "មិន​អាច​ចាក់​សោ​ថត​បញ្ជីបានឡើយ"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "ប្រភេទ​ឯកសារ​លិបិក្រម​ '%s' មិនត្រូវ​បាន​គាំទ្រ​"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "កំពុង​ទៅ​យក​ឯកសារ %li នៃ %li (នៅសល់ %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "កំពុង​ទៅយក​ឯកសារ %li នៃ %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "កញ្ចប់ %s ត្រូវការឲ្យដំឡើង ប៉ុន្តែ​ ខ្ញុំ​មិន​អាច​រក​ប័ណ្ណសារ​សម្រាប់​វា​បាន​ទេ​ ។"
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"កំហុស pkgProblemResolver::ដោះស្រាយ​សញ្ញាបញ្ឈប់​ដែលបានបង្កើត នេះ​ប្រហែលជា បង្កដោយកញ្ចប់​"
+"ដែលបាន​ទុក ។"
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "មិន​អាច​កែ​បញ្ហាបានទេេ អ្កបានទុក​កញ្ចប់​ដែល​ខូច ។។"
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "បញ្ជី​កញ្ចប់​ ឬ ឯកសារ​ស្ថានភាព​មិន​អាចត្រូវបាន​​ញែក ​​ឬ ត្រូវបាន​បើកបានឡើយ​​ ។"
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "អ្នកប្រហែលជា​ចង់ភាពទាន់សម័យ apt-get ដើម្បី​កែ​បញ្ហា​ទាំងនេះ"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "មិន​អាច​អាន​បញ្ជី​ប្រភព​បាន​ឡើយ​ ។"
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Regex កំហុស​ការចងក្រង​ - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "រក​មិន​ឃើញ​ការ​ចេញ​ផ្សាយ​ '%s' សម្រាប់​ '%s' ឡើយ"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "រក​មិន​ឃើញ​កំណែ​ '%s' សម្រាប់ '%s'"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "មិន​អាច​កំណត់​ទីតាំង​កញ្ចប់ %s បានឡើយ"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "បន្ទាត់​ %u មាន​ប្រវែង​វែងពេកនៅ​ក្នុង​បញ្ជី​ប្រភព​ %s ។"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Unmounting CD-ROM...\n"
+msgstr "មិនកំពុងម៉ោន ស៊ីឌី​-រ៉ូម​ ទេ..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "ប្រើប្រាស់ចំណុចម៉ោន​ ស៊ីឌី​-រ៉ូម​ %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "កំពុង​រង់ចាំឌីស​...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "កំពុង​ម៉ោន​ ស៊ីឌី​-រ៉ូម​...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "កំពុង​ធ្វើអត្តសញ្ញាណនា​... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "បានទុក​ស្លាក ៖ %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "កំពុង​ស្កេន​ឌីស​សម្រាប់​​ឯកសារ​លិបិក្រម​...\n"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr "បានរកឃើញ លិបិក្រម​កញ្ចប់ %i លិបិក្រម​ប្រភព%i និង ហត្ថលេខា %i \n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "Found label '%s'\n"
+msgstr "បានទុក​ស្លាក ៖ %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "នោះមិនមែនជាឈ្មោះត្រឹមត្រូវទេ សូមព្យាយាម​ម្ដងទៀត ។\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"ឌីស​នេះ​ត្រូវ​បាន​ហៅ​ ៖ \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "កំពុង​ចម្លង​បញ្ជី​កញ្ចប់..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "កំពុងសរសេរ​បញ្ជី​ប្រភព​ថ្មី\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "ធាតុបញ្ចូល​បញ្ជីប្រភព​សម្រាប់​ឌីស​នេះគឺ ៖\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "មិនអាច​ប្ដូរទៅ %s បានឡើយ"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "មិនអាច​ថ្លែង %s បានឡើយ ។"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "មិនអាច​ថ្លែង ចំណុចម៉ោន %s បានឡើយ"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "បរាជ័យក្នុងការ​ថ្លែង ស៊ីឌីរ៉ូម"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "ជម្រើស​បន្ទាត់​ពាក្យបញ្ជា '%c' [from %s] មិនស្គាល់ឡើយ ។"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "មិនយល់​ពី​ជម្រើស​បន្ទាត់​ពាក្យ​បញ្ជា %s ឡើយ"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "ជម្រើស​បន្ទាត់ពាក្យ​បញ្ជា​ %s មិនមែនជាប៊ូលីនទេ"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "ជម្រើស​ %s ត្រូវការ​អាគុយម៉ង់មួយ ។"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "ជម្រើស %s ៖ ការបញ្ជាក់​ធាតុ​កំណត់រចនាសម្ព័ន្ធត្រូវតែមាន =<val> មួយ ។"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "ជម្រើស​ %s ត្រូវ​ការ​អាគុយម៉ង់​ចំនួន​គត់​ មិន​មែន​ '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "ជម្រើស​ '%s' វែងពេក"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "មិនបានយល់អំពី​ការស្គាល់​ %s ឡើយ សូមព្យាយមយក​ ពិត​ ​​​ឫ មិន​ពិត ។"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "ប្រតិបត្តិការ​មិន​ត្រឹមត្រូវ​ %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "មិន​បាន​​ទទួល​ស្គាល់​ប្រភេទ​អក្សរ​សង្ខេប ៖ '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "កំហុស​វាក្យ​សម្ពន្ធ %s:%u ៖ ប្លុក​ចាប់​ផ្តើម​​ដោយ​គ្មាន​ឈ្មោះ​ ។"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "កំហុស​​វាក្យ​សម្ពន្ធ %s:%u ៖ ស្លាក​ដែលបាន Malformed"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "កំហុស​​វាក្យ​សម្ពន្ធ %s:%u ៖ តម្លៃ​ឥតបានការ​នៅ​ក្រៅ​"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "កំហុសវាក្យ​សម្ពន្ធ %s:%u ៖ សេចក្ដីបង្គាប់​អាចត្រូវបានធ្វើ​តែនៅលើ​កម្រិត​កំពូល​តែប៉ុណ្ណោះ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "កំហុស​វាក្យសម្ពន្ធ %s:%u ៖ មាន​ការរួមបញ្ចូល​ដែលដាក់​រួមគ្នា​យ៉ាងច្រើន"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "កំហុសវាក្យ​សម្ពន្ធ %s:%u ៖ បានរួម​បញ្ចូល​ពី​ទីនេះ​"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "កំហុស​វាក្យ​សម្ពន្ធ %s:%u ៖ សេចក្ដី​បង្គាប់​ដែល​មិនបានគាំទ្រ '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "កំហុសវាក្យ​សម្ពន្ធ %s:%u ៖ សេចក្ដីបង្គាប់​អាចត្រូវបានធ្វើ​តែនៅលើ​កម្រិត​កំពូល​តែប៉ុណ្ណោះ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "កំហុស​វាក្យសម្ពន្ធ %s:%u ៖ សារឥតបានការ​បន្ថែម ដែលនៅខាងចុង​ឯកសារ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "មានបញ្ហា​ក្នុងការ​ផ្ដាច់តំណ​ឯកសារ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "មិន​ប្រើប្រាស់​ការចាក់សោ សម្រាប់តែឯកសារចាក់សោ​ដែលបានតែអានប៉ុណ្ណោះ %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "មិន​អាច​បើក​ឯកសារ​ចាក់សោ​ %s បានឡើយ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "មិនប្រើ​ការចាក់សោ សម្រាប់ nfs ឯកសារ​ចាក់សោដែលបានម៉ោន%s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "មិន​អាច​ចាក់សោ %s បានឡើយ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "រង់ចាំប់​ %s ប៉ុន្តែ ​វា​មិន​នៅទីនោះ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "ដំណើរការ​រង​ %s បាន​ទទួល​កំហុស​ការ​ចែកជាចម្រៀក​ ។"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "ដំណើរការ​រង​ %s បាន​ទទួល​កំហុស​ការ​ចែកជាចម្រៀក​ ។"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "ដំណើរការ​រង​ %s បានត្រឡប់​ទៅកាន់​កូដ​មាន​កំហុស​ (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "ដំណើរការ​រង​ %s បានចេញ ដោយ​មិន​រំពឹង​ទុក​ "
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "ការអាន​មានកំហុស"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "ការសរសេរ​មានកំហុស"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "មាន​បញ្ហា​ក្នុងការ​បិទ​ឯកសារ"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "បរាជ័យ​ក្នុង​ការ​បង្កើត​ដំណើរការ​រង​ IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "បរាជ័យ​ក្នុង​ការ​ប្រតិបត្តិ​កម្មវិធី​បង្ហាប់ "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "មិន​អាច​បើក​ឯកសារ​ %s បានឡើយ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "មិន​អាច​បើក​បំពុង​សម្រាប់​ %s បានឡើយ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "អាន​, នៅតែ​មាន %lu ដើម្បី​អាន​ ប៉ុន្តែ​គ្មាន​អ្វី​នៅសល់"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "សរសេរ​, នៅតែមាន​ %lu ដើម្បី​សរសេរ​ ប៉ុន្តែ​មិន​អាច​"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "មាន​បញ្ហា​ក្នុងការ​បិទ​ឯកសារ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "មានបញ្ហា​ក្នុង​ការធ្វើ​សមកាលកម្មឯកសារ​"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "មានបញ្ហា​ក្នុង​ការធ្វើ​សមកាលកម្មឯកសារ​"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "មិន​អាច​ថ្លែង %s បានឡើយ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "មិន​អាច​សរសេរ​ទៅ %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "មិនអាច mmap ឯកសារទទេ​បានឡើយ"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "មិន​អាច​បង្កើត​ mmap នៃ​ %lu បៃបានឡើយ"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "មិន​អាច​បើក​បំពុង​សម្រាប់​ %s បានឡើយ"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "មិន​អាចបើក​ %s បានឡើយ"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "មិន​អាច​ហៅ​ "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "មិន​អាច​បង្កើត​ mmap នៃ​ %lu បៃបានឡើយ"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "បរាជ័យ​ក្នុងការ​សរសេរ​ឯកសារ %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... កំហុស ​!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... ធ្វើរួច​"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... ធ្វើរួច​"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "ជម្រើស​ %s រក​មិន​ឃើញ​ឡើយ"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "មិនអាច​ញែក​ឯកសារកញ្ចប់ %s (1) បានឡើយ"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "ចំណាំ កំពុង​ជ្រើស​ %s ជំនួស​ %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "មិនអាច​ញែក​ឯកសារកញ្ចប់ %s (1) បានឡើយ"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "មិនអាច​ញែក​ឯកសារកញ្ចប់ %s (%d) បានឡើយ"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "មិន​អាច​ចាក់​សោ​ថត​បញ្ជីបានឡើយ"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "មិន​អាច​ចាក់​សោ​ថត​បញ្ជីបានឡើយ"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "កំពុងរៀបចំ​ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "កំពុងរៀបចំ​កំណត់រចនាសម្ព័ន្ធ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "កំពុងរៀបចំដើម្បី​ការយក​ចេញ​នៃ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "កំពុង​រៀបចំ​យក %s ចេញ​ទាំង​ស្រុង"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "បាន​ដំឡើង %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "កំពុង​កំណត់​រចនា​សម្ព័ន្ធ %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Directory '%s' missing"
+msgstr "រាយបញ្ជី​ថត​ %s គឺ​បាត់បង់​ ។"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "មិន​អាច​បើក​ឯកសារ​ %s បានឡើយ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "កំពុង​ស្រាយ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr "បាន​ដំឡើង %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "កំពុង​យក %s ចេញ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "បាន​យក %s ចេញ​ទាំង​ស្រុង"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "បាន​យក %s ចេញ​ទាំង​ស្រុង"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "មិន​អាច​សរសេរ​ទៅ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "កំពុងស្ថាបនា​មែកធាងភាពអាស្រ័យ"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "កំណែ​សាកល្បង​"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "ការបង្កើត​ភាពអាស្រ័យ​"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "បញ្ចូល​​ព័ត៌មាន​ដែលមាន​ចូល​គ្នា"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "បរាជ័យ​ក្នុង​ការ​បើក %s"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "បរាជ័យ​ក្នុងការ​សរសេរ​ឯកសារ %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "បានសរសេរ %i កំណត់ត្រា ។\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "បានសរសេរ %i កំណត់ត្រា​ជាមួយ​ %i ឯកសារ​ដែល​បាត់បង់ ។\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "បានសរសេរ​ %i កំណត់ត្រា​ជាមួយួយ​ %i ឯកសារ​ដែល​មិន​បាន​ផ្គួផ្គង​\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "បានសរសេរ %i កំណត់ត្រា​ជាមួយ​ %i ឯកសារ​ដែល​បាត់បង់​ និង​ %i ឯកសារ​ដែល​មិន​បាន​ផ្គួផ្គង​ ​\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "MD5Sum មិន​ផ្គួផ្គង​"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "មិន​គាំទ្រ​ប្រព័ន្ធ​កញ្ចប់'%s' ឡើយ"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "មិនអាច​កំណត់​ប្រភេទ​ប្រព័ន្ធ​កញ្ចប់​ដែល​សមរម្យ​បានឡើយ"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "មិន​អាច​បើក​ឯកសារ​ %s បានឡើយ"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"ការរត់​ការដំឡើង​នេះ នឹងទាមទារ​ឲ្យយកកញ្ចប់ចាំបាច់ %s បណ្ដោះអាសន្ន ដោយសារ រង្វិល ការប៉ះទង្គិច/"
+"ភាពអាស្រ័យជាមុន ។ ជាញឹកញាប់គឺ មិនត្រឹមត្រូវ ប៉ុន្តែ ប្រសិនបើអ្នក​ពិតជាចង់ធ្វើវា ធ្វើឲ្យជម្រើស APT::"
+"Force-LoopBreak សកម្ម ។"
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "ឃ្លាំង​កញ្ចប់​ទទេ​"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "​​ឯកសារ​ឃ្លាំង​កញ្ចប់​មិន​ត្រឹមត្រូវ​"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "ឯកសារ​ឃ្លាំងសម្ងាត់​​កញ្ចប់​ជាកំណែ​មិន​ត្រូវគ្នា​"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "APT នេះ មិនគាំទ្រ​ប្រព័ន្ធ​ ការធ្វើកំណែនេះទេ​ '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "ឃ្លាំង​សម្ងាត់​កញ្ចប់ត្រូវ​បានស្ថាបនា់​សម្រាប់ស្ថាបត្យករ​ខុស​ៗគ្នា​​"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "​​ឯកសារ​ឃ្លាំង​កញ្ចប់​មិន​ត្រឹមត្រូវ​"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "អាស្រ័យ​"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "អាស្រ័យជា​មុន"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "ផ្ដល់យោបល់​"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "ប៉ះទង្គិច"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "ផ្តល់​អនុសាសន៍​"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "ជំនួស​"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "លែង​ប្រើ"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "សំខាន់​"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "បាន​ទាមទារ"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "គំរូ"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "បន្ថែម"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "ស្រេចចិត្ត"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "ឃ្លាំងសម្ងាត់​មិន​ត្រូវ​គ្នា​នឹង ប្រព័ន្ធ ធ្វើកំណែ"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "កំហុស​បានកើតឡើង​ខណៈពេល​កំពុង​ដំណើរការ​ %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "អស្ចារ្យ អ្នក​មាន​ឈ្មោះ​កញ្ចប់​លើស​ចំនួន​ APT នេះ​ឆបគ្នា​​  ។"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "អស្ចារ្យ អ្នក​មាន​កំណែ​លើស​ចំនួន​ APT នេះ​ឆបគ្នា​ ។"
+
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "អស្ចារ្យ អ្នក​មាន​កំណែ​លើស​ចំនួន​ APT នេះ​ឆបគ្នា​ ។"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "អស្ចារ្យ​, អ្នក​មាន​ភាពអាស្រ័យ​លើស​ចំនួន​ APT នេះ​ឆបគ្នា​ ។"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "កំពុង​អាន​បញ្ជី​កញ្ចប់"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IO កំហុសក្នុងការររក្សាទុក​ឃ្លាំង​សម្ងាត់​ប្រភព​"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "ប្រភេទ​ឯកសារ​លិបិក្រម​ '%s' មិនត្រូវ​បាន​គាំទ្រ​"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "កំណត់ត្រា​មិនត្រឹមត្រូវ​នៅក្នុង​ឯកសារចំណង់ចំណូលចិត្ត មិនមាន​បឋមកថា​កញ្ចប់ទេ"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "មិន​បាន​យល់​ពី​ប្រភេទ​ម្ជុល %s ឡើយ"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "គ្មាន​អទិភាព (ឬ សូន្យ​) បានបញ្ជាក់​សម្រាប់​ម្ជុល​ទេ"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Malformed បដិសេធ %s បន្ទាត់ %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "បន្ទាត់​ Malformed %u ក្នុង​បញ្ជី​ប្រភព​ %s (ប្រភេទ​)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "ប្រភេទ​ '%s' មិន​ស្គាល់នៅលើបន្ទាត់​ %u ក្នុង​បញ្ជី​ប្រភព​ %s ឡើយ"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "បន្ទាត់​ Malformed %u ក្នុង​បញ្ជី​ប្រភព​ %s (ប្រភេទ​)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "ប្រភេទ​ '%s' មិន​ស្គាល់នៅលើបន្ទាត់​ %u ក្នុង​បញ្ជី​ប្រភព​ %s ឡើយ"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "អ្នកត្រូវតែដាក់ 'ប្រភព' URIs មួយចំនួន​នៅក្នុង sources.list របស់អ្នក"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"ឯកសារ​លិបិក្រម​មួយ​ចំនួន​បាន​បរាជ័យ​ក្នុង​ការ​​ទាញ​យក ​ពួកវាត្រូវបាន​មិន​អើពើ​ ឬ ប្រើ​​ឯកសារ​ចាស់​ជំនួសវិញ ​​។"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "កំពុង​គណនា​ការ​ធ្វើ​ឲ្យ​ប្រសើរ"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "វាយ​:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "យក​ ៖:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "បាន​ទៅ​ប្រមូល​ %sB ក្នុង​ %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [កំពុង​ធ្វើការ​]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"ផ្លាស់ប្តូរ​មេឌៀ ៖ សូម​បញ្ចូល​ថាស​ដែល​មាន​ស្លាក\n"
+" '%s'\n"
+"ក្នុង​ដ្រាយ​ '%s' ហើយ​ចុច​បញ្ចូល\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "កំពុង​កែ​ភាពអាស្រ័យ​..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " បាន​បរាជ័យ ។"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "មិន​អាច​កែ​ភាព​អាស្រ័យ​បានឡើយ​"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "មិនអាច​បង្រួម​ការ​កំណត់​ភាព​ប្រសើរ​​បាន​ឡើយ​"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " ធ្វើ​រួច"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "អ្នក​ប្រហែល​ជា​ចង់រត់ 'apt --fix-broken install' ដើម្បី​កែ​វា​​ទាំងនេះ​ហើយ ។"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"ភាពអស្រ័យ​ដែល​ខុស​គ្នា ។ ព្យាយាម​ 'apt --fix-broken install' ដោយ​គ្មាន​កញ្ចប់ (ឬ បញ្ជាក់​"
+"ដំណោះស្រាយ) ។"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "ចំណាំ កំពុង​ជ្រើស​ %s សម្រាប់ regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "ចំណាំ កំពុង​ជ្រើស​ %s សម្រាប់ regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "ចំណាំ កំពុង​ជ្រើស​ %s សម្រាប់ regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "កញ្ចប់​ %s ជា​កញ្ចប់​និម្មិត​ដែល​បាន​ផ្តល់​ដោយ​ ៖\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [បានដំឡើង​]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "កំណែ​សាកល្បង​"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "អ្នក​គួរតែ​ជ្រើស​យក​មួយ​​ឲ្យ​ច្បាស់​ដើម្បី​ដំឡើង​ ។"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"មិន​មាន​កញ្ចប់​ %s ទេ ប៉ុន្តែ​វា​ត្រូវ​បាន​យោង​ទៅ​ដោយ​កញ្ចប់​ផ្សេង​ទៀត​ ។\n"
+"វា​មានន័យ​ថា​បាត់កញ្ចប់ ​គេ​លែង​ប្រើ ឬ\n"
+"អាច​រក​បាន​ពី​ប្រភព​ផ្សេង​ទៀត\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "ទោះ​យ៉ាងណា​ក៏ដោយ កញ្ចប់​ខាងក្រោម​ជំនួស​វា ៖"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "កញ្ចប់​ %s មិនមាន​ការដំឡើងសាកល្បងឡើយ"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "មិនទាន់បានដំឡើង​កញ្ចប់​ %s ទេ​ ដូច្នេះ មិន​បាន​យកចេញឡើយ \n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "មិនទាន់បានដំឡើង​កញ្ចប់​ %s ទេ​ ដូច្នេះ មិន​បាន​យកចេញឡើយ \n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "ចំណាំ កំពុង​ជ្រើស​ %s ជំនួស​ %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "រក​កញ្ចប់​មិន​ឃើញ"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ព្រមាន​ ៖ មិនអាច​ធ្វើការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវកញ្ចប់ខាងក្រោមបានឡើយ !"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "បានបដិសេធ​ការព្រមាន​ការផ្ទៀងផ្ទាត់ភាព​ត្រឹមត្រូវ ។\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "មិនអាច​ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវកញ្ចប់​មួយចំនួន​បានឡើយ​"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid "Install these packages without verification?"
+msgstr "ដំឡើង​កញ្ចប់​ទាំងនេះ ​ដោយគ្មានការពិនិត្យ​បញ្ជាក់ [y/N] ? "
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "មាន​បញ្ហា​ ហើយ -y ត្រូវ​បាន​ប្រើ​ដោយគ្មាន​​ --force​-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "មិន​អាច​កំណត់​ទំហំ​ទំនេរ​ក្នុង​ %s បានឡើយ"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "អ្នក​គ្មាន​ទំហំ​​ទំនេរ​គ្រប់គ្រាន់​ក្នុង​​ %s ឡើយ ។"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "មិន​អាច​ចាក់​សោ​ថត​ទាញ​យក​បាន​ឡើយ"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"មិនអាច​ដំឡើងកញ្ចប់​មួយចំនួន​បានឡើយ ។ នេះ​មាន​ន័យ​ថា​អ្នក​\n"
+"​បានស្នើរ​ស្ថានភាព​ដែល​មិន​អាច​ធ្វើបានមួយ ឬ ​ប្រសិន​បើ​​អ្នក​កំពុង​ប្រើការចែកចាយ​ពុំ​មាន​លំនឹង​នោះ កញ្ចប់​"
+"ដែលបាន​ទាមទារនឹងមិនទាន់បានបង្កើត​ឡើយ​\n"
+" ឬ ​បានយក​ចេញ​ពីការមកដល់ ។"
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "ព័ត៌មាន​ដូចតទៅនេះ អាចជួយ​ដោះស្រាយ​ស្ថានភាព​បាន ៖"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "កញ្ចប់​ដែល​បាន​ខូច​"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"អនុញ្ញាត​ឲ្យ​ទៅ​ប្រមូល​យក​ប័ណ្ណសារ​មួយ​ចំនួន​ ប្រហែល​ជា​រត់​ភាព​ទាន់​សម័យ apt-get ឬ ព្យាយាមប្រើ​ជាមួយ --"
+"fix- ដែលបាត់ឬ់ ?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "កំហុស​ខាងក្នុង កញ្ចប់​ដំឡើង​ត្រូវ​បាន​ហៅ​​ជាមួយ​កញ្ចប់​ដែល​ខូច !"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "កញ្ចប់ ​ត្រូវការឲ្យ​យក​ចេញ​​ ប៉ុន្តែមិនអនុញ្ញាត​ឲ្យយកចេញឡើយ ។"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "មាន​បញ្ហា​ ហើយ -y ត្រូវ​បាន​ប្រើ​ដោយគ្មាន​​ --force​-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "មាន​បញ្ហា​ ហើយ -y ត្រូវ​បាន​ប្រើ​ដោយគ្មាន​​ --force​-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "កំហុស​ខាងក្នុង​ ការ​រៀប​តាម​លំដាប់​មិន​បាន​បញ្ចប់ឡើយ"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "យី អី​ក៏​ចម្លែង​ម្លេះ.. ទំហំ​មិន​ដូច​គ្នា​ឡើយ ។ សូម​ផ្ញើ​អ៊ីមែល​ទៅ apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "ត្រូវការ​​យក​ %sB/%sB នៃ​ប័ណ្ណសារ ។​\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "ត្រូវ​ការយក​ %sB នៃ​ប័ណ្ណសារ ។\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "បន្ទាប់​ពី​ពន្លា​ %sB នៃ​ការ​បន្ថែម​​ទំហំ​ថាស​ត្រូវ​បាន​ប្រើ ។\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "បន្ទាប់​ពី​ពន្លា​ %sB ទំហំ​ថាសនឹង​​ទំនេរ ។ \n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "បានបញ្ជាក់​តែប្រតិបត្តិការដែលមិនសំខាន់ប៉ុណ្ណោះ ប៉ុន្តែ​នេះមិនមែនជាប្រតិបត្តិការមិនសំខាន់នោះទេ ។"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "បាទ/ចាស ធ្វើ​ដូច​ដែល​ខ្ញុំ​និយាយ !"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"អ្នកប្រហែល​ជា​ធ្វើ​អ្វីមួយ​ដែល​អាច​បង្ករ​ឲ្យ​មាន​មហន្ដរាយ ។\n"
+"ដើម្បី​បន្ត ​​វាយ​ក្នុង​ឃ្លា​ '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "បោះបង់ ។"
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+#, fuzzy
+msgid "Do you want to continue?"
+msgstr "តើ​អ្នក​ចង់​បន្តឬ​ [បាទ ចាស/ទេ​] ? "
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "ឯកសារ​មួយ​ចំនួន​បាន​បរាជ័យ​ក្នុង​ការ​ទាញ​យក​"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "បានបញ្ចប់ការទាញ​យក​ ហើយ​តែ​ក្នុង​របៀប​​ទាញ​យក​ប៉ុណ្ណោះ"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix- ដែលបាត់​ និង ​ស្វប​មេឌៀ​ដែល​មិនបាន​​គាំទ្រនៅពេល​បច្ចុប្បន្ន​"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "មិន​អាច​កែ​កញ្ចប់​ដែលបាត់បង់​បានឡើយ ។"
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "កំពុង​បោះបង់​ការ​ដំឡើង​ ។"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "កំហុស​ខាងក្នុង អ្នក​ដោះស្រាយ​បញ្ហា​បានធ្វើឲ្យខូច​ឧបករណ៍"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "កញ្ចប់​ថ្មី​ខាងក្រោម​នឹង​ត្រូវ​បាន​ដំឡើង​ ៖"
+msgstr[1] "កញ្ចប់​ថ្មី​ខាងក្រោម​នឹង​ត្រូវ​បាន​ដំឡើង​ ៖"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "កញ្ចប់​ថ្មី​ខាងក្រោម​នឹង​ត្រូវ​បាន​ដំឡើង​ ៖"
+msgstr[1] "កញ្ចប់​ថ្មី​ខាងក្រោម​នឹង​ត្រូវ​បាន​ដំឡើង​ ៖"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "កញ្ចប់​បន្ថែម​ដូចតទៅនេះ នឹងត្រូវបាន​ដំឡើង ៖"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "កញ្ចប់​ដែល​បាន​ផ្ដល់​យោបល់ ៖"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "កញ្ចប់​ដែល​បាន​ផ្ដល់​អនុសាសន៍ ៖"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "កំពុង​រំលង​ %s វា​បាន​ដំឡើង​រួចរាល់​ ហើយ​ភាព​ធ្វើឲ្យ​ប្រសើរ​​មិន​ទាន់​កំណត់​​ ។\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "កំពុង​រំលង​ %s វា​បាន​ដំឡើង​រួចរាល់​ ហើយ​ភាព​ធ្វើឲ្យ​ប្រសើរ​​មិន​ទាន់​កំណត់​​ ។\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "មិនអាចធ្វើការដំឡើង %s ឡើងវិញបានទេ វា​មិនអាចត្រូវបាន​ទាញយកបានឡើយ ។\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ជាកំណែ​ដែលថ្មីបំផុតរួចទៅហើយ ។\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "បានជ្រើស​កំណែ​ %s (%s) សម្រាប់ %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "បានជ្រើស​កំណែ​ %s (%s) សម្រាប់ %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [បានដំឡើង​]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [បានដំឡើង​]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [បានដំឡើង​]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [បានដំឡើង​]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ប៉ុន្តែ​ %s ត្រូវ​បាន​ដំឡើង​"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ប៉ុន្តែ​​វា​មិន​អាច​ដំឡើង​បាន​ទេ​"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ប៉ុន្តែ​​វា​ជា​កញ្ចប់​និម្មិត​"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ប៉ុន្តែ វា​នឹង​មិន​ត្រូវ​បាន​ដំឡើង​ទេ"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ប៉ុន្តែ​វា​មិន​បាន​ដំឡើង​ទេ​"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ឬ"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "កញ្ចប់​ខាងក្រោម​មាន​ភាពអាស្រ័យ​ដែល​ខុស​គ្នា ៖"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "កញ្ចប់​ថ្មី​ខាងក្រោម​នឹង​ត្រូវ​បាន​ដំឡើង​ ៖"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "កញ្ចប់​ខាងក្រោម​នឹងត្រូវ​បាន​យកចេញ ៖"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "​កញ្ចប់​ខាង​ក្រោម​ត្រូវ​បាន​យក​ត្រឡប់​មក​វិញ ៖"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "កញ្ចប់​ខាងក្រោម​នឹង​​ត្រូវ​បាន​​ធ្វើ​ឲ្យប្រសើ​ឡើង ៖"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "កញ្ចប់​ខាងក្រោម​នឹង​​ត្រូវ​បាន​បន្ទាប ៖"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "កញ្ចប់​រង់ចាំ​ខាងក្រោម​នឹង​ត្រូវ​​បានផ្លាស់​​ប្តូរ​ ៖"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (ដោយ​សារតែ​ %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ព្រមាន​ ៖ កញ្ចប់ដែល​ចាំបាច់​ខាងក្រោម​នឹង​ត្រូវ​បាន​យកចេញ ។\n"
+"ការយកចេញ​នេះ​មិន​ត្រូវ​បានធ្វើ​ទេ​លុះត្រា​តែ​អ្នកដឹង​ថា​​អ្នក​កំពុង​ធ្វើ​អ្វីឲ្យប្រាកដ !"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu ត្រូវ​បាន​ធ្វើ​ឲ្យ​ប្រសើរ %lu ត្រូវ​បានដំឡើង​ថ្មី "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu ត្រូវ​បាន​ដំឡើង​ឡើង​វិញ "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu ​ត្រូវបានបន្ទាប់ "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu ដែលត្រូវ​យក​ចេញ​ ហើយ​ %lu មិន​​បាន​ធ្វើ​ឲ្យ​ប្រសើរឡើយ ។\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu មិន​បាន​ដំឡើង​ ឬ យក​ចេញបានគ្រប់ជ្រុងជ្រោយ​ឡើយ​ ។\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "អ្នក​ត្រូវ​តែ​ផ្ដល់​លំនាំ​មួយ​ដែល​ពិត​ប្រាកដ"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "ឯកសារ​កញ្ចប់ ៖"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "ឃ្លាំង​សម្ងាត់​ឋិតនៅ​ក្រៅ​ការ​ធ្វើ​សមកាល​កម្ម ដែលមិន​អាច x-ref ឯកសារ​កញ្ចប់​បាន​ទេ"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "កញ្ចប់​ដែល​បាន​ខ្ទាស់ ៖"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " បាន​ដំឡើង ៖ "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " សាកល្បង ៖ "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(គ្មាន)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " តារាង​កំណែ ៖"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "មិនអាចថ្លែង បញ្ជី​កញ្ចប់​ប្រភពចប់​ បានឡើយ %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "យ៉ាងហោចណាស់​ត្រូវ​​បញ្ជាក់​​កញ្ចប់​មួយ ​ដើម្បី​ទៅ​​ប្រមូល​យក​ប្រភព​សម្រាប់"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "មិន​អាច​រក​កញ្ចប់ប្រភព​​សម្រាប់ %s បានឡើយ"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "កំពុង​រំលង​ឯកសារ​ដែល​បាន​ទាញយក​រួច​ '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "ត្រូវការ​យក​ %sB/%sB នៃ​ប័ណ្ណសារ​ប្រភព ។\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "ត្រូវការ​យក​ %sB នៃ​ប័ណ្ណសារ​ប្រភព​ ។\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "ទៅប្រមូល​ប្រភព​ %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "បរាជ័យ​ក្នុងការទៅប្រមូលយក​ប័ណ្ណសារ​មួយចំនួន ។"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "កំពុង​រំលង​ការស្រាយ​នៃប្រភព​ដែលបានស្រាយរួច​នៅក្នុង %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "ពាក្យ​បញ្ជា​ស្រាយ '%s' បាន​បរាជ័យ​ ។\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "ពិនិត្យ​ប្រសិន​បើកញ្ចប់ 'dpkg-dev' មិន​ទាន់​បាន​ដំឡើង​ ។\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "សាងសង​ពាក្យ​បញ្ជា​ '%s' បានបរាជ័យ​ ។\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "មិន​អាច​សាងសង់​​ព័ត៌មាន​ភាពអស្រ័យ​សម្រាប់ %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s មិនមានភាពអាស្រ័យ​ស្ថាបនាឡើយ​ ។\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "ត្រូវតែ​បញ្ជាក់​យ៉ាងហោចណាស់​មួយកញ្ចប់ដើម្បីពិនិត្យ builddeps សម្រាប់"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ដំណើរ​​ការ​បង្កើត​ភាព​អាស្រ័យ"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ដំណើរ​​ការ​បង្កើត​ភាព​អាស្រ័យ"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "បរាជ័យ​ក្នុង​ការ​ប្តូរ​ឈ្មោះ %s ទៅ %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "កញ្ចប់ %s កំណែ %s មាន​ភាព​អាស្រ័យ​មិន​ត្រូវ​គ្នា ៖\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "ពាក្យ​បញ្ជា​ដែលធ្វើ​ឲ្យ​ទាន់​សម័យ​គ្មាន​អាគុយម៉ង់​ទេ"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "ពាក្យ​បញ្ជា​ដែលធ្វើ​ឲ្យ​ទាន់​សម័យ​គ្មាន​អាគុយម៉ង់​ទេ"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "ឈ្មោះ​កញ្ចប់​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "ឈ្មោះ​កញ្ចប់​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " កញ្ចប់​ធម្មតា ៖ "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " កញ្ចប់​និម្មិត​សុទ្ធ ៖ "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " កញ្ចប់​និម្មិត​តែ​មួយ ៖ "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " កញ្ចប់​និម្មិត​លាយ ៖ "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " បាត់បង់ ៖ "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "កំណែ​ផ្សេងៗ​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "កំណែ​ផ្សេងៗ​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "ភាព​អាស្រ័យ​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "ទំនាក់ទំនង កំណែ/ឯកសារ​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "ទំនាក់ទំនង កំណែ/ឯកសារ​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "ការផ្គូរផ្គង​ការផ្ដល់​សរុប ៖ "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "ខ្សែ​អក្សរ​សរុប​ ៖ "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "ទំហំ slack សរុប ៖"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "ទំហំ​សរុប​ដែល​ទុក​សម្រាប់ ៖ "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "បង្ហាញ​កំណត់​ត្រា​ប្រភព"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "ស្វែងរក​កញ្ចប់​​លំនាំ regex "
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "បង្ហាញព័ត៌មាន​​ភាពអាស្រ័យ​កញ្ចប់​មិន​ទាន់​ច្នៃ"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "បង្ហាញ​ព័ត៌មាន​ភាពអាស្រ័យ​កញ្ចប់​បញ្ច្រាស់​"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "បង្ហាញ​កំណត់​ត្រា​កញ្ចប់​ដែល​អាច​អាន​បាន"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "រាយ​ឈ្មោះ​កញ្ចប់​ទាំងអស់​"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "បង្ហាញ ការរៀបចំ​គោលការណ៍​"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "សូម​ផ្ដល់​ឈ្មោះ​ឲ្យ​ថាស​នេះ ឧទាហរណ៍​ដូចជា 'ដេបៀន 2.1r1 ថាស​ទី ១' ជាដើម"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "សូម​បញ្ចូល​ថាស​ក្នុង​ដ្រាយ​ហើយ​ចុច​បញ្ចូល​"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "បរាជ័យ​ក្នុង​ការ​ប្តូរ​ឈ្មោះ %s ទៅ %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "ធ្វើដំណើរការ​នេះ​ម្តង​ទៀត​ សម្រាប់​ស៊ីឌី​ទាំងអស់​​ក្នុង​សំណុំ​របស់​អ្នក ។"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "​អាគុយម៉ង់​មិន​មាន​គូ​ទេ"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"ការ​ប្រើប្រាស់ ៖ ពាក្យ​បញ្ជា​ apt-config [ជម្រើស] \n"
+"\n"
+"apt-config ជា​ឧបករណ៍​សាមញ្ញ​សម្រាប់​អាន​ឯកសារ​កំណត់រចនាសម្ព័ន្ធ​ APT \n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"ការ​ប្រើប្រាស់​ ៖ apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates ជាឧបករណ៍ដើម្បី​ស្រង់​ព័ត៌មាន​ការ​រចនាសម្ព័ន្ធ​​និង​ពុម្ព​\n"
+"ពី​កញ្ចប់​​ដេបៀន \n"
+"\n"
+"ជម្រើស ៖ ​\n"
+" -h អត្ថបទ​ជំនួយ​\n"
+" -t កំណត់​ថត​បណ្ដោះ​អាសន្ន\n"
+" -c=? អាន​ឯកសារ​ការ​កំណត់​រចនាស្ព័ន្ធ​នេះ\n"
+" -o=? កំណត់​ជម្រើស​ការ​កំណត់​រចនា​សម្ព័ន្ធ​តាម​ចិត្ត ឧ. eg -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "មិន​អាច​ទទួល​យក​កំណែ​ debconf  ។ តើ​ debconf បានដំឡើង​ឬ ?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "មិន​អាច​រក​កញ្ចប់ %s បានទេ"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "កំហុស​ខាងក្នុង អ្នក​ដោះស្រាយ​បញ្ហា​បានធ្វើឲ្យខូច​ឧបករណ៍"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "ម៉ូឌុល​ដែល​គាំទ្រ ៖ "
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"របៀបប្រើ ៖ ពាក្យបញ្ជា apt-get [options]\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] ប្រភព pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get គឺជា​ចំណុចប្រទាក់​បន្ទាត់​ពាក្យបញ្ជា​សាមញ្ញ​មួយ សម្រាប់​ធ្វើការទាញយក និង\n"
+"ដំឡើង​កញ្ចប់ ។ ជាញឹកញាប់​បំផុត គឺប្រើ​ពាក្យបញ្ជា​ដើម្បី​ធ្វើឲ្យទាន់សម័យ​\n"
+"និង ដំឡើង ។\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "ទៅយក​បញ្ជី​កញ្ចប់​ថ្មី"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "ធ្វើឲ្យប្រសើរ"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "ដំឡើង​កញ្ចប់​ថ្មី (pkg គឺ libc6 មិនមែន libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "ដំឡើង​កញ្ចប់​ថ្មី (pkg គឺ libc6 មិនមែន libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "យក​កញ្ចប់​ចេញ"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "ការចែកចាយ​ភាពល្អប្រសើរ សូមមើល apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "ដាក់ពីក្រោយ​ជម្រើស dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "កំណត់​រចនា​សម្ព័ន្ធ​ភាពអាស្រ័យ​ក្នុងការស្ថាបនា​សម្រាប់​កញ្ចប់​ប្រភព"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "លុប​ឯកសារប័ណ្ណសារ​ដែលបានទាញ​យក"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "លុប​ឯកសារប័ណ្ណសារ​ដែលបានទាញយក​ចាស់"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "ផ្ទៀងផ្ទាត់​ថា​មិនមានភាព​អាស្រ័យ​ដែល​ខូចទេ"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "ទាញយក​ប័ណ្ណសារ​ប្រភព"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "យ៉ាងហោចណាស់​ត្រូវ​​បញ្ជាក់​​កញ្ចប់​មួយ ​ដើម្បី​ទៅ​​ប្រមូល​យក​ប្រភព​សម្រាប់"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"ការ​ប្រើប្រាស់​ ៖ apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates ជាឧបករណ៍ដើម្បី​ស្រង់​ព័ត៌មាន​ការ​រចនាសម្ព័ន្ធ​​និង​ពុម្ព​\n"
+"ពី​កញ្ចប់​​ដេបៀន \n"
+"\n"
+"ជម្រើស ៖ ​\n"
+" -h អត្ថបទ​ជំនួយ​\n"
+" -t កំណត់​ថត​បណ្ដោះ​អាសន្ន\n"
+" -c=? អាន​ឯកសារ​ការ​កំណត់​រចនាស្ព័ន្ធ​នេះ\n"
+" -o=? កំណត់​ជម្រើស​ការ​កំណត់​រចនា​សម្ព័ន្ធ​តាម​ចិត្ត ឧ. eg -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"ការ​ប្រើប្រាស់​ ៖ apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates ជាឧបករណ៍ដើម្បី​ស្រង់​ព័ត៌មាន​ការ​រចនាសម្ព័ន្ធ​​និង​ពុម្ព​\n"
+"ពី​កញ្ចប់​​ដេបៀន \n"
+"\n"
+"ជម្រើស ៖ ​\n"
+" -h អត្ថបទ​ជំនួយ​\n"
+" -t កំណត់​ថត​បណ្ដោះ​អាសន្ន\n"
+" -c=? អាន​ឯកសារ​ការ​កំណត់​រចនាស្ព័ន្ធ​នេះ\n"
+" -o=? កំណត់​ជម្រើស​ការ​កំណត់​រចនា​សម្ព័ន្ធ​តាម​ចិត្ត ឧ. eg -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "ប៉ុន្តែ​វា​មិន​បាន​ដំឡើង​ទេ​"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "កញ្ចប់​ថ្មី​ខាងក្រោម​នឹង​ត្រូវ​បាន​ដំឡើង​ ៖"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ជាកំណែ​ដែលថ្មីបំផុតរួចទៅហើយ ។\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ជាកំណែ​ដែលថ្មីបំផុតរួចទៅហើយ ។\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "បរាជ័យ​ក្នុង​ការ​បើក %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "ពិនិត្យ​ប្រសិន​បើកញ្ចប់ 'dpkg-dev' មិន​ទាន់​បាន​ដំឡើង​ ។\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "មិន​ស្គាល់​កំណត់​ត្រា​កញ្ចប់ !"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "កំពុង​អាន​បញ្ជី​កញ្ចប់"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "កញ្ចប់​ដែល​បាន​ខ្ទាស់ ៖"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "កញ្ចប់​ដែល​បាន​ខ្ទាស់ ៖"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "កញ្ចប់​ដែល​បាន​ខូច​"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "ប៉ុន្តែ​ %s នឹង​ត្រូវ​បាន​ដំឡើ​ង"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "បញ្ចូល​​ព័ត៌មាន​ដែលមាន​ចូល​គ្នា"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "ការ​កំណត់​លំនាំ​ដើម​មិន​ល្អ !"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "សង្កត់​ បញ្ចូល ​ដើម្បី​បន្ត ។"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "កំហុ​ស​មួយ​ចំនួន​បាន​កើត​ឡើង​ខណៈពេល​ពន្លា​កញ្ចប់ ។ ខ្ញុំ​នឹង​កំណត់រចនាសម្ប័ន្ធ"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "កញ្ចប់​ដែល​បាន​ដំឡើង​ ។ នេះ​ប្រហែល​ជា​លទ្ធផល​កំហុស​ស្ទួន​"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "ឬ​ កំហុសដែលបង្ក​ដោយ​ការ​បាត់បង់​ភាពអាស្រ័យ​ ។ ​មិន​អី​ទេ​ គ្រាន់​តែ​ជា​កំហុស "
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "នៅខាងលើ​សារ​នេះ​គឺ​សំខាន់​ណាស់​ ។ សូម​ជួសជុល​ពួកវា​ ហើយ​រត់​ការដំឡើង​ម្តងទៀត​"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "បញ្ចូល​​ព័ត៌មាន​ដែលមាន​ចូល​គ្នា"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "បញ្ជី​ផ្នែក​បន្ថែម​កញ្ចប់​វែង​ពេក"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "​កំហុស​ដំណើរការ​ថត​ %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "បញ្ជី​ផ្នែក​បន្ថែម​ប្រភព​វែង​ពេក"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "កំហុស​សរសេរ​បឋម​កថា​ទៅ​ឯកសារ​មាតិកា"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "កំហុស​ដំណើរការ​មាតិកា​ %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"ការប្រើប្រាស់ ៖ ពាក្យ​បញ្ជា​ apt-ftparchive [ជម្រើស] \n"
+"ពាក្យ​បញ្ជា​ ៖ កញ្ចប់ binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" ផ្លូវ​មាតិកា​\n"
+" ផ្លូវ​ផ្សាយ​ចេញ \n"
+" កំណត់​រចនាស្ព័ន្ធបង្កើត​ [groups]\n"
+" ​​កំណត់​រចនាសម្ព័ន្ធសំអាត​​\n"
+"\n"
+"apt-ftparchive បង្កើត​​ឯកសារ​លិបិក្រម​សម្រាប់​ប័ណ្ណសារ​​ដេបៀន  ។ វា​គាំទ្រ​រចនាប័ទ្ម​នៃ​ការបង្កើតដោយ​"
+"ស្វ័យប្រវត្តិ​\n"
+"ដើម្បី​ធ្វើការ​ជំនួស​\n"
+" dpkg-scanpackages និង dpkg-scansources\n"
+"\n"
+"apt-ftparchive ដែល​បង្កើត​​​​ឯកសារ​ញ្ចប់​ ពី​មែកធាង​ .debs ។ ឯកសារ​កញ្ចប់មាន​\n"
+"​មាតិកា​នៃ វត្ថុបញ្ជា​​វាល​ទាំងអស់ ដែល​បាន​មក​ពី​កញ្ចប់​និមួយ​ៗដូចជា​ MD5 hash និង​ ទំហំ​ឯកសារ​ ។ ឯកសារ​"
+"បដិសេធ​​មិន​គាំទ្រ​ \n"
+"ដើម្បី​បង្ខំ​តម្លៃ​អាទិភាព​និង សម័យ​ ។\n"
+"\n"
+"ភាព​ដូច​គ្នា​នៃ​ apt-ftparchive បង្កើត​ឯកសារ​ប្រភព​ពី​មែកធាង​ .dscs ។\n"
+"ជម្រើស​បដិសេធ​ប្រភព​អាច​ត្រូវ​បាន​ប្រើ​សម្រាប់​បញ្ចាក់ឯកសារ​បដិសេធ src \n"
+"\n"
+" បញ្ជា​'កញ្ចប់​' និង​ 'ប្រភព' ត្រូវ​​តែ​រត់​ជា​ root \n"
+" ។ BinaryPath ត្រូវ​ចង្អុល​​ទៅ​កាន់​មូលដ្ឋាន​ស្វែងរក​ហៅ​ខ្លួនឯង​ ហើយ​ \n"
+"ឯកសារ​បដិសេធ​ត្រូវមាន​ទង​បដិសេធ  ។ ផ្លូវ​បរិបទ​ត្រូវ​បាន​បន្ថែម​​ទៅ​ក្នុង​វាល​ឈ្មោះ​​ឯកសារ​បើ​វា​មាន​  ។ "
+"ឧទាហរណ៍​ ការប្រើប្រាស់​ពី​ប័ណ្ណសារ​ \n"
+"ដេបៀន  ៖\n"
+" apt-ftparchive កញ្ចប់​dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"ជម្រើស​ ៖\n"
+" -h អត្ថបទ​ជំនួយ​នេះ​\n"
+" --md5 Control MD5 ការបបង្កើត​\n"
+" -s=? ឯកសារ​បដិសេធ​ប្រភព​\n"
+" -q Quiet\n"
+" -d=? ជ្រើស​ជម្រើសលាក់​ទុ​ក​ទិន្នន័យ​\n"
+" --គ្មាន​-delink អនុញ្ញាត​ delinking របៀប​បំបាត់​កំហុស​\n"
+" --មាតិកា ពិនិត្យ​ការបង្កើត​ឯកសារ​មាតិកា\n"
+" -c=? អាន​ឯកសារ​ការកំណត់​រចនាសម្ព័ន្ធ​នេះ​\n"
+" -o=? កំណត់​ជម្រើស​ការ​កំណត់​រចនា​សម្ព័ន្ធ​តាម​ចិត្ត"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "គ្មាន​ការ​ជ្រើស​​ដែល​ផ្គួផ្គង​"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "ឯកសារ​មួយ​ចំនួន​បាត់បងពី​ក្រុម​ឯកសារ​កញ្ចប់​ `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB បាន​ខូច​, ឯកសារ​បាន​ប្តូរ​ឈ្មោះ​ទៅ​ជា​ %s.old ។"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB ចាស់​, កំពុង​ព្យាយាម​ធ្វើ​ឲ្យ %s ប្រសើរ​ឡើង"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"ទ្រង់ទ្រាយ​មូលដ្ឋាន​ទិន្នន័យ​មិន​ត្រឹមត្រូវ ។ ប្រសិន​បើ​អ្នក​បាន​ធ្វើ​ឲ្យ​វា​ប្រសើឡើង​ពី​កំណែ​ចាស់​របស់ apt សូម​យក​"
+"មូលដ្ឋាន​ទិន្នន័យ​ចេញ និង​បង្កើត​មូលដ្ឋាន​ទិន្នន័យ​ឡើង​វិញ ។"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "មិន​អាច​បើក​ឯកសារ​ DB បានទេ %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការ​អាន​តំណ​ %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "ប័ណ្ណសារ​គ្មាន​កំណត់​ត្រា​ត្រួត​ពិនិត្យ​ទេ​"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "មិន​អាច​យក​ទស្សន៍ទ្រនិច​"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - បរាជ័យ​ក្នុង​ការ​​បម្រុង​​ទុក​សតិ​"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "មិន​ស្គាល់​ក្បួន​ដោះស្រាយ​ការបង្ហាប់​ '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "​ទិន្នផល​ដែល​បាន​បង្ហាប់​​ %s ត្រូវ​ការ​កំណត់​ការបង្ហាប់​"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "បរាជ័យ​ក្នុង​ការ​បង្កើត​បំពង់​ IPC សម្រាប់​ដំណើរ​ការ​រង​"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "បាន​បរាជ័យ​ក្នុងការ​ដាក់ជា​ពីរផ្នែក​"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "បង្ហាប់កូន"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "កំហុស​ខាងក្នុង​ បរាជ័យ​ក្នុង​ការ​បង្កើត​ %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "IO សម្រាប់​ដំណើរការ​រង​/ឯកសារ​ បាន​បរាជ័យ​"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការអាន​ នៅពេល​គណនា MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "មិន​អាចបើក​ %s បានឡើយ"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Malformed បដិសេធ %s បន្ទាត់ %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "បាន​បរាជ័យ​ក្នុង​ការ​អានឯកសារ​បដិសេធ %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Malformed បដិសេធ %s បន្ទាត់ %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Malformed បដិសេធ %s បន្ទាត់​ %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Malformed បដិសេធ %s បន្ទាត់​ %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: មិន​អាច​អាន​ថត %s បាន​ឡើយ\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W ៖ មិន​អាច​ថ្លែង %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: កំហុស​អនុវត្ត​លើ​ឯកសារ​"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "បរាជ័យ​ក្នុង​ការ​ដោះស្រាយ %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "មែក​ធាង បាន​បរាជ័យ"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "បរាជ័យ​ក្នុង​ការ​បើក %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** បាន​បរាជ័យ​ក្នុង​ការ​ត​ %s ទៅ %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink កំណត់​នៃ​ការ​វាយ %sB ។\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "ប័ណ្ណសារ​គ្មាន​វាល​កញ្ចប់​"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s គ្មាន​ធាតុធាតុបញ្ចូល​​បដិសេធឡើយ\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " អ្នក​ថែទាំ %s គឺ %s មិនមែន​ %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s គ្មាន​ធាតុ​បដិសេធ​ប្រភព\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s គ្មាន​ធាតុប​ដិសេធគោល​ពីរ​ដែរ\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "កំពុង​រង់ចាំ​បឋមកថា"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "ម៉ាស៊ីន​បម្រើ​ HTTP បានផ្ញើបឋមកថាចម្លើយតបមិនត្រឹមត្រូវ"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "ជួរ​បឋមកថា​ខូច​"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "ម៉ាស៊ីន​បម្រើ​ HTTP បានផ្ញើ​​បឋមកថាប្រវែង​​​មាតិកា​មិនត្រឹមត្រូវ​"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "ម៉ាស៊ីន​បម្រើ​ HTTP បានផ្ញើ​បឋមកថា​ជួរ​មាតិកា​មិន​ត្រឹមត្រូវ​"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "ម៉ាស៊ីន​បម្រើ HTTP នេះបាន​ខូច​​​ជួរ​គាំទ្រ​"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "មិនស្គាល់​ទ្រង់ទ្រាយ​កាលបរិច្ឆេទ"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "ទិន្នន័យ​បឋមកថា​ខូច"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "ការតភ្ជាប់​បាន​បរាជ័យ​"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "កំហុស​ខាង​ក្នុង​"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "មិន​អាច​អាន​មូលដ្ឋាន​ទិន្នន័យ​​ស៊ីឌីរ៉ូម​​ %s បានឡើយ"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"សូម​ប្រើ​ apt-cdrom ដើម្បី​បង្កើត​ស៊ីឌី-រ៉ូម​នេះ​ ដែលបានរៀបចំ​តាម​ APT​ ។ apt-get ធ្វើ​ឲ្យ​ទាន់សម័យ ​មិន​"
+"ត្រូវ​បានប្រើ​ដើម្បី​បន្ថែម​ស៊ីឌី-រ៉ូមថ្មីឡើយ​"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "ស៊ីឌី-រ៉ូមខុស"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "មិនអាចអាន់ម៉ោន ស៊ីឌី​-រ៉ូម​ នៅ​​ក្នុង​ %s បានទេ វាអាចនៅតែប្រើបាន ។"
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "រក​ថាសមិ​ន​ឃើញ​ ។"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "រកឯកសារ​មិន​ឃើញ​"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP ៖ %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "កំពុង​តភ្ជាប់​ទៅ​កាន់​ %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "កំពុង​តភ្ជាប់​ទៅ​កាន់​ %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "មិន​អាច​បង្កើត​រន្ធ​សម្រាប់ %s (f=%u t=%u p=%u) បានឡើយ"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "មិនអាច​ចាប់ផ្ដើម​ការតភ្ជាប់​​ទៅ​កាន់​ %s:%s (%s) បានឡើយ ។"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "បាន​បរាជ័យ"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "មិន​អាច​តភ្ជាប់​ទៅកាន់​ %s:%s (%s) បានឡើយ ។"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "មិន​អាច​តភ្ជាប់​ទៅ​កាន់​ %s:%s (%s) បានឡើយ ការ​តភ្ជាប់​បានអស់​ពេល​"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "កំពុង​តភ្ជាប់​ទៅកាន់ %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "មិន​អាច​ដោះស្រាយ​ '%s' បានឡើយ"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "ការ​ដោះស្រាយ​ភាព​បរាជ័យ​​បណ្តោះអាសន្ន '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "ការ​ដោះស្រាយ​អ្វី​អាក្រក់ដែល​បាន​កើត​ឡើង​ '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "ការ​ដោះស្រាយ​អ្វី​អាក្រក់ដែល​បាន​កើត​ឡើង​ '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "មិន​អាច​តភ្ជាប់​ទៅកាន់​​ %s %s ៖"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "បរាជ័យ​ក្នុងការថ្លែង"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI មិនត្រឹមត្រូវ​ URIS មូលដ្ឋានមិនត្រូវ​ចាប់ផ្តើម​ជាមួយ​ // ឡើយ"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "កំពុង​ចូល​"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "មិន​អាច​កំណត់ឈ្មោះដែលត្រូវបង្ហាញ​បានឡើយ​"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "មិន​អាច​កំណត់ឈ្មោះមូលដ្ឋាន​បានឡើយ"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "ម៉ាស៊ីន​បម្រើបានបដិសេធ​ការតភ្ជាប់ ហើយ​ បាននិយាយ ៖ %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER បរាជ័យ​ ម៉ាស៊ីន​បម្រើបាន​​និយាយ ៖ %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS បានបរាជ័យ​ ម៉ាស៊ីន​បម្រើបាន​​និយាយ ៖ %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"ម៉ាស៊ីន​បម្រើ​ប្រូកស៊ី​ត្រូវ​បាន​បញ្ជាក់​ ប៉ុន្តែ​គ្មាន​ស្គ្រីប​ចូល​ទេ Acquire::ftp::ProxyLogin គឺ ទទេ ។"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "ពាក្យ​បញ្ជា​ស្គ្រីប​ចូល​ '%s' បានបរាជ័យ ម៉ាស៊ីន​បម្រើ​បាននិយាយ ៖ %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE បានបរាជ័យ​ ម៉ាស៊ីន​បម្រើ​បាននិយាយ​ ៖ %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "អស់ពេល​ក្នុងការតភ្ជាប់​"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "ម៉ាស៊ីន​បម្រើ​បាន​បិទ​ការតភ្ជាប់​"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "ឆ្លើយតប​សតិ​បណ្តោះអាសន្ន​​អស់ចំណុះ ។"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "ការបង្ខូច​ពិធីការ​"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "មិន​អាច​បង្កើត​រន្ធបានឡើយ"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "មិន​អាច​តភ្ជាប់​​រន្ធទិន្នន័យ​បានឡើយ អស់​ពេល​ក្នុងការតភ្ជាប់​"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "មិនអាចតភ្ជាប់​​រន្ធអកម្ម​​បានឡើយ ។"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo មិន​អាច​​ទទួល​យក​រន្ធ​សម្រាប់​ស្តាប់​​បានឡើយ"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "មិន​អាច​ចងរន្ធ​បានបានឡើយ​"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "មិនអាច​ស្ដាប់នៅលើរន្ធ​បានឡើយ"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "មិន​អាច​កំណត់​ឈ្មោះរបស់​រន្ធ​បានឡើយ"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "មិនអាច​ផ្ញើពាក្យ​បញ្ជា​ PORT បានឡើយ"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "មិន​ស្គាល់​អាសយដ្ឋាន​គ្រួសារ​ %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT បរាជ័យ​ ម៉ាស៊ីន​បម្រើ​បាន​និយាយ ៖ %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "ការតភ្ជាប់​រន្ធ​​ទិន្នន័បានអស់ពេល​"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "មិនអាច​ទទួលយក​ការតភ្ជាប់​បានឡើយ"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "បញ្ហា​ធ្វើឲ្យខូច​ឯកសារ"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "មិន​អាច​ទៅ​ប្រមូល​យក​ឯកសារ​បានឡើយ ម៉ាស៊ីន​បម្រើ​បាន​និយាយ​ '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "រន្ធ​ទិន្នន័យ​បាន​អស់​ពេល​"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "បរាជ័យក្នុងការ​ផ្ទេរ​ទិន្នន័យ ម៉ាស៊ីន​បម្រើ​បាន​និយាយ​ '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "សំណួរ​"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "មិន​អាច​ហៅ​ "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "​បានជួប​ប្រទះ​​​​ហត្ថលេខា​យ៉ាងហោចណាស់មួយ ដែ​លត្រឹមត្រូវ​ ។"
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "កំហុស​ខាងក្នុង​ ៖ ហត្ថលេខា​​ល្អ ប៉ុន្តែ ​មិន​អាច​កំណត់​កូនសោ​ស្នាម​ម្រាមដៃ ?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr "មិន​អាច​ប្រតិបត្តិ '%s' ដើម្បី​ផ្ទៀងផ្ទាត់​ហត្ថលេខា (តើ gnupg ត្រូវ​បាន​ដំឡើង​ឬនៅ ?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "មិនស្គាល់កំហុស ក្នុងការប្រតិបត្តិ apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "ហត្ថលេខា​ខាង​ក្រោម​មិន​ត្រឹមត្រូវ ៖\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "ហត្ថលេខា​ខាងក្រោម​មិន​អាចផ្ទៀងផ្ទាត់បាន​ទេ​ ព្រោះកូនសោ​សាធារណៈមិន​អាច​ប្រើ​បាន​ ៖\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "កំហុសក្នុងការ​សរសេរ​ទៅកាន់​ឯកសារ"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "កំហុស​ក្នុងការ​អាន​ពី​ម៉ាស៊ីនបម្រើ ។ ការបញ្ចប់​ពីចម្ងាយ​បានបិទការតភ្ជាប់"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "កំហុស​ក្នុងការអាន​ពី​ម៉ាស៊ីន​បម្រើ"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "កំហុស​ក្នុងការ​សរសេរទៅកាន់​ឯកសារ"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "ជ្រើស​បាន​បរាជ័យ​"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "ការតភ្ជាប់​បាន​អស់ពេល​"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "កំហុស​ក្នុងការ​សរសេរទៅកាន់​ឯកសារលទ្ធផល"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "បរាជ័យក្នុងការកំណត់​ពេលវេលា​ការកែប្រែ​"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "បាន​បិទ​ការ​តភ្ជាប់​មុន​ពេល"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "បឋមកថា​សមាជិក​ប័ណ្ណសារ"
+
+#~ msgid "Removed %s"
+#~ msgstr "បាន​យក %s ចេញ"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "ឯកសារ​កញ្ចប់ %s នៅ​ខាងក្រៅ​ការ​ធ្វើសមកាលកម្ម ។"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr "កញ្ចប់​ឯកសារ​លិបិក្រម​ត្រូវ​បាន​ខូច ។ គ្មាន​ឈ្មោះ​ឯកសារ ៖ វាល​សម្រាប់​កញ្ចប់នេះ​ទេ​ %s ។"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "មិន​អាច​បើក​ឯកសារ​ %s បានឡើយ"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "មិន​អាច​បើក​ឯកសារ​ %s បានឡើយ"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "កំពុង​បើ​ឯកសារ​កំណត់រចនាសម្ព័ន្ធ​ %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "កំពុង​បើក​ %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "ភាព​អាស្រ័យ​ដែល​ខុស​គ្នា ។ ព្យាយាម​ការ​ប្រើ --fix-broken ។"
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "អ្នក​ប្រហែល​ជា​ចង់​រត់ 'apt --fix-broken install' ដើម្បី​កែ​ពួក​វា​ទាំង​នេះ ៖"
+
+#~ msgid "(not found)"
+#~ msgstr "(រក​មិន​ឃើញ)"
+
+#~ msgid " Package pin: "
+#~ msgstr " ខ្ទាស់​កញ្ចប់ ៖ "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "គ្មាន​កូនសោ​សាធារណៈ​អាច​រក​បាន​ក្នុងកូនសោ IDs ខាងក្រោម​នេះទេ ៖\n"
+
+#, fuzzy
+#~ msgid "Invalid 'Valid-Until' entry in Release file %s"
+#~ msgstr "បន្ទាត់​ដែលមិនត្រឹមត្រូវ​នៅក្នុង​ឯកសារ​បង្វែរ ៖ %s"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "ថត​ %s ត្រូវបាន​បង្វែរ"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr "%s ភាពអស្រ័យ​សម្រាប់​ %s មិន​អាច​ធ្វើ​ឲ្យ​ពេញចិត្ត​ ព្រោះ​រក​​ %s កញ្ចប់​មិន​ឃើញ​ "
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "%s ភាពអស្រ័យ​សម្រាប់​ %s មិន​អាច​ធ្វើ​ឲ្យ​ពេញចិត្ត​ ព្រោះ​រក​​ %s កញ្ចប់​មិន​ឃើញ​ "
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr "បរាជ័យ​ក្នុងការ​តម្រូវចិត្តភាពអាស្រ័យ %s សម្រាប់ %s ៖ កញ្ចប់ %s ដែលបានដំឡើង គឺថ្មីពេក"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "ភាពអាស្រ័យ %s សម្រាប់ %s មិនអាច​តម្រូវចិត្តបានទេ ព្រោះ មិនមាន​កំណែ​នៃកញ្ចប់ %s ដែលអាច​"
+#~ "តម្រូវចិត្ត​តម្រូវការ​កំណែបានឡើយ"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "%s ភាពអស្រ័យ​សម្រាប់​ %s មិន​អាច​ធ្វើ​ឲ្យ​ពេញចិត្ត​ ព្រោះ​រក​​ %s កញ្ចប់​មិន​ឃើញ​ "
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "បរាជ័យ​ក្នុងការ​តម្រូវចិត្តភាពអាស្រ័យ %s សម្រាប់ %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "ភាពអាស្រ័យ​ដែល​បង្កើត​ %s មិន​អាច​បំពេញ​សេចក្ដី​ត្រូវការ​បាន​ទេ ។"
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "មានបញ្ហា​ក្នុងការ​ផ្ដាច់តំណ %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "បាន​បរាជ័យ​ក្នុង​ការ​ផ្ដាច់ %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "ការ​ប្រើប្រាស់ ៖ apt-cache [options] ពាក្យ​បញ្ជា\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache គឺ​ជា​ឧបករណ៍​កម្រិតទាប​​ដែល​ប្រើ​សម្រាប់​រៀបចំ​ប្រព័ន្ធ​គោល​ពីរ​របស់ APT\n"
+#~ "ឯកសារ​ឃ្លាំង​សម្ងាត់ និង ​ព័ត៌មាន​សំណួរ​ពី​ពួក​វា\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "ជម្រើស​ ៖\n"
+#~ " -h នេះ​ជា​អត្ថជំនួយ​\n"
+#~ " -p=? ឃ្លាំងសម្ងាត់​កញ្ចប់​ ។\n"
+#~ " -s=? ឃ្លាំងសម្ងាត់​ប្រភព ។\n"
+#~ " -q ទ្រនិច​ចង្អុល​វឌ្ឍនភាព មិន​អនុញ្ញាត​ ។\n"
+#~ " -i បាន​តែ​បង្ហាញ ព័ត៌មាន​ deps ដែល​សំខាន់​សម្រាប់ពាក្យ​បញ្ជាដែល​ខុស​គ្នា  ​​​។\n"
+#~ " -c=? អាន​ការកំណត់​រចនាសម្ព័ន្ធ​ឯកសារ​នេះ \n"
+#~ " -o=? កំណត់​ជម្រើស​ការ​កំណត់​រចនា​សម្ព័ន្ធ​តាម​ចិត្ត ឧ. eg -o dir::cache=/tmp\n"
+#~ "មើល​ apt-cache(8) និង​ apt.conf(5) សម្រាប់​ព័ត៌មាន​បន្ថែម​​មាន​ក្នុង​ទំព័រ​សៀវភៅដៃ​ ។\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "ជម្រើស​\n"
+#~ " -h អត្ថនទ​ជំនួយ​នេះ​\n"
+#~ " -c=? អាន​ឯកសារ​ការកំណត់​រចនាសម្ព័ន្ធ​នេះ \n"
+#~ " -o=? កំណត់​ជម្រើស​ការ​កំណត់​រចនា​សម្ព័ន្ធ​តាម​ចិត្ត ឧ. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -d Download only - do NOT install or unpack archives\n"
+#~ " -s No-act. Perform ordering simulation\n"
+#~ " -y Assume Yes to all queries and do not prompt\n"
+#~ " -f Attempt to correct a system with broken dependencies in place\n"
+#~ " -m Attempt to continue if archives are unlocatable\n"
+#~ " -u Show a list of upgraded packages as well\n"
+#~ " -b Build the source package after fetching it\n"
+#~ " -V Show verbose version numbers\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-get(8), sources.list(5) and apt.conf(5) manual\n"
+#~ "pages for more information and options.\n"
+#~ " This APT has Super Cow Powers.\n"
+#~ msgstr ""
+#~ "ជម្រើស ៖\n"
+#~ " -h អត្ថបទ​ជំនួយ​នេះ ៖\n"
+#~ " -q ទិន្នផល​ដែល​អាច​ចុះកំណត់ហេតុបាន - មិនមាន​ទ្រនិចបង្ហាញ​ដំណើរការឡើយ\n"
+#~ " -qq គ្មាន​លទ្ធផល​ទេ លើកលែងតែ​កំហុស\n"
+#~ " -d ទាញយកតែប៉ុណ្ណោះ - កុំដំឡើង​ ឬ ស្រាយ​ប័ណ្ណសារ\n"
+#~ " -s No-act. ធ្វើការ​ក្លែង​ការរៀប​តាមលំដាប់\n"
+#~ " -y សន្មត​ថា បាទ/ចាស ទៅគ្រប់តម្រូវការ ហើយកុំ​រំលឹក\n"
+#~ " -f ប៉ុនប៉ង​ធ្វើការបន្ត​ ប្រសិនបើ​ការពិនិត្យ​ភាពត្រឹមត្រូវ​បរាជ័យ\n"
+#~ " -m ប៉ុនប៉ង​ធ្វើការបន្ត​ ប្រសិនបើ​ប័ណ្ណសារ​មិនអាច​ដាក់ទីតាំងបាន\n"
+#~ " -u បង្ហាញ​បញ្ជី​កញ្ចប់​ដែល​បានធ្វើឲ្យប្រសើរ​ផងដែរ\n"
+#~ " -b ស្ថាបនា​កញ្ចប់ប្រភព បន្ទាប់ពី​ទៅប្រមូលយកវា\n"
+#~ " -V បង្ហាញ​លេខកំណែ​ជា​អក្សរ\n"
+#~ " -c=? អាន​ឯកសារកំណត់​រចនា​សម្ព័ន្ធ​នេះ\n"
+#~ " -o=? កំណត់​ជម្រើស​កំណត់រចនាសម្ព័ន្ធ​តាមចិត្ត​មួយ ឧទ. -o dir::cache=/tmp\n"
+#~ "សូមមើល apt-get(8), sources.list(5) and apt.conf(5) manual\n"
+#~ "pages for more information and options.\n"
+#~ " This APT has Super Cow Powers.\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "ការប្រើប្រាស់ ៖ apt-sortpkgs [ជម្រើស] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs ជា​ឧបករណ៍​ធម្មតា​ដើម្បី​តម្រៀប​ឯកសារ​កញ្ចប់ ។ ជម្រើស​ -s បាន​ប្រើ​\n"
+#~ "សម្រាប់​ចង្អុល​ប្រភេទ​នៃ​​​ឯកសារ​អ្វីមួយដែល​មាន​ ។\n"
+#~ "\n"
+#~ "ជម្រើស​\n"
+#~ " -h អត្ថបទ​ជំនួយ​នេះ​\n"
+#~ " -s ប្រើ​ការ​តម្រៀប​ឯកសារ​ប្រភព\n"
+#~ " -c=? អាន​ឯកសារ​កំណត់​រចនាសម្ព័ន្ធនេះ​\n"
+#~ " -o=? កំណត់​ជម្រើស​ការ​កំណត់​រចនា​សម្ព័ន្ធ​តាម​ចិត្ត ឧ. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "ដំណើរ​ការ​កូន​បាន​បរាជ័យ​"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "យ៉ាងហោចណាស់​ត្រូវ​​បញ្ជាក់​​កញ្ចប់​មួយ ​ដើម្បី​ទៅ​​ប្រមូល​យក​ប្រភព​សម្រាប់"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "បាន​បរាជ័យក្នុង​ការ​បង្កើត​បំពង់​"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "បាន​បរាជ័យក្នុង​ការ​ប្រតិបត្តិ gzip"
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s សម្រាប់ %s %s បាន​ចងក្រងនៅលើ​%s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "បរាជ័យ​ក្នុង​ការ​បង្កើត​ FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "បន្ទាត់​ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (URI ញែក​)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (dist ញែក​)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព %s (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (dist ញែក​)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (dist ញែក​)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (dist ញែក​)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​ញ្ជី​ប្រភព​ %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "បន្ទាត់​ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (URI ញែក​)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (dist លែងប្រើ)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "បន្ទាត់ Malformed %lu ក្នុង​បញ្ជី​ប្រភព​ %s (dist ញែក​)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "កញ្ចប់​ %s %s រក​មិន​ឃើញ​ខណៈ​ពេល​កំពុង​ដំណើរការ​ភាពអាស្រ័យ​​ឯកសារ"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "មិនអាចថ្លែង បញ្ជី​កញ្ចប់​ប្រភពចប់​ បានឡើយ %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "ការផ្ដល់​ឯកសារ​ប្រមូលផ្ដុំ"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "មិនអាច​ញែក​ឯកសារកញ្ចប់ %s (1) បានឡើយ"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "ប្លុក​ក្រុមហ៊ុន​លក់​ %s គ្មាន​ស្នាម​ផ្តិត​ម្រាម​ដៃ"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "ទំហំ​កំណែ​ភាព​អាស្រ័យ​សរុប ៖ "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "អ្នក​ពុំ​មាន​ទំហំ​ទំនេរ​គ្រប់គ្រាន់​ទេ​នៅក្នុង​ %s ឡើយ"
+
+#~ msgid "Done"
+#~ msgstr "ធ្វើរួច​"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "កំពុង​បោះបង់​ការ​ដំឡើង​ ។"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "កំហុស​ខាងក្នុង ការធ្វើឲ្យប្រសើរ​ទាំងអស់បានធ្វើឲ្យ​ឧបករណ៍​ខូច"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s មិនមែន​ជា​កញ្ចប់​ DEB ត្រឹមត្រូវ​ទេ​ ។"
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "ការប្រើប្រាស់​ចំណុចម៉ោន​ ស៊ីឌី​-រ៉ូម​ %s\n"
+#~ "កំពុង​ម៉ោន​ស៊ីឌី-រ៉ូម​\n"
+
+#, fuzzy
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "នេះជា​ប័ណ្ណសារ DEB មិន​ត្រឹមត្រូវ វាគ្មានសមាជិក '%s' ឬ '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum មិន​ផ្គួផ្គង​"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "ខ្ញុំ​មិន​អាច​រកទីតាំង​ឯកសារ​សម្រាប់​កញ្ចប់ %s បានទេ ។ ​មាន​ន័យ​ថា​អ្នក​ត្រូវការ​ជួសជុល​កញ្ចប់​នេះ​ដោយ​ដៃ ។"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "កំពុង​បើ​ឯកសារ​កំណត់រចនាសម្ព័ន្ធ​ %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "បរាជ័យក្នុងការយក %s ចេញ"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "មិន​អាច​បង្កើត​ %s បានឡើយ"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "បរាជ័យ​ក្នុងការថ្លែង %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "ថតព័ត៌មាន​ និង ពុម្ព ត្រូវការនៅលើ​ប្រព័ន្ធឯកសារ​ដូចគ្នា​"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "បរាជ័យ​ក្នុងការ​ផ្លាស់ប្ដូរទៅជា​ថតអ្នកគ្រប់គ្រង %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "កំហុស​ក្នុង​ការ ក្នុងការ​ទទួល​យក​ឈ្មោះកញ្ចប់"
+
+#~ msgid "Reading file listing"
+#~ msgstr "កំពុង​អាន​បញ្ជី​ឯកសារ"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "បរាជ័យ​ក្នុងការ​បើក​ឯកសារ​បញ្ជី​ '%sinfo/%s' ។ ប្រសិនបើ​អ្នក​មិន​អាច​ស្តារ​ឯកសារ​នេះបានទេ បន្ទាប់​"
+#~ "មក​ធ្វើឲ្យវា​ទទេ ហើយ​ដំឡើង​កញ្ចប់ដែលកំណែ​ដូចគ្នា​ឡើងវិញភ្លាមៗ !"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "បរាជ័យ​ក្នុងការ​អាន​ឯកសារបញ្ជី​ %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "កំហុស​ខាងក្នុង ក្នុង​​ការ​ទទួល​យក​ថ្នាំង​"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "បរាជ័យ​ក្នុងការ​បើក​ឯកសារបង្វែរ​ %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "ឯកសារ​បង្វែរ​បានខូច"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "បន្ទាត់​ដែលមិនត្រឹមត្រូវ​នៅក្នុង​ឯកសារ​បង្វែរ ៖ %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "កំហុស​ខាងក្នុង​ ក្នុង​ការបន្ថែម​ការបង្វែរ​"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "ឃ្លាំងសម្ងាត់ pkg ត្រូវ​តែ​ចាប់ផ្តើម​ដំឡើងមុន"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "បរាជ័យ​ក្នុងការរកកញ្ចប់ ៖ បឋមកថា​ អុហ្វសិត %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "ផ្នែក​ ConfFile ខូច នៅក្នុង​ឯកសារ​ស្ថានភាព ។ អុហ្វសិត​ %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "កំហុស​ក្នុងការញែក​ MD5 ។ អុហ្វសិត​ %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "មិនអាច​ប្ដូរ​ទៅជា​ %s បានឡើយ"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "បរាជ័យ​ក្នុងការដាក់ទិតាំង​ឯកសារ​ត្រួតពិនិត្យ​ដែលត្រឹមត្រូវ​"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "មិន​អាច​បើក​បំពុង​សម្រាប់​ %s បានឡើយ"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "អាចន​កំហុស​ពី​ដំណើរការ %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "យកបន្ទាត់​បឋមកថា​តែមួយ​​ ដែលលើស %u តួអក្សរ"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Malformed បដិសេធ %s បន្ទាត់ %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Malformed បដិសេធ %s បន្ទាត់​ %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Malformed បដិសេធ %s បន្ទាត់​ %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "កម្មវិធី​ពន្លា"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "អាន​, នៅតែ​មាន %lu ដើម្បី​អាន​ ប៉ុន្តែ​គ្មាន​អ្វី​នៅសល់"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "សរសេរ​, នៅតែមាន​ %lu ដើម្បី​សរសេរ​ ប៉ុន្តែ​មិន​អាច​"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "កំហុស​បាន​កើត​ឡើង​​ ខណៈ​ពេល​កំពុង​ដំណើរការ​ %s (កញ្ចប់​ថ្មី​)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "កំហុស​បាន​កើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (ប្រើ​កញ្ចប់​១​)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "កំហុស​បានកើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (កំណែ​​​ឯកសារ​ថ្មី​១)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "កំហុស​បាន​កើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (ប្រើកញ្ចប់២)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "កំហុស​បានកើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (កំណែ​​​ឯកសារ​ថ្មី​១)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "កំហុស​បានកើត​ឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (កំណែ១ថ្មី​)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "កំហុស​បាន​កើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (ប្រើកញ្ចប់​៣)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "កំហុស​បានកើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (កំណែ​​​ឯកសារ​ថ្មី​១)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "កំហុស​បានកើតឡើង​ខណៈពេល​កំពុង​ដំណើរការ​ %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "កំហុស​បានកើតឡើង​ខណៈពេល​កំពុង​ដំណើរការ​%s (ផ្តល់​ឯកសារ​ប្រមូល​ផ្តុំ)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "កំហុស​ខាងក្នុង មិន​អាចដាក់ទីតាំង​ឲ្យ​សមាជិក​បានឡើយ"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "E ៖ បញ្ជី​អាគុយ​ម៉ង់​ពី​ Acquire::gpgv::Options too long ។ ចេញ​ ។"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "កំហុស​បាន​កើត​ឡើង​ខណៈ​ពេល​កំពុង​ដំណើរការ​ %s (កំណែ២​ថ្មី​)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "បន្ទាត់​ Malformed %u ក្នុង​បញ្ជី​ប្រភព​ %s (លេខសម្គាល់​ក្រុមហ៊ុន​លក់)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "មិន​អាច​ចូល​ដំណើរការ keyring ៖ '%s'"
+
+#, fuzzy
+#~ msgid "Could not patch file"
+#~ msgstr "មិន​អាច​បើក​ឯកសារ​ %s បានឡើយ"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "​កំហុស​ដំណើរការ​ថត​ %s"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "ចាប់​តាំង​ពី​អ្នក​បាន​ស្នើរ​ប្រតិបត្តិការ​តែមួយមក​ វាទំនង​ហាក់​ដូចជា​\n"
+#~ "កញ្ចប់ដែលមិនអាចដំឡើងបានដោយងាយ ហើយនិង​ការប្រឆាំងនឹង​របាយការណ៍​កំហុស\n"
+#~ "កញ្ចប់​នោះ​ គួរតែត្រូវបានបរាជ័យ ។"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "បន្ទាត់​ %d វែងពេក​ (អតិបរមា %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "បន្ទាត់​ %d វែងពេក​ (អតិបរមា %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "កំហុស​បានកើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (កំណែ​​​ឯកសារ​ថ្មី​១)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "កំហុស​បានកើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (កំណែ​​​ឯកសារ​ថ្មី​១)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "បានទុក​ស្លាក ៖ %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr "បានរកឃើញ លិបិក្រម​កញ្ចប់ %i លិបិក្រម​ប្រភព%i និង ហត្ថលេខា %i \n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "ជ្រើស​បាន​បរាជ័យ​"
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..00dfd45
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,4261 @@
+# Sunjae Park <darehanl@gmail.com>, 2006-2007, 2008.
+# Changwoo Ryu <cwryu@debian.org>, 2004-2005, 2008, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2010-08-30 02:31+0900\n"
+"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
+"Language-Team: Korean <debian-l10n-korean@lists.debian.org>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "아카이브 서명이 틀렸습니다"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "아카이브 멤버 헤더를 읽는데 오류가 발생했습니다"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "아카이브 멤버 헤더가 잘못되었습니다"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "아카이브 길이가 너무 짧습니다"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "아카이브 헤더를 읽는데 실패했습니다"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "다음의 인증 기록을 찾을 수 없습니다: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "아카이브가 손상되었습니다"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "tar 체크섬 실패, 아카이브가 손상되었습니다"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "알 수 없는 TAR 헤더 타입 %u, 멤버 %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "올바른 DEB 아카이브가 아닙니다. '%s' 멤버가 없습니다"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "내부 오류, %s 멤버를 찾을 수 없습니다"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "control 파일을 파싱할 수 없습니다"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "%s 파일을 쓰는데 실패했습니다"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "%s 파일을 닫는데 실패했습니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "경로 %s이(가) 너무 깁니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s을(를) 두 번 이상 풀었습니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "%s 디렉터리가 전환되었습니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "이 패키지에서 전환된 대상에 쓰려고 합니다 (%s/%s)"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "전환하는 경로가 너무 깁니다"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s의 정보를 읽는데 실패했습니다"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "%s 파일의 이름을 %s(으)로 바꾸는데 실패했습니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "%s 디렉터리를 디렉터리가 아닌 파일로 덮어쓰려고 합니다"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "해시 버킷에서 노드를 찾는데 실패했습니다"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "경로가 너무 깁니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "덮어 쓰는 패키지가 %s 패키지의 어떤 버전과도 맞지 않습니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "%s/%s 파일은 %s 패키지에 있는 파일을 덮어 씁니다"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s을(를) 읽을 수 없습니다"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s의 정보를 읽을 수 없습니다"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode가 아직 연결되어 있는 노드에 대해 호출되었습니다"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "해시 항목을 찾는데 실패했습니다"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "diversion을 할당하는데 실패했습니다"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "AddDiversion에서 내부 오류"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "전환된 파일을 덮어 쓰려고 합니다 (%s -> %s 및 %s/%s)"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "전환된 파일을 두 번 추가합니다 (%s -> %s)"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "%s/%s 설정 파일이 중복되었습니다"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "%s 디렉터리가 전환되었습니다"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "%s 디렉터리가 전환되었습니다"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "%s 디렉터리가 전환되었습니다"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "%s 디렉터리가 전환되었습니다"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "%s 디렉터리가 전환되었습니다"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "%s 파일에 readlink하는데 실패했습니다"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "해시 합이 맞지 않습니다"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "이름 바꾸기가 실패했습니다. %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "크기가 맞지 않습니다"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "잘못된 작업 %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "쓰기 오류"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"디지털 서명 확인에 오류가 발생했습니다. 저장고를 업데이트하지 않고\n"
+"예전의 인덱스 파일을 사용합니다. GPG 오류: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG 오류: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "배포판 충돌: %s (예상값 %s, 실제값 %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "%s 파일을 받는데 실패했습니다 %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"%s 패키지의 파일을 찾을 수 없습니다. 수동으로 이 패키지를 고쳐야 할 수도 있습"
+"니다. (아키텍쳐가 빠졌기 때문입니다)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "%s(%s)에 연결하는 중입니다"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "설치 방법 드라이버 %s을(를) 찾을 수 없습니다."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "'dpkg-dev' 패키지가 설치되었는지를 확인하십시오.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "설치 방법 %s이(가) 올바르게 시작하지 않았습니다"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"'%2$s' 드라이브에 '%1$s'(으)로 표기된 디스크를 넣고 Enter를 누르십시오."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "목록 디렉터리 %s이 빠졌습니다."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "아카이브 디렉터리 %s이 빠졌습니다."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "%s 디렉터리를 잠글 수 없습니다"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "인덱스 파일 타입 '%s' 타입은 지원하지 않습니다"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "파일 받아오는 중: %2$li 중 %1$li (%3$s 남았음)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "파일 받아오는 중: %2$li 중 %1$li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"%s 패키지를 다시 설치해야 하지만, 이 패키지의 아카이브를 찾을 수 없습니다."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"오류, pkgProblemResolver::Resolve가 망가졌습니다. 고정 패키지때문에 발생할 수"
+"도 있습니다."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "문제를 바로잡을 수 없습니다. 망가진 고정 패키지가 있습니다."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "패키지 목록이나 상태 파일을 파싱할 수 없거나 열 수 없습니다."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "apt-get update를 실행하면 이 문제를 바로잡을 수도 있습니다."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "소스 목록을 읽을 수 없습니다."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "정규식 컴파일 오류 - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "%2$s 패키지의 '%1$s' 릴리즈를 찾을 수 없습니다"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "%2$s 패키지의 '%1$s' 버전을 찾을 수 없습니다"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "'%s' 작업을 찾을 수 없습니다"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "'%s' 정규식에 해당하는 패키지가 없습니다"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "'%s' 정규식에 해당하는 패키지가 없습니다"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "%s 패키지를 찾을 수 없습니다"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "'%s' 패키지는 가상 패키지이므로 버전을 선택할 수 없습니다"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr "'%s' 패키지에서 최신 버전을 선택할 수 없습니다. 가상 패키지입니다."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "'%s' 패키지에서 후보 버전을 선택할 수 없습니다. 후보가 없습니다."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr "'%s' 패키지에서 설치한 버전을 선택할 수 없습니다. 설치하지 않았습니다."
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"'%s' 패키지에서 설치한 버전이나 후보 버전을 선택할 수 없습니다. 둘 다 아닙니"
+"다."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "소스 리스트 %2$s의 %1$u번 줄이 너무 깁니다."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "CD-ROM을 마운트 해제하는 중입니다...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "CD-ROM 마운트 위치 %s 사용\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "디스크를 기다리는 중입니다...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "CD-ROM 마운트하는 중입니다...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "알아보는 중입니다... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "저장된 레이블: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "디스크에서 색인 파일을 찾는 중입니다...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr "패키지 색인 %zu개, 소스 색인 %zu개, 번역 색인 %zu개, 서명 %zu개 발견\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"패키지 파일이 하나도 없습니다. 아마도 데비안 디스크가 아니거나 아키텍처가 잘"
+"못된 것 같습니다?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "레이블 발견: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "올바른 이름이 아닙니다. 다시 시도하십시오.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"이 디스크는 다음과 같습니다: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "패키지 목록을 복사하는 중입니다..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "새 소스 리스트를 쓰는 중입니다\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "이 디스크의 소스 리스트 항목은 다음과 같습니다:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "%s 디렉토리로 이동할 수 없습니다"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s의 정보를 읽을 수 없습니다."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "마운트 위치 %s의 정보를 읽을 수 없습니다"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "CD-ROM의 정보를 읽을 수 없습니다"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "명령행 옵션 '%c' 옵션을 [%s에서] 알 수 없습니다."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "명령행 옵션 '%s' 옵션을 알 수 없습니다"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "명령행 옵션 '%s' 옵션은 불리언이 아닙니다"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "%s 옵션에는 인수가 필요합니다."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "%s 옵션: 설정 항목 지정은 =<값> 형태여야 합니다."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "%s 옵션에는 정수 인수가 필요합니다. '%s'이(가) 아닙니다"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "'%s' 옵션이 너무 깁니다"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "%s 센스를 이해할 수 없습니다. 참 아니면 거짓으로 해 보십시오."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "잘못된 작업 %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "이 타입 줄임말을 알 수 없습니다: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "문법 오류 %s:%u: 블럭이 이름으로 시작하지 않습니다."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "문법 오류 %s:%u: 태그의 형식이 잘못되었습니다"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "문법 오류 %s:%u: 값 뒤에 쓰레기 데이터가 더 있습니다"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "문법 오류 %s:%u: 지시어는 맨 위 단계에서만 쓸 수 있습니다"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "문법 오류 %s:%u: include가 너무 많이 겹쳐 있습니다"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "문법 오류 %s:%u: 여기서 include됩니다"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "문법 오류 %s:%u: 지원하지 않는 지시어 '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "문법 오류 %s:%u: clear 지시어는 인수로 option 트리를 지정해야 합니다"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "문법 오류 %s:%u: 파일의 끝에 쓰레기 데이터가 더 있습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "%s 파일을 삭제하는데 문제가 있습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "읽기 전용 잠금 파일 %s에 대해 잠금을 사용하지 않습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "잠금 파일 %s 파일을 열 수 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "NFS로 마운트된 잠금 파일 %s에 대해 잠금을 사용하지 않습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "%s 잠금 파일을 얻을 수 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "%s 프로세스를 기다렸지만 해당 프로세스가 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "하위 프로세스 %s 프로세스가 세그멘테이션 오류를 받았습니다."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "하위 프로세스 %s 프로세스가 %u번 시그널을 받았습니다."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "하위 프로세스 %s 프로세스가 오류 코드(%u)를 리턴했습니다"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "하위 프로세스 %s 프로세스가 예상치 못하게 끝났습니다"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "읽기 오류"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "쓰기 오류"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "%s gzip 파일을 닫는데 문제가 있습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "하위 프로세스 IPC를 만드는데 실패했습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "다음 압축 프로그램을 실행하는데 실패했습니다: "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "%s 파일을 열 수 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "%d 파일 디스크립터를 열 수 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "%lu만큼 더 읽어야 하지만 더 이상 읽을 데이터가 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "%lu만큼 더 써야 하지만 더 이상 쓸 수 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "%s 파일을 닫는데 문제가 있습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "%s 파일을 %s(으)로 이름을 바꾸는데 문제가 있습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "파일을 동기화하는데 문제가 있습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "%s의 정보를 읽을 수 없습니다"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "%s에 쓸 수 없습니다"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "빈 파일에 메모리 매핑할 수 없습니다"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "%lu바이트를 메모리 매핑할 수 없습니다"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "%i 파일 디스크립터를 복사할 수 없습니다"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "mmap을 닫을 수 없습니다"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "mmap을 동기화할 수 없습니다"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "%lu바이트를 메모리 매핑할 수 없습니다"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "파일을 자르는데 실패했습니다"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"동적 mmap이 한계를 벗어났습니다. APT::Cache-Start의 크기를 높이십시오. 현재 "
+"값: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr "mmap 크기를 늘릴 수 없습니다. 이미 %lu 바이트 한계에 도달했습니다."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"mmap 크기를 늘릴 수 없습니다. 자동으로 늘리는 기능을 사용자가 금지했습니다."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... 오류!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... 완료"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... 완료"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%li일 %li시간 %li분 %li초"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%li시간 %li분 %li초"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%li분 %li초"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%li초"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "선택한 %s이(가) 없습니다"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Release 파일 %s 파일을 파싱할 수 없습니다"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Release 파일 %s에 섹션이 없습니다"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Release 파일 %s에 Hash 항목이 없습니다"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Release 파일 %s에 '%s' 항목이 잘못되었습니다"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "패키지 파일 %s 파일을 파싱할 수 없습니다 (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"관리 디렉터리를 (%s) 잠글 수 없습니다. 다른 프로세스가 사용하고 있지 않습니"
+"까?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "관리 디렉터리를 (%s) 잠글 수 없습니다. 루트 사용자가 맞습니까?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg가 중단되었습니다. 수동으로 '%s' 명령을 실행해 문제점을 바로잡으십시오."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"관리 디렉터리를 (%s) 잠글 수 없습니다. 다른 프로세스가 사용하고 있지 않습니"
+"까?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "관리 디렉터리를 (%s) 잠글 수 없습니다. 루트 사용자가 맞습니까?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "잠기지 않음"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s 준비 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "%s 패키지를 설정할 준비하는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "%s 패키지를 지울 준비하는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "%s 패키지를 완전히 지울 준비를 하는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "%s 사라짐 발견했습니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "설치 후 트리거 %s 실행하는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s 설치"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s 설정 중입니다"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "디렉터리 '%s' 없습니다."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "'%s' 파일을 열 수 없습니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s 푸는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s 설치하는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s 패키지를 지우는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s 패키지를 완전히 지우는 중입니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s 패키지를 완전히 지웠습니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "%s에 쓸 수 없습니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "보고서를 작성하지 않습니다. 이미 MaxReports 값에 도달했습니다."
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "의존성 문제 - 설정하지 않은 상태로 남겨둡니다"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"보고서를 작성하지 않습니다. 오류 메시지에 따르면 예전의 실패 때문에 생긴 부수"
+"적인 오류입니다."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"보고서를 작성하지 않습니다. 오류 메시지에 따르면 디스크가 가득 찼습니다."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr "보고서를 작성하지 않습니다. 오류 메시지에 따르면 메모리가 부족합니다."
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"보고서를 작성하지 않습니다. 오류 메시지에 따르면 디스크가 가득 찼습니다."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"보고서를 작성하지 않습니다. 오류 메시지에 따르면 dpkg 입출력 오류입니다."
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "의존성 트리를 만드는 중입니다"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "후보 버전"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "의존성 만들기"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "상태 정보를 읽는 중입니다"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "상태파일 %s 여는데 실패했습니다"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "임시 상태파일 %s 쓰는데 실패했습니다"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "레코드 %i개를 썼습니다.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "레코드 %i개를 파일 %i개가 빠진 상태로 썼습니다.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "레코드 %i개를 파일 %i개가 맞지 않은 상태로 썼습니다\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "레코드 %i개를 파일 %i개가 빠지고 %i개가 맞지 않은 상태로 썼습니다\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "다음의 인증 기록을 찾을 수 없습니다: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "다음의 해시가 다릅니다: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "'%s' 패키지 시스템을 지원하지 않습니다"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "올바른 패키지 시스템 타입을 알아낼 수 없습니다"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "dpkg 실행하는 중입니다"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"'%s'에 대해 즉시 설정을 할 수 없습니다. 자세한 설명은 man 5 apt.conf 페이지에"
+"서 APT::Immediate-Configure 항목을 보십시오. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "'%s' 파일을 열 수 없습니다"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"이번에 설치할 때 충돌/선의존성이 루프가 걸렸기 때문에 꼭 필요한 %s 패키지를 "
+"잠깐 제거해야 합니다. 이 패키지를 제거하는 건 좋지 않지만, 정말 지우려면 "
+"APT::Force-LoopBreak 옵션을 켜십시오."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "패키지 캐시가 비어 있습니다"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "패키지 캐시 파일이 손상되었습니다"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "패키지 캐시 파일이 호환되지 않는 버전입니다"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "이 APT는 '%s' 버전 시스템을 지원하지 않습니다"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "패키지 캐시가 다른 아키텍쳐용입니다."
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "패키지 캐시 파일이 손상되었습니다"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "의존"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "미리의존"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "제안"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "충돌"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "추천"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "대체"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "망가뜨림"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "향상"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "없앰"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "중요"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "필수"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "표준"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "별도"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "옵션"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "캐시의 버전 시스템이 호환되지 않습니다"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "%s 처리 중에 오류가 발생했습니다 (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "우와, 이 APT가 처리할 수 있는 패키지 이름 개수를 넘어갔습니다."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "우와, 이 APT가 처리할 수 있는 버전 개수를 넘어갔습니다."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "우와, 이 APT가 처리할 수 있는 설명 개수를 넘어갔습니다."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "우와, 이 APT가 처리할 수 있는 의존성 개수를 넘어갔습니다."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "패키지 목록을 읽는 중입니다"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "소스 캐시를 저장하는데 입출력 오류가 발생했습니다"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "인덱스 파일 타입 '%s' 타입은 지원하지 않습니다"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "기본 설정 파일 %s에 잘못된 데이터가 있습니다. Package 헤더가 없습니다"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "핀 타입 %s이(가) 무엇인지 이해할 수 없습니다"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "핀에 우선순위(혹은 0)를 지정하지 않았습니다"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "override %s의 %lu번 줄 #1이 잘못되었습니다"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "소스 리스트 %2$s의 %1$u번 줄이 잘못되었습니다 (타입)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "소스 목록 %3$s의 %2$u번 줄의 '%1$s' 타입을 알 수 없습니다"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "소스 리스트 %2$s의 %1$u번 줄이 잘못되었습니다 (타입)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "소스 목록 %3$s의 %2$u번 줄의 '%1$s' 타입을 알 수 없습니다"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "sources.list에 '소스' URI를 써 넣어야 합니다"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"일부 인덱스 파일을 다운로드하는데 실패했습니다. 해당 파일을 무시하거나 과거"
+"의 버전을 대신 사용합니다."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "업그레이드를 계산하는 중입니다"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "기존:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "받기:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "무시:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "오류:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "내려받기 %s바이트, 소요시간 %s (%s바이트/초)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [작업중]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"미디어 바꾸기: '%2$s' 드라이브에 다음 레이블이 달린\n"
+"디스크를 넣고 enter를 누르십시오\n"
+" '%1$s'\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "의존성을 바로잡는 중입니다..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " 실패."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "의존성을 바로잡을 수 없습니다"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "업그레이드 집합을 최소화할 수 없습니다"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " 완료"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"이 상황을 바로잡으려면 'apt --fix-broken install'을 실행해야 할 수도 있습니"
+"다."
+
+# FIXME: specify a solution? 무슨 솔루션?
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"의존성이 맞지 않습니다. 패키지 없이 'apt --fix-broken install'을 시도해 보십"
+"시오 (아니면 해결 방법을 지정하십시오)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "주의, 작업 '%2$s'에 대해 '%1$s'을(를) 선택합니다\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "주의, 정규식 '%2$s'에 대해 '%1$s'을(를) 선택합니다\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "주의, 정규식 '%2$s'에 대해 '%1$s'을(를) 선택합니다\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "%s 패키지는 다음이 제공하는 가상 패키지입니다:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [설치함]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr "[후보 버전 아님]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "설치할 패키지를 하나 분명히 지정해야 합니다."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"%s 패키지를 사용할 수 없습니다. 하지만 다른 패키지가 참조하고 있습니다.\n"
+"해당 패키지가 누락되었거나 지워졌다는 뜻입니다. 아니면 또 다른 곳에서\n"
+"패키지를 받아와야 하는 경우일 수도 있습니다.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "하지만 다음 패키지가 대체합니다:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "'%s' 패키지는 설치할 수 있는 후보가 없습니다"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "'%s' 패키지와 같은 가상 패키지는 제거할 수 없습니다\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "%s 패키지를 설치하지 않았으므로, 지우지 않습니다\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "%s 패키지를 설치하지 않았으므로, 지우지 않습니다\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "주의, '%2$s' 대신에 '%1$s' 패키지를 선택합니다\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "이 APT는 Super Cow Powers로 무장했습니다."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "패키지가 없습니다"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "경고: 다음 패키지를 인증할 수 없습니다!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "인증 경고를 무시합니다.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "인증할 수 없는 패키지가 있습니다"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "확인하지 않고 패키지를 설치하시겠습니까?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "문제가 발생했고 -y 옵션이 --force-yes 옵션 없이 사용되었습니다"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "%s의 여유 공간의 크기를 파악할 수 없습니다"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "%s 안에 충분한 여유 공간이 없습니다."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "다운로드 디렉터리를 잠글 수 없습니다"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"몇몇 패키지를 설치할 수 없습니다. 요청한 상황이 불가능할 수도 있고,\n"
+"불안정 배포판을 사용해서 일부 필요한 패키지를 아직 만들지 않았거나,\n"
+"아직 Incoming에서 나오지 않은 경우일 수도 있습니다."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "이 상황을 해결하는데 다음 정보가 도움이 될 수도 있습니다:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "망가진 패키지"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"아카이브를 받을 수 없습니다. 아마도 apt-get update를 실행해야 하거나 --fix-"
+"missing 옵션을 줘서 실행해야 할 것입니다."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "내부 오류. 망가진 패키지에서 InstallPackages를 호출했습니다!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "패키지를 제거해야 하지만 제거가 금지되어 있습니다."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "문제가 발생했고 -y 옵션이 --force-yes 옵션 없이 사용되었습니다"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "문제가 발생했고 -y 옵션이 --force-yes 옵션 없이 사용되었습니다"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "내부 오류. 순서변경작업이 끝나지 않았습니다"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"이상하게도 크기가 서로 다릅니다. apt@packages.debian.org로 이메일을 보내주십"
+"시오."
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "%s바이트/%s바이트 아카이브를 받아야 합니다.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "%s바이트 아카이브를 받아야 합니다.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "이 작업 후 %s바이트의 디스크 공간을 더 사용하게 됩니다.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "이 작업 후 %s바이트의 디스크 공간이 비워집니다.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"사소한 작업만 가능하도록(Trivial Only) 지정되었지만 이 작업은 사소한 작업이 "
+"아닙니다."
+
+# 입력을 받아야 한다. 한글 입력을 못 할 수 있으므로 원문 그대로 사용.
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Yes, do as I say!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"시스템에 무언가 해가 되는 작업을 하려고 합니다.\n"
+"계속하시려면 다음 문구를 입력하십시오: '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "중단."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "계속 하시겠습니까?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "일부 파일을 받는데 실패했습니다"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "다운로드를 마쳤고 다운로드 전용 모드입니다"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing 옵션과 동시에 미디어 바꾸기는 현재 지원하지 않습니다"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "빠진 패키지를 바로잡을 수 없습니다."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "설치를 중단합니다."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"다음 패키지는 패키지의 파일을 모두 다른 패키지가\n"
+"덮어썼기 때문에 사라졌습니다:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "주의: dpkg에서 자동으로 의도적으로 수행했습니다."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "삭제를 할 수 없으므로 AutoRemover를 실행하지 못합니다"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"AutoRemover가 뭔가를 망가뜨린 것으로 보입니다. 이 문제는 실제 일어나서는\n"
+"안 됩니다. apt에 대해 버그 보고를 하십시오."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "내부 오류, 문제 해결 프로그램이 무언가를 망가뜨렸습니다"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "패키지 %lu개가 자동으로 설치되었지만 더 이상 필요하지 않습니다.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "이들을 지우려면 '%s'를 사용하십시오."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "다음 패키지를 더 설치할 것입니다:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "제안하는 패키지:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "추천하는 패키지:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"%s 패키지를 건너 뜁니다. 이미 설치되어 있고 업그레이드를 하지 않습니다.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "%s 패키지를 건너 뜁니다. 설치되지 않았고 업그레이드만 요청합니다.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "%s 패키지를 다시 설치하는 건 불가능합니다. 다운로드할 수 없습니다.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s 패키지는 이미 최신 버전입니다.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s 패키지는 수동설치로 지정합니다.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "'%3$s' 패키지의 '%1$s' (%2$s) 버전을 선택합니다\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "'%3$s' 패키지의 '%1$s' (%2$s) 버전을 선택합니다\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"알림: 시험 동작입니다!\n"
+" 실행하려면 %s을 실행할 때 루트 권한이 필요합니다.\n"
+" 또 잠금 기능을 사용하지 않는 상태이므로, 현재 상황에 의존하지\n"
+" 않도록 하십시오!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [설치함]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [설치함]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [설치함]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [설치함]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "하지만 %s 패키지를 설치했습니다"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "하지만 %s 패키지를 설치할 것입니다"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "하지만 설치할 수 없습니다"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "하지만 가상 패키지입니다"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "하지만 %s 패키지를 설치하지 않을 것입니다"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "하지만 설치하지 않았습니다"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " 혹은"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "다음 패키지의 의존성이 맞지 않습니다:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "다음 새 패키지를 설치할 것입니다:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "다음 패키지를 지울 것입니다:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "다음 패키지를 과거 버전으로 유지합니다:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "다음 패키지를 업그레이드할 것입니다:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "다음 패키지를 다운그레이드할 것입니다:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "고정되었던 다음 패키지를 바꿀 것입니다:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (%s때문에)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"경고: 꼭 필요한 다음 패키지를 지우게 됩니다.\n"
+"무슨 일을 하고 있는 지 정확히 알지 못한다면 지우지 마십시오!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu개 업그레이드, %lu개 새로 설치, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu개 다시 설치, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu개 업그레이드, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu개 제거 및 %lu개 업그레이드 안 함.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu개를 완전히 설치하지 못했거나 지움.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Y/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[y/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "최소 한 개의 검색어를 지정해야 합니다"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "패키지 파일:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "캐시가 동기화되지 않았습니다. 패키지 파일을 상호 참조할 수 없습니다"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "핀 패키지:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " 설치: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " 후보: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(없음)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " 버전 테이블:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "'%s' 정규식에 해당하는 패키지가 없습니다"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "'%s' 정규식에 해당하는 패키지가 없습니다"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "'%s' 정규식에 해당하는 패키지가 없습니다"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "소스 패키지로 '%s'을(를) '%s' 대신 선택합니다\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "'%2$s' 패키지의 '%1$s' 버전은 없으므로 무시합니다."
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "해당되는 소스 패키지를 가져올 패키지를 최소한 하나 지정해야 합니다"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "%s의 소스 패키지를 찾을 수 없습니다"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"알림: '%s' 패키징은 다음 '%s' 버전 컨트롤 시스템에서 관리합니다:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"패키지의 최근 (아마도 릴리스되지 않은) 업데이트를 받으려면\n"
+"다음과 같이 하십시오:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "이미 다운로드 받은 파일 '%s'은(는) 다시 받지 않고 건너 뜁니다.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "소스 아카이브를 %s바이트/%s바이트 받아야 합니다.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "소스 아카이브를 %s바이트 받아야 합니다.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "%s 소스를 가져옵니다\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "일부 아카이브를 가져오는데 실패했습니다."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "%s에 이미 풀려 있는 소스의 압축을 풀지 않고 건너 뜁니다.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "압축 풀기 명령 '%s' 실패.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "'dpkg-dev' 패키지가 설치되었는지를 확인하십시오.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "빌드 명령 '%s' 실패.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "%s의 빌드 의존성 정보를 가져올 수 없습니다"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s 패키지에 빌드 의존성이 없습니다.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "해당되는 빌드 의존성을 검사할 패키지를 최소한 하나 지정해야 합니다"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "빌드 의존성을 처리하는데 실패했습니다"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "빌드 의존성을 처리하는데 실패했습니다"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "%s 파일의 이름을 %s(으)로 바꾸는데 실패했습니다"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "%s 패키지의 %s 버전의 의존성이 맞지 않습니다:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "update 명령은 인수를 받지 않습니다"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "update 명령은 인수를 받지 않습니다"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "전체 패키지 이름 : "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "전체 패키지 구조: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " 일반 패키지: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " 순수 가상 패키지: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " 단일 가상 패키지: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " 혼합 가상 패키지: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " 빠짐: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "개별 버전 전체: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "개별 설명 전체: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "전체 의존성: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "전체 버전/파일 관계: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "전체 설명/파일 관계: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "전체 제공 매핑: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "전체 패턴 문자열: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "전체 빈 용량: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "차지하는 전체 용량: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "소스 기록을 봅니다"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "정규식 패턴에 맞는 패키지 목록을 찾습니다"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "패키지에 대해 의존성 정보를 그대로 봅니다"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "패키지의 역 의존성 정보를 봅니다"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "패키지에 대해 읽을 수 있는 기록을 봅니다"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "시스템에 들어 있는 패키지의 이름을 모두 봅니다"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "정책 설정을 봅니다"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "이 디스크의 이름을 정하십시오 (예: 'Debian 5.0.3 Disk 1')"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "드라이브에 디스크를 넣고 Enter를 누르십시오"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "%s 파일의 이름을 %s(으)로 바꾸는데 실패했습니다"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "현재 갖고 있는 다른 CD에도 이 과정을 반복하십시오."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "인수가 두 개가 아닙니다"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"사용법: apt-config [옵션] 명령\n"
+"\n"
+"apt-config는 APT 설정 파일을 읽는 간단한 프로그램입니다\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"사용법: apt-extracttemplates 파일1 [파일2 ...]\n"
+"\n"
+"apt-extracttemplates는 데비안 패키지에서 설정 및 서식 정보를 뽑아내는\n"
+"도구입니다\n"
+"\n"
+"옵션:\n"
+" -h 이 도움말\n"
+" -t 임시 디렉토리 설정\n"
+" -c=? 설정 파일을 읽습니다\n"
+" -o=? 임의의 옵션을 설정합니다. 예를 들어 -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "debconf 버전을 알 수 없습니다. debconf가 설치되었습니까?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "%s 패키지를 찾을 수 없습니다"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s 패키지는 자동설치로 지정합니다.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "내부 오류, 문제 해결 프로그램이 무언가를 망가뜨렸습니다"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "지원하는 모듈:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"사용법: apt-get [옵션] 명령어\n"
+" apt-get [옵션] install|remove 패키지1 [패키지2 ...]\n"
+" apt-get [옵션] source 패키지1 [패키지2 ...]\n"
+"\n"
+"apt-get은 패키지를 내려받고 설치하는 간단한 명령행 인터페이스입니다.\n"
+"가장 자주 사용하는 명령은 update와 install입니다.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "패키지 목록을 새로 가져옵니다"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "업그레이드를 합니다"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "새 패키지를 설치합니다 (패키지는 libc6 식으로. libc6.deb 아님)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "새 패키지를 설치합니다 (패키지는 libc6 식으로. libc6.deb 아님)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "패키지를 지웁니다"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "패키지를 완전히 지웁니다"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "사용하지 않는 패키지를 자동으로 전부 지웁니다"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "배포판 업그레이드, apt-get(8) 참고"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "dselect에서 선택한 걸 따릅니다"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "소스 패키지의 빌드 의존성을 설정합니다"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "내려받은 아카이브 파일들을 지웁니다"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "과거에 내려받은 아카이브 파일들을 지웁니다"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "의존성이 망가지지 않았는지 확인합니다"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "소스 아카이브를 다운로드합니다"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "해당되는 소스 패키지를 가져올 패키지를 최소한 하나 지정해야 합니다"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"사용법: apt-extracttemplates 파일1 [파일2 ...]\n"
+"\n"
+"apt-extracttemplates는 데비안 패키지에서 설정 및 서식 정보를 뽑아내는\n"
+"도구입니다\n"
+"\n"
+"옵션:\n"
+" -h 이 도움말\n"
+" -t 임시 디렉토리 설정\n"
+" -c=? 설정 파일을 읽습니다\n"
+" -o=? 임의의 옵션을 설정합니다. 예를 들어 -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"사용법: apt-extracttemplates 파일1 [파일2 ...]\n"
+"\n"
+"apt-extracttemplates는 데비안 패키지에서 설정 및 서식 정보를 뽑아내는\n"
+"도구입니다\n"
+"\n"
+"옵션:\n"
+" -h 이 도움말\n"
+" -t 임시 디렉토리 설정\n"
+" -c=? 설정 파일을 읽습니다\n"
+" -o=? 임의의 옵션을 설정합니다. 예를 들어 -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "하지만 설치하지 않았습니다"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s 패키지는 이미 수동설치로 지정되어 있습니다.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s 패키지는 이미 자동설치로 지정되어 있습니다.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "다음 새 패키지를 설치할 것입니다:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s 패키지는 이미 최신 버전입니다.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s 패키지는 이미 최신 버전입니다.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s 패키지 수동설치로 지정합니다.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "%s 파일을 여는데 실패했습니다"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s 패키지는 수동설치로 지정합니다.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "'dpkg-dev' 패키지가 설치되었는지를 확인하십시오.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s 패키지는 수동설치로 지정합니다.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s 패키지는 수동설치로 지정합니다.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s 패키지 수동설치로 지정합니다.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "알 수 없는 패키지 기록!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "패키지 목록을 읽는 중입니다"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "핀 패키지:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "핀 패키지:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "망가진 패키지"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s 패키지 수동설치로 지정합니다.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "상태 정보를 읽는 중입니다"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "기본 설정이 잘못되었습니다!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "계속 하시려면 enter를 누르십시오."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "이전에 다운로드 받았던 .deb 파일을 지우시겠습니까?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "압축을 푸는데 몇몇 오류가 발생했습니다. 설치된 패키지를"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "설정합니다. 오류때문에 의존성을 만족하지 못해 설정하는 과정에서"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"오류가 중복되어 나타날 수 있습니다. 하지만 상관없고, 이 메세지 위에 나온"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "오류만 중요합니다. 이 오류를 고친 다음에 설치(I)를 다시 시도하십시오"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "이용 가능 패키지 정보를 합칩니다"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "패키지 확장 목록이 너무 깁니다"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "%s 디렉터리를 처리하는데 오류가 발생했습니다"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "소스 확장 목록이 너무 깁니다"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "컨텐츠 파일에 헤더를 쓰는데 오류가 발생했습니다"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "%s 컨텐츠를 처리하는데 오류가 발생했습니다"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"사용법: apt-ftparchive [옵션] 명령\n"
+"명령: packages 바이너리경로 [override파일 [경로앞부분]]\n"
+" sources 소스경로 [override파일 [경로앞부분]]\n"
+" contents 경로\n"
+" release 경로\n"
+" generate 설정 [그룹]\n"
+" clean 설정\n"
+"\n"
+"apt-ftparchive는 데비안 아카이브용 인덱스 파일을 만듭니다. 이 프로그램은\n"
+"여러 종류의 인덱스 파일 만드는 작업을 지원합니다 -- 완전 자동화 작업부터\n"
+"dpkg-scanpackages와 dpkg-scansources의 기능을 대체하기도 합니다.\n"
+"\n"
+"apt-ftparchive는 .deb 파일의 트리에서부터 Package 파일을 만듭니다.\n"
+"Package 파일에는 각 패키지의 모든 제어 필드는 물론 MD5 해시와 파일\n"
+"크기도 들어 있습니다. override 파일을 이용해 Priority와 Section의 값을 \n"
+"강제로 설정할 수 있습니다\n"
+"\n"
+"이와 비슷하게 apt-ftparchive는 .dsc 파일의 트리에서 Sources 파일을\n"
+"만듭니다. --source-override 옵션을 이용해 소스 override 파일을\n"
+"지정할 수 있습니다.\n"
+"\n"
+"'packages'와 'sources' 명령은 해당 트리의 맨 위에서 실행해야 합니다.\n"
+"\"바이너리경로\"는 검색할 때의 기준 위치를 가리키며 \"override파일\"에는\n"
+"override 플래그들을 담고 있습니다. \"경로앞부분\"은 각 파일 이름\n"
+"필드의 앞에 더해 집니다. 데비안 아카이브에 있는 예를 하나 들자면:\n"
+"\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"옵션:\n"
+" -h 이 도움말\n"
+" --md5 MD5 만들기 작업을 제어합니다\n"
+" -s=? 소스 override 파일\n"
+" -q 조용히\n"
+" -d=? 캐시 데이터베이스를 직접 설정합니다\n"
+" --no-delink 디버깅 모드 지우기를 사용합니다\n"
+" --contents 컨텐츠 파일을 만드는 적업을 제어합니다\n"
+" -c=? 이 설정 파일을 읽습니다\n"
+" -o=? 임의의 옵션을 설정합니다"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "맞는 패키지가 없습니다"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "`%s' 패키지 파일 그룹에 몇몇 파일이 빠졌습니다"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB가 망가졌습니다. 파일 이름을 %s.old로 바꿉니다"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB가 오래되었습니다. %s의 업그레이드를 시도합니다"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"DB 형식이 잘못되었습니다. APT 예전 버전에서 업그레이드했다면, 데이터베이스를 "
+"지우고 다시 만드십시오."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "DB 파일, %s 파일을 열 수 없습니다: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "%s 파일에 readlink하는데 실패했습니다"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "아카이브에 컨트롤 기록이 없습니다"
+
+# FIXME: 왠 커서??
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "커서를 가져올 수 없습니다"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - 메모리를 할당하는데 실패했습니다"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "'%s' 압축 알고리즘을 알 수 없습니다"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "압축된 출력물 %s에는 압축 세트가 필요합니다"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "하위 프로세스에 대한 IPC 파이프를 만드는데 실패했습니다"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "fork하는데 실패했습니다"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "압축 하위 프로세스"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "내부 오류, %s 만드는데 실패했습니다"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "하위 프로세스/파일에 입출력하는데 실패했습니다"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "MD5를 계산하는 동안 읽는데 실패했습니다"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s 열 수 없습니다"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "override %s의 %lu번 줄 #1이 잘못되었습니다"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "%s override 파일을 읽는데 실패했습니다"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "override %s의 %lu번 줄 #1이 잘못되었습니다"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "override %s의 %lu번 줄 #2가 잘못되었습니다"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "override %s의 %lu번 줄 #3이 잘못되었습니다"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "경고: %s 디렉터리를 읽을 수 없습니다\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "경고: %s의 정보를 읽을 수 없습니다\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "오류: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "경고: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "오류: 다음 파일에 적용하는데 오류가 발생했습니다: "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s의 경로를 알아내는데 실패했습니다"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "트리에서 이동이 실패했습니다"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s 파일을 여는데 실패했습니다"
+
+# FIXME: ??
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " 링크 %s [%s] 없애기\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** %s 파일을 %s에 링크하는데 실패했습니다"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink 한계값 %s바이트에 도달했습니다.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "아카이브에 패키지 필드가 없습니다"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s에는 override 항목이 없습니다\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s 관리자가 %s입니다 (%s 아님)\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s에는 source override 항목이 없습니다\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s에는 binary override 항목이 없습니다\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "헤더를 기다리는 중입니다"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP 서버에서 잘못된 응답 헤더를 보냈습니다"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "헤더 줄이 잘못되었습니다"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP 서버에서 잘못된 Content-Length 헤더를 보냈습니다"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP 서버에서 잘못된 Content-Range 헤더를 보냈습니다"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "HTTP 서버에 범위 지원 기능이 잘못되어 있습니다"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "데이터 형식을 알 수 없습니다"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "헤더 데이터가 잘못되었습니다"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "연결이 실패했습니다"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "내부 오류"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "CD-ROM 데이터베이스 %s을(를) 읽을 수 없습니다"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"이 CD를 APT에서 인식하려면 apt-cdrom을 사용하십시오. apt-get update로는 새 "
+"CD를 추가할 수 없습니다."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "잘못된 CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "%s 안의 CD-ROM을 마운트 해제할 수 없습니다. 사용 중일 것입니다."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "디스크가 없습니다."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "파일이 없습니다"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "%s(%s)에 연결하는 중입니다"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "%s(%s)에 연결하는 중입니다"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "%s에 대한 소켓을 만들 수 없습니다 (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "%s:%s에 연결을 초기화할 수 없습니다 (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "실패"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "%s:%s에 연결할 수 없습니다 (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "%s:%s에 연결할 수 없습니다 (%s). 연결 제한 시간이 초과했습니다"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "%s에 연결하는 중입니다"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "'%s'의 주소를 알아낼 수 없습니다"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "'%s'의 주소를 알아내는데 임시로 실패했습니다"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "'%s:%s'의 주소를 알아내는데 무언가 이상한 일이 발생했습니다 (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "'%s:%s'의 주소를 알아내는데 무언가 이상한 일이 발생했습니다 (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "%s:%s에 연결할 수 없습니다:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "파일 정보를 읽는데 실패했습니다"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI가 틀렸습니다. 로컬 URI는 //로 시작해야 합니다."
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "로그인하는 중입니다"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "상대방의 이름을 알 수 없습니다"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "로컬 이름을 알 수 없습니다"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "서버에서 다음과 같이 연결을 거부했습니다: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER 실패, 서버에서는: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS 실패, 서버에서는: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"프록시 서버를 지정했지만 로그인 스크립트가 없습니다. Acquire::ftp::"
+"ProxyLogin 값이 비어 있습니다."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "로그인 스크립트 명령 '%s' 실패, 서버에서는: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE 실패, 서버에서는: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "연결 시간 초과"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "서버에서 연결을 닫았습니다"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "응답이 버퍼 크기를 넘어갔습니다."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "프로토콜이 틀렸습니다"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "소켓을 만들 수 없습니다"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "데이터 소켓을 연결할 수 없습니다. 연결 시간이 초과되었습니다"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "수동(passive) 소켓을 연결할 수 없습니다."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo에서 소켓에 listen할 수 없습니다"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "소켓을 bind할 수 없습니다"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "소켓에 listen할 수 없습니다"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "소켓의 이름을 알아낼 수 없습니다"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "PORT 명령을 보낼 수 없습니다"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "주소 %u의 종류(AF_*)를 알 수 없습니다"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT 실패, 서버에서는: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "데이터 소켓 연결 시간 초과"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "연결을 받을 수 없습니다"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "파일 해싱에 문제가 있습니다"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "파일을 가져올 수 없습니다. 서버 왈, '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "데이터 소켓에 제한 시간이 초과했습니다"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "데이터 전송 실패, 서버에서는: %s"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "질의"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "다음을 실행할 수 없습니다: "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "최소한 하나 이상의 서명이 잘못되었습니다."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "내부 오류: 서명은 올바르지만 키 핑거프린트를 확인할 수 없습니다?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"서명을 확인하는 'apt-key' 프로그램을 실행할 수 없습니다. (gnupg를 설치했습니"
+"까?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "apt-key 실행 도중 알 수 없는 오류 발생"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "다음 서명이 올바르지 않습니다:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "다음 서명들은 공개키가 없기 때문에 인증할 수 없습니다:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "해당 파일에 쓰는데 오류가 발생했습니다"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "서버에서 읽고 연결을 닫는데 오류가 발생했습니다"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "서버에서 읽는데 오류가 발생했습니다"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "파일에 쓰는데 오류가 발생했습니다"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "select가 실패했습니다"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "연결 시간이 초과했습니다"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "출력 파일에 쓰는데 오류가 발생했습니다"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "파일 변경 시각을 설정하는데 실패했습니다"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "연결이 너무 빨리 끊어졌습니다"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "아카이브 멤버 헤더 %s이(가) 잘못되었습니다"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s 지움"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "패키지 파일 %s 파일이 동기화되지 않았습니다."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "패키지 인덱스 파일이 손상되었습니다. %s 패키지에 Filename: 필드가 없습니"
+#~ "다."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "'%s' 미러 파일이 없습니다 "
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "'%s' 미러 파일이 없습니다 "
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "'%s' 미러 파일이 없습니다 "
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[미러 사이트: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "설정 파일 %s 파일을 여는 중입니다"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s 파일을 여는 중입니다"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "의존성이 맞지 않습니다. --fix-broken 옵션을 사용해 보십시오."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "다음을 바로잡으려면 'apt --fix-broken install'을 실행해 보십시오:"
+
+#~ msgid "(not found)"
+#~ msgstr "(없음)"
+
+#~ msgid " Package pin: "
+#~ msgstr " 패키지 핀: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "다음 키 ID의 공개키가 없습니다:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "%s 디렉터리가 전환되었습니다"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "%2$s에 대한 %1$s 의존성을 만족시킬 수 없습니다. %3$s 패키지를 찾을 수 없습"
+#~ "니다"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%2$s에 대한 %1$s 의존성을 만족시킬 수 없습니다. %3$s 패키지를 찾을 수 없습"
+#~ "니다"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "%2$s에 대한 %1$s 의존성을 만족시키는데 실패했습니다: 설치한 %3$s 패키지가 "
+#~ "너무 최근 버전입니다"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%2$s에 대한 %1$s 의존성을 만족시킬 수 없습니다. %3$s 패키지의 사용 가능한 "
+#~ "버전 중에서는 이 버전 요구사항을 만족시킬 수 없습니다"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%2$s에 대한 %1$s 의존성을 만족시킬 수 없습니다. %3$s 패키지를 찾을 수 없습"
+#~ "니다"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "%2$s에 대한 %1$s 의존성을 만족시키는데 실패했습니다: %3$s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "%s의 빌드 의존성을 만족시키지 못했습니다."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "%s의 링크를 해제하는데 문제가 있습니다"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "%s 파일을 지우는데 실패했습니다"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "사용법: apt-cache [옵션] 명령\n"
+#~ " apt-cache [옵션] show 패키지1 [패키지2 ...]\n"
+#~ "\n"
+#~ "apt-cache는 APT의 바이너리 캐시 파일을 처리하고, 캐시 파일에\n"
+#~ "정보를 질의하는 저수준 도구입니다.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "옵션:\n"
+#~ " -h 이 도움말.\n"
+#~ " -p=? 패키지 캐시.\n"
+#~ " -s=? 소스 캐시.\n"
+#~ " -q 상태 표시를 하지 않습니다.\n"
+#~ " -i unmet 명령에서 중요한 의존성만 봅니다.\n"
+#~ " -c=? 지정한 설정 파일을 읽습니다.\n"
+#~ " -o=? 임의의 옵션을 설정합니다. 예를 들어 -o dir::cache=/tmp\n"
+#~ "좀 더 자세한 정보는 apt-cache(8) 및 apt.conf(5) 매뉴얼 페이지를 보십시"
+#~ "오.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "옵션:\n"
+#~ " -h 이 도움말.\n"
+#~ " -c=? 해당 설정 파일을 읽습니다\n"
+#~ " -o=? 임의의 옵션을 설정합니다. 예를 들어 -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "사용법: apt-sortpkgs [옵션] 파일1 [파일2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs는 패키지 파일을 정렬하는 간단한 도구입니다. -s 옵션은 무슨 파"
+#~ "일인지\n"
+#~ "알아 내는데 쓰입니다.\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -h 이 도움말\n"
+#~ " -s 소스 파일 정렬을 사용합니다\n"
+#~ " -c=? 이 설정 파일을 읽습니다\n"
+#~ " -o=? 임의의 옵션을 설정합니다. 예를 들어 -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "하위 프로세스가 실패했습니다"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "해당되는 소스 패키지를 가져올 패키지를 최소한 하나 지정해야 합니다"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "파이프 만들기가 실패했습니다"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "gzip 실행이 실패했습니다"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s(%s), 컴파일 시각 %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "FILE*를 만드는데 실패했습니다"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 (URI 파싱)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 ([option] 파싱 불가)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 ([option] 너무 짧음)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 ([%3$s] 대입이 아님)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 ([%3$s] 키가 없음)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 ([%3$s] %4$s 키에 값이 없"
+#~ "음)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 (URI 파싱)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 (절대 dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "소스 리스트 %2$s의 %1$lu번 줄이 잘못되었습니다 (dist 파싱)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "파일 의존성을 처리하는 데, %s %s 패키지가 없습니다"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "소스 패키지 목록 %s의 정보를 읽을 수 없습니다"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "파일에서 제공하는 것을 모으는 중입니다"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Release 파일 %s 파일을 파싱할 수 없습니다"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "벤더 블럭 %s의 핑거프린트가 없습니다"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "전체 의존성 버전 용량: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "%s에 충분한 공간이 없습니다"
+
+#~ msgid "Done"
+#~ msgstr "완료"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "%s에 키 모음을 설치하지 않았습니다."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "내부 오류, AllUpgrade 프로그램이 무언가를 망가뜨렸습니다"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s은(는) 올바른 DEB 패키지가 아닙니다."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "CD-ROM 마운트 위치로 %s 사용\n"
+#~ "CD-ROM을 마운트하는 중입니다\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s 패치를 mmap과 파일 동작을 이용해 적용할 수 없습니다. 패치 파일이 손상"
+#~ "된 것처럼 보입니다."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s 패치를 mmap을 이용해 (mmap 관련 실패는 없음) 적용할 수 없습니다. 패치 "
+#~ "파일이 손상된 것처럼 보입니다."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "'%2$s' 패키지의 '%1$s' 대상 릴리스는 없으므로 무시합니다."
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "올바른 DEB 아카이브가 아닙니다. '%s'나 '%s' 혹은 '%s' 멤버가 없습니다"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum이 맞지 않습니다"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "%s 패키지의 파일을 찾을 수 없습니다. 수동으로 이 패키지를 고쳐야 할 수도 "
+#~ "있습니다."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "로그에 쓰는데 실패. openpty() 실패(/dev/pts가 마운트되어있지 않습니까?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "%s 파일은 없으므로 무시합니다"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "%s을(를) 지우는데 실패했습니다"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "%s을(를) 만들 수 없습니다"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "%sinfo의 정보를 읽는데 실패했습니다"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "정보 디렉토리와 임시 디렉토리는 같은 파일 시스템에 있어야 합니다"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "관리 디렉토리를 %sinfo로 바꾸는데 실패했습니다"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "패키지 이름을 가져오는데 내부 오류"
+
+#~ msgid "Reading file listing"
+#~ msgstr "파일 목록을 읽는 중입니다"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "목록 파일 '%sinfo/%s' 파일을 여는데 실패했습니다. 이 파일을 복구할 수 없다"
+#~ "면 비워 놓고 같은 버전의 패키지를 다시 설치하십시오!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "목록 파일 %sinfo/%s 파일을 읽는데 실패했습니다"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "노드를 얻어 오는데 내부 오류"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "전환 파일 %sdiversions를 여는데 실패했습니다"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "전환 파일이 손상되었습니다"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "전환 파일에 잘못된 줄이 있습니다: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "diversion을 추가하는데 내부 오류"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "패키지 캐시를 먼저 초기화해야 합니다"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "패키지를 찾는데 실패했습니다: 헤더, 오프셋 %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "status 파일에서 ConfFile 섹션이 잘못되었습니다. 오프셋 %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "MD5 분석에 오류가 있습니다. 오프셋 %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "%s 디렉토리로 이동할 수 없습니다"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "올바른 control 파일을 찾는데 실패했습니다"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "%s에 대한 파이프를 열 수 없습니다"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "%s 프로세스에서 읽는데 오류가 발생했습니다"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "헤더 한 줄에 %u개가 넘는 문자가 들어 있습니다"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "주의: dpkg에서 자동으로 의도적으로 수행했습니다."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "override %s의 %lu번 줄 #1이 잘못되었습니다"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "override %s의 %lu번 줄 #2가 잘못되었습니다"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "override %s의 %lu번 줄 #3이 잘못되었습니다"
+
+#~ msgid "decompressor"
+#~ msgstr "압축 해제 프로그램"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "%lu만큼 더 읽어야 하지만 더 이상 읽을 데이터가 없습니다"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "%lu만큼 더 써야 하지만 더 이상 쓸 수 없습니다"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "이미 압축이 풀린 '%s' 패키지에 대해 즉시 설정을 할 수 없습니다. 자세한 설"
+#~ "명은 man 5 apt.conf 페이지에서 APT::Immediate-Configure 항목을 보십시오."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "%s 처리 중에 오류가 발생했습니다 (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "%s 처리 중에 오류가 발생했습니다 (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "내부 오류, 멤버를 찾을 수 없습니다"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "내부 오류, '%s' 그룹에 설치할 수 있는 패키지가 없습니다."
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Release 파일이 만료되었습니다. %s 무시. (%s 이후로 무효)"
diff --git a/po/ku.po b/po/ku.po
new file mode 100644
index 0000000..f6a1cb8
--- /dev/null
+++ b/po/ku.po
@@ -0,0 +1,3789 @@
+# Kurdish translation for apt
+# This file is distributed under the same license as the apt package.
+#
+# Erdal Ronahi <erdal dot ronahi at gmail dot com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2008-05-08 12:48+0200\n"
+"Last-Translator: Erdal Ronahi <erdal.ronahi@gmail.com>\n"
+"Language-Team: ku <ubuntu-l10n-kur@lists.ubuntu.com>\n"
+"Language: ku\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KAider 0.1\n"
+"Plural-Forms: nplurals=2; plural= n != 1;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arşîv zêde kin e"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nikarî pakêta %s bibîne"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr ""
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Unknown TAR header type %u"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr ""
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Nivîsîna pelê %s biserneket"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Girtina pelê %s biserneket"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Rêça %s zêde dirêj e"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, fuzzy
+msgid "The diversion path is too long"
+msgstr "Lîsteya dirêjahiya çavkaniyê zêde dirêj e"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr ""
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Rêç zêde dirêj e"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr ""
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Nikare %s bixwîne"
+
+#: apt-inst/extract.cc
+#, fuzzy, c-format
+msgid "Unable to stat %s"
+msgstr "Nivîsandin ji bo %s ne pêkane"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, fuzzy
+msgid "Failed to allocate diversion"
+msgstr "%s venebû"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Rêça %s zêde dirêj e"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Rêça %s zêde dirêj e"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Rêça %s zêde dirêj e"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Rêça %s zêde dirêj e"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Rêça %s zêde dirêj e"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hash Sum li hev nayên"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "nav guherandin biserneket, %s (%s -> %s)"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Mezinahî li hev nayên"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Çewtiya nivîsînê"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Anîna %s %s biserneket"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Girêdan bi %s (%s) re pêk tê"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Dîsketê siwar bike û piştre bişkoja derbaskirinê bitikîne"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Peldanka '%s' kêm e"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Peldanka '%s' kêm e"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "W: pelrêça %s nayê xwendin\n"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Pel tê anîn %li ji %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr ""
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Peywira %s nehate dîtin"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Nikarî pakêta %s bibîne"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Nikarî pakêta %s bibîne"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Pakêt nehate dîtin %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Etîketa '%s' hatiye dîtin\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Navê dîskê: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Lîsteyên pakêtan tên jibergirtin..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nikarî derbasa %s bike"
+
+#: apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Unable to stat %s."
+msgstr "Nivîsandin ji bo %s ne pêkane"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, fuzzy, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Nivîsandin ji bo %s ne pêkane"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opsiyona '%s' zêde dirêj e"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Di girtina pelî de pirsgirêkek derket"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Nikarî qufila pelê %s veke"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr ""
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Çewiya xwendinê"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Çewtiya nivîsînê"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Di girtina pelî de pirsgirêkek derket"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nikarî pelê %s veke"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nikarî pelê %s veke"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Di girtina pelî de pirsgirêkek derket"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Di girtina pelî de pirsgirêkek derket"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Nivîsandin ji bo %s ne pêkane"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Nivîsandin ji bo %s ne pêkane"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Nikarî li %s biguherîne"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "%s venebû"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "%s venebû"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "Nivîsîna pelê %s biserneket"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Çewtî!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Çêbû"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Çêbû"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Hilbijartina %s nehatiye dîtin"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Pakêt nehate dîtin %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr ""
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, fuzzy, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Pakêt nehate dîtin %s"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Pelrêça daxistinê nayê quflekirin"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Pelrêça daxistinê nayê quflekirin"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s tê amadekirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Mîhengkirina %s tê amadekirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Rakirina %s tê amadekirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Bi tevahî rakirina %s tê amadekirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s hatine sazkirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s tê mîhengkirin"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Peldanka '%s' kêm e"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Nikarî pelê %s veke"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s tê derxistin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr "%s hatine sazkirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s tê rakirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "%s bi tevahî hatine rakirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s bi tevahî hatine rakirin"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Nivîsandin ji bo %s ne pêkane"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Guhartoyên berendam"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Vekirina StateFile %s biserneket"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "%s ji hev nehate veçirandin"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i tomar hatin nivîsîn.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash Sum li hev nayên"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr ""
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Nikarî pelê %s veke"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Bindest"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "PêşBindest"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Pêşniyaz dike"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Nakokî"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Tawsiye dike"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Dikeve şunve"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Dişkîne"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Kevin dike"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "girîng"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "pêwist"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "ekstra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opsiyonel"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr ""
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Dema şixulandina naveroka %s çewtî"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Lîsteya pakêtan tê xwendin"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr ""
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Bilindkirin tê hesibandin"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Anîn:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Çewt:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%s hatine anîn..."
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Dixebite]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr "Dîsketê siwar bike û piştre bişkoja derbaskirinê bitikîne"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Bindestî tên serrastkirin..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " neserketî."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Nikare bindestiyan rast kirin"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Temam"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "lê paketeke farazî ye"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Sazkirî]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Guhartoyên berendam"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid "However the following packages replace it:"
+msgstr "Ev paket dê werine bilindkirin:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Pakêt nayên dîtin"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Nikarî cihê vala li %s tesbît bike"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Cihê vala li %s têre nake."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Pelrêça daxistinê nayê quflekirin"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Paketên şikestî"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Anîna %sB/%sB ji arşîvan pêwist e.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Anîna %sB ji arşîvan pêwist e.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Erê, wusa bike!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Betal."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Dixwazî bidomînî?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Daxistina çend pelan biserneket"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Sazkirin tê betalkirin."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Ev pakêtên NÛ dê werine sazkirin:"
+msgstr[1] "Ev pakêtên NÛ dê werine sazkirin:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Ev pakêtên NÛ dê werine sazkirin:"
+msgstr[1] "Ev pakêtên NÛ dê werine sazkirin:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Ev pakêtên NÛ dê werine sazkirin:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Paketên tên pêşniyaz kirin:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Paketên tên tawsiyê kirin:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s jixwe guhertoya nûtirîn e.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "lê %s dê were sazkirin"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr ""
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Sazkirî]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Sazkirî]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Sazkirî]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Sazkirî]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "lê %s sazkirî ye"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "lê %s dê were sazkirin"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "lê sazkirina wê ne gengaz e"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "lê paketeke farazî ye"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "lê dê neyê sazkirin"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "lê ne sazkirî ye"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " û"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Ev pakêtên NÛ dê werine sazkirin:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Ev pakêt dê werine RAKIRIN:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Ev paket dê werine bilindkirin:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (ji ber %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu hatine bilindkirin, %lu nû hatine sazkirin."
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu ji nû ve sazkirî,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu hatine nizmkirin."
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu werin rakirin û %lu neyên bilindkirin. \n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[Y/n]"
+msgstr "[E/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "E"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "Pêwist e tu mînakekê bidî"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Pelgehên Pakêt:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr ""
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Sazkirî: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Berendam: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ne tiştek)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabloya guhertoyan:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Nikarî pakêta %s bibîne"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Nikarî pakêta %s bibîne"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Nikarî pakêta %s bibîne"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Çavkanîna %s bîne\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Anîna çend arşîvan biserneket."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr ""
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "%s ji hev nehate veçirandin"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr ""
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr ""
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Navên paketan bi giştî :"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Navên paketan bi giştî :"
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Pakêtên normal:"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Pakêtên farazî yên safî:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pakêta tenê ya farazî:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Pakêtên hevbeş yên farazî:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Winda: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Guhertoyên vekirî yên giştî:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "Guhertoyên vekirî yên giştî:"
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Bindestên giştî:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "Guhertoyên vekirî yên giştî:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Cihê giştî yê sist:"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Cihê giştî yê veqetandî: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Ji kerema xwe re navekî li vî Dîsketî bike, wekî 'Debian 2.1r1 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Dîsketê siwar bike û piştre bişkoja derbaskirinê bitikîne"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Anîna %s %s biserneket\n"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr ""
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Bikaranîn: apt-config [vebijark] ferman\n"
+"\n"
+"apt-config, amûra xwendina dosyeya mîhengên APTê ye\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Guhertoya debconf nehate stendin. debconf sazkirî ye?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Nikarî pakêta %s bibîne"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Bikaranîn: apt-config [vebijark] ferman\n"
+"apt-config, amûra xwendina dosyeya mîhengên APTê ye\n"
+"\n"
+"Ferman\n"
+" shell - moda shell\n"
+" dump - Mîhengan nîşan dide\n"
+"\n"
+"Vebijark:\n"
+" -h Ev dosyeya alîkariyê ye.\n"
+" -c=? Dosyeya mîhengan nîşan dide\n"
+" -o=? Rê li ber vedike ku tu karibe li gorî dilê xwe vebijarkan diyar bike. "
+"mînak -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Bikaranîn: apt-config [vebijark] ferman\n"
+"apt-config, amûra xwendina dosyeya mîhengên APTê ye\n"
+"\n"
+"Ferman\n"
+" shell - moda shell\n"
+" dump - Mîhengan nîşan dide\n"
+"\n"
+"Vebijark:\n"
+" -h Ev dosyeya alîkariyê ye.\n"
+" -c=? Dosyeya mîhengan nîşan dide\n"
+" -o=? Rê li ber vedike ku tu karibe li gorî dilê xwe vebijarkan diyar bike. "
+"mînak -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "lê ne sazkirî ye"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Ev pakêtên NÛ dê werine sazkirin:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s jixwe guhertoya nûtirîn e.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s jixwe guhertoya nûtirîn e.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "%s venebû"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Ev pakêtên NÛ dê werine sazkirin:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Lîsteya pakêtan tê xwendin"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr " Pakêta tenê ya farazî:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr " Pakêta tenê ya farazî:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Paketên şikestî"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "lê %s dê were sazkirin"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr ""
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr ""
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Dixwazî bidomînî?"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+
+#: dselect/update
+msgid "Merging available information"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Lîsteya dirêjahiya pakêtê zêde dirêj e"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Di şixulandina pêrista %s de çewtî"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lîsteya dirêjahiya çavkaniyê zêde dirêj e"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Dema li dosyeya naverokê joreagahî dihate nivîsîn çewtî"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Dema şixulandina naveroka %s çewtî"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr ""
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Di koma pelgehên pakêta '%s' de hin pelgeh kêm in"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB xerabe ye, navê dosyeyê weke %s.old hate guherandin"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Danegir kevn e, ji bo bilindkirina %s hewl dide"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Danegira %s nehate vekirin: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Rakirina %s biserneket"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Tomara kontrola arşîvê tuneye"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr ""
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr ""
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s venebû"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr ""
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: pelrêça %s nayê xwendin\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s ji hev nehate veçirandin"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s venebû"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Di arşîvê de qada pakêtê tuneye"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Girêdan pêk nehatiye"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Çewtiya hundirîn"
+
+#: methods/cdrom.cc
+#, fuzzy, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Pakêt nehate dîtin %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD-ROM a şaş"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Dîsk nehate dîtin."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Pel nehate dîtin"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Girêdan bi %s (%s) re pêk tê"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Girêdan bi %s (%s) re pêk tê"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Serneket"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Bi %s re tê girêdan"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nikarî '%s' çareser bike"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nikare bi %s re girêdan pêk bîne %s:"
+
+#: methods/copy.cc
+#, fuzzy
+msgid "Failed to stat"
+msgstr "%s venebû"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr ""
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Têketin"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Nikare navê herêmî tesbît bike"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr ""
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr ""
+
+#: methods/ftp.cc
+#, fuzzy, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Danegira %s nehate vekirin: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr ""
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Lêpirsîn"
+
+#: methods/ftp.cc
+#, fuzzy
+msgid "Unable to invoke "
+msgstr "%s venebû"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Di xebitandina apt-key de çewtiya nenas"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "The following signatures were invalid:\n"
+msgstr "Ev pakêtên NÛ dê werine sazkirin:"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Dema li pelî dihate nivîsîn çewtî"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Dema li pelî dihate nivîsîn çewtî"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Hilbijartin neserketî"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr ""
+
+#: methods/http.cc
+#, fuzzy
+msgid "Error writing to output file"
+msgstr "Dema li dosyeya naverokê joreagahî dihate nivîsîn çewtî"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr ""
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Girêdan zû hatiye girtin"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#~ msgid "Removed %s"
+#~ msgstr "%s hatine rakirin"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Pakêta dosya %s li derveyî demê ye."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Nikarî pelê %s veke"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Nikarî pelê %s veke"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s tê vekirin"
+
+#~ msgid "(not found)"
+#~ msgstr "(nehate dîtin)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Destika pakêtê:"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Rêça %s zêde dirêj e"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Vebijark:\n"
+#~ " -h Ev dosyeya alîkariyê ye.\n"
+#~ " -c=? Dosyeya mîhengan nîşan dide\n"
+#~ " -o=? Rê li ber vedike ku tu karibe li gorî dilê xwe vebijarkan diyar "
+#~ "bike. mînak -o dir::cache=/tmp\n"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Pêwist e tu mînakekê bidî"
+
+#, fuzzy
+#~ msgid "Failed to create pipes"
+#~ msgstr "%s ji hev nehate veçirandin"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Xebitandina gzip biserneket"
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s ji bo %s %s komkirî di %s %s de\n"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Pakêt nehate dîtin %s"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Cihê vala li %s têre nake"
+
+#~ msgid "Done"
+#~ msgstr "Temam"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Sazkirin tê betalkirin."
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ne paketeke DEB ya derbasdar e."
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum li hev nayên"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Nikare %s biafirîne"
+
+#, fuzzy
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "%s venebû"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Nikarî li %s biguherîne"
+
+#, fuzzy
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nikarî pelê %s veke"
+
+#, fuzzy
+#~ msgid "Could not patch file"
+#~ msgstr "Danegira %s nehate vekirin: %s"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Di şixulandina pêrista %s de çewtî"
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..4a2cd14
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,3987 @@
+# Lithuanian translation for apt
+# Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006
+# This file is distributed under the same license as the apt package.
+# Gintautas Miliauskas <gintas@akl.lt>, 2008.
+# Andrius Kokiančiks <napalm@mintis.lt>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2008-08-02 01:47-0400\n"
+"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
+"%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2008-08-02 05:04+0000\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr ""
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Archyvas per trumpas"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Nepavyko perskaityti archyvo antraščių"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nepavyko rasti paketo %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Sugadintas archyvas"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar kontrolinė suma klaidinga, archyvas sugadintas"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Nežinomas TAR antraštės tipas %u. narys %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr ""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Vidinė klaida, nepavyko aptikti nario %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr ""
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr ""
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Kelias %s per ilgas"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr ""
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Nepavyko patikrinti %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Nepavyko pervadinti %s į %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr ""
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Kelias per ilgas"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr ""
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr ""
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Nepavyko perskaityti %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr ""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Kelias %s per ilgas"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Kelias %s per ilgas"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Kelias %s per ilgas"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Kelias %s per ilgas"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Kelias %s per ilgas"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Nepavyko nuskaityti nuorodos %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Maišos sumos nesutapimas"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Neatitinka dydžiai"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Klaidingas veiksmas %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Rašymo klaida"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG klaida: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Nepavyko parsiųsti %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Jungiamasi prie %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Patikrinkite, ar įdiegtas „dpkg-dev“ paketas.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Įdėkite diską „%s“ į įrenginį „%s“ ir paspauskite Enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Trūksta aplanko „%s“"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Trūksta aplanko „%s“"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Nepavyko užrakinti sąrašo aplanko"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Parsiunčiamas %li failas iš %li (liko %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Parsiunčiamas %li failas iš %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Nepavyko perskaityti arba atverti paketų sąrašo arba būklės failo."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Greičiausiai norėsite paleisti „apt-get update“, kad šios problemos būtų "
+"ištaisytos"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Nepavyko perskaityti šaltinių sąrašo."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Nebuvo rastas „%s“ leidimas paketui „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Nebuvo rasta „%s“ versija paketui „%s“"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Nepavyko rasti užduoties %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Nepavyko rasti paketo %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Nepavyko rasti paketo %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Nepavyko rasti paketo %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Atjungiamas CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Naudojama CD-ROM prijungimo vieta %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Laukiama disko...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Prijungiamas CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identifikuojama... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Rasta žymė „%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Šio disko pavadinimas: \n"
+"„%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopijuojami paketų sąrašai..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Rašomas naujas šaltinių sąrašas\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr ""
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nepavyko pakeisti į %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr ""
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Parametrui %s reikia argumento."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr ""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Klaidingas veiksmas %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Klaida užveriant failą"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Nepavyko atverti rakinimo failo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Nepavyko rezervuoti rakinimo failo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Procesas %s gavo segmentavimo klaidą"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Procesas %s gavo segmentavimo klaidą"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Procesas %s grąžino klaidos kodą (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Procesas %s netikėtai išėjo"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Skaitymo klaida"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Rašymo klaida"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Klaida užveriant failą"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Nepavyko sukurti subproceso IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Nepavyko paleisti suspaudėjo "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nepavyko atverti failo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nepavyko atverti failo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Klaida užveriant failą"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Klaida sinchronizuojant failą"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Klaida sinchronizuojant failą"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Nepavyko sukurti %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Nepavyko įrašyti į %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Nepavyko atverti %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Nepavyko pakeisti į %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "Nepavyko patikrinti %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Klaida!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Baigta"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Baigta"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Nepavyko atverti DB failo %s: %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Pastaba: pažymimas %s vietoje %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Pastaba: pažymimas %s vietoje %s\n"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Nepavyko užrakinti sąrašo aplanko"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Nepavyko užrakinti sąrašo aplanko"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Ruošiamas %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Ruošiamasi konfigūruoti %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Ruošiamasi %s pašalinimui"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Ruošiamasi visiškai pašalinti %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Įdiegta %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Konfigūruojamas %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Trūksta aplanko „%s“"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Nepavyko atverti failo %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Išpakuojamas %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr "Įdiegta %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Šalinamas %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "Visiškai pašalintas %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Visiškai pašalintas %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Nepavyko įrašyti į %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Konstruojamas priklausomybių medis"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Galimos versijos"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Priklausomybių generavimas"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Skaitoma būsenos informacija"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Maišos sumos nesutapimas"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr ""
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Nepavyko atverti failo %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Priklauso"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Priešpriklauso"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Siūlo"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Konfliktuoja"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Rekomenduoja"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Pakeičia"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Sugadina"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Pakeičia"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "Svarbu"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "privaloma"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standartinis"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "papildomas"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "nebūtinas"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr ""
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Klaida apdorojant turinį %s"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Skaitomi paketų sąrašai"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr ""
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr ""
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Nekorektiškas perrašymas %s eilutėje %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr ""
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Kai kurių indeksų failų nepavyko parsiųsti, jie buvo ignoruoti arba vietoje "
+"jų panaudoti seni."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Skaičiuojami atnaujinimai"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Imamas:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Gauti:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ignoruotas:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Klaida:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Parsiųsta %sB iš %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Vykdoma]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Laikmenos keitimas: įdėkite diską, pažymėtą\n"
+" „%s“,\n"
+"į įrenginį „%s“ ir paspauskite enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Taisomos priklausomybės..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " nepavyko."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Nepavyko patenkinti priklausomybių"
+
+#: apt-private/private-cachefile.cc
+#, fuzzy
+msgid "Unable to minimize the upgrade set"
+msgstr "Nepavyko minimizuoti atnaujinimo rinkinio"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Įvykdyta"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Įvykdykite „apt --fix-broken install“, jei norite ištaisyti šias klaidas."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Nepatenkintos priklausomybės. Pabandykite įvykdyti 'apt --fix-broken "
+"install' be nurodytų paketų (arba nurodykite išeitį)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Pastaba, žymima %s regex atitikimų formoje '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Pastaba, žymima %s regex atitikimų formoje '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Pastaba, žymima %s regex atitikimų formoje '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Paketas %s yra virtualus, pateiktas:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Įdiegtas]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Galimos versijos"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Reikia pažymėti įdiegimui bent vieną."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Paketo %s nėra, bet jis nurodytas prie kito paketo.\n"
+"Tai gali reikšti, kad paketas dingęs, nebenaudojamas \n"
+"arba prieinamas tik iš kitų šaltinių.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Tačiau šie paketai jį pakeičia:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Paketas %s neturi diegimo kandidatų"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "Paketas %s nėra įdiegtas, todėl nebuvo pašalintas\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Paketas %s nėra įdiegtas, todėl nebuvo pašalintas\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Pastaba: pažymimas %s vietoje %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Paketų nerasta"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "DĖMESIO: Šie paketai negali būti autentifikuoti!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Nepavyko autentikuoti kai kurių paketų"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Įdiegti šiuos paketus be patvirtinimo?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Atsirado problemų ir -y buvo panaudotas be --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Nepavyko nustatyti %s laisvos vietos"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "%s nėra pakankamai laisvos vietos."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Nepavyko užrakinti parsiuntimų aplanko"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Nepavyko įdiegti kai kurių paketų. Tai gali reikšti, kad jūs\n"
+"paprašėte neįmanomo dalyko, arba, jei jūs naudojate nestabilų\n"
+"leidimą, kuomet kai kurie paketai dar nebuvo sukurti arba buvo\n"
+"pašalinti iš \"Incoming\" aplanko."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Ši informacija gali padėti išspręsti šią situaciją:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Sugadinti paketai"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Nepavyko parsiųsti kai kurių archyvų, pabandykite paleisti „apt-get update“ "
+"arba pabandykite su parametru --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Reikia pašalinti paketus, tačiau šalinimas išjungtas."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Atsirado problemų ir -y buvo panaudotas be --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Atsirado problemų ir -y buvo panaudotas be --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "Keista... Dydis neatitinka, Parašykite laišką apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Reikia parsiųsti %sB/%sB archyvų.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Reikia parsiųsti %sB archyvų.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Po šios operacijos bus naudojama %sB papildomos disko vietos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Po šios operacijos bus atlaisvinta %sB disko vietos.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Taip, daryk kaip liepiu!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Bandote atlikti tikėtinai pavojingą veiksmą.\n"
+"Jei norite tęsti, įveskite frazę „%s“\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Nutraukti."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Ar norite tęsti?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Nepavyko parsiųsti kai kurių failų"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Pavyko parsiųsti tik parsiuntimo režime"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing bei laikmenų apkeitimas nepalaikomas"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Nepavyko pataisyti dingusių paketų."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Diegimas nutraukiamas."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Šie paketai buvo automatiškai įdiegti ir daugiau nebėra reikalingi:"
+msgstr[1] "Šie paketai buvo automatiškai įdiegti ir daugiau nebėra reikalingi:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Šie paketai buvo automatiškai įdiegti ir daugiau nebėra reikalingi:"
+msgstr[1] "Šie paketai buvo automatiškai įdiegti ir daugiau nebėra reikalingi:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Norėdami juos pašalinti, paleiskite „%s“"
+msgstr[1] "Norėdami juos pašalinti, paleiskite „%s“"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Bus įdiegti šie papildomi paketai:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Siūlomi paketai:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Rekomenduojami paketai:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Praleidžiamas %s, nes jis jau yra įdiegtas ir atnaujinimas nėra nurodytas.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Praleidžiamas %s, nes jis jau yra įdiegtas ir atnaujinimas nėra nurodytas.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Pakartotinas %s įdiegimas neįmanomas, jo nepavyksta parsiųsti.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ir taip jau yra naujausias.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Pažymėta versija %s (%s) paketui %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Pažymėta versija %s (%s) paketui %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Įdiegtas]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Įdiegtas]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Įdiegtas]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Įdiegtas]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "bet %s yra įdiegtas"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "bet %s bus įdiegtas"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "tačiau jis negali būti įdiegtas"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "bet tai yra virtualus paketas"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "bet jis nebus įdiegtas"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "bet jis nėra įdiegtas"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " arba"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Šie paketai turi neįdiegtų priklausomybių:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Bus įdiegti šie NAUJI paketai:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Bus PAŠALINTI šie paketai:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Šių paketų atnaujinimas sulaikomas:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Bus atnaujinti šie paketai:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Bus PAKEISTI SENESNIAIS šie paketai:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Bus pakeisti šie sulaikyti paketai:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (dėl %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"Įspėjimas: Šie būtini paketai bus pašalinti.\n"
+"Tai NETURĖTŲ būti daroma, kol tiksliai nežinote ką darote!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu atnaujinti, %lu naujai įdiegti, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu įdiegti iš naujo, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu pasendinti, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu bus pašalinta ir %lu neatnaujinta.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu nepilnai įdiegti ar pašalinti.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[T/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[t/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "T"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Paketų failai:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Surišti paketai:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Įdiegta: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidatas: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(nėra)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versijų lentelė:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Nepavyko rasti paketo %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Nepavyko rasti paketo %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Nepavyko rasti paketo %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Būtina nurodyti bent vieną paketą, kad parsiųsti jo išeities tekstą"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Nepavyko surasti išeities teksto paketo, skirto %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Praleidžiama jau parsiųsta byla „%s“\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Reikia parsiųsti %sB/%sB išeities archyvų.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Reikia parsiųsti %sB išeities archyvų.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Parsiunčiamas archyvas %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Nepavyko gauti kai kurių arhcyvų."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Jau išpakuotas archyvas %s praleidžiama\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Nepavyko įvykdyti išpakavimo komandos „%s“\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Patikrinkite, ar įdiegtas „dpkg-dev“ paketas.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Nepavyko įvykdyti paketo kompiliavimo komandos „%s“\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Nepavyko gauti kūrimo-priklausomybių informacijos paketui %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "Būtina nurodyti bent vieną paketą, kuriam norite įvykdyti builddeps"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr ""
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Nepavyko pervadinti %s į %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Paketas %s versijos numeriu %s turi netenkinamą priklausomybę:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Atnaujinimo komandai argumentų nereikia"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Atnaujinimo komandai argumentų nereikia"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package names: "
+msgstr "Visi paketų pavadinimai: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Visi paketų pavadinimai: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normalūs paketai: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Virtualūs paketai: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pavieniai virtualūs paketai: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Mišrūs virtualūs paketai: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Trūksta: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Viso skirtingų versijų: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "Viso skirtingų aprašymų: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Viso priklausomybių: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Viso versijų/failų santykių yra: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Viso aprašymų/failų santykių yra: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Show raw dependency information for a package"
+msgstr "Nepavyko gauti kūrimo-priklausomybių informacijos paketui %s"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Show reverse dependency information for a package"
+msgstr "Nepavyko gauti kūrimo-priklausomybių informacijos paketui %s"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Prašome įdėti diską į įrenginį ir paspausti Enter"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Nepavyko pervadinti %s į %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Pakartokite šitą procesą su kitais CD savo rinkinyje."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Parametrai nurodyti ne poromis"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Panaudojimas: apt-config [parametrai] komanda\n"
+"\n"
+"apt-config yra paprastas įrankis nuskaityti APT konfigūracijos failui\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Naudojimas: apt-extracttemplates failas1 [failas2 ...]\n"
+"\n"
+"apt-extracttemplates tai įrankis skirtas konfigūracijų, bei šablonų "
+"informacijos išskleidimui\n"
+"iš debian paketų\n"
+"\n"
+"Parametrai:\n"
+" -h Šis pagalbos tekstas\n"
+" -t Nustatyti laikinąjį aplanką\n"
+" -c=? Nuskaityti šį konfigūracijų failą\n"
+" -o=? Nustatyti savarankiškas nuostatas, pvz.: -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Nepavyko sužinoti debconf versijos. Ar įdiegtas debconf?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Nepavyko rasti paketo %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Vidinė klaida, problemos sprendimas kažką sugadino"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Palaikomi moduliai:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Retrieve new lists of packages"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Remove packages"
+msgstr "Sugadinti paketai"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Download source archives"
+msgstr "Reikia parsiųsti %sB išeities archyvų.\n"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Būtina nurodyti bent vieną paketą, kad parsiųsti jo išeities tekstą"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Naudojimas: apt-extracttemplates failas1 [failas2 ...]\n"
+"\n"
+"apt-extracttemplates tai įrankis skirtas konfigūracijų, bei šablonų "
+"informacijos išskleidimui\n"
+"iš debian paketų\n"
+"\n"
+"Parametrai:\n"
+" -h Šis pagalbos tekstas\n"
+" -t Nustatyti laikinąjį aplanką\n"
+" -c=? Nuskaityti šį konfigūracijų failą\n"
+" -o=? Nustatyti savarankiškas nuostatas, pvz.: -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Naudojimas: apt-extracttemplates failas1 [failas2 ...]\n"
+"\n"
+"apt-extracttemplates tai įrankis skirtas konfigūracijų, bei šablonų "
+"informacijos išskleidimui\n"
+"iš debian paketų\n"
+"\n"
+"Parametrai:\n"
+" -h Šis pagalbos tekstas\n"
+" -t Nustatyti laikinąjį aplanką\n"
+" -c=? Nuskaityti šį konfigūracijų failą\n"
+" -o=? Nustatyti savarankiškas nuostatas, pvz.: -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "bet jis nėra įdiegtas"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Bus įdiegti šie NAUJI paketai:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ir taip jau yra naujausias.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ir taip jau yra naujausias.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Nepavyko atverti %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Patikrinkite, ar įdiegtas „dpkg-dev“ paketas.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Nežinomas paketo įrašas!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Skaitomi paketų sąrašai"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Surišti paketai:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Surišti paketai:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Sugadinti paketai"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s nustatytas kaip įdiegtas rankiniu būdu\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Skaitoma būsenos informacija"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Blogi standartiniai nustatymai!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Jei norite tęsti, spauskite Enter."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Išpakuojant įvyko klaidų. Bandysiu konfigūruoti"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "paketus, kurie buvo įdiegti. Tai gali sukelti pasikartojančias klaidas"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"arba klaidas, atsiradusias dėl trūkstamų priklausomybių. Viskas gerai, tik "
+"klaidos,"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"esančios aukščiau šios žinutės, yra svarbios. Prašome jas ištaisyti ir vėl "
+"paleisti [I]nstall"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Sujungiama turima informaija"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Paketo plėtinių sąrašas yra per ilgas"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Klaida apdorojant aplanką %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Šaltinio plėtinys yra per ilgas"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Klaida įrašant antraštę į turinio failą"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Klaida apdorojant turinį %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Naudojimas: apt-ftparchive [parametrai] komanda\n"
+"Komandos: dvejatainių paketų kelias [perrašomasfailas [keliopriešdėlis]]\n"
+" sources aplankas [perrašomasfailas [kelippriešdėlis]]\n"
+" contents kelias\n"
+" release kelias\n"
+" generate parametras [grupės]\n"
+" clean parametras\n"
+"\n"
+"apt-ftparchive generuoja indeksų failus, skirtus Debian archyvams. Palaikomi "
+"keli \n"
+"generavimo stiliai, įskaitant nuo pilnai automatizuoto iki funkcinių "
+"pakeitimų\n"
+"skirtų dpkg-scanpackages ir dpkg-scansources\n"
+"\n"
+"apt-ftparchive sugeneruoja paketų failus iš .debs medžio. Paketo failas turi "
+"visus\n"
+"kontrolinius kiekvieno paketo laukus, o taip pat ir MD5 hešą bei failų "
+"dydžius. Perrašomasis\n"
+"failas palaikomas tam, kad būtų priverstinai nustatytos Pirmenybių bei "
+"Sekcijų reikšmės.\n"
+"\n"
+"Panašiai apt-ftparchive sugeneruoja ir Išeities failus iš .dscs medžio.\n"
+"--source-override nuostata gali būti naudojama nustatant išeities "
+"perrašomąjį failą\n"
+"\n"
+"\"Paketų\" bei \"Išeičių\" komandos turėtų būti paleistos failų medžio "
+"šaknyje. BinaryPath turėtų\n"
+"nurodyti kelią į rekursinės paieškos pagrindą bei perrašytas failas turėtų "
+"turėti perrašymo žymes.\n"
+"Keliopriešdėlis tai yra prirašomas prie failo vardų laikų jei tokių yra. "
+"Vartosenos pavyzdys\n"
+"naudojant Debian archyvą:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Nuostatos:\n"
+" -h Šis pagalbos tekstas\n"
+" --md5 Valdyti MD5 generavimą\n"
+" -s=? Šaltinio perrašomas failas\n"
+" -q Tylėti\n"
+" -d=? Pasirinkti papildomą kešo duomenų bazę\n"
+" --no-delink Įjungti atjungiamąjį derinimo rėžimą\n"
+" -c=? Perskaityti šį nuostatų failą\n"
+" -o=? Nustatyti savarankišką konfigūracijos nuostatą"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nėra atitikmenų"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Kai kurių failų nėra paketų grupėje „%s“"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Duomenų bazė pažeista, failas pervardintas į %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Duomenų bazė yra sena, bandoma atnaujinti %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Duomenų bazės formatas yra netinkamas. Jei jūs atsinaujinote iš senesnės "
+"versijos, prašome pašalinkite ir perkurkite duomenų bazę."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Nepavyko atverti DB failo %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Nepavyko nuskaityti nuorodos %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr ""
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr ""
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Nepavyko išskirti atminties"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Nežinomas suspaudimo algoritmas „%s“"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Suspaustai išvesčiai %s reikia suspaudimo rinkinio"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Nepavyko subprocesui sukurti IPC gijos"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr ""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Vidinė klaida, nepavyko sukurti %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Nepavyko Nusk/Įraš į subprocesą/failą"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Skaitymo klaida skaičiuojant MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Nepavyko atverti %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Nekorektiškas perrašymas %s eilutėje %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Nepavyko nuskaityti perrašymo failo %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Nekorektiškas perrašymas %s eilutėje %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Nekorektiškas perrašymas %s eilutėje %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Nekorektiškas perrašymas %s eilutėje %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "Į: Nepavyko perskaityti aplanko %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "Į: Nepavyko patikrinti %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "K: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "Į: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "K: Klaidos failui "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Nepavyko išspręsti %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Judesys medyje nepavyko"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Nepavyko atverti %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Nepavyko susieti %s su %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Archyvas neturėjo paketo lauko"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s neturi perrašymo įrašo\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s prižiūrėtojas yra %s, o ne %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Laukiama antraščių"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Prisijungti nepavyko"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Vidinė klaida"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Nepavyko perskaityti cdrom duomenų bazės %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Klaidingas CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Nepavyko atjungti CD-ROM įrenginyje %s, galbūt jis vis dar naudojamas."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Diskas nerastas."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Failas nerastas"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Jungiamasi prie %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Jungiamasi prie %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr ""
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Nepavyko"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Nepavyko prisijungti prie %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Nepavyko prisijungti prie %s:%s (%s), prisijungimas per ilgai užtruko"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Jungiamasi prie %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nepavyko surasti vardo „%s“"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Laikinas sutrikimas ieškant vardo „%s“"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Laikinas sutrikimas ieškant vardo „%s“"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr ""
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nepavyko prisijungti prie %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr ""
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr ""
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Jungiamasi"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Jungiamasi per ilgai"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr ""
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr ""
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr ""
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr ""
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Nepavyko atsiųsti failo, serveris atsakė „%s“"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr ""
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr ""
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Užklausti"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr ""
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Nežinoma klaida kviečiant apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Šie parašai buvo nevalidūs:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "Šių parašų nebuvo galima patikrinti, nes nėra viešojo rakto:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Klaida bandant rašyti į failą"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr ""
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Prisijungimo laiko limitas baigėsi"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr ""
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr ""
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr ""
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#~ msgid "Removed %s"
+#~ msgstr "Pašalintas %s"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Nepavyko atverti failo %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Nepavyko atverti failo %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Atveriama %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Nepatenkintos priklausomybės. Bandykit naudoti --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Jūs galite norėti paleisti 'apt --fix-broken install\" klaidų taisymui:"
+
+#~ msgid "(not found)"
+#~ msgstr "(nerasta)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Paketo susiejimai: "
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Kelias %s per ilgas"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "%s priklausomybė %s paketui negali būti patenkinama, nes paketas %s "
+#~ "nerastas"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%s priklausomybė %s paketui negali būti patenkinama, nes paketas %s "
+#~ "nerastas"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Nepavyko patenkinti %s priklausomybės %s paketui: Įdiegtas paketas %s yra "
+#~ "per naujas"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%s priklausomybė %s paketui negali būti patenkinama, nes nėra tinkamos "
+#~ "versijos %s paketo"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%s priklausomybė %s paketui negali būti patenkinama, nes paketas %s "
+#~ "nerastas"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Nepavyko patenkinti %s priklausomybės %s: %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Nepavyko atsieti nuorodos %s"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Parinktys:\n"
+#~ " -h Šis pagalbos ekranas.\n"
+#~ " -c=? Nuskaityti pateiktą konfigūracijos failą\n"
+#~ " -o=? Nurodyti tam tikrą konfigūracijos parametrą, pvz -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Naudojimas: apt-sortpkgs [parametrai] byla1 [byla2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs - tai paprastas įrankis skirtas paketų rūšiavimui. -s "
+#~ "nuostata naudojama\n"
+#~ "norint nusakyti bylos tipą.\n"
+#~ "\n"
+#~ "Parametrai:\n"
+#~ " -h Šis pagalbos tekstas\n"
+#~ " -s Naudoti išeities kodo bylos rūšiavimą\n"
+#~ " -c=? Nuskaityti šią konfigūracijos bylą\n"
+#~ " -o=? Nurodyti savarankiškas nuostatas, pvz.: -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Klaida procese-palikuonyje"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Būtina nurodyti bent vieną paketą, kad parsiųsti jo išeities tekstą"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Nepavyko sukurti FILE*"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Nepavyko atverti DB failo %s: %s"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Neturite pakankamai laisvos vietos %s"
+
+#~ msgid "Done"
+#~ msgstr "Įvykdyta"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Diegimas nutraukiamas."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Vidinė klaida, problemos sprendimas kažką sugadino"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s nėra tikras DEB paketas."
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5 sumos neatitikimas"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Praleidžiama jau parsiųsta byla „%s“\n"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Nepavyko pašalinti %s"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Skaitomas failų sąrašas"
+
+#, fuzzy
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nepavyko atverti failo %s"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Nekorektiškas perrašymas %s eilutėje %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Nekorektiškas perrašymas %s eilutėje %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Nekorektiškas perrašymas %s eilutėje %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "išskleidiklis"
+
+#, fuzzy
+#~| msgid "Could not open file %s"
+#~ msgid "Could not patch file"
+#~ msgstr "Nepavyko atverti failo %s"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Apdorojami %s trigeriai"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Kadangi jūs paprašėte tik vienos operacijos, gan tikėtina, kad \n"
+#~ "paketas tiesiog negali būti įdiegiamas, ir turėtų būti užpildytas "
+#~ "klaidos\n"
+#~ "pranešimas apie šį paketą."
+
+#~ msgid "Line %d too long (max %u)"
+#~ msgstr "Eilutė %d per ilga (leidžiama %u simbolių)"
+
+#~ msgid "Apt Authentication issue"
+#~ msgstr "Apt autentikacijos problema"
+
+#~ msgid "Problem during package list update. "
+#~ msgstr "Įvyko klaida atnaujinant paketų sąrašą. "
diff --git a/po/mr.po b/po/mr.po
new file mode 100644
index 0000000..3407731
--- /dev/null
+++ b/po/mr.po
@@ -0,0 +1,4259 @@
+# Marathi messages for the apt suite.
+#
+# This file is put in the public domain.
+# Sampada <sampadanakhare@gmail.com>, 2008
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2008-11-20 23:27+0530\n"
+"Last-Translator: Sampada <sampadanakhare@gmail.com>\n"
+"Language-Team: Marathi, janabhaaratii, C-DAC, Mumbai, India "
+"<janabhaaratii@cdacmumbai.in>\n"
+"Language: mr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "अयोग्य अर्काईव्ह ओळख सही"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "अर्काईव्ह मेंबर शीर्षक वाचण्यास त्रुटी"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "अयोग्य अर्काईव्ह मेंबर शीर्षक"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "अर्काईव्ह खूप छोटे आहे"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "अर्काईव्ह शीर्षके वाचणे असफल"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "%s पॅकेज सापडू शकले नाही"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "बिघडलेली अर्काईव्हज"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "टार(टेपअर्काईव्ह) चेकसम चुकला, बिघडलेली अर्काईव्ह"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "अपरिचित TAR शीर्षक प्रकार %u, मेंबर %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "हा वैध DEB अर्काईव्ह नाही,'%s' मेंबर उपलब्ध नाही"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "अंतर्गत त्रुटी,%s मेंबर शोधू शकत नाही"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "अनपार्सेबल नियंत्रण फाईल"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "%s फाईल मध्ये लिहिण्यास असमर्थ"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "%s फाईल बंद करण्यास असमर्थ"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "मार्ग %s हा खूप लांब आहे"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s एकापेक्षा जास्त वेळा उघडत आहे"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "डायव्हर्जन इच्छित %s/%s मध्ये लिहिण्याचा पॅकेज प्रयत्न करत आहे"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "डायव्हर्जन मार्ग हा खूप लांब आहे"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s स्टेट करण्यास असमर्थ"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "%s ला पुनर्नामांकन %s करण्यास असमर्थ "
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "%s संचिका ही संचिका नसलेल्या संचिकेबरोबर बदललेली आहे"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "नोडचे त्याच्या हॅश बकेटमध्ये/बादलीत स्थान निश्चित करण्यास असमर्थ"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "मार्ग खूप लांब आहे"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "%s च्या आवृत्तीशी पुनः लिहिलेल्या पॅकेज जुळत नाही"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "File %s/%s, %s पॅकेज मधल्या एका वर पुनर्लिखित होते"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s वाचण्यास असमर्थ"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s स्टॅट करण्यास असमर्थ"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "सुटा करण्यासाठी बोलावलेला/आणलेला सांधा(ड्रापनोड)अजुनही जुळलेलाच सांधा(लिंकनोड) आहे"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "हॅश एलिमेंट शोधूने काढण्यास असमर्थ!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "नेमून दिलेल्यात फेरबदल करण्यास अयशस्वी"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "AddDiversion/ऍड डायव्हर्जन मध्ये आंतरिक दोष"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "डायव्हर्जन पुनः लिहिण्यास प्रयत्न करत आहे,%s -> %s and %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "%s -> %s डायव्हर्जन दुप्पट मिळवा"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "%s/%s संचिरित संचिकाची दुसरी प्रत/नक्कल"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "%s वाचणारा दुवा असमर्थ"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "हॅश बेरीज जुळत नाही"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "पुनर्नामांकन अयशस्वी, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "आकार जुळतनाही"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "%s अवैध क्रिया"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "लिहिण्यात त्रुटी"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "%s %s आणणे असफल"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"मी %s पॅकेजकरीता संचिका शोधण्यास समर्थ नव्हतो. याचा अर्थ असाकी तुम्हाला हे पॅकेज स्वहस्ते "
+"स्थिर/निश्चित करण्याची गरज आहे(हरवलेल्या आर्चमुळे) "
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "%s (%s) ला जोडत आहे"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "%s कार्यपध्दतीचा ड्राइव्हर सापडू शकला नाही. "
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "'dpkg-dev' पॅकेज संस्थापित केले आहे का ते पडताळून पहा.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "%s कार्यपध्दती योग्य रीतीने सुरु झालेली नाही"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "कृपया '%s' लेबल असलेली डिस्क '%s' या ड्राइव्हमध्ये ठेवा आणि एन्टर कळ दाबा."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "संचयिका यादीत %s पार्शल हरवले आहे."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "ऑर्काइव्ह संचयिका %s गायब आहे."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "संचयिका यादीला कुलुप लावण्यात असमर्थ"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "'%s' प्रकारची निर्देशक संचिका सहाय्यकारी नाही"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "%li ची %li(%s राहिलेले) संचिका पुन:प्राप्त करीत आहे"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "%li ची %li संचिका पुन:प्राप्त करीत आहे"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"%s पॅकेज पुनः:अधिष्ठापित करण्याची गरज आहे, परंतु मला त्यासाठी ऑर्काइव्ह सापडू शकले नाही."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"दोष,पॅकेज समस्या निवारक::निवारण करतांना अडथळा निर्माण झाला, ह्याचे कारण स्थगित "
+"पॅकेजेस असू शकते."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "अडचणी दूर करण्यास असमर्थ, तुम्ही तुटलेले पॅकेज घेतलेले आहे."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "पॅकेजच्या याद्या किंवा संचिकेची स्थिती स्पष्ट होऊ शकत नाही किंवा ती उघडू शकत नाही."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "तुम्ही ह्या समस्यांचे निवारण करण्यासाठी apt-get update प्रोग्राम चालू करु शकता"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "उगमांच्या याद्या वाचता येणार नाहीत."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "रिजेक्स कंपायलेशन त्रुटी -%s "
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "'%s' साठी '%s' आवृत्ती सापडली नाही"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "'%s' साठी '%s' आवृत्ती सापडली नाही"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "%s कार्य सापडू शकले नाही"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "%s पॅकेज सापडू शकले नाही"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "%s पॅकेज सापडू शकले नाही"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "पॅकेज %s शोधण्यास असमर्थ आहे"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "%2$s स्त्रोत सुचीमध्ये ओळ %1$u खूप लांब आहे."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "सिडी-रॉम अनमाउंट होत आहे...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "सिडी-रॉमचे माउंट स्थान %s वापरुन\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "डिस्क/चकती करिता प्रतिक्षा करीत आहे...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "सिडी-रॉम माउंट होत आहे...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "ओळखत आहे..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "ग्रहण केलेले नामदर्शक: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "संचिकाच्या यादी/सूचीसाठी डिस्क/चकती बारकाईने तपासत आहे...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"%zu पॅकेजेसची यादी/सूची, %zu स्त्रोताची यादी/सूची, %zu भाषांतर यादी/सूची आणि %zu "
+"स्वाक्षऱ्या/सिगनेचर्स सापडल्या\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "'%s' लेबल सापडले\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "ते स्विकारण्याजोगे/वैध नांव नाही, पुन्हा प्रयत्न करा.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"ह्या डिस्कला/चकतीला: म्हणतात\n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "पॅकेज सूचींच्या प्रती तयार करित आहे..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "नविन स्त्रोत सूची लिहित आहे\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "ह्या डिस्क/चकती करिता स्त्रोत सूचीच्या प्रवेशिका आहेत: \n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "%s मध्ये बदलण्यास असमर्थ"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s स्टॅट करण्यात असमर्थ. "
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "%s माऊंट पॉईंट स्टॅट करण्यास असमर्थ"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "सीडी-रॉम स्टॅट करण्यास असमर्थ"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "आदेश रेखा पर्याय '%c' [पासून %s] हे माहित नाही."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "आदेश रेखा पर्याय %s नीट समजला नाही"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "आदेश रेखा पर्याय %s हे बूलियन नाही"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "पर्याय %s साठी ऑर्गुमेंट पाहिजे"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "पर्याय %s: संरचितेच्या यादीतील कलमांचा तपशीलाला असलेच पाहिजे ते =<मूल्य>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "%s पर्याय ला पूर्णांक ऑर्गुमेंट पाहिजे,'%s' नको"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "'%s' पर्याय खूप लांब आहे"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "%s संवेदना हे समजत नाही, चूक की बरोबर चा प्रयत्न करा."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "%s अवैध क्रिया"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "संक्षिप्तरुपाचा माहित नसलेला प्रकार: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "रचनेच्या नियमांचा दोष %s:%u: ब्लॉक नावाशिवाय सुरू होतो."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "रचनेच्या नियमांचा दोष : %s:%u: मालफॉर्मड् टॅग"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "रचनेच्या नियमांचा दोष %s:%u: मुल्यांच्या नंतर अधिक जंक"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "रचनेच्या नियमांचा दोष %s:%u: दिशादर्शक फक्त उच्च पातळीवर केले जाऊ शकतात"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "रचनेच्या नियमांचा दोष %s:%u: खूपच एकात एक इनक्लूडस्"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "रचनेच्या नियमांचा दोष %s:%u: ह्या पासून समाविष्ट "
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "नियम रचनेचा दोष %s:%u: '%s' दिशादर्शक असहाय्यकारी"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "रचनेच्या नियमांचा दोष %s:%u: दिशादर्शक फक्त उच्च पातळीवर केले जाऊ शकतात"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "नियम रचनेचा दोष %s:%u: फाईलच्या अंती अधिक जंक"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "फाईल अनलिंकिंग करण्यात अडचण"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "फक्त वाचण्यासाठी कुलूप संचिका %s साठी कुलूपबंदचा वापर करीत नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "%s कुलूप फाईल उघडता येत नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "%s nfs(नेटवर्क फाईल सिस्टीम) माऊंटेड कुलुप फाईल ला कुलुप /बंद करता येत नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "%s कुलुप मिळवता येत नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "%s साठी थांबलो पण ते तेथे नव्हते"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "%s उपक्रियेला सेगमेंटेशन दोष प्राप्त झाला."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "%s उपक्रियेला सेगमेंटेशन दोष प्राप्त झाला."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "%s उपक्रियेने (%u) त्रुटी कोड दिलेला आहे"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "%s उपक्रिया अचानकपणे बाहेर पडली"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "त्रुटी वाचा"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "लिहिण्यात त्रुटी"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "फाईल बंद करण्यात अडचण"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "आयपीसी उपक्रिया तयार करण्यास असमर्थ"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "दाबक(संकलितकर्ता) कर्यान्वित करण्यास असमर्थ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "%s फाईल उघडता येत नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "%s साठी पाईप उघडता येत नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "वाचा, %lu अजूनही वाचण्यासाठी आहे पण आता काही उरली नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "लिहा, %lu अजूनही लिहिण्यासाठी आहे पण लिहिता येत नाही"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "फाईल बंद करण्यात अडचण"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "संचिकेची syncing समस्या"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "संचिकेची syncing समस्या"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "%s स्टॅट करण्यास असमर्थ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "%s मध्ये लिहिण्यास असमर्थ "
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "रिकामी फाईल mmap करता येणार नाही"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "mmap चे %lu बाईटस् करता येणार नाहीत"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "%s साठी पाईप उघडता येत नाही"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "%s उघडण्यास असमर्थ"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "जारी करण्यास करण्यास असमर्थ"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "mmap चे %lu बाईटस् करता येणार नाहीत"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "फाईल छोटी करणे असफल"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... चूक/त्रुटी!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... झाले"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... झाले"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "%s निवडक भाग सापडत नाही"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "%s (1) पॅकेज फाईल पार्स करण्यात असमर्थ"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "लक्षात घ्या,%s ऐवजी %s ची निवड करत आहे \n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "%s डायव्हर्जन फाईलमध्ये अवैध ओळ आहे:"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "%s पॅकेज फाईल पार्स करण्यात असमर्थ (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "संचयिका यादीला कुलुप लावण्यात असमर्थ"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "संचयिका यादीला कुलुप लावण्यात असमर्थ"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s तयार करित आहे"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "%s संरचने साठी तयार करत आहे"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "%s ला काढून टाकण्यासाठी तयारी करत आहे"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "%s संपूर्ण काढून टाकण्याची तयारी करत आहे"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "संस्थापना-पश्चात ट्रिगर %s चालवत आहे"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s संस्थापित झाले"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s संरचित होत आहे"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "'%s' संचयिका गहाळ आहे"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "%s फाईल उघडता येत नाही"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s सुटे/मोकळे करीत आहे "
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s संस्थापित होत आहे"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s काढून टाकत आहे"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "%s संपूर्ण काढून टाकले"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s संपूर्ण काढून टाकले"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "%s मध्ये लिहिण्यास असमर्थ "
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "अवलंबित रचना बांधणी करत आहे"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "कंॅडिडेट आवृत्त्या"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "अवलंबित/विसंबून असलेले उत्पादन "
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "स्थिती माहिती वाचत आहे"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "%s StateFile उघडणे असफल"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "%s तात्पुरत्या StateFile मध्ये लिहिणे असफल"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i माहितीसंच लिहिले.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i गहाळ संचिकाबरोबर %i माहिती संच लिहिले.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i विजोड संचिकांबरोबर %i माहिती संच लिहिले\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "%i गहाळ संचिकाबरोबर आणि %i विजोड संचिकाबरोबर %i माहिती संच लिहिले\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "हॅश बेरीज जुळत नाही"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "'%s' पॅकेजींग प्रणाली सहाय्यकारी नाही"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "योग्य असा पॅकेजिंग प्रणाली प्रकार निश्चित करण्यास असमर्थ "
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "%s फाईल उघडता येत नाही"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"ह्याचे आधिष्ठापन सुरु करण्यासाठी अत्यावश्यक तात्पुरते काढुन टाकण्याची गरज आहे%s पॅकेज "
+"गुंतागुंतीमुळे/Pre-Depends पूर्व अवलंबित आवर्तन.हे नेहमीच वाईट असते, पण जर तुम्हाला ते खरोखर "
+"करावयाचे असेल तर,APT::Force-LoopBreak पर्याय कार्यान्वित करा."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "पॅकेज अस्थाई स्मृतिकोष"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "पॅकेज अस्थाई स्मृतिकोष फाईल खराब झाली आहे"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "पॅकेज अस्थाई स्मृतिकोष फाईल ही विजोड आवृत्ती आहे"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "'%s' आवृत्तीकरण प्रणालीला हे APT तांत्रिक मदत देऊ शकत नाही"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "पॅकेज अस्थाई स्मृतीकोष वेगळ्या वास्तुविद्ये साठी बनवला गेला"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "पॅकेज अस्थाई स्मृतिकोष फाईल खराब झाली आहे"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "अवलंबित"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "पूर्व अवलंबित"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "सुचवणे"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "परस्परविरोध"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "शिफारस"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "परत त्याठिकाणी आणा"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "तोडले"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "अप्रचलित"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "अत्यावश्यक"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "आवश्यक"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "मानक"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "अधिक"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "एच्छिक"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "अस्थायी स्मृतिकोष मध्ये विसंगत आवृतीकरण प्रणाली आहे"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "%s (पॅकेज शोधतांना) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"अरेवा!, तुम्ही तर ह्या एपिटीच्या कार्यक्षमतेपेक्षाही पॅकेज नांवांच्या संख्येची मर्यादा ओलांडली "
+"आहे."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"अरेवा!, तुम्ही तर ह्या एपिटीच्या कार्यक्षमतेपेक्षाही आवृत्त्या संख्येची मर्यादा ओलांडली आहे."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "अरेवा!, तुम्ही तर ह्या ऍप्टच्या कार्यक्षमतेपेक्षाही विवरण संख्येची मर्यादा ओलांडली आहे."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"अरेवा!, तुम्ही तर ह्या एपिटीच्या कार्यक्षमतेपेक्षाही अवलंबित/विसंबून असलेल्या संख्येची मर्यादा "
+"ओलांडली आहे."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "पॅकेज याद्या वाचत आहोत"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IO त्रुटी उगम निवडक संचयस्थानात संग्रहित होत आहे"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "'%s' प्रकारची निर्देशक संचिका सहाय्यकारी नाही"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "पसंतीच्या संचिकेत अवैध माहितीसंच, पॅकेजला शीर्षक नाही "
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "%s पिनचा प्रकार समजलेला नाही"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "पिन करिता प्राधान्य/अग्रक्रम (किंवा शून्य)निर्देशीत केलेला नाही"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "स्त्रोत सुची %2$s (प्रकार) मध्ये %1$u वाईट/व्यंग रेषा"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "%s स्त्रोत सुचीमध्ये %u रेषेवर '%s' प्रकार माहित नाही "
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "स्त्रोत सुची %2$s (प्रकार) मध्ये %1$u वाईट/व्यंग रेषा"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "%s स्त्रोत सुचीमध्ये %u रेषेवर '%s' प्रकार माहित नाही "
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "तुम्ही तुमच्या उगमस्थान यादीत URI घाला"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"काही अनुक्रमणिका संचयिका डाऊनलोड करण्यास असमर्थ,त्या दुर्लक्षित झाल्या, किंवा "
+"त्याऐवजी जुन्या वापरल्या गेल्या."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "पुढिल आवृत्तीची गणती करीत आहे"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "दाबा:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "मिळवा:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "आय.जी.एन.:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "दोष इ.आर.आर.:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%s (%sB/s) मध्ये %sB मिळविला\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr "[काम करत आहे]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"माध्यम बदल: कृपया नाव घातलेली सीडी घाला\n"
+"%s'\n"
+"'%s' ड्राईव्ह मध्ये व एंटर कळ दाबा\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "डिपेन्डन्सीज बरोबर/दुरूस्त करत आहे..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr "अयशस्वी/चूकीचे झाले."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "डिपेन्डन्सीज बरोबर करण्यास असमर्थ आहे "
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "आवृत्तीकृत संच कमीतकमी करण्यास असमर्थ"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr "झाले"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "हे बरोबर करण्यासाठी तुम्हाला `apt-get -f संस्थापना' प्रोग्राम चालू करावा लागेल."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"अनमेट डिपेंडन्सीज.एपीटी-गेट -एफ संस्थापन ('apt --fix-broken install') पॅकेजशिवाय "
+"प्रयत्न करा (किंवा पर्याय सांगा)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "सूचना, '%s' रिजेक्स साठी %s ची निवड करत आहे\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "सूचना, '%s' रिजेक्स साठी %s ची निवड करत आहे\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "सूचना, '%s' रिजेक्स साठी %s ची निवड करत आहे\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "%s हे आभासी पॅकेज ह्यांच्याकडून तरतूद केले आहे,:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr "[संस्थापित केले]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "कंॅडिडेट आवृत्त्या"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "तुम्ही संस्थापित करण्यासाठी एक निश्चित स्पष्टपणे निवडले पाहिजे."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"%s पॅकेज उपलब्ध नाही, पण दुसऱ्या पॅकेजच्या संदर्भाने.\n"
+"याचा अर्थ असाही आहे की पॅकेज सापडत नाही,ते कालबाह्य किंवा \n"
+" म्हणजे ते दुसऱ्या उगमातून उपलब्ध\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "तथापि खालील पॅकेजेस मध्ये बदल झाला:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "%s पॅकेजला संस्थापित कॅन्डिडेट नाही"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "%s पॅकेज संस्थापित केलेले नाही,म्हणून काढले नाही\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "%s पॅकेज संस्थापित केलेले नाही,म्हणून काढले नाही\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "लक्षात घ्या,%s ऐवजी %s ची निवड करत आहे \n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "ह्या APT ला सुपर काऊ पॉवर्स आहेत"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "पॅकेजेस सापडले नाहीत"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "धोक्याची सूचना:खालील पॅकेजेस् प्रमाणित करु शकत नाही! "
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "प्रमाणीकरणाची धोक्याची सूचना दुर्लक्षित करा.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "काही पॅकेजेसचे प्रमाणिकरण होऊ शकत नाही"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid "Install these packages without verification?"
+msgstr "पडताळून पाहिल्याशिवाय ही पॅकेजेस संस्थापित करायची का [हो/नाही]?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "काही अडचणी आहेत आणि --force-yes शिवाय -y वापरला गेला"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "%s मध्ये रिकामी जागा सांगू शकत नाही"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "%s मध्ये तुमच्याकडे पुरेशी जागा नाही."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "डाऊनलोड डिरेक्टरी कुलूपबंद करण्यास असमर्थ"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"काही पॅकेजेस संस्थापित होत नाहीत. याचा अर्थ असा आहे की तुम्ही\n"
+"अशक्य परिस्थितीची विनंती केली होती. किंवा जर तुम्ही अस्थिर\n"
+"विभागणी असणारी पण हवी असणारी, तयार केली नसलेली पॅकेजेस वापरत असाल \n"
+"किंवा ती येणाऱ्यांपैकी बाहेर हलविली असतील."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "खालील माहिती परिस्थिती निवळण्यासाठी मदत ठरू शकेल:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "तुटलेली पॅकेजेस"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"काही आर्काइव्हज आणण्यास असमर्थ, कदाचित apt-get रन करुन अद्ययावत करा किंवा --fix- "
+"बरोबर प्रयत्न कराहरवलेले/गहाळ?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "अंतर्गत त्रुटी, तुटलेल्या पॅकेजेस बरोबर संस्थापित पॅकेजला आवाहन केले गेले/बोलावले गेले!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "पॅकेजेस कायमची काढायची आहेत पण रिमूव्ह अकार्यक्षम केले आहे"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "काही अडचणी आहेत आणि --force-yes शिवाय -y वापरला गेला"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "काही अडचणी आहेत आणि --force-yes शिवाय -y वापरला गेला"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "अंतर्गत त्रुटी,क्रम अजून संपला नाही"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "किती विचित्र...आकार जुळत नाहीत, ईमेल apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "अर्काईव्हजच्या %sB/%sB घेण्याची गरज आहे\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "अर्काईव्हज%sB घेण्याची गरज आहे.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "या क्रियेनंतर, %sB एवढी अधिक डिस्क जागा वापरली जाईल.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "या क्रियेनंतर, %sB डिस्क जागा मोकळी होईल.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "क्षुल्लक फक्त निर्देशित केले आहे पण हे क्षुल्लक कृति/ऑपरेशन नाही."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "हो, मी म्ह्टल्याप्रमाणे करा!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"तुम्ही संभाव्य काहीतरी नुकसानकारक करणार होतात.\n"
+"पुढे '%s' उक्ती मध्ये लिहिणार \n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "व्यत्यय/बंद करा."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+#, fuzzy
+msgid "Do you want to continue?"
+msgstr "तुम्हाला पुढे जायचे आहे [Y/n]? "
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "काही संचिका डाऊनलोड करण्यास असमर्थ"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "डाऊनलोड संपूर्ण आणि डाऊनलोड मध्ये फक्त पद्धती"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+"--fix- सापडत नाही आणि माध्यम/मिडिया अदलाबदल हे सध्या तांत्रिक मदत देऊ शकत नाही"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "न सापडणारी पॅकेजेस नीट करण्यास असमर्थ."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "संस्थापन खंडित करत आहे."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "आपण या गोष्टी काढून टाकता नये, ऑटोरिमूव्हर सुरू करता येत नाही"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"हूं, AutoRemover ने काहीतरी नष्ट केल्याचे दिसतेय, खरेतर असे व्हायला नको\n"
+"कृपया apt कडे बग रिपोर्ट दाखल करा. "
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "अंतर्गत त्रुटी, AutoRemoverने स्टफला तोडले"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "खालील नवीन पॅकेजेस स्वयंचलितपणे संस्थापित झाली होती व आता आवश्यक नाहीत:"
+msgstr[1] "खालील नवीन पॅकेजेस स्वयंचलितपणे संस्थापित झाली होती व आता आवश्यक नाहीत:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "खालील नवीन पॅकेजेस स्वयंचलितपणे संस्थापित झाली होती व आता आवश्यक नाहीत:"
+msgstr[1] "खालील नवीन पॅकेजेस स्वयंचलितपणे संस्थापित झाली होती व आता आवश्यक नाहीत:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "ती काढून टाकण्यासाठी '%s' वापरा."
+msgstr[1] "ती काढून टाकण्यासाठी '%s' वापरा."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "खालील अतिरिक्त पॅकेजेस संस्थापित होतील:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "सुचवलेली पॅकेजेस:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "शिफारस केलेली पॅकेजेस:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "%s सोडून देत आहे, ते आधिच संस्थापित केले आहे आणि पुढिल आवृत्ती निश्चित केलेली नाही.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "%s सोडून देत आहे, ते आधिच संस्थापित केले आहे आणि पुढिल आवृत्ती निश्चित केलेली नाही.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "%s चे पुनर्संस्थापन शक्य नाही, हे डाऊनलोड करता येत नाही.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ही आधीच नविन आवृत्ती आहे.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "%s साठी %s (%s) निवडलेली आवृत्ती.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "%s साठी %s (%s) निवडलेली आवृत्ती.\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[संस्थापित केले]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr "[संस्थापित केले]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr "[संस्थापित केले]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr "[संस्थापित केले]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "पण %s संस्थापित झाले"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "पण %s संस्थापित करायचे आहे"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "पण ते संस्थापित करण्याजोगे नाही"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "पण ते आभासी पॅकेज आहे"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "पण ते संस्थापित होणार नाही"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "पण ते संस्थापित केले नाही"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr "किंवा"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "खालील पॅकेजेस मध्ये नमिळणाऱ्या निर्भरता/ डिपेन्डन्सीज आहेत:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "खालील नविन पॅकेजेस संस्थापित होतील:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "खालील नविन पॅकेजेस कायमची काढून टाकली जातील:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "खालील पॅकेजेस परत ठेवली गेली:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "खालील पॅकेजेस पुढिल आवृत्तीकृत होतील:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "खालील पॅकेजेस पुढच्या आवृत्तीकृत होणार नाहीत:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "पुढिल ठेवलेली पॅकेजेस बदलतील:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (च्या मुळे %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"धोक्याची सूचना:खालील जरूरीची पॅकेजेस कायमची काढून टाकली जातील।\n"
+"तुम्हाला तुम्ही काय करत आहात हे कळेपर्यंत असं करता येणार नाही!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu पुढे आवृत्तीकृत केले, %lu नव्याने संस्थापित केले,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu पुनर्संस्थापित केले,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu मागील आवृत्तीकृत केले,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu कायमचे काढून टाकण्यासाठी आणि %lu पुढच्या आवृत्तीकृत झालेली नाही.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu संपूर्ण संस्थापित किंवा कायमची काढून टाकलेली नाही.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "होय"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "तुम्हाला फक्त एकच नमुना द्यावा लागेल"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "पॅकेज संचिका:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "दृतिका सिंक नाही,पॅकेज संचिका क्ष-संदर्भ करता येत नाही"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "एकत्रित पॅकेजेस:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr "अधिष्ठापित केले:"
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr "उमेदवार:"
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(कोणताच नाही)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr "आवृत्ती कोष्टक:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "%s पॅकेज सापडू शकले नाही"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "%s पॅकेज सापडू शकले नाही"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "%s पॅकेज सापडू शकले नाही"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "%s उगम पॅकेज यादी सुरू करता येत नाही"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "उगम शोधण्यासाठी किमान एक पॅकेज देणे/सांगणे गरजेचे आहे"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "%s उगम पॅकेज शोधणे शक्य नाही/शोधण्यास असमर्थ आहे"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "आधीच डाऊनलोड केलेली '%s' फाईल सोडून द्या\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "उगम अर्काईव्हज चा %sB/%sB घेण्याची गरज आहे.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "उगम अर्काईव्हजचा %sB घेण्याची गरज आहे.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "%s उगम घ्या\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "काही अर्काईव्हज आणण्यास असमर्थ."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "%s मध्ये आधीच उघडलेल्या उगमातील उघडलेल्याला सोडून द्या किंवा वगळा\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "'%s' आज्ञा सुट्या करण्यास असमर्थ.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "'dpkg-dev' पॅकेज संस्थापित केले आहे का ते पडताळून पहा.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "बांधणी करणाऱ्या आज्ञा '%s' अयशस्वी.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "%s साठी बांधणी डिपेंडन्सी माहिती मिळवण्यास असमर्थ"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s ला बांधणी डिपेंडन्स नाहीत.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "बिल्डेपस् कशासाठी ते पडताळण्यासाठी किमान एक पॅकेज सांगणे गरजेचे आहे"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "बांधणी-डिपेंडन्सीज क्रिया पूर्ण करण्यास असमर्थ "
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "बांधणी-डिपेंडन्सीज क्रिया पूर्ण करण्यास असमर्थ "
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "%s ला पुनर्नामांकन %s करण्यास असमर्थ "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "पॅकेज %s आवृती %s मध्ये एक अनोळखी डीईपी:आहे\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "सुधारित आवृत्तीचा विधान आर्ग्युमेंटस घेऊ शकत नाही."
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "सुधारित आवृत्तीचा विधान आर्ग्युमेंटस घेऊ शकत नाही."
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "पॅकेजची सर्व नांवे: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "पॅकेजची सर्व नांवे: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " सामान्य पॅकेजेस्: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " शुध्द आभासी पॅकेजेस्:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " एकमेव आभासी पॅकेजेस्:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr "मिश्रित आभासी पॅकेजेस्:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " हरवलेले/गहाळ: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "एकूण स्पष्ट आवृत्या: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "एकूण स्पष्ट विवरणे: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "एकूण निर्भरता:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "एकूण व्हीईआर/संचिका परस्पर संबंध:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "एकूण विव/संचिका परस्पर संबंध:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "एकूण मॅपींगस् तरतूद: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "एकूण एकत्रित अक्षरसंच:"
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "एकूण दुर्लक्षित अवकाश:"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "हिशेबात घेतलेली एकूण अवकाश(जागा):"
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "उगमस्थानाचा माहितीसंच दाखवा"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "regex नमुन्यासाठी पॅकेजची यादी शोधा"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "पॅकेजसाठी संस्करणपूर्व परावलंबन माहिती दाखवा"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "पॅकेजसाठी अतिपरावलंबन माहिती दाखवा"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "पॅकेजसाठी वाचनीय माहितीसंच दाखवा"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "सर्व पॅकेजेससाठी यादी तयार करा"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "धोरण निर्धारणे दाखवा"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "या तबकडीला कृपया नाव द्या जसे डेबियन २ एलआरएल तबकडी १"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "कृपया तबकडी ड्राईव्हमध्ये ठेवून एंटर दाबा"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "%s ला पुनर्नामांकन %s करण्यास असमर्थ "
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "तुमच्या संचामधील सर्व सीडीजसाठी याच कृतीची पुनरावृत्ती करा(हीच कृती करा)"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "चलितमूल्य जोडीने नाहीत"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"उपयोग : ऍप्ट - एक्स्ट्रॅक्ट टेंप्लेट्स संचिका १[संचिका २..... ]\n"
+" \n"
+"ऍप्ट- एक्स्टॅक्ट टेंम्प्लेट्स हे संरचना व नमुन्याची माहिती काढण्याचे साधन आहे \n"
+"डेबियन पॅकेजेस मधून \n"
+"\n"
+"पर्याय : \n"
+" -h हा साह्याकारी मजकूर \n"
+" -t टेंप डिर निर्धारित करा \n"
+" -c=? ही संरचना संचिका वाचा \n"
+" -o=? एखादा अहेतुक संरचना पर्याय निर्धारित करा जसे- -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "debconf आवृत्ती मिळू शकत नाही,debconf अधिष्ठापित झाली काय?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "%s पॅकेज सापडू शकले नाही"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "अंतर्गत त्रुटी, अडचण निवारकाने स्टफला तोडले"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "प्रोग्राम गटाला तांत्रिक मदत दिली:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"वापर: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get हा पॅकेज डाऊनलोड आणि संस्थापित करण्यासाठी साधा आदेश रेखित\n"
+" संवादमंच आहे. नेहमी वापरले जाणारे आदेश म्हणजे अपडेट\n"
+"आणि संस्थापित करा\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "पॅकेजच्या नव्या याद्यां प्राप्त करा"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "आवृत्त्यांचे श्रेणिवर्धन करा"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "नवीन पॅकेजेस संस्थापित करा(pkg हे libc6 आहे आणि libc6.deb नव्हे)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "नवीन पॅकेजेस संस्थापित करा(pkg हे libc6 आहे आणि libc6.deb नव्हे)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "पॅकेजेस कायमची काढा"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "पॅकेजेस कायमची काढा व साफ करा"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "वापरात नसलेली सर्व पॅकेजेस स्वयंचलितपणे कायमची काढा"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "वितरण श्रेणिवर्धन, पहा apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "निवडी रहित करा"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "उगमस्थान पॅकेजेससाठी बांधणी-डिपेंडन्सी संरचित करा।"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "डाऊनलोड केलेल्या अर्काईव्हज फाईल्स खोडून टाका"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "डाऊनलोड केलेल्या जुन्या अर्काईव्हज फाईल्स खोडून टाका"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "डिपेन्डन्सीज तुटलेल्या नाहीत याची खात्री करा"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "उगमस्थान अर्काईव्हज डाऊनलोड करा"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "उगम शोधण्यासाठी किमान एक पॅकेज देणे/सांगणे गरजेचे आहे"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"उपयोग : ऍप्ट - एक्स्ट्रॅक्ट टेंप्लेट्स संचिका १[संचिका २..... ]\n"
+" \n"
+"ऍप्ट- एक्स्टॅक्ट टेंम्प्लेट्स हे संरचना व नमुन्याची माहिती काढण्याचे साधन आहे \n"
+"डेबियन पॅकेजेस मधून \n"
+"\n"
+"पर्याय : \n"
+" -h हा साह्याकारी मजकूर \n"
+" -t टेंप डिर निर्धारित करा \n"
+" -c=? ही संरचना संचिका वाचा \n"
+" -o=? एखादा अहेतुक संरचना पर्याय निर्धारित करा जसे- -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"उपयोग : ऍप्ट - एक्स्ट्रॅक्ट टेंप्लेट्स संचिका १[संचिका २..... ]\n"
+" \n"
+"ऍप्ट- एक्स्टॅक्ट टेंम्प्लेट्स हे संरचना व नमुन्याची माहिती काढण्याचे साधन आहे \n"
+"डेबियन पॅकेजेस मधून \n"
+"\n"
+"पर्याय : \n"
+" -h हा साह्याकारी मजकूर \n"
+" -t टेंप डिर निर्धारित करा \n"
+" -c=? ही संरचना संचिका वाचा \n"
+" -o=? एखादा अहेतुक संरचना पर्याय निर्धारित करा जसे- -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "पण ते संस्थापित केले नाही"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "खालील नविन पॅकेजेस संस्थापित होतील:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ही आधीच नविन आवृत्ती आहे.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ही आधीच नविन आवृत्ती आहे.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "%s उघडण्यास असमर्थ"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "'dpkg-dev' पॅकेज संस्थापित केले आहे का ते पडताळून पहा.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "अनोळखी पॅकेज माहिती संच!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "पॅकेज याद्या वाचत आहोत"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "एकत्रित पॅकेजेस:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "एकत्रित पॅकेजेस:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "तुटलेली पॅकेजेस"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s स्वहस्ते संस्थापित करायचे आहे.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "स्थिती माहिती वाचत आहे"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "चूकीचे मूलभूत निश्चितीकरण!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "पुढे जाण्यासाठी एंटर दाबा."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "पुर्वी डाऊनलोड केलेल्या .deb संचयिका आपल्याला खोडून टाकायच्या आहेत का?"
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "काही त्रुटी ह्या उघडत असताना घडल्या.मी संरचित करणार आहे"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "पॅकेजेस जी संस्थापित झाली आहे.याचा निकाल दुप्पट त्रुटी म्हणून होऊ शकतो"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "किंवा डिपेंडन्सीज नसल्यामुळे त्रुटी झाल्या. हे ठीक आहे, फक्त त्रुटी"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"ह्यावर संदेश खूप महत्त्वाचे आहेत.कृपया त्यांना नीट करा व संस्थापित करा पुन्हा चालवा/सुरू करा"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "उपलब्ध माहितीचे एकत्रीकरण करत आहे"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "पॅकेजेसची विस्तारित यादी खूप मोठी आहे"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "त्रुटी प्रक्रिया मार्गदर्शिका%s "
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "उगमस्थानाची विस्तारित यादी खूप मोठी आहे"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "शीर्षक संचिकेमधून मजकूर संचिकेत लिहिण्यात त्रुटी"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "त्रुटी प्रक्रिया मजकूर %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"वापर: apt-ftparchive [options] command\n"
+"आज्ञा: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive डेबियन फाईलसंचासाठी अनुक्रम संचिका निर्माण करतो.तो\n"
+" dpkg-scanpackages व dpkg-scansources करिता निर्मितीच्या संपूर्ण\n"
+" स्वंयंचलित ते कार्यकारी बदलावांपर्यंत अनेक शैलींना पाठबळ देतो\n"
+"\n"
+"apt-ftparchive हा .debsच्या तरुरचनेपासून पॅकेज संचिका निर्माण करतो \n"
+"पॅकेज संचिकेमध्ये प्रत्येक पॅकेज तसेच MD5 हॅश व संचिकाआकारामधील सर्व \n"
+" नियंत्रक क्षेत्रांची माहिती असते.अग्रक्रम आणि विभाग यांच्या मूल्यांचा प्रभाव \n"
+"वाढविण्यासाठी ओव्हरराईड संचिकेला पुष्टि दिलेली असते \n"
+"\n"
+"तसेच apt-ftparchive हा .dscs च्या तरूरचनेपासून उगमस्थान संचिका निर्माण करतो \n"
+"--source-override पर्यायाचा उपयोग एखाद्या src ओव्हरराईड संचिका नेमकेपणाने दाखविण्यास "
+"होतो \n"
+"\n"
+" 'packages' आणि 'sources' आज्ञावली तरूरचनेच्या मुळाशी दिल्या जाव्यात \n"
+"द्वयंक मार्गाचा निर्देश पुनरावर्ती शोधाच्या पाऱ्याकडे केलेला असावा आणि \n"
+" ओव्हरराईड संचिकेमध्ये ओव्हरराईड संकेत (फ्लॅग्ज) असावेत आणि \n"
+" संचिकानामक्षेत्रे असल्यास Pathprefix त्यांना जोडलेले असावेत.\n"
+"डेबियन archiveमधील नमुन्यादाखल उपयोग : \n"
+"apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"पर्याय : \n"
+" -h हा साह्याकारी मजकूर \n"
+"--md5 MD5 ची निर्मिती नियंत्रित करा \n"
+" -s= उगमस्थान ओव्हरराईड संचिका \n"
+" -q शांत \n"
+" -d= पर्यायी दृतिकादायी डेटाबेस निवडा \n"
+" --no-delink दुवा तोडणारा डिबग मार्ग समर्थ करा \n"
+" ---contents माहिती संचिकेची निर्मिती नियंत्रित करा \n"
+" -c=? ही संरचना संचिका वाचा \n"
+" -o=? एखादा अहेतुक संरचना पर्याय निर्धारित करा"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "निवडक भाग जुळत नाही"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "`%s' पॅकेज संचिका समुहातील काही संचिका गहाळ आहेत"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB खराब झाली होती, संचिका %s.old म्हणून पुनर्नामांकित केली"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB जुने आहे,%s पुढच्या आवृतीसाठी प्रयत्न करत आहे"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"DB स्वरुप वैध नाही. जर तुम्ही apt च्या जुन्या आवृत्तीपासून पुढिल आवृत्तीकृत करत असाल तर, "
+"कृपया माहितीसंच काढून टाका आणि पुनर्निर्मित करा"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "%s: %s DB संचिका उघडण्यास असमर्थ"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "%s वाचणारा दुवा असमर्थ"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "अर्काईव्ह मध्ये नियंत्रण माहिती संच नाही"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "संकेतक घेण्यास असमर्थ"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc-स्मरणस्थळ शोधण्यास असमर्थ"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "माहित नसलेली/ले संक्षेप पद्धती/अलगोरिथम '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "%s संकलित आऊटपुट/निर्गत साठी संक्षेप संचाची गरज"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "उपक्रियेचा आयपीसी वाहिनी तयार करण्यास असमर्थ"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "नविन प्रक्रिया(प्रोसेस) निर्माण करण्यास असमर्थ"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "चॉईल्ड(प्रोसेस)ला संकलित करा"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "अंतर्गत त्रुटी, %s तयार करण्यास असमर्थ"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "IO ची उपक्रिया/संचिका असमर्थ "
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "MD5 कामप्युटींग करतांना वाचण्यासाठी असमर्थ"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s उघडण्यास असमर्थ"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "%s दुर्लक्षित संचिका वाचण्यास असमर्थ"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "धोक्याची सूचना:%s संचयिका वाचण्यास असमर्थ \n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "धो.सू.:%s स्टेट करण्यास असमर्थ\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E:"
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "धो.सू.:"
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "ई: संचिकेला लागू होणाऱ्या चुका"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s सोडवण्यास असमर्थ"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "ट्री चालणे असमर्थ"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s उघडण्यास असमर्थ"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr "%s [%s] डी दुवा\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "%s चा %s दुवा साधण्यास असमर्थ"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr "%sB हीट ची डिलींक मर्यादा\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "अर्काईव्ह ला पॅकेज जागा नाही"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr "%s ला ओव्हरराईड/दुर्लक्षित जागा नाही\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr "%s देखभालकर्ता हा %s आणि %s नाही \n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr "%s ला उगम ओव्हरराईड/दुर्लक्षित जागा नाही\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr "%s ला द्वयंक ओव्हरराईड जागा नाही\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "शीर्षकासाठी थांबले आहे...."
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP सर्व्हरने अवैध प्रत्त्युत्तर शीर्षक पाठविले"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "वाईट शीर्षक ओळ"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP सर्व्हरने अवैध मजकूर-लांबी शीर्षक पाठविले "
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP सर्व्हरने अवैध मजकूर-विस्तार शीर्षक पाठविले"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "HTTP सर्व्हरने विस्तार तांत्रिक मदत जोडली"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "अपरिचित दिनांक प्रकार/स्वरूप "
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "चुकीचा शीर्षक डाटा"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "जोडणी अयशस्वी"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "अंतर्गत त्रुटी"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "%s सीडी-रॉम माहिती संच वाचण्यास असमर्थ"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"कृपया सी-डी रॉम APT कडून ओळखण्यासाठी apt-cdrom चा वापर करा.apt-get update हे "
+"नवीन सीडी राॅम अधिक मिळवण्यासाठी वापरता येणार नाही"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "चूकीची सी-डी रॉम"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "%s मधील सीडी-रॉम अनमाऊंट करण्यास असमर्थ, अजूनही ते वापरता असेल."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "डिस्क सापडत नाही"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "फाईल सापडली नाही"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[आयपी:%s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "%s (%s) ला जोडत आहे"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "%s (%s) ला जोडत आहे"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "%s (f=%u t=%u p=%u) साठी सॉकेट तयार करू शकत नाही"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "%s:%s (%s). साठी जोडणी इनिशिएट/पुढाकारीत करू शकत नाही"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "असमर्थ"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "%s:%s (%s) ला जोडू शकत नाही"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "%s:%s (%s) ला जोडू शकत नाही,जोडणी वेळेअभावी तुटली"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "%s ला जोडत आहे"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "%s रिझॉल्व्ह होऊ शकत नाही "
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "'%s' रिझॉल्व्ह करताना तात्पुरती त्रुटी"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "%s:%s' (%i) रिझॉल्व्ह होत असताना काहीतरी वाईट घडले"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "%s:%s' (%i) रिझॉल्व्ह होत असताना काहीतरी वाईट घडले"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "%s %s ला जोडण्यास असमर्थ:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "स्टॅट करण्यास असमर्थ"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "अवैध यू आर एल, स्थानिक यू आर आय एस सुरू होऊ नये यापासून //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "लॉग इन करत आहे"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "पिअर नाव सांगण्यास/सापडण्यास असमर्थ"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "स्थानिक नाव सांगण्यास असमर्थ"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "सर्व्हर ने संबंध जोडण्यास नकार दिला व सांगितले: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "सर्व्हरने %s सांगितले,यूजर असमर्थ:"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "सर्व्हरने %s सांगितले, पास असमर्थ:"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"प्रॉक्सी सर्व्हर निर्देशित केला पण लॉगीन स्क्रिप्ट नाही, प्राप्त केलेले ::ftp:: प्रॉक्सीलॉगीन "
+"निरर्थक आहे."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "सर्व्हरने %s सांगितले, '%s' लॉग इन स्क्रिप्ट आज्ञावली असमर्थ:"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "सर्व्हरने %s सांगितले: टाईप असमर्थ:"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "वेळेअभावी संबंध जोडता येत नाही"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "सर्व्हरने संबंध जोडणी बंद केली"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "प्रतिसाधाने बफर भरुन गेले."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "प्रोटोकॉल खराब झाले"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "सॉकेट तयार करू शकत नाही"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "डेटा सॉकेट जोडू शकत नाही,जोडणी वेळेअभावी बंद केली"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "पॅसिव्ह सॉकेट जोडता येत नाही"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "गेटऍड्रेसइनफो लिसनिंग सॉकेट घेण्यास असमर्थ होते"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "सॉकेट चिकटवता येत नाही"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "सॉकेट वर ऐकता येत नाही"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "सॉकेटचे नाव सांगता येत नाही"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "पोर्ट आज्ञा पाठवता येत नाही/पोर्ट आज्ञा पाठविण्यास असमर्थ"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "माहित नसलेला पत्ता फॅमिली %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "ई.पी.आर.टी. चुकले,सर्व्हरने %s सांगितले"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "डेटा सॉकेट जोडणी वेळेअभावी तुटली"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "जोडणी स्विकारण्यास असमर्थ"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "फाईल हॅश करण्यात त्रुटी"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "सर्व्हरने %s सांगितले, फाईल मिळवण्यास असमर्थ"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "डेटा सॉकेट वेळेअभावी तुटले"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "सर्व्हरने %s सांगितले, डेटा स्थानांतरण चुकले"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "प्रश्न"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "जारी करण्यास करण्यास असमर्थ"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "किमान एक अवैध सही सापडली."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "अंतर्गत त्रुटी: चांगली सही, पण की ठसे सांगू शकत नाही?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"सहीची खात्री करण्यासाठी '%s' कार्यान्वित करू शकत नाही (gnupg संस्थापित केले आहे का?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "apt-key कार्यान्वित होत असताना अपरिचित त्रुटी"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "खालील सह्या अवैध आहेत:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "खालील सह्यांची खात्री करता येत नाही कारण सार्वजनिक कीउपलब्ध नाही:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "फाईल मध्ये लिहिण्यात चूक/त्रुटी"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "सर्व्हर मधून वाचण्यात चूक. लांब शेवट आणि बंद झालेली जोडणी"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "सर्व्हर मधून वाचण्यात चूक"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "फाईल मध्ये लिहिण्यात चूक/त्रुटी"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "चुकले/असमर्थ निवड करा"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "जोडणी वेळेअभावी तुटली"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "निर्गत फाईल मध्ये लिहिताना त्रुटी/चूक"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "बदलण्याचा वेळ निश्चित करण्यास असमर्थ"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "जोडणी अकाली बंद झाली"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "अयोग्य अर्काईव्ह मेंबर शीर्षक"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s काढून टाकले"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "पॅकेज संचिका %s सिंक्रोनाइज नाहीत"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "पॅकेज यादीची/सुचीची संचिका दूषित/खराब झालेली आहे. संचिका नाव नाही: पॅकेजकरीता क्षेत्र/"
+#~ "ठिकाण %s."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "%s फाईल उघडता येत नाही"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "%s फाईल उघडता येत नाही"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "%s संरचना फाईल उघडत आहे"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s उघडत आहे"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "अनमेट डिपेंडन्सीज.--fix-broken.वापरून प्रयत्न करा "
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "तुम्हाला कदाचित 'apt --fix-broken install'(एपीटी-गेट -एफ संस्थापन') प्रोग्राम "
+#~ "चालू करावा लागेल'यात बदल करण्यासाठी:"
+
+#~ msgid "(not found)"
+#~ msgstr "(मिळाले नाही)"
+
+#~ msgid " Package pin: "
+#~ msgstr "पॅकेज (पिन):"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "पुढील कळ ओळखचिन्हांसाठी सार्वजनिक कळ उपलब्ध नाही:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr "%s पॅकेज न सापडल्याने %s साठी %s डिपेंडन्सी पूर्ण होऊ शकत नाही"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "%s पॅकेज न सापडल्याने %s साठी %s डिपेंडन्सी पूर्ण होऊ शकत नाही"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr "%s अवलंबित्व %s साठी पूर्ण होण्यास असमर्थ: संस्थापित पॅकेज %s खूपच नवीन आहे"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "आवृतीची मागणी पूर्ण करण्यासाठी %s पॅकेजची आवृत्ती उपलब्ध नाही,त्यामुळे %s साठी %s "
+#~ "डिपेंडन्सी पूर्ण होऊ शकत नाही"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "%s पॅकेज न सापडल्याने %s साठी %s डिपेंडन्सी पूर्ण होऊ शकत नाही"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "%s साठी %s डिपेंडन्सी पूर्ण होण्यास असमर्थ: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "%s साठी बांधणी-डिपेंडन्सीज पूर्ण होऊ शकत नाही."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "%s दुवा मोकळा/सुटा करण्यास अडचण"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "%s दुवा काढण्यास असमर्थ"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "वापर: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "ऍप्टच्या द्वयंक कॅश संचिका कौशल्याने हाताळण्यासाठी, व त्यांमधील माहितीची विचारणा "
+#~ "करण्यासाठी ऍप्ट -कॅश हे निम्नस्तरीय साधन आहे।\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "पर्याय : \n"
+#~ "-h -हा साह्याकारी मजकूर\n"
+#~ "-p=? पॅकेज कॅश \n"
+#~ "-s=? उगमस्थान कॅश \n"
+#~ "-q-प्रगतीनिदर्शक अकार्यान्वित करा \n"
+#~ "-i -न आढळलेल्या आज्ञेसाठी महत्त्वाचे विभाग दाखवा\n"
+#~ "-c=? ही संरचना संचिका वाचा\n"
+#~ "-o=? एखादा अहेतूक संरचना पर्याय निर्धारित करा उदा --o dir::cache=/tmp\n"
+#~ "अधिक माहितीसाठी apt-cache(8) and apt.conf(5) ची मॅन्युअल पृष्ठे पहा \n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "वापर:apt-sortpkgs [पर्याय] फाईल१[फाईल २...]\n"
+#~ "\n"
+#~ " apt-sortpkgs हे पॅकेज फाईल्सचं वर्गीकरण करणारी एक साधी आज्ञावली आहे. -s पर्याय "
+#~ "हा फाईल\n"
+#~ "कुठल्या प्रकारची आहे हे दाखवण्यासाठी वापरतात.\n"
+#~ "\n"
+#~ "पर्याय\n"
+#~ " -h हा मदत मजकूर\n"
+#~ " -s उगमस्थान फाईल वापरा\n"
+#~ " -c=? ही संरचना फाईल वाचा\n"
+#~ " -o=?- अनियंत्रित संरचना पर्याय निश्चित करा,eg -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "चाईल्ड प्रक्रिया अयशस्वी"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "उगम शोधण्यासाठी किमान एक पॅकेज देणे/सांगणे गरजेचे आहे"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "पाईप तयार करण्यास असमर्थ"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "exec gzip करण्यास असमर्थ"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s हे %s करिता %s %s वर संग्रहित\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "संचिका * तयार करण्यास असमर्थ"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "स्त्रोत सुची %s (यूआरआय पार्स) मध्ये %lu वाईट/व्यंग रेषा"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "स्त्रोत सुची %s (डीआयएसटी पार्स) मध्ये %lu वाईट/व्यंग रेषा"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "स्त्रोत सुची %s (डिआयएसटी) मध्ये %lu वाईट/व्यंग रेषा"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "स्त्रोत सुची %s (डीआयएसटी पार्स) मध्ये %lu वाईट/व्यंग रेषा"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "स्त्रोत सुची %s (डीआयएसटी पार्स) मध्ये %lu वाईट/व्यंग रेषा"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "स्त्रोत सुची %s (डीआयएसटी पार्स) मध्ये %lu वाईट/व्यंग रेषा"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "स्त्रोत सुची %2$s (यूआरआय) मध्ये %1$lu वाईट/व्यंग रेषा"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "स्त्रोत सुची %2$s (डिआयएसटी) मध्ये %1$lu वाईट/व्यंग रेषा"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "स्त्रोत सुची %2$s (यूआरआय पार्स) मध्ये %1$lu वाईट/व्यंग रेषा"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "स्त्रोत सुची %2$s (absolute dist) मध्ये %1$lu वाईट/व्यंग रेषा"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "स्त्रोत सुची %2$s (डीआयएसटी पार्स) मध्ये %1$lu वाईट/व्यंग रेषा"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "अवलंबित/विसंबून असणाऱ्या संचिकांची प्रक्रिया करीत असतांना पॅकेज %s %s सापडले नाही "
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "%s उगम पॅकेज यादी सुरू करता येत नाही"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "तरतूद/पुरवलेल्या संचिका संग्रहित करीत आहे"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "%s (1) पॅकेज फाईल पार्स करण्यात असमर्थ"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "विक्रेता गट %s मध्ये बोटाचे ठसे नाहीत"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "एकूण परावलंबित आवृत्ती अवकाश:"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "%s मध्ये पुरेशी जागा नाही"
+
+#~ msgid "Done"
+#~ msgstr "झाले"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "संस्थापन खंडित करत आहे."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "अंतर्गत त्रुटी,ऑलअपग्रेडने स्टफला तोडले"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s हे वैध डीईबी पॅकेज नाही "
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "सिडी-रॉमचे माउंट स्थान %s वापरुन\n"
+#~ "सिडी-रॉम माउंट होत आहे\n"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "हा वैध DEB अर्काईव्ह नाही, ह्याला '%s', '%s' किंवा '%s' मेंबर नाही"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "एमडी५ बेरीज/MD5Sum जुळत नाही"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "मी %s पॅकेजकरीता संचिका शोधण्यास समर्थ नव्हतो. याचा अर्थ असाकी तुम्हालाहे पॅकेज "
+#~ "स्वहस्ते स्थिर/निश्चित करण्याची गरज आहे."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr "सत्रनोंद लिहिता येत नाही, openpty() असफल (/dev/pts आरोहित नाही?)\n"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "%s संरचना फाईल उघडत आहे"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "%s कायमचे काढून टाकण्यास असमर्थ"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "%s तयार करण्यास असमर्थ"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "% sinfo स्टॅट करण्यास असमर्थ"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "info आणि temp संचिका सारख्याच फाईलप्रणालीत असणे आवश्यक आहे"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "admin dir %sinfo असे बदलण्यास असमर्थ"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "पॅकेजचे नाव मिळवत असताना आंतरिक दोष/त्रुटी मिळाली"
+
+#~ msgid "Reading file listing"
+#~ msgstr "फाईलचे लिस्टिंग वाचत आहे"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "'%sinfo/%s'. जर तुम्ही ही फाईल रिस्टोअर करू शकला नाहीत.तर ती रिकामी करा आणि "
+#~ "लगेच ह्या सारखी आवृत्ती असणारे पॅकेज पुनर्संस्थापितकरा!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "%sinfo/%s फाईल यादी वाचण्यास असमर्थ"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "नोड मिळवताना आंतरिक त्रुटी मिळाली"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "%sdiversions ही डायव्हर्जन फाईल उघडण्यात असमर्थ"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "डायव्हर्जन फाईल खराब झाली आहे"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "%s डायव्हर्जन फाईलमध्ये अवैध ओळ आहे:"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "डायव्हर्जन मिळवताना आंतरिक त्रुटी मिळाली"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "pkg अस्थाई स्मृतीकोष प्रथम इनिशिअलाईज्ड केला पाहिजे"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "पॅकेज शोधण्यास असमर्थ: शिर्षक,आॅफसेट %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "आॅफसेट %lu, सद्यस्थिती फाईलमध्ये वाईट कॉन्फ फाईल भाग"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "ऑफसेट %lu, MD5. पार्सिंग मध्ये त्रुटी "
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "%s मध्ये बदलता येत नाही"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "वैध नियंत्रण फाईल शोधण्यास असमर्थ"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "%s साठी पाईप उघडता येत नाही"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "%s क्रियेपासून चूक वाचा"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "%u अक्षरांवर एक शीर्षक ओळ मिळाली"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "असंकलितकर्ता "
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "वाचा, %lu अजूनही वाचण्यासाठी आहे पण आता काही उरली नाही"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "लिहा, %lu अजूनही लिहिण्यासाठी आहे पण लिहिता येत नाही"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "%s (नविन पॅकेज) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "%s (वापरातील पॅकेज१) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "%s (NewFileDesc1) वर प्रक्रिया सुरू असताना त्रुटी उद्भवली"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "%s प्रक्रिया करीत असतांना दोष आढळून आला(वापरातील पॅकेज२)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "%s(नविन संचिका आवृती१) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "%s (नविन आवृत्ती १) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "%s(वापरातील पॅकेज३) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "%s (NewFileDesc2) वर प्रक्रिया सुरू असताना त्रुटी उद्भवली"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "%s (पॅकेज शोधतांना) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "%s (तरतूद/पुरवलेल्या संचिका जमा) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "आंतरिक त्रुटी, मेंबर शोधता येत नाही"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "दोष: ::gpgv:: कडून प्राप्त झालेला ऑर्गुमेंट सूचीचा पर्याय खूप लांबीचा. बाहेर पडत आहे."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "%s(नविन आवृती२) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "स्त्रोत सुची %s (विक्रेता आयडी) मध्ये %u वाईट/व्यंग रेषा "
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "'%s': कीरिंग पर्यंत पोहोचू शकत नाही"
+
+#~ msgid "Could not patch file"
+#~ msgstr "फाईल पॅच करता आली नाही"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "%s करिता ट्रिगर्स प्रक्रिया करत आहे"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "Dynamic MMap ला ज आगा कमी पडली"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "जेव्हा तुम्ही एका क्रियेची विनंती केली तेव्हा असं की\n"
+#~ "ते पॅकेज संस्थापित होऊ शकत नाही आणि त्याच्या विरूद्ध \n"
+#~ "दोष आढाव्याची नोंद ठेवली पाहिजे."
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "ओळ %d खूप लांब (कमाल %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "ओळ %d खूप लांब (कमाल %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "%s(नविन संचिका आवृती१) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "%s(नविन संचिका आवृती१) प्रक्रिया करीत असतांना दोष आढळून आला"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "ग्रहण केलेले नामदर्शक: %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "%i पॅकेजेसची यादी/सूची , %i स्त्रोताची यादी/सूची आणि %i स्वाक्षऱ्या/सिगनेचर्स "
+#~ "सापडल्या \n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "चुकले/असमर्थ निवड करा"
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..98a03ed
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,4409 @@
+# Norsk Bokmal translation of messages in APT.
+# The file is available under Gnu Public License version 2.
+# Get the license from http://www.gnu.org/licenses/gpl.txt
+# Copyright:
+# Lars Bahner <bahner@debian.org>, 2002-2003.
+# Axel Bojer <axelb@skolelinux.no>, 2003-2004.
+# Klaus Ade Johnstad <klaus@skolelinux.no>, 2004.
+# Bjorn Steensrud <bjornst@powertech.no>, 2004.
+# Hans Fredrik Nordhaug <hans@nordhaug.priv.no>, 2003, 2005-2010.
+# Petter Reinholdtsen <pere@hungry.com>, 2016, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2018-10-30 20:53+0100\n"
+"Last-Translator: Petter Reinholdtsen <pere@hungry.com>\n"
+"Language-Team: Norwegian Bokmål <i18n-no@lister.ping.uio.no>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Ugyldig arkivsignatur"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Feil ved lesing av arkivmedlemshode"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Ugyldig arkivmedlemshode"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arkivet er for kort"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Klarte ikke å lese arkivhodene"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Klarte ikke finne oppsatt kompressor for «%s»"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Ødelagt arkiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar-sjekksummen mislykkes, arkivet er ødelagt"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Ukjent TAR-hode: type %u, medlem %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Dette er ikke et gyldig DEB-arkiv, mangler «%s»-medlemmet"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Intern feil, fant ikke medlemmet %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Kontrollfila kan ikke tolkes"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Klarte ikke å skrive fila %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Klarte ikke å lukke fila %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Stien %s er for lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Pakker ut %s mer enn en gang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Katalogen %s er avledet"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Pakken prøver å skrive til avledningsmålet %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Avledningsstien er for lang"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Klarte ikke å få statusen på %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Klarte ikke å endre navnet på %s til %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Mappa %s blir byttet ut med noe som ikke er en mappe"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Fant ikke knutepunktet i dens hash-spann"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Stien er for lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Skriver over pakketreff uten versjon for %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Fila %s/%s skriver over den tilsvarende fila i pakken %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Klarer ikke å lese %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Klarte ikke å få statusen på %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode ble startet på et knutepunkt som ennå er lenket"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Fant ikke nøkkelelementet."
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Klarte ikke å tildele avledning"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Intern feil i AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Prøver å skrive over en avledning, %s -> %s og %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dobbel tillegging av avledning %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Dobbel oppsettsfil %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Oppdatering fra et slikt depot kan ikke gjøres på sikkert vis, og er derfor "
+"avskrudd som standard."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Se manualsiden apt-secure(8) for detaljer om oppretting av depote og "
+"brukeroppsett."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Katalogen %s er avledet"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Katalogen %s er avledet"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Katalogen %s er avledet"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Katalogen %s er avledet"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Katalogen %s er avledet"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Klarte ikke å lese lenken %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hashsummen stemmer ikke"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"Utilstrekkelig informasjon tilgjengelig for å utføre denne nedlastingen på "
+"sikkert vis."
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "klarte ikke å endre navnet, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Feil størrelse"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Ugyldig operasjon %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Skrivefeil"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"En feil oppstod under signaturverifisering. Depotet er ikke oppdatert og den "
+"forrige indeksfilen vil bli brukt. GPG-feil: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG-feil: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Konflikt mellom distribusjoner: %s (forventet %s men fant %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "Depot «%s» endret sin «%s»-verdi fra «%s» til «%s»."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr "Depot «%s» endret sin standardprioritet for %s fra %hi til %hi."
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+"Mer informasjon om dette kan finnes på nettet i utgivelsesnotatene på: %s"
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"Dette må eksplisitt aksepteres før oppdateringer fra dette depoet kan tas i "
+"bruk. Se manualsiden %s for detaljer."
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Klarte ikke å skaffe %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Klarte ikke å finne en fil for pakken %s. Det kan bety at du må ordne pakken "
+"selv (fordi arkitekturen mangler)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Klarte ikke finne kilde for å laste ned versjon «%s» av «%s»"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Kobler til %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "Metoden «%s» er eksplisitt avskrudd via oppsettet."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "Hvis du mente å bruke Tor, husk å bruke %s i stedet for %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Finner ikke metode-driveren %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Er pakken «%s» installert?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Metoden %s startet ikke korrekt"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Sett inn disken merket «%s» i lagringsenheten «%s» og trykk Enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Listemappa %s mangler."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Arkivmappa %s mangler."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Klarte ikke låse mappa %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr "Mangler sandkassebruker «%s» på systemet, kan ikke droppe privileger"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Oversiktsfil av typen «%s» støttes ikke"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Henter fil %li av %li (%s gjenværende)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Henter fil %li av %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Pakka %s trenger å installeres på nytt, men jeg finner ikke lageret for den."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Feil, pkgProblemResolver::Resolve skapte et brudd, det kan skyldes pakker "
+"som holdes tilbake."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Klarer ikke å rette problemene, noen ødelagte pakker er holdt tilbake."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Pakkelista eller tilstandsfila kunne ikke fortolkes eller åpnes."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Det kan hende du vil kjøre «apt-get update» for å rette på disse problemene"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Kan ikke lese kildlista."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Kompileringsfeil i regulært uttrykk - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Utgave «%s» av «%s» ble ikke funnet"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Versjon «%s» av «%s» ble ikke funnet"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Klarte ikke å finne oppgave «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Klarte ikke finne noen pakke med regex «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Klarte ikke finne noen pakke med glob «%s»"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Klarer ikke å finne pakken %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Klarte ikke velge versjoner fra pakken «%s» siden den er kun virtuell"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Klarte ikke velge nyeste versjon fra pakken «%s» siden den er kun virtuell"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Klarte ikke velge kandidatversjon fra pakken «%s» siden den ikke har noen "
+"kandidat"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Klarte ikke velge installert versjon fra pakken «%s» siden den ikke er "
+"installert"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Klarte ikke velge installert eller kandidatversjon fra pakken «%s» siden den "
+"har ingen av dem"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Linje %u i kildelista %s er for lang"
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Avmonterer CD-ROM ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Bruker CD-ROM monteringspunkt %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Venter på CD-en...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Monterer CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Indentifiserer..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Lagret merkelapp: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Leter gjennom CD for indeksfiler...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Fant %zu pakkeindekser, %zu kildeindekser, %zu oversettelsesindekser og %zu "
+"signaturer\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Klarte ikke finne noen Package-filer. Kanskje dette ikke er en Debian Disc "
+"eller du har valgt feil arkitektur?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Fant merkelapp «%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Det er ikke et gyldig navn, prøv igjen.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"CD-en er kalt: \n"
+"«%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopierer pakkelister..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Skriver ny kildeliste\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Kildelisteoppføringer for denne CD-en er:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Klarer ikke å endre %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Klarer ikke finne informasjonom %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Klarer ikke å fastsette monteringspunktet %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Klarer ikke å få statusen på CD-spilleren"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Kjenner ikke kommandolinjevalget «%c» (fra %s)."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Skjønner ikke kommandolinjevalget %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Kommandolinjevalget %s er ikke boolsk"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Valget %s krever et argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Valg %s: Angivelsen av oppsettselementet må ha en =<verdi>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Valget %s må ha et heltallsargument, ikke «%s»"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Valget «%s» er for langt"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Skjønner ikke %s. Prøv «true» eller «false»."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Ugyldig operasjon %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Ukjent typeforkortelse: «%c»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaksfeil %s:%u: Blokka starter uten navn."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaksfeil %s:%u: Feil på taggen"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaksfeil %s:%u: Ugyldige angivelser etter verdien"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Syntaksfeil %s:%u: Direktivene kan bare ligge i det øverste nivået"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaksfeil %s:%u: For mange nøstede inkluderte filer"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaksfeil %s:%u: Inkludert herfra"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaksfeil %s:%u: Direktivet «%s» er ikke støttet"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "Syntaksfeil %s:%u: clear-direktivet krever et valgtre som argument"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaksfeil %s:%u: Ugyldige angivelser på slutten av fila"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problem ved oppheving av lenke til fila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Bruker ikke låsing for den skrivebeskyttede låsefila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Klarte ikke åpne låsefila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Bruker ikke låsing på den nfs-monterte låsefila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Får ikke låst %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Ventet på %s, men den ble ikke funnet"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Underprosessen %s mottok et minnefeilsignal."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Underprosessen %s mottok signalet %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Underprosessen %s ga en feilkode (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Underprosessen %s avsluttet uventet"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Lesefeil"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Skrivefeil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problem ved låsing av gzip-fila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Uventet slutt på fil"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Klarte ikke å opprette underprosessen IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Klarte ikke å kjøre komprimeringen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Klarte ikke åpne fila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Klarte ikke åpne fildeskriptor %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lese, har fremdeles %llu igjen å lese, men ingen igjen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "skrive, har fremdeles %llu igjen å skrive, men klarte ikke å"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problem ved låsing av fila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problem ved endring av navn på fila %s til %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problem ved oppdatering av fila"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Klarte ikke å få statusen på %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Kan ikke skrive til %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Kan ikke utføre mmap på en tom fil"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Klarte ikke lage mmap av %llu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Klarte ikke duplisere fildeskriptor %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Klarte ikke lukke mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Klarte ikke synkronisere mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Klarte ikke lage mmap av %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Klarte ikke forkorte fila %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dynamisk MMap gikk tom for minne. Øk størrelsen på APT::Cache-Start. "
+"Nåværende verdi: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Klarte ikke øke størrelsen på MMap-en siden grensen på %lu byte allerede er "
+"nådd."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Klarte ikke øke størrelsen på MMap-en siden automatisk voksing er deaktivert "
+"av brukeren."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s ... Feil"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s ... Ferdig"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s ... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lit %lim %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lit %lim %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%lim %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Fant ikke utvalget %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Klarer ikke å fortolke Release-fila %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Ingen avsnitt i Release-fila %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Ingen sjekksumoppføring i Release-fila %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Ugyldig «%s»-oppføring i Release-fila %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Klarer ikke å fortolke pakkefila %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Klarte ikke låse den administrative mappen (%s). Bruker en annen prosess den?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Klarte ikke låse den administrative mappen (%s). Er du root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr "dpkg ble avbrutt. Du må kjøre «%s» manuelt for å rette problemet,"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Klarte ikke låse den administrative mappen (%s). Bruker en annen prosess den?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Klarte ikke låse den administrative mappen (%s). Er du root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Ikke låst"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Forbereder %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Forbereder oppsett av %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Forbereder fjerning av %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Forbereder å fullstendig slette %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Legger merke til at %s forsvinner"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Kjører etter-installasjonsutløser %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Installerte %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Setter opp %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Mappa «%s» mangler"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Klarte ikke åpne fila «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Pakker ut %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Installerer %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Fjerner %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Fjerner %s fullstendig"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Fjernet %s fullstendig"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Kan ikke skrive logg (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Er /dev/pts montert?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Ingen apport-rapport skrevet for MaxReports allerede er nådd"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "avhengighetsproblemer - lar den være uoppsatt"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Ingen apport-rapport skrevet fordi feilmeldingen indikerer at den er en "
+"følgefeil fra en tidligere feil."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Ingen apport-rapport skrevet fordi feilmeldingen indikerer en «full disk»-"
+"feil"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Ingen apport-rapport skrevet fordi feilmeldingen indikerer en «tom for "
+"minne»-feil"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Ingen apport-rapport skrevet fordi feilmeldingen indikerer et problem på det "
+"lokale systemet."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Ingen apport-rapport skrevet fordi feilmeldingen indikerer en «dpkg I/O»-feil"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Skaper oversikt over avhengighetsforhold"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versjons-kandidater"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Oppretter avhengighetsforhold"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Leser tilstandsinformasjon"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Klarte ikke å åpne StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Klarte ikke å skrive midlertidig StateFile %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Skrev %i poster.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Skrev %i poster med %i manglende filer.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Skrev %i poster med %i feile filer.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Skrev %i poster med %i manglende filer og %i feile filer.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Klarte ikke finne autentiseringsoppføring for: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hashsummen stemmer ikke for: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Pakkesystemet «%s» støttes ikke"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Klarer ikke bestemme en passende pakkesystemtype"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Fremgang: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Kjører dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Klarte ikke gjennomføre umiddelbar konfigurasjon av «%s». Se man 5 apt.conf "
+"under APT::Immediate-Configure for detaljer. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Klarte ikke åpne fila «%s»"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Den forestående installasjon må midlertidig fjerne den meget viktige pakken "
+"%s pga. en konflikt/forutsettelses-løkke. Dette er ofte stygt, men hvis du "
+"virkelig vil det, så bruk innstillingen APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Tomt pakkelager"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Pakkens lagerfil er ødelagt"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Pakkens lagerfil er av feil versjon (samvirker ikke)"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Denne APT støtter ikke versjonssystemet «%s»"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Pakkelageret ble bygd for en annen arkitektur"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Pakkens lagerfil er ødelagt"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Avhenger av"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Forutsetter"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Foreslår"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Er i konflikt med"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Anbefaler"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Erstatter"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Ødelegger"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Forbedrer"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Nuller"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "viktig"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "påkrevet"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "vanlig"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "tillegg"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "valgfri"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Lageret har et uoverensstemmende versjonssystem"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Feil oppsto under behandling av %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Jøss, du har overgått antallet pakkenavn denne APT klarer."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Jøss, du har overgått antallet versjoner denne APT klarer."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Jøss, du har overgått antallet beskrivelser denne APT klarer."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Jøss, du har overgått antallet avhengighetsforhold denne APT klarer."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Leser pakkelister"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IO-feil ved lagring av kildekode-lager"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Oversiktsfil av typen «%s» støttes ikke"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Ugyldig oppslag i foretrekksfila %s, manglende pakkehode"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Forsto ikke spikring av typen %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Ingen prioritet (eller null) spesifisert for pin"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Ugyldig overstyring %s linje %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Feil på %u i kildelista %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typen «%s» er ukjent i linje %u i kildelista %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Feil på %u i kildelista %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typen «%s» er ukjent i linje %u i kildelista %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"Beklager, du må legge inn noen kilder (nettadresser) i din «sources.list»."
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "Kan ikke gjøre om %s til heltall: utenfor rekkevidde"
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Klarte ikke å laste ned alle oversiktfilene. De ble ignorerte, eller gamle "
+"ble brukt isteden. "
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Beregner oppgradering"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Funnet:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Hent:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Feil:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Hentet %sB på %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Arbeider]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Bytte av media: sett inn CD-en som er merket\n"
+" «%s»\n"
+"i «%s» og trykk «Enter»\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Retter på avhengighetsforhold ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " mislyktes."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Klarer ikke å rette på avhengighetsforholdene"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Klarer ikke å minimere oppgraderingsettet"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Utført"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Du vil kanskje kjøre «apt --fix-broken install» for å rette på dette."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Uinnfridde avhengighetsforhold. Prøv «apt --fix-broken install» uten pakker "
+"(eller angi en løsning)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Sorterer"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Merk, velger «%s» for oppgaven «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Merk, velger «%s» for det regulære uttrykket «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Merk, velger «%s» for det regulære uttrykket «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Pakken %s er en virtuell pakke, som oppfylt av:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Installert]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Ikke versjonskandidat]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Du må velge en pakke som skal installeres."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Pakken %s er ikke tilgjengelig, men en annen pakke henviser til den.\n"
+"Dette kan bety at pakken mangler, er utgått, eller bare finnes \n"
+"tilgjengelig fra en annen kilde.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Følgende pakker erstatter den imidlertid:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Pakken «%s» har ingen installasjonskandidat"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Virtuelle pakker som «%s» kan ikke fjernes\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Pakken '%s' er ikke installert, og derfor heller ikke fjernet. Mente du "
+"'%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Pakken %s er ikke installert, og derfor heller ikke fjernet\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Merk, velger «%s» istedenfor «%s»\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Mest brukte kommandoer:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Se %s for mer informasjon om de tilgjengelige kommandoene."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Detaljer om oppsettvalg og syntaks finnes i apt.conf(5).\n"
+"Informasjon om hvordan en setter opp kilder finnes i sources.list(5).\n"
+"Sikkerhetsdetaljer er tilgjengelig i apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Denne APT har kraften til en Superku."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes er utdatert, bruk en av valgene som starter med --allow istedet."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Fant ingen pakker"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ADVARSEL: Følgende pakker ble ikke autentisert!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Autentiseringsadvarsel overstyrt.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Noen pakker ble ikke autentisert"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Installer disse pakkene uten verifikasjon?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Det oppsto problemer og «-y» ble brukt uten «--force-yes»"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Klarte ikke bestemme ledig plass i %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Dessverre, ikke nok ledig plass i %s"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Klarer ikke å låse nedlastingsmappa"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Noen pakker ble ikke installeres. Dette kan bety at du har bedt om\n"
+"en umulig tilstand eller, hvis du bruker den ustabile utgaven av Debian,\n"
+"at visse kjernepakker ennå ikke er laget eller flyttet ut av «Incoming» for\n"
+"distribusjonen."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Følgende informasjon kan være til hjelp med å løse problemet:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Ødelagte pakker"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Klarte ikke å hente alle arkivene. Du kan prøve med «apt-get update» eller "
+"«--fix-missing»."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Intern feil, InstallPackages ble kalt med ødelagte pakker!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pakker trenges å fjernes, men funksjonen er slått av."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Det oppsto problemer og «-y» ble brukt uten «--force-yes»"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Det oppsto problemer og «-y» ble brukt uten «--force-yes»"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Pakker som er holdt igjen ble endret og -y ble brukt uten --allow-change-"
+"held-packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Intern feil, sortering fullførte ikke"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Så rart ... Størrelsene stemmer ikke overens, send en e-post til "
+"apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Må hente %sB/%sB med arkiver.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Må hente %sB med arkiver.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Etter denne operasjonen vil %sB ekstra diskplass bli brukt.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Etter denne operasjonen vil %sB diskplass bli ledig.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"«Bare trivielle endringer» ble angitt, men dette er ikke en triviell endring."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ja, gjør som jeg sier!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Du er iferd med å utføre en mulig skadelig handling.\n"
+"For å fortsette skriv inn teksten «%s»\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Avbryter."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Vil du fortsette?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Klarte ikke laste ned alle filene"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Nedlasting fullført med innstillinga «bare nedlasting»"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "«--fix-missing» og bytte av media støttes nå ikke"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Klarer ikke å rette på manglende pakker."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Avbryter installasjonen."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Den følgende pakken forsvant fra systemet ditt siden\n"
+"alle filene er overskrevet av andre pakker:"
+msgstr[1] ""
+"De følgende pakkene forsvant fra systemet ditt siden\n"
+"alle filene er overskrevet av andre pakker:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Merk: Dette er gjort automatisk og med hensikt av dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Vi skal ikke slette ting, kan ikke starte auto-fjerner (AutoRemover)"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, det ser ut som auto-fjerneren (AutoRemover) ødela noe, og det skal\n"
+"virkelig ikke skje. Send inn en feilmelding til apt-utviklerne."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Intern feil, autofjerneren (AutoRemover) ødela noe"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Følgende pakke ble automatisk installert og er ikke lenger påkrevet:"
+msgstr[1] ""
+"Følgende pakker ble automatisk installert og er ikke lenger påkrevet:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu pakke ble automatisk installert og er ikke lenger påkrevet.\n"
+msgstr[1] "%lu pakker ble automatisk installert og er ikke lenger påkrevet.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Bruk «%s» for å fjerne den."
+msgstr[1] "Bruk «%s» for å fjerne dem."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "Følgende ekstra pakker vil bli installert:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Foreslåtte pakker:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Anbefalte pakker"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Omgår %s - den er allerede installert eller ikke satt til oppgradering.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Hopper over %s siden den ikke er installert eller kun oppgraderinger er "
+"ønsket.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Det er ikke mulig å installere %s på nytt - den kan ikke nedlastes.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s er allerede nyeste versjon.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s satt til manuell installasjon.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Utvalgt versjon «%s» (%s) for «%s»\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Utvalgt versjon «%s» (%s) for «%s»\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Lister opp"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Det er %i ekstra versjon. Vær så snill å bruk '-a'-bryteren for å se den"
+msgstr[1] ""
+"Det er %i ekstra versjoner. Vær så snill å bruk '-a'-bryteren for å se dem."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"MERK: Dette er kun en simulering.\n"
+" %s må ha root-rettigheter for reell utførelse.\n"
+" Husk også at låsing er deaktivert, så ikke regn med \n"
+" relevans i forhold til den reelle gjeldende situasjonen.\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "ukjent"
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[installert,auto-fjernbar]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[oppgraderbar fra: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "men %s er installert"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "men %s skal installeres"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "men lar seg ikke installere"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "men er en virtuell pakke"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "men skal ikke installeres"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "men er ikke installert"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " eller"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Følgende pakker har uinnfridde avhengighetsforhold:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Følgende NYE pakker vil bli installert:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Følgende pakker vil bli FJERNET:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Følgende pakker er holdt tilbake:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Følgende pakker vil bli oppgradert:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Følgende pakker vil bli NEDGRADERT:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Følgende pakker vil bli endret:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (pga. %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ADVARSEL: Følgende essensielle pakker vil bli fjernet.\n"
+"Dette bør IKKE gjøres, med mindre du vet nøyaktig hva du gjør!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu oppgraderte, %lu nylig installerte, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu installert på nytt, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu nedgraderte, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu å fjerne og %lu ikke oppgradert.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu pakker ikke fullt installert eller fjernet.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[J/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[j/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "J"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Du må oppgi minst ett søkemønster"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Fulltekstsøk"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Det er %i ekstra oppføring. Vær så snill å bruk '-a'-bryteren for å se den"
+msgstr[1] ""
+"Det er %i ekstra oppføringer. Vær så snill å bruk '-a'-bryteren for å se "
+"dem."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "ikke en virkelig pakke (virtuell)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Pakkefiler:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Mellomlageret er ikke oppdatert, kan ikke kryssreferere til en pakkefil"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Låste pakker:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s med prioritet %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Installert: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ingen)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versjonstabell:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Klarte ikke finne noen pakken med regex «%s»"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Klarte ikke finne noen pakken med regex «%s»"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Klarte ikke finne noen pakken med regex «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Velger «%s» som kildepakke istedenfor «%s»\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Ignorer utilgjengelig versjon «%s» av pakke «%s»"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Du må angi minst en pakke du vil ha kildekoden til"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Klarer ikke å finne en kildekodepakke for %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"MERK: «%s»-pakker blir vedlikeholdt i versjonskontrollsystemet «%s» på:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Bruk:\n"
+"%s\n"
+"for å hente siste (muligens ikke utgitte) oppdateringer for pakken.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Hopper over allerede nedlastet fil «%s»\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Trenger å skaffe %sB av %sB fra kildekodearkivet.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Trenger å skaffe %sB fra kildekodearkivet.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Skaffer kildekode %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Klarte ikke å skaffe alle arkivene."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Omgår utpakking av allerede utpakket kilde i %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Utpakkingskommandoen «%s» mislyktes.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Sjekk om pakken «dpkg-dev» er installert.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Byggekommandoen «%s» mislyktes.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Klarer ikke å skaffe informasjon om bygge-avhengighetene for %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s har ingen avhengigheter.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Ingen arkitekturinformasjon tilgjengelig for %s. Se apt.conf(5) APT::"
+"Architectures for oppsett."
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "Du må angi minst en pakke du vil sjekke «builddeps» for"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "Merk, bruker '%s'-katalogen for å få tak i byggavhengigheter\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Klarte ikke å behandle forutsetningene for bygging"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Klarte ikke å behandle forutsetningene for bygging"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Klarte ikke å endre navnet på %s til %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "'%s'-filen din ble endret, vær så snill å kjør 'apt-get update'.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Pakken %s versjon %s har et uinnfridd avhengighetsforhold:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Oppdaterings-kommandoen tar ingen argumenter"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i pakke kan oppgraderes. Kjør 'apt list --upgradable' for å se den.\n"
+msgstr[1] ""
+"%i pakker kan oppgraderes. Kjør 'apt list --upgradable' for å se dem.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Alle pakkene er oppdatert."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Oppdaterings-kommandoen tar ingen argumenter"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Antall pakkenavn: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Antall pakkestrukturer: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Vanlige pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Rent virtuelle pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Enkle virtuelle pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Sammensatte virtuelle pakker: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Mangler: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Antall unike versjoner: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Antall unike beskrivelser: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Antall avhengighetsforhold: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Antall forhold versjon/fil: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Antall forhold beskrivelse/fil: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Antall tilbudte tilknyttinger: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Antall utvidede strenger: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Plass brukt av slark: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Samlet mengde redegjort plass: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Denne kommandoen er utdatert. Vær så snill å bruke 'apt-mark showauto' "
+"istedet."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Vis data om kildekoden"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Søk i pakkelista etter et regulært uttrykkr"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Vis rå informasjon om avhengighetsforholdene for pakken"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Vis informasjon om de reverserte avhengighetsforholdene for pakken"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Vis et lesbart oppslag for pakken"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "List alle pakkenavn på systemet"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Vis regelinnstillingerr"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Oppgi et navn for disken, for eksempel «Debian 5.0.3 Disk 1»"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Sett inn en disk i lagringsenheten og trykk Enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Klarte ikke montere «%s» på «%s»"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Gjenta denne prosessen for resten av CD-ene i ditt sett."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Ikke parvise argumenter"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Bruk: apt-config [innstillinger] kommando\n"
+"\n"
+"apt-config er et enkelt verktøy til å lese APTs innstillingsfil\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Bruk: apt-extracttemplates fil1 [fil2 ...]\n"
+"\n"
+"apt-extracttemplates er et verktøy til å hente ut informasjon om "
+"innstillinger\n"
+"og maler fra debianpakker.\n"
+"\n"
+"Innstillinger:\n"
+" -h Denne hjelpeteksten\n"
+" -t Lag en midlertidig mappe\n"
+" -c=? Les denne innstillingsfila.\n"
+" -o=? Sett en vilkårlig innstilling, f.eks. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Kan ikke fastslå debconf-versjonen. Er debconf installert?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Klarte ikke å finne pakken %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s satt til automatisk installasjon.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Denne kommandoen er utdatert. Vær så snill å bruk 'apt-mark auto' og 'apt-"
+"mark manual' istedet."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Intern feil, problemløser ødela noe"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Støttede moduler:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Bruk: apt-get [valg] kommando\n"
+" apt-get [valg] install|remove pakke1 [pakke2 ...]\n"
+" apt-get [valg] source pakke1 [pakke2 ...]\n"
+"\n"
+"apt-get er et enkelt grensesnitt som kan brukes fra kommandolinja\n"
+"for å laste ned og installere pakker. De mest brukte kommandoene \n"
+"er «update» og «install».\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Hent nye pakkelister"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Utfør en oppgradering"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Installér nye pakker (Pakke er «foo», ikke «foo.deb»)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Installér nye pakker (Pakke er «foo», ikke «foo.deb»)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Fjern pakker"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Fjern og rydd opp etter pakker"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Fjern alle automatisk ubrukte pakker"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Oppgradér utgave, les apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Følg «dselect» sine anbefalinger"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Sett opp bygge-forutsetninger for kildekodepakker"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Slett nedlastede arkivfiler"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Slett gamle nedlastede arkivfiler"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Se etter om det finnes brutte avhengigheter"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Last ned kildekode fra arkivene"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Last ned binærpakke til gjeldende katalog"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Last ned og vis endringsloggen for den oppgitte pakken"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Trenger en URL som argument"
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Du må angi minst en pakke du vil ha kildekoden til"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Nedlasting feilet"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec feilet for %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "Slå opp en SRV-oppføring (f.eks. _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "slå sammen filer, med automatisk utpakking"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Bruk: apt-extracttemplates fil1 [fil2 ...]\n"
+"\n"
+"apt-extracttemplates er et verktøy til å hente ut informasjon om "
+"innstillinger\n"
+"og maler fra debianpakker.\n"
+"\n"
+"Innstillinger:\n"
+" -h Denne hjelpeteksten\n"
+" -t Lag en midlertidig mappe\n"
+" -c=? Les denne innstillingsfila.\n"
+" -o=? Sett en vilkårlig innstilling, f.eks. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Bruk: apt-extracttemplates fil1 [fil2 ...]\n"
+"\n"
+"apt-extracttemplates er et verktøy til å hente ut informasjon om "
+"innstillinger\n"
+"og maler fra debianpakker.\n"
+"\n"
+"Innstillinger:\n"
+" -h Denne hjelpeteksten\n"
+" -t Lag en midlertidig mappe\n"
+" -c=? Les denne innstillingsfila.\n"
+" -o=? Sett en vilkårlig innstilling, f.eks. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "men er ikke installert"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s satt til manuell installasjon.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s satt til automatisk installasjon.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Følgende NYE pakker vil bli installert:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s er allerede nyeste versjon.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s er allerede nyeste versjon.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Klarte ikke kjøre dpkg. Er du root?"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s satt til manuell installasjon.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Klarte ikke å åpne %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Valgte %s for fjerning.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Valgte %s for installering.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Marker den angitte pakken som automatisk installert"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Sjekk om pakken «dpkg-dev» er installert.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Marker den angitte pakken som automatisk installert"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Marker en pakke som holdt tilbake"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Fjern markering som holdt tilbake for en pakke"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s satt til automatisk installasjon.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s satt til manuell installasjon.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Skriv listen med pakker som holdes tilbake"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Ukjent pakkeoppføring"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "list pakker basert på pakkenavn"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Leser pakkelister"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "vis pakkedetaljer"
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Låste pakker:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Låste pakker:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Ødelagte pakker"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s satt til manuell installasjon.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "oppgrader systemet ved å installere/oppgradere pakker"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "oppgrader systemet ved å fjerne/installere/oppgradere pakker"
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Leser tilstandsinformasjon"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Feil standardinnstilling!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Trykk «Enter» og fortsett"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Vil du slettet alle tidligere nedlastede .deb-filer?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Feil oppstod ved utpakkinga. Setter nå opp de installerte pakkene."
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "Det kan lede til fordobling av feil eller feil forårsaket av "
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "manglende forutsetninger. Det er greit, bare de nevnte feilene er"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "av betydning. Sett dem i stand dem og kjør [I]nstall igjen."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Fletter tilgjengelig informasjon"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Lista over pakkeutvidelser er for lang"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Feil ved lesing av katalogen %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lista over kildeutvidelser er for lang"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Feil ved skriving av topptekst til innholdsfila"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Det oppsto en feil ved lesing av %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Bruk: apt-ftparchive [innstillinger] kommando\n"
+"Kommandoer: packages binærsti [overstyringsfil [sti-prefiks]]\n"
+" sources kildesti [overstyringsfil [sti-prefiks]]\n"
+" contents sti\n"
+" release sti\n"
+" generate config [grupper]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive oppretter indeksfiler for debianarkiver. Mange ulike\n"
+"metoder er støttet - fra helautomatiske til funksjonelle\n"
+"erstatninger for dpkg-scanpackages og dpkg-scansources.\n"
+"\n"
+"apt-ftparchive oppretter «Packages»-filer fra et tre med debianpakker.\n"
+"«Packages»-fila inneholder alle kontrollfeltene fra hver pakke i tillegg "
+"til\n"
+"MD5-nøkkel og filstørrelse. Du kan bruke en overstyringsfil for å tvinge\n"
+"gjennom verdier for prioritet og kategori.\n"
+"\n"
+"apt-ftparchive kan på samme måte opprette kildefiler fra et tre\n"
+"med .dsc-filer. Du kan bruke en overstyringsfil med --source-override.\n"
+"\n"
+"Kommandoene «packages» og «sources» skal kjøres i rota av katalogtreet.\n"
+"«Binærsti» skal peke til toppkatalogen for det rekursive søket, og\n"
+"overstyringsfila skal inneholde innstillinger for overstyring.\n"
+"Sti-prefikset blir lagt til feltene for filnavn, dersom det er oppgitt. Her "
+"er\n"
+"et eksempel på bruk i debianarkivet:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Innstillinger:\n"
+" -h Vis denne hjelpeteksten.\n"
+" --md5 Styrer MD5-opprettelsen\n"
+" -s=? Overstyringsfil for kildekode.\n"
+" -q Stille.\n"
+" -d=? Velger om du vil bruke en mellomlagerdatabase.\n"
+" --no-delink Bruk avlusingsmodus med «delinking».\n"
+" --contents Styrer opprettelse av innholdsfila.\n"
+" -c=? Les denne oppsettsfila.\n"
+" -o=? Setter en vilkårlig innstilling"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Ingen utvalg passet"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Enkelte filer mangler i pakkegruppa «%s»"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Databasen er ødelagt. Filnavnet er endret til %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Databasen er gammel, forsøker å oppgradere %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"DB-formatet er ugyldig. Hvis du oppgraderte fra en eldre versjon av apt, "
+"fjern og så gjenopprett databasen."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Klarte ikke å åpne Databasefila %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Klarte ikke å lese lenken %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arkivet har ingen kontrollpost"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Klarte ikke å finne en peker"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Klarte ikke å tildele minne"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Ukjent komprimeringsalgoritme «%s»"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Komprimert utdata %s trenger et komprimeringssett"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Klarte ikke å opprette IPC-rør til underprosessen"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Klarte ikke å forgreine prosess"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Komprimer barneprosess"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Intern feil, klarte ikke å opprette %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Klarte ikke å kommunisere med underprosess/fil"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Klarte ikke å lese under utregning av MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Klarte ikke å åpne %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Ugyldig overstyring %s linje %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Klarte ikke å lese overstyringsfila %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Ugyldig overstyring %s linje %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Ugyldig overstyring %s linje %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Ugyldig overstyring %s linje %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: Klarte ikke å lese katalogen %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: Klarte ikke å få statusen på %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "F:"
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A:"
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "F: Det er feil ved fila"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Klarte ikke å slå opp %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Klarte ikke å finne fram i treet"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Klarte ikke å åpne %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Klarte ikke å lenke %s til %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink-grensa på %s B er nådd.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arkivet har ikke noe pakkefelt"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s har ingen overstyringsoppføring\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s-vedlikeholderen er %s, ikke %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s har ingen kildeoverstyringsoppføring\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s har ingen binæroverstyringsoppføring heller\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Venter på hoder"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP-tjeneren sendte et ugyldig svarhode"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Ødelagt hodelinje"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP-tjeneren sendte et ugyldig «Content-Length»-hode"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP-tjeneren sendte et ugyldig «Content-Range»-hode"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Denne HTTP-tjeneren har ødelagt støtte for område"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Ukjent datoformat"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Ødelagte hodedata"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Forbindelsen mislykkes"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Intern feil"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Klarer ikke å lese CD-databasen %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Bruk «apt-cdrom» for å gjøre denne CD-plata tilgjengelig for APT. Du kan "
+"ikke bruke «apt-get update» til å legge til nye CD-plater."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Feil CD-plate"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Klarer ikke å avmontere CD-plata i %s. Det kan hende plata fremdeles er i "
+"bruk."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disk ikke funnet."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Fant ikke fila"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Kobler til %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Kobler til %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Klarte ikke å opprette en sokkel for %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Klarte ikke å starte forbindelsen til %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Mislyktes"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Klarte ikke å koble til %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Klarte ikke å koble til %s:%s (%s), tidsavbrudd på forbindelsen"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Kobler til %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Klarte ikke å slå opp «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Midlertidig feil ved oppslag av «%s»"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Noe galt skjedde ved oppslag av «%s:%s» (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Noe galt skjedde ved oppslag av «%s:%s» (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Klarte ikke koble til %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Klarte ikke å få status"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Ugyldig adresse. Lokale adresser kan ikke starte med //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Logger inn"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Klarte ikke å fastslå navnet på motparten"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Klarte ikke å fastslå det lokale navnet"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Tjeneren nektet oss å kople til og sa: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER mislykkes, tjeneren sa: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS mislykkes, tjeneren sa: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"En mellomtjener er oppgitt, men ikke noe innloggingsskript. Feltet «Acquire::"
+"ftp::ProxyLogin» er tomt."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Kommandoen «%s» i innlogginsskriptet mislykkes, tjeneren sa: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE mislykkes, tjeneren sa: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Tidsavbrudd på forbindelsen"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Tjeneren lukket forbindelsen"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Et svar oversvømte bufferen."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protokollødeleggelse"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Klarte ikke å opprette en sokkel"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Klarte ikke å kople til datasokkelen, tidsavbrudd på forbindelsen"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Klarte ikke å koble til en passiv sokkel."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo klarte ikke å opprette en lyttesokkel"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Klarte ikke å binde til sokkel"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Klarte ikke å lytte til sokkel"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Klarte ikke å avgjøre sokkelnavnet"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Klarte ikke å sende PORT-kommandoen"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Ukjent adressefamilie %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT mislykkes, tjeneren sa: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Tidsavbrudd på tilkoblingen til datasokkelen"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Klarte ikke å godta tilkoblingen"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problem ved oppretting av nøkkel for fil"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Klarte ikke å hente fila, tjeneren sa «%s»"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Tidsavbrudd på datasokkelen"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Dataoverføringen mislykkes, tjeneren sa «%s»"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Spørring"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Klarte ikke å starte"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Minst en ugyldig signatur ble funnet."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "Intern feil: God signatur, men kunne bestemme nøkkelfingeravtrykk?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Klarte ikke kjøre «apt-key» for å verifisere signaturen (er gnupg "
+"installert?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Ukjent feil ved kjøring av apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "Signatur med nøkkel %s bruker svak oppsummeringsalgoritme (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "De følgende signaturene var ugyldige:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"De følgende signaturene kunne ikke verifiseres fordi den offentlige nøkkelen "
+"ikke er tilgjengelig:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Feil ved skriving til fila"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Feil ved lesing fra tjeneren. Forbindelsen ble lukket i andre enden"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Feil ved lesing fra tjeneren"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Feil ved skriving til fil"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Utvalget mislykkes"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Tidsavbrudd på forbindelsen"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Feil ved skriving til utfil"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Klarte ikke å sette endringstidspunkt"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Forbindelsen ble uventet stengt"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Tomme filer kan ikke være gyldige arkiver"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Ugyldig arkivmedlemshode %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Fjernet %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Pakkefila %s er ikke oppdatert."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Oversiktsfilene er ødelagte. Feltet «Filename:» mangler for pakken %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Ingen speilfil «%s» funnet"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Ingen speilfil «%s» funnet"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Ingen speilfil «%s» funnet"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Speil: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Åpner oppsettsfila %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Åpner %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Uinnfridde avhengighetsforhold - Prøv «--fix-broken»."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Du vil kanskje utføre «apt --fix-broken install» for å rette på disse:"
+
+#~ msgid "Failed to fetch %s %s\n"
+#~ msgstr "Klarte ikke å skaffe %s %s\n"
+
+#~ msgid "(not found)"
+#~ msgstr "(ikke funnet)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Pakke låst til: "
+
+#~ msgid "Invalid 'Valid-Until' entry in Release file %s"
+#~ msgstr "Ugyldig «Valid-Until»-oppføring i Release-fila %s"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Det er ingen offentlig nøkkel tilgjengelig for de følgende nøkkel-ID-"
+#~ "ene:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Katalogen %s er avledet"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr "Kravet %s for %s kan ikke oppfylles fordi pakken %s ikke finnes"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "Kravet %s for %s kan ikke oppfylles fordi pakken %s ikke finnes"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Klarte ikke å tilfredsstille %s avhengighet for %s: den installerte "
+#~ "pakken %s er for ny"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Kravet %s for %s kan ikke oppfylles fordi det ikke finnes noen "
+#~ "tilgjengelige versjoner av pakken %s som oppfyller versjonskravene"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "Kravet %s for %s kan ikke oppfylles fordi pakken %s ikke finnes"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Klarte ikke å tilfredsstille %s avhengighet for %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Klarte ikke å tilfredstille bygg-avhengighetene for %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problem ved oppheving av lenken til %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Klarte ikke å oppheve lenken %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Bruk: apt-cache [valg] kommando\n"
+#~ " apt-cache [valg] show pakke1 [pakke2 ...]\n"
+#~ "\n"
+#~ "apt-cache er et lavnivå-verktøy, som brukes til å håndtere APT sine "
+#~ "binære\n"
+#~ "lagerfiler, og spørre dem om informasjon.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Valg:\n"
+#~ " -h Denne hjelpeteksten\n"
+#~ " -p=? Pakkelageret.\n"
+#~ " -s=? Kildekodelageret.\n"
+#~ " -q Ikke vis framdrift.\n"
+#~ " -i Vis bare viktige avhengighetsforhold for kommandoen «unmet».\n"
+#~ " -c=? Les denne innstillingsfila.\n"
+#~ " -o=? Sett en vilkårlig innstilling, f.eks. -o dir::cache=/tmp\n"
+#~ "Les manualsidene apt-cache(8) og apt.conf(5) for mer informasjon.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Innstillinger:\n"
+#~ " -h Denne hjelpeteksten\n"
+#~ " -c=? Les denne innstillingsfila.\n"
+#~ " -o=? Sett en vilkårlig innstilling, f.eks. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Bruk: apt-sortpkgs [innstillinger] fil1 [fil2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs er et enkelt redskap til å sortere pakkefiler. "
+#~ "Innstillingen\n"
+#~ "-s brukes til å angi hvilken filtype det er.\n"
+#~ "\n"
+#~ "Innstillinger:\n"
+#~ " -h Denne hjelpeteksten\n"
+#~ " -s Bruk filsortering\n"
+#~ " -c=? Les denne innstillingsfila.\n"
+#~ " -o=? Sett en vilkårlig innstilling, f.eks. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Barneprosessen mislyktes"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Du må angi minst en pakke du vil ha kildekoden til"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Klarte ikke å opprette rør"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Klarte ikke å kjøre gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s for %s kompilert på %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Klarte ikke å opprette FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Feil på %lu i kildelista %s (fortolkning av nettadressen)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Feil på linje %lu i kildelista %s ([valg] ikke tolkbar)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Feil på linje %lu i kildelista %s ([valg] for kort)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Feil på linje %lu i kildelista %s ([%s] er ingen tilordning)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Feil på linje %lu i kildelista %s ([%s] har ingen nøkkel)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Feil på linje %lu i kildelista %s ([%s] nøkkel %s har ingen verdi)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Feil på linje %lu i kildelista %s (nettadresse)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Feil på linje %lu i kildelista %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Feil på %lu i kildelista %s (fortolkning av nettadressen)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Feil på %lu i kildelista %s (Absolutt dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Feil på %lu i kildelista %s (dist fortolking)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Fant ikke pakken %s %s ved behandling av filkrav"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Klarte ikke finne informasjon om %s - lista over kildekodepakker"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Samler inn filtilbud"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Klarer ikke å fortolke Release-fila %s"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Utgivers blokk %s inneholder ikke no fingeravtrykk"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Total plass for avhengighetsforhold/versjoner: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Du har ikke nok ledig plass i %s"
+
+#~ msgid "Done"
+#~ msgstr "Utført"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Ingen nøkkelring installert i %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Intern feil - «AllUpgrade» ødela noe"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s er ikke en gyldig debianpakke."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Bruker CD-ROM monteringspunkt %s\n"
+#~ "Monterer CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Klarte ikke rette %s med mmap og med filoperasjonbruk - programrettelsen "
+#~ "ser ut til å være korrupt."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Klarte ikke rette %s med mmap (men ingen mmap-spesifikk feil) - "
+#~ "programrettelsen ser ut til å være korrupt."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Ignorer utilgjengelig målutgave «%s» av pakke «%s»"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Dette er ikke et gyldig DEB-arkiv, det har ikke noe «%s»-, «%s»- eller "
+#~ "«%s»-medlem"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Feil MD5sum"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Klarte ikke å finne en fil for pakken %s. Det kan bety at du må ordne "
+#~ "denne pakken selv."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Klarte ikke skrive logg, openpty() feilet (/dev/pts ikke montert?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Hopper over den ikke-eksisterende fila %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Klarte ikke å fjerne %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Klarte ikke å opprette %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Klarte ikke å få statusen på %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Infokatalogen og den midlertidige katalogen må være på det samme "
+#~ "filsystemet"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Klarte ikke å bytte til adminkatalogen %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Intern feil ved henting av pakkenavn"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Les filliste"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Klarte ikke å åpne listefila «%sinfo/%s». Dersom du ikke kan gjenopprette "
+#~ "denne fila, bør du opprette den som en tom fil og installere den samme "
+#~ "versjonen av pakken på nytt."
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Klarte ikke å lese listefila %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Intern feil ved henting av node"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Klarte ikke å åpne avledningsfila %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Avledningsfila er ødelagt"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Ugyldig linje i avledningsfila: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Det oppsto en intern feil når avledningen ble lagt til"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Pakkelageret må klargjøres først"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Fant ikke «Package:»-linje, offset %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Ødelagt «ConfFile»-del i statusfila. Offset %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Feil ved tolking av MD5. Offset %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Klarte ikke å bytte til %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Fant ingen gyldig kontrollfil"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Klarte ikke å åpne rør for %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Lesefeil fra %s-prosessen"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Fikk en enkel hodelinje over %u tegn"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Merk: Dette er gjort automatisk og med hensikt av dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Ugyldig overstyring %s linje %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Ugyldig overstyring %s linje %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Ugyldig overstyring %s linje %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "dekomprimering"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "lese, har fremdeles %lu igjen å lese, men ingen igjen"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "skrive, har fremdeles %lu igjen å skrive, men klarte ikke å"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Klarte ikke gjennomføre umiddelbar konfigurasjon av allerede utpakket "
+#~ "«%s». Se man 5 apt.conf under APT::Immediate-Configure for detaljer."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Feil oppsto under behandling av %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Feil oppsto under behandling av %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Feil oppsto under behandling av %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Feil oppsto under behandling av %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Feil oppsto under behandling av %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Feil oppsto under behandling av %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Feil oppsto under behandling av %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Feil oppsto under behandling av %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Feil oppsto under behandling av %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Feil oppsto under behandling av %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Intern feil, fant ikke medlem"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Intern feil, gruppe «%s» har ingen installerbar pseudo-pakke"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Utgavefil har utgått, ignorerer %s (ugyldg siden %s)"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "E: Argumentliste fra Acquire::gpgv::Options for lang. Avbryter."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Feil oppsto under behandling av %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Feil på %u i kildelista %s (selgers id)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Klarte ikke å slå opp i nøkkelring; «%s»"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Kunne ikke åpne fila %s"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Behandler utløsere for %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "Dynamisk MMap gikk tom for minne"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Ettersom du bare bestilte et enkelt inngrep er det overveiende "
+#~ "sannsynlig\n"
+#~ "at pakken helt enkelt ikke kan installeres, og du bør fylle ut en "
+#~ "feilmelding."
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Linje %d er for lang (maks %lu)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Linje %d er for lang (maks %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Feil oppsto under behandling av %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Feil oppsto under behandling av %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Lagret merkelapp: %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr "Fant %i pakkeindekser, %i kildeindekser og %i signaturer\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Utvalget mislykkes"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Fildatoen er endret %s"
+
+#~ msgid "Reading file list"
+#~ msgstr "Leser filliste"
+
+#~ msgid "Could not execute "
+#~ msgstr "Får ikke låst %s"
+
+#~ msgid "Unknown vendor ID '%s' in line %u of source list %s"
+#~ msgstr "Ukjent selger ID «%s» i linje %u i kildelista %s"
diff --git a/po/ne.po b/po/ne.po
new file mode 100644
index 0000000..74aa754
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,4268 @@
+# translation of apt_po.po to Nepali
+# Mahesh Subedi <submanesh@hotmail.com>, 2006.
+# Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>, 2006.
+# Shiva Pokharel <pokharelshiva@hotmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2006-06-12 14:35+0545\n"
+"Last-Translator: Shiva Pokharel <pokharelshiva@hotmail.com>\n"
+"Language-Team: Nepali <info@mpp.org.np>\n"
+"Language: ne\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2;plural=(n!=1)\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "अवैध संग्रह हस्ताक्षर"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "संग्रह सदस्य हेडर पढ्दा त्रुटि "
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "अवैध संग्रह सदस्य हेडर"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "संग्रह अति छोटो छ"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "संग्रह हेडरहरू पढ्न असफल"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "संग्रह दूषित भयो"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "टार चेकसम असफल भयो, संग्रह दूषित भयो"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "अज्ञात टार हेडर प्रकार %u, सदस्य %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "यो वैध DEB संग्रह होइन, '%s' सदस्य हराइरहेछ"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "आन्तरीक त्रुटि, सदस्य तोक्न सक्दैन %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "पद वर्णन गर्न नसकिने नियन्त्रण फाइल"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "फाइल %s लेख्न असफल भयो"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "%s फाइल बन्द गर्न असफल भयो"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "बाटो %s अति लामो छ "
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "एक भन्दा बढी %s अनप्याक गरिदैछ"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "डाइरेक्ट्री %s फेरियो "
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "प्याकेज लक्षित मोडमा लेख्ने प्यास गर्दैछ %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "घुम्ती बाटो अति लामो छ"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr " %s स्थिर गर्न असफल"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr " %s मा %s पुन:नामकरण असफल भयो"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "डाइरेक्ट्री %s डाइरेक्ट्री विहिन द्वारा बदलिदैछ"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "यसको ह्यास बाल्टीमा नोड स्थित गर्न असफल भयो"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "बाटो अति लामो छ"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr " %s को लागि संस्करन बिना अधिलेखन प्याकेज मेल खायो"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "फाइल %s/%s ले प्याकेज %s मा एउटा अधिलेखन गर्दछ"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s पढ्न असफल भयो"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s स्थिर गर्न असक्षम भयो"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "अहिलेसम्म लिङ्क गरिएको नोडमा बोलाइएको ड्रपनोड"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "ह्यास तत्व तोक्न असफल भयो"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "मोड बाँड्न असफल भयो"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "थपमोडमा आन्तरिक त्रुटि"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "मोड अधिलेखन गर्ने प्यास गरिदै, %s -> %s र %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "मोडको डबल थप %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "नक्कली कनफिगगरेसन फाइल %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "डाइरेक्ट्री %s फेरियो "
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "डाइरेक्ट्री %s फेरियो "
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "डाइरेक्ट्री %s फेरियो "
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "डाइरेक्ट्री %s फेरियो "
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "डाइरेक्ट्री %s फेरियो "
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "लिङ्क पढ्न असफल %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Hash Sum mismatch"
+msgstr "MD5Sum मेल भएन"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "पुन:नामकरण असफल गरियो, %s (%s -> %s) ।"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "साइज मेल खाएन"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "अवैध सञ्चालन %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "त्रुटि लेख्नुहोस्"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "%s %s तान्न असफल भयो"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"%s प्याकेजको लागि मैले फाइल स्थित गर्न सकिन । यसको मतलब तपाईँले म्यानुल्ली यो प्याकेज "
+"निश्चित गर्नुहोस् । (arch हराएरहेको कारणले) "
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "%s (%s) मा जडान गरिदैछ"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "विधि ड्राइभर %s फेला पार्न सकिएन ।"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "जाँच्नुहोस् यदि 'dpkg-dev' प्याकेज स्थापना भयो ।\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "विधि %s सही रुपले सुरू हुन सकेन"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "कृपया डिस्क लेबुल: '%s' ड्राइभ '%s'मा घुसउनुहोस् र इन्टर थिच्नुहोस् । "
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "आंशिक सूचिहरुको डाइरेक्ट्री %s हराइरहेछ ।"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "आंशिक संग्रह डाइरेक्ट्री %s हराइरहेछ ।"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "सूचि डाइरेक्ट्री ताल्चा मार्न असफल"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "अनुक्रमणिका फाइल प्रकार '%s' समर्थित छैन"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "%li को %li फाइल पुन:प्राप्त गरिदैछ (%s बाँकी छ)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "%li को %li फाइल पुन:प्राप्त गरिदैछ"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "प्याकेज %s पुन:स्थापना हुन चाहन्छ, तर यसको लागि मैले एउटा संग्रह फेला पार्न सकिन ।"
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"त्रुटि, pkgProblemResolver:: समाधानले विच्छेदन सिर्जना गर्दछ, यो भइरहेको प्याकेजहरुको "
+"कारणले गर्दा हो ।"
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "समस्याहरू सुधार्न असक्षम भयो, तपाईँले प्याकेजहरु भाँच्नुभयो ।"
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "प्याकेज सूचीहरू वा वस्तुस्थिति फाइल पद वर्णन गर्न वा खोल्न सकिएन ।"
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "यो समस्याहरू सुधार्न तपाईँ apt-get अद्यावधिक चलाउन चाहनुहुन्छ"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "स्रोतहरुको सूचि पढ्न सकिएन ।"
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "संकलन त्रुटि रिजेक्स गर्नुहोस् - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr " '%s' को लागि '%s' निष्काशन फेला पार्न सकिएन"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr " '%s' को लागि '%s' संस्करण फेला पार्न सकिएन"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "प्याकेज %s तोक्न असक्षम भयो"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "लाइन %u स्रोत सूचि %s मा अति लामो छ ।"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy
+msgid "Unmounting CD-ROM...\n"
+msgstr "सिडी रोम अनमाउन्ट गरिदैछ..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "सिडी रोम माउन्ट विन्दु प्रयोग गरिदैछ %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "डिस्को लागि पर्खिदै...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "सिडी रोम माउन्ट गरिदै...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "परिचय गराइदैछ..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "लेबुल भण्डारण गर्नुहोस्:%s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "अनुक्रमणिका फाइलहरुको लागि डिस्क स्क्यान गरिदैछ...\n"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr " %i प्याकेज अनुक्रमणिकाहरू, %i स्रोत अनुक्रमणिका र %i हस्ताक्षरहरू फेला परे\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "Found label '%s'\n"
+msgstr "लेबुल भण्डारण गर्नुहोस्:%s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "त्यो वैध नाम होइन, फेरी प्रयास गर्नुहोस् ।\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"यो डिस्कको नाम:\n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "प्यकेज सूचिहरू प्रतिलिपी गरिदैछ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "नयाँ स्रोत सूचि लेखिदैछ\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "यो डिस्कको लागि स्रोत सूचि प्रविष्टिहरू:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "%s मा परिवर्तन गर्न असक्षम"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s स्थिर गर्न असक्षम भयो ।"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "माउन्ट बिन्दु %s स्थिर गर्न असक्षम"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "सिडी रोम स्थिर गर्न असफल भयो"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "आदेश लाइन विकल्प '%c' [%s बाट] ज्ञात छैन ।"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "आदेश लाइन विकल्प %s बुझिएन"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "आदेश लाइन विकल्प %s बूलियन छैन"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "विकल्प %s लाई एउटा तर्कको आवश्यकता पर्दछ ।"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "विकल्प %s: कनफिगरेसन वस्तु विशिष्टिकरण संग एउटा =<val> हुनुपर्छ ।"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "विकल्प %s लाई एउटा इन्टिजर तर्कको आवश्यक पर्दछ, '%s' होइन"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "विकल्प '%s' अति लामो छ"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "अर्थ %s बुझिएन, सत्य वा झूठो प्रयास गर्नुहोस् ।"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "अवैध सञ्चालन %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "नचिनिएको टाइप संक्षिप्त रुप: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "वाक्य संरचना त्रुटि %s:%u: बन्द कुनै नाम बिना सुरू हुन्छ ।"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "वाक्य संरचना त्रुटि %s:%u: वैरुप गरिएको ट्याग"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "वाक्य संरचना त्रुटि %s:%u: मान पछाडि अतिरिक्त जंक"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "वाक्य संरचना त्रुटि %s:%u: निर्देशनहरू माथिल्लो तहबाट मात्र हुन्छ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "वाक्य संरचना त्रुटि %s:%u: अति धेरै नेस्टेड समावेश गर्दछ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "वाक्य संरचना त्रुटि %s:%u: यहाँ बाट समावेश गरेको"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "वाक्य संरचना त्रुटि %s:%u: समर्थन नभएको डाइरेक्टिभ '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "वाक्य संरचना त्रुटि %s:%u: निर्देशनहरू माथिल्लो तहबाट मात्र हुन्छ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "वाक्य संरचना त्रुटि %s:%u:फाइलको अन्त्यमा अतिरिक्त जंक"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "फाइल अनलिङ्क गर्दा समस्या"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "ताल्चा मारिएको फाइल मात्र पढ्नको लागि ताल्चा मार्न प्रयोग गरिएको छैन %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "ताल्चा मारिएको फाइल खोल्न सकिएन %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "nfs माउन्ट गरिएको लक फाइलको लागि लक प्रयोग गरिएको छैन %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "ताल्चा प्राप्त गर्न सकिएन %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr " %s को लागि पर्खिरहेको तर यो त्यहाँ छैन"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "सहायक प्रक्रिया %s ले खण्डिकरण गल्ति प्राप्त भयो ।"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "सहायक प्रक्रिया %s ले खण्डिकरण गल्ति प्राप्त भयो ।"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "सहायक प्रक्रिया %s ले एउटा त्रुटि कोड फर्कायो (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "सहायक प्रक्रिया %s अनपेक्षित बन्द भयो"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "त्रुटि पढ्नुहोस्"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "त्रुटि लेख्नुहोस्"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "फाइल बन्द गर्दा समस्या"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "सहायक प्रक्रिया IPC सिर्जना गर्न असफल"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "सङ्कुचनकर्ता कार्यान्वयन गर्न असफल भयो"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "फाइल %s खोल्न सकिएन"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "%s को लागि पाइप खोल्न सकिएन"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "पड्नुहोस्, अहिले सम्म %lu पढ्न छ तर कुनै बाँकी छैन"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "लेख्नुहोस्, अहिले सम्म %lu लेख्न छ तर सकिदैन "
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "फाइल बन्द गर्दा समस्या"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "फाइल गुप्तिकरण गर्दा समस्या"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "फाइल गुप्तिकरण गर्दा समस्या"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "%s स्थिर गर्न असक्षम भयो"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr " %s मा लेख्न असक्षम"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "एउटा खाली फाइल mmap बनाउन सकिएन"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "%lu बाइटहरुको mmap बनाउन सकिएन"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "%s को लागि पाइप खोल्न सकिएन"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "%s खोल्न असफल"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "आह्वान गर्न असक्षम भयो"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "%lu बाइटहरुको mmap बनाउन सकिएन"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "फाइल %s लेख्न असफल भयो"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... त्रुटि!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... गरियो"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... गरियो"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "चयन %s फेला पार्न सकिएन"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "प्याकेज फाइल पद वर्णन गर्न असक्षम %s (१)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "द्रष्टब्य, %s को सट्टा %s चयन भइरहेछ\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "घुमाउरो फाइलमा अवैध लाइन:%s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "प्याकेज फाइल पद वर्णन गर्न असक्षम %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "सूचि डाइरेक्ट्री ताल्चा मार्न असफल"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "सूचि डाइरेक्ट्री ताल्चा मार्न असफल"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr " %s तयार गरिदैछ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr " %s कनफिगर गर्न तयार गरिदैछ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr " %s हटाउन तयार गरिदैछ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr " %s पूर्ण रुपले हटाउन तयार गरिदैछ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr " %s स्थापना भयो"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr " %s कनफिगर गरिदैछ"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Directory '%s' missing"
+msgstr "आंशिक सूचिहरुको डाइरेक्ट्री %s हराइरहेछ ।"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "फाइल %s खोल्न सकिएन"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr " %s अनप्याक गरिदैछ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr " %s स्थापना भयो"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr " %s हटाइदैछ"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr " %s पूर्ण रुपले हट्यो"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr " %s पूर्ण रुपले हट्यो"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr " %s मा लेख्न असक्षम"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "निर्भरता ट्री निर्माण गरिदैछ"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "उमेद्वार संस्करणहरू"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "निर्भरता सिर्जना"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "उपलब्ध सूचना गाँभिदैछ"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "%s खोल्न असफल"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "फाइल %s लेख्न असफल भयो"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i रेकर्डहरू लेखियो ।\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "हराइरहेको फाइल %i हरू संगै %i रेकर्डहरू लेख्नुहोस् ।\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "मेल नखाएका फाइल %i हरू संगै %i रेकर्डहरू लेख्नुहोस् ।\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "हराइरहेको फाइल %i हरू र मेल नखाएका फाइल %i हरू संगै %i रेकर्डहरू लेख्नुहोस् ।\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "MD5Sum मेल भएन"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "प्याकिङ्ग प्रणाली '%s' समर्थित छैन"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "उपयुक्त प्याकिङ्ग प्रणाली प्रकार निर्धारन गर्न असक्षम भयो"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "फाइल %s खोल्न सकिएन"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"द्वन्द/पुन-आधारित लूपको कारणले गर्दा स्थापना चलाउनको लागि अस्थायी रुपमा प्याकेज %s "
+"हटाउनु पर्नेछ । यो प्राय नराम्रो हो, तर यदि तपाईँ यो साँच्चै गर्न चाहनुहुन्छ भने, APT::"
+"Force-LoopBreak विकल्प सक्रिय गर्नुहोस् ।"
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "खाली प्याकेज क्यास"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "प्याकेज क्यास फाइल दूषित भयो "
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "प्याकेज क्यास फाइल एउटा अमिल्दो संस्करण हो"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "यो APT ले संस्करण प्रणालीलाई समर्थन गर्दैन '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "प्याकेज क्यास विभिन्न वास्तुकलाको लागि निर्माण भएको हो"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "प्याकेज क्यास फाइल दूषित भयो "
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "आधारित"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "पुन:आधारित"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "सुझाव दिन्छ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "द्वन्दहरू"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "सिफारिस गर्दछ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "बदल्छ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "वेकायमहरू"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "महत्वपूर्ण"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "आवश्यक"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "मानक"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "अतिरिक्त"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "वैकल्पिक"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "क्यास संग एउटा नमिल्दो संस्करण प्रणाली छ"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (pkg फेला पार्नुहोस् )"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "वाऊ, APT ले सक्षम गरेको प्याकेज नामहरुको नम्बरलाई तपाईँले उछिन्नुभयो । "
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "वाऊ, APT ले सक्षम गरेको संस्करणहरुको नम्बरलाई तपाईँले उछिन्नुभयो । "
+
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "वाऊ, APT ले सक्षम गरेको संस्करणहरुको नम्बरलाई तपाईँले उछिन्नुभयो । "
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "वाऊ, APT ले सक्षम गरेको निर्भरताहरुको नम्बरलाई तपाईँले उछिन्नुभयो । "
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "प्याकेज सूचिहरू पढिदैछ"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "स्रोत क्यास बचत गर्दा IO त्रुटि"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "अनुक्रमणिका फाइल प्रकार '%s' समर्थित छैन"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "प्राथमिकता फाइलमा अवैध रेकर्ड, कुनै प्याकेज हेडर छैन"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "पिन टाइप %s बुझ्न सकिएन "
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "पिनको लागि कुनै प्राथमिकता (वा शून्य) निर्दिष्ट छैन"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #१"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "वैरुप्य लाइन %u स्रोत सूचिमा %s (प्रकार)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "स्रोत सूची %s भित्र %u लाइनमा टाइप '%s' ज्ञात छैन"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "वैरुप्य लाइन %u स्रोत सूचिमा %s (प्रकार)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "स्रोत सूची %s भित्र %u लाइनमा टाइप '%s' ज्ञात छैन"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "तपाईँको स्रोत सूचिमा केही 'source' URIs राख्नुहोस्"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"केही अनुक्रमणिका फाइलहरू डाउनलोड गर्न असफल भयो, तिनीहरू उपेक्षित भए, वा सट्टामा पुरानो "
+"एउटा प्रयोग गरियो ।"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "स्तर वृद्धि गणना गरिदैछ"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "हान्नुहोस्:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "प्राप्त गर्नुहोस्:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%s (%sB/s) मा %sB मा तानियो\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [काम गरिरहेको]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"मेडिया परिवर्तन: कृपया डिस्क लेबुल ड्राइभ '%s' मा घुसाउनुहोस्\n"
+" '%s'\n"
+"र इन्टर थिच्नुहोस्\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "निर्भरताहरू सुधार गरिदैछ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr "असफल भयो ।"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "निर्भरताहरू सुधार गर्न असक्षम भयो"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "स्तर वृद्धि सेटलाई न्यूनतम गर्न असक्षम भयो"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr "काम भयो"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "यी सुधार गर्न तपाईँले 'apt --fix-broken install' चलाउन पर्छ ।"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"नभेटिएका निर्भरताहरू । प्याकेजहरू बिना 'apt --fix-broken install' प्रयास गर्नुहोस् "
+"( वा समाधान निर्दिष्ट गर्नुहोस्) ।"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "द्रष्टब्य, रिजेक्स '%s' को लागि %s चयन गरिदैछ\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "द्रष्टब्य, रिजेक्स '%s' को लागि %s चयन गरिदैछ\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "द्रष्टब्य, रिजेक्स '%s' को लागि %s चयन गरिदैछ\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "प्याकेज %s ...द्वारा उपलब्ध गराइएको अवास्तविक प्याकेज हो:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [स्थापना भयो]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "उमेद्वार संस्करणहरू"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "तपाईँले स्थापना गर्न स्पष्ट रुपमा एउटा चयन गर्नुहोस् ।"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"प्याकेज %s उपलब्ध छैन, तर अर्को प्याकेज द्वारा सिफारिस प्याकेज हो ।\n"
+"यसको मतलब प्याकेज हराइरहेको प्याकेज, बेकायम भयो\n"
+" अर्को स्रोतबाट मात्र उपलब्ध हुन्छ\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "जे भए पनि निम्न प्याकेजहरूले यसलाई बदल्छ:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "प्याकेज %s संग कुनै स्थापना उमेद्वार छैन"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "प्याकेज %s स्थापना भएन, त्यसैले हटेन\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "प्याकेज %s स्थापना भएन, त्यसैले हटेन\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "द्रष्टब्य, %s को सट्टा %s चयन भइरहेछ\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "APT संग सुपर काउ शक्तिहरू छ ।"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "कुनै प्याकेजहरू फेला परेन"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "चेतावनी: निम्न प्याकलेजहरू प्रणाणीकरण हुन सक्दैन! "
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "प्रमाणिकरण चेतावनी अधिलेखन भयो ।\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "केही प्याकेजहरू प्रमाणीकरण हुन सक्दैन"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid "Install these packages without verification?"
+msgstr "यी प्याकेजहरू रूजू बिना स्थापना गर्नुहुन्छ [y/N]? "
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "त्यहाँ समस्याहरू छन् र हुन्छलाई जोड नगरिकन -y को प्रयोग भयो"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr " %s मा खाली ठाऊँ निर्धारण गर्न सकिएन"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "तपाईँ संग %s मा पर्याप्त खाली ठाऊँ छैन ।"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "डाउनलोड डाइरेक्ट्री ताल्चा मार्न असक्षम"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"केही प्याकेजहरू स्थापना हुन सक्दैन । यसको मतलब तपाईँले\n"
+" एउटा असम्भव अवास्थाको अनुरोध गर्नु भएको छ वा यदि तपाईँले प्रयोग गर्नु भइरहेको केहि "
+"प्याकेजहरुको आवश्यकता पर्ने अस्थिर\n"
+" वितरण अहिले सम्म सिर्जना\n"
+" भएको छैन वा आवगमन विनानै सर्यो ।"
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "निम्न सूचनाले अवस्थालाई हल गर्न मद्दत गर्नेछ: "
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "भाँचिएका प्याकेजहरू"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"केही संग्रहहरू तान्न असक्षम भयो,apt-get अद्यावधिक चलिरहेछ वा हराइरहेको --fix-संगै प्रयास "
+"गर्नुहुन्छ ?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "आन्तरिक त्रुटि, स्थापना प्याकेजहरुलाई भाँचिएको प्याकेज भनिन्थ्यो!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "प्याकेजहरू हट्न चाहदैछन् तर हटाई अक्षम भइरहेछ ।"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "त्यहाँ समस्याहरू छन् र हुन्छलाई जोड नगरिकन -y को प्रयोग भयो"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "त्यहाँ समस्याहरू छन् र हुन्छलाई जोड नगरिकन -y को प्रयोग भयो"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "आन्तरिक त्रुटि, आदेश समाप्त भएको छैन"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "कस्तो नमिलेको.. साइजहरू मेल खाएन, apt@packages.debian.org इमेल गर्नुहोस्"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "संग्रहहरुको %sB/%sB प्राप्त गर्न आवश्यक ।\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "संग्रहहरुको %sB प्राप्त गर्न आवश्यक ।\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "अनप्याक गरिसके पछि थप डिस्क खाली ठाउँको %sB प्रयोग हुनेछ ।\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "%sB अनप्याक गरिसके पछि डिस्क खाली ठाउँ खाली हुनेछ ।\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "त्रिभियल मात्र निर्दिष्ट गरिएको छ तर यो त्रिभियल सञ्चालन होइन ।"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "हो,मैले भने जस्तै गर्नुहोस्!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"तपाईँले केही संभवत: हानिकारक काम गर्नुपर्छ ।\n"
+"निरन्तरता दिन '%s' वाक्यांशमा टाइप गर्नुहोस् \n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "परित्याग गर्नुहोस् ।"
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+#, fuzzy
+msgid "Do you want to continue?"
+msgstr "के तपाईँ निरन्तरता दिन चाहनुहुन्छ [Y/n]? "
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "केही फाइलहरू डाउनलोड गर्न असफल भयो"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "डाउनलोड समाप्त भयो र डाउनलोडमा मोड मात्रै छ"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "हराइरहेको --fix-र स्वाप भइरहेको मेडिया हाल समर्थित भइरहेको छैन"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "हराइरहेको प्याकेजहरू सुधार्न असक्षम भयो ।"
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "स्थापना परित्याग गरिदैछ ।"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "आन्तरिक त्रुटि,समस्या हलकर्ताले उत्तम गुण भाँच्यो "
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "निम्न नयाँ प्याकेजहरू स्थापना हुनेछन्:"
+msgstr[1] "निम्न नयाँ प्याकेजहरू स्थापना हुनेछन्:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "निम्न नयाँ प्याकेजहरू स्थापना हुनेछन्:"
+msgstr[1] "निम्न नयाँ प्याकेजहरू स्थापना हुनेछन्:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "निम्न अतिरिक्त प्याकेजहरू स्थापना हुनेछन्:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "सुझाव दिएका प्याकेजहरू:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "सिफारिस गरिएका प्याकेजहरू:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "%s फड्किदैछ, यो पहिल्यै स्थापना भयो र स्तरवृद्धि सेट भएको छैन ।\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "%s फड्किदैछ, यो पहिल्यै स्थापना भयो र स्तरवृद्धि सेट भएको छैन ।\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr " %s को पुन: स्थापना सम्भव छैन, यो डाउनलोड हुन सक्दैन ।\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s पहिल्यै नयाँ संस्करण हो ।\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "%s को लागि चयन भएको संस्करण %s (%s)\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "%s को लागि चयन भएको संस्करण %s (%s)\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [स्थापना भयो]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [स्थापना भयो]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [स्थापना भयो]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [स्थापना भयो]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "तर %s स्थापना भयो"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "तर यो स्थापनायोग्य छैन"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "तर यो अवास्तविक प्याकेज होइन"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "तर यो स्थापना हुन गइरहेको छैन"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "तर यो स्थापना भएन"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr "वा"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "निम्न प्याकेजहरुले निर्भरताहरू भेटेनन्:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "निम्न नयाँ प्याकेजहरू स्थापना हुनेछन्:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "निम्न प्याकेजहरू हटाइनेछन्:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "निम्न प्याकेजहरू पछाडि राखिनेछन्:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "निम्न प्याकेजहरू स्तर वृद्धि हुनेछन्:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "निम्न प्याकेजहरू स्तरकम गरिनेछन्:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "निम्न भइरहेको प्याकेजहरू परिवर्तन हुनेछैन:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (%s कारणले)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"चेतावनी: निम्न आवश्यक प्याकेजहरू हटाइनेछन् ।\n"
+"तपाईँ के गरिरहेको यकिन नभएसम्म यो काम गरिने छैन!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu स्तर वृद्धि गरियो, %lu नयाँ स्थापना भयो, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu पुन: स्थापना गरियो, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu स्तर कम गरियो, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu हटाउन र %lu स्तर वृद्धि गरिएन ।\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu पूर्णरुपले स्थापना भएन र हटाइएन ।\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "तपाईँले एउटा वास्तविक बान्की दिनुपर्छ"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "प्याकेज फाइलहरू:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "क्यास sync भन्दा बाहिर छ, प्याकेज फाइल x-ref गर्न सक्दैन"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "पिन गरिएका प्याकेजहरू:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " स्थापना भयो:"
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " उमेद्वार:"
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(कुनै पनि होइन)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " संस्करण तालिका:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "स्रोत प्याकेज सूची %s स्थिर गर्न सकिएन "
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "को लागि स्रोत तान्न कम्तिमा एउटा प्याकेज निर्दिष्ट गर्नुपर्छ"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "%s को लागि स्रोत प्याकेज फेला पार्न असफल भयो"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "पहिल्यै डाउनलोड भएका फाइलहरु फड्काइदैछ '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "स्रोत संग्रहहरुको %sB/%sB प्राप्त गर्न आवश्यक छ ।\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "स्रोत संग्रहहरुको %sB प्राप्त गर्न आवश्यक छ ।\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "स्रोत फड्काउनुहोस् %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "केही संग्रह फड्काउन असफल भयो ।"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr " %s मा पहिल्यै अनप्याक गरिएका स्रोतको अनप्याक फड्काइदैछ\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "अनप्याक आदेश '%s' असफल भयो ।\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "जाँच्नुहोस् यदि 'dpkg-dev' प्याकेज स्थापना भयो ।\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "निर्माण आदेश '%s' असफल भयो ।\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "%s को लागि निर्माण-निर्भरता सूचना प्राप्त गर्न असक्षम भयो"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s कुनै निर्माणमा आधारित हुदैन ।\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "को लागि builddeps जाँच्न कम्तिमा एउटा प्याकेज निर्दष्ट गर्नुपर्छ"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "निर्माण निर्भरताहरू प्रक्रिया गर्न असफल"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "निर्माण निर्भरताहरू प्रक्रिया गर्न असफल"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr " %s मा %s पुन:नामकरण असफल भयो"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "प्याकेज %s संस्करण %s संग एउटा नभेटिएको dep छ:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "अद्यावधिक आदेशले कुनै तर्कहरू लिदैन"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "अद्यावधिक आदेशले कुनै तर्कहरू लिदैन"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "कूल प्याकेज नामहरू :"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "कूल प्याकेज नामहरू :"
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " सामान्य प्याकेजहरू:"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr "शुद्ध अवास्तविक प्याकेजहरू:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " एकल अवास्तविक प्याकेजहरू:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " मिश्रित अवास्तविक प्याकेजहरू:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " हराइरहेको:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "कूल भिन्न संस्करणहरू:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "कूल भिन्न संस्करणहरू:"
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "कूल निर्भरताहरू:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "जम्मा ver/file सम्बन्धहरू: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "जम्मा ver/file सम्बन्धहरू: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "कूल उपलब्ध मानचित्रणहरू:"
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "कूल विश्वव्यापी स्ट्रिङ्गहरू:"
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "कूल शिथिल खाली ठाऊँ:"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "को लागि कूल खाली ठाऊँ लेखांकन:"
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "स्रोत रेकर्डहरू देखाउनुहोस्"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "regex बान्कीको लागि प्याकेज सूचि खोजी गर्नुहोस्"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "प्याकेजको लागि कच्चा निर्भरता सूचना देखाउनुहोस्"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "प्याकेजको लागि उल्टो निर्भरता सूचना देखाउनुहोस्"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "प्याकेजको लागि पढ्नयोग्य रेकर्ड देखाउनुहोस्"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "सबै प्याकेजहरुको नामहरू सूचिबद्ध गर्नुहोस्"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "नीति सेटिङ्गहरू देखाउनुहोस्"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "कृपया यो डिस्कको लागि नाम उपलब्ध गराउनुहोस्, जस्तै 'Debian 2.1r1 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "कृपया ड्राइभमा डिस्क घुसाउनुहोस् र इन्टर थिच्नुहोस्"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr " %s मा %s पुन:नामकरण असफल भयो"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "तपाईँको सेटमा बाँकी सि डि हरुको लागि यो प्रक्रिया फेरी गर्नुहोस् । "
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "तर्कहरू जोडामा छैन"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"उपयग: apt-config [विकल्पहरू] आदेश\n"
+"\n"
+" APT कनफिग फाइल पढ्नको लागि apt-config साधारण उपकरण हो\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"उपयोग: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+" apt-extracttemplates डवियन प्याकेजहरुबाट कनफिगरेसन र टेम्प्लेट सूचना झिक्ने उपकरण हो\n"
+"\n"
+"\n"
+"विकल्पहरू:\n"
+" -h यो मद्दत पाठ\n"
+" -t टेम्प्लेट डाइरेक्ट्री सेट गर्नुहोस्\n"
+" -c=? यो कनफिगरेसन फाइल पढ्नुहोस्\n"
+" -o=? एउटा स्वेच्छाचारी कनफिगरेसन विकल्प सेट गर्नुहोस्, जस्तै -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr " debconf संस्करण प्राप्त गर्न सकिएन । के debconf स्थापना भयो ? "
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "प्याकेज फेला पार्न सकिएन %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "आन्तरिक त्रुटि,समस्या हलकर्ताले उत्तम गुण भाँच्यो "
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "समर्थित मोड्युलहरू:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"उपयोग: apt-get [विकल्पहरू] आदेश\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get डाउनलोड गर्न र प्याकेजहरू स्थापना गर्नको लागि साधारण आदेश लाइन इन्टरफेस हो ।\n"
+"बारम्बार प्रयोग भइरहने आदेशहरू अद्यावधिक र स्थापना हुन् ।\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "जहरुको नयाँ सूचिहरू पुन:प्राप्त गर्नुहोस्"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "टा स्तरवृद्धि सम्पादन गर्नुहोस्"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "प्याकेजहरू स्थापना गर्नुहोस् (pkg libc6 हो libc6.deb होइन)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "प्याकेजहरू स्थापना गर्नुहोस् (pkg libc6 हो libc6.deb होइन)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "स्तरवृद्धि वितरण गर्नुहोस्, apt-get(8) हेर्नुहोस्"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "dselect चयनहरू पछ्याउनुहोस्"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "स्रोत प्याकेजहरुको लागि निर्माण-निर्भरताहरू कनफिगर गर्नुहोस्"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "को लागि स्रोत तान्न कम्तिमा एउटा प्याकेज निर्दिष्ट गर्नुपर्छ"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"उपयोग: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+" apt-extracttemplates डवियन प्याकेजहरुबाट कनफिगरेसन र टेम्प्लेट सूचना झिक्ने उपकरण हो\n"
+"\n"
+"\n"
+"विकल्पहरू:\n"
+" -h यो मद्दत पाठ\n"
+" -t टेम्प्लेट डाइरेक्ट्री सेट गर्नुहोस्\n"
+" -c=? यो कनफिगरेसन फाइल पढ्नुहोस्\n"
+" -o=? एउटा स्वेच्छाचारी कनफिगरेसन विकल्प सेट गर्नुहोस्, जस्तै -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"उपयोग: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+" apt-extracttemplates डवियन प्याकेजहरुबाट कनफिगरेसन र टेम्प्लेट सूचना झिक्ने उपकरण हो\n"
+"\n"
+"\n"
+"विकल्पहरू:\n"
+" -h यो मद्दत पाठ\n"
+" -t टेम्प्लेट डाइरेक्ट्री सेट गर्नुहोस्\n"
+" -c=? यो कनफिगरेसन फाइल पढ्नुहोस्\n"
+" -o=? एउटा स्वेच्छाचारी कनफिगरेसन विकल्प सेट गर्नुहोस्, जस्तै -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "तर यो स्थापना भएन"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "निम्न नयाँ प्याकेजहरू स्थापना हुनेछन्:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s पहिल्यै नयाँ संस्करण हो ।\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s पहिल्यै नयाँ संस्करण हो ।\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "%s खोल्न असफल"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "जाँच्नुहोस् यदि 'dpkg-dev' प्याकेज स्थापना भयो ।\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "अज्ञात प्याकेज रेकर्ड!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "प्याकेज सूचिहरू पढिदैछ"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "पिन गरिएका प्याकेजहरू:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "पिन गरिएका प्याकेजहरू:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "भाँचिएका प्याकेजहरू"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "तर %s स्थापना हुनुपर्यो"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "उपलब्ध सूचना गाँभिदैछ"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "खराब पूर्वनिर्धारण सेटिङ्ग!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "निरन्तरता दिन इन्टर थिच्नुहोस् ।"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "अनप्याक गर्दा केही त्रुटिहरू देखा पर्यो । म कनफिगर गर्न गइरहेको छु"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "स्थापना भएको प्याकेजहरू । यसले नक्कली त्रुटिहरुमा नतिजा गर्न सक्छ"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "वा त्रुटि हरटाइरहेको निर्भरताहरुले गरेको हो । यो ठीक छ, मात्र त्रुटिहरू"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"दिएको संदेशहरू महत्वपूर्ण छ । कृपया तिनीहरू निश्चित गर्नुहोस् र चलाउनुहोस् [I]फेरी स्थापना "
+"गर्नुहोस्"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "उपलब्ध सूचना गाँभिदैछ"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "प्याकेज विस्तार सूचि अति लामो छ"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "डाइरेक्ट्री %s प्रक्रिया गर्दा त्रुटि"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "स्रोत विस्तार सूचि अति लामो छ"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "सामाग्री फाइलहरुमा हेडर लेख्दा त्रुटि"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "सामग्री %sप्रक्रिया गर्दा त्रुटि"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"उपयोग: apt-ftparchive [विकल्पहरू] आदेश\n"
+"आदेशहरू: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive ले डेवियन संग्रहहरुको लागि अनुक्रमणिका फाइलहरू सिर्जना गर्दछ । यसले "
+"समर्थन गर्दछ\n"
+"dpkg-scanpackages र dpkg-scansources को लागि कार्यात्मक प्रतिस्थापनमा पुरै "
+"स्वचालितबाट सिर्जनाको धेरै शैलीहरू\n"
+" \n"
+"\n"
+"apt-ftparchive ले debs को ट्रीबाट प्याकेज फाइलहरू सिर्जना गर्दछ । प्याकेज\n"
+"फाइलहरुले प्रत्येक प्याकेजबाट सबै नियन्त्रण फाँटहरुको सामग्रीहरू साथ साथै MD5 hash र "
+"filesize समावेश गर्दछ ।\n"
+"एउटा अधिलेखन फाइल\n"
+"प्राथमिकता र सेक्सनको मान जोड गर्न समर्थित हुन्छ ।\n"
+"\n"
+"त्यस्तै गरी apt-ftparchive ले .dscs को ट्रीबाट स्रोत फाइलहरू सिर्जना गर्दछ ।\n"
+"स्रोत--अधिलेखन--विकल्प src अधीलेखन फाइल निर्दिष्ट गर्न प्रयोग गर्न सकिन्छ\n"
+"\n"
+"'packages' and 'sources' आदेश ट्रीको मूलमा चलाउन सकिन्छ ।\n"
+" विनारी मार्ग फेरी हुने खोजीको विन्दुमा आधारित हुन्छ र \n"
+"अधिलेखन फाइलले अधिलेखन झण्डाहरू समाविष्ट गर्दछ । यदि उपस्थित छ भने बाटो उपसर्ग\n"
+"फाइलनाम फाँटहरुमा थपिन्छ । उदाहरणको लागि \n"
+"डेवियन संग्रहबाट उपयोग:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"विकल्पहरू:\n"
+" -h यो मद्दत पाठ\n"
+" --md5 नियन्त्रण MD5 सिर्जना\n"
+" -s=? स्रोत अधिलेखन फाइल\n"
+" -q बन्द गर्नुहोस्\n"
+" -d=? वैकल्पिक क्यासिङ डेटाबेस चयन गर्नुहोस्\n"
+" --no-delink delinking डिबग मोड सक्षम गर्नुहोस्\n"
+" --सामग्रीहरू सामग्री फाइल सिर्जना नियन्त्रण गर्नुहोस्\n"
+" -c=? यो कनफिगरेसन फाइल पढ्नुहोस्\n"
+" -o=? एउटा स्वेच्छाचारी कनफिगरेसन विकल्प सेट गर्नुहोस्"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "कुनै चयनहरू मेल खाएन"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "केही फाइलहरू प्याकेज फाइल समूह `%s' मा हराइरहेको छ"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB दूषित थियो, फाइल %s.पुरानो मा पुन:नामकरण गर्नुहोस्"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB पुरानो छ, %s स्तरवृद्धि गर्न प्रयास गरिदैछ"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "DB फाइल %s असक्षम भयो: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "लिङ्क पढ्न असफल %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "संग्रह संग नियन्त्रण रेकर्ड छैन"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "कर्सर प्राप्त गर्न असक्षम भयो"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - स्मृति बाँडफाँड गर्न असफल भयो"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "अज्ञात सङ्कुचन अल्गोरिद्म '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "सङ्कुचन गरिएको निर्गात %s लाई सङ्कुचन सेटको आवश्यक्ता पर्दछ"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "सहायक प्रक्रियामा IPC पाइप सिर्जना गर्न असफल"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "काँटा गर्न असफल"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "सङ्कुचन शाखा"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "आन्तरीक त्रुटि, %s सिर्जना गर्न असफल"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "सहायक प्रक्रिया/फाइलमा IO असफल भयो"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "MD5 गणना गर्दा पढ्न असफल भयो"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s खोल्न असफल"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #१"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "अधिलेखन फाइल पढ्न असफल %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #१"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #२"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #३"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: डाइरेक्ट्री %s पढ्न असक्षम\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: %s स्थिर गर्न असक्षम\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: फाइलमा त्रुटिहरू लागू गर्नुहोस्"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s हल गर्न असफल भयो"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "ट्री हिडाईँ असफल भयो"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s खोल्न असफल"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** %s मा %s लिङ्क असफल भयो"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr "यस %sB हिटको डि लिङ्क सिमा।\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "संग्रह संग कुनै प्याकेज फाँट छैन"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s संग कुनै अधिलेखन प्रविष्टि छैन\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s संभारकर्ता %s हो %s होइन\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s संग कुनै अधिलेखन प्रविष्टि छैन\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s संग कुनै अधिलेखन प्रविष्टि छैन\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "हेडरहरुको लागि पर्खिदैछ"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP सर्भरले अवैध जवाफ हेडर पठायो"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "खराब हेडर लाइन"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP सर्भरले अवैध सामग्री-लम्बाई हेडर पठायो"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP सर्भरले अवैध सामग्री-दायरा हेडर पठायो"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "HTTP सर्भर संग भाँचिएको दायरा समर्थन छ"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "अज्ञात मिति ढाँचा"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "खराब हेडर डेटा"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "जडान असफल भयो"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "आन्तरिक त्रुटि"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "सिडी रोम डेटाबेस पढ्न असक्षम %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"कृपया APT ले यो सिडी रोमलाई चिन्नको लागि apt-cdrom प्रयोग गर्नुहोस् । apt-get "
+"अद्यावधिक नयाँ सिडी रोमहरू थप्नको लागि प्रयोग गरिदैन"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "गलत सिडी रोम"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "%s मा सिडी रोम अनमाउन्ट गर्न असक्षम भयो, यो अहिले प्रयोगमा हुन सक्छ ।"
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "डिस्क फेला परेन ।"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "फाइल फेला परेन "
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "%s (%s) मा जडान गरिदैछ"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "%s (%s) मा जडान गरिदैछ"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "%s (f=%u t=%u p=%u) को लागि सकेट सिर्जना गर्न सकिएन"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr " %s:%s (%s) मा जडान सुरुवात गर्न सकेन"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "असफल भयो"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr " %s:%s (%s) मा जडान गर्न सकिएन ।"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "%s:%s (%s) मा जडान गर्न सकिएन, जडान समय सकियो"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "%s मा जडान गरिदैछ"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "'%s' हल गर्न सकिएन"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "'%s' हल गर्दा अस्थायी असफल"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr " '%s:%s' (%i) हल गर्दा केही दुष्ट घट्यो"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr " '%s:%s' (%i) हल गर्दा केही दुष्ट घट्यो"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "%s %s मा जडान गर्न असफल भयो:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "स्थिर गर्न असफल भयो"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "अवैध URl, स्थानिय URIS // संग सुरू हुन सक्दैन"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "लगइन भइरहेछ"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "समान नाम निर्धारण गर्न असक्षम भयो"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "स्थानिय नाम निर्धारण गर्न असक्षम भयो"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "सर्भरले जडान अस्वीकार गर्यो र भन्यो: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "प्रयोगकर्ता असफल भयो, सर्भरले भन्यो: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "पास असफल भयो, सर्भरले भन्यो: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"प्रोक्सी सर्भर निर्दिष्ट गरियो तर कुनै स्क्रिफ्ट लगइन भएन, Acquire::ftp::ProxyLogin "
+"खाली छ ।"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "लगइन स्क्रिफ्ट आदेश '%s' असफल भयो, सर्भरले भन्यो: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "टाइप असफल भयो: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "जडान समय सकियो"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "सर्भरले जडान बन्द गर्यो"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "एउटा प्रतिक्रियाले बफर अधिप्रवाह गर्यो"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "प्रोटोकल दूषित"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "एउटा सकेट सिर्जना गर्न सकेन"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "डेटा सकेट जडान गर्न सकिएन, जडान समय सकियो"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "निस्क्रिय सकेट जडान गर्न सकिएन"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo सुन्ने सकेट प्राप्त गर्न असक्षम भयो"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "सकेट बाँध्न सकिएन"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "सकेटमा सुन्न सकिएन"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "सकेट नाम निर्धारण गर्न सकिएन"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "पोर्ट आदेश पठाउन असक्षम भयो"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "अज्ञात ठेगाना परिवार %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT असफल भयो, सर्भरले भन्यो: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "डेटा सकेटको जडान समय सकियो"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "जडान स्वीकार गर्न असक्षम भयो"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "समस्या द्रुतान्वेषण फाइल"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "फाइल तान्न असक्षम भयो, सर्भरले भन्यो '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "डेटा सकेट समय सकियो"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "डेटा स्थान्तरण असफल भयो, सर्भरले भन्यो '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "क्वेरी"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "आह्वान गर्न असक्षम भयो"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "कम्तिमा एउटा अवैध हस्ताक्षर विरोध भयो ।"
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "आन्तरिक त्रुटि: असल हस्ताक्षर, तर कुञ्जी औठाछाप निर्धारण गर्न सकिएन?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr "हस्ताक्षर रूजू गर्न '%s' कार्यन्वयन गर्न सकिएन (के gnupg स्थापना भयो?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "apt-key कार्यन्वयन गर्दा अज्ञात त्रुटि"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "निम्न हस्ताक्षरहरू अवैध छन्:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "निम्न हस्ताक्षरहरू रूजू हुन सक्दैन किन भने सार्वजनिक कुञ्जी उपलब्ध छैन:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "फाइलमा त्रुटि लेखिदैछ"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "सर्भरबाट त्रुटि पढिदैछ । दूर गन्तब्य बन्द जडान"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "सर्भरबाट त्रुटि पढिदैछ"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "फाइलमा त्रुटि लेखिदैछ"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "असफल चयन गर्नुहोस्"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "जडान समय सकियो"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "निर्गात फाइलमा त्रुटि लेखिदैछ"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "परिमार्जन समय सेट असफल भयो"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "जडान असमायिक बन्द भयो"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "अवैध संग्रह सदस्य हेडर"
+
+#~ msgid "Removed %s"
+#~ msgstr " %s हट्यो"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "प्याकेज फाइल %s sync भन्दा बाहिर छ ।"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "प्याकेज अनुक्रमणिका फाइलहरू दूषित भए । प्याकेज %s को लागि कुनै फाइलनाम: फाँट छैन ।"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "फाइल %s खोल्न सकिएन"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "फाइल %s खोल्न सकिएन"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "कनफिगरेसन फाइल खोलिदैछ %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s खोलिदैछ"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "नभेटिएका निर्भरताहरू । --fix-broken प्रयोग गरेर प्रयास गर्नुहोस् ।"
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "तपाईँ यसलाई सुधार गर्न 'apt --fix-broken install' चलाउन चाहनुहुन्छ:"
+
+#~ msgid "(not found)"
+#~ msgstr "(फेला परेन)"
+
+#~ msgid " Package pin: "
+#~ msgstr "प्याकेज पिन:"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "निम्न कुञ्जी IDs को लागि कुनै सार्वजनिक कुञ्जी उपलब्ध छैन:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "डाइरेक्ट्री %s फेरियो "
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr "%s को लागि %s निर्भरता सन्तुष्ट हुन सकेन किनभने प्याकेज %s फेला पार्न सकिएन"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "%s को लागि %s निर्भरता सन्तुष्ट हुन सकेन किनभने प्याकेज %s फेला पार्न सकिएन"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "%s को लागि %s निर्भरता सन्तुष्ट पार्न असफल भयो: स्थापित प्याकेज %s अति नयाँ छ"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%sको लागि %s निर्भरता सन्तुष्ट हुन सकेन किन भने प्याकेज %s को कुनै उपलब्ध संस्करणले "
+#~ "संस्करण आवश्यकताहरुलाई सन्तुष्ट पार्न सकेन "
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "%s को लागि %s निर्भरता सन्तुष्ट हुन सकेन किनभने प्याकेज %s फेला पार्न सकिएन"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "%s को लागि %s निर्भरता सन्तुष्ट गर्न असफल: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "%s को लागि निर्माण निर्भरताहरू सन्तुष्ट गर्न सकिएन । "
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "समस्या अनलिङ्क भइरहेछ %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "अनलिङ्क गर्न असफल %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "उपयोग: apt-cache [विकल्पहरू] आदेश\n"
+#~ " apt-cache [विकल्पहरू] फाइल १ थप्नुहोस् [फाइल २ ...]\n"
+#~ " apt-cache [विकल्पहरू] pkg pkg1 देखाउनुहोस् [pkg2 ...]\n"
+#~ " apt-cache [विकल्पहरू] src pkg1 देखाउनुहोस् [pkg2 ...]\n"
+#~ "\n"
+#~ "तिनीहरुबाट APT's बिनारी क्यास फाइलहरू, र क्वेरी सूचना मिलाउन प्रयोग गरिने apt-"
+#~ "cache कम-स्तरको उपकरण हो\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "विकल्पहरू:\n"
+#~ " -h यो मद्दत पाठ ।\n"
+#~ " -p=? प्याकेज क्यास ।\n"
+#~ " -s=? स्रोत क्यास ।\n"
+#~ " -q प्रगति सूचक अक्षम गर्नुहोस् ।\n"
+#~ " -i नभेटिएको आदेशको लागि महत्वपूर्ण deps देखाउनुहोस् ।\n"
+#~ " -c=? यो कनफिगरेसन फाइल पढ्नुहोस्\n"
+#~ " -o=? एउटा स्वेच्छाचारी कनफिगरेसन फाइल सेट गर्नुहोस्, जस्तै -o dir::cache=/tmp\n"
+#~ "धेरै जानकारीकोप लागि apt-cache(8) र apt.conf(5) म्यानुल पृष्टहरू हेर्नुहोस् ।\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "विकल्पहरू:\n"
+#~ " -h यो मद्दत पाठ ।\n"
+#~ " -c=? यो कनफिगरेसन फाइल पढ्नुहोस्\n"
+#~ " -o=? एउटा स्वेच्छाचारी कनफिगरेसन विकल्प सेट गर्नुहोस्, जस्तै -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "उपयोग: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs प्याकेज फाइलहरू क्रमबद्ध गर्ने साधारण उपकरण हो । -s विकल्प कस्तो "
+#~ "खालको फाइल हो भनी इंकित गर्न प्रयोग गरिन्छ ।\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -h यो मद्दत पाठ\n"
+#~ " -s क्रमबद्ध स्रोत फाइल प्रयोग गर्नुहोस्\n"
+#~ " -c=? यो कनफिगरेसन फाइल पढ्नुहोस्\n"
+#~ " -o=? एउटा स्वेच्छाचारी कनफिगरेसन विकल्प सेट गर्नुहोस्, जस्तै -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "शाखा प्रक्रिया असफल भयो"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "को लागि स्रोत तान्न कम्तिमा एउटा प्याकेज निर्दिष्ट गर्नुपर्छ"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "पाइपहरू सिर्जना गर्न असफल"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "gzip कार्यन्वयन गर्न असफल"
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s को लागि %s %s, %s %s मा कम्पाएल गरिएको छ\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "FILE* सिर्जना गर्न असफल"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (URI पद वर्णन)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (dist पद वर्णन )"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (dist पद वर्णन )"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (dist पद वर्णन )"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (dist पद वर्णन )"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (URI पद वर्णन)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (पूर्ण dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "वैरुप्य लाइन %lu स्रोत सूचिमा %s (dist पद वर्णन )"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "फाइल निर्भरताहरू प्रक्रिया गर्दा प्याकेज %s %s फेला परेन"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "स्रोत प्याकेज सूची %s स्थिर गर्न सकिएन "
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "फाइल उपलब्धताहरू संकलन गरिदैछ"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "प्याकेज फाइल पद वर्णन गर्न असक्षम %s (१)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "बिक्रता ब्ल्क %s ले कुनै औठाछाप समाविष्ट गर्दैन"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "कूल निर्भरता संस्करण खाली ठाऊँ:"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "तपाईँ संग %s मा पर्याप्त खाली ठाऊँ छैन"
+
+#~ msgid "Done"
+#~ msgstr "काम भयो"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "स्थापना परित्याग गरिदैछ ।"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "आन्तरिक त्रुटि,सबै स्तरवृद्धिले उत्तम गुण नष्ट गर्दछ"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s वैध DEB प्याकेज होइन"
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "सिडी रोम माउन्ट विन्दु प्रयोग गरिदैछ %s\n"
+#~ "सिडी रोम माउन्ट गरिदैछ\n"
+
+#, fuzzy
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "यो वैध DEB संग्रह होइन, यो संग '%s' वा '%s' सदस्य छैन"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum मेल भएन"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "%s प्याकेजको लागि मैले फाइल स्थित गर्न सकिन । यसको मतलब तपाईँले म्यानुल्ली यो प्याकेज "
+#~ "निश्चित गर्नुहोस् ।"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "कनफिगरेसन फाइल खोलिदैछ %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "%s लाई फेरी सार्न असफल भयो"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "%s सिर्जना गर्न असफल भयो"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "%sinfo स्थिर गर्न असफल भयो"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "सूचना र टेम्प डाइरेक्ट्रीहरू एउटै फाइल प्रणालीमा हुनपर्छ"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "प्रशासनिक डाइरेक्ट्री %sinfo मा परिवर्तन गर्न असफल भयो"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "प्याकेज नाम प्राप्त गर्दा आन्तरिक त्रुटि"
+
+#~ msgid "Reading file listing"
+#~ msgstr "फाइल सूचि पढिदैछ"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "सूचि फाइल '%sinfo/%s' खोल्न असफल भयो । यदि तपाईँ यो फाइल पुन:भण्डारण गर्नु "
+#~ "सक्नुहुन्न भने यसलाई खाली गर्नुहोस् र तुरुन्तै प्याकेजको उही संस्करण पुन-स्थापना गर्नुहोस् !"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "सूचि फाइल %sinfo/%s पढ्न असफल भयो"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "नोड प्राप्त गर्दा आन्तरिक त्रुटि"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "घुमाउरो फाइल %sdiversions खोल्न असफल भयो"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "घुमाउरो फाइल दूषित भयो"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "घुमाउरो फाइलमा अवैध लाइन:%s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "आन्तरिक त्रुटिले मोड थपिरहेछ"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "pkg क्यास पहिले सुरुवात हुनुपर्छ"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "प्याकेज फेला पार्न असफल भयो: हेडर, अफसेट %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "वस्तु स्थिति फाइलमा खराब कनफिग फाइल । अफसेट %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "MD5 पद वर्णन गर्दा त्रुटि । अफसेट %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "%s मा परिवर्तन गर्न सकिदैन"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "वैध नियन्त्रण फाइल स्थित गर्नु असफल भयो"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "%s को लागि पाइप खोल्न सकिएन"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "%s प्रक्रियाबाट त्रुटि पढ्नुहोस् "
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr " %u chars माथि एकल हेडर लाइन प्राप्त गर्नुहोस्"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #१"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #२"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #३"
+
+#~ msgid "decompressor"
+#~ msgstr "सङ्कुचनविहिन कर्ता"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "पड्नुहोस्, अहिले सम्म %lu पढ्न छ तर कुनै बाँकी छैन"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "लेख्नुहोस्, अहिले सम्म %lu लेख्न छ तर सकिदैन "
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ प्याकेज)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (प्याकेज १ प्रयोग गर्नुहोस्)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ फाइल संस्करण १)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (प्याकेज २ प्रयोग गर्नुहोस्)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ फाइल संस्करण १)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ संस्करण १)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (प्याकेज ३ प्रयोग गर्नुहोस्)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ फाइल संस्करण १)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (pkg फेला पार्नुहोस् )"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (संकलन फाइलले उपलब्ध गर्दछ)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "आन्तरिक त्रुटि, सदस्य तोक्न सकिदैन"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "E: प्राप्त गर्नेबाट तर्क सूचि::gpgv::अति लामो विकल्पहरू अवस्थित छ ।"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ संस्करण २)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "वैरुप्य लाइन %u स्रोत सूचिमा %s (बिक्रता आइडी)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "कुञ्जी घण्टी पहुँच गर्न सकिएन: '%s'"
+
+#, fuzzy
+#~ msgid "Could not patch file"
+#~ msgstr "फाइल %s खोल्न सकिएन"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "डाइरेक्ट्री %s प्रक्रिया गर्दा त्रुटि"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "तपाईँले एकल सञ्चालन मात्र अनुरोध गरे पछि\n"
+#~ " यो प्याकेज साधरण तरिकाले नितान्त स्थापनायोग्य देखिदैन र त्यो प्याकेज विरुद्धको\n"
+#~ " बग प्रतिवेदन भरिनेछ ।"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "लाइन %d अति लामो छ (अधिक्तम %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "लाइन %d अति लामो छ (अधिक्तम %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ फाइल संस्करण १)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ फाइल संस्करण १)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "लेबुल भण्डारण गर्नुहोस्:%s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr " %i प्याकेज अनुक्रमणिकाहरू, %i स्रोत अनुक्रमणिका र %i हस्ताक्षरहरू फेला परे\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "असफल चयन गर्नुहोस्"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "फाइल डेटाले %s परिवर्तन गर्यो"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..ee58e9b
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,4543 @@
+# Dutch po-file for apt
+# This file is distributed under the same license as the apt package.
+#
+# Guus Sliepen <guus@sliepen.warande.net>, 2002.
+# Jochem Berends <j@jochem.net>, 2002.
+# Wannes Soenen <wannes@wannes.cjb.net>, 2002.
+# Frans Pop <elendil@planet.nl>, 2010.
+# Jeroen Schot <schot@a-eskwadraat.nl>, 2011.
+# Frans Spiesschaert <Frans.Spiesschaert@yucom.be>, 2014, 2016, 2017, 2018, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.8.0~rc3\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2019-02-16 20:35+0100\n"
+"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
+"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Ongeldige archiefondertekening"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Fout bij het lezen van de koptekst van het archiefonderdeel"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Ongeldige koptekst in archiefonderdeel"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Archief is te kort"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Lezen van de archiefkopteksten is mislukt"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Kan geen geconfigureerd compressieprogramma vinden voor '%s'"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Beschadigd archief"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar-controlesom klopt niet, het archief is beschadigd"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Onbekend TAR-kopteksttype %u, onderdeel %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Dit is geen geldig DEB-archief, het onderdeel '%s' mankeert"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Interne fout, kon onderdeel %s niet vinden"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Niet-ontleedbaar 'control'-bestand"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Wegschrijven van bestand %s is mislukt"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Sluiten van bestand %s is mislukt"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Het pad %s is te lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s wordt meer dan eens uitgepakt"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "De map %s is omgeleid"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Het pakket probeert om weg te schrijven naar het omleidingsdoel %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Het omleidingspad is te lang"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Opvragen van de status van %s is mislukt"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Hernoemen van %s naar %s is mislukt"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "De map %s wordt vervangen door iets dat geen map is"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Vinden van de knoop in de hash-emmer is mislukt"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Het pad is te lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Pakket-overeenkomst wordt overschreven zonder een versie voor %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Het bestand %s/%s overschrijft het bestand van pakket %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Kan %s niet lezen"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Kan de status van %s niet opvragen"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode werd aangeroepen voor een nog steeds aangekoppeld punt"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Situeren van het hash-element is mislukt!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Toewijzen van de omleiding is mislukt"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Interne fout in AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Er wordt gepoogd om de omleiding %s -> %s en %s/%s te overschrijven"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dubbele toevoeging van de omleiding %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Dubbel configuratiebestand %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Bijwerken van de pakketlijst uit een dergelijke pakketbron kan niet veilig "
+"gebeuren en is daarom standaard uitgezet."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Gegevens uit een dergelijke pakketbron kunnen niet geauthenticeerd worden en "
+"ze gebruiken houdt daarom een potentieel gevaar in."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Zie de man-pagina apt-secure(8) voor details over het aanmaken van een "
+"pakketbron en over de configuratie langs gebruikerskant."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "De pakketbron '%s' heeft niet langer een ondertekening."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "De pakketbron '%s' heeft niet langer een Release-bestand."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Normaal gezien is dit niet toegelaten, maar de optie Acquire::"
+"AllowDowngradeToInsecureRepositories werd gegeven om dit te omzeilen."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "De pakketbron '%s' is niet ondertekend."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "De pakketbron '%s' heeft geen Release-bestand."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "De pakketbron '%s' verstrekt slechts zwakke veiligheidsinformatie."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Opdracht readlink %s is mislukt"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hash-som komt niet overeen"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"Er is onvoldoende informatie beschikbaar om deze download veilig uit te "
+"voeren"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "het hernoemen is mislukt, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Grootte komt niet overeen"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Ongeldig bestandsformaat"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Ondertekenigsfout"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Bestand met niet-versleutelde ondertekening is ongeldig; kreeg '%s' (vereist "
+"het netwerk authenticatie?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Er is een fout opgetreden bij de controle van de ondertekening. De "
+"pakketbron is niet bijgewerkt en de oude indexbestanden zullen worden "
+"gebruikt. GPG-fout: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG-fout: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Opvragen van het in de configuratie vermeld bestand '%s' overgeslagen, "
+"vermits pakketbron '%s' de component '%s' niet bevat (fout gespelde "
+"component in sources.list?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Opvragen van het in de configuratie vermeld bestand '%s' overgeslagen, "
+"vermits pakketbron '%s' de architectuur '%s' niet ondersteunt"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Opvragen van het in de configuratie vermeld bestand '%s' overgeslagen, "
+"vermits pakketbron '%s' het niet schijnt aan te bieden (fout gespeld item in "
+"sources.list?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Opvragen van het in de configuratie vermeld bestand '%s' overgeslagen, "
+"vermits pakketbron '%s' er slechts zwakke veiligheidsinformatie voor "
+"verstrekt"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Het Release-bestand voor %s is vervallen (ongeldig sinds %s). Bijwerkingen "
+"voor deze pakketbron zullen niet uitgevoerd worden."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Het Release-bestand voor %s is nog niet geldig (nog ongeldig gedurende %s). "
+"Bijwerkingen voor deze pakketbron zullen niet uitgevoerd worden."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Tegenstrijdige distributie: %s (verwachtte %s, maar kreeg %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "Bij pakketbron '%s' is de '%s'-waarde gewijzigd van '%s' naar '%s'"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+"Bij pakketbron '%s' is de standaardprioriteit voor %s gewijzigd van %hi naar "
+"%hi."
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+"Hierover is online meer informatie te vinden in de Notities bij de release "
+"op: %s"
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"Dit moet expliciet aanvaard worden vooraleer bijwerkingen uit deze "
+"pakketbron uitgevoerd kunnen worden. Raadpleeg man-pagina %s voor bijkomende "
+"informatie."
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Ophalen van %s is mislukt %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Er kon geen bestand gevonden worden voor pakket %s. Dit kan betekenen dat u "
+"dit pakket handmatig moet repareren (wegens ontbrekende architectuur)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Kan geen bron vinden om versie '%s' van '%s' op te halen"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Logbestand met veranderingen niet beschikbaar voor %s=%s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+"Methode '%s' wordt niet ondersteund en is standaard uitgeschakeld. U "
+"schakelt best over op http(s). Stel Dir::Bin::Methods::%s in op \"%s\" om "
+"deze opnieuw in te schakelen."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "Methode '%s' is in de configuratie expliciet uitgeschakeld."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "Indien u Tor wilde gebruiken, moet u %s in plaats van %s gebruiken."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Het methodestuurprogramma %s kon niet gevonden worden."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Is het pakket %s geïnstalleerd?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Methode %s startte niet op de juiste manier"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Gelieve de schijf met label '%s' in het station '%s' te plaatsen en op "
+"[Enter] te drukken."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Lijstmap %s ontbreekt."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Archiefmap %s ontbreekt."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Kan de map %s niet vergrendelen"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"Geen sandboxgebruiker '%s' op het systeem; kan voorrechten niet laten vallen"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Het downloaden gebeurt door root (de systeembeheerder) en niet in een "
+"sandbox (afgesloten ruimte), aangezien bestand '%s' niet door gebruiker '%s' "
+"kon benaderd worden."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Opschonen van %s wordt niet ondersteund"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Bestand %li van %li wordt opgehaald (nog %s te gaan)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Bestand %li van %li wordt opgehaald"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Pakket %s moet opnieuw geïnstalleerd worden, maar er kan geen archief voor "
+"gevonden worden."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Fout, pkgProblemResolver::Resolve leverde defecten op. Dit kan veroorzaakt "
+"worden door vastgehouden pakketten."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Kan problemen niet verhelpen, u houdt defecte pakketten vast."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"De pakketlijsten of het statusbestand konden of niet ontleed, of niet "
+"geopend worden."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"U kunt misschien 'apt-get update' uitvoeren om deze problemen te verhelpen"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "De lijst van bronnen kon niet gelezen worden."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Regex-compilatiefout - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Release '%s' voor '%s' is niet gevonden"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Versie '%s' voor '%s' is niet gevonden"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Kon taak '%s' niet vinden"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Kon geen enkel pakket vinden via regex '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Kon geen enkel pakket vinden via expansie (glob) '%s'"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Kan pakket %s niet vinden"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Kan geen versies selecteren voor pakket '%s' omdat het puur virtueel is"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Kan de nieuwste versie van het pakket '%s' niet selecteren omdat het puur "
+"virtueel is"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Kan de kandidaat-versie van het pakket %s niet selecteren omdat het geen "
+"kandidaat heeft"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Kan de geïnstalleerde versie van het pakket %s niet selecteren omdat het "
+"niet geïnstalleerd is"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Kan noch de geïnstalleerde, noch de kandidaat-versie van het pakket '%s' "
+"selecteren omdat geen van beide er zijn"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Regel %u van de bronlijst %s is te lang."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Cd-rom wordt afgekoppeld...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Er wordt gebruik gemaakt van cd-romaankoppelpunt %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Er wordt gewacht op de schijf...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Cd-rom wordt aangekoppeld...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificatie..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Opgeslagen label: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "De schijf wordt gescand op indexbestanden...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Er zijn %zu pakket-indexen, %zu bron-indexen, %zu vertalingsindexen, en %zu "
+"handtekeningen gevonden\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Kan geen Package-bestanden vinden. Is dit misschien geen Debian schijf, of "
+"de verkeerde architectuur?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Label '%s' gevonden\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Dat is een ongeldige naam. Gelieve opnieuw te proberen.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Deze schijf heet:\n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Pakketlijsten worden gekopieerd..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Nieuwe bronlijst wordt weggeschreven\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Bronlijst-elementen voor deze schijf zijn:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Kan niet veranderen naar %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Kan de status van %s niet opvragen."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Kan de status van het aanhechtpunt %s niet opvragen"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Opvragen van de status van de cd-rom is mislukt"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"Commandoregel-optie '%c' [van %s] wordt niet begrepen in combinatie met de "
+"andere opties."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"Commandoregel-optie %s wordt niet begrepen in combinatie met de andere opties"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Commandoregel-optie %s is niet booleaans"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Optie %s vereist een argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Optie %s: de specificatie van het configuratie-item dient een =<waarde> te "
+"bevatten."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Optie %s vereist een geheel getal als argument, niet '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Optie '%s' is te lang"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Betekenis van %s wordt niet begrepen, probeer 'true' of 'false'."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Ongeldige bewerking %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Onbekende type-afkorting: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntactische fout %s:%u: blok start zonder naam."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntactische fout %s:%u: verkeerd gevormde markering"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntactische fout %s:%u: extra rommel na waarde"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Syntactische fout %s:%u: richtlijnen kunnen enkel op het hoogste niveau "
+"gegeven worden"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntactische fout %s:%u: teveel geneste invoegingen"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntactische fout %s:%u: vanaf hier ingevoegd"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntactische fout %s:%u: niet-ondersteunde richtlijn '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Syntactische fout %s:%u: de richtlijn 'clear' vereist een optieboom als "
+"argument"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntactische fout %s:%u: extra rommel aan het einde van het bestand"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Probleem bij het ontkoppelen van het bestand %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Er wordt geen vergrendeling gebruikt voor het alleen-lezen-"
+"vergrendelingsbestand %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Kon het vergrendelingsbestand %s niet openen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Het via nfs aangekoppelde vergrendelingsbestand %s wordt niet vergrendeld"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Kon vergrendeling %s niet verkrijgen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Bestandenlijst kan niet aangemaakt worden, omdat '%s' geen map is"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Negeren van '%s' in map '%s' omdat het geen gewoon bestand is"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Negeren van bestand '%s' in map '%s' omdat het geen bestandsextensie heeft"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Negeren van bestand '%s' in map '%s' omdat het een ongeldige "
+"bestandsextensie heeft"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Er is gewacht op %s, maar die kwam niet"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Subproces %s ontving een segmentatiefout."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Subproces %s ontving signaal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Subproces %s gaf een foutcode terug (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Subproces %s sloot onverwacht af"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Leesfout"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Schrijffout"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Probleem bij het sluiten van het gzip-bestand %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Onverwacht bestandseinde"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Aanmaken IPC-subproces is mislukt"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Uitvoeren van de compressor is mislukt "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Kon het bestand %s niet openen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Kon de bestandsindicator %d niet openen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lezen; moet er nog %llu lezen, maar er schieten er geen meer over"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "schrijven; de laatste %llu konden niet weggeschreven worden"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Probleem bij het sluiten van het bestand %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Probleem bij het hernoemen van het bestand %s naar %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Probleem bij het synchroniseren van het bestand"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Kan tijdelijk bestand %s niet aanmaken met mkstemp"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Kan niet naar %s schrijven"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Kan systeem-aanroep mmap niet op een leeg bestand toepassen"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Kon het omslaan naar het geheugen van %llu bytes niet uitvoeren"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Kon de bestandsindicator %i niet dupliceren"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Kan de 'mmap' niet sluiten"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Kan de 'mmap' niet synchronizeren"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Kon het omslaan naar het geheugen van %lu bytes niet uitvoeren"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Afkorten van bestand is mislukt"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Onvoldoende ruimte voor Dynamische MMap. Gelieve de grootte van APT::Cache-"
+"Start te verhogen. Huidige waarde: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Kan het formaat van de MMap niet vergroten omdat de grens van %lu bytes al "
+"is bereikt."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Kan het formaat van de MMap niet vergroten omdat het automatisch vergroten "
+"door de gebruiker is uitgeschakeld."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Fout!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Klaar"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %liu %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%liu %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Selectie %s niet gevonden"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr "Doel %s wil hetzelfde bestand (%s) als %s uit pakketbron %s opvragen"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "Doel %s (%s) is meerdere keren geconfigureerd in %s en %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Kon Release-bestand %s niet ontleden"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Geen secties in Release-bestand %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Geen Hash-vermelding in Release-bestand %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Geen Hash-element in Release-bestand %s dat vanuit veiligheidsoverwegingen "
+"als voldoende sterk beschouwd kan worden"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Ongeldige '%s'-vermelding in Release-bestand %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+"Tegengestelde waarden ingesteld voor optie %s in verband met pakketbron %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+"Ongeldige waarde ingesteld voor optie %s in verband met pakketbron %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Tegengestelde waarden ingesteld voor optie %s in verband met pakketbron %s "
+"%s: %s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Kon pakketbestand %s niet ontleden (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Kan de vergrendeling voor het dpkg-frontend (%s) niet verkrijgen. Gebruikt "
+"een ander proces dit?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Kan de vergrendeling voor het dpkg-frontend (%s) niet verkrijgen. Heeft u "
+"beheerdersrechten?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg werd onderbroken; voer handmatig '%s' uit om het probleem te verhelpen. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Kan de beheersmap (%s) niet vergrendelen. Is deze in gebruik door een ander "
+"proces?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Kan de beheersmap (%s) niet vergrendelen. Heeft u beheerdersrechten?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Niet vergrendeld"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s wordt voorbereid"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Configuratie van %s wordt voorbereid"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Verwijderen van %s wordt voorbereid"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Volledig verwijderen van %s wordt voorbereid"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "De verdwijning van %s wordt opgemerkt"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Post-installatie-trigger %s wordt uitgevoerd"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s is geïnstalleerd"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s wordt geconfigureerd"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Map '%s' ontbreekt"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Kon het bestand '%s' niet openen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s wordt uitgepakt"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s wordt geïnstalleerd"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s wordt verwijderd"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s wordt volledig verwijderd"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s is volledig verwijderd"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Kan log (%s) niet opschrijven"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Is /dev/pts aangekoppeld?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Bewerking werd afgebroken vooraleer ze beëindigd was"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Er is geen apport-verslag weggeschreven omdat het maximum aantal verslagen "
+"(MaxReports) al is bereikt"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problemen met vereisten - wordt niet geconfigureerd"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding aangeeft dat de "
+"fout het gevolg is van een eerdere mislukking."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding als oorzaak een "
+"volle schijf opgeeft."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding als oorzaak "
+"onvoldoende-geheugen opgeeft."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding een probleem op "
+"het lokale systeem signaleert."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding een fout van "
+"dpkg I/O signaleert."
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Boom van vereisten wordt opgebouwd"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Kandidaat-versies"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Genereren van vereisten"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "De statusinformatie wordt gelezen"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Openen van StateFile %s is mislukt"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Wegschrijven van tijdelijke StateFile %s is mislukt"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Scenario naar de oplosser sturen"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Verzoek naar de oplosser sturen"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Instellen op het ontvangen van een oplossing"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Externe oplosser faalde zonder passende foutmelding"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Externe oplosser uitvoeren"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Externe planner uitvoeren"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Verzoek naar de planner sturen"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Scenario naar de planner sturen"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "Externe planner faalde zonder passende foutmelding"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i records weggeschreven.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%i records weggeschreven met %i ontbrekende bestanden.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%i records weggeschreven met %i niet-overeenstemmende bestanden\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"%i records weggeschreven met %i ontbrekende bestanden en %i niet-"
+"overeenstemmende bestanden\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Kan geen authenticiteitsrecord vinden voor: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash-som komt niet overeen voor: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Pakketbeheersysteem '%s' wordt niet ondersteund"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Kan geen geschikt pakketbeheersysteemtype bepalen"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Voortgang: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "dpkg wordt uitgevoerd"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Kon onmiddellijke configuratie van '%s' niet uitvoeren. Voor details zie "
+"'man 5 apt.conf', onder APT::Immediate-Configure. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Kon '%s' niet configureren. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Deze installatie-aanroep vereist het tijdelijk verwijderen van het "
+"essentiële pakket %s omwille van een Conflicts/Pre-Depends-lus. Dit is vaak "
+"slecht, maar als u dit echt wilt doen, dan dient u de optie APT::Force-"
+"LoopBreak te activeren."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Lege pakketcache"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Het pakketcachebestand is beschadigd"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Het pakketcachebestand heeft een niet-compatibele versie"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Deze APT ondersteunt het versienummeringssysteem '%s' niet"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "De pakketcache was aangemaakt voor andere architecturen: %s vs %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Het pakketcachebestand is beschadigd. Het heeft een verkeerde frommel"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Vereisten"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Voor-Vereisten"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Suggesties"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Conflicteert met"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Aanbevelingen"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Vervangt"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Breekt"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Vult aan"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Doet in onbruik geraken"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "belangrijk"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "noodzakelijk"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standaard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "optioneel"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Cache heeft een niet-compatibel versienummeringssysteem"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Fout tijdens verwerken van %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Wauw, u heeft het maximum aantal pakketnamen dat deze APT aankan "
+"overschreden."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Wauw, u heeft het maximum aantal versies dat deze APT aankan overschreden."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Wauw, u heeft het maximum aantal beschrijvingen dat deze APT aankan "
+"overschreden."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Wauw, u heeft het maximum aantal afhankelijkheden dat deze APT aankan "
+"overschreden."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Pakketlijsten worden ingelezen"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Invoer/Uitvoer-fout tijdens wegschrijven bron-cache"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Indexbestand van type '%s' wordt niet ondersteund"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Een waarde '%s' voor APT::Default-Release is ongeldig, aangezien een "
+"dergelijke uitgave niet voorkomt in de bronnen"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Ongeldig record in het voorkeurenbestand %s, 'Package'-koptekst ontbreekt"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Pintype %s wordt niet begrepen"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+"%s: Het bijzondere 'Pin-Priority: %s' kan enkel gebruikt worden voor "
+"structuren van het type 'Package: *'"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: Waarde %s valt buiten het bereik van geldige pin-prioriteiten (%d to %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Er is geen prioriteit (of nul) opgegeven voor deze pin"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Niet juist gevormde regel %u in %s-bestand %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Niet juist gevormde regel %u in bronlijst %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Type '%s' op regel %u in bronlijst %s is onbekend"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Niet juist gevormde regel %u in pakketbronlijst %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Type '%s' van element %u in bronlijst %s is onbekend"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Niet ondersteund bestand %s opgegeven aan de commandoregel"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"Uw bronnenlijst (/etc/apt/sources.list) dient tenminste één bron-URI te "
+"bevatten"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "Kan %s niet naar een geheel getal omzetten: buiten het bereik"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Ophalen van sommige indexbestanden is mislukt. Deze zijn of genegeerd, of er "
+"zijn oudere versies van gebruikt."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Opwaardering wordt doorgerekend"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Geraakt:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Ophalen:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Genegeerd:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Fout:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%sB opgehaald in %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Bezig]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Medium wisselen: gelieve de schijf met label\n"
+" '%s'\n"
+"in het station '%s' te plaatsen en op [Enter] te drukken\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+"Wilt u deze wijzigingen aanvaarden en voortgaan met bijwerken vanuit deze "
+"pakketbron?"
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Vereisten worden gecorrigeerd..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " mislukt."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Kan vereisten niet corrigeren"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Kon de verzameling op te waarderen pakketten niet minimaliseren"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Klaar"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "U kunt 'apt --fix-broken install' uitvoeren om dit op te lossen."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Er zijn niet-voldane vereisten. U kunt best 'apt --fix-broken install' "
+"uitvoeren zonder pakketten op te geven, (of u kunt zelf een oplossing "
+"specificeren)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Bezig met sorteren"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Let op, '%s' wordt geselecteerd omwille van de taak '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Let op, '%s' wordt geselecteerd omwille van expansie (glob) '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Let op, '%s' wordt geselecteerd omwille van de regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Pakket %s is een virtueel pakket voorzien door:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Geïnstalleerd]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr "[Niet de kandidaat-versie]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "U dient er één expliciet te selecteren voor installatie."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Pakket %s is niet beschikbaar, hoewel er naar verwezen wordt door\n"
+"een ander pakket. Mogelijk betekent dit dat het pakket ontbreekt,\n"
+"verouderd is, of enkel beschikbaar is van een andere bron\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Echter, de volgende pakketten vervangen dit:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Pakket '%s' heeft geen kandidaat voor installatie"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Virtuele pakketten zoals '%s' kunnen niet worden verwijderd\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Pakket '%s' is niet geïnstalleerd, en wordt dus niet verwijderd. Bedoelde u "
+"'%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Pakket '%s' is niet geïnstalleerd, en wordt dus niet verwijderd\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Let op, '%s' wordt geselecteerd in plaats van '%s'\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Meest gebruikte commando's:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Zie %s voor meer informatie over beschikbare commando's."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Configuratieopties en syntaxis worden gespecificeerd in apt.conf(5).\n"
+"Informatie over het configureren van pakketbronnen vindt u in sources."
+"list(5).\n"
+"Keuzes voor pakketten en versies kunnen geuit worden via "
+"apt_preferences(5).\n"
+"Details over beveiliging zijn te vinden in apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Deze APT heeft Super Koekracht."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Deze APT-helper heeft Super Koekracht."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes is verouderd, gebruik in plaats daarvan een van de opties die "
+"met --allow begint."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Geen pakketten gevonden"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr ""
+"WAARSCHUWING: De volgende pakketten kunnen niet geauthenticeerd worden!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Authenticiteitswaarschuwing werd genegeerd.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Sommige pakketten konden niet geauthenticeerd worden"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Wilt u deze pakketten installeren zonder verificatie?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Er waren niet-geauthenticeerde pakketten en -y was gebruikt zonder --allow-"
+"unauthenticated"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Kon de hoeveelheid vrije schijfruimte op %s niet bepalen"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "U heeft onvoldoende vrije schijfruimte op %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Kon de ophaalmap niet vergrendelen"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Sommige pakketten konden niet geïnstalleerd worden. Dit kan betekenen\n"
+"dat u om een onmogelijke situatie gevraagd heeft, of, indien u\n"
+"de distributie 'unstable' gebruikt, dat sommige benodigde pakketten nog "
+"gemaakt moeten worden of uit 'Incoming' verwijderd werden."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "De volgende informatie kan misschien helpen de situatie op te lossen:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Niet-werkende pakketten"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Kon sommige archieven niet ophalen. Misschien kunt u 'apt-get update' "
+"uitvoeren of het met '--fix-missing' proberen?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Interne fout. InstallPackages is aangeroepen met defecte pakketten!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pakketten moeten verwijderd worden maar verwijderen is uitgeschakeld."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Er werden essentiële pakketten verwijderd en -y was gebruikt zonder --allow-"
+"remove-essential."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Er werden pakketten gedegradeerd en -y was gebruikt zonder --allow-"
+"downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Er werden gehandhaafde pakketten gewijzigd en -y was gebruikt zonder --allow-"
+"change-held-packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Interne fout. Rangschikken is niet voltooid"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Merkwaardig... De groottes kwamen niet overeen. Gelieve apt@packages.debian."
+"org te mailen"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Er moeten %sB/%sB aan archieven opgehaald worden.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Er moeten %sB aan archieven opgehaald worden.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Na deze bewerking zal er %sB extra schijfruimte gebruikt worden.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Na deze bewerking zal er %sB schijfruimte vrijkomen.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "'Trivial Only' is opgegeven. Dit is echter geen triviale bewerking."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ja, doe wat ik zeg!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"U staat op het punt om iets te doen wat mogelijk schadelijk is.\n"
+"Als u wilt doorgaan, dient u de zin '%s' in te typen.\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Afbreken."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Wilt u doorgaan?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Ophalen van sommige bestanden is mislukt"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Ophalen klaar en alleen-ophalen-modus staat aan"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing en medium wisselen wordt op dit moment niet ondersteund"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Geen oplossing gevonden voor de ontbrekende pakketten."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Installatie wordt afgebroken."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Het volgende pakket is van uw systeem verdwenen omdat\n"
+"alle bestanden zijn overschreven door andere pakketten:"
+msgstr[1] ""
+"De volgende pakketten zijn van uw systeem verdwenen omdat\n"
+"alle bestanden zijn overschreven door andere pakketten:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Let op: dit wordt automatisch en bewust gedaan door dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "We mogen geen dingen verwijderen, kan AutoRemover niet starten"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, het lijkt erop dat de AutoRemover iets vernietigd heeft. Dit zou\n"
+"niet mogen kunnen. Gelieve een bug-rapport voor apt in te sturen."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Interne fout. AutoRemover heeft dingen stukgemaakt"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig:"
+msgstr[1] ""
+"De volgende pakketten zijn automatisch geïnstalleerd en zijn niet langer "
+"nodig:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu pakket was automatisch geïnstalleerd en is niet langer nodig.\n"
+msgstr[1] ""
+"%lu pakketten waren automatisch geïnstalleerd en zijn niet langer nodig.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Gebruik '%s' om het te verwijderen."
+msgstr[1] "Gebruik '%s' om ze te verwijderen."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "De volgende extra pakketten zullen geïnstalleerd worden:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Voorgestelde pakketten:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Aanbevolen pakketten:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"%s wordt overgeslagen, het is al geïnstalleerd en opwaardering is niet "
+"gevraagd.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"%s wordt overgeslagen, het is niet geïnstalleerd en er is alleen om "
+"opwaarderingen gevraagd.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+"Herinstalleren van %s is niet mogelijk omdat het niet opgehaald kan worden.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s is reeds de nieuwste versie (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s staat ingesteld op handmatig geïnstalleerd.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versie '%s' (%s) geselecteerd voor '%s'\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versie '%s' (%s) geselecteerd voor '%s' omwille van '%s'\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Bezig met oplijsten"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "Er is %i bijkomende versie. Gebruik schakelaar '-a' om het te zien."
+msgstr[1] ""
+"Er zijn %i bijkomende versies. Gebruik schakelaar '-a' om ze te zien."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"OPMERKING: Dit is slechts een simulatie!\n"
+" Voor daadwerkelijke uitvoering heeft %s beheerdersrechten nodig.\n"
+" Houd er ook rekening mee dat vergrendeling is uitgeschakeld.\n"
+" Steun dus niet op haar relevantie voor de huidige concrete situatie!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "onbekend"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[geïnstalleerd,opwaardeerbaar naar: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[geïnstalleerd,lokaal]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[geïnstalleerd,automatisch verwijderbaar]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[geïnstalleerd,automatisch]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[geïnstalleerd]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[opwaardeerbaar van: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[overgebleven configuratie]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "maar %s is geïnstalleerd"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "maar %s zal geïnstalleerd worden"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "maar het is niet installeerbaar"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "maar het is een virtueel pakket"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "maar het zal niet geïnstalleerd worden"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "maar het is niet geïnstalleerd"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " of"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "De volgende pakketten hebben niet-voldane vereisten:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "De volgende NIEUWE pakketten zullen geïnstalleerd worden:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "De volgende pakketten zullen VERWIJDERD worden:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "De volgende pakketten zijn achtergehouden:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "De volgende pakketten zullen opgewaardeerd worden:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "De volgende pakketten zullen GEDEGRADEERD worden:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "De volgende gehandhaafde pakketten zullen gewijzigd worden:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (vanwege %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"WAARSCHUWING: De volgende essentiële pakketten zullen verwijderd worden.\n"
+"Dit dient NIET gedaan te worden tenzij u precies weet wat u doet!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu opgewaardeerd, %lu nieuw geïnstalleerd, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu opnieuw geïnstalleerd, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu gedegradeerd, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu te verwijderen en %lu niet opgewaardeerd.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu niet volledig geïnstalleerd of verwijderd.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[J/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[j/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "J"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "U dient minstens één zoekpatroon op te geven"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Volledige tekst doorzoeken"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Er is %i bijkomend record. Gebruik de schakeloptie '-a' om het te zien"
+msgstr[1] ""
+"Er zijn %i bijkomende records. Gebruik de schakeloptie '-a' om ze te zien."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "geen echt pakket (virtueel)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Pakketbestanden:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Cache loopt niet synchroon, kruisverwijzing naar pakketbestand lukt niet"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Vastgepinde pakketten:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s met prioriteit %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Geïnstalleerd: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidaat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(geen)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versietabel:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Kan geen pakket vinden voor architectuur '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Kan geen pakket '%s' vinden met versienummer '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Kan geen pakket '%s' vinden uit de uitgave '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "'%s' wordt als bronpakket genomen in plaats van '%s'\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Kan versie '%s' van pakket '%s' niet vinden"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"U dient minstens 1 pakket op te geven waarvan de broncode opgehaald moet "
+"worden"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Kan geen bronpakket vinden voor %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"MERK OP: Het verpakken van '%s' wordt bijgehouden in het versiebeheersysteem "
+"'%s' op:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Gebruik:\n"
+"%s\n"
+"om de nieuwste (mogelijk nog niet uitgebrachte) bijwerkingen van het pakket "
+"op te halen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Reeds opgehaald bestand '%s' wordt overgeslagen\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Moet %sB/%sB aan bronarchieven ophalen.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Moet %sB aan bronarchieven ophalen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Ophalen bron %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Ophalen van sommige archieven is mislukt."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Het uitpakken van de reeds uitgepakte bron in %s wordt overgeslagen\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Uitpakopdracht '%s' is mislukt.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Gelieve na te gaan of het pakket 'dpkg-dev' geïnstalleerd is.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Bouwopdracht '%s' is mislukt.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Kan de informatie over de bouwvereisten voor %s niet ophalen"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s heeft geen bouwvereisten.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Er is geen architectuurinformatie beschikbaar voor %s. Raadpleeg apt.conf(5) "
+"APT::Architectures om dit te configureren"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"U dient tenminste één pakket op te geven om er de bouwvereisten van te "
+"controleren"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "Noteer dat map '%s' gebruikt wordt om de bouwvereisten te verkrijgen\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+"Noteer dat bestand '%s' gebruikt wordt om de bouwvereisten te verkrijgen\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Verwerken van de bouwvereisten is mislukt"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Verwerken van %s is mislukt. Opnieuw bewerken? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "Uw bestand '%s' is gewijzigd. Voer 'apt-get update' uit.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Pakket %s versie %s heeft een niet-voldane vereiste:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "De opdracht 'update' aanvaardt geen argumenten"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+"Het gebruik van %s is te verkiezen boven het rechtstreeks inbedden van login-"
+"informatie in het %s-element voor '%s'"
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i pakket kan opgewaardeerd worden. Voer 'apt list --upgradable' uit om het "
+"te zien.\n"
+msgstr[1] ""
+"%i pakketten kunnen opgewaardeerd worden. Voer 'apt list --upgradable' uit "
+"om ze te zien.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Alle pakketten zijn up-to-date."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "De opdracht '%s' aanvaardt geen argumenten"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Totaal aantal pakketnamen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Totaal aantal pakketstructuren: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normale pakketten: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Zuiver virtuele pakketten: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Losstaande virtuele pakketten: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Gemengde virtuele pakketten: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Ontbrekend: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Totaal aantal verschillende versies: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Totaal aantal verschillende beschrijvingen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Totaal aantal vereisten: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Totaal aantal versie/bestand-relaties: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Totaal aantal Beschrijving/bestand-relaties: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Totaal aantal 'Voorziet'-toewijzingen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Totaal aantal geëxpandeerde (globbed) tekenreeksen: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Totale onbenutte ruimte: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Totale hoeveelheid verantwoorde ruimte: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Dit commando is verouderd. Gelieve in plaats ervan 'apt-mark showauto' te "
+"gebruiken."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Gebruik: apt-cache [opties] commando\n"
+" apt-cache [opties] show pkkt1 [pkkt2 ...]\n"
+"\n"
+"apt-cache zoekt en toont beschikbare informatie over geïnstalleerde en\n"
+"installeerbare pakketten. Het werkt exclusief met de gegevens die via het\n"
+"commando 'update' van bijv. apt-get in de lokale cache opgeslagen werden.\n"
+"Als de laatste update lang geleden is, kan die informatie dus verouderd\n"
+"zijn, maar daartegenover staat dat apt-cache niet afhankelijk is van de\n"
+"beschikbaarheid van de geconfigureerde pakketbronnen (bijv. offline).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Een rapport over de broncode tonen"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "De pakkettenlijst a.d.h.v. een regex-patroon doorzoeken"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "De ruwe vereisteninformatie van een pakket tonen"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "De pakketten die van een pakket afhankelijk zijn, tonen"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Een leesbaar rapport over het pakket tonen"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "De naam van alle pakketten op het systeem tonen"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Beleidsinstellingen tonen"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Gelieve een naam voor deze schijf op te geven, bijvoorbeeld 'Debian 5.0.3 "
+"Schijf 1'"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Gelieve een schijf in het station te plaatsen en op [Enter] te drukken"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Aankoppelen van '%s' op '%s' is mislukt"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Het is niet gelukt om automatisch een cd-rom te vinden, ook niet op het "
+"standaard aankoppelpunt.\n"
+"U zou de optie --cdrom kunnen proberen om het aankoppelpunt voor de cd-rom "
+"in te stellen.\n"
+"Raadpleeg 'man apt-cdrom' voor meer informatie over het automatisch "
+"detecteren van een cd-rom en het aankoppelpunt."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Dit proces dient herhaald te worden voor alle cd's in uw set."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Gebruik: apt-cdrom [opties] commando\n"
+"\n"
+"apt-cdrom wordt gebruikt om CD's, USB-sticks en andere verwijderbare media\n"
+"toe te voegen als pakketbronnen voor APT. Het aankoppelpunt en informatie\n"
+"over het apparaat worden gehaald bij apt.conf(5), udev(7) en fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumenten niet in paren"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Gebruik: apt-config [opties] commando\n"
+"\n"
+"apt-config is een interface voor de configuratie-instellingen die door\n"
+"alle APT-gereedschap gebruikt wordt; hoofdzakelijk bedoeld om te debuggen\n"
+"en voor het gebruik in shellscripts.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "configuratiewaarden via shell-evaluatie verkrijgen"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "de actieve configuratie-instelling tonen"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Gebruik: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is een interface die een EDSP-scenario opslaat in\n"
+"een bestand en dat facultatief doorstuurt naar een andere oplosser.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Gebruik: apt-extracttemplates bestand1 [bestand2 ...]\n"
+"\n"
+"apt-extracttemplates wordt gebruikt om configuratie- en sjabloonbestanden "
+"uit\n"
+"Debian pakketten te halen. Het wordt hoofdzakelijk gebruikt door debconf(1) "
+"voor\n"
+"het stellen van configuratievragen vooraleer pakketten geïnstalleerd "
+"worden.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Kan versie van debconf niet bepalen. Is debconf geïnstalleerd?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Kon pakket %s niet vinden"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s staat ingesteld op automatische geïnstalleerd.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Dit commando is verouderd. Gelieve in plaats ervan 'apt-mark auto' en 'apt-"
+"mark manual' te gebruiken."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Interne fout, probleemoplosser heeft dingen stukgemaakt"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Ondersteunde modules:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Gebruik: apt-get [opties] commando\n"
+" apt-get [opties] install|remove pakket1 [pakket2 ...]\n"
+" apt-get [opties] source pakket1 [pakket2 ...]\n"
+"\n"
+"apt-get is een commandoregel-interface voor het ophalen van pakketten en\n"
+"informatie erover uit geauthenticeerde pakketbronnen en voor het\n"
+"installeren, opwaarderen en verwijderen van pakketten en hun vereisten.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Een nieuwe lijst van pakketten ophalen"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Een opwaardering uitvoeren"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Nieuwe pakketten installeren (pakket is bijv. libc6, niet libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Pakketten opnieuw installeren (pakket is libc6, niet libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Pakketten verwijderen"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Pakketten en hun configuratiebestanden verwijderen"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Automatisch alle ongebruikte pakketten verwijderen"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Opwaardering van de distributie, zie apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Opwaardering volgens dselect-selecties"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "De bouwvereisten van een bronpakket configureren"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Opgehaalde archiefbestanden verwijderen"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Verouderde opgehaalde archiefbestanden verwijderen"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verifiëren dat er geen defecte vereisten zijn"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Bronarchieven downloaden"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Het binaire pakket naar de huidige map downloaden"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "De log van wijzigingen aan het opgegeven pakket downloaden en tonen"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Heb een URL als argument nodig"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "U dient minstens 1 paar van url/bestandsnaam op te geven"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Ophalen mislukt"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec is mislukt voor %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Gebruik: apt-helper [opties] commando\n"
+" apt-helper [opties] cat-file bestand ...\n"
+" apt-helper [opties] download-file uri doelpad\n"
+"\n"
+"apt-helper bundelt een collectie commando's voor shell-scripts\n"
+"om bijvoorbeeld dezelfde proxyconfiguratie of eenzelfde manier\n"
+"van verkrijgen te gebruiken als APT.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "het opgegeven uri ophalen en in het doelpad plaatsen"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "een SRV-record (bijv. _http._tcp.ftp.debian.org) opzoeken"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "bestanden samenvoegen, met automatische decompressie"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "proxy opzoeken met behulp van apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr "wachten tot het systeem online is"
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+"bijzondere rechten laten vallen voordat het gegeven commando uitgevoerd wordt"
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Gebruik: apt-internal-planner\n"
+"\n"
+"apt--internal-planner is een interface om de actuele\n"
+"interne planner voor de APT-familie te gebruiken\n"
+"als een externe met het oog op debuggen e.d.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Gebruik: apt-internal-solver\n"
+"\n"
+"apt--internal-solver is een interface om de actuele\n"
+"interne oplosser voor de APT-familie te gebruiken\n"
+"als een externe met het oog op debuggen e.d.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s kan niet gemarkeerd worden want het is niet geïnstalleerd.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s was reeds ingesteld als handmatig geïnstalleerd.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s was reeds ingesteld als automatisch geïnstalleerd.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr "Er zijn geen wijzigingen nodig"
+
+#: cmdline/apt-mark.cc
+msgid "The following packages will be marked as automatically installed:"
+msgstr ""
+"De volgende pakketten zullen gemarkeerd worden als automatisch geïnstalleerd:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s was reeds ingesteld als te handhaven.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s was reeds ingesteld op niet te handhaven.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Het uitvoeren van dpkg mislukte. Bent u systeembeheerder?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s is ingesteld op te handhaven.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Handhaven van %s werd geannuleerd.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "Selecteerde %s om gewist te worden.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Selecteerde %s om verwijderd te worden.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Selecteerde %s om geïnstalleerd te worden.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Gebruik: apt-mark [opties] {auto|manual} pakket1 [pakket2 ...]\n"
+"\n"
+"apt-mark is een eenvoudige commandolijn-interface om pakketten als\n"
+"handmatig of automatisch geïnstalleerd te markeren. Het kan ook\n"
+"gebruikt worden om de selectietoestand van pakketten in dpkg(1) te\n"
+"manipuleren en een lijst van pakketten weer te geven\n"
+"die al dan niet een bepaalde markering hebben.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Het vermelde pakket als automatisch geïnstalleerd markeren"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Het vermelde pakket als manueel geïnstalleerd markeren"
+
+#: cmdline/apt-mark.cc
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr ""
+"Alle vereisten van meta-pakketten als automatisch geïnstalleerd markeren."
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Een pakket als gehandhaafd markeren"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Een pakket niet langer als gehandhaafd markeren"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "De lijst van automatisch geïnstalleerde pakketten tonen"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "De lijst van manueel geïnstalleerde pakketten tonen"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "De lijst van te handhaven pakketten tonen"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Onbekend pakketrecord!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Gebruik: apt-sortpkgs [opties] bestand1 [bestand2 ...]\n"
+"\n"
+"apt-sortpkgs is eenvoudig gereedschap voor het sorteren van bestanden\n"
+"met pakketinformatie. Standaard sorteert het informatie volgens\n"
+"binair pakket, maar met de optie -s kan overgeschakeld worden\n"
+"naar een ordening op basis van het bronpakket.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Gebruik: apt [opties] commando\n"
+"\n"
+"apt is pakketbeheerdersgereedschap voor de commandoregel dat beschikt\n"
+"over commando's voor het zoeken en beheren van pakketten en voor het\n"
+"opzoeken van informatie over hen. Het biedt dezelfde functionaliteit\n"
+"als de gespecialiseerde gereedschappen van APT, zoals apt-get en\n"
+"apt-cache, maar maakt standaard gebruik van opties op een manier\n"
+"die beter aan interactief gebruik aangepast is.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "pakketten tonen op basis van hun naam"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "in de pakketbeschrijvingen zoeken"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "gedetailleerde informatie over het pakket tonen"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "pakketten installeren"
+
+#: cmdline/apt.cc
+msgid "reinstall packages"
+msgstr "pakketten opnieuw installeren"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "pakketten verwijderen"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "de lijst van beschikbare pakketten bijwerken"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "het systeem opwaarderen door pakketten te installeren/op te waarderen"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+"het systeem opwaarderen door pakketten te verwijderen/te installeren/op te "
+"waarderen"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "het bestand met informatie over de pakketbronnen bewerken"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Foute standaardinstelling!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Druk [Enter] om door te gaan."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Wilt u alle eerder opgehaalde '.deb'-bestanden verwijderen?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Er zijn fouten opgetreden tijdens het uitpakken. Geïnstalleerde pakketten"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "worden geconfigureerd. Hierbij kunnen fouten meerdere malen optreden"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"of veroorzaakt worden door niet-voldane vereisten. Dit is O.K., enkel de "
+"fouten"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"boven dit bericht zijn belangrijk. U dient ze op te lossen en de opdracht "
+"[I]nstall opnieuw uit te voeren"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "De beschikbare informatie wordt samengevoegd"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Pakket-extensielijst is te lang"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Fout bij het verwerken van map %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Bron-extensielijst is te lang"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Fout bij het wegschrijven van de koptekst naar het inhoudsbestand"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Fout bij het verwerken van de inhoud van %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Gebruik: apt-ftparchive [opties] opdracht\n"
+"Opdrachten: packages <pad naar .deb's> [voorrangsbestand [padprefix]]\n"
+" sources <pad naar .dsc's> [voorrangsbestand [padprefix]]\n"
+" contents <pad>\n"
+" release <pad>\n"
+" generate config [groepen]\n"
+" clean config\n"
+"\n"
+"Met apt-ftparchive genereert index bestanden voor Debian archieven.\n"
+"Het ondersteunt verschillende aanmaakstijlen variërend van volledig \n"
+"automatisch tot een functionele vervanging van dpkg-scanpackages en \n"
+"dpkg-scansources\n"
+"\n"
+"apt-ftparchive genereert pakketbestanden van een boom met .debs.\n"
+"Het bestand Package bevat de inhoud van alle 'control'-velden van elk\n"
+"pakket alsook de MD5-hash en de bestandsgrootte. Via een voorrangsbestand\n"
+"kunnen de waardes van de 'Priority'- en 'Section'-velden afgedwongen\n"
+"worden.\n"
+"\n"
+"Op overeenkomstige wijze genereert apt-ftparchive de 'Sources'-bestanden\n"
+"van een boom met .dscs. De '--source-override'-optie kan gebruikt worden\n"
+"om een voorrangsbestand voor bronpakketten te specificeren.\n"
+"\n"
+"De 'packages' en 'sources' opdrachten dienen uitgevoerd te worden \n"
+"in de basismap van de boom. Het pad naar de .deb's dient te verwijzen\n"
+"naar het startpunt van de recursieve zoekopdracht en een voorrangsbestand\n"
+"dient de voorrangsvlaggen te bevatten. Padprefix wordt toegevoegd\n"
+"aan het 'filename'-veld indien dit aanwezig is. Een praktijkvoorbeeld\n"
+"uit het Debian-archief:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opties:\n"
+" -h Deze hulptekst\n"
+" --md5 Het aanmaken van de MD5 beheren\n"
+" -s=? Bronvoorrangsbestand\n"
+" -q Stille uitvoer\n"
+" -d=? De optionele caching database selecteren\n"
+" --no-delink De debug-modus voor delinking inschakelen\n"
+" --contents Het aanmaken van het inhoudsbestand beheren\n"
+" -c=? Dit configuratiebestand inlezen\n"
+" -o=? Een willekeurige configuratieoptie instellen"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Geen van de selecties kwam overeen"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Sommige bestanden zijn niet aanwezig in de pakketbestandsgroep '%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB is beschadigd, bestand hernoemd naar %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB is verouderd, opwaardering van %s wordt geprobeerd"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"DB-formaat is ongeldig. Als u opgewaardeerd heeft van een oudere versie van "
+"apt, dient u de database te verwijderen en opnieuw aan te maken."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Kan het DB-bestand %s niet openen: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Lezen van .dsc is mislukt"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Archief heeft geen 'control'-record"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Kan geen cursor verkrijgen"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Geheugentoewijzing is mislukt"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Onbekend compressie-algoritme '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Gecomprimeerde uitvoer %s vereist dat een compressie ingesteld is"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Aanmaken van IPC-pijp naar subproces is mislukt"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Een nieuw proces beginnen (fork) is mislukt"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Comprimeer kind"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Interne fout, aanmaken van %s is mislukt"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "IO naar subproces/bestand is mislukt"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Lezen tijdens het berekenen van de MD5 is mislukt"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Kan %s niet openen"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Niet juist gevormde voorrangsvermelding %s op regel %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Lezen van het voorrangsbestand %s is mislukt"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Niet juist gevormde voorrangsvermelding %s op regel %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Niet juist gevormde voorrangsvermelding %s op regel %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Niet juist gevormde voorrangsvermelding %s op regel %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Kon map %s niet lezen\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Kon de status van %s niet opvragen\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "F: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "F: Er zijn fouten van toepassing op het bestand "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Oplossen van %s is mislukt"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Doorlopen boomstructuur is mislukt"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Openen van %s is mislukt"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Koppelen van %s aan %s is mislukt"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink-limiet van %sB bereikt.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Archief heeft geen 'package'-veld"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s heeft geen voorrangsvermelding\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s beheerder is %s, niet %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s heeft geen voorrangsvermelding voor bronpakketten\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s heeft ook geen voorrangsvermelding voor binaire pakketten\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Wachten op de kopteksten"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "De HTTP-server verstuurde een ongeldige 'reply'-koptekst"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Foute koptekstregel"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "De HTTP-server verstuurde een ongeldige 'Content-Length'-koptekst"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "De HTTP-server verstuurde een ongeldige 'Content-Range'-koptekst"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "De bereik-ondersteuning van deze HTTP-server werkt niet"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Onbekend datumformaat"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Foute koptekstdata"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Verbinding mislukt"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+"Het bestand heeft een onverwachte grootte (%llu != %llu). Is er een "
+"spiegelserversynchronisatie bezig?"
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"%s automatisch uitgeschakeld wegens fout antwoord van server/proxy. (man 5 "
+"apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Interne fout"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Kan de CD-databank %s niet lezen"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Om APT deze CD te laten herkennen kunt u best 'apt-cdrom' gebruiken. 'apt-"
+"get update' is niet in staat om nieuwe CD's toe te voegen"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Verkeerde CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Kan de CD in %s niet ontkoppelen. Mogelijk wordt die nog steeds gebruikt."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Schijf niet gevonden."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Bestand niet gevonden"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "Een rechtstreekse verbinding met %s-domeinen is standaard geblokkeerd."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr "Verbonden met %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Er wordt verbinding gemaakt met %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Kon de socket voor %s (f=%u t=%u p=%u) niet aanmaken"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Kan de verbinding met %s:%s (%s) niet aangaan."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Mislukt"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Kon geen verbinding maken met %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Kon geen verbinding maken met %s:%s (%s); de verbinding verliep"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Er wordt verbinding gemaakt met %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Kon '%s' niet vinden"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Tijdelijke fout bij het opzoeken van '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Systeemfout bij het opzoeken van '%s:%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Er gebeurde iets raars bij het opzoeken van '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Kan geen verbinding maken met %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Kon status niet bepalen"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Ongeldige URI. Lokale URI's mogen niet beginnen met //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Bezig met aanmelden"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Kan de naam van de peer niet vaststellen"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Kan de lokale naam niet vaststellen"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "De verbinding is door de server geweigerd met bericht: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER (gebruiker) mislukt; bericht van de server: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS (wachtwoord) mislukt; bericht van de server: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Er was een proxy-server opgegeven, maar geen aanmeldscript. Acquire::ftp::"
+"ProxyLogin is leeg."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+"Opdracht '%s' uit het aanmeldscript is mislukt; bericht van de server: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE mislukt; bericht van de server: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "De verbinding is verlopen"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "De verbinding is verbroken door de server"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Een reactie deed de buffer overlopen."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protocolfouten"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Kon geen socket aanmaken"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Kon de datasocket niet verbinden. De verbinding verliep"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Kon de passieve socket niet verbinden."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo kon geen luistersocket verkrijgen"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Kon geen socket binden"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Kon niet luisteren op de socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Kon de socketnaam niet vaststellen"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Kan PORT-commando niet verzenden"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Onbekende adresfamilie %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT is mislukt; bericht van de server: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Verbinding met de datasocket is verlopen"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Kan de verbinding niet aanvaarden"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Probleem bij het frommelen van het bestand"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Kan het bestand niet ophalen; bericht van de server: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Datasocket verliep"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Datatransfer is mislukt; bericht van de server: %s"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Zoekopdracht"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Mislukking bij aanroepen van "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Ondertekend bestand is ongeldig; kreeg '%s' (vereist het netwerk "
+"authenticatie?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Er is tenminste één ongeldige ondertekening gevonden."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Interne fout: ondertekening is goed, maar kon de vingerafdruk van de sleutel "
+"niet bepalen?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Kon 'apt-key' niet uitvoeren om ondertekening te verifiëren (is gnupg "
+"geïnstalleerd?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Onbekende fout bij het uitvoeren van apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+"De ondertekening door sleutel %s maakt gebruik van een zwak hash-algoritme "
+"(%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "De volgende ondertekeningen waren ongeldig:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"De volgende ondertekeningen konden niet geverifieerd worden omdat de "
+"publieke sleutel niet beschikbaar is:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Fout bij het schrijven naar het bestand"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+"Fout bij het lezen van de server. De andere kant heeft de verbinding gesloten"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Fout bij het lezen van de server"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Fout bij het schrijven naar bestand"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Selectie is mislukt"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Verbinding verliep"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Fout bij het schrijven naar uitvoerbestand"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Instellen van de aanpassingstijd is mislukt"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Verbinding werd voortijdig afgebroken"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Lege bestanden kunnen geen geldige archieven zijn"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Ongeldige koptekst voor archiefonderdeel %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s is verwijderd"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Pakketbestand %s is niet meer gesynchroniseerd."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "De pakketindex-bestanden zijn beschadigd. Er is geen 'Filename:'-veld "
+#~ "voor pakket %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Geen spiegelbestand '%s' gevonden "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Kan spiegelbestand '%s' niet lezen"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Geen vermelding gevonden in spiegelbestand '%s'"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Spiegelserver: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Configuratiebestand %s wordt geopend"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s wordt geopend"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Kon de verwachte regel '%s' in het Release-bestand niet vinden (Foute "
+#~ "regel in het bestand sources.list of bestand in een ongeldig formaat)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr ""
+#~ "Er zijn vereisten waaraan niet voldaan is. Probeer --fix-broken te "
+#~ "gebruiken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "U wilt waarschijnlijk 'apt --fix-broken install' uitvoeren om de volgende "
+#~ "zaken op te lossen:"
+
+#~ msgid "Failed to fetch %s %s\n"
+#~ msgstr "Ophalen van %s is mislukt %s\n"
+
+#~ msgid "(not found)"
+#~ msgstr "(niet gevonden)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Pakketpin: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Er zijn geen publieke sleutels beschikbaar voor de volgende sleutel-"
+#~ "ID's:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "De pakketbron '%s' is niet ondertekend."
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "De vereiste %s van %s kan niet voldaan worden omdat %s niet toegestaan is "
+#~ "voor de pakketten van '%s'"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "De vereiste %s van %s kan niet voldaan worden omdat pakket %s onvindbaar "
+#~ "is"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Voldoen van vereiste %s van %s is mislukt: geïnstalleerd pakket %s is te "
+#~ "nieuw"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "De vereiste %s van %s kan niet voldaan worden omdat de beschikbare versie "
+#~ "van pakket %s niet aan de versievereisten voldoet"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "De vereiste %s van %s kan niet voldaan worden omdat er geen geschikte "
+#~ "versie is van pakket %s"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Voldoen van de vereiste %s van %s is mislukt: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Bouwvereisten voor %s konden niet voldaan worden."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Probleem bij het ontkoppelen van %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Ontkoppelen van %s is mislukt"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Gebruik: apt-cache [opties] opdracht\n"
+#~ " apt-cache [opties] show pakket1 [pakket2 ...]\n"
+#~ "\n"
+#~ "apt-cache is een basaal hulpmiddel waarmee u informatie kunt\n"
+#~ "opvragen uit de binaire cachebestanden van APT\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Opdrachten:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Opties:\n"
+#~ " -h Deze hulptekst.\n"
+#~ " -p=? De pakketcache.\n"
+#~ " -s=? De broncache.\n"
+#~ " -q Voortgangsindicator uitschakelen.\n"
+#~ " -i Toon alleen belangrijke vereisten voor de 'unmet'-opdracht.\n"
+#~ " -c=? Lees dit configuratiebestand\n"
+#~ " -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp\n"
+#~ "Raadpleeg de man-pagina's van apt-cache(8) en apt.conf(5) voor meer "
+#~ "informatie.\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Gebruik: apt [opties] opdracht\n"
+#~ "\n"
+#~ "CLI voor apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Opties:\n"
+#~ " -h Deze hulptekst\n"
+#~ " -q Logbare uitvoer - geen voortgangsindicator\n"
+#~ " -qq Geen uitvoer behalve van foutmeldingen\n"
+#~ " -s Doe-niets. Toont alleen wat gedaan zou worden.\n"
+#~ " -f lees/schrijf auto/manueel markeringen in het vermelde bestand\n"
+#~ " -c=? Lees dit configuratiebestand\n"
+#~ " -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp\n"
+#~ "Raadpleeg de man-pagina's apt-mark(8) en apt.conf(5) voor meer informatie."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opties:\n"
+#~ " -h Deze hulptekst.\n"
+#~ " -c=? Lees dit configuratiebestand\n"
+#~ " -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Opties:\n"
+#~ " -h Deze hulptekst\n"
+#~ " -q Logbare uitvoer - geen voortgangsindicator\n"
+#~ " -qq Geen uitvoer behalve van foutmeldingen\n"
+#~ " -s Doe-niets. Toont alleen wat gedaan zou worden.\n"
+#~ " -f lees/schrijf auto/manueel markeringen in het vermelde bestand\n"
+#~ " -c=? Lees dit configuratiebestand\n"
+#~ " -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp\n"
+#~ "Raadpleeg de man-pagina's apt-mark(8) en apt.conf(5) voor meer informatie."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Gebruik: apt-sortpkgs [opties] bestand1 [bestand2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is een simpel hulpmiddel om pakketbestanden te sorteren.\n"
+#~ "De -s optie wordt gebruikt om aan te geven om welk soort bestand het "
+#~ "gaat.\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ " -h Deze hulptekst\n"
+#~ " -s Sorteer bronbestanden\n"
+#~ " -c=? Lees dit configuratiebestand\n"
+#~ " -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Dochterproces is mislukt"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "U dient minstens 1 paar van url/bestandsnaam op te geven"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Aanmaken van pijpen is mislukt"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Uitvoeren van gzip is mislukt "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s voor %s gecompileerd op %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Aanmaken van FILE* is mislukt"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Niet juist gevormd element %lu in bronlijst %s (URI-verwerking)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Niet juist gevormde regel %lu in bronlijst %s ([optie] onbegrijpelijk)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Niet juist gevormde regel %lu in bronlijst %s ([optie] te kort)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Niet juist gevormde regel %lu in bronlijst %s ([%s] is geen toekenning)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Niet juist gevormde regel %lu in bronlijst %s ([%s] heeft geen sleutel)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Niet juist gevormde regel %lu in bronlijst %s ([%s] sleutel %s heeft geen "
+#~ "waarde)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Niet juist gevormde regel %lu in bronlijst %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Niet juist gevormde regel %lu in bronlijst %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Niet juist gevormde regel %lu in bronlijst %s (URI-verwerking)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Niet juist gevormde regel %lu in bronlijst %s (absolute dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Niet juist gevormde regel %lu in bronlijst %s (ontleding van dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Pakket %s %s werd niet gevonden bij het verwerken van de "
+#~ "bestandsafhankelijkheden"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Kon de status van de bronpakketlijst %s niet opvragen"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Voorziene bestanden worden verzameld"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Kon de hash-som voor '%s' niet vinden in het Release-bestand"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Leveranciersblok %s bevat geen vingerafdruk"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Totale hoeveelheid vereisten-versieruimte: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "U heeft niet voldoende vrije schijfruimte op %s"
+
+#~ msgid "Done"
+#~ msgstr "Klaar"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Geen sleutelring geïnstalleerd in %s."
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "Is stdout een terminal?"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Interne fout, AllUpgrade heeft dingen stukgemaakt"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s is geen geldig DEB-pakket."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Er wordt gebruik gemaakt van CD-aankoppelpunt %s\n"
+#~ "CD wordt aangekoppeld\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Kon %s niet patchen met mmap of met een bestandsoperatie - de patch lijkt "
+#~ "beschadigd te zijn."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Kon %s niet patchen met mmap (maar zonder mmap-specifieke fout) - de "
+#~ "patch lijkt beschadigd te zijn."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Negeer niet beschikbare doelrelease '%s' van pakket '%s'"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Dit is geen geldig DEB-archief, het bevat geen '%s', '%s', of '%s' "
+#~ "onderdeel"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5-som komt niet overeen"
+
+#, fuzzy
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Er kon geen bestand gevonden worden voor pakket %s. Dit kan betekenen dat "
+#~ "u dit pakket handmatig moet repareren."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Kon logbestand niet wegschrijven, openpty() is mislukt (/dev/pts niet "
+#~ "aangekoppeld?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Niet-bestaand bestand %s wordt overgeslagen"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Verwijderen van %s is mislukt"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Kan %s niet aanmaken"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Opvragen van de status van %sinfo is mislukt"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "De 'info'- en de 'temp'-mappen dienen op hetzelfde bestandsysteem te staan"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Verspringen naar de beheermap %sinfo is mislukt"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Interne fout bij het ophalen van de pakketnaam"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Bestandslijst worden ingelezen"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Openen van het lijstbestand '%sinfo/%s' is mislukt. Als u dit bestand "
+#~ "niet kunt herstellen, dient u het leeg te maken en daarna onmiddellijk "
+#~ "dezelfde versie van het pakket te installeren!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Lezen van lijstbestand %sinfo/%s is mislukt"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Interne fout bij het verkrijgen van een knoop"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Openen van het omleidingsbestand %sdiversions is mislukt"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Het pakketcachebestand is beschadigd"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Ongeldige regel in het omleidingsbestand: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Interne fout bij het toevoegen van een omleiding"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "De pakketcache dient eerst geïnitialiseerd te zijn"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Vinden van een 'Package:'-koptekst is mislukt, regel %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Foute 'ConfFile'-sectie in het statusbestand. Regel %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Fout bij het parsen van de MD5. regel %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Kon niet wijzigen naar %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Lokaliseren van een geldig 'control'-bestand is mislukt"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Kon geen pijp openen voor %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Leesfout door proces %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Enkele koptekstregel ontvangen met meer dan %u karakters"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Let op: Dit wordt automatische en bewust door dpkg gedaan."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Misvormde voorrangsingang %s op regel %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Misvormde voorrangsingang %s op regel %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Misvormde voorrangsingang %s op regel %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "decompressor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "lees, de laatste te lezen %lu zijn niet beschikbaar"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "schrijf, de laatste %lu konden niet weggeschreven worden"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Kon onmiddelijke configuratie van reeds uitgepakte '%s' niet uitvoeren. "
+#~ "Voor details zie 'man 5 apt.conf', onder APT::Immediate-Configure."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Fout tijdens verwerken van %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Fout tijdens verwerken van %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Fout tijdens verwerken van %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Fout tijdens verwerken van %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Fout tijdens verwerken van %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Fout tijdens verwerken van %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Fout tijdens verwerken van %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Fout tijdens verwerken van %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Fout tijdens verwerken van %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Fout tijdens verwerken van %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Interne fout, kon onderdeel niet vinden"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Interne fout, de groep '%s' heeft geen installeerbaar pseudopakket"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Release-bestand is verlopen, %s (ongeldig sinds %s) wordt genegeerd"
diff --git a/po/nn.po b/po/nn.po
new file mode 100644
index 0000000..26feb75
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,4292 @@
+# translation of apt_nn.po to Norwegian nynorsk
+# translation of apt.po to Norwegian nynorsk
+# translation of nn.po to Norwegian Nynorsk
+# translation of apt.po to Norwegian Nynorsk
+# Gaute Hvoslef Kvalnes <gaute@verdsveven.com>, 2003.
+# Havard Korsvoll <korsvoll@skulelinux.no>, 2004, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2005-02-14 23:30+0100\n"
+"Last-Translator: Havard Korsvoll <korsvoll@skulelinux.no>\n"
+"Language-Team: Norwegian nynorsk <i18n-nn@lister.ping.uio.no>\n"
+"Language: nn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Ugyldig arkivsignatur"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Feil ved lesing av arkivmedlemshovud"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Ugyldig arkivmedlemshovud"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arkivet er for kort"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Klarte ikkje lesa arkivhovuda"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Fann ikkje pakken %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "ydelagt arkiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar-sjekksummen mislukkast, arkivet er ydelagt"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Ukjend TAR-hovud type %u, medlem %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Dette er ikkje eit gyldig DEB-arkiv, manglar %s-medlemmen"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Intern feil, fann ikkje medlemmen %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Kontrollfila kan ikkje tolkast"
+
+#: apt-inst/dirstream.cc
+#, fuzzy, c-format
+msgid "Failed to write file %s"
+msgstr "Klarte ikkje skriva fila %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Klarte ikkje lukka fila %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Stigen %s er for lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Pakkar ut %s meir enn in gong"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Katalogen %s er avleidd"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Pakken prver skriva til avleiingsmlet %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Avleiingsstigen er for lang"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Klarte ikkje f status til %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Klarte ikkje endra namnet p %s til %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Katalogen %s vert bytt ut med ein ikkje-katalog"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Fann ikkje noden i nkkelbtta"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Stigen er for lang"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Skriv over pakketreff utan versjon for %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Fila %s/%s skriv over den tilsvarande fila i pakken %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Klarte ikkje lesa %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Klarte ikkje f status til %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode vart kalla p ein node som framleis er lenkja"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Fann ikkje nkkelelementet."
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Klarte ikkje tildela avleiing"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Intern feil i AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Prver skriva over ei avleiing, %s -> %s og %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dobbel tilleggjing av avleiing %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Dobbel oppsettsfil %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Katalogen %s er avleidd"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Katalogen %s er avleidd"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Katalogen %s er avleidd"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Katalogen %s er avleidd"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Katalogen %s er avleidd"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Klarte ikkje lesa lenkja %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Hash Sum mismatch"
+msgstr "Feil MD5-sum"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "endring av namn mislukkast, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Feil storleik"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Ugyldig operasjon %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Skrivefeil"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Klarte ikkje henta %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Fann ikkje fila for pakken %s. Det kan henda du m fiksa denne pakken sjlv "
+"(fordi arkitekturen manglar)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Koplar til %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Finn ikkje metodedrivaren %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Metoden %s starta ikkje rett"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Skifte av medum: Set inn plata merkt\n"
+" %s\n"
+"i stasjonen %s og trykk Enter.\n"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Listekatalogen %s manglar."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Arkivkatalogen %s manglar."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Klarte ikkje lsa listekatalogen"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Indeksfiltypen %s er ikkje sttta"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Les filliste"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "Pakken %s m installerast p nytt, men arkivet finst ikkje."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Feil, pkgProblemResolver::Resolve har laga brot. Dette kan skuldast pakkar "
+"som er haldne tilbake."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Klarte ikkje retta opp problema. Nokre ydelagde pakkar er haldne tilbake."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Klarte ikkje tolka eller opna pakkelista eller tilstandsfila."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Du vil kanskje prva retta p desse problema ved kyra apt-get update."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Kjeldelista kan ikkje lesast."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Regex-kompileringsfeil - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Fann ikkje utgva %s av %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Fann ikkje versjonen %s av %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Fann ikkje pakken %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Fann ikkje pakken %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Fann ikkje pakken %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Finn ikkje pakken %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Linja %u i kjeldelista %s er for lang."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Avmonterer CD-ROM ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Brukar monteringspunktet %s for CD-ROM\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Ventar p disk ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Monterer CD-ROM ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identifiserer ... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Lagra etikett: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Leitar etter indeksfiler p disken ...\n"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr "Fann %i pakkeindeksar, %i kjeldeindeksar og %i signaturar\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "Found label '%s'\n"
+msgstr "Lagra etikett: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Det er ikkje eit gyldig namn, prv igjen.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Disken vert kalla: \n"
+"%s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopierer pakkelister ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Skriv ny kjeldeliste\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Kjeldelisteoppfringar for denne disken er:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Klarte ikkje byta til %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Klarte ikkje f status p %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Klarte ikkje f status til monteringspunktet %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Klarte ikkje f status til CD-ROM"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Kjenner ikkje kommandolinjevalet %c (fr %s)."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Skjnar ikkje kommandolinjevalet %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Kommandolinjevalet %s er ikkje boolsk"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Valet %s krev eit argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Val %s: Spesifikasjonen av oppsettselementet m ha ein =<verdi>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Valet %s m ha eit heiltalsargument, ikkje %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Valet %s er for langt"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Skjnar ikkje %s. Prv true eller false."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Ugyldig operasjon %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Ukjend typeforkorting: %c"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaksfeil %s:%u: Blokka startar utan namn."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaksfeil %s:%u: Misforma tagg"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaksfeil %s:%u: Ekstra rot etter verdien"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Syntaksfeil %s:%u: Direktiva kan berre liggja i det vste nivet"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaksfeil %s:%u: For mange nsta inkluderte filer"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaksfeil %s:%u: Inkludert herifr"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaksfeil %s:%u: Direktivet %s er ikkje sttta"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "Syntaksfeil %s:%u: Direktiva kan berre liggja i det vste nivet"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaksfeil %s:%u: Ekstra rot til slutt i fila"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problem ved oppheving av lenkje til fila"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Brukar ikkje lsing for den skrivebeskytta lsefila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Klarte ikkje opna lsefila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Brukar ikkje lsing for den nfs-monterte lsefila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Klarte ikkje lsa %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Venta p %s, men den fanst ikkje"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Underprosessen %s mottok ein segmenteringsfeil."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Underprosessen %s mottok ein segmenteringsfeil."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Underprosessen %s returnerte ein feilkode (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Underprosessen %s avslutta uventa"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Lesefeil"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Skrivefeil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problem ved lsing av fila"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Klarte ikkje oppretta underprosessen IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Klarte ikkje kyra komprimeringa "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Klarte ikkje opna fila %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Klarte ikkje opna ryr for %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lese, har framleis %lu att lesa, men ingen att"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "skrive, har framleis %lu att skrive, men klarte ikkje"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Problem ved lsing av fila"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problem ved synkronisering av fila"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problem ved synkronisering av fila"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Klarte ikkje f status til %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Klarte ikkje skriva til %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Kan ikkje utfra mmap p ei tom fil"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Klarte ikkje laga mmap av %lu byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Klarte ikkje opna ryr for %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Klarte ikkje opna %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Klarte ikkje starta "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Klarte ikkje laga mmap av %lu byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "Klarte ikkje skriva fila %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s ... Feil"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s ... Ferdig"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s ... Ferdig"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Fann ikkje utvalet %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Klarte ikkje tolka pakkefila %s (1)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Merk, vel %s i staden for %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Ugyldig linje i avleiingsfila: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Klarte ikkje tolka pakkefila %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Klarte ikkje lsa listekatalogen"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Klarte ikkje lsa listekatalogen"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Preparing %s"
+msgstr "Opnar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Preparing to configure %s"
+msgstr "Opnar oppsettsfila %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Opnar oppsettsfila %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installed %s"
+msgstr " Installert: "
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Configuring %s"
+msgstr "Koplar til %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Directory '%s' missing"
+msgstr "Listekatalogen %s manglar."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Klarte ikkje opna fila %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Unpacking %s"
+msgstr "Opnar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr " Installert: "
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Removing %s"
+msgstr "Opnar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "Klarte ikkje fjerna %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removed %s"
+msgstr "Klarte ikkje fjerna %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Klarte ikkje skriva til %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Byggjer kravtre"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Kandidatversjonar"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Genererer kravforhold"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "Flettar informasjon om tilgjengelege pakkar"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Klarte ikkje opna %s"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Klarte ikkje skriva fila %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Skreiv %i postar.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Skreiv %i postar med %i manglande filer.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Skreiv %i postar med %i filer som ikkje passa\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Skreiv %i postar med %i manglande filer og %i filer som ikkje passa\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Feil MD5-sum"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Pakkesystemet %s er ikkje sttta"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Klarte ikkje avgjera ein eigna pakkesystemtype"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Klarte ikkje opna fila %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Denne installasjonen vil verta nydd til mellombels fjerna den ndvendige "
+"pakken %s p grunn av ei konflikt/forkrav-lkkje. Dette er ofte uheldig, men "
+"om du verkeleg vil gjera det, kan du bruka innstillinga APT::Force-"
+"LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Tomt pakkelager"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Pakkelagerfila er ydelagd"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Versjonen til pakkelagerfila er ikkje kompatibel"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "APT stttar ikkje versjonssystemet %s"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Pakkelageret er bygd for ein annan arkitektur"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Pakkelagerfila er ydelagd"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Krav"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Forkrav"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Forslag"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Konflikt"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Tilrdingar"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Byter ut"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Foreldar"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "viktig"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "pkravd"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "vanleg"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "tillegg"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "valfri"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Mellomlageret brukar eit inkompatibelt versjonssystem"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Feil ved behandling av %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Jss, du har overgtt talet p pakkenamn som APT kan handtera."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Jss, du har overgtt talet p versjonar som APT kan handtera."
+
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Jss, du har overgtt talet p versjonar som APT kan handtera."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Jss, du har overgtt talet p krav som APT kan handtera."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Les pakkelister"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IU-feil ved lagring av kjeldelager"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Indeksfiltypen %s er ikkje sttta"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Ugyldig oppslag i innstillingsfila, manglar pakkehovud"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Skjnar ikkje spikringstypen %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Ingen prioritet (eller null) oppgitt for spiker"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Misforma overstyring %s linje %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Misforma linje %u i kjeldelista %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typen %s er ukjend i linja %u i kjeldelista %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Misforma linje %u i kjeldelista %s (type)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typen %s er ukjend i linja %u i kjeldelista %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Du m leggja nokre kjelde-URI-ar i fila sources.list."
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Klarte ikkje lasta ned nokre av indeksfilene. Dei er ignorerte, eller gamle "
+"filer er brukte i staden."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Reknar ut oppgradering"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Treff:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Hent:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Feil:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Henta %sB p %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Arbeider]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Skifte av medum: Set inn plata merkt\n"
+" %s\n"
+"i stasjonen %s og trykk Enter.\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Rettar p krav ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " mislukkast."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Klarte ikkje retta p krav"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Klarte ikkje minimera oppgraderingsmengda"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Ferdig"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Du vil kanskje prva retta p desse ved kyra apt --fix-broken install."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Nokre krav er ikkje oppfylte. Du kan prva apt --fix-broken install (eller "
+"velja ei lysing)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Merk, vel %s i staden for regex %s\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Merk, vel %s i staden for regex %s\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Merk, vel %s i staden for regex %s\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Pakken %s er ein virtuell pakke, tilbydd av:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Installert]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Kandidatversjonar"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Du m velja ein som skal installerast."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Det finst ingen tilgjengeleg versjon av pakken %s, men han er nemnt\n"
+"av ein annan pakke. Dette tyder at pakket manglar, er gjort overfldig\n"
+"eller er berre tilgjengeleg fr ei anna kjelde\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Dei flgjande pakkane kan brukast i staden:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Det finst ingen installasjonskandidat for pakken %s"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "Pakken %s er ikkje installert, og vert difor ikkje fjerna\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Pakken %s er ikkje installert, og vert difor ikkje fjerna\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Merk, vel %s i staden for %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "APT har superku-krefter."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Fann ingen pakkar"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "TVARING: Klarer ikkje autentisere desse pakkane."
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Nokre pakkar kunne ikkje bli autentisert"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Installer desse pakkane utan verifikasjon?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Det oppstod problem, og -y vart brukt utan --force-yes"
+
+#: apt-private/private-download.cc
+#, fuzzy, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Du har ikkje nok ledig plass i %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Du har ikkje nok ledig plass i %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Klarte ikkje lsa nedlastingskatalogen"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Nokre av pakkane kunne ikkje installerast. Dette kan koma av at du har\n"
+"valt ein umogleg situasjon. Dersom du brukar den ustabile utgva av\n"
+"distribusjonen, kan det g henda at nokre av pakkane som trengst ikkje\n"
+"er laga enno eller at dei framleis ligg i Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Flgjande informasjon kan hjelpa med lysa situasjonen:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "ydelagde pakkar"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Klarte ikkje henta nokre av arkiva. Du kan prva med apt-get update eller "
+"--fix-missing."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Nokre pakkar m fjernast, men fjerning er sltt av."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Det oppstod problem, og -y vart brukt utan --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Det oppstod problem, og -y vart brukt utan --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal error, Ordering didn't finish"
+msgstr "Intern feil ved tilleggjing av avleiing"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "M henta %sB/%sB med arkiv.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "M henta %sB med arkiv.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Etter utpakking vil %sB meir diskplass verta brukt.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Etter utpakking vil %sB meir diskplass verta frigjort.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"Trivial Only var spesifisert, men dette er ikkje noka triviell handling."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ja, gjer som eg seier!"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Du er i ferd med utfra ei handling som kan vera skadeleg.\n"
+"For halda fram, m du skriva nyaktig %s.\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Avbryt."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Vil du halda fram?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Klarte ikkje henta nokre av filene"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Nedlastinga er ferdig i nedlastingsmodus"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing og byte av medium er ikkje sttta for tida"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Klarte ikkje retta opp manglande pakkar."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Avbryt installasjon."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Intern feil. AllUpgrade ydelagde noko"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Dei flgjande NYE pakkane vil verta installerte:"
+msgstr[1] "Dei flgjande NYE pakkane vil verta installerte:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Dei flgjande NYE pakkane vil verta installerte:"
+msgstr[1] "Dei flgjande NYE pakkane vil verta installerte:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Dei flgjande tilleggspakkane vil verta installerte:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Fresltte pakkar:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Tilrdde pakkar"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Hoppar over %s, for den er installert fr fr og ikkje sett til "
+"oppgradering.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Hoppar over %s, for den er installert fr fr og ikkje sett til "
+"oppgradering.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "%s kan ikkje installerast p nytt, for pakken kan ikkje lastast ned.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "Den nyaste versjonen av %s er installert fr fr.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "men %s skal installerast"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Vald versjon %s (%s) for %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Vald versjon %s (%s) for %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Installert]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "men %s er installert"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "men %s skal installerast"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "men lt seg ikkje installera"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "men er ein virtuell pakke"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "men skal ikkje installerast"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "men er ikkje installert"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " eller"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Flgjande pakkar har krav som ikkje er oppfylte:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Dei flgjande NYE pakkane vil verta installerte:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Dei flgjande pakkane vil verta FJERNA:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Dei flgjande pakkane er haldne tilbake:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Dei flgjande pakkane vil verta oppgraderte:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Dei flgjande pakkane vil verta NEDGRADERTE:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Dei flgjande pakkane som er haldne tilbake vil verta endra:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (fordi %s)"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"TVARING: Dei flgjande ndvendige pakkane vil verta fjerna.\n"
+"Dette br IKKJE gjerast utan at du er fullstendig klar over kva du gjer!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu oppgraderte, %lu nyleg installerte, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu installerte p nytt, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu nedgraderte, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu skal fjernast og %lu skal ikkje oppgraderast.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu ikkje fullstendig installerte eller fjerna.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[J/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[j/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "J"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "Du m oppgi nyaktig eitt mnster"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Pakkefiler:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Mellomlageret er ute av takt, kan ikkje x-referera ei pakkefil"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Spikra pakkar:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Installert: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ingen)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versjonstabell:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Fann ikkje pakken %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Fann ikkje pakken %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Fann ikkje pakken %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Klarte ikkje f status p kjeldepakkelista %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Du m velja minst in pakke som kjeldekoden skal hentast for"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Finn ingen kjeldepakke for %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Hoppar over utpakking av kjeldekode som er utpakka fr fr i %s\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "M henta %sB/%sB med kjeldekodearkiv.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "M henta %sB med kjeldekodearkiv.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Hent kjeldekode %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Klarte ikkje henta nokre av arkiva."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Hoppar over utpakking av kjeldekode som er utpakka fr fr i %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Utpakkingskommandoen %s mislukkast.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Byggjekommandoen %s mislukkast.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Klarte ikkje henta byggjekrav for %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s har ingen byggjekrav.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "Du m velja minst ein pakke som byggjekrava skal sjekkast for"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Klarte ikkje behandla byggjekrava"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Klarte ikkje behandla byggjekrava"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Klarte ikkje endra namnet p %s til %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Pakken %s versjon %s har eit krav som ikkje er oppfylt:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Oppdateringskommandoen tek ingen argument"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Oppdateringskommandoen tek ingen argument"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Tal p pakkenamn: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Tal p pakkenamn: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Vanlege pakkar: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Reine virtuelle pakkar: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Enkle virtuelle pakkar: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Samansette virtuelle pakkar: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Manglar: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Tal p einskildversjonar: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "Tal p einskildversjonar: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Tal p krav: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Tal p ver./fil-forhold: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "Tal p ver./fil-forhold: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Tal p tilbyr-forhold: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Tal p strengar med jokerteikn: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Slingringsmon: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Brukt plass i alt: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Vis data om kjeldekoden."
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Sk gjennom pakkelista etter eit regulrt uttrykk."
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Vis r informasjon om krava til ein pakke."
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Vis baklengs kravinformasjon for ein pakke"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Vis ei oversikt over pakken."
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Vis ei liste over alle pakkenamn."
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Vis regelinnstillingar."
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr ""
+"Skifte av medum: Set inn plata merkt\n"
+" %s\n"
+"i stasjonen %s og trykk Enter.\n"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Klarte ikkje endra namnet p %s til %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Ikkje parvise argument"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Bruk: apt-config [val] kommando\n"
+"\n"
+"apt-config er eit enkelt verkty for lesa oppsettsfila til APT.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Bruk: apt-extracttemplates fil1 [fil2 ...]\n"
+"\n"
+"apt-extracttemplates er eit verkty for henta ut informasjon om\n"
+"oppsett og malar fr Debian-pakkar.\n"
+"\n"
+"Val:\n"
+" -h Vis denne hjelpeteksten\n"
+" -t Vel mellombels katalog\n"
+" -c=? Les denne innstillingsfila.\n"
+" -o=? Set ei vilkrleg innstilling, t.d. -o dir::cache=/tmp.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Finn ikkje debconf-versjonen. Er debconf installert?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Fann ikkje pakken %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Intern feil. AllUpgrade ydelagde noko"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Sttta modular:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Bruk: apt-get [val] kommando\n"
+" apt-get [val] install|remove pakke1 [pakke2 ...]\n"
+" apt-get [val] source pakke1 [pakke2 ...]\n"
+"\n"
+"apt-get er eit enkelt grensesnitt til bruk fr kommandolinja for lasta\n"
+"ned og installera pakkar. Dei vanlegaste kommandoane er update og\n"
+"install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Hent nye pakkelister."
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Utfr ei oppgradering."
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Installer nye pakkar (bruk pakkenamn, ikkje filnamn (foo.deb))."
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Installer nye pakkar (bruk pakkenamn, ikkje filnamn (foo.deb))."
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Fjern pakkar."
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+#, fuzzy
+msgid "Remove automatically all unused packages"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Oppgrader distribusjonen, les apt-get(8)."
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Flg rda fr dselect."
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Oppfyll byggjekrava for kjeldepakkar."
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Slett nedlasta arkivfiler."
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Slett gamle, nedlasta arkivfiler."
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Stadfest at det ikkje finst krav som ikkje er oppfylte."
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Last ned kjeldekode fr arkiva."
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Du m velja minst in pakke som kjeldekoden skal hentast for"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Bruk: apt-extracttemplates fil1 [fil2 ...]\n"
+"\n"
+"apt-extracttemplates er eit verkty for henta ut informasjon om\n"
+"oppsett og malar fr Debian-pakkar.\n"
+"\n"
+"Val:\n"
+" -h Vis denne hjelpeteksten\n"
+" -t Vel mellombels katalog\n"
+" -c=? Les denne innstillingsfila.\n"
+" -o=? Set ei vilkrleg innstilling, t.d. -o dir::cache=/tmp.\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Bruk: apt-extracttemplates fil1 [fil2 ...]\n"
+"\n"
+"apt-extracttemplates er eit verkty for henta ut informasjon om\n"
+"oppsett og malar fr Debian-pakkar.\n"
+"\n"
+"Val:\n"
+" -h Vis denne hjelpeteksten\n"
+" -t Vel mellombels katalog\n"
+" -c=? Les denne innstillingsfila.\n"
+" -o=? Set ei vilkrleg innstilling, t.d. -o dir::cache=/tmp.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "men er ikkje installert"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Dei flgjande NYE pakkane vil verta installerte:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "Den nyaste versjonen av %s er installert fr fr.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "Den nyaste versjonen av %s er installert fr fr.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Klarte ikkje opna %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Dei flgjande NYE pakkane vil verta installerte:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Ukjend pakkeoppslag"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Les pakkelister"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Spikra pakkar:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Spikra pakkar:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "ydelagde pakkar"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "men %s skal installerast"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Flettar informasjon om tilgjengelege pakkar"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Drleg standardinnstilling"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Trykk Enter for halda fram."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Nokre feil oppstod ved utpakking. Dei installerte pakkane vert no"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "sette opp. Dette kan fra til flgjefeil eller feil p grunn av"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "krav som ikkje er oppfylte. Det gjer ikkje noko, berre feila ovanfor"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "er viktige. Rett opp dei feila og [i]nstaller p nytt."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Flettar informasjon om tilgjengelege pakkar"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Lista over pakkeutvidingar er for lang"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Feil ved lesing av katalogen %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lista over kjeldeutvidingar er for lang"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Feil ved skriving av topptekst til innhaldsfila"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Feil ved lesing av %s"
+
+#: ftparchive/apt-ftparchive.cc
+#, fuzzy
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Bruk: apt-ftparchive [val] kommando\n"
+"Kommandoar: packages binrstig [overstyringsfil [stigprefiks]]\n"
+" sources kjeldesti [overstyringsfil [stiprefiks]]\n"
+" contents sti\n"
+" generate config [grupper]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive opprettar indeksfiler for Debian-arkiv. Mange ulike\n"
+"mtar kan brukast, fr heilautomatiske til funksjonelle erstattingar\n"
+"for dpkg-scanpackages og dpkg-scansources.\n"
+"\n"
+"apt-ftparchive opprettar Package-filer fr eit tre med .debs-filer.\n"
+"Package-fila inneheld alle kontrollfelta fr kvar pakke i tillegg til\n"
+"MD5-nkkel og filstorleik. Du kan bruka ei overstyringsfil for tvinga\n"
+"gjennom verdiar for prioritet og kategori.\n"
+"\n"
+"apt-ftparchive kan p same mten oppretta Sources-filer fr eit tre\n"
+"med .dscs-filer. Du kan bruka ei overstyringsfil med --source-override.\n"
+"\n"
+"Kommandoane packages og sources skal kyrast i rota av katalogtreet.\n"
+"Binrstien skal peika til toppkatalogen i det rekursive sket, og\n"
+"overstyringsfila skal innehalda innstillingar for overstyring.\n"
+"Stiprefikset vert lagt til filnamnfelta dersom det er oppgjeve. Her er\n"
+"eit dme p bruk i Debian-arkivet:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Val:\n"
+" -h Vis denne hjelpeteksten.\n"
+" --md5 Styrer MD5-genereringa.\n"
+" -s=? Overstyringsfil for kjeldekode.\n"
+" -q Stille.\n"
+" -d=? Vel ein anna mellomlagerdatabase.\n"
+" --no-delink Bruk avlusingsmodus med delinking.\n"
+" --contents Styrer opprettinga av innhaldsfila.\n"
+" -c=? Les denne oppsettsfila.\n"
+" -o=? Set ei vilkrleg innstilling."
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Ingen utval passa"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Enkelte filer manglar i pakkefilgruppa %s"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Databasen er ydelagd. Filnamnet er endra til %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB er for gammal, forskjer oppgradere %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Klarte ikkje opna DB-fila %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Klarte ikkje lesa lenkja %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arkivet har ingen kontrollpost"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Klarte ikkje f peikar"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Klarte ikkje tildela minne"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Ukjend komprimeringsalgoritme %s"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Komprimert utdata %s treng eit komprimeringssett"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Klarte ikkje oppretta IPC-ryr til underprosessen"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Klarte ikkje gafla"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Komprimer barn"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Intern feil, klarte ikkje oppretta %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Klarte ikkje kommunisera med underprosess/fil"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Klarte ikkje lesa under utrekning av MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Klarte ikkje opna %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Misforma overstyring %s linje %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Klarte ikkje lesa overstyringsfila %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Misforma overstyring %s linje %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Misforma overstyring %s linje %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Misforma overstyring %s linje %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr ": Klarte ikkje lesa katalogen %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr ": Klarte ikkje f status til %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "F: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr ": "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "F: Det er feil ved fila "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Klarte ikkje sl opp %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Treklatring mislukkast"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Klarte ikkje opna %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Klarte ikkje lenkja %s til %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink-grensa p %sB er ndd.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arkivet har ikkje noko pakkefelt"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s har inga overstyringsoppfring\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s-vedlikehaldaren er %s, ikkje %s\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s har inga overstyringsoppfring\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s har inga overstyringsoppfring\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Ventar p hovud"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP-tenaren sende eit ugyldig svarhovud"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "ydelagd hovudlinje"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP-tenaren sende eit ugyldig Content-Length-hovud"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP-tenaren sende eit ugyldig Content-Range-hovud"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Denne HTTP-tenaren har ydelagd sttte for omrde"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Ukjend datoformat"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "ydelagde hovuddata"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Sambandet mislukkast"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Intern feil"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Klarte ikkje lesa CD-ROM-databasen %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Bruk apt-cdrom for gjera denne CD-plata tilgjengeleg for APT. Du kan "
+"ikkje bruka apt-get update til leggja til nye CD-plater."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Feil CD-plate"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Klarte ikkje montera CD-plata i %s. Det kan henda plata framleis er i bruk."
+
+#: methods/cdrom.cc
+#, fuzzy
+msgid "Disk not found."
+msgstr "Fann ikkje fila"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Fann ikkje fila"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Koplar til %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Koplar til %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Klarte ikkje oppretta sokkel for %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Klarte ikkje initiera sambandet til %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Mislukkast"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Klarte ikkje kopla til %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Klarte ikkje kopla til %s:%s (%s), tidsavbrot p sambandet"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Koplar til %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Klarte ikkje sl opp %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Mellombels feil ved oppslag av %s"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Det hende noko dumt ved oppslag av %s:%s (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Det hende noko dumt ved oppslag av %s:%s (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Klarte ikkje kopla til %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Klarte ikkje f status"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Ugyldig URI. Lokale URI-ar kan ikkje starta med //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Loggar inn"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Klarte ikkje avgjera namnet p motparten"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Klarte ikkje avgjera det lokale namnet"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Tenaren nekta oss kopla til, og sa: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER mislukkast, tenaren sa: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS mislukkast, tenaren sa: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Ein mellomtenar er oppgitt, men ikkje noko innloggingsskript. Feltet "
+"Acquire::ftp::ProxyLogin er tomt."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Kommandoen %s i innlogginsskriptet mislukkast, tenaren sa: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE mislukkast, tenaren sa: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Tidsavbrot p samband"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Tenaren lukka sambandet"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Eit svar flaumde over bufferen."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protokollydeleggjing"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Klarte ikkje oppretta sokkel"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Klarte ikkje kopla til datasokkel, tidsavbrot p sambandet"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Klarte ikkje kopla til passiv sokkel."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo klarte ikkje oppretta ein lyttesokkel"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Klarte ikkje binda til sokkel"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Klarte ikkje lytta til sokkel"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Klarte ikkje avgjera sokkelnamnet"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Klarte ikkje senda PORT-kommandoen"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Ukjend adressefamilie %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT mislukkast, tenaren sa: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Tidsavbrot p tilkopling til datasokkel"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Klarte ikkje godta tilkoplinga"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problem ved oppretting av nkkel for fil"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Klarte ikkje henta fila, tenaren sa %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Tidsavbrot p datasokkelen"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Dataoverfringa mislukkast, tenaren sa %s"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Sprjing"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Klarte ikkje starta "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr ""
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "The following signatures were invalid:\n"
+msgstr "Dei flgjande tilleggspakkane vil verta installerte:"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Feil ved skriving til fila"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Feil ved lesing fr tenaren. Sambandet vart lukka i andre enden"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Feil ved lesing fr tenaren"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Feil ved skriving til fil"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Utvalet mislukkast"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Tidsavbrot p sambandet"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Feil ved skriving til utfil"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Klarte ikkje setja endringstidspunkt"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Sambandet vart uventa stengd"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Ugyldig arkivmedlemshovud"
+
+#, fuzzy
+#~ msgid "Removed %s"
+#~ msgstr "Tilrdingar"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Pakkefila %s er ute av takt."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Pakkeindeksfilene er ydelagde. Feltet Filename: manglar for pakken %s."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Klarte ikkje opna fila %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Klarte ikkje opna fila %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Opnar oppsettsfila %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Opnar %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Nokre krav er ikkje oppfylte. Prv med --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Du vil kanskje prva retta p desse ved kyra apt --fix-broken "
+#~ "install."
+
+#~ msgid "(not found)"
+#~ msgstr "(ikkje funne)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Pakke spikra til: "
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Katalogen %s er avleidd"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr "Kravet %s for %s kan ikkje oppfyllast fordi pakken %s ikkje finst"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "Kravet %s for %s kan ikkje oppfyllast fordi pakken %s ikkje finst"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Klarte ikkje oppfylla kravet %s for %s: Den installerte pakken %s er for "
+#~ "ny"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Kravet %s for %s kan ikkje oppfyllast fordi det ikkje finst nokon "
+#~ "tilgjengelege versjonar av pakken %s som oppfyller versjonskrava"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "Kravet %s for %s kan ikkje oppfyllast fordi pakken %s ikkje finst"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Klarte ikkje oppfylla kravet %s for %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Byggjekrav for %s kunne ikkje tilfredstillast."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problem ved oppheving av lenkje til %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Klarte ikkje oppheva lenkja %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Bruk: apt-cache [val] kommando\n"
+#~ " apt-cache [val] show pakke1 [pakke2 ...]\n"
+#~ "\n"
+#~ "apt-cache er eit lgnivverkty som vert brukt til handtera\n"
+#~ "binrmellomlageret til APT, og til henta informasjon fr det.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Val:\n"
+#~ " -h Vis denne hjelpeteksten.\n"
+#~ " -p=? Pakkelageret.\n"
+#~ " -s=? Kjeldekodelageret.\n"
+#~ " -q Ikkje vis framdriftsmlaren.\n"
+#~ " -i Vis berre viktige krav for unmet-kommandoen.\n"
+#~ " -c=? Les denne oppsettsfila.\n"
+#~ " -o=? Set ei vilkrleg innstilling, t.d. -o dir::cache=/tmp.\n"
+#~ "Du finn meir informasjon p manualsidene apt-cache(8) og apt.conf(5).\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Val:\n"
+#~ " -h Vis denne hjelpeteksten.\n"
+#~ " -c=? Les denne oppsettsfila.\n"
+#~ " -o=? Set ei vilkrleg innstilling, t.d. -o dir::cache=/tmp.\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Bruk: apt-sortpkgs [val] fil1 [fil2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs er eit enkelt verkty for sortera pakkefiler. "
+#~ "Innstillinga\n"
+#~ "-s vert brukt til velja kva for ein type fil det er snakk om.\n"
+#~ "\n"
+#~ "Val:\n"
+#~ " -h Vis denne hjelpeteksten.\n"
+#~ " -s Bruk kjeldefilsortering.\n"
+#~ " -c=? Les denne oppsettsfila.\n"
+#~ " -o=? Set ei vilkrleg innstilling, t.d. -o dir::cache=/tmp.\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Barneprosessen mislukkast"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Du m velja minst in pakke som kjeldekoden skal hentast for"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Klarte ikkje oppretta ryr"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Klarte ikkje kyra gzip "
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s for %s %s kompilert p %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Klarte ikkje oppretta FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (URI-tolking)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (dist-tolking)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (dist-tolking)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (dist-tolking)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (dist-tolking)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (URI-tolking)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (absolutt dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Misforma linje %lu i kjeldelista %s (dist-tolking)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Fann ikkje pakken %s %s ved behandling av filkrav"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Klarte ikkje f status p kjeldepakkelista %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Samlar inn filtilbod"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Klarte ikkje tolka pakkefila %s (1)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Utgjevarblokka %s inneheld ingen fingeravtrykk"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Storleik p kravs- og versjonsrom: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Du har ikkje nok ledig plass i %s"
+
+#~ msgid "Done"
+#~ msgstr "Ferdig"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Avbryt installasjon."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Intern feil. AllUpgrade ydelagde noko"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s er ingen gyldig DEB-pakke."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Brukar monteringspunktet %s for CD-ROM\n"
+#~ "Monterer CD-ROM\n"
+
+#, fuzzy
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Dette er ikkje eit gyldig DEB-arkiv, det har ingen %s eller %s-medlem"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Feil MD5-sum"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Fann ikkje fila for pakken %s. Det kan henda du m fiksa denne pakken "
+#~ "sjlv."
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Opnar oppsettsfila %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Klarte ikkje fjerna %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Klarte ikkje oppretta %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Klarte ikkje f status til %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Infokatalogen og den mellombelse katalogen m vera p det same filsystemet"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Klarte ikkje byta til adminkatalogen %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Intern feil ved henting av pakkenamn"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Les filliste"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Klarte ikkje opna listefila %sinfo/%s. Dersom du ikkje kan gjenoppretta "
+#~ "denne fila, br du oppretta ho som ei tom fil og installera den same "
+#~ "versjonen av pakken p nytt."
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Klarte ikkje lesa listefila %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Intern feil ved henting av node"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Klarte ikkje opna avleiingsfila %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Avleiingsfila er ydelagd"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Ugyldig linje i avleiingsfila: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Intern feil ved tilleggjing av avleiing"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Pakkelageret m frst klargjerast"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Fann ikkje Package:-linja, offset %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "ydelagd ConfFile-del i statusfila. Offset %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Feil ved tolking av MD5. Offset %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Klarte ikkje byta til %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Fann ikkje noka gyldig kontrollfil"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Klarte ikkje opna ryr for %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Lesefeil fr %s-prosessen"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Fekk ei enkel hovudlinje over %u teikn"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Misforma overstyring %s linje %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Misforma overstyring %s linje %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Misforma overstyring %s linje %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "dekomprimering"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "lese, har framleis %lu att lesa, men ingen att"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "skrive, har framleis %lu att skrive, men klarte ikkje"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Feil ved behandling av %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Feil ved behandling av %s (UsePackage1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Feil ved behandling av %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Feil ved behandling av %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Feil ved behandling av %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Feil ved behandling av %s (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Feil ved behandling av %s (UsePackage3)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Feil ved behandling av %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Feil ved behandling av %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Feil ved behandling av %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Intern feil, fann ikkje medlem"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Feil ved behandling av %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Misforma linje %u i kjeldelista %s (utgjevar-ID)"
+
+#, fuzzy
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Klarte ikkje sl opp %s"
+
+#, fuzzy
+#~ msgid "Could not patch file"
+#~ msgstr "Klarte ikkje opna fila %s"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Feil ved lesing av katalogen %s"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Sidan du berre har valt ein enkel operasjon, er det svrt sannsynleg at\n"
+#~ "pakken rett og slett ikkje lt seg installera. I sfall br du senda\n"
+#~ "feilmelding."
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Linja %d er for lang (maks %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Linja %d er for lang (maks %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Feil ved behandling av %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Feil ved behandling av %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Lagra etikett: %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr "Fann %i pakkeindeksar, %i kjeldeindeksar og %i signaturar\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Utvalet mislukkast"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Fildatoen er endra %s"
+
+#~ msgid "Reading file list"
+#~ msgstr "Les filliste"
+
+#, fuzzy
+#~ msgid "Could not execute "
+#~ msgstr "Klarte ikkje lsa %s"
+
+#~ msgid "Unknown vendor ID '%s' in line %u of source list %s"
+#~ msgstr "Ukjend utgjevar-ID %s i linja %u i kjeldelista %s"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..e0a6488
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,4495 @@
+# Advanced Package Transfer - APT message translation catalog
+# Polish translation by:
+#
+# Nazewnictwo i spójność tłumaczeń programów apt, aptitude, synaptic i innych:
+# http://wiki.debian.org/PolishL10N/PackageInstallers
+# Marcin Owsiany <porridge@debian.org>, 2002, 2003, 2004.
+# Bartosz Fenski <fenio@debian.org>, 2005, 2006.
+# Wiktor Wandachowicz <siryes@gmail.com>, 2008, 2009.
+# Michał Kułach <michal.kulach@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.9.7.3\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2012-07-28 21:53+0200\n"
+"Last-Translator: Michał Kułach <michal.kulach@gmail.com>\n"
+"Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Nieprawidłowy podpis archiwum"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Błąd przy czytaniu nagłówka składnika archiwum"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Nieprawidłowy nagłówek składnika archiwum"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Archiwum jest za krótkie"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Nie udało się odczytać nagłówków archiwum"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nie udało się znaleźć wpisu uwierzytelnienia dla: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Uszkodzone archiwum"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Niepoprawna suma kontrolna tar, archiwum jest uszkodzone"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Nieznany typ nagłówka TAR %u, składnik %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "To nie jest poprawne archiwum DEB, brakuje składnika \"%s\""
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Błąd wewnętrzny, nie udało się odnaleźć składnika %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Plik kontrolny nie może zostać poprawnie zinterpretowany"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Nie udało się zapisać pliku %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Nie udało się zamknąć pliku %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Ścieżka %s jest zbyt długa"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Wypakowanie %s więcej niż raz"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Ominięcie katalogu %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Pakiet próbuje pisać do celu ominięcia %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Zbyt długa ścieżka ominięcia"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Nie udało się wykonać operacji stat na %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Nie udało się zmienić nazwy %s na %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Katalog %s został zastąpiony obiektem nie będącym katalogiem"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Nie udało się znaleźć węzła w jego kubełku haszującym"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Ścieżka jest zbyt długa"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Nadpisujący pakiet nie pasuje z wersją %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Plik %s/%s nadpisuje plik w pakiecie %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Nie można czytać %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Nie można wykonać operacji stat na %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode wywołane na wciąż podłączonym węźle"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Nie udało się odnaleźć elementu tablicy haszującej!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Nie udało się utworzyć ominięcia"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Błąd wewnętrzny w AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Próba nadpisania ominięcia, %s -> %s i %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Podwójne dodanie ominięcia %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Zduplikowany plik konfiguracyjny %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Ominięcie katalogu %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Ominięcie katalogu %s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Ominięcie katalogu %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Ominięcie katalogu %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Ominięcie katalogu %s"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Nie udało się odczytać dowiązania %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Błędna suma kontrolna"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "nie udało się zmienić nazwy, %s (%s -> %s)"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Błędny rozmiar"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Nieprawidłowa operacja %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Błąd zapisu"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Podczas weryfikacji podpisu wystąpił błąd. Nie zaktualizowano repozytorium i "
+"w dalszym ciągu będą używane poprzednie pliki indeksu. Błąd GPG %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Błąd GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Plik Release dla %s wygasnął (nieprawidłowy od %s). Aktualizacje z tego "
+"repozytorium nie będą wykonywane."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Plik Release dla %s wygasnął (nieprawidłowy od %s). Aktualizacje z tego "
+"repozytorium nie będą wykonywane."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Nieprawidłowa dystrybucja: %s (oczekiwano %s, a otrzymano %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Nie udało się pobrać %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Nie udało się odnaleźć pliku dla pakietu %s. Może to oznaczać, że trzeba "
+"będzie ręcznie naprawić ten pakiet (z powodu brakującej architektury)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Nie można znaleźć źródła do pobrania wersji \"%s\" pakietu \"%s\""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Dziennik zmian %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Nie udało się odnaleźć sterownika metody %s."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Proszę sprawdzić czy pakiet \"dpkg-dev\" jest zainstalowany.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Metoda %s nie uruchomiła się poprawnie"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Proszę włożyć do napędu \"%s\" dysk o nazwie: \"%s\" i nacisnąć enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Brakuje katalogu list %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Brakuje katalogu archiwów %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Nie udało się zablokować katalogu %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Plik indeksu typu \"%s\" nie jest obsługiwany"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Pobieranie pliku %li z %li (pozostało %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Pobieranie pliku %li z %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Pakiet %s ma zostać ponownie zainstalowany, ale nie można znaleźć jego "
+"archiwum."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Błąd, pkgProblemResolver::Resolve zwrócił błąd, może to być spowodowane "
+"zatrzymanymi pakietami."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Nie udało się naprawić problemów, zatrzymano uszkodzone pakiety."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Nie udało się otworzyć lub zanalizować zawartości list pakietów."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Należy uruchomić apt-get update aby naprawić te problemy."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Nie udało się odczytać list źródeł."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Błąd kompilacji wyrażenia regularnego - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Wydanie \"%s\" dla \"%s\" nie zostało znalezione"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Wersja \"%s\" dla \"%s\" nie została znaleziona"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Nie udało się odnaleźć zadania \"%s\""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr ""
+"Nie udało się znaleźć żadnego pakietu według wyrażenia regularnego \"%s\""
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr ""
+"Nie udało się znaleźć żadnego pakietu według wyrażenia regularnego \"%s\""
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Nie udało się odnaleźć pakietu %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Nie udało się wybrać wersji z pakietu \"%s\", ponieważ jest on czysto "
+"wirtualny"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Nie udało się wybrać najnowszej wersji pakietu \"%s\", ponieważ jest on "
+"czysto wirtualny"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Nie udało się wybrać wersji kandydującej pakietu %s, ponieważ nie ma "
+"kandydata"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Nie udało się wybrać zainstalowanej wersji z pakietu %s, ponieważ nie jest "
+"zainstalowany"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Nie udało się wybrać zainstalowanej ani kandydującej wersji pakietu \"%s\", "
+"ponieważ nie ma żadnej z nich"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Linia %u w liście źródeł %s jest zbyt długa."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Odmontowanie CD-ROM-u...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Użycie %s jako punktu montowania CD-ROM-u\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Oczekiwanie na płytę...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montowanie CD-ROM-u...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identyfikacja... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Etykieta: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Skanowanie płyty w poszukiwaniu plików indeksu...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Znaleziono %zu indeksów pakietów, %zu indeksów źródłowych, %zu indeksów "
+"tłumaczeń i %zu podpisów\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Nie można odnaleźć żadnych plików pakietów, być może nie jest to dysk "
+"Debiana lub jest to inna architektura?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Znaleziono etykietę \"%s\"\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "To nie jest prawidłowa nazwa, proszę spróbować ponownie.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Płyta nosi nazwę: \n"
+"\"%s\"\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopiowanie list pakietów..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Zapisywanie nowej listy źródeł\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Źródła dla tej płyty to:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nie udało się przejść do %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Nie udało się wykonać operacji stat na pliku %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Nie udało się wykonać operacji stat na punkcie montowania %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Nie udało się wykonać operacji stat na CDROM-ie"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Opcja linii poleceń \"%c\" [z %s] jest nieznana."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Niezrozumiała opcja linii poleceń %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Opcja linii poleceń %s nie jest typu logicznego"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Opcja %s wymaga argumentu."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Opcja %s: Specyfikacja elementu konfiguracji musi zawierać =<wartość>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Opcja %s wymaga argumentu typu całkowitego, nie \"%s\""
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opcja \"%s\" jest zbyt długa"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Znaczenie %s jest nieznane, proszę spróbować true lub false."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Nieprawidłowa operacja %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Nierozpoznany skrót typu: \"%c\""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Błąd składniowy %s:%u: Blok nie zaczyna się nazwą."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Błąd składniowy %s:%u: Błędny znacznik"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Błąd składniowy %s:%u: Po wartości występują śmieci"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Błąd składniowy %s:%u: Dyrektywy mogą występować tylko na najwyższym poziomie"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Błąd składniowy %s:%u: Zbyt wiele zagnieżdżonych operacji include"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Błąd składniowy %s:%u: Włączony tutaj"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Błąd składniowy %s:%u: Nieobsługiwana dyrektywa \"%s\""
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Błąd składniowy %s:%u: czysta dyrektywa wymaga drzewa opcji jako argumentu"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Błąd składniowy %s:%u: Śmieci na końcu pliku"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problem przy odlinkowywaniu pliku %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Dla pliku blokady %s tylko do odczytu nie zostanie użyta blokada"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Nie udało się otworzyć pliku blokady %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Dla pliku blokady %s montowanego przez NFS nie zostanie użyta blokada"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Nie udało się uzyskać blokady %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+"Lista plików nie może zostać stworzona, ponieważ \"%s\" nie jest katalogiem"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Ignorowanie \"%s\" w katalogu \"%s\", ponieważ nie jest to zwykły plik"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Ignorowanie pliku \"%s\" w katalogu \"%s\", ponieważ nie ma on rozszerzenia "
+"pliku"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Ignorowanie pliku \"%s\" w katalogu \"%s\", ponieważ ma on nieprawidłowe "
+"rozszerzenie pliku"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Oczekiwano na proces %s, ale nie było go"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Podproces %s spowodował naruszenie ochrony pamięci."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Podproces %s otrzymał sygnał %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Podproces %s zwrócił kod błędu (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Podproces %s zakończył się niespodziewanie"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Błąd odczytu"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Błąd zapisu"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problem przy zamykaniu pliku gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Nie udało się utworzyć IPC z podprocesem"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Nie udało się uruchomić kompresora "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nie udało się otworzyć pliku %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nie udało się otworzyć deskryptora pliku %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "należało przeczytać jeszcze %llu, ale nic nie zostało"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "należało zapisać jeszcze %llu, ale nie udało się to"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problem przy zamykaniu pliku %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problem przy zapisywaniu pliku %s w %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problem przy zapisywaniu pliku na dysk"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Nie można wykonać operacji stat na %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Nie udało się pisać do %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Nie można wykonać mmap na pustym pliku"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Nie udało się wykonać mmap %llu bajtów"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Nie udało się zduplikować deskryptora pliku %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Nie udało się zamknąć mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Nie udało się zsynchronizować mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Nie udało się wykonać mmap %lu bajtów"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Nie udało się uciąć zawartości pliku %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Brak miejsca dla dynamicznego MMap. Proszę zwiększyć rozmiar APT::Cache-"
+"Start. Bieżąca wartość: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Nie udało się zwiększyć rozmiaru MMap, ponieważ limit %lu bajtów został już "
+"osiągnięty."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Nie udało się zwiększyć rozmiaru MMap, ponieważ automatycznie powiększanie "
+"zostało wyłączone przez użytkownika."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Błąd!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Gotowe"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Gotowe"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lidni %lig %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lig %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Nie odnaleziono wyboru %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Nie udało się przeanalizować pliku Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Brak sekcji w pliku Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Brak wpisu Hash w pliku Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Nieprawidłowy wpis %s w pliku Release %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Nie udało się zanalizować pliku pakietu %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Nie udało się zablokować katalogu administracyjnego (%s), czy inny proces go "
+"używa?"
+
+# Musi pasować do su i sudo.
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Nie udało się zablokować katalogu administracyjnego (%s), czy użyto "
+"uprawnień administratora?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg został przerwany, należy wykonać ręcznie \"%s\", aby naprawić problem."
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Nie udało się zablokować katalogu administracyjnego (%s), czy inny proces go "
+"używa?"
+
+# Musi pasować do su i sudo.
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Nie udało się zablokować katalogu administracyjnego (%s), czy użyto "
+"uprawnień administratora?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Niezablokowany"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Przygotowywanie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Przygotowywanie do konfiguracji %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Przygotowywanie do usunięcia %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Przygotowywanie do całkowitego usunięcia %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Proszę odnotować zniknięcie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Uruchamianie wyzwalacza post-installation %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Pakiet %s został zainstalowany"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Konfigurowanie %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Brakuje katalogu \"%s\""
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Nie udało się otworzyć pliku \"%s\""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Rozpakowywanie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Instalowanie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Usuwanie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Całkowite usuwanie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Pakiet %s został całkowicie usunięty"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Nie udało się pisać do %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Operacja została przerwana, zanim mogła zostać zakończona"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Brak raportu programu apport, ponieważ osiągnięto limit MaxReports"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problemy z zależnościami - pozostawianie nieskonfigurowanego"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Brak raportu programu apport, ponieważ komunikat błędu wskazuje, że "
+"przyczyna niepowodzenia leży w poprzednim błędzie."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Brak raportu programu apport, ponieważ komunikat błędu wskazuje na "
+"przepełnienie dysku"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Brak raportu programu apport, ponieważ komunikat błędu wskazuje na błąd "
+"braku wolnej pamięci"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Brak raportu programu apport, ponieważ komunikat błędu wskazuje na "
+"przepełnienie dysku"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Brak raportu programu apport, ponieważ komunikat błędu wskazuje na błąd "
+"wejścia/wyjścia dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Budowanie drzewa zależności"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Kandydujące wersje"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Generowanie zależności"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Odczyt informacji o stanie"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Nie udało się otworzyć pliku stanu %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Nie udało się zapisać tymczasowego pliku stanu %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Wysyłanie scenariusza do mechanizmu rozwiązywania zależności"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Wysyłanie żądania do mechanizmu rozwiązywania zależności"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Przygotowywanie na otrzymanie rozwiązania"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+"Zewnętrzny mechanizm rozwiązywania zależności zawiódł, bez podania "
+"prawidłowego komunikatu o błędzie"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Wykonywanie zewnętrznego mechanizmu rozwiązywania zależności"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Wykonywanie zewnętrznego mechanizmu rozwiązywania zależności"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Wysyłanie żądania do mechanizmu rozwiązywania zależności"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Wysyłanie scenariusza do mechanizmu rozwiązywania zależności"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr ""
+"Zewnętrzny mechanizm rozwiązywania zależności zawiódł, bez podania "
+"prawidłowego komunikatu o błędzie"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Zapisano %i rekordów.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Zapisano %i rekordów z %i brakującymi plikami.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Zapisano %i rekordów z %i niepasującymi plikami\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Zapisano %i rekordów z %i brakującymi plikami i %i niepasującymi\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Nie udało się znaleźć wpisu uwierzytelnienia dla: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Błędna suma kontrolna dla: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "System pakietów \"%s\" nie jest obsługiwany"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Nie udało się określić odpowiedniego typu systemu pakietów"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Uruchamianie dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Nie udało się wykonać natychmiastowej konfiguracji %s. Proszę wykonać \"man "
+"5 apt.conf\" i zapoznać się z wpisem APT::Immediate-Configure aby dowiedzieć "
+"się więcej. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Nie udało się skonfigurować \"%s\". "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"To uruchomienie programu będzie wymagało tymczasowego usunięcia istotnego "
+"pakietu %s z powodu pętli konfliktów/wymagań wstępnych. Często jest to złe "
+"rozwiązanie, ale jeśli jest się pewnym swoich działań, należy włączyć opcję "
+"APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Pusty magazyn podręczny pakietów"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Magazyn podręczny pakietów jest uszkodzony"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Magazyn podręczny pakietów jest w niezgodnej wersji"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Ta wersja APT nie obsługuje systemu wersji \"%s\""
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Ten magazyn podręczny pakietów został zbudowany dla innej architektury"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Magazyn podręczny pakietów jest uszkodzony - jest zbyt mały"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Wymaga"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Wymaga wstępnie"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Sugeruje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "W konflikcie z"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Poleca"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Zastępuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Narusza zależności"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Rozszerza"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Dezaktualizuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "ważny"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "wymagany"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standardowy"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "dodatkowy"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcjonalny"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Magazyn podręczny ma niezgodny system wersji"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Wystąpił błąd podczas przetwarzania %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Przekroczono liczbę pakietów, którą ten APT jest w stanie obsłużyć."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Przekroczono liczbę wersji, którą ten APT jest w stanie obsłużyć."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Przekroczono liczbę opisów, którą ten APT jest w stanie obsłużyć."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Przekroczono liczbę zależności, którą ten APT jest w stanie obsłużyć."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Czytanie list pakietów"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Błąd wejścia/wyjścia przy zapisywaniu podręcznego magazynu źródeł"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Plik indeksu typu \"%s\" nie jest obsługiwany"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Wartość %s jest nieprawidłowa dla APT::Default-Release, ponieważ takie "
+"wydanie nie jest dostępne w źródłach"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Nieprawidłowe informacje w pliku ustawień %s, brak nagłówka Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Nierozpoznany typ przypinania %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Brak (lub zerowy) priorytet przypięcia"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Nieprawidłowa linia %llu #1 pliku override %s"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Nieprawidłowa linia %u w liście źródeł %s (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typ \"%s\" jest nieznany w linii %u listy źródeł %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Nieprawidłowa linia %u w liście źródeł %s (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typ \"%s\" jest nieznany w linii %u listy źródeł %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Należy dopisać jakieś URI pakietów źródłowych do pliku sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Nie udało się pobrać niektórych plików indeksu, zostały one zignorowane lub "
+"użyto ich starszej wersji."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Obliczanie aktualizacji"
+
+# Ujednolicono z aptitude
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Stary:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Pobieranie:%lu %s"
+
+# Wyrównane do Hit i Err.
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+# Wyrównane do Hit i Ign.
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Błąd:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Pobrano %sB w %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Pracuje]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Zmiana nośnika: Proszę włożyć dysk oznaczony\n"
+" \"%s\"\n"
+"do napędu \"%s\" i nacisnąć enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Naprawianie zależności..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " nie udało się."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Nie udało się naprawić zależności"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Nie udało się zminimalizować zbioru aktualizacji"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Gotowe"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Należy uruchomić \"apt --fix-broken install\", aby je naprawić."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Niespełnione zależności. Proszę spróbować wykonać \"apt --fix-broken install"
+"\" bez pakietów (lub podać rozwiązanie)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Uwaga, wybieranie %s dla zadania \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Uwaga, wybieranie %s dla wyrażenia \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Uwaga, wybieranie %s dla wyrażenia \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Pakiet %s jest pakietem wirtualnym zapewnianym przez:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Zainstalowany]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Brak wersji kandydującej]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Należy jednoznacznie wybrać jeden z nich do instalacji."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Pakiet %s nie ma dostępnej wersji, ale odnosi się do niego inny pakiet.\n"
+"Zazwyczaj oznacza to, że pakietu brakuje, został zastąpiony przez inny\n"
+"pakiet lub nie jest dostępny przy pomocy obecnie ustawionych źródeł.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Jednak następujące pakiety go zastępują:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Pakiet %s nie ma kandydata do instalacji"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Pakiety wirtualne, takie jak \"%s\" nie mogą być usunięte\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Pakiet %s nie jest zainstalowany, więc nie zostanie usunięty. Czy chodziło o "
+"\"%s\"?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Pakiet \"%s\" nie jest zainstalowany, więc nie zostanie usunięty\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Uwaga, wybieranie \"%s\" zamiast \"%s\"\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Ten APT ma moce Super Krowy."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Nie znaleziono żadnych pakietów"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "UWAGA: Następujące pakiety nie mogą zostać zweryfikowane!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Zignorowano ostrzeżenie uwierzytelniania.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Niektóre pakiety nie mogły zostać zweryfikowane"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Zainstalować te pakiety bez weryfikacji?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Wystąpiły problemy, a użyto -y bez --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Nie udało się ustalić ilości wolnego miejsca w %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Niestety w %s nie ma wystarczającej ilości wolnego miejsca."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Nie udało się zablokować katalogu pobierania"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Nie udało się zainstalować niektórych pakietów. Może to oznaczać,\n"
+"że zażądano niemożliwej sytuacji lub użyto dystrybucji niestabilnej,\n"
+"w której niektóre pakiety nie zostały jeszcze utworzone lub przeniesione\n"
+"z katalogu Incoming (\"Przychodzące\")."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Następujące informacje mogą pomóc rozwiązać sytuację:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Pakiety są uszkodzone"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Nie udało się pobrać niektórych archiwów, proszę spróbować uruchomić apt-get "
+"update lub użyć opcji --fix-missing."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Błąd wewnętrzny, użyto InstallPackages z uszkodzonymi pakietami!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pakiety powinny zostać usunięte, ale Remove jest wyłączone."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Wystąpiły problemy, a użyto -y bez --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Wystąpiły problemy, a użyto -y bez --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Błąd wewnętrzny, sortowanie niezakończone"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Wystąpił dziwny błąd - rozmiary się nie zgadzają. Proszę to zgłosić pod "
+"apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Konieczne pobranie %sB/%sB archiwów.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Konieczne pobranie %sB archiwów.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Po tej operacji zostanie dodatkowo użyte %sB miejsca na dysku.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Po tej operacji zostanie zwolnione %sB miejsca na dysku.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Nakazano wykonywać tylko trywialne operacje, a ta do nich nie należy."
+
+# Bezpieczniej jest nie używać tu polskich znaków.
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Tak, jestem pewien!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Zaraz stanie się coś potencjalnie szkodliwego.\n"
+"Aby kontynuować proszę napisać zdanie \"%s\"\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Przerwane."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Kontynuować?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Nie udało się pobrać niektórych plików"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Ukończono pobieranie w trybie samego pobierania"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing i zamiana nośników nie są obecnie obsługiwane"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Nie udało się poprawić brakujących pakietów."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Przerywanie instalacji"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Następujący pakiet zniknął z tego systemu, ponieważ wszystkie jego pliki "
+"zostały nadpisane przez inne pakiety:"
+msgstr[1] ""
+"Następujące pakiety zniknęły z tego systemu, ponieważ wszystkie ich pliki "
+"zostały nadpisane przez inne pakiety:"
+msgstr[2] ""
+"Następujące pakiety zniknęły z tego systemu, ponieważ wszystkie ich pliki "
+"zostały nadpisane przez inne pakiety:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Uwaga: dpkg wykonał to automatycznie i celowo."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Nic nie powinno być usuwane, AutoRemover nie zostanie uruchomiony"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Wygląda na to, że AutoRemover coś uszkodził, a to naprawdę nie\n"
+"powinno się zdarzyć. Prosimy o zgłoszenie błędu w pakiecie apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Błąd wewnętrzny spowodowany przez AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Następujący pakiet został zainstalowany automatycznie i nie jest już więcej "
+"wymagany:"
+msgstr[1] ""
+"Następujące pakiety zostały zainstalowane automatycznie i nie są już więcej "
+"wymagane:"
+msgstr[2] ""
+"Następujące pakiety zostały zainstalowane automatycznie i nie są już więcej "
+"wymagane:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu pakiet został zainstalowany automatycznie i nie jest już więcej "
+"wymagany.\n"
+msgstr[1] ""
+"%lu pakiety zostały zainstalowane automatycznie i nie są już więcej "
+"wymagane.\n"
+msgstr[2] ""
+"%lu pakietów zostało zainstalowanych automatycznie i nie są już więcej "
+"wymagane.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Aby go usunąć należy użyć \"%s\"."
+msgstr[1] "Aby je usunąć należy użyć \"%s\"."
+msgstr[2] "Aby je usunąć należy użyć \"%s\"."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Zostaną zainstalowane następujące dodatkowe pakiety:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Sugerowane pakiety:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Polecane pakiety:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Pomijanie %s, jest już zainstalowane, a nie została wybrana aktualizacja.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Pomijanie %s, nie jest zainstalowane, a wybrano wyłącznie aktualizacje.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+"Ponowna instalacja pakietu %s nie jest możliwa, nie może on zostać pobrany.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s jest już w najnowszej wersji.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s zaznaczony jako zainstalowany ręcznie.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Wybrano wersję \"%s\" (%s) pakietu \"%s\"\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Wybrano wersję \"%s\" (%s) pakietu \"%s\", z powodu \"%s\"\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"UWAGA: To jest tylko symulacja!\n"
+" %s wymaga do normalnego działania uprawnień administratora.\n"
+" Aktualnie blokowanie jest wyłączone, więc nie należy polegać\n"
+" na związku z rzeczywistą sytuacją!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Zainstalowany]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Zainstalowany]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Zainstalowany]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Zainstalowany]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ale %s jest zainstalowany"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ale %s ma zostać zainstalowany"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ale nie da się go zainstalować"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ale jest pakietem wirtualnym"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ale nie zostanie zainstalowany"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ale nie jest zainstalowany"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " lub"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Następujące pakiety mają niespełnione zależności:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Zostaną zainstalowane następujące NOWE pakiety:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Następujące pakiety zostaną USUNIĘTE:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Następujące pakiety zostały zatrzymane:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Następujące pakiety zostaną zaktualizowane:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Zostaną zainstalowane STARE wersje następujących pakietów:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Zostaną zmienione następujące zatrzymane pakiety:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (z powodu %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"UWAGA: Zostaną usunięte następujące istotne pakiety.\n"
+"NIE należy kontynuować, jeśli nie jest się pewnym tego co się robi!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu aktualizowanych, %lu nowo instalowanych, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu ponownie instalowanych, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu cofniętych wersji, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu usuwanych i %lu nieaktualizowanych.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu nie w pełni zainstalowanych lub usuniętych.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[T/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[t/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "T"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Należy podać przynajmniej jeden wzorzec"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Plików pakietów:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Magazyn podręczny jest przestarzały, nie można odwołać się (x-ref) do pliku "
+"pakietu."
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Przypięte pakiety:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Zainstalowana: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandydująca: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(brak)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabela wersji:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr ""
+"Nie udało się znaleźć żadnego pakietu według wyrażenia regularnego \"%s\""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr ""
+"Nie udało się znaleźć żadnego pakietu według wyrażenia regularnego \"%s\""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr ""
+"Nie udało się znaleźć żadnego pakietu według wyrażenia regularnego \"%s\""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Zmieniono wybrany pakiet źródłowy na \"%s\" z \"%s\"\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Ignorowanie niedostępnej wersji \"%s\" pakietu \"%s\""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"Należy podać przynajmniej jeden pakiet, dla którego mają zostać pobrane "
+"źródła"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Nie udało się odnaleźć źródła dla pakietu %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"UWAGA: pakietowanie \"%s\" jest zarządzane w systemie kontroli wersji \"%s\" "
+"pod adresem:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Proszę użyć:\n"
+"%s\n"
+"by pobrać najnowsze (prawdopodobnie jeszcze niewydane) poprawki tego "
+"pakietu.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Pomijanie już pobranego pliku \"%s\"\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Konieczne pobranie %sB/%sB archiwów źródeł.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Konieczne pobranie %sB archiwów źródeł.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Pobieranie źródeł %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Nie udało się pobrać niektórych archiwów."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Pomijanie rozpakowania już rozpakowanego źródła w %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Polecenie rozpakowania \"%s\" zawiodło.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Proszę sprawdzić czy pakiet \"dpkg-dev\" jest zainstalowany.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Polecenie budowania \"%s\" zawiodło.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Nie udało się pobrać informacji o zależnościach dla budowania %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s nie ma zależności dla budowania.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Nie znaleziono informacji o architekturze dla %s. Proszę zapoznać się z apt."
+"conf(5) APT::Architectures"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Należy podać przynajmniej jeden pakiet, dla którego mają zostać sprawdzone "
+"zależności dla budowania"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Nie udało się przetworzyć zależności dla budowania"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Nie udało się przetworzyć zależności dla budowania"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Nie udało się zmienić nazwy %s na %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Pakiet %s w wersji %s ma niespełnione zależności:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Polecenie update nie wymaga żadnych argumentów"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Polecenie update nie wymaga żadnych argumentów"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Liczba nazw pakietów: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Liczba wszystkich typów pakietów: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Zwykłych pakietów: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Czysto wirtualnych pakietów: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pojedynczych pakietów wirtualnych: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Mieszanych pakietów wirtualnych: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Brakujących: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "W sumie różnych wersji: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "W sumie różnych opisów: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "W sumie zależności: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "W sumie zależności wersja/plik: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "W sumie zależności opis/plik: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "W sumie mapowań zapewnień: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "W sumie dopasowanych napisów: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Sumaryczny rozmiar niewykorzystanego miejsca: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Całkowity rozmiar: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "To polecenie jest przestarzałe. Prosimy używać \"apt-mark showauto\"."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Pokazuje informacje dla źródeł"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Przeszukuje listę pakietów według wyrażenia regularnego"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Pokazuje surowe informacje o zależnościach danego pakietu"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Pokazuje informacje o zależnościach OD danego pakietu"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Pokazuje informacje dla danego pakietu"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Pokazuje listę nazw wszystkich pakietów w systemie"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Pokazuje ustawienia polityki"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Proszę wprowadzić nazwę dla tej płyty, np. \"Debian 5.0.3 Disk 1\""
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Proszę włożyć dysk do napędu i nacisnąć enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Nie udało się zamontować \"%s\" w \"%s\""
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Należy powtórzyć ten proces dla reszty płyt."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumenty nie są w parach"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Użycie: apt-config [opcje] polecenie\n"
+"\n"
+"apt-config to proste narzędzie do czytania pliku konfiguracyjnego APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Użycie: apt-extracttemplates plik1 [plik2 ...]\n"
+"\n"
+"apt-extracttemplates to narzędzie służące do pobierania informacji\n"
+"i konfiguracji i szablonach z pakietów Debiana.\n"
+"\n"
+"Opcje:\n"
+" -h Ten tekst pomocy.\n"
+" -t Ustawia katalog tymczasowy\n"
+" -c=? Czyta wskazany plik konfiguracyjny.\n"
+" -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Nie udało się pobrać wersji debconf. Czy debconf jest zainstalowany?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Nie udało się odnaleźć pakietu %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s zaznaczony jako zainstalowany automatycznie.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"To polecenie jest przestarzałe. Prosimy używać \"apt-mark auto\" i \"apt-"
+"mark manual\"."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Błąd wewnętrzny, spowodowany przez moduł rozwiązywania problemów"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Obsługiwane moduły:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Użycie: apt-get [opcje] polecenie\n"
+" apt-get [opcje] install|remove pakiet1 [pakiet2 ...]\n"
+" apt-get [opcje] source pakiet1 [pakiet2 ...]\n"
+"\n"
+"apt-get to prosty interfejs wiersza poleceń do pobierania i instalacji\n"
+"pakietów. Najczęściej używane polecenia to update i install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Pobiera nowe listy pakietów"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Wykonuje aktualizację"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instaluje nowe pakiety (pakiet to np. libc6, nie libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instaluje nowe pakiety (pakiet to np. libc6, nie libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Usuwa pakiety"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Usuwa pakiety łącznie z plikami konfiguracyjnymi"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Usuwa automatycznie wszystkie nieużywane pakiety"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Aktualizacja dystrybucji, patrz apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Instaluje według wyborów dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Konfiguruje zależności dla budowania pakietów źródłowych"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Usuwa pobrane pliki archiwów"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Usuwa stare pobrane pliki archiwów"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Sprawdza, czy wszystkie zależności są spełnione"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Pobiera archiwa źródłowe"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Pobiera pakiet binarny do bieżącego katalogu"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Pobiera i wyświetla dziennika zmian wybranych pakietów"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr ""
+"Należy podać przynajmniej jeden pakiet, dla którego mają zostać pobrane "
+"źródła"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Użycie: apt-internal-solver\n"
+"\n"
+"apt-internal-solver jest interfejsem do używania bieżącego, wewnętrznego\n"
+"mechanizmu rozwiązywania zależności - w sposób podobny jak zewnętrznego\n"
+"mechanizmu rodziny APT - do celów debugowania itp.\n"
+"\n"
+"Opcje:\n"
+" -h Ten tekst pomocy.\n"
+" -q Zapisywalne wyjście - brak wskaźnika postępu\n"
+" -c=? Czyta wskazany plik konfiguracyjny\n"
+" -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Użycie: apt-internal-solver\n"
+"\n"
+"apt-internal-solver jest interfejsem do używania bieżącego, wewnętrznego\n"
+"mechanizmu rozwiązywania zależności - w sposób podobny jak zewnętrznego\n"
+"mechanizmu rodziny APT - do celów debugowania itp.\n"
+"\n"
+"Opcje:\n"
+" -h Ten tekst pomocy.\n"
+" -q Zapisywalne wyjście - brak wskaźnika postępu\n"
+" -c=? Czyta wskazany plik konfiguracyjny\n"
+" -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s nie może zostać oznaczony, ponieważ nie jest zainstalowany.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s został już ustawiony jako zainstalowany ręcznie.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s został już ustawiony jako zainstalowany automatycznie.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Zostaną zainstalowane następujące NOWE pakiety:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s został już zatrzymany.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s został już odznaczony jako zatrzymany.\n"
+
+# Musi pasować do su i sudo.
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+"Uruchomienie dpkg nie powiodło się. Czy użyto uprawnień administratora?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s został zatrzymany.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Odznaczono zatrzymanie %s\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Użycie: apt-mark [opcje] {auto|manual} pakiet1 [pakiet2 ...]\n"
+"\n"
+"apt-mark jest prostym poleceniem wiersza poleceń do oznaczania pakietów\n"
+"jako zainstalowane automatycznie lub ręcznie. Może także służyć\n"
+"do wyświetlania stanu oznaczeń.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Oznacza dany pakiet jako zainstalowany automatycznie"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Oznacza dany pakiet jako zainstalowany ręcznie"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Oznacza dany pakiet jako zainstalowany automatycznie"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Nieznane informacje o pakiecie!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Czytanie list pakietów"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Przypięte pakiety:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Przypięte pakiety:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Pakiety są uszkodzone"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "ale jest pakietem wirtualnym"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Odczyt informacji o stanie"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Nieprawidłowe ustawienie domyślne!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Proszę nacisnąć enter, aby kontynuować."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Czy usunąć wszystkie pobrane wcześniej pliki .deb?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Wystąpiły problemy przy rozpakowywaniu. Zainstalowane pakiety zostaną"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "skonfigurowane. Może to spowodować podwójne błędy lub błędy"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"spowodowane brakującymi zależnościami. Jest to normalne. Tylko błędy nad tym"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"komunikatem są istotne. Proszę je poprawić i ponownie wybrać [I]nstalację."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Łączenie informacji o dostępnych pakietach"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Lista rozszerzeń pakietów jest zbyt długa"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Błąd przetwarzania katalogu %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lista rozszerzeń źródeł jest zbyt długa"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Błąd przy zapisywaniu nagłówka do pliku zawartości"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Błąd podczas przetwarzania zawartości %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Użycie: apt-ftparchive [opcje] polecenie\n"
+"Polecenia: packages ścieżka_do_binariów [plik_override [przedrostek]]\n"
+" sources ścieżka_do_źródeł [plik_override [przedrostek]]\n"
+" contents ścieżka\n"
+" release ścieżka\n"
+" generate konfiguracja [grupy]\n"
+" clean konfiguracja\n"
+"\n"
+"apt-ftparchive generuje pliki indeksów dla archiwów Debiana. Obsługuje\n"
+"różne rodzaje generowania, od w pełni zautomatyzowanych po funkcjonalne\n"
+"zamienniki programów dpkg-scanpackages i dpkg-scansources.\n"
+"\n"
+"apt-ftparchive generuje pliki Package na postawie drzewa plików .deb.\n"
+"Wygenerowany plik zawiera pola kontrolne wszystkich pakietów oraz ich\n"
+"skróty MD5 i rozmiary. Obsługiwany jest plik override, pozwalający wymusić\n"
+"priorytet i dział pakietu.\n"
+"\n"
+"apt-ftparchive podobnie generuje pliki Sources na podstawie drzewa plików\n"
+".dsc. Przy pomocy opcji --source-override można podać plik override dla\n"
+"źródeł.\n"
+"\n"
+"Polecenia \"packages\" i \"sources\" powinny być wykonywane w katalogu "
+"głównym\n"
+"drzewa. \"ścieżka_do_binariów\" powinna wskazywać na katalog, od którego "
+"zacznie\n"
+"się wyszukiwanie, a plik override powinien zawierać odpowiednie flagi.\n"
+"Przedrostek (o ile został podany) jest dodawany przed ścieżką do każdego\n"
+"pliku. Przykładowe użycie, z archiwum Debiana:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opcje:\n"
+" -h Ten tekst pomocy\n"
+" --md5 Generuje sumy kontrolne MD5\n"
+" -s=? Plik override dla źródeł\n"
+" -q \"Ciche\" działanie\n"
+" -d=? Opcjonalna podręczna baza danych\n"
+" --no-delink Włącza tryb diagnostyczny odłączania\n"
+" --contents Generuje plik zawartości (Contents)\n"
+" -c=? Czyta wskazany plik konfiguracyjny\n"
+" -o=? Ustawia dowolną opcję konfiguracji"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nie dopasowano żadnej nazwy"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Brakuje pewnych plików w grupie plików pakietów \"%s\""
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Baza była uszkodzona, plik został przeniesiony do %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Baza jest przestarzała, próbuję zaktualizować %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Niepoprawny format bazy. Jeśli zaktualizowano ze starszej wersji apt, proszę "
+"usunąć i utworzyć ponownie bazę danych."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Nie udało się otworzyć pliku bazy %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Nie udało się odczytać dowiązania %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Archiwum nie posiada rekordu kontrolnego"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Nie udało się pobrać kursora"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Nie udało się zaalokować pamięci"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Nieznany algorytm kompresji \"%s\""
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Skompresowany plik wynikowy %s wymaga podania kompresji"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Nie udało się utworzyć potoku IPC do podprocesu"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Nie udało się utworzyć procesu potomnego"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Potomny proces kompresujący"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Błąd wewnętrzny, nie udało się utworzyć %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Zawiodła operacja IO na pliku/podprocesie"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Nie udało się czytanie w czasie liczenia skrótu MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Nie można otworzyć %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Nieprawidłowa linia %llu #1 pliku override %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Nie udało się czytać pliku override %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Nieprawidłowa linia %2$llu #1 pliku override %1$s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Nieprawidłowa linia %2$llu #2 pliku override %1$s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Nieprawidłowa linia %2$llu #3 pliku override %1$s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Nie udało się odczytać katalogu %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Nie można wykonać operacji stat na %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Błędy odnoszą się do pliku "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Nie udało się przetłumaczyć nazwy %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Przejście po drzewie nie powiodło się"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Nie udało się otworzyć %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Odłączenie %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Nie udało się dowiązać %s do %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Osiągnięto ograniczenie odłączania %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Archiwum nie posiadało pola pakietu"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s nie posiada wpisu w pliku override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " opiekunem %s jest %s, a nie %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s nie posiada wpisu w pliku override źródeł\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s nie posiada również wpisu w pliku override binariów\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Oczekiwanie na nagłówki"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Serwer HTTP przysłał nieprawidłowy nagłówek odpowiedzi"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Nieprawidłowa linia nagłówka"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Serwer HTTP przysłał nieprawidłowy nagłówek Content-Length"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Serwer HTTP przysłał nieprawidłowy nagłówek Content-Range"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Ten serwer HTTP nieprawidłowo obsługuje zakresy (ranges)"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Nieznany format daty"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Błędne dane nagłówka"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Połączenie nie powiodło się"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Błąd wewnętrzny"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Nie można odczytać bazy danych CD-ROM-ów %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Proszę użyć programu apt-cdrom, aby APT mógł rozpoznać tę płytę CD. Nowych "
+"płyt nie można dodawać przy pomocy polecenia apt-get update"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Niewłaściwa płyta CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Nie udało się odmontować CD-ROM-u w %s, być może wciąż jest używany."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Nie odnaleziono dysku."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Nie odnaleziono pliku"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Łączenie z %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Łączenie z %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Nie udało się utworzyć gniazda dla %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Nie udało się zainicjalizować połączenia z %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Nie udało się"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Nie udało się połączyć z %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Nie udało się połączyć z %s:%s (%s), przekroczenie czasu połączenia"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Łączenie z %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nie udało się przetłumaczyć nazwy \"%s\""
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Tymczasowy błąd przy tłumaczeniu \"%s\""
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Coś niewłaściwego stało się przy tłumaczeniu \"%s:%s\" (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Coś niewłaściwego stało się przy tłumaczeniu \"%s:%s\" (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nie udało się połączyć z %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Nie udało się wykonać operacji stat"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Nieprawidłowe URI, lokalne URI nie mogą zaczynać się od //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Logowanie się"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Nie można określić nazwy zdalnego systemu"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Nie udało się określić nazwy lokalnego systemu"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Serwer odrzucił połączenie, otrzymana odpowiedź: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Polecenie USER nie powiodło się, odpowiedź serwera: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Polecenie PASS nie powiodło się, odpowiedź serwera: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Określono serwer pośredniczący, ale nie określono skryptu rejestrowania, "
+"Acquire::ftp::ProxyLogin jest puste."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+"Polecenie skryptu rejestrowania \"%s\" nie powiodło się, odpowiedź serwera: "
+"%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Polecenie TYPE nie powiodło się, odpowiedź serwera: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Przekroczenie czasu połączenia"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Serwer zamknął połączenie"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Odpowiedź przepełniła bufor."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Naruszenie zasad protokołu"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Nie udało się utworzyć gniazda"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Nie udało się połączyć gniazda danych, przekroczenie czasu połączenia"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Nie udało się połączyć pasywnego gniazda."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo nie było w stanie uzyskać nasłuchującego gniazda"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Nie udało się przyłączyć gniazda"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Nie udało się nasłuchiwać na gnieździe"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Nie udało się określić nazwy gniazda"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Nie można wysłać polecenia PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Nieznana rodzina adresów %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Polecenie EPRT nie powiodło się, odpowiedź serwera: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Przekroczony czas połączenia gniazda danych"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Nie udało się przyjąć połączenia"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Nie udało się obliczyć skrótu pliku"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Nie można pobrać pliku, odpowiedź serwera: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Przekroczony czas oczekiwania na dane"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Nie udało się przesłać danych, odpowiedź serwera: %s"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Info"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Nie można wywołać "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Napotkano przynajmniej jeden nieprawidłowy podpis."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Błąd wewnętrzny: Prawidłowy podpis, ale nie udało się ustalić odcisku klucza!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Nie udało się uruchomić apt-key by zweryfikować podpis (czy gnupg jest "
+"zainstalowane?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Nieznany błąd podczas uruchamiania apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Następujące podpisy były błędne:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Następujące podpisy nie mogły zostać zweryfikowane z powodu braku klucza "
+"publicznego:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Błąd przy pisaniu do pliku"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Błąd czytania z serwera: Zdalna strona zamknęła połączenie"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Błąd czytania z serwera"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Błąd przy pisaniu do pliku"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Operacja select nie powiodła się"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Przekroczenie czasu połączenia"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Błąd przy pisaniu do pliku wyjściowego"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Nie udało się ustawić czasu modyfikacji"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Połączenie zostało przedwcześnie zamknięte"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Puste pliki nie mogą być prawidłowymi archiwami"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Nieprawidłowy nagłówek składnika archiwum: %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Pakiet %s został usunięty"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Plik pakietu %s jest przestarzały."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Pliki indeksu pakietów są uszkodzone. Brak pola Filename: dla pakietu %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Nie znaleziono pliku serwera lustrzanego \"%s\""
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Nie udało się otworzyć pliku serwera lustrzanego \"%s\""
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Nie udało się otworzyć pliku serwera lustrzanego \"%s\""
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Serwer lustrzany: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Otwieranie pliku konfiguracyjnego %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Otwieranie %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Nie udało się znaleźć oczekiwanego wpisu \"%s\" w pliku Release "
+#~ "(nieprawidłowy wpis sources.list lub nieprawidłowy plik)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Niespełnione zależności. Proszę spróbować użyć --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Należy uruchomić \"apt --fix-broken install\", aby naprawić poniższe "
+#~ "problemy:"
+
+#~ msgid "(not found)"
+#~ msgstr "(nie znaleziono)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Sposób przypięcia: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Dla następujących identyfikatorów kluczy brakuje klucza publicznego:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Ominięcie katalogu %s"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Zależność %s od %s nie może zostać spełniona, ponieważ %s nie jest "
+#~ "dozwolone w pakietach \"%s\""
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Zależność %s od %s nie może zostać spełniona, ponieważ nie znaleziono "
+#~ "pakietu %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Nie udało się spełnić zależności %s od %s: Zainstalowany pakiet %s jest "
+#~ "zbyt nowy"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Zależność %s od %s nie może zostać spełniona, ponieważ kandydująca wersja "
+#~ "pakietu %s nie spełnia wymagań wersji"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "Zależność %s od %s nie może zostać spełniona, ponieważ pakiet %s nie ma "
+#~ "wersji kandydującej"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Nie udało się spełnić zależności %s od %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Nie udało się spełnić zależności dla budowania %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problem przy usuwaniu %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Nie udało się usunąć %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Użycie: apt-cache [opcje] polecenie\n"
+#~ " apt-cache [opcje] show pakiet1 [pakiet2 ...]\n"
+#~ "\n"
+#~ "apt-cache to niskopoziomowe narzędzie służące pobierania informacji\n"
+#~ "z podręcznego magazynu plików binarnych APT-a.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Opcje:\n"
+#~ " -h Ten tekst pomocy.\n"
+#~ " -p=? Podręczny magazyn pakietów.\n"
+#~ " -s=? Podręczny magazyn źródeł.\n"
+#~ " -q Wyłącza wskaźnik postępu.\n"
+#~ " -i Pokazuje tylko ważne zależności przy poleceniu unmet.\n"
+#~ " -c=? Czyta wskazany plik konfiguracyjny.\n"
+#~ " -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+#~ "Więcej informacji można znaleźć na stronach podręcznika apt-cache(8)\n"
+#~ "oraz apt.conf(5).\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Opcje:\n"
+#~ " -h Ten tekst pomocy\n"
+#~ " -q Nie pokazuje wskaźnika postępu (przydatne przy rejestrowaniu "
+#~ "działania)\n"
+#~ " -qq Nie wypisuje nic oprócz komunikatów błędów\n"
+#~ " -s Symulacja - wyświetla jedynie co powinno zostać zrobione\n"
+#~ " -f zapis/odczyt oznaczenia jako automatyczny/ręczny danego pliku\n"
+#~ " -c=? Czyta wskazany plik konfiguracyjny.\n"
+#~ " -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+#~ "Proszę zapoznać się ze stronami podręcznika systemowego apt-mark(8)\n"
+#~ "i apt.conf(5), aby uzyskać więcej informacji."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opcje:\n"
+#~ " -h Ten tekst pomocy.\n"
+#~ " -c=? Czyta wskazany plik konfiguracyjny.\n"
+#~ " -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Opcje:\n"
+#~ " -h Ten tekst pomocy\n"
+#~ " -q Nie pokazuje wskaźnika postępu (przydatne przy rejestrowaniu "
+#~ "działania)\n"
+#~ " -qq Nie wypisuje nic oprócz komunikatów błędów\n"
+#~ " -s Symulacja - wyświetla jedynie co powinno zostać zrobione\n"
+#~ " -f zapis/odczyt oznaczenia jako automatyczny/ręczny danego pliku\n"
+#~ " -c=? Czyta wskazany plik konfiguracyjny.\n"
+#~ " -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+#~ "Proszę zapoznać się ze stronami podręcznika systemowego apt-mark(8)\n"
+#~ "i apt.conf(5), aby uzyskać więcej informacji."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Użycie: apt-sortpkgs [opcje] plik1 [plik2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs to proste narzędzie służące do sortowania plików pakietów.\n"
+#~ "Opcji -s używa się do wskazania typu pliku.\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -h Ten tekst pomocy.\n"
+#~ " -s Sortowanie pliku źródeł.\n"
+#~ " -c=? Czyta wskazany plik konfiguracyjny.\n"
+#~ " -o=? Ustawia dowolną opcję konfiguracji, np. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Proces potomny zawiódł"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr ""
+#~ "Należy podać przynajmniej jeden pakiet, dla którego mają zostać pobrane "
+#~ "źródła"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Nie udało się utworzyć potoków"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Nie udało się uruchomić programu gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s dla %s skompilowany %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Nie udało się utworzyć obiektu FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Nieprawidłowa linia %lu w liście źródeł %s (analiza URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Nieprawidłowa linia %lu w liście źródeł %s ([opcja] nie dająca się "
+#~ "sparsować)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Nieprawidłowa linia %lu w liście źródeł %s ([opcja] zbyt krótka)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Nieprawidłowa linia %lu w liście źródeł %s ([%s] nie jest przypisane)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Nieprawidłowa linia %lu w liście źródeł %s ([%s] nie ma klucza)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Nieprawidłowa linia %lu w liście źródeł %s ([%s] klucz %s nie ma wartości)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Nieprawidłowa linia %lu w liście źródeł %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Nieprawidłowa linia %lu w liście źródeł %s (dystrybucja)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Nieprawidłowa linia %lu w liście źródeł %s (analiza URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Nieprawidłowa linia %lu w liście źródeł %s (bezwzględna dystrybucja)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Nieprawidłowa linia %lu w liście źródeł %s (analiza dystrybucji)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Pakiet %s %s nie został odnaleziony podczas przetwarzania zależności "
+#~ "plików"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr ""
+#~ "Nie udało się wykonać operacji stat na liście pakietów źródłowych %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Zbieranie zapewnień plików"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Plik %s nie zaczyna się wiadomością podpisaną w trybie clearsign"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Nie udało się znaleźć sumy kontrolnej \"%s\" w pliku Release"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Blok producenta %s nie zawiera odcisku"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Sumaryczny rozmiar obszaru zależności od wersji: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "W %s nie ma wystarczającej ilości wolnego miejsca"
+
+#~ msgid "Done"
+#~ msgstr "Gotowe"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Brak zainstalowanej bazy kluczy w %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Błąd wewnętrzny spowodowany przez AllUpgrade"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s nie jest prawidłowym pakietem DEB."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Użycie %s jako punktu montowania CD-ROM-u\n"
+#~ "Montowanie CD-ROM-u\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nie udało się nałożyć łatki %s przy użyciu mmap i operacji plikowej - "
+#~ "łatka wygląda na uszkodzoną."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nie udało się nałożyć łatki %s przy użyciu mmap, ale błąd nie pochodzi z "
+#~ "mmap - łatka wygląda na uszkodzoną"
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Ignorowanie niedostępnego wydania docelowego %s pakietu %s"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Pobieranie %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "To nie jest poprawne archiwum DEB, brakuje składnika \"%s\", \"%s\" lub "
+#~ "\"%s\""
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Błędna suma MD5"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Nie udało się odnaleźć pliku dla pakietu %s. Może to oznaczać, że trzeba "
+#~ "będzie ręcznie naprawić ten pakiet."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Nie można zapisać dziennika, openpty() nie powiodło się (/dev/pts nie "
+#~ "jest zamontowane?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Pomijanie nieistniejącego pliku %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Nie udało się usunąć %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Nie można utworzyć %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Nie udało się wykonać operacji stat na %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Pliki info i katalog tymczasowy muszą być w tym samym systemie plików"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Nie udało się przejść do katalogu administracyjnego %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Błąd wewnętrzny podczas pobierania nazwy pakietu"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Czytanie listy plików"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Nie udało się otworzyć pliku listy \"%sinfo/%s\". Jeśli nie można "
+#~ "przywrócić tego pliku, należy utworzyć go jako pusty plik i bezzwłocznie "
+#~ "przeinstalować tę samą wersję pakietu!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Nie udało się przeczytać pliku listy %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Błąd wewnętrzny przy pobieraniu węzła"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Nie udało się otworzyć pliku ominięć %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Plik ominięć jest uszkodzony"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Nieprawidłowa linia w pliku ominięć: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Błąd wewnętrzny przy dodawaniu ominięcia"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Magazyn podręczny pakietów musi zostać wcześniej zainicjalizowany"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Nie udało się znaleźć nagłówka Package:, offset %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Błędna sekcja ConfFile w pliku stanu. Offset %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Błąd przy czytaniu skrótu MD5. Offset %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Nie udało się przejść do %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Nie udało się odnaleźć poprawnego pliku kontrolnego"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nie udało się otworzyć potoku dla %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Błąd odczytu z procesu %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Otrzymano pojedynczą linię nagłówka o długości ponad %u znaków"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Uwaga: dpkg wykonał to automatycznie i celowo."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Nieprawidłowa linia %2$lu #1 pliku override %1$s"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Nieprawidłowa linia %2$lu #2 pliku override %1$s"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Nieprawidłowa linia %2$lu #3 pliku override %1$s"
+
+#~ msgid "decompressor"
+#~ msgstr "dekompresor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "należało przeczytać jeszcze %lu, ale nic nie zostało"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "należało zapisać jeszcze %lu, ale nie udało się to"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Nie udało się wykonać natychmiastowej konfiguracji rozpakowanego pakietu "
+#~ "%s. Proszę wykonać \"man 5 apt.conf\" i zapoznać się z wpisem APT::"
+#~ "Immediate-Configure aby dowiedzieć się więcej."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Błąd wewnętrzny, nie udało się odnaleźć składnika"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "E: Lista argumentów Acquire::gpgv::Options zbyt długa. Zakończenie."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Wystąpił błąd podczas przetwarzania %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr ""
+#~ "Nieprawidłowa linia %u w liście źródeł %s (identyfikator producenta)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Nie udało się uzyskać dostępu do bazy kluczy: \"%s\""
+
+#~ msgid "Could not patch file"
+#~ msgstr "Nie udało się nałożyć łatki na plik"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "No source package '%s' picking '%s' instead\n"
+#~ msgstr "Brak pakietu źródłowego \"%s\", wybieranie \"%s\" zamiast niego\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Przetwarzanie wyzwalaczy dla %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "Brak miejsca dla dynamicznego MMap"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Ponieważ zażądano tylko jednej operacji, jest bardzo prawdopodobne, że\n"
+#~ "danego pakietu po prostu nie da się zainstalować i należy zgłosić w nim\n"
+#~ "błąd."
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Linia %d jest zbyt długa (max %lu)"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..3bf3b94
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,4600 @@
+# Debian-PT translation for apt.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+#
+#
+# Miguel Figueiredo <elmig@debianpt.org>, 2005-2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2012-06-29 15:45+0100\n"
+"Last-Translator: Miguel Figueiredo <elmig@debianpt.org>\n"
+"Language-Team: Portuguese <traduz@debianpt.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Assinatura de arquivo inválida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Erro na leitura de cabeçalho membro de arquivo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Cabeçalho membro de arquivo inválido"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arquivo é demasiado pequeno"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Falha ao ler os cabeçalhos do arquivo"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Não foi possível encontrar registo de autenticação para: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Arquivo corrompido"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "A soma de controlo do tar falhou, arquivo corrompido"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Tipo de cabeçalho TAR %u desconhecido, membro %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Este não é um arquivo DEB válido, falta o membro '%s'"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Erro Interno, não foi possível localizar o membro %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Ficheiro de controle não interpretável"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Falhou escrever o ficheiro %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Falhou fechar o ficheiro %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "O caminho %s é demasiado longo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "A descompactar %s mais de uma vez"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "O directório %s é desviado"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "O pacote está a tentar escrever no alvo de desvio %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "O caminho de desvio é muito longo"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Falha stat %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Falhou renomear %s para %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "O directório %s está a ser substituído por um não-directório"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Falhou localizar o nó no seu hash bucket"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "O caminho é demasiado longo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Substituir o pacote correspondente sem versão para %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "O ficheiro %s/%s substitui o que está no pacote %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Não foi possível ler %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Não foi possível fazer stat %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode chamado em nó ainda linkado"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Falha ao localizar o elemento de hash!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Falha ao alocar desvio (diversion)"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Erro Interno em AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "A tentar sobrescrever um desvio, %s -> %s e %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Adição dupla de desvio %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Arquivo de configuração duplicado %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "O directório %s é desviado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "O directório %s é desviado"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "O directório %s é desviado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "O directório %s é desviado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "O directório %s é desviado"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Falhou o readlink %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Código de verificação hash não coincide"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "falhou renomear, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Tamanho incorrecto"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Operação %s inválida"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Erro de escrita"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Ocorreu um erro durante a verificação da assinatura. O repositório não está "
+"actualizado e serão utilizados os ficheiros anteriores de índice. Erro do "
+"GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Erro GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"O ficheiro Release para %s está expirado (inválido desde %s). Não serão "
+"aplicadas as actualizações para este repositório."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"O ficheiro Release para %s está expirado (inválido desde %s). Não serão "
+"aplicadas as actualizações para este repositório."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Distribuição em conflito: %s (esperado %s mas obtido %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Falhou obter %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Não foi possível localizar um ficheiro para o pacote %s. Isto pode "
+"significar que você precisa corrigir manualmente este pacote. (devido a "
+"arquitectura em falta)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Não conseguiu encontrar uma fonte para obter a versão '%s' de '%s'"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Changlog para %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "O driver do método %s não pôde ser encontrado."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Verifique se o pacote 'dpkg-dev' está instalado.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Método %s não iniciou correctamente"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Por favor insira o disco denominado: '%s' no leitor '%s' e pressione enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Falta directório de listas %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Falta o directório de arquivos %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Impossível criar acesso exclusivo ao directório %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Tipo do ficheiro de índice '%s' não é suportado"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "A obter o ficheiro %li de %li (%s restantes)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "A obter o ficheiro %li de %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"O pacote %s necessita ser reinstalado, mas não foi possível encontrar um "
+"repositório para o mesmo."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Erro, pkgProblemResolver::Resolve gerou falhas, isto pode ser causado por "
+"pacotes mantidos (hold)."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Não foi possível corrigir problemas, você tem pacotes mantidos (hold) "
+"estragados."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"As listas de pacotes ou o ficheiro de status não pôde ser analisado ou "
+"aberto."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Você terá que executar apt-get update para corrigir estes problemas"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "A lista de fontes não pôde ser lida."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Erro de compilação de regex - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Não foi encontrado o Release '%s' para '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Não foi encontrada a versão '%s' para '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Não foi possível encontrar a tarefa '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Não foi possível encontrar o pacote através da expressão regular '%s'"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Não foi possível encontrar o pacote através da expressão regular '%s'"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Não foi possível encontrar o pacote %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Não foi possível seleccionar versões do pacote '%s' pois é puramente virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Não foi possível seleccionar a versão mais recente a partir do pacote '%s' "
+"já que é puramente virtual"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Não é possível seleccionar a versão candidata do pacote %s já que não tem "
+"candidato"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Não é possível seleccionar a versão instalada do pacote %s pois não está "
+"instalado"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Não pode seleccionar a versão instalada nem a versão candidata do pacote "
+"'%s' pois não tem nenhuma destas"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Linha %u é demasiado longa na lista de fontes %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "A desmontar o CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "A utilizar o ponto de montagem do CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "A aguardar pelo disco...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "A montar o CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "A identificar... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Label Guardada: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "A pesquisar os ficheiros de índice do disco...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Foram encontrados %zu índices de pacotes, %zu índices de código-fonte, %zu "
+"índices de tradução e %zu assinaturas\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Não foi possível localizar quaisquer ficheiros de pacote, talvez este não "
+"seja um disco Debian ou seja a arquitectura errada?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Encontrada a etiqueta '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Isso não é um nome válido, tente novamente.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Este disco tem o nome: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "A copiar listas de pacotes..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "A escrever lista de novas source\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "As entradas de listas de Source para este Disco são:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Impossível mudar para %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Não foi possível fazer stat %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Impossível executar stat ao ponto de montagem %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Impossível executar stat ao cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Opção '%c' da linha de comandos [de %s] é desconhecida."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Opção %s de linha de comandos não é compreendida"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Opção %s da linha de comandos não é booleana"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "A opção %s necessita de um argumento."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Opção %s: Especificação de item de configuração tem de ter um =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Opção %s necessita de um número inteiro como argumento, não '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opção '%s' é demasiado longa"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "O sentido %s não é compreendido, tente verdadeiro ou falso."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operação %s inválida"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Abreviatura de tipo desconhecida: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Erro de sintaxe %s:%u: O bloco começa sem nome."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Erro de sintaxe %s:%u: Tag mal formada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Erro de sintaxe %s:%u: Lixo extra depois do valor"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Erro de sintaxe %s:%u: Directivas só podem ser feitas no nível mais alto"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Erro de sintaxe %s:%u: Demasiados includes encadeados"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Erro de sintaxe %s:%u: Incluído a partir deste ponto"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Erro de sintaxe %s:%u: Directiva '%s' não suportada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Erro de sintaxe %s:%u: directiva clara necessita de uma árvore de opções "
+"como argumento"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Erro de sintaxe %s:%u: Lixo extra no final do ficheiro"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problema ao remover o link do ficheiro %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Não está a ser utilizado acesso exclusivo para apenas leitura ao ficheiro %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Não foi possível abrir ficheiro de lock %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Não está a ser utilizado o acesso exclusivo para o ficheiro %s, montado via "
+"nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Não foi possível obter acesso exclusivo a %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+"Lista de ficheiros que não podem ser criados porque '%s' não é um directório"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "A ignorar '%s' no directório '%s' porque não é um ficheiro normal"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"A ignorar o ficheiro '%s' no directório '%s' porque não tem extensão no nome "
+"do ficheiro"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"A ignorar o ficheiro '%s' no directório '%s' porque tem uma extensão "
+"inválida no nome do ficheiro"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Esperou por %s mas não estava lá"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "O sub-processo %s recebeu uma falha de segmentação."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "O sub-processo %s recebeu o sinal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "O sub-processo %s retornou um código de erro (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "O sub-processo %s terminou inesperadamente"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Erro de leitura"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Erro de escrita"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problema ao fechar o ficheiro gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Falhou criar subprocesso IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Falhou executar compactador "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Não foi possível abrir ficheiro o %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Não foi possível abrir o descritor de ficheiro %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "lidos, ainda restam %llu para serem lidos mas não resta nenhum"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "escritos, ainda restam %llu para escrever mas não foi possível"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problema ao fechar o ficheiro %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problema ao renomear o ficheiro %s para %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problema sincronizando o ficheiro"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Não foi possível fazer stat %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Não conseguiu escrever para %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Não é possível fazer mmap a um ficheiro vazio"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Não foi possível fazer mmap de %llu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Não foi possível duplicar o descritor de ficheiro %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Não foi possível fechar mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Não foi sincronizar mmap "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Não foi possível fazer mmap de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Falhou truncar o ficheiro"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"O Dynamic MMap ficou sem espaço. Por favor aumente o tamanho de APT::Cache-"
+"Start. Valor actual: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Não foi possível aumentar o tamanho do MMap pois o limite de %lu bytes já "
+"foi alcançado."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Não foi possível aumentar o tamanho do MMap pois o crescimento automático "
+"está desabilitado pelo utilizador."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Erro !"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Pronto"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Pronto"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "A selecção %s não foi encontrada"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Não foi possível fazer parse ao ficheiro Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Nenhuma secção, no ficheiro Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Nenhuma entrada hash no ficheiro Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Entrada inválida, '%s', no ficheiro de Release: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Não foi possível fazer parse ao ficheiro do pacote %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Não foi possível obter acesso exclusivo ao directório de administração (%s), "
+"outro processo está a utilizá-lo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Não foi possível criar acesso exclusivo ao directório de administração (%s), "
+"é root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"O dpkg foi interrompido, para corrigir o problema tem de correr manualmente "
+"'%s'"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Não foi possível obter acesso exclusivo ao directório de administração (%s), "
+"outro processo está a utilizá-lo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Não foi possível criar acesso exclusivo ao directório de administração (%s), "
+"é root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Sem acesso exclusivo"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "A preparar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "A preparar para configurar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "A preparar a remoção de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "A preparar para remover completamente %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "A notar o desaparecimento de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "A correr o 'trigger' de pós-instalação %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s instalado"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "A configurar %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Falta o directório '%s'"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Não foi possível abrir ficheiro o '%s'"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "A desempacotar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "A instalar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "A remover %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "A remover completamente %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Remoção completa de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Não conseguiu escrever para %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "A operação foi interrompida antes de poder terminar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Nenhum relatório apport escrito pois MaxReports já foi atingido"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problemas de dependências - deixando por configurar"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Nenhum relatório apport escrito pois a mensagem de erro indica que é um erro "
+"de seguimento de um erro anterior."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Nenhum relatório apport escrito pois a mensagem de erro indica erro de disco "
+"cheio"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Nenhum relatório apport escrito pois a mensagem de erro indica um erro de "
+"memória esgotada"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Nenhum relatório apport escrito pois a mensagem de erro indica erro de disco "
+"cheio"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Nenhum relatório apport escrito pois a mensagem de erro indica um erro de I/"
+"O do dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "A construir árvore de dependências"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versões candidatas"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Geração de dependências"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "A ler a informação de estado"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Falhou abrir o StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Falha escrever ficheiro temporário StateFile %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Enviar cenário a resolver"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Enviar pedido para resolvedor"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Preparar para receber solução"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "O resolvedor externo falhou sem uma mensagem de erro adequada"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Executar resolvedor externo"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Executar resolvedor externo"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Enviar pedido para resolvedor"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Enviar cenário a resolver"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "O resolvedor externo falhou sem uma mensagem de erro adequada"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Escreveu %i registos.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Escreveu %i registos com %i ficheiros em falta.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Escreveu %i registos com %i ficheiros não coincidentes\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Escreveu %i registos com %i ficheiros em falta e %i ficheiros não "
+"coincidentes\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Não foi possível encontrar registo de autenticação para: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash não coincide para: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Sistema de empacotamento '%s' não é suportado"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr ""
+"Não foi possível determinar um tipo de sistema de empacotamento adequado"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "A correr o dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Não foi possível proceder à configuração imediata em '%s'. Para detalhes, "
+"por favor veja man 5 apt.conf em APT::Immediate-Configure. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Não pode configurar '%s'. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Esta execução da instalação irá necessitar de remover temporariamente o "
+"pacote essencial %s devido a um loop de Conflitos/Pré-Dependências. Isto "
+"normalmente é mau, mas se você quer realmente fazer isso, active a opção "
+"APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Cache de pacotes vazia"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "O ficheiro de cache de pacotes está corrompido"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "O ficheiro de cache de pacotes é de uma versão incompatível"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Este APT não suporta o sistema de versões '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "A cache de pacotes foi gerada para uma arquitectura diferente"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "O ficheiro de cache de pacotes está corrompido, é demasiado pequeno"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Depende"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Pré-Depende"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Sugere"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Em Conflito"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recomenda"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Substitui"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Estraga"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Aumenta"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Obsoleta"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "importante"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "necessário"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "padrão"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "A cache possui um sistema de versões incompatível"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Ocorreu um erro ao processar %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de nomes de pacotes que este APT é capaz de "
+"suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de versões que este APT é capaz de suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de descrições que este APT é capaz de suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de dependências que este APT é capaz de suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "A ler as listas de pacotes"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Erro de I/O ao gravar a cache de código fonte"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Tipo do ficheiro de índice '%s' não é suportado"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"O valor '%s' é inválido para APT::Default-Release porque tal lançamento não "
+"está disponível nas fontes"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Registo inválido no ficheiro de preferências %s, sem cabeçalho Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Não foi possível entender o tipo de marca (pin) %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Nenhuma prioridade (ou zero) especificada para marcação (pin)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Override %s malformado linha %llu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Linha mal formada %u na lista de fontes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "O tipo '%s' não é conhecido na linha %u na lista de fontes %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Linha mal formada %u na lista de fontes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "O tipo '%s' não é conhecido na linha %u na lista de fontes %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Você deve colocar alguns URIs 'source' no seu sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Falhou o download de alguns ficheiros de índice. Foram ignorados ou os "
+"antigos foram usados em seu lugar."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "A calcular a actualização"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Obter:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Obtidos %sB em %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [A trabalhar]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Troca de mídia: Por favor insira o disco chamado\n"
+" '%s'\n"
+"no leitor '%s' e pressione enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "A corrigir dependências..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " falhou."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Não foi possível corrigir dependências"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Não foi possível minimizar o conjunto de actualizações"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Feito"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Você pode querer executar 'apt --fix-broken install' para corrigir isso."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dependências não satisfeitas. Tente 'apt --fix-broken install' sem nenhum "
+"pacote (ou especifique uma solução)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Note, a seleccionar '%s' para a tarefa '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Note, a seleccionar '%s' para a expressão regular '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Note, a seleccionar '%s' para a expressão regular '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "O pacote %s é um pacote virtual disponibilizado por:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Instalado]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr "[Não é versão candidata]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Você deve seleccionar explicitamente um para instalar."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"O pacote %s não está disponível, mas é referenciado por outro pacote.\n"
+"Isso pode significar que o pacote falta, ou ficou obsoleto, ou\n"
+"está disponível somente a partir de outra fonte\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "No entanto, os seguintes pacotes substituem-no:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "O pacote '%s' não tem candidato para instalação"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Pacotes virtuais como '%s' não podem ser removidos\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"O pacote '%s' não está instalado, por isso não será removido. Queria dizer "
+"'%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "O pacote '%s' não está instalado, por isso não será removido\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Note, a seleccionar '%s' em vez de '%s'\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Este APT tem Poderes de Super Vaca."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Não foi encontrado nenhum pacote"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "AVISO: Os seguintes pacotes não podem ser autenticados!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Aviso de autenticação ultrapassado.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Alguns pacotes não puderam ser autenticados"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Instalar estes pacotes sem verificação?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Há problemas e foi utilizado -y sem --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Não foi possível determinar o espaço livre em %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Você não possui espaço livre suficiente em %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Impossível criar acesso exclusivo ao directório de downloads"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Alguns pacotes não puderam ser instalados. Isso pode significar que\n"
+"você solicitou uma situação impossível ou se você está a usar a\n"
+"distribuição unstable em que alguns pacotes pedidos ainda não foram \n"
+"criados ou foram movidos do Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "A seguinte informação pode ajudar a resolver a situação:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Pacotes estragados"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Não foi possível obter alguns arquivos, tente talvez correr apt-get update "
+"ou tente com --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Erro Interno, InstallPackages foi chamado com pacotes estragados!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pacotes precisam de ser removidos mas Remove está desabilitado."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Há problemas e foi utilizado -y sem --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Há problemas e foi utilizado -y sem --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Erro Interno, Ordering não terminou"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Estranho... Os tamanhos não coincidiram, escreva para apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "É necessário obter %sB/%sB de arquivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "É necessário obter %sB de arquivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Após esta operação, serão utilizados %sB adicionais de espaço em disco.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Após esta operação, será libertado %sB de espaço em disco.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Trivial Only especificado mas isto não é uma operação trivial."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Sim, faça como eu digo!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Você está prestes a fazer algo potencialmente nocivo.\n"
+"Para continuar escreva a frase '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Abortado."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Deseja continuar?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Falhou o download de alguns ficheiros"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Download completo e em modo de fazer apenas o download"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing e troca de mídia não são suportados actualmente"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Não foi possível corrigir os pacotes em falta."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "A abortar a instalação."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"O seguinte pacote desapareceu do seu sistema pois\n"
+"todos os ficheiros foram sobrescritos por outros pacotes:"
+msgstr[1] ""
+"Os seguintes pacotes desapareceram do seu sistema pois\n"
+"todos os ficheiros foram por outros pacotes:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Nota: Isto foi feito automaticamente e intencionalmente pelo dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Não é suposto nós apagarmos coisas, não pode iniciar o AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, parece que o AutoRemover destruiu algo que realmente não deveria ter\n"
+"acontecido. Por favor arquive um relatório de bug contra o apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Erro Interno, o AutoRemover estragou coisas"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"O seguinte pacote foi instalado automaticamente e já não é necessário:"
+msgstr[1] ""
+"Os seguintes pacotes foram instalados automaticamente e já não são "
+"necessários:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "O pacote %lu foi instalado automaticamente e já não é necessário.\n"
+msgstr[1] ""
+"Os pacotes %lu foram instalados automaticamente e já não são necessários.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Utilize '%s' para o remover."
+msgstr[1] "Utilize '%s' para os remover."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Os seguintes pacotes extra serão instalados:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Pacotes sugeridos:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Pacotes recomendados:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Saltando %s, já está instalado e a actualização não está definida.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Saltando %s, não está instalado e só são pedidas actualizações.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+"A reinstalação de %s não é possível, o download do mesmo não pode ser "
+"feito.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s já está na versão mais recente.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s está definido para ser instalado manualmente.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versão seleccionada '%s' (%s) para '%s'\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versão seleccionada '%s' (%s) para '%s' devido a '%s'\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"NOTE:\tIsto é apenas uma simulação!\n"
+"\to %s necessita de privilégios de root para a execução real.\n"
+"\tTenha em mente que o acesso exclusivo está desabilitado,\n"
+"\tpor isso não confie na relevância da real situação actual!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "mas %s está instalado"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "mas %s está para ser instalado"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "mas não é instalável"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "mas é um pacote virtual"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "mas não vai ser instalado"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "mas não está instalado"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ou"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Os pacotes a seguir têm dependências não satisfeitas:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Serão instalados os seguintes NOVOS pacotes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Serão REMOVIDOS os seguintes pacotes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Serão mantidos em suas versões actuais os seguintes pacotes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Serão actualizados os seguintes pacotes:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Será feito o DOWNGRADE aos seguintes pacotes:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Os seguintes pacotes mantidos serão mudados:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (devido a %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"AVISO: Os seguintes pacotes essenciais serão removidos.\n"
+"Isso NÃO deverá ser feito a menos que saiba exactamente o que está a fazer!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu pacotes actualizados, %lu pacotes novos instalados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstalados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu a que foi feito o downgrade, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu a remover e %lu não actualizados.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu pacotes não totalmente instalados ou removidos.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[S/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "s/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "S"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Tem de fornecer pelo menos um padrão de busca"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Ficheiros de Pacotes :"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"A cache está dessincronizada, não pode x-referenciar um ficheiro de pacote"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pacotes Marcados:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalado: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidato: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(nenhum)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabela de Versão:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Não foi possível encontrar o pacote através da expressão regular '%s'"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Não foi possível encontrar o pacote através da expressão regular '%s'"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Não foi possível encontrar o pacote através da expressão regular '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "A escolher '%s' como pacote pacote de código fonte em vez de '%s'\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Ignorar a versão '%s', não disponível, do pacote '%s'"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Tem de especificar pelo menos um pacote para obter o código fonte de"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Não foi possível encontrar um pacote de código fonte para %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"AVISO: o empacotamento de '%s' é mantido no sistema de controle de versões "
+"'%s' em:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Por favor utilize:\n"
+"%s\n"
+"para obter as últimas actualizações (possivelmente por lançar) ao pacote.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "A saltar o ficheiro '%s', já tinha sido feito download'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "É necessário obter %sB/%sB de arquivos de código fonte.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "É necessário obter %sB de arquivos de código fonte.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Obter código fonte %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Falhou obter alguns arquivos."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+"A saltar a descompactação do pacote de código fonte já descompactado em %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "O comando de descompactação '%s' falhou.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Verifique se o pacote 'dpkg-dev' está instalado.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "O comando de compilação '%s' falhou.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr ""
+"Não foi possível obter informações de dependências de compilação para %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s não tem dependências de compilação.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Nenhuma informação de arquitectura disponível para %s. Para configuração "
+"veja apt.conf(5) APT::Architectures"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Deve especificar pelo menos um pacote para verificar as dependências de "
+"compilação"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Falhou processar as dependências de compilação"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Falhou processar as dependências de compilação"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Falha ao baixar %s %s\n"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "O pacote %s versão %s tem uma dependência não satisfeita:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "O comando update não leva argumentos"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "O comando update não leva argumentos"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Total de nomes de pacotes: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Total de estruturas de pacotes: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Pacotes normais: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Pacotes virtuais puros: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pacotes virtuais únicos: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Pacotes virtuais misturados: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Faltam: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Total de versões distintas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Total de descrições distintas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Total de dependências: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Total de relações ver/ficheiro: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Total de relações Desc/Ficheiro: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Total de Mapeamentos 'Provides': "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Total de strings globbed: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Espaço total desperdiçado: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Espaço total contabilizado: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Este comando foi depreceado. Em vez disso por favor utilize 'apt-mark "
+"showauto'."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Mostrar registos de código-fonte"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Procurar na lista de pacotes por um padrão regex"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Mostrar informações em bruto de dependências de um pacote"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Mostrar a informação de dependências inversas de um pacote"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Mostrar um registo legível sobre o pacote"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Listar o nome de todos os pacotes no sistema"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Mostrar as configurações de políticas"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Por favor indique um nome para este Disco, tal como 'Debian 5.0.3 Disco 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Por favor insira um Disco no leitor e pressione enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Falhou ao montar '%s' para '%s'"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Repita este processo para o resto dos CDs no seu conjunto."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "os argumentos não estão em pares"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Utilização: apt-config [opções] comando\n"
+"\n"
+"O apt-config é uma ferramenta simples para ler o ficheiro de config do APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Utilização: apt-extracttemplates ficheiro1 [ficheiro2 ...]\n"
+"\n"
+"O apt-extracttemplates é uma ferramenta para extrair configuração\n"
+"e informação de template de pacotes debian.\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda\n"
+" -t Definir o directório temporário\n"
+" -c=? Ler este ficheiro de configuração\n"
+" -o=? Definir uma opção arbitrária de configuração, p.e.: -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Não pode obter a versão do debconf. O debconf está instalado?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Impossível encontrar o pacote %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s está definido para ser instalado automaticamente.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Este comando foi depreceado. Em vez disso, por favor utilize 'apt-mark auto' "
+"e 'apt-mark manual'."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Erro Interno, o solucionador de problemas estragou coisas"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Módulos Suportados:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Utilização: apt-get [opções] comando\n"
+" apt-get [opções] install|remove pacote1 [pacote2 ...]\n"
+" apt-get [opções] source pacote1 [pacote2 ...]\n"
+"\n"
+"O apt-get é um interface simples de linha de comandos para obter\n"
+"e instalar pacotes. Os comandos utilizados mais frequentemente\n"
+"são update e install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Obter novas listas de pacotes"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Executar uma actualização"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalar novos pacotes (o pacote é libc6 e não libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalar novos pacotes (o pacote é libc6 e não libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Remover pacotes"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Remover pacotes e ficheiros de configuração"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Remover automaticamente todos os pacotes não utilizados"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Actualizar a distribuição, veja apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Seguir as escolhas feitas no dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configurar as dependências de compilação de pacotes de códigofonte"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Apagar ficheiros de arquivo obtidos por download"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Apagar ficheiros de arquivo antigos obtidos por download"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verificar se existem dependências erradas"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Fazer o download de arquivos de código-fonte"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Obter o pacote binário para o directório actual"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Obter e mostrar o changelog de um pacote"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Tem de especificar pelo menos um pacote para obter o código fonte de"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Utilização: apt-internal-solver\n"
+"\n"
+"O apt-internal-solver é um interface para utilizar o actual interno como um\n"
+" resolvedor externo para a família APT para depuração ou semelhante.\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda.\n"
+" -q Saída para registo - sem indicador de progresso\n"
+" -c=? Ler este ficheiro de configuração\n"
+" -o=? Definir uma opção de configuração arbitrária, p.e. dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Utilização: apt-internal-solver\n"
+"\n"
+"O apt-internal-solver é um interface para utilizar o actual interno como um\n"
+" resolvedor externo para a família APT para depuração ou semelhante.\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda.\n"
+" -q Saída para registo - sem indicador de progresso\n"
+" -c=? Ler este ficheiro de configuração\n"
+" -o=? Definir uma opção de configuração arbitrária, p.e. dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s não pode ser marcado pois não está instalado.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s já estava definido para ser instalado manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s já estava definido para ser instalado automaticamente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Serão instalados os seguintes NOVOS pacotes:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s já estava marcado para manter.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s já estava para não manter.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Falhou executar dpkg. É root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s marcado para manter.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Cancelou manter em %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Utilização: apt-mark [opções] {auto|manual} pacote1 [pacote2...]\n"
+"\n"
+"apt-mark é um interface simples de linha de comandos para marcar pacotes "
+"como instalados de forma manual ou automática. Pode também listar "
+"marcações.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Marca os pacotes como instalados automaticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Marca os pacotes como instalados manualmente"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Marca os pacotes como instalados automaticamente"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Registo de pacote desconhecido!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "A ler as listas de pacotes"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Pacotes Marcados:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Pacotes Marcados:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Pacotes estragados"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "mas é um pacote virtual"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "A ler a informação de estado"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Configuração pré-definida errada!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Carregue em enter para continuar."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Deseja apagar quaisquer ficheiros .deb obtidos previamente?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Ocorreram alguns erros ao descompactar. Os pacotes que foram instalados"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "serão configurados. Isto pode resultar em erros duplicados"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "causados por dependências em falta. Isto está OK, somente os erros"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"acima desta mensagem são importantes. Por favor resolva-os e execute "
+"[I]nstalar novamente"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "A juntar a informação disponível"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "A lista de extensão de pacotes é demasiado longa"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Erro ao processar o directório %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lista de extensão de códigos-fonte é demasiado longa"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Erro ao escrever o cabeçalho no ficheiro de conteúdo"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Erro ao processar o conteúdo %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Utilização: apt-ftparchive [opções] comando\n"
+"Comandos: packages caminho_binário [ficheiro_override [prefixo_caminho]]\n"
+" sources caminho_fonte [ficheiro_override [prefixo_caminho]]\n"
+" contents caminho\n"
+" release caminho\n"
+" generate config [grupos]\n"
+" clean config\n"
+"\n"
+"O apt-ftparchive gera ficheiros de índice para repositórios Debian. Ele \n"
+"suporta muitos estilos de criação, desde totalmente automatizados até \n"
+"substitutos funcionais para o dpkg-scanpackages e dpkg-scansources\n"
+"\n"
+"O apt-ftparchive gera ficheiros Packages a partir de uma árvore de .debs.\n"
+" O ficheiro Package contém o conteúdo de todos os campos de controle de \n"
+"cada pacote bem como o hash MD5 e tamanho do ficheiro. É suportado um \n"
+"ficheiro override para forçar o valor de Priority e Section.\n"
+"\n"
+"Similarmente, o apt-ftparchive gera ficheiros Sources a partir de uma \n"
+"árvore de .dscs. A opção --source-override pode ser utilizada para \n"
+"especificar um ficheiro override de fontes\n"
+"\n"
+"Os comandos 'packages' e 'sources' devem ser executados na raiz da \n"
+"árvore. CaminhoBinário deve apontar para a base de procura recursiva \n"
+"e o ficheiro override deve conter as flags override. CaminhoPrefixo é \n"
+"incluído aos campos filename caso esteja presente. Exemplo de uso do \n"
+"repositório Debian :\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda\n"
+" --md5 Controlar a criação do MD5\n"
+" -s=? Ficheiro override de código-fonte \n"
+" -q Silencioso\n"
+" -d=? Seleccionar a base de dados de caching opcional\n"
+" --no-delink Habilitar o modo de debug delinking\n"
+" --contents Controlar a criação do ficheiro de conteúdo\n"
+" -c=? Ler este ficheiro de configuração\n"
+" -o=? Definir uma opção de configuração arbitrária"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nenhuma selecção coincidiu"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Faltam alguns ficheiros no grupo `%s' do ficheiro do pacote"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "A base de dados estava corrompida, ficheiro renomeado para %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "A base de dados é antiga, a tentar actualizar %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"O formato da BD é inválido. Se actualizou a partir de uma versão antiga do "
+"apt, por favor remova-a e crie novamente a base de dados."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Não foi possível abrir o ficheiro %s da base de dados: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Falhou o readlink %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "O arquivo não tem registo de controlo"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Não foi possível obter um cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Falhou alocar memória"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algoritmo de compressão desconhecido '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Saída compactada %s precisa de um conjunto de compressão"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Falha ao criar pipe IPC para subprocesso"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Falhou o fork"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Compactar filho"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Erro Interno, falhou criar %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Falhou o IO para subprocesso/arquivo"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Falhou ler durante o cálculo de MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Não foi possível abrir %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Override %s malformado linha %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Falhou ler o ficheiro override %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Override %s malformado linha %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Override %s malformado linha %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Override %s malformado linha %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Não foi possível ler o directório %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Não foi possível fazer stat %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Os erros aplicam-se ao ficheiro "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Falhou resolver %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Falhou ao percorrer a árvore"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Falhou abrir %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Falhou ligar %s a %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Limite DeLink de %sB atingido.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arquivo não possuía campo package"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s não possui entrada override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " o maintainer de %s é %s, não %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s não possui fonte de entrada de 'override'\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s também não possui entrada binária de 'override'\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "A aguardar por cabeçalhos"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "O servidor HTTP enviou um cabeçalho de resposta inválido"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Linha de cabeçalho errada"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "O servidor HTTP enviou um cabeçalho Content-Length inválido"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "O servidor HTTP enviou um cabeçalho Content-Range inválido"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Este servidor HTTP possui suporte de range errado"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Formato de data desconhecido"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Dados de cabeçalho errados"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "A ligação falhou"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Erro interno"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Não foi capaz de ler a base de dados de cdrom %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Por favor utilize o apt-cdrom para fazer com que este CD seja reconhecido "
+"pelo APT. apt-get update não pode ser utilizado para adicionar novos CDs"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD errado"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Impossível desmontar o CD-ROM em %s, pode ainda estar a ser utilizado."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disco não encontrado."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Ficheiro não encontrado"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "A Ligar a %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "A Ligar a %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Não foi possível criar um socket para %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Não posso iniciar a ligação para %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Falhou"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Não foi possível ligar em %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Não foi possível ligar a %s:%s (%s), a conexão expirou"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "A ligar a %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Não foi possível resolver '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Falha temporária a resolver '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Algo estranho aconteceu ao resolver '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Algo estranho aconteceu ao resolver '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Não foi possível ligar a %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Falhou o stat"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI inválido, URIs locais não devem começar por //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "A identificar-se no sistema"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Não foi possível determinar o nome do posto"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Não foi possível determinar o nome local"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "O servidor recusou a ligação e respondeu: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER falhou, o servidor respondeu: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS falhou, o servidor respondeu: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Foi especificado um servidor de proxy mas não um script de login, Acquire::"
+"ftp::ProxyLogin está vazio."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "O comando de script de login '%s' falhou, o servidor respondeu: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE falhou, o servidor respondeu: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Foi atingido o tempo limite de ligação"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "O servidor fechou a ligação"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Uma resposta sobrecarregou o buffer."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Corrupção de protocolo"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Não foi possível criar um socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Não foi possível ligar socket de dados, a ligação expirou"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Não foi possível ligar socket passivo."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo não foi capaz de obter um socket de escuta"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Não foi possível fazer o bind a um socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Não foi possível executar listen no socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Não foi possível determinar o nome do socket"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Não foi possível enviar o comando PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Família de endereços %u desconhecida (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT falhou, o servidor respondeu: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Ligação de socket de dados expirou"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Impossível aceitar ligação"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problema ao calcular o hash do ficheiro"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Não foi possível obter o ficheiro, o servidor respondeu '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Expirou o tempo do socket de dados"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "A transferência de dados falhou, o servidor respondeu '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Pesquisa"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Não foi possível invocar "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Pelo menos uma assinatura inválida foi encontrada."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Erro interno: Assinatura válida, mas não foi possível determinar a impressão "
+"digital da chave?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Não foi possível executar 'apt-key' para verificar a assinatura (o gnupg "
+"está instalado?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Erro desconhecido ao executar apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "As seguintes assinaturas eram inválidas:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"As seguintes assinaturas não puderam ser verificadas porque a chave pública "
+"não está disponível:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Erro ao escrever para o ficheiro"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Erro ao ler do servidor. O lado remoto fechou a ligação"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Erro ao ler do servidor"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Erro ao escrever para ficheiro"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "A selecção falhou"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "O tempo da ligação expirou"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Erro ao escrever para o ficheiro de saída"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Falhou definir hora de modificação"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Ligação encerrada prematuramente"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Ficheiros vazios não podem ser arquivos válidos"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Cabeçalho membro de arquivo inválido %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s removido"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "O ficheiro do pacote %s está dessincronizado."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Os arquivos de índice de pacotes estão corrompidos. Nenhum campo "
+#~ "Filename: para o pacote %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Não foi encontrado ficheiro de mirror '%s'"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Não pode ler ficheiro de mirror '%s'"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Não pode ler ficheiro de mirror '%s'"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Mirror: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "A abrir o ficheiro de configuração %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "A abrir %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Incapaz de encontrar a entrada '%s' esperada no ficheiro Release (entrada "
+#~ "errada em sources.list ou ficheiro malformado)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dependências não satisfeitas. Tente utilizar --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Você deve querer executar 'apt --fix-broken install' para corrigir estes:"
+
+#~ msgid "(not found)"
+#~ msgstr "(não encontrado)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Marcação do Pacote: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Não existe qualquer chave pública disponível para as seguintes IDs de "
+#~ "chave:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "O directório %s é desviado"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "a dependência de %s por %s não pode ser satisfeita porque %s não é "
+#~ "permitido em pacotes '%s'"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "a dependência de %s para %s não pôde ser satisfeita porque o pacote %s "
+#~ "não pôde ser encontrado"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Falha ao satisfazer a dependência %s para %s: O pacote instalado %s é "
+#~ "demasiado novo"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "a dependência de %s para %s não pode ser satisfeita porque a versão "
+#~ "candidata do pacote %s não pode satisfazer os requisitos de versão"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "a dependência de %s para %s não pode ser satisfeita porque o pacote %s "
+#~ "não tem versão candidata"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Falha ao satisfazer a dependência %s para %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Não foi possível satisfazer as dependências de compilação para %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problema ao executar unlinking %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Falhou o unlink %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Utilização: apt-cache [opções] comando\n"
+#~ " apt-cache [opções] show pacote1 [pacote2 ...]\n"
+#~ "\n"
+#~ "O apt-cache é uma ferramenta de baixo nível utilizada para questionar\n"
+#~ " informação dos ficheiros de cache binários do APT\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Opções:\n"
+#~ " -h Este texto de ajuda.\n"
+#~ " -p=? A cache de pacotes.\n"
+#~ " -s=? A cache de fontes.\n"
+#~ " -q Desabilitar o indicador de progresso.\n"
+#~ " -i Mostrar apenas dependências importantes para o comando unmet.\n"
+#~ " -c=? Ler este ficheiro de configuração.\n"
+#~ " -o=? Definir uma opção arbitrária de configuração, p.e.: -o dir::cache=/"
+#~ "tmp\n"
+#~ "Para mais informações veja as páginas do manual apt-cache(8) e apt."
+#~ "conf(5).\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Opções:\n"
+#~ " -h\tEste texto de ajuda.\n"
+#~ " -q\tSaída para registo - sem indicador de progresso\n"
+#~ " -qq Sem saída excepto para erros\n"
+#~ " -s\tNão fazer. Apenas escreve o que seria feito.\n"
+#~ " -f\tler/escrever marcação auto/manual no ficheiro indicado\n"
+#~ " -c=? Ler este ficheiro de configuração\n"
+#~ " -o=? Definir uma opção de configuração arbitrária, p.e. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Para mais informações veja as páginas apt-mark(8) e apt.conf(5) do manual."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opções:\n"
+#~ " -h Este texto de ajuda.\n"
+#~ " -c=? Ler este ficheiro de configuração\n"
+#~ " -o=? Definir uma opção arbitrária de configuração, p.e.: -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Opções:\n"
+#~ " -h\tEste texto de ajuda.\n"
+#~ " -q\tSaída para registo - sem indicador de progresso\n"
+#~ " -qq Sem saída excepto para erros\n"
+#~ " -s\tNão fazer. Apenas escreve o que seria feito.\n"
+#~ " -f\tler/escrever marcação auto/manual no ficheiro indicado\n"
+#~ " -c=? Ler este ficheiro de configuração\n"
+#~ " -o=? Definir uma opção de configuração arbitrária, p.e. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Para mais informações veja as páginas apt-mark(8) e apt.conf(5) do manual."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Utilização: apt-sortpkgs [opções] ficheiro1 [ficheiro2 ...]\n"
+#~ "\n"
+#~ "O apt-sortpkgs é uma ferramenta simples para ordenar ficheiros de "
+#~ "pacotes.\n"
+#~ "A opção -s é utilizada para indicar que tipo de ficheiro é.\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -h Este texto de ajuda\n"
+#~ " -s Utilizar a ordenação de ficheiros de código-fonte\n"
+#~ " -c=? Ler este ficheiro de configuração\n"
+#~ " -o=? Definir uma opção arbitrária de configuração, p.e.: -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "O processo filho falhou"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr ""
+#~ "Tem de especificar pelo menos um pacote para obter o código fonte de"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Falhou a criação de pipes"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Falhou executar gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s para %s compilado em %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Falhou criar FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Linha mal formada %lu na lista de fontes %s (parse de URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Linha mal formada %lu na lista de fontes %s ([opção] não interpretável)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Linha mal formada %lu na lista de fontes %s ([opção] demasiado curta)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Linha mal formada %lu na lista de fontes %s ([%s] não é uma atribuição)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Linha mal formada %lu na lista de fontes %s ([%s] não tem chave)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Linha mal formada %lu na lista de fontes %s ([%s] chave %s não tem valor)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Linha mal formada %lu na lista de fontes %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Linha mal formada %lu na lista de fontes %s (distribuição)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Linha mal formada %lu na lista de fontes %s (parse de URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Linha mal formada %lu na lista de fontes %s (distribuição absoluta)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Linha mal formada %lu na lista de fontes %s (dist parse)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "O pacote %s %s não foi encontrado ao processar as dependências de "
+#~ "ficheiros"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr ""
+#~ "Não foi possível executar stat à lista de pacotes de código fonte %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "A obter File Provides"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "O ficheiro %s não começa com uma mensagem assinada"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Não foi possível encontrar hash sum para '%s' no ficheiro Release"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "O bloco de fabricante %s não contém a impressão digital"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Espaço total de dependência de versão: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Você não possui espaço livre suficiente em %s"
+
+#~ msgid "Done"
+#~ msgstr "Pronto"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Nenhum keyring instalado em %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Erro Interno, AllUpgrade estragou algo"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s não é um pacote DEB válido."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Utilizando o ponto de montagem do CD-ROM %s\n"
+#~ "A montar o CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Não foi possível aplicar o patch %s com mmap e com a utilização de "
+#~ "operação de ficheiro - o patch parece estar corrompido."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Não foi possível aplicar o patch %s com mmap (mas não é uma falha "
+#~ "especifica do mmap) - o patch parece corrompido."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr ""
+#~ "Ignorar o lançamento pretendido, não disponível, '%s' do pacote '%s'"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "A obter %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Este não é um arquivo DEB válido, não tem '%s', '%s' ou o membro '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum não coincide"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Não foi possível localizar arquivo para o pacote %s. Isto pode significar "
+#~ "que você precisa consertar manualmente este pacote."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Não é possível escrever o registo (log), openpty() falhou (/dev/pts não "
+#~ "está montado?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "A saltar ficheiro %s inexistente"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Falhou remover %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Não foi capaz de criar %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Falhou stat %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Os directórios info e temp precisam estar no mesmo sistema de ficheiros"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Falhou mudar para o directório administrativo %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Erro Interno ao obter um nome de pacote"
+
+#~ msgid "Reading file listing"
+#~ msgstr "A ler a listagem de ficheiros"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Falha abrir o ficheiro da lista '%sinfo/%s'. Caso você não consiga "
+#~ "restaurar este ficheiro, crie outro vazio e reinstale imediatamente a a "
+#~ "mesma versão do pacote!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Falhou ler o ficheiro de lista %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Erro interno ao obter um nó"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Falhou abrir o ficheiro de desvios %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "O ficheiro de desvios está corrompido"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Linha inválida no ficheiro de desvio: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Erro interno ao adicionar um desvio"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "A cache de pacotes tem de ser inicializada primeiro"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Falhou encontrar um Pacote: cabeçalho, posição %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Secção ConfFile errada no ficheiro de estado. Offset %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Erro ao fazer parse ao MD5. Offset %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Não foi possível mudar para %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Falha em localizar um ficheiro de controle válido"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Não foi possível abrir pipe para %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Erro de leitura do processo %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Recebi uma única linha de cabeçalho acima de %u caracteres"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Nota: Isto foi feito automaticamente e intencionalmente pelo dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Override %s malformado linha %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Override %s malformado linha %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Override %s malformado linha %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "descompactador"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "lido, ainda restam %lu para serem lidos mas não resta nenhum"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "escrito, ainda restam %lu para escrever mas não foi possível"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Não foi possível proceder à configuração imediata no já descompactado "
+#~ "'%s'. Para mais detalhes por favor veja man 5 apt.conf em APT::Immediate-"
+#~ "Configure."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Ocorreu um erro ao processar %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Ocorreu um erro ao processar %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Ocorreu um erro ao processar %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Ocorreu um erro ao processar %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Ocorreu um erro ao processar %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Ocorreu um erro ao processar %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Ocorreu um erro ao processar %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Ocorreu um erro ao processar %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Ocorreu um erro ao processar %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Ocorreu um erro ao processar %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Erro Interno, não foi possível localizar membro"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Erro interno, grupo '%s' não tem pseudo-pacote instalável"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Ficheiro Release expirou, a ignorar %s (inválido desde %s)"
+
+#~ msgid "You must give exactly one pattern"
+#~ msgstr "Você deve dar exactamente um pattern"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: A lista de argumentos de Acquire::gpgv::Options é demasiado longa. A "
+#~ "sair."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Ocorreu um erro ao processar %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Linha malformada %u na lista de fontes %s (id de fornecedor)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Não foi possível aceder à 'keyring': '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Não foi possível aplicar o 'patch' ao ficheiro"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "A processar chamadas para %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "'Dynamic MMap' ficou sem espaço"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Já que você requisitou uma única operação é extremamente provável que o \n"
+#~ "pacote esteja simplesmente não instalável e deve ser enviado um\n"
+#~ "relatório de bug contra esse pacote."
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "a linha %d é demasiado longa (max %lu)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Linha %d é demasiado longa (max %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Um erro ocorreu ao processar %s (NovoArquivoVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Um erro ocorreu ao processar %s (NovoArquivoVer1)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Label Guardada: %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "Encontrou %i indexes de pacotes, %indexes de source e %i assinaturas\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Select falhou."
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Data do ficheiro mudou %s"
+
+#~ msgid "Reading file list"
+#~ msgstr "Lendo Lista de Ficheiros"
+
+#~ msgid "Could not execute "
+#~ msgstr "Impossível de executar "
+
+#~ msgid "Preparing for remove with config %s"
+#~ msgstr "A preparar para remover com a configuração %s"
+
+#~ msgid "Removed with config %s"
+#~ msgstr "Removido com a configuração %s"
+
+#~ msgid "The pkg cache must be initialize first"
+#~ msgstr "A cache de pacotes deve ser inicializada primeiro"
+
+#~ msgid "Error occured while processing %s (NewPackage)"
+#~ msgstr "Um erro ocorreu ao processar %s (NovoPacote)"
+
+#~ msgid "Error occured while processing %s (UsePackage1)"
+#~ msgstr "Um erro ocorreu ao processar %s (UsePacote1)"
+
+#~ msgid "Error occured while processing %s (UsePackage2)"
+#~ msgstr "Um erro ocorreu ao processar %s (UsePacote2)"
+
+#~ msgid "Error occured while processing %s (NewVersion1)"
+#~ msgstr "Um erro ocorreu ao processar %s (NovaVersão1)"
+
+#~ msgid "Error occured while processing %s (UsePackage3)"
+#~ msgstr "Um erro ocorreu ao processar %s (UsePacote3)"
+
+#~ msgid "Error occured while processing %s (NewVersion2)"
+#~ msgstr "Um erro ocorreu ao processar %s (NovaVersão2)"
+
+#~ msgid "Error occured while processing %s (FindPkg)"
+#~ msgstr "Um erro ocorreu ao processar %s (FindPkg)"
+
+#~ msgid "Error occured while processing %s (CollectFileProvides)"
+#~ msgstr "Um erro ocorreu ao processar %s (CollectFileProvides)"
+
+#~ msgid "Unknown vendor ID '%s' in line %u of source list %s"
+#~ msgstr ""
+#~ "ID de fornecedor desconhecido '%s' na linha %u da lista de fontes %s"
+
+#~ msgid ""
+#~ "Some broken packages were found while trying to process build-"
+#~ "dependencies.\n"
+#~ "You might want to run 'apt --fix-broken install' to correct these."
+#~ msgstr ""
+#~ "Alguns pacotes quebrados foram encontrados enquanto se tentava "
+#~ "processar \n"
+#~ "as dependências de construção.\n"
+#~ "Você pode querer rodar 'apt --fix-broken install' para corrigí-los."
+
+#~ msgid "Sorry, you don't have enough free space in %s to hold all the .debs."
+#~ msgstr ""
+#~ "Desculpe, você não tem espaço livre o suficiente em %s para guardar os ."
+#~ "debs."
+
+#~ msgid "Extract "
+#~ msgstr "extra"
+
+#~ msgid "De-replaced "
+#~ msgstr "Substitui"
+
+#~ msgid "Replaced file "
+#~ msgstr "Substitui"
+
+#~ msgid "Regex compilation error"
+#~ msgstr "Erro de compilação de regex - %s"
+
+#~ msgid "Failed to stat %s%s"
+#~ msgstr "Falha ao baixar %s %s\n"
+
+#~ msgid "Failed to rename %s.new to %s"
+#~ msgstr "Falha ao baixar %s %s\n"
+
+#~ msgid "Couldn't wait for subprocess"
+#~ msgstr "Não foi possível checar a lista de pacotes fonte %s"
+
+#~ msgid " files "
+#~ msgstr " falhou."
+
+#~ msgid "Done. "
+#~ msgstr "Pronto"
+
+#~ msgid "Could not find a record in the DSC '%s'"
+#~ msgstr "Impossível achar pacote %s"
+
+#~ msgid "Failed too stat %s"
+#~ msgstr "Impossível checar %s."
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..6f1f9b7
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,4403 @@
+# Brazilian Portuguese translation for apt.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Gustavo Noronha Silva <kov@debian.org>, 2002.
+# Andre Luis Lopes <andrelop@debian.org>, 2002-2005.
+# Felipe Augusto van de Wiel (faw) <faw@debian.org>, 2006-2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2008-11-17 02:33-0200\n"
+"Last-Translator: Felipe Augusto van de Wiel (faw) <faw@debian.org>\n"
+"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian."
+"org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Assinatura de arquivo inválida"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Erro na leitura de cabeçalho membro de arquivo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Cabeçalho membro de arquivo inválido"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arquivo é muito pequeno"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Falhou ao ler os cabeçalhos do arquivo"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Impossível achar pacote %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Arquivo corrompido"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Checksum do arquivo tar falhou, arquivo corrompido"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Tipo de cabeçalho TAR %u desconhecido, membro %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Este não é um arquivo DEB válido, membro '%s' faltando"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Erro interno, não foi possível localizar membro %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Arquivo de controle não interpretável"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Falhou ao escrever arquivo %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Falhou ao fechar arquivo %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "O caminho %s é muito longo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Desempacotando %s mais de uma vez"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "O diretório %s é desviado (\"diverted\")"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "O pacote está tentando escrever no alvo do desvio %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "O caminho de desvio é muito longo"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Falhou ao executar \"stat\" %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Falhou ao renomear %s para %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "O diretório %s está sendo substituído por um não-diretório"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Falha ao localizar nó em seu \"hash bucket\""
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "O caminho é muito longo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Sobrescrita de pacote não combina com nenhuma versão para %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Arquivo %s/%s sobrescreve arquivo no pacote %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Impossível ler %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Impossível executar \"stat\" em %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "\"DropNode\" chamado em nó ainda ligado (\"linked\")"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Falhou ao localizar o elemento hash!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Falhou ao alocar desvio (\"diversion\")"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Erro interno em \"AddDiversion\""
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Tentando sobrescrever um desvio, %s -> %s e %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Adição dupla de desvio %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Arquivo de configuração duplicado %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "O diretório %s é desviado (\"diverted\")"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "O diretório %s é desviado (\"diverted\")"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "O diretório %s é desviado (\"diverted\")"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "O diretório %s é desviado (\"diverted\")"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "O diretório %s é desviado (\"diverted\")"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Falhou ao executar \"readlink\" %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hash Sum incorreto"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "renomeação falhou, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Tamanho incorreto"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Operação %s inválida"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Erro de escrita"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Falhou ao buscar %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Não foi possível localizar um arquivo para o pacote %s. Isto pode significar "
+"que você precisa consertar manualmente este pacote. (devido a arquitetura "
+"não especificada)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Conectando em %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "O driver do método %s não pode ser encontrado."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Confira se o pacote 'dpkg-dev' está instalado.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Método %s não iniciou corretamente"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Por favor, insira o disco nomeado: '%s' na unidade '%s' e pressione enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Diretório de listas %s está faltando."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Diretório de arquivos %s está faltando."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Impossível criar trava no diretório de listas"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Tipo de arquivo de índice '%s' não é suportado"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Obtendo o arquivo %li de %li (%s restantes)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Obtendo arquivo %li de %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"O pacote %s precisa ser reinstalado, mas não foi possível encontrar um "
+"arquivo para o mesmo."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Erro, pkgProblemResolver::Resolve gerou falhas, isto pode ser causado por "
+"pacotes mantidos (hold)."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Impossível corrigir problemas, você manteve (hold) pacotes quebrados."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"As listas de pacotes ou os arquivos de estado não puderam ser analisados ou "
+"abertos."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Você terá que executar apt-get update para corrigir estes problemas"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "A lista de fontes não pode ser lida."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Erro de compilação de regex - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Release '%s' para '%s' não foi encontrada"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Versão '%s' para '%s' não foi encontrada"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Impossível achar tarefa %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Impossível achar pacote %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Impossível achar pacote %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Impossível encontrar o pacote %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Linha %u muito longa na lista de fontes %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Desmontando CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Usando ponto de montagem de CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Aguardando por disco...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montando CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificando... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Rótulo armazenado: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Procurando por arquivos de índice no disco...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Encontrado(s) %zu índice(s) de pacote(s), %zu índice(s) de fonte(s), %zu "
+"índice(s) de traduções e %zu assinatura(s)\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Rótulo encontrado: '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Este não é um nome válido, tente novamente.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Esse disco é chamado: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Copiando lista de pacotes..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Gravando nova lista de fontes\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Entradas na lista de fontes para este disco são:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Impossível mudar para %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Impossível executar \"stat\" %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Impossível executar \"stat\" no ponto de montagem %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Impossível executar \"stat\" no cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Opção de linha de comando '%c' [de %s] é desconhecida."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Opção de linha de comando %s não é compreendida"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Opção de linha de comando %s não é booleana"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Opção %s requer um argumento."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Opção %s: Especificação de item de configuração deve possuir um =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Opção %s requer um argumento inteiro, não '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opção '%s' é muito longa"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Sentido %s não é compreendido, tente verdadeiro ou falso."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operação %s inválida"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Abreviação de tipo desconhecida: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Erro de sintaxe %s:%u: Bloco inicia sem nome."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Erro de sintaxe %s:%u: Tag mal formada"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Erro de sintaxe %s:%u: Lixo extra depois do valor"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Erro de sintaxe %s:%u: Diretivas podem ser feitas somente no nível mais alto"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Erro de sintaxe %s:%u: Muitos \"includes\" aninhados"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Erro de sintaxe %s:%u: Incluído a partir deste ponto"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Erro de sintaxe %s:%u: Não há suporte para a diretiva '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Erro de sintaxe %s:%u: Diretivas podem ser feitas somente no nível mais alto"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Erro de sintaxe %s:%u: Lixo extra no final do arquivo"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problema removendo o arquivo"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Não usando travamento para arquivo de trava somente leitura %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Não foi possível abrir arquivo de trava %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Não usando travamento para arquivo de trava montado via nfs %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Não foi possível obter trava %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Esperado %s mas este não estava lá"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Sub-processo %s recebeu uma falha de segmentação."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Sub-processo %s recebeu uma falha de segmentação."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Sub-processo %s retornou um código de erro (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Sub-processo %s finalizou inesperadamente"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Erro de leitura"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Erro de escrita"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problema fechando o arquivo"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Falhou ao criar sub-processo IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Falhou ao executar compactador "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Não foi possível abrir arquivo %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Não foi possível abrir \"pipe\" para %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "leitura, ainda restam %lu para serem lidos mas nenhum deixado"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "escrita, ainda restam %lu para gravar mas não foi possível"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Problema fechando o arquivo"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problema sincronizando o arquivo"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problema sincronizando o arquivo"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Impossível executar \"stat\" em %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Impossível escrever para %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Não foi possível fazer \"mmap\" de um arquivo vazio"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Não foi possível fazer \"mmap\" de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Não foi possível abrir \"pipe\" para %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Impossível abrir %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Impossível invocar "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Não foi possível fazer \"mmap\" de %lu bytes"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Falhou ao truncar arquivo"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Erro!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Pronto"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Pronto"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Seleção %s não encontrada"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Impossível analisar arquivo de pacote %s (1)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Nota, selecionando %s ao invés de %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Linha inválida no arquivo de desvios: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Impossível analisar arquivo de pacote %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Impossível criar trava no diretório de listas"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Impossível criar trava no diretório de listas"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Preparando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Preparando para configurar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Preparando para a remoção de %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Preparando para remover completamente %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Executando gatilho pós-instalação %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s instalado"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Configurando %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Diretório '%s' está faltando"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Não foi possível abrir arquivo %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Desempacotando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Instalando %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Removendo %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "%s completamente removido"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s completamente removido"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Impossível escrever para %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Construindo árvore de dependências"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versões candidatas"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Geração de dependência"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Lendo informação de estado"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Falha ao abrir Arquivo de Estado (\"StateFile\") %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Falha ao escrever Arquivo de Estado (\"StateFile\") temporário %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Gravados %i registros.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Gravados %i registros com %i arquivos faltando.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Gravados %i registros com %i arquivos que não combinam\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Gravados %i registros com %i arquivos faltando e %i arquivos que não "
+"combinam\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash Sum incorreto"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Sistema de empacotamento '%s' não é suportado"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Impossível determinar um tipo de sistema de empacotamento aplicável."
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Não foi possível abrir arquivo %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Esta execução de instalação requererá a remoção temporária do pacote "
+"essencial %s devido a um loop de Conflitos/Pré-Dependências. Isso geralmente "
+"é ruim, mas se você realmente quer fazer isso, ative a opção APT::Force-"
+"LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Cache de pacotes vazio"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "O arquivo de cache de pacotes está corrompido"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "O arquivo de cache de pacotes é uma versão incompatível"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Este APT não suporta o sistema de versões '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "O cache de pacotes foi gerado para uma arquitetura diferente"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "O arquivo de cache de pacotes está corrompido"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Depende"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Pré-Depende"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Sugere"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Conflita"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recomenda"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Substitui"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Quebra"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Obsoleta"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "importante"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "requerido"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "padrão"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opcional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "O cache possui um sistema de versões incompatível"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Um erro ocorreu processando %s (EncontrarPacote)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de nomes de pacotes que este APT é capaz de "
+"suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de versões que este APT é capaz de suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de descrições que este APT é capaz de suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Uau, você excedeu o número de dependências que este APT é capaz de suportar."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Lendo listas de pacotes"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Erro de E/S ao gravar cache fonte"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Tipo de arquivo de índice '%s' não é suportado"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Registro inválido no arquivo de preferências, sem cabeçalho Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Não foi possível entender o tipo de \"pin\" %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Nenhuma prioridade (ou zero) especificada para \"pin\""
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Override malformado %s linha %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Linha mal formada %u no arquivo de fontes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Tipo '%s' não é conhecido na linha %u na lista de fontes %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Linha mal formada %u no arquivo de fontes %s (tipo)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Tipo '%s' não é conhecido na linha %u na lista de fontes %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Você deve colocar algumas URIs 'source' em seu sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Alguns arquivos de índice falharam para baixar, eles foram ignorados ou os "
+"antigos foram usados no lugar."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Calculando atualização"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Atingido:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Obter:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr ""
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Baixados %sB em %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Trabalhando]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Troca de mídia: por favor, insira o disco nomeado\n"
+" '%s'\n"
+"na unidade '%s' e pressione enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Corrigindo dependências..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " falhou."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Impossível corrigir dependências"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Impossível minimizar o conjunto de atualizações"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Pronto"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Você pode querer executar 'apt --fix-broken install' para corrigí-los."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dependências desencontradas. Tente 'apt --fix-broken install' sem nenhum "
+"pacote (ou especifique uma solução)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Nota, selecionando %s para expressão regular '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Nota, selecionando %s para expressão regular '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Nota, selecionando %s para expressão regular '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "O pacote %s é um pacote virtual fornecido por:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Instalado]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Versões candidatas"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Você deveria selecionar explicitamente um para instalar."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"O pacote %s não está disponível, mas é referenciado por outro pacote.\n"
+"Isto pode significar que o pacote está faltando, ficou obsoleto ou\n"
+"está disponível somente a partir de outra fonte\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "No entanto, os pacotes a seguir o substituem:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "O pacote %s não tem candidato para instalação"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "O pacote %s não está instalado, então não será removido\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "O pacote %s não está instalado, então não será removido\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Nota, selecionando %s ao invés de %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Este APT tem Poderes de Super Vaca."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Nenhum pacote encontrado"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "AVISO: Os pacotes a seguir não podem ser autenticados!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Aviso de autenticação sobreposto.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Alguns pacotes não puderam ser autenticados"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Instalar estes pacotes sem verificação?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Há problemas e -y foi usado sem --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Não foi possível determinar o espaço livre em %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Você não possui espaço suficiente em %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Impossível criar trava no diretório de download"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Alguns pacotes não puderam ser instalados. Isto pode significar que\n"
+"você solicitou uma situação impossível ou, se você está usando a\n"
+"distribuição instável, que alguns pacotes requeridos não foram\n"
+"criados ainda ou foram retirados da \"Incoming\"."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "A informação a seguir pode ajudar a resolver a situação:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Pacotes quebrados"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Impossível buscar alguns arquivos, talvez executar apt-get update ou tentar "
+"com --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Erro interno, InstallPackages foi chamado com pacotes quebrados!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pacotes precisam ser removidos mas a remoção está desabilitada."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Há problemas e -y foi usado sem --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Há problemas e -y foi usado sem --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Erro interno, Ordenação não finalizou"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Que estranho... Os tamanhos não batem, mande e-mail para apt@packages.debian."
+"org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "É preciso baixar %sB/%sB de arquivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "É preciso baixar %sB de arquivos.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Depois desta operação, %sB adicionais de espaço em disco serão usados.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Depois desta operação, %sB de espaço em disco serão liberados.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "\"Trivial Only\" especificado mas esta não é uma operação trivial."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Sim, faça o que eu digo!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Você está prestes a fazer algo potencialmente destrutivo.\n"
+"Para continuar digite a frase '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Abortar."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Você quer continuar?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Alguns arquivos falharam ao baixar"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Baixar completo e no modo somente baixar (\"download only\")"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing e troca de mídia não são suportados atualmente"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Impossível corrigir pacotes faltantes."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Abortando instalação."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Nós não deveríamos apagar coisas, impossível iniciar AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, parece que o AutoRemover destruiu algo o que realmente não deveria\n"
+"acontecer. Por favor, reporte um bug contra o apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Erro Interno, o AutoRemover quebrou coisas"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Os seguintes pacotes foram automaticamente instalados e não são mais "
+"requeridos:"
+msgstr[1] ""
+"Os seguintes pacotes foram automaticamente instalados e não são mais "
+"requeridos:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"Os seguintes pacotes foram automaticamente instalados e não são mais "
+"requeridos:"
+msgstr[1] ""
+"Os seguintes pacotes foram automaticamente instalados e não são mais "
+"requeridos:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Use '%s' para removê-los."
+msgstr[1] "Use '%s' para removê-los."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Os pacotes extra a seguir serão instalados:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Pacotes sugeridos:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Pacotes recomendados:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Pulando %s, já está instalado e a atualização não está configurada.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Pulando %s, já está instalado e a atualização não está configurada.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "A reinstalação de %s não é possível, não pode ser baixado.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s já é a versão mais nova.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versão selecionada %s (%s) para %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versão selecionada %s (%s) para %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Instalado]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "mas %s está instalado"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "mas %s está para ser instalado"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "mas não é instalável"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "mas é um pacote virtual"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "mas não será instalado"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "mas não está instalado"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ou"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Os pacotes a seguir têm dependências desencontradas:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Os NOVOS pacotes a seguir serão instalados:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Os pacotes a seguir serão REMOVIDOS:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Os pacotes a seguir serão mantidos em suas versões atuais:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Os pacotes a seguir serão atualizados:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Os pacotes a seguir serão REVERTIDOS:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Os seguintes pacotes mantidos serão mudados:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (por causa de %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"AVISO: Os pacotes essenciais a seguir serão removidos.\n"
+"Isso NÃO deveria ser feito a menos que você saiba exatamente o que você está "
+"fazendo!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu pacotes atualizados, %lu pacotes novos instalados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstalados, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu revertidos, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu a serem removidos e %lu não atualizados.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu pacotes não totalmente instalados ou removidos.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[S/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[s/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "S"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "Você deve passar exatamente um padrão"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Arquivos de pacote:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"O cache está fora de sincronia, não foi possível fazer a referência cruzada "
+"de um arquivo de pacote"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pacotes alfinetados (\"pinned\"):"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalado: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidato: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(nenhum)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabela de versão:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Impossível achar pacote %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Impossível achar pacote %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Impossível achar pacote %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Não foi possível executar \"stat\" na lista de pacotes fonte %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Deve-se especificar pelo menos um pacote para que se busque o fonte"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Impossível encontrar um pacote fonte para %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Pulando arquivo já baixado '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Preciso obter %sB/%sB de arquivos fonte.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Preciso obter %sB de arquivos fonte.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Obter fonte %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Falhou ao buscar alguns arquivos."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Pulando o desempacotamento de fontes já desempacotados em %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Comando de desempacotamento '%s' falhou.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Confira se o pacote 'dpkg-dev' está instalado.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Comando de construção '%s' falhou.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Impossível conseguir informações de dependência de construção para %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s não tem dependências de construção.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Deve-se especificar pelo menos um pacote para que se cheque as dependências "
+"de construção"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Falhou ao processar as dependências de construção"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Falhou ao processar as dependências de construção"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Falha ao baixar %s %s\n"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "O pacote %s versão %s tem uma dependência desencontrada:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "O comando update não leva argumentos"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "O comando update não leva argumentos"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Total de Nomes de Pacotes: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Total de Nomes de Pacotes: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Pacotes normais: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Pacotes puramente virtuais: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pacotes virtuais únicos: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Pacotes virtuais misturados: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Faltando: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Total de versões distintas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Total de descrições distintas: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Total de dependências: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Total de relações ver/arquivo: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Total de relações Desc/Arquivo: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Total de mapeamentos \"Provides\": "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Total de strings \"globbed\": "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Total de espaço frouxo: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Total de espaço contabilizado para: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Mostra registros fontes"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Procura a lista de pacotes por um padrão regex"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Mostra informações de dependências não processadas de um pacote"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Mostra informações de dependências reversas de um pacote"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Mostra um registro legível sobre o pacote"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Lista o nome de todos os pacotes no sistema"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Mostra as configurações de políticas"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr ""
+"Por favor, forneça um nome para este Disco, algo como 'Debian 2.1r1 Disco 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Por favor, insira um Disco na unidade e pressione enter"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Falhou ao renomear %s para %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Repita este processo para o restante dos CDs em seu conjunto."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumentos não estão em pares"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Uso: apt-config [opções] comando\n"
+"\n"
+"O apt-config é uma ferramenta simples para ler o arquivo de configuração do "
+"APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Uso: apt-extracttemplates arquivo1 [arquivo2 ...]\n"
+"\n"
+"O apt-extracttemplates é uma ferramenta para extrair informações de modelo\n"
+"(\"template\") e configuração de pacotes debian.\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda\n"
+" -t Define o diretório temporário\n"
+" -c=? Lê o arquivo de configuração especificado.\n"
+" -o=? Define uma opção de configuração arbitrária, e.g.: -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Não foi possível obter a versão do debconf. O debconf está instalado?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Impossível achar pacote %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Erro interno, o solucionador de problemas quebrou coisas"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Módulos para os quais há suporte:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Uso: apt-get [opções] comando\n"
+" apt-get [opções] install|remove pacote1 [pacote2 ...]\n"
+" apt-get [opções] source pacote1 [pacote2 ...]\n"
+"\n"
+"O apt-get é uma interface simples de linha de comando para baixar\n"
+"pacotes e instalá-los. Os comandos usados mais frequentemente são\n"
+"update e install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Obtém novas listas de pacotes"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Realiza uma atualização"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instala novos pacotes (um pacote é libc6 e não libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instala novos pacotes (um pacote é libc6 e não libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Remove pacotes"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Remove e expurga (\"purge\") pacotes"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Remove automaticamente todos os pacotes não usados"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Atualiza a distribuição, veja apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Segue as seleções do dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configura as dependências de compilação de pacotes fonte"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Apaga arquivos baixados para instalação"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Apaga arquivos antigos baixados para instalação"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verifica se não há dependências quebradas"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Baixa arquivos fonte"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Deve-se especificar pelo menos um pacote para que se busque o fonte"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Uso: apt-extracttemplates arquivo1 [arquivo2 ...]\n"
+"\n"
+"O apt-extracttemplates é uma ferramenta para extrair informações de modelo\n"
+"(\"template\") e configuração de pacotes debian.\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda\n"
+" -t Define o diretório temporário\n"
+" -c=? Lê o arquivo de configuração especificado.\n"
+" -o=? Define uma opção de configuração arbitrária, e.g.: -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Uso: apt-extracttemplates arquivo1 [arquivo2 ...]\n"
+"\n"
+"O apt-extracttemplates é uma ferramenta para extrair informações de modelo\n"
+"(\"template\") e configuração de pacotes debian.\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda\n"
+" -t Define o diretório temporário\n"
+" -c=? Lê o arquivo de configuração especificado.\n"
+" -o=? Define uma opção de configuração arbitrária, e.g.: -o dir::cache=/"
+"tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "mas não está instalado"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Os NOVOS pacotes a seguir serão instalados:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s já é a versão mais nova.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s já é a versão mais nova.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Falhou ao abrir %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Confira se o pacote 'dpkg-dev' está instalado.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Registro de pacote desconhecido!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Lendo listas de pacotes"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Pacotes alfinetados (\"pinned\"):"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Pacotes alfinetados (\"pinned\"):"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Pacotes quebrados"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s configurado para instalar manualmente.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Lendo informação de estado"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Configuração padrão ruim!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Pressione enter para continuar."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Você quer apagar quaisquer arquivos .deb previamente baixados?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Alguns erros ocorreram ao desempacotar. Vou configurar os pacotes que foram"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+"instalados. Isto pode resultar em erros duplicados ou erros causados por"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"dependências faltantes. Isto está OK, somente os erros acima desta mensagem"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "são importantes. Por favor, conserte-os e execute [I]nstalar novamente"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Mesclando informação disponível"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Lista de extensão de pacotes é muito extensa"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Erro processando o diretório %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lista de extensão de fontes é muito extensa"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Erro ao gravar cabeçalho no arquivo de conteúdo"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Erro processando conteúdo %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Uso: apt-ftparchive [opções] comando\n"
+"Comandos: packages caminho_binário [arquivo_override [prefixo_caminho]]\n"
+" sources caminho_fonte [arquivo_override [prefixo_caminho]]\n"
+" contents caminho\n"
+" release caminho\n"
+" generate config [grupos]\n"
+" clean config\n"
+"\n"
+"O apt-ftparchive gera arquivos de índice para repositórios Debian. Ele\n"
+"dá suporte a muitos estilos de geração, desde totalmente automatizadas até\n"
+"substitutos funcionais para o dpkg-scanpackages e o dpkg-scansources\n"
+"\n"
+"O apt-ftparchive gera arquivos Package a partir de uma árvore de .debs.\n"
+"O arquivo Package contém o conteúdo de todos os campos controle de\n"
+"cada pacote bem como o hash MD5 e o tamanho do arquivo. Há suporte para\n"
+"um arquivo override para forçar o valor da prioridade (\"Priority\") e a\n"
+"a seção (\"Section\").\n"
+"\n"
+"Similarmente, o apt-ftparchive gera arquivos Sources a partir de uma\n"
+"árvore de .dscs. A opção --source-override pode ser usada para\n"
+"especificar um arquivo override de fontes.\n"
+"\n"
+"Os comandos 'packages' e 'sources' deverão ser executados na raiz da\n"
+"árvore. Caminho_Binário deverá apontar para a base de procura recursiva\n"
+"e o arquivo override deverá conter as \"flags override\". Caminho_Prefixo é\n"
+"anexado aos campos do nome do arquivo se estiverem presentes. Exemplo de\n"
+"uso do repositório Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opções:\n"
+" -h Este texto de ajuda\n"
+" --md5 Controla a geração de MD5\n"
+" -s=? Arquivo fonte (\"source\") override\n"
+" -q Quieto\n"
+" -d=? Seleciona o banco de dados de caching opcional\n"
+" --no-delink Habilita o modo de depuração \"delinking\"\n"
+" --contents Controla a geração do arquivo de conteúdo\n"
+" -c=? Lê o arquivo de configuração especificado.\n"
+" -o=? Define uma opção de configuração arbitrária"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nenhuma seleção combinou"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Alguns arquivos estão faltando no grupo de arquivos do pacotes '%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "BD estava corrompido, arquivo renomeado para %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "BD é antigo, tentando atualizar %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Formato do BD é inválido. Se você atualizou a partir de uma versão antiga do "
+"apt, por favor, remova e recrie o banco de dados."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Impossível abrir o arquivo BD %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Falhou ao executar \"readlink\" %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Repositório não possui registro de controle"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Impossível obter um cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Falha ao alocar memória"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algoritmo de compactação desconhecido '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Saída compactada %s precisa de um conjunto de compactação"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Falhou ao criar pipe IPC para sub-processo"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Falhou ao executar \"fork\""
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Compactar filho"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Erro interno, falhou ao criar %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "E/S para sub-processo/arquivo falhou"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Falhou ao ler durante o cálculo MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Impossível abrir %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Override malformado %s linha %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Falha ao ler o arquivo override %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Override malformado %s linha %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Override malformado %s linha %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Override malformado %s linha %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Impossível ler o diretório %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Impossível executar \"stat\" em %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Erros que se aplicam ao arquivo "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Falhou ao resolver %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Falhou ao percorrer a árvore"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Falhou ao abrir %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Falhou ao ligar %s a %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Limite DeLink de %sB atingido.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Repositório não possuía campo pacote"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s não possui entrada override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " mantenedor de %s é %s, não %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s não possui entrada override fonte\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s também não possui entrada override binária\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Aguardando por cabeçalhos"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "O servidor HTTP enviou um cabeçalho de resposta inválido"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Linha de cabeçalho ruim"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "O servidor HTTP enviou um cabeçalho \"Content-Length\" inválido"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "O servidor HTTP enviou um cabeçalho \"Content-Range\" inválido"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Este servidor HTTP possui suporte a \"range\" quebrado"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Formato de data desconhecido"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Dados de cabeçalho ruins"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Conexão falhou"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Erro interno"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Impossível ler o banco de dados de cdrom %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Por favor, use o apt-cdrom para fazer com que este CD-ROM seja reconhecido "
+"pelo APT. O apt-get update não pode ser usado para adicionar novos CD-ROMs"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD-ROM errado"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Impossível desmontar o CD-ROM em %s, o mesmo ainda pode estar em uso."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disco não encontrado."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Arquivo não encontrado"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Conectando em %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Conectando em %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Não foi possível criar um socket para %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Não foi possível iniciar a conexão para %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Falhou"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Não foi possível conectar em %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Não foi possível conectar em %s:%s (%s), conexão expirou"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Conectando a %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Não foi possível resolver '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Falha temporária resolvendo '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Algo estranho aconteceu resolvendo '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Algo estranho aconteceu resolvendo '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Impossível conectar em %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Falhou ao executar \"stat\""
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI inválida, URIs locais não devem iniciar com //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Efetuando login"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Impossível determinar o nome do ponto"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Impossível determinar o nome local"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "O servidor recusou a conexão e disse: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER falhou, servidor disse: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS falhou, servidor disse: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Um servidor proxy foi especificado mas não um script de login, Acquire::ftp::"
+"ProxyLogin está vazio."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Comando de script de login '%s' falhou, servidor disse: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE falhou, servidor disse: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Conexão expirou"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Servidor fechou a conexão"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Uma resposta sobrecarregou o buffer"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Corrupção de protocolo"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Não foi possível criar um socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Não foi possível conectar um socket de dados, conexão expirou"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Não foi possível conectar um socket passivo."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo não foi capaz de obter um socket de escuta"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Não foi possível fazer \"bind\" de um socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Não foi possível ouvir no socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Não foi possível determinar o nome do socket"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Impossível enviar o comando PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Família de endereços %u desconhecida (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT falhou, servidor disse: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Conexão do socket de dados expirou"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Impossível aceitar conexão"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problema criando o hash do arquivo"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Impossível obter arquivo, servidor disse '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Socket de dados expirou"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Transferência de dados falhou, servidor disse '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Pesquisa"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Impossível invocar "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Ao menos uma assinatura inválida foi encontrada."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Erro interno: Assinatura boa, mas não foi possível determinar a impressão "
+"digital da chave?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Não foi possível executar '%s' para verificar a assinatura (o gnupg está "
+"instalado?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Erro desconhecido executando apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "As seguintes assinaturas eram inválidas:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"As assinaturas a seguir não puderam ser verificadas devido à chave pública "
+"não estar disponível:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Erro escrevendo para o arquivo"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Erro lendo do servidor. Ponto remoto fechou a conexão"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Erro lendo do servidor"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Erro escrevendo para arquivo"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Seleção falhou"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Conexão expirou"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Erro escrevendo para arquivo de saída"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Falhou ao definir hora de modificação"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Conexão encerrada prematuramente"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Cabeçalho membro de arquivo inválido"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s removido"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "O arquivo de pacote %s está fora de sincronia."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Os arquivos de índice de pacotes estão corrompidos. Nenhum campo "
+#~ "\"Filename:\" para o pacote %s."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Não foi possível abrir arquivo %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Não foi possível abrir arquivo %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Abrindo arquivo de configuração %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Abrindo %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dependências desencontradas. Tente usar --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Você deve querer executar 'apt --fix-broken install' para corrigí-los:"
+
+#~ msgid "(not found)"
+#~ msgstr "(não encontrado)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Pacote alfinetado (\"pin\"): "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Não existem chaves públicas para os seguintes IDs de chaves:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "O diretório %s é desviado (\"diverted\")"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "a dependência de %s por %s não pode ser satisfeita porque o pacote %s não "
+#~ "pode ser encontrado"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "a dependência de %s por %s não pode ser satisfeita porque o pacote %s não "
+#~ "pode ser encontrado"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Falhou ao satisfazer a dependência de %s por %s: Pacote instalado %s é "
+#~ "muito novo"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "a dependência de %s por %s não pode ser satisfeita porque nenhuma versão "
+#~ "disponível do pacote %s pode satisfazer os requerimentos de versão"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "a dependência de %s por %s não pode ser satisfeita porque o pacote %s não "
+#~ "pode ser encontrado"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Falhou ao satisfazer a dependência de %s por %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Não foi possível satisfazer as dependências de compilação para %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problema removendo %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Falhou ao executar \"unlink\" %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Uso: apt-cache [opções] comando\n"
+#~ " apt-cache [opções] show pacote1 [pacote2 ...]\n"
+#~ "\n"
+#~ "O apt-cache é uma ferramenta de baixo nível usada para manipular os\n"
+#~ "arquivos de cache binários do APT e para buscar informações neles\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Opções:\n"
+#~ " -h Este texto de ajuda.\n"
+#~ " -p=? O cache de pacotes.\n"
+#~ " -s=? O cache de fontes.\n"
+#~ " -q Desabilita o indicador de progresso.\n"
+#~ " -i Mostra somente dependências importantes para o comando \"unmet\".\n"
+#~ " -c=? Lê o arquivo de configuração especificado.\n"
+#~ " -o=? Define uma opção de configuração arbitrária, e.g.: -o dir::cache=/"
+#~ "tmp\n"
+#~ "Veja as páginas de manual apt-cache(8) e apt.conf(5) para mais "
+#~ "informações.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opções:\n"
+#~ " -h Este texto de ajuda.\n"
+#~ " -c=? Lê o arquivo de configuração especificado.\n"
+#~ " -o=? Define uma opção de configuração arbitrária, e.g.: -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Uso: apt-sortpkgs [opções] arquivo1 [arquivo2 ...]\n"
+#~ "\n"
+#~ "O apt-sortpkgs é uma ferramenta simples para ordenar arquivos de pacote.\n"
+#~ "A opção -s é usada para indicar que tipo de arquivo é.\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -h Este texto de ajuda\n"
+#~ " -s Usar ordenação de arquivo fonte\n"
+#~ " -c=? Lê o arquivo de configuração especificado.\n"
+#~ " -o=? Define uma opção de configuração arbitrária, e.g.: -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Processo filho falhou"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Deve-se especificar pelo menos um pacote para que se busque o fonte"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Falhou ao criar \"pipes\""
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Falhou ao executar gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s para %s compilado em %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Falhou ao criar FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Linha mal formada %lu no arquivo de fontes %s (análise de URI)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Linha mal formada %lu no arquivo de fontes %s (análise de distribuição)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Linha mal formada %lu no arquivo de fontes %s (distribuição)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Linha mal formada %lu no arquivo de fontes %s (análise de distribuição)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Linha mal formada %lu no arquivo de fontes %s (análise de distribuição)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Linha mal formada %lu no arquivo de fontes %s (análise de distribuição)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Linha mal formada %lu no arquivo de fontes %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Linha mal formada %lu no arquivo de fontes %s (distribuição)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Linha mal formada %lu no arquivo de fontes %s (análise de URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Linha mal formada %lu no arquivo de fontes %s (distribuição absoluta)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr ""
+#~ "Linha mal formada %lu no arquivo de fontes %s (análise de distribuição)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Pacote %s %s não foi encontrado enquanto processando dependências de "
+#~ "arquivo"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Não foi possível executar \"stat\" na lista de pacotes fonte %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Coletando Arquivo \"Provides\""
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Impossível analisar arquivo de pacote %s (1)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Bloco fornecedor %s não contém impressão digital (\"fingerprint\")"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Total de espaço de dependência de versão: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Você não possui espaço livre suficiente em %s"
+
+#~ msgid "Done"
+#~ msgstr "Pronto"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Abortando instalação."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Erro interno, AllUpgrade quebrou coisas"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s não é um pacote DEB válido."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Usando ponto de montagem de CD-ROM %s\n"
+#~ "Montando CD-ROM\n"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Este não é um arquivo DEB válido, não possui um membro '%s', '%s' ou '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum incorreto"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Não foi possível localizar arquivo para o pacote %s. Isto pode significar "
+#~ "que você precisa consertar manualmente este pacote."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr "Impossível escrever log, openpty() falhou (/dev/pts não montado?)\n"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Abrindo arquivo de configuração %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Falhou ao remover %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Impossível criar %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Falhou ao executar \"stat\" em %sinfo."
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Os diretórios info e temp precisam estar no mesmo sistema de arquivos"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Falhou ao mudar para o diretório administrativo %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Erro interno obtendo um nome de pacote"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Lendo listagem de arquivos"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Falhou ao abrir o arquivo de lista '%sinfo/%s'. Se você não conseguir "
+#~ "restaurar este arquivo, crie-o vazio e imediatamente reinstale a mesma "
+#~ "versão do pacote!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Falhou ao ler o arquivo de lista %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Erro interno obtendo um nó"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Falhou ao abrir o arquivo de desvios %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "O arquivo de desvios está corrompido"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Linha inválida no arquivo de desvios: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Erro interno ao adicionar um desvio"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "O cache de pacotes deve ser inicializado primeiro"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Falhou ao encontrar um Pacote: cabeçalho, posição %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Seção \"ConfFile\" ruim no arquivo de estado. Posição %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Erro analisando MD5. Posição %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Não foi possível mudar para %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Falhou ao localizar um arquivo de controle válido"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Não foi possível abrir \"pipe\" para %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Erro de leitura do processo %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Recebi uma única linha de cabeçalho acima de %u caracteres"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Override malformado %s linha %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Override malformado %s linha %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Override malformado %s linha %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "descompactador"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "leitura, ainda restam %lu para serem lidos mas nenhum deixado"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "escrita, ainda restam %lu para gravar mas não foi possível"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Um erro ocorreu processando %s (NovoPacote)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Um erro ocorreu processando %s (UsePacote1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Um erro ocorreu processando %s (NovoArquivoDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Um erro ocorreu processando %s (UsePacote2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Um erro ocorreu processando %s (NovoArquivoVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Um erro ocorreu processando %s (NovaVersão1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Um erro ocorreu processando %s (UsePacote3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Um erro ocorreu processando %s (NovoArquivoDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Um erro ocorreu processando %s (EncontrarPacote)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Um erro ocorreu processando %s (ColetarArquivoProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Erro interno, não foi possível localizar membro"
+
+#~ msgid "You must give exactly one pattern"
+#~ msgstr "Você deve passar exatamente um padrão"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Lista de argumentos de Acquire::gpgv::Options muito extensa. Saindo."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Um erro ocorreu processando %s (NovaVersão2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Linha mal formada %u na lista de fontes %s (id de fornecedor)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Não foi possível acessar o chaveiro: '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Não foi possível aplicar o patch"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Erro processando gatilhos para %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "\"MMap\" Dinâmico ficou sem espaço"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Já que você solicitou uma única operação é bem provável que o pacote\n"
+#~ "esteja simplesmente não instalável e um relatório de bug sobre esse\n"
+#~ "pacote deveria ser enviado."
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Linha %d muito longa (máx. %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Linha %d muito longa (máx. %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Um erro ocorreu processando %s (NovoArquivoVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Um erro ocorreu processando %s (NovoArquivoVer1)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Rótulo armazenado: %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "Encontrado(s) %i índice(s) de pacote(s), %i índice(s) de fonte(s) e %i "
+#~ "assinaturas\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Seleção falhou"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Data do arquivo mudou %s"
+
+#~ msgid "Reading file list"
+#~ msgstr "Lendo Listagem de Pacotes"
+
+#~ msgid "Could not execute "
+#~ msgstr "Não foi possível executar "
+
+#~ msgid "Preparing for remove with config %s"
+#~ msgstr "Preparando para remoção de %s e sua configuração"
+
+#~ msgid "Removed with config %s"
+#~ msgstr "%s e sua configuração removidos"
+
+#~ msgid "Unknown vendor ID '%s' in line %u of source list %s"
+#~ msgstr ""
+#~ "ID de fornecedor desconhecido '%s' na linha %u da lista de fontes %s"
+
+#~ msgid ""
+#~ "Some broken packages were found while trying to process build-"
+#~ "dependencies.\n"
+#~ "You might want to run 'apt --fix-broken install' to correct these."
+#~ msgstr ""
+#~ "Alguns pacotes quebrados foram encontrados enquanto se tentava "
+#~ "processar \n"
+#~ "as dependências de construção.\n"
+#~ "Você pode querer rodar 'apt --fix-broken install' para corrigí-los."
+
+#~ msgid "Sorry, you don't have enough free space in %s to hold all the .debs."
+#~ msgstr ""
+#~ "Desculpe, você não tem espaço livre o suficiente em %s para guardar os ."
+#~ "debs."
+
+#~ msgid "Extract "
+#~ msgstr "extra"
+
+#~ msgid "De-replaced "
+#~ msgstr "Substitui"
+
+#~ msgid "Replaced file "
+#~ msgstr "Substitui"
+
+#~ msgid "Regex compilation error"
+#~ msgstr "Erro de compilação de regex - %s"
+
+#~ msgid "Failed to stat %s%s"
+#~ msgstr "Falha ao baixar %s %s\n"
+
+#~ msgid "Failed to rename %s.new to %s"
+#~ msgstr "Falha ao baixar %s %s\n"
+
+#~ msgid "Couldn't wait for subprocess"
+#~ msgstr "Não foi possível checar a lista de pacotes fonte %s"
+
+#~ msgid " files "
+#~ msgstr " falhou."
+
+#~ msgid "Done. "
+#~ msgstr "Pronto"
+
+#~ msgid "Could not find a record in the DSC '%s'"
+#~ msgstr "Impossível achar pacote %s"
+
+#~ msgid "Failed too stat %s"
+#~ msgstr "Impossível checar %s."
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..5492751
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,4346 @@
+# translation of ro.po to Romanian
+# This file is put in the public domain.
+#
+# Sorin Batariuc <sorin@bonbon.net>, 2004, 2005, 2006.
+# Eddy Petrișor <eddy.petrisor@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2008-11-15 02:21+0200\n"
+"Last-Translator: Eddy Petrișor <eddy.petrisor@gmail.com>\n"
+"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Semnătură de arhivă necorespunzătoare"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Eroare la citirea antetului membrului arhivei"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Antet de membru de arhivă necorespunzător"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arhiva este prea scurtă"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Eșec la citirea antetelor arhivei"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nu pot găsi pachetul %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Arhivă deteriorată"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr ""
+"Suma de control a arhivei tar nu s-a verificat, arhiva este deteriorată"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Tip antet TAR %u necunoscut, membrul %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Aceasta nu este o arhivă DEB validă, lipsește membrul „%s”"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Eroare internă, nu pot localiza membrul %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Fișier de control neanalizabil"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Eșec la scrierea fișierului %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Eșec la închiderea fișierului %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Calea %s este prea lungă"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Se despachetează %s de mai multe ori"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Directorul %s este redirectat"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Pachetul încearcă să scrie în ținta redirectării %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Calea de redirectare este prea lungă"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Eșec la „stat” pentru %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Eșec la redenumirea lui %s în %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Directorul %s este înlocuit de un non-director"
+
+# XXX: nu-mi place, hash bucket ar trebui tradus mai elegant
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Eșec la localizarea nodului în clasa lui din tabela de dispersie"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Calea este prea lungă"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Pachet suprascris fără nici o versiune pentru %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Fișierul %s/%s îl suprascrie pe cel din pachetul %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Nu s-a putut citi %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Nu se poate executa „stat” pe %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "S-a chemat DropNode pe un nod încă „legat”"
+
+# XXX: nu-mi place, fie e hash, fie „element de dispersie”
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Eșec la localizarea elementului de dispersie!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Eșec la alocarea redirectării"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Eroare internă în „AddDiversion”"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Încercare de suprascriere a redirectării, %s -> %s și %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Adăugare dublă de redirectare %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Fișier „conf” duplicat %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Directorul %s este redirectat"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Directorul %s este redirectat"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Directorul %s este redirectat"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Directorul %s este redirectat"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Directorul %s este redirectat"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Eșec la „readlink” pentru %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Nepotrivire la suma de căutare"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "redenumire eșuată, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Nepotrivire dimensiune"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Operațiune invalidă %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Eroare de scriere"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Eșec la aducerea lui %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"N-am putut localiza un fișier pentru pachetul %s. Aceasta ar putea însemna "
+"că aveți nevoie să reparați manual acest pachet (din pricina unui arch lipsă)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Conectare la %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Metoda driver %s nu poate fi găsită."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Verificați dacă pachetul 'dpkg-dev' este instalat.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Metoda %s nu s-a lansat corect"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Vă rog introduceți discul numit: '%s' în unitatea '%s' și apăsați Enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Directorul de liste %s lipsește."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Directorul de arhive %s lipsește."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Nu pot încuia directorul cu lista"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Tipul de fișier index '%s' nu este suportat"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Se descarcă fișierul %li din %li (%s rămas)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Se descarcă fișierul %li din %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Pachetul %s are nevoie să fie reinstalat, dar nu pot găsi o arhivă pentru el."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Eroare, pkgProblemResolver::Resolve a generat întreruperi, aceasta poate fi "
+"cauzată de pachete ținute."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Nu pot corecta problema, ați ținut pachete deteriorate."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Listele de pachete sau fișierul de stare n-au putut fi analizate sau "
+"deschise."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Ați putea vrea să porniți 'apt-get update' pentru a corecta aceste probleme."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Lista surselor nu poate fi citită."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Eroare de compilare expresie regulată - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Release '%s' pentru '%s' n-a fost găsită"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Versiunea '%s' pentru '%s' n-a fost găsită"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Nu s-a putut găsi sarcina %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Nu pot găsi pachetul %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Nu pot găsi pachetul %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Nu s-a putut localiza pachetul %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Linia %u prea lungă în lista sursă %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Se demontează CD-ul...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Utilizare punct de montare CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Aștept discul...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Montez CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificare... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Etichetă memorată: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Scanez discul de fișierele index...\n"
+
+# DEVELOPERS: please consider using somehow plural forms
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Au fost găsite %zu indexuri de pachete, %zu indexuri de surse, %zu indexuri "
+"de traduceri și %zu semnături\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "A fost găsită eticheta „%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Acesta nu este un nume valid, mai încercați.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Acest disc este numit: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Copiez listele de pachete.."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Scriere noua listă sursă\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Intrările listei surselor pentru acest disc sunt:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nu pot schimba la %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Nu pot determina starea %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Nu pot determina starea punctului de montare %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Eșec la „stat” pentru CD"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Opțiunea linie de comandă '%c' [din %s] este necunoscută."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Opțiunea linie de comandă %s nu este înțeleasă"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Opțiunea linie de comandă %s nu este booleană"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Opțiunea %s necesită un argument"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Opțiunea %s: Specificația configurării articolului trebuie să aibă o =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Opțiunea %s necesită un argument integru, nu '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opțiunea '%s' este prea lungă"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Sensul %s nu este înțeles, încercați adevărat (true) sau fals (false)."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Operațiune invalidă %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Abreviere de tip nerecunoscut: „%c”"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Eroare de sintaxă %s:%u: Blocul începe fără nume"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Eroare de sintaxă %s:%u: etichetă greșită"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Eroare de sintaxă %s:%u: mizerii suplimentare după valoare"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Eroare de sintaxă %s:%u: Directivele pot fi date doar la nivelul superior"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Eroare de sintaxă %s:%u: prea multe imbricări incluse"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Eroare de sintaxă %s:%u: incluse de aici"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Eroare de sintaxă %s:%u: directivă nesuportată '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Eroare de sintaxă %s:%u: Directivele pot fi date doar la nivelul superior"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Eroare de sintaxă %s:%u: mizerii suplimentare la sfârșitul fișierului"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problemă la dezlegarea fișierului"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Nu s-a folosit închiderea pentru fișierul disponibil doar-citire %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Nu pot deschide fișierul blocat %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Nu este folosit blocajul pentru fișierul montat nfs %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Nu pot determina blocajul %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Așteptat %s, dar n-a fost acolo"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Subprocesul %s a primit o eroare de segmentare."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Subprocesul %s a primit o eroare de segmentare."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Subprocesul %s a întors un cod de eroare (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Subprocesul %s s-a terminat brusc"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Eroare de citire"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Eroare de scriere"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problemă la închiderea fișierului"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Eșec la crearea IPC-ului pentru subproces"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Eșec la executarea compresorului"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nu s-a putut deschide fișierul %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nu s-a putut deschide conexiunea pentru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "citire, încă mai am %lu de citit dar n-a mai rămas nimic"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "scriere, încă mai am %lu de scris dar nu pot"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Problemă la închiderea fișierului"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problemă în timpul sincronizării fișierului"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problemă în timpul sincronizării fișierului"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Nu se poate executa „stat” pe %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Nu s-a putut scrie în %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Nu s-a putut executa „mmap” cu un fișier gol"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Nu s-a putut face mmap cu %lu octeți"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Nu s-a putut deschide conexiunea pentru %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Nu s-a putut deschide %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Nu s-a putut invoca"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Nu s-a putut face mmap cu %lu octeți"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Eșec la trunchierea fișierului"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Eroare!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Terminat"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Terminat"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Selecția %s nu a fost găsită"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Nu s-a putut analiza fișierul pachet %s (1)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Notă, se selectează %s în locul lui %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Linie necorespunzătoare în fișierul-redirectare: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Nu s-a putut analiza fișierul pachet %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Nu pot încuia directorul cu lista"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Nu pot încuia directorul cu lista"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Se pregătește %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Se pregătește configurarea %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Se pregătește ștergerea lui %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Se pregătește ștergerea completă a %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Se rulează declanșatorul post-instalare %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Instalat %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Se configurează %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Directorul „%s” lipsește."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Nu s-a putut deschide fișierul %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Se despachetează %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Se instalează %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Se șterge %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "Șters complet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Șters complet %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Nu s-a putut scrie în %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Se construiește arborele de dependență"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Versiuni candidat"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Generare dependențe"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Se citesc informațiile de stare"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Eșec la deschiderea fișierului de stare %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Eșec la scrierea fișierului temporar de stare %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "S-au scris %i înregistrări.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "S-au scris %i înregistrări cu %i fișiere lipsă.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "S-au scris %i înregistrări cu %i fișiere nepotrivite\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"S-au scris %i înregistrări cu %i fișiere lipsă și %i fișiere nepotrivite\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Nepotrivire la suma de căutare"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Sistemul de pachete '%s' nu este suportat"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Nu s-a putut determina un tip de sistem de împachetare potrivit"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Nu s-a putut deschide fișierul %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Aceasta instalare va avea nevoie de ștergerea temporară a pachetului "
+"esențial %s din cauza unui bucle conflict/pre-dependență. Asta de multe ori "
+"nu-i de bine, dar dacă vreți întradevăr s-o faceți, activați opțiunea APT::"
+"Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Cache gol de pachet"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Cache-ul fișierului pachet este deteriorat"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Fișierul cache al pachetului este o versiune incompatibilă"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Acest APT nu suportă versioning system '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Cache-ul pachetului a fost construit pentru o arhitectură diferită"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Cache-ul fișierului pachet este deteriorat"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Depinde"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Pre-depinde"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Sugerează"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Este în conflict"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Recomandă"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Înlocuiește"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Corupe"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Învechit"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "important"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "cerut"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "opțional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Cache are un versioning system incompatibil"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Eroare apărută în timpul procesării %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Mamăăă, ați depășit numărul de nume de pachete de care este capabil acest "
+"APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Mamăăă, ați depășit numărul de versiuni de care este capabil acest APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Mamăăă, ați depășit numărul de descrieri de care este capabil acest APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Mamăăă, ați depășit numărul de dependențe de care este capabil acest APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Citire liste de pachete"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Eroare IO în timpul salvării sursei cache"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Tipul de fișier index '%s' nu este suportat"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Înregistrare invalidă în fișierul de preferințe, fără antet de pachet"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Nu s-a înțeles tipul de pin %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Fără prioritate (sau zero) specificată pentru pin"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Înlocuire greșită %s linia %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Linie greșită %u în lista sursă %s (tip)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Tipul '%s' nu este cunoscut în linia %u din lista sursă %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Linie greșită %u în lista sursă %s (tip)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Tipul '%s' nu este cunoscut în linia %u din lista sursă %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Trebuie să puneți niște 'surse' de URI în sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Descărcarea unor fișiere index a eșuat, acestea fie au fost ignorate, fie au "
+"fost folosite în loc unele vechi."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Calculez înnoirea"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Atins:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Luat:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ignorat:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Eroare:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Aduși: %sB în %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [În lucru]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Schimbare de mediu: introduceți discul numit\n"
+" „%s”\n"
+"în unitatea „%s” și apăsați Enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Corectez dependențele..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " eșec."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Nu s-au putut corecta dependențele"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Nu s-a putut micșora mulțimea pachetelor de înnoit"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Terminat"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Ați putea să porniți 'apt --fix-broken install' pentru a corecta acestea."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Dependențe neîndeplinite. Încercați 'apt --fix-broken install' fără nici un "
+"pachet (sau oferiți o altă soluție)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Notă, selectare %s pentru expresie regulată '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Notă, selectare %s pentru expresie regulată '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Notă, selectare %s pentru expresie regulată '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Pachetul %s este un pachet virtual furnizat de către:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Instalat]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Versiuni candidat"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Ar trebui să alegeți în mod explicit unul pentru instalare."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Pachetul %s nu este disponibil, dar este menționat de către alt pachet.\n"
+"Aceasta ar putea însemna că pachetul lipsește, s-a învechit, sau\n"
+"este disponibil numai din altă sursă\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Oricum următoarele pachete îl înlocuiesc:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Pachetul %s nu are nici un candidat la instalare"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "Pachetul %s nu este instalat, așa încât nu este șters\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Pachetul %s nu este instalat, așa încât nu este șters\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Notă, se selectează %s în locul lui %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Acest APT are puterile unei Super Vaci."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Nu s-au găsit pachete"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "AVERTISMENT: Următoarele pachete nu pot fi autentificate!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Avertisment de autentificare înlocuit.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Unele pachete n-au putut fi autentificate"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Instalați aceste pachete fără verificare?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Sunt unele probleme și -y a fost folosit fără --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "N-am putut determina spațiul disponibil în %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Nu aveți suficient spațiu în %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Nu s-a putut bloca directorul de descărcare"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Unele pachete n-au putut fi instalate. Aceasta ar putea însemna că ați "
+"cerut\n"
+"o situație imposibilă sau că folosiți distribuția instabilă în care unele "
+"pachete\n"
+"cerute n-au fost create încă sau au fost mutate din Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Următoarele informații ar putea să vă ajute la rezolvarea situației:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Pachete deteriorate"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Nu s-au putut aduce unele arhive, poate ar fi o idee bună să rulați 'apt-get "
+"update' sau încercați cu --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Eroare internă, InstallPackages a fost apelat cu pachete deteriorate!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Pachete trebuiesc șterse dar ștergerea este dezactivată."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Sunt unele probleme și -y a fost folosit fără --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Sunt unele probleme și -y a fost folosit fără --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Eroare internă, Ordering nu s-a terminat"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Ce ciudat... Dimensiunile nu se potrivesc, scrieți la apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Este nevoie să descărcați %sB/%sB de arhive.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Este nevoie să descărcați %sB de arhive.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "După această operație vor fi folosiți din disc încă %sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "După această operație se vor elibera %sB din spațiul ocupat pe disc.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"A fost specificat 'doar neimportant' dar nu este o operațiune neimportantă."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Da, fă cum îți spun!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Sunteți pe cale de a face ceva cu potențial distructiv.\n"
+"Pentru a continua tastați fraza '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Renunțare."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Vreți să continuați?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Descărcarea unor fișiere a eșuat"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Descărcare completă și în modul doar descărcare"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing și schimbul de mediu nu este deocamdată suportat"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Nu pot corecta pachetele lipsă."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Abandonez instalarea."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+# XXX: orice sugestie este bine-venită
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Nu este voie să se șteargă lucruri, nu se poate porni AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, se pare că AutoRemover a distrus ceva, lucru care n-ar trebui să se "
+"întâmple. Sunteți rugat să trimiteți un raportați de defect pentru pachetul "
+"apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Eroare internă, AutoRemover a deteriorat diverse chestiuni"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Următoarele pachete au fost instalate automat și nu mai sunt necesare:"
+msgstr[1] ""
+"Următoarele pachete au fost instalate automat și nu mai sunt necesare:"
+msgstr[2] ""
+"Următoarele pachete au fost instalate automat și nu mai sunt necesare:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"Următoarele pachete au fost instalate automat și nu mai sunt necesare:"
+msgstr[1] ""
+"Următoarele pachete au fost instalate automat și nu mai sunt necesare:"
+msgstr[2] ""
+"Următoarele pachete au fost instalate automat și nu mai sunt necesare:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Folosiți '%s' pentru a le șterge."
+msgstr[1] "Folosiți '%s' pentru a le șterge."
+msgstr[2] "Folosiți '%s' pentru a le șterge."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Următoarele extra pachete vor fi instalate:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Pachete sugerate:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Pachete recomandate:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Sar peste %s, este deja instalat și înnoirea nu este activată.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Sar peste %s, este deja instalat și înnoirea nu este activată.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Reinstalarea lui %s nu este posibilă, nu poate fi descărcat.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s este deja la cea mai nouă versiune.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Versiune selectată %s (%s) pentru %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Versiune selectată %s (%s) pentru %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Instalat]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Instalat]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Instalat]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Instalat]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "dar %s este instalat"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "dar %s este pe cale de a fi instalat"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "dar nu este instalabil"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "dar este un pachet virtual"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "dar nu este pe cale să fie instalat"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "dar nu este instalat"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " sau"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Următoarele pachete au dependențe neîndeplinite:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Următoarele pachete NOI vor fi instalate:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Următoarele pachete vor fi ȘTERSE:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Următoarele pachete au fost reținute:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Următoarele pachete vor fi ÎNNOITE:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Următoarele pachete vor fi DE-GRADATE:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Următoarele pachete ținute vor fi schimbate:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (datorită %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"AVERTISMENT: Următoarele pachete esențiale vor fi șterse.\n"
+"Aceasta NU ar trebui făcută decât dacă știți exact ce vreți!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu înnoite, %lu nou instalate, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinstalate, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu de-gradate, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu de șters și %lu neînnoite.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu instalate sau șterse incomplet.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "Trebuie să dați exact un șablon"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Fișiere pachet: "
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Cache-ul este desincronizat, nu se poate executa x-ref pe un fișier pachet"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pachete alese special:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Instalat: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Candidează: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(niciunul)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabela de versiuni:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Nu pot găsi pachetul %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Nu pot găsi pachetul %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Nu pot găsi pachetul %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Nu pot determina starea listei surse de pachete %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Trebuie specificat cel puțin un pachet pentru a-i aduce sursa"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Nu s-a putut găsi o sursă pachet pentru %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Sar peste fișierul deja descărcat '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Este nevoie să descărcați %sB/%sB din arhivele surselor.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Este nevoie să descărcați %sB din arhivele surselor.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Aducere sursa %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Eșec la aducerea unor arhive."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Sar peste despachetarea sursei deja despachetate în %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Comanda de despachetare '%s' eșuată.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Verificați dacă pachetul 'dpkg-dev' este instalat.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Comanda de construire '%s' eșuată.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Nu pot prelua informațiile despre dependențele înglobate ale lui %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s nu are dependențe înglobate.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Trebuie specificat cel puțin un pachet pentru a-i verifica dependențele "
+"înglobate"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Eșec la prelucrarea dependențelor de compilare"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Eșec la prelucrarea dependențelor de compilare"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Eșec la redenumirea lui %s în %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Pachetul %s versiunea %s are o dependență neîndeplinită:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Comanda de actualizare nu are argumente"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Comanda de actualizare nu are argumente"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Total nume pachete : "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Total nume pachete : "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Pachete normale: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Pachete virtuale pure: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Pachete virtuale singulare: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Pachete virtuale mixte: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Lipsă: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Total versiuni distincte: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Numărul total de descrieri distincte: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Total dependențe: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Total relații versiune/fișier: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Total relații desc/fișier: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Total cartări Furnizează: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Total șiruri înglobate: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Total spațiu intern: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Total spațiu contorizat pentru: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Arată înregistrările despre sursă"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Caută în lista de pachete folosind un șablon regex"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Arată informații brute de dependențe pentru un pachet"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Arată dependențele inverse pentru un pachet"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Arată o înregistrare lizibilă pentru pachet"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Afișează numele tuturor pachetelor din sistem"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Arată configurațiile de politici"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Furnizați un nume pentru acest disc, de exemplu „Debian 2.1r1 Disk 1”"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Introduceți un disc în unitate și apăsați Enter"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Eșec la redenumirea lui %s în %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Repetați această procedură pentru restul CD-urilor din set."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumentele nu sunt perechi"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Utilizare: apt-config [opțiuni] comanda\n"
+"\n"
+"apt-config este o unealtă simplă pentru citirea fișierului de configurare "
+"APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Utilizare: apt-extracttemplates fișier1 [fișier2 ...]\n"
+"\n"
+"apt-extracttemplates este o unealtă pentru extragerea informațiilor \n"
+"de configurare și a șabloanelor dintr-un pachet Debian\n"
+"\n"
+"Opțiuni\n"
+" -h Acest text de ajutor.\n"
+" -t Impune directorul temporar\n"
+" -c=? Citește acest fișier de configurare\n"
+" -o=? Ajustează o opțiune de configurare arbitrară, ex. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Nu s-a putut citi versiunea debconf. Este instalat debconf?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Nu pot găsi pachetul %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+"Eroare internă, rezolvatorul de probleme a deteriorat diverse chestiuni"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Module suportate:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Utilizare: apt-get [opțiuni] comanda\n"
+" apt-get [opțiuni] install|remove pachet1 [pachet2 ...]\n"
+" apt-get [opțiuni] source pachet1 [pachet2 ...]\n"
+"\n"
+"apt-get este o simplă interfață în linie de comandă pentru descărcarea și\n"
+"instalarea pachetelor. Cele mai frecvent folosite comenzi sunt update\n"
+"și install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Aduce listele noi de pachete"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Realizează o înnoire"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalează pachete noi (pachet este libc6, nu libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Instalează pachete noi (pachet este libc6, nu libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Șterge pachete"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Șterge și curăță pachete"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Șterge automat toate pachetele nefolosite"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Înnoirea distribuției, a se vedea apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Urmează selecțiile dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Configurează dependențele de compilare pentru pachetele-sursă"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Șterge fișierele-arhivă descărcate"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Șterge fișiere-arhivă descărcate învechite"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Verifică dacă există dependențe neîndeplinite"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Descarcă pachete-sursă"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Trebuie specificat cel puțin un pachet pentru a-i aduce sursa"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Utilizare: apt-extracttemplates fișier1 [fișier2 ...]\n"
+"\n"
+"apt-extracttemplates este o unealtă pentru extragerea informațiilor \n"
+"de configurare și a șabloanelor dintr-un pachet Debian\n"
+"\n"
+"Opțiuni\n"
+" -h Acest text de ajutor.\n"
+" -t Impune directorul temporar\n"
+" -c=? Citește acest fișier de configurare\n"
+" -o=? Ajustează o opțiune de configurare arbitrară, ex. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Utilizare: apt-extracttemplates fișier1 [fișier2 ...]\n"
+"\n"
+"apt-extracttemplates este o unealtă pentru extragerea informațiilor \n"
+"de configurare și a șabloanelor dintr-un pachet Debian\n"
+"\n"
+"Opțiuni\n"
+" -h Acest text de ajutor.\n"
+" -t Impune directorul temporar\n"
+" -c=? Citește acest fișier de configurare\n"
+" -o=? Ajustează o opțiune de configurare arbitrară, ex. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "dar nu este instalat"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Următoarele pachete NOI vor fi instalate:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s este deja la cea mai nouă versiune.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s este deja la cea mai nouă versiune.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Eșec la „open” pentru %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "Verificați dacă pachetul 'dpkg-dev' este instalat.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Înregistrare de pachet necunoscut!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Citire liste de pachete"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Pachete alese special:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Pachete alese special:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Pachete deteriorate"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s este marcat ca fiind instalat manual.\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Se citesc informațiile de stare"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Configurări implicite necorespunzătoare!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Apăsați Enter pentru a continua."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Doriți să ștergeți eventualele fișiere .deb descărcate anterior?"
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "S-au produs unele erori în timpul despachetării. Se vor configura"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+"pachetele care au fost instalate. Aceasta ar putea rezulta erori duplicate"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "sau erori cauzate de dependențe lipsă. Fiind normal, doar erorile de"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"deasupra acestui mesaj sunt importante. Corectați-le și reporniți "
+"[I]nstalarea"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Se combină informațiile disponibile"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Lista de extensii pentru pachet este prea lungă"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Eroare la prelucrarea directorului %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Lista de extensii pentru sursă este prea lungă"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Eroare la scrierea antetului în fișierul index"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Eroare la prelucrarea conținutului %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Utilizare: apt-ftparchive [opțiuni] comanda\n"
+"Comenzi: packages cale_binare [fișier_înlocuire [prefix_cale]]\n"
+" sources cale_src [fișier_înlocuire [prefix_cale]]\n"
+" contents cale\n"
+" release cale\n"
+" generate config [grupuri]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generează fișiere de indexare pentru arhivele Debian. "
+"Suportă\n"
+"multe stiluri de generare de la complet automat la înlocuiri funcționale\n"
+"pentru dpkg-scanpackage și dpkg-scansources\n"
+"\n"
+"apt-ftparchive generează fișierele Package dintr-un arbore de .deb-uri.\n"
+"Fișierul Pachet înglobează conținutul tuturor câmpurilor de control din "
+"fiecare\n"
+"pachet cât și MD5 hash și dimensiunea fișierului. Un fișier de înlocuire "
+"este\n"
+"furnizat pentru a forța valoarea Priorității și Secțiunii.\n"
+"\n"
+"În mod asemănator apt-ftparchive generează fișierele Sources dintr-un arbore "
+"de .dsc-uri.\n"
+"Opțiunea --source-override poate fi folosită pentru a specifica fișierul de "
+"înlocuire\n"
+"\n"
+"Comenzile 'packages' și 'sources' ar trebui executate în rădăcina "
+"arborelui.\n"
+"Cale_binare ar trebui să indice baza căutării recursive și fișierul de "
+"înlocuire ar\n"
+"trebui să conțină semnalizatorul de înlocuire. Prefix_cale este adăugat "
+"câmpului\n"
+"de nume fișier dacă acesta este prezent. Exemplu de utilizare din arhiva\n"
+"Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Opțiuni:\n"
+" -h Acest text de ajutor.\n"
+" --md5 Generarea controlului MD5\n"
+" -s=? Fișierul de înlocuire pentru surse\n"
+" -q În liniște\n"
+" -d=? Selectează baza de date de cache opțională\n"
+" --no-delink Activează modul de depanare dezlegare\n"
+" --contents Generarea fișierului cu sumarul de control\n"
+" -c=? Citește acest fișier de configurare\n"
+" -o=? Ajustează o opțiune de configurare arbitrară"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nu s-a potrivit nici o selecție"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Unele fișiere lipsesc din grupul fișierului pachet '%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB a fost corupt, fișierul a fost redenumit %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB este vechi, se încearcă înnoirea %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Formatul DB este nevalid. Dacă l-ați înnoit pe apt de la o versiune mai "
+"veche, ștergeți și recreați baza de date."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Nu s-a putut deschide fișierul DB %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Eșec la „readlink” pentru %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arhiva nu are înregistrare de control"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Nu s-a putut obține un cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Eșec la alocarea memoriei"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Algoritm de compresie necunoscut '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Rezultatul comprimat %s are nevoie de o ajustare a compresiei"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Eșec la crearea conexiunii IPC către subproces"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Eșec la „fork”"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Comprimare copil"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Eroare internă, eșec la crearea lui %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "IE către subproces/fișier eșuat"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Eșec la citire în timpul calculului sumei MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Nu s-a putut deschide %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Înlocuire greșită %s linia %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Eșec la citirea fișierului de înlocuire a permisiunilor %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Înlocuire greșită %s linia %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Înlocuire greșită %s linia %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Înlocuire greșită %s linia %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "A: Nu s-a putut citi directorul %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "A: Nu s-a putut efectua „stat” pentru %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "A: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Erori la fișierul "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Eșec la „resolve” pentru %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Parcurgerea arborelui a eșuat"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Eșec la „open” pentru %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Dezlegare %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Eșec la „link” între %s și %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Limita de %sB a dezlegării a fost atinsă.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arhiva nu are câmp de pachet"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s nu are intrare de înlocuire\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s responsabil este %s nu %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s nu are nici o intrare sursă de înlocuire\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s nu are nici intrare binară de înlocuire\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "În așteptarea antetelor"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Serverul HTTP a trimis un antet de răspuns necorespunzător"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Linie de antet necorespunzătoare"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Serverul HTTP a trimis un antet Content-Length necorespunzător"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Serverul HTTP a trimis un antet zonă de conținut necorespunzător"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Acest server HTTP are un suport defect de intervale"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Format dată necunoscut"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Antet de date necorespunzător"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Conectare eșuată"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Eroare internă"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Nu s-a putut citi baza de date de CD %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Folosiți apt-cdrom pentru a-l face pe APT să recunoască acest CD. „apt-get "
+"update” nu poate fi folosit pentru adăugarea de noi CD-uri"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD-ROM necorespunzător"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Nu se poate demonta CD-ul din %s, poate este încă utilizat."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disc negăsit."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Fișier negăsit"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Conectare la %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Conectare la %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Nu s-a putut crea un socket pentru %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Nu s-a putut iniția conexiunea cu %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Eșec"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Nu s-a putut realiza conexiunea cu %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+"Nu s-a putut realiza conexiunea cu %s:%s (%s), timpul de conectare expirat"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Conectare la %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nu s-a putut rezolva „%s”"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Eșec temporar la rezolvarea lui „%s”"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "S-a întâmplat ceva „necurat” la rezolvarea lui „%s:%s” (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "S-a întâmplat ceva „necurat” la rezolvarea lui „%s:%s” (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nu s-a putut realiza conexiunea cu %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Eșec la „stat”"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI invalid, URI-uile locale trebuie să nu înceapă cu //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Se autentifică"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Nu se poate detecta numele perechii"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Nu s-a putut detecta numele local"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Serverul a refuzat conexiunea și a spus: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "„USER” a eșuat, serverul a spus: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "„PASS” a eșuat, serverul a spus: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Un server proxy a fost precizat, dar nu există nici un script de conectare, "
+"Acquire::ftp::ProxyLogin este gol."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Scriptul „%s” cu comenzile de conectare a eșuat, serverul a spus: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "„TYPE” a eșuat, serverul a spus: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Timpul de conectare a expirat"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Serverul a închis conexiunea"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Un răspuns a depășit zona de tampon."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protocol corupt"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Nu s-a putut crea un socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Nu s-a putut realiza conectarea la socket-ul de date, timpul de conectare a "
+"expirat"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Nu s-a putut realiza conectarea la un socket pasiv"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "„getaddrinfo” n-a reușit să obțină un socket de ascultare"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Nu s-a putut realiza asocierea la un socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Nu s-a putut asculta pe socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Nu s-a putut detecta numele socket-ului"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Nu s-a putut trimite comanda PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Familie de adrese necunoscută %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "„EPRT” a eșuat, serverul a spus: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Timpul de conectare la socket-ul de date expirat"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Nu s-a putut accepta conexiune"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problemă la calcularea dispersiei pentru fișierul"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Nu s-a putut aduce fișierul, serverul a spus „%s”"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Timp expirat pentru socket-ul de date"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Transferul de date a eșuat, serverul a spus: '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Interogare"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Nu s-a putut invoca"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Cel puțin o semnătură nevalidă a fost întâlnită."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Eroare internă: Semnătură corespunzătoare, dar nu s-a putut determina "
+"amprenta digitale a cheii?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Nu s-a putut executa „%s” pentru verificarea semnăturii (gnupg este "
+"instalat?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Eroare necunoscută în timp ce se execută apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Următoarele semnături nu au fost valide:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Următoarele semnături n-au putut fi verificate, deoarece cheia publică nu "
+"este disponibilă:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Eroare la scrierea în fișierul"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr ""
+"Eroare la citirea de la server. Conexiunea a fost închisă de la distanță"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Eroare la citirea de la server"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Eroare la scrierea în fișier"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Selecția a eșuat"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Timp de conectare expirat"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Eroare la scrierea fișierului de rezultat"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Eșec la ajustarea timpului de modificare"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Conexiune închisă prematur"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Antet de membru de arhivă necorespunzător"
+
+#~ msgid "Removed %s"
+#~ msgstr "Șters %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Fișierul pachetului %s este desincronizat."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Fișierele index de pachete sunt deteriorate. Fără câmpul 'nume fișier:' "
+#~ "la pachetul %s."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Nu s-a putut deschide fișierul %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Nu s-a putut deschide fișierul %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Se deschide fișierul de configurare %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Deschidere %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Dependențe neîndeplinite. Încercați să folosiți --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Ați putea porni 'apt --fix-broken install' pentru a corecta acestea:"
+
+#~ msgid "(not found)"
+#~ msgstr "(negăsit)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Pachet ales special: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Nu există nici o cheie publică disponibilă pentru următoarele "
+#~ "identificatoare de chei:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Directorul %s este redirectat"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Dependența lui %s de %s nu poate fi satisfăcută deoarece pachetul %s nu "
+#~ "poate fi găsit"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Dependența lui %s de %s nu poate fi satisfăcută deoarece pachetul %s nu "
+#~ "poate fi găsit"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Eșec la satisfacerea dependenței %s pentru %s: Pachetul instalat %s este "
+#~ "prea nou"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Dependența lui %s de %s nu poate fi satisfăcută deoarece nici o versiune "
+#~ "disponibilă a pachetului %s nu poate satisface versiunile cerute"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "Dependența lui %s de %s nu poate fi satisfăcută deoarece pachetul %s nu "
+#~ "poate fi găsit"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Eșec la satisfacerea dependenței %s pentru %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Dependențele înglobate pentru %s nu pot fi satisfăcute."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problemă la desfacerea %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Eșec la „unlink” pentru %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Utilizare: apt-cache [opțiuni] comanda\n"
+#~ " apt-cache [opțiuni] show pachet1 [pachet2 ...]\n"
+#~ "\n"
+#~ "apt-cache este o unealtă de nivel scăzut pentru manipularea fișierelor\n"
+#~ "binare din cache-ul APT, și de interogare a informațiilor din ele\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Opțiuni:\n"
+#~ " -h Acest text de ajutor.\n"
+#~ " -p=? Cache-ul de pachete.\n"
+#~ " -s=? Cache-ul de surse.\n"
+#~ " -q Dezactivează indicatorul de progres.\n"
+#~ " -i Arată doar dependențele importante pentru comanda „unmet”.\n"
+#~ " -c=? Citește acest fișier de configurare\n"
+#~ " -o=? Ajustează o opțiune de configurare arbitrară, ex. -o dir::cache=/"
+#~ "tmp\n"
+#~ "Vedeți manualele apt-cache(8) și apt.conf(5) pentru mai multe "
+#~ "informații.\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Opțiuni:\n"
+#~ " -h Acest text de ajutor.\n"
+#~ " -c=? Citește acest fișier de configurare\n"
+#~ " -o=? Ajustează o opțiune de configurare arbitrară, ex. -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Utilizare: apt-sortpkgs [opțiuni] fișier1 [fișier2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs este o unealtă simplă pentru sortarea fișierelor pachete. \n"
+#~ "Opțiunea -s este folosită pentru a indica ce fel de fișier este.\n"
+#~ "\n"
+#~ "Opțiuni:\n"
+#~ " -h Acest text de ajutor\n"
+#~ " -s Folosește sortarea de fișiere-sursă\n"
+#~ " -c=? Citește acest fișier de configurare\n"
+#~ " -o=? Ajustează o opțiune de configurare arbitrară, ex.: -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Procesul copil a eșuat"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Trebuie specificat cel puțin un pachet pentru a-i aduce sursa"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Eșec la crearea conexiunilor"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Eșec la executarea lui gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s pentru %s compilat la %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Eșec la crearea FIȘIERULUI*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (analiza URI)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (analiza dist.)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (analiza dist.)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (analiza dist.)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (analiza dist.)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (analiza URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (dist. absolută)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Linie greșită %lu în lista sursă %s (analiza dist.)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Nu s-a găsit pachetul %s %s în timpul procesării dependențelor de fișiere"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Nu pot determina starea listei surse de pachete %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Colectare furnizori fișier"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Nu s-a putut analiza fișierul pachet %s (1)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Blocul vânzător %s nu conține amprentă"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Total spațiu versiuni ale dependențelor: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Nu aveți suficient spațiu în %s"
+
+#~ msgid "Done"
+#~ msgstr "Terminat"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Abandonez instalarea."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Eroare internă, înnoire totală a defectat diverse chestiuni"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s nu este un pachet DEB valid."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Utilizare puct de montare CD-ROM %s\n"
+#~ "Montare CD-ROM\n"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Aceasta nu este o arhivă DEB validă, nu are unul din următorii membri "
+#~ "„%s”, „%s” sau „%s”"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Nepotrivire MD5Sum"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "N-am putut localiza un fișier pentru pachetul %s. Aceasta ar putea "
+#~ "însemna că aveți nevoie să depanați manual acest pachet."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Nu se poate scrie jurnalul, openpty() a eșuat (oare /dev/pts e montat?)\n"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Se deschide fișierul de configurare %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Eșec la ștergerea lui %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Nu s-a putut crea %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Eșec la „stat” pentru %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Directoarele info și temp trebuie să fie în același sistem de fișiere"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr ""
+#~ "Eșec la schimbarea directorului către directorul de administrare %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Eroare internă la preluarea numelui de pachet"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Se citește lista de fișiere"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Eșec la deschiderea fișierului-listă '%sinfo/%s'. Dacă nu puteți restaura "
+#~ "acest fișier atunci goliți-l și, apoi, imediat reinstalați aceeași "
+#~ "versiune a pachetului!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Citirea fișierului-listă %sinfo/%s a eșuat"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Eroare internă la preluarea unui nod"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Eșec la deschiderea fișierului de redirectări %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Fișierul-redirectare este deteriorat"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Linie necorespunzătoare în fișierul-redirectare: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Eroare internă în timpul adăugării unei redirectări"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Cache-ul de pachete trebuie mai întâi inițializat"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Eșec la găsirea unui antet „Package:”, deplasamentul este %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr ""
+#~ "Secțiune necorespunzătoare ConfFile în fișierul de stare. Deplasamentul "
+#~ "este %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Eroare la analiza MD5. Deplasamentul este %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Nu s-a putut schimba directorul la %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Eșec la localizare a unui fișier de control valid"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nu s-a putut deschide conexiunea pentru %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Eroare de citire din procesul %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "S-a primit o singură linie de antet de peste %u caractere"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Înlocuire greșită %s linia %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Înlocuire greșită %s linia %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Înlocuire greșită %s linia %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "decompresor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "citire, încă mai am %lu de citit dar n-a mai rămas nimic"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "scriere, încă mai am %lu de scris dar nu pot"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Eroare apărută în timpul procesării %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Eroare apărută în timpul procesării %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "A apărut o eroare în timpul procesării lui %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Eroare apărută în timpul procesării %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Eroare apărută în timpul procesării %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Eroare apărută în timpul procesării %s (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Eroare apărută în timpul procesării %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "A apărut o eroare în timpul procesării lui %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Eroare apărută în timpul procesării %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Eroare apărută în timpul procesării %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Eroare internă, nu a putut fi localizat membrul"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Lista de argumente din Acquire::gpgv::Options este prea lungă. Se iese."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Eroare apărută în timpul procesării %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Linie greșită %u în lista sursă %s (identificator vânzător)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Nu s-a putut accesa inelul de chei: '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Nu s-a putut peteci fișierul"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Se procesează declanșatorii pentru %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "MMap-ul dinamic a rămas fără spațiu"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Din moment ce doar ați cerut o singură operațiune este extrem de "
+#~ "probabil\n"
+#~ " că pachetul pur și simplu nu este instalabil și un raport de eroare "
+#~ "pentru\n"
+#~ "acest pachet ar trebui completat."
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Linia %d e prea lungă (max %lu)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Linie %d prea lungă (max %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Eroare apărută în timpul procesării %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Eroare apărută în timpul procesării %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Etichetă memorată: %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "Găsite %i indexuri de pachete, %i indexuri de surse și %i semnături\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Eșuarea selecției"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..5990397
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,4565 @@
+# Russian messages for the apt suite.
+#
+# Vadim Kutchin <amadis@chemi.komisc.ru>, 2002.
+# Ilgiz Kalmetev <ilgiz@bashtelecom.ru>, 2002.
+# Tichomir Koryakov <Tichomir.Koryakov@usu.ru>, 2002.
+# Nikolai Prokoschenko <nikolai@prokoschenko.de>, 2004.
+# Dmitry Astapov <adept@umc.com.ua>, 2004.
+# Dmitry Astapov <adept@despammed.com>, 2004.
+# Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006, 2007, 2008.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2012, 2015, 2016.
+# Lev Lamberov <dogsleg@debian.org>, 2018.
+# Aleksej Shilin <rootlexx@mail.ru>, 2017, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.8.0\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2019-02-10 11:50+0300\n"
+"Last-Translator: Aleksej Shilin <rootlexx@mail.ru>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.11\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Неверная сигнатура архива"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Ошибка чтения заголовка элемента архива"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Неправильный заголовок элемента архива"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Слишком короткий архив"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Не удалось прочитать заголовки архива"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Не удалось найти настроенную программу сжатия для «%s»"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Повреждённый архив"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Неправильная контрольная сумма Tar — архив повреждён"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Неизвестный тип %u, элемент %s в заголовке TAR"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Это неправильный DEB-архив: отсутствует элемент «%s»"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Внутренняя ошибка: не удалось найти элемент %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Не удалось разобрать содержимое файла control"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Не удалось записать файл %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Не удалось закрыть файл %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Слишком длинный путь %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Повторная распаковка %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Каталог %s входит в список отклоняемых"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Пакет пытается писать в отклонённый файл %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Путь отклонения слишком длинный"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Не удалось получить атрибуты %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Не удалось переименовать %s в %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Каталог %s был заменён не-каталогом"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Не удалось найти узел в его хеш-цепочке"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Путь слишком длинный"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "У пакета %s, файлы которого заменяются, отсутствует версия"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Файл %s/%s переписывает файл в пакете %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Невозможно прочитать %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Невозможно получить атрибуты %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode вызван для узла, который ещё используется"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Не удалось найти элемент хеша!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Не удалось создать отклонение"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Внутренняя ошибка в AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Попытка перезаписи отклонения, %s -> %s и %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Повторное добавление отклонения %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Дубликат файла настройки %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Обновление из этого репозитория нельзя выполнить безопасным способом, "
+"поэтому по умолчанию он отключён."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Данные из этого репозитория не могут быть аутентифицированы, поэтому их "
+"использование потенциально небезопасно."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Информацию о создании репозитория и настройках пользователя смотрите в "
+"справочной странице apt-secure(8)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Репозиторий «%s» больше не подписан."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Репозиторий «%s» больше не содержит файла Release."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Обычно это не разрешается, однако указан параметр Acquire::"
+"AllowDowngradeToInsecureRepositories для продолжения."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Репозиторий «%s» не подписан."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Репозиторий «%s» не содержит файла Release."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Репозиторий «%s» обеспечивает только слабую защиту информации."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Не удалось прочесть значение символьной ссылки %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Хеш-сумма не совпадает"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr "Недостаточно информации для безопасной загрузки"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "Ошибка в rename: %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Не совпадает размер"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Неправильный формат файла"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Ошибка подписи"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Подписанный файл некорректен: получено «%s» (возможно, в сети требуется "
+"аутентификация?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Произошла ошибка при проверке подписи. Репозиторий не обновлён, и будут "
+"использованы предыдущие индексные файлы. Ошибка GPG: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Ошибка GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"Пропускается получение настроенного файла «%s», так как в репозитории «%s» "
+"отсутствует компонент «%s» (возможно, компонент указан с ошибкой в sources."
+"list?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"Пропускается получение настроенного файла «%s», так как репозиторий «%s» не "
+"поддерживает архитектуру «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"Пропускается получение настроенного файла «%s», так как репозиторий «%s» его "
+"не предоставляет (возможно, репозиторий указан с ошибкой в sources.list?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"Пропускается получение настроенного файла «%s», так как репозиторий «%s» "
+"обеспечивает только слабую защиту информации"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Файл Release для %s просрочен (недостоверный уже %s). Обновление этого "
+"репозитория производиться не будет."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Файл Release для %s пока не действителен (недостоверный ещё %s). Обновление "
+"этого репозитория производиться не будет."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Противоречивый выпуск: %s (ожидался %s, но получен %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "Репозиторий «%s» изменил значение поля «%s» с «%s» на «%s»"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+"Репозиторий «%s» изменил свой приоритет по умолчанию для %s с %hi на %hi."
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+"Дополнительные сведения об этом можно найти в «Информации о выпуске» по "
+"адресу: %s"
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"Требуется явное подтверждение, прежде чем можно будет обновить данный "
+"репозиторий. Дополнительную информацию смотрите в справочной странице %s."
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Не удалось получить %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Не удалось обнаружить файл пакета %s. Это может означать, что вам придётся "
+"вручную исправить этот пакет (отсутствует архитектура)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Невозможно найти источник для загрузки «%2$s» версии «%1$s»"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Журнал изменений для %s=%s недоступен"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+"Метод «%s» не поддерживается и по умолчанию отключён. Рассмотрите "
+"возможность перехода на использование http(s). Чтобы включить его снова, "
+"установите параметр Dir::Bin::Methods::%s в значение «%s»."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "Метод «%s» явным образом отключён в настройках."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+"Если вы намеревались использовать Tor, помните, что нужно использовать %s "
+"вместо %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Драйвер для метода %s не найден."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Проверьте, установлен ли пакет %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Метод %s запустился некорректно"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Вставьте диск с меткой «%s» в устройство «%s» и нажмите [Enter]."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Каталог списков %s отсутствует."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Каталог архивов %s отсутствует."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Невозможно заблокировать каталог %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"В системе нет пользователя «%s» для песочницы, невозможно сбросить права"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Загрузка выполняется от лица суперпользователя без ограничений песочницы, "
+"так как файл «%s» недоступен для пользователя «%s»."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Очистка «%s» не поддерживается"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Получение файла %li из %li (осталось %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Получение файла %li из %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Пакет %s нуждается в переустановке, но найти архив для него не удалось."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Ошибка: pkgProblemResolver::Resolve привёл к появлению сломанных пакетов. "
+"Это может быть вызвано зафиксированными пакетами."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Невозможно исправить ошибки: у вас зафиксированы сломанные пакеты."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Не удалось открыть либо разобрать содержимое списков пакетов или файла "
+"состояния."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Вы можете запустить «apt-get update» для исправления этих ошибок"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Не удалось прочитать перечень источников."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Ошибка компиляции регулярного выражения: %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Выпуск «%s» для «%s» не найден"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Версия «%s» для «%s» не найдена"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Не удалось найти задачу «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Не удалось найти ни один пакет с помощью регулярного выражения «%s»"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Не удалось найти ни один пакет с помощью шаблона «%s»"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Невозможно найти пакет %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Не удалось выбрать версии из пакета «%s», так как он полностью виртуальный"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Не удалось выбрать самую новую версию из пакета «%s», так как он полностью "
+"виртуальный"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Не удалось выбрать версию-кандидата из пакета %s, так как у него нет "
+"кандидатов"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Не удалось выбрать установленную версию из пакета %s, так как он не "
+"установлен"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Не удалось выбрать ни установленную, ни версию-кандидата из пакета «%s», так "
+"как в нём нет ни той, ни другой"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Строка %u в списке источников %s слишком длинная."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Размонтирование CD-ROM…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Использование %s в качестве точки монтирования CD-ROM\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Ожидание диска…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Монтирование CD-ROM…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Идентификация… "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Найдена метка: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Поиск индексных файлов на диске…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Найдено %zu индексов двоичных пакетов, %zu индексов пакетов с исходным "
+"кодом, %zu индексов переводов и %zu подписей\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Не удалось найти ни одного файла пакетов; возможно, это не диск Debian или "
+"не с той архитектурой?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Найдена метка «%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Это неправильное имя, попробуйте ещё раз.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Название диска: \n"
+"«%s»\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Копирование списков пакетов…"
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Запись нового списка источников\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Записи в списке источников для этого диска:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Невозможно сменить текущий каталог на %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Невозможно получить атрибуты %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Невозможно прочитать атрибуты точки монтирования %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Невозможно получить атрибуты CD-ROM"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"Параметр командной строки «%c» [из %s] непонятен в комбинации с другими "
+"параметрами."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr ""
+"Параметр командной строки «%s» непонятен в комбинации с другими параметрами"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Параметр командной строки %s не логического типа"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Для параметра %s требуется аргумент."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Значение параметра %s должно иметь вид =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Для параметра %s требуется аргумент в виде целого числа, а не «%s»"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Параметр «%s» слишком длинный"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Смысл %s не ясен, используйте true или false."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Неверная операция %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Неизвестное сокращение типа: «%c»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Синтаксическая ошибка %s:%u: в начале блока нет имени."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Синтаксическая ошибка %s:%u: неправильный тег"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Синтаксическая ошибка %s:%u: лишние символы после значения"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Синтаксическая ошибка %s:%u: директивы могут задаваться только на верхнем "
+"уровне"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Синтаксическая ошибка %s:%u: слишком много вложенных include"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Синтаксическая ошибка %s:%u вызвана include из этого места"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Синтаксическая ошибка %s:%u: неподдерживаемая директива «%s»"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Синтаксическая ошибка %s:%u: для директивы clear требуется дерево параметров "
+"в качестве аргумента"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Синтаксическая ошибка %s:%u: лишние символы в конце файла"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Проблема при удалении файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Блокировка не используется, так как файл блокировки %s доступен только для "
+"чтения"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Не удалось открыть файл блокировки %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Блокировка не используется, так как файл блокировки %s находится на файловой "
+"системе nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Не удалось получить файл блокировки %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Невозможно создать список файлов, так как «%s» не является каталогом"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Игнорируется файл «%s» в каталоге «%s», так как это не обычный файл"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "Игнорируется файл «%s» в каталоге «%s», так как он не имеет расширения"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Игнорируется файл «%s» в каталоге «%s», так как он имеет неправильное "
+"расширение"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Ожидалось завершение процесса %s, но он не был запущен"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "В порождённом процессе %s произошла ошибка сегментирования."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Порождённый процесс %s получил сигнал %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Порождённый процесс %s вернул код ошибки (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Порождённый процесс %s неожиданно завершился"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Ошибка чтения"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Ошибка записи"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Проблема закрытия gzip-файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Неожиданный конец файла"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Не удалось создать IPC с порождённым процессом"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Не удалось выполнить программу сжатия "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Не удалось открыть файл %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Не удалось открыть файловый дескриптор %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr ""
+"Ошибка чтения: планировалось прочесть ещё %llu байтов, но ничего больше нет"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "Ошибка записи: планировалось записать ещё %llu байтов, но не удалось"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Проблема закрытия файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Проблема при переименовании файла %s в %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Проблема при синхронизации файла"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Невозможно выполнить mkstemp %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Невозможно записать в %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Невозможно отобразить в память пустой файл"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Не удалось отобразить в память %llu байтов"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Не удалось сделать копию файлового дескриптора %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Невозможно закрыть отображение в память"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Невозможно синхронизировать отображение в память"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Не удалось отобразить в память %lu байтов"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Не удалось обрезать файл"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Не хватает места для динамического отображения в память. Увеличьте значение "
+"APT::Cache-Start. Текущее значение: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Невозможно увеличить размер отображения в память, так как уже достигнут "
+"предел в %lu байтов."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Невозможно увеличить размер отображения в память, так как автоматическое "
+"увеличение отключено пользователем."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s… Ошибка!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s… Готово"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "…"
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s… %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%liд %liч %liмин %liс"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%liч %liмин %liс"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%liмин %liс"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%liс"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Не найдено: %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr "Для цели %s нужно получить такой же файл (%s), как %s из источника %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "Цель %s (%s) настроена несколько раз: в %s и в %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Невозможно разобрать содержимое файла Release (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Отсутствуют разделы в файле Release (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Отсутствуют хеш-суммы в файле Release (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"Отсутствуют хеш-суммы в файле Release (%s), которые считались бы достаточно "
+"стойкими с точки зрения безопасности"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Неправильный элемент «%s» в файле Release (%s)"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr "Указаны конфликтующие значения параметра %s из источника %s %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr "Указано некорректное значение параметра %s из источника %s %s (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+"Указаны конфликтующие значения параметра %s из источника %s %s: %s != %s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Невозможно разобрать содержимое файла пакета %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Невозможно получить блокировку внешнего интерфейса dpkg (%s); она уже "
+"используется другим процессом?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr ""
+"Невозможно получить блокировку внешнего интерфейса dpkg (%s); у вас есть "
+"права суперпользователя?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"Работа dpkg была прервана, вы должны вручную запустить «%s» для устранения "
+"проблемы. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Невозможно выполнить блокировку управляющего каталога (%s); он уже "
+"используется другим процессом?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr ""
+"Невозможно выполнить блокировку управляющего каталога (%s); у вас есть права "
+"суперпользователя?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Не заблокирован"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Подготавливается %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Подготавливается для настройки %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Подготавливается для удаления %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Подготовка к полному удалению %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Уведомление об исчезновении %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Выполняется послеустановочный триггер %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Установлен %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Настраивается %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Отсутствует каталог «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Не удалось открыть файл «%s»"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Распаковывается %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Устанавливается %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Удаляется %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Выполняется полное удаление %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s полностью удалён"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Невозможно записать журнал (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Смонтирован ли /dev/pts?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Действие прервано до его завершения"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Отчёт apport не записан, так как достигнуто значение MaxReports"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "проблемы с зависимостями — оставляем ненастроенным"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Отчёт apport не записан, так как сообщение об ошибке указывает на повторную "
+"ошибку от предыдущего отказа."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Отчёт apport не записан, так как получено сообщение об ошибке о нехватке "
+"места на диске"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Отчёт apport не записан, так как получено сообщение об ошибке о нехватке "
+"памяти"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Отчёт apport не записан, так как получено сообщение о проблеме в локальной "
+"системе"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Отчёт apport не записан, так как получено сообщение об ошибке ввода-вывода "
+"dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Построение дерева зависимостей"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Версии-кандидаты"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Формирование зависимостей"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Чтение информации о состоянии"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Не удалось открыть файл состояний %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Не удалось записать временный файл состояний %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Отправка сценария решателю"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Отправка запроса решателю"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Подготовка к приёму решения"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Внешний решатель завершился с ошибкой, не передав сообщения об ошибке"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Выполнение внешнего решателя"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Выполнение внешнего планировщика"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Отправка запроса планировщику"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Отправка сценария планировщику"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+"Внешний планировщик завершился с ошибкой, не передав сообщения об ошибке"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Сохранено %i записей.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Сохранено %i записей с %i отсутствующими файлами.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Сохранено %i записей с %i несовпадающими файлами\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Сохранено %i записей с %i отсутствующими файлами и с %i несовпадающими "
+"файлами\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Не удалось найти аутентификационную запись для: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Не совпадает хеш-сумма для: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Система пакетирования «%s» не поддерживается"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Невозможно определить подходящий тип системы пакетирования"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Ход выполнения: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Запускается dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Не удалось выполнить оперативную настройку «%s». Подробнее смотрите в man 5 "
+"apt.conf об APT::Immediate-Configure. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Не удалось настроить «%s»."
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Вследствие возникновения циклических зависимостей типа Конфликтует/"
+"Предзависит, для продолжения установки необходимо временно удалить пакет "
+"первой необходимости %s. Это может привести к фатальным последствиям. Если "
+"вы действительно хотите продолжить, установите параметр APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Кэш пакетов пуст"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Кэш пакетов повреждён"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Несовместимая версия кэша пакетов"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Эта версия APT не поддерживает систему версий «%s»"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Кэш пакетов был создан для разных архитектур: %s против %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Кэш пакетов повреждён: у него неправильный хеш"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Зависит"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Предзависит"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Предлагает"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Конфликтует"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Рекомендует"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Заменяет"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Ломает"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Улучшает"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Замещает"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "важный"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "необходимый"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "стандартный"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "дополнительный"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "необязательный"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Кэш имеет несовместимую систему версий"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Произошла ошибка во время обработки %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Превышено допустимое количество имён пакетов, которое способен обработать "
+"APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr ""
+"Превышено допустимое количество версий, которое способен обработать APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr ""
+"Превышено допустимое количество описаний, которое способен обработать APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Превышено допустимое количество зависимостей, которое способен обработать "
+"APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Чтение списков пакетов"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Ошибка ввода/вывода при попытке сохранить кэш источников"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Не поддерживается индексный файл типа «%s»"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Значение «%s» недопустимо для APT::Default-Release, так как выпуск "
+"недоступен в источниках"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Неверная запись в файле предпочтений %s: отсутствует заголовок Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Неизвестный тип привязки %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+"%s: специальная привязка «Pin-Priority: %s» может использоваться только для "
+"записей вида «Package: *»"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+"%s: значение %s находится вне диапазона корректных приоритетов привязки (с "
+"%d по %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Для привязки не указан приоритет (или указан нулевой)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Некорректная запись в строке %u файла «%s» %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Некорректная строка %u в списке источников %s (тип)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Неизвестный тип «%s» в строке %u в списке источников %s"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Некорректная запись %u в списке источников %s (тип)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Неизвестный тип «%s» в записи %u в списке источников %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "В командной строке указан неподдерживаемый файл %s"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"Вы должны заполнить sources.list, поместив туда URI источников пакетов с "
+"исходным кодом"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "Невозможно преобразовать %s в целое число: выход за пределы диапазона"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Некоторые индексные файлы скачать не удалось. Они были проигнорированы, или "
+"вместо них были использованы старые версии."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Расчёт обновлений"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Сущ:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Пол:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Игн:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Ошб:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Получено %sB за %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Обработка]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Смена носителя: вставьте диск с меткой\n"
+" «%s»\n"
+"в устройство «%s» и нажмите [Enter]\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+"Вы хотите принять эти изменения и продолжить обновление из этого репозитория?"
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Исправление зависимостей…"
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " не удалось."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Невозможно исправить зависимости"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Невозможно минимизировать набор обновлений"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Готово"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Вы можете запустить «apt --fix-broken install» для исправления этих ошибок."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Неудовлетворённые зависимости. Попытайтесь выполнить «apt --fix-broken "
+"install», не указывая имени пакета (или указав решение)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Сортировка"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Заметьте, выбирается «%s» для задачи «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Заметьте, выбирается «%s» для шаблона «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Заметьте, выбирается «%s» для регулярного выражения «%s»\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Пакет %s — виртуальный, его функции предоставляются пакетами:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Установлен]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Не версия-кандидат]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Вы должны явно указать, какой именно вы хотите установить."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Пакет %s недоступен, но упомянут в списке зависимостей другого\n"
+"пакета. Это может означать, что пакет отсутствует, устарел или\n"
+"доступен из источников, не упомянутых в sources.list\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Однако следующие пакеты могут его заменить:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Для пакета «%s» не найден кандидат на установку"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Виртуальные пакеты, подобные «%s», не могут быть удалены\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Пакет «%s» не установлен, поэтому не может быть удалён. Возможно, имелся в "
+"виду «%s»?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Пакет «%s» не установлен, поэтому не может быть удалён\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Заметьте, вместо «%2$s» выбирается «%1$s»\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Основные команды:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "Дополнительную информацию о доступных командах смотрите в %s."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Параметры настройки и синтаксис описаны в apt.conf(5).\n"
+"Информацию о том, как настроить источники, можно найти в sources.list(5).\n"
+"Выбор пакетов и версий описывается в apt_preferences(5).\n"
+"Информация о безопасности доступна в apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "В APT есть коровья СУПЕРСИЛА."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "В этой программе есть мышиная СУПЕРСИЛА."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes устарел, вместо него используйте параметры, начинающиеся с --"
+"allow."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Не найдено ни одного пакета"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "ВНИМАНИЕ: Следующие пакеты невозможно аутентифицировать!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Предупреждение об аутентификации не принято во внимание.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Некоторые пакеты не удалось аутентифицировать"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Установить эти пакеты без проверки?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Обнаружены неаутентифицированные пакеты, и был указан параметр -y без --"
+"allow-unauthenticated"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Не удалось определить количество свободного места в %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Недостаточно свободного места в %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Невозможно заблокировать каталог загрузки"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Некоторые пакеты не могут быть установлены. Возможно, то, что вы просите,\n"
+"неосуществимо, или же вы используете нестабильную версию дистрибутива, где\n"
+"запрошенные вами пакеты ещё не созданы или были удалены из Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Следующая информация, возможно, вам поможет:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Сломанные пакеты"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Не удалось получить некоторые архивы; возможно, нужно запустить apt-get "
+"update или попытаться повторить запуск с ключом --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+"Внутренняя ошибка: InstallPackages была вызвана со сломанными пакетами!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Пакеты необходимо удалить, но удаление запрещено."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Удалены пакеты первой необходимости, и был указан параметр -y без --allow-"
+"remove-essential."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Пакеты заменены на старые версии, и был указан параметр -y без --allow-"
+"downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Были изменены зафиксированные пакеты, и был указан параметр -y без --allow-"
+"change-held-packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Внутренняя ошибка: упорядочение пакетов не завершилось"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "Странно. Несовпадение размеров, напишите на apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Необходимо скачать %sB/%sB архивов.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Необходимо скачать %sB архивов.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"После данной операции объём занятого дискового пространства возрастёт на "
+"%sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr ""
+"После данной операции объём занятого дискового пространства уменьшится на "
+"%sB.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"Запрошено выполнение только тривиальных операций, но это не тривиальная "
+"операция."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Да, делать, как я говорю!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"То, что вы хотите сделать, может иметь нежелательные последствия.\n"
+"Чтобы продолжить, введите фразу «%s»\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Прервано."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Хотите продолжить?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Некоторые файлы скачать не удалось"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Указан режим «только скачивание», и скачивание завершено"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing и смена носителя в данный момент не поддерживаются"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Невозможно исправить отсутствие пакетов."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Аварийное завершение установки."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Следующий пакет исчез из системы, так как все его файлы\n"
+"были перезаписаны другими пакетами:"
+msgstr[1] ""
+"Следующие пакеты исчезли из системы, так как все их файлы\n"
+"были перезаписаны другими пакетами:"
+msgstr[2] ""
+"Следующие пакеты исчезли из системы, так как все их файлы\n"
+"были перезаписаны другими пакетами:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Замечание: это сделано автоматически и специально программой dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Не разрешено ничего удалять — невозможно запустить AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Хм, кажется, AutoRemover что-то сломал, чего не должно было\n"
+"случиться. Пожалуйста, отправьте сообщение об ошибке в пакете apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Внутренняя ошибка: AutoRemover всё поломал"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Следующий пакет устанавливался автоматически и больше не требуется:"
+msgstr[1] ""
+"Следующие пакеты устанавливались автоматически и больше не требуются:"
+msgstr[2] ""
+"Следующие пакеты устанавливались автоматически и больше не требуются:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu пакет был установлен автоматически и больше не требуется.\n"
+msgstr[1] "%lu пакета было установлено автоматически и больше не требуется.\n"
+msgstr[2] "%lu пакетов было установлено автоматически и больше не требуется.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Для его удаления используйте «%s»."
+msgstr[1] "Для их удаления используйте «%s»."
+msgstr[2] "Для их удаления используйте «%s»."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "Будут установлены следующие дополнительные пакеты:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Предлагаемые пакеты:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Рекомендуемые пакеты:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Пропускается %s: пакет уже установлен, а параметр upgrade не задан.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Пропускается %s: пакет не установлен, а запрошено только обновление.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Переустановка %s невозможна: он не может быть загружен.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "Уже установлен пакет %s самой новой версии (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s помечен как установленный вручную.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Выбрана версия «%s» (%s) для «%s»\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Выбрана версия «%s» (%s) для «%s» из-за «%s»\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Вывод списка"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "Есть %i дополнительная версия. Используйте «-a» для просмотра."
+msgstr[1] "Есть %i дополнительные версии. Используйте «-a» для их просмотра."
+msgstr[2] "Есть %i дополнительных версий. Используйте «-a» для их просмотра."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"ЗАМЕЧАНИЕ: Производится только имитация работы!\n"
+" Для реальной работы %s требуются права суперпользователя.\n"
+" Учтите, что блокировка не используется, поэтому нет полного\n"
+" соответствия с текущей реальной ситуацией!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "неизвестно"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[установлен, может быть обновлён до: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[установлен, локальный]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[установлен, может быть удалён автоматически]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[установлен, автоматически]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[установлен]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[может быть обновлён с: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[остались файлы настроек]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "но %s уже установлен"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "но %s должен быть установлен"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "но он не может быть установлен"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "но это виртуальный пакет"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "но он не будет установлен"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "но он не установлен"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " или"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Следующие пакеты имеют неудовлетворённые зависимости:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Следующие НОВЫЕ пакеты будут установлены:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Следующие пакеты будут УДАЛЕНЫ:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Следующие пакеты будут оставлены в неизменном виде:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Следующие пакеты будут обновлены:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Следующие пакеты будут заменены на СТАРЫЕ версии:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Следующие зафиксированные пакеты будут изменены:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (вследствие %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"ВНИМАНИЕ: Следующие пакеты первой необходимости будут удалены.\n"
+"НЕ ДЕЛАЙТЕ этого, если вы НЕ представляете себе все возможные последствия!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "Обновлено %lu пакетов, установлено %lu новых пакетов, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "переустановлено %lu пакетов, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu пакетов заменено на старые версии, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "для удаления отмечено %lu пакетов, и %lu пакетов не обновлено.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "Установлено или удалено не до конца %lu пакетов.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Д/н]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[д/Н]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Д"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "Н"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Вы должны задать не менее одного шаблона поиска"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Полнотекстовый поиск"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "Есть %i дополнительная запись. Используйте «-a» для просмотра."
+msgstr[1] "Есть %i дополнительные записи. Используйте «-a» для их просмотра."
+msgstr[2] "Есть %i дополнительных записей. Используйте «-a» для их просмотра."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "не реальный (виртуальный) пакет"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Списки пакетов:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Кэш рассинхронизирован, невозможно обнаружить ссылку на список пакетов"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Привязанные пакеты:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s с приоритетом %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Установлен: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Кандидат: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(отсутствует)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Таблица версий:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Не удалось найти пакет для архитектуры «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Не удалось найти пакет «%s» версии «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Не удалось найти пакет «%s» в выпуске «%s»"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Используется «%s» в качестве исходного пакета вместо «%s»\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Не удалось найти версию «%s» пакета «%s»"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"Укажите как минимум один пакет, исходный код которого необходимо получить"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Невозможно найти пакет с исходным кодом для %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"ВНИМАНИЕ: работа над пакетом «%s» ведётся в системе управления версиями "
+"«%s»:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Используйте:\n"
+"%s\n"
+"для получения последних (возможно, невыпущенных) обновлений пакета.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Пропускается уже скачанный файл «%s»\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Необходимо скачать %sB/%sB архивов исходного кода.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Необходимо скачать %sB архивов исходного кода.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Получение исходного кода %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Некоторые архивы не удалось получить."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Пропускается распаковка уже распакованного исходного кода в %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Команда распаковки «%s» завершилась неудачно.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Проверьте, установлен ли пакет «dpkg-dev».\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Команда сборки «%s» завершилась неудачно.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Невозможно получить информацию о сборочных зависимостях для %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s не имеет сборочных зависимостей.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Отсутствует информация об архитектуре %s. Для её настройки смотрите apt."
+"conf(5) об APT::Architectures"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Для проверки сборочных зависимостей необходимо указать как минимум один пакет"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+"Заметьте, используется каталог «%s» для определения сборочных зависимостей\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr ""
+"Заметьте, используется файл «%s» для определения сборочных зависимостей\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Обработка сборочных зависимостей завершилась неудачно"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Не удалось разобрать содержимое %s. Повторить редактирование? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "Файл «%s» изменён, запустите «apt-get update».\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Пакет %s версии %s имеет неудовлетворённую зависимость:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Команде update не нужны аргументы"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+"Использование %s предпочтительнее, чем встраивание данных для входа "
+"непосредственно в запись %s для «%s»"
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"Может быть обновлён %i пакет. Запустите «apt list --upgradable» для показа.\n"
+msgstr[1] ""
+"Может быть обновлено %i пакета. Запустите «apt list --upgradable» для их "
+"показа.\n"
+msgstr[2] ""
+"Может быть обновлено %i пакетов. Запустите «apt list --upgradable» для их "
+"показа.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Все пакеты имеют последние версии."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "Команде %s не нужны аргументы"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Всего имён пакетов: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Всего структур пакетов: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Обычных пакетов: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Полностью виртуальных пакетов: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Одиночных виртуальных пакетов: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Смешанных виртуальных пакетов: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Отсутствует: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Всего уникальных версий: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Всего уникальных описаний: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Всего зависимостей: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Всего отношений Версия/Файл: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Всего отношений Описание/Файл: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Всего отношений Предоставляет: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Всего развёрнутых строк: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Пустого места в кэше: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Всего учтённого места: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Эта команда устарела. Используйте вместо неё «apt-mark showauto»."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Использование: apt-cache [параметры] команда\n"
+" apt-cache [параметры] show пакет1 [пакет2 …]\n"
+"\n"
+"apt-cache ищет и отображает имеющуюся информацию об установленных и "
+"доступных\n"
+"для установки пакетах. Она работает исключительно с данными локального "
+"кэша,\n"
+"созданного командой «update», например, программы apt-get. Вследствие этого\n"
+"отображаемая информация может являться устаревшей, если обновление долго не\n"
+"выполнялось, но зато apt-cache работает независимо от доступности "
+"настроенных\n"
+"источников (например, без доступа к сети).\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "показать информацию о пакете с исходным кодом"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "найти пакеты, имя которых удовлетворяет регулярному выражению"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "показать необработанную информацию о зависимостях пакета"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "показать информацию об обратных зависимостях пакета"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "показать информацию о пакете в удобочитаемой форме"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "показать имена всех пакетов в системе"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "показать текущую политику выбора пакетов"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Задайте имя для этого диска, например «Debian 5.0.3 Disk 1»"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Вставьте диск в устройство и нажмите [Enter]"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Не удалось примонтировать «%s» к «%s»"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Не удалось автоматически обнаружить CD-ROM, и в точке монтирования по "
+"умолчанию\n"
+"также ничего нет. Вы можете использовать параметр --cdrom, чтобы указать "
+"точку\n"
+"монтирования CD-ROM. Подробнее о точке монтирования и автоматическом\n"
+"обнаружении CD-ROM смотрите в «man apt-cdrom»."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Повторите этот процесс для всех имеющихся CD."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Использование: apt-cdrom [параметры] команда\n"
+"\n"
+"apt-cdrom используется для добавления CD-ROM, накопителей USB и других\n"
+"сменных носителей в качестве источников пакетов APT. Точка монтирования и\n"
+"информация об устройстве берутся из apt.conf(5), udev(7) и fstab(5).\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Непарные аргументы"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Использование: apt-config [параметры] команда\n"
+"\n"
+"apt-config — интерфейс к параметрам настройки, используемым\n"
+"всеми инструментами APT, и в основном предназначен для отладки и\n"
+"использования в сценариях оболочки.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "получить значения настройки через выполнение кода оболочки"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "показать действующее значение настройки"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Использование: apt-dump-solver\n"
+"\n"
+"apt-dump-solver — интерфейс для сохранения сценария EDSP\n"
+"в файл и, при желании, передачи его другому решателю.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Использование: apt-extracttemplates файл1 [файл2 …]\n"
+"\n"
+"apt-extracttemplates извлекает из пакетов Debian файлы config\n"
+"и template. В основном она используется debconf(1) для вопросов\n"
+"настройки перед установкой пакетов.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Невозможно определить версию debconf. Он установлен?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Не удалось найти пакет %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s помечен как установленный автоматически.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Эта команда устарела. Используйте вместо неё «apt-mark auto» и «apt-mark "
+"manual»."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Внутренняя ошибка: решатель проблем всё поломал"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Поддерживаемые модули:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Использование: apt-get [параметры] команда\n"
+" apt-get [параметры] install|remove пакет1 [пакет2…]\n"
+" apt-get [параметры] source пакет1 [пакет2…]\n"
+"\n"
+"apt-get — интерфейс командной строки для получения пакетов и\n"
+"информации о них из доверенных источников, а также установки,\n"
+"обновления и удаления пакетов вместе с их зависимостями.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "получить новые списки пакетов"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "выполнить обновление"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+"установить новые пакеты (указывается имя пакета libc6, а не имя файла libc6."
+"deb)"
+
+#: cmdline/apt-get.cc
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+"переустановить пакеты (указывается имя пакета libc6, а не имя файла libc6."
+"deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "удалить пакеты"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "удалить пакеты вместе с их файлами настройки"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "автоматически удалить все неиспользуемые пакеты"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "обновить всю систему, подробнее в apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "руководствоваться выбором, сделанным в dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "настроить сборочные зависимости для пакета с исходным кодом"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "удалить скачанные файлы архивов"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "удалить старые скачанные файлы архивов"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "проверить отсутствие нарушенных зависимостей"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "скачать архивы с исходным кодом"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "скачать двоичный пакет в текущий каталог"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "скачать и показать журнал изменений заданного пакета"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "В качестве аргумента требуется URL"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Укажите как минимум одну пару url/имя файла"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Ошибка при скачивании"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "Ошибка GetSrvRec для %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Использование: apt-helper [параметры] команда\n"
+" apt-helper [параметры] cat-file файл …\n"
+" apt-helper [параметры] download-file uri target-path\n"
+"\n"
+"apt-helper — набор различных команд для сценариев оболочки,\n"
+"которые используют, например, те же настройки прокси и систему\n"
+"получения, что и APT.\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "скачать файл по заданному uri в target-path"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "найти запись типа SRV (например, _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "объединить файлы, с автоматическим разжатием"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "определить прокси с помощью apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr "подождать, пока система не будет подключена к сети"
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr "сбросить привилегии перед выполнением заданной команды"
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Использование: apt-internal-planner\n"
+"\n"
+"apt-internal-planner — интерфейс для использования внутреннего\n"
+"планировщика APT как внешнего. Применяется для отладки.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Использование: apt-internal-solver\n"
+"\n"
+"apt-internal-solver — интерфейс для использования внутреннего\n"
+"решателя APT как внешнего. Применяется для отладки.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s не может быть помечен, так как он не установлен.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s уже помечен как установленный вручную.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s уже помечен как установленный автоматически.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr "Никаких изменений не требуется"
+
+#: cmdline/apt-mark.cc
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Следующие пакеты будут помечены как установленные автоматически:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s уже помечен как зафиксированный.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s уже помечен как незафиксированный.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+"Выполнение dpkg завершилось с ошибкой. У вас есть права суперпользователя?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s помечен как зафиксированный.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Отмена фиксации для %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "Выбран %s для вычистки.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "Выбран %s для удаления.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "Выбран %s для установки.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Использование: apt-mark [параметры] {auto|manual} пакет1 [пакет2 …]\n"
+"\n"
+"apt-mark — простая программа с интерфейсом командной строки для\n"
+"пометки пакетов как установленных вручную или автоматически. Также\n"
+"может использоваться для изменения состояния выбора пакетов dpkg(1)\n"
+"и показа списка пакетов с определённой меткой или без неё.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "пометить указанные пакеты как установленные автоматически"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "пометить указанные пакеты как установленные вручную"
+
+#: cmdline/apt-mark.cc
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "пометить все зависимости метапакетов как установленные автоматически"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "пометить пакет как зафиксированный"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "снять метку пакета, что он зафиксирован"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "вывести список автоматически установленных пакетов"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "вывести список пакетов, установленных вручную"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "вывести список зафиксированных пакетов"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Неизвестная запись о пакете!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Использование: apt-sortpkgs [параметры] файл1 [файл2 …]\n"
+"\n"
+"apt-sortpkgs — простой инструмент для сортировки файлов с информацией\n"
+"о пакетах. По умолчанию он сортирует информацию о двоичных пакетах,\n"
+"но можно указать параметр -s, и будет выполняться сортировка пакетов\n"
+"с исходным кодом.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Использование: apt [параметры] команда\n"
+"\n"
+"apt — менеджер пакетов с интерфейсом командной строки. Он предоставляет\n"
+"команды для поиска и управления, а также запросов информации о пакетах.\n"
+"apt выполняет те же задачи, что и специализированные инструменты APT,\n"
+"например apt-get и apt-cache, но по умолчанию задействует параметры,\n"
+"которые больше подходят для интерактивного использования.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "показать список пакетов на основе указанных имён"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "искать в описаниях пакетов"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "показать дополнительные данные о пакете"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "установить пакеты"
+
+#: cmdline/apt.cc
+msgid "reinstall packages"
+msgstr "переустановить пакеты"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "удалить пакеты"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "обновить список доступных пакетов"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "обновить систему, устанавливая/обновляя пакеты"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "обновить систему, удаляя/устанавливая/обновляя пакеты"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "редактировать файл с источниками пакетов"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Неправильное значение по умолчанию!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Для продолжения нажмите [Enter]."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Удалить все ранее скачанные .deb файлы?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Во время распаковки возникли ошибки. Пакеты, которые были установлены,"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+"будут настроены. Это может привести к повторению ошибок или возникновению"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"новых из-за неудовлетворённых зависимостей. Это нормально, важны только"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"ошибки выше данного сообщения. Исправьте их и выполните установку ещё раз"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Объединение доступной информации"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Список расширений пакетов слишком длинный"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Ошибка обработки каталога %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Список расширений пакетов с исходным кодом слишком длинный"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr ""
+"Ошибка записи заголовка в полный перечень содержимого пакетов (Contents)"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Ошибка обработки полного перечня содержимого пакетов (Contents) %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Использование: apt-ftparchive [параметры] команда\n"
+"Команды: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive создаёт индексные файлы архивов Debian. Он поддерживает\n"
+"множество стилей создания: от полностью автоматического до функциональной\n"
+"замены программ dpkg-scanpackages и dpkg-scansources\n"
+"\n"
+"apt-ftparchive создаёт файлы Package (списки пакетов) для дерева каталогов,\n"
+"содержащих файлы .deb. Файл Package включает в себя управляющие поля "
+"каждого\n"
+"пакета, а также хеш MD5 и размер файла. Значения управляющих полей "
+"«приоритет»\n"
+"(Priority) и «секция» (Section) могут быть изменены с помощью файла "
+"override.\n"
+"\n"
+"Кроме того, apt-ftparchive может создавать файлы Sources из дерева "
+"каталогов,\n"
+"содержащих файлы .dsc. Для указания файла override в этом режиме необходимо\n"
+"использовать параметр --source-override.\n"
+"\n"
+"Команды «packages» и «sources» надо выполнять, находясь в корневом каталоге\n"
+"дерева, которое вы хотите обработать. BinaryPath должен указывать на место,\n"
+"с которого начинается рекурсивный обход, а файл переназначений (override)\n"
+"должен содержать записи о переназначениях управляющих полей. Если был "
+"указан\n"
+"Pathprefix, то его значение добавляется к управляющим полям, содержащим\n"
+"имена файлов. Пример использования для архива Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Параметры:\n"
+" -h этот текст\n"
+" --md5 управление созданием MD5-хешей\n"
+" -s=? указать файл переназначений (override) для файла Sources\n"
+" -q не выводить сообщения в процессе работы\n"
+" -d=? указать кэширующую базу данных (необязательно)\n"
+" --no-delink включить режим отладки процесса DeLink\n"
+" --contents управление созданием полного перечня содержимого пакетов\n"
+" (файла Contents)\n"
+" -c=? использовать указанный файл настройки\n"
+" -o=? задать значение произвольному параметру настройки"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Совпадений не обнаружено"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "В группе пакетов «%s» отсутствуют некоторые файлы"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "База данных повреждена, файл переименован в %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "База данных устарела, попытка обновить %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Некорректный формат базы данных. Если вы обновляли версию apt, то удалите и "
+"создайте базу данных заново."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Невозможно открыть файл базы данных %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Не удалось прочесть .dsc"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "В архиве нет поля control"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Невозможно получить курсор"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc — не удалось выделить память"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Неизвестный алгоритм сжатия «%s»"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr ""
+"Для получения сжатого вывода %s необходимо указать набор алгоритмов сжатия"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Не удалось создать IPC-канал для порождённого процесса"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Не удалось запустить порождённый процесс"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Процесс-потомок, производящий сжатие"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Внутренняя ошибка: не удалось создать %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Ошибка ввода/вывода в подпроцесс/файл"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Ошибка чтения во время вычисления MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Невозможно открыть %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Неправильная запись о переназначении (override) %s в строке %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Не удалось прочесть файл переназначений (override) %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Неправильная запись о переназначении (override) %s в строке %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Неправильная запись о переназначении (override) %s в строке %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Неправильная запись о переназначении (override) %s в строке %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Невозможно прочитать каталог %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Невозможно прочитать атрибуты %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Ошибки относятся к файлу "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Не удалось привести %s к каноническому виду"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Не удалось совершить обход дерева"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Не удалось открыть %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Не удалось создать ссылку %2$s на %1$s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Превышено ограничение в %sB для DeLink.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "В архиве нет поля package"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " Нет записи о переназначении (override) для %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " Пакет %s сопровождает %s, а не %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr ""
+" Нет записи о переназначении пакетов с исходным кодом (source override) для "
+"%s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr ""
+" Также нет записи о переназначении двоичных пакетов (binary override) для "
+"%s\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Ожидание заголовков"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP-сервер послал неверный заголовок"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Неверная строка заголовка"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP-сервер послал неверный заголовок Content-Length"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP-сервер послал неверный заголовок Content-Range"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr ""
+"Поддержка байтовых диапазонов в данном HTTP-сервере реализована некорректно"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Неизвестный формат даты"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Неверные данные заголовка"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Соединение разорвано"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+"Файл имеет неожиданный размер (%llu != %llu). Возможно, выполняется "
+"синхронизация зеркала?"
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"Автоматическое отключение %s из-за некорректного ответа сервера/прокси. (man "
+"5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Внутренняя ошибка"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Невозможно прочесть базу данных CD-ROM %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Используйте apt-cdrom, чтобы APT смог распознать данный CD-ROM. apt-get "
+"update не используется для добавления новых CD-ROM"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Неверный CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Не удалось размонтировать CD-ROM в %s; возможно, он ещё используется."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Диск не найден."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Файл не найден"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "Прямое подключение к домену %s по умолчанию заблокировано."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr "Соединено с %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Соединение с %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Не удалось создать сокет для %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Невозможно инициализировать соединение с %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Неудачно"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Не удалось соединиться с %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr ""
+"Не удалось соединиться с %s:%s (%s): время ожидания для соединения истекло"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Соединение с %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Не удалось разрешить «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Временная ошибка при разрешении «%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Системная ошибка при разрешении «%s:%s»"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Что-то странное произошло при разрешении «%s:%s» (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Невозможно соединиться с %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Не удалось получить атрибуты"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Неправильный URI: локальный URI не должен начинаться с //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Вход в систему"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Невозможно определить имя удалённого узла"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Невозможно определить локальное имя"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Сервер разорвал соединение и сообщил: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Команда USER не выполнена, сервер сообщил: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Команда PASS не выполнена, сервер сообщил: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Прокси-сервер указан, однако нет сценария входа в систему: Acquire::ftp::"
+"ProxyLogin пуст."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr ""
+"Команда «%s» сценария входа в систему завершилась неудачно, сервер сообщил: "
+"%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Команда TYPE не выполнена, сервер сообщил: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Допустимое время ожидания для соединения истекло"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Сервер прервал соединение"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Ответ переполнил буфер."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Искажение протокола"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Не удалось создать сокет"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr ""
+"Не удалось присоединить сокет данных: время ожидания для соединения истекло"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Не удалось присоединить пассивный сокет"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "Вызов getaddrinfo не смог получить сокет"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Не удалось привязать сокет"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Не удалось принимать соединения на сокете"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Не удалось определить имя сокета"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Невозможно послать команду PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Неизвестное семейство адресов %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Команда EPRT не выполнена, сервер сообщил: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Время на установление соединения для сокета данных истекло"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Невозможно принять соединение"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Проблема при хешировании файла"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Невозможно получить файл, сервер сообщил: «%s»"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Время ожидания для сокета данных истекло"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Передача данных завершилась неудачно, сервер сообщил: «%s»"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Запрос"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Невозможно вызвать "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Некорректный подписанный файл: получено «%s» (возможно, в сети требуется "
+"аутентификация?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Найдена как минимум одна неправильная подпись."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Внутренняя ошибка: правильная подпись, но не удалось определить отпечаток "
+"ключа?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Не удалось выполнить «apt-key» для проверки подписи (программа gnupg "
+"установлена?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Неизвестная ошибка при выполнении apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "При подписи ключом %s используется нестойкий алгоритм свёртки (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Следующие подписи неверны:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Следующие подписи не могут быть проверены, так как недоступен открытый "
+"ключ:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Ошибка записи в файл"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Ошибка чтения: удалённый сервер прервал соединение"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Ошибка чтения с сервера"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Ошибка записи в файл"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Ошибка в select"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Время ожидания для соединения истекло"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Ошибка записи в выходной файл"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Не удалось установить время модификации"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Соединение закрыто преждевременно"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Пустые файлы не могут быть допустимыми архивами"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Неправильный заголовок элемента архива %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Удалён %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Список пакетов %s рассинхронизирован."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr "Некорректный перечень пакетов. Нет поля Filename: для пакета %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Файл «%s» не найден на зеркале"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Невозможно прочитать файл на зеркале «%s»"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Не найден элемент в файл на зеркале «%s»"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Зеркало: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Открытие файла настройки %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Открытие %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Невозможно найти ожидаемый элемент «%s» в файле Release (некорректная "
+#~ "запись в sources.list или файл)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr ""
+#~ "Неудовлетворённые зависимости. Попытайтесь использовать --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Возможно, для исправления этих ошибок вы захотите воспользоваться «apt-"
+#~ "get -f install»:"
+
+#~ msgid "(not found)"
+#~ msgstr "(не найдено)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Фиксатор пакета: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Недоступен открытый ключ для следующих ID ключей:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Каталог %s входит в список diverted"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Зависимость типа %s для %s не может быть удовлетворена, так как %s не "
+#~ "разрешён для пакетов «%s»"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Зависимость типа %s для %s не может быть удовлетворена, так как пакет %s "
+#~ "не найден"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Не удалось удовлетворить зависимость типа %s для пакета %s: Установленный "
+#~ "пакет %s новее, чем надо"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Зависимость типа %s для %s не может быть удовлетворена, так как версия-"
+#~ "кандидат пакета %s не может удовлетворить требованиям по версии"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "Зависимость типа %s для %s не может быть удовлетворена, так как пакет %s "
+#~ "не имеет версии-кандидата"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Невозможно удовлетворить зависимость типа %s для пакета %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Зависимости для сборки %s не могут быть удовлетворены."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Не удалось удалить %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Не удалось удалить %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Использование: apt-cache [параметры] команда\n"
+#~ " или: apt-cache [параметры] show пакет1 [пакет2…]\n"
+#~ "\n"
+#~ "apt-cache — низкоуровневый инструмент для поиска\n"
+#~ "информации в двоичных кэш-файлах APT\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Команды:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Параметры:\n"
+#~ " -h Эта справка.\n"
+#~ " -p=? Кэш пакетов.\n"
+#~ " -s=? Кэш источников.\n"
+#~ " -q Не показывать индикатор хода выполнения.\n"
+#~ " -i Показывать только важные зависимости для команды unmet.\n"
+#~ " -c=? Читать указанный файл настройки.\n"
+#~ " -o=? Задать значение произвольной настройки, например, -o dir::cache=/"
+#~ "tmp\n"
+#~ "Подробности в справочных страницах apt-cache(8) и apt.conf(5).\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Использование: apt [параметры] команда\n"
+#~ "\n"
+#~ "Интерфейс командной строки для apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Параметры:\n"
+#~ " -h эта справка\n"
+#~ " -q показывать сообщения о работе, не выводить индикатор хода работы\n"
+#~ " -qq показывать только сообщения об ошибках\n"
+#~ " -s не выполнять действия на самом деле, только имитация работы\n"
+#~ " -f читать/писать данные о пометках в заданный файл\n"
+#~ " -c=? читать указанный файл настройки\n"
+#~ " -o=? задать значение произвольному параметру настройки,\n"
+#~ " например, -o dir::cache=/tmp\n"
+#~ "В справочных страницах apt-mark(8) и apt.conf(5)\n"
+#~ "содержится дополнительная информация."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Параметры:\n"
+#~ " -h Этот текст.\n"
+#~ " -с=? Читать указанный файл настройки.\n"
+#~ " -o=? Задать значение произвольной настройке, например, -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Параметры:\n"
+#~ " -h эта справка\n"
+#~ " -q показывать сообщения о работе, не выводить индикатор хода работы\n"
+#~ " -qq показывать только сообщения об ошибках\n"
+#~ " -s не выполнять действия на самом деле, только имитация работы\n"
+#~ " -f читать/писать данные о пометках в заданный файл\n"
+#~ " -c=? читать указанный файл настройки\n"
+#~ " -o=? задать значение произвольному параметру настройки,\n"
+#~ " например, -o dir::cache=/tmp\n"
+#~ "В справочных страницах apt-mark(8) и apt.conf(5)\n"
+#~ "содержится дополнительная информация."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Использование: apt-sortpkgs [параметры] файл1 [файл2…]\n"
+#~ "\n"
+#~ "apt-sortpkgs — простой инструмент для сортировки списков пакетов. "
+#~ "Параметр -s\n"
+#~ "используется для указания типа списка.\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -h этот текст\n"
+#~ " -s сортировать список файлов пакетов исходного кода\n"
+#~ " -c=? читать указанный файл настройки\n"
+#~ " -o=? Задать значение произвольной настройке, например, -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Порождённый процесс завершился неудачно"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Укажите, как минимум, одну пару url/имя файла"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Не удалось создать каналы"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Не удалось выполнить gzip "
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Всего информации о зависимостях: "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s для %s скомпилирован %s %s\n"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Недостаточно места в %s"
+
+#~ msgid "Done"
+#~ msgstr "Готово"
+
+#~ msgid "Hit "
+#~ msgstr "В кэше "
+
+#~ msgid "Get:"
+#~ msgstr "Получено:"
+
+#~ msgid "Ign "
+#~ msgstr "Игн "
+
+#~ msgid "Err "
+#~ msgstr "Ош "
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Невозможно найти хеш-сумму «%s» в файле Release"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Во время обработки файла зависимостей не найден пакет %s %s"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Не удалось получить атрибуты списка пакетов исходного кода %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Сбор информации о Provides"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Блок поставщика %s не содержит отпечатка (fingerprint)"
+
+#~ msgid "Unable to parse package file %s (2)"
+#~ msgstr "Невозможно разобрать содержимое пакета %s (2)"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Искажённая строфа %u в списке источников %s (анализ URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Искажённая строка %lu в списке источников %s ([параметр] неразбираем)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Искажённая строка %lu в списке источников %s ([параметр] слишком короткий)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Искажённая строка %lu в списке источников %s (([%s] не назначаем)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Искажённая строка %lu в списке источников %s ([%s] не имеет ключа)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Искажённая строка %lu в списке источников %s (([%s] ключ %s не имеет "
+#~ "значения)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Искажённая строка %lu в списке источников %s (проблема в URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr ""
+#~ "Искажённая строка %lu в списке источников %s (проблема в имени "
+#~ "дистрибутива)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Искажённая строка %lu в списке источников %s (анализ URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Искажённая строка %lu в списке источников %s (absolute dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Искажённая строка %lu в списке источников %s (dist parse)"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Связка ключей в %s не установлена."
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Не удалось создать FILE*"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Внутренняя ошибка, AllUpgrade всё поломал"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s не является правильным DEB-пакетом."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "В качестве точки монтирования CD-ROM используется %s\n"
+#~ "Монтируется CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Не удалось наложить заплату %s с использованием mmap и файловой операции "
+#~ "— вероятно, повреждена заплата."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Не удалось наложить заплату %s с использованием mmap (но не из-за mmap) — "
+#~ "вероятно, повреждена заплата."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Игнорируется недоступный выпуск «%s» пакета «%s»"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Выполняется загрузка %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Это неправильный DEB-архив — отсутствует составная часть «%s», «%s» или "
+#~ "«%s»"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum не совпадает"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Не удалось обнаружить файл пакета %s. Это может означать, что вам "
+#~ "придётся вручную исправить этот пакет."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Не удалось записать в журнал, неудачное выполнение openpty() (/dev/pts не "
+#~ "смонтирован?)\n"
+
+#~ msgid "File %s doesn't start with a clearsigned message"
+#~ msgstr "Файл %s не начинается с прозрачно подписанного сообщения"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Пропускается несуществующий файл %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Не удалось удалить %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Не удалось создать %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Не удалось получить атрибуты %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Каталоги info и temp должны находиться на одной файловой системе"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr ""
+#~ "Не удалось сменить текущий каталог на административный каталог %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Внутренняя ошибка при получении имени пакета"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Чтение списков файлов в пакете"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Не удалось открыть список файлов «%sinfo/%s». Если вы не сможете "
+#~ "восстановить этот файл, то обнулите его и немедленно переустановите ту же "
+#~ "версию пакета!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Ошибка чтения списка файлов %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Внутренняя ошибка при получении node"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Не удалось открыть файл diversions %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Файл diversions повреждён"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Неверная строка в файле diversions: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Внутренняя ошибка при добавлении diversion"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "В первую очередь должен быть инициализирован кэш пакетов"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Не удалось найти заголовок Package:, смещение %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Неверная секция ConfFile в status-файле. Смещение %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Ошибка чтения контрольной суммы. Смещение %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Не удалось перейти в каталог %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Не удалось найти правильный control-файл"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Не удалось открыть канал для %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Ошибка чтения из процесса %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Получен заголовок длиннее %u символов"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Замечание: это сделано автоматически и специально программой dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Неправильная запись о переназначении (override) %s на строке %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Неправильная запись о переназначении (override) %s на строке %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Неправильная запись о переназначении (override) %s на строке %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "декомпрессор"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr ""
+#~ "ошибка при чтении. собирались прочесть ещё %lu байт, но ничего больше нет"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "ошибка при записи, собирались записать ещё %lu байт, но не смогли"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Не удалось выполнить оперативную настройку уже распакованного «%s». "
+#~ "Подробней, смотрите в man 5 apt.conf о APT::Immediate-Configure."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Произошла ошибка во время обработки %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Произошла ошибка во время обработки %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Произошла ошибка во время обработки %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Произошла ошибка во время обработки %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Произошла ошибка во время обработки %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Произошла ошибка во время обработки %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Произошла ошибка во время обработки %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Произошла ошибка во время обработки %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Произошла ошибка во время обработки %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Произошла ошибка во время обработки %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Внутренняя ошибка, не удалось найти составную часть"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Внутренняя ошибка, группа %s не устанавливается псевдо-пакетом"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr ""
+#~ "Файл Release просрочен, игнорируется %s (недостоверный начиная с %s)"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Слишком большой список параметров у Acquire::gpgv::Options. Завершение "
+#~ "работы."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Произошла ошибка во время обработки %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Искажённая строка %u в списке источников %s (vendor id)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Нет доступа к связке (keyring) ключей: '%s'"
+
+#, fuzzy
+#~| msgid "Could not open file %s"
+#~ msgid "Could not patch file"
+#~ msgstr "Не удалось открыть файл %s"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..6fce776
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,4376 @@
+# Slovak translation of APT
+#
+# initial sk.po made from Czech translation (cs.po)
+# thanks to Miroslav Kure <kurem@debian.cz>
+#
+# Peter Mann <Peter.Mann@tuke.sk>, 2006.
+# Ivan Masár <helix84@centrum.sk>, 2008, 2009, 2010, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2012-06-28 20:49+0100\n"
+"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Neplatný podpis archívu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Chyba pri čítaní záhlavia prvku archívu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Neplatné záhlavie prvku archívu"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Archív je príliš krátky"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Chyba pri čítaní hlavičiek archívu"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Nebolo možné nájsť autentifikačný záznam pre: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Porušený archív"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Kontrolný súčet pre tar zlyhal, archív je poškodený"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Neznáma TAR hlavička typu %u, člen %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Toto nie je platný DEB archív, chýba časť „%s“"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Vnútorná chyba, nedá sa nájsť časť %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Nespracovateľný riadiaci súbor"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Zápis súboru %s zlyhal"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Zatvorenie súboru %s zlyhalo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Cesta %s je príliš dlhá"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s sa rozbaľuje viackrát"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Adresár %s je divertovaný"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Balík sa pokúša zapisovať do diverzného cieľa %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Diverzná cesta je príliš dlhá"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s sa nedá vyhodnotiť"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Premenovanie %s na %s zlyhalo"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Adresár %s sa nahradí neadresárom"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Nedá sa nájsť uzol na adrese jeho hašu"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Cesta je príliš dlhá"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Prepísať zodpovedajúci balík bez udania verzie pre %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Súbor %s/%s prepisuje ten z balíka %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Nedá sa načítať %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Nedá sa vyhodnotiť %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Pokus o uvoľnenie uzla (DropNode) na stále prepojenom uzle"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Hašovací prvok sa nedá nájsť!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Nedá sa alokovať diverzia"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Vnútorná chyba pri AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Pokus o prepísanie diverzie, %s -> %s a %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dvojité pridanie diverzie %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Duplicitný konfiguračný súbor %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Adresár %s je divertovaný"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Adresár %s je divertovaný"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Adresár %s je divertovaný"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Adresár %s je divertovaný"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Adresár %s je divertovaný"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Nie je možné vykonať readlink %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Nezhoda kontrolných haš súčtov"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "premenovanie zlyhalo, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Veľkosti sa nezhodujú"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Neplatná operácia %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Chyba pri zápise"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Počas overovania podpisu sa vyskytla chyba. Repozitár nie je aktualizovaný a "
+"použijú sa predošlé indexové súbory. Chyba GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Chyba GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Súbor Release pre %s vypršal (neplatný od %s). Aktualizácie tohto zdroja "
+"softvéru sa nepoužijú."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Súbor Release pre %s vypršal (neplatný od %s). Aktualizácie tohto zdroja "
+"softvéru sa nepoužijú."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "V konflikte s distribúciou: %s (očakávalo sa %s ale dostali sme %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Zlyhalo stiahnutie %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Nedá sa nájsť súbor s balíkom %s. To by mohlo znamenať, že tento balík je "
+"potrebné opraviť manuálne (kvôli chýbajúcej architektúre)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Nie je možné nájsť zdroj na stiahnutie verzie „%s“ balíka „%s“"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Záznam zmien %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Nedá sa nájsť ovládač spôsobu %s."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Skontrolujte, či je nainštalovaný balík „dpkg-dev“.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Spôsob %s nebol správne spustený"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Vložte disk nazvaný „%s“ do mechaniky „%s“ a stlačte Enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Adresár zoznamov %s chýba."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Archívny adresár %s chýba."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Adresár %s sa nedá zamknúť"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Indexový súbor typu „%s“ nie je podporovaný"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Sťahuje sa %li. súbor z %li (zostáva %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Sťahuje sa %li. súbor z %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "Je nutné preinštalovať balík %s, ale nedá sa nájsť jeho archív."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Chyba, pkgProblemResolver::Resolve vytvára poruchy, čo môže být spôsobené "
+"pridržanými balíkmi."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Problémy sa nedajú opraviť, niektoré balíky držíte v poškodenom stave."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Zoznamy balíkov alebo stavový súbor sa nedajú spracovať alebo otvoriť."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Na opravu týchto problémov môžete skúsiť spustiť apt-get update"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Nedá sa načítať zoznam zdrojov."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Chyba pri preklade regulárneho výrazu - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Nebolo nájdené vydanie „%s“ pre „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Nebola nájdená verzia „%s“ pre „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Nebolo možné nájsť úlohu „%s“"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Nebol nájdený žiaden balík zodpovedajúci regulárnemu výrazu „%s“"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Nebol nájdený žiaden balík zodpovedajúci regulárnemu výrazu „%s“"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Nedá sa nájsť balík %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Nie je možné vybrať verzie z balíka „%s“, pretože je čisto virtuálny"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Nie je možné vybrať najnovšiu verziu z balíka „%s“, pretože je čisto "
+"virtuálny"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Nie je možné vybrať kandidátsku verziu z balíka „%s“, pretože nemá kandidáta"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Nie je možné vybrať nainštalovanú verziu z balíka „%s“, pretože nie je "
+"nainštalovaný"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Nie je možné vybrať nainštalované ani kandidátske verzie z balíka „%s“, "
+"pretože nemá žiadnu z nich"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Riadok %u v zozname zdrojov %s je príliš dlhý."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "CD-ROM sa odpája...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Použije sa prípojný bod CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Čaká sa na disk...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Pripája sa CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identifikuje sa..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Uložená menovka: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Na disku sa hľadajú indexové súbory...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Nájdených %zu indexov balíkov, %zu indexov zdrojových balíkov, %zu indexov "
+"prekladov a %zu signatúr\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Nepodarilo sa nájsť žiadne súbory balíkov, možno toto nie je disk s Debianom "
+"alebo je pre nesprávnu architektúru?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Nájdená menovka: „%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Neplatný názov, skúste znova.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Názov tohto disku je: \n"
+"„%s“\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopírujú sa zoznamy balíkov..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Zapisuje sa nový zoznam zdrojov\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Položky zoznamu zdrojov pre tento disk sú:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Nedá sa prejsť do %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Nie je možné vykonať stat %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Prípojný bod %s sa nedá vyhodnotiť"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Nedá sa vykonať stat() CD-ROM"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Parameter príkazového riadka „%c“ [z %s] je neznámy"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Nezrozumiteľný parameter %s na príkazovom riadku"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Parameter príkazového riadku %s nie je pravdivostná hodnota"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Voľba %s vyžaduje argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Parameter %s: Zadanie konfiguračnej položky musí obsahovať =<hodn>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Voľba %s vyžaduje ako argument celé číslo (integer), nie „%s“"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Voľba „%s“ je príliš dlhá"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Nezrozumiteľný význam %s, skúste true alebo false. "
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Neplatná operácia %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Nerozpoznaná skratka typu: „%c“"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaktická chyba %s:%u: Blok začína bez názvu."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaktická chyba %s:%u: Skomolená značka"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaktická chyba %s:%u: Za hodnotou nasledujú chybné údaje"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Syntaktická chyba %s:%u: Direktívy sa dajú vykonať len na najvyššej úrovni"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaktická chyba %s:%u: Príliš mnoho vnorených prepojení (include)"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaktická chyba %s:%u: Zahrnuté odtiaľ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaktická chyba %s:%u: Nepodporovaná direktíva „%s“"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Syntaktická chyba %s:%u: direktíva clear vyžaduje ako argument strom volieb"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaktická chyba %s:%u: Na konci súboru sú chybné údaje"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problém pri odstraňovaní súboru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Zamykanie pre súbor zámku %s, ktorý je iba na čítanie, sa nepoužíva"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Súbor zámku %s sa nedá otvoriť"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Zamykanie pre súbor zámku %s pripojený cez NFS sa nepoužíva"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Zámok %s sa nedá získať"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Zoznam súborov nemožno vytvoriť, pretože „%s“ nie je adresár"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Ignoruje sa „%s“ v adresári „%s“, pretože to nie je obyčajný súbor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "Ignoruje sa „%s“ v adresári „%s“, pretože nemá príponu názvu súboru"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Ignoruje sa „%s“ v adresári „%s“, pretože má neplatnú príponu názvu súboru"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Čakalo sa na %s, ale nebolo to tam"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Podproces %s obdržal chybu segmentácie."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Podproces %s dostal signál %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Podproces %s vrátil chybový kód (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Podproces %s neočakávane skončil"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Chyba pri čítaní"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Chyba pri zápise"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problém pri zatváraní gzip súboru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Nedá sa vytvoriť podproces IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Nepodarilo sa spustiť kompresor "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Nedá sa otvoriť súbor %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Nedá sa otvoriť popisovač súboru %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "čítanie, treba prečítať ešte %llu, ale už nič neostáva"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "zápis, treba zapísať ešte %llu, no nedá sa to"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problém pri zatváraní súboru %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problém pri synchronizovaní súboru %s na %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problém pri synchronizovaní súboru"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Nedá sa vyhodnotiť %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Do %s sa nedá zapisovať"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Nedá sa vykonať mmap prázdneho súboru"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Nedá sa urobiť mmap %llu bajtov"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Nedá sa duplikovať popisovač súboru %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Nedá sa zatvoriť mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Nedá sa synchronizovať mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Nedá sa urobiť mmap %lu bajtov"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Nepodarilo sa skrátiť súbor"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Nedostatok miesta pre dynamický MMap. Prosím, zväčšite veľkosť APT::Cache-"
+"Start. Aktuálna hodnota: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Napodarilo sa zväčšiť veľkosť MMap, pretože limit %lu už bol dosiahnutý."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Napodarilo sa zväčšiť veľkosť MMap, pretože automatické zväčovanie vypol "
+"používateľ."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Chyba!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Hotovo"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Hotovo"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%li d %li h %li min %li s"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%li h %li min %li s"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%li min %li s"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%li s"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Voľba %s nenájdená"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Nedá spracovať súbor Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Žiadne sekcie v Release súbore %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Chýba položka „Hash“ v súbore Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Chýba položka „%s“ v súbore Release %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Súbor %s sa nedá spracovať (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr "Nedá sa zamknúť adresár na správu (%s), používa ho iný proces?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Nedá sa zamknúť adresár na správu (%s), ste root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr "dpkg bol prerušený, musíte ručne opraviť problém spustením „%s“. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr "Nedá sa zamknúť adresár na správu (%s), používa ho iný proces?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Nedá sa zamknúť adresár na správu (%s), ste root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Nie je zamknuté"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Pripravuje sa %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Pripravuje sa nastavenie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Pripravuje sa odstránenie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Pripravuje sa úplné odstránenie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Zaznamenali sme zmiznutie %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Vykonáva sa spúšťač post-installation %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Nainštalovaný balík %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Nastavuje sa %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Adresár „%s“ chýba"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Nedá sa otvoriť súbor „%s“"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Rozbaľuje sa %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Inštaluje sa %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Odstraňuje sa %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Úplne sa odstraňuje %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Balík „%s“ je úplne odstránený"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Do %s sa nedá zapisovať"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Operácia bola prerušená predtým, než sa stihla dokončiť"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Nezapíše sa správa apport, pretože už bol dosiahnutý limit MaxReports"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "problém so závislosťami - ponecháva sa nenakonfigurované"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Nezapíše sa správa apport, pretože chybová správa indikuje, že je to chyba v "
+"nadväznosti na predošlé zlyhanie."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Nezapíše sa správa apport, pretože chybová správa indikuje, že je disk "
+"zaplnený"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Nezapíše sa správa apport, pretože chybová správa indikuje chybu nedostatku "
+"pamäte"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Nezapíše sa správa apport, pretože chybová správa indikuje, že je disk "
+"zaplnený"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Nezapíše sa správa apport, pretože chybová správa indikuje V/V chybu dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Vytvára sa strom závislostí"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Kandidátske verzie"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Generovanie závislostí"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Načítavajú sa stavové informácie"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Nie je možné otvoriť StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Nie je možné zapísať dočasný StateFile %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Poslať scénár riešiteľovi"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Poslať požiadavku riešiteľovi"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Pripraviť sa na prijatie riešenia"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Externý riešiteľ zlyhal bez uvedenia chybovej správy"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Spustiť externého riešiteľa"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Spustiť externého riešiteľa"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Poslať požiadavku riešiteľovi"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Poslať scénár riešiteľovi"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "Externý riešiteľ zlyhal bez uvedenia chybovej správy"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Zapísaných %i záznamov.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Zapísaných %i záznamov s %i chýbajúcimi súbormi.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Zapísaných %i záznamov s %i chybnými súbormi\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Zapísaných %i záznamov s %i chýbajúcimi a %i chybnými súbormi\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Nebolo možné nájsť autentifikačný záznam pre: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Nezhoda kontrolných haš súčtov: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Systém balíkov „%s“ nie je podporovaný"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Nedá sa určiť vhodný typ systému balíkov"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Spúšťa sa dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Nebolo možné vykonať okamžitú konfiguráciu „%s“. Pozri prosím podrobnosti v "
+"man 5 apt.conf pod APT::Immediate-Configure (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Nedá sa nakonfigurovať „%s“."
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Tento beh inštalácie si vyžiada dočasné odstránenie kľúčového balíka %s "
+"kvôli slučke v Conflicts/Pre-Depends. Často je to nevhodné, ale ak to chcete "
+"naozaj urobiť, aktivujte možnosť APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Vyrovnávacia pamäť balíkov je prázdna"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Súbor vyrovnávacej pamäti balíkov je poškodený"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Súbor vyrovnávacej pamäti balíkov je nezlučiteľnej verzie"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Tento APT nepodporuje systém na správu verzií „%s“"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Súbor vyrovnávacej pamäti balíkov bol vytvorený pre inú architektúru"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Súbor vyrovnávacej pamäti balíkov je poškodený, je príliš malý"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Závisí na"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Predzávisí na"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Navrhuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Koliduje s"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Odporúča"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Nahrádza"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Kazí"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Rozširuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Zneplatňuje"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "dôležitý"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "požadovaný"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "štandardný"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "voliteľný"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Vyrovnávacia pamäť má nezlučiteľný systém na správu verzií"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Vyskytla sa chyba pri spracovávaní %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Fíha, prekročili ste počet názvov balíkov, ktoré toto APT zvládne spracovať."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Fíha, prekročili ste počet verzií, ktoré toto APT zvládne spracovať."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Fíha, prekročili ste počet popisov, ktoré toto APT zvládne spracovať."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr ""
+"Fíha, prekročili ste počet závislostí, ktoré toto APT zvládne spracovať."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Načítavajú sa zoznamy balíkov"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "V/V chyba pri ukladaní zdrojovej vyrovnávacej pamäti"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Indexový súbor typu „%s“ nie je podporovaný"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"„%s“ nie je platná hodnota pre APT::Default-Release, pretože také vydanie "
+"nie je dostupné v zdrojoch"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Neplatný záznam v súbore nastavení %s, chýba hlavička Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Nezrozumiteľné pridržanie typu %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Nebola zadaná žiadna (alebo nulová) priorita na pridržanie"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Skomolený „override“ %s riadok %llu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Skomolený riadok %u v zozname zdrojov %s (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typ „%s“ je neznámy na riadku %u v zozname zdrojov %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Skomolený riadok %u v zozname zdrojov %s (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typ „%s“ je neznámy na riadku %u v zozname zdrojov %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Do sources.list musíte zadať nejaký „source“ (zdrojový) URI"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Niektoré indexové súbory sa nepodarilo stiahnuť. Boli ignorované alebo sa "
+"použili staršie verzie."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Prepočítava sa aktualizácia"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Už existuje:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Získava sa:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr ""
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Chyba:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%sB sa stiahlo za %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Prebieha spracovanie]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Výmena nosiča: Vložte disk s názvom\n"
+" „%s“\n"
+"do mechaniky „%s“ a stlačte Enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Opravujú sa závislosti..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " zlyhalo."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Závislosti sa nedajú opraviť"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Sada na aktualizáciu sa nedá minimalizovať"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Hotovo"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Možno to budete chcieť napraviť spustením „apt --fix-broken install“."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Nesplnené závislosti. Skúste spustiť „apt --fix-broken install“ bez balíkov "
+"(alebo navrhnite riešenie)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Poznámka: vyberá sa „%s“ pre úlohu „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Poznámka: vyberá sa „%s“ pre regulárny výraz „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Poznámka: vyberá sa „%s“ pre regulárny výraz „%s“\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Balík %s je virtuálny balík poskytovaný balíkmi:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Nainštalovaný]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Nie je kandidátska verzia]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Mali by ste explicitne vybrať jeden na inštaláciu."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Balík %s nie je dostupný, ale odkazuje naň iný balík. Možno to znamená,\n"
+"že balík chýba, bol zrušený alebo je dostupný iba z iného zdroja\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Avšak nahrádzajú ho nasledovné balíky:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Balík „%s“ nemá kandidáta na inštaláciu"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Virtuálne balíky ako „%s“ nemožno odstrániť\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Balík „%s“ nie je nainštalovaný, nedá sa teda odstrániť. Mali ste na mysli "
+"„%s“?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Balík „%s“ nie je nainštalovaný, nedá sa teda odstrániť\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Poznámka: „%s“ sa vyberá namiesto „%s“\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Tento APT má schopnosti posvätnej kravy."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Neboli nájdené žiadne balíky"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "UPOZORNENIE: Pri nasledovných balíkoch sa nedá overiť vierohodnosť!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Upozornenie o vierohodnosti bolo potlačené.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Nedala sa zistiť vierohodnosť niektorých balíkov"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Nainštalovať tieto nekontrolované balíky?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Nastali problémy a -y bolo použité bez --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Na %s sa nedá zistiť veľkosť voľného miesta"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Na %s nemáte dostatok voľného miesta."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Adresár pre sťahovanie sa nedá zamknúť"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Niektoré balíky sa nedajú nainštalovať. To môže znamenať, že požadujete\n"
+"nemožnú situáciu, alebo ak používate nestabilnú distribúciu, že\n"
+"požadované balíky ešte neboli vytvorené alebo presunuté z fronty\n"
+"Novoprichádzajúcich (Incoming) balíkov."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Nasledovné informácie vám možno pomôžu vyriešiť túto situáciu:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Poškodené balíky"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Niektoré archívy sa nedajú stiahnuť. Skúste spustiť apt-get update alebo --"
+"fix-missing"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Vnútorná chyba, InstallPackages bolo volané s poškodenými balíkmi!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Je potrebné odstránenie balíka, ale funkcia Odstrániť je vypnutá."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Nastali problémy a -y bolo použité bez --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Nastali problémy a -y bolo použité bez --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Vnútorná chyba, Triedenie sa neukončilo"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Nezvyčajná udalosť... Veľkosti nesúhlasia, pošlite e-mail na apt@packages."
+"debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Je potrebné stiahnuť %sB/%sB archívov.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Je potrebné stiahnuť %sB archívov.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Po tejto operácii sa na disku použije ďalších %sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Po tejto operácii sa na disku uvoľní %sB.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Zadané „iba triviálne“, ale toto nie je triviálna operácia."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Áno, urob to, čo vravím!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Možno sa chystáte vykonať niečo škodlivé.\n"
+"Ak chcete pokračovať, opíšte frázu „%s“\n"
+" ?]"
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Prerušené."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Chcete pokračovať?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Niektoré súbory sa nedajú stiahnuť"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Sťahovanie ukončené v režime „iba stiahnuť“"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing a výmena nosiča nie sú momentálne podporované"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Chýbajúce balíky sa nedajú opraviť."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Inštalácia sa prerušuje."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Nasledovný balík zmizol z vášho systému, pretože\n"
+"všetky súbory boli prepísané inými balíkmi:"
+msgstr[1] ""
+"Nasledovné balíky zmizli z vášho systému, pretože\n"
+"všetky súbory boli prepísané inými balíkmi:"
+msgstr[2] ""
+"Nasledovné balíky zmizli z vášho systému, pretože\n"
+"všetky súbory boli prepísané inými balíkmi:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Pozn.: Toto robí dpkg automaticky a zámerne."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Nemajú sa odstraňovať veci, nespustí sa AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, zdá sa, že AutoRemover niečo zničil, čo sa naozaj nemalo stať.\n"
+"Prosím, pošlite hlásenie o chybe balíka apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Vnútorná chyba, AutoRemover niečo pokazil"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Nasledovný balík bol nainštalovaný automaticky a už viac nie je potrebný:"
+msgstr[1] ""
+"Nasledovné balíky boli nainštalované automaticky a už viac nie sú potrebné:"
+msgstr[2] ""
+"Nasledovné balíky boli nainštalované automaticky a už viac nie sú potrebné:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu balík bol nainštalovaný automaticky a už viac nie je potrebný.\n"
+msgstr[1] ""
+"%lu balíkov bolo nainštalovaných automaticky a už viac nie sú potrebné.\n"
+msgstr[2] ""
+"%lu balíkov bolo nainštalovaných automaticky a už viac nie sú potrebné.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Na jeho odstránenie použite „%s“."
+msgstr[1] "Na ich odstránenie použite „%s“."
+msgstr[2] "Na ich odstránenie použite „%s“."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Nainštalujú sa nasledovné extra balíky:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Navrhované balíky:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Odporúčané balíky:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Preskakuje sa %s, pretože je už nainštalovaný.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Preskakuje sa %s, nie je nainštalovaný a bola vy6iadan8 iba aktualizácia.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Nie je možná reinštalácia %s, pretože sa nedá stiahnuť.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s je už najnovšej verzie.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s je označený ako manuálne nainštalovaný.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Vybraná verzia „%s“ (%s) pre „%s“\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Vybraná verzia „%s“ (%s) pre „%s“ kvôli „%s“\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"POZN.: Toto je iba simulácia!\n"
+" %s potrebuje na skutočné spustenie práva používateľa root.\n"
+" Tiež pamätajte, že zamykanie je deaktivované, takže\n"
+" sa nespoliehajte na to že to bude platiť v reálnej situácii!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Nainštalovaný]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Nainštalovaný]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Nainštalovaný]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Nainštalovaný]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ale nainštalovaný je %s"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ale inštalovať sa bude %s"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ale sa nedá nainštalovať"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ale je to virtuálny balík"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ale sa nebude inštalovať"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ale nie je nainštalovaný"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " alebo"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Nasledovné balíky majú nesplnené závislosti:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Nainštalujú sa nasledovné NOVÉ balíky:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Nasledovné balíky sa ODSTRÁNIA:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Nasledovné balíky sa ponechajú v súčasnej verzii:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Nasledovné balíky sa aktualizujú:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Nasledovné balíky sa DEGRADUJÚ:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Nasledovné pridržané balíky sa zmenia:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (kvôli %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"UPOZORNENIE: Nasledovné dôležité balíky sa odstránia.\n"
+"Ak presne neviete, čo robíte, tak to NEROBTE!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu aktualizovaných, %lu nových nainštalovaných, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu reinštalovaných, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu degradovaných, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu na odstránenie a %lu neaktualizovaných.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu iba čiastočne nainštalovaných alebo odstránených.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Musíte zadať aspoň jeden vyhľadávací vzor"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Súbory balíka:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Vyrovnávacia pamäť je neaktuálna, nedá sa odvolať na súbor balíka"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pripevnené balíky:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Nainštalovaná verzia: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidát: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(žiadna)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Tabuľka verzií:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Nebol nájdený žiaden balík zodpovedajúci regulárnemu výrazu „%s“"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Nebol nájdený žiaden balík zodpovedajúci regulárnemu výrazu „%s“"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Nebol nájdený žiaden balík zodpovedajúci regulárnemu výrazu „%s“"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Vyberá sa „%s“ ako zdrojový balík namiesto „%s“\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Ignorovať nedostupnú verziu „%s“ balíka „%s“"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Musíte zadať aspoň jeden balík, pre ktorý sa stiahnu zdrojové texty"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Nedá sa nájsť zdrojový balík pre %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"POZN.: tvorba balíka „%s“ sa spravuje v sytéme na riadenie revízií „%s“ na "
+"adrese:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Prosím, použite:\n"
+"%s\n"
+"ak chcete získať najnovšie (a pravdepodobne zatiaľ nevydané) aktualizácie "
+"balíka.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Preskakuje sa už stiahnutý súbor „%s“\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Je potrebné stiahnuť %sB/%sB zdrojových archívov.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Je potrebné stiahnuť %sB zdrojových archívov.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Stiahnuť zdroj %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Zlyhalo stiahnutie niektorých archívov."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Preskakuje sa rozbalenie už rozbaleného zdroja v %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Príkaz na rozbalenie „%s“ zlyhal.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Skontrolujte, či je nainštalovaný balík „dpkg-dev“.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Príkaz na zostavenie „%s“ zlyhal.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Nedajú sa získať závislosti na zostavenie %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s nemá žiadne závislosti na zostavenie.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Informácie o architektúre nie sú dostupné pre %s. Informácie o nastavení "
+"nájdete v apt.conf(5) APT::Architectures"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Musíte zadať aspoň jeden balík, pre ktorý sa budú overovať závislosti na "
+"zostavenie"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Spracovanie závislostí na zostavenie zlyhalo"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Spracovanie závislostí na zostavenie zlyhalo"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Premenovanie %s na %s zlyhalo"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Balík %s verzie %s má nesplnené závislosti:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Príkaz update neprijíma žiadne argumenty"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Príkaz update neprijíma žiadne argumenty"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Celkom názvov balíkov: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Celkom štruktúr balíkov: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normálnych balíkov: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Čisto virtuálnych balíkov: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Jednoduchých virtuálnych balíkov: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Zmiešaných virtuálnych balíkov: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Chýbajúcich: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Celkom rôznych verzií: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Celkom rôznych popisov: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Celkom závislostí: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Celkom vzťahov ver/súbor: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Celkom vzťahov popis/súbor: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Celkom poskytnutých mapovaní: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Celkom globovaných reťazcov: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Celkom jalového miesta: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Celkom priradeného miesta: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Tento príkaz je zavrhovaný. Prosím, použite namiesto neho „apt-mark "
+"showauto“."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Zobrazí zdrojové záznamy"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Prehľadá zoznam balíkov podľa regulárneho výrazu"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Zobrazí základné údaje o závislostiach balíka"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Zobrazí údaje o spätných závislostiach balíka"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Zobrazí prehľadné informácie o balíku"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Vypíše zoznam názvov všetkých balíkov v systéme"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Zobrazí nastavenia zásad"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Prosím, zadajte názov tohto disku, napríklad „Debian 5.0.3 Disk 1“"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Vložte disk do mechaniky a stlačte Enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Pripojenie „%s“ na „%s“ zlyhalo"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Zopakujte tento postup pre všetky CD v sade diskov."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumenty nie sú vo dvojiciach"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Použitie: apt-config [voľby] príkaz\n"
+"\n"
+"apt-config je jednoduchý nástroj na čítanie konfiguračného súboru APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Použitie: apt-extracttemplates súbor1 [súbor2 ...]\n"
+"\n"
+"apt-extracttemplates je nástroj na vyňatie konfiguračných skriptov\n"
+"a šablón z balíkov Debian\n"
+"\n"
+"Voľby:\n"
+" -h Tento pomocník.\n"
+" -t Nastaví dočasný adresár\n"
+" -c=? Načíta tento konfiguračný súbor\n"
+" -o=? Nastaví ľubovoľnú voľbu, napr. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Nedá sa určiť verzia programu debconf. Je debconf nainštalovaný?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Balík %s sa nedá nájsť"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s je označený ako automaticky nainštalovaný.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Tento príkaz je zavrhovaný. Prosím, použite namiesto neho „apt-mark auto“ a "
+"„apt-mark manual“."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Vnútorná chyba, „problem resolver“ niečo pokazil"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Podporované moduly:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Použitie: apt-get [voľby] príkaz\n"
+" apt-get [voľby] install|remove balík1 [balík2 ...]\n"
+" apt-get [voľby] source balík1 [balík2 ...]\n"
+"\n"
+"apt-get je jednoduché rozhranie na príkazovom riadku na sťahovanie\n"
+"a inštaláciu balíkov. Najpoužívanejšími príkazmi sú update a install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Získa nové zoznamy balíkov"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Vykoná aktualizáciu"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Nainštaluje nové balíky (balík je libc6, nie libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Nainštaluje nové balíky (balík je libc6, nie libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Odstráni balíky"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Odstráni a balíky a ich konfiguračné súbory"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Automaticky odstráni všetky nepoužité balíky"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Aktualizácia distribúcie, pozri apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Riadi sa podľa výberu v dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Nastaví závislosti kompilácie pre zdrojové balíky"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Zmaže stiahnuté archívy"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Zmaže staré stiahnuté archívy"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Overí, či neexistujú poškodené závislosti"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Stiahne zdrojové archívy"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Musíte zadať aspoň jeden balík, pre ktorý sa stiahnu zdrojové texty"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Použitie: apt-internal-solver\n"
+"\n"
+"apt-internal-solver je rozhranie na použitie aktuálneho vnútorného\n"
+"riešiteľa ako vonkajší pre rodinu APT na ladenie a pod.\n"
+"\n"
+"Voľby:\n"
+" -h Tento pomocník.\n"
+" -q Výstup vhodný do záznamu - bez indikátora priebehu\n"
+" -c=? Načíta tento konfiguračný súbor\n"
+" -o=? Nastaví ľubovoľnú voľbu, napr. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Použitie: apt-internal-solver\n"
+"\n"
+"apt-internal-solver je rozhranie na použitie aktuálneho vnútorného\n"
+"riešiteľa ako vonkajší pre rodinu APT na ladenie a pod.\n"
+"\n"
+"Voľby:\n"
+" -h Tento pomocník.\n"
+" -q Výstup vhodný do záznamu - bez indikátora priebehu\n"
+" -c=? Načíta tento konfiguračný súbor\n"
+" -o=? Nastaví ľubovoľnú voľbu, napr. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s nemožno označiť, pretože nie je nainštalovaný.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s už bol označený ako manuálne nainštalovaný.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s už bol označený ako automaticky nainštalovaný.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Nainštalujú sa nasledovné NOVÉ balíky:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s bol už nastavený na podržanie.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s bol už nastavený na nepodržanie.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Vykonanie dpkg zlyhalo. Ste root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s je označený na podržanie.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Zrušené podržanie %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Použitie: apt-mark [voľby] {auto|manual} balík1 [balík2 ...]\n"
+"\n"
+"apt-mark je jednoduché rozhranie príkazového riadka na označovanie\n"
+"balíkov ako manuálne alebo automaticky nainštalované.\n"
+"Tiež dokáže označenia vypisovať.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Označí uvedené balíky ako automaticky nainštalované"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Označí uvedené balíky ako manuálne nainštalované"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Označí uvedené balíky ako automaticky nainštalované"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Neznámy záznam o balíku!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Načítavajú sa zoznamy balíkov"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Pripevnené balíky:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Pripevnené balíky:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Poškodené balíky"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "ale je to virtuálny balík"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Načítavajú sa stavové informácie"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Chybné predvolené nastavenie!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Stlačte Enter, ak chcete pokračovať."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Chcete odstrániť všetky doteraz stiahnuté .deb súbory?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Pri rozbaľovaní došlo k nejakým chybám. Balíky, ktoré boli nainštalované"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "budú nakonfigurované. Môže to spôsobiť opakované chybové správy"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "o nesplnených závislostiach. Je to v poriadku, dôležité sú iba"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"chyby nad touto správou. Opravte ich a potom znovu spusťte [I]nštalovať"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Zlučujú sa dostupné informácie"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Zoznam rozšírení balíka je príliš dlhý"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Chyba pri spracovávaní adresára %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Zoznam zdrojových rozšírení je príliš dlhý"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Chyba pri zapisovaní hlavičky do súboru"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Chyba pri spracovávaní obsahu %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Použitie: apt-ftparchive [voľby] príkaz\n"
+"Príkazy: packages binárna_cesta [súbor_override [prefix_cesty]]\n"
+" sources zdrojová_cesta [súbor_override [prefix_cesty]]\n"
+" contents cesta\n"
+" release cesta\n"
+" generate konfiguračný_súbor [skupiny]\n"
+" clean konfiguračný_súbor\n"
+"\n"
+"apt-ftparchive generuje indexové súbory archívov Debianu. Podporuje\n"
+"niekoľko režimov vytvárania - od plne automatického až po funkčnú\n"
+"náhradu príkazov dpkg-scanpackages a dpkg-scansources.\n"
+"\n"
+"apt-ftparchive zo stromu .deb súborov vygeneruje súbory Packages. Súbor\n"
+"Packages okrem všetkých riadiacich polí každého balíka obsahuje tiež jeho\n"
+"veľkosť a MD5 súčet. Podporovaný je tiež súbor „override“, pomocou ktorého\n"
+"môžete vynútiť hodnoty polí Priority a Section.\n"
+"\n"
+"Podobne vie apt-ftparchive vygenerovať zo stromu súborov .dsc súbory\n"
+"Sources. Voľbou --source-override môžete určiť zdrojový súbor „override“.\n"
+"\n"
+"Príkazy „packages“ a „sources“ by sa mali spúšťať v koreni stromu.\n"
+"Binárna_cesta by mala ukazovať na začiatok rekurzívneho hľadania\n"
+"a súbor „override“ by mal obsahovať príznaky pre nahradenie. Ak je udaný\n"
+"prefix_cesty, pridá sa do polí „filename“.\n"
+"Skutočný príklad z archívu Debianu:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Voľby:\n"
+" -h Tento pomocník\n"
+" --md5 Vygeneruje kontrolný súčet MD5\n"
+" -s=? Zdrojový súbor „override“\n"
+" -q Tichý režim\n"
+" -d=? Zvolí voliteľnú databázu pre vyrovnávaciu pamäť\n"
+" --no-delink Povolí ladiaci režim\n"
+" --contents Vygeneruje súbor Contents\n"
+" -c=? Načíta tento konfiguračný súbor\n"
+" -o=? Nastaví ľubovoľnú voľbu"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nevyhovel žiaden výber"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "V súbore balíka skupiny „%s“ chýbajú niektoré súbory"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB je narušená, súbor je premenovaný na %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB je neaktuálna, prebieha pokus o aktualizáciu %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Formát DB je neplatný. Ak ste aktualizovali staršiu verziu apt, musíte "
+"odstrániť a znovu vytvoriť databázu."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Nedá sa otvoriť DB súbor %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Nie je možné vykonať readlink %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Archív nemá riadiaci záznam"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Nedá sa získať kurzor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Zlyhal pokus o pridelenie pamäti"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Neznámy kompresný algoritmus „%s“"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Komprimovaný výstup %s potrebuje kompresnú sadu"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Zlyhalo vytvorenie IPC rúry k podprocesu"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Volanie fork() zlyhalo"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Komprimovať potomka"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Vnútorná chyba, nepodarilo sa vytvoriť %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "V/V operácia s podprocesom/súborom zlyhala"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Chyba čítania pri výpočte MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Nedá sa otvoriť %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Skomolený „override“ %s riadok %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Nepodarilo sa prečítať „override“ súbor %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Skomolený „override“ %s riadok %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Skomolený „override“ %s riadok %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Skomolený „override“ %s riadok %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Adresár %s sa nedá čítať\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: %s sa nedá vyhodnotiť\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Chyby sa týkajú súboru "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Chyba pri preklade %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Prechod stromom zlyhal"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s sa nedá otvoriť"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Odlinkovanie %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Nepodarilo sa zlinkovať %s s %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Bol dosiahnutý odlinkovací limit %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Archív neobsahuje pole „package“"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s nemá žiadnu položku override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " správcom %s je %s, nie %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s nemá žiadnu položku „source override“\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s nemá žiadnu položku „binary override“\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Čaká sa na hlavičky"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP server poslal neplatnú hlavičku odpovede"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Chybná hlavička"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP server poslal neplatnú hlavičku Content-Length"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP server poslal neplatnú hlavičku Content-Range"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Tento HTTP server má poškodenú podporu rozsahov"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Neznámy formát dátumu"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Zlé dátové záhlavie"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Spojenie zlyhalo"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Vnútorná chyba"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Nedá sa čítať databáza na CD-ROM %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Pre pridanie CD do APT použije apt-cdrom. apt-get update sa nedá využiť na "
+"pridávanie nových CD."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Chybné CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Nedá sa odpojiť CD-ROM v %s - možno sa ešte používa."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disk sa nenašiel."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Súbor sa nenašiel"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Pripája sa k %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Pripája sa k %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Nedá sa vytvoriť socket pre %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Nedá sa nadviazať spojenie na %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Chyba"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Nedá sa pripojiť k %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Nedá sa pripojiť k %s:%s (%s), uplynul čas spojenia"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Pripája sa k %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Nie je možné preložiť „%s“"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Dočasné zlyhanie pri preklade „%s“"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Niečo veľmi zlé sa prihodilo pri preklade „%s:%s“ (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Niečo veľmi zlé sa prihodilo pri preklade „%s:%s“ (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Nedá sa pripojiť k %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Vyhodnotenie zlyhalo"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Neplatné URI, lokálne URI nesmie začínať s //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Prihlasovanie"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Nedá sa zistiť názov druhej strany"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Nedá sa zistiť lokálny názov"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Server zamietol naše spojenie s chybou: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Zlyhalo zadanie používateľa, server odpovedal: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Zlyhalo zadanie hesla, server odpovedal: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Bol zadaný proxy server, ale nie prihlasovací skript. Acquire::ftp::"
+"ProxyLogin je prázdny."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Príkaz „%s“ prihlasovacieho skriptu zlyhal, server odpovedal: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Zlyhalo zadanie typu, server odpovedal: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Uplynul čas spojenia"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Server ukončil spojenie"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Odpoveď preplnila zásobník."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Narušenie protokolu"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Nedá sa vytvoriť socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Nedá sa pripojiť dátový socket, uplynul čas spojenia"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Nedá sa pripojiť pasívny socket."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo nezískal počúvajúci socket"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Nedá sa nadviazať socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Na sockete sa nedá počúvať"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Názov socketu sa nedá zistiť"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Príkaz PORT sa nedá odoslať"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Neznáma rodina adries %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Zlyhalo zadanie EPRT, server odpovedal: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Uplynulo spojenie dátového socketu"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Spojenie sa nedá prijať"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problém s hašovaním súboru"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Súbor sa nedá stiahnuť, server odpovedal „%s“"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Uplynula doba dátového socketu"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Prenos dát zlyhal, server odpovedal „%s“"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Dotaz"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Nedá sa vyvolať "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Bola zistená aspoň jedna nesprávna signatúra."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "Vnútorná chyba: Správna signatúra, ale sa nedá zistiť odtlačok kľúča?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Nedá sa spustiť „apt-key“ kvôli overeniu podpisu (je nainštalované gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Neznáma chyba pri spustení apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Nasledovné signatúry sú neplatné:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Nasledovné signatúry sa nedajú overiť, pretože nie je dostupný verejný "
+"kľúč:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Chyba zápisu do tohto súboru"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Chyba pri čítaní zo servera. Druhá strana ukončila spojenie"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Chyba pri čítaní zo servera"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Chyba zápisu do súboru"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Výber zlyhal"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Uplynul čas spojenia"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Chyba zápisu do výstupného súboru"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Zlyhalo nastavenie času zmeny"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Spojenie bolo predčasne ukončené"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Prázdne súbory nemôžu byť platné archívy"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Neplatná hlavička prvku archívu %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Odstránený balík %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Súbor balíkov %s je neaktuálny."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Indexové súbory balíka sú narušené. Chýba pole Filename: pre balík %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Na zrkadle nebol nájdený súbor „%s“"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Nepodarilo sa prečítať súbor „%s“ na zrkadle"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Nepodarilo sa prečítať súbor „%s“ na zrkadle"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Zrkadlo: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Otvára sa konfiguračný súbor %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Otvára sa %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Nepodarilo sa nájsť očakávanú položku „%s“ v súbore Release (Nesprávna "
+#~ "položka sources.list alebo chybný formát súboru)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Nesplnené závislosti. Skúste použiť --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Možno to budete chcieť napraviť spustením „apt --fix-broken install“:"
+
+#~ msgid "(not found)"
+#~ msgstr "(nenájdené)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Pripevnený balík:"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Nie sú dostupné žiadne verejné kľúče ku kľúčom s nasledovnými ID:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Adresár %s je divertovaný"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "%s závislosť pre %s nemožno splniť, pretože %s nie je povolené na "
+#~ "balíkoch „%s“"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "%s závislosť pre %s nemožno splniť, pretože sa nedá nájsť balík %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Zlyhalo splnenie %s závislosti pre %s: Inštalovaný balík %s je príliš nový"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%s závislosť pre %s nemožno splniť, pretože kandidátska verzia balíka %s, "
+#~ "nedokáže splniť požiadavky na verziu"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%s závislosť pre %s nemožno splniť, pretože balík %s nemá kandidátsku "
+#~ "verziu"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Zlyhalo splnenie %s závislosti pre %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Závislosti na zostavenie %s nemožno splniť."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problém s odlinkovaním %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Nie je možné vykonať unlink %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Použitie: apt-cache [voľby] príkaz\n"
+#~ " apt-cache [voľby] show balík1 [balík2 ...]\n"
+#~ "\n"
+#~ "apt-cache je nízkoúrovňový nástroj na zisťovanie informácií\n"
+#~ "z binárnych súborov vyrovnávacej pamäti APT\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Voľby:\n"
+#~ " -h Tento pomocník.\n"
+#~ " -p=? Vyrovnávacia pamäť balíkov.\n"
+#~ " -s=? Vyrovnávacia pamäť zdrojov.\n"
+#~ " -q Nezobrazí indikátor priebehu.\n"
+#~ " -i Pri príkaze unmet zobrazí iba dôležité závislosti.\n"
+#~ " -c=? Načíta tento konfiguračný súbor\n"
+#~ " -o=? Nastaví ľubovoľnú voľbu, napr. -o dir::cache=/tmp\n"
+#~ "Ďalšie informácie nájdete v manuálových stránkach apt-cache(8)\n"
+#~ "a apt.conf(5).\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Voľby:\n"
+#~ " -h Tento text pomocníka.\n"
+#~ " -q Výstup vhodný do záznamu - bez indikátora priebehu\n"
+#~ " -qq Nevypisovať nič, len chyby\n"
+#~ " -s Nevykonávať zmeny. Iba vypísať, čo by sa urobilo.\n"
+#~ " -f čítanie/zápis označenia auto/manálne v uvedenom súbore\n"
+#~ " -c=? Načítať tento konfiguračný súbor\n"
+#~ " -o=? Nastaviť ľubovoľný konfiguračnú voľbu, napr. -o dir::cache=/tmp\n"
+#~ "Ďalšie informácie nájdete na manuálových stránkach apt-mark(8) a apt."
+#~ "conf(5)."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Voľby:\n"
+#~ " -h Tento pomocník.\n"
+#~ " -c=? Načíta tento konfiguračný súbor\n"
+#~ " -o=? Nastaví ľubovoľnú voľbu, napr. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Voľby:\n"
+#~ " -h Tento text pomocníka.\n"
+#~ " -q Výstup vhodný do záznamu - bez indikátora priebehu\n"
+#~ " -qq Nevypisovať nič, len chyby\n"
+#~ " -s Nevykonávať zmeny. Iba vypísať, čo by sa urobilo.\n"
+#~ " -f čítanie/zápis označenia auto/manálne v uvedenom súbore\n"
+#~ " -c=? Načítať tento konfiguračný súbor\n"
+#~ " -o=? Nastaviť ľubovoľný konfiguračnú voľbu, napr. -o dir::cache=/tmp\n"
+#~ "Ďalšie informácie nájdete na manuálových stránkach apt-mark(8) a apt."
+#~ "conf(5)."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Použitie: apt-sortpkgs [voľby] súbor1 [súbor2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs je jednoduchý nástroj na zotriedenie súborov Packages.\n"
+#~ "Voľbou -s si zvolíte typ súboru.\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -h Tento pomocník\n"
+#~ " -s Zotriedi zdrojový súbor\n"
+#~ " -c=? Načíta tento konfiguračný súbor\n"
+#~ " -o=? Nastaví ľubovoľnú voľbu, napr. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Proces potomka zlyhal"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Musíte zadať aspoň jeden balík, pre ktorý sa stiahnu zdrojové texty"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Vytvorenie rúry zlyhalo"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Spustenie gzip zlyhalo "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s pre %s skompilovaný %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Zlyhalo vytvorenie FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s (spracovanie URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Skomolený riadok %lu v zozname zdrojov %s (nie je možné spracovať "
+#~ "[option])"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Skomolený riadok %lu v zozname zdrojov %s ([option] je príliš krátke)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s ([%s] nie je priradenie)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s ([%s] nemá kľúč)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Skomolený riadok %lu v zozname zdrojov %s ([%s] kľúč %s nemá hodnotu)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s (spracovanie URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s (absolútny dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Skomolený riadok %lu v zozname zdrojov %s (spracovanie dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Pri spracovaní závislostí nebol nájdený balík %s %s"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Nedá sa vyhodnotiť zoznam zdrojových balíkov %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Collecting File poskytuje"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Súbor %s nezačína podpísanou správou v čistom texte (clearsigned)"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Nepodarilo sa nájsť haš „%s“ v súbore Release"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Blok výrobcu %s neobsahuje otlačok (fingerprint)"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Celkom miesta závislých verzií: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Na %s nemáte dostatok voľného miesta"
+
+#~ msgid "Done"
+#~ msgstr "Hotovo"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "V %s nie je nainštalovaný žiaden zväzok kľúčov."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Vnútorná chyba, AllUpgrade pokazil veci"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s nie je platný balík DEB."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Použije sa CD-ROM prípojný bod %s\n"
+#~ "Pripája sa CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nepodarilo sa záplatovať %s pomocou mmap a pomocou operácie so súborom - "
+#~ "zdá sa, že záplata je poškodená."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Nepodarilo sa záplatovať %s pomocou mmap (ale nevyskytla sa chyba "
+#~ "týkajúca sa mmap) - zdá sa, že záplata je poškodená."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Ignorovať nedostupné cieľové vydanie „%s“ balíka „%s“"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Sťahuje sa %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "Toto nie je platný DEB archív, chýba časť „%s“, „%s“ alebo „%s“"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Nezhoda kontrolných MD5 súčtov"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Nedá sa nájsť súbor s balíkom %s. Asi budete musieť opraviť tento balík "
+#~ "manuálne."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Nedá sa zapísať záznam, volanie openpty() zlyhalo (/dev/pts nie je "
+#~ "pripojený?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Preskakuje sa neexistujúci súbor %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Odstránenie %s zlyhalo"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Nedá sa vytvoriť %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Vyhodnotenie %sinfo zlyhalo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Adresáre info a temp musia byť na tom istom súborovom systéme"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Nedá sa zmeniť na admin adresár %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Vnútorná chyba pri získavaní názvu balíka"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Načítava sa zoznam súborov"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Otvorenie súboru zoznamov „%sinfo/%s“ zlyhalo. Ak nemôžete obnoviť tento "
+#~ "súbor, vytvorte nový prázdny a ihneď znovu nainštalujte tú istú verziu "
+#~ "balíka!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Chyba pri čítaní súboru so zoznamami %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Vnútorná chyba pri získavaní uzla"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Zlyhalo otvorenie súboru s diverziami %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Diverzný súbor je porušený"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Neplatný riadok v diverznom súbore: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Vnútorná chyba pri pridávaní diverzie"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Vyrovnávacia pamäť balíkov sa musí najprv inicializovať"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Chyba pri hľadaní Balíka: hlavička, pozícia %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Zlá sekcia ConfFile v stavovom súbore na pozícii %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Chyba pri spracovaní MD5. Pozícia %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Nedá sa prejsť do %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Nedá sa nájsť platný riadiaci súbor"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Nedá sa otvoriť rúra pre %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Chyba pri čítaní z procesu %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Získal sa jeden riadok hlavičky cez %u znakov"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Pozn.: Toto robí dpkg automaticky a zámerne."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Skomolený „override“ %s riadok %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Skomolený „override“ %s riadok %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Skomolený „override“ %s riadok %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "dekompresor"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "čítanie, stále treba prečítať %lu, ale už nič neostáva"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "zápis, stále treba zapísať %lu, no nedá sa to"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Nebolo možné vykonať okamžitú konfiguráciu už rozbaleného „%s“. Pozri "
+#~ "prosím podrobnosti v man 5 apt.conf pod APT::Immediate-Configure"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Chyba pri spracovávaní %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Chyba pri spracovávaní %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Chyba pri spracovávaní %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Chyba pri spracovávaní %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Chyba pri spracovávaní %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Vyskytla sa chyba pri spracovávaní %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Chyba pri spracovávaní %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Vyskytla sa chyba pri spracovávaní %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Chyba pri spracovávaní %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Chyba pri spracovávaní %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Vnútorná chyba, nedá sa nájsť člen"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Vnútorná chyba, skupina „%s“ nemá žiaden inštalovateľný pseudobalík"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Platnosť súboru Release vypršala, ignoruje sa %s (neplatný od %s)"
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 0000000..80a4e37
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,4382 @@
+# translation of apt.po to Slovenian
+# Matjaz Horvat <matjaz@owca.info>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 0.5.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2012-06-27 21:29+0000\n"
+"Last-Translator: Andrej Znidarsic <andrej.znidarsic@gmail.com>\n"
+"Language-Team: Slovenian <sl@li.org>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+"X-Launchpad-Export-Date: 2012-06-25 20:00+0000\n"
+"X-Generator: Launchpad (build 15482)\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Neveljaven podpis arhiva"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Napaka med branjem glave člana arhiva"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Neveljavna glava člana arhiva"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arhiv je prekratek"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Glav arhiva ni mogoče brati"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Ni mogoče najti zapisa overitve za: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Pokvarjen arhiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Nadzorna vsota tar ni uspela, arhiv je pokvarjen"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Neznana vrsta glave TAR %u, član %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "To ni veljaven arhiv DEB. Manjka član '%s'."
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Notranja napaka. Ni mogoče najti člana %s."
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Nadzorne datoteke ni mogoče razčleniti"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Zapisovanje datoteke %s je spodletelo"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Napaka med zapiranjem datoteke %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Pot %s je predolga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Odpakiranje %s več kot enkrat"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Mapa %s je odklonjena"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Paket poskuša pisati v tarčo odklona %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Pot odklona je predloga"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Napaka med določitvijo %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Ni mogoče preimenovati %s v %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Mapa %s je bil zamenjana z ne-mapo"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Iskanje vozlišča v njegovem razpršenem vedru ni uspelo"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Pot je predolga"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Prepiši zadetek paketa brez vnosa različice za %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Datoteka %s/%s prepisuje datoteko v paketu %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Ni mogoče brati %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Ni mogoče določiti %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode je poklical stabilno povezano vozlišče"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Ni mogoče najti razpršenega elementa!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Ni mogoče dodeliti odklona"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Notranja napaka v AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Poskus prepisovanja odklona, %s -> %s in %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dvojni seštevek odklona %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Dvojnik datoteke z nastavitvami %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Mapa %s je odklonjena"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Mapa %s je odklonjena"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Mapa %s je odklonjena"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Mapa %s je odklonjena"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Mapa %s je odklonjena"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Napaka med branjem povezave %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Neujemanje vsote razpršil"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "preimenovanje je spodletelo, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Neujemanje velikosti"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Neveljavno opravilo %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Napaka pisanja"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Med preverjanjem podpisa je prišlo do napake. Skladišče ni bilo posodobljeno "
+"zato bodo uporabljene predhodne datoteke kazal. Napaka GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Napaka GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Datoteka Release za %s je potekla (neveljavna od %s). Posodobitev za to "
+"skladišče ne bo uveljavljena."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Datoteka Release za %s je potekla (neveljavna od %s). Posodobitev za to "
+"skladišče ne bo uveljavljena."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Distribucija v sporu: %s (pričakovana %s, toda dobljena %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Ni mogoče dobiti %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Ni bilo mogoče najti datoteke za paket %s. Morda boste morali ročno "
+"popraviti ta paket (zaradi manjkajočega arhiva)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Ni mogoče najti vira za prejem različice '%s' paketa '%s'"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Dnevnik sprememb za %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Gonilnika načinov %s ni mogoče najti."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Izberite, če je paket 'dpkg-dev' nameščen.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Način %s se ni začel pravilno"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Vstavite disk z oznako '%s' v pogon '%s' in pritisnite vnosno tipko."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Mapa seznama %s manjka."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Mapa arhivov %s manjka."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Mape %s ni mogoče zakleniti"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Vrsta datoteke s kazalom '%s' ni podprta"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Pridobivanje datoteke %li od %li (%s preostalo)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Pridobivanje datoteke %li od %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "Paket %s mora biti znova nameščen, vendar ni mogoče najti arhiva zanj."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Napaka. pkgProblemResolver::Resolve pri razrešitvi, ki so jih morda "
+"povzročili zadržani paketi."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Ni mogoče popraviti težav. Imate pokvarjene pakete."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Ni mogoče odprti ali razčleniti seznama paketov ali datoteke stanja."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Za odpravljanje težav poskusite zagnati apt-get update."
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Seznama virov ni mogoče brati."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Napaka med prevajanjem logičnega izraza - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Izdaje '%s' za '%s' ni mogoče najti"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Različice '%s' za '%s' ni mogoče najti"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Ni mogoče najti naloge '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Z logičnim izrazom '%s' ni mogoče najti nobenega paketa"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Z logičnim izrazom '%s' ni mogoče najti nobenega paketa"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Ni mogoče najti paketa %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Ni mogoče izbrati različic in paketa '%s', saj je popolnoma navidezen"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Ni mogoče izbrati najnovejše različice iz paketa '%s', saj je popolnoma "
+"navidezen"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "Ni mogoče izbrati različice kandidata iz paketa %s, ker nima kandidata"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr "Ni mogoče izbrati nameščene različice iz paketa %s, saj ni nameščen"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Ni mogoče izbrati nameščene različice ali različice kandidata iz paketa "
+"'%s', saj nima nobenega od njiju"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Vrstica %u v seznamu virov %s je predolga."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Odklapljanje CD-ROM-a ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Uporabljanje CD-ROM-ove priklopne točke %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Čakanje na disk ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Priklapljanje CD-ROM-a ...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identificiranje ... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Shranjena oznaka: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Preiskovanje diska za datoteke kazala ...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Najdenih je bilo %zu kazal paketov, %zu kazal virov, %zu kazalov prevodov in "
+"%zu podpisov\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Nobenih datotek paketov ni mogoče najti, morda to ni disk Debian ali pa je "
+"arhitektura napačna?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Najdena je bila oznaka '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "To ni veljavno ime, poskusite znova.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Ta disk se imenuje: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopiranje seznama paketov ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Pisanje novega seznama virov\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Izvorni vnosi za ta disk so:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Ni mogoče spremeniti v %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Ni mogoče določiti %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Ni mogoče določiti priklopne točke %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Ni mogoče določiti CD-ROM-a"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Možnost ukazne vrstice '%c' [iz %s] ni poznana."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Možnosti ukazne vrstice %s ni mogoče razumeti"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Možnost ukazne vrstice %s ni boolova vrednost"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Možnost %s zahteva argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Možnost %s: Določilo predmeta nastavitve zahtevajo =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Možnost %s zahteva celoštevilski argument, ne '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Možnost '%s' je predolga"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Pomena %s ni mogoče razumeti, poskusite pravilno ali napačno."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Neveljavno opravilo %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Neprepoznana vrsta okrajšave: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Skladenjska napaka %s:%u: Blok se začne brez imena."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Skladenjska napaka %s:%u: Slabo oblikovana oznaka."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Skladenjska napaka %s:%u: Dodatna krama za vrednostjo."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Skladenjska napaka %s:%u: Napotki se lahko izvedejo le na vrhnji ravni."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Skladenjska napaka %s:%u: Preveč vgnezdenih vključitev"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Skladenjska napaka %s:%u: Vključeno od tu"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Skladenjska napaka %s:%u: Nepodprt napotek '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Skladenjska napaka %s:%u: počisti ukaz zahteva drevo možnosti kot argument"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Skladenjska napaka %s:%u: Dodatna krama na koncu datoteke"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Težava med razvezovanjem datoteke %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Brez uporabe zaklepanja za zaklenjeno datoteko le za branje %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Ni mogoče odprti zaklenjene datoteke %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Brez uporabe zaklepanja za datoteko %s, priklopljeno z NTFS"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Ni mogoče zakleniti datoteke %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Seznama datotek ni mogoče ustvariti, ker '%s' ni mapa"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Preziranje '%s' v mapi '%s', ker ni običajna datoteka"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "Preziranje datoteke '%s' v mapi '%s', ker nima pripone imena datotek"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Preziranje datoteke '%s' v mapi '%s', ker nima veljavne pripone imena datotek"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Program je čakal na %s a ga ni bilo tam"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Pod-opravilo %s je prejelo segmentacijsko napako."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Pod-opravilo %s je prejelo signal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Pod-opravilo %s je vrnilo kodo napake (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Pod-opravilo %s se je nepričakovano zaključilo"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Napaka branja"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Napaka pisanja"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Težava med zapiranjem gzip datoteke %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Ni mogoče ustvariti podopravila IPD"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Ni mogoče izvesti stiskanja "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Ni mogoče odpreti datoteke %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Ni mogoče odpreti opisnika datotek %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "Prebrano, še vedno je treba prebrati %llu bajtov, vendar ni nič ostalo"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "pisanje, preostalo je še %llu za pisanje, vendar ni bilo mogoče pisati"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Težava med zapiranjem datoteke %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Težava med preimenovanje datoteke %s v %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Težava med usklajevanjem datoteke"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Ni mogoče določiti %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Ni mogoče pisati na %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "mmap prazne datoteke ni mogoč"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Ni mogoče narediti mmap %llu bajtov"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Ni mogoče podvojiti opisnika datotek %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Ni mogoče zapreti mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Ni mogoče uskladiti mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Ni mogoče narediti mmap %lu bajtov"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Ni mogoče obrezati datoteke"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dinamičnemu MMap je zmanjkalo prostora. Povečajte velikost APT::Cache-Start. "
+"Trenutna vrednost: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Ni mogoče povečati velikosti MMap, ker je omejitev %lu bajtov že dosežena."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Ni mogoče povečati velikosti MMap, ker je samodejno povečevanje onemogočeno."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s ... Napaka!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s ... Narejeno"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s ... Narejeno"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Izbire %s ni mogoče najti"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Ni mogoče razčleniti Release datoteke %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Ni izbir v Release datoteki %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Ni vnosa razpršila v Release datoteki %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Neveljaven vnos '%s' v Release datoteki %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Ni mogoče razčleniti datoteke paketa %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Skrbniške mape (%s) ni mogoče zakleniti. Jo morda uporablja drugo opravilo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Skrbniške mape (%s) ni mogoče zakleniti. Ali ste skrbnik?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr "dpkg je bil prekinjen. Za popravilo napake morate ročno pognati '%s'. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Skrbniške mape (%s) ni mogoče zakleniti. Jo morda uporablja drugo opravilo?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Skrbniške mape (%s) ni mogoče zakleniti. Ali ste skrbnik?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Ni zaklenjeno"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Pripravljanje %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Pripravljanje na nastavljanje %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Pripravljanje na odstranitev %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Pripravljanje na popolno odstranitev %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "%s je izginil"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Poganjanje sprožilca po namestitvi %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s je bil nameščen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Nastavljanje %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Mapa '%s' manjka"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Ni mogoče odpreti datoteke '%s'"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Razširjanje %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Nameščanje %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Odstranjevanje %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s je bil popolnoma odstranjen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s je bil popolnoma odstranjen"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Ni mogoče pisati na %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Opravilo je bilo prekinjeno preden se je lahko končalo"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Poročilo apport ni bilo napisano, ker je bilo število MaxReports že doseženo"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "težave odvisnosti - puščanje nenastavljenega"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Poročilo apport ni bilo napisano, ker sporočilo o napaki nakazuje na "
+"navezujočo napako iz predhodne napake."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Poročilo apport ni bilo napisano, ker sporočilo o napaki nakazuje na napako "
+"polnega diska"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Poročilo apport ni bilo napisano, ker sporočilo o napaki nakazuje na napako "
+"zaradi pomanjkanja pomnilnika"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Poročilo apport je bilo napisano, ker sporočilo o napaki nakazuje na težavo "
+"na krajevnem sistemu"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Poročilo apport ni bilo napisano, ker sporočilo o napaki nakazuje na napako "
+"dpkg V/I"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Gradnja drevesa odvisnosti"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Različice kandidatov"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Ustvarjanje odvisnosti"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Branje podatkov o stanju"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Odpiranje DatotekeStanja %s je spodletelo"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Pisanje začasne DatotekeStanja %s je spodletelo"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Pošlji scenarij reševalniku"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Pošlji zahtevo reševalniku"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Priprava za rešitev prejemanja"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Zunanji reševalnik je spodletel brez pravega sporočila o napakah"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Izvedi zunanji reševalnik"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Izvedi zunanji reševalnik"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Pošlji zahtevo reševalniku"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Pošlji scenarij reševalniku"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "Zunanji reševalnik je spodletel brez pravega sporočila o napakah"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Zapisanih je bilo %i zapisov.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Zapisanih je bilo %i zapisov z %i manjkajočimi datotekami.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Zapisanih je bilo %i zapisov z %i neujemajočimi datotekami.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Zapisanih je bilo %i zapisov z %i manjkajočimi datotekami in %i "
+"neujemajočimi datotekami.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Ni mogoče najti zapisa overitve za: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Neujemanje razpršila za: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Paketni sistem '%s' ni podprt"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Ni mogoče določiti ustrezne vrste paketnega sistema"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Poganjanje dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Ni mogoče izvesti takojąnje nastavitve na '%s'. Oglejte si man5 apt.conf pod "
+"APT::Immediate-Configure za podrobnosti. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Ni mogoče nastaviti '%s' "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Ta krog namestitve zahteva začasno odstranitev ključnega paketa %s zaradi "
+"zanke spora/predodvisnosti. To je ponavadi slabo, toda če zares želite "
+"nadaljevati, vključite možnost APT::Force-LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Prazen predpomnilnik paketov"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Datoteka s predpomnilnikom paketov je pokvarjena"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Različica datoteke s predpomnilnikom paketov ni združljiva"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Ta APT ne podpira sistema različic '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Predpomnilnik paketov je bil izgrajen za drugačno arhitekturo"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Datoteka predpomnilnika paketa je okvarjena. Je premajhna"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Odvisen od"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Predodvisen od"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Priporoča"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "V sporu z"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Priporoča"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Zamenja"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Pokvari"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Izboljša"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Zastara"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "pomembno"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "obvezno"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "običajni"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "dodatno"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "izbirno"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Predpomnilnik ima neustrezen sistem različic"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Med obdelovanjem %s je prišlo do napake (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Čestitamo, presegli ste število imen paketov, ki jih zmore APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Čestitamo, presegli ste število različic, ki jih zmore APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Čestitamo, presegli ste število opisov, ki jih je zmožen APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Čestitamo, presegli ste število odvisnosti, ki jih zmore APT."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Branje seznama paketov"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Napaka VI med shranjevanjem predpomnilnika virov"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Vrsta datoteke s kazalom '%s' ni podprta"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Vrednost '%s' je neveljavna za APT::Default-Release in zato takšna izdaja ni "
+"na voljo v virih"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Neveljaven zapis v datoteki možnosti %s, ni glave paketa"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Ni mogoče razumeti vrste bucike %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Prednost bucike ni navedena ali pa je nič."
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Slabo oblikovan prepis %s v vrstici %llu št. 1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Slabo oblikovana vrstica %u v seznamu virov %s (vrsta)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Vrsta '%s' v vrstici %u na seznamu virov %s ni znana"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Slabo oblikovana vrstica %u v seznamu virov %s (vrsta)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Vrsta '%s' v vrstici %u na seznamu virov %s ni znana"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "V sources.list morate vstaviti URI-je z viri"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Prejem nekaterih datotek kazala je spodletel. Bile so prezrte ali pa so bile "
+"namesto njih uporabljene stare."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Preračunavanje nadgradnje"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Zadetek:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Dobi:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Prezr:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Nap:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Pridobljenih %sB v %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Delo]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Sprememba medija: vstavite disk z oznako\n"
+" '%s'\n"
+"v enoto '%s' in pritisnite vnosno tipko\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Popravljanje odvisnosti ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " spodletelo."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Ni mogoče popraviti odvisnosti"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Ni mogoče pomanjšati zbirke za nadgradnjo"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Opravljeno"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Če želite popraviti napake, poskusite pognati 'apt --fix-broken install'."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Nerešene odvisnosti. Poskusite 'apt --fix-broken install' brez paketov (ali "
+"navedite rešitev)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Izbiranje '%s' za nalogo '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Izbiranje '%s' za logični izraz '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Izbiranje '%s' za logični izraz '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Paket %s je navidezen in ga je priskrbel:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Nameščeno]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Ni različica kandidata]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Sami izberite paket, ki ga želite namestiti."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Paket %s nima navedene različice, vendar se nanj nanaša nek drug paket.\n"
+"To ponavadi pomeni, da paket manjka, je zastaran ali\n"
+"pa je na voljo samo iz drugega vira.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Kakorkoli, naslednji paketi ga nadomestijo:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Paket '%s' nima namestitvenega kandidata"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Navideznih paketov kot je '%s' ni mogoče odstraniti\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Paket '%s' ni nameščen, zato ni bil odstranjen. Ali ste mislili '%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Paket '%s' ni nameščen, zato ni bil odstranjen\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Izbiranje '%s' namesto '%s'\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Ta APT ima moči super krav."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Noben paket ni bil najden"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "POZOR: Naslednjih paketov ni bilo mogoče overiti!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Opozorilo overitve je bilo prepisano.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Nekaterih paketkov bi bilo mogoče overiti"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Ali želite te pakete namestiti brez preverjanja?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Prišlo je do težav in -y je bil uporabljen brez --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Ni mogoče določiti prostega prostora v %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Na %s je premalo prostora."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Ni mogoče zakleniti mape prejemov"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Nekaterih paketov ni mogoče namestiti. To lahko pomeni, da ste zahtevali\n"
+"nemogoč položaj, če uporabljate nestabilno izdajo pa\n"
+", da nekateri zahtevani paketi še niso ustvarjeni ali premaknjeni\n"
+" iz Prihajajočega."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Naslednji podatki vam bodo morda pomagali rešiti težavo:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Pokvarjeni paketi"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Nekaterih arhivov ni mogoče dobiti. Poskusite uporabiti apt-get update ali --"
+"fix-missing."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Notranja napaka, NamestiPakete je bil klican z pokvarjenimi paketi!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Odstraniti je treba pakete, a je odstranjevanje onemogočeno."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Prišlo je do težav in -y je bil uporabljen brez --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Prišlo je do težav in -y je bil uporabljen brez --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Notranja napaka, Urejanje se ni končalo"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Kako čudno ... Velikosti se ne ujemata, pošljite sporočilo na apt@packages."
+"debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Potrebno je dobiti %sB/%sB arhivov.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Potrebno je dobiti %sB arhivov.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Po tem opravilu bo porabljenega %sB dodatnega prostora.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Po tem opravilu bo sproščenega %sB prostora na disku.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Navedena je možnost Samo preprosto, a to opravilo ni preprosto."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Da, naredi tako kot pravim!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Naredili boste nekaj, kar je morda lahko škodljivo.\n"
+"Za nadaljevanje vtipkajte frazo '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Prekini."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Ali želite nadaljevati?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Prejem nekaterih datotek ni uspel"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Prejem je dokončan in uporabljen je način samo prejema"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing in izmenjava medija trenutno nista podprta"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Ni mogoče popraviti manjkajočih paketov."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Prekinjanje namestitve."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Naslednji paketi so izginili z vašega sistema, ker so vse\n"
+"datoteke prepisali drugi paketi:"
+msgstr[1] ""
+"Naslednji paketi je izginil z vašega sistema, ker so vse\n"
+"datoteke prepisali drugi paketi:"
+msgstr[2] ""
+"Naslednja paketa sta izginila z vašega sistema, ker so vse\n"
+"datoteke prepisali drugi paketi:"
+msgstr[3] ""
+"Naslednji paketi so izginili z vašega sistema, ker so vse\n"
+"datoteke prepisali drugi paketi:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Opomba: To je dpkg storil samodejno in namenoma."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Program ne bi smel brisati stvari, ni mogoče zagnati "
+"SamodejnegaOdstranjevalnika"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Videti je, da je SamodejniOdstranjevalnik nekaj uničil, kar se ne bi smelo "
+"zgoditi\n"
+"Pošljite poročilo o hrošču v apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Notranja napaka, SamodejniOdstranjevalnik je pokvaril stvari"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Naslednji paketi so bili samodejno nameščeni in niso več zahtevani:"
+msgstr[1] "Naslednji paket je bil samodejno nameščen in ni več zahtevan:"
+msgstr[2] ""
+"Naslednja paketa sta bila samodejno nameščena in nista več zahtevana:"
+msgstr[3] "Naslednji paketi so bili samodejno nameščeni in niso več zahtevani:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu paketov je bilo samodejno nameščenih in niso več zahtevani.\n"
+msgstr[1] "%lu paket je bil samodejno nameščen in ni bil več zahtevan.\n"
+msgstr[2] "%lu paketa sta bila samodejno nameščena in nista več zahtevana.\n"
+msgstr[3] "%lu paketi so bili samodejno nameščeni in niso več zahtevani.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Uporabite '%s' za njihovo odstranitev."
+msgstr[1] "Uporabite '%s' za njegovo odstranitev."
+msgstr[2] "Uporabite '%s' za njuno odstranitev."
+msgstr[3] "Uporabite '%s' za njihovo odstranitev."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Naslednji dodatni paketi bodo nameščeni:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Predlagani paketi:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Priporočeni paketi:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "%s je preskočen, ker je že nameščen in ne potrebuje nadgradnje.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "Preskok %s, ni nameščen in zahtevane so le nadgradnje\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Ponovna namestitev %s ni možna, ker prejem ni možen.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "Najnovejša različica %s je že nameščena.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s je bil nastavljen na ročno nameščen.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Izbrana različica '%s' (%s) za '%s'\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Izbrana različica '%s' (%s) za '%s' namesto '%s'\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"OPOMBA: To je samo simulacija!\n"
+" %s za pravo izvajanje potrebuje privilegije skrbnika.\n"
+" Zaklepanje je onemogočeno, zato se ne zanašajte\n"
+" na pomembnost trenutnega pravega stanja!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Nameščeno]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Nameščeno]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Nameščeno]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Nameščeno]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "vendar je paket %s nameščen"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "vendar bo paket %s nameščen"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "vendar se ga ne da namestiti"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "vendar je navidezen paket"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "vendar ne bo nameščen"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "vendar ni nameščen"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ali"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Naslednji paketi imajo nerešene odvisnosti:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Naslednji NOVI paketi bodo nameščeni:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Naslednji novi paketi bodo ODSTRANJENI:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Naslednji paketi so bili zadržani:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Naslednji paketi bodo nadgrajeni:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Naslednji paketi bodo POSTARANI:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Naslednji zadržani paketi bodo spremenjeni:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (zaradi %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"OPOZORILO: Naslednji nujni paketi bodo odstranjeni.\n"
+"Tega NE storite, razen če ne veste natanko kaj počenjate!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu nadgrajenih, %lu na novo nameščenih, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu posodobljenih, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu postaranih, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu bo odstranjenih in %lu ne nadgrajenih.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu ne popolnoma nameščenih ali odstranjenih.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Podati morate vsaj en iskalni vzorec"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Datoteke paketa:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Predpomnilnik ni usklajen, x-ref datoteke paketa ni mogoč"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Pripeti paketi:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Nameščen: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(brez)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Preglednica različic:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Z logičnim izrazom '%s' ni mogoče najti nobenega paketa"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Z logičnim izrazom '%s' ni mogoče najti nobenega paketa"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Z logičnim izrazom '%s' ni mogoče najti nobenega paketa"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Izbiranje '%s' kot vir paketa namesto '%s'\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Prezri nerazpoložljivo različico '%s' paketa '%s'"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"Potrebno je navesti vsaj en paket, za katerega želite dobiti izvorno kodo"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Izvornega paketa za %s ni mogoče najti"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"OPOMBA: pakiranje '%s' vzdrževano v sistemu nadzora različice '%s' na:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Uporabite:\n"
+"%s\n"
+"za pridobitev zadnjih (morda še neizdanih) posodobitev paketa.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Preskok že prejete datoteke '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Potrebno je dobiti %sB/%sB izvornih arhivov.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Potrebno je dobiti %sB izvornih arhivov.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Dobi vir %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Nekaterih arhivov ni mogoče pridobiti."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Odpakiranje že odpakiranih izvornih paketov v %s je bilo preskočeno\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Ukaz odpakiranja '%s' ni uspel.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Izberite, če je paket 'dpkg-dev' nameščen.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Ukaz gradnje '%s' ni uspel.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Ni mogoče dobiti podrobnosti o odvisnostih za gradnjo za %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s nima odvisnosti za gradnjo.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Za %s ni bilo mogoče najti podatkov o arhitekturi. Za nastavitev si oglejte "
+"apt.conf(5) APT::Architectures"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Potrebno je navesti vsaj en paket, za katerega želite preveriti odvisnosti "
+"za gradnjo"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Obdelava odvisnosti za gradnjo je spodletela"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Obdelava odvisnosti za gradnjo je spodletela"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Ni mogoče preimenovati %s v %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Paket %s različica %s ima nerešene odvisnosti:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Ukaz update ne sprejema argumentov"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Ukaz update ne sprejema argumentov"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Vseh imen paketov: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Skupno struktur paketov : "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Običajni paketi: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Čisti navidezni paketi: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Posamezni navidezni paketi: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Mešani navidezni paketi: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Manjka: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Vseh različic: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Skupno različnih opisov: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Vseh odvisnosti: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Vseh povezav Raz/Dat: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Skupno razmerij opisov/datotek: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Vseh dobljenih preslikav: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Vseh razširjenih nizov: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Celotna ohlapna velikost: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Celotna velikost, izračunana za: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Ta ukaz je zastarel. Namesto njega uporabite 'apt-mark showauto'."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Prikaže zapise izvorne kode"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Išče seznam paketov z vzorcem logičnega izraza"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Prikaže surove podatke odvisnosti za paket"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Pokaže obratne podatke odvisnosti za paket"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Show a readable record for the package"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Izpiše imena vseh paketov na sistemu"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Prikaže nastavitve pravil"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Navedite ime tega diska, kot je naprimer 'Debian 5.0.3 disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Vstavite disk v pogon in pritisnite vnosno tipko"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Priklapljanje '%s' na '%s' je spodletelo"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Ponovi to opravilo za preostanek CD-jev v vaši zbirki."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumenti niso v parih"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Uporaba: apt-config [možnosti] ukaz\n"
+"\n"
+"apt-config je preprosto orodje za branje nastavitvene datoteke APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Uporaba: apt-extracttemplates dat1 [dat2 ...]\n"
+"\n"
+"apt-extracttemplates je orodje za pridobivanje podatkov o\n"
+"nastavitvah in predlogah debianovih paketov\n"
+"\n"
+"Možnosti:\n"
+" -h To besedilo pomoči\n"
+" -t Nastavi začasno mapo\n"
+" -c=? Prebere podano datoteko z nastavitvami\n"
+" -o=? Nastavi poljubno nastavitveno možnost, na primer. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Ni mogoče ugotoviti različice debconfa. Je sploh nameščen?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Ni mogoče najti paketa %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s je nastavljen na samodejno nameščen.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Ta ukaz je zastarel. Namesto njega uporabite 'apt-mark auto' in 'apt-mark "
+"manual'."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Notranja napaka, reševalnik težav je pokvaril stvari"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Podprti moduli:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Uporaba: apt-get [možnosti] ukaz\n"
+" apt-get [možnosti] install|remove paket1 [paket2 ...]\n"
+" apt-get [možnosti] source paket1 [paket2 ...]\n"
+"\n"
+"apt-get je enostaven vmesnik ukazne vrstice za prejem in nameščanje\n"
+"paketov. Najbolj pogosto uporabljana ukaza sta update in install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Pridobi nove sezname paketov"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Izvedix nadgradnjo"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Namesti nove pakete (paket je libc6, ne libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Namesti nove pakete (paket je libc6, ne libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Odstrani pakete"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Odstrani pakete in nastavitvene datoteke"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Samodejno odstrani vse neuporabljene pakete"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Nadgradnja distribucije, oglejte si apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Sledi izbiri dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Nastavi odvisnosti gradnje za paket izvorne kode"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Izbriši prejete datoteke arhivov"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Izbriše stare prejete datoteke arhivov"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Preveri, da ni pokvarjenih odvisnosti"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Prejmi arhive izvorne kode"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Prejmi binarni paket v trenutno mapo"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Prejmi in prikaže dnevnik sprememb za dani paket"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr ""
+"Potrebno je navesti vsaj en paket, za katerega želite dobiti izvorno kodo"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Uporaba: apt-internal-solver\n"
+"\n"
+"apt-internal-solver je vmesnik za uporabo trenutnega notranjega\n"
+"reševalnika kot zunanji reševalnik za družino APT za razhroščevanje ali "
+"podobno.\n"
+"\n"
+"Možnosti:\n"
+" -h To besedilo pomoči\n"
+" -q Izhod se beleži - ni kazalnika napredka\n"
+" -c=? Prebere to nastavitveno datoteko\n"
+" -o=? Nastavi poljubno nastavitveno možnost, na primer dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Uporaba: apt-internal-solver\n"
+"\n"
+"apt-internal-solver je vmesnik za uporabo trenutnega notranjega\n"
+"reševalnika kot zunanji reševalnik za družino APT za razhroščevanje ali "
+"podobno.\n"
+"\n"
+"Možnosti:\n"
+" -h To besedilo pomoči\n"
+" -q Izhod se beleži - ni kazalnika napredka\n"
+" -c=? Prebere to nastavitveno datoteko\n"
+" -o=? Nastavi poljubno nastavitveno možnost, na primer dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "paket %s ne more biti označen, ker ni nameščen.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "paket %s je bil že nastavljen na ročno nameščen.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "paket %s je bil že nastavljen kot samodejno nameščen.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Naslednji NOVI paketi bodo nameščeni:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "paket %s je bil že nastavljen kot na čakanju.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "paket %s je bil že nastavljen kot ne na čakanju.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Izvajanje dpkg je spodletelo. Ali ste skrbnik?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "paket %s je nastavljen kot na čakanju.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Čakanje za %s je bilo preklicano.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Uporaba: apt-mark [možnosti] {auto|manual} paket1 [paket2 ...]\n"
+"\n"
+"apt-mark je enostaven vmesnik ukazne vrstice za označevanje paketov\n"
+"kot ročno ali samodejno nameščenih. Oznake lahko tudi izpiše.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Označi dane pakete kot samodejno nameščene"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Označi dane pakete kot ročno nameščene"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Označi dane pakete kot samodejno nameščene"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Neznan zapis paketa!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Branje seznama paketov"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Pripeti paketi:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Pripeti paketi:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Pokvarjeni paketi"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "vendar je navidezen paket"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Branje podatkov o stanju"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Napačna privzeta nastavitev!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Za nadaljevanje pritisnite vnosno tipko."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Ali želite izbrisati vse predhodno prejete datoteke .deb?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Med razširajanjem je prišlo do nekaterih napak. Paketi, ki so bili nameščeni"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "bodo bili nastavljeni. To lahko povzroči podvojene napake"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"ali do napak zaradi manjkajočih odvisnosti. To je v redu, pomembne so samo "
+"napake"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "nad tem sporočilom. Popravite jih in poženite Namest[I]tev še enkrat"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Združevanje razpoložljivih podaktov"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Seznam razširitev paketov je predolg"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Napaka med obdelavo mape %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Seznam razširitev virov je predolg"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Napaka med pisanjem glave v datoteko vsebine"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Napaka med obdelavo vsebine %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Uporaba: apt-ftparchive [možnosti] ukaz\n"
+"Ukazi: packages, binarypath [datoteka prepisa [predpona poti]]\n"
+" sources srcpath [datoteka prepisa [predpona poti]]\n"
+" contents path\n"
+" release path\n"
+" generate config [skupine]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive ustvari datoteke kazala za arhive Debian. Podpira\n"
+"več slogov ustvarjanja od popolnoma samodejnih do funkcionalnih zamenjav\n"
+"za dpkg-scanpackages in dpkg-scansources\n"
+"\n"
+"apt-ftparchive ustvari datoteke paketov iz drevesa .debs. Datoteka\n"
+"paketa vsebuje vsebino vseh nadzornih polj iz vsakega paketa kot tudi\n"
+"razpršilo MD5 in velikost datoteke. Datoteka prepisa podpira vsiljenje\n"
+"vrednosti Prednosti in Odseka.\n"
+"\n"
+"Podobno apt-ftparchive ustvari datoteke paketov iz drevesa .dscs.\n"
+"Možnost --source-override je mogoče uporabiti za navedbo datoteke prepisa "
+"src\n"
+"\n"
+"Ukaza 'packages' in 'sources' je treba zagnati v korenu drevesa.\n"
+"BinaryPath bi morala kazati na osnovno mapo rekurzivnega iskanja in\n"
+"datoteka prepisa bi morala vsebovati zastavice prepisa Predpona je pripeta\n"
+"v polja imena datoteke, če je prisotna. Primer uporabe iz arhiva Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Možnosti:\n"
+" -h To besedilo pomoči\n"
+" --md5 ustvarjanje nadzorne vsote MD5\n"
+" -s=? datoteka prepisa vira\n"
+" -q tiho\n"
+" -d=? izbere izbirno podatkovno zbirko pomnilnika\n"
+" --no-delink omogoči način razhroščevanja razvezovanja\n"
+" --contents nadzira ustvarjanje datoteke vsebine\n"
+" -c=? prebere to nastavitveno datoteko\n"
+" -o=? nastavi poljubno možnost nastavitve"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Nobena izbira se ne ujema"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Nekatere datoteke manjkajo v skupini datotek paketov `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Podatkovna zbirka je pokvarjena, datoteka je preimenovana v %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "PZ je star, poskušanje nadgradnje %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Oblika podatkovne zbirke je neveljavna. V kolikor ste nadgradili s starejše "
+"različice apt, podatkovno zbirko odstranite in jo znova ustvarite."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Ni mogoče odprti datoteke PZ %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Napaka med branjem povezave %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arhiv nima nadzornega zapisa"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Ni mogoče najti kazalke"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Napaka med dodeljevanjem pomnilnika"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Neznan algoritem stiskanja '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Stisnjen izhod %s potrebuje niz stiskanja"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Ustvarjanje cevi IPC do podopravila je spodletelo"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Vejitev ni uspela"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Podrejeni predmet stiskanja"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Notranja napaka. Ni mogoče ustvariti %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "VI podopravila/datoteke je spodletel"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Med računanjem MD5 ni mogoče brati"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Ni mogoče odpreti %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Slabo oblikovan prepis %s v vrstici %llu št. 1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Napaka med branjem prepisane datoteke %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Slabo oblikovan prepis %s v vrstici %llu št. 1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Slabo oblikovan prepis %s v vrstici %llu št. 1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Slabo oblikovan prepis %s v vrstici %llu št. 3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "O: ni mogoče brati mape %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "O: Ni mogoče določiti %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "O: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "N: Napake se sklicujejo na datoteko "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Ni mogoče razrešiti %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Hoja drevesa je spodletela"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Ni mogoče odprti %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " RazVeži %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Napaka med povezovanjem %s in %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Dosežena meja RazVezovanja %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arhiv ni imel polja s paketom"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s nima prepisanega vnosa\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " Vzdrževalec %s je %s in ne %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s nima izvornega vnosa prepisa\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s nima tudi binarnega vnosa prepisa\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Čakanje na glave"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Strežnik HTTP je poslal neveljavno glavo odgovora"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Neveljavna vrstica glave"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Strežnik HTTP je poslal glavo z neveljavno dolžino vsebine"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Strežnik HTTP je poslal glavo z neveljavnim obsegom vsebine"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Ta strežnik HTTP ima pokvarjen obseg podpore"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Neznana oblika datuma"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Napačni podatki glave"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Povezava ni uspela"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Notranja napaka"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Ni mogoče brati podatkovne zbirke %s na CD-ROM-u"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Uporabite apt-cdrom, če želite, da APT prepozna CD. apt-get update ne more "
+"sam dodati novih CD-ROM-ov"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Napačen CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Ni mogoče odklopiti CD-ROM-a v %s, ker je morda še v uporabi."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Diska ni mogoče najti."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Datoteke ni mogoče najti"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Povezovanje z %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Povezovanje z %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Ni mogoče ustvariti vtiča za %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Ni mogoče začeti povezave z %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Spodletelo"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Ni se mogoče povezati z %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Ni se mogoče povezati z %s:%s (%s). Povezava je zakasnela."
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Povezovanje z %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Ni mogoče razrešiti '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Začasna napaka med razreševanjem '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Nekaj čudnega se je zgodilo med razreševanjem '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Nekaj čudnega se je zgodilo med razreševanjem '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Ni se mogoče povezati z %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Določitev ni uspela"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Neveljaven URI. Krajevni URI-ji se morajo začeti z //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Prijavljanje"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Ni mogoče ugotoviti imena gostitelja"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Ni mogoče določiti krajevnega imena"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Strežnik je zavrnil povezavo in sporočil: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER je spodletel, strežnik je odgovoril: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS je spodletel, strežnik je odgovoril: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Naveden je bil posredniški strežnik, ne pa tudi prijavni skript. Acquire::"
+"ftp::ProxyLogin je prazen."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Ukaz prijavne skripte '%s' ni uspel, strežnik je odgovoril: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE je spodletel, strežnik je odgovoril: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Povezava je zakasnela"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Strežnik je zaprl povezavo"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Odgovor je prekoračil predpomnilnik."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Okvara protokola"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Ni mogoče ustvariti vtiča"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Ni mogoče povezati podatkovnega vtiča. Povezava je zakasnela."
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Ni mogoče povezat pasivnega vtiča."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo ni mogel dobiti poslušajočega vtiča"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Ni mogoče povezati vtiča"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Ni mogoče poslušati na vtiču"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Ni mogoče določiti imena vtiča"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Ni mogoče poslati ukaza PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Neznan naslov družine %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT ni uspel, strežnik je odgovoril: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Povezava podatkovne vtičnice je zakasnela"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Ni mogoče sprejeti povezave"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Težava med razprševanjem datoteke"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Ni mogoče pridobiti datoteke, strežnik je odgovoril '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Podatkovna vtič je potekel"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Prenos podatkov ni uspel, strežnik je odgovoril '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Poizvedba"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Ni mogoče klicati "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Najden je bil vsaj en neveljaven podpis."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Notranja napaka: Dober podpis, toda ni mogoče določiti podpisa ključa?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Ni mogoče izvesti 'apt-key' za preverjanje podpisa (je gnupg nameščen?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Neznana napaka med izvajanjem apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Naslednji podpisi so bili neveljavni:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Naslednjih podpisov ni mogoče preveriti, ker javni ključ ni na voljo:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Napaka med pisanjem v datoteko"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Napaka med branjem s strežnika. Oddaljeni del je zaprl povezavo"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Napaka med branjem s strežnika"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Napaka med pisanjem v datoteko"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Izbira ni uspela"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Povezava je zakasnela"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Napaka med pisanjem v izhodno datoteko"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Nastavitev časa spremembe je spodletela"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Povezava se je prezgodaj zaprla"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Prazne datoteke ne morejo biti veljavni arhivi"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Neveljavna glava arhiva člana %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s je bil odstranjen"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Datoteka paketa %s ni usklajena."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Datoteke s kazali paketov so pokvarjene. Brez imena datotek: polje za "
+#~ "paket %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Datoteke zrcalnih strežnikov '%s' ni mogoče najti "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Datoteke zrcalnega strežnika '%s' ni mogoče prebrati"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Datoteke zrcalnega strežnika '%s' ni mogoče prebrati"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Zrcalni strežnik: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Odpiranje nastavitvene datoteke %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Odpiranje %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Ni mogoče najti pričakovanega vnosa '%s' v datoteki Release (napačen vnos "
+#~ "sources.list ali slabo oblikovana datoteka)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Nerešene odvisnosti. Poskusite uporabiti --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Poskusite zagnati 'apt --fix-broken install', če želite popraviti "
+#~ "naslednje:"
+
+#~ msgid "(not found)"
+#~ msgstr "(ni najdeno)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Bucika paketa: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Za naslednje ID-je ključa ni na voljo javnih ključev:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Mapa %s je odklonjena"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "odvisnosti %s za %s ni mogoče zadovoljiti, ker %s ni dovoljen na paketih "
+#~ "'%s'"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%s odvisnosti za %s ni mogoče zadostiti, ker ni mogoče najti paketa %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Ni mogoče zadostiti %s odvisnosti za %s. Nameščen paket %s je preveč nov"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "odvisnosti %s za %s ni mogoče zadovoljiti, ker je različica kandidata "
+#~ "paketa %s ne more zadostiti zahtev različice"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "odvisnosti %s za %s ni mogoče zadovoljiti, ker je različica kandidata "
+#~ "paketa %s nima različice kandidata"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Ni mogoče zadostiti %s odvisnosti za %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Odvisnosti za gradnjo %s ni bilo mogoče zadostiti."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Napaka med odvezovanjem %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Napaka med odvezovanjem %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Uporaba: apt-cache [možnosti] ukaz\n"
+#~ " apt-cache [možnosti] show paket1 [paket2 ...]\n"
+#~ "\n"
+#~ "apt-cache je orodje nizke ravni za poizvedbo podatkov\n"
+#~ "iz binarni datotek predpomnilnika APT\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Možnosti:\n"
+#~ " -h To besedilo pomoči.\n"
+#~ " -p=? Predpomnilnik paketov.\n"
+#~ " -s=? Predpomnilnik izvorne kode.\n"
+#~ " -q Onemogoči kazalnik napredka.\n"
+#~ " -i Pokaže le pomembne odvisnosti za neujemajoč ukaz.\n"
+#~ " -c=? Prebere to nastavitveno datoteko\n"
+#~ " -o=? Nastavi poljubno možnost nastavitve, na primer -o dir::cache=/tmp\n"
+#~ "Za več podrobnosti si oglejte strani priročnikov apt-cache(8) in apt."
+#~ "conf(5).\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Možnosti:\n"
+#~ " -h To besedilo pomoči.\n"
+#~ " -q Izhod se beleži - brez kazalnika napredka\n"
+#~ " -qq Brez izhoda razen napak\n"
+#~ " -s Ne naredi ničesar. Samo napiše kaj bi bilo narejeno.\n"
+#~ " -f Prebere/zapiše oznako ročno/samodejno za dano datoteko\n"
+#~ " -c=? Prebere to nastavitveno datoteko\n"
+#~ " -o=? Nastavi poljubno nastavitveno možnost, na primer -o dir::cache=/"
+#~ "tmp\n"
+#~ "Za več podrobnosti si oglejte strani priročnika apt-mark(8) in apt-"
+#~ "conf(5)."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Možnosti:\n"
+#~ " -h To besedilo pomoči.\n"
+#~ " -c=? Prebere podano datoteko z nastavitvami\n"
+#~ " -o=? Nastavi poljubno nastavitveno možnost, na primer. -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Možnosti:\n"
+#~ " -h To besedilo pomoči.\n"
+#~ " -q Izhod se beleži - brez kazalnika napredka\n"
+#~ " -qq Brez izhoda razen napak\n"
+#~ " -s Ne naredi ničesar. Samo napiše kaj bi bilo narejeno.\n"
+#~ " -f Prebere/zapiše oznako ročno/samodejno za dano datoteko\n"
+#~ " -c=? Prebere to nastavitveno datoteko\n"
+#~ " -o=? Nastavi poljubno nastavitveno možnost, na primer -o dir::cache=/"
+#~ "tmp\n"
+#~ "Za več podrobnosti si oglejte strani priročnika apt-mark(8) in apt-"
+#~ "conf(5)."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Uporaba: apt-sortpkgs [možnosti] dat1 [dat2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs je preprosto orodje za razvrščanje paketnih datotek. Možnost "
+#~ "-s\n"
+#~ "določa vrsto datoteke.\n"
+#~ "\n"
+#~ "Možnosti:\n"
+#~ " -h to besedilo pomoči\n"
+#~ " -s uporabi razvrščanje izvornih datotek\n"
+#~ " -c=? Prebere podano datoteko z nastavitvami\n"
+#~ " -o=? Nastavi poljubno nastavitveno možnost, npr. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Podrejeno opravilo ni uspelo"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr ""
+#~ "Potrebno je navesti vsaj en paket, za katerega želite dobiti izvorno kodo"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Ni mogoče ustvariti pip"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Ni mogoče izvesti gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s za %s kodno preveden na %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Ustvarjanje DATOTEKE* ni uspelo"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Slabo oblikovana vrstica %lu v seznamu virov %s (razčlenitev URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Slabo oblikovana vrstica %lu na seznamu virov %s ([možnosti] ni mogoče "
+#~ "razčleniti)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Slabo oblikovana vrstica %lu na seznamu virov %s ([možnost] prekratka)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Slabo oblikovana vrstica %lu na seznamu vrstic %s ([%s] ni dodelitev)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Slabo oblikovana vrstica %lu na seznamu virov %s ([%s] nima ključa)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Slabo oblikovana vrstica %lu na seznamu virov %s ([%s] ključ %s nima "
+#~ "vrednosti)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Slabo oblikovana vrstica %lu v seznamu virov %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Slabo oblikovana vrstica %lu v seznamu virov %s (distribucija)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Slabo oblikovana vrstica %lu v seznamu virov %s (razčlenitev URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Slabo oblikovana vrstica %lu v seznamu virov %s (absolutna distribucija)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr ""
+#~ "Slabo oblikovana vrstica %lu v seznamu virov %s (razčlenitev distribucije)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Paketa %s %s ni bilo mogoče najti med obdelavo odvisnosti datotek"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Ni mogoče določiti seznama izvornih paketov %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Zbiranje dobaviteljev datotek"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Datoteka %s se ne začne s čisto podpisanim sporočilom"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Ni mogoče najti vsote razprševanja za '%s' v datoteki Release"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Ponudnikov blok %s ne vsebuje prstnega podpisa"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Celotna velikost z odvisnostmi različice: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Nimate dovolj prostora na %s"
+
+#~ msgid "Done"
+#~ msgstr "Opravljeno"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "V %s ni nameščenih zbirk ključev."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Notranja napaka zaradi AllUpgrade."
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ni veljaven paket DEB."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Uporabljanje CD-ROM-ove priklopne točke %s\n"
+#~ "Priklapljanje CD-ROM-a\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s ni mogoče zakrpati z mmap in z uporabo opravila datotek - popravek je "
+#~ "videti pokvarjen"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s ni mogoče zakrpati z mmap (toda napaka ni specifična za mmap) - "
+#~ "popravek je videti pokvarjen."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Prezri nerazpoložljiv cilj izdaje '%s' paketa '%s'"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Prejemanje %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "To ni veljaven arhiv DEB, nima člana '%s', '%s' ali '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Neujemanje vsote MD5"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Ni bilo mogoče najti datoteke za paket %s. Morda boste morali ročno "
+#~ "popraviti ta paket."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Ni mogoče pisati dnevnika, openpty() je spodletelo (/dev/pts ni "
+#~ "prklopljen?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Preskok neobstoječe datoteke %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Odstranitev %s ni uspela"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Ni mogoče ustvariti %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Določitev %sinfo ni uspela"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Podatki in začasne mape morajo biti na istem datotečnem sistemu"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Sprememba v skrbnikovo mapo %sinfo ni uspela"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Notranja napaka med dobivanjem imena paketa"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Branje seznama datotek"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Odpiranje datoteke s seznamom '%sinfo/%s' ni uspelo. Če ne morete "
+#~ "obnoviti datoteke, jo izpraznite in takoj znova namestite enako različico "
+#~ "paketa!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Branje datoteke s seznamom %sinfo/%s ni uspelo"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Notranja napaka med dobivanjem vozlišča"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Odpiranje datoteke z odklonom %sdiversions ni uspelo"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Datoteka z odklonom je pokvarjena"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Neveljavna vrstica v datoteki z odklonom: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Notranja napaka med dodajanjem odklona"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Najprej se mora začeti predpomnilnik paketov"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Napaka med iskanjem paketa: glava, odmik %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Napačna izbira ConfFile v datoteki stanja. Odmik %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Napaka med razčlenjevanjem MD5. Odmik %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Ni mogoče spremeniti v %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Ni mogoče najti veljavne nadzorne datoteke"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Ni mogoče odprti cevi za %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Napaka med branjem iz opravila %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Dobljena je ena vrstica glave preko %u znakov"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Napačno oblikovana prepisana vrstica %s %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Napačno oblikovana prepisana vrstica %s %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Napačno oblikovanje prepisane vrstice %s %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "program za razširjanje"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "branje, še vedno %lu za branje, a nobeden ni ostal"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "pisanje, še vedno %lu za pisanje, a ni mogoče"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Prišlo je do napake med obdelavo %s (Nov paket)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Prišlo je do napake med obdelavo %s (Uporabi paket 1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Med obdelovanjem %s je prišlo do napake (NovOpisDatoteke1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Prišlo je do napake med obdelavo %s (Uporabi paket 2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Prišlo je do napake med obdelavo %s (Nova različica datoteke 1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Med obdelovanjem %s je prišlo do napake (NovaRazličica%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Prišlo je do napake med obdelavo %s (Uporabi paket 3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Med obdelovanjem %s je prišlo do napake (NovOpisDatoteke2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Prišlo je do napake med obdelavo %s (Najdi paket)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Prišlo je do napake med obdelavo %s (Zberi dobavitelje datotek)"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Ni mogoče izvesti takojąnje nastavitve že razpakiranega '%s'. Oglejte si "
+#~ "man 5 apt.conf pod APT::Takojšnja-Nastavitev za podrobnosti"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..144b7ba
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,4511 @@
+# Advanced Package Tool - APT message translation catalog
+# Swedish messages
+# Copyright © 2002-2015 Free Software Foundation, Inc.
+# This file is distributed under the same license as the apt package.
+# Peter Karlsson <peterk@debian.org>, 2002-2008.
+# Daniel Nylander <po@danielnylander.se>, 2005-2010.
+# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2015-08-19 21:33+0200\n"
+"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
+"Language-Team: Swedish <debian-l10n-swedish@debian.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.8.3\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Ogiltig arkivsignatur"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Fel vid läsning av rubrik för arkivdel"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Ogiltigt arkivdelsrubrik"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arkivet är för kort"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Misslyckades med att läsa arkivrubriker"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Kan inte hitta autentiseringspost för: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Skadat arkiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar-kontrollsumma misslyckades, arkivet skadat"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Okänd TAR-rubriktyp %u, del %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Detta är inte ett giltigt DEB-arkiv, delen ”%s” saknas"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Internt fel, kunde inta hitta delen %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Kunde inte tolka control-filen"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Misslyckades med att skriva filen %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Misslyckades med att stänga filen %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Sökvägen %s är för lång"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Packar upp %s flera gånger"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Katalogen %s är omdirigerad"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Paketet försöker att skriva till omdirigeringsmålet %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Omdirigeringssökvägen är för lång"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Misslyckades med att ta status på %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Misslyckades med att byta namn på %s till %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Katalogen %s ersätts av en icke-katalog"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Misslyckades med att hitta noden i sin hashkorg"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Sökvägen är för lång"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Skriv över paketträff utan version för %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Filen %s/%s skriver över den i paketet %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Kunde inte läsa %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Kunde inte ta status på %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode anropat på fortfarande länkad nod"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Misslyckades med att hitta hash-elementet!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Misslyckades med att allokera omdirigering"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Internt fel i AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Försöker att skriva över en omdirigering, %s -> %s och %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Omdirigeringen %s -> %s inlagd två gånger"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Duplicerad konfigurationsfil %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Förrådet ”%s” är inte längre signerat."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Förrådet ”%s” är inte längre signerat."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Detta är vanligen inte tillåtet, men flaggan Acquire::"
+"AllowDowngradeToInsecureRepositories gavs för att åsidosätta detta."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Förrådet ”%s” är inte längre signerat."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Förrådet ”%s” är inte längre signerat."
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Förrådet ”%s” är inte längre signerat."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Misslyckades med att läsa länken %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hash-kontrollsumman stämmer inte"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "namnbyte misslyckades, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Storleken stämmer inte"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Ogiltigt filformat"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "Signaturfel"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Klartextsignerad fil är inte giltig, fick ”%s” (kräver nätverket "
+"autentisering?)"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Ett fel inträffade vid verifiering av signaturen. Förrådet har inte "
+"uppdaterats och de tidigare indexfilerna kommer att användas. GPG-fel: %s: "
+"%s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG-fel: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Release-fil för %s har gått ut (ogiltig sedan %s). Uppdateringar för detta "
+"förråd kommer inte verkställas."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Release-fil för %s har gått ut (ogiltig sedan %s). Uppdateringar för detta "
+"förråd kommer inte verkställas."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Konflikt i distribution: %s (förväntade %s men fick %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Misslyckades med att hämta %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Jag kunde inte hitta någon fil för paketet %s. Detta kan betyda att du "
+"manuellt måste reparera detta paket (på grund av saknad arkitektur)."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Kan inte hitta en källa för att hämta version ”%s” av ”%s”"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Ändringslogg för %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Metoddrivrutinen %s kunde inte hittas."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Är paketet %s installerat?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Metoden %s startade inte korrekt"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Mata in skivan med etiketten ”%s” i enheten ”%s” och tryck på [Retur]."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Listkatalogen %s saknas."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Arkivkatalogen %s saknas."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Kunde inte låsa katalogen %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Can't drop privileges for downloading as file '%s' couldn't be accessed "
+#| "by user '%s'."
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"Kan inte släppa privilegier för hämtning eftersom filen ”%s” inte kunde "
+"kommas åt av användaren ”%s”."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Rensning av %s stöds inte"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Hämtar fil %li av %li (%s återstår)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Hämtar fil %li av %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Paketet %s måste installeras om, men jag kan inte hitta något arkiv för det."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Fel, pkgProblemResolver::Resolve genererade avbrott; detta kan bero på "
+"tillbakahållna paket."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Kunde inte korrigera problemen, du har hållit tillbaka trasiga paket."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Paketlistan eller statusfilen kunde inte tolkas eller öppnas."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Du kan möjligen rätta till problemet genom att köra ”apt-get update”"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Listan över källor kunde inte läsas."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Fel vid kompilering av reguljärt uttryck - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Utgåvan ”%s” för ”%s” hittades inte"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Version ”%s” för ”%s” hittades inte"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Kunde inte hitta funktionen ”%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Kunde inte hitta något paket enligt reguljära uttrycket ”%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Kunde inte hitta något paket med sökmönstret ”%s”"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Kunde inte hitta paketet %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+"Kan inte välja versioner från paketet ”%s” eftersom det är helt virtuellt"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Kan inte välja senaste version från paketet ”%s” eftersom det är helt "
+"virtuellt"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+"Kan inte välja kandidatversion från paketet %s eftersom det inte har någon "
+"kandidat"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Kan inte välja installerad version från paketet %s eftersom det inte är "
+"installerat"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Kan inte välja installerad version eller kandidatversion från paketet ”%s” "
+"eftersom det inte har någon av dem"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Rad %u är för lång i källistan %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Avmonterar cd-rom…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Använder cd-rom-monteringspunkten %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Väntar på skiva…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Monterar cd-rom…\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Identifierar… "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Lagrad etikett: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Söker efter indexfiler på skivan…\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Hittade %zu paketindex, %zu källkodsindex, %zu översättningsindex och %zu "
+"signaturer\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Kunde inte hitta några paketfiler. Detta är kanske inte en Debian-skiva "
+"eller felaktig arkitektur?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Hittade etiketten ”%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Namnet är ogiltigt, försök igen.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Denna skiva heter: \n"
+"”%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kopierar paketlistor…"
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Skriver ny källista\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Poster i källistan för denna skiva:\n"
+
+# Felmeddelande för misslyckad chdir
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Kunde inte byta till %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Kunde inte ta status på %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Kunde inte ta status på monteringspunkten %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Kunde inte ta status på cd-romen"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Kommandoradsflaggan ”%c” [från %s] är inte känd."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Förstår inte kommandoradsflaggan %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Kommandoradsflaggan %s är inte boolesk"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Flaggan %s kräver ett argument."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Flaggan %s: Den angivna konfigurationsposten måste innehålla ett =<värde>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Flaggan %s kräver ett heltalsargument, inte ”%s”"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Flaggan ”%s” är för lång"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Förstår inte %s, prova med ”true” eller ”false”."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Felaktig åtgärd %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Okänd typförkortning: ”%c”"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntaxfel %s:%u: Block börjar utan namn."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntaxfel %s:%u: Felformat märke"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntaxfel %s:%u: Överflödigt skräp efter värde"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Syntaxfel %s:%u: Direktiv kan endast utföras på toppnivån"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntaxfel %s:%u: För många nästlade inkluderingar"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntaxfel %s:%u: Inkluderad härifrån"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntaxfel %s:%u: Direktivet ”%s” stöds inte"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "Syntaxfel %s:%u: clear-direktivet kräver ett flaggträd som argument"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntaxfel %s:%u: Överflödigt skräp vid filens slut"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problem med att avlänka filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Använder inte låsning för skrivskyddade låsfilen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Kunde inte öppna låsfilen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Använder inte låsning för nfs-monterade låsfilen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Kunde inte erhålla låset %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Lista över filer kan inte skapas eftersom ”%s” inte är en katalog"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Ignorerar ”%s” i katalogen ”%s” eftersom det inte är en vanlig fil"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Ignorerar filen ”%s” i katalogen ”%s” eftersom den inte har en filändelse"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Ignorerar filen ”%s” i katalogen ”%s” eftersom den har en ogiltig filändelse"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Väntade på %s men den fanns inte där"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Underprocessen %s råkade ut för ett segmenteringsfel."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Underprocessen %s tog emot signal %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Underprocessen %s svarade med en felkod (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Underprocessen %s avslutades oväntat"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Läsfel"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Skrivfel"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problem med att stänga gzip-filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Misslyckades med att skapa underprocess-IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Misslyckades med att starta komprimerare "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Kunde inte öppna filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Kunde inte öppna filhandtag %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "läsning, har fortfarande %llu att läsa men ingenting finns kvar"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "skrivning, har fortfarande %llu att skriva men kunde inte"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Problem med att stänga filen %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problem med att byta namn på filen %s till %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problem med att synkronisera filen"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Kunde inte anropa mkstemp för %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Kunde inte skriva till %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Kan inte utföra mmap på en tom fil"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Kunde inte utföra mmap på %llu byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Kunde inte duplicera filhandtag %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Kunde inte stänga mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Kunde inte synkronisera mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Kunde inte utföra mmap på %lu byte"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Misslyckades med att kapa av filen"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dynamisk MMap fick slut på utrymme. Öka storleken för APT::Cache-Start. "
+"Aktuellt värde: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Kunde inte öka storleken för MMap eftersom gränsen på %lu byte redan har "
+"uppnåtts."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Kunde inte öka storleken för MMap eftersom automatisk växt har inaktiverats "
+"av användaren."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s… Fel!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s… Färdig"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "…"
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s… %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%lid %lih %limin %lis"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%lih %limin %lis"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%limin %lis"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%lis"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Valet %s hittades inte"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Kunde inte tolka Release-filen %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Inga sektioner i Release-filen %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Ingen Hash-post i Release-filen %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Ogiltig ”%s”-post i Release-filen %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Kunde inte tolka paketfilen %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Kunde inte låsa administrationskatalogen (%s). Använder en annan process den?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Kunde inte låsa administrationskatalogen (%s). Är du root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg avbröts. Du måste köra ”%s” manuellt för att korrigera problemet. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Kunde inte låsa administrationskatalogen (%s). Använder en annan process den?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Kunde inte låsa administrationskatalogen (%s). Är du root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Inte låst"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Förbereder %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Förbereder konfigurering av %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Förbereder borttagning av %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Förbereder borttagning av hela %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Uppmärksammar försvinnandet av %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Kör efterinstallationsutlösare %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Installerade %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Konfigurerar %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Katalogen ”%s” saknas"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Kunde inte öppna filen ”%s”"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Packar upp %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Installerar %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Tar bort %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Tar bort hela %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Tog bort hela %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Kan inte skriva logg (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "Är /dev/pts monterad?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Åtgärden avbröts innan den kunde slutföras"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "Ingen apport-rapport skrevs därför att MaxReports redan har uppnåtts"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "beroendeproblem - lämnar okonfigurerad"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Ingen apport-rapport skrevs därför att felmeddelandet indikerar att det är "
+"ett efterföljande fel från ett tidigare problem."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Ingen apport-rapport skrevs därför att felmeddelandet indikerar att "
+"diskutrymmet är slut"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Ingen apport-rapport skrevs därför att felmeddelandet indikerar att minnet "
+"är slut"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Ingen apport-rapport skrevs därför att felmeddelandet indikerar ett problem "
+"på det lokala systemet"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Ingen apport-rapport skrevs därför att felmeddelandet indikerar ett in-/ut-"
+"fel för dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Bygger beroendeträd"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Kandiderande versioner"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Beroendegenerering"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Läser tillståndsinformation"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Misslyckades med att öppna StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Misslyckades med att skriva temporär StateFile %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Skicka scenario till lösare"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Skicka förfrågan till lösare"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Förbered för att motta lösning"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Extern lösare misslyckades utan något informativt felmeddelande"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Kör extern lösare"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Kör extern lösare"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Skicka förfrågan till lösare"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Skicka scenario till lösare"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "Extern lösare misslyckades utan något informativt felmeddelande"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Skrev %i poster.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Skrev %i poster med %i saknade filer.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Skrev %i poster med %i filer som inte stämmer\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Skrev %i poster med %i saknade filer och %i filer som inte stämmer\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Kan inte hitta autentiseringspost för: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash-kontrollsumman stämmer inte för: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Paketsystemet ”%s” stöds inte"
+
+#
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Kunde inte fastställa en lämplig paketsystemstyp"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Förlopp: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Kör dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Kunde inte genomföra omedelbar konfiguration på ”%s”. Se man 5 apt.conf "
+"under APT::Immediate-Configure för information. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Kunde inte konfigurera ”%s”. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"För att genomföra installationen måste det systemkritiska paketet %s "
+"tillfälligt tas bort på grund av en beroendespiral i Conflicts/Pre-Depends. "
+"Detta är oftast en dålig idé, men om du verkligen vill göra det kan du "
+"aktivera flaggan ”APT::Force-LoopBreak”."
+
+# Felmeddelande
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Paketcachen är tom"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Paketcachefilen är skadad"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Paketcachefilens version är inkompatibel"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Denna APT saknar stöd för versionssystemet ”%s”"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Paketcachen byggdes för andra arkitekturer: %s gentemot %s"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Paketcachefilen är skadad, den är för liten"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Beroende av"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Förberoende av"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Föreslår"
+
+# "Konfliktar"?
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Står i konflikt med"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Rekommenderar"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Ersätter"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Gör sönder"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Utökar"
+
+# "Föråldrar"?
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Föråldrar"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "viktigt"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "nödvändigt"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "valfri"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Cachen har ett inkompatibelt versionssystem"
+
+# NewPackage etc. är funktionsnamn
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Fel uppstod vid hantering av %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Grattis, du överskred antalet paketnamn som denna APT kan hantera."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Grattis, du överskred antalet versioner som denna APT kan hantera."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Grattis, du överskred antalet beskrivningar som denna APT kan hantera."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Grattis, du överskred antalet beroenden som denna APT kan hantera."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Läser paketlistor"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "In-/utfel vid lagring av källcache"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Indexfiler av typ ”%s” stöds inte"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Värdet ”%s” är ogiltigt för APT::Default-Release eftersom ingen sådan utgåva "
+"är tillgänglig i källorna"
+
+# "Package" är en sträng i konfigurationsfilen
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Ogiltig post i konfigurationsfilen %s, ”Package”-rubriken saknas"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Förstod inte nåltypen %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Prioritet ej angiven (eller noll) för nål"
+
+# parametrar: filnamn, radnummer
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Felaktig åsidosättning %s rad %llu (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Rad %u i källistan %s har fel format (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Typ ”%s” är inte känd på rad %u i källistan %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Rad %u i källistan %s har fel format (typ)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Typen ”%s” är inte känd i post %u i källistan %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Du måste lägga till några ”source”-URI:er i din sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Vissa indexfiler kunde inte hämtas. De har ignorerats eller så har de gamla "
+"använts istället."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Beräknar uppgradering"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Bra:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Läs:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ign:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Fel:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Hämtade %sB på %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Arbetar]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Mediabyte: Mata in skivan med etiketten\n"
+" ”%s”\n"
+"i enheten ”%s” och tryck på [Retur]\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Korrigerar beroenden…"
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " misslyckades."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Kunde inte korrigera beroenden"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Kunde inte minimera uppgraderingsuppsättningen"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Färdig"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Du bör köra ”apt --fix-broken install” för att korrigera dessa."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Otillfredsställda beroenden. Prova med ”apt --fix-broken install” utan paket "
+"(eller ange en lösning)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Sorterar"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Observera, väljer \"%s\" för funktionen \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Observera, väljer \"%s\" för det reguljära uttrycket \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Observera, väljer \"%s\" för det reguljära uttrycket \"%s\"\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Paketet %s är ett virtuellt paket som tillhandahålls av:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr "[installerat]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Inte kandidatversion]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Du bör uttryckligen ange ett att installera."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Paketet %s är inte tillgängligt, men ett annat paket hänvisar till det.\n"
+"Det kan betyda att paketet saknas, har blivit föråldrat eller endast\n"
+"är tillgängligt från andra källor\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Dock kan följande paket ersätta det:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Paketet \"%s\" har ingen installationskandidat"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Virtuella paket som \"%s\" kan inte tas bort\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Paketet ”%s” är inte installerat, så det tas inte bort. Menade du ”%s”?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Paketet ”%s” är inte installerat, så det tas inte bort\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Observera, väljer \"%s\" istället för \"%s\"\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Denna APT har Speciella Ko-Krafter."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Denna APT-hjälpare har speciella Meep-krafter."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Inga paket hittades"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "VARNING: Följande paket kunde inte autentiseras!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Autentiseringsvarning åsidosatt.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Några av paketen kunde inte autentiseras"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Installera dessa paket utan verifiering?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Problem har uppstått och -y användes utan --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Kunde inte fastställa ledigt utrymme i %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Du har inte tillräckligt mycket ledigt utrymme i %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Kunde inte låsa hämtningskatalogen"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Några paket kunde inte installeras. Det kan betyda att du har begärt\n"
+"en omöjlig situation eller, om du använder den instabila utgåvan\n"
+"att några nödvändiga paket ännu inte har skapats eller flyttats\n"
+"ut från ”Incoming”."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Följande information kan vara till hjälp för att lösa situationen:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Trasiga paket"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Vissa arkiv kunde inte hämtas. Prova att köra ”apt-get update” eller med --"
+"fix-missing."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Internt fel. InstallPackages anropades med trasiga paket!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Paketen måste tas bort men ”Remove” är inaktiverat."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Problem har uppstått och -y användes utan --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Problem har uppstått och -y användes utan --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr "Problem har uppstått och -y användes utan --force-yes"
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Internt fel. Sorteringen färdigställdes inte"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Konstigt… storlekarna stämde inte överens, skicka e-post till apt@packages."
+"debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Behöver hämta %sB/%sB arkiv.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Behöver hämta %sB arkiv.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Efter denna åtgärd kommer ytterligare %sB utrymme användas på disken.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Efter denna åtgärd kommer %sB att frigöras på disken.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "”Trivial Only” angavs, men detta är inte en trivial handling."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Ja, gör som jag säger!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Du är på väg att göra någonting som kan vara skadligt\n"
+"Skriv in frasen ”%s” för att fortsätta\n"
+" ?] "
+
+# Visas då man svarar nej
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Avbryter."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Vill du fortsätta?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Misslyckades med att hämta vissa filer"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Hämtningen färdig i ”endast-hämta”-läge"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing och mediabyte stöds inte för tillfället"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Kunde inte korrigera saknade paket."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Avbryter installationen."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Följande paket har försvunnit från ditt system eftersom\n"
+"alla filer har skrivits över av andra paket:"
+msgstr[1] ""
+"Följande paket har försvunnit från ditt system eftersom\n"
+"alla filer har skrivits över av andra paket:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Observera: Detta sker med automatik och vid behov av dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+"Det är inte meningen att vi ska ta bort något, kan inte starta AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Hmm, det verkar som AutoRemover förstörde något som verkligen\n"
+"inte skulle hända. Skicka in en felrapport mot paketet apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Internt fel, AutoRemover förstörde något"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Följande paket har installerats automatiskt och är inte längre nödvändigt:"
+msgstr[1] ""
+"Följande paket har installerats automatiskt och är inte längre nödvändiga:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] ""
+"%lu paket blev installerat automatiskt och är inte längre nödvändigt.\n"
+msgstr[1] ""
+"%lu paket blev installerade automatiskt och är inte längre nödvändiga.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Använd ”%s” för att ta bort det."
+msgstr[1] "Använd ”%s” för att ta bort dem."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Följande ytterligare paket kommer att installeras:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Föreslagna paket:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Rekommenderade paket:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Hoppar över %s, det är redan installerat och uppgradering har inte valts.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Hoppar över %s, det är inte installerat och endast uppgraderingar har "
+"begärts.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Ominstallation av %s är inte möjlig, det kan inte hämtas.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s är redan den senaste versionen.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s är satt till manuellt installerad.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Valde version ”%s” (%s) för ”%s”\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Valde version ”%s” (%s) för ”%s” på grund av ”%s”\n"
+
+# Förloppsindikator då lista skapas.
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Listar"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Det finns %i ytterligare version. Använd växeln ”-a” för att se den."
+msgstr[1] ""
+"Det finns %i ytterligare versioner. Använd växeln ”-a” för att se dem."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"OBSERVERA: Detta är endast en simulation!\n"
+" %s behöver root-privilegier för verklig körning.\n"
+" Tänk också på att låsningen är inaktiverad, så\n"
+" förlita dig inte på relevansen till den verkliga situationen!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "okänd"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[installerat,uppgraderingsbart till: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[installerat,lokalt]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[installerat,automatiskt borttagbart]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[installerat,automatiskt]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[installerat]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[uppgraderingsbart från: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[kvarvarande-inställning]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "men %s är installerat"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "men %s kommer att installeras"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "men det kan inte installeras"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "men det är ett virtuellt paket"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "men det kommer inte att installeras"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "men det är inte installerat"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " eller"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Följande paket har beroenden som inte kan tillfredsställas:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Följande NYA paket kommer att installeras:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Följande paket kommer att TAS BORT:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Följande paket har hållits tillbaka:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Följande paket kommer att uppgraderas:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Följande paket kommer att NEDGRADERAS:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Följande tillbakahållna paket kommer att ändras:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (på grund av %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"VARNING: Följande systemkritiska paket kommer att tas bort.\n"
+"Detta bör INTE genomföras såvida du inte vet exakt vad du gör!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu att uppgradera, %lu att nyinstallera, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu att installera om, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu att nedgradera, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu att ta bort och %lu att inte uppgradera.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu är inte helt installerade eller borttagna.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[J/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[j/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "J"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Du måste ange minst ett sökmönster"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Fulltextsökning"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "Det finns %i ytterligare post. Använd växeln ”-a” för att se den."
+msgstr[1] "Det finns %i ytterligare poster. Använd växeln ”-a” för att se dem."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "inte ett riktigt paket (virtuellt)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "”Package”-filer:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Cachen är inte synkroniserad, kan inte korsreferera en paketfil"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Fastnålade paket:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Installerad: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidat: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ingen)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Versionstabell:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Kan inte hitta något paket för arkitekturen ”%s”"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Kan inte hitta något paket ”%s” med versionen ”%s”"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Kunde inte hitta något paket ”%s” med utgåvan ”%s”"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Väljer ”%s” som källkodspaket istället för ”%s”\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Kan inte hitta versionen ”%s” av paketet ”%s”"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Du måste ange minst ett paket att hämta källkod för"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Kunde inte hitta något källkodspaket för %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"OBSERVERA: paketering av ”%s” hanteras i versionshanteringssystemet ”%s” "
+"på:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Använd:\n"
+"%s\n"
+"för att hämta de senaste (möjligen inte utgivna) uppdateringarna av "
+"paketet.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Hoppar över redan hämtade filen ”%s”\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Behöver hämta %sB/%sB källkodsarkiv.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Behöver hämta %sB källkodsarkiv.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Hämtar källkoden %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Misslyckades med att hämta vissa arkiv."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Packar inte upp redan uppackad källkod i %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Uppackningskommandot ”%s” misslyckades.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Försäkra dig om att paketet ”dpkg-dev” är installerat.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Byggkommandot ”%s” misslyckades.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Kunde inte hämta information om byggberoenden för %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s har inga byggberoenden.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Ingen arkitekturinformation tillgänglig för %s. Se apt.conf(5) APT::"
+"Architectures för inställning"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "Du måste ange minst ett paket att kontrollera byggberoenden för"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "Observera, använder katalogen ”%s” för att få byggberoendena\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Observera, använder filen ”%s” för att få byggberoendena\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Misslyckades med att behandla byggberoenden"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Misslyckades med att tolka %s. Redigera igen? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "Din ”%s”-fil ändrades, kör ”apt-get update”.\n"
+
+#: apt-private/private-unmet.cc
+#, fuzzy, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr ""
+"Paketet %s med version %s har ett beroende som inte kan tillfredsställas:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Uppdateringskommandot tar inga argument"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i paket kan uppgraderas. Kör ”apt list --upgradable” för att se det.\n"
+msgstr[1] ""
+"%i paket kan uppgraderas. Kör ”apt list --upgradable” för att se dem.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Alla paket är uppdaterade."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Uppdateringskommandot tar inga argument"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Totalt antal paketnamn: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Totala paketstrukturer: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Vanliga paket: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Helt virtuella paket: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Enstaka virtuella paket: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Blandade virtuella paket: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Saknade: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Totalt antal olika versioner: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Totalt antal olika beskrivningar: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Totalt antal beroenden: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Totalt antal version/filrelationer: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Totalt antal beskrivning/filrelationer: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Totalt antal tillhandahållningsmarkeringar: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Totalt antal sökmönstersträngar: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Totalt bortkastat utrymme: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Totalt utrymme som kan redogöras för: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Detta kommando är föråldrat. Använd ”apt-mark showauto” istället."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Visa källkodsposter"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Sök i paketlistan med ett reguljärt uttryck"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Visa rå information om beroenden för ett paket"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Visa information om omvända beroenden för ett paket"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Visa en läsbar post för paketet"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Lista namnen på alla paket i systemet"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Visa policyinställningar"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Ange ett namn för denna skiva, exempelvis ”Debian 5.0.3 Disk 1”"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Mata in en skiva i enheten och tryck på [Retur]"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Misslyckades med att montera ”%s” till ”%s”"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Ingen cd-rom kunde upptäckas automatiskt eller hittas på standardplatsen för "
+"montering.\n"
+"Du kan pröva flaggan --cdrom för att ställa in monteringsplatsen för cd-"
+"rom.\n"
+"Se ”man apt-cdrom” för vidare information om automatisk upptäckt samt "
+"monteringsplats för cd-rom."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Upprepa proceduren för resten av cd-skivorna i din uppsättning."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argumenten gavs inte parvis"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Användning: apt-config [flaggor] kommando\n"
+"\n"
+"apt-config är ett enkelt verktyg för att läsa APTs konfigurationsfil\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Användning: apt-extracttemplates fil1 [fil2 …]\n"
+"\n"
+"apt-extracttemplates är ett verktyg för att hämta ut konfigurations- \n"
+"och mallinformation från paket\n"
+"\n"
+"Flaggor:\n"
+" -h Denna hjälptext.\n"
+" -t Ställ in temporärkatalogen.\n"
+" -c=? Läs denna konfigurationsfil.\n"
+" -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Kan inte ta reda på debconf-version. Är debconf installerat?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Kunde inte hitta paketet %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s är satt till automatiskt installerad.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Detta kommando är föråldrat. Använd ”apt-mark auto” och ”apt-mark manual” "
+"istället."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Internt fel, problemlösaren förstörde någonting"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Moduler som stöds:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Användning: apt-get [flaggor] kommando\n"
+" apt-get [flaggor] install|remove paket1 [paket2 …]\n"
+" apt-get [flaggor] source paket1 [paket2 …]\n"
+"\n"
+"apt-get är ett enkelt kommandoradsgränssnitt för att hämta och installera\n"
+"paket. De mest använda kommandona är ”update” och ”install”.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Hämta nya paketlistor"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Genomför en uppgradering"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Installera nya paket (paket är libc6, inte libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Installera nya paket (paket är libc6, inte libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Ta bort paket"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Ta bort paket och konfigurationsfiler"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Ta automatiskt bort alla oanvända paket"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Uppgradering av distributionen, se apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Följ valen från dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Tillfredsställ byggberoenden för källkodspaket"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Ta bort hämtade arkivfiler"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Ta bort gamla hämtade arkivfiler"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Kontrollera att det inte finns några trasiga beroenden"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Hämta källkodsarkiv"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Hämta det binära paketet till aktuell katalog"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Hämta och visa ändringslogg för det angivna paketet"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Behöver en URL som argument"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Du måste ange minst ett par bestående av url och filnamn"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Hämtning misslyckades"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Användning: apt-helper [flaggor] kommando\n"
+" apt-helper [flaggor] download-file uri målsökväg\n"
+"\n"
+"apt-helper är en intern hjälpare för apt\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "hämta angiven uri till målsökvägen"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "hitta proxy med hjälp av apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Användning: apt-internal-solver\n"
+"\n"
+"apt-internal-solver är ett gränssnitt för att använda den interna\n"
+"lösaren som en extern lösare för APT-familjen för felsökning eller\n"
+"liknande\n"
+"\n"
+"Flaggor:\n"
+" -h Denna hjälptext.\n"
+" -q Loggbar utmatning - ingen förloppsindikator\n"
+" -c=? Läs denna konfigurationsfil.\n"
+" -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Användning: apt-internal-solver\n"
+"\n"
+"apt-internal-solver är ett gränssnitt för att använda den interna\n"
+"lösaren som en extern lösare för APT-familjen för felsökning eller\n"
+"liknande\n"
+"\n"
+"Flaggor:\n"
+" -h Denna hjälptext.\n"
+" -q Loggbar utmatning - ingen förloppsindikator\n"
+" -c=? Läs denna konfigurationsfil.\n"
+" -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s kan inte markeras eftersom det inte är installerat.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s var redan satt till manuellt installerad.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s var redan satt till automatiskt installerad.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Följande NYA paket kommer att installeras:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s var redan tillbakahållet.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s var redan ej tillbakahållet.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Körning av dpkg misslyckades. Är du root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s är satt till att hållas tillbaka.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Avbröt tillbakahållning av %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Användning: apt-mark [flaggor] {auto|manual} paket1 [paket2 …]\n"
+"\n"
+"apt-mark är ett enkelt kommandoradsgränssnitt för att markera\n"
+"paket som manuellt eller automatiskt installerade. Det kan också\n"
+"lista markeringar.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Markera de angivna paketen som automatiskt installerade"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Markera de angivna paketen som manuellt installerade"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Markera de angivna paketen som automatiskt installerade"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Markera ett paket som tillbakahållet"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Avmarkera ett paket som är markerat som tillbakahållet"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Visa listan över automatiskt installerade paket"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Visa listan över manuellt installerade paket"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Visa listan över tillbakahållna paket"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Okänd paketpost!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "lista paket baserat på paketnamn"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "sök i paketbeskrivningar"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "visa detaljer för paket"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "installera paket"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "installera paket"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "ta bort paket"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "uppdatera lista över tillgängliga paket"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "uppgradera systemet genom att installera/uppgradera paket"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "uppgradera systemet genom att ta bort/installera/uppgradera paket"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "redigera källinformationsfilen"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Felaktig standardinställning!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Tryck på [Retur] för att fortsätta."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Vill du ta bort eventuellt tidigare hämtade .deb-filer?"
+
+# Note to translators: The following four messages belong together. It doesn't
+# matter where sentences start, but it has to fit in just these four lines, and
+# at only 80 characters per line, if possible.
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Det uppstod fel vid uppackning. Paketen som blev installerade kommer"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr ""
+"att konfigureras. Detta kan resultera i dubbletta fel eller fel orsakade"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "av saknade beroenden. Detta är okej, endast felen ovanför detta"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "meddelande är viktiga. Försök korrigera dem och kör [I]nstallera igen"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Sammanfogar tillgänglig information"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Listan över filtillägg för Packages är för lång"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Fel vid behandling av katalogen %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Listan över filtillägg för Sources är för lång"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Fel vid skrivning av rubrik till innehållsfil"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Fel vid behandling av innehållet %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Användning: apt-ftparchive [flaggor] kommando\n"
+"Kommandon: packages binärsökväg [åsidosättningsfil [sökvägsprefix]]\n"
+" sources källsökväg [åsidosättningsfil [sökvägsprefix]]\n"
+" contents sökväg\n"
+" release sökväg\n"
+" generate konfiguration [grupper]\n"
+" clean konfiguration\n"
+"\n"
+"apt-ftparchive genererar indexfiler för Debianarkiv. Det stöder många\n"
+"former av generering, allt från helautomatiserat till funktionella\n"
+"ersättningar till dpkg-scanpackages och dpkg-scansources\n"
+"\n"
+"apt-ftparchive skapar Package-filer från ett träd med .deb-filer.\n"
+"Packagefilen innehåller alla styrfälten från paketen samt MD5-hashvärdet\n"
+"och filstorlek. En åsidosättningsfil stöds för att tvinga värden på "
+"Priority\n"
+"och Section.\n"
+"\n"
+"På samma sätt skapar apt-ftparchive Sources-filer från ett träd med\n"
+".dsc-filer. Flaggan --source-override kan användas för att ange en\n"
+"åsidosättningsfil för källkoden.\n"
+"\n"
+"Kommandona ”packages” och ”sources” bör köras från roten på trädet.\n"
+"Binärsökvägen bör peka på basen på den rekursiva sökningen och\n"
+"åsidosättningsfilen bör innehålla de framtvingade flaggorna.\n"
+"Sökvägsprefixet läggs till i filnamnsfälten om det anges. Ett exempel på\n"
+"hur programmet kan användas från Debianarkivet:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Flaggor:\n"
+" -h Denna hjälptext\n"
+" --md5 Kontrollera generering av MD5\n"
+" -s=? Källåsidosättningsfil\n"
+" -q Tyst\n"
+" -d=? Väljer den valfria cachedatabasen\n"
+" --no-delink Aktivera ”delinkning”-felsökningsläget\n"
+" --contents Styr skapande av contents-fil\n"
+" -c=? Läs denna konfigurationsfil\n"
+" -o=? Ställ in en godtycklig konfigurationsflagga"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Inga val träffades"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Några filer saknas i paketfilsgruppen ”%s”"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB var skadad, filen omdöpt till %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB är gammal, försöker uppgradera %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"DB-formatet är ogiltigt. Ta bort och återskapa databasen om du uppgraderar "
+"från en äldre version av apt."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Kunde inte öppna DB-filen %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Misslyckades med att läsa .dsc"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arkivet har ingen styrpost"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Kunde inte få tag i någon markör"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Misslyckades med att allokera minne"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Okänd komprimeringsalgoritm ”%s”"
+
+# ???
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Komprimerade utdata %s behöver en komprimeringsuppsättning"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Misslyckades med att skapa IPC-rör till underprocess"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Misslyckades med att grena process"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Underprocess för komprimering"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Internt fel, misslyckades med att skapa %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "In/ut för underprocess/fil misslyckades"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Misslyckades med att läsa vid beräkning av MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Kunde inte öppna %s"
+
+# parametrar: filnamn, radnummer
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Felaktig åsidosättning %s rad %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Misslyckades med att läsa åsidosättningsfilen %s"
+
+# parametrar: filnamn, radnummer
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Felaktig åsidosättning %s rad %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Felaktig åsidosättning %s rad %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Felaktig åsidosättning %s rad %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "V: Kunde inte läsa katalogen %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "V: Kunde inte ta status på %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "F: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "V: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "F: Felen gäller filen "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Misslyckades med att slå upp %s"
+
+# ???
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Trädvandring misslyckades"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Misslyckades med att öppna %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Avlänka %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Misslyckades med att länka %s till %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Avlänkningsgränsen på %sB nåddes.\n"
+
+# Fält vid namn "Package"
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arkivet har inget package-fält"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s har ingen post i åsidosättningsfilen\n"
+
+# parametrar: paket, ny, gammal
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " ansvarig för paketet %s är %s ej %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s har ingen källåsidosättningspost\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s har heller ingen binär åsidosättningspost\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Väntar på rubriker"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Http-servern sände ett ogiltigt svarshuvud"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Felaktig rubrikrad"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Http-servern sände en ogiltig Content-Length-rubrik"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Http-servern sände en ogiltig Content-Range-rubrik"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Den här http-serverns stöd för delvis hämtning fungerar inte"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Okänt datumformat"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Felaktiga data i huvud"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Anslutningen misslyckades"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"Inaktiverade automatiskt %s på grund av felaktigt svar från server/proxy. "
+"(man 5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Internt fel"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Kunde inte läsa cd-rom-databasen %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Använd apt-cdrom för att APT ska känna igen denna cd. apt-get update kan "
+"inte användas för att lägga till skivor"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Fel cd-rom"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Kunde inte avmontera cd-rom:en i %s, den kanske fortfarande används."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Skivan hittades inte."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Filen hittades inte"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Ansluter till %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Ansluter till %s (%s)"
+
+# [f]amilj, [t]yp, [p]rotokoll
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Kunde inte skapa ett uttag (socket) för %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Kunde inte initiera anslutningen till %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Misslyckades"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Kunde inte ansluta till %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Kunde inte ansluta till %s:%s (%s), anslutningen överskred tidsgräns"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Ansluter till %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Kunde inte slå upp ”%s”"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Temporärt fel vid uppslagning av ”%s”"
+
+# Okänd felkod; %i = koden
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Systemfel när ”%s:%s” slogs upp"
+
+# Okänd felkod; %i = koden
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Något konstigt hände när ”%s:%s” slogs upp (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Kunde inte ansluta till %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Misslyckades med att ta status"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Ogiltig URI, lokala URI:er får inte börja med //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Loggar in"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Kunde inte fastställa namnet på partnern"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Kunde inte fastställa det lokala namnet"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Servern nekade anslutningen och sade: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER misslyckades, servern sade: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS misslyckades, servern sade: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"En mellanserver (proxy) angavs men inget inloggningsskript, Acquire::ftp::"
+"ProxyLogin är tom."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Kommandot ”%s” i inloggningsskriptet misslyckades, servern sade: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE misslyckades, servern sade: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Tidsgränsen för anslutningen överskreds"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Servern stängde anslutningen"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Ett svar spillde bufferten."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Protokollet skadat"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Kunde inte skapa ett uttag (socket)"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Kunde inte ansluta datauttaget (socket), inget svar inom tidsgräns"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Kunde inte ansluta passivt uttag (socket)."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo kunde inte få tag i ett lyssnande uttag (socket)"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Kunde inte binda ett uttag (socket)"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Kunde inte lyssna på uttaget (socket)"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Kunde inte fastställa uttagets namn (socket)"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Kunde inte sända PORT-kommando"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Okänd adressfamilj %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT misslyckades, servern sade: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Anslutet datauttag (socket) fick inte svar inom tidsgränsen"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Kunde inte ta emot anslutningen"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problem med att lägga filen till hashtabellen"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Kunde inte hämta filen, servern sade ”%s”"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Datauttag (socket) fick inte svar inom tidsgränsen"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Dataöverföringen misslyckades, servern sade ”%s”"
+
+# Statusmeddelande, byter från substantiv till verb
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Frågar"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Kunde inte starta "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, fuzzy, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Klartextsignerad fil är inte giltig, fick ”%s” (kräver nätverket "
+"autentisering?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Minst en ogiltig signatur träffades på."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Internt fel: Korrekt signatur men kunde inte fastställa nyckelns "
+"fingeravtryck?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Kunde inte köra ”apt-key” för att verifiera signatur (är gnupg installerad?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Okänt fel vid körning av apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Följande signaturer är ogiltiga:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Följande signaturer kunde inte verifieras för att den öppna nyckeln inte är "
+"tillgänglig:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Fel vid skrivning till filen"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Fel vid läsning från server: Andra änden stängde förbindelsen"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Fel vid läsning från server"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Fel vid skrivning till fil"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "”Select” misslyckades"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Anslutningen överskred tidsgränsen"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Fel vid skrivning till utdatafil"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Misslyckades med att ställa in ändringstid"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Anslutningen stängdes i förtid"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Tomma filer kan inte vara giltiga arkiv"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Ogiltig arkivdelsrubrik %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Tog bort %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Paketfilen %s är inte synkroniserad."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Paketindexfilerna är skadade. Inget ”Filename:”-fält för paketet %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Ingen spegelfil ”%s” hittades "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Kan inte läsa spegelfilen ”%s”"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Ingen post funnen i spegelfilen ”%s”"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Spegel: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Öppnar konfigurationsfilen %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Öppnar %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Kunde inte hitta förväntad post ”%s” i Release-fil (Felaktig sources.list-"
+#~ "post eller fel format på fil)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Otillfredsställda beroenden. Prova med --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "Du bör köra ”apt --fix-broken install” för att korrigera dessa:"
+
+#~ msgid "(not found)"
+#~ msgstr "(hittades inte)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Paketnålning: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Det finns ingen öppen nyckel tillgänglig för följande nyckel-id:n:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Förrådet ”%s” är inte längre signerat."
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "%s-beroendet på %s kan inte tillfredsställas eftersom %s inte är tillåtet "
+#~ "på ”%s”-paket"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%s-beroendet på %s kan inte tillfredsställas eftersom paketet %s inte kan "
+#~ "hittas"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Misslyckades med att tillfredsställa %s-beroendet för %s: Det "
+#~ "installerade paketet %s är för nytt"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%s-beroendet på %s kan inte tillfredsställas eftersom kandidatversionen "
+#~ "av paketet %s inte tillfredsställer versionskraven"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%s-beroendet på %s kan inte tillfredsställas eftersom paketet %s inte har "
+#~ "någon kandidatversion"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Misslyckades med att tillfredsställa %s-beroendet för %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Byggberoenden för %s kunde inte tillfredsställas."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problem med att länka ut %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Misslyckades med att länka ut %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Användning: apt-cache [flaggor] kommando\n"
+#~ " apt-cache [flaggor] show paket1 [paket2 …]\n"
+#~ "\n"
+#~ "apt-cache är ett lågnivåverktyg för att hämta information\n"
+#~ "från APTs binära cachefiler\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Kommandon:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Flaggor:\n"
+#~ " -h Denna hjälptext.\n"
+#~ " -p=? Paketcachen.\n"
+#~ " -s=? Källcachen.\n"
+#~ " -q Inaktivera förloppsindikatorn.\n"
+#~ " -i Visa endast viktiga beroenden för ”unmet”-kommandot.\n"
+#~ " -c=? Läs denna konfigurationsfil.\n"
+#~ " -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/"
+#~ "tmp\n"
+#~ "Se manualsidorna för apt-cache(8) och apt.conf(5) för mer information.\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Användning: apt [flaggor] kommando\n"
+#~ "\n"
+#~ "Kommandoradsgränssnitt för apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Flaggor:\n"
+#~ " -h Denna hjälptext.\n"
+#~ " -q Loggbar utdata - ingen förloppsindikator\n"
+#~ " -qq Ingen utdata förutom vid fel\n"
+#~ " -s Gör ingenting, simulera vad som skulle hända.\n"
+#~ " -f läs/skriv markering som automatiskt/manuellt installerad i angiven "
+#~ "fil\n"
+#~ " -c=? Läs denna konfigurationsfil\n"
+#~ " -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/"
+#~ "tmp\n"
+#~ "Se manualsidorna för apt-mark(8) och apt.conf(5) för mer information."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Flaggor:\n"
+#~ " -h Denna hjälptext.\n"
+#~ " -c=? Läs denna konfigurationsfil.\n"
+#~ " -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Flaggor:\n"
+#~ " -h Denna hjälptext.\n"
+#~ " -q Loggbar utdata - ingen förloppsindikator\n"
+#~ " -qq Ingen utdata förutom vid fel\n"
+#~ " -s Gör ingenting, simulera vad som skulle hända.\n"
+#~ " -f läs/skriv markering som automatiskt/manuellt installerad i angiven "
+#~ "fil\n"
+#~ " -c=? Läs denna konfigurationsfil\n"
+#~ " -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/"
+#~ "tmp\n"
+#~ "Se manualsidorna för apt-mark(8) och apt.conf(5) för mer information."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Användning: apt-sortpkgs [flaggor] fil1 [fil2 …]\n"
+#~ "\n"
+#~ "apt-sortpkgs är ett enkelt verktyg för att sortera paketfiler. Flaggan\n"
+#~ "-s anges för att ange filens typ.\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -h Denna hjälptext.\n"
+#~ " -s Använd källkodsfilssortering.\n"
+#~ " -c=? Läs denna konfigurationsfil.\n"
+#~ " -o=? Ställ in en godtycklig konfigurationsflagga, t.ex -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Use --allow-insecure-repositories to force the update"
+#~ msgstr "Använd --allow-insecure-repositories för att tvinga uppdateringen"
+
+#~ msgid ""
+#~ "The data from '%s' is not signed. Packages from that repository can not "
+#~ "be authenticated."
+#~ msgstr ""
+#~ "Data från ”%s” är inte signerat. Paket från det förrådet kan inte "
+#~ "autentiseras."
+
+#~ msgid ""
+#~ "The repository '%s' does not have a Release file. This is deprecated, "
+#~ "please contact the owner of the repository."
+#~ msgstr ""
+#~ "Förrådet ”%s” har inte en Release-fil. Detta är föråldrat, kontakta "
+#~ "förrådets ägare."
+
+#~ msgid "Child process failed"
+#~ msgstr "Underprocess misslyckades"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Du måste ange minst ett par bestående av url och filnamn"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Misslyckades med att skapa rör"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Misslyckades med att köra gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s för %s kompilerad den %s %s\n"
+
+#, fuzzy
+#~ msgid "There are problems and -y was used without --force-yes"
+#~ msgstr "Problem har uppstått och -y användes utan --force-yes"
+
+#, fuzzy
+#~ msgid "The following extra packages will be installed:"
+#~ msgstr "Följande NYA paket kommer att installeras:"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Misslyckades med att skapa FILE*"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Post %u i källistan %s har fel format (URI-tolkning)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Rad %lu i källistan %s har fel format ([option] ej tolkningsbar)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Rad %lu i källistan %s har fel format ([option] för kort)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Rad %lu i källistan %s har fel format ([%s] är inte en tilldelning)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Rad %lu i källistan %s har fel format ([%s] saknar nyckel)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Rad %lu i källistan %s har fel format ([%s] nyckeln %s saknar värde)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Rad %lu i källistan %s har fel format (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Rad %lu i källistan %s har fel format (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Rad %lu i källistan %s har fel format (URI-tolkning)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Rad %lu i källistan %s har fel format (Absolut dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Rad %lu i källistan %s har fel format (dist-tolkning)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Paketet %s %s hittades inte när filberoenden hanterades"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Kunde inte ta status på källkodspaketlistan %s"
+
+# Bättre ord?
+#~ msgid "Collecting File Provides"
+#~ msgstr "Samlar filtillhandahållningar"
+
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Börjar inte med en klartextsignatur"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Kunde inte hitta hash-kontrollsumma för ”%s” i Release-filen"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Leverantörsblocket %s saknar fingeravtryck"
+
+#, fuzzy
+#~ msgid "Command line option '%c' [from %s] is not known."
+#~ msgstr "Kommandoradsflaggan %s är inte boolesk"
+
+#, fuzzy
+#~ msgid "Command line option %s is not understood"
+#~ msgstr "Kommandoradsflaggan %s är inte boolesk"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Totalt utrymme för versionsberoenden: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Du har inte tillräckligt mycket ledigt utrymme i %s"
+
+#~ msgid "Done"
+#~ msgstr "Färdig"
+
+# Måste vara tre bokstäver(?)
+# "Hit" = aktuell version är fortfarande giltig
+#~ msgid "Hit "
+#~ msgstr "Bra "
+
+# "Get:" = hämtar ny version
+#~ msgid "Get:"
+#~ msgstr "Läs:"
+
+# "Ign" = hoppar över
+#~ msgid "Ign "
+#~ msgstr "Ign "
+
+# "Err" = fel vid hämtning
+#~ msgid "Err "
+#~ msgstr "Fel "
+
+#~ msgid "Unable to parse package file %s (2)"
+#~ msgstr "Kunde inte tolka paketfilen %s (2)"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Ingen nyckelring installerad i %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Internt fel, AllUpgrade förstörde något"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s är inte ett giltigt DEB-paket."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Använder cd-rom-monteringspunkten %s\n"
+#~ "Monterar cd-rom\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Kunde inte patcha %s med mmap och med filoperationsanvändning - patchen "
+#~ "verkar vara skadad."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Kunde inte patcha %s med mmap (men inga mmap-specifika fel) - patchen "
+#~ "verkar vara skadad."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Ignorera otillgängliga målutgåvan \"%s\" av paketet \"%s\""
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Detta är inte ett giltigt DEB-arkiv, \"%s\", \"%s\" och \"%s\" saknas"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5-kontrollsumman stämmer inte"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Jag kunde inte hitta någon fil för paketet %s. Detta kan betyda att du "
+#~ "manuellt måste reparera detta paket."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Kan inte skriva loggfil, openpty() misslyckades (/dev/pts inte "
+#~ "monterad?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Hoppar över icke-existerande filen %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Misslyckades med att ta bort %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Kunde inte skapa %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Misslyckades att ta status på %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Katalogerna info och temp måste vara på samma filsystem"
+
+# Felmeddelande för misslyckad chdir
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Misslyckades att växla till adminkatalogen %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Internt fel när namn på Package-fil skulle hämtas"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Läser fillista"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Misslyckades med att öppna listfilen \"%sinfo/%s\". Om du inte kan "
+#~ "återskapa filen, skapa en tom och installera omedelbart om samma version "
+#~ "av paketet!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Misslyckades med att läsa listfilen %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Internt fel när en nod skulle hämtas"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Misslyckades med att öppna omdirigeringsfilen %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Omdirigeringsfilen är skadad"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Felaktig rad i omdirigeringsfilen: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Internt fel när en omdirigering skulle läggas till"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Paketcachen måste först initieras"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Misslyckades med att hitta Package:-rubrik, position %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Felaktig ConfFile-sektion i statusfilen. Position %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Fel vid tolkning av MD5. Position %lu"
+
+# chdir
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Kunde inte byta till %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Misslyckades med att hitta en giltig control-fil"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Kunde inte öppna rör för %s"
+
+# %s = programnamn
+#~ msgid "Read error from %s process"
+#~ msgstr "Läsfel från %s-processen"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Fick en ensam rubrikrad på %u tecken"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Observera: Detta sker med automatik och vid behov av dpkg."
+
+# parametrar: filnamn, radnummer
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Felaktig override %s rad %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Felaktig override %s rad %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Felaktig override %s rad %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "uppackare"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "läsning, har fortfarande %lu att läsa men ingenting finns kvar"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "skrivning, har fortfarande %lu att skriva men kunde inte"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Kunde inte genomföra omedelbar konfiguration på redan uppackade \"%s\". "
+#~ "Se man 5 apt.conf under APT::Immediate-Configure för information."
+
+# NewPackage etc. är funktionsnamn
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Fel uppstod vid hantering av %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Fel uppstod vid hantering av %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Fel uppstod vid hantering av %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Fel uppstod vid hantering av %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Fel uppstod vid hantering av %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Fel uppstod vid behandling av %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Fel uppstod vid hantering av %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Fel uppstod vid hantering av %s (NewFileDesc2)"
+
+# NewPackage etc. är funktionsnamn
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Fel uppstod vid hantering av %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Fel uppstod vid hantering av %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Internt fel, kunde inte hitta del"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Internt fel, gruppen \"%s\" har inget installerbart pseudo-paket"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Release-filen har gått ut, ignorerar %s (ogiltig sedan %s)"
+
+#~ msgid "E: Too many keyrings should be passed to gpgv. Exiting."
+#~ msgstr "F: För många nyckelringar skulle skickas till gpgv. Avslutar."
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Argumentslistan från Acquire::gpgv::Options är för lång. Avslutar."
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Rad %u i källistan %s har fel format (leverantörs-id)"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Fel uppstod vid hantering av %s (NewVersion2)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Kunde inte komma åt nyckelring: \"%s\""
+
+#~ msgid "Could not patch file"
+#~ msgstr "Kunde inte lägga på programfix på filen"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
diff --git a/po/th.po b/po/th.po
new file mode 100644
index 0000000..9b43a0f
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,4317 @@
+# Thai translation of apt.
+# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the apt package.
+# Theppiak Karoonboonyanan <thep@debian.org>, 2007-2008, 2012, 2014.
+# Arthit Suriyawongkul <arthit@gmail.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2014-12-12 13:00+0700\n"
+"Last-Translator: Theppitak Karoonboonyanan <thep@debian.org>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"Language: th\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "เอกลักษณ์ของแฟ้มจัดเก็บไม่ถูกต้อง"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลส่วนหัวของสมาชิกแฟ้มจัดเก็บ"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "ข้อมูลส่วนหัวของสมาชิกแฟ้มจัดเก็บไม่ถูกต้อง"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "แฟ้มจัดเก็บสั้นเกินไป"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "อ่านข้อมูลส่วนหัวของแฟ้มจัดเก็บไม่สำเร็จ"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "ไม่พบระเบียนยืนยันความแท้สำหรับ: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "แฟ้มจัดเก็บเสียหาย"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "checksum ของแฟ้ม tar ผิดพลาด แฟ้มจัดเก็บเสียหาย"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "พบชนิด %u ของข้อมูลส่วนหัว TAR ที่ไม่รู้จัก ที่สมาชิก %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "แฟ้มนี้ไม่ใช่แพกเกจ DEB ที่ใช้การได้ ขาดสมาชิก '%s'"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "ข้อผิดพลาดภายใน: ไม่พบสมาชิก %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "ไม่สามารถแจงแฟ้มควบคุมได้"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "ไม่สามารถเขียนแฟ้ม %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "ไม่สามารถปิดแฟ้ม %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "พาธ %s ยาวเกินไป"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "พยายามแตกแพกเกจ %s มากกว่าหนึ่งครั้ง"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "ไดเรกทอรี %s ถูก divert"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "แพกเกจนี้พยายามเขียนลงปลายทางของการเบนแฟ้ม %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "พาธของการเบนแฟ้มยาวเกินไป"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "stat %s ไม่สำเร็จ"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "ไม่สามารถเปลี่ยนชื่อ %s ไปเป็น %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "ไดเรกทอรี %s กำลังจะถูกแทนที่ด้วยสิ่งที่ไม่ใช่ไดเรกทอรี"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "หาโหนดใน bucket ของแฮชไม่พบ"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "พาธยาวเกินไป"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "พบแพกเกจที่เขียนทับโดยไม่มีข้อมูลรุ่นสำหรับ %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "แฟ้ม %s/%s เขียนทับแฟ้มในแพกเกจ %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "ไม่สามารถอ่าน %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "ไม่สามารถ stat %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode ถูกเรียกใช้กับโหนดที่ยังลิงก์อยู่"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "หาสมาชิกในตารางแฮชไม่สำเร็จ!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "จองเนื้อที่สำหรับการเบนแฟ้มไม่สำเร็จ"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "ข้อผิดพลาดภายในที่ AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "พยายามเขียนทับการเบนแฟ้ม: %s -> %s กับ %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "เพิ่มการเบนแฟ้ม %s -> %s ซ้ำสอง"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "แฟ้มค่าตั้ง %s/%s ซ้ำ"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "ไดเรกทอรี %s ถูก divert"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "ไดเรกทอรี %s ถูก divert"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "ไดเรกทอรี %s ถูก divert"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "ไดเรกทอรี %s ถูก divert"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "ไดเรกทอรี %s ถูก divert"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "readlink %s ไม่สำเร็จ"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "ผลรวมแฮชไม่ตรงกัน"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "เปลี่ยนชื่อไม่สำเร็จ: %s (%s -> %s)"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "ขนาดไม่ตรงกัน"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "รูปแบบของแฟ้มไม่ถูกต้อง"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "การเขียนข้อมูลผิดพลาด"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"แฟ้มที่เซ็นกำกับครอบข้อความมีเนื้อหาไม่ถูกต้อง ได้รับผลลัพธ์ "
+"'%s' (เครือข่ายต้องยืนยันตัวบุคคลหรือไม่?)"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"เกิดข้อผิดพลาดขณะตรวจสอบลายเซ็น จะไม่ปรับข้อมูลคลังแพกเกจนี้ และจะใช้แฟ้มดัชนีเก่า "
+"ข้อผิดพลาดจาก GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "ข้อผิดพลาดจาก GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"แฟ้ม Release สำหรับ %s หมดอายุแล้ว (ตั้งแต่ %s ที่แล้ว) จะไม่ใช้รายการปรับรุ่นต่างๆ "
+"ของคลังแพกเกจนี้"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"แฟ้ม Release สำหรับ %s หมดอายุแล้ว (ตั้งแต่ %s ที่แล้ว) จะไม่ใช้รายการปรับรุ่นต่างๆ "
+"ของคลังแพกเกจนี้"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "ชุดจัดแจกขัดแย้งกัน: %s (ต้องการ %s แต่พบ %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "ไม่สามารถดาวน์โหลด %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr "ไม่พบแฟ้มสำหรับแพกเกจ %s คุณอาจต้องแก้ปัญหาแพกเกจนี้เอง (ไม่มี arch)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "ไม่พบแหล่งที่จะดาวน์โหลดรุ่น '%s' ของ '%s' ได้"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "ปูมการแก้ไขสำหรับ %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "ไม่พบไดรเวอร์สำหรับวิธีการ %s"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "ได้ติดตั้งแพกเกจ %s ไว้หรือไม่?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "ไม่สามารถเรียกทำงานวิธีการ %s"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "กรุณาใส่แผ่นชื่อ: '%s' ลงในไดรว์ '%s' แล้วกด enter"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "ไม่มีไดเรกทอรีรายชื่อแพกเกจ %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "ไม่มีไดเรกทอรีแพกเกจ %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "ไม่สามารถล็อคไดเรกทอรี %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "ไม่รองรับการล้างข้อมูลที่ %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "กำลังดาวน์โหลดแฟ้มที่ %li จาก %li (เหลืออีก %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "กำลังดาวน์โหลดแฟ้มที่ %li จาก %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "จำเป็นต้องติดตั้งแพกเกจ %s ซ้ำ แต่หาตัวแพกเกจไม่พบ"
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"ข้อผิดพลาด: pkgProblemResolver::Resolve สร้างคำตอบที่ทำให้เกิดแพกเกจเสีย "
+"อาจเกิดจากแพกเกจที่ถูกกำหนดให้คงรุ่นไว้"
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "ไม่สามารถแก้ปัญหาได้ คุณได้คงรุ่นแพกเกจที่เสียอยู่ไว้"
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "ไม่สามารถแจงหรือเปิดรายชื่อแพกเกจหรือสถานะแพกเกจได้"
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "คุณอาจเรียก `apt-get update' เพื่อแก้ปัญหาเหล่านี้ได้"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "ไม่สามารถอ่านรายชื่อแหล่งแพกเกจได้"
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "คอมไพล์นิพจน์เรกิวลาร์ไม่สำเร็จ - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "ไม่พบรุ่นย่อย '%s' ของ '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "ไม่พบรุ่น '%s' ของ '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "ไม่พบงานติดตั้ง '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "ไม่พบแพกเกจที่ตรงกับนิพจน์เรกิวลาร์ '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "ไม่พบแพกเกจที่ตรงกับ glob '%s'"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "ไม่พบแพกเกจ %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "ไม่สามารถเลือกรุ่นต่างๆ ของแพกเกจ '%s' ได้ เนื่องจากเป็นแพกเกจเสมือนอย่างแท้จริง"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr "ไม่สามารถเลือกรุ่นใหม่ที่สุดของแพกเกจ '%s' ได้ เนื่องจากเป็นแพกเกจเสมือนอย่างแท้จริง"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "ไม่สามารถเลือกรุ่นสำหรับติดตั้งของแพกเกจ '%s' ได้ เนื่องจากไม่มีรุ่นสำหรับติดตั้ง"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr "ไม่สามารถเลือกรุ่นที่ติดตั้งไว้ของแพกเกจ '%s' ได้ เนื่องจากแพกเกจไม่ได้ติดตั้งไว้"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"ไม่สามารถเลือกรุ่นที่ติดตั้งไว้หรือรุ่นสำหรับติดตั้งของแพกเกจ '%s' ได้ เนื่องจากไม่มีทั้งสองอย่าง"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "บรรทัด %u ในแฟ้มรายชื่อแหล่งแพกเกจ %s ยาวเกินไป"
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "กำลังเลิกเมานท์ซีดีรอม...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "กำลังใช้จุดเมานท์ซีดีรอม %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "กำลังรอแผ่น...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "กำลังเมานท์ซีดีรอม...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "กำลังตรวจสอบชื่อแผ่น... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "ชื่อที่เก็บไว้: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "กำลังสำรวจข้อมูลในแผ่นเพื่อหาแฟ้มดัชนี...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"พบดัชนีแพกเกจ %zu รายการ, ดัชนีซอร์ส %zu รายการ, ดัชนีคำแปล %zu รายการ และลายเซ็น "
+"%zu รายการ\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr "ไม่พบแฟ้มแพกเกจใดๆ บางทีแผ่นนี้อาจจะไม่ใช่แผ่นเดเบียน หรือสถาปัตยกรรมอาจไม่ถูกต้อง"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "พบชื่อแผ่น '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "ไม่ใช่ชื่อที่ใช้ได้ กรุณาลองใหม่\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"แผ่นนี้เรียกชื่อว่า:\n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "กำลังคัดลอกรายชื่อแพกเกจ..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "กำลังเขียนรายชื่อแหล่งแพกเกจแหล่งใหม่\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "บรรทัดรายชื่อแหล่งแพกเกจสำหรับแผ่นนี้คือ:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "ไม่สามารถเปลี่ยนไดเรกทอรีไปยัง %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "ไม่สามารถ stat %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "ไม่สามารถ stat จุดเมานท์ %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "ไม่สามารถ stat ซีดีรอม"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "ไม่รู้จักตัวเลือกบรรทัดคำสั่ง '%c' [จาก %s]"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "ไม่เข้าใจตัวเลือกบรรทัดคำสั่ง %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "ตัวเลือกบรรทัดคำสั่ง %s ไม่ได้เป็นค่าบูลีน"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "ตัวเลือก %s ต้องมีอาร์กิวเมนต์"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "ตัวเลือก %s: การกำหนดรายการค่าตั้งต้องมี =<val>"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "ตัวเลือก %s ต้องการอาร์กิวเมนต์จำนวนเต็ม ไม่ใช่ '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "ตัวเลือก '%s' ยาวเกินไป"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "ไม่เข้าใจค่าบูลีน %s กรุณาลองใช้ true หรือ false"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "ไม่รู้จักคำสั่ง %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "พบตัวย่อของชนิดที่ข้อมูลไม่รู้จัก: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: เริ่มบล็อคโดยไม่มีชื่อ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: แท็กผิดรูปแบบ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: มีขยะเกินหลังค่า"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: สามารถใช้ directive ที่ระดับบนสุดได้เท่านั้น"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: ใช้ include ซ้อนกันมากเกินไป"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: include จากที่นี่"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: พบ directive '%s' ที่ไม่รองรับ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: directive 'clear' ต้องมีอาร์กิวเมนต์เป็นลำดับชั้นตัวเลือก"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "ไวยากรณ์ผิดพลาด %s:%u: มีขยะเกินหลังจบแฟ้ม"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "เกิดปัญหาขณะลบแฟ้ม %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "จะไม่ใช้การล็อคกับแฟ้มล็อค %s ที่อ่านได้อย่างเดียว"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "ไม่สามารถเปิดแฟ้มล็อค %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "จะไม่ใช้การล็อคกับแฟ้มล็อค %s ที่เมานท์ผ่าน nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "ไม่สามารถล็อค %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "ไม่สามารถสร้างรายชื่อแฟ้มได้ เนื่องจาก '%s' ไม่ใช่ไดเรกทอรี"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "จะละเลย '%s' ในไดเรกทอรี '%s' เนื่องจากไม่ใช่แฟ้มธรรมดา"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "จะละเลย '%s' ในไดเรกทอรี '%s' เนื่องจากไม่มีส่วนขยายในชื่อแฟ้ม"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr "จะละเลย '%s' ในไดเรกทอรี '%s' เนื่องจากส่วนขยายในชื่อแฟ้มไม่สามารถใช้การได้"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "รอโพรเซส %s แต่ตัวโพรเซสไม่อยู่"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "โพรเซสย่อย %s เกิดข้อผิดพลาดของการใช้ย่านหน่วยความจำ (segmentation fault)"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "โพรเซสย่อย %s ได้รับสัญญาณ %u"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "โพรเซสย่อย %s คืนค่าข้อผิดพลาด (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "โพรเซสย่อย %s จบการทำงานกะทันหัน"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "การอ่านข้อมูลผิดพลาด"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "การเขียนข้อมูลผิดพลาด"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "เกิดปัญหาขณะปิดแฟ้ม gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "สร้าง IPC ของโพรเซสย่อยไม่สำเร็จ"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "เรียกทำงานตัวบีบอัดไม่สำเร็จ"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "ไม่สามารถเปิดแฟ้ม %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "ไม่สามารถเปิด file destriptor %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "read: ยังเหลือ %llu ที่ยังไม่ได้อ่าน แต่ข้อมูลหมดแล้ว"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "write: ยังเหลือ %llu ที่ยังไม่ได้เขียน แต่ไม่สามารถเขียนได้"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "เกิดปัญหาขณะปิดแฟ้ม %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "เกิดปัญหาขณะเปลี่ยนชื่อแฟ้ม %s ไปเป็น %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "เกิดปัญหาขณะ sync แฟ้ม"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "ไม่สามารถ mkstemp %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "ไม่สามารถเขียนลงแฟ้ม %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "ไม่สามารถ mmap แฟ้มเปล่า"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "ไม่สามารถสร้าง mmap ขนาด %llu ไบต์"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "ไม่สามารถทำซ้ำ file descriptor %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "ไม่สามารถปิด mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "ไม่สามารถปรับ mmap ให้ตรงกัน"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "ไม่สามารถสร้าง mmap ขนาด %lu ไบต์"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "ไม่สามารถตัดท้ายแฟ้ม"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"MMap แบบพลวัตมีเนื้อที่ไม่พอ กรุณาเพิ่มขนาดของ APT::Cache-Start ค่าปัจจุบัน: %lu (man 5 "
+"apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr "ไม่สามารถเพิ่มขนาดของ MMap เนื่องจากถึงขีดจำกัด %lu ไบต์แล้ว"
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr "ไม่สามารถเพิ่มขนาดของ MMap เนื่องจากผู้ใช้ปิดการขยายขนาดอัตโนมัติ"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... ผิดพลาด!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... เสร็จแล้ว"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%liวัน %liชม. %liนาที %liวิ"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%liชม. %liนาที %liวิ"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%liนาที %liวิ"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%liวิ"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "ไม่พบรายการเลือก %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "ไม่สามารถแจงแฟ้ม Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "ไม่มีหัวข้อย่อยในแฟ้ม Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "ไม่มีรายการแฮชในแฟ้ม Release %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "รายการ '%s' ไม่ถูกต้องในแฟ้ม Release %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "ไม่สามารถแจงแฟ้มแพกเกจ %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr "ไม่สามารถล็อคไดเรกทอรีดูแลระบบ (%s) มีโพรเซสอื่นใช้งานอยู่หรือเปล่า?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "ไม่สามารถล็อคไดเรกทอรีดูแลระบบ (%s) คุณเป็น root หรือเปล่า?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr "dpkg ถูกขัดจังหวะ คุณต้องเรียก '%s' เองเพื่อแก้ปัญหา"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr "ไม่สามารถล็อคไดเรกทอรีดูแลระบบ (%s) มีโพรเซสอื่นใช้งานอยู่หรือเปล่า?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "ไม่สามารถล็อคไดเรกทอรีดูแลระบบ (%s) คุณเป็น root หรือเปล่า?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "ไม่ได้ล็อคอยู่"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "กำลังเตรียม %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "กำลังเตรียมตั้งค่า %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "กำลังเตรียมถอดถอน %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "กำลังเตรียมถอดถอน %s อย่างสมบูรณ์"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "กำลังจดบันทึกการหายไปของ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "กำลังเรียกการสะกิด %s หลังการติดตั้ง"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "ติดตั้ง %s แล้ว"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "กำลังตั้งค่า %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "ไม่มีไดเรกทอรี '%s'"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "ไม่สามารถเปิดแฟ้ม '%s'"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "กำลังแตกแพกเกจ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "กำลังติดตั้ง %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "กำลังถอดถอน %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "กำลังถอดถอน %s อย่างสมบูรณ์"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "ถอดถอน %s อย่างสมบูรณ์แล้ว"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "ไม่สามารถเขียนปูม (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "ได้เมานท์ /dev/pts ไว้หรือไม่?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "ปฏิบัติการถูกขัดจังหวะก่อนที่จะสามารถทำงานเสร็จ"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "ไม่มีการเขียนรายงาน apport เพราะถึงขีดจำกัด MaxReports แล้ว"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "มีปัญหาความขึ้นต่อกัน - จะทิ้งไว้โดยไม่ตั้งค่า"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"ไม่มีการเขียนรายงาน apport เพราะข้อความข้อผิดพลาดระบุว่าเป็นสิ่งที่ตามมาจากข้อผิดพลาดก่อนหน้า"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr "ไม่มีการเขียนรายงาน apport เพราะข้อความข้อผิดพลาดระบุว่าเกิดจากดิสก์เต็ม"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr "ไม่มีการเขียนรายงาน apport เพราะข้อความข้อผิดพลาดระบุว่าเกิดจากหน่วยความจำเต็ม"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"ไม่มีการเขียนรายงาน apport เพราะข้อความข้อผิดพลาดระบุว่าเกิดจากปัญหาของระบบในเครื่อง"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"ไม่มีการเขียนรายงาน apport เพราะข้อความข้อผิดพลาดระบุว่าเกิดจากปัญหาการอ่าน/เขียนของ dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "กำลังสร้างโครงสร้างลำดับความสัมพันธ์"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "รุ่นแพกเกจที่มี"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "สร้างลำดับความสัมพันธ์"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "กำลังอ่านข้อมูลสถานะ"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "ไม่สามารถเปิดแฟ้มสถานะ %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "ไม่สามารถเขียนแฟ้มสถานะชั่วคราว %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "ส่งสภาวการณ์ไปยังกลไกการแก้ปัญหา"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "ส่งคำสั่งไปยังกลไกการแก้ปัญหา"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "เตรียมรับคำตอบ"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "กลไกการแก้ปัญหาภายนอกทำงานล้มเหลวโดยไม่มีข้อความข้อผิดพลาดที่เหมาะสม"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "เรียกกลไกการแก้ปัญหาภายนอก"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "เรียกกลไกการแก้ปัญหาภายนอก"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "ส่งคำสั่งไปยังกลไกการแก้ปัญหา"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "ส่งสภาวการณ์ไปยังกลไกการแก้ปัญหา"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "กลไกการแก้ปัญหาภายนอกทำงานล้มเหลวโดยไม่มีข้อความข้อผิดพลาดที่เหมาะสม"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "เขียนแล้ว %i ระเบียน\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "เขียนแล้ว %i ระเบียน โดยมีแฟ้มขาดหาย %i แฟ้ม\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "เขียนแล้ว %i ระเบียน โดยมีแฟ้มผิดขนาด %i แฟ้ม\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "เขียนแล้ว %i ระเบียน โดยมีแฟ้มขาดหาย %i แฟ้ม และแฟ้มผิดขนาด %i แฟ้ม\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "ไม่พบระเบียนยืนยันความแท้สำหรับ: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "แฮชไม่ตรงกันสำหรับ: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "ไม่รองรับระบบแพกเกจ '%s'"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "ไม่สามารถระบุชนิดของระบบแพกเกจที่เหมาะสมได้"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "ความคืบหน้า: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "กำลังเรียก dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"ไม่สามารถตั้งค่า '%s' แบบทันทีได้ กรุณาอ่านรายละเอียดเพิ่มเติมจาก man 5 apt.conf ที่หัวข้อ "
+"APT::Immediate-Configure (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "ไม่สามารถตั้งค่า '%s'"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"การติดตั้งครั้งนี้จำเป็นต้องลบแพกเกจ %s ชั่วคราว "
+"อันเนื่องมาจากความขัดแย้งหรือความขึ้นต่อกันระหว่างติดตั้งที่เป็นวงรอบ "
+"ซึ่งแพกเกจดังกล่าวเป็นแพกเกจที่จำเป็นสำหรับระบบ การลบดังกล่าวมักเป็นอันตราย "
+"แต่ถ้าคุณต้องการทำเช่นนั้นจริงๆ ก็ให้เปิดตัวเลือก APT::Force-LoopBreak"
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "แคชของแพกเกจว่างเปล่า"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "แฟ้มแคชของแพกเกจเสียหาย"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "แฟ้มแคชของแพกเกจเป็นคนละรุ่นกัน"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "APT รุ่นนี้ไม่รองรับระบบนับรุ่นแบบ '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "แคชของแพกเกจถูกสร้างมาสำหรับสถาปัตยกรรมอื่น"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "แฟ้มแคชของแพกเกจเสียหาย แฟ้มมีขนาดเล็กกว่าที่ควรจะเป็น"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "ต้องใช้"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "ต้องใช้ขณะติดตั้ง"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "แนะนำ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "ขัดแย้งกับ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "ควรใช้ร่วมกับ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "แทนที่"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "ทำให้พัง"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "เพิ่มความสามารถ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "ใช้แทน"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "สำคัญ"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "จำเป็น"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "มาตรฐาน"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "ส่วนเสริม"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "ตัวเลือก"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "แคชมีระบบนับรุ่นที่ไม่ตรงกัน"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "โอ้ คุณมาถึงขีดจำกัดจำนวนชื่อแพกเกจที่ APT สามารถรองรับได้แล้ว"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "โอ้ คุณมาถึงขีดจำกัดจำนวนรุ่นแพกเกจที่ APT สามารถรองรับได้แล้ว"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "โอ้ คุณมาถึงขีดจำกัดจำนวนคำบรรยายแพกเกจที่ APT สามารถรองรับได้แล้ว"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "โอ้ คุณมาถึงขีดจำกัดจำนวนความสัมพันธ์ระหว่างแพกเกจที่ APT สามารถรองรับได้แล้ว"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "กำลังอ่านรายชื่อแพกเกจ"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "เกิดข้อผิดพลาด IO ขณะบันทึกแคชของซอร์ส"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "ไม่รองรับแฟ้มดัชนีชนิด '%s'"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr "ค่า '%s' ไม่สามารถใช้กับ APT::Default-Release ได้ เนื่องจากรุ่นดังกล่าวไม่มีในแหล่ง"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "ระเบียนผิดรูปแบบในแฟ้มค่าปรับแต่ง %s: ไม่มีข้อมูลส่วนหัว 'Package'"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "ไม่เข้าใจชนิดการตรึง %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "ไม่ได้ระบุลำดับความสำคัญ (หรือค่าศูนย์) สำหรับการตรึง"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %llu (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "บรรทัด %u ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (ชนิด)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "ไม่รู้จักชนิด '%s' ที่บรรทัด %u ในแฟ้มรายชื่อแหล่งแพกเกจ %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "บรรทัด %u ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (ชนิด)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "ไม่รู้จักชนิด '%s' ที่วรรคที่ %u ในแฟ้มรายชื่อแหล่งแพกเกจ %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "คุณต้องเพิ่ม URI ชนิด 'source' ใน sources.list ของคุณด้วย"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr "ดาวน์โหลดแฟ้มดัชนีบางแฟ้มไม่สำเร็จ จะข้ามรายการดังกล่าวไป หรือใช้ข้อมูลเก่าแทน"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "กำลังคำนวณการปรับรุ่น"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "เจอ:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "ดึง:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "ข้าม:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "ปัญหา:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "ดาวน์โหลด %sB ใน %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [กำลังทำงาน]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"เปลี่ยนแผ่น: กรุณาใส่แผ่นชื่อ\n"
+" '%s'\n"
+"ลงในไดรว์ %s แล้วกด enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "กำลังแก้ปัญหาความขึ้นต่อกันระหว่างแพกเกจ..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " ล้มเหลว"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "ไม่สามารถแก้ปัญหาความขึ้นต่อกันระหว่างแพกเกจได้"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "ไม่สามารถจำกัดรายการปรับรุ่นให้น้อยที่สุดได้"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " เสร็จแล้ว"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "คุณอาจต้องเรียก 'apt --fix-broken install' เพื่อแก้ปัญหาเหล่านี้"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"มีปัญหาความขึ้นต่อกันระหว่างแพกเกจ กรุณาลองใช้ 'apt --fix-broken install' "
+"โดยไม่ระบุแพกเกจ (หรือจะระบุทางแก้ก็ได้)"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "กำลังเรียงลำดับ"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "หมายเหตุ: จะเลือก '%s' สำหรับงานติดตั้ง '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "หมายเหตุ: จะเลือก '%s' สำหรับนิพจน์เรกิวลาร์ '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "หมายเหตุ: จะเลือก '%s' สำหรับนิพจน์เรกิวลาร์ '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "แพกเกจ %s เป็นแพกเกจเสมือนที่ตระเตรียมโดย:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr "[ติดตั้งอยู่]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [ไม่ใช่รุ่นสำหรับติดตั้ง]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "คุณควรเจาะจงเลือกแพกเกจใดแพกเกจหนึ่งเพื่อติดตั้ง"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"ไม่มีแพกเกจ %s ให้ใช้ติดตั้ง แต่ถูกอ้างถึงโดยแพกเกจอื่น\n"
+"แพกเกจนี้อาจขาดหายไป หรือตกรุ่นไปแล้ว หรืออยู่ในแหล่งอื่น\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "อย่างไรก็ดี แพกเกจต่อไปนี้ได้แทนที่แพกเกจดังกล่าวไปแล้ว:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "แพกเกจ '%s' ไม่มีรุ่นที่จะใช้ติดตั้ง"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "แพกเกจเสมือนอย่าง '%s' ไม่สามารถถอดถอนได้\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "แพกเกจ '%s' ไม่ได้ติดตั้งไว้ จึงไม่มีการถอดถอน คุณหมายถึง '%s' หรือเปล่า?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "แพกเกจ '%s' ไม่ได้ติดตั้งไว้ จึงไม่มีการถอดถอน\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "หมายเหตุ: จะเลือก '%s' แทน '%s'\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "APT นี้มีพลังของ Super Cow"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "โปรแกรมช่วยเหลือของ APT นี้มีพลัง Super Meep"
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "ไม่พบแพกเกจ"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "*คำเตือน*: แพกเกจต่อไปนี้ไม่สามารถยืนยันแหล่งต้นตอได้!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "จะข้ามการเตือนเกี่ยวกับการยืนยันแหล่งต้นตอ\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "มีบางแพกเกจไม่สามารถยืนยันแหล่งต้นตอได้"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "จะติดตั้งแพกเกจเหล่านี้โดยไม่ตรวจสอบหรือไม่?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "มีปัญหาบางประการ และมีการใช้ -y โดยไม่ระบุ --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "ไม่สามารถคำนวณพื้นที่ว่างใน %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "คุณมีพื้นที่ว่างเหลือไม่พอใน %s"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "ไม่สามารถล็อคไดเรกทอรีดาวน์โหลด"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"ไม่สามารถติดตั้งบางแพกเกจได้ คุณอาจระบุเงื่อนไขการติดตั้งที่เป็นไปไม่ได้\n"
+"หรือถ้าคุณกำลังใช้รุ่น unstable ก็เป็นไปได้ว่าแพกเกจที่จำเป็นบางรายการ\n"
+"ยังไม่ถูกสร้างขึ้น หรือถูกย้ายออกจาก Incoming"
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "ข้อมูลต่อไปนี้อาจช่วยแก้ปัญหาได้:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "แพกเกจมีปัญหา"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"ดาวน์โหลดบางแพกเกจไม่สำเร็จ บางที การเรียก apt-get update หรือลองใช้ตัวเลือก --fix-"
+"missing อาจช่วยได้"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "เกิดข้อผิดพลาดภายใน: มีการเรียก InstallPackages ด้วยแพกเกจที่เสีย!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "มีแพกเกจที่จำเป็นต้องถอดถอน แต่ถูกห้ามการถอดถอนไว้"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "มีปัญหาบางประการ และมีการใช้ -y โดยไม่ระบุ --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "มีปัญหาบางประการ และมีการใช้ -y โดยไม่ระบุ --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "ข้อผิดพลาดภายใน: การเรียงลำดับไม่เสร็จสิ้น"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "แปลกประหลาด... ขนาดไม่ตรงกัน กรุณาอีเมลแจ้ง apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "ต้องดาวน์โหลดแพกเกจ %sB/%sB\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "ต้องดาวน์โหลดแพกเกจ %sB\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "หลังจากการกระทำนี้ ต้องใช้เนื้อที่บนดิสก์อีก %sB\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "หลังจากการกระทำนี้ เนื้อที่บนดิสก์จะว่างเพิ่มอีก %sB\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Trivial Only ถูกกำหนดไว้ แต่คำสั่งนี้ไม่ใช่คำสั่งเล็กน้อย"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Yes, do as I say!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"คุณกำลังจะทำสิ่งที่อาจเป็นอันตราย\n"
+"หากต้องการดำเนินการต่อ ให้พิมพ์ประโยค '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "เลิกทำ"
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "คุณต้องการจะดำเนินการต่อไปหรือไม่?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "ดาวน์โหลดบางแฟ้มไม่สำเร็จ"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "ดาวน์โหลดสำเร็จแล้ว และอยู่ในโหมดดาวน์โหลดอย่างเดียว"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "ยังไม่รองรับ --fix-missing พร้อมกับการเปลี่ยนแผ่น"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "ไม่สามารถแก้ปัญหาแพกเกจที่ขาดหายได้"
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "จะล้มเลิกการติดตั้ง"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"แพกเกจต่อไปนี้ได้หายไปจากระบบของคุณ เพราะแฟ้มทั้งหมดได้ถูกแทนที่\n"
+"โดยแพกเกจอื่นแล้ว:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "หมายเหตุ: นี่เป็นสิ่งที่ dpkg ทำโดยอัตโนมัติโดยเจตนา"
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "apt ถูกกำหนดไม่ให้มีการลบใดๆ จึงไม่สามารถดำเนินการถอดถอนอัตโนมัติได้"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"ดูเหมือนการถอดถอนอัตโนมัติได้สร้างความเสียหายบางอย่าง ซึ่งไม่ควรเกิดขึ้น\n"
+"กรุณารายงานบั๊กนี้ของแพกเกจ apt"
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "เกิดข้อผิดพลาดภายใน: AutoRemover ทำความเสียหาย"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "แพกเกจต่อไปนี้ถูกติดตั้งแบบอัตโนมัติไว้ และไม่ต้องใช้อีกต่อไปแล้ว:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "มีแพกเกจ %lu แพกเกจถูกติดตั้งแบบอัตโนมัติไว้ และไม่ต้องใช้อีกต่อไปแล้ว\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "ใช้ '%s' เพื่อถอดถอนแพกเกจดังกล่าวได้"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "จะติดตั้งแพกเกจเพิ่มเติมต่อไปนี้:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "แพกเกจที่แนะนำ:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "แพกเกจที่ควรใช้ร่วมกัน:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "จะข้าม %s เนื่องจากแพกเกจติดตั้งไว้แล้ว และไม่มีการกำหนดให้ปรับรุ่น\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "จะข้าม %s เนื่องจากแพกเกจไม่ได้ติดตั้งไว้ และคำสั่งมีเพียงการปรับรุ่นเท่านั้น\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "ไม่สามารถติดตั้ง %s ซ้ำได้ เนื่องจากไม่สามารถดาวน์โหลดได้\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s เป็นรุ่นใหม่ล่าสุดอยู่แล้ว\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "กำหนด %s ให้เป็นการติดตั้งแบบเลือกเองแล้ว\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "เลือกรุ่น '%s' (%s) สำหรับ '%s' แล้ว\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "เลือกรุ่น '%s' (%s) สำหรับ '%s' แล้ว อันเนื่องมาจาก '%s'\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "กำลังแสดงรายชื่อ"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "มีอีก %i รุ่น กรุณาใช้ตัวเลือก '-a' หากต้องการดูเพิ่ม"
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"หมายเหตุ: นี่เป็นเพียงการจำลองการทำงานเท่านั้น!\n"
+" การทำงานจริงของ %s ต้องอาศัยสิทธิ์ผู้ดูแลระบบ\n"
+" อย่าลืมด้วยว่าการล็อคก็ไม่ทำงานเช่นกัน\n"
+" ดังนั้น อย่าถือผลลัพธ์นี้ว่าตรงกับสภาพความเป็นจริงของระบบ!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "ไม่ทราบ"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[ติดตั้งอยู่,สามารถปรับรุ่นเป็น: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[ติดตั้งอยู่,ในเครื่อง]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[ติดตั้งอยู่,ถอดถอนอัตโนมัติได้]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[ติดตั้งอยู่,อัตโนมัติ]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[ติดตั้งอยู่]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[สามารถปรับรุ่นจาก: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[ค่าตั้งตกค้าง]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "แต่รุ่นที่ติดตั้งไว้คือ %s"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "แต่รุ่นที่จะติดตั้งคือ %s"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "แต่ไม่สามารถติดตั้งได้"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "แต่แพกเกจนี้เป็นแพกเกจเสมือน"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "แต่แพกเกจนี้จะไม่ถูกติดตั้ง"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "แต่ไม่ได้ติดตั้งไว้"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " หรือ"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "แพกเกจต่อไปนี้ขาดแพกเกจที่ต้องใช้:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "จะติดตั้งแพกเกจ *ใหม่* ต่อไปนี้:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "จะ *ลบ* แพกเกจต่อไปนี้:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "จะคงรุ่นแพกเกจต่อไปนี้:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "จะปรับรุ่นแพกเกจต่อไปนี้ขึ้น:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "จะปรับรุ่นแพกเกจต่อไปนี้ *ลง*:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "จะเปลี่ยนแปลงรายการคงรุ่นแพกเกจต่อไปนี้:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (เนื่องจาก %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"*คำเตือน*: แพกเกจที่จำเป็นต่อไปนี้จะถูกถอดถอน\n"
+"คุณ *ไม่ควร* ทำเช่นนี้ นอกจากคุณเข้าใจสิ่งที่จะทำ!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "ปรับรุ่นขึ้น %lu, ติดตั้งใหม่ %lu, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "ติดตั้งซ้ำ %lu, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "ปรับรุ่นลง %lu, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "ถอดถอน %lu และไม่ปรับรุ่น %lu\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "ติดตั้งหรือถอดถอนไม่ครบ %lu\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Y/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[y/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "คุณต้องระบุแพตเทิร์นสำหรับค้นหาอย่างน้อยหนึ่งแพตเทิร์น"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "ค้นทั่วทั้งเนื้อความ"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "มีอีก %i ระเบียน กรุณาใช้ตัวเลือก '-a' หากต้องการดูเพิ่ม"
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "ไม่ใช่แพกเกจจริง (เสมือน)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "แฟ้มแพกเกจ:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "ข้อมูลแคชไม่ตรงกับความเป็นจริงแล้ว ไม่สามารถอ้างอิงไขว้ระหว่างแฟ้มแพกเกจ"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "แพกเกจที่ถูกตรึง:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " ที่ติดตั้งอยู่: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " รุ่นที่ติดตั้งได้: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(ไม่มี)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " ตารางรุ่น:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "ไม่พบแพกเกจสำหรับสถาปัตยกรรม '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "ไม่พบแพกเกจ '%s' ที่มีรุ่นเป็น '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "ไม่พบแพกเกจ '%s' ที่มีชุดจัดแจกเป็น '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "จะเลือก '%s' เป็นแพกเกจซอร์สแทน '%s'\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "ไม่พบรุ่น '%s' ของแพกเกจ '%s'"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "ต้องระบุแพกเกจอย่างน้อยหนึ่งแพกเกจที่จะดาวน์โหลดซอร์สโค้ด"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "ไม่พบแพกเกจซอร์สโค้ดสำหรับ %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"ข้อสังเกต: การจัดทำแพกเกจ '%s' พัฒนาผ่านระบบควบคุมรุ่น '%s' อยู่ที่:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"กรุณาใช้:\n"
+"%s\n"
+"เพื่อดึงรุ่นล่าสุด (ที่อาจยังไม่ปล่อยออกมา) ของตัวแพกเกจ\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "จะข้ามแฟ้ม '%s' ที่ดาวน์โหลดไว้แล้ว\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "ต้องดาวน์โหลดซอร์สโค้ด %sB/%sB\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "ต้องดาวน์โหลดซอร์สโค้ด %sB\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "ดาวน์โหลดซอร์ส %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "ไม่สามารถดาวน์โหลดบางแฟ้ม"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "จะข้ามการแตกซอร์สของซอร์สที่แตกไว้แล้วใน %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "คำสั่งแตกแฟ้ม '%s' ล้มเหลว\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "กรุณาตรวจสอบว่าได้ติดตั้งแพกเกจ 'dpkg-dev' แล้ว\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "คำสั่ง build '%s' ล้มเหลว\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "ไม่สามารถอ่านข้อมูลสิ่งที่ต้องการสำหรับการ build ของ %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s ไม่ต้องการสิ่งใดสำหรับ build\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"ไม่มีข้อมูลสถาปัตยกรรมสำหรับ %s ดูวิธีตั้งค่าที่หัวข้อ APT::Architectures ของ apt.conf(5)"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "ต้องระบุแพกเกจอย่างน้อยหนึ่งแพกเกจที่จะตรวจสอบสิ่งที่ต้องการสำหรับการ build"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "ติดตั้งสิ่งที่จำเป็นสำหรับการ build ไม่สำเร็จ"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "ติดตั้งสิ่งที่จำเป็นสำหรับการ build ไม่สำเร็จ"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "แจง %s ไม่สำเร็จ จะแก้ไขอีกครั้งหรือไม่? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "แฟ้ม '%s' ของคุณมีการเปลี่ยนแปลง กรุณาเรียก 'apt-get update'\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "แพกเกจ %s รุ่น %s ขาดแพกเกจที่ต้องใช้:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "คำสั่ง update ไม่รับอาร์กิวเมนต์เพิ่ม"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"มี %i แพกเกจสามารถปรับรุ่นได้ เรียก 'apt list --upgradable' หากต้องการดูรายชื่อ\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "ปรับรุ่นทุกแพกเกจเป็นรุ่นล่าสุดแล้ว"
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "คำสั่ง update ไม่รับอาร์กิวเมนต์เพิ่ม"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "จำนวนชื่อแพกเกจทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "จำนวนโครงสร้างแพกเกจทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " แพกเกจปกติ: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " แพกเกจเสมือนแท้ๆ: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " แพกเกจเสมือนที่มีแพกเกจจริงเดียว: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " แพกเกจเสมือนผสม: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " แพกเกจที่ขาดหาย: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "จำนวนรุ่นที่แตกต่างกันทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "จำนวนคำบรรยายแพกเกจที่แตกต่างกันทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "จำนวนการเชื่อมโยงระหว่างแพกเกจทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "จำนวนความสัมพันธ์ รุ่น/แฟ้ม ทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "จำนวนความสัมพันธ์ คำบรรยาย/แฟ้ม ทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "จำนวนผังการตระเตรียมทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "จำนวนสตริงทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "พื้นที่สำรองทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "พื้นที่ที่นับรวมทั้งหมด: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "คำสั่งนี้ไม่แนะนำให้ใช้แล้ว กรุณาใช้ 'apt-mark showauto' แทน"
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "แสดงระเบียนข้อมูลซอร์ส"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "ค้นรายชื่อแพกเกจด้วยนิพจน์เรกิวลาร์"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "แสดงข้อมูลแพกเกจที่ต้องใช้สำหรับแพกเกจที่กำหนด"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "แสดงข้อมูลแพกเกจอื่นที่ต้องใช้แพกเกจที่กำหนด"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "แสดงข้อมูลของแพกเกจ"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "แสดงรายชื่อแพกเกจทั้งหมด"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "แสดงค่าตั้งนโยบาย"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "กรุณาตั้งชื่อแผ่น เช่น 'Debian 5.0.3 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "กรุณาใส่แผ่นลงในไดรว์แล้วกด enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "ไม่สามารถเมานท์ '%s' ที่ '%s'"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"การตรวจซีดีรอมอัตโนมัติไม่พบซีดีรอมใดที่จุดเมานท์ปริยาย\n"
+"คุณอาจลองใช้ตัวเลือก --cdrom เพื่อกำหนดจุดเมานท์ของซีดีรอมได้\n"
+"อ่านข้อมูลเพิ่มเติมเกี่ยวกับการตรวจซีดีรอมอัตโนมัติและจุดเมานท์ได้จาก 'man apt-cdrom'"
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "ทำเช่นนี้ต่อไปกับแผ่นซีดีที่เหลือในชุด"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "อาร์กิวเมนต์ไม่ได้ระบุเป็นคู่ๆ"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"วิธีใช้: apt-config [ตัวเลือก] คำสั่ง\n"
+"\n"
+"apt-config เป็นเครื่องมือง่ายๆ ที่ใช้อ่านแฟ้มค่าตั้ง APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"วิธีใช้: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates เป็นเครื่องมือสำหรับแยกเอาข้อมูลการตั้งค่าและเทมเพลต\n"
+"ออกมาจากแพกเกจเดเบียน\n"
+"\n"
+"ตัวเลือก:\n"
+" -h แสดงข้อความช่วยเหลือนี้\n"
+" -t กำหนดไดเรกทอรีทำงานชั่วคราว\n"
+" -c=? อ่านแฟ้มค่าตั้งนี้\n"
+" -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "ไม่สามารถอ่านรุ่นของ debconf ได้ ได้ติดตั้ง debconf ไว้หรือไม่?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "ไม่พบแพกเกจ %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "กำหนด %s ให้เป็นการติดตั้งแบบอัตโนมัติแล้ว\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr "คำสั่งนี้ไม่แนะนำให้ใช้แล้ว กรุณาใช้ 'apt-mark auto' และ 'apt-mark manual' แทน"
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "เกิดข้อผิดพลาดภายใน: กลไกการแก้ปัญหาทำความเสียหาย"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "มอดูลที่รองรับ:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"วิธีใช้: apt-get [ตัวเลือก] คำสั่ง\n"
+" apt-get [ตัวเลือก] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [ตัวเลือก] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get เป็นคำสั่งง่ายๆ สำหรับดาวน์โหลดและติดตั้งแพกเกจ คำสั่งที่ใช้บ่อยที่สุดก็คือ\n"
+"update และ install\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "ดาวน์โหลดรายชื่อแพกเกจชุดใหม่"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "ปรับรุ่นแพกเกจต่างๆ ขึ้น"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "ติดตั้งแพกเกจใหม่ (pkg อยู่ในรูปเช่น libc6 ไม่ใช่ libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "ติดตั้งแพกเกจใหม่ (pkg อยู่ในรูปเช่น libc6 ไม่ใช่ libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "ถอดถอนแพกเกจ"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "ถอดถอนแพกเกจพร้อมลบค่าตั้งทั้งหมด"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "ถอดถอนแพกเกจที่ไม่ใช้แล้วโดยอัตโนมัติ"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "ปรับรุ่นขึ้นแบบข้ามรุ่นจัดแจก ดู apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "ทำตามสิ่งที่เลือกโดย dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "ติดตั้งสิ่งที่จำเป็นสำหรับการประกอบสร้างแพกเกจซอร์สโค้ด"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "ลบแฟ้มแพกเกจที่ดาวน์โหลดมา"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "ลบแฟ้มแพกเกจเก่าที่ดาวน์โหลดมา"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "ตรวจสอบว่าไม่มีความเชื่อมโยงที่เสียระหว่างแพกเกจ"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "ดาวน์โหลดซอร์สโค้ดของแพกเกจ"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "ดาวน์โหลดแพกเกจไบนารีลงในไดเรกทอรีปัจจุบัน"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "ดาวน์โหลดและแสดงปูมการแก้ไขของแพกเกจที่กำหนด"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "ต้องการ URL หนึ่งรายการเป็นอาร์กิวเมนต์"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "ต้องระบุคู่ URL, ชื่อแฟ้ม อย่างน้อยหนึ่งคู่"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "ดาวน์โหลดไม่สำเร็จ"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"วิธีใช้: apt-helper [ตัวเลือก] คำสั่ง\n"
+" apt-helper [ตัวเลือก] download-file URI พาธปลายทาง\n"
+"\n"
+"apt-helper เป็นโปรแกรมช่วยเหลือภายในของ apt\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "ดาวน์โหลด URI ที่กำหนดลงในพาธปลายทาง"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "ตรวจหาพร็อกซีโดยใช้ apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"วิธีใช้: apt-internal-solver\n"
+"\n"
+"apt-internal-solver "
+"เป็นเครื่องมือสำหรับเรียกใช้กลไกภายในปัจจุบันเสมือนเป็นกลไกการแก้ปัญหาภายนอกสำหรับโปรแกรมตระกูล "
+"APT เพื่อการดีบั๊กหรืออะไรทำนองนี้\n"
+"\n"
+"ตัวเลือก:\n"
+" -h แสดงข้อความช่วยเหลือนี้\n"
+" -q แสดงผลลัพธ์แบบบันทึกลงแฟ้มได้ - ไม่ต้องแสดงความคืบหน้า\n"
+" -c=? อ่านแฟ้มค่าตั้งนี้\n"
+" -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"วิธีใช้: apt-internal-solver\n"
+"\n"
+"apt-internal-solver "
+"เป็นเครื่องมือสำหรับเรียกใช้กลไกภายในปัจจุบันเสมือนเป็นกลไกการแก้ปัญหาภายนอกสำหรับโปรแกรมตระกูล "
+"APT เพื่อการดีบั๊กหรืออะไรทำนองนี้\n"
+"\n"
+"ตัวเลือก:\n"
+" -h แสดงข้อความช่วยเหลือนี้\n"
+" -q แสดงผลลัพธ์แบบบันทึกลงแฟ้มได้ - ไม่ต้องแสดงความคืบหน้า\n"
+" -c=? อ่านแฟ้มค่าตั้งนี้\n"
+" -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s ไม่สามารถทำเครื่องหมายได้ เพราะไม่ได้ติดตั้งไว้\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s ถูกกำหนดให้เป็นการติดตั้งแบบเลือกเองอยู่ก่อนแล้ว\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s ถูกกำหนดให้เป็นการติดตั้งแบบอัตโนมัติอยู่ก่อนแล้ว\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "จะติดตั้งแพกเกจ *ใหม่* ต่อไปนี้:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ถูกกำหนดให้คงรุ่นอยู่ก่อนแล้ว\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ไม่ได้คงรุ่นอยู่ก่อนแล้ว\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "เรียกทำงาน dpkg ไม่สำเร็จ คุณเป็น root หรือเปล่า?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "กำหนด %s ให้คงรุ่นแล้ว\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "ยกเลิกการคงรุ่นของ %s แล้ว\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"วิธีใช้: apt-mark [ตัวเลือก] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark เป็นเครื่องมือบรรทัดคำสั่งอย่างง่ายสำหรับทำเครื่องหมายแพกเกจ\n"
+"ว่าเป็นการติดตั้งแบบเลือกเองหรือแบบอัตโนมัติ และสามารถแสดงการทำเครื่องหมายต่างๆ ได้ด้วย\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "ทำเครื่องหมายแพกเกจที่กำหนดให้เป็นการติดตั้งแบบอัตโนมัติ"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "ทำเครื่องหมายแพกเกจที่กำหนดให้เป็นการติดตั้งแบบเลือกเอง"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "ทำเครื่องหมายแพกเกจที่กำหนดให้เป็นการติดตั้งแบบอัตโนมัติ"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "ทำเครื่องหมายแพกเกจที่กำหนดให้เป็นการคงรุ่น"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "ลบการทำเครื่องหมายการคงรุ่นจากแพกเกจที่กำหนด"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "แสดงรายชื่อของแพกเกจที่ติดตั้งแบบอัตโนมัติ"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "แสดงรายชื่อของแพกเกจที่ติดตั้งแบบเลือกเอง"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "แสดงรายชื่อของแพกเกจที่คงรุ่นอยู่"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "พบระเบียนแพกเกจที่ไม่รู้จัก!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "แสดงรายชื่อแพกเกจที่มีชื่อตรงกับรูปแบบที่กำหนด"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "ค้นหาในคำบรรยายแพกเกจ"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "แสดงรายละเอียดของแพกเกจ"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "ติดตั้งแพกเกจ"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "ติดตั้งแพกเกจ"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "ถอดถอนแพกเกจ"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "ปรับข้อมูลรายชื่อของแพกเกจที่มี"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "ปรับรุ่นระบบโดยติดตั้ง/ปรับรุ่นแพกเกจต่างๆ"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "ปรับรุ่นระบบโดยถอดถอน/ติดตั้ง/ปรับรุ่นแพกเกจต่างๆ"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "แก้ไขแฟ้มข้อมูลแหล่งแพกเกจ"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "ค่าตั้งปริยายผิดพลาด!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "กด enter เพื่อดำเนินการต่อ"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "คุณต้องการจะลบแฟ้ม .deb ต่างๆ ที่ได้ดาวน์โหลดมาก่อนหน้านี้หรือไม่?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "เกิดข้อผิดพลาดขณะแตกแพกเกจ โปรแกรมจะตั้งค่าแพกเกจที่ติดตั้งแล้ว"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "อาจทำให้เกิดข้อความแจ้งข้อผิดพลาดซ้ำ หรือข้อผิดพลาดเนื่องจากแพกเกจที่ต้องใช้ขาดหาย"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "ซึ่งไม่มีปัญหาอะไร มีเฉพาะข้อผิดพลาดก่อนหน้าข้อความนี้เท่านั้นที่สำคัญ"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "กรุณาแก้ปัญหาเหล่านั้น แล้วเรียกติดตั้งใหม่อีกครั้ง"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "กำลังผสานรายชื่อของแพกเกจที่มี"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "รายชื่อนามสกุลแพกเกจยาวเกินไป"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "เกิดข้อผิดพลาดขณะประมวลผลไดเรกทอรี %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "รายชื่อนามสกุลซอร์สยาวเกินไป"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "เกิดข้อผิดพลาดขณะเขียนข้อมูลส่วนหัวลงในแฟ้มสารบัญ"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "เกิดข้อผิดพลาดขณะประมวลผลสารบัญ %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"วิธีใช้: apt-ftparchive [ตัวเลือก] คำสั่ง\n"
+"คำสั่ง: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive ใช้สร้างแฟ้มดัชนีสำหรับแหล่งแพกเกจเดเบียน รองรับวิธีสร้างหลายแบบ\n"
+"ตั้งแต่แบบอัตโนมัติทั้งหมด ไปจนถึงการใช้แทน dpkg-scanpackages และ dpkg-scansources\n"
+"\n"
+"apt-ftparchive สร้างแฟ้ม Package จากต้นไม้ไดเรกทอรีที่เก็บ .deb แฟ้ม Package\n"
+"จะรวมเนื้อหาข้อมูลควบคุมทุกรายการของแต่ละแพกเกจ รวมถึง MD5 hash และขนาดแฟ้ม\n"
+"และรองรับการสร้างแฟ้ม override เพื่อบังคับค่าลำดับความสำคัญและหมวดแพกเกจด้วย\n"
+"\n"
+"ในทำนองเดียวกัน apt-ftparchive จะสร้างแฟ้ม Sources จากต้นไม้ไดเรกทอรีที่เก็บ .dsc\n"
+"คุณสามารถใช้ตัวเลือก --source-override เพื่อระบุแฟ้ม override สำหรับซอร์สได้\n"
+"\n"
+"คำสั่ง 'packages' และ 'sources' ควรเรียกที่ตำแหน่งรากของต้นไม้ไดเรกทอรี\n"
+"ค่า binarypath ควรชี้ไปที่ตำแหน่งฐานที่จะค้นหาแบบทั่วถึง และแฟ้ม override ก็ควรมีแฟล็ก\n"
+"override ต่างๆ สำหรับแพกเกจ ค่า pathprefix จะถูกเพิ่มเข้าที่หน้าข้อมูล filename ถ้ามี\n"
+"ตัวอย่างการใช้งานจากแหล่งแพกเกจเดเบียน:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"ตัวเลือก:\n"
+" -h แสดงข้อความช่วยเหลือนี้\n"
+" --md5 ควบคุมการสร้าง MD5\n"
+" -s=? แฟ้ม override สำหรับซอร์ส\n"
+" -q ทำงานแบบเงียบ\n"
+" -d=? เลือกฐานข้อมูลแคชอื่น\n"
+" --no-delink เปิดโหมดดีบั๊กสำหรับการตัดลิงก์\n"
+" --contents ควบคุมการสร้างแฟ้มสารบัญ\n"
+" -c=? อ่านแฟ้มค่าตั้งนี้\n"
+" -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "ไม่มีรายการเลือกที่ตรง"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "บางแฟ้มขาดหายไปในกลุ่มแฟ้มแพกเกจ `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB เสีย จะเปลี่ยนชื่อแฟ้มเป็น %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB เป็นรุ่นเก่า จะพยายามปรับรุ่น %s ขึ้น"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr "ฟอร์แมตของ DB ผิด ถ้าคุณเพิ่งปรับรุ่นมาจาก apt รุ่นเก่า กรุณาลบฐานข้อมูลแล้วสร้างใหม่"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "ไม่สามารถเปิดแฟ้ม DB %s: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "อ่าน .dsc ไม่สำเร็จ"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "แพกเกจไม่มีระเบียนควบคุม"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "ไม่สามารถนำตัวชี้ตำแหน่งมาใช้ได้"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - จองหน่วยความจำไม่สำเร็จ"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "ไม่รู้จักอัลกอริทึมบีบอัด '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "ผลลัพธ์ของการบีบอัด %s ต้องมีชุดของการบีบอัดด้วย"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "ไม่สามารถสร้างไปป์ IPC ไปยังโพรเซสย่อย"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "fork ไม่สำเร็จ"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "โพรเซสลูกสำหรับบีบอัด"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "ข้อผิดพลาดภายใน: ไม่สามารถสร้าง %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "IO ไปยังโพรเซสย่อยหรือแฟ้มล้มเหลว"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "อ่านแฟ้มไม่สำเร็จขณะคำนวณ MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "ไม่สามารถเปิด %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "ไม่สามารถอ่านแฟ้ม override %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: อ่านไดเรกทอรี %s ไม่สำเร็จ\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: stat %s ไม่สำเร็จ\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: ข้อผิดพลาดเกิดกับแฟ้ม "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "หาพาธเต็มของ %s ไม่สำเร็จ"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "เดินท่องต้นไม้ไม่สำเร็จ"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "เปิด %s ไม่สำเร็จ"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** ลิงก์ %s ไปยัง %s ไม่สำเร็จ"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " มาถึงขีดจำกัดการ DeLink ที่ %sB แล้ว\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "แพกเกจไม่มีช่องข้อมูล 'Package'"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s ไม่มีข้อมูล override\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " ผู้ดูแล %s คือ %s ไม่ใช่ %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s ไม่มีข้อมูล override สำหรับซอร์ส\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s ไม่มีข้อมูล override สำหรับไบนารีเช่นกัน\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "รอหัวข้อมูล"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "เซิร์ฟเวอร์ HTTP ส่งข้อมูลส่วนหัวตอบมาไม่ถูกต้อง"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "บรรทัดข้อมูลส่วนหัวผิดพลาด"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "เซิร์ฟเวอร์ HTTP ส่งข้อมูลส่วนหัว Content-Length มาไม่ถูกต้อง"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "เซิร์ฟเวอร์ HTTP ส่งข้อมูลส่วนหัว Content-Range มาไม่ถูกต้อง"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "การสนับสนุน Content-Range ที่เซิร์ฟเวอร์ HTTP ผิดพลาด"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "พบรูปแบบวันที่ที่ไม่รู้จัก"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "ข้อมูลส่วนหัวผิดพลาด"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "เชื่อมต่อไม่สำเร็จ"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "ข้อผิดพลาดภายใน"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "ไม่สามารถอ่านฐานข้อมูลซีดีรอม %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"กรุณาใช้ apt-cdrom เพื่อให้ APT รู้จักซีดีรอมนี้ apt-get update ไม่สามารถใช้เพิ่มซีดีรอมใหม่ได้"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "ซีดีรอมผิดแผ่น"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "ไม่สามารถเลิกเมานท์ซีดีรอมใน %s แผ่นอาจกำลังถูกใช้งานอยู่"
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "ไม่พบแผ่น"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "ไม่พบแฟ้ม"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "เชื่อมต่อไปยัง %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "เชื่อมต่อไปยัง %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "ไม่สามารถสร้างซ็อกเก็ตสำหรับ %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "ไม่สามารถเริ่มการเชื่อมต่อไปยัง %s:%s (%s)"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "ล้มเหลว"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "ไม่สามารถเชื่อมต่อไปยัง %s:%s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "ไม่สามารถเชื่อมต่อไปยัง %s:%s (%s) เนื่องจากหมดเวลาคอย"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "เชื่อมต่อไปยัง %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "ไม่สามารถเปิดหาที่อยู่ '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "เกิดความล้มเหลวชั่วคราวขณะเปิดหาที่อยู่ '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "เกิดข้อผิดพลาดในระบบขณะเปิดหาที่อยู่ '%s:%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "เกิดปัญหาร้ายแรงบางอย่างขณะเปิดหาที่อยู่ '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "ไม่สามารถเชื่อมต่อไปยัง %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "stat ไม่สำเร็จ"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "URI ไม่ถูกต้อง URI ของแฟ้มในเครื่องต้องขึ้นต้นด้วย //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "เข้าระบบ"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "ไม่สามารถอ่านชื่อของอีกฝ่ายได้"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "ไม่สามารถอ่านชื่อของเครื่องนี้ได้"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "เซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อโดยรายงานว่า: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER ล้มเหลว เซิร์ฟเวอร์ตอบว่า: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS ล้มเหลว เซิร์ฟเวอร์ตอบว่า: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr "มีการระบุพร็อกซี แต่ไม่มีสคริปต์สำหรับเข้าระบบ ค่า Acquire::ftp:ProxyLogin ว่างเปล่า"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "คำสั่งสคริปต์เข้าระบบ '%s' ล้มเหลว เซิร์ฟเวอร์ตอบว่า: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE ล้มเหลว เซิร์ฟเวอร์ตอบว่า: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "หมดเวลารอเชื่อมต่อ"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "เซิร์ฟเวอร์ปิดการเชื่อมต่อ"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "คำตอบท่วมบัฟเฟอร์"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "มีความเสียหายของโพรโทคอล"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "ไม่สามารถสร้างซ็อกเก็ต"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "ไม่สามารถเชื่อมต่อซ็อกเก็ตข้อมูล เนื่องจากหมดเวลาคอย"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "ไม่สามารถเชื่อมต่อซ็อกเกตแบบ passive"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo ไม่สามารถนำซ็อกเก็ตที่รอรับการเชื่อมต่อมาใช้"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "ไม่สามารถ bind ซ็อกเก็ต"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "ไม่สามารถ listen ที่ซ็อกเก็ต"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "ไม่สามารถระบุชื่อซ็อกเก็ต"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "ไม่สามารถส่งคำสั่ง PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "ไม่รู้จักตระกูลที่อยู่ %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT ล้มเหลว เซิร์ฟเวอร์ตอบว่า: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "หมดเวลารอเชื่อมต่อซ็อกเก็ตข้อมูล"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "ไม่สามารถรับการเชื่อมต่อ"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "เกิดปัญหาขณะคำนวณค่าแฮชของแฟ้ม"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "ไม่สามารถดาวน์โหลดแฟ้ม เซิร์ฟเวอร์ตอบว่า: '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "หมดเวลาคอยที่ซ็อกเก็ตข้อมูล"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "ถ่ายโอนข้อมูลไม่สำเร็จ เซิร์ฟเวอร์ตอบว่า '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "สอบถาม"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "ไม่สามารถเรียก "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, fuzzy, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"แฟ้มที่เซ็นกำกับครอบข้อความมีเนื้อหาไม่ถูกต้อง ได้รับผลลัพธ์ "
+"'%s' (เครือข่ายต้องยืนยันตัวบุคคลหรือไม่?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "พบลายเซ็นที่ใช้การไม่ได้อย่างน้อยหนึ่งรายการ"
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "ข้อผิดพลาดภายใน: ลายเซ็นใช้การได้ แต่ไม่สามารถระบุลายนิ้วมือของกุญแจ?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr "ไม่สามารถเรียก 'apt-key' เพื่อตรวจสอบลายเซ็น (ได้ติดตั้ง gnupg ไว้หรือไม่?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "เกิดข้อผิดพลาดไม่ทราบสาเหตุขณะเรียก apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "ลายเซ็นต่อไปนี้ใช้การไม่ได้:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "ลายเซ็นต่อไปนี้ไม่สามารถตรวจสอบได้ เพราะไม่มีกุญแจสาธารณะ:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "เกิดข้อผิดพลาดขณะเขียนลงแฟ้ม"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลจากเซิร์ฟเวอร์ ปลายทางอีกด้านหนึ่งปิดการเชื่อมต่อ"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลจากเซิร์ฟเวอร์"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "เกิดข้อผิดพลาดขณะเขียนลงแฟ้ม"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "select ไม่สำเร็จ"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "หมดเวลารอเชื่อมต่อ"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "เกิดข้อผิดพลาดขณะเขียนลงแฟ้มผลลัพธ์"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "กำหนดเวลาแก้ไขไม่สำเร็จ"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "การเชื่อมต่อถูกปิดก่อนเวลาอันควร"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "แฟ้มว่างเปล่าไม่สามารถเป็นแฟ้มจัดเก็บที่ใช้การได้"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "ข้อมูลส่วนหัว %s ของสมาชิกแฟ้มจัดเก็บไม่ถูกต้อง"
+
+#~ msgid "Removed %s"
+#~ msgstr "ถอดถอน %s แล้ว"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "ข้อมูลแฟ้ม Package %s ไม่ตรงกับความเป็นจริง"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr "แฟ้มดัชนีแพกเกจเสียหาย ไม่มีข้อมูล Filename: (ชื่อแฟ้ม) สำหรับแพกเกจ %s"
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "ไม่พบแฟ้มแหล่งสำเนา '%s'"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "ไม่สามารถอ่านแฟ้มแหล่งสำเนา '%s'"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "ไม่พบรายการในแฟ้มแหล่งสำเนา '%s'"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[แหล่งสำเนา: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "ขณะเปิดแฟ้มค่าตั้ง %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "กำลังเปิด %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "ไม่พบรายการ '%s' ที่ต้องการในแฟ้ม Release (รายการ sources.list ไม่ถูกต้อง "
+#~ "หรือแฟ้มผิดรูปแบบ)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "รายการแพกเกจที่ต้องใช้ไม่ครบ กรุณาลองใช้ตัวเลือก --fix-broken"
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "คุณอาจเรียก 'apt --fix-broken install' เพื่อแก้ปัญหานี้ได้:"
+
+#~ msgid "(not found)"
+#~ msgstr "(ไม่พบ)"
+
+#~ msgid " Package pin: "
+#~ msgstr " การตรึงแพกเกจ: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "ไม่มีกุญแจสาธารณะสำหรับกุญแจหมายเลขต่อไปนี้:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "ไดเรกทอรี %s ถูก divert"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "ไม่สามารถติดตั้งสิ่งเชื่อมโยง %s สำหรับ %s ได้ เพราะไม่สามารถใช้ %s กับแพกเกจ '%s' ได้"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "ไม่สามารถติดตั้งสิ่งเชื่อมโยง %s สำหรับ %s ได้ เพราะไม่พบแพกเกจ %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr "ไม่สามารถติดตั้งสิ่งเชื่อมโยง %s สำหรับ %s ได้: แพกเกจ %s ที่ติดตั้งไว้ใหม่เกินไป"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "ไม่สามารถติดตั้งสิ่งเชื่อมโยง %s สำหรับ %s ได้ เพราะไม่มีแพกเกจ %s "
+#~ "รุ่นที่จะสอดคล้องกับความต้องการรุ่นของแพกเกจได้"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "ไม่สามารถติดตั้งสิ่งเชื่อมโยง %s สำหรับ %s ได้ เพราะ %s ไม่มีรุ่นที่ติดตั้งได้"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "ไม่สามารถติดตั้งสิ่งเชื่อมโยง %s สำหรับ %s ได้: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "ไม่สามารถติดตั้งสิ่งที่จำเป็นสำหรับการ build ของ %s ได้"
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "มีปัญหาขณะลบแฟ้ม %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "unlink %s ไม่สำเร็จ"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "วิธีใช้: apt-cache [ตัวเลือก] คำสั่ง\n"
+#~ " apt-cache [ตัวเลือก] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache เป็นเครื่องมือระดับล่างสำหรับสืบค้นข้อมูลจากแฟ้มแคชไบนารีของ APT\n"
+
+#~ msgid "Commands:"
+#~ msgstr "คำสั่ง:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "ตัวเลือก:\n"
+#~ " -h แสดงข้อความช่วยเหลือนี้\n"
+#~ " -p=? แฟ้มแคชของแพกเกจ\n"
+#~ " -s=? แฟ้มแคชของซอร์ส\n"
+#~ " -q ปิดแถบแสดงความคืบหน้า\n"
+#~ " -i แสดงเฉพาะข้อมูลความเชื่อมโยงที่สำคัญสำหรับคำสั่ง unmet\n"
+#~ " -c=? อ่านแฟ้มค่าตั้งนี้\n"
+#~ " -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+#~ "กรุณาอ่านข้อมูลเพิ่มเติมจาก manual page apt-cache(8) และ apt.conf(5)\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "วิธีใช้: apt [ตัวเลือก] คำสั่ง\n"
+#~ "\n"
+#~ "บรรทัดคำสั่งสำหรับ apt\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "ตัวเลือก:\n"
+#~ " -h แสดงข้อความช่วยเหลือนี้\n"
+#~ " -q แสดงผลลัพธ์แบบบันทึกลงแฟ้มได้ - ไม่ต้องแสดงความคืบหน้า\n"
+#~ " -qq ไม่ต้องแสดงผลลัพธ์ ยกเว้นข้อผิดพลาด\n"
+#~ " -s ไม่ต้องทำจริง เพียงจำลองลำดับการทำงานเท่านั้น\n"
+#~ " -f อ่าน/เขียน เครื่องหมาย อัตโนมัติ/เลือกเอง ในแฟ้มที่กำหนด\n"
+#~ " -c=? อ่านแฟ้มค่าตั้งนี้\n"
+#~ " -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+#~ "กรุณาอ่านข้อมูลเพิ่มเติมจาก manual page apt-mark(8) และ apt.conf(5)"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "ตัวเลือก:\n"
+#~ " -h ข้อความช่วยเหลือนี้\n"
+#~ " -c=? อ่านแฟ้มค่าตั้งที่กำหนด\n"
+#~ " -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "ตัวเลือก:\n"
+#~ " -h แสดงข้อความช่วยเหลือนี้\n"
+#~ " -q แสดงผลลัพธ์แบบบันทึกลงแฟ้มได้ - ไม่ต้องแสดงความคืบหน้า\n"
+#~ " -qq ไม่ต้องแสดงผลลัพธ์ ยกเว้นข้อผิดพลาด\n"
+#~ " -s ไม่ต้องทำจริง เพียงจำลองลำดับการทำงานเท่านั้น\n"
+#~ " -f อ่าน/เขียน เครื่องหมาย อัตโนมัติ/เลือกเอง ในแฟ้มที่กำหนด\n"
+#~ " -c=? อ่านแฟ้มค่าตั้งนี้\n"
+#~ " -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+#~ "กรุณาอ่านข้อมูลเพิ่มเติมจาก manual page apt-mark(8) และ apt.conf(5)"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "วิธีใช้: apt-sortpkgs [ตัวเลือก] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs เป็นเครื่องมืออย่างง่ายสำหรับเรียงลำดับแฟ้มรายชื่อแพกเกจ ตัวเลือก -s\n"
+#~ "ใช้สำหรับระบุชนิดของแฟ้มที่เรียง\n"
+#~ "\n"
+#~ "ตัวเลือก:\n"
+#~ " -h แสดงข้อความช่วยเหลือนี้\n"
+#~ " -s เรียงตามแฟ้มซอร์สโค้ด\n"
+#~ " -c=? อ่านแฟ้มค่าตั้งนี้\n"
+#~ " -o=? กำหนดตัวเลือกค่าตั้งเป็นรายตัว เช่น -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "โพรเซสลูกล้มเหลว"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "ต้องระบุคู่ URL, ชื่อแฟ้ม อย่างน้อยหนึ่งคู่"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "สร้างไปป์ไม่สำเร็จ"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "เรียก gzip ไม่สำเร็จ"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s สำหรับ %s คอมไพล์เมื่อ %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "สร้าง FILE* ไม่สำเร็จ"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "วรรคที่ %u ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (ขณะแจง URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ ([ตัวเลือก] แจงไม่ผ่าน)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ ([ตัวเลือก] สั้นเกินไป)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ ([%s] ไม่ใช่การกำหนดค่า)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ ([%s] ไม่มีคีย์)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ ([%s] คีย์ %s ไม่มีค่า)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (ขณะแจง URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (dist แบบสัมบูรณ์)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "บรรทัด %lu ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (ขณะแจง dist)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "ไม่พบแพกเกจ %s %s ขณะประมวลผลความขึ้นต่อแฟ้ม"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "ไม่สามารถ stat รายการแพกเกจซอร์ส %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "กำลังเก็บข้อมูลแฟ้มที่ตระเตรียมให้"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "แฟ้ม %s ไม่ได้ขึ้นต้นด้วยการระบุการเซ็นกำกับครอบในตัวข้อความ"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "ไม่พบผลรวมแฮชสำหรับ '%s' ในแฟ้ม Release"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "บล็อคผู้ผลิต %s ไม่มีลายนิ้วมือ"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "ขนาดของพื้นที่ความเชื่อมโยงระหว่างแพกเกจทั้งหมด: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "คุณมีพื้นที่ว่างเหลือไม่พอใน %s"
+
+#~ msgid "Done"
+#~ msgstr "เสร็จแล้ว"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "ไม่มีพวงกุญแจติดตั้งไว้ใน %s"
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "stdout เป็นเทอร์มินัลหรือไม่?"
+
+#~ msgid "ioctl(TIOCGWINSZ) failed"
+#~ msgstr "ioctl(TIOCGWINSZ) ล้มเหลว"
+
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "เกิดข้อผิดพลาดภายใน: การปรับรุ่นทำความเสียหาย"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ไม่ใช่แพกเกจ DEB ที่ใช้การได้"
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "กำลังใช้จุดเมานท์ซีดีรอม %s\n"
+#~ "กำลังเมานท์ซีดีรอม\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr "ไม่สามารถปรับแก้ %s ด้วย mmap และการกระทำแฟ้ม - ดูเหมือนแพตช์จะเสีย"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "ไม่สามารถปรับแก้ %s ด้วย mmap (แต่ไม่พบข้อผิดพลาดที่เจาะจงเฉพาะ mmap) - "
+#~ "ดูเหมือนแพตช์จะเสีย"
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "จะละเลยรุ่นเป้าหมาย '%s' ซึ่งไม่มีอยู่ของแพกเกจ '%s'"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "กำลังดาวน์โหลด %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "แฟ้มนี้ไม่ใช่แพกเกจ DEB ที่ใช้การได้ ขาดข้อมูล '%s', '%s' หรือ '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum ไม่ตรงกัน"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr "ไม่พบแฟ้มสำหรับแพกเกจ %s คุณอาจต้องแก้ปัญหาแพกเกจนี้เอง"
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "ไม่สามารถเขียนบันทึกปฏิบัติการ เนื่องจาก openpty() ล้มเหลว (ไม่ได้เมานท์ /dev/pts "
+#~ "หรือเปล่า?)\n"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "ไม่สามารถลบ %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "ไม่สามารถสร้าง %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "ไม่สามารถ stat %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "ไดเรกทอรี info และ temp ต้องอยู่ในระบบแฟ้มเดียวกัน"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "ไม่สามารถเปลี่ยนไปยังไดเรกทอรีระบบ %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "เกิดข้อผิดพลาดภายในขณะอ่านชื่อแพกเกจ"
+
+#~ msgid "Reading file listing"
+#~ msgstr "กำลังอ่านรายชื่อแฟ้ม"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "เปิดแฟ้มรายชื่อแฟ้ม '%sinfo/%s' ไม่สำเร็จ ถ้าคุณไม่สามารถเรียกแฟ้มนี้คืนได้ "
+#~ "ก็ให้สร้างแฟ้มดังกล่าวให้เป็นแฟ้มเปล่า แล้วติดตั้งแพกเกจรุ่นเดิมซ้ำทันที"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "อ่านแฟ้มรายชื่อแฟ้ม %sinfo/%s ไม่สำเร็จ"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "เกิดข้อผิดพลาดภายในขณะอ่านโหนด"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "เปิดแฟ้ม diversion %sdiversions ไม่สำเร็จ"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "แฟ้ม diversion เสียหาย"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "ข้อมูลผิดพลาดในแฟ้ม diversion: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "เกิดข้อผิดพลาดภายในขณะเพิ่มการเบนแฟ้ม"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "ต้องกำหนดค่าตั้งต้นแคชของแพกเกจก่อน"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "หาข้อมูลส่วนหัว Package: ไม่พบ ที่ออฟเซ็ต %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "หมวด ConfFile เสียหายในแฟ้ม status ที่ออฟเซ็ต %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "เกิดข้อผิดพลาดขณะแจง MD5 ที่ออฟเซ็ต %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "ไม่สามารถเปลี่ยนไดเรกทอรีไปยัง %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "ไม่พบแฟ้มควบคุมที่ใช้การได้"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "ไม่สามารถเปิดไปป์สำหรับ %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "เกิดข้อผิดพลาดขณะอ่านจากโพรเซส %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "ได้รับบรรทัดข้อมูลส่วนหัวยาวเกิน %u อักขระ"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "ตัวคลายบีบอัด"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "read: ยังเหลือ %lu ที่ยังไม่ได้อ่าน แต่ข้อมูลหมดแล้ว"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "write: ยังเหลือ %lu ที่ยังไม่ได้เขียน แต่ไม่สามารถเขียนได้"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "ข้อผิดพลาดภายใน: ไม่พบสมาชิก"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "E: รายการอาร์กิวเมนต์ใน Acquire::gpgv::Options ยาวเกินไป จะจบการทำงาน"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "บรรทัด %u ในแฟ้มรายชื่อแหล่งแพกเกจ %s ผิดรูปแบบ (id ผู้ผลิต)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "ไม่สามารถเข้าใช้พวงกุญแจ: '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "ไม่สามารถแพตช์แฟ้ม"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "กำลังประมวลผลการสะกิดสำหรับ %s"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "เนื้อที่สำหรับทำ MMap แบบพลวัตเต็มแล้ว"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "และเนื่องจากคุณได้สั่งดำเนินการเพียงรายการเดียวเท่านั้น ก็เป็นไปได้สูงว่าแพกเกจนี้เสีย\n"
+#~ "คุณควรจะรายงานบั๊กสำหรับแพกเกจนี้"
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "บรรทัด %d ยาวเกินไป (สูงสุด %lu)"
+
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "บรรทัด %d ยาวเกินไป (สูงสุด %d)"
+
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "พบดัชนีแพกเกจ %i รายการ, ดัชนีซอร์ส %i รายการ, ดัชนีคำแปล %i รายการ และลายเซ็น %i "
+#~ "รายการ\n"
+
+#~ msgid "openpty failed\n"
+#~ msgstr "openpty ล้มเหลว\n"
diff --git a/po/tl.po b/po/tl.po
new file mode 100644
index 0000000..ac73ead
--- /dev/null
+++ b/po/tl.po
@@ -0,0 +1,4341 @@
+# Tagalog messages for apt debconf.
+# Copyright (C) 2005 Software in the Public Interest, Inc.
+# This file is distributed under the same license as apt.
+# Itong talaksan ay ipinapamahagi sa parehong lisensya ng apt.
+# Eric Pareja <xenos@upm.edu.ph>, 2005
+# This file is maintained by Eric Pareja <xenos@upm.edu.ph>
+# Itong talaksan ay inaalagaan ni Eric Pareja <xenos@upm.edu.ph>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2007-03-29 21:36+0800\n"
+"Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n"
+"Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n"
+"Language: tl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Hindi tanggap na signature ng arkibo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Error sa pagbasa ng header ng miyembro ng arkibo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Hindi tanggap na header ng miyembro ng arkibo"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Bitin ang arkibo. Sobrang iksi."
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Bigo ang pagbasa ng header ng arkibo"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Sirang arkibo"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Bigo ang checksum ng tar, sira ang arkibo"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Hindi kilalang uri ng TAR header %u, miyembrong %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Hindi ito tanggap na arkibong DEB, may kulang na miyembrong '%s'"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Internal error, hindi mahanap ang miyembrong %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Di maintindihang talaksang control"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Bigo sa pagsulat ng talaksang %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Bigo sa pagsara ng talaksang %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Sobrang haba ang path na %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Binubuklat ang %s ng labis sa isang beses"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Ang directory %s ay divertado"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Ang pakete ay sumusubok na magsulat sa target na diversion %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Sobrang haba ng path na diversion"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Bigo ang pag-stat ng %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Bigo ang pagpangalan muli ng %s tungong %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Ang directory %s ay papalitan ng hindi-directory"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Bigo ang paghanap ng node sa kanyang hash bucket"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Sobrang haba ng path"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Patungan ng paketeng nag-match na walang bersion para sa %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Ang talaksang %s/%s ay pumapatong sa isang talaksan sa paketeng %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Hindi mabasa ang %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Hindi ma-stat ang %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "Tinawagan ang DropNode sa naka-link pa na node"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Bigo sa paghanap ng elemento ng hash!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Bigo ang pagreserba ng diversion"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Internal error sa AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Sinusubukang patungan ang diversion, %s -> %s at %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Dobleng pagdagdag ng diversion %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Nadobleng talaksang conf %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Ang directory %s ay divertado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Ang directory %s ay divertado"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Ang directory %s ay divertado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Ang directory %s ay divertado"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Ang directory %s ay divertado"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Bigo ang pagbasa ng link %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Hash Sum mismatch"
+msgstr "Di tugmang MD5Sum"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "pagpalit ng pangalan ay bigo, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Di tugmang laki"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Di tanggap na operasyon %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Error sa pagsulat"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Bigo sa pagkuha ng %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Hindi ko mahanap ang talaksan para sa paketeng %s. Maaaring kailanganin "
+"niyong ayusin ng de kamay ang paketeng ito. (dahil sa walang arch)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Kumokonekta sa %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Ang driver ng paraang %s ay hindi mahanap."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Paki-siguro na nakaluklok ang paketeng 'dpkg-dev'.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Hindi umandar ng tama ang paraang %s"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Ikasa ang disk na may pangalang: '%s' sa drive '%s' at pindutin ang enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "Nawawala ang directory ng talaan %s."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "Nawawala ang directory ng arkibo %s."
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "Hindi maaldaba ang directory ng talaan"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Hindi suportado ang uri ng talaksang index na '%s'"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Kinukuha ang talaksang %li ng %li (%s ang natitira)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Kinukuha ang talaksang %li ng %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Kailangan ma-instol muli ang paketeng %s, ngunit hindi ko mahanap ang arkibo "
+"para dito."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Error, pkgProblemResolver::Resolve ay naghudyat ng mga break, maaaring dulot "
+"ito ng mga paketeng naka-hold."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"Hindi maayos ang mga problema, mayroon kayong sirang mga pakete na naka-hold."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr ""
+"Hindi ma-parse o mabuksan ang talaan ng mga pakete o ng talaksang estado."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Maaaring patakbuhin niyo ang apt-get update upang ayusin ang mga problemang "
+"ito"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Hindi mabasa ang talaan ng pagkukunan (sources)."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Error sa pag-compile ng regex - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Release '%s' para sa '%s' ay hindi nahanap"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Bersyon '%s' para sa '%s' ay hindi nahanap"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Labis ang haba ng linyang %u sa talaksang pagkukunan %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Ina-unmount ang CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Ginagamit ang %s bilang mount point ng CD-ROM\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Hinihintay ang disc...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Sinasalang ang CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Kinikilala..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Naka-imbak na Label: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Sinisiyasat ang Disc para sa talaksang index...\n"
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Nakahanap ng %i na index ng mga pakete, %i na index ng source at %i na "
+"signature\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "Found label '%s'\n"
+msgstr "Naka-imbak na Label: %s \n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Hindi yan tanggap na pangalan, subukan muli.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Ang Disc na ito ay nagngangalang: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Kinokopya ang Listahan ng mga Pakete"
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Sinusulat ang bagong listahan ng pagkukunan\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Mga nakatala sa Listahan ng Source para sa Disc na ito ay:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Di makalipat sa %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Hindi ma-stat ang %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Di mai-stat ang mount point %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Bigo sa pag-stat ng cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Opsyon sa command line '%c' [mula %s] ay di kilala."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Opsyon sa command line %s ay di naintindihan."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Opsyon sa command line %s ay hindi boolean"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Opsyon %s ay nangangailangan ng argumento"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Opsyon %s: Ang pagtakda ng aytem sa pagkaayos ay nangangailangan ng "
+"=<halaga>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Opsyon %s ay nangangailangan ng argumentong integer, hindi '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Opsyon '%s' ay labis ang haba"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Hindi naintindihan ang %s, subukan ang true o false."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Di tanggap na operasyon %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Hindi kilalang katagang uri: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Syntax error %s:%u: Nag-umpisa ang block na walang pangalan."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Syntax error %s:%u: Maling anyo ng Tag"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Syntax error %s:%u: May basura matapos ng halaga"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Syntax error %s:%u: Maaari lamang gawin ang mga direktiba sa tuktok na antas"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Syntax error %s:%u: Labis ang pagkaka-nest ng mga include"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Syntax error %s:%u: Sinama mula dito"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Syntax error %s:%u: Di suportadong direktiba '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Syntax error %s:%u: Maaari lamang gawin ang mga direktiba sa tuktok na antas"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Syntax error %s:%u: May basura sa dulo ng talaksan"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Problema sa pag-unlink ng talaksan"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Hindi ginagamit ang pagaldaba para sa basa-lamang na talaksang aldaba %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Hindi mabuksan ang talaksang aldaba %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Hindi gumagamit ng pag-aldaba para sa talaksang aldaba %s na naka-mount sa "
+"nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "hindi makuha ang aldaba %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Naghintay, para sa %s ngunit wala nito doon"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Nakatanggap ang sub-process %s ng segmentation fault."
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Nakatanggap ang sub-process %s ng segmentation fault."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Naghudyat ang sub-process %s ng error code (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Ang sub-process %s ay lumabas ng di inaasahan"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Error sa pagbasa"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Error sa pagsulat"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Problema sa pagsara ng talaksan"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Bigo ang paglikha ng subprocess IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Bigo ang pag-exec ng taga-compress"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Hindi mabuksan ang talaksang %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Hindi makapag-bukas ng pipe para sa %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "pagbasa, mayroong %lu na babasahin ngunit walang natira"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "pagsulat, mayroon pang %lu na isusulat ngunit hindi makasulat"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "Problema sa pagsara ng talaksan"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Problema sa pag-sync ng talaksan"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Problema sa pag-sync ng talaksan"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Hindi ma-stat ang %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Hindi makapagsulat sa %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Hindi mai-mmap ang talaksang walang laman"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Hindi makagawa ng mmap ng %lu na byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Hindi makapag-bukas ng pipe para sa %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "Hindi mabuksan %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "Hindi ma-invoke "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Hindi makagawa ng mmap ng %lu na byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Failed to truncate file"
+msgstr "Bigo sa pagsulat ng talaksang %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Error!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Tapos"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Tapos"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Piniling %s ay hindi nahanap"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Hindi ma-parse ang talaksang pakete %s (1)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "No sections in Release file %s"
+msgstr "Paunawa, pinili ang %s imbes na %s\n"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Di tanggap na linya sa talaksang diversion: %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Hindi ma-parse ang talaksang pakete %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Hindi maaldaba ang directory ng talaan"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Hindi maaldaba ang directory ng talaan"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Hinahanda ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Hinahanda ang %s upang isaayos"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Naghahanda para sa pagtanggal ng %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Naghahanda upang tanggalin ng lubusan ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Iniluklok ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Isasaayos ang %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Directory '%s' missing"
+msgstr "Nawawala ang directory ng talaan %s."
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "Hindi mabuksan ang talaksang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Binubuklat ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Installing %s"
+msgstr "Iniluklok ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Tinatanggal ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "Natanggal ng lubusan ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Natanggal ng lubusan ang %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Hindi makapagsulat sa %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Ginagawa ang puno ng mga dependensiya"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Bersyong Kandidato"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Pagbuo ng Dependensiya"
+
+#: apt-pkg/depcache.cc
+#, fuzzy
+msgid "Reading state information"
+msgstr "Pinagsasama ang magagamit na impormasyon"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Bigo ang pagbukas ng %s"
+
+#: apt-pkg/depcache.cc
+#, fuzzy, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Bigo sa pagsulat ng talaksang %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Nagsulat ng %i na record.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Nagsulat ng %i na record na may %i na talaksang kulang.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Nagsulat ng %i na record na may %i na talaksang mismatch\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Nagsulat ng %i na record na may %i na talaksang kulang at %i na talaksang "
+"mismatch\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Di tugmang MD5Sum"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Hindi suportado ang sistema ng paketeng '%s'"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Hindi matuklasan ang akmang uri ng sistema ng pakete "
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "Hindi mabuksan ang talaksang %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Ang takbo ng pag-instol na ito ay nangangailangan ng pansamantalang "
+"pagtanggal ng paketeng esensyal na %s dahil sa isang Conflicts/Pre-Depends "
+"loop. Madalas ay masama ito, ngunit kung nais niyo talagang gawin ito, i-"
+"activate ang APT::Force-LoopBreak na option."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Walang laman ang cache ng pakete"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Sira ang talaksan ng cache ng pakete"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Ang talaksan ng cache ng pakete ay hindi magamit na bersyon"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Ang APT na ito ay hindi nagsusuporta ng versioning system '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Ang cache ng pakete ay binuo para sa ibang arkitektura"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Sira ang talaksan ng cache ng pakete"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Dependensiya"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "PreDepends"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Mungkahi"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Tunggali"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Rekomendado"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Pumapalit"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Linalaos"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "importante"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "kailangan"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standard"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "extra"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "optional"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Hindi akma ang versioning system ng cache"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "May naganap na error habang prinoseso ang %s (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr ""
+"Wow, nalagpasan niyo ang bilang ng pangalan ng pakete na kaya ng APT na ito."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Wow, nalagpasan niyo ang bilang ng bersyon na kaya ng APT na ito."
+
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Wow, nalagpasan niyo ang bilang ng bersyon na kaya ng APT na ito."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Wow, nalagpasan niyo ang bilang ng dependensiya na kaya ng APT na ito."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Binabasa ang Listahan ng mga Pakete"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "IO Error sa pag-imbak ng source cache"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Hindi suportado ang uri ng talaksang index na '%s'"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Di tanggap na record sa talaksang pagtatangi, walang Package header"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Hindi naintindihan ang uri ng pin %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Walang prioridad (o sero) na nakatakda para sa pin"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Maling anyo ng override %s linya %lu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Maling anyo ng linyang %u sa talaksang pagkukunan %s (uri)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Hindi kilalang uri '%s' sa linyang %u sa talaksan ng pagkukunan %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Maling anyo ng linyang %u sa talaksang pagkukunan %s (uri)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Hindi kilalang uri '%s' sa linyang %u sa talaksan ng pagkukunan %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Kailangan niyong maglagay ng 'source' URIs sa inyong sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"May mga talaksang index na hindi nakuha, sila'y di pinansin, o ginamit ang "
+"mga luma na lamang."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Sinusuri ang pag-upgrade"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Tumama:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Kunin:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "DiPansin:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Err:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Nakakuha ng %sB ng %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [May ginagawa]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Pagpalit ng Media: Ikasa ang disk na may pangalang\n"
+" '%s'\n"
+"sa drive '%s' at pindutin ang enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Inaayos ang mga dependensiya..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " ay bigo."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Hindi maayos ang mga dependensiya"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Hindi mai-minimize ang upgrade set"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Tapos"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Maaari ninyong patakbuhin ang 'apt --fix-broken install' upang ayusin ito."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"May mga dependensiyang kulang. Subukan ang 'apt --fix-broken install' na "
+"walang mga pakete (o magtakda ng solusyon)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Paunawa, pinili ang %s para sa regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Paunawa, pinili ang %s para sa regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Paunawa, pinili ang %s para sa regex '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Ang paketeng %s ay paketeng birtwal na bigay ng:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Nakaluklok]"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Not candidate version]"
+msgstr "Bersyong Kandidato"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Dapat kayong mamili ng isa na iluluklok."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Hindi magamit ang %s, ngunit ito'y tinutukoy ng ibang pakete.\n"
+"Maaaring nawawala ang pakete, ito'y laos na, o ito'y makukuha lamang\n"
+"sa ibang pinagmulan.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Gayunpaman, ang sumusunod na mga pakete ay humahalili sa kanya:"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Ang paketeng %s ay walang kandidatong maaaring instolahin"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "Hindi nakaluklok ang paketeng %s, kaya't hindi ito tinanggal\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Hindi nakaluklok ang paketeng %s, kaya't hindi ito tinanggal\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Paunawa, pinili ang %s imbes na %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Ang APT na ito ay may Kapangyarihan Super Kalabaw."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Walang nahanap na mga pakete"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr ""
+"BABALA: Ang susunod na mga pakete ay hindi matiyak ang pagka-awtentiko!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr ""
+"Ipina-walang-bisa ang babala tungkol sa pagka-awtentiko ng mga pakete.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "May mga paketeng hindi matiyak ang pagka-awtentiko"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Iluklok ang mga paketeng ito na walang beripikasyon?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "May mga problema at -y ay ginamit na walang --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Hindi matantsa ang libreng puwang sa %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Kulang kayo ng libreng puwang sa %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Hindi maaldaba ang directory ng download"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"May mga paketeng hindi ma-instol. Maaring may hiniling kayong imposible\n"
+"o kung kayo'y gumagamit ng pamudmod na unstable ay may ilang mga paketeng\n"
+"kailangan na hindi pa nalikha o linipat mula sa Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+"Ang sumusunod na impormasyon ay maaaring makatulong sa pag-ayos ng problema:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Sirang mga pakete"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Hindi nakuha ang ilang mga arkibo, maaaring patakbuhin ang apt-get update o "
+"subukang may --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+"Error na internal, tinawagan ang InstallPackages na may sirang mga pakete!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"May mga paketeng kailangang tanggalin ngunit naka-disable ang Tanggal/Remove."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "May mga problema at -y ay ginamit na walang --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "May mga problema at -y ay ginamit na walang --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Error na internal, hindi natapos ang pagsaayos na pagkasunud-sunod"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Nakapagtataka... Hindi magkatugma ang laki, mag-email sa apt@packages.debian."
+"org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Kailangang kumuha ng %sB/%sB ng arkibo.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Kailangang kumuha ng %sB ng arkibo.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Matapos magbuklat ay %sB na karagdagang puwang sa disk ang magagamit.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Matapos magbuklat ay %sB na puwang sa disk ang mapapalaya.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Tinakdang Trivial Only ngunit hindi ito operasyong trivial."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Oo, gawin ang sinasabi ko!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Kayo ay gagawa ng bagay na maaaring makasama sa inyong sistema.\n"
+"Upang magpatuloy, ibigay ang pariralang '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Abort."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Nais niyo bang magpatuloy?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "May mga talaksang hindi nakuha"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Kumpleto ang pagkakuha ng mga talaksan sa modong pagkuha lamang"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing at pagpalit ng media ay kasalukuyang hindi suportado"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Hindi maayos ang mga kulang na pakete."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Ina-abort ang pag-instol."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Error na internal, may nasira ang problem resolver"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "Ang sumusunod na mga paketeng BAGO ay iluluklok:"
+msgstr[1] "Ang sumusunod na mga paketeng BAGO ay iluluklok:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "Ang sumusunod na mga paketeng BAGO ay iluluklok:"
+msgstr[1] "Ang sumusunod na mga paketeng BAGO ay iluluklok:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Ang mga sumusunod na extra na pakete ay luluklokin:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Mga paketeng mungkahi:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Mga paketeng rekomendado:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Linaktawan ang %s, ito'y nakaluklok na at hindi nakatakda ang upgrade.\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Linaktawan ang %s, ito'y nakaluklok na at hindi nakatakda ang upgrade.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Ang pagluklok muli ng %s ay hindi maaari, hindi ito makuha.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s ay pinakabagong bersyon na.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to manually installed.\n"
+msgstr "ngunit ang %s ay iluluklok"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Ang napiling bersyon %s (%s) para sa %s\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Ang napiling bersyon %s (%s) para sa %s\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Nakaluklok]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Nakaluklok]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Nakaluklok]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Nakaluklok]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ngunit ang %s ay nakaluklok"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ngunit ang %s ay iluluklok"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ngunit hindi ito maaaring iluklok"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ngunit ito ay birtwal na pakete"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ngunit ito ay hindi iluluklok"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ngunit ito ay hindi nakaluklok"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " o"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Ang sumusunod na mga pakete ay may kulang na dependensiya:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Ang sumusunod na mga paketeng BAGO ay iluluklok:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Ang sumusunod na mga pakete ay TATANGGALIN:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Ang sumusunod na mga pakete ay hinayaang maiwanan:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Ang susunod na mga pakete ay iu-upgrade:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Ang susunod na mga pakete ay ida-DOWNGRADE:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Ang susunod na mga hinawakang mga pakete ay babaguhin:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (dahil sa %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"BABALA: Ang susunod na mga paketeng esensyal ay tatanggalin.\n"
+"HINDI ito dapat gawin kung hindi niyo alam ng husto ang inyong ginagawa!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu na nai-upgrade, %lu na bagong luklok, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu iniluklok muli, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu nai-downgrade, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu na tatanggalin at %lu na hindi inupgrade\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu na hindi lubos na nailuklok o tinanggal.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[O/h]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[o/H]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "O"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "H"
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "Kailangan niyong magbigay ng isa lamang na pattern"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Talaksang Pakete:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Wala sa sync ang cache, hindi ma-x-ref ang talaksang pakete"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Mga naka-Pin na Pakete:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Nakaluklok: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Kandidato: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(wala)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Talaang Bersyon:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Hindi ma-stat ang talaan ng pagkukunan ng pakete %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Kailangang magtakda ng kahit isang pakete na kunan ng source"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Hindi mahanap ang paketeng source para sa %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Linaktawan ang nakuha na na talaksan '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Kailangang kumuha ng %sB/%sB ng arkibong source.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Kailangang kumuha ng %sB ng arkibong source.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Kunin ang Source %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Bigo sa pagkuha ng ilang mga arkibo."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Linaktawan ang pagbuklat ng nabuklat na na source sa %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Bigo ang utos ng pagbuklat '%s'.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Paki-siguro na nakaluklok ang paketeng 'dpkg-dev'.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Utos na build '%s' ay bigo.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Hindi makuha ang impormasyong build-dependency para sa %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "Walang build depends ang %s.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "Kailangang magtakda ng kahit isang pakete na susuriin ang builddeps"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Bigo sa pagproseso ng build dependencies"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Bigo sa pagproseso ng build dependencies"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Bigo ang pagpangalan muli ng %s tungong %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Paketeng %s bersyon %s ay may kulang na dep:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Ang utos na update ay hindi tumatanggap ng mga argumento"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Ang utos na update ay hindi tumatanggap ng mga argumento"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Kabuuan ng mga Pakete : "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "Kabuuan ng mga Pakete : "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normal na Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Purong Birtwual na Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Nag-iisang Birtwal na Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Halong Birtwal na Pakete: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Kulang/Nawawala: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Kabuuan ng Natatanging mga Bersyon: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total distinct descriptions: "
+msgstr "Kabuuan ng Natatanging mga Bersyon: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Kabuuan ng mga Dependensiya: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Kabuuan ng ugnayang Ber/Talaksan: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Desc/File relations: "
+msgstr "Kabuuan ng ugnayang Ber/Talaksan: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Kabuuan ng Mapping ng Provides: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Kabuuan ng Globbed String: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Kabuuan ng Hindi Nagamit na puwang: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Kabuuan ng puwang na napag-tuosan: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Ipakita ang mga record ng source"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Maghanap sa listahan ng mga pakete ng regex pattern"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Ipakita ang impormasyon tungkol sa ganap na dependensiya ng pakete"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Ipakita ang impormasyong kabaliktarang dependensiya ng pakete"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Ipakita ang nababasang record ng pakete"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Ipakita ang listahan ng pangalan ng lahat ng mga pakete"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Ipakita ang pagkaayos ng mga policy"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Bigyan ng pangalan ang Disk na ito, tulad ng 'Debian 2.1r1 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Paki-pasok ang isang Disk sa drive at pindutin ang enter"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Bigo ang pagpangalan muli ng %s tungong %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Ulitin ang prosesong ito para sa lahat ng mga CD sa inyong set."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Mga argumento ay hindi naka-pares"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Pag-gamit: apt-config [mga option] utos\n"
+"\n"
+"Ang apt-config ay simpleng kagamitan sa pagbasa ng talaksang pagkaayos ng "
+"APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Pag-gamit: apt-extracttemplates talaksan1 [talaksan2 ...]\n"
+"\n"
+"Ang apt-extracttemplates ay kagamitan sa pagkuha ng info tungkol\n"
+"sa pagkaayos at template mula sa mga paketeng debian\n"
+"\n"
+"Mga opsyon:\n"
+" -h Itong tulong na ito\n"
+" -t Itakda ang dir na pansamantala\n"
+" -c=? Basahin ang talaksang pagkaayos na ito\n"
+" -o=? Itakda ang isang optiong pagkaayos, hal. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Hindi makuha ang bersyon ng debconf. Nakaluklok ba ang debconf?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Hindi mahanap ang paketeng %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "ngunit ang %s ay iluluklok"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Error na internal, may nasira ang problem resolver"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Suportadong mga Module:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Pag-gamit: apt-get [mga option] utos\n"
+" apt-get [mga option] install|remove pkt1 [pkt2 ...]\n"
+" apt-get [mga option] source pkt1 [pkt2 ...]\n"
+"\n"
+"Ang apt-get ay payak na command line interface para sa pagkuha at\n"
+"pag-instol ng mga pakete. Ang pinakamadalas na gamiting utos ay update\n"
+"at install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Kunin ang bagong listahan ng mga pakete"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Gumawa ng upgrade"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Mag-instol ng bagong mga pakete (pkt ay libc6 hindi libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Mag-instol ng bagong mga pakete (pkt ay libc6 hindi libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Mag-tanggal ng mga pakete"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr ""
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Mag-upgrade ng pamudmod, basahin ang apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Sundan ang mga pinili sa dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Magsaayos ng build-dependencies para sa mga paketeng source"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Burahin ang mga nakuhang mga talaksang naka-arkibo"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Burahin ang mga lumang naka-arkibo na nakuhang mga talaksan"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Tiyakin na walang mga sirang dependensiya"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Kumuha ng arkibong source"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "Kailangang magtakda ng kahit isang pakete na kunan ng source"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Pag-gamit: apt-extracttemplates talaksan1 [talaksan2 ...]\n"
+"\n"
+"Ang apt-extracttemplates ay kagamitan sa pagkuha ng info tungkol\n"
+"sa pagkaayos at template mula sa mga paketeng debian\n"
+"\n"
+"Mga opsyon:\n"
+" -h Itong tulong na ito\n"
+" -t Itakda ang dir na pansamantala\n"
+" -c=? Basahin ang talaksang pagkaayos na ito\n"
+" -o=? Itakda ang isang optiong pagkaayos, hal. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Pag-gamit: apt-extracttemplates talaksan1 [talaksan2 ...]\n"
+"\n"
+"Ang apt-extracttemplates ay kagamitan sa pagkuha ng info tungkol\n"
+"sa pagkaayos at template mula sa mga paketeng debian\n"
+"\n"
+"Mga opsyon:\n"
+" -h Itong tulong na ito\n"
+" -t Itakda ang dir na pansamantala\n"
+" -c=? Basahin ang talaksang pagkaayos na ito\n"
+" -o=? Itakda ang isang optiong pagkaayos, hal. -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "ngunit ito ay hindi nakaluklok"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "ngunit ang %s ay iluluklok"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "ngunit ang %s ay iluluklok"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Ang sumusunod na mga paketeng BAGO ay iluluklok:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s ay pinakabagong bersyon na.\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s ay pinakabagong bersyon na.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "ngunit ang %s ay iluluklok"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Bigo ang pagbukas ng %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "ngunit ang %s ay iluluklok"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Di kilalang record ng pakete!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Binabasa ang Listahan ng mga Pakete"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Mga naka-Pin na Pakete:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Mga naka-Pin na Pakete:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Sirang mga pakete"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "ngunit ito ay birtwal na pakete"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Pinagsasama ang magagamit na impormasyon"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Maling nakatakda na default!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Pindutin ang enter upang magpatuloy."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr ""
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "May mga error na naganap habang nagbubuklat. Isasaayos ko ang"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "mga paketeng naluklok. Maaaring dumulot ito ng mga error na doble"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"o mga error na dulot ng kulang na dependensiya. Ito ay ayos lamang, yun lang"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"sa taas nitong kalatas ang importante. Paki-ayusin ang mga ito at patakbuhin "
+"muli ang [I]luklok/Instol."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Pinagsasama ang magagamit na impormasyon"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Mahaba masyado ang talaan ng extensyon ng mga pakete"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Error sa pagproseso ng directory %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Mahaba masyado ang talaan ng extensyon ng pagkukunan (source)"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Error sa pagsulat ng panimula sa talaksang nilalaman (contents)"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Error sa pagproseso ng Contents %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Pag-gamit: apt-ftparchive [mga option] utos\n"
+"Mga utos: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [mga grupo]\n"
+" clean config\n"
+"\n"
+"Ang apt-ftparchive ay gumagawa ng talaksang index para sa arkibong Debian.\n"
+"Suportado nito ang maraming estilo ng pagbuo mula sa awtomatikong buo\n"
+"at kapalit ng dpkg-scanpackages at dpkg-scansources\n"
+"\n"
+"Bumubuo ang apt-ftparchive ng mga talaksang Package mula sa puno ng mga\n"
+".deb. Ang talaksang Package ay naglalaman ng laman ng lahat ng control "
+"field\n"
+"mula sa bawat pakete pati na rin ang MD5 hash at laki ng talaksan. "
+"Suportado\n"
+"ang pag-gamit ng talaksang override upang pilitin ang halaga ng Priority at "
+"Section.\n"
+"\n"
+"Bumubuo din ang apt-ftparchive ng talaksang Sources mula sa puno ng mga\n"
+".dsc. Ang option na --source-override ay maaaring gamitin upang itakda\n"
+"ang talaksang override ng src\n"
+"\n"
+"Ang mga utos na 'packages' at 'sources' ay dapat patakbuhin sa ugat ng\n"
+"puno. Kailangan nakaturo ang BinaryPath sa ugat ng paghahanap na recursive\n"
+"at ang talaksang override ay dapat naglalaman ng mga flag na override. Ang\n"
+"pathprefix ay dinudugtong sa harap ng mga pangalan ng talaksan kung "
+"mayroon.\n"
+"Halimbawa ng pag-gamit mula sa arkibong Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Mga option:\n"
+" -h Itong tulong na ito\n"
+" --md5 Pagbuo ng MD5\n"
+" -s=? Talaksang override ng source\n"
+" -q Tahimik\n"
+" -d=? Piliin ang optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Pagbuo ng talaksang contents\n"
+" -c=? Basahin itong talaksang pagkaayos\n"
+" -o=? Itakda ang isang option na pagkaayos"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Walang mga pinili na tugma"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "May mga talaksang kulang sa grupo ng talaksang pakete `%s'"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Nasira ang DB, pinalitan ng pangalan ang talaksan sa %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Luma ang DB, sinusubukang maupgrade ang %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Hindi tanggap ang anyo ng DB. Kung kayo ay nagsariwa mula sa nakaraang "
+"bersiyon ng apt, tanggalin at likhain muli ang database."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Hindi mabuksan ang talaksang DB %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Bigo ang pagbasa ng link %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Walang kontrol rekord ang arkibo"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Hindi makakuha ng cursor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Bigo ang pagreserba ng memory"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Hindi kilalang algorithmong compression '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Kailangan ng compression set ang compressed output %s"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Bigo sa paglikha ng IPC pipe sa subprocess"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Bigo ang pag-fork"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Anak para sa pag-Compress"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Error na internal, bigo ang paglikha ng %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Bigo ang IO sa subprocess/talaksan"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Bigo ang pagbasa habang tinutuos ang MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Hindi mabuksan %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Maling anyo ng override %s linya %lu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Bigo ang pagbasa ng talaksang override %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Maling anyo ng override %s linya %lu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Maling anyo ng override %s linya %lu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Maling anyo ng override %s linya %lu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "W: Hindi mabasa ang directory %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "W: Hindi ma-stat %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "E: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "W: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "E: Mga error ay tumutukoy sa talaksang "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Bigo sa pag-resolba ng %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Bigo ang paglakad sa puno"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Bigo ang pagbukas ng %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Bigo ang pag-link ng %s sa %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " DeLink limit na %sB tinamaan.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Walang field ng pakete ang arkibo"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s ay walang override entry\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " Tagapangalaga ng %s ay %s hindi %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s ay walang override entry para sa pinagmulan\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s ay wala ring override entry na binary\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Naghihintay ng panimula"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Nagpadala ang HTTP server ng di tanggap na reply header"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Maling linyang panimula"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "Nagpadala ang HTTP server ng di tanggap na Content-Length header"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "Nagpadala ang HTTP server ng di tanggap na Content-Range header"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Sira ang range support ng HTTP server na ito"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Di kilalang anyo ng petsa"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Maling datos sa panimula"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Bigo ang koneksyon"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Internal na error"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Hindi mabasa ang database ng cdrom %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Paki-gamit ang apt-cdrom upang makilala ng APT itong CD na ito. Hindi "
+"maaaring gamitin ang apt-get update upang magdagdag ng bagong mga CD"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Maling CD"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Hindi mai-unmount ang CD-ROM sa %s, maaaring ginagamit pa ito."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Hindi nahanap ang Disk."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Hindi Nahanap ang Talaksan"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Kumokonekta sa %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Kumokonekta sa %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Hindi makalikha ng socket para sa %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Hindi maumpisahan ang koneksyon sa %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Bigo"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Hindi maka-konekta sa %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Hindi maka-konekta sa %s:%s (%s), nag-timeout ang koneksyon"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Kumokonekta sa %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Hindi maresolba ang '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Pansamantalang kabiguan sa pagresolba ng '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "May naganap na kababalaghan sa pagresolba ng '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "May naganap na kababalaghan sa pagresolba ng '%s:%s' (%i)"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Hindi maka-konekta sa %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Bigo ang pag-stat"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Di tanggap na URI, mga lokal na URI ay di dapat mag-umpisa ng //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Pumapasok"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Hindi malaman ang pangalan ng peer"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Hindi malaman ang pangalang lokal"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Inayawan ng server ang ating koneksyon at ang sabi ay: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Bigo ang USER/GUMAGAMIT, sabi ng server ay: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Bigo ang PASS, sabi ng server ay: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"May tinakdang katuwang na server ngunit walang login script, walang laman "
+"ang Acquire::ftp::ProxyLogin."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Bigo ang utos sa login script '%s', sabi ng server ay: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Bigo ang TYPE, sabi ng server ay: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Lumipas ang koneksyon"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Sinarhan ng server ang koneksyon"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "May sagot na bumubo sa buffer."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Sira ang protocol"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Hindi maka-likha ng socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Hindi maka-konekta sa socket ng datos, nag-time-out ang koneksyon"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Hindi maka-konekta sa socket na passive."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "di makakuha ang getaddrinfo ng socket na nakikinig"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Hindi maka-bind ng socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Hindi makarinig sa socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Hindi malaman ang pangalan ng socket"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Hindi makapagpadala ng utos na PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Di kilalang pamilya ng address %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Bigo ang EPRT, sabi ng server ay: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Nag-timeout ang socket ng datos"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Hindi makatanggap ng koneksyon"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Problema sa pag-hash ng talaksan"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Hindi makakuha ng talaksan, sabi ng server ay '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Nag-timeout ang socket ng datos"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Bigo ang paglipat ng datos, sabi ng server ay '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Tanong"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Hindi ma-invoke "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Hindi kukulang sa isang hindi tanggap na lagda ang na-enkwentro."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Error na internal: Tanggap na lagda, ngunit hindi malaman ang key "
+"fingerprint?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Hindi maitakbo ang '%s' upang maberipika ang lagda (nakaluklok ba ang gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Hindi kilalang error sa pag-execute ng apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Ang sumusunod na mga lagda ay imbalido:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Ang sumusunod na mga lagda ay hindi maberipika dahil ang public key ay hindi "
+"available:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Error sa pagsusulat sa talaksan"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Error sa pagbasa mula sa server, sinarhan ng remote ang koneksyon"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Error sa pagbasa mula sa server"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Error sa pagsulat sa talaksan"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Bigo ang pagpili"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Nag-timeout ang koneksyon"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Error sa pagsulat ng talaksang output"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Bigo ang pagtakda ng oras ng pagbago"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Nagsara ng maaga ang koneksyon"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Hindi tanggap na header ng miyembro ng arkibo"
+
+#~ msgid "Removed %s"
+#~ msgstr "Tinanggal ang %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Wala sa sync ang talaksan ng paketeng %s."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Sira ang talaksang index ng mga pakete. Walang Filename: field para sa "
+#~ "paketeng %s."
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Hindi mabuksan ang talaksang %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Hindi mabuksan ang talaksang %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Binubuksan ang talaksang pagsasaayos %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Binubuksan %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr ""
+#~ "May mga kulang na dependensiya. Subukan niyong gamitin ang --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Maaaring patakbuhin niyo ang 'apt --fix-broken install' upang ayusin ang "
+#~ "mga ito:"
+
+#~ msgid "(not found)"
+#~ msgstr "(hindi nahanap)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Naka-Pin na Pakete: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Walang public key na magamit para sa sumusunod na key ID:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Ang directory %s ay divertado"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Dependensiyang %s para sa %s ay hindi mabuo dahil ang paketeng %s ay "
+#~ "hindi mahanap"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Dependensiyang %s para sa %s ay hindi mabuo dahil ang paketeng %s ay "
+#~ "hindi mahanap"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Bigo sa pagbuo ng dependensiyang %s para sa %s: Ang naka-instol na "
+#~ "paketeng %s ay bagong-bago pa lamang."
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Dependensiyang %s para sa %s ay hindi mabuo dahil walang magamit na "
+#~ "bersyon ng paketeng %s na tumutugon sa kinakailangang bersyon"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "Dependensiyang %s para sa %s ay hindi mabuo dahil ang paketeng %s ay "
+#~ "hindi mahanap"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Bigo sa pagbuo ng dependensiyang %s para sa %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Hindi mabuo ang build-dependencies para sa %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Problema sa pag-unlink ng %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Bigo ang pag-unlink ng %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Pag-gamit: apt-cache [mga option] utos\n"
+#~ " apt-cache [mga option] show pkt1 [pkt2 ...]\n"
+#~ "\n"
+#~ "apt-cache ay isang kagamitang low-level para sa pag-manipula\n"
+#~ "ng mga talaksan sa binary cache ng APT, at upang makakuha ng\n"
+#~ "impormasyon mula sa kanila\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Mga option:\n"
+#~ " -h Itong tulong na ito.\n"
+#~ " -p=? Ang cache ng mga pakete.\n"
+#~ " -s=? Ang cache ng mga source.\n"
+#~ " -q Huwag ipakita ang hudyat ng progreso.\n"
+#~ " -i Ipakita lamang ang importanteng mga dep para sa utos na unmet\n"
+#~ " -c=? Basahin ang talaksang pagkaayos na ito\n"
+#~ " -o=? Magtakda ng isang option ng pagkaayos, hal. -o dir::cache=/tmp\n"
+#~ "Basahin ang pahina ng manwal ng apt-cache(8) at apt.conf(5) para sa \n"
+#~ "karagdagang impormasyon\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Mga option:\n"
+#~ " -h Itong tulong na ito.\n"
+#~ " -c=? Basahin itong talaksang pagkaayos\n"
+#~ " -o=? Itakda ang isang option sa pagkaayos, hal. -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Pag-gamit: apt-sortpkgs [mga option] talaksan1 [talaksan2 ...]\n"
+#~ "\n"
+#~ "Ang apt-sortpkgs ay payak na kagamitan upang makapag-sort ng talaksang "
+#~ "pakete.\n"
+#~ "Ang option -s ay ginagamit upang ipaalam kung anong klaseng talaksan "
+#~ "ito.\n"
+#~ "\n"
+#~ "Mga option:\n"
+#~ " -h Itong tulong na ito\n"
+#~ " -s Gamitin ang pag-sort ng talaksang source\n"
+#~ " -c=? Basahin ang talaksang pagkaayos na ito\n"
+#~ " -o=? Itakda ang isang option ng pagkaayos, hal. -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Bigo ang prosesong anak"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Kailangang magtakda ng kahit isang pakete na kunan ng source"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Bigo sa paglikha ng mga pipe"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Bigo sa pagtakbo ng gzip "
+
+#, fuzzy
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s para sa %s %s kinompile noong %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Bigo ang paglikha ng FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (URI parse)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (dist parse)<"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (dist)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (dist parse)<"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (dist parse)<"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (dist parse)<"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (URI parse)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (absolute dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Maling anyo ng linyang %lu sa talaan ng pagkukunan %s (dist parse)<"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr ""
+#~ "Hindi nahanap ang paketeng %s %s habang prinoseso ang mga dependensiya."
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Hindi ma-stat ang talaan ng pagkukunan ng pakete %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Kinukuha ang Talaksang Provides"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Hindi ma-parse ang talaksang pakete %s (1)"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Block ng nagbebenta %s ay walang fingerprint"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Kabuuan ng gamit na puwang ng Dependensiyang Bersyon: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Kulang kayo ng libreng puwang sa %s"
+
+#~ msgid "Done"
+#~ msgstr "Tapos"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Ina-abort ang pag-instol."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Internal error, nakasira ng bagay-bagay ang AllUpgrade"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s ay hindi balido na paketeng DEB."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Ginagamit ang %s bilang mount point ng CD-ROM\n"
+#~ "Sinasalang ang CD-ROM\n"
+
+#, fuzzy
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Hindi ito tanggap na arkibong DEB, may kulang na miyembrong '%s' o '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Di tugmang MD5Sum"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Hindi ko mahanap ang talaksan para sa paketeng %s. Maaaring kailanganin "
+#~ "niyong ayusin ng de kamay ang paketeng ito."
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Binubuksan ang talaksang pagsasaayos %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Bigo sa pagtanggal ng %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Hindi malikha ang %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Bigo sa pag-stat ng %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Ang info at temp directory ay kailangang nasa parehong filesystem"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Bigo sa paglipat sa admin dir %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Internal error sa pagkuha ng pangalan ng pakete"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Binabasa ang Talaksang Listahan"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Bigo sa pagbukas ng talaksang listahan '%sinfo/%s'. Kung hindi niyo "
+#~ "maibalik ang talaksang ito, gawin itong walang laman at muling instolahin "
+#~ "kaagad ang parehong bersyon ng pakete!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Bigo sa pagbasa ng talaksang listahan %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Internal error sa pagkuha ng Node"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Bigo sa pagbukas ng talaksang diversions %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Ang talaksang diversion ay sira"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Di tanggap na linya sa talaksang diversion: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Internal error sa pagdagdag ng diversion"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Ang cache ng pkg ay dapat ma-initialize muna"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Bigo sa paghanap ng Pakete: Header, offset %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Maling ConfFile section sa talaksang status. Offset %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Error sa pag-parse ng MD5. Offset %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Hindi makalipat sa %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Bigo sa paghanap ng tanggap na talaksang control"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Hindi makapag-bukas ng pipe para sa %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Error sa pagbasa mula sa prosesong %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Nakatanggap ng isang linyang panimula mula %u na mga karakter"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Maling anyo ng override %s linya %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Maling anyo ng override %s linya %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Maling anyo ng override %s linya %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "taga-decompress"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "pagbasa, mayroong %lu na babasahin ngunit walang natira"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "pagsulat, mayroon pang %lu na isusulat ngunit hindi makasulat"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (UsePackage1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (UsePackage3)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "May naganap na Error habang prinoseso ang %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Internal error, hindi mahanap ang miyembro"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Sobrang haba ng talaan ng argumento mula sa Acquire::gpgv::Options. "
+#~ "Lalabas."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Maling anyo ng linyang %u sa talaksang pagkukunan %s (vendor id)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Hindi mabasa ang keyring: '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Hindi mai-patch ang talaksan"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Error sa pagproseso ng directory %s"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Dahil ang hiniling niyo ay mag-isang operasyon, malamang ay ang pakete "
+#~ "ay\n"
+#~ "hindi talaga mailuklok at kailangang magpadala ng bug report tungkol sa\n"
+#~ "pakete na ito."
+
+#, fuzzy
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Labis ang haba ng linyang %d (max %d)"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Labis ang haba ng linyang %d (max %d)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "May naganap na error habang prinoseso ang %s (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Naka-imbak na Label: %s \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "Nakahanap ng %i na index ng mga pakete, %i na index ng source at %i na "
+#~ "signature\n"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Bigo ang pagpili"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "Nagbago ang petsa ng talaksang %s"
+
+#~ msgid "Reading file list"
+#~ msgstr "Binabasa ang Talaksang Listahan"
+
+#~ msgid "Could not execute "
+#~ msgstr "Hindi ma-execute ang "
+
+#~ msgid "Preparing for remove with config %s"
+#~ msgstr "Naghahanda upang tanggalin ang %s kasama ang pagkasaayos nito"
+
+#~ msgid "Removed with config %s"
+#~ msgstr "Tinanggal ang %s kasama ang pagkasaayos nito"
+
+#~ msgid "Unknown vendor ID '%s' in line %u of source list %s"
+#~ msgstr ""
+#~ "Hindi kilalang vendor ID '%s' sa linya %u ng talaksang pagkukunan %s"
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..0083ba9
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,4368 @@
+# Turkish translation for apt
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# Copyright (c) 2013 Debian L10n Turkish 2013
+# Mert Dirik <mertdirik@gmail.com>, 2013-2018.
+# This file is distributed under the same license as the apt package.
+# Rosetta Contributors, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2018-01-03 16:32+0300\n"
+"Last-Translator: Mert Dirik <mertdirik@gmail.com>\n"
+"Language-Team: Debian l10n Turkish <debian-l10n-turkish@lists.debian.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+"X-Generator: Poedit 1.8.11\n"
+"X-Launchpad-Export-Date: 2013-02-04 12:16+0000\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Geçersiz arşiv imzası"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Arşiv üyesi başlığı okuma hatası"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Geçersiz arşiv üyesi başlığı"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Arşiv çok kısa"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Arşiv başlıkları okunamadı"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "'%s' için yapılandırılmış bir sıkıştırma programı bulunmuyor"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Bozuk arşiv"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar sağlama toplamı başarısız, arşiv bozulmuş"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Bilinmeyen TAR başlığı türü %u, üye %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Bu dosya geçerli bir DEB arşivi değil, '%s' üyesi eksik"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "İç hata, %s üyesi bulunamadı"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Ayrıştırılamayan 'control' dosyası"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "%s dosyasına yazılamadı"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "%s dosyası kapatılamadı"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "%s yolu çok uzun"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s paketi bir çok kez açıldı"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "%s dizini yönlendirilmiş"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Bu paket yönlendirme hedefine (%s/%s) yazmayı deniyor"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Yönlendirme yolu çok uzun"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "%s durum bilgisi alınamadı"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "%s, %s olarak yeniden adlandırılamadı"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "%s dizini dizin olmayan bir öğeyle değiştirildi"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Düğüm sağlama kovasında bulunamadı"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Yol çok uzun"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "%s paketinin sürümü yok"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "%s/%s dosyası %s paketindeki aynı adlı dosyanın üzerine yazmak istiyor"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "%s okunamadı"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "%s durum bilgisi alınamadı"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode hâlâ bağlı olan düğüm üzerinde çağrıldı"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Sağlama elementi bulunamadı!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Yönlendirme tahsisi başarısız oldu"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "AddDiversion'da iç hata"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Bir yönlendirmenin üzerine yazılmaya çalışılıyor, %s -> %s ve %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Aynı dosya iki kez yönlendirilemez: %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "%s/%s yapılandırma dosyası zaten mevcut"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+"Böyle bir depodan güvenli bir şekilde güncelleme yapılamaz, bu nedenle depo "
+"devre dışı bırakılmıştır."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+"Böyle bir depodan gelen verilerin kaynağı doğrulanamayacağı için bu deponun "
+"kullanımı olası tehlike arz etmektedir."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+"Depo oluşturma ve kullanıcı yapılandırması hakkında ayrıntılı bilgi için apt-"
+"secure(8) rehber sayfasında bulunabilir."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "'%s' deposu imzalanmamış"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "'%s' deposu artık Release dosyası barındırmıyor."
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"Bu duruma normalde izin verilmez, ama Acquire::"
+"AllowDowngradeToInsecureRepositories seçeneği kullanıldığı için izin "
+"veriliyor."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "'%s' deposu imzalanmamış."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "'%s' deposunda Release dosyası yok."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "'%s' deposu yalnız zayıf güvenlik bilgisi sağlıyor."
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "%s readlink çağrısı başarısız oldu"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Sağlama toplamları eşleşmiyor"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+"Bu indirmeyi güvenli bir şekilde gerçekleştirebilmek için yeterli bilgi "
+"mevcut değil"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "yeniden adlandırma başarısız, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Boyutlar eşleşmiyor"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Geçersiz dosya biçimi"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "İmza hatası"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Temiz-imzalı dosya geçerli değil, '%s' hatası alındı (ağ kimlik doğrulama "
+"gerektiriyor mu?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"İmza doğrulama sırasında bir hata meydana geldi. Depo güncel değil ve önceki "
+"indeks dosyaları kullanılacak. GPG hatası: %s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG hatası: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"'%2$s' deposunda '%3$s' adlı bir bileşen mevcut olmadığı için '%1$s' dosyası "
+"alınmıyor (sources.list dosyasındaki bileşen adı yanlış yazılmış olabilir "
+"mi?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+"'%2$s' deposu '%3$s' mimarisini desteklemediği için yapılandırılmış '%1$s' "
+"dosyası alınmıyor"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"'%2$s' deposunda mevcut olmadığı için yapılandırılmış '%1$s' dosyası "
+"alınmıyor (sources.list girdisi yanlış yazılmış olabilir mi?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+"'%2$s' deposu yalnız zayıf güvenlik bilgisi sağladığı için yapılandırılmış "
+"'%1$s' dosyası alınmıyor"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"%s konumundaki 'Release' dosyasının vâdesi dolmuş (%s önce). Bu deponun "
+"güncelleştirmeleri uygulanmayacak."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"%s konumundaki 'Release' dosyasının vâdesi dolmuş (%s önce). Bu deponun "
+"güncelleştirmeleri uygulanmayacak."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Dağıtım çakışması: %s (beklenen %s ama eldeki %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "'%s' deposu '%s' değerini '%s' yerine '%s' olarak değiştirmiş"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+"'%s' deposu %s için öntanımlı önceliğini %hi değerinden %hi değerine "
+"değiştirdi."
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+"Bu durumla ilgili daha fazla bilgi şu adresten ulaşılabilen Sürüm notlarında "
+"bulunabilir: %s"
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"Bu depodaki güncellemelerin uygulanabilmesi için bu duruma onay "
+"verilmelidir. Ayrıntılar için %s rehber sayfasına bakın."
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "%s alınamadı %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"%s paketindeki dosyalardan biri konumlandırılamadı. Bu durum, bu paketi elle "
+"düzeltmeniz gerektiği anlamına gelebilir. (eksik mimariden dolayı)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "'%2$s' paketinin '%1$s' sürümü hiçbir kaynakta bulunamadı"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "%s=%s için değişim günlüğü mevcut değil"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "'%s' yöntemi yapılandırma üzerinden devre dışı bırakılmış."
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "Tor kullanmak istiyorsanız %2$s yerine %1$s kullanmaya dikkat edin."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Yöntem sürücüsü %s bulunamadı."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "%s paketi kurulu mu?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "%s yöntemi düzgün şekilde başlamadı"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Lütfen '%s' olarak etiketlenmiş diski '%s' sürücüsüne yerleştirin ve [Enter] "
+"tuşuna basın."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Liste dizini %s bulunamadı."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Arşiv dizini %s bulunamadı."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "%s dizini kilitlenemiyor"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+"'%s' kullanıcısı sistemde mevcut olmadığı için ayrıcalıklar bırakılamıyor"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+"'%2$s' kullanıcısının '%1$s' dosyasına erişimi olmadığı için indirme işlemi "
+"root kullanıcısı olarak yapılıyor."
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "%s temizliği desteklenmiyor"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Alınan dosya: %li / %li (%s kaldı)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Alınan dosya: %li / %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"%s paketinin tekrar kurulması gerekli, ancak gereken arşiv dosyası "
+"bulunamıyor."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Hata, pkgProblemResolver::Resolve bozuk paketlere yol açtı, bu sorunun "
+"nedeni tutulan paketler olabilir."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Sorunlar giderilemedi, tutulan bozuk paketleriniz var."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Paket listeleri ya da durum dosyası ayrıştırılamadı ya da açılamadı."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Bu sorunları gidermek için apt-get update komutunu çalıştırabilirsiniz"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Kaynak listesi okunamadı."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Regex derleme hatası - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "'%2$s' paketinin '%1$s' sürümü bulunamadı"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "'%2$s' paketinin '%1$s' sürümü bulunamadı"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "'%s' görevi bulunamadı"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "'%s' düzenli ifadesini içeren herhangi bir paket bulunamadı"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "'%s' ifadesine eşleşen herhangi bir paket bulunamadı"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "%s paketi bulunamadı"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "'%s' paketi tamamen sanal olduğu için sürümü seçilemiyor"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr "'%s' paketi sanal olduğu için en yeni sürümü seçilemiyor"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "'%s' paketinin aday sürümü olmadığı için aday sürüm seçilemiyor"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr "'%s' paketi kurulu olmadığı için kurulu sürüm seçilemiyor"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"'%s' paketi kurulu olmadığı ve aday sürüme sahip olmadığı için her ikisi de "
+"seçilemiyor"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Kaynak listesinin (%2$s) %1$u numaralı satırı çok uzun."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "CD-ROM ayrılıyor...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "CD-ROM bağlama noktası %s kullanılıyor\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Disk bekleniliyor...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "CD-ROM bağlanıyor...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Tanımlanıyor... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Kayıtlı etiket: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Disk, indeks dosyaları için taranıyor...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"%zu paket indeksi, %zu kaynak indeksi, %zu çeviri indeksi ve %zu imza "
+"bulundu\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Hiç paket dosyası bulunamadı. Belirttiğiniz disk bir Debian diski değil ya "
+"da yanlış mimariye sahip."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "'%s' etiketi bulundu\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Bu, geçerli bir ad değil, yeniden deneyin.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Disk adı: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Paket listeleri kopyalanıyor..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Yeni kaynak listesi yazılıyor\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Bu disk için olan kaynak listesi girdileri:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "%s olarak değiştirilemedi"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "%s için dosya bilgisi alınamadı."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Bağlama noktasının (%s) durum bilgisi alınamadı"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Cdrom durum bilgisi alınamadı"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr ""
+"'%c' Komut satırı seçeneği [%s içinden] diğer seçeneklerle bir arada "
+"tanınmıyor."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "%s komut satırı seçeneği diğer seçeneklerle bir arada anlaşılamadı"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Komut satırı seçeneği %s mantıksal değer değil"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "%s seçeneği bir argüman kullanımını gerektirir."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"%s seçeneği: Yapılandırma öğesi tanımlaması =<değer> şeklinde değer "
+"içermelidir."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr ""
+"%s seçeneği bir tam sayı argümanının kullanımını gerektirir, '%s' değil"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "'%s' seçeneği çok uzun"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "%s algılaması anlaşılamadı, true (doğru) ya da false (yanlış) deneyin."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Geçersiz işlem: %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Tanınamayan tür kısaltması: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Söz dizimi hatası %s:%u: Blok ad olmadan başlıyor."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Söz dizimi hatası %s:%u: Kötü biçimlendirilmiş etiket"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Söz dizimi hatası %s:%u: Değerden sonra ilave gereksiz"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Söz dizimi hatası %s:%u: Yönergeler sadece en üst düzeyde bitebilir"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Söz dizimi hatası %s:%u: Çok fazla yuvalanmış 'include'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Söz dizimi hatası %s:%u: Buradan 'include' edilmiş"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Söz dizimi hatası %s:%u: Desteklenmeyen yönerge '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Söz dizimi hatası %s:%u: clear yönergesi bir seçenek ağacı argümanını "
+"gerektirir"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Söz dizimi hatası %s:%u: Dosya sonunda ilave gereksiz"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "%s dosyasından bağ kaldırma sorunu"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Kilitleme dosyası %s salt okunur olduğu için kilitleme kullanılmıyor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Kilit dosyası %s açılamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "nfs ile bağlanmış kilit dosyası %s için kilitleme kullanılmıyor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "%s kilidi alınamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "'%s' dizin olmadığı için dosya listeli oluşturulamıyor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+"'%2$s' dizinindeki '%1$s' normal bir dosya olmadığı için görmezden geliniyor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"'%2$s' dizinindeki '%1$s' dosyası uzantısı olmadığı için görmezden geliniyor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"'%2$s' dizinindeki '%1$s' dosyası geçersiz bir dosya uzantısı olduğu için "
+"yok sayılıyor"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "%s için beklenildi ama o gelmedi"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "%s altsüreci bir bölümleme hatası aldı (segmentation fault)."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "%s altsüreci %u sinyali aldı."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "%s altsüreci bir hata kodu gönderdi (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "%s altsüreci beklenmeyen bir şekilde sona erdi"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Okuma hatası"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Yazma hatası"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Gzip dosyası %s kapatılamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "Beklenmeyen dosya sonu"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Altsüreç IPC'si oluşturulamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Sıkıştırma programı çalıştırılamadı "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "%s dosyası açılamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Dosya tanımlayıcı %d açılamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "read, %llu bayt okunması gerekli ama hiç kalmamış"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "write, yazılması gereken %llu bayt yazılamıyor"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "%s dosyası kapatılamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "%s dosyası %s olarak yeniden adlandırılamadı"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Dosya eşitlenirken sorun çıktı"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "mkstemp %s başarısız oldu"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "%s dosyasına yazılamıyor"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Boş dosya mmap yapılamıyor"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "%llu baytlık mmap yapılamaz"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Dosya tanımlayıcı %i çoğaltılamadı"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "mmap kapatılamıyor"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "mmap eşlenemiyor"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "%lu baytlık mmap yapılamaz"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Dosya kesilemedi"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dinamik MMap yerine sığamadı. Lütfen APT::Cache-Start boyutunu artırın. "
+"Kullanımdaki değer: %lu (ayrıntılı bilgi için man 5 apt.conf komutunu "
+"kullanın)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr "%lu baytlık sınıra ulaşıldığı için MMap boyutu artırılamadı."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Otomatik büyüme kullanıcı tarafından kapatıldığı için MMap boyutu "
+"artırılamadı."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Hata!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Bitti"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%li gün %li saat %li dk. %li sn."
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%li saat %li dk. %li sn."
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%li dk. %li sn."
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%li sn."
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "%s seçimi bulunamadı"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr "%s hedefi aynı dosyayı (%s) %s olarak %s kaynağından almak istiyor"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "%s (%s) hedefi %s ve %s konumlarında birden fazla kez yapılandırılmış"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "'Release' dosyası (%s) ayrıştırılamadı"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "'Release' dosyası %s içinde hiç bölüm yok"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "'Release' dosyasında (%s) sağlama girdisi yok"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+"%s Release dosyasında güvenlik amaçları için yeteri kadar güçlü bir Hash "
+"girdisi bulunmuyor"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "'Release' dosyasında (%2$s) geçersiz '%1$s' girdisi"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr "%s seçeneği için çakışan değer kümesi (kaynak %s %s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr "%s seçeneği için geçersiz değer kümesi (kaynak: %s %s) (%s)"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr "%s seçeneği için çakışan değer kümesi (kaynak %s %s: %s != %s)"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Paket dosyası (%s) ayrıştırılamadı (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Yönetim dizini (%s) kilitlenemiyor, başka bir işlem tarafından kullanılıyor "
+"olmasın?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Yönetim dizini (%s) kilitlenemiyor, root kullanıcısı mısınız?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg kesintiye uğradı, sorunu düzeltmek için elle '%s' komutunu çalıştırın. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Yönetim dizini (%s) kilitlenemiyor, başka bir işlem tarafından kullanılıyor "
+"olmasın?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Yönetim dizini (%s) kilitlenemiyor, root kullanıcısı mısınız?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Kilitlenmemiş"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "%s hazırlanıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "%s paketini yapılandırmaya hazırlanılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "%s paketinin kaldırılmasına hazırlanılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "%s paketinin tamamen kaldırılmasına hazırlanılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "%s paketinin kaybolduğu not ediliyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Kurulum sonrası tetikleyicisi %s çalıştırılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "%s kuruldu"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "%s yapılandırılıyor"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "'%s' dizini bulunamadı"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "'%s' dosyası açılamadı"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "%s paketi açılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "%s kuruluyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "%s kaldırılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "%s tamamen kaldırılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "%s tamamen kaldırıldı"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Günlük dosyasına yazılamıyor (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "/dev/pts bağlı mı?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "İşlem yarıda kesildi"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"En fazla rapor miktarına (MaxReports) ulaşıldığı için apport raporu yazılmadı"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "bağımlılık sorunları - yapılandırılmamış durumda bırakılıyor"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Apport raporu yazılmadı çünkü hata iletisi bu durumun bir önceki hatadan "
+"kaynaklanan bir hata olduğunu belirtiyor."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Hata iletisi diskin dolu olduğunu belirttiği için apport raporu yazılamadı"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Hata iletisi bir bellek yetersizliği hatasına işaret ettiği için apport "
+"raporu yazılamadı"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Hata iletisi yerel bir sistem hatasına işaret ettiği için apport raporu "
+"yazılamadı"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Hata iletisi bir dpkg G/Ç hatasına işaret ettiği için apport raporu "
+"yazılamadı"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Bağımlılık ağacı oluşturuluyor"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Aday sürümler"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Bağımlılık oluşturma"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Durum bilgisi okunuyor"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Durum dosyası (StateFile) %s açılamadı"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Geçici durum dosyasına (%s) yazma başarısız oldu"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Çözücüye senaryo gönder"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Çözücüye istek gönder"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Çözüm almak için hazırlan"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Harici çözücü düzgün bir hata iletisi göstermeden başarısız oldu"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Harici çözücüyü çalıştır"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "Harici planlamacıyı çalıştır"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "Planlamacıya istek gönder"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "Planlamacıya senaryo gönder"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "Harici planlamacı düzgün bir hata iletisi göstermeden başarısız oldu"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "%i kayıt yazıldı.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "%2$i eksik dosyayla %1$i kayıt yazıldı.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "%2$i eşleşmeyen dosyayla %1$i kayıt yazıldı\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "%2$i eksik dosya ve %3$i eşleşmeyen dosyayla %1$i kayıt yazıldı\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "%s için kimlik doğrulama kaydı bulunamadı"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Sağlama yapılamadı: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Paketleme sistemi '%s' desteklenmiyor"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Uygun bir paketleme sistemi türü bulunamıyor"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Durum: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "dpkg çalıştırılıyor"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"\"%s\" paketinin anında yapılandırması başarısız oldu. Ayrıntılar için apt."
+"conf(5) rehber sayfasının APT::Immediate-Configure kısmına bakın. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "'%s' paketi yapılandırılamadı. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Bu kurulum, bir Çakışma/Ön-Bağımlılık döngüsü içerdiği için %s temel "
+"paketinin geçici olarak kaldırılmasını gerektiriyor. Bu durum genellikle "
+"kötü bir durumdur, ama ille de devam etmek isterseniz, APT::Force-LoopBreak "
+"seçeneğini etkinleştirin."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Paket önbelleği boş"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Paket önbelleği dosyası bozulmuş"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Paket önbelleği dosyası uyumsuz bir sürümde"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Bu APT '%s' sürümleme sistemini desteklemiyor"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr ""
+"Paket önbelleği farklı bir mimari için oluşturulmuş: biri %s, diğeri %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Paket önbellek dosyası bozulmuş, dosyanın sağlaması tutmuyor"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Bağımlılıklar"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "ÖnBağımlılıklar"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Önerdikleri"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Çakışmalar"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Tavsiye ettikleri"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Değiştirilenler"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Bozdukları"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Geliştirdikleri"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Eskiyenler"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "önemli"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "gerekli"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "standart"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "ilave"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "seçimlik"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Önbelleğin uyumsuz bir sürümleme sistemi var"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "%s paketi işlenirken sorunlarla karşılaşıldı (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Vay canına, bu APT'nin alabileceği paket adları sayısını aştınız."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Vay canına, bu APT'nin alabileceği sürüm sayısını aştınız."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Vay canına, bu APT'nin alabileceği açıklama sayısını aştınız."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Vay canına, bu APT'nin alabileceği bağımlılık sayısını aştınız."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Paket listeleri okunuyor"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Kaynak önbelleği kaydedilirken GÇ Hatası"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "İndeks dosyası türü '%s' desteklenmiyor"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"APT::Default-Release için '%s' değeri geçersizdir, çünkü kaynaklarda böyle "
+"bir sürüm yok"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "%s tercihler dosyasında geçersiz kayıt, Paket başlığı yok"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "İğne türü %s anlaşılamadı"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr "%s: %s değeri geçerli iğne önceliği aralığının dışında (%d - %d arası)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "İğne için öncelik belirlenmedi (ya da sıfır)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Hatalı girdi satır %u %s dosya %s (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Kaynak listesinin (%2$s) %1$u numaralı satırı hatalı (tür)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "'%s' türü bilinmiyor. (Satır: %u, Kaynak Listesi: %s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "%2$s kaynak listesinin %1$u kısmı hatalı (tür)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "'%s' türü bilinmiyor (girdi: %u, kaynak listesi: %s)"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "Komut satırında desteklenmeyen bir dosya (%s) verildi"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "'sources.list' dosyası içine bazı 'source' adresleri koymalısınız"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "%s metni tam sayıya dönüştürülemiyor: aralığın dışında"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Bazı indeks dosyaları indirilemedi. Bu dosyalar yok sayıldılar ya da önceki "
+"sürümleri kullanıldı."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Yükseltme hesaplanıyor"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Aynı: %lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "İndir: %lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Yoksay:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Hata: %lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "%2$s'de %1$sB alındı (%3$sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Çalışıyor]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Ortam değişimi: Lütfen '%2$s' sürücüsüne\n"
+" '%1$s'\n"
+"olarak etiketlenmiş diski takın ve [Enter] tuşuna basın\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+"Bu değişiklikleri onaylamak ve bu depodan güncelleme yapmaya devam etmek "
+"istiyor musunuz?"
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Bağımlılıklar düzeltiliyor..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " başarısız oldu."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Bağımlılıklar düzeltilemedi"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Yükseltme kümesi küçültülemiyor"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Tamamlandı"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Bu sorunları düzeltmek için 'apt --fix-broken install' komutunu "
+"çalıştırmanız gerekebilir."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Karşılanmamış bağımlılıklar. 'apt --fix-broken install' komutunu paket "
+"seçeneği vermeden deneyin (ya da bir çözüm belirtin)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Sıralama"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Not, '%2$s' görevi için '%1$s' seçiliyor\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Not, '%2$s' ifadesi için '%1$s' seçiliyor\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Not, '%2$s' düzenli ifadesi için '%1$s' seçiliyor\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "%s paketi sanal bir pakettir, bu paketi sağlayan:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr " [Kurulu]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Aday sürüm değil]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Kurmak için adaylardan birini açıkça seçmelisiniz."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"%s paketi mevcut değil, ancak başka paket içerisinden işaret edilmiş.\n"
+"Bu durum bu paketin kayıp, eskidiği için bırakılmış, ya da başka bir\n"
+"yazılım kaynağında bulunduğu anlamına gelebilir.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Yine de aşağıdaki paketler onun yerine geçecek:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "'%s' paketi için kurulum adayı yok"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "'%s' gibi sanal paketler kaldırılamaz\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"'%s' kurulu değildi, dolayısıyla kaldırılmadı. Bunu mu demek istediniz: "
+"'%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "'%s' kurulu değildi, dolayısıyla kaldırılmadı\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Not, '%2$s' yerine '%1$s' seçiliyor\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "Sık kullanılan komutlar:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+"Kullanılabilen komutlar hakkında daha fazla bilgi için %s rehber sayfasına "
+"bakın."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"Yapılandırma seçenekleri ve söz dizimi ayrıntıları apt.conf(5);\n"
+"Kaynakların nasıl yapılandırılacağıyla ilgili bilgiler sources.list(5);\n"
+"Paket ve sürüm seçimlerinin ifade edilmesiyle ilgili bilgiler "
+"apt_preferences(5);\n"
+"Güvenlikle ilgili ayrıntılar apt-secure(8) rehber sayfalarında bulunabilir.\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Bu APT'nin Süper İnek Güçleri vardır."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Bu APT yardımcısının Süper Meep Güçleri var."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+"--force-yes seçeneği kullanımdan kaldırılmıştır, bunun yerine --allow ile "
+"başlayan seçeneklerden birini kullanabilirsiniz."
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Hiç paket bulunamadı"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "UYARI: Aşağıdaki paketlerin aslına uygunluğu doğrulanamıyor!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Kimlik denetimi uyarısı görmezden geliniyor.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Bazı paketlerin aslına uygunluğu doğrulanamadı"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Paketler doğrulanmadan kurulsun mu?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"Aslına uygunluğu doğrulanamayan paketler var ve -y seçeneği --allow-"
+"unauthenticated olmadan kullanılmış"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "%s içindeki boş alan miktarı belirlenemedi"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "%s içinde yeterli boş alanınız yok."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "İndirme dizini kilitlenemiyor"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Bazı paketler kurulamadı. Bu durum, olanaksız bir durum istemiş\n"
+"olduğunuzu ya da kararsız (unstable) dağıtımı kullandığınızı ve\n"
+"bazı paketlerin henüz oluşturulamamış ya da oluşturulmakta\n"
+"olduğunu gösterir."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Aşağıdaki bilgiler durumu çözmenize yardımcı olabilir:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Bozuk paketler"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Bazı arşivler alınamıyor, apt-get update'i çalıştırmayı ya da --fix-missing "
+"seçeneğini ekleyerek düzeltmeyi deneyin."
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "İç hata, InstallPackages bozuk paketler ile çağrıldı!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"Paketlerin kaldırılması gerekiyor ancak kaldırma işlemi devre dışı "
+"bırakılmış."
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"Temel paketler kaldırıldı ve -y seçeneği --allow-remove-essential olmadan "
+"kullanıldı."
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr ""
+"Paket sürümleri düşürüldü ve -y seçeneği --allow-downgrades olmadan "
+"kullanıldı."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"Tutulan paketler değişti ve -y seçeneği --allow-change-held-packages olmadan "
+"kullanıldı."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "İç hata, Sıralama tamamlanamadı"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Ne kadar ilginç... Boyutlar eşleşmedi, apt@packages.debian.org adresine e-"
+"posta atın"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "%sB/%sB arşiv dosyası indirilecek.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "%sB arşiv dosyası indirilecek.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Bu işlem tamamlandıktan sonra %sB ek disk alanı kullanılacak.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Bu işlem tamamlandıktan sonra %sB disk alanı boşalacak.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "Sadece Önemsiz seçeneği ayarlandı, ama bu önemsiz bir işlem değil."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Evet, söylediğim şekilde yap!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Tehlikeli bir iş yapmak üzeresiniz.\n"
+"Devam etmek için '%s' ifadesini yazınız\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Vazgeç."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Devam etmek istiyor musunuz?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Bazı dosyalar indirilemedi"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "İndirme işlemi tamamlandı ve sadece indirme kipinde"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing seçeneği ve ortam takası şu an için desteklenmiyor"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Eksik paketler düzeltilemedi."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Kurulum iptal ediliyor."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Tüm dosyalarının üzerine yazıldığı için aşağıdaki paket\n"
+"sisteminizden kayboldu:"
+msgstr[1] ""
+"Tüm dosyalarının üzerine yazıldığı için aşağıdaki paketler\n"
+"sisteminizden kayboldu:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Not: Bu eylem dpkg tarafından otomatik ve kasıtlı olarak yapılmıştır."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Nesneleri silmemiz beklenemez, AutoRemover çalıştırılamıyor"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"AutoRemover yapmaması gereken bir yıkıma\n"
+"sebep oldu. Lütfen apt hakkında bir hata raporu doldurun."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "İç hata, AutoRemover bazı şeyleri bozdu"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Aşağıdaki paket otomatik olarak kurulmuş ve artık bu pakete gerek duyulmuyor:"
+msgstr[1] ""
+"Aşağıdaki paketler otomatik olarak kurulmuş ve artık bu paketlere gerek "
+"duyulmuyor:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu paket otomatik olarak kurulmuş ve artık gerekli değil.\n"
+msgstr[1] "%lu paket otomatik olarak kurulmuş ve artık gerekli değil.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Bu paketi kaldırmak için '%s' komutunu kullanın."
+msgstr[1] "Bu paketleri kaldırmak için '%s' komutunu kullanın."
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "Aşağıdaki ek paketler kurulacak:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Önerilen paketler:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Tavsiye edilen paketler:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "%s atlanıyor, bu paket zaten kurulu ve yükseltme seçilmemiş.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"%s atlanıyor, bu paket kurulu değil ve sadece yükseltmeler isteniyor.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr ""
+"%s paketinin yeniden kurulumu mümkün değil, çünkü paket indirilemedi.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s zaten en yeni sürümde (%s).\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s elle kurulmuş olarak ayarlandı.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "'%3$s' paketinin '%1$s' (%2$s) sürümü seçildi\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "'%4$s' nedeniyle '%3$s' paketinin '%1$s' (%2$s) sürümü seçildi\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Listeleme"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "Fazladan %i sürüm daha var. Görmek için '-a' anahtarını kullanın."
+msgstr[1] ""
+"Fazladan %i sürüm daha var. Bu sürümleri görmek için '-a' anahtarını "
+"kullanın."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"NOT: Bu sadece bir benzetimdir!\n"
+" %s'i gerçekten çalıştırmak için root haklarına ihtiyaç vardır.\n"
+" Unutmayın ki benzetim kipinde kilitleme yapılmaz, bu nedenle\n"
+" bu benzetimin gerçekteki durumla birebir aynı olacağına güvenmeyin!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "bilinmeyen"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[kurulu,yükseltilebilir: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[kurulu,yerel]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[kurulu,otomatik-kaldırılabilir]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[kurulu,otomatik]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[kurulu]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[şundan yükseltilebilir: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[artık-yapılandırma]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "ama %s kurulu"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "ama %s kurulacak"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "ama kurulabilir değil"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "ama o bir sanal paket"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "ama kurulmayacak"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "ama kurulu değil"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " ya da"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Aşağıdaki paketler karşılanmamış bağımlılıklara sahip:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Aşağıdaki YENİ paketler kurulacak:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Aşağıdaki paketler KALDIRILACAK:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Aşağıdaki paketlerin mevcut durumları korunacak:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Aşağıdaki paketler yükseltilecek:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Aşağıdaki paketlerin SÜRÜMLERİ DÜŞÜRÜLECEK:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Aşağıdaki eski sürümlerinde tutulan paketler değiştirilecek:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (%s nedeniyle)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"UYARI: Aşağıdaki temel paketler kaldırılacak.\n"
+"Bu işlem ne yaptığınızı tam olarak bilmediğiniz takdirde YAPILMAMALIDIR!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu paket yükseltilecek, %lu yeni paket kurulacak, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu paket yeniden kurulacak, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu paketin sürümü düşürülecek, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu paket kaldırılacak ve %lu paket yükseltilmeyecek.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu paket tam olarak kurulmayacak ya da kaldırılmayacak.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[E/h]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[e/H]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "E"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "H"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "En az bir arama örüntüsü vermelisiniz"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Tam Metin Arama"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+"Fazladan %i kayıt daha var. Görmek için '-a' anahtarını kullanabilirsiniz."
+msgstr[1] ""
+"Fazladan %i kayıt daha var. Bu kayıtları görmek için '-a' anahtarını "
+"kullanabilirsiniz."
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "gerçek bir paket değil (sanal)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Paket dosyaları:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Önbellek eş zamanlı değil, paket dosyası 'x-ref' yapılamıyor"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Sabitlenmiş paketler:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s (öncelik: %d)\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Kurulu: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Aday: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(hiçbiri)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Sürüm çizelgesi:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "'%s' mimarisi için bir paket bulunamadı"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "'%s' paketinin '%s' sürümü bulunamadı"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "'%s' paketi '%s' dağıtım sürümünde bulunamadı"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Kaynak paket olarak '%s' yerine '%s' kullanılacak\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "'%2$s' paketinin '%1$s' sürümünü bulunamadı"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Kaynağının indirileceği en az bir paket seçilmeli"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "%s paketinin kaynak paketi bulunamadı"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"NOT: '%s' paketlemesi '%s' sürüm kontrol sistemiyle aşağıdaki adreste "
+"yapılmaktadır:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Bu paketin en son (ve muhtemelen henüz yayımlanmamış olan)\n"
+"sürümünü edinmek için lütfen:\n"
+"%s\n"
+"komutunu kullanın.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Zaten indirilmiş olan '%s' dosyası atlanıyor\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "%sB/%sB kaynak arşivi indirilecek.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "%sB kaynak arşivi indirilecek.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "%s kaynağını al\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Bazı arşivler alınamadı."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "%s için zaten açılmış bazı paketlerin açılması atlanıyor\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Paket açma komutu '%s' başarısız.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "'dpkg-dev' paketinin kurulu olduğundan emin olun.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "İnşa komutu '%s' başarısız oldu.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "%s paketinin inşa-bağımlılığı bilgisi alınamıyor"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s paketinin hiç inşa bağımlılığı yok.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"%s mimarisinin bilgileri mevcut değil. Kurulum için apt.conf(5) rehber "
+"sayfasındaki APT::Architectures kısmına göz atın"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "İnşa bağımlılıklarının denetleneceği en az bir paket belirtilmelidir"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "Not, inşa bağımlılıklarını indirmek için '%s' dizini kullanılıyor\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Not, inşa bağımlılıklarını indirmek için '%s' dosyası kullanılıyor\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "İnşa bağımlılıklarını işleme başarısız oldu"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "%s ayrıştırılamadı. Tekrar düzenlemek ister misiniz? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "'%s' dosyası değişti, lütfen 'apt-get update' komutunu çalıştırın.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "%s paketinin (sürüm %s) karşılanamayan bir bağımlılığı var:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "'update' komutu argüman almaz"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+"Oturum açma ayrıcalıklarını '%3$s' '%2$s' girdisinin içinde doğrudan "
+"belirtmek yerine '%1$s' kullanmayı tercih edin"
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i paket yükseltilebilir. Bu paketi görmek için 'apt list --upgradable' "
+"komutunu çalıştırın.\n"
+msgstr[1] ""
+"%i paket yükseltilebilir. Bu paketleri görmek için 'apt list --upgradable' "
+"komutunu çalıştırın.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Tüm paketler güncel."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "%s komutu argüman almaz"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Toplam paketlerin adları: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Toplam paket yapıları: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Normal paketler: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Saf sanal paketler: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Tekil sanal paketler: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Karışık sanal paketler: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Eksik: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Toplam farklı sürümler: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Toplam farklı açıklamalar: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Toplam bağımlılıklar: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Toplam sürüm/dosya ilişkileri: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Toplam Tanım/Dosya ilişkileri: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Toplam destekleme eşleştirmeleri: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Toplam birikmiş dizgiler: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Toplam serbest alan: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Hesaplanan toplam alan: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Bu komutun kullanımı bırakılmıştır. Lütfen bunun yerine 'apt-mark showauto' "
+"komutunu kullanın."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"Kullanım: apt-cache [seçenekler] komut\n"
+" apt-cache [seçenekler] show paket1 [paket2 ...]\n"
+"\n"
+"apt-cache komutu kurulu ve kurulabilir paketler hakkında sorgulamalar\n"
+"yapılmasında ve mevcut bilgilerin görüntülenmesinde kullanılır. Bunun\n"
+"için gereken veri apt-get'in 'update' komutu ile elde edilir. Son\n"
+"güncellemenin üzerinden uzun zaman geçtiği durumlarda gösterilen bilgiler\n"
+"geçerliliğini kaybetmiş olabilir fakat bu sayede kaynaklar çevrimdışı olsa\n"
+"bile apt-cache çalışabilmektedir.\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Paket kayıtlarını görüntüle"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Paket listesini bir düzenli ifade ile ara"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Bir paketin bağımlılık bilgilerini ham haliyle görüntüle"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Bir paketin ters bağımlılık bilgilerini görüntüle"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Bir paketin okunabilir kaydını görüntüle"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Sistemdeki tüm paketlerin adlarını listele"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "İlke seçeneklerini görüntüle"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Lütfen bu CD/DVD'ye bir ad verin, örneğin 'Debian 5.0.3 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Lütfen sürücüye bir Disk yerleştirin ve [Enter] tuşuna basın"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "'%s', '%s' konumuna bağlanamadı"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Öntanımlı bağlama noktasında bir CD-ROM algılanamadı.\n"
+"CD-ROM bağlama noktasını ayarlamak için --cdrom seçeneğini kullanmayı "
+"deneyebilirsiniz.\n"
+"Otomatik CD-ROM ve bağlantı noktası algılama hakkında daha fazla bilgi almak "
+"için 'man apt-cdrom' komutunu kullanabilirsiniz."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Kalan CD'leriniz için bu işlemi yineleyin."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"Kullanım: apt-cdrom [seçenekler] komut\n"
+"\n"
+"apt-cdrom komutu CD-ROM'lar, USB flash bellekler ve diğer taşınabilir\n"
+"ortam türlerini APT'a paket kaynağı olarak eklemede kullanılır. Bağlama\n"
+"noktaları ve aygıt bilgisi apt.conf(5), udev(7) ve fstab(5)'ten sağlanır.\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Argümanlar çiftler halinde değil"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Kullanım: apt-config [seçenekler] komut\n"
+"\n"
+"apt-config tüm APT araçları tarafından kullanılan ayarlar için bir\n"
+"arayüz sağlar. Esasen kabuk betiklerinde ve hata ayıklamada kullanılır.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "yapılandırma değerlerini kabuk değerlendirme ile al"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "geçerli yapılandırma ayarlarını göster"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"Kullanım: apt-dump-solver\n"
+"\n"
+"apt-dump-solver EDSP senaryolarının bir dosyada saklanmasını ve\n"
+"diğer çözücülere aktarılması için arayüz sağlar.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Kullanım: apt-extracttemplates dosya1 [dosya2 ...]\n"
+"\n"
+"apt-extracttemplates, debian paketlerinden ayar ve şablon dosyalarını\n"
+"almak için kullanılan bir araçtır. Esasen debconf(1) tarafından paket\n"
+"kurulumlarından önce yapılandırma sorularının sorulmasında kullanılır.\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "debconf sürümü alınamıyor. debconf kurulu mu?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "%s paketi bulunamadı"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s otomatik olarak kurulmuş şekilde ayarlandı.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Bu komut artık kullanılmamaktadır. Bunun yerine 'apt-mark auto' ve 'apt-mark "
+"manual' kullanın."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "İç hata, sorun çözücü nesneyi bozdu"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Desteklenen birimler:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Kullanım: apt-get [seçenekler] komut\n"
+" apt-get [seçenekler] install|remove paket1 [paket2 ...]\n"
+" apt-get [seçenekler] kaynak paket1 [paket2 ...]\n"
+"\n"
+"apt-get, doğrulanmış kaynaklardan paket ve paket bilgisi indirme ve\n"
+"paketlerin bağımlılıkları ile birlikte kurulumu, yükseltilmesi ve\n"
+"kaldırılmasında kullanılan komut satırı arayüzüdür.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Paket listelerini yenile"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Yükseltme işlemini gerçekleştir"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Yeni paket kur (paket libc6.deb değil libc6 şeklinde olmalıdır)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Yeni paket kur (paket libc6.deb değil libc6 şeklinde olmalıdır)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Paket(leri) kaldır"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Paketleri ve yapılandırma dosyalarını kaldır"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Kullanılmayan tüm paketleri otomatik olarak kaldır"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Dağıtım yükseltme, ayrıntılı bilgi için apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "dselect yapılandırmalarına uy"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Kaynak paketlerin inşa bağımlılıklarını yapılandır"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "İndirilmiş olan arşiv dosyalarını sil"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "İndirilmiş olan eski arşiv dosyalarını sil"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Eksik bağımlılık olmadığından emin ol"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Kaynak paket dosyalarını indir"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "İkili paketleri içinde bulunulan dizine indir"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Belirtilen paketlerin değişim günlüklerini indir ve görüntüle"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Argüman olarak bir adet URL'ye ihtiyaç vardır"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "En az bir adet url/dosya-adı çifti belirtilmelidir"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "İndirme Başarısız"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "%s için GetSrvRec başarısız oldu"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Kullanım: apt-helper [seçenekler] komut\n"
+" apt-helper [seçenekler] cat-file dosya ...\n"
+" apt-helper [seçenekler] download-file uri hedef-konum\n"
+"\n"
+"apt-helper kabuk betiklerinde kullanılması için çeşitli komutları\n"
+"bir araya getirir (örn: APT ile aynı indirme veya vekil sunucu\n"
+"ayarlarının kullanılabilmesi için)\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "verilen adresi (uri) hedef yola kaydet"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "Bir SRV kaydına bak (örneğin _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "dosyaları birleştir, otomatik olarak aç"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "apt.conf kullanarak vekil sunucuyu algıla"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr "sistemin çevrimiçi olmasını bekle"
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Kullanım: apt-internal-planner\n"
+"\n"
+"apt-internal-planner APT ailesinin dâhilî planlamacısını hata ayıklama\n"
+"gibi sebeplerle harici planlamacı gibi kullanmaya yarayan bir arayüzdür.\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Kullanım: apt-internal-solver\n"
+"\n"
+"apt-internal-solver APT ailesinin dâhilî çözücüsünü hata ayıklama\n"
+"gibi sebeplerle harici çözücü gibi kullanmaya yarayan bir arayüzdür.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s kurulu olmadığı için işaretlenemedi.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s zaten elle kurulmuş olarak ayarlı.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s zaten otomatik kurulmuş olarak ayarlı.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Aşağıdaki YENİ paketler kurulacak:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s zaten tutulacak şekilde ayarlanmış.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s zaten tutulmayacak şekilde ayarlanmış.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "'dpkg' çalıştırılamadı. root olduğunuzdan emin misiniz?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s paketi tutuluyor.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "%s paketini tutma işlemi iptal edildi.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "%s paketi tamamen kaldırma için seçildi.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "%s paketi kaldırma için seçildi.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "%s paketi kurulum için seçildi.\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Kullanım: apt-mark [seçenekler] {auto|manual} paket1 [paket2 ...]\n"
+"\n"
+"apt-mark paketleri otomatik ya da elle kurulmuş olarak işaretlemeye\n"
+"yarayan basit bir komut satırı arayüzüdür. Paketlerin dpkg(1) seçim\n"
+"durumlarının değiştirilmesinde ve belirli işaretlere sahip tüm\n"
+"paketlerin listelenmesinde de kullanılabilir.\n"
+"\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Belirtilen paketleri otomatik kurulmuş olarak işaretle"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Belirtilen paketleri elle kurulmuş olarak işaretle"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Belirtilen paketleri otomatik kurulmuş olarak işaretle"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Paketi tutulacak şekilde işaretle"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Paketin tutuluyor işaretini kaldır"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "Otomatik olarak kurulmuş paketlerin listesini görüntüle"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "Elle kurulmuş paketlerin listesini görüntüle"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "Tutulur durumda olan paketlerin listesini görüntüle"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Bilinmeyen paket kaydı!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"Kullanım: apt-sortpkgs [seçenekler] dosya1 [dosya2 ...]\n"
+"\n"
+"apt-sortpkgs paket bilgi dosyalarını sıralamak için basit bir araçtır.\n"
+"Öntanımlı olarak ikili paket bilgisine göre sıralama yapılır; ama -s\n"
+"seçeneği kullanılarak kaynak paket bilgisine göre de sıralama yapılabilir.\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"Kullanım: apt [seçenekler] komut\n"
+"\n"
+"apt, komut satırından paket aramaya, sorgulamaya ve yönetmeye yarayan\n"
+"bir paket yöneticisidir. apt-get ve apt-cache gibi özelleşmiş APT\n"
+"araçlarıyla aynı işlevselliği sağlar fakat öntanımlı olarak etkileşimli\n"
+"kullanıma daha uygun ayarları kullanır.\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "Paketleri adlarına göre listele"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "Paket açıklamalarında arama yap"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "Paket ayrıntılarını görüntüle"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "paket kur"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "paket kur"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "paket kaldır"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "Kullanılabilir paketlerin listesini güncelle"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "sistemi yükselt (paket kurarak ve yükselterek)"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "sistemi yükselt (paket kurarak, yükselterek ve kaldırarak)"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "kaynak bilgi dosyasını düzenle"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Geçersiz öntanımlı ayar!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "Devam etmek için [Enter] tuşuna basın."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Daha önceden indirilmiş .deb dosyalarını silmek istiyor musunuz?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Paket açılırken bazı sorunlar çıktı. Kurulan paketler yapılandırılacak."
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "Bu durum, çift hata iletilerine ya da eksik bağımlılıkların neden"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"olduğu hatalara yol açabilir. Bu durum bir sorun teşkil etmez, sadece bu "
+"iletinin"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"üstündeki hatalar önemlidir. Lütfen bunları onarın ve [I]nstall komutunu "
+"yeniden çalıştırın"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Kullanılabilir bilgiler birleştiriliyor"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Paket uzantı listesi çok uzun"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "%s dizinini işlemede hata"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Kaynak uzantı listesi çok uzun"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "İçindekiler dosyasına başlık yazmada hata"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "%s içeriğini işlemede hata"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Kullanım: apt-ftparchive [seçenekler] komut\n"
+"Komutlar: packages ikilikonumu [geçersizkılmadosyası [konumöneki]]\n"
+" sources kaynakkonumu [geçersizkılmadosyası [konumöneki]]\n"
+" contents konum\n"
+" release konum\n"
+" generate yapılandırma [gruplar]\n"
+" clean yapılandırma\n"
+"\n"
+"apt-ftparchive Debian arşivleri için indeks dosyaları üretir. \n"
+"dpkg-scanpackages ve dpkg-scansources için tamamen otomatikten\n"
+"işlevsel yedeklere kadar birçok üretim çeşidini destekler.\n"
+"\n"
+"apt-ftparchive, .deb dizinlerinden 'Package' dosyaları üretir. 'Package'\n"
+"dosyası, her paketin MD5 doğrulama ve dosya büyüklüğü gibi denetim\n"
+"alanlarının bilgilerini içerir. Öncelik (Priority) ve bölüm (Section)\n"
+"değerlerini istenen başka değerlerle değiştirebilmek için bir geçersiz\n"
+"kılma dosyası kullanılabilir.\n"
+"\n"
+"Benzer şekilde, apt-ftparchive, .dscs dosyalarından 'Sources' dosyaları\n"
+"üretir. '--source-override' seçeneği bir src geçersiz kılma dosyası\n"
+"belirtmek için kullanılabilir.\n"
+"\n"
+"'packages' ve 'sources' komutları dizin ağacının kökünde çalıştırıl-\n"
+"malıdır. BinaryPath özyineli aramanın temeline işaret etmeli ve\n"
+"geçersiz kılma dosyası geçersiz kılma bayraklarını içermelidir.\n"
+"Pathprefix mevcutsa dosya adı alanlarının sonuna eklenir. Debian\n"
+"arşivinden örnek kullanım şu şekildedir:\n"
+"\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Seçenekler:\n"
+" -h Bu yardım metni\n"
+" --md5 MD5 üretimini denetle\n"
+" -s=? Kaynak geçersiz kılma dosyası\n"
+" -q Sessiz\n"
+" -d=? Seçimlik önbellek veritabanını seç\n"
+" --no-delink Bağ kurulmamış hata ayıklama kipini etkinleştir\n"
+" --contents İçerik dosyası üretimini denetle\n"
+" -c=? Belirtilen yapılandırma dosyası kullan\n"
+" -o=? Yapılandırma seçeneği ayarla"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Hiçbir seçim eşleşmedi"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "'%s' paket dosyası grubunda bazı dosyalar eksik"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Veritabanı bozuk, dosya adı %s.old olarak değiştirildi"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Veritabanı eski, %s yükseltilmeye çalışılıyor"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Veritabanı biçimi geçersiz. Eğer apt'ın eski bir sürümünden yükseltme "
+"yaptıysanız, lütfen veritabanını silin ve yeniden oluşturun."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Veritabanı dosyası %s açılamadı: %s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr ".dsc dosyası okunamadı"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Arşivin denetim kaydı yok"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "İmleç alınamıyor"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Bellek ayırma yapılamadı"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Bilinmeyen sıkıştırma algoritması '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Sıkıştırılmış %s çıktısı bir sıkıştırma kümesine ihtiyaç duymaktadır"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Altsürece IPC borusu oluşturulamadı"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "fork yapılamadı"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Çocuğu sıkıştır"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "İç hata, %s oluşturulamadı"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Altsürece/dosyaya GÇ işlemi başarısız oldu"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "MD5 hesaplanırken okunamadı"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "%s açılamıyor"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Hatalı geçersiz kılma %s satır %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Geçersiz kılma dosyası %s okunamadı"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Hatalı geçersiz kılma %s satır %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Hatalı geçersiz kılma %s satır %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Hatalı geçersiz kılma %s satır %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "U: %s dizini okunamıyor\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "U: %s durum bilgisi alınamıyor\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "H: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "U: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "H: Hatalar şu dosya için geçerli: "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "%s çözümlenemedi"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Ağaçta gezinme başarısız"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "%s açılamadı"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** %s, %s konumuna bağlanamadı"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " %sB'lik bağ koparma (DeLink) sınırına ulaşıldı.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Arşivde paket alanı yok"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s için geçersiz kılma girdisi yok\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s geliştiricisi %s, %s değil\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " '%s' paketinin yerine geçecek bir kaynak paket yok\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " '%s' paketinin yerine geçecek bir ikili paket de yok\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Başlıklar bekleniyor"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP sunucusu geçersiz bir cevap başlığı gönderdi"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Kötü başlık satırı"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP sunucusu geçersiz bir Content-Length başlığı gönderdi"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP sunucusu geçersiz bir Content-Range başlığı gönderdi"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "HTTP sunucusunun aralık desteği bozuk"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Bilinmeyen tarih biçimi"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Kötü başlık verisi"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Bağlantı başarısız"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+"Dosya boyutu beklenenden farklı (%llu != %llu). Yansı güncelleme işlemi "
+"devam ediyor olabilir."
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+"Sunucudan/vekilden geçersiz yanıt alındığı için %s seçeneği otomatik olarak "
+"devre dışı bırakıldı. (man 5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "İç hata"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "'cdrom' veritabanı %s okunamıyor"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Lütfen bu CD-ROM'un APT tarafından tanınması için apt-cdrom aracını "
+"kullanın. apt-get update yeni CD-ROM'lar eklemek için kullanılamaz"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Yanlış CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "%s konumundaki CD-ROM çıkarılamıyor, hâlâ kullanımda olabilir."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Disk bulunamadı."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Dosya bulunamadı"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "%s alan adına doğrudan bağlantılar öntanımlı olarak engellenmiştir."
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr "Bağlanıldı %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Bağlanılıyor %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "%s için bir soket oluşturulamadı (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "%s:%s bağlantısı başlatılamıyor (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Başarısız"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Adrese bağlanılamadı: %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Adrese bağlanılamadı: %s:%s (%s), bağlantı zaman aşımına uğradı"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Bağlanılıyor: %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "'%s' çözümlenemedi"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "'%s' çözümlenirken geçici bir sorunla karşılaşıldı"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "'%s:%s' çözümlenirken bir sistem hatası oluştu"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "'%s:%s' (%i - %s) adresi çözümlenirken bir şeyler kötü gitti"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Bağlanılamadı %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Durum bilgisi okunamadı"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Geçersiz URI, yerel URI'ler // ile başlamamalıdır"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Giriş yapılıyor"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Eş adı belirlenemiyor"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Yerel ad belirlenemiyor"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Sunucu bağlantıyı reddetti, sunucunun iletisi: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER başarısız, sunucunun iletisi: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS başarısız, sunucunun iletisi: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Bir Vekil sunucu belirtildi ancak oturum açma betiği belirtilmedi, Acquire::"
+"ftp::ProxyLogin boş."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Oturum açma betiği komutu '%s' başarısız oldu, sunucunun iletisi: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE başarısız, sunucunun iletisi: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Bağlantı zaman aşımına uğradı"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Sunucu bağlantıyı kesti"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Bir yanıt arabelleği taşırdı."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "İletişim kuralları bozulması"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Bir soket oluşturulamadı"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Veri soketine bağlanılamadı, bağlantı zaman aşımına uğradı"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Edilgen sokete bağlanılamadı."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo bir dinleme soketi alamıyor"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Bir sokete bağlanılamadı"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Soket dinlenemedi"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Soketin adı belirlenemedi"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "PORT komutu gönderilemedi"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Bilinmeyen adres ailesi %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT başarısız, sunucunun iletisi: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Veri soketi bağlantısı zaman aşımına uğradı"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Bağlantı kabul edilemiyor"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Dosya sağlaması yapılamadı"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Dosya alınamıyor, sunucunun iletisi: '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Veri soketi zaman aşımına uğradı"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Veri aktarımı başarısız, sunucunun iletisi: '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Sorgu"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Çağrılamıyor "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"İmzalı dosya geçerli değil, '%s' hatası alındı (ağ kimlik doğrulama "
+"gerektiriyor mu?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "En az bir geçersiz imza ile karşılaşıldı."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "İç hata: İmza iyi, ancak anahtar parmak izi belirlenemedi?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr "İmza doğrulama için 'apt-key' çalıştırılamadı (gnupg kurulu mu?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "apt-key çalıştırılırken bilinmeyen hata"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "%s anahtarının imzası zayıf bir özet algoritması kullanıyor (%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Aşağıdaki imzalar geçersiz:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "Aşağıdaki imzalar doğrulanamadı, çünkü genel anahtar mevcut değil:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Dosyaya yazılamadı"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Sunucudan okunurken hata oluştu. Uzak uç bağlantıyı kapattı"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Sunucudan okunurken hata"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Dosyaya yazılamadı"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Seçme başarısız"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Bağlantı zaman aşımına uğradı"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Çıktı dosyasına yazılırken hata"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Değişiklik zamanı ayarlanamadı"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Bağlantı vaktinden önce kapandı"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Boş dosyalar geçerli birer arşiv dosyası olamazlar"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Geçersiz arşiv üyesi başlığı %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "%s kaldırıldı"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "%s paket dosyası eş zamanlı değil."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr "Paket indeks dosyaları bozuk. %s paketinin 'Filename:' alanı yok."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "'%s' yansı dosyası bulunamadı "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Yansı dosyası %s okunamıyor"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "'%s' yansı dosyasında hiç girdi bulunmuyor"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Yansı: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Yapılandırma dosyası (%s) açılıyor"
+
+#~ msgid "Opening %s"
+#~ msgstr "%s Açılıyor"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "'Release' dosyasında olması beklenilen '%s' girdisi bulunamadı (sources."
+#~ "list dosyasındaki girdi ya da satır hatalı)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Karşılanmayan bağımlılıklar. --fix-broken kullanmayı deneyin."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Bunları düzeltmek için 'apt --fix-broken install' komutunu çalıştırmanız "
+#~ "gerekebilir:"
+
+#~ msgid "(not found)"
+#~ msgstr "(bulunamadı)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Paket sabitleme: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr ""
+#~ "Aşağıdaki anahtar kimlikleri için kullanılır hiçbir genel anahtar yok:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "'%s' deposu imzalanmamış"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "'%4$s' paketlerinde %3$s paketine izin verilmediği için %2$s kaynağının "
+#~ "%1$s bağımlılığı karşılanamıyor"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "%2$s için %1$s bağımlılığı, %3$s paketi bulunamadığı için karşılanamadı"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "%2$s için %1$s bağımlılığı karşılanamadı: Kurulu %3$s paketi çok yeni"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "%2$s için %1$s bağımlılığı sağlanamıyor, çünkü %3$s paketinin aday sürümü "
+#~ "gerekli sürüm şartlarını karşılamıyor"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "%2$s için %1$s bağımlılığı sağlanamıyor, çünkü %3$s paketinin aday sürümü "
+#~ "yok"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "%2$s için %1$s bağımlılığı karşılanamadı: %3$s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "%s için inşa bağımlılıkları karşılanamadı."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "%s bağı koparılırken sorun çıktı"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "%s bağı koparılamadı"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Kullanım: apt-cache [seçenekler] komut\n"
+#~ " apt-cache [seçenekler] show paket1 [paket2 ...]\n"
+#~ "\n"
+#~ "apt-cache APT'nin ikili paket önbelleğindeki dosyaları\n"
+#~ "sorgulamakta kullanılan alt seviye bir araçtır.\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Komutlar:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Options:\n"
+#~ " -h Bu yardım metni.\n"
+#~ " -p=? Paket önbelleği.\n"
+#~ " -s=? Kaynak önbelleği.\n"
+#~ " -q İlerleme göstergesini kapat.\n"
+#~ " -i unmet komutunda sadece önemli bağımlılıkları görüntüle.\n"
+#~ " -c=? Belirtilen yapılandırma dosyasını kullan\n"
+#~ " -o=? Herhangi bir yapılandırma seçeneğini ayarla, örneğin -o dir::"
+#~ "cache=/tmp\n"
+#~ "Ayrıntılı bilgi için apt-cache(8) ve apt.conf(5) rehber sayfalarına göz "
+#~ "atın.\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Kullanım: apt [seçenekler] komut\n"
+#~ "\n"
+#~ "apt için komut satırı arayüzü.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Seçenekler:\n"
+#~ " -h Bu yardım metni.\n"
+#~ " -q Günlük tutmaya uygun çıktı - İlerleme göstergesi yok\n"
+#~ " -qq Hata olmadığı müddetçe çıktıya bir şey yazma\n"
+#~ " -s Bir şey yapma. Sadece ne yapılacağını söyler.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Belirtilen yapılandırma dosyası kullan\n"
+#~ " -o=? Yapılandırma seçeneği ayarla, örneğin -o dir::cache=/tmp\n"
+#~ "Ayrıntılı bilgi için apt-mark(8) ve apt.conf(5) rehber sayfalarına\n"
+#~ "bakabilirsiniz."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Seçenekler:\n"
+#~ " -h Bu yardım dosyası.\n"
+#~ " -c=? Belirtilen ayar dosyasını görüntüler\n"
+#~ " -o=? İsteğe bağlı ayar seçeneği belirtmenizi sağlar, örneğin -o dir::"
+#~ "cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Seçenekler:\n"
+#~ " -h Bu yardım metni.\n"
+#~ " -q Günlük tutmaya uygun çıktı - İlerleme göstergesi yok\n"
+#~ " -qq Hata olmadığı müddetçe çıktıya bir şey yazma\n"
+#~ " -s Bir şey yapma. Sadece ne yapılacağını söyler.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Belirtilen yapılandırma dosyası kullan\n"
+#~ " -o=? Yapılandırma seçeneği ayarla, örneğin -o dir::cache=/tmp\n"
+#~ "Ayrıntılı bilgi için apt-mark(8) ve apt.conf(5) rehber sayfalarına\n"
+#~ "bakabilirsiniz."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Kullanım: apt-sortpkgs [seçenekler] dosya1 [dosya2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs, paket dosyalarını sıralayan basit bir araçtır.\n"
+#~ "-s seçeneği ne tür bir dosya olduğunu göstermekte kullanılır.\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -h Bu yardım metni\n"
+#~ " -s Kaynak dosyası sıralamayı kullan\n"
+#~ " -c=? Belirtilen yapılandırma dosyasını oku\n"
+#~ " -o=? Herhangi bir yapılandırma seçeneği ayarla, örneğin -o dir::cache=/"
+#~ "tmp\n"
+
+#~ msgid "Use --allow-insecure-repositories to force the update"
+#~ msgstr ""
+#~ "Buna rağmen güncellemeyi yapmak için --allow-insecure-repositories "
+#~ "seçeneğini kullanın"
+
+#~ msgid ""
+#~ "The data from '%s' is not signed. Packages from that repository can not "
+#~ "be authenticated."
+#~ msgstr ""
+#~ "'%s' deposundan alınan veri imzalanmamış. Bu depodan gelen paketlerin "
+#~ "aslına uygunluğu denetlenemeyecek."
+
+#~ msgid ""
+#~ "The repository '%s' does not have a Release file. This is deprecated, "
+#~ "please contact the owner of the repository."
+#~ msgstr ""
+#~ "'%s' deposunun Release dosyası yok. Bu tür depolar gelecekte kullanımdan "
+#~ "kaldırılacaktır, lütfen depo sahibiyle iletişime geçin."
+
+#~ msgid "Child process failed"
+#~ msgstr "Alt süreç başarısız"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "En az bir adet url/dosya-adı çifti belirtilmelidir"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Boru oluşturulamadı"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Gzip çalıştırılamadı "
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Toplam bağımlılık sürümü alanı: "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s (%s için) %s %s tarihinde derlendi\n"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "%s üzerinde yeterli boş alan yok"
+
+#~ msgid "Done"
+#~ msgstr "Bitti"
+
+#~ msgid "Hit "
+#~ msgstr "Bağlandı "
+
+#~ msgid "Get:"
+#~ msgstr "Alınıyor: "
+
+#~ msgid "Ign "
+#~ msgstr "Yoksay "
+
+#~ msgid "Err "
+#~ msgstr "Hata "
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$u numaralı girdisi hatalı (URI ayrıştırma)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı ([seçenek] "
+#~ "ayrıştırılamıyor)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı ([seçenek] çok kısa)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı ([%3$s] bir atama "
+#~ "değil)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı ([%3$s] seçeneğinin "
+#~ "anahtarı yok)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı ([%3$s] %4$s "
+#~ "anahtarına değer atanmamış)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı (URI ayrıştırma)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı (mutlak dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr ""
+#~ "Kaynak listesinin (%2$s) %1$lu numaralı satırı hatalı (dağıtım ayrıştırma)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Dosya bağımlılıkları işlenirken %s %s paketi bulunamadı"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Kaynak listesinin (%s) dosya bilgisi alınamadı"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Dosya Sağlananları Toplanıyor"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "'Release' dosyasında '%s' için uygun bir sağlama toplamı bulunamadı"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Sağlayıcı bloğu %s parmak izi içermiyor"
+
+#~ msgid "Unable to parse package file %s (2)"
+#~ msgstr "Paket dosyası %s ayrıştırılamadı (2)"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "%s dizininde kurulu bir anahtar yok."
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "DOSYA* oluşturulamadı"
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "stdout bir uçbirim mi?"
+
+#~ msgid "ioctl(TIOCGWINSZ) failed"
+#~ msgstr "ioctl(TIOCGWINSZ) başarısız oldu"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "İç hata, AllUpgrade bazı şeyleri bozdu"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s geçerli bir DEB paketi değil."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "CD-ROM bağlama noktası %s kullanılıyor\n"
+#~ "CD-ROM bağlanıyor\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s mmap ve dosya işlem kullanımı ile yamalanamadı - yama bozuk gibi "
+#~ "duruyor."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "%s mmap ile yamalanamadı (mmap'e özel bir hata değil) - yama bozuk gibi "
+#~ "duruyor."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Mevcut olmayan hedef '%s' sürüm '%s' paketini ihmal et"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "İndiriliyor %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Bu dosya geçerli bir DEB arşivi değil, '%s', '%s' ya da '%s' üyesi yok"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5 toplamı eşleşmiyor"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "%s paketindeki dosyalardan biri konumlandırılamadı. Bu durum, bu paketi "
+#~ "elle düzeltmeniz gerektiği anlamına gelebilir."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Günlük yazılamadı, openpty() başarısız oldu (/dev/pts bağlanmadı mı?)\n"
+
+#~ msgid "File %s doesn't start with a clearsigned message"
+#~ msgstr "%s dosyası açıkimzalı bir iletiyle başlamıyor"
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..0516efa
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,4498 @@
+# translation of apt-all.po to Українська
+# This file is put in the public domain.
+#
+# A. Bondarenko <artem.brz@gmail.com>, 2006, 2012.
+# неможливо + не вдалося
+# parse на аналізувати
+# Release
+# вихідні тексти
+# y/n замість т/н
+# binary = двійковий
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.5\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2012-09-25 20:19+0300\n"
+"Last-Translator: A. Bondarenko <artem.brz@gmail.com>\n"
+"Language-Team: Українська <uk@li.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.1\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Невірний підпис архіву"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Неможливо прочитати заголовок 'member' в архіві"
+
+#: apt-inst/contrib/arfile.cc
+#, fuzzy
+msgid "Invalid archive member header"
+msgstr "Невірний заголовок 'member' в архіві"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Архів занадто малий"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Не вдалося прочитати заголовки в архіві"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Неможливо знайти аутентифікаційний запис для: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Пошкоджений архів"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Контрольна сума tar архіва невірна, архів пошкоджений"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Невідомий тип заголовку TAR - %u, член %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Невірний DEB архів, відсутній член '%s'"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Внутрішня помилка, не можу знайти складову частину %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Контрольний файл не можливо обробити"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Не вдалося записати файл %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Не вдалося закрити файл %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Шлях %s занадто довгий"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Розпакування %s більш ніж один раз"
+
+#: apt-inst/extract.cc
+#, fuzzy, c-format
+msgid "The directory %s is diverted"
+msgstr "Директорія %s є відхиленою (diverted)"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Пакунок пробує записати у ціль з diversion %s/%s"
+
+#: apt-inst/extract.cc
+#, fuzzy
+msgid "The diversion path is too long"
+msgstr "Шлях 'diversion' є занадто довгим"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Не вдалося одержати атрибути %s"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Не вдалося перейменувати %s на %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Директорія %s замінюється не директорією"
+
+#: apt-inst/extract.cc
+#, fuzzy
+msgid "Failed to locate node in its hash bucket"
+msgstr "Не вдалося знайти вузол у його наборі хешів"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Шлях занадто довгий"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Перезаписати відповідність пакунка без версії для %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Файл %s/%s перезаписує інший файл в пакунку %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Неможливо прочитати %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Неможливо прочитати атрибути %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode було викликано для вузла, що ще використовувався"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Не вдалося знайти елемент хеша!"
+
+#: apt-inst/filelist.cc
+#, fuzzy
+msgid "Failed to allocate diversion"
+msgstr "Не вдалося створити diversion"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Внутрішня помилка в AddDiversion"
+
+#: apt-inst/filelist.cc
+#, fuzzy, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Спроба перезапису diversion, %s -> %s і %s/%s"
+
+#: apt-inst/filelist.cc
+#, fuzzy, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Подвійне додавання diversion %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Копія конфігураційного файлу %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Директорія %s є відхиленою (diverted)"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Директорія %s є відхиленою (diverted)"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Директорія %s є відхиленою (diverted)"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Директорія %s є відхиленою (diverted)"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Директорія %s є відхиленою (diverted)"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Не вдалося прочитати посилання (readlink) %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Невідповідність хешу MD5Sum"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "не вдалося перейменувати, %s (%s -> %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Невідповідність розміру"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "Невірна дія %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Помилка запису"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Виникла помилка під час перевірки підпису. Репозиторій не оновлено, "
+"попередні індексні файли будуть використані. Помилка GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Помилка GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Файл 'Release' для %s застарів (недійсний з %s). Оновлення для цього "
+"репозиторія не будуть застосовані."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Файл 'Release' для %s застарів (недійсний з %s). Оновлення для цього "
+"репозиторія не будуть застосовані."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Конфліктуючий дистрибутив: %s (очікувався %s, але є %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Не вдалося завантажити %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Я не зміг знайти файл для пакунку %s. Можливо, це значить, що вам потрібно "
+"власноруч виправити цей пакунок. (через відсутність 'arch')"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Неможливо знайти джерело для завантаження версії '%s' для '%s'"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Журнал змін для %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Драйвер для метода %s не знайдено."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "Перевірте, чи встановлений пакунок 'dpkg-dev'.\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Метод %s стартував некоректно"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr ""
+"Будь-ласка, вставте диск з поміткою: '%s' в привід '%s' і натисніть Enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Відсутня директорія зі списками: %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Відсутня директорія для архівів: %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Неможливо заблокувати директорію %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "Тип '%s' індексного файлу не підтримується"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Завантажується файл %li з %li (залишилось %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Завантажується файл %li з %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Пакунок %s повинен бути перевстановленим, але я не можу знайти його архів."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Помилка, pkgProblemResolver::Resolve згенерував зупинку, це може бути "
+"пов'язано з зафіксованими пакунками."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Неможливо усунути проблеми, ви маєте поламані зафіксовані пакунки."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Не можу обробити чи відкрити перелік пакунків чи статусний файл."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "Для виправлення цих помилок Ви можете виконати apt-get update"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Неможливо прочитати перелік вихідних кодів."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Помилка компіляції регулярного виразу - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Випуск '%s' для '%s' не знайдено"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Версія '%s' для '%s' не знайдена"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Неможливо знайти завдання '%s'"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Неможливо знайти ніякий пакунок через рег.вираз '%s'"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Неможливо знайти ніякий пакунок через рег.вираз '%s'"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Не можу знайти пакунок %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Неможливо вибирати версії пакунку '%s', так як він є чисто віртуальним"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+"Неможливо вибрати найновішу версію пакунку '%s', так як він є чисто "
+"віртуальним"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "Неможливо вибрати версію пакунку %s, так як він не має кандидатів"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Неможливо вибрати встановлену версію пакунку %s, так як такий пакунок не "
+"встановлено"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Неможливо вибрати встановлений пакунок, або версію-кандидат пакунку '%s', "
+"так як вони відсутні"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Рядок %u є занадто довгим у переліку джерел %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Демонтується CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Використовується точка монтування CD-ROM: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Чекаю на диск...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Монтується CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Ідентифікація... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Записано мітку: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Сканується диск на вміст індексних файлів...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Знайдено %zu індексів пакунків, %zu індексів вихідних текстів, %zu індексів "
+"перекладів і %zu підписів\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Неможливо знайти ніякі файли пакунків, можливо, що це не диск з Debian, або "
+"невірна архітектура?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Знайдено мітку: '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Не є вірною назвою, спробуйте ще.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Цей диск зветься: \n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Копіюються переліки пакунків..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Записується новий перелік вихідних текстів\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Перелік вихідних текстів для цього диска:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Неможливо змінити на %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Неможливо прочитати атрибути %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Неможливо прочитати атрибути точки монтування %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Не вдалося прочитати атрибути cdrom"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Невідомий параметр командного рядка '%c' [з %s]."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Незрозумілий параметр %s командного рядка"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Параметр %s командного рядка не є логічного типу 'boolean'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Параметр %s потребує аргумента."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr ""
+"Опція %s: Специфікація вимагає, щоб рядки у конфігурації мали вираз =<val>."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Параметр %s потребує цілочислений аргумент, але не '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Параметр '%s' є занадто довгим"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Незрозумілий вираз %s, спробуйте true чи false."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Невірна дія %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Нерозпізнаваний тип абревіатури: '%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Синтаксична помилка %s:%u: Блок починається без назви."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Синтаксична помилка %s:%u: спотворений тег"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Синтаксична помилка %s:%u: зайві символи після величини"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr ""
+"Синтаксична помилка %s:%u: Директиви можуть бути виконані тільки на "
+"найвищому рівні"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Синтаксична помилка %s:%u: Забагато вмонтованих (nested) включень"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Синтаксична помилка %s:%u: Включено звідси"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Синтаксична помилка %s:%u: Директива '%s' не підтримується"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Синтаксична помилка %s:%u: 'clear directive' потребує дерево налаштувань як "
+"аргумент"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Синтаксична помилка %s:%u: Зайве сміття в кінці файла"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Проблема з роз'єднанням файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr ""
+"Блокування не використовується, так як файл блокування %s доступний тільки "
+"для зчитування"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Неможливо відкрити 'lock' файл %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr ""
+"Блокування не використовується, так як файл блокування %s знаходиться на "
+"файловій системі nfs"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Неможливо отримати замок %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "Неможливо створити перелік файлів, так як '%s' не є директорією"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Ігнорується '%s' у директорії '%s', так як не є звичайним файлом"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "Ігнорується файл '%s' у директорії '%s', так як він не має розширення"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Ігнорується файл '%s' у директорії '%s', так як він має невірне розширення"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Очікував на %s, але його там не було"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Підпроцес %s отримав 'segmentation fault' (фатальна помилка)."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Підпроцес %s отримав сигнал %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Підпроцес %s повернув код помилки (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Підпроцес %s раптово завершився"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Помилка зчитування"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Помилка запису"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Проблема з закриттям gzip файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Не вдалося створити IPC з породженим процесом"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Не вдалося виконати компресор "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Неможливо відкрити файл %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Неможливо відкрити файловий дескриптор %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "зчитування, повинен зчитати ще %llu байт, але нічого більше нема"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "записування, повинен був записати ще %llu байт, але не вдалося"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Проблема з закриттям файла %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Проблема з перейменуванням файла %s на %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Проблема з синхронізацією файла"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Неможливо прочитати атрибути %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Неможливо записати в %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Неможливо відобразити в пам'яті (mmap) пустий файл"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Неможливо зробити mmap для %llu байт"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Неможливо створити копію файлового дескриптора %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Не вдалося закрити mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Не вдалося синхронізувати mmap"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Неможливо відобразити в пам'яті %lu байт"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Не вдалося обрізати файл"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Динамічний MMap використав усе місце. Будь-ласка, збільшіть розмір APT::"
+"Cache-Start. Поточне значення: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+"Неможливо збільшити розмір MMap, так як обмеження в %lu байт вже досягнуто."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Неможливо збільшити розмір MMap, так як автоматичне збільшення вимкнено "
+"користувачем."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Помилка!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Виконано"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... Виконано"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%liд %liг %liхв %liс"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%liг %liхв %liс"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%liхв %liс"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%liс"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Вибір %s не знайдено"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Неможливо проаналізувати 'Release' файл %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Немає секцій у 'Release' файлі %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Немає запису 'Hash' у 'Release' файлі %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "Невірний запис '%s' у 'Release' файлі %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Неможливо проаналізувати файл пакунку %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Неможливо заблокувати адміністративну директорію (%s), може її використовує "
+"інший процес?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Неможливо заблокувати адміністративну директорію (%s), ви root?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg було перервано, ви повинні вручну запустити '%s' аби виправити "
+"проблему. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Неможливо заблокувати адміністративну директорію (%s), може її використовує "
+"інший процес?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Неможливо заблокувати адміністративну директорію (%s), ви root?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Не заблоковано"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Підготовка %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Підготовка до конфігурації %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Підготовка до видалення %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Підготовка до повного видалення %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Взято до відома зникнення %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Виконується післяустановочний ініціатор %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Встановлено %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Налаштовується %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Директорія '%s' відсутня"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Неможливо відкрити файл '%s'"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Розпакування %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Встановлюється %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Видаляється %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Повністю видаляється %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Повністю видалено %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "Неможливо записати в %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Операцію було перервано до того, як вона мала завершитися"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Звіт apport не був записаний, тому що параметр MaxReports вже досягнув "
+"максимальної величини"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "проблеми з залежностями - залишено неналаштованим"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Звіт apport не був записаний, тому що повідомлення про помилку вказує на те, "
+"що ця помилка є наслідком попередньої невдачі."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Звіт apport не був записаний, тому що повідомлення про помилку вказує на "
+"відсутність вільного місця на диску"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Звіт apport не був записаний, тому що повідомлення про помилку вказує на "
+"відсутність вільного місця у пам'яті"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Звіт apport не був записаний, тому що повідомлення про помилку вказує на "
+"відсутність вільного місця на диску"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Звіт apport не був записаний, тому що повідомлення про помилку вказує на "
+"помилку В/В (I/O) у dpkg"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Побудова дерева залежностей"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Версії кандидатів"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Ґенерація залежностей"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Зчитування інформації про стан"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Не вдалося відкрити StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Не вдалося записати до тимчасового StateFile файла %s"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to solver"
+msgstr "Відправити сценарій розв'язувачу"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to solver"
+msgstr "Відправити запит розв'язувачу"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Prepare for receiving solution"
+msgstr "Пригодуватися до отримання розв'язку"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+"Зовнішній розв'язувач завершився невдало без відповідного повідомлення про "
+"помилку"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external solver"
+msgstr "Виконати зовнішній розв'язувач"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Виконати зовнішній розв'язувач"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Відправити запит розв'язувачу"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Відправити сценарій розв'язувачу"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr ""
+"Зовнішній розв'язувач завершився невдало без відповідного повідомлення про "
+"помилку"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Записано %i записів.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Записано %i записів з %i відсутніми файлами.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Записано %i записів з %i невідповідними файлам\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "Записано %i записів з %i відсутніми і %i невідповідними файлами\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Неможливо знайти аутентифікаційний запис для: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Невідповідність хешу для: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Система пакування '%s' не підтримується"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Неможливо визначити тип необхідної системи пакування"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Виконується dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Неможливо прямо налаштувати конфігурацію на '%s'. Будь-ласка, дивіться man 5 "
+"apt.conf, нижче APT::Immediate-Configure для деталей. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Неможливо налаштувати '%s'."
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Для виконання даного встановлення потрібне тимчасове видалення важливого "
+"пакунку %s через петлеві конфлікти/пре-залежності (Pre-Depends loop). Це "
+"погано, але якщо Ви дійсно бажаєте зробити це, активуйте параметр APT::Force-"
+"LoopBreak."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Кеш пакунків пустий"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Файл кешу пакунків пошкоджений"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Файл кешу пакунків має несумісну версію"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Цей APT не підтримує систему призначення версій '%s'"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Кеш пакунків був побудований для іншої архітектури"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Файл кешу пакунків пошкоджений, занадто малий"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Залежності (Depends)"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Пре-Залежності (PreDepends)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Пропонує (Suggests)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Конфлікти (Conflicts)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Рекомендує (Recommends)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Заміняє (Replaces)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Ламає (Breaks)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Покращує (Enhances)"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Застарілі (Obsoletes)"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "важливі (important)"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "необхідні (required)"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "стандартні (standard)"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "додаткові (extra)"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "необов'язкові (optional)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Кеш має несумісну систему призначення версій"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Виникла помилка під час обробки %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Ого! Ви перевищили кількість імен пакунків, які APT може обробити."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Ого! Ви перевищили кількість версій, які APT може обробити."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Ого! Ви перевищили кількість описів, які APT може обробити."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Ого! Ви перевищили кількість залежностей, які APT може обробити."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Зчитування переліків пакунків"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Помилка IO під час збереження кешу вихідних текстів"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Тип '%s' індексного файлу не підтримується"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Невірне значення '%s' для APT::Default-Release, так як такий випуск не є "
+"доступним у вихідних кодах"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "Невірний запис у файлі налаштувань %s, відсутній заголовок Package"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Не зрозумів тип %s для фіксатора пакунків (pin)"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Не встановлено пріоритету (або стоїть 0) для фіксатора пакунків (pin)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Спотворений запис про перепризначення (override) %s на рядку %llu #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Спотворений рядок %u у переліку джерел %s (тип)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Невідомий тип '%s' на рядку %u в переліку джерел %s"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Спотворений рядок %u у переліку джерел %s (тип)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Невідомий тип '%s' на рядку %u в переліку джерел %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "Додайте деякі посилання (URI) на вихідні тексти у ваш sources.list"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Деякі індексні файли не вдалося завантажити. Вони були зігноровані, або "
+"замість них були використані старіші версії."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Обчислення оновлень"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "В кеші:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Отр:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Ігн:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Пом:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Отримано %sB за %sB (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Йде робота]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Зміна носія: вставте диск з міткою\n"
+" '%s'\n"
+"у пристрій '%s' і натисніть Enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Виправлення залежностей..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " невдача."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Неможливо скоригувати залежності"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Неможливо мінімізувати набір оновлень"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Виконано"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr ""
+"Для виправлення цих помилок ви можете скористатися 'apt --fix-broken "
+"install'."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Незадоволені залежності. Спробуйте виконати 'apt --fix-broken install', не "
+"вказуючи назв пакунків (або вкажіть рішення)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Помітьте, вибирається '%s' для завдання '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Помітьте, вибирається '%s' для регулярного виразу '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Помітьте, вибирається '%s' для регулярного виразу '%s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Пакунок %s - віртуальний, його функції надаються пакунками:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr " [Встановлено]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Версія не кандидат]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Ви повинні явно вказати, який саме ви хочете встановити."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Пакунок %s недоступний, але згадується у переліку залежностей іншого "
+"пакунка.\n"
+"Це може означати, що пакунок відсутній, застарів, або доступний з джерел, не "
+"згаданих в sources.list\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Однак наступні пакунки заміняють його:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Для пакунка '%s' не знайдено кандидатів на встановлення"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Віртуальні пакунки як '%s' не можуть бути видаленими\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr ""
+"Пакунок '%s' не встановлений, тому не видалений. Можливо ви мали на увазі "
+"'%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Пакунок '%s' не встановлений, тому не видалений\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Помітьте, вибирається '%s' замість '%s'\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Цей APT має Супер-Коров'ячу Силу."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Не знайдено жодного пакунка"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "УВАГА: Наступні пакунки неможливо автентифікувати!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Автентифікаційне попередження не прийнято до уваги.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Деякі пакунки неможливо автентифікувати"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Встановити ці пакунки без перевірки?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Виявлено проблеми, а опція -y була використана без --force-yes"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Не вдалося визначити кількість вільного місця в %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Недостатньо вільного місця в %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Неможливо заблокувати директорію для завантаження"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Деякі пакунки неможливо встановити. Можливо, Ви просите неможливого,\n"
+"або ж використовуєте нестабільний дистрибутив, і запитані Вами пакунки\n"
+"ще не створені або були вилучені з Incoming."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Наступна інформація можливо допоможе Вам виправити ситуацію:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Зламані пакунки"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Неможливо завантажити деякі архіви, імовірно треба виконати apt-get update "
+"або спробувати повторити запуск з ключем --fix-missing?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+"Внутрішня помилка, InstallPackages була викликана з непрацездатними "
+"пакунками!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "Необхідно видалити пакунки, але видалення заборонене."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Виявлено проблеми, а опція -y була використана без --force-yes"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Виявлено проблеми, а опція -y була використана без --force-yes"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Внутрішня помилка, Ordering не завершилася"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "Дивно... Розбіжність розмірів, напишіть на apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Необхідно завантажити %sB/%sB архівів.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Необхідно завантажити %sB архівів.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr ""
+"Після цієї операції об'єм зайнятого дискового простору зросте на %sB.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr ""
+"Після цієї операції об'єм зайнятого дискового простору зменшиться на %sB.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"Вказано виконання тільки тривіальних операцій, але це не тривіальна операція."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Так, робити, як я скажу!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Те, що ви хочете зробити, може мати небажані наслідки.\n"
+"Щоб продовжити, введіть фразу: '%s'\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Перервано."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Бажаєте продовжити?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Деякі файли не вдалося завантажити"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Завантаження завершено в режимі \"тільки завантаження\""
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "--fix-missing і зміна носія в даний момент не підтримується"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Неможливо виправити втрачені пакунки."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Переривається встановлення."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Вказаний пакунок зник з вашої системи, так як\n"
+"усі файли були перезаписані іншими пакунками:"
+msgstr[1] ""
+"Вказані пакунки зникли з вашої системи, так як\n"
+"усі файли були перезаписані іншими пакунками:"
+msgstr[2] ""
+"Вказані пакунки зникли з вашої системи, так як\n"
+"усі файли були перезаписані іншими пакунками:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Увага: це зроблено автоматично і умисно dpkg'ем."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Нам не дозволено видаляти, неможливо запустити AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Хм, виглядає так, що AutoRemover помилково знищив щось потрібне.\n"
+"Будь-ласка відправте багрепорт щодо apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Внутрішня Помилка, AutoRemover щось поламав"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"Наступний пакунок був встановлений автоматично і більше не потрібен:"
+msgstr[1] "Наступні пакунки були встановлені автоматично і більше не потрібні:"
+msgstr[2] "Наступні пакунки були встановлені автоматично і більше не потрібні:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu пакунок був встановлений автоматично і більше не потрібен.\n"
+msgstr[1] ""
+"%lu пакунка було встановлено автоматично і вони більше не потрібні.\n"
+msgstr[2] ""
+"%lu пакунків було встановлено автоматично і вони більше не потрібні.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Використовуйте '%s' щоб видалити його."
+msgstr[1] "Використовуйте '%s' щоб видалити їх."
+msgstr[2] "Використовуйте '%s' щоб видалити їх."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Будуть встановлені наступні додаткові пакунки:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Пропоновані пакунки:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Рекомендовані пакунки:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr ""
+"Пропускається %s, пакунок вже встановлений і опція ОНОВИТИ не встановлена.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Пропускається %s, пакунок не встановлений, а запитуються тільки оновлення.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Перевстановлення %s неможливе, бо він не може бути завантаженим.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "Вже встановлена найновіша версія %s.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s позначений як встановлений вручну.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Обрана версія '%s' (%s) для '%s'\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Обрана версія '%s' (%s) для '%s' через '%s'\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"УВАГА: Це тільки симуляція!\n"
+" %s потребує права root для реального запуску.\n"
+" Також не забувайте, що блокування вимикається,\n"
+" тому не очікуйте на відповідність поточній реальній ситуації!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr " [Встановлено]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr " [Встановлено]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr " [Встановлено]"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr " [Встановлено]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "але %s вже встановлений"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "але %s буде встановлений"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "але він не може бути встановлений"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "але це віртуальний пакунок"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "але він не буде встановлений"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "але він не встановлений"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " чи"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Пакунки, що мають незадоволені залежності:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "НОВІ пакунки, які будуть встановлені:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Пакунки, які будуть ВИДАЛЕНІ:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Пакунки, які залишені в незмінному стані:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Пакунки, які будуть ОНОВЛЕНІ:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Пакунки, які будуть замінені на СТАРІШІ версії:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Пакунки, які мали б залишитися без змін, але будуть замінені:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (внаслідок %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"УВАГА: Наступні важливі пакунки будуть вилучені.\n"
+"НЕ РОБІТЬ цього, якщо ви НЕ уявляєте собі всі можливі наслідки!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "оновлено %lu, встановлено %lu нових, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu перевстановлено, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu замінено на старіші версії, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu відмічено для видалення і %lu не оновлено.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "не встановлено(видалено) до кінця %lu пакунків.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Ви повинні задати не менше одного шаблону пошуку"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Переліки пакунків:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "Кеш не синхронізований, неможливо знайти посилання на перелік пакунків"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Зафіксовані пакунки:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Встановлено: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Кандидат: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(відсутній)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Таблиця версій:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Неможливо знайти ніякий пакунок через рег.вираз '%s'"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Неможливо знайти ніякий пакунок через рег.вираз '%s'"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Неможливо знайти ніякий пакунок через рег.вираз '%s'"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Обираю '%s' як пакунок вихідних текстів, замість '%s'\n"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Ігнорувати недоступну версію '%s' пакунку '%s'"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr ""
+"Вкажіть як мінімум один пакунок, для якого необхідно завантажити вихідні "
+"тексти"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Неможливо знайти пакунок з вихідними текстами для %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"УВАГА: Пакування '%s' відбувається в системі контролю версій '%s' на:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Будь-ласка використовуйте:\n"
+"%s\n"
+"щоб отримати найновіші (потенційно не випущені) оновлення до пакунку.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Пропускаємо вже завантажений файл '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Необхідно завантажити %sB/%sB з архівів вихідних текстів.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Потрібно завантажити %sB архівів з вихідними текстами.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Завантаження вихідних текстів %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Деякі архіви не вдалося завантажити."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr ""
+"Пропускається розпакування вихідних текстів, тому що вже розпаковано в %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Команда розпакування '%s' завершилася невдало.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Перевірте, чи встановлений пакунок 'dpkg-dev'.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Команда побудови '%s' закінчилася невдало.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Неможливо одержати інформацію про залежності для побудови %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s не має залежностей для побудови.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Відсутня інформація про архітектуру для %s. Дивись apt.conf(5) APT::"
+"Архітектури для налащтування"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Для перевірки залежностей для побудови необхідно вказати як мінімум один "
+"пакунок"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Обробка залежностей для побудови закінчилася невдало"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Обробка залежностей для побудови закінчилася невдало"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Не вдалося перейменувати %s на %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Пакунок %s версії %s має незадоволену залежність:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Команді update не потрібні аргументи"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Команді update не потрібні аргументи"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Всього імен пакунків: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Всього структур пакунків: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Нормальних пакунків: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Цілком віртуальних пакунків: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Окремих віртуальних пакунків: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Змішаних віртуальних пакунків: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Відсутні: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Всього унікальних версій: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Всього унікальних описів: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Всього залежностей: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Всього відносин Версія/Файл: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Всього відносин Опис/Файл: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total Provides mappings: "
+msgstr "Всього карт 'Provides': "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Всього відфільтрованих (globbed) рядків: "
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total slack space: "
+msgstr "Порожнього місця в кеші: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Загальний простір полічений для: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "Ця команда є застарілою. Будь-ласка використовуйте 'apt-mark showauto'"
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "показати інформацію про вихідний текст (source)"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "знайти пакунки, назва яких задовольняє регулярний вираз"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "показати інформацію про залежності пакунка"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "показати інформацію про зворотні залежності пакунка"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "показати інформацію про пакунок в зрозумілій формі"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "показати імена всіх пакунків у системі"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "показати поточну політику"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Задайте назву для цього Диска, наприклад 'Debian 5.0.3 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Будь-ласка, вставте Диск у пристрій і натисніть Enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Не вдалося під'єднати '%s' до '%s'"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Повторіть цей процес для решти CD з вашого набору."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Аргументи не в парах"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Використання: apt-config [опції] команда\n"
+"\n"
+"apt-config - простий інструмент для зчитування конфігураційного файла APT\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Використання: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates витягує з пакунків Debian конфігураційні скрипти\n"
+"і файли-шаблони\n"
+"\n"
+"Опції:\n"
+" -h Цей текст\n"
+" -t Встановити директорію для тимчасових файлів\n"
+" -c=? Читати зазначений конфігураційний файл\n"
+" -o=? Вказати довільну опцію, наприклад, -o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Неможливо визначити версію debconf. Він встановлений?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Не можу знайти пакунок %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s позначений як автоматично встановлений.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Ця команда застаріла. Будь-ласка, використовуйте замість неї 'apt-mark auto' "
+"і 'apt-mark manual'."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Внутрішня помилка, вирішувач проблем щось поламав"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Підтримувані модулі:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Використання: apt-get [опції] команда\n"
+" apt-get [опції] install|remove пакунок1 [пкн2 ...]\n"
+" apt-get [опції] source пакунок1 [пкн2 ...]\n"
+"\n"
+"apt-get - простий інтерфейс командного рядка для завантаження й\n"
+"встановлення пакунків. Найбільш часто використовувані команди - update\n"
+"і install.\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "завантажити нові переліки пакунків"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "виконати оновлення пакунків"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+"встановити нові пакунки (назва пакунка вказується як libc6, а не libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr ""
+"встановити нові пакунки (назва пакунка вказується як libc6, а не libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "видалити пакунки"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "видалити пакунки разом з іхніми конфігураційними файлами"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "видалити автоматично усі пакунки, що не використовуються"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "оновити всю систему, докладніше в apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "керуватися вибором, зробленим у dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr ""
+"завантажити все необхідне для побудови зазначеного пакунку з вихідних текстів"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "видалити завантажені архіви"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "видалити старі завантажені архіви"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "перевірити наявність порушених залежностей"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "завантажити архіви з вихідними текстами"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "завантажити двійковий пакунок у поточну директорію"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "завантажити і показати журнал змін для визначеного пакунку"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr ""
+"Вкажіть як мінімум один пакунок, для якого необхідно завантажити вихідні "
+"тексти"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Використання: apt-internal-solver\n"
+"\n"
+"apt-internal-solver це інтерфейс для використання поточного\n"
+"внутрішнього розв'язувача (як зовнішнього) для АРТ програм\n"
+"для дебагу чи інших цілей\n"
+"\n"
+"Опції:\n"
+" -h Цей текст допомоги.\n"
+" -q Виводити повідомлення, придатні для запису у файл журналу.\n"
+" Не виводити індикатор прогресу\n"
+" -c=? Читати зазначений конфігураційний файл\n"
+" -o=? Вказати умовну опцію, наприклад, -o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Використання: apt-internal-solver\n"
+"\n"
+"apt-internal-solver це інтерфейс для використання поточного\n"
+"внутрішнього розв'язувача (як зовнішнього) для АРТ програм\n"
+"для дебагу чи інших цілей\n"
+"\n"
+"Опції:\n"
+" -h Цей текст допомоги.\n"
+" -q Виводити повідомлення, придатні для запису у файл журналу.\n"
+" Не виводити індикатор прогресу\n"
+" -c=? Читати зазначений конфігураційний файл\n"
+" -o=? Вказати умовну опцію, наприклад, -o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s не може бути позначений, тому що він не встановлений.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s вже був позначений, як встановлений вручну.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s вже був позначений, як автоматично встановлений.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "НОВІ пакунки, які будуть встановлені:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s вже був зафіксований.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s вже був незафіксований.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "Не вдалося виконати dpkg. Ви root?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s зафіксовано.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Фіксацію для %s відмінено.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Використання: apt-mark [опції] {auto|manual} пакунок1 [пакунок2 ...]\n"
+"\n"
+"apt-mark - це простий інтерфейс командного рядка для позначення\n"
+"пакунків як встановлені вручну, або автоматично. Він також уміє\n"
+"показувати позначки.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "позначити вказані пакунки як автоматично встановлені"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "позначити вказані пакунки як встановлені вручну"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "позначити вказані пакунки як автоматично встановлені"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Невідомий запис про пакунок!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "Зчитування переліків пакунків"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "Зафіксовані пакунки:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "Зафіксовані пакунки:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "Зламані пакунки"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "але це віртуальний пакунок"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "Зчитування інформації про стан"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Неправильне значення за умовчанням!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Для продовження натисніть Enter."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Чи хочете ви видалити всі раніше завантажені .deb файли?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr ""
+"Під час розпакування виникли якісь помилки. Пакунки, які були встановлені"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "будуть налаштовані. Це може призвести до повторення помилок"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr ""
+"або виникнення нових через незадоволені залежності. Це нормально,тільки "
+"помилки"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"зазначені вище цього повідомлення є важливими. Будь-ласка, виправте їх і "
+"виконайте установку '[I]nstall' ще раз"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Об'єднання доступної інформації"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Список розширень, припустимих для пакунків, занадто довгий"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Помилка обробки директорії %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr ""
+"Список розширень, припустимих для пакунків з вихідними текстами, занадто "
+"довгий"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Помилка запису заголовка в повний перелік вмісту пакунків (Contents)"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Помилка обробки повного переліку вмісту пакунків (Contents) %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Використання: apt-ftparchive [параметри] команда\n"
+"Команди: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive генерує індексні файли архівів Debian. Він підтримує\n"
+"безліч стилів генерації: від повністю автоматичного до функціональної "
+"заміни\n"
+"програм dpkg-scanpackages і dpkg-scansources\n"
+"\n"
+"apt-ftparchive генерує файли Package (переліки пакунків) для дерева\n"
+"тек, що містять файли .deb. Файл Package містить у собі керуючі\n"
+"поля кожного пакунка, а також хеш MD5 і розмір файлу. Значення керуючих\n"
+"полів \"пріоритет\" (Priority) і \"секція\" (Section) можуть бути змінені з\n"
+"допомогою файлу override.\n"
+"\n"
+"Крім того, apt-ftparchive може генерувати файли Sources з дерева\n"
+"тек, що містять файли .dsc. Для вказівки файлу override у цьому \n"
+"режимі можна використати параметр --source-override.\n"
+"\n"
+"Команди 'packages' і 'sources' треба виконувати, перебуваючи в кореневій "
+"теці\n"
+"дерева, що ви хочете обробити. BinaryPath повинен вказувати на місце,\n"
+"з якого починається рекурсивний обхід, а файл перепризначень (override)\n"
+"повинен містити запис про перепризначення керуючих полів. Якщо був "
+"зазначений\n"
+"Pathprefix, то його значення додається до керуючих полів, що містять\n"
+"імена файлів. Приклад використання для архіву Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Параметри:\n"
+" -h Цей текст\n"
+" --md5 Керування генерацією MD5-хешів\n"
+" -s=? Вказати файл перепризначень (override) для пакунків з вихідними "
+"текстами\n"
+" -q Не виводити повідомлення в процесі роботи\n"
+" -d=? Вказати кешуючу базу даних (не обов'язково)\n"
+" --no-delink Включити режим налагодження процесу видалення файлів\n"
+" --contents Керування генерацією повного переліку вмісту пакунків\n"
+" (файлу Contents)\n"
+" -c=? Використати зазначений конфігураційний файл\n"
+" -o=? Вказати довільний параметр конфігурації"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Збігів не виявлено"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "У групі пакунків '%s' відсутні деякі файли"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "БД була пошкоджена, файл перейменований на %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "БД застаріла, намагаюсь оновити %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Невірний формат БД. Якщо ви оновилися зі старої версії apt, будь-ласка "
+"видаліть і наново створіть базу-даних."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Не вдалося відкрити файл БД %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "Не вдалося прочитати посилання (readlink) %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "В архіві немає запису 'control'"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Неможливо одержати курсор"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - Не вдалося виділити пам'ять"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Невідомий алгоритм стиснення '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Для отримання стиснутого виводу %s необхідно ввімкнути стиснення"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Не вдалося створити IPC канал для підпроцесу"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Не вдалося породити процес (fork)"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Процес-нащадок, що виконує пакування"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Внутрішня помилка, не вдалося створити %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Помилка уведення/виводу в підпроцес/файл"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Помилка зчитування під час обчислення MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Не вдалося відкрити %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Спотворений запис про перепризначення (override) %s на рядку %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Не вдалося прочитати файл перепризначень (override) %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Спотворений запис про перепризначення (override) %s на рядку %llu #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Спотворений запис про перепризначення (override) %s на рядку %llu #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Спотворений запис про перепризначення (override) %s на рядку %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "У: Не вдалося прочитати директорію %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "У: Неможливо прочитати атрибути %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "П: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "У: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "П: Помилки відносяться до файлу "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Не вдалося визначити %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Не вдалося зробити обхід дерева"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Не вдалося відкрити %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr "DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Не вдалося створити посилання %s на %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Перевищено ліміт в %sB в DeLink.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Архів не мав поля 'package'"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no override entry\n"
+msgstr " Відсутній запис про перепризначення (override) для %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " пакунок %s супроводжується %s, а не %s\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no source override entry\n"
+msgstr " Відсутній запис про перепризначення вихідних текстів для %s\n"
+
+#: ftparchive/writer.cc
+#, fuzzy, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " Крім того, відсутній запис про бінарне перепризначення для %s\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Очікування на заголовки"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP сервер відіслав невірний заголовок 'reply'"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Невірний рядок заголовку"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP сервер відіслав невірний заголовок 'Content-Length'"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP сервер відіслав невірний заголовок 'Content-Range'"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Цей HTTP сервер має поламану підтримку 'range'"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Невідомий формат дати"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Погана заголовкова інформація"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "З'єднання не вдалося"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Внутрішня помилка"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Неможливо прочитати базу %s з cdrom"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Будь-ласка запустіть apt-cdrom, щоб APT розпізнав цей CD-ROM, apt-get update "
+"не може додавати нові CD-ROM"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "Невірний CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr ""
+"Неможливо відмонтувати CDROM в %s, можливо він все ще використовується."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Диск не знайдено."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Файл не знайдено"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "З'єднання з %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "З'єднання з %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Неможливо створити сокет для %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Неможливо почати з'єднання з %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Невдача"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Неможливо під'єднатися до %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Неможливо з'єднатися з %s:%s (%s), час з'єднання вичерпався"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "З'єднання з %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Не можу знайти IP адрес для %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Тимчасова помилка при отриманні IP адреси '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Сталося щось дивне при спробі отримати IP адрес для '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Сталося щось дивне при спробі отримати IP адрес для '%s:%s' (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Неможливо під'єднатися до %s:%s:"
+
+#: methods/copy.cc
+#, fuzzy
+msgid "Failed to stat"
+msgstr "Не вдалося одержати атрибути (stat)"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Невірне посилання (URI), локальні посилання не повинні починатися з //"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Логінюсь в"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Неможливо визначити назву вузла"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Неможливо визначити локальну назву"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Сервер розірвав з'єднання, відповівши: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER невдало, сервер мовив: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS невдало, сервер мовив: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Вказано проксі-сервер, але відсутній скрипт логіну, Acquire::ftp::ProxyLogin "
+"пустий."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Команда '%s' у скрипті логіна не вдалася, сервер мовив: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE невдало, сервер мовив: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Час з'єднання вичерпався"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Сервер закрив з'єднання"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Відповідь переповнила буфер."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Спотворений протокол"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Неможливо створити сокет (socket)"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Неможливо під'єднати сокет (socket) з даними, час з'єднання вичерпався"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Неможливо під'єднати пасивний сокет (passive socket)."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "Виклик getaddrinfo не зміг отримати слухаючий сокет"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Неможливо приєднатися до сокета"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Неможливо прослухати на сокеті"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Не вдалося визначити назву сокета"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Неможливо відіслати команду PORT"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Невідоме адресове сімейство %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT невдало, сервер мовив: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Час з'єднання з сокетом даних вичерпався"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Неможливо прийняти з'єднання"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Проблема хешування файла"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Неможливо завантажити файл, сервер мовив: '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Час з'єднання з сокетом (socket) з даними вичерпався"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Передача даних обірвалася, сервер мовив '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Черга"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Неможливо викликати "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Знайдено як мінімум один невірний підпис."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+"Внутрішня помилка: Вірний підпис (signature), але не можливо визначити його "
+"відбиток?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Неможливо виконати 'apt-key' для перевірки підпису (чи встановлено gnupg?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Невідома помилка виконання apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Наступні підписи були невірними:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Наступні підписи не можуть бути перевірені, тому що публічний ключ "
+"відсутній:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Помилка запису у файл"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Помилка зчитування з сервера. Віддалена сторона закрила з'єднання"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Помилка зчитування з сервера"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Помилка запису у файл"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Вибір провалився"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Час очікування з'єднання вийшов"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Помилка запису у вихідний файл"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Не вдалося встановити час модифікації"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "З'єднання завершено передчасно"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Пусті файли не можуть бути правильними архівами"
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Невірний заголовок 'member' %s в архіві"
+
+#~ msgid "Removed %s"
+#~ msgstr "Видалено %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Перелік пакунків %s розсинхронізований."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Індексні файли пакунків пошкоджені. Немає поля 'Filename' для пакунку %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Не знайдено файла дзеркала '%s' "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Неможливо прочитати файл дзеркала '%s'"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Неможливо прочитати файл дзеркала '%s'"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Дзеркало: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Відкривається конфігураційний файл %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "Відкриття %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Неможливо знайти очікуваний запис '%s' у 'Release' файлі (Невірний запис "
+#~ "у sources.list, або пошкоджений файл)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "Незадоволені залежності. Спробуйте використати --fix-broken."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Можливо, для виправлення цих помилок Ви захочете скористатися 'apt-get -f "
+#~ "install':"
+
+#~ msgid "(not found)"
+#~ msgstr "(не знайдено)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Фіксатор(pin) пакунка: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Відсутній публічний ключ для заданих ідентифікаторів (ID) ключа:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Директорія %s є відхиленою (diverted)"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Залежність типу %s для %s не може бути задоволена, бо %s не є дозволеним "
+#~ "на '%s' пакунках"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Залежність типу %s для %s не може бути задоволена, бо пакунок %s не "
+#~ "знайдено"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Не вдалося задовольнити залежність типу %s для %s: Встановлений пакунок "
+#~ "%s новіше, аніж треба"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "Залежність типу %s для %s не може бути задоволена, бо версія пакунку-"
+#~ "кандидата %s не задовольняє умови по версіям"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "Залежність типу %s для %s не може бути задоволена, бо немає пакунку-"
+#~ "кандидата %s потрібної версії"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Неможливо задовольнити залежність типу %s для пакунка %s: %s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Залежності для побудови %s не можуть бути задоволені."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Не вдалося видалити %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Не вдалося видалити посилання (unlink) %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Використання: apt-cache [опції] команда\n"
+#~ " apt-cache [опції] show пакунок1 [пкн2 ...]\n"
+#~ "\n"
+#~ "apt-cache - низькорівневий інструмент, що використовується для запиту\n"
+#~ "інформації з двійкових кеш-файлів APT\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Опції:\n"
+#~ " -h Цей текст допомоги.\n"
+#~ " -p=? Кеш пакунків.\n"
+#~ " -s=? Кеш вихідних текстів.\n"
+#~ " -q Не показувати індикатор прогресу.\n"
+#~ " -i Показувати тільки важливі залежності для команди unmet.\n"
+#~ " -c=? Читати зазначений файл конфігурації.\n"
+#~ " -o=? Встановити умовну опцію конфігурації, наприклад, -o dir::cache=/"
+#~ "tmp\n"
+#~ "Дивіться подробиці на man-сторінках apt-cache(8) і apt.conf(5).\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Опції:\n"
+#~ " -h Цей текст допомоги.\n"
+#~ " -q Не показувати індикатор прогресу.\n"
+#~ " -qq Виводити тільки повідомлення про помилки\n"
+#~ " -s Не виконувати реальних дій. Імітація роботи\n"
+#~ " -f Читати/писати позначки авто/вручну у вказаному файлі\n"
+#~ " -c=? Читати зазначений файл конфігурації.\n"
+#~ " -o=? Встановити умовну опцію конфігурації, наприклад, -o dir::cache=/"
+#~ "tmp\n"
+#~ "Для докладної інформації дивіться керівництва для apt-mark(8) і apt."
+#~ "conf(5)."
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Опції:\n"
+#~ " -h Цей текст допомоги.\n"
+#~ " -с=? Читати зазначений конфігураційний файл.\n"
+#~ " -o=? Встановити умовну опцію, наприклад, -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Опції:\n"
+#~ " -h Цей текст допомоги.\n"
+#~ " -q Не показувати індикатор прогресу.\n"
+#~ " -qq Виводити тільки повідомлення про помилки\n"
+#~ " -s Не виконувати реальних дій. Імітація роботи\n"
+#~ " -f Читати/писати позначки авто/вручну у вказаному файлі\n"
+#~ " -c=? Читати зазначений файл конфігурації.\n"
+#~ " -o=? Встановити умовну опцію конфігурації, наприклад, -o dir::cache=/"
+#~ "tmp\n"
+#~ "Для докладної інформації дивіться керівництва для apt-mark(8) і apt."
+#~ "conf(5)."
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Використання: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs - простий інструмент для сортування переліків пакунків. "
+#~ "Опція -s\n"
+#~ "використається, щоб вказати тип списку.\n"
+#~ "\n"
+#~ "Опції:\n"
+#~ " -h цей текст\n"
+#~ " -s сортувати список файлів з вихідними текстами\n"
+#~ " -c=? читати зазначений файл конфігурації\n"
+#~ " -o=? встановити довільну опцію, наприклад, -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Породжений процес завершився невдало"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr ""
+#~ "Вкажіть як мінімум один пакунок, для якого необхідно завантажити вихідні "
+#~ "тексти"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Не вдалося створити канали (pipes)"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Не вдалося виконати gzip "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s для %s скомпільовано %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Не вдалося створити FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s (аналіз URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Спотворений рядок %lu у переліку джерел %s (нечитабельний [параметр])"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Спотворений рядок %lu у переліку джерел %s ([параметр] занадто короткий)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s ([%s] не є призначенням)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s ([%s] не має ключа)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Спотворений рядок %lu у переліку джерел %s ([%s] ключ %s не має значення)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s (проблема з URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s (dist)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s (аналіз URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s (absolute dist)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "Спотворений рядок %lu у переліку джерел %s (dist parse)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Пакунок %s %s не був знайдений під час обробки залежностей"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Не вдалося прочитати атрибути переліку вихідних текстів %s"
+
+#, fuzzy
+#~ msgid "Collecting File Provides"
+#~ msgstr "Збирання інформації про 'File Provides'"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Файл %s починається з не 'clearsigned' повідомленням"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Неможливо знайти хеш-суму для '%s' у 'Release' файлі"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Блок постачальника %s не містить відбитку (fingerprint)"
+
+#, fuzzy
+#~ msgid "Total dependency version space: "
+#~ msgstr "Всього інформації про залежності: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Недостатньо місця в %s"
+
+#~ msgid "Done"
+#~ msgstr "Виконано"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Не встановлено 'keyring' у %s."
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Внутрішня помилка, AllUpgrade щось поламав"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s не є правильним DEB пакунком."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Використовується точка монтування CD-ROM: %s\n"
+#~ "Монтується CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Неможливо пропатчити %s з mmap і з 'file operation usage' - патч виглядає "
+#~ "пошкодженим."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Неможливо пропатчити %s з mmap (але не видно конкретної вини mmap) - патч "
+#~ "виглядає пошкодженим."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Ігнорувати недоступний випуск '%s' пакунку '%s'"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Завантаження %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "Це невірний DEB архів, відсутній член '%s', '%s' чи '%s'"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Невідповідність MD5Sum"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Я не зміг знайти файл для пакунку %s. Можливо, це значить, що вам "
+#~ "потрібно власноруч виправити цей пакунок."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr ""
+#~ "Неможливо записати в лог, проблема з openpty() (не змонтовано /dev/pts?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Пропускається неіснуючий файл %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Не вдалося видалити %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Неможливо створити %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Не вдалося прочитати атрибути %sinfo"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "Директорії info і temp повинні бути на тій самій файловій системі"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Не вдалося переміститися до директорії адміністратора %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Внутрішня помилка при отриманні назви пакунку"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Зчитування переліку файлів"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Не вдалося відкрити list файл '%sinfo/%s'. Якщо Ви не можете відновити "
+#~ "цей файл, тоді зробіть його пустим і негайно реінсталюйте ту ж саму "
+#~ "версію пакунка!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Невдача зчитування 'list' файла %sinfo/%s"
+
+#, fuzzy
+#~ msgid "Internal error getting a node"
+#~ msgstr "Внутрішня помилка при отриманні 'node'"
+
+#, fuzzy
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Не вдалося відкрити 'diversions' файл %sdiversions"
+
+#, fuzzy
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Файл з 'diversions' пошкоджений"
+
+#, fuzzy
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Невірний рядок у 'diversion' файлі: %s"
+
+#, fuzzy
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Внутрішня помилка при додаванні diversion"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Кеш пакунків повинен бути ініційованим першим"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Не вдалося знайти Пакунок: заголовок, зсув %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "Погана секція ConfFile у статусному файлі. Зсув %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Помилка обробки MD5. Зсув %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Неможливо змінити %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Не вдалося знайти правильний контрольний (control) файл"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Неможливо відкрити канал (pipe) для %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Помилка зчитування з процесу %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Отримано один рядок заголовків понад %u символів"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "декомпресор"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "зчитування, мало прочитати ще %lu байт, але нічого більше нема"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "запис, мало записати ще %lu байт, але не змогло"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Сталася помилка під час обробки %s (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Сталася помилка під час обробки %s (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Сталася помилка під час обробки %s (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Сталася помилка під час обробки %s (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Сталася помилка під час обробки %s (NewFileVer1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Сталася помилка під час обробки %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Сталася помилка під час обробки %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Сталася помилка під час обробки %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Сталася помилка під час обробки %s (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "Сталася помилка під час обробки %s (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Внутрішня помилка, не можу знайти member"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr ""
+#~ "E: Перелік аргументів з Acquire::gpgv::Options занадто довгий. Відміна."
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Сталася помилка під час обробки %s (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "Спотворений рядок %u у переліку джерел %s (vendor id)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "Неможливо отримати доступ до набору ключів (keyring): '%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "Неможливо накласти латку на файл"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Обробляються ініціатори для %s"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "Так як Ви просили виконати тільки одну операцію, те найімовірніше, що\n"
+#~ "пакунок просто не може бути встановлений через помилки в самому пакунку.\n"
+#~ "Необхідно відіслати звіт про цю помилку."
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Рядок %d є занадто довгим (максимум %lu)"
+
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Рядок %d є занадто довгим (максимум %d)"
+
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Сталася помилка під час обробки %s (NewFileDesc1)"
+
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Сталася помилка під час обробки %s (NewFileDesc2)"
+
+#~ msgid "Stored label: %s \n"
+#~ msgstr "Записано мітку: %s \n"
+
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "Знайдено %i індексів пакунків, %i індексів вихідних текстів, %i індексів "
+#~ "перекладів і %i підписів\n"
+
+#~ msgid "openpty failed\n"
+#~ msgstr "openpty не вдався\n"
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..670f25c
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,4488 @@
+# Vietnamese Translation for Apt.
+# Bản dịch tiếng Việt dành cho Apt.
+# This file is put in the public domain.
+# Clytie Siddall <clytie@riverland.net.au>, 2005, 2006, 2007, 2008, 2009, 2010.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.0.8\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2014-09-12 13:48+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
+"X-Generator: Poedit 1.5.5\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: ../\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "Chữ ký kho không hợp lệ"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "Gặp lỗi khi đọc phần đầu thành viên kho"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "Phần đầu thành viên kho không hợp lê"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "Kho quá ngắn"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "Việc đọc phần đầu kho bị lỗi"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "Không tìm thấy bản ghi xác thực cho: %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "Kho bị hỏng."
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Gặp lỗi khi tổng kiểm “tar”, kho bị hỏng"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "Không rõ kiểu phần đầu tar %u, thành viên %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "Đây không phải là một kho DEB hợp lệ vì còn thiếu thành viên “%s”"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "Gặp lỗi nội bộ, không thể định vị thành viên %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "Tập tin điều khiển không có khả năng phân tách"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "Việc ghi tập tin %s gặp lỗi"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "Việc đóng tập tin %s gặp lỗi"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "Đường dẫn %s quá dài"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "Đang giải nén %s nhiều lần"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "Thư mục %s bị trệch hướng"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "Gói này đang cố ghi vào đích trệch đi %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "Đường dẫn trệch đi quá dài"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "Việc lấy thông tin thống kê cho %s bị lỗi"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "Việc đổi tên %s thành %s bị lỗi"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "Thư mục %s đang được thay thế do một cái không phải là thư mục"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "Gặp lỗi định vị điểm nút trong hộp băm nó bị lỗi"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "Đường dẫn quá dài"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "Ghi đè lên gói đã khớp mà không có phiên bản cho %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "Tập tin %s/%s ghi đè lên một tập tin trong gói %s"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "Không thể đọc %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "Không thể lấy thông tin thống kê %s"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode (thả điểm nút) được gọi với điểm nút còn liên kết"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "Gặp lỗi khi định vị phần tử băm!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "Gặp lỗi khi định vị trệch đi"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "Lỗi nội bộ trong AddDiversion (thêm sự trệch đi)"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "Đang cố ghi đè một sự trệch đi, %s → %s và %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "Sự trệch đi được thêm hai lần %s → %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "Tập tin cấu hình (conf) trùng lặp %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "Thư mục %s bị trệch hướng"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "Thư mục %s bị trệch hướng"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "Thư mục %s bị trệch hướng"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "Thư mục %s bị trệch hướng"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "Thư mục %s bị trệch hướng"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "Gặp lỗi khi đọc liên kết %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Mã băm tổng kiểm tra không khớp"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "gặp lỗi khi đổi tên, %s (%s → %s)."
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "Kích cỡ không khớp nhau"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "Định dạng tập tập tin không hợp lệ"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "Lỗi ghi"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+"Tập tin Clearsigned không hợp lệ, nhận được “%s” (mạng yêu cầu xác nhận phải "
+"không?)"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"Gặp lỗi trong khi thẩm tra chữ ký.\n"
+"Kho lưu chưa được cập nhật nên dùng những tập tin chỉ mục trước.\n"
+"Lỗi GPG: %s: %s\n"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "Lỗi GPG: %s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"Tập tin phát hành %s đã hết hạn (không hợp lệ kể từ %s). Cập nhật cho kho "
+"này sẽ không được áp dụng."
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Release file for %s is expired (invalid since %s). Updates for this "
+#| "repository will not be applied."
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+"Tập tin phát hành %s đã hết hạn (không hợp lệ kể từ %s). Cập nhật cho kho "
+"này sẽ không được áp dụng."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "Bản phát hành xung đột: %s (cần %s nhưng lại nhận được %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "Gặp lỗi khi lấy về %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"Không tìm thấy tập tin liên quan đến gói %s. Có lẽ bạn cần phải tự sửa gói "
+"này, do thiếu kiến trúc."
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "Không tìm thấy nguồn cho việc tải về phiên bản “%s” of “%s”"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "Changelog cho %s (%s)"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "Không tìm thấy trình điều khiển phương thức %s."
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "Gói “%s” đã được cài đặt chưa?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "Phương thức %s đã không khởi chạy đúng đắn."
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "Hãy cho đĩa có nhãn “%s” vào ổ “%s” rồi bấm nút Enter."
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "Thiếu thư mục danh sách %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "Thiếu thư mục kho lưu %s."
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "Không thể khoá thư mục %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "Không hỗ trợ việc xóa %s"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "Đang tải tập tin thứ %li trong tổng số %li (còn lại %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "Đang tải tập tin %li trong tổng số %li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "Cần phải cài đặt lại gói %s, nhưng mà không thể tìm kho cho nó."
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"Lỗi: “pkgProblemResolver::Resolve” (bộ tháo gỡ vấn đề gọi::tháo gỡ) đã tạo "
+"ra nhiều chỗ ngắt, có lẽ một số gói đã giữ lại đã gây ra trường hợp này."
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "Không thể sửa trục trặc này, bạn đã giữ lại một số gói bị hỏng."
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "Không thể phân tích hay mở danh sách gói hay tập tin trạng thái."
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr ""
+"Bạn nên lấy cơ sở dữ liệu mới bằng lệnh “apt-get update” để sửa các vấn đề "
+"này"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "Không thể đọc danh sách nguồn."
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "Lỗi biên dịch biểu thức chính quy - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "Không tìm thấy bản phát hành “%s” cho “%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "Không tìm thấy phiên bản “%s” cho “%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "Không tìm thấy tác vụ “%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "Không tìm thấy gói nào theo biểu thức chính quy “%s”"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "Không tìm thấy gói nào theo đường dẫn “%s”"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "Không thể định vị gói %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "Không thể chọn phiên bản trong gói “%s” vì nó chỉ là ảo"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr "Không thể chọn phiên bản mới nhất trong gói “%s” vì nó chỉ là ảo"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "Không thể chọn phiên bản ứng cử trong gói %s vì nó không có ứng cử"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+"Không thể chọn phiên bản được cài đặt trong gói %s vì nó không phải được cài "
+"đặt"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+"Không thể chọn phiên bản được cài đặt hoặc phiên bản ứng cử trong gói “%s” "
+"mà không có trong nó"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "Dòng %u quá dài trong danh sách nguồn %s."
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "Đang bỏ gắn CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "Đang dùng điểm gắn đĩa CD-ROM %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "Đang đợi đĩa...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "Đang gắn đĩa CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "Đang nhận diện... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "Nhãn đã lưu: %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "Đang quét đĩa tìm tập tin chỉ mục...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"Tìm thấy %zu chỉ mục gói, %zu chỉ mục nguồn, %zu chỉ mục dịch và %zu chữ ký\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"Không tìm thấy tập tin gói nào, có thể vì đây không phải là một Đĩa Debian, "
+"hoặc có kiến trúc không đúng?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "Tìm thấy nhãn “%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "Nó không phải là một tên hợp lệ: hãy thử lại.\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"Tên đĩa này:\n"
+"“%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "Đang sao chép các danh sách gói..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "Đang ghi danh sách nguồn mới\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "Các mục tin danh sách nguồn cho đĩa này:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "Không thể chuyển đổi sang %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "Không thể lấy trạng thái về %s."
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "Không thể lấy các thông tin cho điểm gắn kết %s"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "Việc lấy các thông tin thống kê đĩa CD-ROM bị lỗi"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "Không hiểu tùy chọn dòng lệnh “%c” [từ %s]."
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "Không hiểu tùy chọn dòng lệnh %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "Tùy chọn dòng lệnh %s không phải dạng lôgíc (đúng/sai)"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "Tùy chọn %s yêu cầu một đối số."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "Tùy chọn %s: Đặc tả mục cấu hình phải có một “=<giá_trị>”."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "Tùy chọn %s yêu cầu một đối số kiểu số nguyên, không phải “%s”"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "Tùy chọn “%s” quá dài"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "Không hiểu %s: hãy thử dùng true (đúng) hoặc false (sai)."
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "Thao tác “%s” không hợp lệ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "Không chấp nhận kiểu viết tắt: “%c”"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "Gặp lỗi cú pháp %s:%u: Khối bắt đầu không có tên."
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "Gặp lỗi cú pháp %s:%u: Sai dạng thẻ"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "Gặp lỗi cú pháp %s:%u: Có rác sau giá trị"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "Gặp lỗi cú pháp %s:%u: Chỉ có thể thực hiện chỉ thị mức đầu"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "Gặp lỗi cú pháp %s:%u: Quá nhiều chỉ thị bao gồm lồng nhau"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "Gặp lỗi cú pháp %s:%u: Đã được bao gồm từ đây"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "Gặp lỗi cú pháp %s:%u: Chưa hỗ trợ chỉ thị “%s”"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr ""
+"Gặp lỗi cú pháp %s:%u: Chỉ thị “clear” thì yêu cầu một cây tuỳ chọn làm đối "
+"số"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "Gặp lỗi cú pháp %s:%u: Gặp rác tại kết thúc tập tin"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "Gặp vấn đề khi bỏ liên kết tập tin %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "Không dùng khả năng khóa cho tập tin khóa chỉ đọc %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "Không thể mở tập tin khóa %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "Không dùng khả năng khóa cho tập tin khóa đã lắp kiểu NFS %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "Không thể lấy khóa %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+"Liệt kê các tập tin không thể được tạo ra vì “%s” không phải là một thư mục"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "Bỏ qua “%s” trong thư mục “%s'vì nó không phải là tập tin bình thường"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+"Bỏ qua tập tin “%s” trong thư mục “%s” vì nó không có phần đuôi mở rộng"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+"Bỏ qua tập tin “%s” trong thư mục “%s” vì nó có phần đuôi mở rộng không hợp "
+"lệ"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "Cần %s nhưng mà không thấy nó ở đây"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "Tiến trình con %s đã nhận một lỗi phân đoạn."
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "Tiến trình con %s đã nhận tín hiệu %u."
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "Tiến trình con %s đã trả về một mã lỗi (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "Tiến trình con %s đã thoát bất thường"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "Lỗi đọc"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "Lỗi ghi"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "Gặp vấn đề khi đóng tập tin gzip %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "Việc tạo tiến trình con IPC bị lỗi"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "Gặp lỗi khi thực hiện nén "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "Không thể mở tập tin %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "Không thể mở bộ mô tả tập tin %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "đọc, còn cần đọc %llu nhưng mà không có gì còn lại cả"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "ghi, còn cần ghi %llu nhưng mà không thể"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "Gặp vấn đề khi đóng tập tin %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "Gặp vấn đề khi đổi tên tập tin %s thành %s"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "Gặp vấn đề khi đồng bộ hóa tập tin"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "Không thể tạo tập tin tạm (hàm mkstemp) %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "Không thể ghi vào %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "Không thể mmap (ánh xạ bộ nhớ) tập tin rỗng"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "Không thể tạo mmap (ánh xạ bộ nhớ) kích cỡ %llu byte"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "Không thể nhân đôi bộ mô tả tập tin %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "Không thể đóng mmap (ánh xạ bộ nhớ)"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "Không thể động bộ hoá mmap (ánh xạ bộ nhớ)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "Không thể tạo mmap (ánh xạ bộ nhớ) kích cỡ %lu byte"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "Gặp lỗi khi cắt ngắn tập tin"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"Dynamic MMap (ánh xạ bộ nhớ động) đã vượt quá kích thước tối đa cho phép.\n"
+"Hãy tăng kích cỡ của “APT::Cache-Start” (giới hạn vùng nhớ tạm Apt).\n"
+"Giá trị hiện thời là: %lu. (man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr "Không thể tăng kích cỡ của ánh xạ bộ nhớ, vì đã tới giới hạn %lu byte."
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+"Không thể tăng kích cỡ của ánh xạ bộ nhớ, vì chức năng tự động tăng bị người "
+"dùng tắt đi."
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... Lỗi!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... Xong"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%li ngày %li giờ %li phút %li giây"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%li giờ %li phút %li giây"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%li phút %li giây"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%li giây"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "Không tìm thấy vùng chọn %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "Không thể phân tích cú pháp của tập tin Phát hành %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "Không có phần nào trong tập tin Phát hành %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "Không có mục Hash (chuỗi duy nhất) nào trong tập tin Phát hành %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr ""
+"Gặp mục tin “%s” (hợp lệ đến khi) không hợp lệ trong tập tin Phát hành %s"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "Không thể phân tích tập tin gói %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid ""
+#| "Unable to lock the administration directory (%s), is another process "
+#| "using it?"
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+"Không thể khoá thư mục quản trị (%s), có một tiến trình khác đang sử dụng nó "
+"phải không?"
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+#| msgid "Unable to lock the administration directory (%s), are you root?"
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "Không thể khoá thư mục quản trị (%s), bạn có quyền root không?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+"dpkg bị ngắt giữa chừng, bạn cần phải chạy “%s” một cách thủ công để giải "
+"vấn đề này. "
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+"Không thể khoá thư mục quản trị (%s), có một tiến trình khác đang sử dụng nó "
+"phải không?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "Không thể khoá thư mục quản trị (%s), bạn có quyền root không?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "Chưa được khoá"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "Đang chuẩn bị %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "Đang chuẩn bị cấu hình %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "Đang chuẩn bị gỡ bỏ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "Đang chuẩn bị gỡ bỏ hoàn toàn %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "Đang ghi chép sự biến mất của %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "Đang chạy bẫy sau-cài-đặt %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "Đã cài đặt %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "Đang cấu hình %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "Thiếu thư mục “%s”"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "Không thể mở tập tin “%s”"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "Đang mở gói %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "Đang cài đặt %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "Đang gỡ bỏ %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "Đang gỡ bỏ hoàn toàn %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "Gỡ bỏ hoàn toàn %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "Không thể ghi nhật ký (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "/dev/pts đã gắn chưa?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "Hệ điều hành đã ngắt trước khi nó kịp hoàn thành"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+"Không ghi báo cáo apport, vì đã chạm giới hạn số các báo cáo (MaxReports)"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "gặp vấn đề về quan hệ phụ thuộc nên để lại không cấu hình"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+"Không ghi báo cáo apport, vì thông điệp lỗi chỉ thị đây là một lỗi kế tiếp "
+"do một sự thất bại trước đó."
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+"Không ghi báo cáo apport, vì thông điệp lỗi chỉ thị đây là một lỗi “đĩa đầy”"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+"Không ghi báo cáo apport, vì thông điệp lỗi chỉ thị đây là một lỗi “không đủ "
+"bộ nhớ”"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+"Không ghi báo cáo apport, vì thông điệp lỗi chỉ thị đây là một lỗi trên hệ "
+"thống nội bộ"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+"Không ghi báo cáo apport, vì thông điệp lỗi chỉ thị đây là một lỗi “V/R dpkg”"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "Đang xây dựng cây quan hệ phụ thuộc"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "Phiên bản ứng cử"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "Tạo ra quan hệ phụ thuộc"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "Đang đọc thông tin về tình trạng"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "Lỗi mở tập tin tình trạng StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "Gặp lỗi khi ghi tập tin tình trạng StateFile tạm thời %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "Gửi kịch bản đến bộ phân giải"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "Gửi yêu cầu đến bộ phân giải"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "Chuẩn bị để lấy cách giải quyết"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "Bộ phân giải bên ngoài gặp lỗi mà không trả về thông tin lỗi thích hợp"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "Thi hành bộ phân giải từ bên ngoài"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Execute external planner"
+msgstr "Thi hành bộ phân giải từ bên ngoài"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send request to planner"
+msgstr "Gửi yêu cầu đến bộ phân giải"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "Send scenario to planner"
+msgstr "Gửi kịch bản đến bộ phân giải"
+
+#: apt-pkg/edsp.cc
+#, fuzzy
+msgid "External planner failed without a proper error message"
+msgstr "Bộ phân giải bên ngoài gặp lỗi mà không trả về thông tin lỗi thích hợp"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "Đã ghi %i bản ghi.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "Đã ghi %i bản ghi với %i tập tin còn thiếu.\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "Đã ghi %i bản ghi với %i tập tin không khớp với nhau\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr ""
+"Đã ghi %i bản ghi với %i tập tin còn thiếu và %i tập tin không khớp với "
+"nhau\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "Không tìm thấy bản ghi xác thực cho: %s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Sai khớp chuỗi duy nhất cho: %s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "Không hỗ trợ hệ thống đóng gói “%s”"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "Không thể quyết định kiểu hệ thống đóng gói thích hợp"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "Diễn biến: [%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "Đang chạy dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"Không thể thực hiện ngay lập tức tiến trình cấu hình “%s”. Xem “man 5 apt."
+"conf ” dưới “APT::Immediate-Configure” để tìm chi tiết. (%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "Không thể cấu hình “%s”. "
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"Việc chạy tiến trình cài đặt này sẽ cần thiết gỡ bỏ tạm gói chủ yếu %s, do "
+"vòng lặp Xung đột/Phụ thuộc trước. Trường hợp này thường xấu, nhưng mà nếu "
+"bạn thật sự muốn tiếp tục, có thể hoạt hóa tuy chọn “APT::Force-"
+"LoopBreak” (buộc ngắt vòng lặp)."
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "Bộ nhớ tạm gói trống"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "Tập tin nhớ tạm gói bị hỏng"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "Tập tin nhớ tạm gói là một phiên bản không tương thích"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "Trình APT này không hỗ trợ hệ thống điều khiển phiên bản “%s”"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "Bộ nhớ tạm gói được biên dịch cho một kiến trúc khác"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "Tập tin nhớ tạm gói bị hỏng, nó quá nhỏ"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "Phụ thuộc"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "Phụ thuộc sẵn"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "Đề nghị"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "Xung đột"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "Khuyến khích"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "Thay thế"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "Làm hỏng"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "Tăng cường"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "Cũ"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "quan trọng"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "yêu cầu"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "chuẩn"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "bổ sung"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "tùy chọn"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "Bộ nhớ tạm có hệ thống điều khiển phiên bản không tương thích"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "Có lỗi phát sinh khi xử lý %s (%s%d)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "Ồ, bạn đã vượt quá số tên gói mà trình APT này có thể quản lý."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "Ồ, bạn đã vượt quá số phiên bản mà trình APT này có thể quản lý."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "Ồ, bạn đã vượt quá số mô tả mà trình APT này có thể quản lý."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "Ồ, bạn đã vượt quá số cách phụ thuộc mà trình APT này có thể quản lý."
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "Đang đọc các danh sách gói"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "Lỗi nhập/xuất khi lưu bộ nhớ tạm nguồn"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "Không hỗ trợ kiểu tập tin chỉ mục “%s”"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"Giá trị “%s” không hợp lệ cho APT::Default-Release như vậy bản phát hành "
+"không sẵn có trong mã nguồn"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr ""
+"Gặp mục ghi sai trong tập tin tùy thích %s: không có dòng đầu Package (Gói)."
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "Không hiểu kiểu ghim %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "Chưa ghi rõ ưu tiên (hay số không) cho ghim"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "Sai “override” %s dòng %llu (%s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "Gặp dòng sai dạng %u trong danh sách nguồn %s (kiểu)."
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "Không biết kiểu “%s” trên dòng %u trong danh sách nguồn %s."
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "Gặp dòng sai dạng %u trong danh sách nguồn %s (kiểu)."
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "Không hiểu kiểu “%s” trên đoạn %u trong danh sách nguồn %s"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr ""
+"Bạn phải để một số địa chỉ URI “nguồn” vào “sources.list” (danh sách nguồn)"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr ""
+"Một số tập tin chỉ mục không tải về được. Chúng đã bị bỏ qua, hoặc cái cũ đã "
+"được dùng thay thế."
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "Đang tính toán nâng cấp"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "Tìm thấy:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "Lấy:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "Bỏq:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "Lỗi:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "Đã lấy về %sB mất %s (%sB/g).\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [Đang hoạt động]"
+
+#: apt-private/acqprogress.cc
+#, fuzzy, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"Chuyển đổi thiết bị lưu trữ: vui lòng đưa đĩa có nhãn\n"
+" “%s”\n"
+"vào ổ “%s” rồi bấm nút Enter\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "Đang sửa chữa quan hệ phụ thuộc..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " gặp lỗi."
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "Không thể sửa phần phụ thuộc"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "Không thể tối thiểu hóa tập hợp nâng cấp"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " Xong"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "Bạn có thể chạy lệnh “apt --fix-broken install” để sửa những lỗi trên."
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"Thưa thỏa mãn quan hệ phụ thuộc. Hãy thử chạy lệnh “apt --fix-broken "
+"install” mà không có gói nào (hoặc chỉ định cách thức giải quyết)."
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "Đang sắp xếp"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "Ghi chú: đang chọn “%s” cho tác vụ “%s”\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "Ghi chú: đang chọn “%s” cho biểu thức chính quy “%s”\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "Ghi chú: đang chọn “%s” cho biểu thức chính quy “%s”\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "Gói %s là gói ảo được cung cấp bởi:\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy
+msgid " [Installed]"
+msgstr "[đã cài đặt]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [Không phải phiên bản ứng cử]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "Bạn nên chọn một gói rõ ràng để cài."
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"Gói %s không phải sẵn sàng, nhưng mà một gói khác\n"
+"đã tham chiếu đến nó. Có lẽ có gói còn thiếu,\n"
+"không còn dùng nữa, hay chỉ sẵn sàng từ một nguồn khác.\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "Tuy nhiên, những gói theo đây thay thế nó:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "Gói “%s” không có ứng cử cài đặt"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "Không thể gỡ bỏ được gói ảo như “%s”\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "Chưa cài đặt gói %s nên không thể gỡ bỏ nó. Có phải ý bạn là “%s'?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "Gói %s chưa được cài đặt, thế nên không thể gỡ bỏ nó\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "Ghi chú: đang chọn “%s” thay cho “%s”\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "Trình APT này có năng lực của siêu bò."
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "Lệnh trợ giúp APT này có Sức Mạnh của Siêu “Meep”."
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "Không tìm thấy gói"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "CẢNH BÁO: Không thể xác thực những gói sau đây!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "Cảnh báo xác thực bị đè.\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "Một số gói không thể được xác thực"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "Cài đặt những gói này mà không cần thẩm tra?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "Có lỗi và đã dùng tùy chọn “-y” mà không có “--force-yes”"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "Không thể tìm được chỗ trống trong %s"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "Bạn không có đủ dung lượng đĩa còn trống trong %s."
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "Không thể khoá thư mục tải về"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"Không thể cài đặt một số gói. Điều đó có nghĩa là bạn đã yêu cầu\n"
+"một trường hợp không thể, hoặc nếu bạn đang sử dụng bản phân phối\n"
+"chưa ổn định cái mà yêu cầu các gói mà nó còn chưa được tạo ra\n"
+"hay chưa được chuyển ra khỏi phần Incoming (Đến)."
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "Có lẽ thông tin theo đây sẽ giúp đỡ bạn giải quyết tình trạng này:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "Gói bị hỏng"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"Không thể lấy một số kho, có lẽ hãy chạy lệnh “apt-get update” (apt lấy cập "
+"nhật)\n"
+"hay dùng tùy chọn “--fix-missing” (sửa thiếu sót) không?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "Lỗi nội bộ: InstallPackages (cài đặt gói) được gọi với gói bị hỏng!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr ""
+"Cần phải gỡ bỏ một số gói, nhưng mà tính năng Gỡ bỏ (Remove) đã bị tắt."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "Có lỗi và đã dùng tùy chọn “-y” mà không có “--force-yes”"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "Có lỗi và đã dùng tùy chọn “-y” mà không có “--force-yes”"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "Gặp lỗi nội bộ: Tiến trình Sắp xếp chưa xong"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+"Lạ nhỉ... Kích cỡ không khớp nhau. Hãy gửi thư cho <apt@packages.debian.org>"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "Cần phải lấy %sB/%sB từ kho chứa.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "Cần phải lấy %sB từ kho chứa.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "Sau thao tác này, %sB dung lượng đĩa sẽ bị chiếm dụng.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "Sau thao tác này, %sB dung lượng đĩa sẽ được giải phóng.\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr ""
+"Đã đưa ra “Chỉ không đáng kể” (Trivial Only) nhưng mà thao tác này là đáng "
+"kể."
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Có, làm đi!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"Bạn sắp làm việc mà nó có thể gây hư hại cho hệ thống.\n"
+"Nếu vẫn muốn tiếp tục thì hãy gõ cụm từ “%s”\n"
+"?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "Hủy bỏ."
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "Bạn có muốn tiếp tục không?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "Một số tập tin không tải về được"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "Hoàn tất việc tải về và trong chế độ chỉ tải về"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr ""
+"Chưa hỗ trợ tùy chọn “--fix-missing” (sửa khi thiếu) và trao đổi phương tiện."
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "Không thể sửa những gói còn thiếu."
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "Đang hủy bỏ tiến trình cài đặt."
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+"Những gói theo đây không còn nằm trên hệ thống này vì mọi tập tin đều bị gói "
+"khác ghi đè:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "Ghi chú: Thay đổi này được tự động thực hiện bởi dpkg."
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "Không nên xoá gì thì không thể khởi chạy Bộ Gỡ bỏ Tự động"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"Ừm, có vẻ là Bộ Gỡ bỏ Tự động đã hủy cái gì, một trường hợp thực sự không "
+"nên xảy ra. Hãy thông báo lỗi về apt."
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "Lỗi nội bộ: Bộ Gỡ bỏ Tự động đã làm hỏng một thứ gì đó"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] ""
+"(Các) gói sau đây đã được tự động cài đặt nên không còn cần yêu cầu lại:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu gói đã được tự động cài đặt nên không còn cần yêu cầu lại.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "Hãy dùng lệnh “%s” để gỡ bỏ chúng."
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "The following additional packages will be installed:"
+msgstr "Những gói thêm theo đây sẽ được cài đặt:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "Các gói đề nghị:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "Gói khuyến khích:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "Đang bỏ qua %s vì nó đã được cài đặt và chưa đặt tùy chọn Nâng cấp.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr ""
+"Đang bỏ qua %s vì nó chưa được cài đặt và chỉ Nâng cấp là được yêu cầu.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "Không thể cài đặt lại %s vì không thể tải nó về.\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s là phiên bản mới nhất.\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s được đặt thành “được cài đặt bằng tay”.\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "Đã chọn phiên bản “%s” (%s) cho “%s”\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "Đã chọn phiên bản “%s” (%s) cho “%s” vì “%s”\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "Đang liệt kê"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "Ở đây có %i phiên bản phụ thêm. Hãy dùng tùy chọn “-a” để xem."
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"CHÚ Ý: đây chỉ là mô phỏng!\n"
+" %s yêu cầu quyền root để thực hiện thật.\n"
+" Cần nhớ rằng chức năng khóa đã bị tắt,\n"
+" nên có thể nó không chính xác như khi làm thật!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "không hiểu"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[đã cài, có thể nâng cấp thành: %s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[đã cài đặt,nội bộ]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[đã cài,có thể tự động gỡ bỏ]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[đã cài đặt,tự động]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[đã cài đặt]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[có thể nâng cấp từ: %s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[residual-config]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "nhưng mà %s đã được cài đặt"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "nhưng mà %s sẽ được cài đặt"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "nhưng mà nó không có khả năng cài đặt"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "nhưng mà nó là gói ảo"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "nhưng mà nó sẽ không được cài đặt"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "nhưng mà nó không được cài đặt"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " hay"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "Những gói theo đây chưa thỏa mãn quan hệ phụ thuộc:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "Những gói MỚI sau sẽ được CÀI ĐẶT:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "Những gói sau sẽ bị GỠ BỎ:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "Những gói sau đây được giữ lại:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "Những gói sau đây sẽ được NÂNG CẤP:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "Những gói sau đây sẽ bị HẠ CẤP:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "Những gói giữ lại sau đây sẽ bị THAY ĐỔI:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (bởi vì %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"CẢNH BÁO: Có những gói chủ yếu sau đây sẽ bị gỡ bỏ.\n"
+"ĐỪNG làm như thế trừ khi bạn biết chính xác mình đang làm gì!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "%lu nâng cấp, %lu được cài đặt mới, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "%lu được cài đặt lại, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "%lu bị hạ cấp, "
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "%lu cần gỡ bỏ, và %lu chưa được nâng cấp.\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu chưa được cài đặt toàn bộ hay được gỡ bỏ.\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[C/k]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[c/K]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "C"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "K"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "Bạn phải đưa ra ít nhất một mẫu tìm kiếm"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "Tìm kiếm toàn văn"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "Ở đây có %i bản ghi phụ thêm. Hãy dùng tùy chọn “-a” để xem"
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "không là gói thật (ảo)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "Tập tin gói:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr ""
+"Bộ nhớ tạm không đồng bộ được nên không thể tham chiếu chéo tập tin gói"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "Các gói đã ghim:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " Đã cài đặt: "
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " Ứng cử: "
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(không)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " Bảng phiên bản:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "Không tìm thấy gói cho kiến trúc “%s”"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "Không tìm thấy gói “%s” với phiên bản “%s”"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "Không tìm thấy gói “%s” với số phát hành “%s”"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "Đang chọn “%s” làm gói nguồn, thay thế cho “%s”\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "Không tìm thấy phiên bản “%s” của gói “%s”"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "Phải chỉ định ít nhất một gói để mà lấy mã nguồn về cho nó"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "Không tìm thấy gói nguồn cho %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"GHI CHÚ: việc đóng gói “%s” được bảo trì trong hệ thống quản lý mã nguồn "
+"“%s” tại:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"Hãy dùng lệnh:\n"
+"%s\n"
+"để lấy các gói mới nhất (có thể là chưa phát hành).\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "Đang bỏ qua tập tin đã được tải về “%s”\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "Cần phải lấy %sB/%sB kho nguồn.\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "Cần phải lấy %sB từ kho nguồn.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "Lấy mã nguồn %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "Gặp lỗi khi lấy một số kho."
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "Đang bỏ qua giải nén nguồn đã giải nén trong %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "Lệnh giải nén “%s” bị lỗi.\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "Hãy kiểm tra xem gói “dpkg-dev” đã được cài đặt chưa.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "Lệnh biên dịch “%s” bị lỗi.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "Không thể lấy thông tin về các phần phụ thuộc khi biên dịch cho %s"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s không phụ thuộc vào gì khi biên dịch.\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"Không có thông tin kiến trúc sẵn sàng cho %s. Xem apt.conf(5) APT::"
+"Architectures để cài đặt"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr ""
+"Phải chỉ ra ít nhất một gói cần kiểm tra các phần phụ thuộc cần khi biên dịch"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "Gặp lỗi khi xử lý các quan hệ phụ thuộc khi biên dịch"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "Gặp lỗi khi xử lý các quan hệ phụ thuộc khi biên dịch"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "Gặp lỗi khi phân tích %s. Sửa lại chứ? "
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "Tập tin “%s” của bạn đã thay đổi, hãy chạy lệnh “apt-get update”.\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "Gói %s phiên bản %s có phần phụ thuộc chưa thỏa mãn:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "Lệnh cập nhật không chấp nhận đối số"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"%i gói có thể được cập nhật. Chạy “apt list --upgradable” để xem chúng.\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "Mọi gói đã được cập nhật."
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "Lệnh cập nhật không chấp nhận đối số"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "Tổng các tên gói: "
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "Tổng các cấu trúc gói: "
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " Gói thường: "
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " Gói thuần ảo: "
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " Gói ảo đơn: "
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " Gói ảo hỗn hợp: "
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " Thiếu: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "Tổng phiên bản riêng: "
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "Tổng mô tả riêng: "
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "Tổng gói phụ thuộc: "
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "Tổng liên quan phiên bản và tập tin: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "Tổng quan hệ mô-tả/tập-tin: "
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "Tổng ánh xạ Cung cấp: "
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Tổng chuỗi mở rộng mẫu tìm kiếm: "
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Tổng chỗ trống: "
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "Tổng chỗ đã tính dành cho: "
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+"Lệnh này đã lỗi thời. Xin hãy dùng lệnh “apt-mark showauto” để thay thế."
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "Hiện các bản ghi cho gói nguồn"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "Tìm kiếm danh sách các gói dựa trên biểu thức chính quy"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "Hiện thông tin quan hệ phụ thuộc dạng thô cho gói"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "Hiện thông tin những gói phụ thuộc vào gói này"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "Hiển thị bản ghi có thể đọc cho những gói đó"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "Liệt kê danh sách mọi gói trên hệ thống"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "Hiển thị các cài đặt về chính sách"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "Hãy cung cấp tên cho Đĩa này, kiểu như là: “Debian 5.0.3 Đĩa 1”"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "Hãy đưa đĩa vào ổ rồi bấm nút Enter"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "Gặp lỗi khi gắn “%s” vào “%s”"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"Không tìm thấy CD-ROM bằng cách tự động dò tìm hay sử dụng điểm gắn mặc "
+"định.\n"
+"Bạn có lẽ nên dùng tùy chọn --cdrom để đặt điểm gắn CD-ROM.\n"
+"Xem “man apt-cdrom” để có thêm thông tin về tự động dò tìm CD-ROM và điểm "
+"gắn."
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "Hãy lặp lại tiến trình này cho các Đĩa còn lại trong bộ đĩa của bạn."
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "Các đối số không thành cặp"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"Cách dùng: apt-config [tùy_chọn...] lệnh\n"
+"\n"
+"(config: viết tắt cho từ configuration: cấu hình)\n"
+"\n"
+"apt-config là một công cụ đơn giản để đọc tập tin cấu hình APT.\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"Cách dùng: apt-extracttemplates tập_tin1 [tập_tin2 ...]\n"
+"\n"
+"[extract: rút trích;\n"
+"templates: mẫu]\n"
+"\n"
+"apt-extracttemplates là một công cụ rút thông tin kiểu cấu hình\n"
+"\tvà biểu mẫu đều từ gói Debian\n"
+"\n"
+"Tùy chọn:\n"
+" -h Trợ giúp này\n"
+" -t Đặt thư mục tạm thời\n"
+" [t: viết tắt cho từ “temporary”: tạm thời]\n"
+" -c=? Đọc tập tin cấu hình này\n"
+" -o=? Đặt một tùy chọn cấu hình tùy ý, v.d. “-o dir::cache=/tmp”\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "Không thể lấy phiên bản debconf. Debconf có được cài đặt chưa?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "Không tìm thấy gói %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s được đặt thành “được tự động cài đặt”.\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+"Lệnh này đã lỗi thời. Xin hãy dùng lệnh “apt-mark auto” và “apt-mark manual” "
+"để thay thế."
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "Lỗi nội bộ: bộ tháo gỡ vấn đề đã ngắt gì"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "Hỗ trợ các mô-đun:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"Cách dùng: apt-get [tùy_chọn...] lệnh\n"
+" apt-get [tùy_chọn...] install|remove gói1 [gói2 ...]\n"
+" apt-get [tùy_chọn...] source gói1 [gói2 ...]\n"
+"\n"
+"get: lấy\n"
+"install: cài đặt\n"
+"remove: gỡ bỏ\n"
+"source: nguồn\n"
+"\n"
+"apt-get là một giao diện dòng lệnh đơn giản dùng để tải về và cài đặt gói "
+"phần mềm.\n"
+"Những lệnh được dùng thường nhất là update (cập nhật) và install (cài đặt).\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "Lấy danh sách gói mới (cập nhật cơ sở dữ liệu)"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "Nâng cấp lên phiên bản mới hơn"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "Cài đặt gói mới (gói có dạng libc6 không phải libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "Cài đặt gói mới (gói có dạng libc6 không phải libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "Gỡ bỏ gói phần mềm"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "Gỡ bỏ và tẩy xóa gói"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "Tự động gỡ bỏ tất cả các gói không dùng"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "Nâng cấp hệ điều hành lên phiên bản mới hơn, hãy xem apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "Cho phép chọn dselect"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "Cấu hình quan hệ phụ thuộc khi biên dịch, cho gói nguồn"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "Xóa các tập tin kho đã tải về (dọn dẹp thư mục lưu trữ)"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "Xóa các tập tin kho cũ đã tải về (tự động làm sạch)"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "Kiểm tra xem có quan hệ phụ thuộc bị sai không"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "Tải về kho nguồn"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "Tải về gói phần mềm vào thư mục hiện hành"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "Tải về và hiển thị các thay đổi cho gói đã cho"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "Cần một URL làm đối số"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "Phải chỉ định ít nhất một cặp url/tên-tập-tin"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "Gặp lỗi khi tải về"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"Cách dùng: apt-helper [các-tùy-chọn] lệnh\n"
+" apt-helper [các-tùy-chọn] download-file uri đường-dẫn-đích\n"
+"\n"
+"apt-helper là phần trợ giúp dành cho apt\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "tải về uri đã cho về đường-dẫn-đích"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "dò tìm proxy dùng apt.conf"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"Cách dùng: apt-internal-solver\n"
+"\n"
+"apt-internal-solver là một giao diện để dùng cho bộ phân giải nội bộ\n"
+"hiện tại giống như bộ phân giải bên ngoài dành cho họ chương trình APT\n"
+"để phục vụ cho việc gỡ lỗi hay tương tự thế\n"
+"\n"
+"Tùy chọn:\n"
+" -h Trợ giúp này.\n"
+" -q Làm việc ở chế độ im lặng - không hiển thị tiến triển công việc\n"
+" -c=? Đọc tập tin cấu hình này\n"
+" -o=? Đặt một tùy chọn cấu hình tùy ý, v.d. “-o dir::cache=/tmp”\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"Cách dùng: apt-internal-solver\n"
+"\n"
+"apt-internal-solver là một giao diện để dùng cho bộ phân giải nội bộ\n"
+"hiện tại giống như bộ phân giải bên ngoài dành cho họ chương trình APT\n"
+"để phục vụ cho việc gỡ lỗi hay tương tự thế\n"
+"\n"
+"Tùy chọn:\n"
+" -h Trợ giúp này.\n"
+" -q Làm việc ở chế độ im lặng - không hiển thị tiến triển công việc\n"
+" -c=? Đọc tập tin cấu hình này\n"
+" -o=? Đặt một tùy chọn cấu hình tùy ý, v.d. “-o dir::cache=/tmp”\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "không thể đánh dấu %s như là nó chưa được cài đặt.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s được đặt thành được cài đặt bằng tay.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s đã sẵn được đặt thành cài đặt tự động rồi.\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "Những gói MỚI sau sẽ được CÀI ĐẶT:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s đã sẵn được đặt là giữ lại.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s đã sẵn được đặt là không giữ lại.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+"Thực thi lệnh “dpkg” gặp lỗi. Bạn có cần quyền siêu người dùng để thực thi "
+"lệnh này"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s được đặt là giữ lại.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "Hủy bỏ nắm giữ %s.\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"Cách dùng: apt-mark [tùy-chọn...] {auto|manual} gói1 [gói2 ...]\n"
+"\n"
+"apt-mark là câu lệnh đơn giản được dùng để đánh dấu các gói là\n"
+"được cài đặt tự động hay bằng tay. Nó còn có thể liệt kê danh sách các đánh "
+"dấu.\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "Đánh dấu các gói đưa ra là được cài đặt tự động"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "Đánh dấu các gói đưa ra là được cài đặt bằng tay"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "Đánh dấu các gói đưa ra là được cài đặt tự động"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "Đánh dấu một gói là giữ lại"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "Bỏ đánh dấu một gói là giữ lại"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "In ra danh sách các gói được tự động cài đặt"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "In ra danh sách các gói được cài đặt bằng tay"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "In ra danh sách các gói được giữ lại"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "Không hiểu bản ghi gói!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "liệt kê các gói dựa trên cơ sở là tên gói"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "tìm trong phần mô tả của gói"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "hiển thị thông tin chi tiết về gói"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "cài đặt các gói"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "cài đặt các gói"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "gỡ bỏ các gói"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "cập nhật danh sánh các gói sẵn có"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "nâng cấp các gói trong hệ thống"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "nâng cấp hệ thống bằng cách gỡ bỏ, cài đặt, nâng cấp các gói"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "sửa tập tin thông tin gói nguồn"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "Cài đặt mặc định sai!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "Bấm phím Enter để tiếp tục."
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "Bạn có muốn xoá mọi tập tin .deb đã được tải về trước đây không?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "Gặp một số lỗi trong khi giải nén. Những gói đã được cài đặt"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "sẽ cũng được cấu hình. Việc này có thể sẽ gây ra lỗi trùng lặp"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "hoặc lỗi do quan hệ phụ thuộc chưa thoả. Trường hợp này vẫn đúng,"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr ""
+"chỉ những lỗi bên trên thông điệp này là quan trọng. Hãy sửa chữa, sau đó "
+"chạy lại lệnh cà[I] đặt."
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "Đang hòa trộn các thông tin sẵn có..."
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "Danh sách mở rộng gói quá dài"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "Gặp lỗi khi xử lý thư mục %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "Danh sách mở rộng nguồn quá dài"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "Gặp lỗi khi ghi phần đầu vào tập tin nộị dung"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "Gặp lỗi khi xử lý nội dung %s"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"Cách dùng: apt-ftparchive [tùy_chọn...] lệnh\n"
+"\n"
+"[ftparchive: FTP archive: kho FTP]\n"
+"\n"
+"Lệnh: packages binarypath [tập_tin_đè [tiền_tố_đường_dẫn]]\n"
+" sources srcpath [tập_tin_đè[tiền_tố_đường_dẫn]]\n"
+" contents path\n"
+" release path\n"
+" generate config [các_nhóm]\n"
+" clean config\n"
+"\n"
+"(packages: những gói;\n"
+"binarypath: đường dẫn nhị phân;\n"
+"sources: những nguồn;\n"
+"srcpath: đường dẫn nguồn;\n"
+"contents path: đường dẫn nội dung;\n"
+"release path: đường dẫn bản đã phát hành;\n"
+"generate config [groups]: tạo ra cấu hình [các nhóm];\n"
+"clean config: cấu hình toàn mới)\n"
+"\n"
+"apt-ftparchive (kho ftp) thì tạo ra tập tin chỉ mục cho kho Debian.\n"
+"Nó hỗ trợ nhiều cách tạo ra, từ cách tự động hoàn toàn\n"
+"đến cách thay thế hàm cho dpkg-scanpackages (dpkg-quét_gói)\n"
+"và dpkg-scansources (dpkg-quét_nguồn).\n"
+"\n"
+"apt-ftparchive tạo ra tập tin Gói ra cây các .deb.\n"
+"Tập tin gói chứa nội dung các trường điều khiển từ mỗi gói,\n"
+"cùng với băm MD5 và kích cỡ tập tin.\n"
+"Hỗ trợ tập tin đè để buộc giá trị Ưu tiên và Phần\n"
+"\n"
+"Tương tự, apt-ftparchive tạo ra tập tin Nguồn ra cây các .dsc\n"
+"Có thể sử dụng tùy chọn “--source-override” (đè nguồn)\n"
+"để ghi rõ tập tin đè nguồn\n"
+"\n"
+"Lệnh “packages” (gói) và “sources” (nguồn) nên chạy tại gốc cây.\n"
+"BinaryPath (đường dẫn nhị phân) nên chỉ tới cơ bản của việc tìm kiếm đệ "
+"quy,\n"
+"và tập tin đè nên chứa những cờ đè.\n"
+"Pathprefix (tiền tố đường dẫn) được phụ thêm vào\n"
+"những trường tên tập tin nếu có.\n"
+"Cách sử dụng thí dụ từ kho Debian:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Tùy chọn:\n"
+" -h _Trợ giúp_ này\n"
+" --md5 Điều khiển cách tạo ra MD5\n"
+" -s=? Tập tin đè nguồn\n"
+" -q _Im lặng_ (không xuất chi tiết)\n"
+" -d=? Chọn _cơ sở dữ liệu_ nhớ tạm tùy chọn\n"
+" --no-delink Mở chế độ gỡ lỗi _bỏ liên kết_\n"
+" --contents Điều khiển cách tạo ra tập tin _nội dung_\n"
+" -c=? Đọc tập tin cấu hình này\n"
+" -o=? Đặt một tùy chọn cấu hình tùy ý, v.d. “-o dir::cache=/tmp”"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "Không có cái được chọn khớp được"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "Thiếu một số tập tin trong nhóm tập tin gói “%s”."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "Cơ sở dữ liệu bị hỏng nên đã đổi tên tập tin thành %s.old (old: cũ)."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "Cơ sở dữ liệu đã cũ, nên đang cố nâng cấp lên thành %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"Định dạng cơ sở dữ liệu không hợp lệ. Nếu bạn đã nâng cấp từ một phiên bản "
+"apt cũ, hãy gỡ bỏ nó và sau đó tạo lại cơ sở dữ liệu."
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "Không thể mở tập tin cơ sở dữ liệu %s: %s."
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "Gặp lỗi khi đọc .dsc"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "Kho không có mục ghi điều khiển"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "Không thể lấy con trỏ"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc (cấp phát lại) - việc cấp phát bộ nhớ bị lỗi"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "Không biết thuật toán nén “%s”"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "Dữ liệu xuất đã nén %s cần một bộ nén"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "Gặp lỗi khi tạo ống IPC đến tiến trình con"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "Gặp lỗi khi rẽ nhánh tiến trình"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "Nén con"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "Lỗi nội bộ, gặp lỗi khi tạo %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "Gặp lỗi khi nhập/xuất vào tiến-trình-con/tập-tin"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "Gặp lỗi khi đọc trong khi tính MD5"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "Không thể mở %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "Sai “override” %s dòng %llu (%s)"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "Việc đọc tập tin đè %s bị lỗi"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "Sai override %s dòng %llu #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "Sai override %s dòng %llu #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "Sai override %s dòng %llu #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "CB: Không thể đọc thư mục %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "CB: Không thể lấy thông tin thống kê %s\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "L: "
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "CB: "
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "LỖI: có lỗi áp dụng vào tập tin "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "Gặp lỗi khi phân giải %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "Việc di chuyển qua cây bị lỗi"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "Gặp lỗi khi mở %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " Bỏ liên kết %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** Gặp lỗi khi liên kết %s đến %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " Hết hạn bỏ liên kết của %sB.\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "Kho không có trường gói"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s không có mục ghi đè (override)\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " người bảo trì %s là %s không phải %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s không có mục ghi đè (override) nguồn\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s cũng không có mục ghi đè (override) nhị phân\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "Đang đợi phần đầu dữ liệu..."
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "Máy phục vụ HTTP đã gửi một dòng đầu trả lời không hợp lệ"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "Dòng đầu sai"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr ""
+"Máy phục vụ HTTP đã gửi một dòng đầu Content-Length (độ dài nội dung) không "
+"hợp lệ"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr ""
+"Máy phục vụ HTTP đã gửi một dòng đầu Content-Range (phạm vi nội dung) không "
+"hợp lệ"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "Máy phục vụ HTTP không hỗ trợ tải một phần tập tin"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "Không rõ định dạng ngày"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "Dữ liệu phần đầu sai"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "Kết nối bị lỗi"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "Gặp lỗi nội bộ"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "Không thể đọc cơ sở dữ liệu đĩa CD-ROM %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"Hãy sử dụng lệnh “apt-cdrom” để làm cho APT chấp nhận đĩa CD này. Không thể "
+"sử dụng lệnh “apt-get update” (cập nhật cơ sở dữ liệu) để thêm đĩa CD mới."
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "CD-ROM sai"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "Không thể bỏ gắn đĩa CD-ROM trong %s. Có lẽ nó vẫn đang được dùng."
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "Không tìm thấy đĩa."
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "Không tìm thấy tập tin"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[Địa chỉ IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "Đang kết nối đến %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "Đang kết nối đến %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "Không thể tạo ổ cắm cho %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "Không thể khởi tạo kết nối đến %s:%s (%s)."
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "Gặp lỗi"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "Không thể kết nối đến %s:%s (%s)."
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "Không thể kết nối đến %s:%s (%s), kết nối bị quá giờ"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "Đang kết nối đến %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "Không thể phân giải “%s”"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "Việc phân giải “%s” bị lỗi tạm thời"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "Lỗi hệ thống khi phân giải “%s:%s”"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "Một số hư hỏng đã xảy ra khi phân giải “%s:%s” (%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "Không thể kết nối đến %s: %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "Gặp lỗi khi lấy thống kê"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "Địa chỉ URI không hợp lệ, URI nội bộ không thể bắt đầu bằng “//”"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "Đang đăng nhập vào"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "Không thể quyết định tên ngang hàng"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "Không thể phân giải tên cục bộ"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "Máy phục vụ đã từ chối kết nối, và đã nói: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "Lệnh USER (người dùng) đã thất bại: máy chủ nói: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "Lệnh PASS (mật khẩu) đã thất bại: máy chủ nói: %s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"Đã ghi rõ máy phục vụ ủy nhiệm, nhưng mà chưa ghi rõ tập lệnh đăng nhập. "
+"“Acquire::ftp::ProxyLogin” là rỗng."
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "Văn lệnh đăng nhập “%s” đã thất bại: máy chủ nói: %s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "Lệnh TYPE (kiểu) đã thất bại: máy chủ nói: %s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "Thời hạn kết nối"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "Máy phục vụ đã đóng kết nối"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "Một trả lời đã tràn bộ đệm."
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "Giao thức bị hỏng"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "Không thể tạo ổ cắm"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "Không thể kết nối ổ cắm dữ liệu, kết nối đã quá giờ"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "Không thể kết nối ổ cắm bị động."
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo (lấy thông tin địa chỉ) không thể lấy ổ cắm lắng nghe"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "Không thể ràng buộc ổ cắm"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "Không thể lắng nghe trên ổ cắm đó"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "Không thể quyết định tên ổ cắm đó"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "Không thể gửi lệnh PORT (cổng)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "Không biết họ địa chỉ %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "Lệnh EPRT (thông báo lỗi) đã thất bại: máy chủ nói: %s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Quá giờ kết nối ổ cắm dữ liệu"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "Không thể chấp nhận kết nối"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "Gặp vấn đề băm tập tin"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "Không thể lấy tập tin: máy phục vụ nói “%s”"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Ổ cắm dữ liệu đã quá giờ"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "Việc truyền dữ liệu bị lỗi: máy phục vụ nói “%s”"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "Truy vấn"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "Không thể gọi "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, fuzzy, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+"Tập tin Clearsigned không hợp lệ, nhận được “%s” (mạng yêu cầu xác nhận phải "
+"không?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "Gặp ít nhất một chữ ký không hợp lệ."
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "Lỗi nội bộ: Chữ ký đúng, nhưng không thể xác định vân tay của khóa?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr ""
+"Không thể thực hiện “apt-key” để thẩm tra chữ ký (gnupg đã được cài đặt "
+"chưa?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "Gặp lỗi không rõ khi thực hiện apt-key"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "Những chữ ký theo đây không hợp lệ:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+"Không thể kiểm chứng những chữ ký theo đây, vì khóa công không sẵn có:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "Gặp lỗi khi ghi vào tập tin"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "Gặp lỗi khi đọc từ máy phục vụ: Máy chủ đã đóng kết nối"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "Gặp lỗi khi đọc từ máy phục vụ"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "Gặp lỗi khi ghi vào tập tin"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "Việc chọn bị lỗi"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "Kết nối đã quá giờ"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "Gặp lỗi khi ghi vào tập tin đầu ra"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "Gặp lỗi khi đặt giờ sửa đổi"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "Kết nối bị đóng bất ngờ"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "Các tập tin trống rỗng không phải là kho lưu hợp lệ"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "Phần đầu thành viên kho lưu không hợp lệ %s"
+
+#~ msgid "Removed %s"
+#~ msgstr "Đã gỡ bỏ %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "Tập tin gói %s không đồng bộ được."
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr ""
+#~ "Các tập tin chỉ mục của gói này bị hỏng. Không có trường Filename: (Tên "
+#~ "tập tin:) cho gói %s."
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "Không tìm thấy tập tin bản sao “%s” "
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Không thể đọc tập tin bản sao “%s”"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "Không tìm thấy điểm vào trong tập tin bản sao “%s”"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[Bản sao: %s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "Đang mở tập tin cấu hình %s..."
+
+#~ msgid "Opening %s"
+#~ msgstr "Đang mở %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Không tìm thấy mục cần thiết “%s” trong tập tin Phát hành (Sai mục trong "
+#~ "sources.list hoặc tập tin bị hỏng)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr ""
+#~ "Chưa thỏa mãn quan hệ phụ thuộc. Hãy thử dùng tùy chọn “--fix-broken”."
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr ""
+#~ "Có lẽ bạn cần chạy lệnh “apt --fix-broken install” để sửa những cái đó:"
+
+#~ msgid "(not found)"
+#~ msgstr "(không tìm thấy)"
+
+#~ msgid " Package pin: "
+#~ msgstr " Ghim gói: "
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "Không có khóa công sẵn sàng cho những mã số khoá theo đây:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "Thư mục %s bị trệch hướng"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "Phần phụ thuộc %s cho %s không ổn thỏa bởi vì %s không được cho phép trên "
+#~ "gói “%s”"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr ""
+#~ "Phần phụ thuộc %s cho %s không thể được thỏa mãn vì không tìm thấy gói %s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr ""
+#~ "Việc cố thỏa mãn quan hệ phụ thuộc %s cho %s bị lỗi vì gói đã cài đặt %s "
+#~ "là quá mới"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "phần phụ thuộc %s cho %s không thể được thỏa mãn phiên bản ứng cử của gói "
+#~ "%s có thể thỏa mãn điều kiện phiên bản"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr ""
+#~ "phần phụ thuộc %s cho %s không thể được thỏa mãn bởi vì gói %s không có "
+#~ "bản ứng cử"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "Việc cố thỏa cách phụ thuộc %s cho %s bị lỗi: %s."
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "Không thể thỏa mãn quan hệ phụ thuộc khi biên dịch cho %s."
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "Gặp lỗi khi bỏ liên kết %s"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "Việc bỏ liên kết %s bị lỗi"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "Cách dùng: apt-cache [tùy_chọn...] lệnh\n"
+#~ " apt-cache [tùy_chọn...] show gói1 [gói2 ...]\n"
+#~ "\n"
+#~ "apt-cache là một công cụ ở mức thấp dùng để truy vấn\n"
+#~ "thông tin từ các tập tin bộ nhớ tạm nhị phân của APT.\n"
+
+#~ msgid "Commands:"
+#~ msgstr "Các lệnh:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "Tùy chọn:\n"
+#~ " -h Hiển thị trợ giúp này.\n"
+#~ " -p=? Bộ nhớ tạm gói.\n"
+#~ " -s=? Bộ nhớ tạm nguồn.\n"
+#~ " -q Không hiển thị diễn tiến công việc.\n"
+#~ " -i Chỉ hiển thị những phụ thuộc quan trọng cho lệnh unmet.\n"
+#~ " -c=? Đọc tập tin cấu hình này\n"
+#~ " -o=? Đặt một tùy chọn cấu hình tùy ý, v.d. -o dir::cache=/tmp\n"
+#~ "Để tìm thông tin thêm, xem hai trang hướng dẫn\n"
+#~ " apt-cache(8) và apt.conf(5).\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "Cách dùng: apt [các tùy chọn] lệnh\n"
+#~ "\n"
+#~ "CLI (giao diện dòng lệnh) dành cho apt.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "Tùy chọn:\n"
+#~ " -h Trợ giúp này.\n"
+#~ " -q Dữ liệu xuất có thể ghi nhật ký - không hiển thị diễn biến công "
+#~ "việc\n"
+#~ " -qq Không xuất thông tin nào, trừ lỗi\n"
+#~ " -s Không làm gì chỉ in những cái sẽ làm.\n"
+#~ " -f đánh dấu đọc/ghi tự-động/thủ-công trong tập tin đã cho.\n"
+#~ " -c=? Đọc tập tin cấu hình này\n"
+#~ " -o=? Đặt một tùy chọn cấu hình tùy ý, v.d. -o dir::cache=/tmp\n"
+#~ "Để tìm thông tin thêm, xem hai trang man (hướng dẫn)\n"
+#~ " apt-mark(8) và apt.conf(5)"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Tùy chọn:\n"
+#~ " -h Trợ giúp này\n"
+#~ " -c=? Đọc tập tin cấu hình này\n"
+#~ " -o=? Đặt một tùy chọn cấu hình tùy ý, ví dụ -o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "Tùy chọn:\n"
+#~ " -h Trợ giúp này.\n"
+#~ " -q Dữ liệu xuất có thể ghi nhật ký - không hiển thị diễn biến công "
+#~ "việc\n"
+#~ " -qq Không xuất thông tin nào, trừ lỗi\n"
+#~ " -s Không làm gì chỉ in những cái sẽ làm.\n"
+#~ " -f đánh dấu đọc/ghi tự-động/thủ-công trong tập tin đã cho.\n"
+#~ " -c=? Đọc tập tin cấu hình này\n"
+#~ " -o=? Đặt một tùy chọn cấu hình tùy ý, v.d. -o dir::cache=/tmp\n"
+#~ "Để tìm thông tin thêm, xem hai trang man (hướng dẫn)\n"
+#~ " apt-mark(8) và apt.conf(5)"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "Cách dùng: apt-sortpkgs [tùy_chọn...] tập_tin1 [tập_tin2 ...]\n"
+#~ "\n"
+#~ "[sortpkgs: sort packages: sắp xếp các gói]\n"
+#~ "\n"
+#~ "apt-sortpkgs là một công cụ đơn giản để sắp xếp tập tin gói.\n"
+#~ "Tùy chọn “-s” dùng để ngầm chỉ kiểu tập tin là gì.\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ " -h Trợ giúp_ này\n"
+#~ " -s Sắp xếp những tập tin _nguồn_\n"
+#~ " -c=? Đọc tập tin cấu hình này\n"
+#~ " -o=? Đặt tùy chọn cấu hình tùy ý, v.d. “-o dir::cache=/tmp”\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "Tiến trình con bị lỗi"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "Phải chỉ định ít nhất một cặp url/tên-tập-tin"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "Gặp lỗi khi tạo các đường ống dẫn lệnh"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "Việc thực hiện gzip bị lỗi "
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s-%s được biên dịch cho %s vào lúc “%s %s”\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "Việc tạo TẬP_TIN* bị lỗi"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "Gặp đoạn sai dạng %u trong danh sách nguồn %s (ngữ pháp URI)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr ""
+#~ "Gặp dòng có sai dạng %lu trong danh sách nguồn %s ([tùy chọn] không thể "
+#~ "phân tích được)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr ""
+#~ "Gặp dòng sai dạng %lu trong danh sách nguồn %s ([tùy chọn] quá ngắn)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr ""
+#~ "Gặp dòng sai dạng %lu trong danh sách nguồn %s ([%s] không phải là một "
+#~ "phép gán)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr ""
+#~ "Gặp dòng sai dạng %lu trong danh sách nguồn %s ([%s] không có khoá nào)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr ""
+#~ "Gặp dòng sai dạng %lu trong danh sách nguồn %s (khoá [%s] %s không có giá "
+#~ "trị)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "Gặp dòng sai dạng %lu trong danh sách nguồn %s (địa chỉ URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "Gặp dòng sai dạng %lu trong danh sách nguồn %s (bản phân phối)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "Gặp dòng sai dạng %lu trong danh sách nguồn %s (ngữ pháp URI)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr ""
+#~ "Gặp dòng sai dạng %lu trong danh sách nguồn %s (bản phân phối tuyệt đối)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr ""
+#~ "Gặp dòng sai dạng %lu trong danh sách nguồn %s (phân tách bản phân phối)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "Không tìm thấy gói %s %s khi xử lý quan hệ phụ thuộc của tập tin"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "Không thể lấy các thông tin về danh sách gói nguồn %s"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "Đang tập hợp các Nhà cung cấp Tập tin"
+
+#, fuzzy
+#~ msgid "Does not start with a cleartext signature"
+#~ msgstr "Tập tin %s không bắt đầu bằng một đoạn chữ ký (gpg)"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "Không thể tìm thấy mã băm tổng kiểm tra cho tập tin Phát hành %s"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "Khối nhà bán %s không chứa vân tay"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "Tổng chỗ phiên bản phụ thuộc: "
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "Không đủ chỗ trống trên %s"
+
+#~ msgid "Done"
+#~ msgstr "Xong"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "Không có vòng khoá nào được cài đặt vào %s."
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "Đầu ra là thiết bị cuối?"
+
+#~ msgid "ioctl(TIOCGWINSZ) failed"
+#~ msgstr "ioctl(TIOCGWINSZ) gặp lỗi"
+
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "Lỗi nội bộ: Lệnh nâng cấp đã làm hỏng thứ gì đó"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s không phải là một gói DEB hợp lệ."
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "Đang dùng thư mục gắn đĩa CD-ROM %s\n"
+#~ "Đang gắn đĩa CD-ROM...\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Không thể vá %s dùng mmap và cách sử dụng tập tin: có vẻ là miếng vá bị "
+#~ "hỏng."
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr ""
+#~ "Không thể vá %s dùng mmap (mà không có lỗi đặc trưng cho mmap): có vẻ là "
+#~ "miếng vá bị hỏng."
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "Bỏ qua bản phát hành đích không sẵn sàng “%s” của gói “%s”"
+
+#~ msgid "Downloading %s %s"
+#~ msgstr "Đang tải về %s %s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr ""
+#~ "Đây không phải là một kho DEB hợp lệ vì không có thành viên “%s”, “%s” "
+#~ "hay “%s”"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "Mã băm tổng kiểm MD5Sum không khớp"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "Không tìm thấy tập tin liên quan đến gói %s. Có lẽ bạn cần phải tự sửa "
+#~ "gói này."
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr "Không thể ghi nhật ký, openpty() bị lỗi (“/dev/pts” chưa gắn?)\n"
+
+#~ msgid ""
+#~ "A error occurred during the signature verification. The repository is not "
+#~ "updated and the previous index files will be used. GPG error: %s: %s\n"
+#~ msgstr ""
+#~ "Gặp lỗi trong khi thẩm tra chữ ký.\n"
+#~ "Kho lưu chưa được cập nhật nên dùng những tập tin chỉ mục trước.\n"
+#~ "Lỗi GPG: %s: %s\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "Đang bỏ qua tập tin không tồn tại %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "Việc gỡ bỏ %s bị lỗi"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "Không thể tạo %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "Việc lấy các thông tin về %sinfo bị lỗi"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr ""
+#~ "Những thư mục info (thông tin) và temp (tạm thời) cần phải trong cùng một "
+#~ "hệ thống tập tin"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "Việc chuyển đổi sang thư mục quản lý %sinfo bị lỗi"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "Gặp lỗi nội bộ khi lấy tên gói"
+
+#~ msgid "Reading file listing"
+#~ msgstr "Đang đọc danh sách tập tin..."
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "Việc mở tập tin danh sách “%sinfo/%s” bị lỗi. Nếu bạn không thể phục hồi "
+#~ "tập tin này, bạn hãy làm cho nó rỗng và ngay cài đặt lại cùng phiên bản "
+#~ "gói."
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "Việc đọc tập tin danh sách %sinfo/%s bị lỗi"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "Gặp lỗi nội bộ khi lấy nút điểm..."
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "Việc mở tập tin trệch đi %sdiversions bị lỗi"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "Tập tin trệch đi bị hỏng"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "Gặp dòng không hợp lệ trong tập tin trệch đi: %s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "Gặp lỗi nội bộ khi thêm một sự trệch đi"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "Phải khởi động bộ nhớ tạm gói trước hết"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "Lỗi tìm thấy Gói: phần đầu, hiệu số %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr ""
+#~ "Có phần cấu hình tập tin (ConfFile) sai trong tập tin trạng thái. Hiệu số "
+#~ "%lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "Gặp lỗi khi phân tách MD5. Hiệu số %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "Không thể chuyển đổi sang %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "Việc định vị tập tin điều khiển hợp lệ bị lỗi"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "Không thể mở ống dẫn cho %s"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "Gặp lỗi đọc từ tiến trình %s"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "Đã lấy một dòng đầu riêng lẻ chứa hơn %u ky tự"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "Ghi chú: thay đổi này được tự động làm bởi dpkg."
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "Điều đè sai dạng %s dòng %lu #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "Điều đè sai dạng %s dòng %lu #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "Điều đè sai dạng %s dòng %lu #3"
+
+#~ msgid "decompressor"
+#~ msgstr "bộ giải nén"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "đọc, còn cần đọc %lu nhưng mà không có gì còn lại"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "ghi, còn cần ghi %lu nhưng mà không thể"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "Không thể thực hiện ngay lập tức tiến trình cấu hình “%s” đã giải nén. "
+#~ "Xem “man 5 apt.conf ” dưới “APT::Immediate-Configure” để tìm chi tiết."
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewPackage - gói mới)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "Gặp lỗi khi xử lý %s (UsePackage1 - dùng gói 1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewFileDesc1 - tập tin mô tả mới 1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "Gặp lỗi khi xử lý %s (UsePackage2 - dùng gói 2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewFileVer1 - tập tin mới, phiên bản 1)"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewVersion%d)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "Gặp lỗi khi xử lý %s (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "Gặp lỗi khi xử lý %s (FindPkg - tìm gói)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr ""
+#~ "Gặp lỗi khi xử lý %s (CollectFileProvides - tập hợp các trường hợp miễn "
+#~ "là một tập tin)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "Gặp lỗi nội bộ, không thể định vị thành viên"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Gặp lỗi nội bộ, nhóm “%s” không có gói giả có thể cài đặt"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Tập tin phát hành đã hết hạn nên bỏ qua %s (không hợp lệ kể từ %s)"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "Dòng %d quá dài (tối đa là %lu)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewVersion%d)"
+
+#, fuzzy
+#~ msgid "Processing triggers for %s"
+#~ msgstr "Gặp lỗi khi xử lý thư mục %s"
+
+#, fuzzy
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "Dòng %u quá dài trong danh sách nguồn %s."
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewFileDesc1 - tập tin mô tả mới 1)"
+
+#, fuzzy
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "Gặp lỗi khi xử lý %s (NewFileDesc2)"
+
+#, fuzzy
+#~ msgid "openpty failed\n"
+#~ msgstr "Việc chọn bị lỗi"
+
+#, fuzzy
+#~ msgid "File date has changed %s"
+#~ msgstr "Không thể chuyển đổi sang %s"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..8a4e5f4
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,4364 @@
+# Chinese/Simplified translation of apt.
+# This file is put in the public domain.
+# Deng Xiyue <manphiz-guest@users.alioth.debian.org>, 2007, 2008.
+# Tchaikov <tchaikov@sjtu.org>, 2005, 2007.
+# Carlos Z.F. Liu <carlosliu@users.sourceforge.net>, 2004, 2006.
+# Aron Xu <happyaron.xu@gmail.com>, 2009, 2010.
+# Mo Zhou <cdluminate@gmail.com>, 2014, 2015, 2016, 2017, 2019.
+# Boyuan Yang <073plan@gmail.com>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.7.x\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2019-01-12 00:00+0000\n"
+"Last-Translator: Mo Zhou <cdluminate@gmail.com>\n"
+"Language-Team: Chinese (simplified) <debian-l10n-chinese@lists.debian.org>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.0.8\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "无效的归档签名"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "读取归档成员文件头出错"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "归档文件中成员文件头无效"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "归档文件太短"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "无法读取归档文件的数据头"
+
+#: apt-inst/contrib/extracttar.cc
+#, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "找不到对应于 '%s' 的已配置压缩工具"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "包文件已被损坏"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar 的校验和不符,文件已损坏"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "未知的 TAR 数据头类型 %u,成员 %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "这不是一个有效的 DEB 包文件,其包内遗漏了“%s”"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "内部错误,无法定位包内文件 %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "不能解析的主控文件"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "无法写入文件 %s"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "无法关闭文件 %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "路径名 %s 太长"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "%s 被解压了不只一次"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "目录 %s 已被转移"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "该软件包正尝试写入转移对象 %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "该转移路径太长"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "无法获得 %s 的状态"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "无法将 %s 重命名为 %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "目录 %s 要被一个非目录的文件替换"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "无法在其散列桶中分配节点"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "路径名太长"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "用来覆盖的软件包不属于 %s 的任何版本"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "文件 %s/%s 会覆盖属于软件包 %s 中的同名文件"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "无法读取 %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "无法读取 %s 的状态"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "把 DropNode 用在了仍在链表中的节点上"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "无法定位哈希表元素!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "无法分配转移项"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "内部错误,出现在 AddDiversion"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "尝试覆盖一个转移项,%s -> %s 和 %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "添加了两个转移项 %s-> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "重复的配置文件 %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr "无法安全地用该源进行更新,所以默认禁用该源。"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr "无法认证来自该源的数据,所以使用它会带来潜在风险。"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr "参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "仓库 “%s” 的签名不再生效。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "仓库 “%s” 不再含有 Release 文件。"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+"一般不可以这样做,但选项 Acquire:: AllowDowngradeToInsecureRepositories 可以"
+"用于覆盖默认设置。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' is not signed."
+msgstr "仓库 “%s” 没有数字签名。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "仓库 “%s” 没有 Release 文件。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "仓库 '%s' 只提供了低强度的安全信息。"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "无法读取符号链接 %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hash 校验和不符"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr "可用信息不足,不能安全执行本次下载"
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "无法重命名文件,%s (%s -> %s)。"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "大小不符"
+
+#: apt-pkg/acquire-item.cc
+msgid "Invalid file format"
+msgstr "无效的文件格式 %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Signature error"
+msgstr "数字签名错误"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr "明文签署文件不可用,结果为‘%s’(您的网络需要认证吗?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+"校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:"
+"%s: %s"
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr "GPG 错误:%s: %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+"鉴于仓库 '%2$s' 不含有 '%3$s' 组件,跳过配置文件 '%1$s' 的获取。(sources."
+"list 中的组件名称是否拼写错误?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr "鉴于仓库 '%2$s' 不支持 '%3$s' 体系结构,跳过配置文件 '%1$s' 的获取。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+"鉴于仓库 '%2$s' 不提供配置文件 '%1$s' ,跳过其获取过程。(sources.list 中是否"
+"有拼写错误?)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr "鉴于仓库 '%2$s' 提供的安全信息强度太低,跳过配置文件 '%1$s' 的获取"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+"%s 的 Release 文件已经过期(自 %s 起处于无效状态)。该仓库的更新将不会应用。"
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr "%s 的 Release 文件已经过期(已经过期了 %s)。该仓库的更新将不会应用。"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "冲突的发行版:%s (期望 %s 但得到 %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr "仓库'%s'将其'%s'值从'%s'修改到了'%s'"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr "仓库'%s'将其'%s'的默认优先级从'%hi'修改到了'%hi'。"
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr "更多有关细节可以阅览在线发行注记:%s"
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+"为了让这个仓库能够应用,这必须在更新之前显式接受。更多细节请参阅 %s 手册。"
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "无法下载 %s %s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"我无法找到一个对应 %s 软件包的文件。在这种情况下可能需要您手动修正这个软件"
+"包。(缘于架构缺失)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr "没有源可以用来下载 %s 版本的 %s"
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "%s=%s 的 Changelog 不可用"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr "方法‘%s’已经被显式设置为禁用。"
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr "如果您需要使用Tor,请确认使用%s而不是%s。"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "无法找到获取软件包的渠道 %s 所需的驱动程序。"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Is the package %s installed?"
+msgstr "是否安装了 %s 软件包?"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "获取软件包的渠道 %s 所需的驱动程序没有正常启动"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "请把标有 “%s” 的盘片插入驱动器 “%s” 再按「回车键」。"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, c-format
+msgid "List directory %s is missing."
+msgstr "软件包列表的目录 %s 缺失。"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Archives directory %s is missing."
+msgstr "仓库目录 %s 确实。"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Unable to lock directory %s"
+msgstr "无法对目录 %s 加锁"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr "系统中不存在沙箱用户'%s',无法降低权限"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr "由于文件'%s'无法被用户'%s'访问,已脱离沙盒并提权为根用户来进行下载。"
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, c-format
+msgid "Clean of %s is not supported"
+msgstr "%s 的 Clean (清理)不被支持"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "正在下载第 %li 个文件,共 %li 个(还剩 %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "正在下载第 %li 个文件,共 %li 个"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "软件包 %s 需要重新安装,但是我无法找到相应的安装文件。"
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"错误,pkgProblemResolver::Resolve 发生故障,这可能是有软件包被要求保持现状的"
+"缘故。"
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr ""
+"无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关"
+"系。"
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "无法解析或打开软件包的列表或是状态文件。"
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "您可能需要运行 apt-get update 来解决这些问题"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "无法读取源列表。"
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "编译正则表达式时出错 - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "未找到“%2$s”的“%1$s”发布版本"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "未找到“%2$s”的“%1$s”版本"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find task '%s'"
+msgstr "无法找到任务 %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "无法按照正则表达式 %s 找到任何软件包"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "无法按照 glob ‘%s’ 找到任何软件包"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "无法定位软件包 %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr "无法从完全虚拟的软件包 %s 中选择版本"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr "因为软件包 %s 是完全的虚拟软件包,无法选择它的最新版"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr "因为软件包 %s 没有候选版本,无法进行选择"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr "因为软件包 %s 没有安装,无法选择它的已安装版本"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr "因为软件包 %s 没有已安装或候选的版本,无法进行选择"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "源列表 %2$s 的第 %1$u 行太长了。"
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "正在卸载 CD-ROM...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "现把 %s 作为了 CD-ROM 的挂载点\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "等待插入盘片……\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "正在挂载 CD-ROM 文件系统……\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "正在鉴别... "
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "已归档文件的标签:%s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "正在盘片中查找索引文件...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr ""
+"找到了 %zu 个软件包索引、%zu 个源代码包索引、%zu 个翻译索引和 %zu 个数字签"
+"名\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+"无法确定任何包文件的位置,可能这不是一张 Debian 盘片,或者是选择了错误的硬件"
+"架构?"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "找到标签 '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "这不是一个有效的名字,请重试。\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"这张盘片现在的名字是:\n"
+"“%s”\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "正在复制软件包列表……"
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "正在写入新的源列表\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "对应于该盘片的软件源设置项是:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "无法切换工作目录到 %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "无法读取 %s 的状态。"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "无法读取文件系统挂载点 %s 的状态"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "无法读取盘片的状态"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "不能理解命令行选项 “%c” [来自 %s] 与其他选项的搭配。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "不能理解命令行选项 “%s” 与其他选项的搭配"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "命令行选项 %s 不是布尔值"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "选项 %s 要求有一个参数。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "选项 %s:配置项后必须包含有形如“=<变量>”的具体指定。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "选项 %s 要求有一个整数作为参数,而不是“%s”"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "选项“%s”太长"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "不能识别参数 %s,请用 true 或 false。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "无效的操作 %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "无法识别的类型缩写:“%c”"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "语法错误 %s:%u:配置小节没有以名字开头。"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "语法错误 %s:%u:标签格式有误"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "语法错误 %s:%u:配置值后有多余的无意义数据"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "语法错误 %s:%u:只能在顶层配置文件中使用指示"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "语法错误 %s:%u:太多的嵌套 include 命令"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "语法错误 %s:%u:Included from here"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "语法错误 %s:%u:不支持的指令“%s”"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "语法错误 %s:%u:clean 指令需要一个选项树作为参数"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "语法错误 %s:%u:文件尾部有多余的无意义的数据"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem unlinking the file %s"
+msgstr "用 unlink 删除文件 %s 出错"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "由于文件系统为只读,因而无法使用文件锁 %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "无法打开锁文件 %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "无法在 nfs 文件系统上使用文件锁 %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "无法获得锁 %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr "无法创建文件列表,因为‘%s’不是一个目录"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr "忽略‘%s’(于目录‘%s’),鉴于它不是一个常规文件"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr "忽略‘%s’(于目录‘%s’),鉴于它没有文件扩展名"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr "忽略‘%s’(于目录‘%s’),鉴于它的文件扩展名无效"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "等待子进程 %s 的退出,但是它并不存在"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "子进程 %s 发生了段错误。"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "子进程 %s 收到信号 %u。"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "子进程 %s 返回了一个错误号 (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "子进程 %s 异常退出"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "读错误"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "写出错"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "关闭 gzip %s 文件出错"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr "未预期的文件结束符"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "无法创建子进程的 IPC 管道"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "无法执行压缩程序"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "无法打开文件 %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file descriptor %d"
+msgstr "无法打开文件描述符 %d"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "还剩 %llu 字节没有读出,但已没有可读信息"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "还剩 %llu 字节没有写入,但无法写入操作"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem closing the file %s"
+msgstr "关闭文件 %s 出错"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "重命名文件 %s 为 %s 出错"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "同步文件出错"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to mkstemp %s"
+msgstr "无法建立临时文件(mkstemp) %s "
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "无法写入 %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "无法 mmap 一个空文件"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "无法 mmap %llu 字节的数据"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "无法为复制文件描述符 %i"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to close mmap"
+msgstr "无法关闭 mmap"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Unable to synchronize mmap"
+msgstr "无法同步 mmap "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "无法 mmap %lu 字节的数据"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "无法截断文件"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"动态 MMap 没有空间了。请增大 APT::Cache-Start 的大小。当前值:%lu。(man 5 "
+"apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr "无法增加 MMap 的大小,因为已经达到 %lu 字节的限制。"
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr "无法增加 MMap 大小,因为用户已禁用自动增加。"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... 有错误!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... 完成"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr "..."
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... %u%%"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr "%li天 %li小时 %li分 %li秒"
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr "%li小时 %li分 %li秒"
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr "%li分 %li秒"
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr "%li秒"
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "找不到您选则的 %s"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr "目标 %1$s 想要捕获与 %3$s (来自软件源 %4$s) 相同的文件 (%2$s)"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr "目标 %s (%s) 在 %s 和 %s 中被配置了多次"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "无法解析软件包仓库 Release 文件 %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "软件包仓库 Release 文件 %s 内无组件章节信息"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "软件包仓库 Release 文件 %s 内无哈希条目"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr "Release 文件 %s 中不含散列项,该文件用于保证足够的安全性。"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "软件包仓库 Release 文件 %2$s 内 %1$s 条目无效"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr "软件源 %2$s %3$s 的选项 %1$s 中含有互相冲突的值"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr "软件源 %2$s %3$s (%4$s) 的选项 %1$s 中含有无效值"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr "软件源 %2$s %3$s 的选项 %1$s 中含有互相冲突的值:%4$s != %5$s"
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "无法解析软件包文件 %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr "无法获取 dpkg 前端锁 (%s),是否有其他进程正占用它?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "无法获取 dpkg 前端锁 (%s),请查看您是否正以 root 用户运行?"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr "dpkg 被中断,您必须手工运行 ‘%s’ 解决此问题。"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr "无法锁定管理目录(%s),是否有其他进程正占用它?"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "无法对状态列表目录加锁(%s),请查看您是否正以 root 用户运行?"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr "未锁定"
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "正在准备 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "正在准备配置 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "正在准备 %s 的删除操作"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "正在准备完全删除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr "注意到 %s 已经消失"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "执行安装后执行的触发器 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "已安装 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "正在配置 %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "目录 %s 缺失"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, c-format
+msgid "Could not open file '%s'"
+msgstr "无法打开文件“%s”"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "正在解压缩 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "正在安装 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "正在删除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removing %s"
+msgstr "完全删除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "完全删除了 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Can not write log (%s)"
+msgstr "无法写入日志 (%s)"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr "/dev/pts 挂载了吗?"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr "操作在完成之前被打断"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr "由于已经达到 MaxReports 限制,没有写入 apport 报告。"
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr "依赖问题 - 保持未配置"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr "因为错误消息指示这是由于上一个问题导致的错误,没有写入 apport 报告。"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr "因为错误消息指示这是由于磁盘已满,没有写入 apport 报告。"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr "因为错误消息指示这是由于内存不足,没有写入 apport 报告。"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr "错误信息显示本地系统有一些问题,因此没有写入 apport 报告"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr "因为错误消息指示这是一个 dpkg I/O 错误,没有写入 apport 报告。"
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "正在分析软件包的依赖关系树"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "候选版本"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "生成依赖关系"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "正在读取状态信息"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "无法打开状态文件 %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "无法写入临时状态文件 %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr "向依赖解决器发送情景"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr "向依赖解决器发送请求"
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr "准备接收依赖解决方案"
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr "外部依赖解决器出错,错误信息不恰当"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr "执行外部依赖解决器"
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr "执行外部安装顺序规划器"
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr "向安装顺序规划器发送请求"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr "向安装顺序规划器发送情景"
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr "外部安装顺序规划器出错,错误信息不恰当"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "已写入 %i 条记录。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "已写入 %i 条记录,并有 %i 个文件缺失。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "已写入 %i 条记录,并有 %i 个文件不匹配\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "已写入 %i 条记录,并有 %i 个缺失,以及 %i 个文件不匹配\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr "无法找到认证记录:%s"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash 校验和不符:%s"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "不支持“%s”打包系统"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "无法确定适合的打包系统类型"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr "进度:[%3li%%]"
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr "正在运行 dpkg"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+"无法立即对 %s 进行配置。请查看 man 5 apt.conf 中的 APT::Immediate-Configure "
+"(%d)"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid "Could not configure '%s'. "
+msgstr "无法配置 %s。"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"由于这次安装存在着一个 Conflicts/Pre-Depends 循环,因而需要暂时删除一个必不可"
+"少的软件包 %s。通常并不建议这样做,但是如果您确实希望如此,可以打开 APT::"
+"Force-LoopBreak 选项。"
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "软件包缓存区是空的"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "软件包缓存文件损坏了"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "软件包缓存区文件的版本不兼容"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "本程序目前不支持“%s”版本系统"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "软件包缓存是为其它架构的硬件构建的: %s vs %s"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "软件包缓存文件损坏,散列值错误"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "依赖"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "预依赖"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "建议"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "冲突"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "推荐"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "替换"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "破坏"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr "增强"
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "废弃"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "重要"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "必需"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "标准"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "额外"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "可选"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "软件包暂存区使用的是不兼容的版本控制系统"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "处理 %s (%s%d) 时出错"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "哇,软件包数量超出了本 APT 的处理能力。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "哇,软件包版本数量超出了本 APT 的处理能力。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "哇,软件包说明数量超出了本 APT 的处理能力。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "哇,依赖关系数量超出了本 APT 的处理能力。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "正在读取软件包列表"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "无法读取或写入软件源缓存"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "不支持索引文件类型“%s”"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+"'%s' 这个值对 APT::Default-Release 是无效的,因为在源里找不到这样的发行"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "首选项文件 %s 中发现有无效的记录,无 Package 字段头"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "无法识别锁定的类型 %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr "%s: 值 %s 超出锁定优先级有效范围 (%d 到 %d)"
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "没有为版本锁定指定优先级(或为零)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "文件 %2$s 第 %1$u 行的记录格式有误 %3$s (%4$s)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "在源列表 %2$s 中第 %1$u 行有误 (类型)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "软件源列表 %3$s 第 %2$u 行中的类别 “%1$s” 无法识别"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "软件源列表 %2$s 中第 %1$u 行的小节格式有误 (类型)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "软件源列表 %3$s 第 %2$u 小节的类别 “%1$s” 无法识别"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr "命令行中有不支持的文件 %s"
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "您必须在 sources.list 中指定代码源(deb-src) URI"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr "无法将 %s 转换为整数:超出范围"
+
+#: apt-pkg/update.cc
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr "部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "正在计算更新"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "命中:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "获取:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "忽略:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "错误:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "已下载 %sB,耗时 %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [执行中]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"更换介质:请把标有\n"
+" “%s”\n"
+"的盘片插入驱动器“%s”再按「回车」键\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr "您是否愿意接受这些更改,并且继续从此仓库更新?"
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "正在修复依赖关系..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " 失败。"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "无法修复依赖关系"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "无法最小化待升级软件包集合"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " 完成"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "您也许需要运行“apt --fix-broken install”来修正上面的错误。"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken "
+"install”(也可以指定一个解决办法)。"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr "正在排序"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "注意,根据任务 '%2$s' 选中了 '%1$s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "注意,根据Glob '%2$s' 选中了 '%1$s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "注意,根据正则表达式 '%2$s' 选中了 '%1$s'\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "虚拟软件包 %s 由下面的软件包提供:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr "[已安装]"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr " [无候选版本]"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "请您明确地选择安装其中一个。"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"没有可用的软件包 %s,但是它被其它的软件包引用了。\n"
+"这可能意味着这个缺失的软件包可能已被废弃,\n"
+"或者只能在其他发布源中找到\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "然而下列软件包会取代它:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "软件包 %s 没有可安装候选"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr "类似 '%s' 的虚拟软件包「不」可以卸载\n"
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "软件包 %s 未安装,所以不会被卸载。您的意思是 ‘%s’ 吗?\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "软件包 %s 未安装,所以不会被卸载\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "注意,选中 '%s' 而非 '%s'\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr "常用命令:"
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr "参见 %s 以获取更多关于可用命令的信息。"
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+"程序配置选项及语法都已经在 apt.conf(5) 中阐明。\n"
+"欲知如何配置软件源,请参阅 sources.list(5)。\n"
+"软件包及其版本偏好可以通过 apt_preferences(5) 来设置。\n"
+"关于安全方面的细节可以参考 apt-secure(8).\n"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "本 APT 具有超级牛力。"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr "本 APT 助手具有超级喵力。"
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr "--force-yes 已经被废弃,请使用以 --allow 开头的选项来代替。"
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "没有发现匹配的软件包"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "【警告】:下列软件包不能通过认证!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "已忽略认证警告。\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "有些软件包不能通过验证"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "没有验证的情况下就安装这些软件包吗?"
+
+#: apt-private/private-download.cc
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr ""
+"存在未认证的软件包同时使用了 -y 选项,然而未搭配 --allow-unauthenticated"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "无法获知您在 %s 上的可用空间"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "您在 %s 上没有足够的可用空间。"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "无法锁定下载目录"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是\n"
+"因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件\n"
+"包尚未被创建或是它们已被从新到(Incoming)目录移出。"
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "下列信息可能会对解决问题有所帮助:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "破损的软件包"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再"
+"试试?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "内部错误,InstallPackages 被用在了损坏的软件包上!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "有软件包需要被卸载,但是卸载被设置为禁止。"
+
+#: apt-private/private-install.cc
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr ""
+"关键软件包被移除同时使用了 -y 选项,但是没有搭配 --allow-remove-essential。"
+
+#: apt-private/private-install.cc
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "降级软件包同时使用了 -y 选项,但是没有用 --allow-downgrades."
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+"在更改保留软件包的同时使用了 -y 选项,但没有搭配 --allow-change-held-"
+"packages."
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "内部错误,排序未完成"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "怪了……文件大小不符,请发邮件给 apt@packages.debian.org 吧"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "需要下载 %sB/%sB 的归档。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "需要下载 %sB 的归档。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "解压缩后会消耗 %sB 的额外空间。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "解压缩后将会空出 %sB 的空间。\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "虽然您指定了仅执行常规操作,但这并不是常规操作。"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "是,按我说的做!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"您的操作有潜在的危害性。\n"
+"若要继续,请输入下面的短句“%s”\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "中止。"
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "您希望继续执行吗?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "有一些文件下载失败"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "于“仅下载”模式中下载完毕"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "目前不支持 --fix-missing 和介质交换"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "无法修复缺失的软件包。"
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "中止安装。"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] "以下软件包因为文件已被其他软件包覆盖而消失:"
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr "注意:这是自动被 dpkg 有意完成的。"
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "我们不应该进行删除,无法启动自动删除器"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr "似乎自动卸载工具损坏了一些软件,这不应该发生。请向 apt 提交错误报告。"
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "内部错误,自动卸载工具坏事了"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "下列软件包是自动安装的并且现在不需要了:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "%lu 个自动安装的的软件包现在已不再需要了。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "使用'%s'来卸载它(它们)。"
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "将会同时安装下列软件:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "建议安装:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "推荐安装:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "忽略了 %s,它已经被安装而且没有指定要升级。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "忽略了 %s,它已经被安装而且仅请求了升级。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "不能重新安装 %s,因为无法下载它。\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s 已经是最新版 (%s)。\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s 已设置为手动安装。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "为 %3$s 选定了版本 %1$s (%2$s)\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "由于 %4$s,为 %3$s 选定了版本 %1$s (%2$s)\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr "正在列表"
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] "还有 %i 个版本。请使用 -a 选项来查看它(他们)。"
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+"注意:这只是一次模拟!\n"
+"   %s 需要 root 特权进行实际的执行。\n"
+"   同时请记住此时并未锁定,所以请勿完全相信当前的情况!\n"
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr "未知"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "[已安装,可升级至:%s]"
+
+#: apt-private/private-output.cc
+msgid "[installed,local]"
+msgstr "[已安装,本地]"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr "[已安装,可自动卸载]"
+
+#: apt-private/private-output.cc
+msgid "[installed,automatic]"
+msgstr "[已安装,自动]"
+
+#: apt-private/private-output.cc
+msgid "[installed]"
+msgstr "[已安装]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr "[可从该版本升级:%s]"
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr "[配置文件残留]"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "但是 %s 已经安装"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "但是 %s 正要被安装"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "但无法安装它"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "但是它是虚拟软件包"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "但是它将不会被安装"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "但是它还没有被安装"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr " 或"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "下列软件包有未满足的依赖关系:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "下列【新】软件包将被安装:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "下列软件包将被【卸载】:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "下列软件包的版本将保持不变:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "下列软件包将被升级:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "下列软件包将被【降级】:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "下列被要求保持版本不变的软件包将被改变:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s (是由于 %s)"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"【警告】:下列基础软件包将被卸载。\n"
+"请勿尝试,除非您确实知道您在做什么!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "升级了 %lu 个软件包,新安装了 %lu 个软件包,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "重新安装了 %lu 个软件包,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "降级了 %lu 个软件包,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "要卸载 %lu 个软件包,有 %lu 个软件包未被升级。\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "有 %lu 个软件包没有被完全安装或卸载。\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr "[Y/n]"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr "[y/N]"
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr "Y"
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr "N"
+
+#: apt-private/private-search.cc
+msgid "You must give at least one search pattern"
+msgstr "您必须明确地给出至少一个表达式"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr "全文搜索"
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] "有 %i 条附加记录。请加上 ‘-a’ 参数来查看它们"
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr "不是一个实包(虚包)"
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "软件包文件:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "缓存尚未同步,无法交差引证(x-ref)一个软件包文件"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "被锁定的软件包:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr "%s -> %s ,其优先级为 %d\n"
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " 已安装:"
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " 候选:"
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(无)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " 版本列表:"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "找不到‘%s’体系结构下的软件包"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "找不到软件包‘%s’的‘%s’版本"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "找不到软件包‘%s’的‘%s’发行"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "选择 %s 作为源代码包而非 %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr "找不到 %2$s 软件包的 %1$s 版本"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "要下载源代码,必须指定至少一个对应的软件包"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "无法找到与 %s 对应的源代码包"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+"提示:%s 的打包工作被维护于以下位置的 %s 版本控制系统中:\n"
+"%s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+"请使用:\n"
+"%s\n"
+"获得该软件包的最近更新(可能尚未正式发布)。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "忽略已下载的文件“%s”\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "需要下载 %sB/%sB 的源代码包。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "需要下载 %sB 的源代码包。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "下载源代码 %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "有一些包文件无法下载。"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "忽略已经被解包到 %s 目录的源代码包\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "运行解包的命令“%s”出错。\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "请检查是否安装了“dpkg-dev”软件包。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "执行构造软件包命令“%s”失败。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "无法获得 %s 的构建依赖关系信息"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr " %s 没有构建依赖关系信息。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+"找不到关于 %s 的有效体系结构信息。请参见 apt.conf(5) APT::Architectures for "
+"setup"
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "要检查生成软件包的构建依赖关系,必须指定至少一个软件包"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr "注意,正使用 '%s' 目录下载编译依赖\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "注意,正使用 '%s' 文件来获取编译依赖\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "无法处理构建依赖关系"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "解析 %s 失败。请重新编辑之后再试。"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr "您的 %s 文件有过改动,请执行 ‘apt-get update’。\n"
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "版本为 %2$s 的软件包 %1$s 有未满足的依赖关系:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr " update 命令不需要参数"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr "您应当优先考虑使用 %s 而非直接把账户信息直接写在 %s 的条目 '%s' 中"
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+"有 %i 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。\n"
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr "所有软件包均为最新。"
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s does not take any arguments"
+msgstr "%s 命令不需要参数"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "软件包名称总数:"
+
+#: cmdline/apt-cache.cc
+msgid "Total package structures: "
+msgstr "全部软件包结构:"
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " 普通软件包:"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " 纯虚拟软件包:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " 单虚拟软件包:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " 混合虚拟软件包:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " 缺失:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "按不同的版本共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "按不同的说明共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "按依赖关系共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "按版本/文件关系共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "按说明/文件关系共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "提供映射共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "Glob 字串共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "Slack 空间共计:"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "总占用空间:"
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr "该命令已废弃。请使用‘apt-mark showauto’。"
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+"用法: apt-cache [选项] 命令\n"
+" apt-cache [选项] show 软件包1 [软件包2 ...]\n"
+"\n"
+"apt-cache 可以查询和显示已安装和可安装软件包的可用信息。\n"
+"它专门工作在本地的数据缓存上,而这些缓存可以通过比如\n"
+"apt-get 的 'update' 命令来更新。如果距离上一次更新的时间太久,\n"
+"那么它显示的信息可能就会过时。不过作为交换,apt-cache 不依赖\n"
+"当前软件源的可用性(比如:离线状态)。\n"
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "显示源文件的各项记录"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "根据正则表达式搜索软件包列表"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "显示该软件包的依赖关系信息"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "显示所有依赖于该软件包的软件包名字"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "以便于阅读的格式介绍该软件包"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "列出所有软件包的名字"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "显示软件包的安装设置状态"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "请给这张盘片起个名字,比如“Debian 5.0.3 Disk 1”"
+
+#: cmdline/apt-cdrom.cc
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "请把盘片插入驱动器再按「回车键」"
+
+#: cmdline/apt-cdrom.cc
+#, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "无法将 ‘%s’ 挂载到 ‘%s’"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+"从默认挂载点自动检测 CD-ROM 失败。\n"
+"您可以尝试用 --cdrom 选项来设置 CD-ROM 的挂载点。\n"
+"更多关于 CD-ROM 自动检测以及挂载点的信息,请参见‘man apt-cdrom’。"
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "请对您的盘片套件中的其它盘片重复相同的操作。"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+"用法: apt-cdrom [选项] 命令\n"
+"\n"
+"apt-cdrom 用于添加CDROM, USB存储器和其他可移动媒介作为 APT 软件源。\n"
+"关于挂载点和设备的详细信息参见 apt.conf(5), udev(7) 和 fstab(5)。\n"
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "参数不成对"
+
+#: cmdline/apt-config.cc
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"用法:apt-config [选项] 命令\n"
+"\n"
+"apt-config 是所有 APT 工具的配置接口,主要用于Debug和编写Shell脚本。\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr "通过shell求值来获取设置值"
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr "显示活动的设置选项"
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+"用法:apt-dump-solver\n"
+"\n"
+"apt-dump-solver 是一个在文件中存储EDSP情景的接口,\n"
+"并可将其传送到另一个解决器。\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"用法: apt-extracttemplates 文件1 [文件2 ...]\n"
+"\n"
+"apt-extracttemplates 可以从 debian 软件包中解压出配置文件和模板\n"
+"信息。它主要被 debconf(1) 用于在安装软件包前询问用户配置问题。\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "无法获得 debconf 的版本。您安装了 debconf 吗?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "找不到软件包 %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s 已设置为自动安装。\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr "该命令已废弃。请用‘apt-mark auto’或‘apt-mark manual’。"
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "内部错误,问题解决工具坏事了"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "支持的模块:"
+
+#: cmdline/apt-get.cc
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"用法: apt-get [选项] 命令\n"
+"    apt-get [选项] install|remove 软件包1 [软件包2 ...]\n"
+"    apt-get [选项] source 软件包1 [软件包2 ...]\n"
+"\n"
+"apt-get 可以从认证软件源下载软件包及相关信息,以便安装和升级软件包,\n"
+"或者用于移除软件包。在这些过程中,软件包依赖会被妥善处理。\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "取回更新的软件包列表信息"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "进行一次升级"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "安装新的软件包(注:软件包名称是 libc6 而非 libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "安装新的软件包(注:软件包名称是 libc6 而非 libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "卸载软件包"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "卸载并清除软件包的配置"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "卸载所有自动安装且不再使用的软件包"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "发行版升级,见 apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "根据 dselect 的选择来进行升级"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "为源码包配置所需的编译依赖关系"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "删除所有已下载的包文件"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "删除已下载的旧包文件"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "核对以确认系统的依赖关系的完整性"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "下载源码包文件"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr "下载指定的二进制包到当前目录"
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr "下载指定软件包,并显示其变更日志(changelog)"
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr "需要一个 URL 作为参数"
+
+#: cmdline/apt-helper.cc
+msgid "Must specify at least one pair url/filename"
+msgstr "必须指定至少一对URL或文件名"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr "下载失败"
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr "GetSrvRec 失败,因为 %s"
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+"用法: apt-helper [选项] 命令\n"
+" apt-helper [选项] download-file URI 目标路径\n"
+"\n"
+"apt-helper 汇集了各种各样的功能来供shell脚本调用,比如\n"
+"使用与APT相同的代理设置,或者相同的捕获系统。\n"
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr "将 URI 指定的文件下载到目标路径"
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr "查询一个 SRV 记录 (如: _http._tcp.ftp.debian.org)"
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr "自动解压并连接文件"
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr "用 apt.conf 检测代理设置"
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr "等待系统上线"
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr "运行给定命令前先降低权限"
+
+#: cmdline/apt-internal-planner.cc
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"用法: apt-internal-planner\n"
+"\n"
+"apt-internal-planner 是一个可以像外部规划器那样使用当前的APT家族内部\n"
+"安装顺序规划器的接口,以便调试等用途。\n"
+
+#: cmdline/apt-internal-solver.cc
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"用法: apt-internal-solver\n"
+"\n"
+"apt-internal-solver 是一个可以像外部解析器那样使用当前的APT家族内部\n"
+"依赖解析器的接口,以便调试等用途。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "%s 还没有安装,因此无法标记。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s 已经被设置为手动安装。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s 已经被设置为自动安装。\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "下列【新】软件包将被安装:"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s 已经设置为保留。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s 已经设置为不保留。\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr "执行 dpkg 失败。您是 root 吗?"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "%s set on hold.\n"
+msgstr "%s 设置为保留。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "取消保留 %s 的设置。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr "选中 %s 以待彻底卸载。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr "选中 %s 以待卸载。\n"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr "选中 %s 以待安装。\n"
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+"用法:apt-mark [选项] {auto|manual} 软件包1 [软件包2 ...]\n"
+"\n"
+"apt-mark 可以对软件包进行 手动/自动 安装标记,也可以用来处理软件\n"
+"包的 dpkg(1) 选中状态,以及列出或过滤拥有某个标记的软件包。\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as automatically installed"
+msgstr "标记指定软件包为自动安装"
+
+#: cmdline/apt-mark.cc
+msgid "Mark the given packages as manually installed"
+msgstr "标记指定软件包为手动安装"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "Mark the given packages as automatically installed"
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "标记指定软件包为自动安装"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr "标记指定软件包为保留(held back)"
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr "取消指定软件包的保留(held back)标记"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of automatically installed packages"
+msgstr "列出所有自动安装的软件包"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of manually installed packages"
+msgstr "列出所有手动安装的软件包"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr "列出设为保留的软件包"
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "未知的软件包记录!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+"用法: apt-sortpkgs [选项] 文件1 [文件2 ...]\n"
+"\n"
+"简易工具 apt-sortpkgs 用于排序软件包信息。\n"
+"它默认对二进制包信息排序,但是 -s 选项可以将其切换为\n"
+"对源码包排序。\n"
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+"用法: apt [选项] 命令\n"
+"\n"
+"命令行软件包管理器 apt 提供软件包搜索,管理和信息查询等功能。\n"
+"它提供的功能与其他 APT 工具相同(像 apt-get 和 apt-cache),\n"
+"但是默认情况下被设置得更适合交互。\n"
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr "根据名称列出软件包"
+
+#: cmdline/apt.cc
+msgid "search in package descriptions"
+msgstr "搜索软件包描述"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr "显示软件包细节"
+
+#. package stuff
+#: cmdline/apt.cc
+msgid "install packages"
+msgstr "安装软件包"
+
+#: cmdline/apt.cc
+#, fuzzy
+#| msgid "install packages"
+msgid "reinstall packages"
+msgstr "安装软件包"
+
+#: cmdline/apt.cc
+msgid "remove packages"
+msgstr "移除软件包"
+
+#. system wide stuff
+#: cmdline/apt.cc
+msgid "update list of available packages"
+msgstr "更新可用软件包列表"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr "通过 安装/升级 软件来更新系统"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr "通过 卸载/安装/升级 来更新系统"
+
+#. misc
+#: cmdline/apt.cc
+msgid "edit the source information file"
+msgstr "编辑软件源信息文件"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "错误的默认设置!"
+
+#: dselect/install dselect/update
+msgid "Press [Enter] to continue."
+msgstr "按「回车键」继续。"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "您想要删除之前下载的所有 .deb 文件吗?"
+
+#: dselect/install
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "在解压时发生了一些错误。已经安装的软件包"
+
+#: dselect/install
+msgid "will be configured. This may result in duplicate errors"
+msgstr "将被配置。这个操作可能会导致出现重复的错误"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "或一些由于依赖关系不能满足所产生的错误。这个问题不大,只有"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "这个提示之前的错误消息才值得您注意。请更正它们,然后再次执行 [I]nstall"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "正在合并可用信息"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "软件包的扩展列表太长"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "处理目录 %s 时出错"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "源扩展列表太长"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "将头写入到目录文件时出错"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "处理目录 %s 时出错"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"用法: apt-ftparchive [选项] 命令\n"
+"命令: packages 二进制软件包搜索路径 [overridefile [路径前缀]]\n"
+" sources 源代码包搜索路径 [overridefile [路径前缀]]\n"
+" contents 搜索路径\n"
+" release 搜索路径\n"
+" generate 配置文件 [groups]\n"
+" clean 配置文件\n"
+"\n"
+"apt-ftparchive 被用来为 Debian 软件包生成索引文件。它能支持\n"
+"多种生成索引的方式,从全自动的索引生成到在功能上取代 dpkg-scanpackages \n"
+"和 dpkg-scansources,都能游刃有余\n"
+"\n"
+"apt-ftparchive 能依据一个由 .deb 文件构成的文件树生成 Package 文件。\n"
+"Package 文件里不仅注有每个软件包的 MD5 校验码和文件大小,\n"
+"还有软件包的所有控制字段的内容。该软件同时支持 override 文件,\n"
+"通过它可以强制指定软件包的优先级及其所属的软件类别。\n"
+"\n"
+"与上面类似,apt-ftparchive 也能由 .dsc 的文件树生成 Source 文件。\n"
+"可以通过使用 --source-override 选项来指定一个 override 文件\n"
+"\n"
+"使用“packages”和“source”命令时,必须在文件树的根部执行本程序。\n"
+"二进制包的搜索路径一定要是递归搜索的底层,而且 override 文件里\n"
+"应该注明 override 的标志。若指定了路径前缀,那么它会被加到文件名前面。\n"
+"下面有个来自 Debian 文档的例子:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386 > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"选项:\n"
+" -h 本帮助文档\n"
+" --md5 使之生成 MD5 校验和\n"
+" -s=? 源代码包 override 文件\n"
+" -q 输出精简信息\n"
+" -d=? 指定可选的缓存数据库\n"
+" -d=? 使用另一个可选的缓存数据库\n"
+" --no-delink 开启delink的调试模式\n"
+" --contents 使之生成控制内容文件\n"
+" -c=? 读取指定配置文件\n"
+" -o=? 设置任意指定的配置选项"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "没有任何选定项是匹配的"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "软件包文件组“%s”中缺少一些文件"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "数据库被损坏,该数据库文件的文件名已改成 %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "数据库已过期,现尝试进行升级 %s"
+
+#: ftparchive/cachedb.cc
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"数据库格式无效。如果您是从一个老版本的 apt 升级而来,请删除数据库并重建它。"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "无法打开数据库文件 %s:%s"
+
+#: ftparchive/cachedb.cc
+msgid "Failed to read .dsc"
+msgstr "读取 .dsc 文件失败"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "归档文件没有包含控制字段"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "无法获得游标"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - 分配内存失败"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "未知的压缩算法“%s”"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "压缩后的输出文件 %s 要求有一个压缩文件集合"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "无法为子进程创建 IPC 管道"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "无法 fork"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "压缩子进程"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "内部错误,无法创建 %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "无法对子进程或文件进行读写"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "在计算 MD5 校验和时无法读取数据"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "无法打开 %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "override 文件 %s 第 %llu (%s) 行的格式有误"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "无法读取 override 文件 %s"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "override 文件 %s 第 %llu 行的格式有误 #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "override 文件 %s 第 %llu 行的格式有误 #2"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "override 文件 %s 第 %llu 行的格式有误 #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "警告:无法读取目录 %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "警告:无法获得 %s 的状态\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "错误:"
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "警告:"
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "错误:处理文件时出错 "
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "无法解析 %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "无法遍历目录树"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "无法打开 %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** 无法将 %s 链接到 %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " 达到了 DeLink 的上限 %sB。\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "归档文件没有包含 package 字段"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s 中没有 override 项\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s 的维护者 %s 并非 %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s 没有源代码的 override 项\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s 中没有二进制文件的 override 项\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "正在等待报头"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "该 HTTP 服务器发送了一个无效的应答报头"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "错误的报头行"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "该 HTTP 服务器发送了一个无效的 Content-Length 报头"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "该 HTTP 服务器发送了一个无效的 Content-Range 报头"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "该 HTTP 服务器的 range 支持不正常"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "无法识别的日期格式"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "错误的报头数据"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "连接失败"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr "文件尺寸不符(%llu != %llu)。您使用的镜像正在同步中?"
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr "由于服务器或代理的响应错误,因此自动禁止 %s。(参见 man 5 apt.conf)"
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "内部错误"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "无法读取盘片数据库 %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"请使用 apt-cdrom,通过它可以让 APT 识别该盘片。apt-get upgdate 不能被用来加入"
+"新的盘片。"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "错误的 CD-ROM"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "无法卸载挂载于 %s 的 CD-ROM,它可能正被使用。"
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "找不到盘片。"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "无法找到文件"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr "通向 %s 域名的直接连接被设为默认阻止。"
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr "已连接到 %s (%s)"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "正在连接 %s (%s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "无法为 %s 创建套接字(f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "无法发起与 %s:%s (%s) 的连接"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "失败"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "无法连接上 %s:%s (%s)。"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "无法连接上 %s:%s (%s),连接超时"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "正在连接 %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "无法解析域名“%s”"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "暂时不能解析域名“%s”"
+
+#: methods/connect.cc
+#, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "解析“%s:%s”时出现系统故障"
+
+#: methods/connect.cc
+#, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "解析“%s:%s”时,出现了某些故障(%i - %s)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "不能连接到 %s:%s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "无法读取状态"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "无效的 URI,本地 URI 不能以 // 开头"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "正在登录"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "无法获知对方主机名"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "无法获知本地主机名"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "服务器拒绝了我们的连接,响应信息为:%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER 指令出错,服务器响应信息为:%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS 指令出错,服务器响应信息为:%s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"您指定了代理服务器,但是没有登陆脚本,Acquire::ftp::ProxyLogin 设置为空。"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "登录脚本命令“%s”出错,服务器响应信息为:%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE 指令出错,服务器响应信息为:%s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "连接超时"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "服务器关闭了连接"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "回应超出了缓存区大小。"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "协议有误"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "无法创建套接字"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "无法连接数据套接字,连接超时"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "无法连接被动模式的套接字。"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo 无法得到监听套接字"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "无法绑定套接字"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "无法在套接字上监听"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "无法确定套接字的名字"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "无法发出 PORT 指令"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "无法识别的地址族 %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT 指令失败,服务器响应为:%s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "数据套接字连接超时"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "无法接受连接"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "把文件加入哈希表时出错"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "无法获取文件,服务器响应为“%s”"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "数据套接字超时"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "数据传送出错,服务器响应为“%s”"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "查询"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "无法调用 "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr "明文签署文件不可用,结果为‘%s’(您的网络接入需要认证吗?)"
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "至少发现一个无效的签名。"
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "内部错误:签名正确无误,但是无法确认密钥指纹?!"
+
+#: methods/gpgv.cc
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr "无法运行 apt-key 以验证签名(您安装了 gnupg 吗?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "运行 apt-key 时发生未知错误"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr "密钥 %s 生成的数字签名使用了弱安全性摘要算法(%s)"
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "下列签名无效:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "由于没有公钥,无法验证下列签名:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "写入文件出错"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "从服务器读取数据时出错,对方关闭了连接"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "从服务器读取数据出错"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "写入文件出错"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "select 调用出错"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "连接超时"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "写输出文件时出错"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "无法设置文件的修改日期"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "连接被永久关闭"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr "空文件不是有效归档"
+
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "归档文件中成员文件头 %s 无效"
+
+#~ msgid "Removed %s"
+#~ msgstr "已删除 %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "软件包文件 %s 尚未同步。"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr "软件包的索引文件已损坏。找不到对应软件包 %s 的 Filename: 字段。"
+
+#~ msgid "No mirror file '%s' found "
+#~ msgstr "没有找到镜像文件 %s"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "无法读取镜像文件 %s"
+
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "在镜像文件 %s 中未找到所需条目"
+
+#~ msgid "[Mirror: %s]"
+#~ msgstr "[镜像:%s]"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "正在打开配置文件 %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "正在打开 %s"
+
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "在 Release 文件中找不到期望的条目 %s(sources.list条目有误,或者文件有误)"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "不能满足依赖关系。不妨试一下 --fix-broken 选项。"
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "您可能需要运行“apt --fix-broken install”来纠正下列错误:"
+
+#~ msgid "(not found)"
+#~ msgstr "(没有找到)"
+
+#~ msgid " Package pin: "
+#~ msgstr " 软件包锁:"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "以下 ID 的密钥没有可用的公钥:\n"
+
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "仓库 “%s” 数字签名不完整。"
+
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr ""
+#~ "由于 %3$s 不被软件包 %4$s 所允许,因此不能满足 %2$s 所要求的 %1$s 依赖关系"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "由于无法找到软件包 %3$s ,因此不能满足 %2$s 所要求的 %1$s 依赖关系"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr "无法满足 %2$s 所要求 %1$s 依赖关系:已安装的软件包 %3$s 太新"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "软件包 %3$s 的候选版本不能满足版本要求,因此 %2$s 软件包的 %1$s 依赖无法满"
+#~ "足"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "软件包 %3$s 没有可用的候选版本,因此 %2$s 的 %1$s 依赖无法满足"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "无法满足 %2$s 所要求 %1$s 依赖关系:%3$s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "不能满足软件包 %s 所要求的构建依赖关系。"
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "在使用 unlink 删除 %s 时出错"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "无法使用 unlink 删除 %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "用法: apt-cache [选项] 命令\n"
+#~ "    apt-cache [选项] show 软件包1 [软件包2 ...]\n"
+#~ "\n"
+#~ "apt-cache 是一个底层的工具,它可以在 APT 的\n"
+#~ "二进制缓存文件中查询信息\n"
+
+#~ msgid "Commands:"
+#~ msgstr "命令:"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "选项:\n"
+#~ " -h 本帮助文档。\n"
+#~ " -p=? 软件包的缓存。\n"
+#~ " -s=? 源代码包的缓存。\n"
+#~ " -q 关闭进度显示。\n"
+#~ " -i 仅为 unmet 命令显示重要的依赖关系。\n"
+#~ " -c=? 读取指定配置文件\n"
+#~ " -o=? 设置任意指定的配置选项,例如 -o dir::cache=/tmp\n"
+#~ "若要了解更多信息,您还可以查阅 apt-cache(8) 和 apt.conf(5) 参考手册。\n"
+
+#~ msgid ""
+#~ "Usage: apt [options] command\n"
+#~ "\n"
+#~ "CLI for apt.\n"
+#~ msgstr ""
+#~ "用法: apt [选项] 命令\n"
+#~ "\n"
+#~ "apt 的命令行界面。\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -d CD-ROM mount point\n"
+#~ " -r Rename a recognized CD-ROM\n"
+#~ " -m No mounting\n"
+#~ " -f Fast mode, don't check package files\n"
+#~ " -a Thorough scan mode\n"
+#~ " --no-auto-detect Do not try to auto detect drive and mount point\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See fstab(5)\n"
+#~ msgstr ""
+#~ "选项:\n"
+#~ " -h 显示本帮助信息\n"
+#~ " -q 日志型输出 - 不显示进度\n"
+#~ " -qq 安静模式,只输出错误信息\n"
+#~ " -s 无动作。只说明将要做什么。\n"
+#~ " -f 读取/写入 指定文件的 自动/手动 标记\n"
+#~ " -c=? 读取指定的配置文件\n"
+#~ " -o=? 任意设置一个配置项,比如 -o dir::cache=/tmp\n"
+#~ "更多细节请参见 the apt-mark(8) 和 apt.conf(5) 的 man 手册。"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "选项:\n"
+#~ " -h 显示本帮助文本。\n"
+#~ " -c=? 读取指定的配置文件\n"
+#~ " -o=? 设置任意指定的配置选项,例如:-o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -q Loggable output - no progress indicator\n"
+#~ " -qq No output except for errors\n"
+#~ " -s No-act. Just prints what would be done.\n"
+#~ " -f read/write auto/manual marking in the given file\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-mark(8) and apt.conf(5) manual pages for more information."
+#~ msgstr ""
+#~ "选项:\n"
+#~ " -h 显示本帮助信息\n"
+#~ " -q 日志型输出 - 不显示进度\n"
+#~ " -qq 安静模式,只输出错误信息\n"
+#~ " -s 无动作。只说明将要做什么。\n"
+#~ " -f 读取/写入 指定文件的 自动/手动 标记\n"
+#~ " -c=? 读取指定的配置文件\n"
+#~ " -o=? 任意设置一个配置项,比如 -o dir::cache=/tmp\n"
+#~ "更多细节请参见 the apt-mark(8) 和 apt.conf(5) 的 man 手册。"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "用法: apt-sortpkgs [选项] 文件甲 [文件乙 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs 是对软件包索引文件内容进行排序的简单工具。-s 选项\n"
+#~ "是用来指出后面参数所示文件是哪种文件。\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -h 本帮助文档\n"
+#~ " -s 根据源文件排序\n"
+#~ " -c=? 读取指定配置文件\n"
+#~ " -o=? 设置任意指定的配置选项,例如 -o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "子进程出错"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "必须指定至少一对URL或者文件名"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "无法创建管道"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "无法执行 gzip"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s,用于 %s 体系结构,编译于 %s %s\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "无法创建 FILE*"
+
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$u 节有错误(URI 解析)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误([选项] 无法解析)"
+
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误([选项] 太短)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误([%3$s] 不是一个任务)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误([%3$s] 没有键)"
+
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误([%3$s] 键 %4$s 没有值)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行的格式有误(URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误(发行版)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误(URI 解析)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误(独立发行版)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "安装源配置文件“%2$s”第 %1$lu 行有错误(发行版解析)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "当处理文件依赖关系时,无法找到软件包 %s %s"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "无法获取源软件包列表 %s 的状态"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "正在收集文件所提供的软件包"
+
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "在 Release 文件中找不到 %s 的哈希值"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "软件提供者数据块内 %s 没有包含指纹信息"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "依赖关系版本名所占空间共计:"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "您在 %s 上没有足够的可用空间"
+
+#~ msgid "Done"
+#~ msgstr "完成"
+
+#~ msgid "No keyring installed in %s."
+#~ msgstr "%s 中没有安装密钥环。"
+
+#~ msgid "Is stdout a terminal?"
+#~ msgstr "stdout 是终端吗?"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "内部错误,全部升级工具坏事了"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s 不是一个有效的 DEB 软件包。"
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "现把 %s 作为了 CD-ROM 的挂载点\n"
+#~ "正在挂载 CD-ROM\n"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap and with file operation usage - the patch "
+#~ "seems to be corrupt."
+#~ msgstr "无法连同 mmap 和文件操作用途为 %s 打补丁 - 补丁可能已损坏。"
+
+#~ msgid ""
+#~ "Could not patch %s with mmap (but no mmap specific fail) - the patch "
+#~ "seems to be corrupt."
+#~ msgstr "无法连同 mmap 为 %s 打补丁(但没有 mmap 的错误) - 补丁可能已损坏。"
+
+#~ msgid "Ignore unavailable target release '%s' of package '%s'"
+#~ msgstr "忽略不可用的软件包 %2$s 的目标发行版本 %1$s"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "这不是一个有效的 DEB 包文件,其包内遗漏了“%s”,“%s”或者“%s”"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5 校验和不符"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr ""
+#~ "我无法找到对应 %s 软件包的文件。在这种情况下您可能需要手动修正这个软件包。"
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr "无法写入日志。 openpty() 失败(没有挂载 /dev/pts ?)\n"
+
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "跳过不存在的文件 %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "无法卸载 %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "无法创建 %s "
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "无法读取 %sinfo 的状态"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "info 和 temp 目录要求处于同一文件系统之下"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "无法切换工作目录到 admin 目录 %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "在获取软件包名字时出现内部错误"
+
+#~ msgid "Reading file listing"
+#~ msgstr "正在读取文件列表"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "无法打开列表文件“%sinfo/%s”。如果您不能恢复这个文件,那么就清空该文件并马"
+#~ "上重新安装相同版本的这个软件包!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "无法读取列表文件 %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "获得一个节点时出现内部错误"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "无法打开转移配置文件 %sdiversions"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "该转移配置文件被损坏了"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "转移配置文件中有一行是无效的:%s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "添加转移配置时出现内部错误"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "必须首先初始化软件包缓存"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "无法找到某个软件包:包头,于偏移位置 %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "状态文件中有错误的 ConfFile 段。位于偏移位置 %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "解析 MD5 出错。文件内偏移量为 %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "无法切换工作目录到 %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "无法在归档文件中找到有效的主控文件"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "无法为 %s 开启管道"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "从 %s 进程读取数据出错"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "接收到一行报头行,它的长度超过了 %u 个字符"
+
+#~ msgid "Note: This is done automatic and on purpose by dpkg."
+#~ msgstr "注意:这是自动被 dpkg 有意完成的。"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "override 文件 %s 第 %lu 行的格式有误 #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "override 文件 %s 第 %lu 行的格式有误 #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "override 文件 %s 第 %lu 行的格式有误 #3"
+
+#~ msgid "decompressor"
+#~ msgstr "解压程序"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "读取文件出错,还剩 %lu 字节没有读出"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "写入文件出错,还剩 %lu 字节没有保存"
+
+#~ msgid ""
+#~ "Could not perform immediate configuration on already unpacked '%s'. "
+#~ "Please see man 5 apt.conf under APT::Immediate-Configure for details."
+#~ msgstr ""
+#~ "无法立即对已经解压的 %s 进行配置。请查看 man 5 apt.conf 中的 APT::"
+#~ "Immediate-Configure。"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "处理 %s (NewPackage)时出错"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "处理 %s (UsePackage1)时出错"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "处理 %s (NewFileDesc1)时出错"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "处理 %s (UsePackage2)时出错"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "处理 %s (NewFileVer1)时出错"
+
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "处理 %s (NewVersion%d)时出错"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "处理 %s (UsePackage3)时出错"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "处理 %s (NewFileDesc2)时出错"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "处理 %s (FindPkg)时出错"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "处理 %s (CollectFileProvides)时出错"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "内部错误,无法定位包内文件"
+
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "内部错误,组 %s 没有可安装的 pseudo 软件包"
+
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Release 文件已过期,忽略 %s (从 %s 起无效)"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "错误:Acquire::gpgv::Options 的参数列表太长。结束运行。"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "处理 %s (NewVersion2)时出错"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "在源列表中 %2$s 中第 %1$u 行的格式有误(供应商 ID)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "无法访问密钥环:“%s”"
+
+#~ msgid "Could not patch file"
+#~ msgstr "无法打开补丁文件"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "No source package '%s' picking '%s' instead\n"
+#~ msgstr "没有源代码包“%s”,使用“%s”代替\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "启动对 %s 的处理"
+
+#~ msgid "Dynamic MMap ran out of room"
+#~ msgstr "动态内存映射(Dynamic MMap)空间不足"
+
+#~ msgid ""
+#~ "Since you only requested a single operation it is extremely likely that\n"
+#~ "the package is simply not installable and a bug report against\n"
+#~ "that package should be filed."
+#~ msgstr ""
+#~ "您仅要求对单一软件包进行操作,这极有可能是因为该软件包安装不上,同时,\n"
+#~ "您最好提交一个针对这个软件包的故障报告。"
+
+#~ msgid "Line %d too long (max %lu)"
+#~ msgstr "第 %d 行太长了(长度限制为 %lu)。"
+
+#~ msgid "After unpacking %sB of additional disk space will be used.\n"
+#~ msgstr "解压缩后会消耗掉 %sB 的额外空间。\n"
+
+#~ msgid "After unpacking %sB disk space will be freed.\n"
+#~ msgstr "解压缩后将会空出 %sB 的空间。\n"
+
+#~ msgid "Line %d too long (max %d)"
+#~ msgstr "第 %d 行太长了(长度限制为 %d)"
+
+#~ msgid "Error occured while processing %s (NewFileDesc1)"
+#~ msgstr "处理 %s (NewFileDesc1)时出错"
+
+#~ msgid "Error occured while processing %s (NewFileDesc2)"
+#~ msgstr "处理 %s (NewFileDesc2)时出错"
+
+#~ msgid "Stored label: %s \n"
+#~ msgstr "归档文件标签:%s \n"
+
+#~ msgid ""
+#~ "Found %i package indexes, %i source indexes, %i translation indexes and "
+#~ "%i signatures\n"
+#~ msgstr ""
+#~ "找到了 %i 个软件包索引、%i 个源代码包索引,%i 个翻译索引和 %i 个数字签名\n"
+
+#~ msgid "openpty failed\n"
+#~ msgstr "openpty 失败\n"
+
+#~ msgid "File date has changed %s"
+#~ msgstr "文件 %s 的时间已被改动"
+
+#~ msgid "Reading file list"
+#~ msgstr "正在读取文件列表"
+
+#~ msgid "Could not execute "
+#~ msgstr "未能执行 "
+
+#~ msgid "Preparing for remove with config %s"
+#~ msgstr "正在准备连同配置文件的删除 %s"
+
+#~ msgid "Removed with config %s"
+#~ msgstr "连同配置文件一同删除 %s "
+
+#~ msgid "Unknown vendor ID '%s' in line %u of source list %s"
+#~ msgstr ""
+#~ "在源列表 %3$s 的第 %2$u 行发现了无法识别的软件提供商 ID (vendor ID) “%1$s”"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..6310ee7
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,4197 @@
+# 先進包裝工具 (apt) 繁體中文訊息
+# Translators: 黃思文 <steven.huang@upcursor.org>
+# Asho Yeh <asho@debian.org.tw>
+# Kanru Chen <kanru.96@stu.csie.ncnu.edu.tw>
+# Tetralet <tetralet@gmail.com>
+# Zhou Mo <cdluminate@gmail.com> 2016 # Simplified Chinese Translator, only make trivial fixes.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: apt 1.2.X\n"
+"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
+"POT-Creation-Date: 2020-05-12 18:00+0000\n"
+"PO-Revision-Date: 2009-01-28 10:41+0800\n"
+"Last-Translator: Tetralet <tetralet@gmail.com>\n"
+"Language-Team: Debian-user in Chinese [Big5] <debian-chinese-big5@lists."
+"debian.org>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive signature"
+msgstr "無效的套件庫簽章"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Error reading archive member header"
+msgstr "讀取套件檔的成員標頭訊息時發生錯誤"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Invalid archive member header"
+msgstr "無效的套件檔成員標頭"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Archive is too short"
+msgstr "套件檔過短"
+
+#: apt-inst/contrib/arfile.cc
+msgid "Failed to read the archive headers"
+msgstr "讀取套件檔標頭失敗"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+msgid "Cannot find a configured compressor for '%s'"
+msgstr "無法找到套件 %s"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Corrupted archive"
+msgstr "損毀的套件檔"
+
+#: apt-inst/contrib/extracttar.cc
+msgid "Tar checksum failed, archive corrupted"
+msgstr "Tar checksum 失敗,套件檔已損毀"
+
+#: apt-inst/contrib/extracttar.cc
+#, fuzzy, c-format
+#| msgid "Unknown TAR header type %u, member %s"
+msgid "Unknown TAR header type %u"
+msgstr "未知的 TAR 標頭類型 %u,成員 %s"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "This is not a valid DEB archive, missing '%s' member"
+msgstr "這是個不正確的 DEB 套件檔,沒有 '%s' 成員"
+
+#: apt-inst/deb/debfile.cc
+#, c-format
+msgid "Internal error, could not locate member %s"
+msgstr "內部錯誤,找不找到成員 %s"
+
+#: apt-inst/deb/debfile.cc
+msgid "Unparsable control file"
+msgstr "無法分析的 control 檔"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to write file %s"
+msgstr "寫入檔案 %s 失敗"
+
+#: apt-inst/dirstream.cc
+#, c-format
+msgid "Failed to close file %s"
+msgstr "關閉檔案 %s 失敗"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The path %s is too long"
+msgstr "路徑 %s 過長"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unpacking %s more than once"
+msgstr "解開 %s 超過一次"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is diverted"
+msgstr "路徑 %s 已被抽換"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The package is trying to write to the diversion target %s/%s"
+msgstr "此套件試圖寫至抽換後的目標 %s/%s"
+
+#: apt-inst/extract.cc
+msgid "The diversion path is too long"
+msgstr "要進行抽換的路徑過長"
+
+#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
+#: methods/rred.cc
+#, c-format
+msgid "Failed to stat %s"
+msgstr "無法取得 %s 的狀態"
+
+#: apt-inst/extract.cc ftparchive/multicompress.cc
+#, c-format
+msgid "Failed to rename %s to %s"
+msgstr "無法將 %s 更名為 %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "The directory %s is being replaced by a non-directory"
+msgstr "目錄 %s 已經被非目錄的檔案所取代"
+
+#: apt-inst/extract.cc
+msgid "Failed to locate node in its hash bucket"
+msgstr "在雜湊表中找不到節點"
+
+#: apt-inst/extract.cc
+msgid "The path is too long"
+msgstr "路徑過長"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Overwrite package match with no version for %s"
+msgstr "以無版本的 %s 覆寫原始套件"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "File %s/%s overwrites the one in the package %s"
+msgstr "檔案 %s/%s 覆寫了套件 %s 中的相同檔案"
+
+#. Only warn if there are no sources.list.d.
+#. Only warn if there is no sources.list file.
+#: apt-inst/extract.cc apt-pkg/acquire.cc apt-pkg/clean.cc
+#: apt-pkg/contrib/cdromutl.cc apt-pkg/contrib/fileutl.cc apt-pkg/deb/dpkgpm.cc
+#: apt-pkg/init.cc apt-pkg/policy.cc apt-pkg/sourcelist.cc
+#, c-format
+msgid "Unable to read %s"
+msgstr "無法讀取 %s"
+
+#: apt-inst/extract.cc
+#, c-format
+msgid "Unable to stat %s"
+msgstr "無法取得 %s 的狀態"
+
+#: apt-inst/filelist.cc
+msgid "DropNode called on still linked node"
+msgstr "DropNode 在還有連結結點時被呼叫"
+
+#: apt-inst/filelist.cc
+msgid "Failed to locate the hash element!"
+msgstr "找不到雜湊元件!"
+
+#: apt-inst/filelist.cc
+msgid "Failed to allocate diversion"
+msgstr "在配置抽換資訊時失敗"
+
+#: apt-inst/filelist.cc
+msgid "Internal error in AddDiversion"
+msgstr "在 AddDiversion 發生了內部錯誤"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
+msgstr "試圖改寫抽換資訊,%s -> %s 和 %s/%s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Double add of diversion %s -> %s"
+msgstr "重複加入抽換資訊 %s -> %s"
+
+#: apt-inst/filelist.cc
+#, c-format
+msgid "Duplicate conf file %s/%s"
+msgstr "重複的設定檔 %s/%s"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Updating from such a repository can't be done securely, and is therefore "
+"disabled by default."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"Data from such a repository can't be authenticated and is therefore "
+"potentially dangerous to use."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"See apt-secure(8) manpage for repository creation and user configuration "
+"details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is no longer signed."
+msgstr "路徑 %s 已被抽換"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' no longer has a Release file."
+msgstr "路徑 %s 已被抽換"
+
+#: apt-pkg/acquire-item.cc
+msgid ""
+"This is normally not allowed, but the option Acquire::"
+"AllowDowngradeToInsecureRepositories was given to override it."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' is not signed."
+msgstr "路徑 %s 已被抽換"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' does not have a Release file."
+msgstr "路徑 %s 已被抽換"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "The repository '%s' provides only weak security information."
+msgstr "路徑 %s 已被抽換"
+
+#: apt-pkg/acquire-item.cc ftparchive/writer.cc
+#, c-format
+msgid "Failed to readlink %s"
+msgstr "無法讀取連結 %s"
+
+#: apt-pkg/acquire-item.cc
+msgid "Hash Sum mismatch"
+msgstr "Hash Sum 不符"
+
+#: apt-pkg/acquire-item.cc
+msgid "Insufficient information available to perform this download securely"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "rename failed, %s (%s -> %s)."
+msgstr "無法重新命名,%s (%s -> %s)。"
+
+#: apt-pkg/acquire-item.cc
+msgid "Size mismatch"
+msgstr "大小不符"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Invalid file format"
+msgstr "無效的操作 %s"
+
+#: apt-pkg/acquire-item.cc
+#, fuzzy
+msgid "Signature error"
+msgstr "寫入錯誤"
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: apt-pkg/acquire-item.cc methods/gpgv.cc
+#, c-format
+msgid ""
+"Clearsigned file isn't valid, got '%s' (does the network require "
+"authentication?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"An error occurred during the signature verification. The repository is not "
+"updated and the previous index files will be used. GPG error: %s: %s"
+msgstr ""
+
+#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "GPG error: %s: %s"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
+"component '%s' (component misspelt in sources.list?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' doesn't support "
+"architecture '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
+"provide it (sources.list entry misspelt?)"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Skipping acquire of configured file '%s' as repository '%s' provides only "
+"weak security information for it"
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time since then the file is invalid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is expired (invalid since %s). Updates for this "
+"repository will not be applied."
+msgstr ""
+
+#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+#. the time until the file will be valid - formatted in the same way as in
+#. the download progress display (e.g. 7d 3h 42min 1s)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"Release file for %s is not valid yet (invalid for another %s). Updates for "
+"this repository will not be applied."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Conflicting distribution: %s (expected %s but got %s)"
+msgstr "發行版本衝突:%s(應當是 %s 但卻得到 %s)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
+msgstr ""
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
+msgstr ""
+
+#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"More information about this can be found online in the Release notes at: %s"
+msgstr ""
+
+#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"This must be accepted explicitly before updates for this repository can be "
+"applied. See %s manpage for details."
+msgstr ""
+
+#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
+#, c-format
+msgid "Failed to fetch %s %s"
+msgstr "無法取得 %s,%s"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
+msgstr ""
+"找不到 %s 套件的某個檔案。這意味著您可能要手動修復這個套件。(因為找不到平"
+"台)"
+
+#: apt-pkg/acquire-item.cc
+#, c-format
+msgid "Can't find a source to download version '%s' of '%s'"
+msgstr ""
+
+#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
+#: apt-pkg/acquire-item.cc
+#, fuzzy, c-format
+msgid "Changelog unavailable for %s=%s"
+msgstr "正和 %s (%s) 連線"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid ""
+"The method '%s' is unsupported and disabled by default. Consider switching "
+"to http(s). Set Dir::Bin::Methods::%s to \"%s\" to enable it again."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method '%s' is explicitly disabled via configuration."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc methods/connect.cc
+#, c-format
+msgid "If you meant to use Tor remember to use %s instead of %s."
+msgstr ""
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "The method driver %s could not be found."
+msgstr "找不到安裝方式的驅動程式 %s。"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid "Is the package %s installed?"
+msgstr "請檢查是否已安裝了 'dpkg-dev' 套件。\n"
+
+#: apt-pkg/acquire-worker.cc
+#, c-format
+msgid "Method %s did not start correctly"
+msgstr "安裝方式 %s 沒有正確啟動"
+
+#: apt-pkg/acquire-worker.cc
+#, fuzzy, c-format
+msgid ""
+"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
+msgstr "請把標籤為 '%s' 的光碟放入 '%s' 裝置中,然後按下 [Enter] 鍵。"
+
+#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
+#, fuzzy, c-format
+msgid "List directory %s is missing."
+msgstr "找不到清單目錄 %s。"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Archives directory %s is missing."
+msgstr "找不到套件檔目錄 %s。"
+
+#: apt-pkg/acquire.cc
+#, fuzzy, c-format
+msgid "Unable to lock directory %s"
+msgstr "無法鎖定列表目錄"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "No sandbox user '%s' on the system, can not drop privileges"
+msgstr ""
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid ""
+"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
+"by user '%s'."
+msgstr ""
+
+#: apt-pkg/acquire.cc apt-pkg/clean.cc
+#, fuzzy, c-format
+msgid "Clean of %s is not supported"
+msgstr "不被支援的索引檔類型 '%s'"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr "正在取得檔案 %li/%li(還有 %s)"
+
+#: apt-pkg/acquire.cc
+#, c-format
+msgid "Retrieving file %li of %li"
+msgstr "正在取得檔案 %li/%li"
+
+#: apt-pkg/algorithms.cc
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr "套件 %s 需要重新安裝,但找不到它的套件檔。"
+
+#: apt-pkg/algorithms.cc
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
+msgstr ""
+"錯誤,pkgProblemResolver::Resolve 的建立中斷了,這可能肇因於保留 (hold) 套"
+"件。"
+
+#: apt-pkg/algorithms.cc
+msgid "Unable to correct problems, you have held broken packages."
+msgstr "無法修正問題,您保留 (hold) 了損毀的套件。"
+
+#: apt-pkg/cachefile.cc
+msgid "The package lists or status file could not be parsed or opened."
+msgstr "無法分析或開啟套件清單或狀況檔。"
+
+#: apt-pkg/cachefile.cc
+msgid "You may want to run apt-get update to correct these problems"
+msgstr "您也許得執行 apt-get update 以修正這些問題"
+
+#: apt-pkg/cachefile.cc methods/mirror.cc
+msgid "The list of sources could not be read."
+msgstr "無法讀取來源列表。"
+
+#: apt-pkg/cachefilter.cc apt-private/private-output.cc
+#, c-format
+msgid "Regex compilation error - %s"
+msgstr "編譯正規表示式時發生錯誤 - %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Release '%s' for '%s' was not found"
+msgstr "找不到 '%2$s' 的 '%1$s' 發行版"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Version '%s' for '%s' was not found"
+msgstr "找不到 '%s' 版的 '%s'"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find task '%s'"
+msgstr "無法找到主題 %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by regex '%s'"
+msgstr "無法找到套件 %s"
+
+#: apt-pkg/cacheset.cc
+#, fuzzy, c-format
+msgid "Couldn't find any package by glob '%s'"
+msgstr "無法找到套件 %s"
+
+#: apt-pkg/cacheset.cc apt-private/private-show.cc
+#, c-format
+msgid "Unable to locate package %s"
+msgstr "找不到套件 %s"
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select versions from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select newest version from package '%s' as it is purely virtual"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select candidate version from package %s as it has no candidate"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid "Can't select installed version from package %s as it is not installed"
+msgstr ""
+
+#: apt-pkg/cacheset.cc
+#, c-format
+msgid ""
+"Can't select installed nor candidate version from package '%s' as it has "
+"neither of them"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Line %u too long in source list %s."
+msgstr "來源列表 %2$s 中的第 %1$u 行太長。"
+
+#: apt-pkg/cdrom.cc
+msgid "Unmounting CD-ROM...\n"
+msgstr "正在卸載光碟機...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Using CD-ROM mount point %s\n"
+msgstr "使用光碟機掛載點 %s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Waiting for disc...\n"
+msgstr "正在等待碟片...\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Mounting CD-ROM...\n"
+msgstr "正在掛載光碟機... \n"
+
+#: apt-pkg/cdrom.cc
+msgid "Identifying... "
+msgstr "正在識別..."
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Stored label: %s\n"
+msgstr "保存標籤:%s\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Scanning disc for index files...\n"
+msgstr "正在掃描碟片中的索引檔...\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
+"%zu signatures\n"
+msgstr "找到了 %zu 個套件索引,%zu 個原始碼索引,%zu 個翻譯索引及 %zu 個簽章\n"
+
+#: apt-pkg/cdrom.cc
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid "Found label '%s'\n"
+msgstr "找到標籤 '%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "That is not a valid name, try again.\n"
+msgstr "這並不是正確的名稱,請重試。\n"
+
+#: apt-pkg/cdrom.cc
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
+msgstr ""
+"這個碟片名為:\n"
+"'%s'\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Copying package lists..."
+msgstr "正在複製套件清單..."
+
+#: apt-pkg/cdrom.cc
+msgid "Writing new source list\n"
+msgstr "正在寫入新的來源列表\n"
+
+#: apt-pkg/cdrom.cc
+msgid "Source list entries for this disc are:\n"
+msgstr "該碟片的來源列表項目為:\n"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to change to %s"
+msgstr "無法切換至 %s"
+
+#: apt-pkg/clean.cc
+#, c-format
+msgid "Unable to stat %s."
+msgstr "無法取得 %s 的狀態。"
+
+#: apt-pkg/contrib/cdromutl.cc
+#, c-format
+msgid "Unable to stat the mount point %s"
+msgstr "無法取得掛載點 %s 的狀態"
+
+#: apt-pkg/contrib/cdromutl.cc
+msgid "Failed to stat the cdrom"
+msgstr "無法取得 CD-ROM 的狀態"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option '%c' [from %s] is not understood in combination with the "
+"other options."
+msgstr "未知的命令列選項 '%c' [來自 %s]。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, fuzzy, c-format
+msgid ""
+"Command line option %s is not understood in combination with the other "
+"options"
+msgstr "無法理解的命令列選項 %s"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Command line option %s is not boolean"
+msgstr "命令列選項 %s 不是 boolean 值"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an argument."
+msgstr "需替選項 %s 指定參數。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
+msgstr "選項 %s:在指定設定項目時應該有 =<val>。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
+msgstr "選項 %s 的參數應該是數字,而不是 '%s'"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Option '%s' is too long"
+msgstr "選項 %s 太長"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Sense %s is not understood, try true or false."
+msgstr "偵測器 %s 無法理解,試試 true 或 false。"
+
+#: apt-pkg/contrib/cmndline.cc
+#, c-format
+msgid "Invalid operation %s"
+msgstr "無效的操作 %s"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Unrecognized type abbreviation: '%c'"
+msgstr "無法辨識的縮寫類型:'%c'"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
+msgstr "語法錯誤 %s:%u:區塊開頭沒有名稱。"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
+msgstr "語法錯誤 %s:%u:標籤格式錯誤"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
+msgstr "語法錯誤 %s:%u:數值後有多餘的垃圾"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
+msgstr "語法錯誤 %s:%u:指令只能於最高層級執行"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
+msgstr "語法錯誤 %s:%u: 太多巢狀引入檔"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Included from here"
+msgstr "語法錯誤 %s:%u:從此引入"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
+msgstr "語法錯誤 %s:%u:不支援的指令 '%s'"
+
+#: apt-pkg/contrib/configuration.cc
+#, fuzzy, c-format
+msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
+msgstr "語法錯誤 %s:%u:指令只能於最高層級執行"
+
+#: apt-pkg/contrib/configuration.cc
+#, c-format
+msgid "Syntax error %s:%u: Extra junk at end of file"
+msgstr "語法錯誤 %s:%u:在檔案結尾有多餘的垃圾"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem unlinking the file %s"
+msgstr "在刪除檔案時發生問題"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for read only lock file %s"
+msgstr "不在唯讀檔案 %s 上使用檔案鎖定"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open lock file %s"
+msgstr "無法開啟鎖定檔 %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
+msgstr "不在以 nfs 掛載的檔案 %s 上使用檔案鎖定"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not get lock %s"
+msgstr "無法將 %s 鎖定"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "List of files can't be created as '%s' is not a directory"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid ""
+"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
+#: cmdline/apt-dump-solver.cc
+#, c-format
+msgid "Waited for %s but it wasn't there"
+msgstr "等待 %s 但是它並不存在"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
+msgstr "子程序 %s 收到一個記憶體錯誤。"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Sub-process %s received signal %u."
+msgstr "子程序 %s 收到一個記憶體錯誤。"
+
+#. we forward the statuscode, so don't generate a message on the fd in this case
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
+msgstr "子程序 %s 傳回錯誤碼 (%u)"
+
+#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
+msgstr "子程序 %s 不預期得結束"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Read error"
+msgstr "讀取錯誤"
+
+#: apt-pkg/contrib/fileutl.cc methods/ftp.cc methods/rsh.cc
+msgid "Write error"
+msgstr "寫入錯誤"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the gzip file %s"
+msgstr "在關閉檔案時發生問題"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Unexpected end of file"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to create subprocess IPC"
+msgstr "無法建立子程序 IPC"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Failed to exec compressor "
+msgstr "無法執行壓縮程式"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Could not open file %s"
+msgstr "無法開啟檔案 %s"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Could not open file descriptor %d"
+msgstr "無法開啟管線給 %s 使用"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "read, still have %llu to read but none left"
+msgstr "讀取,仍有 %lu 未讀但已無空間"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "write, still have %llu to write but couldn't"
+msgstr "寫入,仍有 %lu 待寫入但已沒辨法"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem closing the file %s"
+msgstr "在關閉檔案時發生問題"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Problem renaming the file %s to %s"
+msgstr "在同步檔案時發生問題"
+
+#: apt-pkg/contrib/fileutl.cc
+msgid "Problem syncing the file"
+msgstr "在同步檔案時發生問題"
+
+#: apt-pkg/contrib/fileutl.cc
+#, fuzzy, c-format
+msgid "Unable to mkstemp %s"
+msgstr "無法取得 %s 的狀態"
+
+#: apt-pkg/contrib/fileutl.cc
+#, c-format
+msgid "Unable to write to %s"
+msgstr "無法寫入 %s"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Can't mmap an empty file"
+msgstr "不能 mmap 空白檔案"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't make mmap of %llu bytes"
+msgstr "無法 mmap 到 %lu 位元組"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy, c-format
+msgid "Couldn't duplicate file descriptor %i"
+msgstr "無法開啟管線給 %s 使用"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to close mmap"
+msgstr "無法開啟 %s"
+
+#: apt-pkg/contrib/mmap.cc
+#, fuzzy
+msgid "Unable to synchronize mmap"
+msgstr "無法 invoke "
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
+msgstr "無法 mmap 到 %lu 位元組"
+
+#: apt-pkg/contrib/mmap.cc
+msgid "Failed to truncate file"
+msgstr "無法截短檔案"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
+"Current value: %lu. (man 5 apt.conf)"
+msgstr ""
+"動態 MMap 已用完所有空間。請增加 APT::Cache-Start 的大小。目前大小為:%lu。"
+"(man 5 apt.conf)"
+
+#: apt-pkg/contrib/mmap.cc
+#, c-format
+msgid ""
+"Unable to increase the size of the MMap as the limit of %lu bytes is already "
+"reached."
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc
+msgid ""
+"Unable to increase size of the MMap as automatic growing is disabled by user."
+msgstr ""
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Error!"
+msgstr "%c%s... 錯誤!"
+
+#: apt-pkg/contrib/progress.cc
+#, c-format
+msgid "%c%s... Done"
+msgstr "%c%s... 完成"
+
+#: apt-pkg/contrib/progress.cc
+msgid "..."
+msgstr ""
+
+#. Print the spinner
+#: apt-pkg/contrib/progress.cc
+#, fuzzy, c-format
+msgid "%c%s... %u%%"
+msgstr "%c%s... 完成"
+
+#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lid %lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: h means hours, min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lih %limin %lis"
+msgstr ""
+
+#. TRANSLATOR: min means minutes, s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%limin %lis"
+msgstr ""
+
+#. TRANSLATOR: s means seconds
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "%lis"
+msgstr ""
+
+#: apt-pkg/contrib/strutl.cc
+#, c-format
+msgid "Selection %s not found"
+msgstr "選項 %s 找不到"
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; another identifier like Contents;
+#. filename and linenumber of the sources.list entry currently parsed
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
+msgstr ""
+
+#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
+#. a file like main/binary-amd64/Packages; filename and linenumber of
+#. two sources.list entries
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Target %s (%s) is configured multiple times in %s and %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr "無法辨別 Release 檔 %s"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No sections in Release file %s"
+msgstr "在 Release 檔 %s 裡沒有區段"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "No Hash entry in Release file %s"
+msgstr "在 Release 檔 %s 裡沒有 Hash 項目"
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid ""
+"No Hash entry in Release file %s which is considered strong enough for "
+"security purposes"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, fuzzy, c-format
+msgid "Invalid '%s' entry in Release file %s"
+msgstr "在 Release 檔 %s 裡沒有 Hash 項目"
+
+#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Invalid value set for option %s regarding source %s %s (%s)"
+msgstr ""
+
+#: apt-pkg/deb/debmetaindex.cc
+#, c-format
+msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
+msgstr ""
+
+#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
+#, c-format
+msgid "Unable to parse package file %s (%d)"
+msgstr "無法辨識套件檔 %s (%d)"
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to acquire the dpkg frontend lock (%s), is another process using it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
+msgstr "無法鎖定列表目錄"
+
+#. TRANSLATORS: the %s contains the recovery command, usually
+#. dpkg --configure -a
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"dpkg was interrupted, you must manually run '%s' to correct the problem. "
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, c-format
+msgid ""
+"Unable to lock the administration directory (%s), is another process using "
+"it?"
+msgstr ""
+
+#: apt-pkg/deb/debsystem.cc
+#, fuzzy, c-format
+msgid "Unable to lock the administration directory (%s), are you root?"
+msgstr "無法鎖定列表目錄"
+
+#: apt-pkg/deb/debsystem.cc
+msgid "Not locked"
+msgstr ""
+
+#. we don't care for the difference
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing %s"
+msgstr "正在準備 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to configure %s"
+msgstr "正在準備設定 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr "正在準備移除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Preparing to completely remove %s"
+msgstr "正在準備完整移除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Noting disappearance of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Running post-installation trigger %s"
+msgstr "正在執行安裝後套件後續處理程式 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installed %s"
+msgstr "已安裝 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Configuring %s"
+msgstr "正在設定 %s"
+
+#. FIXME: use a better string after freeze
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Directory '%s' missing"
+msgstr "找不到 '%s' 目錄"
+
+#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
+#, fuzzy, c-format
+msgid "Could not open file '%s'"
+msgstr "無法開啟檔案 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Unpacking %s"
+msgstr "正在解開 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Installing %s"
+msgstr "正在安裝 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Removing %s"
+msgstr "正在移除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Completely removing %s"
+msgstr "已完整移除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, c-format
+msgid "Completely removed %s"
+msgstr "已完整移除 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+#, fuzzy, c-format
+msgid "Can not write log (%s)"
+msgstr "無法寫入 %s"
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Is /dev/pts mounted?"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "Operation was interrupted before it could finish"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid "No apport report written because MaxReports is reached already"
+msgstr ""
+
+#. check if its not a follow up error
+#: apt-pkg/deb/dpkgpm.cc
+msgid "dependency problems - leaving unconfigured"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates its a followup "
+"error from a previous failure."
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a disk full "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a out of memory "
+"error"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates an issue on the "
+"local system"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc
+msgid ""
+"No apport report written because the error message indicates a dpkg I/O error"
+msgstr ""
+
+#: apt-pkg/depcache.cc
+msgid "Building dependency tree"
+msgstr "正在重建相依關係"
+
+#: apt-pkg/depcache.cc
+msgid "Candidate versions"
+msgstr "候選版本"
+
+#: apt-pkg/depcache.cc
+msgid "Dependency generation"
+msgstr "建立相依關係"
+
+#: apt-pkg/depcache.cc
+msgid "Reading state information"
+msgstr "正在讀取狀態資料"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to open StateFile %s"
+msgstr "無法開啟 StateFile %s"
+
+#: apt-pkg/depcache.cc
+#, c-format
+msgid "Failed to write temporary StateFile %s"
+msgstr "無法寫入暫存的 StateFile %s"
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Prepare for receiving solution"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External solver failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external solver"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Execute external planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send request to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "Send scenario to planner"
+msgstr ""
+
+#: apt-pkg/edsp.cc
+msgid "External planner failed without a proper error message"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records.\n"
+msgstr "寫入 %i 筆紀錄。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
+msgstr "寫入 %i 筆紀綠,其中有 %i 個檔案遺失了。\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
+msgstr "寫入 %i 筆紀綠,其中有 %i 個檔案不符\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+msgstr "寫入 %i 筆紀綠,其中有 %i 個檔案遺失了,有 %i 個檔案不符\n"
+
+#: apt-pkg/indexcopy.cc
+#, c-format
+msgid "Can't find authentication record for: %s"
+msgstr ""
+
+#: apt-pkg/indexcopy.cc
+#, fuzzy, c-format
+msgid "Hash mismatch for: %s"
+msgstr "Hash Sum 不符"
+
+#: apt-pkg/init.cc
+#, c-format
+msgid "Packaging system '%s' is not supported"
+msgstr "不支援的套件包裝系統 '%s'"
+
+#: apt-pkg/init.cc
+msgid "Unable to determine a suitable packaging system type"
+msgstr "無法確認合適的套件包裝系統類型"
+
+#: apt-pkg/install-progress.cc
+#, c-format
+msgid "Progress: [%3li%%]"
+msgstr ""
+
+#. send status information that we are about to fork dpkg
+#: apt-pkg/install-progress.cc
+msgid "Running dpkg"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
+"under APT::Immediate-Configure for details. (%d)"
+msgstr ""
+
+#: apt-pkg/packagemanager.cc
+#, fuzzy, c-format
+msgid "Could not configure '%s'. "
+msgstr "無法開啟檔案 %s"
+
+#: apt-pkg/packagemanager.cc
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
+msgstr ""
+"此安裝因衝突或預先相依關係,需暫時刪除 %s 這個基本套件。這通常不是好主意,但"
+"若您執意進行,請設定 APT::Force-LoopBreak 選項。"
+
+#: apt-pkg/pkgcache.cc
+msgid "Empty package cache"
+msgstr "清空套件快取"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is corrupted"
+msgstr "套件快取檔損壞"
+
+#: apt-pkg/pkgcache.cc
+msgid "The package cache file is an incompatible version"
+msgstr "套件快取檔版本不符"
+
+#: apt-pkg/pkgcache.cc
+#, c-format
+msgid "This APT does not support the versioning system '%s'"
+msgstr "本 APT 不支援 '%s' 版本系統"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy, c-format
+msgid "The package cache was built for different architectures: %s vs %s"
+msgstr "這個套件快取是用於另一種平台的"
+
+#: apt-pkg/pkgcache.cc
+#, fuzzy
+msgid "The package cache file is corrupted, it has the wrong hash"
+msgstr "套件快取檔損壞"
+
+#: apt-pkg/pkgcache.cc
+msgid "Depends"
+msgstr "相依關係"
+
+#: apt-pkg/pkgcache.cc
+msgid "PreDepends"
+msgstr "預先相依關係"
+
+#: apt-pkg/pkgcache.cc
+msgid "Suggests"
+msgstr "建議"
+
+#: apt-pkg/pkgcache.cc
+msgid "Conflicts"
+msgstr "衝突"
+
+#: apt-pkg/pkgcache.cc
+msgid "Recommends"
+msgstr "推薦"
+
+#: apt-pkg/pkgcache.cc
+msgid "Replaces"
+msgstr "取代"
+
+#: apt-pkg/pkgcache.cc
+msgid "Breaks"
+msgstr "毀損"
+
+#: apt-pkg/pkgcache.cc
+msgid "Enhances"
+msgstr ""
+
+#: apt-pkg/pkgcache.cc
+msgid "Obsoletes"
+msgstr "廢棄"
+
+#: apt-pkg/pkgcache.cc
+msgid "important"
+msgstr "重要"
+
+#: apt-pkg/pkgcache.cc
+msgid "required"
+msgstr "必要"
+
+#: apt-pkg/pkgcache.cc
+msgid "standard"
+msgstr "標準"
+
+#: apt-pkg/pkgcache.cc
+msgid "extra"
+msgstr "額外"
+
+#: apt-pkg/pkgcache.cc
+msgid "optional"
+msgstr "次要"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Cache has an incompatible versioning system"
+msgstr "快取使用的是不相容的版本系統"
+
+#. TRANSLATOR: The first placeholder is a package name,
+#. the other two should be copied verbatim as they include debug info
+#: apt-pkg/pkgcachegen.cc
+#, fuzzy, c-format
+msgid "Error occurred while processing %s (%s%d)"
+msgstr "在處理 %s 時發生錯誤 (FindPkg)"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of package names this APT is capable of."
+msgstr "哇呀,您已經超過這個 APT 所能處理的套件名稱數量了。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of versions this APT is capable of."
+msgstr "哇呀,您已經超過這個 APT 所能處理的版本數量了。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of descriptions this APT is capable of."
+msgstr "哇呀,您已經超過這個 APT 所能處理的說明數量了。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+msgstr "哇呀,您已經超過這個 APT 所能處理的相依關係數量了。"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "Reading package lists"
+msgstr "正在讀取套件清單"
+
+#: apt-pkg/pkgcachegen.cc
+msgid "IO Error saving source cache"
+msgstr "在儲存來源快取時 IO 錯誤"
+
+#: apt-pkg/pkgrecords.cc
+#, c-format
+msgid "Index file type '%s' is not supported"
+msgstr "不被支援的索引檔類型 '%s'"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"The value '%s' is invalid for APT::Default-Release as such a release is not "
+"available in the sources"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, fuzzy, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
+msgstr "個人設定檔中有些不正確資料,沒有以 Package 開頭"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "Did not understand pin type %s"
+msgstr "無法分析鎖定類型 %s"
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid ""
+"%s: The special 'Pin-Priority: %s' can only be used for 'Package: *' records"
+msgstr ""
+
+#: apt-pkg/policy.cc
+#, c-format
+msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
+msgstr ""
+
+#: apt-pkg/policy.cc
+msgid "No priority (or zero) specified for pin"
+msgstr "銷定並沒有優先順序之分(或零)"
+
+#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed entry %u in %s file %s (%s)"
+msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #1"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
+msgstr "來源列表 %2$s 中的第 %1$u 行的格式錯誤(類型)"
+
+#: apt-pkg/sourcelist.cc
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
+msgstr "未知的類型 '%1$s',位於在來源列表 %3$s 中的第 %2$u 行"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Malformed stanza %u in source list %s (type)"
+msgstr "來源列表 %2$s 中的第 %1$u 行的格式錯誤(類型)"
+
+#: apt-pkg/sourcelist.cc
+#, fuzzy, c-format
+msgid "Type '%s' is not known on stanza %u in source list %s"
+msgstr "未知的類型 '%1$s',位於在來源列表 %3$s 中的第 %2$u 行"
+
+#: apt-pkg/sourcelist.cc apt-private/private-install.cc
+#, c-format
+msgid "Unsupported file %s given on commandline"
+msgstr ""
+
+#: apt-pkg/srcrecords.cc
+msgid "You must put some 'source' URIs in your sources.list"
+msgstr "在 sources.list 中必須包含一些 'source' URI"
+
+#: apt-pkg/tagfile.cc
+#, c-format
+msgid "Cannot convert %s to integer: out of range"
+msgstr ""
+
+#: apt-pkg/update.cc
+#, fuzzy
+msgid ""
+"Some index files failed to download. They have been ignored, or old ones "
+"used instead."
+msgstr "有一些索引檔不能下載,它們可能被略過了,或是替而使用原有的索引檔。"
+
+#: apt-pkg/upgrade.cc
+msgid "Calculating upgrade"
+msgstr "籌備升級中"
+
+#. TRANSLATOR: Very short word to be displayed before unchanged files in 'apt-get update'
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Hit:%lu %s"
+msgstr "已有:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files processed in 'apt-get update'
+#. Potentially replaced later by "Hit:", "Ign:" or "Err:" if something (bad) happens
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Get:%lu %s"
+msgstr "下載:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download, but the error is ignored (compare "Err:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Ign:%lu %s"
+msgstr "略過:%lu %s"
+
+#. TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
+#. which failed to download and the error is critical (compare "Ign:")
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Err:%lu %s"
+msgstr "錯誤:%lu %s"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid "Fetched %sB in %s (%sB/s)\n"
+msgstr "取得 %sB 用了 %s (%sB/s)\n"
+
+#: apt-private/acqprogress.cc
+msgid " [Working]"
+msgstr " [工作中]"
+
+#: apt-private/acqprogress.cc
+#, c-format
+msgid ""
+"Media change: please insert the disc labeled\n"
+" '%s'\n"
+"in the drive '%s' and press [Enter]\n"
+msgstr ""
+"更換媒體:請把以下名稱的光碟\n"
+" '%s'\n"
+"放入 '%s' 裝置,然後按 [Enter] 鍵\n"
+
+#: apt-private/acqprogress.cc
+msgid ""
+"Do you want to accept these changes and continue updating from this "
+"repository?"
+msgstr ""
+
+#: apt-private/private-cachefile.cc
+msgid "Correcting dependencies..."
+msgstr "正在修正相依關係..."
+
+#: apt-private/private-cachefile.cc
+msgid " failed."
+msgstr " 失敗。"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to correct dependencies"
+msgstr "無法修正相依關係"
+
+#: apt-private/private-cachefile.cc
+msgid "Unable to minimize the upgrade set"
+msgstr "無法將升級計劃最小化"
+
+#: apt-private/private-cachefile.cc
+msgid " Done"
+msgstr " 完成"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid "You might want to run 'apt --fix-broken install' to correct these."
+msgstr "您也許得執行 'apt --fix-broken install' 以修正這些問題。"
+
+#: apt-private/private-cachefile.cc apt-private/private-install.cc
+msgid ""
+"Unmet dependencies. Try 'apt --fix-broken install' with no packages (or "
+"specify a solution)."
+msgstr ""
+"未能滿足相依關係。請試著不指定套件來執行 'apt --fix-broken install'(或採取其"
+"它的解決方案)。"
+
+#: apt-private/private-cacheset.cc apt-private/private-search.cc
+msgid "Sorting"
+msgstr ""
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for task '%s'\n"
+msgstr "注意,根據正規表示式 '%2$s' 而選擇了 %1$s\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for glob '%s'\n"
+msgstr "注意,根據正規表示式 '%2$s' 而選擇了 %1$s\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' for regex '%s'\n"
+msgstr "注意,根據正規表示式 '%2$s' 而選擇了 %1$s\n"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package %s is a virtual package provided by:\n"
+msgstr "套件 %s 是虛擬套件,提供者為:\n"
+
+#: apt-private/private-cacheset.cc
+msgid " [Installed]"
+msgstr "【已安裝】"
+
+#: apt-private/private-cacheset.cc
+msgid " [Not candidate version]"
+msgstr "【非候選版本】"
+
+#: apt-private/private-cacheset.cc
+msgid "You should explicitly select one to install."
+msgstr "請您明確地選擇一個來進行安裝。"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid ""
+"Package %s is not available, but is referred to by another package.\n"
+"This may mean that the package is missing, has been obsoleted, or\n"
+"is only available from another source\n"
+msgstr ""
+"無法取得套件 %s,但它卻被其它的套件引用了。\n"
+"這意味著這個套件可能已經消失了、被廢棄了,或是只能由其他的來源取得\n"
+
+#: apt-private/private-cacheset.cc
+msgid "However the following packages replace it:"
+msgstr "然而,下列的套件取代了它:"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Package '%s' has no installation candidate"
+msgstr "套件 %s 沒有可安裝的候選版本"
+
+#: apt-private/private-cacheset.cc
+#, c-format
+msgid "Virtual packages like '%s' can't be removed\n"
+msgstr ""
+
+#. TRANSLATORS: Note, this is not an interactive question
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
+msgstr "套件 %s 並沒有被安裝,所以也不會被移除\n"
+
+#: apt-private/private-cacheset.cc apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Package '%s' is not installed, so not removed\n"
+msgstr "套件 %s 並沒有被安裝,所以也不會被移除\n"
+
+#: apt-private/private-cacheset.cc
+#, fuzzy, c-format
+msgid "Note, selecting '%s' instead of '%s'\n"
+msgstr "注意,選擇了以 %s 替代 %s\n"
+
+#: apt-private/private-cmndline.cc
+msgid "Most used commands:"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+#, c-format
+msgid "See %s for more information about the available commands."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"Configuration options and syntax is detailed in apt.conf(5).\n"
+"Information about how to configure sources can be found in sources.list(5).\n"
+"Package and version choices can be expressed via apt_preferences(5).\n"
+"Security details are available in apt-secure(8).\n"
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid "This APT has Super Cow Powers."
+msgstr "該 APT 有著超級牛力。"
+
+#: apt-private/private-cmndline.cc
+msgid "This APT helper has Super Meep Powers."
+msgstr ""
+
+#: apt-private/private-cmndline.cc
+msgid ""
+"--force-yes is deprecated, use one of the options starting with --allow "
+"instead."
+msgstr ""
+
+#: apt-private/private-depends.cc apt-private/private-download.cc
+#: apt-private/private-show.cc cmdline/apt-mark.cc
+msgid "No packages found"
+msgstr "未找到套件"
+
+#: apt-private/private-download.cc
+msgid "WARNING: The following packages cannot be authenticated!"
+msgstr "【警告】:無法驗證下列套件!"
+
+#: apt-private/private-download.cc
+msgid "Authentication warning overridden.\n"
+msgstr "忽略了驗證警告。\n"
+
+#: apt-private/private-download.cc
+msgid "Some packages could not be authenticated"
+msgstr "有部份套件無法驗證"
+
+#: apt-private/private-download.cc
+msgid "Install these packages without verification?"
+msgstr "是否不經驗證就安裝這些套件?"
+
+#: apt-private/private-download.cc
+#, fuzzy
+msgid ""
+"There were unauthenticated packages and -y was used without --allow-"
+"unauthenticated"
+msgstr "發生了問題,且 -y 並沒有和 --force-yes 搭配使用"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr "無法確認 %s 的未使用空間"
+
+#: apt-private/private-download.cc
+#, c-format
+msgid "You don't have enough free space in %s."
+msgstr "在 %s 裡沒有足夠的的未使用空間。"
+
+#: apt-private/private-download.cc
+msgid "Unable to lock the download directory"
+msgstr "無法鎖定下載目錄"
+
+#: apt-private/private-install.cc
+msgid ""
+"Some packages could not be installed. This may mean that you have\n"
+"requested an impossible situation or if you are using the unstable\n"
+"distribution that some required packages have not yet been created\n"
+"or been moved out of Incoming."
+msgstr ""
+"有些套件無法安裝。這可能意謂著您的要求難以解決,或是若您使用的是\n"
+"unstable 發行版,可能有些必要的套件尚未建立,或是被移出 Incoming 了。"
+
+#.
+#. if (Packages == 1)
+#. {
+#. c1out << std::endl;
+#. c1out <<
+#. _("Since you only requested a single operation it is extremely likely that\n"
+#. "the package is simply not installable and a bug report against\n"
+#. "that package should be filed.") << std::endl;
+#. }
+#.
+#: apt-private/private-install.cc
+msgid "The following information may help to resolve the situation:"
+msgstr "以下的資訊或許有助於解決當前的情況:"
+
+#: apt-private/private-install.cc
+msgid "Broken packages"
+msgstr "損毀的套件"
+
+#: apt-private/private-install.cc
+msgid ""
+"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
+"missing?"
+msgstr ""
+"有部份套件檔無法取得,試著執行 apt-get update 或者試著加上 --fix-missing 選"
+"項?"
+
+#: apt-private/private-install.cc
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr "內部錯誤,在損毀的套件上執行 InstallPackages!"
+
+#: apt-private/private-install.cc
+msgid "Packages need to be removed but remove is disabled."
+msgstr "有套件需要被移除,但卻被禁止移除。"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"Essential packages were removed and -y was used without --allow-remove-"
+"essential."
+msgstr "發生了問題,且 -y 並沒有和 --force-yes 搭配使用"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid "Packages were downgraded and -y was used without --allow-downgrades."
+msgstr "發生了問題,且 -y 並沒有和 --force-yes 搭配使用"
+
+#: apt-private/private-install.cc
+msgid ""
+"Held packages were changed and -y was used without --allow-change-held-"
+"packages."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "Internal error, Ordering didn't finish"
+msgstr "內部錯誤,排序未能完成"
+
+#: apt-private/private-install.cc
+msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
+msgstr "怪哉... 檔案大小不符,請發信給 apt@packages.debian.org"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB/%sB of archives.\n"
+msgstr "需要下載 %sB/%sB 的套件檔。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "Need to get %sB of archives.\n"
+msgstr "需要下載 %sB 的套件檔。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB of additional disk space will be used.\n"
+msgstr "此操作完成之後,會多佔用 %sB 的磁碟空間。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-install.cc
+#, c-format
+msgid "After this operation, %sB disk space will be freed.\n"
+msgstr "此操作完成之後,會空出 %sB 的磁碟空間。\n"
+
+#: apt-private/private-install.cc
+msgid "Trivial Only specified but this is not a trivial operation."
+msgstr "雖然指定了 Trivial Only(自動答 NO)選項,但這並不是 trivial 操作。"
+
+#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
+#. careful with hard to type or special characters (like non-breaking spaces)
+#: apt-private/private-install.cc
+msgid "Yes, do as I say!"
+msgstr "Yes, do as I say!"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid ""
+"You are about to do something potentially harmful.\n"
+"To continue type in the phrase '%s'\n"
+" ?] "
+msgstr ""
+"您所進行的操作可能會帶來危險。\n"
+"請輸入 '%s' 這個句子以繼續進行\n"
+" ?] "
+
+#: apt-private/private-install.cc
+msgid "Abort."
+msgstr "放棄執行。"
+
+#: apt-private/private-install.cc cmdline/apt-mark.cc
+msgid "Do you want to continue?"
+msgstr "是否繼續進行 [Y/n]?"
+
+#: apt-private/private-install.cc
+msgid "Some files failed to download"
+msgstr "有部份檔案無法下載"
+
+#: apt-private/private-install.cc apt-private/private-source.cc
+msgid "Download complete and in download only mode"
+msgstr "下載完成,且這是『僅下載』模式"
+
+#: apt-private/private-install.cc
+msgid "--fix-missing and media swapping is not currently supported"
+msgstr "目前尚未支援 --fix-missing 和媒體抽換"
+
+#: apt-private/private-install.cc
+msgid "Unable to correct missing packages."
+msgstr "無法修正欠缺的套件。"
+
+#: apt-private/private-install.cc
+msgid "Aborting install."
+msgstr "放棄安裝。"
+
+#: apt-private/private-install.cc
+msgid ""
+"The following package disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgid_plural ""
+"The following packages disappeared from your system as\n"
+"all files have been overwritten by other packages:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-install.cc
+msgid "Note: This is done automatically and on purpose by dpkg."
+msgstr ""
+
+#: apt-private/private-install.cc
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr "我們沒有計劃要刪除任何東西,無法啟動 AutoRemover"
+
+#: apt-private/private-install.cc
+msgid ""
+"Hmm, seems like the AutoRemover destroyed something which really\n"
+"shouldn't happen. Please file a bug report against apt."
+msgstr ""
+"嗯,看起來 AutoRemover 弄壞了什麼東西,而這是不該發生的。\n"
+"請針對 apt 發佈錯誤回報。"
+
+#: apt-private/private-install.cc
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr "內部錯誤,AutoRemover 處理失敗"
+
+#: apt-private/private-install.cc
+#, fuzzy
+msgid ""
+"The following package was automatically installed and is no longer required:"
+msgid_plural ""
+"The following packages were automatically installed and are no longer "
+"required:"
+msgstr[0] "以下套件是被自動安裝進來的,且已不再會被用到了:"
+msgstr[1] "以下套件是被自動安裝進來的,且已不再會被用到了:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%lu package was automatically installed and is no longer required.\n"
+msgid_plural ""
+"%lu packages were automatically installed and are no longer required.\n"
+msgstr[0] "以下套件是被自動安裝進來的,且已不再會被用到了:"
+msgstr[1] "以下套件是被自動安裝進來的,且已不再會被用到了:"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Use '%s' to remove it."
+msgid_plural "Use '%s' to remove them."
+msgstr[0] "使用 '%s' 來將其移除。"
+msgstr[1] "使用 '%s' 來將其移除。"
+
+#: apt-private/private-install.cc
+msgid "The following additional packages will be installed:"
+msgstr "下列的額外套件將被安裝:"
+
+#: apt-private/private-install.cc
+msgid "Suggested packages:"
+msgstr "建議套件:"
+
+#: apt-private/private-install.cc
+msgid "Recommended packages:"
+msgstr "推薦套件:"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Skipping %s, it is already installed and upgrade is not set.\n"
+msgstr "忽略 %s,它已被安裝且沒有計劃要進行升級。\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
+msgstr "忽略 %s,它已被安裝且沒有計劃要進行升級。\n"
+
+#: apt-private/private-install.cc
+#, c-format
+msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
+msgstr "無法重新安裝 %s,因為它無法下載。\n"
+
+#. TRANSLATORS: First string is package name, second is version
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "%s is already the newest version (%s).\n"
+msgstr "%s 已經是最新版本了。\n"
+
+#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
+#, c-format
+msgid "%s set to manually installed.\n"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s'\n"
+msgstr "選定的版本為 %3$s 的 %1$s (%2$s)\n"
+
+#: apt-private/private-install.cc
+#, fuzzy, c-format
+msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
+msgstr "選定的版本為 %3$s 的 %1$s (%2$s)\n"
+
+#: apt-private/private-list.cc
+msgid "Listing"
+msgstr ""
+
+#: apt-private/private-list.cc
+#, c-format
+msgid "There is %i additional version. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional versions. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: placeholder is a binary name like apt or apt-get
+#: apt-private/private-main.cc
+#, c-format
+msgid ""
+"NOTE: This is only a simulation!\n"
+" %s needs root privileges for real execution.\n"
+" Keep also in mind that locking is deactivated,\n"
+" so don't depend on the relevance to the real current situation!\n"
+msgstr ""
+
+#: apt-private/private-output.cc apt-private/private-show.cc
+msgid "unknown"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy, c-format
+msgid "[installed,upgradable to: %s]"
+msgstr "【已安裝】"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,local]"
+msgstr "【已安裝】"
+
+#: apt-private/private-output.cc
+msgid "[installed,auto-removable]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed,automatic]"
+msgstr "【已安裝】"
+
+#: apt-private/private-output.cc
+#, fuzzy
+msgid "[installed]"
+msgstr "【已安裝】"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "[upgradable from: %s]"
+msgstr ""
+
+#: apt-private/private-output.cc
+msgid "[residual-config]"
+msgstr ""
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is installed"
+msgstr "但 %s 卻已安裝"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "but %s is to be installed"
+msgstr "但 %s 卻將被安裝"
+
+#: apt-private/private-output.cc
+msgid "but it is not installable"
+msgstr "但它卻無法安裝"
+
+#: apt-private/private-output.cc
+msgid "but it is a virtual package"
+msgstr "但它是虛擬套件"
+
+#: apt-private/private-output.cc
+msgid "but it is not going to be installed"
+msgstr "但它卻將不會被安裝"
+
+#: apt-private/private-output.cc
+msgid "but it is not installed"
+msgstr "但它卻尚未安裝"
+
+#: apt-private/private-output.cc
+msgid " or"
+msgstr "或"
+
+#: apt-private/private-output.cc
+msgid "The following packages have unmet dependencies:"
+msgstr "下列的套件有未滿足的相依關係:"
+
+#: apt-private/private-output.cc
+msgid "The following NEW packages will be installed:"
+msgstr "下列【新】套件將會被安裝:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be REMOVED:"
+msgstr "下列套件將會被【移除】:"
+
+#: apt-private/private-output.cc
+msgid "The following packages have been kept back:"
+msgstr "下列套件將會維持其原有版本:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be upgraded:"
+msgstr "下列套件將會被升級:"
+
+#: apt-private/private-output.cc
+msgid "The following packages will be DOWNGRADED:"
+msgstr "下列套件將會被【降級】:"
+
+#: apt-private/private-output.cc
+msgid "The following held packages will be changed:"
+msgstr "下列被保留 (hold) 的套件將會被更改:"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%s (due to %s)"
+msgstr "%s(因為 %s"
+
+#: apt-private/private-output.cc
+msgid ""
+"WARNING: The following essential packages will be removed.\n"
+"This should NOT be done unless you know exactly what you are doing!"
+msgstr ""
+"【警告】:下列的基本套件都將被移除。\n"
+"除非您很清楚您在做什麼,否則請勿輕易嘗試!"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu upgraded, %lu newly installed, "
+msgstr "升級 %lu 個,新安裝 %lu 個,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu reinstalled, "
+msgstr "重新安裝 %lu 個,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu downgraded, "
+msgstr "降級 %lu 個,"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu to remove and %lu not upgraded.\n"
+msgstr "移除 %lu 個,有 %lu 個未被升級。\n"
+
+#: apt-private/private-output.cc
+#, c-format
+msgid "%lu not fully installed or removed.\n"
+msgstr "%lu 個沒有完整得安裝或移除。\n"
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to Y[es]
+#. e.g. "Do you want to continue? [Y/n] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[Y/n]"
+msgstr ""
+
+#. TRANSLATOR: Yes/No question help-text: defaulting to N[o]
+#. e.g. "Should this file be removed? [y/N] "
+#. The user has to answer with an input matching the
+#. YESEXPR/NOEXPR defined in your l10n.
+#: apt-private/private-output.cc
+msgid "[y/N]"
+msgstr ""
+
+#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
+#: apt-private/private-output.cc
+msgid "Y"
+msgstr ""
+
+#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
+#: apt-private/private-output.cc
+msgid "N"
+msgstr ""
+
+#: apt-private/private-search.cc
+#, fuzzy
+msgid "You must give at least one search pattern"
+msgstr "您必須明確得給定一個樣式"
+
+#: apt-private/private-search.cc
+msgid "Full Text Search"
+msgstr ""
+
+#: apt-private/private-show.cc
+#, c-format
+msgid "There is %i additional record. Please use the '-a' switch to see it"
+msgid_plural ""
+"There are %i additional records. Please use the '-a' switch to see them."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-show.cc
+msgid "not a real package (virtual)"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid "Package files:"
+msgstr "套件檔:"
+
+#: apt-private/private-show.cc
+msgid "Cache is out of sync, can't x-ref a package file"
+msgstr "快取資料未同步,無法 x-ref 套件檔"
+
+#. Show any packages have explicit pins
+#: apt-private/private-show.cc
+msgid "Pinned packages:"
+msgstr "鎖定的套件:"
+
+#. Print the package name and the version we are forcing to
+#: apt-private/private-show.cc
+#, c-format
+msgid "%s -> %s with priority %d\n"
+msgstr ""
+
+#: apt-private/private-show.cc
+msgid " Installed: "
+msgstr " 已安裝:"
+
+#: apt-private/private-show.cc
+msgid " Candidate: "
+msgstr " 候選:"
+
+#: apt-private/private-show.cc
+msgid "(none)"
+msgstr "(無)"
+
+#. Show the priority tables
+#: apt-private/private-show.cc
+msgid " Version table:"
+msgstr " 版本列表:"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package for architecture '%s'"
+msgstr "無法找到套件 %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with version '%s'"
+msgstr "無法找到套件 %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Can not find a package '%s' with release '%s'"
+msgstr "無法找到套件 %s"
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Picking '%s' as source package instead of '%s'\n"
+msgstr "無法取得來源套件列表 %s 的狀態"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Can not find version '%s' of package '%s'"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to fetch source for"
+msgstr "在取得原始碼時必須至少指定一個套件"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to find a source package for %s"
+msgstr "無法找到 %s 的原始碼套件"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
+"%s\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"Please use:\n"
+"%s\n"
+"to retrieve the latest (possibly unreleased) updates to the package.\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping already downloaded file '%s'\n"
+msgstr "略過已下載的檔案 '%s'\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB/%sB of source archives.\n"
+msgstr "需要下載 %sB/%sB 的原始套件檔。\n"
+
+#. TRANSLATOR: The required space between number and unit is already included
+#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
+#: apt-private/private-source.cc
+#, c-format
+msgid "Need to get %sB of source archives.\n"
+msgstr "需要下載 %sB 的原始套件檔。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Fetch source %s\n"
+msgstr "取得原始碼 %s\n"
+
+#: apt-private/private-source.cc
+msgid "Failed to fetch some archives."
+msgstr "無法取得某些套件檔。"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Skipping unpack of already unpacked source in %s\n"
+msgstr "不解開,因原始碼已解開至 %s\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unpack command '%s' failed.\n"
+msgstr "解開指令 '%s' 失敗。\n"
+
+#: apt-private/private-source.cc
+msgid "Check if the 'dpkg-dev' package is installed.\n"
+msgstr "請檢查是否已安裝了 'dpkg-dev' 套件。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Build command '%s' failed.\n"
+msgstr "編譯指令 '%s' 失敗。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Unable to get build-dependency information for %s"
+msgstr "無法取得 %s 的編譯相依關係資訊"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "%s has no build depends.\n"
+msgstr "%s 沒有編譯相依關係。\n"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid ""
+"No architecture information available for %s. See apt.conf(5) APT::"
+"Architectures for setup"
+msgstr ""
+
+#: apt-private/private-source.cc
+msgid "Must specify at least one package to check builddeps for"
+msgstr "在檢查編譯相依關係時必須至少指定一個套件"
+
+#: apt-private/private-source.cc
+#, c-format
+msgid "Note, using directory '%s' to get the build dependencies\n"
+msgstr ""
+
+#: apt-private/private-source.cc
+#, fuzzy, c-format
+msgid "Note, using file '%s' to get the build dependencies\n"
+msgstr "無法處理編譯相依關係"
+
+#: apt-private/private-source.cc
+msgid "Failed to process build dependencies"
+msgstr "無法處理編譯相依關係"
+
+#: apt-private/private-sources.cc
+#, fuzzy, c-format
+msgid "Failed to parse %s. Edit again? "
+msgstr "無法將 %s 更名為 %s"
+
+#: apt-private/private-sources.cc
+#, c-format
+msgid "Your '%s' file changed, please run 'apt-get update'.\n"
+msgstr ""
+
+#: apt-private/private-unmet.cc
+#, c-format
+msgid "Package %s version %s has an unmet dep:\n"
+msgstr "套件 %s 版本 %s 未能滿足相依性:\n"
+
+#: apt-private/private-update.cc
+msgid "The update command takes no arguments"
+msgstr "update 指令不需任何參數"
+
+#. TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
+#: apt-private/private-update.cc
+#, c-format
+msgid ""
+"Usage of %s should be preferred over embedding login information directly in "
+"the %s entry for '%s'"
+msgstr ""
+
+#: apt-private/private-update.cc
+#, c-format
+msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
+msgid_plural ""
+"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apt-private/private-update.cc
+msgid "All packages are up to date."
+msgstr ""
+
+#: cmdline/apt-cache.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s does not take any arguments"
+msgstr "update 指令不需任何參數"
+
+#: cmdline/apt-cache.cc
+msgid "Total package names: "
+msgstr "套件名稱合計:"
+
+#: cmdline/apt-cache.cc
+#, fuzzy
+msgid "Total package structures: "
+msgstr "套件名稱合計:"
+
+#: cmdline/apt-cache.cc
+msgid " Normal packages: "
+msgstr " 一般套件:"
+
+#: cmdline/apt-cache.cc
+msgid " Pure virtual packages: "
+msgstr " 完全虛擬套件:"
+
+#: cmdline/apt-cache.cc
+msgid " Single virtual packages: "
+msgstr " 單一虛擬套件:"
+
+#: cmdline/apt-cache.cc
+msgid " Mixed virtual packages: "
+msgstr " 混合虛擬套件:"
+
+#: cmdline/apt-cache.cc
+msgid " Missing: "
+msgstr " 找不到:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct versions: "
+msgstr "個別版本合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total distinct descriptions: "
+msgstr "個別版本類別合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total dependencies: "
+msgstr "相依關係合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total ver/file relations: "
+msgstr "版本/檔案關聯合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Desc/File relations: "
+msgstr "類別/檔案關聯合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total Provides mappings: "
+msgstr "提供者對應合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total globbed strings: "
+msgstr "所有字串合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total slack space: "
+msgstr "間暇空間合計:"
+
+#: cmdline/apt-cache.cc
+msgid "Total space accounted for: "
+msgstr "統計後的空間合計:"
+
+#: cmdline/apt-cache.cc
+msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid ""
+"Usage: apt-cache [options] command\n"
+" apt-cache [options] show pkg1 [pkg2 ...]\n"
+"\n"
+"apt-cache queries and displays available information about installed\n"
+"and installable packages. It works exclusively on the data acquired\n"
+"into the local cache via the 'update' command of e.g. apt-get. The\n"
+"displayed information may therefore be outdated if the last update was\n"
+"too long ago, but in exchange apt-cache works independently of the\n"
+"availability of the configured sources (e.g. offline).\n"
+msgstr ""
+
+#: cmdline/apt-cache.cc
+msgid "Show source records"
+msgstr "顯示原始碼報告"
+
+#: cmdline/apt-cache.cc
+msgid "Search the package list for a regex pattern"
+msgstr "根據正規表示式搜索套件列表"
+
+#: cmdline/apt-cache.cc
+msgid "Show raw dependency information for a package"
+msgstr "顯示該套件的原始相依關係的資訊"
+
+#: cmdline/apt-cache.cc
+msgid "Show reverse dependency information for a package"
+msgstr "顯示所有相依於該套件的套件名稱"
+
+#: cmdline/apt-cache.cc
+msgid "Show a readable record for the package"
+msgstr "顯示該套件的易於閱讀的報告"
+
+#: cmdline/apt-cache.cc
+msgid "List the names of all packages in the system"
+msgstr "列出系統中所有套件"
+
+#: cmdline/apt-cache.cc
+msgid "Show policy settings"
+msgstr "顯示套件的可安裝版本資訊"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
+msgstr "請替這張光碟取個名字,像是 'Debian 2.1r1 Disk 1'"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy
+msgid "Please insert a Disc in the drive and press [Enter]"
+msgstr "請把光碟放入光碟機,然後按下 [Enter] 鍵"
+
+#: cmdline/apt-cdrom.cc
+#, fuzzy, c-format
+msgid "Failed to mount '%s' to '%s'"
+msgstr "無法將 %s 更名為 %s"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"No CD-ROM could be auto-detected or found using the default mount point.\n"
+"You may try the --cdrom option to set the CD-ROM mount point.\n"
+"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
+"mount point."
+msgstr ""
+
+#: cmdline/apt-cdrom.cc
+msgid "Repeat this process for the rest of the CDs in your set."
+msgstr "請對您的光碟組中的其它光碟重複相同的操作。"
+
+#: cmdline/apt-cdrom.cc
+msgid ""
+"Usage: apt-cdrom [options] command\n"
+"\n"
+"apt-cdrom is used to add CDROM's, USB flashdrives and other removable\n"
+"media types as package sources to APT. The mount point and device\n"
+"information is taken from apt.conf(5), udev(7) and fstab(5).\n"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "Arguments not in pairs"
+msgstr "參數並未成對"
+
+#: cmdline/apt-config.cc
+#, fuzzy
+msgid ""
+"Usage: apt-config [options] command\n"
+"\n"
+"apt-config is an interface to the configuration settings used by\n"
+"all APT tools, mainly intended for debugging and shell scripting.\n"
+msgstr ""
+"用法:apt-config [選項] 指令\n"
+"\n"
+"apt-config 是一個用於讀取 APT 設定檔的簡單工具\n"
+
+#: cmdline/apt-config.cc
+msgid "get configuration values via shell evaluation"
+msgstr ""
+
+#: cmdline/apt-config.cc
+msgid "show the active configuration setting"
+msgstr ""
+
+#: cmdline/apt-dump-solver.cc
+msgid ""
+"Usage: apt-dump-solver\n"
+"\n"
+"apt-dump-solver is an interface to store an EDSP scenario in\n"
+"a file and optionally forwards it to another solver.\n"
+msgstr ""
+
+#: cmdline/apt-extracttemplates.cc
+#, fuzzy
+msgid ""
+"Usage: apt-extracttemplates file1 [file2 ...]\n"
+"\n"
+"apt-extracttemplates is used to extract config and template files\n"
+"from debian packages. It is used mainly by debconf(1) to prompt for\n"
+"configuration questions before installation of packages.\n"
+msgstr ""
+"用法:apt-extracttemplates 檔案1 [檔案2 ...]\n"
+"\n"
+"apt-extracttemplates 是用來從 debian 套件中解壓出設定檔和模板資訊\n"
+"的工具\n"
+"\n"
+"選項\n"
+" -h 本幫助訊息。\n"
+" -t 指定暫存目錄\n"
+" -c=? 讀取指定的設定檔\n"
+" -o=? 指定任意的設定選項,例如:-o dir::cache=/tmp\n"
+
+#: cmdline/apt-extracttemplates.cc
+msgid "Cannot get debconf version. Is debconf installed?"
+msgstr "無法取得 debconf 版本。是否有安裝 debconf?"
+
+#: cmdline/apt-get.cc
+#, c-format
+msgid "Couldn't find package %s"
+msgstr "無法找到套件 %s"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set to automatically installed.\n"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-get.cc cmdline/apt-mark.cc
+msgid ""
+"This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
+"instead."
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Internal error, problem resolver broke stuff"
+msgstr "內部錯誤,問題排除器造成了損壞"
+
+#: cmdline/apt-get.cc
+msgid "Supported modules:"
+msgstr "已支援模組:"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+msgid ""
+"Usage: apt-get [options] command\n"
+" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+" apt-get [options] source pkg1 [pkg2 ...]\n"
+"\n"
+"apt-get is a command line interface for retrieval of packages\n"
+"and information about them from authenticated sources and\n"
+"for installation, upgrade and removal of packages together\n"
+"with their dependencies.\n"
+msgstr ""
+"用法:apt-get [選項] 指令\n"
+" apt-get [選項] install|remove 套件1 [套件2 ...]\n"
+" apt-get [選項] source 套件1 [套件2 ...]\n"
+"\n"
+"apt-get 是一個用來下載和安裝套件的簡易命令列界面。\n"
+"最常用指令是 update 和 install。\n"
+
+#: cmdline/apt-get.cc
+msgid "Retrieve new lists of packages"
+msgstr "取得新的套件列表"
+
+#: cmdline/apt-get.cc
+msgid "Perform an upgrade"
+msgstr "進行升級"
+
+#: cmdline/apt-get.cc
+msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgstr "安裝新套件(套件名稱是 libc6 而不是 libc6.deb)"
+
+#: cmdline/apt-get.cc
+#, fuzzy
+#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
+msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
+msgstr "安裝新套件(套件名稱是 libc6 而不是 libc6.deb)"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages"
+msgstr "移除套件"
+
+#: cmdline/apt-get.cc
+msgid "Remove packages and config files"
+msgstr "移除並清除套件"
+
+#: cmdline/apt-get.cc cmdline/apt.cc
+msgid "Remove automatically all unused packages"
+msgstr "自動移除所有不再使用的套件"
+
+#: cmdline/apt-get.cc
+msgid "Distribution upgrade, see apt-get(8)"
+msgstr "發行版本升級,請參閱 apt-get(8)"
+
+#: cmdline/apt-get.cc
+msgid "Follow dselect selections"
+msgstr "採用 dselect 的選項升級"
+
+#: cmdline/apt-get.cc
+msgid "Configure build-dependencies for source packages"
+msgstr "為原始碼套件配置編譯相依關係"
+
+#: cmdline/apt-get.cc
+msgid "Erase downloaded archive files"
+msgstr "刪除已下載的套件檔"
+
+#: cmdline/apt-get.cc
+msgid "Erase old downloaded archive files"
+msgstr "刪除已下載但已有新版本的套件檔"
+
+#: cmdline/apt-get.cc
+msgid "Verify that there are no broken dependencies"
+msgstr "檢查相依關係是否有問題"
+
+#: cmdline/apt-get.cc
+msgid "Download source archives"
+msgstr "下載套件原始碼"
+
+#: cmdline/apt-get.cc
+msgid "Download the binary package into the current directory"
+msgstr ""
+
+#: cmdline/apt-get.cc
+msgid "Download and display the changelog for the given package"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "Need one URL as argument"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, fuzzy
+msgid "Must specify at least one pair url/filename"
+msgstr "在取得原始碼時必須至少指定一個套件"
+
+#: cmdline/apt-helper.cc
+msgid "Download Failed"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+#, c-format
+msgid "GetSrvRec failed for %s"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid ""
+"Usage: apt-helper [options] command\n"
+" apt-helper [options] cat-file file ...\n"
+" apt-helper [options] download-file uri target-path\n"
+"\n"
+"apt-helper bundles a variety of commands for shell scripts to use\n"
+"e.g. the same proxy configuration or acquire system as APT would.\n"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "download the given uri to the target-path"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "lookup a SRV record (e.g. _http._tcp.ftp.debian.org)"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "concatenate files, with automatic decompression"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "detect proxy using apt.conf"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "wait for system to be online"
+msgstr ""
+
+#: cmdline/apt-helper.cc
+msgid "drop privileges before running given command"
+msgstr ""
+
+#: cmdline/apt-internal-planner.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-planner\n"
+"\n"
+"apt-internal-planner is an interface to use the current internal\n"
+"installation planner for the APT family like an external one,\n"
+"for debugging or the like.\n"
+msgstr ""
+"用法:apt-extracttemplates 檔案1 [檔案2 ...]\n"
+"\n"
+"apt-extracttemplates 是用來從 debian 套件中解壓出設定檔和模板資訊\n"
+"的工具\n"
+"\n"
+"選項\n"
+" -h 本幫助訊息。\n"
+" -t 指定暫存目錄\n"
+" -c=? 讀取指定的設定檔\n"
+" -o=? 指定任意的設定選項,例如:-o dir::cache=/tmp\n"
+
+#: cmdline/apt-internal-solver.cc
+#, fuzzy
+msgid ""
+"Usage: apt-internal-solver\n"
+"\n"
+"apt-internal-solver is an interface to use the current internal\n"
+"resolver for the APT family like an external one, for debugging or\n"
+"the like.\n"
+msgstr ""
+"用法:apt-extracttemplates 檔案1 [檔案2 ...]\n"
+"\n"
+"apt-extracttemplates 是用來從 debian 套件中解壓出設定檔和模板資訊\n"
+"的工具\n"
+"\n"
+"選項\n"
+" -h 本幫助訊息。\n"
+" -t 指定暫存目錄\n"
+" -c=? 讀取指定的設定檔\n"
+" -o=? 指定任意的設定選項,例如:-o dir::cache=/tmp\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s can not be marked as it is not installed.\n"
+msgstr "但它卻尚未安裝"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to manually installed.\n"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set to automatically installed.\n"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-mark.cc
+msgid "No changes necessary"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+#| msgid "The following NEW packages will be installed:"
+msgid "The following packages will be marked as automatically installed:"
+msgstr "下列【新】套件將會被安裝:"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already set on hold.\n"
+msgstr "%s 已經是最新版本了。\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s was already not hold.\n"
+msgstr "%s 已經是最新版本了。\n"
+
+#: cmdline/apt-mark.cc
+msgid "Executing dpkg failed. Are you root?"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "%s set on hold.\n"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy, c-format
+msgid "Canceled hold on %s.\n"
+msgstr "無法開啟 %s"
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for purge.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for removal.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, c-format
+msgid "Selected %s for installation.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid ""
+"Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+"\n"
+"apt-mark is a simple command line interface for marking packages\n"
+"as manually or automatically installed. It can also be used to\n"
+"manipulate the dpkg(1) selection states of packages, and to list\n"
+"all packages with or without a certain marking.\n"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as automatically installed"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark the given packages as manually installed"
+msgstr "請檢查是否已安裝了 'dpkg-dev' 套件。\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Mark all dependencies of meta packages as automatically installed."
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-mark.cc
+msgid "Mark a package as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+msgid "Unset a package set as held back"
+msgstr ""
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of automatically installed packages"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-mark.cc
+#, fuzzy
+msgid "Print the list of manually installed packages"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt-mark.cc
+msgid "Print the list of packages on hold"
+msgstr ""
+
+#: cmdline/apt-sortpkgs.cc
+msgid "Unknown package record!"
+msgstr "未知的套件記錄!"
+
+#: cmdline/apt-sortpkgs.cc
+msgid ""
+"Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+"\n"
+"apt-sortpkgs is a simple tool to sort package information files.\n"
+"By default it sorts by binary package information, but the -s option\n"
+"can be used to switch to source package ordering instead.\n"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid ""
+"Usage: apt [options] command\n"
+"\n"
+"apt is a commandline package manager and provides commands for\n"
+"searching and managing as well as querying information about packages.\n"
+"It provides the same functionality as the specialized APT tools,\n"
+"like apt-get and apt-cache, but enables options more suitable for\n"
+"interactive use by default.\n"
+msgstr ""
+
+#. query
+#: cmdline/apt.cc
+msgid "list packages based on package names"
+msgstr ""
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "search in package descriptions"
+msgstr "正在讀取套件清單"
+
+#: cmdline/apt.cc
+msgid "show package details"
+msgstr ""
+
+#. package stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "install packages"
+msgstr "鎖定的套件:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "reinstall packages"
+msgstr "鎖定的套件:"
+
+#: cmdline/apt.cc
+#, fuzzy
+msgid "remove packages"
+msgstr "損毀的套件"
+
+#. system wide stuff
+#: cmdline/apt.cc
+#, fuzzy
+msgid "update list of available packages"
+msgstr "%s 被設定為手動安裝。\n"
+
+#: cmdline/apt.cc
+msgid "upgrade the system by installing/upgrading packages"
+msgstr ""
+
+#: cmdline/apt.cc
+msgid "upgrade the system by removing/installing/upgrading packages"
+msgstr ""
+
+#. misc
+#: cmdline/apt.cc
+#, fuzzy
+msgid "edit the source information file"
+msgstr "正在讀取狀態資料"
+
+#: dselect/install
+msgid "Bad default setting!"
+msgstr "錯誤的預設設定!"
+
+#: dselect/install dselect/update
+#, fuzzy
+msgid "Press [Enter] to continue."
+msgstr "請按 [Enter] 鍵以繼續進行。"
+
+#: dselect/install
+msgid "Do you want to erase any previously downloaded .deb files?"
+msgstr "您想移除所有先前下載的 .deb 檔嗎?"
+
+#: dselect/install
+#, fuzzy
+msgid "Some errors occurred while unpacking. Packages that were installed"
+msgstr "在解開套件時發生錯誤。我要準備設定"
+
+#: dselect/install
+#, fuzzy
+msgid "will be configured. This may result in duplicate errors"
+msgstr "套件已安裝過。這會造成重複錯誤"
+
+#: dselect/install
+msgid "or errors caused by missing dependencies. This is OK, only the errors"
+msgstr "或是因為沒有相依關係而造成錯誤。那麼這個錯誤是無關緊要的"
+
+#: dselect/install
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
+msgstr "以上的訊息相當重要。請修正它們並重新執行安裝[I]"
+
+#: dselect/update
+msgid "Merging available information"
+msgstr "整合現有的資料"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Package extension list is too long"
+msgstr "套件延伸列表過長"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing directory %s"
+msgstr "處理目錄 %s 時發生錯誤"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Source extension list is too long"
+msgstr "原始碼的延伸列表太長"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "Error writing header to contents file"
+msgstr "寫入標頭資訊到內容檔時發生錯誤"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Error processing contents %s"
+msgstr "處理內容 %s 時發生錯誤"
+
+#: ftparchive/apt-ftparchive.cc
+msgid ""
+"Usage: apt-ftparchive [options] command\n"
+"Commands: packages binarypath [overridefile [pathprefix]]\n"
+" sources srcpath [overridefile [pathprefix]]\n"
+" contents path\n"
+" release path\n"
+" generate config [groups]\n"
+" clean config\n"
+"\n"
+"apt-ftparchive generates index files for Debian archives. It supports\n"
+"many styles of generation from fully automated to functional replacements\n"
+"for dpkg-scanpackages and dpkg-scansources\n"
+"\n"
+"apt-ftparchive generates Package files from a tree of .debs. The\n"
+"Package file contains the contents of all the control fields from\n"
+"each package as well as the MD5 hash and filesize. An override file\n"
+"is supported to force the value of Priority and Section.\n"
+"\n"
+"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n"
+"The --source-override option can be used to specify a src override file\n"
+"\n"
+"The 'packages' and 'sources' command should be run in the root of the\n"
+"tree. BinaryPath should point to the base of the recursive search and \n"
+"override file should contain the override flags. Pathprefix is\n"
+"appended to the filename fields if present. Example usage from the \n"
+"Debian archive:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"Options:\n"
+" -h This help text\n"
+" --md5 Control MD5 generation\n"
+" -s=? Source override file\n"
+" -q Quiet\n"
+" -d=? Select the optional caching database\n"
+" --no-delink Enable delinking debug mode\n"
+" --contents Control contents file generation\n"
+" -c=? Read this configuration file\n"
+" -o=? Set an arbitrary configuration option"
+msgstr ""
+"用法:apt-ftparchive [選項] 指令\n"
+"指令:packages 二進制檔搜索路徑 [重新定義檔 [路徑前綴]]\n"
+" sources 原始碼搜索路徑 [重新定義檔 [路徑前綴]]\n"
+" contents 搜索路徑\n"
+" release 搜索路徑\n"
+" generate 設定檔 [群組]\n"
+" clean 設定檔\n"
+"\n"
+"apt-ftparchive 可用來替 Debian 套件庫建立索引檔。它支援了從全\n"
+"自動化到足以替代 dpkg-scanpackages 及 dpkg-scansources 所提供\n"
+"的所有功能等等各式各樣建立索引的方式。apt-ftparchive 會根據 .deb 檔案樹建立 "
+"Package 檔。Package 檔\n"
+"裡不僅包含了每個套件的 control 資料的內容,還包含了 MD5 檢驗\n"
+"碼和檔案大小。它還支援了重新定義檔,可用來強制指定優先等級及\n"
+"其所屬的類別。\n"
+"\n"
+"而同樣的,apt-ftparchive 也能根據 .dsc 檔案樹生成 Source 檔。\n"
+"可用 --source-override 選項來指定一個 src 重新定義檔。\n"
+"\n"
+"應當在檔案樹的根目錄下執行 'packages' 和 'source' 指令。\n"
+"二進制檔的搜索路徑必須指向遞迴搜索的底層,且在重新定義檔裡必\n"
+"須包含 override 旗標。若指定了路徑前綴時,則會被附加到檔案名\n"
+"稱這個欄位裡。以 Debian 套件庫為例:\n"
+" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+" dists/potato/main/binary-i386/Packages\n"
+"\n"
+"選項:\n"
+" -h 本幫助說明\n"
+" --md5 控制如何產生 MD5 檢驗碼\n"
+" -s=? 原始碼的重新定義檔\n"
+" -q 安靜模式\n"
+" -d=? 指定搭配的快取資料庫\n"
+" --no-delink 啟用 DeLinking 模式\n"
+" --contents 產生控制內容檔\n"
+" -c=? 讀取指定的設定檔\n"
+" -o=? 指定任意的設定選項"
+
+#: ftparchive/apt-ftparchive.cc
+msgid "No selections matched"
+msgstr "找不到符合的選項"
+
+#: ftparchive/apt-ftparchive.cc
+#, c-format
+msgid "Some files are missing in the package file group `%s'"
+msgstr "套件檔案組 `%s' 少了部份檔案"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB was corrupted, file renamed to %s.old"
+msgstr "DB 已損毀,檔案被更名為 %s.old"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "DB is old, attempting to upgrade %s"
+msgstr "DB 過舊,嘗試升級 %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid ""
+"DB format is invalid. If you upgraded from an older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+"資料庫格式不正確。如果您是由舊版的 apt 升級上來的,請移除並重新建立資料庫。"
+
+#: ftparchive/cachedb.cc
+#, c-format
+msgid "Unable to open DB file %s: %s"
+msgstr "無法開啟 DB 檔 %s: %s"
+
+#: ftparchive/cachedb.cc
+#, fuzzy
+msgid "Failed to read .dsc"
+msgstr "無法讀取連結 %s"
+
+#: ftparchive/cachedb.cc
+msgid "Archive has no control record"
+msgstr "套件檔沒有 control 記錄"
+
+#: ftparchive/cachedb.cc
+msgid "Unable to get a cursor"
+msgstr "無法取得遊標"
+
+#: ftparchive/contents.cc
+msgid "realloc - Failed to allocate memory"
+msgstr "realloc - 無法配置記憶體"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Unknown compression algorithm '%s'"
+msgstr "未知的壓縮演算法 '%s'"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Compressed output %s needs a compression set"
+msgstr "要壓縮輸出 %s 需搭配壓縮動作"
+
+#: ftparchive/multicompress.cc methods/rsh.cc
+msgid "Failed to create IPC pipe to subprocess"
+msgstr "無法和子程序建立 IPC 管線"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to fork"
+msgstr "fork 時失敗"
+
+#: ftparchive/multicompress.cc
+msgid "Compress child"
+msgstr "壓縮子程序"
+
+#: ftparchive/multicompress.cc
+#, c-format
+msgid "Internal error, failed to create %s"
+msgstr "內部錯誤,無法建立 %s"
+
+#: ftparchive/multicompress.cc
+msgid "IO to subprocess/file failed"
+msgstr "和子程序/檔案 IO 失敗"
+
+#: ftparchive/multicompress.cc
+msgid "Failed to read while computing MD5"
+msgstr "在計算 MD5 時無法讀取到資料"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Unable to open %s"
+msgstr "無法開啟 %s"
+
+#. skip spaces
+#. find end of word
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu (%s)"
+msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #1"
+
+#: ftparchive/override.cc
+#, c-format
+msgid "Failed to read the override file %s"
+msgstr "無法讀取重新定義檔 %s"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #1"
+msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #1"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #2"
+msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #2"
+
+#: ftparchive/override.cc
+#, fuzzy, c-format
+msgid "Malformed override %s line %llu #3"
+msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #3"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to read directory %s\n"
+msgstr "警告:無法讀取目錄 %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "W: Unable to stat %s\n"
+msgstr "警告:無法取得 %s 狀態\n"
+
+#: ftparchive/writer.cc
+msgid "E: "
+msgstr "錯誤:"
+
+#: ftparchive/writer.cc
+msgid "W: "
+msgstr "警告:"
+
+#: ftparchive/writer.cc
+msgid "E: Errors apply to file "
+msgstr "錯誤:套用到檔案時發生錯誤"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to resolve %s"
+msgstr "無法解析 %s"
+
+#: ftparchive/writer.cc
+msgid "Tree walking failed"
+msgstr "無法走訪目錄樹"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "Failed to open %s"
+msgstr "無法開啟 %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid "*** Failed to link %s to %s"
+msgstr "*** 無法將 %s 連結到 %s"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " DeLink limit of %sB hit.\n"
+msgstr " 達到了 DeLink 的上限 %sB。\n"
+
+#: ftparchive/writer.cc
+msgid "Archive had no package field"
+msgstr "套件檔裡沒有套件資訊"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no override entry\n"
+msgstr " %s 沒有重新定義項目\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s maintainer is %s not %s\n"
+msgstr " %s 的維護者是 %s,而非 %s\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no source override entry\n"
+msgstr " %s 沒有原始碼重新定義項目\n"
+
+#: ftparchive/writer.cc
+#, c-format
+msgid " %s has no binary override entry either\n"
+msgstr " %s 也沒有二元碼重新定義項目\n"
+
+#: methods/basehttp.cc
+msgid "Waiting for headers"
+msgstr "等待標頭"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid reply header"
+msgstr "HTTP 伺服器傳送了一個無效的回覆標頭"
+
+#: methods/basehttp.cc
+msgid "Bad header line"
+msgstr "標頭行錯誤"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Length header"
+msgstr "HTTP 伺服器傳送了一個無效的 Content-Length 標頭"
+
+#: methods/basehttp.cc
+msgid "The HTTP server sent an invalid Content-Range header"
+msgstr "HTTP 伺服器傳送了一個無效的 Content-Range 標頭"
+
+#: methods/basehttp.cc
+msgid "This HTTP server has broken range support"
+msgstr "這個 HTTP 伺服器的範圍支援有問題"
+
+#: methods/basehttp.cc
+msgid "Unknown date format"
+msgstr "未知的資料格式"
+
+#: methods/basehttp.cc
+msgid "Bad header data"
+msgstr "錯誤的標頭資料"
+
+#: methods/basehttp.cc
+msgid "Connection failed"
+msgstr "連線失敗"
+
+#: methods/basehttp.cc methods/ftp.cc methods/http.cc
+#, c-format
+msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
+msgstr ""
+
+#: methods/basehttp.cc
+#, c-format
+msgid ""
+"Automatically disabled %s due to incorrect response from server/proxy. (man "
+"5 apt.conf)"
+msgstr ""
+
+#: methods/basehttp.cc
+msgid "Internal error"
+msgstr "內部錯誤"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to read the cdrom database %s"
+msgstr "無法讀取光碟片資料庫 %s"
+
+#: methods/cdrom.cc
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
+msgstr ""
+"請用 apt-cdrom 來讓 APT 能辨識這張光碟。apt-get update 是不能用來新增光碟的"
+
+#: methods/cdrom.cc
+msgid "Wrong CD-ROM"
+msgstr "不正確的光碟"
+
+#: methods/cdrom.cc
+#, c-format
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgstr "無法卸載 %s 裡的光碟片,或許它仍在使用中。"
+
+#: methods/cdrom.cc
+msgid "Disk not found."
+msgstr "找不到磁碟。"
+
+#: methods/cdrom.cc methods/file.cc methods/rsh.cc
+msgid "File not found"
+msgstr "找不到檔案"
+
+#. TRANSLATOR: %s is e.g. Tor's ".onion" which would likely fail or leak info (RFC7686)
+#: methods/connect.cc
+#, c-format
+msgid "Direct connection to %s domains is blocked by default."
+msgstr ""
+
+#: methods/connect.cc
+#, c-format
+msgid "[IP: %s %s]"
+msgstr "[IP: %s %s]"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
+msgid "Connected to %s (%s)"
+msgstr "正和 %s (%s) 連線"
+
+#: methods/connect.cc methods/http.cc
+#, c-format
+msgid "Connecting to %s (%s)"
+msgstr "正和 %s (%s) 連線"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+msgstr "無法建立 socket 指向 %s (f=%u t=%u p=%u)"
+
+#: methods/connect.cc
+#, c-format
+msgid "Cannot initiate the connection to %s:%s (%s)."
+msgstr "無法初始和 %s:%s (%s) 的連線。"
+
+#: methods/connect.cc methods/ftp.cc methods/rsh.cc
+msgid "Failed"
+msgstr "失敗"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
+msgstr "無法和 %s:%s (%s) 連線。"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not connect to %s:%s (%s), connection timed out"
+msgstr "無法和 %s:%s (%s) 連線,連線逾時"
+
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc methods/rsh.cc
+#, c-format
+msgid "Connecting to %s"
+msgstr "正連線至 %s"
+
+#: methods/connect.cc
+#, c-format
+msgid "Could not resolve '%s'"
+msgstr "無法解析 '%s'"
+
+#: methods/connect.cc
+#, c-format
+msgid "Temporary failure resolving '%s'"
+msgstr "暫時無法解析 '%s'"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "System error resolving '%s:%s'"
+msgstr "在解析 '%s:%s' (%i) 時出了怪事"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
+msgstr "在解析 '%s:%s' (%i) 時出了怪事"
+
+#: methods/connect.cc
+#, fuzzy, c-format
+msgid "Unable to connect to %s:%s:"
+msgstr "無法連線至 %s %s:"
+
+#: methods/copy.cc
+msgid "Failed to stat"
+msgstr "無法取得狀態"
+
+#: methods/file.cc
+msgid "Invalid URI, local URIS must not start with //"
+msgstr "不正確的 URI,本機 URI 不應以 // 開頭"
+
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc
+msgid "Logging in"
+msgstr "登入中"
+
+#: methods/ftp.cc
+msgid "Unable to determine the peer name"
+msgstr "無法解析對方主機名稱"
+
+#: methods/ftp.cc
+msgid "Unable to determine the local name"
+msgstr "無法解析本機名稱"
+
+#: methods/ftp.cc
+#, c-format
+msgid "The server refused the connection and said: %s"
+msgstr "伺服器不接受連線,並回應:%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "USER failed, server said: %s"
+msgstr "USER 指令失敗,伺服器回應:%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "PASS failed, server said: %s"
+msgstr "PASS 指令失敗,伺服器回應:%s"
+
+#: methods/ftp.cc
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
+msgstr ""
+"指定了代理伺服器,但沒有指定登入 script,Acquire::ftp::ProxyLogin 是空的。"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Login script command '%s' failed, server said: %s"
+msgstr "登入 script 指令 '%s' 失敗,伺服器回應:%s"
+
+#: methods/ftp.cc
+#, c-format
+msgid "TYPE failed, server said: %s"
+msgstr "TYPE 指令失敗,伺服器回應:%s"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Connection timeout"
+msgstr "連線逾時"
+
+#: methods/ftp.cc
+msgid "Server closed the connection"
+msgstr "伺服器已關閉連線"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "A response overflowed the buffer."
+msgstr "回應超過緩衝區長度。"
+
+#: methods/ftp.cc
+msgid "Protocol corruption"
+msgstr "協定失敗"
+
+#: methods/ftp.cc
+msgid "Could not create a socket"
+msgstr "無法建立 Socket"
+
+#: methods/ftp.cc
+msgid "Could not connect data socket, connection timed out"
+msgstr "無法和 data socket 連線,連線逾時"
+
+#: methods/ftp.cc
+msgid "Could not connect passive socket."
+msgstr "無法和 passive socket 連線。"
+
+#: methods/ftp.cc
+msgid "getaddrinfo was unable to get a listening socket"
+msgstr "getaddrinfo 無法取得監聽 socket"
+
+#: methods/ftp.cc
+msgid "Could not bind a socket"
+msgstr "無法 bind 至 socket"
+
+#: methods/ftp.cc
+msgid "Could not listen on the socket"
+msgstr "無法監聽 socket"
+
+#: methods/ftp.cc
+msgid "Could not determine the socket's name"
+msgstr "無法解析 socket 名稱"
+
+#: methods/ftp.cc
+msgid "Unable to send PORT command"
+msgstr "無法送出 PORT 指令"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unknown address family %u (AF_*)"
+msgstr "未知的地址家族 %u (AF_*)"
+
+#: methods/ftp.cc
+#, c-format
+msgid "EPRT failed, server said: %s"
+msgstr "EPRT 指令失敗,伺服器回應:%s"
+
+#: methods/ftp.cc
+msgid "Data socket connect timed out"
+msgstr "Data socket 連線逾時"
+
+#: methods/ftp.cc
+msgid "Unable to accept connection"
+msgstr "無法接受連線"
+
+#: methods/ftp.cc methods/http.cc methods/rsh.cc
+msgid "Problem hashing file"
+msgstr "有問題的雜湊檔"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Unable to fetch file, server said '%s'"
+msgstr "無法取得檔案,伺服器回應 '%s'"
+
+#: methods/ftp.cc methods/rsh.cc
+msgid "Data socket timed out"
+msgstr "Data socket 連線逾時"
+
+#: methods/ftp.cc
+#, c-format
+msgid "Data transfer failed, server said '%s'"
+msgstr "資料傳輸失敗,伺服器回應 '%s'"
+
+#. Get the files information
+#: methods/ftp.cc
+msgid "Query"
+msgstr "查詢"
+
+#: methods/ftp.cc
+msgid "Unable to invoke "
+msgstr "無法 invoke "
+
+#. TRANSLATORS: %s is a single techy word like 'NODATA'
+#: methods/gpgv.cc
+#, c-format
+msgid ""
+"Signed file isn't valid, got '%s' (does the network require authentication?)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "At least one invalid signature was encountered."
+msgstr "至少發現一個無效的簽章。"
+
+#: methods/gpgv.cc
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr "內部錯誤:簽章無誤,但卻無法辨識密鑰的指紋碼?!"
+
+#: methods/gpgv.cc
+#, fuzzy
+msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
+msgstr "無法執行 '%s' 來驗證簽章(gnupg 是否安裝了?)"
+
+#: methods/gpgv.cc
+msgid "Unknown error executing apt-key"
+msgstr "在執行 apt-key 時發生未知的錯誤"
+
+#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+#: methods/gpgv.cc
+#, c-format
+msgid "Signature by key %s uses weak digest algorithm (%s)"
+msgstr ""
+
+#: methods/gpgv.cc
+msgid "The following signatures were invalid:\n"
+msgstr "以下簽名無效:\n"
+
+#: methods/gpgv.cc
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr "由於無法取得它們的公鑰,以下簽章無法進行驗證:\n"
+
+#: methods/http.cc
+msgid "Error writing to the file"
+msgstr "在寫入該檔時發生錯誤"
+
+#: methods/http.cc
+msgid "Error reading from server. Remote end closed connection"
+msgstr "在讀取伺服器時發生錯誤,遠端主機已關閉連線"
+
+#: methods/http.cc
+msgid "Error reading from server"
+msgstr "在讀取伺服器時發生錯誤"
+
+#: methods/http.cc
+msgid "Error writing to file"
+msgstr "在寫入檔案時發生錯誤"
+
+#: methods/http.cc
+msgid "Select failed"
+msgstr "選擇失敗"
+
+#: methods/http.cc
+msgid "Connection timed out"
+msgstr "連線逾時"
+
+#: methods/http.cc
+msgid "Error writing to output file"
+msgstr "在寫入輸出檔時發生錯誤"
+
+#: methods/rred.cc
+msgid "Failed to set modification time"
+msgstr "無法設定修改時間"
+
+#: methods/rsh.cc
+msgid "Connection closed prematurely"
+msgstr "連線突然終止"
+
+#: methods/store.cc
+msgid "Empty files can't be valid archives"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Invalid archive member header %s"
+#~ msgstr "無效的套件檔成員標頭"
+
+#~ msgid "Removed %s"
+#~ msgstr "已移除 %s"
+
+#~ msgid "Package file %s is out of sync."
+#~ msgstr "套件檔 %s 未同步。"
+
+#~ msgid ""
+#~ "The package index files are corrupted. No Filename: field for package %s."
+#~ msgstr "這個套件的索引檔損壞了。沒有套件 %s 的 Filename: 欄位。"
+
+#, fuzzy
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "無法開啟檔案 %s"
+
+#, fuzzy
+#~ msgid "No entry found in mirror file '%s'"
+#~ msgstr "無法開啟檔案 %s"
+
+#~ msgid "Opening configuration file %s"
+#~ msgstr "開啟設定檔 %s"
+
+#~ msgid "Opening %s"
+#~ msgstr "正在開啟 %s"
+
+#~ msgid "Unmet dependencies. Try using --fix-broken."
+#~ msgstr "未能滿足相依關係。試試 --fix-broken 選項。"
+
+#~ msgid "You might want to run 'apt --fix-broken install' to correct these:"
+#~ msgstr "您也許得執行 'apt --fix-broken install' 以修正這些問題:"
+
+#~ msgid "(not found)"
+#~ msgstr "(未找到)"
+
+#~ msgid " Package pin: "
+#~ msgstr " 套件鎖定:"
+
+#~ msgid "There is no public key available for the following key IDs:\n"
+#~ msgstr "無法取得以下的密鑰 ID 的公鑰:\n"
+
+#, fuzzy
+#~ msgid "The repository is insufficiently signed by key %s (%s)"
+#~ msgstr "路徑 %s 已被抽換"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
+#~ "packages"
+#~ msgstr "無法滿足 %2$s 所要求的 %1$s 相依關係,因為找不到套件 %3$s"
+
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#~ "found"
+#~ msgstr "無法滿足 %2$s 所要求的 %1$s 相依關係,因為找不到套件 %3$s"
+
+#~ msgid ""
+#~ "Failed to satisfy %s dependency for %s: Installed package %s is too new"
+#~ msgstr "無法滿足 %2$s 的相依關係 %1$s:已安裝的套件 %3$s 太新了"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because candidate version of "
+#~ "package %s can't satisfy version requirements"
+#~ msgstr ""
+#~ "無法滿足 %2$s 所要求的 %1$s 相依關係,因為套件 %3$s 沒有版本符合其版本需求"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s dependency for %s cannot be satisfied because package %s has no "
+#~ "candidate version"
+#~ msgstr "無法滿足 %2$s 所要求的 %1$s 相依關係,因為找不到套件 %3$s"
+
+#~ msgid "Failed to satisfy %s dependency for %s: %s"
+#~ msgstr "無法滿足 %2$s 的相依關係 %1$s:%3$s"
+
+#~ msgid "Build-dependencies for %s could not be satisfied."
+#~ msgstr "無法滿足套件 %s 的編譯相依關係。"
+
+#~ msgid "Problem unlinking %s"
+#~ msgstr "在取消 %s 的連結時發生問題"
+
+#~ msgid "Failed to unlink %s"
+#~ msgstr "無法移除連結 %s"
+
+#~ msgid ""
+#~ "Usage: apt-cache [options] command\n"
+#~ " apt-cache [options] show pkg1 [pkg2 ...]\n"
+#~ "\n"
+#~ "apt-cache is a low-level tool used to query information\n"
+#~ "from APT's binary cache files\n"
+#~ msgstr ""
+#~ "用法:apt-cache [選項] 指令\n"
+#~ " apt-cache [選項] show 套件1 [套件2 ...]\n"
+#~ "\n"
+#~ "apt-cache 是一個低階的工具,可用來操作 APT 的二進制快取檔,也可用來\n"
+#~ "查詢那些檔案中的相關訊息\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -p=? The package cache.\n"
+#~ " -s=? The source cache.\n"
+#~ " -q Disable progress indicator.\n"
+#~ " -i Show only important deps for the unmet command.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
+#~ msgstr ""
+#~ "選項:\n"
+#~ " -h 本幫助訊息。\n"
+#~ " -p=? 套件的快取。\n"
+#~ " -s=? 原始碼的快取。\n"
+#~ " -q 關閉進度顯示。\n"
+#~ " -i 僅為 unmet 指令顯示重要的相依關係。\n"
+#~ " -c=? 讀取指定的設定檔\n"
+#~ " -o=? 指定任意的設定選項,例如:-o dir::cache=/tmp\n"
+#~ "請參閱 apt-cache(8) 及 apt.conf(5) 參考手冊以取得更多資訊。\n"
+
+#~ msgid ""
+#~ "Options:\n"
+#~ " -h This help text.\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "選項:\n"
+#~ " -h 本幫助訊息。\n"
+#~ " -c=? 讀取指定的設定檔\n"
+#~ " -o=? 指定任意的設定選項,例如:-o dir::cache=/tmp\n"
+
+#~ msgid ""
+#~ "Usage: apt-sortpkgs [options] file1 [file2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs is a simple tool to sort package files. The -s option is "
+#~ "used\n"
+#~ "to indicate what kind of file it is.\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h This help text\n"
+#~ " -s Use source file sorting\n"
+#~ " -c=? Read this configuration file\n"
+#~ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#~ msgstr ""
+#~ "用法:apt-sortpkgs [選項] 檔案1 [檔案2 ...]\n"
+#~ "\n"
+#~ "apt-sortpkgs 是用來排序套件檔的簡單工具。-s 選項是用來指定它的檔案類型。\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -h 本幫助訊息。\n"
+#~ " -s 根據原始檔排序\n"
+#~ " -c=? 讀取指定的設定檔\n"
+#~ " -o=? 指定任意的設定選項,例如:-o dir::cache=/tmp\n"
+
+#~ msgid "Child process failed"
+#~ msgstr "子程序失敗"
+
+#, fuzzy
+#~ msgid "Must specifc at least one srv record"
+#~ msgstr "在取得原始碼時必須至少指定一個套件"
+
+#~ msgid "Failed to create pipes"
+#~ msgstr "無法建立管線"
+
+#~ msgid "Failed to exec gzip "
+#~ msgstr "無法執行 gzip"
+
+#~ msgid "%s %s for %s compiled on %s %s\n"
+#~ msgstr "%s %s 是用於 %s 並在 %s %s 上編譯的\n"
+
+#~ msgid "Failed to create FILE*"
+#~ msgstr "無法建立 FILE*"
+
+#, fuzzy
+#~ msgid "Malformed stanza %u in source list %s (URI parse)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(URI 分析)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] unparseable)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(發行版分析)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([option] too short)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(發行版)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(發行版分析)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] has no key)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(發行版分析)"
+
+#, fuzzy
+#~ msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(發行版分析)"
+
+#~ msgid "Malformed line %lu in source list %s (URI)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤 (URI)"
+
+#~ msgid "Malformed line %lu in source list %s (dist)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(發行版)"
+
+#~ msgid "Malformed line %lu in source list %s (URI parse)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(URI 分析)"
+
+#~ msgid "Malformed line %lu in source list %s (absolute dist)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(絕對發行版)"
+
+#~ msgid "Malformed line %lu in source list %s (dist parse)"
+#~ msgstr "來源列表 %2$s 中的 %1$lu 行的格式錯誤(發行版分析)"
+
+#~ msgid "Package %s %s was not found while processing file dependencies"
+#~ msgstr "在計算檔案相依性時找不到套件 %s %s"
+
+#~ msgid "Couldn't stat source package list %s"
+#~ msgstr "無法取得來源套件列表 %s 的狀態"
+
+#~ msgid "Collecting File Provides"
+#~ msgstr "正在收集檔案提供者"
+
+#, fuzzy
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr "無法辨別 Release 檔 %s"
+
+#~ msgid "Vendor block %s contains no fingerprint"
+#~ msgstr "提供者區塊 %s 沒有包含指紋碼"
+
+#~ msgid "Total dependency version space: "
+#~ msgstr "相依版本空間合計:"
+
+#~ msgid "You don't have enough free space in %s"
+#~ msgstr "在 %s 裡沒有足夠的的未使用空間"
+
+#~ msgid "Done"
+#~ msgstr "完成"
+
+#, fuzzy
+#~ msgid "No keyring installed in %s."
+#~ msgstr "放棄安裝。"
+
+#, fuzzy
+#~ msgid "Internal error, Upgrade broke stuff"
+#~ msgstr "內部錯誤,AllUpgrade 造成了損壞"
+
+#~ msgid "%s not a valid DEB package."
+#~ msgstr "%s 並不是正確的 DEB 套件。"
+
+#~ msgid ""
+#~ "Using CD-ROM mount point %s\n"
+#~ "Mounting CD-ROM\n"
+#~ msgstr ""
+#~ "使用光碟機掛載點 %s\n"
+#~ "正在掛載光碟機\n"
+
+#~ msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
+#~ msgstr "這是個不正確的 DEB 套件檔,沒有 '%s', '%s' 或 '%s' 成員"
+
+#~ msgid "MD5Sum mismatch"
+#~ msgstr "MD5Sum 不符"
+
+#~ msgid ""
+#~ "I wasn't able to locate a file for the %s package. This might mean you "
+#~ "need to manually fix this package."
+#~ msgstr "找不到 %s 套件的某個檔案。這意味著您可能要手動修復這個套件。"
+
+#~ msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
+#~ msgstr "無法寫入記錄檔,openpty() 失敗(/dev/pts 未掛載?)\n"
+
+#, fuzzy
+#~ msgid "Skipping nonexistent file %s"
+#~ msgstr "開啟設定檔 %s"
+
+#~ msgid "Failed to remove %s"
+#~ msgstr "無法移除 %s"
+
+#~ msgid "Unable to create %s"
+#~ msgstr "無法建立 %s"
+
+#~ msgid "Failed to stat %sinfo"
+#~ msgstr "無法取得 %sinfo 的狀態"
+
+#~ msgid "The info and temp directories need to be on the same filesystem"
+#~ msgstr "資料目錄與暫存目錄需位於同一檔案系統中"
+
+#~ msgid "Failed to change to the admin dir %sinfo"
+#~ msgstr "無法切換至管理者目錄 %sinfo"
+
+#~ msgid "Internal error getting a package name"
+#~ msgstr "內部錯誤,無法取得套件名稱"
+
+#~ msgid "Reading file listing"
+#~ msgstr "正在讀取檔案清單"
+
+#~ msgid ""
+#~ "Failed to open the list file '%sinfo/%s'. If you cannot restore this file "
+#~ "then make it empty and immediately re-install the same version of the "
+#~ "package!"
+#~ msgstr ""
+#~ "無法開啟清單檔 %sinfo/%s。如果您無法將此檔案還原,請清除檔案內容,然後立即"
+#~ "重新安裝同一版本的套件!"
+
+#~ msgid "Failed reading the list file %sinfo/%s"
+#~ msgstr "無法讀取清單檔 %sinfo/%s"
+
+#~ msgid "Internal error getting a node"
+#~ msgstr "內部錯誤,無法取得節點"
+
+#~ msgid "Failed to open the diversions file %sdiversions"
+#~ msgstr "讀取抽換檔 %sdiversions 失敗"
+
+#~ msgid "The diversion file is corrupted"
+#~ msgstr "抽換檔已損壞"
+
+#~ msgid "Invalid line in the diversion file: %s"
+#~ msgstr "在抽換檔中的這一行有誤:%s"
+
+#~ msgid "Internal error adding a diversion"
+#~ msgstr "內部錯誤:在新增抽換資料時發生錯誤"
+
+#~ msgid "The pkg cache must be initialized first"
+#~ msgstr "套件快取必須先初始化"
+
+#~ msgid "Failed to find a Package: header, offset %lu"
+#~ msgstr "找不到套件:檔案標頭,位移 %lu"
+
+#~ msgid "Bad ConfFile section in the status file. Offset %lu"
+#~ msgstr "在 status 檔中的 ConfFile 區段損壞。位移 %lu"
+
+#~ msgid "Error parsing MD5. Offset %lu"
+#~ msgstr "在解析 MD5 時發生錯誤。位移 %lu"
+
+#~ msgid "Couldn't change to %s"
+#~ msgstr "無法切換至 %s"
+
+#~ msgid "Failed to locate a valid control file"
+#~ msgstr "找不到可用的 control 檔"
+
+#~ msgid "Couldn't open pipe for %s"
+#~ msgstr "無法開啟管線給 %s 使用"
+
+#~ msgid "Read error from %s process"
+#~ msgstr "由 %s 程序讀取錯誤"
+
+#~ msgid "Got a single header line over %u chars"
+#~ msgstr "取得一個單行超過 %u 字元的標頭"
+
+#~ msgid "Malformed override %s line %lu #1"
+#~ msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #1"
+
+#~ msgid "Malformed override %s line %lu #2"
+#~ msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #2"
+
+#~ msgid "Malformed override %s line %lu #3"
+#~ msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #3"
+
+#~ msgid "decompressor"
+#~ msgstr "解壓縮程式"
+
+#~ msgid "read, still have %lu to read but none left"
+#~ msgstr "讀取,仍有 %lu 未讀但已無空間"
+
+#~ msgid "write, still have %lu to write but couldn't"
+#~ msgstr "寫入,仍有 %lu 待寫入但已沒辨法"
+
+#~ msgid "Error occurred while processing %s (NewPackage)"
+#~ msgstr "在處理 %s 時發生錯誤 (NewPackage)"
+
+#~ msgid "Error occurred while processing %s (UsePackage1)"
+#~ msgstr "在處理 %s 時發生錯誤 (UsePackage1)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc1)"
+#~ msgstr "在處理 %s 時發生錯誤 (NewFileDesc1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage2)"
+#~ msgstr "在處理 %s 時發生錯誤 (UsePackage2)"
+
+#~ msgid "Error occurred while processing %s (NewFileVer1)"
+#~ msgstr "在處理 %s 時發生錯誤 (NewFileVer1)"
+
+#, fuzzy
+#~ msgid "Error occurred while processing %s (NewVersion%d)"
+#~ msgstr "在處理 %s 時發生錯誤 (NewVersion1)"
+
+#~ msgid "Error occurred while processing %s (UsePackage3)"
+#~ msgstr "在處理 %s 時發生錯誤 (UsePackage3)"
+
+#~ msgid "Error occurred while processing %s (NewFileDesc2)"
+#~ msgstr "在處理 %s 時發生錯誤 (NewFileDesc2)"
+
+#~ msgid "Error occurred while processing %s (FindPkg)"
+#~ msgstr "在處理 %s 時發生錯誤 (FindPkg)"
+
+#~ msgid "Error occurred while processing %s (CollectFileProvides)"
+#~ msgstr "在處理 %s 時發生錯誤 (CollectFileProvides)"
+
+#~ msgid "Internal error, could not locate member"
+#~ msgstr "內部錯誤:無法找到成員"
+
+#, fuzzy
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Release 檔已過期,略過 %s(有效期限 %s)"
+
+#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgstr "錯誤:Acquire::gpgv::Options 的參數列表過長。結束執行。"
+
+#~ msgid "Error occurred while processing %s (NewVersion2)"
+#~ msgstr "在處理 %s 時發生錯誤 (NewVersion2)"
+
+#~ msgid "Malformed line %u in source list %s (vendor id)"
+#~ msgstr "來源列表 %2$s 中的第 %1$u 行的格式錯誤(提供者 ID)"
+
+#~ msgid "Couldn't access keyring: '%s'"
+#~ msgstr "無法存取鑰匙圈:'%s'"
+
+#~ msgid "Could not patch file"
+#~ msgstr "無法修補檔案"
+
+#~ msgid " %4i %s\n"
+#~ msgstr " %4i %s\n"
+
+#~ msgid "%4i %s\n"
+#~ msgstr "%4i %s\n"
+
+#~ msgid "Processing triggers for %s"
+#~ msgstr "正在進行 %s 的觸發程式"
diff --git a/prepare-release b/prepare-release
new file mode 100755
index 0000000..c93976f
--- /dev/null
+++ b/prepare-release
@@ -0,0 +1,378 @@
+#!/bin/sh
+set -e
+
+cd "$(readlink -f $(dirname $0))"
+
+if [ -n "${GBP_BUILD_DIR}" ]; then
+ cd "$GBP_BUILD_DIR"
+fi
+
+VERSION=$(dpkg-parsechangelog | sed -n -e '/^Version:/s/^Version: //p')
+DISTRIBUTION=$(dpkg-parsechangelog | sed -n -e '/^Distribution:/s/^Distribution: //p')
+
+LIBAPTPKGVERSION="$(awk -v ORS='.' '/^\#define APT_PKG_M/ {print $3}' apt-pkg/contrib/macros.h | sed 's/\.$//')"
+LIBAPTINSTVERSION="$(sed -nr 's/set\(MAJOR ([^)]*)\)/\1/p' apt-inst/CMakeLists.txt)"
+
+librarysymbolsfromfile() {
+ local MISSING="$(grep '^+#MISSING' "$1")"
+ local SYMVER="$2"
+ echo '=== Missing optional symbols:'
+ echo -n "$MISSING" | grep '|optional=' || true
+ echo '=== Missing required symbols:'
+ echo -n "$MISSING" | grep -v '|optional=' || true
+ echo '=== New symbols:'
+ grep '^+ ' "$1" | grep -v '^+ (c++' | cut -d' ' -f 2 | cut -d'@' -f 1 | c++filt | while read line; do
+ echo " (c++)\"${line}@${SYMVER}\" $VERSION"
+ done | sort -u
+}
+
+test_deb_control() {
+ echo "Package: apt-test-depends"
+ echo "Version: 1.0"
+ echo "Architecture: all"
+ printf "Depends:"
+ (
+ for i in Build-Depends Build-Depends-Indep Build-Depends-Arch; do
+ grep-dctrl -ns $i -S apt ./debian/control && echo ,
+ done
+ grep-dctrl -ns Depends -F Tests run-tests ./debian/tests/control
+ ) | tr '\n' ' '\
+ | sed -r -e 's#<[^,<>()@]*>##g' \
+ -e 's#@[^,<>()@]*@##g' \
+ -e 's#\[linux-any\]*##g' \
+ -e 's#\[[^][]*\]*##g' \
+ -e 's#dpkg-dev \([^)]*\)#dpkg-dev#g' \
+ -e 's#debhelper \([^)]*\)#debhelper#g' \
+ -e 's#g\+\+ \([^)]*\)#g++#g' \
+ -e 's#@##g' \
+ -e 's#,(\s+,)+#, #g' \
+ -e 's#\s+# #g'
+}
+
+if [ "$1" = 'pre-export' ]; then
+ libraryversioncheck() {
+ local LIBRARY="$1"
+ local VERSION="$2"
+ if [ ! -e "debian/${LIBRARY}${VERSION}.symbols" ]; then
+ echo >&2 "Library ${LIBRARY} in version ${VERSION} has no symbols file! (maybe forgot to rename?)"
+ exit 1
+ fi
+ if [ "$(head -n1 "debian/${LIBRARY}${VERSION}.symbols")" != "${LIBRARY}.so.${VERSION} ${LIBRARY}${VERSION} #MINVER#" ]; then
+ echo >&2 "Library ${LIBRARY}${VERSION} has incorrect version in symbol header! (»$(head -n1 "debian/${LIBRARY}${VERSION}.symbols")«)"
+ exit 2
+ fi
+ }
+
+ libraryversioncheck 'libapt-pkg' "$LIBAPTPKGVERSION"
+ libraryversioncheck 'libapt-inst' "$LIBAPTINSTVERSION"
+
+
+ if [ "$DISTRIBUTION" = 'sid' ]; then
+ echo >&2 '»sid« is not a valid distribution. Replace it with »unstable« for you'
+ sed -i -e 's/) sid; urgency=/) unstable; urgency=/' debian/changelog
+ DISTRIBUTION='unstable'
+ elif [ "$DISTRIBUTION" = 'UNRELEASED' ]; then
+ echo >&2 'WARNING: Remember to change to a valid distribution for release'
+ VERSION="$VERSION~$(date +%Y%m%d)"
+ fi
+
+ sed -i -e "s/^set(PACKAGE_VERSION \".*\")$/set(PACKAGE_VERSION \"${VERSION}\")/" CMakeLists.txt
+ sed -i -e "s/^<!ENTITY apt-product-version \".*\">$/<!ENTITY apt-product-version \"${VERSION}\">/" doc/apt-verbatim.ent
+
+ # update the last-modification field of manpages based on git changes
+ grep --files-with-matches '<date>' doc/*.xml | while read file; do \
+ LASTMOD="$(date -d "@$(git log -i --format='%at' --max-count=1 --invert-grep --fixed-strings --grep 'review
+typo
+release
+Git-Dch: Ignore
+Gbp-Dch: ignore' "$file")" '+%Y-%m-%dT00:00:00Z')"
+ sed -i -e "s#^\([ ]\+\)<date>.*</date>\$#\1<date>$LASTMOD</date>#" "$file"
+ done
+
+ if [ "$(date +%Y-%m-%d)" != "$(grep --max-count=1 '^"POT-Creation-Date: .*\n"$' po/apt-all.pot | cut -d' ' -f 2)" -o \
+ "$(date +%Y-%m-%d)" != "$(grep --max-count=1 '^"POT-Creation-Date: .*\n"$' doc/po/apt-doc.pot | cut -d' ' -f 2)" ]; then
+ echo >&2 'POT files are not up-to-date. Execute »make update-po« for you…'
+ [ -e build ] || mkdir build
+ ( cd build && cmake .. )
+ cmake --build build --target update-po -- -j 4
+ fi
+elif [ "$1" = 'pre-build' ]; then
+ if [ "$DISTRIBUTION" = "UNRELEASED" ]; then
+ echo 'BUILDING AN UNRELEASED VERSION'
+ else
+ CONFVERSION="$(sed -ne "s/^set(PACKAGE_VERSION \"\(.*\)\")$/\1/p" CMakeLists.txt)"
+ if [ "$VERSION" != "$CONFVERSION" ]; then
+ echo "changelog (${VERSION}) and CMakeLists.txt (${CONFVERSION}) talk about different versions!"
+ echo "You probably want to run »./prepare-release pre-export« to fix this."
+ exit 1
+ fi
+ NEWSDISTRIBUTION=$(dpkg-parsechangelog -l debian/NEWS | sed -n -e '/^Distribution:/s/^Distribution: //p')
+ if [ "$NEWSDISTRIBUTION" = 'UNRELEASED' ]; then
+ echo "changelog (${VERSION}) has a distribution (${DISTRIBUTION}) set, while the NEWS file hasn't!"
+ echo "You probably want to edit »debian/NEWS« to fix this."
+ exit 1
+ fi
+ fi
+elif [ "$1" = 'post-build' ]; then
+ if [ "$DISTRIBUTION" != "UNRELEASED" ]; then
+ echo >&2 "REMEMBER: Tag this release with »git tag -s ${VERSION}« if you are satisfied"
+ else
+ echo >&2 'REMEMBER: Change to a valid distribution before release'
+ fi
+
+ dpkg-checkbuilddeps -d 'libxml2-utils'
+
+ HEADERBLUEPRINT="$(mktemp)"
+ sed -n '1,/^$/p' doc/apt.8.xml > "$HEADERBLUEPRINT"
+ find doc -mindepth 1 -maxdepth 1 -type f -name '*.xml' | while read FILE; do
+ if ! sed -n '1,/^$/p' "$FILE" | cmp "$HEADERBLUEPRINT" - >/dev/null 2>&1; then
+ echo >&2 "WARNING: Manpage $FILE has not the usual header! (see diff below)"
+ sed -n '1,/^$/p' "$FILE" | diff -u "$HEADERBLUEPRINT" - || true
+ fi
+ done
+ sed -n '1,/^$/p' doc/guide.dbk > "$HEADERBLUEPRINT"
+ find doc -mindepth 1 -maxdepth 1 -type f -name '*.dbk' | while read FILE; do
+ if ! sed -n '1,/^$/p' "$FILE" | cmp "$HEADERBLUEPRINT" - >/dev/null 2>&1; then
+ echo >&2 "WARNING: Documentation $FILE has not the usual header (see diff below)!"
+ sed -n '1,/^$/p' "$FILE" | diff -u "$HEADERBLUEPRINT" - || true
+ fi
+ done
+ rm "$HEADERBLUEPRINT"
+
+ # check the manpages with each vendor for vendor-specific errors…
+ find vendor -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 2 | while read DISTRO; do
+ ln -sf ../vendor/${DISTRO}/apt-vendor.ent doc
+ if ! xmllint --nonet --valid --noout $(find doc/ -maxdepth 1 -name '*.xml'); then
+ echo >&2 "WARNING: original docbook manpages have errors with vendor ${DISTRO}!"
+ fi
+ done
+ # lets assume we will always have a german manpage translation
+ if [ -e */doc/de/ -o -e doc/de ]; then
+ # … but check the translations only with one vendor for translation-specific errors
+ if ! xmllint --path /vendor/$(./vendor/getinfo current)/ \
+ --path doc/ \
+ --nonet --valid --noout $(find doc/ */doc/ -mindepth 2 -maxdepth 2 -name '*.xml'); then
+ echo >&2 "WARNING: translated docbook manpages have errors!"
+ fi
+ else
+ echo >&2 "ERROR: translated manpages need to be build before they can be checked!"
+ fi
+ rm -f doc/apt-vendor.ent
+
+elif [ "$1" = 'library' ]; then
+ librarysymbols() {
+ local libname=$(echo "${1}" | cut -c 4-)
+ local buildlib="build/bin/${1}.so.${2}"
+ for dir in $libname */$libname; do
+ local new_buildlib="$dir/${1}.so.${2}"
+ if [ -r "${new_buildlib}" ] && [ ! -e "$buildlib" -o "$new_buildlib" -nt "$buildlib" ]; then
+ local buildlib="${new_buildlib}"
+ fi
+ done
+ if [ ! -r "$buildlib" ]; then
+ echo "ERROR: The library ${1} has to be built before symbols can be checked!"
+ return
+ fi
+ echo "Checking $1 in version $2 build at $(stat -L -c '%y' "$buildlib")"
+ local tmpfile=$(mktemp)
+ dpkg-gensymbols -p${1}${2} -e${buildlib} -Idebian/${1}${2}.symbols -O/dev/null 2> /dev/null > $tmpfile || true
+ librarysymbolsfromfile "$tmpfile" "$(echo "${1}" | cut -c 4- | tr -d '-' | tr 'a-z' 'A-Z')_${2}"
+ rm -f $tmpfile
+ }
+ librarysymbols 'libapt-pkg' "${LIBAPTPKGVERSION}"
+ echo
+ librarysymbols 'libapt-inst' "${LIBAPTINSTVERSION}"
+elif [ "$1" = 'buildlog' ]; then
+ while [ -n "$2" ]; do
+ librarysymbolsfromfile "$2" 'UNKNOWN'
+ shift
+ done
+elif [ "$1" = 'travis-ci' ]; then
+ apt-get install -qy --no-install-recommends dctrl-tools equivs gdebi-core moreutils
+
+ test_deb_control > test-control
+ equivs-build test-control
+ gdebi -n apt-test-depends_1.0_all.deb
+elif [ "$1" = 'coverage' ]; then
+ DIR="${2:-./coverage}"
+ git clean -dfX # remove ignored build artifacts for a clean start
+ make CFLAGS+='--coverage' CXXFLAGS+='--coverage'
+ LCOVRC='--rc geninfo_checksum=1 --rc lcov_branch_coverage=1'
+ mkdir "$DIR"
+ lcov --no-external --directory . --capture --initial --output-file "${DIR}/apt.coverage.init" ${LCOVRC}
+ make test || true
+ ./test/integration/run-tests -q || true
+ lcov --no-external --directory . --capture --output-file "${DIR}/apt.coverage.run" ${LCOVRC}
+ lcov -a "${DIR}/apt.coverage.init" -a "${DIR}/apt.coverage.run" -o "${DIR}/apt.coverage.total" ${LCOVRC}
+ cp "${DIR}/apt.coverage.total" "${DIR}/apt.coverage.fixed"
+ rewritefile() {
+ file="$1"
+ shift
+ name="$(basename "$file")"
+ while [ -n "$1" ]; do
+ if [ -r "$1/$name" ]; then
+ sed -i "s#$file#$1/$name#" "${DIR}/apt.coverage.fixed"
+ break
+ fi
+ shift
+ done
+ if [ -z "$1" ]; then
+ echo >&2 "Coverage data captured for unknown file $file"
+ fi
+ }
+ grep 'build/include/' "${DIR}/apt.coverage.fixed" | sed "s#^SF:$(pwd)/##" | while read file; do
+ rewritefile "$file" 'apt-pkg' 'apt-pkg/deb' 'apt-pkg/edsp' 'apt-pkg/contrib' \
+ 'apt-inst' 'apt-inst/deb' 'apt-inst/contrib' 'apt-private'
+ done
+ genhtml --output-directory "${DIR}" "${DIR}/apt.coverage.fixed" ${LCOVRC}
+elif [ "$1" = 'spellcheckers' -o "$1" = 'lint' ]; then
+ is_available() {
+ if dpkg-checkbuilddeps -d "$1" 2>/dev/null; then
+ return 0
+ fi
+ echo "### SKIPPING ${2:-$1} functionality as ${1} isn't installed"
+ }
+ if is_available 'codespell'; then
+ echo '### codespell in source directories:'
+ codespell --enable-colors $(find . -mindepth 1 -maxdepth 1 -type d \! -name '.git' \! -name 'doc' \! -name 'po' \! -name 'build' \! -name 'test') \
+ | grep -v -e '^.*debian/changelog.*Troup.*==>.*Troupe.*$' \
+ -e '^.*debian/changelog.*readd.*==>.*readd.*$' \
+ -e '^.*debian/changelog.*Tim.*==>.*Time.*$' \
+ -e '^.*apt-pkg/contrib/fileutl\.cc.*creat.*==>.*create.*$' \
+ -e '^.*apt-pkg/pkgcache\.h.*mmaped.*==>.*mapped.*$' \
+ -e '^.*apt-pkg/pkgcachegen\.cc.*mmaped.*==>.*mapped.*$' \
+ -e '^.*apt-pkg/contrib/mmap\.h.*mmaped.*==>.*mapped.*$' \
+ -e '^.*cmdline/apt-key\.in.*dashs.*==>.*dashes.*$' \
+ -e '^.*methods/aptmethod\.h.*creat.*==>.*create.*$' \
+ -e '^.*dselect/install.*ans.*==>.*and.*$' \
+ -e '^.*ftparchive/writer\.h.*Delink.*==>.*Unlink.*$' \
+ -e '^.*ftparchive/writer\.cc.*De[Ll]ink.*==>.*[Uu]nlink.*$' \
+ || true
+ echo '### codespell in testcases:'
+ codespell --enable-colors $(find test -type f \! -name 'status-*' \! -name 'Packages-*' \! -name '*.deb' \! -name '*.sec' \! -name '*.pub' \! -name '*.db') \
+ | grep -v -e '^.*test/libapt/file-helpers\.cc.*creat.*==>.*create.*$' \
+ -e '^.*test/libapt/tagfile_test\.cc.*tyes.*==>.*types.*$' \
+ -e '^.*test/libapt/strutil_test\.cc.*Fiel.*==>.*Feel.*$' \
+ -e '^.*test/libapt/cdromfindpackages_test\.cc.*Signatur.*==>.*Signature.*$' \
+ -e '^.*test/integration/skip-bug-601016-description-translation.*Paket.*==>.*Packet.*$' \
+ -e '^.*test/integration/skip-bug-601016-description-translation.*Wege.*==>.*Wedge.*$' \
+ -e '^.*test/integration/skip-bug-601016-description-translation.*Methoden.*==>.*Methods.*$' \
+ -e '^.*test/integration/test-apt-update-not-modified.*readd.*==>.*readd.*$' \
+ || true
+ echo '### codespell in documentation:'
+ codespell --enable-colors doc/*.xml doc/*.txt doc/*.dbk doc/*.ent doc/*.cmake.in doc/xml.add doc/po4a.conf doc/examples doc/po/apt-doc.pot \
+ po/apt-all.pot README.* COPYING \
+ | grep -v -e '^.*po/apt-all\.pot.*DeLink.*==>.*unlink.*$' \
+ || true
+ fi
+ if is_available 'lintian' 'spellintian'; then
+ echo '### spellintian in source directories:'
+ {
+ for DIR in $(find . -mindepth 1 -maxdepth 1 -type d \! -name '.git' \! -name 'doc' \! -name 'po' \! -name 'build' \! -name 'test'); do
+ spellintian $(find "$DIR" -type f)
+ done
+ } \
+ | grep -v \
+ -e '^.*: long long (duplicate word) -> long$' \
+ -e '^./apt-pkg/pkgcache.h: ID ID (duplicate word) -> ID$' \
+ -e '^./apt-pkg/contrib/mmap.cc: WorkSpace WorkSpace (duplicate word) -> WorkSpace$' \
+ -e '^./apt-pkg/contrib/md5.cc: z z (duplicate word) -> z$' \
+ -e '^./apt-pkg/metaindex.cc: const const (duplicate word) -> const$' \
+ -e '^./apt-pkg/acquire-method.cc: QueueBack QueueBack (duplicate word) -> QueueBack$' \
+ -e '^./CMake/Translations.cmake: domain domain (duplicate word) -> domain$' \
+ -e '^./CMake/apti18n.h.in: m m (duplicate word) -> m$' \
+ -e '^./CMake/run_if_exists.sh: fi fi (duplicate word) -> fi$' \
+ -e '^./ftparchive/byhash.cc: ByHash ByHash (duplicate word) -> ByHash$' \
+ -e '^./ftparchive/writer.cc: this Packages -> these packages$' \
+ -e '^./ftparchive/byhash.h: ByHash ByHash (duplicate word) -> ByHash$' \
+ -e '^./cmdline/apt-key.in: done done (duplicate word) -> done$' \
+ -e '^./cmdline/apt-key.in: fi fi (duplicate word) -> fi$' \
+ -e '^./cmdline/apt-key.in: echo echo (duplicate word) -> echo$' \
+ -e '^./triehash/.travis.yml: perl perl (duplicate word) -> perl$' \
+ -e '^./triehash/README.md: Performance Performance (duplicate word) -> Performance$' \
+ -e '^./debian/apt.apt-compat.cron.daily: fi fi (duplicate word) -> fi$' \
+ -e '^./debian/apt.auto-removal.sh: done done (duplicate word) -> done$' \
+ -e '^./debian/apt.systemd.daily: fi fi (duplicate word) -> fi$' \
+ -e '^./debian/apt.postinst: fi fi (duplicate word) -> fi$' \
+ -e '^./methods/http.cc: Sz Sz (duplicate word) -> Sz$' \
+ -e '^./methods/ftp.cc: AFMap AFMap (duplicate word) -> AFMap$' \
+ -e '^./dselect/install: fi fi (duplicate word) -> fi$' \
+ -e '^./CMake/Documentation.cmake: endforeach endforeach (duplicate word) -> endforeach$' \
+ -e '^./apt-pkg/deb/deblistparser.cc: c c (duplicate word) -> c$' \
+ -e '^./apt-private/private-install.cc: result result (duplicate word) -> result$' \
+ -e '^./debian/changelog: the the (duplicate word) -> the$' \
+ -e '^./debian/changelog: procceed -> proceed$' \
+ -e '^./methods/aptmethod.h: QueueBack QueueBack (duplicate word) -> QueueBack$' \
+ || true
+ echo '### spellintian in testcases:'
+ spellintian $(find test -type f \! -name 'status-*' \! -name 'Packages-*' \! -name '*.deb' \! -name '*.sec' \! -name '*.pub' \! -name '*.db') \
+ | grep -v \
+ -e '^.*: long long (duplicate word) -> long$' \
+ -e '^test/integration/.*: fi fi (duplicate word) -> fi$' \
+ -e '^test/integration/.*: done done (duplicate word) -> done$' \
+ -e '^test/integration/.*: echo echo (duplicate word) -> echo$' \
+ -e '^test/integration/test-00-commands-have-help: moo moo (duplicate word) -> moo$' \
+ -e '^test/integration/test-apt-cache: bar bar (duplicate word) -> bar$' \
+ -e '^test/integration/test-sourceslist-trusted-options: everythingsucceeds everythingsucceeds (duplicate word) -> everythingsucceeds$' \
+ -e '^test/integration/test-sourceslist-trusted-options: everythingfails everythingfails (duplicate word) -> everythingfails$' \
+ -e '^test/integration/test-apt-get-changelog: foo foo (duplicate word) -> foo$' \
+ -e '^test/integration/test-ubuntu-bug-761175-remove-purge: testround testround (duplicate word) -> testround$' \
+ -e '^test/integration/test-apt-get-download: apt apt (duplicate word) -> apt$' \
+ -e '^test/integration/test-apt-showlist-orgroup-in-recommends: zzz zzz (duplicate word) -> zzz$' \
+ -e '^test/integration/test-bug-691453-apt-cache-search-multi-pattern: bar bar (duplicate word) -> bar$' \
+ -e '^test/integration/test-allow: hold hold (duplicate word) -> hold$' \
+ -e '^test/integration/test-apt-by-hash-update: ensureitsbroken ensureitsbroken (duplicate word) -> ensureitsbroken$' \
+ -e '^test/integration/test-apt-source-and-build-dep: foo foo (duplicate word) -> foo$' \
+ || true
+ echo '### spellintian in documentation:'
+ spellintian doc/*.xml doc/*.txt doc/*.dbk doc/*.ent doc/*.cmake.in doc/xml.add doc/po4a.conf doc/examples/* doc/po/apt-doc.pot po/apt-all.pot README.* COPYING \
+ | grep -v \
+ -e '^doc/examples/configure-index: https https (duplicate word) -> https$' \
+ || true
+ fi
+
+ # stay true to the old name
+ if [ "$1" = 'spellcheckers' ]; then exit; fi
+
+ if is_available 'i18nspector'; then
+ echo '### i18nspector on translation files:'
+ i18nspector po/*.po po/*.pot doc/po/*.pot doc/po/*.po \
+ | grep -v \
+ -e '^I: po/es.po: duplicate-header-field X-POFile-SpellExtra$' \
+ || true
+ fi
+else
+ echo >&1 "Usage:\t$0 pre-export
+\t$0 pre-build
+\t$0 post-build
+
+Updating po-files and versions as well as some basic checks are done
+by »pre-export« which needs to be run before package building.
+If you use »gbp buildpackage« you will be notified if you forget.
+»pre-build« and »post-build« can be used to run some more or less
+useful checks automatically run by »gbp« otherwise.
+
+\t$0 library
+\t$0 buildlog filename…
+
+»library« and »buildlog« aren't run automatically but can be useful for
+maintaining the (more or less experimental) symbols files we provide.
+»library« displays the diff between advertised symbols and the once provided
+by the libraries, while »buildlog« extracts this diff from the buildlogs.
+Both will format the diff properly.
+
+\t$0 travis-ci
+\t$0 coverage [output-dir]
+
+»travis-ci« is a shortcut to install all build- as well as test-dependencies
+used by .travis.yml.
+»coverage« does a clean build with the right flags for coverage reporting,
+runs all tests and generates a html report in the end.
+
+\t$0 spellcheckers
+
+»spellcheckers« runs »codespell« and »spellintian« on the appropiate files and
+filters out obvious false positives.
+"
+
+fi
diff --git a/shippable.yml b/shippable.yml
new file mode 100644
index 0000000..8588fcf
--- /dev/null
+++ b/shippable.yml
@@ -0,0 +1,18 @@
+language: none
+env:
+ - DEBIAN_FRONTEND=noninteractive
+
+build:
+ pre_ci_boot:
+ image_name: debian
+ image_tag: buster
+ pull: true
+ ci:
+ - apt-get install -qq build-essential expect
+ - ./prepare-release travis-ci
+ - mkdir build
+ - ( cd build && cmake -DWITH_CURL=OFF .. )
+ - make -C build -j 4
+ - rm -f /etc/dpkg/dpkg.cfg.d/excludes
+ - CTEST_OUTPUT_ON_FAILURE=1 make -C build test
+ - unbuffer ./test/integration/run-tests -q -j 4
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..2f47b5c
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(libapt)
+add_subdirectory(interactive-helper)
diff --git a/test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order b/test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order
new file mode 100644
index 0000000..75a769e
--- /dev/null
+++ b/test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order
@@ -0,0 +1,67 @@
+Package: gawk
+Priority: optional
+Section: interpreters
+Installed-Size: 2084
+Maintainer: Arthur Loiret <aloiret@debian.org>
+Architecture: i386
+Version: 1:3.1.7.dfsg-5
+Provides: awk
+Pre-Depends: libc6 (>= 2.3)
+Filename: pool/main/g/gawk/gawk_3.1.7.dfsg-5_i386.deb
+Size: 766008
+MD5sum: 6459a02cfc1b9eafb3c0415e4ff4e252
+SHA1: ac033488dae4b7e8167d610e490319c047edf7e4
+SHA256: a2337dfe1cc82aeae46f2c722e5cc7be9ecefdea4aaf13f540cfe70bd8b1d627
+Description-de: GNU awk, eine Mustererkennungs- und Verarbeitungssprache
+Homepage: http://www.gnu.org/software/gawk/
+Tag: devel::interpreter, implemented-in::c, interface::commandline, role::program, scope::utility, suite::gnu, use::filtering, use::scanning, works-with::text
+
+Package: aawk
+Priority: optional
+Section: interpreters
+Installed-Size: 2084
+Maintainer: Arthur Loiret <aloiret@debian.org>
+Architecture: i386
+Version: 1:3.1.7.dfsg-5
+Provides: awk
+Pre-Depends: libc6 (>= 2.3)
+Filename: pool/main/a/aawk/aawk_3.1.7.dfsg-5_i386.deb
+Size: 766008
+MD5sum: 6459a02cfc1b9eafb3c0415e4ff4e252
+SHA1: ac033488dae4b7e8167d610e490319c047edf7e4
+SHA256: a2337dfe1cc82aeae46f2c722e5cc7be9ecefdea4aaf13f540cfe70bd8b1d627
+Description-de: GNU awk, eine Mustererkennungs- und Verarbeitungssprache
+Homepage: http://www.gnu.org/software/gawk/
+Tag: devel::interpreter, implemented-in::c, interface::commandline, role::program, scope::utility, suite::gnu, use::filtering, use::scanning, works-with::text
+
+Package: gawk2
+Priority: optional
+Section: interpreters
+Installed-Size: 2084
+Maintainer: Arthur Loiret <aloiret@debian.org>
+Architecture: i386
+Version: 1:3.1.7.dfsg-5
+Provides: awk
+Pre-Depends: libc6 (>= 2.3)
+Depends: coolstuff
+Filename: pool/main/g/gawk/gawk_3.1.7.dfsg-5_i386.deb
+Size: 766008
+MD5sum: 6459a02cfc1b9eafb3c0415e4ff4e252
+SHA1: ac033488dae4b7e8167d610e490319c047edf7e4
+SHA256: a2337dfe1cc82aeae46f2c722e5cc7be9ecefdea4aaf13f540cfe70bd8b1d627
+Description-de: GNU awk, eine Mustererkennungs- und Verarbeitungssprache
+Homepage: http://www.gnu.org/software/gawk/
+Tag: devel::interpreter, implemented-in::c, interface::commandline, role::program, scope::utility, suite::gnu, use::filtering, use::scanning, works-with::text
+
+Package: coolstuff
+Priority: optional
+Section: cool
+Installed-Size: 10
+Maintainer: David Kalnischkies <kalnischkies+debian@gmail.com>
+Architecture: all
+Version: 1-1
+Filename: pool/main/c/coolstuff/coolstuff_1-1_all.deb
+Size: 7608
+MD5sum: 6459aa2efc139eafb323ac3f4f5aeb22
+Description: We all need cool stuff
+
diff --git a/test/integration/Packages-bug-591882-conkeror b/test/integration/Packages-bug-591882-conkeror
new file mode 100644
index 0000000..555e855
--- /dev/null
+++ b/test/integration/Packages-bug-591882-conkeror
@@ -0,0 +1,1787 @@
+Package: conkeror
+Priority: extra
+Section: web
+Installed-Size: 1488
+Maintainer: Axel Beckert <abe@debian.org>
+Architecture: all
+Version: 0.9.2+git100804-1
+Provides: www-browser
+Depends: xulrunner-1.9.1 | xulrunner-1.9.2 | xulrunner-1.9 | xulrunner (>= 1.9~)
+Recommends: conkeror-spawn-process-helper
+Suggests: emacs | emacsen
+Breaks: conkeror-spawn-process-helper (<< 0.9~git080901-1)
+Filename: pool/main/c/conkeror/conkeror_0.9.2+git100804-1_all.deb
+Size: 233068
+MD5Sum: e7bce631fe421938f2dc7a2042497e21
+Description: keyboard focused web browser with Emacs look and feel
+
+Package: coreutils
+Essential: yes
+Priority: required
+Section: utils
+Installed-Size: 12188
+Maintainer: Michael Stone <mstone@debian.org>
+Architecture: i386
+Version: 8.5-1
+Replaces: mktemp, timeout
+Pre-Depends: libacl1 (>= 2.2.11-1), libattr1 (>= 2.4.41-1), libc6 (>= 2.6), libselinux1 (>= 1.32)
+Conflicts: timeout
+Filename: pool/main/c/coreutils/coreutils_8.5-1_i386.deb
+Size: 4608374
+MD5Sum: de7f2ef8769cc38e64774102708ce1ae
+Description: GNU core utilities
+
+Package: debconf-i18n
+Priority: required
+Section: localization
+Installed-Size: 1208
+Maintainer: Debconf Developers <debconf-devel@lists.alioth.debian.org>
+Architecture: all
+Source: debconf
+Version: 1.5.35
+Replaces: debconf (<< 1.3.0), debconf-utils (<< 1.3.22)
+Depends: debconf, liblocale-gettext-perl, libtext-iconv-perl, libtext-wrapi18n-perl, libtext-charwidth-perl
+Conflicts: debconf-english, debconf-utils (<< 1.3.22)
+Filename: pool/main/d/debconf/debconf-i18n_1.5.35_all.deb
+Size: 210348
+MD5Sum: 03d76e5a5fc733cffc54c4b3b14dbcd4
+Description: full internationalization support for debconf
+
+Package: debconf
+Priority: required
+Section: admin
+Installed-Size: 1560
+Maintainer: Debconf Developers <debconf-devel@lists.alioth.debian.org>
+Architecture: all
+Version: 1.5.35
+Replaces: debconf-tiny
+Provides: debconf-2.0
+Depends: debconf-i18n | debconf-english
+Pre-Depends: perl-base (>= 5.6.1-4)
+Recommends: apt-utils (>= 0.5.1)
+Suggests: debconf-doc, debconf-utils, whiptail | dialog | gnome-utils, libterm-readline-gnu-perl, libgnome2-perl, libnet-ldap-perl, perl, libqtgui4-perl, libqtcore4-perl
+Conflicts: apt (<< 0.3.12.1), cdebconf (<< 0.96), debconf-tiny, debconf-utils (<< 1.3.22), dialog (<< 0.9b-20020814-1), menu (<= 2.1.3-1), whiptail (<< 0.51.4-11), whiptail-utf8 (<= 0.50.17-13)
+Filename: pool/main/d/debconf/debconf_1.5.35_all.deb
+Size: 158120
+MD5Sum: 5a64e8e187984ed4eca44bf13eae8ea0
+Description: Debian configuration management system
+Python-Version: 2.4, 2.5, 2.6
+
+Package: debianutils
+Essential: yes
+Priority: required
+Section: utils
+Installed-Size: 216
+Maintainer: Clint Adams <schizo@debian.org>
+Architecture: i386
+Version: 3.4
+Depends: sensible-utils
+Pre-Depends: libc6 (>= 2.7)
+Filename: pool/main/d/debianutils/debianutils_3.4_i386.deb
+Size: 49888
+MD5Sum: 32eb3eebd4c9e58aadd418ca95b23904
+Description: Miscellaneous utilities specific to Debian
+
+Package: defoma
+Priority: optional
+Section: admin
+Installed-Size: 564
+Maintainer: Debian QA Group <packages@qa.debian.org>
+Architecture: all
+Version: 0.11.11
+Depends: whiptail | dialog, file, perl
+Recommends: libfont-freetype-perl
+Suggests: defoma-doc, psfontmgr, x-ttcidfont-conf, dfontmgr
+Conflicts: defoma-gs, defoma-ps, defoma-x, dfontmgr (<< 0.10.0), psfontmgr (<< 0.5.0), x-ttcidfont-conf (<< 5)
+Filename: pool/main/d/defoma/defoma_0.11.11_all.deb
+Size: 101104
+MD5Sum: ee11d3bc1a0275473d5c1feba846ff3e
+Description: Debian Font Manager -- automatic font configuration framework
+Enhances: debhelper
+
+Package: dpkg
+Essential: yes
+Priority: required
+Section: admin
+Installed-Size: 5628
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Architecture: i386
+Version: 1.15.8.3
+Pre-Depends: libbz2-1.0, libc6 (>= 2.3), libselinux1 (>= 1.32), zlib1g (>= 1:1.1.4), coreutils (>= 5.93-1), xz-utils
+Suggests: apt
+Breaks: apt (<< 0.7.7), aptitude (<< 0.4.7-1), dpkg-dev (<< 1.14.16), emacs21 (<< 21.4a+1-5.7), emacs21-nox (<< 21.4a+1-5.7), emacs22 (<= 22.3+1-1), emacs22-gtk (<= 22.3+1-1), emacs22-nox (<= 22.3+1-1), jed (<< 1:0.99.18+dfsg.1-13), jed-extra (<= 2.5.3-2), konqueror (<= 4:4.2.96-1), libdpkg-perl (<< 1.15.8), pinfo (<< 0.6.9-3.1), tkinfo (<< 2.8-3.1), xemacs21-support (<< 21.4.22-2), xjed (<< 1:0.99.18+dfsg.1-13)
+Filename: pool/main/d/dpkg/dpkg_1.15.8.3_i386.deb
+Size: 1866568
+MD5Sum: fa4bf565ebbfde6558d70b071f6abe42
+Description: Debian package management system
+Origin: debian
+Bugs: debbugs://bugs.debian.org
+
+Package: file
+Priority: standard
+Section: utils
+Installed-Size: 136
+Maintainer: Daniel Baumann <daniel@lists.debian-maintainers.org>
+Architecture: i386
+Version: 5.04-5
+Depends: libc6 (>= 2.1), libmagic1 (= 5.04-5), zlib1g (>= 1:1.1.4)
+Filename: pool/main/f/file/file_5.04-5_i386.deb
+Size: 49134
+MD5Sum: 716b1c307166650f247e0a2e07cdd3b1
+Description: Determines file type using "magic" numbers
+
+Package: fontconfig-config
+Priority: optional
+Section: fonts
+Installed-Size: 440
+Maintainer: Keith Packard <keithp@debian.org>
+Architecture: all
+Source: fontconfig
+Version: 2.8.0-2.1
+Replaces: fontconfig (<< 2.3.2-2)
+Depends: debconf (>= 0.5) | debconf-2.0, ucf (>= 0.29), ttf-dejavu-core | ttf-bitstream-vera | ttf-freefont | gsfonts-x11
+Conflicts: fontconfig (<< 2.3.2-2)
+Filename: pool/main/f/fontconfig/fontconfig-config_2.8.0-2.1_all.deb
+Size: 217150
+MD5Sum: c2dd70d32fa8e5c0588cff16efbbf614
+Description: generic font configuration library - configuration
+
+Package: fontconfig
+Priority: optional
+Section: fonts
+Installed-Size: 520
+Maintainer: Keith Packard <keithp@debian.org>
+Architecture: i386
+Version: 2.8.0-2.1
+Replaces: fontconfig-config (<< 2.5.93-1)
+Depends: libc6 (>= 2.0), libexpat1 (>= 1.95.8), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.2.1), zlib1g (>= 1:1.1.4), fontconfig-config
+Suggests: defoma (>= 0.7.0)
+Filename: pool/main/f/fontconfig/fontconfig_2.8.0-2.1_i386.deb
+Size: 333180
+MD5Sum: 67aeeda05141d4fe477c041c12daad1e
+Description: generic font configuration library - support binaries
+
+Package: gcc-4.4-base
+Priority: required
+Section: libs
+Installed-Size: 172
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.4
+Version: 4.4.4-8
+Filename: pool/main/g/gcc-4.4/gcc-4.4-base_4.4.4-8_i386.deb
+Size: 118346
+MD5Sum: 5e35b249b1af8edd9e85932575f6af92
+Description: The GNU Compiler Collection (base package)
+
+Package: libacl1
+Priority: required
+Section: libs
+Installed-Size: 88
+Maintainer: Nathan Scott <nathans@debian.org>
+Architecture: i386
+Source: acl
+Version: 2.2.49-3
+Depends: libattr1 (>= 2.4.41-1), libc6 (>= 2.2)
+Conflicts: acl (<< 2.0.0), libacl1-kerberos4kth
+Filename: pool/main/a/acl/libacl1_2.2.49-3_i386.deb
+Size: 27146
+MD5Sum: 99c1bd61d4f26b1f3a072b490d3daef5
+Description: Access control list shared library
+
+Package: libasound2
+Priority: optional
+Section: libs
+Installed-Size: 1236
+Maintainer: Debian ALSA Maintainers <pkg-alsa-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: alsa-lib
+Version: 1.0.23-1
+Depends: libc6 (>= 2.3.6-6~)
+Suggests: libasound2-plugins (>= 1.0.18)
+Conflicts: libasound2-plugins (<< 1.0.18)
+Filename: pool/main/a/alsa-lib/libasound2_1.0.23-1_i386.deb
+Size: 377718
+MD5Sum: 14a1674ebd84f30080d42c4f86f2533d
+Description: shared library for ALSA applications
+
+Package: libatk1.0-0
+Priority: optional
+Section: libs
+Installed-Size: 208
+Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: atk1.0
+Version: 1.30.0-1
+Depends: libc6 (>= 2.2), libglib2.0-0 (>= 2.16.0)
+Recommends: libatk1.0-data
+Filename: pool/main/a/atk1.0/libatk1.0-0_1.30.0-1_i386.deb
+Size: 82402
+MD5Sum: 27d2b5e1b0ca90254f54dfe2bf056527
+Description: The ATK accessibility toolkit
+
+Package: libattr1
+Priority: required
+Section: libs
+Installed-Size: 64
+Maintainer: Nathan Scott <nathans@debian.org>
+Architecture: i386
+Source: attr
+Version: 1:2.4.44-2
+Depends: libc6 (>= 2.2.3)
+Conflicts: attr (<< 2.0.0)
+Filename: pool/main/a/attr/libattr1_2.4.44-2_i386.deb
+Size: 11902
+MD5Sum: 1e08d3be5e8d55515e7b3fa6fc76a022
+Description: Extended attribute shared library
+
+Package: libavahi-client3
+Priority: optional
+Section: libs
+Installed-Size: 148
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: avahi
+Version: 0.6.27-1
+Depends: libavahi-common3 (>= 0.6.22), libc6 (>= 2.4), libdbus-1-3 (>= 1.1.1)
+Filename: pool/main/a/avahi/libavahi-client3_0.6.27-1_i386.deb
+Size: 54328
+MD5Sum: 07bc086292d59fb7465eedb8c59d0c31
+Description: Avahi client library
+
+Package: libavahi-common-data
+Priority: optional
+Section: libs
+Installed-Size: 728
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: avahi
+Version: 0.6.27-1
+Filename: pool/main/a/avahi/libavahi-common-data_0.6.27-1_i386.deb
+Size: 111952
+MD5Sum: ebc4f7471f8e8ffea1526e1894c283a7
+Description: Avahi common data files
+
+Package: libavahi-common3
+Priority: optional
+Section: libs
+Installed-Size: 132
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: avahi
+Version: 0.6.27-1
+Depends: libc6 (>= 2.4), libavahi-common-data
+Filename: pool/main/a/avahi/libavahi-common3_0.6.27-1_i386.deb
+Size: 50538
+MD5Sum: 6e5bb85c3665bd26cdcb12c41eb9787e
+Description: Avahi common library
+
+Package: libbz2-1.0
+Priority: important
+Section: libs
+Installed-Size: 128
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Source: bzip2
+Version: 1.0.5-4
+Depends: libc6 (>= 2.3)
+Filename: pool/main/b/bzip2/libbz2-1.0_1.0.5-4_i386.deb
+Size: 45118
+MD5Sum: f067ae75bce5ef991b3d0574bf541ddb
+Description: high-quality block-sorting file compressor library - runtime
+
+Package: libc-bin
+Priority: required
+Section: libs
+Installed-Size: 1516
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: i386
+Source: eglibc
+Version: 2.11.2-2
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Breaks: libc0.1 (<< 2.10), libc0.3 (<< 2.10), libc6 (<< 2.10), libc6.1 (<< 2.10)
+Filename: pool/main/e/eglibc/libc-bin_2.11.2-2_i386.deb
+Size: 703542
+MD5Sum: f554ec34c092bb8e52e3d917bec7b46c
+Description: Embedded GNU C Library: Binaries
+
+Package: libc6
+Priority: required
+Section: libs
+Installed-Size: 9340
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: i386
+Source: eglibc
+Version: 2.11.2-2
+Provides: glibc-2.11-1
+Depends: libc-bin (= 2.11.2-2), libgcc1
+Recommends: libc6-i686
+Suggests: glibc-doc, debconf | debconf-2.0, locales
+Conflicts: tzdata (<< 2007k-1), tzdata-etch
+Breaks: locales (<< 2.11), locales-all (<< 2.11), nscd (<< 2.11)
+Filename: pool/main/e/eglibc/libc6_2.11.2-2_i386.deb
+Size: 3877166
+MD5Sum: 3d8fe972a359ad362ac1957c2687e5c2
+Description: Embedded GNU C Library: Shared libraries
+
+Package: libcairo2
+Priority: optional
+Section: libs
+Installed-Size: 824
+Maintainer: Dave Beckett <dajobe@debian.org>
+Architecture: i386
+Source: cairo
+Version: 1.8.10-4
+Depends: libc6 (>= 2.3), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.2.1), libpixman-1-0 (>= 0.15.16), libpng12-0 (>= 1.2.13-4), libx11-6 (>= 0), libxcb-render-util0 (>= 0.3.6), libxcb-render0 (>= 0), libxcb1 (>= 0), libxrender1, zlib1g (>= 1:1.1.4)
+Breaks: iceape-browser (<= 2.0.3-3), libgtk-directfb-2.0-0, xulrunner-1.9, xulrunner-1.9.1 (<= 1.9.1.8-3)
+Filename: pool/main/c/cairo/libcairo2_1.8.10-4_i386.deb
+Size: 508814
+MD5Sum: 51f8838a83d46b5cf590338bcc3c6d73
+Description: The Cairo 2D vector graphics library
+
+Package: libcomerr2
+Priority: required
+Section: libs
+Installed-Size: 104
+Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+Architecture: i386
+Source: e2fsprogs
+Version: 1.41.12-2
+Replaces: e2fsprogs (<< 1.34-1)
+Provides: libcomerr-kth-compat
+Depends: libc6 (>= 2.3.6-6~)
+Filename: pool/main/e/e2fsprogs/libcomerr2_1.41.12-2_i386.deb
+Size: 48508
+MD5Sum: 8fe610cf3b2f82f2a681ba196e91d883
+Description: common error description library
+
+Package: libcups2
+Priority: optional
+Section: libs
+Installed-Size: 468
+Maintainer: Debian CUPS Maintainers <pkg-cups-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: cups
+Version: 1.4.4-3
+Provides: libcupsys2
+Depends: libavahi-client3 (>= 0.6.16), libavahi-common3 (>= 0.6.16), libc6 (>= 2.4), libgcrypt11 (>= 1.4.2), libgnutls26 (>= 2.7.14-0), libgssapi-krb5-2 (>= 1.7+dfsg), zlib1g (>= 1:1.1.4)
+Suggests: cups-common
+Breaks: cups (<< 1.4.4)
+Filename: pool/main/c/cups/libcups2_1.4.4-3_i386.deb
+Size: 225696
+MD5Sum: f78acda030eece301cd5e0c94ea3492b
+Description: Common UNIX Printing System(tm) - Core library
+
+Package: libdatrie1
+Priority: optional
+Section: libs
+Installed-Size: 92
+Maintainer: Theppitak Karoonboonyanan <thep@debian.org>
+Architecture: i386
+Source: libdatrie
+Version: 0.2.4-1
+Depends: libc6 (>= 2.1.3)
+Filename: pool/main/libd/libdatrie/libdatrie1_0.2.4-1_i386.deb
+Size: 26184
+MD5Sum: 305e5beace09f16bf9b0a568e8df7920
+Description: Double-array trie library
+
+Package: libdb4.7
+Priority: standard
+Section: libs
+Installed-Size: 1432
+Maintainer: Debian Berkeley DB Maintainers <pkg-db-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: db4.7
+Version: 4.7.25-9
+Depends: libc6 (>= 2.3.6-6~)
+Conflicts: libdb2 (<< 2:2.7.7-3)
+Filename: pool/main/d/db4.7/libdb4.7_4.7.25-9_i386.deb
+Size: 644290
+MD5Sum: 694cced529f6249607c523765aa1e482
+Description: Berkeley v4.7 Database Libraries [runtime]
+
+Package: libdb4.8
+Priority: standard
+Section: libs
+Installed-Size: 1488
+Maintainer: Clint Adams <schizo@debian.org>
+Architecture: i386
+Source: db4.8
+Version: 4.8.30-1
+Depends: libc6 (>= 2.3.6-6~)
+Conflicts: libdb2 (<< 2:2.7.7-3)
+Filename: pool/main/d/db4.8/libdb4.8_4.8.30-1_i386.deb
+Size: 681682
+MD5Sum: c8f9b6dd1cc49dac5d3319a5ac0d22fc
+Description: Berkeley v4.8 Database Libraries [runtime]
+
+Package: libdbus-1-3
+Priority: optional
+Section: libs
+Installed-Size: 328
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: dbus
+Version: 1.2.24-3
+Depends: libc6 (>= 2.3.6-6~)
+Recommends: dbus
+Filename: pool/main/d/dbus/libdbus-1-3_1.2.24-3_i386.deb
+Size: 129632
+MD5Sum: 620b2226a4cad34ed86931132fa09ea6
+Description: simple interprocess messaging system
+
+Package: libexpat1
+Priority: optional
+Section: libs
+Installed-Size: 368
+Maintainer: Debian XML/SGML Group <debian-xml-sgml-pkgs@lists.alioth.debian.org>
+Architecture: i386
+Source: expat
+Version: 2.0.1-7
+Depends: libc6 (>= 2.1.3)
+Conflicts: wink (<= 1.5.1060-4)
+Filename: pool/main/e/expat/libexpat1_2.0.1-7_i386.deb
+Size: 138122
+MD5Sum: 4607c75c6b55d92ac517fd0fb8543587
+Description: XML parsing C library - runtime library
+
+Package: libfontconfig1
+Priority: optional
+Section: libs
+Installed-Size: 412
+Maintainer: Keith Packard <keithp@debian.org>
+Architecture: i386
+Source: fontconfig
+Version: 2.8.0-2.1
+Provides: libfontconfig
+Depends: libc6 (>= 2.7), libexpat1 (>= 1.95.8), libfreetype6 (>= 2.2.1), zlib1g (>= 1:1.1.4), fontconfig-config (= 2.8.0-2.1)
+Filename: pool/main/f/fontconfig/libfontconfig1_2.8.0-2.1_i386.deb
+Size: 273878
+MD5Sum: fd6d6426df7bc1330b064a7d45a85d84
+Description: generic font configuration library - runtime
+
+Package: libfreetype6
+Priority: optional
+Section: libs
+Installed-Size: 668
+Maintainer: Steve Langasek <vorlon@debian.org>
+Architecture: i386
+Source: freetype
+Version: 2.4.2-1
+Depends: libc6 (>= 2.1.3), zlib1g (>= 1:1.1.4)
+Conflicts: freetype, xpdf-reader (<< 1.00-4)
+Filename: pool/main/f/freetype/libfreetype6_2.4.2-1_i386.deb
+Size: 360632
+MD5Sum: f9c333d2643d186685a77d1072db5425
+Description: FreeType 2 font engine, shared library files
+
+Package: libgcc1
+Priority: required
+Section: libs
+Installed-Size: 156
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.4 (4.4.4-8)
+Version: 1:4.4.4-8
+Depends: gcc-4.4-base (= 4.4.4-8), libc6 (>= 2.2.4)
+Filename: pool/main/g/gcc-4.4/libgcc1_4.4.4-8_i386.deb
+Size: 55180
+MD5Sum: c92a5656f20caa7d50bd425f2b1f25d8
+Description: GCC support library
+
+Package: libgcrypt11
+Priority: standard
+Section: libs
+Installed-Size: 556
+Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Architecture: i386
+Version: 1.4.5-2
+Depends: libc6 (>= 2.3), libgpg-error0 (>= 1.6-1)
+Suggests: rng-tools
+Filename: pool/main/libg/libgcrypt11/libgcrypt11_1.4.5-2_i386.deb
+Size: 266444
+MD5Sum: 6b687ecf0284d5efe44115c07198b159
+Description: LGPL Crypto library - runtime library
+
+Package: libgdbm3
+Priority: important
+Section: libs
+Installed-Size: 120
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Source: gdbm
+Version: 1.8.3-9
+Depends: libc6 (>= 2.1.3), dpkg (>= 1.15.4) | install-info
+Filename: pool/main/g/gdbm/libgdbm3_1.8.3-9_i386.deb
+Size: 44940
+MD5Sum: cc0859fd9c0ea0a211e7f1a0da09ddc0
+Description: GNU dbm database routines (runtime version)
+
+Package: libglib2.0-0
+Priority: optional
+Section: libs
+Installed-Size: 2212
+Maintainer: Loic Minier <lool@dooz.org>
+Architecture: i386
+Source: glib2.0
+Version: 2.24.1-1
+Replaces: libglib2.0-dev (<< 2.23.2-2)
+Depends: libc6 (>= 2.9), libpcre3 (>= 7.7), libselinux1 (>= 1.32), zlib1g (>= 1:1.1.4)
+Recommends: libglib2.0-data, shared-mime-info
+Conflicts: libpango1.0-0 (<< 1.11)
+Filename: pool/main/g/glib2.0/libglib2.0-0_2.24.1-1_i386.deb
+Size: 1024782
+MD5Sum: e0f853cbcba1c8a132fc07c303c31ea9
+Description: The GLib library of C routines
+
+Package: libgnutls26
+Priority: standard
+Section: libs
+Installed-Size: 1268
+Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Architecture: i386
+Source: gnutls26
+Version: 2.8.6-1
+Replaces: gnutls0, gnutls0.4, gnutls3
+Depends: libc6 (>= 2.3), libgcrypt11 (>= 1.4.2), libtasn1-3 (>= 1.6-0), zlib1g (>= 1:1.1.4)
+Suggests: gnutls-bin
+Conflicts: gnutls0, gnutls0.4
+Filename: pool/main/g/gnutls26/libgnutls26_2.8.6-1_i386.deb
+Size: 528314
+MD5Sum: 9c585b48d4a4e8de856b70a3350037de
+Description: the GNU TLS library - runtime library
+
+Package: libgpg-error0
+Priority: standard
+Section: libs
+Installed-Size: 228
+Maintainer: Jose Carlos Garcia Sogo <jsogo@debian.org>
+Architecture: i386
+Source: libgpg-error
+Version: 1.6-1
+Depends: libc6 (>= 2.1.3)
+Filename: pool/main/libg/libgpg-error/libgpg-error0_1.6-1_i386.deb
+Size: 43118
+MD5Sum: be3a76a7176e38cb1f0464be1f21d4d4
+Description: library for common error values and messages in GnuPG components
+
+Package: libgssapi-krb5-2
+Priority: standard
+Section: libs
+Installed-Size: 1604
+Maintainer: Sam Hartman <hartmans@debian.org>
+Architecture: i386
+Source: krb5
+Version: 1.8.3+dfsg~beta1-1
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.7), libcomerr2 (>= 1.34), libk5crypto3 (>= 1.8+dfsg), libkeyutils1, libkrb5-3 (= 1.8.3+dfsg~beta1-1), libkrb5support0 (>= 1.7dfsg~beta2)
+Suggests: krb5-doc, krb5-user
+Breaks: libkrb53
+Filename: pool/main/k/krb5/libgssapi-krb5-2_1.8.3+dfsg~beta1-1_i386.deb
+Size: 1463772
+MD5Sum: 80f3ffe8e30991723a8009829e2aef10
+Description: MIT Kerberos runtime libraries - krb5 GSS-API Mechanism
+
+Package: libgtk2.0-0
+Priority: optional
+Section: libs
+Installed-Size: 5864
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: i386
+Source: gtk+2.0
+Version: 2.20.1-1
+Provides: gtk2.0-binver-2.10.0
+Depends: libgtk2.0-common, libatk1.0-0 (>= 1.29.3), libc6 (>= 2.7), libcairo2 (>= 1.6.4-6.1), libcups2 (>= 1.4.0), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.2.1), libglib2.0-0 (>= 2.24.0), libgnutls26 (>= 2.7.14-0), libgssapi-krb5-2 (>= 1.6.dfsg.2), libjasper1 (>= 1.900.1), libjpeg62, libpango1.0-0 (>= 1.20.0), libpng12-0 (>= 1.2.13-4), libtiff4, libx11-6 (>= 0), libxcomposite1 (>= 1:0.3-1), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6 (>= 0), libxfixes3 (>= 1:4.0.1), libxi6 (>= 0), libxinerama1, libxrandr2 (>= 2:1.2.99.3), libxrender1, zlib1g (>= 1:1.1.4), shared-mime-info
+Recommends: hicolor-icon-theme, libgtk2.0-bin
+Suggests: librsvg2-common, gvfs
+Filename: pool/main/g/gtk+2.0/libgtk2.0-0_2.20.1-1_i386.deb
+Size: 2503890
+MD5Sum: fc1fc5987ae2be51e9b4bcc4b57fc472
+Description: The GTK+ graphical user interface library
+
+Package: libgtk2.0-common
+Priority: optional
+Section: misc
+Installed-Size: 21484
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: all
+Source: gtk+2.0
+Version: 2.20.1-1
+Recommends: libgtk2.0-0
+Filename: pool/main/g/gtk+2.0/libgtk2.0-common_2.20.1-1_all.deb
+Size: 7104864
+MD5Sum: 68cf4472a1e7bed64241f466d6830bbc
+Description: Common files for the GTK+ graphical user interface library
+
+Package: libhunspell-1.2-0
+Priority: optional
+Section: libs
+Installed-Size: 376
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: i386
+Source: hunspell
+Version: 1.2.11-1
+Depends: libc6 (>= 2.1.3), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1)
+Recommends: hunspell-en-us | hunspell-dictionary | myspell-dictionary
+Conflicts: openoffice.org-core (= 2.2.0~rc2-1)
+Filename: pool/main/h/hunspell/libhunspell-1.2-0_1.2.11-1_i386.deb
+Size: 154502
+MD5Sum: b8b8e5d0805a5e00b4cfdd64128d8054
+Description: spell checker and morphological analyzer (shared library)
+
+Package: libice6
+Priority: optional
+Section: libs
+Installed-Size: 204
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libice
+Version: 2:1.0.6-1
+Depends: libc6 (>= 2.3), x11-common
+Filename: pool/main/libi/libice/libice6_1.0.6-1_i386.deb
+Size: 50284
+MD5Sum: 7052cd2a95caeee0f83d0f1950fd5d42
+Description: X11 Inter-Client Exchange library
+
+Package: libjasper1
+Priority: optional
+Section: libs
+Installed-Size: 340
+Maintainer: Roland Stigge <stigge@antcom.de>
+Architecture: i386
+Source: jasper
+Version: 1.900.1-7
+Replaces: libjasper-1.700-2
+Depends: libc6 (>= 2.7), libjpeg62
+Suggests: libjasper-runtime
+Conflicts: libjasper-1.700-2
+Filename: pool/main/j/jasper/libjasper1_1.900.1-7_i386.deb
+Size: 145186
+MD5Sum: 1df984b14ac57be23d5a5ad0c40ab6cf
+Description: The JasPer JPEG-2000 runtime library
+
+Package: libjpeg62
+Priority: optional
+Section: libs
+Installed-Size: 204
+Maintainer: Bill Allombert <ballombe@debian.org>
+Architecture: i386
+Source: libjpeg6b
+Version: 6b1-1
+Depends: libc6 (>= 2.7)
+Filename: pool/main/libj/libjpeg6b/libjpeg62_6b1-1_i386.deb
+Size: 87974
+MD5Sum: ab36968379a350bdae98a3bf58aeda84
+Description: The Independent JPEG Group's JPEG runtime library (version 6.2)
+
+Package: libk5crypto3
+Priority: standard
+Section: libs
+Installed-Size: 1556
+Maintainer: Sam Hartman <hartmans@debian.org>
+Architecture: i386
+Source: krb5
+Version: 1.8.3+dfsg~beta1-1
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.4), libkeyutils1, libkrb5support0 (>= 1.7dfsg~beta2)
+Suggests: krb5-doc, krb5-user
+Breaks: libgssapi-krb5-2 (<= 1.8~aa), libkrb5-3 (<= 1.8~aa), libkrb53 (<< 1.6.dfsg.4~beta1-9)
+Filename: pool/main/k/krb5/libk5crypto3_1.8.3+dfsg~beta1-1_i386.deb
+Size: 1439050
+MD5Sum: 463e89d5a6eacaa55f377575eb6f0a7c
+Description: MIT Kerberos runtime libraries - Crypto Library
+
+Package: libkeyutils1
+Priority: standard
+Section: libs
+Installed-Size: 56
+Maintainer: Daniel Baumann <daniel@lists.debian-maintainers.org>
+Architecture: i386
+Source: keyutils
+Version: 1.4-1
+Depends: libc6 (>= 2.1.3)
+Filename: pool/main/k/keyutils/libkeyutils1_1.4-1_i386.deb
+Size: 6640
+MD5Sum: bc6dbf8f320151e67995e55c3e358b89
+Description: Linux Key Management Utilities (library)
+
+Package: libkrb5-3
+Priority: standard
+Section: libs
+Installed-Size: 2204
+Maintainer: Sam Hartman <hartmans@debian.org>
+Architecture: i386
+Source: krb5
+Version: 1.8.3+dfsg~beta1-1
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.9), libcomerr2 (>= 1.34), libk5crypto3 (>= 1.8+dfsg), libkeyutils1, libkrb5support0 (= 1.8.3+dfsg~beta1-1)
+Suggests: krb5-doc, krb5-user
+Conflicts: libapache-mod-auth-kerb (<= 4.996-5.0-rc6-2), libapache2-mod-auth-kerb (<= 4.996-5.0-rc6-2), ssh-krb5 (<< 3.8.1p1-10)
+Breaks: libkrb53 (<< 1.6.dfsg.4~beta1-9)
+Filename: pool/main/k/krb5/libkrb5-3_1.8.3+dfsg~beta1-1_i386.deb
+Size: 1697246
+MD5Sum: 8894886ff9537684ef338ac9ab510467
+Description: MIT Kerberos runtime libraries
+
+Package: libkrb5support0
+Priority: standard
+Section: libs
+Installed-Size: 1436
+Maintainer: Sam Hartman <hartmans@debian.org>
+Architecture: i386
+Source: krb5
+Version: 1.8.3+dfsg~beta1-1
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.3.4), libkeyutils1
+Suggests: krb5-doc, krb5-user
+Breaks: libkrb53 (<< 1.6.dfsg.4~beta1-9)
+Filename: pool/main/k/krb5/libkrb5support0_1.8.3+dfsg~beta1-1_i386.deb
+Size: 1385290
+MD5Sum: 5a9f10f57f35e8f34b4a7b7052244c14
+Description: MIT Kerberos runtime libraries - Support library
+
+Package: liblocale-gettext-perl
+Priority: required
+Section: perl
+Installed-Size: 104
+Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Version: 1.05-6
+Depends: libc6 (>= 2.2)
+Pre-Depends: perl-base (>= 5.10.0-25), perlapi-5.10.0
+Filename: pool/main/libl/liblocale-gettext-perl/liblocale-gettext-perl_1.05-6_i386.deb
+Size: 21596
+MD5Sum: a71c3dadecdf1b64b4cb050f91e032b5
+Description: Using libc functions for internationalization in Perl
+
+Package: liblzma2
+Priority: required
+Section: libs
+Installed-Size: 308
+Maintainer: Jonathan Nieder <jrnieder@gmail.com>
+Architecture: i386
+Source: xz-utils
+Version: 4.999.9beta+20100713-1
+Depends: libc6 (>= 2.3.6-6~)
+Filename: pool/main/x/xz-utils/liblzma2_4.999.9beta+20100713-1_i386.deb
+Size: 171540
+MD5Sum: fe14361cc247e9bb11b98e31e47cfbbe
+Description: XZ-format compression library
+
+Package: libmagic1
+Priority: standard
+Section: libs
+Installed-Size: 2032
+Maintainer: Daniel Baumann <daniel@lists.debian-maintainers.org>
+Architecture: i386
+Source: file
+Version: 5.04-5
+Depends: libc6 (>= 2.3.4), zlib1g (>= 1:1.1.4)
+Suggests: file
+Conflicts: file (<< 5.04-2)
+Filename: pool/main/f/file/libmagic1_5.04-5_i386.deb
+Size: 233668
+MD5Sum: def2786d4289068336826c75c514b2bc
+Description: File type determination library using "magic" numbers
+
+Package: libmozjs2d
+Priority: optional
+Section: libs
+Installed-Size: 948
+Maintainer: Maintainers of Mozilla-related packages <pkg-mozilla-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: xulrunner
+Version: 1.9.1.11-1
+Depends: libc6 (>= 2.3.6-6~), libgcc1 (>= 1:4.1.1), libnspr4-0d (>= 1.8.0.10), libstdc++6 (>= 4.1.1)
+Breaks: xulrunner-1.9.1 (<< 1.9.1.10~)
+Filename: pool/main/x/xulrunner/libmozjs2d_1.9.1.11-1_i386.deb
+Size: 474718
+MD5Sum: 6a9032247eceb71c9b472bd6fc9961e2
+Description: The Mozilla SpiderMonkey JavaScript library
+
+Package: libncurses5
+Priority: required
+Section: libs
+Installed-Size: 592
+Maintainer: Craig Small <csmall@debian.org>
+Architecture: i386
+Source: ncurses
+Version: 5.7+20100313-2
+Depends: libc6 (>= 2.3.4)
+Recommends: libgpm2
+Filename: pool/main/n/ncurses/libncurses5_5.7+20100313-2_i386.deb
+Size: 347766
+MD5Sum: f82378f1792c81e380689b932ea26c21
+Description: shared libraries for terminal handling
+
+Package: libnewt0.52
+Priority: important
+Section: libs
+Installed-Size: 960
+Maintainer: Alastair McKinstry <mckinstry@debian.org>
+Architecture: i386
+Source: newt
+Version: 0.52.11-1
+Replaces: libnewt-utf8, libnewt0, libnewt0.51
+Depends: libc6 (>= 2.3), libslang2 (>= 2.0.7-1)
+Recommends: libfribidi0
+Conflicts: libnewt0.51
+Filename: pool/main/n/newt/libnewt0.52_0.52.11-1_i386.deb
+Size: 68022
+MD5Sum: be04bedb79431088f0ed072317143fdd
+Description: Not Erik's Windowing Toolkit - text mode windowing with slang
+
+Package: libnspr4-0d
+Priority: optional
+Section: libs
+Installed-Size: 340
+Maintainer: Maintainers of Mozilla-related packages <pkg-mozilla-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: nspr
+Version: 4.8.6-1
+Depends: libc6 (>= 2.3.6-6~)
+Filename: pool/main/n/nspr/libnspr4-0d_4.8.6-1_i386.deb
+Size: 125500
+MD5Sum: 4f3c6c3c19b2f24a1734bd084b34f6f5
+Description: NetScape Portable Runtime Library
+
+Package: libnss3-1d
+Priority: optional
+Section: libs
+Installed-Size: 2324
+Maintainer: Maintainers of Mozilla-related packages <pkg-mozilla-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: nss
+Version: 3.12.7-1
+Depends: libc6 (>= 2.3.6-6~), libnspr4-0d (>= 4.8.6), libsqlite3-0 (>= 3.7.0), zlib1g (>= 1:1.1.4)
+Filename: pool/main/n/nss/libnss3-1d_3.12.7-1_i386.deb
+Size: 986188
+MD5Sum: 3dbaa9f3c493b2e6bac6dccce0a56dc2
+Description: Network Security Service libraries
+
+Package: libpam-modules
+Priority: required
+Section: admin
+Installed-Size: 996
+Maintainer: Steve Langasek <vorlon@debian.org>
+Architecture: i386
+Source: pam
+Version: 1.1.1-3
+Replaces: libpam-umask, libpam0g-util
+Provides: libpam-mkhomedir, libpam-motd, libpam-umask
+Pre-Depends: libc6 (>= 2.4), libdb4.8, libpam0g (>= 1.1.0), libselinux1 (>= 2.0.85), debconf (>= 0.5) | debconf-2.0
+Conflicts: libpam-mkhomedir, libpam-motd, libpam-umask
+Filename: pool/main/p/pam/libpam-modules_1.1.1-3_i386.deb
+Size: 344512
+MD5Sum: d55b046bb3da59da7fb94c7325bc07d1
+Description: Pluggable Authentication Modules for PAM
+
+Package: libpam0g
+Priority: required
+Section: libs
+Installed-Size: 244
+Maintainer: Steve Langasek <vorlon@debian.org>
+Architecture: i386
+Source: pam
+Version: 1.1.1-3
+Replaces: libpam0g-util
+Depends: libc6 (>= 2.3), debconf (>= 0.5) | debconf-2.0
+Suggests: libpam-doc
+Filename: pool/main/p/pam/libpam0g_1.1.1-3_i386.deb
+Size: 114334
+MD5Sum: 4850e1ffc833914e164f0c14ceb91010
+Description: Pluggable Authentication Modules library
+
+Package: libpango1.0-0
+Priority: optional
+Section: libs
+Installed-Size: 836
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: i386
+Source: pango1.0
+Version: 1.28.1-1
+Provides: pango1.0-modver-1.6.0
+Depends: libpango1.0-common (>= 1.28.1-1), libc6 (>= 2.3.6-6~), libcairo2 (>= 1.8.10-3), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.2.1), libglib2.0-0 (>= 2.24.0), libthai0 (>= 0.1.12), libx11-6, libxft2 (>> 2.1.1), libxrender1, zlib1g (>= 1:1.1.4)
+Conflicts: pango-libthai
+Filename: pool/main/p/pango1.0/libpango1.0-0_1.28.1-1_i386.deb
+Size: 303342
+MD5Sum: fdc1d8650b049d88bb7cdc2f7af425f0
+Description: Layout and rendering of internationalized text
+
+Package: libpango1.0-common
+Priority: optional
+Section: misc
+Installed-Size: 252
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: all
+Source: pango1.0
+Version: 1.28.1-1
+Replaces: libpango-common (<< 1.0.0), libpango0
+Depends: debconf | debconf-2.0, defoma (>= 0.11.1), fontconfig (>= 2.1.91)
+Recommends: x-ttcidfont-conf, libpango1.0-0
+Suggests: ttf-japanese-gothic, ttf-japanese-mincho, ttf-thryomanes, ttf-baekmuk, ttf-arphic-gbsn00lp, ttf-arphic-bsmi00lp, ttf-arphic-gkai00mp, ttf-arphic-bkai00mp
+Conflicts: pango-libthai (<< 0.1.6-2)
+Filename: pool/main/p/pango1.0/libpango1.0-common_1.28.1-1_all.deb
+Size: 112638
+MD5Sum: 521e4171155dd465866ff400cb9a37bc
+Description: Modules and configuration files for the Pango
+
+Package: libpcre3
+Priority: standard
+Section: libs
+Installed-Size: 480
+Maintainer: Mark Baker <mark@mnb.org.uk>
+Architecture: i386
+Source: pcre3
+Version: 8.02-1.1
+Depends: libc6 (>= 2.3)
+Conflicts: libpcre3-dev (<= 4.3-3)
+Breaks: approx (<< 4.4-1~), cduce (<< 0.5.3-2~), cmigrep (<< 1.5-7~), galax (<< 1.1-7~), libpcre-ocaml (<< 6.0.1~), liquidsoap (<< 0.9.2-3~), ocsigen (<< 1.3.3-1~)
+Filename: pool/main/p/pcre3/libpcre3_8.02-1.1_i386.deb
+Size: 231418
+MD5Sum: 3be0351b7ecd8a5e2140318237d923d0
+Description: Perl 5 Compatible Regular Expression Library - runtime files
+
+Package: libpixman-1-0
+Priority: optional
+Section: libs
+Installed-Size: 508
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: pixman
+Version: 0.16.4-1
+Depends: libc6 (>= 2.1.3)
+Filename: pool/main/p/pixman/libpixman-1-0_0.16.4-1_i386.deb
+Size: 236004
+MD5Sum: 46f6f180adfbbeabc95c774386c3006f
+Description: pixel-manipulation library for X and cairo
+
+Package: libpng12-0
+Priority: optional
+Section: libs
+Installed-Size: 320
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Source: libpng
+Version: 1.2.44-1
+Replaces: libpng12-dev (<= 1.2.8rel-7)
+Depends: libc6 (>= 2.1.3), zlib1g (>= 1:1.1.4)
+Conflicts: libpng12-dev (<= 1.2.8rel-7), mzscheme (<= 1:209-5), pngcrush (<= 1.5.10-2), pngmeta (<= 1.11-3), povray-3.5 (<= 3.5.0c-10), qemacs (<= 0.3.1-5)
+Filename: pool/main/libp/libpng/libpng12-0_1.2.44-1_i386.deb
+Size: 175970
+MD5Sum: e871ef14b295cad4ac8ceedbce00c818
+Description: PNG library - runtime
+
+Package: libpopt0
+Priority: important
+Section: libs
+Installed-Size: 208
+Maintainer: Paul Martin <pm@debian.org>
+Architecture: i386
+Source: popt
+Version: 1.16-1
+Replaces: popt
+Depends: libc6 (>= 2.3)
+Conflicts: libpopt-dev (<= 1.4-1), popt, rpm (<= 4.0.2-3)
+Filename: pool/main/p/popt/libpopt0_1.16-1_i386.deb
+Size: 52890
+MD5Sum: 935b9a8eea67b75326002f75b374383d
+Description: lib for parsing cmdline parameters
+
+Package: libreadline6
+Priority: important
+Section: libs
+Installed-Size: 356
+Maintainer: Matthias Klose <doko@debian.org>
+Architecture: i386
+Source: readline6
+Version: 6.1-3
+Depends: readline-common, libc6 (>= 2.3), libncurses5 (>= 5.7+20100313)
+Filename: pool/main/r/readline6/libreadline6_6.1-3_i386.deb
+Size: 145914
+MD5Sum: 63c3a619ef1fd5ec1c04fd0992f3f71f
+Description: GNU readline and history libraries, run-time libraries
+
+Package: libselinux1
+Priority: required
+Section: libs
+Installed-Size: 216
+Maintainer: Manoj Srivastava <srivasta@debian.org>
+Architecture: i386
+Source: libselinux
+Version: 2.0.96-1
+Depends: libc6 (>= 2.3.4)
+Filename: pool/main/libs/libselinux/libselinux1_2.0.96-1_i386.deb
+Size: 82752
+MD5Sum: 65c82e5ad1ebe75c056eeb33147e1eeb
+Description: SELinux runtime shared libraries
+
+Package: libslang2
+Priority: important
+Section: libs
+Installed-Size: 1264
+Maintainer: Alastair McKinstry <mckinstry@debian.org>
+Architecture: i386
+Source: slang2
+Version: 2.2.2-4
+Depends: libc6 (>= 2.3)
+Recommends: libpng12-0
+Filename: pool/main/s/slang2/libslang2_2.2.2-4_i386.deb
+Size: 507014
+MD5Sum: 2cd4ae18b2f0e4a04c0e98d4913d5fd7
+Description: The S-Lang programming library - runtime version
+
+Package: libsm6
+Priority: optional
+Section: libs
+Installed-Size: 144
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libsm
+Version: 2:1.1.1-1
+Depends: libc6 (>= 2.1.3), libice6 (>= 1:1.0.0), libuuid1 (>= 2.16)
+Filename: pool/main/libs/libsm/libsm6_1.1.1-1_i386.deb
+Size: 23976
+MD5Sum: eda3e07bf434262ba270bb1ae12e71e0
+Description: X11 Session Management library
+
+Package: libsqlite3-0
+Priority: standard
+Section: libs
+Installed-Size: 684
+Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.hu>
+Architecture: i386
+Source: sqlite3
+Version: 3.7.0-1.1
+Depends: libc6 (>= 2.3.6-6~)
+Filename: pool/main/s/sqlite3/libsqlite3-0_3.7.0-1.1_i386.deb
+Size: 380004
+MD5Sum: 4706e644e7f3f2b183db0ce001a7bbaa
+Description: SQLite 3 shared library
+
+Package: libstartup-notification0
+Priority: optional
+Section: libs
+Installed-Size: 92
+Maintainer: Ondřej Surý <ondrej@debian.org>
+Architecture: i386
+Source: startup-notification
+Version: 0.10-1
+Depends: libc6 (>= 2.1.3), libice6 (>= 1:1.0.0), libsm6, libx11-6, libxcb-atom1 (>= 0.3.3), libxcb-aux0 (>= 0.3.3), libxcb-event1 (>= 0.3.3), libxcb1 (>= 1.1.92)
+Filename: pool/main/s/startup-notification/libstartup-notification0_0.10-1_i386.deb
+Size: 21230
+MD5Sum: 0e62e87fe56b93c30e7dee751fc7a59f
+Description: library for program launch feedback (shared library)
+
+Package: libstdc++6
+Priority: required
+Section: libs
+Installed-Size: 1204
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.4
+Version: 4.4.4-8
+Depends: gcc-4.4-base (= 4.4.4-8), libc6 (>= 2.3.2), libgcc1
+Conflicts: scim (<< 1.4.2-1)
+Filename: pool/main/g/gcc-4.4/libstdc++6_4.4.4-8_i386.deb
+Size: 347294
+MD5Sum: c5ad981710bbe349c2847b1cc00cafc1
+Description: The GNU Standard C++ Library v3
+
+Package: libtasn1-3
+Priority: important
+Section: libs
+Installed-Size: 152
+Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Architecture: i386
+Version: 2.7-1
+Depends: libc6 (>= 2.3)
+Conflicts: libtasn1-2 (= 0.3.1-1)
+Filename: pool/main/libt/libtasn1-3/libtasn1-3_2.7-1_i386.deb
+Size: 61424
+MD5Sum: 0120dbb8123bef3fe7cb4155e95e4307
+Description: Manage ASN.1 structures (runtime)
+
+Package: libtext-charwidth-perl
+Priority: required
+Section: perl
+Installed-Size: 92
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Version: 0.04-6
+Depends: libc6 (>= 2.1.3), perl-base (>= 5.10.0-23), perlapi-5.10.0
+Filename: pool/main/libt/libtext-charwidth-perl/libtext-charwidth-perl_0.04-6_i386.deb
+Size: 11582
+MD5Sum: 6aa5a252db205de6817ee954f5193fbf
+Description: get display widths of characters on the terminal
+
+Package: libtext-iconv-perl
+Priority: required
+Section: perl
+Installed-Size: 104
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Version: 1.7-2
+Depends: libc6 (>= 2.1.3), perl-base (>= 5.10.0-23), perlapi-5.10.0
+Filename: pool/main/libt/libtext-iconv-perl/libtext-iconv-perl_1.7-2_i386.deb
+Size: 18076
+MD5Sum: 707f244dc1df10391dd9679b2645a911
+Description: converts between character sets in Perl
+
+Package: libtext-wrapi18n-perl
+Priority: required
+Section: perl
+Installed-Size: 28
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: all
+Version: 0.06-7
+Depends: libtext-charwidth-perl
+Filename: pool/main/libt/libtext-wrapi18n-perl/libtext-wrapi18n-perl_0.06-7_all.deb
+Size: 9004
+MD5Sum: 5608c08e10e79269e391f02856f96ec5
+Description: internationalized substitute of Text::Wrap
+
+Package: libthai-data
+Priority: optional
+Section: libs
+Installed-Size: 596
+Maintainer: Theppitak Karoonboonyanan <thep@debian.org>
+Architecture: all
+Source: libthai
+Version: 0.1.14-2
+Conflicts: libthai0 (<< 0.1.10)
+Filename: pool/main/libt/libthai/libthai-data_0.1.14-2_all.deb
+Size: 198282
+MD5Sum: 201f73aac77afd1eef48bbf858964586
+Description: Data files for Thai language support library
+
+Package: libthai0
+Priority: optional
+Section: libs
+Installed-Size: 108
+Maintainer: Theppitak Karoonboonyanan <thep@debian.org>
+Architecture: i386
+Source: libthai
+Version: 0.1.14-2
+Depends: libc6 (>= 2.1.3), libdatrie1 (>= 0.2.0), libthai-data (>= 0.1.10)
+Conflicts: libdatrie0 (<< 0.1.4)
+Filename: pool/main/libt/libthai/libthai0_0.1.14-2_i386.deb
+Size: 40222
+MD5Sum: 7f65a895b5a232442969584c8aa6635d
+Description: Thai language support library
+Enhances: kdelibs5
+
+Package: libtiff4
+Priority: optional
+Section: libs
+Installed-Size: 488
+Maintainer: Jay Berkenbilt <qjb@debian.org>
+Architecture: i386
+Source: tiff
+Version: 3.9.4-1
+Depends: libc6 (>= 2.3), libjpeg62, zlib1g (>= 1:1.1.4)
+Filename: pool/main/t/tiff/libtiff4_3.9.4-1_i386.deb
+Size: 182070
+MD5Sum: 4438501f82789f341c245d79b40c175f
+Description: Tag Image File Format (TIFF) library
+
+Package: libuuid1
+Priority: required
+Section: libs
+Installed-Size: 112
+Maintainer: LaMont Jones <lamont@debian.org>
+Architecture: i386
+Source: util-linux
+Version: 2.17.2-3.1
+Replaces: e2fsprogs (<< 1.34-1)
+Depends: passwd, libc6 (>= 2.3)
+Recommends: uuid-runtime
+Filename: pool/main/u/util-linux/libuuid1_2.17.2-3.1_i386.deb
+Size: 58126
+MD5Sum: cea424e8f6340a5ee8d4e64da2d6c953
+Description: Universally Unique ID library
+
+Package: libx11-6
+Priority: optional
+Section: libs
+Installed-Size: 1356
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libx11
+Version: 2:1.3.3-3
+Depends: libc6 (>= 2.3.2), libxcb1 (>= 1.2), libx11-data
+Conflicts: xlibs-data (<< 1:7.0.0)
+Filename: pool/main/libx/libx11/libx11-6_1.3.3-3_i386.deb
+Size: 816814
+MD5Sum: 40f5b42f6af2ad1550d3a2d6f634218f
+Description: X11 client-side library
+
+Package: libx11-data
+Priority: optional
+Section: x11
+Installed-Size: 2504
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: all
+Source: libx11
+Version: 2:1.3.3-3
+Replaces: libx11-6 (<= 2:1.0.0-1)
+Filename: pool/main/libx/libx11/libx11-data_1.3.3-3_all.deb
+Size: 232336
+MD5Sum: 5f5b2da7a114ada3bb7310f2b40cce51
+Description: X11 client-side library
+
+Package: libxau6
+Priority: optional
+Section: libs
+Installed-Size: 64
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxau
+Version: 1:1.0.6-1
+Depends: libc6 (>= 2.1.3)
+Filename: pool/main/libx/libxau/libxau6_1.0.6-1_i386.deb
+Size: 16144
+MD5Sum: ad33495d6208f5dd07bee9cdb07b29d1
+Description: X11 authorisation library
+
+Package: libxcb-atom1
+Priority: extra
+Section: libs
+Installed-Size: 64
+Maintainer: Julien Danjou <acid@debian.org>
+Architecture: i386
+Source: xcb-util
+Version: 0.3.6-1
+Depends: libc6 (>= 2.1.3), libxcb1
+Filename: pool/main/x/xcb-util/libxcb-atom1_0.3.6-1_i386.deb
+Size: 9526
+MD5Sum: 79337f41329668bc137a7e4e2f273dd8
+Description: utility libraries for X C Binding -- atom
+
+Package: libxcb-aux0
+Priority: extra
+Section: libs
+Installed-Size: 64
+Maintainer: Julien Danjou <acid@debian.org>
+Architecture: i386
+Source: xcb-util
+Version: 0.3.6-1
+Depends: libc6 (>= 2.1.3), libxcb1
+Filename: pool/main/x/xcb-util/libxcb-aux0_0.3.6-1_i386.deb
+Size: 8472
+MD5Sum: 88d95e67be4ca3a7601db394241ab486
+Description: utility libraries for X C Binding -- aux
+
+Package: libxcb-event1
+Priority: extra
+Section: libs
+Installed-Size: 64
+Maintainer: Julien Danjou <acid@debian.org>
+Architecture: i386
+Source: xcb-util
+Version: 0.3.6-1
+Depends: libc6 (>= 2.1.3), libxcb1
+Filename: pool/main/x/xcb-util/libxcb-event1_0.3.6-1_i386.deb
+Size: 8514
+MD5Sum: 8dc0f269f8b0cea17f6207cce0964a51
+Description: utility libraries for X C Binding -- event
+
+Package: libxcb-render-util0
+Priority: extra
+Section: libs
+Installed-Size: 64
+Maintainer: Julien Danjou <acid@debian.org>
+Architecture: i386
+Source: xcb-util
+Version: 0.3.6-1
+Depends: libc6 (>= 2.1.3), libxcb-render0, libxcb1
+Filename: pool/main/x/xcb-util/libxcb-render-util0_0.3.6-1_i386.deb
+Size: 9334
+MD5Sum: 8f0afaba8747efba1ae99d995e03b7c5
+Description: utility libraries for X C Binding -- render-util
+
+Package: libxcb-render0
+Priority: optional
+Section: libs
+Installed-Size: 84
+Maintainer: XCB Developers <xcb@lists.freedesktop.org>
+Architecture: i386
+Source: libxcb
+Version: 1.6-1
+Depends: libc6 (>= 2.1.3), libxcb1 (>= 0)
+Filename: pool/main/libx/libxcb/libxcb-render0_1.6-1_i386.deb
+Size: 14916
+MD5Sum: 882950cf440b422d17fe5f784745c3fb
+Description: X C Binding, render extension
+
+Package: libxcb1
+Priority: optional
+Section: libs
+Installed-Size: 164
+Maintainer: XCB Developers <xcb@lists.freedesktop.org>
+Architecture: i386
+Source: libxcb
+Version: 1.6-1
+Depends: libc6 (>= 2.3.2), libxau6, libxdmcp6
+Breaks: libxcb-xlib0
+Filename: pool/main/libx/libxcb/libxcb1_1.6-1_i386.deb
+Size: 40500
+MD5Sum: 8b1bd1c23264932b7e2c639302366a06
+Description: X C Binding
+
+Package: libxcomposite1
+Priority: optional
+Section: libs
+Installed-Size: 64
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxcomposite
+Version: 1:0.4.2-1
+Depends: libc6 (>= 2.1.3), libx11-6, libxext6, libxfixes3 (>= 1:4.0.1)
+Filename: pool/main/libx/libxcomposite/libxcomposite1_0.4.2-1_i386.deb
+Size: 15116
+MD5Sum: 43b75f3d05d774ae791977cd20ce1624
+Description: X11 Composite extension library
+
+Package: libxcursor1
+Priority: optional
+Section: libs
+Installed-Size: 88
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxcursor
+Version: 1:1.1.10-2
+Depends: libc6 (>= 2.3), libx11-6 (>= 0), libxfixes3 (>= 1:4.0.1), libxrender1
+Filename: pool/main/libx/libxcursor/libxcursor1_1.1.10-2_i386.deb
+Size: 24942
+MD5Sum: 8aadf2988320b81f3422bddd68c97f1b
+Description: X cursor management library
+
+Package: libxdamage1
+Priority: optional
+Section: libs
+Installed-Size: 64
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxdamage
+Version: 1:1.1.3-1
+Depends: libc6 (>= 2.1.3), libx11-6, libxfixes3 (>= 1:4.0.1)
+Filename: pool/main/libx/libxdamage/libxdamage1_1.1.3-1_i386.deb
+Size: 13568
+MD5Sum: 7b5b7a9937adff801f15857d2e1c7bce
+Description: X11 damaged region extension library
+
+Package: libxdmcp6
+Priority: optional
+Section: libs
+Installed-Size: 76
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxdmcp
+Version: 1:1.0.3-2
+Depends: libc6 (>= 2.1.3)
+Filename: pool/main/libx/libxdmcp/libxdmcp6_1.0.3-2_i386.deb
+Size: 18426
+MD5Sum: cecbdad4e8a639735cf7e148681fb667
+Description: X11 Display Manager Control Protocol library
+
+Package: libxext6
+Priority: optional
+Section: libs
+Installed-Size: 132
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxext
+Version: 2:1.1.2-1
+Depends: libc6 (>= 2.1.3), libx11-6
+Filename: pool/main/libx/libxext/libxext6_1.1.2-1_i386.deb
+Size: 41694
+MD5Sum: 9c8bc9d73ed6ad2697df80f72edfd3c3
+Description: X11 miscellaneous extension library
+
+Package: libxfixes3
+Priority: optional
+Section: libs
+Installed-Size: 72
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxfixes
+Version: 1:4.0.5-1
+Depends: libc6 (>= 2.1.3), libx11-6
+Filename: pool/main/libx/libxfixes/libxfixes3_4.0.5-1_i386.deb
+Size: 17976
+MD5Sum: 8e0bf9a4ed5a0b6361085795e69ae248
+Description: X11 miscellaneous 'fixes' extension library
+
+Package: libxft2
+Priority: optional
+Section: libs
+Installed-Size: 140
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: xft
+Version: 2.1.14-2
+Depends: libc6 (>= 2.3), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.2.1), libx11-6 (>= 0), libxrender1
+Filename: pool/main/x/xft/libxft2_2.1.14-2_i386.deb
+Size: 52030
+MD5Sum: 23a966a6319e50b8b8b9857da75cae5b
+Description: FreeType-based font drawing library for X
+
+Package: libxi6
+Priority: optional
+Section: libs
+Installed-Size: 132
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxi
+Version: 2:1.3-4
+Depends: libc6 (>= 2.1.3), libx11-6 (>= 2:1.2.99.901), libxext6 (>= 0)
+Filename: pool/main/libx/libxi/libxi6_1.3-4_i386.deb
+Size: 53936
+MD5Sum: 83cac8ca145398686339817466e11ffd
+Description: X11 Input extension library
+
+Package: libxinerama1
+Priority: optional
+Section: libs
+Installed-Size: 64
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxinerama
+Version: 2:1.1-3
+Depends: libc6 (>= 2.1.3), libx11-6 (>= 0), libxext6 (>= 0)
+Filename: pool/main/libx/libxinerama/libxinerama1_1.1-3_i386.deb
+Size: 12186
+MD5Sum: 1fbe54b8d05b1096a4ea70cd50e1510b
+Description: X11 Xinerama extension library
+
+Package: libxml2
+Priority: standard
+Section: libs
+Installed-Size: 1588
+Maintainer: Debian XML/SGML Group <debian-xml-sgml-pkgs@lists.alioth.debian.org>
+Architecture: i386
+Version: 2.7.7.dfsg-4
+Depends: libc6 (>= 2.7), zlib1g (>= 1:1.2.3.3.dfsg)
+Recommends: xml-core
+Filename: pool/main/libx/libxml2/libxml2_2.7.7.dfsg-4_i386.deb
+Size: 826866
+MD5Sum: 7153d99951b5d33f66eaa20a657e033b
+Description: GNOME XML library
+
+Package: libxrandr2
+Priority: optional
+Section: libs
+Installed-Size: 92
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxrandr
+Version: 2:1.3.0-3
+Depends: libc6 (>= 2.1.3), libx11-6 (>= 0), libxext6 (>= 0), libxrender1
+Filename: pool/main/libx/libxrandr/libxrandr2_1.3.0-3_i386.deb
+Size: 26618
+MD5Sum: ccd579d696aad72be69bdf1be92541f4
+Description: X11 RandR extension library
+
+Package: libxrender1
+Priority: optional
+Section: libs
+Installed-Size: 92
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxrender
+Version: 1:0.9.6-1
+Depends: libc6 (>= 2.1.3), libx11-6
+Filename: pool/main/libx/libxrender/libxrender1_0.9.6-1_i386.deb
+Size: 29280
+MD5Sum: ef296f771209c82ed1245c67798b6081
+Description: X Rendering Extension client library
+
+Package: libxt6
+Priority: optional
+Section: libs
+Installed-Size: 452
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxt
+Version: 1:1.0.7-1
+Depends: libc6 (>= 2.7), libice6 (>= 1:1.0.0), libsm6, libx11-6 (>= 0)
+Filename: pool/main/libx/libxt/libxt6_1.0.7-1_i386.deb
+Size: 171518
+MD5Sum: aa8e8f0a7ee7b57c2d58786af72da142
+Description: X11 toolkit intrinsics library
+
+Package: lsb-base
+Priority: required
+Section: misc
+Installed-Size: 72
+Maintainer: Chris Lawrence <lawrencc@debian.org>
+Architecture: all
+Source: lsb
+Version: 3.2-23.1
+Replaces: lsb (<< 2.0-6), lsb-core (<< 2.0-6)
+Depends: sed, ncurses-bin
+Conflicts: lsb (<< 2.0-6), lsb-core (<< 2.0-6)
+Filename: pool/main/l/lsb/lsb-base_3.2-23.1_all.deb
+Size: 20462
+MD5Sum: 60637dd487aedfaa48e3a38bc1a0ea4c
+Description: Linux Standard Base 3.2 init script functionality
+
+Package: ncurses-bin
+Essential: yes
+Priority: required
+Section: utils
+Installed-Size: 500
+Maintainer: Craig Small <csmall@debian.org>
+Architecture: i386
+Source: ncurses
+Version: 5.7+20100313-2
+Pre-Depends: libc6 (>= 2.3), libncurses5 (>= 5.7+20100313)
+Filename: pool/main/n/ncurses/ncurses-bin_5.7+20100313-2_i386.deb
+Size: 314788
+MD5Sum: 408a001ec8f30f40e19caa35772c3e3b
+Description: terminal-related programs and man pages
+
+Package: passwd
+Priority: required
+Section: admin
+Installed-Size: 2208
+Maintainer: Shadow package maintainers <pkg-shadow-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: shadow
+Version: 1:4.1.4.2-1
+Replaces: manpages-tr (<< 1.0.5), manpages-zh (<< 1.5.1-1)
+Depends: libc6 (>= 2.3), libpam0g (>= 0.99.7.1), libselinux1 (>= 2.0.82), libpam-modules, debianutils (>= 2.15.2)
+Filename: pool/main/s/shadow/passwd_4.1.4.2-1_i386.deb
+Size: 975188
+MD5Sum: 2ae7b750afe852093fd38009f054b9f7
+Description: change and administer password and group data
+
+Package: perl-base
+Essential: yes
+Priority: required
+Section: perl
+Installed-Size: 4488
+Maintainer: Niko Tyni <ntyni@debian.org>
+Architecture: i386
+Source: perl
+Version: 5.10.1-14
+Replaces: libperl5.8 (<< 5.8.0-20), libscalar-list-utils-perl, libxsloader-perl, perl (<< 5.10.1-12), perl-modules (<< 5.10.1-1)
+Provides: libscalar-list-utils-perl, libxsloader-perl, perl5-base, perlapi-5.10.0, perlapi-5.10.1
+Pre-Depends: libc6 (>= 2.4), dpkg (>= 1.14.20)
+Suggests: perl
+Conflicts: autoconf2.13 (<< 2.13-45), libfile-spec-perl (<< 3.30), libscalar-list-utils-perl (<< 1:1.21), libxsloader-perl (<< 0.10), safe-rm (<< 0.8)
+Filename: pool/main/p/perl/perl-base_5.10.1-14_i386.deb
+Size: 985868
+MD5Sum: 4f62d14690a767e771baf2cffca803a5
+Description: minimal Perl system
+
+Package: perl-modules
+Priority: standard
+Section: perl
+Installed-Size: 15856
+Maintainer: Niko Tyni <ntyni@debian.org>
+Architecture: all
+Source: perl
+Version: 5.10.1-14
+Replaces: libansicolor-perl, libarchive-tar-perl, libattribute-handlers-perl, libautodie-perl, libcgi-pm-perl, libclass-isa-perl, libcpanplus-perl, libextutils-cbuilder-perl, libextutils-parsexs-perl, libfile-spec-perl, libfile-temp-perl, libi18n-langtags-perl, libio-zlib-perl, liblocale-codes-perl, liblocale-maketext-perl, liblocale-maketext-simple-perl, libmath-bigint-perl, libmodule-build-perl, libmodule-corelist-perl, libmodule-load-conditional-perl, libmodule-load-perl, libmodule-pluggable-perl, libnet-perl, libnet-ping-perl, libparams-check-perl, libparent-perl, libparse-cpan-meta-perl, libpod-escapes-perl, libpod-parser-perl, libpod-plainer-perl, libpod-simple-perl, libswitch-perl, libtest-harness-perl, libtest-simple-perl, libthread-queue-perl, libtime-local-perl, libversion-perl, podlators-perl
+Provides: libansicolor-perl, libarchive-tar-perl, libattribute-handlers-perl, libautodie-perl, libcgi-pm-perl, libclass-isa-perl, libcpanplus-perl, libextutils-cbuilder-perl, libextutils-parsexs-perl, libfile-spec-perl, libfile-temp-perl, libi18n-langtags-perl, libio-zlib-perl, liblocale-codes-perl, liblocale-maketext-perl, liblocale-maketext-simple-perl, libmath-bigint-perl, libmodule-build-perl, libmodule-corelist-perl, libmodule-load-conditional-perl, libmodule-load-perl, libmodule-pluggable-perl, libnet-perl, libnet-ping-perl, libparams-check-perl, libparent-perl, libparse-cpan-meta-perl, libpod-escapes-perl, libpod-parser-perl, libpod-plainer-perl, libpod-simple-perl, libswitch-perl, libtest-harness-perl, libtest-simple-perl, libthread-queue-perl, libtime-local-perl, libversion-perl, podlators-perl
+Depends: perl (>= 5.10.1-1)
+Conflicts: libansicolor-perl (<< 1.10-1), libarchive-tar-perl (<< 1.52), libattribute-handlers-perl (<< 0.85), libautodie-perl (<< 2.06.01), libcgi-pm-perl (<< 3.43), libclass-isa-perl (<< 0.33), libcpanplus-perl (<< 0.88), libextutils-cbuilder-perl (<< 0.2602), libextutils-parsexs-perl (<< 2.2002), libfile-spec-perl (<< 3.30), libfile-temp-perl (<< 0.22), libi18n-langtags-perl (<< 0.35-1), libio-zlib-perl (<< 1.09), liblocale-codes-perl (<< 2.07), liblocale-maketext-perl (<< 1.13), liblocale-maketext-simple-perl (<< 0.18-1), libmath-bigint-perl (<< 1.89), libmodule-build-perl (<< 0.340201), libmodule-corelist-perl (<< 2.18), libmodule-load-conditional-perl (<< 0.30), libmodule-load-perl (<< 0.16), libmodule-pluggable-perl (<< 3.9), libnet-perl (<= 1:1.22), libnet-ping-perl (<< 2.36), libparams-check-perl (<< 0.26-1), libparent-perl (<< 0.221), libparse-cpan-meta-perl (<< 1.39), libpod-escapes-perl (<< 1.04), libpod-parser-perl (<< 1.37), libpod-plainer-perl (<< 0.01), libpod-simple-perl (<< 3.07), libswitch-perl (<< 2.14), libtest-harness-perl (<< 3.17), libtest-simple-perl (<< 0.92), libthread-queue-perl (<< 2.11), libtime-local-perl (<< 1.1901), libversion-perl (<< 1:0.7700), podlators-perl (<= 2.2.2-1)
+Filename: pool/main/p/perl/perl-modules_5.10.1-14_all.deb
+Size: 3481026
+MD5Sum: c502e5cc355cd19e5d264ae74f3595e2
+Description: Core Perl modules
+Build-Essential: yes
+
+Package: perl
+Priority: standard
+Section: perl
+Installed-Size: 13168
+Maintainer: Niko Tyni <ntyni@debian.org>
+Architecture: i386
+Version: 5.10.1-14
+Replaces: libarchive-tar-perl (<= 1.38-2), libcompress-raw-bzip2-perl, libcompress-raw-zlib-perl, libcompress-zlib-perl, libdigest-md5-perl, libdigest-sha-perl, libio-compress-base-perl, libio-compress-bzip2-perl, libio-compress-perl, libio-compress-zlib-perl, libmime-base64-perl, libmodule-corelist-perl (<< 2.14-2), libstorable-perl, libsys-syslog-perl, libthreads-perl, libthreads-shared-perl, libtime-hires-perl, libtime-piece-perl, perl-base (<< 5.10.1-12), perl-doc (<< 5.8.0-1), perl-modules (<< 5.8.1-1)
+Provides: data-dumper, libcompress-raw-bzip2-perl, libcompress-raw-zlib-perl, libcompress-zlib-perl, libdigest-md5-perl, libdigest-sha-perl, libio-compress-base-perl, libio-compress-bzip2-perl, libio-compress-perl, libio-compress-zlib-perl, libmime-base64-perl, libstorable-perl, libsys-syslog-perl, libthreads-perl, libthreads-shared-perl, libtime-hires-perl, libtime-piece-perl, perl5
+Depends: perl-base (= 5.10.1-14), perl-modules (>= 5.10.1-14), libbz2-1.0, libc6 (>= 2.4), libdb4.7, libgdbm3 (>= 1.8.3), zlib1g (>= 1:1.2.3.3.dfsg)
+Recommends: netbase, make
+Suggests: perl-doc, libterm-readline-gnu-perl | libterm-readline-perl-perl
+Conflicts: libcompress-raw-bzip2-perl (<< 2.020), libcompress-raw-zlib-perl (<< 2.020), libcompress-zlib-perl (<< 2.020), libdigest-md5-perl (<< 2.39), libdigest-sha-perl (<< 5.47), libio-compress-base-perl (<< 2.020), libio-compress-bzip2-perl (<< 2.020), libio-compress-perl (<< 2.020), libio-compress-zlib-perl (<< 2.020), libmime-base64-perl (<< 3.08), libstorable-perl (<< 2.20), libsys-syslog-perl (<< 0.27), libthreads-perl (<< 1.72), libthreads-shared-perl (<< 1.29), libtime-hires-perl (<< 1.9719), libtime-piece-perl (<< 1.15), perl-doc (<< 5.10.1-1)
+Filename: pool/main/p/perl/perl_5.10.1-14_i386.deb
+Size: 3767054
+MD5Sum: c402cd511260c137a795afaeb6125876
+Description: Larry Wall's Practical Extraction and Report Language
+Build-Essential: yes
+
+Package: readline-common
+Priority: important
+Section: utils
+Installed-Size: 92
+Maintainer: Matthias Klose <doko@debian.org>
+Architecture: all
+Source: readline6
+Version: 6.1-3
+Replaces: libreadline-common, libreadline4 (<< 4.3-16), libreadline5 (<< 5.0-11)
+Depends: dpkg (>= 1.15.4) | install-info
+Conflicts: libreadline-common, libreadline5 (<< 5.0-11)
+Filename: pool/main/r/readline6/readline-common_6.1-3_all.deb
+Size: 54028
+MD5Sum: 1ddfb1a719db7f302abe921e261b0288
+Description: GNU readline and history libraries, common files
+
+Package: sed
+Essential: yes
+Priority: required
+Section: utils
+Installed-Size: 956
+Maintainer: Clint Adams <schizo@debian.org>
+Architecture: i386
+Version: 4.2.1-7
+Depends: dpkg (>= 1.15.4) | install-info
+Pre-Depends: libc6 (>= 2.3), libselinux1 (>= 1.32)
+Filename: pool/main/s/sed/sed_4.2.1-7_i386.deb
+Size: 245832
+MD5Sum: 76a28a89a0684b09abd4c9622f9b0b5f
+Description: The GNU sed stream editor
+
+Package: sensible-utils
+Priority: required
+Section: utils
+Installed-Size: 112
+Maintainer: Clint Adams <schizo@debian.org>
+Architecture: all
+Version: 0.0.4
+Replaces: debianutils (<= 2.32.3), manpages-pl (<= 20060617-3~)
+Filename: pool/main/s/sensible-utils/sensible-utils_0.0.4_all.deb
+Size: 5408
+MD5Sum: 6e1c38bc8506fb23d949a4df7e07d5e2
+Description: Utilities for sensible alternative selection
+
+Package: shared-mime-info
+Priority: optional
+Section: misc
+Installed-Size: 3348
+Maintainer: Filip Van Raemdonck <mechanix@debian.org>
+Architecture: i386
+Version: 0.71-3
+Depends: libc6 (>= 2.3), libglib2.0-0 (>= 2.24.0), libxml2 (>= 2.7.4)
+Conflicts: libglib2.0-0 (<< 2.17.2), libgnomevfs2-0 (<< 1:2.24.0), tracker (<< 0.6.90)
+Filename: pool/main/s/shared-mime-info/shared-mime-info_0.71-3_i386.deb
+Size: 842486
+MD5Sum: 783a1538ac9561e082a8dc67f29df778
+Description: FreeDesktop.org shared MIME database and spec
+
+Package: ttf-dejavu-core
+Priority: optional
+Section: fonts
+Installed-Size: 2592
+Maintainer: Debian Fonts Task Force <pkg-fonts-devel@lists.alioth.debian.org>
+Architecture: all
+Source: ttf-dejavu
+Version: 2.31-1
+Replaces: ttf-dejavu (<< 2.20-1)
+Conflicts: ttf-dejavu (<< 2.20-1)
+Filename: pool/main/t/ttf-dejavu/ttf-dejavu-core_2.31-1_all.deb
+Size: 1451418
+MD5Sum: d3d8850ec0ef68d9b7655545ce0b2b22
+Description: Vera font family derivative with additional characters
+
+Package: ucf
+Priority: standard
+Section: utils
+Installed-Size: 260
+Maintainer: Manoj Srivastava <srivasta@debian.org>
+Architecture: all
+Version: 3.0025
+Depends: debconf (>= 1.5.19), coreutils (>= 5.91)
+Filename: pool/main/u/ucf/ucf_3.0025_all.deb
+Size: 65960
+MD5Sum: 6e664d04fea09239d450ae9f3d246a0f
+Description: Update Configuration File: preserve user changes to config files.
+
+Package: whiptail
+Priority: important
+Section: utils
+Installed-Size: 100
+Maintainer: Alastair McKinstry <mckinstry@debian.org>
+Architecture: i386
+Source: newt
+Version: 0.52.11-1
+Replaces: newt0.10, newt0.21 (<< 0.21-4), whiptail-utf8
+Provides: whiptail-provider, whiptail-utf8
+Depends: libc6 (>= 2.1), libnewt0.52 (>= 0.52.11), libpopt0 (>= 1.16), libslang2 (>= 2.0.7-1)
+Conflicts: whiptail-provider
+Filename: pool/main/n/newt/whiptail_0.52.11-1_i386.deb
+Size: 39118
+MD5Sum: cac6b0f08d25c91011d5c267e35cb0d2
+Description: Displays user-friendly dialog boxes from shell scripts
+
+Package: x11-common
+Priority: optional
+Section: x11
+Installed-Size: 568
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: all
+Source: xorg
+Version: 1:7.5+6
+Replaces: x-common, xfree86-common, xorg-common, xserver-common (<< 7)
+Depends: debconf (>= 0.5) | debconf-2.0, debianutils (>= 1.13), lsb-base (>= 1.3-9ubuntu2)
+Pre-Depends: debconf | debconf-2.0
+Conflicts: aee (<= 2.2.15b-1), ascd (<= 0.13.2-3), beaver (<= 0.2.5-2), bibview (<= 2.2-8), bugsx (<= 1.08-8), buici-clock (<= 0.4.5+b1), communicator-smotif-477, ctwm (<= 3.7-2), emelfm (<= 0.9.2-7), epan, fte-xwindow (<= 0.50.0-1.3), fvwm1 (<= 1.24r-46), fvwm95 (<= 2.0.43ba-23+b1), gerstensaft (<= 0.2-5.1), ghostview, gipsc (<= 0.4.3-2), grace (<= 1:5.1.18-1), grace6 (<= 5.99.0+final-4), gradio (<= 1.0.1-6), groff (<= 1.18.1.1-7), guitar (<= 0.1.4-11), hamsoft (<< 0.2.3-1), hanterm-classic (<= 3.1.6.0-4), hanterm-xf (<= 1:3.3.1p18-9.2), hfsutils-tcltk (<= 3.2.6-7), ibp (<= 0.21-4), isdnutils-xtools (<= 1:3.8.2005-12-06-4), ivtools-bin (<= 1.1.3-5), ivtools-dev (<= 1.1.3-5), kdrill (<= 6.4-2.1), kinput2-canna (<= 3.1-7), kinput2-canna-wnn (<= 3.1-7), kinput2-wnn (<= 3.1-7), kterm (<= 6.2.0-45), lbxproxy (<< 7.0), libmotif-dev (<= 2.2.3-1.3), libxft-dev (<= 2.1.8.2-5), lm-batmon (<= 0.96-3), login.app (<= 1.2.1-18), lsb-core (<= 3.1-4), lwm (<= 1.2.1-1), mctools-lite (<= 970129-16), mgp (<= 1.11b-6), motif-clients (<= 2.2.3-1.3), navigator-smotif-477, netscape-base-4, olvwm (<= 4.4.3.2p1.4-21), olwm (<= 3.2p1.4-21), oneko (<= 1.2.sakura.6-1), opera (<< 9.10-20060616), pgaccess (<= 1:0.98.8.20030520-2), phototk, pixmap (<= 2.6pl4-14.1), plotmtv (<= 1.4.4t-8.1), pmud (<= 0.10-9), ppxp (<= 0.2001080415-14), ppxp-x11 (<= 0.2001080415-14), procmeter (<= 2.5.1-11), propsel (<= 971130-5.3), proxymngr (<< 7.0), qcam (<= 0.91-11.1), regexplorer (<= 0.1.6-12), seyon (<= 2.20c-20), skkinput (<= 1:2.06.4-4), stella (<< 2.2-1), tkdesk (<= 2.0-5), tkseti (<= 3.06-1), tkworld, twlog (<= 1.3-4), twm (<< 7.0), ucbmpeg-play (<< 2.3p-13), vide (<= 1.21-3), videogen (<= 0.32-1), vtwm (<= 5.4.7-2), w9wm (<= 0.4.2-4), wdm (<= 1.28-1), wily (<= 0.13.41-6), wmavgload (<= 0.7.0-6.1), wmcpu (<= 1.3-4.1), wmdate (<= 0.5-7.1), wmnet (<= 1.05-12), wmnetselect (<= 0.85-5.5), wmscope (<= 3.0-9.1), wmsensors (<= 1.0.4-3.4), wmtv (<= 0.6.5-15), x-common, xautolock (<= 1:2.1-6), xbanner (<= 1.31-23), xbase-clients (<< 1:7.0), xbatt (<= 1.2.1-4), xbattbar (<= 1.4.2-3.1), xcal (<= 4.1-18.2), xcalendar-i18n (<= 4.0.0.i18p1-13.1), xcb (<= 2.4-4), xclip (<= 0.08-5), xclips (<= 6.21-6), xcolors (<= 1.5a-2), xcolorsel (<= 1.1a-11), xdkcal (<= 0.9d-2.1), xdm (<= 1:1.0.1-6), xdmx (<< 1:1.0), xdu (<= 3.0-14), xearth (<= 1.1-10.2), xengine (<= 1.11-9), xephem (<= 3.4-5), xext, xezmlm (<= 1.0.3-11), xfaces (<= 3.3-25), xfishtank (<= 2.2-23.1), xfm (<= 1.4.3-8), xfractint (<< 20.3.01-1), xfree86-common, xfs (<< 1:1.0), xfs-xtt (<= 1:1.4.1.xf430-6), xftp, xfwp (<< 7.0), xgdipc (<= 1.2-0.3), xgmod (<= 3.1-9), xgobi, xgraph (<= 12.1-3), xinput (<= 1.2-5.2), xipmsg (<= 0.8088-1.1), xisp, xlbiff (<< 4.1-4), xli (<= 1.17.0-21), xlockmore (<= 1:5.21-1), xlockmore-gl (<= 1:5.21-1), xlogmaster (<= 1.6.0-8), xmailbox (<= 2.5-9), xmem (<= 1.20-19), xmeter (<= 1.15-6), xmh (<= 6.8.2.dfsg.1-4), xmix (<= 2.1-5), xmon (<= 1.5.6-1.3), xnecview (<= 1.34-2), xnest (<< 1:1.0), xodo (<= 1.2-9.2), xorg-common, xpaste, xpmumon (<= 1.3.0), xpostit (<= 3.3.1-8.2), xpostitplus, xprint (<= 1:0.1.0.alpha1-13), xrn (<= 9.02-7.1), xserver-common (<< 7), xserver-xfree86 (<< 1:7.0), xserver-xfree86-dbg, xserver-xorg (<< 1:7.4~), xslideshow (<= 3.1-8.1), xsysinfo (<= 1.7-2), xtel (<= 3.3.0-5.4), xterm (<< 208-1), xtoolwait (<= 1.3-6), xtrkcad (<= 3.1.4-1), xtrlock (<= 2.0-11), xturqstat (<= 2.2.2sarge1), xutils (<< 1:7.0), xv (<= 3.10a-26), xvfb (<< 1:1.0), xview-clients (<= 3.2p1.4-21), xviewg (<= 3.2p1.4-21), xviewg-dev (<= 3.2p1.4-21), xvkbd (<= 2.6-2.1), xwit (<= 3.4-6), xxkb (<= 1.10-2.1), xzoom (<= 0.3-17), yank (<= 0.2.1-7.2)
+Breaks: gdm (<< 2.20.7-5)
+Filename: pool/main/x/xorg/x11-common_7.5+6_all.deb
+Size: 280238
+MD5Sum: 312093359c4f0f7decfb049768d6bb12
+Description: X Window System (X.Org) infrastructure
+
+Package: xulrunner-1.9.1
+Priority: optional
+Section: libs
+Installed-Size: 19060
+Maintainer: Maintainers of Mozilla-related packages <pkg-mozilla-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: xulrunner
+Version: 1.9.1.11-1
+Replaces: xulrunner-1.9.1-gnome-support
+Depends: libasound2 (>> 1.0.18), libatk1.0-0 (>= 1.29.3), libbz2-1.0, libc6 (>= 2.3.6-6~), libcairo2 (>= 1.8.8), libdbus-1-3 (>= 1.0.2), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libglib2.0-0 (>= 2.24.0), libgtk2.0-0 (>= 2.18.0), libhunspell-1.2-0 (>= 1.2.11), libjpeg62 (>= 6b1), libmozjs2d (= 1.9.1.11-1), libnspr4-0d (>> 4.7.1-1), libnss3-1d (>= 3.12.6), libpango1.0-0 (>= 1.14.0), libpng12-0 (>= 1.2.13-4), libreadline6 (>= 6.0), libsqlite3-0 (>= 3.6.23.1), libstartup-notification0 (>= 0.10), libstdc++6 (>= 4.1.1), libx11-6, libxrender1, libxt6, zlib1g (>= 1:1.1.4)
+Suggests: libdbus-glib-1-2 (>= 0.78), libgconf2-4 (>= 2.27.0), libgnome2-0 (>= 2.17.3), libgnomevfs2-0 (>= 1:2.17.90), libgnomeui-0, libcanberra0
+Conflicts: j2re1.4, pango-graphite (<< 0.9.3), xulrunner-1.9.1-gnome-support
+Breaks: iceweasel (<< 3.5.5-1)
+Filename: pool/main/x/xulrunner/xulrunner-1.9.1_1.9.1.11-1_i386.deb
+Size: 7230878
+MD5Sum: d2b3c7b52aee7284290136e2c844ed7b
+Description: XUL + XPCOM application runner
+
+Package: xz-utils
+Priority: required
+Section: utils
+Installed-Size: 364
+Maintainer: Jonathan Nieder <jrnieder@gmail.com>
+Architecture: i386
+Version: 4.999.9beta+20100713-1
+Replaces: xz-lzma (<< 4.999.9beta+20091004-1)
+Depends: libc6 (>= 2.6), liblzma2 (>= 4.999.9beta+20100602)
+Suggests: xz-lzma
+Breaks: xz-lzma (<< 4.999.9beta+20091004-1)
+Filename: pool/main/x/xz-utils/xz-utils_4.999.9beta+20100713-1_i386.deb
+Size: 174098
+MD5Sum: a2a576f97035c84b78e7f269656cab86
+Description: XZ-format compression utilities
+
+Package: zlib1g
+Priority: required
+Section: libs
+Installed-Size: 160
+Maintainer: Mark Brown <broonie@debian.org>
+Architecture: i386
+Source: zlib
+Version: 1:1.2.3.4.dfsg-3
+Provides: libz1
+Depends: libc6 (>= 2.1.3)
+Conflicts: zlib1 (<= 1:1.0.4-7)
+Filename: pool/main/z/zlib/zlib1g_1.2.3.4.dfsg-3_i386.deb
+Size: 75952
+MD5Sum: 37246cd4fe5d4cb0f7c03ce3082164a3
+Description: compression library - runtime
+
diff --git a/test/integration/Packages-bug-593360-modifiers-in-names b/test/integration/Packages-bug-593360-modifiers-in-names
new file mode 100644
index 0000000..d2ac8d4
--- /dev/null
+++ b/test/integration/Packages-bug-593360-modifiers-in-names
@@ -0,0 +1,42 @@
+Package: g++
+Priority: optional
+Section: devel
+Installed-Size: 40
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-defaults (1.96)
+Version: 4:4.4.5-1
+Filename: pool/main/g/gcc-defaults/g++_4.4.5-1_i386.deb
+Size: 1372
+MD5sum: 37e129a4b130e8b96a9b9d5b26a3fffa
+SHA1: d98768d1547389a563e60433268143f42578c3e6
+SHA256: 18d933972392d233127bdd766cfcaaaa2e35f57de47c7af678d599be9613d562
+Description: The GNU C++ compiler
+
+Package: apt
+Priority: important
+Section: admin
+Installed-Size: 5984
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: all
+Version: 0.8.8
+Filename: pool/main/a/apt/apt_0.8.8_i386.deb
+Size: 2140632
+MD5sum: 4283aa3bb751253faf1b2204e0229e4f
+SHA1: 59d432f56901faa86e814a436b8da010ee1c7b8a
+SHA256: 072dcf4359dce9698aeaa54366eb20513f860c2bb6d44a95973c0b2ad413bfab
+Description: Advanced front-end for dpkg
+
+Package: apt+
+Priority: important
+Section: admin
+Installed-Size: 5984
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: all
+Version: 0.8.8
+Filename: pool/main/a/apt/apt_0.8.8_i386.deb
+Size: 2140632
+MD5sum: 4283aa3bb751253faf1b2204e0229e4f
+SHA1: 59d432f56901faa86e814a436b8da010ee1c7b8a
+SHA256: 072dcf4359dce9698aeaa54366eb20513f860c2bb6d44a95973c0b2ad413bfab
+Description: Advanced front-end for dpkg
diff --git a/test/integration/Packages-bug-598669-install-postfix-gets-exim-heavy b/test/integration/Packages-bug-598669-install-postfix-gets-exim-heavy
new file mode 100644
index 0000000..a249d6e
--- /dev/null
+++ b/test/integration/Packages-bug-598669-install-postfix-gets-exim-heavy
@@ -0,0 +1,30 @@
+Package: exim4-daemon-heavy
+Priority: optional
+Section: mail
+Installed-Size: 1060
+Maintainer: Exim4 Maintainers <pkg-exim4-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: exim4
+Version: 4.72-1
+Replaces: mail-transport-agent
+Provides: mail-transport-agent
+Conflicts: mail-transport-agent
+Filename: pool/main/e/exim4/exim4-daemon-heavy_4.72-1_i386.deb
+Size: 508988
+MD5sum: 7adf3b0ef8f134e70d19ee216e6f4452
+Description: Exim MTA (v4) daemon with extended features, including exiscan-acl
+
+Package: postfix
+Priority: extra
+Section: mail
+Installed-Size: 3196
+Maintainer: LaMont Jones <lamont@debian.org>
+Architecture: i386
+Version: 2.7.1-1
+Replaces: mail-transport-agent
+Provides: mail-transport-agent
+Conflicts: mail-transport-agent
+Filename: pool/main/p/postfix/postfix_2.7.1-1_i386.deb
+Size: 1325662
+MD5sum: 1ef63b6a62b4be120a9cdc312b81a698
+Description: High-performance mail transport agent
diff --git a/test/integration/Packages-bug-605394-versioned-or-groups b/test/integration/Packages-bug-605394-versioned-or-groups
new file mode 100644
index 0000000..6032736
--- /dev/null
+++ b/test/integration/Packages-bug-605394-versioned-or-groups
@@ -0,0 +1,71 @@
+Package: apache2-mpm-prefork
+Priority: optional
+Section: httpd
+Installed-Size: 68
+Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
+Architecture: i386
+Source: apache2
+Version: 2.2.16-4
+Provides: apache2-mpm
+Conflicts: apache2-mpm
+Filename: pool/main/a/apache2/apache2-mpm-prefork_2.2.16-4_i386.deb
+Size: 2276
+MD5Sum: c0db3e637052e59dbdb2fa08f4cdcea4
+Description: Apache HTTP Server - traditional non-threaded model
+Task: web-server
+
+Package: apache2-mpm-worker
+Priority: optional
+Section: httpd
+Installed-Size: 68
+Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
+Architecture: i386
+Source: apache2
+Version: 2.2.16-4
+Provides: apache2-mpm
+Conflicts: apache2-mpm
+Filename: pool/main/a/apache2/apache2-mpm-worker_2.2.16-4_i386.deb
+Size: 2220
+MD5Sum: 71bccda875aa0afac700410b951370ba
+Description: Apache HTTP Server - high speed threaded model
+
+Package: libapache2-mod-php5
+Priority: optional
+Section: httpd
+Installed-Size: 7588
+Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
+Architecture: i386
+Source: php5
+Version: 5.3.3-4
+Depends: apache2-mpm-prefork (>> 2.0.52)
+Filename: pool/main/p/php5/libapache2-mod-php5_5.3.3-4_i386.deb
+Size: 2886980
+MD5Sum: b41ec4b98aa08966288570e07cd864ab
+Description: server-side, HTML-embedded scripting language (Apache 2 module)
+Task: web-server
+
+Package: php5-cgi
+Priority: optional
+Section: php
+Installed-Size: 14672
+Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
+Architecture: i386
+Source: php5
+Version: 5.3.3-4
+Filename: pool/main/p/php5/php5-cgi_5.3.3-4_i386.deb
+Size: 5713726
+MD5Sum: 9e579982032c7bb98508e16e314f45e9
+Description: server-side, HTML-embedded scripting language (CGI binary)
+
+Package: php5
+Priority: optional
+Section: php
+Installed-Size: 20
+Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
+Architecture: all
+Version: 5.3.3-4
+Depends: libapache2-mod-php5 (>= 5.3.3-4) | php5-cgi (>= 5.3.3-4)
+Filename: pool/main/p/php5/php5_5.3.3-4_all.deb
+Size: 1050
+MD5Sum: cbedd95ed5b868ba1ffd10747abc0ee3
+Description: server-side, HTML-embedded scripting language (metapackage)
diff --git a/test/integration/Packages-bug-723705-tagfile-truncates-fields b/test/integration/Packages-bug-723705-tagfile-truncates-fields
new file mode 100644
index 0000000..c42b850
--- /dev/null
+++ b/test/integration/Packages-bug-723705-tagfile-truncates-fields
@@ -0,0 +1,167 @@
+Package: cdebconf-gtk-udeb
+Source: cdebconf
+Version: 0.185
+Installed-Size: 92
+Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+Architecture: amd64
+Description: Gtk+ frontend for Debian Configuration Management System
+Description-md5: 75d036e0a245499123544e2254b92e9c
+Section: debian-installer
+Priority: optional
+Filename: pool/main/c/cdebconf/cdebconf-gtk-udeb_0.185_amd64.udeb
+Size: 27278
+MD5sum: a1bbbc1d4fb8e0615b5621abac021924
+SHA1: b1a7ab55a90f61e5337847d02ff1d12d73559def
+SHA256: cd79f3205304a7932b3309c4df9898c9a53929bc651912659858e087ebe1c18a
+
+Package: cdebconf-newt-udeb
+Source: cdebconf
+Version: 0.185
+Installed-Size: 58
+Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+Architecture: amd64
+Description: Newt frontend for Debian Configuration Management System
+Description-md5: e080be5e38cb8c57bca2f3effe9ee030
+Section: debian-installer
+Priority: optional
+Filename: pool/main/c/cdebconf/cdebconf-newt-udeb_0.185_amd64.udeb
+Size: 19192
+MD5sum: de27807f56dae2f2403b3322d5fe6bd2
+SHA1: 57883e223d46a9f25966f9b986e6a3bc2f67d8ef
+SHA256: 5f8b9c3a5430f2ec879484a7736582b152d76cc8ba9bc19328268f3635759a1b
+
+Package: cdebconf-udeb
+Source: cdebconf
+Version: 0.185
+Installed-Size: 245
+Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+Architecture: amd64
+Provides: debconf-2.0
+Description: Debian Configuration Management System (C-implementation)
+Description-md5: 9f3579e9d9f86ac89e667a8707d3cbd3
+Section: debian-installer
+Priority: standard
+Filename: pool/main/c/cdebconf/cdebconf-udeb_0.185_amd64.udeb
+Size: 77376
+MD5sum: e3883706fdbf54c2e5ea959c92b2d37f
+SHA1: 0232f1bdf1531db628516ed3a46a27466b267fdc
+SHA256: 96345575417a3e4df8a2cadaa55784ec8f6c042defb1e2fc002d941b6116ceab
+
+Package: cdebconf-gtk-terminal
+Source: cdebconf-terminal
+Version: 0.22
+Installed-Size: 64
+Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+Architecture: amd64
+Provides: cdebconf-terminal
+Depends: cdebconf-gtk-udeb, libc6-udeb (>= 2.17), libglib2.0-udeb (>= 2.36.4), libgtk2.0-0-udeb (>= 2.24.0), libvte9-udeb (>= 1:0.28.0), cdebconf-udeb, cdebconf-gtk-terminal, cdebconf-gtk-terminal, cdebconf-gtk-terminal, cdebconf-gtk-terminal, cdebconf-gtk-terminal, cdebconf-gtk-terminal, cdebconf-gtk-terminal
+Description: cdebconf gtk plugin displaying a terminal
+Description-md5: 18c4446758aec003eb8cd0a43419f1aa
+Section: debian-installer
+Priority: extra
+Filename: pool/main/c/cdebconf-terminal/cdebconf-gtk-terminal_0.22_amd64.udeb
+Size: 14734
+MD5sum: f9c3a7354560cb88e0396e2b7ba54363
+SHA1: 9c1c93328e758bfd9de2752466b271aaf38c8177
+SHA256: ca749853fc3b93db1d08ccdc6b46de27633de52bc5b880fa65275897ebcaaf69
+
+Package: cdebconf-newt-terminal
+Source: cdebconf-terminal
+Version: 0.22
+Installed-Size: 43
+Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+Architecture: amd64
+Provides: cdebconf-terminal
+Depends: cdebconf-newt-udeb (>= 0.146), libc6-udeb (>= 2.17), libnewt0.52
+Description: cdebconf newt plugin to provide a clean terminal
+Description-md5: 4109a053022081b573d864d84d6eb16d
+Section: debian-installer
+Priority: extra
+Filename: pool/main/c/cdebconf-terminal/cdebconf-newt-terminal_0.22_amd64.udeb
+Size: 4538
+MD5sum: 20db6152fce5081fcbf49c7c08f21246
+SHA1: fa2a40f777a2f48b9634866bc780fb059e60b2fe
+SHA256: c4d99ef27285f0c9090005313165627e56e0972e687af7e68c2b1d1538e2ae09
+
+Package: libc6-udeb
+Source: eglibc (2.17-92)
+Version: 2.17-92+b1
+Installed-Size: 3126
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: amd64
+Provides: glibc-2.17-1, libc-udeb, libc6
+Description: Embedded GNU C Library: Shared libraries - udeb
+Description-md5: 9552ce73b7b3fb466e3d89fe8db9a563
+Section: debian-installer
+Priority: extra
+Filename: pool/main/e/eglibc/libc6-udeb_2.17-92+b1_amd64.udeb
+Size: 1056000
+MD5sum: 7fd7032eeeecf7f76eff79a0543fbd72
+SHA1: 724b6a81b8fbc9d4d2bb43d656c08de73f7ada25
+SHA256: 137d4c001bbfde8161315c36e6cb8653ae2c50a8d6b6d2d27396c492d91a1723
+
+Package: libglib2.0-udeb
+Source: glib2.0
+Version: 2.36.4-1
+Installed-Size: 10070
+Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
+Architecture: amd64
+Description: GLib library of C routines - minimal runtime
+Description-md5: 0244040042870a89aa49f037cce3f1e9
+Section: debian-installer
+Priority: optional
+Filename: pool/main/g/glib2.0/libglib2.0-udeb_2.36.4-1_amd64.udeb
+Size: 1714604
+MD5sum: 72da029f1bbb36057d874f1f82a5d00a
+SHA1: 32bce78a052ef19a620f43ecbe12404fa570c0f1
+SHA256: 8edbc7cb872c0a82705913563f93f9eec5750881e4378c5a48770cde840cd6eb
+
+Package: libgtk2.0-0-udeb
+Source: gtk+2.0
+Version: 2.24.20-1
+Installed-Size: 5035
+Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
+Architecture: amd64
+Provides: gtk2.0-binver-2.10.0
+Description: GTK+ graphical user interface library - minimal runtime
+Description-md5: 32e5112b80c02578837cff4f65dfec84
+Section: debian-installer
+Priority: extra
+Filename: pool/main/g/gtk+2.0/libgtk2.0-0-udeb_2.24.20-1_amd64.udeb
+Size: 1643046
+MD5sum: 25513478eb2e02e5766c0eea0b411ca9
+SHA1: 9274f05bfa930a3406403441ce061bade04e2064
+SHA256: d5f611f48928ae02f759105cf8cff467cde1cb44df56ad31067168b46a80f8bc
+
+Package: libvte9-udeb
+Source: vte
+Version: 1:0.28.2-5
+Installed-Size: 628
+Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
+Architecture: amd64
+Description: Terminal emulator widget for GTK+ 2.0 - minimal runtime
+Description-md5: e7993385c30bae6e96c8cb87795a513c
+Section: debian-installer
+Priority: extra
+Filename: pool/main/v/vte/libvte9-udeb_0.28.2-5_amd64.udeb
+Size: 216968
+MD5sum: 7da7201effaf5ced19abd9d0b45aa2c6
+SHA1: a424cf779e7614d79740c422b6342de04fed3646
+SHA256: 4963033cbda5a8ba7eb8ebf1debae34463b8e63b821259860cfb51c1ab99562d
+
+Package: zlib1g-udeb
+Source: zlib
+Version: 1:1.2.8.dfsg-1
+Installed-Size: 115
+Maintainer: Mark Brown <broonie@debian.org>
+Architecture: amd64
+Description: compression library - runtime for Debian installer
+Description-md5: 9cab974e3eab657c53bc17611b894c7a
+Section: debian-installer
+Priority: optional
+Filename: pool/main/z/zlib/zlib1g-udeb_1.2.8.dfsg-1_amd64.udeb
+Size: 45270
+MD5sum: c02884420f79a3ae4569cf67782f3e74
+SHA1: 7cd1a7c8be4e086de733a0ce76f87d42b8b2173b
+SHA256: 61641ee2b5e185232108333438b72bec71ef549fe0e0df1b2b3afa37174e53a7
+
diff --git a/test/integration/Packages-bug-lp1347721-dpkg-ordering b/test/integration/Packages-bug-lp1347721-dpkg-ordering
new file mode 100644
index 0000000..ea96b38
--- /dev/null
+++ b/test/integration/Packages-bug-lp1347721-dpkg-ordering
@@ -0,0 +1,445 @@
+Package: init
+xEssential: yes
+Priority: required
+Section: metapackages
+Installed-Size: 29
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: pkg-systemd-maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: init-system-helpers
+Version: 1.20
+Pre-Depends: sysvinit-core | systemd-sysv | upstart
+Filename: pool/main/i/init-system-helpers/init_1.20_i386.deb
+Size: 3494
+MD5sum: a388b6f4f6ed0d01b3d459cfad6582fe
+SHA1: d0eb6414a6bb48bb886fcc19962f6a7f302977f3
+SHA256: 9f299b2bf18d6e4534f3a73cca97ef93850e1b5fa38f8519da7c2b825d581f4c
+Description: System-V-like init utilities - metapackage
+Description-md5: e52554c23609041bfbca72fe27a132f9
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+
+Package: libudev1
+Priority: required
+Section: libs
+Installed-Size: 132
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian systemd Maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: systemd
+Version: 208-6ubuntu2
+Depends: libc6 (>= 2.17), libselinux1 (>= 1.32)
+Pre-Depends: multiarch-support
+Filename: pool/main/s/systemd/libudev1_208-6ubuntu2_i386.deb
+Size: 36008
+MD5sum: b03338c052438a95919b9db4d6f9493e
+SHA1: a85242bfc653255b5fa73d0fbec92815dc9c09fc
+SHA256: d66d7948703b33bd617e16a1b9ac6f24ca564312890b1f9218330f638080a307
+Description: libudev shared library
+Multi-Arch: same
+Homepage: http://www.freedesktop.org/wiki/Software/systemd
+Description-md5: ace5b83d7b48187416c90173a93255b6
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: udev
+Priority: required
+Section: admin
+Installed-Size: 5879
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian systemd Maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: systemd
+Version: 208-6ubuntu2
+Depends: libacl1 (>= 2.2.51-8), libblkid1 (>= 2.19.1), libc6 (>= 2.17), libkmod2 (>= 5~), libselinux1 (>= 2.0.65), libudev1 (= 208-6ubuntu2), lsb-base (>= 4.1+Debian11ubuntu7), util-linux (>= 2.16), procps
+Pre-Depends: debconf (>= 1.4.69) | debconf-2.0
+Breaks: consolekit (<< 0.4.6-1)
+Filename: pool/main/s/systemd/udev_208-6ubuntu2_i386.deb
+Size: 799582
+MD5sum: 814bb3babdbe76994ce536384ca31f88
+SHA1: bbb662c89f2b1ff4fd450d1523cc21b5b1c339bc
+SHA256: e444350214c5c121b2ca8031f76c53809f95ebb5c4cec4cf4595c7520ac09529
+Description: /dev/ and hotplug management daemon
+Multi-Arch: foreign
+Homepage: http://www.freedesktop.org/wiki/Software/systemd
+Description-md5: e875ddb09f46f1f7672af537f0c875ca
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: initscripts
+Priority: required
+Section: admin
+Installed-Size: 246
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: sysvinit
+Version: 2.88dsf-41ubuntu16
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Depends: libc6 (>= 2.4), mount (>= 2.11x-1), debianutils (>= 4), lsb-base (>= 4.1+Debian11ubuntu7), sysvinit-utils (>= 2.86.ds1-64), sysv-rc | file-rc, coreutils (>= 5.93), passwd, init, mountall (>= 2.28)
+Recommends: psmisc, e2fsprogs
+Conflicts: libdevmapper1.02.1 (<< 2:1.02.24-1)
+Breaks: aide (<< 0.15.1-5), atm-tools (<< 1:2.5.1-1.3), bootchart (<< 0.10~svn407-3.3), console-common (<< 0.7.86), cruft (<< 0.9.16), eepc-acpi-scripts (<< 1.1.12), fcheck (<< 2.7.59-16), hostapd (<< 1:0.7.3-3), hostname (<< 2.95ubuntu1~boot2), ifupdown (<< 0.6.8ubuntu27), libpam-mount (<< 2.13-1), ltsp-client-core (<< 5.2.16-1), mdadm (<< 3.2.2-1), nbd-client (<< 1:2.9.23-1), nfs-common (<< 1:1.2.5-3), portmap (<< 6.0.0-2), readahead-fedora (<< 2:1.5.6-3), resolvconf (<< 1.49), rpcbind (<< 0.2.0-7), rsyslog (<< 5.8.2-2), selinux-policy-default (<= 2:0.2.20100524-9), splashy (<< 0.3.13-5.1+b1), sysklogd (<< 1.5-6.2), udev (<< 146-2~boot6), upstart (<< 0.6.3-2~boot4), wpasupplicant (<< 0.7.3-4), xymon (<< 4.3.0~beta2.dfsg-9)
+Filename: pool/main/s/sysvinit/initscripts_2.88dsf-41ubuntu16_i386.deb
+Size: 35150
+MD5sum: e78f1e7816f03ded97eacd469505ea45
+SHA1: 81f88f9258c680e9983316d75baff7572ecec75c
+SHA256: 996e4d86486cbe12a7b7852ec1a9fe459dbf0afab51dc13bd701b6d970fdc14a
+Description: scripts for initializing and shutting down the system
+Multi-Arch: foreign
+Homepage: http://savannah.nongnu.org/projects/sysvinit
+Description-md5: db9003c179cd2a623493209da58ea2ea
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: libc6
+Priority: required
+Section: libs
+Installed-Size: 9284
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: i386
+Source: glibc
+Version: 2.19-4ubuntu1
+Replaces: libc6-i386, libc6-xen
+Provides: glibc-2.19-1, libc6-i686, libc6-xen
+Depends: libgcc1
+Suggests: glibc-doc, debconf | debconf-2.0, locales
+Conflicts: libc6-xen, prelink (<= 0.0.20090311-1), tzdata (<< 2007k-1), tzdata-etch
+Breaks: hurd (<< 1:0.5.git20140203-1), libtirpc1 (<< 0.2.3), nscd (<< 2.19)
+Filename: pool/main/g/glibc/libc6_2.19-4ubuntu1_i386.deb
+Size: 4012440
+MD5sum: 946665711bb0294bd2c7729b3174ba8b
+SHA1: 063e268e0d1e368e218d450a4bd2af7608b5e38e
+SHA256: 0e33f5c3b6da3a6ec52fb0274abfa0da5489808feb220b6e6640432cb84f948f
+Description: GNU C Library: Shared libraries
+Multi-Arch: same
+Homepage: http://www.gnu.org/software/libc/libc.html
+Description-md5: fc3001b0b90a1c8e6690b283a619d57f
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: libmount1
+Priority: required
+Section: libs
+Installed-Size: 253
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+Architecture: i386
+Source: util-linux
+Version: 2.20.1-5.1ubuntu21
+Depends: libblkid1 (>= 2.17.2), libc6 (>= 2.8), libselinux1 (>= 1.32)
+Pre-Depends: multiarch-support
+Filename: pool/main/u/util-linux/libmount1_2.20.1-5.1ubuntu21_i386.deb
+Size: 60156
+MD5sum: d17af590ad06ac914a1024d54184cee6
+SHA1: 6eb2a281c409bd5181ce6b871795f8e4609565bc
+SHA256: 78ce54b9f644c365b95a7230e1e50762d628c9d0d3549211017a98d4cb5013c4
+Description: block device id library
+Multi-Arch: same
+Homepage: http://userweb.kernel.org/~kzak/util-linux/
+Description-md5: 8f605597a2fb2fd7bffd09db537dd040
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: libplymouth4
+Priority: required
+Section: libs
+Installed-Size: 315
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Source: plymouth
+Version: 0.9.0-0ubuntu2
+Replaces: plymouth (<< 0.7.0+git20090207-0ubuntu0.1~ppa4)
+Depends: libc6 (>= 2.9), libpng12-0 (>= 1.2.13-4), libudev1 (>= 183)
+Pre-Depends: multiarch-support
+Breaks: casper (= 1.227), mountall (<< 2.8)
+Filename: pool/main/p/plymouth/libplymouth4_0.9.0-0ubuntu2_i386.deb
+Size: 85024
+MD5sum: 8d9e7001ba371bd802956de1e81d1997
+SHA1: 749bdaee4d8bd4c2383c703eb244caa473180d35
+SHA256: 59bd4492b6e71eee5c13ba9c63da12ece49c43106829556722ca503867ce7251
+Description: graphical boot animation and logger - shared libraries
+Multi-Arch: same
+Description-md5: 29e2ed45f3e127c38b58dae52061cc33
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: libprocps3
+Priority: required
+Section: libs
+Installed-Size: 133
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Craig Small <csmall@debian.org>
+Architecture: i386
+Source: procps
+Version: 1:3.3.9-1ubuntu5
+Replaces: procps (<< 1:3.3.2-1)
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Filename: pool/main/p/procps/libprocps3_3.3.9-1ubuntu5_i386.deb
+Size: 30078
+MD5sum: 0df60f591dfe64ed23bb1f3a1546c0ce
+SHA1: db672ec37e88574bf1a1d5484d80cfd4ff04f9f6
+SHA256: b5df28501805a6833dc78e049159a7c560af6f24f18f51459bd8890c31e0fdc6
+Description: library for accessing process information from /proc
+Multi-Arch: same
+Homepage: http://gitorious.org/procps
+Description-md5: 195f4a1a493350f6f0732a65b3cda83f
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: libudev1
+Priority: required
+Section: libs
+Installed-Size: 131
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian systemd Maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: systemd
+Version: 204-14ubuntu2
+Depends: libc6 (>= 2.17), libcgmanager0, libdbus-1-3 (>= 1.0.2), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0)
+Pre-Depends: multiarch-support
+Filename: pool/main/s/systemd/libudev1_204-14ubuntu2_i386.deb
+Size: 35518
+MD5sum: a606f9e4aab028b9ab658b6e8a09d5fb
+SHA1: ef28d377e6cc8f1e98dd9cd8c40edda90e2eed20
+SHA256: c02c85725f64b6c804235329166bf66e40da948d96123336ec55e13e1654720f
+Description: libudev shared library
+Multi-Arch: same
+Homepage: http://www.freedesktop.org/wiki/Software/systemd
+Description-md5: ace5b83d7b48187416c90173a93255b6
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: lsb-base
+Priority: required
+Section: misc
+Installed-Size: 83
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian LSB Team <debian-lsb@lists.debian.org>
+Architecture: all
+Source: lsb
+Version: 4.1+Debian11ubuntu8
+Replaces: upstart (<< 1.12.1-0ubuntu8)
+Breaks: upstart (<< 1.12.1-0ubuntu8)
+Filename: pool/main/l/lsb/lsb-base_4.1+Debian11ubuntu8_all.deb
+Size: 13094
+MD5sum: 9ec51f910e6d8e86bfb489b71b237e66
+SHA1: 8091ba9ffc03999a3db1e2e0ee7d32ac5139a942
+SHA256: be8d24447147aa997b79353eaf8732b3d0967118c011b47476c841667eb15f7e
+Description: Linux Standard Base 4.1 init script functionality
+Multi-Arch: foreign
+Homepage: http://www.linuxfoundation.org/collaborate/workgroups/lsb
+Description-md5: 4ebb3d88f9f483751e70c55779c52d01
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: mount
+Essential: yes
+Priority: required
+Section: admin
+Installed-Size: 410
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+Architecture: i386
+Source: util-linux
+Version: 2.20.1-5.1ubuntu21
+Pre-Depends: libblkid1 (>= 2.20.1), libc6 (>= 2.8), libmount1 (>= 2.20.1), libselinux1 (>= 2.0.15)
+Suggests: nfs-common (>= 1:1.1.0-13)
+Filename: pool/main/u/util-linux/mount_2.20.1-5.1ubuntu21_i386.deb
+Size: 112598
+MD5sum: bdff5dbfbf17e2be281d64e2e7a4912b
+SHA1: 1ed4abb0d5de8a09c704ac2d33de123015e5318a
+SHA256: d2f023c763f7b6e91f3cd14073bfc5af7e7bfe3922fc5ca681d8038c80323f9e
+Description: Tools for mounting and manipulating filesystems
+Multi-Arch: foreign
+Homepage: http://userweb.kernel.org/~kzak/util-linux/
+Description-md5: 46eb8e09a600d5eb98b6b40428349102
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: mountall
+Priority: required
+Section: admin
+Installed-Size: 248
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+Architecture: i386
+Version: 2.54build1
+Replaces: upstart (<< 0.6.3-2)
+Depends: makedev, udev, plymouth, coreutils (>= 7.1), libc6 (>= 2.9), libdbus-1-3 (>= 1.2.16), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libplymouth4 (>= 0.8.1-3), libudev1 (>= 183)
+Pre-Depends: dpkg (>= 1.15.7.2)
+Breaks: initscripts (<< 2.88dsf-24), policycoreutils (<< 2.0.69-2ubuntu4), usplash (<< 0.5.47)
+Filename: pool/main/m/mountall/mountall_2.54build1_i386.deb
+Size: 54166
+MD5sum: a208d9dc5aef018087d5e00cea7f6c92
+SHA1: 13686aa81ebef6c3009ff618708d76bc68ff94e8
+SHA256: dee359411cd7cfad19581f380af6275d46a6c5ecf55f512523b75adaa4734d03
+Description: filesystem mounting tool
+Multi-Arch: foreign
+Description-md5: b5b5a27fc0e8063ef1226a39fb8ecf70
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: procps
+Priority: required
+Section: admin
+Installed-Size: 634
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Craig Small <csmall@debian.org>
+Architecture: i386
+Version: 1:3.3.9-1ubuntu5
+Provides: watch
+Depends: libc6 (>= 2.15), libncurses5 (>= 5.5-5~), libncursesw5 (>= 5.6+20070908), libprocps3, libtinfo5, lsb-base (>= 4.1+Debian11ubuntu7), initscripts
+Recommends: psmisc
+Conflicts: pgrep (<< 3.3-5), w-bassman (<< 1.0-3)
+Breaks: guymager (<= 0.5.9-1), open-vm-tools (<= 2011.12.20-562307-1), xmem (<= 1.20-27.1)
+Filename: pool/main/p/procps/procps_3.3.9-1ubuntu5_i386.deb
+Size: 203368
+MD5sum: 17be371891f077e04075c6eb0af06b3c
+SHA1: a5c6171b5a6430aa9436e42f0e64226dd2e7a665
+SHA256: 41e03fd2d05161c402d9a5d2b5feecb30a42f8919eb43712ebdd4340433803c1
+Description: /proc file system utilities
+Multi-Arch: foreign
+Homepage: http://gitorious.org/procps
+Description-md5: 943f3288c1aaa379fca73a3ff1a35278
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: sysv-rc
+Priority: required
+Section: admin
+Installed-Size: 224
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+Architecture: all
+Source: sysvinit
+Version: 2.88dsf-41ubuntu16
+Replaces: file-rc
+Depends: debconf (>= 0.5) | debconf-2.0, sysvinit-utils (>= 2.86.ds1-62), insserv (>> 1.12.0-10)
+Recommends: lsb-base (>= 3.2-14)
+Suggests: sysv-rc-conf, bum
+Conflicts: file-rc
+Breaks: initscripts (<< 2.88dsf-41ubuntu14)
+Filename: pool/main/s/sysvinit/sysv-rc_2.88dsf-41ubuntu16_all.deb
+Size: 37784
+MD5sum: e57bc9887432f76266d7bf741cf9d813
+SHA1: 446d24cc86bdb7a779856c00f9dea966227a00e2
+SHA256: 072d2745b9c966d63cba5abf52357374e7a043b3cc1bbde0b8ccf68f82e45f60
+Description: System-V-like runlevel change mechanism
+Multi-Arch: foreign
+Homepage: http://savannah.nongnu.org/projects/sysvinit
+Description-md5: 195f2d617082a23f37cee0f50784eef9
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: sysvinit-utils
+Priority: required
+Section: admin
+Installed-Size: 236
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: sysvinit
+Version: 2.88dsf-41ubuntu16
+Replaces: last, sysvinit (<= 2.86.ds1-65)
+Depends: libc6 (>= 2.15), libselinux1 (>= 1.32), lsb-base (>= 4.1+Debian11ubuntu7)
+Recommends: upstart (>= 0.6.3-4)
+Suggests: bootlogd, sash
+Conflicts: chkconfig (<< 11.0-79.1-2), last, sysvconfig
+Breaks: upstart (<< 1.5-0ubuntu5)
+Filename: pool/main/s/sysvinit/sysvinit-utils_2.88dsf-41ubuntu16_i386.deb
+Size: 49652
+MD5sum: e1340ba69c7a5f0cf1a84b3f68993570
+SHA1: 7cbd535c1c010c2e84cb454562fb6632fb366ddc
+SHA256: 576c2bcfbf56871acd68576f07fd18b6bfccd8a5db6dfa04bcf62183f43e77a0
+Description: System-V-like utilities
+Multi-Arch: foreign
+Homepage: http://savannah.nongnu.org/projects/sysvinit
+Description-md5: 1d2bc4c9c32104729144c7578ecd30bd
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: udev
+Priority: required
+Section: admin
+Installed-Size: 5123
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian systemd Maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: systemd
+Version: 204-14ubuntu2
+Depends: libacl1 (>= 2.2.51-8), libblkid1 (>= 2.19.1), libc6 (>= 2.17), libcgmanager0, libdbus-1-3 (>= 1.0.2), libkmod2 (>= 5~), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libselinux1 (>= 2.0.65), libudev1 (= 204-14ubuntu2), lsb-base (>= 4.1+Debian11ubuntu7), util-linux (>= 2.16), procps
+Pre-Depends: debconf (>= 1.4.69) | debconf-2.0
+Breaks: consolekit (<< 0.4.6-1)
+Filename: pool/main/s/systemd/udev_204-14ubuntu2_i386.deb
+Size: 739026
+MD5sum: a85b035885e1b316354f6e5d0b8eeb69
+SHA1: 970405e4c8838c3cf17d1834c8917705d977879e
+SHA256: 05fbd7f4b502fde9752b84b49364fe633b8377bcd996ec16462e0bc94adc9fcf
+Description: /dev/ and hotplug management daemon
+Multi-Arch: foreign
+Homepage: http://www.freedesktop.org/wiki/Software/systemd
+Description-md5: e875ddb09f46f1f7672af537f0c875ca
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
+Package: upstart
+Priority: required
+Section: admin
+Installed-Size: 1721
+Maintainer: James Hunt <james.hunt@ubuntu.com>
+Architecture: i386
+Version: 1.13.1-0ubuntu1
+Replaces: startup-tasks, system-services, sysvinit, upstart-compat-sysv, upstart-job
+Provides: startup-tasks, system-services, upstart-compat-sysv, upstart-job
+Depends: libc6 (>= 2.15), libcgmanager0, libdbus-1-3 (>= 1.2.16), libjson-c2 (>= 0.10), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libudev1 (>= 183), sysvinit-utils, initscripts, mountall, ifupdown (>= 0.6.10ubuntu5), libjson0 (>= 0.10-1.1ubuntu1), debianutils (>= 4)
+Suggests: python3, graphviz, bash-completion, upstart-monitor
+Conflicts: lxcguest, startup-tasks, system-services, sysvinit, upstart-compat-sysv, upstart-job
+Breaks: friendly-recovery (<< 0.2.13), libc6 (<< 2.12.1-0ubuntu12)
+Filename: pool/main/u/upstart/upstart_1.13.1-0ubuntu1_i386.deb
+Size: 388978
+MD5sum: 2ebf7fb1083b581707e445fee808e120
+SHA1: 901424ec0d304ca8d10a25321a55d1d69bd8e82d
+SHA256: c42fb117e90770c7163c9f4770e75e9c0d6a00d41c4b3afc2afebfa65ede80f8
+Description: event-based init daemon
+Multi-Arch: foreign
+Homepage: http://upstart.ubuntu.com/
+Orig-Maintainer: Steve Langasek <vorlon@debian.org>
+Description-md5: b776ec43b708c13dd0c2ab824471f478
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 9m
+Task: minimal
+
diff --git a/test/integration/Packages-github-23-too-long-dependency-line b/test/integration/Packages-github-23-too-long-dependency-line
new file mode 100644
index 0000000..967d6ed
--- /dev/null
+++ b/test/integration/Packages-github-23-too-long-dependency-line
@@ -0,0 +1,17 @@
+Package: network-manager-strongswan
+Architecture: amd64
+Version: 1.3.1-14
+Priority: extra
+Section: net
+Maintainer: Jean-Christophe Manciot <manciot.jeanchristophe@gmail.com>
+Installed-Size: 256
+Provides: network-manager-strongswan
+Depends: libart-2.0-2,libatk1.0-0,libavahi-client3,libavahi-common3,libavahi-glib1,libbonobo2-0,libbonoboui2-0,libc6,libcairo2,libcanberra0,libdatrie1,libdbus-1-3,libdbus-glib-1-2,libexpat1,libffi6,libfontconfig1,libfreetype6,libgail18,libgconf-2-4,libgcrypt20,libgdk-pixbuf2.0-0,libglib2.0-0,libglib2.0-0-dbg,libglib2.0-0-refdbg,libgmp10,libgnome-2-0,libgnomecanvas2-0,libgnome-keyring0,libgnomeui-0,libgnomevfs2-0,libgnutls30,libgpg-error0,libgraphite2-3,libgtk2.0-0,libharfbuzz0b,libhogweed4,libice6,libidn11,libltdl7,liblzma5,libnettle6,libnm-glib-vpn1,libnm-util2,libogg0,liborbit-2-0,libp11-kit0,libpango-1.0-0,libpangocairo-1.0-0,libpangoft2-1.0-0,libpcre3,libpixman-1-0,libpng12-0,libpopt0,libselinux1,libsm6,libsystemd0,libtasn1-6,libtdb1,libthai0,libuuid1,libvorbis0a,libvorbisfile3,libx11-6,libxau6,libxcb1,libxcb-render0,libxcb-shm0,libxcomposite1,libxcursor1,libxdamage1,libxdmcp6,libxext6,libxfixes3,libxi6,libxinerama1,libxml2,libxrandr2,libxrender1,zlib1g
+Filename: dists/xenial/stable/binary-amd64/network-manager-strongswan_1.3.1-14_amd64.deb
+Size: 34642
+MD5sum: 6f4482cb417e4c884a6715f315695937
+SHA1: 07dc0377c365f6ccb67d8e135ab32f27b5b5774d
+SHA256: e526bc8c6c8b29dc28e5783ad076119d3be0e804779b3ca3a68959b7ac23f163
+SHA512: 6e2eb65023301dcaf1813a3c5686a82bdb61bdd3597e1976e067e06a0b0eee96e6d2a2d8b890bf37b8120eb9ff671a5ac4ee49de83feb3199afeab2893b8dec6
+Description: This package provides an IKEv2 IPSec VPN plugin for strongswan
+Description-md5: 31abf1e375284c7ee36f25bf936125f1
diff --git a/test/integration/Packages-hashsum-verification b/test/integration/Packages-hashsum-verification
new file mode 100644
index 0000000..29a385f
--- /dev/null
+++ b/test/integration/Packages-hashsum-verification
@@ -0,0 +1,18 @@
+Package: apt
+Version: 0.7.25.3
+Architecture: i386
+Maintainer: APT Development Team <deity@lists.debian.org>
+Installed-Size: 5244
+Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7)
+Provides: libapt-pkg-libc6.9-6-4.8
+Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
+Filename: apt.deb
+Size: 0
+MD5sum: d41d8cd98f00b204e9800998ecf8427e
+Description: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+ .
+ APT features complete installation ordering, multiple source capability
+ and several other unique features, see the Users Guide in apt-doc.
diff --git a/test/integration/Packages-pdiff-usage b/test/integration/Packages-pdiff-usage
new file mode 100644
index 0000000..ac962f2
--- /dev/null
+++ b/test/integration/Packages-pdiff-usage
@@ -0,0 +1,36 @@
+Package: apt
+Version: 0.7.25.3
+Architecture: i386
+Maintainer: APT Development Team <deity@lists.debian.org>
+Installed-Size: 5244
+Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7)
+Provides: libapt-pkg-libc6.9-6-4.8
+Depends: libc6 (>= 2.3.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0), debian-archive-keyring
+Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
+Filename: pool/main/a/apt/apt_0.7.25.3_i386.deb
+Size: 1750610
+MD5sum: 311aadc67d1b72428b54c9b4e1f76671
+SHA1: 3c695e028f74d5c55226f9ef30000bbbd881088c
+SHA256: b46fd1546151c545fe4bfa56a5cc0e7811a9f68826326a529777fd660f28f050
+Description: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+ .
+ APT features complete installation ordering, multiple source capability
+ and several other unique features, see the Users Guide in apt-doc.
+Description-md5: d41ee493aa9fcc6cbc9ce4eb7069959c
+
+Package: oldstuff
+Version: 1.0
+Architecture: i386
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 100
+Filename: pool/oldstuff_1.0_i386.deb
+Size: 100000
+MD5sum: 311aeeadf78324aaff54c9b4e1f76671
+SHA1: 3c695e028f74d5c544deeddaaa1242desa81088c
+SHA256: b46fd1546151c545fe4bfa56a5cc0e7deaef23e2da3e4f129727fd660f28f050
+Description: some cool but old stuff
+ This package will disappear in the next mirror update
+Description-md5: 1948af60eda0a41dfa9fe83f60eb8389
diff --git a/test/integration/Packages-pdiff-usage-new b/test/integration/Packages-pdiff-usage-new
new file mode 100644
index 0000000..f8d7b19
--- /dev/null
+++ b/test/integration/Packages-pdiff-usage-new
@@ -0,0 +1,39 @@
+Package: apt
+Priority: important
+Section: admin
+Installed-Size: 5672
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: i386
+Version: 0.8.0~pre1
+Replaces: manpages-pl (<< 20060617-3~)
+Provides: libapt-pkg4.10
+Depends: libc6 (>= 2.3.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0), zlib1g (>= 1:1.1.4), debian-archive-keyring, gnupg
+Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
+Conflicts: python-apt (<< 0.7.93.2~)
+Filename: pool/main/a/apt/apt_0.8.0~pre1_i386.deb
+Size: 2013046
+MD5sum: 6786ca6270c988f2c201716ededaedec
+SHA1: fe26559e745d4c2c977c27170938852041c9adff
+SHA256: a12f968467e1e3cec24191b72bfe84f7aeed3ce422e1a60bb4f1454f2b89b8ee
+Description: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+ .
+ APT features complete installation ordering, multiple source capability
+ and several other unique features, see the Users Guide in apt-doc.
+Description-md5: d41ee493aa9fcc6cbc9ce4eb7069959c
+
+Package: newstuff
+Version: 1.0
+Architecture: i386
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 101
+Filename: pool/newstuff_1.0_i386.deb
+Size: 101100
+MD5sum: 311aeeadf78324aaff1ceaf3e1f76671
+SHA1: 3c695e028f7a1ae324deeddaaa1242desa81088c
+SHA256: b46fd154615edefab321cc56a5cc0e7deaef23e2da3e4f129727fd660f28f050
+Description: some cool and shiny new stuff
+ This package will appear in the next mirror update
+Description-md5: d5f89fbbc2ac69c43d7e4c9b67d82b6b
diff --git a/test/integration/Packages-policy-pinning b/test/integration/Packages-policy-pinning
new file mode 100644
index 0000000..a9334e9
--- /dev/null
+++ b/test/integration/Packages-policy-pinning
@@ -0,0 +1,12 @@
+Package: oldstuff
+Version: 1.0
+Architecture: i386
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 100
+Filename: pool/oldstuff_1.0_i386.deb
+Size: 100000
+MD5sum: 311aeeadf78324aaff54c9b4e1f76671
+SHA1: 3c695e028f74d5c544deeddaaa1242desa81088c
+SHA256: b46fd1546151c545fe4bfa56a5cc0e7deaef23e2da3e4f129727fd660f28f050
+Description: some old but cool stuff
+ This package will disappear in the next mirror update
diff --git a/test/integration/Packages-releasefile-verification b/test/integration/Packages-releasefile-verification
new file mode 100644
index 0000000..1e5c470
--- /dev/null
+++ b/test/integration/Packages-releasefile-verification
@@ -0,0 +1,20 @@
+Package: apt
+Version: 0.7.25.3
+Architecture: i386
+Maintainer: APT Development Team <deity@lists.debian.org>
+Installed-Size: 5244
+Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7)
+Provides: libapt-pkg-libc6.9-6-4.8
+Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
+Filename: apt.deb
+Size: 0
+MD5sum: d41d8cd98f00b204e9800998ecf8427e
+SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+Description: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+ .
+ APT features complete installation ordering, multiple source capability
+ and several other unique features, see the Users Guide in apt-doc.
+Description-md5: d41ee493aa9fcc6cbc9ce4eb7069959c
diff --git a/test/integration/Packages-releasefile-verification-new b/test/integration/Packages-releasefile-verification-new
new file mode 100644
index 0000000..7f03829
--- /dev/null
+++ b/test/integration/Packages-releasefile-verification-new
@@ -0,0 +1,23 @@
+Package: apt
+Priority: important
+Section: admin
+Installed-Size: 5672
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: i386
+Version: 0.8.0~pre1
+Replaces: manpages-pl (<< 20060617-3~)
+Provides: libapt-pkg4.10
+Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
+Conflicts: python-apt (<< 0.7.93.2~)
+Filename: apt.deb
+Size: 0
+MD5sum: d41d8cd98f00b204e9800998ecf8427e
+SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+Description: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+ .
+ APT features complete installation ordering, multiple source capability
+ and several other unique features, see the Users Guide in apt-doc.
+Description-md5: d41ee493aa9fcc6cbc9ce4eb7069959c
diff --git a/test/integration/Packages-ubuntu-bug-614993 b/test/integration/Packages-ubuntu-bug-614993
new file mode 100644
index 0000000..f1d4593
--- /dev/null
+++ b/test/integration/Packages-ubuntu-bug-614993
@@ -0,0 +1,1819 @@
+Package: libx11-xcb1
+Priority: optional
+Section: libs
+Installed-Size: 184
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: libx11
+Version: 2:1.3.3-3ubuntu1
+Depends: libc6 (>= 2.2.5), libx11-6
+Conflicts: libx11-6 (<< 2:1.1)
+Filename: pool/main/libx/libx11/libx11-xcb1_1.3.3-3ubuntu1_amd64.deb
+Size: 90286
+MD5sum: 56c300a1110d9b08ab7760e375724034
+SHA1: 81fd3a089e0141236ac4dd49e98f58d7b6db3af3
+SHA256: 97a7b225bbccc6a64e2264e7ca53bb585e12982e037d26f1b22fae2c79127dc0
+Description: Xlib/XCB interface library
+ libX11-xcb provides functions needed by clients which take advantage of
+ Xlib/XCB to mix calls to both Xlib and XCB over the same X connection.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ More information about XCB can be found at:
+ <URL:http://xcb.freedesktop.org>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libX11
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: libxcb-aux0
+Priority: extra
+Section: libdevel
+Installed-Size: 68
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Julien Danjou <acid@debian.org>
+Architecture: amd64
+Source: xcb-util
+Version: 0.3.6-1build1
+Depends: libc6 (>= 2.2.5), libxcb1 (>= 0)
+Filename: pool/main/x/xcb-util/libxcb-aux0_0.3.6-1build1_amd64.deb
+Size: 8962
+MD5sum: a35d570e9231a01ff6de0ec872638787
+SHA1: c551ed6a9b1b6c1d201537b85f4003926aa2833d
+SHA256: 047ee120e83adbed4c57ff175e59ca02a772e7d4a5d1d014ff72d6f0da41e9ca
+Description: utility libraries for X C Binding -- aux
+ This package contains the library files needed to run software using
+ libxcb-aux, providing convenient access to connection setup and some
+ core requests.
+ .
+ The xcb-util module provides a number of libraries which sit on top of
+ libxcb, the core X protocol library, and some of the extension
+ libraries. These experimental libraries provide convenience functions
+ and interfaces which make the raw X protocol more usable. Some of the
+ libraries also provide client-side code which is not strictly part of
+ the X protocol but which have traditionally been provided by Xlib.
+Homepage: http://xcb.freedesktop.org
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, mythbuntu-frontend, ubuntu-netbook
+
+Package: libxcb-dri2-0
+Priority: optional
+Section: libs
+Installed-Size: 68
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: XCB Developers <xcb@lists.freedesktop.org>
+Architecture: amd64
+Source: libxcb
+Version: 1.6-1
+Depends: libc6 (>= 2.2.5), libxcb1 (>= 0)
+Filename: pool/main/libx/libxcb/libxcb-dri2-0_1.6-1_amd64.deb
+Size: 10130
+MD5sum: 13f3278d872f700c5e2363cab9feb5db
+SHA1: cc51153c443558292604acb98043517075332263
+SHA256: 2fe00f4216eb408b0e70ffd7681b81fc750a242661790c636998dfe5738be05d
+Description: X C Binding, dri2 extension
+ This package contains the library files needed to run software using
+ libxcb-dri2, the dri2 extension for the X C Binding.
+ .
+ The XCB library provides an interface to the X Window System protocol,
+ designed to replace the Xlib interface. XCB provides several advantages over
+ Xlib:
+ .
+ * Size: small library and lower memory footprint
+ * Latency hiding: batch several requests and wait for the replies later
+ * Direct protocol access: one-to-one mapping between interface and protocol
+ * Thread support: access XCB from multiple threads, with no explicit locking
+ * Easy creation of new extensions: automatically generates interface from
+ machine-parsable protocol descriptions
+Homepage: http://xcb.freedesktop.org
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+
+Package: libmtdev1
+Priority: optional
+Section: libs
+Installed-Size: 72
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: mtdev
+Version: 1.0.9-0ubuntu1
+Depends: libc6 (>= 2.4)
+Filename: pool/main/m/mtdev/libmtdev1_1.0.9-0ubuntu1_amd64.deb
+Size: 10980
+MD5sum: 694e8cee8d0d21591fa308ddd1b1e41f
+SHA1: 7ea377dec6755a3e659c116a989145609fc7e9a9
+SHA256: 88075b13ad116e38d33c84e63fa5e6195c84df16f4741c4054520618d7f17797
+Description: Multitouch Protocol Translation Library - shared library
+ libmtdev is a library for translating evdev multitouch events using the legacy
+ protocol to the new multitouch slots protocol. This is necessary for kernel
+ drivers that have not been updated to use the newer protocol.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: libutouch-grail1
+Priority: optional
+Section: libs
+Installed-Size: 84
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: utouch-grail
+Version: 1.0.11-0ubuntu1
+Depends: libc6 (>= 2.4), libmtdev1 (>= 1.0.8)
+Breaks: libutouch-geis1 (<= 1.0.8), xserver-xorg-input-gevdev (<= 1:2.3.2-6ubuntu1)
+Filename: pool/main/u/utouch-grail/libutouch-grail1_1.0.11-0ubuntu1_amd64.deb
+Size: 15360
+MD5sum: 210ad74aa06bf676d9ab0200fc2a1d19
+SHA1: 734014bca516535b85b3e3eb5f76734d1dca066a
+SHA256: 0905710584348b58ee88f520c874d4d5198b6be38daff8a761ad263b0c350a6a
+Description: Gesture Recognition And Instantiation Library
+ This library consists of an interface and tools for handling gesture
+ recognition and gesture instantiation. Applications can use the grail
+ callbacks to receive gesture primitives and raw input events from the
+ underlying kernel device.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: libdrm-intel1
+Priority: required
+Section: libs
+Installed-Size: 116
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.21-1ubuntu2
+Depends: libc6 (>= 2.3.4), libdrm2 (>= 2.4.1)
+Filename: pool/main/libd/libdrm/libdrm-intel1_2.4.21-1ubuntu2_amd64.deb
+Size: 33178
+MD5sum: 2d647434700294708fcaa815bc75ca07
+SHA1: f808f92ca2c86d07e654f92cffe6a806bef53c64
+SHA256: 069eb06161ca6e17d29a8cc67c7eac21c6f935292d4f208e802d595da521566b
+Description: Userspace interface to intel-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the intel-specific kernel
+ DRM services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI). The DRI is
+ currently used on Linux to provide hardware-accelerated OpenGL drivers.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: minimal
+
+Package: libdrm-nouveau1
+Priority: required
+Section: libs
+Installed-Size: 96
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.21-1ubuntu2
+Depends: libc6 (>= 2.3.4), libdrm2 (>= 2.4.3)
+Breaks: xserver-xorg-video-nouveau (<< 1:0.0.16)
+Filename: pool/main/libd/libdrm/libdrm-nouveau1_2.4.21-1ubuntu2_amd64.deb
+Size: 22290
+MD5sum: dd13107a609c4ef288aef8e0cf7c6bbe
+SHA1: 3c17fcf1421f2585f3b6385eb434f8caa2ee56b8
+SHA256: f02f625b172a871e2c93a01234cb608e2c21ba21a6f76d48fff0dc743156d3a5
+Description: Userspace interface to nouveau-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the nouveau-specific kernel
+ DRM services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI). The DRI is
+ currently used on Linux to provide hardware-accelerated OpenGL drivers.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: minimal
+
+Package: libdrm-radeon1
+Priority: required
+Section: libs
+Installed-Size: 96
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.21-1ubuntu2
+Depends: libc6 (>= 2.3.4), libdrm2 (>= 2.4.3)
+Filename: pool/main/libd/libdrm/libdrm-radeon1_2.4.21-1ubuntu2_amd64.deb
+Size: 23196
+MD5sum: 7d8c85369e9d9deaaff960715fb8cb5d
+SHA1: b39304c4f1cce9c00b2c4e01845cc03760d97ca5
+SHA256: c282a95b5ee4361c3e1fd49cfe5f862ada91a9caa9c338b634aab2b792707800
+Description: Userspace interface to radeon-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the radeon-specific kernel
+ DRM services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI). The DRI is
+ currently used on Linux to provide hardware-accelerated OpenGL drivers.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: minimal
+
+Package: libdrm2
+Priority: required
+Section: libs
+Installed-Size: 120
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.21-1ubuntu2
+Depends: libc6 (>= 2.7)
+Filename: pool/main/libd/libdrm/libdrm2_2.4.21-1ubuntu2_amd64.deb
+Size: 32386
+MD5sum: a66179dec8fa282a72d323cb85386a0c
+SHA1: b06c48d149ad466c4e0c1f316573d8faa2924210
+SHA256: af7beb6b31b54371fdc6ec3c624199b323ac80d5043e4c5931ba1bf740462b10
+Description: Userspace interface to kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the runtime environment for libdrm.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: minimal
+
+Package: libxfont1
+Priority: optional
+Section: libs
+Installed-Size: 332
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: libxfont
+Version: 1:1.4.2-1
+Depends: libbz2-1.0, libc6 (>= 2.4), libfontenc1, libfreetype6 (>= 2.2.1), zlib1g (>= 1:1.1.4)
+Conflicts: xprint (<< 2:1.6.0-1)
+Filename: pool/main/libx/libxfont/libxfont1_1.4.2-1_amd64.deb
+Size: 156844
+MD5sum: 4ad60ad1f3096f03eabcf30dedb2c2ce
+SHA1: 2a1e83c35583fe2f8351783a160326b48c4559b3
+SHA256: 97c121164fdef2e6f7332c27422fc07d2d7b3f137415b3ec3a6083e471f3290e
+Description: X11 font rasterisation library
+ libXfont provides various services for X servers, most notably font
+ selection and rasterisation (through external libraries).
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXfont
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, eucalyptus-cloud, eucalyptus-storage, print-server, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-common
+Priority: optional
+Section: x11
+Installed-Size: 176
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: all
+Source: xorg-server
+Version: 2:1.9.0-0ubuntu2
+Replaces: xserver-xorg-core (<< 2:1.5.2)
+Depends: x11-common, xkb-data, x11-xkb-utils
+Recommends: xfonts-base, xauth
+Filename: pool/main/x/xorg-server/xserver-common_1.9.0-0ubuntu2_all.deb
+Size: 86390
+MD5sum: 278a92c5c0b5dc2189ab7b7493b69add
+SHA1: 46734bd7889084fe8a296ac50ed6c81bbdcb322a
+SHA256: f2757c722684626f21b638fe8de2347c3a4ce5e686af5d6ab38a8e12755762b1
+Description: common files used by various X servers
+ This package provides files necessary for all X.Org based X servers.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xephyr
+Priority: optional
+Section: x11
+Installed-Size: 2164
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xorg-server
+Version: 2:1.9.0-0ubuntu2
+Depends: xserver-common (>= 2:1.9.0-0ubuntu2), libc6 (>= 2.4), libdrm2 (>= 2.3.1), libgcrypt11 (>= 1.4.2), libgl1-mesa-glx | libgl1, libpixman-1-0 (>= 0.15.16), libx11-6, libxau6, libxdmcp6, libxext6, libxfont1 (>= 1:1.4.2), libxv1
+Recommends: libgl1-mesa-dri (>= 7.1~rc1)
+Filename: pool/main/x/xorg-server/xserver-xephyr_1.9.0-0ubuntu2_amd64.deb
+Size: 1005784
+MD5sum: 93f42d8e5a4ccaac790908d9490aff49
+SHA1: 8c657f7ed9a5fea1bc72c341d690f89f7b2be852
+SHA256: 6ab0c82b3082bf3acfc9b54f63dbb472c55ca69b1dab06fc27e34ffd145c3881
+Description: nested X server
+ Xephyr is an X server that can be run inside another X server,
+ much like Xnest. It is based on the kdrive X server, and as a
+ result it supports newer extensions than Xnest, including render and
+ composite.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xserver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: edubuntu-desktop-gnome
+
+Package: xserver-xorg
+Priority: optional
+Section: x11
+Installed-Size: 180
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xorg
+Version: 1:7.5+6ubuntu3
+Replaces: x11-common (<< 1:7.3+11), xserver-common (<< 7)
+Depends: xserver-xorg-core (>= 2:1.8.99.905), xserver-xorg-video-all | xserver-xorg-video-8, xserver-xorg-input-all | xserver-xorg-input-11, xserver-xorg-input-evdev, libc6 (>= 2.7), xkb-data (>= 1.4), x11-xkb-utils, console-setup
+Recommends: libgl1-mesa-dri
+Conflicts: x11-common (<< 1:7.3+11), xserver-common (<< 7), xserver-xfree86 (<< 6.8.2.dfsg.1-1)
+Filename: pool/main/x/xorg/xserver-xorg_7.5+6ubuntu3_amd64.deb
+Size: 20560
+MD5sum: 5f4f0c969d2758cee7ce5244917df903
+SHA1: 58290e5672b6e3223dc63db33b3196d3eaa44df6
+SHA256: 35b04c220fe1b76f52fca42bb97abeed2c9e8554ff280e42f7c4ad3017985632
+Description: the X.Org X server
+ This package depends on the full suite of the server and drivers for the
+ X.Org X server. It does not provide the actual server itself.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-core
+Priority: optional
+Section: x11
+Installed-Size: 4108
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xorg-server
+Version: 2:1.9.0-0ubuntu2
+Provides: xorg-input-abi-11.0, xorg-video-abi-8.0, xserver
+Depends: xserver-common (>= 2:1.9.0-0ubuntu2), xserver-xorg, udev (>= 149), libc6 (>= 2.7), libdrm2 (>= 2.3.1), libgcrypt11 (>= 1.4.2), libpciaccess0 (>= 0.10.7), libpixman-1-0 (>= 0.15.16), libudev0 (>= 147), libxau6, libxdmcp6, libxfont1 (>= 1:1.4.2)
+Recommends: libgl1-mesa-dri (>= 7.1~rc1)
+Suggests: xfonts-100dpi | xfonts-75dpi, xfonts-scalable
+Breaks: xserver-xorg-input, xserver-xorg-input-2, xserver-xorg-input-2.1, xserver-xorg-input-4, xserver-xorg-input-7, xserver-xorg-input-joystick (<= 1:1.5.0-3), xserver-xorg-input-synaptics (<= 1.2.2-1ubuntu4), xserver-xorg-input-tslib (<= 0.0.6-3), xserver-xorg-input-vmmouse (<= 1:12.6.5-4ubuntu2), xserver-xorg-input-wacom (<< 0.7.8), xserver-xorg-video, xserver-xorg-video-1.0, xserver-xorg-video-1.9, xserver-xorg-video-2, xserver-xorg-video-4, xserver-xorg-video-5, xserver-xorg-video-6
+Filename: pool/main/x/xorg-server/xserver-xorg-core_1.9.0-0ubuntu2_amd64.deb
+Size: 1722082
+MD5sum: 22b1e5dcaa5a40520eb1c76996acde89
+SHA1: 26d0082a04d7c30791a8535643c08bd66cc71085
+SHA256: 073eacfdf298a76287cf9676212ac94eda9a2f7c9c1b62fc9ced3e110c06e88d
+Description: Xorg X server - core server
+ The Xorg X server is an X server for several architectures and operating
+ systems, which is derived from the XFree86 4.x series of X servers.
+ .
+ The Xorg server supports most modern graphics hardware from most vendors,
+ and supersedes all XFree86 X servers.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xserver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-core-dbg
+Priority: extra
+Section: x11
+Installed-Size: 17404
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xorg-server
+Version: 2:1.9.0-0ubuntu2
+Depends: xserver-xorg-core (= 2:1.9.0-0ubuntu2)
+Filename: pool/main/x/xorg-server/xserver-xorg-core-dbg_1.9.0-0ubuntu2_amd64.deb
+Size: 6305640
+MD5sum: fe080ab7fa64b8dc8446b6fe82af196d
+SHA1: ae450cf592342969903a42792d07914d2717f8dd
+SHA256: fd4007f1de919f1ed8f9e8bfe0235bdbbe14e3ba78bf3cd010f43d1c64a83d50
+Description: Xorg - the X.Org X server (debugging symbols)
+ The Xorg X server is an X server for several architectures and operating
+ systems, which is derived from the XFree86 4.x series of X servers.
+ .
+ The Xorg server supports most modern graphics hardware from most vendors,
+ and supersedes all XFree86 X servers.
+ .
+ This package provides debugging symbols for the Xorg X server and associated
+ modules.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-dev
+Priority: optional
+Section: x11
+Installed-Size: 1632
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xorg-server
+Version: 2:1.9.0-0ubuntu2
+Depends: libpixman-1-dev (>= 0.15.20), x11proto-core-dev (>= 7.0.17), x11proto-input-dev (>= 1.9.99.902), x11proto-xext-dev (>= 7.0.99.3), x11proto-video-dev, x11proto-randr-dev (>= 1.2.99.3), x11proto-render-dev (>= 2:0.11), x11proto-dri2-dev (>= 2.3), x11proto-fonts-dev, x11proto-xinerama-dev, x11proto-kb-dev, libxkbfile-dev, libpciaccess-dev
+Filename: pool/main/x/xorg-server/xserver-xorg-dev_1.9.0-0ubuntu2_amd64.deb
+Size: 315992
+MD5sum: 622dad3611cef47cad83b4a3c82c0a78
+SHA1: 35237aa66771f253e22ab46ed711d7feafc3e284
+SHA256: 94114cc3aa3e9601db43d92df263715c3141922ef04ce1886a56a8842765d5f2
+Description: Xorg X server - development files
+ This package provides development files for the X.Org ('Xorg') X server.
+ This is not quite the same as the DDK (Driver Development Kit) from the
+ XFree86 4.x and X.Org 6.7, 6.8 and 6.9 series of servers; it provides
+ headers and a pkg-config file for drivers using autotools to build
+ against.
+ .
+ Unless you are developing or building a driver, you probably want
+ xserver-xorg and/or xserver-xorg-core instead.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xserver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-input-all
+Priority: optional
+Section: x11
+Installed-Size: 24
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xorg
+Version: 1:7.5+6ubuntu3
+Depends: xserver-xorg-input-evdev, xserver-xorg-input-synaptics, xserver-xorg-input-vmmouse, xserver-xorg-input-wacom, x11-common
+Filename: pool/main/x/xorg/xserver-xorg-input-all_7.5+6ubuntu3_amd64.deb
+Size: 1014
+MD5sum: 33d323837d8dd94ec2e63b4944316c83
+SHA1: 27b0484d0282b728bd9905115da55548c2884008
+SHA256: 61338a072689a5c1565a1968811c87e370e37facb12f4055b64f8b65e35f48ea
+Description: the X.Org X server -- input driver metapackage
+ This package depends on the full suite of input drivers for the X.Org X server
+ (Xorg). It does not provide any drivers itself, and may be removed if you wish
+ to only have certain drivers installed.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-input-evdev
+Priority: optional
+Section: x11
+Installed-Size: 168
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:2.3.2-6ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-input-gevdev
+Provides: xserver-xorg-input-11
+Depends: libc6 (>= 2.7), libutouch-grail1 (>= 1.0.10), xorg-input-abi-11.0, xserver-xorg-core (>= 2:1.8.99.905-1ubuntu3)
+Conflicts: xserver-xorg-input-gevdev
+Filename: pool/main/x/xserver-xorg-input-evdev/xserver-xorg-input-evdev_2.3.2-6ubuntu1_amd64.deb
+Size: 77602
+MD5sum: aa833ccaa08510e2cf02182157f49be4
+SHA1: 1b35f21aab75e0063a36bca95ecd36e4ca7cd6ef
+SHA256: 8d600abfff74e13126c3b61530e782aa9ab88a8aeb0a1eeb42e6ebe2aafe314e
+Description: X.Org X server -- evdev input driver
+ This package provides the driver for input devices using evdev, the Linux
+ kernel's event delivery mechanism. This driver allows for multiple keyboards
+ and mice to be treated as separate input devices.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-input-evdev driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-input-evdev-dev
+Priority: optional
+Section: libdevel
+Installed-Size: 64
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: all
+Source: xserver-xorg-input-evdev
+Version: 1:2.3.2-6ubuntu1
+Filename: pool/main/x/xserver-xorg-input-evdev/xserver-xorg-input-evdev-dev_2.3.2-6ubuntu1_all.deb
+Size: 8784
+MD5sum: fa1d8161aa475e16423413110209e183
+SHA1: 6781c1afc65ab072ff3dba19b691dcb2d2d49716
+SHA256: a5f5ec31050ba190900d71527717aff06270fd9b6ee93352df745231fc95147c
+Description: X.Org X server -- evdev input driver (development headers)
+ This package provides the development headers for the evdev input driver
+ found in xserver-xorg-input-evdev. Non-developers likely have little use
+ for this package.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-input-evdev driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-input-mouse
+Priority: optional
+Section: x11
+Installed-Size: 160
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.5.0-2build1
+Replaces: xserver-xorg (<< 6.8.2-35)
+Provides: xorg-driver-input, xserver-xorg-input-11
+Depends: libc6 (>= 2.7), xorg-input-abi-11.0, xserver-xorg-core (>= 2:1.8.99.904)
+Filename: pool/main/x/xserver-xorg-input-mouse/xserver-xorg-input-mouse_1.5.0-2build1_amd64.deb
+Size: 56550
+MD5sum: 3a94050557202448e164dc6aa2baa16d
+SHA1: 418432ceb03b803619743c0e90b8afd2c050d595
+SHA256: dec2aef614e6481ac91237e6ad43ef4101ab8d0c12af0281419cece33a1fab40
+Description: X.Org X server -- mouse input driver
+ This package provides the driver for mouse input devices.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-input-mouse driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-input-synaptics
+Priority: optional
+Section: x11
+Installed-Size: 360
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1.2.2-2ubuntu3
+Replaces: xfree86-driver-synaptics (<< 0.14.4-2), xorg-driver-synaptics
+Provides: xfree86-driver-synaptics, xorg-driver-synaptics, xserver-xorg-input-11
+Depends: udev, libc6 (>= 2.4), libpciaccess0, libpixman-1-0, libx11-6, libxi6 (>= 2:1.2.0), xorg-input-abi-11.0, xserver-xorg-core (>= 2:1.8.99.904)
+Suggests: gpointing-device-settings, touchfreeze
+Conflicts: xfree86-driver-synaptics (<< 0.14.4-2), xorg-driver-synaptics
+Filename: pool/main/x/xserver-xorg-input-synaptics/xserver-xorg-input-synaptics_1.2.2-2ubuntu3_amd64.deb
+Size: 157472
+MD5sum: 208387c243ca97b983263f9ad1f997e4
+SHA1: 7c48f093dd3173afac8b7a44729828aad970173c
+SHA256: 9dbf323b790342bb5f3642104003acba7c2ce84279fcebfcafe9802cb872dd21
+Description: Synaptics TouchPad driver for X.Org server
+ This package provides an input driver for the X.Org X server to enable
+ advanced features of the Synaptics Touchpad including:
+ .
+ * Movement with adjustable, non-linear acceleration and speed
+ * Button events through short touching of the touchpad
+ * Double-Button events through double short touching of the touchpad
+ * Dragging through short touching and holding down the finger on the touchpad
+ * Middle and right button events on the upper and lower corner of the touchpad
+ * Vertical scrolling (button four and five events) through moving the finger
+ on the right side of the touchpad
+ * The up/down button sends button four/five events
+ * Horizontal scrolling (button six and seven events) through moving the finger
+ on the lower side of the touchpad
+ * The multi-buttons send button four/five events, and six/seven events for
+ horizontal scrolling
+ * Adjustable finger detection
+ * Multifinger taps: two finger for middle button and three finger for right
+ button events. (Needs hardware support. Not all models implement this
+ feature.)
+ * Run-time configuration using shared memory. This means you can change
+ parameter settings without restarting the X server (see synclient(1)).
+ * It also provides a daemon to disable touchpad while typing at the keyboard
+ and thus avoid unwanted mouse movements (see syndaemon(1)).
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-input-synaptics-dev
+Priority: optional
+Section: libdevel
+Installed-Size: 76
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: all
+Source: xserver-xorg-input-synaptics
+Version: 1.2.2-2ubuntu3
+Depends: x11proto-core-dev
+Filename: pool/main/x/xserver-xorg-input-synaptics/xserver-xorg-input-synaptics-dev_1.2.2-2ubuntu3_all.deb
+Size: 16926
+MD5sum: 96c22d1c68e9037ee97b336edc572869
+SHA1: 8d921f825eaf88f55ca82dcb8271e71c0a3c36da
+SHA256: 62879769c7ea06cc3cc4952a3c80175ffd45a0883c661251ef869b4318132e16
+Description: Synaptics TouchPad driver for X.Org server (development headers)
+ This package contains the development headers for the Synaptics input
+ driver found in xserver-xorg-input-synaptics. Non-developers likely have
+ little use for this package.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-input-vmmouse
+Priority: optional
+Section: x11
+Installed-Size: 172
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:12.6.9-2build1
+Replaces: xserver-xorg (<< 6.8.2-35)
+Provides: xserver-xorg-input-11
+Depends: libc6 (>= 2.7), xorg-input-abi-11.0, xserver-xorg-core (>= 2:1.8.99.904), xserver-xorg-input-mouse, udev
+Filename: pool/main/x/xserver-xorg-input-vmmouse/xserver-xorg-input-vmmouse_12.6.9-2build1_amd64.deb
+Size: 31278
+MD5sum: 3a096dec7240837fec1bcdeece0d3523
+SHA1: 3c881221ccc56d3958d91da676f2ed177a4c31f6
+SHA256: 875498c91b8c3333a3277de41feba8ab9294912604d35aad3b35c3077ed18b5c
+Description: X.Org X server -- VMMouse input driver to use with VMWare
+ This package provides the driver for the X11 vmmouse input device.
+ .
+ The VMMouse driver enables support for the special VMMouse protocol
+ that is provided by VMware virtual machines to give absolute pointer
+ positioning.
+ .
+ The vmmouse driver is capable of falling back to the standard "mouse"
+ driver if a VMware virtual machine is not detected. This allows for
+ dual-booting of an operating system from a virtual machine to real hardware
+ without having to edit xorg.conf every time.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-input-vmmouse driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-input-wacom
+Priority: optional
+Section: x11
+Installed-Size: 308
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Ron Lee <ron@debian.org>
+Architecture: amd64
+Source: xf86-input-wacom
+Version: 1:0.10.8-0ubuntu1
+Replaces: wacom-tools (<< 0.10.0)
+Provides: xorg-driver-input, xserver-xorg-input-11
+Depends: xorg-input-abi-11.0, xserver-xorg-core (>= 2:1.8.99.904), libc6 (>= 2.7), libx11-6, libxi6 (>= 2:1.2.0)
+Suggests: xinput
+Conflicts: wacom-tools (<< 0.10.0)
+Filename: pool/main/x/xf86-input-wacom/xserver-xorg-input-wacom_0.10.8-0ubuntu1_amd64.deb
+Size: 85548
+MD5sum: ac0e00807ae94d5f2f7d23be578abb12
+SHA1: 1c6e1c7c12363517dc956bff94fd3137ccdc9c8f
+SHA256: 185bdca5588688037e8f9303dc3011db4b459c15bd57e14610414a7b6cc31178
+Description: X.Org X server -- Wacom input driver
+ This package provides the X.Org driver for Wacom tablet devices.
+Homepage: http://linuxwacom.sf.net
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-all
+Priority: optional
+Section: x11
+Installed-Size: 24
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xorg
+Version: 1:7.5+6ubuntu3
+Replaces: xserver-xorg-driver-all
+Depends: xserver-xorg-video-apm, xserver-xorg-video-ark, xserver-xorg-video-ati, xserver-xorg-video-chips, xserver-xorg-video-cirrus, xserver-xorg-video-fbdev, xserver-xorg-video-i128, xserver-xorg-video-intel, xserver-xorg-video-mga, xserver-xorg-video-neomagic, xserver-xorg-video-nouveau, xserver-xorg-video-nv, xserver-xorg-video-rendition, xserver-xorg-video-s3, xserver-xorg-video-s3virge, xserver-xorg-video-savage, xserver-xorg-video-siliconmotion, xserver-xorg-video-sis, xserver-xorg-video-sisusb, xserver-xorg-video-tdfx, xserver-xorg-video-trident, xserver-xorg-video-tseng, xserver-xorg-video-vesa, xserver-xorg-video-openchrome, xserver-xorg-video-voodoo, xserver-xorg-video-vmware, x11-common
+Conflicts: xserver-xorg-driver-all
+Filename: pool/main/x/xorg/xserver-xorg-video-all_7.5+6ubuntu3_amd64.deb
+Size: 1146
+MD5sum: f7bc46f83b91857efd62086ccce6e137
+SHA1: 19b30dfd8e98e0dd16921f3715ecc2c4bfef15c0
+SHA256: b70a091c6960244112c79f6ddf7ada8715b316da2b3df7931df86d3234893b08
+Description: the X.Org X server -- output driver metapackage
+ This package depends on the full suite of output drivers for the X.Org X server
+ (Xorg). It does not provide any drivers itself, and may be removed if you wish
+ to only have certain drivers installed.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-apm
+Priority: optional
+Section: x11
+Installed-Size: 220
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.2.3-0ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-apm
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-apm
+Filename: pool/main/x/xserver-xorg-video-apm/xserver-xorg-video-apm_1.2.3-0ubuntu1_amd64.deb
+Size: 75166
+MD5sum: d681c49714651d631bfdce3c8f8b4876
+SHA1: db29d20c5beb03f26d8fd0d0ff3bf6ad984fcde8
+SHA256: 0d0c328570db8eee1445bbd83848a7f7be1c4ef31be629b273758f027347c910
+Description: X.Org X server -- APM display driver
+ This package provides the driver for the Alliance Pro Motion family
+ of video cards; specifically, the 6420, 6422, AT24, AT25, and AT3D
+ cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-apm driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-ark
+Priority: optional
+Section: x11
+Installed-Size: 84
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:0.7.2-2build2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-ark
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-ark
+Filename: pool/main/x/xserver-xorg-video-ark/xserver-xorg-video-ark_0.7.2-2build2_amd64.deb
+Size: 18056
+MD5sum: 2805bc3e42b20b9212e8c2d3e904c8d1
+SHA1: bbdc07c1f02e15ccd22414dc5e6c2f3e389f7427
+SHA256: 683b9c5d142d4a9b21cf3a0a930cddf5ad59b5cff91a134728c9cfd74aabbfd5
+Description: X.Org X server -- ark display driver
+ This package provides the driver for the ark family
+ of chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-ark driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-ati
+Priority: optional
+Section: x11
+Installed-Size: 100
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:6.13.1-1ubuntu4
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), libpciaccess0, xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.905-1ubuntu3), xserver-xorg-video-r128, xserver-xorg-video-mach64, xserver-xorg-video-radeon
+Filename: pool/main/x/xserver-xorg-video-ati/xserver-xorg-video-ati_6.13.1-1ubuntu4_amd64.deb
+Size: 21368
+MD5sum: 91f93ce4df4bc83846763a00ef3c51dc
+SHA1: 47ff08c9ed28c3e3275b0710e373b95608f831a0
+SHA256: 87e558ebd7b1214425eaa4a3afed11a86c39058fee5d19bd19b1ea0f72ff6090
+Description: X.Org X server -- AMD/ATI display driver wrapper
+ This package provides the 'ati' driver for the AMD/ATI Mach64, Rage128,
+ Radeon, FireGL, FireMV, FirePro and FireStream series. This driver is
+ actually a wrapper that loads one of the 'mach64', 'r128' or 'radeon'
+ sub-drivers depending on the hardware.
+ These sub-drivers are brought through package dependencies.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-ati driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-ati-dbg
+Priority: extra
+Section: x11
+Installed-Size: 96
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xserver-xorg-video-ati
+Version: 1:6.13.1-1ubuntu4
+Depends: xserver-xorg-video-ati (= 1:6.13.1-1ubuntu4), xserver-xorg-video-mach64-dbg, xserver-xorg-video-r128-dbg, xserver-xorg-video-radeon-dbg
+Filename: pool/main/x/xserver-xorg-video-ati/xserver-xorg-video-ati-dbg_6.13.1-1ubuntu4_amd64.deb
+Size: 25140
+MD5sum: 79ca46474fe815bc58ade6149c5213f0
+SHA1: 741ef65d6beb94f49213432bfb82dbfeeb70a375
+SHA256: 67c0f463dd9357578395832db8e432344d1639df41f6c80b010acb75b0af998b
+Description: X.Org X server -- AMD/ATI display driver wrapper (debugging symbols)
+ This package provides the 'ati' driver for the AMD/ATI Mach64, Rage128,
+ Radeon, FireGL, FireMV, FirePro and FireStream series. This driver is
+ actually a wrapper that loads one of the 'mach64', 'r128' or 'radeon'
+ sub-drivers depending on the hardware.
+ These sub-drivers are brought through package dependencies.
+ .
+ This package provides debugging symbols for this X.org X driver wrapper
+ and brings debugging symbols for sub-drivers through package dependencies.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-video-chips
+Priority: optional
+Section: x11
+Installed-Size: 236
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.2.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-chips
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-chips
+Filename: pool/main/x/xserver-xorg-video-chips/xserver-xorg-video-chips_1.2.3-1_amd64.deb
+Size: 84812
+MD5sum: 6b6abc6c3922bda0d0c35d24ebbb2edd
+SHA1: 92f73bb35f9f1e22d558c19c7de7c8388abf3702
+SHA256: 6f5dfd337a75db61a82704edbfadd063bce55970f7cfcb875d022d217ed76d09
+Description: X.Org X server -- Chips display driver
+ This package provides the driver for the Chips & Technologies family
+ of video cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-chips driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-cirrus
+Priority: optional
+Section: x11
+Installed-Size: 164
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.3.2-2ubuntu3
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-cirrus
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-cirrus
+Filename: pool/main/x/xserver-xorg-video-cirrus/xserver-xorg-video-cirrus_1.3.2-2ubuntu3_amd64.deb
+Size: 48284
+MD5sum: b206bde81987c40ec2acefafe1d02151
+SHA1: cc2cd0482c1f002901645d52955a64790af677e6
+SHA256: 9c763caf29269b89b60ccd2c338fb282ee035447930366dca03461a9cc95911a
+Description: X.Org X server -- Cirrus display driver
+ This package provides the driver for the Cirrus Logic family of video
+ cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-cirrus driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-fbdev
+Priority: optional
+Section: x11
+Installed-Size: 100
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:0.4.2-2ubuntu2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-fbdev
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-fbdev
+Filename: pool/main/x/xserver-xorg-video-fbdev/xserver-xorg-video-fbdev_0.4.2-2ubuntu2_amd64.deb
+Size: 22766
+MD5sum: c3595fdebc8771a1c1bb46c8ad703204
+SHA1: e6702adf49e636fe1afdecde9734525e39510367
+SHA256: fe8739839a641e80a688ee08c01a9fde82ece14bdde22fcd8d5b2bbed60aa49e
+Description: X.Org X server -- fbdev display driver
+ This package provides the driver for the Linux framebuffer device (aka
+ 'fbdev').
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-fbdev driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-i128
+Priority: optional
+Section: x11
+Installed-Size: 140
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.3.3-2build2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-i128
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-i128
+Filename: pool/main/x/xserver-xorg-video-i128/xserver-xorg-video-i128_1.3.3-2build2_amd64.deb
+Size: 35928
+MD5sum: 92cdb3768406395d7dc38c8d5254a24b
+SHA1: 4dd5b6fab1bec5e81d84d42f03286518fbbb603f
+SHA256: c79f25b4fd0d7e0a731ae32eb1ac376c32a5bf297d96024cc82aee7669e05cbc
+Description: X.Org X server -- i128 display driver
+ This package provides the driver for Number 9 Imagine (I128) video cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-i128 driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-i740
+Priority: optional
+Section: x11
+Installed-Size: 132
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.3.2-2build1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-i740
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.3.4), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-i740
+Filename: pool/main/x/xserver-xorg-video-i740/xserver-xorg-video-i740_1.3.2-2build1_amd64.deb
+Size: 33110
+MD5sum: affdf50d2cb8d927caa1458a00167a04
+SHA1: 72ad34b92111061f3e1c2d9e5e1b2ab5030419e8
+SHA256: a9d0cd04ba1b145ae345d396e8113c5ba9391662e53928407727ab9886cb6083
+Description: X.Org X server -- i740 display driver
+ This package provides the driver for the Intel i740 family of video chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-i740 driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-video-intel
+Priority: optional
+Section: x11
+Installed-Size: 1020
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 2:2.12.0-1ubuntu3
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-i810, xserver-xorg-video-i810 (<< 2:1.9.91-1), xserver-xorg-video-i810-modesetting, xserver-xorg-video-intel-modesetting
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), libdrm-intel1 (>= 2.4.21), libdrm2 (>= 2.4.17), libpciaccess0 (>= 0.8.0+git20071002), libx11-6, libx11-xcb1, libxcb-aux0 (>= 0.3.6), libxcb-dri2-0, libxcb1, libxext6, libxfixes3 (>= 1:4.0.1), libxv1, libxvmc1, xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Recommends: intel-gpu-tools
+Conflicts: 915resolution, xserver-xorg-driver-i810, xserver-xorg-video-i810 (<< 2:1.9.91-1), xserver-xorg-video-i810-modesetting, xserver-xorg-video-intel-modesetting
+Filename: pool/main/x/xserver-xorg-video-intel/xserver-xorg-video-intel_2.12.0-1ubuntu3_amd64.deb
+Size: 263918
+MD5sum: 982a8ed2c2b4499d6515cbd0ed345d4c
+SHA1: 0a364cdb73efc9229517d4f15c8fd2e07d81d76b
+SHA256: 570204fc03af24bdb3a5ed733b85575e519060719807d0f841c02d619b5041b6
+Description: X.Org X server -- Intel i8xx, i9xx display driver
+ This package provides the driver for the Intel i8xx and i9xx family
+ of chipsets, including i810, i815, i830, i845, i855, i865, i915, i945
+ and i965 series chips.
+ .
+ This package also provides XvMC (XVideo Motion Compensation) drivers
+ for i810/i815 and i9xx and newer chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-intel driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-intel-dbg
+Priority: extra
+Section: x11
+Installed-Size: 2012
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xserver-xorg-video-intel
+Version: 2:2.12.0-1ubuntu3
+Depends: xserver-xorg-video-intel (= 2:2.12.0-1ubuntu3)
+Recommends: intel-gpu-tools
+Filename: pool/main/x/xserver-xorg-video-intel/xserver-xorg-video-intel-dbg_2.12.0-1ubuntu3_amd64.deb
+Size: 852222
+MD5sum: 1e2b9de8e535a1e79e28c0b365530054
+SHA1: e62911adc3695e111d21f152ee5d443f3388191d
+SHA256: ec72365988119977ae92c7ed651773a2d46db2654e645b3bd9f4d894b0cc9230
+Description: X.Org X server -- Intel i8xx, i9xx display driver (debug symbols)
+ This driver provides support for the Intel i8xx and i9xx family of chipsets,
+ including i810, i815, i830, i845, i855, i865, i915, and i945 series chips.
+ .
+ This package provides debugging symbols for this Xorg X driver.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-video-mach64
+Priority: optional
+Section: x11
+Installed-Size: 388
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 6.8.2-3build2
+Replaces: xserver-xorg-video-ati (<= 1:6.8.0-1)
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-video-ati (<= 1:6.8.0-1)
+Filename: pool/main/x/xserver-xorg-video-mach64/xserver-xorg-video-mach64_6.8.2-3build2_amd64.deb
+Size: 212368
+MD5sum: 293e572c7b07db7242cc3c90053ae082
+SHA1: 18236fb1abc2d6077ea9e9c2a60d0a7c7faa7723
+SHA256: 6f9f3276cdc916e4808db47b61d93ef8ff1f60f4f0bc95521446d2d448018f14
+Description: X.Org X server -- ATI Mach64 display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for the ATI Mach64 series.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-mach64 driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-mach64-dbg
+Priority: extra
+Section: x11
+Installed-Size: 1916
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xserver-xorg-video-mach64
+Version: 6.8.2-3build2
+Depends: xserver-xorg-video-mach64 (= 6.8.2-3build2)
+Filename: pool/main/x/xserver-xorg-video-mach64/xserver-xorg-video-mach64-dbg_6.8.2-3build2_amd64.deb
+Size: 949534
+MD5sum: 13879b58283b1afc6760cd9fe90dd1e1
+SHA1: 81fc81d66378f12d7e98cbd1fb82ead8ac22217f
+SHA256: ac66a5f2d697a533727a95d07bafe0416053af8815786c4e10fa2e1479887586
+Description: X.Org X server -- ATI display driver (debugging symbols)
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for the ATI Mach64 series.
+ .
+ This package provides debugging symbols for the Xorg X server ATI Mach64
+ display driver.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-video-mga
+Priority: optional
+Section: x11
+Installed-Size: 284
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.4.11.dfsg-4build1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-mga
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.7), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Suggests: firmware-linux
+Conflicts: xserver-xorg-driver-mga
+Filename: pool/main/x/xserver-xorg-video-mga/xserver-xorg-video-mga_1.4.11.dfsg-4build1_amd64.deb
+Size: 116770
+MD5sum: e7aad613e6d8566daee31386aaba9409
+SHA1: 7c9cdddc5eb80d338164e5c5c34337d82b9ca687
+SHA256: a7a02db1b18fb648cbe723666705128b912f97c12b0d471049f2b841ea248077
+Description: X.Org X server -- MGA display driver
+ This package provides the driver for the Matrox MGA family of chipsets,
+ including Matrox Millennium and Mystique cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-mga driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-neomagic
+Priority: optional
+Section: x11
+Installed-Size: 156
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.2.4-3build2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-neomagic
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-neomagic
+Filename: pool/main/x/xserver-xorg-video-neomagic/xserver-xorg-video-neomagic_1.2.4-3build2_amd64.deb
+Size: 46042
+MD5sum: 883c95770dec8473fc44f0560937bde6
+SHA1: 47add4ef96ffcd0eab086fb5c09412e769088ae3
+SHA256: f560066d2d7de1ba74b71382169f6a2402308822f1a07fbc5bbad30a3b99d846
+Description: X.Org X server -- Neomagic display driver
+ This package provides the driver for Neomagic MagicGraph chipsets, which are
+ commonly found in laptops.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-neomagic driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-nouveau
+Priority: optional
+Section: x11
+Installed-Size: 304
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:0.0.16+git20100805+b96170a-0ubuntu1
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), libdrm-nouveau1 (>= 2.4.20-3~), libudev0 (>= 147), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Filename: pool/main/x/xserver-xorg-video-nouveau/xserver-xorg-video-nouveau_0.0.16+git20100805+b96170a-0ubuntu1_amd64.deb
+Size: 113304
+MD5sum: ade4a7afa72b9bfcea0cdaee5d18472e
+SHA1: f1cd5716bc00ffb0e55897a7aa9047a7537b9f42
+SHA256: 3f8a7eda416f6324495a74a04f3868a1251a1a4caa8ec002421adc0ec31268dc
+Description: X.Org X server -- Nouveau display driver (experimental)
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for NVIDIA Riva, TNT, GeForce, and Quadro cards.
+ .
+ Although the nouveau project aims to provide full 3D support it is not yet
+ complete, and these packages do not include any 3D support.
+ Users requiring 3D support should use the non-free "nvidia" driver.
+ .
+ This package is built from the FreeDesktop.org xf86-video-nouveau driver.
+Homepage: http://nouveau.freedesktop.org/wiki/
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-nouveau-dbg
+Priority: extra
+Section: debug
+Installed-Size: 1252
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xserver-xorg-video-nouveau
+Version: 1:0.0.16+git20100805+b96170a-0ubuntu1
+Depends: xserver-xorg-video-nouveau (= 1:0.0.16+git20100805+b96170a-0ubuntu1)
+Filename: pool/main/x/xserver-xorg-video-nouveau/xserver-xorg-video-nouveau-dbg_0.0.16+git20100805+b96170a-0ubuntu1_amd64.deb
+Size: 522694
+MD5sum: d50e53f1832e2acd58ad5adc7c324a5a
+SHA1: 774ad386ef1cff56b346cde3b4c99d10f2bf2f93
+SHA256: 0e910561ac3913123fbaf1b8223f01d30c251138e7ba483e5ab77eb436988173
+Description: X.Org X server -- Nouveau display driver (debug symbols)
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for NVIDIA Riva, TNT, GeForce, and Quadro cards.
+ .
+ Although the nouveau project aims to provide full 3D support it is not yet
+ complete, and these packages do not include any 3D support.
+ Users requiring 3D support should use the non-free "nvidia" driver.
+ .
+ This package provides debugging symbols for this Xorg X driver.
+Homepage: http://nouveau.freedesktop.org/wiki/
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-video-nv
+Priority: optional
+Section: x11
+Installed-Size: 288
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:2.1.17-3ubuntu3
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-nv, xserver-xorg-video-riva128
+Provides: xf86-video-driver-riva128, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), libdrm2 (>= 2.4.3), libpciaccess0 (>= 0.8.0+git20071002), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-nv, xserver-xorg-video-riva128
+Filename: pool/main/x/xserver-xorg-video-nv/xserver-xorg-video-nv_2.1.17-3ubuntu3_amd64.deb
+Size: 117648
+MD5sum: a04ed6409ff5fd3fb7beb30d922bb046
+SHA1: e817cab78e016a3c585ea77cb45f6de6b77a743a
+SHA256: 20a3fec830cf7ccafa31daf06a998fa550ed909359c4cf1f9590bd634030566e
+Description: X.Org X server -- NV display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for NVIDIA Riva, TNT, GeForce, and Quadro cards.
+ .
+ Note that this is not the same as the binary-only 'nvidia' driver, which
+ adds 3D support, but is binary-only and not supported.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-nv driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-openchrome
+Priority: optional
+Section: x11
+Installed-Size: 572
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:0.2.904+svn842-0ubuntu1
+Replaces: libchromexvmc1, libchromexvmcpro1
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), libdrm2 (>= 2.3.1), libx11-6, libxext6, libxv1, libxvmc1, xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: libchromexvmc1, libchromexvmcpro1
+Filename: pool/main/x/xserver-xorg-video-openchrome/xserver-xorg-video-openchrome_0.2.904+svn842-0ubuntu1_amd64.deb
+Size: 195642
+MD5sum: 6b7ba8d6cea0d091c85c8677f57711df
+SHA1: 8aa58956d76f4177b30a64c2e36ad379371f3e93
+SHA256: 31476e9de3305a4c069f922a452be791f0ae8f015407125f8c09eeb6eebca0aa
+Description: X.Org X server -- VIA display driver
+ OpenChrome is a project for the development of free and open-source drivers
+ for the VIA UniChrome video chipsets.
+ .
+ Originally called the 'snapshot' release, since it was a snapshot of an
+ experimental branch of the unichrome cvs code, this is a continued development
+ of the open source unichrome driver (from http://unichrome.sf.net) which
+ also incorporates support for the unichrome-pro chipsets.
+ .
+ Support for hardware acceleration (XvMC) for all chipsets has subsequently
+ been ripped out of the unichrome.sf.net driver. Therefore your only option if
+ you wish to make use of the acceleration features of your VIA chip with free
+ and open-source drivers is to use this version of the driver.
+Homepage: http://www.openchrome.org
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-r128
+Priority: optional
+Section: x11
+Installed-Size: 320
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 6.8.1-3build1
+Replaces: xserver-xorg-video-ati (<= 1:6.8.0-1)
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.7), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Suggests: firmware-linux
+Conflicts: xserver-xorg-video-ati (<= 1:6.8.0-1)
+Filename: pool/main/x/xserver-xorg-video-r128/xserver-xorg-video-r128_6.8.1-3build1_amd64.deb
+Size: 179372
+MD5sum: bb1ced7f07b0df67f771005e2c778eb4
+SHA1: 622c864794e968edab180a122b7b158e0b8643b2
+SHA256: b3361b85020d8be4c3354872882c42debdc8d00a95a5ba6512c6418582334ae6
+Description: X.Org X server -- ATI r128 display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for the ATI Rage 'r128' series.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-r128 driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-r128-dbg
+Priority: extra
+Section: x11
+Installed-Size: 644
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xserver-xorg-video-r128
+Version: 6.8.1-3build1
+Depends: xserver-xorg-video-r128 (= 6.8.1-3build1)
+Filename: pool/main/x/xserver-xorg-video-r128/xserver-xorg-video-r128-dbg_6.8.1-3build1_amd64.deb
+Size: 331644
+MD5sum: 53ba42b5e97d8ae41a1d0d28cbd9d737
+SHA1: 69d657096949d9028c2226e8af5facba4e7cf046
+SHA256: 2976cecbb0ad4f2837c801d3e5ef1791bf25743d7c5724e901538820aca6c64e
+Description: X.Org X server -- ATI r128 display driver (debugging symbols)
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for the ATI Rage 'r128' series.
+ .
+ This package provides debugging symbols for the Xorg X server ATI r128
+ display driver.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-video-radeon
+Priority: optional
+Section: x11
+Installed-Size: 1336
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xserver-xorg-video-ati
+Version: 1:6.13.1-1ubuntu4
+Replaces: xserver-xorg-video-ati (<= 1:6.8.191-1)
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.7), libdrm-radeon1 (>= 2.4.17), libdrm2 (>= 2.4.16), libpciaccess0 (>= 0.10.2), libpixman-1-0, libudev0 (>= 147), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.905-1ubuntu3)
+Suggests: firmware-linux
+Filename: pool/main/x/xserver-xorg-video-ati/xserver-xorg-video-radeon_6.13.1-1ubuntu4_amd64.deb
+Size: 446340
+MD5sum: 5cbd60724971234d437d66152bd6f53d
+SHA1: 001f849426d1a04ce69ead3311ad72fa8a218223
+SHA256: b8ff48845a3c7ff814e3d3bd80e61d0c26d79deb8cde03f38462eb0be60060ab
+Description: X.Org X server -- AMD/ATI Radeon display driver
+ This package provides the 'radeon' driver for the AMD/ATI Radeon, FireGL,
+ FireMV, FirePro and FireStream series.
+ .
+ Note that this is not the same as the ATI-provided, binary-only, 'fglrx'
+ driver, which provides additional 3D functionality for some newer Radeon
+ cards, but is not supported.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-ati driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-radeon-dbg
+Priority: extra
+Section: x11
+Installed-Size: 3636
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Source: xserver-xorg-video-ati
+Version: 1:6.13.1-1ubuntu4
+Replaces: xserver-xorg-video-ati-dbg (<= 1:6.8.191-1)
+Depends: xserver-xorg-video-radeon (= 1:6.13.1-1ubuntu4)
+Filename: pool/main/x/xserver-xorg-video-ati/xserver-xorg-video-radeon-dbg_6.13.1-1ubuntu4_amd64.deb
+Size: 1622426
+MD5sum: 578f8055b90f4fffb4470536d0ee3816
+SHA1: ba25bf44d4db7e252452657beb9815fe498dc34b
+SHA256: 318952ff7e6ee96d41736388ba0aaab4c50de8faecb5263c7290ee761a926248
+Description: X.Org X server -- AMD/ATI Radeon display driver (debugging symbols)
+ This package provides the 'radeon' driver for the AMD/ATI Radeon, FireGL,
+ FireMV, FirePro and FireStream series.
+ .
+ This package provides debugging symbols for this X.org X driver.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+
+Package: xserver-xorg-video-rendition
+Priority: optional
+Section: x11
+Installed-Size: 116
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:4.2.4-0ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-rendition
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-rendition
+Filename: pool/main/x/xserver-xorg-video-rendition/xserver-xorg-video-rendition_4.2.4-0ubuntu1_amd64.deb
+Size: 32006
+MD5sum: 040f0b377d623d40fd33d3befcb12e77
+SHA1: a76e9747761a5225808bf96fcefdb0196d7c2540
+SHA256: 227537a5f5635d56e1b28f5455dda40ec01fbda04e67a6aab956cb455046dc16
+Description: X.Org X server -- Rendition display driver
+ This package provides the driver for the Rendition Verite family of chipsets,
+ commonly found in 3D accelerators such as the Creative 3D Blaster.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-rendition driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-s3
+Priority: optional
+Section: x11
+Installed-Size: 148
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:0.6.3-2build2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-s3
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-s3
+Filename: pool/main/x/xserver-xorg-video-s3/xserver-xorg-video-s3_0.6.3-2build2_amd64.deb
+Size: 43636
+MD5sum: 0318e0c20f32816e993115dcc15a9b6b
+SHA1: ff75f22d1054d73260f0968fd22ff978be6b215a
+SHA256: 04ccbe465f03732a9a30d80527dada04197035d2cde298e1dbc13bc2dc57f57e
+Description: X.Org X server -- legacy S3 display driver
+ This package provides the driver for certain legacy S3 video card chipsets,
+ including the Trio64 and 96x cards. It does not provide support for
+ ViRGE/Trio3D or Savage chipsets; support for these cards is provided by
+ xserver-xorg-video-s3virge and xserver-xorg-driver-savage, respectively.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-s3 driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-s3virge
+Priority: optional
+Section: x11
+Installed-Size: 160
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.10.4-2build2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-s3virge
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-s3virge
+Filename: pool/main/x/xserver-xorg-video-s3virge/xserver-xorg-video-s3virge_1.10.4-2build2_amd64.deb
+Size: 48792
+MD5sum: 3da2e57ba1ae98bfe73473416ff030f5
+SHA1: 3296574523259de9c62dbbf771584b94f8d519c0
+SHA256: 0c4604ad77d36b8913e602372f1c4721c3ae8b2a187d2b3583ce4d53bba29e60
+Description: X.Org X server -- S3 ViRGE display driver
+ This package provides the driver for the S3 ViRGE and Trio3D family
+ of chipsets. It does not support Trio64 or S3 96x cards; support for
+ these can be found in the xserver-xorg-video-s3 package. Support for
+ S3 Savage chipsets can be found in xserver-xorg-video-savage.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-s3virge driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-savage
+Priority: optional
+Section: x11
+Installed-Size: 240
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:2.3.1-2ubuntu2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-savage
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.3.4), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-savage
+Filename: pool/main/x/xserver-xorg-video-savage/xserver-xorg-video-savage_2.3.1-2ubuntu2_amd64.deb
+Size: 94910
+MD5sum: a57a30c861246f6c6d7bae87749bda30
+SHA1: aee96ab1c5817f881f7c30613efb6ff6c61590d4
+SHA256: 2465340a5607ff72b7088a4ad7a2f7254f02c4d17d0438c2823ff76c9ec5b01e
+Description: X.Org X server -- Savage display driver
+ This package provides the driver for the S3/VIA Savage/ProSavage/Twister family
+ of chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-savage driver module.
+Orig-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-siliconmotion
+Priority: optional
+Section: x11
+Installed-Size: 224
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.7.4-0ubuntu2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-siliconmotion
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.7), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-siliconmotion
+Filename: pool/main/x/xserver-xorg-video-siliconmotion/xserver-xorg-video-siliconmotion_1.7.4-0ubuntu2_amd64.deb
+Size: 89322
+MD5sum: 67bb40a85964b18216c30594cd260a6a
+SHA1: 39647585477ce517ce094fa346879cbe6c68a8f8
+SHA256: 9459d2f7d0be571881e18b7e24dae010f5a4d0c8210ea4bab306e476f77b7e63
+Description: X.Org X server -- SiliconMotion display driver
+ This package provides the driver for the SiliconMotion Lynx and Cougar family
+ of chipsets, commonly found in laptops.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-siliconmotion driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-sis
+Priority: optional
+Section: x11
+Installed-Size: 672
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:0.10.3-1build1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-sis
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.7), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-sis
+Filename: pool/main/x/xserver-xorg-video-sis/xserver-xorg-video-sis_0.10.3-1build1_amd64.deb
+Size: 297044
+MD5sum: 57f26ef639f3bc4dffce2e631f5edab3
+SHA1: fbeb26493846b2bd9f0dd306f411ded6b15e367a
+SHA256: b391011332abdff5241f0bef9b295a981d0f12ed575b34827cca3d22809b1d5a
+Description: X.Org X server -- SiS display driver
+ This package provides the driver for all SiS and XGI Volari cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-sis driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-sisusb
+Priority: optional
+Section: x11
+Installed-Size: 156
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:0.9.4-0ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-sisusb
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.7), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-sisusb
+Filename: pool/main/x/xserver-xorg-video-sisusb/xserver-xorg-video-sisusb_0.9.4-0ubuntu1_amd64.deb
+Size: 49900
+MD5sum: e17bb0f9c542a826ae6ae9364e4651c0
+SHA1: 695515870f6b7c19e9e2b9a2c6aa63d188f9f0a3
+SHA256: fd6cfff10a85c55661e29b91aec99f538940d5cf55dc9fa138ea0dc83fda5b47
+Description: X.Org X server -- SiS USB display driver
+ This package provides the driver for SiS USB-attached video devices.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-sisusb driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-tdfx
+Priority: optional
+Section: x11
+Installed-Size: 152
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.4.3-2build2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-tdfx
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-tdfx
+Filename: pool/main/x/xserver-xorg-video-tdfx/xserver-xorg-video-tdfx_1.4.3-2build2_amd64.deb
+Size: 46392
+MD5sum: 0adaf52a840699116197b796a8eb5492
+SHA1: f2026af7d453518705f049ef9750ba3f08df1c62
+SHA256: 620e5143574d0820641004e9c386748c35344bb3ec95833d884685c022dabe87
+Description: X.Org X server -- tdfx display driver
+ This package provides the driver for 3dfx Voodoo video cards and their
+ derivatives.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-tdfx driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-trident
+Priority: optional
+Section: x11
+Installed-Size: 244
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.3.4-0ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-trident
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.7), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-trident
+Filename: pool/main/x/xserver-xorg-video-trident/xserver-xorg-video-trident_1.3.4-0ubuntu1_amd64.deb
+Size: 82352
+MD5sum: 5389ff7eb1757dda92a35b8cec818b23
+SHA1: f731b2a951e5a64b990ddd88275a9158ddfdee30
+SHA256: 9757b882d296eed853c152d79546ad61eec9162abe0f32007dfa666c774cb408
+Description: X.Org X server -- Trident display driver
+ This package provides the driver for Trident Blade/Image/ProVidia/TGUI/9xxx
+ video cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-trident driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-tseng
+Priority: optional
+Section: x11
+Installed-Size: 136
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.2.4-0ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-tseng
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-tseng
+Filename: pool/main/x/xserver-xorg-video-tseng/xserver-xorg-video-tseng_1.2.4-0ubuntu1_amd64.deb
+Size: 37086
+MD5sum: 49454fcbc2be113329a7d7c4baa451ec
+SHA1: ba126de1cb3ce5f3348de11bc2aa5656b59b1e63
+SHA256: 66b15338b13dd04c4f987326103b14f647824c368f197db5cdbd4e8038b4e764
+Description: X.Org X server -- Tseng display driver
+ This package provides the driver for Tseng Labs cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-tseng driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-vesa
+Priority: optional
+Section: x11
+Installed-Size: 108
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:2.3.0-3build1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-vesa
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), libdrm2 (>= 2.4.3), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-vesa
+Filename: pool/main/x/xserver-xorg-video-vesa/xserver-xorg-video-vesa_2.3.0-3build1_amd64.deb
+Size: 27648
+MD5sum: 11f9542a9848c934781ff4c7e526b4eb
+SHA1: 7d04bd52102ba4bc279121dda3b23bf0bb365494
+SHA256: 8960650901beb1b9cebae21d4f7c505039b4e8b584acf7d495948d8c064c078a
+Description: X.Org X server -- VESA display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ uses the standard VESA interface provided on all video cards, but runs
+ unaccelerated. This driver is not recommended for use unless you have a
+ problem with the normal driver for your card, because it will peform very
+ badly.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-vesa driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-vmware
+Priority: optional
+Section: x11
+Installed-Size: 148
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:11.0.1-2build1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-vmware
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.4), libdrm2 (>= 2.3.1), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-vmware
+Filename: pool/main/x/xserver-xorg-video-vmware/xserver-xorg-video-vmware_11.0.1-2build1_amd64.deb
+Size: 46210
+MD5sum: 324e418b02bfaab852d05363b63beb7b
+SHA1: 533ba227f0c038e7f4eb63689fb27ab48c8a3915
+SHA256: 5a9910e91c7f0c6c51bbbd93b95a933a13e14412b0c5d10d6c6d406acf036835
+Description: X.Org X server -- VMware display driver
+ This package provides the driver for VMware client sessions, i.e. if Linux
+ is running inside a VMware session.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-vmware driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
+
+Package: xserver-xorg-video-voodoo
+Priority: optional
+Section: x11
+Installed-Size: 104
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: amd64
+Version: 1:1.2.4-0ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-voodoo
+Provides: xorg-driver-video, xserver-xorg-video-8
+Depends: libc6 (>= 2.2.5), xorg-video-abi-8.0, xserver-xorg-core (>= 2:1.8.99.904)
+Conflicts: xserver-xorg-driver-voodoo
+Filename: pool/main/x/xserver-xorg-video-voodoo/xserver-xorg-video-voodoo_1.2.4-0ubuntu1_amd64.deb
+Size: 25076
+MD5sum: 8fc0fa8abb44151231be76434bf3451e
+SHA1: cb618ff8a5eff6389aa660f5a51643ed3ba8b3d6
+SHA256: dfdda11e40c533f6636084385882d114347336766e7fc4bb14f515df5b858982
+Description: X.Org X server -- Voodoo display driver
+ This package provides the driver for 3dfx Voodoo1 and Voodoo2 chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ .
+ This package is built from the X.org xf86-video-voodoo driver module.
+Bugs: https://bugs.launchpad.net/ubuntu/+filebug
+Origin: Ubuntu
+Supported: 18m
+Task: ubuntu-desktop, ubuntu-uec-live, kubuntu-desktop, kubuntu-mobile, kubuntu-netbook, edubuntu-desktop, edubuntu-uec-live, xubuntu-desktop, mythbuntu-backend-master, mythbuntu-backend-slave, mythbuntu-desktop, mythbuntu-frontend, ubuntu-netbook
diff --git a/test/integration/Packages-xorg-break-providers b/test/integration/Packages-xorg-break-providers
new file mode 100644
index 0000000..f6e1d81
--- /dev/null
+++ b/test/integration/Packages-xorg-break-providers
@@ -0,0 +1,52 @@
+Package: xserver-xorg-video-intel
+Priority: optional
+Section: x11
+Installed-Size: 1292
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Version: 2:2.13.901-2
+Provides: xserver-xorg-video-8
+Filename: pool/main/x/xserver-xorg-video-intel/xserver-xorg-video-intel_2.13.901-2_i386.deb
+Size: 586964
+MD5sum: 72527f4b2c9d734e53202736e3177865
+Description: X.Org X server -- Intel i8xx, i9xx display driver
+
+Package: xserver-xorg-video-vesa
+Priority: optional
+Section: x11
+Installed-Size: 104
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Version: 1:2.3.0-4
+Provides: xserver-xorg-video-8
+Filename: pool/main/x/xserver-xorg-video-vesa/xserver-xorg-video-vesa_2.3.0-4_i386.deb
+Size: 27158
+MD5sum: 77bf2935c40b3b7739d431930e53d185
+Description: X.Org X server -- VESA display driver
+
+Package: xserver-xorg-video-vesa
+Priority: optional
+Section: x11
+Installed-Size: 104
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Version: 1:2.3.0-3
+Provides: xserver-xorg-video-6
+Filename: pool/main/x/xserver-xorg-video-vesa/xserver-xorg-video-vesa_2.3.0-3_i386.deb
+Size: 27122
+MD5sum: 0cd97be927c7d75f2a7230739f8f866c
+Description: X.Org X server -- VESA display driver
+
+Package: xserver-xorg-core
+Priority: optional
+Section: x11
+Installed-Size: 4436
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: xorg-server
+Version: 2:1.7.7-8
+Breaks: xserver-xorg-video-6
+Filename: pool/main/x/xorg-server/xserver-xorg-core_1.7.7-8_i386.deb
+Size: 2405050
+MD5sum: 976ddb13473e52903dd839d1f7ec390b
+Description: Xorg X server - core server
diff --git a/test/integration/apt.pem b/test/integration/apt.pem
new file mode 100644
index 0000000..f48df05
--- /dev/null
+++ b/test/integration/apt.pem
@@ -0,0 +1,49 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCt4R1Q2oYF6utL
+19GBhnlHW8L2BI7PRFWge/ZpqIZWsaFcb30FV86Z6aXXZmgfEJ2814ZZYD1IKeCe
+JsJpns7B4vYe1v64r995ZNBQAAKIYjICkKZOBgOphV+ChBfrCctVXgfLbMP6iBdH
+J02wHzSCCdZm0sdVl9tB5l/OyJU8Mb4KB3btBhfZfY2M6lU+FOjcXs1LOduUrv7K
+fZ+DEalvVGkomLtHtD0qb2vkqFrTjVCkziUVWhhxFFflt08oQ01Clxpl+uv7rOQo
+jtkJ1LrMuv7iPfaZ/z3qLiFxZYG1BCGEwTOKCtJo6bgFzXiN3q7Q5FFlmv851x2J
+Dn8C7Qm7AgMBAAECggEAE3q6vAofJZ6Ryadd8zLLd3ESQFl2XkX7icUZb/DPS/sO
+ZrqeuPCDVr7UM3NnisNjyHoktPKRKvp2DYGuGgMOiq4QgJf5ZVten8zpgWze28SU
+cbEe0HLgCifE8Ww2+b/ZJbEpEmMW+YQxh2khzO9SBJdxi4dliXM/vvw+E35pKZsB
+s6glrz6VQAxxa9fY4fLnB2DafHy+pUvRVw8gC6PCM9jXN9tMYAqztsJu7aaanNyT
+HX2UDWa8hxVx6t5UQZuxvst9N+RcEwmVCR2qlfZt/VRBRibBm62crEKbTD00mNHQ
+4AIDn3g6Y3SXpDlgtNpjLyBL3fODPIwqwGdblaSKkQKBgQDYXecu0Eda7kbR5ciW
+IAn8XOxsBIkkh8YVl2gRiiajRVoeiYBHaW9TyuQiaWrftiDQxB/N4G2focTXy/7O
+VJn6e/SUoO/ZGRw2GbTxLUQptgvFsejYCcW9XpC8MCwE/y2swiY7JM0WR8cV2nCk
+a/Cls6f1LjL13aFO0PAorEcahQKBgQDNuth6EHZVwfDgUuqhRw4HIIpfsfiA3UOd
+b5k/NsfQIev1YUqnfucgInNPDq2Jf8eTQw3TKaszo2DCjDffCsEgM09Tym143Bd6
+AsMuqAStsE3IEC7pnmh95l29/7mh4OuG5cp5JUx0Pi5PkuJ6ywA8P1rM1MB9Zf52
+NGJCo1pnPwKBgQCx/n4i+uDYo1DLd/dN2UmdvGwaaJjR3ohMVuQcGcSzaGg82u0W
+0lvtWOnYjVSIeXIBjHaFjW1hd1lSFdWms96AO9z3MHZf6NJWh0tdZNnAXqzMlBFz
+OIbdxJ/Y0OBFtA9FIesFmL7G54GWLr+f49Ry3Jr9jmYJ8au0BRqsux07aQKBgC4q
+CT2KyCMCO/z6XjAGc71hres/UlYIUI3ZZvfqYPfxRLNxO4FOVqq9UEajMomyJKSE
+3WtO5F3YAXRmZnskPKXvHZPdzqbaLGJykD298h7PewSzrPM7WpM1yD9ETPFoOTGy
+CrcYiYlkEpxEh5GqT8k1JjjkXLVG18zKgGoXocedAoGAQyU2DCNfxwzIJfFHKZEG
+zpni72cR68Tu3AhW/38vMR2ZPca4KzXrUA52T+j7vkQC38LHm/mzNXNP7Vya0PJ3
+WoYOcLtg2uFPh0P/35ArEzuNooLsvulgg1jsamPbF8KAvJZKZHr30hlC/JGYSBbV
+bnkzJTShsKzHIUiLtQ8Ja+E=
+-----END PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIJAJ39xapQo0vLMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
+BAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMRswGQYDVQQKDBJBUFQgVGVzdGNh
+c2VzIEdtYkgxEjAQBgNVBAMMCWxvY2FsaG9zdDAgFw0xMzA5MTYwODQ4MzVaGA80
+NzUxMDgxMzA4NDgzNVowUzELMAkGA1UEBhMCREUxEzARBgNVBAgMClNvbWUtU3Rh
+dGUxGzAZBgNVBAoMEkFQVCBUZXN0Y2FzZXMgR21iSDESMBAGA1UEAwwJbG9jYWxo
+b3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAreEdUNqGBerrS9fR
+gYZ5R1vC9gSOz0RVoHv2aaiGVrGhXG99BVfOmeml12ZoHxCdvNeGWWA9SCngnibC
+aZ7OweL2Htb+uK/feWTQUAACiGIyApCmTgYDqYVfgoQX6wnLVV4Hy2zD+ogXRydN
+sB80ggnWZtLHVZfbQeZfzsiVPDG+Cgd27QYX2X2NjOpVPhTo3F7NSznblK7+yn2f
+gxGpb1RpKJi7R7Q9Km9r5Kha041QpM4lFVoYcRRX5bdPKENNQpcaZfrr+6zkKI7Z
+CdS6zLr+4j32mf896i4hcWWBtQQhhMEzigrSaOm4Bc14jd6u0ORRZZr/OdcdiQ5/
+Au0JuwIDAQABo1AwTjAdBgNVHQ4EFgQUhd26E7ykEYRTDbgMzkYtFtENhSkwHwYD
+VR0jBBgwFoAUhd26E7ykEYRTDbgMzkYtFtENhSkwDAYDVR0TBAUwAwEB/zANBgkq
+hkiG9w0BAQUFAAOCAQEAWcyMKi0Vc4beGV7w4Qft0/2P68jjMlQRdgkz+gGXbMVr
+//KhqR3PbgFmHHpUsZ718AHeerNNdfFzOUptiAiOqH2muyAGdeWCxJ8KcU0sic8x
+/h3TOzMYfEozhgMSJp9YW1z655uHcb15S7jb4zZwXwGyQzxwXT35SKj2mCqSbjIb
+G987DGI+MtyoGRXhIwnBEsGTI1ck3NoeXBJ/tS/Ma8gUUC2xldMSprtHjeUHvZV2
+iz/HTqGlMLGW96AVeZiFNiC1fJ6pvref2XW5MkkvQm8tOi2cSrwJc9CgnCpCxkLp
+liRsbwAduwkA26XzEomMR7yyYS5pm0Eu0cO9X39FKQ==
+-----END CERTIFICATE-----
diff --git a/test/integration/cachedb-lp1274466-old-format.db b/test/integration/cachedb-lp1274466-old-format.db
new file mode 100644
index 0000000..88da5f1
--- /dev/null
+++ b/test/integration/cachedb-lp1274466-old-format.db
Binary files differ
diff --git a/test/integration/create-test-data b/test/integration/create-test-data
new file mode 100755
index 0000000..eff2ba5
--- /dev/null
+++ b/test/integration/create-test-data
@@ -0,0 +1,60 @@
+#!/bin/sh
+set +e # its okay to fail in these script, most of the time the apt* stuff will generate errors
+
+if [ -z "$1" -o -z "$2" ]; then
+ echo "Usage: $0 file codename pkg…"
+ exit 1
+fi
+
+CHECK_ARGS='no'
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+find_project_binary_dir
+BUILDDIRECTORY="${APT_INTEGRATION_TESTS_BUILD_DIR:-"${PROJECT_BINARY_DIR}/cmdline"}"
+
+GENERATE="$1"
+CODENAME="$2"
+shift 2
+
+WORKDIR="$(mktemp -d)"
+cleanupworkdir() {
+ if [ -z "$WORKDIR" ]; then return; fi
+ rm -rf "$WORKDIR"
+}
+trap "cleanupworkdir;" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
+touch "$WORKDIR/status"
+TMPGEN="$WORKDIR/Packages"
+export LANG=C.UTF-8
+
+aptgetinstall() {
+ aptget install "$@" --no-install-recommends -t "$CODENAME" -s \
+ -o Dir::state::status="$WORKDIR/status" \
+ -o Dir::Cache="$WORKDIR" \
+ -o pkgCacheGen::Essential=none \
+ -o APT::Immediate-Configure=0
+}
+LISTOFPKGS="$(aptgetinstall "$@" 2> /dev/null | awk '/^Inst/ {print $2}' | sed -e "s#\$#/$CODENAME#")"
+if [ -z "$LISTOFPKGS" ]; then
+ echo "List of packages is empty: run apt-get install command again for you now"
+ aptgetinstall
+ exit 1
+fi
+aptcache show $LISTOFPKGS --no-all-versions 2> "$WORKDIR/error.lst" | sed -e '/^ / d' \
+ -e '/^SHA1: / d' -e '/^SHA256: / d' \
+ -e '/^Homepage: / d' -e '/^Tag: / d' \
+ -e '/^Xul-Appid: / d' \
+ -e '/^Status: / d' \
+ -e 's/^Description-en:/Description:/' \
+ > "$TMPGEN"
+
+if [ "$CODENAME" = "experimental" ]; then
+ aptcache show $(cut -d"'" -f 4 "$WORKDIR/error.lst" | sed -e 's#$#/sid#') --no-all-versions 2> /dev/null >> "$TMPGEN"
+fi
+
+if echo "$GENERATE" | grep '^status-' > /dev/null; then
+ sed -i "$TMPGEN" -e '/^Package: / a\
+Status: install ok installed' \
+ -e '/^Filename: / d' -e '/^Size: / d' -e '/^MD5sum: / d'
+fi
+
+apt-sortpkgs "$TMPGEN" > "$GENERATE"
diff --git a/test/integration/deb-bug-330162-encoded-tar-header.deb b/test/integration/deb-bug-330162-encoded-tar-header.deb
new file mode 100644
index 0000000..f38b1aa
--- /dev/null
+++ b/test/integration/deb-bug-330162-encoded-tar-header.deb
Binary files differ
diff --git a/test/integration/deb-lp1274466-cachedb.deb b/test/integration/deb-lp1274466-cachedb.deb
new file mode 100644
index 0000000..43d7ee6
--- /dev/null
+++ b/test/integration/deb-lp1274466-cachedb.deb
Binary files differ
diff --git a/test/integration/framework b/test/integration/framework
new file mode 100644
index 0000000..e7b82c2
--- /dev/null
+++ b/test/integration/framework
@@ -0,0 +1,2156 @@
+#!/bin/sh -- # no runable script, just for vi
+
+EXIT_CODE=0
+
+while [ -n "$1" -a -z "$CHECK_ARGS" ]; do
+ if [ "$1" = "-q" ]; then
+ export MSGLEVEL=2
+ elif [ "$1" = "-qq" ]; then
+ export MSGLEVEL=1
+ elif [ "$1" = "-v" ]; then
+ export MSGLEVEL=4
+ elif [ "$1" = '--color=no' ]; then
+ export MSGCOLOR='NO'
+ elif [ "$1" = '--color=yes' ]; then
+ export MSGCOLOR='YES'
+ elif [ "$1" = '--color' ]; then
+ export MSGCOLOR="$(echo "$2" | tr 'a-z' 'A-Z')"
+ shift
+ elif [ "$1" = '--level' ]; then
+ export MSGLEVEL=$2
+ shift
+ else
+ echo >&2 "WARNING: Unknown parameter »$1« will be ignored"
+ fi
+ shift
+done
+export MSGLEVEL="${MSGLEVEL:-3}"
+
+# we all like colorful messages
+if [ "${MSGCOLOR:-YES}" = 'YES' ]; then
+ if [ ! -t 1 ]; then # but check that we output to a terminal
+ export MSGCOLOR='NO'
+ fi
+fi
+
+if [ "$MSGCOLOR" != 'NO' ]; then
+ CERROR="\033[1;31m" # red
+ CWARNING="\033[1;33m" # yellow
+ CMSG="\033[1;32m" # green
+ CINFO="\033[1;96m" # light blue
+ CDEBUG="\033[1;94m" # blue
+ CNORMAL="\033[0;39m" # default system console color
+ CDONE="\033[1;32m" # green
+ CPASS="\033[1;32m" # green
+ CFAIL="\033[1;31m" # red
+ CCMD="\033[1;35m" # pink
+fi
+
+msgprintf() {
+ local START="$1"
+ local MIDDLE="$2"
+ local END="$3"
+ shift 3
+ if [ -n "$1" ]; then
+ printf "$START " "$1"
+ shift
+ while [ -n "$1" ]; do
+ printf "$MIDDLE " "$(echo "$1" | sed -e 's#^apt\([cfghks]\)#apt-\1#')"
+ shift
+ done
+ fi
+ printf "${END}"
+}
+msgdie() { msgprintf "${CERROR}E: %s" '%s' "${CNORMAL}\n" "$@" >&2; exit 1; }
+msgwarn() { msgprintf "${CWARNING}W: %s" '%s' "${CNORMAL}\n" "$@" >&2; }
+msgmsg() { msgprintf "${CMSG}%s" '%s' "${CNORMAL}\n" "$@"; }
+msginfo() { msgprintf "${CINFO}I: %s" '%s' "${CNORMAL}\n" "$@"; }
+msgdebug() { msgprintf "${CDEBUG}D: %s" '%s' "${CNORMAL}\n" "$@"; }
+msgdone() { msgprintf "${CDONE}DONE" '%s' "${CNORMAL}\n" "$@"; }
+msgnwarn() { msgprintf "${CWARNING}W: %s" '%s' "${CNORMAL}" "$@" >&2; }
+msgnmsg() { msgprintf "${CMSG}%s" '%s' "${CNORMAL}" "$@"; }
+msgninfo() { msgprintf "${CINFO}I: %s" '%s' "${CNORMAL}" "$@"; }
+msgndebug() { msgprintf "${CDEBUG}D: %s" '%s' "${CNORMAL}" "$@"; }
+msgtest() { msgprintf "${CINFO}%s" "${CCMD}%s${CINFO}" "…${CNORMAL} " "$@"; }
+msgpass() { printf "${CPASS}PASS${CNORMAL}\n"; }
+msgreportheader() {
+ if [ -n "$MSGTEST_MSG" ]; then
+ test "$1" != 'msgfailoutput' || echo
+ if [ -n "$MSGTEST_MSGMSG" ]; then
+ echo "$MSGTEST_MSGMSG"
+ fi
+ if [ -n "$MSGTEST_GRP" ] && [ "$MSGTEST_GRP" != 'NEXT' ] && [ "$MSGTEST_GRP" != "$MSGTEST_MSG" ]; then
+ echo "${CFAIL}Part of the test group: $MSGTEST_GRP"
+ fi
+ echo -n "$MSGTEST_MSG"
+ unset MSGTEST_MSG
+ fi
+}
+msgskip() {
+ msgreportheader 'msgskip'
+ if [ $# -gt 0 ]; then printf "${CWARNING}SKIP: $*${CNORMAL}\n" >&2;
+ else printf "${CWARNING}SKIP${CNORMAL}\n" >&2; fi
+}
+msgfail() {
+ msgreportheader 'msgfail'
+ if [ $# -gt 0 ] && [ -n "$1" ]; then printf "${CFAIL}FAIL: $*${CNORMAL}\n" >&2;
+ else printf "${CFAIL}FAIL${CNORMAL}\n" >&2; fi
+ if [ -n "$APT_DEBUG_TESTS" ]; then
+ runapt $SHELL
+ fi
+ EXIT_CODE=$((EXIT_CODE+1));
+}
+MSGGROUP_LEVEL=0
+msggroup() {
+ if [ -n "$1" ]; then
+ if [ $MSGGROUP_LEVEL = 0 ]; then
+ MSGTEST_GRP='NEXT'
+ fi
+ MSGGROUP_LEVEL=$((MSGGROUP_LEVEL+1));
+ else
+ MSGGROUP_LEVEL=$((MSGGROUP_LEVEL-1));
+ if [ $MSGGROUP_LEVEL = 0 ]; then
+ unset MSGTEST_GRP
+ fi
+ fi
+}
+
+# enable / disable Debugging
+if [ $MSGLEVEL -le 0 ]; then
+ msgdie() { true; }
+fi
+if [ $MSGLEVEL -le 1 ]; then
+ msgwarn() { true; }
+ msgnwarn() { true; }
+fi
+if [ $MSGLEVEL -le 2 ]; then
+ msgmsg() {
+ MSGTEST_MSGMSG="$(msgprintf "${CMSG}%s" '%s' "${CNORMAL}" "$@")"
+ }
+ msgnmsg() { true; }
+ msgtest() {
+ MSGTEST_MSG="$(msgprintf "${CINFO}%s" "${CCMD}%s${CINFO}" "…${CNORMAL} " "$@")"
+ if [ "$MSGTEST_GRP" = 'NEXT' ]; then
+ MSGTEST_GRP="$MSGTEST_MSG"
+ fi
+ }
+ msgpass() { printf " ${CPASS}P${CNORMAL}"; }
+fi
+if [ $MSGLEVEL -le 3 ]; then
+ msginfo() { true; }
+ msgninfo() { true; }
+fi
+if [ $MSGLEVEL -le 4 ]; then
+ msgdebug() { true; }
+ msgndebug() { true; }
+fi
+if [ $MSGLEVEL -le 1 ]; then
+ msgpass() { true; }
+fi
+msgdone() {
+ if [ "$1" = "debug" -a $MSGLEVEL -le 4 ] ||
+ [ "$1" = "info" -a $MSGLEVEL -le 3 ] ||
+ [ "$1" = "msg" -a $MSGLEVEL -le 2 ] ||
+ [ "$1" = "warn" -a $MSGLEVEL -le 1 ] ||
+ [ "$1" = "die" -a $MSGLEVEL -le 0 ]; then
+ true;
+ else
+ printf "${CDONE}DONE${CNORMAL}\n";
+ fi
+}
+getaptconfig() {
+ if [ -f ./aptconfig.conf ]; then
+ echo "$(readlink -f ./aptconfig.conf)"
+ elif [ -f ../aptconfig.conf ]; then
+ echo "$(readlink -f ../aptconfig.conf)"
+ elif [ -f ../../aptconfig.conf ]; then
+ echo "$(readlink -f ../../aptconfig.conf)"
+ elif [ -f "${TMPWORKINGDIRECTORY}/aptconfig.conf" ]; then
+ echo "$(readlink -f "${TMPWORKINGDIRECTORY}/aptconfig.conf")"
+ fi
+}
+runapt() {
+ msgdebug "Executing: ${CCMD}$*${CDEBUG} "
+ local CMD="$1"
+ shift
+ case "$CMD" in
+ sh|aptitude|*/*|command) ;;
+ *) CMD="${BUILDDIRECTORY}/$CMD";;
+ esac
+ if [ "$CMD" = 'aptitude' ]; then
+ MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}" command "$CMD" "$@"
+ else
+ MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}" "$CMD" "$@"
+ fi
+}
+runpython3() { runapt command python3 "$@"; }
+aptconfig() { runapt apt-config "$@"; }
+aptcache() { runapt apt-cache "$@"; }
+aptcdrom() { runapt apt-cdrom "$@"; }
+aptget() { runapt apt-get "$@"; }
+aptftparchive() { runapt "${APTFTPARCHIVEBINDIR}/apt-ftparchive" "$@"; }
+aptkey() { runapt apt-key "$@"; }
+aptmark() { runapt apt-mark "$@"; }
+aptsortpkgs() { runapt apt-sortpkgs "$@"; }
+apt() { runapt apt "$@"; }
+apthelper() { runapt "${APTHELPERBINDIR}/apt-helper" "$@"; }
+aptwebserver() { runapt "${APTTESTHELPERSBINDIR}/aptwebserver" "$@"; }
+aptitude() { runapt aptitude "$@"; }
+aptextracttemplates() { runapt apt-extracttemplates "$@"; }
+aptinternalsolver() { runapt "${APTINTERNALSOLVER}" "$@"; }
+aptdumpsolver() { runapt "${APTDUMPSOLVER}" "$@"; }
+aptinternalplanner() { runapt "${APTINTERNALPLANNER}" "$@"; }
+
+dpkg() {
+ "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@"
+}
+dpkg_version() {
+ command perl -MDpkg -E 'say $Dpkg::PROGVERSION'
+}
+dpkgcheckbuilddeps() {
+ command dpkg-checkbuilddeps --admindir="${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg" "$@"
+}
+gdb() {
+ local CMD
+ case "$1" in
+ aptget) CMD="apt-get";;
+ aptcache) CMD="apt-cache";;
+ aptcdrom) CMD="apt-cdrom";;
+ aptconfig) CMD="apt-config";;
+ aptmark) CMD="apt-mark";;
+ apthelper) CMD="apt-helper";;
+ aptftparchive) CMD="apt-ftparchive";;
+ dpkg) shift; runapt "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" "$@"; return;;
+ *) CMD="$1";;
+ esac
+ shift
+ if [ "${CMD##*/}" = "$CMD" ]; then
+ CMD="${BUILDDIRECTORY}/${CMD}"
+ fi
+ runapt command gdb --quiet -ex "directory '$SOURCEDIRECTORY'" -ex run "$CMD" --args "$CMD" "$@"
+}
+lastmodification() {
+ date -u -d "@$(stat -c '%Y' "${TMPWORKINGDIRECTORY}/$1")" -R
+}
+releasefiledate() {
+ grep "^${2:-Date}:" "$1" | cut -d' ' -f 2-
+}
+
+exitwithstatus() {
+ # error if we about to overflow, but ...
+ # "255 failures ought to be enough for everybody"
+ if [ $EXIT_CODE -gt 255 ]; then
+ msgdie "Total failure count $EXIT_CODE too big"
+ fi
+ exit $((EXIT_CODE <= 255 ? EXIT_CODE : 255));
+}
+
+shellsetedetector() {
+ local exit_status=$?
+ if [ "$exit_status" != '0' ]; then
+ printf >&2 "${CERROR}E: Looks like the testcases ended prematurely with exitcode: ${exit_status}${CNORMAL}\n"
+ if [ "$EXIT_CODE" = '0' ]; then
+ EXIT_CODE="$exit_status"
+ fi
+ fi
+}
+
+addtrap() {
+ if [ "$1" = 'prefix' ]; then
+ CURRENTTRAP="$2 $CURRENTTRAP"
+ else
+ CURRENTTRAP="$CURRENTTRAP $1"
+ fi
+ trap "shellsetedetector; $CURRENTTRAP exitwithstatus;" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
+}
+
+escape_shell() {
+ echo "$@" | sed -e "s#'#'\"'\"'#g"
+}
+
+find_project_binary_dir() {
+ local TESTDIRECTORY="$(readlink -f "$(dirname $0)")"
+ if [ -z "$PROJECT_BINARY_DIR" ]; then
+ PROJECT_BINARY_DIR=
+ for dir in ${TESTDIRECTORY}/../../ ${TESTDIRECTORY}/../../*; do
+ test -e "$dir/CMakeCache.txt" || continue
+ if [ -z "$PROJECT_BINARY_DIR" ] ||
+ [ "$dir/CMakeCache.txt" -nt "$PROJECT_BINARY_DIR/CMakeCache.txt" ]; then
+ PROJECT_BINARY_DIR="$dir"
+ fi
+ done
+ if [ -z "$PROJECT_BINARY_DIR" ]; then
+ echo "Cannot find build directory, you might want to set PROJECT_BINARY_DIR" >&2
+ exit 1
+ fi
+ export PROJECT_BINARY_DIR
+ fi
+}
+setupenvironment() {
+ # Next check needs a gnu stat, let's figure that out early.
+ stat=stat
+ if command -v gnustat >/dev/null 2>&1; then
+ stat=gnustat
+ fi
+ # privilege dropping and testing doesn't work if /tmp isn't world-writeable (as e.g. with libpam-tmpdir)
+ if [ -n "$TMPDIR" ] && [ "$(id -u)" = '0' ] && [ "$($stat --format '%a' "$TMPDIR")" != '1777' ]; then
+ unset TMPDIR
+ fi
+ TMPWORKINGDIRECTORY="$(mktemp -d)"
+ addtrap "cd /; rm -rf '$(escape_shell "$TMPWORKINGDIRECTORY")';"
+ if [ -n "$TMPDIR_ADD" ]; then
+ TMPWORKINGDIRECTORY="${TMPWORKINGDIRECTORY}/${TMPDIR_ADD}"
+ mkdir -p "$TMPWORKINGDIRECTORY"
+ unset TMPDIR_ADD
+ export TMPDIR="$TMPWORKINGDIRECTORY"
+ fi
+ msgninfo "Preparing environment for ${0##*/} in ${TMPWORKINGDIRECTORY}…"
+
+ # Setup coreutils on BSD systems
+ mkdir "${TMPWORKINGDIRECTORY}/bin"
+ for prefix in gnu g; do
+ for command in stat touch sed cp tr sha1sum sha256sum md5sum sha512sum grep date wc chmod head readlink tar expr base64; do
+ if command -v $prefix$command 2>/dev/null >/dev/null; then
+ [ -e "${TMPWORKINGDIRECTORY}/bin/$command" ] || ln -sf $(command -v $prefix$command) "${TMPWORKINGDIRECTORY}/bin/$command"
+ fi
+ done
+ done
+ export PATH="${TMPWORKINGDIRECTORY}/bin/:$PATH"
+
+
+ mkdir -m 700 "${TMPWORKINGDIRECTORY}/downloaded"
+ if [ "$(id -u)" = '0' ]; then
+ # relax permissions so that running as root with user switching works
+ umask 022
+ chmod 711 "$TMPWORKINGDIRECTORY"
+ chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/downloaded"
+ fi
+
+ TESTDIRECTORY="$(readlink -f "$(dirname $0)")"
+ # Find the newest build directory (sets PROJECT_BINARY_DIR)
+ find_project_binary_dir
+ # allow overriding the default BUILDDIR location
+ SOURCEDIRECTORY="${APT_INTEGRATION_TESTS_SOURCE_DIR:-"${TESTDIRECTORY}/../../"}"
+ BUILDDIRECTORY="${APT_INTEGRATION_TESTS_BUILD_DIR:-"${PROJECT_BINARY_DIR}/cmdline"}"
+ LIBRARYPATH="${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}/../apt-pkg"}"
+ METHODSDIR="${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/../methods"}"
+ APTHELPERBINDIR="${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"}"
+ APTTESTHELPERSBINDIR="${APT_INTEGRATION_TESTS_HELPERS_BIN_DIR:-"${BUILDDIRECTORY}/../test/interactive-helper"}"
+ APTFTPARCHIVEBINDIR="${APT_INTEGRATION_TESTS_FTPARCHIVE_BIN_DIR:-"${BUILDDIRECTORY}/../ftparchive"}"
+ APTINTERNALSOLVER="${APT_INTEGRATION_TESTS_INTERNAL_SOLVER:-"${BUILDDIRECTORY}/solvers/apt"}"
+ APTDUMPSOLVER="${APT_INTEGRATION_TESTS_DUMP_SOLVER:-"${BUILDDIRECTORY}/solvers/dump"}"
+ APTINTERNALPLANNER="${APT_INTEGRATION_TESTS_INTERNAL_PLANNER:-"${BUILDDIRECTORY}/planners/apt"}"
+ test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first"
+ # -----
+
+ cd "$TMPWORKINGDIRECTORY"
+ echo "#x-apt-configure-index \"${SOURCEDIRECTORY}/doc/examples/configure-index\";" > aptconfig.conf
+ mkdir rootdir aptarchive keys
+ cd rootdir
+ mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d
+ mkdir -p usr/bin var/cache var/lib var/log var/crash tmp
+ mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers
+ mkdir -p usr/lib/apt/solvers usr/lib/apt/planners
+ touch var/lib/dpkg/available
+ ln -s "${METHODSDIR}" usr/lib/apt/methods
+ ln -s "${APTDUMPSOLVER}" usr/lib/apt/solvers/dump
+ ln -s "${APTDUMPSOLVER}" usr/lib/apt/planners/dump
+ ln -s "${APTINTERNALSOLVER}" usr/lib/apt/solvers/apt
+ ln -s "${APTINTERNALPLANNER}" usr/lib/apt/planners/apt
+ echo "Dir::Bin::Solvers \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/solvers\";" >> ../aptconfig.conf
+ echo "Dir::Bin::Planners \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/planners\";" >> ../aptconfig.conf
+ # use the autoremove from the BUILDDIRECTORY if its there, otherwise
+ # system
+ if [ -z "${APT_INTEGRATION_TESTS_SOURCE_DIR}" ]; then
+ ln -s "${SOURCEDIRECTORY}/debian/apt.conf.autoremove" etc/apt/apt.conf.d/01autoremove
+ else
+ ln -s /etc/apt/apt.conf.d/01autoremove etc/apt/apt.conf.d/01autoremove
+ fi
+ cd ..
+ local BASENAME="${0##*/}"
+ local PACKAGESFILE="Packages-${BASENAME#*-}"
+ if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then
+ cp "${TESTDIRECTORY}/${PACKAGESFILE}" aptarchive/Packages
+ fi
+ local SOURCESSFILE="Sources-${BASENAME#*-}"
+ if [ -f "${TESTDIRECTORY}/${SOURCESSFILE}" ]; then
+ cp "${TESTDIRECTORY}/${SOURCESSFILE}" aptarchive/Sources
+ fi
+ find "$TESTDIRECTORY" \( -name '*.pub' -o -name '*.sec' \) -exec cp '{}' keys/ \;
+ chmod 644 keys/*
+ ln -s "${TMPWORKINGDIRECTORY}/keys/joesixpack.pub" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
+
+ echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf
+ echo "Dir::Etc \"etc\";" >> aptconfig.conf
+ echo "Dir::State \"var/lib/apt\";" >> aptconfig.conf
+ echo "Dir::Cache \"var/cache/apt\";" >> aptconfig.conf
+ echo "Dir::Etc \"etc/apt\";" >> aptconfig.conf
+ echo "Dir::Log \"var/log/apt\";" >> aptconfig.conf
+ echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf
+ echo "Dir::Bin::Methods \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/methods\";" >> aptconfig.conf
+ # either store apt-key were we can access it, even if we run it as a different user
+ #cp "${BUILDDIRECTORY}/apt-key" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/"
+ #chmod o+rx "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apt-key"
+ #echo "Dir::Bin::apt-key \"${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apt-key\";" >> aptconfig.conf
+ # destroys coverage reporting though, so we disable changing user for the calling gpgv
+ echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf
+ if [ "$(id -u)" = '0' ]; then
+ echo 'Binary::gpgv::APT::Sandbox::User "root";' >> aptconfig.conf
+ # same for the solver executables
+ echo 'APT::Solver::RunAsUser "root";' >> aptconfig.conf
+ echo 'APT::Planner::RunAsUser "root";' >> aptconfig.conf
+ fi
+
+ cat > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" <<EOF
+#!/bin/sh
+set -e
+if [ -r '${TMPWORKINGDIRECTORY}/noopchroot.so' ]; then
+ if [ -n "\$LD_LIBRARY_PATH" ]; then
+ export LD_LIBRARY_PATH='${TMPWORKINGDIRECTORY}:'"\${LD_LIBRARY_PATH}"
+ else
+ export LD_LIBRARY_PATH='${TMPWORKINGDIRECTORY}'
+ fi
+ if [ -n "\$LD_PRELOAD" ]; then
+ export LD_PRELOAD="noopchroot.so \${LD_PRELOAD}"
+ else
+ export LD_PRELOAD="noopchroot.so"
+ fi
+fi
+EOF
+ cp "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg"
+ cat >> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" <<EOF
+exec fakeroot '${DPKG:-dpkg}' --root='${TMPWORKINGDIRECTORY}/rootdir' \\
+ --admindir="${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg" \\
+ --log='${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log' \\
+ --force-not-root --force-bad-path "\$@"
+EOF
+ cat >> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" <<EOF
+exec fakeroot gdb --quiet -ex run '${DPKG:-dpkg}' --args '${DPKG:-dpkg}' --root='${TMPWORKINGDIRECTORY}/rootdir' \\
+ --admindir="${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg" \\
+ --log='${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log' \\
+ --force-not-root --force-bad-path "\$@"
+EOF
+ chmod +x "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg"
+ echo "Dir::Bin::dpkg \"${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg\";" > rootdir/etc/apt/apt.conf.d/99dpkg
+
+ {
+ if ! command dpkg --assert-multi-arch >/dev/null 2>&1; then
+ echo "DPKG::options:: \"--force-architecture\";" # Added to test multiarch before dpkg is ready for it…
+ fi
+ echo 'quiet "0";'
+ echo 'quiet::NoUpdate "true";'
+ echo 'quiet::NoStatistic "true";'
+ # too distracting for users, but helpful to detect changes
+ echo 'Acquire::Progress::Ignore::ShowErrorText "true";'
+ echo 'Acquire::Progress::Diffpercent "true";'
+ # in testcases, it can appear as if localhost has a rotation setup,
+ # hide this as we can't really deal with it properly
+ echo 'Acquire::Failure::ShowIP "false";'
+ # randomess and tests don't play well together
+ echo 'Acquire::IndexTargets::Randomized "false";'
+ # fakeroot can't fake everything, so disabled in production but good for tests
+ echo 'APT::Sandbox::Verify "true";'
+ } >> aptconfig.conf
+
+ cp "${TESTDIRECTORY}/apt.pem" "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem"
+ if [ "$(id -u)" = '0' ]; then
+ chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem"
+ fi
+ echo "Acquire::https::CaInfo \"${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem\";" > rootdir/etc/apt/apt.conf.d/99https
+ echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary
+ export APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=no
+ echo 'Acquire::Connect::AddrConfig "false";' > rootdir/etc/apt/apt.conf.d/connect-addrconfig
+ # Allow release files to be 10 hours in the future, rather than 10 seconds
+ echo 'Acquire::Max-FutureTime "'$((10 * 60 * 60))'";' > rootdir/etc/apt/apt.conf.d/future-time
+
+ configcompression '.' 'gz' #'bz2' 'lzma' 'xz'
+ confighashes 'SHA256' # these are tests, not security best-practices
+
+ # create some files in /tmp and look at user/group to get what this means
+ TEST_DEFAULT_USER="$(id -un)"
+ touch "${TMPWORKINGDIRECTORY}/test-file"
+ TEST_DEFAULT_GROUP=$(stat --format '%G' "${TMPWORKINGDIRECTORY}/test-file")
+
+ # cleanup the environment a bit
+ # prefer our apt binaries over the system apt binaries
+ export PATH="${BUILDDIRECTORY}:${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
+ export LC_ALL=C
+ unset LANGUAGE COLUMNS NLSPATH
+ unset APT_CONFIG DPKG_ADMINDIR DPKG_COLORS
+ unset DEB_CHECK_COMMAND DEB_SIGN_KEYID DEB_BUILD_OPTIONS DEB_BUILD_PROFILES
+ unset DH_VERBOSE DH_QUIET DH_COMPAT DH_NO_ACT DH_OPTIONS DH_EXTRA_ADDONS
+ unset GREP_OPTIONS POSIXLY_CORRECT
+ unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy
+
+ # Make dpkg inherit testing path
+ echo 'DPkg::Path "";\n' >> aptconfig.conf
+
+ # Make gcov shut up
+ export GCOV_ERROR_FILE=/dev/null
+
+ # If gpgv supports --weak-digest, pass it to make sure we can disable SHA1
+ if aptkey verify --weak-digest SHA1 --help 2>/dev/null >/dev/null; then
+ echo 'Acquire::gpgv::Options { "--weak-digest"; "sha1"; };' > rootdir/etc/apt/apt.conf.d/no-sha1
+ fi
+
+ # most tests just need one signed Release file, not both
+ export APT_DONT_SIGN='Release.gpg'
+
+ if [ -r "${TESTDIRECTORY}/extra-environment" ]; then
+ . "${TESTDIRECTORY}/extra-environment"
+ fi
+
+ msgdone "info"
+}
+
+getarchitecture() {
+ if [ "$1" = "native" -o -z "$1" ]; then
+ eval `aptconfig shell ARCH APT::Architecture`
+ if [ -n "$ARCH" ]; then
+ echo $ARCH
+ else
+ dpkg --print-architecture
+ fi
+ else
+ echo $1
+ fi
+}
+
+getarchitectures() {
+ aptconfig dump --no-empty --format '%v%n' APT::Architecture APT::Architectures | sort -u | tr '\n' ' '
+}
+
+getarchitecturesfromcommalist() {
+ echo "$1" | sed -e 's#,#\n#g' | sed -e "s/^native\$/$(getarchitecture 'native')/"
+}
+
+configarchitecture() {
+ {
+ echo "APT::Architecture \"$(getarchitecture $1)\";"
+ while [ -n "$1" ]; do
+ echo "APT::Architectures:: \"$(getarchitecture $1)\";"
+ shift
+ done
+ } >rootdir/etc/apt/apt.conf.d/01multiarch.conf
+ configdpkg
+}
+
+configdpkg() {
+ if [ ! -e rootdir/var/lib/dpkg/status ]; then
+ local BASENAME="${0##*/}"
+ local STATUSFILE="status-${BASENAME#*-}"
+ if [ -f "${TESTDIRECTORY}/${STATUSFILE}" ]; then
+ cp "${TESTDIRECTORY}/${STATUSFILE}" rootdir/var/lib/dpkg/status
+ # Add an empty line to the end if there is none
+ if tail -1 rootdir/var/lib/dpkg/status | grep -q .; then
+ echo >> rootdir/var/lib/dpkg/status
+ fi
+ else
+ echo -n > rootdir/var/lib/dpkg/status
+ fi
+ fi
+ rm -f rootdir/etc/apt/apt.conf.d/00foreigndpkg
+ # make sure dpkg can detect itself as capable of it
+ if [ "0" = "$(dpkg -l dpkg 2> /dev/null | grep '^i' | wc -l)" ]; then
+ # dpkg doesn't really check the version as long as it is fully installed,
+ # but just to be sure we choose one above the required version
+ insertinstalledpackage 'dpkg' "all" '1.16.2+fake'
+ fi
+ if dpkg --assert-multi-arch >/dev/null 2>&1 ; then
+ local ARCHS="$(getarchitectures)"
+ local DPKGARCH="$(dpkg --print-architecture)"
+ # this ensures that even if multi-arch isn't active in the view
+ # of apt, given that dpkg can't be told which arch is native
+ # the arch apt treats as native might be foreign for dpkg
+ for ARCH in ${ARCHS}; do
+ if [ "${ARCH}" != "${DPKGARCH}" ]; then
+ if ! dpkg --add-architecture ${ARCH} >/dev/null 2>&1; then
+ # old-style used e.g. in Ubuntu-P – and as it seems travis
+ echo "DPKG::options:: \"--foreign-architecture\";" >> rootdir/etc/apt/apt.conf.d/00foreigndpkg
+ echo "DPKG::options:: \"${ARCH}\";" >> rootdir/etc/apt/apt.conf.d/00foreigndpkg
+ fi
+ fi
+ done
+ fi
+}
+
+configdpkgnoopchroot() {
+ # create a library to noop chroot() and rewrite maintainer script executions
+ # via execvp() as used by dpkg as we don't want our rootdir to be a fullblown
+ # chroot directory dpkg could chroot into to execute the maintainer scripts
+ msgtest 'Building library to preload to make maintainerscript work in' 'dpkg'
+ cat > noopchroot.c << EOF
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+
+static char * chrootdir = NULL;
+
+int chroot(const char *path) {
+ printf("WARNING: CHROOTing to %s was ignored!\n", path);
+ free(chrootdir);
+ chrootdir = strdup(path);
+ return 0;
+}
+int execvp(const char *file, char *const argv[]) {
+ static int (*func_execvp) (const char *, char * const []) = NULL;
+ if (func_execvp == NULL)
+ func_execvp = (int (*) (const char *, char * const [])) dlsym(RTLD_NEXT, "execvp");
+ if (chrootdir == NULL || strncmp(file, "/var/lib/dpkg/", strlen("/var/lib/dpkg/")) != 0)
+ return func_execvp(file, argv);
+ printf("REWRITE execvp call %s into %s\n", file, chrootdir);
+ char *newfile;
+ if (asprintf(&newfile, "%s%s", chrootdir, file) == -1) {
+ perror("asprintf");
+ return -1;
+ }
+ char const * const baseadmindir = "/var/lib/dpkg";
+ char *admindir;
+ if (asprintf(&admindir, "%s%s", chrootdir, baseadmindir) == -1) {
+ perror("asprintf");
+ return -1;
+ }
+ setenv("DPKG_ADMINDIR", admindir, 1);
+ return func_execvp(newfile, argv);
+}
+EOF
+ if cc -ldl 2>&1 | grep -q dl; then
+ testempty --nomsg cc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c
+ else
+ testempty --nomsg cc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c -ldl
+ fi
+}
+configcompression() {
+ if [ "$1" = 'ALL' ]; then
+ configcompression '.' $(aptconfig dump APT::Compressor --format '%t %v%n' | sed -n 's#^Extension \.\(.*\)$#\1#p')
+ return
+ fi
+ local CMD='apthelper cat-file -C'
+ while [ -n "$1" ]; do
+ case "$1" in
+ '.') printf ".\t.\tcat\n";;
+ 'gz') printf "gzip\tgz\t$CMD $1\n";;
+ 'bz2') printf "bzip2\tbz2\t$CMD $1\n";;
+ 'zst') printf "zstd\tzst\t$CMD $1\n";;
+ *) printf "$1\t$1\t$CMD $1\n";;
+ esac
+ shift
+ done > "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf"
+}
+confighashes() {
+ {
+ echo 'APT::FTPArchive {'
+ {
+ while [ -n "$1" ]; do
+ printf "$1" | tr 'a-z' 'A-Z'
+ printf "\t\"true\";\n"
+ shift
+ done
+ for h in 'MD5' 'SHA1' 'SHA256' 'SHA512'; do
+ printf "$h\t\"false\";\n"
+ done
+ } | awk '!x[$1]++'
+ echo '};'
+ } >> "${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/ftparchive-hashes.conf"
+}
+forcecompressor() {
+ COMPRESSOR="$1"
+ COMPRESS="$1"
+ COMPRESSOR_CMD="apthelper cat-file -C $1"
+ case $COMPRESSOR in
+ gzip) COMPRESS='gz';;
+ bzip2) COMPRESS='bz2';;
+ zstd) COMPRESS='zst';;
+ esac
+ local CONFFILE="${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/00force-compressor"
+ echo "Acquire::CompressionTypes::Order { \"${COMPRESS}\"; };
+Dir::Bin::uncompressed \"/does/not/exist\";" > "$CONFFILE"
+ for COMP in $(aptconfig dump 'APT::Compressor' --format '%f%n' | cut -d':' -f 5 | uniq); do
+ if [ -z "$COMP" -o "$COMP" = '.' -o "$COMP" = "$COMPRESSOR" ]; then continue; fi
+ echo "Dir::Bin::${COMP} \"/does/not/exist\";" >> "$CONFFILE"
+ echo "APT::Compressor::${COMP}::Name \"${COMP}-disabled\";" >> "$CONFFILE"
+ done
+}
+
+_setupsimplenativepackage() {
+ local NAME="$1"
+ local ARCH="$2"
+ local VERSION="$3"
+ local RELEASE="${4:-unstable}"
+ local DEPENDENCIES="$5"
+ local DESCRIPTION="${6:-an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
+ If you find such a package installed on your system,
+ something went horribly wrong! They are autogenerated
+ und used only by testcases and serve no other purpose…}"
+
+ local SECTION="${7:-others}"
+ local PRIORITY="${8:-optional}"
+ local FILE_TREE="$9"
+ local COMPRESS_TYPE="${10:-gzip}"
+ local DISTSECTION
+ if [ "$SECTION" = "${SECTION#*/}" ]; then
+ DISTSECTION="main"
+ else
+ DISTSECTION="${SECTION%/*}"
+ fi
+ local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}"
+
+ mkdir -p "$BUILDDIR/debian/source"
+ echo "* most suckless software product ever" > "${BUILDDIR}/FEATURES"
+ echo "#!/bin/sh
+echo '$NAME says \"Hello!\"'" > "${BUILDDIR}/${NAME}"
+
+ echo "Copyleft by Joe Sixpack $(date -u +%Y)" > "${BUILDDIR}/debian/copyright"
+ echo "$NAME ($VERSION) $RELEASE; urgency=low
+
+ * Initial release
+
+ -- Joe Sixpack <joe@example.org> $(date -u -R)" > "${BUILDDIR}/debian/changelog"
+ {
+ echo "Source: $NAME
+Priority: $PRIORITY
+Maintainer: Joe Sixpack <joe@example.org>
+Standards-Version: 4.3.1
+Rules-Requires-Root: no"
+ if [ "$SECTION" != '<none>' ]; then
+ echo "Section: $SECTION"
+ fi
+ local BUILDDEPS="$(printf "%b\n" "$DEPENDENCIES" | grep '^Build-')"
+ test -z "$BUILDDEPS" || echo "$BUILDDEPS"
+ echo "
+Package: $NAME"
+
+ if [ "$ARCH" = 'all' ]; then
+ echo "Architecture: all"
+ else
+ echo "Architecture: any"
+ fi
+ local DEPS="$(printf "%b\n" "$DEPENDENCIES" | grep -v '^Build-')"
+ test -z "$DEPS" || echo "$DEPS"
+ printf "%b\n" "Description: $DESCRIPTION"
+ } > "${BUILDDIR}/debian/control"
+
+ echo '3.0 (native)' > "${BUILDDIR}/debian/source/format"
+}
+
+make_tiny_rules() {
+ local OUT="$1"
+ if command -v gmake >/dev/null 2>&1; then
+ [ -e ${TMPWORKINGDIRECTORY}/bin/make ] || ln -s $(command -v gmake) ${TMPWORKINGDIRECTORY}/bin/make
+ echo "#!${TMPWORKINGDIRECTORY}/bin/make -f" > "$OUT"
+ else
+ echo '#!/usr/bin/make -f' > "$OUT"
+ fi
+ echo '%:' >> "$OUT"
+ echo ' dh $@' >> "$OUT"
+}
+
+setupsimplenativepackage() {
+ _setupsimplenativepackage "$@"
+ local NAME="$1"
+ local VERSION="$3"
+ local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}"
+ test -e "${BUILDDIR}/debian/compat" || echo '10' > "${BUILDDIR}/debian/compat"
+ test -e "${BUILDDIR}/debian/rules" || make_tiny_rules "${BUILDDIR}/debian/rules"
+}
+
+buildsimplenativepackage() {
+ local NAME="$1"
+ local ARCH="$2"
+ local VERSION="$3"
+ local RELEASE="${4:-unstable}"
+ local DEPENDENCIES="$5"
+ local DESCRIPTION="$6"
+ local SECTION="${7:-others}"
+ local PRIORITY="${8:-optional}"
+ local FILE_TREE="$9"
+ local COMPRESS_TYPE="${10:-gzip}"
+ local DISTSECTION
+ if [ "$SECTION" = "${SECTION#*/}" ]; then
+ DISTSECTION="main"
+ else
+ DISTSECTION="${SECTION%/*}"
+ fi
+ local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}"
+ msgtest "Build source package in version ${VERSION} for ${RELEASE} in ${DISTSECTION}" "$NAME"
+ _setupsimplenativepackage "$@"
+ cd "${BUILDDIR}/.."
+ testsuccess --nomsg dpkg-source -b ${NAME}-${VERSION}
+ cd - >/dev/null
+ sed -n 's#^dpkg-source: info: building [^ ]\+ in ##p' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" \
+ | while read SRC; do
+ echo "pool/${SRC}" >> "${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist"
+# if expr match "${SRC}" '.*\.dsc' >/dev/null 2>&1; then
+# aptkey --keyring ./keys/joesixpack.pub --secret-keyring ./keys/joesixpack.sec --quiet --readonly \
+# adv --yes --default-key 'Joe Sixpack' \
+# --clearsign -o "${BUILDDIR}/../${SRC}.sign" "${BUILDDIR}/../$SRC"
+# mv "${BUILDDIR}/../${SRC}.sign" "${BUILDDIR}/../$SRC"
+# fi
+ done
+
+ for arch in $(getarchitecturesfromcommalist "$ARCH"); do
+ msgtest "Build binary package for ${RELEASE} in ${SECTION}" "$NAME"
+ rm -rf "${BUILDDIR}/debian/tmp"
+ mkdir -p "${BUILDDIR}/debian/tmp/DEBIAN" "${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}" "${BUILDDIR}/debian/tmp/usr/bin"
+ cp "${BUILDDIR}/debian/copyright" "${BUILDDIR}/debian/changelog" "${BUILDDIR}/FEATURES" "${BUILDDIR}/debian/tmp/usr/share/doc/${NAME}"
+ cp "${BUILDDIR}/${NAME}" "${BUILDDIR}/debian/tmp/usr/bin/${NAME}-${arch}"
+ if [ -n "$FILE_TREE" ]; then
+ cp -ar "$FILE_TREE" "${BUILDDIR}/debian/tmp"
+ fi
+
+ (cd "${BUILDDIR}"; dpkg-gencontrol -DArchitecture=$arch)
+ (cd "${BUILDDIR}/debian/tmp"; md5sum $(find usr/ -type f) > DEBIAN/md5sums)
+ local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log"
+ # ensure the right permissions as dpkg-deb insists
+ chmod 755 "${BUILDDIR}/debian/tmp/DEBIAN"
+ testsuccess --nomsg dpkg-deb -Z${COMPRESS_TYPE} --build "${BUILDDIR}/debian/tmp" "${BUILDDIR}/.."
+ echo "pool/${NAME}_${VERSION}_${arch}.deb" >> "${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist"
+ done
+
+ local NM
+ if [ "$(echo "$NAME" | cut -c 1-3)" = 'lib' ]; then
+ NM="$(echo "$NAME" | cut -c 1-4)"
+ else
+ NM="$(echo "$NAME" | cut -c 1)"
+ fi
+ local CHANGEPATH="${BUILDDIR}/../${DISTSECTION}/${NM}/${NAME}/${NAME}_${VERSION}"
+ mkdir -p "$CHANGEPATH"
+ cp "${BUILDDIR}/debian/changelog" "$CHANGEPATH"
+ rm -rf "${BUILDDIR}"
+ msgdone "info"
+}
+
+buildpackage() {
+ local BUILDDIR=$1
+ local RELEASE=$2
+ local SECTION=$3
+ local ARCH=$(getarchitecture $4)
+ local PKGNAME="$(echo "$BUILDDIR" | grep -o '[^/]*$')"
+ local BUILDLOG="$(readlink -f "${BUILDDIR}/../${PKGNAME}_${RELEASE}_${SECTION}.dpkg-bp.log")"
+ msgtest "Build package for ${RELEASE} in ${SECTION}" "$PKGNAME"
+ cd "$BUILDDIR"
+ if [ "$ARCH" = "all" ]; then
+ ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)"
+ fi
+ testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH -d
+ cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$BUILDLOG"
+ local PKGS="$(grep '^dpkg-deb: building package' "$BUILDLOG" | cut -d'/' -f 2 | sed -e "s#'\.##")"
+ local SRCS="$(grep '^dpkg-source: info: building' "$BUILDLOG" | grep -o '[a-z0-9._+~-]*$')"
+ cd - > /dev/null
+ for PKG in $PKGS; do
+ echo "pool/${PKG}" >> "${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.pkglist"
+ done
+ for SRC in $SRCS; do
+ echo "pool/${SRC}" >> "${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.srclist"
+ done
+}
+
+buildaptarchive() {
+ if [ -d incoming ]; then
+ buildaptarchivefromincoming "$@"
+ else
+ buildaptarchivefromfiles "$@"
+ fi
+}
+
+createaptftparchiveconfig() {
+ local COMPRESSORS="$(cut -d' ' -f 1 "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf" | tr '\n' ' ')"
+ local COMPRESSORS="${COMPRESSORS%* }"
+ local ARCHS="$(getarchitectures)"
+ cat > ftparchive.conf <<EOF
+Dir {
+ ArchiveDir "$(readlink -f .)";
+ CacheDir "$(readlink -f ..)";
+ FileListDir "$(readlink -f pool/)";
+};
+Default {
+ Packages::Compress "$COMPRESSORS";
+ Sources::Compress "$COMPRESSORS";
+ Contents::Compress "$COMPRESSORS";
+ Translation::Compress "$COMPRESSORS";
+ LongDescription "false";
+};
+TreeDefault {
+ Directory "pool/";
+ SrcDirectory "pool/";
+};
+EOF
+ for DIST in $(find ./pool/ -maxdepth 1 -name '*.pkglist' -type f | cut -d'/' -f 3 | cut -d'.' -f 1 | sort | uniq); do
+ cat <<EOF
+tree "dists/$DIST" {
+ Architectures "$ARCHS all source";
+ FileList "${DIST}.\$(SECTION).pkglist";
+ SourceFileList "${DIST}.\$(SECTION).srclist";
+ Sections "$(find ./pool/ -maxdepth 1 -name "${DIST}.*.pkglist" -type f | cut -d'/' -f 3 | cut -d'.' -f 2 | sort | uniq | tr '\n' ' ')";
+};
+EOF
+ done >> ftparchive.conf
+}
+
+buildaptftparchivedirectorystructure() {
+ local DISTS="$(grep -i '^tree ' ftparchive.conf | cut -d'/' -f 2 | sed -e 's#".*##')"
+ for DIST in $DISTS; do
+ local SECTIONS="$(grep -i -A 5 "dists/$DIST" ftparchive.conf | grep -i 'Sections' | cut -d'"' -f 2)"
+ for SECTION in $SECTIONS; do
+ local ARCHS="$(grep -A 5 "dists/$DIST" ftparchive.conf | grep Architectures | cut -d'"' -f 2 | sed -e 's#source##')"
+ for ARCH in $ARCHS; do
+ mkdir -p "dists/${DIST}/${SECTION}/binary-${ARCH}"
+ done
+ mkdir -p "dists/${DIST}/${SECTION}/source"
+ mkdir -p "dists/${DIST}/${SECTION}/i18n"
+ done
+ done
+}
+
+insertpackage() {
+ local RELEASES="$1"
+ local NAME="$2"
+ local ARCH="$3"
+ local VERSION="$4"
+ local DEPENDENCIES="$5"
+ local PRIORITY="${6:-optional}"
+ local DESCRIPTION="${7:-an autogenerated dummy ${NAME}=${VERSION}/${RELEASES}
+ If you find such a package installed on your system,
+ something went horribly wrong! They are autogenerated
+ und used only by testcases and serve no other purpose…}"
+ local SECTION="${8:-other}"
+
+ if [ "$SECTION" = "${SECTION#*/}" ]; then
+ DISTSECTION="main"
+ else
+ DISTSECTION="${SECTION%/*}"
+ fi
+ local ARCHS=""
+ for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do
+ if [ "$RELEASE" = 'installed' ]; then
+ insertinstalledpackage "$2" "$3" "$4" "$5" "$6" "$7" "$8"
+ continue
+ fi
+ for arch in $(getarchitecturesfromcommalist "$ARCH"); do
+ if [ "$arch" = 'none' ]; then
+ ARCHS="$(getarchitectures)"
+ else
+ ARCHS="$arch"
+ fi
+ for BUILDARCH in $ARCHS; do
+ local PPATH="aptarchive/dists/${RELEASE}/${DISTSECTION}/binary-${BUILDARCH}"
+ mkdir -p "$PPATH"
+ {
+ echo "Package: $NAME
+Priority: $PRIORITY
+Section: $SECTION
+Installed-Size: 42
+Maintainer: Joe Sixpack <joe@example.org>"
+ test "$arch" = 'none' || echo "Architecture: $arch"
+ echo "Version: $VERSION
+Filename: pool/${DISTSECTION}/${NAME}/${NAME}_${VERSION}_${arch}.deb"
+ test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES"
+ echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)"
+ echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)"
+ echo "SHA256: 0000000000000000000000000000000000000000000000000000000000000000"
+ echo
+ } >> "${PPATH}/Packages"
+ done
+ done
+ mkdir -p "aptarchive/dists/${RELEASE}/${DISTSECTION}/source" "aptarchive/dists/${RELEASE}/${DISTSECTION}/i18n"
+ touch "aptarchive/dists/${RELEASE}/${DISTSECTION}/source/Sources"
+ echo "Package: $NAME
+Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)
+Description-en: $DESCRIPTION
+" >> "aptarchive/dists/${RELEASE}/${DISTSECTION}/i18n/Translation-en"
+ done
+}
+
+insertsource() {
+ local RELEASES="$1"
+ local NAME="$2"
+ local ARCH="$3"
+ local VERSION="$4"
+ local DEPENDENCIES="$5"
+ local BINARY="${6:-$NAME}"
+ local ARCHS=""
+ for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do
+ local SPATH="aptarchive/dists/${RELEASE}/main/source"
+ mkdir -p $SPATH
+ local FILE="${SPATH}/Sources"
+ local DSCFILE="${NAME}_${VERSION}.dsc"
+ local TARFILE="${NAME}_${VERSION}.tar.gz"
+ echo "Package: $NAME
+Binary: $BINARY
+Version: $VERSION
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: $ARCH" >> $FILE
+ test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES" >> "$FILE"
+ echo "Files:
+ $(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE"
+ $(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE"
+Checksums-Sha256:
+ $(echo -n "$DSCFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE"
+ $(echo -n "$TARFILE" | sha256sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE"
+" >> "$FILE"
+ done
+}
+
+insertinstalledpackage() {
+ local NAME="$1"
+ local ARCH="$2"
+ local VERSION="$3"
+ local DEPENDENCIES="$4"
+ local PRIORITY="${5:-optional}"
+ local STATUS="${6:-install ok installed}"
+ local DESCRIPTION="${7:-an autogenerated dummy ${NAME}=${VERSION}/installed
+ If you find such a package installed on your system,
+ something went horribly wrong! They are autogenerated
+ und used only by testcases and serve no other purpose…}"
+ local SECTION="${8:-other}"
+
+ local FILE='rootdir/var/lib/dpkg/status'
+ local INFO='rootdir/var/lib/dpkg/info'
+ for arch in $(getarchitecturesfromcommalist "$ARCH"); do
+ echo "Package: $NAME
+Status: $STATUS
+Priority: $PRIORITY
+Section: $SECTION
+Installed-Size: 42
+Maintainer: Joe Sixpack <joe@example.org>
+Version: $VERSION" >> "$FILE"
+ test "$arch" = 'none' || echo "Architecture: $arch" >> "$FILE"
+ test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES" >> "$FILE"
+ printf "%b\n" "Description: $DESCRIPTION" >> "$FILE"
+ echo >> "$FILE"
+ if [ "$(dpkg-query -W --showformat='${Multi-Arch}')" = 'same' ]; then
+ echo -n > "${INFO}/${NAME}:${arch}.list"
+ else
+ echo -n > "${INFO}/${NAME}.list"
+ fi
+ done
+}
+
+
+buildaptarchivefromincoming() {
+ msginfo "Build APT archive for ${CCMD}${0##*/}${CINFO} based on incoming packages…"
+ cd aptarchive
+ [ -e pool ] || ln -s ../incoming pool
+ [ -e ftparchive.conf ] || createaptftparchiveconfig
+ [ -e dists ] || buildaptftparchivedirectorystructure
+ msgninfo "\tGenerate Packages, Sources and Contents files… "
+ testsuccess aptftparchive generate ftparchive.conf
+ cd - > /dev/null
+ msgdone "info"
+ generatereleasefiles "$@"
+}
+
+buildaptarchivefromfiles() {
+ msginfo "Build APT archive for ${CCMD}${0##*/}${CINFO} based on prebuild files…"
+ local DIR='aptarchive'
+ if [ -d "${DIR}/dists" ]; then DIR="${DIR}/dists"; fi
+ find "$DIR" -name 'Packages' -o -name 'Sources' -o -name 'Translation-*' | while read line; do
+ msgninfo "\t${line} file… "
+ compressfile "$line" "$1"
+ msgdone "info"
+ done
+ generatereleasefiles "$@"
+}
+
+compressfile() {
+ while read compressor extension command; do
+ if [ "$compressor" = '.' ]; then
+ if [ -n "$2" ]; then
+ touch -d "$2" "$1"
+ fi
+ continue
+ fi
+ cat "$1" | $command > "${1}.${extension}"
+ if [ -n "$2" ]; then
+ touch -d "$2" "${1}.${extension}"
+ fi
+ done < "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf"
+}
+
+# can be overridden by testcases for their pleasure
+getcodenamefromsuite() {
+ case "$1" in
+ unstable) echo 'sid';;
+ *) echo -n "$1";;
+ esac
+}
+getreleaseversionfromsuite() { true; }
+getlabelfromsuite() { true; }
+getoriginfromsuite() { true; }
+getarchitecturesfromreleasefile() { echo "all $(getarchitectures)"; }
+getnotautomaticfromsuite() {
+ case "$1" in
+ experimental|experimental2) echo "yes";;
+ esac
+}
+getbutautomaticupgradesfromsuite() { true; }
+
+aptftparchiverelease() {
+ aptftparchive -qq release "$@" | sed -e '/0 Release$/ d' # remove the self reference
+}
+generatereleasefiles() {
+ # $1 is the Date header and $2 is the ValidUntil header to be set
+ # both should be given in notation date/touch can understand
+ local DATE="$1"
+ local VALIDUNTIL="$2"
+ if [ -e aptarchive/dists ]; then
+ msgninfo "\tGenerate Release files for dists… "
+ for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do
+ local ARCHITECTURES="$(getarchitecturesfromreleasefile "$dir")"
+ local SUITE="$(echo "$dir" | cut -d'/' -f 4)"
+ local CODENAME="$(getcodenamefromsuite $SUITE)"
+ local VERSION="$(getreleaseversionfromsuite $SUITE)"
+ local LABEL="$(getlabelfromsuite $SUITE)"
+ local ORIGIN="$(getoriginfromsuite $SUITE)"
+ local NOTAUTOMATIC="$(getnotautomaticfromsuite $SUITE)"
+ local BUTAUTOMATICUPGRADES="$(getbutautomaticupgradesfromsuite $SUITE)"
+ aptftparchiverelease "$dir" \
+ -o APT::FTPArchive::Release::Suite="${SUITE}" \
+ -o APT::FTPArchive::Release::Codename="${CODENAME}" \
+ -o APT::FTPArchive::Release::Architectures="${ARCHITECTURES}" \
+ -o APT::FTPArchive::Release::Label="${LABEL}" \
+ -o APT::FTPArchive::Release::Origin="${ORIGIN}" \
+ -o APT::FTPArchive::Release::Version="${VERSION}" \
+ -o APT::FTPArchive::Release::NotAutomatic="${NOTAUTOMATIC}" \
+ -o APT::FTPArchive::Release::ButAutomaticUpgrades="${BUTAUTOMATICUPGRADES}" \
+ > "$dir/Release"
+ done
+ else
+ msgninfo "\tGenerate Release files for flat… "
+ aptftparchiverelease ./aptarchive > aptarchive/Release
+ fi
+ if [ -n "$DATE" -a "$DATE" != "now" ]; then
+ for release in $(find ./aptarchive -name 'Release'); do
+ sed -i "s/^Date: .*$/Date: $(date -u -d "$DATE" -R)/" "$release"
+ touch -d "$DATE" "$release"
+ done
+ fi
+ if [ -n "$VALIDUNTIL" ]; then
+ sed -i "/^Date: / a\
+Valid-Until: $(date -u -d "$VALIDUNTIL" -R)" $(find ./aptarchive -name 'Release')
+ fi
+ msgdone "info"
+}
+
+setupdistsaptarchive() {
+ local APTARCHIVE="$(readlink -f ./aptarchive | sed 's# #%20#g')"
+ rm -f root/etc/apt/sources.list.d/apt-test-*-deb.list
+ rm -f root/etc/apt/sources.list.d/apt-test-*-deb-src.list
+ for DISTS in $(find ./aptarchive/dists/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 4); do
+ SECTIONS=$(find "./aptarchive/dists/${DISTS}/" -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 5 | tr '\n' ' ')
+ msgninfo "\tadd deb and deb-src sources.list lines for ${CCMD}${DISTS} ${SECTIONS}${CINFO}… "
+ echo "deb file://$APTARCHIVE $DISTS $SECTIONS" > "rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb.list"
+ echo "deb-src file://$APTARCHIVE $DISTS $SECTIONS" > "rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb-src.list"
+ msgdone "info"
+ done
+}
+
+setupflataptarchive() {
+ local APTARCHIVE="$(readlink -f ./aptarchive)"
+ local APTARCHIVEURI="$(readlink -f ./aptarchive | sed 's# #%20#g')"
+ if [ -f "${APTARCHIVE}/Packages" ]; then
+ msgninfo "\tadd deb sources.list line… "
+ echo "deb file://$APTARCHIVEURI /" > 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list'
+ msgdone 'info'
+ else
+ rm -f 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list'
+ fi
+ if [ -f "${APTARCHIVE}/Sources" ]; then
+ msgninfo "\tadd deb-src sources.list line… "
+ echo "deb-src file://$APTARCHIVEURI /" > 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list'
+ msgdone 'info'
+ else
+ rm -f 'rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list'
+ fi
+}
+
+setupaptarchive() {
+ local NOUPDATE=0
+ if [ "$1" = '--no-update' ]; then
+ NOUPDATE=1
+ shift
+ fi
+ buildaptarchive "$@"
+ if [ -e aptarchive/dists ]; then
+ setupdistsaptarchive
+ else
+ setupflataptarchive
+ fi
+ signreleasefiles 'Joe Sixpack'
+ if [ "1" != "$NOUPDATE" ]; then
+ testsuccess aptget update -o Debug::pkgAcquire::Worker=true -o Debug::Acquire::gpgv=true
+ fi
+}
+
+killgpgagent() {
+ if [ -z "${TMPWORKINGDIRECTORY}" ]; then return; fi
+ local GPGHOME="${TMPWORKINGDIRECTORY}/signinghome"
+ if [ ! -e "${GPGHOME}" ]; then return; fi
+ # ensure the agent dies quickly as different versions have different suicide heuristics
+ GNUPGHOME="${GPGHOME}" gpgconf --kill gpg-agent >/dev/null 2>&1 || true
+ rm -rf "$GPGHOME"
+}
+dosigning() {
+ local KEY="$1"
+ shift
+ local GPGHOME="${TMPWORKINGDIRECTORY}/signinghome"
+ if [ -n "$APT_TEST_SIGNINGHOME" ]; then
+ GPGHOME="$APT_TEST_SIGNINGHOME"
+ else
+ if [ ! -e "$GPGHOME" ]; then
+ mkdir -p --mode=700 "${GPGHOME}"
+ addtrap 'prefix' 'killgpgagent;'
+ fi
+ fi
+ testsuccess aptkey --quiet --keyring ${KEY}.pub --secret-keyring ${KEY}.sec --readonly \
+ --homedir "${GPGHOME}" adv --batch --yes --digest-algo "${APT_TESTS_DIGEST_ALGO:-SHA512}" \
+ "$@"
+}
+signreleasefiles() {
+ local SIGNERS="${1:-Joe Sixpack}"
+ local REPODIR="${2:-aptarchive}"
+ if [ -n "$1" ]; then shift; fi
+ if [ -n "$1" ]; then shift; fi
+ local KEY="keys/$(echo "$SIGNERS" | tr 'A-Z' 'a-z' | tr -d ' ,')"
+ msgninfo "\tSign archive with $SIGNERS key $KEY… "
+ local REXKEY='keys/rexexpired'
+ local SECEXPIREBAK="${REXKEY}.sec.bak"
+ local PUBEXPIREBAK="${REXKEY}.pub.bak"
+ local SIGUSERS=""
+ while [ -n "${SIGNERS%%,*}" ]; do
+ local SIGNER="${SIGNERS%%,*}"
+ if [ "${SIGNERS}" = "${SIGNER}" ]; then
+ SIGNERS=""
+ fi
+ SIGNERS="${SIGNERS#*,}"
+ # FIXME: This should be the full name, but we can't encode the space properly currently
+ SIGUSERS="${SIGUSERS} -u ${SIGNER#* }"
+ if [ "${SIGNER}" = 'Rex Expired' ]; then
+ # the key is expired, so gpg doesn't allow one to sign with and the --faked-system-time
+ # option doesn't exist anymore (and using faketime would add a new obscure dependency)
+ # therefore we 'temporary' make the key not expired and restore a backup after signing
+ cp "${REXKEY}.sec" "$SECEXPIREBAK"
+ cp "${REXKEY}.pub" "$PUBEXPIREBAK"
+ local SECUNEXPIRED="${REXKEY}.sec.unexpired"
+ local PUBUNEXPIRED="${REXKEY}.pub.unexpired"
+ if [ -f "$SECUNEXPIRED" ] && [ -f "$PUBUNEXPIRED" ]; then
+ cp "$SECUNEXPIRED" "${REXKEY}.sec"
+ cp "$PUBUNEXPIRED" "${REXKEY}.pub"
+ else
+ if ! printf "expire\n1w\nsave\n" | aptkey --quiet --keyring "${REXKEY}.pub" --secret-keyring "${REXKEY}.sec" \
+ --readonly adv --batch --yes --digest-algo "${APT_TESTS_DIGEST_ALGO:-SHA512}" \
+ --default-key "$SIGNER" --command-fd 0 --edit-key "${SIGNER}" >setexpire.gpg 2>&1; then
+ cat setexpire.gpg
+ exit 1
+ fi
+ cp "${REXKEY}.sec" "$SECUNEXPIRED"
+ cp "${REXKEY}.pub" "$PUBUNEXPIRED"
+ fi
+ fi
+ if [ ! -e "${KEY}.pub" ]; then
+ local K="keys/$(echo "$SIGNER" | tr 'A-Z' 'a-z' | tr -d ' ,')"
+ cat "${K}.pub" >> "${KEY}.new.pub"
+ cat "${K}.sec" >> "${KEY}.new.sec"
+ fi
+ done
+ if [ ! -e "${KEY}.pub" ]; then
+ mv "${KEY}.new.pub" "${KEY}.pub"
+ mv "${KEY}.new.sec" "${KEY}.sec"
+ fi
+ for RELEASE in $(find "${REPODIR}/" -name Release); do
+ # we might have set a specific date for the Release file, so copy it
+ local DATE="$(stat --format "%y" "${RELEASE}")"
+ if [ "$APT_DONT_SIGN" = 'Release.gpg' ]; then
+ rm -f "${RELEASE}.gpg"
+ else
+ dosigning "$KEY" "$@" $SIGUSERS --armor --detach-sign --sign --output "${RELEASE}.gpg" "${RELEASE}"
+ touch -d "$DATE" "${RELEASE}.gpg"
+ fi
+ local INRELEASE="${RELEASE%/*}/InRelease"
+ if [ "$APT_DONT_SIGN" = 'InRelease' ]; then
+ rm -f "$INRELEASE"
+ else
+ dosigning "$KEY" "$@" $SIGUSERS --clearsign --output "$INRELEASE" "$RELEASE"
+ touch -d "$DATE" "${INRELEASE}"
+ fi
+ done
+ if [ -f "$SECEXPIREBAK" ] && [ -f "$PUBEXPIREBAK" ]; then
+ mv -f "$SECEXPIREBAK" "${REXKEY}.sec"
+ mv -f "$PUBEXPIREBAK" "${REXKEY}.pub"
+ fi
+ msgdone 'info'
+}
+
+redatereleasefiles() {
+ local DATE="$(date -u -d "$1" -R)"
+ for release in $(find aptarchive/ -name 'Release'); do
+ sed -i "s/^Date: .*$/Date: ${DATE}/" "$release"
+ touch -d "$DATE" "$release"
+ done
+ signreleasefiles "${2:-Joe Sixpack}"
+}
+
+webserverconfig() {
+ local WEBSERVER="${3:-http://localhost:${APTHTTPPORT}}"
+ local NOCHECK=false
+ if [ "$1" = '--no-check' ]; then
+ NOCHECK=true
+ shift
+ fi
+ local DOWNLOG="${TMPWORKINGDIRECTORY}/rootdir/tmp/download-testfile.log"
+ local STATUS="${TMPWORKINGDIRECTORY}/downloaded/webserverconfig.status"
+ rm -f "$STATUS" "$DOWNLOG"
+ # very very basic URI encoding
+ local URI
+ if [ -n "$2" ]; then
+ msgtest "Set webserver config option '${1}' to" "$2"
+ URI="${WEBSERVER}/_config/set/$(echo "${1}" | sed -e 's/\//%2f/g')/$(echo "${2}" | sed -e 's/\//%2f/g')"
+ else
+ msgtest 'Clear webserver config option' "${1}"
+ URI="${WEBSERVER}/_config/clear/$(echo "${1}" | sed -e 's/\//%2f/g')"
+ fi
+ if downloadfile "$URI" "$STATUS" > "$DOWNLOG"; then
+ msgpass
+ else
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/webserverconfig.output"
+ cat "$DOWNLOG" "$STATUS" >"$OUTPUT" 2>&1 || true
+ msgfailoutput '' "$OUTPUT"
+ fi
+ $NOCHECK || testwebserverlaststatuscode '200'
+}
+
+rewritesourceslist() {
+ local APTARCHIVE="file://$(readlink -f "${TMPWORKINGDIRECTORY}/aptarchive" | sed 's# #%20#g')"
+ local APTARCHIVE2="copy://$(readlink -f "${TMPWORKINGDIRECTORY}/aptarchive" | sed 's# #%20#g')"
+ for LIST in $(find "${TMPWORKINGDIRECTORY}/rootdir/etc/apt/sources.list.d/" -name 'apt-test-*.list'); do
+ sed -i $LIST -e "s#$APTARCHIVE#${1}#" -e "s#$APTARCHIVE2#${1}#" \
+ -e "s#http://[^@]*@\?localhost:${APTHTTPPORT}/\?#${1}#" \
+ -e "s#https://[^@]*@\?localhost:${APTHTTPSPORT}/\?#${1}#"
+ done
+}
+
+# wait for up to 10s for a pid file to appear to avoid possible race
+# when a helper is started and doesn't write the PID quick enough
+waitforpidfile() {
+ local PIDFILE="$1"
+ for i in $(seq 10); do
+ if test -s "$PIDFILE"; then
+ return 0
+ fi
+ sleep 1
+ done
+ msgdie "waiting for $PIDFILE failed"
+ return 1
+}
+
+changetowebserver() {
+ local REWRITE='no'
+ if [ "$1" != '--no-rewrite' ]; then
+ REWRITE='yes'
+ else
+ shift
+ fi
+ if test -x "${APTTESTHELPERSBINDIR}/aptwebserver"; then
+ cd aptarchive
+ local LOG="webserver.log"
+ if ! aptwebserver --port 0 -o aptwebserver::fork=1 -o aptwebserver::portfile='aptwebserver.port' -o aptwebserver::logfiles="$(readlink -f .)/$LOG" "$@" >$LOG 2>&1 ; then
+ cat "$LOG"
+ false
+ fi
+ waitforpidfile aptwebserver.pid
+ local PID="$(cat aptwebserver.pid)"
+ if [ -z "$PID" ]; then
+ msgdie 'Could not fork aptwebserver successfully'
+ fi
+ addtrap "kill $PID;"
+ waitforpidfile aptwebserver.port
+ APTHTTPPORT="$(cat aptwebserver.port)"
+ if [ -z "$APTHTTPPORT" ]; then
+ msgdie 'Could not get port for aptwebserver successfully'
+ fi
+ cd - > /dev/null
+ else
+ msgdie 'You have to build apt from source to have test/interactive-helper/aptwebserver available for tests requiring a webserver'
+ fi
+ if [ "$REWRTE" != 'yes' ]; then
+ rewritesourceslist "http://localhost:${APTHTTPPORT}/"
+ fi
+}
+
+changetohttpswebserver() {
+ local stunnel4
+ if command -v stunnel4 >/dev/null 2>&1; then
+ stunnel4=stunnel4
+ elif command -v stunnel >/dev/null 2>&1; then
+ stunnel4=stunnel
+ else
+ msgdie 'You need to install stunnel4 for https testcases'
+ fi
+ if [ ! -e "${TMPWORKINGDIRECTORY}/aptarchive/aptwebserver.pid" ]; then
+ changetowebserver --no-rewrite "$@"
+ fi
+ echo "pid = ${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid
+cert = ${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem
+output = /dev/null
+
+[https]
+accept = 127.0.0.1:0
+connect = $APTHTTPPORT
+" > "${TMPWORKINGDIRECTORY}/stunnel.conf"
+ $stunnel4 "${TMPWORKINGDIRECTORY}/stunnel.conf"
+ waitforpidfile "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid"
+ local PID="$(cat "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid")"
+ if [ -z "$PID" ]; then
+ msgdie 'Could not fork $stunnel4 successfully'
+ fi
+ addtrap 'prefix' "kill ${PID};"
+ APTHTTPSPORT="$(lsof -i -n | awk "/^$stunnel4 / && \$2 == \"${PID}\" {print \$9; exit; }" | cut -d':' -f 2)"
+ webserverconfig 'aptwebserver::port::https' "$APTHTTPSPORT" "https://localhost:${APTHTTPSPORT}"
+ rewritesourceslist "https://localhost:${APTHTTPSPORT}/"
+}
+
+changetocdrom() {
+ mkdir -p rootdir/media/cdrom/.disk
+ local CD="$(readlink -f rootdir/media/cdrom)"
+ cat > rootdir/etc/apt/apt.conf.d/00cdrom <<EOF
+acquire::cdrom::mount "${CD}";
+acquire::cdrom::"${CD}/"::mount "mv ${CD}-unmounted ${CD}";
+acquire::cdrom::"${CD}/"::umount "mv ${CD} ${CD}-unmounted";
+acquire::cdrom::autodetect 0;
+EOF
+ echo -n "$1" > "${CD}/.disk/info"
+ if [ ! -d aptarchive/dists ]; then
+ msgdie 'Flat file archive cdroms can not be created currently'
+ return 1
+ fi
+ mv aptarchive/dists "$CD"
+ ln -s "$(readlink -f ./incoming)" "$CD/pool"
+ find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list' -delete
+ # start with an unmounted disk
+ mv "${CD}" "${CD}-unmounted"
+ # we don't want the disk to be modifiable
+ addtrap 'prefix' "chmod -f -R +w '$(escape_shell "$PWD/rootdir/media/cdrom/dists/")' '$(escape_shell "$PWD/rootdir/media/cdrom-unmounted/dists/")' || true;"
+ chmod -R 555 rootdir/media/cdrom-unmounted/dists
+}
+
+downloadfile() {
+ local PROTO="${1%%:*}"
+ if ! apthelper -o Debug::Acquire::${PROTO}=1 -o Debug::pkgAcquire::Worker=1 \
+ download-file "$1" "$2" "$3" 2>&1 ; then
+ return 1
+ fi
+ # only if the file exists the download was successful
+ if [ -r "$2" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+cleanup_output() {
+ cat "$1" | sed \
+ -e '/gpgv: WARNING: This key is not suitable for signing in --compliance=gnupg mode/ d' \
+ -e '/^profiling:/ d' \
+ | sed -e '/\.\.\.profiling:/ {N;s#\.\.\.profiling:.*\n#...#g}' \
+ >"$2"
+}
+
+checkdiff() {
+ local TMPFILE1="${TMPWORKINGDIRECTORY}/rootdir/tmp/checkdiff.1.tmp"
+ local TMPFILE2="${TMPWORKINGDIRECTORY}/rootdir/tmp/checkdiff.2.tmp"
+ touch "$TMPFILE1" "$TMPFILE2"
+
+ cleanup_output "$1" "$TMPFILE1"
+ cleanup_output "$2" "$TMPFILE2"
+
+ local DIFFTEXT="$(command diff -u "$TMPFILE1" "$TMPFILE2" 2>&1 | sed -e '/^---/ d' -e '/^+++/ d' -e '/^@@/ d')"
+ if [ -n "$DIFFTEXT" ]; then
+ echo >&2
+ echo >&2 "$DIFFTEXT"
+ return 1
+ else
+ return 0
+ fi
+}
+
+testoutputequal() {
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testoutputequal.output"
+ local COMPAREFILE="$1"
+ shift
+ if "$@" 2>&1 | checkdiff "$COMPAREFILE" - >"$OUTPUT" 2>&1; then
+ msgpass
+ else
+ echo "=== content of file we compared with (${COMPAREFILE}) ===" >>"${OUTPUT}"
+ cat "$COMPAREFILE" >>"${OUTPUT}"
+ msgfailoutput '' "$OUTPUT" "$@"
+ fi
+}
+
+testfileequal() {
+ msggroup 'testfileequal'
+ local MSG='Test for correctness of file'
+ if [ "$1" = '--nomsg' ]; then
+ MSG=''
+ shift
+ fi
+ local FILE="$1"
+ shift
+ if [ -n "$MSG" ]; then
+ msgtest "$MSG" "$FILE"
+ fi
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfileequal.output"
+ if [ -z "$*" ]; then
+ testoutputequal "$FILE" echo -n ''
+ else
+ testoutputequal "$FILE" echo "$*"
+ fi
+ msggroup
+}
+
+testempty() {
+ msggroup 'testempty'
+ if [ "$1" = '--nomsg' ]; then
+ shift
+ else
+ msgtest "Test for no output of" "$*"
+ fi
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testempty.comparefile"
+ if "$@" >"$COMPAREFILE" 2>&1 && test ! -s "$COMPAREFILE"; then
+ msgpass
+ else
+ msgfailoutput '' "$COMPAREFILE" "$@"
+ fi
+ aptautotest 'testempty' "$@"
+ msggroup
+}
+testwarningempty() {
+ testwarning "$@"
+ testfailure grep -v '^W:' "${ROOTDIR}/tmp/testwarning.output"
+}
+testnotempty() {
+ msggroup 'testnotempty'
+ msgtest "Test for some output of" "$*"
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testnotempty.comparefile"
+ if ("$@" >"$COMPAREFILE" 2>&1 || true) && test -s "$COMPAREFILE"; then
+ msgpass
+ else
+ msgfailoutput '' "$COMPAREFILE" "$@"
+ fi
+ aptautotest 'testnotempty' "$@"
+ msggroup
+}
+
+testequal() {
+ msggroup 'testequal'
+ local MSG='Test of equality of'
+ if [ "$1" = '--nomsg' ]; then
+ MSG=''
+ shift
+ fi
+
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.comparefile"
+ echo "$1" > "$COMPAREFILE"
+ shift
+
+ if [ -n "$MSG" ]; then
+ msgtest "$MSG" "$*"
+ fi
+ testoutputequal "$COMPAREFILE" "$@"
+ aptautotest 'testequal' "$@"
+ msggroup
+}
+
+testequalor2() {
+ msggroup 'testequalor2'
+ local COMPAREFILE1="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile1"
+ local COMPAREFILE2="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile2"
+ local COMPAREAGAINST="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.compareagainst"
+ echo "$1" > "$COMPAREFILE1"
+ echo "$2" > "$COMPAREFILE2"
+ shift 2
+ msgtest "Test for equality OR of" "$*"
+ "$@" >"$COMPAREAGAINST" 2>&1 || true
+ if checkdiff "$COMPAREFILE1" "$COMPAREAGAINST" >/dev/null 2>&1 || \
+ checkdiff "$COMPAREFILE2" "$COMPAREAGAINST" >/dev/null 2>&1
+ then
+ msgpass
+ else
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.output"
+ echo -n "\n${CINFO}Diff against OR 1${CNORMAL}" >"$OUTPUT" 2>&1
+ checkdiff "$COMPAREFILE1" "$COMPAREAGAINST" >"$OUTPUT" 2>&1 || true
+ echo -n "${CINFO}Diff against OR 2${CNORMAL}" >"$OUTPUT" 2>&1
+ checkdiff "$COMPAREFILE2" "$COMPAREAGAINST" >"$OUTPUT" 2>&1 || true
+ msgfailoutput '' "$OUTPUT"
+ fi
+ aptautotest 'testequalor2' "$@"
+ msggroup
+}
+
+testshowvirtual() {
+ msggroup 'testshowvirtual'
+ local VIRTUAL="N: Can't select versions from package '$1' as it is purely virtual"
+ local PACKAGE="$1"
+ shift
+ while [ -n "$1" ]; do
+ VIRTUAL="${VIRTUAL}
+N: Can't select versions from package '$1' as it is purely virtual"
+ PACKAGE="${PACKAGE} $1"
+ shift
+ done
+ msgtest "Test for virtual packages" "apt-cache show $PACKAGE"
+ VIRTUAL="${VIRTUAL}
+N: No packages found"
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testshowvirtual.comparefile"
+ local ARCH="$(getarchitecture 'native')"
+ echo "$VIRTUAL" | sed -e "s/:$ARCH//" -e 's/:all//' >"$COMPAREFILE"
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testshowvirtual.output"
+ testoutputequal "$COMPAREFILE" aptcache show "$PACKAGE"
+ msggroup
+}
+
+testnopackage() {
+ msggroup 'testnopackage'
+ msgtest "Test for non-existent packages" "apt-cache show $*"
+ local SHOWPKG="$(aptcache show "$@" 2>&1 | grep '^Package: ')"
+ if [ -n "$SHOWPKG" ]; then
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testnopackage.output"
+ echo "$SHOWPKG" >"$OUTPUT"
+ msgfailoutput '' "$OUTPUT"
+ else
+ msgpass
+ fi
+ msggroup
+}
+testnosrcpackage() {
+ msggroup 'testnosrcpackage'
+ msgtest "Test for non-existent source packages" "apt-cache showsrc $*"
+ local SHOWPKG="$(aptcache showsrc "$@" 2>&1 | grep '^Package: ')"
+ if [ -n "$SHOWPKG" ]; then
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testnosrcpackage.output"
+ echo "$SHOWPKG" >"$OUTPUT"
+ msgfailoutput '' "$OUTPUT"
+ else
+ msgpass
+ fi
+ msggroup
+}
+
+testdpkgstatus() {
+ msggroup 'testdpkgstatus'
+ local STATE="$1"
+ local NR="$2"
+ shift 2
+ msgtest "Test that $NR package(s) are in state $STATE with" "dpkg -l $*"
+ local PKGS="$(dpkg -l "$@" 2>/dev/null | grep "^${STATE}" | wc -l)"
+ if [ "$PKGS" != $NR ]; then
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testnopackage.output"
+ echo "$PKGS" >"$OUTPUT"
+ dpkg -l "$@" | grep '^[a-z]' >"$OUTPUT" >&2 || true
+ msgfailoutput '' "$OUTPUT"
+ else
+ msgpass
+ fi
+ msggroup
+}
+
+testdpkginstalled() {
+ msggroup 'testdpkginstalled'
+ testdpkgstatus 'ii' "$#" "$@"
+ msggroup
+}
+
+testdpkgnotinstalled() {
+ msggroup 'testdpkgnotinstalled'
+ testdpkgstatus 'ii' '0' "$@"
+ msggroup
+}
+
+testmarkedauto() {
+ msggroup 'testmarkedauto'
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedauto.comparefile"
+ if [ -n "$1" ]; then
+ msgtest 'Test for correctly marked as auto-installed' "$*"
+ while [ -n "$1" ]; do echo "$1"; shift; done | sort > "$COMPAREFILE"
+ else
+ msgtest 'Test for correctly marked as auto-installed' 'no package'
+ echo -n > "$COMPAREFILE"
+ fi
+ testoutputequal "$COMPAREFILE" aptmark showauto
+ msggroup
+}
+testmarkedmanual() {
+ msggroup 'testmarkedmanual'
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedmanual.comparefile"
+ if [ -n "$1" ]; then
+ msgtest 'Test for correctly marked as manually installed' "$*"
+ while [ -n "$1" ]; do echo "$1"; shift; done | sort > "$COMPAREFILE"
+ else
+ msgtest 'Test for correctly marked as manually installed' 'no package'
+ echo -n > "$COMPAREFILE"
+ fi
+ testoutputequal "$COMPAREFILE" aptmark showmanual
+ msggroup
+}
+
+catfile() {
+ if [ "${1##*.}" = 'deb' ]; then
+ stat >&2 "$1" || true
+ file >&2 "$1" || true
+ else
+ cat >&2 "$1" || true
+ fi
+}
+msgfailoutput() {
+ msgreportheader 'msgfailoutput'
+ local MSG="$1"
+ local OUTPUT="$2"
+ shift 2
+ local CMD="$1"
+ if [ "$1" = 'grep' -o "$1" = 'tail' -o "$1" = 'head' ]; then
+ echo >&2
+ while [ -n "$2" ]; do shift; done
+ echo "#### Complete file: $1 ####"
+ catfile "$1"
+ echo "#### $CMD output ####"
+ elif [ "$1" = 'test' ]; then
+ echo >&2
+ # doesn't support ! or non-file flags
+ msgfailoutputstatfile() {
+ local FILEFLAGS='^-[bcdefgGhkLOprsStuwx]$'
+ if expr match "$1" "$FILEFLAGS" >/dev/null; then
+ echo "#### stat(2) of file: $2 ####"
+ stat "$2" || true
+ if test -d "$2"; then
+ echo "#### The directory contains: $2 ####"
+ ls >&2 "$2" || true
+ elif test -e "$2"; then
+ echo "#### Complete file: $2 ####"
+ catfile "$2"
+ fi
+ fi
+ }
+ msgfailoutputstatfile "$2" "$3"
+ while [ -n "$5" ] && [ "$4" = '-o' -o "$4" = '-a' ]; do
+ shift 3
+ msgfailoutputstatfile "$2" "$3"
+ done
+ echo '#### test output ####'
+ elif [ "$1" = 'cmp' ]; then
+ echo >&2
+ while [ -n "$2" ]; do
+ echo "#### Complete file: $2 ####"
+ catfile "$2"
+ shift
+ done
+ echo '#### cmp output ####'
+ fi
+ catfile "$OUTPUT"
+ msgfail "$MSG"
+}
+
+testsuccesswithglobalerror() {
+ local TYPE="$1"
+ local ERRORS="$2"
+ shift 2
+ msggroup "$TYPE"
+ if [ "$1" = '--nomsg' ]; then
+ shift
+ else
+ msgtest 'Test for successful execution of' "$*"
+ fi
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/${TYPE}.output"
+ if "$@" >"${OUTPUT}" 2>&1; then
+ if expr match "$1" '^apt.*' >/dev/null; then
+ if grep -q -E ' runtime error: ' "$OUTPUT"; then
+ msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+ elif grep -E "^[${ERRORS}]: " "$OUTPUT" > "${TMPWORKINGDIRECTORY}/rootdir/tmp/checkforwarnings.output" 2>&1; then
+ if [ "$IGNORE_PTY_NOT_MOUNTED" = '1' ]; then
+ if echo 'E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory)' \
+ | cmp - "${TMPWORKINGDIRECTORY}/rootdir/tmp/checkforwarnings.output" >/dev/null 2>&1; then
+ msgpass
+ else
+ msgfailoutput 'successful run, but output contains warnings/errors' "$OUTPUT" "$@"
+ fi
+ else
+ msgfailoutput 'successful run, but output contains warnings/errors' "$OUTPUT" "$@"
+ fi
+ elif [ "$TYPE" = 'testsuccesswithnotice' ]; then
+ if grep -q -E "^N: " "$OUTPUT"; then
+ msgpass
+ else
+ msgfailoutput 'successful run, but output had no notices' "$OUTPUT" "$@"
+ fi
+ else
+ msgpass
+ fi
+ else
+ msgpass
+ fi
+ else
+ local EXITCODE=$?
+ msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
+ fi
+ aptautotest "$TYPE" "$@"
+ msggroup
+}
+testsuccesswithnotice() {
+ testsuccesswithglobalerror 'testsuccesswithnotice' 'WE' "$@"
+}
+testsuccess() {
+ testsuccesswithglobalerror 'testsuccess' 'NWE' "$@"
+}
+testwarning() {
+ msggroup 'testwarning'
+ if [ "$1" = '--nomsg' ]; then
+ shift
+ else
+ msgtest 'Test for successful execution with warnings of' "$*"
+ fi
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarning.output"
+ if "$@" >"${OUTPUT}" 2>&1; then
+ if expr match "$1" '^apt.*' >/dev/null; then
+ if grep -q -E ' runtime error: ' "$OUTPUT"; then
+ msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+ elif grep -q -E '^E: ' "$OUTPUT"; then
+ msgfailoutput 'successful run, but output contains errors' "$OUTPUT" "$@"
+ elif ! grep -q -E '^W: ' "$OUTPUT"; then
+ msgfailoutput 'successful run, but output contains no warnings' "$OUTPUT" "$@"
+ else
+ msgpass
+ fi
+ else
+ msgpass
+ fi
+ else
+ local EXITCODE=$?
+ msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
+ fi
+ aptautotest 'testwarning' "$@"
+ msggroup
+}
+testfailure() {
+ msggroup 'testfailure'
+ if [ "$1" = '--nomsg' ]; then
+ shift
+ else
+ msgtest 'Test for failure in execution of' "$*"
+ fi
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output"
+ if "$@" >"${OUTPUT}" 2>&1; then
+ local EXITCODE=$?
+ msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
+ else
+ local EXITCODE=$?
+ if expr match "$1" '^apt.*' >/dev/null; then
+ if [ "$1" = 'aptkey' ]; then
+ if grep -q " Can't check signature:
+ BAD signature from
+ signature could not be verified" "$OUTPUT"; then
+ msgpass
+ else
+ msgfailoutput "run failed with exitcode ${EXITCODE}, but no signature error" "$OUTPUT" "$@"
+ fi
+ else
+ if grep -q -E ' runtime error: ' "$OUTPUT"; then
+ msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+ elif grep -q -E '==ERROR' "$OUTPUT"; then
+ msgfailoutput 'compiler sanitizers reported errors' "$OUTPUT" "$@"
+ elif ! grep -q -E '^E: ' "$OUTPUT"; then
+ msgfailoutput "run failed with exitcode ${EXITCODE}, but with no errors" "$OUTPUT" "$@"
+ else
+ msgpass
+ fi
+ fi
+ else
+ msgpass
+ fi
+ fi
+ aptautotest 'testfailure' "$@"
+ msggroup
+}
+
+testreturnstateequal() {
+ local STATE="$1"
+ if [ "$STATE" = 'testsuccesswithglobalerror' ]; then
+ local STATE="$2"
+ local TYPE="$3"
+ shift 3
+ msggroup "${STATE}equal"
+ if [ "$1" != '--nomsg' ]; then
+ local CMP="$1"
+ shift
+ testsuccesswithglobalerror "$STATE" "$TYPE" "$@"
+ testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP"
+ else
+ local CMP="$2"
+ shift 2
+ testsuccesswithglobalerror "$STATE" "$TYPE" "$@"
+ testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP"
+ fi
+ else
+ msggroup "${STATE}equal"
+ if [ "$2" != '--nomsg' ]; then
+ local CMP="$2"
+ shift 2
+ "$STATE" "$@"
+ testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP"
+ else
+ local CMP="$3"
+ shift 3
+ "$STATE" --nomsg "$@"
+ testfileequal "${TMPWORKINGDIRECTORY}/rootdir/tmp/${STATE}.output" "$CMP"
+ fi
+ fi
+ msggroup
+}
+testsuccessequal() {
+ # we compare output, so we know perfectly well about N:
+ testreturnstateequal 'testsuccesswithglobalerror' 'testsuccess' 'WE' "$@"
+}
+testwarningequal() {
+ testreturnstateequal 'testwarning' "$@"
+}
+testfailureequal() {
+ testreturnstateequal 'testfailure' "$@"
+}
+
+testfailuremsg() {
+ msggroup 'testfailuremsg'
+ local CMP="$1"
+ shift
+ testfailure "$@"
+ msgtest 'Check that the output of the previous failed command has expected' 'failures and warnings'
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailuremsg.comparefile"
+ grep '^\(W\|E\|N\):' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output" > "$COMPAREFILE" 2>&1 || true
+ testoutputequal "$COMPAREFILE" echo "$CMP"
+ msggroup
+}
+testwarningmsg() {
+ msggroup 'testwarningmsg'
+ local CMP="$1"
+ shift
+ testwarning "$@"
+ msgtest 'Check that the output of the previous warned command has expected' 'warnings'
+ local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarningmsg.comparefile"
+ grep '^\(W\|E\|N\):' "${TMPWORKINGDIRECTORY}/rootdir/tmp/testwarning.output" > "$COMPAREFILE" 2>&1 || true
+ testoutputequal "$COMPAREFILE" echo "$CMP"
+ msggroup
+}
+
+testfilestats() {
+ msggroup 'testfilestats'
+ msgtest "Test that file $1 has $2 $3" "$4"
+ if [ "$4" "$3" "$(stat --format "$2" "$1")" ]; then
+ msgpass
+ else
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfilestats.output"
+ {
+ ls -ld "$1" || true
+ echo -n "stat(1) reports for $2: "
+ stat --format "$2" "$1" || true
+ } >"$OUTPUT" 2>&1
+ msgfailoutput '' "$OUTPUT"
+ fi
+ msggroup
+}
+testaccessrights() {
+ msggroup 'testaccessrights'
+ testfilestats "$1" '%a' '=' "$2"
+ msggroup
+}
+
+testwebserverlaststatuscode() {
+ msggroup 'testwebserverlaststatuscode'
+ local DOWNLOG="${TMPWORKINGDIRECTORY}/rootdir/tmp/webserverstatus-testfile.log"
+ local STATUS="${TMPWORKINGDIRECTORY}/downloaded/webserverstatus-statusfile.log"
+ rm -f "$DOWNLOG" "$STATUS"
+ msgtest 'Test last status code from the webserver was' "$1"
+ if downloadfile "http://localhost:${APTHTTPPORT}/_config/find/aptwebserver::last-status-code" "$STATUS" > "$DOWNLOG" && [ "$(cat "$STATUS")" = "$1" ]; then
+ msgpass
+ else
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwebserverlaststatuscode.output"
+ {
+ if [ -n "$2" ]; then
+ shift
+ echo >&2 '#### Additionally provided output files contain:'
+ cat >&2 "$@"
+ fi
+ echo >&2 '#### Download log of the status code:'
+ cat >&2 "$DOWNLOG"
+ } >"$OUTPUT" 2>&1
+ msgfailoutput "Status was $(cat "$STATUS")" "$OUTPUT"
+ fi
+ msggroup
+}
+
+mapkeynametokeyid() {
+ while [ -n "$1" ]; do
+ case "$1" in
+ *Joe*|*Sixpack*|newarchive) echo '5A90D141DBAC8DAE';;
+ *Rex*|*Expired*) echo '4BC0A39C27CE74F9';;
+ *Marvin*|*Paranoid*) echo 'E8525D47528144E2';;
+ *Sebastian*|*Subkey*) echo '5B6896415D44C43E';;
+ oldarchive) echo 'FDD2DB85F68C85A3';;
+ *) echo 'UNKNOWN KEY';;
+ esac
+ shift
+ done
+}
+testaptkeys() {
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/aptkeylist.output"
+ if ! aptkey list --with-colon 2>/dev/null | grep '^pub' | cut -d':' -f 5 > "$OUTPUT"; then
+ echo -n > "$OUTPUT"
+ fi
+ testfileequal "$OUTPUT" "$(mapkeynametokeyid "$@")"
+}
+
+pause() {
+ echo "STOPPED execution. Press enter to continue"
+ local IGNORE
+ read IGNORE
+}
+
+logcurrentarchivedirectory() {
+ find "${TMPWORKINGDIRECTORY}/aptarchive/dists" -type f | while read line; do
+ stat --format '%U:%G:%a:%n' "$line"
+ done | sort > "${TMPWORKINGDIRECTORY}/rootdir/var/log/aptgetupdate.before.lst"
+}
+listcurrentlistsdirectory() {
+ {
+ find rootdir/var/lib/apt/lists -maxdepth 1 -type d | while read line; do
+ stat --format '%U:%G:%a:%n' "$line"
+ done
+ find rootdir/var/lib/apt/lists -maxdepth 1 \! -type d | while read line; do
+ stat --format '%U:%G:%a:%s:%y:%n' "$line"
+ done
+ } | sort
+}
+forallsupportedcompressors() {
+ rm -f "${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/00force-compressor"
+ for COMP in $(aptconfig dump 'APT::Compressor' --format '%f%n' | cut -d':' -f 5 | uniq); do
+ if [ -z "$COMP" -o "$COMP" = '.' ]; then continue; fi
+ "$@" "$COMP"
+ done
+}
+
+breakfiles() {
+ while [ -n "$1" ]; do
+ mv -f "${1}" "${1}.bak"
+ testsuccess dd if=/dev/zero of="${1}" bs="$(stat -c %s "${1}.bak")" count=1
+ shift
+ done
+}
+unbreakfiles() {
+ while [ -n "$1" ]; do
+ mv -f "${1}.bak" "${1}"
+ shift
+ done
+}
+
+### convenience hacks ###
+mkdir() {
+ # creating some directories by hand is a tedious task, so make it look simple
+ local PARAMS="$*"
+ if [ "$PARAMS" != "${PARAMS#*rootdir/var/lib/apt/lists}" ]; then
+ # only the last directory created by mkdir is effected by the -m !
+ command mkdir -m 755 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt"
+ command mkdir -m 755 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists"
+ command mkdir -m 700 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial"
+ command mkdir -m 755 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/auxfiles"
+ touch "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/lock"
+ if [ "$(id -u)" = '0' ]; then
+ chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial"
+ chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/auxfiles"
+ fi
+ else
+ command mkdir "$@"
+ fi
+}
+
+### The following tests are run by most test methods automatically to check
+### general things about commands executed without writing the test every time.
+
+aptautotest() {
+ if [ $# -lt 3 ]; then return; fi
+ local TESTCALL="$1"
+ local CMD="$2"
+ local FIRSTOPT="$3"
+ shift 2
+ for i in "$@"; do
+ if ! expr match "$i" '^-' >/dev/null 2>&1; then
+ FIRSTOPT="$i"
+ break
+ fi
+ done
+ shift
+ local AUTOTEST="aptautotest_$(echo "${CMD##*/}_${FIRSTOPT}" | tr -d -c 'A-za-z0-9')"
+ if command -v $AUTOTEST >/dev/null; then
+ # save and restore the *.output files from other tests
+ # as we might otherwise override them in these automatic tests
+ rm -rf "${TMPWORKINGDIRECTORY}/rootdir/tmp-before"
+ mv "${TMPWORKINGDIRECTORY}/rootdir/tmp" "${TMPWORKINGDIRECTORY}/rootdir/tmp-before"
+ mkdir "${TMPWORKINGDIRECTORY}/rootdir/tmp"
+ $AUTOTEST "$TESTCALL" "$@"
+ rm -rf "${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest"
+ mv "${TMPWORKINGDIRECTORY}/rootdir/tmp" "${TMPWORKINGDIRECTORY}/rootdir/tmp-aptautotest"
+ mv "${TMPWORKINGDIRECTORY}/rootdir/tmp-before" "${TMPWORKINGDIRECTORY}/rootdir/tmp"
+ fi
+}
+
+aptautotest_aptget_update() {
+ local TESTCALL="$1"
+ while [ -n "$2" ]; do
+ if [ "$2" = '--print-uris' ]; then return; fi # simulation mode
+ shift
+ done
+ if ! test -d "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists"; then return; fi
+ testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
+ testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:755"
+ (
+ cd /
+ # all copied files are properly chmodded
+ local backupIFS="$IFS"
+ IFS="$(printf "\n\b")"
+ find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -type f ! -name 'lock' | while read file; do
+ testfilestats "$file" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+ done
+ IFS="$backupIFS"
+ if [ "$TESTCALL" = 'testsuccess' ]; then
+ # failure cases can retain partial files and such
+ testempty find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" -mindepth 1 ! \( -name 'lock' -o -name '*.FAILED' \)
+ fi
+ if [ -s "${TMPWORKINGDIRECTORY}/rootdir/var/log/aptgetupdate.before.lst" ]; then
+ testfileequal "${TMPWORKINGDIRECTORY}/rootdir/var/log/aptgetupdate.before.lst" \
+ "$(find "${TMPWORKINGDIRECTORY}/aptarchive/dists" -type f | while read line; do stat --format '%U:%G:%a:%n' "$line"; done | sort)"
+ fi
+ )
+}
+aptautotest_apt_update() { aptautotest_aptget_update "$@"; }
+aptautotest_aptcdrom_add() { aptautotest_aptget_update "$@"; }
+
+testaptautotestnodpkgwarning() {
+ local TESTCALL="$1"
+ while [ -n "$2" ]; do
+ if expr match "$2" '^-[a-z]*s' >/dev/null 2>&1; then return; fi # simulation mode
+ if expr match "$2" '^-dy\?' >/dev/null 2>&1; then return; fi # download-only mode
+ shift
+ done
+ testfailure grep '^dpkg: warning:.*\(ignor\|unknown\).*' "${TMPWORKINGDIRECTORY}/rootdir/tmp-before/${TESTCALL}.output"
+}
+
+aptautotest_aptget_install() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_aptget_remove() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_aptget_purge() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_apt_install() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_apt_remove() { testaptautotestnodpkgwarning "$@"; }
+aptautotest_apt_purge() { testaptautotestnodpkgwarning "$@"; }
+
+testaptmarknodefaultsections() {
+ testfailure grep '^Auto-Installed: 0$' "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/extended_states"
+}
+aptautotest_aptmark_auto() { testaptmarknodefaultsections "$@"; }
+aptautotest_aptmark_manual() { testaptmarknodefaultsections "$@"; }
+aptautotest_aptget_markauto() { testaptmarknodefaultsections "$@"; }
+aptautotest_aptget_markmanual() { testaptmarknodefaultsections "$@"; }
diff --git a/test/integration/header-compilation b/test/integration/header-compilation
new file mode 100755
index 0000000..33e0a5c
--- /dev/null
+++ b/test/integration/header-compilation
@@ -0,0 +1,26 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+
+(for i in $TESTDIR/../../build/include/apt-pkg/*.h; do echo "#include \"$i\""; done) > include.h
+
+
+testone() {
+ local cxx=$1
+ shift
+
+ if type $cxx 2>&1 1>/dev/null; then
+ testsuccess $cxx -c -o /dev/null include.h
+ testsuccess $cxx -c -o /dev/null -std=c++98 include.h
+ testsuccess $cxx -c -o /dev/null -std=c++11 include.h
+ else
+ msgskip "Compile $cxx is not installed"
+ fi
+}
+
+testone clang++
+testone g++
+testone g++-4.8
diff --git a/test/integration/joesixpack.pub b/test/integration/joesixpack.pub
new file mode 100644
index 0000000..cad0561
--- /dev/null
+++ b/test/integration/joesixpack.pub
Binary files differ
diff --git a/test/integration/joesixpack.sec b/test/integration/joesixpack.sec
new file mode 100644
index 0000000..0dc5cd8
--- /dev/null
+++ b/test/integration/joesixpack.sec
Binary files differ
diff --git a/test/integration/keyrings/test-archive-keyring.pub b/test/integration/keyrings/test-archive-keyring.pub
new file mode 100644
index 0000000..3251740
--- /dev/null
+++ b/test/integration/keyrings/test-archive-keyring.pub
Binary files differ
diff --git a/test/integration/keyrings/test-archive-keyring.sec b/test/integration/keyrings/test-archive-keyring.sec
new file mode 100644
index 0000000..001f795
--- /dev/null
+++ b/test/integration/keyrings/test-archive-keyring.sec
Binary files differ
diff --git a/test/integration/keyrings/test-master-keyring.pub b/test/integration/keyrings/test-master-keyring.pub
new file mode 100644
index 0000000..9809d32
--- /dev/null
+++ b/test/integration/keyrings/test-master-keyring.pub
Binary files differ
diff --git a/test/integration/keyrings/test-master-keyring.sec b/test/integration/keyrings/test-master-keyring.sec
new file mode 100644
index 0000000..c5c5bfd
--- /dev/null
+++ b/test/integration/keyrings/test-master-keyring.sec
Binary files differ
diff --git a/test/integration/marvinparanoid.pub b/test/integration/marvinparanoid.pub
new file mode 100644
index 0000000..866dc14
--- /dev/null
+++ b/test/integration/marvinparanoid.pub
Binary files differ
diff --git a/test/integration/marvinparanoid.sec b/test/integration/marvinparanoid.sec
new file mode 100644
index 0000000..ace09f7
--- /dev/null
+++ b/test/integration/marvinparanoid.sec
Binary files differ
diff --git a/test/integration/rexexpired.pub b/test/integration/rexexpired.pub
new file mode 100644
index 0000000..2d2c81c
--- /dev/null
+++ b/test/integration/rexexpired.pub
Binary files differ
diff --git a/test/integration/rexexpired.sec b/test/integration/rexexpired.sec
new file mode 100644
index 0000000..c431fd9
--- /dev/null
+++ b/test/integration/rexexpired.sec
Binary files differ
diff --git a/test/integration/run-tests b/test/integration/run-tests
new file mode 100755
index 0000000..80f1fc6
--- /dev/null
+++ b/test/integration/run-tests
@@ -0,0 +1,164 @@
+#!/bin/sh
+set -e
+
+TESTTORUN=''
+while [ -n "$1" ]; do
+ if [ "$1" = "-q" ]; then
+ export MSGLEVEL=2
+ elif [ "$1" = "-qq" ]; then
+ export MSGLEVEL=1
+ elif [ "$1" = "-v" ]; then
+ export MSGLEVEL=4
+ elif [ "$1" = '--color=no' ]; then
+ export MSGCOLOR='NO'
+ elif [ "$1" = '--color=yes' ]; then
+ export MSGCOLOR='YES'
+ elif [ "$1" = '--color' ]; then
+ export MSGCOLOR="$(echo "$2" | tr 'a-z' 'A-Z')"
+ shift
+ elif [ "$1" = '--level' ]; then
+ export MSGLEVEL=$2
+ shift
+ elif [ "$1" = '-j' ]; then
+ APT_TEST_JOBS=$2
+ shift
+ elif [ -x "$1" ]; then
+ TESTTORUN="$1"
+ else
+ echo >&2 "WARNING: Unknown parameter »$1« will be ignored"
+ fi
+ shift
+done
+export MSGLEVEL="${MSGLEVEL:-3}"
+
+if [ "${MSGCOLOR:-YES}" = 'YES' ]; then
+ if [ ! -t 1 ]; then # but check that we output to a terminal
+ export MSGCOLOR='NO'
+ fi
+fi
+if [ "$MSGCOLOR" != 'NO' ]; then
+ CTEST='\033[1;32m'
+ CHIGH='\033[1;35m'
+ CRESET='\033[0m'
+else
+ CTEST=''
+ CHIGH=''
+ CRESET=''
+fi
+
+if [ -n "$TESTTORUN" ]; then
+ # collecting the output of one test to have it together
+ OUTPUT="$(mktemp)"
+ CURRENTTRAP="rm -f \"$OUTPUT\"; $CURRENTTRAP"
+ trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
+ {
+ if [ "$MSGLEVEL" -le 1 ]; then
+ printf "${TESTTORUN##*/}"
+ elif [ "$MSGLEVEL" -le 2 ]; then
+ printf "${CTEST}Testcase ${CHIGH}${TESTTORUN##*/}${CRESET}: "
+ else
+ printf "${CTEST}Run Testcase ${CHIGH}${TESTTORUN##*/}${CRESET}\n"
+ fi
+ if ! "$TESTTORUN"; then
+ FAIL='yes'
+ if [ "$MSGLEVEL" -le 2 ]; then
+ printf >&2 "\n${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}\n"
+ elif [ "$MSGLEVEL" -le 2 ]; then
+ printf >&2 "\n${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}"
+ else
+ echo >&2 "${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}"
+ fi
+ else
+ if [ "$MSGLEVEL" -le 1 ]; then
+ printf " "
+ fi
+ fi
+ if [ "$MSGLEVEL" -le 1 ]; then
+ :
+ elif [ "$MSGLEVEL" -le 2 ]; then
+ echo
+ fi
+ } >"$OUTPUT" 2>&1
+ # without we end up getting stepped output 'randomly'
+ stty sane
+ cat >&2 "$OUTPUT"
+ stty sane
+ if [ "$FAIL" = 'yes' ]; then
+ exit 1
+ else
+ exit 0
+ fi
+fi
+
+FAIL=0
+PASS=0
+ALL=0
+FAILED_TESTS=""
+DIR="$(readlink -f "$(dirname "$0")")"
+cd "$DIR"
+TESTLIST="$(find . -mindepth 1 -maxdepth 1 -regex '^\./test-[^/]*$' | sort)"
+if [ -n "$APT_TEST_JOBS" ]; then
+ if [ "$MSGCOLOR" != 'NO' ]; then
+ export MSGCOLOR='ALWAYS'
+ fi
+ parallel=parallel
+ if command -v moreutils-parallel >/dev/null 2>&1; then
+ parallel=moreutils-parallel
+ fi
+ exec $parallel -j "$APT_TEST_JOBS" "./$(basename "$0")" -- $(echo "$TESTLIST")
+fi
+
+APT_TEST_SIGNINGHOME="$(mktemp --directory --tmpdir 'apt-key-signinghome.XXXXXXXXXX')"
+removesigninghome() {
+ if [ -z "$APT_TEST_SIGNINGHOME" ]; then return; fi
+ GNUPGHOME="${APT_TEST_SIGNINGHOME}" gpgconf --kill gpg-agent >/dev/null 2>&1 || true
+ rm -rf -- "$APT_TEST_SIGNINGHOME"
+}
+trap "exit 1" 0 HUP INT ILL ABRT FPE SEGV PIPE TERM
+trap "removesigninghome" 0 QUIT
+export APT_TEST_SIGNINGHOME
+
+TOTAL="$(echo "$TESTLIST" | wc -l)"
+if [ "$MSGLEVEL" -le 1 ]; then
+ printf "${CTEST}Running testcases${CRESET}: "
+fi
+for testcase in $TESTLIST; do
+ if [ "$MSGLEVEL" -le 1 ]; then
+ printf "${testcase##*/}"
+ elif [ "$MSGLEVEL" -le 2 ]; then
+ printf "($(($ALL+1))/${TOTAL}) ${CTEST}Testcase ${CHIGH}${testcase##*/}${CRESET}: "
+ else
+ printf "${CTEST}Run Testcase ($(($ALL+1))/${TOTAL}) ${CHIGH}${testcase##*/}${CRESET}\n"
+ fi
+ if ! ${testcase}; then
+ FAIL=$((FAIL+1))
+ FAILED_TESTS="$FAILED_TESTS ${testcase##*/}"
+ if [ "$MSGLEVEL" -le 1 ]; then
+ printf >&2 "\n${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}\n"
+ elif [ "$MSGLEVEL" -le 2 ]; then
+ printf >&2 "\n${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}"
+ else
+ echo >&2 "${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}"
+ fi
+ else
+ PASS=$((PASS+1))
+ if [ "$MSGLEVEL" -le 1 ]; then
+ printf " "
+ fi
+ fi
+ ALL=$((ALL+1))
+ if [ "$MSGLEVEL" -le 1 ]; then
+ :
+ elif [ "$MSGLEVEL" -le 2 ]; then
+ echo
+ fi
+done
+
+echo >&2 "Statistics: $ALL tests were run: $PASS successfully and $FAIL failed"
+if [ -n "$FAILED_TESTS" ]; then
+ echo >&2 "Failed tests: $FAILED_TESTS"
+else
+ echo >&2 'All tests seem to have been run successfully. What could possibly go wrong?'
+fi
+# ensure we don't overflow
+exit $((FAIL <= 255 ? FAIL : 255))
diff --git a/test/integration/sebastiansubkey.master.sec b/test/integration/sebastiansubkey.master.sec
new file mode 100644
index 0000000..4d86fb9
--- /dev/null
+++ b/test/integration/sebastiansubkey.master.sec
Binary files differ
diff --git a/test/integration/sebastiansubkey.pub b/test/integration/sebastiansubkey.pub
new file mode 100644
index 0000000..c5f198c
--- /dev/null
+++ b/test/integration/sebastiansubkey.pub
Binary files differ
diff --git a/test/integration/sebastiansubkey.sec b/test/integration/sebastiansubkey.sec
new file mode 100644
index 0000000..fd40889
--- /dev/null
+++ b/test/integration/sebastiansubkey.sec
Binary files differ
diff --git a/test/integration/skip-acquire-same-repository-multiple-times b/test/integration/skip-acquire-same-repository-multiple-times
new file mode 100755
index 0000000..c8372bd
--- /dev/null
+++ b/test/integration/skip-acquire-same-repository-multiple-times
@@ -0,0 +1,85 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+TESTFILE="$TESTDIR/framework"
+cp "$TESTFILE" aptarchive/foo
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+getcodenamefromsuite() { echo "jessie"; }
+buildsimplenativepackage 'foo' 'all' '1.0' 'stable'
+setupaptarchive --no-update
+ln -s "${APTARCHIVE}/dists/stable" "${APTARCHIVE}/dists/jessie"
+for FILE in rootdir/etc/apt/sources.list.d/*-stable-* ; do
+ sed 's#stable#jessie#g' $FILE > $(echo "$FILE" | sed 's#stable#jessie#g')
+done
+
+# install a slowed down file: otherwise its to fast to reproduce combining
+NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods"
+OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)"
+rm "$NEWMETHODS"
+mkdir "$NEWMETHODS"
+backupIFS="$IFS"
+IFS="$(printf "\n\b")"
+for METH in $(find "$OLDMETHODS" ! -type d); do
+ ln -s "$OLDMETHODS/$(basename "$METH")" "$NEWMETHODS"
+done
+IFS="$backupIFS"
+rm "${NEWMETHODS}/file" "${NEWMETHODS}/http"
+cat >"${NEWMETHODS}/file" <<EOF
+#!/bin/sh
+while read line; do
+ echo "\$line"
+ if [ -z "\$line" ]; then
+ sleep 0.5
+ fi
+done | '$OLDMETHODS/'"\${0##*/}"
+EOF
+chmod +x "${NEWMETHODS}/file"
+ln -s "${NEWMETHODS}/file" "${NEWMETHODS}/http"
+
+tworepos() {
+ msgtest "Downloading the same repository twice over $1" "$3"
+ testsuccess --nomsg aptget update -o Debug::pkgAcquire::Worker=1
+ cp rootdir/tmp/testsuccess.output download.log
+ #cat download.log
+ aptget indextargets --format '$(FILENAME)' --no-release-info | sort > file.lst
+ testequal "$(find "$(readlink -f ./rootdir/var/lib/apt/lists)" -name '*_dists_*' \( ! -name '*InRelease' \) -type f | sort)" cat file.lst
+ testsuccess aptcache policy
+ testequal "foo:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 $1:$2 jessie/main all Packages
+ 500 $1:$2 stable/main all Packages" aptcache policy foo
+ testfailure aptcache show foo/unstable
+ testsuccess aptcache show foo/stable
+ testsuccess aptcache show foo/jessie
+}
+
+tworepos 'file' "$APTARCHIVE" 'no partial'
+testequal '14' grep -c '200%20URI%20Start' ./download.log
+testequal '14' grep -c '201%20URI%20Done' ./download.log
+testequal '8' grep -c '^ @ Queue: Action combined' ./download.log
+tworepos 'file' "$APTARCHIVE" 'hit'
+testequal '6' grep -c '200%20URI%20Start' ./download.log
+testequal '6' grep -c '201%20URI%20Done' ./download.log
+testequal '0' grep -c '^ @ Queue: Action combined' ./download.log
+rm -rf rootdir/var/lib/apt/lists
+
+changetowebserver
+
+tworepos 'http' "//localhost:${APTHTTPPORT}" 'no partial'
+testequal '12' grep -c '200%20URI%20Start' ./download.log
+testequal '12' grep -c '201%20URI%20Done' ./download.log
+testequal '8' grep -c '^ @ Queue: Action combined' ./download.log
+tworepos 'http' "//localhost:${APTHTTPPORT}" 'hit'
+testequal '2' grep -c '200%20URI%20Start' ./download.log
+testequal '4' grep -c '201%20URI%20Done' ./download.log
+testequal '0' grep -c '^ @ Queue: Action combined' ./download.log
+rm -rf rootdir/var/lib/apt/lists
diff --git a/test/integration/skip-apt-download-progress b/test/integration/skip-apt-download-progress
new file mode 100755
index 0000000..13a18f7
--- /dev/null
+++ b/test/integration/skip-apt-download-progress
@@ -0,0 +1,48 @@
+#!/bin/sh
+#
+# ensure downloading sends progress as a regression test for commit 9127d7ae
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+changetohttpswebserver
+
+assertprogress() {
+ testsuccess grep "dlstatus:1:0.0000:Retrieving file 1 of 1" "$1"
+ testsuccess grep -E "dlstatus:1:[1-9][0-9]{0,1}\.[0-9]{1,4}:Retrieving file 1 of 1" "$1"
+ testsuccess grep "dlstatus:1:100.0000:Retrieving file 1 of 1" "$1"
+}
+
+# we need to ensure the file is reasonable big so that apt has a chance to
+# actually report progress - but not too big to ensure its not delaying the
+# test too much
+TESTFILE=testfile.big
+testsuccess dd if=/dev/zero of=./aptarchive/$TESTFILE bs=1600k count=1
+
+OPT='-o APT::Status-Fd=3 -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1 -o Debug::Acquire::https=1'
+
+msgtest 'download progress works via' 'http'
+for i in 2 5 7 10 12 15; do
+ exec 3> apt-progress-http.log
+ testsuccess --nomsg apthelper download-file "http://localhost:${APTHTTPPORT}/$TESTFILE" ./downloaded/http-$TESTFILE $OPT -o Acquire::http::Dl-Limit=$((1600/i))
+ if [ "$(wc -l apt-progress-http.log | awk '{print $1}')" -ge 3 ]; then
+ break
+ fi
+done
+assertprogress apt-progress-http.log
+
+msgtest 'download progress works via' 'https'
+for i in 2 5 7 10 12 15; do
+ exec 3> apt-progress-https.log
+ testsuccess --nomsg apthelper download-file "https://localhost:${APTHTTPSPORT}/$TESTFILE" ./downloaded/https-$TESTFILE $OPT -o Acquire::https::Dl-Limit=$((1600/i))
+ if [ "$(wc -l apt-progress-https.log | awk '{print $1}')" -ge 3 ]; then
+ break
+ fi
+done
+assertprogress apt-progress-https.log
+
+# cleanup
+rm -f apt-progress*.log
diff --git a/test/integration/skip-apt-dropprivs b/test/integration/skip-apt-dropprivs
new file mode 100755
index 0000000..e0dd741
--- /dev/null
+++ b/test/integration/skip-apt-dropprivs
@@ -0,0 +1,32 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+aptdropprivs() { runapt "${APTTESTHELPERSBINDIR}/aptdropprivs" "$@"; }
+
+testsuccess aptdropprivs -- /bin/true
+testsuccess aptdropprivs --user "$USER" -- /bin/true
+testsuccess aptdropprivs --user 'nobody' -- /bin/true
+testsuccess aptdropprivs --user '_apt' -- /bin/true
+
+IDBIN='/usr/bin/id'
+testsuccessequal "$("$IDBIN")" aptdropprivs --user "$USER" -- "$IDBIN"
+
+SUDOBIN='/usr/bin/sudo'
+testequal "sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?" aptdropprivs --user 'nobody' -- "$SUDOBIN" "$IDBIN"
+
+if [ "$(id -u)" = '0' ]; then
+ testsuccessequal '_apt' aptdropprivs --user '_apt' -- "$IDBIN" '-un'
+ testsuccess aptdropprivs --user '_apt' -- '/bin/sh' '-c' 'export'
+ cp rootdir/tmp/testsuccess.output apt.env
+ testsuccessequal "export HOME='/nonexistent'" grep '^export HOME' apt.env
+ testsuccessequal "export USER='_apt'
+export USERNAME='_apt'" grep '^export USER' apt.env
+ testsuccessequal "export LOGNAME='_apt'" grep '^export LOGNAME' apt.env
+ testsuccessequal "export SHELL='/bin/sh'" grep '^export SHELL=' apt.env
+fi
diff --git a/test/integration/skip-avoid-avoiding-breaks-predepends b/test/integration/skip-avoid-avoiding-breaks-predepends
new file mode 100755
index 0000000..0697ff4
--- /dev/null
+++ b/test/integration/skip-avoid-avoiding-breaks-predepends
@@ -0,0 +1,21 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'native'
+
+insertinstalledpackage 'looping' 'native' '1'
+insertinstalledpackage 'loop1' 'native' '1' 'Depends: loop2 (= 1)'
+insertinstalledpackage 'loop2' 'native' '1' 'Depends: loop1 (= 1)'
+
+buildsimplenativepackage 'looping' 'native' '1.15.7.2' 'stable' 'Breaks: loop2 (<= 1)'
+buildsimplenativepackage 'loop1' 'native' '2' 'stable' 'Depends: loop2 (= 2)'
+buildsimplenativepackage 'loop2' 'native' '2' 'stable' 'Depends: loop1 (= 2)
+Pre-Depends: looping (>= 1.15)'
+
+setupaptarchive
+
+aptget dist-upgrade -y -o Debug::pkgOrderList=1 #-qq >/dev/null 2>&1
+testdpkginstalled looping loop1 loop2
diff --git a/test/integration/skip-bug-601016-description-translation b/test/integration/skip-bug-601016-description-translation
new file mode 100755
index 0000000..fd0465a
--- /dev/null
+++ b/test/integration/skip-bug-601016-description-translation
@@ -0,0 +1,133 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386' 'amd64'
+
+# we need a valid locale here, otherwise the language configuration
+# will be overridden by LC_ALL=C
+LOCALE="$(echo "$LANG" | cut -d'_' -f 1)"
+MD5Sum='Description-md5: d41ee493aa9fcc6cbc9ce4eb7069959c'
+
+PACKAGESTANZA='Package: apt
+Priority: important
+Section: admin
+Installed-Size: 5984
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: i386
+Version: 0.8.7
+Filename: pool/main/a/apt/apt_0.8.7_i386.deb
+Size: 2140230
+MD5sum: 74769bfbcef9ebc4fa74f7a5271b9c08'
+
+PACKAGESTANZA2='Package: apt
+Priority: important
+Section: admin
+Installed-Size: 5984
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: amd64
+Version: 0.8.7
+Filename: pool/main/a/apt/apt_0.8.7_amd64.deb
+Size: 2210342
+MD5sum: 4a869bfbdef9ebc9fa74f7a5271e8d1a'
+
+echo "$PACKAGESTANZA
+Description: Advanced front-end for dpkg
+$MD5Sum
+
+$PACKAGESTANZA2
+Description: Advanced front-end for dpkg
+$MD5Sum" > aptarchive/Packages
+
+echo "Package: apt
+Description-${LOCALE}: Mächtige Oberfläche für dpkg
+ Das Paket bietet dem Nutzer technisch führende Methoden für den Zugriff
+ auf den dpkg-Paketmanager. Es beinhaltet das apt-get-Werkzeug und die
+ APT-Dselect-Methode. Beides sind einfache und sicherere Wege,
+ um Pakete zu installieren und Upgrades durchzuführen.
+$MD5Sum" | bzip2 > aptarchive/${LOCALE}.bz2
+
+# the $LOCALE translation file will not be included as it is a flat archive it came from and therefore
+# its name can not be guessed correctly… (in non-flat archives the files are called Translation-*)
+echo 'APT::Cache::Generate "false";' > rootdir/etc/apt/apt.conf.d/00nogenerate
+
+NOLONGSTANZA="$PACKAGESTANZA
+Description: Advanced front-end for dpkg
+$MD5Sum
+"
+
+ENGLISHSTANZA="$PACKAGESTANZA
+Description: Advanced front-end for dpkg
+$MD5Sum
+"
+
+LOCALESTANZA="$PACKAGESTANZA
+Description-${LOCALE}: Mächtige Oberfläche für dpkg
+ Das Paket bietet dem Nutzer technisch führende Methoden für den Zugriff
+ auf den dpkg-Paketmanager. Es beinhaltet das apt-get-Werkzeug und die
+ APT-Dselect-Methode. Beides sind einfache und sicherere Wege,
+ um Pakete zu installieren und Upgrades durchzuführen.
+$MD5Sum
+"
+LOCALESTANZA2="$PACKAGESTANZA2
+Description-${LOCALE}: Mächtige Oberfläche für dpkg
+ Das Paket bietet dem Nutzer technisch führende Methoden für den Zugriff
+ auf den dpkg-Paketmanager. Es beinhaltet das apt-get-Werkzeug und die
+ APT-Dselect-Methode. Beides sind einfache und sicherere Wege,
+ um Pakete zu installieren und Upgrades durchzuführen.
+$MD5Sum
+"
+
+testrun() {
+ echo "Acquire::Languages { \"${LOCALE}\"; \"en\"; };" > rootdir/etc/apt/apt.conf.d/00languages
+ export LC_ALL=""
+ rm -rf rootdir/var/lib/apt/lists
+ setupaptarchive
+ testequal "$LOCALESTANZA" aptcache show apt -o Test=File-${LOCALE}
+ testequal "$LOCALESTANZA" aptcache show apt:i386 -o Test=File-${LOCALE}
+ testequal "$LOCALESTANZA2" aptcache show apt:amd64 -o Test=File-${LOCALE}
+ testequal "$NOLONGSTANZA" aptcache show apt -o Acquire::Languages="ww" -o Test=File-${LOCALE}
+ testequal "$LOCALESTANZA" aptcache show apt -o Acquire::Languages::="ww" -o Test=File-${LOCALE}
+ LC_ALL=C testequal "$ENGLISHSTANZA" aptcache show apt -o Test=File-${LOCALE}
+ export LC_ALL=""
+ echo "Acquire::Languages { \"ww\"; \"${LOCALE}\"; \"en\"; };" > rootdir/etc/apt/apt.conf.d/00languages
+ testequal "$LOCALESTANZA" aptcache show apt -o Test=File-ww-${LOCALE}
+ echo "Acquire::Languages { \"ww\"; \"en\"; };" > rootdir/etc/apt/apt.conf.d/00languages
+ testequal "$ENGLISHSTANZA" aptcache show apt -o Test=File-ww
+}
+
+testrun
+
+echo "$PACKAGESTANZA
+Description: Advanced front-end for dpkg
+$MD5Sum
+
+$PACKAGESTANZA2
+Description: Advanced front-end for dpkg
+$MD5Sum" > aptarchive/Packages
+
+echo "Package: apt
+Description-en: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+$MD5Sum" | bzip2 > aptarchive/en.bz2
+
+ENGLISHSTANZA="$PACKAGESTANZA
+Description-en: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+$MD5Sum
+"
+ENGLISHSTANZA2="$PACKAGESTANZA2
+Description-en: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+$MD5Sum
+"
+
+testrun
diff --git a/test/integration/skip-bug-711456-apt-cdrom-multiple-cds-multiarch b/test/integration/skip-bug-711456-apt-cdrom-multiple-cds-multiarch
new file mode 100755
index 0000000..9abaee1
--- /dev/null
+++ b/test/integration/skip-bug-711456-apt-cdrom-multiple-cds-multiarch
@@ -0,0 +1,47 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'testing' 'amd64,i386' '0.8.15' 'stable' 'Depends: libtest'
+buildsimplenativepackage 'libtest' 'amd64,i386' '0.8.15' 'stable' 'Multi-Arch: same'
+buildsimplenativepackage 'libtest' 'amd64,i386' '1' 'unstable' 'Multi-Arch: same'
+
+# needed by the ftparchive.conf
+cd aptarchive
+ln -s ../incoming pool
+createaptftparchiveconfig
+cd - >/dev/null
+# create an amd64 cdrom
+sed -i 's#Architectures .*$#Architectures "amd64 source";#' aptarchive/ftparchive.conf
+setupaptarchive --no-update
+changetocdrom 'Debian APT Testdisk amd64 0.8.15'
+mv rootdir/media/cdrom rootdir/media/cdrom-amd64
+addtrap 'prefix' "chmod -R +w $PWD/rootdir/media/cdrom-amd64/dists/;"
+chmod -R -w rootdir/media/cdrom-amd64/dists
+ln -s $PWD/rootdir/media/cdrom-amd64 $PWD/rootdir/media/cdrom
+aptcdrom add -m -o quiet=1
+rm $PWD/rootdir/media/cdrom
+# do it again to create a i386 cdrom
+sed -i 's#Architectures .*$#Architectures "i386 source";#' aptarchive/ftparchive.conf
+setupaptarchive --no-update
+changetocdrom 'Debian APT Testdisk i386 0.8.15'
+mv rootdir/media/cdrom rootdir/media/cdrom-i386
+addtrap 'prefix' "chmod -R +w $PWD/rootdir/media/cdrom-i386/dists/;"
+chmod -R -w rootdir/media/cdrom-i386/dists
+ln -s $PWD/rootdir/media/cdrom-i386 $PWD/rootdir/media/cdrom
+aptcdrom add -m -o quiet=1
+
+# play with the cdroms
+testdpkgnotinstalled testing
+aptget install testing -t stable -y #> /dev/null 2>&1
+testdpkginstalled testing
+
+testdpkgnotinstalled testing:i386
+aptget install testing:i386 -t stable -y #> /dev/null 2>&1
+testdpkginstalled testing:i386
+
+aptget dist-upgrade -y
diff --git a/test/integration/skip-method-http-socks-client b/test/integration/skip-method-http-socks-client
new file mode 100755
index 0000000..b9e8393
--- /dev/null
+++ b/test/integration/skip-method-http-socks-client
@@ -0,0 +1,181 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+
+# We don't do a real proxy here, we just look how the implementation
+# reacts to certain responses from a "proxy" provided by socat
+# Checks HTTP, but requesting https instead will check HTTPS (curl) which
+# uses different error messages through – also: https://github.com/curl/curl/issues/944
+
+# FIXME: Not run automatically as it uses a hardcoded port (5555)
+
+msgtest 'Check that everything is installed' 'socat'
+if dpkg-checkbuilddeps -d 'socat' /dev/null >/dev/null 2>&1; then
+ msgpass
+else
+ msgskip "$(command dpkg -l socat)"
+ exit
+fi
+
+runclient() {
+ # this doesn't need to be an actually reachable webserver for this test
+ # in fact, its better if it isn't.
+ rm -f index.html
+ apthelper download-file "http://${2:-localhost:2903}/" index.html \
+ -o Acquire::http::Proxy="socks5h://${1}localhost:5555" \
+ -o Acquire::http::Timeout=2 -o Debug::Acquire::http=1 > client.output 2>&1 || true
+}
+runserver() {
+ socat -x tcp-listen:5555,reuseaddr \
+ system:"echo -n '$*' | xxd -r -p; echo 'HTTP/1.1 200 OK'; echo 'Content-Length: 5'; echo 'Connection: close'; echo; echo 'HTML'" \
+ > server.output 2>&1 &
+}
+PROXY="socks5h://localhost:5555"
+
+msgmsg 'SOCKS does not run'
+runclient
+testsuccess grep 'Could not connect to localhost:5555' client.output
+
+msgmsg 'SOCKS greets back with wrong version'
+runserver '04 00'
+runclient
+testsuccess grep 'greets back with wrong version: 4' client.output
+
+msgmsg 'SOCKS tries GSSAPI auth we have not advertised'
+runserver '05 01'
+runclient
+testsuccess grep 'greets back having not found a common authorization method: 1' client.output
+
+msgmsg 'SOCKS tries user&pass auth we have not advertised'
+runserver '05 02'
+runclient
+testsuccess grep 'pass auth, but we had not offered it' client.output
+
+msgmsg 'SOCKS user:pass wrong version'
+runserver '05 02' '05 00'
+runclient 'user:pass@'
+testsuccess grep 'auth status response with wrong version: 5' client.output
+
+msgmsg 'SOCKS user:pass wrong auth'
+runserver '05 02' '01 01'
+runclient 'user:pass@'
+testsuccess grep 'reported authorization failure: username or password incorrect? (1)' client.output
+
+msgmsg 'SOCKS user:pass request not granted no hostname'
+runserver '05 02' '01 00' '05 01 00 03 00 1f 90'
+runclient 'user:pass@'
+testsuccess grep 'could not connect to localhost (:8080) due to: general SOCKS server failure (1)' client.output
+
+msgmsg 'SOCKS user:pass request not granted with hostname'
+runserver '05 02' '01 00' '05 01 00 03 09 68 6f 73 74 6c 6f 63 61 6c 1f 90'
+runclient 'user:pass@'
+testsuccess grep 'could not connect to localhost (hostlocal:8080) due to: general SOCKS server failure (1)' client.output
+
+msgmsg 'SOCKS user:pass request not granted ipv4'
+runserver '05 02' '01 00' '05 04 00 01 ac 10 fe 01 1f 90'
+runclient 'user:pass@'
+testsuccess grep 'could not connect to localhost (172.16.254.1:8080) due to: Host unreachable (4)' client.output
+
+msgmsg 'SOCKS user:pass request not granted ipv6'
+runserver '05 02' '01 00' '05 12 00 04 20 01 0d b8 ac 10 fe 00 00 00 00 00 00 00 00 00 1f 90'
+runclient 'user:pass@'
+testsuccess grep 'could not connect to localhost (\[2001:0DB8:AC10:FE00:0000:0000:0000:0000\]:8080) due to: Unknown error (18)' client.output
+
+msgmsg 'SOCKS user:pass request granted ipv4'
+runserver '05 02' '01 00' '05 00 00 01 ac 10 fe 01 1f 90'
+runclient 'user:pass@'
+testequal "http: SOCKS proxy $PROXY connection established to localhost (172.16.254.1:8080)" head -n 1 client.output
+testfileequal index.html 'HTML'
+
+msgmsg 'SOCKS user:pass request granted ipv6'
+runserver '05 02' '01 00' '05 00 00 04 20 01 0d b8 ac 10 fe 00 00 00 00 00 00 00 00 00 1f 90'
+runclient 'user:pass@'
+testequal "http: SOCKS proxy $PROXY connection established to localhost ([2001:0DB8:AC10:FE00:0000:0000:0000:0000]:8080)" head -n 1 client.output
+testfileequal index.html 'HTML'
+
+msgmsg 'SOCKS no auth no hostname'
+runserver '05 00 05 00 00 03 00 1f 90'
+runclient
+testequal "http: SOCKS proxy $PROXY connection established to localhost (:8080)" head -n 1 client.output
+testfileequal index.html 'HTML'
+
+msgmsg 'SOCKS no auth with hostname'
+runserver '05 00 05 00 00 03 09 68 6f 73 74 6c 6f 63 61 6c 1f 90'
+runclient
+testequal "http: SOCKS proxy $PROXY connection established to localhost (hostlocal:8080)" head -n 1 client.output
+testfileequal index.html 'HTML'
+
+msgmsg 'SOCKS user-only request granted ipv4'
+runserver '05 02' '01 00' '05 00 00 01 ac 10 fe 01 1f 90'
+runclient 'apt@'
+testequal "http: SOCKS proxy $PROXY connection established to localhost (172.16.254.1:8080)" head -n 1 client.output
+testfileequal index.html 'HTML'
+
+msgmsg 'tor: SOCKS user:pass request not granted'
+runserver '05 02' '01 00' '05 04 00 01 00 00 00 00 00 00'
+runclient 'user:pass@'
+testsuccess grep 'could not connect to localhost (0.0.0.0:0) due to: Host unreachable (4)' client.output
+
+msgmsg 'tor: SOCKS user:pass request tll expired'
+runserver '05 02' '01 00' '05 06 00 01 00 00 00 00 00 00'
+runclient 'user:pass@'
+testsuccess grep 'could not connect to localhost (0.0.0.0:0) due to: TTL expired (6)' client.output
+
+msgmsg 'tor: SOCKS user:pass request service unreachable'
+runserver '05 02' '01 00' '05 06 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'vwakviie2ienjx6t.onion'
+testsuccess grep 'could not connect to vwakviie2ienjx6t.onion (0.0.0.0:0) due to: Host unreachable (6)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted onion'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'vwakviie2ienjx6t.onion'
+testsuccess grep 'could not connect to vwakviie2ienjx6t.onion (0.0.0.0:0) due to: general SOCKS server failure (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted subdomain'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'ftp.vwakviie2ienjx6t.onion'
+testsuccess grep 'could not connect to ftp.vwakviie2ienjx6t.onion (0.0.0.0:0) due to: general SOCKS server failure (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too short'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'wakviie2ienjx6t.onion'
+testsuccess grep 'could not connect to wakviie2ienjx6t.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too long'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'vwakviie2ienjx6t2.onion'
+testsuccess grep 'could not connect to vwakviie2ienjx6t2.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too short subdomain'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'a.akviie2ienjx6t.onion'
+testsuccess grep 'could not connect to a.akviie2ienjx6t.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too short subdomains'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'a.a.viie2ienjx6t.onion'
+testsuccess grep 'could not connect to a.a.viie2ienjx6t.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too short'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'l5satjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67oro.onion'
+testsuccess grep 'could not connect to l5satjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67oro.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too long'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'l5satjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67ororad2.onion'
+testsuccess grep 'could not connect to l5satjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67ororad2.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too short subdomain'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'a.satjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67ororad.onion'
+testsuccess grep 'could not connect to a.satjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67ororad.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
+
+msgmsg 'tor: SOCKS user:pass request not granted too short subdomains'
+runserver '05 02' '01 00' '05 01 00 01 00 00 00 00 00 00'
+runclient 'user:pass@' 'a.a.tjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67ororad.onion'
+testsuccess grep 'could not connect to a.a.tjgud6gucryazcyvyvhuxhr74u6ygigiuyixe3a6ysis67ororad.onion (0.0.0.0:0) due to: Invalid hostname: onion service name must be either 16 or 56 characters long (1)' client.output
diff --git a/test/integration/status-bug-590438-broken-provides-thanks-to-remove-order b/test/integration/status-bug-590438-broken-provides-thanks-to-remove-order
new file mode 100644
index 0000000..c2c03c0
--- /dev/null
+++ b/test/integration/status-bug-590438-broken-provides-thanks-to-remove-order
@@ -0,0 +1,97 @@
+Package: libc-bin
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1516
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: i386
+Source: eglibc
+Version: 2.11.2-2
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Breaks: libc0.1 (<< 2.10), libc0.3 (<< 2.10), libc6 (<< 2.10), libc6.1 (<< 2.10)
+Filename: pool/main/e/eglibc/libc-bin_2.11.2-2_i386.deb
+Size: 703542
+MD5sum: f554ec34c092bb8e52e3d917bec7b46c
+SHA1: 4d5ba53b50937b1d50e3234e45335de5ea97b84b
+SHA256: 4f1e6430a730321209bb6b9cf89ba8a72c95f5c93f3e263a982251b3cc8beb14
+Description-de: Die »Embedded GNU C Library«: Binärdateien
+Homepage: http://www.eglibc.org
+Tag: devel::lang:c, devel::packaging, implemented-in::c, interface::commandline, role::program, scope::utility, special::auto-inst-parts, suite::gnu, works-with::text, works-with::unicode
+
+Package: libc6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 9340
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: i386
+Source: eglibc
+Version: 2.11.2-2
+Provides: glibc-2.11-1
+Depends: libc-bin (= 2.11.2-2), libgcc1
+Recommends: libc6-i686
+Suggests: glibc-doc, debconf | debconf-2.0, locales
+Conflicts: tzdata (<< 2007k-1), tzdata-etch
+Breaks: locales (<< 2.11), locales-all (<< 2.11), nscd (<< 2.11)
+Filename: pool/main/e/eglibc/libc6_2.11.2-2_i386.deb
+Size: 3877166
+MD5sum: 3d8fe972a359ad362ac1957c2687e5c2
+SHA1: cd901f3265254e40ad198b935877f546eeaa8403
+SHA256: e1bc3da1e11f9b742d05f927362e2079482db4186ff45af9f937d284e112e7e5
+Description-de: Die »Embedded GNU C Library«: Laufzeitbibliotheken
+Homepage: http://www.eglibc.org
+Tag: devel::lang:c, devel::library, implemented-in::c, protocol::ipv6, role::shared-lib, suite::gnu
+
+Package: mawk
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 228
+Maintainer: Steve Langasek <vorlon@debian.org>
+Architecture: i386
+Version: 1.3.3-15
+Provides: awk
+Pre-Depends: libc6 (>= 2.1)
+Filename: pool/main/m/mawk/mawk_1.3.3-15_i386.deb
+Size: 81430
+MD5sum: e0f9e9903a862a52b5f107d560c4d8e0
+SHA1: cca3b3ea3a57b9c3c136fb538a4fb06a99d1a33e
+SHA256: 7449b10ffb6a8636a249ad6866188cad0040a6a446fb4a3a71d81fd136297ee6
+Description-de: Eine Muster- und Textverarbeitungssprache
+Tag: devel::interpreter, implemented-in::c, interface::commandline, role::program, scope::utility, use::filtering, use::scanning, works-with::text
+
+Package: gcc-4.5-base
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 172
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.5
+Version: 4.5.0-8
+Filename: pool/main/g/gcc-4.5/gcc-4.5-base_4.5.0-8_i386.deb
+Size: 117894
+MD5sum: f5850c42681fcfee3429a1b43da68433
+SHA1: 0548343feba69c4c01d5dbf147393d8dc27605ac
+SHA256: 04b60f5fe24b7397e3be233051615ff9addb66d4581578f67fde76f5d7f69f7a
+Description: The GNU Compiler Collection (base package)
+Homepage: http://gcc.gnu.org/
+
+Package: libgcc1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 148
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.5 (4.5.0-8)
+Version: 1:4.5.0-8
+Depends: gcc-4.5-base (= 4.5.0-8), libc6 (>= 2.2.4)
+Filename: pool/main/g/gcc-4.5/libgcc1_4.5.0-8_i386.deb
+Size: 52190
+MD5sum: beda956a1dcdeffed11072c2d0f3eb83
+SHA1: 7117ec43eec7982a030fcc9a12d4772de3fcdba0
+SHA256: 1d10bd532adce8683b475fcc60c22300f717ef19bf84dc5bf43b07e504f85dcb
+Description: GCC support library
+Homepage: http://gcc.gnu.org/
+
diff --git a/test/integration/status-bug-591882-conkeror b/test/integration/status-bug-591882-conkeror
new file mode 100644
index 0000000..f05ac81
--- /dev/null
+++ b/test/integration/status-bug-591882-conkeror
@@ -0,0 +1,1357 @@
+Package: conkeror
+Status: install ok installed
+Priority: extra
+Section: web
+Installed-Size: 1044
+Maintainer: Axel Beckert <abe@deuxchevaux.org>
+Architecture: all
+Version: 0.9~git080629-2
+Provides: www-browser
+Depends: xulrunner (>= 1.9~) | xulrunner-1.9
+Recommends: conkeror-spawn-process-helper
+Suggests: emacs | emacsen
+Description: keyboard focused web browser with Emacs look and feel
+
+Package: coreutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 10032
+Maintainer: Michael Stone <mstone@debian.org>
+Architecture: i386
+Version: 6.10-6
+Replaces: textutils, shellutils, fileutils, stat, debianutils (<= 2.3.1), dpkg (<< 1.13.2)
+Provides: textutils, shellutils, fileutils
+Pre-Depends: libacl1 (>= 2.2.11-1), libc6 (>= 2.6.1-1), libselinux1 (>= 2.0.15)
+Conflicts: stat
+Description: The GNU core utilities
+
+Package: debconf-i18n
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 1100
+Maintainer: Debconf Developers <debconf-devel@lists.alioth.debian.org>
+Architecture: all
+Source: debconf
+Version: 1.5.24
+Replaces: debconf (<< 1.3.0), debconf-utils (<< 1.3.22)
+Depends: debconf, liblocale-gettext-perl, libtext-iconv-perl, libtext-wrapi18n-perl, libtext-charwidth-perl
+Conflicts: debconf-english, debconf-utils (<< 1.3.22)
+Description: full internationalization support for debconf
+
+Package: debconf
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 1508
+Maintainer: Debconf Developers <debconf-devel@lists.alioth.debian.org>
+Architecture: all
+Version: 1.5.24
+Replaces: debconf-tiny
+Provides: debconf-2.0
+Depends: debconf-i18n | debconf-english
+Pre-Depends: perl-base (>= 5.6.1-4)
+Recommends: apt-utils (>= 0.5.1)
+Suggests: debconf-doc, debconf-utils, whiptail | dialog | gnome-utils, libterm-readline-gnu-perl, libgnome2-perl, libqt-perl, libnet-ldap-perl, perl
+Conflicts: apt (<< 0.3.12.1), cdebconf (<< 0.96), debconf-tiny, debconf-utils (<< 1.3.22), dialog (<< 0.9b-20020814-1), menu (<= 2.1.3-1), whiptail (<< 0.51.4-11), whiptail-utf8 (<= 0.50.17-13)
+Description: Debian configuration management system
+
+Package: debianutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 272
+Maintainer: Clint Adams <schizo@debian.org>
+Architecture: i386
+Version: 2.30
+Pre-Depends: libc6 (>= 2.7-1)
+Description: Miscellaneous utilities specific to Debian
+
+Package: defoma
+Status: install ok installed
+Priority: optional
+Section: admin
+Installed-Size: 449
+Maintainer: Angus Lees <gus@debian.org>
+Architecture: all
+Version: 0.11.10-0.2
+Depends: file, perl (>= 5.6.0-16), whiptail | dialog
+Recommends: libft-perl
+Suggests: defoma-doc, dfontmgr, psfontmgr, x-ttcidfont-conf
+Conflicts: defoma-gs, defoma-ps, defoma-x, dfontmgr (<< 0.10.0), psfontmgr (<< 0.5.0), x-ttcidfont-conf (<< 5)
+Description: Debian Font Manager -- automatic font configuration framework
+Enhances: debhelper
+
+Package: dpkg
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 7276
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Architecture: i386
+Version: 1.14.29
+Replaces: manpages-de (<= 0.4-3), manpages-pl (<= 20051117-1)
+Pre-Depends: libc6 (>= 2.7-1), coreutils (>= 5.93-1), lzma
+Suggests: apt
+Conflicts: apt (<< 0.7.7), aptitude (<< 0.4.7-1), dpkg-dev (<< 1.14.16), dpkg-iasearch (<< 0.11), sysvinit (<< 2.82-1)
+Description: Debian package management system
+Origin: debian
+Bugs: debbugs://bugs.debian.org
+
+Package: file
+Status: install ok installed
+Priority: standard
+Section: utils
+Installed-Size: 136
+Maintainer: Daniel Baumann <daniel@debian.org>
+Architecture: i386
+Version: 4.26-1
+Depends: libc6 (>= 2.7-1), libmagic1 (= 4.26-1), zlib1g (>= 1:1.1.4)
+Description: Determines file type using "magic" numbers
+
+Package: fontconfig-config
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 250
+Maintainer: Keith Packard <keithp@debian.org>
+Architecture: all
+Source: fontconfig
+Version: 2.6.0-3
+Replaces: fontconfig (<< 2.3.2-2)
+Depends: debconf (>= 0.5) | debconf-2.0, ucf (>= 0.29), ttf-dejavu | ttf-bitstream-vera | ttf-freefont | gsfonts-x11
+Conflicts: fontconfig (<< 2.3.2-2)
+Description: generic font configuration library - configuration
+
+Package: fontconfig
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 384
+Maintainer: Keith Packard <keithp@debian.org>
+Architecture: i386
+Version: 2.6.0-3
+Replaces: fontconfig-config (<< 2.5.93-1)
+Depends: libc6 (>= 2.7-1), libfontconfig1 (>= 2.4.0), fontconfig-config
+Suggests: defoma (>= 0.7.0)
+Description: generic font configuration library - support binaries
+
+Package: gcc-4.3-base
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 160
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.3
+Version: 4.3.2-1.1
+Replaces: cpp-4.3 (<< 4.3.2)
+Description: The GNU Compiler Collection (base package)
+
+Package: libacl1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 48
+Maintainer: Nathan Scott <nathans@debian.org>
+Architecture: i386
+Source: acl
+Version: 2.2.47-2
+Depends: libattr1 (>= 2.4.41-1), libc6 (>= 2.7-1)
+Conflicts: acl (<< 2.0.0), libacl1-kerberos4kth
+Description: Access control list shared library
+
+Package: libatk1.0-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 168
+Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: atk1.0
+Version: 1.22.0-1
+Depends: libc6 (>= 2.7-1), libglib2.0-0 (>= 2.16.0)
+Recommends: libatk1.0-data
+Description: The ATK accessibility toolkit
+
+Package: libattr1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 36
+Maintainer: Nathan Scott <nathans@debian.org>
+Architecture: i386
+Source: attr
+Version: 1:2.4.43-2
+Depends: libc6 (>= 2.7-1)
+Conflicts: attr (<< 2.0.0)
+Description: Extended attribute shared library
+
+Package: libbz2-1.0
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 92
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Source: bzip2
+Version: 1.0.5-1
+Depends: libc6 (>= 2.7-1)
+Description: high-quality block-sorting file compressor library - runtime
+
+Package: libc6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 10756
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: i386
+Source: glibc
+Version: 2.7-18lenny4
+Provides: glibc-2.7-1
+Depends: libgcc1
+Suggests: locales, glibc-doc, libc6-i686
+Conflicts: libterm-readline-gnu-perl (<< 1.15-2), tzdata (<< 2007k-1), tzdata-etch
+Description: GNU C Library: Shared libraries
+
+Package: libcairo2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 844
+Maintainer: Dave Beckett <dajobe@debian.org>
+Architecture: i386
+Source: cairo
+Version: 1.6.4-7
+Replaces: libcairo0.5.1, libcairo0.6.0, libcairo0.9.0, libcairo1
+Provides: libcairo
+Depends: libc6 (>= 2.7-1), libdirectfb-1.0-0, libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.3.5), libpixman-1-0 (>= 0.10.0), libpng12-0 (>= 1.2.13-4), libx11-6, libxcb-render-util0 (>= 0.2.1+git1), libxcb-render0, libxcb1, libxrender1, zlib1g (>= 1:1.1.4)
+Conflicts: libcairo1
+Description: The Cairo 2D vector graphics library
+
+Package: libcomerr2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 96
+Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+Architecture: i386
+Source: e2fsprogs
+Version: 1.41.3-1
+Replaces: e2fsprogs (<< 1.34-1)
+Provides: libcomerr-kth-compat
+Depends: libc6 (>= 2.7-1)
+Description: common error description library
+
+Package: libcups2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 364
+Maintainer: Debian CUPS Maintainers <pkg-cups-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: cups
+Version: 1.3.8-1+lenny8
+Replaces: libcupsys2 (<< 1.3.7-6)
+Provides: libcupsys2
+Depends: libc6 (>= 2.7-1), libcomerr2 (>= 1.01), libgnutls26 (>= 2.4.0-0), libkrb53 (>= 1.6.dfsg.2), zlib1g (>= 1:1.1.4)
+Suggests: cups-common
+Conflicts: libcupsys2 (<< 1.3.7-6)
+Description: Common UNIX Printing System(tm) - libs
+
+Package: libdatrie0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 60
+Maintainer: Theppitak Karoonboonyanan <thep@linux.thai.net>
+Architecture: i386
+Source: libdatrie
+Version: 0.1.3-2
+Depends: libc6 (>= 2.7-1)
+Description: Double-array trie library
+
+Package: libdb4.6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1248
+Maintainer: Debian Berkeley DB Maintainers <pkg-db-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: db4.6
+Version: 4.6.21-11
+Depends: libc6 (>= 2.7-1)
+Conflicts: libdb2 (<< 2:2.7.7-3)
+Description: Berkeley v4.6 Database Libraries [runtime]
+
+Package: libdirectfb-1.0-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 2140
+Maintainer: Debian DirectFB Team <pkg-directfb-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: directfb
+Version: 1.0.1-11
+Depends: libc6 (>= 2.7-1), libsysfs2, libts-0.0-0 (>= 1.0)
+Description: direct frame buffer graphics - shared libraries
+
+Package: libexpat1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 364
+Maintainer: Debian XML/SGML Group <debian-xml-sgml-pkgs@lists.alioth.debian.org>
+Architecture: i386
+Source: expat
+Version: 2.0.1-4+lenny3
+Depends: libc6 (>= 2.7-1)
+Conflicts: wink (<= 1.5.1060-4)
+Description: XML parsing C library - runtime library
+
+Package: libfontconfig1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 336
+Maintainer: Keith Packard <keithp@debian.org>
+Architecture: i386
+Source: fontconfig
+Version: 2.6.0-3
+Depends: libc6 (>= 2.7-1), libexpat1 (>= 1.95.8), libfreetype6 (>= 2.3.5), zlib1g (>= 1:1.1.4), fontconfig-config (= 2.6.0-3)
+Description: generic font configuration library - runtime
+
+Package: libfreetype6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 672
+Maintainer: Steve Langasek <vorlon@debian.org>
+Architecture: i386
+Source: freetype
+Version: 2.3.7-2+lenny1
+Replaces: freetype0, freetype1
+Depends: libc6 (>= 2.7-1), zlib1g (>= 1:1.1.4)
+Suggests: libfreetype6-dev
+Conflicts: freetype, xpdf-reader (<< 1.00-4)
+Description: FreeType 2 font engine, shared library files
+
+Package: libgcc1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 88
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.3 (4.3.2-1.1)
+Version: 1:4.3.2-1.1
+Depends: gcc-4.3-base (= 4.3.2-1.1), libc6 (>= 2.7-1)
+Description: GCC support library
+
+Package: libgcrypt11
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 508
+Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Architecture: i386
+Version: 1.4.1-1
+Depends: libc6 (>= 2.7-1), libgpg-error0 (>= 1.4)
+Suggests: rng-tools
+Description: LGPL Crypto library - runtime library
+
+Package: libgdbm3
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 80
+Maintainer: James Troup <james@nocrew.org>
+Architecture: i386
+Source: gdbm
+Version: 1.8.3-3
+Depends: libc6 (>= 2.3.6-6)
+Description: GNU dbm database routines (runtime version)
+
+Package: libglib2.0-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 1732
+Maintainer: Loic Minier <lool@dooz.org>
+Architecture: i386
+Source: glib2.0
+Version: 2.16.6-3
+Depends: libc6 (>= 2.7-1), libpcre3 (>= 7.4), libselinux1 (>= 2.0.59)
+Recommends: libglib2.0-data
+Conflicts: libpango1.0-0 (<< 1.11)
+Description: The GLib library of C routines
+
+Package: libgnutls26
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 1100
+Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Architecture: i386
+Source: gnutls26
+Version: 2.4.2-6+lenny2
+Replaces: gnutls0, gnutls0.4, gnutls3
+Depends: libc6 (>= 2.7-1), libgcrypt11 (>= 1.4.0), libgpg-error0 (>= 1.4), libtasn1-3 (>= 0.3.4), zlib1g (>= 1:1.1.4)
+Suggests: gnutls-bin
+Conflicts: gnutls0, gnutls0.4
+Description: the GNU TLS library - runtime library
+
+Package: libgpg-error0
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 196
+Maintainer: Jose Carlos Garcia Sogo <jsogo@debian.org>
+Architecture: i386
+Source: libgpg-error
+Version: 1.4-2
+Depends: libc6 (>= 2.3.6-6)
+Description: library for common error values and messages in GnuPG components
+
+Package: libgtk2.0-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 5084
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: i386
+Source: gtk+2.0
+Version: 2.12.12-1~lenny2
+Replaces: libgtk2.0-0png3
+Provides: gtk2.0-binver-2.10.0
+Depends: libgtk2.0-common, libatk1.0-0 (>= 1.20.0), libc6 (>= 2.7-1), libcairo2 (>= 1.6.4-6.1), libcomerr2 (>= 1.01), libcups2 (>= 1.3.8), libfontconfig1 (>= 2.4.0), libglib2.0-0 (>= 2.16.0), libgnutls26 (>= 2.4.0-0), libjpeg62, libkrb53 (>= 1.6.dfsg.2), libpango1.0-0 (>= 1.20.3), libpng12-0 (>= 1.2.13-4), libtiff4, libx11-6, libxcomposite1 (>= 1:0.3-1), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3 (>= 1:4.0.1), libxi6, libxinerama1, libxrandr2, libxrender1, zlib1g (>= 1:1.1.4)
+Recommends: hicolor-icon-theme, libgtk2.0-bin
+Suggests: librsvg2-common
+Conflicts: celestia (<< 1.2.4-4), eog2 (<< 1.0.1-4), gcin (<< 1.3.4-2), gimp1.3 (<< 1.3.7-1.1), glabels (<< 2.1.3-3), gnome-panel2 (<< 2.0.4-1), gnome-themes (<< 2.6), gtk-im-libthai (<< 0.1.4-3), gtk-qt-engine (<< 1:0.8~svn-rev36-1), gtk2-engines (<< 1:2.8.2-2), gtk2-engines-cleanice (<< 2.4.0-1.1), gtk2-engines-crux (<< 2.6), gtk2-engines-gtk-qt (<< 1:0.7-2), gtk2-engines-highcontrast (<< 2.6), gtk2-engines-industrial (<< 0.2.32-5), gtk2-engines-lighthouseblue (<< 2.6), gtk2-engines-magicchicken (<< 1.1.1-7.1), gtk2-engines-metal (<< 2.2.0-2.1), gtk2-engines-mist (<< 2.6), gtk2-engines-pixbuf (<= 2.10), gtk2-engines-qtpixmap (<< 0.28-1.2), gtk2-engines-redmond95 (<< 2.2.0-2.1), gtk2-engines-smooth (<< 0.5.6-3), gtk2-engines-thinice (<< 2.6), gtk2-engines-ubuntulooks (<= 0.9.11-1), gtk2-engines-wonderland (<< 1.0-4), gtk2-engines-xfce (<< 2.4.0-1), gtk2.0-examples (<< 2.2.0), iiimf-client-gtk (<< 12.3.91-4), iiimgcf (<= 11.4.1870-7.3), imhangul (<< 0.9.13-5), libeel2-2.18, libgdkxft0, libginspx0 (<< 20050529-1.1), libgnomeui-0 (<= 2.14.1-3), libgtk2.0-0png3, librsvg2-common (<= 2.14.4-2), libwmf-dev (<< 0.2.8.4-5), libwmf0.2-7 (<< 0.2.8.4-5), libwxgtk2.6-0 (<< 2.6.3.2.2-1), metacity (<< 1:2.20.0-1), metatheme (<< 0.9.7-3), openoffice.org-core (<< 2.2.1-8), scim-bridge (<= 0.2.4-1), scim-bridge-client-gtk (<< 0.4.10-1.1), scim-gtk2-immodule (<< 1.4.4-8), swf-player (<< 0.3.6-2.3), tamil-gtk2im (<< 2.2-4.4), uim-gtk2.0 (<< 1:1.4.1-3), xfwm4 (<< 4.4.1-3)
+Description: The GTK+ graphical user interface library
+
+Package: libgtk2.0-common
+Status: install ok installed
+Priority: optional
+Section: misc
+Installed-Size: 15934
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: all
+Source: gtk+2.0
+Version: 2.12.12-1~lenny2
+Replaces: libgtk1.3-common, libgtk2.0-data
+Recommends: libgtk2.0-0
+Conflicts: libgtk1.3-common, libgtk2.0-data
+Description: Common files for the GTK+ graphical user interface library
+
+Package: libhunspell-1.2-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 336
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: i386
+Source: hunspell
+Version: 1.2.6-1
+Depends: libc6 (>= 2.7-1), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1)
+Recommends: myspell-en-us | myspell-dictionary | hunspell-dictionary
+Conflicts: openoffice.org-core (= 2.2.0~rc2-1)
+Description: spell checker and morphological analyzer (shared library)
+
+Package: libice6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 140
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libice
+Version: 2:1.0.4-1
+Depends: libc6 (>= 2.6-1), x11-common
+Description: X11 Inter-Client Exchange library
+
+Package: libjpeg62
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 164
+Maintainer: Bill Allombert <ballombe@debian.org>
+Architecture: i386
+Source: libjpeg6b
+Version: 6b-14
+Depends: libc6 (>= 2.6.1-1)
+Description: The Independent JPEG Group's JPEG runtime library
+
+Package: libkeyutils1
+Status: install ok installed
+Priority: standard
+Section: misc
+Installed-Size: 56
+Maintainer: Daniel Baumann <daniel@debian.org>
+Architecture: i386
+Source: keyutils
+Version: 1.2-9
+Depends: libc6 (>= 2.7-1)
+Description: Linux Key Management Utilities (library)
+
+Package: libkrb53
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 1188
+Maintainer: Sam Hartman <hartmans@debian.org>
+Architecture: i386
+Source: krb5
+Version: 1.6.dfsg.4~beta1-5lenny4
+Depends: libc6 (>= 2.7-1), libcomerr2 (>= 1.34), libkeyutils1
+Suggests: krb5-doc, krb5-user
+Conflicts: libapache-mod-auth-kerb (<= 4.996-5.0-rc6-2), libapache2-mod-auth-kerb (<= 4.996-5.0-rc6-2), ssh-krb5 (<< 3.8.1p1-10)
+Description: MIT Kerberos runtime libraries
+
+Package: liblcms1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 260
+Maintainer: Oleksandr Moskalenko <malex@debian.org>
+Architecture: i386
+Source: lcms
+Version: 1.17.dfsg-1+lenny2
+Replaces: liblcms
+Provides: liblcms
+Depends: libc6 (>= 2.7-1)
+Suggests: liblcms-utils
+Conflicts: liblcms
+Description: Color management library
+
+Package: liblocale-gettext-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 104
+Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Version: 1.05-4
+Depends: libc6 (>= 2.7-1)
+Pre-Depends: perl-base (>= 5.10.0-9), perlapi-5.10.0
+Description: Using libc functions for internationalization in Perl
+
+Package: libmagic1
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 2412
+Maintainer: Daniel Baumann <daniel@debian.org>
+Architecture: i386
+Source: file
+Version: 4.26-1
+Depends: libc6 (>= 2.7-1), zlib1g (>= 1:1.1.4)
+Suggests: file
+Description: File type determination library using "magic" numbers
+
+Package: libmozjs1d
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 736
+Maintainer: Mike Hommey <glandium@debian.org>
+Architecture: i386
+Source: xulrunner
+Version: 1.9.0.19-1
+Depends: libc6 (>= 2.7-1), libnspr4-0d (>= 1.8.0.10)
+Description: The Mozilla SpiderMonkey JavaScript library
+
+Package: libncurses5
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 584
+Maintainer: Daniel Baumann <daniel@debian.org>
+Architecture: i386
+Source: ncurses
+Version: 5.7+20081213-1
+Depends: libc6 (>= 2.7-1)
+Recommends: libgpm2
+Description: shared libraries for terminal handling
+
+Package: libnewt0.52
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 820
+Maintainer: Alastair McKinstry <mckinstry@debian.org>
+Architecture: i386
+Source: newt
+Version: 0.52.2-11.3+lenny1
+Replaces: libnewt-utf8, libnewt0, libnewt0.51
+Depends: libc6 (>= 2.7-1), libslang2 (>= 2.0.7-1)
+Recommends: libfribidi0
+Conflicts: libnewt0.51
+Description: Not Erik's Windowing Toolkit - text mode windowing with slang
+
+Package: libnspr4-0d
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 328
+Maintainer: Maintainers of Mozilla-related packages <pkg-mozilla-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: nspr
+Version: 4.7.1-5
+Depends: libc6 (>= 2.7-1)
+Conflicts: libnspr4, libnspr4-dev (<= 4.7.1-1)
+Description: NetScape Portable Runtime Library
+
+Package: libnss3-1d
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 2292
+Maintainer: Maintainers of Mozilla-related packages <pkg-mozilla-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: nss
+Version: 3.12.3.1-0lenny1
+Depends: libc6 (>= 2.7-1), libnspr4-0d (>= 1.8.0.10), libsqlite3-0 (>= 3.5.9), dpkg (<< 1.14.8) | dpkg (>= 1.14.18)
+Conflicts: libnss3, libnss3-0d (>= 3.11.5), libnss3-dev (<= 3.12.0~rc3-1)
+Description: Network Security Service libraries
+
+Package: libpango1.0-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 780
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: i386
+Source: pango1.0
+Version: 1.20.5-5+lenny1
+Provides: pango1.0-modver-1.6.0
+Depends: libpango1.0-common (>= 1.20.5-5+lenny1), libc6 (>= 2.7-1), libcairo2 (>= 1.6.4-6.1), libdatrie0 (>= 0.1.2), libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.3.5), libglib2.0-0 (>= 2.16.0), libthai0 (>= 0.1.9), libx11-6, libxft2 (>> 2.1.1), libxrender1, zlib1g (>= 1:1.1.4)
+Conflicts: pango-libthai
+Description: Layout and rendering of internationalized text
+
+Package: libpango1.0-common
+Status: install ok installed
+Priority: optional
+Section: misc
+Installed-Size: 204
+Maintainer: Sebastien Bacher <seb128@debian.org>
+Architecture: all
+Source: pango1.0
+Version: 1.20.5-5+lenny1
+Replaces: libpango-common (<< 1.0.0), libpango0
+Depends: debconf | debconf-2.0, defoma (>= 0.11.1), fontconfig (>= 2.1.91)
+Recommends: x-ttcidfont-conf, libpango1.0-0
+Suggests: ttf-kochi-gothic, ttf-kochi-mincho, ttf-thryomanes, ttf-baekmuk, ttf-arphic-gbsn00lp, ttf-arphic-bsmi00lp, ttf-arphic-gkai00mp, ttf-arphic-bkai00mp
+Conflicts: pango-libthai (<< 0.1.6-2)
+Description: Modules and configuration files for the Pango
+
+Package: libpcre3
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 356
+Maintainer: Mark Baker <mark@mnb.org.uk>
+Architecture: i386
+Source: pcre3
+Version: 7.6-2.1
+Depends: libc6 (>= 2.7-1)
+Conflicts: libpcre3-dev (<= 4.3-3)
+Description: Perl 5 Compatible Regular Expression Library - runtime files
+
+Package: libpixman-1-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 220
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: pixman
+Version: 0.10.0-2
+Depends: libc6 (>= 2.7-1)
+Description: pixel-manipulation library for X and cairo
+
+Package: libpng12-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 316
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Source: libpng
+Version: 1.2.27-2+lenny3
+Replaces: libpng12-dev (<= 1.2.8rel-7)
+Depends: libc6 (>= 2.7-1), zlib1g (>= 1:1.1.4)
+Conflicts: libpng12-dev (<= 1.2.8rel-7), mzscheme (<= 1:209-5), pngcrush (<= 1.5.10-2), pngmeta (<= 1.11-3), povray-3.5 (<= 3.5.0c-10), qemacs (<= 0.3.1-5)
+Description: PNG library - runtime
+
+Package: libpopt0
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 192
+Maintainer: Paul Martin <pm@debian.org>
+Architecture: i386
+Source: popt
+Version: 1.14-4
+Replaces: popt
+Depends: libc6 (>= 2.7-1)
+Conflicts: libpopt-dev (<= 1.4-1), popt, rpm (<= 4.0.2-3)
+Description: lib for parsing cmdline parameters
+
+Package: libreadline5
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 320
+Maintainer: Matthias Klose <doko@debian.org>
+Architecture: i386
+Source: readline5
+Version: 5.2-3.1
+Depends: readline-common, libc6 (>= 2.7-1), libncurses5 (>= 5.6+20071006-3)
+Description: GNU readline and history libraries, run-time libraries
+
+Package: libselinux1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 148
+Maintainer: Manoj Srivastava <srivasta@debian.org>
+Architecture: i386
+Source: libselinux
+Version: 2.0.65-5
+Depends: libc6 (>= 2.7-1)
+Description: SELinux shared libraries
+
+Package: libslang2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1104
+Maintainer: Alastair McKinstry <mckinstry@debian.org>
+Architecture: i386
+Source: slang2
+Version: 2.1.3-3
+Depends: libc6 (>= 2.7-1)
+Recommends: libpng12-0
+Description: The S-Lang programming library - runtime version
+
+Package: libsm6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 84
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libsm
+Version: 2:1.0.3-2
+Depends: libc6 (>= 2.7-1), libice6 (>= 1:1.0.0), x11-common
+Description: X11 Session Management library
+
+Package: libsqlite3-0
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 468
+Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.hu>
+Architecture: i386
+Source: sqlite3
+Version: 3.5.9-6
+Depends: libc6 (>= 2.7-1)
+Description: SQLite 3 shared library
+
+Package: libstartup-notification0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 92
+Maintainer: Ondřej Surý <ondrej@debian.org>
+Architecture: i386
+Source: startup-notification
+Version: 0.9-1
+Depends: libc6 (>= 2.3.6-6), libice6 (>= 1:1.0.0), libsm6, libx11-6
+Description: library for program launch feedback (shared library)
+
+Package: libstdc++6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1168
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: i386
+Source: gcc-4.3
+Version: 4.3.2-1.1
+Depends: gcc-4.3-base (= 4.3.2-1.1), libc6 (>= 2.7-1), libgcc1 (>= 1:4.1.1)
+Conflicts: scim (<< 1.4.2-1)
+Description: The GNU Standard C++ Library v3
+
+Package: libsysfs2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 112
+Maintainer: Martin Pitt <mpitt@debian.org>
+Architecture: i386
+Source: sysfsutils
+Version: 2.1.0-5
+Depends: libc6 (>= 2.7-1)
+Description: interface library to sysfs
+
+Package: libtasn1-3
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 164
+Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Architecture: i386
+Version: 1.4-1
+Depends: libc6 (>= 2.7-1)
+Conflicts: libtasn1-2 (= 0.3.1-1)
+Description: Manage ASN.1 structures (runtime)
+
+Package: libtext-charwidth-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 36
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Source: libtext-charwidth-perl (0.04-5)
+Version: 0.04-5+b1
+Depends: libc6 (>= 2.7-1), perl-base (>= 5.10.0-9), perlapi-5.10.0
+Description: get display widths of characters on the terminal
+
+Package: libtext-iconv-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 44
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: i386
+Source: libtext-iconv-perl (1.7-1)
+Version: 1.7-1+b1
+Depends: libc6 (>= 2.7-1), perl-base (>= 5.10.0-9), perlapi-5.10.0
+Description: converts between character sets in Perl
+
+Package: libtext-wrapi18n-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 28
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Architecture: all
+Version: 0.06-6
+Depends: libtext-charwidth-perl
+Description: internationalized substitute of Text::Wrap
+
+Package: libthai-data
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 340
+Maintainer: Theppitak Karoonboonyanan <thep@linux.thai.net>
+Architecture: all
+Source: libthai
+Version: 0.1.9-4+lenny1
+Description: Data files for Thai language support library
+
+Package: libthai0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 100
+Maintainer: Theppitak Karoonboonyanan <thep@linux.thai.net>
+Architecture: i386
+Source: libthai
+Version: 0.1.9-4+lenny1
+Depends: libc6 (>= 2.7-1), libdatrie0 (>= 0.1.2), libthai-data
+Description: Thai language support library
+
+Package: libtiff4
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 456
+Maintainer: Jay Berkenbilt <qjb@debian.org>
+Architecture: i386
+Source: tiff
+Version: 3.8.2-11.2
+Depends: libc6 (>= 2.7-1), libjpeg62, zlib1g (>= 1:1.1.4)
+Description: Tag Image File Format (TIFF) library
+
+Package: libts-0.0-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 108
+Maintainer: Neil Williams <codehelp@debian.org>
+Architecture: i386
+Source: tslib
+Version: 1.0-4
+Replaces: libts0, tslib
+Provides: libts0, tslib
+Depends: libc6 (>= 2.7-1)
+Conflicts: libts0, tslib
+Description: touch screen library
+
+Package: libx11-6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 1240
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libx11
+Version: 2:1.1.5-2
+Depends: libc6 (>= 2.7-1), libxcb-xlib0, libxcb1, libx11-data
+Conflicts: xlibs-data (<< 1:7.0.0)
+Description: X11 client-side library
+
+Package: libx11-data
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 3108
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: all
+Source: libx11
+Version: 2:1.1.5-2
+Replaces: libx11-6 (<= 2:1.0.0-1)
+Description: X11 client-side library
+
+Package: libxau6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 64
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxau
+Version: 1:1.0.3-3
+Depends: libc6 (>= 2.7-1)
+Description: X11 authorisation library
+
+Package: libxcb-render-util0
+Status: install ok installed
+Priority: extra
+Section: libs
+Installed-Size: 40
+Maintainer: Julien Danjou <acid@debian.org>
+Architecture: i386
+Source: xcb-util
+Version: 0.2.1+git1-1
+Depends: libc6 (>= 2.7-1), libxcb-render0, libxcb1
+Description: utility libraries for X C Binding -- render-util
+
+Package: libxcb-render0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 88
+Maintainer: XCB Developers <xcb@lists.freedesktop.org>
+Architecture: i386
+Source: libxcb
+Version: 1.1-1.2
+Depends: libc6 (>= 2.7-1), libxcb1
+Description: X C Binding, render extension
+
+Package: libxcb-xlib0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 68
+Maintainer: XCB Developers <xcb@lists.freedesktop.org>
+Architecture: i386
+Source: libxcb
+Version: 1.1-1.2
+Depends: libc6 (>= 2.7-1), libxcb1
+Description: X C Binding, Xlib/XCB interface library
+
+Package: libxcb1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 160
+Maintainer: XCB Developers <xcb@lists.freedesktop.org>
+Architecture: i386
+Source: libxcb
+Version: 1.1-1.2
+Depends: libc6 (>= 2.7-1), libxau6, libxdmcp6
+Description: X C Binding
+
+Package: libxcomposite1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 60
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxcomposite
+Version: 1:0.4.0-3
+Depends: libc6 (>= 2.7-1), libx11-6, libxext6, libxfixes3 (>= 1:4.0.1)
+Description: X11 Composite extension library
+
+Package: libxcursor1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 80
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxcursor
+Version: 1:1.1.9-1
+Depends: libc6 (>= 2.6-1), libx11-6, libxfixes3 (>= 1:4.0.1), libxrender1
+Description: X cursor management library
+
+Package: libxdamage1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 60
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxdamage
+Version: 1:1.1.1-4
+Depends: libc6 (>= 2.7-1), libx11-6, libxfixes3 (>= 1:4.0.1)
+Description: X11 damaged region extension library
+
+Package: libxdmcp6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 76
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxdmcp
+Version: 1:1.0.2-3
+Depends: libc6 (>= 2.7-1)
+Description: X11 Display Manager Control Protocol library
+
+Package: libxext6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 184
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxext
+Version: 2:1.0.4-2
+Depends: libc6 (>= 2.7-1), libx11-6, libxau6, x11-common
+Description: X11 miscellaneous extension library
+
+Package: libxfixes3
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 64
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxfixes
+Version: 1:4.0.3-2
+Depends: libc6 (>= 2.3.6-6), libx11-6
+Pre-Depends: x11-common (>= 1:7.0.0)
+Description: X11 miscellaneous 'fixes' extension library
+
+Package: libxft2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 132
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: xft
+Version: 2.1.12-3
+Depends: libc6 (>= 2.7-1), libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.3.5), libx11-6, libxrender1, zlib1g (>= 1:1.1.4)
+Description: FreeType-based font drawing library for X
+
+Package: libxi6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 148
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxi
+Version: 2:1.1.4-1
+Depends: libc6 (>= 2.7-1), libx11-6, libxext6, x11-common
+Description: X11 Input extension library
+
+Package: libxinerama1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 60
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxinerama
+Version: 2:1.0.3-2
+Depends: libc6 (>= 2.7-1), libx11-6, libxext6
+Description: X11 Xinerama extension library
+
+Package: libxrandr2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 84
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxrandr
+Version: 2:1.2.3-1
+Depends: libc6 (>= 2.7-1), libx11-6, libxext6, libxrender1
+Description: X11 RandR extension library
+
+Package: libxrender1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 88
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxrender
+Version: 1:0.9.4-2
+Depends: libc6 (>= 2.7-1), libx11-6
+Description: X Rendering Extension client library
+
+Package: libxt6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 380
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: libxt
+Version: 1:1.0.5-3
+Depends: libc6 (>= 2.5-5), libice6 (>= 1:1.0.0), libsm6, libx11-6
+Pre-Depends: x11-common (>= 1:7.0.0)
+Description: X11 toolkit intrinsics library
+
+Package: lsb-base
+Status: install ok installed
+Priority: required
+Section: misc
+Installed-Size: 72
+Maintainer: Chris Lawrence <lawrencc@debian.org>
+Architecture: all
+Source: lsb
+Version: 3.2-20
+Replaces: lsb (<< 2.0-6), lsb-core (<< 2.0-6)
+Depends: sed, ncurses-bin
+Conflicts: lsb (<< 2.0-6), lsb-core (<< 2.0-6)
+Description: Linux Standard Base 3.2 init script functionality
+
+Package: lzma
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 124
+Maintainer: Mohammed Adnène Trojette <adn+deb@diwi.org>
+Architecture: i386
+Version: 4.43-14
+Depends: libc6 (>= 2.7-1), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.2.1)
+Description: Compression method of 7z format in 7-Zip program
+
+Package: ncurses-bin
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 480
+Maintainer: Daniel Baumann <daniel@debian.org>
+Architecture: i386
+Source: ncurses
+Version: 5.7+20081213-1
+Provides: tput
+Pre-Depends: libc6 (>= 2.7-1), libncurses5 (>= 5.6+20071006-3)
+Conflicts: ncurses, tput
+Description: terminal-related programs and man pages
+
+Package: perl-base
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 4316
+Maintainer: Brendan O'Dea <bod@debian.org>
+Architecture: i386
+Source: perl
+Version: 5.10.0-19lenny2
+Replaces: libclass-multimethods-perl (<< 1.70-4), libperl5.8 (<< 5.8.0-20), libscalar-list-utils-perl, libxsloader-perl, perl (<= 5.10.0-9), perl-modules (<< 5.10.0-12)
+Provides: libscalar-list-utils-perl, libxsloader-perl, perl5-base, perlapi-5.10.0
+Pre-Depends: libc6 (>= 2.7-1), dpkg (>= 1.14.20)
+Suggests: perl
+Conflicts: autoconf2.13 (<< 2.13-45), findimagedupes (<< 2.11-2), icheck (<< 0.9.7-6.1), libcflow-perl (<< 1:0.68-11.1), libclass-methodmaker-perl (<< 2.10-1), libclearsilver-perl (<< 0.10.4-1.1), libcrypt-openssl-bignum-perl (<< 0.04-1), libcrypt-openssl-dsa-perl (<< 0.13-3), libcrypt-openssl-random-perl (<< 0.04-1), libcrypt-openssl-rsa-perl (<< 0.25-1), libhamlib2-perl (<< 1.2.6.2-6), libqt-perl (<< 3.008-3), libscalar-list-utils-perl (<< 1:1.18-1), libsufary-perl (<< 2.1.1-8), libsys-cpu-perl (<< 0.40-2.1), libterm-size-perl (<< 0.2-4), libvideo-ivtv-perl (<< 0.13-6), libxsloader-perl (<< 0.08-1), megahal (<< 9.1.1a-5), razor (<< 1:2.84-6)
+Description: minimal Perl system
+
+Package: perl-modules
+Status: install ok installed
+Priority: standard
+Section: perl
+Installed-Size: 14520
+Maintainer: Brendan O'Dea <bod@debian.org>
+Architecture: all
+Source: perl
+Version: 5.10.0-19lenny2
+Replaces: libansicolor-perl, libarchive-tar-perl, libattribute-handlers-perl, libcgi-pm-perl, libcpanplus-perl, libextutils-cbuilder-perl, libextutils-parsexs-perl, libfile-temp-perl, libi18n-langtags-perl, libio-zlib-perl, liblocale-codes-perl, liblocale-maketext-perl, liblocale-maketext-simple-perl, libmath-bigint-perl, libmodule-build-perl, libmodule-corelist-perl, libmodule-load-conditional-perl, libmodule-load-perl, libmodule-pluggable-perl, libnet-perl, libnet-ping-perl, libparams-check-perl, libpod-parser-perl, libpod-simple-perl, libtest-harness-perl, libtest-simple-perl, libversion-perl, podlators-perl
+Provides: libansicolor-perl, libarchive-tar-perl, libattribute-handlers-perl, libcgi-pm-perl, libcpanplus-perl, libextutils-cbuilder-perl, libextutils-parsexs-perl, libfile-temp-perl, libi18n-langtags-perl, libio-zlib-perl, liblocale-codes-perl, liblocale-maketext-perl, liblocale-maketext-simple-perl, libmath-bigint-perl, libmodule-build-perl, libmodule-corelist-perl, libmodule-load-conditional-perl, libmodule-load-perl, libmodule-pluggable-perl, libnet-perl, libnet-ping-perl, libparams-check-perl, libpod-parser-perl, libpod-simple-perl, libtest-harness-perl, libtest-simple-perl, libversion-perl, podlators-perl
+Depends: perl (>= 5.10.0-1)
+Conflicts: libansicolor-perl (<< 1.10-1), libarchive-tar-perl (<= 1.38-2), libattribute-handlers-perl (<< 0.78.02-1), libcgi-pm-perl (<< 3.15-1), libcpanplus-perl (<< 0.83.09-1), libextutils-cbuilder-perl (<< 0.21-1), libextutils-parsexs-perl (<= 2.18), libfile-temp-perl (<< 0.18), libi18n-langtags-perl (<< 0.35-1), libio-zlib-perl (<< 1.07-1), liblocale-codes-perl (<< 2.06.1-1), liblocale-maketext-perl (<< 1.08-1), liblocale-maketext-simple-perl (<< 0.18-1), libmath-bigint-perl (<< 1.77-1), libmodule-build-perl (<< 0.2808.1-1), libmodule-corelist-perl (<< 2.13-1), libmodule-load-conditional-perl (<< 0.22-1), libmodule-load-perl (<< 0.12-1), libmodule-pluggable-perl (<< 3.6-1), libnet-perl (<= 1:1.19-3), libnet-ping-perl (<< 2.31-1), libparams-check-perl (<< 0.26-1), libpod-parser-perl (<< 1.32-1), libpod-simple-perl (<< 3.05-2), libtest-harness-perl (<< 2.56-1), libtest-simple-perl (<< 0.62-1), libversion-perl (<< 1:0.7400-2), podlators-perl (<< 2.2.0)
+Description: Core Perl modules
+Build-Essential: yes
+
+Package: perl
+Status: install ok installed
+Priority: standard
+Section: perl
+Installed-Size: 13524
+Maintainer: Brendan O'Dea <bod@debian.org>
+Architecture: i386
+Version: 5.10.0-19lenny2
+Replaces: libarchive-tar-perl (<= 1.38-2), libdigest-md5-perl, libdigest-sha-perl, libmime-base64-perl, libmodule-corelist-perl (<< 2.14-2), libstorable-perl, libtime-hires-perl, libtime-piece-perl, perl-base (<< 5.8.8-1), perl-doc (<< 5.8.0-1), perl-modules (<< 5.8.1-1)
+Provides: data-dumper, libdigest-md5-perl, libdigest-sha-perl, libmime-base64-perl, libstorable-perl, libtime-hires-perl, libtime-piece-perl, perl5
+Depends: perl-base (= 5.10.0-19lenny2), perl-modules (>= 5.10.0-19lenny2), libc6 (>= 2.7-1), libdb4.6, libgdbm3
+Recommends: netbase
+Suggests: perl-doc, libterm-readline-gnu-perl | libterm-readline-perl-perl
+Conflicts: libdigest-md5-perl (<< 3.07-1), libdigest-sha-perl (<< 5.45-1), libmime-base64-perl (<< 3.07-1), libstorable-perl (<< 2.15-1), libtime-hires-perl (<< 1.86-1), libtime-piece-perl (<< 1.12-1), perl-doc (<< 5.10.0-1)
+Description: Larry Wall's Practical Extraction and Report Language
+Build-Essential: yes
+
+Package: readline-common
+Status: install ok installed
+Priority: important
+Section: utils
+Installed-Size: 136
+Maintainer: Matthias Klose <doko@debian.org>
+Architecture: all
+Source: readline5
+Version: 5.2-3.1
+Replaces: libreadline-common, libreadline4 (<< 4.3-16), libreadline5 (<< 5.0-11)
+Conflicts: libreadline-common, libreadline5 (<< 5.0-11)
+Description: GNU readline and history libraries, common files
+
+Package: sed
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 628
+Maintainer: Clint Adams <schizo@debian.org>
+Architecture: i386
+Version: 4.1.5-6
+Replaces: ssed (<< 3.59)
+Pre-Depends: libc6 (>= 2.7-1)
+Description: The GNU sed stream editor
+
+Package: ttf-dejavu-core
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 2488
+Maintainer: Debian Fonts Task Force <pkg-fonts-devel@lists.alioth.debian.org>
+Architecture: all
+Source: ttf-dejavu
+Version: 2.25-3
+Replaces: ttf-dejavu (<< 2.20-1)
+Depends: defoma
+Conflicts: ttf-dejavu (<< 2.20-1)
+Description: Vera font family derivative with additional characters
+
+Package: ttf-dejavu-extra
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 5504
+Maintainer: Debian Fonts Task Force <pkg-fonts-devel@lists.alioth.debian.org>
+Architecture: all
+Source: ttf-dejavu
+Version: 2.25-3
+Replaces: ttf-dejavu (<< 2.20-1)
+Depends: defoma, ttf-dejavu-core
+Conflicts: ttf-dejavu (<< 2.20-1)
+Description: Vera font family derivative with additional characters
+
+Package: ttf-dejavu
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 68
+Maintainer: Debian Fonts Task Force <pkg-fonts-devel@lists.alioth.debian.org>
+Architecture: all
+Version: 2.25-3
+Depends: ttf-dejavu-core, ttf-dejavu-extra
+Conflicts: ttf-dejavu (<< 2.20-1)
+Description: Metapackage to pull in ttf-dejavu-core and ttf-dejavu-extra
+Task: bulgarian-desktop, hungarian-desktop, kurdish-desktop, macedonian-desktop, romanian-desktop, ukrainian-desktop
+
+Package: ucf
+Status: install ok installed
+Priority: standard
+Section: utils
+Installed-Size: 256
+Maintainer: Manoj Srivastava <srivasta@debian.org>
+Architecture: all
+Version: 3.0016
+Depends: debconf (>= 1.5.19), coreutils (>= 5.91)
+Description: Update Configuration File: preserve user changes to config files.
+
+Package: whiptail
+Status: install ok installed
+Priority: important
+Section: utils
+Installed-Size: 96
+Maintainer: Alastair McKinstry <mckinstry@debian.org>
+Architecture: i386
+Source: newt
+Version: 0.52.2-11.3+lenny1
+Replaces: newt0.10, newt0.21 (<< 0.21-4), whiptail-utf8
+Provides: whiptail-provider, whiptail-utf8
+Depends: libc6 (>= 2.7-1), libnewt0.52 (>= 0.52.2), libpopt0 (>= 1.14), libslang2 (>= 2.0.7-1)
+Conflicts: whiptail-provider
+Description: Displays user-friendly dialog boxes from shell scripts
+
+Package: x11-common
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 696
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: all
+Source: xorg
+Version: 1:7.3+20
+Replaces: x-common, xfree86-common, xorg-common, xserver-common (<< 7)
+Depends: debconf (>= 0.5) | debconf-2.0, debianutils (>= 1.13), lsb-base (>= 1.3-9ubuntu2)
+Pre-Depends: debconf | debconf-2.0
+Conflicts: aee (<= 2.2.15b-1), ascd (<= 0.13.2-3), beaver (<= 0.2.5-2), bibview (<= 2.2-8), bugsx (<= 1.08-8), buici-clock (<= 0.4.5+b1), communicator-smotif-477, ctwm (<= 3.7-2), emelfm (<= 0.9.2-7), epan, fte-xwindow (<= 0.50.0-1.3), fvwm1 (<= 1.24r-46), fvwm95 (<= 2.0.43ba-23+b1), gerstensaft (<= 0.2-5.1), ghostview, gipsc (<= 0.4.3-2), grace (<= 1:5.1.18-1), grace6 (<= 5.99.0+final-4), gradio (<= 1.0.1-6), groff (<= 1.18.1.1-7), guitar (<= 0.1.4-11), hamsoft (<< 0.2.3-1), hanterm-classic (<= 3.1.6.0-4), hanterm-xf (<= 1:3.3.1p18-9.2), hfsutils-tcltk (<= 3.2.6-7), ibp (<= 0.21-4), isdnutils-xtools (<= 1:3.8.2005-12-06-4), ivtools-bin (<= 1.1.3-5), ivtools-dev (<= 1.1.3-5), kdrill (<= 6.4-2.1), kinput2-canna (<= 3.1-7), kinput2-canna-wnn (<= 3.1-7), kinput2-wnn (<= 3.1-7), kterm (<= 6.2.0-45), lbxproxy (<< 7.0), libmotif-dev (<= 2.2.3-1.3), libxft-dev (<= 2.1.8.2-5), lm-batmon (<= 0.96-3), login.app (<= 1.2.1-18), lsb-core (<= 3.1-4), lwm (<= 1.2.1-1), mctools-lite (<= 970129-16), mgp (<= 1.11b-6), motif-clients (<= 2.2.3-1.3), navigator-smotif-477, netscape-base-4, olvwm (<= 4.4.3.2p1.4-21), olwm (<= 3.2p1.4-21), oneko (<= 1.2.sakura.6-1), opera (<< 9.10-20060616), pgaccess (<= 1:0.98.8.20030520-2), phototk, pixmap (<= 2.6pl4-14.1), plotmtv (<= 1.4.4t-8.1), pmud (<= 0.10-9), ppxp (<= 0.2001080415-14), ppxp-x11 (<= 0.2001080415-14), procmeter (<= 2.5.1-11), propsel (<= 971130-5.3), proxymngr (<< 7.0), qcam (<= 0.91-11.1), regexplorer (<= 0.1.6-12), seyon (<= 2.20c-20), skkinput (<= 1:2.06.4-4), stella (<< 2.2-1), tkdesk (<= 2.0-5), tkseti (<= 3.06-1), tkworld, twlog (<= 1.3-4), twm (<< 7.0), ucbmpeg-play (<< 2.3p-13), vide (<= 1.21-3), videogen (<= 0.32-1), vtwm (<= 5.4.7-2), w9wm (<= 0.4.2-4), wdm (<= 1.28-1), wily (<= 0.13.41-6), wmavgload (<= 0.7.0-6.1), wmcpu (<= 1.3-4.1), wmdate (<= 0.5-7.1), wmnet (<= 1.05-12), wmnetselect (<= 0.85-5.5), wmscope (<= 3.0-9.1), wmsensors (<= 1.0.4-3.4), wmtv (<= 0.6.5-15), x-common, xautolock (<= 1:2.1-6), xbanner (<= 1.31-23), xbase-clients (<< 1:7.0), xbatt (<= 1.2.1-4), xbattbar (<= 1.4.2-3.1), xcal (<= 4.1-18.2), xcalendar-i18n (<= 4.0.0.i18p1-13.1), xcb (<= 2.4-4), xclip (<= 0.08-5), xclips (<= 6.21-6), xcolors (<= 1.5a-2), xcolorsel (<= 1.1a-11), xdkcal (<= 0.9d-2.1), xdm (<= 1:1.0.1-6), xdmx (<< 1:1.0), xdu (<= 3.0-14), xearth (<= 1.1-10.2), xengine (<= 1.11-9), xephem (<= 3.4-5), xext, xezmlm (<= 1.0.3-11), xfaces (<= 3.3-25), xfishtank (<= 2.2-23.1), xfm (<= 1.4.3-8), xfractint (<< 20.3.01-1), xfree86-common, xfs (<< 1:1.0), xfs-xtt (<= 1:1.4.1.xf430-6), xftp, xfwp (<< 7.0), xgdipc (<= 1.2-0.3), xgmod (<= 3.1-9), xgobi, xgraph (<= 12.1-3), xinput (<= 1.2-5.2), xipmsg (<= 0.8088-1.1), xisp, xlbiff (<< 4.1-4), xli (<= 1.17.0-21), xlockmore (<= 1:5.21-1), xlockmore-gl (<= 1:5.21-1), xlogmaster (<= 1.6.0-8), xmailbox (<= 2.5-9), xmem (<= 1.20-19), xmeter (<= 1.15-6), xmh (<= 6.8.2.dfsg.1-4), xmix (<= 2.1-5), xmon (<= 1.5.6-1.3), xnecview (<= 1.34-2), xnest (<< 1:1.0), xodo (<= 1.2-9.2), xorg-common, xpaste, xpmumon (<= 1.3.0), xpostit (<= 3.3.1-8.2), xpostitplus, xprint (<= 1:0.1.0.alpha1-13), xrn (<= 9.02-7.1), xserver-common (<< 7), xserver-xfree86 (<< 1:7.0), xserver-xfree86-dbg, xserver-xorg (<< 1:7.3+11), xslideshow (<= 3.1-8.1), xsysinfo (<= 1.7-2), xtel (<= 3.3.0-5.4), xterm (<< 208-1), xtoolwait (<= 1.3-6), xtrkcad (<= 3.1.4-1), xtrlock (<= 2.0-11), xturqstat (<= 2.2.2sarge1), xutils (<< 1:7.0), xv (<= 3.10a-26), xvfb (<< 1:1.0), xview-clients (<= 3.2p1.4-21), xviewg (<= 3.2p1.4-21), xviewg-dev (<= 3.2p1.4-21), xvkbd (<= 2.6-2.1), xwit (<= 3.4-6), xxkb (<= 1.10-2.1), xzoom (<= 0.3-17), yank (<= 0.2.1-7.2)
+Description: X Window System (X.Org) infrastructure
+
+Package: xulrunner-1.9
+Status: install ok installed
+Priority: optional
+Section: devel
+Installed-Size: 17800
+Maintainer: Mike Hommey <glandium@debian.org>
+Architecture: i386
+Source: xulrunner
+Version: 1.9.0.19-1
+Replaces: xulrunner-1.9-common
+Depends: libatk1.0-0 (>= 1.20.0), libbz2-1.0, libc6 (>= 2.7-1), libcairo2 (>= 1.6.0), libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.3.5), libgcc1 (>= 1:4.1.1), libglib2.0-0 (>= 2.16.0), libgtk2.0-0 (>= 2.12.0), libhunspell-1.2-0 (>= 1.2.4), libjpeg62, liblcms1 (>= 1.15-1), libmozjs1d (>= 1.9.0.15), libnspr4-0d (>> 4.7.1-1), libnss3-1d (>= 3.12.3), libpango1.0-0 (>= 1.20.3), libpng12-0 (>= 1.2.13-4), libreadline5 (>= 5.2), libsqlite3-0 (>= 3.5.9), libstartup-notification0 (>= 0.8-1), libstdc++6 (>= 4.1.1), libx11-6, libxrender1, libxt6, zlib1g (>= 1:1.1.4)
+Suggests: xulrunner-1.9-gnome-support
+Conflicts: j2re1.4, pango-graphite
+Description: XUL + XPCOM application runner
+
+Package: zlib1g
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 128
+Maintainer: Mark Brown <broonie@debian.org>
+Architecture: i386
+Source: zlib
+Version: 1:1.2.3.3.dfsg-12
+Provides: libz1
+Depends: libc6 (>= 2.7-1)
+Conflicts: zlib1 (<= 1:1.0.4-7)
+Description: compression library - runtime
+
diff --git a/test/integration/status-bug-598669-install-postfix-gets-exim-heavy b/test/integration/status-bug-598669-install-postfix-gets-exim-heavy
new file mode 100644
index 0000000..fcf21dc
--- /dev/null
+++ b/test/integration/status-bug-598669-install-postfix-gets-exim-heavy
@@ -0,0 +1,30 @@
+Package: exim4-daemon-light
+Status: install ok installed
+Priority: standard
+Section: mail
+Installed-Size: 952
+Maintainer: Exim4 Maintainers <pkg-exim4-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: exim4
+Version: 4.72-1
+Replaces: mail-transport-agent
+Provides: mail-transport-agent
+Conflicts: mail-transport-agent
+Filename: pool/main/e/exim4/exim4-daemon-light_4.72-1_i386.deb
+Size: 459500
+MD5sum: f32ccafef44bed2efcd526cd6501307d
+Description: lightweight Exim MTA (v4) daemon
+
+Package: exim4
+Status: install ok installed
+Priority: standard
+Section: mail
+Installed-Size: 60
+Maintainer: Exim4 Maintainers <pkg-exim4-maintainers@lists.alioth.debian.org>
+Architecture: all
+Version: 4.72-1
+Depends: exim4-daemon-light | exim4-daemon-heavy
+Filename: pool/main/e/exim4/exim4_4.72-1_all.deb
+Size: 7738
+MD5sum: 2f473b82bbabac9718ff3e755eaf85c1
+Description: metapackage to ease Exim MTA (v4) installation
diff --git a/test/integration/status-bug-601961-install-info b/test/integration/status-bug-601961-install-info
new file mode 100644
index 0000000..c43cffa
--- /dev/null
+++ b/test/integration/status-bug-601961-install-info
@@ -0,0 +1,42 @@
+Package: dpkg
+Status: install ok installed
+Essential: yes
+Priority: required
+Section: admin
+Installed-Size: 6432
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Architecture: i386
+Version: 1.15.8.5
+Description: Debian package management system
+
+Package: findutils
+Status: install ok installed
+Essential: yes
+Priority: required
+Section: utils
+Installed-Size: 1704
+Maintainer: Andreas Metzler <ametzler@debian.org>
+Architecture: i386
+Version: 4.4.2-1+b1
+Depends: dpkg (>= 1.15.4) | install-info, essentialpkg
+Description: utilities for finding files--find, xargs
+
+Package: install-info
+Status: install ok installed
+Priority: important
+Section: doc
+Installed-Size: 256
+Maintainer: Debian TeX maintainers <debian-tex-maint@lists.debian.org>
+Architecture: i386
+Version: 4.13a.dfsg.1-6
+Description: Manage installed documentation in info format
+
+Package: essentialpkg
+Status: install ok installed
+Priority: important
+Section: other
+Installed-Size: 256
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: i386
+Version: 4.13a.dfsg.1-6
+Description: ultra hypercool important package
diff --git a/test/integration/status-bug-605394-versioned-or-groups b/test/integration/status-bug-605394-versioned-or-groups
new file mode 100644
index 0000000..3ac9c30
--- /dev/null
+++ b/test/integration/status-bug-605394-versioned-or-groups
@@ -0,0 +1,34 @@
+Package: apache2-mpm-worker
+Status: install ok installed
+Priority: optional
+Section: httpd
+Installed-Size: 68
+Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
+Architecture: i386
+Source: apache2
+Version: 2.2.16-4
+Provides: apache2-mpm
+Conflicts: apache2-mpm
+Description: Apache HTTP Server - high speed threaded model
+
+Package: php5-cgi
+Status: install ok installed
+Priority: optional
+Section: php
+Installed-Size: 14672
+Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
+Architecture: i386
+Source: php5
+Version: 5.3.3-3
+Description: server-side, HTML-embedded scripting language (CGI binary)
+
+Package: php5
+Status: install ok installed
+Priority: optional
+Section: php
+Installed-Size: 20
+Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
+Architecture: all
+Version: 5.3.3-3
+Depends: libapache2-mod-php5 (>= 5.3.3-3) | libapache2-mod-php5filter (>= 5.3.3-3) | php5-cgi (>= 5.3.3-3)
+Description: server-side, HTML-embedded scripting language (metapackage)
diff --git a/test/integration/status-bug-612557-garbage-upgrade b/test/integration/status-bug-612557-garbage-upgrade
new file mode 100644
index 0000000..7403d8c
--- /dev/null
+++ b/test/integration/status-bug-612557-garbage-upgrade
@@ -0,0 +1,34 @@
+Package: python-uno
+Status: install ok installed
+Priority: optional
+Section: python
+Installed-Size: 2032
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: i386
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Description: Python-UNO bridge
+
+Package: openoffice.org-common
+Status: install ok installed
+Priority: optional
+Section: editors
+Installed-Size: 48356
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: all
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Description: office productivity suite -- arch-independent files
+
+Package: openoffice.org-emailmerge
+Status: install ok installed
+Priority: optional
+Section: editors
+Installed-Size: 1652
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: all
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Replaces: python-uno (<< 1:2.4.1-5)
+Pre-Depends: python-uno, openoffice.org-common
+Description: office productivity suite -- email mail merge
diff --git a/test/integration/status-bug-613420-new-garbage-dependency b/test/integration/status-bug-613420-new-garbage-dependency
new file mode 100644
index 0000000..166a393
--- /dev/null
+++ b/test/integration/status-bug-613420-new-garbage-dependency
@@ -0,0 +1,22 @@
+Package: openoffice.org-officebean
+Status: install ok installed
+Priority: optional
+Section: java
+Installed-Size: 1656
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: i386
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Depends: openoffice.org-core (= 1:3.2.1-11+squeeze2)
+Description: office productivity suite -- Java bean
+
+Package: openoffice.org-core
+Status: install ok installed
+Priority: optional
+Section: editors
+Installed-Size: 121724
+Maintainer: Debian OpenOffice Team <debian-openoffice@lists.debian.org>
+Architecture: i386
+Source: openoffice.org
+Version: 1:3.2.1-11+squeeze2
+Description: office productivity suite -- arch-dependent files
diff --git a/test/integration/status-bug-723705-tagfile-truncates-fields b/test/integration/status-bug-723705-tagfile-truncates-fields
new file mode 100644
index 0000000..fe18506
--- /dev/null
+++ b/test/integration/status-bug-723705-tagfile-truncates-fields
@@ -0,0 +1,62 @@
+Package: libc6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 10164
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Architecture: amd64
+Multi-Arch: same
+Source: eglibc (2.17-92)
+Version: 2.17-92+b1
+Replaces: libc6-amd64
+Provides: glibc-2.17-1
+Suggests: glibc-doc, debconf | debconf-2.0, locales
+Breaks: locales (<< 2.17), locales-all (<< 2.17), lsb-core (<= 3.2-27), nscd (<< 2.17)
+Conflicts: prelink (<= 0.0.20090311-1), tzdata (<< 2007k-1), tzdata-etch
+Conffiles:
+ /etc/ld.so.conf.d/x86_64-linux-gnu.conf 593ad12389ab2b6f952e7ede67b8fbbf
+Description: Embedded GNU C Library: Shared libraries
+ Contains the standard libraries that are used by nearly all programs on
+ the system. This package includes shared versions of the standard C library
+ and the standard math library, as well as many others.
+Homepage: http://www.eglibc.org
+
+Package: libnewt0.52
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 820
+Maintainer: Alastair McKinstry <mckinstry@debian.org>
+Architecture: amd64
+Multi-Arch: same
+Source: newt
+Version: 0.52.15-3
+Recommends: libfribidi0
+Conffiles:
+ /etc/newt/palette.original d41d8cd98f00b204e9800998ecf8427e
+Description: Not Erik's Windowing Toolkit - text mode windowing with slang
+ Newt is a windowing toolkit for text mode built from the slang library.
+ It allows color text mode applications to easily use stackable windows,
+ push buttons, check boxes, radio buttons, lists, entry fields, labels,
+ and displayable text. Scrollbars are supported, and forms may be nested
+ to provide extra functionality. This package contains the shared library
+ for programs that have been built with newt.
+Homepage: https://fedorahosted.org/newt/
+
+Package: libgcc1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 128
+Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+Architecture: amd64
+Multi-Arch: same
+Source: gcc-4.8 (4.8.1-10)
+Version: 1:4.8.1-10
+Breaks: gcc-4.1, gcc-4.3 (<< 4.3.6-1), gcc-4.4 (<< 4.4.6-4), gcc-4.5 (<< 4.5.3-2)
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+Homepage: http://gcc.gnu.org/
+
diff --git a/test/integration/status-bug-lp1347721-dpkg-ordering b/test/integration/status-bug-lp1347721-dpkg-ordering
new file mode 100644
index 0000000..62e545c
--- /dev/null
+++ b/test/integration/status-bug-lp1347721-dpkg-ordering
@@ -0,0 +1,1942 @@
+Package: libustr-1.0-1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 261
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: ustr
+Version: 1.0.4-3ubuntu2
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Description: Micro string library: shared library
+ ustr (Micro string library) is a string API for C. It has tiny overhead over
+ just plain strdup(), is much safer, is easier to use, is faster for many
+ operations, can be used with read-only or automatically allocated data. You
+ don't even need to link to the library to use it (so there are no
+ dependencies).
+ .
+ This package contains the shared library for ustr.
+Homepage: http://www.and.org/ustr/
+Original-Maintainer: Vaclav Ovsik <vaclav.ovsik@i.cz>
+
+Package: debconf
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 609
+Maintainer: Colin Watson <cjwatson@ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Version: 1.5.53ubuntu1
+Replaces: debconf-tiny
+Provides: debconf-2.0
+Pre-Depends: perl-base (>= 5.6.1-4)
+Recommends: apt-utils (>= 0.5.1), debconf-i18n
+Suggests: debconf-doc, debconf-utils, whiptail | dialog | gnome-utils, libterm-readline-gnu-perl, libgtk2-perl (>= 1:1.130), libnet-ldap-perl, perl, libqtgui4-perl, libqtcore4-perl
+Conflicts: apt (<< 0.3.12.1), cdebconf (<< 0.96), debconf-tiny, debconf-utils (<< 1.3.22), dialog (<< 0.9b-20020814-1), menu (<= 2.1.3-1), whiptail (<< 0.51.4-11), whiptail-utf8 (<= 0.50.17-13)
+Conffiles:
+ /etc/debconf.conf 8c0619be413824f1fc7698cee0f23811
+ /etc/apt/apt.conf.d/70debconf 7e9d09d5801a42b4926b736b8eeabb73
+ /etc/bash_completion.d/debconf 8fa1862734fbe54d7178aaaa419f5a11
+Description: Debian configuration management system
+ Debconf is a configuration management system for debian packages. Packages
+ use Debconf to ask questions when they are installed.
+Original-Maintainer: Debconf Developers <debconf-devel@lists.alioth.debian.org>
+
+Package: iproute2
+Status: install ok installed
+Priority: important
+Section: net
+Installed-Size: 1184
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 3.14.0-1
+Replaces: iproute
+Provides: arpd
+Depends: libc6 (>= 2.14), libdb5.3
+Recommends: libatm1 (>= 2.4.1-17~), libxtables10
+Suggests: iproute2-doc
+Conflicts: arpd, iproute (<< 20130000-1)
+Conffiles:
+ /etc/iproute2/rt_realms 7137bdf40e8d58c87ac7e3bba503767f
+ /etc/iproute2/rt_protos 95ce0b4b5b79f5a8a45941fb418a904c
+ /etc/iproute2/rt_dsfield 4264d5c7c8298300185aa04e1a736934
+ /etc/iproute2/rt_scopes 6298b8df09e9bda23ea7da49021ca457
+ /etc/iproute2/ematch_map b91e7f9b26918449bade9573f8871d61
+ /etc/iproute2/group 3aea2c0e0dd75e13a5f8f48f2936915f
+ /etc/iproute2/rt_tables a1313318d6778fe6b8c680248ef5a463
+Description: networking and traffic control tools
+ The iproute2 suite is a collection of utilities for networking and
+ traffic control.
+ .
+ These tools communicate with the Linux kernel via the (rt)netlink
+ interface, providing advanced features not available through the
+ legacy net-tools commands 'ifconfig' and 'route'.
+Original-Maintainer: Debian iproute2 Maintainers <ah-iproute@debian.org>
+Homepage: http://www.linux-foundation.org/en/Net:Iproute2
+
+Package: coreutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 6124
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 8.21-1ubuntu5
+Replaces: mktemp, timeout
+Pre-Depends: libacl1 (>= 2.2.51-8), libattr1 (>= 1:2.4.46-8), libc6 (>= 2.17), libselinux1 (>= 1.32)
+Conflicts: timeout
+Description: GNU core utilities
+ This package contains the basic file, shell and text manipulation
+ utilities which are expected to exist on every operating system.
+ .
+ Specifically, this package includes:
+ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
+ csplit cut date dd df dir dircolors dirname du echo env expand expr
+ factor false flock fmt fold groups head hostid id install join link ln
+ logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc od
+ paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir runcon
+ sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test
+ timeout touch tr true truncate tsort tty uname unexpand uniq unlink
+ users vdir wc who whoami yes
+Homepage: http://gnu.org/software/coreutils
+Original-Maintainer: Michael Stone <mstone@debian.org>
+
+Package: debianutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 273
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 4.4
+Replaces: manpages-pl (<< 1:0.5)
+Depends: sensible-utils
+Pre-Depends: libc6 (>= 2.15)
+Description: Miscellaneous utilities specific to Debian
+ This package provides a number of small utilities which are used
+ primarily by the installation scripts of Debian packages, although
+ you may use them directly.
+ .
+ The specific utilities included are:
+ add-shell installkernel ischroot remove-shell run-parts savelog
+ tempfile which
+Original-Maintainer: Clint Adams <clint@debian.org>
+
+Package: initramfs-tools
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 365
+Maintainer: Ubuntu Kernel Team <kernel-team@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Version: 0.103ubuntu4
+Provides: linux-initramfs-tool
+Depends: initramfs-tools-bin (>= 0.103ubuntu4), initramfs-tools-bin (<< 0.103ubuntu4.1~), klibc-utils (>= 2.0-1~), busybox-initramfs (>= 1:1.13.3-1ubuntu5), cpio, module-init-tools, udev (>= 147~-5), findutils (>= 4.2.24), util-linux (>> 2.15~rc1)
+Suggests: bash-completion
+Breaks: cryptsetup (<< 2:1.1.0-2.1), elilo (<< 3.12-3.1~), lilo (<< 22.8-8.2~), mountall (<< 2.0~), s390-tools (<< 1.8.3-2~)
+Conflicts: usplash (<< 0.5.50)
+Conffiles:
+ /etc/bash_completion.d/initramfs-tools 7eeb7184772f3658e7cf446945c096b1
+ /etc/initramfs-tools/update-initramfs.conf e2026d4603e7161efaccca519aeb1297
+ /etc/initramfs-tools/initramfs.conf 8801535d9bec98754eea6a172f956d42
+ /etc/kernel/postrm.d/initramfs-tools e22d1ab0d7a7a1b66ae6d71ea4f21938
+ /etc/kernel/postinst.d/initramfs-tools fe7713b9a74a10ed71d1e7dd93afc209
+Description: tools for generating an initramfs
+ This package contains tools to create and boot an initramfs for packaged 2.6
+ Linux kernel. The initramfs is a gzipped cpio archive. At boot time, the
+ kernel unpacks that archive into RAM, mounts and uses it as initial root file
+ system. The mounting of the real root file system occurs in early user space.
+ klibc provides utilities to setup root. Having the root on MD, LVM2, LUKS or
+ NFS is also supported.
+ Any boot loader with initrd support is able to load an initramfs archive.
+Original-Maintainer: Debian kernel team <debian-kernel@lists.debian.org>
+
+Package: makedev
+Status: install ok installed
+Priority: extra
+Section: admin
+Installed-Size: 125
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Version: 2.3.1-93ubuntu1
+Depends: base-passwd (>= 3.0.4)
+Conflicts: udev (<= 0.024-7)
+Description: creates device files in /dev
+ The MAKEDEV executable is used to create device files, often in /dev.
+ .
+ Device files are special files through which applications can interact
+ with hardware.
+ .
+ This package is not necessary for most modern Linux systems, where the udev
+ subsystem provides a more dynamic mechanism for device file management.
+Original-Maintainer: Debian QA Group <packages@qa.debian.org>
+
+Package: libdbus-1-3
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 398
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: dbus
+Version: 1.6.18-0ubuntu4
+Depends: libc6 (>= 2.10)
+Pre-Depends: multiarch-support
+Recommends: dbus
+Breaks: kde-window-manager (<< 4:4.4.5-9), kdebase-workspace-bin (<< 4:4.4.5-9)
+Description: simple interprocess messaging system (library)
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ D-Bus supports broadcast messages, asynchronous messages (thus
+ decreasing latency), authentication, and more. It is designed to be
+ low-overhead; messages are sent using a binary protocol, not using
+ XML. D-Bus also supports a method call mapping for its messages, but
+ it is not required; this makes using the system quite simple.
+ .
+ It comes with several bindings, including GLib, Python, Qt and Java.
+ .
+ The daemon can be found in the dbus package.
+Homepage: http://dbus.freedesktop.org/
+Original-Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+
+Package: module-init-tools
+Status: install ok installed
+Priority: extra
+Section: admin
+Installed-Size: 31
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Source: kmod
+Version: 16-2ubuntu3
+Depends: libkmod2, kmod
+Pre-Depends: dpkg (>= 1.15.7.2)
+Description: transitional dummy package (module-init-tools to kmod)
+ This dummy package is provided to support the transition from
+ module-init-tools to kmod and should be removed afterwards.
+Original-Maintainer: Marco d'Itri <md@linux.it>
+
+Package: libuuid1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 107
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: util-linux
+Version: 2.20.1-5.1ubuntu20
+Replaces: e2fsprogs (<< 1.34-1)
+Depends: passwd, libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Recommends: uuid-runtime
+Description: Universally Unique ID library
+ The libuuid library generates and parses 128-bit universally unique
+ ids (UUIDs). A UUID is an identifier that is unique across both
+ space and time, with respect to the space of all UUIDs. A UUID can
+ be used for multiple purposes, from tagging objects with an extremely
+ short lifetime, to reliably identifying very persistent objects
+ across a network.
+ .
+ See RFC 4122 for more information.
+Homepage: http://userweb.kernel.org/~kzak/util-linux/
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: lsb-base
+Status: install ok installed
+Priority: required
+Section: misc
+Installed-Size: 82
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Source: lsb
+Version: 4.1+Debian11ubuntu6
+Description: Linux Standard Base 4.1 init script functionality
+ The Linux Standard Base (http://www.linuxbase.org/) is a standard
+ core system that third-party applications written for Linux can
+ depend upon.
+ .
+ This package only includes the init-functions shell library, which
+ may be used by other packages' initialization scripts for console
+ logging and other purposes.
+Homepage: http://www.linuxfoundation.org/collaborate/workgroups/lsb
+Original-Maintainer: Debian LSB Team <debian-lsb@lists.debian.org>
+
+Package: procps
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 637
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 1:3.3.9-1ubuntu2
+Provides: watch
+Depends: libc6 (>= 2.15), libncurses5 (>= 5.5-5~), libncursesw5 (>= 5.6+20070908), libprocps3, libtinfo5, lsb-base (>= 3.0-10), initscripts
+Recommends: psmisc
+Breaks: guymager (<= 0.5.9-1), open-vm-tools (<= 2011.12.20-562307-1), xmem (<= 1.20-27.1)
+Conflicts: pgrep (<< 3.3-5), w-bassman (<< 1.0-3)
+Conffiles:
+ /etc/sysctl.d/10-console-messages.conf 154f6f5c5810d10bb303fb6a8e907c6a
+ /etc/sysctl.d/README c20074b9b11a5202758c69d7bcb6996f
+ /etc/sysctl.d/10-magic-sysrq.conf b3059f2835f17c97265433fdfdee358f
+ /etc/sysctl.d/10-kernel-hardening.conf 5c1388f00011a287cdeba60208c674e1
+ /etc/sysctl.d/10-link-restrictions.conf 8568316f2baa8db06554dab91f93a161
+ /etc/sysctl.d/10-zeropage.conf 8d7193abcc4dfedaf519dd03016a5e59
+ /etc/sysctl.d/10-network-security.conf 4ac7258f5336e7eeaf448c05ab668d3c
+ /etc/sysctl.d/10-ptrace.conf 47f40494b2fc698e15549e0a4a79e81c
+ /etc/sysctl.d/10-ipv6-privacy.conf e9473d12b4a7069d6a3ca8b694511ddf
+ /etc/sysctl.conf 76c1d8285c578d5e827c3e07b9738112
+ /etc/init.d/procps 021482ebab1024f5ed76e650e5191e8f
+ /etc/init/procps.conf 96170a339d08797dc90d69b01d6bf610
+Description: /proc file system utilities
+ This package provides command line and full screen utilities for browsing
+ procfs, a "pseudo" file system dynamically generated by the kernel to
+ provide information about the status of entries in its process table
+ (such as whether the process is running, stopped, or a "zombie").
+ .
+ It contains free, kill, pkill, pgrep, pmap, ps, pwdx, skill, slabtop,
+ snice, sysctl, tload, top, uptime, vmstat, w, and watch.
+Homepage: http://gitorious.org/procps
+Original-Maintainer: Craig Small <csmall@debian.org>
+
+Package: libpam0g
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 219
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: pam
+Version: 1.1.8-1ubuntu2
+Replaces: libpam0g-util
+Depends: libaudit1 (>= 1:2.2.1), libc6 (>= 2.8), debconf (>= 0.5) | debconf-2.0
+Pre-Depends: multiarch-support
+Suggests: libpam-doc
+Description: Pluggable Authentication Modules library
+ Contains the shared library for Linux-PAM, a library that enables the
+ local system administrator to choose how applications authenticate users.
+ In other words, without rewriting or recompiling a PAM-aware application,
+ it is possible to switch between the authentication mechanism(s) it uses.
+ One may entirely upgrade the local authentication system without touching
+ the applications themselves.
+Homepage: http://pam.sourceforge.net/
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: sensible-utils
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 110
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Version: 0.0.9
+Replaces: debianutils (<= 2.32.3), manpages-pl (<= 20060617-3~)
+Description: Utilities for sensible alternative selection
+ This package provides a number of small utilities which are used
+ by programs to sensibly select and spawn an appropriate browser,
+ editor, or pager.
+ .
+ The specific utilities included are: sensible-browser sensible-editor
+ sensible-pager
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+
+Package: perl-base
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 4780
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Source: perl
+Version: 5.18.2-2ubuntu1
+Replaces: libperl5.8 (<< 5.8.0-20), libscalar-list-utils-perl, libsocket-perl, libxsloader-perl, perl (<< 5.10.1-12), perl-modules (<< 5.10.1-1)
+Provides: libscalar-list-utils-perl, libsocket-perl, libxsloader-perl, perl5-base, perlapi-5.18.1, perlapi-5.18.2
+Pre-Depends: libc6 (>= 2.11), dpkg (>= 1.14.20)
+Suggests: perl
+Breaks: autoconf2.13 (<< 2.13-45), libcommon-sense-perl (<< 3.72-2~), libfile-spec-perl (<< 3.4000), libmarc-charset-perl (<< 1.2), libsocket-perl (<< 2.009), libxsloader-perl (<< 0.16)
+Conflicts: defoma (<< 0.11.12), doc-base (<< 0.10.3), libscalar-list-utils-perl, mono-gac (<< 2.10.8.1-3), safe-rm (<< 0.8), update-inetd (<< 4.41)
+Description: minimal Perl system
+ Perl is a scripting language used in many system scripts and utilities.
+ .
+ This package provides a Perl interpreter and the small subset of the
+ standard run-time library required to perform basic tasks. For a full
+ Perl installation, install "perl" (and its dependencies, "perl-modules"
+ and "perl-doc").
+Original-Maintainer: Niko Tyni <ntyni@debian.org>
+Homepage: http://dev.perl.org/perl5/
+
+Package: sysv-rc
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 221
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Source: sysvinit
+Version: 2.88dsf-41ubuntu6
+Replaces: file-rc
+Depends: debconf (>= 0.5) | debconf-2.0, sysvinit-utils (>= 2.86.ds1-62), insserv (>> 1.12.0-10)
+Recommends: lsb-base (>= 3.2-14)
+Suggests: sysv-rc-conf, bum
+Breaks: initscripts (<< 2.86.ds1-63)
+Conflicts: file-rc
+Description: System-V-like runlevel change mechanism
+ This package provides support for the System-V like system
+ for booting, changing runlevels, and shutting down,
+ configured through symbolic links in /etc/rc?.d/.
+Homepage: http://savannah.nongnu.org/projects/sysvinit
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+
+Package: libprocps3
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 129
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: procps
+Version: 1:3.3.9-1ubuntu2
+Replaces: procps (<< 1:3.3.2-1)
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Description: library for accessing process information from /proc
+ The libprocps library is a way of accessing information out of the /proc
+ filesystem.
+ .
+ This package contains the shared libraries necessary to run programs
+ compilied with libprocps.
+Homepage: http://gitorious.org/procps
+Original-Maintainer: Craig Small <csmall@debian.org>
+
+Package: libjson-c2
+Status: install ok installed
+Priority: extra
+Section: libs
+Installed-Size: 82
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: json-c
+Version: 0.11-4ubuntu1
+Depends: libc6 (>= 2.8)
+Pre-Depends: multiarch-support
+Description: JSON manipulation library - shared library
+ This library allows you to easily construct JSON objects in C,
+ output them as JSON formatted strings and parse JSON formatted
+ strings back into the C representation of JSON objects.
+Homepage: https://github.com/json-c/json-c/wiki
+Original-Maintainer: fabien boucher <fabien.dot.boucher@gmail.com>
+
+Package: libdrm2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 105
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: libdrm
+Version: 2.4.53-1
+Depends: libc6 (>= 2.17)
+Pre-Depends: multiarch-support
+Description: Userspace interface to kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the runtime environment for libdrm.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libsepol1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 322
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: libsepol
+Version: 2.2-1
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Description: SELinux library for manipulating binary security policies
+ Security-enhanced Linux is a patch of the Linux kernel and a number
+ of utilities with enhanced security functionality designed to add
+ mandatory access controls to Linux. The Security-enhanced Linux
+ kernel contains new architectural components originally developed to
+ improve the security of the Flask operating system. These
+ architectural components provide general support for the enforcement
+ of many kinds of mandatory access control policies, including those
+ based on the concepts of Type Enforcement®, Role-based Access
+ Control, and Multi-level Security.
+ .
+ libsepol provides an API for the manipulation of SELinux binary policies.
+ It is used by checkpolicy (the policy compiler) and similar tools, as well
+ as by programs like load_policy that need to perform specific transformations
+ on binary policies such as customizing policy boolean settings.
+Original-Maintainer: Debian SELinux maintainers <selinux-devel@lists.alioth.debian.org>
+Homepage: http://userspace.selinuxproject.org/
+
+Package: libpam-modules
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 764
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: pam
+Version: 1.1.8-1ubuntu2
+Replaces: libpam-umask, libpam0g-util
+Provides: libpam-mkhomedir, libpam-motd, libpam-umask
+Pre-Depends: libaudit1 (>= 1:2.2.1), libc6 (>= 2.15), libdb5.3, libpam0g (>= 1.1.3-2), libselinux1 (>= 2.1.9), debconf (>= 0.5) | debconf-2.0, libpam-modules-bin (= 1.1.8-1ubuntu2)
+Conflicts: libpam-mkhomedir, libpam-motd, libpam-umask
+Conffiles:
+ /etc/security/limits.conf 11c27ba00b7bd6a255f33126f75c5005
+ /etc/security/group.conf f1e26e8db6f7abd2d697d7dad3422c36
+ /etc/security/access.conf 13ec4d189f0ed9acf3433977a53d446b
+ /etc/security/pam_env.conf ddee4a931170dc21b4e0b9bb28e02a7b
+ /etc/security/namespace.init b46b23d64860d1557d2a8f44b231fd54
+ /etc/security/time.conf 06e05c6079e839c8833ac7c3abfde192
+ /etc/security/sepermit.conf d41c74654734a5c069a37bfc02f0a6d4
+ /etc/security/namespace.conf 6424c99a62ddf4b7d3ca713bb06ded89
+Description: Pluggable Authentication Modules for PAM
+ This package completes the set of modules for PAM. It includes the
+ pam_unix.so module as well as some specialty modules.
+Homepage: http://pam.sourceforge.net/
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: tzdata
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1599
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Version: 2014b-1
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Provides: tzdata-jessie
+Depends: debconf (>= 0.5) | debconf-2.0
+Description: time zone and daylight-saving time data
+ This package contains data required for the implementation of
+ standard local time for many representative locations around the
+ globe. It is updated periodically to reflect changes made by
+ political bodies to time zone boundaries, UTC offsets, and
+ daylight-saving rules.
+Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Homepage: http://www.iana.org/time-zones
+
+Package: libudev1
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 129
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: systemd
+Version: 204-10ubuntu1
+Depends: libc6 (>= 2.17), libcgmanager0, libdbus-1-3 (>= 1.0.2), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0)
+Pre-Depends: multiarch-support
+Description: libudev shared library
+ This library provides access to udev device information.
+Homepage: http://www.freedesktop.org/wiki/Software/systemd
+Original-Maintainer: Debian systemd Maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+
+Package: ifupdown
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 229
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 0.7.48.1ubuntu1
+Replaces: netbase (<< 5.0)
+Depends: iproute2 | iproute (>= 20071016-1), libc6 (>= 2.7), sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16), lsb-base (>= 4.1+Debian3), initscripts (>= 2.88dsf-25), adduser
+Recommends: isc-dhcp-client | dhcp-client
+Suggests: ppp, rdnssd, net-tools
+Breaks: dhcp3-client (<< 4.0), netbase (<< 5.0)
+Conffiles:
+ /etc/network/if-up.d/upstart dfbcde4fd4a3a2553930605e03e160ab
+ /etc/network/if-down.d/upstart 1a0205ddbc1446782a8d4d818e97d8a5
+ /etc/init/network-interface-container.conf 4daa570594afc50940f140a7731d20d1
+ /etc/init/networking.conf c50811e19bcd596d99b0467b40cfbb8b
+ /etc/init/network-interface.conf aae12345eba8e946579b06798b1752c1
+ /etc/init/network-interface-security.conf feb6b4b52fe24c44ff1bc68addf245d6
+ /etc/init.d/networking 2c8c3be8b90f99de7edf0f883ebe39f3
+ /etc/default/networking 35cd4a2713981c9239ce4532c1bfc1c7
+Description: high level tools to configure network interfaces
+ This package provides the tools ifup and ifdown which may be used to
+ configure (or, respectively, deconfigure) network interfaces based on
+ interface definitions in the file /etc/network/interfaces.
+Original-Maintainer: Andrew Shadura <andrewsh@debian.org>
+
+Package: libsemanage1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 261
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: libsemanage
+Version: 2.2-1ubuntu1
+Depends: libsemanage-common (= 2.2-1ubuntu1), libaudit1 (>= 1:2.2.1), libbz2-1.0, libc6 (>= 2.8), libselinux1 (>= 2.1.12), libsepol1 (>= 2.1.4), libustr-1.0-1 (>= 1.0.4)
+Pre-Depends: multiarch-support
+Description: SELinux policy management library
+ This package provides the shared libraries for SELinux policy management.
+ It uses libsepol for binary policy manipulation and libselinux for
+ interacting with the SELinux system. It also exec's helper programs
+ for loading policy and for checking whether the file_contexts
+ configuration is valid (load_policy and setfiles from
+ policycoreutils) presently, although this may change at least for the
+ bootstrapping case
+ .
+ Security-enhanced Linux is a patch of the Linux kernel and a
+ number of utilities with enhanced security functionality designed to
+ add mandatory access controls to Linux. The Security-enhanced Linux
+ kernel contains new architectural components originally developed to
+ improve the security of the Flask operating system. These
+ architectural components provide general support for the enforcement
+ of many kinds of mandatory access control policies, including those
+ based on the concepts of Type Enforcement, Role-based Access
+ Control, and Multi-level Security.
+Original-Maintainer: Debian SELinux maintainers <selinux-devel@lists.alioth.debian.org>
+Homepage: http://userspace.selinuxproject.org/
+
+Package: mountall
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 248
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 2.53
+Replaces: upstart (<< 0.6.3-2)
+Depends: makedev, udev, plymouth, coreutils (>= 7.1), libc6 (>= 2.9), libdbus-1-3 (>= 1.2.16), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libplymouth2 (>= 0.8.1-3), libudev1 (>= 183)
+Pre-Depends: dpkg (>= 1.15.7.2)
+Breaks: initscripts (<< 2.88dsf-24), policycoreutils (<< 2.0.69-2ubuntu4), usplash (<< 0.5.47)
+Conffiles:
+ /etc/init/checkroot.sh.conf 3ea7f6ba450f431fd239e2b53a805216
+ /etc/init/mounted-dev.conf cf7bea42235e77168c996d774f059c44
+ /etc/init/mounted-tmp.conf 289fa57d726885147a41b2b1f3695a29
+ /etc/init/mountdevsubfs.sh.conf dd33cb414bca17d97140d7f8671207f2
+ /etc/init/mountall-net.conf feff70cd7006f6763e24263d381940f3
+ /etc/init/mountall-shell.conf aa05af89db3de044d1cd7f6971b46d9f
+ /etc/init/mountall.sh.conf ee258840aad52477434cc22e34efcc50
+ /etc/init/bootmisc.sh.conf d1a51c54dcfe6f3f5265246888ba4161
+ /etc/init/mountnfs.sh.conf 760a5b57cbd0d1e2c65ba6db9297a586
+ /etc/init/mounted-proc.conf 07198659bd06c1442a35882b2fae05fc
+ /etc/init/mountnfs-bootclean.sh.conf 0b6f3f9e9f8757efee57f6a4839d7dff
+ /etc/init/mountall.conf ac0fbaa98e705e52f59ca9e4d39751ad
+ /etc/init/mountall-bootclean.sh.conf d1899239aa60ea903f43a3ac58c5c238
+ /etc/init/mtab.sh.conf 27aece82dbe70232d734d1dadfe87518
+ /etc/init/mountkernfs.sh.conf 2e7449097b6cf88cba915edc1c339ec4
+ /etc/init/mounted-var.conf 02f90856c91a46e9cbed1c35b92fec6c
+ /etc/init/mountall-reboot.conf 43e3c229085a13005b0681a49b2bef51
+ /etc/init/checkroot-bootclean.sh.conf e02a473c76e4a2bfc1efb4c367495052
+ /etc/init/checkfs.sh.conf 2e928476ccb2ecefe9ee87e2f83d34da
+ /etc/init/mounted-debugfs.conf 462c8aab0d9d4e6e496b1e2be5910edc
+ /etc/init/mounted-run.conf a26db58c801e0f6ec8738a5838aa53ed
+ /etc/dbus-1/system.d/Mountall.Server.conf 91b1414af1257d2ef089f84a3e5c1ed1
+Description: filesystem mounting tool
+ mountall mounts filesystems when the underlying block devices are
+ ready, or when network interfaces come up, checking the filesystems
+ first.
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: kmod
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 285
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 16-2ubuntu3
+Replaces: module-init-tools (<< 4)
+Depends: libc6 (>= 2.17), libkmod2, sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16), lsb-base (>= 3.0-6)
+Breaks: module-init-tools (<< 4)
+Conffiles:
+ /etc/init/kmod.conf 2686532745c8b71d6d3df91c3a53aef3
+ /etc/modprobe.d/blacklist-framebuffer.conf 097e2142ae3e4dd2911eda7844ce0c18
+ /etc/modprobe.d/blacklist-rare-network.conf 8fb4b96124e461f53adceba9ca91f09a
+ /etc/modprobe.d/blacklist.conf bc6754fa320733c6d239a4bb0148ffd7
+ /etc/modprobe.d/iwlwifi.conf f27bc645e93e20c8e532325d190ac8ee
+ /etc/modprobe.d/blacklist-ath_pci.conf d1da9bb08c2b0f56f3be93fd0e37946b
+ /etc/modprobe.d/mlx4.conf b2a0bedb7461daeb0138270639581bbf
+ /etc/modprobe.d/blacklist-firewire.conf 9cc07a17e8e64f9cd35ff59c29debe69
+ /etc/modprobe.d/blacklist-watchdog.conf 55327f9270c8a6257a833c4d127a39e1
+ /etc/init.d/kmod e6d43abead3714ceb8aca68dd77e1dad
+ /etc/depmod.d/ubuntu.conf 7c8439ef36b12e5f226b5dbfa20b8c2d
+Description: tools for managing Linux kernel modules
+ This package contains a set of programs for loading, inserting, and
+ removing kernel modules for Linux.
+ It replaces module-init-tools.
+Original-Maintainer: Marco d'Itri <md@linux.it>
+
+Package: libkmod2
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 138
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: kmod
+Version: 16-2ubuntu3
+Depends: libc6 (>= 2.17)
+Pre-Depends: multiarch-support
+Description: libkmod shared library
+ This library provides an API for insertion, removal, configuration and
+ listing of kernel modules.
+Original-Maintainer: Marco d'Itri <md@linux.it>
+
+Package: tar
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 760
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 1.27.1-2
+Replaces: cpio (<< 2.4.2-39)
+Pre-Depends: libacl1 (>= 2.2.51-8), libc6 (>= 2.17), libselinux1 (>= 1.32)
+Suggests: bzip2, ncompress, xz-utils, tar-scripts
+Breaks: dpkg-dev (<< 1.14.26)
+Conflicts: cpio (<= 2.4.2-38)
+Conffiles:
+ /etc/rmt 3c58b7cd13da1085eff0acc6a00f43c7
+Description: GNU version of the tar archiving utility
+ Tar is a program for packaging a set of files as a single archive in tar
+ format. The function it performs is conceptually similar to cpio, and to
+ things like PKZIP in the DOS world. It is heavily used by the Debian package
+ management system, and is useful for performing system backups and exchanging
+ sets of files with others.
+Original-Maintainer: Bdale Garbee <bdale@gag.com>
+
+Package: libmount1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 249
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: util-linux
+Version: 2.20.1-5.1ubuntu20
+Depends: libblkid1 (>= 2.17.2), libc6 (>= 2.8), libselinux1 (>= 1.32)
+Pre-Depends: multiarch-support
+Description: block device id library
+ The device mounting library, used by mount and mount helpers.
+Homepage: http://userweb.kernel.org/~kzak/util-linux/
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: zlib1g
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 170
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: zlib
+Version: 1:1.2.8.dfsg-1ubuntu1
+Provides: libz1
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Breaks: libxml2 (<< 2.7.6.dfsg-2), texlive-binaries (<< 2009-12)
+Conflicts: zlib1 (<= 1:1.0.4-7)
+Description: compression library - runtime
+ zlib is a library implementing the deflate compression method found
+ in gzip and PKZIP. This package includes the shared library.
+Homepage: http://zlib.net/
+Original-Maintainer: Mark Brown <broonie@debian.org>
+
+Package: adduser
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 644
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Version: 3.113+nmu3ubuntu3
+Replaces: manpages-it (<< 0.3.4-2), manpages-pl (<= 20051117-1)
+Depends: perl-base (>= 5.6.0), passwd (>= 1:4.0.12), debconf | debconf-2.0
+Suggests: liblocale-gettext-perl, perl-modules, ecryptfs-utils (>= 67-1)
+Conffiles:
+ /etc/deluser.conf 773fb95e98a27947de4a95abb3d3f2a2
+Description: add and remove users and groups
+ This package includes the 'adduser' and 'deluser' commands for creating
+ and removing users.
+ .
+ - 'adduser' creates new users and groups and adds existing users to
+ existing groups;
+ - 'deluser' removes users and groups and removes users from a given
+ group.
+ .
+ Adding users with 'adduser' is much easier than adding them manually.
+ Adduser will choose appropriate UID and GID values, create a home
+ directory, copy skeletal user configuration, and automate setting
+ initial values for the user's password, real name and so on.
+ .
+ Deluser can back up and remove users' home directories
+ and mail spool or all the files they own on the system.
+ .
+ A custom script can be executed after each of the commands.
+ .
+ Development mailing list:
+ http://lists.alioth.debian.org/mailman/listinfo/adduser-devel/
+Homepage: http://alioth.debian.org/projects/adduser/
+Original-Maintainer: Debian Adduser Developers <adduser-devel@lists.alioth.debian.org>
+
+Package: libgcc1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 154
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: gcc-4.9 (4.9.0-1ubuntu3)
+Version: 1:4.9.0-1ubuntu3
+Depends: gcc-4.9-base (= 4.9.0-1ubuntu3), libc6 (>= 2.2.4)
+Pre-Depends: multiarch-support
+Breaks: gcc-4.3 (<< 4.3.6-1), gcc-4.4 (<< 4.4.6-4), gcc-4.5 (<< 4.5.3-2)
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: libdebconfclient0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 85
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: cdebconf
+Version: 0.190ubuntu1
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Description: Debian Configuration Management System (C-implementation library)
+ Debconf is a configuration management system for Debian packages. It is
+ used by some packages to prompt you for information before they are
+ installed. This is a reimplementation of the original debconf version
+ in C.
+ .
+ This is the libraries needed by libdebconfclient-dev and cdebconf.
+Original-Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+
+Package: libklibc
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 133
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Source: klibc
+Version: 2.0.3-0ubuntu1
+Description: minimal libc subset for use with initramfs
+ klibc is intended to be a minimalistic libc subset for use with
+ initramfs. It is deliberately written for small size, minimal
+ entanglement, and portability, not speed. It is definitely a work in
+ progress, and a lot of things are still missing.
+Homepage: http://git.kernel.org/?p=libs/klibc/klibc.git;a=summary
+Original-Maintainer: maximilian attems <maks@debian.org>
+
+Package: libcgmanager0
+Status: install ok installed
+Priority: optional
+Section: admin
+Installed-Size: 152
+Maintainer: Serge Hallyn <serge.hallyn@ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: cgmanager
+Version: 0.25-0ubuntu4
+Depends: libc6 (>= 2.1.3), libdbus-1-3 (>= 1.0.2)
+Description: Central cgroup manager daemon (client library)
+ cgmanager provides a central cgroup manager daemon and a
+ per-namespace manager proxy, allowing users and programs
+ to administrate cgroups through D-Bus requests.
+ .
+ This package contains the shared library.
+Homepage: http://cgmanager.linuxcontainers.org/
+
+Package: mount
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 410
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Source: util-linux
+Version: 2.20.1-5.1ubuntu20
+Pre-Depends: libblkid1 (>= 2.20.1), libc6 (>= 2.8), libmount1 (>= 2.20.1), libselinux1 (>= 2.0.15)
+Suggests: nfs-common (>= 1:1.1.0-13)
+Description: Tools for mounting and manipulating filesystems
+ This package provides the mount(8), umount(8), swapon(8),
+ swapoff(8), and losetup(8) commands.
+Homepage: http://userweb.kernel.org/~kzak/util-linux/
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: libncurses5
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 292
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: ncurses
+Version: 5.9+20140118-1ubuntu1
+Depends: libtinfo5 (= 5.9+20140118-1ubuntu1), libc6 (>= 2.15)
+Pre-Depends: multiarch-support, libtinfo5 (>= 5.9-3)
+Recommends: libgpm2
+Description: shared libraries for terminal handling
+ The ncurses library routines are a terminal-independent method of
+ updating character screens with reasonable optimization.
+ .
+ This package contains the shared libraries necessary to run programs
+ compiled with ncurses.
+Homepage: http://invisible-island.net/ncurses/
+Original-Maintainer: Craig Small <csmall@debian.org>
+
+Package: libplymouth2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 298
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: plymouth
+Version: 0.8.8-0ubuntu17
+Replaces: plymouth (<< 0.7.0+git20090207-0ubuntu0.1~ppa4)
+Depends: libc6 (>= 2.8), libpng12-0 (>= 1.2.13-4)
+Pre-Depends: multiarch-support
+Breaks: casper (= 1.227), mountall (<< 2.8)
+Description: graphical boot animation and logger - shared libraries
+ Plymouth is an application that runs very early in the boot process
+ (even before the root filesystem is mounted!) that provides a graphical
+ boot animation while the boot process happens in the background.
+ .
+ This package contains the shared libraries.
+
+Package: gcc-4.9-base
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 213
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: gcc-4.9
+Version: 4.9.0-1ubuntu3
+Breaks: dehydra (<= 0.9.hg20110609-2), gcc-4.4-base (<< 4.4.7), gcj-4.4-base (<< 4.4.6-9~), gcj-4.6-base (<< 4.6.1-4~), gnat-4.4-base (<< 4.4.6-3~), gnat-4.6 (<< 4.6.1-5~)
+Description: GCC, the GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: initramfs-tools-bin
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 119
+Maintainer: Ubuntu Kernel Team <kernel-team@lists.ubuntu.com>
+Architecture: i386
+Source: initramfs-tools
+Version: 0.103ubuntu4
+Depends: libc6 (>= 2.4), libudev1 (>= 183)
+Description: binaries used by initramfs-tools
+ This package contains binaries used inside the initramfs images generated
+ by initramfs-tools.
+Original-Maintainer: Debian kernel team <debian-kernel@lists.debian.org>
+
+Package: libattr1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 55
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: attr
+Version: 1:2.4.47-1ubuntu1
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Conflicts: attr (<< 2.0.0)
+Description: Extended attribute shared library
+ Contains the runtime environment required by programs that make use
+ of extended attributes.
+Homepage: http://savannah.nongnu.org/projects/attr/
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+
+Package: klibc-utils
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 392
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Source: klibc
+Version: 2.0.3-0ubuntu1
+Depends: libklibc (= 2.0.3-0ubuntu1)
+Breaks: initramfs-tools (<< 0.103)
+Description: small utilities built with klibc for early boot
+ This package contains a collection of programs that are linked
+ against klibc. These duplicate some of the functionality of a
+ regular Linux toolset, but are typically much smaller than their
+ full-function counterparts. They are intended for inclusion in
+ initramfs images and embedded systems.
+Homepage: http://git.kernel.org/?p=libs/klibc/klibc.git;a=summary
+Original-Maintainer: maximilian attems <maks@debian.org>
+
+Package: e2fslibs
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 418
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: e2fsprogs
+Version: 1.42.9-3ubuntu1
+Replaces: e2fsprogs (<< 1.34-1)
+Provides: libe2p2, libext2fs2
+Depends: libc6 (>= 2.17)
+Pre-Depends: multiarch-support
+Description: ext2/ext3/ext4 file system libraries
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package provides the ext2fs and e2p libraries, for userspace software
+ that directly accesses extended file systems. Programs that use libext2fs
+ include e2fsck, mke2fs, and tune2fs. Programs that use libe2p include
+ dumpe2fs, chattr, and lsattr.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: base-passwd
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 247
+Maintainer: Colin Watson <cjwatson@debian.org>
+Architecture: i386
+Multi-Arch: foreign
+Version: 3.5.33
+Replaces: base
+Depends: libc6 (>= 2.8), libdebconfclient0 (>= 0.145)
+Recommends: debconf (>= 0.5) | debconf-2.0
+Description: Debian base system master password and group files
+ These are the canonical master copies of the user database files
+ (/etc/passwd and /etc/group), containing the Debian-allocated user and
+ group IDs. The update-passwd tool is provided to keep the system databases
+ synchronized with these master files.
+
+Package: libcomerr2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 102
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: e2fsprogs
+Version: 1.42.9-3ubuntu1
+Replaces: e2fsprogs (<< 1.34-1)
+Provides: libcomerr-kth-compat
+Depends: libc6 (>= 2.17)
+Pre-Depends: multiarch-support
+Description: common error description library
+ libcomerr is an attempt to present a common error-handling mechanism to
+ manipulate the most common form of error code in a fashion that does not
+ have the problems identified with mechanisms commonly in use.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: plymouth
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 441
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Version: 0.8.8-0ubuntu17
+Depends: initramfs-tools, libplymouth2 (= 0.8.8-0ubuntu17), mountall (>= 2.0), upstart (>= 1.11-0ubuntu3), udev (>= 166-0ubuntu4), sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16), libc6 (>= 2.8), libdbus-1-3 (>= 1.1.1), libdrm2 (>= 2.4.25), libtinfo5
+Recommends: plymouth-theme-ubuntu-text | plymouth-theme
+Breaks: gdm (<< 3.0.4-0ubuntu11), kdm (<< 4:4.7.1-0ubuntu3), lightdm (<< 0.9.7-0ubuntu2), lubuntu-plymouth-theme (<= 0.4), lxdm (<< 0.4.1-0ubuntu2), ubuntustudio-plymouth-theme (<= 0.38), xubuntu-plymouth-theme (<< 10.04.4)
+Conflicts: usplash
+Conffiles:
+ /etc/init/plymouth-ready.conf f8542ccc586a5b63f5b76f68ac4f2f59
+ /etc/init/plymouth-shutdown.conf febc1a3763f8e15add963ede4e561a26
+ /etc/init/plymouth-stop.conf 03c8ba8289470d71e22fdbfa5859e122
+ /etc/init/plymouth.conf 859e01281230eb9a522c99875f4b8b69
+ /etc/init/plymouth-log.conf 65d2943a69f455dec3fed43fd7996d76
+ /etc/init/plymouth-splash.conf 63b63b446cc981dc4f2fa5772b4b3e93
+ /etc/init/plymouth-upstart-bridge.conf dd271be2c476aadd0cd34bc77d95a379
+Description: graphical boot animation and logger - main package
+ Plymouth is an application that runs very early in the boot process
+ (even before the root filesystem is mounted!) that provides a graphical
+ boot animation while the boot process happens in the background.
+
+Package: upstart
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 1621
+Maintainer: James Hunt <james.hunt@ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 1.12.1-0ubuntu4
+Replaces: startup-tasks, system-services, sysvinit, upstart-compat-sysv, upstart-job
+Provides: startup-tasks, system-services, upstart-compat-sysv, upstart-job
+Depends: libc6 (>= 2.15), libdbus-1-3 (>= 1.2.16), libjson-c2 (>= 0.10), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libselinux1 (>= 1.32), libudev1 (>= 183), sysvinit-utils, initscripts, mountall, ifupdown (>= 0.6.10ubuntu5), libjson0 (>= 0.10-1.1ubuntu1), debianutils (>= 4)
+Suggests: python3, graphviz, bash-completion, upstart-monitor
+Breaks: friendly-recovery (<< 0.2.13), libc6 (<< 2.12.1-0ubuntu12)
+Conflicts: lxcguest, startup-tasks, system-services, sysvinit, upstart-compat-sysv, upstart-job
+Conffiles:
+ /etc/logrotate.d/upstart 070767086a27883ec119e1dde779a856
+ /etc/cron.daily/upstart 761747ebd3d1677620d5af50c9900b13
+ /etc/dbus-1/system.d/Upstart.conf 64be74cddb0c74b7d98202b40389784c
+ /etc/bash_completion.d/upstart 080f7eee4a3f3e5f76197eaa581fb4da
+ /etc/X11/Xsession.d/99upstart d150fce36cf22f5504e4dbc89b4826e0
+ /etc/X11/Xsession.d/00upstart 46b4576b1f2ceffb2450a88d58786b95
+ /etc/init/tty5.conf 6d5794f72a1098b008e53e326a6bb5a0
+ /etc/init/rc-sysinit.conf a50c045d9390a6e6c43c18b19cd72fe5
+ /etc/init/rcS.conf 8533688686f75d7bcf20da5a0d36d94b
+ /etc/init/flush-early-job-log.conf 09e959647877c39f6490ad29b8a35a28
+ /etc/init/wait-for-state.conf 20b85b55c3f1e040fdbbf669afe4d2a1
+ /etc/init/shutdown.conf 559659602cefe7e8d3c1e76820f5ae5d
+ /etc/init/upstart-udev-bridge.conf 2c24bb70877476b5e7016ccf6de745a4
+ /etc/init/tty2.conf 0d9326fdda081ac96d92bbc57ff773e4
+ /etc/init/failsafe.conf 0b88eeccf6c8fd456e886aa7a76e3291
+ /etc/init/rc.conf 3ebc6ddcd00482cfb24ce09a14ded29f
+ /etc/init/upstart-file-bridge.conf 57ea7ed6cba1f1259ac87410c59237ca
+ /etc/init/console.conf 8d79b0205f2daffb473604ce53e1dc83
+ /etc/init/tty1.conf f42f2298f711147ecf177054294861a7
+ /etc/init/control-alt-delete.conf 16e6603524084b63b0f0ca04eb56757e
+ /etc/init/upstart-socket-bridge.conf 5f3eaca09ee1f03d5d0686ea99f8c051
+ /etc/init/tty4.conf 2c78cd865d848bb2674104905151dbe2
+ /etc/init/tty3.conf 6608f08adf00a282358a1eeb9bdcf78e
+ /etc/init/tty6.conf e8ad2f0411614f9c8dc9c4e364763549
+ /etc/init/container-detect.conf 6bae6257355ad7322e7263e567817465
+ /etc/upstart-xsessions ec9aa92a5c50938479d711daa9ee774a
+Description: event-based init daemon
+ upstart is a replacement for the /sbin/init daemon which handles
+ starting of tasks and services during boot, stopping them during
+ shutdown and supervising them while the system is running.
+Homepage: http://upstart.ubuntu.com/
+Orig-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: passwd
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 2250
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Source: shadow
+Version: 1:4.1.5.1-1ubuntu9
+Replaces: manpages-tr (<< 1.0.5), manpages-zh (<< 1.5.1-1)
+Depends: libc6 (>= 2.8), libpam0g (>= 0.99.7.1), libselinux1 (>= 1.32), libsemanage1 (>= 2.0.3), libpam-modules, debianutils (>= 2.15.2)
+Conffiles:
+ /etc/default/useradd cc9f9a7713ab62a32cd38363d958f396
+ /etc/init/passwd.conf ea81baf06e4c358225ce22b786ad9e6a
+ /etc/cron.daily/passwd db990990933b6f56322725223f13c2bc
+ /etc/pam.d/chpasswd 9900720564cb4ee98b7da29e2d183cb2
+ /etc/pam.d/newusers 1454e29bfa9f2a10836563e76936cea5
+ /etc/pam.d/chfn 4d466e00a348ba426130664d795e8afa
+ /etc/pam.d/passwd eaf2ad85b5ccd06cceb19a3e75f40c63
+ /etc/pam.d/chsh a6e9b589e90009334ffd030d819290a6
+Description: change and administer password and group data
+ This package includes passwd, chsh, chfn, and many other programs to
+ maintain password and group data.
+ .
+ Shadow passwords are supported. See /usr/share/doc/passwd/README.Debian
+Homepage: http://pkg-shadow.alioth.debian.org/
+Original-Maintainer: Shadow package maintainers <pkg-shadow-devel@lists.alioth.debian.org>
+
+Package: libacl1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 75
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: acl
+Version: 2.2.52-1
+Depends: libattr1 (>= 1:2.4.46-8), libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Conflicts: acl (<< 2.0.0), libacl1-kerberos4kth
+Description: Access control list shared library
+ This package contains the libacl.so dynamic library containing
+ the POSIX 1003.1e draft standard 17 functions for manipulating
+ access control lists.
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://savannah.nongnu.org/projects/acl/
+
+Package: libslang2
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 1244
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: slang2
+Version: 2.2.4-16ubuntu1
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Recommends: libpng12-0
+Description: S-Lang programming library - runtime version
+ S-Lang is a C programmer's library that includes routines for the rapid
+ development of sophisticated, user friendly, multi-platform applications.
+ .
+ This package contains only the shared library libslang.so.* and copyright
+ information. It is only necessary for programs that use this library (such
+ as jed and slrn). If you plan on doing development with S-Lang, you will
+ need the companion -dev package as well.
+Homepage: http://www.jedsoft.org/slang/
+Original-Maintainer: Alastair McKinstry <mckinstry@debian.org>
+
+Package: initscripts
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 219
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Source: sysvinit
+Version: 2.88dsf-41ubuntu6
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Depends: libc6 (>= 2.4), mount (>= 2.11x-1), debianutils (>= 4), lsb-base (>= 3.2-14), sysvinit-utils (>= 2.86.ds1-64), sysv-rc | file-rc, coreutils (>= 5.93), passwd, upstart, mountall (>= 2.28)
+Recommends: psmisc, e2fsprogs
+Breaks: aide (<< 0.15.1-5), atm-tools (<< 1:2.5.1-1.3), bootchart (<< 0.10~svn407-3.3), console-common (<< 0.7.86), cruft (<< 0.9.16), eepc-acpi-scripts (<< 1.1.12), fcheck (<< 2.7.59-16), hostapd (<< 1:0.7.3-3), hostname (<< 2.95ubuntu1~boot2), ifupdown (<< 0.6.8ubuntu27), libpam-mount (<< 2.13-1), ltsp-client-core (<< 5.2.16-1), mdadm (<< 3.2.2-1), nbd-client (<< 1:2.9.23-1), nfs-common (<< 1:1.2.5-3), portmap (<< 6.0.0-2), readahead-fedora (<< 2:1.5.6-3), resolvconf (<< 1.49), rpcbind (<< 0.2.0-7), rsyslog (<< 5.8.2-2), selinux-policy-default (<= 2:0.2.20100524-9), splashy (<< 0.3.13-5.1+b1), sysklogd (<< 1.5-6.2), udev (<< 146-2~boot6), upstart (<< 0.6.3-2~boot4), wpasupplicant (<< 0.7.3-4), xymon (<< 4.3.0~beta2.dfsg-9)
+Conflicts: libdevmapper1.02.1 (<< 2:1.02.24-1)
+Conffiles:
+ /etc/init.d/halt 6ae1b3b1b8198567a5e32116077f12a2
+ /etc/init.d/killprocs 5e404d35091fab6c4889302736ed4602
+ /etc/init.d/ondemand 63d57b1f5df759ddea8ef193094c118a
+ /etc/init.d/rc.local 18cd07959adfa8411ca17fe7c2ec3d96
+ /etc/init.d/reboot 1b9db1ef7bfd79b128ef85d5065721a6
+ /etc/init.d/sendsigs 8376da0c226dcc989f6829230b1d5b50
+ /etc/init.d/single dc13cb373c5c098a8fb95424701373e3
+ /etc/init.d/umountfs 07e4c8c8d9136f36745feb4776edc6f4
+ /etc/init.d/umountnfs.sh b369d5215733f79ee2bf58cc966c5931
+ /etc/init.d/umountroot 677b1eb8358469b50044663bfbee5699
+ /etc/init.d/urandom e6454386bfce38efb5987dd06cb3b21d
+ /etc/default/devpts fc857c5ac5fb84d80720ed4d1c624f6e
+ /etc/default/halt 18d9844cf8ca8608e2a559a4555e593a
+ /etc/default/rcS db3696fc6caa33a1d72b33fa3cec7c42
+Description: scripts for initializing and shutting down the system
+ The scripts in this package initialize a standard Debian
+ system at boot time and shut it down at halt or reboot time.
+Homepage: http://savannah.nongnu.org/projects/sysvinit
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+
+Package: libblkid1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 254
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: util-linux
+Version: 2.20.1-5.1ubuntu20
+Depends: libc6 (>= 2.7), libuuid1 (>= 2.16)
+Pre-Depends: multiarch-support
+Conffiles:
+ /etc/blkid.conf 7f4c49e01e0a23d2f4b20eeb32e95abb
+Description: block device id library
+ The blkid library which allows system programs like fsck and
+ mount to quickly and easily find block devices by filesystem UUID and
+ LABEL. This allows system administrators to avoid specifying
+ filesystems by hard-coded device names, but via a logical naming
+ system instead.
+Homepage: http://userweb.kernel.org/~kzak/util-linux/
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: libss2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 110
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: e2fsprogs
+Version: 1.42.9-3ubuntu1
+Replaces: e2fsprogs (<< 1.34-1)
+Depends: libcomerr2, libc6 (>= 2.17)
+Pre-Depends: multiarch-support
+Description: command-line interface parsing library
+ libss provides a simple command-line interface parser which will
+ accept input from the user, parse the command into an argv argument
+ vector, and then dispatch it to a handler function.
+ .
+ It was originally inspired by the Multics SubSystem library.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: libsemanage-common
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 56
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Source: libsemanage
+Version: 2.2-1ubuntu1
+Replaces: libsemanage1 (<= 2.0.41-1), libsemanage1-dev (<< 2.1.6-3~)
+Breaks: libsemanage1 (<= 2.0.41-1), libsemanage1-dev (<< 2.1.6-3~)
+Conffiles:
+ /etc/selinux/semanage.conf e69d42a4d98a93c3b8e201bdda367c55
+Description: Common files for SELinux policy management libraries
+ This package provides the common files used by the shared libraries
+ for SELinux policy management.
+ .
+ Security-enhanced Linux is a patch of the Linux kernel and a
+ number of utilities with enhanced security functionality designed to
+ add mandatory access controls to Linux. The Security-enhanced Linux
+ kernel contains new architectural components originally developed to
+ improve the security of the Flask operating system. These
+ architectural components provide general support for the enforcement
+ of many kinds of mandatory access control policies, including those
+ based on the concepts of Type Enforcement, Role-based Access
+ Control, and Multi-level Security.
+Original-Maintainer: Debian SELinux maintainers <selinux-devel@lists.alioth.debian.org>
+Homepage: http://userspace.selinuxproject.org/
+
+Package: libpam-modules-bin
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 212
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Source: pam
+Version: 1.1.8-1ubuntu2
+Replaces: libpam-modules (<< 1.1.3-8)
+Depends: libaudit1 (>= 1:2.2.1), libc6 (>= 2.4), libpam0g (>= 0.99.7.1), libselinux1 (>= 1.32)
+Description: Pluggable Authentication Modules for PAM - helper binaries
+ This package contains helper binaries used by the standard set of PAM
+ modules in the libpam-modules package.
+Homepage: http://pam.sourceforge.net/
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: findutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 668
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 4.4.2-8
+Pre-Depends: libc6 (>= 2.17)
+Suggests: mlocate | locate
+Description: utilities for finding files--find, xargs
+ GNU findutils provides utilities to find files meeting specified
+ criteria and perform various actions on the files which are found.
+ This package contains 'find' and 'xargs'; however, 'locate' has
+ been split off into a separate package.
+Original-Maintainer: Andreas Metzler <ametzler@debian.org>
+Homepage: http://savannah.gnu.org/projects/findutils/
+
+Package: e2fsprogs
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 2424
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 1.42.9-3ubuntu1
+Replaces: hurd (<= 20040301-1), libblkid1 (<< 1.38+1.39-WIP-2005.12.10-2), libuuid1 (<< 1.38+1.39-WIP-2005.12.10-2)
+Pre-Depends: e2fslibs (= 1.42.9-3ubuntu1), libblkid1 (>= 2.17.2), libc6 (>= 2.11), libcomerr2 (>= 1.42~WIP-2011-10-05-1), libss2 (>= 1.34-1), libuuid1 (>= 2.16), util-linux (>= 2.15~rc1-1)
+Suggests: gpart, parted, e2fsck-static
+Conflicts: dump (<< 0.4b4-4), initscripts (<< 2.85-4), quota (<< 1.55-8.1), sysvinit (<< 2.85-4)
+Conffiles:
+ /etc/mke2fs.conf e2cdbf0620e93949af5857eb4739f949
+Description: ext2/ext3/ext4 file system utilities
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package contains programs for creating, checking, and maintaining
+ ext2/3/4-based file systems. It also includes the "badbocks" program,
+ which can be used to scan for bad blocks on a disk or other storage device.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: liblzma5
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 316
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: xz-utils
+Version: 5.1.1alpha+20120614-2ubuntu2
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Description: XZ-format compression library
+ XZ is the successor to the Lempel-Ziv/Markov-chain Algorithm
+ compression format, which provides memory-hungry but powerful
+ compression (often better than bzip2) and fast, easy decompression.
+ .
+ The native format of liblzma is XZ; it also supports raw (headerless)
+ streams and the older LZMA format used by lzma. (For 7-Zip's related
+ format, use the p7zip package instead.)
+Homepage: http://tukaani.org/xz/
+Original-Maintainer: Jonathan Nieder <jrnieder@gmail.com>
+
+Package: libnih1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 147
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: libnih
+Version: 1.0.3-4ubuntu25
+Pre-Depends: multiarch-support, libc6 (>= 2.15~)
+Description: NIH Utility Library
+ libnih is a light-weight "standard library" of C functions to ease the
+ development of other libraries and applications, especially those
+ normally found in /lib.
+ .
+ This package contains the shared library.
+Homepage: https://launchpad.net/libnih
+Original-Maintainer: Scott James Remnant <scott@netsplit.com>
+
+Package: libaudit1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 143
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: audit
+Version: 1:2.3.2-2ubuntu1
+Depends: libaudit-common (= 1:2.3.2-2ubuntu1), libc6 (>= 2.8)
+Pre-Depends: multiarch-support
+Description: Dynamic library for security auditing
+ The audit-libs package contains the dynamic libraries needed for
+ applications to use the audit framework. It is used to monitor systems for
+ security related events.
+Homepage: http://people.redhat.com/sgrubb/audit/
+Original-Maintainer: Debian QA Group <packages@qa.debian.org>
+
+Package: libdb5.3
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 1788
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: db5.3
+Version: 5.3.28-3ubuntu3
+Depends: libc6 (>= 2.17)
+Pre-Depends: multiarch-support
+Description: Berkeley v5.3 Database Libraries [runtime]
+ This is the runtime package for programs that use the v5.3 Berkeley
+ database library.
+Homepage: http://www.oracle.com/technology/software/products/berkeley-db/index.html
+Original-Maintainer: Debian Berkeley DB Group <pkg-db-devel@lists.alioth.debian.org>
+
+Package: insserv
+Status: install ok installed
+Priority: optional
+Section: misc
+Installed-Size: 182
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Version: 1.14.0-5ubuntu2
+Depends: libc6 (>= 2.7)
+Suggests: bootchart2
+Breaks: sysv-rc (<< 2.87dsf-3)
+Conffiles:
+ /etc/insserv.conf 3e9467113029a6356f57842085f3c849
+ /etc/bash_completion.d/insserv 32975fe14795d6fce1408d5fd22747fd
+Description: boot sequence organizer using LSB init.d script dependency information
+ The insserv program is used by the standard SysV-based init system. It
+ updates the order of symlinks in /etc/rc?.d/ based on dependencies
+ specified by LSB headers in the init.d scripts themselves.
+ .
+ These declared relations between scripts make it possible to optimize
+ the boot sequence for the currently installed set of packages, while
+ detecting and rejecting dependency loops.
+ .
+ Using insserv incorrectly can result in an unbootable system.
+Homepage: http://savannah.nongnu.org/projects/sysvinit
+Original-Maintainer: Petter Reinholdtsen <pere@debian.org>
+
+Package: dpkg
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 6327
+Origin: debian
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Bugs: debbugs://bugs.debian.org
+Architecture: i386
+Multi-Arch: foreign
+Version: 1.17.9ubuntu1
+Replaces: manpages-it (<< 2.80-4)
+Pre-Depends: libbz2-1.0, libc6 (>= 2.11), liblzma5 (>= 5.1.1alpha+20120614), libselinux1 (>= 2.1.0), zlib1g (>= 1:1.1.4), tar (>= 1.23)
+Suggests: apt
+Breaks: apt (<< 0.7.7), aptitude (<< 0.4.7-1), dpkg-dev (<< 1.15.8), libdpkg-perl (<< 1.15.8)
+Conflicts: ada-reference-manual (<< 20021112web-4), asn1-mode (<< 2.7-7), bogosort (<< 0.4.2-3), cl-yacc (<< 0.3-3), cpp-4.1-doc (<< 4.1.2.nf2-4), cpp-4.2-doc (<< 4.2.4.nf1-4), gcc-4.1-doc (<< 4.1.2.nf2-4), gcc-4.2-doc (<< 4.2.4.nf1-4), gcj-4.1-doc (<< 4.1.2.nf2-4), gcj-4.2-doc (<< 4.2.4.nf1-4), gfortran-4.1-doc (<< 4.1.2.nf2-4), gfortran-4.2-doc (<< 4.2.4.nf1-4), ggz-docs (<< 0.0.14.1-2), glame (<< 2.0.1-6), gnat-4.1-doc (<< 4.1.2.nf2-4), gnat-4.2-doc (<< 4.2.4.nf1-4), gtalk (<< 0.99.10-16), libalogg-dev (<< 1.3.7-2), libgtk1.2-doc (<< 1.2.10-19), libnettle-dev (<< 2), liborbit-dev (<< 0.5.17-12), libreadline5-dev (<< 5.2-8), librep-doc (<< 0.90), mmucl (<< 1.5.2-3), nxml-mode (<< 20041004-9), r6rs-doc (<< 1.0-2), serveez-doc (<< 0.1.5-3), slat (<< 2.0-6), texlive-base-bin-doc (<< 2007.dfsg.2-9), ttcn-el (<< 0.6.9-2), ulog-acctd (<< 0.4.3-3), xconq-doc (<< 7.4.1-5), zenirc (<< 2.112.dfsg-1)
+Conffiles:
+ /etc/alternatives/README 69c4ba7f08363e998e0f2e244a04f881
+ /etc/logrotate.d/dpkg 782ea5ae536f67ff51dc8c3e2eeb4cf9
+ /etc/dpkg/dpkg.cfg f4413ffb515f8f753624ae3bb365b81b
+ /etc/cron.daily/dpkg 2712ab0dc801324ea632a0f1f82cd38c
+Description: Debian package management system
+ This package provides the low-level infrastructure for handling the
+ installation and removal of Debian software packages.
+ .
+ For Debian package development tools, install dpkg-dev.
+Homepage: https://wiki.debian.org/Teams/Dpkg
+Original-Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+
+Package: libpcre3
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 595
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: pcre3
+Version: 1:8.31-5ubuntu1
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Breaks: approx (<< 4.4-1~), cduce (<< 0.5.3-2~), cmigrep (<< 1.5-7~), galax (<< 1.1-7~), libpcre-ocaml (<< 6.0.1~), liquidsoap (<< 0.9.2-3~), ocsigen (<< 1.3.3-1~)
+Conflicts: libpcre3-dev (<= 4.3-3)
+Description: Perl 5 Compatible Regular Expression Library - runtime files
+ This is a library of functions to support regular expressions whose syntax
+ and semantics are as close as possible to those of the Perl 5 language.
+ .
+ This package contains the runtime libraries.
+Original-Maintainer: Mark Baker <mark@mnb.org.uk>
+
+Package: libncursesw5
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 378
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: ncurses
+Version: 5.9+20140118-1ubuntu1
+Depends: libtinfo5 (= 5.9+20140118-1ubuntu1), libc6 (>= 2.15)
+Pre-Depends: multiarch-support
+Recommends: libgpm2
+Description: shared libraries for terminal handling (wide character support)
+ The ncurses library routines are a terminal-independent method of
+ updating character screens with reasonable optimization.
+ .
+ This package contains the shared libraries necessary to run programs
+ compiled with ncursesw, which includes support for wide characters.
+Homepage: http://invisible-island.net/ncurses/
+Original-Maintainer: Craig Small <csmall@debian.org>
+
+Package: busybox-initramfs
+Status: install ok installed
+Priority: optional
+Section: shells
+Installed-Size: 357
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Source: busybox
+Version: 1:1.22.0-5ubuntu1
+Depends: libc6 (>= 2.11)
+Description: Standalone shell setup for initramfs
+ BusyBox combines tiny versions of many common UNIX utilities into a single
+ small executable. It provides minimalist replacements for the most common
+ utilities you would usually find on your desktop system (i.e., ls, cp, mv,
+ mount, tar, etc.). The utilities in BusyBox generally have fewer options than
+ their full-featured GNU cousins; however, the options that are included
+ provide the expected functionality and behave very much like their GNU
+ counterparts.
+ .
+ busybox-initramfs provides a simple stand alone shell that provides
+ only the basic utilities needed for the initramfs.
+Homepage: http://www.busybox.net
+Original-Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+
+Package: libbz2-1.0
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 116
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: bzip2
+Version: 1.0.6-5
+Depends: libc6 (>= 2.4)
+Pre-Depends: multiarch-support
+Description: high-quality block-sorting file compressor library - runtime
+ This package contains libbzip2 which is used by the bzip2 compressor.
+ .
+ bzip2 is a freely available, patent free, high-quality data compressor.
+ It typically compresses files to within 10% to 15% of the best available
+ techniques, whilst being around twice as fast at compression and six
+ times faster at decompression.
+ .
+ bzip2 compresses files using the Burrows-Wheeler block-sorting text
+ compression algorithm, and Huffman coding. Compression is generally
+ considerably better than that achieved by more conventional
+ LZ77/LZ78-based compressors, and approaches the performance of the PPM
+ family of statistical compressors.
+ .
+ The archive file format of bzip2 (.bz2) is incompatible with that of its
+ predecessor, bzip (.bz).
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://www.bzip.org/
+
+Package: libtinfo5
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 433
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: ncurses
+Version: 5.9+20140118-1ubuntu1
+Replaces: libncurses5 (<< 5.9-3)
+Depends: libc6 (>= 2.15)
+Pre-Depends: multiarch-support
+Breaks: dialog (<< 1.2-20130523)
+Description: shared low-level terminfo library for terminal handling
+ The ncurses library routines are a terminal-independent method of
+ updating character screens with reasonable optimization.
+ .
+ This package contains the shared low-level terminfo library.
+Homepage: http://invisible-island.net/ncurses/
+Original-Maintainer: Craig Small <csmall@debian.org>
+
+Package: sysvinit-utils
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 232
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Source: sysvinit
+Version: 2.88dsf-41ubuntu6
+Replaces: last, sysvinit (<= 2.86.ds1-65)
+Depends: libc6 (>= 2.15), libselinux1 (>= 1.32), sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16)
+Recommends: upstart (>= 0.6.3-4)
+Suggests: bootlogd, sash
+Breaks: upstart (<< 1.5-0ubuntu5)
+Conflicts: chkconfig (<< 11.0-79.1-2), last, sysvconfig
+Conffiles:
+ /etc/init/startpar-bridge.conf d220afa75514468471c42469967341d2
+Description: System-V-like utilities
+ This package contains the important System-V-like utilities.
+ .
+ Specifically, this package includes:
+ killall5, last, lastb, mesg, pidof, service, sulogin
+Homepage: http://savannah.nongnu.org/projects/sysvinit
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+
+Package: multiarch-support
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 201
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Source: eglibc
+Version: 2.19-0ubuntu6
+Depends: libc6 (>= 2.13-5)
+Description: Transitional package to ensure multiarch compatibility
+ This is a transitional package used to ensure multiarch support is present
+ in ld.so before unpacking libraries to the multiarch directories. It can
+ be removed once nothing on the system depends on it.
+Homepage: http://www.eglibc.org
+Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+
+Package: libjson0
+Status: install ok installed
+Priority: extra
+Section: oldlibs
+Installed-Size: 29
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: json-c
+Version: 0.11-4ubuntu1
+Depends: libjson-c2
+Description: JSON manipulation library (transitional package)
+ This is a transition package that can be safely removed once no
+ package depend on it.
+Homepage: https://github.com/json-c/json-c/wiki
+Original-Maintainer: fabien boucher <fabien.dot.boucher@gmail.com>
+
+Package: libnih-dbus1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 65
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: libnih
+Version: 1.0.3-4ubuntu25
+Depends: libnih1 (= 1.0.3-4ubuntu25), libc6 (>= 2.3.4), libdbus-1-3 (>= 1.2.16)
+Pre-Depends: multiarch-support
+Description: NIH D-Bus Bindings Library
+ libnih-dbus is a D-Bus bindings library that integrates with the main
+ loop provided by libnih.
+ .
+ This package contains the shared library.
+Homepage: https://launchpad.net/libnih
+Original-Maintainer: Scott James Remnant <scott@netsplit.com>
+
+Package: libselinux1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 192
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: libselinux
+Version: 2.2.2-1ubuntu1
+Depends: libc6 (>= 2.8), libpcre3
+Pre-Depends: multiarch-support
+Description: SELinux runtime shared libraries
+ This package provides the shared libraries for Security-enhanced
+ Linux that provides interfaces (e.g. library functions for the
+ SELinux kernel APIs like getcon(), other support functions like
+ getseuserbyname()) to SELinux-aware applications. Security-enhanced
+ Linux is a patch of the Linux kernel and a number of utilities with
+ enhanced security functionality designed to add mandatory access
+ controls to Linux. The Security-enhanced Linux kernel contains new
+ architectural components originally developed to improve the security
+ of the Flask operating system. These architectural components provide
+ general support for the enforcement of many kinds of mandatory access
+ control policies, including those based on the concepts of Type
+ Enforcement, Role-based Access Control, and Multi-level Security.
+ .
+ libselinux1 provides an API for SELinux applications to get and set
+ process and file security contexts and to obtain security policy
+ decisions. Required for any applications that use the SELinux
+ API. libselinux may use the shared libsepol to manipulate the binary
+ policy if necessary (e.g. to downgrade the policy format to an older
+ version supported by the kernel) when loading policy.
+Homepage: http://userspace.selinuxproject.org/
+Original-Maintainer: Debian SELinux maintainers <selinux-devel@lists.alioth.debian.org>
+
+Package: libaudit-common
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 44
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Multi-Arch: foreign
+Source: audit
+Version: 1:2.3.2-2ubuntu1
+Replaces: libaudit0, libaudit1 (<< 1:2.2.1-2)
+Breaks: libaudit0, libaudit1 (<< 1:2.2.1-2)
+Conffiles:
+ /etc/libaudit.conf cdc703f9d27f0d980271a9e95d0f18b2
+Description: Dynamic library for security auditing - common files
+ The audit-libs package contains the dynamic libraries needed for
+ applications to use the audit framework. It is used to monitor systems for
+ security related events.
+ .
+ This package contains the libaudit.conf configuration file and the associated
+ manpage.
+Homepage: http://people.redhat.com/sgrubb/audit/
+Original-Maintainer: Debian QA Group <packages@qa.debian.org>
+
+Package: libc6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 9254
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: eglibc
+Version: 2.19-0ubuntu6
+Replaces: libc6-i386, libc6-xen
+Provides: glibc-2.19-1, libc6-i686, libc6-xen
+Depends: libgcc1
+Suggests: glibc-doc, debconf | debconf-2.0, locales
+Breaks: hurd (<< 1:0.5.git20140203-1), nscd (<< 2.19)
+Conflicts: libc6-xen, prelink (<= 0.0.20090311-1), tzdata (<< 2007k-1), tzdata-etch
+Conffiles:
+ /etc/ld.so.conf.d/i686-linux-gnu.conf 1c63da36f33ec6647af1d8faff9b9795
+Description: Embedded GNU C Library: Shared libraries
+ Contains the standard libraries that are used by nearly all programs on
+ the system. This package includes shared versions of the standard C library
+ and the standard math library, as well as many others.
+Homepage: http://www.eglibc.org
+Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+
+Package: libpng12-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 308
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: same
+Source: libpng
+Version: 1.2.50-1ubuntu2
+Replaces: libpng12-dev (<= 1.2.8rel-7)
+Depends: libc6 (>= 2.11), zlib1g (>= 1:1.1.4)
+Pre-Depends: multiarch-support
+Conflicts: libpng12-dev (<= 1.2.8rel-7), mzscheme (<= 1:209-5), pngcrush (<= 1.5.10-2), pngmeta (<= 1.11-3), povray-3.5 (<= 3.5.0c-10), qemacs (<= 0.3.1-5)
+Description: PNG library - runtime
+ libpng is a library implementing an interface for reading and writing
+ PNG (Portable Network Graphics) format files.
+ .
+ This package contains the runtime library files needed to run software
+ using libpng.
+Homepage: http://libpng.org/pub/png/libpng.html
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+
+Package: udev
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 5119
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Source: systemd
+Version: 204-10ubuntu1
+Depends: libacl1 (>= 2.2.51-8), libblkid1 (>= 2.19.1), libc6 (>= 2.17), libcgmanager0, libdbus-1-3 (>= 1.0.2), libkmod2 (>= 5~), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libselinux1 (>= 2.0.65), libudev1 (= 204-10ubuntu1), sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16), lsb-base (>= 3.0-6), util-linux (>= 2.16), procps
+Pre-Depends: debconf (>= 1.4.69) | debconf-2.0
+Breaks: consolekit (<< 0.4.6-1)
+Conffiles:
+ /etc/udev/udev.conf ae415f84e2967eff580089fb08aa0a61
+ /etc/init.d/udev b1cab2570af69ccbf49a208799af6247
+ /etc/init.d/udev-finish 6eac2544228b88cbe8cede182082f46a
+ /etc/init/udev-fallback-graphics.conf b8bfe7164e10cd0e53494b243c5728b1
+ /etc/init/udevtrigger.conf 651ff2421dde80be7ce7ccbf7fa8cf18
+ /etc/init/udev-finish.conf 5c953c5b98ccfbb2a02985bfa2f80aed
+ /etc/init/udev.conf 41c0081f3a830e0902aaff76a53edf98
+ /etc/init/udevmonitor.conf b541dfb5aa4958e9a5336ecaec00ca15
+ /etc/modprobe.d/fbdev-blacklist.conf 01cd03c88ce6821c03baf904f7dfcbd0
+ /etc/udev/rules.d/README 3b6de9f3f911176734c66903b4f8735c obsolete
+Description: /dev/ and hotplug management daemon
+ udev is a daemon which dynamically creates and removes device nodes from
+ /dev/, handles hotplug events and loads drivers at boot time.
+Homepage: http://www.freedesktop.org/wiki/Software/systemd
+Original-Maintainer: Debian systemd Maintainers <pkg-systemd-maintainers@lists.alioth.debian.org>
+
+Package: util-linux
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 1554
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 2.20.1-5.1ubuntu20
+Replaces: e2fsprogs, fdisk, fstrim, linux32, miscutils, schedutils, setterm, sparc-utils
+Provides: linux32, schedutils
+Depends: lsb-base (>= 3.0-6), tzdata (>= 2006c-2), dpkg (>= 1.15.4) | install-info, debconf (>= 0.5) | debconf-2.0, sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16)
+Pre-Depends: libblkid1 (>= 2.20.1), libc6 (>= 2.15), libncurses5 (>= 5.5-5~), libselinux1 (>= 1.32), libslang2 (>= 2.2.4), libtinfo5, libuuid1 (>= 2.16), zlib1g (>= 1:1.1.4)
+Suggests: util-linux-locales, kbd | console-tools, dosfstools
+Conflicts: console-tools (<< 1:0.2.3-21), fdisk, fstrim, kbd (<< 1.05-3), linux32, schedutils, setterm
+Conffiles:
+ /etc/cron.weekly/fstrim 4de5cd1aac392609593296f0d81e7595
+ /etc/init/hwclock.conf 132aa3db7e5a8cf55168e4866052208a
+ /etc/init/hwclock-save.conf 4a002046525e338fc23e4418602865c9
+Description: Miscellaneous system utilities
+ This package contains a number of important utilities, most of which
+ are oriented towards maintenance of your system. Some of the more
+ important utilities included in this package allow you to partition
+ your hard disk, view kernel messages, and create new filesystems.
+Homepage: http://userweb.kernel.org/~kzak/util-linux/
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: cpio
+Status: install ok installed
+Priority: important
+Section: utils
+Installed-Size: 312
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: i386
+Multi-Arch: foreign
+Version: 2.11+dfsg-2ubuntu1
+Replaces: cpio-mt
+Depends: libc6 (>= 2.17)
+Suggests: libarchive1
+Conflicts: cpio-mt, mt-st (<< 0.6)
+Description: GNU cpio -- a program to manage archives of files
+ GNU cpio is a tool for creating and extracting archives, or copying
+ files from one place to another. It handles a number of cpio formats
+ as well as reading and writing tar files.
+Homepage: http://www.gnu.org/software/cpio/
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+
diff --git a/test/integration/status-github-23-too-long-dependency-line b/test/integration/status-github-23-too-long-dependency-line
new file mode 100644
index 0000000..7378c99
--- /dev/null
+++ b/test/integration/status-github-23-too-long-dependency-line
@@ -0,0 +1,12 @@
+Package: network-manager-strongswan
+Status: install ok installed
+Priority: extra
+Section: net
+Installed-Size: 256
+Maintainer: Jean-Christophe Manciot <manciot.jeanchristophe@gmail.com>
+Architecture: amd64
+Version: 1.3.1-14
+Provides: network-manager-strongswan
+Depends: libart-2.0-2, libatk1.0-0, libavahi-client3, libavahi-common3, libavahi-glib1, libbonobo2-0, libbonoboui2-0, libc6, libcairo2, libcanberra0, libdatrie1, libdbus-1-3, libdbus-glib-1-2, libexpat1, libffi6, libfontconfig1, libfreetype6, libgail18, libgconf-2-4, libgcrypt20, libgdk-pixbuf2.0-0, libglib2.0-0, libglib2.0-0-dbg, libglib2.0-0-refdbg, libgmp10, libgnome-2-0, libgnomecanvas2-0, libgnome-keyring0, libgnomeui-0, libgnomevfs2-0, libgnutls30, libgpg-error0, libgraphite2-3, libgtk2.0-0, libharfbuzz0b, libhogweed4, libice6, libidn11, libltdl7, liblzma5, libnettle6, libnm-glib-vpn1, libnm-util2, libogg0, liborbit-2-0, libp11-kit0, libpango-1.0-0, libpangocairo-1.0-0, libpangoft2-1.0-0, libpcre3, libpixman-1-0, libpng12-0, libpopt0, libselinux1, libsm6, libsystemd0, libtasn1-6, libtdb1, libthai0, libuuid1, libvorbis0a, libvorbisfile3, libx11-6, libxau6, libxcb1, libxcb-render0, libxcb-shm0, libxcomposite1, libxcursor1, libxdamage1, libxdmcp6, libxext6, libxfixes3, libxi6, libxinerama1, libxml2, libxrandr2, libxrender1, zlib1g
+Description: This package provides an IKEv2 IPSec VPN plugin for strongswan
+Description-md5: 31abf1e375284c7ee36f25bf936125f1
diff --git a/test/integration/status-ubuntu-bug-614993 b/test/integration/status-ubuntu-bug-614993
new file mode 100644
index 0000000..99de51d
--- /dev/null
+++ b/test/integration/status-ubuntu-bug-614993
@@ -0,0 +1,5894 @@
+Package: xserver-xorg-input-vmmouse
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 176
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:12.6.5-4ubuntu2
+Replaces: mdetect (<< 0.5.2.2), xserver-xorg (<< 6.8.2-35)
+Provides: xserver-xorg-input-7
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900), xserver-xorg-input-mouse, udev
+Description: X.Org X server -- VMMouse input driver to use with VMWare
+ This package provides the driver for the X11 vmmouse input device.
+ .
+ The VMMouse driver enables support for the special VMMouse protocol
+ that is provided by VMware virtual machines to give absolute pointer
+ positioning.
+ .
+ The vmmouse driver is capable of falling back to the standard "mouse"
+ driver if a VMware virtual machine is not detected. This allows for
+ dual-booting of an operating system from a virtual machine to real hardware
+ without having to edit xorg.conf every time.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-input-vmmouse driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libtext-wrapi18n-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 68
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 0.06-7
+Depends: libtext-charwidth-perl
+Description: internationalized substitute of Text::Wrap
+ This module is a substitution for Text::Wrap, supporting
+ multibyte characters such as UTF-8, EUC-JP, and GB2312, fullwidth
+ characters such as east Asian characters, combining characters
+ such as diacritical marks and Thai, and languages which don't
+ use whitespaces between words such as Chinese and Japanese.
+ .
+ It provides wrap().
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://search.cpan.org/search?module=Text::WrapI18N
+
+Package: debconf
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 924
+Maintainer: Colin Watson <cjwatson@ubuntu.com>
+Architecture: all
+Version: 1.5.28ubuntu4
+Replaces: debconf-tiny
+Provides: debconf-2.0
+Depends: debconf-i18n | debconf-english
+Pre-Depends: perl-base (>= 5.6.1-4)
+Recommends: apt-utils (>= 0.5.1)
+Suggests: debconf-doc, debconf-utils, whiptail | dialog | gnome-utils, libterm-readline-gnu-perl, libgnome2-perl, libnet-ldap-perl, perl
+Conflicts: apt (<< 0.3.12.1), cdebconf (<< 0.96), debconf-tiny, debconf-utils (<< 1.3.22), dialog (<< 0.9b-20020814-1), menu (<= 2.1.3-1), whiptail (<< 0.51.4-11), whiptail-utf8 (<= 0.50.17-13)
+Conffiles:
+ /etc/apt/apt.conf.d/70debconf 7e9d09d5801a42b4926b736b8eeabb73
+ /etc/bash_completion.d/debconf 8fa1862734fbe54d7178aaaa419f5a11
+ /etc/debconf.conf 8c0619be413824f1fc7698cee0f23811
+Description: Debian configuration management system
+ Debconf is a configuration management system for debian packages. Packages
+ use Debconf to ask questions when they are installed.
+Original-Maintainer: Debconf Developers <debconf-devel@lists.alioth.debian.org>
+Python-Version: 2.6, 3.1
+
+Package: xserver-common
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 172
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: all
+Source: xorg-server
+Version: 2:1.7.6-2ubuntu7
+Replaces: xserver-xorg-core (<< 2:1.5.2)
+Depends: x11-common, xkb-data, x11-xkb-utils
+Recommends: xfonts-base
+Description: common files used by various X servers
+ This package provides files necessary for all X.Org based X servers.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: dash
+Status: install ok installed
+Priority: required
+Section: shells
+Installed-Size: 236
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 0.5.5.1-3ubuntu2
+Depends: debianutils (>= 2.15), dpkg (>= 1.15.0)
+Pre-Depends: libc6 (>= 2.11)
+Description: POSIX-compliant shell
+ The Debian Almquist Shell (dash) is a POSIX-compliant shell derived
+ from ash.
+ .
+ Since it executes scripts faster than bash, and has fewer library
+ dependencies (making it more robust against software or hardware
+ failures), it is used as the default system shell on Debian systems.
+Homepage: http://gondor.apana.org.au/~herbert/dash/
+Original-Maintainer: Gerrit Pape <pape@smarden.org>
+
+Package: libmpfr1ldbl
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 656
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: mpfr
+Version: 2.4.2-3ubuntu1
+Replaces: libmpfr1
+Depends: libgmp3c2 (>= 4.2.dfsg-1), libc6 (>= 2.4)
+Conflicts: libgmp3 (<< 4.1.4-3), libmpfr1
+Description: multiple precision floating-point computation
+ MPFR provides a library for multiple-precision floating-point computation
+ with correct rounding. The computation is both efficient and has a
+ well-defined semantics. It copies the good ideas from the
+ ANSI/IEEE-754 standard for double-precision floating-point arithmetic
+ (53-bit mantissa).
+ .
+ The home page is http://www.mpfr.org/.
+Homepage: http://www.mpfr.org/
+Original-Maintainer: Laurent Fousse <laurent@komite.net>
+
+Package: libxdmcp6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 80
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxdmcp
+Version: 1:1.0.3-1
+Depends: libc6 (>= 2.4)
+Description: X11 Display Manager Control Protocol library
+ This package provides the main interface to the X11 display manager control
+ protocol library, which allows for remote logins to display managers.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXdmcp
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libgl1-mesa-dri
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 37216
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: mesa
+Version: 7.7.1-1ubuntu2
+Replaces: xlibmesa-dri (<< 1:7.0.0)
+Depends: libc6 (>= 2.4), libdrm-intel1 (>= 2.4.15), libdrm-radeon1 (>= 2.4.17), libdrm2 (>= 2.3.1), libexpat1 (>= 1.95.8)
+Suggests: libglide3
+Breaks: libgl1-mesa-glx (<< 7.2), xserver-xorg-core (<< 2:1.5)
+Conflicts: xlibmesa-dri (<< 1:7.0.0)
+Description: A free implementation of the OpenGL API -- DRI modules
+ This version of Mesa provides GLX and DRI capabilities: it is capable of
+ both direct and indirect rendering. For direct rendering, it can use DRI
+ modules from the libgl1-mesa-dri package to accelerate drawing.
+ .
+ This package does not include the OpenGL library itself, only the DRI
+ modules for accelerating direct rendering.
+ .
+ For a complete description of Mesa, please look at the
+ libgl1-mesa-swx11 package.
+ .
+ The tdfx DRI module needs libglide3 to enable direct rendering.
+Homepage: http://mesa3d.sourceforge.net/
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: coreutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 12992
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 7.4-2ubuntu2
+Replaces: mktemp
+Pre-Depends: libacl1 (>= 2.2.11-1), libattr1 (>= 2.4.41-1), libc6 (>= 2.11), libselinux1 (>= 1.32)
+Description: The GNU core utilities
+ This package contains the essential basic system utilities.
+ .
+ Specifically, this package includes:
+ basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir
+ dircolors dirname du echo env expand expr factor false fmt fold groups head
+ hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp
+ mv nice nl nohup od paste pathchk pinky pr printenv printf ptx pwd readlink
+ rm rmdir sha1sum seq shred sleep sort split stat stty sum sync tac tail tee
+ test touch tr true tsort tty uname unexpand uniq unlink users vdir wc who
+ whoami yes
+Original-Maintainer: Michael Stone <mstone@debian.org>
+
+Package: libfreetype6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 796
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: freetype
+Version: 2.3.11-1ubuntu2
+Depends: libc6 (>= 2.4), zlib1g (>= 1:1.1.4)
+Conflicts: freetype, xpdf-reader (<< 1.00-4)
+Description: FreeType 2 font engine, shared library files
+ The FreeType project is a team of volunteers who develop free,
+ portable and high-quality software solutions for digital typography.
+ They specifically target embedded systems and focus on bringing small,
+ efficient and ubiquitous products.
+ .
+ The FreeType 2 library is their new software font engine. It has been
+ designed to provide the following important features:
+ * A universal and simple API to manage font files
+ * Support for several font formats through loadable modules
+ * High-quality anti-aliasing
+ * High portability & performance
+ .
+ Supported font formats include:
+ * TrueType files (.ttf) and collections (.ttc)
+ * Type 1 font files both in ASCII (.pfa) or binary (.pfb) format
+ * Type 1 Multiple Master fonts. The FreeType 2 API also provides
+ routines to manage design instances easily
+ * Type 1 CID-keyed fonts
+ * OpenType/CFF (.otf) fonts
+ * CFF/Type 2 fonts
+ * Adobe CEF fonts (.cef), used to embed fonts in SVG documents with
+ the Adobe SVG viewer plugin.
+ * Windows FNT/FON bitmap fonts
+ .
+ This package contains the files needed to run programs that use the
+ FreeType 2 library.
+ .
+ Home Page: http://www.freetype.org/
+ Authors: David Turner <david.turner@freetype.org>
+ Robert Wilhelm <robert.wilhelm@freetype.org>
+ Werner Lemberg <werner.lemberg@freetype.org>
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: debianutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 228
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 3.2.2
+Depends: sensible-utils
+Pre-Depends: libc6 (>= 2.7)
+Description: Miscellaneous utilities specific to Debian
+ This package provides a number of small utilities which are used
+ primarily by the installation scripts of Debian packages, although
+ you may use them directly.
+ .
+ The specific utilities included are: installkernel run-parts
+ savelog tempfile which.
+Original-Maintainer: Clint Adams <schizo@debian.org>
+
+Package: libxmuu1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 72
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxmu
+Version: 2:1.0.5-1
+Depends: libc6 (>= 2.4), libx11-6
+Description: X11 miscellaneous micro-utility library
+ libXmuu provides a set of miscellaneous utility convenience functions for X
+ libraries to use. It is a lighter version of libXmu that does not depend
+ on libXt or libXext; for more information on libXmu, see libxmu6.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXmu
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: initramfs-tools
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 432
+Maintainer: Ubuntu Kernel Team <kernel-team@lists.ubuntu.com>
+Architecture: all
+Version: 0.92bubuntu78
+Provides: linux-initramfs-tool
+Depends: initramfs-tools-bin (= 0.92bubuntu78), klibc-utils (>= 1.5.9-1), busybox-initramfs (>= 1:1.13.3-1ubuntu5), cpio, module-init-tools, udev (>= 147~-5), findutils (>= 4.2.24), util-linux (>> 2.15~rc1)
+Breaks: mountall (<< 2.0~)
+Conflicts: usplash (<< 0.5.50)
+Conffiles:
+ /etc/initramfs-tools/initramfs.conf eec5dbb69cee0bc2894cbd36b36bb821
+ /etc/initramfs-tools/update-initramfs.conf 25099e2e0961298b2772355149f9810d
+Description: tools for generating an initramfs
+ This package contains tools to create and boot an initramfs for packaged 2.6
+ Linux kernel. The initramfs is a gzipped cpio archive. At boot time, the
+ kernel unpacks that archive into RAM, mounts and uses it as initial root file
+ system. The mounting of the real root file system occurs in early user space.
+ klibc provides utilities to setup root. Having the root on EVMS, MD, LVM2,
+ LUKS or NFS is also supported.
+ Any boot loader with initrd support is able to load an initramfs archive.
+Original-Maintainer: Debian kernel team <debian-kernel@lists.debian.org>
+
+Package: makedev
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 144
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 2.3.1-89ubuntu1
+Depends: base-passwd (>= 3.0.4)
+Conflicts: udev (<= 0.024-7)
+Description: creates device files in /dev
+ The MAKEDEV executable is used to create device files, often in /dev.
+ .
+ Device files are special files through which applications can interact
+ with hardware.
+ .
+ This package is not necessary for most modern Linux systems, where the udev
+ subsystem provides a more dynamic mechanism for device file management.
+Original-Maintainer: Bdale Garbee <bdale@gag.com>
+
+Package: x11-xkb-utils
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 524
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 7.5+1
+Replaces: setxkbmap, xbase-clients (<= 1:7.2.ds2-3), xkbcomp, xkbevd, xkbprint, xkbutils
+Depends: libc6 (>= 2.7), libx11-6, libxaw7, libxkbfile1, libxmu6, libxt6, cpp
+Pre-Depends: x11-common (>= 1:7.0.0)
+Conflicts: setxkbmap, xkbcomp, xkbevd, xkbprint, xkbutils
+Description: X11 XKB utilities
+ xkbutils contains a number of client-side utilities for XKB, the X11
+ keyboard extension.
+ .
+ setxkbmap is a tool to query and change the current XKB map.
+ .
+ xkbbell generates a bell event through the keyboard.
+ .
+ xkbcomp is a tool to compile XKB definitions into map files the server
+ can use.
+ .
+ xkbevd is an experimental tool to listen for certain XKB events and execute
+ defined triggers when actions occur.
+ .
+ xkbprint is a tool to generate an image with the physical representation
+ of the keyboard as XKB sees it.
+ .
+ xkbvleds shows the changing status of keyboard LEDs.
+ .
+ xkbwatch shows the changing status of modifiers and LEDs.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: login
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 2384
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: shadow
+Version: 1:4.1.4.2-1ubuntu2
+Replaces: manpages-de (<< 0.5-3), manpages-tr (<< 1.0.5), manpages-zh (<< 1.5.1-1)
+Pre-Depends: libc6 (>= 2.7), libpam0g (>= 0.99.7.1), libpam-runtime, libpam-modules
+Conflicts: amavisd-new (<< 2.3.3-8), backupninja (<< 0.9.3-5), echolot (<< 2.1.8-4), gnunet (<< 0.7.0c-2), python-4suite (<< 0.99cvs20060405-1)
+Conffiles:
+ /etc/pam.d/login 837d7e3c52c5570b4e48d751cae9f8b0
+ /etc/pam.d/su 7309fb874571fe5447321b43448a50b3
+ /etc/login.defs 182bb938192636c8b62e3d4349de6f72
+ /etc/securetty 0ae2cda1645723f062be3abaf4331747
+Description: system login tools
+ These tools are required to be able to login and use your system. The
+ login program invokes your user shell and enables command execution. The
+ newgrp program is used to change your effective group ID (useful for
+ workgroup type situations). The su program allows changing your effective
+ user ID (useful being able to execute commands as another user).
+Homepage: http://pkg-shadow.alioth.debian.org/
+Original-Maintainer: Shadow package maintainers <pkg-shadow-devel@lists.alioth.debian.org>
+
+Package: gpgv
+Status: install ok installed
+Priority: important
+Section: utils
+Installed-Size: 444
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gnupg
+Version: 1.4.10-2ubuntu1
+Depends: libbz2-1.0, libc6 (>= 2.4), libreadline6, zlib1g (>= 1:1.1.4)
+Suggests: gnupg
+Description: GNU privacy guard - signature verification tool
+ GnuPG is GNU's tool for secure communication and data storage.
+ .
+ gpgv is a stripped-down version of gnupg which is only able to check
+ signatures. It is smaller than the full-blown gnupg and uses a
+ different (and simpler) way to check that the public keys used to
+ make the signature are trustworthy.
+Homepage: http://www.gnupg.org
+Original-Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org>
+
+Package: libgmp3c2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 668
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gmp
+Version: 2:4.3.2+dfsg-1ubuntu1
+Replaces: libgmp3
+Depends: libc6 (>= 2.7)
+Conflicts: libgmp2 (<< 2.0.2-10), libgmp3
+Description: Multiprecision arithmetic library
+ GNU MP is a programmer's library for arbitrary precision
+ arithmetic (ie, a bignum package). It can operate on signed
+ integer, rational, and floating point numeric types.
+ .
+ It has a rich set of functions, and the functions have a regular
+ interface.
+Homepage: http://gmplib.org/
+Original-Maintainer: Debian Scientific Computing Team <pkg-scicomp-devel@lists.alioth.debian.org>
+
+Package: libdbus-1-3
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 348
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: dbus
+Version: 1.2.16-2ubuntu4
+Depends: libc6 (>= 2.4)
+Recommends: dbus
+Conflicts: dbus (<< 0.60)
+Description: simple interprocess messaging system
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ D-Bus supports broadcast messages, asynchronous messages (thus
+ decreasing latency), authentication, and more. It is designed to be
+ low-overhead; messages are sent using a binary protocol, not using
+ XML. D-Bus also supports a method call mapping for its messages, but
+ it is not required; this makes using the system quite simple.
+ .
+ It comes with several bindings, including GLib, Python, Qt and Java.
+ .
+ The daemon can be found in the dbus package.
+Homepage: http://dbus.freedesktop.org/
+Original-Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+
+Package: module-init-tools
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 376
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Architecture: amd64
+Version: 3.11.1-2ubuntu1
+Depends: libc6 (>= 2.8), upstart-job
+Breaks: initramfs-tools (<< 0.92bubuntu23)
+Conffiles:
+ /etc/depmod.d/ubuntu.conf 7c8439ef36b12e5f226b5dbfa20b8c2d
+ /etc/modprobe.d/blacklist-ath_pci.conf d1da9bb08c2b0f56f3be93fd0e37946b
+ /etc/modprobe.d/blacklist-firewire.conf cb8a4c10a5dddd1d67092198b1ae415f
+ /etc/modprobe.d/blacklist-framebuffer.conf b46c9509180b5a76145f08be46b1aff5
+ /etc/modprobe.d/blacklist-watchdog.conf 55327f9270c8a6257a833c4d127a39e1
+ /etc/modprobe.d/blacklist.conf bc6754fa320733c6d239a4bb0148ffd7
+ /etc/init/module-init-tools.conf 48db1b767c3148fd83eba59d12fc9a5e
+Description: tools for managing Linux kernel modules
+ This package contains a set of programs for loading, inserting, and
+ removing kernel modules for Linux (versions 2.5.48 and above).
+
+Package: libgdbm3
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 128
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gdbm
+Version: 1.8.3-9
+Depends: libc6 (>= 2.2.5), dpkg (>= 1.15.4) | install-info
+Description: GNU dbm database routines (runtime version)
+ GNU dbm ('gdbm') is a library of database functions that use extendible
+ hashing and works similarly to the standard UNIX 'dbm' functions.
+ .
+ The basic use of 'gdbm' is to store key/data pairs in a data file, thus
+ providing a persistent version of the 'dictionary' Abstract Data Type
+ ('hash' to perl programmers).
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://directory.fsf.org/project/gdbm/
+
+Package: xserver-xorg-video-v4l
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 136
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.2.0-4
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-v4l
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-v4l
+Description: X.Org X server -- Video 4 Linux display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ uses the Video For Linux interface. It does not provide a graphics chip
+ driver, but instead registers a number of generic Xv adaptors which can be
+ used with any graphics chipset driver.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-v4l driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libgcrypt11
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 560
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.4.4-5ubuntu2
+Depends: libc6 (>= 2.4), libgpg-error0 (>= 1.6)
+Suggests: rng-tools
+Description: LGPL Crypto library - runtime library
+ libgcrypt contains cryptographic functions. Many important free
+ ciphers, hash algorithms and public key signing algorithms have been
+ implemented:
+ arcfour, blowfish, cast5, DSA, DSA2, des, 3DES, elgamal, MD5, rijndael,
+ RMD160, RSA, SEED, SHA1, SHA-384, SHA-512, twofish, tiger.
+Homepage: http://directory.fsf.org/project/libgcrypt/
+Original-Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+
+Package: xserver-xorg-video-sis
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 664
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.10.2-2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-sis
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-sis
+Description: X.Org X server -- SiS display driver
+ This package provides the driver for all SiS and XGI Volari cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-sis driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxinerama1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 68
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxinerama
+Version: 2:1.1-2
+Depends: libc6 (>= 2.2.5), libx11-6, libxext6
+Description: X11 Xinerama extension library
+ libXinerama provides an X Window System client interface to the XINERAMA
+ extension to the X protocol.
+ .
+ The Xinerama (also known as panoramiX) extension allows for multiple screens
+ attached to a single display to be treated as belonging together, and to give
+ desktop applications a better idea of the monitor layout.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXinerama
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: lzma
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 172
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 4.43-14ubuntu2
+Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0)
+Description: Compression method of 7z format in 7-Zip program
+ LZMA is a compression algorithm, based on the famous Lempel Ziv
+ compression method.
+ .
+ The main characteristics of the algorithm are very good compression,
+ fast decompression, use of lot of RAM for compression and low usage of
+ RAM for decompression.
+ .
+ LZMA provides high compression ratio and very fast decompression, so it
+ is very suitable for embedded applications. For example, it can be used
+ for ROM (firmware) compression.
+ .
+ This package provides a gzip-like interface for the lzma program.
+Homepage: http://www.7-zip.org/sdk.htm
+Original-Maintainer: Mohammed Adnène Trojette <adn+deb@diwi.org>
+
+Package: libuuid1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 120
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: util-linux
+Version: 2.17.2-0ubuntu1
+Replaces: e2fsprogs (<< 1.34-1)
+Depends: passwd, libc6 (>= 2.4)
+Recommends: uuid-runtime
+Description: Universally Unique ID library
+ The libuuid library generates and parses 128-bit universally unique
+ ids (UUIDs). A UUID is an identifier that is unique across both
+ space and time, with respect to the space of all UUIDs. A UUID can
+ be used for multiple purposes, from tagging objects with an extremely
+ short lifetime, to reliably identifying very persistent objects
+ across a network.
+ .
+ See RFC 4122 for more information.
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: libtasn1-3
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 144
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2.4-1
+Depends: libc6 (>= 2.4)
+Conflicts: libtasn1-2 (= 0.3.1-1)
+Description: Manage ASN.1 structures (runtime)
+ Manage ASN1 (Abstract Syntax Notation One) structures.
+ The main features of this library are:
+ * on-line ASN1 structure management that doesn't require any C code
+ file generation.
+ * off-line ASN1 structure management with C code file generation
+ containing an array.
+ * DER (Distinguish Encoding Rules) encoding
+ * no limits for INTEGER and ENUMERATED values
+ .
+ This package contains runtime libraries.
+Original-Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Homepage: http://www.gnu.org/software/libtasn1/
+
+Package: lsb-base
+Status: install ok installed
+Priority: required
+Section: misc
+Installed-Size: 84
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: lsb
+Version: 4.0-0ubuntu8
+Replaces: lsb (<< 2.0-6), lsb-core (<< 2.0-6)
+Depends: sed, ncurses-bin
+Conflicts: lsb (<< 2.0-6), lsb-core (<< 2.0-6)
+Conffiles:
+ /etc/lsb-base-logging.sh 5126106e3af09b522cdbd5e4685942af
+Description: Linux Standard Base 4.0 init script functionality
+ The Linux Standard Base (http://www.linuxbase.org/) is a standard
+ core system that third-party applications written for Linux can
+ depend upon.
+ .
+ This package only includes the init-functions shell library, which
+ may be used by other packages' initialization scripts for console
+ logging and other purposes.
+Homepage: http://www.linux-foundation.org/en/LSB
+Original-Maintainer: Chris Lawrence <lawrencc@debian.org>
+
+Package: libcurl3-gnutls
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 440
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: curl
+Version: 7.19.7-1ubuntu1
+Replaces: libcurl4-gnutls
+Depends: libc6 (>= 2.7), libgcrypt11 (>= 1.4.2), libgnutls26 (>= 2.7.14-0), libgssapi-krb5-2 (>= 1.7dfsg~beta1), libidn11 (>= 1.13), libldap-2.4-2 (>= 2.4.7), zlib1g (>= 1:1.1.4), ca-certificates
+Conflicts: libcurl4-gnutls
+Description: Multi-protocol file transfer library (GnuTLS)
+ libcurl is designed to be a solid, usable, reliable and portable
+ multi-protocol file transfer library.
+ .
+ SSL support is provided by GnuTLS.
+ .
+ This is the shared version of libcurl.
+Homepage: http://curl.haxx.se
+Original-Maintainer: Domenico Andreoli <cavok@debian.org>
+
+Package: cpp-4.4
+Status: install ok installed
+Priority: optional
+Section: interpreters
+Installed-Size: 9828
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gcc-4.4
+Version: 4.4.3-4ubuntu5
+Depends: gcc-4.4-base (= 4.4.3-4ubuntu5), libc6 (>= 2.11), libgmp3c2, libmpfr1ldbl
+Suggests: gcc-4.4-locales (>= 4.4.3-1)
+Description: The GNU C preprocessor
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: procps
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 808
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:3.2.8-1ubuntu4
+Replaces: bsdutils (<< 2.9x-1), watch
+Provides: watch
+Depends: libc6 (>= 2.4), libncurses5 (>= 5.6+20071006-3), upstart-job, lsb-base (>= 3.0-10)
+Recommends: psmisc
+Conflicts: libproc-dev (<< 1:1.2.6-2), pgrep (<< 3.3-5), procps-nonfree, w-bassman (<< 1.0-3), watch
+Conffiles:
+ /etc/sysctl.d/10-console-messages.conf 154f6f5c5810d10bb303fb6a8e907c6a
+ /etc/sysctl.d/10-network-security.conf 4ac7258f5336e7eeaf448c05ab668d3c
+ /etc/sysctl.d/10-zeropage.conf 8d7193abcc4dfedaf519dd03016a5e59
+ /etc/sysctl.d/README c20074b9b11a5202758c69d7bcb6996f
+ /etc/sysctl.conf 86b831bbed0a49bc7361ed64d6c09435
+ /etc/init/procps.conf 72d5354efb1017283c440cf102b5d74a
+Description: /proc file system utilities
+ These are utilities to browse the /proc filesystem, which is not a real file
+ system but a way for the kernel to provide information about the status of
+ entries in its process table. (e.g. running, stopped or "zombie")
+ Both command line and full screen utilities are provided. Ncurses is needed
+ for the full screen utilities. More information can be found at procps
+ website http://procps.sf.net/
+ .
+ This package includes the following utilities: top, uptime, tload,
+ free, vmstat, watch, skill, pmap, pgrep, slabtop and pwdx.
+Original-Maintainer: Craig Small <csmall@debian.org>
+
+Package: libgssapi-krb5-2
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 312
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: krb5
+Version: 1.8.1+dfsg-2
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.7), libcomerr2 (>= 1.34), libk5crypto3 (>= 1.8+dfsg), libkeyutils1, libkrb5-3 (= 1.8.1+dfsg-2), libkrb5support0 (>= 1.7dfsg~beta2)
+Suggests: krb5-doc, krb5-user
+Description: MIT Kerberos runtime libraries - krb5 GSS-API Mechanism
+ Kerberos is a system for authenticating users and services on a network.
+ Kerberos is a trusted third-party service. That means that there is a
+ third party (the Kerberos server) that is trusted by all the entities on
+ the network (users and services, usually called "principals").
+ .
+ This is the MIT reference implementation of Kerberos V5.
+ .
+ This package contains the runtime library for the MIT Kerberos
+ implementation of GSS-API used by applications and Kerberos clients.
+Original-Maintainer: Sam Hartman <hartmans@debian.org>
+Homepage: http://web.mit.edu/kerberos/
+
+Package: python-minimal
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: python
+Installed-Size: 120
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: python-defaults
+Version: 2.6.5-0ubuntu1
+Replaces: python (<= 2.4-1)
+Depends: python2.6-minimal (>= 2.6.5), dpkg (>= 1.13.20)
+Recommends: python
+Conflicts: python (<= 2.4-1), python-central (<< 0.5.5)
+Description: A minimal subset of the Python language (default version)
+ This package contains the interpreter and some essential modules. It's used
+ in the boot process for some basic tasks.
+ See /usr/share/doc/python2.6-minimal/README.Debian for a list of the modules
+ contained in this package.
+Original-Maintainer: Matthias Klose <doko@debian.org>
+
+Package: ncurses-base
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 488
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: ncurses
+Version: 5.7+20090803-2ubuntu3
+Replaces: ncurses-term
+Provides: ncurses-runtime
+Depends: libncurses5
+Conflicts: ncurses, ncurses-runtime
+Conffiles:
+ /etc/terminfo/README 9d086188afcd9479ae96ff55dd6c1573
+Description: basic terminal type definitions
+ This package contains terminfo data files to support the most common types of
+ terminal, including ansi, dumb, linux, rxvt, screen, sun, vt100, vt102, vt220,
+ vt52, and xterm.
+Homepage: ftp://invisible-island.net/ncurses/
+Original-Maintainer: Debian QA Group <packages@qa.debian.org>
+
+Package: libpam0g
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 272
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: pam
+Version: 1.1.1-2ubuntu2
+Replaces: libpam0g-util
+Depends: libc6 (>= 2.8), debconf (>= 0.5) | debconf-2.0
+Suggests: libpam-doc
+Description: Pluggable Authentication Modules library
+ Contains the C shared library for Linux-PAM, a suite of shared
+ libraries that enable the local system administrator to choose how
+ applications authenticate users. In other words, without rewriting
+ or recompiling a PAM-aware application, it is possible to switch
+ between the authentication mechanism(s) it uses. One may entirely
+ upgrade the local authentication system without touching the
+ applications themselves.
+Homepage: http://pam.sourceforge.net/
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: libusb-0.1-4
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 100
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libusb
+Version: 2:0.1.12-14
+Replaces: libusb0
+Depends: libc6 (>= 2.4)
+Conflicts: libccid (<< 0.9.2-3), libusb0
+Description: userspace USB programming library
+ Library for programming USB applications without the knowledge
+ of Linux kernel internals.
+Original-Maintainer: Aurelien Jarno <aurel32@debian.org>
+Homepage: http://www.linux-usb.org/
+
+Package: libgpg-error0
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 236
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libgpg-error
+Version: 1.6-1ubuntu2
+Depends: libc6 (>= 2.2.5)
+Description: library for common error values and messages in GnuPG components
+ Library that defines common error values for all GnuPG
+ components. Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt,
+ pinentry, SmartCard Daemon and possibly more in the future.
+Original-Maintainer: Jose Carlos Garcia Sogo <jsogo@debian.org>
+
+Package: ucf
+Status: install ok installed
+Priority: standard
+Section: utils
+Installed-Size: 260
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 3.0025
+Depends: debconf (>= 1.5.19), coreutils (>= 5.91)
+Conffiles:
+ /etc/ucf.conf 5565b8b26108c49ba575ba452cd69b3e
+Description: Update Configuration File: preserve user changes to config files.
+ Debian policy mandates that user changes to configuration files must be
+ preserved during package upgrades. The easy way to achieve this behavior
+ is to make the configuration file a 'conffile', in which case dpkg
+ handles the file specially during upgrades, prompting the user as
+ needed.
+ .
+ This is appropriate only if it is possible to distribute a default
+ version that will work for most installations, although some system
+ administrators may choose to modify it. This implies that the
+ default version will be part of the package distribution, and must
+ not be modified by the maintainer scripts during installation (or at
+ any other time).
+ .
+ This script attempts to provide conffile-like handling for files that
+ may not be labelled conffiles, and are not shipped in a Debian package,
+ but handled by the postinst instead. This script allows one to
+ maintain files in /etc, preserving user changes and in general
+ offering the same facilities while upgrading that dpkg normally
+ provides for 'conffiles'.
+ .
+ Additionally, this script provides facilities for transitioning a
+ file that had not been provided with conffile-like protection to come
+ under this schema, and attempts to minimize questions asked at
+ installation time. Indeed, the transitioning facility is better than the
+ one offered by dpkg while transitioning a file from a non-conffile to
+ conffile status.
+Original-Maintainer: Manoj Srivastava <srivasta@debian.org>
+
+Package: perl-modules
+Status: deinstall ok config-files
+Priority: standard
+Section: perl
+Installed-Size: 15848
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: perl
+Version: 5.10.1-8ubuntu2
+Config-Version: 5.10.1-8ubuntu2
+Replaces: libansicolor-perl, libarchive-tar-perl, libattribute-handlers-perl, libautodie-perl, libcgi-pm-perl, libcpanplus-perl, libextutils-cbuilder-perl, libextutils-parsexs-perl, libfile-temp-perl, libi18n-langtags-perl, libio-zlib-perl, liblocale-codes-perl, liblocale-maketext-perl, liblocale-maketext-simple-perl, libmath-bigint-perl, libmodule-build-perl, libmodule-corelist-perl, libmodule-load-conditional-perl, libmodule-load-perl, libmodule-pluggable-perl, libnet-perl, libnet-ping-perl, libparams-check-perl, libparent-perl, libparse-cpan-meta-perl, libpod-escapes-perl, libpod-parser-perl, libpod-simple-perl, libtest-harness-perl, libtest-simple-perl, libthread-queue-perl, libversion-perl, podlators-perl
+Provides: libansicolor-perl, libarchive-tar-perl, libattribute-handlers-perl, libautodie-perl, libcgi-pm-perl, libcpanplus-perl, libextutils-cbuilder-perl, libextutils-parsexs-perl, libfile-temp-perl, libi18n-langtags-perl, libio-zlib-perl, liblocale-codes-perl, liblocale-maketext-perl, liblocale-maketext-simple-perl, libmath-bigint-perl, libmodule-build-perl, libmodule-corelist-perl, libmodule-load-conditional-perl, libmodule-load-perl, libmodule-pluggable-perl, libnet-perl, libnet-ping-perl, libparams-check-perl, libparent-perl, libparse-cpan-meta-perl, libpod-escapes-perl, libpod-parser-perl, libpod-simple-perl, libtest-harness-perl, libtest-simple-perl, libthread-queue-perl, libversion-perl, podlators-perl
+Depends: perl (>= 5.10.1-1)
+Conflicts: libansicolor-perl (<< 1.10-1), libarchive-tar-perl (<< 1.52), libattribute-handlers-perl (<< 0.85), libautodie-perl (<< 2.06.01), libcgi-pm-perl (<< 3.43), libcpanplus-perl (<< 0.88), libextutils-cbuilder-perl (<< 0.2602), libextutils-parsexs-perl (<< 2.2002), libfile-temp-perl (<< 0.22), libi18n-langtags-perl (<< 0.35-1), libio-zlib-perl (<< 1.09), liblocale-codes-perl (<< 2.07), liblocale-maketext-perl (<< 1.13), liblocale-maketext-simple-perl (<< 0.18-1), libmath-bigint-perl (<< 1.89), libmodule-build-perl (<< 0.340201), libmodule-corelist-perl (<< 2.18), libmodule-load-conditional-perl (<< 0.30), libmodule-load-perl (<< 0.16), libmodule-pluggable-perl (<< 3.9), libnet-perl (<= 1:1.19-3), libnet-ping-perl (<< 2.36), libparams-check-perl (<< 0.26-1), libparent-perl (<< 0.221), libparse-cpan-meta-perl (<< 1.39), libpod-escapes-perl (<< 1.04), libpod-parser-perl (<< 1.37), libpod-simple-perl (<< 3.07), libtest-harness-perl (<< 3.17), libtest-simple-perl (<< 0.92), libthread-queue-perl (<< 2.11), libversion-perl (<< 1:0.7700), podlators-perl (<= 2.2.2-1)
+Conffiles:
+ /etc/perl/Net/libnet.cfg fb2946cae573b8ed3d654a180d458733
+Description: Core Perl modules
+ Architecture independent Perl modules. These modules are part of Perl and
+ required if the `perl' package is installed.
+Original-Maintainer: Niko Tyni <ntyni@debian.org>
+
+Package: bsdutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 208
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: util-linux (2.17.2-0ubuntu1)
+Version: 1:2.17.2-0ubuntu1
+Depends: libc6 (>= 2.7)
+Recommends: bsdmainutils
+Description: Basic utilities from 4.4BSD-Lite
+ This package contains the bare minimum number of BSD utilities needed
+ to boot a Debian system: logger, renice, script, scriptreplay, and wall.
+ The remaining standard BSD utilities are provided by bsdmainutils.
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: xserver-xorg-video-apm
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 216
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.2.2-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-apm
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-apm
+Description: X.Org X server -- APM display driver
+ This package provides the driver for the Alliance Pro Motion family
+ of video cards; specifically, the 6420, 6422, AT24, AT25, and AT3D
+ cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-apm driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: sensible-utils
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 108
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 0.0.1ubuntu3
+Replaces: debianutils (<= 2.32.3)
+Description: Utilities for sensible alternative selection
+ This package provides a number of small utilities which are used
+ by programs to sensibly select and spawn an appropriate browser,
+ editor, or pager.
+ .
+ The specific utilities included are: select-editor sensible-browser
+ sensible-editor sensible-pager
+Original-Maintainer: Clint Adams <schizo@debian.org>
+
+Package: xserver-xorg-video-voodoo
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 108
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.2.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-voodoo
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-voodoo
+Description: X.Org X server -- Voodoo display driver
+ This package provides the driver for 3dfx Voodoo1 and Voodoo2 chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-voodoo driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxkbfile1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 204
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxkbfile
+Version: 1:1.0.6-1
+Depends: libc6 (>= 2.7), libx11-6
+Description: X11 keyboard file manipulation library
+ libxkbfile provides an interface to read and manipulate description files for
+ XKB, the X11 keyboard configuration extension.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libxkbfile
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: dpkg-dev
+Status: deinstall ok config-files
+Priority: optional
+Section: utils
+Installed-Size: 2068
+Origin: debian
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Bugs: debbugs://bugs.debian.org
+Architecture: all
+Source: dpkg
+Version: 1.15.5.6ubuntu4
+Config-Version: 1.15.5.6ubuntu4
+Replaces: manpages-pl (<= 20051117-1)
+Depends: dpkg (>= 1.15.4), perl5, perl-modules, bzip2, lzma, xz-utils, patch (>= 2.2-1), make, binutils, libtimedate-perl, base-files (>= 5.0.0)
+Recommends: gcc | c-compiler, build-essential, fakeroot, gnupg, gpgv
+Suggests: debian-keyring, debian-maintainers
+Conflicts: devscripts (<< 2.10.26), dpkg-cross (<< 2.0.0)
+Conffiles:
+ /etc/dpkg/shlibs.default 1a2b9d0a869e2aa885ae3621c557fb95
+ /etc/dpkg/shlibs.override 84b1e69080569cc5c613a50887af5200
+Description: Debian package development tools
+ This package provides the development tools (including dpkg-source)
+ required to unpack, build and upload Debian source packages.
+ .
+ Most Debian source packages will require additional tools to build;
+ for example, most packages need make and the C compiler gcc.
+Homepage: http://wiki.debian.org/Teams/Dpkg
+Original-Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+
+Package: xserver-xorg-video-s3virge
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 160
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.10.4-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-s3virge
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-s3virge
+Description: X.Org X server -- S3 ViRGE display driver
+ This package provides the driver for the S3 ViRGE and Trio3D family
+ of chipsets. It does not support Trio64 or S3 96x cards; support for
+ these can be found in the xserver-xorg-video-s3 package. Support for
+ S3 Savage chipsets can be found in xserver-xorg-video-savage.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-s3virge driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libssl0.9.8
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 2332
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: openssl
+Version: 0.9.8k-7ubuntu8
+Depends: libc6 (>= 2.7), zlib1g (>= 1:1.1.4), debconf (>= 0.5) | debconf-2.0
+Conflicts: libssl, libssl096-dev (<< 0.9.6-2), openssl (<< 0.9.6-2), ssleay (<< 0.9.2b)
+Description: SSL shared libraries
+ libssl and libcrypto shared libraries needed by programs like
+ apache-ssl, telnet-ssl and openssh.
+ .
+ It is part of the OpenSSL implementation of SSL.
+Original-Maintainer: Debian OpenSSL Team <pkg-openssl-devel@lists.alioth.debian.org>
+
+Package: bzip2
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 160
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.0.5-4
+Replaces: libbz2 (<< 0.9.5d-3)
+Depends: libbz2-1.0 (= 1.0.5-4), libc6 (>= 2.4)
+Suggests: bzip2-doc
+Description: high-quality block-sorting file compressor - utilities
+ bzip2 is a freely available, patent free, high-quality data compressor.
+ It typically compresses files to within 10% to 15% of the best available
+ techniques, whilst being around twice as fast at compression and six
+ times faster at decompression.
+ .
+ bzip2 compresses files using the Burrows-Wheeler block-sorting text
+ compression algorithm, and Huffman coding. Compression is generally
+ considerably better than that achieved by more conventional
+ LZ77/LZ78-based compressors, and approaches the performance of the PPM
+ family of statistical compressors.
+ .
+ The archive file format of bzip2 (.bz2) is incompatible with that of its
+ predecessor, bzip (.bz).
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://www.bzip.org/
+
+Package: vim-common
+Status: install ok installed
+Priority: important
+Section: editors
+Installed-Size: 380
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: vim
+Version: 2:7.2.330-1ubuntu3
+Depends: libc6 (>= 2.4)
+Recommends: vim | vim-gnome | vim-gtk | vim-lesstif | vim-nox | vim-tiny
+Conffiles:
+ /etc/vim/vimrc e8793640eb83ade46e2d452bcf62e7e3
+Description: Vi IMproved - Common files
+ Vim is an almost compatible version of the UNIX editor Vi.
+ .
+ Many new features have been added: multi level undo, syntax
+ highlighting, command line history, on-line help, filename
+ completion, block operations, folding, Unicode support, etc.
+ .
+ This package contains files shared by all non GUI-enabled vim
+ variants (vim and vim-tiny currently) available in Debian.
+ Examples of such shared files are: manpages, common executables
+ like xxd, and configuration files.
+Homepage: http://www.vim.org/
+Original-Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+
+Package: openssl
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 844
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 0.9.8k-7ubuntu8
+Depends: libc6 (>= 2.7), libssl0.9.8 (>= 0.9.8k-1), zlib1g (>= 1:1.1.4)
+Suggests: ca-certificates, openssl-doc
+Conflicts: ssleay (<< 0.9.2b)
+Conffiles:
+ /etc/ssl/openssl.cnf 0b1cf9a835b829131d630b7c2fe55f3c
+Description: Secure Socket Layer (SSL) binary and related cryptographic tools
+ This package contains the openssl binary and related tools.
+ .
+ It is part of the OpenSSL implementation of SSL.
+ .
+ You need it to perform certain cryptographic actions like:
+ - Creation of RSA, DH and DSA key parameters;
+ - Creation of X.509 certificates, CSRs and CRLs;
+ - Calculation of message digests;
+ - Encryption and decryption with ciphers;
+ - SSL/TLS client and server tests;
+ - Handling of S/MIME signed or encrypted mail.
+Original-Maintainer: Debian OpenSSL Team <pkg-openssl-devel@lists.alioth.debian.org>
+
+Package: ncurses-bin
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 520
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: ncurses
+Version: 5.7+20090803-2ubuntu3
+Provides: tput
+Pre-Depends: libc6 (>= 2.4), libncurses5 (>= 5.6+20071006-3)
+Conflicts: ncurses, tput
+Description: terminal-related programs and man pages
+ This package contains the programs used for manipulating the terminfo
+ database and individual terminfo entries, as well as some programs for
+ resetting terminals and such.
+Homepage: ftp://invisible-island.net/ncurses/
+Original-Maintainer: Debian QA Group <packages@qa.debian.org>
+
+Package: perl-base
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 4900
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: perl
+Version: 5.10.1-8ubuntu2
+Replaces: libperl5.8 (<< 5.8.0-20), libscalar-list-utils-perl, libxsloader-perl, perl (<= 5.10.0-9), perl-modules (<< 5.10.1-1)
+Provides: libscalar-list-utils-perl, libxsloader-perl, perl5-base, perlapi-5.10.0, perlapi-5.10.1
+Pre-Depends: libc6 (>= 2.11), dpkg (>= 1.14.20)
+Suggests: perl
+Breaks: doc-base (<< 0.8.16)
+Conflicts: autoconf2.13 (<< 2.13-45), libscalar-list-utils-perl (<< 1:1.18-1), libxsloader-perl (<< 0.08-1), safe-rm (<< 0.8)
+Description: minimal Perl system
+ Perl is a scripting language used in many system scripts and utilities.
+ .
+ This package provides a Perl interpreter and the small subset of the
+ standard run-time library required to perform basic tasks. For a full
+ Perl installation, install "perl" (and its dependencies, "perl-modules"
+ and "perl-doc").
+Original-Maintainer: Niko Tyni <ntyni@debian.org>
+
+Package: sysv-rc
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 288
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: sysvinit
+Version: 2.87dsf-4ubuntu17
+Replaces: file-rc
+Depends: debconf | debconf-2.0, sysvinit-utils (>= 2.86.ds1-62), insserv (>> 1.12.0-10)
+Recommends: lsb-base (>= 3.2-14)
+Suggests: sysv-rc-conf, bum
+Breaks: initscripts (<< 2.86.ds1-63)
+Conflicts: file-rc
+Description: System-V-like runlevel change mechanism
+ This package provides support for the System-V like system
+ for booting, shutting down and changing runlevels,
+ configured through symbolic links in /etc/rc?.d/.
+Homepage: http://freshmeat.net/projects/sysvinit/
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+
+Package: apt
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 5488
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 0.7.25.3ubuntu7
+Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7)
+Provides: libapt-pkg-libc6.10-6-4.8
+Depends: libc6 (>= 2.8), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0)
+Recommends: ubuntu-keyring
+Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
+Conffiles:
+ /etc/apt/apt.conf.d/01autoremove 6154750d39a78704b5bbf6fafd65ada7
+ /etc/apt/apt.conf.d/01ubuntu 078b96538a377743bee0f554eb5b2fc6
+ /etc/logrotate.d/apt 179f2ed4f85cbaca12fa3d69c2a4a1c3
+ /etc/cron.daily/apt 3528ddf873535d4c268d83e73e85dc79
+Description: Advanced front-end for dpkg
+ This is Debian's next generation front-end for the dpkg package manager.
+ It provides the apt-get utility and APT dselect method that provides a
+ simpler, safer way to install and upgrade packages.
+ .
+ APT features complete installation ordering, multiple source capability
+ and several other unique features, see the Users Guide in apt-doc.
+Original-Maintainer: APT Development Team <deity@lists.debian.org>
+
+Package: xserver-xorg-core
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 4872
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: xorg-server
+Version: 2:1.7.6-2ubuntu7
+Replaces: xserver-common (<< 7), xserver-xfree86 (<< 1:7.0.0), xserver-xorg (<< 6.8.2-38)
+Provides: xserver
+Depends: xserver-common (>= 2:1.7.6-2ubuntu7), xserver-xorg, udev (>= 149), libc6 (>= 2.7), libdrm2 (>= 2.3.1), libgcrypt11 (>= 1.4.2), libpciaccess0 (>= 0.10.7), libpixman-1-0 (>= 0.15.16), libudev0 (>= 147), libxau6, libxdmcp6, libxfont1 (>= 1:1.2.9)
+Recommends: libgl1-mesa-dri (>= 7.1~rc1)
+Suggests: xfonts-100dpi | xfonts-75dpi, xfonts-scalable
+Conflicts: xserver-common (<< 7), xserver-xfree86 (<< 1:7.0.0), xserver-xorg (<< 6.8.2-38), xserver-xorg-input, xserver-xorg-input-2, xserver-xorg-input-2.1, xserver-xorg-input-4, xserver-xorg-input-wacom (<< 0.7.8), xserver-xorg-video, xserver-xorg-video-1.0, xserver-xorg-video-1.9, xserver-xorg-video-2, xserver-xorg-video-4, xserver-xorg-video-5
+Description: Xorg X server - core server
+ The Xorg X server is an X server for several architectures and operating
+ systems, which is derived from the XFree86 4.x series of X servers.
+ .
+ The Xorg server supports most modern graphics hardware from most vendors,
+ and supersedes all XFree86 X servers.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xserver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libk5crypto3
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 252
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: krb5
+Version: 1.8.1+dfsg-2
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.4), libkeyutils1, libkrb5support0 (>= 1.7dfsg~beta2)
+Suggests: krb5-doc, krb5-user
+Breaks: libgssapi-krb5-2 (<= 1.8~aa), libkrb5-3 (<= 1.8~aa)
+Description: MIT Kerberos runtime libraries - Crypto Library
+ Kerberos is a system for authenticating users and services on a network.
+ Kerberos is a trusted third-party service. That means that there is a
+ third party (the Kerberos server) that is trusted by all the entities on
+ the network (users and services, usually called "principals").
+ .
+ This is the MIT reference implementation of Kerberos V5.
+ .
+ This package contains the runtime cryptography libraries used by
+ applications and Kerberos clients.
+Original-Maintainer: Sam Hartman <hartmans@debian.org>
+Homepage: http://web.mit.edu/kerberos/
+
+Package: netbase
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 100
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 4.35ubuntu3
+Depends: lsb-base (>= 3.0-6), upstart-job
+Recommends: ifupdown
+Conflicts: inetutils-inetd (<< 2:1.4.3+20060719-3), openbsd-inetd (<< 0.20050402-3)
+Conffiles:
+ /etc/protocols 3aaa310b088fa84233d7fb2e358d4d29
+ /etc/rpc f0b6f6352bf886623adc04183120f83b
+ /etc/services b6a26fbe90d859f7c8600d5941262921
+ /etc/init.d/networking db7e515f04f04f54708b5ea862585c31
+Description: Basic TCP/IP networking system
+ This package provides the necessary infrastructure for basic TCP/IP based
+ networking.
+Original-Maintainer: Marco d'Itri <md@linux.it>
+
+Package: libdrm2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 480
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.18-1ubuntu3
+Depends: libc6 (>= 2.7)
+Description: Userspace interface to kernel DRM services -- runtime
+ This library implements the userspace interface to the kernel DRM
+ services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI).
+ The DRI is currently used on Linux to provide hardware-accelerated
+ OpenGL drivers.
+ .
+ This package provides the runtime environment for libdrm.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-openchrome
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 588
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.2.904+svn827-1
+Replaces: libchromexvmc1, libchromexvmcpro1
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), libdrm2 (>= 2.3.1), libx11-6 (>= 0), libxext6 (>= 0), libxv1, libxvmc1, xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: libchromexvmc1, libchromexvmcpro1
+Description: X.Org X server -- VIA display driver
+ OpenChrome is a project for the development of free and open-source drivers
+ for the VIA UniChrome video chipsets.
+ .
+ Originally called the 'snapshot' release, since it was a snapshot of an
+ experimental branch of the unichrome cvs code, this is a continued development
+ of the open source unichrome driver (from http://unichrome.sf.net) which
+ also incorporates support for the unichrome-pro chipsets.
+ .
+ Support for hardware acceleration (XvMC) for all chipsets has subsequently
+ been ripped out of the unichrome.sf.net driver. Therefore your only option if
+ you wish to make use of the acceleration features of your VIA chip with free
+ and open-source drivers is to use this version of the driver.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Homepage: http://www.openchrome.org
+
+Package: libxapian15
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 1644
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: xapian-core
+Version: 1.0.18-1
+Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0), zlib1g (>= 1:1.1.4)
+Suggests: xapian-tools
+Conflicts: libxapian2
+Description: Search engine library
+ This package contains the core Xapian runtime library.
+ .
+ The Xapian search engine library is a highly adaptable toolkit which allows
+ developers to easily add advanced indexing and search facilities to their own
+ applications. It implements the probabilistic model of information retrieval,
+ and provides facilities for performing ranked free-text searches, relevance
+ feedback, phrase searching, boolean searching, stemming, and simultaneous
+ update and searching. It is highly scalable, and is capable of working with
+ collections containing hundreds of millions of documents.
+Original-Maintainer: Olly Betts <olly@survex.com>
+Homepage: http://xapian.org/
+
+Package: libsepol1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 328
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libsepol
+Version: 2.0.40-2
+Depends: libc6 (>= 2.4)
+Description: SELinux library for manipulating binary security policies
+ Security-enhanced Linux is a patch of the Linux kernel and a number
+ of utilities with enhanced security functionality designed to add
+ mandatory access controls to Linux. The Security-enhanced Linux
+ kernel contains new architectural components originally developed to
+ improve the security of the Flask operating system. These
+ architectural components provide general support for the enforcement
+ of many kinds of mandatory access control policies, including those
+ based on the concepts of Type Enforcement®, Role-based Access
+ Control, and Multi-level Security.
+ .
+ libsepol provides an API for the manipulation of SELinux binary policies.
+ It is used by checkpolicy (the policy compiler) and similar tools, as well
+ as by programs like load_policy that need to perform specific transformations
+ on binary policies such as customizing policy boolean settings.
+Original-Maintainer: Manoj Srivastava <srivasta@debian.org>
+
+Package: libpam-modules
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 1196
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: pam
+Version: 1.1.1-2ubuntu2
+Replaces: libpam-umask, libpam0g-util
+Provides: libpam-mkhomedir, libpam-motd, libpam-umask
+Depends: base-files (>= 5.0.0ubuntu6)
+Pre-Depends: libc6 (>= 2.8), libdb4.8, libpam0g (>= 1.1.0), libselinux1 (>= 2.0.85), debconf (>= 0.5) | debconf-2.0
+Conflicts: libpam-mkhomedir, libpam-motd, libpam-umask
+Conffiles:
+ /etc/security/access.conf 13ec4d189f0ed9acf3433977a53d446b
+ /etc/security/group.conf 5a6bd21801df034da8d64b407470e8f6
+ /etc/security/limits.conf cbacdff4aa5f51749f191b32754946cb
+ /etc/security/namespace.conf c600fa5899cfb3198a01dfba2bf281f3
+ /etc/security/namespace.init 114e73ed5f40956527286e6213d305bc
+ /etc/security/pam_env.conf ed3f430e418ad366ddb23307a8755249
+ /etc/security/sepermit.conf d41c74654734a5c069a37bfc02f0a6d4
+ /etc/security/time.conf c23fcbb29dda6c1499e6a5e5ade0265e
+Description: Pluggable Authentication Modules for PAM
+ This package completes the set of modules for PAM. It includes the
+ pam_unix_*.so module as well as some specialty modules.
+Homepage: http://pam.sourceforge.net/
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: xserver-xorg-video-vmware
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 140
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:10.16.9-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-vmware
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-vmware
+Description: X.Org X server -- VMware display driver
+ This package provides the driver for VMware client sessions, i.e. if Linux
+ is running inside a VMware session.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-vmware driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: tzdata
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 6276
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 2010i-1
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Provides: tzdata-squeeze
+Depends: debconf (>= 0.5) | debconf-2.0
+Description: time zone and daylight-saving time data
+ This package contains data required for the implementation of
+ standard local time for many representative locations around the
+ globe. It is updated periodically to reflect changes made by
+ political bodies to time zone boundaries, UTC offsets, and
+ daylight-saving rules.
+Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+
+Package: libudev0
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 196
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Architecture: amd64
+Source: udev
+Version: 151-12
+Depends: libc6 (>= 2.4)
+Description: udev library
+ libudev provides a set of functions for accessing the udev database
+ and querying sysfs.
+
+Package: libfontconfig1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 444
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: fontconfig
+Version: 2.8.0-2ubuntu1
+Provides: libfontconfig
+Depends: libc6 (>= 2.7), libexpat1 (>= 1.95.8), libfreetype6 (>= 2.2.1), zlib1g (>= 1:1.1.4), fontconfig-config (= 2.8.0-2ubuntu1)
+Description: generic font configuration library - runtime
+ Fontconfig is a font configuration and customization library, which
+ does not depend on the X Window System. It is designed to locate
+ fonts within the system and select them according to requirements
+ specified by applications.
+ .
+ This package contains the runtime library needed to launch applications
+ using fontconfig.
+Original-Maintainer: Keith Packard <keithp@debian.org>
+
+Package: xserver-xorg-input-wacom
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 264
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: xf86-input-wacom
+Version: 1:0.10.5-0ubuntu4
+Replaces: wacom-tools (<= 1:0.8.4.1-0ubuntu4)
+Provides: xserver-xorg-input-7
+Depends: xserver-xorg-core (>= 2:1.6.99.900), libc6 (>= 2.7), libx11-6 (>= 0), libxi6 (>= 2:1.2.0)
+Suggests: xinput
+Conflicts: wacom-tools (<= 1:0.8.4.1-0ubuntu4)
+Description: X.Org X server -- Wacom input driver
+ This package provides the X.Org driver for Wacom tablet devices.
+Homepage: http://linuxwacom.sf.net
+Original-Maintainer: Ron Lee <ron@debian.org>
+
+Package: ifupdown
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 276
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 0.6.8ubuntu29
+Replaces: netbase (<< 4.00)
+Depends: net-tools, libc6 (>= 2.7), debconf (>= 1.2.0) | debconf-2.0, upstart-job, lsb-base (>= 1.3-9ubuntu3), netbase (>= 4.30ubuntu2)
+Suggests: iproute, dhcp3-client | dhcp-client, ppp
+Breaks: udev (<< 136-1)
+Description: high level tools to configure network interfaces
+ This package provides the tools ifup and ifdown which may be used to
+ configure (or, respectively, deconfigure) network interfaces based on
+ interface definitions in the file /etc/network/interfaces.
+Original-Maintainer: Anthony Towns <ajt@debian.org>
+
+Package: libxxf86dga1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 84
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxxf86dga
+Version: 2:1.1.1-2
+Depends: libc6 (>= 2.3.4), libx11-6, libxext6, x11-common
+Description: X11 Direct Graphics Access extension library
+ libXxf86dga provides the XFree86-DGA extension, which allows direct
+ graphics access to a framebuffer-like region, and also allows relative
+ mouse reporting, et al. It is mainly used by games and emulators for
+ games.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXxf86dga
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxext6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 148
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxext
+Version: 2:1.1.1-2
+Depends: libc6 (>= 2.4), libx11-6
+Description: X11 miscellaneous extension library
+ libXext provides an X Window System client interface to several extensions to
+ the X protocol.
+ .
+ The supported protocol extensions are:
+ - DOUBLE-BUFFER (DBE), the Double Buffer extension;
+ - DPMS, the VESA Display Power Management System extension;
+ - Extended-Visual-Information (EVI), an extension for gathering extra
+ information about the X server's visuals;
+ - LBX, the Low Bandwidth X extension;
+ - MIT-SHM, the MIT X client/server shared memory extension;
+ - MIT-SUNDRY-NONSTANDARD, a miscellaneous extension by MIT;
+ - Multi-Buffering, the multi-buffering and stereo display extension;
+ - SECURITY, the X security extension;
+ - SHAPE, the non-rectangular shaped window extension;
+ - SYNC, the X synchronization extension;
+ - TOG-CUP, the Open Group's Colormap Utilization extension;
+ - XC-APPGROUP, the X Consortium's Application Group extension;
+ - XC-MISC, the X Consortium's resource ID querying extension;
+ - XTEST, the X test extension (this is one of two client-side
+ implementations; the other is in the libXtst library, provided by the
+ libxtst6 package);
+ .
+ libXext also provides a small set of utility functions to aid authors of
+ client APIs for X protocol extensions.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXext
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xterm
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 1332
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Version: 256-1ubuntu1
+Provides: x-terminal-emulator
+Depends: xbitmaps, libc6 (>= 2.11), libfontconfig1 (>= 2.8.0), libice6 (>= 1:1.0.0), libncurses5 (>= 5.6+20071006-3), libx11-6 (>= 0), libxaw7, libxft2 (>> 2.1.1), libxmu6, libxt6
+Recommends: x11-utils | xutils
+Suggests: xfonts-cyrillic
+Conffiles:
+ /etc/X11/app-defaults/KOI8RXTerm e904665737663827da6ff9b9651910df
+ /etc/X11/app-defaults/KOI8RXTerm-color d2d26270262950b81921694506281cfe
+ /etc/X11/app-defaults/UXTerm 420d7404a359b3b74a24d415d1a53254
+ /etc/X11/app-defaults/UXTerm-color 446ecb44b3bec790d5c7ac8582ef6ca5
+ /etc/X11/app-defaults/XTerm b13fe7ad4bb906659bfc22db2513bacb
+ /etc/X11/app-defaults/XTerm-color 0ceac6d8b2f3e33be29edddb64394d96
+Description: X terminal emulator
+ xterm is a terminal emulator for the X Window System. It provides DEC VT102
+ and Tektronix 4014 compatible terminals for programs that cannot use the
+ window system directly. This version implements ISO/ANSI colors and most of
+ the control sequences used by DEC VT220 terminals.
+ .
+ This package provides four commands: xterm, which is the traditional
+ terminal emulator; uxterm, which is a wrapper around xterm that is
+ intelligent about locale settings (especially those which use the UTF-8
+ character encoding), but which requires the luit program from the x11-utils
+ package; koi8rxterm, a wrapper similar to uxterm for locales that use the
+ KOI8-R character set; and lxterm, a simple wrapper that chooses which of the
+ previous commands to execute based on the user's locale settings.
+ .
+ A complete list of control sequences supported by the X terminal emulator
+ is provided in /usr/share/doc/xterm.
+ .
+ The xterm program uses bitmap images provided by the xbitmaps package.
+ .
+ Those interested in using koi8rxterm will likely want to install the
+ xfonts-cyrillic package as well.
+Homepage: http://invisible-island.net/xterm/xterm.html
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-radeon
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 1564
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: xserver-xorg-video-ati
+Version: 1:6.13.0-1ubuntu5
+Replaces: xserver-xorg-video-ati (<= 1:6.8.191-1)
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.7), libdrm-radeon1 (>= 2.4.17), libdrm2 (>= 2.4.16), libpciaccess0 (>= 0.10.2), libpixman-1-0, xserver-xorg-core (>= 2:1.6.99.900)
+Suggests: firmware-linux
+Description: X.Org X server -- AMD/ATI Radeon display driver
+ This package provides the 'radeon' driver for the AMD/ATI Radeon, FireGL,
+ FireMV, FirePro and FireStream series.
+ .
+ Note that this is not the same as the ATI-provided, binary-only, 'fglrx'
+ driver, which provides additional 3D functionality for some newer Radeon
+ cards, but is not supported.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-ati driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: x11-session-utils
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 304
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 7.5+1
+Replaces: smproxy, xbase-clients (<= 1:7.2.ds2-3), xsm (<= 1:1.0.1-1), xutils (<= 1:7.1.ds.3-1)
+Depends: libc6 (>= 2.7), libice6 (>= 1:1.0.0), libsm6, libx11-6, libxaw7, libxmu6, libxt6, cpp
+Pre-Depends: x11-common (>= 1:7.0.0)
+Conflicts: smproxy, xsm (<= 1:1.0.1-1)
+Conffiles:
+ /etc/X11/app-defaults/XSm 34f161c4cba12ff40099e12b40e511d3
+Description: X session utilities
+ This package provides the X session manager and related tools:
+ - rstart;
+ - smproxy, a session manager proxy for X clients that do not use the X
+ session manager protocol;
+ - xsm, a session manager for X sessions;
+ Installation of an rsh or ssh daemon (server) is necessary if rstartd is
+ to be used, and installation of an rsh or ssh client is necessary if
+ rstart is to be used.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxrender1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 96
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxrender
+Version: 1:0.9.5-1
+Depends: libc6 (>= 2.2.5), libx11-6
+Description: X Rendering Extension client library
+ The X Rendering Extension (Render) introduces digital image composition as
+ the foundation of a new rendering model within the X Window System.
+ Rendering geometric figures is accomplished by client-side tessellation into
+ either triangles or trapezoids. Text is drawn by loading glyphs into the
+ server and rendering sets of them. The Xrender library exposes this
+ extension to X clients.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXrender
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: mountall
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 232
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Architecture: amd64
+Version: 2.14
+Replaces: upstart (<< 0.6.3-2)
+Depends: makedev, udev, plymouth, coreutils (>= 7.1), libc6 (>= 2.9), libdbus-1-3 (>= 1.2.16), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libplymouth2 (>= 0.8.1-3), libudev0 (>= 151-5)
+Breaks: policycoreutils (<< 2.0.69-2ubuntu4), usplash (<< 0.5.47)
+Conffiles:
+ /etc/init/mountall.conf fba4525691d30c5b18cc3409f990c5be
+ /etc/init/mountall-net.conf feff70cd7006f6763e24263d381940f3
+ /etc/init/mountall-reboot.conf 43e3c229085a13005b0681a49b2bef51
+ /etc/init/mountall-shell.conf aa05af89db3de044d1cd7f6971b46d9f
+ /etc/init/mounted-dev.conf 0c983df7da8b456ea38068e39f2f2a1e
+ /etc/init/mounted-varrun.conf f1908b81facd9a0e78319327e6a9db0a
+ /etc/init/mounted-tmp.conf b049fee4d7c235355555a004befe4633
+Description: filesystem mounting tool
+ mountall mounts filesystems when the underlying block devices are
+ ready, or when network interfaces come up, checking the filesystems
+ first.
+
+Package: xserver-xorg-video-savage
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 240
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:2.3.1-1ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-savage
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.3.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-savage
+Description: X.Org X server -- Savage display driver
+ This package provides the driver for the S3/VIA Savage/ProSavage/Twister family
+ of chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-savage driver module.
+Orig-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-fbdev
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 100
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.4.1-1ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-fbdev
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-fbdev
+Description: X.Org X server -- fbdev display driver
+ This package provides the driver for the Linux framebuffer device (aka
+ 'fbdev').
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-fbdev driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxfont1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 336
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxfont
+Version: 1:1.4.1-1
+Depends: libbz2-1.0, libc6 (>= 2.4), libfontenc1, libfreetype6 (>= 2.2.1), zlib1g (>= 1:1.1.4)
+Conflicts: xprint (<< 2:1.6.0-1)
+Description: X11 font rasterisation library
+ libXfont provides various services for X servers, most notably font
+ selection and rasterisation (through external libraries).
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXfont
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: diffutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 776
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:2.8.1-18
+Replaces: diff
+Pre-Depends: libc6 (>= 2.4)
+Suggests: diffutils-doc
+Description: File comparison utilities
+ The diffutils package provides the diff, diff3, sdiff, and cmp programs.
+ .
+ `diff' shows differences between two files, or each corresponding file
+ in two directories. `cmp' shows the offsets and line numbers where
+ two files differ. `cmp' can also show all the characters that
+ differ between the two files, side by side. `diff3' shows differences
+ among three files. `sdiff' merges two files interactively.
+ .
+ The set of differences produced by `diff' can be used to distribute
+ updates to text files (such as program source code) to other people.
+ This method is especially useful when the differences are small compared
+ to the complete files. Given `diff' output, the `patch' program can
+ update, or "patch", a copy of the file.
+Original-Maintainer: Santiago Vila <sanvila@debian.org>
+
+Package: libxvmc1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 100
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxvmc
+Version: 2:1.0.5-1ubuntu1
+Depends: libc6 (>= 2.4), libx11-6, libxext6, libxv1, x11-common
+Description: X11 Video extension library
+ libXvMC provides an X Window System client interface to the
+ XVideo-MotionCompensation extension to the X protocol.
+ .
+ The XVideo-MotionCompensation extension allows for further accelerated drawing
+ of videos. Video data may be sent at earlier stages of the decoding pipeline
+ than raw YUV data. At the moment, driver support for XvMC is poor to
+ non-existent.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXvMC
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-input-evdev
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 180
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:2.3.2-5ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35)
+Provides: xserver-xorg-input-7
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Description: X.Org X server -- evdev input driver
+ This package provides the driver for input devices using evdev, the Linux
+ kernel's event delivery mechanism. This driver allows for multiple keyboards
+ and mice to be treated as separate input devices.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-input-evdev driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxpm4
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 128
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxpm
+Version: 1:3.5.8-1
+Depends: libc6 (>= 2.7), libx11-6
+Description: X11 pixmap library
+ libXpm provides support and common operation for the XPM pixmap format, which
+ is commonly used in legacy X applications. XPM is an extension of the
+ monochrome XBM bitmap specificied in the X protocol.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXpm
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: tar
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 2464
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.22-2
+Replaces: cpio (<< 2.4.2-39)
+Pre-Depends: libc6 (>= 2.7)
+Suggests: bzip2, ncompress
+Conflicts: cpio (<= 2.4.2-38)
+Conffiles:
+ /etc/rmt 3c58b7cd13da1085eff0acc6a00f43c7
+Description: GNU version of the tar archiving utility
+ Tar is a program for packaging a set of files as a single archive in tar
+ format. The function it performs is conceptually similar to cpio, and to
+ things like PKZIP in the DOS world. It is heavily used by the Debian package
+ management system, and is useful for performing system backups and exchanging
+ sets of files with others.
+Original-Maintainer: Bdale Garbee <bdale@gag.com>
+
+Package: gcc-4.4
+Status: install ok installed
+Priority: optional
+Section: devel
+Installed-Size: 4692
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 4.4.3-4ubuntu5
+Provides: c-compiler
+Depends: gcc-4.4-base (= 4.4.3-4ubuntu5), cpp-4.4 (= 4.4.3-4ubuntu5), binutils (>= 2.20), libgcc1 (>= 1:4.4.3-4ubuntu5), libgomp1 (>= 4.4.3-4ubuntu5), libc6 (>= 2.11)
+Recommends: libc6-dev (>= 2.5)
+Suggests: gcc-4.4-multilib, libmudflap0-4.4-dev (>= 4.4.3-4ubuntu5), gcc-4.4-doc (>= 4.4.3-1), gcc-4.4-locales (>= 4.4.3-1), libgcc1-dbg, libgomp1-dbg, libmudflap0-dbg, libcloog-ppl0, libppl-c2, libppl7
+Description: The GNU C compiler
+ This is the GNU C compiler, a fairly portable optimizing compiler for C.
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: libdrm-radeon1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 452
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.18-1ubuntu3
+Depends: libc6 (>= 2.3.4), libdrm2 (>= 2.4.3)
+Description: Userspace interface to radeon-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the radeon-specific kernel
+ DRM services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI). The DRI is
+ currently used on Linux to provide hardware-accelerated OpenGL drivers.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: zlib1g
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 176
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: zlib
+Version: 1:1.2.3.3.dfsg-15ubuntu1
+Provides: libz1
+Depends: libc6 (>= 2.4)
+Conflicts: zlib1 (<= 1:1.0.4-7)
+Description: compression library - runtime
+ zlib is a library implementing the deflate compression method found
+ in gzip and PKZIP. This package includes the shared library.
+Original-Maintainer: Mark Brown <broonie@debian.org>
+
+Package: xserver-xorg
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 180
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: xorg
+Version: 1:7.5+5ubuntu1
+Replaces: x11-common (<< 1:7.3+11), xserver-common (<< 7)
+Depends: xserver-xorg-core (>= 2:1.7), xserver-xorg-video-all | xserver-xorg-video-6, xserver-xorg-input-all | xserver-xorg-input-7, xserver-xorg-input-evdev, libc6 (>= 2.7), xkb-data (>= 1.4), x11-xkb-utils, console-setup
+Recommends: libgl1-mesa-dri
+Conflicts: x11-common (<< 1:7.3+11), xserver-common (<< 7), xserver-xfree86 (<< 6.8.2.dfsg.1-1)
+Description: the X.Org X server
+ This package depends on the full suite of the server and drivers for the
+ X.Org X server. It does not provide the actual server itself.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxrandr2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 100
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxrandr
+Version: 2:1.3.0-3
+Depends: libc6 (>= 2.2.5), libx11-6 (>= 0), libxext6 (>= 0), libxrender1
+Description: X11 RandR extension library
+ libXrandr provides an X Window System client interface to the RandR
+ extension to the X protocol.
+ .
+ The RandR extension allows for run-time configuration of display attributes
+ such as resolution, rotation, and reflection.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXrandr
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libglu1-mesa
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 548
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: mesa
+Version: 7.7.1-1ubuntu2
+Replaces: libglu1
+Provides: libglu1
+Depends: libc6 (>= 2.11), libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libstdc++6 (>= 4.1.1)
+Conflicts: libglu1, mesag3 (<< 5.0.0-1), xlibmesa3
+Description: The OpenGL utility library (GLU)
+ GLU offers simple interfaces for building mipmaps; checking for the
+ presence of extensions in the OpenGL (or other libraries which follow
+ the same conventions for advertising extensions); drawing
+ piecewise-linear curves, NURBS, quadrics and other primitives
+ (including, but not limited to, teapots); tesselating surfaces; setting
+ up projection matrices and unprojecting screen coordinates to world
+ coordinates.
+ .
+ On Linux, this library is also known as libGLU or libGLU.so.1.
+ .
+ This package provides the SGI implementation of GLU shipped with the
+ Mesa package (ergo the "-mesa" suffix).
+Homepage: http://mesa3d.sourceforge.net/
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: adduser
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 884
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 3.112ubuntu1
+Replaces: manpages-it (<< 0.3.4-2), manpages-pl (<= 20051117-1)
+Depends: perl-base (>= 5.6.0), passwd (>= 1:4.0.12), debconf | debconf-2.0
+Suggests: liblocale-gettext-perl, perl-modules, ecryptfs-utils (>= 67-1)
+Conffiles:
+ /etc/deluser.conf 527e6a57d0bc9f7c1b1aca2071f3da00
+Description: add and remove users and groups
+ This package includes the 'adduser' and 'deluser' commands for creating
+ and removing users.
+ .
+ - 'adduser' creates new users and groups and adds existing users to
+ existing groups;
+ - 'deluser' removes users and groups and removes users from a given
+ group.
+ .
+ Adding users with 'adduser' is much easier than adding them manually.
+ Adduser will choose appropriate UID and GID values, create a home
+ directory, copy skeletal user configuration, and automate setting
+ initial values for the user's password, real name and so on.
+ .
+ Deluser can back up and remove users' home directories
+ and mail spool or all the files they own on the system.
+ .
+ A custom script can be executed after each of the commands.
+ .
+ Development mailing list:
+ http://lists.alioth.debian.org/mailman/listinfo/adduser-devel/
+Homepage: http://alioth.debian.org/projects/adduser/
+Original-Maintainer: Debian Adduser Developers <adduser-devel@lists.alioth.debian.org>
+
+Package: libxcb1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 180
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxcb
+Version: 1.5-2
+Depends: libc6 (>= 2.4), libxau6, libxdmcp6
+Breaks: libxcb-xlib0
+Description: X C Binding
+ This package contains the library files needed to run software using libxcb,
+ the X C Binding.
+ .
+ The XCB library provides an interface to the X Window System protocol,
+ designed to replace the Xlib interface. XCB provides several advantages over
+ Xlib:
+ .
+ * Size: small library and lower memory footprint
+ * Latency hiding: batch several requests and wait for the replies later
+ * Direct protocol access: one-to-one mapping between interface and protocol
+ * Thread support: access XCB from multiple threads, with no explicit locking
+ * Easy creation of new extensions: automatically generates interface from
+ machine-parsable protocol descriptions
+Original-Maintainer: XCB Developers <xcb@lists.freedesktop.org>
+Homepage: http://xcb.freedesktop.org
+
+Package: xserver-xorg-video-all
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 24
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: xorg
+Version: 1:7.5+5ubuntu1
+Replaces: xserver-xorg-driver-all
+Depends: xserver-xorg-video-apm, xserver-xorg-video-ark, xserver-xorg-video-ati, xserver-xorg-video-chips, xserver-xorg-video-cirrus, xserver-xorg-video-fbdev, xserver-xorg-video-i128, xserver-xorg-video-intel, xserver-xorg-video-mga, xserver-xorg-video-neomagic, xserver-xorg-video-nouveau, xserver-xorg-video-nv, xserver-xorg-video-rendition, xserver-xorg-video-s3, xserver-xorg-video-s3virge, xserver-xorg-video-savage, xserver-xorg-video-siliconmotion, xserver-xorg-video-sis, xserver-xorg-video-sisusb, xserver-xorg-video-tdfx, xserver-xorg-video-trident, xserver-xorg-video-tseng, xserver-xorg-video-vesa, xserver-xorg-video-openchrome, xserver-xorg-video-voodoo, xserver-xorg-video-v4l, xserver-xorg-video-vmware, x11-common
+Conflicts: xserver-xorg-driver-all
+Description: the X.Org X server -- output driver metapackage
+ This package depends on the full suite of output drivers for the X.Org X server
+ (Xorg). It does not provide any drivers itself, and may be removed if you wish
+ to only have certain drivers installed.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: locales
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 21820
+Maintainer: Martin Pitt <martin.pitt@ubuntu.com>
+Architecture: all
+Source: langpack-locales
+Version: 2.11+git20100304-3
+Replaces: base-config, belocs-locale-data, belocs-locales-bin, libc6 (<< 2.3.6-0ubuntu6), libc6.1 (<< 2.3.6-0ubuntu6)
+Depends: libc6 (>= 2.9-0ubuntu10) | libc6.1 (>= 2.9-0ubuntu10)
+Conflicts: base-config, belocs-locale-data
+Conffiles:
+ /etc/locale.alias 6ac3cbee43012440edc6bcbade0a61ce
+Description: common files for locale support
+ This package provides support for localized environments (locales).
+ It installs character and transliteration maps, provides the POSIX
+ locale definition and provides common scripts for language pack
+ handling.
+ .
+ The actual locale definitions are not part of this package, these are
+ shipped in the language packs and are installed and removed
+ automatically.
+
+Package: manpages
+Status: install ok installed
+Priority: important
+Section: doc
+Installed-Size: 1104
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 3.23-1
+Replaces: bind, rsh-server (<< 0.10-7)
+Suggests: man-browser
+Description: Manual pages about using a GNU/Linux system
+ This package contains GNU/Linux manual pages for these sections:
+ 4 = Devices (e.g. hd, sd).
+ 5 = File formats and protocols, syntaxes of several system
+ files (e.g. wtmp, /etc/passwd, nfs).
+ 7 = Conventions and standards, macro packages, etc.
+ (e.g. nroff, ascii).
+ .
+ Sections 1, 6 and 8 are provided by the respective applications. This
+ package only includes the intro man page describing the section.
+ .
+ The man pages describe syntaxes of several system files.
+Original-Maintainer: Martin Schulze <joey@debian.org>
+
+Package: libgcc1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 132
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gcc-4.4 (4.4.3-4ubuntu5)
+Version: 1:4.4.3-4ubuntu5
+Depends: gcc-4.4-base (= 4.4.3-4ubuntu5), libc6 (>= 2.2.5)
+Description: GCC support library
+ Shared version of the support library, a library of internal subroutines
+ that GCC uses to overcome shortcomings of particular machines, or
+ special needs for some languages.
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: libklibc
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 136
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: klibc
+Version: 1.5.17-4ubuntu1
+Description: minimal libc subset for use with initramfs
+ klibc is intended to be a minimalistic libc subset for use with
+ initramfs. It is deliberately written for small size, minimal
+ entanglement, and portability, not speed. It is definitely a work in
+ progress, and a lot of things are still missing.
+Original-Maintainer: maximilian attems <maks@debian.org>
+
+Package: libxv1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 80
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxv
+Version: 2:1.0.5-1
+Depends: libc6 (>= 2.4), libx11-6, libxext6
+Description: X11 Video extension library
+ libXv provides an X Window System client interface to the XVideo
+ extension to the X protocol.
+ .
+ The XVideo extension allows for accelerated drawing of videos. Hardware
+ adaptors are exposed to clients, which may draw in a number of colourspaces,
+ including YUV.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXv
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: base-files
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 500
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 5.0.0ubuntu20
+Replaces: base, dpkg (<= 1.15.0), lsb-release (<< 3.0-8), miscutils
+Provides: base
+Depends: base-passwd (>= 2.0.3.4), libpam-modules (>= 0.79-3ubuntu3)
+Pre-Depends: awk
+Conffiles:
+ /etc/debian_version 82711d8dc3e89c428b4694a284e32541
+ /etc/dpkg/origins/debian 731423fa8ba067262f8ef37882d1e742
+ /etc/dpkg/origins/ubuntu ea35901c45553c3451f60476be94d2d8
+ /etc/host.conf 89408008f2585c957c031716600d5a80
+ /etc/issue 0773f7fd061b03b7643118d133e4c581
+ /etc/issue.net b779759799b4ec17dd4dab41ad557f49
+ /etc/lsb-release a50b6779ddccab3277e2560028f3eb15
+Description: Debian base system miscellaneous files
+ This package contains the basic filesystem hierarchy of a Debian system, and
+ several important miscellaneous files, such as /etc/debian_version,
+ /etc/host.conf, /etc/issue, /etc/motd, /etc/profile, /etc/nsswitch.conf,
+ and others, and the text of several common licenses in use on Debian systems.
+Original-Maintainer: Santiago Vila <sanvila@debian.org>
+
+Package: mount
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 380
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: util-linux
+Version: 2.17.2-0ubuntu1
+Pre-Depends: libblkid1 (>= 2.17), libc6 (>= 2.7), libselinux1 (>= 2.0.15), libsepol1 (>= 1.14), libuuid1 (>= 2.16)
+Suggests: nfs-common (>= 1:1.1.0-13)
+Breaks: nfs-common (<< 1:1.1.0-7)
+Description: Tools for mounting and manipulating filesystems
+ This package provides the mount(8), umount(8), swapon(8),
+ swapoff(8), and losetup(8) commands.
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: libtext-iconv-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 108
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.7-2
+Depends: libc6 (>= 2.2.5), perl-base (>= 5.10.0-24ubuntu4), perlapi-5.10.0
+Description: converts between character sets in Perl
+ The iconv() family of functions from XPG4 define an API for converting
+ between character sets (e.g. UTF-8 to Latin1, EBCDIC to ASCII). They
+ are provided by libc6.
+ .
+ This package allows access to them from Perl via the Text::Iconv
+ package.
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://search.cpan.org/search?module=Text::Iconv
+
+Package: console-setup
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 1396
+Maintainer: Ubuntu Installer Team <ubuntu-installer@lists.ubuntu.com>
+Architecture: all
+Version: 1.34ubuntu15
+Depends: debconf (>= 0.5) | debconf-2.0, console-terminus (>= 4.26), xkb-data (>= 0.9), initramfs-tools (>= 0.85eubuntu12), kbd (>= 1.15-1ubuntu3)
+Suggests: lsb-base (>= 3.0-6), locales
+Conflicts: lsb (<< 2.0-6), lsb-base (<< 3.0-6), lsb-core (<< 2.0-6)
+Conffiles:
+ /etc/console-setup/compose.ARMSCII-8.inc fef36b61fb8b1cacc151ad3db127f777
+ /etc/console-setup/compose.CP1251.inc fef88d8c8dd4c726498003fd3cd84a7f
+ /etc/console-setup/compose.CP1255.inc c972a2e90938657e97b643366b98b2ed
+ /etc/console-setup/compose.CP1256.inc 5ea5e4d41da7a88f742863810e86144b
+ /etc/console-setup/compose.GEORGIAN-ACADEMY.inc b6d80f40abff7e8af236796ebaca0247
+ /etc/console-setup/compose.GEORGIAN-PS.inc cf45272b6bf35a22223b132600dc36c3
+ /etc/console-setup/compose.IBM1133.inc a31102602f7e7cab9738022b6c5469ae
+ /etc/console-setup/compose.ISIRI-3342.inc 5ada7fbba750192f11fa238add232ba9
+ /etc/console-setup/compose.ISO-8859-1.inc 719a4300a50dcb168d7de921bab338e9
+ /etc/console-setup/compose.ISO-8859-10.inc e5fce59617c839b56574c9e323d34686
+ /etc/console-setup/compose.ISO-8859-11.inc ad2f3cc7ee64602a790bad8a2a989243
+ /etc/console-setup/compose.ISO-8859-13.inc 9c2f47a52091515749fefc62fc8efd63
+ /etc/console-setup/compose.ISO-8859-14.inc a19822b59629ea7af7682d9247de807f
+ /etc/console-setup/compose.ISO-8859-15.inc cfa9b04fec26afa1debc17ce09d46a0a
+ /etc/console-setup/compose.ISO-8859-16.inc 8245c19b5262d8d23ca856587739eb20
+ /etc/console-setup/compose.ISO-8859-2.inc a56cb83dbe0cd88e4deef52d966d30e4
+ /etc/console-setup/compose.ISO-8859-3.inc e70d7b634791b9c97db75bddf6dcc5fa
+ /etc/console-setup/compose.ISO-8859-4.inc 4092be9556db0ac82e96eae413f1bd47
+ /etc/console-setup/compose.ISO-8859-5.inc f861a4b0403490677e6d400f2d7129da
+ /etc/console-setup/compose.ISO-8859-6.inc 41ea36ea1c1a1c0c9bebdf0016395e1f
+ /etc/console-setup/compose.ISO-8859-7.inc aa280de25f20e82f58da707101b24d48
+ /etc/console-setup/compose.ISO-8859-8.inc 9cceaa9f3312f89aba371d3c893f4e7b
+ /etc/console-setup/compose.ISO-8859-9.inc 1893bc3994c24917c907a17ceb2f284b
+ /etc/console-setup/compose.KOI8-R.inc 8cfd7766b86e5e55d6e71d0d95519c92
+ /etc/console-setup/compose.KOI8-U.inc 217ee62f6982736276f41f760f8622f8
+ /etc/console-setup/compose.TIS-620.inc 31b73af83ef3993c128e2b983b9eaf89
+ /etc/console-setup/compose.VISCII.inc 0741db54ddb6268e476010a44f219f03
+ /etc/init/console-setup.conf 1e2fdc7b62f4d1dee3845f5fc2b13fc4
+Description: console font and keymap setup program
+ This package provides the Linux console with the same
+ keyboard configuration scheme as the X Window System. As a result,
+ there is no need to duplicate or change the keyboard files just to
+ make simple customizations such as the use of dead keys, the key
+ functioning as AltGr or Compose key, the key(s) to switch between
+ Latin and non-Latin mode, etc.
+ .
+ The package also contains console fonts supporting many of the
+ world's languages. It provides an unified set of font faces - the
+ classic VGA, the simplistic Fixed, and the cleaned Terminus,
+ TerminusBold and TerminusBoldVGA.
+Original-Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+
+Package: xserver-xorg-input-synaptics
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 356
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.2.2-1ubuntu4
+Replaces: xfree86-driver-synaptics (<< 0.14.4-2), xorg-driver-synaptics
+Provides: xfree86-driver-synaptics, xorg-driver-synaptics, xserver-xorg-input-7
+Depends: udev, libc6 (>= 2.4), libpciaccess0, libpixman-1-0, libx11-6 (>= 0), libxi6 (>= 2:1.2.0), xserver-xorg-core (>= 2:1.6.99.900)
+Suggests: gpointing-device-settings, touchfreeze
+Conflicts: xfree86-driver-synaptics (<< 0.14.4-2), xorg-driver-synaptics
+Description: Synaptics TouchPad driver for X.Org server
+ This package provides an input driver for the X.Org X server to enable
+ advanced features of the Synaptics Touchpad including:
+ .
+ * Movement with adjustable, non-linear acceleration and speed
+ * Button events through short touching of the touchpad
+ * Double-Button events through double short touching of the touchpad
+ * Dragging through short touching and holding down the finger on the touchpad
+ * Middle and right button events on the upper and lower corner of the touchpad
+ * Vertical scrolling (button four and five events) through moving the finger
+ on the right side of the touchpad
+ * The up/down button sends button four/five events
+ * Horizontal scrolling (button six and seven events) through moving the finger
+ on the lower side of the touchpad
+ * The multi-buttons send button four/five events, and six/seven events for
+ horizontal scrolling
+ * Adjustable finger detection
+ * Multifinger taps: two finger for middle button and three finger for right
+ button events. (Needs hardware support. Not all models implement this
+ feature.)
+ * Run-time configuration using shared memory. This means you can change
+ parameter settings without restarting the X server (see synclient(1)).
+ * It also provides a daemon to disable touchpad while typing at the keyboard
+ and thus avoid unwanted mouse movements (see syndaemon(1)).
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-vesa
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 108
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:2.3.0-1ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-vesa
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-vesa
+Description: X.Org X server -- VESA display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ uses the standard VESA interface provided on all video cards, but runs
+ unaccelerated. This driver is not recommended for use unless you have a
+ problem with the normal driver for your card, because it will peform very
+ badly.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-vesa driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libreadline6
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 408
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: readline6
+Version: 6.1-1
+Depends: readline-common, libc6 (>= 2.11~20100104-0ubuntu5), libncurses5 (>= 5.6+20071006-3)
+Description: GNU readline and history libraries, run-time libraries
+ The GNU readline library aids in the consistency of user interface
+ across discrete programs that need to provide a command line
+ interface.
+ .
+ The GNU history library provides a consistent user interface for
+ recalling lines of previously typed input.
+Original-Maintainer: Matthias Klose <doko@debian.org>
+
+Package: libncurses5
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 512
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: ncurses
+Version: 5.7+20090803-2ubuntu3
+Depends: libc6 (>= 2.4)
+Recommends: libgpm2
+Description: shared libraries for terminal handling
+ This package contains the shared libraries necessary to run programs
+ compiled with ncurses.
+Homepage: ftp://invisible-island.net/ncurses/
+Original-Maintainer: Debian QA Group <packages@qa.debian.org>
+
+Package: libplymouth2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 312
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: plymouth
+Version: 0.8.2-2ubuntu2
+Replaces: plymouth (<< 0.7.0+git20090207-0ubuntu0.1~ppa4)
+Depends: libc6 (>= 2.8), libpng12-0 (>= 1.2.13-4)
+Breaks: casper (= 1.227), mountall (<< 2.8)
+Description: graphical boot animation and logger - shared libraries
+ Plymouth is an application that runs very early in the boot process
+ (even before the root filesystem is mounted!) that provides a graphical
+ boot animation while the boot process happens in the background.
+ .
+ This package contains the shared libraries.
+
+Package: libkeyutils1
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 60
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: keyutils
+Version: 1.2-12
+Depends: libc6 (>= 2.2.5)
+Description: Linux Key Management Utilities (library)
+ Keyutils is a set of utilities for managing the key retention facility in the
+ kernel, which can be used by filesystems, block devices and more to gain and
+ retain the authorization and encryption keys required to perform secure
+ operations.
+ .
+ This package provides a wrapper library for the key management facility system
+ calls.
+Original-Maintainer: Daniel Baumann <daniel@lists.debian-maintainers.org>
+Homepage: http://people.redhat.com/~dhowells/keyutils/
+
+Package: libexpat1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 392
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: expat
+Version: 2.0.1-7ubuntu1
+Depends: libc6 (>= 2.4)
+Conflicts: wink (<= 1.5.1060-4)
+Description: XML parsing C library - runtime library
+ This package contains the runtime, shared library of expat, the C
+ library for parsing XML. Expat is a stream-oriented parser in
+ which an application registers handlers for things the parser
+ might find in the XML document (like start tags).
+Homepage: http://expat.sourceforge.net
+Original-Maintainer: Debian XML/SGML Group <debian-xml-sgml-pkgs@lists.alioth.debian.org>
+
+Package: xserver-xorg-video-rendition
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 116
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:4.2.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-rendition
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-rendition
+Description: X.Org X server -- Rendition display driver
+ This package provides the driver for the Rendition Verite family of chipsets,
+ commonly found in 3D accelerators such as the Creative 3D Blaster.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-rendition driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: patch
+Status: install ok installed
+Priority: standard
+Section: vcs
+Installed-Size: 244
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2.6-2ubuntu1
+Depends: libc6 (>= 2.4)
+Suggests: ed, diffutils-doc
+Description: Apply a diff file to an original
+ Patch will take a patch file containing any of the four forms
+ of difference listing produced by the diff program and apply
+ those differences to an original file, producing a patched
+ version.
+Original-Maintainer: Christoph Berg <myon@debian.org>
+
+Package: initramfs-tools-bin
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 104
+Maintainer: Ubuntu Kernel Team <kernel-team@lists.ubuntu.com>
+Architecture: amd64
+Source: initramfs-tools
+Version: 0.92bubuntu78
+Depends: libc6 (>= 2.11), libudev0 (>= 147)
+Description: binaries used by initramfs-tools
+ This package contains binaries used inside the initramfs images generated
+ by initramfs-tools.
+Original-Maintainer: Debian kernel team <debian-kernel@lists.debian.org>
+
+Package: libxi6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 144
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxi
+Version: 2:1.3-3
+Depends: libc6 (>= 2.4), libx11-6 (>= 2:1.2.99.901), libxext6 (>= 0)
+Description: X11 Input extension library
+ libXi provides an X Window System client interface to the XINPUT
+ extension to the X protocol.
+ .
+ The Input extension allows setup and configuration of multiple input devices,
+ and will soon allow hotplugging of input devices; to be added and removed on
+ the fly.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXi
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xinit
+Status: deinstall ok config-files
+Priority: optional
+Section: x11
+Installed-Size: 128
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.2.0-1
+Config-Version: 1.2.0-1
+Replaces: xbase-clients (<= 1:7.2.ds2-3)
+Depends: libc6 (>= 2.4), libx11-6, x11-common, xauth
+Recommends: xserver-xorg | xserver, xterm | x-session-manager | x-window-manager | x-terminal-emulator
+Conffiles:
+ /etc/X11/xinit/xinitrc cc40a5ba097b062b284e639f4160c04e
+ /etc/X11/xinit/xserverrc 50faa91e980a25adcd0de32020b340bb
+Description: X server initialisation tool
+ xinit and startx are programs which facilitate starting an X server, and
+ loading a base X session.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libattr1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 68
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: attr
+Version: 1:2.4.44-1
+Depends: libc6 (>= 2.4)
+Conflicts: attr (<< 2.0.0)
+Description: Extended attribute shared library
+ Contains the runtime environment required by programs that make use
+ of extended attributes.
+Original-Maintainer: Nathan Scott <nathans@debian.org>
+Homepage: http://savannah.nongnu.org/projects/attr/
+
+Package: xfonts-base
+Status: install ok installed
+Priority: optional
+Section: fonts
+Installed-Size: 8272
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 1:1.0.1
+Replaces: xfonts-misc
+Depends: xfonts-utils
+Suggests: xfs | xserver
+Conffiles:
+ /etc/X11/fonts/misc/xfonts-base.alias a8ec05d528431d4c9703b55a7efd67a8
+Description: standard fonts for X
+ xfonts-base provides a standard set of low-resolution bitmapped fonts. In
+ most cases it is desirable to have the X font server (xfs) and/or an X server
+ installed to make the fonts available to X clients.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-sisusb
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 156
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.9.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-sisusb
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-sisusb
+Description: X.Org X server -- SiS USB display driver
+ This package provides the driver for SiS USB-attached video devices.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-sisusb driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: sed
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 972
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 4.2.1-6
+Depends: dpkg (>= 1.15.4) | install-info
+Pre-Depends: libc6 (>= 2.4), libselinux1 (>= 1.32)
+Description: The GNU sed stream editor
+ sed reads the specified files or the standard input if no
+ files are specified, makes editing changes according to a
+ list of commands, and writes the results to the standard
+ output.
+Original-Maintainer: Clint Adams <schizo@debian.org>
+Homepage: http://www.gnu.org/software/sed/
+
+Package: libidn11
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 368
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libidn
+Version: 1.15-2
+Replaces: libidn11-dev
+Depends: libc6 (>= 2.4)
+Conflicts: libidn9-dev
+Description: GNU Libidn library, implementation of IETF IDN specifications
+ GNU Libidn is a fully documented implementation of the Stringprep,
+ Punycode and IDNA specifications. Libidn's purpose is to encode and
+ decode internationalized domain names. The Nameprep, XMPP, SASLprep,
+ and iSCSI profiles are supported.
+ .
+ This package contains the shared library.
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://www.gnu.org/software/libidn/
+
+Package: xserver-xorg-video-tdfx
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 156
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.4.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-tdfx
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-tdfx
+Description: X.Org X server -- tdfx display driver
+ This package provides the driver for 3dfx Voodoo video cards and their
+ derivatives.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-tdfx driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: klibc-utils
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 476
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: klibc
+Version: 1.5.17-4ubuntu1
+Depends: libklibc (= 1.5.17-4ubuntu1)
+Description: small utilities built with klibc for early boot
+ This package contains a collection of programs that are linked
+ against klibc. These duplicate some of the functionality of a
+ regular Linux toolset, but are typically much smaller than their
+ full-function counterparts. They are intended for inclusion in
+ initramfs images and embedded systems.
+Original-Maintainer: maximilian attems <maks@debian.org>
+
+Package: e2fslibs
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 316
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: e2fsprogs
+Version: 1.41.11-1ubuntu2
+Replaces: e2fsprogs (<< 1.34-1)
+Provides: libe2p2, libext2fs2
+Depends: libc6 (>= 2.7)
+Description: ext2/ext3/ext4 file system libraries
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package provides the ext2fs and e2p libraries, for userspace software
+ that directly accesses extended file systems. Programs that use libext2fs
+ include e2fsck, mke2fs, and tune2fs. Programs that use libe2p include
+ dumpe2fs, chattr, and lsattr.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: xfonts-100dpi
+Status: install ok installed
+Priority: optional
+Section: fonts
+Installed-Size: 4808
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 1:1.0.1
+Depends: xfonts-utils
+Suggests: xfs | xserver
+Conffiles:
+ /etc/X11/fonts/100dpi/xfonts-100dpi.alias 85bebd6ca213aa656c301a72eb4397cb
+Description: 100 dpi fonts for X
+ xfonts-100dpi provides a set of bitmapped fonts at 100 dots per inch. In
+ most cases it is desirable to have the X font server (xfs) and/or an X server
+ installed to make the fonts available to X clients.
+ .
+ This package contains only fonts in the ISO 10646-1 and ISO 8859-1
+ encodings, to conserve disk space. For other encodings, see the
+ xfonts-100dpi-transcoded package.
+ .
+ This package and xfonts-75dpi provide the same set of fonts, rendered at
+ different resolutions; only one or the other is necessary, but both may be
+ installed. xfonts-100dpi may be more suitable for large monitors and/or
+ large screen resolutions (over 1024x768).
+ .
+ This package requires the xfonts-utils package to prepare the font
+ directories for use by an X server or X font server.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libkrb5support0
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 124
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: krb5
+Version: 1.8.1+dfsg-2
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.3.4), libkeyutils1
+Suggests: krb5-doc, krb5-user
+Description: MIT Kerberos runtime libraries - Support library
+ Kerberos is a system for authenticating users and services on a network.
+ Kerberos is a trusted third-party service. That means that there is a
+ third party (the Kerberos server) that is trusted by all the entities on
+ the network (users and services, usually called "principals").
+ .
+ This is the MIT reference implementation of Kerberos V5.
+ .
+ This package contains an internal runtime support library used by other
+ Kerberos libraries.
+Original-Maintainer: Sam Hartman <hartmans@debian.org>
+Homepage: http://web.mit.edu/kerberos/
+
+Package: libgl1-mesa-glx
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 632
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: mesa
+Version: 7.7.1-1ubuntu2
+Replaces: libgl1, libgl1-mesa-dri (<< 6.4.0)
+Provides: libgl1
+Depends: libc6 (>= 2.4), libdrm2 (>= 2.3.1), libx11-6 (>= 0), libxdamage1 (>= 1:1.1), libxext6 (>= 0), libxfixes3 (>= 1:4.0.1), libxxf86vm1, dpkg (>= 1.15.4)
+Recommends: libgl1-mesa-dri (>= 7.2)
+Conflicts: libgl1, libgl1-mesa-dri (<< 6.4.0)
+Description: A free implementation of the OpenGL API -- GLX runtime
+ This version of Mesa provides GLX and DRI capabilities: it is capable of
+ both direct and indirect rendering. For direct rendering, it can use DRI
+ modules from the libgl1-mesa-dri package to accelerate drawing.
+ .
+ This package does not include the modules themselves: these can be found
+ in the libgl1-mesa-dri package.
+ .
+ For a complete description of Mesa, please look at the
+ libgl1-mesa-swx11 package.
+Homepage: http://mesa3d.sourceforge.net/
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: x11-utils
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 688
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 7.5+3
+Replaces: appres, editres, listres, luit, viewres, xbase-clients (<< 1:7.2.ds3), xdpyinfo, xdriinfo, xev, xfd, xfontsel, xkill, xlsatoms, xlsclients, xlsfonts, xmessage, xprop, xutils (<< 1:7.2), xvinfo, xwininfo
+Depends: libc6 (>= 2.7), libfontconfig1 (>= 2.8.0), libfontenc1, libfreetype6 (>= 2.2.1), libgl1-mesa-glx | libgl1, libx11-6 (>= 0), libxaw7, libxext6 (>= 0), libxft2 (>> 2.1.1), libxi6 (>= 0), libxinerama1, libxmu6, libxmuu1, libxrender1, libxt6, libxtst6, libxv1, libxxf86dga1, libxxf86vm1, zlib1g (>= 1:1.1.4), cpp
+Pre-Depends: x11-common (>= 1:7.0.0)
+Suggests: mesa-utils
+Conflicts: appres, editres, listres, luit, viewres, xdpyinfo, xdriinfo, xev, xfd, xfontsel, xkill, xlsatoms, xlsclients, xlsfonts, xmessage, xprop, xvinfo, xwininfo
+Conffiles:
+ /etc/X11/app-defaults/Editres 04c860eb13ac3a4e8d74ebebcf3da76c
+ /etc/X11/app-defaults/Editres-color f16b07f1caf85b42cd40355e23d927a0
+ /etc/X11/app-defaults/Viewres 4f77da598593ff07cda9d2d147a07772
+ /etc/X11/app-defaults/Viewres-color ff9c397a80443790a97b909050f63282
+ /etc/X11/app-defaults/Xfd 5cee09dc86e1dc14c19492b6b866d17c
+ /etc/X11/app-defaults/XFontSel d917f63ef27294544ab192a3e33e30df
+ /etc/X11/app-defaults/Xmessage eed84b35dde8b18e7dcfc80e75c1da67
+ /etc/X11/app-defaults/Xmessage-color ca383db9e4e9648bda0952ad6b8a2115
+Description: X11 utilities
+ An X client is a program that interfaces with an X server (almost always via
+ the X libraries), and thus with some input and output hardware like a
+ graphics card, monitor, keyboard, and pointing device (such as a mouse).
+ .
+ This package provides a miscellaneous assortment of X utilities
+ that ship with the X Window System, including:
+ - appres, editres, listres and viewres, which query the X resource database;
+ - luit, a filter that can be run between an arbitrary application and a
+ UTF-8 terminal emulator;
+ - xdpyinfo, a display information utility for X;
+ - xdriinfo, query configuration information of DRI drivers;
+ - xev, an X event displayer;
+ - xfd, a tool that displays all the glyphs in a given X font;
+ - xfontsel, a tool for browsing and selecting X fonts;
+ - xkill, a tool for terminating misbehaving X clients;
+ - xlsatoms, which lists interned atoms defined on an X server;
+ - xlsclients, which lists client applications running on an X display;
+ - xlsfonts, a server font list displayer;
+ - xmessage, a tool to display message or dialog boxes;
+ - xprop, a property displayer for X;
+ - xvinfo, an Xv extension information utility for X;
+ - xwininfo, a window information utility for X;
+ .
+ The editres and viewres programs use bitmap images provided by the
+ xbitmaps package. The luit program requires locale information from
+ the libx11-data package.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: base-passwd
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 184
+Maintainer: Colin Watson <cjwatson@debian.org>
+Architecture: amd64
+Version: 3.5.22
+Replaces: base
+Depends: libc6 (>= 2.8)
+Description: Debian base system master password and group files
+ These are the canonical master copies of the user database files
+ (/etc/passwd and /etc/group), containing the Debian-allocated user and
+ group IDs. The update-passwd tool is provided to keep the system databases
+ synchronized with these master files.
+
+Package: libcomerr2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 108
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: e2fsprogs
+Version: 1.41.11-1ubuntu2
+Replaces: e2fsprogs (<< 1.34-1)
+Provides: libcomerr-kth-compat
+Depends: libc6 (>= 2.3.4)
+Description: common error description library
+ libcomerr is an attempt to present a common error-handling mechanism to
+ manipulate the most common form of error code in a fashion that does not
+ have the problems identified with mechanisms commonly in use.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: mawk
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 256
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.3.3-15ubuntu2
+Provides: awk
+Pre-Depends: libc6 (>= 2.11~20100104-0ubuntu3)
+Description: a pattern scanning and text processing language
+ Mawk is an interpreter for the AWK Programming Language. The AWK
+ language is useful for manipulation of data files, text retrieval and
+ processing, and for prototyping and experimenting with algorithms. Mawk
+ is a new awk meaning it implements the AWK language as defined in Aho,
+ Kernighan and Weinberger, The AWK Programming Language, Addison-Wesley
+ Publishing, 1988. (Hereafter referred to as the AWK book.) Mawk conforms
+ to the POSIX 1003.2 (draft 11.3) definition of the AWK language
+ which contains a few features not described in the AWK book, and mawk
+ provides a small number of extensions.
+ .
+ Mawk is smaller and much faster than gawk. It has some compile-time
+ limits such as NF = 32767 and sprintf buffer = 1020.
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: xserver-xorg-video-ark
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 84
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.7.2-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-ark
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-ark
+Description: X.Org X server -- ark display driver
+ This package provides the driver for the ark family
+ of chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-ark driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: gnupg
+Status: install ok installed
+Priority: important
+Section: utils
+Installed-Size: 5320
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.4.10-2ubuntu1
+Depends: libbz2-1.0, libc6 (>= 2.4), libreadline6, libusb-0.1-4 (>= 2:0.1.12), zlib1g (>= 1:1.1.4), dpkg (>= 1.15.4) | install-info, gpgv
+Recommends: libldap-2.4-2 (>= 2.4.7), gnupg-curl
+Suggests: gnupg-doc, xloadimage | imagemagick | eog, libpcsclite1
+Description: GNU privacy guard - a free PGP replacement
+ GnuPG is GNU's tool for secure communication and data storage.
+ It can be used to encrypt data and to create digital signatures.
+ It includes an advanced key management facility and is compliant
+ with the proposed OpenPGP Internet standard as described in RFC2440.
+ .
+ The gnupg package is built without libcurl. So it does not support
+ HKPS keyservers. Install the gnupg-curl package if you want to use
+ the keyserver helper tools built with libcurl and supporting HKPS.
+ .
+ GnuPG does not use any patented algorithms. This means it cannot be
+ compatible with PGP2, because that uses IDEA (which is patented in
+ a number of countries).
+Homepage: http://www.gnupg.org
+Original-Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org>
+
+Package: xserver-xorg-video-cirrus
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 164
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.3.2-1ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-cirrus
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-cirrus
+Description: X.Org X server -- Cirrus display driver
+ This package provides the driver for the Cirrus Logic family of video
+ cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-cirrus driver module.
+Orig-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libdb4.8
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1516
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: db
+Version: 4.8.24-1ubuntu1
+Depends: libc6 (>= 2.4)
+Conflicts: libdb2 (<< 2:2.7.7-3)
+Description: Berkeley v4.8 Database Libraries [runtime]
+ This is the runtime package for programs that use the v4.8 Berkeley
+ database library.
+Homepage: http://www.oracle.com/technology/software/products/berkeley-db/index.html
+Original-Maintainer: Debian Berkeley DB Maintainers <pkg-db-devel@lists.alioth.debian.org>
+
+Package: x11-apps
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 2276
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 7.5+1ubuntu2
+Replaces: bitmap, ico, oclock, x11perf, xbase-clients (<= 1:7.2.ds2-3), xbiff, xcalc, xclipboard, xclock, xconsole, xcursorgen, xditview, xeyes, xgc, xload, xlogo, xmag, xman, xmore, xwd, xwud
+Depends: libc6 (>= 2.11), libpng12-0 (>= 1.2.13-4), libsm6, libx11-6 (>= 0), libxaw7, libxcursor1 (>> 1.1.2), libxext6 (>= 0), libxft2 (>> 2.1.1), libxkbfile1, libxmu6, libxmuu1, libxrender1, libxt6, cpp
+Pre-Depends: x11-common (>= 1:7.0.0)
+Suggests: mesa-utils
+Conflicts: bitmap, ico, oclock, x11perf, xbiff, xcalc, xclipboard, xclock, xconsole, xcursorgen, xditview, xeyes, xgc, xload, xlogo, xmag, xman, xmore, xwd, xwud
+Conffiles:
+ /etc/X11/app-defaults/Bitmap 53d1579022e3e95bc2b15eb813f08731
+ /etc/X11/app-defaults/Bitmap-color 946b659d5d6c41b6840f5e0df10680d9
+ /etc/X11/app-defaults/Bitmap-nocase f2db8f925e5ea5680090c32db9121c8d
+ /etc/X11/app-defaults/Clock-color b4ba6ae900e0e488e4b030f14c6fe656
+ /etc/X11/app-defaults/XCalc bc0d4c4717137a2d25e17b7358c8ad8d
+ /etc/X11/app-defaults/XCalc-color c8efe9caf8987a902df98270e2b291c9
+ /etc/X11/app-defaults/XClipboard 18ebd8e152da9203e9e34e88dad98d97
+ /etc/X11/app-defaults/XClock 812dfcc6f6d83e2ae9da809c3bf11c67
+ /etc/X11/app-defaults/XClock-color 7b049809f0bca03c76480959e2e4db89
+ /etc/X11/app-defaults/XConsole a310ffbe0ed9509a2477ea5f1ac1dcc5
+ /etc/X11/app-defaults/Xditview 49d35244a61618b60f17d3400f64a81e
+ /etc/X11/app-defaults/Xditview-chrtr 98a562569a7db396c9a0d2e6d414067e
+ /etc/X11/app-defaults/Xedit 013f41442eb431168793e1943779c8f3
+ /etc/X11/app-defaults/Xedit-color 59d7f0d96f4346ae0fe4904d46daf53c
+ /etc/X11/app-defaults/Xgc 744adc578acb239541e378eb16e337f7
+ /etc/X11/app-defaults/Xgc-color 8dfaceb0c12917fd0b1c77423f9f6a47
+ /etc/X11/app-defaults/XLoad 3ea554c7be110102e42e25d3d83c4134
+ /etc/X11/app-defaults/XLogo fb1407c8cb1574726a6eb743b0092407
+ /etc/X11/app-defaults/XLogo-color 439375bf8e3b87f46eebf35f55a8dbb5
+ /etc/X11/app-defaults/Xmag 798a596142ae1b051408171e2b2db096
+ /etc/X11/app-defaults/Xman b34cc2adfe0b89d436864163387417d1
+ /etc/X11/app-defaults/XMore d6a85ee054f522e47a246d4471b6ab49
+Description: X applications
+ This package provides a miscellaneous assortment of X applications
+ that ship with the X Window System, including:
+ - atobm, bitmap, and bmtoa, tools for manipulating bitmap images;
+ - oclock and xclock, graphical clocks;
+ - xbiff, a tool which tells you when you have new email;
+ - xcalc, a scientific calculator desktop accessory;
+ - xclipboard, a tool to manage cut-and-pasted text selections;
+ - xconsole, which monitors system console messages;
+ - xcursorgen, a tool for creating X cursor files from PNGs;
+ - xditview, a viewer for ditroff output;
+ - xedit, a simple text editor for X;
+ - xeyes, a demo program in which a pair of eyes track the pointer;
+ - xgc, a graphics demo;
+ - xload, a monitor for the system load average;
+ - xlogo, a demo program that displays the X logo;
+ - xmag, which magnifies parts of the X screen;
+ - xman, a manual page browser;
+ - xmore, a text pager;
+ - xwd, a utility for taking window dumps ("screenshots") of the X session;
+ - xwud, a viewer for window dumps created by xwd;
+ - Xmark, x11perf, and x11perfcomp, tools for benchmarking graphical
+ operations under the X Window System;
+ .
+ The xbiff, xcalc, xconsole and xman programs use bitmap images provided
+ by the xbitmaps package.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: x11-common
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 640
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: all
+Source: xorg
+Version: 1:7.5+5ubuntu1
+Replaces: x-common, xfree86-common, xorg-common, xserver-common (<< 7)
+Depends: debconf (>= 0.5) | debconf-2.0, upstart-job, debianutils (>= 1.13), lsb-base (>= 1.3-9ubuntu2)
+Pre-Depends: debconf | debconf-2.0
+Conflicts: aee (<= 2.2.15b-1), ascd (<= 0.13.2-3), beaver (<= 0.2.5-2), bibview (<= 2.2-8), bugsx (<= 1.08-8), buici-clock (<= 0.4.5+b1), communicator-smotif-477, ctwm (<= 3.7-2), emelfm (<= 0.9.2-7), epan, fte-xwindow (<= 0.50.0-1.3), fvwm1 (<= 1.24r-46), fvwm95 (<= 2.0.43ba-23+b1), gerstensaft (<= 0.2-5.1), ghostview, gipsc (<= 0.4.3-2), grace (<= 1:5.1.18-1), grace6 (<= 5.99.0+final-4), gradio (<= 1.0.1-6), groff (<= 1.18.1.1-7), guitar (<= 0.1.4-11), hamsoft (<< 0.2.3-1), hanterm-classic (<= 3.1.6.0-4), hanterm-xf (<= 1:3.3.1p18-9.2), hfsutils-tcltk (<= 3.2.6-7), ibp (<= 0.21-4), isdnutils-xtools (<= 1:3.8.2005-12-06-4), ivtools-bin (<= 1.1.3-5), ivtools-dev (<= 1.1.3-5), kdrill (<= 6.4-2.1), kinput2-canna (<= 3.1-7), kinput2-canna-wnn (<= 3.1-7), kinput2-wnn (<= 3.1-7), kterm (<= 6.2.0-45), lbxproxy (<< 7.0), libmotif-dev (<= 2.2.3-1.3), libxft-dev (<= 2.1.8.2-5), lm-batmon (<= 0.96-3), login.app (<= 1.2.1-18), lsb-core (<= 3.1-4), lwm (<= 1.2.1-1), mctools-lite (<= 970129-16), mgp (<= 1.11b-6), motif-clients (<= 2.2.3-1.3), navigator-smotif-477, netscape-base-4, olvwm (<= 4.4.3.2p1.4-21), olwm (<= 3.2p1.4-21), oneko (<= 1.2.sakura.6-1), opera (<< 9.10-20060616), pgaccess (<= 1:0.98.8.20030520-2), phototk, pixmap (<= 2.6pl4-14.1), plotmtv (<= 1.4.4t-8.1), pmud (<= 0.10-9), ppxp (<= 0.2001080415-14), ppxp-x11 (<= 0.2001080415-14), procmeter (<= 2.5.1-11), propsel (<= 971130-5.3), proxymngr (<< 7.0), qcam (<= 0.91-11.1), regexplorer (<= 0.1.6-12), seyon (<= 2.20c-20), skkinput (<= 1:2.06.4-4), stella (<< 2.2-1), tkdesk (<= 2.0-5), tkseti (<= 3.06-1), tkworld, twlog (<= 1.3-4), twm (<< 7.0), ucbmpeg-play (<< 2.3p-13), vide (<= 1.21-3), videogen (<= 0.32-1), vtwm (<= 5.4.7-2), w9wm (<= 0.4.2-4), wdm (<= 1.28-1), wily (<= 0.13.41-6), wmavgload (<= 0.7.0-6.1), wmcpu (<= 1.3-4.1), wmdate (<= 0.5-7.1), wmnet (<= 1.05-12), wmnetselect (<= 0.85-5.5), wmscope (<= 3.0-9.1), wmsensors (<= 1.0.4-3.4), wmtv (<= 0.6.5-15), x-common, xautolock (<= 1:2.1-6), xbanner (<= 1.31-23), xbase-clients (<< 1:7.0), xbatt (<= 1.2.1-4), xbattbar (<= 1.4.2-3.1), xcal (<= 4.1-18.2), xcalendar-i18n (<= 4.0.0.i18p1-13.1), xcb (<= 2.4-4), xclip (<= 0.08-5), xclips (<= 6.21-6), xcolors (<= 1.5a-2), xcolorsel (<= 1.1a-11), xdkcal (<= 0.9d-2.1), xdm (<= 1:1.0.1-6), xdmx (<< 1:1.0), xdu (<= 3.0-14), xearth (<= 1.1-10.2), xengine (<= 1.11-9), xephem (<= 3.4-5), xext, xezmlm (<= 1.0.3-11), xfaces (<= 3.3-25), xfishtank (<= 2.2-23.1), xfm (<= 1.4.3-8), xfractint (<< 20.3.01-1), xfree86-common, xfs (<< 1:1.0), xfs-xtt (<= 1:1.4.1.xf430-6), xftp, xfwp (<< 7.0), xgdipc (<= 1.2-0.3), xgmod (<= 3.1-9), xgobi, xgraph (<= 12.1-3), xinput (<= 1.2-5.2), xipmsg (<= 0.8088-1.1), xisp, xlbiff (<< 4.1-4), xli (<= 1.17.0-21), xlockmore (<= 1:5.21-1), xlockmore-gl (<= 1:5.21-1), xlogmaster (<= 1.6.0-8), xmailbox (<= 2.5-9), xmem (<= 1.20-19), xmeter (<= 1.15-6), xmh (<= 6.8.2.dfsg.1-4), xmix (<= 2.1-5), xmon (<= 1.5.6-1.3), xnecview (<= 1.34-2), xnest (<< 1:1.0), xodo (<= 1.2-9.2), xorg-common, xpaste, xpmumon (<= 1.3.0), xpostit (<= 3.3.1-8.2), xpostitplus, xprint (<= 1:0.1.0.alpha1-13), xqbiff (<= 0.75-4), xrn (<= 9.02-7.1), xserver-common (<< 7), xserver-xfree86 (<< 1:7.0), xserver-xfree86-dbg, xserver-xorg (<< 1:7.4~), xslideshow (<= 3.1-8.1), xsysinfo (<= 1.7-2), xtel (<= 3.3.0-5.4), xterm (<< 208-1), xtoolwait (<= 1.3-6), xtrkcad (<= 3.1.4-1), xtrlock (<= 2.0-11), xturqstat (<= 2.2.2sarge1), xutils (<< 1:7.0), xv (<= 3.10a-26), xvfb (<< 1:1.0), xview-clients (<= 3.2p1.4-21), xviewg (<= 3.2p1.4-21), xviewg-dev (<= 3.2p1.4-21), xvkbd (<= 2.6-2.1), xwit (<= 3.4-6), xxkb (<= 1.10-2.1), xzoom (<= 0.3-17), yank (<= 0.2.1-7.2)
+Conffiles:
+ /etc/X11/rgb.txt 09ee098b83d94c7c046d6b55ebe84ae1
+ /etc/X11/Xreset 05d188ccac2f3360af8fe0c216640233
+ /etc/X11/Xreset.d/README b344c222b5daf81926fd3270df374b5f
+ /etc/X11/Xsession 50678401170c9c701d2375bd279690c5
+ /etc/X11/Xsession.d/20x11-common_process-args 862c8286749d25fe58dd98cad24c3fe4
+ /etc/X11/Xsession.d/30x11-common_xresources 61cebe25ee0c64e981b88958dfee6f9c
+ /etc/X11/Xsession.d/40x11-common_xsessionrc db544c8543d1cb3762b9859288e77040
+ /etc/X11/Xsession.d/50x11-common_determine-startup fe7c99261ba27b26aa14926d92447439
+ /etc/X11/Xsession.d/60x11-common_localhost 2353ea72efc0c3e101058c3c56e282b4
+ /etc/X11/Xsession.d/90x11-common_ssh-agent ae74aadf705c5fccf841ef921b45ca72
+ /etc/X11/Xsession.d/99x11-common_start 3874d5e8f3ec888f69adb126e223e168
+ /etc/X11/Xsession.options 210cd520efa87a5197cac01e10b3a84a
+ /etc/X11/Xresources/x11-common b640adb1cd646ec097f8df5b6deca9f0
+ /etc/gdm/failsafeBlacklist 9b860f21bf33a6bfce55f233ba975e41
+ /etc/gdm/failsafeXinit bf497dc1b011021e548c37392bd2a883
+ /etc/gdm/failsafeXServer 791297354d1c22d1616154b3c6060f2d
+ /etc/init.d/x11-common 9a2901c839ade46a2a0f795ad1400fdf
+ /etc/init/failsafe-x.conf b85b200b5d58cbba7c81d51485e210fc
+Description: X Window System (X.Org) infrastructure
+ x11-common contains the filesystem infrastructure required for further
+ installation of the X Window System in any configuration; it does not
+ provide a full installation of clients, servers, libraries, and utilities
+ required to run the X Window System.
+ .
+ A number of terms are used to refer to the X Window System, including "X",
+ "X Version 11", "X11", "X11R6", and "X11R7". The version of X used in
+ Debian is derived from the version released by the X.Org Foundation, and
+ is thus often also referred to as "X.Org". All of the preceding quoted
+ terms are functionally interchangeable in an Debian system.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: net-tools
+Status: install ok installed
+Priority: required
+Section: net
+Installed-Size: 1044
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.60-23ubuntu2
+Replaces: ja-trans (<= 0.8-2), netbase (<< 4.00)
+Depends: libc6 (>= 2.4)
+Conflicts: ja-trans (<= 0.8-2)
+Description: The NET-3 networking toolkit
+ This package includes the important tools for controlling the network
+ subsystem of the Linux kernel. This includes arp, ifconfig, netstat,
+ rarp, nameif and route. Additionally, this package contains utilities
+ relating to particular network hardware types (plipconfig, slattach,
+ mii-tool) and advanced aspects of IP configuration (iptunnel, ipmaddr).
+ .
+ In the upstream package 'hostname' and friends are included. Those are
+ not installed by this package, since there is a special "hostname*.deb".
+Original-Maintainer: net-tools Team <pkg-net-tools-maintainers@lists.alioth.debian.org>
+
+Package: libxfixes3
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 80
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxfixes
+Version: 1:4.0.4-1
+Depends: libc6 (>= 2.2.5), libx11-6
+Description: X11 miscellaneous 'fixes' extension library
+ libXfixes provides an X Window System client interface to the 'XFIXES'
+ extension to the X protocol.
+ .
+ It provides support for Region types, and some cursor functions.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXfixes
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: ccache
+Status: install ok installed
+Priority: optional
+Section: devel
+Installed-Size: 128
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2.4-17build1
+Depends: libc6 (>= 2.8), zlib1g (>= 1:1.1.4)
+Suggests: distcc
+Description: Compiler results cacher, for fast recompiles
+ ccache is a compiler cache. It speeds up re-compilation of C/C++ code
+ by caching previous compiles and detecting when the same compile is
+ being done again.
+Original-Maintainer: Y Giridhar Appaji Nag <appaji@debian.org>
+Homepage: http://ccache.samba.org
+
+Package: xserver-xorg-video-r128
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 320
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 6.8.1-2ubuntu1
+Replaces: xserver-xorg-video-ati (<= 1:6.8.0-1ubuntu1)
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Suggests: firmware-linux
+Conflicts: xserver-xorg-video-ati (<= 1:6.8.0-1ubuntu1)
+Description: X.Org X server -- ATI r128 display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for the ATI Rage 'r128' series.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-r128 driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libfs6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 116
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libfs
+Version: 2:1.0.2-1build1
+Depends: libc6 (>= 2.4)
+Description: X11 Font Services library
+ libFS, the Font Services library, provides various functions useful to
+ X11 font servers, and clients connecting to font servers. It is not used
+ outside of these implementations.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libFS
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: debconf-i18n
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 1136
+Maintainer: Colin Watson <cjwatson@ubuntu.com>
+Architecture: all
+Source: debconf
+Version: 1.5.28ubuntu4
+Replaces: debconf (<< 1.3.0), debconf-utils (<< 1.3.22)
+Depends: debconf, liblocale-gettext-perl, libtext-iconv-perl, libtext-wrapi18n-perl, libtext-charwidth-perl
+Conflicts: debconf-english, debconf-utils (<< 1.3.22)
+Description: full internationalization support for debconf
+ This package provides full internationalization for debconf, including
+ translations into all available languages, support for using translated
+ debconf templates, and support for proper display of multibyte character
+ sets.
+Original-Maintainer: Debconf Developers <debconf-devel@lists.alioth.debian.org>
+
+Package: libxmu6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 164
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxmu
+Version: 2:1.0.5-1
+Depends: libc6 (>= 2.7), libx11-6, libxext6, libxt6
+Description: X11 miscellaneous utility library
+ libXmu provides a set of miscellaneous utility convenience functions for X
+ libraries to use. libXmuu is a lighter-weight version that does not depend
+ on libXt or libXext; for more information, see libxmuu1.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXmu
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: grep
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 1188
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2.5.4-4build1
+Provides: rgrep
+Pre-Depends: libc6 (>= 2.4)
+Suggests: libpcre3 (>= 7.7)
+Conflicts: rgrep
+Description: GNU grep, egrep and fgrep
+ 'grep' is a utility to search for text in files; it can be used from the
+ command line or in scripts. Even if you don't want to use it, other packages
+ on your system probably will.
+ .
+ The GNU family of grep utilities may be the "fastest grep in the west".
+ GNU grep is based on a fast lazy-state deterministic matcher (about
+ twice as fast as stock Unix egrep) hybridized with a Boyer-Moore-Gosper
+ search for a fixed string that eliminates impossible text from being
+ considered by the full regexp matcher without necessarily having to
+ look at every character. The result is typically many times faster
+ than Unix grep or egrep. (Regular expressions containing backreferencing
+ will run more slowly, however.)
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://www.gnu.org/software/grep/
+
+Package: plymouth
+Status: install ok installed
+Priority: required
+Section: x11
+Installed-Size: 480
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 0.8.2-2ubuntu2
+Depends: libc6 (>= 2.8), libdrm-intel1 (>= 2.4.9), libdrm-nouveau1 (>= 2.4.11-1ubuntu1~), libdrm-radeon1 (>= 2.4.17), libdrm2 (>= 2.4.3), libplymouth2 (= 0.8.2-2ubuntu2), upstart-job, udev (>= 149-2), mountall (>= 2.0), initramfs-tools
+Recommends: plymouth-theme-ubuntu-text | plymouth-theme
+Breaks: gdm (<< 2.29.1-0ubuntu4), kdm (<< 4:4.4.2-0ubuntu6), lubuntu-plymouth-theme (<= 0.4), ubuntustudio-plymouth-theme (<= 0.38), xubuntu-plymouth-theme (<< 10.04.4)
+Conflicts: usplash
+Conffiles:
+ /etc/init/plymouth.conf a0352db1159bc9f4322170dd78cd1dae
+ /etc/init/plymouth-log.conf 65d2943a69f455dec3fed43fd7996d76
+ /etc/init/plymouth-splash.conf 5daa5d5dafaee30442e4d8d82e542c0a
+ /etc/init/plymouth-stop.conf f422b651bb1fe8164f968bb58e18bb6c
+Description: graphical boot animation and logger - main package
+ Plymouth is an application that runs very early in the boot process
+ (even before the root filesystem is mounted!) that provides a graphical
+ boot animation while the boot process happens in the background.
+
+Package: libdrm-nouveau1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 456
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.18-1ubuntu3
+Depends: libc6 (>= 2.3.4), libdrm2 (>= 2.4.3)
+Description: Userspace interface to nouveau-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the nouveau-specific kernel
+ DRM services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI). The DRI is
+ currently used on Linux to provide hardware-accelerated OpenGL drivers.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: kbd
+Status: install ok installed
+Priority: extra
+Section: utils
+Installed-Size: 1632
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.15-1ubuntu3
+Replaces: open, util-linux (<< 2.11)
+Provides: console-utilities, open
+Depends: libc6 (>= 2.7), console-setup, lsb-base (>= 3.0-10), initramfs-tools
+Conflicts: console-utilities, kbd-data, open, util-linux (<< 2.11)
+Conffiles:
+ /etc/kbd/config 182c6394322efb8a10e6e95836ad220d
+ /etc/kbd/remap 2f1f15d62b45ab43c04b3ddbfcf591ec
+Description: Linux console font and keytable utilities
+ This package allows you to set up the Linux console, change the font,
+ resize text mode virtual consoles and remap the keyboard.
+ .
+ You will probably want to install a set of data files, such as the one
+ in the “console-setup” package.
+Original-Maintainer: Console utilities maintainers <pkg-kbd-devel@lists.alioth.debian.org>
+
+Package: libxdamage1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 64
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxdamage
+Version: 1:1.1.2-1
+Depends: libc6 (>= 2.2.5), libx11-6, libxfixes3 (>= 1:4.0.1)
+Description: X11 damaged region extension library
+ libXdamage provides an X Window System client interface to the DAMAGE
+ extension to the X protocol.
+ .
+ The Damage extension provides for notification of when on-screen regions have
+ been 'damaged' (altered).
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXdamage
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: x11-xserver-utils
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 556
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 7.5+1ubuntu2
+Replaces: iceauth, sessreg, xbase-clients (<< 1:7.3), xgamma, xhost, xmodmap, xrandr, xrdb, xrefresh, xrgb, xset, xsetmode, xsetpointer, xsetroot, xstdcmap, xutils (<< 1:7.2), xvidtune
+Depends: libc6 (>= 2.7), libice6 (>= 1:1.0.0), libx11-6 (>= 0), libxau6, libxaw7, libxext6 (>= 0), libxi6 (>= 0), libxmu6, libxmuu1, libxrandr2 (>= 2:1.2.99.3), libxrender1, libxt6, libxxf86vm1, cpp
+Pre-Depends: x11-common (>= 1:7.0.0)
+Suggests: nickle, cairo-5c, xorg-docs-core
+Conflicts: iceauth, sessreg, xgamma, xhost, xmodmap, xrandr, xrdb, xrefresh, xrgb, xset, xsetmode, xsetpointer, xsetroot, xstdcmap, xvidtune
+Conffiles:
+ /etc/X11/app-defaults/Xvidtune b8a276636b9bee314fa77b468a54a84a
+Description: X server utilities
+ An X client is a program that interfaces with an X server (almost always via
+ the X libraries), and thus with some input and output hardware like a
+ graphics card, monitor, keyboard, and pointing device (such as a mouse).
+ .
+ This package provides a miscellaneous assortment of X Server utilities
+ that ship with the X Window System, including:
+ - iceauth, a tool for manipulating ICE protocol authorization records;
+ - rgb;
+ - sessreg, a simple program for managing utmp/wtmp entries;
+ - xcmsdb, a device color characteristic utility for the X Color Management
+ System;
+ - xgamma, a tool for querying and setting a monitor's gamma correction;
+ - xhost, a very dangerous program that you should never use;
+ - xmodmap, a utility for modifying keymaps and pointer button mappings in X;
+ - xrandr, a command-line interface to the RandR extension;
+ - xrdb, a tool to manage the X server resource database;
+ - xrefresh, a tool that forces a redraw of the X screen;
+ - xset, a tool for setting miscellaneous X server parameters;
+ - xsetmode and xsetpointer, tools for handling X Input devices;
+ - xsetroot, a tool for tailoring the appearance of the root window;
+ - xstdcmap, a utility to selectively define standard colormap properties;
+ - xvidtune, a tool for customizing X server modelines for your monitor.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxaw7
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 516
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxaw
+Version: 2:1.0.7-1
+Depends: libc6 (>= 2.4), libx11-6, libxext6, libxmu6, libxpm4, libxt6
+Description: X11 Athena Widget library
+ libXaw7 provides the second version of Xaw, the Athena Widgets tookit,
+ which is largely used by legacy X applications. This version is the
+ most common version, as version 6 is considered deprecated, and version
+ 8, which adds Xprint support, is unsupported and not widely used.
+ In general, use of a more modern toolkit such as GTK+ is recommended.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXaw
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: upstart
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 856
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Architecture: amd64
+Version: 0.6.5-6
+Replaces: startup-tasks, system-services, sysvinit, upstart-compat-sysv, upstart-job
+Provides: startup-tasks, system-services, upstart-compat-sysv, upstart-job
+Depends: libc6 (>= 2.4), libdbus-1-3 (>= 1.2.16), libnih-dbus1 (>= 1.0.0), libnih1 (>= 1.0.0), libudev0 (>= 151-5), sysvinit-utils, sysv-rc, initscripts, mountall, ifupdown (>= 0.6.8ubuntu29)
+Conflicts: startup-tasks, system-services, sysvinit, upstart-compat-sysv, upstart-job
+Conffiles:
+ /etc/dbus-1/system.d/Upstart.conf 64be74cddb0c74b7d98202b40389784c
+ /etc/init/control-alt-delete.conf 16e6603524084b63b0f0ca04eb56757e
+ /etc/init/rc-sysinit.conf bd0415c6387debecfff37a371b07002a
+ /etc/init/rc.conf c5e4b13b644d79d5a5c02e1396159c00
+ /etc/init/rcS.conf 918e9d799d6aa99a0d96538d9685821d
+ /etc/init/tty1.conf 543a3404e714bb96b676770c8334d86d
+ /etc/init/tty2.conf 5eed82253d8c362021c344f1dbdc863b
+ /etc/init/tty3.conf b75577836957bb5adb50b3482c429edb
+ /etc/init/tty4.conf 27b4a36d59bf74fd6792a69394511e42
+ /etc/init/tty5.conf 9803918babed47f733554dcd556d09d1
+ /etc/init/tty6.conf 34f7b6971a5580f5fb6a2ff6f14af996
+ /etc/init/upstart-udev-bridge.conf b3d59bd6e5debf634e4fe258d5a4dd71
+Description: event-based init daemon
+ upstart is a replacement for the /sbin/init daemon which handles
+ starting of tasks and services during boot, stopping them during
+ shutdown and supervising them while the system is running.
+Homepage: http://upstart.ubuntu.com/
+
+Package: xserver-xorg-video-neomagic
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 156
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.2.4-2
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-neomagic
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-neomagic
+Description: X.Org X server -- Neomagic display driver
+ This package provides the driver for Neomagic MagicGraph chipsets, which are
+ commonly found in laptops.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-neomagic driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libcwidget3
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 844
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: cwidget
+Version: 0.5.13-1ubuntu1
+Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libncursesw5 (>= 5.6+20071006-3), libsigc++-2.0-0c2a (>= 2.0.2), libstdc++6 (>= 4.1.1)
+Suggests: libcwidget-dev
+Description: high-level terminal interface library for C++ (runtime files)
+ libcwidget is a modern user interface library modeled on GTK+ and Qt,
+ but using curses as its display layer and with widgets that are
+ tailored to a terminal environment.
+ .
+ This package contains the files that are required to run programs
+ compiled against libcwidget.
+Homepage: http://cwidget.alioth.debian.org
+Original-Maintainer: Daniel Burrows <dburrows@debian.org>
+
+Package: libsasl2-modules
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 500
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: cyrus-sasl2
+Version: 2.1.23.dfsg1-5ubuntu1
+Depends: libsasl2-2 (= 2.1.23.dfsg1-5ubuntu1), libc6 (>= 2.4), libssl0.9.8 (>= 0.9.8k-1)
+Suggests: libsasl2-modules-otp, libsasl2-modules-ldap, libsasl2-modules-sql, libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal
+Description: Cyrus SASL - pluggable authentication modules
+ This is the Cyrus SASL API implementation, version 2.1. See package
+ libsasl2-2 and RFC 2222 for more information.
+ .
+ This package provides the following SASL modules: LOGIN, PLAIN, ANONYMOUS,
+ NTLM, CRAM-MD5, and DIGEST-MD5 (with DES support).
+Homepage: http://cyrusimap.web.cmu.edu/
+Original-Maintainer: Debian Cyrus SASL Team <pkg-cyrus-sasl2-debian-devel@lists.alioth.debian.org>
+
+Package: libsasl2-2
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 272
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: cyrus-sasl2
+Version: 2.1.23.dfsg1-5ubuntu1
+Replaces: libsasl2
+Depends: libc6 (>= 2.4), libdb4.8
+Recommends: libsasl2-modules (= 2.1.23.dfsg1-5ubuntu1)
+Conflicts: libsasl2-gssapi-mit (<< 2.1.22), libsasl2-krb4-mit (<< 2.1.22), postfix (<< 2.3.4-3)
+Description: Cyrus SASL - authentication abstraction library
+ This is the Cyrus SASL API implementation, version 2.1.
+ .
+ SASL is the Simple Authentication and Security Layer, a method for
+ adding authentication support to connection-based protocols. To use
+ SASL, a protocol includes a command for identifying and
+ authenticating a user to a server and for optionally negotiating
+ protection of subsequent protocol interactions. If its use is
+ negotiated, a security layer is inserted between the protocol and the
+ connection. See RFC 2222 for more information.
+ .
+ Any of: ANONYMOUS, CRAM-MD5, DIGEST-MD5, GSSAPI (MIT or Heimdal
+ Kerberos 5), NTLM, OTP, PLAIN, or LOGIN can be used. If you intend to
+ use this package on a server that provides SASL authentication, then
+ you must install some of the libsasl2-modules* packages.
+Homepage: http://cyrusimap.web.cmu.edu/
+Original-Maintainer: Debian Cyrus SASL Team <pkg-cyrus-sasl2-debian-devel@lists.alioth.debian.org>
+
+Package: passwd
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 2640
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: shadow
+Version: 1:4.1.4.2-1ubuntu2
+Replaces: manpages-tr (<< 1.0.5), manpages-zh (<< 1.5.1-1)
+Depends: libc6 (>= 2.4), libpam0g (>= 0.99.7.1), libselinux1 (>= 1.32), libpam-modules, debianutils (>= 2.15.2)
+Conffiles:
+ /etc/default/useradd cc9f9a7713ab62a32cd38363d958f396
+ /etc/pam.d/passwd eaf2ad85b5ccd06cceb19a3e75f40c63
+ /etc/pam.d/chfn 4d466e00a348ba426130664d795e8afa
+ /etc/pam.d/chsh a6e9b589e90009334ffd030d819290a6
+ /etc/pam.d/chpasswd 9900720564cb4ee98b7da29e2d183cb2
+ /etc/pam.d/newusers 1454e29bfa9f2a10836563e76936cea5
+Description: change and administer password and group data
+ This package includes passwd, chsh, chfn, and many other programs to
+ maintain password and group data.
+ .
+ Shadow passwords are supported. See /usr/share/doc/passwd/README.Debian
+Homepage: http://pkg-shadow.alioth.debian.org/
+Original-Maintainer: Shadow package maintainers <pkg-shadow-devel@lists.alioth.debian.org>
+
+Package: xfonts-75dpi
+Status: install ok installed
+Priority: optional
+Section: fonts
+Installed-Size: 4476
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 1:1.0.1
+Depends: xfonts-utils
+Suggests: xfs | xserver
+Conffiles:
+ /etc/X11/fonts/75dpi/xfonts-75dpi.alias 6bc48023f2ae7f3bfc105db7b0ee6b49
+Description: 75 dpi fonts for X
+ xfonts-75dpi provides a set of bitmapped fonts at 75 dots per inch. In
+ most cases it is desirable to have the X font server (xfs) and/or an X server
+ installed to make the fonts available to X clients.
+ .
+ This package contains only fonts in the ISO 10646-1 and ISO 8859-1
+ encodings, to conserve disk space. For other encodings, see the
+ xfonts-75dpi-transcoded package.
+ .
+ This package and xfonts-100dpi provide the same set of fonts, rendered at
+ different resolutions; only one or the other is necessary, but both may be
+ installed. xfonts-75dpi may be more suitable for small monitors and/or
+ small screen resolutions (under 1024x768).
+ .
+ This package requires the xfonts-utils package to prepare the font
+ directories for use by an X server or X font server.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: hostname
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 112
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 3.03ubuntu1
+Replaces: nis (<< 3.17-30)
+Pre-Depends: libc6 (>= 2.4), upstart-job
+Conflicts: nis (<< 3.17-30)
+Conffiles:
+ /etc/init/hostname.conf e426591274acd83666295d90a937ee7a
+Description: utility to set/show the host name or domain name
+ This package provides commands which can be used to display the system's
+ DNS name, and to display or set its hostname or NIS domain name.
+Original-Maintainer: Debian Hostname Team <hostname-devel@lists.alioth.debian.org>
+
+Package: xkb-data
+Status: install ok installed
+Priority: extra
+Section: x11
+Installed-Size: 3384
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: xkeyboard-config
+Version: 1.8-1ubuntu8
+Breaks: libx11-6 (<< 2:1.1)
+Description: X Keyboard Extension (XKB) configuration data
+ This package contains configuration data used by the X Keyboard
+ Extension (XKB), which allows selection of keyboard layouts when
+ using a graphical interface.
+ .
+ Every X11 vendor provides its own XKB data files, so keyboard layout
+ designers have to send their layouts to several places. The
+ xkeyboard-config project has been launched at FreeDesktop in order
+ to provide a central repository that could be used by all vendors.
+Homepage: http://www.freedesktop.org/Software/XKeyboardConfig
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: fakeroot
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 372
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.14.4-1ubuntu1
+Depends: libc6 (>= 2.7)
+Description: Gives a fake root environment
+ This package is intended to enable something like:
+ dpkg-buildpackage -rfakeroot
+ i.e. to remove the need to become root for a package build.
+ This is done by setting LD_PRELOAD to libfakeroot.so,
+ which provides wrappers around getuid, chown, chmod, mknod,
+ stat, and so on, thereby creating a fake root environment.
+ .
+ fakeroot requires SYSV IPC or TCP to operate.
+Original-Maintainer: Clint Adams <schizo@debian.org>
+
+Package: libacl1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 92
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: acl
+Version: 2.2.49-2
+Depends: libattr1 (>= 2.4.41-1), libc6 (>= 2.4)
+Conflicts: acl (<< 2.0.0), libacl1-kerberos4kth
+Description: Access control list shared library
+ This package contains the libacl.so dynamic library containing
+ the POSIX 1003.1e draft standard 17 functions for manipulating
+ access control lists.
+Original-Maintainer: Nathan Scott <nathans@debian.org>
+Homepage: http://savannah.nongnu.org/projects/acl/
+
+Package: python2.6-minimal
+Status: install ok installed
+Priority: required
+Section: python
+Installed-Size: 5044
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: python2.6
+Version: 2.6.5-1ubuntu6
+Replaces: python2.6 (<< 2.6.4~rc1-1)
+Depends: libc6 (>= 2.4), libssl0.9.8 (>= 0.9.8k-1), zlib1g (>= 1:1.2.0)
+Recommends: python2.6
+Suggests: binfmt-support
+Conflicts: binfmt-support (<< 1.1.2), python-central (<< 0.6.11ubuntu6)
+Conffiles:
+ /etc/python2.6/sitecustomize.py d6b276695157bde06a56ba1b2bc53670
+Description: A minimal subset of the Python language (version 2.6)
+ This package contains the interpreter and some essential modules. It can
+ be used in the boot process for some basic tasks.
+ See /usr/share/doc/python2.6-minimal/README.Debian for a list of the modules
+ contained in this package.
+Original-Maintainer: Matthias Klose <doko@debian.org>
+Python-Runtime: python2.6
+Python-Version: 2.6
+
+Package: libpam-runtime
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 1248
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: pam
+Version: 1.1.1-2ubuntu2
+Replaces: libpam0g-dev, libpam0g-util
+Depends: debconf (>= 1.5.19), libpam-modules (>= 1.0.1-6)
+Conflicts: libpam0g-util
+Conffiles:
+ /etc/pam.conf 87fc76f18e98ee7d3848f6b81b3391e5
+ /etc/pam.d/other 31aa7f2181889ffb00b87df4126d1701
+Description: Runtime support for the PAM library
+ Contains configuration files and directories required for
+ authentication to work on Debian systems. This package is required
+ on almost all installations.
+Homepage: http://pam.sourceforge.net/
+Original-Maintainer: Steve Langasek <vorlon@debian.org>
+
+Package: libslang2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1520
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: slang2
+Version: 2.2.2-2ubuntu1
+Depends: libc6 (>= 2.4)
+Recommends: libpng12-0
+Description: The S-Lang programming library - runtime version
+ S-Lang is a C programmer's library that includes routines for the rapid
+ development of sophisticated, user friendly, multi-platform applications.
+ .
+ This package contains only the shared library libslang.so.* and copyright
+ information. It is only necessary for programs that use this library (such
+ as jed and slrn). If you plan on doing development with S-Lang, you will
+ need the companion -dev package as well.
+Original-Maintainer: Alastair McKinstry <mckinstry@debian.org>
+
+Package: initscripts
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 336
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: sysvinit
+Version: 2.87dsf-4ubuntu17
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Depends: libc6 (>= 2.4), mount (>= 2.11x-1), debianutils (>= 2.13.1), lsb-base (>= 3.2-14), sysvinit-utils (>= 2.86.ds1-39), sysv-rc | file-rc, passwd, upstart
+Recommends: psmisc, e2fsprogs
+Breaks: hostname (<< 2.95ubuntu1~boot2), rsyslog (<< 4.2.0-2ubuntu3~boot1), udev (<< 146-2~boot6), upstart (<< 0.6.3-2~boot4)
+Conflicts: libdevmapper1.02.1 (<< 2:1.02.24-1)
+Conffiles:
+ /etc/init.d/bootlogd 6e90878c898804bf9059f8a304faed5d
+ /etc/init.d/stop-bootlogd e1a190ec1150ff0c1514eb318be9e227
+ /etc/init.d/stop-bootlogd-single 1046585487345dd2d5d4b2841fb4a75b
+ /etc/init.d/halt 6ae1b3b1b8198567a5e32116077f12a2
+ /etc/init.d/killprocs 5e404d35091fab6c4889302736ed4602
+ /etc/init.d/ondemand cc2a79a545967eec1170dc2bb44468e0
+ /etc/init.d/rc.local 2964c1446c6453cdde4213eede97ac38
+ /etc/init.d/reboot 1b9db1ef7bfd79b128ef85d5065721a6
+ /etc/init.d/sendsigs 2a1f251ca12ef06f46a166f9a37e2400
+ /etc/init.d/single dc13cb373c5c098a8fb95424701373e3
+ /etc/init.d/umountfs 842eba3cdd65c66a424f80a53f87d704
+ /etc/init.d/umountnfs.sh b824a44ff24087eb2bf6780db7dfd9dc
+ /etc/init.d/umountroot aa9aa9db438cc99f76b065827971ff42
+ /etc/init.d/urandom d0385e199d51b19181b77dc55211ac02
+ /etc/default/bootlogd 70a108da715299a6e33470eb450669fb
+ /etc/default/devpts fc857c5ac5fb84d80720ed4d1c624f6e
+ /etc/default/halt 18d9844cf8ca8608e2a559a4555e593a
+ /etc/default/tmpfs d959a98cfb571cd7fdfb36bbb3d0a5c8
+Description: scripts for initializing and shutting down the system
+ The scripts in this package initialize a standard Debian
+ GNU/Linux system at boot time and shut it down at halt or
+ reboot time.
+Homepage: http://freshmeat.net/projects/sysvinit/
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+
+Package: libblkid1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 248
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: util-linux
+Version: 2.17.2-0ubuntu1
+Depends: libc6 (>= 2.4), libuuid1 (>= 2.16)
+Conffiles:
+ /etc/blkid.conf 7f4c49e01e0a23d2f4b20eeb32e95abb
+Description: block device id library
+ The blkid library which allows system programs like fsck and
+ mount to quickly and easily find block devices by filesystem UUID and
+ LABEL. This allows system administrators to avoid specifying
+ filesystems by hard-coded device names, but via a logical naming
+ system instead.
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: xinput
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 92
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.5.0-2ubuntu1
+Depends: libc6 (>= 2.4), libx11-6 (>= 2:1.2.99.901), libxext6, libxi6 (>= 2:1.2.99.4)
+Description: Runtime configuration and test of XInput devices
+ Xinput is an utility for configuring and testing XInput
+ devices.
+Original-Maintainer: Julien Cristau <jcristau@debian.org>
+
+Package: libss2
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 120
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: e2fsprogs
+Version: 1.41.11-1ubuntu2
+Replaces: e2fsprogs (<< 1.34-1)
+Depends: libcomerr2, libc6 (>= 2.11)
+Description: command-line interface parsing library
+ This package includes a tool that parses a command table to generate
+ a simple command-line interface parser, the include files needed to
+ compile and use it, and the static libs.
+ .
+ It was originally inspired by the Multics SubSystem library.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: findutils
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 1892
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 4.4.2-1ubuntu1
+Pre-Depends: libc6 (>= 2.7)
+Suggests: mlocate | locate | slocate
+Description: utilities for finding files--find, xargs
+ GNU findutils provides utilities to find files meeting specified
+ criteria and perform various actions on the files which are found.
+ This package contains 'find' and 'xargs'; however, 'locate' has
+ been split off into a separate package.
+Homepage: http://savannah.gnu.org/projects/findutils/
+Original-Maintainer: Andreas Metzler <ametzler@debian.org>
+
+Package: libxft2
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 152
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: xft
+Version: 2.1.14-1ubuntu1
+Depends: libc6 (>= 2.4), libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.3.5), libx11-6, libxrender1
+Description: FreeType-based font drawing library for X
+ Xft provides a client-side font API for X applications, making the FreeType
+ font rasterizer available to X clients. Fontconfig is used for font
+ specification resolution. Where available, the RENDER extension handles
+ glyph drawing; otherwise, the core X protocol is used.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xz-utils
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 476
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 4.999.9beta+20091116-1
+Depends: libc6 (>= 2.7), liblzma1 (>= 4.999.9beta)
+Conflicts: xz-lzma (<< 4.999.9beta+20091004-1)
+Description: XZ-format compression utilities
+ XZ is the successor to the Lempel-Ziv/Markov-chain Algorithm
+ compression format, which provides memory-hungry but powerful
+ compression (often better than bzip2) and fast, easy decompression.
+ .
+ This package provides the command line tools for working with XZ
+ compression, including xz, unxz, xzcat, xzgrep, and so on. They can
+ also handle the older LZMA format, and if invoked via appropriate
+ symlinks will emulate the behavior of the commands in the lzma
+ package.
+ .
+ The XZ format is similar to the older LZMA format but includes some
+ improvements for general use:
+ .
+ * 'file' magic for detecting XZ files;
+ * crc64 data integrity check;
+ * limited random-access reading support;
+ * improved support for multithreading (not used in xz-utils);
+ * support for flushing the encoder.
+Original-Maintainer: Jonathan Nieder <jrnieder@gmail.com>
+Homepage: http://tukaani.org/xz/
+
+Package: xserver-xorg-video-nouveau
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 296
+Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.0.15+git20100219+9b4118d-0ubuntu5
+Replaces: xserver-xorg (<< 6.8.2-35)
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), libdrm-nouveau1 (>= 2.4.16), xserver-xorg-core (>= 2:1.6.99.900)
+Description: X.Org X server -- Nouveau display driver (experimental)
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for NVIDIA Riva, TNT, GeForce, and Quadro cards.
+ .
+ Although the nouveau project aims to provide full 3D support it is not yet
+ complete, and these packages do not include any 3D support.
+ Users requiring 3D support should use the non-free "nvidia" driver.
+ .
+ This package is built from the FreeDesktop.org xf86-video-nouveau driver.
+Homepage: http://nouveau.freedesktop.org/wiki/
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xfonts-encodings
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 832
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 1:1.0.3-1
+Replaces: xfonts-base (<< 1:1.0.0)
+Depends: x11-common
+Description: Encodings for X.Org fonts
+ This package contains the encodings that map to specific characters.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libx11-6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 1456
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: libx11
+Version: 2:1.3.2-1ubuntu3
+Depends: libc6 (>= 2.4), libxcb1 (>= 1.2), libx11-data
+Conflicts: xlibs-data (<< 1:7.0.0)
+Description: X11 client-side library
+ This package provides a client interface to the X Window System, otherwise
+ known as 'Xlib'. It provides a complete API for the basic functions of the
+ window system.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libX11
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: e2fsprogs
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 2148
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.41.11-1ubuntu2
+Replaces: hurd (<= 20040301-1), libblkid1 (<< 1.38+1.39-WIP-2005.12.10-2), libuuid1 (<< 1.38+1.39-WIP-2005.12.10-2)
+Pre-Depends: e2fslibs (= 1.41.11-1ubuntu2), libblkid1 (>= 1.34-1), libc6 (>= 2.11), libcomerr2 (>= 1.34-1), libss2 (>= 1.34-1), libuuid1 (>= 1.34-1), util-linux (>= 2.15~rc1-1)
+Suggests: gpart, parted, e2fsck-static
+Conflicts: dump (<< 0.4b4-4), initscripts (<< 2.85-4), quota (<< 1.55-8.1), sysvinit (<< 2.85-4)
+Conffiles:
+ /etc/mke2fs.conf 33c2a4bda46c7cee498bb660084492dd
+Description: ext2/ext3/ext4 file system utilities
+ The ext2, ext3 and ext4 file systems are successors of the original ext
+ ("extended") file system. They are the main file system types used for
+ hard disks on Debian and other Linux systems.
+ .
+ This package contains programs for creating, checking, and maintaining
+ ext-based file systems, and the generic fsck wrapper.
+Homepage: http://e2fsprogs.sourceforge.net
+Original-Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
+
+Package: libsigc++-2.0-0c2a
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 100
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libsigc++-2.0
+Version: 2.2.4.2-1
+Replaces: libsigc++-1.9-0, libsigc++-2.0-0, libsigc++-2.0-0c2
+Depends: libc6 (>= 2.2.5), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.1.1)
+Conflicts: libsigc++-1.9-0, libsigc++-2.0-0, libsigc++-2.0-0c2
+Description: type-safe Signal Framework for C++ - runtime
+ This library implements a full callback system for use in widget
+ libraries, abstract interfaces, and general programming. It provides
+ the ability to connect an abstract callback to a class method,
+ function, or function object, and contains adaptor classes for the
+ connection of dissimilar callbacks.
+ .
+ These are the runtime files for libsigc++, needed only if you wish to
+ run software which depends on it.
+Original-Maintainer: Daniel Burrows <dburrows@debian.org>
+
+Package: liblzma1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 288
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: xz-utils
+Version: 4.999.9beta+20091116-1
+Depends: libc6 (>= 2.4)
+Description: XZ-format compression library
+ XZ is the successor to the Lempel-Ziv/Markov-chain Algorithm
+ compression format, which provides memory-hungry but powerful
+ compression (often better than bzip2) and fast, easy decompression.
+ .
+ The native format of liblzma is XZ; it also supports raw (headerless)
+ streams and the older LZMA format used by lzma. (For 7-Zip's related
+ format, use the p7zip package instead.)
+Original-Maintainer: Jonathan Nieder <jrnieder@gmail.com>
+Homepage: http://tukaani.org/xz/
+
+Package: libnih1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 252
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Architecture: amd64
+Source: libnih
+Version: 1.0.1-1
+Depends: libc6 (>> 2.10), libc6 (<< 2.12)
+Description: NIH Utility Library
+ libnih is a light-weight "standard library" of C functions to ease the
+ development of other libraries and applications, especially those
+ normally found in /lib.
+ .
+ This package contains the shared library.
+
+Package: cpp
+Status: install ok installed
+Priority: optional
+Section: interpreters
+Installed-Size: 104
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gcc-defaults (1.93ubuntu1)
+Version: 4:4.4.3-1ubuntu1
+Depends: cpp-4.4 (>= 4.4.3-1)
+Suggests: cpp-doc
+Conflicts: cpp-doc (<< 1:2.95.3)
+Description: The GNU C preprocessor (cpp)
+ The GNU C preprocessor is a macro processor that is used automatically
+ by the GNU C compiler to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+ .
+ This is a dependency package providing the default GNU C preprocessor.
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: libgnutls26
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 1176
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gnutls26
+Version: 2.8.5-2
+Replaces: gnutls0, gnutls0.4, gnutls3
+Depends: libc6 (>= 2.8), libgcrypt11 (>= 1.4.2), libtasn1-3 (>= 1.6-0), zlib1g (>= 1:1.1.4)
+Suggests: gnutls-bin
+Conflicts: gnutls0, gnutls0.4
+Description: the GNU TLS library - runtime library
+ gnutls is a portable library which implements the Transport Layer
+ Security (TLS) 1.0 and Secure Sockets Layer (SSL) 3.0 protocols.
+ .
+ Currently gnutls implements:
+ - the TLS 1.0 and SSL 3.0 protocols, without any US-export
+ controlled algorithms
+ - X509 Public Key Infrastructure (with several limitations).
+ - SRP for TLS authentication.
+ - TLS Extension mechanism
+ .
+ This package contains the runtime libraries.
+Original-Maintainer: Debian GnuTLS Maintainers <pkg-gnutls-maint@lists.alioth.debian.org>
+Homepage: http://www.gnutls.org/
+
+Package: xserver-xorg-video-mga
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 284
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.4.11.dfsg-2ubuntu1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-mga
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Suggests: firmware-linux
+Conflicts: xserver-xorg-driver-mga
+Description: X.Org X server -- MGA display driver
+ This package provides the driver for the Matrox MGA family of chipsets,
+ including Matrox Millennium and Mystique cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-mga driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: insserv
+Status: install ok installed
+Priority: required
+Section: misc
+Installed-Size: 292
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.12.0-14
+Depends: libc6 (>= 2.7)
+Suggests: bootchart
+Breaks: sysv-rc (<< 2.87dsf-3)
+Conffiles:
+ /etc/bash_completion.d/insserv 32975fe14795d6fce1408d5fd22747fd
+ /etc/insserv.conf 9c13a4d5da9cb2c2fa550a30705f041a
+Description: Tool to organize boot sequence using LSB init.d script dependencies
+ The insserv program is used to update the order of symlinks in
+ /etc/rc?.d/ with sysv-rc based on dependencies specified in the
+ scripts themselves using LSB init.d script headers.
+ .
+ This allow each package maintainer to specify their init.d script
+ relation to other scripts and make it possible to detect and reject
+ script dependency loops as well as making sure all scripts start in
+ their intended order.
+ .
+ The program insserv in this package should be used with care and
+ together with the sysv-rc package, as using it incorrectly can lead
+ to an unbootable system.
+Original-Maintainer: Petter Reinholdtsen <pere@debian.org>
+Homepage: http://ftp.suse.com/pub/projects/init/
+
+Package: xserver-xorg-video-i128
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 140
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.3.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-i128
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-i128
+Description: X.Org X server -- i128 display driver
+ This package provides the driver for Number 9 Imagine (I128) video cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-i128 driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: gzip
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 284
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.3.12-9ubuntu1
+Pre-Depends: libc6 (>= 2.4)
+Suggests: less
+Description: GNU compression utilities
+ This package provides the standard GNU file compression utilities, which
+ are also the default compression tools for Debian. They typically operate
+ on files with names ending in '.gz', but can also decompress files ending
+ in '.Z' created with 'compress'.
+Original-Maintainer: Bdale Garbee <bdale@gag.com>
+
+Package: dpkg
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 6728
+Origin: debian
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Bugs: debbugs://bugs.debian.org
+Architecture: amd64
+Version: 1.15.5.6ubuntu4
+Replaces: manpages-de (<= 0.4-3), manpages-pl (<= 20051117-1)
+Pre-Depends: libc6 (>= 2.11), coreutils (>= 5.93-1), lzma
+Suggests: apt
+Breaks: emacs21 (<< 21.4a+1-5.7), emacs21-nox (<< 21.4a+1-5.7), emacs22 (<= 22.2-0ubuntu2), emacs22-gtk (<= 22.2-0ubuntu2), emacs22-nox (<= 22.2-0ubuntu2), jed (<< 1:0.99.18+dfsg.1-13), jed-extra (<= 2.5.3-2), konqueror (<= 4:4.2.96-1), pinfo (<< 0.6.9-3.1), tkinfo (<< 2.8-3.1), xemacs21-support (<< 21.4.22-2), xjed (<< 1:0.99.18+dfsg.1-13)
+Conflicts: apt (<< 0.7.7), aptitude (<< 0.4.7-1), dpkg-dev (<< 1.14.16), dpkg-iasearch (<< 0.11), sysvinit (<< 2.82-1)
+Conffiles:
+ /etc/dpkg/dpkg.cfg f4413ffb515f8f753624ae3bb365b81b
+ /etc/alternatives/README 69c4ba7f08363e998e0f2e244a04f881
+ /etc/cron.daily/dpkg b6b8dc21210ea50db7cc4636f521758f
+ /etc/logrotate.d/dpkg 9e25c8505966b5829785f34a548ae11f
+Description: Debian package management system
+ This package provides the low-level infrastructure for handling the
+ installation and removal of Debian software packages.
+ .
+ For Debian package development tools, install dpkg-dev.
+Homepage: http://wiki.debian.org/Teams/Dpkg
+Original-Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+
+Package: libpcre3
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 456
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: pcre3
+Version: 7.8-3build1
+Depends: libc6 (>= 2.4)
+Conflicts: libpcre3-dev (<= 4.3-3)
+Description: Perl 5 Compatible Regular Expression Library - runtime files
+ This is a library of functions to support regular expressions whose syntax
+ and semantics are as close as possible to those of the Perl 5 language.
+ .
+ This package contains the runtime libraries.
+Original-Maintainer: Mark Baker <mark@mnb.org.uk>
+
+Package: aptitude
+Status: install ok installed
+Priority: important
+Section: admin
+Installed-Size: 9828
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 0.4.11.11-1ubuntu10
+Depends: libapt-pkg-libc6.10-6-4.8, libc6 (>= 2.4), libcwidget3, libept0 (>= 0.5.30), libgcc1 (>= 1:4.1.1), libncursesw5 (>= 5.6+20071006-3), libsigc++-2.0-0c2a (>= 2.0.2), libstdc++6 (>= 4.4.0), libxapian15, zlib1g (>= 1:1.1.4)
+Recommends: libparse-debianchangelog-perl
+Suggests: aptitude-doc-en | aptitude-doc, tasksel, debtags
+Conffiles:
+ /etc/apt/apt.conf.d/05aptitude 85b39c8f9413a8f29ddcce844d026929
+ /etc/cron.daily/aptitude f934222d5eb13cb132e2751bdb023318
+ /etc/logrotate.d/aptitude fb66bc5dc8c13edbcb83cea15ff86959
+Description: terminal-based package manager
+ aptitude is a terminal-based package manager with a number of useful
+ features, including: a mutt-like syntax for matching packages in a
+ flexible manner, dselect-like persistence of user actions, the
+ ability to retrieve and display the Debian changelog of most
+ packages, and a command-line mode similar to that of apt-get.
+ .
+ aptitude is also Y2K-compliant, non-fattening, naturally cleansing,
+ and housebroken.
+Original-Maintainer: Daniel Burrows <dburrows@debian.org>
+
+Package: libept0
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 528
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libept
+Version: 0.5.30
+Depends: libapt-pkg-libc6.10-6-4.8, libc6 (>= 2.8), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0), libxapian15, zlib1g (>= 1:1.1.4)
+Description: High-level library for managing Debian package information
+ The library defines a very minimal framework in which many sources of data
+ about Debian packages can be implemented and queried together.
+ .
+ The library includes four data sources:
+ .
+ * APT: access the APT database
+ * Debtags: access the Debtags tag information
+ * Popcon: access Popcon package scores
+ * The Xapian index built by apt-xapian-index
+ .
+ This is the shared library.
+Original-Maintainer: Enrico Zini <enrico@debian.org>
+
+Package: libncursesw5
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 556
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: ncurses
+Version: 5.7+20090803-2ubuntu3
+Depends: libc6 (>= 2.4)
+Recommends: libgpm2
+Description: shared libraries for terminal handling (wide character support)
+ This package contains the shared libraries necessary to run programs
+ compiled with ncursesw, which includes support for wide characters.
+Homepage: ftp://invisible-island.net/ncurses/
+Original-Maintainer: Debian QA Group <packages@qa.debian.org>
+
+Package: liblocale-gettext-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 108
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1.05-6
+Depends: libc6 (>= 2.2.5)
+Pre-Depends: perl-base (>= 5.10.0-24ubuntu4), perlapi-5.10.0
+Description: Using libc functions for internationalization in Perl
+ The gettext module permits access from perl to the gettext() family of
+ functions for retrieving message strings from databases constructed
+ to internationalize software.
+ .
+ It provides gettext(), dgettext(), dcgettext(), textdomain(),
+ bindtextdomain(), bind_textdomain_codeset(), ngettext(), dcngettext()
+ and dngettext().
+Original-Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
+Homepage: http://search.cpan.org/dist/gettext/gettext.pm
+
+Package: ubuntu-keyring
+Status: install ok installed
+Priority: important
+Section: misc
+Installed-Size: 60
+Maintainer: Michael Vogt <michael.vogt@canonical.com>
+Architecture: all
+Version: 2010.11.09
+Depends: gnupg (>= 1.0.6-4)
+Description: GnuPG keys of the Ubuntu archive
+ The Ubuntu project digitally signs its Release files. This package
+ contains the archive keys used for that.
+
+Package: xbitmaps
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 476
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 1.1.0-1
+Description: Base X bitmaps
+ This package contains the base X bitmaps, which are used in many legacy X
+ clients.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: busybox-initramfs
+Status: install ok installed
+Priority: required
+Section: shells
+Installed-Size: 344
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: busybox
+Version: 1:1.13.3-1ubuntu11
+Replaces: busybox-cvs-initramfs
+Depends: libc6 (>= 2.11)
+Conflicts: busybox-cvs-initramfs
+Description: Standalone shell setup for initramfs
+ BusyBox combines tiny versions of many common UNIX utilities into a single
+ small executable. It provides minimalist replacements for the most common
+ utilities you would usually find on your desktop system (i.e., ls, cp, mv,
+ mount, tar, etc.). The utilities in BusyBox generally have fewer options than
+ their full-featured GNU cousins; however, the options that are included
+ provide the expected functionality and behave very much like their GNU
+ counterparts.
+ .
+ busybox-initramfs provides a statically linked simple stand alone shell
+ that provides only the basic utilities needed for the initramfs.
+Original-Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+
+Package: xserver-xorg-video-s3
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 148
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:0.6.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-s3
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-s3
+Description: X.Org X server -- legacy S3 display driver
+ This package provides the driver for certain legacy S3 video card chipsets,
+ including the Trio64 and 96x cards. It does not provide support for
+ ViRGE/Trio3D or Savage chipsets; support for these cards is provided by
+ xserver-xorg-video-s3virge and xserver-xorg-driver-savage, respectively.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-s3 driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: ttf-dejavu-core
+Status: install ok installed
+Priority: optional
+Section: fonts
+Installed-Size: 2564
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: ttf-dejavu
+Version: 2.30-2
+Replaces: ttf-dejavu (<< 2.20-1)
+Conflicts: ttf-dejavu (<< 2.20-1)
+Description: Vera font family derivative with additional characters
+ DejaVu provides an expanded version of the Vera font family aiming for
+ quality and broader Unicode coverage while retaining the original Vera
+ style. DejaVu currently works towards conformance with the Multilingual
+ European Standards (MES-1 and MES-2) for Unicode coverage. The DejaVu
+ fonts provide serif, sans and monospaced variants.
+ .
+ This package only contains the sans, sans-bold, serif, serif-bold,
+ mono and mono-bold variants. For additional variants, see the
+ ttf-dejavu-extra package.
+ .
+ DejaVu fonts are intended for use on low-resolution devices (mainly
+ computer screens) but can be used in printing as well.
+Original-Maintainer: Debian Fonts Task Force <pkg-fonts-devel@lists.alioth.debian.org>
+Homepage: http://dejavu-fonts.org/
+
+Package: xserver-xorg-video-trident
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 244
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.3.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-trident
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-trident
+Description: X.Org X server -- Trident display driver
+ This package provides the driver for Trident Blade/Image/ProVidia/TGUI/9xxx
+ video cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-trident driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libbz2-1.0
+Status: install ok installed
+Priority: important
+Section: libs
+Installed-Size: 128
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: bzip2
+Version: 1.0.5-4
+Depends: libc6 (>= 2.4)
+Description: high-quality block-sorting file compressor library - runtime
+ This package contains libbzip2 which is used by the bzip2 compressor.
+ .
+ bzip2 is a freely available, patent free, high-quality data compressor.
+ It typically compresses files to within 10% to 15% of the best available
+ techniques, whilst being around twice as fast at compression and six
+ times faster at decompression.
+ .
+ bzip2 compresses files using the Burrows-Wheeler block-sorting text
+ compression algorithm, and Huffman coding. Compression is generally
+ considerably better than that achieved by more conventional
+ LZ77/LZ78-based compressors, and approaches the performance of the PPM
+ family of statistical compressors.
+ .
+ The archive file format of bzip2 (.bz2) is incompatible with that of its
+ predecessor, bzip (.bz).
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://www.bzip.org/
+
+Package: xserver-xorg-video-chips
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 232
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.2.2-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-chips
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-chips
+Description: X.Org X server -- Chips display driver
+ This package provides the driver for the Chips & Technologies family
+ of video cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-chips driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-intel
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 1688
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2:2.9.1-3ubuntu5
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-i810, xserver-xorg-video-i810 (<< 2:1.9.91-1), xserver-xorg-video-i810-modesetting, xserver-xorg-video-intel-modesetting
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), libdrm-intel1 (>= 2.4.11), libdrm2 (>= 2.4.3), libpciaccess0 (>= 0.8.0+git20071002), libxext6 (>= 0), libxfixes3 (>= 1:4.0.1), libxv1, libxvmc1, xserver-xorg-core (>= 2:1.6.99.900)
+Recommends: intel-gpu-tools
+Conflicts: 915resolution, xserver-xorg-driver-i810, xserver-xorg-video-i810 (<< 2:1.9.91-1), xserver-xorg-video-i810-modesetting, xserver-xorg-video-intel-modesetting
+Description: X.Org X server -- Intel i8xx, i9xx display driver
+ This package provides the driver for the Intel i8xx and i9xx family
+ of chipsets, including i810, i815, i830, i845, i855, i865, i915, i945
+ and i965 series chips.
+ .
+ This package also provides XvMC (XVideo Motion Compensation) drivers
+ for i810/i815 and i9xx and newer chipsets.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-intel driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-mach64
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 388
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 6.8.2-2
+Replaces: xserver-xorg-video-ati (<= 1:6.8.0-1)
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-video-ati (<= 1:6.8.0-1)
+Description: X.Org X server -- ATI Mach64 display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for the ATI Mach64 series.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-mach64 driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: console-terminus
+Status: install ok installed
+Priority: optional
+Section: fonts
+Installed-Size: 784
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: xfonts-terminus
+Version: 4.30-2
+Recommends: kbd | console-tools
+Suggests: console-setup
+Conflicts: console-cyrillic (<= 0.9-11)
+Description: Fixed-width fonts for fast reading on the Linux console
+ This package installs in /usr/share/consolefonts several console
+ variants of the Terminus font. If you have to work for extended time
+ in front of monitor (i.e. over eight hours), you may find that using
+ of these fonts reduces your eyes-fatigue.
+ .
+ The following charsets are supported: western European Latin, central
+ European Latin, Turkish Latin, Romanian Latin, Slavic Cyrillic and
+ Asian Cyrillic (Bashkyr, Kazakh, Mongolian and others).
+Original-Maintainer: Anton Zinoviev <zinoviev@debian.org>
+
+Package: libdrm-intel1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 476
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: libdrm
+Version: 2.4.18-1ubuntu3
+Depends: libc6 (>= 2.3.4), libdrm2 (>= 2.4.1)
+Description: Userspace interface to intel-specific kernel DRM services -- runtime
+ This library implements the userspace interface to the intel-specific kernel
+ DRM services. DRM stands for "Direct Rendering Manager", which is the
+ kernelspace portion of the "Direct Rendering Infrastructure" (DRI). The DRI is
+ currently used on Linux to provide hardware-accelerated OpenGL drivers.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libpciaccess0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 112
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libpciaccess
+Version: 0.11.0-1
+Depends: libc6 (>= 2.7), zlib1g (>= 1:1.1.4)
+Suggests: pciutils
+Description: Generic PCI access library for X
+ Provides functionality for X to access the PCI bus and devices
+ in a platform-independent way.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libc-bin
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1784
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: eglibc
+Version: 2.11.1-0ubuntu7
+Replaces: libc0.1, libc0.3, libc6, libc6.1
+Breaks: libc0.1 (<< 2.10), libc0.3 (<< 2.10), libc6 (<< 2.10), libc6.1 (<< 2.10)
+Conffiles:
+ /etc/bindresvport.blacklist 154db0e55fa99051ff1bd99e5b2c0584
+ /etc/ld.so.conf.d/libc.conf d4d833fd095fb7b90e1bb4a547f16de6
+ /etc/gai.conf 4b3389be7132a6a8805f3df8d0ff00f6
+Description: Embedded GNU C Library: Binaries
+ This package contains utility programs related to the GNU C Library.
+ .
+ * catchsegv: catch segmentation faults in programs
+ * getconf: query system configuration variables
+ * getent: get entries from administrative databases
+ * iconv, iconvconfig: convert between character encodings
+ * ldd, ldconfig: print/configure shared library dependencies
+ * locale, localedef: show/generate locale definitions
+ * rpcinfo: report RPC information
+ * tzselect, zdump, zic: select/dump/compile time zones
+Homepage: http://www.eglibc.org
+Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+
+Package: libldap-2.4-2
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 496
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: openldap
+Version: 2.4.21-0ubuntu5
+Replaces: libldap-2.3-0, libldap2
+Depends: libc6 (>= 2.4), libgnutls26 (>= 2.7.14-0), libgssapi-krb5-2 (>= 1.7+dfsg), libsasl2-2
+Conflicts: ldap-utils (<= 2.1.23-1)
+Conffiles:
+ /etc/ldap/ldap.conf 7fac807f65d84394410881bc16f1198a
+Description: OpenLDAP libraries
+ These are the run-time libraries for the OpenLDAP (Lightweight Directory
+ Access Protocol) servers and clients.
+Homepage: http://www.openldap.org/
+Original-Maintainer: Debian OpenLDAP Maintainers <pkg-openldap-devel@lists.alioth.debian.org>
+
+Package: sysvinit-utils
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 300
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: sysvinit
+Version: 2.87dsf-4ubuntu17
+Replaces: last, sysvconfig (<< 0.80ubuntu1), sysvinit (<= 2.86.ds1-65), sysvutils (<< 2.86.ds1-56ubuntu1)
+Provides: sysvutils
+Depends: libc6 (>= 2.8), libselinux1 (>= 1.32), libsepol1 (>= 1.14)
+Recommends: upstart (>= 0.6.3-4)
+Suggests: sash
+Conflicts: chkconfig (<< 11.0-79.1-1ubuntu1), last, sysvconfig
+Description: System-V-like utilities
+ This package contains the important System-V-like utilities.
+ .
+ Specifically, this package includes:
+ killall5, last, lastb, mesg, pidof, service, sulogin
+Homepage: http://freshmeat.net/projects/sysvinit/
+Original-Maintainer: Debian sysvinit maintainers <pkg-sysvinit-devel@lists.alioth.debian.org>
+
+Package: xserver-xorg-input-all
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 24
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Source: xorg
+Version: 1:7.5+5ubuntu1
+Depends: xserver-xorg-input-evdev, xserver-xorg-input-synaptics, xserver-xorg-input-vmmouse, xserver-xorg-input-wacom, x11-common
+Description: the X.Org X server -- input driver metapackage
+ This package depends on the full suite of input drivers for the X.Org X server
+ (Xorg). It does not provide any drivers itself, and may be removed if you wish
+ to only have certain drivers installed.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: fontconfig-config
+Status: install ok installed
+Priority: optional
+Section: fonts
+Installed-Size: 428
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: fontconfig
+Version: 2.8.0-2ubuntu1
+Replaces: fontconfig (<< 2.3.2-2)
+Depends: ucf (>= 0.29), ttf-dejavu-core | ttf-bitstream-vera | ttf-freefont | gsfonts-x11
+Conflicts: fontconfig (<< 2.3.2-2)
+Conffiles:
+ /etc/fonts/fonts.conf 4c841acd3dd065819b23a0fc077d783c
+ /etc/fonts/fonts.dtd 9a099c7722190e00548c0d8375bdc24b
+ /etc/fonts/conf.d/README 296384642206e0c9952d5c73a5451eec
+ /etc/fonts/conf.avail/10-antialias.conf d77e6cfb9608490da012671c25213fe4
+ /etc/fonts/conf.avail/10-autohint.conf 5fe723b1fde478085868af26461bcf58
+ /etc/fonts/conf.avail/10-hinting-full.conf 65b0e8b7e1392797850856d8411d7272
+ /etc/fonts/conf.avail/10-hinting-medium.conf b663214dd84d0f5c4e279b153e0b38f9
+ /etc/fonts/conf.avail/10-hinting-slight.conf 4d7df8529053d526a503b472ee42b2b3
+ /etc/fonts/conf.avail/10-hinting.conf 4d1fb88a99c516270526c8dca5764df8
+ /etc/fonts/conf.avail/10-no-sub-pixel.conf d06c13e792afb20a06528d23e6542459
+ /etc/fonts/conf.avail/10-sub-pixel-bgr.conf cacb7572b778448d592501d03a7f96fd
+ /etc/fonts/conf.avail/10-sub-pixel-rgb.conf 60ef22ca1f56543131eddee764383b46
+ /etc/fonts/conf.avail/10-sub-pixel-vbgr.conf d526b41cd9b4d5e09ab4044a39b4c038
+ /etc/fonts/conf.avail/10-sub-pixel-vrgb.conf a3198f34365f978c1fb5355a92e4ef94
+ /etc/fonts/conf.avail/10-unhinted.conf 7bdecdf76d7bb22cd39e3b18bcbcc28d
+ /etc/fonts/conf.avail/11-lcd-filter-lcddefault.conf 34d7cffd14602241d09f23b0d1a39521
+ /etc/fonts/conf.avail/20-fix-globaladvance.conf fbad2da072b8609477d89a59a167705a
+ /etc/fonts/conf.avail/20-unhint-small-vera.conf b975a96cc427cde633cbdedc4012aa22
+ /etc/fonts/conf.avail/25-unhint-nonlatin.conf 62953912e2a45ea9a1ef4d8a400b2894
+ /etc/fonts/conf.avail/30-metric-aliases.conf 64accc211b62e4fb7da141d8c1c271b3
+ /etc/fonts/conf.avail/30-urw-aliases.conf c6c33cfde9f637e1d2b8cad9353df6dc
+ /etc/fonts/conf.avail/40-nonlatin.conf c78f533d9546bfc3a78f85d96f9eccf7
+ /etc/fonts/conf.avail/45-latin.conf 8d9a57e7891ecc9d6f0806a3e7c204a1
+ /etc/fonts/conf.avail/49-sansserif.conf 22278b0b48e5864d9c7fcbc178da0db3
+ /etc/fonts/conf.avail/50-user.conf 0165add6524289f6eb0461ba0be73be2
+ /etc/fonts/conf.avail/51-local.conf a2fa562c168c2c4cc0c2480bfdc0f8eb
+ /etc/fonts/conf.avail/53-monospace-lcd-filter.conf a6737024098d0bdc74b70846d4b99fe9
+ /etc/fonts/conf.avail/60-latin.conf 2a898e836efee4347362e1e7f09cd0d6
+ /etc/fonts/conf.avail/65-fonts-persian.conf 7df3a06989afcf1ecd9a8f44c9bf5d63
+ /etc/fonts/conf.avail/65-khmer.conf ce66ea0c26f43091ab70092f3f7024d4
+ /etc/fonts/conf.avail/65-nonlatin.conf 12a4cb7a2d642497f73f338abf988235
+ /etc/fonts/conf.avail/69-unifont.conf 49a6cb52e1cf23e0f691807a3e8c105d
+ /etc/fonts/conf.avail/70-no-bitmaps.conf dccfa658875eea3b30514d7a8bc306bc
+ /etc/fonts/conf.avail/70-yes-bitmaps.conf 91c414090c7d8bfe557785fe845cb6bd
+ /etc/fonts/conf.avail/80-delicious.conf 1c0cbfdceb6bc7a55668c11f03b0710b
+ /etc/fonts/conf.avail/90-synthetic.conf 7659edb861f44ff8e9f4e31567d24e47
+ /etc/fonts/conf.avail/70-force-bitmaps.conf 6423e63e204d4ea4629cd3f58636fcdc
+Description: generic font configuration library - configuration
+ Fontconfig is a font configuration and customization library, which
+ does not depend on the X Window System. It is designed to locate
+ fonts within the system and select them according to requirements
+ specified by applications.
+ .
+ This package contains the configuration files and scripts for fontconfig.
+Original-Maintainer: Keith Packard <keithp@debian.org>
+
+Package: libxtst6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 84
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxtst
+Version: 2:1.1.0-2
+Depends: libc6 (>= 2.4), libx11-6, libxext6, libxi6, x11-common
+Description: X11 Testing -- Resource extension library
+ libXtst provides an X Window System client interface to the Record
+ extension to the X protocol.
+ .
+ The Record extension allows X clients to synthesise input events, which
+ is useful for automated testing.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXtst
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-input-mouse
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 160
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.5.0-1
+Replaces: xserver-xorg (<< 6.8.2-35)
+Provides: xserver-xorg-input-7
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Description: X.Org X server -- mouse input driver
+ This package provides the driver for mouse input devices.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-input-mouse driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libice6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 156
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libice
+Version: 2:1.0.6-1
+Depends: libc6 (>= 2.4), x11-common
+Description: X11 Inter-Client Exchange library
+ This package provides the main interface to the X11 Inter-Client Exchange
+ library, which allows for communication of data between X clients.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libICE
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libnih-dbus1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 80
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Architecture: amd64
+Source: libnih
+Version: 1.0.1-1
+Depends: libnih1 (= 1.0.1-1), libc6 (>= 2.3.4), libdbus-1-3 (>= 1.2.16)
+Description: NIH D-Bus Bindings Library
+ libnih-dbus is a D-Bus bindings library that integrates with the main
+ loop provided by libnih.
+ .
+ This package contains the shared library.
+
+Package: libx11-data
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 2500
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: all
+Source: libx11
+Version: 2:1.3.2-1ubuntu3
+Replaces: libx11-6 (<= 2:1.0.0-1)
+Description: X11 client-side library
+ This package provides the locale data files for libx11.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libX11
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libselinux1
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 228
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libselinux
+Version: 2.0.89-4
+Depends: libc6 (>= 2.8)
+Description: SELinux runtime shared libraries
+ This package provides the shared libraries for Security-enhanced
+ Linux that provides interfaces (e.g. library functions for the
+ SELinux kernel APIs like getcon(), other support functions like
+ getseuserbyname()) to SELinux-aware applications. Security-enhanced
+ Linux is a patch of the Linux kernel and a number of utilities with
+ enhanced security functionality designed to add mandatory access
+ controls to Linux. The Security-enhanced Linux kernel contains new
+ architectural components originally developed to improve the security
+ of the Flask operating system. These architectural components provide
+ general support for the enforcement of many kinds of mandatory access
+ control policies, including those based on the concepts of Type
+ Enforcement, Role-based Access Control, and Multi-level Security.
+ .
+ libselinux1 provides an API for SELinux applications to get and set
+ process and file security contexts and to obtain security policy
+ decisions. Required for any applications that use the SELinux
+ API. libselinux may use the shared libsepol to manipulate the binary
+ policy if necessary (e.g. to downgrade the policy format to an older
+ version supported by the kernel) when loading policy.
+Original-Maintainer: Manoj Srivastava <srivasta@debian.org>
+
+Package: libc6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 10208
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: eglibc
+Version: 2.11.1-0ubuntu7
+Replaces: belocs-locales-bin
+Provides: glibc-2.10-1
+Depends: libc-bin (= 2.11.1-0ubuntu7), debconf (>= 0.5) | debconf-2.0, libgcc1, tzdata, findutils (>= 4.4.0-2ubuntu2)
+Suggests: glibc-doc, locales
+Breaks: nscd (<< 2.9)
+Conflicts: belocs-locales-bin, tzdata (<< 2007k-1), tzdata-etch
+Conffiles:
+ /etc/ld.so.conf.d/x86_64-linux-gnu.conf 593ad12389ab2b6f952e7ede67b8fbbf
+Description: Embedded GNU C Library: Shared libraries
+ Contains the standard libraries that are used by nearly all programs on
+ the system. This package includes shared versions of the standard C library
+ and the standard math library, as well as many others.
+Homepage: http://www.eglibc.org
+Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+
+Package: xserver-xorg-video-nv
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 304
+Maintainer: Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:2.1.15-1ubuntu3
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-nv, xserver-xorg-video-riva128
+Provides: xf86-video-driver-riva128, xserver-xorg-video-6
+Depends: libc6 (>= 2.4), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-nv, xserver-xorg-video-riva128
+Description: X.Org X server -- NV display driver
+ This driver for the X.Org X server (see xserver-xorg for a further description)
+ provides support for NVIDIA Riva, TNT, GeForce, and Quadro cards.
+ .
+ Note that this is not the same as the binary-only 'nvidia' driver, which
+ adds 3D support, but is binary-only and not supported.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-nv driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libsm6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 92
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libsm
+Version: 2:1.1.1-1
+Depends: libc6 (>= 2.4), libice6 (>= 1:1.0.0), libuuid1 (>= 2.16-1)
+Description: X11 Session Management library
+ This package provides the main interface to the X11 Session Management
+ library, which allows for applications to both manage sessions, and make use
+ of session managers to save and restore their state for later use.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libSM
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libxxf86vm1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 76
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxxf86vm
+Version: 1:1.1.0-2
+Depends: libc6 (>= 2.2.5), libx11-6, libxext6
+Description: X11 XFree86 video mode extension library
+ libXxf86vm provides an interface to the XFree86-VidModeExtension
+ extension, which allows client applications to get and set video mode
+ timings in extensive detail. It is used by the xvidtune program in
+ particular.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXxf86vm
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libpng12-0
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 336
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libpng
+Version: 1.2.42-1ubuntu2
+Replaces: libpng12-dev (<= 1.2.8rel-7)
+Depends: libc6 (>= 2.11), zlib1g (>= 1:1.1.4)
+Conflicts: libpng12-dev (<= 1.2.8rel-7), mzscheme (<= 1:209-5), pngcrush (<= 1.5.10-2), pngmeta (<= 1.11-3), povray-3.5 (<= 3.5.0c-10), qemacs (<= 0.3.1-5)
+Description: PNG library - runtime
+ libpng is a library implementing an interface for reading and writing
+ PNG (Portable Network Graphics) format files.
+ .
+ This package contains the runtime library files needed to run software
+ using libpng.
+Homepage: http://libpng.org/pub/png/libpng.html
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+
+Package: udev
+Status: install ok installed
+Priority: required
+Section: admin
+Installed-Size: 1584
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Architecture: amd64
+Version: 151-12
+Replaces: hotplug, ifrename, initramfs-tools (<< 0.040ubuntu1), udev-extras (<= 20090618)
+Depends: libacl1 (>= 2.2.11-1), libc6 (>= 2.9), libglib2.0-0 (>= 2.16.0), libselinux1 (>= 1.32), libusb-0.1-4 (>= 2:0.1.12), upstart-job, module-init-tools (>= 3.2.1-0ubuntu3), initramfs-tools (>= 0.92bubuntu63), procps, adduser, util-linux (>> 2.15~rc2)
+Suggests: watershed
+Breaks: casper (<< 1.174), consolekit (<= 0.4.1), dmsetup (<= 2:1.02.27-4ubuntu5), initramfs-tools (<< 0.92bubuntu30), lvm2 (<= 2.02.39-0ubuntu9), mdadm (<= 2.6.7.1-1ubuntu8)
+Conflicts: hotplug, ifrename, libdevmapper1.02 (<< 2:1.02.08-1ubuntu7), udev-extras (<= 20090618)
+Conffiles:
+ /etc/udev/rules.d/README 3b6de9f3f911176734c66903b4f8735c
+ /etc/udev/udev.conf 8b024b79a468658332fbf2586737907e
+ /etc/init/udev.conf 57d33a5ba9c438b3be4275e908213535
+ /etc/init/udev-finish.conf 28ebb3ad2d2c6ca545d72f3f0769f448
+ /etc/init/udevtrigger.conf 16f1ef5e6e1a9c589fa6993af7ea9ff5
+ /etc/init/udevmonitor.conf b541dfb5aa4958e9a5336ecaec00ca15
+Description: rule-based device node and kernel event manager
+ udev is a collection of tools and a daemon to manage events received from
+ the kernel and deal with them in user-space. Primarily this involves
+ creating and removing device nodes in /dev when hardware is discovered or
+ removed from the system.
+ .
+ Events are received via kernel netlink messaged and processed according to
+ rules in /etc/udev/rules.d and /lib/udev/rules.d, altering the name of the
+ device node, creating additional symlinks or calling other tools and programs
+ including those to load kernel modules and initialise the device.
+
+Package: libpixman-1-0
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 504
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: pixman
+Version: 0.16.4-1ubuntu2
+Depends: libc6 (>= 2.4)
+Description: pixel-manipulation library for X and cairo
+ A library for manipulating pixel regions -- a set of Y-X banded
+ rectangles, image compositing using the Porter/Duff model
+ and implicit mask generation for geometric primitives including
+ trapezoids, triangles, and rectangles.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: bash
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: shells
+Installed-Size: 3612
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 4.1-2ubuntu3
+Replaces: bash-completion (<< 20060301-0), bash-doc (<= 2.05-1)
+Depends: base-files (>= 2.1.12), debianutils (>= 2.15)
+Pre-Depends: dash, libc6 (>= 2.11), libncurses5 (>= 5.6+20071006-3)
+Recommends: bash-completion (>= 20060301-0)
+Suggests: bash-doc
+Conflicts: bash-completion (<< 20060301-0)
+Conffiles:
+ /etc/skel/.bashrc 65c464307b8370db7fd43189f237dbd6
+ /etc/skel/.profile ecb6d3479ac3823f1da7f314d871989b
+ /etc/skel/.bash_logout 22bfb8c1dd94b5f3813a2b25da67463f
+ /etc/bash.bashrc 856b64d15f052027a6807413e9035d3f
+Description: The GNU Bourne Again SHell
+ Bash is an sh-compatible command language interpreter that executes
+ commands read from the standard input or from a file. Bash also
+ incorporates useful features from the Korn and C shells (ksh and csh).
+ .
+ Bash is ultimately intended to be a conformant implementation of the
+ IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
+ .
+ The Programmable Completion Code, by Ian Macdonald, is now found in
+ the bash-completion package.
+Homepage: http://tiswww.case.edu/php/chet/bash/bashtop.html
+Original-Maintainer: Matthias Klose <doko@debian.org>
+
+Package: make
+Status: install ok installed
+Priority: standard
+Section: devel
+Installed-Size: 1224
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: make-dfsg
+Version: 3.81-7ubuntu1
+Suggests: make-doc
+Description: An utility for Directing compilation.
+ GNU Make is an utility which controls the generation of executables and
+ other target files of a program from the program's source files. It
+ determines automatically which pieces of a large program need to be
+ (re)created, and issues the commands to (re)create them. Make is not
+ limited to programs and executable, it can be applied to any task
+ where a set of target files must be created based on a set of input
+ files, based on dependency and processing rules. Indeed, Make is a
+ general purpose dependency solver.
+Original-Maintainer: Manoj Srivastava <srivasta@debian.org>
+Homepage: http://www.gnu.org/software/make/
+
+Package: util-linux
+Essential: yes
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 2344
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2.17.2-0ubuntu1
+Replaces: e2fsprogs (<= 1.41.8-1ubuntu1), fdisk, linux32, miscutils, schedutils, setterm, sparc-utils
+Provides: linux32, schedutils
+Depends: upstart-job, lsb-base (>= 3.0-6), tzdata (>= 2006c-2), dpkg (>= 1.15.4) | install-info
+Pre-Depends: libblkid1 (>= 2.17), libc6 (>= 2.11), libncurses5 (>= 5.6+20071006-3), libselinux1 (>= 1.32), libslang2 (>= 2.0.7-1), libuuid1 (>= 2.16), zlib1g (>= 1:1.1.4)
+Suggests: util-linux-locales, kbd | console-tools, dosfstools
+Breaks: udev (<< 136-1)
+Conflicts: console-tools (<< 1:0.2.3-21), fdisk, kbd (<< 1.05-3), linux32, schedutils, setterm
+Conffiles:
+ /etc/init/hwclock.conf 132aa3db7e5a8cf55168e4866052208a
+ /etc/init/hwclock-save.conf 4a002046525e338fc23e4418602865c9
+Description: Miscellaneous system utilities
+ This package contains a number of important utilities, most of which
+ are oriented towards maintenance of your system. Some of the more
+ important utilities included in this package allow you to partition
+ your hard disk, view kernel messages, and create new filesystems.
+Original-Maintainer: LaMont Jones <lamont@debian.org>
+
+Package: libxcursor1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 92
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxcursor
+Version: 1:1.1.10-1
+Depends: libc6 (>= 2.4), libx11-6, libxfixes3 (>= 1:4.0.1), libxrender1
+Description: X cursor management library
+ Xcursor is a simple library designed to help locate and load cursors for the
+ X Window System. Cursors can be loaded from files or memory and can exist in
+ several sizes; the library automatically picks the best size. When using
+ images loaded from files, Xcursor prefers to use the Render extension's
+ CreateCursor request for rendering cursors. Where the Render extension is
+ not supported, Xcursor maps the cursor image to a standard X cursor and uses
+ the core X protocol CreateCursor request.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xfonts-utils
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 528
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:7.5+2
+Replaces: fonttosfnt (<< 1.0.4), xutils (<< 1:1.0.1-1)
+Depends: libc6 (>= 2.8), libfontenc1, libfreetype6 (>= 2.2.1), libxfont1 (>= 1:1.2.9), zlib1g (>= 1:1.1.4), x11-common, xfonts-encodings
+Description: X Window System font utility programs
+ xfonts-utils provides a set of utility programs shipped with the X Window
+ System that are needed for font management.
+ .
+ The programs in this package include:
+ - bdftopcf, which converts BDF fonts to PCF fonts;
+ - bdftruncate and ucs2any, tools to generate fonts with various encodings
+ from ISO 10646-encoded fonts
+ - mkfontdir, a program to generate fonts.dir files;
+ - mkfontscale, a program to generate fonts.scale files;
+ - fonttosfnt, a program to wrap bitmap fonts in a sfnt (TrueType) wrapper.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libfontenc1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 88
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libfontenc
+Version: 1:1.0.5-1
+Depends: libc6 (>= 2.7), zlib1g (>= 1:1.1.4)
+Description: X11 font encoding library
+ libfontenc is a library which helps font libraries portably determine
+ and deal with different encodings of fonts.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libfontenc
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: cpio
+Status: install ok installed
+Priority: required
+Section: utils
+Installed-Size: 872
+Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2.10-1ubuntu2
+Replaces: cpio-mt
+Depends: libc6 (>= 2.6)
+Conflicts: cpio-mt, mt-st (<< 0.6)
+Description: GNU cpio -- a program to manage archives of files
+ GNU cpio is a tool for creating and extracting archives, or copying
+ files from one place to another. It handles a number of cpio formats
+ as well as reading and writing tar files.
+Original-Maintainer: Clint Adams <schizo@debian.org>
+
+Package: libstdc++6
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 1268
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gcc-4.4
+Version: 4.4.3-4ubuntu5
+Depends: gcc-4.4-base (= 4.4.3-4ubuntu5), libc6 (>= 2.4), libgcc1
+Conflicts: scim (<< 1.4.2-1)
+Description: The GNU Standard C++ Library v3
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+ .
+ libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
+ was included up to g++-2.95. The first version of libstdc++-v3 appeared
+ in g++-3.0.
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: x11-xfs-utils
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 132
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 7.4+1build2
+Replaces: fslsfonts, fstobdf, showfont, xbase-clients (<= 1:7.2.ds2-3), xfsinfo, xutils (<= 1:7.1.ds.3-1)
+Depends: libc6 (>= 2.4), libfs6, libx11-6 (>= 0)
+Pre-Depends: x11-common (>= 1:7.0.0)
+Conflicts: fslsfonts, fstobdf, showfont, xfsinfo
+Description: X font server utilities
+ x11-xfs-utils provides a set of utility programs useful on a system that uses
+ an X font server.
+ .
+ The programs in this package include:
+ - fslsfonts, a tool that lists fonts served by an X font server;
+ - fstobdf, a tool which retrieves a font in BDF format from an X font server;
+ - showfont, a font dumper for use with an X font server;
+ - xfsinfo, an X font server information utility.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: ca-certificates
+Status: install ok installed
+Priority: optional
+Section: misc
+Installed-Size: 736
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Version: 20090814
+Depends: openssl, debconf (>= 0.5) | debconf-2.0
+Enhances: libssl0.9.8, openssl
+Description: Common CA certificates
+ This package includes PEM files of CA certificates to allow SSL-based
+ applications to check for the authenticity of SSL connections.
+ .
+ It includes, among others, certificate authorities used by the Debian
+ infrastructure and those shipped with Mozilla's browsers.
+ .
+ Please note that certificate authorities whose certificates are
+ included in this package are not in any way audited for
+ trustworthiness and RFC 3647 compliance, and that full responsibility
+ to assess them belongs to the local system administrator.
+Original-Maintainer: Philipp Kern <pkern@debian.org>
+
+Package: vim-tiny
+Status: install ok installed
+Priority: important
+Section: editors
+Installed-Size: 840
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: vim
+Version: 2:7.2.330-1ubuntu3
+Replaces: vim-common (<< 1:7.1.293-2)
+Provides: editor
+Depends: vim-common (= 2:7.2.330-1ubuntu3), libc6 (>= 2.11), libncurses5 (>= 5.6+20071006-3), libselinux1 (>= 1.32)
+Suggests: indent
+Conflicts: vim-common (<< 1:7.1.293-2), vim-runtime (<< 1:7.1-056+1)
+Conffiles:
+ /etc/vim/vimrc.tiny 3b4112567ad92c78ccc16c670df381e9
+Description: Vi IMproved - enhanced vi editor - compact version
+ Vim is an almost compatible version of the UNIX editor Vi.
+ .
+ Many new features have been added: multi level undo, syntax
+ highlighting, command line history, on-line help, filename
+ completion, block operations, folding, Unicode support, etc.
+ .
+ This package contains a minimal version of vim compiled with no
+ GUI and a small subset of features in order to keep small the
+ package size. This package does not depend on the vim-runtime
+ package, but installing it you will get its additional benefits
+ (online documentation, plugins, ...).
+Homepage: http://www.vim.org/
+Original-Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+
+Package: xorg-docs-core
+Status: install ok installed
+Priority: optional
+Section: doc
+Installed-Size: 108
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: xorg-docs
+Version: 1:1.5-1
+Replaces: xorg-docs (<< 1:1.4-5)
+Suggests: xorg-docs
+Description: Core documentation for the X.org X Window System
+ This package contains core documentation for the X.org X Window
+ System. This currently includes only a set of manpages which are
+ standard for the system.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-ati
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 320
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:6.13.0-1ubuntu5
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), libpciaccess0 (>= 0), xserver-xorg-core (>= 2:1.6.99.900), xserver-xorg-video-r128, xserver-xorg-video-mach64, xserver-xorg-video-radeon
+Description: X.Org X server -- AMD/ATI display driver wrapper
+ This package provides the 'ati' driver for the AMD/ATI Mach64, Rage128,
+ Radeon, FireGL, FireMV, FirePro and FireStream series. This driver is
+ actually a wrapper that loads one of the 'mach64', 'r128' or 'radeon'
+ sub-drivers depending on the hardware.
+ These sub-drivers are brought through package dependencies.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-ati driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: xserver-xorg-video-siliconmotion
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 228
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.7.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-siliconmotion
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.7), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-siliconmotion
+Description: X.Org X server -- SiliconMotion display driver
+ This package provides the driver for the SiliconMotion Lynx and Cougar family
+ of chipsets, commonly found in laptops.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-siliconmotion driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: binutils
+Status: install ok installed
+Priority: optional
+Section: devel
+Installed-Size: 10176
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 2.20.1-3ubuntu5
+Replaces: binutils-gold (<< 2.20-5)
+Provides: elf-binutils
+Depends: libc6 (>= 2.11), zlib1g (>= 1:1.1.4)
+Suggests: binutils-doc (>= 2.20.1-3ubuntu5)
+Conflicts: elf-binutils, gas, modutils (<< 2.4.19-1)
+Description: The GNU assembler, linker and binary utilities
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files. They may be used in conjunction with a compiler
+ and various libraries to build programs.
+Original-Maintainer: Matthias Klose <doko@debian.org>
+
+Package: libglib2.0-0
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 2428
+Maintainer: Ubuntu Desktop Team <ubuntu-desktop@lists.ubuntu.com>
+Architecture: amd64
+Source: glib2.0
+Version: 2.24.0-0ubuntu4
+Replaces: libglib2.0-dev (<< 2.23.2-2)
+Depends: libc6 (>= 2.9), libpcre3 (>= 7.7), libselinux1 (>= 1.32), zlib1g (>= 1:1.1.4)
+Recommends: libglib2.0-data, shared-mime-info
+Conflicts: libpango1.0-0 (<< 1.11)
+Description: The GLib library of C routines
+ GLib is a library containing many useful C routines for things such
+ as trees, hashes, lists, and strings. It is a useful general-purpose
+ C library used by projects such as GTK+, GIMP, and GNOME.
+ .
+ This package contains the shared libraries.
+Homepage: http://www.gtk.org/
+Original-Maintainer: Loic Minier <lool@dooz.org>
+
+Package: libgomp1
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 96
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gcc-4.4
+Version: 4.4.3-4ubuntu5
+Depends: gcc-4.4-base (= 4.4.3-4ubuntu5), libc6 (>= 2.6)
+Description: GCC OpenMP (GOMP) support library
+ GOMP is an implementation of OpenMP for the C, C++, and Fortran 95 compilers
+ in the GNU Compiler Collection.
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: xserver-xorg-video-tseng
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 136
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 1:1.2.3-1
+Replaces: xserver-xorg (<< 6.8.2-35), xserver-xorg-driver-tseng
+Provides: xserver-xorg-video-6
+Depends: libc6 (>= 2.2.5), xserver-xorg-core (>= 2:1.6.99.900)
+Conflicts: xserver-xorg-driver-tseng
+Description: X.Org X server -- Tseng display driver
+ This package provides the driver for Tseng Labs cards.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This package is built from the X.org xf86-video-tseng driver module.
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: libtext-charwidth-perl
+Status: install ok installed
+Priority: required
+Section: perl
+Installed-Size: 96
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Version: 0.04-6
+Depends: libc6 (>= 2.2.5), perl-base (>= 5.10.0-24ubuntu4), perlapi-5.10.0
+Description: get display widths of characters on the terminal
+ This module permits perl software to get the display widths of characters
+ and strings on the terminal, using wcwidth() and wcswidth() from libc.
+ .
+ It provides mbwidth(), mbswidth(), and mblen().
+Original-Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Homepage: http://search.cpan.org/search?module=Text::CharWidth
+
+Package: libxt6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 468
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxt
+Version: 1:1.0.7-1
+Depends: libc6 (>= 2.7), libice6 (>= 1:1.0.0), libsm6, libx11-6
+Description: X11 toolkit intrinsics library
+ libXt provides the X Toolkit Intrinsics, an abstract widget library upon
+ which other toolkits are based. Xt is the basis for many toolkits, including
+ the Athena widgets (Xaw), and LessTif (a Motif implementation).
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXt
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
+Package: readline-common
+Status: install ok installed
+Priority: important
+Section: utils
+Installed-Size: 132
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: all
+Source: readline6
+Version: 6.1-1
+Replaces: libreadline-common, libreadline4 (<< 4.3-16), libreadline5 (<< 5.0-11)
+Depends: dpkg (>= 1.15.4) | install-info
+Conflicts: libreadline-common, libreadline5 (<< 5.0-11)
+Description: GNU readline and history libraries, common files
+ The GNU readline library aids in the consistency of user interface
+ across discrete programs that need to provide a command line
+ interface.
+ .
+ The GNU history library provides a consistent user interface for
+ recalling lines of previously typed input.
+Original-Maintainer: Matthias Klose <doko@debian.org>
+
+Package: gnupg-curl
+Status: install ok installed
+Priority: optional
+Section: utils
+Installed-Size: 156
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gnupg
+Version: 1.4.10-2ubuntu1
+Depends: libc6 (>= 2.4), libcurl3-gnutls (>= 7.16.2-1), libldap-2.4-2 (>= 2.4.7), gnupg
+Description: GNU privacy guard - a free PGP replacement (cURL)
+ GnuPG is GNU's tool for secure communication and data storage.
+ It can be used to encrypt data and to create digital signatures.
+ It includes an advanced key management facility and is compliant
+ with the proposed OpenPGP Internet standard as described in RFC2440.
+ .
+ This package contains the keyserver helper tools built with libcurl,
+ which replace the ones in the gnupg package built with the "curl shim"
+ variant of gnupg. This package provides support for HKPS keyservers.
+ .
+ GnuPG does not use any patented algorithms. This means it cannot be
+ compatible with PGP2, because that uses IDEA (which is patented in
+ a number of countries).
+Homepage: http://www.gnupg.org
+Original-Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org>
+
+Package: gcc-4.4-base
+Status: install ok installed
+Priority: required
+Section: libs
+Installed-Size: 172
+Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: gcc-4.4
+Version: 4.4.3-4ubuntu5
+Description: The GNU Compiler Collection (base package)
+ This package contains files common to all languages and libraries
+ contained in the GNU Compiler Collection (GCC).
+Homepage: http://gcc.gnu.org/
+Original-Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
+
+Package: libkrb5-3
+Status: install ok installed
+Priority: standard
+Section: libs
+Installed-Size: 964
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: krb5
+Version: 1.8.1+dfsg-2
+Replaces: libkrb53 (<< 1.6.dfsg.4~beta1-7)
+Depends: libc6 (>= 2.9), libcomerr2 (>= 1.34), libk5crypto3 (>= 1.8+dfsg), libkeyutils1, libkrb5support0 (= 1.8.1+dfsg-2)
+Suggests: krb5-doc, krb5-user
+Conflicts: libapache-mod-auth-kerb (<= 4.996-5.0-rc6-2), libapache2-mod-auth-kerb (<= 4.996-5.0-rc6-2), ssh-krb5 (<< 3.8.1p1-10)
+Description: MIT Kerberos runtime libraries
+ Kerberos is a system for authenticating users and services on a network.
+ Kerberos is a trusted third-party service. That means that there is a
+ third party (the Kerberos server) that is trusted by all the entities on
+ the network (users and services, usually called "principals").
+ .
+ This is the MIT reference implementation of Kerberos V5.
+ .
+ This package contains the runtime library for the main Kerberos v5 API
+ used by applications and Kerberos clients.
+Original-Maintainer: Sam Hartman <hartmans@debian.org>
+Homepage: http://web.mit.edu/kerberos/
+
+Package: libxau6
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 72
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Architecture: amd64
+Source: libxau
+Version: 1:1.0.5-1
+Depends: libc6 (>= 2.4)
+Description: X11 authorisation library
+ This package provides the main interface to the X11 authorisation handling,
+ which controls authorisation for X connections, both client-side and
+ server-side.
+ .
+ More information about X.Org can be found at:
+ <URL:http://www.X.org>
+ <URL:http://xorg.freedesktop.org>
+ <URL:http://lists.freedesktop.org/mailman/listinfo/xorg>
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXau
+Original-Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+
diff --git a/test/integration/status-xorg-break-providers b/test/integration/status-xorg-break-providers
new file mode 100644
index 0000000..c637351
--- /dev/null
+++ b/test/integration/status-xorg-break-providers
@@ -0,0 +1,22 @@
+Package: xserver-xorg-core
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 4436
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Source: xorg-server
+Version: 2:1.7.7-8
+Breaks: xserver-xorg-video-5
+Description: Xorg X server - core server
+
+Package: xserver-xorg-video-intel
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 1268
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Architecture: i386
+Version: 2:2.13.0-2
+Provides: xserver-xorg-video-6
+Description: X.Org X server -- Intel i8xx, i9xx display driver
diff --git a/test/integration/test-00-commands-have-help b/test/integration/test-00-commands-have-help
new file mode 100755
index 0000000..4a0cc64
--- /dev/null
+++ b/test/integration/test-00-commands-have-help
@@ -0,0 +1,101 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+# this test does double duty: The obvious is checking for --help and co,
+# but it also checks if the binary can find all methods in the library.
+# The later is quite handy for manual testing of non-abibreaking changes
+export LD_BIND_NOW=1
+# german variant of klingon used for testing usage of non-existent l10n
+export LC_ALL=tlh_DE.UTF-8
+
+checkversionmessage() {
+ testsuccess grep '^apt .* (' ${1}-help.output
+}
+
+checkhelpmessage() {
+ checkversionmessage "$1"
+ testsuccess grep '^Usage:' ${1}-help.output
+}
+
+checkoptions() {
+ testsuccess $1 --help
+ cp -f rootdir/tmp/testsuccess.output ${1}-help.output
+ checkhelpmessage "$1"
+
+ testsuccess $1 --version
+ cp -f rootdir/tmp/testsuccess.output ${1}-help.output
+ checkversionmessage "$1"
+}
+
+for CMD in 'apt-cache' 'apt-cdrom' 'apt-config' \
+ 'apt-extracttemplates' 'apt-get' 'apt-helper' \
+ 'apt-mark' 'apt-sortpkgs' 'apt' 'apt-ftparchive'; do
+ cmd="$(echo "$CMD" | tr -d '-')"
+ msgtest 'Test for failure with no parameters calling' "$CMD"
+ if $cmd > ${cmd}-help.output 2>&1; then
+ echo
+ cat ${cmd}-help.output
+ msgfail 'zero exit'
+ else
+ msgpass
+ fi
+ checkhelpmessage "$cmd"
+ checkoptions "$cmd"
+done
+
+for CMD in 'apt-dump-solver' 'apt-internal-solver' 'apt-internal-planner'; do
+ checkoptions "$(echo "$CMD" | tr -d '-')"
+done
+
+# in times of need, we all look for super cow to save the day
+testsuccess aptget moo
+testsuccess aptget moo -q=2
+testsuccess aptget moo moo
+testsuccess aptget moo moo -q=2
+testsuccess aptget moo moo --color
+testsuccess aptget moo moo moo
+testsuccess aptget moo moo moo -q=2
+testsuccess aptget moo moo moo moo
+testsuccess aptget moo moo moo moo -q=2
+
+export SOURCE_DATE_EPOCH=moo
+testwarningmsg 'W: Environment variable SOURCE_DATE_EPOCH was ignored as it has an invalid value: "moo"' apt moo
+testmoo() {
+ export SOURCE_DATE_EPOCH="$(date -d "$1" +'%s')"
+ testsuccess aptget moo
+ cp rootdir/tmp/testsuccess.output moo.output
+ testsuccess grep "$2" moo.output
+ testsuccessequal "$2" apt moo -qqq
+ unset SOURCE_DATE_EPOCH
+}
+testmoo '@0' 'Have you mooed today?'
+# the year 0 is too early for 32bit architectures
+testmoo '2000-12-25' 'Happy package management day!'
+testmoo '1930-02-18' "It's a Bird ... It's a Plane ... It's Super Cow!"
+testmoo '1966-11-07' 'Whoever needs milk, bows to the animal.'
+testmoo '1988-03-29' 'Have you mooed today?'
+testmoo '1993-08-16' 'Three moos for Debian!'
+testmoo '1998-04-01' 'Have you smashed some milk today?'
+testmoo '@1484822790' 'Have you mooed today?'
+testmoo '@1484822791' 'Have you mooed today?'
+testmoo '@1484822792' 'Have you mooed today?'
+testmoo '@1484822793' 'Have you mooed today?'
+
+# that also helps with reproducibility of output…
+export COLUMNS=80
+testsuccess aptget moo
+export COLUMNS=0
+testwarning aptget moo
+export COLUMNS=80a
+testwarning aptget moo
+export COLUMNS=a80
+testwarning aptget moo
+export COLUMNS=
+testwarning aptget moo
+unset COLUMNS
diff --git a/test/integration/test-acquire-binary-all b/test/integration/test-acquire-binary-all
new file mode 100755
index 0000000..379348e
--- /dev/null
+++ b/test/integration/test-acquire-binary-all
@@ -0,0 +1,142 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'foo-1' 'all' '2' 'unstable'
+buildsimplenativepackage 'foo-2' 'amd64' '2' 'unstable'
+setupaptarchive --no-update
+
+cat >rootdir/etc/apt/apt.conf.d/get-contents <<EOF
+Acquire::IndexTargets::deb::Contents {
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents";
+ Description "\$(RELEASE)/\$(COMPONENT) \$(ARCHITECTURE) Contents";
+ KeepCompressed "true";
+};
+EOF
+cp -a rootdir/etc/apt/sources.list.d rootdir/etc/apt/sources.list.d.bak
+
+msgmsg 'Releasefile with Architectures field and all included'
+testsuccess apt update
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testsuccess grep '^Get.* all Packages ' aptupdate.output
+testsuccess grep '^Get.* all Contents ' aptupdate.output
+testequal 'foo-1
+foo-2' aptcache pkgnames foo-
+
+listcurrentlistsdirectory > lists.before
+testsuccess grep '_binary-all_Packages' lists.before
+testsuccess grep '_Contents-all\.' lists.before
+
+configarchitecture 'amd64' 'i386'
+testsuccessequal "All packages are up to date.
+N: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'file:$(readlink -f ./aptarchive) unstable InRelease' doesn't support architecture 'i386'" apt update -o quiet::NoProgress=1
+testfileequal lists.before "$(listcurrentlistsdirectory)"
+testequal 'foo-1
+foo-2' aptcache pkgnames foo-
+
+rm -rf rootdir/var/lib/apt/lists
+msgmsg 'Releasefile with Architectures field and all included, but arch-=all'
+sed -i 's#^deb\(-src\)\? #deb\1 [arch-=all] #' rootdir/etc/apt/sources.list.d/*
+testsuccesswithnotice apt update
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testfailure grep '^Get.* all Packages ' aptupdate.output
+testfailure grep '^Get.* all Contents ' aptupdate.output
+testequal 'foo-2' aptcache pkgnames foo-
+
+rm -rf rootdir/var/lib/apt/lists
+msgmsg 'Releasefile has all, but forbids its usage'
+configarchitecture 'amd64'
+sed -i '/^Architectures: / a\
+No-Support-for-Architecture-all: Packages' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testsuccess apt update
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testfailure grep '^Get.* all Packages ' aptupdate.output
+testsuccess grep '^Get.* all Contents ' aptupdate.output
+sed -i '/^No-Support-for-Architecture-all: / d' $(find ./aptarchive -name 'Release')
+
+rm -rf rootdir/var/lib/apt/lists
+msgmsg 'Releasefile has all, forbids its usage, but it is forced with arch=all'
+sed -i 's#^deb\(-src\)\? #deb\1 [arch=all] #' rootdir/etc/apt/sources.list.d/*
+testsuccess apt update
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testsuccess grep '^Get.* all Packages ' aptupdate.output
+testsuccess grep '^Get.* all Contents ' aptupdate.output
+testequal 'foo-1' aptcache pkgnames foo-
+
+rm -rf rootdir/var/lib/apt/lists
+msgmsg 'Releasefile with Architectures field but without all'
+configarchitecture 'amd64' 'i386'
+getarchitecturesfromreleasefile() { echo "$(getarchitectures)"; }
+generatereleasefiles
+signreleasefiles
+testsuccessequal 'All packages are up to date.' apt update -o quiet::NoProgress=1
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testfailure grep '^Get.* all Packages ' aptupdate.output
+testfailure grep '^Get.* all Contents ' aptupdate.output
+testequal 'foo-2' aptcache pkgnames foo-
+
+configarchitecture 'amd64'
+testsuccess apt update
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testfailure grep '^Get.* all Packages ' aptupdate.output
+testfailure grep '^Get.* all Contents ' aptupdate.output
+testequal 'foo-2' aptcache pkgnames foo-
+
+rm -rf rootdir/var/lib/apt/lists
+msgmsg 'Releasefile with Architectures field but without all forced with arch+=all'
+sed -i 's#^deb\(-src\)\? #deb\1 [arch+=all] #' rootdir/etc/apt/sources.list.d/*
+testsuccess apt update
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testsuccess grep '^Get.* all Packages ' aptupdate.output
+testsuccess grep '^Get.* all Contents ' aptupdate.output
+testequal 'foo-1
+foo-2' aptcache pkgnames foo-
+
+rm -rf rootdir/var/lib/apt/lists
+msgmsg 'Releasefile without Architectures field'
+getarchitecturesfromreleasefile() { echo -n ''; }
+generatereleasefiles
+signreleasefiles
+testfailure grep '^Architectures: ' $(find ./aptarchive -name 'Release')
+testsuccess apt update
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testsuccess grep '^Get.* all Packages ' aptupdate.output
+testsuccess grep '^Get.* all Contents ' aptupdate.output
+testequal 'foo-1
+foo-2' aptcache pkgnames foo-
+
+# apt doesn't know supported archs, so missing a configured arch is a problem
+configarchitecture 'amd64' 'i386'
+testwarningmsg "W: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'file:$(readlink -f ./aptarchive) unstable InRelease' does not seem to provide it (sources.list entry misspelt?)" apt update
+testequal 'foo-1
+foo-2' aptcache pkgnames foo-
+
+rm -rf rootdir/var/lib/apt/lists
+msgmsg 'Releasefile no Architectures all, but forbids its usage'
+configarchitecture 'amd64'
+sed -i '/^Date: / a\
+No-Support-for-Architecture-all: Packages' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testsuccess apt update
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testfailure grep '^Get.* all Packages ' aptupdate.output
+testsuccess grep '^Get.* all Contents ' aptupdate.output
+sed -i '/^No-Support-for-Architecture-all: / d' $(find ./aptarchive -name 'Release')
+
+msgmsg 'No Releasefile'
+rm -rf rootdir/var/lib/apt/lists
+find aptarchive -name '*Release*' -delete
+configarchitecture 'amd64'
+testfailure apt update
+testwarning apt update --allow-insecure-repositories
+testequal 'foo-1
+foo-2' aptcache pkgnames foo-
diff --git a/test/integration/test-acquire-same-file-multiple-times b/test/integration/test-acquire-same-file-multiple-times
new file mode 100755
index 0000000..a6825b2
--- /dev/null
+++ b/test/integration/test-acquire-same-file-multiple-times
@@ -0,0 +1,90 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+TESTFILE="$TESTDIR/framework"
+cp "$TESTFILE" aptarchive/foo
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+filedown() {
+ msgtest 'Downloading the same URI twice over file' "$1"
+ testsuccess --nomsg apthelper download-file "file:///$APTARCHIVE/foo" './downloaded/foo1' '' \
+ "file:///$APTARCHIVE/foo" './downloaded/foo2' '' -o Debug::pkgAcquire::Worker=1
+ cp rootdir/tmp/testsuccess.output download.log
+ testsuccess cmp "$TESTFILE" ./downloaded/foo1
+ testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
+ testequal '1' grep -c '200%20URI%20Start' ./download.log
+ testequal '1' grep -c '201%20URI%20Done' ./download.log
+ rm -f ./downloaded/foo1 ./downloaded/foo2
+}
+
+testrun() {
+ $1 'no partial'
+ cp "$TESTFILE" ./downloaded/foo1
+ $1 'complete partial 1'
+ cp "$TESTFILE" ./downloaded/foo2
+ $1 'complete partial 2'
+ cp "$TESTFILE" ./downloaded/foo1
+ cp "$TESTFILE" ./downloaded/foo2
+ $1 'complete partial 1+2'
+ dd if="$TESTFILE" of=./downloaded/foo1 bs=500 count=1 2>/dev/null
+ $1 'partial partial 1'
+ dd if="$TESTFILE" of=./downloaded/foo2 bs=500 count=1 2>/dev/null
+ $1 'partial partial 2'
+ dd if="$TESTFILE" of=./downloaded/foo1 bs=500 count=1 2>/dev/null
+ dd if="$TESTFILE" of=./downloaded/foo2 bs=500 count=1 2>/dev/null
+ $1 'partial partial 1+2'
+}
+testrun 'filedown'
+
+changetowebserver -o aptwebserver::redirect::replace::/foo2=/foo
+
+httpdown() {
+ msgtest 'Downloading the same URI to different files' 'twice over http'
+ testsuccess --nomsg apthelper download-file "http://localhost:${APTHTTPPORT}/foo" "./downloaded/foo1" '' \
+ "http://localhost:${APTHTTPPORT}/foo" './downloaded/foo2' '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
+ cp rootdir/tmp/testsuccess.output download.log
+ testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1
+ testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
+ testequal '1' grep -c '200%20URI%20Start' ./download.log
+ testequal '1' grep -c '201%20URI%20Done' ./download.log
+ rm -f ./downloaded/foo1 ./downloaded/foo2
+}
+testrun 'httpdown'
+
+httpredirectdown() {
+ msgtest 'Redirect leads' 'first URI to the second URI'
+ for i in 1 2 3 4 5 6 7 8 9 10; do
+ rm -f ./downloaded/foo1 ./downloaded/foo2
+ testsuccess --nomsg apthelper download-file "http://localhost:${APTHTTPPORT}/foo2" "./downloaded/foo1" '' \
+ "http://localhost:${APTHTTPPORT}/foo" './downloaded/foo2' '' -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
+ cp rootdir/tmp/testsuccess.output download.log
+ testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1
+ testsuccess cmp ./downloaded/foo1 ./downloaded/foo2
+
+ if grep -q '103%20Redirect' ./download.log; then
+ break
+ fi
+ done
+ testequal '1' grep -c '200%20URI%20Start' ./download.log
+ testequal '1' grep -c '103%20Redirect' ./download.log
+ testequal '1' grep -c '201%20URI%20Done' ./download.log
+ rm -f ./downloaded/foo1 ./downloaded/foo2
+}
+testrun 'httpredirectdown'
+
+httpsamedown() {
+ msgtest 'Downloading two files via the same URI to' 'the same file'
+ testsuccess --nomsg apthelper download-file "http://localhost:${APTHTTPPORT}/foo" "./downloaded/foo1" '' \
+ "http://localhost:${APTHTTPPORT}/foo" './downloaded/foo1' '' -o Debug::pkgAcquire::Worker=1
+ cp rootdir/tmp/testsuccess.output download.log
+ testsuccess cmp "$TESTDIR/framework" ./downloaded/foo1
+ testequal '1' grep -c '200%20URI%20Start' ./download.log
+ testequal '1' grep -c '201%20URI%20Done' ./download.log
+ rm -f ./downloaded/foo1
+}
+testrun 'httpsamedown'
diff --git a/test/integration/test-allow b/test/integration/test-allow
new file mode 100755
index 0000000..2cc57bc
--- /dev/null
+++ b/test/integration/test-allow
@@ -0,0 +1,98 @@
+#!/bin/sh
+#
+# Test for --allow-remove-essential and friends replacing --force-yes
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname $0)")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'downgrade' 'all' '1'
+insertinstalledpackage 'downgrade' 'all' '2'
+
+insertpackage 'unstable' 'hold' 'all' '2'
+insertinstalledpackage 'hold' 'all' '1'
+
+insertinstalledpackage 'essential' 'all' '1' 'Essential: yes'
+
+setupaptarchive
+
+testsuccess aptmark hold hold
+
+# Test --allow-remove--essential
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ essential
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ essential
+0 upgraded, 0 newly installed, 1 to remove and 1 not upgraded.
+E: Essential packages were removed and -y was used without --allow-remove-essential.' aptget remove essential -y -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ essential
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ essential
+0 upgraded, 0 newly installed, 1 to remove and 1 not upgraded.
+Remv essential [1]' aptget remove essential -y --allow-remove-essential -s
+
+# Test --allow-change-held-packages (should not influence dist-upgrade, but an install)
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ hold
+0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.' aptget dist-upgrade --allow-change-held-packages -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following held packages will be changed:
+ hold
+The following packages will be upgraded:
+ hold
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+E: Held packages were changed and -y was used without --allow-change-held-packages.' aptget install hold -y -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following held packages will be changed:
+ hold
+The following packages will be upgraded:
+ hold
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+E: Held packages were changed and -y was used without --allow-change-held-packages.' aptget install hold -y -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following held packages will be changed:
+ hold
+The following packages will be upgraded:
+ hold
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst hold [1] (2 unstable [all])
+Conf hold (2 unstable [all])' aptget install hold -y -s --allow-change-held-packages
+
+# Test --allow-downgrades
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following packages will be DOWNGRADED:
+ downgrade
+0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 1 not upgraded.
+E: Packages were downgraded and -y was used without --allow-downgrades.' aptget install downgrade=1 -y -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be DOWNGRADED:
+ downgrade
+0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 1 not upgraded.
+Inst downgrade [2] (1 unstable [all])
+Conf downgrade (1 unstable [all])' aptget install downgrade=1 --allow-downgrades -y -s
diff --git a/test/integration/test-allow-scores-for-all-dependency-types b/test/integration/test-allow-scores-for-all-dependency-types
new file mode 100755
index 0000000..9b300b7
--- /dev/null
+++ b/test/integration/test-allow-scores-for-all-dependency-types
@@ -0,0 +1,179 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unversioned' 'libdb-dev' 'amd64' '5.3.0' 'Depends: libdb5.3-dev
+Conflicts: libdb5.1-dev'
+insertpackage 'unversioned' 'libdb5.1-dev' 'amd64' '5.1.29-7'
+insertpackage 'unversioned' 'libdb5.3-dev' 'amd64' '5.3.28-3' 'Conflicts: libdb5.1-dev'
+
+insertpackage 'unversioned' 'foo' 'amd64' '1'
+insertpackage 'unversioned' 'bar' 'amd64' '1'
+insertpackage 'unversioned' 'foo' 'amd64' '2' 'Conflicts: bar'
+insertpackage 'unversioned' 'bar' 'amd64' '2' 'Conflicts: foo'
+insertpackage 'unversioned' 'baz' 'amd64' '2' 'Depends: bar | foo'
+
+insertpackage 'versioned' 'libdb-dev' 'amd64' '5.3.0' 'Depends: libdb5.3-dev
+Conflicts: libdb5.1-dev (<< 5.2)'
+insertpackage 'versioned' 'libdb5.3-dev' 'amd64' '5.3.28-3' 'Conflicts: libdb5.1-dev (<< 5.2)'
+
+insertpackage 'versioned' 'foo' 'amd64' '2' 'Conflicts: bar (<= 2)'
+insertpackage 'versioned' 'bar' 'amd64' '2' 'Conflicts: foo (<= 2)'
+insertpackage 'versioned' 'baz' 'amd64' '2' 'Depends: bar (>= 2) | foo (>= 2)'
+
+insertpackage 'multipleno' 'foo' 'amd64' '2.1' 'Conflicts: bar (<= 3)'
+insertpackage 'multipleno' 'bar' 'amd64' '2.1' 'Conflicts: foo (<= 3), foo (<= 1)'
+
+insertpackage 'multipleyes' 'foo' 'amd64' '2.2' 'Conflicts: bar (<= 3)'
+# having foo multiple times as conflict is a non-advisable hack in general
+insertpackage 'multipleyes' 'bar' 'amd64' '2.2' 'Conflicts: foo (<= 3), foo (<= 3)'
+
+#774924 - slightly simplified
+insertpackage 'jessie' 'login' 'amd64' '2' 'Pre-Depends: libaudit1 (>= 0)'
+insertpackage 'jessie' 'libaudit1' 'amd64' '2' 'Depends: libaudit-common (>= 0)'
+insertpackage 'jessie' 'libaudit-common' 'amd64' '2' 'Breaks: libaudit0, libaudit1 (<< 2)'
+
+cp rootdir/var/lib/dpkg/status rootdir/var/lib/dpkg/status-backup
+setupaptarchive
+
+insertinstalledpackage 'libdb-dev' 'amd64' '5.1.7' 'Depends: libdb5.1-dev'
+insertinstalledpackage 'libdb5.1-dev' 'amd64' '5.1.29-7'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ libdb5.1-dev
+The following NEW packages will be installed:
+ libdb5.3-dev
+The following packages will be upgraded:
+ libdb-dev
+1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libdb5.1-dev [5.1.29-7] [libdb-dev:amd64 ]
+Inst libdb-dev [5.1.7] (5.3.0 unversioned [amd64]) []
+Inst libdb5.3-dev (5.3.28-3 unversioned [amd64])
+Conf libdb-dev (5.3.0 unversioned [amd64])
+Conf libdb5.3-dev (5.3.28-3 unversioned [amd64])' aptget dist-upgrade -st unversioned
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ libdb5.1-dev
+The following NEW packages will be installed:
+ libdb5.3-dev
+The following packages will be upgraded:
+ libdb-dev
+1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libdb5.1-dev [5.1.29-7] [libdb-dev:amd64 ]
+Inst libdb-dev [5.1.7] (5.3.0 versioned [amd64]) []
+Inst libdb5.3-dev (5.3.28-3 versioned [amd64])
+Conf libdb-dev (5.3.0 versioned [amd64])
+Conf libdb5.3-dev (5.3.28-3 versioned [amd64])' aptget dist-upgrade -st versioned
+
+cp -f rootdir/var/lib/dpkg/status-backup rootdir/var/lib/dpkg/status
+insertinstalledpackage 'foo' 'amd64' '1'
+insertinstalledpackage 'bar' 'amd64' '1'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ bar foo
+0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -st unversioned
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ bar foo
+0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -st versioned
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ bar foo
+0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -st multipleno
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ foo
+The following packages will be upgraded:
+ bar
+1 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv foo [1]
+Inst bar [1] (2.2 multipleyes [amd64])
+Conf bar (2.2 multipleyes [amd64])' aptget dist-upgrade -st multipleyes
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ baz
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst baz (2 unversioned [amd64])
+Conf baz (2 unversioned [amd64])' aptget install baz -st unversioned
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following packages will be REMOVED:
+ bar
+The following NEW packages will be installed:
+ baz
+The following packages will be upgraded:
+ foo
+1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv bar [1]
+Inst foo [1] (2 versioned [amd64])
+Inst baz (2 versioned [amd64])
+Conf foo (2 versioned [amd64])
+Conf baz (2 versioned [amd64])' aptget install baz -st versioned
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ baz
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst baz (2 unversioned [amd64])
+Conf baz (2 unversioned [amd64])' aptget install baz -st unversioned
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following packages will be REMOVED:
+ bar
+The following NEW packages will be installed:
+ baz
+The following packages will be upgraded:
+ foo
+1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv bar [1]
+Inst foo [1] (2 versioned [amd64])
+Inst baz (2 versioned [amd64])
+Conf foo (2 versioned [amd64])
+Conf baz (2 versioned [amd64])' aptget install baz -st versioned
+
+# recreating the exact situation is hard, so we pull tricks to get the score
+cp -f rootdir/var/lib/dpkg/status-backup rootdir/var/lib/dpkg/status
+insertinstalledpackage 'gdm3' 'amd64' '1' 'Depends: libaudit0, libaudit0'
+insertinstalledpackage 'login' 'amd64' '1' 'Essential: yes'
+insertinstalledpackage 'libaudit0' 'amd64' '1'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ gdm3 libaudit0
+The following NEW packages will be installed:
+ libaudit-common libaudit1
+The following packages will be upgraded:
+ login
+1 upgraded, 2 newly installed, 2 to remove and 0 not upgraded.
+Remv gdm3 [1]
+Remv libaudit0 [1]
+Inst libaudit-common (2 jessie [amd64])
+Conf libaudit-common (2 jessie [amd64])
+Inst libaudit1 (2 jessie [amd64])
+Conf libaudit1 (2 jessie [amd64])
+Inst login [1] (2 jessie [amd64])
+Conf login (2 jessie [amd64])' aptget dist-upgrade -st jessie
diff --git a/test/integration/test-apt-acquire-additional-files b/test/integration/test-apt-acquire-additional-files
new file mode 100755
index 0000000..928c703
--- /dev/null
+++ b/test/integration/test-apt-acquire-additional-files
@@ -0,0 +1,246 @@
+#!/bin/sh
+set -e
+# Cause umask failures
+umask 000
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+# note that in --print-uri we talk about .xz because that is the default.
+# This doesn't mean it is actually attempt to download it.
+configcompression '.' 'gz'
+LOWCOSTEXT='lz4'
+
+buildsimplenativepackage 'foo' 'amd64' '1' 'unstable'
+buildsimplenativepackage 'bar' 'all' '1' 'unstable'
+
+setupaptarchive --no-update
+changetowebserver
+
+testequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_unstable_main_source_Sources 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-amd64_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-all_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+testsuccessequal "Get:1 http://localhost:${APTHTTPPORT} unstable InRelease [$(stat -c%s aptarchive/dists/unstable/InRelease) B]
+Get:2 http://localhost:${APTHTTPPORT} unstable/main Sources [$(stat -c%s aptarchive/dists/unstable/main/source/Sources.gz) B]
+Get:3 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages [$(stat -c%s aptarchive/dists/unstable/main/binary-amd64/Packages.gz) B]
+Get:4 http://localhost:${APTHTTPPORT} unstable/main all Packages [$(stat -c%s aptarchive/dists/unstable/main/binary-all/Packages.gz) B]
+Get:5 http://localhost:${APTHTTPPORT} unstable/main Translation-en [$(stat -c%s aptarchive/dists/unstable/main/i18n/Translation-en.gz) B]
+Reading package lists..." aptget update
+
+testempty find rootdir/var/lib/apt/lists -name '*Contents*'
+
+msgmsg "Normal Contents file"
+cat > rootdir/etc/apt/apt.conf.d/content-target.conf <<EOF
+Acquire::IndexTargets::deb::Contents {
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents";
+ Description "\$(RELEASE)/\$(COMPONENT) \$(ARCHITECTURE) Contents";
+};
+EOF
+
+readfile() {
+ while [ -n "$1" ]; do
+ readlink -f "./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_${1}"
+ shift
+ done
+}
+
+testequal "$(readfile Contents-amd64 Contents-all)" aptget indextargets --no-release-info --format '$(FILENAME)' 'Identifier: Contents'
+testempty aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+# lets fake the existence of a compressed Contents file
+touch "./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.gz"
+chmod 644 "./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.gz"
+testequal "$(readfile Contents-amd64.gz)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+touch "./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.gz"
+chmod 644 "./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.gz"
+testequal "$(readfile Contents-amd64.gz Contents-all.gz)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+
+testequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_unstable_main_source_Sources 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-amd64_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-all_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-en 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-amd64.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-all.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all 0 " aptget update --print-uris
+
+# apt believes the Contents files we faked are good
+testsuccessequal "Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Reading package lists..." aptget update
+testequal "$(readfile Contents-amd64.gz Contents-all.gz)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+
+find rootdir/var/lib/apt/lists -name '*Contents*' -delete
+
+testequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_unstable_main_source_Sources 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-amd64_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-all_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-en 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-amd64.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-all.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all 0 " aptget update --print-uris
+
+testsuccessequal "Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Get:2 http://localhost:${APTHTTPPORT} unstable/main amd64 Contents [$(stat -c%s aptarchive/dists/unstable/main/Contents-amd64.gz) B]
+Get:3 http://localhost:${APTHTTPPORT} unstable/main all Contents [$(stat -c%s aptarchive/dists/unstable/main/Contents-all.gz) B]
+Reading package lists..." aptget update
+
+testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64" find rootdir/var/lib/apt/lists -name '*Contents-amd64*'
+testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all" find rootdir/var/lib/apt/lists -name '*Contents-all*'
+testequal "$(readfile Contents-amd64 Contents-all)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+testsuccess cmp "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64" 'aptarchive/dists/unstable/main/Contents-amd64'
+testsuccess cmp "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all" 'aptarchive/dists/unstable/main/Contents-all'
+
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64 \
+ ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all
+testempty aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+
+# if we asked for keeping it compressed, keep it
+msgmsg "Normal Contents file with KeepCompressed"
+echo 'Acquire::IndexTargets::deb::Contents::KeepCompressed "true";' >> rootdir/etc/apt/apt.conf.d/content-target.conf
+testsuccessequal "Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Get:2 http://localhost:${APTHTTPPORT} unstable/main amd64 Contents [$(stat -c%s aptarchive/dists/unstable/main/Contents-amd64.gz) B]
+Get:3 http://localhost:${APTHTTPPORT} unstable/main all Contents [$(stat -c%s aptarchive/dists/unstable/main/Contents-all.gz) B]
+Reading package lists..." aptget update
+
+testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.$LOWCOSTEXT" find rootdir/var/lib/apt/lists -name '*Contents-amd64*'
+testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.$LOWCOSTEXT" find rootdir/var/lib/apt/lists -name '*Contents-all*'
+testequal "$(readfile Contents-amd64.$LOWCOSTEXT Contents-all.$LOWCOSTEXT)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+testequal "$(apthelper cat-file rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.$LOWCOSTEXT)" apthelper cat-file 'aptarchive/dists/unstable/main/Contents-amd64.gz'
+testequal "$(apthelper cat-file rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.$LOWCOSTEXT)" apthelper cat-file 'aptarchive/dists/unstable/main/Contents-all.gz'
+
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.$LOWCOSTEXT
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.$LOWCOSTEXT
+testempty aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+
+msgmsg "Compressed Contents file"
+# and no automatic uncompress based on the name please,
+# only if we downloaded a compressed file, but target was uncompressed
+cat > rootdir/etc/apt/apt.conf.d/content-target.conf <<EOF
+Acquire::IndexTargets::deb::Contents {
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE).gz";
+ ShortDescription "Contents.gz";
+ Description "\$(RELEASE)/\$(COMPONENT) \$(ARCHITECTURE) Contents.gz";
+};
+EOF
+
+runthistest() {
+ # the last lines are utter bogus of course, but how should apt know…
+ testequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_unstable_main_source_Sources 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-amd64_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-all_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-en 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-amd64.gz.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.gz 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-all.gz.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.gz 0 " aptget update --print-uris
+
+ testsuccessequal "Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Get:2 http://localhost:${APTHTTPPORT} unstable/main amd64 Contents.gz [$(stat -c%s aptarchive/dists/unstable/main/Contents-amd64.gz) B]
+Get:3 http://localhost:${APTHTTPPORT} unstable/main all Contents.gz [$(stat -c%s aptarchive/dists/unstable/main/Contents-all.gz) B]
+Reading package lists..." aptget update
+
+ testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.gz" find rootdir/var/lib/apt/lists -name '*Contents-amd64*'
+ testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.gz" find rootdir/var/lib/apt/lists -name '*Contents-all*'
+ testequal "$(readfile Contents-amd64.gz Contents-all.gz)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+ testsuccess cmp "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.gz" 'aptarchive/dists/unstable/main/Contents-amd64.gz'
+ testsuccess cmp "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.gz" 'aptarchive/dists/unstable/main/Contents-all.gz'
+}
+runthistest
+
+msgmsg "Compressed Contents file from native architecture"
+echo 'Acquire::IndexTargets::deb::Contents::MetaKey "$(COMPONENT)/Contents-$(NATIVE_ARCHITECTURE).gz";' >> rootdir/etc/apt/apt.conf.d/content-target.conf
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.gz
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.gz
+testempty aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+runthistest
+
+msgmsg "Contents with 3 MetaKeys, first match"
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64.gz
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all.gz
+testempty aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+cat > rootdir/etc/apt/apt.conf.d/content-target.conf <<EOF
+Acquire::IndexTargets::deb::Contents3 {
+ MetaKey "main/Contents-all";
+ ShortDescription "Contents3";
+ Description "\$(RELEASE) all Contents3";
+ Fallback-Of "Contents2";
+ Identifier "Contents";
+};
+Acquire::IndexTargets::deb::Contents {
+ MetaKey "\$(COMPONENT)/Contents-amd64";
+ ShortDescription "Contents";
+ Description "\$(RELEASE)/\$(COMPONENT) amd64 Contents";
+};
+Acquire::IndexTargets::deb::Contents2 {
+ MetaKey "Contents-all";
+ ShortDescription "Contents2";
+ Description "\$(RELEASE) all Contents2";
+ Fallback-Of "Contents";
+ Identifier "Contents";
+};
+EOF
+testequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_unstable_main_source_Sources 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-amd64_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-all_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-en 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-amd64.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64 0 " aptget update --print-uris
+testsuccessequal "Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Get:2 http://localhost:${APTHTTPPORT} unstable/main amd64 Contents [$(stat -c%s aptarchive/dists/unstable/main/Contents-amd64.gz) B]
+Reading package lists..." aptget update
+testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64" find rootdir/var/lib/apt/lists -name '*Contents*'
+testequal "$(readfile Contents-amd64)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+testsuccess cmp "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64" 'aptarchive/dists/unstable/main/Contents-amd64'
+
+msgmsg "Contents with 3 MetaKeys, third match"
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-amd64
+testempty aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+echo 'Acquire::IndexTargets::deb::Contents::MetaKey "$(COMPONENT)/Contents-i386";' >> rootdir/etc/apt/apt.conf.d/content-target.conf
+testequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_unstable_main_source_Sources 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-amd64_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-all_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-en 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-i386.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-i386 0 " aptget update --print-uris
+testsuccessequal "Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Get:2 http://localhost:${APTHTTPPORT} unstable all Contents3 [$(stat -c%s aptarchive/dists/unstable/main/Contents-all.gz) B]
+Reading package lists..." aptget update
+testequal "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all" find rootdir/var/lib/apt/lists -name '*Contents*'
+testequal "$(readfile Contents-all)" aptget indextargets --format '$(FILENAME)' 'Identifier: Contents'
+testsuccess cmp "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all" 'aptarchive/dists/unstable/main/Contents-all'
+
+rm ./rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_Contents-all
+msgmsg "No Contents file"
+cat > rootdir/etc/apt/apt.conf.d/content-target-notdefault.conf <<EOF
+Acquire::IndexTargets::deb::Contents::DefaultEnabled "no";
+Acquire::IndexTargets::deb::Contents2::DefaultEnabled "no";
+Acquire::IndexTargets::deb::Contents3::DefaultEnabled "no";
+EOF
+testequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/source/Sources.xz' localhost:${APTHTTPPORT}_dists_unstable_main_source_Sources 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-amd64/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-amd64_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.xz' localhost:${APTHTTPPORT}_dists_unstable_main_binary-all_Packages 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.xz' localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+testsuccessequal "Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Reading package lists..." aptget update
+
+testempty find rootdir/var/lib/apt/lists -name '*Contents*'
+
+msgmsg "Order of Contents files"
+sameupdateoutput() {
+ testsuccessequal "'http://localhost:${APTHTTPPORT}/dists/unstable/InRelease' localhost:${APTHTTPPORT}_dists_unstable_InRelease 0
+'http://localhost:${APTHTTPPORT}/dists/unstable/main/Contents-i386.xz' localhost:${APTHTTPPORT}_dists_unstable_main_Contents-i386 0 " aptget update --print-uris
+}
+sed -i -e 's#deb\(-src\)\? http#deb\1 [target=Contents3,Contents2,Contents] http#' rootdir/etc/apt/sources.list.d/*
+sameupdateoutput
+sed -i -e 's#deb\(-src\)\? \[target=[^]]\+\] http#deb\1 [target=Contents2,Contents3,Contents] http#' rootdir/etc/apt/sources.list.d/*
+sameupdateoutput
+sed -i -e 's#deb\(-src\)\? \[target=[^]]\+\] http#deb\1 [target=Contents3,Contents,Contents2] http#' rootdir/etc/apt/sources.list.d/*
+sameupdateoutput
+sed -i -e 's#deb\(-src\)\? \[target=[^]]\+\] http#deb\1 [target=Contents,Contents3,Contents2] http#' rootdir/etc/apt/sources.list.d/*
+sameupdateoutput
diff --git a/test/integration/test-apt-acquire-additional-files-duplicates b/test/integration/test-apt-acquire-additional-files-duplicates
new file mode 100755
index 0000000..b0b6460
--- /dev/null
+++ b/test/integration/test-apt-acquire-additional-files-duplicates
@@ -0,0 +1,105 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+cat > rootdir/etc/apt/apt.conf.d/content-target.conf <<EOF
+Acquire::IndexTargets::deb::Contents1 {
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents";
+ Description "\$(RELEASE) Contents";
+ DefaultEnabled "false";
+};
+Acquire::IndexTargets::deb::Contents2 {
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents";
+ Description "\$(RELEASE) Contents";
+ DefaultEnabled "false";
+};
+Acquire::IndexTargets::deb::Contentsflat {
+ MetaKey "Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents";
+ Description "\$(RELEASE) Contents";
+ DefaultEnabled "false";
+};
+EOF
+
+mkdir -p ./rootdir/var/lib/apt/lists
+APTLISTS="$(readlink -f ./rootdir/var/lib/apt/lists)"
+APTETC="$(readlink -f ./rootdir/etc/apt)"
+cat > rootdir/etc/apt/sources.list <<EOF
+deb http://example.org/debian stable main rocks
+deb-src http://example.org/debian stable main rocks
+EOF
+testsuccessequal "${APTLISTS}/example.org_debian_dists_stable_main_source_Sources
+${APTLISTS}/example.org_debian_dists_stable_rocks_source_Sources
+${APTLISTS}/example.org_debian_dists_stable_main_binary-amd64_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_binary-i386_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_binary-all_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_i18n_Translation-en
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-amd64_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-i386_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-all_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_i18n_Translation-en" aptget indextargets --no-release-info --format '$(FILENAME)'
+
+cat >> rootdir/etc/apt/sources.list <<EOF
+deb http://example.org/debian stable main rocks
+EOF
+rm -r rootdir/var/cache/apt/*.bin
+testwarning aptcache gencaches
+testwarningequal "${APTLISTS}/example.org_debian_dists_stable_main_source_Sources
+${APTLISTS}/example.org_debian_dists_stable_rocks_source_Sources
+${APTLISTS}/example.org_debian_dists_stable_main_binary-amd64_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_binary-i386_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_binary-all_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_i18n_Translation-en
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-amd64_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-i386_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-all_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_i18n_Translation-en
+W: Target Packages (main/binary-amd64/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (main/binary-i386/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (main/binary-all/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Translations (main/i18n/Translation-en) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (rocks/binary-amd64/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (rocks/binary-i386/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (rocks/binary-all/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Translations (rocks/i18n/Translation-en) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3" aptget indextargets --no-release-info --format '$(FILENAME)'
+
+cat >> rootdir/etc/apt/sources.list <<EOF
+deb [target=Contents1,Contents2,Contentsflat arch=amd64] http://example.org/debian stable main rocks
+deb-src [target=Contents1,Contents2,Contentsflat arch=amd64] http://example.org/debian stable main rocks
+EOF
+rm -r rootdir/var/cache/apt/*.bin
+testwarning aptcache gencaches
+testwarningequal "${APTLISTS}/example.org_debian_dists_stable_main_source_Sources
+${APTLISTS}/example.org_debian_dists_stable_rocks_source_Sources
+${APTLISTS}/example.org_debian_dists_stable_main_binary-amd64_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_binary-i386_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_binary-all_Packages
+${APTLISTS}/example.org_debian_dists_stable_main_i18n_Translation-en
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-amd64_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-i386_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_binary-all_Packages
+${APTLISTS}/example.org_debian_dists_stable_rocks_i18n_Translation-en
+${APTLISTS}/example.org_debian_dists_stable_main_Contents-amd64
+${APTLISTS}/example.org_debian_dists_stable_main_Contents-all
+${APTLISTS}/example.org_debian_dists_stable_Contents-amd64
+${APTLISTS}/example.org_debian_dists_stable_Contents-all
+${APTLISTS}/example.org_debian_dists_stable_rocks_Contents-amd64
+${APTLISTS}/example.org_debian_dists_stable_rocks_Contents-all
+W: Target Packages (main/binary-amd64/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (main/binary-i386/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (main/binary-all/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Translations (main/i18n/Translation-en) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (rocks/binary-amd64/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (rocks/binary-i386/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Packages (rocks/binary-all/Packages) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Translations (rocks/i18n/Translation-en) is configured multiple times in ${APTETC}/sources.list:1 and ${APTETC}/sources.list:3
+W: Target Contents2 wants to acquire the same file (main/Contents-amd64) as Contents1 from source ${APTETC}/sources.list:4
+W: Target Contents2 wants to acquire the same file (main/Contents-all) as Contents1 from source ${APTETC}/sources.list:4
+W: Target Contents2 wants to acquire the same file (rocks/Contents-amd64) as Contents1 from source ${APTETC}/sources.list:4
+W: Target Contents2 wants to acquire the same file (rocks/Contents-all) as Contents1 from source ${APTETC}/sources.list:4" aptget indextargets --no-release-info --format '$(FILENAME)'
diff --git a/test/integration/test-apt-by-hash-update b/test/integration/test-apt-by-hash-update
new file mode 100755
index 0000000..f4794a8
--- /dev/null
+++ b/test/integration/test-apt-by-hash-update
@@ -0,0 +1,107 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+confighashes 'SHA512'
+configcompression '.' 'gz'
+
+insertpackage 'unstable' 'foo' 'all' '1.0'
+insertpackage 'unstable' 'bar' 'i386' '1.0'
+
+setupaptarchive --no-update
+
+# make Packages *only* accessible by-hash for this test
+makebyhashonly() {
+ local NORMAL="$(readlink -f "./aptarchive/dists/unstable/main/${1}")"
+ local BYHASH="${NORMAL}/by-hash/SHA512"
+ mkdir -p "${BYHASH}"
+ find "${NORMAL}/" -maxdepth 1 -name "${2}*" -exec mv '{}' "$BYHASH" \;
+ ln -s "${BYHASH}/${2}.gz" "${BYHASH}/$(sha512sum "${BYHASH}/${2}.gz" | cut -f1 -d' ')"
+}
+makebyhashonly 'binary-i386' 'Packages'
+makebyhashonly 'binary-all' 'Packages'
+makebyhashonly 'source' 'Sources'
+
+ensureitsbroken() {
+ rm -rf rootdir/var/lib/apt/lists
+ # we moved the Packages file away, normal update won't work
+ testfailure aptget update "$@"
+ # ensure we do not know about "foo"
+ testfailureequal "Reading package lists...
+Building dependency tree...
+E: Unable to locate package foo" aptget install -q -s foo
+}
+ensureitsbroken
+ensureitsbroken -o Acquire::By-Hash=1
+
+ensureitworks() {
+ rm -rf rootdir/var/lib/apt/lists
+ testsuccess aptget update "$@" -o Acquire::Languages=none
+ testfailure grep '^Ign' rootdir/tmp/testsuccess.output
+ rm -rf rootdir/var/lib/apt/lists
+ testsuccess aptget update "$@"
+ cp -f rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output
+ testsuccess grep '^Ign' rootdir/tmp/aptupdate.output
+ testsuccessequal "Inst foo (1.0 unstable [all])
+Conf foo (1.0 unstable [all])" aptget install -qq -s foo
+ testsuccessequal "Inst bar (1.0 unstable [i386])
+Conf bar (1.0 unstable [i386])" aptget install -qq -s bar
+}
+msgmsg 'Test by-hash via' 'config option'
+ensureitworks -o Acquire::By-Hash=force
+
+msgmsg 'Test by-hash via' 'release option'
+cp -a aptarchive/dists aptarchive/dists.bak
+# add magic string to Release file ...
+sed -i '/^Suite: / a \
+Acquire-By-Hash: yes' aptarchive/dists/unstable/Release
+signreleasefiles
+ensureitworks
+ensureitsbroken -o Acquire::By-Hash=0
+
+msgmsg 'Test by-hash via' 'sources option'
+sed -i "s#^\(deb\(-src\)\?\) #\1 [by-hash=yes] #" rootdir/etc/apt/sources.list.d/*
+ensureitworks
+#ensureitsbroken -o Acquire::By-Hash=0
+
+rm -rf aptarchive/dists
+cp -a aptarchive/dists.bak aptarchive/dists
+#ensureitworks -o Acquire::By-Hash=force
+ensureitsbroken -o Acquire::By-Hash=1
+ensureitsbroken -o Acquire::By-Hash=0
+
+sed -i "s#^\(deb\(-src\)\?\) \[by-hash=yes\] #\1 [by-hash=force] #" rootdir/etc/apt/sources.list.d/*
+ensureitworks
+#ensureitsbroken -o Acquire::By-Hash=0
+
+
+
+msgmsg 'Test InRelease by-hash via' 'sources option'
+
+rm -rf aptarchive/dists
+cp -a aptarchive/dists.bak aptarchive/dists
+mkdir -p aptarchive/dists/unstable/by-hash/SHA256
+inrelease_hash=$(sha256sum aptarchive/dists/unstable/InRelease | awk '{print $1}')
+mv aptarchive/dists/unstable/InRelease aptarchive/dists/unstable/by-hash/SHA256/$inrelease_hash
+#ensureitworks -o Acquire::By-Hash=force
+ensureitsbroken -o Acquire::By-Hash=1
+ensureitsbroken -o Acquire::By-Hash=0
+
+sed -i "s#^\(deb\(-src\)\?\) \[by-hash=force\] #\1 [by-hash=force inrelease-path=by-hash/SHA256/$inrelease_hash] #" rootdir/etc/apt/sources.list.d/*
+ensureitworks
+#ensureitsbroken -o Acquire::By-Hash=0
+
+msgmsg 'Test InRelease by-hash with' 'no fallback'
+
+rm -rf aptarchive/dists
+cp -a aptarchive/dists.bak aptarchive/dists
+
+testfailureequal "Get:1 file:${TMPWORKINGDIRECTORY}/aptarchive unstable InRelease
+Err:1 file:${TMPWORKINGDIRECTORY}/aptarchive unstable InRelease
+ File not found - ${TMPWORKINGDIRECTORY}/aptarchive/dists/unstable/by-hash/SHA256/${inrelease_hash} (2: No such file or directory)
+Reading package lists...
+E: Failed to fetch file://${TMPWORKINGDIRECTORY}/aptarchive/dists/unstable/InRelease File not found - ${TMPWORKINGDIRECTORY}/aptarchive/dists/unstable/by-hash/SHA256/${inrelease_hash} (2: No such file or directory)" aptget update
diff --git a/test/integration/test-apt-cache b/test/integration/test-apt-cache
new file mode 100755
index 0000000..bff1667
--- /dev/null
+++ b/test/integration/test-apt-cache
@@ -0,0 +1,183 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+DESCR='Some description
+ That has multiple lines'
+insertpackage 'unstable' 'fancy' 'all' '1'
+insertpackage 'unstable,installed' 'foo' 'all' '1' 'Depends: bar
+Conflicts: foobar
+Recommends: cool (>= 2) | cooler (<< 5)' "$DESCR"
+insertpackage 'unstable' 'bar' 'all' '1' 'Depends: bar
+Breaks: foo (<< 1)
+Replaces: foo (<< 1)' "$DESCR"
+insertpackage 'unstable' 'specific' 'all' '1' 'Depends: bar:i386, specific:amd64
+Breaks: foo:amd64 (<< 1)
+Replaces: foo:i386 (<< 1)' "$DESCR"
+
+setupaptarchive
+
+# dpkg is installed by our framework
+testdpkginstalled 'dpkg'
+testempty aptcache unmet dpkg
+
+# FIXME: Find some usecase for unmet as it seems kinda useless/broken
+#testsuccess aptcache unmet
+#testsuccess aptcache unmet foo
+
+# not too useful to test, but makes coverage green…
+testsuccess aptcache stats
+cp rootdir/tmp/testsuccess.output stats.output
+testsuccess test -s stats.output
+testfailureequal 'E: apt-cache stats does not take any arguments' aptcache stats foo
+testsuccess aptcache xvcg foo
+cp rootdir/tmp/testsuccess.output xvcg.output
+testsuccess test -s xvcg.output
+testsuccess aptcache dotty foo
+cp rootdir/tmp/testsuccess.output dotty.output
+testsuccess test -s dotty.output
+# for this, even the sourcecode says it is useless (expect debugging)
+testsuccess aptcache dump
+cp rootdir/tmp/testsuccess.output dump.output
+testsuccess test -s dump.output
+
+testsuccessequal 'bar
+foo
+dpkg
+specific
+fancy' aptcache pkgnames
+testsuccessequal 'bar' aptcache pkgnames bar
+testsuccessequal 'foo
+fancy' aptcache pkgnames f
+
+testsuccessequal " foo | 1 | file:$(readlink -f .)/aptarchive unstable/main all Packages" aptcache madison foo
+
+### depends
+
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ |Recommends: <cool>
+ Recommends: <cooler>' aptcache depends foo
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ |Recommends: <cool>
+ Recommends: <cooler>' aptcache depends foo --implicit
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ Recommends: <cool>' aptcache depends foo -o APT::Cache::ShowOnlyFirstOr=1
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ Recommends: <cool>' aptcache depends foo -o APT::Cache::ShowOnlyFirstOr=1 --implicit
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ |Recommends: <cool> (>= 2)
+ Recommends: <cooler> (<< 5)' aptcache depends foo -o APT::Cache::ShowVersion=1
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ |Recommends: <cool> (>= 2)
+ Recommends: <cooler> (<< 5)' aptcache depends foo -o APT::Cache::ShowVersion=1 --implicit
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>' aptcache depends foo --no-recommends
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>' aptcache depends foo --no-recommends --implicit
+testsuccessequal 'foo
+ Depends: bar' aptcache depends foo --important --implicit
+testsuccessequal 'foo
+ Conflicts: <foobar>' aptcache depends foo --important --no-depends --conflicts
+testsuccessequal 'foo
+ Conflicts: <foobar>' aptcache depends foo --important --no-depends --conflicts --implicit
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ |Recommends: <cool>
+ Recommends: <cooler>
+bar
+ Depends: bar
+ Breaks: foo
+ Replaces: foo
+<foobar>
+<cool>
+<cooler>' aptcache depends foo --recurse
+testsuccessequal 'foo
+ Depends: bar
+ Conflicts: <foobar>
+ |Recommends: <cool>
+ Recommends: <cooler>
+bar
+ Depends: bar
+ Breaks: foo
+ Replaces: foo
+ Breaks: <foo:i386>
+ Replaces: <foo:i386>
+<foobar>
+<cool>
+<cooler>
+<foo:i386>' aptcache depends foo --recurse --implicit
+testsuccessequal 'foo
+ Depends: bar
+bar
+ Depends: bar
+ Replaces: foo' aptcache depends foo --recurse --important --replaces
+testsuccessequal 'foo
+ Depends: bar
+bar
+ Depends: bar
+ Replaces: foo
+ Replaces: <foo:i386>
+<foo:i386>' aptcache depends foo --recurse --important --replaces --implicit
+testsuccessequal 'bar
+ Depends: bar
+ Breaks: foo
+ Replaces: foo' aptcache depends bar
+testsuccessequal 'bar
+ Depends: bar
+ Breaks: foo
+ Replaces: foo
+ Breaks: <foo:i386>
+ Replaces: <foo:i386>' aptcache depends bar --implicit
+
+testsuccessequal 'specific
+ Depends: <bar:i386>
+ Depends: <specific:amd64>
+ specific
+ Breaks: <foo:amd64>
+ Replaces: <foo:i386>' aptcache depends specific
+testsuccessequal 'specific
+ Depends: <bar:i386>
+ Depends: <specific:amd64>
+ specific
+ Breaks: <foo:amd64>
+ Replaces: <foo:i386>' aptcache depends specific --implicit
+
+## rdepends
+
+# Note that specific does not appear in this list as it doesn't depend on foo,
+# but on an arch-specific foo!
+testsuccessequal 'foo
+Reverse Depends:
+ bar
+ bar' aptcache rdepends foo
+testsuccessequal 'foo
+Reverse Depends:
+ Breaks: bar
+ Replaces: bar' aptcache rdepends foo -o APT::Cache::ShowDependencyType=1
+testsuccessequal 'foo
+Reverse Depends:
+ Breaks: bar (<< 1)
+ Replaces: bar (<< 1)' aptcache rdepends foo -o APT::Cache::ShowDependencyType=1 -o APT::Cache::ShowVersion=1
+testsuccessequal 'foo
+Reverse Depends:
+ Breaks: bar (<< 1)' aptcache rdepends foo -o APT::Cache::ShowDependencyType=1 -o APT::Cache::ShowVersion=1 --important --breaks
diff --git a/test/integration/test-apt-cache-remapping b/test/integration/test-apt-cache-remapping
new file mode 100755
index 0000000..31a406c
--- /dev/null
+++ b/test/integration/test-apt-cache-remapping
@@ -0,0 +1,47 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'foo' 'amd64' '1'
+
+# the default is 1MB – too much for our simple tests
+echo 'APT::Cache-Grow "1000";' > rootdir/etc/apt/apt.conf.d/limit-cachegrow.conf
+
+# experiment with cache remapping
+rm -f rootdir/var/cache/apt/*.bin
+testsuccess apt install ./incoming/foo_1_amd64.deb -s
+msgtest 'Cache files are generated in tests'
+if [ ! -e rootdir/var/cache/apt/srcpkgcache.bin -o ! -e rootdir/var/cache/apt/pkgcache.bin ]; then
+ msgfail 'files do not exist'
+ ls -l rootdir/var/cache/apt/*.bin
+ exit 1
+else
+ msgpass
+fi
+
+SLSIZE="$(stat -c '%s' rootdir/var/cache/apt/srcpkgcache.bin)"
+STSIZE="$(stat -c '%s' rootdir/var/cache/apt/pkgcache.bin)"
+rm -f rootdir/var/cache/apt/*.bin
+testfailure apt install ./incoming/foo_1_amd64.deb -s -o APT::Cache-Start="$SLSIZE" -o APT::Cache-Grow=0
+testfailure test -e rootdir/var/cache/apt/pkgcache.bin
+rm -f rootdir/var/cache/apt/*.bin
+testfailure apt install ./incoming/foo_1_amd64.deb -s -o APT::Cache-Start="$SLSIZE" -o APT::Cache-Limit="$SLSIZE"
+testfailure test -e rootdir/var/cache/apt/pkgcache.bin
+rm -f rootdir/var/cache/apt/*.bin
+testsuccess apt install ./incoming/foo_1_amd64.deb -s -o APT::Cache-Start="$SLSIZE"
+testsuccess test -e rootdir/var/cache/apt/srcpkgcache.bin -a -e rootdir/var/cache/apt/pkgcache.bin
+
+rm -f rootdir/var/cache/apt/*.bin
+testfailure apt install ./incoming/foo_1_amd64.deb -s -o APT::Cache-Start="$STSIZE" -o APT::Cache-Grow=0
+rm -f rootdir/var/cache/apt/*.bin
+testfailure apt install ./incoming/foo_1_amd64.deb -s -o APT::Cache-Start="$STSIZE" -o APT::Cache-Limit="$SLSIZE"
+rm -f rootdir/var/cache/apt/*.bin
+testfailure apt install ./incoming/foo_1_amd64.deb -s -o APT::Cache-Start="$STSIZE" -o APT::Cache-Limit="$STSIZE"
+rm -f rootdir/var/cache/apt/*.bin
+testsuccess apt install ./incoming/foo_1_amd64.deb -s -o APT::Cache-Start="$STSIZE"
+testsuccess test -e rootdir/var/cache/apt/srcpkgcache.bin -a -e rootdir/var/cache/apt/pkgcache.bin
diff --git a/test/integration/test-apt-cache-showsrc b/test/integration/test-apt-cache-showsrc
new file mode 100755
index 0000000..88de077
--- /dev/null
+++ b/test/integration/test-apt-cache-showsrc
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+# we have a foo source package
+insertsource 'unstable' 'foo' 'all' '1.0' '' 'foo-binary'
+
+# and a similar one that builds a foo binary package
+insertsource 'unstable' 'unreleated' 'all' '1.0' '' 'foo'
+
+# just here to workaround the need for a authenticated package
+insertpackage 'unstable' 'workaround' 'all' '1.0'
+
+setupaptarchive
+
+# by default apt-cache showsrc will look into "binary" and "source" names
+# and show all matches
+aptcache showsrc foo > output.txt
+testsuccess grep "Package: foo" output.txt
+testsuccess grep "Package: unreleated" output.txt
+
+# by default apt-cache showsrc will look into "binary" and "source" names
+# and show all matches
+aptcache showsrc --only-source foo > output.txt
+testsuccess grep "Package: foo" output.txt
+testfailure grep "Package: unreleated" output.txt
diff --git a/test/integration/test-apt-cdrom b/test/integration/test-apt-cdrom
new file mode 100755
index 0000000..01680c4
--- /dev/null
+++ b/test/integration/test-apt-cdrom
@@ -0,0 +1,158 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'testing' 'amd64,i386' '0.8.15' 'stable'
+setupaptarchive --no-update
+
+changetocdrom 'Debian APT Testdisk 0.8.15'
+
+# -de is not in the Release file, but picked up anyway for compatibility
+cd rootdir/media/cdrom-unmounted/dists/stable/main/i18n
+chmod +w .
+sed -e '/^Description-en:/ d' -e '/^ / d' -e '/^$/ d' Translation-en > Translation-de
+echo 'Description-de: automatisch generiertes Testpaket testing=0.8.15/stable
+ Diese Pakete sind nur für das testen von APT gedacht,
+ sie erfüllen keinen Zweck auf einem normalen System…
+' >> Translation-de
+compressfile Translation-de
+rm -f Translation-en Translation-de
+chmod -R 555 .
+cd - > /dev/null
+
+aptcdromlog() {
+ rm -f rootdir/tmp/apt-cdrom.log
+ test ! -e rootdir/media/cdrom || echo "CD-ROM is mounted, but shouldn't be!"
+ test -e rootdir/media/cdrom-unmounted || echo "Unmounted CD-ROM doesn't exist, but it should!"
+ aptcdrom "$@" -o quiet=1 >rootdir/tmp/apt-cdrom.log 2>&1 </dev/null
+ sed -e '/gpgv\?:\s*Signature made/ d' \
+ -e '/gpgv\?:\s*Good signature/ d' \
+ -e '/gpgv\?:\s*using RSA key/ d' \
+ -e '/gpgv\?:\s*issuer/ d' \
+ -e '/^Identifying/ d' \
+ -e '/Reading / d' rootdir/tmp/apt-cdrom.log
+ test ! -e rootdir/media/cdrom || echo "CD-ROM is mounted, but shouldn't be!"
+ test -e rootdir/media/cdrom-unmounted || echo "Unmounted CD-ROM doesn't exist, but it should!"
+}
+aptautotest_aptcdromlog_add() { aptautotest_aptget_update "$@"; }
+
+CDROM_PRE="Using CD-ROM mount point $(readlink -f ./rootdir/media)/cdrom/
+Unmounting CD-ROM...
+Waiting for disc...
+Please insert a Disc in the drive and press [Enter]
+Mounting CD-ROM...
+Scanning disc for index files..."
+CDROM_POST="This disc is called:
+'Debian APT Testdisk 0.8.15'
+Writing new source list
+Source list entries for this disc are:
+deb cdrom:[Debian APT Testdisk 0.8.15]/ stable main
+deb-src cdrom:[Debian APT Testdisk 0.8.15]/ stable main
+Unmounting CD-ROM...
+Repeat this process for the rest of the CDs in your set."
+
+testsuccessequal "$CDROM_PRE
+Found 3 package indexes, 1 source indexes, 1 translation indexes and 1 signatures
+Found label 'Debian APT Testdisk 0.8.15'
+$CDROM_POST" aptcdromlog add
+
+testsuccessequal "Using CD-ROM mount point $(readlink -f ./rootdir/media)/cdrom/
+Mounting CD-ROM...
+Stored label: Debian APT Testdisk 0.8.15
+Unmounting CD-ROM..." aptcdromlog ident
+
+# apt-setup uses these commands (expect the tr in the id) to find id and label
+ident="$(LC_ALL=C aptcdrom ident 2>&1 )"
+CD_ID="$(echo "$ident" | grep "^Identifying" | head -n1 | cut -d" " -f2 | tr --delete '[]')"
+CD_LABEL="$(echo "$ident" | grep "^Stored label:" | head -n1 | sed "s/^[^:]*: //")"
+testfileequal rootdir/var/lib/apt/cdroms.list "CD::${CD_ID} \"${CD_LABEL}\";
+CD::${CD_ID}::Label \"${CD_LABEL}\";"
+
+testcdromusage() {
+ touch rootdir/var/lib/apt/extended_states
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following NEW packages will be installed:
+ testing
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst testing (0.8.15 stable [amd64])
+Conf testing (0.8.15 stable [amd64])' aptget install testing -s
+
+ testdpkgnotinstalled testing
+ testsuccess aptget install testing -y
+ testdpkginstalled testing
+ testsuccess aptget purge testing -y
+ testdpkgnotinstalled testing
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following NEW packages will be installed:
+ testing:i386
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst testing:i386 (0.8.15 stable [i386])
+Conf testing:i386 (0.8.15 stable [i386])' aptget install testing:i386 -s
+
+ testdpkgnotinstalled testing:i386
+ testsuccess aptget install testing:i386 -y
+ testdpkginstalled testing:i386
+ testsuccess aptget purge testing:i386 -y
+ testdpkgnotinstalled testing:i386
+
+ cd downloaded
+ rm -f testing_0.8.15_amd64.deb
+ testsuccess aptget download testing
+ testsuccess test -s testing_0.8.15_amd64.deb
+ rm -f testing_0.8.15_amd64.deb
+
+ rm -f testing_0.8.15.dsc
+ testsuccess aptget source testing --dsc-only
+ testsuccess test -s testing_0.8.15.dsc
+ rm -f testing_0.8.15.dsc
+ cd - >/dev/null
+}
+testcdromusage
+
+# check Idempotence of apt-cdrom (and disabling of Translation dropping)
+testsuccessequal "$CDROM_PRE
+Found 3 package indexes, 1 source indexes, 2 translation indexes and 1 signatures
+$CDROM_POST" aptcdromlog add -o APT::CDROM::DropTranslation=0
+
+# take Translations from previous runs as needed
+testsuccessequal "$CDROM_PRE
+Found 3 package indexes, 1 source indexes, 2 translation indexes and 1 signatures
+$CDROM_POST" aptcdromlog add
+msgtest 'Test for the german description translation of' 'testing'
+aptcache show testing -o Acquire::Languages=de | grep -q '^Description-de: ' && msgpass || msgfail
+rm -rf rootdir/var/lib/apt/lists
+testsuccessequal "$CDROM_PRE
+Found 3 package indexes, 1 source indexes, 1 translation indexes and 1 signatures
+$CDROM_POST" aptcdromlog add
+msgtest 'Test for the english description translation of' 'testing'
+aptcache show testing -o Acquire::Languages=en | grep -q '^Description-en: ' && msgpass || msgfail
+
+# ensure cdrom method isn't trying to mount the cdrom
+mv rootdir/media/cdrom-unmounted rootdir/media/cdrom-ejected
+msgmsg "ensure an update doesn't mess with cdrom sources"
+testsuccess aptget update
+testfileequal rootdir/tmp/testsuccess.output 'Hit:1 cdrom://Debian APT Testdisk 0.8.15 stable InRelease
+Reading package lists...'
+mv rootdir/media/cdrom-ejected rootdir/media/cdrom-unmounted
+testcdromusage
+
+msgmsg 'and again to check that it withstands the temptation even if it could mount'
+testsuccess aptget update
+testfileequal rootdir/tmp/testsuccess.output 'Hit:1 cdrom://Debian APT Testdisk 0.8.15 stable InRelease
+Reading package lists...'
+testcdromusage
+
+msgmsg 'Check that nothing touched our' 'CD-ROM'
+for file in $(find rootdir/media/cdrom-unmounted/dists); do
+ testfilestats "$file" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:555"
+done
diff --git a/test/integration/test-apt-cli-json-hooks b/test/integration/test-apt-cli-json-hooks
new file mode 100755
index 0000000..80922e0
--- /dev/null
+++ b/test/integration/test-apt-cli-json-hooks
@@ -0,0 +1,209 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+DESCR='Some description that has a unusual word xxyyzz and aabbcc and a UPPERCASE'
+DESCR2='Some other description with the unusual aabbcc only'
+insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR
+ Long description of stuff and such, with lines
+ .
+ and paragraphs and everything."
+insertpackage 'testing' 'bar' 'i386' '2.0' '' '' "$DESCR2"
+
+setupaptarchive
+
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+cat >> json-hook.sh << EOF
+#!/bin/bash
+while true; do
+ read request <&\$APT_HOOK_SOCKET
+ read empty <&\$APT_HOOK_SOCKET
+
+ if echo "\$request" | grep -q ".hello"; then
+ echo "HOOK: HELLO"
+ printf '{"jsonrpc": "2.0", "result": {"version": "0.1"}, "id": 0}\n\n' >&\$APT_HOOK_SOCKET
+ fi
+
+ if echo "\$request" | grep -q ".bye"; then
+ echo "HOOK: BYE"
+ exit 0;
+ fi
+
+ echo HOOK: request \$request
+ echo HOOK: empty \$empty
+done
+EOF
+
+chmod +x json-hook.sh
+
+HOOK="$(readlink -f ./json-hook.sh)"
+
+# Setup all hooks
+cat >> rootdir/etc/apt/apt.conf.d/99-json-hooks << EOF
+ AptCli::Hooks::Install:: "$HOOK";
+ AptCli::Hooks::Search:: "$HOOK";
+EOF
+
+
+############################# Success search #######################
+testsuccessequal 'HOOK: HELLO
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}
+HOOK: empty
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.search.pre","params":{"command":"search","search-terms":["foo"],"unknown-packages":[],"packages":[]}}
+HOOK: empty
+HOOK: BYE
+Sorting...
+Full Text Search...
+foo/unstable 1.0 all
+ Some description that has a unusual word xxyyzz and aabbcc and a UPPERCASE
+
+HOOK: HELLO
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}
+HOOK: empty
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.search.post","params":{"command":"search","search-terms":["foo"],"unknown-packages":[],"packages":[]}}
+HOOK: empty
+HOOK: BYE' apt search foo
+
+############################# Failed search #######################
+testsuccessequal 'HOOK: HELLO
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}
+HOOK: empty
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.search.pre","params":{"command":"search","search-terms":["foox"],"unknown-packages":[],"packages":[]}}
+HOOK: empty
+HOOK: BYE
+Sorting...
+Full Text Search...
+HOOK: HELLO
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}
+HOOK: empty
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.search.fail","params":{"command":"search","search-terms":["foox"],"unknown-packages":[],"packages":[]}}
+HOOK: empty
+HOOK: BYE' apt search foox
+
+
+############################# Failed install #######################
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+HOOK: HELLO
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}
+HOOK: empty
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.install.fail","params":{"command":"install","search-terms":["foxxx"],"unknown-packages":["foxxx"],"packages":[]}}
+HOOK: empty
+HOOK: BYE
+E: Unable to locate package foxxx' apt install foxxx
+
+############################# Success install #######################
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+HOOK: HELLO
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}
+HOOK: empty
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.install.pre-prompt","params":{"command":"install","search-terms":["foo"],"unknown-packages":[],"packages":[{"id":1,"name":"foo","architecture":"i386","mode":"install","automatic":false,"versions":{"candidate":{"id":1,"version":"1.0","architecture":"all","pin":500},"install":{"id":1,"version":"1.0","architecture":"all","pin":500}}}]}}
+HOOK: empty
+HOOK: BYE
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [all])
+Conf foo (1.0 unstable [all])
+HOOK: HELLO
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.hello","id":0,"params":{"versions":["0.1"]}}
+HOOK: empty
+HOOK: request {"jsonrpc":"2.0","method":"org.debian.apt.hooks.install.post","params":{"command":"install","search-terms":["foo"],"unknown-packages":[],"packages":[{"id":1,"name":"foo","architecture":"i386","mode":"install","automatic":false,"versions":{"candidate":{"id":1,"version":"1.0","architecture":"all","pin":500},"install":{"id":1,"version":"1.0","architecture":"all","pin":500}}}]}}
+HOOK: empty
+HOOK: BYE' apt install foo -s
+
+################## Error in hello response #########################
+
+cat > json-hook.sh << EOF
+#!/bin/bash
+exec 2>/dev/null
+trap '' SIGPIPE
+while true; do
+ read request <&\$APT_HOOK_SOCKET
+ read empty <&\$APT_HOOK_SOCKET
+
+ if echo "\$request" | grep -q ".hello"; then
+ printf '{"jsonrpc": "2.0", "error": {"version": "0.1"}, "id": 0}\n\n' >&\$APT_HOOK_SOCKET
+ break
+ fi
+done
+exit 0
+EOF
+
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Hook '$HOOK' reported an error during hello: {"jsonrpc": "2.0", "error": {"version": "0.1"}, "id": 0}
+E: Hook '$HOOK' reported an error during hello: {"jsonrpc": "2.0", "error": {"version": "0.1"}, "id": 0}' apt install foo -s
+
+################## Missing separator line #########################
+cat > json-hook.sh << EOF
+#!/bin/bash
+exec 2>/dev/null
+trap '' SIGPIPE
+while true; do
+ read request <&\$APT_HOOK_SOCKET
+ read empty <&\$APT_HOOK_SOCKET
+
+ if echo "\$request" | grep -q ".hello"; then
+ printf '{"jsonrpc": "2.0", "result": {"version": "0.1"}, "id": 0}\n' >&\$APT_HOOK_SOCKET
+ break
+ fi
+done
+exit 0
+EOF
+
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Could not read message separator line after handshake from '$HOOK': end of file
+E: Could not read message separator line after handshake from '$HOOK': end of file' apt install foo -s
+
+################## Wrong separator line #########################
+cat > json-hook.sh << EOF
+#!/bin/bash
+exec 2>/dev/null
+trap '' SIGPIPE
+while true; do
+ read request <&\$APT_HOOK_SOCKET
+ read empty <&\$APT_HOOK_SOCKET
+
+ if echo "\$request" | grep -q ".hello"; then
+ printf '{"jsonrpc": "2.0", "result": {"version": "0.1"}, "id": 0}\nXX' >&\$APT_HOOK_SOCKET
+ break
+ fi
+done
+exit 0
+EOF
+
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Expected empty line after handshake from '$HOOK', received XX
+E: Expected empty line after handshake from '$HOOK', received XX' apt install foo -s
+
+##################### Removed hook || true ############################
+cat > rootdir/etc/apt/apt.conf.d/99-json-hooks << EOF
+ AptCli::Hooks::Install:: "true";
+ AptCli::Hooks::Search:: "true";
+EOF
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [all])
+Conf foo (1.0 unstable [all])' apt install foo -s
+
+
+
diff --git a/test/integration/test-apt-cli-list b/test/integration/test-apt-cli-list
new file mode 100755
index 0000000..3a9ca2c
--- /dev/null
+++ b/test/integration/test-apt-cli-list
@@ -0,0 +1,93 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386' 'armel'
+
+insertpackage 'unstable' 'foo' 'all' '1.0'
+insertinstalledpackage 'bar' 'i386' '1.0'
+
+insertinstalledpackage 'foobar' 'i386' '1.0'
+insertpackage 'unstable' 'foobar' 'i386' '2.0'
+
+insertinstalledpackage 'baz' 'all' '0.1'
+insertpackage 'testing' 'baz' 'all' '1.0'
+insertpackage 'unstable' 'baz' 'all' '2.0'
+
+insertinstalledpackage 'foreign' 'armel' '1.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'foreign' 'i386,armel' '2.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'lib' 'i386,armel' '2.0' 'Multi-Arch: same'
+
+setupaptarchive
+
+testsuccessequal "Listing...
+bar/now 1.0 i386 [installed,local]
+baz/unstable 2.0 all [upgradable from: 0.1]
+dpkg/now 1.16.2+fake all [installed,local]
+foo/unstable 1.0 all
+foobar/unstable 2.0 i386 [upgradable from: 1.0]
+foreign/unstable 2.0 armel [upgradable from: 1.0]
+foreign/unstable 2.0 i386
+lib/unstable 2.0 armel
+lib/unstable 2.0 i386" apt list
+
+testsuccessequal "Listing...
+foo/unstable 1.0 all
+foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list "foo*"
+
+testsuccessequal "Listing...
+baz/unstable 2.0 all [upgradable from: 0.1]
+foobar/unstable 2.0 i386 [upgradable from: 1.0]
+foreign/unstable 2.0 armel [upgradable from: 1.0]" apt list --upgradable
+
+# FIXME: hm, hm - does it make sense to have this different? shouldn't
+# we use "installed,upgradable" consistently?
+testsuccessequal "Listing...
+bar/now 1.0 i386 [installed,local]
+baz/now 0.1 all [installed,upgradable to: 2.0]
+dpkg/now 1.16.2+fake all [installed,local]
+foobar/now 1.0 i386 [installed,upgradable to: 2.0]
+foreign/now 1.0 armel [installed,upgradable to: 2.0]" apt list --installed
+
+testsuccessequal "Listing...
+bar/now 1.0 i386 [installed,local]
+
+foobar/unstable 2.0 i386 [upgradable from: 1.0]
+foobar/now 1.0 i386 [installed,upgradable to: 2.0]
+" apt list bar foobar --all-versions
+
+testsuccessequal "Listing...
+bar/now 1.0 i386 [installed,local]
+ an autogenerated dummy bar=1.0/installed
+" apt list bar --verbose
+
+# test for dpkg ^rc state
+insertinstalledpackage 'conf-only' 'i386' '1.0' '' '' 'deinstall ok config-files'
+testsuccessequal "Listing...
+conf-only/now 1.0 i386 [residual-config]" apt list conf-only
+
+# ensure that the users learns about multiple versions too
+testsuccessequal "Listing...
+baz/unstable 2.0 all [upgradable from: 0.1]
+N: There are 2 additional versions. Please use the '-a' switch to see them." apt list baz -o quiet=0
+testsuccessequal 'Listing...
+baz/unstable 2.0 all [upgradable from: 0.1]
+baz/testing 1.0 all
+baz/now 0.1 all [installed,upgradable to: 2.0]
+' apt list baz -o quiet=0 -a
+
+# test format strings for machine parseable output
+testsuccessequal 'bar - 1.0 - 1.0
+baz - 0.1 - 2.0' apt list -qq bar baz -o APT::Cmd::use-format=true -o APT::Cmd::format="\${Package} - \${installed:Version} - \${candidate:Version}"
+
+
+insertinstalledpackage 'lib' 'i386,armel' '1.0' 'Multi-Arch: same'
+testsuccessequal 'Listing...
+baz/unstable 2.0 all [upgradable from: 0.1]
+foobar/unstable 2.0 i386 [upgradable from: 1.0]
+foreign/unstable 2.0 armel [upgradable from: 1.0]
+lib/unstable 2.0 armel [upgradable from: 1.0]
+lib/unstable 2.0 i386 [upgradable from: 1.0]' apt list --upgradeable
diff --git a/test/integration/test-apt-cli-search b/test/integration/test-apt-cli-search
new file mode 100755
index 0000000..6457ece
--- /dev/null
+++ b/test/integration/test-apt-cli-search
@@ -0,0 +1,79 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+DESCR='Some description that has a unusual word xxyyzz and aabbcc and a UPPERCASE'
+DESCR2='Some other description with the unusual aabbcc only'
+insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR
+ Long description of stuff and such, with lines
+ .
+ and paragraphs and everything."
+insertpackage 'testing' 'bar' 'i386' '2.0' '' '' "$DESCR2"
+
+setupaptarchive
+
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+testfailureequal 'E: You must give at least one search pattern' aptcache search
+testfailureequal 'E: You must give at least one search pattern' apt search
+
+# with OP progress
+testsuccessequal "Sorting...
+Full Text Search...
+foo/unstable 1.0 all
+ $DESCR
+" apt search xxyyzz
+
+# without op progress
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq xxyyzz
+testempty apt search -qq --names-only xxyyzz
+
+# search name
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq foo
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq --names-only foo
+
+# search with multiple words is a AND search
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq aabbcc xxyyzz
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq 'a+b+c+' 'i*xxy{0,2}zz'
+
+# search is not case-sensitive by default
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq uppercase
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq 'up[pP]erc[Aa]se'
+
+# search is done in the long description
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+" apt search -qq 'long description'
+testsuccessequal "foo/unstable 1.0 all
+ $DESCR
+ Long description of stuff and such, with lines
+ .
+ and paragraphs and everything.
+" apt search --full -qq 'long description'
+
+# output is sorted and search word finds both package
+testsuccessequal "bar/testing 2.0 i386
+ $DESCR2
+
+foo/unstable 1.0 all
+ $DESCR
+" apt search -qq aabbcc
diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show
new file mode 100755
index 0000000..a37dbd8
--- /dev/null
+++ b/test/integration/test-apt-cli-show
@@ -0,0 +1,111 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386' 'amd64'
+
+generatelotsofnames() {
+ for i in $(seq 0 10000); do
+ printf ', this-is-a-long-pkg-name-%s (= 0.a.long.version)' "$i"
+ done
+}
+
+DESCR='Some description
+ That has multiple lines'
+insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR"
+insertpackage 'unstable' 'bar' 'i386,amd64' '1' '' '' "$DESCR"
+insertpackage 'unstable' 'big' 'i386,amd64' '1' 'Installed-Size: 4129421' '' "$DESCR"
+insertpackage 'unstable' 'large' 'all' '1' "Provides: pkga$(generatelotsofnames)" '' "$DESCR"
+insertpackage 'unstable' 'large2' 'all' '1' "Provides: foobar, pkga$(generatelotsofnames)" '' "$DESCR"
+insertinstalledpackage 'foo' 'all' '1.0'
+
+setupaptarchive
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+# note that we do not display Description-md5 with the "apt" cmd
+# and also show some additional fields that are calculated
+testsuccessequal "Package: foo
+Version: 1.0
+Priority: optional
+Section: other
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 43.0 kB
+Download-Size: unknown
+APT-Manual-Installed: yes
+APT-Sources: file:$APTARCHIVE unstable/main all Packages
+Description: Some description
+ That has multiple lines
+" apt show foo
+testsuccessequal "Package: bar
+Version: 1
+Priority: optional
+Section: other
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 43.0 kB
+Download-Size: unknown
+APT-Sources: file:$APTARCHIVE unstable/main i386 Packages
+Description: Some description
+ That has multiple lines
+" apt show bar
+testsuccessequal "Package: bar:amd64
+Version: 1
+Priority: optional
+Section: other
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 43.0 kB
+Download-Size: unknown
+APT-Sources: file:$APTARCHIVE unstable/main amd64 Packages
+Description: Some description
+ That has multiple lines
+" apt show bar:amd64
+testsuccessequal "Package: big:amd64
+Version: 1
+Priority: optional
+Section: other
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 4229 MB
+Download-Size: unknown
+APT-Sources: file:$APTARCHIVE unstable/main amd64 Packages
+Description: Some description
+ That has multiple lines
+" apt show big:amd64
+
+testsuccessequal "Package: large
+Version: 1
+Priority: optional
+Section: other
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 43.0 kB
+Provides: pkga$(generatelotsofnames)
+Download-Size: unknown
+APT-Sources: file:$APTARCHIVE unstable/main all Packages
+Description: Some description
+ That has multiple lines
+" apt show large
+testsuccessequal "Package: large2
+Version: 1
+Priority: optional
+Section: other
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 43.0 kB
+Provides: foobar, pkga$(generatelotsofnames)
+Download-Size: unknown
+APT-Sources: file:$APTARCHIVE unstable/main all Packages
+Description: Some description
+ That has multiple lines
+" apt show large2
+
+# this is the default, but disabled by the testcases
+testsuccess apt show foo -o Apt::Cmd::Disable-Script-Warning=0
+cp rootdir/tmp/testsuccess.output aptshow.output
+testsuccess grep '^WARNING: ' aptshow.output
+
+if [ "$(id -u)" != '0' ]; then
+ testsuccess apt install foo -s -o APT::Get::Show-User-Simulation-Note=1
+ cp rootdir/tmp/testsuccess.output aptshow.output
+ testsuccess grep '^NOTE: ' aptshow.output
+fi
diff --git a/test/integration/test-apt-cli-update b/test/integration/test-apt-cli-update
new file mode 100755
index 0000000..cc8d051
--- /dev/null
+++ b/test/integration/test-apt-cli-update
@@ -0,0 +1,23 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'foo' 'all' '2.0'
+cp rootdir/var/lib/dpkg/status dpkg.status
+insertinstalledpackage 'foo' 'all' '1.0'
+
+setupaptarchive --no-update
+
+testfailuremsg 'E: The update command takes no arguments' apt update arguments
+
+testempty apt update -qq -o pkgCacheFile::Generate=false
+testsuccessequal "1 package can be upgraded. Run 'apt list --upgradable' to see it." apt update -qq
+
+cp dpkg.status rootdir/var/lib/dpkg/status
+insertinstalledpackage 'foo' 'all' '2.0'
+testsuccessequal 'All packages are up to date.' apt update -qq
diff --git a/test/integration/test-apt-cli-upgrade b/test/integration/test-apt-cli-upgrade
new file mode 100755
index 0000000..705c163
--- /dev/null
+++ b/test/integration/test-apt-cli-upgrade
@@ -0,0 +1,32 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'foo' 'all' '2.0' 'Depends: foo-new-dependency'
+insertpackage 'unstable' 'foo-new-dependency' 'all' '2.0'
+insertinstalledpackage 'foo' 'all' '1.0'
+
+setupaptarchive
+
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+# default is to allow new dependencies
+testsuccessequal "The following NEW packages will be installed:
+ foo-new-dependency
+The following packages will be upgraded:
+ foo
+1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo-new-dependency (2.0 unstable [all])
+Inst foo [1.0] (2.0 unstable [all])
+Conf foo-new-dependency (2.0 unstable [all])
+Conf foo (2.0 unstable [all])" apt upgrade -qq -s
+
+# ensure the 'old' way works as well
+testsuccessequal "The following packages have been kept back:
+ foo
+0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded." apt upgrade -qq -s --no-new-pkgs
diff --git a/test/integration/test-apt-config b/test/integration/test-apt-config
new file mode 100755
index 0000000..12df63d
--- /dev/null
+++ b/test/integration/test-apt-config
@@ -0,0 +1,50 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+testsuccess aptconfig dump
+testsuccessequal 'APT::Architecture "amd64";' aptconfig dump APT::Architecture
+testempty aptconfig dump config::which::does::not::exist
+
+testsuccessequal 'APT::Architectures "";
+APT::Architectures:: "amd64";' aptconfig dump APT::Architectures
+testsuccessequal 'APT::Architectures:: "amd64";' aptconfig dump --no-empty APT::Architectures
+testsuccessequal 'amd64' aptconfig dump --no-empty --format='%v%n' APT::Architectures
+
+testempty aptconfig shell
+testfailureequal 'E: Arguments not in pairs' aptconfig shell APT::Architecture
+testempty aptconfig shell APT::Architecture ARCH # incorrect order
+testsuccessequal "ARCH='amd64'" aptconfig shell ARCH APT::Architecture
+
+ROOTDIR="$(readlink -f rootdir)"
+testsuccessequal "CONFIG='apt.conf'" aptconfig shell CONFIG Dir::Etc::main
+testsuccessequal "CONFIG='${ROOTDIR}/etc/apt/apt.conf'" aptconfig shell CONFIG Dir::Etc::main/f
+testsuccessequal "CONFIG='etc/apt'" aptconfig shell CONFIG Dir::Etc
+testsuccessequal "CONFIG='${ROOTDIR}/etc/apt/'" aptconfig shell CONFIG Dir::Etc/ # old style
+testsuccessequal "CONFIG='${ROOTDIR}/etc/apt/'" aptconfig shell CONFIG Dir::Etc/d
+
+testempty aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles
+export DEB_BUILD_PROFILES='nodoc stage1'
+testsuccessequal 'nodoc
+stage1' aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles
+unset DEB_BUILD_PROFILES
+testempty aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles
+
+cat > spaces.conf <<EOF
+Spaces::Test::"Foo Bar" "1 1";
+Spaces::Test2::" Bar Baz " "B B" {
+ A%20B "C C";
+ "B C" "A A";
+};
+EOF
+testsuccessequal 'Spaces::Test "";
+Spaces::Test::Foo%20Bar "1 1";
+Spaces::Test2 "";
+Spaces::Test2::%20Bar%20Baz%20 "B B";
+Spaces::Test2::%20Bar%20Baz%20::A%20B "C C";
+Spaces::Test2::%20Bar%20Baz%20::B%20C "A A";' aptconfig dump -c spaces.conf Spaces::Test Spaces::Test2
diff --git a/test/integration/test-apt-edit-sources b/test/integration/test-apt-edit-sources
new file mode 100755
index 0000000..58742e9
--- /dev/null
+++ b/test/integration/test-apt-edit-sources
@@ -0,0 +1,39 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+echo 'Dir::Bin::Editor "cat";' > rootdir/etc/apt/apt.conf.d/editor.conf
+
+echo 'deb http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list.d/rocks.list
+testsuccessequal "$(cat rootdir/etc/apt/sources.list.d/rocks.list)" apt edit-sources rocks.list
+
+cat >editor.sh <<EOF
+#!/bin/sh
+umask 077
+touch "\$@"
+EOF
+chmod +x ./editor.sh
+echo 'Dir::Bin::Editor "./editor.sh";' > rootdir/etc/apt/apt.conf.d/editor.conf
+testsuccess apt edit-sources blub.list
+testfailure test -e 'rootdir/etc/apt/sources.list.d/blub.list'
+
+cat >editor.sh <<EOF
+#!/bin/sh
+umask 077
+echo '#comment' > "\$1"
+EOF
+testsuccess apt edit-sources blub.list
+testfilestats 'rootdir/etc/apt/sources.list.d/blub.list' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+
+echo 'Dir::Bin::Editor "cat";' > rootdir/etc/apt/apt.conf.d/editor.conf
+echo 'blub' > rootdir/etc/apt/sources.list.d/blub.list
+testfailure apt edit-sources blub.list --assume-no
+
+echo 'deb http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list.d/blub.list
+touch -m -d 'now + 1 hour' rootdir/etc/apt/sources.list.d/blub.list
+testwarning apt edit-sources blub.list --assume-no
diff --git a/test/integration/test-apt-extracttemplates b/test/integration/test-apt-extracttemplates
new file mode 100755
index 0000000..a47257c
--- /dev/null
+++ b/test/integration/test-apt-extracttemplates
@@ -0,0 +1,78 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+# apt-extracttemplates needs this
+insertinstalledpackage 'pkg-with-template' 'amd64' '1.0'
+
+# build a simple package that contains a config and a template
+mkdir -p DEBIAN
+CONFIG_STR="#!/bin/sh
+random shell stuff
+"
+echo "$CONFIG_STR" > DEBIAN/config
+chmod 755 DEBIAN/config
+
+testrun() {
+ local TEMPLATE_STR='Template: foo/bar
+Type: string
+Description: Some bar var
+'
+ echo "$TEMPLATE_STR" > DEBIAN/templates
+ buildsimplenativepackage "$1" 'amd64' '0.8.15' 'stable' "$2" 'pkg with template' '' '' './DEBIAN'
+
+ cp dpkg.status rootdir/var/lib/dpkg/status
+ insertinstalledpackage 'debconf' 'amd64' '3'
+
+ # ensure we get the right stuff out of the file
+ rm -rf extracttemplates-out rootdir/var/cache/apt
+ mkdir extracttemplates-out
+ testsuccess aptextracttemplates -t ./extracttemplates-out incoming/${1}*.deb
+ OUT='rootdir/tmp/testsuccess.output'
+ testequal "$1" cut -f1 -d' ' $OUT
+ if [ -n "$2" ]; then
+ testequal '' cut -s -f2 -d' ' $OUT
+ else
+ testequal '1.0' cut -f2 -d' ' $OUT
+ fi
+ TEMPLATE=$(cut -f3 -d' ' $OUT)
+ testfileequal "$TEMPLATE" "$TEMPLATE_STR"
+ CONFIG=$(cut -f4 -d' ' $OUT)
+ testfileequal "$CONFIG" "$CONFIG_STR"
+ msgtest 'No extra files or directories in extraction directory'
+ if [ "$(find ./extracttemplates-out | wc -l)" = '3' ]; then
+ msgpass
+ else
+ msgfail
+ ls -l ./extracttemplates-out
+ fi
+
+ # ensure that the format of the output string has the right number of dots
+ for s in "$CONFIG" "$TEMPLATE"; do
+ NR_DOTS=$(basename "$s" | tr -c -d '.')
+ testequal '..' echo $NR_DOTS
+ done
+
+ if [ -n "$2" ]; then
+ rm -rf extracttemplates-out rootdir/var/cache/apt
+ mkdir extracttemplates-out
+ cp dpkg.status rootdir/var/lib/dpkg/status
+ insertinstalledpackage 'debconf' 'amd64' '1'
+ testempty aptextracttemplates -t ./extracttemplates-out incoming/${1}*.deb
+ fi
+}
+
+cp rootdir/var/lib/dpkg/status dpkg.status
+testrun 'pkg-with-template' ''
+testrun 'pkg-with-template-depends' 'Depends: debconf (>= 2)'
+testrun 'pkg-with-template-predepends' 'Pre-Depends: debconf (>= 2)'
+
+# test with no debconf installed
+cp dpkg.status rootdir/var/lib/dpkg/status
+testfailure aptextracttemplates -t ./extracttemplates-out incoming/pkg-with-template-depends*.deb
+testfileequal 'rootdir/tmp/testfailure.output' 'E: Cannot get debconf version. Is debconf installed?'
diff --git a/test/integration/test-apt-ftparchive b/test/integration/test-apt-ftparchive
new file mode 100755
index 0000000..378b059
--- /dev/null
+++ b/test/integration/test-apt-ftparchive
@@ -0,0 +1,64 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+
+buildsimplenativepackage 'baz' 'all' '1'
+buildsimplenativepackage 'foo' 'all' '1'
+buildsimplenativepackage 'bar' 'all' '2'
+buildsimplenativepackage 'bar' 'all' '1'
+
+EXPECT_PKG='Package: bar
+Version: 1
+Package: bar
+Version: 2
+Package: baz
+Version: 1
+Package: foo
+Version: 1'
+EXPECT_SRC="$EXPECT_PKG"
+
+linkfiles() {
+ ln -s "../incoming/${2}.dsc" "${1}/${2}.dsc"
+ ln -s "../incoming/${2}.tar.xz" "${1}/${2}.tar.xz"
+ ln -s "../incoming/${2}_all.deb" "${1}/${2}_all.deb"
+}
+genoptions() {
+ echo 'baz_1'
+ echo 'foo_1'
+ echo 'bar_2'
+ echo 'bar_1'
+}
+gencombos() {
+ for a in $(genoptions); do
+ for b in $(genoptions); do
+ if [ "$a" = "$b" ]; then continue; fi
+ for c in $(genoptions); do
+ if [ "$a" = "$c" -o "$b" = "$c" ]; then continue; fi
+ for d in $(genoptions); do
+ if [ "$a" = "$d" -o "$b" = "$d" -o "$c" = "$d" ]; then continue; fi
+ echo "${a};${b};${c};${d}"
+ done
+ done
+ done
+ done
+}
+for combo in $(gencombos); do
+ msgmsg 'Running apt-ftparchive in configuration' "$combo"
+ incomedir="incoming${combo}"
+ mkdir "$incomedir"
+ for i in $(echo "$combo" | tr ';' '\n'); do
+ linkfiles "$incomedir" "$i"
+ done
+
+ testsuccess aptftparchive packages "$incomedir"
+ cp rootdir/tmp/testsuccess.output aptarchive/Packages
+ testsuccessequal "$EXPECT_PKG" grep -e '^Package: ' -e '^Version: ' aptarchive/Packages
+
+ testsuccess aptftparchive -qq sources "$incomedir"
+ cp rootdir/tmp/testsuccess.output aptarchive/Sources
+ testsuccessequal "$EXPECT_SRC" grep -e '^Package: ' -e '^Version: ' aptarchive/Sources
+done
diff --git a/test/integration/test-apt-ftparchive-by-hash b/test/integration/test-apt-ftparchive-by-hash
new file mode 100755
index 0000000..ccfc627
--- /dev/null
+++ b/test/integration/test-apt-ftparchive-by-hash
@@ -0,0 +1,70 @@
+#!/bin/sh
+set -e
+
+verify_by_hash() {
+ for hash_gen in SHA256:sha256sum SHA512:sha512sum; do
+ hash=$(echo ${hash_gen} | cut -f1 -d:)
+ gen=$(echo ${hash_gen} | cut -f2 -d:)
+ testsuccess stat aptarchive/dists/unstable/main/binary-i386/by-hash/$hash/$($gen aptarchive/dists/unstable/main/binary-i386/Packages | cut -f1 -d' ')
+ testsuccess stat aptarchive/dists/unstable/main/binary-i386/by-hash/$hash/$($gen aptarchive/dists/unstable/main/binary-i386/Packages.gz | cut -f1 -d' ')
+ done
+}
+
+#
+# main()
+#
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+configcompression 'gz' '.'
+confighashes 'SHA256' 'SHA512'
+
+# enable by-hash in apt-ftparchive
+echo 'APT::FTPArchive::DoByHash "1";' >> aptconfig.conf
+
+# build one package
+buildsimplenativepackage 'foo' 'i386' '1' 'unstable'
+buildaptarchivefromincoming
+
+# verify initial run
+verify_by_hash
+previous_hash=$(sha256sum aptarchive/dists/unstable/main/binary-i386/Packages | cut -f1 -d' ')
+
+# insert new package
+buildsimplenativepackage 'bar' 'i386' '1' 'unstable'
+# and build again
+buildaptarchivefromincoming
+
+# ensure the new package packag is there
+testsuccess zgrep "Package: bar" aptarchive/dists/unstable/main/binary-i386/Packages.gz
+
+# ensure we have the by-hash stuff
+verify_by_hash
+
+# ensure the old hash is still there
+testsuccess stat aptarchive/dists/unstable/main/binary-i386/by-hash/SHA256/$previous_hash
+
+# ensure we have it in the Release file
+testsuccess grep "Acquire-By-Hash: yes" aptarchive/dists/unstable/*Release
+
+# now ensure gc work
+for i in $(seq 3); do
+ buildsimplenativepackage 'bar' 'i386' "$i" 'unstable'
+ buildaptarchivefromincoming
+done
+
+hash_count=$(ls aptarchive/dists/unstable/main/binary-i386/by-hash/SHA256/|wc -l)
+# we have 2 files (uncompressed, gz) per run, 5 runs in total
+# by default apt-ftparchive keeps three generations (current plus 2 older)
+msgtest "Check that gc for by-hash works… "
+if [ "$hash_count" = "6" ]; then
+ msgpass
+else
+ echo "Got $hash_count expected 6"
+ msgfail
+fi
+
+# ensure the current generation is still there
+verify_by_hash
+
diff --git a/test/integration/test-apt-ftparchive-cachedb b/test/integration/test-apt-ftparchive-cachedb
new file mode 100755
index 0000000..73d762c
--- /dev/null
+++ b/test/integration/test-apt-ftparchive-cachedb
@@ -0,0 +1,103 @@
+#!/bin/sh
+set -e
+
+ensure_correct_packages_file() {
+ testequal "Package: foo
+Architecture: i386
+Version: 1
+Priority: optional
+Section: others
+Maintainer: Joe Sixpack <joe@example.org>
+$(dpkg-deb -I ./aptarchive/pool/main/foo_1_i386.deb | grep 'Installed-Size:' | sed 's#^ ##')
+Filename: pool/main/foo_1_i386.deb" head -n8 ./aptarchive/dists/test/main/binary-i386/Packages
+}
+
+ensure_correct_contents_file() {
+ testfileequal ./aptarchive/dists/test/Contents-i386 "usr/bin/foo-i386 others/foo
+usr/share/doc/foo/FEATURES others/foo
+usr/share/doc/foo/changelog others/foo
+usr/share/doc/foo/copyright others/foo"
+}
+
+#
+# main()
+#
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+mkdir -p aptarchive/dists/test/main/i18n/
+mkdir -p aptarchive/dists/test/main/source/
+mkdir -p aptarchive/dists/test/main/binary-i386
+mkdir -p aptarchive/pool/main
+
+mkdir aptarchive-overrides
+mkdir aptarchive-cache
+cat > ftparchive.conf <<"EOF"
+Dir {
+ ArchiveDir "./aptarchive";
+ OverrideDir "./aptarchive-overrides";
+ CacheDir "./aptarchive-cache";
+};
+
+Default {
+ Packages::Compress ". gzip bzip2";
+ Contents::Compress ". gzip bzip2";
+ LongDescription "false";
+};
+
+TreeDefault {
+ BinCacheDB "packages-$(SECTION)-$(ARCH).db";
+
+ Directory "pool/$(SECTION)";
+ SrcDirectory "pool/$(SECTION)";
+
+ Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
+ Contents "$(DIST)/Contents-$(ARCH)";
+};
+
+Tree "dists/test" {
+ Sections "main";
+ Architectures "i386";
+
+};
+EOF
+
+# build one package
+buildsimplenativepackage 'foo' 'i386' '1' 'test'
+mv incoming/* aptarchive/pool/main/
+
+# generate (empty cachedb)
+testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
+cp rootdir/tmp/testsuccess.output stats-out.txt
+ensure_correct_packages_file
+ensure_correct_contents_file
+testsuccessequal ' Misses in Cache: 2
+ dists/test/Contents-i386: New 402 B Misses in Cache: 0' grep Misses stats-out.txt
+
+# generate again
+testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
+cp rootdir/tmp/testsuccess.output stats-out.txt
+ensure_correct_packages_file
+ensure_correct_contents_file
+testsuccessequal ' Misses in Cache: 0
+ dists/test/Contents-i386: Misses in Cache: 0' grep Misses stats-out.txt
+
+# and again (with removing the Packages file)
+rm -f ./aptarchive/dists/test/main/binary-i386/*
+rm -f ./aptarchive/dists/test/Contents-i386
+testsuccess aptftparchive generate ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
+cp rootdir/tmp/testsuccess.output stats-out.txt
+ensure_correct_packages_file
+ensure_correct_contents_file
+testsuccessequal ' Misses in Cache: 0
+ dists/test/Contents-i386: New 402 B Misses in Cache: 0' grep Misses stats-out.txt
+
+# and clean
+rm -rf aptarchive/pool/main/*
+testsuccessequal "packages-main-i386.db" aptftparchive clean ftparchive.conf
+testsuccess aptftparchive clean ftparchive.conf -o Debug::APT::FTPArchive::Clean=1
+cp rootdir/tmp/testsuccess.output clean-out.txt
+testsuccessequal "0 Number of unique keys in the tree" grep unique clean-out.txt
+testsuccessequal "packages-main-i386.db" grep packages-main-i386.db clean-out.txt
diff --git a/test/integration/test-apt-ftparchive-cachedb-lp1274466 b/test/integration/test-apt-ftparchive-cachedb-lp1274466
new file mode 100755
index 0000000..b0bcae8
--- /dev/null
+++ b/test/integration/test-apt-ftparchive-cachedb-lp1274466
@@ -0,0 +1,59 @@
+#!/bin/sh
+set -e
+
+
+#
+# main()
+#
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+confighashes 'MD5' 'SHA1' 'SHA256' 'SHA512'
+
+db_dump=db_dump
+if command -v db_dump-5 >/dev/null 2>&1; then
+ db_dump=db_dump-5
+fi
+
+# gather the db and the deb, ensure mtime is not modified as its saved in the DB
+cp -p "$TESTDIR/deb-lp1274466-cachedb.deb" foo_1_i386.deb
+cp -p "$TESTDIR/cachedb-lp1274466-old-format.db" old-format.db
+
+# verify that the format is different
+testsuccess aptftparchive --db new-format.db packages .
+$db_dump new-format.db > new-format.dump
+$db_dump old-format.db > old-format.dump
+testfailure diff -u old-format.dump new-format.dump
+
+# ensure the new format as the sha512
+testsuccess grep 7da58ff901a40ecf42a730dc33198b182e9ba9ec98799fc2c2b6fabeeee40cc12a0e7cadb4b66764235c56e1009dbfe8a9a566fb1eedf47a992d1fff2cc3332c new-format.dump
+# but the old format does not
+testfailure grep 7da58ff901a40ecf42a730dc33198b182e9ba9ec98799fc2c2b6fabeeee40cc12a0e7cadb4b66764235c56e1009dbfe8a9a566fb1eedf47a992d1fff2cc3332c old-format.dump
+
+# regression test for corruption with previous generation of cachedb
+testsuccessequal "Package: foo
+Architecture: i386
+Version: 1
+Priority: optional
+Section: others
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 29
+Filename: ./foo_1_i386.deb
+Size: 1270
+MD5sum: 85d0e908c1a897700e2c5dea72d7e3c0
+SHA1: 858b09169032b7925a0e463f46b6634243fc40ce
+SHA256: 3750a2c9c6b5beee7f307564be3d51d3ec7cbb78fa4f0b47f84a7c41477bff59
+SHA512: 7da58ff901a40ecf42a730dc33198b182e9ba9ec98799fc2c2b6fabeeee40cc12a0e7cadb4b66764235c56e1009dbfe8a9a566fb1eedf47a992d1fff2cc3332c
+Description: an autogenerated dummy foo=1/test
+ If you find such a package installed on your system,
+ something went horribly wrong! They are autogenerated
+ und used only by testcases and surf no other propose…
+" aptftparchive --db old-format.db packages .
+
+# ensure that the db is updated and contains the new sha512
+$db_dump old-format.db > old-format.dump
+
+testsuccess grep 7da58ff901a40ecf42a730dc33198b182e9ba9ec98799fc2c2b6fabeeee40cc12a0e7cadb4b66764235c56e1009dbfe8a9a566fb1eedf47a992d1fff2cc3332c old-format.dump
+
+
diff --git a/test/integration/test-apt-ftparchive-notautomatic b/test/integration/test-apt-ftparchive-notautomatic
new file mode 100755
index 0000000..b2f65cc
--- /dev/null
+++ b/test/integration/test-apt-ftparchive-notautomatic
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+getnotautomaticfromsuite() {
+ case "$1" in
+ experimental|backports) echo 'yes';;
+ esac
+}
+getbutautomaticupgradesfromsuite() {
+ case "$1" in
+ backports) echo 'yes';;
+ esac
+}
+
+insertpackage 'unstable' 'foo' 'i386' '1'
+insertpackage 'backports' 'foo' 'i386' '3~bpo1'
+insertpackage 'experimental' 'foo' 'i386' '3'
+setupaptarchive
+
+# check no unstable NotAutomatic field
+testfailure grep "NotAutomatic:" aptarchive/dists/unstable/*Release
+# check backports NotAutomatic field
+testsuccess grep "NotAutomatic: yes" aptarchive/dists/backports/*Release
+# check experimental NotAutomatic field
+testsuccess grep "NotAutomatic: yes" aptarchive/dists/experimental/*Release
+
+# check no unstable ButAutomaticUpgrades field
+testfailure grep "ButAutomaticUpgrades:" aptarchive/dists/unstable/*Release
+# check backports ButAutomaticUpgrades field
+testsuccess grep "ButAutomaticUpgrades: yes" aptarchive/dists/backports/*Release
+# check no experimental ButAutomaticUpgrades field
+testfailure grep "ButAutomaticUpgrades:" aptarchive/dists/experimental/*Release
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [i386])
+Conf foo (1 unstable [i386])' apt install foo -s
+
+insertinstalledpackage 'foo' 'i386' '2'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be upgraded:
+ foo
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst foo [2] (3~bpo1 backports [i386])
+Conf foo (3~bpo1 backports [i386])' apt install foo -s
diff --git a/test/integration/test-apt-ftparchive-src-cachedb b/test/integration/test-apt-ftparchive-src-cachedb
new file mode 100755
index 0000000..8bab1fd
--- /dev/null
+++ b/test/integration/test-apt-ftparchive-src-cachedb
@@ -0,0 +1,191 @@
+#!/bin/sh
+set -e
+
+assert_correct_sources_file() {
+ testsuccessequal "Package: bar
+Format: 3.0 (native)
+Binary: bar
+Architecture: all
+Version: 1.0
+Directory: pool/main
+Package-List:
+ bar deb admin extra
+Files:
+ 7b57dd065e51de5905288a5104d4bef5 406 bar_1.0.dsc
+ d41d8cd98f00b204e9800998ecf8427e 0 bar_1.0.tar.gz
+Checksums-Sha1:
+ 17a40b76715f393ab7fd6485c9392a02f1adf903 406 bar_1.0.dsc
+ da39a3ee5e6b4b0d3255bfef95601890afd80709 0 bar_1.0.tar.gz
+Checksums-Sha256:
+ d9d7507f66a89258b6920aca47747d7a30e0e64b09ecabbf02b2efbdabf840a9 406 bar_1.0.dsc
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 bar_1.0.tar.gz
+Checksums-Sha512:
+ ee0a9bfb6614159b45203fc29487d4f37387993ca0e6d6f27b80010498f3731d75753188ece307508ae9af0259bd11a6af15a1a38f0b87dbd5ea1273b7a7d53e 406 bar_1.0.dsc
+ cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 bar_1.0.tar.gz
+
+Package: foo
+Format: 3.0 (native)
+Binary: foo
+Architecture: all
+Version: 1.0
+Directory: pool/main
+Package-List:
+ foo deb admin extra
+Files:
+ d144826e6f02831c1933e910c92cd7e0 171 foo_1.0.dsc
+ d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz
+Checksums-Sha1:
+ 979306aa3ccff3d61bba062bb6977e2493c6f907 171 foo_1.0.dsc
+ da39a3ee5e6b4b0d3255bfef95601890afd80709 0 foo_1.0.tar.gz
+Checksums-Sha256:
+ 8c780af8b5a6d5b3c2e2f9518940beebea52ac6d6ad7b52c082dc925cfe5b532 171 foo_1.0.dsc
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 0 foo_1.0.tar.gz
+Checksums-Sha512:
+ 3da0240fd764657c2f3661b4d750578a9a99b0580591b133756379d48117ebda87a5ed2467f513200d6e7eaf51422cbe91c15720eef7fb4bba2cc8ff81ebc547 171 foo_1.0.dsc
+ cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 foo_1.0.tar.gz
+" aptsortpkgs ./aptarchive/dists/test/main/source/Sources -o APT::SortPkgs::Source=true
+}
+
+create_source_files() {
+ NAME="$1"
+ REQUEST_CLEARSIGN="$2"
+
+ TARFILE="aptarchive/pool/main/${NAME}_1.0.tar.gz"
+ DSC_FILE="aptarchive/pool/main/${NAME}_1.0.dsc"
+ touch $TARFILE
+ if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then
+ printf -- "-----BEGIN PGP SIGNED MESSAGE-----\n\n" > $DSC_FILE
+ fi
+ cat >> $DSC_FILE << EOF
+Format: 3.0 (native)
+Source: $NAME
+Binary: $NAME
+Architecture: all
+Version: 1.0
+Package-List:
+ $NAME deb admin extra
+Files:
+ $(md5sum $TARFILE|cut -f1 -d' ') $(stat --print="%s" $TARFILE) ${NAME}_1.0.tar.gz
+EOF
+ if [ "$REQUEST_CLEARSIGN" = "CLEARSIGN" ]; then
+ cat >> $DSC_FILE <<EOF
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.11 (GNU/Linux)
+
+iEYEARECAAYFAk3k/VoACgkQliSD4VZixzQxlgCgpav7j68z48qNTDFuT9fLqwT5
+DFwAoIXatJFENEC371bMKTkUKlwZxQEk
+=iI9V
+-----END PGP SIGNATURE-----
+EOF
+ fi
+}
+
+create_clearsigned_source_files() {
+ NAME="$1"
+ create_source_files "$NAME" "CLEARSIGN"
+}
+
+#
+# main()
+#
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+confighashes 'MD5' 'SHA1' 'SHA256' 'SHA512'
+
+msgtest 'Test apt-ftparchive source with missing hashes in .dsc'
+
+mkdir -p aptarchive/pool/main
+create_source_files foo
+create_clearsigned_source_files bar
+
+mkdir -p aptarchive/dists/test/main/i18n/
+mkdir -p aptarchive/dists/test/main/source/
+
+mkdir aptarchive-overrides
+mkdir aptarchive-cache
+
+msgtest 'generate with --db option'
+cd aptarchive
+aptftparchive --db ./test.db sources pool/main/ -o APT::FTPArchive::ShowCacheMisses=1 > dists/test/main/source/Sources 2>stats-out.txt && msgpass || msgfail
+testsuccess grep Misses stats-out.txt
+testfileequal '../rootdir/tmp/testsuccess.output' ' Misses in Cache: 2'
+cd ..
+assert_correct_sources_file
+
+msgtest 'generate with --db option (again to ensure its in the cache)'
+cd aptarchive
+aptftparchive --db ./test.db sources pool/main/ -o APT::FTPArchive::ShowCacheMisses=1 > dists/test/main/source/Sources 2>stats-out.txt && msgpass || msgfail
+testsuccess grep Misses stats-out.txt
+testfileequal '../rootdir/tmp/testsuccess.output' ' Misses in Cache: 0'
+cd ..
+assert_correct_sources_file
+
+# get ready for the "apt-ftparchive generate" command
+cat > apt-ftparchive.conf <<"EOF"
+Dir {
+ ArchiveDir "./aptarchive";
+ OverrideDir "./aptarchive-overrides";
+ CacheDir "./aptarchive-cache";
+};
+
+Default {
+ Packages::Compress ". gzip bzip2";
+ Contents::Compress ". gzip bzip2";
+ LongDescription "false";
+};
+
+TreeDefault {
+ BinCacheDB "packages-$(SECTION)-$(ARCH).db";
+ SrcCacheDB "sources-$(SECTION).db";
+
+ Directory "pool/$(SECTION)";
+ SrcDirectory "pool/$(SECTION)";
+
+ Sources "$(DIST)/$(SECTION)/source/Sources";
+};
+
+Tree "dists/test" {
+ Sections "main";
+ Architectures "source";
+
+};
+EOF
+
+msgtest 'generate (empty cachedb)'
+testsuccess aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
+cp rootdir/tmp/testsuccess.output stats-out.txt
+testsuccess grep Misses stats-out.txt
+testfileequal rootdir/tmp/testsuccess.output ' Misses in Cache: 2'
+assert_correct_sources_file
+
+msgtest 'generate again out of the cache'
+rm -f ./aptarchive/dists/test/main/source/Sources
+testsuccess aptftparchive generate apt-ftparchive.conf -o APT::FTPArchive::ShowCacheMisses=1
+cp rootdir/tmp/testsuccess.output stats-out.txt
+testsuccess grep Misses stats-out.txt
+testfileequal rootdir/tmp/testsuccess.output ' Misses in Cache: 0'
+assert_correct_sources_file
+
+# generate invalid files
+mkdir aptarchive/pool/invalid
+printf "meep" > aptarchive/pool/invalid/invalid_1.0.dsc
+testequal "
+E: Could not find a record in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid
+rm -f aptarchive/pool/invalid/invalid_1.0.dsc
+
+printf "meep: yes" > aptarchive/pool/invalid/invalid_1.0.dsc
+testequal "
+E: Could not find a Source entry in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid
+rm -f aptarchive/pool/invalid/invalid_1.0.dsc
+
+# ensure clean works
+rm -f aptarchive/pool/main/*
+testsuccess aptftparchive clean apt-ftparchive.conf -o Debug::APT::FTPArchive::Clean=1
+cp rootdir/tmp/testsuccess.output clean-out.txt
+testsuccess grep unique clean-out.txt
+testfileequal 'rootdir/tmp/testsuccess.output' "0 Number of unique keys in the tree"
+testsuccess grep sources-main.db clean-out.txt
+testfileequal 'rootdir/tmp/testsuccess.output' "sources-main.db"
diff --git a/test/integration/test-apt-get-autoremove b/test/integration/test-apt-get-autoremove
new file mode 100755
index 0000000..5546958
--- /dev/null
+++ b/test/integration/test-apt-get-autoremove
@@ -0,0 +1,238 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+buildsimplenativepackage 'unrelated' 'all' '1' 'unstable'
+buildsimplenativepackage 'po-debconf' 'all' '1.0.16' 'unstable'
+buildsimplenativepackage 'debhelper' 'all' '8.0.0' 'unstable' 'Depends: po-debconf'
+buildsimplenativepackage 'base-files' 'all' '10' 'unstable' 'Essential: yes'
+buildsimplenativepackage 'fdisk' 'all' '2.30.2' 'unstable' 'XB-Important: yes'
+buildsimplenativepackage 'linux-image' 'all' '4.9.80' 'unstable'
+buildsimplenativepackage 'hold-me' 'all' '1.0' 'unstable'
+buildsimplenativepackage 'remove-me' 'all' '1.0' 'unstable'
+buildsimplenativepackage 'system-base' 'all' '1.0' 'unstable' 'Depends: unrelated, base-files, fdisk, linux-image, hold-me, remove-me'
+setupaptarchive
+
+testsuccess aptget install unrelated debhelper -y
+testdpkginstalled 'unrelated' 'debhelper' 'po-debconf'
+
+testmarkedauto 'po-debconf'
+testsuccess aptget remove debhelper -y
+testdpkgnotinstalled 'debhelper'
+testdpkginstalled 'po-debconf' 'unrelated'
+echo 'unrelated purge' | dpkg --set-selections
+testdpkgstatus 'pi' '1' 'unrelated'
+
+AUTOREMOVE='apt autoremove'
+if [ -n "$SUDO_USER" ]; then
+ AUTOREMOVE="sudo $AUTOREMOVE"
+fi
+echo 'APT::NeverAutoRemove { "^debc.*nf$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ po-debconf
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv po-debconf [1.0.16]' aptget autoremove -s
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following package was automatically installed and is no longer required:
+ po-debconf
+Use '$AUTOREMOVE' to remove it.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+1 package was automatically installed and is no longer required.
+Use '$AUTOREMOVE' to remove it.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s -o APT::Get::HideAutoRemove=small
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Calculating upgrade...
+The following package was automatically installed and is no longer required:
+ po-debconf
+Use '$AUTOREMOVE' to remove it.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget upgrade -s
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ po-debconf
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv po-debconf [1.0.16]' aptget install -s --autoremove
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+Calculating upgrade...
+The following packages will be REMOVED:
+ po-debconf
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv po-debconf [1.0.16]' aptget upgrade -s --autoremove
+echo 'APT::Get::AutomaticRemove "true";' > rootdir/etc/apt/apt.conf.d/autoremoval
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ po-debconf
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv po-debconf [1.0.16]' aptget install -s
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Calculating upgrade...
+The following package was automatically installed and is no longer required:
+ po-debconf
+Use '$AUTOREMOVE' to remove it.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget upgrade -s
+rm -f rootdir/etc/apt/apt.conf.d/autoremoval
+
+testdpkginstalled 'po-debconf'
+
+echo 'APT::NeverAutoRemove { "^po-debconf$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove
+testsuccess aptget autoremove -y
+testdpkginstalled 'po-debconf'
+testdpkgstatus 'pi' '1' 'unrelated'
+
+echo 'APT::NeverAutoRemove { "^po-.*$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove
+testsuccess aptget autoremove -y
+testdpkginstalled "po-debconf"
+testdpkgstatus 'pi' '1' 'unrelated'
+
+rm rootdir/etc/apt/apt.conf.d/00autoremove
+testsuccess aptget autoremove -y
+testdpkgnotinstalled 'po-debconf'
+testdpkgstatus 'pi' '1' 'unrelated'
+testmarkedauto
+
+sed rootdir/var/log/apt/history.log -e '/^Commandline: / d' \
+ -e '/^Start-Date: / d' -e '/^End-Date: / d' \
+ -e '/^Requested-By: / d' \
+ -e 's#), #)\nInstall: #g' | sort -u > apt-history.log
+testfileequal 'apt-history.log' '
+Install: debhelper:i386 (8.0.0)
+Install: po-debconf:i386 (1.0.16, automatic)
+Install: unrelated:i386 (1)
+Remove: debhelper:i386 (8.0.0)
+Remove: po-debconf:i386 (1.0.16)'
+
+testsuccess aptget install debhelper -y
+testdpkgstatus 'pi' '1' 'unrelated'
+testdpkginstalled 'debhelper' 'po-debconf'
+testsuccess aptmark auto debhelper
+
+testmarkedauto 'debhelper' 'po-debconf'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ debhelper po-debconf
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+Remv debhelper [8.0.0]
+Remv po-debconf [1.0.16]' aptget autoremove -s
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages were automatically installed and are no longer required:
+ debhelper po-debconf
+Use '$AUTOREMOVE' to remove them.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+2 packages were automatically installed and are no longer required.
+Use '$AUTOREMOVE' to remove them.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s -o APT::Get::HideAutoRemove=small
+
+testsuccess aptmark hold debhelper
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget autoremove -s
+
+testsuccess aptget autoremove debhelper -y --allow-change-held-packages
+testdpkgnotinstalled 'po-debconf' 'debhelper'
+testdpkgstatus 'pi' '1' 'unrelated'
+testmarkedauto
+testsuccess aptget install debhelper --solver apt -y -o Debug::pkgDepCache::Marker=1
+testmarkedauto 'po-debconf'
+testdpkgstatus 'pi' '1' 'unrelated'
+
+testsuccess aptget install system-base debhelper -y
+testdpkginstalled 'debhelper' 'po-debconf' 'system-base' 'base-files' 'fdisk' 'linux-image' 'hold-me' 'remove-me'
+testsuccess aptmark hold 'hold-me'
+echo 'APT::NeverAutoRemove { "^linux-image$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove
+testsuccess aptget remove system-base -y
+testsuccess aptget autoremove -y -o Debug::pkgAutoRemove=yes
+DEBUGLOG=${TMPWORKINGDIRECTORY}/rootdir/tmp/autoremove.debuglog
+cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: fdisk:i386 2.30.2 (Important)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: base-files:i386 10 (Essential)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: unrelated:i386 1 (Manual-Installed)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: hold-me:i386 1.0 (Hold)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: po-debconf:i386 1.0.16 (Dependency)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: linux-image:i386 4.9.80 (Blacklisted [APT::NeverAutoRemove])' "$DEBUGLOG"
+testdpkginstalled 'debhelper' 'po-debconf' 'base-files' 'fdisk' 'linux-image'
+testdpkgstatus 'hi' '1' 'hold-me'
+testdpkgnotinstalled 'remove-me'
+testdpkgstatus 'pi' '1' 'unrelated'
+
+insertinstalledpackage 'bar' 'all' '1' 'Depends: foo-provider'
+insertinstalledpackage 'foo-multi1-1' 'all' '1' 'Provides: foo-provider
+Source: foo-multi (1)'
+insertinstalledpackage 'foo-multi1-2' 'all' '1' 'Provides: foo-provider
+Source: foo-multi (2)'
+insertinstalledpackage 'foo-multi1-3' 'all' '1' 'Provides: foo-provider
+Source: foo-multi (3)'
+insertinstalledpackage 'foo-multi2-1' 'all' '1' 'Provides: foo-provider
+Source: foo-multi (1)'
+insertinstalledpackage 'foo-multi2-2' 'all' '1' 'Provides: foo-provider
+Source: foo-multi (2)'
+insertinstalledpackage 'foo-multi2-3' 'all' '1' 'Provides: foo-provider
+Source: foo-multi (3)'
+insertinstalledpackage 'foo-plus-1' 'all' '1' 'Provides: foo-provider
+Source: foo-plus (1)'
+insertinstalledpackage 'foo-plus-2' 'all' '1' 'Provides: foo-provider
+Source: foo-plus (2)'
+insertinstalledpackage 'foo-plus-3' 'all' '1' 'Provides: foo-provider
+Source: foo-plus (3)'
+insertinstalledpackage 'foo-single-1' 'all' '1' 'Provides: foo-provider'
+insertinstalledpackage 'foo-single-2' 'all' '1' 'Provides: foo-provider'
+
+testsuccess aptmark auto 'foo-*'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ foo-multi1-1 foo-multi1-2 foo-multi2-1 foo-multi2-2 foo-plus-1 foo-plus-2
+0 upgraded, 0 newly installed, 6 to remove and 0 not upgraded.
+Remv foo-multi1-1 [1]
+Remv foo-multi1-2 [1]
+Remv foo-multi2-1 [1]
+Remv foo-multi2-2 [1]
+Remv foo-plus-1 [1]
+Remv foo-plus-2 [1]' apt autoremove -s
+
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ foo-multi1-1* foo-multi1-2* foo-multi2-1* foo-multi2-2* foo-plus-1*
+ foo-plus-2*
+0 upgraded, 0 newly installed, 6 to remove and 0 not upgraded.
+Purg foo-multi1-1 [1]
+Purg foo-multi1-2 [1]
+Purg foo-multi2-1 [1]
+Purg foo-multi2-2 [1]
+Purg foo-plus-1 [1]
+Purg foo-plus-2 [1]' apt autopurge -s
+
+testdpkgstatus 'pi' '1' 'unrelated'
+testsuccess apt purge unrelated -y
diff --git a/test/integration/test-apt-get-build-dep b/test/integration/test-apt-get-build-dep
new file mode 100755
index 0000000..403de8f
--- /dev/null
+++ b/test/integration/test-apt-get-build-dep
@@ -0,0 +1,149 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'stable' 'build-essential' 'i386' '1'
+insertpackage 'stable' 'build-essential2' 'i386' '1'
+insertpackage 'stable' 'build-depends' 'i386' '1'
+insertpackage 'stable' 'build-depends-arch' 'i386' '1'
+insertpackage 'stable' 'build-depends-indep' 'i386' '1'
+insertinstalledpackage 'build-conflicts' 'i386' '1'
+insertinstalledpackage 'build-conflicts-arch' 'i386' '1'
+insertinstalledpackage 'build-conflicts-indep' 'i386' '1'
+
+setupaptarchive
+
+cat > foobar.dsc <<EOF
+Format: 3.0 (native)
+Source: foobar
+Binary: foobar
+Architecture: all
+Version: 1
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: build-depends (>= 1)
+Build-Depends-Indep: build-depends-indep (>= 1)
+Build-Depends-Arch: build-depends-arch (>= 1)
+Build-Conflicts: build-conflicts (>= 1)
+Build-Conflicts-Indep: build-conflicts-indep (>= 1)
+Build-Conflicts-Arch: build-conflicts-arch (>= 1)
+Standards-Version: 3.9.8
+EOF
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ build-conflicts build-conflicts-arch build-conflicts-indep
+The following NEW packages will be installed:
+ build-depends build-depends-arch build-depends-indep build-essential
+0 upgraded, 4 newly installed, 3 to remove and 0 not upgraded.
+Remv build-conflicts [1]
+Remv build-conflicts-arch [1]
+Remv build-conflicts-indep [1]
+Inst build-depends (1 stable [i386])
+Inst build-depends-arch (1 stable [i386])
+Inst build-depends-indep (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-depends-arch (1 stable [i386])
+Conf build-depends-indep (1 stable [i386])
+Conf build-essential (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc
+
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ build-conflicts build-conflicts-arch build-conflicts-indep
+The following NEW packages will be installed:
+ build-depends build-depends-arch build-depends-indep build-essential2
+0 upgraded, 4 newly installed, 3 to remove and 0 not upgraded.
+Remv build-conflicts [1]
+Remv build-conflicts-arch [1]
+Remv build-conflicts-indep [1]
+Inst build-depends (1 stable [i386])
+Inst build-depends-arch (1 stable [i386])
+Inst build-depends-indep (1 stable [i386])
+Inst build-essential2 (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-depends-arch (1 stable [i386])
+Conf build-depends-indep (1 stable [i386])
+Conf build-essential2 (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc -o APT::Build-Essential="build-essential2"
+
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ build-conflicts build-conflicts-arch build-conflicts-indep
+The following NEW packages will be installed:
+ build-depends build-depends-arch build-depends-indep
+0 upgraded, 3 newly installed, 3 to remove and 0 not upgraded.
+Remv build-conflicts [1]
+Remv build-conflicts-arch [1]
+Remv build-conflicts-indep [1]
+Inst build-depends (1 stable [i386])
+Inst build-depends-arch (1 stable [i386])
+Inst build-depends-indep (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-depends-arch (1 stable [i386])
+Conf build-depends-indep (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc -o APT::Build-Essential=","
+
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ build-conflicts build-conflicts-arch build-conflicts-indep
+The following NEW packages will be installed:
+ build-depends build-depends-arch build-depends-indep build-essential
+ build-essential2
+0 upgraded, 5 newly installed, 3 to remove and 0 not upgraded.
+Remv build-conflicts [1]
+Remv build-conflicts-arch [1]
+Remv build-conflicts-indep [1]
+Inst build-depends (1 stable [i386])
+Inst build-depends-arch (1 stable [i386])
+Inst build-depends-indep (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Inst build-essential2 (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-depends-arch (1 stable [i386])
+Conf build-depends-indep (1 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf build-essential2 (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc -o APT::Build-Essential::="build-essential2"
+
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ build-conflicts build-conflicts-arch
+The following NEW packages will be installed:
+ build-depends build-depends-arch build-essential
+0 upgraded, 3 newly installed, 2 to remove and 0 not upgraded.
+Remv build-conflicts [1]
+Remv build-conflicts-arch [1]
+Inst build-depends (1 stable [i386])
+Inst build-depends-arch (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-depends-arch (1 stable [i386])
+Conf build-essential (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc --arch-only
+
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ build-conflicts build-conflicts-indep
+The following NEW packages will be installed:
+ build-depends build-depends-indep build-essential
+0 upgraded, 3 newly installed, 2 to remove and 0 not upgraded.
+Remv build-conflicts [1]
+Remv build-conflicts-indep [1]
+Inst build-depends (1 stable [i386])
+Inst build-depends-indep (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-depends-indep (1 stable [i386])
+Conf build-essential (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc --indep-only
diff --git a/test/integration/test-apt-get-build-dep-file b/test/integration/test-apt-get-build-dep-file
new file mode 100755
index 0000000..dc405da
--- /dev/null
+++ b/test/integration/test-apt-get-build-dep-file
@@ -0,0 +1,209 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'stable' 'debhelper' 'i386' '7'
+insertpackage 'stable' 'build-essential' 'i386' '1'
+insertpackage 'stable' 'build-depends' 'i386' '1'
+insertsource 'stable' 'unrelated' 'any' '1'
+insertinstalledpackage 'build-conflict' 'i386' '1'
+
+setupaptarchive
+
+msgmsg 'Test with' 'unsigned dsc'
+cat > 2vcard_0.5-3.dsc <<EOF
+Format: 1.0
+Source: 2vcard
+Binary: 2vcard
+Architecture: all
+Version: 0.5-3
+Maintainer: Martin Albisetti <argentina@gmail.com>
+Uploaders: Marcela Tiznado <mlt@debian.org>
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 5.0.37)
+Build-Conflicts: build-conflict (<< 2)
+Checksums-Sha1:
+ b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
+ 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
+Checksums-Sha256:
+ efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
+ 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
+Files:
+ f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
+ 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
+EOF
+
+test2vcardbuilddep() {
+ local name="$1"
+ testsuccessequal "Note, using file './$name' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ build-conflict
+The following NEW packages will be installed:
+ build-essential debhelper
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv build-conflict [1]
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep -s ./$name
+testfailure aptget build-dep --simulate $name
+cd downloaded
+testsuccess aptget build-dep --simulate ../$name
+testsuccess aptget build-dep --simulate "$(readlink -f ../$name)"
+cd ..
+}
+test2vcardbuilddep "2vcard_0.5-3.dsc"
+cp "2vcard_0.5-3.dsc" "2VCard_0.5-3.dsc"
+test2vcardbuilddep "2VCard_0.5-3.dsc"
+
+msgmsg 'Test with' 'signed dsc'
+cat > 2vcard_0.5-3.dsc <<EOF
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: 2vcard
+Binary: 2vcard
+Architecture: all
+Version: 0.5-3
+Maintainer: Martin Albisetti <argentina@gmail.com>
+Uploaders: Marcela Tiznado <mlt@debian.org>
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 5.0.37)
+Build-Conflicts: build-conflict (<< 2)
+Checksums-Sha1:
+ b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
+ 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
+Checksums-Sha256:
+ efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
+ 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
+Files:
+ f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
+ 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+iEYEARECAAYFAkijKhsACgkQsrBfRdYmq7aA2gCfaOW9riTYVQMx5ajKQVAcctlC
+z2UAn1oXgTai6opwhVfkxrlmJ+iRxzuc
+=4eRd
+-----END PGP SIGNATURE-----
+EOF
+test2vcardbuilddep "2vcard_0.5-3.dsc"
+cp "2vcard_0.5-3.dsc" "2VCard_0.5-3.dsc"
+test2vcardbuilddep "2VCard_0.5-3.dsc"
+
+
+msgmsg 'Test with' 'unpacked source dir'
+mkdir -p foo-1.0/debian
+cat > foo-1.0/debian/control <<'EOF'
+Source: apturl
+Section: admin
+Priority: optional
+Maintainer: Michael Vogt <mvo@ubuntu.com>
+Build-Depends: debhelper (>= 7)
+Build-Depends-Indep:
+X-Python3-Version: >= 3.2
+Standards-Version: 3.9.3
+
+Package: apturl-common
+Architecture: any
+Depends: ${python3:Depends},
+ ${shlibs:Depends},
+ ${misc:Depends},
+ python3-apt,
+ python3-update-manager
+Replaces: apturl (<< 0.3.6ubuntu2)
+Description: install packages using the apt protocol - common data
+ AptUrl is a simple graphical application that takes an URL (which follows the
+ apt-protocol) as a command line option, parses it and carries out the
+ operations that the URL describes (that is, it asks the user if he wants the
+ indicated packages to be installed and if the answer is positive does so for
+ him).
+ .
+ This package contains the common data shared between the frontends.
+
+EOF
+
+testsuccessequal "Note, using directory './foo-1.0' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-essential debhelper
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./foo-1.0
+testfailure aptget build-dep --simulate foo-1.0
+cd downloaded
+testsuccess aptget build-dep --simulate ../foo-1.0
+testsuccess aptget build-dep --simulate "$(readlink -f ../foo-1.0)"
+cd ..
+cd foo-1.0
+testsuccess aptget build-dep --simulate './'
+testsuccess aptget build-dep --simulate '.'
+cd debian
+testsuccess aptget build-dep --simulate './../'
+testsuccess aptget build-dep --simulate '../'
+testsuccess aptget build-dep --simulate '..'
+cd ../..
+
+testfailureequal 'E: Must specify at least one package to check builddeps for' aptget build-dep
+testfailureequal 'E: No architecture information available for armel. See apt.conf(5) APT::Architectures for setup' aptget build-dep --simulate ./foo-1.0 -a armel
+testfailureequal 'Reading package lists...
+E: Unable to find a source package for foo' aptget build-dep --simulate foo
+
+msgmsg 'Test with a dsc' 'with comments'
+cat > comments.dsc <<EOF
+# I love comments
+# I love them so much, I give them their own paragraph
+
+#This is my first package
+Format: 3.0 (native)
+Source: comments
+Binary: comments
+Architecture: all
+Version: 1
+#Version: 2
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: debhelper (>= 5),
+# TODO: add more
+ build-depends (= 1),
+Standards-Version: 3.9.6
+# This is the end…
+
+# or this?
+EOF
+testsuccessequal "Note, using file './comments.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-depends build-essential debhelper
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./comments.dsc
+testsuccessequal "Note, using file './comments.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following NEW packages will be installed:
+ build-depends build-essential debhelper
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./comments.dsc --solver apt
diff --git a/test/integration/test-apt-get-changelog b/test/integration/test-apt-get-changelog
new file mode 100755
index 0000000..9ac9b06
--- /dev/null
+++ b/test/integration/test-apt-get-changelog
@@ -0,0 +1,139 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+buildsimplenativepackage 'dpkg' 'native' '42' 'stable'
+buildsimplenativepackage 'foo' 'all' '1.0' 'stable'
+buildsimplenativepackage 'libbar' 'all' '1.0' 'stable'
+
+getlabelfromsuite() { echo 'Testcases'; }
+getoriginfromsuite() { echo 'Debian'; }
+
+setupaptarchive --no-update
+changetowebserver
+testsuccess aptget update
+
+testsuccessequal "'https://metadata.ftp-master.debian.org/changelogs/main/f/foo/foo_1.0_changelog' foo.changelog
+'https://metadata.ftp-master.debian.org/changelogs/main/libb/libbar/libbar_1.0_changelog' libbar.changelog" aptget changelog foo libbar --print-uris
+
+releasechanger() {
+ # modifying the Release files in lists… bad stuff. Good that this is only a test…
+ sed -i "s#^${1}: .*#${1}: ${2}#" $(find rootdir/var/lib/apt/lists -name '*Release')
+ rm -f rootdir/var/cache/apt/*.bin
+}
+releasechanger 'Origin' 'Ubuntu'
+testsuccessequal "'https://changelogs.ubuntu.com/changelogs/pool/main/f/foo/foo_1.0/changelog' foo.changelog
+'https://changelogs.ubuntu.com/changelogs/pool/main/libb/libbar/libbar_1.0/changelog' libbar.changelog" aptget changelog foo libbar --print-uris
+
+releasechanger 'Label' 'Debian'
+testsuccessequal "'https://changelogs.ubuntu.com/changelogs/pool/main/f/foo/foo_1.0/changelog' foo.changelog
+'https://changelogs.ubuntu.com/changelogs/pool/main/libb/libbar/libbar_1.0/changelog' libbar.changelog" aptget changelog foo libbar --print-uris
+
+testsuccessequal "'http://localhost:${APTHTTPPORT}/main/f/foo/foo_1.0.changelog' foo.changelog
+'http://localhost:${APTHTTPPORT}/main/libb/libbar/libbar_1.0.changelog' libbar.changelog" aptget changelog foo libbar --print-uris -o Acquire::Changelogs::URI::Label::Debian="http://localhost:${APTHTTPPORT}/@CHANGEPATH@.changelog"
+
+sed -i '/^Origin: / a\
+Changelogs: http://example.org/@CHANGEPATH@-changelog' $(find rootdir/var/lib/apt/lists -name '*Release')
+rm -f rootdir/var/cache/apt/*.bin
+
+testsuccessequal "'http://example.org/main/f/foo/foo_1.0-changelog' foo.changelog
+'http://example.org/main/libb/libbar/libbar_1.0-changelog' libbar.changelog" aptget changelog foo libbar --print-uris -o Acquire::Changelogs::URI::Label::Debian="http://localhost:${APTHTTPPORT}/@CHANGEPATH@.changelog"
+
+testsuccessequal "'http://localhost:${APTHTTPPORT}/main/f/foo/foo_1.0.changelog' foo.changelog
+'http://localhost:${APTHTTPPORT}/main/libb/libbar/libbar_1.0.changelog' libbar.changelog" aptget changelog foo libbar --print-uris -o Acquire::Changelogs::URI::Override::Label::Debian="http://localhost:${APTHTTPPORT}/@CHANGEPATH@.changelog"
+
+releasechanger 'Changelogs' 'no'
+testfailuremsg 'E: Failed to fetch changelog:/foo.changelog Changelog unavailable for foo=1.0' aptget changelog foo -d
+
+sed -i '/^Changelogs: / d' $(find rootdir/var/lib/apt/lists -name '*Release')
+releasechanger 'Label' 'Testcases'
+
+echo "Acquire::Changelogs::URI::Label::Testcases \"http://localhost:${APTHTTPPORT}/@CHANGEPATH@/change.txt\";" > rootdir/etc/apt/apt.conf.d/changelog.conf
+testsuccessequal "'http://localhost:${APTHTTPPORT}/main/f/foo/foo_1.0/change.txt' foo.changelog
+'http://localhost:${APTHTTPPORT}/main/libb/libbar/libbar_1.0/change.txt' libbar.changelog" aptget changelog foo libbar --print-uris
+
+echo "Acquire::Changelogs::URI::Label::Testcases \"http://localhost:${APTHTTPPORT}/pool/@CHANGEPATH@/changelog\";" > rootdir/etc/apt/apt.conf.d/changelog.conf
+testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/f/foo/foo_1.0/changelog' foo.changelog" aptget changelog foo --print-uris
+
+
+testsuccess aptget changelog foo -qq
+testfileequal 'rootdir/tmp/testsuccess.output' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)"
+
+testsuccess aptget changelog foo libbar -qq
+testfileequal 'rootdir/tmp/testsuccess.output' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)
+$(cat aptarchive/pool/main/libb/libbar/libbar_1.0/changelog)"
+
+testsuccess aptget changelog foo -d
+testfilestats 'foo.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+testfileequal 'foo.changelog' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)"
+rm -f foo.changelog
+
+testsuccess aptget changelog libbar foo -d
+testfilestats 'libbar.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+testfilestats 'foo.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+testfileequal 'libbar.changelog' "$(cat aptarchive/pool/main/libb/libbar/libbar_1.0/changelog)"
+testfileequal 'foo.changelog' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)"
+rm -f libbar.changelog foo.changelog
+
+# as such bogus, but can happen with multiple binaries from the same source
+testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/f/foo/foo_1.0/changelog' foo.changelog
+'http://localhost:${APTHTTPPORT}/pool/main/f/foo/foo_1.0/changelog' foo.changelog" aptget changelog foo foo --print-uris
+testsuccess aptget changelog foo foo -qq
+testfileequal 'rootdir/tmp/testsuccess.output' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)
+$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)"
+testsuccess aptget changelog foo foo -d
+testfilestats 'foo.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+testfileequal 'foo.changelog' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)"
+# we have the file already, confused?
+testsuccess aptget changelog foo foo -d
+testfilestats 'foo.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+testfileequal 'foo.changelog' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)"
+echo 'bogus' > foo.changelog
+touch -d 'now + 1 hour' foo.changelog
+testsuccess aptget changelog foo foo -d
+testfilestats 'foo.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+testfileequal 'foo.changelog' "$(cat aptarchive/pool/main/f/foo/foo_1.0/changelog)"
+echo -n 'bogus' > foo.changelog
+touch -d "$(stat -c%y aptarchive/pool/main/f/foo/foo_1.0/changelog)" foo.changelog
+testsuccess aptget changelog foo foo -d
+testfilestats 'foo.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+testequal 'bogus1.0) stable; urgency=low' head -n 1 foo.changelog
+rm -f foo.changelog
+
+# no @CHANGEPATH@ in the URI
+testequal 'E: Failed to fetch changelog:/foo.changelog Changelog unavailable for foo=1.0' \
+ aptget changelog foo -qq -d -o Acquire::Changelogs::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/change.txt"
+testfailure test -e foo.changelog
+
+testequal "E: Failed to fetch http://localhost:${APTHTTPPORT}/does/not/exist/main/f/foo/foo_1.0/change.txt Changelog unavailable for foo=1.0 (404 Not Found)" \
+ aptget changelog foo -qq -d -o Acquire::Changelogs::URI::Label::Testcases="http://localhost:${APTHTTPPORT}/does/not/exist/@CHANGEPATH@/change.txt"
+testfailure test -e foo.changelog
+
+testdpkgnotinstalled 'foo'
+testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/f/foo/foo_1.0/changelog' foo.changelog" apt changelog foo --print-uris -o Acquire::Changelogs::AlwaysOnline=false
+testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/f/foo/foo_1.0/changelog' foo.changelog" apt changelog foo --print-uris -o Acquire::Changelogs::AlwaysOnline=true
+
+testsuccess apt install dpkg -y
+# at this moment, we still have the Releasefile claim to be origin:ubuntu
+echo 'Acquire::Changelogs::AlwaysOnline::Origin::Ubuntu "false";' >> rootdir/etc/apt/apt.conf.d/nooriginchangelogs
+testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/d/dpkg/dpkg_42/changelog' dpkg.changelog" apt changelog dpkg --print-uris
+testsuccessequal "'copy://${TMPWORKINGDIRECTORY}/rootdir/usr/share/doc/dpkg/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false
+testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/d/dpkg/dpkg_42/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=true
+testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/d/dpkg/dpkg_42/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false -o Acquire::Changelogs::AlwaysOnline::Origin::Ubuntu=true
+testsuccessequal "'copy://${TMPWORKINGDIRECTORY}/rootdir/usr/share/doc/dpkg/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false -o Acquire::Changelogs::AlwaysOnline::Origin::Debian=true
+
+testsuccess apt changelog dpkg -d
+testfilestats 'dpkg.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+head -n 3 dpkg.changelog > dpkg.change
+testfileequal 'dpkg.change' "$(apthelper cat-file 'rootdir/usr/share/doc/dpkg/changelog' | head -n 3)"
+rm -f dpkg.change dpkg.changelog
+
+# no package specified
+testfailureequal 'E: No packages found' aptget changelog
+testfailureequal 'E: Unable to locate package clclclclc
+E: No packages found' aptget changelog clclclclc
diff --git a/test/integration/test-apt-get-clean b/test/integration/test-apt-get-clean
new file mode 100755
index 0000000..d050732
--- /dev/null
+++ b/test/integration/test-apt-get-clean
@@ -0,0 +1,88 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'testing' 'foo' 'all' '1'
+insertpackage 'unstable' 'foo' 'all' '2'
+insertpackage 'experimental' 'foo' 'all' '1:1'
+insertinstalledpackage 'foo' 'all' '3'
+
+setupaptarchive --no-update
+
+mkdir -p rootdir/var/lib/apt/lists/lost+found
+testsuccess apt update
+
+# nothing to do always works
+testsuccess aptget clean
+testsuccess aptget clean -s
+
+# generate some dirt and clean it up
+generatedirt() {
+ touch rootdir/var/lib/apt/lists/partial/http.debian.net_debian_dists_sid_main_i18n_Translation-en
+ mkdir -p rootdir/var/cache/apt/archives/lost+found
+ touch rootdir/var/cache/apt/archives/foo_1_all.deb
+ touch rootdir/var/cache/apt/archives/foo_1%3a1_all.deb
+ touch rootdir/var/cache/apt/archives/foo_2%3a1_all.deb
+ touch rootdir/var/cache/apt/archives/foo_2_all.deb
+ touch rootdir/var/cache/apt/archives/foo_3_all.deb
+ touch rootdir/var/cache/apt/archives/foo_4_all.deb
+}
+
+generatedirt
+testsuccess aptget autoclean
+testsuccess test -e rootdir/var/lib/apt/lists/partial/http.debian.net_debian_dists_sid_main_i18n_Translation-en
+testsuccess test -e rootdir/var/cache/apt/archives/foo_1_all.deb
+testsuccess test -e rootdir/var/cache/apt/archives/foo_1%3a1_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_2%3a1_all.deb
+testsuccess test -e rootdir/var/cache/apt/archives/foo_2_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_3_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_4_all.deb
+
+generatedirt
+testsuccess aptget clean
+testfailure test -e rootdir/var/lib/apt/lists/partial/http.debian.net_debian_dists_sid_main_i18n_Translation-en
+testfailure test -e rootdir/var/cache/apt/archives/foo_1_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_1%3a1_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_2%3a1_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_2_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_3_all.deb
+testfailure test -e rootdir/var/cache/apt/archives/foo_4_all.deb
+
+if [ "$(id -u)" != '0' ]; then
+ msgmsg 'No clean if lock can not be acquired'
+ touch rootdir/var/cache/apt/archives/foo_4_all.deb
+ touch rootdir/var/cache/apt/archives/lock
+ chmod 444 rootdir/var/cache/apt/archives/lock
+ testfailure apt clean
+ testsuccess test -e rootdir/var/cache/apt/archives/foo_4_all.deb
+ chmod 644 rootdir/var/cache/apt/archives/lock
+fi
+
+directorygone() {
+ rm -rf "$1"
+ testsuccess apt autoclean
+ testfailure test -d "$1"
+ testsuccess apt clean
+ # clean creates an empty partial directory via GetLock
+ if [ "$(basename "$1")" = 'partial' ]; then
+ testsuccess test -d "$1"
+ else
+ testfailure test -d "$1"
+ fi
+}
+msgmsg 'Partial directory missing'
+directorygone 'rootdir/var/cache/apt/archives/partial'
+directorygone 'rootdir/var/lib/apt/lists/partial'
+
+msgmsg 'Archives directory missing'
+directorygone 'rootdir/var/cache/apt/archives'
+directorygone 'rootdir/var/lib/apt/lists'
+
+msgmsg 'apt directory missing'
+directorygone 'rootdir/var/cache/apt'
+directorygone 'rootdir/var/lib/apt'
diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download
new file mode 100755
index 0000000..fc0e6cf
--- /dev/null
+++ b/test/integration/test-apt-get-download
@@ -0,0 +1,113 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+confighashes 'SHA512'
+
+buildsimplenativepackage 'apt' 'all' '1.0' 'stable'
+buildsimplenativepackage 'apt' 'all' '2.0' 'unstable'
+insertinstalledpackage 'vrms' 'all' '1.0'
+
+addtrap 'prefix' "umask $(umask);"
+umask 0027
+setupaptarchive --no-update
+
+# directories should be readable by everyone
+find aptarchive/dists -type d | while read dir; do
+ chmod o+rx "$dir"
+done
+# apt-ftparchive knows how to chmod files
+find aptarchive/dists -name '*Packages*' -type f | while read file; do
+ testaccessrights "$file" '644'
+ chmod 640 "$file"
+done
+# created by the framework without special care
+find aptarchive/dists -name '*Release*' -type f | while read file; do
+ testaccessrights "$file" '640'
+done
+if [ "$(id -u)" = '0' ]; then
+ # Release file can't be accessed by _apt
+ testsuccesswithnotice aptget update
+fi
+
+#everything (too) permissive
+find aptarchive/ -type f | while read file; do
+ chmod 777 "$file"
+done
+find incoming/ -type f | while read file; do
+ chmod 777 "$file"
+done
+testsuccess aptget update
+
+testdownload() {
+ local DEB="$1"
+ shift
+ msgtest "Test download of package file $DEB with" "$@"
+ testsuccess --nomsg aptget download "$@" -o Debug::pkgAcquire::Worker=1 -o Debug::pkgAcquire::Auth=1
+ testsuccess test -f "$DEB"
+ testaccessrights "$DEB" '644'
+ rm -f "$DEB"
+}
+
+# normal case as "root"
+OLDPWD="$(pwd)"
+cd downloaded
+testdownload apt_2.0_all.deb apt
+cd "$OLDPWD"
+
+# simulate normal user with non-existent root-owned directories
+rm -rf rootdir/var/cache/apt/archives/
+mkdir rootdir/var/cache/apt/archives/
+addtrap 'prefix' "chmod -f -R +w $PWD/rootdir/var/cache/apt/archives || true;"
+chmod -R -w rootdir/var/cache/apt/archives
+
+OLDPWD="$(pwd)"
+cd downloaded
+
+# normal case(es)
+testdownload apt_1.0_all.deb apt/stable
+testdownload apt_2.0_all.deb apt
+
+DEBFILE="$(readlink -f ../aptarchive)/pool/apt_2.0_all.deb"
+testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s "$DEBFILE") SHA512:$(sha512sum "$DEBFILE" | cut -d' ' -f 1)" aptget download apt --print-uris
+
+# deb:677887
+testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms --print-uris
+testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms
+
+# deb:736962
+testsuccess aptget download apt
+testsuccess test -s apt_2.0_all.deb
+testaccessrights 'apt_2.0_all.deb' '644'
+testsuccess aptget download apt
+testsuccess test -s apt_2.0_all.deb
+testaccessrights 'apt_2.0_all.deb' '644'
+
+rm -f apt_1.0_all.deb apt_2.0_all.deb
+
+# deb:738103
+testdownload apt_2.0_all.deb apt apt apt/unstable apt=2.0
+
+# FIXME: pick up already downloaded deb files for real
+# restore "root" rights
+#cd "$OLDPWD"
+#chmod -f -R +w "$PWD/rootdir/var/cache/apt/archives"
+#rm -rf rootdir/var/cache/apt/archives/
+
+# file: debs aren't copied to archives, so change to http which obviously are
+#changetowebserver
+#testsuccess aptget update
+
+# test with already stored deb
+#testsuccess aptget install -d apt
+#testsuccess test -s rootdir/var/cache/apt/archives/apt_2.0_all.deb
+#testaccessrights 'rootdir/var/cache/apt/archives/apt_2.0_all.deb' '644'
+#mv aptarchive/pool/apt_2.0_all.deb aptarchive/pool/apt_2.0_all.deb.gone
+#cd downloaded
+#testdownload apt_2.0_all.deb apt
+#cd "$OLDPWD"
+#mv aptarchive/pool/apt_2.0_all.deb.gone aptarchive/pool/apt_2.0_all.deb
diff --git a/test/integration/test-apt-get-install-deb b/test/integration/test-apt-get-install-deb
new file mode 100755
index 0000000..844f1d7
--- /dev/null
+++ b/test/integration/test-apt-get-install-deb
@@ -0,0 +1,245 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+# regression test for #754904
+cat > foo.rpm <<EOF
+I'm not a deb, I'm a teapot.
+EOF
+for exe in apt aptget; do
+ for cmd in install remove purge upgrade full-upgrade; do
+ testfailureequal 'E: Unsupported file /dev/null given on commandline' $exe $cmd -qq /dev/null
+ testfailureequal 'E: Unsupported file ./foo.rpm given on commandline' $exe $cmd -qq ./foo.rpm
+ done
+done
+
+# and ensure we fail for invalid debs
+mv foo.rpm foo.deb
+for exe in apt aptget; do
+ for cmd in install remove purge upgrade full-upgrade; do
+ testfailuremsg "E: Sub-process Popen returned an error code (2)
+E: Encountered a section with no Package: header
+E: Problem with MergeList ${TMPWORKINGDIRECTORY}/foo.deb
+E: The package lists or status file could not be parsed or opened." $exe $cmd ./foo.deb
+ done
+done
+
+buildsimplenativepackage 'foo' 'i386,amd64' '1.0'
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'foo:i386' instead of './incoming/foo_1.0_i386.deb'
+Note, selecting 'foo' instead of './incoming/foo_1.0_amd64.deb'
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo:i386 : Conflicts: foo but 1.0 is to be installed
+ foo : Conflicts: foo:i386 but 1.0 is to be installed
+E: Unable to correct problems, you have held broken packages." aptget install ./incoming/foo_1.0_i386.deb ./incoming/foo_1.0_amd64.deb -s
+
+testsuccess apt show foo --with-source ./incoming/foo_1.0_amd64.deb
+testequal 'Package: foo
+Version: 1.0' grep -e '^Package:' -e '^Version:' -e '^Architecture:' rootdir/tmp/testsuccess.output
+testsuccess apt show ./incoming/foo_1.0_amd64.deb
+testequal 'Package: foo
+Version: 1.0' grep -e '^Package:' -e '^Version:' -e '^Architecture:' rootdir/tmp/testsuccess.output
+testsuccess apt show foo:i386 ./incoming/foo_1.0_amd64.deb --with-source ./incoming/foo_1.0_i386.deb
+testequal 'Package: foo:i386
+Version: 1.0
+Package: foo
+Version: 1.0' grep -e '^Package:' -e '^Version:' -e '^Architecture:' rootdir/tmp/testsuccess.output
+
+testsuccess aptcache show foo --with-source ./incoming/foo_1.0_amd64.deb
+testequal 'Package: foo
+Version: 1.0
+Architecture: amd64' grep -e '^Package:' -e '^Version:' -e '^Architecture:' rootdir/tmp/testsuccess.output
+testsuccess aptcache show ./incoming/foo_1.0_amd64.deb
+testequal 'Package: foo
+Version: 1.0
+Architecture: amd64' grep -e '^Package:' -e '^Version:' -e '^Architecture:' rootdir/tmp/testsuccess.output
+testsuccess aptcache show foo:i386 ./incoming/foo_1.0_amd64.deb --with-source ./incoming/foo_1.0_i386.deb
+testequal 'Package: foo
+Version: 1.0
+Architecture: i386
+Package: foo
+Version: 1.0
+Architecture: amd64' grep -e '^Package:' -e '^Version:' -e '^Architecture:' rootdir/tmp/testsuccess.output
+
+testsuccessequal 'Sorting...
+Full Text Search...
+foo/local-deb 1.0 amd64
+ an autogenerated dummy foo=1.0/unstable
+' apt search foo --with-source ./incoming/foo_1.0_amd64.deb
+testsuccessequal 'foo - an autogenerated dummy foo=1.0/unstable' aptcache search foo --with-source ./incoming/foo_1.0_amd64.deb
+
+testdpkgnotinstalled 'foo' 'foo:i386'
+testsuccess aptget install ./incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1
+testdpkginstalled 'foo:i386'
+testfailure aptget install incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1
+cd downloaded
+testsuccess aptget install "$(readlink -f ../incoming/foo_1.0_i386.deb)" -o Debug::pkgCacheGen=1 -y --reinstall
+testfailure grep 'is already the newest version' ../rootdir/tmp/testsuccess.output
+testsuccess aptget install ../incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1 -y --reinstall
+testfailure grep 'is already the newest version' ../rootdir/tmp/testsuccess.output
+cd ..
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Note, selecting 'foo' instead of './incoming/foo_1.0_amd64.deb'
+The following packages will be REMOVED:
+ foo:i386
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:i386 [1.0]
+Inst foo (1.0 local-deb [amd64])
+Conf foo (1.0 local-deb [amd64])" aptget install ./incoming/foo_1.0_amd64.deb -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install --with-source ./incoming/foo_1.0_amd64.deb -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ foo:i386
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:i386 [1.0]
+Inst foo (1.0 local-deb [amd64])
+Conf foo (1.0 local-deb [amd64])' aptget install --with-source ./incoming/foo_1.0_amd64.deb foo -s
+
+# Check that installing the local deb works if it is not the candidate
+echo "Package: foo
+Pin: version 1.0
+Pin-Priority: -1" > rootdir/etc/apt/preferences
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Note, selecting 'foo' instead of './incoming/foo_1.0_amd64.deb'
+The following packages will be REMOVED:
+ foo:i386
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:i386 [1.0]
+Inst foo (1.0 local-deb [amd64])
+Conf foo (1.0 local-deb [amd64])" aptget install ./incoming/foo_1.0_amd64.deb -s
+
+createpkg() {
+ local PKG="pkg-$1"
+ mkdir -p ./incoming/$PKG/DEBIAN
+ if [ -n "$2" ]; then
+ echo -n "$2" >> ./incoming/$PKG/DEBIAN/control
+ fi
+ echo "Package: $PKG
+Version: 0
+Priority: extra
+Maintainer: No Body <no@example.org>
+Architecture: all
+Depends: foo:i386
+Description: test package" >> ./incoming/$PKG/DEBIAN/control
+ if [ -n "$3" ]; then
+ echo -n "$3" >> ./incoming/$PKG/DEBIAN/control
+ fi
+ testsuccess dpkg-deb --build ./incoming/$PKG/ ./incoming
+ #dpkg-deb -I ./incoming/${PKG}_0_all.deb control
+}
+createpkg 'as-it-should-be'
+createpkg 'leading-newline' '
+
+'
+createpkg 'trailing-newline' '' '
+'
+createpkg 'double-trailing-newline' '' '
+
+'
+
+echo 'Package: /pkg-/
+Pin: release a=experimental
+Pin-Priority: 501' > rootdir/etc/apt/preferences.d/pinit
+
+testsuccess aptget install ./incoming/pkg-as-it-should-be_0_all.deb
+testsuccess aptget install "$(readlink -f ./incoming/pkg-leading-newline_0_all.deb)"
+testsuccess aptget install ./incoming/pkg-trailing-newline_0_all.deb
+testsuccess aptget install ./incoming/pkg-double-trailing-newline_0_all.deb
+
+testempty apt clean
+if [ "$(id -u)" = '0' ]; then
+ # see if permission dropping is checked before usage
+ chmod 711 ./incoming
+ testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall
+ testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output
+ chmod 710 ./incoming
+ testsuccesswithnotice aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall
+ testfailure grep 'is already the newest version' rootdir/tmp/testsuccesswithnotice.output
+ chmod 700 ./incoming
+ testsuccesswithnotice aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall
+ testfailure grep 'is already the newest version' rootdir/tmp/testsuccesswithnotice.output
+ chmod 711 ./incoming
+else
+ testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall
+ testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output
+fi
+
+sed -i -e '/^Depends: foo/ d' rootdir/var/lib/dpkg/status
+testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb
+testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output
+testsuccess apt purge -y pkg-as-it-should-be
+
+echo "Package: pkg-as-it-should-be
+Architecture: all
+Version: 0
+Installed-Size: 2903
+Filename: incoming/pkg-as-it-should-be_0_all.deb
+Size: $(stat -c %s incoming/pkg-as-it-should-be_0_all.deb)
+SHA256: $(sha256sum incoming/pkg-as-it-should-be_0_all.deb | cut -d' ' -f 1)
+" > Packages
+testdpkgnotinstalled 'pkg-as-it-should-be'
+testnopackage pkg-as-it-should-be
+testsuccess apt install --with-source ./Packages pkg-as-it-should-be -s
+testsuccess apt install --with-source ./Packages pkg-as-it-should-be --print-uris
+testsuccess apt show --with-source ./Packages pkg-as-it-should-be
+testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output
+testsuccess apt install -y --with-source ./Packages pkg-as-it-should-be
+testdpkginstalled 'pkg-as-it-should-be'
+rm -f ./Packages
+
+echo 'dpkg::install::recursive "true";
+dpkg::install::recursive::force "true";
+dpkg::install::recursive::minimum "0";' > rootdir/etc/apt/apt.conf.d/lowerminimum.conf
+mv ./incoming/pkg-as-it-should-be_0_all.deb ./incoming/pkg-as-it-should-be_0_all.ddeb
+testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.ddeb --reinstall
+testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output
+testsuccess apt purge -y pkg-as-it-should-be
+testdpkgnotinstalled 'pkg-as-it-should-be'
+
+mv ./incoming/pkg-as-it-should-be_0_all.ddeb ./incoming/pkg-as-it-should-be_0_all.foobar
+echo "Package: pkg-as-it-should-be
+Architecture: all
+Version: 0
+Installed-Size: 2903
+Filename: incoming/pkg-as-it-should-be_0_all.foobar
+Size: $(stat -c %s incoming/pkg-as-it-should-be_0_all.foobar)
+SHA256: $(sha256sum incoming/pkg-as-it-should-be_0_all.foobar | cut -d' ' -f 1)
+" | gzip > Packages.gz
+testsuccess apt install --with-source ./Packages.gz pkg-as-it-should-be -s
+testsuccess apt install --with-source ./Packages.gz pkg-as-it-should-be --print-uris
+testsuccess apt show --with-source ./Packages.gz pkg-as-it-should-be
+testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output
+testsuccess apt install -y --with-source ./Packages.gz pkg-as-it-should-be
+testdpkginstalled 'pkg-as-it-should-be'
diff --git a/test/integration/test-apt-get-install-virtual-pkgs b/test/integration/test-apt-get-install-virtual-pkgs
new file mode 100755
index 0000000..b2fd749
--- /dev/null
+++ b/test/integration/test-apt-get-install-virtual-pkgs
@@ -0,0 +1,64 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable' 'foo' 'amd64' '1' 'Provides: foo-prv'
+
+insertpackage 'unstable' 'baz1' 'amd64' '1' 'Provides: foo-prv1'
+insertpackage 'unstable' 'foo1' 'amd64' '1' 'Provides: foo-prv1'
+
+insertpackage 'unstable' 'baz2' 'amd64' '1' 'Provides: foo-prv2'
+insertpackage 'unstable' 'foo2' 'amd64' '2' 'Provides: foo-prv2:amd64'
+
+insertpackage 'unstable' 'baz3' 'amd64' '1' 'Provides: foo-prv3'
+insertpackage 'unstable' 'foo3' 'i386' '2' 'Provides: foo-prv3:amd64'
+
+insertpackage 'unstable' 'baz4' 'amd64' '1' 'Provides: foo-prv4:amd64'
+insertpackage 'unstable' 'foo4' 'i386' '2' 'Provides: foo-prv4:amd64'
+
+insertpackage 'experimental' 'baz5' 'amd64' '1' 'Provides: foo-prv5:amd64'
+insertpackage 'experimental' 'foo5' 'i386' '2' 'Provides: foo-prv5:amd64'
+
+setupaptarchive
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'foo' instead of 'foo-prv'
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [amd64])
+Conf foo (1 unstable [amd64])" aptget install foo-prv -s
+
+testvirtuals() {
+ testfailureequal "Reading package lists...
+Building dependency tree...
+Package $1 is a virtual package provided by:
+ $3
+ $2
+You should explicitly select one to install.
+
+E: Package '$1' has no installation candidate" aptget install $1 -s
+}
+
+testvirtuals 'foo-prv1' 'baz1 1' 'foo1 1'
+testvirtuals 'foo-prv2' 'baz2 1' 'foo2 2'
+testvirtuals 'foo-prv3' 'baz3 1' 'foo3:i386 2'
+testvirtuals 'foo-prv4' 'baz4 1' 'foo4:i386 2'
+testvirtuals 'foo-prv5' 'baz5 1' 'foo5:i386 2'
+
+echo 'Package: *
+Pin: release a=experimental
+Pin-Priority: -1' > rootdir/etc/apt/preferences.d/experimental.pref
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Package foo-prv5 is a virtual package provided by:
+ foo5:i386 2 [Not candidate version]
+ baz5 1 [Not candidate version]
+
+E: Package 'foo-prv5' has no installation candidate" aptget install foo-prv5 -s
diff --git a/test/integration/test-apt-get-source-arch b/test/integration/test-apt-get-source-arch
new file mode 100755
index 0000000..ca586f4
--- /dev/null
+++ b/test/integration/test-apt-get-source-arch
@@ -0,0 +1,68 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386" "amd64"
+
+
+# different version for the individual arches
+insertpackage 'stable' 'foo' 'amd64' '1.0'
+insertsource 'stable' 'foo' 'amd64' '1.0'
+
+insertpackage 'stable' 'foo' 'i386' '1.0'
+insertsource 'stable' 'foo' 'i386' '1.0'
+insertpackage 'stable' 'foo' 'i386' '2.0'
+insertsource 'stable' 'foo' 'i386' '2.0'
+
+insertpackage 'oldstable' 'foo' 'i386' '0.1'
+insertsource 'oldstable' 'foo' 'i386' '0.1'
+# just needed so that there is a release file entry for the test
+insertpackage 'oldstable' 'unreleated' 'amd64' '0.1'
+
+setupaptarchive
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+HEADER='Reading package lists...'
+DOWNLOAD10="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_1.0.dsc' foo_1.0.dsc 11 SHA256:ed7c25c832596339bee13e4e7c45cf49f869b60d2bf57252f18191d75866c2a7
+'file://${APTARCHIVE}/foo_1.0.tar.gz' foo_1.0.tar.gz 14 SHA256:f3da8c6ebc62c8ef2dae439a498dddcdacc1a07f45ff67ad12f44b6e2353c239"
+
+# pick :amd64
+testsuccessequal "$HEADER
+$DOWNLOAD10" aptget source -q --print-uris foo:amd64
+
+# pick :i386
+testsuccessequal "$HEADER
+Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_2.0.dsc' foo_2.0.dsc 11 SHA256:0fcb803ffbeef26db884625aaf06e75f3eda5c994634980e7c20fd37ed1fc104
+'file://${APTARCHIVE}/foo_2.0.tar.gz' foo_2.0.tar.gz 14 SHA256:ca9b0b828ca22372502af2b80f61f0bd9063910ece9fc34eeaf9d9e31aa8195a" aptget source -q --print-uris foo:i386
+
+# pick :i386 by release
+testsuccessequal "$HEADER
+Selected version '0.1' (oldstable) for foo
+Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_0.1.dsc' foo_0.1.dsc 11 SHA256:72af24b0290fe1d13a3e25fddd2633e43c87ff79d249bc850009e47bcce73565
+'file://${APTARCHIVE}/foo_0.1.tar.gz' foo_0.1.tar.gz 14 SHA256:ec748ad88a71f98bfdc012e1a7632377d05fe3ebbf9c0922e0691fe4d79c0585" aptget source -q --print-uris foo:i386/oldstable
+
+# pick :i386 by version
+testsuccessequal "$HEADER
+$DOWNLOAD10" aptget source -q --print-uris foo:i386=1.0
+
+# error on unknown arch
+testfailureequal "$HEADER
+E: Can not find a package for architecture 'not-a-available-arch'
+E: Unable to find a source package for foo:not-a-available-arch" aptget source -q --print-uris foo:not-a-available-arch
+
+# error on unavailable version for arch
+testfailureequal "$HEADER
+E: Can not find a package 'foo:amd64' with version '2.0'
+E: Unable to find a source package for foo:amd64=2.0" aptget source -q --print-uris foo:amd64=2.0
+
+# error on unavailable release for arch
+testfailureequal "$HEADER
+E: Can not find a package 'foo:amd64' with release 'oldstable'
+E: Unable to find a source package for foo:amd64/oldstable" aptget source -q --print-uris foo:amd64/oldstable
diff --git a/test/integration/test-apt-get-source-authenticated b/test/integration/test-apt-get-source-authenticated
new file mode 100755
index 0000000..d5a4fac
--- /dev/null
+++ b/test/integration/test-apt-get-source-authenticated
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Regression test for debian bug #749795. Ensure that we fail with
+# an error if apt-get source foo will download a source that comes
+# from an unauthenticated repository
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+# a "normal" package with source and binary
+buildsimplenativepackage 'foo' 'all' '2.0'
+
+setupaptarchive --no-update
+
+APTARCHIVE="$(readlink -f ./aptarchive)"
+find "$APTARCHIVE/dists/unstable" -name '*Release*' -delete
+
+# update without authenticated InRelease file
+testwarning aptget update --allow-insecure-repositories
+
+# this all should fail
+testfailure aptget install -y foo
+cd downloaded
+testfailure aptget source foo
+testfailure test -e foo_2.0.dsc
+# allow overriding the warning
+testsuccess aptget source --allow-unauthenticated foo -o Debug::pkgAcquire::Worker=1
+testsuccess test -s foo_2.0.dsc -a -L foo_2.0.dsc
diff --git a/test/integration/test-apt-get-source-multisources b/test/integration/test-apt-get-source-multisources
new file mode 100755
index 0000000..06fe196
--- /dev/null
+++ b/test/integration/test-apt-get-source-multisources
@@ -0,0 +1,29 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'armhf'
+
+insertsource 'unstable' 'adduser' 'all' '3.113+nmu3'
+insertsource 'stable' 'python-fll' 'all' '0.9.11'
+
+insertpackage 'unstable' 'adduser' 'all' '3.113+nmu3'
+insertpackage 'stable' 'python-fll' 'all' '0.9.11'
+
+setupaptarchive
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+HEADER='Reading package lists...'
+testsuccessequal "$HEADER
+Need to get 0 B/43 B of source archives.
+'file://${APTARCHIVE}/adduser_3.113+nmu3.dsc' adduser_3.113+nmu3.dsc 22 SHA256:19cc1abe85063976bf71c033f62f3e6bf6621647fe44a6ee31ed687e3fa5cbb7
+'file://${APTARCHIVE}/python-fll_0.9.11.dsc' python-fll_0.9.11.dsc 21 SHA256:51429e835ded66abf6bbc157865af29920435e74aea2836ba1f46443feae9285" aptget source -qdy --print-uris --dsc-only adduser=3.113 python-fll=0.9.11
+
+testsuccessequal "$HEADER
+Need to get 0 B/43 B of source archives.
+'file://${APTARCHIVE}/python-fll_0.9.11.dsc' python-fll_0.9.11.dsc 21 SHA256:51429e835ded66abf6bbc157865af29920435e74aea2836ba1f46443feae9285
+'file://${APTARCHIVE}/adduser_3.113+nmu3.dsc' adduser_3.113+nmu3.dsc 22 SHA256:19cc1abe85063976bf71c033f62f3e6bf6621647fe44a6ee31ed687e3fa5cbb7" aptget source -qdy --print-uris --dsc-only python-fll=0.9.11 adduser=3.113
diff --git a/test/integration/test-apt-get-update-sourceslist-warning b/test/integration/test-apt-get-update-sourceslist-warning
new file mode 100755
index 0000000..a99356b
--- /dev/null
+++ b/test/integration/test-apt-get-update-sourceslist-warning
@@ -0,0 +1,45 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+setupaptarchive --no-update
+
+testsuccess apt update
+testsuccess apt update --no-download
+
+echo 'deb ftp://ftp.tlh.debian.org/debian zurg main' > rootdir/etc/apt/sources.list.d/ftpshutdown.list
+cat > rootdir/var/lib/apt/lists/ftp.tlh.debian.org_debian_dists_zurg_Release <<EOF
+Origin: Debian
+Label: Debian
+Suite: unreleased
+Codename: zurg
+Date: Fri, 14 Jul 2017 11:34:35 +0000
+Architectures: amd64
+Components: main
+Description: Debian x.y Zurg - Not Released
+EOF
+chmod 644 rootdir/var/lib/apt/lists/ftp.tlh.debian.org_debian_dists_zurg_Release
+
+testwarningequal "Reading package lists...
+Building dependency tree...
+All packages are up to date.
+W: Debian shuts down public FTP services currently still used in your sources.list(5) as 'ftp://ftp.tlh.debian.org/debian/'.
+ See press release https://debian.org/News/2017/20170425 for details." apt update --no-download
+
+
+echo 'deb http://apt:debian@ftp.tlh.debian.org/debian zurg main' > rootdir/etc/apt/sources.list.d/ftpshutdown.list
+testsuccessequal "Reading package lists...
+Building dependency tree...
+All packages are up to date.
+N: Usage of apt_auth.conf(5) should be preferred over embedding login information directly in the sources.list(5) entry for 'http://ftp.tlh.debian.org/debian'" apt update --no-download
+
+
+echo 'deb tor+https://apt:debian@ftp.tlh.debian.org/debian zurg main' > rootdir/etc/apt/sources.list.d/ftpshutdown.list
+testsuccessequal "Reading package lists...
+Building dependency tree...
+All packages are up to date.
+N: Usage of apt_auth.conf(5) should be preferred over embedding login information directly in the sources.list(5) entry for 'tor+https://ftp.tlh.debian.org/debian'" apt update --no-download
diff --git a/test/integration/test-apt-get-update-unauth-warning b/test/integration/test-apt-get-update-unauth-warning
new file mode 100755
index 0000000..a0d7a59
--- /dev/null
+++ b/test/integration/test-apt-get-update-unauth-warning
@@ -0,0 +1,94 @@
+#!/bin/sh
+#
+# ensure we print warnings for unauthenticated repositories
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+configcompression '.' 'gz'
+
+echo 'Acquire::Progress::Ignore::ShowErrorText "false";' > rootdir/etc/apt/apt.conf.d/99show-no-ignore-errors.conf
+
+# a "normal" package with source and binary
+buildsimplenativepackage 'foo' 'all' '2.0'
+
+setupaptarchive --no-update
+
+APTARCHIVE="$(readlink -f ./aptarchive)"
+find "$APTARCHIVE/dists/unstable" \( -name 'InRelease' -o -name 'Release.gpg' \) -delete
+sed -i -n '/^SHA1:$/q;p' "${APTARCHIVE}/dists/unstable/Release"
+testfailure aptget update
+testwarning aptget update --allow-insecure-repositories
+
+
+rm -rf rootdir/var/lib/apt/lists
+find "$APTARCHIVE/dists/unstable" -name '*Release*' -delete
+# update without authenticated files leads to warning
+testfailureequal "Get:1 file:$APTARCHIVE unstable InRelease
+Ign:1 file:$APTARCHIVE unstable InRelease
+Get:2 file:$APTARCHIVE unstable Release
+Err:2 file:$APTARCHIVE unstable Release
+ File not found - ${APTARCHIVE}/dists/unstable/Release (2: No such file or directory)
+Reading package lists...
+E: The repository 'file:$APTARCHIVE unstable Release' does not have a Release file.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update
+
+# no package foo
+testsuccessequal 'Listing...' apt list foo
+testequal 'auxfiles
+lock
+partial' ls rootdir/var/lib/apt/lists
+
+filesize() {
+ local CREATEDBY="$1"
+ shift
+ stat -c%s "$(aptget indextargets --no-release-info --format '$(URI)' "Created-By: $CREATEDBY" "$@" | cut -d'/' -f 3- ).gz"
+}
+# allow override
+#aptget update --allow-insecure-repositories -o Debug::pkgAcquire::worker=1
+#exit
+testwarningequal "Get:1 file:$APTARCHIVE unstable InRelease
+Ign:1 file:$APTARCHIVE unstable InRelease
+Get:2 file:$APTARCHIVE unstable Release
+Ign:2 file:$APTARCHIVE unstable Release
+Get:3 file:$APTARCHIVE unstable/main Sources
+Ign:3 file:$APTARCHIVE unstable/main Sources
+Get:4 file:$APTARCHIVE unstable/main i386 Packages
+Ign:4 file:$APTARCHIVE unstable/main i386 Packages
+Get:5 file:$APTARCHIVE unstable/main all Packages
+Ign:5 file:$APTARCHIVE unstable/main all Packages
+Get:6 file:$APTARCHIVE unstable/main Translation-en
+Ign:6 file:$APTARCHIVE unstable/main Translation-en
+Get:3 file:$APTARCHIVE unstable/main Sources
+Ign:3 file:$APTARCHIVE unstable/main Sources
+Get:4 file:$APTARCHIVE unstable/main i386 Packages
+Ign:4 file:$APTARCHIVE unstable/main i386 Packages
+Get:5 file:$APTARCHIVE unstable/main all Packages
+Ign:5 file:$APTARCHIVE unstable/main all Packages
+Get:6 file:$APTARCHIVE unstable/main Translation-en
+Ign:6 file:$APTARCHIVE unstable/main Translation-en
+Get:3 file:$APTARCHIVE unstable/main Sources
+Ign:3 file:$APTARCHIVE unstable/main Sources
+Get:4 file:$APTARCHIVE unstable/main i386 Packages
+Ign:4 file:$APTARCHIVE unstable/main i386 Packages
+Get:5 file:$APTARCHIVE unstable/main all Packages
+Ign:5 file:$APTARCHIVE unstable/main all Packages
+Get:6 file:$APTARCHIVE unstable/main Translation-en
+Ign:6 file:$APTARCHIVE unstable/main Translation-en
+Get:3 file:$APTARCHIVE unstable/main Sources [$(filesize 'Sources') B]
+Get:4 file:$APTARCHIVE unstable/main i386 Packages [$(filesize 'Packages' 'Architecture: i386') B]
+Get:5 file:$APTARCHIVE unstable/main all Packages [$(filesize 'Packages' 'Architecture: all') B]
+Get:6 file:$APTARCHIVE unstable/main Translation-en [$(filesize 'Translations') B]
+Reading package lists...
+W: The repository 'file:$APTARCHIVE unstable Release' does not have a Release file.
+N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
+N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update --allow-insecure-repositories
+# ensure we can not install the package
+testfailureequal "WARNING: The following packages cannot be authenticated!
+ foo
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y foo
diff --git a/test/integration/test-apt-get-upgrade b/test/integration/test-apt-get-upgrade
new file mode 100755
index 0000000..50a90ce
--- /dev/null
+++ b/test/integration/test-apt-get-upgrade
@@ -0,0 +1,144 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+# simple case
+insertpackage 'stable,installed' 'upgrade-simple' 'all' '1.0'
+insertpackage 'unstable' 'upgrade-simple' 'all' '2.0'
+
+# upgrade with a new dependency
+insertpackage 'stable,installed' 'upgrade-with-new-dep' 'all' '1.0'
+insertpackage 'unstable' 'upgrade-with-new-dep' 'all' '2.0' 'Depends: new-dep'
+insertpackage 'stable' 'new-dep' 'all' '1.0'
+
+# upgrade with conflict and a new pkg with higher priority than conflict
+insertpackage 'stable,installed' 'upgrade-with-conflict' 'all' '1.0'
+insertpackage 'unstable' 'upgrade-with-conflict' 'all' '2.0' 'Conflicts: conflicting-dep' 'standard'
+insertpackage 'stable,installed' 'conflicting-dep' 'all' '1.0'
+
+# upgrade with conflict and a new pkg with higher priority than conflict
+insertpackage 'stable,installed' 'init' 'all' '1'
+insertpackage 'unstable' 'init' 'all' '2' 'Pre-Depends: systemd | sysvinit'
+insertpackage 'unstable' 'systemd' 'all' '2' 'Conflicts: conflicting-dep'
+insertpackage 'unstable' 'sysvinit' 'all' '2'
+
+setupaptarchive
+
+# Test if normal upgrade works as expected
+UPGRADE='Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ init upgrade-with-conflict upgrade-with-new-dep
+The following packages will be upgraded:
+ upgrade-simple
+1 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Conf upgrade-simple (2.0 unstable [all])'
+testsuccessequal "$UPGRADE" aptget upgrade -s
+testsuccessequal "$UPGRADE" apt upgrade -s --without-new-pkgs
+
+# Test if apt-get upgrade --with-new-pkgs works
+UPGRADENEW='Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ new-dep
+The following packages have been kept back:
+ init upgrade-with-conflict
+The following packages will be upgraded:
+ upgrade-simple upgrade-with-new-dep
+2 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst new-dep (1.0 stable [all])
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Inst upgrade-with-new-dep [1.0] (2.0 unstable [all])
+Conf new-dep (1.0 stable [all])
+Conf upgrade-simple (2.0 unstable [all])
+Conf upgrade-with-new-dep (2.0 unstable [all])'
+testsuccessequal "$UPGRADENEW" aptget upgrade -s --with-new-pkgs
+testsuccessequal "$UPGRADENEW" apt upgrade -s
+
+# Test if apt-get dist-upgrade works
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ conflicting-dep
+The following NEW packages will be installed:
+ new-dep systemd
+The following packages will be upgraded:
+ init upgrade-simple upgrade-with-conflict upgrade-with-new-dep
+4 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv conflicting-dep [1.0]
+Inst systemd (2 unstable [all])
+Conf systemd (2 unstable [all])
+Inst init [1] (2 unstable [all])
+Inst upgrade-with-conflict [1.0] (2.0 unstable [all])
+Inst new-dep (1.0 stable [all])
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Inst upgrade-with-new-dep [1.0] (2.0 unstable [all])
+Conf init (2 unstable [all])
+Conf upgrade-with-conflict (2.0 unstable [all])
+Conf new-dep (1.0 stable [all])
+Conf upgrade-simple (2.0 unstable [all])
+Conf upgrade-with-new-dep (2.0 unstable [all])' aptget -s dist-upgrade
+
+msgmsg 'make systemd a non-choice in the or-group and try again'
+echo 'Package: systemd
+Pin: release unstable
+Pin-Priority: -1' > rootdir/etc/apt/preferences.d/nosystemd.pref
+
+testsuccessequal "$UPGRADE" aptget upgrade -s
+testsuccessequal "$UPGRADE" apt upgrade -s --without-new-pkgs
+
+UPGRADENEW='Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ new-dep sysvinit
+The following packages have been kept back:
+ upgrade-with-conflict
+The following packages will be upgraded:
+ init upgrade-simple upgrade-with-new-dep
+3 upgraded, 2 newly installed, 0 to remove and 1 not upgraded.
+Inst sysvinit (2 unstable [all])
+Conf sysvinit (2 unstable [all])
+Inst init [1] (2 unstable [all])
+Inst new-dep (1.0 stable [all])
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Inst upgrade-with-new-dep [1.0] (2.0 unstable [all])
+Conf init (2 unstable [all])
+Conf new-dep (1.0 stable [all])
+Conf upgrade-simple (2.0 unstable [all])
+Conf upgrade-with-new-dep (2.0 unstable [all])'
+testsuccessequal "$UPGRADENEW" aptget upgrade -s --with-new-pkgs
+testsuccessequal "$UPGRADENEW" apt upgrade -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ conflicting-dep
+The following NEW packages will be installed:
+ new-dep sysvinit
+The following packages will be upgraded:
+ init upgrade-simple upgrade-with-conflict upgrade-with-new-dep
+4 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv conflicting-dep [1.0]
+Inst sysvinit (2 unstable [all])
+Conf sysvinit (2 unstable [all])
+Inst init [1] (2 unstable [all])
+Inst upgrade-with-conflict [1.0] (2.0 unstable [all])
+Inst new-dep (1.0 stable [all])
+Inst upgrade-simple [1.0] (2.0 unstable [all])
+Inst upgrade-with-new-dep [1.0] (2.0 unstable [all])
+Conf init (2 unstable [all])
+Conf upgrade-with-conflict (2.0 unstable [all])
+Conf new-dep (1.0 stable [all])
+Conf upgrade-simple (2.0 unstable [all])
+Conf upgrade-with-new-dep (2.0 unstable [all])' aptget -s dist-upgrade
diff --git a/test/integration/test-apt-helper b/test/integration/test-apt-helper
new file mode 100755
index 0000000..ae1ca74
--- /dev/null
+++ b/test/integration/test-apt-helper
@@ -0,0 +1,132 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+changetohttpswebserver
+
+echo 'foo' > aptarchive/foo
+echo 'bar' > aptarchive/foo2
+
+test_apt_helper_download() {
+ msgmsg 'Test with' "$1"
+
+ msgtest 'apt-file download-file' 'md5sum'
+ testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo2' 'MD5Sum:d3b07384d113edec49eaa6238ad5ff00'
+ testfileequal ./downloaded/foo2 'foo'
+
+ msgtest 'apt-file download-file' 'sha1'
+ testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo1' 'SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15'
+ testfileequal ./downloaded/foo1 'foo'
+
+ msgtest 'apt-file download-file' 'sha256'
+ testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo3' 'SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'
+ testfileequal ./downloaded/foo3 'foo'
+
+ msgtest 'apt-file download-file' 'no-hash'
+ testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo4'
+ testfileequal ./downloaded/foo4 'foo'
+
+ msgtest 'apt-file download-file' 'wrong md5sum'
+ testfailure --nomsg apthelper -qq download-file "${1}/foo" './downloaded/foo5' 'MD5Sum:aabbcc'
+ testfileequal rootdir/tmp/testfailure.output "E: Failed to fetch ${1}/foo Hash Sum mismatch
+ Hashes of expected file:
+ - MD5Sum:aabbcc [weak]
+ Hashes of received file:
+ - SHA512:0cf9180a764aba863a67b6d72f0918bc131c6772642cb2dce5a34f0a702f9470ddc2bf125c12198b1995c233c34b4afd346c54a2334c350a948a51b6e8b4e6b6
+ - SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
+ - SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15 [weak]
+ - MD5Sum:d3b07384d113edec49eaa6238ad5ff00 [weak]
+ - Filesize:4 [weak]
+ Last modification reported: $(lastmodification 'aptarchive/foo')
+E: Download Failed"
+ testfileequal ./downloaded/foo5.FAILED 'foo'
+
+ msgtest 'apt-file download-file' 'wrong sha256'
+ testfailure --nomsg apthelper -qq download-file "${1}/foo" './downloaded/foo6' 'SHA256:aabbcc'
+ testfileequal rootdir/tmp/testfailure.output "E: Failed to fetch ${1}/foo Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:aabbcc
+ Hashes of received file:
+ - SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
+ - Filesize:4 [weak]
+ Last modification reported: $(lastmodification 'aptarchive/foo')
+E: Download Failed"
+ testfileequal './downloaded/foo6.FAILED' 'foo'
+
+ msgtest 'apt-file download-file' 'sha256 sha1'
+ testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo8' 'SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c' \
+ "${1}/foo2" './downloaded/foo7' 'SHA1:e242ed3bffccdf271b7fbaf34ed72d089537b42f'
+ testfileequal './downloaded/foo8' 'foo'
+ testfileequal './downloaded/foo7' 'bar'
+
+ msgtest 'apt-file download-file' 'md5sum sha1'
+ testsuccess --nomsg apthelper download-file "${1}/foo" './downloaded/foo9' 'MD5Sum:d3b07384d113edec49eaa6238ad5ff00' \
+ "${1}/foo2" './downloaded/foo10' 'SHA1:e242ed3bffccdf271b7fbaf34ed72d089537b42f'
+ testfileequal './downloaded/foo9' 'foo'
+ testfileequal './downloaded/foo10' 'bar'
+}
+
+setupproxydetect() {
+ local METH="$1"
+ shift
+ {
+ echo '#!/bin/sh -e'
+ echo "$@"
+ } > "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
+ chmod 755 "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
+ echo "Acquire::${METH}::${CONFNAME} \"${TMPWORKINGDIRECTORY}/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect
+}
+
+test_apt_helper_detect_proxy() {
+ msgmsg "apt-helper $CONFNAME" 'no proxy'
+ testsuccessequal "Using proxy '' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/
+ setupproxydetect 'http' 'exit 0'
+ testsuccessequal "Using proxy '' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/
+ setupproxydetect 'http' 'exit 1'
+ testfailureequal 'E: Sub-process ProxyAutoDetect returned an error code (1)' apthelper auto-detect-proxy http://example.com/
+ setupproxydetect 'http' 'echo'
+ testwarningequal "Using proxy '' for URL 'http://example.com/'
+W: ProxyAutoDetect command returned an empty line" apthelper auto-detect-proxy http://example.com/
+ setupproxydetect 'http' 'echo DIRECT'
+ testsuccessequal "Using proxy 'DIRECT' for URL 'http://example.com/'" apthelper auto-detect-proxy http://example.com/
+ chmod -x "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
+ testfailureequal "E: ProxyAutoDetect command '${TMPWORKINGDIRECTORY}/apt-proxy-detect' can not be executed! - access (13: Permission denied)" apthelper auto-detect-proxy http://example.com/
+
+ msgmsg "apt-helper $CONFNAME" 'http proxy'
+ setupproxydetect 'http' 'echo "http://some-proxy"'
+ testsuccessequal "Using proxy 'http://some-proxy' for URL 'http://www.example.com/'" apthelper auto-detect-proxy http://www.example.com
+ testsuccessequal "Using proxy '' for URL 'https://ssl.example.com/'" apthelper auto-detect-proxy https://ssl.example.com
+
+ msgmsg "apt-helper $CONFNAME" 'https proxy'
+ setupproxydetect 'https' 'echo "https://https-proxy"'
+ testsuccessequal "Using proxy '' for URL 'http://no-ssl.example.com/'" apthelper auto-detect-proxy http://no-ssl.example.com
+ testsuccessequal "Using proxy 'https://https-proxy' for URL 'https://ssl.example.com/'" apthelper auto-detect-proxy https://ssl.example.com
+ rm -f rootdir/etc/apt/apt.conf.d/02proxy-detect "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
+}
+
+test_apt_helper_download "http://localhost:${APTHTTPPORT}"
+test_apt_helper_download "https://localhost:${APTHTTPSPORT}"
+for CONFNAME in 'ProxyAutoDetect' 'Proxy-Auto-Detect' ; do
+ test_apt_helper_detect_proxy
+done
+msgmsg 'test various failure modes'
+testfailureequal 'E: Invalid operation download' apthelper download
+testfailureequal 'E: Must specify at least one pair url/filename' apthelper download-file
+testfailureequal 'E: Must specify at least one pair url/filename' apthelper download-file 'http://example.org/'
+testfailureequal 'E: Need one URL as argument' apthelper auto-detect-proxy
+testfailureequal 'E: Must specify at least one SRV record' apthelper srv-lookup
+testfailureequal 'E: GetSrvRec failed for localhost' apthelper -q=1 srv-lookup 'localhost'
+testfailureequal "E: GetSrvRec failed for localhost:${APTHTTPPORT}" apthelper -q=1 srv-lookup "localhost:${APTHTTPPORT}"
+testfailureequal "E: GetSrvRec failed for localhost:${APTHTTPSPORT}" apthelper -q=1 srv-lookup "localhost:${APTHTTPSPORT}"
+
+msgmsg 'apt-helper' 'drop-privs'
+testfailureequal "E: No command given to run without privileges" apthelper drop-privs
+testsuccess apthelper -- drop-privs true
+testsuccess apthelper drop-privs -- true
+DATE="$(date -u +'%Y-%m-%d')"
+testsuccessequal "$DATE" apthelper drop-privs -- date -u -d "$DATE" +'%Y-%m-%d'
diff --git a/test/integration/test-apt-helper-cat-file b/test/integration/test-apt-helper-cat-file
new file mode 100755
index 0000000..a53a6b4
--- /dev/null
+++ b/test/integration/test-apt-helper-cat-file
@@ -0,0 +1,46 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+
+TESTTOOL="${BUILDDIRECTORY}/../test/interactive-helper/test_fileutl"
+msgtest 'Check if we have build the test tool' "$TESTTOOL"
+if [ -x "$TESTTOOL" ]; then
+ msgpass
+else
+ msgskip 'not available'
+ exit 0
+fi
+
+cat >rootdir/etc/apt/apt.conf.d/rev-as-compressor <<EOF
+APT::Compressor::rev {
+ Name "rev";
+ Extension ".rev";
+ Binary "rev";
+ Cost "1";
+};
+EOF
+
+configcompression 'ALL'
+cat >./test.txt <<EOF
+This is a test.
+EOF
+
+compressfile ./test.txt
+while read compressor extension command; do
+ if [ "$compressor" = '.' ]; then
+ FILE='./test.txt'
+ else
+ FILE="./test.txt.${extension}"
+ fi
+ if [ -d /proc/self/fd ]; then
+ testsuccess runapt "${TESTTOOL}" "$FILE"
+ testequal '3' grep -c '/test.txt' rootdir/tmp/testsuccess.output
+ else
+ msgtest 'Test if /proc interface is available'
+ msgskip 'seems not'
+ fi
+ testsuccessequal "$(cat ./test.txt)" apthelper cat-file "$FILE"
+done < "${TMPWORKINGDIRECTORY}/rootdir/etc/testcase-compressor.conf"
diff --git a/test/integration/test-apt-https-no-redirect b/test/integration/test-apt-https-no-redirect
new file mode 100755
index 0000000..1c38809
--- /dev/null
+++ b/test/integration/test-apt-https-no-redirect
@@ -0,0 +1,48 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'stable' 'apt' 'all' '1'
+setupaptarchive --no-update
+
+echo 'alright' > aptarchive/working
+changetohttpswebserver
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://localhost:${APTHTTPPORT}/"
+webserverconfig 'aptwebserver::redirect::replace::/redirectme2/' "https://localhost:${APTHTTPSPORT}/"
+echo 'Dir::Bin::Methods::https+http "http";' > rootdir/etc/apt/apt.conf.d/99add-https-http-method
+echo 'Dir::Bin::Methods::foo+https "http";' > rootdir/etc/apt/apt.conf.d/99add-foo-https-method
+
+msgtest 'download of a file works via' 'http'
+testsuccess --nomsg downloadfile "http://localhost:${APTHTTPPORT}/working" httpfile
+testfileequal httpfile 'alright'
+
+msgtest 'download of a file works via' 'https'
+testsuccess --nomsg downloadfile "https://localhost:${APTHTTPSPORT}/working" httpsfile
+testfileequal httpsfile 'alright'
+rm -f httpfile httpsfile
+
+msgtest 'download of http file works via' 'https+http'
+testsuccess --nomsg downloadfile "https+http://localhost:${APTHTTPPORT}/working" httpfile
+testfileequal httpfile 'alright'
+rm -f httpfile
+
+msgtest 'download of a file does not work if' 'https redirected to http'
+testfailure --nomsg downloadfile "https://localhost:${APTHTTPSPORT}/redirectme/working" redirectfile
+msgtest 'libcurl has forbidden access in last request to' 'http resource'
+testsuccess --nomsg grep -q -E -- "Redirection from https to 'http://.*' is forbidden" rootdir/tmp/testfailure.output
+rm -f redirectfile
+
+msgtest 'download of a file does work if' 'https+http redirected to https'
+testsuccess --nomsg downloadfile "https+http://localhost:${APTHTTPPORT}/redirectme2/working" redirectfile
+testfileequal redirectfile 'alright'
+rm -f redirectfile
+
+msgtest 'download of a file does work if' 'foo+https redirected to https'
+testsuccess --nomsg downloadfile "foo+https://localhost:${APTHTTPSPORT}/redirectme2/working" redirectfile
+testfileequal redirectfile 'alright'
+rm -f redirectfile
diff --git a/test/integration/test-apt-install-file-reltag b/test/integration/test-apt-install-file-reltag
new file mode 100755
index 0000000..afbf9be
--- /dev/null
+++ b/test/integration/test-apt-install-file-reltag
@@ -0,0 +1,94 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'foo' 'all' '2' 'Depends: foo-common (= 2)'
+insertpackage 'unstable' 'foo-common' 'all' '2'
+insertpackage 'unstable' 'baz' 'all' '1'
+insertpackage 'experimental' 'foo' 'all' '5' 'Depends: foo-common (= 5)'
+insertpackage 'experimental' 'foo-common' 'all' '5' 'Source: foo (5)'
+insertpackage 'experimental' 'baz' 'all' '2'
+setupaptarchive
+
+insertinstalledpackage 'build-essential' 'all' '1'
+
+cat > foobar.dsc <<EOF
+Format: 3.0 (native)
+Source: foobar
+Binary: foobar
+Architecture: all
+Version: 1
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: foo (= 5), baz
+Standards-Version: 4.1.3
+EOF
+buildsimplenativepackage 'foobar2' 'all' '1' 'unstable' 'Depends: foo (= 5), baz'
+
+ln -s "$(readlink -f ./incoming/foobar2_1_all.deb)" foobar.deb
+mkdir -p foobar
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt build-dep "$(readlink -f ./foobar.dsc)" -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt install "$(readlink -f ./foobar.deb)" -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt build-dep ./foobar.dsc -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt install ./foobar.deb -s
+cd foobar
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt build-dep ../foobar.dsc -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt install ../foobar.deb -s
+cd ..
+
+SUCCESSDSC='The following NEW packages will be installed:
+ baz foo foo-common
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst baz (1 unstable [all])
+Inst foo-common (5 experimental [all])
+Inst foo (5 experimental [all])
+Conf baz (1 unstable [all])
+Conf foo-common (5 experimental [all])
+Conf foo (5 experimental [all])'
+SUCCESSDEB='The following additional packages will be installed:
+ baz foo foo-common
+The following NEW packages will be installed:
+ baz foo foo-common foobar2
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Inst baz (1 unstable [all])
+Inst foo-common (5 experimental [all])
+Inst foo (5 experimental [all])
+Inst foobar2 (1 local-deb [all])
+Conf baz (1 unstable [all])
+Conf foo-common (5 experimental [all])
+Conf foo (5 experimental [all])
+Conf foobar2 (1 local-deb [all])'
+testsuccessequal "Note, using file '$(readlink -f ./foobar.dsc)' to get the build dependencies
+$SUCCESSDSC" apt build-dep "$(readlink -f ./foobar.dsc)/experimental" -s -q=2
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'foobar2' instead of '$(readlink -f ./foobar.deb)'
+$SUCCESSDEB" apt install "$(readlink -f ./foobar.deb)/experimental" -s
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+$SUCCESSDSC" apt build-dep ./foobar.dsc/experimental -sq=2
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'foobar2' instead of './foobar.deb'
+$SUCCESSDEB" apt install "./foobar.deb/experimental" -s
+cd foobar
+testsuccessequal "Note, using file '../foobar.dsc' to get the build dependencies
+$SUCCESSDSC" apt build-dep ../foobar.dsc/experimental -sqq
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'foobar2' instead of '../foobar.deb'
+$SUCCESSDEB" apt install "../foobar.deb/experimental" -s
+cd ..
+
+msgmsg 'fail with' 'incorrect release'
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt build-dep "$(readlink -f ./foobar.dsc)/stable" -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt install "$(readlink -f ./foobar.deb)/stable" -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt build-dep ./foobar.dsc/stable -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt install ./foobar.deb/stable -s
+cd foobar
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt build-dep ../foobar.dsc/stable -s
+testfailuremsg 'E: Unable to correct problems, you have held broken packages.' apt install ../foobar.deb/stable -s
+cd ..
diff --git a/test/integration/test-apt-keep-downloaded-pkgs b/test/integration/test-apt-keep-downloaded-pkgs
new file mode 100755
index 0000000..c5f6295
--- /dev/null
+++ b/test/integration/test-apt-keep-downloaded-pkgs
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+buildsimplenativepackage 'pkg1' 'all' '1.0' 'stable'
+buildsimplenativepackage 'pkg2' 'all' '1.0' 'stable'
+buildsimplenativepackage 'pkg3' 'all' '1.0' 'stable'
+buildsimplenativepackage 'pkg4' 'all' '1.0' 'stable'
+
+# local (file) installs
+setupaptarchive
+
+# a file:// "download" is not a real download and hence passes
+testsuccess aptget install pkg1 --no-download --download-only -y
+testfailure test -f rootdir/var/cache/apt/archives/pkg1_1.0_all.deb
+testsuccess test -f aptarchive/pool/pkg1_1.0_all.deb
+
+# ensure that install from local sources does not remove debs
+testsuccess aptget install pkg1 -o APT::Keep-Downloaded-Packages=false
+testsuccess test -f aptarchive/pool/pkg1_1.0_all.deb
+testfailure test -f rootdir/var/cache/apt/archives/pkg1_1.0_all.deb
+
+# now switch to http and downloading debs
+changetowebserver
+testsuccess aptget update
+
+# see if no-download really doesn't download the package
+testfailuremsg 'E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?' aptget install pkg2 --no-download -y
+testsuccess test -f aptarchive/pool/pkg2_1.0_all.deb
+testfailure test -f rootdir/var/cache/apt/archives/pkg2_1.0_all.deb
+
+# ensure that the downloaded pkg is kept with "keep=true"
+testsuccess aptget install pkg2 -o APT::Keep-Downloaded-Packages=true
+testsuccess test -f aptarchive/pool/pkg2_1.0_all.deb
+testsuccess test -f rootdir/var/cache/apt/archives/pkg2_1.0_all.deb
+
+# ensure that the downloaded pkg is removed when requested
+testsuccess aptget install pkg3 -o APT::Keep-Downloaded-Packages=false
+testsuccess test -f aptarchive/pool/pkg3_1.0_all.deb
+# this was there before, keep it
+testsuccess test -f rootdir/var/cache/apt/archives/pkg2_1.0_all.deb
+# this got installed so we can remove it now
+testfailure test -f rootdir/var/cache/apt/archives/pkg3_1.0_all.deb
+
+
+# ensure that install from the download dir does not delete packages
+mv aptarchive/pool/pkg4_1.0_all.deb rootdir/var/cache/apt/archives
+testsuccess aptget install $(pwd)/rootdir/var/cache/apt/archives/pkg4_1.0_all.deb -o APT::Keep-Downloaded-Packages=false
+testsuccess test -f $(pwd)/rootdir/var/cache/apt/archives/pkg4_1.0_all.deb
diff --git a/test/integration/test-apt-key b/test/integration/test-apt-key
new file mode 100755
index 0000000..a1e633c
--- /dev/null
+++ b/test/integration/test-apt-key
@@ -0,0 +1,428 @@
+#!/bin/sh
+set -e
+
+# apt-key is a shell script, so relatively prune to be effected by 'crazy' things:
+# confuses config parser as there exists no way of escaping " currently.
+#TMPDIR="$(mktemp -d)/This is \"fü\$\$ing cràzy\", \$(man man | head -n1 | cut -d' ' -f 1)\$!"
+# gpg doesn't like | in path names – documented e.g. in the man gpg2 --agent-program
+#TMPDIR="$(mktemp -d)/This is fü\$\$ing cràzy, \$(man man | head -n1 | cut -d' ' -f 1)\$!"
+TMPDIR_ADD="This is fü\$\$ing cràzy, \$(apt -v)\$!"
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+chmod o+x "${TMPWORKINGDIRECTORY}/.."
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'bar' 'i386' '1'
+insertsource 'unstable' 'foo' 'all' '1'
+setupaptarchive --no-update
+
+# start from a clean plate again
+cleanplate() {
+ rm -rf "${ROOTDIR}/etc/apt/trusted.gpg.d/" "${ROOTDIR}/etc/apt/trusted.gpg"
+ mkdir "${ROOTDIR}/etc/apt/trusted.gpg.d/"
+}
+testmultigpg() {
+ testfailure --nomsg aptkey --quiet --readonly "$@"
+ testsuccess grep "^gpgv: Can't check signature" "${ROOTDIR}/tmp/testfailure.output"
+ testsuccess grep '^gpgv: Good signature from' "${ROOTDIR}/tmp/testfailure.output"
+}
+testaptkeyskeyring() {
+ local KEYRING="$1"
+ shift
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/aptkeylistkeyring.output"
+ if ! aptkey --keyring "$KEYRING" list --with-colon 2>/dev/null | grep '^pub' | cut -d':' -f 5 > "$OUTPUT"; then
+ echo -n > "$OUTPUT"
+ fi
+ testfileequal "$OUTPUT" "$(mapkeynametokeyid "$@")"
+}
+testsuccessempty() {
+ testempty "$@"
+}
+testrun() {
+ local EXT="${1:-gpg}"
+ local TESTSTATE="${2:-testsuccess}"
+ echo "APT::Key::ArchiveKeyring \"${KEYDIR}/joesixpack.pub.gpg\";
+APT::Key::RemovedKeys \"${KEYDIR}/rexexpired.pub.gpg\";" > "${ROOTDIR}/etc/apt/apt.conf.d/aptkey.conf"
+
+ cleanplate
+ ln -sf "$(readlink -f "${KEYDIR}/joesixpack.pub.${EXT}")" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testaptkeys 'Joe Sixpack'
+
+ ${TESTSTATE} aptkey list
+ msgtest 'Check that paths in list output are not' 'double-slashed'
+ testfailure --nomsg grep '//' "${ROOTDIR}/tmp/${TESTSTATE}.output"
+
+ ${TESTSTATE} aptkey finger
+ msgtest 'Check that paths in finger output are not' 'double-slashed'
+ testfailure --nomsg grep '//' "${ROOTDIR}/tmp/${TESTSTATE}.output"
+
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${KEYDIR}/joesixpack.pub.${EXT}.bak"
+ if [ "$TESTSTATE" = 'testwarning' ]; then
+ testwarning aptkey --fakeroot update
+ testsuccess grep '^gpg: key .*DBAC8DAE: "Joe Sixpack (APT Testcases Dummy) <joe@example.org>" not changed$' "${ROOTDIR}/tmp/testwarning.output"
+ testsuccess grep '^W: .* are ignored as the file has an unsupported filetype' "${ROOTDIR}/tmp/testwarning.output"
+ else
+ testequalor2 'gpg: key DBAC8DAE: "Joe Sixpack (APT Testcases Dummy) <joe@example.org>" not changed
+gpg: Total number processed: 1
+gpg: unchanged: 1' 'gpg: key 5A90D141DBAC8DAE: "Joe Sixpack (APT Testcases Dummy) <joe@example.org>" not changed
+gpg: Total number processed: 1
+gpg: unchanged: 1' aptkey --fakeroot update
+ fi
+ testsuccess test -L "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub.${EXT}" "${KEYDIR}/joesixpack.pub.${EXT}.bak"
+
+ testaptkeys 'Joe Sixpack'
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg"
+
+ ${TESTSTATE} aptkey --fakeroot add "${KEYDIR}/rexexpired.pub.${EXT}"
+ testfilestats "${ROOTDIR}/etc/apt/trusted.gpg" '%a' '=' '644'
+
+ testaptkeys 'Rex Expired' 'Joe Sixpack'
+
+ msgtest 'Check that Sixpack key can be' 'exported'
+ aptkey export 'Sixpack' > "${TMPWORKINGDIRECTORY}/aptkey.export" 2>/dev/null
+ aptkey --keyring "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}" exportall > "${TMPWORKINGDIRECTORY}/aptkey.exportall"
+ testsuccess --nomsg cmp "${TMPWORKINGDIRECTORY}/aptkey.export" "${TMPWORKINGDIRECTORY}/aptkey.exportall"
+ testsuccess test -s "${TMPWORKINGDIRECTORY}/aptkey.export"
+ testsuccess test -s "${TMPWORKINGDIRECTORY}/aptkey.exportall"
+
+ msgtest 'Check that multiple keys can be' 'exported'
+ aptkey export 'Sixpack' 'Expired' > "${TMPWORKINGDIRECTORY}/aptkey.export" 2>/dev/null
+ aptkey --keyring "${KEYDIR}/rexexpired.pub.${EXT}" \
+ --keyring "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}" exportall > "${TMPWORKINGDIRECTORY}/aptkey.exportall"
+ testsuccess --nomsg cmp "${TMPWORKINGDIRECTORY}/aptkey.export" "${TMPWORKINGDIRECTORY}/aptkey.exportall"
+ testsuccess test -s "${TMPWORKINGDIRECTORY}/aptkey.export"
+ testsuccess test -s "${TMPWORKINGDIRECTORY}/aptkey.exportall"
+
+ msgtest 'Execute update again to trigger removal of' 'Rex Expired key'
+ ${TESTSTATE} --nomsg aptkey --fakeroot update
+
+ testaptkeys 'Joe Sixpack'
+
+ msgtest "Try to remove a key which exists, but isn't in the" 'forced keyring'
+ testsuccess --nomsg aptkey --fakeroot --keyring "${ROOTDIR}/etc/apt/trusted.gpg" del DBAC8DAE
+
+ testaptkeys 'Joe Sixpack'
+
+ ${TESTSTATE} aptkey --fakeroot del DBAC8DAE
+ "${TESTSTATE}empty" aptkey list
+
+ ln -sf "$(readlink -f "${KEYDIR}/joesixpack.pub.${EXT}")" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testaptkeys 'Joe Sixpack'
+ msgtest "Remove a key from" 'forced keyring in trusted.d.gpg'
+ testsuccess --nomsg aptkey --fakeroot --keyring "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}" del DBAC8DAE
+ testsuccess cmp -s "$(readlink -f "${KEYDIR}/joesixpack.pub.${EXT}")" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+ "${TESTSTATE}empty" aptkey list
+
+ cp -a "${KEYDIR}/marvinparanoid.pub.asc" "${ROOTDIR}/etc/foobar.pub"
+ testsuccess aptkey --fakeroot --keyring "${ROOTDIR}/etc/foobar.pub" add "${KEYDIR}/rexexpired.pub.asc" "${KEYDIR}/joesixpack.pub.gpg"
+ testfilestats "${ROOTDIR}/etc/foobar.pub" '%a' '=' '644'
+ testaptkeyskeyring "${ROOTDIR}/etc/foobar.pub" 'Marvin Paranoid' 'Rex Expired' 'Joe Sixpack'
+ "${TESTSTATE}empty" aptkey list
+
+ msgtest 'Test key removal with' 'lowercase key ID' #keylength somewhere between 8byte and short
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del d141dbac8dae
+ "${TESTSTATE}empty" aptkey list
+
+ if [ "$(id -u)" != '0' ]; then
+ msgtest 'Test key removal with' 'unreadable key'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ echo 'foobar' > "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ chmod 000 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ testwarning --nomsg aptkey --fakeroot del d141dbac8dae
+ testwarning aptkey list
+ chmod 644 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ rm -f "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ grep -v '^W: ' "${ROOTDIR}/tmp/testwarning.output" > "${ROOTDIR}/aptkeylist.output" || true
+ testempty cat "${ROOTDIR}/aptkeylist.output"
+ fi
+
+ msgtest 'Test key removal with' 'single key in real file'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del DBAC8DAE
+ "${TESTSTATE}empty" aptkey list
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+
+ msgtest 'Test key removal with' 'different key specs'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ cp -a "${KEYDIR}/marvinparanoid.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/marvinparanoid.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del 0xDBAC8DAE 528144E2
+ "${TESTSTATE}empty" aptkey list
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/marvinparanoid.${EXT}"
+ testsuccess cmp "${KEYDIR}/marvinparanoid.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/marvinparanoid.${EXT}~"
+
+ msgtest 'Test key removal with' 'long key ID'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del 5A90D141DBAC8DAE
+ "${TESTSTATE}empty" aptkey list
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+
+ msgtest 'Test key removal with' 'fingerprint'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
+ "${TESTSTATE}empty" aptkey list
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+
+ msgtest 'Test key removal with' 'spaced fingerprint'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del '34A8 E9D1 8DB3 20F3 67E8 EAA0 5A90 D141 DBAC 8DAE'
+ "${TESTSTATE}empty" aptkey list
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+
+ msgtest 'Test key removal with' 'single key in softlink'
+ cleanplate
+ ln -sf "$(readlink -f "${KEYDIR}/joesixpack.pub.${EXT}")" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del DBAC8DAE
+ "${TESTSTATE}empty" aptkey list
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess test -L "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+
+ cleanplate
+ ${TESTSTATE} aptkey --fakeroot add "${KEYDIR}/joesixpack.pub.${EXT}"
+ ln -sf "$(readlink -f "${KEYDIR}/marvinparanoid.pub.${EXT}")" "${KEYDIR}/marvin paránöid.pub.${EXT}"
+ ${TESTSTATE} aptkey --fakeroot add "${KEYDIR}/marvin paránöid.pub.${EXT}"
+ testaptkeys 'Joe Sixpack' 'Marvin Paranoid'
+ cp -a "${ROOTDIR}/etc/apt/trusted.gpg" "${KEYDIR}/testcase-multikey.pub.gpg" # store for reuse
+ aptkey --keyring "${KEYDIR}/testcase-multikey.pub.gpg" export > "${KEYDIR}/testcase-multikey.pub.asc"
+
+ msgtest 'Test key removal with' 'multi key in real file'
+ cleanplate
+ cp -a "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del DBAC8DAE
+ testaptkeys 'Marvin Paranoid'
+ testsuccess cmp "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}~"
+
+ msgtest 'Test key removal with' 'multi key in softlink'
+ cleanplate
+ ln -s "$(readlink -f "${KEYDIR}/testcase-multikey.pub.${EXT}")" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del DBAC8DAE
+ testaptkeys 'Marvin Paranoid'
+ testsuccess cmp "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}~"
+ testfailure test -L "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}"
+ testsuccess test -L "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}~"
+
+ msgtest 'Test key removal with' 'multiple files including key'
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ cp -a "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}"
+ ${TESTSTATE} --nomsg aptkey --fakeroot del DBAC8DAE
+ testaptkeys 'Marvin Paranoid'
+ testfailure test -e "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ testsuccess cmp "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}~"
+ testsuccess cmp "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}~"
+
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ cp -a "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}"
+ testaptkeys 'Joe Sixpack' 'Joe Sixpack' 'Marvin Paranoid'
+ msgtest 'Test merge-back of' 'added keys'
+ ${TESTSTATE} --nomsg aptkey adv --batch --yes --import "${KEYDIR}/rexexpired.pub.${EXT}"
+ testaptkeys 'Rex Expired' 'Joe Sixpack' 'Joe Sixpack' 'Marvin Paranoid'
+
+ msgtest 'Test merge-back of' 'removed keys'
+ ${TESTSTATE} --nomsg aptkey adv --batch --yes --delete-keys 27CE74F9
+ testaptkeys 'Joe Sixpack' 'Joe Sixpack' 'Marvin Paranoid'
+
+ msgtest 'Test merge-back of' 'removed duplicate keys'
+ ${TESTSTATE} --nomsg aptkey adv --batch --yes --delete-keys DBAC8DAE
+ testaptkeys 'Marvin Paranoid'
+
+ cleanplate
+ cp -a "${KEYDIR}/joesixpack.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.${EXT}"
+ cp -a "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}"
+ local SIGNATURE="${TMPWORKINGDIRECTORY}/signature"
+ msgtest 'Test signing a file' 'with a key'
+ echo 'Verify me. This is my signature.' > "$SIGNATURE"
+ echo 'lalalalala' > "${SIGNATURE}2"
+ testsuccess --nomsg aptkey --quiet --keyring "${KEYDIR}/marvinparanoid.pub.gpg" --secret-keyring "${KEYDIR}/marvinparanoid.sec" --readonly \
+ adv --batch --yes --default-key 'Marvin' --armor --detach-sign --sign --output "${SIGNATURE}.gpg" "${SIGNATURE}"
+ testsuccess test -s "${SIGNATURE}.gpg" -a -s "${SIGNATURE}"
+
+ msgtest 'Test verify a file' 'with no sig'
+ testfailure --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/testcase-multikey.pub.${EXT}" verify "${SIGNATURE}" "${SIGNATURE}2"
+
+ for GPGV in '' 'gpgv' 'gpgv1' 'gpgv2'; do
+ echo "APT::Key::GPGVCommand \"$GPGV\";" > "${ROOTDIR}/etc/apt/apt.conf.d/00gpgvcmd"
+ if [ -n "$GPGV" ] && ! command dpkg -l gnupg1 2>&1 | grep -q '^ii'; then continue; fi
+
+ msgtest 'Test verify a file' 'with all keys'
+ ${TESTSTATE} --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ if [ "$(id -u)" != '0' ]; then
+ msgtest 'Test verify a file' 'with unreadable key'
+ echo 'foobar' > "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ chmod 000 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ testwarning --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+ testwarning aptkey list
+ # check that apt users see warnings, too
+ rm -rf "${ROOTDIR}/var/lib/apt/lists"
+ testwarning apt update
+
+ chmod 644 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ rm -f "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.${EXT}"
+ fi
+
+ msgtest 'Test verify a file' 'with good keyring'
+ testsuccess --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/testcase-multikey.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test verify a file' 'with good keyrings 1'
+ testsuccess --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/joesixpack.pub.${EXT}" \
+ --keyring "${KEYDIR}/marvinparanoid.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test verify a file' 'with good keyrings 2'
+ testsuccess --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/marvinparanoid.pub.${EXT}" \
+ --keyring "${KEYDIR}/joesixpack.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a file' 'with bad keyring'
+ testfailure --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/joesixpack.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a file' 'with non-existing keyring'
+ testfailure --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/does-not-exist.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+ testfailure test -e "${KEYDIR}/does-not-exist.pub.${EXT}"
+
+ # note: this isn't how apts gpgv method implements keyid for verify
+ msgtest 'Test verify a file' 'with good keyid'
+ ${TESTSTATE} --nomsg aptkey --quiet --readonly --keyid 'Paranoid' verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a file' 'with bad keyid'
+ testfailure --nomsg aptkey --quiet --readonly --keyid 'Sixpack' verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a file' 'with non-existing keyid'
+ testfailure --nomsg aptkey --quiet --readonly --keyid 'Kalnischkies' verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test verify fails on' 'bad file'
+ testfailure --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}2"
+
+ # try to perform an entire update with this gpgv
+ rm -rf "${ROOTDIR}/var/lib/apt/lists"
+ ${TESTSTATE} apt update -o Test::Dir="${ROOTDIR}"
+ done
+ rm -f "${ROOTDIR}/etc/apt/apt.conf.d/00gpgvcmd"
+
+ msgtest 'Test verify a file' 'with good keyring'
+ testsuccess --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/testcase-multikey.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ cleanplate
+ cat "${KEYDIR}/joesixpack.pub.gpg" "${KEYDIR}/marvinparanoid.pub.gpg" > "${KEYDIR}/double.pub.gpg"
+ cat "${KEYDIR}/joesixpack.pub.asc" "${KEYDIR}/marvinparanoid.pub.asc" > "${KEYDIR}/double.pub.asc"
+ cat "${KEYDIR}/joesixpack.sec" "${KEYDIR}/marvinparanoid.sec" > "${KEYDIR}/double.sec"
+ cp -a "${KEYDIR}/double.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/double.${EXT}"
+ cp -a "${KEYDIR}/testcase-multikey.pub.${EXT}" "${ROOTDIR}/etc/apt/trusted.gpg.d/multikey.${EXT}"
+ rm -f "${SIGNATURE}.gpg"
+ testsuccess aptkey --quiet --keyring "${KEYDIR}/double.pub.gpg" --secret-keyring "${KEYDIR}/double.sec" --readonly \
+ adv --batch --yes -u 'Marvin' -u 'Joe' --armor --detach-sign --sign --output "${SIGNATURE}.gpg" "${SIGNATURE}"
+ testsuccess test -s "${SIGNATURE}.gpg" -a -s "${SIGNATURE}"
+
+ for GPGV in '' 'gpgv' 'gpgv1' 'gpgv2'; do
+ echo "APT::Key::GPGVCommand \"$GPGV\";" > "${ROOTDIR}/etc/apt/apt.conf.d/00gpgvcmd"
+ if [ -n "$GPGV" ] && ! command dpkg -l gnupg1 2>&1 | grep -q '^ii'; then continue; fi
+
+ msgtest 'Test verify a doublesigned file' 'with all keys'
+ ${TESTSTATE} --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test verify a doublesigned file' 'with good keyring joe'
+ testmultigpg --keyring "${KEYDIR}/joesixpack.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test verify a doublesigned file' 'with good keyring marvin'
+ testmultigpg --keyring "${KEYDIR}/marvinparanoid.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a doublesigned file' 'with bad keyring'
+ testfailure --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/rexexpired.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a doublesigned file' 'with non-existing keyring'
+ testfailure --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/does-not-exist.pub.${EXT}" verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+ testfailure test -e "${KEYDIR}/does-not-exist.pub.${EXT}"
+
+ # note: this isn't how apts gpgv method implements keyid for verify
+ msgtest 'Test verify a doublesigned file' 'with good keyid'
+ testmultigpg --keyid 'Paranoid' verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a doublesigned file' 'with bad keyid'
+ testfailure --nomsg aptkey --quiet --readonly --keyid 'Rex' verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test fail verify a doublesigned file' 'with non-existing keyid'
+ testfailure --nomsg aptkey --quiet --readonly --keyid 'Kalnischkies' verify "${SIGNATURE}.gpg" "${SIGNATURE}"
+
+ msgtest 'Test verify fails on' 'bad doublesigned file'
+ testfailure --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}2"
+ done
+ rm -f "${ROOTDIR}/etc/apt/apt.conf.d/00gpgvcmd"
+}
+
+setupgpgcommand() {
+ local GPGEXE;
+ if command dpkg -l gnupg1 2>&1 | grep -q '^ii'; then
+ if [ "$1" = '1' ]; then
+ GPGEXE='gpg1'
+ else
+ GPGEXE='gpg'
+ fi
+ else
+ if [ "$1" = '1' ]; then
+ GPGEXE='gpg'
+ else
+ GPGEXE='gpg2'
+ fi
+ fi
+ msgmsg 'Force tests to be run with' "$GPGEXE"
+ echo "APT::Key::GPGCommand \"$GPGEXE\";" > "${ROOTDIR}/etc/apt/apt.conf.d/00gpgcmd"
+ testsuccess aptkey --readonly adv --version
+ cp "${ROOTDIR}/tmp/testsuccess.output" "${TMPWORKINGDIRECTORY}/aptkey.version"
+ testsuccess grep "^gpg (GnuPG) $1\." "${TMPWORKINGDIRECTORY}/aptkey.version"
+}
+
+(cd /; find "${TMPWORKINGDIRECTORY}/keys" -name '*.pub' -type f) | while read trusted; do
+ testsuccess aptkey --keyring "$trusted" adv --armor --export --output "${trusted}.asc"
+ cp -a "$trusted" "${trusted}.gpg"
+done
+
+# run with default (whatever this is) in current CWD with relative paths
+ROOTDIR="./rootdir"
+KEYDIR="./keys"
+testrun
+
+# run with … and up the game with a strange CWD & absolute paths
+ROOTDIR="${TMPWORKINGDIRECTORY}/rootdir"
+KEYDIR="${TMPWORKINGDIRECTORY}/keys"
+mkdir inaccessible
+cd inaccessible
+chmod 600 ../inaccessible
+testfilestats "${TMPWORKINGDIRECTORY}/inaccessible" '%a' '=' '600'
+
+setupgpgcommand '1'
+testrun
+setupgpgcommand '2'
+testrun
+
+msgmsg 'Tests to be run with' 'asc files'
+rm -f "${ROOTDIR}/etc/apt/apt.conf.d/00gpgcmd"
+testrun 'asc'
+
+msgmsg 'Tests to be run with' 'bad files'
+# don't let the plate be so clean anymore
+cleanplate() {
+ rm -rf "${ROOTDIR}/etc/apt/trusted.gpg.d/" "${ROOTDIR}/etc/apt/trusted.gpg"
+ mkdir "${ROOTDIR}/etc/apt/trusted.gpg.d/"
+ touch "${ROOTDIR}/etc/apt/trusted.gpg.d/emptyfile.gpg"
+ touch "${ROOTDIR}/etc/apt/trusted.gpg.d/emptyfile.asc"
+ echo 'broken' > "${ROOTDIR}/etc/apt/trusted.gpg.d/brokenfile.gpg"
+ echo 'broken' > "${ROOTDIR}/etc/apt/trusted.gpg.d/brokenfile.asc"
+}
+testrun 'gpg' 'testwarning'
diff --git a/test/integration/test-apt-key-net-update b/test/integration/test-apt-key-net-update
new file mode 100755
index 0000000..b9f716e
--- /dev/null
+++ b/test/integration/test-apt-key-net-update
@@ -0,0 +1,41 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+changetowebserver
+
+# setup env
+mkdir -p var/lib/apt/keyrings
+mkdir -p usr/share/keyrings
+
+# install the fake master keyring
+install -m0644 keys/test-master-keyring.pub usr/share/keyrings
+echo "APT::Key::MasterKeyring \"${TMPWORKINGDIRECTORY}/usr/share/keyrings/test-master-keyring.pub\";" >> ./aptconfig.conf
+
+# setup archive-keyring
+mkdir -p aptarchive/ubuntu/project
+install -m0644 keys/test-archive-keyring.pub aptarchive/ubuntu/project/
+echo "APT::Key::ArchiveKeyringURI \"http://localhost:${APTHTTPPORT}/ubuntu/project/test-archive-keyring.pub\";" >> ./aptconfig.conf
+echo 'APT::Key::Net-Update-Enabled "1";' >> ./aptconfig.conf
+
+# test against the "real" webserver
+testsuccess aptkey --fakeroot net-update
+testfailure grep 'not added' rootdir/tmp/testsuccess.output
+testaptkeys 'oldarchive' 'newarchive'
+
+# now try a different one
+# setup archive-keyring
+mkdir -p aptarchive/ubuntu/project
+install -m0644 keys/marvinparanoid.pub aptarchive/ubuntu/project/
+echo "APT::Key::ArchiveKeyringURI \"http://localhost:${APTHTTPPORT}/ubuntu/project/marvinparanoid.pub\";" >> ./aptconfig.conf
+echo 'APT::Key::Net-Update-Enabled "1";' >> ./aptconfig.conf
+
+# test against the "real" webserver
+testsuccessequal "Checking for new archive signing keys now
+Key 'DE66AECA9151AFA1877EC31DE8525D47528144E2' not added. It is not signed with a master key" aptkey --fakeroot net-update
+
+testaptkeys 'oldarchive' 'newarchive'
diff --git a/test/integration/test-apt-key-used-in-maintainerscript b/test/integration/test-apt-key-used-in-maintainerscript
new file mode 100755
index 0000000..b5ed327
--- /dev/null
+++ b/test/integration/test-apt-key-used-in-maintainerscript
@@ -0,0 +1,43 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+unset APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE
+configarchitecture 'native'
+configdpkgnoopchroot
+
+buildingpkg() {
+ local PKG="$1"
+ shift
+ setupsimplenativepackage "$PKG" 'native' '1' 'unstable' "$@"
+ BUILDDIR="incoming/${PKG}-1"
+ echo '#!/bin/sh
+apt-key list >/dev/null' > "${BUILDDIR}/debian/postinst"
+ buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+ rm -rf "$BUILDDIR"
+}
+buildingpkg 'aptkeyuser-nodepends' 'Depends: unrelated'
+buildingpkg 'aptkeyuser-depends' 'Depends: gnupg'
+
+insertinstalledpackage 'unrelated' 'native' '1'
+insertinstalledpackage 'gnupg' 'native' '1'
+testdpkgnotinstalled 'aptkeyuser-depends' 'aptkeyuser-nodepends'
+
+testsuccess apt install ./incoming/aptkeyuser-depends_*.changes -y
+cp rootdir/tmp/testsuccess.output apt.output
+testdpkginstalled 'aptkeyuser-depends'
+testfailure grep '^Warning: This will BREAK' apt.output
+testsuccess grep '^Warning: apt-key' apt.output
+
+testsuccess apt install --with-source ./incoming/aptkeyuser-nodepends_*.changes aptkeyuser-nodepends -y
+cp rootdir/tmp/testsuccess.output apt.output
+testdpkginstalled 'aptkeyuser-nodepends'
+testsuccess grep '^Warning: This will BREAK' apt.output
+testsuccess grep '^Warning: apt-key' apt.output
+
+testsuccess aptkey list
+cp rootdir/tmp/testsuccess.output aptkey.list
+testsuccess grep '^Warning: apt-key' aptkey.list
diff --git a/test/integration/test-apt-mark b/test/integration/test-apt-mark
new file mode 100755
index 0000000..7a115b0
--- /dev/null
+++ b/test/integration/test-apt-mark
@@ -0,0 +1,154 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable' 'bar' 'amd64,i386' '1'
+insertpackage 'unstable' 'uninstalled' 'all' '1'
+insertpackage 'unstable' 'uninstalled-native' 'amd64' '1'
+
+insertinstalledpackage 'foo' 'all' '1'
+insertinstalledpackage 'bar' 'amd64' '1'
+
+setupaptarchive
+
+# dpkg is "installed" by our test framework
+testdpkginstalled dpkg
+
+testnoautopkg() {
+ testempty aptmark showauto
+ testempty aptcache -q=1 showauto
+ testsuccessequal 'bar
+dpkg
+foo' aptmark showmanual
+ testsuccessequal 'bar
+foo' aptmark showmanual bar foo uninstalled
+}
+testfooisauto() {
+ testsuccessequal 'foo' aptmark showauto
+ testsuccessequal 'foo' aptcache -q=1 showauto
+ testsuccessequal 'foo' aptmark showauto foo
+ testsuccessequal 'foo' aptcache -q=1 showauto foo
+ testsuccessequal 'bar
+dpkg' aptmark showmanual
+ testsuccessequal 'bar' aptmark showmanual bar
+}
+testmarkonpkgasauto() {
+ testsuccess $1 -q=1 $2 foo
+ testfooisauto
+ testsuccess $1 -q=1 $2 foo
+ testfooisauto
+
+ testsuccess $1 -q=1 $3 foo
+ testnoautopkg
+ testsuccess $1 -q=1 $3 foo
+ testnoautopkg
+}
+
+testfailureequal 'E: No packages found' aptmark auto
+testfailureequal 'E: No packages found' aptmark manual
+
+testnoautopkg
+testmarkonpkgasauto 'aptmark' 'auto' 'manual'
+testmarkonpkgasauto 'aptmark' 'markauto' 'unmarkauto'
+testmarkonpkgasauto 'aptget' 'markauto' 'unmarkauto'
+
+testnoholdpkg() {
+ testempty aptmark showhold
+ testempty aptmark showholds # typical "typo"
+ testempty aptmark showhold dpkg
+ testempty aptmark showholds dpkg
+}
+testpkgonhold() {
+ testsuccessequal "$1" aptmark showhold
+ testsuccessequal "$1" aptmark showholds
+ testsuccessequal "$1" aptmark showhold $1
+ testsuccessequal "$1" aptmark showholds $1
+}
+testmarkonepkgashold() {
+ testsuccess aptmark hold $1
+ testpkgonhold $1
+ testsuccess aptmark hold $1
+ testpkgonhold $1
+ testsuccess aptmark unhold $1
+ testnoholdpkg
+ testsuccess aptmark unhold $1
+ testnoholdpkg
+}
+
+testfailureequal 'E: No packages found' aptmark hold
+testfailureequal 'E: No packages found' aptmark unhold
+
+testnoholdpkg
+testmarkonepkgashold 'foo'
+testmarkonepkgashold 'bar'
+
+msgtest 'dpkg supports --merge-avail via' 'stdin'
+if dpkg --merge-avail - < /dev/null >/dev/null 2>&1; then
+ msgpass
+else
+ msgskip 'dpkg version too old'
+ exit 0
+fi
+
+testmarkonepkgashold 'uninstalled'
+testmarkonepkgashold 'uninstalled-native'
+
+testsuccessequal 'uninstalled set on hold.' aptmark hold uninstalled
+testsuccessequal 'uninstalled-native set on hold.' aptmark hold uninstalled-native
+#FIXME: holds on uninstalled packages are not persistent in dpkg
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following NEW packages will be installed:
+ uninstalled uninstalled-native
+The following held packages will be changed:
+ uninstalled-native
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst uninstalled (1 unstable [all])
+Inst uninstalled-native (1 unstable [amd64])
+Conf uninstalled (1 unstable [all])
+Conf uninstalled-native (1 unstable [amd64])' aptget install uninstalled uninstalled-native -s
+testsuccess aptmark unhold uninstalled uninstalled-native
+
+testselections() {
+ testsuccess aptmark hold "$1"
+ testsuccessequal "$1" aptmark showholds "$1"
+ testsuccess aptmark unhold "$1"
+ testsuccessequal "$1" aptmark showinstalls "$1"
+ testsuccess aptmark hold "$1"
+ testsuccessequal "$1" aptmark showholds "$1"
+ testsuccess aptmark install "$1"
+ testsuccessequal "$1" aptmark showinstalls "$1"
+ testsuccess aptmark remove "$1"
+ testsuccessequal "$1" aptmark showremoves "$1"
+ testsuccess aptmark purge "$1"
+ testsuccessequal "$1" aptmark showpurges "$1"
+}
+testselections 'foo'
+testselections 'bar'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ bar* foo*
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+Purg bar [1]
+Purg foo [1]' aptget dselect-upgrade -s
+
+testuninstalledselections() {
+ testsuccess aptmark hold "$1"
+ testsuccessequal "$1" aptmark showholds "$1"
+ testsuccess aptmark unhold "$1"
+ testsuccessequal "$1" aptmark showremoves "$1"
+ testsuccess aptmark hold "$1"
+ testsuccessequal "$1" aptmark showholds "$1"
+ testsuccess aptmark install "$1"
+ testsuccessequal "$1" aptmark showinstalls "$1"
+}
+testuninstalledselections 'uninstalled'
+testuninstalledselections 'uninstalled-native'
diff --git a/test/integration/test-apt-move-and-forget-manual-sections b/test/integration/test-apt-move-and-forget-manual-sections
new file mode 100755
index 0000000..69a7d9f
--- /dev/null
+++ b/test/integration/test-apt-move-and-forget-manual-sections
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'native'
+
+aptconfig dump --no-empty --format '%v%n' APT::Move-Autobit-Sections > move-autobit.sections
+testsuccess grep '^oldlibs$' move-autobit.sections
+
+buildsimplenativepackage 'libabc' 'native' '1' 'stable' '' '' 'libs'
+buildsimplenativepackage 'libabc' 'native' '2' 'unstable' 'Depends: libdef' '' 'oldlibs'
+buildsimplenativepackage 'libdef' 'native' '1' 'unstable' '' '' 'libs'
+setupaptarchive
+
+testmarkedauto
+testmarkedmanual 'dpkg'
+
+testsuccess aptget install libabc/stable -y
+testdpkginstalled 'libabc'
+testdpkgnotinstalled 'libdef'
+
+testmarkedmanual 'dpkg' 'libabc'
+testmarkedauto
+
+testsuccess aptget dist-upgrade -y
+testdpkginstalled 'libabc' 'libdef'
+
+testmarkedauto 'libabc'
+testmarkedmanual 'dpkg' 'libdef'
diff --git a/test/integration/test-apt-never-markauto-sections b/test/integration/test-apt-never-markauto-sections
new file mode 100755
index 0000000..aa145d2
--- /dev/null
+++ b/test/integration/test-apt-never-markauto-sections
@@ -0,0 +1,86 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+aptconfig dump --no-empty --format '%v%n' APT::Never-MarkAuto-Sections > nevermarkauto.sections
+testsuccess grep '^metapackages$' nevermarkauto.sections
+
+buildsimplenativepackage 'mydesktop' 'all' '1' 'unstable' 'Depends: mydesktop-core, foreignpkg
+Recommends: notavailable' '' 'metapackages'
+buildsimplenativepackage 'mydesktop-core' 'amd64' '1' 'unstable' 'Depends: bad-texteditor | texteditor, browser (>= 42), nosection, foreignpkg
+Recommends: notavailable
+Multi-Arch: foreign' '' 'metapackages'
+buildsimplenativepackage 'browser' 'amd64' '41' 'stable'
+buildsimplenativepackage 'browser' 'amd64' '42' 'unstable'
+buildsimplenativepackage 'texteditor' 'amd64' '1' 'stable'
+buildsimplenativepackage 'bad-texteditor' 'amd64' '1' 'stable' 'Depends: texteditor
+Conflicts: mydesktop-core'
+buildsimplenativepackage 'nosection' 'amd64' '1' 'stable' '' '' '<none>'
+buildsimplenativepackage 'foreignpkg' 'i386' '1' 'stable' 'Multi-Arch: foreign'
+setupaptarchive
+
+testsuccess aptcache show nosection
+testfailure grep 'Section' rootdir/tmp/testsuccess.output
+testequal 'dpkg' aptmark showmanual
+
+testsuccess aptget install mydesktop -y -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::Marker=1
+
+testmarkedmanual 'dpkg' 'mydesktop'
+testmarkedauto 'mydesktop-core' 'foreignpkg:i386' 'texteditor' 'browser' 'nosection'
+
+# if the remove is from a user, don't do manual-bit passing
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ browser foreignpkg:i386 mydesktop mydesktop-core nosection texteditor
+0 upgraded, 0 newly installed, 6 to remove and 0 not upgraded.
+Remv mydesktop [1]
+Remv mydesktop-core [1]
+Remv browser [42]
+Remv foreignpkg:i386 [1]
+Remv nosection [1]
+Remv texteditor [1]' aptget autoremove mydesktop -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ mydesktop mydesktop-core texteditor
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+Remv mydesktop [1]
+Remv mydesktop-core [1]
+Remv texteditor [1]' aptget autoremove texteditor -s #-o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::Marker=1
+testsuccess aptget autoremove texteditor -y
+
+testdpkgnotinstalled mydesktop mydesktop-core texteditor
+testdpkginstalled browser
+
+testmarkedmanual 'browser' 'dpkg' 'foreignpkg:i386' 'nosection'
+testmarkedauto
+
+# test that installed/upgraded auto-pkgs are not set to manual
+
+testsuccess aptget install browser=41 -y --allow-downgrades
+
+testmarkedmanual 'browser' 'dpkg' 'foreignpkg:i386' 'nosection'
+testmarkedauto
+testsuccess aptmark auto browser
+testmarkedauto 'browser'
+testsuccess aptmark auto nosection
+testmarkedauto 'browser' 'nosection'
+testmarkedmanual 'dpkg' 'foreignpkg:i386'
+
+# nosection should be auto, not manual, but is marked as such by the resolver
+# removing mydesktop-core temporally… the resolver should be figuring out here
+# that there is no point of removing mydesktop-core as its an unavoidable
+# dependency of the user-requested mydesktop
+
+testsuccess aptget install mydesktop -y -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::Marker=1 -o Debug::pkgDepCache::AutoInstall=1
+
+testmarkedmanual 'dpkg' 'foreignpkg:i386' 'mydesktop' 'nosection'
+testmarkedauto 'browser' 'mydesktop-core' 'texteditor'
diff --git a/test/integration/test-apt-progress-fd b/test/integration/test-apt-progress-fd
new file mode 100755
index 0000000..4c19a7b
--- /dev/null
+++ b/test/integration/test-apt-progress-fd
@@ -0,0 +1,80 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'testing' 'amd64' '0.1' 'stable'
+buildsimplenativepackage 'testing' 'amd64' '0.8.15' 'stable'
+buildsimplenativepackage 'testing2' 'amd64,i386' '0.8.15' 'stable'
+setupaptarchive
+
+# install native
+exec 3> apt-progress.log
+testsuccess aptget install testing=0.1 -y -o APT::Status-Fd=3
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Preparing testing (amd64)
+pmstatus:testing:20.0000:Unpacking testing (amd64)
+pmstatus:testing:40.0000:Installing testing (amd64)
+pmstatus:dpkg-exec:40.0000:Running dpkg
+pmstatus:testing:40.0000:Preparing to configure testing (amd64)
+pmstatus:testing:60.0000:Configuring testing (amd64)
+pmstatus:testing:80.0000:Installed testing (amd64)'
+
+# upgrade
+exec 3> apt-progress.log
+testsuccess aptget install testing=0.8.15 -y -o APT::Status-Fd=3
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Preparing testing (amd64)
+pmstatus:testing:20.0000:Unpacking testing (amd64)
+pmstatus:testing:40.0000:Installing testing (amd64)
+pmstatus:dpkg-exec:40.0000:Running dpkg
+pmstatus:testing:40.0000:Preparing to configure testing (amd64)
+pmstatus:testing:60.0000:Configuring testing (amd64)
+pmstatus:testing:80.0000:Installed testing (amd64)'
+
+# reinstall
+exec 3> apt-progress.log
+testsuccess aptget install testing=0.8.15 --reinstall -y -o APT::Status-Fd=3
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Preparing testing (amd64)
+pmstatus:testing:20.0000:Unpacking testing (amd64)
+pmstatus:testing:40.0000:Installing testing (amd64)
+pmstatus:dpkg-exec:40.0000:Running dpkg
+pmstatus:testing:40.0000:Preparing to configure testing (amd64)
+pmstatus:testing:60.0000:Configuring testing (amd64)
+pmstatus:testing:80.0000:Installed testing (amd64)'
+
+# and remove
+exec 3> apt-progress.log
+testsuccess aptget remove testing -y -o APT::Status-Fd=3
+testfileequal './apt-progress.log' 'pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Preparing for removal of testing (amd64)
+pmstatus:testing:33.3333:Removing testing (amd64)
+pmstatus:testing:66.6667:Removing testing (amd64)
+pmstatus:dpkg-exec:66.6667:Running dpkg'
+
+# install non-native and ensure we get proper progress info
+exec 3> apt-progress.log
+testsuccess aptget install testing2:i386 -y -o APT::Status-Fd=3
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing2:0.0000:Preparing testing2 (i386)
+pmstatus:testing2:20.0000:Unpacking testing2 (i386)
+pmstatus:testing2:40.0000:Installing testing2 (i386)
+pmstatus:dpkg-exec:40.0000:Running dpkg
+pmstatus:testing2:40.0000:Preparing to configure testing2 (i386)
+pmstatus:testing2:60.0000:Configuring testing2 (i386)
+pmstatus:testing2:80.0000:Installed testing2 (i386)'
+
+rm -f apt-progress*.log
diff --git a/test/integration/test-apt-progress-fd-conffile b/test/integration/test-apt-progress-fd-conffile
new file mode 100755
index 0000000..9fb6fbe
--- /dev/null
+++ b/test/integration/test-apt-progress-fd-conffile
@@ -0,0 +1,42 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+# old conffile
+setupsimplenativepackage 'compiz-core' 'native' '1.0' 'unstable'
+BUILDDIR='incoming/compiz-core-1.0'
+mkdir -p "${BUILDDIR}/debian/compiz-core/etc"
+echo 'foo=bar;' > "${BUILDDIR}/compiz.conf"
+echo 'compiz.conf /etc/compiz.conf' >> "${BUILDDIR}/debian/install"
+buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+rm -rf "$BUILDDIR"
+
+# new conffile
+setupsimplenativepackage 'compiz-core' 'native' '2.0' 'unstable'
+BUILDDIR='incoming/compiz-core-2.0'
+mkdir -p "${BUILDDIR}/debian/compiz-core/etc"
+echo 'foo2=bar2;' > "${BUILDDIR}/compiz.conf"
+echo 'compiz.conf /etc/compiz.conf' >> "${BUILDDIR}/debian/install"
+buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+rm -rf "$BUILDDIR"
+
+setupaptarchive
+
+testsuccess aptget install compiz-core=1.0
+
+# fake conffile change
+echo 'meep' >> rootdir/etc/compiz.conf/compiz.conf
+
+# FIXME: Is there really no way to see if dpkg actually prompts?
+msgtest 'Test for successful execution of' 'apt-get install compiz-core=2.0'
+exec 3> apt-progress.log
+testsuccess --nomsg aptget install compiz-core=2.0 -o APT::Status-Fd=3 -o Dpkg::Use-Pty=false -o dpkg::options::='--force-confold'
+
+# and ensure there is a conffile message in the file
+msgtest 'Test status fd for an included' 'pmconffile msg'
+testsuccess --nomsg grep "pmconffile:/etc/compiz.conf/compiz.conf" apt-progress.log
diff --git a/test/integration/test-apt-progress-fd-deb822 b/test/integration/test-apt-progress-fd-deb822
new file mode 100755
index 0000000..dd66e28
--- /dev/null
+++ b/test/integration/test-apt-progress-fd-deb822
@@ -0,0 +1,58 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'testing' 'amd64' '0.1' 'stable'
+buildsimplenativepackage 'testing' 'all' '0.8.15' 'stable'
+buildsimplenativepackage 'testing2' 'amd64,i386' '0.8.15' 'stable'
+setupaptarchive
+
+# install native
+exec 3> apt-progress.log
+testsuccess aptget install testing=0.1 -y -o APT::Status-deb822-Fd=3
+
+testfileequal './apt-progress.log' 'Status: progress
+Percent: 0.0000
+Message: Running dpkg
+
+Status: progress
+Package: testing:amd64
+Percent: 0.0000
+Message: Preparing testing (amd64)
+
+Status: progress
+Package: testing:amd64
+Percent: 20.0000
+Message: Unpacking testing (amd64)
+
+Status: progress
+Package: testing:amd64
+Percent: 40.0000
+Message: Installing testing (amd64)
+
+Status: progress
+Percent: 40.0000
+Message: Running dpkg
+
+Status: progress
+Package: testing:amd64
+Percent: 40.0000
+Message: Preparing to configure testing (amd64)
+
+Status: progress
+Package: testing:amd64
+Percent: 60.0000
+Message: Configuring testing (amd64)
+
+Status: progress
+Package: testing:amd64
+Percent: 80.0000
+Message: Installed testing (amd64)
+'
+
+rm -f apt-progress*.log
diff --git a/test/integration/test-apt-progress-fd-error b/test/integration/test-apt-progress-fd-error
new file mode 100755
index 0000000..39c1053
--- /dev/null
+++ b/test/integration/test-apt-progress-fd-error
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+mkdir -p usr/bin
+touch usr/bin/file-conflict
+
+buildsimplenativepackage 'foo1' 'native' '0.8.15' 'stable' '' 'pkg with file conflicts' '' '' 'usr/'
+buildsimplenativepackage 'foo2' 'native' '0.8.15' 'stable' '' 'pkg with file conflicts' '' '' 'usr/'
+insertinstalledpackage 'apport' 'native' '1'
+
+setupaptarchive
+
+exec 3> apt-progress.log
+testfailure aptget install foo1 foo2 -y -o APT::Status-Fd=3
+msgtest 'Ensure correct error message' 'file-conflict'
+testsuccess --nomsg grep "foo2_0.8.15_[^.]\+.deb:[0-9.]\+:trying to overwrite '/usr/bin/file-conflict', which is also in package foo1 0.8.15" apt-progress.log
+
+testsuccess test -s rootdir/var/crash/foo2.0.crash
+testsuccess grep '^Package: foo2 0.8.15$' rootdir/var/crash/foo2.0.crash
diff --git a/test/integration/test-apt-redirect-loop b/test/integration/test-apt-redirect-loop
new file mode 100755
index 0000000..e1a8aee
--- /dev/null
+++ b/test/integration/test-apt-redirect-loop
@@ -0,0 +1,20 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+echo 'alright' > aptarchive/working
+changetohttpswebserver
+webserverconfig 'aptwebserver::redirect::replace::/redirectme3/' '/redirectme/'
+webserverconfig 'aptwebserver::redirect::replace::/redirectme2/' '/redirectme3/'
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' '/redirectme2/'
+
+testfailure apthelper download-file "http://localhost:${APTHTTPPORT}/redirectme/working" httpfile
+testsuccess grep 'Redirection loop encountered' rootdir/tmp/testfailure.output
+
+testfailure apthelper download-file "https://localhost:${APTHTTPSPORT}/redirectme/working" httpsfile
+testsuccess grep 'Redirection loop encountered' rootdir/tmp/testfailure.output
diff --git a/test/integration/test-apt-showlist-orgroup-in-recommends b/test/integration/test-apt-showlist-orgroup-in-recommends
new file mode 100755
index 0000000..a03c367
--- /dev/null
+++ b/test/integration/test-apt-showlist-orgroup-in-recommends
@@ -0,0 +1,200 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+# simple case
+insertinstalledpackage 'aaa' 'all' '1'
+insertinstalledpackage 'ddd' 'all' '1'
+insertpackage 'unstable' 'aaa' 'all' '1'
+insertpackage 'unstable' 'ddd' 'all' '1'
+insertpackage 'unstable' 'yyy' 'all' '1'
+insertpackage 'unstable' 'zzz' 'all' '1:1'
+insertpackage 'unstable' 'simple' 'all' '1' 'Recommends: aaa, bbb
+Suggests: ccc, ddd'
+insertpackage 'unstable' 'orgroup' 'all' '1' 'Recommends: aaa | bbb
+Suggests: ccc | ddd'
+insertpackage 'unstable' 'orgroup2' 'all' '1' 'Recommends: xxx | yyy
+Suggests: yyy | zzz'
+insertpackage 'unstable' 'orgroup3' 'all' '1' 'Recommends: xxx | yyy
+Suggests: yyy | zzz'
+insertpackage 'unstable' 'orgroup4' 'all' '1' 'Recommends: xxx
+Suggests: zzz'
+insertpackage 'unstable' 'versionedor' 'all' '1' 'Recommends: aaa (>> 2) | bbb
+Suggests: ccc | ddd (>> 2)'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ ccc
+Recommended packages:
+ bbb
+The following NEW packages will be installed:
+ simple
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst simple (1 unstable [all])
+Conf simple (1 unstable [all])' aptget install simple -s --install-recommends --install-suggests
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ ccc
+Recommended packages:
+ bbb
+The following NEW packages will be installed:
+ simple
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst simple (1 unstable [all])
+Conf simple (1 unstable [all])' aptget install simple -s --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ ccc
+Recommended packages:
+ aaa bbb
+The following packages will be REMOVED:
+ aaa
+The following NEW packages will be installed:
+ simple
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv aaa [1]
+Inst simple (1 unstable [all])
+Conf simple (1 unstable [all])' aptget install simple aaa- -s --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ orgroup
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup (1 unstable [all])
+Conf orgroup (1 unstable [all])' aptget install orgroup -s --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Recommended packages:
+ aaa | bbb
+The following packages will be REMOVED:
+ aaa
+The following NEW packages will be installed:
+ orgroup
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv aaa [1]
+Inst orgroup (1 unstable [all])
+Conf orgroup (1 unstable [all])' aptget install orgroup aaa- -s --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ yyy | zzz
+Recommended packages:
+ xxx | yyy
+The following NEW packages will be installed:
+ orgroup2
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup2 (1 unstable [all])
+Conf orgroup2 (1 unstable [all])' aptget install orgroup2 -s --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ yyy | zzz
+Recommended packages:
+ xxx | yyy
+The following NEW packages will be installed:
+ orgroup2 orgroup3
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup2 (1 unstable [all])
+Inst orgroup3 (1 unstable [all])
+Conf orgroup2 (1 unstable [all])
+Conf orgroup3 (1 unstable [all])' aptget install orgroup2 orgroup3 -s --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ yyy | zzz zzz
+Recommended packages:
+ xxx | yyy xxx
+The following NEW packages will be installed:
+ orgroup2 orgroup4
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup2 (1 unstable [all])
+Inst orgroup4 (1 unstable [all])
+Conf orgroup2 (1 unstable [all])
+Conf orgroup4 (1 unstable [all])' aptget install orgroup2 orgroup4 -s --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ yyy (1)
+ | zzz (1:1)
+ zzz (1:1)
+Recommended packages:
+ xxx
+ | yyy (1)
+ xxx
+The following NEW packages will be installed:
+ orgroup2 (1)
+ orgroup4 (1)
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup2 (1 unstable [all])
+Inst orgroup4 (1 unstable [all])
+Conf orgroup2 (1 unstable [all])
+Conf orgroup4 (1 unstable [all])' aptget install orgroup2 orgroup4 -s -V --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ zzz (1:1)
+Recommended packages:
+ xxx
+The following NEW packages will be installed:
+ orgroup2 (1)
+ orgroup4 (1)
+ yyy (1)
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup2 (1 unstable [all])
+Inst orgroup4 (1 unstable [all])
+Inst yyy (1 unstable [all])
+Conf orgroup2 (1 unstable [all])
+Conf orgroup4 (1 unstable [all])
+Conf yyy (1 unstable [all])' aptget install orgroup2 orgroup4 yyy -s -V --no-install-recommends
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ ccc | ddd
+Recommended packages:
+ aaa | bbb
+The following NEW packages will be installed:
+ versionedor
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst versionedor (1 unstable [all])
+Conf versionedor (1 unstable [all])' aptget install versionedor -s --no-install-recommends
+
+SHOWSUGGEST='Reading package lists...
+Building dependency tree...
+Suggested packages:
+ zzz
+Recommended packages:
+ xxx
+The following NEW packages will be installed:
+ orgroup4
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup4 (1 unstable [all])
+Conf orgroup4 (1 unstable [all])'
+INSTSUGGEST='Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ zzz
+Recommended packages:
+ xxx
+The following NEW packages will be installed:
+ orgroup4 zzz
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst orgroup4 (1 unstable [all])
+Inst zzz (1:1 unstable [all])
+Conf orgroup4 (1 unstable [all])
+Conf zzz (1:1 unstable [all])'
+testsuccessequal "$SHOWSUGGEST" aptget install orgroup4 -s
+testsuccessequal "$INSTSUGGEST" aptget install orgroup4 --install-suggests -s
+echo 'Binary::apt-get::APT::Install-Suggests "true";' > rootdir/etc/apt/apt.conf.d/99binaryspecific.conf
+testsuccessequal "$INSTSUGGEST" aptget install orgroup4 -s
+testsuccessequal "$SHOWSUGGEST" apt install orgroup4 -s
+testsuccessequal "$SHOWSUGGEST" aptget install orgroup4 -s --no-install-suggests
diff --git a/test/integration/test-apt-source-and-build-dep b/test/integration/test-apt-source-and-build-dep
new file mode 100755
index 0000000..24790a5
--- /dev/null
+++ b/test/integration/test-apt-source-and-build-dep
@@ -0,0 +1,250 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+# we need to insert a package into "unstable" so that a Release file is
+# create for the test
+insertpackage 'wheezy' 'build-essential' 'all' '1.0'
+
+# a "normal" package with source and binary
+insertpackage 'unstable' 'foo' 'all' '2.0'
+insertsource 'unstable' 'foo' 'all' '2.0'
+insertpackage 'unstable' 'foo-common' 'all' '2.0' 'Source: foo (2.0)'
+insertpackage 'experimental' 'foo' 'all' '5' 'Depends: foo-common (= 5)'
+insertpackage 'experimental' 'foo-common' 'all' '5' 'Source: foo (5)'
+insertsource 'experimental' 'foo-source' 'all' '42' 'Build-Depends: foo (= 5), baz'
+
+# binary packages with Source-field
+insertpackage 'unstable,testing' 'bin' 'i386' '3-2+b1' 'Source: bin (3-2)'
+insertsource 'unstable,testing' 'bin' 'any' '3-2'
+insertpackage 'stable' 'bin' 'i386' '2-2+b1' 'Source: bin-backport (2-2)'
+insertsource 'stable' 'bin-backport' 'any' '2-2'
+
+# its possible to have multiple src versions in the sources file, ensure
+# to pick the correct one in this case (bts #731853)
+insertsource 'stable' 'foo' 'all' '1.5'
+insertsource 'stable' 'foo' 'all' '0.5'
+insertpackage 'stable' 'foo' 'all' '1.0'
+insertsource 'stable' 'foo' 'all' '1.0'
+
+# these packages exists only as sources, add two versions to ensure that
+# apt will pick the higher version number (bts #731853)
+insertsource 'wheezy' 'foo' 'all' '0.0.1'
+insertsource 'wheezy' 'foo' 'all' '0.1'
+
+# the order of these versions is chosen to ensure that
+# * apt will pick the one in the correct release, despite a higher version coming later and
+# * apt will pick the highest version in a release, despite a lower version coming later.
+# (bts #746412)
+insertsource 'stable' 'baz' 'all' '1.0'
+insertsource 'unstable' 'baz' 'all' '2.0'
+insertsource 'unstable' 'baz' 'all' '1.5'
+insertpackage 'unstable' 'baz' 'all' '2.0'
+insertpackage 'experimental' 'baz' 'all' '5.0'
+
+# ensure we really have the situation we wanted (first 2.0 is foo above)
+testequal 'Version: 2.0
+Version: 3-2
+Version: 2.0
+Version: 1.5' grep '^Version:' aptarchive/dists/unstable/main/source/Sources
+
+insertsource 'stable' 'bar' 'any' '1.1' 'Vcs-Browser: https://anonscm.debian.org/cgit/bar/bar.git
+Vcs-Git: git://anonscm.debian.org/bar/bar.git -b debian/experimental'
+
+setupaptarchive
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+# normal operation gets highest version number
+HEADER='Reading package lists...'
+DOWNLOAD1="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_1.0.dsc' foo_1.0.dsc 11 SHA256:ed7c25c832596339bee13e4e7c45cf49f869b60d2bf57252f18191d75866c2a7
+'file://${APTARCHIVE}/foo_1.0.tar.gz' foo_1.0.tar.gz 14 SHA256:f3da8c6ebc62c8ef2dae439a498dddcdacc1a07f45ff67ad12f44b6e2353c239"
+DOWNLOAD2="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_2.0.dsc' foo_2.0.dsc 11 SHA256:0fcb803ffbeef26db884625aaf06e75f3eda5c994634980e7c20fd37ed1fc104
+'file://${APTARCHIVE}/foo_2.0.tar.gz' foo_2.0.tar.gz 14 SHA256:ca9b0b828ca22372502af2b80f61f0bd9063910ece9fc34eeaf9d9e31aa8195a"
+DOWNLOAD3="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/baz_1.0.dsc' baz_1.0.dsc 11 SHA256:322245f56092b466801dda62d79c8687bba9724af6d16d450d655d29e41d3d7b
+'file://${APTARCHIVE}/baz_1.0.tar.gz' baz_1.0.tar.gz 14 SHA256:0870bc73164ff5ba1f52153fdcb48e140137f9c7c122d57592cea136a57f73c0"
+DOWNLOAD4="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/baz_2.0.dsc' baz_2.0.dsc 11 SHA256:47d062d29070b3f592d1c8aed8c1e7913804bbb67ca1d64877c8219dac5e0420
+'file://${APTARCHIVE}/baz_2.0.tar.gz' baz_2.0.tar.gz 14 SHA256:11c1b202c94a64ab6433d9f0ed5515fce1dc7b20e6bcf51cec9ef8b9455f5a41"
+testsuccessequal "$HEADER
+$DOWNLOAD2" apt source -q --print-uris foo
+testsuccessequal "$HEADER
+$DOWNLOAD2" apt source -q --print-uris foo foo
+getbuilddep() {
+ echo 'Reading package lists...'
+ if [ -n "$2" ]; then
+ echo "$2"
+ fi
+ echo "${1} has no build depends.
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-essential
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst build-essential (1.0 wheezy [all])
+Conf build-essential (1.0 wheezy [all])"
+}
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo -s
+
+# select by release: suite
+testsuccessequal "$HEADER
+Selected version '1.0' (stable) for foo
+$DOWNLOAD1" apt source -q --print-uris foo/stable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '1.0' (stable) for foo")" apt build-dep foo/stable -s
+testsuccessequal "$HEADER
+Selected version '2.0' (unstable) for foo
+$DOWNLOAD2" apt source -q --print-uris foo/unstable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (unstable) for foo")" apt build-dep foo/unstable -s
+testsuccessequal "$HEADER
+Selected version '1.0' (stable) for foo
+$DOWNLOAD1" apt source -q --print-uris foo -t stable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '1.0' (stable) for foo")" apt build-dep foo -t stable -s
+testsuccessequal "$HEADER
+Selected version '2.0' (unstable) for foo
+$DOWNLOAD2" apt source -q --print-uris foo -t unstable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (unstable) for foo")" apt build-dep foo -t unstable -s
+testsuccessequal "$HEADER
+Selected version '1.0' (stable) for baz
+$DOWNLOAD3" apt source -q --print-uris baz -t stable
+testsuccessequal "$(getbuilddep 'baz' "Selected version '1.0' (stable) for baz")" apt build-dep baz -t stable -s
+
+# select by release: codename
+testsuccessequal "$HEADER
+Selected version '2.0' (sid) for foo
+$DOWNLOAD2" apt source -q --print-uris foo/sid
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (sid) for foo")" apt build-dep foo/sid -s
+testsuccessequal "$HEADER
+Selected version '2.0' (sid) for foo
+$DOWNLOAD2" apt source -q --print-uris foo -t sid
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (sid) for foo")" apt build-dep foo -t sid -s
+testsuccessequal "$HEADER
+Selected version '2.0' (sid) for baz
+$DOWNLOAD4" apt source -q --print-uris baz -t sid
+testsuccessequal "$(getbuilddep 'baz' "Selected version '2.0' (sid) for baz")" apt build-dep baz -t sid -s
+
+# select by version
+testsuccessequal "$HEADER
+$DOWNLOAD1" apt source -q --print-uris foo=1.0
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo=1.0 -s
+
+# select by release with no binary package (Bug#731102) but ensure to get
+# highest version
+DOWNLOAD01="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_0.1.dsc' foo_0.1.dsc 11 SHA256:72af24b0290fe1d13a3e25fddd2633e43c87ff79d249bc850009e47bcce73565
+'file://${APTARCHIVE}/foo_0.1.tar.gz' foo_0.1.tar.gz 14 SHA256:ec748ad88a71f98bfdc012e1a7632377d05fe3ebbf9c0922e0691fe4d79c0585"
+testsuccessequal "$HEADER
+Selected version '0.1' (wheezy) for foo
+$DOWNLOAD01" apt source -q --print-uris foo/wheezy
+testsuccessequal "$(getbuilddep 'foo' "Selected version '0.1' (wheezy) for foo")" apt build-dep foo/wheezy -s
+
+# unavailable one
+testfailureequal "$HEADER
+E: Can not find version '9.9-not-there' of package 'foo'
+E: Unable to find a source package for foo" apt source -q --print-uris foo=9.9-not-there
+testfailureequal "Reading package lists...
+E: Can not find version '9.9-not-there' of package 'foo'
+E: Unable to find a source package for foo=9.9-not-there" apt build-dep -s foo=9.9-not-there
+
+# version and release
+DOWNLOAD001="Need to get 0 B/29 B of source archives.
+'file://${APTARCHIVE}/foo_0.0.1.dsc' foo_0.0.1.dsc 13 SHA256:649dfe03bbb70cebdfe7c6bf9036f9f2472510b8f52e823bdf5ade362ebaa76f
+'file://${APTARCHIVE}/foo_0.0.1.tar.gz' foo_0.0.1.tar.gz 16 SHA256:ab7ba789d178362ecc808e49705e2338988a7f5b9410ec11a6c9555c017de907"
+testsuccessequal "$HEADER
+$DOWNLOAD001" apt source -q --print-uris -t unstable foo=0.0.1
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo=0.0.1 -s
+
+testsuccessequal "$HEADER
+Need to get 0 B/25 B of source archives.
+Fetch source foo" apt source -q -s foo
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo -s
+
+testfailureequal 'E: Must specify at least one package to fetch source for' apt source
+testfailureequal 'E: Must specify at least one package to check builddeps for' apt build-dep
+
+testsuccessequal "Reading package lists...
+NOTICE: 'bar' packaging is maintained in the 'Git' version control system at:
+git://anonscm.debian.org/bar/bar.git -b debian/experimental
+Please use:
+git clone git://anonscm.debian.org/bar/bar.git -b debian/experimental
+to retrieve the latest (possibly unreleased) updates to the package.
+Need to get 0 B/25 B of source archives.
+Fetch source bar" apt source bar -s
+testsuccessequal "$(getbuilddep 'bar')" apt build-dep bar -s
+
+testsuccessequal "$HEADER
+Need to get 0 B/25 B of source archives.
+Fetch source bin" apt source bin -s -q
+testsuccessequal "$(getbuilddep 'bin')" apt build-dep bin -s
+testsuccessequal "$HEADER
+Selected version '3-2' (unstable) for bin
+Need to get 0 B/25 B of source archives.
+Fetch source bin" apt source bin/unstable -s -q
+testsuccessequal "$(getbuilddep 'bin' "Selected version '3-2' (unstable) for bin")" apt build-dep bin/unstable -s
+testsuccessequal "$HEADER
+Picking 'bin-backport' as source package instead of 'bin'
+Selected version '2-2' (stable) for bin-backport
+Need to get 0 B/43 B of source archives.
+Fetch source bin-backport" apt source bin/stable -s -q
+testsuccessequal "$(getbuilddep 'bin-backport' "Picking 'bin-backport' as source package instead of 'bin'
+Selected version '2-2' (stable) for bin-backport")" apt build-dep bin/stable -s
+
+testsuccess apt install foo/experimental -s
+testfailure apt build-dep foo-source -s
+testsuccessequal "Reading package lists...
+Selected version '42' (experimental) for foo-source
+Reading package lists...
+Building dependency tree...
+Selected version '5' (experimental [all]) for 'foo' because of 'src:foo-source'
+Selected version '5' (experimental [all]) for 'foo-common' because of 'foo'
+The following NEW packages will be installed:
+ baz build-essential foo foo-common
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Inst baz (2.0 unstable [all])
+Inst build-essential (1.0 wheezy [all])
+Inst foo-common (5 experimental [all])
+Inst foo (5 experimental [all])
+Conf baz (2.0 unstable [all])
+Conf build-essential (1.0 wheezy [all])
+Conf foo-common (5 experimental [all])
+Conf foo (5 experimental [all])" apt build-dep foo-source/experimental -s
+testsuccessequal "Reading package lists...
+Selected version '42' (experimental) for foo-source
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ baz build-essential foo foo-common
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Inst baz (5.0 experimental [all])
+Inst build-essential (1.0 wheezy [all])
+Inst foo-common (5 experimental [all])
+Inst foo (5 experimental [all])
+Conf baz (5.0 experimental [all])
+Conf build-essential (1.0 wheezy [all])
+Conf foo-common (5 experimental [all])
+Conf foo (5 experimental [all])" apt build-dep foo-source -t experimental -s
+# this checks that mentioning the source pkg baz has no influence on the binary package baz
+testsuccessequal "Reading package lists...
+Selected version '42' (experimental) for foo-source
+Selected version '2.0' (unstable) for baz
+baz has no build depends.
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ baz build-essential foo foo-common
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Inst baz (5.0 experimental [all])
+Inst build-essential (1.0 wheezy [all])
+Inst foo-common (5 experimental [all])
+Inst foo (5 experimental [all])
+Conf baz (5.0 experimental [all])
+Conf build-essential (1.0 wheezy [all])
+Conf foo-common (5 experimental [all])
+Conf foo (5 experimental [all])" apt build-dep foo-source baz/unstable -t experimental -s
diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822
new file mode 100755
index 0000000..8ffe0ab
--- /dev/null
+++ b/test/integration/test-apt-sources-deb822
@@ -0,0 +1,361 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+LISTS='rootdir/etc/apt/sources.list.d/test.list'
+ABSLISTS="$(readlink -f $LISTS)"
+SOURCES='rootdir/etc/apt/sources.list.d/test.sources'
+BASE='# some comment
+# that contains a : as well
+#Types: meep
+
+# a free-standing comment appears
+
+Types: deb
+#Types: deb-src
+URIs: http://ftp.debian.org/debian
+Suites: stable
+Components: main
+Description: summary
+# comments are ignored
+ and the long part'
+
+msgcleantest() {
+ rm -f $LISTS $SOURCES
+ msgtest "$@"
+}
+
+msgcleantest 'Test sources.list' 'old style'
+echo "deb http://ftp.debian.org/debian stable main" > $LISTS
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style with tabs'
+echo "deb http://ftp.debian.org/debian stable main" > $LISTS
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style with forgotten end for options'
+echo "deb [trusted=yes arch+=armel,powerpc http://ftp.debian.org/debian stable main" > $LISTS
+testfailureequal --nomsg "E: Malformed entry 1 in list file $ABSLISTS ([option] not assignment)
+E: The list of sources could not be read." aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style with stray ] instead of options'
+echo "deb ] http://ftp.debian.org/debian stable main" > $LISTS
+testfailureequal --nomsg "E: Malformed entry 1 in list file $ABSLISTS (URI parse)
+E: The list of sources could not be read." aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style options no key'
+echo "deb [=test] http://ftp.debian.org/debian stable main" > $LISTS
+testfailureequal --nomsg "E: Malformed entry 1 in list file $ABSLISTS ([option] no key)
+E: The list of sources could not be read." aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style options no value'
+echo "deb [test=] http://ftp.debian.org/debian stable main" > $LISTS
+testfailureequal --nomsg "E: Malformed entry 1 in list file $ABSLISTS ([option] no value)
+E: The list of sources could not be read." aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style with options'
+echo "deb [trusted=yes arch+=armel,powerpc] http://ftp.debian.org/debian stable main" > $LISTS
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-powerpc/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style with comments'
+echo "deb http://ftp.debian.org/debian stable main # non-free" > $LISTS
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'old style with option comments'
+echo "deb [trusted=yes#yeahreally] http://ftp.debian.org/debian stable main # non-free" > $LISTS
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test sources.list' 'simple deb822'
+echo "$BASE" > $SOURCES
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test deb822 with' 'two entries'
+# Two entries
+echo "$BASE" > $SOURCES
+echo "" >> $SOURCES
+echo "$BASE" | sed s/stable/unstable/ >> $SOURCES
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/unstable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_unstable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+# two suite entries
+msgcleantest 'Test deb822 with' 'two Suite entries'
+echo "$BASE" | sed -e "s/stable/stable unstable/" > $SOURCES
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/unstable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_unstable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test deb822' 'architecture option'
+echo "$BASE" > $SOURCES
+echo "Architectures: amd64 armel" >> $SOURCES
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+msgcleantest 'Test old-style' 'suite arch variable'
+echo 'deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/' > $LISTS
+testsuccessequal --nomsg "'http://ftp.tlh.debian.org/universe/unstable/binary-i386/InRelease' ftp.tlh.debian.org_universe_unstable_binary-i386_InRelease 0
+'http://ftp.tlh.debian.org/universe/unstable/binary-i386/Packages.xz' ftp.tlh.debian.org_universe_unstable_binary-i386_Packages 0
+'http://ftp.tlh.debian.org/universe/unstable/binary-i386/en.xz' ftp.tlh.debian.org_universe_unstable_binary-i386_en 0 " aptget update --print-uris
+
+msgcleantest 'Test deb822' 'suite arch variable'
+echo 'Types: deb
+URIs: http://ftp.tlh.debian.org/universe
+Suites: stable/binary-$(ARCH)/' > $SOURCES
+testsuccessequal --nomsg "'http://ftp.tlh.debian.org/universe/stable/binary-i386/InRelease' ftp.tlh.debian.org_universe_stable_binary-i386_InRelease 0
+'http://ftp.tlh.debian.org/universe/stable/binary-i386/Packages.xz' ftp.tlh.debian.org_universe_stable_binary-i386_Packages 0
+'http://ftp.tlh.debian.org/universe/stable/binary-i386/en.xz' ftp.tlh.debian.org_universe_stable_binary-i386_en 0 " aptget update --print-uris
+
+msgcleantest 'Test old-style sources.list file which has' 'malformed dist'
+echo "deb http://ftp.debian.org" > $LISTS
+testfailureequal --nomsg "E: Malformed entry 1 in list file $TMPWORKINGDIRECTORY/$LISTS (Suite)
+E: The list of sources could not be read." aptget update --print-uris
+
+msgcleantest 'Test deb822 sources.list file which has' 'malformed URI'
+echo "Types: deb
+Suites: stable
+" > $SOURCES
+testfailureequal --nomsg "E: Malformed entry 1 in sources file $TMPWORKINGDIRECTORY/$SOURCES (URI)
+E: The list of sources could not be read." aptget update --print-uris
+
+# with Enabled: false
+echo "$BASE" > $SOURCES
+echo "Enabled: no" >> $SOURCES
+testempty aptget update --print-uris
+
+# multiple URIs
+msgcleantest 'Test deb822 sources.list file which has' 'Multiple URIs work'
+echo "$BASE" | sed -e 's#http://ftp.debian.org/debian#http://ftp.debian.org/debian http://ftp.de.debian.org/debian#' > $SOURCES
+testsuccessequal --nomsg "'http://ftp.de.debian.org/debian/dists/stable/InRelease' ftp.de.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.de.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.de.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.de.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.de.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.de.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.de.debian.org_debian_dists_stable_main_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+# multiple Type in one field
+msgcleantest 'Test deb822 sources.list file which has' 'Multiple Types work'
+echo "$BASE" | sed -e 's#Types: deb#Types: deb deb-src#' > $SOURCES
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/source/Sources.xz' ftp.debian.org_debian_dists_stable_main_source_Sources 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 " aptget update --print-uris
+
+# a Suite
+msgcleantest 'Test deb822 sources.list file which has' 'an exact path and no sections'
+cat > $SOURCES <<EOF
+Types: deb
+URIs: http://emacs.naquadah.org
+Suites: stable/
+EOF
+testsuccessequal --nomsg "'http://emacs.naquadah.org/stable/InRelease' emacs.naquadah.org_stable_InRelease 0
+'http://emacs.naquadah.org/stable/Packages.xz' emacs.naquadah.org_stable_Packages 0
+'http://emacs.naquadah.org/stable/en.xz' emacs.naquadah.org_stable_en 0 " aptget update --print-uris
+
+# multivalue -Add/-Remove
+msgcleantest 'Test deb822 sources.list file which has' '-Add/-Remove multivalues'
+echo "$BASE" > $SOURCES
+echo "Languages-Remove: en" >> $SOURCES
+echo "Architectures-Add: armel" >> $SOURCES
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0 " aptget update --print-uris
+
+msgcleantest 'Test deb822 sources with' 'multiline multivalues'
+cat > "$SOURCES" <<EOF
+Types: deb
+ deb-src
+URIs:
+ http://ftp.debian.org/debian
+ http://ftp.debian.org/debian2
+Suites: stable
+ sid
+Components:
+ main
+ contrib non-free
+Architectures: amd64
+ armhf powerpc
+EOF
+testsuccessequal --nomsg "'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
+'http://ftp.debian.org/debian/dists/sid/InRelease' ftp.debian.org_debian_dists_sid_InRelease 0
+'http://ftp.debian.org/debian2/dists/stable/InRelease' ftp.debian.org_debian2_dists_stable_InRelease 0
+'http://ftp.debian.org/debian2/dists/sid/InRelease' ftp.debian.org_debian2_dists_sid_InRelease 0
+'http://ftp.debian.org/debian/dists/stable/main/source/Sources.xz' ftp.debian.org_debian_dists_stable_main_source_Sources 0
+'http://ftp.debian.org/debian/dists/stable/contrib/source/Sources.xz' ftp.debian.org_debian_dists_stable_contrib_source_Sources 0
+'http://ftp.debian.org/debian/dists/stable/non-free/source/Sources.xz' ftp.debian.org_debian_dists_stable_non-free_source_Sources 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-armhf/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-armhf_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-powerpc/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/stable/contrib/binary-amd64/Packages.xz' ftp.debian.org_debian_dists_stable_contrib_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/stable/contrib/binary-armhf/Packages.xz' ftp.debian.org_debian_dists_stable_contrib_binary-armhf_Packages 0
+'http://ftp.debian.org/debian/dists/stable/contrib/binary-powerpc/Packages.xz' ftp.debian.org_debian_dists_stable_contrib_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian/dists/stable/contrib/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_contrib_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/contrib/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_contrib_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/stable/non-free/binary-amd64/Packages.xz' ftp.debian.org_debian_dists_stable_non-free_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/stable/non-free/binary-armhf/Packages.xz' ftp.debian.org_debian_dists_stable_non-free_binary-armhf_Packages 0
+'http://ftp.debian.org/debian/dists/stable/non-free/binary-powerpc/Packages.xz' ftp.debian.org_debian_dists_stable_non-free_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian/dists/stable/non-free/binary-all/Packages.xz' ftp.debian.org_debian_dists_stable_non-free_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/stable/non-free/i18n/Translation-en.xz' ftp.debian.org_debian_dists_stable_non-free_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/sid/main/source/Sources.xz' ftp.debian.org_debian_dists_sid_main_source_Sources 0
+'http://ftp.debian.org/debian/dists/sid/contrib/source/Sources.xz' ftp.debian.org_debian_dists_sid_contrib_source_Sources 0
+'http://ftp.debian.org/debian/dists/sid/non-free/source/Sources.xz' ftp.debian.org_debian_dists_sid_non-free_source_Sources 0
+'http://ftp.debian.org/debian/dists/sid/main/binary-amd64/Packages.xz' ftp.debian.org_debian_dists_sid_main_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/sid/main/binary-armhf/Packages.xz' ftp.debian.org_debian_dists_sid_main_binary-armhf_Packages 0
+'http://ftp.debian.org/debian/dists/sid/main/binary-powerpc/Packages.xz' ftp.debian.org_debian_dists_sid_main_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian/dists/sid/main/binary-all/Packages.xz' ftp.debian.org_debian_dists_sid_main_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/sid/main/i18n/Translation-en.xz' ftp.debian.org_debian_dists_sid_main_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/sid/contrib/binary-amd64/Packages.xz' ftp.debian.org_debian_dists_sid_contrib_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/sid/contrib/binary-armhf/Packages.xz' ftp.debian.org_debian_dists_sid_contrib_binary-armhf_Packages 0
+'http://ftp.debian.org/debian/dists/sid/contrib/binary-powerpc/Packages.xz' ftp.debian.org_debian_dists_sid_contrib_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian/dists/sid/contrib/binary-all/Packages.xz' ftp.debian.org_debian_dists_sid_contrib_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/sid/contrib/i18n/Translation-en.xz' ftp.debian.org_debian_dists_sid_contrib_i18n_Translation-en 0
+'http://ftp.debian.org/debian/dists/sid/non-free/binary-amd64/Packages.xz' ftp.debian.org_debian_dists_sid_non-free_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/sid/non-free/binary-armhf/Packages.xz' ftp.debian.org_debian_dists_sid_non-free_binary-armhf_Packages 0
+'http://ftp.debian.org/debian/dists/sid/non-free/binary-powerpc/Packages.xz' ftp.debian.org_debian_dists_sid_non-free_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian/dists/sid/non-free/binary-all/Packages.xz' ftp.debian.org_debian_dists_sid_non-free_binary-all_Packages 0
+'http://ftp.debian.org/debian/dists/sid/non-free/i18n/Translation-en.xz' ftp.debian.org_debian_dists_sid_non-free_i18n_Translation-en 0
+'http://ftp.debian.org/debian2/dists/stable/main/source/Sources.xz' ftp.debian.org_debian2_dists_stable_main_source_Sources 0
+'http://ftp.debian.org/debian2/dists/stable/contrib/source/Sources.xz' ftp.debian.org_debian2_dists_stable_contrib_source_Sources 0
+'http://ftp.debian.org/debian2/dists/stable/non-free/source/Sources.xz' ftp.debian.org_debian2_dists_stable_non-free_source_Sources 0
+'http://ftp.debian.org/debian2/dists/stable/main/binary-amd64/Packages.xz' ftp.debian.org_debian2_dists_stable_main_binary-amd64_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/main/binary-armhf/Packages.xz' ftp.debian.org_debian2_dists_stable_main_binary-armhf_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/main/binary-powerpc/Packages.xz' ftp.debian.org_debian2_dists_stable_main_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/main/binary-all/Packages.xz' ftp.debian.org_debian2_dists_stable_main_binary-all_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/main/i18n/Translation-en.xz' ftp.debian.org_debian2_dists_stable_main_i18n_Translation-en 0
+'http://ftp.debian.org/debian2/dists/stable/contrib/binary-amd64/Packages.xz' ftp.debian.org_debian2_dists_stable_contrib_binary-amd64_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/contrib/binary-armhf/Packages.xz' ftp.debian.org_debian2_dists_stable_contrib_binary-armhf_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/contrib/binary-powerpc/Packages.xz' ftp.debian.org_debian2_dists_stable_contrib_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/contrib/binary-all/Packages.xz' ftp.debian.org_debian2_dists_stable_contrib_binary-all_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/contrib/i18n/Translation-en.xz' ftp.debian.org_debian2_dists_stable_contrib_i18n_Translation-en 0
+'http://ftp.debian.org/debian2/dists/stable/non-free/binary-amd64/Packages.xz' ftp.debian.org_debian2_dists_stable_non-free_binary-amd64_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/non-free/binary-armhf/Packages.xz' ftp.debian.org_debian2_dists_stable_non-free_binary-armhf_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/non-free/binary-powerpc/Packages.xz' ftp.debian.org_debian2_dists_stable_non-free_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/non-free/binary-all/Packages.xz' ftp.debian.org_debian2_dists_stable_non-free_binary-all_Packages 0
+'http://ftp.debian.org/debian2/dists/stable/non-free/i18n/Translation-en.xz' ftp.debian.org_debian2_dists_stable_non-free_i18n_Translation-en 0
+'http://ftp.debian.org/debian2/dists/sid/main/source/Sources.xz' ftp.debian.org_debian2_dists_sid_main_source_Sources 0
+'http://ftp.debian.org/debian2/dists/sid/contrib/source/Sources.xz' ftp.debian.org_debian2_dists_sid_contrib_source_Sources 0
+'http://ftp.debian.org/debian2/dists/sid/non-free/source/Sources.xz' ftp.debian.org_debian2_dists_sid_non-free_source_Sources 0
+'http://ftp.debian.org/debian2/dists/sid/main/binary-amd64/Packages.xz' ftp.debian.org_debian2_dists_sid_main_binary-amd64_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/main/binary-armhf/Packages.xz' ftp.debian.org_debian2_dists_sid_main_binary-armhf_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/main/binary-powerpc/Packages.xz' ftp.debian.org_debian2_dists_sid_main_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/main/binary-all/Packages.xz' ftp.debian.org_debian2_dists_sid_main_binary-all_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/main/i18n/Translation-en.xz' ftp.debian.org_debian2_dists_sid_main_i18n_Translation-en 0
+'http://ftp.debian.org/debian2/dists/sid/contrib/binary-amd64/Packages.xz' ftp.debian.org_debian2_dists_sid_contrib_binary-amd64_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/contrib/binary-armhf/Packages.xz' ftp.debian.org_debian2_dists_sid_contrib_binary-armhf_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/contrib/binary-powerpc/Packages.xz' ftp.debian.org_debian2_dists_sid_contrib_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/contrib/binary-all/Packages.xz' ftp.debian.org_debian2_dists_sid_contrib_binary-all_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/contrib/i18n/Translation-en.xz' ftp.debian.org_debian2_dists_sid_contrib_i18n_Translation-en 0
+'http://ftp.debian.org/debian2/dists/sid/non-free/binary-amd64/Packages.xz' ftp.debian.org_debian2_dists_sid_non-free_binary-amd64_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/non-free/binary-armhf/Packages.xz' ftp.debian.org_debian2_dists_sid_non-free_binary-armhf_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/non-free/binary-powerpc/Packages.xz' ftp.debian.org_debian2_dists_sid_non-free_binary-powerpc_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/non-free/binary-all/Packages.xz' ftp.debian.org_debian2_dists_sid_non-free_binary-all_Packages 0
+'http://ftp.debian.org/debian2/dists/sid/non-free/i18n/Translation-en.xz' ftp.debian.org_debian2_dists_sid_non-free_i18n_Translation-en 0 " aptget update --print-uris
+
+EXPECTEDUK="'http://ftp.uk.debian.org/debian/dists/stretch/InRelease' ftp.uk.debian.org_debian_dists_stretch_InRelease 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/source/Sources.xz' ftp.uk.debian.org_debian_dists_stretch_main_source_Sources 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/source/Sources.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_source_Sources 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/source/Sources.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_source_Sources 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/binary-i386/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_main_binary-i386_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/binary-all/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_main_binary-all_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/main/i18n/Translation-en.xz' ftp.uk.debian.org_debian_dists_stretch_main_i18n_Translation-en 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/binary-i386/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_binary-i386_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/binary-all/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_binary-all_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/contrib/i18n/Translation-en.xz' ftp.uk.debian.org_debian_dists_stretch_contrib_i18n_Translation-en 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/binary-i386/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_binary-i386_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/binary-all/Packages.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_binary-all_Packages 0
+'http://ftp.uk.debian.org/debian/dists/stretch/non-free/i18n/Translation-en.xz' ftp.uk.debian.org_debian_dists_stretch_non-free_i18n_Translation-en 0 "
+
+msgcleantest 'Test deb822 sources.list file comments' 'top'
+cat > $SOURCES <<EOF
+#NOTE: Most preferred source listed first!
+
+
+#=== NEW MULTI-LINE FORMAT ===============
+Types: deb deb-src
+URIs:http://ftp.uk.debian.org/debian/
+Suites: stretch
+Components: main contrib non-free
+EOF
+testsuccessequal --nomsg "$EXPECTEDUK" aptget update --print-uris
+
+msgcleantest 'Test deb822 sources.list file comments' 'bottom'
+cat > $SOURCES <<EOF
+Types: deb deb-src
+URIs:http://ftp.uk.debian.org/debian/
+Suites: stretch
+Components: main contrib non-free
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+#NOTE: Most preferred source listed first!
+EOF
+testsuccessequal --nomsg "$EXPECTEDUK" aptget update --print-uris
+
+msgcleantest 'Test deb822 sources.list file comments' 'both'
+cat > $SOURCES <<EOF
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+#NOTE: Most preferred source listed first!
+Types: deb deb-src
+URIs:http://ftp.uk.debian.org/debian/
+Suites: stretch
+Components: main contrib non-free
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+#NOTE: Most preferred source listed first!
+EOF
+testsuccessequal --nomsg "$EXPECTEDUK" aptget update --print-uris
+
+
+msgcleantest 'Test deb822 sources.list file comments' 'empty'
+cat > $SOURCES <<EOF
+#=== NEW MULTI-LINE FORMAT ===============
+
+
+EOF
+testempty aptget update --print-uris
diff --git a/test/integration/test-apt-tagfile-fields-order b/test/integration/test-apt-tagfile-fields-order
new file mode 100755
index 0000000..4af58aa
--- /dev/null
+++ b/test/integration/test-apt-tagfile-fields-order
@@ -0,0 +1,82 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+
+dpkg_field_ordered_list() {
+ local FIELDS="$(perl -e "
+use Dpkg::Control;
+use Dpkg::Control::Fields;
+foreach \$f (field_ordered_list(${1})) {
+ print \"\$f\\n\";
+}" | sort -u)"
+ if [ -z "$FIELDS" ]; then
+ msgfail 'Could not get fields via libdpkg-perl'
+ fi
+ echo "$FIELDS"
+}
+
+comparelsts() {
+ local DIFFOUTPUT="$(diff -u apt.lst dpkg.lst || true)"
+ if echo "$DIFFOUTPUT" | grep -q '^+[^+]'; then
+ echo
+ echo "$DIFFOUTPUT" | grep '^[+-][^+-]'
+ msgfail
+ else
+ msgpass
+ fi
+}
+
+msgtest 'Check that apt knows all fields dpkg orders in' 'Packages'
+dpkg_field_ordered_list 'CTRL_INDEX_PKG' > dpkg.lst
+sed -ne 's#^ "\(.*\)",.*$#\1#p' "${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c" | sed -n '/^Package$/,/^Package$/ p' | head -n -1 | sort -u > apt.lst
+comparelsts
+
+msgtest 'Check that apt knows all fields dpkg orders in' 'status'
+dpkg_field_ordered_list 'CTRL_FILE_STATUS' > dpkg.lst
+comparelsts
+
+msgtest 'Check that apt knows all fields dpkg orders in' 'DEBIAN/control'
+dpkg_field_ordered_list 'CTRL_PKG_DEB' > dpkg.lst
+comparelsts
+
+msgtest 'Check that apt knows all fields dpkg orders in' 'Sources'
+dpkg_field_ordered_list 'CTRL_INDEX_SRC' > dpkg.lst
+echo 'Package' > apt.tmp
+sed -ne 's#^ "\(.*\)",.*$#\1#p' "${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c" | sed '/^Package$/,/^Package$/ d' >> apt.tmp
+sort -u apt.tmp > apt.lst
+comparelsts
+
+msgtest 'Check that apt knows all fields dpkg orders in' 'dsc'
+dpkg_field_ordered_list 'CTRL_PKG_SRC' > dpkg.lst
+comparelsts
+
+# HACK, but there is no good way to acquire sources in tests and/or to remember to run this regular manually
+if [ "$USER" = 'david' ]; then
+ msgtest 'Check if we have somewhere the sources of' 'dpkg'
+ DPKGSOURCE="$(locate dpkg/lib/dpkg/parse.c | head -n 1 || true)"
+ if [ -z "$DPKGSOURCE" ]; then
+ msgskip 'Not found'
+ else
+ msgpass
+ msgtest 'Check that apt knows about all fields' 'dpkg parses'
+ sed -n 's#^.*FIELD("\(.*\)").*$#\1#p' "${DPKGSOURCE}" | sort -u > dpkg.lst
+ sed -ne 's#^ "\(.*\)",.*$#\1#p' "${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c" | sed -n '/^Package$/,/^Package$/ p' | head -n -1 | sort -u > apt.lst
+ comparelsts
+ fi
+
+ msgtest 'Check if we have somewhere the sources of' 'dak'
+ DAKSOURCE="$(locate dak/setup/core-init.d/080_metadatakeys | head -n 1 || true)"
+ if [ -z "$DAKSOURCE" ]; then
+ msgskip 'Not found'
+ else
+ msgpass
+ msgtest 'Check that apt knows about all fields' 'dak knows'
+ # dak mixes both, so we can only check with the mixed one as well
+ sed -ne "s#^.* VALUES ('\(.*\)', \(.*\)).*\$#\1 \2#p" "${DAKSOURCE}" | cut -d ' ' -f 1 | sort -u > dpkg.lst
+ sed -ne 's#^ "\(.*\)",.*$#\1#p' "${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c" | sort -u > apt.lst
+ comparelsts
+ fi
+fi
diff --git a/test/integration/test-apt-translation-has-no-packages b/test/integration/test-apt-translation-has-no-packages
new file mode 100755
index 0000000..3c07af3
--- /dev/null
+++ b/test/integration/test-apt-translation-has-no-packages
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# Due to corruption (local or network) a user might end up with a
+# Translation-$lang file on disk that is actually a Packages file. In this
+# case apt used to generate invalid package versions out of the
+# Translation-$lang file (i.e. apt-cache policy foo) would show a version
+# coming out of a Translation file. Downloading this versions fails as
+# there is no acquire method available for the package
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "amd64"
+
+buildsimplenativepackage 'foo' 'all' '1.0'
+setupaptarchive
+
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+# corrupt the Translation-en file to look like a regular Packages file
+rm rootdir/var/cache/apt/*.bin
+cp "$APTARCHIVE/dists/unstable/main/binary-amd64/Packages" \
+ rootdir/var/lib/apt/lists/*Translation-en
+
+# ensure that there is no Version for the package foo generated out of
+# the corrupted Translation-en file
+testsuccessequal "foo:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 file:$APTARCHIVE unstable/main all Packages" aptcache policy foo
diff --git a/test/integration/test-apt-update-disappeared-component b/test/integration/test-apt-update-disappeared-component
new file mode 100755
index 0000000..7c7dd77
--- /dev/null
+++ b/test/integration/test-apt-update-disappeared-component
@@ -0,0 +1,45 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'foobar' 'all' '1'
+
+APTARCHIVE="file:$(readlink -f ./aptarchive) unstable InRelease"
+setupaptarchive --no-update
+sed -i -e 's#main\s*$#main contrib non-free sub/component#' rootdir/etc/apt/sources.list.d/*
+
+# if no Component info is available we assume all are supported, which means
+# that non-existent Packages files are assumed to be missing because they are
+# empty (as the repository is declaring support for them via Architectures)
+testwarningmsg "W: Skipping acquire of configured file 'contrib/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?)
+W: Skipping acquire of configured file 'non-free/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?)
+W: Skipping acquire of configured file 'sub/component/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?)" apt update
+
+sed -i -e '/^Codename: / a\
+Components: main contrib' $(find ./aptarchive -name 'Release')
+signreleasefiles
+
+testwarningmsg "W: Skipping acquire of configured file 'contrib/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?)
+W: Skipping acquire of configured file 'non-free/source/Sources' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'sub/component/source/Sources' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'non-free/binary-amd64/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'non-free/binary-all/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'non-free/i18n/Translation-en' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'sub/component/binary-amd64/Packages' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'sub/component/binary-all/Packages' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'sub/component/i18n/Translation-en' as repository '${APTARCHIVE}' doesn't have the component 'sub/component' (component misspelt in sources.list?)" apt update
+
+# the field looks like this e.g. for security.debian.org sources
+sed -i -e 's#^Components:.*$#Components: updates/main updates/contrib sub/component#' $(find ./aptarchive -name 'Release')
+signreleasefiles
+
+testwarningmsg "W: Skipping acquire of configured file 'contrib/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?)
+W: Skipping acquire of configured file 'non-free/source/Sources' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'sub/component/source/Sources' as repository '${APTARCHIVE}' does not seem to provide it (sources.list entry misspelt?)
+W: Skipping acquire of configured file 'non-free/binary-amd64/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'non-free/binary-all/Packages' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)
+W: Skipping acquire of configured file 'non-free/i18n/Translation-en' as repository '${APTARCHIVE}' doesn't have the component 'non-free' (component misspelt in sources.list?)" apt update
diff --git a/test/integration/test-apt-update-empty-files b/test/integration/test-apt-update-empty-files
new file mode 100755
index 0000000..24e40f9
--- /dev/null
+++ b/test/integration/test-apt-update-empty-files
@@ -0,0 +1,47 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+configcompression '.' 'gz'
+
+insertpackage 'unstable' 'apt' 'amd64' '1'
+# this automatically gives us an empty Sources file
+
+setupaptarchive --no-update
+
+msgmsg 'Test with file'
+rm -rf rootdir/var/lib/apt/lists
+testsuccess apt update -o Debug::pkgAcquire::Worker=1
+cp rootdir/tmp/testsuccess.output apt.output
+testfailure grep '%0a\(Alt\)\?Filename:%20/.*/Sources\(\.gz\)\?%0a' apt.output
+testempty find rootdir/var/lib/apt/lists -name '*_Sources'
+
+msgmsg 'Test with http'
+changetowebserver
+rm -rf rootdir/var/lib/apt/lists
+testsuccess apt update -o Debug::pkgAcquire::Worker=1
+cp rootdir/tmp/testsuccess.output apt.output
+testfailure grep 'http:600.*Sources' apt.output
+testempty find rootdir/var/lib/apt/lists -name '*_Sources'
+
+msgmsg 'Test lists-cleanup on newly empty'
+rm -rf rootdir/var/lib/apt/lists
+insertsource 'unstable' 'apt' 'any' '1'
+compressfile aptarchive/dists/unstable/main/source/Sources
+generatereleasefiles
+signreleasefiles
+testsuccess apt update -o Debug::pkgAcquire::Worker=1
+cp rootdir/tmp/testsuccess.output apt.output
+testsuccess grep 'http:600.*Sources' apt.output
+echo -n > aptarchive/dists/unstable/main/source/Sources
+compressfile aptarchive/dists/unstable/main/source/Sources
+generatereleasefiles 'now + 1hour'
+signreleasefiles
+testsuccess apt update -o Debug::pkgAcquire::Worker=1 -o APT::Get::List-Cleanup=0 -o Debug::Acquire::Transaction=1
+cp rootdir/tmp/testsuccess.output apt.output
+testfailure grep 'http:600.*Sources' apt.output
+testempty find rootdir/var/lib/apt/lists -name '*_Sources'
diff --git a/test/integration/test-apt-update-expected-size b/test/integration/test-apt-update-expected-size
new file mode 100755
index 0000000..32fa039
--- /dev/null
+++ b/test/integration/test-apt-update-expected-size
@@ -0,0 +1,99 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+configcompression '.' 'gz'
+
+insertpackage 'unstable' 'apt' 'i386' '1.0'
+
+export APT_DONT_SIGN=''
+setupaptarchive --no-update
+cp -a aptarchive/dists aptarchive/dists.good
+
+test_inreleasetoobig() {
+ # make InRelease really big to trigger fallback
+ dd if=/dev/zero of=aptarchive/dists/unstable/InRelease bs=1M count=2 2>/dev/null
+ touch -d '+1hour' aptarchive/dists/unstable/InRelease
+ testsuccess aptget update -o Apt::Get::List-Cleanup=0 -o acquire::MaxReleaseFileSize=$((1*1000*1000)) -o Debug::pkgAcquire::worker=0
+ msgtest 'Check that the max write warning is triggered'
+ cp rootdir/tmp/testsuccess.output update.output
+ testsuccess --nomsg grep -q 'File has unexpected size' update.output
+ rm -f update.output
+ # ensure the failed InRelease file got renamed
+ testsuccess ls rootdir/var/lib/apt/lists/partial/*InRelease.FAILED
+ testfailure test -e rootdir/var/lib/apt/lists/partial/Old.FAILED
+}
+
+test_packagestoobig() {
+ insertpackage 'unstable' 'foo' 'i386' '1.0'
+ buildaptarchivefromfiles '+1 hour'
+ signreleasefiles
+ # append junk at the end of the Packages.gz/Packages
+ SIZE="$(stat --printf=%s aptarchive/dists/unstable/main/binary-i386/Packages.gz)"
+ find aptarchive/dists -name 'Packages*' | while read pkg; do
+ echo "1234567890" >> "$pkg"
+ touch -d '+1hour' "$pkg"
+ done
+ NEW_SIZE="$(stat --printf=%s aptarchive/dists/unstable/main/binary-i386/Packages.gz)"
+ testfailuremsg "E: Failed to fetch ${1}/dists/unstable/main/binary-i386/Packages.gz File has unexpected size ($NEW_SIZE != $SIZE). Mirror sync in progress?
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::Transaction=0
+ testsuccess ls rootdir/var/lib/apt/lists/partial/*Packages*.FAILED
+ testfailure test -e rootdir/var/lib/apt/lists/partial/Old.FAILED
+}
+
+test_packagestoosmall() {
+ insertpackage 'unstable' 'foo' 'i386' '1.0'
+ buildaptarchivefromfiles '+1 hour'
+ signreleasefiles
+ # replace Packages.gz/Packages with short junk
+ SIZE="$(stat --printf=%s aptarchive/dists/unstable/main/binary-i386/Packages.gz)"
+ find aptarchive/dists -name 'Packages*' | while read pkg; do
+ echo "1234567890" > "$pkg"
+ touch -d '+1hour' "$pkg"
+ done
+ NEW_SIZE="$(stat --printf=%s aptarchive/dists/unstable/main/binary-i386/Packages.gz)"
+ testfailuremsg "E: Failed to fetch ${1}/dists/unstable/main/binary-i386/Packages.gz File is smaller than expected ($NEW_SIZE < $SIZE). Mirror sync in progress?
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::Transaction=0
+ testsuccess ls rootdir/var/lib/apt/lists/partial/*Packages*.FAILED
+ testfailure test -e rootdir/var/lib/apt/lists/partial/Old.FAILED
+}
+
+
+methodtest() {
+ # less complicated test setup this way
+ webserverconfig 'aptwebserver::support::modified-since' 'false' "$1"
+ webserverconfig 'aptwebserver::support::last-modified' 'false' "$1" # curl is clever and sees hits here also
+
+ msgmsg 'Test with' "$1" 'and clean start'
+ rm -rf rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists.good aptarchive/dists
+ cp -a aptarchive/dists.good aptarchive/dists
+ # normal update works fine
+ testsuccess aptget update
+ touch rootdir/var/lib/apt/lists/partial/Old.FAILED
+ mv rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists.good
+ # starting fresh works
+ test_inreleasetoobig "$1"
+ rm -rf aptarchive/dists rootdir/var/lib/apt/lists
+ cp -a aptarchive/dists.good aptarchive/dists
+ test_packagestoobig "$1"
+
+ msgmsg 'Test with' "$1" 'and existing old data'
+ rm -rf aptarchive/dists rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists.good rootdir/var/lib/apt/lists
+ cp -a aptarchive/dists.good aptarchive/dists
+ test_inreleasetoobig "$1"
+ rm -rf aptarchive/dists rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists.good rootdir/var/lib/apt/lists
+ cp -a aptarchive/dists.good aptarchive/dists
+ test_packagestoobig "$1"
+}
+
+changetowebserver
+methodtest "http://localhost:${APTHTTPPORT}"
+
+changetohttpswebserver
+methodtest "https://localhost:${APTHTTPSPORT}"
diff --git a/test/integration/test-apt-update-failure-propagation b/test/integration/test-apt-update-failure-propagation
new file mode 100755
index 0000000..44f2e70
--- /dev/null
+++ b/test/integration/test-apt-update-failure-propagation
@@ -0,0 +1,90 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'foo' 'all' '1' 'stable'
+buildsimplenativepackage 'foo' 'all' '2' 'sid'
+setupaptarchive --no-update
+
+NEWMETHODS="$(readlink -f rootdir)/usr/lib/apt/methods"
+OLDMETHODS="$(readlink -f rootdir/usr/lib/apt/methods)"
+rm "$NEWMETHODS"
+mkdir "$NEWMETHODS"
+backupIFS="$IFS"
+IFS="$(printf "\n\b")"
+for METH in $(find "$OLDMETHODS" -maxdepth 1 ! -type d); do
+ ln -s "$OLDMETHODS/$(basename "$METH")" "$NEWMETHODS"
+done
+IFS="$backupIFS"
+
+changetohttpswebserver
+for FILE in rootdir/etc/apt/sources.list.d/*-sid-* ; do
+ sed -i -e 's#https:#http:#' -e "s#:${APTHTTPSPORT}/#:${APTHTTPPORT}/#" "$FILE"
+done
+
+pretest() {
+ msgmsg "$@"
+ rm -rf rootdir/var/lib/apt/lists
+ testsuccessequal 'N: Unable to locate package foo' aptcache policy foo
+}
+pretest 'initialize test' 'update'
+testsuccess aptget update
+testsuccessequal "foo:
+ Installed: (none)
+ Candidate: 2
+ Version table:
+ 2 500
+ 500 http://localhost:${APTHTTPPORT} sid/main all Packages
+ 1 500
+ 500 https://localhost:${APTHTTPSPORT} stable/main all Packages" aptcache policy foo
+
+pretest 'not found' 'release files'
+mv aptarchive/dists/stable aptarchive/dists/stable.good
+testfailuremsg "E: The repository 'https://localhost:${APTHTTPSPORT} stable Release' does not have a Release file.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." apt update
+testfailuremsg "E: The repository 'https://localhost:${APTHTTPSPORT} stable Release' does not have a Release file.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update
+
+mv aptarchive/dists/stable.good aptarchive/dists/stable
+posttest() {
+ testsuccessequal "foo:
+ Installed: (none)
+ Candidate: 2
+ Version table:
+ 2 500
+ 500 http://localhost:${APTHTTPPORT} sid/main all Packages" aptcache policy foo
+}
+posttest
+
+pretest 'method disabled' 'https'
+echo 'Dir::Bin::Methods::https "false";' > rootdir/etc/apt/apt.conf.d/99disable-https
+testfailuremsg "E: The method 'https' is explicitly disabled via configuration.
+N: If you meant to use Tor remember to use tor+https instead of https.
+E: Failed to fetch https://localhost:${APTHTTPSPORT}/dists/stable/InRelease
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update
+rm -f rootdir/etc/apt/apt.conf.d/99disable-https
+posttest
+
+pretest 'method not installed' 'https'
+rm "${NEWMETHODS}/https"
+testfailuremsg "E: The method driver ${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/methods/https could not be found.
+N: Is the package apt-transport-https installed?
+E: Failed to fetch https://localhost:${APTHTTPSPORT}/dists/stable/InRelease
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update
+posttest
+
+pretest 'https connection refused' 'doom port'
+for FILE in rootdir/etc/apt/sources.list.d/*-stable-* ; do
+ # lets see how many testservers run also Doom
+ sed -i -e "s#:${APTHTTPSPORT}/#:666/#" "$FILE"
+done
+testwarning aptget update -o Dir::Bin::Methods::https="${OLDMETHODS}/https"
+testsuccess grep '^W: Failed to fetch https://localhost:666/dists/stable/InRelease ' rootdir/tmp/testwarning.output
+testequal 'W: Some index files failed to download. They have been ignored, or old ones used instead.' tail -n 1 rootdir/tmp/testwarning.output
+posttest
diff --git a/test/integration/test-apt-update-file b/test/integration/test-apt-update-file
new file mode 100755
index 0000000..8da4ec3
--- /dev/null
+++ b/test/integration/test-apt-update-file
@@ -0,0 +1,79 @@
+#!/bin/sh
+#
+# Ensure that we do not modify file:/// uris (regression test for
+# CVE-2014-0487
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "amd64"
+configcompression 'bz2' 'gz'
+confighashes 'SHA512'
+
+insertpackage 'unstable' 'foo' 'all' '1'
+insertpackage 'unstable' 'bar' 'amd64' '1'
+insertsource 'unstable' 'foo' 'all' '1'
+
+setupaptarchive --no-update
+logcurrentarchivedirectory
+
+# ensure the archive is not writable
+addtrap 'prefix' 'chmod 755 aptarchive/dists/unstable/main/binary-all;'
+if [ "$(id -u)" = '0' ]; then
+ # too deep to notice it, but it also unlikely that files in the same repo have different permissions
+ chmod 500 aptarchive/dists/unstable/main/binary-all
+ testfailure aptget update
+ rm -rf rootdir/var/lib/apt/lists
+ chmod 755 aptarchive/dists/unstable/main/binary-all
+ testsuccess aptget update
+ rm -rf rootdir/var/lib/apt/lists
+ chmod 511 aptarchive/dists/
+ testsuccess aptget update
+ rm -rf rootdir/var/lib/apt/lists
+ chmod 510 aptarchive/dists/
+ testsuccesswithnotice aptget update
+ rm -rf rootdir/var/lib/apt/lists
+ chmod 500 aptarchive/dists/
+ testsuccesswithnotice aptget update
+ chmod 755 aptarchive/dists/
+else
+ testsuccess aptget update
+fi
+mv rootdir/var/lib/apt/lists/_* rootdir/var/lib/apt/lists/partial
+chmod 555 aptarchive/dists/unstable/main/binary-all
+testsuccess aptget update -o Debug::pkgAcquire::Worker=1
+cp -a rootdir/tmp/testsuccess.output rootdir/tmp/update.output
+testsuccess grep '%0aAlt-Filename:%20' rootdir/tmp/update.output
+
+# the release files aren't an IMS-hit, but the indexes are
+redatereleasefiles '+1 hour'
+
+# we don't download the index if it isn't updated
+testsuccess aptget update -o Debug::pkgAcquire::Auth=1
+# file:/ isn't shown in the log, so see if it was downloaded anyhow
+cp -a rootdir/tmp/testsuccess.output rootdir/tmp/update.output
+canary="SHA512:$(bzcat aptarchive/dists/unstable/main/binary-all/Packages.bz2 | sha512sum |cut -f1 -d' ')"
+testfailure grep -- "$canary" rootdir/tmp/update.output
+
+testfoo() {
+ # foo is still available
+ testsuccess aptget install -s foo
+ testsuccess aptcache showsrc foo
+ testsuccess aptget source foo --print-uris
+}
+testfoo
+
+# the release file is new again, the index still isn't, but it is somehow gone now from disk
+redatereleasefiles '+2 hour'
+find rootdir/var/lib/apt/lists -name '*_Packages*' -delete
+
+testsuccess aptget update -o Debug::pkgAcquire::Auth=1
+# file:/ isn't shown in the log, so see if it was downloaded anyhow
+cp -a rootdir/tmp/testsuccess.output rootdir/tmp/update.output
+canary="SHA512:$(bzcat aptarchive/dists/unstable/main/binary-all/Packages.bz2 | sha512sum |cut -f1 -d' ')"
+testsuccess grep -- "$canary" rootdir/tmp/update.output
+
+testfoo
diff --git a/test/integration/test-apt-update-filesize-mismatch b/test/integration/test-apt-update-filesize-mismatch
new file mode 100755
index 0000000..26b670d
--- /dev/null
+++ b/test/integration/test-apt-update-filesize-mismatch
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+configcompression 'gz'
+
+insertpackage 'testing' 'foo' 'all' '1'
+insertpackage 'testing' 'foo2' 'all' '1'
+insertsource 'testing' 'foo' 'all' '1'
+insertsource 'testing' 'foo2' 'all' '1'
+
+setupaptarchive --no-update
+changetowebserver
+
+find aptarchive \( -name 'Packages' -o -name 'Sources' -o -name 'Translation-en' \) -delete
+for release in $(find aptarchive -name 'Release'); do
+ cp "$release" "${release}.backup"
+done
+
+testsuccess aptget update
+testsuccess aptcache show foo
+testsuccess aptget install foo -s
+
+for get in $(sed -n 's#^GET /\([^ ]\+\.gz\) HTTP.\+$#\1#p' aptarchive/webserver.log.client*.log); do
+ for ext in '' '.gz'; do
+ COMPRESSFILE="$get"
+ get="${get}${ext}"
+ FILE="$(basename "$get" '.gz')"
+ msgmsg 'Test filesize mismatch with file' "$FILE"
+ rm -rf rootdir/var/lib/apt/lists
+
+ for release in $(find aptarchive -name 'Release'); do
+ SIZE="$(awk "/$FILE\$/ { print \$2; exit }" "${release}.backup")"
+ sed "s# $SIZE # $(($SIZE + 111)) #" "${release}.backup" > "$release"
+ done
+ signreleasefiles
+
+ testfailure aptget update -o Debug::pkgAcquire::Worker=1
+ cp rootdir/tmp/testfailure.output rootdir/tmp/update.output
+ if [ -z "$ext" ]; then
+ testsuccess grep -E "$(basename "$COMPRESSFILE" '.gz').*Hash Sum mismatch" rootdir/tmp/update.output
+ else
+ testsuccess grep -E "$(basename "$COMPRESSFILE" '.gz').*File has unexpected size" rootdir/tmp/update.output
+ fi
+ testfailure aptcache show foo
+ testfailure aptget install foo -s
+
+ testfailure aptcache show bar
+ testfailure aptget install bar -s
+ done
+done
diff --git a/test/integration/test-apt-update-hashsum-mismatch b/test/integration/test-apt-update-hashsum-mismatch
new file mode 100755
index 0000000..48d041a
--- /dev/null
+++ b/test/integration/test-apt-update-hashsum-mismatch
@@ -0,0 +1,39 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+configcompression 'gz'
+
+insertpackage 'testing' 'foo' 'all' '1'
+insertpackage 'testing' 'foo2' 'all' '1'
+insertsource 'testing' 'foo' 'all' '1'
+insertsource 'testing' 'foo2' 'all' '1'
+
+setupaptarchive --no-update
+changetowebserver
+
+find aptarchive \( -name 'Packages' -o -name 'Sources' -o -name 'Translation-en' \) -delete
+
+testsuccess aptget update
+testsuccess aptcache show foo
+testsuccess aptget install foo -s
+
+for get in $(sed -n 's#^GET /\([^ ]\+\.gz\) HTTP.\+$#\1#p' aptarchive/webserver.log.client*.log); do
+ msgmsg 'Test hashsum mismatch with file' "$get"
+ breakfiles "aptarchive/${get}"
+ rm -rf rootdir/var/lib/apt/lists
+
+ testfailure aptget update
+ cp rootdir/tmp/testfailure.output rootdir/tmp/update.output
+ testsuccess grep -E "$(basename "$get" '.gz').*Hash Sum mismatch" rootdir/tmp/update.output
+ testfailure aptcache show foo
+ testfailure aptget install foo -s
+
+ testfailure aptcache show bar
+ testfailure aptget install bar -s
+
+ unbreakfiles "aptarchive/${get}"
+done
diff --git a/test/integration/test-apt-update-hooks b/test/integration/test-apt-update-hooks
new file mode 100755
index 0000000..d81ef29
--- /dev/null
+++ b/test/integration/test-apt-update-hooks
@@ -0,0 +1,49 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+confighashes 'SHA512'
+
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+insertpackage 'testing' 'foo' 'i386' '1.0'
+
+setupaptarchive --no-update
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+signreleasefiles 'Joe Sixpack'
+
+echo 'APT::Update::Post-Invoke-Success { "echo SUCCESS"; };' >> rootdir/etc/apt/apt.conf.d/display-success.conf
+echo 'APT::Update::Post-Invoke { "echo RUN"; };' >> rootdir/etc/apt/apt.conf.d/display-success.conf
+
+
+msgmsg "All sources OK => run Post-Invoke-Success and Post-Invoke"
+testsuccess aptget update
+cp rootdir/tmp/testsuccess.output aptupdate.output
+testsuccess grep "RUN" aptupdate.output
+testsuccess grep "SUCCESS" aptupdate.output
+
+msgmsg "Some sources broken => run Post-Invoke-Success and Post-Invoke"
+sed -i -e '/^ / d' -e '/^SHA512:/ d' "$APTARCHIVE/dists/unstable/Release"
+testsuccess rm "$(aptget indextargets 'Created-By: Packages' 'Suite: testing' --format '$(FILENAME)')"
+signreleasefiles
+listcurrentlistsdirectory > lists.before
+testfailure apt update
+cp rootdir/tmp/testfailure.output aptupdate.output
+listcurrentlistsdirectory > lists.after
+testfailure cmp lists.before lists.after
+testsuccess grep "RUN" aptupdate.output
+testsuccess grep "SUCCESS" aptupdate.output
+
+msgmsg "All sources broken => run Post-Invoke"
+sed -i -e '/^ / d' -e '/^SHA512:/ d' "$APTARCHIVE/dists/testing/Release"
+signreleasefiles
+mv lists.after lists.before
+testfailure apt update
+cp rootdir/tmp/testfailure.output aptupdate.output
+testfileequal lists.before "$(listcurrentlistsdirectory)"
+testsuccess grep "RUN" aptupdate.output
+testfailure grep "SUCCESS" aptupdate.output
diff --git a/test/integration/test-apt-update-ims b/test/integration/test-apt-update-ims
new file mode 100755
index 0000000..1894c3a
--- /dev/null
+++ b/test/integration/test-apt-update-ims
@@ -0,0 +1,192 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'unrelated' 'all' '0.5~squeeze1'
+insertpackage 'unstable' 'unrelated2' 'amd64' '0.5~squeeze1'
+insertsource 'unstable' 'unrelated' 'all' '0.5~squeeze1'
+
+export APT_DONT_SIGN=""
+setupaptarchive --no-update
+logcurrentarchivedirectory
+changetowebserver
+
+runtest() {
+ local APTOPT=""
+ if [ -n "$1" ]; then
+ APTOPT='--allow-insecure-repositories'
+ else
+ APTOPT='--no-allow-insecure-repositories'
+ fi
+
+ rm -rf rootdir/var/lib/apt/lists/
+
+ local TEST="test${1:-success}"
+ $TEST aptget update $APTOPT -o Debug::pkgAcquire::Worker=1
+ if [ "$1" = 'failure' ]; then
+ # accept the outdated Release file so we can check Hit behaviour
+ "test${2:-success}" aptget update -o Acquire::Min-ValidTime=9999999 $APTOPT
+ fi
+ listcurrentlistsdirectory > listsdir.lst
+ testsuccess grep '_Packages\(\.[0-9a-z]\+\)\?$' listsdir.lst
+ testsuccess grep '_Sources\(\.[0-9a-z]\+\)\?$' listsdir.lst
+ testsuccess grep '_Translation-en\(\.[0-9a-z]\+\)\?$' listsdir.lst
+
+ # ensure no leftovers in partial
+ testfailure ls 'rootdir/var/lib/apt/lists/partial/*'
+
+ # check that I-M-S header is kept in redirections
+ echo "$EXPECT" | sed -e 's#(invalid since [^)]\+)#(invalid since)#' > expected.output
+ $TEST aptget update -o Debug::pkgAcquire::Worker=0 -o Debug::Acquire::http=0 $APTOPT
+ sed -i -e 's#(invalid since [^)]\+)#(invalid since)#' rootdir/tmp/${TEST}.output
+ testequal "$(cat expected.output)" cat rootdir/tmp/${TEST}.output
+ testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+
+ # ensure that we still do a hash check for other files on ims hit of Release
+ if grep -q '^Hit:[0-9]\+ .* InRelease$' expected.output || ! grep -q '^Ign:[0-9]\+ .* Release\(\.gpg\)\?$' expected.output; then
+ $TEST aptget update -o Debug::Acquire::gpgv=1 $APTOPT
+ cp rootdir/tmp/${TEST}.output goodsign.output
+ testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+ testsuccess grep '^Got GOODSIG ' goodsign.output
+ fi
+
+ # ensure no leftovers in partial
+ testfailure ls 'rootdir/var/lib/apt/lists/partial/*'
+}
+
+msgmsg 'InRelease'
+EXPECT="Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Reading package lists..."
+echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest
+echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest
+
+msgmsg 'Release/Release.gpg'
+EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 404 Not Found
+Hit:2 http://localhost:${APTHTTPPORT} unstable Release
+Reading package lists..."
+find aptarchive -name 'InRelease' -delete
+logcurrentarchivedirectory
+echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest
+echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest
+
+msgmsg 'Release only'
+EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 404 Not Found
+Hit:2 http://localhost:${APTHTTPPORT} unstable Release
+Ign:3 http://localhost:${APTHTTPPORT} unstable Release.gpg
+ 404 Not Found
+Reading package lists...
+W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' is not signed.
+N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
+N: See apt-secure(8) manpage for repository creation and user configuration details."
+find aptarchive -name 'Release.gpg' -delete
+logcurrentarchivedirectory
+echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'warning'
+echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'warning'
+
+
+# make the release file old
+find aptarchive -name '*Release' -exec sed -i \
+ -e "s#^Date: .*\$#Date: $(date -ud '-2 weeks' '+%a, %d %b %Y %H:%M:%S %Z')#" \
+ -e '/^Valid-Until: / d' -e "/^Date: / a\
+Valid-Until: $(date -ud '-1 weeks' '+%a, %d %b %Y %H:%M:%S %Z')" '{}' \;
+signreleasefiles
+logcurrentarchivedirectory
+
+msgmsg 'expired InRelease'
+EXPECT="Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
+Reading package lists...
+E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/InRelease is expired (invalid since). Updates for this repository will not be applied."
+echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'failure'
+echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'failure'
+
+msgmsg 'expired Release/Release.gpg'
+EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 404 Not Found
+Hit:2 http://localhost:${APTHTTPPORT} unstable Release
+Reading package lists...
+E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/Release is expired (invalid since). Updates for this repository will not be applied."
+find aptarchive -name 'InRelease' -delete
+logcurrentarchivedirectory
+echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'failure'
+echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'failure'
+
+msgmsg 'expired Release only'
+EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 404 Not Found
+Hit:2 http://localhost:${APTHTTPPORT} unstable Release
+Ign:3 http://localhost:${APTHTTPPORT} unstable Release.gpg
+ 404 Not Found
+Reading package lists...
+W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' is not signed.
+N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
+N: See apt-secure(8) manpage for repository creation and user configuration details.
+E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/Release is expired (invalid since). Updates for this repository will not be applied."
+find aptarchive -name 'Release.gpg' -delete
+logcurrentarchivedirectory
+echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'failure' 'warning'
+echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'failure' 'warning'
+
+
+msgmsg 'no Release at all'
+EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 404 Not Found
+Ign:2 http://localhost:${APTHTTPPORT} unstable Release
+ 404 Not Found
+Ign:3 http://localhost:${APTHTTPPORT} unstable/main Sources
+ 404 Not Found
+Ign:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
+ 404 Not Found
+Ign:5 http://localhost:${APTHTTPPORT} unstable/main all Packages
+ 404 Not Found
+Ign:6 http://localhost:${APTHTTPPORT} unstable/main Translation-en
+ 404 Not Found
+Ign:3 http://localhost:${APTHTTPPORT} unstable/main Sources
+ 404 Not Found
+Ign:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
+ 404 Not Found
+Ign:5 http://localhost:${APTHTTPPORT} unstable/main all Packages
+ 404 Not Found
+Ign:6 http://localhost:${APTHTTPPORT} unstable/main Translation-en
+ 404 Not Found
+Ign:3 http://localhost:${APTHTTPPORT} unstable/main Sources
+ 404 Not Found
+Ign:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
+ 404 Not Found
+Ign:5 http://localhost:${APTHTTPPORT} unstable/main all Packages
+ 404 Not Found
+Ign:6 http://localhost:${APTHTTPPORT} unstable/main Translation-en
+ 404 Not Found
+Hit:3 http://localhost:${APTHTTPPORT} unstable/main Sources
+Hit:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
+Hit:5 http://localhost:${APTHTTPPORT} unstable/main all Packages
+Hit:6 http://localhost:${APTHTTPPORT} unstable/main Translation-en
+Reading package lists...
+W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' does not have a Release file.
+N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
+N: See apt-secure(8) manpage for repository creation and user configuration details."
+find aptarchive -name '*Release*' -delete
+logcurrentarchivedirectory
+echo 'Acquire::GzipIndexes "0";
+Acquire::PDiffs "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'warning'
+echo 'Acquire::GzipIndexes "1";
+Acquire::PDiffs "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
+runtest 'warning'
diff --git a/test/integration/test-apt-update-nofallback b/test/integration/test-apt-update-nofallback
new file mode 100755
index 0000000..d7e30ba
--- /dev/null
+++ b/test/integration/test-apt-update-nofallback
@@ -0,0 +1,274 @@
+#!/bin/sh
+#
+# ensure we never fallback from a signed to a unsigned repo
+#
+# hash checks are done in
+#
+set -e
+
+simulate_mitm_and_inject_evil_package()
+{
+ redatereleasefiles '+1 hour'
+ rm -f "$APTARCHIVE/dists/unstable/InRelease" "$APTARCHIVE/dists/unstable/Release.gpg"
+ inject_evil_package
+}
+
+inject_evil_package()
+{
+ cat > "$APTARCHIVE/dists/unstable/main/binary-i386/Packages" <<EOF
+Package: evil
+Installed-Size: 29
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Version: 1.0
+Filename: pool/evil_1.0_all.deb
+Size: 1270
+Description: an autogenerated evil package
+EOF
+ # avoid ims hit
+ touch -d '+1hour' aptarchive/dists/unstable/main/binary-i386/Packages
+ compressfile aptarchive/dists/unstable/main/binary-i386/Packages
+}
+
+assert_update_is_refused_and_last_good_state_used()
+{
+ testfailuremsg "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update
+
+ assert_repo_is_intact
+}
+
+assert_repo_is_intact()
+{
+ testsuccessequal "dpkg/now 1.16.2+fake all [installed,local]
+foo/unstable 2.0 all" apt list -qq
+ testsuccess aptget install -y -s foo
+ testfailure aptget install -y evil
+ testsuccess aptget source foo --print-uris
+
+ LISTDIR=rootdir/var/lib/apt/lists
+ testempty find "$LISTDIR" -name 'InRelease' -o -name 'Release.gpg'
+}
+
+setupaptarchive_with_lists_clean()
+{
+ setupaptarchive --no-update
+ rm -rf rootdir/var/lib/apt/lists
+}
+
+test_from_inrelease_to_unsigned()
+{
+ export APT_DONT_SIGN='Release.gpg'
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+
+ simulate_mitm_and_inject_evil_package
+ assert_update_is_refused_and_last_good_state_used
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+}
+
+test_from_release_gpg_to_unsigned()
+{
+ export APT_DONT_SIGN='InRelease'
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+
+ simulate_mitm_and_inject_evil_package
+ assert_update_is_refused_and_last_good_state_used
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+}
+
+test_from_inrelease_to_unsigned_with_override()
+{
+ export APT_DONT_SIGN='Release.gpg'
+ # setup archive with InRelease file
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+
+ # simulate moving to a unsigned but otherwise valid repo
+ simulate_mitm_and_inject_evil_package
+ generatereleasefiles '+2 hours'
+ find "$APTARCHIVE" -name '*Packages*' -exec touch -d '+2 hours' {} \;
+
+ # and ensure we can update to it (with enough force)
+ testfailure apt update
+ testfailure aptget update
+ testfailure aptget update --allow-insecure-repositories
+ testfailure aptget update --no-allow-insecure-repositories
+ sed -i 's#^deb\(-src\)\? #deb\1 [allow-downgrade-to-insecure=yes] #' rootdir/etc/apt/sources.list.d/*
+ testfailure aptget update --no-allow-insecure-repositories
+ testfailure apt update
+ testwarning apt update --allow-insecure-repositories \
+ -o Debug::pkgAcquire::Worker=1 -o Debug::pkgAcquire::Auth=1
+ sed -i 's#^deb\(-src\)\? \[allow-downgrade-to-insecure=yes\] #deb\1 #' rootdir/etc/apt/sources.list.d/*
+ # but that the individual packages are still considered untrusted
+ testfailureequal "WARNING: The following packages cannot be authenticated!
+ evil
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y evil
+}
+
+test_from_inrelease_to_norelease_with_override()
+{
+ # setup archive with InRelease file
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+
+ # simulate moving to a unsigned but otherwise valid repo
+ simulate_mitm_and_inject_evil_package
+ find "$APTARCHIVE" -name '*Release*' -delete
+ find "$APTARCHIVE" -name '*Packages*' -exec touch -d '+2 hours' {} \;
+
+ # and ensure we can update to it (with enough force)
+ testfailure aptget update
+ testfailure aptget update --allow-insecure-repositories
+ testwarning aptget update --allow-insecure-repositories \
+ -o Acquire::AllowDowngradeToInsecureRepositories=1 -o Debug::pkgAcquire::Worker=1 -o Debug::pkgAcquire::Auth=1
+ # but that the individual packages are still considered untrusted
+ testfailureequal "WARNING: The following packages cannot be authenticated!
+ evil
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y evil
+}
+
+test_cve_2012_0214()
+{
+ # see https://bugs.launchpad.net/ubuntu/+source/apt/+bug/947108
+ #
+ # it was possible to MITM the download so that InRelease/Release.gpg
+ # are not delivered (404) and a altered Release file was send
+ #
+ # apt left the old InRelease file in /var/lib/apt/lists and downloaded
+ # the unauthenticated Release file too giving the false impression that
+ # Release was authenticated
+ #
+ # Note that this is pretty much impossible nowadays because:
+ # a) InRelease is left as is, not split to InRelease/Release as it was
+ # in the old days
+ # b) we refuse to go from signed->unsigned
+ #
+ # Still worth having a regression test the simulates the condition
+
+ export APT_DONT_SIGN='Release.gpg'
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+
+ # do what CVE-2012-0214 did
+ rm -f "$APTARCHIVE/dists/unstable/InRelease" "$APTARCHIVE/dists/unstable/Release.gpg"
+ inject_evil_package
+ # build valid Release file
+ aptftparchive -qq release ./aptarchive > aptarchive/dists/unstable/Release
+
+ assert_update_is_refused_and_last_good_state_used
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+
+ # ensure there is no _Release file downloaded
+ testfailure ls rootdir/var/lib/apt/lists/*_Release
+}
+
+test_subvert_inrelease()
+{
+ export APT_DONT_SIGN='Release.gpg'
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+
+ # replace InRelease with something else
+ mv "$APTARCHIVE/dists/unstable/Release" "$APTARCHIVE/dists/unstable/InRelease"
+
+ testfailuremsg "E: Failed to fetch file://${APTARCHIVE}/dists/unstable/InRelease Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)
+E: The repository 'file:${APTARCHIVE} unstable InRelease' is no longer signed.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update
+
+ # ensure we keep the repo
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ assert_repo_is_intact
+}
+
+test_inrelease_to_invalid_inrelease()
+{
+ export APT_DONT_SIGN='Release.gpg'
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+
+ # now remove InRelease and subvert Release do no longer verify
+ sed -i 's/^Codename:.*/Codename: evil!/' "$APTARCHIVE/dists/unstable/InRelease"
+ inject_evil_package
+
+ testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+W: Failed to fetch file:${APTARCHIVE}/dists/unstable/InRelease The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+W: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
+
+ # ensure we keep the repo
+ testfailure grep 'evil' rootdir/var/lib/apt/lists/*InRelease
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ assert_repo_is_intact
+}
+
+test_release_gpg_to_invalid_release_release_gpg()
+{
+ export APT_DONT_SIGN='InRelease'
+ setupaptarchive_with_lists_clean
+ testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+
+ # now subvert Release do no longer verify
+ echo "Some evil data" >> "$APTARCHIVE/dists/unstable/Release"
+ inject_evil_package
+
+ testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable Release: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+W: Failed to fetch file:${APTARCHIVE}/dists/unstable/Release.gpg The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+W: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
+
+ testfailure grep 'evil' rootdir/var/lib/apt/lists/*Release
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ assert_repo_is_intact
+}
+
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+# a "normal" package with source and binary
+buildsimplenativepackage 'foo' 'all' '2.0'
+
+# setup the archive and ensure we have a single package that installs fine
+setupaptarchive
+APTARCHIVE="$(readlink -f ./aptarchive)"
+assert_repo_is_intact
+
+# test the various cases where a repo may go from signed->unsigned
+msgmsg "test_from_inrelease_to_unsigned"
+test_from_inrelease_to_unsigned
+
+msgmsg "test_from_release_gpg_to_unsigned"
+test_from_release_gpg_to_unsigned
+
+# ensure we do not regress on CVE-2012-0214
+msgmsg "test_cve_2012_0214"
+test_cve_2012_0214
+
+# ensure InRelease can not be subverted
+msgmsg "test_subvert_inrelease"
+test_subvert_inrelease
+
+# ensure we revert to last good state if InRelease does not verify
+msgmsg "test_inrelease_to_invalid_inrelease"
+test_inrelease_to_invalid_inrelease
+
+# ensure we revert to last good state if Release/Release.gpg does not verify
+msgmsg "test_release_gpg_to_invalid_release_release_gpg"
+test_release_gpg_to_invalid_release_release_gpg
+
+# ensure we can override the downgrade error
+msgmsg "test_from_inrelease_to_unsigned_with_override"
+test_from_inrelease_to_unsigned_with_override
+msgmsg "test_from_inrelease_to_norelease_with_override"
+test_from_inrelease_to_norelease_with_override
diff --git a/test/integration/test-apt-update-not-modified b/test/integration/test-apt-update-not-modified
new file mode 100755
index 0000000..c6dbb8d
--- /dev/null
+++ b/test/integration/test-apt-update-not-modified
@@ -0,0 +1,183 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+confighashes 'SHA256'
+
+insertpackage 'unstable' 'apt' 'amd64,i386' '1.0'
+
+export APT_DONT_SIGN=''
+setupaptarchive --no-update
+
+methodtest() {
+ msgmsg 'Test InRelease with' "$1"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a aptarchive/dists aptarchive/dists.good
+ # get our cache populated
+ testsuccess aptget update
+ listcurrentlistsdirectory > listsdir.lst
+
+ # hit again with a good cache
+ testsuccessequal "Hit:1 $1 unstable InRelease
+Reading package lists..." aptget update
+ testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+
+ # drop an architecture, which means the file should be gone now
+ configarchitecture 'i386'
+ sed '/_binary-amd64_Packages/ d' listsdir.lst > listsdir-without-amd64.lst
+ testsuccessequal "Hit:1 $1 unstable InRelease
+Reading package lists..." aptget update
+ testfileequal 'listsdir-without-amd64.lst' "$(listcurrentlistsdirectory)"
+
+ # readd arch so its downloaded again…
+ configarchitecture 'amd64' 'i386'
+ # … but oh noes, hashsum mismatch!
+ SIZE=$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz')
+ breakfiles aptarchive/dists/unstable/main/binary-amd64/Packages.gz
+ testfailureequal "Hit:1 $1 unstable InRelease
+Get:2 $1 unstable/main amd64 Packages [$SIZE B]
+Err:2 $1 unstable/main amd64 Packages
+ Hash Sum mismatch
+ Hashes of expected file:
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak') [weak]
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak' | cut -d' ' -f 1)
+ Hashes of received file:
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz' | cut -d' ' -f 1)
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') [weak]
+ Last modification reported: $(lastmodification 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz')
+ Release file created at: $(releasefiledate 'aptarchive/dists/unstable/InRelease')
+Reading package lists...
+E: Failed to fetch $1/dists/unstable/main/binary-amd64/Packages.gz Hash Sum mismatch
+ Hashes of expected file:
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak') [weak]
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak' | cut -d' ' -f 1)
+ Hashes of received file:
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz' | cut -d' ' -f 1)
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') [weak]
+ Last modification reported: $(lastmodification 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz')
+ Release file created at: $(releasefiledate 'aptarchive/dists/unstable/InRelease')
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update
+ testfileequal 'listsdir-without-amd64.lst' "$(listcurrentlistsdirectory)"
+ rm -rf aptarchive/dists
+ cp -a aptarchive/dists.good aptarchive/dists
+
+ # … now everything is fine again
+ testsuccessequal "Hit:1 $1 unstable InRelease
+Get:2 $1 unstable/main amd64 Packages [$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') B]
+Reading package lists..." aptget update
+ testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+
+ webserverconfig 'aptwebserver::support::modified-since' 'false'
+ webserverconfig 'aptwebserver::support::last-modified' 'false'
+ testsuccessequal "Get:1 $1 unstable InRelease [$(stat -c '%s' 'aptarchive/dists/unstable/InRelease') B]
+Reading package lists..." aptget update
+ webserverconfig 'aptwebserver::support::modified-since' 'true'
+ webserverconfig 'aptwebserver::support::last-modified' 'true'
+
+ msgmsg 'Test Release.gpg with' "$1"
+ rm -rf rootdir/var/lib/apt/lists
+ find aptarchive/dists -name 'InRelease' -delete
+ # get our cache populated
+ testsuccess aptget update
+ listcurrentlistsdirectory > listsdir.lst
+
+ # hit again with a good cache
+ testsuccessequal "Ign:1 $1 unstable InRelease
+ 404 Not Found
+Hit:2 $1 unstable Release
+Reading package lists..." aptget update
+ testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+
+ # drop an architecture, which means the file should be gone now
+ configarchitecture 'i386'
+ sed '/_binary-amd64_Packages/ d' listsdir.lst > listsdir-without-amd64.lst
+ testsuccessequal "Ign:1 $1 unstable InRelease
+ 404 Not Found
+Hit:2 $1 unstable Release
+Reading package lists..." aptget update
+ testfileequal 'listsdir-without-amd64.lst' "$(listcurrentlistsdirectory)"
+
+ # readd arch so its downloaded again…
+ configarchitecture 'amd64' 'i386'
+ # … but oh noes, hashsum mismatch!
+ SIZE=$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz')
+ breakfiles 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz'
+ testfailureequal "Ign:1 $1 unstable InRelease
+ 404 Not Found
+Hit:2 $1 unstable Release
+Get:4 $1 unstable/main amd64 Packages [$SIZE B]
+Err:4 $1 unstable/main amd64 Packages
+ Hash Sum mismatch
+ Hashes of expected file:
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak') [weak]
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak' | cut -d' ' -f 1)
+ Hashes of received file:
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz' | cut -d' ' -f 1)
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') [weak]
+ Last modification reported: $(lastmodification 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz')
+ Release file created at: $(releasefiledate 'aptarchive/dists/unstable/Release')
+Reading package lists...
+E: Failed to fetch $1/dists/unstable/main/binary-amd64/Packages.gz Hash Sum mismatch
+ Hashes of expected file:
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak') [weak]
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz.bak' | cut -d' ' -f 1)
+ Hashes of received file:
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz' | cut -d' ' -f 1)
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') [weak]
+ Last modification reported: $(lastmodification 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz')
+ Release file created at: $(releasefiledate 'aptarchive/dists/unstable/Release')
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update
+ testfileequal 'listsdir-without-amd64.lst' "$(listcurrentlistsdirectory)"
+ rm -rf aptarchive/dists
+ cp -a aptarchive/dists.good aptarchive/dists
+ find aptarchive/dists -name 'InRelease' -delete
+
+ # … now everything is fine again
+ testsuccessequal "Ign:1 $1 unstable InRelease
+ 404 Not Found
+Hit:2 $1 unstable Release
+Get:4 $1 unstable/main amd64 Packages [$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') B]
+Reading package lists..." aptget update
+ testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+
+ webserverconfig 'aptwebserver::support::modified-since' 'false'
+ webserverconfig 'aptwebserver::support::last-modified' 'false'
+ testsuccessequal "Ign:1 $1 unstable InRelease
+ 404 Not Found
+Get:2 $1 unstable Release [$(stat -c '%s' 'aptarchive/dists/unstable/Release') B]
+Reading package lists..." aptget update
+ webserverconfig 'aptwebserver::support::modified-since' 'true'
+ webserverconfig 'aptwebserver::support::last-modified' 'true'
+
+ rm -rf aptarchive/dists
+ cp -a aptarchive/dists.good aptarchive/dists
+
+ # new release file, but the indexes are the same
+ redatereleasefiles '+2 hours'
+
+ rm -rf rootdir/var/lib/apt/lists.good
+ cp -a rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists.good
+ testsuccessequal "Get:1 $1 unstable InRelease [$(stat -c '%s' 'aptarchive/dists/unstable/InRelease') B]
+Reading package lists..." aptget update
+
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists.good rootdir/var/lib/apt/lists
+ find rootdir/var/lib/apt/lists -name '*_Packages*' -delete
+ testsuccessequal "Get:1 $1 unstable InRelease [$(stat -c '%s' 'aptarchive/dists/unstable/InRelease') B]
+Get:2 $1 unstable/main amd64 Packages [$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') B]
+Get:3 $1 unstable/main i386 Packages [$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-i386/Packages.gz') B]
+Reading package lists..." aptget update
+
+ rm -rf aptarchive/dists
+ cp -a aptarchive/dists.good aptarchive/dists
+}
+
+changetowebserver
+methodtest "http://localhost:${APTHTTPPORT}"
+
+changetohttpswebserver
+methodtest "https://localhost:${APTHTTPSPORT}"
diff --git a/test/integration/test-apt-update-releaseinfo-changes b/test/integration/test-apt-update-releaseinfo-changes
new file mode 100755
index 0000000..ee36c46
--- /dev/null
+++ b/test/integration/test-apt-update-releaseinfo-changes
@@ -0,0 +1,94 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'earth' 'human' 'all' '1'
+
+getoriginfromsuite() { echo -n 'Earth'; }
+getlabelfromsuite() { echo -n 'Blue Planet'; }
+getcodenamefromsuite() { echo -n 'home'; }
+getreleaseversionfromsuite() { echo -n '1.0'; }
+getnotautomaticfromsuite() { echo -n 'yes'; }
+getbutautomaticupgradesfromsuite() { echo -n 'yes'; }
+setupaptarchive --no-update
+testsuccess aptget update
+
+cp -a aptarchive/dists aptarchive/dists.bak
+cp -a rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists.bak
+APTARCHIVE="$(readlink -f './aptarchive')"
+
+sed -i -e 's#^Origin: Earth#Origin: Mars#' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars'
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update
+testfailure apt update --allow-releaseinfo-change-label
+testsuccesswithnotice apt update --allow-releaseinfo-change
+testequal "All packages are up to date.
+N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars'" tail -n 2 rootdir/tmp/testsuccesswithnotice.output
+
+rm -rf rootdir/var/lib/apt/lists
+cp -a rootdir/var/lib/apt/lists.bak rootdir/var/lib/apt/lists
+sed -i -e 's#^Label: Blue#Label: Red#' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars'
+E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Label' value from 'Blue Planet' to 'Red Planet'
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update
+testfailure apt update --allow-releaseinfo-change-label
+testfailuremsg "N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Origin' value from 'Earth' to 'Mars'
+E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Label' value from 'Blue Planet' to 'Red Planet'
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update --allow-releaseinfo-change-origin
+testsuccess apt update --allow-releaseinfo-change-origin --allow-releaseinfo-change-label -o quiet::ReleaseInfoChange=true
+
+# version changes are allowed by default
+sed -i -e 's#^Version: 1#Version: 2#' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Version' value from '1.0' to '2.0'
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update --no-allow-releaseinfo-change-version
+testsuccesswithnotice apt update
+testequal "All packages are up to date.
+N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Version' value from '1.0' to '2.0'" tail -n 2 rootdir/tmp/testsuccesswithnotice.output
+
+sed -i -e 's#^Codename: home#Codename: colony#' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Codename' value from 'home' to 'colony'
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update --no-allow-releaseinfo-change-codename
+testsuccesswithnotice apt update --allow-releaseinfo-change-codename
+testequal "All packages are up to date.
+N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Codename' value from 'home' to 'colony'" tail -n 2 rootdir/tmp/testsuccesswithnotice.output
+
+sed -i -e '/^ButAutomaticUpgrades: / d' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 100 to 1.
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update
+testsuccesswithnotice apt update --allow-releaseinfo-change
+testequal "All packages are up to date.
+N: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 100 to 1." tail -n 2 rootdir/tmp/testsuccesswithnotice.output
+
+sed -i -e '/^NotAutomatic: / d' -e '/^Codename: / a\
+Release-Notes: https://example.org/mars/release-notes' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 1 to 500.
+N: More information about this can be found online in the Release notes at: https://example.org/mars/release-notes
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update
+testsuccesswithnotice apt update --allow-releaseinfo-change-defaultpin
+testequal "All packages are up to date.
+N: Repository 'file:$APTARCHIVE earth InRelease' changed its default priority for apt_preferences(5) from 1 to 500.
+N: More information about this can be found online in the Release notes at: https://example.org/mars/release-notes" tail -n 3 rootdir/tmp/testsuccesswithnotice.output
+
+# Suite testing also needs codename adjustment, otherwise complaints about
+# mismatch between sources.list and Release file.
+sed -i -e 's#^Suite: earth#Suite: mars#' $(find ./aptarchive -name 'Release')
+sed -i -e 's#^Codename: colony#Codename: earth#' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailuremsg "E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Suite' value from 'earth' to 'mars'
+E: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Codename' value from 'colony' to 'earth'
+N: More information about this can be found online in the Release notes at: https://example.org/mars/release-notes
+N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details." apt update --no-allow-releaseinfo-change-suite
+testsuccesswithnotice apt update --allow-releaseinfo-change-codename
+testequal "N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Suite' value from 'earth' to 'mars'
+N: Repository 'file:$APTARCHIVE earth InRelease' changed its 'Codename' value from 'colony' to 'earth'
+N: More information about this can be found online in the Release notes at: https://example.org/mars/release-notes" tail -n 3 rootdir/tmp/testsuccesswithnotice.output
diff --git a/test/integration/test-apt-update-reporting b/test/integration/test-apt-update-reporting
new file mode 100755
index 0000000..cecf23a
--- /dev/null
+++ b/test/integration/test-apt-update-reporting
@@ -0,0 +1,35 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+for i in $(seq 100); do
+ insertpackage 'unstable' "foo-$i" 'all' '1.0'
+ insertsource 'unstable' "foo-$i" 'all' '1.0'
+done
+
+setupaptarchive --no-update
+changetowebserver
+
+aptget update -o Debug::Acquire::Progress=1 2>progress.log >ignore.out
+
+has_progress() {
+ prev_percent=0.0
+ while read line; do
+ percent="$(echo "$line"|cut -b2-6)"
+ # need to cut the decimal point and digits because sh can not do
+ # float compare
+ if [ "${percent%%.*}" -lt "${prev_percent%%.*}" ]; then
+ cat progress.log
+ return 1
+ fi
+ prev_percent="$percent"
+ done < progress.log
+ return 0
+}
+
+msgtest "Testing that progress does not go backward"
+testsuccess --nomsg has_progress
diff --git a/test/integration/test-apt-update-rollback b/test/integration/test-apt-update-rollback
new file mode 100755
index 0000000..ea431c8
--- /dev/null
+++ b/test/integration/test-apt-update-rollback
@@ -0,0 +1,219 @@
+#!/bin/sh
+#
+# test that apt-get update is transactional
+#
+set -e
+
+avoid_ims_hit() {
+ touch -d '+1hour' aptarchive/dists/unstable/main/binary-i386/Packages*
+ touch -d '+1hour' aptarchive/dists/unstable/main/source/Sources*
+ touch -d '+1hour' aptarchive/dists/unstable/*Release*
+
+ touch -d '-1hour' rootdir/var/lib/apt/lists/*
+}
+
+create_fresh_archive()
+{
+ rm -rf aptarchive/*
+ rm -f rootdir/var/lib/apt/lists/_* rootdir/var/lib/apt/lists/partial/*
+
+ insertpackage 'unstable' 'old' 'all' '1.0'
+
+ setupaptarchive --no-update
+}
+
+add_new_package() {
+ insertpackage 'unstable' 'new' 'all' '1.0'
+ insertsource 'unstable' 'new' 'all' '1.0'
+
+ setupaptarchive --no-update "$@"
+}
+
+break_repository_sources_index() {
+ mv "$APTARCHIVE/dists/unstable/main/source/Sources.gz" "$APTARCHIVE/dists/unstable/main/source/Sources.gz.orig"
+ printf 'xxx' > "$APTARCHIVE/dists/unstable/main/source/Sources"
+ compressfile "$APTARCHIVE/dists/unstable/main/source/Sources" "$@"
+}
+
+start_with_good_inrelease() {
+ create_fresh_archive
+ testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+ testsuccessequal 'dpkg/now 1.16.2+fake all [installed,local]
+old/unstable 1.0 all' apt list -qq
+}
+
+test_inrelease_to_new_inrelease() {
+ msgmsg 'Test InRelease to new InRelease works fine'
+ start_with_good_inrelease
+
+ add_new_package '+1hour'
+ testsuccess aptget update -o Debug::Acquire::Transaction=1
+ testsuccessequal 'dpkg/now 1.16.2+fake all [installed,local]
+new/unstable 1.0 all
+old/unstable 1.0 all' apt list -qq
+}
+
+test_inrelease_to_broken_hash_reverts_all() {
+ msgmsg 'Test InRelease to broken InRelease reverts everything'
+ start_with_good_inrelease
+
+ add_new_package '+1hour'
+ # break the Sources file
+ break_repository_sources_index '+1hour'
+
+ # test the error condition
+ testfailureequal "E: Failed to fetch file:${APTARCHIVE}/dists/unstable/main/source/Sources.gz Hash Sum mismatch
+ Hashes of expected file:
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/source/Sources.gz.orig') [weak]
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/source/Sources.gz.orig' | cut -d' ' -f 1)
+ Hashes of received file:
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/source/Sources.gz' | cut -d' ' -f 1)
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/source/Sources.gz') [weak]
+ Last modification reported: $(lastmodification 'aptarchive/dists/unstable/main/source/Sources.gz')
+ Release file created at: $(releasefiledate 'aptarchive/dists/unstable/InRelease')
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
+ # ensure that the Packages file is also rolled back
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testfailureequal "E: Unable to locate package new" aptget install new -s -qq
+}
+
+test_inrelease_to_valid_release() {
+ msgmsg 'Test InRelease to valid Release'
+ start_with_good_inrelease
+
+ add_new_package '+1hour'
+ # switch to a unsigned repo now
+ rm -f "$APTARCHIVE/dists/unstable/InRelease" "$APTARCHIVE/dists/unstable/Release.gpg"
+
+ # update fails
+ testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq
+
+ # test that security downgrade was not successful
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testsuccess aptget install old -s
+ testfailure aptget install new -s
+ testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease'
+ testempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_Release'
+}
+
+test_inrelease_to_release_reverts_all() {
+ msgmsg 'Test InRelease to broken Release reverts everything'
+ start_with_good_inrelease
+
+ # switch to a unsigned repo now
+ add_new_package '+1hour'
+ rm -f "$APTARCHIVE/dists/unstable/InRelease" "$APTARCHIVE/dists/unstable/Release.gpg"
+
+ # break it
+ break_repository_sources_index '+1hour'
+
+ # ensure error
+ testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq # -o Debug::acquire::transaction=1
+
+ # ensure that the Packages file is also rolled back
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testsuccess aptget install old -s
+ testfailure aptget install new -s
+ testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease'
+ testempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_Release'
+}
+
+test_unauthenticated_to_invalid_inrelease() {
+ msgmsg 'Test UnAuthenticated to invalid InRelease reverts everything'
+ create_fresh_archive
+ rm -f "$APTARCHIVE/dists/unstable/InRelease" "$APTARCHIVE/dists/unstable/Release.gpg"
+
+ testwarning aptget update --allow-insecure-repositories
+ listcurrentlistsdirectory > lists.before
+ testfailureequal "WARNING: The following packages cannot be authenticated!
+ old
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y old
+
+ # go to authenticated but not correct
+ add_new_package '+1hour'
+ break_repository_sources_index '+1hour'
+
+ testfailureequal "E: Failed to fetch file:$APTARCHIVE/dists/unstable/main/source/Sources.gz Hash Sum mismatch
+ Hashes of expected file:
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/source/Sources.gz.orig') [weak]
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/source/Sources.gz.orig' | cut -d' ' -f 1)
+ Hashes of received file:
+ - SHA256:$(sha256sum 'aptarchive/dists/unstable/main/source/Sources.gz' | cut -d' ' -f 1)
+ - Filesize:$(stat -c '%s' 'aptarchive/dists/unstable/main/source/Sources.gz') [weak]
+ Last modification reported: $(lastmodification 'aptarchive/dists/unstable/main/source/Sources.gz')
+ Release file created at: $(releasefiledate 'aptarchive/dists/unstable/InRelease')
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
+
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testempty find "${ROOTDIR}/var/lib/apt/lists" -maxdepth 1 -name '*_InRelease'
+ testfailureequal "WARNING: The following packages cannot be authenticated!
+ old
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y old
+}
+
+test_inrelease_to_unauth_inrelease() {
+ msgmsg 'Test InRelease to InRelease without good sig'
+ start_with_good_inrelease
+
+ signreleasefiles 'Marvin Paranoid'
+
+ testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E8525D47528144E2
+W: Failed to fetch file:$APTARCHIVE/dists/unstable/InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E8525D47528144E2
+W: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
+
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testnotempty find "${ROOTDIR}/var/lib/apt/lists" -name '*_InRelease'
+}
+
+test_inrelease_to_broken_gzip() {
+ msgmsg "Test InRelease to broken gzip"
+ start_with_good_inrelease
+
+ break_repository_sources_index '+1hour'
+ generatereleasefiles '+2hours'
+ signreleasefiles
+
+ # append junk at the end of the compressed file
+ echo "lala" >> "$APTARCHIVE/dists/unstable/main/source/Sources.gz"
+ touch -d '+2min' "$APTARCHIVE/dists/unstable/main/source/Sources.gz"
+ # remove uncompressed file to avoid fallback
+ rm "$APTARCHIVE/dists/unstable/main/source/Sources"
+
+ testfailure aptget update
+ testsuccess grep 'Hash Sum mismatch' rootdir/tmp/testfailure.output
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+}
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+export APT_DONT_SIGN='Release.gpg'
+
+APTARCHIVE="$(readlink -f ./aptarchive)"
+ROOTDIR="${TMPWORKINGDIRECTORY}/rootdir"
+APTARCHIVE_LISTS="$(echo "$APTARCHIVE" | tr "/" "_" )"
+
+# test the following cases:
+# - InRelease -> broken InRelease revert to previous state
+# - empty lists dir and broken remote leaves nothing on the system
+# - InRelease -> hashsum mismatch for one file reverts all files to previous state
+# - Release/Release.gpg -> hashsum mismatch
+# - InRelease -> Release with hashsum mismatch revert entire state and kills Release
+# - Release -> InRelease with broken Sig/Hash removes InRelease
+# going from Release/Release.gpg -> InRelease and vice versa
+# - unauthenticated -> invalid InRelease
+
+# stuff to do:
+# - ims-hit
+# - gzip-index tests
+
+test_inrelease_to_new_inrelease
+test_inrelease_to_broken_hash_reverts_all
+test_inrelease_to_valid_release
+test_inrelease_to_release_reverts_all
+test_unauthenticated_to_invalid_inrelease
+test_inrelease_to_unauth_inrelease
+test_inrelease_to_broken_gzip
diff --git a/test/integration/test-apt-update-simple b/test/integration/test-apt-update-simple
new file mode 100755
index 0000000..ccf7197
--- /dev/null
+++ b/test/integration/test-apt-update-simple
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'foo' 'all' '1'
+insertpackage 'unstable' 'bar' 'amd64' '1'
+insertpackage 'unstable' 'bar' 'i386' '1'
+insertsource 'unstable' 'foo' 'all' '1'
+
+sed -e 's#^Description-en:#Description-de:#' \
+ aptarchive/dists/unstable/main/i18n/Translation-en > aptarchive/dists/unstable/main/i18n/Translation-de
+
+setupaptarchive --no-update
+changetowebserver
+
+# the framework modifies some configs to ensure testability,
+# at the expense of creating an environment which doesn't always
+# reflect apts "normal" behavior on a "normal" system
+echo 'Acquire::IndexTargets::Randomized "true";
+Acquire::Languages { "environment"; "en"; "de"; };
+' > rootdir/etc/apt/apt.conf.d/restore-simplicity
+
+testempty aptget indextargets
+testsuccess aptget update
+testequal 'main/source/Sources
+main/binary-amd64/Packages
+main/binary-all/Packages
+main/i18n/Translation-en
+main/i18n/Translation-de' aptget indextargets --format '$(METAKEY)'
diff --git a/test/integration/test-apt-update-stale b/test/integration/test-apt-update-stale
new file mode 100755
index 0000000..a863458
--- /dev/null
+++ b/test/integration/test-apt-update-stale
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# Ensure that a MITM can not stale the Packages/Sources without
+# raising a error message. Note that the Release file is protected
+# via the "Valid-Until" header
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+
+setupaptarchive --no-update
+changetowebserver
+
+echo "Acquire::Languages \"none\";" > rootdir/etc/apt/apt.conf.d/00nolanguages
+testsuccess aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
+listcurrentlistsdirectory > lists.before
+
+# insert new version
+mkdir aptarchive/dists/unstable/main/binary-i386/saved
+cp -p aptarchive/dists/unstable/main/binary-i386/Packages* \
+ aptarchive/dists/unstable/main/binary-i386/saved
+insertpackage 'unstable' 'foo' 'i386' '2.0'
+touch -d '+1 hour' aptarchive/dists/unstable/main/binary-i386/Packages
+compressfile aptarchive/dists/unstable/main/binary-i386/Packages
+# ensure that we do not get a I-M-S hit for the Release file
+
+generatereleasefiles '+1hour'
+signreleasefiles
+
+# but now only deliver the previous Packages file instead of the new one
+# (simulating a stale attack)
+cp -p aptarchive/dists/unstable/main/binary-i386/saved/Packages* \
+ aptarchive/dists/unstable/main/binary-i386/
+
+# ensure this raises an error
+testfailure aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
+testsuccess grep 'File has unexpected size' rootdir/tmp/testfailure.output
+testfileequal lists.before "$(listcurrentlistsdirectory)"
diff --git a/test/integration/test-apt-update-transactions b/test/integration/test-apt-update-transactions
new file mode 100755
index 0000000..1f30d77
--- /dev/null
+++ b/test/integration/test-apt-update-transactions
@@ -0,0 +1,85 @@
+#!/bin/sh
+set -e
+
+# ensure that an update will only succeed entirely or not at all
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+configcompression '.' 'gz'
+
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+insertsource 'unstable' 'foo' 'i386' '1.0'
+
+setupaptarchive --no-update
+
+breakfile() {
+ breakfiles "$1" "${1}.gz"
+}
+restorefile() {
+ unbreakfiles "$1" "${1}.gz"
+}
+
+testrun() {
+ rm -rf aptarchive/dists.good
+ cp -a aptarchive/dists aptarchive/dists.good
+ insertpackage 'unstable' 'bar' 'i386' '1.0'
+ insertsource 'unstable' 'bar' 'i386' '1.0'
+ buildaptarchivefromfiles '+1 hour'
+
+ # produce an unsigned repository
+ find aptarchive \( -name 'Release.gpg' -o -name 'InRelease' \) -delete
+ testfailure aptget update --no-allow-insecure-repositories
+ testfileequal "$1" "$(listcurrentlistsdirectory)"
+
+ # signed but broken
+ signreleasefiles
+
+ onehashbroken() {
+ rm -rf rootdir/var/lib/apt/lists/partial
+ testfailure aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
+ # each file generates two messages with this string
+ testequal '2' grep --count 'Hash Sum mismatch' rootdir/tmp/testfailure.output
+ testfileequal "$1" "$(listcurrentlistsdirectory)"
+ }
+
+ breakfile aptarchive/dists/unstable/main/binary-i386/Packages
+ onehashbroken "$1"
+ restorefile aptarchive/dists/unstable/main/binary-i386/Packages
+
+ breakfile aptarchive/dists/unstable/main/source/Sources
+ onehashbroken "$1"
+ restorefile aptarchive/dists/unstable/main/source/Sources
+
+ rm -rf aptarchive/dists
+ cp -a aptarchive/dists.good aptarchive/dists
+}
+
+testsetup() {
+ msgmsg 'Test with no initial data over' "$1"
+ rm -rf rootdir/var/lib/apt/lists
+ mkdir -p rootdir/var/lib/apt/lists/partial
+ listcurrentlistsdirectory > listsdir.lst
+ testrun 'listsdir.lst'
+
+ msgmsg 'Test with initial data over' "$1"
+ rm -rf rootdir/var/lib/apt/lists
+ testsuccess aptget update -o Debug::pkgAcquire::Worker=1
+ listcurrentlistsdirectory > listsdir.lst
+ testrun 'listsdir.lst'
+}
+
+testsetup 'file'
+
+changetowebserver
+webserverconfig 'aptwebserver::support::modified-since' 'false' "$1"
+webserverconfig 'aptwebserver::support::last-modified' 'false' "$1" # curl is clever and sees hits here also
+webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'none' "$1"
+
+testsetup 'http'
+
+changetohttpswebserver
+
+testsetup 'https'
diff --git a/test/integration/test-apt-update-unauth b/test/integration/test-apt-update-unauth
new file mode 100755
index 0000000..ef1e4ec
--- /dev/null
+++ b/test/integration/test-apt-update-unauth
@@ -0,0 +1,80 @@
+#!/bin/sh
+#
+# Ensure that when going from unauthenticated to authenticated all
+# files are checked again
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+umask 022
+
+setupenvironment
+configarchitecture "i386"
+configcompression '.' 'xz'
+
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+insertsource 'unstable' 'foo' 'any' '1.0'
+
+setupaptarchive --no-update
+changetowebserver
+
+# FIXME:
+# - also check the unauth -> auth success case, i.e. that all files are
+# reverified
+runtest() {
+ # start unauthenticated
+ rm -rf rootdir/var/lib/apt/lists/
+ find aptarchive/ -name '*Release*' -delete
+
+ testwarning aptget update --allow-insecure-repositories
+
+ # become authenticated
+ generatereleasefiles
+ signreleasefiles
+
+ # move uncompressed away
+ mv aptarchive/dists/unstable/main/binary-i386/Packages \
+ aptarchive/dists/unstable/main/binary-i386/Packages.uncompressed
+
+ # and ensure we re-check the downloaded data
+
+ # change the local packages file
+ PKGS=$(ls rootdir/var/lib/apt/lists/*Packages*)
+ echo "meep" > $PKGS
+ listcurrentlistsdirectory > lists.before
+
+ # update and ensure all is reverted on the hashsum failure
+ testfailure aptget update -o Debug::Acquire::Transaction=1 -o Debug::pkgAcquire::Auth=1 -o Debug::pkgAcquire::worker=0 -o Debug::acquire::http=0
+
+ # ensure we have before what we have after
+ msgtest 'Check rollback on going from' 'unauth -> auth'
+ listcurrentlistsdirectory > lists.after
+ if cmp lists.before lists.after; then
+ msgpass
+ else
+ echo >&2
+ echo >&2 '### Output of previous apt-get update ###'
+ cat >&2 rootdir/tmp/testfailure.output || true
+ echo >&2 '### Changes in the lists-directory: ###'
+ diff -u >&2 lists.before lists.after || true
+ echo >&2 '### Contents of the lists-directory: ###'
+ ls -l rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists/partial || true
+ msgfail
+ fi
+
+ # move uncompressed back for release file
+ mv aptarchive/dists/unstable/main/binary-i386/Packages.uncompressed \
+ aptarchive/dists/unstable/main/binary-i386/Packages
+}
+
+for COMPRESSEDINDEXES in 'false' 'true'; do
+ echo "Acquire::GzipIndexes \"$COMPRESSEDINDEXES\";" > rootdir/etc/apt/apt.conf.d/compressindexes
+ if $COMPRESSEDINDEXES; then
+ msgmsg 'Run tests with GzipIndexes enabled'
+ else
+ msgmsg 'Run tests with GzipIndexes disabled'
+ fi
+ runtest
+done
diff --git a/test/integration/test-apt-update-weak-hashes b/test/integration/test-apt-update-weak-hashes
new file mode 100755
index 0000000..c44ab9a
--- /dev/null
+++ b/test/integration/test-apt-update-weak-hashes
@@ -0,0 +1,202 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+confighashes 'MD5'
+export APT_DONT_SIGN=''
+
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+insertsource 'unstable' 'foo' 'any' '1.0'
+
+setupaptarchive --no-update
+APTARCHIVE="$(readlink -f ./aptarchive)"
+
+testnopkg() {
+ testnopackage "$@"
+ testnosrcpackage "$@"
+}
+testbadpkg() {
+ testempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*InRelease' -o -name '*Release.gpg'
+ testnotempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*Release'
+ testnotempty apt show "$@"
+ testnotempty apt showsrc "$@"
+ testfailureequal "WARNING: The following packages cannot be authenticated!
+ $*
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y "$@"
+ testfailureequal "WARNING: The following packages cannot be authenticated!
+ $*
+E: Some packages could not be authenticated" aptget source -qq "$@"
+}
+
+testrun() {
+ local TYPE="$1"
+ local FILENAME="$2"
+ shift 2
+ local MANGLED="$(readlink -f ./rootdir)/var/lib/apt/lists/partial/$(echo "$FILENAME" | sed 's#/#_#g')"
+ msgmsg "$TYPE contains only weak hashes"
+ confighashes 'MD5'
+ generatereleasefiles
+ signreleasefiles
+ preparetest
+ if [ -z "$1" ]; then
+ listcurrentlistsdirectory > lists.before
+ testfailuremsg "W: No Hash entry in Release file ${MANGLED} which is considered strong enough for security purposes
+E: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." apt update
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testnopkg 'foo'
+ else
+ testwarningmsg "W: No Hash entry in Release file ${MANGLED} which is considered strong enough for security purposes
+W: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
+N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
+N: See apt-secure(8) manpage for repository creation and user configuration details." apt update "$@"
+ testbadpkg 'foo'
+ fi
+
+ msgmsg "$TYPE contains only weak hashes, but source allows weak"
+ sed -i 's#^deb\(-src\)\? #deb\1 [allow-weak=yes] #' rootdir/etc/apt/sources.list.d/*
+ genericprepare
+ testwarningmsg "W: No Hash entry in Release file ${MANGLED} which is considered strong enough for security purposes
+W: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
+N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
+N: See apt-secure(8) manpage for repository creation and user configuration details." apt update "$@"
+ testbadpkg 'foo'
+ sed -i 's#^deb\(-src\)\? \[allow-weak=yes\] #deb\1 #' rootdir/etc/apt/sources.list.d/*
+
+ msgmsg "$TYPE contains no hashes"
+ generatereleasefiles
+ sed -i -e '/^ / d' -e '/^MD5Sum:/ d' "$APTARCHIVE/dists/unstable/Release"
+ signreleasefiles
+ preparetest
+ if [ -z "$1" ]; then
+ listcurrentlistsdirectory > lists.before
+ testfailuremsg "W: No Hash entry in Release file ${MANGLED}
+E: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." apt update
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testnopkg 'foo'
+ else
+ testwarningmsg "W: No Hash entry in Release file ${MANGLED}
+W: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
+N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
+N: See apt-secure(8) manpage for repository creation and user configuration details." apt update "$@"
+ testbadpkg 'foo'
+ fi
+
+ msgmsg "$TYPE contains only weak hashes for some files"
+ confighashes 'MD5' 'SHA256'
+ generatereleasefiles
+ sed -i '/^ [0-9a-fA-Z]\{64\} .*Sources$/d' "$APTARCHIVE/dists/unstable/Release"
+ signreleasefiles
+ preparetest
+ if [ -z "$1" ]; then
+ testwarningmsg "W: Skipping acquire of configured file 'main/source/Sources' as repository 'file:${APTARCHIVE} unstable InRelease' provides only weak security information for it" apt update
+ testnosrcpackage foo
+ else
+ rm -f rootdir/var/lib/apt/lists/partial/*
+ testsuccess apt update "$@"
+ testnotempty apt showsrc foo
+ fi
+ testsuccess apt show foo
+}
+
+genericprepare() {
+ rm -rf rootdir/var/lib/apt/lists
+ mkdir -p rootdir/var/lib/apt/lists/partial
+ touch rootdir/var/lib/apt/lists/lock
+ local RELEASEGPG="$(readlink -f ./rootdir)/var/lib/apt/lists/partial/$(echo "${APTARCHIVE}/dists/unstable/Release.gpg" | sed 's#/#_#g')"
+ touch "$RELEASEGPG"
+ chmod 644 "$RELEASEGPG"
+ local INRELEASE="$(readlink -f ./rootdir)/var/lib/apt/lists/partial/$(echo "${APTARCHIVE}/dists/unstable/InRelease" | sed 's#/#_#g')"
+ touch "$INRELEASE"
+ chmod 644 "$INRELEASE"
+}
+preparetest() {
+ rm -f "${APTARCHIVE}/dists/unstable/Release" "${APTARCHIVE}/dists/unstable/Release.gpg"
+ genericprepare
+}
+testrun 'InRelease' "${APTARCHIVE}/dists/unstable/InRelease"
+testrun 'InRelease' "${APTARCHIVE}/dists/unstable/InRelease" --allow-weak-repositories -o APT::Get::List-Cleanup=0
+
+preparetest() {
+ rm -f "${APTARCHIVE}/dists/unstable/InRelease"
+ genericprepare
+}
+testrun 'Release+Release.gpg' "${APTARCHIVE}/dists/unstable/Release"
+testrun 'Release+Release.gpg' "${APTARCHIVE}/dists/unstable/Release" --allow-weak-repositories -o APT::Get::List-Cleanup=0
+
+preparetest() {
+ rm -f "${APTARCHIVE}/dists/unstable/InRelease" "${APTARCHIVE}/dists/unstable/Release.gpg"
+ genericprepare
+}
+
+msgmsg 'Moving between Release files with good and bad hashes'
+rm -rf rootdir/var/lib/apt/lists
+confighashes 'MD5'
+generatereleasefiles 'now - 7 days'
+signreleasefiles
+testfailure apt update
+testnopkg 'foo'
+testwarning apt update --allow-weak-repositories
+testbadpkg 'foo'
+
+confighashes 'MD5' 'SHA256'
+rm -rf aptarchive/dists
+insertpackage 'unstable' 'foo2' 'i386' '1.0'
+insertsource 'unstable' 'foo2' 'any' '1.0'
+setupaptarchive --no-update 'now - 5 days'
+testsuccess apt update
+testnopkg foo
+testnotempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*InRelease' -o -name '*Release.gpg'
+testnotempty apt show foo2
+testnotempty apt showsrc foo2
+
+confighashes 'MD5'
+rm -rf aptarchive/dists
+insertpackage 'unstable' 'foo3' 'i386' '1.0'
+insertsource 'unstable' 'foo3' 'any' '1.0'
+setupaptarchive --no-update 'now - 3 days'
+testfailure apt update
+testnopkg foo
+testnopkg foo3
+testnotempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*InRelease' -o -name '*Release.gpg'
+testnotempty apt show foo2
+testnotempty apt showsrc foo2
+testwarning apt update --allow-weak-repositories
+testnopkg foo2
+testbadpkg foo3
+
+msgmsg 'Working with packages guarded only by weak hashes'
+confighashes 'MD5'
+rm -rf aptarchive/dists
+buildsimplenativepackage 'foo4' 'i386' '1' 'unstable'
+setupaptarchive --no-update
+testfailure apt update
+confighashes 'SHA256'
+generatereleasefiles 'now - 1 day'
+signreleasefiles
+testsuccess apt update
+cd downloaded
+testfailure apt download foo4
+cp ../rootdir/tmp/testfailure.output download.output
+testfailure grep 'Hash Sum mismatch' download.output
+testsuccess grep 'Insufficient information' download.output
+
+testsuccess apt install foo4 -s
+testfailure apt install foo4 -dy
+cp ../rootdir/tmp/testfailure.output install.output
+testfailure grep 'Hash Sum mismatch' install.output
+testsuccess grep 'Insufficient information' download.output
+
+testsuccess apt source foo4
+cp ../rootdir/tmp/testsuccess.output source.output
+testsuccess grep 'Skipping download of file' source.output
+testfailure test -e foo4_1.dsc
+testfailure test -e foo4_1.tar.*
+cd ..
diff --git a/test/integration/test-architecture-specification-parsing b/test/integration/test-architecture-specification-parsing
new file mode 100755
index 0000000..2319938
--- /dev/null
+++ b/test/integration/test-architecture-specification-parsing
@@ -0,0 +1,120 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+
+# we need this construct here as it isn't really possible to fake native arch for dpkg-* tools
+NATIVE="$(command dpkg --print-architecture)"
+configarchitecture "${NATIVE}" 'armel'
+
+buildsimplenativepackage 'pkg-arch-foo' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [${NATIVE} !${NATIVE}]
+Depends: foo [${NATIVE} !${NATIVE}]"
+buildsimplenativepackage 'pkg-arch-no-foo' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [!${NATIVE} ${NATIVE}]
+Depends: foo [!${NATIVE} ${NATIVE}]"
+buildsimplenativepackage 'pkg-arch-foo-unrelated-no' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [!someos-any ${NATIVE}]
+Depends: foo [!someos-any ${NATIVE}]"
+buildsimplenativepackage 'pkg-arch-foo-unrelated-no2' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [${NATIVE} !someos-any]
+Depends: foo [${NATIVE} !someos-any]"
+buildsimplenativepackage 'no-depends' 'armel' '1.0' 'stable' 'Build-Depends: foo [armeb], bar [arm]
+Depends: foo [armeb], bar [arm]'
+
+buildsimplenativepackage 'foo' "$NATIVE" '1.0' 'stable'
+
+insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign'
+
+setupaptarchive
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo pkg-arch-foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 stable [${NATIVE}])
+Inst pkg-arch-foo (1.0 stable [${NATIVE}])
+Conf foo (1.0 stable [${NATIVE}])
+Conf pkg-arch-foo (1.0 stable [${NATIVE}])" aptget install pkg-arch-foo -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ pkg-arch-no-foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst pkg-arch-no-foo (1.0 stable [${NATIVE}])
+Conf pkg-arch-no-foo (1.0 stable [${NATIVE}])" aptget install pkg-arch-no-foo -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo pkg-arch-foo-unrelated-no
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 stable [${NATIVE}])
+Inst pkg-arch-foo-unrelated-no (1.0 stable [${NATIVE}])
+Conf foo (1.0 stable [${NATIVE}])
+Conf pkg-arch-foo-unrelated-no (1.0 stable [${NATIVE}])" aptget install pkg-arch-foo-unrelated-no -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo pkg-arch-foo-unrelated-no2
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 stable [${NATIVE}])
+Inst pkg-arch-foo-unrelated-no2 (1.0 stable [${NATIVE}])
+Conf foo (1.0 stable [${NATIVE}])
+Conf pkg-arch-foo-unrelated-no2 (1.0 stable [${NATIVE}])" aptget install pkg-arch-foo-unrelated-no2 -s
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 stable [${NATIVE}])
+Conf foo (1.0 stable [${NATIVE}])" aptget build-dep pkg-arch-foo -s
+
+testsuccessequal 'Reading package lists...
+pkg-arch-no-foo has no build depends.
+Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget build-dep pkg-arch-no-foo -s
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 stable [${NATIVE}])
+Conf foo (1.0 stable [${NATIVE}])" aptget build-dep pkg-arch-foo-unrelated-no -s
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 stable [${NATIVE}])
+Conf foo (1.0 stable [${NATIVE}])" aptget build-dep pkg-arch-foo-unrelated-no2 -s
+
+testsuccessequal 'Reading package lists...
+no-depends has no build depends.
+Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget build-dep no-depends -s
+
+# this is not really testing APT - more that dpkg is in line with us
+configarchitecture 'amd64' 'armel'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ no-depends:armel
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst no-depends:armel (1.0 stable [armel])
+Conf no-depends:armel (1.0 stable [armel])' aptget install no-depends -s
diff --git a/test/integration/test-authentication-basic b/test/integration/test-authentication-basic
new file mode 100755
index 0000000..211c73e
--- /dev/null
+++ b/test/integration/test-authentication-basic
@@ -0,0 +1,127 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'foo' 'all' '1'
+setupaptarchive --no-update
+
+changetohttpswebserver --authorization="$(printf '%s' 'star@irc:hunter2' | base64 )"
+
+echo 'See, when YOU type hunter2, it shows to us as *******' > aptarchive/bash
+echo 'Debug::Acquire::netrc "true";' > rootdir/etc/apt/apt.conf.d/netrcdebug.conf
+
+testauthfailure() {
+ testfailure apthelper download-file "${1}/bash" ./downloaded/bash
+ # crappy test, but http and https output are wastely different…
+ testsuccess grep 401 rootdir/tmp/testfailure.output
+ testfailure test -s ./downloaded/bash
+}
+
+testauthsuccess() {
+ testsuccess apthelper download-file "${1}/bash" ./downloaded/bash
+ testfileequal ./downloaded/bash "$(cat aptarchive/bash)"
+ testfilestats ./downloaded/bash '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644"
+ rm -f ./downloaded/bash
+
+ # lets see if got/retains acceptable permissions
+ if [ -n "$AUTHCONF" ]; then
+ if [ "$(id -u)" = '0' ]; then
+ testfilestats "$AUTHCONF" '%U:%G:%a' '=' "_apt:$(id -gn):600"
+ else
+ testfilestats "$AUTHCONF" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:600"
+ fi
+ fi
+
+ rm -rf rootdir/var/lib/apt/lists
+ if expr index "$1" '@' >/dev/null; then
+ testsuccesswithnotice aptget update
+ else
+ testsuccess aptget update
+ fi
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Conf foo (1 unstable [all])' aptget install foo -s
+}
+
+authfile() {
+ local AUTHCONF="${2:-rootdir/etc/apt/auth.conf}"
+ mkdir -p "$(dirname "$AUTHCONF")"
+ rm -f "$AUTHCONF"
+ printf '%s' "$1" > "$AUTHCONF"
+ chmod 600 "$AUTHCONF"
+}
+
+runtest() {
+ # unauthorized fails
+ authfile ''
+ testauthfailure "$1"
+
+ # good auth
+ authfile 'machine localhost
+login star@irc
+password hunter2'
+ testauthsuccess "$1"
+
+ # bad auth
+ authfile 'machine localhost
+login anonymous
+password hunter2'
+ testauthfailure "$1"
+
+ # 2 stanzas: unmatching + good auth
+ authfile 'machine debian.org
+login debian
+password jessie
+
+machine localhost
+login star@irc
+password hunter2'
+ testauthsuccess "$1"
+
+ # delete file, make sure it fails; add auth.conf.d snippet, works again.
+ rm rootdir/etc/apt/auth.conf
+ testauthfailure "$1"
+
+ authfile 'machine localhost
+login star@irc
+password hunter2' rootdir/etc/apt/auth.conf.d/myauth.conf
+ testauthsuccess "$1"
+ rm rootdir/etc/apt/auth.conf.d/myauth.conf
+}
+
+msgmsg 'server basic auth'
+rewritesourceslist "http://localhost:${APTHTTPPORT}"
+runtest "http://localhost:${APTHTTPPORT}"
+rewritesourceslist "http://star%40irc:hunter2@localhost:${APTHTTPPORT}"
+authfile ''
+testauthsuccess "http://star%40irc:hunter2@localhost:${APTHTTPPORT}"
+rewritesourceslist "https://localhost:${APTHTTPSPORT}"
+runtest "https://localhost:${APTHTTPSPORT}"
+rewritesourceslist "http://localhost:${APTHTTPPORT}"
+
+msgmsg 'proxy to server basic auth'
+webserverconfig 'aptwebserver::request::absolute' 'uri'
+# using ip instead of localhost avoids picking up the auth for the repo
+# for the proxy as well as we serve them both over the same server…
+export http_proxy="http://127.0.0.1:${APTHTTPPORT}"
+runtest "http://localhost:${APTHTTPPORT}"
+unset http_proxy
+
+msgmsg 'proxy basic auth to server basic auth'
+webserverconfig 'aptwebserver::proxy-authorization' "$(printf 'moon:deer2' | base64)"
+export http_proxy="http://moon:deer2@localhost:${APTHTTPPORT}"
+runtest "http://localhost:${APTHTTPPORT}"
+
+msgmsg 'proxy basic auth to server'
+authfile ''
+webserverconfig 'aptwebserver::authorization' ''
+testauthsuccess "http://localhost:${APTHTTPPORT}"
diff --git a/test/integration/test-bug-254770-segfault-if-cache-not-buildable b/test/integration/test-bug-254770-segfault-if-cache-not-buildable
new file mode 100755
index 0000000..6f6e1ab
--- /dev/null
+++ b/test/integration/test-bug-254770-segfault-if-cache-not-buildable
@@ -0,0 +1,64 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+msgtest 'Test run as' 'non-root'
+if [ "$(id -u)" = '0' ]; then
+ msgskip 'root has by definition no problems accessing files'
+ exit 0
+else
+ msgpass
+fi
+
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+addtrap 'prefix' 'chmod a+x rootdir/var/lib/dpkg;'
+chmod a-x rootdir/var/lib/dpkg
+
+testsegfault() {
+ msgtest "No segfault in" "$*"
+ local TEST="$("$@" 2>&1 | grep -v 'E:')"
+ if [ -z "$TEST" ]; then
+ msgpass
+ else
+ echo
+ echo "$TEST"
+ msgfail
+ fi
+}
+
+echo 'quiet 2;' > rootdir/etc/apt/apt.conf.d/00be-quiet
+
+testsegfault aptcache gencaches
+testsegfault aptcache showpkg
+testsegfault aptcache showsrc
+testsegfault aptcache stats
+testsegfault aptcache dump
+testsegfault aptcache dumpavail
+testsegfault aptcache unmet
+testsegfault aptcache search
+testsegfault aptcache show apt
+testsegfault aptcache depends apt
+testsegfault aptcache rdepends apt
+testsegfault aptcache pkgnames apt
+testsegfault aptcache dotty apt
+testsegfault aptcache xvcg apt
+testsegfault aptcache policy apt
+
+testsegfault aptget update
+testsegfault aptget upgrade
+testsegfault aptget dselect-upgrade
+testsegfault aptget dist-upgrade
+testsegfault aptget install apt
+testsegfault aptget remove apt
+testsegfault aptget purge apt
+testsegfault aptget source apt
+testsegfault aptget build-dep apt
+testsegfault aptget check
+testsegfault aptget clean
+testsegfault aptget autoclean
+testsegfault aptget autoremove
diff --git a/test/integration/test-bug-330162-encoded-tar-header b/test/integration/test-bug-330162-encoded-tar-header
new file mode 100755
index 0000000..b779bbc
--- /dev/null
+++ b/test/integration/test-bug-330162-encoded-tar-header
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+msgtest 'Test apt-ftparchive with encoded tar header package'
+cp "$TESTDIR/deb-bug-330162-encoded-tar-header.deb" aptarchive/
+testsuccess aptftparchive packages aptarchive/
diff --git a/test/integration/test-bug-407511-fail-invalid-default-release b/test/integration/test-bug-407511-fail-invalid-default-release
new file mode 100755
index 0000000..0e1b5ef
--- /dev/null
+++ b/test/integration/test-bug-407511-fail-invalid-default-release
@@ -0,0 +1,66 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'cool' 'all' '1.0-1'
+
+getcodenamefromsuite() {
+ if [ "$SUITE" = 'unstable' ]; then
+ echo -n 'sid'
+ else
+ echo -n "$SUITE"
+ fi
+}
+getreleaseversionfromsuite() {
+ if [ "$SUITE" = 'unstable' ]; then
+ echo -n '42.0'
+ else
+ echo -n '0.8.15'
+ fi
+}
+
+getlabelfromsuite() {
+ if [ "$SUITE" = 'unstable' ]; then
+ echo -n 'UnstableTestcases'
+ else
+ echo -n 'Testcases'
+ fi
+}
+
+setupaptarchive
+
+passdist() {
+ msgtest 'Test that target-release is accepted' $1
+ testsuccess --nomsg aptget dist-upgrade -t $1
+ msgtest 'Test that target-release pins with' $1
+ aptcache policy -t $1 | grep -q ' 990' && msgpass || msgfail
+}
+
+faildist() {
+ msgtest 'Test that target-release is refused' $1
+ testfailure --nomsg aptget dist-upgrade -t $1
+}
+
+msgtest 'Test that no default-release is active in this test' 'setup'
+aptcache policy | grep -q ' 990' && msgfall || msgpass
+
+passdist unstable
+passdist sid
+faildist sidd
+faildist stable
+passdist 42.0
+passdist 42.*
+passdist 42*
+passdist 4*.0
+faildist 21.0
+faildist 21*
+# we accept, but don't validate the following
+passdist a=unstable
+passdist n=sid
+passdist v=42.0
+passdist c=main
+passdist l=UnstableTestcases
diff --git a/test/integration/test-bug-470115-new-and-tighten-recommends b/test/integration/test-bug-470115-new-and-tighten-recommends
new file mode 100755
index 0000000..f27990e
--- /dev/null
+++ b/test/integration/test-bug-470115-new-and-tighten-recommends
@@ -0,0 +1,174 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertinstalledpackage 'cool' 'all' '1'
+insertinstalledpackage 'stuff' 'all' '1'
+insertinstalledpackage 'coolstuff' 'all' '1'
+
+insertpackage 'unstable' 'cool' 'all' '2'
+insertpackage 'unstable' 'stuff' 'all' '2'
+insertpackage 'unstable' 'coolstuff' 'all' '2'
+insertpackage 'unstable' 'super' 'all' '2'
+
+insertinstalledpackage 'tighten-cool' 'all' '1' 'Recommends: cool (>= 1)'
+insertpackage 'unstable' 'tighten-cool' 'all' '2' 'Recommends: cool (>= 2)'
+
+insertinstalledpackage 'tighten-coolorstuff' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 1)'
+insertpackage 'unstable' 'tighten-coolorstuff' 'all' '2' 'Recommends: stuff (>= 2) | cool (>= 2)'
+
+insertinstalledpackage 'tighten-coolorstuff2' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 1)'
+insertpackage 'unstable' 'tighten-coolorstuff2' 'all' '2' 'Recommends: stuff2 (>= 2) | cool (>= 2)'
+
+insertinstalledpackage 'newrec-cool' 'all' '1'
+insertpackage 'unstable' 'newrec-cool' 'all' '2' 'Recommends: cool (>= 2)'
+
+insertinstalledpackage 'newrec-super' 'all' '1'
+insertpackage 'unstable' 'newrec-super' 'all' '2' 'Recommends: super'
+
+insertinstalledpackage 'newrec-coolorstuff' 'all' '1'
+insertpackage 'unstable' 'newrec-coolorstuff' 'all' '2' 'Recommends: cool (>= 2) | stuff (>= 2)'
+
+insertinstalledpackage 'cool-gone' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 2)'
+insertpackage 'unstable' 'cool-gone' 'all' '2' 'Recommends: stuff (>= 2)'
+
+insertinstalledpackage 'super-overtake' 'all' '1' 'Recommends: cool | super, stuff | super'
+insertpackage 'unstable' 'super-overtake' 'all' '2' 'Recommends: stuff (>= 3) | super, super | cool (>= 2)'
+
+insertinstalledpackage 'upgrade-over-new' 'all' '1' 'Recommends: cool'
+insertpackage 'unstable' 'upgrade-over-new' 'all' '2' 'Recommends: cool (>= 2) | super'
+
+insertinstalledpackage 'now-satisfiable' 'all' '1' 'Recommends: cool (>= 3)'
+insertpackage 'unstable' 'now-satisfiable' 'all' '2' 'Recommends: cool (>= 2)'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ cool
+The following packages will be upgraded:
+ cool tighten-cool
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst tighten-cool [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf tighten-cool (2 unstable [all])' aptget install tighten-cool -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ stuff
+The following packages will be upgraded:
+ stuff tighten-coolorstuff
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst stuff [1] (2 unstable [all])
+Inst tighten-coolorstuff [1] (2 unstable [all])
+Conf stuff (2 unstable [all])
+Conf tighten-coolorstuff (2 unstable [all])' aptget install tighten-coolorstuff -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ cool
+The following packages will be upgraded:
+ cool tighten-coolorstuff2
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst tighten-coolorstuff2 [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf tighten-coolorstuff2 (2 unstable [all])' aptget install tighten-coolorstuff2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ cool
+The following packages will be upgraded:
+ cool newrec-cool
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst newrec-cool [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf newrec-cool (2 unstable [all])' aptget install newrec-cool -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ super
+The following NEW packages will be installed:
+ super
+The following packages will be upgraded:
+ newrec-super
+1 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
+Inst newrec-super [1] (2 unstable [all])
+Inst super (2 unstable [all])
+Conf newrec-super (2 unstable [all])
+Conf super (2 unstable [all])' aptget install newrec-super -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ cool
+The following packages will be upgraded:
+ cool newrec-coolorstuff
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst newrec-coolorstuff [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf newrec-coolorstuff (2 unstable [all])' aptget install newrec-coolorstuff -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ stuff
+The following packages will be upgraded:
+ cool-gone stuff
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool-gone [1] (2 unstable [all])
+Inst stuff [1] (2 unstable [all])
+Conf cool-gone (2 unstable [all])
+Conf stuff (2 unstable [all])' aptget install cool-gone -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ super
+The following NEW packages will be installed:
+ super
+The following packages will be upgraded:
+ super-overtake
+1 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
+Inst super (2 unstable [all])
+Inst super-overtake [1] (2 unstable [all])
+Conf super (2 unstable [all])
+Conf super-overtake (2 unstable [all])' aptget install super-overtake -s
+
+# if super would be in front, we would get a new here as it is new and
+# the first option in an or-group should be the preferred one…
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ cool
+The following packages will be upgraded:
+ cool upgrade-over-new
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst upgrade-over-new [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf upgrade-over-new (2 unstable [all])' aptget install upgrade-over-new -s
+
+# the recommends wasn't used before so while we could do it now,
+# the user doesn't seem to need it so avoid upgrading it
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Recommended packages:
+ cool
+The following packages will be upgraded:
+ now-satisfiable
+1 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.
+Inst now-satisfiable [1] (2 unstable [all])
+Conf now-satisfiable (2 unstable [all])' aptget install now-satisfiable -s
diff --git a/test/integration/test-bug-507998-dist-upgrade-recommends b/test/integration/test-bug-507998-dist-upgrade-recommends
new file mode 100755
index 0000000..b546874
--- /dev/null
+++ b/test/integration/test-bug-507998-dist-upgrade-recommends
@@ -0,0 +1,26 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'tshark' 'amd64' '1.0.4-1' 'Depends: wireshark-common'
+insertinstalledpackage 'wireshark-common' 'amd64' '1.0.4-1' 'Recommends: wireshark (>= 1.0.4-1) | tshark (>= 1.0.4-1)'
+insertpackage 'unstable' 'tshark' 'amd64' '1.2.1-2' 'Depends: wireshark-common (= 1.2.1-2)'
+insertpackage 'unstable' 'wireshark-common' 'amd64' '1.2.1-2' 'Recommends: wireshark (>= 1.2.1-2) | tshark (>= 1.2.1-2)'
+insertpackage 'unstable' 'wireshark' 'amd64' '1.2.1-2' 'Depends: wireshark-common (= 1.2.1-2)'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ tshark wireshark-common
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst wireshark-common [1.0.4-1] (1.2.1-2 unstable [amd64])
+Inst tshark [1.0.4-1] (1.2.1-2 unstable [amd64])
+Conf wireshark-common (1.2.1-2 unstable [amd64])
+Conf tshark (1.2.1-2 unstable [amd64])' aptget dist-upgrade -s
diff --git a/test/integration/test-bug-543966-downgrade-below-1000-pin b/test/integration/test-bug-543966-downgrade-below-1000-pin
new file mode 100755
index 0000000..db81b7c
--- /dev/null
+++ b/test/integration/test-bug-543966-downgrade-below-1000-pin
@@ -0,0 +1,90 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'base-files' 'all' '5.0.0'
+insertinstalledpackage 'base-files' 'all' '5.0.0-1'
+
+setupaptarchive
+
+STATUS=$(readlink -f rootdir/var/lib/dpkg/status)
+APTARCHIVE="$(readlink -f aptarchive)"
+
+testsuccessequal "base-files:
+ Installed: 5.0.0-1
+ Candidate: 5.0.0-1
+ Version table:
+ *** 5.0.0-1 100
+ 100 $STATUS
+ 5.0.0 500
+ 500 file:${APTARCHIVE} unstable/main all Packages" aptcache policy base-files -o apt::pin=0
+
+writepin() {
+ echo "Package: $1
+Pin: release a=unstable
+Pin-Priority: $2" > rootdir/etc/apt/preferences
+}
+
+
+
+testpinning() {
+ local PKGPINPRIO=''
+ local REPPINPRIO=''
+ if [ "$1" != '*' ]; then
+ PKGPINPRIO=''
+ REPPINPRIO=' 500'
+ fi
+ writepin "$1" '99'
+ testsuccessequal "base-files:
+ Installed: 5.0.0-1
+ Candidate: 5.0.0-1
+ Version table:
+ *** 5.0.0-1 100
+ 100 $STATUS
+ 5.0.0 ${PKGPINPRIO:-99}
+ ${REPPINPRIO:- 99} file:${APTARCHIVE} unstable/main all Packages" aptcache policy base-files -o apt::pin=99
+
+ writepin "$1" '100'
+ testsuccessequal "base-files:
+ Installed: 5.0.0-1
+ Candidate: 5.0.0-1
+ Version table:
+ *** 5.0.0-1 100
+ 100 $STATUS
+ 5.0.0 ${PKGPINPRIO:-100}
+ ${REPPINPRIO:- 100} file:${APTARCHIVE} unstable/main all Packages" aptcache policy base-files -o apt::pin=100
+
+ writepin "$1" '999'
+ testsuccessequal "base-files:
+ Installed: 5.0.0-1
+ Candidate: 5.0.0-1
+ Version table:
+ *** 5.0.0-1 100
+ 100 $STATUS
+ 5.0.0 ${PKGPINPRIO:-999}
+ ${REPPINPRIO:- 999} file:${APTARCHIVE} unstable/main all Packages" aptcache policy base-files -o apt::pin=999
+
+ writepin "$1" '1000'
+ testsuccessequal "base-files:
+ Installed: 5.0.0-1
+ Candidate: 5.0.0
+ Version table:
+ *** 5.0.0-1 100
+ 100 $STATUS
+ 5.0.0 ${PKGPINPRIO:-1000}
+ ${REPPINPRIO:-1000} file:${APTARCHIVE} unstable/main all Packages" aptcache policy base-files -o apt::pin=1000
+}
+
+msgmsg 'Tests with generic-form pin'
+testpinning '*'
+msgmsg 'Tests with specific-form pin'
+testpinning 'base-files'
+msgmsg 'Tests with specific-form pin with glob'
+testpinning 'base-fil*'
+msgmsg 'Tests with specific-form pin with regex'
+testpinning '/^base-f[iI]les$/'
diff --git a/test/integration/test-bug-549968-install-depends-of-not-installed b/test/integration/test-bug-549968-install-depends-of-not-installed
new file mode 100755
index 0000000..fab67c4
--- /dev/null
+++ b/test/integration/test-bug-549968-install-depends-of-not-installed
@@ -0,0 +1,28 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'libc6' 'all' '1.0'
+insertpackage 'unstable' 'coolstuff' 'all' '1.0' 'Recommends: extracoolstuff'
+insertpackage 'unstable' 'extracoolstuff' 'all' '1.0' 'Depends: libc6'
+
+setupaptarchive
+
+# We check the Markers here as the autoremove nuker will also
+# prevent it, but to late - its better to fail earlier
+testsuccessequal "Reading package lists...
+Building dependency tree...
+ MarkInstall coolstuff:i386 < none -> 1.0 @un puN IPb > FU=1
+ Ignore MarkInstall of extracoolstuff:i386 < none | 1.0 @hn puH > as its mode (Keep) is protected
+Package 'extracoolstuff' is not installed, so not removed
+Recommended packages:
+ extracoolstuff
+The following NEW packages will be installed:
+ coolstuff
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst coolstuff (1.0 unstable [all])
+Conf coolstuff (1.0 unstable [all])" aptget install coolstuff extracoolstuff- -o Debug::pkgDepCache::Marker=1 -s
diff --git a/test/integration/test-bug-590041-prefer-non-virtual-packages b/test/integration/test-bug-590041-prefer-non-virtual-packages
new file mode 100755
index 0000000..1b1e3aa
--- /dev/null
+++ b/test/integration/test-bug-590041-prefer-non-virtual-packages
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386' 'armel'
+
+pkglibc6="Package: libc6
+Architecture: armel
+Version: 2.11.2-2~0.3
+Description: Embedded GNU C Library: Shared libraries
+Description-md5: b8c1e0561b75e2dc6b6482a99079c3e4
+Filename: pool/main/e/eglibc/libc6_2.11.2-2_armel.deb
+Installed-Size: 9740
+MD5sum: f5b878ce5fb8aa01a7927fa1460df537
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Priority: required
+SHA1: 0464d597dfbf949e8c17a42325b1f93fb4914afd
+SHA256: faca4a3d9ccff57568abf41f6cb81ddd835be7b5d8b0161e2d5f9a7f26aae3c0
+Section: libs
+Size: 4178958
+"
+
+pkglibdb1="Package: libdb1
+Architecture: i386
+Version: 2.1.3-13~0.3
+Replaces: libc6 (<< 2.2.5-13~0.3)
+Description: The Berkeley database routines [glibc 2.0/2.1 compatibility]
+Description-md5: de1876f7fe7f7709a110875e145e38a8
+Filename: pool/main/d/db1-compat/libdb1-compat_2.1.3-13_armel.deb
+Installed-Size: 136
+MD5sum: 4043f176ab2b40b0c01bc1211b8c103c
+Maintainer: Colin Watson <cjwatson@debian.org>
+Priority: extra
+SHA1: b9396fdd2e3e8d1d4ba9e74e7346075852d85666
+SHA256: f17decaa28d1db3eeb9eb17bebe50d437d293a509bcdd7cdfd3ebb56f5de3cea
+Section: oldlibs
+Size: 44168
+"
+
+cat >aptarchive/Packages <<EOF
+$pkglibc6
+$pkglibdb1
+EOF
+
+setupaptarchive
+
+testnopackage libc6:i386
+testsuccessequal "$pkglibc6" aptcache show libc6:armel
+testsuccessequal "$pkglibc6" aptcache show libc6
+testsuccessequal "$pkglibdb1" aptcache show libdb1:i386
+testnopackage libdb1:armel
+testsuccessequal "$pkglibdb1" aptcache show libdb1
diff --git a/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order b/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order
new file mode 100755
index 0000000..7610752
--- /dev/null
+++ b/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order
@@ -0,0 +1,96 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+pkgbasefile="Package: base-files
+Status: install ok installed
+Essential: yes
+Priority: required
+Section: admin
+Installed-Size: 472
+Maintainer: Santiago Vila <sanvila@debian.org>
+Architecture: i386
+Version: 5.8
+Replaces: base, dpkg (<= 1.15.0), miscutils
+Provides: base
+Filename: pool/main/b/base-files/base-files_5.8_i386.deb
+Size: 73986
+MD5sum: 8489687ce10e656babd467c9ee389349
+Description-de: Verschiedene Dateien für das Basis-System von Debian"
+
+predependsgawk() {
+ cp "$TESTDIR/$(echo "$(basename "$0")" | sed 's/test-/status-/')" rootdir/var/lib/dpkg/status
+ echo "$pkgbasefile
+Pre-Depends: $1
+" >> rootdir/var/lib/dpkg/status
+ testsuccessequal "Inst gawk (1:3.1.7.dfsg-5 localhost [i386])
+Conf gawk (1:3.1.7.dfsg-5 localhost [i386])
+Remv mawk [1.3.3-15]" aptget install gawk mawk- -sqq -o PreDepends=$(echo "$1" | sed 's/ //g')
+}
+
+predependsgawk "gawk | mawk"
+predependsgawk "mawk | gawk"
+
+predependsgawk "aawk | mawk | gawk"
+predependsgawk "aawk | gawk | mawk"
+
+predependsgawk "gawk | awk"
+predependsgawk "aawk | gawk | awk"
+
+predependsgawk "mawk | awk"
+
+predependsgawk "awk | gawk"
+predependsgawk "awk | gawk | aawk"
+
+predependsgawk "awk | mawk"
+
+predependsgawk "aawk | awk"
+predependsgawk "awk | aawk"
+
+predependsgawk "awk"
+
+predependsgawk2() {
+ cp "$TESTDIR/$(echo "$(basename "$0")" | sed 's/test-/status-/')" rootdir/var/lib/dpkg/status
+ echo "$pkgbasefile
+Pre-Depends: $1
+" >> rootdir/var/lib/dpkg/status
+ testequalor2 "Inst coolstuff (1-1 localhost [all])
+Conf coolstuff (1-1 localhost [all])
+Inst gawk2 (1:3.1.7.dfsg-5 localhost [i386])
+Conf gawk2 (1:3.1.7.dfsg-5 localhost [i386])
+Remv mawk [1.3.3-15]" "Inst coolstuff (1-1 localhost [all])
+Inst gawk2 (1:3.1.7.dfsg-5 localhost [i386])
+Conf coolstuff (1-1 localhost [all])
+Conf gawk2 (1:3.1.7.dfsg-5 localhost [i386])
+Remv mawk [1.3.3-15]" aptget install gawk2 mawk- -sqq -o PreDepends=$(echo "$1" | sed 's/ //g')
+}
+
+predependsgawk2 "gawk2 | mawk"
+predependsgawk2 "mawk | gawk2"
+
+predependsgawk2 "aawk | mawk | gawk2"
+predependsgawk2 "aawk | gawk2 | mawk"
+
+predependsgawk2 "gawk2 | awk"
+predependsgawk2 "aawk | gawk2 | awk"
+
+predependsgawk2 "mawk | awk"
+
+predependsgawk2 "awk | gawk2"
+predependsgawk2 "awk | gawk2 | aawk"
+
+predependsgawk2 "awk | mawk"
+
+predependsgawk2 "aawk | awk"
+predependsgawk2 "awk | aawk"
+
+predependsgawk2 "awk"
+
+
+# aptget install gawk2 mawk- -s #-o Debug::pkgOrderList=1 #-o Debug::pkgPackageManager=1
diff --git a/test/integration/test-bug-591882-conkeror b/test/integration/test-bug-591882-conkeror
new file mode 100755
index 0000000..6b90343
--- /dev/null
+++ b/test/integration/test-bug-591882-conkeror
@@ -0,0 +1,77 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+UPGRADEFAIL="Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ conkeror libdatrie0 libkrb53 libxcb-xlib0 xulrunner-1.9
+The following NEW packages will be installed:
+ gcc-4.4-base libavahi-client3 libavahi-common-data libavahi-common3 libc-bin
+ libdatrie1 libdb4.7 libdb4.8 libdbus-1-3 libgssapi-krb5-2 libjasper1
+ libk5crypto3 libkrb5-3 libkrb5support0 liblzma2 libpam-modules libpam0g
+ libuuid1 libxcb-atom1 libxcb-aux0 libxcb-event1 libxml2 passwd
+ sensible-utils shared-mime-info xz-utils
+The following packages will be upgraded:
+ coreutils debconf debconf-i18n debianutils defoma dpkg file fontconfig
+ fontconfig-config libacl1 libatk1.0-0 libattr1 libbz2-1.0 libc6 libcairo2
+ libcomerr2 libcups2 libexpat1 libfontconfig1 libfreetype6 libgcc1
+ libgcrypt11 libgdbm3 libglib2.0-0 libgnutls26 libgpg-error0 libgtk2.0-0
+ libgtk2.0-common libhunspell-1.2-0 libice6 libjpeg62 libkeyutils1
+ liblocale-gettext-perl libmagic1 libncurses5 libnewt0.52 libnspr4-0d
+ libnss3-1d libpango1.0-0 libpango1.0-common libpcre3 libpixman-1-0
+ libpng12-0 libpopt0 libselinux1 libslang2 libsm6 libsqlite3-0
+ libstartup-notification0 libstdc++6 libtasn1-3 libtext-charwidth-perl
+ libtext-iconv-perl libtext-wrapi18n-perl libthai-data libthai0 libtiff4
+ libx11-6 libx11-data libxau6 libxcb-render-util0 libxcb-render0 libxcb1
+ libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxft2
+ libxi6 libxinerama1 libxrandr2 libxrender1 libxt6 lsb-base ncurses-bin perl
+ perl-base perl-modules readline-common sed ttf-dejavu-core ucf whiptail
+ x11-common zlib1g
+87 upgraded, 26 newly installed, 5 to remove and 0 not upgraded.
+Need to get 0 B/54.4 MB of archives.
+After this operation, 12.4 MB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation."
+
+UPGRADESUCCESS="Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ libdatrie0 libkrb53 libxcb-xlib0 xulrunner-1.9
+The following NEW packages will be installed:
+ gcc-4.4-base libasound2 libavahi-client3 libavahi-common-data
+ libavahi-common3 libc-bin libdatrie1 libdb4.7 libdb4.8 libdbus-1-3
+ libgssapi-krb5-2 libjasper1 libk5crypto3 libkrb5-3 libkrb5support0 liblzma2
+ libmozjs2d libpam-modules libpam0g libreadline6 libuuid1 libxcb-atom1
+ libxcb-aux0 libxcb-event1 libxml2 passwd sensible-utils shared-mime-info
+ xulrunner-1.9.1 xz-utils
+The following packages will be upgraded:
+ conkeror coreutils debconf debconf-i18n debianutils defoma dpkg file
+ fontconfig fontconfig-config libacl1 libatk1.0-0 libattr1 libbz2-1.0 libc6
+ libcairo2 libcomerr2 libcups2 libexpat1 libfontconfig1 libfreetype6 libgcc1
+ libgcrypt11 libgdbm3 libglib2.0-0 libgnutls26 libgpg-error0 libgtk2.0-0
+ libgtk2.0-common libhunspell-1.2-0 libice6 libjpeg62 libkeyutils1
+ liblocale-gettext-perl libmagic1 libncurses5 libnewt0.52 libnspr4-0d
+ libnss3-1d libpango1.0-0 libpango1.0-common libpcre3 libpixman-1-0
+ libpng12-0 libpopt0 libselinux1 libslang2 libsm6 libsqlite3-0
+ libstartup-notification0 libstdc++6 libtasn1-3 libtext-charwidth-perl
+ libtext-iconv-perl libtext-wrapi18n-perl libthai-data libthai0 libtiff4
+ libx11-6 libx11-data libxau6 libxcb-render-util0 libxcb-render0 libxcb1
+ libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxft2
+ libxi6 libxinerama1 libxrandr2 libxrender1 libxt6 lsb-base ncurses-bin perl
+ perl-base perl-modules readline-common sed ttf-dejavu-core ucf whiptail
+ x11-common zlib1g
+88 upgraded, 30 newly installed, 4 to remove and 0 not upgraded.
+Need to get 0 B/62.9 MB of archives.
+After this operation, 36.0 MB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation."
+
+# Test that the old behavior can be restored with the option
+testfailureequal "$UPGRADEFAIL" aptget dist-upgrade --trivial-only -o pkgProblemResolver::FixByInstall=0
+testfailureequal "$UPGRADESUCCESS" aptget dist-upgrade --trivial-only #-o pkgProblemResolver::FixByInstall=0
diff --git a/test/integration/test-bug-593360-modifiers-in-names b/test/integration/test-bug-593360-modifiers-in-names
new file mode 100755
index 0000000..dc9a152
--- /dev/null
+++ b/test/integration/test-bug-593360-modifiers-in-names
@@ -0,0 +1,69 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ g++
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst g++ (4:4.4.5-1 localhost [i386])
+Conf g++ (4:4.4.5-1 localhost [i386])' aptget install g++ -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'g++' is not installed, so not removed
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove g++ -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ g++
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst g++ (4:4.4.5-1 localhost [i386])
+Conf g++ (4:4.4.5-1 localhost [i386])' aptget install g+++ -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ g++
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst g++ (4:4.4.5-1 localhost [i386])
+Conf g++ (4:4.4.5-1 localhost [i386])' aptget purge g+++ -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ apt
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst apt (0.8.8 localhost [all])
+Conf apt (0.8.8 localhost [all])' aptget install apt -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ apt+
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst apt+ (0.8.8 localhost [all])
+Conf apt+ (0.8.8 localhost [all])' aptget install apt+ -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ apt+
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst apt+ (0.8.8 localhost [all])
+Conf apt+ (0.8.8 localhost [all])' aptget install apt++ -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ apt+
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst apt+ (0.8.8 localhost [all])
+Conf apt+ (0.8.8 localhost [all])' aptget purge apt++ -s
diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files
new file mode 100755
index 0000000..d71bd2c
--- /dev/null
+++ b/test/integration/test-bug-595691-empty-and-broken-archive-files
@@ -0,0 +1,64 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+buildaptarchive
+touch aptarchive/Packages
+setupflataptarchive
+
+failureupdate() {
+ rm -rf rootdir/var/lib/apt
+ testfailure aptget update --allow-insecure-repositories
+ testsuccess grep "^E: Failed to fetch store:${1} Empty files can't be valid archives$" rootdir/tmp/testfailure.output
+}
+successupdate() {
+ rm -rf rootdir/var/lib/apt
+ testwarning aptget update --allow-insecure-repositories
+}
+
+createemptyarchive() {
+ find aptarchive/ \( -name "Packages*" -o -name "en*" \) -type f -delete
+ touch aptarchive/Packages
+ echo -n "" | $COMPRESSOR_CMD > aptarchive/${1}.$COMPRESS
+ find aptarchive -name '*Release*' -delete
+ rm -f aptarchive/Packages
+}
+
+createemptyfile() {
+ find aptarchive/ \( -name "Packages*" -o -name "en*" \) -type f -delete
+ touch aptarchive/Packages aptarchive/${1}.$COMPRESS
+ find aptarchive -name '*Release*' -delete
+ rm -f aptarchive/Packages
+}
+
+testoverfile() {
+ local APTARCHIVE="$(readlink -f ./aptarchive)"
+ forcecompressor "$1"
+
+ msgmsg 'archive over file' "Packages.$COMPRESS"
+ createemptyarchive 'Packages'
+ successupdate
+ createemptyfile 'Packages'
+ failureupdate "$(readlink -f rootdir/var/lib/apt/lists/partial/$(echo "$APTARCHIVE" | sed -e 's#/#_#g')_Packages.${COMPRESS})"
+}
+
+testoverhttp() {
+ forcecompressor "$1"
+
+ msgmsg 'archive over http' "Packages.$COMPRESS"
+ createemptyarchive 'Packages'
+ successupdate
+ createemptyfile 'Packages'
+ failureupdate "$(readlink -f rootdir/var/lib/apt/lists/partial/localhost:${APTHTTPPORT}_Packages.${COMPRESS})"
+}
+
+forallsupportedcompressors testoverfile
+
+# do the same again with http instead of file
+changetowebserver
+
+forallsupportedcompressors testoverhttp
diff --git a/test/integration/test-bug-596498-trusted-unsigned-repo b/test/integration/test-bug-596498-trusted-unsigned-repo
new file mode 100755
index 0000000..4d0e3dc
--- /dev/null
+++ b/test/integration/test-bug-596498-trusted-unsigned-repo
@@ -0,0 +1,75 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+buildsimplenativepackage 'cool' 'i386' '1.0' 'unstable'
+
+msgmsg 'default setup'
+setupaptarchive
+
+aptgetupdate() {
+ rm -rf rootdir/var/lib/apt/ rootdir/var/cache/apt/*.bin
+ ${1:-testwarning} aptget update --allow-insecure-repositories
+}
+
+PKGTEXT="$(aptget install cool --assume-no -d | head -n 8)"
+DOWNLOG="$(echo "$PKGTEXT" | tail -n 1)"
+PKGTEXT="$(echo "$PKGTEXT" | head -n 7)"
+DEBFILE='rootdir/etc/apt/sources.list.d/apt-test-unstable-*.list'
+
+testsuccessequal "$PKGTEXT
+$DOWNLOG
+Download complete and in download only mode" aptget install cool --assume-no -d
+
+testsuccessequal "$PKGTEXT
+$DOWNLOG
+Download complete and in download only mode" aptget install cool --assume-no -d --allow-unauthenticated
+
+msgmsg 'sources marked trusted=no'
+sed -i -e 's#\(deb\(-src\)\?\) #\1 [trusted=no] #' $DEBFILE
+aptgetupdate 'testsuccess'
+
+testfailureequal "$PKGTEXT
+WARNING: The following packages cannot be authenticated!
+ cool
+Install these packages without verification? [y/N] N
+E: Some packages could not be authenticated" aptget install cool --assume-no -d
+
+configarchitecture 'amd64' 'i386'
+testequal "$(echo "$PKGTEXT" | sed 's#cool$#cool:i386#g')
+WARNING: The following packages cannot be authenticated!
+ cool:i386
+Authentication warning overridden.
+$DOWNLOG
+Download complete and in download only mode" aptget install cool:i386 --assume-no -d --allow-unauthenticated
+configarchitecture 'i386'
+
+find aptarchive/ \( -name 'Release.gpg' -o -name 'InRelease' \) -delete
+msgmsg 'unsigned repo'
+sed -i -e 's#\(deb\(-src\)\?\) \[trusted=no\] #\1 #' $DEBFILE
+aptgetupdate
+
+testfailureequal "$PKGTEXT
+WARNING: The following packages cannot be authenticated!
+ cool
+Install these packages without verification? [y/N] N
+E: Some packages could not be authenticated" aptget install cool --assume-no -d
+
+testsuccessequal "$PKGTEXT
+WARNING: The following packages cannot be authenticated!
+ cool
+Authentication warning overridden.
+$DOWNLOG
+Download complete and in download only mode" aptget install cool --assume-no -d --allow-unauthenticated
+
+msgmsg 'sources marked trusted=yes'
+sed -i -e 's#\(deb\(-src\)\?\) #\1 [trusted=yes] #' $DEBFILE
+aptgetupdate 'testsuccess'
+
+testsuccessequal "$PKGTEXT
+$DOWNLOG
+Download complete and in download only mode" aptget install cool --assume-no -d
diff --git a/test/integration/test-bug-598669-install-postfix-gets-exim-heavy b/test/integration/test-bug-598669-install-postfix-gets-exim-heavy
new file mode 100755
index 0000000..e7e4093
--- /dev/null
+++ b/test/integration/test-bug-598669-install-postfix-gets-exim-heavy
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ exim4 exim4-daemon-light
+The following NEW packages will be installed:
+ postfix
+0 upgraded, 1 newly installed, 2 to remove and 0 not upgraded.
+Need to get 0 B/1326 kB of archives.
+After this operation, 2236 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install postfix --trivial-only
diff --git a/test/integration/test-bug-601961-install-info b/test/integration/test-bug-601961-install-info
new file mode 100755
index 0000000..1094438
--- /dev/null
+++ b/test/integration/test-bug-601961-install-info
@@ -0,0 +1,38 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ findutils
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ findutils
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+After this operation, 1745 kB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget remove findutils --trivial-only
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ install-info
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+After this operation, 262 kB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget remove install-info --trivial-only
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ essentialpkg findutils
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ findutils essentialpkg (due to findutils)
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+After this operation, 2007 kB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget remove essentialpkg --trivial-only
diff --git a/test/integration/test-bug-602412-dequote-redirect b/test/integration/test-bug-602412-dequote-redirect
new file mode 100755
index 0000000..3db7b5e
--- /dev/null
+++ b/test/integration/test-bug-602412-dequote-redirect
@@ -0,0 +1,64 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable'
+buildsimplenativepackage 'unrelated2' 'all' '0.5~squeeze1' 'unstable'
+insertinstalledpackage 'unrelated2' 'all' '0.1'
+
+setupaptarchive --no-update
+changetowebserver -o aptwebserver::redirect::replace::/pool/=/newpool/ \
+ -o aptwebserver::redirect::replace::/dists/=/newdists/
+
+mv aptarchive/pool aptarchive/newpool
+mv aptarchive/dists aptarchive/newdists
+
+testrun() {
+ msgmsg "Test $1 redirection works in method boundaries" "$2"
+ msgtest 'Test redirection works in' 'apt-get update'
+ testsuccess --nomsg aptget update
+
+ # check that I-M-S header is kept in redirections
+ testsuccessequal "Hit:1 $2 unstable InRelease
+Reading package lists..." aptget update
+
+ msgtest 'Test redirection works in' 'package download'
+ testsuccess --nomsg aptget install unrelated --download-only -y
+}
+
+for CODE in 301 302 307 308; do
+ webserverconfig 'aptwebserver::redirect::httpcode' "$CODE"
+ rm -f aptarchive/webserver.log.client*.log
+ testrun "$CODE" "http://localhost:${APTHTTPPORT}"
+ testsuccess grep "^HTTP/1.1 $CODE " aptarchive/webserver.log.client*.log
+ rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/archives
+done
+
+changetohttpswebserver
+
+for CODE in 301 302 307 308; do
+ webserverconfig 'aptwebserver::redirect::httpcode' "$CODE"
+ rm -f aptarchive/webserver.log.client*.log
+ testrun "$CODE" "https://localhost:${APTHTTPSPORT}"
+ testsuccess grep "^HTTP/1.1 $CODE " aptarchive/webserver.log.client*.log
+ rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/archives
+done
+
+testsuccess apt update
+testsuccess aptget install unrelated --download-only
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ unrelated
+The following packages have been kept back:
+ unrelated2
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst unrelated (0.5~squeeze1 unstable [all])
+Conf unrelated (0.5~squeeze1 unstable [all])' aptget dist-upgrade unrelated --no-download --fix-missing -s
+testsuccess aptget dist-upgrade unrelated --no-download --fix-missing -y
+testdpkginstalled unrelated
diff --git a/test/integration/test-bug-604222-new-and-autoremove b/test/integration/test-bug-604222-new-and-autoremove
new file mode 100755
index 0000000..b8faf4f
--- /dev/null
+++ b/test/integration/test-bug-604222-new-and-autoremove
@@ -0,0 +1,121 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'stable' 'dummy-archive' 'i386' '0.invalid.0' 'Depends: libavcodec52, libvtk5-dev | libopenal-dev'
+insertpackage 'stable' 'libavcodec52' 'i386' '4:0.5.2-6' 'Conflicts: libvtk5-dev'
+insertpackage 'stable' 'libopenal-dev' 'i386' '1:1.12.854-2'
+insertpackage 'stable' 'libvtk5-dev' 'i386' '5.4.2-8' 'Depends: libvtk5.4 (= 5.4.2-8)'
+insertpackage 'stable' 'libvtk5.4' 'i386' '5.4.2-8' 'Depends: libavcodec52 (>= 4:0.5.1-1)'
+
+insertpackage 'stable' 'gwenview' 'i386' '4:16.08.0-1' 'Depends: libkf5kipi-bin, libkf5kipi-data'
+insertpackage 'stable' 'libkf5kipi-bin' 'i386' '4:16.08.0-1'
+insertpackage 'stable' 'libkf5kipi-data' 'i386' '4:16.08.0-1' 'Breaks: libkipi-data'
+insertpackage 'stable' 'libkipi-data' 'i386' '4:15.08.0-1' '' 'important'
+
+setupaptarchive
+
+cp -a rootdir/var/lib/dpkg/status rootdir/var/lib/dpkg/status.backup
+insertinstalledpackage 'libvtk5.4' 'i386' '5.4.2-7'
+testsuccess aptmark markauto 'libvtk5.4'
+testmarkedauto 'libvtk5.4'
+
+AUTOREMOVE='apt autoremove'
+if [ -n "$SUDO_USER" ]; then
+ AUTOREMOVE="sudo $AUTOREMOVE"
+fi
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following package was automatically installed and is no longer required:
+ libvtk5.4
+Use '$AUTOREMOVE' to remove it.
+The following NEW packages will be installed:
+ libavcodec52
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst libavcodec52 (4:0.5.2-6 stable [i386])
+Conf libavcodec52 (4:0.5.2-6 stable [i386])" aptget install libavcodec52 -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+1 package was automatically installed and is no longer required.
+Use '$AUTOREMOVE' to remove it.
+The following NEW packages will be installed:
+ libavcodec52
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst libavcodec52 (4:0.5.2-6 stable [i386])
+Conf libavcodec52 (4:0.5.2-6 stable [i386])" aptget install libavcodec52 -s -o APT::Get::HideAutoRemove=small
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following package was automatically installed and is no longer required:
+ libvtk5.4
+Use '$AUTOREMOVE' to remove it.
+The following additional packages will be installed:
+ libavcodec52 libopenal-dev libvtk5.4
+The following NEW packages will be installed:
+ dummy-archive libavcodec52 libopenal-dev
+The following packages will be upgraded:
+ libvtk5.4
+1 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 129 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install dummy-archive --trivial-only
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+1 package was automatically installed and is no longer required.
+Use '$AUTOREMOVE' to remove it.
+The following additional packages will be installed:
+ libavcodec52 libopenal-dev libvtk5.4
+The following NEW packages will be installed:
+ dummy-archive libavcodec52 libopenal-dev
+The following packages will be upgraded:
+ libvtk5.4
+1 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 129 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install dummy-archive --trivial-only -o APT::Get::HideAutoRemove=small
+
+cp rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status
+rm -f rootdir/var/lib/apt/extended_states
+
+CONFLICTING='Reading package lists...
+Building dependency tree...
+ MarkInstall dummy-archive:i386 < none -> 0.invalid.0 @un puN Ib > FU=1
+ MarkInstall libavcodec52:i386 < none -> 4:0.5.2-6 @un uN > FU=0
+ MarkInstall libvtk5-dev:i386 < none -> 5.4.2-8 @un uN Ib > FU=0
+ MarkInstall libvtk5.4:i386 < none -> 5.4.2-8 @un uN > FU=0
+ MarkKeep libvtk5-dev:i386 < none -> 5.4.2-8 @un uN > FU=0
+ MarkKeep libvtk5-dev:i386 < none -> 5.4.2-8 @un uN > FU=0
+ MarkDelete libvtk5.4:i386 < none -> 5.4.2-8 @un ugN > FU=0
+The following additional packages will be installed:
+ libavcodec52 libopenal-dev
+The following NEW packages will be installed:
+ dummy-archive libavcodec52 libopenal-dev
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 129 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.'
+
+testfailureequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=0
+testfailureequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=1
+testfailureequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=small
+
+insertinstalledpackage 'my-metapackage' 'i386' '1' 'Depends: gwenview'
+insertinstalledpackage 'gwenview' 'i386' '4:15.08.0-1' 'Depends: libkipi-data
+Recommends: foobar' # trigger policy brokenness to avoid optimisation
+insertinstalledpackage 'libkipi-data' 'i386' '4:15.08.0-1' '' 'important'
+testsuccess aptmark markauto 'gwenview'
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Calculating upgrade...
+The following packages have been kept back:
+ gwenview
+0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded." apt dist-upgrade -s
diff --git a/test/integration/test-bug-604401-files-are-directories b/test/integration/test-bug-604401-files-are-directories
new file mode 100755
index 0000000..4261d54
--- /dev/null
+++ b/test/integration/test-bug-604401-files-are-directories
@@ -0,0 +1,67 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+test ! -e rootdir/etc/apt/apt.conf || mv rootdir/etc/apt/apt.conf rootdir/etc/apt/apt.conf.d/000move-away-apt.conf
+
+msgtest "Directory instead of a file as apt.conf ignored"
+mkdir -p rootdir/etc/apt/apt.conf
+testsuccess --nomsg aptconfig dump
+rmdir rootdir/etc/apt/apt.conf
+
+msgtest "Good link instead of a file as apt.conf ignored"
+echo 'Test::APT::Link "good";' > rootdir/etc/apt/good-link.conf
+ln -s rootdir/etc/apt/good-link.conf rootdir/etc/apt/apt.conf
+testempty aptconfig shell TestLink 'Test::APT::Link'
+rm rootdir/etc/apt/apt.conf
+
+msgtest "Broken link instead of a file as apt.conf ignored"
+ln -s /tmp/doesnt-exist rootdir/etc/apt/apt.conf
+testsuccess --nomsg aptconfig dump
+rm rootdir/etc/apt/apt.conf
+
+
+test ! -e rootdir/etc/apt/sources.list || mv rootdir/etc/apt/sources.list rootdir/etc/apt/sources.list.d/000move-away-sources.list
+
+msgtest "Directory instead of a file as sources.list ignored"
+mkdir -p rootdir/etc/apt/sources.list
+testsuccess --nomsg aptget update --print-uris
+rmdir rootdir/etc/apt/sources.list
+
+msgtest "Good link instead of a file as sources.list ignored"
+echo 'deb file:///tmp/debian sid main' > rootdir/etc/apt/good-link.list
+ln -s rootdir/etc/apt/good-link.list rootdir/etc/apt/sources.list
+testempty aptget update --print-uris
+rm rootdir/etc/apt/sources.list
+
+msgtest "Broken link instead of a file as sources.list ignored"
+ln -s /tmp/doesnt-exist rootdir/etc/apt/sources.list
+testempty aptget update --print-uris
+rm rootdir/etc/apt/sources.list
+
+
+test ! -e rootdir/etc/apt/preferences || mv rootdir/etc/apt/preferences rootdir/etc/apt/preferences.d/000move-away-preferences
+
+msgtest "Directory instead of a file as preferences ignored"
+mkdir -p rootdir/etc/apt/preferences
+testsuccess --nomsg aptcache policy
+rmdir rootdir/etc/apt/preferences
+
+msgtest "Good link instead of a file as preferences ignored"
+echo 'Package: apt
+Pin: release a=now
+Pin-Value: 1000' > rootdir/etc/apt/good-link.pref
+ln -s rootdir/etc/apt/good-link.pref rootdir/etc/apt/preferences
+testsuccess aptcache policy
+testfailure grep '1000 ' rootdir/tmp/testsucess.output
+rm rootdir/etc/apt/preferences
+
+msgtest "Broken link instead of a file as preferences ignored"
+ln -s /tmp/doesnt-exist rootdir/etc/apt/preferences
+testsuccess --nomsg aptcache policy
+rm rootdir/etc/apt/preferences
diff --git a/test/integration/test-bug-605394-versioned-or-groups b/test/integration/test-bug-605394-versioned-or-groups
new file mode 100755
index 0000000..43f35f7
--- /dev/null
+++ b/test/integration/test-bug-605394-versioned-or-groups
@@ -0,0 +1,30 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ php5 php5-cgi
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Need to get 0 B/5715 kB of archives.
+After this operation, 0 B of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget dist-upgrade --trivial-only
+
+msgtest "Solution process doesn't involve" 'apache2-mpm-prefork'
+
+if aptget dist-upgrade --trivial-only -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::Marker=1 2>&1 | grep apache2-mpm-prefork > /dev/null; then
+ msgfail
+else
+ msgpass
+fi
+
+# the Packages file includes only MD5
+testfailure aptget dist-upgrade -y
+testsuccess grep 'Insufficient information available to perform this download securely' rootdir/tmp/testfailure.output
diff --git a/test/integration/test-bug-611729-mark-as-manual b/test/integration/test-bug-611729-mark-as-manual
new file mode 100755
index 0000000..63f8245
--- /dev/null
+++ b/test/integration/test-bug-611729-mark-as-manual
@@ -0,0 +1,96 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage "peace-dpkg" "all" "1.0" "stable"
+
+buildsimplenativepackage "a" "all" "1.0" "stable" "Depends: b"
+buildsimplenativepackage "b" "all" "1.0" "stable"
+buildsimplenativepackage "c" "all" "1.0" "stable" "Depends: b"
+
+setupaptarchive
+
+# dpkg freaks out if the last package is removed so keep one around
+testsuccess aptget install peace-dpkg -y
+testdpkginstalled peace-dpkg
+testmarkedauto
+
+testsuccess aptget install a -y
+testdpkginstalled a b
+testdpkgnotinstalled c
+testmarkedauto 'b'
+
+testsuccess aptget remove a -y
+testdpkgnotinstalled a c
+testdpkginstalled b
+testmarkedauto 'b'
+
+testsuccess aptget install c -y
+testdpkgnotinstalled a
+testdpkginstalled b c
+testmarkedauto 'b'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+b is already the newest version (1.0).
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b --only-upgrade
+testmarkedauto 'b'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+b is already the newest version (1.0).
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b -d
+testmarkedauto 'b'
+
+rm rootdir/var/log/apt/history.log
+
+testsuccess aptget install b --reinstall -y
+testdpkgnotinstalled a
+testdpkginstalled b c
+testmarkedauto 'b'
+
+sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d'
+if [ -n "$SUDO_USER" ] && [ "$(id -u "$SUDO_USER")" -gt 0 ]; then
+ testfileequal 'rootdir/var/log/apt/history.log' "
+Requested-By: $SUDO_USER ($(id -u "$SUDO_USER"))
+Reinstall: b:i386 (1.0)"
+else
+ testfileequal 'rootdir/var/log/apt/history.log' '
+Reinstall: b:i386 (1.0)'
+fi
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+b is already the newest version (1.0).
+b set to manually installed.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b
+testmarkedauto
+
+testsuccess aptget remove b -y
+testdpkgnotinstalled a b c
+testmarkedauto
+
+testsuccess aptget install a b -y
+testdpkginstalled a b
+testdpkgnotinstalled c
+testmarkedauto
+
+testsuccess aptget purge a b -y
+testdpkgnotinstalled a b c
+testmarkedauto
+
+testsuccess aptget install b c -y
+testdpkgnotinstalled a
+testdpkginstalled b c
+testmarkedauto
+
+testsuccess aptget install a -y
+testdpkginstalled a b c
+testmarkedauto
diff --git a/test/integration/test-bug-612099-multiarch-conflicts b/test/integration/test-bug-612099-multiarch-conflicts
new file mode 100755
index 0000000..bc57395
--- /dev/null
+++ b/test/integration/test-bug-612099-multiarch-conflicts
@@ -0,0 +1,225 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386' 'amd64'
+
+buildsimplenativepackage 'libc6' 'i386' '1.0' 'stable'
+buildsimplenativepackage 'libc6' 'amd64' '1.0' 'stable'
+buildsimplenativepackage 'libc6' 'all' '2.0' 'testing'
+
+buildsimplenativepackage 'foobar' 'i386' '1.0' 'stable' 'Depends: libc6'
+buildsimplenativepackage 'foobar' 'amd64' '1.0' 'stable' 'Depends: libc6'
+
+setupaptarchive
+
+testsuccess aptget install libc6:i386 -t stable -y
+testdpkginstalled libc6:i386
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ libc6
+The following NEW packages will be installed:
+ libc6:amd64
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libc6 [1.0]
+Inst libc6:amd64 (1.0 stable [amd64])
+Conf libc6:amd64 (1.0 stable [amd64])' aptget install libc6:amd64 -s -t stable
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following NEW packages will be installed:
+ foobar
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar (1.0 stable [i386])
+Conf foobar (1.0 stable [i386])' aptget install foobar -st stable
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following additional packages will be installed:
+ libc6:amd64
+The following packages will be REMOVED:
+ libc6
+The following NEW packages will be installed:
+ foobar:amd64 libc6:amd64
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv libc6 [1.0]
+Inst libc6:amd64 (1.0 stable [amd64])
+Inst foobar:amd64 (1.0 stable [amd64])
+Conf libc6:amd64 (1.0 stable [amd64])
+Conf foobar:amd64 (1.0 stable [amd64])' aptget install foobar:amd64 -st stable
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Selected version '1.0' (stable [i386]) for 'foobar'
+The following NEW packages will be installed:
+ foobar
+The following packages will be upgraded:
+ libc6
+1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6 [1.0] (2.0 testing [all])
+Inst foobar (1.0 stable [i386])
+Conf libc6 (2.0 testing [all])
+Conf foobar (1.0 stable [i386])" aptget install foobar/stable libc6 -st testing
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+Calculating upgrade...
+The following packages will be upgraded:
+ libc6
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6 [1.0] (2.0 testing [all])
+Conf libc6 (2.0 testing [all])' aptget upgrade -t testing -s
+# FIXME: on amd64 systems this test wouldn't run with a real upgrade
+# as APT (here i386) disagree about the native architecture, so
+# we fake it here:
+#aptget upgrade -y -qq >/dev/null 2>&1
+testsuccess aptget purge libc6 -y
+testsuccess aptget install libc6:i386 -y
+testdpkginstalled libc6:all
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Selected version '1.0' (stable [i386]) for 'foobar'
+The following NEW packages will be installed:
+ foobar
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar (1.0 stable [i386])
+Conf foobar (1.0 stable [i386])" aptget install foobar/stable -st testing
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Selected version '1.0' (stable [amd64]) for 'foobar:amd64'
+The following additional packages will be installed:
+ libc6:amd64
+The following packages will be REMOVED:
+ libc6
+The following NEW packages will be installed:
+ foobar:amd64 libc6:amd64
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv libc6 [2.0]
+Inst libc6:amd64 (1.0 stable [amd64])
+Inst foobar:amd64 (1.0 stable [amd64])
+Conf libc6:amd64 (1.0 stable [amd64])
+Conf foobar:amd64 (1.0 stable [amd64])" aptget install foobar:amd64/stable -st testing
+
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Selected version '1.0' (stable [i386]) for 'libc6'
+The following packages will be DOWNGRADED:
+ libc6
+0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
+Inst libc6 [2.0] (1.0 stable [i386])
+Conf libc6 (1.0 stable [i386])" aptget install libc6/stable -s
+
+
+buildsimplenativepackage 'libc6-same' 'i386' '1.0' 'stable' 'Multi-Arch: same'
+buildsimplenativepackage 'libc6-same' 'amd64' '1.0' 'stable' 'Multi-Arch: same'
+buildsimplenativepackage 'libc6-same' 'all' '2.0' 'testing'
+
+buildsimplenativepackage 'foobar-same' 'i386' '1.0' 'stable' 'Depends: libc6-same'
+buildsimplenativepackage 'foobar-same' 'amd64' '1.0' 'stable' 'Depends: libc6-same'
+
+setupaptarchive
+
+testsuccess aptget install libc6-same:i386 -t stable -y
+testdpkginstalled libc6-same:i386
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following NEW packages will be installed:
+ foobar-same
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar-same (1.0 stable [i386])
+Conf foobar-same (1.0 stable [i386])' aptget install foobar-same -st stable
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following additional packages will be installed:
+ libc6-same:amd64
+The following NEW packages will be installed:
+ foobar-same:amd64 libc6-same:amd64
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6-same:amd64 (1.0 stable [amd64])
+Inst foobar-same:amd64 (1.0 stable [amd64])
+Conf libc6-same:amd64 (1.0 stable [amd64])
+Conf foobar-same:amd64 (1.0 stable [amd64])' aptget install foobar-same:amd64 -st stable
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following NEW packages will be installed:
+ libc6-same:amd64
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6-same:amd64 (1.0 stable [amd64])
+Conf libc6-same:amd64 (1.0 stable [amd64])' aptget install libc6-same:amd64 -s -t stable
+
+# FIXME: We should test installing libc6-same:amd64 here, but dpkg doesn't allow it currently
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+Calculating upgrade...
+The following packages will be upgraded:
+ libc6-same
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6-same [1.0] (2.0 testing [all])
+Conf libc6-same (2.0 testing [all])' aptget upgrade -t testing -s
+# FIXME: on amd64 systems this test wouldn't run with a real upgrade
+# as APT (here i386) disagree about the native architecture, so
+# we fake it here:
+#aptget upgrade -y -qq >/dev/null 2>&1
+testsuccess aptget purge libc6-same -y
+testsuccess aptget install libc6-same:i386 -y
+testdpkginstalled libc6-same:all
+
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Selected version '1.0' (stable [i386]) for 'libc6-same'
+The following packages will be DOWNGRADED:
+ libc6-same
+0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
+Inst libc6-same [2.0] (1.0 stable [i386])
+Conf libc6-same (1.0 stable [i386])" aptget install libc6-same/stable -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Selected version '1.0' (stable [i386]) for 'foobar-same'
+The following NEW packages will be installed:
+ foobar-same
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar-same (1.0 stable [i386])
+Conf foobar-same (1.0 stable [i386])" aptget install foobar-same/stable -st testing
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Selected version '1.0' (stable [amd64]) for 'foobar-same:amd64'
+The following additional packages will be installed:
+ libc6-same:amd64
+The following packages will be REMOVED:
+ libc6-same
+The following NEW packages will be installed:
+ foobar-same:amd64 libc6-same:amd64
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv libc6-same [2.0]
+Inst libc6-same:amd64 (1.0 stable [amd64])
+Inst foobar-same:amd64 (1.0 stable [amd64])
+Conf libc6-same:amd64 (1.0 stable [amd64])
+Conf foobar-same:amd64 (1.0 stable [amd64])" aptget install foobar-same:amd64/stable -st testing
diff --git a/test/integration/test-bug-612557-garbage-upgrade b/test/integration/test-bug-612557-garbage-upgrade
new file mode 100755
index 0000000..d232c44
--- /dev/null
+++ b/test/integration/test-bug-612557-garbage-upgrade
@@ -0,0 +1,60 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'unrelated' 'all' '1:3.3.0-2'
+insertpackage 'unstable' 'python-uno' 'all' '1:3.3.0-2' 'Depends: libreoffice-common'
+insertpackage 'unstable' 'libreoffice-common' 'all' '1:3.3.0-2' 'Conflicts: openoffice.org-common'
+
+setupaptarchive
+
+touch rootdir/var/lib/apt/extended_states
+testsuccess aptmark markauto python-uno openoffice.org-common
+#aptmark unmarkauto openoffice.org-emailmerge
+testmarkedauto python-uno openoffice.org-common
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following additional packages will be installed:
+ libreoffice-common
+The following packages will be REMOVED:
+ openoffice.org-common openoffice.org-emailmerge
+The following NEW packages will be installed:
+ libreoffice-common
+The following packages will be upgraded:
+ python-uno
+1 upgraded, 1 newly installed, 2 to remove and 0 not upgraded.
+After this operation, 53.2 MB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget --trivial-only install python-uno
+
+testsuccess aptmark markauto openoffice.org-emailmerge
+testmarkedauto python-uno openoffice.org-common openoffice.org-emailmerge
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following additional packages will be installed:
+ libreoffice-common
+The following packages will be REMOVED:
+ openoffice.org-common openoffice.org-emailmerge
+The following NEW packages will be installed:
+ libreoffice-common
+The following packages will be upgraded:
+ python-uno
+1 upgraded, 1 newly installed, 2 to remove and 0 not upgraded.
+After this operation, 53.2 MB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget --trivial-only install python-uno
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ openoffice.org-common openoffice.org-emailmerge python-uno
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+After this operation, 53.3 MB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget autoremove --trivial-only
diff --git a/test/integration/test-bug-612958-use-dpkg-multiarch-config b/test/integration/test-bug-612958-use-dpkg-multiarch-config
new file mode 100755
index 0000000..54200ff
--- /dev/null
+++ b/test/integration/test-bug-612958-use-dpkg-multiarch-config
@@ -0,0 +1,83 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+testpass() {
+ msgtest 'Test architecture handling success' "$1 with $2"
+ rm -f archs.conf
+ aptconfig dump --no-empty --format='%V%n' APT::Architectures > archs.conf
+ testsuccess --nomsg grep "^$2\$" archs.conf
+}
+
+testfail() {
+ msgtest 'Test architecture handling failure' "$1 with $2"
+ rm -f archs.conf
+ aptconfig dump --no-empty --format='%V%n' APT::Architectures > archs.conf
+ testfailure --nomsg grep "^$2\$" archs.conf
+}
+
+testpass 'no config' 'i386'
+testfail 'no config' 'amd64'
+testfail 'no config' 'armel'
+
+CONFFILE=rootdir/etc/apt/apt.conf.d/99multiarch
+echo '#clear APT::Architectures;' >> $CONFFILE
+echo 'APT::Architectures:: "i386";' >> $CONFFILE
+echo 'APT::Architectures:: "amd64";' >> $CONFFILE
+
+testpass 'apt config' 'i386'
+testpass 'apt config' 'amd64'
+testfail 'apt config' 'armel'
+
+echo 'APT::Architectures:: "armel";' >> $CONFFILE
+
+testpass 'apt config' 'armel'
+
+rm $CONFFILE
+
+echo '#clear APT::Architectures;' >> $CONFFILE
+echo 'APT::Architectures "i386,amd64";' >> $CONFFILE
+
+testpass 'apt config' 'i386'
+testpass 'apt config' 'amd64'
+testfail 'apt config' 'armel'
+
+rm $CONFFILE
+
+echo '#clear APT::Architectures;' >> $CONFFILE
+echo 'Dir::Bin::dpkg "./dpkg-printer";' >> $CONFFILE
+
+echo '#! /bin/sh
+echo "amd64"' > ./dpkg-printer
+chmod +x ./dpkg-printer
+
+testpass 'dpkg config' 'i386'
+testpass 'dpkg config' 'amd64'
+testfail 'dpkg config' 'armel'
+
+echo '#! /bin/sh
+echo "amd64 armel"' > ./dpkg-printer
+
+testpass 'dpkg config' 'i386'
+testpass 'dpkg config' 'amd64'
+testpass 'dpkg config' 'armel'
+
+echo '#! /bin/sh
+echo "amd64
+armel"' > ./dpkg-printer
+
+testpass 'dpkg config' 'i386'
+testpass 'dpkg config' 'amd64'
+testpass 'dpkg config' 'armel'
+
+echo '#! /bin/sh
+echo "amd64
+i386"' > ./dpkg-printer
+
+testpass 'dpkg config' 'i386'
+testpass 'dpkg config' 'amd64'
+testfail 'dpkg config' 'armel'
diff --git a/test/integration/test-bug-613420-new-garbage-dependency b/test/integration/test-bug-613420-new-garbage-dependency
new file mode 100755
index 0000000..b225bd6
--- /dev/null
+++ b/test/integration/test-bug-613420-new-garbage-dependency
@@ -0,0 +1,56 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'libreoffice' 'all' '1:3.3.1~rc1-2' 'Depends: libreoffice-core'
+insertpackage 'unstable' 'libreoffice-core' 'all' '1:3.3.1~rc1-2' 'Conflicts: openoffice.org-core'
+insertpackage 'unstable' 'libreoffice-officebean' 'all' '1:3.3.1~rc1-2' 'Depends: libreoffice-core'
+insertpackage 'unstable' 'openoffice.org-officebean' 'all' '1:3.3.0-5' 'Depends: libreoffice-officebean'
+
+setupaptarchive
+
+touch rootdir/var/lib/apt/extended_states
+testsuccess aptmark markauto openoffice.org-officebean
+testmarkedauto openoffice.org-officebean
+AUTOREMOVE='apt autoremove'
+if [ -n "$SUDO_USER" ]; then
+ AUTOREMOVE="sudo $AUTOREMOVE"
+fi
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages were automatically installed and are no longer required:
+ libreoffice-officebean openoffice.org-officebean
+Use '$AUTOREMOVE' to remove them.
+The following additional packages will be installed:
+ libreoffice-core libreoffice-officebean openoffice.org-officebean
+The following packages will be REMOVED:
+ openoffice.org-core
+The following NEW packages will be installed:
+ libreoffice libreoffice-core libreoffice-officebean
+The following packages will be upgraded:
+ openoffice.org-officebean
+1 upgraded, 3 newly installed, 1 to remove and 0 not upgraded.
+After this operation, 126 MB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation." aptget install libreoffice --trivial-only
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+2 packages were automatically installed and are no longer required.
+Use '$AUTOREMOVE' to remove them.
+The following additional packages will be installed:
+ libreoffice-core libreoffice-officebean openoffice.org-officebean
+The following packages will be REMOVED:
+ openoffice.org-core
+The following NEW packages will be installed:
+ libreoffice libreoffice-core libreoffice-officebean
+The following packages will be upgraded:
+ openoffice.org-officebean
+1 upgraded, 3 newly installed, 1 to remove and 0 not upgraded.
+After this operation, 126 MB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation." aptget install libreoffice --trivial-only -o APT::Get::HideAutoRemove=small
diff --git a/test/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted b/test/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted
new file mode 100755
index 0000000..533cf77
--- /dev/null
+++ b/test/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted
@@ -0,0 +1,68 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+buildsimplenativepackage 'cool' 'i386' '1.0' 'unstable'
+
+setupaptarchive --no-update
+
+testfileexists() {
+ msgtest 'Test for existence of file' "$1"
+ test -e "$1" && msgpass || msgfail
+ rm -f "$1"
+}
+
+testfilemissing() {
+ msgtest 'Test for non-existence of file' "$1"
+ test -e "$1" && msgfail || msgpass
+ rm -f "$1"
+}
+
+testrun() {
+ rm -rf rootdir/var/lib/apt
+ cd downloaded
+
+ if [ "$1" = 'trusted' ]; then
+ testsuccess aptget update
+
+ testsuccess aptget download cool
+ testfileexists 'cool_1.0_i386.deb'
+
+ testsuccess aptget download cool --allow-unauthenticated
+ testfileexists 'cool_1.0_i386.deb'
+ else
+ testwarning aptget update --allow-insecure-repositories
+
+ testfailure aptget download cool
+ testfilemissing 'cool_1.0_i386.deb'
+
+ testsuccess aptget download cool --allow-unauthenticated
+ testfileexists 'cool_1.0_i386.deb'
+ fi
+
+ mv ../aptarchive/pool/cool_1.0_i386.deb ../aptarchive/pool/cool_1.0_i386.deb.bak
+ echo 'this is not a good package' > ../aptarchive/pool/cool_1.0_i386.deb
+ testfailure aptget download cool
+ testfilemissing cool_1.0_i386.deb
+
+ testfailure aptget download cool --allow-unauthenticated # unauthenticated doesn't mean unchecked
+ testfilemissing cool_1.0_i386.deb
+
+ rm -f ../aptarchive/pool/cool_1.0_i386.deb
+ mv ../aptarchive/pool/cool_1.0_i386.deb.bak ../aptarchive/pool/cool_1.0_i386.deb
+ testsuccess aptget download cool --allow-unauthenticated
+ testfileexists 'cool_1.0_i386.deb'
+ cd - >/dev/null
+}
+
+testrun 'trusted'
+
+find aptarchive/ \( -name 'Release.gpg' -o -name 'InRelease' \) -delete
+testrun 'untrusted'
+
+changetowebserver
+testrun 'untrusted'
diff --git a/test/integration/test-bug-618288-multiarch-same-lockstep b/test/integration/test-bug-618288-multiarch-same-lockstep
new file mode 100755
index 0000000..eeecb40
--- /dev/null
+++ b/test/integration/test-bug-618288-multiarch-same-lockstep
@@ -0,0 +1,41 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'libsame' 'i386,amd64' '1' 'Multi-Arch: same' 'required'
+insertinstalledpackage 'apt' 'i386' '1' 'Depends: libsame (= 1)
+Essential: yes' 'required'
+insertinstalledpackage 'apt2' 'amd64' '1' 'Depends: libsame (= 1)
+Essential: yes' 'required'
+buildsimplenativepackage 'libsame' 'i386,amd64' '2' 'unstable' 'Multi-Arch: same' '' 'required'
+buildsimplenativepackage 'apt' 'i386' '2' 'unstable' 'Depends: libsame (= 2)' '' 'required'
+buildsimplenativepackage 'apt2' 'amd64' '2' 'unstable' 'Depends: libsame (= 2)' '' 'required'
+
+setupaptarchive
+testsuccess aptget dist-upgrade -s -o Debug::pkgPackageManager=1
+
+# order in switch libsame:{amd64,i386} are unpacked is irrelevant, as both are installed - but we need to do it together
+OUTPUT=rootdir/tmp/testsuccess.output
+LS_U_AMD="$(grep -o -n '^Inst libsame ' $OUTPUT | cut -d: -f1)"
+LS_U_INT="$(grep -o -n '^Inst libsame:i386 ' $OUTPUT | cut -d: -f1)"
+LS_C_AMD="$(grep -o -n '^Conf libsame ' $OUTPUT | cut -d: -f1)"
+LS_C_INT="$(grep -o -n '^Conf libsame:i386 ' $OUTPUT | cut -d: -f1)"
+
+msgtest 'Test if' 'libsame:amd64 unpack before configure'
+test "$LS_U_AMD" -lt "$LS_C_AMD" && msgpass || msgfail
+
+msgtest 'Test if' 'libsame:i386 unpack before configure'
+test "$LS_U_INT" -lt "$LS_C_INT" && msgpass || msgfail
+
+msgtest 'Test if' 'libsame:amd64 unpack is before libsame:i386 configure'
+test "$LS_U_AMD" -lt "$LS_C_INT" && msgpass || msgfail
+
+msgtest 'Test if' 'libsame:i386 unpack is before libsame:amd64 configure'
+test "$LS_U_INT" -lt "$LS_C_AMD" && msgpass || msgfail
+
+# lets see if it really does work out
+testsuccess apt dist-upgrade -y
diff --git a/test/integration/test-bug-618848-always-respect-user-requests b/test/integration/test-bug-618848-always-respect-user-requests
new file mode 100755
index 0000000..fa190a9
--- /dev/null
+++ b/test/integration/test-bug-618848-always-respect-user-requests
@@ -0,0 +1,32 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertinstalledpackage 'libdb4.8' 'all' '1.0'
+insertinstalledpackage 'exim4' 'all' '1.0' 'Depends: exim4-daemon-light | exim4-daemon-heavy'
+insertinstalledpackage 'exim4-daemon-light' 'all' '1.0' 'Depends: libdb4.8'
+insertpackage 'unstable' 'exim4-daemon-heavy' 'all' '1.0' 'Depends: libdb4.8'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+ MarkDelete libdb4.8:i386 < 1.0 @ii pmK > FU=1
+ MarkDelete exim4-daemon-light:i386 < 1.0 @ii mK Ib > FU=0
+ MarkInstall exim4-daemon-heavy:i386 < none -> 1.0 @un uN Ib > FU=0
+ Ignore MarkInstall of libdb4.8:i386 < 1.0 @ii pmR > as its mode (Delete) is protected
+ MarkDelete exim4-daemon-heavy:i386 < none -> 1.0 @un uN Ib > FU=0
+ MarkDelete exim4:i386 < 1.0 @ii mK Ib > FU=0
+The following packages will be REMOVED:
+ exim4 exim4-daemon-light libdb4.8
+ MarkDelete exim4:i386 < 1.0 @ii K > FU=1
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+Remv exim4 [1.0]
+ MarkDelete exim4-daemon-light:i386 < 1.0 @ii K > FU=1
+Remv exim4-daemon-light [1.0]
+ MarkDelete libdb4.8:i386 < 1.0 @ii K > FU=1
+Remv libdb4.8 [1.0]' aptget remove libdb4.8 -s -o Debug::pkgDepCache::Marker=1
diff --git a/test/integration/test-bug-623443-fail-on-bad-proxies b/test/integration/test-bug-623443-fail-on-bad-proxies
new file mode 100755
index 0000000..d91a3ab
--- /dev/null
+++ b/test/integration/test-bug-623443-fail-on-bad-proxies
@@ -0,0 +1,34 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable'
+
+setupaptarchive --no-update
+changetowebserver
+
+testsuccess apt update
+rm -rf rootdir/var/lib/apt/lists
+
+export http_proxy=enrico:password@proxy-cache.localnet:3128
+testfailure apt update
+unset http_proxy
+testsuccess grep 'Unsupported proxy configured' rootdir/tmp/testfailure.output
+
+changetohttpswebserver
+
+testsuccess apt update
+rm -rf rootdir/var/lib/apt/lists
+
+export http_proxy=enrico:password@proxy-cache.localnet:3128
+testfailure apt update
+unset http_proxy
+testsuccess grep 'Unsupported proxy configured' rootdir/tmp/testfailure.output
+
+echo 'Acquire::http::Proxy "foo://example.org";
+Acquire::https::Proxy "DIRECT";' > rootdir/etc/apt/apt.conf.d/proxy.conf
+testsuccess apt update
diff --git a/test/integration/test-bug-624218-Translation-file-handling b/test/integration/test-bug-624218-Translation-file-handling
new file mode 100755
index 0000000..c116278
--- /dev/null
+++ b/test/integration/test-bug-624218-Translation-file-handling
@@ -0,0 +1,171 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'unrelated' 'i386' '1'
+insertpackage 'unstable' 'ancientstuff' 'all' '1'
+insertpackage 'unstable' 'boringstuff' 'all' '1' '' '' 'shared short description'
+insertpackage 'unstable' 'coolstuff' 'all' '1'
+insertpackage 'unstable' 'dullstuff' 'all' '1' '' '' 'shared short description'
+insertpackage 'unstable' 'evilstuff' 'all' '1'
+insertpackage 'unstable' 'foostuff' 'all' '1' '' '' 'shared short description'
+insertpackage 'unstable' 'goodstuff' 'all' '1'
+insertpackage 'unstable' "longdesc" 'all' '1' '' '' "$(for i in $(seq 0 100); do printf '%s' 'lorem ipsum '; done)"
+
+setupaptarchive --no-update
+changetowebserver
+
+testsuccess aptget update
+PKGORDER='coolstuff foostuff coolstuff foostuff'
+msgtest 'Prepare expectation for' 'aptcache show'
+if aptcache show $PKGORDER | grep -v '^ ' > aptcacheshow.out 2>&1; then
+ msgpass
+else
+ cat aptcacheshow.out || true
+ msgfail
+fi
+testsuccessequal '4' grep -c '^Package: ' aptcacheshow.out
+msgtest 'Prepare expectation for' 'apt show'
+if apt show $PKGORDER | grep -v -e '^ ' -e '^[A-Z][a-z]\+-Size: ' > aptshow.out 2>&1; then
+ msgpass
+else
+ cat aptshow.out || true
+ msgfail
+fi
+testsuccessequal '4' grep -c '^Package: ' aptshow.out
+rm -rf rootdir/var/lib/apt/lists
+
+checkaptshow() {
+ testsuccess aptcache show $PKGORDER
+ sed -i -e 's#^Description: #Description-en: #' rootdir/tmp/testsuccess.output
+ testequal "$(cat aptcacheshow.out)
+" grep -v '^ ' rootdir/tmp/testsuccess.output
+
+ testsuccess apt show $PKGORDER
+ sed -i -e 's#^Description-en: #Description: #' rootdir/tmp/testsuccess.output
+ testequal "$(cat aptshow.out)
+" grep -v -e '^ ' -e '^[A-Z][a-z]\+-Size: ' rootdir/tmp/testsuccess.output
+
+ if [ -n "$(ls rootdir/var/lib/apt/lists/*Translation* 2>/dev/null)" ]; then
+ testsuccess find rootdir/var/lib/apt/lists/ -name '*Translation*' -delete
+
+ testsuccess aptcache show $PKGORDER
+ sed -i -e 's#^Description: #Description-en: #' rootdir/tmp/testsuccess.output
+ testequal "$(cat aptcacheshow.out)
+" grep -v '^ ' rootdir/tmp/testsuccess.output
+
+ testsuccess apt show $PKGORDER
+ sed -i -e 's#^Description-en: #Description: #' rootdir/tmp/testsuccess.output
+ testequal "$(cat aptshow.out)
+" grep -v -e '^ ' -e '^[A-Z][a-z]\+-Size: ' rootdir/tmp/testsuccess.output
+ fi
+}
+
+translationslisted() {
+ msgtest 'No download of non-existent locals' "$1"
+ export LC_ALL=""
+ testsuccess --nomsg aptget update -o Acquire::Languages=en
+ testfailure grep -q -e 'Translation-[^e][^n] ' rootdir/tmp/testsuccess.output
+ checkaptshow
+ rm -rf rootdir/var/lib/apt/lists
+
+ msgtest 'Download of existent locals' "$1"
+ testsuccess --nomsg aptget update
+ cp rootdir/tmp/testsuccess.output testsuccess.output
+ testsuccess grep -q -e 'Translation-en ' testsuccess.output
+ checkaptshow
+ rm -rf rootdir/var/lib/apt/lists
+
+ msgtest 'Download of en in LC_ALL=C' "$1"
+ export LC_ALL=C
+ testsuccess --nomsg aptget update
+ cp rootdir/tmp/testsuccess.output testsuccess.output
+ testsuccess grep -q -e 'Translation-en ' testsuccess.output
+ checkaptshow
+ rm -rf rootdir/var/lib/apt/lists
+ unset LC_ALL
+
+ msgtest 'Download of en as forced language' "$1"
+ testsuccess --nomsg aptget update -o Acquire::Languages=en
+ cp rootdir/tmp/testsuccess.output testsuccess.output
+ testsuccess grep -q -e 'Translation-en ' testsuccess.output
+ checkaptshow
+ rm -rf rootdir/var/lib/apt/lists
+
+ msgtest 'Download of nothing else in forced language' "$1"
+ testsuccess --nomsg aptget update -o Acquire::Languages=en
+ testfailure grep -q -e 'Translation-[^e][^n] ' rootdir/tmp/testsuccess.output
+ checkaptshow
+ rm -rf rootdir/var/lib/apt/lists
+
+ msgtest 'Download no Translation- if forced language is non-existent' "$1"
+ testsuccess --nomsg aptget update -o Acquire::Languages=ast_DE
+ testfailure grep -q -e 'Translation-' rootdir/tmp/testsuccess.output
+ checkaptshow
+ rm -rf rootdir/var/lib/apt/lists
+
+ msgtest 'Download of nothing if none is forced' "$1"
+ testsuccess --nomsg aptget update -o Acquire::Languages=none
+ testfailure grep -q -e 'Translation' rootdir/tmp/testsuccess.output
+ checkaptshow
+ rm -rf rootdir/var/lib/apt/lists
+}
+
+translationslisted 'with full Index'
+
+# No Release file at all, so no records about Translation files
+# (fallback to guessing)
+find aptarchive \( -name 'Release' -o -name 'InRelease' \) -delete
+echo 'Acquire::AllowInsecureRepositories "true";' > rootdir/etc/apt/apt.conf.d/allow-insecure-repositories.conf
+
+msgtest 'Download of en as forced language' 'without Index'
+testwarning --nomsg aptget update -o Acquire::Languages=en
+testsuccess grep -q -e 'Translation-en ' rootdir/tmp/testwarning.output
+checkaptshow
+rm -rf rootdir/var/lib/apt/lists
+
+msgtest 'Download of nothing else in forced language' 'without Index'
+testwarning --nomsg aptget update -o Acquire::Languages=en
+testfailure grep -q -e 'Translation-[^e][^n] ' rootdir/tmp/testwarning.output
+checkaptshow
+rm -rf rootdir/var/lib/apt/lists
+
+msgtest 'Download of ast_DE as forced language' 'without Index'
+testwarning --nomsg aptget update -o Acquire::Languages=ast_DE
+testsuccess grep -q -e 'Translation-ast_DE$' rootdir/tmp/testwarning.output
+checkaptshow
+rm -rf rootdir/var/lib/apt/lists
+
+msgtest 'Download of nothing else in forced language' 'without Index'
+testwarning --nomsg aptget update -o Acquire::Languages=ast_DE
+testfailure grep -q -e 'Translation-[^a][^s]' rootdir/tmp/testwarning.output
+checkaptshow
+rm -rf rootdir/var/lib/apt/lists
+
+msgtest 'Download of nothing if none is forced' 'without Index'
+testwarning --nomsg aptget update -o Acquire::Languages=none
+testfailure grep -q -e 'Translation' rootdir/tmp/testwarning.output
+checkaptshow
+rm -rf rootdir/var/lib/apt/lists
+
+mkdir -p rootdir/var/lib/apt/lists
+touch rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-ast_DE
+
+msgtest 'Download of builtin files' 'without Index'
+testwarning --nomsg aptget update
+testsuccess grep -q -e 'Translation-ast_DE' rootdir/tmp/testwarning.output
+checkaptshow
+rm -rf rootdir/var/lib/apt/lists
+
+mkdir -p rootdir/var/lib/apt/lists
+touch rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_dists_unstable_main_i18n_Translation-ast_DE
+
+msgtest 'Download of nothing (even builtin) if none is forced' 'without Index'
+testwarning --nomsg aptget update -o Acquire::Languages=none
+testfailure grep -q -e 'Translation' rootdir/tmp/testwarning.output
+checkaptshow
+rm -rf rootdir/var/lib/apt/lists
diff --git a/test/integration/test-bug-632221-cross-dependency-satisfaction b/test/integration/test-bug-632221-cross-dependency-satisfaction
new file mode 100755
index 0000000..d52652c
--- /dev/null
+++ b/test/integration/test-bug-632221-cross-dependency-satisfaction
@@ -0,0 +1,348 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'armel'
+
+insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign'
+
+insertpackage 'unstable' 'doxygen' 'amd64,armel' '1.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'libc6' 'amd64,armel' '1.0' 'Multi-Arch: same'
+insertpackage 'unstable' 'libc6-dev' 'amd64,armel' '1.0' 'Depends: libc6
+Multi-Arch: same'
+insertpackage 'unstable' 'libfwibble1' 'amd64,armel' '1.0' 'Depends: libc6
+Multi-Arch: same'
+insertpackage 'unstable' 'libfwibble-dev' 'amd64,armel' '1.0' 'Depends: libfwibble1'
+insertpackage 'unstable' 'cool' 'amd64,armel' '1.0' 'Multi-Arch: allowed'
+insertpackage 'unstable' 'amdboot' 'amd64' '1.0'
+insertpackage 'unstable' 'foreigner' 'amd64,armel' '1.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'arm-stuff' 'armel' '1.0'
+insertpackage 'unstable' 'linux-stuff' 'amd64,armel' '1.0'
+
+insertsource 'unstable' 'apt' 'any' '0.8.15' 'Build-Depends: doxygen, libc6-dev, libc6-dev:native, cool:any, amdboot:amd64, foreigner, libfwibble-dev, arm-stuff [eabi-any-any-arm gnueabi-any-arm] | linux-stuff [ linux-any]'
+
+insertsource 'unstable' 'forbidden-no' 'any' '1' 'Build-Depends: amdboot:any'
+insertsource 'unstable' 'forbidden-same' 'any' '1' 'Build-Depends: libc6:any'
+insertsource 'unstable' 'forbidden-foreign' 'any' '1' 'Build-Depends: doxygen:any'
+
+insertpackage 'unstable' 'specific' 'amd64' '1.0' 'Depends: libc6:amd64'
+insertpackage 'unstable' 'specific' 'armel' '1.0' 'Depends: libc6:armel'
+
+insertsource 'unstable' 'source-specific-amd64' 'amd64' '1' 'Build-Depends: specific:amd64'
+insertsource 'unstable' 'source-specific-armel' 'armel' '1' 'Build-Depends: specific:armel'
+
+setupaptarchive
+
+testfailureequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ builddeps:forbidden-no:armel : Depends: amdboot:any but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget build-dep forbidden-no -s -a armel
+testfailureequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ builddeps:forbidden-same:armel : Depends: libc6:any but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget build-dep forbidden-same -s -a armel
+testfailureequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ builddeps:forbidden-foreign:armel : Depends: doxygen:any but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget build-dep forbidden-foreign -s -a armel
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libc6 specific
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6 (1.0 unstable [amd64])
+Inst specific (1.0 unstable [amd64])
+Conf libc6 (1.0 unstable [amd64])
+Conf specific (1.0 unstable [amd64])' aptget build-dep source-specific-amd64 -s
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libc6 specific
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6 (1.0 unstable [amd64])
+Inst specific (1.0 unstable [amd64])
+Conf libc6 (1.0 unstable [amd64])
+Conf specific (1.0 unstable [amd64])' aptget build-dep source-specific-amd64 -s -a armel
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libc6:armel specific:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6:armel (1.0 unstable [armel])
+Inst specific:armel (1.0 unstable [armel])
+Conf libc6:armel (1.0 unstable [armel])
+Conf specific:armel (1.0 unstable [armel])' aptget build-dep source-specific-armel -s
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libc6:armel specific:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6:armel (1.0 unstable [armel])
+Inst specific:armel (1.0 unstable [armel])
+Conf libc6:armel (1.0 unstable [armel])
+Conf specific:armel (1.0 unstable [armel])' aptget build-dep source-specific-armel -s -a armel
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ amdboot cool doxygen foreigner libc6 libc6-dev libfwibble-dev libfwibble1
+ linux-stuff
+0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded.
+Inst amdboot (1.0 unstable [amd64])
+Inst cool (1.0 unstable [amd64])
+Inst doxygen (1.0 unstable [amd64])
+Inst foreigner (1.0 unstable [amd64])
+Inst libc6 (1.0 unstable [amd64])
+Inst libc6-dev (1.0 unstable [amd64])
+Inst libfwibble1 (1.0 unstable [amd64])
+Inst libfwibble-dev (1.0 unstable [amd64])
+Inst linux-stuff (1.0 unstable [amd64])
+Conf amdboot (1.0 unstable [amd64])
+Conf cool (1.0 unstable [amd64])
+Conf doxygen (1.0 unstable [amd64])
+Conf foreigner (1.0 unstable [amd64])
+Conf libc6 (1.0 unstable [amd64])
+Conf libc6-dev (1.0 unstable [amd64])
+Conf libfwibble1 (1.0 unstable [amd64])
+Conf libfwibble-dev (1.0 unstable [amd64])
+Conf linux-stuff (1.0 unstable [amd64])' aptget build-dep apt -s
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ amdboot arm-stuff:armel cool doxygen foreigner libc6 libc6:armel libc6-dev
+ libc6-dev:armel libfwibble-dev:armel libfwibble1:armel
+0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
+Inst amdboot (1.0 unstable [amd64])
+Inst arm-stuff:armel (1.0 unstable [armel])
+Inst cool (1.0 unstable [amd64])
+Inst doxygen (1.0 unstable [amd64])
+Inst foreigner (1.0 unstable [amd64])
+Inst libc6 (1.0 unstable [amd64])
+Inst libc6:armel (1.0 unstable [armel])
+Inst libc6-dev (1.0 unstable [amd64])
+Inst libc6-dev:armel (1.0 unstable [armel])
+Inst libfwibble1:armel (1.0 unstable [armel])
+Inst libfwibble-dev:armel (1.0 unstable [armel])
+Conf amdboot (1.0 unstable [amd64])
+Conf arm-stuff:armel (1.0 unstable [armel])
+Conf cool (1.0 unstable [amd64])
+Conf doxygen (1.0 unstable [amd64])
+Conf foreigner (1.0 unstable [amd64])
+Conf libc6 (1.0 unstable [amd64])
+Conf libc6:armel (1.0 unstable [armel])
+Conf libc6-dev (1.0 unstable [amd64])
+Conf libc6-dev:armel (1.0 unstable [armel])
+Conf libfwibble1:armel (1.0 unstable [armel])
+Conf libfwibble-dev:armel (1.0 unstable [armel])' aptget build-dep apt -s -a armel
+
+configarchitecture 'armel' 'amd64'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ amdboot:amd64 arm-stuff cool doxygen foreigner libc6 libc6-dev
+ libfwibble-dev libfwibble1
+0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded.
+Inst amdboot:amd64 (1.0 unstable [amd64])
+Inst arm-stuff (1.0 unstable [armel])
+Inst cool (1.0 unstable [armel])
+Inst doxygen (1.0 unstable [armel])
+Inst foreigner (1.0 unstable [armel])
+Inst libc6 (1.0 unstable [armel])
+Inst libc6-dev (1.0 unstable [armel])
+Inst libfwibble1 (1.0 unstable [armel])
+Inst libfwibble-dev (1.0 unstable [armel])
+Conf amdboot:amd64 (1.0 unstable [amd64])
+Conf arm-stuff (1.0 unstable [armel])
+Conf cool (1.0 unstable [armel])
+Conf doxygen (1.0 unstable [armel])
+Conf foreigner (1.0 unstable [armel])
+Conf libc6 (1.0 unstable [armel])
+Conf libc6-dev (1.0 unstable [armel])
+Conf libfwibble1 (1.0 unstable [armel])
+Conf libfwibble-dev (1.0 unstable [armel])' aptget build-dep apt -s
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ amdboot:amd64 cool doxygen foreigner libc6 libc6:amd64 libc6-dev
+ libc6-dev:amd64 libfwibble-dev:amd64 libfwibble1:amd64 linux-stuff:amd64
+0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
+Inst amdboot:amd64 (1.0 unstable [amd64])
+Inst cool (1.0 unstable [armel])
+Inst doxygen (1.0 unstable [armel])
+Inst foreigner (1.0 unstable [armel])
+Inst libc6 (1.0 unstable [armel])
+Inst libc6:amd64 (1.0 unstable [amd64])
+Inst libc6-dev (1.0 unstable [armel])
+Inst libc6-dev:amd64 (1.0 unstable [amd64])
+Inst libfwibble1:amd64 (1.0 unstable [amd64])
+Inst libfwibble-dev:amd64 (1.0 unstable [amd64])
+Inst linux-stuff:amd64 (1.0 unstable [amd64])
+Conf amdboot:amd64 (1.0 unstable [amd64])
+Conf cool (1.0 unstable [armel])
+Conf doxygen (1.0 unstable [armel])
+Conf foreigner (1.0 unstable [armel])
+Conf libc6 (1.0 unstable [armel])
+Conf libc6:amd64 (1.0 unstable [amd64])
+Conf libc6-dev (1.0 unstable [armel])
+Conf libc6-dev:amd64 (1.0 unstable [amd64])
+Conf libfwibble1:amd64 (1.0 unstable [amd64])
+Conf libfwibble-dev:amd64 (1.0 unstable [amd64])
+Conf linux-stuff:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64
+
+configarchitecture 'amd64' 'armel'
+
+insertinstalledpackage 'cool' 'amd64' '0.5'
+insertinstalledpackage 'foreigner' 'armel' '0.5'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ amdboot doxygen libc6 libc6-dev libfwibble-dev libfwibble1 linux-stuff
+The following packages will be upgraded:
+ foreigner:armel
+1 upgraded, 7 newly installed, 0 to remove and 1 not upgraded.
+Inst amdboot (1.0 unstable [amd64])
+Inst doxygen (1.0 unstable [amd64])
+Inst foreigner:armel [0.5] (1.0 unstable [armel])
+Inst libc6 (1.0 unstable [amd64])
+Inst libc6-dev (1.0 unstable [amd64])
+Inst libfwibble1 (1.0 unstable [amd64])
+Inst libfwibble-dev (1.0 unstable [amd64])
+Inst linux-stuff (1.0 unstable [amd64])
+Conf amdboot (1.0 unstable [amd64])
+Conf doxygen (1.0 unstable [amd64])
+Conf foreigner:armel (1.0 unstable [armel])
+Conf libc6 (1.0 unstable [amd64])
+Conf libc6-dev (1.0 unstable [amd64])
+Conf libfwibble1 (1.0 unstable [amd64])
+Conf libfwibble-dev (1.0 unstable [amd64])
+Conf linux-stuff (1.0 unstable [amd64])' aptget build-dep apt -s
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ amdboot arm-stuff:armel doxygen libc6 libc6:armel libc6-dev libc6-dev:armel
+ libfwibble-dev:armel libfwibble1:armel
+The following packages will be upgraded:
+ cool
+1 upgraded, 9 newly installed, 0 to remove and 1 not upgraded.
+Inst amdboot (1.0 unstable [amd64])
+Inst arm-stuff:armel (1.0 unstable [armel])
+Inst cool [0.5] (1.0 unstable [amd64])
+Inst doxygen (1.0 unstable [amd64])
+Inst libc6 (1.0 unstable [amd64])
+Inst libc6:armel (1.0 unstable [armel])
+Inst libc6-dev (1.0 unstable [amd64])
+Inst libc6-dev:armel (1.0 unstable [armel])
+Inst libfwibble1:armel (1.0 unstable [armel])
+Inst libfwibble-dev:armel (1.0 unstable [armel])
+Conf amdboot (1.0 unstable [amd64])
+Conf arm-stuff:armel (1.0 unstable [armel])
+Conf cool (1.0 unstable [amd64])
+Conf doxygen (1.0 unstable [amd64])
+Conf libc6 (1.0 unstable [amd64])
+Conf libc6:armel (1.0 unstable [armel])
+Conf libc6-dev (1.0 unstable [amd64])
+Conf libc6-dev:armel (1.0 unstable [armel])
+Conf libfwibble1:armel (1.0 unstable [armel])
+Conf libfwibble-dev:armel (1.0 unstable [armel])' aptget build-dep apt -s -a armel
+
+configarchitecture 'armel' 'amd64'
+
+# cool 0.5 is not M-A: allowed, so amd64 is not acceptable
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ cool:amd64
+The following NEW packages will be installed:
+ amdboot:amd64 arm-stuff cool doxygen libc6 libc6-dev libfwibble-dev
+ libfwibble1
+0 upgraded, 8 newly installed, 1 to remove and 1 not upgraded.
+Remv cool:amd64 [0.5]
+Inst amdboot:amd64 (1.0 unstable [amd64])
+Inst arm-stuff (1.0 unstable [armel])
+Inst cool (1.0 unstable [armel])
+Inst doxygen (1.0 unstable [armel])
+Inst libc6 (1.0 unstable [armel])
+Inst libc6-dev (1.0 unstable [armel])
+Inst libfwibble1 (1.0 unstable [armel])
+Inst libfwibble-dev (1.0 unstable [armel])
+Conf amdboot:amd64 (1.0 unstable [amd64])
+Conf arm-stuff (1.0 unstable [armel])
+Conf cool (1.0 unstable [armel])
+Conf doxygen (1.0 unstable [armel])
+Conf libc6 (1.0 unstable [armel])
+Conf libc6-dev (1.0 unstable [armel])
+Conf libfwibble1 (1.0 unstable [armel])
+Conf libfwibble-dev (1.0 unstable [armel])' aptget build-dep apt -s
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ amdboot:amd64 doxygen libc6 libc6:amd64 libc6-dev libc6-dev:amd64
+ libfwibble-dev:amd64 libfwibble1:amd64 linux-stuff:amd64
+The following packages will be upgraded:
+ cool:amd64 foreigner
+2 upgraded, 9 newly installed, 0 to remove and 0 not upgraded.
+Inst amdboot:amd64 (1.0 unstable [amd64])
+Inst cool:amd64 [0.5] (1.0 unstable [amd64])
+Inst doxygen (1.0 unstable [armel])
+Inst foreigner [0.5] (1.0 unstable [armel])
+Inst libc6 (1.0 unstable [armel])
+Inst libc6:amd64 (1.0 unstable [amd64])
+Inst libc6-dev (1.0 unstable [armel])
+Inst libc6-dev:amd64 (1.0 unstable [amd64])
+Inst libfwibble1:amd64 (1.0 unstable [amd64])
+Inst libfwibble-dev:amd64 (1.0 unstable [amd64])
+Inst linux-stuff:amd64 (1.0 unstable [amd64])
+Conf amdboot:amd64 (1.0 unstable [amd64])
+Conf cool:amd64 (1.0 unstable [amd64])
+Conf doxygen (1.0 unstable [armel])
+Conf foreigner (1.0 unstable [armel])
+Conf libc6 (1.0 unstable [armel])
+Conf libc6:amd64 (1.0 unstable [amd64])
+Conf libc6-dev (1.0 unstable [armel])
+Conf libc6-dev:amd64 (1.0 unstable [amd64])
+Conf libfwibble1:amd64 (1.0 unstable [amd64])
+Conf libfwibble-dev:amd64 (1.0 unstable [amd64])
+Conf linux-stuff:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64
diff --git a/test/integration/test-bug-633350-do-not-kill-last-char-in-Release b/test/integration/test-bug-633350-do-not-kill-last-char-in-Release
new file mode 100755
index 0000000..d7dd261
--- /dev/null
+++ b/test/integration/test-bug-633350-do-not-kill-last-char-in-Release
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'cool' 'amd64' '1.0'
+
+export APT_DONT_SIGN='InRelease'
+setupaptarchive --no-update
+
+echo 'NotAutomatic: yes' >> aptarchive/dists/unstable/Release
+signreleasefiles
+testsuccess aptget update
diff --git a/test/integration/test-bug-64141-install-dependencies-for-on-hold b/test/integration/test-bug-64141-install-dependencies-for-on-hold
new file mode 100755
index 0000000..7bbb9bf
--- /dev/null
+++ b/test/integration/test-bug-64141-install-dependencies-for-on-hold
@@ -0,0 +1,46 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'native' 'strange-arch'
+
+insertpackage 'unstable' 'unrelated' 'strange-arch' '1'
+
+insertinstalledpackage 'apt' 'native' '0.8.9' 'Depends: libc6 (>= 2.3.4)'
+insertinstalledpackage 'libc6' 'native' '2.4.1-1'
+insertinstalledpackage 'oldcrap' 'all' '1-1'
+
+insertpackage 'unstable' 'apt' 'native' '0.8.10' 'Depends: libc6 (>= 2.10), libdb4.8
+Breaks: oldcrap'
+insertpackage 'unstable' 'libc6' 'native' '2.11.2-7'
+insertpackage 'unstable' 'libdb4.8' 'native' '4.8.30-3'
+
+setupaptarchive
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ oldcrap
+The following NEW packages will be installed:
+ libdb4.8
+The following packages will be upgraded:
+ apt libc6
+2 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+After this operation, 0 B of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only
+
+testsuccess aptmark hold apt
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ apt
+The following packages will be upgraded:
+ libc6
+1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
+After this operation, 0 B of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only -o Test='hold-back-apt'
diff --git a/test/integration/test-bug-657695-resolver-breaks-on-virtuals b/test/integration/test-bug-657695-resolver-breaks-on-virtuals
new file mode 100755
index 0000000..366113a
--- /dev/null
+++ b/test/integration/test-bug-657695-resolver-breaks-on-virtuals
@@ -0,0 +1,52 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'xserver-xorg-core' 'amd64' '2:1.7.6-2ubuntu7.10'
+for i in $(seq 1 50); do
+ insertinstalledpackage "xserver-xorg-video-driver$i" 'amd64' '1.0' 'Provides: xserver-xorg-video-6'
+done
+
+insertpackage 'unstable' 'xserver-xorg-core' 'amd64' '2:1.11.3-0ubuntu9' 'Breaks: xserver-xorg-video-6'
+
+
+setupaptarchive
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ xserver-xorg-video-driver1 xserver-xorg-video-driver10
+ xserver-xorg-video-driver11 xserver-xorg-video-driver12
+ xserver-xorg-video-driver13 xserver-xorg-video-driver14
+ xserver-xorg-video-driver15 xserver-xorg-video-driver16
+ xserver-xorg-video-driver17 xserver-xorg-video-driver18
+ xserver-xorg-video-driver19 xserver-xorg-video-driver2
+ xserver-xorg-video-driver20 xserver-xorg-video-driver21
+ xserver-xorg-video-driver22 xserver-xorg-video-driver23
+ xserver-xorg-video-driver24 xserver-xorg-video-driver25
+ xserver-xorg-video-driver26 xserver-xorg-video-driver27
+ xserver-xorg-video-driver28 xserver-xorg-video-driver29
+ xserver-xorg-video-driver3 xserver-xorg-video-driver30
+ xserver-xorg-video-driver31 xserver-xorg-video-driver32
+ xserver-xorg-video-driver33 xserver-xorg-video-driver34
+ xserver-xorg-video-driver35 xserver-xorg-video-driver36
+ xserver-xorg-video-driver37 xserver-xorg-video-driver38
+ xserver-xorg-video-driver39 xserver-xorg-video-driver4
+ xserver-xorg-video-driver40 xserver-xorg-video-driver41
+ xserver-xorg-video-driver42 xserver-xorg-video-driver43
+ xserver-xorg-video-driver44 xserver-xorg-video-driver45
+ xserver-xorg-video-driver46 xserver-xorg-video-driver47
+ xserver-xorg-video-driver48 xserver-xorg-video-driver49
+ xserver-xorg-video-driver5 xserver-xorg-video-driver50
+ xserver-xorg-video-driver6 xserver-xorg-video-driver7
+ xserver-xorg-video-driver8 xserver-xorg-video-driver9
+The following packages will be upgraded:
+ xserver-xorg-core
+1 upgraded, 0 newly installed, 50 to remove and 0 not upgraded.
+After this operation, 2150 kB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only
diff --git a/test/integration/test-bug-661537-build-profiles-support b/test/integration/test-bug-661537-build-profiles-support
new file mode 100755
index 0000000..d24484d
--- /dev/null
+++ b/test/integration/test-bug-661537-build-profiles-support
@@ -0,0 +1,161 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386' 'armel'
+
+insertinstalledpackage 'build-essential' 'all' '0' 'Multi-Arch: foreign'
+
+insertpackage 'unstable' 'foo' 'all' '1.0'
+insertpackage 'unstable' 'bar' 'all' '1.0'
+
+insertsource 'unstable' 'buildprofiles' 'any' '1' 'Build-Depends: foo (>= 1.0) [i386 arm] <!stage1 !cross>, bar'
+
+# table from https://wiki.debian.org/BuildProfileSpec
+insertsource 'unstable' 'spec-1' 'any' '1' 'Build-Depends: foo <!stage1>'
+insertsource 'unstable' 'spec-2' 'any' '1' 'Build-Depends: foo <stage1>'
+insertsource 'unstable' 'spec-3' 'any' '1' 'Build-Depends: foo <!stage1 !notest>'
+insertsource 'unstable' 'spec-4' 'any' '1' 'Build-Depends: foo <stage1 notest>'
+insertsource 'unstable' 'spec-5' 'any' '1' 'Build-Depends: foo <!stage1 notest>'
+insertsource 'unstable' 'spec-6' 'any' '1' 'Build-Depends: foo <stage1 !notest>'
+insertsource 'unstable' 'spec-7' 'any' '1' 'Build-Depends: foo <stage1> <!notest>'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [all])
+Conf bar (1.0 unstable [all])' aptget build-dep buildprofiles -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [all])
+Inst foo (1.0 unstable [all])
+Conf bar (1.0 unstable [all])
+Conf foo (1.0 unstable [all])' aptget build-dep buildprofiles -s -o APT::Architecture=i386
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [all])
+Conf bar (1.0 unstable [all])' aptget build-dep buildprofiles -s -o APT::Architecture=armel
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [all])
+Conf bar (1.0 unstable [all])' aptget build-dep buildprofiles -s -o APT::Architecture=i386 -P stage1
+
+KEEP='Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [all])
+Conf foo (1.0 unstable [all])'
+setdrop() {
+ DROP="Reading package lists...
+$1 has no build depends.
+Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded."
+}
+
+msgtest 'Check if version of installed dpkg is high enough for' 'build profiles support'
+if dpkg --compare-versions "$(dpkg_version)" 'ge' '1.17.14'; then
+ msgpass
+ testwithdpkg() {
+ msgtest "Test with" "dpkg-checkbuilddeps -d '$1' -P '$2'"
+ local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwithdpkg.output"
+ if dpkgcheckbuilddeps -d "$1" -P "$2" /dev/null >$OUTPUT 2>&1; then
+ if [ "$3" = "$DROP" ]; then
+ msgpass
+ else
+ cat $OUTPUT
+ msgfail
+ fi
+ else
+ if [ "$3" = "$KEEP" ]; then
+ msgpass
+ else
+ cat $OUTPUT
+ msgfail
+ fi
+ fi
+ }
+else
+ msgskip
+ testwithdpkg() {
+ msgtest "Test with" "dpkg-checkbuilddeps -d '$1' -P '$2'"
+ msgskip
+ }
+fi
+
+testprofile() {
+ if [ -n "$3" ]; then
+ testequal "$4" aptget build-dep "$1" -s -P "$3"
+ export DEB_BUILD_PROFILES="$(echo "$3" | tr ',' ' ')"
+ testequal "$4" aptget build-dep "$1" -s -o with::environment=1
+ unset DEB_BUILD_PROFILES
+ else
+ testequal "$4" aptget build-dep "$1" -s
+ fi
+ testwithdpkg "$2" "$3" "$4"
+}
+
+testsuccess aptcache gencaches
+setdrop 'spec-1'
+testprofile 'spec-1' 'foo <!stage1>' '' "$KEEP"
+testprofile 'spec-1' 'foo <!stage1>' 'stage1' "$DROP"
+testprofile 'spec-1' 'foo <!stage1>' 'notest' "$KEEP"
+testprofile 'spec-1' 'foo <!stage1>' 'stage1,notest' "$DROP"
+
+setdrop 'spec-2'
+testprofile 'spec-2' 'foo <stage1>' '' "$DROP"
+testprofile 'spec-2' 'foo <stage1>' 'stage1' "$KEEP"
+testprofile 'spec-2' 'foo <stage1>' 'notest' "$DROP"
+testprofile 'spec-2' 'foo <stage1>' 'stage1,notest' "$KEEP"
+
+setdrop 'spec-3'
+testprofile 'spec-3' 'foo <!stage1 !notest>' '' "$KEEP"
+testprofile 'spec-3' 'foo <!stage1 !notest>' 'stage1' "$DROP"
+testprofile 'spec-3' 'foo <!stage1 !notest>' 'notest' "$DROP"
+testprofile 'spec-3' 'foo <!stage1 !notest>' 'stage1,notest' "$DROP"
+
+setdrop 'spec-4'
+testprofile 'spec-4' 'foo <stage1 notest>' '' "$DROP"
+testprofile 'spec-4' 'foo <stage1 notest>' 'stage1' "$DROP"
+testprofile 'spec-4' 'foo <stage1 notest>' 'notest' "$DROP"
+testprofile 'spec-4' 'foo <stage1 notest>' 'stage1,notest' "$KEEP"
+
+setdrop 'spec-5'
+testprofile 'spec-5' 'foo <!stage1 notest>' '' "$DROP"
+testprofile 'spec-5' 'foo <!stage1 notest>' 'stage1' "$DROP"
+testprofile 'spec-5' 'foo <!stage1 notest>' 'notest' "$KEEP"
+testprofile 'spec-5' 'foo <!stage1 notest>' 'stage1,notest' "$DROP"
+
+setdrop 'spec-6'
+testprofile 'spec-6' 'foo <stage1 !notest>' '' "$DROP"
+testprofile 'spec-6' 'foo <stage1 !notest>' 'stage1' "$KEEP"
+testprofile 'spec-6' 'foo <stage1 !notest>' 'notest' "$DROP"
+testprofile 'spec-6' 'foo <stage1 !notest>' 'stage1,notest' "$DROP"
+
+setdrop 'spec-7'
+testprofile 'spec-7' 'foo <stage1> <!notest>' '' "$KEEP"
+testprofile 'spec-7' 'foo <stage1> <!notest>' 'stage1' "$KEEP"
+testprofile 'spec-7' 'foo <stage1> <!notest>' 'notest' "$DROP"
+testprofile 'spec-7' 'foo <stage1> <!notest>' 'stage1,notest' "$KEEP"
diff --git a/test/integration/test-bug-673536-pre-depends-breaks-loop b/test/integration/test-bug-673536-pre-depends-breaks-loop
new file mode 100755
index 0000000..a4cf669
--- /dev/null
+++ b/test/integration/test-bug-673536-pre-depends-breaks-loop
@@ -0,0 +1,36 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'native'
+
+buildsimplenativepackage 'advanced' 'native' '1' 'stable'
+buildsimplenativepackage 'advanced' 'native' '2' 'unstable' 'Pre-Depends: basic'
+buildsimplenativepackage 'basic' 'native' '2' 'unstable' 'Pre-Depends: common'
+
+buildsimplenativepackage 'common' 'native' '2~conflict' 'unstable-conflict' 'Conflicts: advanced (<= 1)'
+buildsimplenativepackage 'common' 'native' '2~break' 'unstable-break' 'Breaks: advanced (<= 1)'
+
+setupaptarchive
+
+# we check with 'real' packages here as the simulation reports a 'Conf broken'
+# which is technical correct for the simulation, but testing errormsg is ugly
+
+cp -a rootdir/var/lib/dpkg/status dpkg.status.backup
+
+testloopbreak() {
+ cp -a dpkg.status.backup rootdir/var/lib/dpkg/status
+ rm -f rootdir/var/lib/apt/extended_states
+
+ testsuccess aptget install advanced=1 -y -t "$1"
+ testdpkginstalled advanced
+ testdpkgnotinstalled basic common
+
+ testsuccess aptget dist-upgrade -y -t "$1"
+ testdpkginstalled advanced basic common
+}
+
+testloopbreak 'unstable-break'
+testloopbreak 'unstable-conflict'
diff --git a/test/integration/test-bug-675449-essential-are-protected b/test/integration/test-bug-675449-essential-are-protected
new file mode 100755
index 0000000..69f6c2a
--- /dev/null
+++ b/test/integration/test-bug-675449-essential-are-protected
@@ -0,0 +1,103 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'pkg-native' 'amd64' '1' 'Multi-Arch: foreign
+Essential: yes'
+insertinstalledpackage 'pkg-foreign' 'i386' '1' 'Multi-Arch: foreign
+Essential: yes'
+insertinstalledpackage 'pkg-none-native' 'amd64' '1' 'Essential: yes'
+insertinstalledpackage 'pkg-none-foreign' 'i386' '1' 'Essential: yes'
+
+insertpackage 'unstable' 'pkg-native' 'amd64,i386' '2' 'Multi-Arch: foreign
+Essential: yes'
+insertpackage 'unstable' 'pkg-foreign' 'amd64,i386' '2' 'Multi-Arch: foreign
+Depends: pkg-depends-new
+Essential: yes'
+insertpackage 'unstable' 'pkg-none-native' 'amd64,i386' '2' 'Essential: yes'
+insertpackage 'unstable' 'pkg-none-foreign' 'amd64,i386' '2' 'Essential: yes
+Depends: pkg-depends-new'
+
+insertpackage 'unstable' 'pkg-none-new' 'amd64,i386' '2' 'Essential: yes'
+insertpackage 'unstable' 'pkg-depends-new' 'amd64,i386' '2' 'Essential: yes'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ pkg-native*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ pkg-native
+0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
+Purg pkg-native [1]' aptget purge pkg-native -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ pkg-foreign:i386*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ pkg-foreign:i386
+0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
+Purg pkg-foreign:i386 [1]' aptget purge pkg-foreign:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ pkg-none-native*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ pkg-none-native
+0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
+Purg pkg-none-native [1]' aptget purge pkg-none-native -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ pkg-none-foreign:i386*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ pkg-none-foreign:i386
+0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
+Purg pkg-none-foreign:i386 [1]' aptget purge pkg-none-foreign:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ pkg-depends-new:i386 pkg-none-new
+The following packages will be upgraded:
+ pkg-foreign:i386 pkg-native pkg-none-foreign:i386 pkg-none-native
+4 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst pkg-depends-new:i386 (2 unstable [i386])
+Conf pkg-depends-new:i386 (2 unstable [i386])
+Inst pkg-foreign:i386 [1] (2 unstable [i386])
+Conf pkg-foreign:i386 (2 unstable [i386])
+Inst pkg-native [1] (2 unstable [amd64])
+Conf pkg-native (2 unstable [amd64])
+Inst pkg-none-foreign:i386 [1] (2 unstable [i386])
+Conf pkg-none-foreign:i386 (2 unstable [i386])
+Inst pkg-none-native [1] (2 unstable [amd64])
+Conf pkg-none-native (2 unstable [amd64])
+Inst pkg-none-new (2 unstable [amd64])
+Conf pkg-none-new (2 unstable [amd64])' aptget dist-upgrade -s
+
+insertinstalledpackage 'foo' 'amd64' '1' 'Depends: libfoo
+Essential: yes'
+insertinstalledpackage 'libfoo' 'amd64' '1'
+testequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ foo* libfoo*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ foo libfoo (due to foo)
+0 upgraded, 0 newly installed, 2 to remove and 4 not upgraded.
+Purg foo [1]
+Purg libfoo [1]' aptget purge libfoo -s
diff --git a/test/integration/test-bug-679371-apt-get-autoclean-multiarch b/test/integration/test-bug-679371-apt-get-autoclean-multiarch
new file mode 100755
index 0000000..47e5aa1
--- /dev/null
+++ b/test/integration/test-bug-679371-apt-get-autoclean-multiarch
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'pkgall' 'all' '1' 'stable'
+buildsimplenativepackage 'pkgnative' 'amd64' '1' 'stable'
+buildsimplenativepackage 'pkgforeign' 'i386' '1' 'stable'
+
+setupaptarchive
+
+changetowebserver
+
+testsuccess aptget update
+testsuccess aptget install pkgall pkgnative pkgforeign -y
+
+# if we work with an old dpkg, pkgforeign will be listed differently,
+# so test with aptcache for install status instead
+testdpkginstalled pkgall pkgnative
+testsuccess aptcache show pkgforeign/installed
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...' aptget autoclean -s
diff --git a/test/integration/test-bug-680041-apt-mark-holds-correctly b/test/integration/test-bug-680041-apt-mark-holds-correctly
new file mode 100755
index 0000000..49bb21b
--- /dev/null
+++ b/test/integration/test-bug-680041-apt-mark-holds-correctly
@@ -0,0 +1,76 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'pkgarch' 'amd64' '1'
+insertinstalledpackage 'pkgall' 'all' '1'
+
+insertpackage 'unstable' 'pkgarch' 'amd64' '2'
+insertpackage 'unstable' 'pkgall' 'all' '2'
+
+setupaptarchive
+
+runtests() {
+ testempty aptmark showhold
+
+ testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ pkgall pkgarch
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 0 B of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only
+
+ testsuccessequal 'pkgarch set on hold.' aptmark hold pkgarch
+ testsuccessequal 'pkgarch' aptmark showhold
+
+ testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ pkgarch
+The following packages will be upgraded:
+ pkgall
+1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
+After this operation, 0 B of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only
+
+ testsuccessequal 'Canceled hold on pkgarch.' aptmark unhold pkgarch
+ testempty aptmark showhold
+
+ testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ pkgall pkgarch
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 0 B of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only
+
+ testsuccessequal 'pkgall set on hold.' aptmark hold pkgall
+ testsuccessequal 'pkgall' aptmark showhold
+
+ testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ pkgall
+The following packages will be upgraded:
+ pkgarch
+1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
+After this operation, 0 B of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only
+
+ testsuccessequal 'Canceled hold on pkgall.' aptmark unhold pkgall
+ testempty aptmark showhold
+}
+# single-arch
+runtests
+# multi-arch
+configarchitecture 'amd64' 'i386'
+runtests
diff --git a/test/integration/test-bug-683786-build-dep-on-virtual-packages b/test/integration/test-bug-683786-build-dep-on-virtual-packages
new file mode 100755
index 0000000..831e1f8
--- /dev/null
+++ b/test/integration/test-bug-683786-build-dep-on-virtual-packages
@@ -0,0 +1,107 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'armel'
+
+insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign'
+
+insertpackage 'unstable' 'po-debconf' 'all' '1'
+insertsource 'unstable' 'dash' 'any' '1' 'Build-Depends: po-debconf'
+insertpackage 'unstable' 'make-po-debconf-pure-virtual' 'armel' '1' 'Depends: po-debconf'
+
+insertsource 'unstable' 'diffutils' 'any' '1' 'Build-Depends: texi2html'
+
+insertpackage 'unstable' 'libselinux1-dev' 'amd64' '1' 'Provides: libselinux-dev'
+insertsource 'unstable' 'sed' 'any' '1' 'Build-Depends: libselinux-dev'
+
+insertpackage 'unstable' 'libsehurd1-dev' 'amd64,armel' '1' 'Provides: libsehurd-dev'
+insertsource 'unstable' 'sed2' 'any' '1' 'Build-Depends: libsehurd-dev'
+
+setupaptarchive
+
+testsuccessequal 'Package: po-debconf:armel
+Versions:
+
+Reverse Depends:
+ make-po-debconf-pure-virtual:armel,po-debconf:armel
+Dependencies:
+Provides:
+Reverse Provides: ' aptcache showpkg po-debconf:armel
+testsuccessequal 'N: Unable to locate package texi2html:armel' aptcache showpkg texi2html:armel
+
+testsuccessequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ po-debconf
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst po-debconf (1 unstable [all])
+Conf po-debconf (1 unstable [all])' aptget build-dep dash -s
+
+testfailureequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ builddeps:dash:armel : Depends: po-debconf:armel but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget build-dep -aarmel dash -s
+testfailureequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ builddeps:diffutils:armel : Depends: texi2html:armel but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget build-dep -aarmel diffutils -s
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libselinux1-dev
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libselinux1-dev (1 unstable [amd64])
+Conf libselinux1-dev (1 unstable [amd64])" aptget build-dep sed -s
+
+testfailureequal 'Reading package lists...
+Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ builddeps:sed:armel : Depends: libselinux-dev:armel but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget build-dep -aarmel sed -s
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsehurd1-dev
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsehurd1-dev (1 unstable [amd64])
+Conf libsehurd1-dev (1 unstable [amd64])" aptget build-dep sed2 -s
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsehurd1-dev:armel
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsehurd1-dev:armel (1 unstable [armel])
+Conf libsehurd1-dev:armel (1 unstable [armel])" aptget build-dep -aarmel sed2 -s
diff --git a/test/integration/test-bug-686346-package-missing-architecture b/test/integration/test-bug-686346-package-missing-architecture
new file mode 100755
index 0000000..d28600a
--- /dev/null
+++ b/test/integration/test-bug-686346-package-missing-architecture
@@ -0,0 +1,113 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'pkgb' 'none' '1'
+insertinstalledpackage 'pkgd' 'none' '1'
+insertpackage 'unstable' 'pkga' 'amd64' '2' 'Depends: pkgb'
+insertpackage 'unstable' 'pkgb' 'amd64' '2'
+insertpackage 'unstable' 'pkgc' 'amd64' '1' 'Conflicts: pkgb'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ pkgb:none
+The following NEW packages will be installed:
+ pkgc
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv pkgb:none [1]
+Inst pkgc (1 unstable [amd64])
+Conf pkgc (1 unstable [amd64])' aptget install pkgc -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ pkgb
+The following packages will be REMOVED:
+ pkgb:none
+The following NEW packages will be installed:
+ pkga pkgb
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv pkgb:none [1]
+Inst pkgb (2 unstable [amd64])
+Inst pkga (2 unstable [amd64])
+Conf pkgb (2 unstable [amd64])
+Conf pkga (2 unstable [amd64])' aptget install pkga -s
+
+# do not automatically change from none-arch to whatever-arch as
+# this breaks other none packages and dpkg has this ruleset as
+# this difference seems so important that it has to be maintained …
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade -s
+
+# pkgd has no update with an architecture
+testdpkginstalled pkgd
+msgtest 'Test apt-get purge' 'pkgd'
+testsuccess --nomsg aptget purge pkgd -y
+testdpkgnotinstalled pkgd
+
+# there is a pkgb with an architecture
+testdpkginstalled pkgb
+msgtest 'Test apt-get purge' 'pkgb:none'
+testsuccess --nomsg aptget purge pkgb:none -y
+testdpkgnotinstalled pkgb
+
+# check that dependencies are created after the none package exists in the cache
+rm rootdir/var/cache/apt/*.bin
+insertinstalledpackage 'pkgb' 'none' '1'
+insertinstalledpackage 'pkgf' 'none' '1' 'Conflicts: pkgb'
+insertinstalledpackage 'pkgg' 'amd64' '1' 'Conflicts: pkgb'
+insertinstalledpackage 'pkgb' 'amd64' '2'
+testequalor2 "Reading package lists...
+Building dependency tree...
+Reading state information...
+You might want to run 'apt --fix-broken install' to correct these.
+The following packages have unmet dependencies:
+ pkgb : Conflicts: pkgb:none but 1 is installed
+ pkgb:none : Conflicts: pkgb but 2 is installed
+ pkgf:none : Conflicts: pkgb:none but 1 is installed
+ Conflicts: pkgb but 2 is installed
+ pkgg : Conflicts: pkgb but 2 is installed
+ Conflicts: pkgb:none but 1 is installed
+E: Unmet dependencies. Try using --fix-broken." "Reading package lists...
+Building dependency tree...
+Reading state information...
+You might want to run 'apt --fix-broken install' to correct these.
+The following packages have unmet dependencies:
+ pkgb : Conflicts: pkgb:none but 1 is installed
+ pkgb:none : Conflicts: pkgb but 2 is installed
+ pkgf:none : Conflicts: pkgb but 2 is installed
+ Conflicts: pkgb:none but 1 is installed
+ pkgg : Conflicts: pkgb but 2 is installed
+ Conflicts: pkgb:none but 1 is installed
+E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution)." aptget check
+
+# check that dependencies are generated for none-packages
+rm rootdir/var/lib/dpkg/status
+insertinstalledpackage 'pkgx' 'none' '1'
+insertinstalledpackage 'pkgy' 'none' '1' 'Depends: pkgz, pkgx (>= 1)'
+insertinstalledpackage 'pkgz' 'none' '1'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ pkgx:none* pkgy:none*
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+Purg pkgy:none [1]
+Purg pkgx:none [1]' aptget purge pkgx -s
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ pkgy:none* pkgz:none*
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+Purg pkgy:none [1]
+Purg pkgz:none [1]' aptget purge pkgz -s
diff --git a/test/integration/test-bug-689582-100-char-long-path-names b/test/integration/test-bug-689582-100-char-long-path-names
new file mode 100755
index 0000000..290654b
--- /dev/null
+++ b/test/integration/test-bug-689582-100-char-long-path-names
@@ -0,0 +1,35 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+mkdir aptarchive/testpkg
+cd aptarchive/testpkg
+
+for i in $(seq 98 102); do
+ touch "$(printf "%0${i}d" "$i")"
+done
+tar zcf data.tar.gz 00*
+
+echo 'Package: testpkg
+Version: 1-1
+Architecture: all
+Maintainer: Joe Sixpack <joe@example.org>
+Description: Package for test
+Section: debug
+Priority: extra' > control
+tar zcf control.tar.gz control
+
+echo '2.0' > debian-binary
+ar cr ../testpkg.deb debian-binary control.tar.gz data.tar.gz
+
+cd - > /dev/null
+
+testsuccessequal '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102 testpkg
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101 testpkg
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 testpkg
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099 testpkg
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098 testpkg' aptftparchive contents aptarchive/
diff --git a/test/integration/test-bug-691453-apt-cache-search-multi-pattern b/test/integration/test-bug-691453-apt-cache-search-multi-pattern
new file mode 100755
index 0000000..8aa6ca7
--- /dev/null
+++ b/test/integration/test-bug-691453-apt-cache-search-multi-pattern
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'native'
+
+insertpackage 'unstable' 'foobar' 'native' '1' '' '' 'funky tool'
+insertpackage 'unstable' 'coolstuff' 'native' '1' '' '' 'funky tool just like foo and bar'
+insertpackage 'unstable' 'foo' 'native' '1' '' '' 'tool best used with bar'
+insertpackage 'unstable' 'bar' 'native' '1' '' '' 'tool best used with foo'
+insertpackage 'unstable' 'baz' 'native' '1' 'Provides: bar' '' 'alternative tool best used with foo'
+
+setupaptarchive
+
+# in this special case the following queries should be equal
+FOOBAR='foobar - funky tool
+coolstuff - funky tool just like foo and bar
+foo - tool best used with bar
+bar - tool best used with foo
+baz - alternative tool best used with foo'
+
+testsuccessequal "$FOOBAR" aptcache search foo
+testsuccessequal "$FOOBAR" aptcache search bar
+testsuccessequal "$FOOBAR" aptcache search foo bar
+
+testsuccessequal 'foobar - funky tool
+foo - tool best used with bar' aptcache search -n foo
+testsuccessequal 'foobar - funky tool
+bar - tool best used with foo
+baz - alternative tool best used with foo' aptcache search -n bar
+testsuccessequal 'foobar - funky tool' aptcache search -n foo bar
diff --git a/test/integration/test-bug-709560-set-candidate-release b/test/integration/test-bug-709560-set-candidate-release
new file mode 100755
index 0000000..43eea36
--- /dev/null
+++ b/test/integration/test-bug-709560-set-candidate-release
@@ -0,0 +1,36 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'experimental' 'foo' 'all' '2.0' 'Depends: foo-dep (= 2.1)'
+insertpackage 'experimental' 'foo-dep' 'all' '2.1'
+
+
+(
+cat <<EOF
+Package: *
+Pin: release a=experimental
+Pin-Priority: -10
+EOF
+) > rootdir/etc/apt/preferences
+
+
+setupaptarchive
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Selected version '2.0' (experimental [all]) for 'foo'
+Selected version '2.1' (experimental [all]) for 'foo-dep' because of 'foo'
+The following additional packages will be installed:
+ foo-dep
+The following NEW packages will be installed:
+ foo foo-dep
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo-dep (2.1 experimental [all])
+Inst foo (2.0 experimental [all])
+Conf foo-dep (2.1 experimental [all])
+Conf foo (2.0 experimental [all])" aptget install -q0 -s foo/experimental
diff --git a/test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch b/test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch
new file mode 100755
index 0000000..9c96bbe
--- /dev/null
+++ b/test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch
@@ -0,0 +1,152 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'toolkit' 'all' '1' 'stable' 'Multi-Arch: foreign'
+buildsimplenativepackage 'toolkit' 'amd64' '2' 'unstable' 'Multi-Arch: foreign'
+buildsimplenativepackage 'libsame' 'i386,amd64' '1' 'stable' 'Multi-Arch: same'
+buildsimplenativepackage 'libsame' 'i386,amd64' '2' 'unstable' 'Multi-Arch: same'
+buildsimplenativepackage 'stuff' 'i386,amd64' '1' 'stable' 'Depends: libsame (= 1), toolkit (= 1)'
+buildsimplenativepackage 'stuff' 'i386,amd64' '2' 'unstable' 'Depends: libsame (= 2), toolkit (= 2)'
+
+setupsimplenativepackage 'confpkg' 'amd64' '1' 'unstable'
+BUILDDIR='incoming/confpkg-1'
+echo 'foo "bar";' > ${BUILDDIR}/pkg.conf
+echo 'pkg.conf /etc/pkg.conf' >> ${BUILDDIR}/debian/install
+buildpackage "$BUILDDIR" 'unstable' 'main' 'amd64'
+rm -rf "$BUILDDIR"
+
+setupaptarchive
+
+hook='pre-install-pkgs'
+
+enablehookversion() {
+ echo "#!/bin/sh
+FD=0
+echo -n > ${hook}-v${1}.list
+if [ -n \"${2}\" ]; then
+ FD=\$APT_HOOK_INFO_FD
+ if [ "\$FD" != \"${2}\" ]; then echo \"ERROR: Information is not on requested FD: \$FD != ${2}\" >> ${hook}-v${1}.list; fi
+fi
+while read </dev/fd/\$FD line; do
+ if echo \"\$line\" | grep -Fq '**'; then
+ echo \"\$line\"
+ fi
+done >> ${hook}-v${1}.list" > ${hook}-v${1}.sh
+ chmod +x ${hook}-v${1}.sh
+ echo "dpkg::${hook}:: \"./${hook}-v${1}.sh --foo -bar\";
+DPkg::Tools::options::\"./${hook}-v${1}.sh\"::Version \"$1\";" > rootdir/etc/apt/apt.conf.d/hook-v$1
+ if [ -n "$2" ]; then
+ echo "DPkg::Tools::options::\"./${hook}-v${1}.sh\"::InfoFD \"${2}\";" >> rootdir/etc/apt/apt.conf.d/hook-v$1
+ fi
+}
+
+observehook() {
+ rm -f ${hook}-v2.list ${hook}-v3.list
+ msgtest 'Observe hooks while' "$*"
+ testsuccess --nomsg aptget "$@" -y --allow-downgrades --planner $planner -o Debug::pkgDPkgProgressReporting=1
+ # different planners have different orders – we don't care in this test here
+ if [ -e ${hook}-v2.list ]; then
+ sort < ${hook}-v2.list > ${hook}-v2.list.new
+ mv ${hook}-v2.list.new ${hook}-v2.list
+ fi
+ if [ -e ${hook}-v3.list ]; then
+ sort < ${hook}-v3.list > ${hook}-v3.list.new
+ mv ${hook}-v3.list.new ${hook}-v3.list
+ fi
+}
+
+testrun() {
+ observehook install stuff -t stable
+ testfileequal "${hook}-v2.list" 'libsame - < 1 **CONFIGURE**
+stuff - < 1 **CONFIGURE**
+toolkit - < 1 **CONFIGURE**'
+ testfileequal "${hook}-v3.list" 'libsame - - none < 1 amd64 same **CONFIGURE**
+stuff - - none < 1 amd64 none **CONFIGURE**
+toolkit - - none < 1 all foreign **CONFIGURE**'
+
+ observehook install stuff -t unstable
+ testfileequal "${hook}-v2.list" 'libsame 1 < 2 **CONFIGURE**
+stuff 1 < 2 **CONFIGURE**
+toolkit 1 < 2 **CONFIGURE**'
+ testfileequal "${hook}-v3.list" 'libsame 1 amd64 same < 2 amd64 same **CONFIGURE**
+stuff 1 amd64 none < 2 amd64 none **CONFIGURE**
+toolkit 1 all foreign < 2 amd64 foreign **CONFIGURE**'
+
+ observehook install stuff:i386 -t unstable
+ testfileequal "${hook}-v2.list" 'libsame - < 2 **CONFIGURE**
+stuff - < 2 **CONFIGURE**
+stuff 2 > - **REMOVE**'
+ testfileequal "${hook}-v3.list" 'libsame - - none < 2 i386 same **CONFIGURE**
+stuff - - none < 2 i386 none **CONFIGURE**
+stuff 2 amd64 none > - - none **REMOVE**'
+
+ observehook remove libsame
+ testfileequal "${hook}-v2.list" 'libsame 2 > - **REMOVE**'
+ testfileequal "${hook}-v3.list" 'libsame 2 amd64 same > - - none **REMOVE**'
+
+ observehook install stuff:i386/stable libsame:i386/stable toolkit/stable
+ testfileequal "${hook}-v2.list" 'libsame 2 > 1 **CONFIGURE**
+stuff 2 > 1 **CONFIGURE**
+toolkit 2 > 1 **CONFIGURE**'
+ testfileequal "${hook}-v3.list" 'libsame 2 i386 same > 1 i386 same **CONFIGURE**
+stuff 2 i386 none > 1 i386 none **CONFIGURE**
+toolkit 2 amd64 foreign > 1 all foreign **CONFIGURE**'
+
+ observehook install 'libsame:*'
+ testfileequal "${hook}-v2.list" 'libsame - < 2 **CONFIGURE**
+libsame 1 < 2 **CONFIGURE**
+stuff 1 < 2 **CONFIGURE**
+toolkit 1 < 2 **CONFIGURE**'
+ testfileequal "${hook}-v3.list" 'libsame - - none < 2 amd64 same **CONFIGURE**
+libsame 1 i386 same < 2 i386 same **CONFIGURE**
+stuff 1 i386 none < 2 i386 none **CONFIGURE**
+toolkit 1 all foreign < 2 amd64 foreign **CONFIGURE**'
+
+ observehook purge stuff:i386 'libsame:*' toolkit
+ testfileequal "${hook}-v2.list" 'libsame 2 > - **REMOVE**
+libsame 2 > - **REMOVE**
+stuff 2 > - **REMOVE**
+toolkit 2 > - **REMOVE**'
+ testfileequal "${hook}-v3.list" 'libsame 2 amd64 same > - - none **REMOVE**
+libsame 2 i386 same > - - none **REMOVE**
+stuff 2 i386 none > - - none **REMOVE**
+toolkit 2 amd64 foreign > - - none **REMOVE**'
+
+ observehook install confpkg
+ testfileequal "${hook}-v2.list" 'confpkg - < 1 **CONFIGURE**'
+ testfileequal "${hook}-v3.list" 'confpkg - - none < 1 amd64 none **CONFIGURE**'
+
+ observehook remove confpkg
+ testfileequal "${hook}-v2.list" 'confpkg 1 > - **REMOVE**'
+ testfileequal "${hook}-v3.list" 'confpkg 1 amd64 none > - - none **REMOVE**'
+
+ msgtest 'Conffiles of package remained after remove' 'confpkg'
+ dpkg -l confpkg | grep -q '^rc' && msgpass || msgfail
+
+ observehook purge confpkg
+ testfileequal "${hook}-v2.list" 'confpkg 1 > - **REMOVE**'
+ testfileequal "${hook}-v3.list" 'confpkg 1 amd64 none > - - none **REMOVE**'
+
+ msgtest 'Conffiles are gone after purge' 'confpkg'
+ dpkg -l confpkg 2>/dev/null | grep -q '^rc' && msgfail || msgpass
+}
+
+runwithplanner()
+{
+ msgmsg 'Running with planner' "$1"
+ planner="$1"
+ enablehookversion 2
+ enablehookversion 3
+ testrun
+
+ enablehookversion 2 13
+ enablehookversion 3 13
+ testrun
+}
+
+runwithplanner 'apt'
diff --git a/test/integration/test-bug-712435-missing-descriptions b/test/integration/test-bug-712435-missing-descriptions
new file mode 100755
index 0000000..c231993
--- /dev/null
+++ b/test/integration/test-bug-712435-missing-descriptions
@@ -0,0 +1,162 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+PACKAGESTANZA='Version: 0.9.7.8
+Installed-Size: 3270
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: amd64
+Filename: pool/main/a/apt/apt_0.9.7.8_amd64.deb
+MD5sum: 3a622acda41620df50aa22a9fac6f32e'
+
+DESCRIPTION='Description: commandline package manager
+ This APT has Super Cow Powers.'
+
+TRANSDESCRIPTION='Description-en: commandline package manager
+ This APT has translated Super Cow Powers.'
+
+echo "Package: apt-normal
+$PACKAGESTANZA
+$DESCRIPTION
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+Package: apt-both-below
+$PACKAGESTANZA
+$DESCRIPTION
+$TRANSDESCRIPTION
+Description-md5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+
+Package: apt-both-middle
+$PACKAGESTANZA
+$DESCRIPTION
+Description-md5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+$TRANSDESCRIPTION
+
+Package: apt-both-top
+$PACKAGESTANZA
+Description-md5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+$DESCRIPTION
+$TRANSDESCRIPTION
+
+Package: apt-trans
+$PACKAGESTANZA
+$TRANSDESCRIPTION
+Description-md5: cccccccccccccccccccccccccccccccc
+
+Package: apt-md5
+$PACKAGESTANZA
+Description-md5: dddddddddddddddddddddddddddddddd
+
+Package: apt-none
+$PACKAGESTANZA
+
+Package: apt-intermixed
+$PACKAGESTANZA
+$DESCRIPTION
+X-Some-Flag: yes
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+Package: apt-intermixed2
+$PACKAGESTANZA
+$DESCRIPTION
+X-Some-Flag: yes
+$TRANSDESCRIPTION
+X-Foo-Flag: Something with a Description
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+X-Bar-Flag: no
+
+Package: apt-intermixed3
+$PACKAGESTANZA
+$DESCRIPTION
+X-Some-Flag: yes
+$TRANSDESCRIPTION
+X-Foo-Flag: Something with a Description
+X-Bar-Flag: no
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" > aptarchive/Packages
+
+
+setupaptarchive
+
+testsuccessequal "Package: apt-normal
+$PACKAGESTANZA
+$DESCRIPTION
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+" aptcache show apt-normal
+
+for variant in 'below' 'middle' 'top'; do
+ testsuccessequal "Package: apt-both-$variant
+$PACKAGESTANZA
+$TRANSDESCRIPTION
+Description-md5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+" aptcache show apt-both-$variant
+done
+
+testsuccessequal "Package: apt-trans
+$PACKAGESTANZA
+$TRANSDESCRIPTION
+Description-md5: cccccccccccccccccccccccccccccccc
+" aptcache show apt-trans
+
+testsuccessequal "Package: apt-md5
+$PACKAGESTANZA
+Description-md5: dddddddddddddddddddddddddddddddd
+" aptcache show apt-md5
+
+testsuccessequal "Package: apt-none
+$PACKAGESTANZA
+" aptcache show apt-none
+
+testsuccessequal "Package: apt-intermixed
+$PACKAGESTANZA
+$DESCRIPTION
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+X-Some-Flag: yes
+" aptcache show apt-intermixed
+
+testsuccessequal "Package: apt-intermixed2
+$PACKAGESTANZA
+$TRANSDESCRIPTION
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+X-Some-Flag: yes
+X-Foo-Flag: Something with a Description
+X-Bar-Flag: no
+" aptcache show apt-intermixed2
+
+testsuccessequal "Package: apt-intermixed3
+$PACKAGESTANZA
+$TRANSDESCRIPTION
+Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+X-Some-Flag: yes
+X-Foo-Flag: Something with a Description
+X-Bar-Flag: no
+" aptcache show apt-intermixed3
+
+msgtest 'Test that no description does not destroy' 'showpkg'
+aptcache showpkg apt-none | sed 's#/tmp/.*_aptarchive_#/tmp/aptarchive_#' >showpkg.explosion && msgpass || msgfail
+testfileequal showpkg.explosion 'Package: apt-none
+Versions:
+0.9.7.8 (/tmp/aptarchive_Packages)
+
+
+Reverse Depends:
+Dependencies:
+0.9.7.8 -
+Provides:
+0.9.7.8 -
+Reverse Provides: '
+
+testempty aptcache search nonexistentstring
+
+# packages without a description can't be found
+testsuccessequal 'apt-normal - commandline package manager
+apt-both-below - commandline package manager
+apt-both-middle - commandline package manager
+apt-both-top - commandline package manager
+apt-trans - commandline package manager
+apt-intermixed - commandline package manager
+apt-intermixed2 - commandline package manager
+apt-intermixed3 - commandline package manager' aptcache search apt
diff --git a/test/integration/test-bug-717891-abolute-uris-for-proxies b/test/integration/test-bug-717891-abolute-uris-for-proxies
new file mode 100755
index 0000000..5f1b754
--- /dev/null
+++ b/test/integration/test-bug-717891-abolute-uris-for-proxies
@@ -0,0 +1,53 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable'
+
+setupaptarchive
+changetowebserver --request-absolute='uri'
+
+msgtest 'Check that absolute paths are' 'not accepted'
+testfailure --nomsg aptget update --allow-insecure-repositories
+
+echo "Acquire::http::Proxy \"http://localhost:${APTHTTPPORT}\";" > rootdir/etc/apt/apt.conf.d/99proxy
+
+msgtest 'Check that requests to proxies are' 'absolute uris via config'
+testsuccess --nomsg aptget update
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ unrelated
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst unrelated (0.5~squeeze1 unstable [all])
+Conf unrelated (0.5~squeeze1 unstable [all])' aptget install unrelated -s
+
+rm -f rootdir/etc/apt/apt.conf.d/99proxy
+echo "Acquire::http::Proxy-Auto-Detect \"${TMPWORKINGDIRECTORY}/apt-proxy-detect\";" > rootdir/etc/apt/apt.conf.d/02proxy-detect
+cat > "${TMPWORKINGDIRECTORY}/apt-proxy-detect" <<EOF
+#!/bin/sh
+set -e
+echo "http://localhost:${APTHTTPPORT}"
+EOF
+chmod 755 "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
+
+msgtest 'Check that requests to proxies are' 'absolute uris via auto-detect'
+testsuccess aptget update -o Debug::Acquire::http=1
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ unrelated
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst unrelated (0.5~squeeze1 unstable [all])
+Conf unrelated (0.5~squeeze1 unstable [all])' aptget install unrelated -s
+
+chmod 444 "${TMPWORKINGDIRECTORY}/apt-proxy-detect"
+msgtest 'Check that non-executable proxy commands result in' 'permission error'
+testfailure --nomsg aptget update
+testsuccess grep 'can not be executed' rootdir/tmp/testfailure.output
diff --git a/test/integration/test-bug-718329-support-data.tar-uncompressed b/test/integration/test-bug-718329-support-data.tar-uncompressed
new file mode 100755
index 0000000..9318025
--- /dev/null
+++ b/test/integration/test-bug-718329-support-data.tar-uncompressed
@@ -0,0 +1,34 @@
+#!/bin/sh
+set -e
+
+art() {
+ ar t "$@" | grep -v control.tar
+}
+
+test_process_package_with_compression() {
+ COMPRESSOR="$1"
+ DATA_TAR="$2"
+
+ msgmsg "Testing apt-ftparchive with compression type: $COMPRESSOR"
+
+ buildsimplenativepackage 'pkg' 'all' '1.0' '' '' 'some descr' '' '' '' "$COMPRESSOR"
+ testsuccessequal "debian-binary
+$DATA_TAR" art incoming/pkg_1.0_all.deb
+
+ testequal "Package: pkg" echo "$(aptftparchive packages incoming/|grep ^Package)"
+
+ testsuccessequal "usr/bin/pkg-all pkg
+usr/share/doc/pkg/FEATURES pkg
+usr/share/doc/pkg/changelog pkg
+usr/share/doc/pkg/copyright pkg" aptftparchive contents incoming/
+
+ rm -rf incoming/*
+}
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+test_process_package_with_compression "gzip" "data.tar.gz"
+test_process_package_with_compression "none" "data.tar"
+test_process_package_with_compression "xz" "data.tar.xz"
diff --git a/test/integration/test-bug-719263-print-uris-removes-authentication b/test/integration/test-bug-719263-print-uris-removes-authentication
new file mode 100755
index 0000000..e79e691
--- /dev/null
+++ b/test/integration/test-bug-719263-print-uris-removes-authentication
@@ -0,0 +1,42 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'unrelated' 'all' '1'
+buildsimplenativepackage 'unrelated' 'all' '2' 'unstable'
+
+setupaptarchive
+
+testnoact() {
+ cp -a rootdir/var/lib/dpkg/status rootdir/var/lib/dpkg/status-backup-noact
+ touch rootdir/var/lib/apt/extended_states
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be upgraded:
+ unrelated
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst unrelated [1] (2 unstable [all])
+Conf unrelated (2 unstable [all])' aptget install unrelated -s
+ testsuccess aptget install unrelated -y
+ testdpkginstalled unrelated
+ rm -rf rootdir/var/cache/apt/*.bin
+ cp -a rootdir/var/lib/dpkg/status-backup-noact rootdir/var/lib/dpkg/status
+}
+
+testnoact
+testsuccess aptget update --print-uris
+testnoact
+
+# same thing, just not with InRelease this time
+rm -rf rootdir/var/lib/apt/lists
+testsuccess aptget update -o Acquire::TryInRelease=0
+
+testnoact
+testsuccess aptget update --print-uris -o Acquire::TryInRelease=0
+testnoact
diff --git a/test/integration/test-bug-720597-build-dep-purge b/test/integration/test-bug-720597-build-dep-purge
new file mode 100755
index 0000000..4b36989
--- /dev/null
+++ b/test/integration/test-bug-720597-build-dep-purge
@@ -0,0 +1,65 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+
+# we need this construct here as it isn't really possible to fake native arch for dpkg-* tools
+NATIVE="$(command dpkg --print-architecture)"
+configarchitecture $NATIVE
+
+insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign'
+insertinstalledpackage 'pkga' 'all' '1'
+buildsimplenativepackage 'pkgb' "$NATIVE" '1' 'stable' 'Conflicts: pkga'
+buildsimplenativepackage 'pkgc' "$NATIVE" '1' 'stable' 'Build-Depends: pkgb'
+
+setupaptarchive
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ pkga
+The following NEW packages will be installed:
+ pkgb
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv pkga [1]
+Inst pkgb (1 stable [$NATIVE])
+Conf pkgb (1 stable [$NATIVE])" aptget build-dep pkgc -s
+
+testsuccessequal "Reading package lists...
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ pkga*
+The following NEW packages will be installed:
+ pkgb
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Purg pkga [1]
+Inst pkgb (1 stable [$NATIVE])
+Conf pkgb (1 stable [$NATIVE])" aptget build-dep pkgc -s --purge
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' apt autoremove -s
+testdpkgnotinstalled pkgb
+testsuccess apt build-dep pkgc -y -o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgDepCache::Marker=1
+testdpkginstalled pkgb
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' apt autoremove -s
+testsuccess apt purge pkgb pkgc -y
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' apt autoremove -s
+testsuccess apt build-dep pkgc -y -o APT::Get::Build-Dep-Automatic=true
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ pkgb
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv pkgb [1]' apt autoremove -s
diff --git a/test/integration/test-bug-722207-print-uris-even-if-very-quiet b/test/integration/test-bug-722207-print-uris-even-if-very-quiet
new file mode 100755
index 0000000..8d17507
--- /dev/null
+++ b/test/integration/test-bug-722207-print-uris-even-if-very-quiet
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'apt' 'all' '1'
+insertpackage 'unstable' 'apt' 'all' '2'
+insertsource 'unstable' 'apt' 'all' '2'
+insertsource 'unstable' 'apt2' 'all' '1'
+
+getoriginfromsuite() { echo 'Debian'; }
+setupaptarchive
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget upgrade -qq --print-uris
+testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget dist-upgrade -qq --print-uris
+testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget install apt -qq --print-uris
+testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 SHA256:0000000000000000000000000000000000000000000000000000000000000000" aptget download apt -qq --print-uris
+testsuccessequal "'file://${APTARCHIVE}/apt_2.dsc' apt_2.dsc 9 SHA256:7776436a6d741497f1cd958014e1a05b352224231428152aae39da3c17fd2fd4
+'file://${APTARCHIVE}/apt_2.tar.gz' apt_2.tar.gz 12 SHA256:f57f565eabe3fde0ec6e6e0bcc8db1d86fe2b4d6344a380a23520ddbb7728e99" aptget source apt -qq --print-uris
+testsuccessequal "'https://metadata.ftp-master.debian.org/changelogs/main/a/apt/apt_2_changelog' apt.changelog" aptget changelog apt -qq --print-uris
+
+testsuccessequal "'file://${APTARCHIVE}/apt_2.dsc' apt_2.dsc 9 SHA256:7776436a6d741497f1cd958014e1a05b352224231428152aae39da3c17fd2fd4
+'file://${APTARCHIVE}/apt_2.tar.gz' apt_2.tar.gz 12 SHA256:f57f565eabe3fde0ec6e6e0bcc8db1d86fe2b4d6344a380a23520ddbb7728e99
+'file://${APTARCHIVE}/apt2_1.dsc' apt2_1.dsc 10 SHA256:5693ba5efbfa21216f13661d344611aabe70ce3c343554ab46d4d9c24fdfd13a
+'file://${APTARCHIVE}/apt2_1.tar.gz' apt2_1.tar.gz 13 SHA256:1464c609fd09934c270ec629020d5e248b080607f715e47ef088cc8ab8480541" aptget source apt apt2 -qq --print-uris
diff --git a/test/integration/test-bug-723586-any-stripped-in-single-arch b/test/integration/test-bug-723586-any-stripped-in-single-arch
new file mode 100755
index 0000000..38eb026
--- /dev/null
+++ b/test/integration/test-bug-723586-any-stripped-in-single-arch
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'python3' 'all' '3.2.3-6'
+
+insertpackage 'unstable' 'python3' 'amd64' '3.3.2-16' 'Multi-Arch: allowed'
+insertpackage 'stable' 'python3-gnupg' 'all' '0.3.5-2' 'Depends: python3:any (>= 3.2.3-3~)'
+
+insertpackage 'unstable' 'python-mips' 'amd64' '3' 'Depends: python3:mips'
+
+setupaptarchive
+
+INSTALLLOG='Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ python3
+The following NEW packages will be installed:
+ python3-gnupg
+The following packages will be upgraded:
+ python3
+1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst python3 [3.2.3-6] (3.3.2-16 unstable [amd64])
+Inst python3-gnupg (0.3.5-2 stable [all])
+Conf python3 (3.3.2-16 unstable [amd64])
+Conf python3-gnupg (0.3.5-2 stable [all])'
+
+FAILLOG='Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ python-mips : Depends: python3:mips but it is not installable
+E: Unable to correct problems, you have held broken packages.'
+
+testsuccessequal "$INSTALLLOG" aptget install python3-gnupg -s
+aptcache showpkg python3 > showpkg.log
+testfailureequal "$FAILLOG" aptget install python-mips -s
+
+# same test, but this time in a multi-arch environment
+configarchitecture 'amd64' 'armhf'
+rm rootdir/var/cache/apt/*.bin
+
+testsuccessequal "$INSTALLLOG" aptget install python3-gnupg -s
+testsuccessequal "$(cat showpkg.log)" aptcache showpkg python3
+testfailureequal "$FAILLOG" aptget install python-mips -s
diff --git a/test/integration/test-bug-723705-tagfile-truncates-fields b/test/integration/test-bug-723705-tagfile-truncates-fields
new file mode 100755
index 0000000..bfa3598
--- /dev/null
+++ b/test/integration/test-bug-723705-tagfile-truncates-fields
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+setupaptarchive
+
+aptget install --print-uris -y cdebconf-newt-terminal cdebconf-gtk-terminal 2>&1 | sed "s#file://${TMPWORKINGDIRECTORY}#file:///tmp#g" > filename.log
+
+testfileequal filename.log "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ cdebconf-gtk-udeb cdebconf-newt-udeb cdebconf-udeb libc6-udeb
+ libglib2.0-udeb libgtk2.0-0-udeb libvte9-udeb
+The following NEW packages will be installed:
+ cdebconf-gtk-terminal cdebconf-gtk-udeb cdebconf-newt-terminal
+ cdebconf-newt-udeb cdebconf-udeb libc6-udeb libglib2.0-udeb libgtk2.0-0-udeb
+ libvte9-udeb
+0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded.
+Need to get 0 B/4774 kB of archives.
+After this operation, 19.8 MB of additional disk space will be used.
+'file:///tmp/aptarchive/pool/main/c/cdebconf/cdebconf-udeb_0.185_amd64.udeb' cdebconf-udeb_0.185_amd64.udeb 77376 MD5Sum:e3883706fdbf54c2e5ea959c92b2d37f
+'file:///tmp/aptarchive/pool/main/c/cdebconf/cdebconf-gtk-udeb_0.185_amd64.udeb' cdebconf-gtk-udeb_0.185_amd64.udeb 27278 MD5Sum:a1bbbc1d4fb8e0615b5621abac021924
+'file:///tmp/aptarchive/pool/main/c/cdebconf/cdebconf-newt-udeb_0.185_amd64.udeb' cdebconf-newt-udeb_0.185_amd64.udeb 19192 MD5Sum:de27807f56dae2f2403b3322d5fe6bd2
+'file:///tmp/aptarchive/pool/main/g/glib2.0/libglib2.0-udeb_2.36.4-1_amd64.udeb' libglib2.0-udeb_2.36.4-1_amd64.udeb 1714604 MD5Sum:72da029f1bbb36057d874f1f82a5d00a
+'file:///tmp/aptarchive/pool/main/e/eglibc/libc6-udeb_2.17-92+b1_amd64.udeb' libc6-udeb_2.17-92+b1_amd64.udeb 1056000 MD5Sum:7fd7032eeeecf7f76eff79a0543fbd72
+'file:///tmp/aptarchive/pool/main/g/gtk+2.0/libgtk2.0-0-udeb_2.24.20-1_amd64.udeb' libgtk2.0-0-udeb_2.24.20-1_amd64.udeb 1643046 MD5Sum:25513478eb2e02e5766c0eea0b411ca9
+'file:///tmp/aptarchive/pool/main/v/vte/libvte9-udeb_0.28.2-5_amd64.udeb' libvte9-udeb_1%3a0.28.2-5_amd64.udeb 216968 MD5Sum:7da7201effaf5ced19abd9d0b45aa2c6
+'file:///tmp/aptarchive/pool/main/c/cdebconf-terminal/cdebconf-gtk-terminal_0.22_amd64.udeb' cdebconf-gtk-terminal_0.22_amd64.udeb 14734 MD5Sum:f9c3a7354560cb88e0396e2b7ba54363
+'file:///tmp/aptarchive/pool/main/c/cdebconf-terminal/cdebconf-newt-terminal_0.22_amd64.udeb' cdebconf-newt-terminal_0.22_amd64.udeb 4538 MD5Sum:20db6152fce5081fcbf49c7c08f21246"
diff --git a/test/integration/test-bug-728500-tempdir b/test/integration/test-bug-728500-tempdir
new file mode 100755
index 0000000..37661d1
--- /dev/null
+++ b/test/integration/test-bug-728500-tempdir
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'coolstuff' 'all' '1.0'
+
+setupaptarchive
+changetowebserver
+
+msgtest 'Test apt-get update with incorrect' 'TMPDIR'
+
+export TMPDIR=/does-not-exists
+testsuccess aptget update -o Debug::Acquire::gpg=1
+unset TMPDIR
+
+testsuccessequal 'coolstuff
+dpkg' aptcache pkgnames
+testsuccess ls rootdir/var/lib/apt/lists/*InRelease
diff --git a/test/integration/test-bug-732746-preferences b/test/integration/test-bug-732746-preferences
new file mode 100755
index 0000000..d3bbdad
--- /dev/null
+++ b/test/integration/test-bug-732746-preferences
@@ -0,0 +1,32 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertinstalledpackage 'bar' 'i386' '1.0'
+
+cat > rootdir/etc/apt/preferences << EOF
+# random test comment header
+
+# commented out by puppy^Wpuppet
+#Package: foo
+#Pin: origin "ftp.debian.org"
+#Pin: 800
+
+Package: bar
+Pin: version 1.0
+Pin-Priority: 700
+
+#Package: bar
+#Pin: version 1.0
+#Pin: 800
+EOF
+
+testsuccessequal "Reading package lists...
+Building dependency tree..." aptget check
+
+msgtest "Ensure policy is applied"
+aptcache policy bar|grep -q "*** 1.0 700" && msgpass || msgfail
diff --git a/test/integration/test-bug-733028-gpg-resource-limit b/test/integration/test-bug-733028-gpg-resource-limit
new file mode 100755
index 0000000..69baf4e
--- /dev/null
+++ b/test/integration/test-bug-733028-gpg-resource-limit
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'foobar' 'all' '1'
+
+setupaptarchive --no-update
+
+for i in $(seq 1 50); do
+ touch rootdir/etc/apt/trusted.gpg.d/emptykey-${i}.gpg
+done
+testaptkeys 'Joe Sixpack'
+
+testsuccess aptget update
+msgtest 'Test for no gpg errors/warnings in' 'apt-get update'
+if grep -iq 'GPG' rootdir/tmp/testsuccess.output; then
+ cat rootdir/tmp/testsuccess.output
+ msgfail
+else
+ msgpass
+fi
diff --git a/test/integration/test-bug-734922-apt-showsrc-duplicate b/test/integration/test-bug-734922-apt-showsrc-duplicate
new file mode 100755
index 0000000..d4370e2
--- /dev/null
+++ b/test/integration/test-bug-734922-apt-showsrc-duplicate
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+# foo is identical, show it only once in showsrc
+insertpackage "unstable" "foo" "i386" "1.0"
+insertpackage "testing" "foo" "i386" "1.0"
+insertsource "unstable" "foo" "i386" "1.0"
+insertsource "testing" "foo" "i386" "1.0"
+
+# bar is different, show twice
+insertsource "unstable" "bar" "i386" "1.0"
+insertsource "testing" "bar" "i386" "2.0"
+
+setupaptarchive
+
+# ensure "foo" is not shown twice
+aptcache showsrc foo bar|grep ^Package: > out.txt
+testequal "Package: foo
+Package: bar
+Package: bar" cat out.txt
diff --git a/test/integration/test-bug-735967-lib32-to-i386-unavailable b/test/integration/test-bug-735967-lib32-to-i386-unavailable
new file mode 100755
index 0000000..3b705d5
--- /dev/null
+++ b/test/integration/test-bug-735967-lib32-to-i386-unavailable
@@ -0,0 +1,91 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386' 'amd64'
+
+insertpackage 'unstable' 'lib32nss-mdns' 'amd64' '0.10-6' 'Depends: libnss-mdns-i386 (= 0.10-6)'
+insertpackage 'unstable' 'libnss-mdns' 'amd64,i386' '0.10-6' 'Multi-Arch: same
+Breaks: lib32nss-mdns (<< 0.10-6)'
+insertpackage 'unstable' 'libnss-mdns-i386' 'i386' '0.10-6' 'Multi-Arch: foreign
+Depends: libnss-mdns'
+# introduce some dummies so that there are versions, but none works
+insertpackage 'unstable' 'libnss-mdns-i386' 'amd64' '0.1-6'
+insertpackage 'experimental' 'libnss-mdns-amd64' 'i386,amd64' '0.10-6' 'Provides: libnss-mdns-i386'
+
+insertpackage 'unstable' 'foo' 'amd64' '1' 'Depends: libfoo'
+insertpackage 'unstable' 'libfoo' 'amd64' '1' 'Depends: libfoo-bin'
+insertpackage 'unstable' 'libfoo-bin' 'i386' '0.10-6' 'Multi-Arch: foreign'
+
+insertinstalledpackage 'lib32nss-mdns' 'amd64' '0.9-1'
+insertinstalledpackage 'libnss-mdns' 'amd64' '0.9-1'
+
+insertinstalledpackage 'i-make-packages-important' 'all' '1' 'Depends: libnss-mdns'
+
+setupaptarchive --no-update
+
+# make libnss-mdns-i386 unavailable
+configarchitecture 'amd64'
+testsuccess aptget update
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ lib32nss-mdns
+The following packages will be upgraded:
+ libnss-mdns
+1 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv lib32nss-mdns [0.9-1]
+Inst libnss-mdns [0.9-1] (0.10-6 unstable [amd64])
+Conf libnss-mdns (0.10-6 unstable [amd64])' aptget dist-upgrade -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo : Depends: libfoo but it is not going to be installed
+E: Unable to correct problems, you have held broken packages.' aptget install foo -s
+
+# activate multiarch
+configarchitecture 'amd64' 'i386'
+testsuccess aptget update
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ libnss-mdns:i386 libnss-mdns-i386:i386
+The following packages will be upgraded:
+ lib32nss-mdns libnss-mdns
+2 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst lib32nss-mdns [0.9-1] (0.10-6 unstable [amd64]) []
+Inst libnss-mdns [0.9-1] (0.10-6 unstable [amd64]) []
+Inst libnss-mdns:i386 (0.10-6 unstable [i386]) []
+Inst libnss-mdns-i386:i386 (0.10-6 unstable [i386])
+Conf lib32nss-mdns (0.10-6 unstable [amd64])
+Conf libnss-mdns (0.10-6 unstable [amd64])
+Conf libnss-mdns:i386 (0.10-6 unstable [i386])
+Conf libnss-mdns-i386:i386 (0.10-6 unstable [i386])' aptget dist-upgrade -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libfoo libfoo-bin:i386
+The following NEW packages will be installed:
+ foo libfoo libfoo-bin:i386
+0 upgraded, 3 newly installed, 0 to remove and 2 not upgraded.
+Inst libfoo-bin:i386 (0.10-6 unstable [i386])
+Inst libfoo (1 unstable [amd64])
+Inst foo (1 unstable [amd64])
+Conf libfoo-bin:i386 (0.10-6 unstable [i386])
+Conf libfoo (1 unstable [amd64])
+Conf foo (1 unstable [amd64])' aptget install foo -s
diff --git a/test/integration/test-bug-737130-multicompress-file-modes b/test/integration/test-bug-737130-multicompress-file-modes
new file mode 100755
index 0000000..2ae5166
--- /dev/null
+++ b/test/integration/test-bug-737130-multicompress-file-modes
@@ -0,0 +1,30 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+cat >aptarchive/ftparchive.conf <<EOF
+Dir { ArchiveDir "$(pwd)/aptarchive"; CacheDir "$(pwd)/aptarchive"; };
+Default { Translation::Compress ". gzip bzip2 xz"; FileMode 0644; };
+tree "dists/sid" {
+ Sections "main";
+ Architectures "i386";
+ LongDescription "false";
+};
+EOF
+mkdir -p aptarchive/dists/sid/main/binary-i386
+mkdir -p aptarchive/dists/sid/main/i18n
+testsuccess aptftparchive generate aptarchive/ftparchive.conf
+i18n=aptarchive/dists/sid/main/i18n
+for comp in '' .gz .bz2 .xz; do
+ msgtest 'Test apt-ftparchive file mode is 644 for' "Translation-en$comp"
+ FILEMODE="$(stat --format %a "$i18n/Translation-en$comp")"
+ if [ "$FILEMODE" != '644' ]; then
+ msgfail "Mode was '$FILEMODE'!"
+ else
+ msgpass
+ fi
+done
diff --git a/test/integration/test-bug-738785-switch-protocol b/test/integration/test-bug-738785-switch-protocol
new file mode 100755
index 0000000..471d12e
--- /dev/null
+++ b/test/integration/test-bug-738785-switch-protocol
@@ -0,0 +1,50 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage 'apt' 'all' '1.0' 'stable'
+
+# setup http redirecting to https
+getlabelfromsuite() { echo 'Testcases'; }
+setupaptarchive --no-update
+changetohttpswebserver -o 'aptwebserver::support::http=false'
+webserverconfig 'aptwebserver::redirect::replace::/downgrademe/' "http://localhost:${APTHTTPPORT}/"
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "https://localhost:${APTHTTPSPORT}/"
+sed -i -e "s#:${APTHTTPSPORT}/#:${APTHTTPPORT}/redirectme#" -e 's# https:# http:#' rootdir/etc/apt/sources.list.d/*
+
+testsuccess aptget update -o Debug::Acquire::http=1 -o Debug::Acquire::https=1 -o Debug::pkgAcquire::Worker=1
+
+msgtest 'Test that the webserver does not answer' 'http requests'
+downloadfile "http://localhost:${APTHTTPPORT}/pool/main/a/apt/apt_1.0/changelog" changelog >/dev/null 2>&1 && msgfail || msgpass
+
+echo "Acquire::Changelogs::URI::Label::Testcases \"http://localhost:${APTHTTPPORT}/redirectme/pool/@CHANGEPATH@/changelog\";" > rootdir/etc/apt/apt.conf.d/changelog.conf
+testsuccessequal "'http://localhost:${APTHTTPPORT}/redirectme/pool/main/a/apt/apt_1.0/changelog' apt.changelog" aptget changelog apt --print-uris
+
+cd downloaded
+testsuccess aptget changelog apt -d
+testsuccess test -s apt.changelog
+rm -f apt.changelog
+
+testsuccess aptget download apt
+testsuccess test -s apt_1.0_all.deb
+rm apt_1.0_all.deb
+cd - >/dev/null
+
+testsuccess aptget install apt -y
+testdpkginstalled 'apt'
+
+cd downloaded
+testfailureequal "E: The method 'https' is explicitly disabled via configuration.
+N: If you meant to use Tor remember to use tor+https instead of https." aptget download apt -o Dir::Bin::Methods::https=false
+testfailure test -e apt_1.0_all.deb
+cd - >/dev/null
+
+# check that downgrades from https to http are not allowed
+webserverconfig 'aptwebserver::support::http' 'true'
+sed -i -e "s#:${APTHTTPPORT}/redirectme#:${APTHTTPSPORT}/downgrademe#" -e 's# http:# https:#' rootdir/etc/apt/sources.list.d/*
+testfailure aptget update --allow-insecure-repositories -o Acquire::https::Timeout=1 -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::https=1
diff --git a/test/integration/test-bug-740843-versioned-up-down-breaks b/test/integration/test-bug-740843-versioned-up-down-breaks
new file mode 100755
index 0000000..69adcef
--- /dev/null
+++ b/test/integration/test-bug-740843-versioned-up-down-breaks
@@ -0,0 +1,57 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'foo-driver' 'amd64' '1' 'Depends: libfoo (= 1)
+Recommends: libgl1-foo-glx (= 1)
+Breaks: libgl1-foo-glx (<< 1), libgl1-foo-glx (>> 1)'
+insertinstalledpackage 'libgl1-foo-glx' 'amd64,i386' '1' 'Depends: libfoo (= 1)
+Multi-Arch: same'
+insertinstalledpackage 'libfoo' 'amd64,i386' '1' 'Multi-Arch: same'
+
+buildsimplenativepackage 'foo-driver' 'amd64' '2' 'stable' 'Depends: libfoo (= 2)
+Recommends: libgl1-foo-glx (= 2)
+Breaks: libgl1-foo-glx (<< 2), libgl1-foo-glx (>> 2)'
+buildsimplenativepackage 'libgl1-foo-glx' 'amd64,i386' '2' 'stable' 'Depends: libfoo (= 2)
+Multi-Arch: same'
+buildsimplenativepackage 'libfoo' 'amd64,i386' '2' 'stable' 'Multi-Arch: same'
+
+setupaptarchive
+
+testequalor2 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ foo-driver libfoo libfoo:i386 libgl1-foo-glx libgl1-foo-glx:i386
+5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst libgl1-foo-glx [1] (2 stable [amd64]) [libgl1-foo-glx:amd64 on libgl1-foo-glx:i386] [libgl1-foo-glx:i386 on libgl1-foo-glx:amd64] [foo-driver:amd64 on libgl1-foo-glx:amd64] [libgl1-foo-glx:i386 foo-driver:amd64 ]
+Inst libgl1-foo-glx:i386 [1] (2 stable [i386]) [foo-driver:amd64 on libgl1-foo-glx:amd64] [foo-driver:amd64 on libgl1-foo-glx:i386] [foo-driver:amd64 ]
+Inst foo-driver [1] (2 stable [amd64]) []
+Inst libfoo:i386 [1] (2 stable [i386]) [libfoo:amd64 on libfoo:i386] [libfoo:i386 on libfoo:amd64] [libfoo:amd64 ]
+Inst libfoo [1] (2 stable [amd64])
+Conf libgl1-foo-glx (2 stable [amd64])
+Conf libgl1-foo-glx:i386 (2 stable [i386])
+Conf foo-driver (2 stable [amd64])
+Conf libfoo:i386 (2 stable [i386])
+Conf libfoo (2 stable [amd64])' 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ foo-driver libfoo libfoo:i386 libgl1-foo-glx libgl1-foo-glx:i386
+5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst libgl1-foo-glx [1] (2 stable [amd64]) [foo-driver:amd64 on libgl1-foo-glx:amd64] [libgl1-foo-glx:amd64 on libgl1-foo-glx:i386] [libgl1-foo-glx:i386 on libgl1-foo-glx:amd64] [foo-driver:amd64 libgl1-foo-glx:i386 ]
+Inst libgl1-foo-glx:i386 [1] (2 stable [i386]) [foo-driver:amd64 on libgl1-foo-glx:amd64] [foo-driver:amd64 on libgl1-foo-glx:i386] [foo-driver:amd64 ]
+Inst foo-driver [1] (2 stable [amd64]) []
+Inst libfoo:i386 [1] (2 stable [i386]) [libfoo:amd64 on libfoo:i386] [libfoo:i386 on libfoo:amd64] [libfoo:amd64 ]
+Inst libfoo [1] (2 stable [amd64])
+Conf libgl1-foo-glx (2 stable [amd64])
+Conf libgl1-foo-glx:i386 (2 stable [i386])
+Conf foo-driver (2 stable [amd64])
+Conf libfoo:i386 (2 stable [i386])
+Conf libfoo (2 stable [amd64])' aptget dist-upgrade -s
+
+testsuccess aptget dist-upgrade -y -o Debug::pkgPackageManager=1 -o Debug::pkgOrderList=1
diff --git a/test/integration/test-bug-745036-new-foreign-invalidates-cache b/test/integration/test-bug-745036-new-foreign-invalidates-cache
new file mode 100755
index 0000000..6207bad
--- /dev/null
+++ b/test/integration/test-bug-745036-new-foreign-invalidates-cache
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable,installed' 'cool-foo' 'amd64' '1.0' 'Depends: foo'
+insertpackage 'unstable,installed' 'foo' 'amd64' '1.0' 'Multi-Arch: foreign'
+
+setupaptarchive
+
+testsuccess aptget check -s
+
+configarchitecture 'amd64' 'i386'
+testfailureequal 'E: The package cache was built for different architectures: amd64 vs amd64,i386' aptget check -s -o pkgCacheFile::Generate=false
+
+testsuccess aptget check -s
+
+insertinstalledpackage 'awesome-foo' 'i386' '1.0' 'Depends: foo'
+
+testsuccess aptget check -s
+
+testsuccess aptget update --no-download
+
+testsuccess aptget check -s
diff --git a/test/integration/test-bug-745046-candidate-propagation-fails b/test/integration/test-bug-745046-candidate-propagation-fails
new file mode 100755
index 0000000..64aaa6a
--- /dev/null
+++ b/test/integration/test-bug-745046-candidate-propagation-fails
@@ -0,0 +1,39 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'gedit' 'amd64' '1'
+
+insertpackage 'unstable' 'gedit' 'amd64' '1'
+insertpackage 'experimental' 'gedit' 'amd64' '2' 'Depends: common (>= 2)'
+
+setupaptarchive
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2' (experimental [amd64]) for 'gedit'
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ gedit : Depends: common (>= 2) but it is not installable
+E: Unable to correct problems, you have held broken packages." aptget install gedit/experimental -sq=0
+
+insertinstalledpackage 'common' 'amd64' '2'
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Selected version '2' (experimental [amd64]) for 'gedit'
+The following packages will be upgraded:
+ gedit
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst gedit [1] (2 experimental [amd64])
+Conf gedit (2 experimental [amd64])" aptget install gedit/experimental -sq=0
diff --git a/test/integration/test-bug-747261-arch-specific-conflicts b/test/integration/test-bug-747261-arch-specific-conflicts
new file mode 100755
index 0000000..e137043
--- /dev/null
+++ b/test/integration/test-bug-747261-arch-specific-conflicts
@@ -0,0 +1,46 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'sparc' 'armel'
+
+insertinstalledpackage 'foobar' 'armel' '1'
+msgtest 'Check that dpkg supports' 'arch-specific dependencies'
+if ! dpkgcheckbuilddeps -d 'foobar:armel' /dev/null 2>/dev/null >/dev/null; then
+ dpkgcheckbuilddeps -d 'foobar:armel' /dev/null || true
+ msgskip
+ exit 0
+else
+ msgpass
+fi
+
+buildsimplenativepackage 'libc6' 'amd64,sparc,armel' '1' 'stable' 'Multi-Arch: same'
+buildsimplenativepackage 'libc6-i386' 'amd64' '1' 'stable' 'Conflicts: libc6:sparc'
+
+setupaptarchive
+
+testsuccess aptget install 'libc6:amd64' 'libc6:sparc' -y
+testdpkginstalled 'libc6:amd64' 'libc6:sparc'
+testdpkgnotinstalled 'libc6-i386' 'libc6:armel'
+
+testsuccess aptget install libc6-i386 -y
+testdpkginstalled 'libc6:amd64' 'libc6-i386'
+testdpkgnotinstalled 'libc6:sparc' 'libc6:armel'
+
+testsuccess aptget install libc6:armel -y
+testdpkginstalled 'libc6:amd64' 'libc6:armel' 'libc6-i386'
+testdpkgnotinstalled 'libc6:sparc'
+
+testsuccess aptget install libc6:sparc -y
+testdpkginstalled 'libc6:amd64' 'libc6:armel' 'libc6:sparc'
+testdpkgnotinstalled 'libc6-i386'
+
+testsuccess aptget purge 'libc6:*' 'libc6-i386' -y
+testdpkgnotinstalled 'libc6:amd64' 'libc6:armel' 'libc6:sparc' 'libc6-i386'
+
+# check that (the actually simpler) single arch is fine, too
+configarchitecture 'amd64'
+testfailure aptget install libc6:sparc -s
+testsuccess aptget install libc6 libc6-i386 -y
diff --git a/test/integration/test-bug-753297-upgradable b/test/integration/test-bug-753297-upgradable
new file mode 100755
index 0000000..353728d
--- /dev/null
+++ b/test/integration/test-bug-753297-upgradable
@@ -0,0 +1,35 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+cat > rootdir/etc/apt/preferences <<EOF
+Package: *
+Pin: release testing
+Pin-Priority: 600
+
+Package: *
+Pin: release unstable
+Pin-Priority: 1
+EOF
+
+insertpackage 'testing,installed' 'foo' 'all' '1'
+insertpackage 'testing-updates' 'foo' 'all' '2'
+insertpackage 'unstable' 'foo' 'all' '3'
+
+insertinstalledpackage 'bar' 'all' '1'
+insertpackage 'testing' 'bar' 'all' '2'
+
+setupaptarchive
+
+testsuccessequal "Listing...
+bar/testing 2 all [upgradable from: 1]
+N: There is 1 additional version. Please use the '-a' switch to see it" apt list --upgradable
+
+testsuccessequal "Listing...
+bar/testing 2 all [upgradable from: 1]
+dpkg/now 1.16.2+fake all [installed,local]
+foo/testing,now 1 all [installed]" apt list
diff --git a/test/integration/test-bug-758153-versioned-provides-support b/test/integration/test-bug-758153-versioned-provides-support
new file mode 100755
index 0000000..fb8ed39
--- /dev/null
+++ b/test/integration/test-bug-758153-versioned-provides-support
@@ -0,0 +1,387 @@
+#!/bin/sh
+set -e
+
+# dpkg implements versioned provides in commit 5bb02fe80e9f40dcad9703a72f67cf615ff217b5
+# but previous versions seem to allow parsing, working and ignoring it.
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'webapp' 'all' '1' 'Depends: httpd'
+insertinstalledpackage 'webserver' 'all' '1' 'Provides: httpd'
+
+insertpackage 'unstable' 'webapp' 'all' '2' 'Depends: httpd (>= 2)'
+insertpackage 'unstable' 'webserver' 'amd64' '2' 'Provides: httpd (= 2)'
+insertpackage 'unstable' 'foreign-webserver' 'i386' '2' 'Multi-Arch: foreign
+Provides: httpd (= 2)'
+
+insertpackage 'experimental' 'webapp' 'all' '3' 'Depends: httpd (>= 1.5)'
+insertpackage 'experimental' 'webserver' 'amd64' '3' 'Provides: httpd (= 3)'
+
+insertpackage 'experimental' 'foreign-webserver' 'i386' '4' 'Multi-Arch: foreign
+Provides: httpd (= 4)'
+insertpackage 'experimental' 'cool-webapp' 'all' '4' 'Depends: httpd (>= 4)'
+
+# arch-qualified provides, see #777071
+insertpackage 'unstable' 'foo' 'all' '1' 'Provides: bar:i386'
+insertpackage 'unstable' 'baz' 'i386,amd64' '1' 'Depends: bar'
+insertpackage 'experimental' 'baz' 'i386,amd64' '2' 'Depends: bar:i386'
+insertpackage 'experimental' 'baz-broken' 'i386' '2' 'Depends: bar:amd64'
+
+insertpackage 'unstable' 'next' 'amd64' '1' 'Multi-Arch: foreign
+Provides: next (= 2)'
+insertpackage 'unstable' 'needsrealnext' 'amd64,i386' '2' 'Depends: next (>= 2)'
+
+insertpackage 'unstable' 'virtualnext2' 'amd64' '1' 'Multi-Arch: foreign
+Provides: next2 (= 2)'
+insertpackage 'unstable' 'needsnext2' 'amd64,i386' '2' 'Depends: next2 (>= 2)'
+
+insertpackage 'unstable' 'virtualnext3' 'amd64' '1' 'Multi-Arch: no
+Provides: next3 (= 2)'
+insertpackage 'unstable' 'needsnext3' 'amd64,i386' '2' 'Depends: next3 (>= 2)'
+
+insertpackage 'unstable' 'selfprov' 'amd64' '2' 'Provides: selfprov (= 1)'
+insertpackage 'unstable' 'needsselfprov1' 'amd64' '1' 'Depends: selfprov (= 1)'
+insertpackage 'unstable' 'needsselfprov2' 'amd64' '1' 'Depends: selfprov (= 2)'
+insertpackage 'unstable' 'needsselfprov12' 'amd64' '1' 'Depends: selfprov (= 1), selfprov (= 2)'
+insertpackage 'unstable' 'needsselfprov123' 'amd64' '1' 'Depends: selfprov (= 1), selfprov (= 2), selfprov (= 3)'
+
+setupaptarchive
+
+SOMEPACKAGESCOULDNOT='Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:'
+
+for binary in 'aptget' 'apt'; do
+ for method in 'upgrade' 'dist-upgrade'; do
+ for solver in 'internal' 'apt'; do
+ if [ "$solver" = 'apt' ]; then
+ HEADER='Execute external solver...'
+ else
+ HEADER='Calculating upgrade...'
+ fi
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (2 unstable [amd64])
+Inst webapp [1] (2 unstable [all])
+Conf webserver (2 unstable [amd64])
+Conf webapp (2 unstable [all])" $binary $method -s --solver $solver
+ done
+ done
+done
+
+for solver in 'internal' 'apt'; do
+ msgmsg 'Testing with solver' "$solver"
+ HEADER_PRE='Reading package lists...
+Building dependency tree...'
+ HEADER_POST='Execute external solver...'
+ HEADER="${HEADER_PRE}"
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER}
+${HEADER_POST}"
+ fi
+ testsuccessequal "$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (2 unstable [amd64])
+Inst webapp [1] (2 unstable [all])
+Conf webserver (2 unstable [amd64])
+Conf webapp (2 unstable [all])" aptget install webapp webserver -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (2 unstable [amd64])
+Inst webapp [1] (3 experimental [all])
+Conf webserver (2 unstable [amd64])
+Conf webapp (3 experimental [all])" aptget install webapp=3 webserver -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following packages will be upgraded:
+ webapp webserver
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst webserver [1] (3 experimental [amd64])
+Inst webapp [1] (2 unstable [all])
+Conf webserver (3 experimental [amd64])
+Conf webapp (2 unstable [all])" aptget install webapp webserver=3 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ foreign-webserver:i386
+The following packages will be upgraded:
+ webapp
+1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst foreign-webserver:i386 (2 unstable [i386])
+Inst webapp [1] (2 unstable [all])
+Conf foreign-webserver:i386 (2 unstable [i386])
+Conf webapp (2 unstable [all])" aptget install webapp foreign-webserver:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ foreign-webserver:i386
+The following packages will be upgraded:
+ webapp
+1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst foreign-webserver:i386 (2 unstable [i386])
+Inst webapp [1] (3 experimental [all])
+Conf foreign-webserver:i386 (2 unstable [i386])
+Conf webapp (3 experimental [all])" aptget install webapp=3 foreign-webserver:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ foreign-webserver:i386
+The following packages will be upgraded:
+ webapp
+1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst foreign-webserver:i386 (4 experimental [i386])
+Inst webapp [1] (2 unstable [all])
+Conf foreign-webserver:i386 (4 experimental [i386])
+Conf webapp (2 unstable [all])" aptget install webapp foreign-webserver:i386=4 -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ WEBAPP_ERR="$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ cool-webapp : Depends: httpd (>= 4)
+
+$SOMEPACKAGESCOULDNOT
+ cool-webapp : Depends: httpd (>= 4)
+E: External solver failed with: The following packages have unmet dependencies:"
+ else
+ WEBAPP_ERR="$HEADER
+$SOMEPACKAGESCOULDNOT
+ cool-webapp : Depends: httpd (>= 4)
+E: Unable to correct problems, you have held broken packages."
+ fi
+ testfailureequal "$WEBAPP_ERR" aptget install cool-webapp -s --solver $solver
+ testfailureequal "$WEBAPP_ERR" aptget install cool-webapp foreign-webserver:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following NEW packages will be installed:
+ cool-webapp foreign-webserver:i386
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foreign-webserver:i386 (4 experimental [i386])
+Inst cool-webapp (4 experimental [all])
+Conf foreign-webserver:i386 (4 experimental [i386])
+Conf cool-webapp (4 experimental [all])" aptget install cool-webapp foreign-webserver:i386=4 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ baz:i386 foo
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo (1 unstable [all])
+Inst baz:i386 (1 unstable [i386])
+Conf foo (1 unstable [all])
+Conf baz:i386 (1 unstable [i386])" aptget install baz:i386 -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ baz : Depends: bar but it is not installable
+
+$SOMEPACKAGESCOULDNOT
+ baz : Depends: bar but it is not installable
+E: External solver failed with: The following packages have unmet dependencies:" aptget install baz:amd64 -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ baz : Depends: bar but it is not installable
+E: Unable to correct problems, you have held broken packages." aptget install baz:amd64 -s --solver $solver
+ fi
+
+ HEADER="${HEADER_PRE}
+Selected version '2' (experimental [amd64]) for 'baz'"
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER}
+${HEADER_POST}"
+ fi
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ baz foo
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo (1 unstable [all])
+Inst baz (2 experimental [amd64])
+Conf foo (1 unstable [all])
+Conf baz (2 experimental [amd64])" aptget install baz/experimental -s --solver $solver
+
+ HEADER="${HEADER_PRE}
+Selected version '2' (experimental [i386]) for 'baz:i386'"
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER}
+${HEADER_POST}"
+ fi
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ baz:i386 foo
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo (1 unstable [all])
+Inst baz:i386 (2 experimental [i386])
+Conf foo (1 unstable [all])
+Conf baz:i386 (2 experimental [i386])" aptget install baz:i386/experimental -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ HEADER="${HEADER_PRE}
+${HEADER_POST}"
+ else
+ HEADER="${HEADER_PRE}"
+ fi
+
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ baz-broken:i386 : Depends: bar:amd64 but it is not installable
+
+$SOMEPACKAGESCOULDNOT
+ baz-broken:i386 : Depends: bar:amd64 but it is not installable
+E: External solver failed with: The following packages have unmet dependencies:" aptget install baz-broken -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ baz-broken:i386 : Depends: bar:amd64 but it is not installable
+E: Unable to correct problems, you have held broken packages." aptget install baz-broken -s --solver $solver
+ fi
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ next
+The following NEW packages will be installed:
+ needsrealnext next
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst next (1 unstable [amd64])
+Inst needsrealnext (2 unstable [amd64])
+Conf next (1 unstable [amd64])
+Conf needsrealnext (2 unstable [amd64])" aptget install needsrealnext -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ next
+The following NEW packages will be installed:
+ needsrealnext:i386 next
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst next (1 unstable [amd64])
+Inst needsrealnext:i386 (2 unstable [i386])
+Conf next (1 unstable [amd64])
+Conf needsrealnext:i386 (2 unstable [i386])" aptget install needsrealnext:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ virtualnext2
+The following NEW packages will be installed:
+ needsnext2 virtualnext2
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst virtualnext2 (1 unstable [amd64])
+Inst needsnext2 (2 unstable [amd64])
+Conf virtualnext2 (1 unstable [amd64])
+Conf needsnext2 (2 unstable [amd64])" aptget install needsnext2 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ virtualnext2
+The following NEW packages will be installed:
+ needsnext2:i386 virtualnext2
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst virtualnext2 (1 unstable [amd64])
+Inst needsnext2:i386 (2 unstable [i386])
+Conf virtualnext2 (1 unstable [amd64])
+Conf needsnext2:i386 (2 unstable [i386])" aptget install needsnext2:i386 -s --solver $solver
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ virtualnext3
+The following NEW packages will be installed:
+ needsnext3 virtualnext3
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst virtualnext3 (1 unstable [amd64])
+Inst needsnext3 (2 unstable [amd64])
+Conf virtualnext3 (1 unstable [amd64])
+Conf needsnext3 (2 unstable [amd64])" aptget install needsnext3 -s --solver $solver
+
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable
+
+$SOMEPACKAGESCOULDNOT
+ needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable
+E: External solver failed with: The following packages have unmet dependencies:" aptget install needsnext3:i386 -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable
+E: Unable to correct problems, you have held broken packages." aptget install needsnext3:i386 -s --solver $solver
+ fi
+
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ selfprov
+The following NEW packages will be installed:
+ needsselfprov1 selfprov
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst selfprov (2 unstable [amd64])
+Inst needsselfprov1 (1 unstable [amd64])
+Conf selfprov (2 unstable [amd64])
+Conf needsselfprov1 (1 unstable [amd64])" aptget install needsselfprov1 -s --solver $solver
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ selfprov
+The following NEW packages will be installed:
+ needsselfprov2 selfprov
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst selfprov (2 unstable [amd64])
+Inst needsselfprov2 (1 unstable [amd64])
+Conf selfprov (2 unstable [amd64])
+Conf needsselfprov2 (1 unstable [amd64])" aptget install needsselfprov2 -s --solver $solver
+ testsuccessequal "$HEADER
+The following additional packages will be installed:
+ selfprov
+The following NEW packages will be installed:
+ needsselfprov12 selfprov
+0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst selfprov (2 unstable [amd64])
+Inst needsselfprov12 (1 unstable [amd64])
+Conf selfprov (2 unstable [amd64])
+Conf needsselfprov12 (1 unstable [amd64])" aptget install needsselfprov12 -s --solver $solver
+ if [ "$solver" = 'apt' ]; then
+ testfailureequal "$HEADER
+The solver encountered an error of type: ERR_UNSOLVABLE
+The following information might help you to understand what is wrong:
+The following packages have unmet dependencies:
+ needsselfprov123 : Depends: selfprov (= 3)
+
+$SOMEPACKAGESCOULDNOT
+ needsselfprov123 : Depends: selfprov (= 1)
+ Depends: selfprov (= 2)
+ Depends: selfprov (= 3)
+E: External solver failed with: The following packages have unmet dependencies:" aptget install needsselfprov123 -s --solver $solver
+ else
+ testfailureequal "$HEADER
+$SOMEPACKAGESCOULDNOT
+ needsselfprov123 : Depends: selfprov (= 3)
+E: Unable to correct problems, you have held broken packages." aptget install needsselfprov123 -s --solver $solver
+ fi
+done
diff --git a/test/integration/test-bug-762160-relpath b/test/integration/test-bug-762160-relpath
new file mode 100755
index 0000000..6a800aa
--- /dev/null
+++ b/test/integration/test-bug-762160-relpath
@@ -0,0 +1,17 @@
+#!/bin/sh
+# regression test for bug #762160 where apt-get update fails when a
+# relative directory is given
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'foo' 'all' '1'
+setupaptarchive
+changetowebserver
+
+testsuccess aptget update -o Dir=./rootdir
+testsuccess aptget update -o Dir=./rootdir
diff --git a/test/integration/test-bug-767891-force-essential-important b/test/integration/test-bug-767891-force-essential-important
new file mode 100755
index 0000000..7a23de5
--- /dev/null
+++ b/test/integration/test-bug-767891-force-essential-important
@@ -0,0 +1,100 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'apt' 'amd64' '1'
+insertinstalledpackage 'foo' 'amd64,i386' '1' 'Multi-Arch: same'
+insertinstalledpackage 'bar' 'amd64' '1' 'Provides: foo'
+
+insertpackage 'unstable' 'foo2' 'amd64,i386' '1' 'Multi-Arch: same'
+
+setupaptarchive
+
+rm -f rootdir/var/cache/apt/*.bin
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ apt* bar* foo* foo:i386*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ apt
+0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
+Purg apt [1]
+Purg bar [1]
+Purg foo [1]
+Purg foo:i386 [1]' apt purge apt foo foo:i386 bar -s
+
+rm -f rootdir/var/cache/apt/*.bin
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ apt* bar* foo* foo:i386*
+0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
+Purg apt [1]
+Purg bar [1]
+Purg foo [1]
+Purg foo:i386 [1]' apt purge apt foo foo:i386 bar -s -o pkgCacheGen::ForceEssential=''
+
+msgmsg 'foo:i386 got the Important flag'
+rm -f rootdir/var/cache/apt/*.bin
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ apt* bar* foo* foo:i386*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ foo foo:i386
+0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
+Purg apt [1]
+Purg bar [1]
+Purg foo [1]
+Purg foo:i386 [1]' apt purge apt foo foo:i386 bar -s -o pkgCacheGen::ForceEssential='foo'
+
+rm -f rootdir/var/cache/apt/*.bin
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ apt* bar* foo* foo:i386*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ apt foo foo:i386
+0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
+Purg apt [1]
+Purg bar [1]
+Purg foo [1]
+Purg foo:i386 [1]' apt purge apt foo foo:i386 bar -s -o pkgCacheGen::ForceEssential::='foo'
+
+msgmsg 'essentials only from native'
+rm -f rootdir/var/cache/apt/*.bin
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ foo2
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo2 (1 unstable [amd64])
+Conf foo2 (1 unstable [amd64])' apt full-upgrade -s -o pkgCacheGen::ForceEssential::='foo2'
+
+msgmsg 'important only effects installed'
+rm -f rootdir/var/cache/apt/*.bin
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ apt* bar* foo* foo:i386*
+WARNING: The following essential packages will be removed.
+This should NOT be done unless you know exactly what you are doing!
+ apt foo foo:i386
+0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
+Purg apt [1]
+Purg bar [1]
+Purg foo [1]
+Purg foo:i386 [1]' apt purge apt foo foo:i386 bar -s -o pkgCacheGen::ForceImportant::='foo'
+rm -f rootdir/var/cache/apt/*.bin
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' apt full-upgrade -s -o pkgCacheGen::ForceImportant::='foo2'
diff --git a/test/integration/test-bug-769609-triggers-still-pending-after-run b/test/integration/test-bug-769609-triggers-still-pending-after-run
new file mode 100755
index 0000000..ce2c193
--- /dev/null
+++ b/test/integration/test-bug-769609-triggers-still-pending-after-run
@@ -0,0 +1,75 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+msgtest 'Check if installed dpkg supports' 'noawait trigger'
+if dpkg --compare-versions "$(dpkg_version)" 'ge' '1.16.1'; then
+ msgpass
+else
+ msgskip 'dpkg version too old'
+ exit 0
+fi
+configdpkgnoopchroot
+
+buildtriggerpackages() {
+ local TYPE="$1"
+ setupsimplenativepackage "triggerable-$TYPE" 'all' '1.0' 'unstable' "Depends: trigdepends-$TYPE"
+ BUILDDIR="incoming/triggerable-${TYPE}-1.0"
+ cat >"${BUILDDIR}/debian/postinst" <<EOF
+#!/bin/sh
+if [ "\$1" = 'triggered' ]; then
+ echo "TRIGGER IS RUNNING"
+fi
+EOF
+ echo "$TYPE /usr/share/doc" > "${BUILDDIR}/debian/triggers"
+ buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+ rm -rf "$BUILDDIR"
+ buildsimplenativepackage "trigdepends-$TYPE" 'all' '1.0' 'unstable'
+}
+
+#buildtriggerpackages 'interest'
+buildtriggerpackages 'interest-noawait'
+buildsimplenativepackage "trigstuff" 'all' '1.0' 'unstable'
+
+setupaptarchive
+
+runtests() {
+ local TYPE="$1"
+ msgmsg 'Working with trigger type' "$TYPE"
+ testsuccess aptget install triggerable-$TYPE -y
+ cp rootdir/tmp/testsuccess.output terminal.output
+ testsuccess grep '^REWRITE ' terminal.output
+ testdpkginstalled triggerable-$TYPE trigdepends-$TYPE
+
+ testsuccess aptget install trigdepends-$TYPE -y --reinstall
+ cp rootdir/tmp/testsuccess.output terminal.output
+ testsuccess grep '^REWRITE ' terminal.output
+ testsuccess grep 'TRIGGER IS RUNNING' terminal.output
+ testdpkginstalled triggerable-$TYPE trigdepends-$TYPE
+
+ testsuccess aptget install trigstuff -y
+ cp rootdir/tmp/testsuccess.output terminal.output
+ testsuccess grep '^REWRITE ' terminal.output
+ testsuccess grep 'TRIGGER IS RUNNING' terminal.output
+ testdpkginstalled triggerable-$TYPE trigdepends-$TYPE trigstuff
+
+ testsuccess aptget purge trigstuff -y
+ cp rootdir/tmp/testsuccess.output terminal.output
+ testsuccess grep '^REWRITE ' terminal.output
+ testsuccess grep 'TRIGGER IS RUNNING' terminal.output
+ testdpkginstalled triggerable-$TYPE trigdepends-$TYPE
+ testdpkgnotinstalled trigstuff
+
+ testsuccess aptget purge trigdepends-$TYPE -y
+ cp rootdir/tmp/testsuccess.output terminal.output
+ testfailure grep '^REWRITE ' terminal.output
+ testfailure grep 'TRIGGER IS RUNNING' terminal.output
+ testdpkgnotinstalled triggerable-$TYPE trigdepends-$TYPE
+}
+#runtests 'interest'
+runtests 'interest-noawait'
diff --git a/test/integration/test-bug-770291-reinstall b/test/integration/test-bug-770291-reinstall
new file mode 100755
index 0000000..a1caf25
--- /dev/null
+++ b/test/integration/test-bug-770291-reinstall
@@ -0,0 +1,98 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable,installed' 'libc6' 'i386' '1'
+insertpackage 'unstable,installed' 'libselinux1' 'i386' '1'
+
+cp rootdir/var/lib/dpkg/status dpkg.status
+
+insertpackage 'unstable,installed' 'init' 'i386' '1' 'Depends: systemd-sysv
+Essential: yes'
+insertpackage 'unstable,installed' 'systemd-sysv' 'i386' '215-5+b1' 'Depends: systemd (= 215-5+b1)
+Pre-Depends: systemd'
+# fun fact: we need these two pre-depends to get systemd ordered before systemd-sysv as
+# many pre-depends mean: do early (as they are a pain, so get them out of the way early)
+insertpackage 'unstable,installed' 'systemd' 'i386' '215-5+b1' 'Pre-Depends: libc6, libselinux1'
+
+# depends loop
+insertpackage 'unstable,installed' 'dependsa' 'i386' '1' 'Depends: dependsb
+Essential: yes'
+insertpackage 'unstable,installed' 'dependsb' 'i386' '1' 'Depends: dependsa
+Essential: yes'
+
+# pre-depends loop
+insertpackage 'unstable,installed' 'predependsa' 'i386' '1' 'Pre-Depends: predependsb
+Essential: yes'
+insertpackage 'unstable,installed' 'predependsb' 'i386' '1' 'Pre-Depends: predependsa
+Essential: yes'
+
+# pre-depends-to-depends loop
+insertpackage 'unstable,installed' 'predependsdependsa' 'i386' '1' 'Pre-Depends: predependsdependsb
+Essential: yes'
+insertpackage 'unstable,installed' 'predependsdependsb' 'i386' '1' 'Depends: predependsdependsa
+Essential: yes'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded.
+Inst systemd [215-5+b1] (215-5+b1 unstable [i386])
+Conf systemd (215-5+b1 unstable [i386])
+Inst systemd-sysv [215-5+b1] (215-5+b1 unstable [i386])
+Conf systemd-sysv (215-5+b1 unstable [i386])' aptget install --reinstall systemd systemd-sysv -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded.
+Inst dependsa [1] (1 unstable [i386])
+Inst dependsb [1] (1 unstable [i386])
+Conf dependsb (1 unstable [i386])
+Conf dependsa (1 unstable [i386])' aptget install --reinstall dependsa dependsb -s
+
+# there is a chance dpkg can actually do these, BUT this depends on the maintainerscripts (not) present
+# which is very risky to depend on (and apt doesn't know about that anyhow).
+testfailure aptget install --reinstall predependsa predependsb -s -o Debug::pkgPackageManager=1
+testsuccess grep "^E: Couldn't configure predependsa:i386, probably a dependency cycle.$" rootdir/tmp/testfailure.output
+
+# FIXME: the error message is a catch all here, not like the one above
+testfailure aptget install --reinstall predependsdependsa predependsdependsb -s -o Debug::pkgPackageManager=1
+testsuccess grep "^E: Could not configure 'predependsdependsb:i386'. $" rootdir/tmp/testfailure.output
+
+
+msgmsg 'While we are at it, lets try these loops without reinstall as well'
+cp dpkg.status rootdir/var/lib/dpkg/status
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ systemd systemd-sysv
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst systemd (215-5+b1 unstable [i386])
+Conf systemd (215-5+b1 unstable [i386])
+Inst systemd-sysv (215-5+b1 unstable [i386])
+Conf systemd-sysv (215-5+b1 unstable [i386])' aptget install systemd systemd-sysv -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ dependsa dependsb
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst dependsa (1 unstable [i386]) []
+Inst dependsb (1 unstable [i386])
+Conf dependsb (1 unstable [i386])
+Conf dependsa (1 unstable [i386])' aptget install dependsa dependsb -s
+
+# there is a chance dpkg can actually do these, BUT this depends on the maintainerscripts (not) present
+# which is very risky to depend on (and apt doesn't know about that anyhow).
+testfailure aptget install predependsa predependsb -s -o Debug::pkgPackageManager=1
+testsuccess grep "^E: Couldn't configure predependsa:i386, probably a dependency cycle.$" rootdir/tmp/testfailure.output
+
+# FIXME: the error message is a catch all here, not like the one above
+testfailure aptget install predependsdependsa predependsdependsb -s -o Debug::pkgPackageManager=1
+testsuccess grep "^E: Could not configure 'predependsdependsb:i386'. $" rootdir/tmp/testfailure.output
diff --git a/test/integration/test-bug-778375-server-has-no-reason-phrase b/test/integration/test-bug-778375-server-has-no-reason-phrase
new file mode 100755
index 0000000..e04f485
--- /dev/null
+++ b/test/integration/test-bug-778375-server-has-no-reason-phrase
@@ -0,0 +1,43 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+echo 'found' > aptarchive/working
+changetohttpswebserver -o 'aptwebserver::redirect::replace::/redirectme/=/' \
+ -o 'aptwebserver::httpcode::200=200' -o 'aptwebserver::httpcode::404=404' \
+ -o 'aptwebserver::httpcode::301=301'
+webserverconfig 'aptwebserver::empty-response-header::' 'foobar'
+webserverconfig 'aptwebserver::response-header::HTTP-Trigger-Field' 'bug'
+webserverconfig 'aptwebserver::response-header::Httputter-Trigger-Field' 'bug'
+
+testdownload() {
+ rm -f downfile
+ msgtest "download of a $1 via" "${3%%:*}"
+ $2 --nomsg downloadfile "$3" downfile
+
+ cp rootdir/tmp/testsuccess.output download.log
+ #looking for "HTTP server doesn't give Reason-Phrase for 200"
+ testsuccess grep 'give Reason-Phrase for' download.log
+
+ if [ "$2" = 'testsuccess' ]; then
+ testfileequal downfile 'found'
+ else
+ testfailure test -e downfile
+ fi
+}
+
+runtest() {
+ testdownload 'file works' 'testsuccess' "$1/working"
+ testdownload 'file via redirect works' 'testsuccess' "$1/redirectme/working"
+
+ testdownload 'non-existent file fails' 'testfailure' "$1/failing"
+ testdownload 'non-existent file via redirect fails' 'testfailure' "$1/redirectme/failing"
+}
+
+runtest "http://localhost:${APTHTTPPORT}"
+runtest "https://localhost:${APTHTTPSPORT}"
diff --git a/test/integration/test-bug-782777-single-arch-weirdness b/test/integration/test-bug-782777-single-arch-weirdness
new file mode 100755
index 0000000..41be1e7
--- /dev/null
+++ b/test/integration/test-bug-782777-single-arch-weirdness
@@ -0,0 +1,72 @@
+#!/bin/sh
+# Ensure that the order in which packages are in the binary cache
+# does not effect if they can be found or not
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'abar' 'i386' '1'
+insertpackage 'unstable' 'foobar' 'i386' '1' 'Depends: abar:amd64, zfoo:amd64'
+insertpackage 'unstable' 'zfoo' 'i386' '1'
+
+setupaptarchive
+
+testrun() {
+ rm -f rootdir/var/lib/apt/extended_states
+
+ testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ abar zfoo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst abar (1 unstable [i386])
+Inst zfoo (1 unstable [i386])
+Conf abar (1 unstable [i386])
+Conf zfoo (1 unstable [i386])' aptget install abar zfoo -s
+
+ testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ abar zfoo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst abar (1 unstable [i386])
+Inst zfoo (1 unstable [i386])
+Conf abar (1 unstable [i386])
+Conf zfoo (1 unstable [i386])' aptget install abar:i386 zfoo:i386 -s
+
+ testequal "Reading package lists...
+Building dependency tree...
+Package abar:amd64 is not available, but is referred to by another package.
+This may mean that the package is missing, has been obsoleted, or
+is only available from another source
+
+Package zfoo:amd64 is not available, but is referred to by another package.
+This may mean that the package is missing, has been obsoleted, or
+is only available from another source
+
+E: Package 'abar:amd64' has no installation candidate
+E: Package 'zfoo:amd64' has no installation candidate" aptget install abar:amd64 zfoo:amd64 -s
+
+ cp -f rootdir/var/lib/dpkg/status status.backup
+ insertinstalledpackage 'abar' 'i386' '1'
+ insertinstalledpackage 'zfoo' 'i386' '1'
+
+ testequal 'abar
+zfoo' aptmark showmanual abar zfoo
+ testequal 'abar set to automatically installed.
+zfoo set to automatically installed.' aptmark auto abar zfoo
+ testempty aptmark showmanual abar zfoo
+ testequal 'abar
+zfoo' aptmark showauto abar zfoo
+
+ mv -f status.backup rootdir/var/lib/dpkg/status
+}
+
+msgmsg 'Single-Arch testrun'
+testrun
+msgmsg 'Multi-Arch testrun'
+configarchitecture 'i386' 'amd64'
+testrun
diff --git a/test/integration/test-bug-796070-downgrade-realpkg b/test/integration/test-bug-796070-downgrade-realpkg
new file mode 100755
index 0000000..1013247
--- /dev/null
+++ b/test/integration/test-bug-796070-downgrade-realpkg
@@ -0,0 +1,23 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+buildsimplenativepackage 'apt' 'all' '1.0.10.1' 'stable' 'Depends: libapt-pkg4.16 (>= 1.0.10.1)'
+buildsimplenativepackage 'libapt-pkg4.16' 'all' '1.0.10.1' 'stable' 'Breaks: apt (<< 0.9.4~), libapt-inst1.5 (<< 0.9.9~)'
+buildsimplenativepackage 'libapt-pkg5.0' 'all' '1.1~exp9' 'unstable' 'Breaks: apt (<< 1.1~exp4), libapt-inst1.5 (<< 0.9.9~)'
+buildsimplenativepackage 'apt' 'all' '1.1~exp9' 'unstable' 'Depends: libapt-pkg5.0'
+
+setupaptarchive
+
+# Check with the APT name, aka essential
+testsuccess aptget install apt -t stable -y
+testsuccess aptget dist-upgrade -y
+
+testsuccess aptget install apt/stable -y --allow-downgrades -o Debug::pkgPackageManager=1 #-o Debug::pkgDpkgPM=1
+testdpkginstalled apt libapt-pkg4.16
+testdpkgnotinstalled libapt-pkg5.0
diff --git a/test/integration/test-bug-796070-downgrade-simulate b/test/integration/test-bug-796070-downgrade-simulate
new file mode 100755
index 0000000..61ecc87
--- /dev/null
+++ b/test/integration/test-bug-796070-downgrade-simulate
@@ -0,0 +1,67 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'apt' 'all' '1.0.10.1' 'Depends: libapt-pkg4.16 (>= 1.0.10.1)'
+insertinstalledpackage 'libapt-pkg4.16' 'all' '1.0.10.1' 'Breaks: apt (<< 0.9.4~), libapt-inst1.5 (<< 0.9.9~)'
+insertinstalledpackage 'libapt-pkg5.0' 'all' '1.1~exp9' 'Breaks: apt (<< 1.1~exp4), libapt-inst1.5 (<< 0.9.9~)'
+insertinstalledpackage 'apt' 'all' '1.1~exp9' 'Depends: libapt-pkg5.0'
+
+insertpackage 'unstable' 'napt' 'all' '1.0.10.1' 'Depends: nlibapt-pkg4.16 (>= 1.0.10.1)'
+insertinstalledpackage 'nlibapt-pkg4.16' 'all' '1.0.10.1' 'Breaks: napt (<< 0.9.4~), nlibapt-inst1.5 (<< 0.9.9~)'
+insertinstalledpackage 'nlibapt-pkg5.0' 'all' '1.1~exp9' 'Breaks: napt (<< 1.1~exp4), nlibapt-inst1.5 (<< 0.9.9~)'
+insertinstalledpackage 'napt' 'all' '1.1~exp9' 'Depends: nlibapt-pkg5.0'
+
+insertpackage 'unstable' 'eapt' 'all' '1.0.10.1' 'Depends: elibapt-pkg4.16 (>= 1.0.10.1)
+Essential: yes'
+insertinstalledpackage 'elibapt-pkg4.16' 'all' '1.0.10.1' 'Breaks: eapt (<< 0.9.4~), elibapt-inst1.5 (<< 0.9.9~)'
+insertinstalledpackage 'elibapt-pkg5.0' 'all' '1.1~exp9' 'Breaks: eapt (<< 1.1~exp4), elibapt-inst1.5 (<< 0.9.9~)'
+insertinstalledpackage 'eapt' 'all' '1.1~exp9' 'Depends: elibapt-pkg5.0
+Essential: yes'
+
+
+setupaptarchive
+
+
+# Check with a normal package
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ nlibapt-pkg5.0
+The following packages will be DOWNGRADED:
+ napt
+0 upgraded, 0 newly installed, 1 downgraded, 1 to remove and 0 not upgraded.
+Remv nlibapt-pkg5.0 [1.1~exp9] [napt:i386 ]
+Inst napt [1.1~exp9] (1.0.10.1 unstable [all])
+Conf napt (1.0.10.1 unstable [all])' apt install -s napt=1.0.10.1
+
+
+# Check with Essential
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ elibapt-pkg5.0
+The following packages will be DOWNGRADED:
+ eapt
+0 upgraded, 0 newly installed, 1 downgraded, 1 to remove and 0 not upgraded.
+Inst eapt [1.1~exp9] (1.0.10.1 unstable [all]) [elibapt-pkg5.0:i386 on eapt:i386] [elibapt-pkg5.0:i386 ]
+Remv elibapt-pkg5.0 [1.1~exp9]
+Conf eapt (1.0.10.1 unstable [all])' apt install -s eapt=1.0.10.1
+
+
+# Check with the APT name, aka essential
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libapt-pkg5.0
+The following packages will be DOWNGRADED:
+ apt
+0 upgraded, 0 newly installed, 1 downgraded, 1 to remove and 0 not upgraded.
+Inst apt [1.1~exp9] (1.0.10.1 unstable [all]) [libapt-pkg5.0:i386 on apt:i386] [libapt-pkg5.0:i386 ]
+Remv libapt-pkg5.0 [1.1~exp9]
+Conf apt (1.0.10.1 unstable [all])' apt install -s apt=1.0.10.1
diff --git a/test/integration/test-bug-807012-mixed-case-package-names b/test/integration/test-bug-807012-mixed-case-package-names
new file mode 100755
index 0000000..4f003ab
--- /dev/null
+++ b/test/integration/test-bug-807012-mixed-case-package-names
@@ -0,0 +1,21 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+TMPDIR=$(readlink -f .)
+
+insertinstalledpackage 'worldofgoo' 'all' '1'
+insertpackage 'unstable' 'WorldOfGoo' 'all' '1'
+
+setupaptarchive
+
+testsuccessequal "worldofgoo:
+ Installed: 1
+ Candidate: 1
+ Version table:
+ *** 1 500
+ 500 file:${TMPDIR}/aptarchive unstable/main all Packages
+ 100 ${TMPDIR}/rootdir/var/lib/dpkg/status" \
+ aptcache policy worldofgoo
diff --git a/test/integration/test-bug-814139-pickup-of-different-cache-states b/test/integration/test-bug-814139-pickup-of-different-cache-states
new file mode 100755
index 0000000..dffeb73
--- /dev/null
+++ b/test/integration/test-bug-814139-pickup-of-different-cache-states
@@ -0,0 +1,60 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'build-essential' 'amd64' '1'
+
+buildsimplenativepackage 'foo' 'all' '1' 'stable' 'Build-Depends: bar'
+buildsimplenativepackage 'bar' 'all' '1' 'stable'
+
+setupaptarchive
+
+cp rootdir/var/lib/dpkg/status status.backup
+
+testrun() {
+ cp status.backup rootdir/var/lib/dpkg/status
+ cleanup
+ testdpkgnotinstalled 'bar'
+ testsuccess aptget build-dep foo -y
+ testdpkginstalled 'bar'
+ cleanup
+ cd downloaded
+ testsuccess aptget source foo
+ testsuccess test -s foo_1.tar.* -a -s foo_1.dsc
+ rm foo_1.tar.* foo_1.dsc
+ testsuccess test -d foo-1
+ rm -rf foo-1
+ cd ..
+ cleanup
+ testsuccess aptget install foo -y
+}
+
+msgmsg 'Caches fully up-to-date'
+cleanup() {
+ rm -f rootdir/var/cache/apt/*.bin
+ testsuccess aptcache gencaches
+}
+testrun
+
+msgmsg 'pkgcache.bin is missing'
+cleanup() {
+ rm -f rootdir/var/cache/apt/*.bin
+ testsuccess aptcache gencaches
+ rm rootdir/var/cache/apt/pkgcache.bin
+}
+testrun
+
+msgmsg 'Caches are not writeable'
+rm rootdir/var/cache/apt/*.bin
+addtrap 'prefix' 'chmod 755 rootdir/var/cache/apt;'
+chmod 555 rootdir/var/cache/apt
+testsuccess aptcache gencaches
+cleanup() {
+ testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/cache/apt" '%a' '=' '555'
+}
+testrun
diff --git a/test/integration/test-bug-818628-unreadable-source b/test/integration/test-bug-818628-unreadable-source
new file mode 100755
index 0000000..e7ad26d
--- /dev/null
+++ b/test/integration/test-bug-818628-unreadable-source
@@ -0,0 +1,94 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+cat rootdir/etc/apt/apt.conf.d/01multiarch.conf >> $(getaptconfig)
+
+if [ "$(id -u)" = '0' ]; then
+ msgskip 'Tests for unreadable files do not work as root'
+ exit 0
+fi
+
+insertinstalledpackage 'foo' 'amd64' '1'
+insertpackage 'unstable' 'foo' 'amd64' '2'
+
+setupaptarchive --no-update
+
+touch rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.list
+touch rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.sources
+touch rootdir/etc/apt/apt.conf.d/unreadable.conf
+touch rootdir/etc/apt/preferences.d/unreadable.pref
+
+addtrap 'prefix' "chmod -R +r '$(escape_shell "$TMPWORKINGDIRECTORY")/rootdir/etc/apt';"
+chmod -r rootdir/etc/apt/trusted.gpg.d
+testfailure apt update
+chmod +r rootdir/etc/apt/trusted.gpg.d
+testsuccess apt update
+testsuccess apt policy foo
+testsuccess apt search foo
+testsuccessequal "Listing...
+foo/unstable 2 amd64 [upgradable from: 1]
+N: There is 1 additional version. Please use the '-a' switch to see it" apt list --upgradable
+
+runthemall() {
+ local ERR="$1"
+ local ERRNOTICEVER="$1${2-
+N: There is 1 additional version. Please use the '-a' switch to see it}"
+ local ERRNOTICEREC="$1${2-
+N: There is 1 additional record. Please use the '-a' switch to see it}"
+ testwarningmsg "$ERR" aptcache policy
+ testwarningmsg "$ERR" aptcache policy foo
+ testwarningmsg "$ERR" aptcache depends foo
+ testwarningmsg "$ERR" aptcache rdepends foo
+ testwarningmsg "$ERR" aptcache search foo
+ testwarningmsg "$ERR" apt policy
+ testwarningmsg "$ERR" apt policy foo
+ testwarningmsg "$ERR" apt depends foo
+ testwarningmsg "$ERR" apt rdepends foo
+ testwarningmsg "$ERR" apt search foo
+ testwarningmsg "$ERRNOTICEVER" apt list --upgradable
+ testwarningmsg "$ERRNOTICEREC" apt show foo
+ testwarningmsg "$ERRNOTICEREC" aptcache show foo --no-all-versions
+ testwarningmsg "$ERR" aptmark auto foo
+ testwarningmsg "$ERR" aptmark manual foo
+ testwarningmsg "$ERR" aptmark auto foo
+}
+echo 'Apt::Cmd::Disable-Script-Warning "true";' >> aptconfig.conf
+
+msgmsg 'Unreadable one-line-style sources file'
+chmod -r rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.list
+runthemall "W: Unable to read $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.list - open (13: Permission denied)"
+chmod +r rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.list
+
+msgmsg 'Unreadable deb822-style sources file'
+chmod -r rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.sources
+runthemall "W: Unable to read $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.sources - open (13: Permission denied)"
+chmod +r rootdir/etc/apt/sources.list.d/apt-test-unstable-deb-src.sources
+
+msgmsg 'Unreadable config file'
+chmod -r rootdir/etc/apt/apt.conf.d/unreadable.conf
+runthemall "W: Unable to read ${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/unreadable.conf - open (13: Permission denied)"
+chmod +r rootdir/etc/apt/apt.conf.d/unreadable.conf
+
+msgmsg 'Unreadable preferences file'
+chmod -r rootdir/etc/apt/preferences.d/unreadable.pref
+runthemall "W: Unable to read ${TMPWORKINGDIRECTORY}/rootdir/etc/apt/preferences.d/unreadable.pref - open (13: Permission denied)"
+chmod +r rootdir/etc/apt/preferences.d/unreadable.pref
+
+msgmsg 'Unreadable sources directory'
+chmod -r rootdir/etc/apt/sources.list.d
+runthemall "W: Unable to read $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list.d/ - opendir (13: Permission denied)" ""
+chmod +r rootdir/etc/apt/sources.list.d
+
+msgmsg 'Unreadable config directory'
+chmod -r rootdir/etc/apt/apt.conf.d
+runthemall "W: Unable to read ${TMPWORKINGDIRECTORY}/rootdir/etc/apt/apt.conf.d/ - opendir (13: Permission denied)"
+chmod +r rootdir/etc/apt/apt.conf.d
+
+msgmsg 'Unreadable preferences directory'
+chmod -r rootdir/etc/apt/preferences.d
+runthemall "W: Unable to read ${TMPWORKINGDIRECTORY}/rootdir/etc/apt/preferences.d/ - opendir (13: Permission denied)"
+chmod +r rootdir/etc/apt/preferences.d
diff --git a/test/integration/test-bug-829651 b/test/integration/test-bug-829651
new file mode 100755
index 0000000..976bb04
--- /dev/null
+++ b/test/integration/test-bug-829651
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+if [ "$(id -u)" = '0' ]; then
+ msgskip 'Tests for unreadable files do not work as root'
+ exit 0
+fi
+
+insertinstalledpackage 'foo' 'amd64' '1'
+insertpackage 'unstable' 'foo' 'amd64' '2'
+
+setupaptarchive
+
+
+testsuccess aptget indextargets
+
+aptget clean
+chmod -r rootdir/var/lib/dpkg/status
+
+testfailureequal "E: Could not open file ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status - open (13: Permission denied)
+E: Problem opening ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status
+E: The package lists or status file could not be parsed or opened." aptget indextargets
diff --git a/test/integration/test-bug-835094-configure-before-purge b/test/integration/test-bug-835094-configure-before-purge
new file mode 100755
index 0000000..16a196c
--- /dev/null
+++ b/test/integration/test-bug-835094-configure-before-purge
@@ -0,0 +1,44 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'kernel' 'amd64' '1' 'unstable' 'Depends: initramfs-tools | linux-initramfs-tool'
+
+#buildsimplenativepackage 'initramfs-tools' 'amd64' '1.0.16' 'unstable' 'Provides: linux-initramfs-tool'
+setupsimplenativepackage 'initramfs-tools' 'amd64' '1' 'unstable' 'Provides: linux-initramfs-tool'
+BUILDDIR='incoming/initramfs-tools-1'
+mkdir -p "${BUILDDIR}/debian/initramfs-tools/etc"
+echo 'foo2=bar2;' > "${BUILDDIR}/init.conf"
+echo 'init.conf /etc/init.conf' >> "${BUILDDIR}/debian/install"
+buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+rm -rf "$BUILDDIR"
+
+buildsimplenativepackage 'dracut' 'amd64' '1' 'unstable' 'Provides: linux-initramfs-tool
+Conflicts: initramfs-tools'
+
+setupaptarchive
+
+testdpkgnotinstalled 'kernel' 'initramfs-tools' 'dracut'
+testsuccess apt install kernel -y
+testdpkginstalled 'kernel' 'initramfs-tools'
+testsuccess test -s rootdir/etc/init.conf
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ initramfs-tools*
+The following NEW packages will be installed:
+ dracut
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Purg initramfs-tools [1] [kernel:amd64 ]
+Inst dracut (1 unstable [amd64])
+Conf dracut (1 unstable [amd64])' apt install --purge dracut -s
+testsuccess apt install --purge dracut -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0
+testsuccess apt install --purge dracut -y
+testdpkginstalled 'kernel' 'dracut'
+testdpkgnotinstalled 'initramfs-tools'
+testsuccess test ! -s rootdir/etc/init.conf
diff --git a/test/integration/test-bug-838779-untrusted-to-trusted-Release-hit b/test/integration/test-bug-838779-untrusted-to-trusted-Release-hit
new file mode 100755
index 0000000..5023475
--- /dev/null
+++ b/test/integration/test-bug-838779-untrusted-to-trusted-Release-hit
@@ -0,0 +1,48 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'foo' 'all' '1' 'stable'
+
+export APT_DONT_SIGN=''
+setupaptarchive --no-update
+
+changetowebserver
+
+testsuccess aptget update
+testdpkgnotinstalled 'foo'
+testsuccess apt install foo -y
+testdpkginstalled 'foo'
+testsuccess apt purge foo -y
+testdpkgnotinstalled 'foo'
+
+msgmsg 'Untrusted to trusted hit' 'InRelease'
+rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/archives
+mv rootdir/etc/apt/trusted.gpg.d rootdir/etc/apt/trusted.gpg.d-bak
+testfailure aptget update
+testwarning aptget update --allow-insecure-repositories
+testfailure apt install foo -y
+testdpkgnotinstalled 'foo'
+mv rootdir/etc/apt/trusted.gpg.d-bak rootdir/etc/apt/trusted.gpg.d
+testsuccess aptget update
+testsuccess apt install foo -y
+testdpkginstalled 'foo'
+testsuccess apt purge foo -y
+testdpkgnotinstalled 'foo'
+
+msgmsg 'Untrusted to trusted hit' 'Release.gpg'
+find aptarchive -name 'InRelease' -delete
+rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/archives
+mv rootdir/etc/apt/trusted.gpg.d rootdir/etc/apt/trusted.gpg.d-bak
+testfailure aptget update
+testwarning aptget update --allow-insecure-repositories
+testfailure apt install foo -y
+testdpkgnotinstalled 'foo'
+mv rootdir/etc/apt/trusted.gpg.d-bak rootdir/etc/apt/trusted.gpg.d
+testsuccess aptget update
+testsuccess apt install foo -y
+testdpkginstalled 'foo'
diff --git a/test/integration/test-bug-841874-warning-for-mismatching-distribution b/test/integration/test-bug-841874-warning-for-mismatching-distribution
new file mode 100755
index 0000000..7502eef
--- /dev/null
+++ b/test/integration/test-bug-841874-warning-for-mismatching-distribution
@@ -0,0 +1,49 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'testing' 'foo' 'all' '1'
+
+getcodenamefromsuite() { echo -n 'stretch'; }
+setupaptarchive --no-update
+APTARCHIVE="$(readlink -f './aptarchive')"
+ln -s "${APTARCHIVE}/dists/testing" "${APTARCHIVE}/dists/stretch"
+ln -s "${APTARCHIVE}/dists/testing" "${APTARCHIVE}/dists/zurg"
+
+testfailure apt show foo
+testsuccess apt update
+testsuccess apt show foo
+
+rm -rf rootdir/var/lib/apt/lists
+sed -i -e 's#testing#stretch#g' rootdir/etc/apt/sources.list.d/*
+testsuccess apt update
+testsuccess apt show foo
+
+rm -rf rootdir/var/lib/apt/lists
+sed -i -e 's#stretch#zurg#g' rootdir/etc/apt/sources.list.d/*
+testwarningmsg "W: Conflicting distribution: file:$APTARCHIVE zurg InRelease (expected zurg but got stretch)" apt update
+testsuccess apt show foo
+
+# check that 'foo/bar' is rewritten to 'foo' while we are at it
+rm -rf rootdir/var/lib/apt/lists
+sed -i -e 's#zurg#stretch/updates#g' rootdir/etc/apt/sources.list.d/*
+testfailure apt update
+testfailure apt show foo
+ln -s "${APTARCHIVE}/dists/testing" "${APTARCHIVE}/dists/stretch/updates"
+testsuccess apt update
+testsuccess apt show foo
+
+# … but only if needed
+rm -rf rootdir/var/lib/apt/lists
+sed -i -e 's#stretch#buster#g' rootdir/etc/apt/sources.list.d/*
+sed -i -e 's#^Codename: stretch$#Codename: buster/updates#g' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailure apt update
+testfailure apt show foo
+ln -s "${APTARCHIVE}/dists/testing" "${APTARCHIVE}/dists/buster"
+testsuccess apt update
+testsuccess apt show foo
diff --git a/test/integration/test-bug-869859-retry-downloads b/test/integration/test-bug-869859-retry-downloads
new file mode 100755
index 0000000..86203f7
--- /dev/null
+++ b/test/integration/test-bug-869859-retry-downloads
@@ -0,0 +1,55 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'testpkg' 'all' '1' 'stable'
+
+setupaptarchive --no-update
+changetowebserver
+testsuccess apt update
+
+cd downloaded
+testsuccess apt download testpkg
+testsuccess test -f testpkg_1_all.deb
+rm -f testpkg_1_all.deb
+
+msgmsg 'Fail after too many retries'
+webserverconfig 'aptwebserver::failrequest' '429'
+webserverconfig 'aptwebserver::failrequest::pool/testpkg_1_all.deb' '99'
+testfailure apt download testpkg -o acquire::retries=3
+testfailure test -f testpkg_1_all.deb
+
+msgmsg 'Success in the third try'
+webserverconfig 'aptwebserver::failrequest::pool/testpkg_1_all.deb' '2'
+testsuccess apt download testpkg -o acquire::retries=3
+testsuccess test -f testpkg_1_all.deb
+rm -f testpkg_1_all.deb
+
+msgmsg 'Do not try everything again, hard failures keep hard failures'
+webserverconfig 'aptwebserver::failrequest' '404'
+webserverconfig 'aptwebserver::failrequest::pool/testpkg_1_all.deb' '2'
+testfailure apt download testpkg -o acquire::retries=3
+testfailure test -f testpkg_1_all.deb
+
+cat ../rootdir/etc/apt/sources.list.d/apt-test-*.list > ../rootdir/etc/apt/sources.list.d/00http-source.list
+changetohttpswebserver
+
+msgmsg 'Check download from alternative sources if first failed'
+webserverconfig 'aptwebserver::failrequest::pool/testpkg_1_all.deb' '0'
+testsuccess apt update
+testsuccess apt download testpkg -o acquire::retries=0
+testsuccess test -f testpkg_1_all.deb
+rm -f testpkg_1_all.deb
+
+# we make the first source fail by disabling http support
+webserverconfig 'aptwebserver::support::http' 'false'
+testsuccess apt download testpkg -o acquire::retries=0
+cp ../rootdir/tmp/testsuccess.output alt.output
+testsuccess grep '^ 400 Bad Request' alt.output
+testsuccess test -f testpkg_1_all.deb
+rm -f testpkg_1_all.deb
diff --git a/test/integration/test-bug-870675-hang-on-unsupported-method b/test/integration/test-bug-870675-hang-on-unsupported-method
new file mode 100755
index 0000000..0d79b8f
--- /dev/null
+++ b/test/integration/test-bug-870675-hang-on-unsupported-method
@@ -0,0 +1,26 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+changetowebserver
+
+echo 'foo' > aptarchive/foobar
+echo 'bar' > aptarchive/foobar2
+
+testsuccess apthelper download-file "http://localhost:${APTHTTPPORT}/foobar" ./downloaded/foobar 'SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15'
+rm -f ./downloaded/foobar
+testsuccess apthelper download-file "http://localhost:${APTHTTPPORT}/foobar" ./downloaded/foobar 'SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15' \
+ "http://localhost:${APTHTTPPORT}/foobar2" ./downloaded/foobar2 'SHA1:e242ed3bffccdf271b7fbaf34ed72d089537b42f'
+rm -f ./downloaded/foobar ./downloaded/foobar2
+
+testfailure apthelper download-file "foo://localhost:${APTHTTPPORT}/foobar" ./downloaded/foobar 'SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15'
+testsuccess grep 'The method driver .*/foo could not be found' rootdir/tmp/testfailure.output
+rm -f ./downloaded/foobar
+testfailure apthelper download-file "foo://localhost:${APTHTTPPORT}/foobar" ./downloaded/foobar 'SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15' \
+ "foo://localhost:${APTHTTPPORT}/foobar2" ./downloaded/foobar2 'SHA1:e242ed3bffccdf271b7fbaf34ed72d089537b42f'
+testsuccess grep 'The method driver .*/foo could not be found' rootdir/tmp/testfailure.output
+rm -f ./downloaded/foobar ./downloaded/foobar2
diff --git a/test/integration/test-bug-872963-apt-ftparchive-disable-hashes b/test/integration/test-bug-872963-apt-ftparchive-disable-hashes
new file mode 100755
index 0000000..ff01246
--- /dev/null
+++ b/test/integration/test-bug-872963-apt-ftparchive-disable-hashes
@@ -0,0 +1,40 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+
+touch aptarchive/apt_1.5~rc1.tar.xz
+cat >> aptarchive/apt_1.5~rc1.dsc << EOF
+Format: 3.0 (native)
+Source: apt
+Binary: apt
+Architecture: any all
+Version: 1.5~rc1
+Build-Depends: foo
+Package-List:
+ apt deb admin important arch=any
+Checksums-Sha1:
+ 332b354b0c7cbd936a4a95f3ce149aa03677cabf 2095076 apt_1.5~rc1.tar.xz
+Checksums-Sha256:
+ 14d09b2c1e13f9a70aac3322987ff26f36c53010639763573c9aa4987e52e47a 2095076 apt_1.5~rc1.tar.xz
+Checksums-Sha512:
+ 4f570c10c3fd549b2e27db4481fbc1ebebed52bd06a8ba7c0716b3917a8452bb3d3cd4fbb02561e02af09b1973a65a4cc69a42c21e858b1d5c3caa970aea4fd4 2095076 apt_1.5~rc1.tar.xz
+Files:
+ 7ea24e77b6203e08ca4158831df26825 2095076 apt_1.5~rc1.tar.xz
+EOF
+
+
+rm rootdir/etc/apt/apt.conf.d/*
+
+for HASH in MD5 SHA1 SHA256 SHA512; do
+ testsuccess aptftparchive -qq sources -o APT::FTPArchive::$HASH=false "aptarchive/"
+ cp rootdir/tmp/testsuccess.output aptarchive/Sources
+ if [ "$HASH" = "MD5" ]; then
+ testfailure grep "Files:" aptarchive/Sources
+ else
+ testfailure grep -i "$HASH:" aptarchive/Sources
+ fi
+done
diff --git a/test/integration/test-bug-879591-dont-warn-for-hidden-but-good-components b/test/integration/test-bug-879591-dont-warn-for-hidden-but-good-components
new file mode 100755
index 0000000..6eb4e04
--- /dev/null
+++ b/test/integration/test-bug-879591-dont-warn-for-hidden-but-good-components
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'stable' 'foo' 'all' '1'
+insertpackage 'stable' 'bar' 'all' '1' '' '' '' 'main/debian-installer/others'
+insertpackage 'stable-backports' 'foo' 'all' '1+sb'
+insertpackage 'stable-backports' 'bar' 'all' '1+sb' '' '' '' 'main/debian-installer/others'
+
+find aptarchive/dists -path '*/debian-installer/i18n/Translation-en*' -delete
+
+setupaptarchive --no-update
+sed -i -e '/^Codename: / a\
+Components: main contrib' $(find ./aptarchive -name 'Release')
+signreleasefiles
+
+testsuccess aptget update
+
+sed -i -e 's# main\w*$# main main/debian-installer#' rootdir/etc/apt/sources.list.d/*
+
+testsuccess aptget update
diff --git a/test/integration/test-bug-921685-binary-detached-signature b/test/integration/test-bug-921685-binary-detached-signature
new file mode 100755
index 0000000..df86319
--- /dev/null
+++ b/test/integration/test-bug-921685-binary-detached-signature
@@ -0,0 +1,22 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'foo' 'all' '1'
+
+buildaptarchive
+setupdistsaptarchive
+
+for RELEASE in $(find aptarchive -name 'Release'); do
+ # note the missing --armor
+ dosigning "keys/joesixpack" --detach-sign --sign --output "${RELEASE}.gpg" "${RELEASE}"
+done
+
+testfailure apt show foo
+testfailure aptget update
+testsuccess grep 'W: .* Detached signature file .* is in unsupported binary format' rootdir/tmp/testfailure.output
+testfailure apt show foo
diff --git a/test/integration/test-bug-lp1347721-dpkg-ordering b/test/integration/test-bug-lp1347721-dpkg-ordering
new file mode 100755
index 0000000..3c31974
--- /dev/null
+++ b/test/integration/test-bug-lp1347721-dpkg-ordering
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+# ensure we find a valid ordering
+testsuccess aptget dist-upgrade -s
diff --git a/test/integration/test-bug-lp1445239-download-loop b/test/integration/test-bug-lp1445239-download-loop
new file mode 100755
index 0000000..6802840
--- /dev/null
+++ b/test/integration/test-bug-lp1445239-download-loop
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# this is a regression test for LP: #1445239 where a partial download can
+# trigger an endless hang of the download method
+#
+
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+changetowebserver
+
+TESTFILE='aptarchive/testfile'
+dd if=/dev/zero of=$TESTFILE bs=100k count=1 2>/dev/null
+
+DOWNLOADLOG='rootdir/tmp/testdownloadfile.log'
+
+TARGET=./downloaded/testfile-downloaded
+dd if=/dev/zero of=$TARGET bs=99k count=1 2>/dev/null
+if ! downloadfile http://localhost:${APTHTTPPORT}/testfile "$TARGET" > "$DOWNLOADLOG"; then
+ cat >&2 "$DOWNLOADLOG"
+ msgfail
+else
+ msgpass
+fi
diff --git a/test/integration/test-bug-lp1550741-heisestate b/test/integration/test-bug-lp1550741-heisestate
new file mode 100755
index 0000000..76fdcb8
--- /dev/null
+++ b/test/integration/test-bug-lp1550741-heisestate
@@ -0,0 +1,48 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'module-init-tools' 'amd64' '1.0' 'Depends: libkmod2 (= 21-1)'
+insertpackage 'unstable' 'libkmod2' 'amd64' '0.22-1'
+insertinstalledpackage 'module-init-tools' 'amd64' '0.1'
+
+setupaptarchive
+
+# this test only works if the python-apt is build against the same
+# ABI version as the apt we are testing here
+PYAPT_LIB_VER=$(runpython3 -c 'import apt_pkg;print(apt_pkg.LIB_VERSION)' 2>/dev/null || true)
+if [ ! -f $LIBRARYPATH/libapt-pkg.so.$PYAPT_LIB_VER ]; then
+ msgskip "python-apt build with the wrong library version: $PYAPT_LIB_VER"
+ exit 0
+fi
+
+# we can not test this using our normal sh tests
+cat > test.py <<EOF
+#!/usr/bin/python3
+import sys
+import apt
+def in_valid_state(pkg):
+ return (pkg.marked_keep or
+ pkg.marked_install or
+ pkg.marked_upgrade or
+ pkg.marked_delete or
+ pkg.marked_downgrade or
+ pkg.marked_reinstall)
+# main
+cache=apt.Cache()
+pkgname="module-init-tools"
+if not in_valid_state(cache[pkgname]):
+ print("the test is broken, %s should be in a valid state" % pkgname)
+ sys.exit(99)
+cache.upgrade(True)
+if not in_valid_state(cache[pkgname]):
+ print("package %s is in a heisen-state" % pkgname)
+ sys.exit(2)
+
+EOF
+testsuccess runpython3 test.py
diff --git a/test/integration/test-bug-lp1562402-nomark-removals-as-keep b/test/integration/test-bug-lp1562402-nomark-removals-as-keep
new file mode 100755
index 0000000..6e8225a
--- /dev/null
+++ b/test/integration/test-bug-lp1562402-nomark-removals-as-keep
@@ -0,0 +1,39 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'maas-common' 'all' '2.0.0~alpha4+bzr4843-0ubuntu1~xenial2'
+insertpackage 'unstable' 'maas-region-controller-min' 'amd64' '2.0.0~alpha4+bzr4837-0ubuntu1~xenial1' 'Depends: maas-common (= 2.0.0~alpha4+bzr4837-0ubuntu1~xenial1)'
+insertpackage 'unstable' 'maas-region-api' 'amd64' '2.0.0~alpha4+bzr4843-0ubuntu1~xenial2' 'Depends: maas-common (= 2.0.0~alpha4+bzr4843-0ubuntu1~xenial2)\nConflicts: maas-region-controller-min\nProvides: maas-region-controller-min'
+insertpackage 'unstable' 'maas-region-controller' 'all' '2.0.0~alpha4+bzr4843-0ubuntu1~xenial2' 'Depends: maas-region-api (= 2.0.0~alpha4+bzr4843-0ubuntu1~xenial2)'
+
+insertinstalledpackage 'maas-common' 'all' '2.0.0~alpha3+bzr4810-0ubuntu1'
+insertinstalledpackage 'maas-region-controller-min' 'amd64' '2.0.0~alpha3+bzr4810-0ubuntu1' 'Depends: maas-common (= 2.0.0~alpha3+bzr4810-0ubuntu1)'
+insertinstalledpackage 'maas-region-controller' 'all' '2.0.0~alpha3+bzr4810-0ubuntu1' 'Depends: maas-region-controller-min (= 2.0.0~alpha3+bzr4810-0ubuntu1)'
+
+setupaptarchive
+
+testsuccess aptget dist-upgrade -s -o Debug::pkgDepCache::AutoInstall=true -o Debug::pkgPackageManager=yes -o Debug::pkgProblemResolver=yes
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ maas-region-controller-min
+The following NEW packages will be installed:
+ maas-region-api
+The following packages will be upgraded:
+ maas-common maas-region-controller
+2 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Inst maas-region-controller [2.0.0~alpha3+bzr4810-0ubuntu1] (2.0.0~alpha4+bzr4843-0ubuntu1~xenial2 unstable [all]) []
+Remv maas-region-controller-min [2.0.0~alpha3+bzr4810-0ubuntu1] []
+Inst maas-common [2.0.0~alpha3+bzr4810-0ubuntu1] (2.0.0~alpha4+bzr4843-0ubuntu1~xenial2 unstable [all]) []
+Inst maas-region-api (2.0.0~alpha4+bzr4843-0ubuntu1~xenial2 unstable [amd64])
+Conf maas-region-controller (2.0.0~alpha4+bzr4843-0ubuntu1~xenial2 unstable [all])
+Conf maas-common (2.0.0~alpha4+bzr4843-0ubuntu1~xenial2 unstable [all])
+Conf maas-region-api (2.0.0~alpha4+bzr4843-0ubuntu1~xenial2 unstable [amd64])' \
+aptget dist-upgrade -s
diff --git a/test/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative b/test/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative
new file mode 100755
index 0000000..7f8e4ad
--- /dev/null
+++ b/test/integration/test-bug-lp1694697-build-dep-architecture-limited-alternative
@@ -0,0 +1,58 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+
+insertpackage 'stable' 'build-depends' 'i386' '1'
+insertpackage 'stable' 'foo' 'i386' '1'
+insertinstalledpackage 'build-essential' 'i386' '1'
+
+setupaptarchive
+
+# This used to be interpreted as build-depends | foo
+cat > foobar.dsc <<EOF
+Format: 3.0 (native)
+Source: foobar
+Binary: foobar
+Architecture: all
+Version: 1
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: build-depends [i386] | build-depends [amd64], foo
+Standards-Version: 3.9.8
+EOF
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-depends foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Inst foo (1 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf foo (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc
+
+
+# This caused a segmentation fault
+cat > foobar.dsc <<EOF
+Format: 3.0 (native)
+Source: foobar
+Binary: foobar
+Architecture: all
+Version: 1
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: build-depends [i386] | build-depends [amd64]
+Standards-Version: 3.9.8
+EOF
+testsuccessequal "Note, using file './foobar.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-depends
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Conf build-depends (1 stable [i386])" aptget build-dep --simulate ./foobar.dsc
diff --git a/test/integration/test-bug-multiarch-upgrade b/test/integration/test-bug-multiarch-upgrade
new file mode 100755
index 0000000..38e7053
--- /dev/null
+++ b/test/integration/test-bug-multiarch-upgrade
@@ -0,0 +1,29 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'libcups2' 'amd64' '1' 'Multi-Arch: same'
+insertinstalledpackage 'libcups2' 'i386' '1' 'Multi-Arch: same'
+
+insertpackage 'unstable' 'libcups2' 'amd64' '0' 'Multi-Arch: same'
+insertpackage 'unstable' 'libcups2' 'amd64' '2' 'Multi-Arch: same'
+insertpackage 'unstable' 'libcups2' 'i386' '0' 'Multi-Arch: same'
+insertpackage 'unstable' 'libcups2' 'i386' '2' 'Multi-Arch: same'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libcups2
+The following packages will be upgraded:
+ libcups2 libcups2:i386
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst libcups2 [1] (2 unstable [amd64]) [libcups2:amd64 on libcups2:i386] [libcups2:i386 on libcups2:amd64] [libcups2:i386 ]
+Inst libcups2:i386 [1] (2 unstable [i386])
+Conf libcups2 (2 unstable [amd64])
+Conf libcups2:i386 (2 unstable [i386])' aptget install -s libcups2:i386
diff --git a/test/integration/test-cachecontainer-architecture-specification b/test/integration/test-cachecontainer-architecture-specification
new file mode 100755
index 0000000..6557468
--- /dev/null
+++ b/test/integration/test-cachecontainer-architecture-specification
@@ -0,0 +1,123 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'armel'
+
+#insertinstalledpackage 'xserver-xorg-core' 'amd64' '2:1.7.6-2ubuntu7.10'
+insertpackage 'unstable' 'libsame' 'armel,amd64' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'foo' 'all' '1'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Conf libsame (1 unstable [amd64])' aptget -s install libsame
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame:armel
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame:armel (1 unstable [armel])
+Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:armel
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Unable to locate package libsame:armhf' aptget -s install libsame:armhf
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Conf libsame (1 unstable [amd64])' aptget -s install libsame:amd64
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame libsame:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Inst libsame:armel (1 unstable [armel])
+Conf libsame (1 unstable [amd64])
+Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:armel libsame:amd64
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame libsame:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Inst libsame:armel (1 unstable [armel])
+Conf libsame (1 unstable [amd64])
+Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:*
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Conf libsame (1 unstable [amd64])' aptget -s install libsame:any
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame libsame:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Inst libsame:armel (1 unstable [armel])
+Conf libsame (1 unstable [amd64])
+Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:a*
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Conf libsame (1 unstable [amd64])' aptget -s install libsame:linux-any
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libsame libsame:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame (1 unstable [amd64])
+Inst libsame:armel (1 unstable [armel])
+Conf libsame (1 unstable [amd64])
+Conf libsame:armel (1 unstable [armel])' aptget -s install libsame:linux-*
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Unable to locate package libsame:windows-any' aptget -s install libsame:windows-any
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Unable to locate package foo:armel' aptget -s install foo:armel
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Conf foo (1 unstable [all])' aptget -s install foo
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Conf foo (1 unstable [all])' aptget -s install foo:all
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Conf foo (1 unstable [all])' aptget -s install foo:amd64
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Conf foo (1 unstable [all])' aptget -s install foo:native
diff --git a/test/integration/test-compressed-indexes b/test/integration/test-compressed-indexes
new file mode 100755
index 0000000..858bf11
--- /dev/null
+++ b/test/integration/test-compressed-indexes
@@ -0,0 +1,180 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configcompression 'ALL'
+configarchitecture 'i386'
+LOWCOSTEXT='lz4'
+
+buildsimplenativepackage 'testpkg' 'i386' '1.0'
+
+buildaptarchive
+setupdistsaptarchive
+# fake a pdiff setup as apt wouldn't try pdiffs otherwise
+find aptarchive -name 'Packages' -o -name 'Sources' | while read file; do
+ mkdir "${file}.diff"
+ PATCHINDEX="${file}.diff/Index"
+ echo 'SHA1-Current: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc 0
+SHA1-History:
+ adc83b19e793491b1c6ea0fd8b46cd9f32e592fc 33053002 2010-08-18-2013.28
+ ecfd1b19e793491b1c6ea123eabdcd9f32e592fc 33053001 2010-08-18-2013.29
+SHA1-Patches:
+ abc1fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-0814.28
+ dfe3444ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-0814.29' > $PATCHINDEX
+done
+generatereleasefiles
+signreleasefiles
+
+testrun() {
+ local F
+ msgtest 'Check if all index files are' "${1:-uncompressed}"
+ if [ "$1" = 'compressed' ]; then
+ ! test -e rootdir/var/lib/apt/lists/*i386_Packages || F=1
+ ! test -e rootdir/var/lib/apt/lists/*_Sources || F=1
+ ! test -e rootdir/var/lib/apt/lists/*_Translation-en || F=1
+ test -e rootdir/var/lib/apt/lists/*i386_Packages.$LOWCOSTEXT || F=1
+ test -e rootdir/var/lib/apt/lists/*_Sources.$LOWCOSTEXT || F=1
+ test -e rootdir/var/lib/apt/lists/*_Translation-en.$LOWCOSTEXT || F=1
+ # there is no point in trying pdiff if we have compressed indexes
+ # as we can't patch compressed files (well, we can, but what is the point?)
+ ! test -e rootdir/var/lib/apt/lists/*diff_Index || F=1
+ else
+ # clear the faked pdiff indexes so the glob below works
+ rm -f rootdir/var/lib/apt/lists/*diff_Index
+ test -e rootdir/var/lib/apt/lists/*i386_Packages || F=1
+ test -e rootdir/var/lib/apt/lists/*_Sources || F=1
+ test -e rootdir/var/lib/apt/lists/*_Translation-en || F=1
+ ! test -e rootdir/var/lib/apt/lists/*i386_Packages.* || F=1
+ ! test -e rootdir/var/lib/apt/lists/*_Sources.* || F=1
+ ! test -e rootdir/var/lib/apt/lists/*_Translation-en.* || F=1
+ fi
+ if [ -n "$F" ]; then
+ cat rootdir/tmp/testsuccess.output
+ ls -laR rootdir/var/lib/apt/lists/
+ msgfail
+ else
+ msgpass
+ fi
+ msgtest 'Check if package is downloadable'
+ cd downloaded
+ testsuccess --nomsg aptget download testpkg
+ msgtest 'deb file is present'; testsuccess --nomsg test -f testpkg_1.0_i386.deb
+ rm -f testpkg_1.0_i386.deb
+ cd - >/dev/null
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ testpkg
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst testpkg (1.0 unstable [i386])
+Conf testpkg (1.0 unstable [i386])' aptget install testpkg -s -o Debug::pkgAcquire::Auth=0 -o Debug::pkgAcquire::Worker=0
+ rm -f rootdir/var/cache/apt/pkgcache.bin rootdir/var/cache/apt/srcpkgcache.bin
+ testsuccessequal "$GOODSHOW" aptcache show testpkg
+ testsuccessequal "$GOODSHOW" aptcache show testpkg
+ rm -f rootdir/var/cache/apt/pkgcache.bin rootdir/var/cache/apt/srcpkgcache.bin
+ testsuccessequal "$GOODPOLICY" aptcache policy testpkg
+ testsuccessequal "$GOODPOLICY" aptcache policy testpkg
+ rm -f rootdir/var/cache/apt/pkgcache.bin rootdir/var/cache/apt/srcpkgcache.bin
+ testsuccessequal "$GOODSHOWSRC" aptcache showsrc testpkg
+ testsuccessequal "$GOODSHOWSRC" aptcache showsrc testpkg
+ aptget clean
+ msgtest 'Check if the source is aptgetable'
+ cd downloaded
+ testsuccess --nomsg aptget source testpkg
+ testsuccess test -s testpkg_1.0.dsc
+ testsuccess test -d testpkg-1.0
+ rm -rf testpkg-1.0*
+ cd - >/dev/null
+ testsuccessequal "$(aptcache show testpkg -o Acquire::Languages=none)
+" aptcache dumpavail
+}
+
+echo 'Dir::Log::Planner "/dev/null";
+Debug::pkgAcquire::worker "true";
+debug::pkgAcquire::Auth "true";
+Debug::pkgAcquire::Diffs "true";
+Debug::Acquire::http "true";' > rootdir/etc/apt/apt.conf.d/99debugconf
+
+testovermethod() {
+ forcecompressor $2
+
+ for INDEX in 'false' 'true'; do
+ rm -rf rootdir/var/lib/apt/lists
+ echo "Acquire::GzipIndexes \"${INDEX}\";" > rootdir/etc/apt/apt.conf.d/02compressindex
+ local INDCOMP
+ if [ "$INDEX" = 'false' -o "$1" = 'cdrom' ]; then
+ INDCOMP='uncompressed'
+ else
+ INDCOMP='compressed'
+ echo 'APT::Compressor::lz4::Name "lz4";' >> rootdir/etc/apt/apt.conf.d/02compressindex
+ fi
+
+ msgmsg "${1}: ${COMPRESSOR}: Test with $INDCOMP indexes gzip=$INDEX"
+ if [ "${1}" = 'cdrom' ]; then
+ testsuccess aptcdrom add </dev/null
+ fi
+ testsuccess aptget update
+ testrun "$INDCOMP"
+
+ if [ "${1}" != 'cdrom' ]; then
+ testsuccess aptget update -o Acquire::Pdiffs=1
+ msgmsg "${1}: ${COMPRESSOR}: Test with $INDCOMP indexes gzip=$INDEX (update unchanged with pdiffs)"
+ testrun "$INDCOMP"
+
+ testsuccess aptget update -o Acquire::Pdiffs=0
+ msgmsg "${1}: ${COMPRESSOR}: Test with $INDCOMP indexes gzip=$INDEX (update unchanged without pdiffs)"
+ testrun "$INDCOMP"
+ fi
+
+ rm rootdir/etc/apt/apt.conf.d/02compressindex
+ done
+}
+
+testsuccess aptget update
+GOODSHOW="$(aptcache show testpkg)
+"
+test $(echo "$GOODSHOW" | grep -e '^Package: testpkg' -e '^Version: 1.0' -e '^Architecture: i386' | wc -l) -eq 3 || msgdie 'show is broken'
+testsuccessequal "$GOODSHOW" aptcache show testpkg
+GOODSHOWSRC="$(aptcache showsrc testpkg)
+"
+test $(echo "$GOODSHOWSRC" | grep -e '^Package: testpkg' -e '^Format: 3.0 (native)' -e '^Checksums-Sha256:' | wc -l) -eq 3 || msgdie 'showsrc is broken'
+testsuccessequal "$GOODSHOWSRC" aptcache showsrc testpkg
+GOODPOLICY="$(aptcache policy testpkg)"
+test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 file:/' | wc -l) -eq 4 || msgdie 'file policy is broken'
+testsuccessequal "$GOODPOLICY" aptcache policy testpkg
+forallsupportedcompressors testovermethod 'file'
+
+rewritesourceslist "copy://${TMPWORKINGDIRECTORY}/aptarchive"
+rm -rf rootdir/var/lib/apt/lists
+testsuccess aptget update
+GOODPOLICY="$(aptcache policy testpkg)"
+test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 copy:/' | wc -l) -eq 4 || msgdie 'copy policy is broken'
+testsuccessequal "$GOODPOLICY" aptcache policy testpkg
+forallsupportedcompressors testovermethod 'copy'
+
+changetowebserver
+rm -rf rootdir/var/lib/apt/lists
+testsuccess aptget update
+GOODPOLICY="$(aptcache policy testpkg)"
+test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 http://' | wc -l) -eq 4 || msgdie 'http policy is broken'
+testsuccessequal "$GOODPOLICY" aptcache policy testpkg
+forallsupportedcompressors testovermethod 'http'
+
+changetohttpswebserver
+rm -rf rootdir/var/lib/apt/lists
+testsuccess aptget update
+GOODPOLICY="$(aptcache policy testpkg)"
+test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 https://' | wc -l) -eq 4 || msgdie 'https policy is broken'
+testsuccessequal "$GOODPOLICY" aptcache policy testpkg
+forallsupportedcompressors testovermethod 'https'
+
+changetocdrom 'Debian APT Testdisk 0.8.15'
+rm -rf rootdir/var/lib/apt/lists
+testsuccess aptcdrom add </dev/null
+GOODPOLICY="$(aptcache policy testpkg)"
+test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 cdrom://' | wc -l) -eq 4 || msgdie 'cdrom policy is broken'
+testsuccessequal "$GOODPOLICY" aptcache policy testpkg
+forallsupportedcompressors testovermethod 'cdrom'
diff --git a/test/integration/test-conflicts-loop b/test/integration/test-conflicts-loop
new file mode 100755
index 0000000..5b6e446
--- /dev/null
+++ b/test/integration/test-conflicts-loop
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertinstalledpackage 'openjdk-6-jre' 'i386' '6b16-1.8-0ubuntu1'
+insertpackage 'unstable' 'openjdk-6-jre' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre-headless (<< 6b17~pre3-1), openjdk-6-jre-lib (<< 6b17~pre3-1)'
+insertinstalledpackage 'openjdk-6-jre-lib' 'i386' '6b16-1.8-0ubuntu1'
+insertpackage 'unstable' 'openjdk-6-jre-lib' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre (<< 6b17~pre3-1), openjdk-6-jre-headless (<< 6b17~pre3-1)'
+insertinstalledpackage 'openjdk-6-jre-headless' 'i386' '6b16-1.8-0ubuntu1'
+insertpackage 'unstable' 'openjdk-6-jre-headless' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre (<< 6b17~pre3-1), openjdk-6-jre-lib (<< 6b17~pre3-1)'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib
+3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Remv openjdk-6-jre-headless [6b16-1.8-0ubuntu1]
+Remv openjdk-6-jre-lib [6b16-1.8-0ubuntu1]
+Inst openjdk-6-jre [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386])
+Inst openjdk-6-jre-lib [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386])
+Conf openjdk-6-jre-lib (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386])
+Conf openjdk-6-jre (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386])
+Inst openjdk-6-jre-headless [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386])
+Conf openjdk-6-jre-headless (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386])' aptget dist-upgrade -s -o APT::Immediate-Configure-All=true
+
+testsuccess aptget dist-upgrade -s
diff --git a/test/integration/test-conflicts-real-multiarch-same b/test/integration/test-conflicts-real-multiarch-same
new file mode 100755
index 0000000..73f7b9a
--- /dev/null
+++ b/test/integration/test-conflicts-real-multiarch-same
@@ -0,0 +1,50 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable' 'virtual-provider' 'amd64,i386' '2' 'Provides: virtual
+Conflicts: virtual
+Multi-Arch: same'
+insertpackage 'unstable' 'real' 'amd64,i386' '2' 'Conflicts: real
+Multi-Arch: same'
+insertpackage 'unstable' 'real-provider' 'amd64,i386' '2' 'Provides: real-provider
+Conflicts: real-provider
+Multi-Arch: same'
+setupaptarchive
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'virtual-provider' instead of 'virtual'
+Note, selecting 'virtual-provider:i386' instead of 'virtual:i386'
+The following NEW packages will be installed:
+ virtual-provider virtual-provider:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst virtual-provider (2 unstable [amd64])
+Inst virtual-provider:i386 (2 unstable [i386])
+Conf virtual-provider (2 unstable [amd64])
+Conf virtual-provider:i386 (2 unstable [i386])" aptget install virtual:* -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ real real:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst real (2 unstable [amd64])
+Inst real:i386 (2 unstable [i386])
+Conf real (2 unstable [amd64])
+Conf real:i386 (2 unstable [i386])' aptget install real:* -s
+
+# ensure that we are not confused by the provides
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ real-provider real-provider:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst real-provider (2 unstable [amd64])
+Inst real-provider:i386 (2 unstable [i386])
+Conf real-provider (2 unstable [amd64])
+Conf real-provider:i386 (2 unstable [i386])' aptget install real-provider:* -s
diff --git a/test/integration/test-crossgrades b/test/integration/test-crossgrades
new file mode 100755
index 0000000..6398e7e
--- /dev/null
+++ b/test/integration/test-crossgrades
@@ -0,0 +1,82 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386' 'amd64' 'armel'
+configdpkgnoopchroot
+
+buildsimplenativepackage 'unrelated' 'amd64' '1' 'stable'
+buildsimplenativepackage 'crosser' 'i386,armel' '1' 'stable' 'Multi-Arch: same'
+buildsimplenativepackage 'crosser' 'amd64' '2' 'unstable'
+buildsimplenativepackage 'crosser' 'i386,armel' '3' 'experimental' 'Multi-Arch: same'
+setupaptarchive
+
+singleinstance() {
+ testsuccess apt install crosser:i386=1 unrelated:amd64 -y --planner $1
+ testdpkginstalled 'crosser:i386' 'unrelated'
+
+ testsuccess apt install crosser:amd64 -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 --purge --planner $1
+ cp -a rootdir/tmp/testsuccess.output crosser.output
+ testfailure grep -- '--remove.*crosser.*' crosser.output
+ testfailure grep -- '--purge' crosser.output
+ testsuccess apt install crosser:amd64 unrelated:amd64- -y -o Dpkg::Use-Pty=0 --purge -o Debug::pkgDPkgProgressReporting=1 --planner $1
+ testdpkgnotinstalled 'crosser:i386' 'unrelated'
+ testdpkginstalled 'crosser:amd64'
+
+ testsuccess apt install crosser:armel=3 -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 --purge --planner $1
+ cp -a rootdir/tmp/testsuccess.output crosser.output
+ testsuccess grep -- '--remove.*crosser.*' crosser.output
+ testsuccess grep -- '--purge' crosser.output
+ testsuccess apt install crosser:armel=3 -y -o Debug::pkgDPkgProgressReporting=1 -o Dpkg::Use-Pty=0 --purge --planner $1
+ testdpkgnotinstalled 'crosser:i386' 'crosser:amd64' 'unrelated'
+ testdpkginstalled 'crosser:armel'
+
+ testsuccess apt install crosser=1 -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 --purge --planner $1 --allow-downgrades
+ cp -a rootdir/tmp/testsuccess.output crosser.output
+ testsuccess grep -- '--remove.*crosser.*' crosser.output
+ testsuccess grep -- '--purge' crosser.output
+ testsuccess apt install crosser=1 -y -o Debug::pkgDPkgProgressReporting=1 -o Dpkg::Use-Pty=0 --purge --planner $1 --allow-downgrades
+ testdpkgnotinstalled 'crosser:armel' 'crosser:amd64' 'unrelated'
+ testdpkginstalled 'crosser:i386'
+
+ testsuccess apt purge crosser:i386 -y --planner $1
+ testdpkgnotinstalled 'crosser:i386'
+}
+singleinstance 'internal'
+singleinstance 'apt'
+
+multiinstance() {
+ testsuccess apt install crosser:i386=1 crosser:armel=1 unrelated:amd64 -y --planner $1
+ testdpkginstalled 'crosser:i386' 'crosser:armel' 'unrelated'
+
+ testsuccess apt install crosser:amd64 -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 --purge --planner $1
+ cp -a rootdir/tmp/testsuccess.output crosser.output
+ testsuccess grep -- '--remove.*crosser.*' crosser.output
+ testsuccess grep -- '--purge' crosser.output
+ testsuccess apt install crosser:amd64 unrelated:amd64- -y -o Dpkg::Use-Pty=0 --purge -o Debug::pkgDPkgProgressReporting=1 --planner $1
+ testdpkgnotinstalled 'crosser:i386' 'crosser:armel' 'unrelated'
+ testdpkginstalled 'crosser:amd64'
+
+ testsuccess apt install crosser:i386 crosser:armel -t experimental -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 --purge --planner $1
+ cp -a rootdir/tmp/testsuccess.output crosser.output
+ testsuccess grep -- '--remove.*crosser.*' crosser.output
+ testsuccess grep -- '--purge' crosser.output
+ testsuccess apt install crosser:i386 crosser:armel -t experimental -y -o Debug::pkgDPkgProgressReporting=1 -o Dpkg::Use-Pty=0 --purge --planner $1
+ testdpkgnotinstalled 'crosser:amd64' 'unrelated'
+ testdpkginstalled 'crosser:i386' 'crosser:armel'
+
+ testsuccess apt install crosser:i386- crosser:armel=1 -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 --purge --planner $1 --allow-downgrades
+ cp -a rootdir/tmp/testsuccess.output crosser.output
+ testsuccess grep -- '--remove.*crosser.*' crosser.output
+ testsuccess grep -- '--purge' crosser.output
+ testsuccess apt install crosser:i386- crosser:armel=1 -y -o Debug::pkgDPkgProgressReporting=1 -o Dpkg::Use-Pty=0 --purge --planner $1 --allow-downgrades
+ testdpkgnotinstalled 'crosser:amd64' 'crosser:i386' 'unrelated'
+ testdpkginstalled 'crosser:armel'
+
+ testsuccess apt purge crosser:armel -y --planner $1 -o Debug::pkgDPkgProgressReporting=1
+ testdpkgnotinstalled 'crosser:i386' 'crosser:armel' 'crosser:amd64' 'unrelated'
+}
+multiinstance 'internal'
diff --git a/test/integration/test-cve-2013-1051-InRelease-parsing b/test/integration/test-cve-2013-1051-InRelease-parsing
new file mode 100755
index 0000000..1f0cbda
--- /dev/null
+++ b/test/integration/test-cve-2013-1051-InRelease-parsing
@@ -0,0 +1,71 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'stable' 'good-pkg' 'all' '1.0'
+
+setupaptarchive
+
+changetowebserver
+ARCHIVE="http://localhost:${APTHTTPPORT}"
+msgtest 'Initial apt-get update should work with' 'InRelease'
+testsuccess --nomsg aptget update
+
+# check that the setup is correct
+testsuccessequal "good-pkg:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 ${ARCHIVE} stable/main all Packages" aptcache policy good-pkg
+
+# now exchange to the Packages file, note that this could be
+# done via MITM too
+insertpackage 'stable' 'bad-mitm' 'all' '1.0'
+
+# this builds compressed files and a new (unsigned) Release
+buildaptarchivefromfiles '+1hour'
+
+# add a space into the BEGIN PGP SIGNATURE PART/END PGP SIGNATURE part
+# to trick apt - this is still legal to gpg(v)
+sed -i '/^-----BEGIN PGP SIGNATURE-----/,/^-----END PGP SIGNATURE-----/ s/^$/ /g' aptarchive/dists/stable/InRelease
+
+# we append the (evil unsigned) Release file to the (good signed) InRelease
+cat aptarchive/dists/stable/Release >> aptarchive/dists/stable/InRelease
+touch -d '+1hour' aptarchive/dists/stable/InRelease
+
+# ensure the update doesn't load bad data as good data
+# Note that we will pick up the InRelease itself as we download no other
+# indexes which would trigger a hashsum mismatch, but we ignore the 'bad'
+# part of the InRelease
+listcurrentlistsdirectory | sed '/_InRelease/ d' > listsdir.lst
+msgtest 'apt-get update should ignore unsigned data in the' 'InRelease'
+testwarningequal "Get:1 http://localhost:${APTHTTPPORT} stable InRelease [$(stat -c%s aptarchive/dists/stable/InRelease) B]
+Err:1 http://localhost:${APTHTTPPORT} stable InRelease
+ Splitting up ${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial/localhost:${APTHTTPPORT}_dists_stable_InRelease into data and signature failed
+Reading package lists...
+W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://localhost:${APTHTTPPORT} stable InRelease: Splitting up ${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial/localhost:${APTHTTPPORT}_dists_stable_InRelease into data and signature failed
+W: Failed to fetch http://localhost:${APTHTTPPORT}/dists/stable/InRelease Splitting up ${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial/localhost:${APTHTTPPORT}_dists_stable_InRelease into data and signature failed
+W: Some index files failed to download. They have been ignored, or old ones used instead." --nomsg aptget update
+testfileequal './listsdir.lst' "$(listcurrentlistsdirectory | sed '/_InRelease/ d')"
+
+# ensure there is no package
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Unable to locate package bad-mitm' aptget install bad-mitm -s
+
+# and verify that its not picked up
+testsuccessequal 'N: Unable to locate package bad-mitm' aptcache policy bad-mitm
+
+# and that the right one is used
+testsuccessequal "good-pkg:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 ${ARCHIVE} stable/main all Packages" aptcache policy good-pkg
diff --git a/test/integration/test-cve-2018-0501-mirror-alternatives b/test/integration/test-cve-2018-0501-mirror-alternatives
new file mode 100755
index 0000000..f154547
--- /dev/null
+++ b/test/integration/test-cve-2018-0501-mirror-alternatives
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage 'foo' 'all' '1' 'stable'
+setupaptarchive --no-update
+changetohttpswebserver
+
+# User has mirror method configured in apt >= 1.6~alpha6 &
+# Eve has enough MITM control over the network to
+# a) have the mirror file include at least two mirrors and
+# b) can send her bad InRelease files for both mirrors
+sed -i -e 's# https:# mirror+https:#' -e 's#/ stable#/mirror.txt stable#' rootdir/etc/apt/sources.list.d/*-stable-*
+echo "http://localhost:${APTHTTPPORT}
+https://localhost:${APTHTTPSPORT}" > aptarchive/mirror.txt
+
+# real Eve would do something worse…
+sed -i "/^Date: / a\
+Evil: yes" $(find ./aptarchive -name 'Release' -o -name 'InRelease')
+
+# progress display shows that the InRelease file was bad,
+# but it is used anyhow as the bad file causes a fallback to
+# a request to the second mirror which completes successful
+# causing apt to believe the verify completed successfully…
+testfailure apt update
+testfailure grep '^Evil:' rootdir/var/lib/apt/lists/*Release
+testfailure apt show foo
diff --git a/test/integration/test-cve-2019-3462-Release.gpg-payload b/test/integration/test-cve-2019-3462-Release.gpg-payload
new file mode 100755
index 0000000..fd0f967
--- /dev/null
+++ b/test/integration/test-cve-2019-3462-Release.gpg-payload
@@ -0,0 +1,43 @@
+#!/bin/sh
+set -e
+
+# This is not covered by the CVE and harmless by itself, but used in
+# the exploit and while harmless it is also pointless to allow it
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+export APT_DONT_SIGN='InRelease'
+
+insertpackage 'unstable' 'foo' 'all' '1'
+setupaptarchive
+rm -rf rootdir/var/lib/apt/lists
+
+verify() {
+ testfailure apt update
+ testsuccess grep '^ Detached signature file' rootdir/tmp/testfailure.output
+ testfailure apt show foo
+}
+
+msgmsg 'Payload after detached signature'
+find aptarchive -name 'Release.gpg' | while read FILE; do
+ cp -a "$FILE" "${FILE}.bak"
+ echo "evil payload" >> "$FILE"
+done
+verify
+
+msgmsg 'Payload in-between detached signatures'
+find aptarchive -name 'Release.gpg' | while read FILE; do
+ cat "${FILE}.bak" >> "$FILE"
+done
+verify
+
+msgmsg 'Payload before detached signature'
+find aptarchive -name 'Release.gpg' | while read FILE; do
+ echo "evil payload" > "$FILE"
+ cat "${FILE}.bak" >> "$FILE"
+done
+verify
diff --git a/test/integration/test-cve-2019-3462-dequote-injection b/test/integration/test-cve-2019-3462-dequote-injection
new file mode 100755
index 0000000..a1adec6
--- /dev/null
+++ b/test/integration/test-cve-2019-3462-dequote-injection
@@ -0,0 +1,66 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+# build two uncompressed packages
+buildsimplenativepackage 'alpha' 'all' '1' 'unstable' '' '' 'section' 'optional' '' 'none'
+
+setupaptarchive --no-update
+ORIGINAL_SHA256=$(sha256sum aptarchive/pool/alpha_1_all.deb | awk '{print $1}')
+ORIGINAL_SIZE=$(wc -c aptarchive/pool/alpha_1_all.deb | awk '{print $1}')
+SHA256="DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF"
+changetowebserver
+
+webserverconfig aptwebserver::redirect::replace::alpha_1_all.deb "beeta_1_all.deb%250a%250a201%2520URI%2520Done%250aURI:%2520http://localhost:${APTHTTPPORT}/pool/beeta_1_all.deb%250aFilename:%2520${TMPWORKINGDIRECTORY}/rootdir/var/cache/apt/archives/partial/alpha_1_all.deb%250aSize:%252020672%250aLast-Modified:%2520Fri,%252018%2520Jan%25202019%252009:52:02%2520+0000%250aSHA256-Hash:%2520${SHA256}%250aChecksum-FileSize-Hash:%252012345%250a%250a%0a"
+
+
+testsuccess apt update -o debug::http=1 -o debug::pkgacquire::worker=1
+
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ alpha
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Need to get 20.7 kB of archives.
+After this operation, 11.3 kB of additional disk space will be used.
+Err:1 http://localhost:${APTHTTPPORT} unstable/main all alpha all 1
+ SECURITY: URL redirect target contains control characters, rejecting.
+E: Failed to fetch http://localhost:${APTHTTPPORT}/pool/alpha_1_all.deb SECURITY: URL redirect target contains control characters, rejecting.
+E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?" aptget install alpha
+
+
+
+# For reference, the following is the original reproducer/bug. It has
+# been disabled using exit 0, as it will fail in fixed versions.
+exit 0
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ alpha
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Need to get 20.7 kB of archives.
+After this operation, 11.3 kB of additional disk space will be used.
+Err:1 http://localhost:${APTHTTPPORT} unstable/main all alpha all 1
+ Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:$ORIGINAL_SHA256
+ - Filesize:$ORIGINAL_SIZE [weak]
+ Hashes of received file:
+ - SHA256:DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF
+ - Filesize:12345 [weak]
+ Last modification reported: Fri, 18 Jan 2019 09:52:02 +0000
+E: Failed to fetch http://localhost:${APTHTTPPORT}/pool/beeta_1_all.deb Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:$ORIGINAL_SHA256
+ - Filesize:$ORIGINAL_SIZE [weak]
+ Hashes of received file:
+ - SHA256:DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF
+ - Filesize:12345 [weak]
+ Last modification reported: Fri, 18 Jan 2019 09:52:02 +0000
+E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?" aptget install alpha
diff --git a/test/integration/test-cve-2020-27350 b/test/integration/test-cve-2020-27350
new file mode 100755
index 0000000..a32bf95
--- /dev/null
+++ b/test/integration/test-cve-2020-27350
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "amd64"
+
+${APTTESTHELPERSBINDIR}/createdeb-cve-2020-27350 crash crash.deb
+testequal "E: Invalid archive member header" runapt ${APTTESTHELPERSBINDIR}/testdeb ./crash.deb
+
+${APTTESTHELPERSBINDIR}/createdeb-cve-2020-27350 loop loop.deb
+testequal "E: Invalid archive member header" runapt ${APTTESTHELPERSBINDIR}/testdeb ./loop.deb
+
+${APTTESTHELPERSBINDIR}/createdeb-cve-2020-27350 long-name long-name.deb
+testequal "E: Long name to large: 67108865 bytes > 1048576 bytes" runapt ${APTTESTHELPERSBINDIR}/extract-control long-name.deb control
+
+${APTTESTHELPERSBINDIR}/createdeb-cve-2020-27350 long-link long-link.deb
+testequal "E: Long name to large: 67108865 bytes > 1048576 bytes" runapt ${APTTESTHELPERSBINDIR}/extract-control long-link.deb control
+
+${APTTESTHELPERSBINDIR}/createdeb-cve-2020-27350 long-control long-control.deb
+testequal "E: Control file too large: 67108865 > 67108864 bytes" runapt ${APTTESTHELPERSBINDIR}/extract-control long-control.deb control
+
+${APTTESTHELPERSBINDIR}/createdeb-cve-2020-27350 too-long-control too-long-control.deb
+testequal "E: Tar member too large: $((128 * 1024 * 1024 * 1024 + 1)) > $((128 * 1024 * 1024 * 1024)) bytes" runapt ${APTTESTHELPERSBINDIR}/extract-control too-long-control.deb control
diff --git a/test/integration/test-different-methods-for-same-source b/test/integration/test-different-methods-for-same-source
new file mode 100755
index 0000000..791a84c
--- /dev/null
+++ b/test/integration/test-different-methods-for-same-source
@@ -0,0 +1,35 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'stable' 'foo' 'all' '1'
+insertsource 'stable' 'foo' 'all' '1'
+setupaptarchive --no-update
+
+changetowebserver
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://localhost:${APTHTTPPORT}/"
+
+echo 'Dir::Bin::Methods::http-ng "http";' > rootdir/etc/apt/apt.conf.d/99add-http-ng-method
+sed -i -e 's# http:# http-ng:#' $(find rootdir/etc/apt/sources.list.d -name '*-deb-src.list')
+
+testsuccess apt update -o Debug::Acquire::http-ng=1
+cp rootdir/tmp/testsuccess.output update.log
+# all requests are folded into the first Release file
+testsuccess grep ' http-ng://' update.log
+testfailure grep ' http://' update.log
+# see if method-specific debug was enabled
+testsuccess grep '^Answer for: http-ng:' update.log
+
+rm -rf rootdir/var/lib/apt/lists
+sed -i -e "s#:${APTHTTPPORT}/#:${APTHTTPPORT}/redirectme#" rootdir/etc/apt/sources.list.d/*
+testsuccess apt update -o Debug::Acquire::http-ng=1
+cp rootdir/tmp/testsuccess.output update.log
+# all requests are folded into the first Release file
+testsuccess grep ' http-ng://' update.log
+testfailure grep '^[^L].* http://' update.log
+# see if method-specific debug was enabled
+testsuccess grep '^Answer for: http-ng:' update.log
diff --git a/test/integration/test-disappearing-packages b/test/integration/test-disappearing-packages
new file mode 100755
index 0000000..f3fed04
--- /dev/null
+++ b/test/integration/test-disappearing-packages
@@ -0,0 +1,92 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'old-pkg' 'amd64' '1' 'stable'
+
+setupsimplenativepackage 'new-pkg' 'amd64' '2' 'unstable' 'Provides: old-pkg
+Replaces: old-pkg
+Conflicts: old-pkg (<< 2)'
+BUILDDIR='incoming/new-pkg-2'
+echo '/usr/share/doc/new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/new-pkg.links"
+buildpackage "$BUILDDIR" 'unstable' 'main'
+rm -rf "$BUILDDIR"
+
+setupsimplenativepackage 'old-pkg' 'all' '2' 'unstable' 'Depends: new-pkg'
+BUILDDIR='incoming/old-pkg-2'
+echo '/usr/share/doc/new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/old-pkg.links"
+echo "
+override_dh_link:
+ rm -rf debian/old-pkg/usr/share/doc/old-pkg/
+ dh_link" >> "${BUILDDIR}/debian/rules"
+buildpackage "$BUILDDIR" 'unstable' 'main'
+rm -rf "$BUILDDIR"
+
+setupsimplenativepackage 'super-new-pkg' 'i386' '3' 'experimental' 'Provides: new-pkg
+Replaces: new-pkg
+Conflicts: new-pkg (<< 3)'
+BUILDDIR='incoming/super-new-pkg-3'
+echo '/usr/share/doc/super-new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/super-new-pkg.links"
+echo '/usr/share/doc/super-new-pkg /usr/share/doc/new-pkg' >> "${BUILDDIR}/debian/super-new-pkg.links"
+buildpackage "$BUILDDIR" 'experimental' 'main'
+rm -rf "$BUILDDIR"
+
+setupsimplenativepackage 'new-pkg' 'all' '3' 'experimental' 'Depends: super-new-pkg'
+BUILDDIR='incoming/new-pkg-3'
+echo '/usr/share/doc/super-new-pkg /usr/share/doc/old-pkg' > "${BUILDDIR}/debian/new-pkg.links"
+echo '/usr/share/doc/super-new-pkg /usr/share/doc/new-pkg' >> "${BUILDDIR}/debian/new-pkg.links"
+echo "
+override_dh_link:
+ rm -rf debian/new-pkg/usr/share/doc/new-pkg/
+ dh_link" >> "${BUILDDIR}/debian/rules"
+buildpackage "$BUILDDIR" 'experimental' 'main'
+rm -rf "$BUILDDIR"
+
+setupaptarchive
+
+msgmsg 'Let a package disappear' 'old-pkg'
+testsuccess aptget install old-pkg=1 --trivial-only
+testmarkedauto # old-pkg is manual installed
+testsuccess aptget dist-upgrade -y
+testdpkgnotinstalled old-pkg
+cp rootdir/tmp/testsuccess.output disappear.output
+testsuccessequal 'The following package disappeared from your system as
+all files have been overwritten by other packages:
+ old-pkg
+Note: This is done automatically and on purpose by dpkg.' tail -n 4 disappear.output
+
+sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -e "s#:$(getarchitecture 'native') #:native #"
+if [ -n "$SUDO_USER" ] && [ "$(id -u "$SUDO_USER")" -gt 0 ]; then
+ testfileequal 'rootdir/var/log/apt/history.log' "
+Requested-By: $SUDO_USER ($(id -u "$SUDO_USER"))
+Install: old-pkg:native (1)
+
+Requested-By: $SUDO_USER ($(id -u "$SUDO_USER"))
+Install: new-pkg:native (2, automatic)
+Upgrade: old-pkg:native (1, 2)
+Disappeared: old-pkg (1)"
+else
+ testfileequal 'rootdir/var/log/apt/history.log' '
+Install: old-pkg:native (1)
+
+Install: new-pkg:native (2, automatic)
+Upgrade: old-pkg:native (1, 2)
+Disappeared: old-pkg (1)'
+fi
+
+testmarkedauto # new-pkg should have get the manual flag from old-pkg
+
+msgmsg 'Let a package disappear which let the previous disappear' 'new-pkg'
+testsuccess aptget dist-upgrade -y -t experimental
+testdpkgnotinstalled new-pkg
+cp rootdir/tmp/testsuccess.output disappear.output
+testsuccessequal 'The following package disappeared from your system as
+all files have been overwritten by other packages:
+ new-pkg
+Note: This is done automatically and on purpose by dpkg.' tail -n 4 disappear.output
+
+testmarkedauto
diff --git a/test/integration/test-dpkg-assert-multi-arch b/test/integration/test-dpkg-assert-multi-arch
new file mode 100755
index 0000000..a99f320
--- /dev/null
+++ b/test/integration/test-dpkg-assert-multi-arch
@@ -0,0 +1,104 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'native-pkg' 'amd64' '1.0' 'stable'
+buildsimplenativepackage 'foreign-pkg' 'i386' '0.5' 'stable' 'Multi-Arch: foreign'
+buildsimplenativepackage 'same-lib' 'amd64,i386' '0.5' 'stable' 'Multi-Arch: same'
+buildsimplenativepackage 'all-pkg' 'all' '2.0' 'stable'
+buildsimplenativepackage 'all-foreign-pkg' 'all' '2.0' 'stable' 'Multi-Arch: foreign'
+
+setupaptarchive
+
+testqualifier() {
+ msgtest 'Test with' $1 'for correct qualifier mode' $2
+ #aptget install $1 -qq -o Debug::pkgDPkgPM=1 || true
+ aptget install $1 -qq -o Debug::pkgDPkgPM=1 -o Dpkg::ExplicitLastConfigure=1 -o PackageManager::Configure=all > testqualifier.output 2>&1 || true
+ GIVEN="$(grep -v -- '--unpack' testqualifier.output | sed -ne 's/^.*--[rpc][^ ]* \([^ ]*\).*$/\1/p')"
+ if [ "$GIVEN" = "$2" ]; then
+ msgpass
+ else
+ cat >&2 testqualifier.output
+ echo >&2
+ echo >&2 "$GIVEN"
+ msgfail
+ fi
+}
+
+msgmsg 'non-multiarch or "ubuntus" old multiarchified dpkg'
+echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper
+cat > ./dpkg-wrapper <<EOF
+#! /bin/sh
+if echo "\$*" | grep -q -- "--assert-multi-arch"; then
+ echo >&2 'dpkg: Fehler: unbekannte Option --assert-multi-arch'
+ echo >&1 'dpkg: Info: unbekannte Option --assert-multi-arch'
+ exit 2
+fi
+exec "\$@"
+EOF
+chmod +x ./dpkg-wrapper
+
+testqualifier 'native-pkg' 'native-pkg'
+testqualifier 'native-pkg:amd64' 'native-pkg'
+testqualifier 'foreign-pkg' 'foreign-pkg:i386'
+testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386'
+testqualifier 'same-lib' 'same-lib'
+testqualifier 'same-lib:amd64' 'same-lib'
+testqualifier 'same-lib:i386' 'same-lib:i386'
+testqualifier 'all-pkg' 'all-pkg'
+testqualifier 'all-pkg:amd64' 'all-pkg'
+testqualifier 'all-foreign-pkg' 'all-foreign-pkg'
+testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg'
+insertinstalledpackage 'all-pkg' 'amd64' '1.0'
+insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' 'Multi-Arch: foreign'
+testqualifier 'all-pkg' 'all-pkg'
+testqualifier 'all-pkg:amd64' 'all-pkg'
+testqualifier 'all-foreign-pkg' 'all-foreign-pkg'
+testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg'
+insertinstalledpackage 'always-all-pkg' 'all' '1.0'
+insertinstalledpackage 'always-all-foreign-pkg' 'all' '1.0' 'Multi-Arch: foreign'
+testqualifier 'all-pkg-' 'all-pkg'
+testqualifier 'all-foreign-pkg-' 'all-foreign-pkg'
+testqualifier 'always-all-pkg-' 'always-all-pkg'
+testqualifier 'always-all-foreign-pkg-' 'always-all-foreign-pkg'
+
+msgmsg 'multiarch dpkg (new interface version)'
+rm rootdir/var/lib/dpkg/status
+touch rootdir/var/lib/dpkg/status
+echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper
+cat > ./dpkg-wrapper <<EOF
+#! /bin/sh
+if echo "\$*" | grep -q -- "--assert-multi-arch"; then
+ exit 0
+fi
+exec "\$@"
+EOF
+chmod +x ./dpkg-wrapper
+
+testqualifier 'native-pkg' 'native-pkg:amd64'
+testqualifier 'native-pkg:amd64' 'native-pkg:amd64'
+testqualifier 'foreign-pkg' 'foreign-pkg:i386'
+testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386'
+testqualifier 'same-lib' 'same-lib:amd64'
+testqualifier 'same-lib:amd64' 'same-lib:amd64'
+testqualifier 'same-lib:i386' 'same-lib:i386'
+testqualifier 'all-pkg' 'all-pkg:all'
+testqualifier 'all-pkg:amd64' 'all-pkg:all'
+testqualifier 'all-foreign-pkg' 'all-foreign-pkg:all'
+testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg:all'
+insertinstalledpackage 'all-pkg' 'amd64' '1.0'
+insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' 'Multi-Arch: foreign'
+testqualifier 'all-pkg' 'all-pkg:all'
+testqualifier 'all-pkg:amd64' 'all-pkg:all'
+testqualifier 'all-foreign-pkg' 'all-foreign-pkg:all'
+testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg:all'
+insertinstalledpackage 'always-all-pkg' 'all' '1.0'
+insertinstalledpackage 'always-all-foreign-pkg' 'all' '1.0' 'Multi-Arch: foreign'
+testqualifier 'all-pkg-' 'all-pkg:amd64'
+testqualifier 'all-foreign-pkg-' 'all-foreign-pkg:amd64'
+testqualifier 'always-all-pkg-' 'always-all-pkg:all'
+testqualifier 'always-all-foreign-pkg-' 'always-all-foreign-pkg:all'
diff --git a/test/integration/test-dpkg-normalization b/test/integration/test-dpkg-normalization
new file mode 100755
index 0000000..cfcb90d
--- /dev/null
+++ b/test/integration/test-dpkg-normalization
@@ -0,0 +1,44 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'spaces' 'i386' '1.0' 'Depends: spaces (= 1.0)'
+insertpackage 'unstable' 'spaces' 'i386' '1.0' 'Depends: spaces (= 1.0)'
+insertpackage 'unstable' 'lessequal' 'i386' '1.0' 'Depends: spaces (>= 1.0)'
+insertpackage 'unstable' 'lessequal' 'i386' '1.0' 'Depends: spaces (> 1.0)'
+insertpackage 'unstable' 'zero-epoch' 'i386' '1.0' 'Depends: spaces (< 0:1.0.0)'
+insertpackage 'unstable' 'zero-epoch' 'i386' '1.0' 'Depends: spaces (< 1.0.0)'
+insertpackage 'unstable' 'zero-epoch' 'i386' '0:1.0' 'Depends: spaces (< 0:1.0.0)'
+
+setupaptarchive
+
+testsuccessequal "spaces:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy spaces
+
+testsuccessequal "lessequal:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy lessequal
+
+
+
+testsuccessequal "zero-epoch:
+ Installed: (none)
+ Candidate: 1.0
+ Version table:
+ 1.0 500
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages
+ 500 file:$TMPWORKINGDIRECTORY/aptarchive unstable/main i386 Packages" aptcache policy zero-epoch
diff --git a/test/integration/test-dpkg-path b/test/integration/test-dpkg-path
new file mode 100755
index 0000000..b17b594
--- /dev/null
+++ b/test/integration/test-dpkg-path
@@ -0,0 +1,35 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+configdpkgnoopchroot
+
+# create a bunch of test pkgs
+createtestpkg() {
+ setupsimplenativepackage "testpkg-$1" 'native' '1.0' 'unstable'
+ BUILDDIR="incoming/testpkg-$1-1.0"
+ echo '#!/bin/sh
+echo PATH=$PATH' > "${BUILDDIR}/debian/preinst"
+ buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+ rm -rf "$BUILDDIR"
+}
+
+createtestpkg 'one'
+createtestpkg 'two'
+
+setupaptarchive
+
+
+# Inherit from environment
+testsuccess aptget install testpkg-one -y -o DPkg::Path=""
+cp rootdir/tmp/testsuccess.output apt.log
+testsuccess grep "PATH=$PATH" apt.log
+
+# Set a custom value
+testsuccess aptget install testpkg-two -y -o DPkg::Path="foobar:$PATH"
+cp rootdir/tmp/testsuccess.output apt.log
+testsuccess grep "PATH=foobar:$PATH" apt.log
diff --git a/test/integration/test-essential-force-loopbreak b/test/integration/test-essential-force-loopbreak
new file mode 100755
index 0000000..f585e9c
--- /dev/null
+++ b/test/integration/test-essential-force-loopbreak
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+insertinstalledpackage 'sysvinit' 'native' '1' 'Essential: yes'
+
+buildsimplenativepackage 'sysvinit' 'native' '2' 'sid' 'Pre-Depends: sysvinit-core | systemd-sysv
+Essential: yes'
+buildsimplenativepackage 'sysvinit-core' 'native' '2' 'sid'
+
+buildsimplenativepackage 'systemd-sysv' 'native' '2~conflict' 'sid-conflict' 'Conflicts: sysvinit (<< 2)
+Breaks: sysvinit-core'
+
+buildsimplenativepackage 'systemd-sysv' 'native' '2~break' 'sid-break' 'Breaks: sysvinit (<< 2), sysvinit-core'
+
+setupaptarchive
+
+cp -a rootdir/var/lib/dpkg/status dpkg.status.backup
+
+testforcebreak() {
+ cp -a dpkg.status.backup rootdir/var/lib/dpkg/status
+ rm -f rootdir/var/lib/apt/extended_states
+ testfailureequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ sysvinit
+The following NEW packages will be installed:
+ systemd-sysv
+The following packages will be upgraded:
+ sysvinit
+1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+E: This installation run will require temporarily removing the essential package sysvinit:$(getarchitecture 'native') due to a Conflicts/Pre-Depends loop. This is often bad, but if you really want to do it, activate the APT::Force-LoopBreak option.
+E: Internal Error, Could not early remove sysvinit:$(dpkg --print-architecture) (2)" aptget install systemd-sysv -t "$1" -s
+ # ensure that really nothing happens
+ testfailure aptget install systemd-sysv -y -t "$1"
+ testdpkginstalled 'sysvinit'
+ testdpkgnotinstalled 'systemd-sysv'
+
+ # with enough force however …
+ cp -a dpkg.status.backup rootdir/var/lib/dpkg/status
+ testsuccess aptget install systemd-sysv -y -t "$1" -o APT::Force-LoopBreak=1 -o Debug::pkgDpkgPm=1
+ cp rootdir/tmp/testsuccess.output apt.output
+ testsuccess grep -- '--force-remove-essential --remove sysvinit' apt.output
+ testsuccess aptget install systemd-sysv -y -t "$1" -o APT::Force-LoopBreak=1
+ testdpkginstalled 'sysvinit' 'systemd-sysv'
+}
+
+testforcebreak 'sid-conflict'
+testforcebreak 'sid-break'
diff --git a/test/integration/test-external-dependency-solver-protocol b/test/integration/test-external-dependency-solver-protocol
new file mode 100755
index 0000000..2c451d5
--- /dev/null
+++ b/test/integration/test-external-dependency-solver-protocol
@@ -0,0 +1,294 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'cool' 'all' '1'
+insertinstalledpackage 'stuff' 'all' '1'
+insertinstalledpackage 'somestuff' 'all' '1' 'Depends: cool, stuff'
+
+insertpackage 'unstable' 'cool' 'all' '2' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'stuff' 'all' '2' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'coolstuff' 'i386,amd64' '2' 'Depends: cool, stuff'
+insertpackage 'unstable' 'awesome' 'all' '2' 'Multi-Arch: foreign
+Conflicts: badstuff'
+insertpackage 'unstable' 'badstuff' 'all' '2' 'Multi-Arch: foreign
+Conflicts: awesome'
+insertpackage 'unstable' 'awesomecoolstuff' 'i386' '2' 'Depends: coolstuff, awesome'
+
+insertpackage 'experimental' 'cool' 'all' '3' 'Multi-Arch: foreign'
+insertpackage 'experimental' 'stuff' 'all' '3' 'Multi-Arch: foreign'
+insertpackage 'experimental' 'coolstuff' 'i386,amd64' '3' 'Depends: cool, stuff'
+
+setupaptarchive
+
+testsuccess aptget install --solver apt coolstuff -s
+testempty find . -name 'edsp.last.*'
+echo 'Dir::Log::Solver "edsp.last.xz";' > rootdir/etc/apt/apt.conf.d/log-edsp.conf
+
+testfailure aptget install --solver dump coolstuff -s
+testsuccess grep 'ERR_NO_FILENAME' rootdir/tmp/testfailure.output
+testfailure test -s rootdir/var/log/apt/edsp.last.xz
+export APT_EDSP_DUMP_FILENAME="/nonexistent/apt/edsp.dump"
+testfailure aptget install --solver dump coolstuff -s
+testsuccess grep 'ERR_CREATE_FILE' rootdir/tmp/testfailure.output
+testfailure test -s rootdir/var/log/apt/edsp.last.xz
+export APT_EDSP_DUMP_FILENAME="${TMPWORKINGDIRECTORY}/downloaded/dump.edsp"
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Execute external solver...
+The solver encountered an error of type: ERR_JUST_DUMPING
+The following information might help you to understand what is wrong:
+I am too dumb, i can just dump!
+Please use one of my friends instead!
+
+E: External solver failed with: I am too dumb, i can just dump!' aptget install --solver dump coolstuff -s
+testfailure test -s rootdir/var/log/apt/edsp.last.xz
+testsuccess test -s "$APT_EDSP_DUMP_FILENAME"
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following NEW packages will be installed:
+ coolstuff
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst coolstuff (2 unstable [amd64])
+Conf coolstuff (2 unstable [amd64])' aptget install --solver apt coolstuff -s
+testsuccess test -s rootdir/var/log/apt/edsp.last.xz
+sed -i -e 's#^Solver: dump$#Solver: apt#' "$APT_EDSP_DUMP_FILENAME"
+testequal "$(cat "$APT_EDSP_DUMP_FILENAME")
+" apthelper cat-file rootdir/var/log/apt/edsp.last.xz
+cp rootdir/var/log/apt/edsp.last.xz rootdir/var/log/apt/edsp.last.xz.1
+rm -f "$APT_EDSP_DUMP_FILENAME"
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following NEW packages will be installed:
+ coolstuff
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst coolstuff (3 experimental [amd64])
+Conf coolstuff (3 experimental [amd64])' aptget install --solver apt coolstuff -s -t experimental
+testfailure cmp rootdir/var/log/apt/edsp.last.xz rootdir/var/log/apt/edsp.last.xz.1
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Selected version '3' (experimental [amd64]) for 'coolstuff'
+Execute external solver...
+The following NEW packages will be installed:
+ coolstuff
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst coolstuff (3 experimental [amd64])
+Conf coolstuff (3 experimental [amd64])" aptget install --solver apt coolstuff/experimental -sq=0
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following NEW packages will be installed:
+ coolstuff
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst coolstuff (3 experimental [amd64])
+Conf coolstuff (3 experimental [amd64])' aptget install --solver apt coolstuff=3 -sq=0
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following packages will be REMOVED:
+ somestuff
+0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
+Remv somestuff [1]' aptget autoremove --solver apt somestuff -s
+testsuccess aptmark auto cool stuff
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+Execute external solver...
+The following packages will be REMOVED:
+ cool somestuff stuff
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+Remv somestuff [1]
+Remv cool [1]
+Remv stuff [1]' aptget autoremove --solver apt somestuff -s
+
+AUTOREMOVE='apt autoremove'
+if [ -n "$SUDO_USER" ]; then
+ AUTOREMOVE="sudo $AUTOREMOVE"
+fi
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Execute external solver...
+The following package was automatically installed and is no longer required:
+ stuff
+Use '$AUTOREMOVE' to remove it.
+The following packages will be REMOVED:
+ cool* somestuff*
+0 upgraded, 0 newly installed, 2 to remove and 1 not upgraded.
+Purg somestuff [1]
+Purg cool [1]" aptget purge --solver apt cool -s
+
+testsuccess aptget install awesomecoolstuff:i386 -s
+testsuccess aptget install --solver apt awesomecoolstuff:i386 -s
+
+rm -f "$APT_EDSP_DUMP_FILENAME"
+testfailure aptget install --solver dump awesomecoolstuff:i386 -s
+testsuccess test -s "$APT_EDSP_DUMP_FILENAME"
+testequal 'Install: awesomecoolstuff:i386' grep :i386 "$APT_EDSP_DUMP_FILENAME"
+testfailure grep -e ':amd64' -e 'Architecture: any' "$APT_EDSP_DUMP_FILENAME"
+
+testsuccess aptget dist-upgrade -s
+testsuccess aptget dist-upgrade -s --solver apt
+
+testsuccess aptget upgrade -s
+testsuccess aptget upgrade -s --solver apt
+
+testfailure aptget install awesome badstuff -s
+testfailure aptget install awesome badstuff -s --solver apt
+testsuccess grep 'ERR_UNSOLVABLE' rootdir/tmp/testfailure.output
+msgtest 'A resolving error is format as' 'valid parseable EDSP error'
+if dpkg-checkbuilddeps -d 'dctrl-tools' /dev/null >/dev/null 2>&1; then
+ if apthelper cat-file rootdir/var/log/apt/edsp.last.xz | aptinternalsolver > solver.result 2>&1; then
+ testsuccess --nomsg grep-dctrl -FError ERR -- solver.result
+ else
+ msgfail
+ fi
+else
+ msgskip 'dctrl-tools not installed'
+fi
+configarchitecture 'armel'
+testfailure aptget install --solver apt awesomecoolstuff:i386 -s
+msgtest 'An invalid EDSP file generates a' 'hard error'
+if printf "%b\n" "Request: This is a test\nFoo: bar\n\n" | aptinternalsolver > solver.result 2>&1; then
+ cat solver.result
+ msgfail
+else
+ msgpass
+fi
+msgtest 'Test direct calling is okay for' 'apt-internal-solver'
+cat "$APT_EDSP_DUMP_FILENAME" | aptinternalsolver > solver.result 2>&1 || true
+if [ "$(tail -n2 solver.result | head -n1 )" = "Message: Done" ]; then
+ msgpass
+else
+ cat solver.result
+ msgfail
+fi
+testsuccess grep '^APT-ID: 1$' "$APT_EDSP_DUMP_FILENAME"
+sed -i -e 's#^APT-ID: 1$#APT-ID: 10000#' "$APT_EDSP_DUMP_FILENAME"
+cat "$APT_EDSP_DUMP_FILENAME" | aptinternalsolver > solver.result 2>&1 || true
+testsuccessequal 'Message: Done
+' tail -n2 solver.result
+rm -f "$APT_EDSP_DUMP_FILENAME"
+
+testsuccess aptinternalsolver scenario
+testsuccessequal 'Package: stuff
+Architecture: all
+Version: 3
+APT-ID: 1
+Multi-Arch: foreign
+Source: stuff
+Source-Version: 3
+Priority: optional
+Section: other
+APT-Release:
+ a=experimental,n=experimental,c=main,b=all
+APT-Pin: 1
+
+Package: stuff
+Architecture: all
+Version: 2
+APT-ID: 3
+Multi-Arch: foreign
+Source: stuff
+Source-Version: 2
+Priority: optional
+Section: other
+APT-Release:
+ a=unstable,n=sid,c=main,b=all
+APT-Pin: 500
+APT-Candidate: yes
+
+Package: stuff
+Architecture: all
+Version: 1
+APT-ID: 8
+Source: stuff
+Source-Version: 1
+Priority: optional
+Section: other
+Installed: yes
+APT-Pin: 100
+' aptinternalsolver scenario stuff
+
+cat > rootdir/usr/lib/apt/solvers/explicitremove << EOF
+#!/bin/sh
+set -e
+while read line; do
+ if [ "APT-ID" = "\${line%:*}" ]; then
+ cat << APT
+Install: \${line#*:}
+
+Remove: \${line#*:}
+
+APT
+ fi
+done
+EOF
+chmod +x rootdir/usr/lib/apt/solvers/explicitremove
+testfailure apt full-upgrade -s --solver explicitremove
+testsuccess grep 'had a previous stanza' rootdir/tmp/testfailure.output
+
+cat > rootdir/usr/lib/apt/solvers/removeall << EOF
+#!/bin/sh
+set -e
+while read line; do
+ if [ "APT-ID" = "\${line%:*}" ]; then
+ cat << APT
+Remove: \${line#*:}
+
+APT
+ fi
+done
+EOF
+chmod +x rootdir/usr/lib/apt/solvers/removeall
+testwarning apt full-upgrade -s --solver removeall
+testsuccess grep "which isn't installed!" rootdir/tmp/testwarning.output
+
+cat > rootdir/usr/lib/apt/solvers/installall << EOF
+#!/bin/sh
+set -e
+while read line; do
+ if [ "APT-ID" = "\${line%:*}" ]; then
+ cat << APT
+Install: \${line#*:}
+
+APT
+ fi
+done
+EOF
+chmod +x rootdir/usr/lib/apt/solvers/installall
+testfailure apt full-upgrade -s --solver installall
+testsuccess grep "is already installed!" rootdir/tmp/testfailure.output
+
+testsolverfailuremsg() {
+ local SOLVER="rootdir/usr/lib/apt/solvers/$1"
+ echo "$2" > "$SOLVER"
+ chmod +x "$SOLVER"
+ testfailuremsg "$3" apt full-upgrade -s --solver $1
+}
+
+testsolverfailuremsg 'exit0withmsg' "#!/bin/sh
+echo 'Error: instant-exit
+Message: This solver exits instantly'
+exit 0" 'E: External solver failed with: This solver exits instantly'
+
+testsolverfailuremsg 'exit1withoutmsg' "#!/bin/sh
+exit 1" 'E: Sub-process exit1withoutmsg returned an error code (1)'
+
+testsolverfailuremsg 'exit1withmsg' "#!/bin/sh
+echo 'Error: instant-exit
+Message: This solver exits instantly'
+exit 1" 'E: External solver failed with: This solver exits instantly
+E: Sub-process exit1withmsg returned an error code (1)'
diff --git a/test/integration/test-external-installation-planner-protocol b/test/integration/test-external-installation-planner-protocol
new file mode 100755
index 0000000..1d9abc9
--- /dev/null
+++ b/test/integration/test-external-installation-planner-protocol
@@ -0,0 +1,93 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'libfoo' 'amd64' '3' 'experimental' 'Multi-Arch: same'
+buildsimplenativepackage 'foo' 'all' '3' 'experimental' 'Depends: newstuff'
+buildsimplenativepackage 'foo' 'all' '2' 'unstable' 'Depends: libfoo:amd64, stuff
+Conflicts: bar, libfoo:i386
+Recommends: unrelated'
+buildsimplenativepackage 'libfoo' 'amd64' '2' 'unstable' 'Multi-Arch: same'
+buildsimplenativepackage 'unrelated-2' 'amd64' '2' 'unstable'
+insertinstalledpackage 'foo' 'all' '1'
+insertinstalledpackage 'bar' 'all' '1'
+insertinstalledpackage 'stuff' 'all' '1'
+insertinstalledpackage 'unrelated-1' 'all' '1'
+
+setupaptarchive --no-update
+
+EIPPLOG="${TMPWORKINGDIRECTORY}/rootdir/var/log/apt/eipp.log"
+echo "Dir::Log::Planner \"$EIPPLOG\";" > ./rootdir/etc/apt/apt.conf.d/eipp-logging
+
+testsuccess apt update
+export APT_EDSP_DUMP_FILENAME="${TMPWORKINGDIRECTORY}/downloaded/dump.eipp"
+testfailure test -r "$EIPPLOG"
+testfailure aptget install foo --planner dump -y
+testfailure test -r "$EIPPLOG"
+testfailure grep 'unrelated-2' "$APT_EDSP_DUMP_FILENAME"
+testsuccessequal '2' grep -c '^Package: foo$' "$APT_EDSP_DUMP_FILENAME"
+testsuccessequal '1' grep -c '^Package: libfoo$' "$APT_EDSP_DUMP_FILENAME"
+testsuccessequal 'Planner: dump' grep '^Planner: ' "$APT_EDSP_DUMP_FILENAME"
+
+testsuccess aptget install foo -s
+testsuccess aptget install foo -y
+testsuccess test -r "$EIPPLOG"
+testsuccessequal 'Request: EIPP 0.1
+Architecture: amd64
+Architectures: amd64
+Remove: bar:amd64
+Install: libfoo:amd64 foo:amd64
+Planner: internal' head -n 6 "$EIPPLOG"
+aptinternalplanner < "$EIPPLOG" > planner.log || true
+testsuccessequal 'Remove: 7
+Unpack: 2
+Unpack: 4' grep -e '^Unpack:' -e '^Install:' -e '^Configure:' -e '^Remove:' planner.log
+
+rm -f "$EIPPLOG"
+testsuccess aptget install foo -s --reinstall
+testsuccess aptget install foo -y --reinstall
+testsuccess test -r "$EIPPLOG"
+testsuccessequal 'Request: EIPP 0.1
+Architecture: amd64
+Architectures: amd64
+ReInstall: foo:amd64
+Planner: internal' head -n 5 "$EIPPLOG"
+aptinternalplanner < "$EIPPLOG" > planner.log || true
+testsuccessequal 'Unpack: 4' grep -e '^Unpack:' -e '^Install:' -e '^Configure:' -e '^Remove:' planner.log
+
+rm -f "$EIPPLOG"
+testsuccess aptget purge foo -s
+testsuccess aptget purge foo -y
+testsuccess test -r "$EIPPLOG"
+testsuccessequal 'Request: EIPP 0.1
+Architecture: amd64
+Architectures: amd64
+Remove: foo:amd64
+Planner: internal' head -n 5 "$EIPPLOG"
+aptinternalplanner < "$EIPPLOG" > planner.log || true
+testsuccessequal 'Remove: 4' grep -e '^Unpack:' -e '^Install:' -e '^Configure:' -e '^Remove:' planner.log
+
+testplannerfailuremsg() {
+ local PLANNER="rootdir/usr/lib/apt/planners/$1"
+ echo "$2" > "$PLANNER"
+ chmod +x "$PLANNER"
+ testfailuremsg "$3" apt install foo -s --planner $1
+}
+
+testplannerfailuremsg 'exit0withmsg' "#!/bin/sh
+echo 'Error: instant-exit
+Message: This planner exits instantly'
+exit 0" 'E: External planner failed with: This planner exits instantly'
+
+testplannerfailuremsg 'exit1withoutmsg' "#!/bin/sh
+exit 1" 'E: Sub-process exit1withoutmsg returned an error code (1)'
+
+testplannerfailuremsg 'exit1withmsg' "#!/bin/sh
+echo 'Error: instant-exit
+Message: This planner exits instantly'
+exit 1" 'E: External planner failed with: This planner exits instantly
+E: Sub-process exit1withmsg returned an error code (1)'
diff --git a/test/integration/test-failing-maintainer-scripts b/test/integration/test-failing-maintainer-scripts
new file mode 100755
index 0000000..8cf2380
--- /dev/null
+++ b/test/integration/test-failing-maintainer-scripts
@@ -0,0 +1,91 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+configdpkgnoopchroot
+
+# create a bunch of failures
+createfailure() {
+ setupsimplenativepackage "failure-$1" 'native' '1.0' 'unstable' 'Depends: dependee'
+ BUILDDIR="incoming/failure-$1-1.0"
+ echo '#!/bin/sh
+exit 29' > "${BUILDDIR}/debian/$1"
+ buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+ rm -rf "$BUILDDIR"
+}
+
+buildsimplenativepackage 'dependee' 'native' '1.0' 'unstable'
+createfailure 'preinst'
+createfailure 'postinst'
+createfailure 'prerm'
+createfailure 'postrm'
+
+setupaptarchive
+
+# setup some pre- and post- invokes to check the output isn't garbled later
+APTHOOK="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apthook"
+echo '#!/bin/sh
+echo "$1: START"
+echo "$1: MaiN"
+echo "$1: ENd"' > "$APTHOOK"
+chmod +x "$APTHOOK"
+echo "DPKG::Pre-Invoke:: \"${APTHOOK} PRE\";
+DPKG::Post-Invoke:: \"${APTHOOK} POST\";" > rootdir/etc/apt/apt.conf.d/99apthooks
+
+testmyfailure() {
+ local PROGRESS='rootdir/tmp/progress.log'
+ exec 3> "$PROGRESS"
+ testfailure "$@" -o APT::Status-Fd=3
+ msgtest 'Test for failure message of maintainerscript in' 'console log'
+ local TEST='rootdir/tmp/testfailure.output'
+ if grep -q 'exit status 29' "$TEST"; then
+ msgpass
+ else
+ cat "$TEST"
+ msgfail
+ fi
+ msgtest 'Test for proper execution of invoke scripts in' 'console log'
+ if grep -q '^PRE: START$' "$TEST" &&
+ grep -q '^PRE: MaiN$' "$TEST" &&
+ grep -q '^PRE: ENd$' "$TEST" &&
+ grep -q '^POST: START$' "$TEST" &&
+ grep -q '^POST: MaiN$' "$TEST" &&
+ grep -q '^POST: ENd$' "$TEST"; then
+ msgpass
+ else
+ cat "$TEST"
+ msgfail
+ fi
+ msgtest 'Test for failure message of maintainerscript in' 'progress log'
+ if grep -q '^pmerror:.\+exit status 29$' "$PROGRESS"; then
+ msgpass
+ else
+ cat "$PROGRESS"
+ msgfail
+ fi
+ testmarkedauto 'dependee'
+}
+
+cp -a rootdir/var/lib/dpkg/status rootdir/var/lib/dpkg/status.backup
+testmyfailure aptget install failure-preinst -y
+cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status
+testmyfailure aptget install failure-postinst -y
+cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status
+testsuccess aptget install failure-prerm -y
+testdpkginstalled failure-prerm
+testmyfailure aptget purge failure-prerm -y
+cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status
+testsuccess aptget install failure-postrm -y
+testdpkginstalled failure-postrm
+testmyfailure aptget purge failure-postrm -y
+
+# FIXME: test with output going to a PTY as it usually does
+if false; then
+ cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status
+ apt install dependee -y || true
+ apt install failure-postinst -y || true
+fi
diff --git a/test/integration/test-frontend-lock b/test/integration/test-frontend-lock
new file mode 100755
index 0000000..939344a
--- /dev/null
+++ b/test/integration/test-frontend-lock
@@ -0,0 +1,80 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertinstalledpackage 'package1' 'i386' '1.0'
+insertinstalledpackage 'package2' 'i386' '1.0'
+insertinstalledpackage 'package3' 'i386' '1.0'
+insertinstalledpackage 'package4' 'i386' '1.0'
+insertinstalledpackage 'package5' 'i386' '1.0'
+insertinstalledpackage 'package6' 'i386' '1.0'
+buildsimplenativepackage 'foo' 'all' '1'
+
+setupaptarchive
+
+buildsimplenativepackage 'bar' 'all' '1'
+
+
+# Checks that the correct variable is set
+msgmsg 'Post-Invoke script has DPKG_FRONTEND_LOCKED set'
+testsuccess aptget -q -y -o Dpkg::Post-Invoke::="echo DPKG_FRONTEND_LOCKED=\$DPKG_FRONTEND_LOCKED" remove package1
+cp rootdir/tmp/testsuccess.output install.output
+testsuccess grep DPKG_FRONTEND_LOCKED=true install.output
+
+msgmsg 'Pre-Invoke script has DPKG_FRONTEND_LOCKED set'
+testsuccess aptget -q -y -o Dpkg::Pre-Invoke::="echo DPKG_FRONTEND_LOCKED=\$DPKG_FRONTEND_LOCKED" remove package2
+cp rootdir/tmp/testsuccess.output install.output
+testsuccess grep DPKG_FRONTEND_LOCKED=true install.output
+
+msgmsg 'Pre-Install-Pkgs script has DPKG_FRONTEND_LOCKED set'
+testsuccess aptget -q -y -o DPkg::Pre-Install-Pkgs::="echo DPKG_FRONTEND_LOCKED=\$DPKG_FRONTEND_LOCKED" remove package3
+cp rootdir/tmp/testsuccess.output install.output
+testsuccess grep DPKG_FRONTEND_LOCKED=true install.output
+
+
+# Check that the frontend lock is hold by apt-get
+msgmsg 'Post-Invoke script runs while frontend is locked'
+testfailure aptget -q -y -o Dpkg::Post-Invoke::="apt-get remove" remove package4
+cp rootdir/tmp/testfailure.output install.output
+testsuccess grep "E: Unable to acquire the dpkg frontend lock (${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/lock-frontend), is another process using it?" install.output
+testsuccess grep "E: Problem executing scripts DPkg::Post-Invoke 'apt-get remove'" install.output
+
+msgmsg 'Pre-Invoke script runs while frontend is locked'
+testfailure aptget -q -y -o Dpkg::Pre-Invoke::="apt-get remove" remove package5
+cp rootdir/tmp/testfailure.output install.output
+testsuccess grep "E: Unable to acquire the dpkg frontend lock (${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/lock-frontend), is another process using it?" install.output
+testsuccess grep "E: Problem executing scripts DPkg::Pre-Invoke 'apt-get remove'" install.output
+
+msgmsg 'Pre-Install-Pkgs runs while frontend is locked'
+testfailure aptget -q -y -o DPkg::Pre-Install-Pkgs::="apt-get remove" remove package6
+cp rootdir/tmp/testfailure.output install.output
+testsuccess grep "E: Unable to acquire the dpkg frontend lock (${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/lock-frontend), is another process using it?" install.output
+testsuccess grep "E: Sub-process apt-get remove returned an error code (100)" install.output
+testsuccess grep "Failure running script apt-get remove" install.output
+
+
+# Applied test case from DonKult
+msgmsg 'Applied case of frontend locking'
+cat > ./post-invoke <<EOF
+#!/bin/sh
+set -e
+#export DPKG_FRONTEND_LOCKED=true
+${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg -i ${TMPWORKINGDIRECTORY}/incoming/bar_1_all.deb
+EOF
+chmod +x ./post-invoke
+echo "dpkg::post-invoke:: \"${TMPWORKINGDIRECTORY}/post-invoke\";" > rootdir/etc/apt/apt.conf.d/01dpkgpostinvoke
+
+testdpkgnotinstalled 'foo' 'bar'
+testsuccess apt show foo
+testfailure apt show bar
+
+testsuccess apt install foo -s
+testdpkgnotinstalled 'foo' 'bar'
+
+testsuccess apt install foo
+testdpkginstalled 'foo' 'bar'
diff --git a/test/integration/test-github-111-invalid-armember b/test/integration/test-github-111-invalid-armember
new file mode 100755
index 0000000..1e095ee
--- /dev/null
+++ b/test/integration/test-github-111-invalid-armember
@@ -0,0 +1,88 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "amd64"
+setupaptarchive
+
+# this used to crash, but it should treat it as an invalid member header
+touch ' '
+ar -q test.deb ' '
+testsuccessequal "E: Invalid archive member header" ${APTTESTHELPERSBINDIR}/testdeb test.deb
+
+
+rm test.deb
+touch 'x'
+ar -q test.deb 'x'
+testsuccessequal "E: This is not a valid DEB archive, missing 'debian-binary' member" ${APTTESTHELPERSBINDIR}/testdeb test.deb
+
+
+# <name><size> [ other fields] - name is not nul terminated here, it ends in .
+msgmsg "Unterminated ar member name"
+printf '!<arch>\0120123456789ABCDE.A123456789A.01234.01234.0123456.012345678.0.' > test.deb
+testsuccessequal "E: Invalid archive member header" ${APTTESTHELPERSBINDIR}/testdeb test.deb
+
+
+# unused source code for generating $tar below
+maketar() {
+ cat > maketar.c << EOF
+ #include <stdio.h>
+ #include <string.h>
+ struct tar {
+ char Name[100];
+ char Mode[8];
+ char UserID[8];
+ char GroupID[8];
+ char Size[12];
+ char MTime[12];
+ char Checksum[8];
+ char LinkFlag;
+ char LinkName[100];
+ char MagicNumber[8];
+ char UserName[32];
+ char GroupName[32];
+ char Major[8];
+ char Minor[8];
+ };
+
+ int main(void)
+ {
+ union {
+ struct tar t;
+ char buf[512];
+ } t;
+ for (int i = 0; i < sizeof(t.buf); i++)
+ t.buf[i] = '7';
+ memcpy(t.t.Name, "unterminatedName", 16);
+ memcpy(t.t.UserName, "userName", 8);
+ memcpy(t.t.GroupName, "thisIsAGroupNamethisIsAGroupName", 32);
+ t.t.LinkFlag = 'X'; // I AM BROKEN
+ memcpy(t.t.Size, "000000000000", sizeof(t.t.Size));
+ memset(t.t.Checksum,' ',sizeof(t.t.Checksum));
+
+ unsigned long sum = 0;
+ for (int i = 0; i < sizeof(t.buf); i++)
+ sum += t.buf[i];
+
+ int written = sprintf(t.t.Checksum, "%lo", sum);
+ for (int i = written; i < sizeof(t.t.Checksum); i++)
+ t.t.Checksum[i] = ' ';
+ fwrite(t.buf, sizeof(t.buf), 1, stdout);
+ }
+EOF
+
+ gcc maketar.c -o maketar -Wall
+ ./maketar
+}
+
+
+#
+tar="unterminatedName77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777700000000000077777777777773544 X777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777userName777777777777777777777777thisIsAGroupNamethisIsAGroupName777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
+printf '%s' "$tar" | gzip > control.tar.gz
+cp control.tar.gz data.tar.gz
+touch debian-binary
+rm test.deb
+ar -q test.deb debian-binary control.tar.gz data.tar.gz
+testsuccessequal "W: Unknown TAR header type 88" ${APTTESTHELPERSBINDIR}/testdeb test.deb
diff --git a/test/integration/test-github-23-too-long-dependency-line b/test/integration/test-github-23-too-long-dependency-line
new file mode 100755
index 0000000..d514303
--- /dev/null
+++ b/test/integration/test-github-23-too-long-dependency-line
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "amd64"
+setupaptarchive
+
+
+testsuccessequal "network-manager-strongswan:
+ Installed: 1.3.1-14
+ Candidate: 1.3.1-14
+ Version table:
+ *** 1.3.1-14 500
+ 500 file:${TMPWORKINGDIRECTORY}/aptarchive Packages
+ 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status" aptcache policy network-manager-strongswan
diff --git a/test/integration/test-handle-redirect-as-used-mirror-change b/test/integration/test-handle-redirect-as-used-mirror-change
new file mode 100755
index 0000000..a6f8b78
--- /dev/null
+++ b/test/integration/test-handle-redirect-as-used-mirror-change
@@ -0,0 +1,94 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+configcompression '.' 'gz'
+
+buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable'
+
+export APT_DONT_SIGN=''
+setupaptarchive --no-update
+changetowebserver
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://0.0.0.0:${APTHTTPPORT}/"
+rewritesourceslist "http://localhost:${APTHTTPPORT}/redirectme"
+
+testsuccessequal "Get:1 http://0.0.0.0:${APTHTTPPORT} unstable InRelease [$(stat -c %s aptarchive/dists/unstable/InRelease) B]
+Get:2 http://0.0.0.0:${APTHTTPPORT} unstable/main Sources [$(stat -c %s aptarchive/dists/unstable/main/source/Sources.gz) B]
+Get:3 http://0.0.0.0:${APTHTTPPORT} unstable/main all Packages [$(stat -c %s aptarchive/dists/unstable/main/binary-all/Packages.gz) B]
+Get:4 http://0.0.0.0:${APTHTTPPORT} unstable/main Translation-en [$(stat -c %s aptarchive/dists/unstable/main/i18n/Translation-en.gz) B]
+Reading package lists..." aptget update
+
+grepwebserverlogs() {
+ testsuccess grep -h "$1" aptarchive/webserver.log.client*.log
+ shift
+ sort rootdir/tmp/testsuccess.output > aptwebserver.log
+ testfileequal 'aptwebserver.log' "$@"
+}
+
+# ensure we asked the redirector only once
+grepwebserverlogs '^Location:' "Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease"
+
+testsuccessequal "Hit:1 http://0.0.0.0:${APTHTTPPORT} unstable InRelease
+Reading package lists..." aptget update
+
+grepwebserverlogs '^Location:' "Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease
+Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease"
+
+rm -rf rootdir/var/lib/apt/lists
+testsuccess apt update -o Debug::Acquire::http=1 -o Acquire::SameMirrorForAllIndexes=0
+grepwebserverlogs '^Location:' "Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease
+Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease
+Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease
+Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/main/binary-all/Packages.gz
+Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/main/i18n/Translation-en.gz
+Location: http://0.0.0.0:${APTHTTPPORT}/dists/unstable/main/source/Sources.gz"
+
+cd downloaded
+testsuccess apthelper download-file "http://localhost:${APTHTTPPORT}/redirectme/dists/unstable/InRelease" inrelease
+testsuccess test -s inrelease
+cd - >/dev/null
+
+webserverconfig "aptwebserver::redirect::replace::http://0.0.0.0:${APTHTTPPORT}/dists/unstable/InRelease" "http://0.0.0.0:${APTHTTPPORT}/storage/dists/unstable/InRelease"
+mkdir -p aptarchive/storage/dists/unstable
+mv aptarchive/dists/unstable/InRelease aptarchive/storage/dists/unstable
+rm -rf rootdir/var/lib/apt/lists
+testsuccessequal "Get:1 http://0.0.0.0:${APTHTTPPORT}/storage unstable InRelease [$(stat -c %s aptarchive/storage/dists/unstable/InRelease) B]
+Ign:2 http://0.0.0.0:${APTHTTPPORT}/storage unstable/main Sources
+ 404 Not Found
+Ign:3 http://0.0.0.0:${APTHTTPPORT}/storage unstable/main all Packages
+ 404 Not Found
+Ign:4 http://0.0.0.0:${APTHTTPPORT}/storage unstable/main Translation-en
+ 404 Not Found
+Get:2 http://0.0.0.0:${APTHTTPPORT} unstable/main Sources [$(stat -c %s aptarchive/dists/unstable/main/source/Sources.gz) B]
+Get:3 http://0.0.0.0:${APTHTTPPORT} unstable/main all Packages [$(stat -c %s aptarchive/dists/unstable/main/binary-all/Packages.gz) B]
+Get:4 http://0.0.0.0:${APTHTTPPORT} unstable/main Translation-en [$(stat -c %s aptarchive/dists/unstable/main/i18n/Translation-en.gz) B]
+Reading package lists...
+Building dependency tree...
+All packages are up to date." apt update
+
+find aptarchive -name 'InRelease' -delete
+rm -rf rootdir/var/lib/apt/lists
+
+testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT}/storage unstable InRelease
+ 404 Not Found
+Get:2 http://0.0.0.0:${APTHTTPPORT} unstable Release [$(stat -c %s aptarchive/dists/unstable/Release) B]
+Get:3 http://0.0.0.0:${APTHTTPPORT} unstable Release.gpg [$(stat -c %s aptarchive/dists/unstable/Release.gpg) B]
+Get:4 http://0.0.0.0:${APTHTTPPORT} unstable/main Sources [$(stat -c %s aptarchive/dists/unstable/main/source/Sources.gz) B]
+Get:5 http://0.0.0.0:${APTHTTPPORT} unstable/main all Packages [$(stat -c %s aptarchive/dists/unstable/main/binary-all/Packages.gz) B]
+Get:6 http://0.0.0.0:${APTHTTPPORT} unstable/main Translation-en [$(stat -c %s aptarchive/dists/unstable/main/i18n/Translation-en.gz) B]
+Reading package lists..." aptget update
+
+testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT}/storage unstable InRelease
+ 404 Not Found
+Hit:2 http://0.0.0.0:${APTHTTPPORT} unstable Release
+Reading package lists..." aptget update
+
+rm -rf rootdir/var/lib/apt/lists
+find aptarchive -name 'Release.gpg' -delete
+find aptarchive -name 'Release' -delete
+testfailure aptget update
+testwarning aptget update --allow-insecure-repositories
+testsuccess grep 'does not have a Release file' rootdir/tmp/testwarning.output
diff --git a/test/integration/test-handling-broken-orgroups b/test/integration/test-handling-broken-orgroups
new file mode 100755
index 0000000..564ea88
--- /dev/null
+++ b/test/integration/test-handling-broken-orgroups
@@ -0,0 +1,108 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'cool' 'all' '1.0-1'
+insertpackage 'unstable' 'stuff' 'all' '1.0-1'
+insertpackage 'unstable' 'coolstuff' 'all' '1.0-1' 'Depends: cool | stuff'
+insertpackage 'unstable' 'coolstuff2' 'all' '1.0-1' 'Depends: cool2 | stuff'
+insertpackage 'unstable' 'coolstuff-broken' 'all' '1.0-1' 'Depends: cool2 | stuff2'
+insertpackage 'unstable' 'coolstuff-brokenrec' 'all' '1.0-1' 'Recommends: cool2 | stuff2'
+insertpackage 'unstable' 'coolstuff-conflict' 'all' '1.0-1' 'Depends: cool | stuff
+Conflicts: cool'
+insertpackage 'unstable' 'coolstuff-provided' 'all' '1.0-1' 'Depends: cool2 | stuff-abi'
+insertpackage 'unstable' 'extrastuff' 'all' '1.0-1' 'Provides: stuff-abi'
+
+insertpackage 'unstable' 'coolstuff-provided-broken' 'all' '1.0-1' 'Depends: cool2 | stuff-abi-2'
+insertpackage 'unstable' 'extrastuff' 'all' '1.0-1' 'Depends: stuff2
+Provides: stuff-abi-2'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ cool
+The following NEW packages will be installed:
+ cool coolstuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst cool (1.0-1 unstable [all])
+Inst coolstuff (1.0-1 unstable [all])
+Conf cool (1.0-1 unstable [all])
+Conf coolstuff (1.0-1 unstable [all])' aptget install coolstuff -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ stuff
+The following NEW packages will be installed:
+ coolstuff2 stuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst stuff (1.0-1 unstable [all])
+Inst coolstuff2 (1.0-1 unstable [all])
+Conf stuff (1.0-1 unstable [all])
+Conf coolstuff2 (1.0-1 unstable [all])' aptget install coolstuff2 -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ coolstuff-broken : Depends: cool2 but it is not installable or
+ stuff2 but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget install coolstuff-broken -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Recommended packages:
+ cool2 | stuff2
+The following NEW packages will be installed:
+ coolstuff-brokenrec
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst coolstuff-brokenrec (1.0-1 unstable [all])
+Conf coolstuff-brokenrec (1.0-1 unstable [all])' aptget install coolstuff-brokenrec -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ stuff
+The following NEW packages will be installed:
+ coolstuff-conflict stuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst stuff (1.0-1 unstable [all])
+Inst coolstuff-conflict (1.0-1 unstable [all])
+Conf stuff (1.0-1 unstable [all])
+Conf coolstuff-conflict (1.0-1 unstable [all])' aptget install coolstuff-conflict -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ extrastuff
+The following NEW packages will be installed:
+ coolstuff-provided extrastuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst extrastuff (1.0-1 unstable [all])
+Inst coolstuff-provided (1.0-1 unstable [all])
+Conf extrastuff (1.0-1 unstable [all])
+Conf coolstuff-provided (1.0-1 unstable [all])' aptget install coolstuff-provided -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ coolstuff-provided-broken : Depends: cool2 but it is not installable or
+ stuff-abi-2
+E: Unable to correct problems, you have held broken packages.' aptget install coolstuff-provided-broken -s
diff --git a/test/integration/test-hashsum-verification b/test/integration/test-hashsum-verification
new file mode 100755
index 0000000..a514b85
--- /dev/null
+++ b/test/integration/test-hashsum-verification
@@ -0,0 +1,82 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+buildaptarchive
+setupflataptarchive
+changetowebserver
+
+prepare() {
+ local DATE="${2:-now}"
+ if [ "$DATE" = 'now' -a "$1" = "${PKGFILE}-new" ]; then
+ DATE='now + 6 days'
+ fi
+ for release in $(find rootdir/var/lib/apt/lists 2> /dev/null); do
+ touch -d 'now - 6 hours' "$release"
+ done
+ cp "$1" aptarchive/Packages
+ find aptarchive -name 'Release' -delete
+ compressfile aptarchive/Packages
+ # create Release file with incorret checksums
+ cat > aptarchive/Release <<EOF
+Date: Fri, 05 Aug 2011 09:22:08 UTC
+MD5Sum:
+ x15c483ac486f5dbe95095c7ec08626f 760 Packages
+ x0579797df4792164a17305fb0b317e9 546 Packages.bz2
+ xc532a82873d2206b4e4503e92d167bd 489 Packages.gz
+ x4d1d25661377dd4bb95a1736e2624d3 527 Packages.lzma
+ xf1cc221194edbaa943d2375d6f44a88 572 Packages.xz
+SHA1:
+ x0d3317839cf68cd40c28f0bddca8d2ce5a29cad 760 Packages
+ xffddf046ad8dfd8338a355d76fb08d143c8b636 546 Packages.bz2
+ xa27a3df51ca4474b880a6594c4811957079b613 489 Packages.gz
+ x9d7bba4e6fa927a34dcd797694c2893c21f1004 527 Packages.lzma
+ x7d988fe59cf67298828e5299a15d329c0f00f1b 572 Packages.xz
+SHA256:
+ x5a47d72f6b97bfa164b23326b6ad3cb019b5c6cc73769f8c0187616933d1b2b 760 Packages
+ x617252f5bfe3e9126352c7c2f8122d9c3b2c5e1a6c8a9616d62adc0ed164172 546 Packages.bz2
+ xc6abc6fe9a4fcf0758ec5366dfd19bcba90af026a7017c3f6198c59eccd8ef5 489 Packages.gz
+ xb306e66e5e6a7169c8d281a888539d1fdca9cecc99ae605717df579d5b9c166 527 Packages.lzma
+ x9585d0e66b74c9385727fbea11fea9ab33c716b18a32f3036f037a2b9b57120 572 Packages.xz
+EOF
+}
+
+PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')"
+
+runtest() {
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack'
+
+ # test signed release file
+ msgtest 'apt-get update gets the expected hashsum mismatch'
+ testfailure aptget update
+ testsuccess grep "Hash Sum mismatch" rootdir/tmp/testfailure.output
+ msgtest 'No package from the source available'
+ testfailureequal --nomsg 'N: Unable to locate package apt
+E: No packages found' aptcache show apt
+ msgtest 'No Packages file in /var/lib/apt/lists'
+ testempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*Package*'
+
+ # now with the unsigned Release file
+ rm -rf rootdir/var/lib/apt/lists
+ rm -f aptarchive/InRelease aptarchive/Release.gpg
+ msgtest 'unsigned apt-get update gets the expected hashsum mismatch'
+ testfailure --nomsg aptget update --allow-insecure-repositories
+ testsuccess grep "Hash Sum mismatch" rootdir/tmp/testfailure.output
+}
+
+for COMPRESSEDINDEXES in 'false' 'true'; do
+ echo "Acquire::GzipIndexes \"$COMPRESSEDINDEXES\";" > rootdir/etc/apt/apt.conf.d/compressindexes
+ if $COMPRESSEDINDEXES; then
+ msgmsg 'Run tests with GzipIndexes enabled'
+ else
+ msgmsg 'Run tests with GzipIndexes disabled'
+ fi
+ runtest
+done
diff --git a/test/integration/test-http-pipeline-messup b/test/integration/test-http-pipeline-messup
new file mode 100755
index 0000000..95e890b
--- /dev/null
+++ b/test/integration/test-http-pipeline-messup
@@ -0,0 +1,56 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+# try a little harder to create a size mismatch
+buildsimplenativepackage 'pkg0' 'all' '1.0' 'stable' "Depends: foo" '' '' '' '' 'none'
+buildsimplenativepackage 'pkga' 'all' '1.0' 'stable' "Depends: foo" '' '' '' '' 'none'
+buildsimplenativepackage 'pkgb' 'all' '1.0' 'stable' "Depends: foo" '' '' '' '' 'none'
+buildsimplenativepackage 'pkgc' 'all' '1.0' 'stable' "Depends: f$(for i in $(seq 0 1000); do printf 'o'; done)" '' '' '' '' 'none'
+buildsimplenativepackage 'pkgd' 'all' '1.0' 'stable' "Depends: f$(for i in $(seq 0 1000); do printf 'o'; done)" '' '' '' '' 'none'
+
+setupaptarchive --no-update
+
+# simulate (and be a predictable) pipeline mess-up by the server/proxy
+changetowebserver \
+ -o 'aptwebserver::overwrite::.*pkga.*::filename=/pool/pkgd_1.0_all.deb' \
+ -o 'aptwebserver::overwrite::.*pkgc.*::filename=/pool/pkgb_1.0_all.deb' \
+ -o 'aptwebserver::overwrite::.*pkgb.*::filename=/pool/pkgc_1.0_all.deb' \
+ -o 'aptwebserver::overwrite::.*pkgd.*::filename=/pool/pkga_1.0_all.deb'
+
+echo 'Debug::Acquire::http "true";
+Debug::pkgAcquire::Worker "true";' > rootdir/etc/apt/apt.conf.d/99debug
+
+testsuccess aptget update
+
+cd downloaded
+# messup is bigger than pipeline: checks if fixup isn't trying too hard
+testfailure aptget download pkga pkgb pkgc pkgd -o Acquire::http::Pipeline-Depth=2
+for pkg in 'pkga' 'pkgd'; do
+ testfailure test -f ${pkg}_1.0_all.deb
+done
+for pkg in 'pkgb' 'pkgc'; do
+ testsuccess test -f ${pkg}_1.0_all.deb
+ testsuccess cmp ../incoming/${pkg}_1.0_all.deb ${pkg}_1.0_all.deb
+ rm -f ${pkg}_1.0_all.deb
+done
+
+# ensure that pipeling is enabled for rest of this test
+echo 'Acquire::http::Pipeline-Depth 10;' > ../rootdir/etc/apt/apt.conf.d/99enable-pipeline
+
+# the output is a bit strange: it looks like it has downloaded pkga 4 times
+testwarning aptget download pkg0 pkga pkgb pkgc pkgd
+for pkg in 'pkg0' 'pkga' 'pkgb' 'pkgc' 'pkgd'; do
+ testsuccess test -f ${pkg}_1.0_all.deb
+ testsuccess cmp ../incoming/${pkg}_1.0_all.deb ${pkg}_1.0_all.deb
+ rm -f ${pkg}_1.0_all.deb
+done
+
+# while hashes will pass (as none are available), sizes will not match, so failure
+# checks that no hashes means that pipeline depth is ignored as we can't fixup
+testfailure aptget download pkga pkgb pkgc pkgd --allow-unauthenticated -o Acquire::ForceHash=ROT26
diff --git a/test/integration/test-ignore-provides-if-versioned-breaks b/test/integration/test-ignore-provides-if-versioned-breaks
new file mode 100755
index 0000000..ebcbecf
--- /dev/null
+++ b/test/integration/test-ignore-provides-if-versioned-breaks
@@ -0,0 +1,150 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386' 'amd64'
+
+insertpackage 'unstable' 'unrlated' 'all' '1.0'
+
+insertinstalledpackage 'foo' 'i386' '2.0'
+insertpackage 'unstable' 'foo' 'i386' '4.0'
+insertpackage 'unstable' 'foo-provider' 'i386' '1.0' 'Provides: foo'
+insertpackage 'unstable' 'foo-breaker-3' 'i386' '1.0' 'Breaks: foo (<< 3.0)'
+insertpackage 'unstable' 'foo-breaker-2' 'i386' '1.0' 'Breaks: foo (<< 2.0)'
+insertpackage 'unstable' 'foo-breaker-none' 'i386' '1.0' 'Breaks: foo'
+
+insertinstalledpackage 'foo-foreign' 'amd64' '2.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'foo-foreign' 'amd64' '4.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'foo-foreign-provider' 'i386' '1.0' 'Provides: foo-foreign'
+insertpackage 'unstable' 'foo-foreign-breaker-3' 'i386' '1.0' 'Breaks: foo-foreign (<< 3.0)'
+insertpackage 'unstable' 'foo-foreign-breaker-2' 'i386' '1.0' 'Breaks: foo-foreign (<< 2.0)'
+insertpackage 'unstable' 'foo-foreign-breaker-none' 'i386' '1.0' 'Breaks: foo-foreign'
+
+insertinstalledpackage 'foo-same' 'i386,amd64' '2.0' 'Multi-Arch: same'
+insertpackage 'unstable' 'foo-same' 'i386,amd64' '4.0' 'Multi-Arch: same'
+insertpackage 'unstable' 'foo-same-provider' 'i386' '1.0' 'Provides: foo-same'
+insertpackage 'unstable' 'foo-same-breaker-3' 'i386' '1.0' 'Breaks: foo-same (<< 3.0)'
+insertpackage 'unstable' 'foo-same-breaker-2' 'i386' '1.0' 'Breaks: foo-same (<< 2.0)'
+insertpackage 'unstable' 'foo-same-breaker-none' 'i386' '1.0' 'Breaks: foo-same'
+
+
+
+setupaptarchive
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo-breaker-none : Breaks: foo
+E: Unable to correct problems, you have held broken packages.' aptget install foo-provider foo-breaker-none -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-breaker-2 foo-provider
+0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
+Inst foo-breaker-2 (1.0 unstable [i386])
+Inst foo-provider (1.0 unstable [i386])
+Conf foo-breaker-2 (1.0 unstable [i386])
+Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo-breaker-3 foo-provider
+The following packages will be upgraded:
+ foo
+1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded.
+Inst foo [2.0] (4.0 unstable [i386])
+Inst foo-breaker-3 (1.0 unstable [i386])
+Inst foo-provider (1.0 unstable [i386])
+Conf foo (4.0 unstable [i386])
+Conf foo-breaker-3 (1.0 unstable [i386])
+Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-3 -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo-foreign-breaker-none : Breaks: foo-foreign
+E: Unable to correct problems, you have held broken packages.' aptget install foo-foreign-provider foo-foreign-breaker-none -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-foreign-breaker-2 foo-foreign-provider
+0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
+Inst foo-foreign-breaker-2 (1.0 unstable [i386])
+Inst foo-foreign-provider (1.0 unstable [i386])
+Conf foo-foreign-breaker-2 (1.0 unstable [i386])
+Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo-foreign:amd64
+The following NEW packages will be installed:
+ foo-foreign-breaker-3 foo-foreign-provider
+The following packages will be upgraded:
+ foo-foreign:amd64
+1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded.
+Inst foo-foreign:amd64 [2.0] (4.0 unstable [amd64])
+Inst foo-foreign-breaker-3 (1.0 unstable [i386])
+Inst foo-foreign-provider (1.0 unstable [i386])
+Conf foo-foreign:amd64 (4.0 unstable [amd64])
+Conf foo-foreign-breaker-3 (1.0 unstable [i386])
+Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-3 -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo-same-breaker-none : Breaks: foo-same
+E: Unable to correct problems, you have held broken packages.' aptget install foo-same-provider foo-same-breaker-none -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-same-breaker-2 foo-same-provider
+0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
+Inst foo-same-breaker-2 (1.0 unstable [i386])
+Inst foo-same-provider (1.0 unstable [i386])
+Conf foo-same-breaker-2 (1.0 unstable [i386])
+Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo-same foo-same:amd64
+The following NEW packages will be installed:
+ foo-same-breaker-3 foo-same-provider
+The following packages will be upgraded:
+ foo-same foo-same:amd64
+2 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo-same [2.0] (4.0 unstable [i386]) [foo-same:i386 on foo-same:amd64] [foo-same:amd64 on foo-same:i386] [foo-same:amd64 ]
+Inst foo-same:amd64 [2.0] (4.0 unstable [amd64])
+Inst foo-same-breaker-3 (1.0 unstable [i386])
+Inst foo-same-provider (1.0 unstable [i386])
+Conf foo-same (4.0 unstable [i386])
+Conf foo-same:amd64 (4.0 unstable [amd64])
+Conf foo-same-breaker-3 (1.0 unstable [i386])
+Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-3 -s
diff --git a/test/integration/test-ignore-provides-if-versioned-conflicts b/test/integration/test-ignore-provides-if-versioned-conflicts
new file mode 100755
index 0000000..3243cfb
--- /dev/null
+++ b/test/integration/test-ignore-provides-if-versioned-conflicts
@@ -0,0 +1,150 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386' 'amd64'
+
+insertpackage 'unstable' 'unrlated' 'all' '1.0'
+
+insertinstalledpackage 'foo' 'i386' '2.0'
+insertpackage 'unstable' 'foo' 'i386' '4.0'
+insertpackage 'unstable' 'foo-provider' 'i386' '1.0' 'Provides: foo'
+insertpackage 'unstable' 'foo-breaker-3' 'i386' '1.0' 'Conflicts: foo (<< 3.0)'
+insertpackage 'unstable' 'foo-breaker-2' 'i386' '1.0' 'Conflicts: foo (<< 2.0)'
+insertpackage 'unstable' 'foo-breaker-none' 'i386' '1.0' 'Conflicts: foo'
+
+insertinstalledpackage 'foo-foreign' 'amd64' '2.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'foo-foreign' 'amd64' '4.0' 'Multi-Arch: foreign'
+insertpackage 'unstable' 'foo-foreign-provider' 'i386' '1.0' 'Provides: foo-foreign'
+insertpackage 'unstable' 'foo-foreign-breaker-3' 'i386' '1.0' 'Conflicts: foo-foreign (<< 3.0)'
+insertpackage 'unstable' 'foo-foreign-breaker-2' 'i386' '1.0' 'Conflicts: foo-foreign (<< 2.0)'
+insertpackage 'unstable' 'foo-foreign-breaker-none' 'i386' '1.0' 'Conflicts: foo-foreign'
+
+insertinstalledpackage 'foo-same' 'i386,amd64' '2.0' 'Multi-Arch: same'
+insertpackage 'unstable' 'foo-same' 'i386,amd64' '4.0' 'Multi-Arch: same'
+insertpackage 'unstable' 'foo-same-provider' 'i386' '1.0' 'Provides: foo-same'
+insertpackage 'unstable' 'foo-same-breaker-3' 'i386' '1.0' 'Conflicts: foo-same (<< 3.0)'
+insertpackage 'unstable' 'foo-same-breaker-2' 'i386' '1.0' 'Conflicts: foo-same (<< 2.0)'
+insertpackage 'unstable' 'foo-same-breaker-none' 'i386' '1.0' 'Conflicts: foo-same'
+
+
+
+setupaptarchive
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo-breaker-none : Conflicts: foo
+E: Unable to correct problems, you have held broken packages.' aptget install foo-provider foo-breaker-none -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-breaker-2 foo-provider
+0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
+Inst foo-breaker-2 (1.0 unstable [i386])
+Inst foo-provider (1.0 unstable [i386])
+Conf foo-breaker-2 (1.0 unstable [i386])
+Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo-breaker-3 foo-provider
+The following packages will be upgraded:
+ foo
+1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded.
+Inst foo [2.0] (4.0 unstable [i386])
+Inst foo-breaker-3 (1.0 unstable [i386])
+Inst foo-provider (1.0 unstable [i386])
+Conf foo (4.0 unstable [i386])
+Conf foo-breaker-3 (1.0 unstable [i386])
+Conf foo-provider (1.0 unstable [i386])' aptget install foo-provider foo-breaker-3 -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo-foreign-breaker-none : Conflicts: foo-foreign
+E: Unable to correct problems, you have held broken packages.' aptget install foo-foreign-provider foo-foreign-breaker-none -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-foreign-breaker-2 foo-foreign-provider
+0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
+Inst foo-foreign-breaker-2 (1.0 unstable [i386])
+Inst foo-foreign-provider (1.0 unstable [i386])
+Conf foo-foreign-breaker-2 (1.0 unstable [i386])
+Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo-foreign:amd64
+The following NEW packages will be installed:
+ foo-foreign-breaker-3 foo-foreign-provider
+The following packages will be upgraded:
+ foo-foreign:amd64
+1 upgraded, 2 newly installed, 0 to remove and 3 not upgraded.
+Inst foo-foreign:amd64 [2.0] (4.0 unstable [amd64])
+Inst foo-foreign-breaker-3 (1.0 unstable [i386])
+Inst foo-foreign-provider (1.0 unstable [i386])
+Conf foo-foreign:amd64 (4.0 unstable [amd64])
+Conf foo-foreign-breaker-3 (1.0 unstable [i386])
+Conf foo-foreign-provider (1.0 unstable [i386])' aptget install foo-foreign-provider foo-foreign-breaker-3 -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo-same-breaker-none : Conflicts: foo-same
+E: Unable to correct problems, you have held broken packages.' aptget install foo-same-provider foo-same-breaker-none -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-same-breaker-2 foo-same-provider
+0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
+Inst foo-same-breaker-2 (1.0 unstable [i386])
+Inst foo-same-provider (1.0 unstable [i386])
+Conf foo-same-breaker-2 (1.0 unstable [i386])
+Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo-same foo-same:amd64
+The following NEW packages will be installed:
+ foo-same-breaker-3 foo-same-provider
+The following packages will be upgraded:
+ foo-same foo-same:amd64
+2 upgraded, 2 newly installed, 0 to remove and 2 not upgraded.
+Inst foo-same [2.0] (4.0 unstable [i386]) [foo-same:i386 on foo-same:amd64] [foo-same:amd64 on foo-same:i386] [foo-same:amd64 ]
+Inst foo-same:amd64 [2.0] (4.0 unstable [amd64])
+Inst foo-same-breaker-3 (1.0 unstable [i386])
+Inst foo-same-provider (1.0 unstable [i386])
+Conf foo-same (4.0 unstable [i386])
+Conf foo-same:amd64 (4.0 unstable [amd64])
+Conf foo-same-breaker-3 (1.0 unstable [i386])
+Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-3 -s
diff --git a/test/integration/test-implicit-conflicts-real-not-virtual b/test/integration/test-implicit-conflicts-real-not-virtual
new file mode 100755
index 0000000..02bd442
--- /dev/null
+++ b/test/integration/test-implicit-conflicts-real-not-virtual
@@ -0,0 +1,56 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable-mp' 'crda' 'i386,amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda
+Multi-Arch: foreign'
+insertpackage 'unstable-m' 'crda' 'i386,amd64' '1.1.1-1ubuntu4m' 'Multi-Arch: foreign'
+insertpackage 'unstable-p' 'crda' 'i386,amd64' '1.1.1-1ubuntu4p' 'Provides: wireless-crda'
+insertpackage 'unstable' 'wireless-crda' 'i386,amd64' '1.16'
+
+
+insertinstalledpackage 'wireless-crda' 'amd64' '1.14'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst crda (1.1.1-1ubuntu4m unstable-m [amd64])
+Conf crda (1.1.1-1ubuntu4m unstable-m [amd64])' aptget install crda -s -t unstable-m
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst crda (1.1.1-1ubuntu4p unstable-p [amd64])
+Conf crda (1.1.1-1ubuntu4p unstable-p [amd64])' aptget install crda -s -t unstable-p
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst crda (1.1.1-1ubuntu4mp unstable-mp [amd64])
+Conf crda (1.1.1-1ubuntu4mp unstable-mp [amd64])' aptget install crda -s -t unstable-mp
+
+rm rootdir/var/lib/dpkg/status
+insertinstalledpackage 'crda' 'amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda
+Conflicts: wireless-crda (<< 1.15)
+Replaces: wireless-crda ( << 1.15)
+Multi-arch: foreign'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ wireless-crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst wireless-crda (1.16 unstable [amd64])
+Conf wireless-crda (1.16 unstable [amd64])' aptget install wireless-crda -s -t unstable
diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove
new file mode 100755
index 0000000..8cde343
--- /dev/null
+++ b/test/integration/test-kernel-helper-autoremove
@@ -0,0 +1,181 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+CURRENTKERNEL="linux-image-$(uname -r | tr '[A-Z]' '[a-z]')"
+insertinstalledpackage "$CURRENTKERNEL" 'amd64' '5-1'
+# debug packages do not need our protection
+insertinstalledpackage "${CURRENTKERNEL}-dbg" 'amd64' '5-1'
+# but other kernel flavours should be protected
+insertinstalledpackage "${CURRENTKERNEL}-686-pae" 'i386' '5-1'
+insertinstalledpackage "${CURRENTKERNEL}-rt" 'amd64' '5-1'
+# some more versions
+insertinstalledpackage 'linux-image-1.0.0-2-generic' 'amd64' '1.0.0-2'
+insertinstalledpackage 'linux-image-100.0.0-1-generic' 'amd64' '100.0.0-1'
+# kernel metapackages should be ignored
+insertinstalledpackage 'linux-image-amd64' 'amd64' '200-1'
+insertinstalledpackage 'linux-image-686-pae' 'i386' '300-1'
+# ensure that the '.' is really a dot and not a wildcard
+insertinstalledpackage 'linux-headers-1000000-1-generic' 'amd64' '100.0.0-1'
+# ensure that the '+' is really a plus and not a regexp quantifier
+insertinstalledpackage "${CURRENTKERNEL}+variant" 'amd64' '5-1'
+
+testsuccess aptmark auto "$CURRENTKERNEL" "${CURRENTKERNEL}-dbg" "${CURRENTKERNEL}-686-pae:i386" "${CURRENTKERNEL}-rt" \
+ 'linux-image-1.0.0-2-generic' 'linux-image-100.0.0-1-generic' 'linux-headers-1000000-1-generic' "${CURRENTKERNEL}+variant"
+testsuccess aptmark hold "${CURRENTKERNEL}-rt"
+
+testprotected() {
+ rm -f rootdir/etc/apt/apt.conf.d/01autoremove-kernels protected.list
+
+ testsuccess runapt sh "${TESTDIR}/../../debian/apt.auto-removal.sh" "$@"
+ testfailure test -s rootdir/tmp/testsuccess.output
+
+ msgtest 'Check kernel autoremoval protection list' 'is created'
+ testsuccess --nomsg test -e rootdir/etc/apt/apt.conf.d/01autoremove-kernels
+ testfilestats 'rootdir/etc/apt/apt.conf.d/01autoremove-kernels' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:444"
+
+ msgtest 'Check kernel autoremoval protection list' 'can be dumped'
+ testsuccess --nomsg aptconfig dump --no-empty --format '%v%n' 'APT::NeverAutoRemove'
+ cp rootdir/tmp/testsuccess.output protected.list
+
+ msgtest 'Check kernel autoremoval protection list' 'can be parsed'
+ testfailure --nomsg grep '^[A-Z]: ' protected.list
+
+ msgtest 'Check kernel autoremoval protection list includes' 'most recent kernel'
+ testsuccess --nomsg grep '^\^linux-image-100\\\.0\\\.0-1-generic\$$' protected.list
+
+ msgtest 'Check kernel autoremoval protection list includes' 'running kernel'
+ testsuccess --nomsg grep "^\\^linux-image-$(uname -r | tr '[A-Z]' '[a-z]' | sed -e 's#\.#\\\\.#g')\\\$\$" protected.list
+
+ msgtest 'Check kernel autoremoval protection list does not include' 'metapackages'
+ testfailure --nomsg grep -e '^\^linux-image-amd64\$$' -e '^\^linux-image-686-pae\$$' -e ':i386' protected.list
+}
+
+AUTOREMOVE='apt autoremove'
+if [ -n "$SUDO_USER" ]; then
+ AUTOREMOVE="sudo $AUTOREMOVE"
+fi
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages were automatically installed and are no longer required:
+ linux-headers-1000000-1-generic (100.0.0-1)
+ linux-image-1.0.0-2-generic (1.0.0-2)
+ linux-image-100.0.0-1-generic (100.0.0-1)
+ $CURRENTKERNEL (5-1)
+ ${CURRENTKERNEL}+variant (5-1)
+ ${CURRENTKERNEL}-686-pae:i386 (5-1)
+ ${CURRENTKERNEL}-dbg (5-1)
+Use '$AUTOREMOVE' to remove them.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -sV
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages were automatically installed and are no longer required:
+ linux-headers-1000000-1-generic (100.0.0-1)
+ linux-image-1.0.0-2-generic (1.0.0-2)
+ linux-image-100.0.0-1-generic (100.0.0-1)
+ $CURRENTKERNEL (5-1)
+ ${CURRENTKERNEL}+variant (5-1)
+ ${CURRENTKERNEL}-686-pae:i386 (5-1)
+ ${CURRENTKERNEL}-dbg (5-1)
+ ${CURRENTKERNEL}-rt (5-1)
+Use '$AUTOREMOVE' to remove them.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -sV --ignore-hold
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+7 packages were automatically installed and are no longer required.
+Use '$AUTOREMOVE' to remove them.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s -o APT::Get::HideAutoRemove=small
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ linux-headers-1000000-1-generic (100.0.0-1)
+ linux-image-1.0.0-2-generic (1.0.0-2)
+ linux-image-100.0.0-1-generic (100.0.0-1)
+ $CURRENTKERNEL (5-1)
+ ${CURRENTKERNEL}+variant (5-1)
+ ${CURRENTKERNEL}-686-pae:i386 (5-1)
+ ${CURRENTKERNEL}-dbg (5-1)
+0 upgraded, 0 newly installed, 7 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]
+Remv linux-image-1.0.0-2-generic [1.0.0-2]
+Remv linux-image-100.0.0-1-generic [100.0.0-1]
+Remv $CURRENTKERNEL [5-1]
+Remv ${CURRENTKERNEL}+variant [5-1]
+Remv ${CURRENTKERNEL}-686-pae:i386 [5-1]
+Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -sV
+
+msgmsg "run without parameter"
+testprotected
+msgtest 'Check kernel autoremoval protection list does not include' 'old kernel'
+testfailure --nomsg grep '^\^linux-image-1\\\.0\\\.0-2-generic\$$' protected.list
+export COLUMNS=99999
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ linux-headers-1000000-1-generic linux-image-1.0.0-2-generic ${CURRENTKERNEL}-dbg
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]
+Remv linux-image-1.0.0-2-generic [1.0.0-2]
+Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -s
+unset COLUMNS
+
+msgmsg "install unknown kernel"
+# even if installed/uname reports a kernel which we can't find via dpkg,
+# ensure that we still protect it just in case as these are kernels we
+# know for sure without complicated detection mechanisms
+testprotected 1.0.0-2-ungeneric
+msgtest 'Check kernel autoremoval protection list does not include' 'old kernel'
+testfailure --nomsg grep '^\^linux-image-1\\\.0\\\.0-2-generic\$$' protected.list
+msgtest 'Check kernel autoremoval protection list does include' 'unknown installed kernel'
+testsuccess --nomsg grep '^\^linux-image-1\\\.0\\\.0-2-ungeneric\$$' protected.list
+export COLUMNS=9
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ linux-headers-1000000-1-generic
+ linux-image-1.0.0-2-generic
+ ${CURRENTKERNEL}-dbg
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]
+Remv linux-image-1.0.0-2-generic [1.0.0-2]
+Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -s
+unset COLUMNS
+
+msgmsg "install an old kernel"
+testprotected 1.0.0-2-generic
+msgtest 'Check kernel autoremoval protection list includes' 'installed kernel'
+testsuccess --nomsg grep '^\^linux-image-1\\\.0\\\.0-2-generic\$$' protected.list
+export COLUMNS=9
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ linux-headers-1000000-1-generic
+ ${CURRENTKERNEL}-dbg
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]
+Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -s
+unset COLUMNS
+
+# rt kernel was put on hold while the protected list was generated
+testsuccess aptmark unhold "${CURRENTKERNEL}-rt"
+export COLUMNS=99999
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ linux-headers-1000000-1-generic ${CURRENTKERNEL}-dbg
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]
+Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -s
+unset COLUMNS
diff --git a/test/integration/test-method-connect b/test/integration/test-method-connect
new file mode 100755
index 0000000..b35f96d
--- /dev/null
+++ b/test/integration/test-method-connect
@@ -0,0 +1,13 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+
+cd downloaded
+testfailureequal 'Err:1 http://vwakviie2ienjx6t.onion/
+ Direct connection to .onion domains is blocked by default. If you meant to use Tor remember to use tor+http instead of http.
+E: Failed to fetch http://vwakviie2ienjx6t.onion/ Direct connection to .onion domains is blocked by default. If you meant to use Tor remember to use tor+http instead of http.
+E: Download Failed' apthelper download-file 'http://vwakviie2ienjx6t.onion/' ftp.debian.org.html
diff --git a/test/integration/test-method-gpgv b/test/integration/test-method-gpgv
new file mode 100755
index 0000000..bfa5af4
--- /dev/null
+++ b/test/integration/test-method-gpgv
@@ -0,0 +1,185 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+cat > faked-apt-key <<EOF
+#!/bin/sh
+set -e
+find_gpgv_status_fd() {
+ while [ -n "\$1" ]; do
+ if [ "\$1" = '--status-fd' ]; then
+ shift
+ echo "\$1"
+ break
+ fi
+ shift
+ done
+}
+GPGSTATUSFD="\$(find_gpgv_status_fd "\$@")"
+cat >&\${GPGSTATUSFD} gpgv.output
+cat gpgv.output
+EOF
+chmod +x faked-apt-key
+
+testgpgv() {
+ echo "$4" > gpgv.output
+ msgtest "$1" "$2"
+ gpgvmethod >method.output 2>&1 || true
+ testsuccess --nomsg grep "^ $2\$" method.output
+ msgtest 'The reported signedby key is' "${3:-empty}"
+ testsuccess --nomsg grep "^ Signed-By:\s\+$3\$" method.output
+}
+
+testrun() {
+ testgpgv 'Good signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+ testgpgv 'Good signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+
+ testgpgv 'Good subkey signed with long keyid' 'Good: GOODSIG 5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+ testgpgv 'Good subkey signed with fingerprint' 'Good: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+
+ testgpgv 'Untrusted signed with long keyid' 'Worthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 1 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+ testsuccess grep '^\s\+Good:\s\+$' method.output
+ testgpgv 'Untrusted signed with fingerprint' 'Worthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 1 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+ testsuccess grep '^\s\+Good:\s\+$' method.output
+
+ testgpgv 'Weak signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 2 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+ testsuccess grep '^Message: Signature by key 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE uses weak digest algorithm (SHA1)$' method.output
+ testgpgv 'Weak signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 2 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+ testsuccess grep '^Message: Signature by key 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE uses weak digest algorithm (SHA1)$' method.output
+
+ testgpgv 'No Pubkey with long keyid' 'NoPubKey: NO_PUBKEY E8525D47528144E2' '' '[GNUPG:] ERRSIG E8525D47528144E2 1 11 00 1472744666 9
+[GNUPG:] NO_PUBKEY E8525D47528144E2'
+ testgpgv 'No Pubkey with fingerprint' 'NoPubKey: NO_PUBKEY DE66AECA9151AFA1877EC31DE8525D47528144E2' '' '[GNUPG:] ERRSIG DE66AECA9151AFA1877EC31DE8525D47528144E2 1 11 00 1472744666 9
+[GNUPG:] NO_PUBKEY DE66AECA9151AFA1877EC31DE8525D47528144E2'
+
+ testgpgv 'Expired key with long keyid' 'Worthless: EXPKEYSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org>' '' '[GNUPG:] EXPKEYSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org>
+[GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742629 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9'
+ testgpgv 'Expired key with fingerprint' 'Worthless: EXPKEYSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org>' '' '[GNUPG:] EXPKEYSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org>
+[GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742629 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9'
+}
+
+echo 'Test' > message.data
+cat >message.sig <<EOF
+-----BEGIN PGP SIGNATURE-----
+
+iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt
+cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l
+3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg
+X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k
+V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx
+pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns
+JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq
+=TB1F
+-----END PGP SIGNATURE-----
+EOF
+
+
+gpgvmethod() {
+ echo "601 Configuration
+Config-Item: Debug::Acquire::gpgv=1
+Config-Item: Dir::Bin::apt-key=./faked-apt-key
+Config-Item: APT::Hashes::SHA1::Weak=true
+
+600 URI Acquire
+URI: file://${TMPWORKINGDIRECTORY}/message.sig
+Filename: ${TMPWORKINGDIRECTORY}/message.data
+" | runapt "${METHODSDIR}/gpgv"
+}
+testrun
+
+gpgvmethod() {
+ echo "601 Configuration
+Config-Item: Debug::Acquire::gpgv=1
+Config-Item: Dir::Bin::apt-key=./faked-apt-key
+Config-Item: APT::Hashes::SHA1::Weak=true
+
+600 URI Acquire
+URI: file://${TMPWORKINGDIRECTORY}/message.sig
+Filename: ${TMPWORKINGDIRECTORY}/message.data
+Signed-By: /dev/null,34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
+" | runapt "${METHODSDIR}/gpgv"
+}
+testrun
+
+gpgvmethod() {
+ echo "601 Configuration
+Config-Item: Debug::Acquire::gpgv=1
+Config-Item: Dir::Bin::apt-key=./faked-apt-key
+Config-Item: APT::Hashes::SHA1::Weak=true
+
+600 URI Acquire
+URI: file://${TMPWORKINGDIRECTORY}/message.sig
+Filename: ${TMPWORKINGDIRECTORY}/message.data
+Signed-By: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE,/dev/null
+" | runapt "${METHODSDIR}/gpgv"
+}
+testrun
+
+testgpgv 'Good signed with long keyid but not signed-by key' 'NoPubKey: GOODSIG 4BC0A39C27CE74F9' '' '[GNUPG:] GOODSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org>
+[GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742625 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9'
+testsuccess grep '^\s\+Good:\s\+$' method.output
+testsuccess grep 'verified because the public key is not available: GOODSIG' method.output
+testgpgv 'Good signed with fingerprint but not signed-by key' 'NoPubKey: GOODSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9' '' '[GNUPG:] GOODSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org>
+[GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742625 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9'
+testsuccess grep '^\s\+Good:\s\+$' method.output
+testsuccess grep 'verified because the public key is not available: GOODSIG' method.output
+
+gpgvmethod() {
+ echo "601 Configuration
+Config-Item: Debug::Acquire::gpgv=1
+Config-Item: Dir::Bin::apt-key=./faked-apt-key
+Config-Item: APT::Hashes::SHA1::Weak=true
+
+600 URI Acquire
+URI: file://${TMPWORKINGDIRECTORY}/message.sig
+Filename: ${TMPWORKINGDIRECTORY}/message.data
+Signed-By: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!
+" | runapt "${METHODSDIR}/gpgv"
+}
+testgpgv 'Exact matched subkey signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E'
+testgpgv 'Exact matched subkey signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E'
+
+testgpgv 'Exact unmatched subkey signed with long keyid' 'NoPubKey: GOODSIG 5B6896415D44C43E' '' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+testsuccess grep '^\s\+Good:\s\+$' method.output
+testsuccess grep 'verified because the public key is not available: GOODSIG' method.output
+testgpgv 'Exact unmatched subkey signed with fingerprint' 'NoPubKey: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' '' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
+testsuccess grep '^\s\+Good:\s\+$' method.output
+testsuccess grep 'verified because the public key is not available: GOODSIG' method.output
+
+insertpackage 'unstable' 'foo' 'all' '1'
+setupaptarchive --no-update
+
+echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output
+testsuccess apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+rm -rf rootdir/var/lib/apt/lists
+
+echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org>' > gpgv.output
+testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+rm -rf rootdir/var/lib/apt/lists
+
+echo '[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output
+testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+rm -rf rootdir/var/lib/apt/lists
+
+echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org>
+[GNUPG:] VALIDSIG 0000000000000000000000000000000000000000 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output
+testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+rm -rf rootdir/var/lib/apt/lists
diff --git a/test/integration/test-method-mirror b/test/integration/test-method-mirror
new file mode 100755
index 0000000..56c9a10
--- /dev/null
+++ b/test/integration/test-method-mirror
@@ -0,0 +1,255 @@
+#!/bin/sh
+set -e
+umask 0
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+umask 022
+
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage 'foo' 'all' '1' 'stable'
+buildsimplenativepackage 'foo' 'all' '2' 'unstable'
+setupaptarchive --no-update
+changetowebserver
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://localhost:${APTHTTPPORT}/"
+addtrap 'prefix' "chmod -f -R +w $PWD/rootdir/var/lib/apt/lists || true;"
+mkdir -m 755 -p rootdir/var/lib/apt
+touch rootdir/var/lib/apt/extended_states
+
+testrundownload_internal_debs() {
+ local WORKDIR="$1"
+ shift
+ if [ "$WORKDIR" != '.' ]; then cd "$WORKDIR"; fi
+ while [ -n "$1" ]; do
+ if [ "$1" = 'foo=1' ]; then shift; continue; fi
+ local fndeb="$(echo "$1" | tr '=' '_')_all.deb"
+ testsuccess test -e "$fndeb"
+ rm -f "$fndeb"
+ shift
+ done
+ if [ "$WORKDIR" != '.' ]; then cd - >/dev/null; fi
+}
+testrundownload_internal() {
+ cd downloaded
+ testsuccess apt install --download-only -o Debug::NoLocking=true -y "$@"
+ testrundownload_internal_debs '../rootdir/var/cache/apt/archives' "$@"
+ msgtest 'Repeat the download only install test with' 'aptitude'
+ if dpkg-checkbuilddeps -d 'aptitude' /dev/null >/dev/null 2>&1; then
+ if aptitude install --download-only -o Debug::NoLocking=true -y "$@" > ../rootdir/tmp/aptitude.log 2>&1; then
+ msgpass
+ else
+ msgfail
+ cat >&2 ../rootdir/tmp/aptitude.log
+ fi
+ testrundownload_internal_debs '../rootdir/var/cache/apt/archives' "$@"
+ else
+ msgskip 'not installed'
+ fi
+ testsuccess apt download "$@" -o Debug::pkgAcquire::Worker=1
+ testrundownload_internal_debs '.' "$@"
+ testempty find . -name '*mirror*'
+ cd ..
+}
+testrundownload() {
+ if [ "$(id -u)" = '0' ]; then
+ testrundownload_internal "$@"
+ else
+ mkdir -p rootdir/var/cache/apt/archives/partial
+ echo 'Debug::SetupAPTPartialDirectory::AssumeGood "true";' > rootdir/etc/apt/apt.conf.d/assumegooddirs.conf
+ chmod -f 555 rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists/auxfiles rootdir/var/lib/apt/lists/partial
+ testrundownload_internal "$@"
+ testnotempty find rootdir/var/lib/apt/lists/auxfiles
+ testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/auxfiles" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:555"
+
+ chmod -f 755 rootdir/var/lib/apt/lists/auxfiles
+ rm -f rootdir/var/lib/apt/lists/auxfiles/*
+ chmod -f 555 rootdir/var/lib/apt/lists/auxfiles
+ testrundownload_internal "$@"
+ testfilestats "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/auxfiles" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:555"
+ testempty find rootdir/var/lib/apt/lists/auxfiles ! -type d
+
+ chmod -f 755 rootdir/var/lib/apt/lists
+ rm -rf rootdir/var/lib/apt/lists/auxfiles
+ chmod -f 555 rootdir/var/lib/apt/lists
+ testrundownload_internal "$@"
+ chmod -f 755 rootdir/var/lib/apt/lists
+ testsuccess test ! -d rootdir/var/lib/apt/lists/auxfiles
+ rm -f rootdir/etc/apt/apt.conf.d/assumegooddirs.conf
+ fi
+}
+testrun() {
+ rm -rf rootdir/var/lib/apt/lists
+ testsuccess apt update #-o Debug::Acquire::mirror=1 -o Debug::Acquire::http=1 -o Debug::pkgAcquire::Worker=1
+ cp -a rootdir/tmp/testsuccess.output aptupdate.output
+ test -z "$1" || testempty find rootdir/var/lib/apt/lists -maxdepth 1 -name "$1" -type f
+ test -z "$2" || testnotempty find rootdir/var/lib/apt/lists -maxdepth 1 -name "$2" -type f
+ testsuccess apt show foo=1
+ testrundownload 'foo=1' 'foo=2'
+}
+
+msgmsg 'basic setup'
+testrun '' ''
+
+msgmsg 'redirect setup'
+sed -i -e 's#/ stable#/redirectme stable#' rootdir/etc/apt/sources.list.d/*-stable-*
+testrun '' '*_redirectme_*'
+
+msgmsg 'mirror file does not exist'
+sed -i -e 's# http:# mirror:#' -e 's#/redirectme stable#/mirror.txt stable#' rootdir/etc/apt/sources.list.d/*-stable-*
+testfailure apt update
+
+echo "http://localhost:${APTHTTPPORT}" > aptarchive/mirror.txt
+
+msgmsg 'stable mirror setup'
+testrun '*_redirectme_stable_*' '*_mirror.txt_*'
+
+msgmsg 'all mirror setup'
+sed -i -e 's# http:# mirror:#' -e 's#/ unstable#/mirror.txt unstable#' rootdir/etc/apt/sources.list.d/*
+testrun '*_redirectme_stable_*' '*_mirror.txt_*'
+
+msgmsg 'all mirror+http setup'
+sed -i -e 's# mirror:# mirror+http:#' rootdir/etc/apt/sources.list.d/*
+testrun '*_redirectme_*' '*_mirror.txt_*'
+
+msgmsg 'stable gzipped redirect setup'
+echo "http://localhost:${APTHTTPPORT}/redirectme" > aptarchive/mirror.txt
+compressfile aptarchive/mirror.txt
+sed -i -e 's#/mirror\.txt stable#/mirror.txt.gz stable#' rootdir/etc/apt/sources.list.d/*-stable-*
+testrun '*_redirectme_*' '*_mirror.txt.gz_*'
+
+msgmsg 'all mirrored via file'
+APTARCHIVE="$(readlink -f ./aptarchive)"
+sed -i -e "s#mirror+http://localhost:${APTHTTPPORT}#mirror+file:${APTARCHIVE}#" rootdir/etc/apt/sources.list.d/*
+testrun '*_localhost_*' '*_aptarchive_mirror.txt.gz_*'
+
+msgmsg 'fallback mirrors are used if needed' 'as usual'
+sed -i -e 's#/mirror\.txt\.gz stable#/mirror.txt stable#' rootdir/etc/apt/sources.list.d/*
+echo "http://localhost:${APTHTTPPORT}/failure2 priority:3
+http://localhost:${APTHTTPPORT}/redirectme priority:2
+http://localhost:${APTHTTPPORT}/failure priority:1" > aptarchive/mirror.txt
+testrun '*_localhost_*' '*_aptarchive_mirror.txt_*'
+testsuccessequal "Get:1 file:${APTARCHIVE}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Ign:2 http://localhost:${APTHTTPPORT}/failure stable InRelease
+ 404 Not Found
+Ign:3 http://localhost:${APTHTTPPORT}/failure unstable InRelease
+ 404 Not Found" head -n 5 aptupdate.output
+
+msgmsg 'fallback mirrors are used if needed' 'by tags'
+echo "http://localhost:${APTHTTPPORT}/failure2 priority:1 release:stable
+http://localhost:${APTHTTPPORT}/redirectme priority:2
+http://localhost:${APTHTTPPORT}/failure priority:1 release:unstable" > aptarchive/mirror.txt
+testrun '*_localhost_*' '*_aptarchive_mirror.txt_*'
+testsuccessequal "Get:1 file:${APTARCHIVE}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Ign:2 http://localhost:${APTHTTPPORT}/failure2 stable InRelease
+ 404 Not Found
+Ign:3 http://localhost:${APTHTTPPORT}/failure unstable InRelease
+ 404 Not Found" head -n 5 aptupdate.output
+
+changetohttpswebserver
+rm -f rootdir/etc/apt/sources.list.d/*-stable-*
+msgmsg 'fallback mirrors are used if needed' 'random'
+echo "http://localhost:${APTHTTPPORT}/failure2 priority:1
+http://localhost:${APTHTTPPORT}/redirectme priority:2
+https://localhost:${APTHTTPSPORT}/failure priority:1
+http://localhost:${APTHTTPPORT}/unused-failure1
+http://localhost:${APTHTTPPORT}/unused-failure2
+http://localhost:${APTHTTPPORT}/unused-failure3
+http://localhost:${APTHTTPPORT}/unused-failure4
+http://localhost:${APTHTTPPORT}/unused-failure5
+http://localhost:${APTHTTPPORT}/unused-failure6
+http://localhost:${APTHTTPPORT}/unused-failure7
+http://localhost:${APTHTTPPORT}/unused-failure8
+http://localhost:${APTHTTPPORT}/unused-failure9
+" > aptarchive/mirror.txt
+testequalor2 "Get:1 file:${APTARCHIVE}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Ign:2 http://localhost:${APTHTTPPORT}/failure2 unstable InRelease
+ 404 Not Found
+Ign:2 https://localhost:${APTHTTPSPORT}/failure unstable InRelease
+ 404 Not Found
+Hit:2 http://localhost:${APTHTTPPORT}/redirectme unstable InRelease
+Reading package lists...
+Building dependency tree...
+Reading state information...
+All packages are up to date." "Get:1 file:${APTARCHIVE}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Ign:2 https://localhost:${APTHTTPSPORT}/failure unstable InRelease
+ 404 Not Found
+Ign:2 http://localhost:${APTHTTPPORT}/failure2 unstable InRelease
+ 404 Not Found
+Hit:2 http://localhost:${APTHTTPPORT}/failure2 unstable InRelease
+Reading package lists...
+Building dependency tree...
+Reading state information...
+All packages are up to date." apt update
+testfailure grep '/unused-failure' aptarchive/webserver.log
+
+msgmsg 'Mirrors can be filtered by' 'type'
+echo "http://localhost:${APTHTTPPORT}/failure
+http://localhost:${APTHTTPPORT}/redirectme type:deb
+" > aptarchive/mirror.txt
+testfailure apt update
+testrundownload 'foo=2'
+
+msgmsg 'The prefix for the mirrorlist is' 'passed on'
+echo 'Dir::Bin::Methods::foo+mirror+file "mirror";
+Dir::Bin::Methods::foo+mirror+http "mirror";
+Dir::Bin::Methods::foo+http "http";
+Dir::Bin::Methods::foo+https "https";
+' > rootdir/etc/apt/apt.conf.d/99add-foo-method
+echo "http://localhost:${APTHTTPPORT}/redirectme
+" > aptarchive/mirror.txt
+testsuccessequal "Get:1 file:${APTARCHIVE}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Hit:2 http://localhost:${APTHTTPPORT}/redirectme unstable InRelease
+Reading package lists...
+Building dependency tree...
+Reading state information...
+All packages are up to date." apt update
+testrundownload 'foo=2'
+sed -i -e 's# mirror+# foo+mirror+#' rootdir/etc/apt/sources.list.d/*
+testfailure apt update
+testsuccess grep 'package apt-transport-foo installed' rootdir/tmp/testfailure.output
+echo 'Dir::Bin::Methods::foo+file "file";' >> rootdir/etc/apt/apt.conf.d/99add-foo-method
+testsuccessequal "Get:1 foo+file:${APTARCHIVE}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Hit:2 foo+http://localhost:${APTHTTPPORT}/redirectme unstable InRelease
+Reading package lists...
+Building dependency tree...
+Reading state information...
+All packages are up to date." apt update
+testrundownload 'foo=2'
+
+echo "file:/nonexistent/apt/archive priority:1
+http://localhost:${APTHTTPPORT}/redirectme
+" > aptarchive/mirror.txt
+testsuccessequal "Get:1 foo+file:${APTARCHIVE}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Get:2 foo+file:/nonexistent/apt/archive unstable InRelease
+Ign:2 foo+file:/nonexistent/apt/archive unstable InRelease
+ File not found - /nonexistent/apt/archive/dists/unstable/InRelease (2: No such file or directory)
+Hit:2 foo+http://localhost:${APTHTTPPORT}/redirectme unstable InRelease
+Reading package lists...
+Building dependency tree...
+Reading state information...
+All packages are up to date." apt update
+sed -i -e "s#+file:${APTARCHIVE}#+http://localhost:${APTHTTPPORT}#" rootdir/etc/apt/sources.list.d/*
+testsuccess apt update
+testrundownload 'foo=2'
+
+testsuccessequal "Get:1 foo+http://localhost:${APTHTTPPORT}/mirror.txt Mirrorlist [$(stat -c%s 'aptarchive/mirror.txt') B]
+Hit:2 foo+http://localhost:${APTHTTPPORT}/redirectme unstable InRelease
+Reading package lists...
+Building dependency tree...
+Reading state information...
+All packages are up to date." apt update
+testrundownload 'foo=2'
+
+echo "https://localhost:${APTHTTPSPORT}/
+http://localhost:${APTHTTPPORT}/redirectme" > aptarchive/mirror.txt
+rm -rf rootdir/var/lib/apt/lists
+sed -i -e "s# foo+# [signed-by=$(readlink -f ./keys/joesixpack.pub)] foo+#g" rootdir/etc/apt/sources.list.d/apt-test-unstable-deb*
+testsuccess apt update
+testrundownload 'foo=2'
+
+rm -rf rootdir/var/lib/apt/lists
+sed -i -e "s# \[signed-by=[^]]\+\] foo+# [signed-by=$(readlink -f ./keys/marvinparanoid.pub)] foo+#g" rootdir/etc/apt/sources.list.d/apt-test-unstable-deb*
+testfailure apt update
diff --git a/test/integration/test-method-rred b/test/integration/test-method-rred
new file mode 100755
index 0000000..5a885e9
--- /dev/null
+++ b/test/integration/test-method-rred
@@ -0,0 +1,197 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+echo 'Package: coolstuff
+Version: 0.8.15
+Description: collection of stuff
+ A lot, too much to iterate all, but at least this:
+ - stuff
+ - more stuff
+ - even more stuff
+ .
+ And a cow.
+
+Package: oldstuff
+Version: 0-1
+Description: collection of outdated stuff
+ A lot, but of no use nowadays, but at least this:
+ - stuff
+ - more stuff
+ - even more stuff
+ .
+ And a dog.' > Packages
+
+testrred() {
+ msgtest "$1" "$2"
+ if [ -z "$3" ]; then
+ echo -n '' > Packages.ed
+ else
+ echo "$3" > Packages.ed
+ fi
+ rred() {
+ cat Packages | runapt "${METHODSDIR}/rred" "$@"
+ }
+ testsuccessequal "$4" --nomsg rred -f Packages.ed
+ testsuccess runapt "${METHODSDIR}/rred" -t Packages Packages-patched Packages.ed
+ testfileequal Packages-patched "$4"
+}
+
+testrred 'Remove' 'first line' '1d' "$(tail -n +2 ./Packages)"
+testrred 'Remove' 'empty line' '10d' "$(head -n 9 ./Packages)
+$(tail -n 9 ./Packages)"
+testrred 'Remove' 'line in a paragraph' '5d' "$(head -n 4 ./Packages)
+$(tail -n 14 ./Packages)"
+testrred 'Remove' 'last line' '19d' "$(head -n -1 ./Packages)"
+testrred 'Remove' 'multiple single lines' '17d
+7d' "$(sed -e '/^ - even more stuff$/ d' ./Packages)"
+testrred 'Remove' 'first paragraph' '1,10d' "$(tail -n 9 ./Packages)"
+testrred 'Remove' 'a few lines in the middle' '5,14d' "$(head -n 4 ./Packages)
+$(tail -n 5 ./Packages)"
+testrred 'Remove' 'second paragraph' '10,19d' "$(head -n 9 ./Packages)"
+testrred 'Mass Remove' 'all stuff lines' '15,17d
+13d
+11d
+5,7d
+3d
+1d' "$(sed '/stuff/ d' ./Packages)"
+
+testrred 'Single line add' 'first line' '0a
+Format: 3.0 (native)
+.' "Format: 3.0 (native)
+$(cat ./Packages)"
+testrred 'Single line add' 'last line' '19a
+Multi-Arch: foreign
+.' "$(cat ./Packages)
+Multi-Arch: foreign"
+testrred 'Single line add' 'middle' '9a
+Multi-Arch: foreign
+.' "$(head -n 9 ./Packages)
+Multi-Arch: foreign
+$(tail -n 10 ./Packages)"
+
+testrred 'Multi line add' 'first line' '0a
+Format: 3.0 (native)
+Source: apt
+.' "Format: 3.0 (native)
+Source: apt
+$(cat ./Packages)"
+testrred 'Multi line add' 'last line' '19a
+Multi-Arch: foreign
+Homepage: https://debian.org
+.' "$(cat ./Packages)
+Multi-Arch: foreign
+Homepage: https://debian.org"
+testrred 'Multi line add' 'middle' '9a
+Multi-Arch: foreign
+Homepage: https://debian.org
+.' "$(head -n 9 ./Packages)
+Multi-Arch: foreign
+Homepage: https://debian.org
+$(tail -n 10 ./Packages)"
+
+testrred 'Single line change' 'first line' '1c
+Package: supercoolstuff
+.' "Package: supercoolstuff
+$(tail -n +2 ./Packages)"
+testrred 'Single line change' 'in the middle' '9c
+ And a super cow.
+.' "$(head -n 8 ./Packages)
+ And a super cow.
+$(tail -n 10 ./Packages)"
+testrred 'Single line change' 'an empty line' '10c
+
+.' "$(head -n 9 ./Packages)
+
+$(tail -n 9 ./Packages)"
+testrred 'Single line change' 'a spacy line' '10c
+
+.' "$(head -n 9 ./Packages)
+
+$(tail -n 9 ./Packages)"
+testrred 'Single line change' 'last line' '19c
+ And a cat.
+.' "$(head -n -1 ./Packages)
+ And a cat."
+
+testrred 'Multi line change' 'exchange' '5,7c
+ - good stuff
+ - more good stuff
+ - even more good stuff
+.' "$(head -n 4 ./Packages)
+ - good stuff
+ - more good stuff
+ - even more good stuff
+$(tail -n 12 ./Packages)"
+testrred 'Multi line change' 'less' '5,7c
+ - good stuff
+ - more good stuff
+.' "$(head -n 4 ./Packages)
+ - good stuff
+ - more good stuff
+$(tail -n 12 ./Packages)"
+testrred 'Multi line change' 'more' '5,7c
+ - good stuff
+ - more good stuff
+ - even more good stuff
+ - bonus good stuff
+.' "$(head -n 4 ./Packages)
+ - good stuff
+ - more good stuff
+ - even more good stuff
+ - bonus good stuff
+$(tail -n 12 ./Packages)"
+
+failrred() {
+ msgtest 'Failure caused by' "$1"
+ echo "$2" > Packages.ed
+ rred() {
+ cat Packages | runapt "${METHODSDIR}/rred" "$@"
+ }
+ testfailure --nomsg rred -f Packages.ed
+ testfailure runapt "${METHODSDIR}/rred" -t Packages Packages-patched Packages.ed
+}
+
+failrred 'Bogus content' '<html>
+</html>'
+
+# not a problem per-se, but we want our parser to be really strict
+failrred 'Empty patch file' ''
+failrred 'Empty line patch file' '
+'
+failrred 'Empty line before command' '
+1d'
+failrred 'Empty line after command' '1d
+'
+failrred 'Empty line between commands' '17d
+
+7d'
+failrred 'Empty spaces lines before command' '
+1d'
+failrred 'Empty spaces lines after command' '1d
+ '
+failrred 'Empty spaces lines between commands' '17d
+
+7d'
+
+# the line before the first one can't be deleted/changed
+failrred 'zero line delete' '0d'
+failrred 'zero line change' '0c
+Package: supercoolstuff
+.'
+# and this makes no sense at all
+failrred 'negative line delete' '-1d'
+failrred 'negative line change' '-1c
+Package: supercoolstuff
+.'
+failrred 'negative line add' '-1a
+Package: supercoolstuff
+.'
+failrred 'Wrong order of commands' '7d
+17d'
+failrred 'End before start' '7,6d'
diff --git a/test/integration/test-multiarch-allowed b/test/integration/test-multiarch-allowed
new file mode 100755
index 0000000..98555bc
--- /dev/null
+++ b/test/integration/test-multiarch-allowed
@@ -0,0 +1,302 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable' 'foo' 'amd64,i386' '1' 'Multi-Arch: allowed'
+insertpackage 'unstable' 'needsfoo' 'amd64,i386' '1' 'Depends: foo'
+insertpackage 'unstable' 'needsfooany' 'amd64,i386' '1' 'Depends: foo:any'
+insertpackage 'unstable' 'needsfoover1' 'amd64,i386' '1' 'Depends: foo:any (>= 1)'
+insertpackage 'unstable' 'needsfoover2' 'amd64,i386' '1' 'Depends: foo:any (>= 2)'
+insertpackage 'unstable' 'hatesfoo' 'amd64' '1' 'Conflicts: foo'
+insertpackage 'unstable' 'hatesfooany' 'amd64' '1' 'Conflicts: foo:any' # this makes no sense…?
+insertpackage 'unstable' 'hatesfoonative' 'amd64' '1' 'Conflicts: foo:amd64'
+
+insertpackage 'unstable' 'coolfoo' 'amd64' '1' 'Multi-Arch:allowed
+Provides: coolbar'
+insertpackage 'unstable' 'coolfoover' 'amd64' '1' 'Multi-Arch:allowed
+Provides: coolbar (= 2)'
+insertpackage 'unstable' 'needscoolfoo' 'amd64' '1' 'Depends: coolfoo, coolbar'
+insertpackage 'unstable' 'needscoolfooany' 'amd64' '1' 'Depends: coolfoo:any, coolbar:any'
+insertpackage 'unstable' 'needscoolfoover0' 'amd64' '1' 'Depends: coolfoo:any (>= 1), coolbar:any'
+insertpackage 'unstable' 'needscoolfoover1' 'amd64' '1' 'Depends: coolfoo:any (>= 1), coolbar:any (>= 1)'
+insertpackage 'unstable' 'needscoolfoover2' 'amd64' '1' 'Depends: coolfoo:any (>= 2), coolbar:any (>= 1)'
+insertpackage 'unstable' 'needscoolfoover3' 'amd64' '1' 'Depends: coolfoo:any (>= 2), coolbar:any (>= 3)'
+
+setupaptarchive
+
+BADPREFIX='Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+'
+
+solveableinsinglearch0() {
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo needsfoo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [amd64])
+Inst needsfoo (1 unstable [amd64])
+Conf foo (1 unstable [amd64])
+Conf needsfoo (1 unstable [amd64])' aptget install needsfoo -s
+}
+solveableinsinglearch0
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo:i386
+The following NEW packages will be installed:
+ foo:i386 needsfoo:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:i386 (1 unstable [i386])
+Inst needsfoo:i386 (1 unstable [i386])
+Conf foo:i386 (1 unstable [i386])
+Conf needsfoo:i386 (1 unstable [i386])' aptget install needsfoo:i386 -s
+testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ needsfoo:i386 : Depends: foo:i386 but it is not going to be installed
+E: Unable to correct problems, you have held broken packages." aptget install needsfoo:i386 foo:amd64 -s
+testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ needsfoo : Depends: foo but it is not going to be installed
+E: Unable to correct problems, you have held broken packages." aptget install needsfoo foo:i386 -s
+
+solveableinsinglearch1() {
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo $1
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [amd64])
+Inst $1 (1 unstable [amd64])
+Conf foo (1 unstable [amd64])
+Conf $1 (1 unstable [amd64])" aptget install $1 -s
+}
+
+testneedsfooallgood() {
+ solveableinsinglearch1 $1
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ foo $1:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [amd64])
+Inst $1:i386 (1 unstable [i386])
+Conf foo (1 unstable [amd64])
+Conf $1:i386 (1 unstable [i386])" aptget install $1:i386 -s
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo:i386 $1:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:i386 (1 unstable [i386])
+Inst $1:i386 (1 unstable [i386])
+Conf foo:i386 (1 unstable [i386])
+Conf $1:i386 (1 unstable [i386])" aptget install $1:i386 foo:i386 -s
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo:i386 $1
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:i386 (1 unstable [i386])
+Inst $1 (1 unstable [amd64])
+Conf foo:i386 (1 unstable [i386])
+Conf $1 (1 unstable [amd64])" aptget install $1 foo:i386 -s
+}
+testneedsfooallgood 'needsfooany'
+testneedsfooallgood 'needsfoover1'
+
+NEEDSFOO2NATIVE="$BADPREFIX
+The following packages have unmet dependencies:
+ needsfoover2 : Depends: foo:any (>= 2)
+E: Unable to correct problems, you have held broken packages."
+NEEDSFOO2FOREIGN="$BADPREFIX
+The following packages have unmet dependencies:
+ needsfoover2:i386 : Depends: foo:any (>= 2)
+E: Unable to correct problems, you have held broken packages."
+testfailureequal "$NEEDSFOO2NATIVE" aptget install needsfoover2 -s
+testfailureequal "$NEEDSFOO2FOREIGN" aptget install needsfoover2:i386 -s
+testfailureequal "$NEEDSFOO2FOREIGN" aptget install needsfoover2:i386 foo:i386 -s
+testfailureequal "$NEEDSFOO2NATIVE" aptget install needsfoover2 foo:i386 -s
+
+solveableinsinglearch2() {
+ testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ hatesfoo : Conflicts: foo but 1 is to be installed
+E: Unable to correct problems, you have held broken packages." aptget install foo hatesfoo -s
+ # the message differs slightly between single and multiarch
+ testfailuremsg 'E: Unable to correct problems, you have held broken packages.' aptget install foo hatesfooany -s
+ testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ hatesfoonative : Conflicts: foo:amd64
+E: Unable to correct problems, you have held broken packages." aptget install foo hatesfoonative -s
+}
+solveableinsinglearch2
+testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ hatesfoo : Conflicts: foo:i386 but 1 is to be installed
+E: Unable to correct problems, you have held broken packages." aptget install foo:i386 hatesfoo -s
+testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ hatesfooany : Conflicts: foo:any
+E: Unable to correct problems, you have held broken packages." aptget install foo:i386 hatesfooany -s
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo:i386 hatesfoonative
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:i386 (1 unstable [i386])
+Inst hatesfoonative (1 unstable [amd64])
+Conf foo:i386 (1 unstable [i386])
+Conf hatesfoonative (1 unstable [amd64])' aptget install foo:i386 hatesfoonative -s
+
+solveableinsinglearch3() {
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ coolfoo
+The following NEW packages will be installed:
+ coolfoo needscoolfoo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst coolfoo (1 unstable [amd64])
+Inst needscoolfoo (1 unstable [amd64])
+Conf coolfoo (1 unstable [amd64])
+Conf needscoolfoo (1 unstable [amd64])" aptget install needscoolfoo -s
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ coolfoo
+The following NEW packages will be installed:
+ coolfoo coolfoover needscoolfoo
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst coolfoo (1 unstable [amd64])
+Inst coolfoover (1 unstable [amd64])
+Inst needscoolfoo (1 unstable [amd64])
+Conf coolfoo (1 unstable [amd64])
+Conf coolfoover (1 unstable [amd64])
+Conf needscoolfoo (1 unstable [amd64])" aptget install needscoolfoo coolfoover -s
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ coolfoo
+The following NEW packages will be installed:
+ coolfoo needscoolfooany
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst coolfoo (1 unstable [amd64])
+Inst needscoolfooany (1 unstable [amd64])
+Conf coolfoo (1 unstable [amd64])
+Conf needscoolfooany (1 unstable [amd64])" aptget install needscoolfooany -s
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ coolfoo
+The following NEW packages will be installed:
+ coolfoo needscoolfoover0
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst coolfoo (1 unstable [amd64])
+Inst needscoolfoover0 (1 unstable [amd64])
+Conf coolfoo (1 unstable [amd64])
+Conf needscoolfoover0 (1 unstable [amd64])' aptget install needscoolfoover0 -s
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ coolfoo coolfoover
+The following NEW packages will be installed:
+ coolfoo coolfoover needscoolfoover1
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst coolfoo (1 unstable [amd64])
+Inst coolfoover (1 unstable [amd64])
+Inst needscoolfoover1 (1 unstable [amd64])
+Conf coolfoo (1 unstable [amd64])
+Conf coolfoover (1 unstable [amd64])
+Conf needscoolfoover1 (1 unstable [amd64])' aptget install needscoolfoover1 -s
+ testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ needscoolfoover2 : Depends: coolfoo:any (>= 2)
+E: Unable to correct problems, you have held broken packages." aptget install needscoolfoover2 -s
+ testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ needscoolfoover3 : Depends: coolfoo:any (>= 2)
+ Depends: coolbar:any (>= 3)
+E: Unable to correct problems, you have held broken packages." aptget install needscoolfoover3 -s
+}
+solveableinsinglearch3
+
+msgmsg 'switch to single architecture'
+configarchitecture 'amd64'
+
+solveableinsinglearch0
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Unable to locate package needsfoo:i386' aptget install needsfoo:i386 -s
+
+solveableinsinglearch1 'needsfooany'
+solveableinsinglearch1 'needsfoover1'
+testfailureequal "$NEEDSFOO2NATIVE" aptget install needsfoover2 -s
+solveableinsinglearch2
+solveableinsinglearch3
+
+msgmsg 'multi-arch with barbarian archs'
+configarchitecture 'amd64' 'i386'
+insertinstalledpackage 'foo' 'armel' '1' 'Multi-Arch: allowed'
+insertinstalledpackage 'coolfoo' 'armel' '1' 'Multi-Arch:allowed
+Provides: coolbar'
+insertinstalledpackage 'bar-needer' 'armel' '1.0' 'Depends: coolbar:any'
+
+testsuccess aptget check
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following packages will be REMOVED:
+ foo:armel
+The following NEW packages will be installed:
+ foo needsfooany
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:armel [1]
+Inst foo (1 unstable [amd64])
+Inst needsfooany (1 unstable [amd64])
+Conf foo (1 unstable [amd64])
+Conf needsfooany (1 unstable [amd64])' aptget install needsfooany -s
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following packages will be REMOVED:
+ foo:armel
+The following NEW packages will be installed:
+ foo needsfooany:i386
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:armel [1]
+Inst foo (1 unstable [amd64])
+Inst needsfooany:i386 (1 unstable [i386])
+Conf foo (1 unstable [amd64])
+Conf needsfooany:i386 (1 unstable [i386])' aptget install needsfooany:i386 -s
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ coolfoo
+The following packages will be REMOVED:
+ coolfoo:armel
+The following NEW packages will be installed:
+ coolfoo needscoolfoover0
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv coolfoo:armel [1] [bar-needer:armel ]
+Inst coolfoo (1 unstable [amd64])
+Inst needscoolfoover0 (1 unstable [amd64])
+Conf coolfoo (1 unstable [amd64])
+Conf needscoolfoover0 (1 unstable [amd64])' aptget install needscoolfoover0 -s
diff --git a/test/integration/test-multiarch-foreign b/test/integration/test-multiarch-foreign
new file mode 100755
index 0000000..713b27b
--- /dev/null
+++ b/test/integration/test-multiarch-foreign
@@ -0,0 +1,287 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386' 'armel'
+
+insertpackage 'unstable' 'cool-foo' 'amd64,i386' '1.0' 'Depends: foo'
+insertpackage 'unstable' 'cool-foo-x64' 'amd64' '1.0' 'Depends: foo:amd64'
+insertpackage 'unstable' 'cool-foo-x32' 'amd64' '1.0' 'Depends: foo:i386'
+insertpackage 'unstable' 'hates-foo' 'amd64,i386' '1.0' 'Conflicts: foo'
+insertpackage 'unstable' 'hates-foo-x64' 'amd64' '1.0' 'Conflicts: foo:amd64'
+insertpackage 'unstable' 'hates-foo-x32' 'amd64' '1.0' 'Conflicts: foo:i386'
+insertpackage 'unstable' 'foo' 'amd64,i386,armel' '1.0' 'Multi-Arch: foreign'
+
+insertpackage 'unstable' 'cool-bar' 'amd64,i386' '1.0' 'Depends: bar-provider'
+insertpackage 'unstable' 'cool-bar-x64' 'amd64' '1.0' 'Depends: bar-provider:amd64'
+insertpackage 'unstable' 'cool-bar-x32' 'amd64' '1.0' 'Depends: bar-provider:i386'
+insertpackage 'unstable' 'hates-bar' 'amd64,i386' '1.0' 'Conflicts: bar-provider'
+insertpackage 'unstable' 'hates-bar-x64' 'amd64' '1.0' 'Conflicts: bar-provider:amd64'
+insertpackage 'unstable' 'hates-bar-x32' 'amd64' '1.0' 'Conflicts: bar-provider:i386'
+insertpackage 'unstable' 'bar' 'amd64,i386,armel' '1.0' 'Provides: bar-provider
+Multi-Arch: foreign'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ cool-foo:i386 foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo:i386 (1.0 unstable [i386])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo:i386 (1.0 unstable [i386])' aptget install cool-foo:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ cool-foo foo:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:i386 (1.0 unstable [i386])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo:i386 (1.0 unstable [i386])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ cool-foo foo:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:armel (1.0 unstable [armel])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo:armel (1.0 unstable [armel])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:armel -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ bar
+The following NEW packages will be installed:
+ bar cool-bar:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar:i386 (1.0 unstable [i386])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar:i386 (1.0 unstable [i386])' aptget install cool-bar:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar:i386 cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar:i386 (1.0 unstable [i386])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar:i386 (1.0 unstable [i386])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar:armel cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar:armel (1.0 unstable [armel])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar:armel (1.0 unstable [armel])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'bar:i386' instead of 'bar-provider:i386'
+The following NEW packages will be installed:
+ bar:i386 cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar:i386 (1.0 unstable [i386])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar:i386 (1.0 unstable [i386])
+Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s
+
+satisfiable_in_singlearch() {
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ cool-foo foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ cool-foo foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ bar
+The following NEW packages will be installed:
+ bar cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 -s
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:amd64 -s
+
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'bar' instead of 'bar-provider'
+The following NEW packages will be installed:
+ bar cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ cool-foo-x64 foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo-x64 (1.0 unstable [amd64])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo-x64 (1.0 unstable [amd64])' aptget install cool-foo-x64 -s
+}
+
+hatersgonnahate() {
+ BADPREFIX='Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+'
+ testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ hates-foo : Conflicts: foo
+ Conflicts: foo:i386
+ Conflicts: foo:armel
+E: Unable to correct problems, you have held broken packages." aptget install $1 hates-foo -s
+ testfailureequal "$BADPREFIX
+The following packages have unmet dependencies:
+ $2 : Conflicts: foo:$4
+E: Unable to correct problems, you have held broken packages." aptget install $1 $2 -s
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ $1 $3
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst $1 (1.0 unstable [$4])
+Inst $3 (1.0 unstable [amd64])
+Conf $1 (1.0 unstable [$4])
+Conf $3 (1.0 unstable [amd64])" aptget install $1 $3 -s
+}
+hatersgonnahate 'foo' 'hates-foo-x64' 'hates-foo-x32' 'amd64'
+hatersgonnahate 'foo:i386' 'hates-foo-x32' 'hates-foo-x64' 'i386'
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo:i386
+The following NEW packages will be installed:
+ cool-foo-x32 foo:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:i386 (1.0 unstable [i386])
+Inst cool-foo-x32 (1.0 unstable [amd64])
+Conf foo:i386 (1.0 unstable [i386])
+Conf cool-foo-x32 (1.0 unstable [amd64])' aptget install cool-foo-x32 -s
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ bar:i386
+The following NEW packages will be installed:
+ bar:i386 cool-bar-x32
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar:i386 (1.0 unstable [i386])
+Inst cool-bar-x32 (1.0 unstable [amd64])
+Conf bar:i386 (1.0 unstable [i386])
+Conf cool-bar-x32 (1.0 unstable [amd64])' aptget install cool-bar-x32 -s
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ bar
+The following NEW packages will be installed:
+ bar cool-bar-x64
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar-x64 (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar-x64 (1.0 unstable [amd64])' aptget install cool-bar-x64 -s
+
+
+satisfiable_in_singlearch
+
+msgmsg 'switch to single architecture'
+configarchitecture 'amd64'
+
+satisfiable_in_singlearch
+
+msgmsg 'switch to multi-arch with barbarian architecture'
+
+insertinstalledpackage 'foo' 'armhf' '1.0' 'Multi-Arch: foreign'
+insertinstalledpackage 'bar' 'armhf' '1.0' 'Provides: bar-provider
+Multi-Arch: foreign'
+insertinstalledpackage 'bar-needer' 'armhf' '1.0' 'Depends: bar-provider'
+
+testsuccess aptget check
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following packages will be REMOVED:
+ foo:armhf
+The following NEW packages will be installed:
+ cool-foo foo
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:armhf [1.0]
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo -s
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ bar
+The following packages will be REMOVED:
+ bar:armhf
+The following NEW packages will be installed:
+ bar cool-bar
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv bar:armhf [1.0] [bar-needer:armhf ]
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar -s
+
+# a barbarian doesn't satisfy another either
+insertinstalledpackage 'bar-needer2' 's390x' '1.0' 'Depends: bar-provider'
+testfailure aptget check
diff --git a/test/integration/test-no-fds-leaked-to-maintainer-scripts b/test/integration/test-no-fds-leaked-to-maintainer-scripts
new file mode 100755
index 0000000..85b3d0e
--- /dev/null
+++ b/test/integration/test-no-fds-leaked-to-maintainer-scripts
@@ -0,0 +1,179 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64' 'i386'
+configdpkgnoopchroot
+
+if [ ! -e /proc/self/fd ]; then
+ msgskip "needs /proc/self/fd"
+ exit 0
+fi
+
+setupsimplenativepackage "fdleaks" 'all' '1.0' 'unstable'
+BUILDDIR="incoming/fdleaks-1.0"
+for script in 'preinst' 'postinst' 'prerm' 'postrm'; do
+ cat > ${BUILDDIR}/debian/$script << EOF
+#!/bin/sh
+if [ -e '$(pwd)/rootdir/tmp/read_stdin' ]; then
+ read line;
+ echo "STDIN: -\$line-"
+fi
+ls -l /proc/self/fd/
+EOF
+done
+buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
+rm -rf "$BUILDDIR"
+
+PKGNAME='fdleaks:all'
+if dpkg --compare-versions "$(dpkg_version)" 'lt' '1.16.2'; then
+ PKGNAME='fdleaks'
+fi
+
+setupaptarchive
+
+rm -f rootdir/var/log/dpkg.log rootdir/var/log/apt/term.log
+testsuccess aptget install -y fdleaks -qq < /dev/null
+
+checkfdleak() {
+ msgtest 'Check if fds were not' "leaked: expect $1"
+ if [ "$(grep 'root root' rootdir/tmp/testsuccess.output | wc -l)" = "$1" ]; then
+ msgpass
+ else
+ echo
+ cat rootdir/tmp/testsuccess.output
+ msgfail
+ fi
+}
+checkinstall() {
+ checkfdleak 8
+
+ cp rootdir/tmp/testsuccess.output terminal.output
+ tail -n +3 rootdir/var/log/apt/term.log | head -n -1 > terminal.log
+ testfileequal 'terminal.log' "$(cat terminal.output)"
+
+ testequalor2 "startup archives unpack
+install $PKGNAME <none> 1.0
+status half-installed $PKGNAME 1.0
+status unpacked $PKGNAME 1.0
+startup packages configure
+configure $PKGNAME 1.0 <none>
+status unpacked $PKGNAME 1.0
+status half-configured $PKGNAME 1.0
+status installed $PKGNAME 1.0" "startup archives unpack
+install $PKGNAME <none> 1.0
+status half-installed $PKGNAME 1.0
+status unpacked $PKGNAME 1.0
+status unpacked $PKGNAME 1.0
+startup packages configure
+configure $PKGNAME 1.0 <none>
+status unpacked $PKGNAME 1.0
+status half-configured $PKGNAME 1.0
+status installed $PKGNAME 1.0" cut -f 3- -d' ' rootdir/var/log/dpkg.log
+}
+checkinstall
+
+rm -f rootdir/var/log/dpkg.log rootdir/var/log/apt/term.log
+testsuccess aptget purge -y fdleaks -qq
+checkpurge() {
+ checkfdleak 12
+
+ cp rootdir/tmp/testsuccess.output terminal.output
+ tail -n +3 rootdir/var/log/apt/term.log | head -n -1 > terminal.log
+ testfileequal 'terminal.log' "$(cat terminal.output)"
+
+ if dpkg --compare-versions "$(dpkg_version)" 'ge' '1.18.11'; then
+ testequalor2 "startup packages remove
+status installed $PKGNAME 1.0
+remove $PKGNAME 1.0 <none>
+status half-configured $PKGNAME 1.0
+status half-installed $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+startup packages configure
+startup packages purge
+purge $PKGNAME 1.0 <none>
+status config-files $PKGNAME 1.0
+status not-installed $PKGNAME <none>
+startup packages configure" "startup packages remove
+status installed $PKGNAME 1.0
+remove $PKGNAME 1.0 <none>
+status half-configured $PKGNAME 1.0
+status half-installed $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+startup packages configure
+startup packages purge
+purge $PKGNAME 1.0 <none>
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status not-installed $PKGNAME <none>
+startup packages configure" cut -f 3- -d' ' rootdir/var/log/dpkg.log
+ else
+ testequalor2 "startup packages remove
+status installed $PKGNAME 1.0
+remove $PKGNAME 1.0 <none>
+status half-configured $PKGNAME 1.0
+status half-installed $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+startup packages configure
+startup packages purge
+remove $PKGNAME 1.0 <none>
+purge $PKGNAME 1.0 <none>
+status config-files $PKGNAME 1.0
+status not-installed $PKGNAME <none>
+startup packages configure" "startup packages remove
+status installed $PKGNAME 1.0
+remove $PKGNAME 1.0 <none>
+status half-configured $PKGNAME 1.0
+status half-installed $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+startup packages configure
+startup packages purge
+remove $PKGNAME 1.0 <none>
+purge $PKGNAME 1.0 <none>
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status config-files $PKGNAME 1.0
+status not-installed $PKGNAME <none>
+startup packages configure" cut -f 3- -d' ' rootdir/var/log/dpkg.log
+ fi
+ testequalor2 "dpkg-query: no packages found matching ${PKGNAME}" "No packages found matching ${PKGNAME}." dpkg -l "$PKGNAME"
+}
+checkpurge
+
+msgtest 'setsid provided is new enough to support' '-w'
+if dpkg-checkbuilddeps -d 'util-linux (>= 2.24.2-1)' /dev/null >/dev/null 2>&1; then
+ msgpass
+else
+ msgskip "$(command dpkg -l util-linux)"
+ exit
+fi
+
+rm -f rootdir/var/log/dpkg.log rootdir/var/log/apt/term.log
+testsuccess runapt command setsid -w "${BUILDDIRECTORY}/apt-get" install -y fdleaks -qq < /dev/null
+checkinstall
+
+rm -f rootdir/var/log/dpkg.log rootdir/var/log/apt/term.log
+testsuccess runapt command setsid -w "${BUILDDIRECTORY}/apt-get" purge -y fdleaks -qq
+checkpurge
+
+touch rootdir/tmp/read_stdin
+
+rm -f rootdir/var/log/dpkg.log rootdir/var/log/apt/term.log
+for i in $(seq 1 10); do echo "$i"; done | testsuccess aptget install -y fdleaks -qq
+checkinstall
+testequal '2' grep -c '^STDIN: ' rootdir/var/log/apt/term.log
+
+rm -f rootdir/var/log/dpkg.log rootdir/var/log/apt/term.log
+yes '' | testsuccess runapt command setsid -w "${BUILDDIRECTORY}/apt-get" purge -y fdleaks -qq
+checkpurge
+testequal '3' grep -c '^STDIN: ' rootdir/var/log/apt/term.log
diff --git a/test/integration/test-package-reinstallation b/test/integration/test-package-reinstallation
new file mode 100755
index 0000000..0b48c0a
--- /dev/null
+++ b/test/integration/test-package-reinstallation
@@ -0,0 +1,23 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertinstalledpackage 'libc-bin' 'i386' '2.13-8' 'Replaces: libc6'
+insertpackage 'unstable' 'libc-bin' 'i386' '2.13-8' 'Replaces: libc6'
+insertinstalledpackage 'libc6' 'i386' '2.13-8' 'Depends: libc-bin (= 2.13-8)'
+insertpackage 'unstable' 'libc6' 'i386' '2.13-8' 'Depends: libc-bin (= 2.13-8)'
+insertinstalledpackage 'apt' 'i386' '0.8.15' 'Depends: libc6'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded.
+Inst libc-bin [2.13-8] (2.13-8 unstable [i386])
+Conf libc-bin (2.13-8 unstable [i386])
+Inst libc6 [2.13-8] (2.13-8 unstable [i386])
+Conf libc6 (2.13-8 unstable [i386])' aptget install --reinstall libc6 libc-bin -s
diff --git a/test/integration/test-packages-require-authorization b/test/integration/test-packages-require-authorization
new file mode 100755
index 0000000..527497c
--- /dev/null
+++ b/test/integration/test-packages-require-authorization
@@ -0,0 +1,61 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'cool' 'amd64' '1.0'
+
+export APT_DONT_SIGN='InRelease'
+setupaptarchive --no-update
+changetowebserver
+
+echo 'Packages-Require-Authorization: yes' >> aptarchive/dists/unstable/Release
+signreleasefiles
+
+testsuccess aptget update
+testsuccessequal "Package files:
+ 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status
+ release a=now
+-32768 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
+ release a=unstable,n=sid,c=main,b=amd64
+ origin localhost
+Pinned packages:" aptcache policy
+
+mkdir rootdir/etc/apt/auth.conf.d
+cat > rootdir/etc/apt/auth.conf.d/myauth.conf << EOF
+machine localhost
+login username
+password usersPassword
+EOF
+
+
+testsuccessequal "Package files:
+ 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status
+ release a=now
+ 500 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
+ release a=unstable,n=sid,c=main,b=amd64
+ origin localhost
+Pinned packages:" aptcache policy
+
+
+cat > rootdir/etc/apt/preferences.d/myauth.pref << EOF
+Package: *
+Pin: origin localhost
+Pin-Priority: 990
+
+Package: cool
+Pin: origin localhost
+Pin-Priority: 990
+EOF
+
+testsuccessequal "Package files:
+ 100 ${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status
+ release a=now
+ 990 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
+ release a=unstable,n=sid,c=main,b=amd64
+ origin localhost
+Pinned packages:
+ cool -> 1.0 with priority 990" aptcache policy
diff --git a/test/integration/test-parse-all-archs-into-cache b/test/integration/test-parse-all-archs-into-cache
new file mode 100755
index 0000000..7485431
--- /dev/null
+++ b/test/integration/test-parse-all-archs-into-cache
@@ -0,0 +1,93 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'bar' 'i386' '1' 'Depends: foo'
+insertpackage 'unstable' 'foo' 'i386' '1' 'Multi-Arch: foreign
+Depends: libfoo1'
+insertpackage 'unstable' 'libfoo1' 'i386' '1' 'Multi-Arch: same'
+insertpackage 'experimental' 'foo' 'i386' '2' 'Multi-Arch: foreign
+Depends: libfoo1 (>= 2)'
+insertpackage 'experimental' 'libfoo1' 'i386' '2' 'Multi-Arch: same'
+
+# note: the system has amd64 not configured!
+insertinstalledpackage 'foo' 'amd64' '1' 'Multi-Arch: foreign
+Depends: libfoo1'
+
+setupaptarchive
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+You might want to run 'apt --fix-broken install' to correct these.
+The following packages have unmet dependencies:
+ foo:amd64 : Depends: libfoo1:amd64 but it is not installable
+E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution)." aptget check -s
+
+insertinstalledpackage 'libfoo1' 'amd64' '1' 'Multi-Arch: same'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...' aptget check -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libfoo1
+The following packages will be REMOVED:
+ foo:amd64
+The following NEW packages will be installed:
+ foo libfoo1
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:amd64 [1]
+Inst libfoo1 (1 unstable [i386])
+Inst foo (1 unstable [i386])
+Conf libfoo1 (1 unstable [i386])
+Conf foo (1 unstable [i386])' aptget install foo -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Selected version '2' (experimental [i386]) for 'foo'
+Selected version '2' (experimental [i386]) for 'libfoo1' because of 'foo'
+The following additional packages will be installed:
+ libfoo1
+The following packages will be REMOVED:
+ foo:amd64 libfoo1:amd64
+The following NEW packages will be installed:
+ foo libfoo1
+0 upgraded, 2 newly installed, 2 to remove and 0 not upgraded.
+Remv foo:amd64 [1]
+Remv libfoo1:amd64 [1]
+Inst libfoo1 (2 experimental [i386])
+Inst foo (2 experimental [i386])
+Conf libfoo1 (2 experimental [i386])
+Conf foo (2 experimental [i386])" aptget install foo/experimental -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo libfoo1
+The following packages will be REMOVED:
+ foo:amd64
+The following NEW packages will be installed:
+ bar foo libfoo1
+0 upgraded, 3 newly installed, 1 to remove and 0 not upgraded.
+Remv foo:amd64 [1]
+Inst libfoo1 (1 unstable [i386])
+Inst foo (1 unstable [i386])
+Inst bar (1 unstable [i386])
+Conf libfoo1 (1 unstable [i386])
+Conf foo (1 unstable [i386])
+Conf bar (1 unstable [i386])' aptget install bar -s
+
+configarchitecture 'i386' 'amd64'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ bar
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1 unstable [i386])
+Conf bar (1 unstable [i386])' aptget install bar -s
diff --git a/test/integration/test-partial-file-support b/test/integration/test-partial-file-support
new file mode 100755
index 0000000..88fa913
--- /dev/null
+++ b/test/integration/test-partial-file-support
@@ -0,0 +1,157 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+changetowebserver
+
+copysource() {
+ dd if="$1" bs=1 count="$2" of="$3" 2>/dev/null
+ touch -d "$(stat --format '%y' "${TESTFILE}")" "$3"
+}
+
+DOWNLOADLOG='rootdir/tmp/testdownloadfile.log'
+
+testdownloadfile() {
+ rm -f "$DOWNLOADLOG"
+ msgtest "Testing download of file $2 with" "$1 $5"
+ if ! downloadfile "$2" "$3" "$5" > "$DOWNLOADLOG"; then
+ cat >&2 "$DOWNLOADLOG"
+ msgfail
+ else
+ msgpass
+ fi
+ sed -e '/^ <- / s#%20# #g' -e '/^ <- / s#%0a#\n#g' "$DOWNLOADLOG" | grep '^.*-Hash: ' > receivedhashes.log || true
+ testsuccess test -s receivedhashes.log
+ local HASHES_OK=0
+ local HASHES_BAD=0
+ while read field hash; do
+ local EXPECTED
+ case "$field" in
+ 'MD5Sum-Hash:') EXPECTED="$(md5sum "$TESTFILE" | cut -d' ' -f 1)";;
+ 'SHA1-Hash:') EXPECTED="$(sha1sum "$TESTFILE" | cut -d' ' -f 1)";;
+ 'SHA256-Hash:') EXPECTED="$(sha256sum "$TESTFILE" | cut -d' ' -f 1)";;
+ 'SHA512-Hash:') EXPECTED="$(sha512sum "$TESTFILE" | cut -d' ' -f 1)";;
+ 'Checksum-FileSize-Hash:')
+ #filesize is too weak to check for !=
+ if [ "$4" = '=' ]; then
+ EXPECTED="$(stat -c '%s' "$TESTFILE")"
+ else
+ continue
+ fi
+ ;;
+ *) continue;;
+ esac
+ if [ "$4" = '=' ]; then
+ msgtest 'Test downloaded file for correct' "$field"
+ else
+ msgtest 'Test downloaded file does not match in' "$field"
+ fi
+ if [ "$EXPECTED" "$4" "$hash" ]; then
+ msgpass
+ HASHES_OK=$((HASHES_OK+1));
+ else
+ msgfail "expected: $EXPECTED ; got: $hash"
+ HASHES_BAD=$((HASHES_BAD+1));
+ fi
+ done < receivedhashes.log
+ msgtest 'At least one good hash and no bad ones'
+ if [ $HASHES_OK -eq 0 ] || [ $HASHES_BAD -ne 0 ]; then
+ cat >&2 "$DOWNLOADLOG"
+ msgfail
+ else
+ msgpass
+ fi
+}
+
+TESTFILE='aptarchive/testfile'
+cp -a "${TESTDIR}/framework" "$TESTFILE"
+cp -a "${TESTDIR}/framework" "${TESTFILE}2"
+
+followuprequest() {
+ local DOWN='./downloaded/testfile'
+
+ copysource $TESTFILE 1M $DOWN
+ testdownloadfile 'completely downloaded file' "${1}/testfile" "$DOWN" '='
+ testwebserverlaststatuscode '416' "$DOWNLOADLOG"
+
+ webserverconfig 'aptwebserver::support::content-range' 'false'
+ copysource $TESTFILE 1M $DOWN
+ testdownloadfile 'completely downloaded file' "${1}/testfile" "$DOWN" '=' "SHA256:$(sha256sum "$TESTFILE" | cut -d' ' -f 1)"
+ testwebserverlaststatuscode '416' "$DOWNLOADLOG"
+ webserverconfig 'aptwebserver::support::content-range' 'true'
+
+ copysource $TESTFILE 1M $DOWN
+ copysource "${TESTFILE}2" 20 "${DOWN}2"
+ msgtest 'Testing download of files with' 'completely downloaded file + partial file'
+ testsuccess --nomsg apthelper -o Debug::Acquire::${1%%:*}=1 -o Debug::pkgAcquire::Worker=1 \
+ download-file "$1/testfile" "$DOWN" '' "$1/testfile2" "${DOWN}2"
+ testwebserverlaststatuscode '206' 'rootdir/tmp/testsuccess.output'
+ testsuccess diff -u "$TESTFILE" "${DOWN}"
+ testsuccess diff -u "${DOWN}" "${DOWN}2"
+}
+
+testrun() {
+ webserverconfig 'aptwebserver::support::range' 'true'
+ webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'bytes'
+ local DOWN='./downloaded/testfile'
+
+ copysource $TESTFILE 0 $DOWN
+ testdownloadfile 'no data' "${1}/testfile" "$DOWN" '='
+ testwebserverlaststatuscode '200' "$DOWNLOADLOG"
+
+ copysource $TESTFILE 20 $DOWN
+ testdownloadfile 'valid partial data' "${1}/testfile" "$DOWN" '='
+ testwebserverlaststatuscode '206' "$DOWNLOADLOG"
+
+ copysource /dev/zero 20 $DOWN
+ testdownloadfile 'invalid partial data' "${1}/testfile" "$DOWN" '!='
+ testwebserverlaststatuscode '206' "$DOWNLOADLOG"
+
+ webserverconfig 'aptwebserver::closeOnError' 'false'
+ followuprequest "$1"
+ webserverconfig 'aptwebserver::closeOnError' 'true'
+ followuprequest "$1"
+ webserverconfig 'aptwebserver::closeOnError' 'false'
+
+ copysource /dev/zero 1M $DOWN
+ testdownloadfile 'too-big partial file' "${1}/testfile" "$DOWN" '='
+ testwebserverlaststatuscode '200' "$DOWNLOADLOG"
+
+ copysource /dev/zero 20 $DOWN
+ touch $DOWN
+ testdownloadfile 'old data' "${1}/testfile" "$DOWN" '='
+ testwebserverlaststatuscode '200' "$DOWNLOADLOG"
+
+ if [ "${1%%:*}" = 'https' ] && expr match "$1" "^.*/redirectme$" >/dev/null; then
+ webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'none'
+ else
+ webserverconfig 'aptwebserver::support::range' 'false'
+ fi
+
+ copysource $TESTFILE 20 $DOWN
+ testdownloadfile 'no server support' "${1}/testfile" "$DOWN" '='
+ testwebserverlaststatuscode '200' "$DOWNLOADLOG"
+}
+
+serverconfigs() {
+ msgmsg "${1%%:*}: Test with Content-Length"
+ webserverconfig 'aptwebserver::chunked-transfer-encoding' 'false'
+ testrun "$1"
+ msgmsg "${1%%:*}: Test with Transfer-Encoding: chunked"
+ webserverconfig 'aptwebserver::chunked-transfer-encoding' 'true'
+ testrun "$1"
+}
+
+serverconfigs "http://localhost:${APTHTTPPORT}"
+
+changetohttpswebserver
+
+serverconfigs "https://localhost:${APTHTTPSPORT}"
+
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "https://localhost:${APTHTTPSPORT}/"
+serverconfigs "https://localhost:${APTHTTPSPORT}/redirectme"
+serverconfigs "http://localhost:${APTHTTPPORT}/redirectme"
diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage
new file mode 100755
index 0000000..c5726dd
--- /dev/null
+++ b/test/integration/test-pdiff-usage
@@ -0,0 +1,417 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+LOWCOSTEXT='lz4'
+
+buildaptarchive
+setupflataptarchive
+changetowebserver
+
+cat >rootdir/etc/apt/apt.conf.d/contents.conf <<EOF
+Acquire::IndexTargets::deb::Contents {
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents";
+ Description "\$(RELEASE)/\$(COMPONENT) \$(ARCHITECTURE) Contents";
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
+ flatMetaKey "Contents-\$(ARCHITECTURE)";
+ flatDescription "\$(RELEASE) \$(ARCHITECTURE) Contents";
+};
+EOF
+
+PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')"
+echo 'contents for stuff' > aptarchive/Contents-i386
+compressfile aptarchive/Contents-i386
+echo 'hacked' > aptarchive/hacked-i386
+compressfile aptarchive/hacked-i386
+
+wasmergeused() {
+ if echo "$*" | grep -q -- '-o test::cannot-use-pdiff=1'; then
+ find rootdir/var/lib/apt/lists/partial -name '*-patched*' -delete
+ fi
+
+ testsuccess apt update "$@"
+ #apt update "$@" 2>&1 | tee rootdir/tmp/testsuccess.output
+
+ msgtest 'No intermediate patch files' 'still exist'
+ local EDS="$(find rootdir/var/lib/apt/lists -name '*.ed' -o -name '*.ed.*')"
+ if [ -z "$EDS" ]; then
+ msgpass
+ else
+ echo
+ echo "$EDS"
+ msgfail
+ fi
+
+ if echo "$*" | grep -q -- '-o test::cannot-use-pdiff=1'; then
+ msgtest 'Check if pdiff was' 'not used'
+ cp -a rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output
+ testsuccess --nomsg grep "^Ign:.* Packages\.diff/Index" rootdir/tmp/aptupdate.output
+ return;
+ fi
+
+ msgtest 'Check if the right pdiff merger was used'
+ if grep -q '^pkgAcqIndexMergeDiffs::Done(): rred' rootdir/tmp/testsuccess.output; then
+ if echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then
+ msgpass
+ else
+ msgfail "Merge shouldn't have been used, but was"
+ fi
+ elif echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then
+ msgfail "Merge should have been used, but wasn't"
+ else
+ msgpass
+ fi
+
+ testequal '1' grep -c rred:601 rootdir/tmp/testsuccess.output
+}
+
+testrun() {
+ configcompression '.' 'xz'
+ msgmsg "Testcase: setup the base with: $*"
+ find aptarchive -name 'Packages*' -type f -delete
+ cp "${PKGFILE}" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ generatereleasefiles
+ signreleasefiles
+ rm -rf aptarchive/Packages.diff rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists-bak
+ testsuccess aptget update "$@"
+ cp -a rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists-bak
+ testnopackage newstuff
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt oldstuff
+ configcompression '.' 'gz'
+
+ # see if the code deals properly with leftover partial files
+ partialleftovers
+
+ msgmsg "Testcase: apply with one patch: $*"
+ find aptarchive -name 'Packages*' -type f -delete
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ mkdir -p aptarchive/Packages.diff
+ PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
+ diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
+ cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
+ PATCHINDEX='aptarchive/Packages.diff/Index'
+ echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
+SHA256-History:
+ 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
+ $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
+SHA256-Patches:
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
+ $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
+SHA256-Download:
+ d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
+ $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
+
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ find aptarchive -name 'Packages*' -type f -delete
+ wasmergeused "$@"
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: apply with compressed Index and one patch: $*"
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ cat "$PATCHINDEX" | gzip > "${PATCHINDEX}.gz"
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ find aptarchive -name 'Packages*' -type f -delete
+ rm "$PATCHINDEX"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ wasmergeused "$@"
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: apply with by-hash compressed Index and one patch: $*"
+ local NORMAL="$(readlink -f "./aptarchive/Packages.diff")"
+ local BYHASH="${NORMAL}/by-hash/SHA256"
+ mkdir -p "${BYHASH}"
+ find "${NORMAL}/" -maxdepth 1 -name "Index*" -exec mv '{}' "$BYHASH" \;
+ ln -s "${BYHASH}/Index.gz" "${BYHASH}/$(sha256sum "${BYHASH}/Index.gz" | cut -f1 -d' ')"
+ echo 'foobar' > "${BYHASH}/$(sha256sum "$PATCHFILE" | cut -f1 -d' ')"
+ echo 'foobar' > "${BYHASH}/$(sha256sum "${PATCHFILE}.gz" | cut -f1 -d' ')"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ wasmergeused "$@" -o Acquire::By-Hash=force
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: SHA1-only patches are not used: $*"
+ find aptarchive -name 'Packages*' -type f -delete
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ mkdir -p aptarchive/Packages.diff
+ PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
+ diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
+ cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
+ PATCHINDEX='aptarchive/Packages.diff/Index'
+ echo "SHA1-Current: $(sha1sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
+SHA1-History:
+ 9f4148e06d7faa37062994ff10d0c842d7017513 33053002 2010-08-18-2013.28
+ $(sha1sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
+SHA1-Patches:
+ 7651fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-2013.28
+ $(sha1sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
+SHA1-Download:
+ 2365ac0ac57cde3d43c63145e8251a3bd5410213 197 2010-08-18-2013.28.gz
+ $(sha1sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ wasmergeused "$@" -o test::cannot-use-pdiff=1
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: no download-hashes patches are not used: $*"
+ find aptarchive -name 'Packages*' -type f -delete
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ mkdir -p aptarchive/Packages.diff
+ PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
+ diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
+ cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
+ PATCHINDEX='aptarchive/Packages.diff/Index'
+ echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
+SHA256-History:
+ 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
+ $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
+SHA256-Patches:
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
+ $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")" > "$PATCHINDEX"
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ wasmergeused "$@" -o test::cannot-use-pdiff=1
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: apply with two patches: $*"
+ cp "${PKGFILE}-new" aptarchive/Packages
+ echo '
+Package: futurestuff
+Version: 1.0
+Architecture: i386
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 202
+Filename: pool/futurestuff_1.0_i386.deb
+Size: 202200
+SHA256: b46fd154615edaae5ba33c56a5cc0e7deaef23e2da3e4f129727fd660f28f050
+Description: some cool and shiny future stuff
+ This package will appear in the next^2 mirror update
+Description-md5: d5f89fbbc2ce34c455dfee9b67d82b6b' >> aptarchive/Packages
+
+ compressfile 'aptarchive/Packages'
+ PATCHFILE2="aptarchive/Packages.diff/$(date -d 'now + 1hour' '+%Y-%m-%d-%H%M.%S')"
+ diff -e "${PKGFILE}-new" aptarchive/Packages > "${PATCHFILE2}" || true
+ cat "$PATCHFILE2" | gzip > "${PATCHFILE2}.gz"
+ echo "SHA256-Current: $(sha256sum aptarchive/Packages | cut -d' ' -f 1) $(stat -c%s aptarchive/Packages)
+SHA256-History:
+ 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
+ $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
+ $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new") $(basename "${PATCHFILE2}")
+SHA256-Patches:
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
+ $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
+ $(sha256sum "${PATCHFILE2}" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE2}") $(basename "${PATCHFILE2}")
+SHA256-Download:
+ d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
+ $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")
+ $(sha256sum "${PATCHFILE2}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE2}.gz") $(basename "${PATCHFILE2}.gz")" > "$PATCHINDEX"
+
+ generatereleasefiles '+2hour'
+ signreleasefiles
+ cp -a aptarchive/Packages Packages-future
+ find aptarchive -name 'Packages*' -type f -delete
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ wasmergeused "$@"
+ testnopackage oldstuff
+ testsuccessequal "$(cat Packages-future)
+" aptcache show apt newstuff futurestuff
+
+ # we reuse the archive state of the previous test here
+ msgmsg "Testcase: pdiff handling is stopped if transaction fails $*"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ cp Packages-future aptarchive/Packages
+ rm -f rootdir/var/lib/apt/lists/*_Contents-*
+ webserverconfig 'aptwebserver::overwrite::.*Contents-.*::filename' '/hacked-i386.gz'
+ # This should work in at least 4% of the cases...
+ for i in $(seq 25); do
+ testfailure apt update "$@"
+ if ! grep 'rred:600' rootdir/tmp/testfailure.output; then
+ break
+ fi
+ done
+ webserverconfig 'aptwebserver::overwrite::.*Contents-.*::filename' '/Contents-i386.gz'
+ cp rootdir/tmp/testfailure.output patchdownload.output
+ testfailure grep 'rred:600' patchdownload.output
+ testnopackage newstuff futurestuff
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt oldstuff
+
+ # we reuse the entire state of the previous test here
+ msgmsg "Testcase: good files from previous fails are picked up from partial: $*"
+ wasmergeused "$@"
+ testfailure grep '^GET /Packages.diff/Index HTTP/1.1' rootdir/tmp/testsuccess.output
+ testnopackage oldstuff
+ testsuccessequal "$(cat Packages-future)
+" aptcache show apt newstuff futurestuff
+
+ # we reuse the archive state of the previous test here
+ msgmsg "Testcase: downloading a patch fails, but successful fallback: $*"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ cp Packages-future aptarchive/Packages
+ rm "${PATCHFILE}.gz"
+ testsuccess apt update "$@"
+ cp rootdir/tmp/testsuccess.output patchdownload.output
+ testsuccess grep '^Falling back to normal index file acquire' patchdownload.output
+ testnopackage oldstuff
+ testsuccessequal "$(cat Packages-future)
+" aptcache show apt newstuff futurestuff
+
+ msgmsg "Testcase: patch applying fails, but successful fallback: $*"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ mkdir -p aptarchive/Packages.diff
+ PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
+ diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
+ cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
+ PATCHINDEX='aptarchive/Packages.diff/Index'
+ echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
+SHA256-History:
+ 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
+ $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
+SHA256-Patches:
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
+ $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
+SHA256-Download:
+ d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
+ $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
+ breakfiles "$PATCHFILE" "${PATCHFILE}.gz"
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ testsuccess apt update "$@"
+ cp -f rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output
+ testsuccess grep 'Hash Sum mismatch' rootdir/tmp/aptupdate.output
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: pdiff patch bigger than index itself: $*"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ # the general testcode checks for leftovers in partial, but as this file
+ # is never touched in this test as it exits earlier its not a leftover…
+ rm -f rootdir/var/lib/apt/lists/partial/localhost:${APTHTTPPORT}_Packages
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ mkdir -p aptarchive/Packages.diff
+ PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
+ diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
+ cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
+ PATCHINDEX='aptarchive/Packages.diff/Index'
+ echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
+SHA256-History:
+ 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
+ $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
+SHA256-Patches:
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
+ $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
+SHA256-Download:
+ d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
+ $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz")000 $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ wasmergeused "$@" -o test::cannot-use-pdiff=1
+ testsuccess grep 'bytes, but limit is' rootdir/tmp/aptupdate.output
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+
+ msgmsg "Testcase: pdiff index failed to download: $*"
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ cp "${PKGFILE}-new" aptarchive/Packages
+ compressfile 'aptarchive/Packages'
+ mkdir -p aptarchive/Packages.diff
+ PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
+ diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
+ cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
+ PATCHINDEX='aptarchive/Packages.diff/Index'
+ echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
+SHA256-History:
+ 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
+ $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
+SHA256-Patches:
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
+ $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
+SHA256-Download:
+ d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
+ $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
+ generatereleasefiles '+1hour'
+ signreleasefiles
+ # we let it fail by removing the files so the webserver reports 404
+ rm -f "$PATCHINDEX" "$PATCHFILE" "${PATCHFILE}.gz"
+ wasmergeused "$@" -o test::cannot-use-pdiff=1
+ testsuccess grep '400%20URI%20Failure.*FailReason.*HttpError404.*Packages\.diff/Index' rootdir/tmp/aptupdate.output
+ testnopackage oldstuff
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt newstuff
+}
+echo 'Debug::pkgAcquire::Diffs "true";
+Debug::Acquire::Transaction "true";
+Debug::pkgAcquire::Worker "true";
+Debug::Acquire::http "true";
+Debug::pkgAcquire "true";
+Debug::Acquire::rred "true";' > rootdir/etc/apt/apt.conf.d/rreddebug.conf
+
+testcase() {
+ testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=1 "$@"
+ testrun -o Acquire::PDiffs::Merge=1 -o APT::Get::List-Cleanup=1 "$@"
+ testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=0 "$@"
+ testrun -o Acquire::PDiffs::Merge=1 -o APT::Get::List-Cleanup=0 "$@"
+}
+generatepartialleftovers() {
+ for f in "$@"; do
+ cat "${PKGFILE}" "${PKGFILE}" > "rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_${f}"
+ printf '\n\nInvalid\nStanza: yes\n\n' >> "rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_${f}"
+ done
+}
+
+partialleftovers() { generatepartialleftovers 'Packages' 'Packages-patched'; }
+aptautotest_apt_update() { aptautotest_aptget_update "$@"; testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_Packages"; }
+testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=false
+partialleftovers() { generatepartialleftovers "Packages.${LOWCOSTEXT}" "Packages-patched.${LOWCOSTEXT}"; }
+aptautotest_apt_update() { aptautotest_aptget_update "$@"; testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_Packages.$LOWCOSTEXT"; }
+testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=true
+
+
+partialleftovers() { generatepartialleftovers "redirectme_Packages.${LOWCOSTEXT}" "redirectme_Packages-patched.${LOWCOSTEXT}"; }
+# redirect the InRelease file only – the other files are auto-redirected by apt
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/I' "http://0.0.0.0:${APTHTTPPORT}/I"
+rewritesourceslist "http://localhost:${APTHTTPPORT}/redirectme"
+aptautotest_apt_update() {
+ aptautotest_aptget_update "$@"
+ testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_redirectme_Packages.$LOWCOSTEXT"
+ testempty find rootdir/var/lib/apt/lists -type f \! \( -name lock -o -name '*_redirectme_*' \)
+}
+testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=true
diff --git a/test/integration/test-pin-non-existent-package b/test/integration/test-pin-non-existent-package
new file mode 100755
index 0000000..06103fd
--- /dev/null
+++ b/test/integration/test-pin-non-existent-package
@@ -0,0 +1,75 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'rapt' 'i386' '0.8.15'
+insertpackage 'unstable' 'arch' 'i386' '1.0'
+
+setupaptarchive
+
+testcandidate() {
+ msgtest "Test that the Candidate for $1 is" $2
+ if [ "$(aptcache policy $1 | grep '^ Candidate:')" = " Candidate: $2" ]; then
+ msgpass
+ else
+ echo
+ aptcache policy $1
+ msgfail
+ fi
+}
+
+testcandidate rapt '0.8.15'
+testsuccessequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade --trivial-only
+
+echo 'Package: rapt
+Pin: release a=unstable
+Pin-Priority: -1' > rootdir/etc/apt/preferences
+
+testcandidate rapt '(none)'
+testsuccessequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade --trivial-only
+
+echo '
+Package: doesntexist
+Pin: release a=unstable
+Pin-Priority: 1000' >> rootdir/etc/apt/preferences
+
+testcandidate rapt '(none)'
+
+echo '
+Package: rapt
+Pin: release a=unstable
+Pin-Priority: 1000' >> rootdir/etc/apt/preferences
+
+testcandidate rapt '(none)'
+testsuccessequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade --trivial-only
+
+echo 'Package: arch:amd64
+Pin: release a=unstable
+Pin-Priority: -1' > rootdir/etc/apt/preferences
+
+testcandidate arch '1.0'
+
+echo '
+Package: arch:i386
+Pin: release a=unstable
+Pin-Priority: -1' >> rootdir/etc/apt/preferences
+
+testcandidate arch '(none)'
+
diff --git a/test/integration/test-policy-pinning b/test/integration/test-policy-pinning
new file mode 100755
index 0000000..b871f72
--- /dev/null
+++ b/test/integration/test-policy-pinning
@@ -0,0 +1,433 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+buildaptarchive
+setupflataptarchive
+
+STATUS=$(readlink -f rootdir/var/lib/dpkg/status)
+APTARCHIVE=$(readlink -f aptarchive)
+
+testequalpolicy() {
+ local SP="$1"
+ local AP="$2"
+ shift 2
+ testsuccessequal "Package files:
+ $(echo "$SP" | awk '{ printf("%3s\n",$0) }') ${STATUS}
+ release a=now
+ $(echo "$AP" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} Packages
+ release c=
+Pinned packages:" aptcache policy "$@"
+}
+
+testglobalpolicy() {
+ aptgetupdate
+
+ testequalpolicy 100 500
+ testequalpolicy 990 500 -t now
+
+ sed -i aptarchive/Release -e 1i"NotAutomatic: yes"
+ aptgetupdate
+
+ testequalpolicy 100 1 -o Test=NotAutomatic
+ testequalpolicy 990 1 -o Test=NotAutomatic -t now
+
+ sed -i aptarchive/Release -e 1i"ButAutomaticUpgrades: yes"
+ aptgetupdate
+
+ testequalpolicy 100 100 -o Test=ButAutomaticUpgrades
+ testequalpolicy 990 100 -o Test=ButAutomaticUpgrades -t now
+
+ sed -i aptarchive/Release -e 's#NotAutomatic: yes#NotAutomatic: no#' -e '/ButAutomaticUpgrades: / d'
+ aptgetupdate
+
+ testequalpolicy 100 500 -o Test=Automatic
+ testequalpolicy 990 500 -o Test=Automatic -t now
+
+ sed -i aptarchive/Release -e '/NotAutomatic: / d' -e '/ButAutomaticUpgrades: / d'
+}
+
+msgmsg 'Test with not signed archive'
+aptgetupdate() {
+ rm -rf rootdir/var/lib/apt
+ testwarning aptget update --allow-insecure-repositories
+}
+testglobalpolicy
+
+msgmsg 'Test with signed but no key in trusted'
+aptgetupdate() {
+ rm -rf rootdir/var/lib/apt
+ signreleasefiles 'Marvin Paranoid'
+ testwarning aptget update --allow-insecure-repositories
+}
+testglobalpolicy
+
+# much the same tests will be executed below in more detail again for this one
+msgmsg 'Test with signed and valid key'
+aptgetupdate() {
+ rm -rf rootdir/var/lib/apt
+ signreleasefiles 'Joe Sixpack'
+ testsuccess aptget update
+}
+testglobalpolicy
+
+msgmsg 'Test with specific packages'
+
+buildsimplenativepackage "coolstuff" "all" "1.0" "stable"
+buildsimplenativepackage "coolstuff" "all" "2.0~bpo1" "backports"
+
+setupaptarchive
+
+testsuccessequal "coolstuff:
+ Installed: (none)
+ Candidate: 2.0~bpo1
+ Version table:
+ 2.0~bpo1 500
+ 500 file:${APTARCHIVE} backports/main all Packages
+ 1.0 500
+ 500 file:${APTARCHIVE} stable/main all Packages" apt policy '^cool.*'
+
+testequalpolicycoolstuff() {
+ local INSTALLED="${1:-(none)}"
+ local CANDIDATE="${2:-(none)}"
+ local AB="$3"
+ local AS="$4"
+ local PB="$5"
+ local IS=""
+ local IB=""
+ local SB=""
+ local SS=""
+ [ "$1" = "2.0~bpo1" ] && IB="***" && SB="
+ 100 $STATUS" || IB=" "
+ [ "$1" = "1.0" ] && IS="***" && SS="
+ 100 $STATUS" || IS=" "
+ local BPO1ARCHIVE=""
+ local BPO2ARCHIVE=""
+ if [ ! "$7" = "2.0~bpo2" ]; then
+ BPO1PIN="$AB"
+ BPO1ARCHIVE=" $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main all Packages"
+ else
+ BPO2ARCHIVE="
+ 2.0~bpo2 $AB
+ $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main all Packages"
+ SB="$(echo "$SB" | tail -n 1)"
+ shift
+ fi
+ shift 6
+ testsuccessequal "coolstuff:
+ Installed: $INSTALLED
+ Candidate: $CANDIDATE
+ Version table:${BPO2ARCHIVE}
+ $IB 2.0~bpo1 $PB
+${BPO1ARCHIVE}$SB
+ $IS 1.0 $AS
+ $(echo "$AS" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} stable/main all Packages$SS" \
+ aptcache policy coolstuff -o Policy=${INSTALLED}-${CANDIDATE}-${AB}-${AS}-${PB} $*
+}
+
+testequalpolicycoolstuff "" "2.0~bpo1" 500 500 500 ""
+testequalpolicycoolstuff "" "1.0" 500 990 500 "" -t stable
+testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -t backports
+echo "Package: *
+Pin: release n=backports
+Pin-Priority: 200" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=GlobalPin
+testequalpolicycoolstuff "" "1.0" 200 990 200 "" -o Test=GlobalPin -t stable
+testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=GlobalPin -t backports
+echo "Package: *
+Pin: release n=backports
+Pin-Priority: 600" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=GlobalPin
+testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=GlobalPin -t stable
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 200" > rootdir/etc/apt/preferences
+#FIXME: policy can't differentiate between two sources where one has a package specific pin in place
+# testequalpolicycoolstuff "" "1.0" 500 500 200 "2.0~bpo1" -o Test=PackagePin
+# testequalpolicycoolstuff "" "1.0" 990 500 200 "2.0~bpo1" -o Test=PackagePin -t backports
+testequalpolicycoolstuff "" "1.0" 500 990 200 "2.0~bpo1" -o Test=PackagePin -t stable
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 600" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "2.0~bpo1" 500 500 600 "2.0~bpo1" -o Test=PackagePin
+testequalpolicycoolstuff "" "1.0" 500 990 600 "2.0~bpo1" -o Test=PackagePin -t stable
+testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=PackagePin -t backports
+
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: -1" > rootdir/etc/apt/preferences
+# testequalpolicycoolstuff "" "1.0" 500 500 -1 "2.0~bpo1" -o Test=PackagePin
+# testequalpolicycoolstuff "" "1.0" 990 500 -1 "2.0~bpo1" -o Test=PackagePin -t backports
+# testequalpolicycoolstuff "" "1.0" 500 990 -1 "2.0~bpo1" -o Test=PackagePin -t stable
+
+rm rootdir/etc/apt/preferences
+sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes"
+signreleasefiles
+aptgetupdate
+
+testequalpolicycoolstuff "" "1.0" 1 500 1 "" -o Test=NotAutomatic
+testequalpolicycoolstuff "" "1.0" 1 990 1 "" -o Test=NotAutomatic -t stable
+testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=NotAutomatic -t backports
+echo "Package: *
+Pin: release n=backports
+Pin-Priority: 200" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=NotAutomatic
+echo "Package: *
+Pin: release n=backports
+Pin-Priority: 600" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=NotAutomatic
+testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=NotAutomatic -t stable
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 200" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "1.0" 1 500 200 "2.0~bpo1" -o Test=NotAutomatic
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 600" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "2.0~bpo1" 1 500 600 "2.0~bpo1" -o Test=NotAutomatic
+testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=NotAutomatic -t backports
+testequalpolicycoolstuff "" "1.0" 1 990 600 "2.0~bpo1" -o Test=NotAutomatic -t stable
+
+rm rootdir/etc/apt/preferences
+sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes"
+signreleasefiles
+aptgetupdate
+
+testequalpolicycoolstuff "" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades
+testequalpolicycoolstuff "" "1.0" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable
+testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports
+echo "Package: *
+Pin: release n=backports
+Pin-Priority: 200" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=ButAutomaticUpgrades
+echo "Package: *
+Pin: release n=backports
+Pin-Priority: 600" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=ButAutomaticUpgrades
+testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=ButAutomaticUpgrades -t stable
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 200" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "1.0" 100 500 200 "2.0~bpo1" -o Test=ButAutomaticUpgrades
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 600" > rootdir/etc/apt/preferences
+testequalpolicycoolstuff "" "2.0~bpo1" 100 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades
+testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t backports
+testequalpolicycoolstuff "" "1.0" 100 990 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t stable
+
+rm rootdir/etc/apt/preferences
+testsuccess aptget install coolstuff -y
+testequalpolicycoolstuff "1.0" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades
+testsuccess aptget dist-upgrade -y
+testequalpolicycoolstuff "1.0" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades
+testequalpolicycoolstuff "1.0" "1.0" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable
+testequalpolicycoolstuff "1.0" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports
+
+testsuccess aptget install coolstuff -t backports -y
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 100 "" -o Test=ButAutomaticUpgrades
+testsuccess aptget dist-upgrade -y
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 100 "" -o Test=ButAutomaticUpgrades
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports
+
+rm incoming/backports.main.pkglist incoming/backports.main.srclist
+buildsimplenativepackage "coolstuff" "all" "2.0~bpo2" "backports"
+setupaptarchive --no-update
+
+sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes"
+signreleasefiles
+aptgetupdate
+
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 500 100 "" "2.0~bpo2" -o Test=NotAutomatic
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 990 100 "" "2.0~bpo2" -o Test=NotAutomatic -t stable
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 100 "" "2.0~bpo2" -o Test=NotAutomatic -t backports
+
+sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes"
+signreleasefiles
+aptgetupdate
+
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 500 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 990 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t stable
+testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t backports
+
+
+tmppath=$(readlink -f .)
+
+# Check 16-bit integers
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 32767
+" > rootdir/etc/apt/preferences
+
+testsuccess aptget install -s coolstuff -o PinPriority=32767
+
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: -32768
+" > rootdir/etc/apt/preferences
+testsuccess aptget install -s coolstuff -o PinPriority=-32768
+
+# Check for 32-bit integers
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 32768
+" > rootdir/etc/apt/preferences
+
+testfailureequal "Reading package lists...
+E: ${tmppath}/rootdir/etc/apt/preferences: Value 32768 is outside the range of valid pin priorities (-32768 to 32767)" \
+ aptget install -s coolstuff -o PinPriority=32768
+
+
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: -32769
+" > rootdir/etc/apt/preferences
+
+testfailureequal "Reading package lists...
+E: ${tmppath}/rootdir/etc/apt/preferences: Value -32769 is outside the range of valid pin priorities (-32768 to 32767)" \
+ aptget install -s coolstuff -o PinPriority=-32769
+
+# Check for 64-bit integers
+
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 2147483648
+" > rootdir/etc/apt/preferences
+
+testfailureequal "Reading package lists...
+E: Cannot convert 2147483648 to integer: out of range
+E: ${tmppath}/rootdir/etc/apt/preferences: Value 2147483648 is outside the range of valid pin priorities (-32768 to 32767)" \
+ aptget install -s coolstuff -o PinPriority=2147483648
+
+# Check that short-max/min is a valid pin
+currentpin() {
+echo "Package: *
+Pin: release n=backports
+Pin-Priority: $1
+" > rootdir/etc/apt/preferences
+testsuccessequal "coolstuff:
+ Installed: 2.0~bpo1
+ Candidate: $2
+ Version table:
+ 2.0~bpo2 ${3:-$1}
+ ${3:-$1} file:${tmppath}/aptarchive backports/main all Packages
+ *** 2.0~bpo1 100
+ 100 ${tmppath}/rootdir/var/lib/dpkg/status
+ 1.0 500
+ 500 file:${tmppath}/aptarchive stable/main all Packages" apt policy coolstuff
+}
+currentpin '32767' '2.0~bpo2'
+currentpin '-32768' '2.0~bpo1' '-32767'
+currentpin '-32767' '2.0~bpo1' '-32767'
+
+# Check for 0
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 0
+" > rootdir/etc/apt/preferences
+
+testfailureequal "Reading package lists...
+E: No priority (or zero) specified for pin" \
+ aptget install -s coolstuff -o PinPriority=0
+
+# Check with comments
+echo "#Package: coolstuff
+#Pin: release n=backports
+#Pin-Priority: 0
+
+# Test
+
+Package: coolstuff
+Pin: release n=backports
+#Pin: release n=unstable
+#Pin-Priority: 999
+Pin-Priority: 999
+#Pin-Priority: 999" > rootdir/etc/apt/preferences
+
+testsuccessequal "coolstuff:
+ Installed: 2.0~bpo1
+ Candidate: 2.0~bpo2
+ Version table:
+ 2.0~bpo2 999
+ 100 file:${tmppath}/aptarchive backports/main all Packages
+ *** 2.0~bpo1 100
+ 100 ${tmppath}/rootdir/var/lib/dpkg/status
+ 1.0 500
+ 500 file:${tmppath}/aptarchive stable/main all Packages" aptcache policy coolstuff
+
+
+# Check for override pins
+
+# Normal pins: First one wins
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 990
+
+Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 991
+" > rootdir/etc/apt/preferences
+
+testsuccessequal "coolstuff:
+ Installed: 2.0~bpo1
+ Candidate: 2.0~bpo2
+ Version table:
+ 2.0~bpo2 990
+ 100 file:${tmppath}/aptarchive backports/main all Packages
+ *** 2.0~bpo1 100
+ 100 ${tmppath}/rootdir/var/lib/dpkg/status
+ 1.0 500
+ 500 file:${tmppath}/aptarchive stable/main all Packages" aptcache policy coolstuff
+
+
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: 990
+
+Package: *
+Pin: release n=backports
+Pin-Priority: never
+" > rootdir/etc/apt/preferences
+
+testsuccessequal "coolstuff:
+ Installed: 2.0~bpo1
+ Candidate: 2.0~bpo1
+ Version table:
+ 2.0~bpo2 -32768
+ -32768 file:${tmppath}/aptarchive backports/main all Packages
+ *** 2.0~bpo1 100
+ 100 ${tmppath}/rootdir/var/lib/dpkg/status
+ 1.0 500
+ 500 file:${tmppath}/aptarchive stable/main all Packages" aptcache policy coolstuff
+
+
+msgmsg "Check that local-only versions can be pinned correctly (LP: #1821308)"
+echo "Package: coolstuff
+Pin: version 2.0~bpo1
+Pin-Priority: 1000" > rootdir/etc/apt/preferences
+testsuccessequal "coolstuff:
+ Installed: 2.0~bpo1
+ Candidate: 2.0~bpo1
+ Version table:
+ 2.0~bpo2 100
+ 100 file:${tmppath}/aptarchive backports/main all Packages
+ *** 2.0~bpo1 1000
+ 100 ${tmppath}/rootdir/var/lib/dpkg/status
+ 1.0 500
+ 500 file:${tmppath}/aptarchive stable/main all Packages" aptcache policy coolstuff
+
+# Check for 0
+echo "Package: coolstuff
+Pin: release n=backports
+Pin-Priority: never
+" > rootdir/etc/apt/preferences
+
+testfailureequal "Reading package lists...
+E: ${tmppath}/rootdir/etc/apt/preferences: The special 'Pin-Priority: never' can only be used for 'Package: *' records" \
+ aptget install -s coolstuff -o PinPriority=0
diff --git a/test/integration/test-prefer-higher-priority-providers b/test/integration/test-prefer-higher-priority-providers
new file mode 100755
index 0000000..7c3f323
--- /dev/null
+++ b/test/integration/test-prefer-higher-priority-providers
@@ -0,0 +1,106 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'native'
+
+insertpackage 'unstable' 'foo' 'all' '1' 'Provides: stuff' 'important'
+insertpackage 'unstable' 'bar' 'all' '1' 'Provides: stuff' 'optional'
+insertpackage 'unstable' 'baz' 'all' '1' 'Provides: stuff' 'extra'
+insertpackage 'unstable' 'awesome' 'all' '1' 'Depends: stuff'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ awesome foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Inst awesome (1 unstable [all])
+Conf foo (1 unstable [all])
+Conf awesome (1 unstable [all])' aptget install awesome -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ awesome foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Inst awesome (1 unstable [all])
+Conf foo (1 unstable [all])
+Conf awesome (1 unstable [all])' aptget install awesome foo -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'bar' is not installed, so not removed
+Package 'baz' is not installed, so not removed
+The following additional packages will be installed:
+ foo
+The following NEW packages will be installed:
+ awesome foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1 unstable [all])
+Inst awesome (1 unstable [all])
+Conf foo (1 unstable [all])
+Conf awesome (1 unstable [all])" aptget install awesome bar- baz- -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'foo' is not installed, so not removed
+The following additional packages will be installed:
+ bar
+The following NEW packages will be installed:
+ awesome bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1 unstable [all])
+Inst awesome (1 unstable [all])
+Conf bar (1 unstable [all])
+Conf awesome (1 unstable [all])" aptget install awesome foo- -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'foo' is not installed, so not removed
+Package 'baz' is not installed, so not removed
+The following additional packages will be installed:
+ bar
+The following NEW packages will be installed:
+ awesome bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1 unstable [all])
+Inst awesome (1 unstable [all])
+Conf bar (1 unstable [all])
+Conf awesome (1 unstable [all])" aptget install awesome foo- baz- -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'foo' is not installed, so not removed
+Package 'bar' is not installed, so not removed
+The following additional packages will be installed:
+ baz
+The following NEW packages will be installed:
+ awesome baz
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst baz (1 unstable [all])
+Inst awesome (1 unstable [all])
+Conf baz (1 unstable [all])
+Conf awesome (1 unstable [all])" aptget install awesome foo- bar- -s
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Package 'foo' is not installed, so not removed
+Package 'bar' is not installed, so not removed
+Package 'baz' is not installed, so not removed
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ awesome : Depends: stuff
+E: Unable to correct problems, you have held broken packages." aptget install awesome foo- bar- baz- -s
diff --git a/test/integration/test-prefer-native-architecture-over-higher-priority b/test/integration/test-prefer-native-architecture-over-higher-priority
new file mode 100755
index 0000000..d21836b
--- /dev/null
+++ b/test/integration/test-prefer-native-architecture-over-higher-priority
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'arm64'
+
+insertpackage 'unstable' 'm4' 'amd64' '1' 'Multi-Arch: foreign' 'optional'
+insertpackage 'unstable' 'm4' 'arm64' '1' 'Multi-Arch: foreign' 'standard'
+insertpackage 'unstable' 'autoconf' 'all' '1' 'Depends: m4'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ m4
+The following NEW packages will be installed:
+ autoconf m4
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst m4 (1 unstable [amd64])
+Inst autoconf (1 unstable [all])
+Conf m4 (1 unstable [amd64])
+Conf autoconf (1 unstable [all])' aptget install autoconf -s
diff --git a/test/integration/test-prevent-markinstall-multiarch-same-versionscrew b/test/integration/test-prevent-markinstall-multiarch-same-versionscrew
new file mode 100755
index 0000000..a45c0d5
--- /dev/null
+++ b/test/integration/test-prevent-markinstall-multiarch-same-versionscrew
@@ -0,0 +1,130 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386' 'armel'
+
+insertpackage 'stable' 'allarchs' 'all' '1'
+insertpackage 'unstable' 'allarchs' 'all' '2'
+
+insertpackage 'stable,installed' 'fine' 'i386,amd64' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'fine' 'amd64,i386' '2' 'Multi-Arch: same'
+insertpackage 'experimental' 'fine' 'amd64,i386' '3' 'Multi-Arch: same'
+
+insertinstalledpackage 'fine-installed' 'i386,amd64' '1' 'Multi-Arch: same'
+insertpackage 'stable' 'fine-installed' 'i386,amd64,armel' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'fine-installed' 'i386,amd64' '2' 'Multi-Arch: same'
+insertpackage 'experimental' 'fine-installed' 'i386,amd64' '3' 'Multi-Arch: same'
+
+insertpackage 'stable,installed' 'out-of-sync-native' 'i386,amd64' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'out-of-sync-native' 'amd64' '2' 'Multi-Arch: same'
+
+insertpackage 'stable,installed' 'out-of-sync-foreign' 'i386,amd64' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'out-of-sync-foreign' 'i386' '2' 'Multi-Arch: same'
+
+insertinstalledpackage 'out-of-sync-gone-native' 'i386,amd64' '1' 'Multi-Arch: same'
+insertpackage 'stable' 'out-of-sync-gone-native' 'i386' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'out-of-sync-gone-native' 'i386' '2' 'Multi-Arch: same'
+
+insertinstalledpackage 'out-of-sync-gone-foreign' 'i386,amd64' '1' 'Multi-Arch: same'
+insertpackage 'stable' 'out-of-sync-gone-foreign' 'amd64' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'out-of-sync-gone-foreign' 'amd64' '2' 'Multi-Arch: same'
+
+insertpackage 'stable' 'libsame2' 'i386' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'libsame2' 'amd64' '2' 'Multi-Arch: same'
+insertpackage 'unstable' 'depender2' 'all' '2' 'Depends: libsame2 (= 2)'
+insertpackage 'stable' 'libsame3' 'i386' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'libsame3' 'i386,amd64' '3' 'Multi-Arch: same'
+insertpackage 'unstable' 'depender3' 'all' '3' 'Depends: libsame3 (= 3)'
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ out-of-sync-gone-foreign:i386 out-of-sync-gone-native
+The following packages have been kept back:
+ out-of-sync-foreign:i386 out-of-sync-native
+The following packages will be upgraded:
+ fine fine:i386 fine-installed fine-installed:i386 out-of-sync-gone-foreign
+ out-of-sync-gone-native:i386
+6 upgraded, 0 newly installed, 2 to remove and 2 not upgraded.
+Remv out-of-sync-gone-foreign:i386 [1]
+Remv out-of-sync-gone-native [1]
+Inst fine [1] (2 unstable [amd64]) [fine:amd64 on fine:i386] [fine:i386 on fine:amd64] [fine:i386 ]
+Inst fine:i386 [1] (2 unstable [i386])
+Inst fine-installed [1] (2 unstable [amd64]) [fine-installed:amd64 on fine-installed:i386] [fine-installed:i386 on fine-installed:amd64] [fine-installed:i386 ]
+Inst fine-installed:i386 [1] (2 unstable [i386])
+Inst out-of-sync-gone-foreign [1] (2 unstable [amd64])
+Inst out-of-sync-gone-native:i386 [1] (2 unstable [i386])
+Conf fine (2 unstable [amd64])
+Conf fine:i386 (2 unstable [i386])
+Conf fine-installed (2 unstable [amd64])
+Conf fine-installed:i386 (2 unstable [i386])
+Conf out-of-sync-gone-foreign (2 unstable [amd64])
+Conf out-of-sync-gone-native:i386 (2 unstable [i386])' aptget dist-upgrade -s #-o Debug::pkgDepCache::Marker=1
+
+echo 'Package: fine:* fine-installed:*
+Pin: release a=experimental
+Pin-Priority: 500' > rootdir/etc/apt/preferences.d/experimental.pref
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ out-of-sync-gone-foreign:i386 out-of-sync-gone-native
+The following packages have been kept back:
+ out-of-sync-foreign:i386 out-of-sync-native
+The following packages will be upgraded:
+ fine fine:i386 fine-installed fine-installed:i386 out-of-sync-gone-foreign
+ out-of-sync-gone-native:i386
+6 upgraded, 0 newly installed, 2 to remove and 2 not upgraded.
+Remv out-of-sync-gone-foreign:i386 [1]
+Remv out-of-sync-gone-native [1]
+Inst fine [1] (3 experimental [amd64]) [fine:amd64 on fine:i386] [fine:i386 on fine:amd64] [fine:i386 ]
+Inst fine:i386 [1] (3 experimental [i386])
+Inst fine-installed [1] (3 experimental [amd64]) [fine-installed:amd64 on fine-installed:i386] [fine-installed:i386 on fine-installed:amd64] [fine-installed:i386 ]
+Inst fine-installed:i386 [1] (3 experimental [i386])
+Inst out-of-sync-gone-foreign [1] (2 unstable [amd64])
+Inst out-of-sync-gone-native:i386 [1] (2 unstable [i386])
+Conf fine (3 experimental [amd64])
+Conf fine:i386 (3 experimental [i386])
+Conf fine-installed (3 experimental [amd64])
+Conf fine-installed:i386 (3 experimental [i386])
+Conf out-of-sync-gone-foreign (2 unstable [amd64])
+Conf out-of-sync-gone-native:i386 (2 unstable [i386])' aptget dist-upgrade -s #-o Debug::pkgDepCache::Marker=1
+
+rm rootdir/var/lib/dpkg/status
+insertinstalledpackage 'libsame2' 'i386' '1' 'Multi-Arch: same'
+insertinstalledpackage 'libsame3' 'i386' '1' 'Multi-Arch: same'
+
+# the error message isn't great, but better than nothing, right?
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ depender2 : Depends: libsame2 (= 2) but it is not going to be installed
+E: Unable to correct problems, you have held broken packages.' aptget install depender2 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libsame3:i386 libsame3
+The following NEW packages will be installed:
+ depender3 libsame3
+The following packages will be upgraded:
+ libsame3:i386
+1 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame3:i386 [1] (3 unstable [i386])
+Inst libsame3 (3 unstable [amd64])
+Inst depender3 (3 unstable [all])
+Conf libsame3:i386 (3 unstable [i386])
+Conf libsame3 (3 unstable [amd64])
+Conf depender3 (3 unstable [all])' aptget install depender3 -s
diff --git a/test/integration/test-provides-gone-with-upgrade b/test/integration/test-provides-gone-with-upgrade
new file mode 100755
index 0000000..5249ea0
--- /dev/null
+++ b/test/integration/test-provides-gone-with-upgrade
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertinstalledpackage 'apt' 'i386' '0.8.14' 'Provides: libapt-pkg4.10'
+insertpackage 'unstable' 'apt' 'i386' '0.8.15' 'Depends: libapt-pkg4.10'
+insertpackage 'unstable' 'libapt-pkg4.10' 'i386' '0.8.15' 'Breaks: apt (<< 0.8.15)
+Replaces: apt (<< 0.8.15)'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ libapt-pkg4.10
+The following packages will be upgraded:
+ apt
+1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst apt [0.8.14] (0.8.15 unstable [i386]) []
+Inst libapt-pkg4.10 (0.8.15 unstable [i386])
+Conf libapt-pkg4.10 (0.8.15 unstable [i386])
+Conf apt (0.8.15 unstable [i386])' aptget dist-upgrade -s
diff --git a/test/integration/test-release-candidate-switching b/test/integration/test-release-candidate-switching
new file mode 100755
index 0000000..945f680
--- /dev/null
+++ b/test/integration/test-release-candidate-switching
@@ -0,0 +1,443 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'libc6' 'i386' '2.11.2-7+sid'
+insertpackage 'unstable' 'phonon-backend-xine' 'i386' '4:4.6.0really4.4.2-1+sid' 'Provides: phonon-backend'
+insertpackage 'unstable' 'phonon-backend-xine2' 'i386' '4:4.6.0really4.4.2-1+sid'
+insertpackage 'unstable' 'phonon-backend-xine3' 'i386' '4:4.6.0really4.4.2-1+sid'
+insertpackage 'unstable' 'phonon-backend-xine4' 'i386' '4:4.6.0really4.4.2-1+sid'
+insertpackage 'unstable' 'phonon-backend-null' 'i386' '4:4.20.0+sid' 'Provides: phonon-backend'
+insertpackage 'unstable' 'intermediatepkg' 'all' '1.0'
+
+insertpackage 'unstable' 'amarok-common' 'all' '2.3.1-1+sid'
+insertpackage 'unstable' 'amarok-utils' 'i386' '2.3.1-1+sid'
+insertpackage 'unstable' 'libmtp8' 'i386' '0.3.1+sid'
+insertpackage 'unstable' 'amarok' 'i386' '2.3.1-1+sid' 'Depends: amarok-common (= 2.3.1-1+sid), amarok-utils (= 2.3.1-1+sid), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6'
+
+insertpackage 'experimental' 'amarok-common' 'all' '2.3.2-2+exp'
+insertpackage 'experimental' 'amarok-utils' 'i386' '2.3.2-2+exp'
+insertpackage 'experimental' 'libmtp8' 'i386' '0.3.3+exp'
+insertpackage 'experimental' 'phonon-backend-xine' 'i386' '5:4.6.0+exp' 'Provides: phonon-backend'
+insertpackage 'experimental' 'phonon-backend-xine2' 'i386' '5:4.6.0+exp' 'Depends: uninstallablepkg
+Provides: phonon-backend-broken'
+insertpackage 'experimental' 'phonon-backend-xine3' 'i386' '5:4.6.0+exp' 'Depends: intermediatepkg (>= 1.5)'
+insertpackage 'experimental' 'phonon-backend-xine4' 'i386' '5:4.6.0+exp' 'Depends: intermediateuninstallablepkg (= 2.0)
+Provides: phonon-backend-broken'
+insertpackage 'experimental' 'intermediatepkg' 'all' '2.0' 'Depends: libc6'
+insertpackage 'experimental' 'intermediateuninstallablepkg' 'all' '2.0' 'Depends: uninstallablepkg'
+insertpackage 'experimental' 'phonon-backend-null' 'i386' '5:4.20.0+exp' 'Provides: phonon-backend'
+insertpackage 'experimental' 'amarok' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), amarok-utils (= 2.3.2-2+exp), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6'
+
+insertpackage 'experimental2' 'phonon-backend-xine' 'i386' '5:4.00.0+exp' 'Provides: phonon-backend'
+insertpackage 'experimental2' 'amarok-less' 'i386' '2.3.2-2+exp' 'Depends: amarok-common, phonon-backend-xine (>= 5:4.00.0+exp), libmtp8, libc6, amarok-utils'
+insertpackage 'experimental' 'amarok-higher' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (>= 5:4.6.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+
+insertpackage 'experimental' 'amarok-null' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+insertpackage 'experimental' 'amarok-null2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-null (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+insertpackage 'experimental' 'amarok-xine' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+insertpackage 'experimental' 'amarok-xine2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine2 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+insertpackage 'experimental' 'amarok-xine3' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine3 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+insertpackage 'experimental' 'amarok-xine4' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine4 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+insertpackage 'experimental' 'amarok-broken' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-broken | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)'
+
+insertpackage 'experimental' 'amarok-recommends' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp)
+Recommends: amarok-utils (= 2.3.2-2+exp), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6'
+insertpackage 'experimental' 'amarok-recommends2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp)
+Recommends: amarok-utils (= 2.30.2-2+exp), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6'
+
+insertpackage 'experimental' 'uninstallablepkg' 'all' '1.0' 'Depends: libmtp8 (>= 10:0.20.1), amarok-utils (= 2.3.2-2+exp)'
+
+setupaptarchive
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ amarok-common (2.3.1-1+sid)
+ amarok-utils (2.3.1-1+sid)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+The following NEW packages will be installed:
+ amarok (2.3.1-1+sid)
+ amarok-common (2.3.1-1+sid)
+ amarok-utils (2.3.1-1+sid)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok --trivial-only -V
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.3+exp)
+ phonon-backend-xine (5:4.6.0+exp)
+The following NEW packages will be installed:
+ amarok (2.3.2-2+exp)
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.3+exp)
+ phonon-backend-xine (5:4.6.0+exp)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok -t experimental --trivial-only -V
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+The following NEW packages will be installed:
+ amarok (2.3.2-2+exp)
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok/experimental --trivial-only -V
+
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-null'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (4:4.20.0+sid)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-null (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (4:4.20.0+sid)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-null/experimental --trivial-only -V
+
+# do not select the same version multiple times
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+The following NEW packages will be installed:
+ amarok (2.3.2-2+exp)
+ amarok-common (2.3.2-2+exp)
+ amarok-null (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 301 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok/experimental amarok-null/experimental --trivial-only -V
+
+# … but thighten the version if needed
+# in theory, the second line is wrong, but printing the right version is too much of a hassle
+# (we have to check if later in the Changed list is another change and if so use this version
+# instead of the current candidate) - and it wouldn't be (really) useful anyway…
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental2 [i386]) for 'amarok-less'
+Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-less'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-higher'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-higher'
+Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-higher'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-higher'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (5:4.6.0+exp)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-higher (2.3.2-2+exp)
+ amarok-less (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (5:4.6.0+exp)
+0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 301 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-less/experimental2 amarok-higher/experimental --trivial-only -V
+
+# phonon-backend-null can't be used directly, but as it provides it is still fine…
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null2'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-null2'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null2'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (4:4.20.0+sid)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-null2 (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (4:4.20.0+sid)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-null2/experimental --trivial-only -V
+
+# if an or-group satisfier is already found, do not set others
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine'
+Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-xine'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (5:4.6.0+exp)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ amarok-xine (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (5:4.6.0+exp)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine/experimental --trivial-only -V
+
+# … but proceed testing if the first doesn't work out
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine2'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine2'
+Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-xine2'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine2'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (5:4.20.0+exp)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ amarok-xine2 (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (5:4.20.0+exp)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine2/experimental --trivial-only -V
+
+# sometimes, the second level need to be corrected, too
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine3'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine3'
+Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine3' because of 'amarok-xine3'
+Selected version '2.0' (experimental [all]) for 'intermediatepkg' because of 'phonon-backend-xine3'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine3'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ intermediatepkg (2.0)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine3 (5:4.6.0+exp)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ amarok-xine3 (2.3.2-2+exp)
+ intermediatepkg (2.0)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine3 (5:4.6.0+exp)
+0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 301 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine3/experimental --trivial-only -V
+
+# … but proceed testing if the first doesn't work out even in second deep
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine4'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine4'
+Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-xine4'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine4'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (5:4.20.0+exp)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ amarok-xine4 (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (5:4.20.0+exp)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine4/experimental --trivial-only -V
+
+# providers can be broken, too
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-broken'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-broken'
+Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-broken'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-broken'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (5:4.20.0+exp)
+The following NEW packages will be installed:
+ amarok-broken (2.3.2-2+exp)
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-null (5:4.20.0+exp)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-broken/experimental --trivial-only -V
+
+# switch the candidate for recommends too if they should be installed
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends'
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-recommends'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-recommends (2.3.2-2+exp)
+ amarok-utils (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 258 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-recommends/experimental --trivial-only -V -o APT::Install-Recommends=1
+
+# … or not if not
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+Recommended packages:
+ amarok-utils (2.3.1-1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+ | phonon-backend
+ libmtp8 (0.3.1+sid)
+ libc6 (2.11.2-7+sid)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-recommends (2.3.2-2+exp)
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 86.0 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-recommends/experimental --trivial-only -V -o APT::Install-Recommends=0
+
+# but broken recommends are not the end of the world
+# FIXME: the version output for recommend packages is a bit strange… but what would be better?
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends2'
+Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends2'
+The following additional packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+Recommended packages:
+ amarok-utils (2.3.1-1+sid)
+The following NEW packages will be installed:
+ amarok-common (2.3.2-2+exp)
+ amarok-recommends2 (2.3.2-2+exp)
+ libc6 (2.11.2-7+sid)
+ libmtp8 (0.3.1+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 215 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install amarok-recommends2/experimental --trivial-only -V -o APT::Install-Recommends=1
+
+# if one depends doesn't work, we don't need to look deeper…
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '1.0' (experimental [all]) for 'uninstallablepkg'
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ uninstallablepkg : Depends: libmtp8 (>= 10:0.20.1) but it is not going to be installed
+ Depends: amarok-utils (= 2.3.2-2+exp) but 2.3.1-1+sid is to be installed
+E: Unable to correct problems, you have held broken packages." aptget install uninstallablepkg/experimental --trivial-only -V
+
+insertinstalledpackage 'libmtp8' 'i386' '1'
+insertinstalledpackage 'amarok' 'i386' '3' 'Depends: amarok-common (= 3), libmtp8 (>= 1)'
+insertinstalledpackage 'amarok-common' 'all' '3'
+# note that libmtp8 isn't downgraded as there is no need
+testfailureequal "Reading package lists...
+Building dependency tree...
+Selected version '2.3.1-1+sid' (unstable [i386]) for 'amarok'
+Selected version '2.3.1-1+sid' (unstable [all]) for 'amarok-common' because of 'amarok'
+The following additional packages will be installed:
+ amarok-common (2.3.1-1+sid)
+ amarok-utils (2.3.1-1+sid)
+ libc6 (2.11.2-7+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+The following NEW packages will be installed:
+ amarok-utils (2.3.1-1+sid)
+ libc6 (2.11.2-7+sid)
+ phonon-backend-xine (4:4.6.0really4.4.2-1+sid)
+The following packages will be DOWNGRADED:
+ amarok (3 => 2.3.1-1+sid)
+ amarok-common (3 => 2.3.1-1+sid)
+0 upgraded, 3 newly installed, 2 downgraded, 0 to remove and 0 not upgraded.
+After this operation, 129 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." apt install amarok/sid --trivial-only -V
diff --git a/test/integration/test-releasefile-date b/test/integration/test-releasefile-date
new file mode 100755
index 0000000..a985074
--- /dev/null
+++ b/test/integration/test-releasefile-date
@@ -0,0 +1,46 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'wheezy' 'apt' 'all' '0.8.15'
+
+getlabelfromsuite() {
+ echo -n 'Testcases'
+}
+
+setupaptarchive --no-update
+
+runtest() {
+ local MSG="$1"
+ msgtest "Release file is $MSG as it has" "$2"
+ rm -rf rootdir/var/lib/apt/lists
+ generatereleasefiles "$3"
+ signreleasefiles
+ shift 3
+ if [ "$MSG" = 'accepted' ]; then
+ testsuccess --nomsg aptget update "$@"
+ testfailure grep -q 'is not valid yet' rootdir/tmp/testsuccess.output
+ else
+ testfailure --nomsg aptget update "$@"
+ testsuccess grep -q 'is not valid yet' rootdir/tmp/testfailure.output
+ fi
+}
+
+
+runtest 'accepted' 'no date' ''
+runtest 'accepted' 'ok date' 'now + 1 hour'
+runtest 'rejected' 'date to far in the future' 'now + 12 hours'
+runtest 'accepted' 'date to far in the future, but accepted via option' 'now + 12 hours' -o Acquire::Max-FutureTime=86400
+
+sed -i -e 's#\(deb\(-src\)\?\) #\1 [check-date=no] #' rootdir/etc/apt/sources.list.d/*
+runtest 'accepted' 'bad Date but overridden by sources option' 'now + 1 day'
+
+sed -i -e 's#\(deb\(-src\)\?\) \[.*\] #\1 [date-max-future=86400] #' rootdir/etc/apt/sources.list.d/*
+runtest 'accepted' 'Date allowed via sources list option via sources option' 'now + 12 hours'
+
+sed -i -e 's#\(deb\(-src\)\?\) \[.*\] #\1 [date-max-future=86405] #' rootdir/etc/apt/sources.list.d/*
+runtest 'rejected' 'Date further in the future than allowed by sources.list option' 'now + 2 day'
diff --git a/test/integration/test-releasefile-date-older b/test/integration/test-releasefile-date-older
new file mode 100755
index 0000000..e38ddc3
--- /dev/null
+++ b/test/integration/test-releasefile-date-older
@@ -0,0 +1,104 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'wheezy' 'apt' 'all' '0.8.15'
+
+setupaptarchive --no-update
+
+# we don't complain as the server could have just sent a 'Hit' here and this
+# 'downgrade attack' is usually performed by out-of-sync mirrors. Valid-Until
+# catches the 'real' downgrade attacks (expect that it finds stale mirrors).
+# Scaring users with an error here serves hence no point.
+
+msgmsg 'InRelease file is silently rejected if' 'new Date is before old Date'
+rm -rf rootdir/var/lib/apt/lists
+generatereleasefiles 'now' 'now + 7 days'
+signreleasefiles
+testsuccess aptget update
+listcurrentlistsdirectory > listsdir.lst
+redatereleasefiles 'now - 2 days'
+testsuccess aptget update
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+
+msgmsg 'Release.gpg file is silently rejected if' 'new Date is before old Date'
+export APT_DONT_SIGN='InRelease'
+rm -rf rootdir/var/lib/apt/lists
+generatereleasefiles 'now' 'now + 7 days'
+signreleasefiles
+testsuccess aptget update
+listcurrentlistsdirectory > listsdir.lst
+redatereleasefiles 'now - 2 days'
+testsuccess aptget update
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+unset APT_DONT_SIGN
+
+msgmsg 'Crisscross InRelease/Release.gpg file is silently rejected if' 'new Date is before old Date'
+export APT_DONT_SIGN='Release.gpg'
+rm -rf rootdir/var/lib/apt/lists
+generatereleasefiles 'now' 'now + 7 days'
+signreleasefiles
+testsuccess aptget update
+export APT_DONT_SIGN='InRelease'
+listcurrentlistsdirectory > listsdir.lst
+redatereleasefiles 'now - 2 days'
+testsuccess aptget update
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+unset APT_DONT_SIGN
+
+msgmsg 'Crisscross Release.gpg/InRelease file is silently rejected if' 'new Date is before old Date'
+export APT_DONT_SIGN='InRelease'
+rm -rf rootdir/var/lib/apt/lists
+generatereleasefiles 'now' 'now + 7 days'
+signreleasefiles
+find aptarchive -name 'InRelease' -delete
+testsuccess aptget update
+export APT_DONT_SIGN='Release.gpg'
+listcurrentlistsdirectory > listsdir.lst
+redatereleasefiles 'now - 2 days'
+testsuccess aptget update
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+unset APT_DONT_SIGN
+
+msgmsg 'Release file has' 'no Date and no Valid-Until field'
+rm -rf rootdir/var/lib/apt/lists
+generatereleasefiles 'now'
+sed -i '/^Date: / d' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testwarning aptget update
+listcurrentlistsdirectory > listsdir.lst
+# have no effect as Date is unknown
+testwarning aptget update -o Acquire::Min-ValidTime=$((3600*24*30))
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+testwarning aptget update -o Acquire::Max-ValidTime=1
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+sed -i '/^Codename: / a\
+Another-Field: yes' $(find aptarchive/ -name 'Release')
+touch -d 'now + 1 day' $(find aptarchive/ -name 'Release')
+signreleasefiles "${2:-Joe Sixpack}"
+testwarning aptget update
+testsuccess cmp $(find aptarchive/ -name 'InRelease') $(find rootdir/var/lib/apt/ -name '*_InRelease')
+
+msgmsg 'Release file has' 'no Date field, but Valid-Until expired'
+rm -rf rootdir/var/lib/apt/lists
+generatereleasefiles 'now' 'now - 2 days'
+sed -i '/^Date: / d' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testfailure aptget update
+listcurrentlistsdirectory > listsdir.lst
+# have no effect as Date is unknown
+testfailure aptget update -o Acquire::Min-ValidTime=$((3600*24*30))
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+testfailure aptget update -o Acquire::Max-ValidTime=1
+testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
+
+msgmsg 'Release file has' 'no Date field, but Valid-Until is good'
+rm -rf rootdir/var/lib/apt/lists
+generatereleasefiles 'now' 'now + 2 days'
+sed -i '/^Date: / d' $(find ./aptarchive -name 'Release')
+signreleasefiles
+testwarning aptget update
diff --git a/test/integration/test-releasefile-valid-until b/test/integration/test-releasefile-valid-until
new file mode 100755
index 0000000..b18dde2
--- /dev/null
+++ b/test/integration/test-releasefile-valid-until
@@ -0,0 +1,57 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'wheezy' 'apt' 'all' '0.8.15'
+
+getlabelfromsuite() {
+ echo -n 'Testcases'
+}
+
+setupaptarchive --no-update
+
+runtest() {
+ local MSG="$1"
+ msgtest "Release file is $MSG as it has" "$2"
+ rm -rf rootdir/var/lib/apt/lists
+ generatereleasefiles "$3" "$4"
+ signreleasefiles
+ shift 4
+ if [ "$MSG" = 'accepted' ]; then
+ testsuccess --nomsg aptget update "$@"
+ testfailure grep -q 'is expired' rootdir/tmp/testsuccess.output
+ else
+ testfailure --nomsg aptget update "$@"
+ testsuccess grep -q 'is expired' rootdir/tmp/testfailure.output
+ fi
+}
+
+runtest 'accepted' 'no Until' '' ''
+runtest 'accepted' 'no Until and good Max-Valid' '' '' -o Acquire::Max-ValidTime=3600
+runtest 'rejected' 'no Until, but bad Max-Valid' 'now - 2 days' '' -o Acquire::Max-ValidTime=3600
+runtest 'accepted' 'good Until' 'now - 3 days' 'now + 1 day'
+runtest 'rejected' 'bad Until' 'now - 7 days' 'now - 4 days'
+runtest 'rejected' 'bad Until (ignore good Max-Valid)' 'now - 7 days' 'now - 4 days' -o Acquire::Max-ValidTime=1209600
+runtest 'rejected' 'bad Max-Valid (bad Until)' 'now - 7 days' 'now - 4 days' -o Acquire::Max-ValidTime=86400
+runtest 'rejected' 'bad Max-Valid (good Until)' 'now - 7 days' 'now + 4 days' -o Acquire::Max-ValidTime=86400
+runtest 'accepted' 'good labeled Max-Valid' 'now - 7 days' 'now + 4 days' -o Acquire::Max-ValidTime=86400 -o Acquire::Max-ValidTime::Testcases=1209600
+runtest 'rejected' 'bad labeled Max-Valid' 'now - 7 days' 'now + 4 days' -o Acquire::Max-ValidTime=1209600 -o Acquire::Max-ValidTime::Testcases=86400
+runtest 'accepted' 'good Until (good Min-Valid, no Max-Valid)' 'now - 7 days' 'now + 1 days' -o Acquire::Min-ValidTime=1209600
+runtest 'accepted' 'good Min-Valid (bad Until, no Max-Valid)' 'now - 7 days' 'now - 4 days' -o Acquire::Min-ValidTime=1209600
+runtest 'accepted' 'good Min-Valid (bad Until, good Max-Valid) <' 'now - 7 days' 'now - 2 days' -o Acquire::Min-ValidTime=1209600 -o Acquire::Max-ValidTime=2419200
+runtest 'rejected' 'bad Max-Valid (bad Until, good Min-Valid) >' 'now - 7 days' 'now - 2 days' -o Acquire::Max-ValidTime=12096 -o Acquire::Min-ValidTime=2419200
+runtest 'rejected' 'bad Max-Valid (bad Until, bad Min-Valid) <' 'now - 7 days' 'now - 2 days' -o Acquire::Min-ValidTime=12096 -o Acquire::Max-ValidTime=241920
+runtest 'rejected' 'bad Max-Valid (bad Until, bad Min-Valid) >' 'now - 7 days' 'now - 2 days' -o Acquire::Max-ValidTime=12096 -o Acquire::Min-ValidTime=241920
+
+sed -i -e 's#\(deb\(-src\)\?\) #\1 [check-valid-until=no] #' rootdir/etc/apt/sources.list.d/*
+runtest 'accepted' 'bad Until but overridden by sources option' 'now - 7 days' 'now - 4 days'
+
+sed -i -e 's#\(deb\(-src\)\?\) \[check-valid-until=no\] #\1 [valid-until-max=86400] #' rootdir/etc/apt/sources.list.d/*
+runtest 'rejected' 'bad Max-Valid (good Until) via sources option' 'now - 7 days' 'now + 4 days'
+
+sed -i -e 's#\(deb\(-src\)\?\) \[valid-until-max=86400\] #\1 [valid-until-min=1209600] #' rootdir/etc/apt/sources.list.d/*
+runtest 'accepted' 'good Min-Valid (bad Until) via sources option' 'now - 7 days' 'now - 4 days'
diff --git a/test/integration/test-releasefile-verification b/test/integration/test-releasefile-verification
new file mode 100755
index 0000000..382d89e
--- /dev/null
+++ b/test/integration/test-releasefile-verification
@@ -0,0 +1,505 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+export APT_DONT_SIGN='Release.gpg'
+buildaptarchive
+setupflataptarchive
+changetowebserver
+
+prepare() {
+ local DATE="${2:-now}"
+ if [ "$DATE" = 'now' ]; then
+ if [ "$1" = "${PKGFILE}-new" ]; then
+ DATE='now - 1 day'
+ else
+ DATE='now - 7 day'
+ fi
+ fi
+ for release in $(find rootdir/var/lib/apt/lists 2> /dev/null); do
+ touch -d 'now - 1 year' "$release"
+ done
+ aptget clean
+ cp "$1" aptarchive/Packages
+ find aptarchive -name 'Release' -delete
+ compressfile 'aptarchive/Packages' "$DATE"
+ generatereleasefiles "$DATE" 'now + 1 month'
+}
+
+installaptold() {
+ rm -rf rootdir/var/cache/apt/archives
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+Suggested packages:
+ aptitude | synaptic | wajig dpkg-dev apt-doc bzip2 lzma python-apt
+The following NEW packages will be installed:
+ apt
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 5370 kB of additional disk space will be used.
+Get:1 http://localhost:${APTHTTPPORT} apt 0.7.25.3
+Download complete and in download only mode" aptget install apt -dy
+}
+
+installaptnew() {
+ rm -rf rootdir/var/cache/apt/archives
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+Suggested packages:
+ aptitude | synaptic | wajig dpkg-dev apt-doc bzip2 lzma python-apt
+The following NEW packages will be installed:
+ apt
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 5808 kB of additional disk space will be used.
+Get:1 http://localhost:${APTHTTPPORT} apt 0.8.0~pre1
+Download complete and in download only mode" aptget install apt -dy
+}
+
+failaptold() {
+ testfailureequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ aptitude | synaptic | wajig dpkg-dev apt-doc bzip2 lzma python-apt
+The following NEW packages will be installed:
+ apt
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 5370 kB of additional disk space will be used.
+WARNING: The following packages cannot be authenticated!
+ apt
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated' aptget install apt -dy
+}
+
+failaptnew() {
+ testfailureequal 'Reading package lists...
+Building dependency tree...
+Suggested packages:
+ aptitude | synaptic | wajig dpkg-dev apt-doc bzip2 lzma python-apt
+The following NEW packages will be installed:
+ apt
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+After this operation, 5808 kB of additional disk space will be used.
+WARNING: The following packages cannot be authenticated!
+ apt
+E: There were unauthenticated packages and -y was used without --allow-unauthenticated' aptget install apt -dy
+}
+
+# fake our downloadable file
+touch aptarchive/apt.deb
+
+PKGFILE="${TESTDIR}/$(echo "$(basename "$0")" | sed 's#^test-#Packages-#')"
+
+updatewithwarnings() {
+ testwarning aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+ testsuccess grep -E "$1" rootdir/tmp/testwarning.output
+}
+
+runtest() {
+ msgmsg 'Cold archive signed by' 'Joe Sixpack'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack'
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ if [ "$(id -u)" != '0' ]; then
+ msgmsg 'Cold archive signed by' 'Joe Sixpack + unreadable key'
+ rm -rf rootdir/var/lib/apt/lists
+ echo 'foobar' > rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg
+ chmod 000 rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg
+ updatewithwarnings '^W: .* is not readable by user'
+ chmod 644 rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg
+ rm -f rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+ fi
+
+ msgmsg 'Good warm archive signed by' 'Joe Sixpack'
+ prepare "${PKGFILE}-new"
+ signreleasefiles 'Joe Sixpack'
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+
+ msgmsg 'Cold archive signed by' 'Rex Expired'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
+ signreleasefiles 'Rex Expired'
+ updatewithwarnings '^W: .* EXPKEYSIG'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ failaptold
+ rm -f rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
+
+ msgmsg 'Cold archive expired signed by' 'Joe Sixpack'
+ if dpkg --compare-versions "$(aptkey adv --version | head -n 2 | tail -n 1 | cut -d' ' -f 3)" '>=' '2.1' >/dev/null 2>&1; then
+ touch rootdir/etc/apt/apt.conf.d/99gnupg2
+ elif gpg2 --version >/dev/null 2>&1; then
+ echo 'Apt::Key::gpgcommand "gpg2";' > rootdir/etc/apt/apt.conf.d/99gnupg2
+ if ! dpkg --compare-versions "$(aptkey adv --version | head -n 2 | tail -n 1 | cut -d' ' -f 3)" '>=' '2.1' >/dev/null 2>&1; then
+ rm rootdir/etc/apt/apt.conf.d/99gnupg2
+ fi
+ fi
+ if [ -e rootdir/etc/apt/apt.conf.d/99gnupg2 ]; then
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack' 'aptarchive' --faked-system-time "20070924T154812" --default-sig-expire 2016-04-01
+ updatewithwarnings '^W: .* EXPSIG'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ failaptold
+ rm -f rootdir/etc/apt/apt.conf.d/99gnupg2
+ else
+ msgskip 'Not a new enough gpg available providing --fake-system-time'
+ fi
+
+ msgmsg 'Cold archive signed by' 'Joe Sixpack,Marvin Paranoid'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack,Marvin Paranoid'
+ successfulaptgetupdate 'NO_PUBKEY'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Cold archive signed by' 'Joe Sixpack,Rex Expired'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack,Rex Expired'
+ cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
+ successfulaptgetupdate 'EXPKEYSIG'
+ rm -f rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Cold archive signed by' 'Marvin Paranoid'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Marvin Paranoid'
+ updatewithwarnings '^W: .* NO_PUBKEY'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ failaptold
+
+ msgmsg 'Bad warm archive signed by' 'Joe Sixpack'
+ prepare "${PKGFILE}-new"
+ signreleasefiles 'Joe Sixpack'
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+
+ msgmsg 'Cold archive signed by' 'Joe Sixpack'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack'
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Good warm archive signed by' 'Marvin Paranoid'
+ prepare "${PKGFILE}-new"
+ signreleasefiles 'Marvin Paranoid'
+ updatewithwarnings '^W: .* NO_PUBKEY'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Good warm archive signed by' 'Rex Expired'
+ prepare "${PKGFILE}-new"
+ cp keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
+ signreleasefiles 'Rex Expired'
+ updatewithwarnings '^W: .* EXPKEYSIG'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+ rm rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
+
+ msgmsg 'Good warm archive signed by' 'Joe Sixpack'
+ prepare "${PKGFILE}-new"
+ signreleasefiles
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+
+ msgmsg 'Cold archive signed by bad keyring' 'Joe Sixpack'
+ rm -rf rootdir/var/lib/apt/lists
+ local MARVIN="$(readlink -f keys/marvinparanoid.pub)"
+ sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
+ updatewithwarnings '^W: .* NO_PUBKEY'
+
+ msgmsg 'Cold archive signed by good keyring' 'Marvin Paranoid'
+ prepare "${PKGFILE}"
+ signreleasefiles 'Marvin Paranoid'
+ rm -rf rootdir/var/lib/apt/lists
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Cold archive signed by good keyrings' 'Marvin Paranoid, Joe Sixpack'
+ rm -rf rootdir/var/lib/apt/lists
+ local SIXPACK="$(readlink -f keys/joesixpack.pub)"
+ sed -i "s# \[signed-by=[^]]\+\] # [signed-by=$MARVIN,$SIXPACK] #" rootdir/etc/apt/sources.list.d/*
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Cold archive signed by good keyrings' 'Joe Sixpack, Marvin Paranoid'
+ rm -rf rootdir/var/lib/apt/lists
+ local SIXPACK="$(readlink -f keys/joesixpack.pub)"
+ sed -i "s# \[signed-by=[^]]\+\] # [signed-by=$SIXPACK,$MARVIN] #" rootdir/etc/apt/sources.list.d/*
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+ sed -i "s# \[signed-by=[^]]\+\] # #" rootdir/etc/apt/sources.list.d/*
+
+ local MARVIN="$(aptkey --keyring $MARVIN finger --with-colons | grep '^fpr' | cut -d':' -f 10)"
+ msgmsg 'Cold archive signed by bad keyid' 'Joe Sixpack'
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack'
+ sed -i "s#^\(deb\(-src\)\?\) #\1 [signed-by=$MARVIN] #" rootdir/etc/apt/sources.list.d/*
+ updatewithwarnings '^W: .* be verified because the public key is not available: .*'
+
+ msgmsg 'Cold archive signed by good keyid' 'Marvin Paranoid'
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Marvin Paranoid'
+ cp keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Cold archive signed by good keyid' 'Marvin Paranoid,Joe Sixpack'
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Marvin Paranoid,Joe Sixpack'
+ successfulaptgetupdate 'NoPubKey: GOODSIG'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ local SIXPACK="$(aptkey --keyring keys/joesixpack.pub finger --with-colons | grep '^fpr' | cut -d':' -f 10)"
+ msgmsg 'Cold archive signed by good keyids' 'Joe Sixpack'
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack'
+ sed -i "s#^\(deb\(-src\)\?\) \[signed-by=$MARVIN\] #\1 [signed-by=${SIXPACK},${MARVIN}] #" rootdir/etc/apt/sources.list.d/*
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Cold archive signed by good keyids' 'Joe Sixpack'
+ rm -rf rootdir/var/lib/apt/lists
+ sed -i "s#^\(deb\(-src\)\?\) \[signed-by=${SIXPACK},${MARVIN}\] #\1 [signed-by=${MARVIN},${SIXPACK}] #" rootdir/etc/apt/sources.list.d/*
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+ rm -f rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
+ sed -i "s#^\(deb\(-src\)\?\) \[signed-by=${MARVIN},${SIXPACK}\] #\1 #" rootdir/etc/apt/sources.list.d/*
+
+ rm -rf rootdir/var/lib/apt/lists-bak
+ cp -a rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists-bak
+ prepare "${PKGFILE}-new"
+ signreleasefiles 'Joe Sixpack'
+
+ msgmsg 'Warm archive with signed-by' 'Joe Sixpack'
+ sed -i "/^Valid-Until: / a\
+Signed-By: ${SIXPACK}" rootdir/var/lib/apt/lists/*Release
+ touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+
+ msgmsg 'Warm archive with signed-by' 'Marvin Paranoid'
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ sed -i "/^Valid-Until: / a\
+Signed-By: ${MARVIN}" rootdir/var/lib/apt/lists/*Release
+ touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+ updatewithwarnings 'W: .* public key is not available: GOODSIG'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ msgmsg 'Warm archive with outdated signed-by' 'Marvin Paranoid'
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ sed -i "/^Valid-Until: / a\
+Valid-Until: $(date -u -d "now - 2min" '+%a, %d %b %Y %H:%M:%S %Z') \\
+Signed-By: ${MARVIN}" rootdir/var/lib/apt/lists/*Release
+ touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+
+ msgmsg 'Warm archive with two signed-bys' 'Joe Sixpack'
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ sed -i "/^Valid-Until: / a\
+Signed-By: ${MARVIN} ${MARVIN}, \\
+ ${SIXPACK}" rootdir/var/lib/apt/lists/*Release
+ touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+
+ cp -a keys/sebastiansubkey.pub rootdir/etc/apt/trusted.gpg.d/sebastiansubkey.gpg
+ local SEBASTIAN="$(aptkey --keyring keys/sebastiansubkey.pub finger --with-colons | grep -m 1 '^fpr' | cut -d':' -f 10)"
+ msgmsg 'Warm archive with subkey signing' 'Sebastian Subkey'
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ signreleasefiles 'Sebastian Subkey'
+ sed -i "/^Valid-Until: / a\
+Signed-By: ${SEBASTIAN}" rootdir/var/lib/apt/lists/*Release
+ touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+
+ msgmsg 'Warm archive with wrong exact subkey signing' 'Sebastian Subkey'
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ sed -i "/^Valid-Until: / a\
+Signed-By: ${SEBASTIAN}!" rootdir/var/lib/apt/lists/*Release
+ touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+ updatewithwarnings 'W: .* public key is not available: GOODSIG'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ installaptold
+
+ local SUBKEY="$(aptkey --keyring keys/sebastiansubkey.pub finger --with-colons | grep -m 2 '^fpr' | tail -n -1 | cut -d':' -f 10)"
+ msgmsg 'Warm archive with correct exact subkey signing' 'Sebastian Subkey'
+ rm -rf rootdir/var/lib/apt/lists
+ cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ sed -i "/^Valid-Until: / a\
+Signed-By: ${SUBKEY}!" rootdir/var/lib/apt/lists/*Release
+ touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+ successfulaptgetupdate
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ installaptnew
+ rm -f rootdir/etc/apt/trusted.gpg.d/sebastiansubkey.gpg
+}
+
+runtest2() {
+ msgmsg 'Cold archive signed by' 'Joe Sixpack'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack'
+ successfulaptgetupdate
+
+ # New .deb but now an unsigned archive. For example MITM to circumvent
+ # package verification.
+ msgmsg 'Warm archive signed by' 'nobody'
+ prepare "${PKGFILE}-new"
+ find aptarchive/ \( -name InRelease -o -name Release.gpg \) -delete
+ updatewithwarnings 'W: .* no longer signed.'
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ failaptnew
+
+ # Unsigned archive from the beginning must also be detected.
+ msgmsg 'Cold archive signed by' 'nobody'
+ rm -rf rootdir/var/lib/apt/lists
+ updatewithwarnings 'W: .* is not signed.'
+ testsuccessequal "$(cat "${PKGFILE}-new")
+" aptcache show apt
+ failaptnew
+}
+
+runtest3() {
+ echo "APT::Hashes::$APT_TESTS_DIGEST_ALGO::$1 \"yes\";" > rootdir/etc/apt/apt.conf.d/truststate
+ msgmsg "Running base test with $1 digest"
+ runtest2
+
+ for DELETEFILE in 'InRelease' 'Release.gpg'; do
+ export APT_DONT_SIGN="$DELETEFILE"
+ msgmsg "Running test with deletion of $DELETEFILE and $1 digest"
+ runtest
+ export APT_DONT_SIGN='Release.gpg'
+ done
+}
+
+# disable some protection by default and ensure we still do the verification
+# correctly
+cat > rootdir/etc/apt/apt.conf.d/weaken-security <<EOF
+Acquire::AllowInsecureRepositories "1";
+Acquire::AllowDowngradeToInsecureRepositories "1";
+EOF
+# the hash marked as configurable in our gpgv method
+export APT_TESTS_DIGEST_ALGO='SHA224'
+
+successfulaptgetupdate() {
+ testsuccess aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+ if [ -n "$1" ]; then
+ cp rootdir/tmp/testsuccess.output aptupdate.output
+ testsuccess grep "$1" aptupdate.output
+ fi
+}
+runtest3 'Trusted'
+
+successfulaptgetupdate() {
+ testwarning aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+ if [ -n "$1" ]; then
+ testsuccess grep "$1" rootdir/tmp/testwarning.output
+ fi
+ testsuccess grep 'uses weak digest algorithm' rootdir/tmp/testwarning.output
+}
+runtest3 'Weak'
+
+msgmsg "Running test with apt-untrusted digest"
+echo "APT::Hashes::$APT_TESTS_DIGEST_ALGO::Untrusted \"yes\";" > rootdir/etc/apt/apt.conf.d/truststate
+runfailure() {
+ for DELETEFILE in 'InRelease' 'Release.gpg'; do
+ export APT_DONT_SIGN="$DELETEFILE"
+ msgmsg 'Cold archive signed by' 'Joe Sixpack'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Joe Sixpack'
+ testfailure aptget update --no-allow-insecure-repositories -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+ testsuccess grep 'The following signatures were invalid' rootdir/tmp/testfailure.output
+ testnopackage 'apt'
+ testwarning aptget update --allow-insecure-repositories -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+ failaptold
+ rm -rf rootdir/var/lib/apt/lists
+ sed -i 's#^deb\(-src\)\? #deb\1 [allow-insecure=yes] #' rootdir/etc/apt/sources.list.d/*
+ testwarning aptget update --no-allow-insecure-repositories -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+ failaptold
+ sed -i 's#^deb\(-src\)\? \[allow-insecure=yes\] #deb\1 #' rootdir/etc/apt/sources.list.d/*
+
+ msgmsg 'Cold archive signed by' 'Marvin Paranoid'
+ prepare "${PKGFILE}"
+ rm -rf rootdir/var/lib/apt/lists
+ signreleasefiles 'Marvin Paranoid'
+ testfailure aptget update --no-allow-insecure-repositories -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
+ testnopackage 'apt'
+ updatewithwarnings '^W: .* NO_PUBKEY'
+ testsuccessequal "$(cat "${PKGFILE}")
+" aptcache show apt
+ failaptold
+ export APT_DONT_SIGN='Release.gpg'
+ done
+}
+runfailure
+
+msgmsg "Running test with gpgv-untrusted digest"
+export APT_TESTS_DIGEST_ALGO='MD5'
+runfailure
diff --git a/test/integration/test-releasefile-verification-noflat b/test/integration/test-releasefile-verification-noflat
new file mode 100755
index 0000000..3953c64
--- /dev/null
+++ b/test/integration/test-releasefile-verification-noflat
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+export APT_DONT_SIGN='Release.gpg'
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+setupaptarchive "now" "now + 1 year"
+changetowebserver
+
+SIXPACK="$(aptkey --keyring keys/joesixpack.pub finger | grep 'Key fingerprint' | cut -d'=' -f 2 | tr -d ' ')"
+
+testsuccess aptget update
+
+msgmsg 'Warm archive with signed-by' 'Joe Sixpack'
+sed -i "/^Valid-Until: / a\
+Signed-By: ${SIXPACK}" rootdir/var/lib/apt/lists/*Release
+touch -d 'now - 1 year' rootdir/var/lib/apt/lists/*Release
+testsuccessequal "Get:1 http://localhost:${APTHTTPPORT} unstable InRelease [$(stat -c '%s' 'aptarchive/dists/unstable/InRelease') B]
+Reading package lists..." aptget update
+testsuccess aptcache show foo
diff --git a/test/integration/test-resolve-by-keep-new-recommends b/test/integration/test-resolve-by-keep-new-recommends
new file mode 100755
index 0000000..3591ed8
--- /dev/null
+++ b/test/integration/test-resolve-by-keep-new-recommends
@@ -0,0 +1,21 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertinstalledpackage 'foo' 'i386' '1.0'
+insertpackage 'unstable' 'foo' 'i386' '2.0' 'Recommends: bar'
+
+setupaptarchive
+
+UPGRADE_KEEP="Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ foo
+0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded."
+testsuccessequal "$UPGRADE_KEEP" aptget upgrade -s
+
diff --git a/test/integration/test-security-no-remote-status b/test/integration/test-security-no-remote-status
new file mode 100755
index 0000000..7db979e
--- /dev/null
+++ b/test/integration/test-security-no-remote-status
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Test that packages from remote sources cannot set the Status field.
+#
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+TMPDIR=$(readlink -f .)
+
+insertpackage 'unstable' 'pretends-installed' 'all' '1' 'Status: install ok installed'
+insertinstalledpackage 'really-installed' 'all' '1'
+setupaptarchive
+
+testequal "pretends-installed:
+ Installed: (none)
+ Candidate: 1
+ Version table:
+ 1 500
+ 500 file:${TMPDIR}/aptarchive unstable/main all Packages" aptcache policy pretends-installed
+
+testequal "really-installed:
+ Installed: 1
+ Candidate: 1
+ Version table:
+ *** 1 100
+ 100 ${TMPDIR}/rootdir/var/lib/dpkg/status" aptcache policy really-installed
diff --git a/test/integration/test-signed-by-option b/test/integration/test-signed-by-option
new file mode 100755
index 0000000..faa7dec
--- /dev/null
+++ b/test/integration/test-signed-by-option
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+msgtest 'Check that a repository with' 'signed-by and two components works'
+echo 'deb [signed-by=CDE5618B8805FD6E202CE9C2D73C39E56580B386] https://people.debian.org/~jak/debian/ stable main contrib # Äffchen' > rootdir/etc/apt/sources.list
+testsuccess --nomsg aptcache policy
+
+msgtest 'Check that a repository with' 'two fingerprints work'
+echo 'deb [signed-by=CDE5618B8805FD6E202CE9C2D73C39E56580B386,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA] https://people.debian.org/~jak/debian/ stable main contrib # Äffchen' > rootdir/etc/apt/sources.list
+testsuccess --nomsg aptcache policy
+
+msgtest 'Check that a repository with' 'exact fingerprint works'
+echo 'deb [signed-by=CDE5618B8805FD6E202CE9C2D73C39E56580B386!] https://people.debian.org/~jak/debian/ stable main contrib # Äffchen' > rootdir/etc/apt/sources.list
+testsuccess --nomsg aptcache policy
+
+msgtest 'Check that a repository with' 'whitespaced fingerprints work'
+echo 'deb [signed-by=CDE5618B8805FD6E202CE9C2D73C39E56580B386!,,,,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA] https://people.debian.org/~jak/debian/ stable main contrib # Äffchen' > rootdir/etc/apt/sources.list
+cat > rootdir/etc/apt/sources.list.d/people.sources <<EOF
+Types: deb
+URIs: mirror+file:/var/lib/apt/mirror.lst
+Suites: stable testing
+Components: main contrib
+Architectures: amd64 i386
+Signed-By: CDE5618B8805FD6E202CE9C2D73C39E56580B386! AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ , , BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
+EOF
+testsuccess --nomsg aptcache policy
diff --git a/test/integration/test-sourceslist-arch-plusminus-options b/test/integration/test-sourceslist-arch-plusminus-options
new file mode 100755
index 0000000..fdf33cc
--- /dev/null
+++ b/test/integration/test-sourceslist-arch-plusminus-options
@@ -0,0 +1,94 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+testbinaries() {
+ msgtest 'Test acquired archs for' "$1"
+ shift
+ rm -f gotarchs.list
+ aptget update --print-uris | grep -o '/binary-[a-z0-9-]\+/Packages' | sort > gotarchs.list
+ while [ -n "$1" ]; do
+ echo "/binary-${1}/Packages"
+ shift
+ done | sort | checkdiff - gotarchs.list && msgpass || msgfail
+}
+
+echo 'deb http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'default & native' 'amd64' 'all'
+configarchitecture 'amd64' 'i386'
+testbinaries 'default & native + foreign' 'amd64' 'i386' 'all'
+configarchitecture 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel'
+testbinaries 'default & native + many foreigns' 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'all'
+
+echo 'deb [arch=amd64] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch=native' 'amd64' 'all'
+
+echo 'deb [arch=mips] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch=foreign' 'mips' 'all'
+
+echo 'deb [arch=kfreebsd-armel] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch=unknown' 'kfreebsd-armel' 'all'
+
+echo 'deb [arch=amd64,i386] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch=native,foreign' 'amd64' 'i386' 'all'
+
+echo 'deb [arch=mips,armhf] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch=foreign,foreign' 'mips' 'armhf' 'all'
+
+echo 'deb [arch=kfreebsd-armel,hurd-powerpc,mipsel,armel] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch=unknown,unknown,foreign,foreign' 'kfreebsd-armel' 'hurd-powerpc' 'mipsel' 'armel' 'all'
+
+echo 'deb [arch+=amd64] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch+=native' 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'all'
+
+echo 'deb [arch+=mips] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch+=foreign' 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'all'
+
+echo 'deb [arch+=mips,armhf,i386] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch+=foreign,foreign,foreign' 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'all'
+
+echo 'deb [arch+=hurd-powerpc] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch+=unknown' 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'hurd-powerpc' 'all'
+
+echo 'deb [arch+=mips,hurd-powerpc,i386] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch+=foreign,unknown,foreign' 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'hurd-powerpc' 'all'
+
+echo 'deb [arch-=amd64] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch-=native' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'all'
+
+echo 'deb [arch-=mips] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch-=foreign' 'amd64' 'i386' 'armel' 'armhf' 'mipsel' 'all'
+
+echo 'deb [arch-=mips,armhf,i386] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch-=foreign,foreign,foreign' 'amd64' 'armel' 'mipsel' 'all'
+
+echo 'deb [arch-=hurd-powerpc] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch-=unknown' 'amd64' 'i386' 'armel' 'armhf' 'mips' 'mipsel' 'all'
+
+echo 'deb [arch-=mips,hurd-powerpc,i386] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'arch-=foreign,unknown,foreign' 'amd64' 'armel' 'armhf' 'mipsel' 'all'
+
+echo 'deb [arch=mips,i386 arch-=mips] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'subtract from a arch-set' 'i386' 'all'
+
+echo 'deb [arch=mips,i386 arch-=mips] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'useless subtract from a arch-set' 'i386' 'all'
+
+echo 'deb [arch=mips,i386 arch+=armhf] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'addition to a arch-set' 'i386' 'mips' 'armhf' 'all'
+
+echo 'deb [arch=mips,i386 arch+=mips] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'useless addition to a arch-set' 'i386' 'mips' 'all'
+
+echo 'deb [arch=i386 arch-=all] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'substract all from arch-set' 'i386'
+
+echo 'deb [arch=i386 arch+=all] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'useless addition of all' 'i386' 'all'
+
+echo 'deb [arch=all] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testbinaries 'explicit all' 'all'
diff --git a/test/integration/test-sourceslist-lang-plusminus-options b/test/integration/test-sourceslist-lang-plusminus-options
new file mode 100755
index 0000000..abdb647
--- /dev/null
+++ b/test/integration/test-sourceslist-lang-plusminus-options
@@ -0,0 +1,88 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+testlangs() {
+ msgtest 'Test acquired languages for' "$1"
+ local LANGS="$2"
+ shift 2
+ rm -f gotlangs.list
+ aptget indextargets --no-release-info 'Identifier: Translations' "$@" --format '$(LANGUAGE)' | sort -u > gotlangs.list
+ if [ -z "$LANGS" ]; then
+ echo -n | tr ',' '\n' | sort | checkdiff - gotlangs.list && msgpass || msgfail
+ else
+ echo -n "$LANGS" | tr ',' '\n' | sort | checkdiff - gotlangs.list && msgpass || msgfail
+ fi
+}
+echo 'deb http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'default' 'en'
+
+echo 'Acquire::Languages "environment,en";' > rootdir/etc/apt/apt.conf.d/langs.conf
+testlangs 'default config' 'en'
+
+echo 'Acquire::Languages "en,en,en";' > rootdir/etc/apt/apt.conf.d/langs.conf
+testlangs 'duplicated config' 'en'
+
+echo 'Acquire::Languages "none";' > rootdir/etc/apt/apt.conf.d/langs.conf
+testlangs 'none config' ''
+
+echo 'Acquire::Languages "en,none,de,de_DE";' > rootdir/etc/apt/apt.conf.d/langs.conf
+testlangs 'english + german config' 'en,de,de_DE'
+
+echo 'deb [lang=pt] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang=pt' 'pt'
+
+echo 'deb [lang=en] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang=en' 'en'
+
+echo 'deb [lang=de_DE] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang=de_DE' 'de_DE'
+
+echo 'deb [lang=none] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang=none' ''
+testequal 'amd64
+all' aptget indextargets --no-release-info 'Identifier: Packages' --format '$(ARCHITECTURE)'
+
+echo 'deb [lang+=pt] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang+=pt' 'en,de,de_DE,pt'
+
+echo 'deb [lang+=en] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang+=en' 'en,de,de_DE'
+
+echo 'deb [lang+=de_DE] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang+=de_DE' 'en,de,de_DE'
+
+echo 'deb [lang-=pt] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang-=pt' 'en,de,de_DE'
+
+echo 'deb [lang-=en] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang-=en' 'de,de_DE'
+
+echo 'deb [lang-=de_DE] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testlangs 'lang-=de_DE' 'en,de'
+
+echo 'deb http://example.org/debian stable rocks
+deb http://example.org/debian stable solid' > rootdir/etc/apt/sources.list
+testlangs 'english + german config multicomponent' 'en,de,de_DE'
+
+echo 'deb http://example.org/debian stable rocks
+deb [lang=pt] http://example.org/debian stable solid' > rootdir/etc/apt/sources.list
+testlangs 'multicomponent one lang= combined' 'en,de,de_DE,pt'
+testlangs 'multicomponent one lang= rocks' 'en,de,de_DE' 'Component: rocks'
+testlangs 'multicomponent one lang= solid' 'pt' 'Component: solid'
+
+echo 'deb [lang=pt] http://example.org/debian stable rocks
+deb [lang=de] http://example.org/debian stable solid' > rootdir/etc/apt/sources.list
+testlangs 'multicomponent different lang= combined' 'de,pt'
+testlangs 'multicomponent different lang= rocks' 'pt' 'Component: rocks'
+testlangs 'multicomponent different lang= solid' 'de' 'Component: solid'
+
+echo 'deb [lang+=pt] http://example.org/debian stable rocks
+deb [lang-=de] http://example.org/debian stable solid' > rootdir/etc/apt/sources.list
+testlangs 'multicomponent different lang+-= combined' 'en,de,de_DE,pt'
+testlangs 'multicomponent different lang+-= rocks' 'en,de,de_DE,pt' 'Component: rocks'
+testlangs 'multicomponent different lang+-= solid' 'en,de_DE' 'Component: solid'
diff --git a/test/integration/test-sourceslist-target-plusminus-options b/test/integration/test-sourceslist-target-plusminus-options
new file mode 100755
index 0000000..5c79af2
--- /dev/null
+++ b/test/integration/test-sourceslist-target-plusminus-options
@@ -0,0 +1,128 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+testtargets() {
+ msgtest 'Test acquired targets for' "$1"
+ shift
+ while [ -n "$1" ]; do
+ echo "$1"
+ shift
+ done | sort -u > expectedtargets.lst
+ aptget indextargets --no-release-info --format='$(CREATED_BY)' | sort -u > gottargets.lst
+ testfileequal --nomsg ./expectedtargets.lst "$(cat ./gottargets.lst)"
+}
+
+echo 'deb http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'default' 'Packages' 'Translations'
+
+msgmsg 'Contents as a default target'
+cat > rootdir/etc/apt/apt.conf.d/content-target.conf <<EOF
+Acquire::IndexTargets::deb::Contents {
+ MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents";
+ Description "\$(RELEASE)/\$(COMPONENT) \$(ARCHITECTURE) Contents";
+};
+Acquire::IndexTargets::deb::Contents2 {
+ MetaKey "Contents-\$(ARCHITECTURE)";
+ ShortDescription "Contents2";
+ Description "\$(RELEASE) \$(ARCHITECTURE) Contents2";
+ Fallback-Of "Contents";
+ Identifier "Contents";
+};
+EOF
+
+echo 'deb http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'default + Contents' 'Packages' 'Translations' 'Contents' 'Contents2'
+
+echo 'deb [target=Packages] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'force Packages target' 'Packages'
+
+echo 'deb [target=Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'force Contents target' 'Contents'
+
+echo 'deb [target=Translations,Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'force two targets' 'Contents' 'Translations'
+
+echo 'deb [target+=Translations,Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'add existing' 'Packages' 'Contents' 'Translations' 'Contents2'
+
+echo 'deb [target+=AppStream] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'add non-existing' 'Packages' 'Contents' 'Translations' 'Contents2'
+
+echo 'deb [target-=Translations,Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'remove existing' 'Packages' 'Contents2'
+
+echo 'deb [target-=AppStream] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'remove non-existing' 'Packages' 'Contents' 'Translations' 'Contents2'
+
+echo 'deb [AppStream=yes] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'activate non-existing' 'Packages' 'Contents' 'Translations' 'Contents2'
+
+echo 'deb [AppStream=no] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'deactivate non-existing' 'Packages' 'Contents' 'Translations' 'Contents2'
+
+echo 'deb [Contents=yes] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'activate existing' 'Packages' 'Contents' 'Contents2' 'Translations'
+
+echo 'deb [Contents=no] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'deactivate existing' 'Packages' 'Translations'
+
+echo 'deb [target=Packages Contents=yes] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'explicit + activate' 'Packages' 'Contents' 'Contents2'
+
+echo 'deb [Contents=yes,target+=Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'duplications are okay' 'Packages' 'Translations' 'Contents' 'Contents2'
+
+msgmsg 'Contents NOT as a default target (but Contents2)'
+echo 'Acquire::IndexTargets::deb::Contents::DefaultEnabled "no";' > rootdir/etc/apt/apt.conf.d/content-target-notdefault.conf
+
+echo 'deb http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'default + Contents' 'Packages' 'Translations' 'Contents2'
+
+echo 'deb [target=Packages] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'force Packages target' 'Packages'
+
+echo 'deb [target=Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'force Contents target' 'Contents'
+
+echo 'deb [target=Translations,Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'force two targets' 'Contents' 'Translations'
+
+echo 'deb [target+=Translations,Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'add existing' 'Packages' 'Contents' 'Translations' 'Contents2'
+
+echo 'deb [target+=AppStream] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'add non-existing' 'Packages' 'Translations' 'Contents2'
+
+echo 'deb [target-=Translations,Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'remove existing' 'Packages' 'Contents2'
+
+echo 'deb [target-=AppStream] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'remove non-existing' 'Packages' 'Translations' 'Contents2'
+
+echo 'deb [AppStream=yes] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'activate non-existing' 'Packages' 'Translations' 'Contents2'
+
+echo 'deb [AppStream=no] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'deactivate non-existing' 'Packages' 'Translations' 'Contents2'
+
+echo 'deb [Contents=yes] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'activate existing' 'Packages' 'Contents' 'Contents2' 'Translations'
+
+echo 'deb [Contents=no] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'deactivate existing' 'Packages' 'Translations'
+
+echo 'deb [target=Packages Contents=yes] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'explicit + activate' 'Packages' 'Contents' 'Contents2'
+
+echo 'deb [Contents=yes,target+=Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'duplications are okay' 'Packages' 'Translations' 'Contents' 'Contents2'
+
+# we can't check if it really reorders here
+echo 'deb [target+=Contents2,Contents] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list
+testtargets 'reordered fallback order' 'Packages' 'Translations' 'Contents' 'Contents2'
diff --git a/test/integration/test-sourceslist-trusted-options b/test/integration/test-sourceslist-trusted-options
new file mode 100755
index 0000000..1eee3b0
--- /dev/null
+++ b/test/integration/test-sourceslist-trusted-options
@@ -0,0 +1,218 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'foo' 'amd64' '1' 'stable'
+buildsimplenativepackage 'foo' 'amd64' '2' 'testing'
+
+setupaptarchive --no-update
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+everythingsucceeds() {
+ testsuccessequal 'Listing...
+foo/testing 2 amd64
+foo/stable 1 amd64
+' apt list foo -a
+
+ cd downloaded
+ rm -f foo_1_amd64.deb foo_2_amd64.deb
+ testsuccess aptget download foo "$@"
+ testsuccess test -s foo_1_amd64.deb -o -s foo_2_amd64.deb
+
+ rm -f foo_1.dsc foo_2.dsc
+ testsuccess aptget source foo --dsc-only "$@"
+ testsuccess test -s foo_1.dsc -o -s foo_2.dsc
+ cd - >/dev/null
+}
+
+everythingfails() {
+ testsuccessequal 'Listing...
+foo/testing 2 amd64
+foo/stable 1 amd64
+' apt list foo -a
+
+ local WARNING='WARNING: The following packages cannot be authenticated!
+ foo
+E: Some packages could not be authenticated'
+
+ cd downloaded
+ rm -f foo_1_amd64.deb foo_2_amd64.deb
+ testfailure aptget download foo "$@"
+ testequal "$WARNING" tail -n 3 ../rootdir/tmp/testfailure.output
+ testfailure test -s foo_1_amd64.deb -o -s foo_2_amd64.deb
+
+ rm -f foo_1.dsc foo_2.dsc
+ testfailure aptget source foo --dsc-only "$@"
+ testequal "$WARNING" tail -n 3 ../rootdir/tmp/testfailure.output
+ testfailure test -s foo_1.dsc -o -s foo_2.dsc
+ cd - >/dev/null
+}
+
+cp -a rootdir/etc/apt/sources.list.d/ rootdir/etc/apt/sources.list.d.bak/
+echo 'Debug::Acquire::Transaction "true";
+Debug::pkgAcquire::Worker "true";' > rootdir/etc/apt/apt.conf.d/00debugging
+
+aptgetupdate() {
+ rm -rf rootdir/var/lib/apt/lists
+ # note that insecure with trusted=yes are allowed
+ # as the trusted=yes indicates that security is provided by
+ # something above the understanding of apt
+ ${1:-testsuccess} aptget update --no-allow-insecure-repositories
+}
+
+insecureaptgetupdate() {
+ rm -rf rootdir/var/lib/apt/lists
+ testfailure aptget update --no-allow-insecure-repositories
+ rm -rf rootdir/var/lib/apt/lists
+ testwarning aptget update --allow-insecure-repositories
+}
+
+msgmsg 'Test without trusted option and good sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+aptgetupdate
+everythingsucceeds
+everythingsucceeds -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=yes option and good sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=yes] #' rootdir/etc/apt/sources.list.d/*
+aptgetupdate
+everythingsucceeds
+everythingsucceeds -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=no option and good sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=no] #' rootdir/etc/apt/sources.list.d/*
+# we want the warnings on the actions, but for 'update' everything is fine
+aptgetupdate
+everythingfails
+everythingfails -t stable
+everythingfails -t testing
+
+find aptarchive/dists/stable \( -name 'InRelease' -o -name 'Release.gpg' \) -delete
+
+msgmsg 'Test without trusted option and good and unsigned sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+insecureaptgetupdate
+everythingsucceeds
+everythingfails -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=yes option and good and unsigned sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=yes] #' rootdir/etc/apt/sources.list.d/*
+aptgetupdate
+everythingsucceeds
+everythingsucceeds -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=no option and good and unsigned sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=no] #' rootdir/etc/apt/sources.list.d/*
+insecureaptgetupdate
+everythingfails
+everythingfails -t stable
+everythingfails -t testing
+
+signreleasefiles 'Marvin Paranoid' 'aptarchive/dists/stable'
+
+msgmsg 'Test without trusted option and good and unknown sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+insecureaptgetupdate
+everythingsucceeds
+everythingfails -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=yes option and good and unknown sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=yes] #' rootdir/etc/apt/sources.list.d/*
+aptgetupdate 'testwarning'
+everythingsucceeds
+everythingsucceeds -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=no option and good and unknown sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=no] #' rootdir/etc/apt/sources.list.d/*
+insecureaptgetupdate
+everythingfails
+everythingfails -t stable
+everythingfails -t testing
+
+signreleasefiles 'Rex Expired' 'aptarchive/dists/stable'
+cp -a keys/rexexpired.pub rootdir/etc/apt/trusted.gpg.d/rexexpired.gpg
+
+msgmsg 'Test without trusted option and good and expired sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+insecureaptgetupdate
+everythingsucceeds
+everythingfails -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=yes option and good and expired sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=yes] #' rootdir/etc/apt/sources.list.d/*
+aptgetupdate 'testwarning'
+everythingsucceeds
+everythingsucceeds -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=no option and good and expired sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=no] #' rootdir/etc/apt/sources.list.d/*
+insecureaptgetupdate
+everythingfails
+everythingfails -t stable
+everythingfails -t testing
+
+# same as the one further above, but this time testing is unsigned
+find aptarchive/ \( -name 'InRelease' -o -name 'Release.gpg' \) -delete
+signreleasefiles 'Joe Sixpack' 'aptarchive/dists/stable'
+
+msgmsg 'Test without trusted option and unsigned and good sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+insecureaptgetupdate
+everythingfails
+everythingsucceeds -t stable
+everythingfails -t testing
+
+msgmsg 'Test with trusted=yes option and unsigned and good sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=yes] #' rootdir/etc/apt/sources.list.d/*
+aptgetupdate
+everythingsucceeds
+everythingsucceeds -t stable
+everythingsucceeds -t testing
+
+msgmsg 'Test with trusted=no option and unsigned and good sources'
+cp -a rootdir/etc/apt/sources.list.d.bak/* rootdir/etc/apt/sources.list.d/
+sed -i 's#^deb\(-src\)\? #deb\1 [trusted=no] #' rootdir/etc/apt/sources.list.d/*
+insecureaptgetupdate
+everythingfails
+everythingfails -t stable
+everythingfails -t testing
+
+msgmsg 'Test conflicting trusted options are refused'
+testsource() {
+ echo "$@" > rootdir/etc/apt/sources.list.d/example.list
+ testfailuremsg 'E: Conflicting values set for option Trusted regarding source http://example.org/bad/ unstable
+E: The list of sources could not be read.' aptget update --print-uris
+}
+for VAL in 'yes' 'no'; do
+ testsource "deb http://example.org/bad unstable main
+deb [trusted=${VAL}] http://example.org/bad unstable non-free"
+ testsource "deb [trusted=${VAL}] http://example.org/bad unstable main
+deb http://example.org/bad unstable non-free"
+done
+testsource 'deb [trusted=yes] http://example.org/bad unstable main
+deb [trusted=no] http://example.org/bad unstable non-free'
+testsource 'deb [trusted=no] http://example.org/bad unstable main
+deb [trusted=yes] http://example.org/bad unstable non-free'
diff --git a/test/integration/test-specific-architecture-dependencies b/test/integration/test-specific-architecture-dependencies
new file mode 100755
index 0000000..447e407
--- /dev/null
+++ b/test/integration/test-specific-architecture-dependencies
@@ -0,0 +1,324 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable' 'libc6' 'amd64,i386' '1' 'Multi-Arch: same'
+insertinstalledpackage 'libold' 'amd64,i386' '1' 'Multi-Arch: same'
+insertinstalledpackage 'provider' 'amd64' '1' 'Provides: foo'
+
+insertpackage 'unstable' 'pre-depender' 'all' '1' 'Pre-Depends: libc6:i386'
+insertpackage 'unstable' 'depender' 'all' '1' 'Depends: libc6:i386'
+insertpackage 'unstable' 'depender-x32' 'i386,amd64' '1' 'Depends: libc6:i386'
+insertpackage 'unstable' 'depender-x64' 'i386,amd64' '1' 'Depends: libc6:amd64'
+
+insertpackage 'unstable' 'breaker' 'all' '1' 'Breaks: libold (<< 2)'
+insertpackage 'unstable' 'breaker-x32' 'i386,amd64' '1' 'Breaks: libold:i386 (<< 2)'
+insertpackage 'unstable' 'breaker-x64' 'i386,amd64' '1' 'Breaks: libold:amd64 (<< 2)'
+# conflicts with no effect
+insertpackage 'unstable' 'oldconflictor' 'all' '1' 'Conflicts: libold (<< 0)'
+insertpackage 'unstable' 'oldconflictor-x32' 'amd64' '1' 'Conflicts: libold:i386 (<< 0)'
+insertpackage 'unstable' 'oldconflictor-x64' 'i386' '1' 'Conflicts: libold:amd64 (<< 0)'
+
+insertpackage 'unstable' 'foo-depender' 'i386,amd64' '1' 'Depends: foo'
+insertpackage 'unstable' 'foo-native-depender' 'amd64' '1' 'Depends: foo:amd64'
+insertpackage 'unstable' 'foo-foreign-depender' 'i386' '1' 'Depends: foo:amd64'
+
+insertpackage 'unstable' 'foo-conflictor' 'i386,amd64' '1' 'Conflicts: foo'
+insertpackage 'unstable' 'foo-foreign-conflictor' 'i386' '1' 'Conflicts: foo:amd64'
+insertpackage 'unstable' 'foo-no-conflictor' 'i386' '1' 'Conflicts: foo:i386'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libc6:i386
+The following NEW packages will be installed:
+ libc6:i386 pre-depender
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6:i386 (1 unstable [i386])
+Conf libc6:i386 (1 unstable [i386])
+Inst pre-depender (1 unstable [all])
+Conf pre-depender (1 unstable [all])' aptget install pre-depender -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libc6:i386
+The following NEW packages will be installed:
+ depender libc6:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6:i386 (1 unstable [i386])
+Inst depender (1 unstable [all])
+Conf libc6:i386 (1 unstable [i386])
+Conf depender (1 unstable [all])' aptget install depender -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libc6:i386
+The following NEW packages will be installed:
+ depender-x32:i386 libc6:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6:i386 (1 unstable [i386])
+Inst depender-x32:i386 (1 unstable [i386])
+Conf libc6:i386 (1 unstable [i386])
+Conf depender-x32:i386 (1 unstable [i386])' aptget install depender-x32:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libc6:i386
+The following NEW packages will be installed:
+ depender-x32 libc6:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6:i386 (1 unstable [i386])
+Inst depender-x32 (1 unstable [amd64])
+Conf libc6:i386 (1 unstable [i386])
+Conf depender-x32 (1 unstable [amd64])' aptget install depender-x32:amd64 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libc6
+The following NEW packages will be installed:
+ depender-x64 libc6
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6 (1 unstable [amd64])
+Inst depender-x64 (1 unstable [amd64])
+Conf libc6 (1 unstable [amd64])
+Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64:amd64 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libc6
+The following NEW packages will be installed:
+ depender-x64:i386 libc6
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6 (1 unstable [amd64])
+Inst depender-x64:i386 (1 unstable [i386])
+Conf libc6 (1 unstable [amd64])
+Conf depender-x64:i386 (1 unstable [i386])' aptget install depender-x64:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libold:i386 libold
+The following NEW packages will be installed:
+ breaker
+0 upgraded, 1 newly installed, 2 to remove and 0 not upgraded.
+Remv libold:i386 [1]
+Remv libold [1]
+Inst breaker (1 unstable [all])
+Conf breaker (1 unstable [all])' aptget install breaker -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libold:i386
+The following NEW packages will be installed:
+ breaker-x32
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libold:i386 [1]
+Inst breaker-x32 (1 unstable [amd64])
+Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libold:i386
+The following NEW packages will be installed:
+ breaker-x32:i386
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libold:i386 [1]
+Inst breaker-x32:i386 (1 unstable [i386])
+Conf breaker-x32:i386 (1 unstable [i386])' aptget install breaker-x32:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libold
+The following NEW packages will be installed:
+ breaker-x64
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libold [1]
+Inst breaker-x64 (1 unstable [amd64])
+Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libold
+The following NEW packages will be installed:
+ breaker-x64:i386
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libold [1]
+Inst breaker-x64:i386 (1 unstable [i386])
+Conf breaker-x64:i386 (1 unstable [i386])' aptget install breaker-x64:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ oldconflictor
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst oldconflictor (1 unstable [all])
+Conf oldconflictor (1 unstable [all])' aptget install oldconflictor -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ oldconflictor-x32
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst oldconflictor-x32 (1 unstable [amd64])
+Conf oldconflictor-x32 (1 unstable [amd64])' aptget install oldconflictor-x32 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ oldconflictor-x64:i386
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst oldconflictor-x64:i386 (1 unstable [i386])
+Conf oldconflictor-x64:i386 (1 unstable [i386])' aptget install oldconflictor-x64 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-depender
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo-depender (1 unstable [amd64])
+Conf foo-depender (1 unstable [amd64])' aptget install foo-depender -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ foo-depender:i386 : Depends: foo:i386 but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget install foo-depender:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-native-depender
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo-native-depender (1 unstable [amd64])
+Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-foreign-depender:i386
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo-foreign-depender:i386 (1 unstable [i386])
+Conf foo-foreign-depender:i386 (1 unstable [i386])' aptget install foo-foreign-depender:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ provider
+The following NEW packages will be installed:
+ foo-conflictor
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv provider [1]
+Inst foo-conflictor (1 unstable [amd64])
+Conf foo-conflictor (1 unstable [amd64])' aptget install foo-conflictor -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ provider
+The following NEW packages will be installed:
+ foo-conflictor:i386
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv provider [1]
+Inst foo-conflictor:i386 (1 unstable [i386])
+Conf foo-conflictor:i386 (1 unstable [i386])' aptget install foo-conflictor:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ provider
+The following NEW packages will be installed:
+ foo-foreign-conflictor:i386
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv provider [1]
+Inst foo-foreign-conflictor:i386 (1 unstable [i386])
+Conf foo-foreign-conflictor:i386 (1 unstable [i386])' aptget install foo-foreign-conflictor:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-no-conflictor:i386
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo-no-conflictor:i386 (1 unstable [i386])
+Conf foo-no-conflictor:i386 (1 unstable [i386])' aptget install foo-no-conflictor:i386 -s
+
+msgmsg 'switch to single architecture'
+configarchitecture 'amd64'
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libc6
+The following NEW packages will be installed:
+ depender-x64 libc6
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libc6 (1 unstable [amd64])
+Inst depender-x64 (1 unstable [amd64])
+Conf libc6 (1 unstable [amd64])
+Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64 -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Unable to locate package depender-x64:i386' aptget install depender-x64:i386 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foo-native-depender
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foo-native-depender (1 unstable [amd64])
+Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libold:i386
+The following NEW packages will be installed:
+ breaker-x32
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libold:i386 [1]
+Inst breaker-x32 (1 unstable [amd64])
+Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ libold
+The following NEW packages will be installed:
+ breaker-x64
+0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded.
+Remv libold [1]
+Inst breaker-x64 (1 unstable [amd64])
+Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ depender-x32 : Depends: libc6:i386 but it is not installable
+E: Unable to correct problems, you have held broken packages.' aptget install depender-x32 -s
diff --git a/test/integration/test-srcrecord b/test/integration/test-srcrecord
new file mode 100755
index 0000000..34de2be
--- /dev/null
+++ b/test/integration/test-srcrecord
@@ -0,0 +1,35 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+cat > aptarchive/Sources <<EOF
+Package: space-before-comma
+Binary: space-before-comma1 , space-before-comma2
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+
+Package: broken-field
+Binary:, broken-field2
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+
+Package: broken-field-b
+Binary: , broken-field-b2
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+EOF
+
+setupaptarchive --no-update
+
+testsuccess aptget update
+testsuccess aptcache showsrc space-before-comma1
+testsuccess aptcache showsrc broken-field2
+testsuccess aptcache showsrc broken-field-b2
diff --git a/test/integration/test-suggest-installed-multiarch-silbing b/test/integration/test-suggest-installed-multiarch-silbing
new file mode 100755
index 0000000..4918217
--- /dev/null
+++ b/test/integration/test-suggest-installed-multiarch-silbing
@@ -0,0 +1,79 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386' 'armel'
+
+insertinstalledpackage 'foo' 'i386' '1'
+insertpackage 'unstable' 'foo' 'amd64,i386' '1'
+
+insertpackage 'unstable,installed' 'foo2' 'i386' '1'
+
+insertinstalledpackage 'foo3' 'amd64' '1'
+insertpackage 'unstable' 'foo3' 'amd64,i386' '1'
+
+insertinstalledpackage 'samefoo' 'i386,amd64' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'samefoo' 'amd64,i386,armel' '1' 'Multi-Arch: same'
+
+insertinstalledpackage 'samefoo2' 'i386' '1' 'Multi-Arch: same'
+insertpackage 'unstable' 'samefoo2' 'amd64,i386,armel' '1' 'Multi-Arch: same'
+
+insertinstalledpackage 'mozplugger' 'i386' '1' 'Depends: iceweasel | fireweasel'
+insertinstalledpackage 'fireweasel' 'i386' '1'
+insertpackage 'unstable' 'mozplugger' 'i386,amd64' '1' 'Depends: iceweasel | fireweasel'
+
+setupaptarchive
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'foo' is not installed, so not removed. Did you mean 'foo:i386'?
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove foo -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ foo2:i386
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv foo2:i386 [1]" aptget remove foo2 -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+ foo3
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv foo3 [1]" aptget remove foo3 -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'foo3:i386' is not installed, so not removed. Did you mean 'foo3'?
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove foo3:i386 -s
+
+testequalor2 "Reading package lists...
+Building dependency tree...
+Package 'samefoo:armel' is not installed, so not removed. Did you mean 'samefoo'?
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." "Reading package lists...
+Building dependency tree...
+Package 'samefoo:armel' is not installed, so not removed. Did you mean 'samefoo:i386'?
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove samefoo:armel -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'samefoo2' is not installed, so not removed. Did you mean 'samefoo2:i386'?
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove samefoo2 -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'samefoo2:armel' is not installed, so not removed. Did you mean 'samefoo2:i386'?
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove samefoo2:armel -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'iceweasel' is not installed, so not removed
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove iceweasel -s
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Package 'fireweasel' is not installed, so not removed. Did you mean 'fireweasel:i386'?
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove fireweasel:amd64 -s
diff --git a/test/integration/test-ubuntu-bug-1078697-missing-source-hashes b/test/integration/test-ubuntu-bug-1078697-missing-source-hashes
new file mode 100755
index 0000000..0b9103f
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-1078697-missing-source-hashes
@@ -0,0 +1,38 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+confighashes 'MD5' 'SHA1' 'SHA256' 'SHA512'
+
+msgtest 'Test apt-ftparchive source with missing hashes in .dsc'
+
+touch aptarchive/foo_1.0.tar.gz
+cat > aptarchive/foo_1.0.dsc << EOF
+Format: 3.0 (native)
+Source: foo
+Binary: foo
+Architecture: all
+Version: 1.0
+Package-List:
+ foo deb admin extra
+Files:
+ d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz
+EOF
+
+# check for the SHA hashes
+testsuccess aptftparchive sources aptarchive/
+cp rootdir/tmp/testsuccess.output aptarchive/Sources
+testsuccess grep Checksums-Sha512 aptarchive/Sources
+
+for hash in sha512sum sha256sum sha1sum; do
+ for f in foo_1.0.tar.gz foo_1.0.dsc; do
+ SUM=$($hash aptarchive/$f | cut -d' ' -f1)
+ NEEDLE="$SUM $(stat -c%s aptarchive/$f) $f"
+ testsuccess test -n "$SUM"
+ msgtest "Test $hash hash matches for $f"
+ testsuccess --nomsg grep "$NEEDLE" aptarchive/Sources
+ done
+done
diff --git a/test/integration/test-ubuntu-bug-1098738-apt-get-source-md5sum b/test/integration/test-ubuntu-bug-1098738-apt-get-source-md5sum
new file mode 100755
index 0000000..f0a8835
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-1098738-apt-get-source-md5sum
@@ -0,0 +1,444 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+cat > aptarchive/Sources <<EOF
+Package: pkg-md5-ok
+Binary: pkg-md5-ok
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-ok_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-ok_1.0.tar.gz
+
+Package: pkg-sha1-ok
+Binary: pkg-sha1-ok
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-sha1-ok_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-sha1-ok_1.0.tar.gz
+
+Package: pkg-sha256-ok
+Binary: pkg-sha256-ok
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-sha256-ok_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-sha256-ok_1.0.tar.gz
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-sha256-ok_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-sha256-ok_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-sha256-ok_1.0.dsc
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-sha256-ok_1.0.tar.gz
+
+Package: pkg-size-bad
+Binary: pkg-size-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 2 pkg-size-bad_1.0.dsc
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 4 pkg-size-bad_1.0.tar.gz
+
+Package: pkg-sha256-bad
+Binary: pkg-sha256-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-sha256-bad_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-sha256-bad_1.0.tar.gz
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-sha256-bad_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-sha256-bad_1.0.tar.gz
+Checksums-Sha256:
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-sha256-bad_1.0.dsc
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-sha256-bad_1.0.tar.gz
+
+Package: pkg-md5-bad
+Binary: pkg-md5-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-md5-bad_1.0.dsc
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-md5-bad_1.0.tar.gz
+
+Package: pkg-no-md5
+Binary: pkg-no-md5
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-no-md5_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-no-md5_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-no-md5_1.0.dsc
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-no-md5_1.0.tar.gz
+
+Package: pkg-mixed-ok
+Binary: pkg-mixed-ok
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-mixed-ok_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-mixed-ok_1.0.dsc
+
+Package: pkg-mixed-sha1-bad
+Binary: pkg-mixed-sha1-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-mixed-sha1-bad_1.0.dsc
+Checksums-Sha256:
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-mixed-sha1-bad_1.0.tar.gz
+
+Package: pkg-mixed-sha2-bad
+Binary: pkg-mixed-sha2-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-mixed-sha2-bad_1.0.dsc
+Checksums-Sha256:
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-mixed-sha2-bad_1.0.tar.gz
+
+Package: pkg-md5-disagree
+Binary: pkg-md5-disagree
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-disagree_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-disagree_1.0.tar.gz
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-md5-disagree_1.0.dsc
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-md5-disagree_1.0.tar.gz
+
+Package: pkg-md5-agree
+Binary: pkg-md5-agree
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-agree_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-agree_1.0.tar.gz
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-agree_1.0.tar.gz
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-agree_1.0.dsc
+
+Package: pkg-sha256-disagree
+Binary: pkg-sha256-disagree
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-sha256-disagree_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-sha256-disagree_1.0.tar.gz
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-sha256-disagree_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-sha256-disagree_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-sha256-disagree_1.0.dsc
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-sha256-disagree_1.0.tar.gz
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-sha256-disagree_1.0.dsc
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-sha256-disagree_1.0.tar.gz
+EOF
+
+# create fetchable files
+for x in 'pkg-md5-ok' 'pkg-sha1-ok' 'pkg-sha256-ok' 'pkg-sha256-bad' 'pkg-no-md5' \
+ 'pkg-mixed-ok' 'pkg-mixed-sha1-bad' 'pkg-mixed-sha2-bad' \
+ 'pkg-md5-agree' 'pkg-md5-disagree' 'pkg-sha256-disagree' \
+ 'pkg-md5-bad' 'pkg-size-bad'; do
+ echo -n 'dsc' > aptarchive/${x}_1.0.dsc
+ echo -n 'tar' > aptarchive/${x}_1.0.tar.gz
+done
+
+setupaptarchive --no-update
+changetowebserver
+testsuccess aptget update
+
+cd downloaded
+
+testok() {
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testsuccessequal "Reading package lists...
+Need to get 6 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc) [3 B]
+Get:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar) [3 B]
+Download complete and in download only mode" aptget source -d "$@"
+ msgtest 'Files were successfully downloaded for' "$1"
+ testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+}
+
+testkeep() {
+ echo -n 'dsc' > ${1}_1.0.dsc
+ echo -n 'tar' > ${1}_1.0.tar.gz
+ testsuccessequal "Reading package lists...
+Skipping already downloaded file '${1}_1.0.dsc'
+Skipping already downloaded file '${1}_1.0.tar.gz'
+Need to get 0 B of source archives.
+Download complete and in download only mode" aptget source -d "$@"
+ msgtest 'Files already downloaded are kept for' "$1"
+ testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+}
+
+testnohash() {
+ #FIXME: Maybe we should fail in this case instead of skipping
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testsuccessequal "Reading package lists...
+Skipping download of file '${1}_1.0.dsc' as requested hashsum is not available for authentication
+Skipping download of file '${1}_1.0.tar.gz' as requested hashsum is not available for authentication
+Need to get 0 B of source archives.
+Download complete and in download only mode" aptget source -d "$@"
+ msgtest 'Files are not downloaded for' "$1"
+ testfailure --nomsg test -e ${1}_1.0.dsc -o -e ${1}_1.0.tar.gz
+}
+
+testmismatch() {
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ local FAILURE
+ if [ "$1" = 'pkg-size-bad' ]; then
+ FAILURE="Reading package lists...
+Need to get 6 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc) [2 B]
+Err:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc)
+ File has unexpected size (3 != 2). Mirror sync in progress?
+ Hashes of expected file:
+ - SHA256:943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a
+ - Filesize:2 [weak]
+Get:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar) [4 B]
+Err:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar)
+ File has unexpected size (3 != 4). Mirror sync in progress?
+ Hashes of expected file:
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - Filesize:4 [weak]
+E: Failed to fetch http://localhost:${APTHTTPPORT}/${1}_1.0.dsc File has unexpected size (3 != 2). Mirror sync in progress?
+ Hashes of expected file:
+ - SHA256:943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a
+ - Filesize:2 [weak]
+E: Failed to fetch http://localhost:${APTHTTPPORT}/${1}_1.0.tar.gz File has unexpected size (3 != 4). Mirror sync in progress?
+ Hashes of expected file:
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - Filesize:4 [weak]
+E: Failed to fetch some archives."
+ elif [ "$1" = 'pkg-md5-bad' ]; then
+ FAILURE="Reading package lists...
+Need to get 6 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc) [3 B]
+Err:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc)
+ Hash Sum mismatch
+ Hashes of expected file:
+ - MD5Sum:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [weak]
+ - Filesize:3 [weak]
+ Hashes of received file:
+ - SHA512:e52b7bb395ea3f46974f1f65b7c5975839aad32d4e2ec0f458f735d5aa24d2bf36d7816ed1e01dc3c493e11879e9a8f66dfca42821608cfe993996929a6be18a
+ - SHA256:943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a
+ - SHA1:324f464e6151a92cf57b26ef95dcfcf2059a8c44 [weak]
+ - MD5Sum:9604ba9427a280db542279d9ed78400b [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.dsc")
+Get:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar) [3 B]
+Err:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar)
+ Hash Sum mismatch
+ Hashes of expected file:
+ - MD5Sum:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb [weak]
+ - Filesize:3 [weak]
+ Hashes of received file:
+ - SHA512:5aa4cad81553320574eb72ee92bd45a1f0575528e257749dff298b2a33df9e7fc7f5c1c87fc1c8fde230f1234cca3a99bf8625a0ff7bb3238eb7e5473f9b43c0
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - SHA1:680254bad1d7ca0d65ec46aaa315d363abf6a50a [weak]
+ - MD5Sum:db5570bf61464b46e2bde31ed61a7dc6 [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.tar.gz")
+E: Failed to fetch http://localhost:${APTHTTPPORT}/${1}_1.0.dsc Hash Sum mismatch
+ Hashes of expected file:
+ - MD5Sum:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [weak]
+ - Filesize:3 [weak]
+ Hashes of received file:
+ - SHA512:e52b7bb395ea3f46974f1f65b7c5975839aad32d4e2ec0f458f735d5aa24d2bf36d7816ed1e01dc3c493e11879e9a8f66dfca42821608cfe993996929a6be18a
+ - SHA256:943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a
+ - SHA1:324f464e6151a92cf57b26ef95dcfcf2059a8c44 [weak]
+ - MD5Sum:9604ba9427a280db542279d9ed78400b [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.dsc")
+E: Failed to fetch http://localhost:${APTHTTPPORT}/${1}_1.0.tar.gz Hash Sum mismatch
+ Hashes of expected file:
+ - MD5Sum:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb [weak]
+ - Filesize:3 [weak]
+ Hashes of received file:
+ - SHA512:5aa4cad81553320574eb72ee92bd45a1f0575528e257749dff298b2a33df9e7fc7f5c1c87fc1c8fde230f1234cca3a99bf8625a0ff7bb3238eb7e5473f9b43c0
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - SHA1:680254bad1d7ca0d65ec46aaa315d363abf6a50a [weak]
+ - MD5Sum:db5570bf61464b46e2bde31ed61a7dc6 [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.tar.gz")
+E: Failed to fetch some archives."
+ else
+ FAILURE="Reading package lists...
+Need to get 6 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc) [3 B]
+Err:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc)
+ Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ - Filesize:3 [weak]
+ - SHA1:324f464e6151a92cf57b26ef95dcfcf2059a8c44 [weak]
+ - MD5Sum:9604ba9427a280db542279d9ed78400b [weak]
+ Hashes of received file:
+ - SHA256:943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a
+ - SHA1:324f464e6151a92cf57b26ef95dcfcf2059a8c44 [weak]
+ - MD5Sum:9604ba9427a280db542279d9ed78400b [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.dsc")
+Get:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar) [3 B]
+Err:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar)
+ Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+ - Filesize:3 [weak]
+ - SHA1:680254bad1d7ca0d65ec46aaa315d363abf6a50a [weak]
+ - MD5Sum:db5570bf61464b46e2bde31ed61a7dc6 [weak]
+ Hashes of received file:
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - SHA1:680254bad1d7ca0d65ec46aaa315d363abf6a50a [weak]
+ - MD5Sum:db5570bf61464b46e2bde31ed61a7dc6 [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.tar.gz")
+E: Failed to fetch http://localhost:${APTHTTPPORT}/${1}_1.0.dsc Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ - Filesize:3 [weak]
+ - SHA1:324f464e6151a92cf57b26ef95dcfcf2059a8c44 [weak]
+ - MD5Sum:9604ba9427a280db542279d9ed78400b [weak]
+ Hashes of received file:
+ - SHA256:943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a
+ - SHA1:324f464e6151a92cf57b26ef95dcfcf2059a8c44 [weak]
+ - MD5Sum:9604ba9427a280db542279d9ed78400b [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.dsc")
+E: Failed to fetch http://localhost:${APTHTTPPORT}/${1}_1.0.tar.gz Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+ - Filesize:3 [weak]
+ - SHA1:680254bad1d7ca0d65ec46aaa315d363abf6a50a [weak]
+ - MD5Sum:db5570bf61464b46e2bde31ed61a7dc6 [weak]
+ Hashes of received file:
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - SHA1:680254bad1d7ca0d65ec46aaa315d363abf6a50a [weak]
+ - MD5Sum:db5570bf61464b46e2bde31ed61a7dc6 [weak]
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification "aptarchive/${1}_1.0.tar.gz")
+E: Failed to fetch some archives."
+ fi
+ testfailureequal "$FAILURE" aptget source -d "$@"
+ msgtest 'Files were not download as they have hashsum mismatches for' "$1"
+ testfailure --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+
+ if [ "$2" != '--allow-unauthenticated' ]; then
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testsuccessequal "Reading package lists...
+Skipping download of file '${1}_1.0.dsc' as requested hashsum is not available for authentication
+Skipping download of file '${1}_1.0.tar.gz' as requested hashsum is not available for authentication
+Need to get 0 B of source archives.
+Download complete and in download only mode" aptget source -d "$@" -o Acquire::ForceHash=ROT26
+ msgtest 'Files were not download as hash is unavailable for' "$1"
+ testfailure --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+ fi
+
+ if [ "$1" != 'pkg-size-bad' ]; then
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testsuccessequal "Reading package lists...
+Need to get 6 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} $1 1.0 (dsc) [3 B]
+Get:2 http://localhost:${APTHTTPPORT} $1 1.0 (tar) [3 B]
+Download complete and in download only mode" aptget source --allow-unauthenticated -d "$@" -o Acquire::ForceHash=ROT26
+ msgtest 'Files were downloaded unauthenticated as user allowed it' "$1"
+ testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+ fi
+}
+
+testnohash pkg-md5-ok
+testnohash pkg-sha1-ok
+testok pkg-sha256-ok
+testkeep pkg-sha256-ok
+
+# pkg-sha256-bad has a bad SHA sum, but good MD5 sum. If apt is
+# checking the best available hash (as it should), this will trigger
+# a hash mismatch.
+testmismatch pkg-sha256-bad
+testok pkg-sha256-bad -o Acquire::ForceHash=MD5Sum
+
+testnohash pkg-md5-bad
+testmismatch pkg-md5-bad --allow-unauthenticated
+
+testmismatch pkg-size-bad
+
+# not having MD5 sum doesn't mean the file doesn't exist at all …
+testok pkg-no-md5
+testok pkg-no-md5 -o Acquire::ForceHash=SHA256
+testsuccessequal "Reading package lists...
+Skipping download of file 'pkg-no-md5_1.0.dsc' as requested hashsum is not available for authentication
+Skipping download of file 'pkg-no-md5_1.0.tar.gz' as requested hashsum is not available for authentication
+Need to get 0 B of source archives.
+Download complete and in download only mode" aptget source -d pkg-no-md5 -o Acquire::ForceHash=MD5Sum
+msgtest 'Files were not download as MD5 is not available for this package' 'pkg-no-md5'
+testfailure --nomsg test -e pkg-no-md5_1.0.dsc -a -e pkg-no-md5_1.0.tar.gz
+
+# deal with cases in which we haven't for all files the same checksum type
+# mostly pathologic as this shouldn't happen, but just to be sure
+testsuccessequal "Reading package lists...
+Skipping download of file 'pkg-mixed-ok_1.0.tar.gz' as requested hashsum is not available for authentication
+Need to get 3 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} pkg-mixed-ok 1.0 (dsc) [3 B]
+Download complete and in download only mode" aptget source -d pkg-mixed-ok
+
+testsuccessequal "Reading package lists...
+Skipping download of file 'pkg-mixed-sha1-bad_1.0.dsc' as requested hashsum is not available for authentication
+Need to get 3 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} pkg-mixed-sha1-bad 1.0 (tar) [3 B]
+Download complete and in download only mode" aptget source -d pkg-mixed-sha1-bad
+msgtest 'Only tar file is downloaded as the dsc has hashsum mismatch' 'pkg-mixed-sha1-bad'
+testsuccess --nomsg test ! -e pkg-mixed-sha1-bad_1.0.dsc -a -e pkg-mixed-sha1-bad_1.0.tar.gz
+testfailureequal "Reading package lists...
+Skipping download of file 'pkg-mixed-sha2-bad_1.0.dsc' as requested hashsum is not available for authentication
+Need to get 3 B of source archives.
+Get:1 http://localhost:${APTHTTPPORT} pkg-mixed-sha2-bad 1.0 (tar) [3 B]
+Err:1 http://localhost:${APTHTTPPORT} pkg-mixed-sha2-bad 1.0 (tar)
+ Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+ - Filesize:3 [weak]
+ Hashes of received file:
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification 'aptarchive/pkg-mixed-sha2-bad_1.0.tar.gz')
+E: Failed to fetch http://localhost:${APTHTTPPORT}/pkg-mixed-sha2-bad_1.0.tar.gz Hash Sum mismatch
+ Hashes of expected file:
+ - SHA256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+ - Filesize:3 [weak]
+ Hashes of received file:
+ - SHA256:90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb
+ - Filesize:3 [weak]
+ Last modification reported: $(lastmodification 'aptarchive/pkg-mixed-sha2-bad_1.0.tar.gz')
+E: Failed to fetch some archives." aptget source -d pkg-mixed-sha2-bad
+
+# it gets even more pathologic: multiple entries for one file, some even disagreeing!
+testnohash pkg-md5-agree
+testfailureequal 'Reading package lists...
+E: Error parsing checksum in Files of source package pkg-md5-disagree' aptget source -d pkg-md5-disagree
+testfailureequal 'Reading package lists...
+E: Error parsing checksum in Checksums-SHA256 of source package pkg-sha256-disagree' aptget source -d pkg-sha256-disagree
diff --git a/test/integration/test-ubuntu-bug-1130419-prefer-installed-ma-same-siblings b/test/integration/test-ubuntu-bug-1130419-prefer-installed-ma-same-siblings
new file mode 100755
index 0000000..4ac5e90
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-1130419-prefer-installed-ma-same-siblings
@@ -0,0 +1,104 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'stable' 'libmesa' 'amd64,i386' '1' 'Multi-Arch: same'
+insertpackage 'stable' 'libmesa-lts' 'amd64,i386' '1' 'Provides: libmesa
+Conflicts: libmesa
+Multi-Arch: same'
+insertpackage 'stable' 'steam' 'i386' '1' 'Depends: libmesa'
+
+insertpackage 'unstable' 'libmesa' 'amd64,i386' '2' 'Multi-Arch: same'
+insertpackage 'unstable' 'libmesa-lts' 'amd64,i386' '2' 'Provides: libmesa
+Conflicts: libmesa
+Multi-Arch: same'
+insertpackage 'unstable' 'steam' 'i386' '2' 'Depends: libmesa'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libmesa:i386
+The following NEW packages will be installed:
+ libmesa:i386 steam:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libmesa:i386 (1 stable [i386])
+Inst steam:i386 (1 stable [i386])
+Conf libmesa:i386 (1 stable [i386])
+Conf steam:i386 (1 stable [i386])' aptget install steam -st stable
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libmesa:i386
+The following NEW packages will be installed:
+ libmesa:i386 steam:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libmesa:i386 (2 unstable [i386])
+Inst steam:i386 (2 unstable [i386])
+Conf libmesa:i386 (2 unstable [i386])
+Conf steam:i386 (2 unstable [i386])' aptget install steam -st unstable
+
+cp rootdir/var/lib/dpkg/status default-status.dpkg
+insertinstalledpackage 'libmesa' 'amd64' '1' 'Multi-Arch: same'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libmesa:i386
+The following NEW packages will be installed:
+ libmesa:i386 steam:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libmesa:i386 (1 stable [i386])
+Inst steam:i386 (1 stable [i386])
+Conf libmesa:i386 (1 stable [i386])
+Conf steam:i386 (1 stable [i386])' aptget install steam -st stable
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libmesa libmesa:i386
+The following NEW packages will be installed:
+ libmesa:i386 steam:i386
+The following packages will be upgraded:
+ libmesa
+1 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libmesa [1] (2 unstable [amd64])
+Inst libmesa:i386 (2 unstable [i386])
+Inst steam:i386 (2 unstable [i386])
+Conf libmesa (2 unstable [amd64])
+Conf libmesa:i386 (2 unstable [i386])
+Conf steam:i386 (2 unstable [i386])' aptget install steam -st unstable
+
+cp default-status.dpkg rootdir/var/lib/dpkg/status
+insertinstalledpackage 'libmesa-lts' 'amd64' '1' 'Provides: libmesa
+Conflicts: libmesa
+Multi-Arch: same'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libmesa-lts:i386
+The following NEW packages will be installed:
+ libmesa-lts:i386 steam:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libmesa-lts:i386 (1 stable [i386])
+Inst steam:i386 (1 stable [i386])
+Conf libmesa-lts:i386 (1 stable [i386])
+Conf steam:i386 (1 stable [i386])' aptget install steam -st stable
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libmesa-lts libmesa-lts:i386
+The following NEW packages will be installed:
+ libmesa-lts:i386 steam:i386
+The following packages will be upgraded:
+ libmesa-lts
+1 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst libmesa-lts [1] (2 unstable [amd64])
+Inst libmesa-lts:i386 (2 unstable [i386])
+Inst steam:i386 (2 unstable [i386])
+Conf libmesa-lts (2 unstable [amd64])
+Conf libmesa-lts:i386 (2 unstable [i386])
+Conf steam:i386 (2 unstable [i386])' aptget install steam -st unstable
diff --git a/test/integration/test-ubuntu-bug-1304403-obsolete-priority-standard b/test/integration/test-ubuntu-bug-1304403-obsolete-priority-standard
new file mode 100755
index 0000000..82e1d61
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-1304403-obsolete-priority-standard
@@ -0,0 +1,50 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+# Regression test for LP: #1304403
+#
+# The issue here is that libkadm5srv-mit8 (priority standard) is replaced
+# by a new libkadm5srv-mit9 and libkbd5-7 breaks on the old -mit8 package.
+# The -mit8 package is no longer downloadable (and hence not upgradeable)
+
+# normal upradable pkg
+# (libkdb5-7 that breaks on libkadm5srv-mit8 (<< 1.11+dfsg~)
+insertinstalledpackage 'upgradable' 'all' '1.0' '' 'extra'
+insertpackage 'unstable' 'upgradable' 'all' '2.0' 'Breaks: not-downloadable (<< 1.1)' 'optional'
+
+# no longer downloadable pkg (libkadm5srv-mit8, replaced by libkadm5srv-mit9)
+# but priority standard pushes it higher
+insertinstalledpackage 'not-downloadable' 'all' '1.0' '' 'standard'
+
+setupaptarchive
+
+# discourage keeping obsolete high-priority packages …
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be REMOVED:
+ not-downloadable
+The following packages will be upgraded:
+ upgradable
+1 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv not-downloadable [1.0]
+Inst upgradable [1.0] (2.0 unstable [all])
+Conf upgradable (2.0 unstable [all])' aptget -s dist-upgrade
+
+# … but if it has dependencies we want to keep it as usual
+for i in $(seq 1 10); do
+insertinstalledpackage "depender$i" 'all' '1.0' 'Depends: not-downloadable'
+done
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages have been kept back:
+ upgradable
+0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.' aptget -s dist-upgrade
diff --git a/test/integration/test-ubuntu-bug-1549819-empty-arch-list b/test/integration/test-ubuntu-bug-1549819-empty-arch-list
new file mode 100755
index 0000000..5e1c6ce
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-1549819-empty-arch-list
@@ -0,0 +1,13 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture ""
+echo 'APT::Architecture "";' > rootdir/etc/apt/apt.conf
+echo 'APT::Architectures:: "";' >> rootdir/etc/apt/apt.conf
+setupaptarchive
+
+# test success
+testsuccess aptcache -c rootdir/etc/apt/apt.conf gencaches -o debug::NoLocking=1
diff --git a/test/integration/test-ubuntu-bug-1651923-requote-https-uri b/test/integration/test-ubuntu-bug-1651923-requote-https-uri
new file mode 100755
index 0000000..cf56a6a
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-1651923-requote-https-uri
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture "i386"
+
+mkdir "aptarchive/target with space"
+echo 'alright' > "aptarchive/target with space/working"
+changetohttpswebserver
+webserverconfig 'aptwebserver::redirect::replace::/targetwithoutspace/' '/target%20with%20space/'
+webserverconfig 'aptwebserver::redirect::replace::/targetwithoutspace2/' '/target with space/'
+
+testsuccess downloadfile "http://localhost:${APTHTTPPORT}/targetwithoutspace/working" httpfile1
+testsuccess downloadfile "http://localhost:${APTHTTPPORT}/targetwithoutspace2/working" httpfile2
+testsuccess downloadfile "https://localhost:${APTHTTPSPORT}/targetwithoutspace/working" httpsfile1
+testsuccess downloadfile "https://localhost:${APTHTTPSPORT}/targetwithoutspace2/working" httpsfile2
diff --git a/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall
new file mode 100755
index 0000000..5f2109d
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall
@@ -0,0 +1,102 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'native'
+
+insertpackage 'unstable' 'unrelated' 'all' '1.0' 'stable'
+insertsource 'unstable' 'unrelated' 'all' '1.0' 'stable'
+
+echo 'ni ni ni' > aptarchive/knights
+
+setupaptarchive
+changetowebserver -o 'aptwebserver::overwrite::.*InRelease::filename=/knights' -o 'aptwebserver::overwrite::.*::filename=/knights'
+
+msgtest 'Acquire test file from the webserver to check' 'overwrite'
+if downloadfile http://localhost:${APTHTTPPORT}/holygrail ./knights-talking >/dev/null; then
+ msgpass
+else
+ msgfail
+fi
+
+testfileequal knights-talking 'ni ni ni'
+
+ensure_n_canary_strings_in_dir() {
+ local DIR="$1"
+ local CANARY_STRING="$2"
+ local EXPECTED_N="$3"
+
+ msgtest "Testing in $DIR for $EXPECTED_N canary" "$CANARY_STRING"
+ local N=$(grep "$CANARY_STRING" $DIR/* 2>/dev/null |wc -l )
+ test "$N" = "$EXPECTED_N" && msgpass || msgfail "Expected $EXPECTED_N canaries, got $N"
+}
+
+runtests() {
+ LISTS='rootdir/var/lib/apt/lists'
+ rm -rf "$LISTS"
+ testfailure aptget update
+ testsuccess grep "$1" rootdir/tmp/testfailure.output
+
+ ensure_n_canary_strings_in_dir "$LISTS" 'ni ni ni' 0
+ testequal 'auxfiles
+lock
+partial' ls "$LISTS"
+
+ # and again with pre-existing files with "valid data" which should remain
+ for f in Release Release.gpg main_binary-amd64_Packages main_source_Sources; do
+ echo 'peng neee-wom' > "$LISTS/localhost:${APTHTTPPORT}_dists_stable_${f}"
+ chmod 644 "$LISTS/localhost:${APTHTTPPORT}_dists_stable_${f}"
+ done
+
+ testfailure aptget update
+ testsuccess grep "$1" rootdir/tmp/testfailure.output
+
+ ensure_n_canary_strings_in_dir "$LISTS" 'peng neee-wom' 4
+ ensure_n_canary_strings_in_dir "$LISTS" 'ni ni ni' 0
+
+ # and now with a pre-existing InRelease file
+ echo 'peng neee-wom' > "$LISTS/localhost:${APTHTTPPORT}_dists_stable_InRelease"
+ chmod 644 "$LISTS/localhost:${APTHTTPPORT}_dists_stable_InRelease"
+ rm -f "$LISTS/localhost:${APTHTTPPORT}_dists_stable_Release" "$LISTS/localhost:${APTHTTPPORT}_dists_stable_Release.gpg"
+ msgtest 'excpected failure of' 'apt-get update'
+ testfailure aptget update
+ testsuccess grep "$1" rootdir/tmp/testfailure.output
+
+ ensure_n_canary_strings_in_dir "$LISTS" 'peng neee-wom' 3
+ ensure_n_canary_strings_in_dir "$LISTS" 'ni ni ni' 0
+}
+runtests '^E:.*Clearsigned file .*NOSPLIT.*'
+webserverconfig 'aptwebserver::overwrite::.*InRelease::filename' '/404'
+runtests '^E:.*Signed file .*NODATA.*'
+
+webserverconfig 'aptwebserver::overwrite::.*::filename' '/404'
+webserverconfig 'aptwebserver::httpcode::404' '511 Network Authentication Required'
+rm -rf rootdir/var/lib/apt/lists
+testfailureequal "Err:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 511 Network Authentication Required
+Reading package lists...
+E: Failed to fetch http://localhost:${APTHTTPPORT}/dists/unstable/InRelease 511 Network Authentication Required
+E: The repository 'http://localhost:${APTHTTPPORT} unstable InRelease' is not signed.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." aptget update
+
+# on S3 all files get a 403. If we accept unsigned, lets be liberal in non-existence acceptance
+webserverconfig 'aptwebserver::httpcode::404' '403 Forbidden'
+rm -rf rootdir/var/lib/apt/lists
+testfailureequal "Err:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 403 Forbidden
+Reading package lists...
+E: Failed to fetch http://localhost:${APTHTTPPORT}/dists/unstable/InRelease 403 Forbidden
+E: The repository 'http://localhost:${APTHTTPPORT} unstable InRelease' is not signed.
+N: Updating from such a repository can't be done securely, and is therefore disabled by default.
+N: See apt-secure(8) manpage for repository creation and user configuration details." apt update
+
+sed -i 's#^deb\(-src\)\? #deb\1 [allow-insecure=yes] #' rootdir/etc/apt/sources.list.d/*
+testfailure apt update
+testequal "Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
+ 403 Forbidden
+Ign:2 http://localhost:${APTHTTPPORT} unstable Release
+ 403 Forbidden" head -n 4 rootdir/tmp/testfailure.output
diff --git a/test/integration/test-ubuntu-bug-365611-long-package-names b/test/integration/test-ubuntu-bug-365611-long-package-names
new file mode 100755
index 0000000..53e3ea8
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-365611-long-package-names
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+setupaptarchive
+
+aptget install $(for i in $(seq 0 1000); do echo -n 'a'; done) 2> longpackagename.log > /dev/null || true
+testfileequal 'longpackagename.log' "E: Unable to locate package $(for i in $(seq 0 1000); do echo -n 'a'; done)"
+
+# … and the opposite of long:
+aptget install "" -s >longpackagename.log 2>&1 || true
+testfileequal 'longpackagename.log' "$(aptget install -s)"
diff --git a/test/integration/test-ubuntu-bug-614993 b/test/integration/test-ubuntu-bug-614993
new file mode 100755
index 0000000..e7357bc
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-614993
@@ -0,0 +1,59 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "amd64"
+setupaptarchive
+
+# test success
+UPGRADE="Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ libdrm-intel1 libdrm-nouveau1 libmtdev1 libutouch-grail1 libx11-xcb1
+ libxcb-aux0 libxcb-dri2-0 libxfont1 xserver-common xserver-xorg-core
+ xserver-xorg-input-evdev xserver-xorg-input-mouse
+ xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
+ xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-apm
+ xserver-xorg-video-ark xserver-xorg-video-ati xserver-xorg-video-chips
+ xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-i128
+ xserver-xorg-video-intel xserver-xorg-video-mach64 xserver-xorg-video-mga
+ xserver-xorg-video-neomagic xserver-xorg-video-nouveau xserver-xorg-video-nv
+ xserver-xorg-video-openchrome xserver-xorg-video-r128
+ xserver-xorg-video-radeon xserver-xorg-video-rendition xserver-xorg-video-s3
+ xserver-xorg-video-s3virge xserver-xorg-video-savage
+ xserver-xorg-video-siliconmotion xserver-xorg-video-sis
+ xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident
+ xserver-xorg-video-tseng xserver-xorg-video-vesa xserver-xorg-video-vmware
+ xserver-xorg-video-voodoo
+Suggested packages:
+ xfonts-scalable gpointing-device-settings touchfreeze firmware-linux
+Recommended packages:
+ xauth intel-gpu-tools
+The following packages will be REMOVED:
+ xserver-xorg-video-v4l
+The following NEW packages will be installed:
+ libmtdev1 libutouch-grail1 libx11-xcb1 libxcb-aux0 libxcb-dri2-0
+The following packages will be upgraded:
+ libdrm-intel1 libdrm-nouveau1 libxfont1 xserver-common xserver-xorg
+ xserver-xorg-core xserver-xorg-input-evdev xserver-xorg-input-mouse
+ xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
+ xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-apm
+ xserver-xorg-video-ark xserver-xorg-video-ati xserver-xorg-video-chips
+ xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-i128
+ xserver-xorg-video-intel xserver-xorg-video-mach64 xserver-xorg-video-mga
+ xserver-xorg-video-neomagic xserver-xorg-video-nouveau xserver-xorg-video-nv
+ xserver-xorg-video-openchrome xserver-xorg-video-r128
+ xserver-xorg-video-radeon xserver-xorg-video-rendition xserver-xorg-video-s3
+ xserver-xorg-video-s3virge xserver-xorg-video-savage
+ xserver-xorg-video-siliconmotion xserver-xorg-video-sis
+ xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident
+ xserver-xorg-video-tseng xserver-xorg-video-vesa xserver-xorg-video-vmware
+ xserver-xorg-video-voodoo
+41 upgraded, 5 newly installed, 1 to remove and 3 not upgraded.
+Need to get 0 B/5505 kB of archives.
+After this operation, 2294 kB disk space will be freed.
+E: Trivial Only specified but this is not a trivial operation."
+testfailureequal "$UPGRADE" aptget install xserver-xorg --trivial-only
+
diff --git a/test/integration/test-ubuntu-bug-761175-remove-purge b/test/integration/test-ubuntu-bug-761175-remove-purge
new file mode 100755
index 0000000..6ae1a04
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-761175-remove-purge
@@ -0,0 +1,88 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildcompizpkg() {
+ setupsimplenativepackage "compiz-core-$1" "$2" "$3" "$4"
+ BUILDDIR="incoming/compiz-core-$1-$3"
+ mkdir -p ${BUILDDIR}/debian/compiz-core/etc
+ echo 'foo=bar;' > ${BUILDDIR}/compiz.conf
+ echo 'compiz.conf /etc/compiz.conf' >> ${BUILDDIR}/debian/install
+ buildpackage "$BUILDDIR" "$4" 'main' "$2"
+ rm -rf "$BUILDDIR"
+}
+buildcompizpkg 'native' 'all' '1.0' 'stable'
+buildcompizpkg 'all' 'native' '1.0' 'stable'
+buildcompizpkg 'native' 'native' '2.0' 'unstable'
+buildcompizpkg 'all' 'all' '2.0' 'unstable'
+
+setupaptarchive
+
+runtests() {
+ local PKG="$1"
+ local RELEASE="${2}"
+ shift 2
+ testdpkgnotinstalled compiz-core-${PKG}
+ testsuccess aptget install compiz-core-${PKG} -t "${RELEASE}" "$@"
+ testdpkginstalled compiz-core-${PKG}
+
+ testsuccess aptget remove compiz-core-${PKG} -y "$@" -o Debug::pkgDpkgPm=1
+ testfailure grep -- '--force-remove-essential' rootdir/tmp/testsuccess.output
+ testsuccess aptget remove compiz-core-${PKG} -y "$@"
+ testdpkgnotinstalled compiz-core-${PKG}
+ testdpkgstatus 'rc' '1' "compiz-core-${PKG}"
+
+ if [ -z "$1" ]; then
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+ compiz-core-${PKG}*
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Purg compiz-core-${PKG}" aptget purge compiz-core-${PKG} -s "$@"
+ else
+ # check that the rc-version isn't passed to the external resolver if its only in dpkg/status
+ export APT_EDSP_DUMP_FILENAME="${TMPWORKINGDIRECTORY}/dump-${PKG}.edsp"
+ testfailure aptget purge compiz-core-${PKG} -y "$@" -s --solver dump
+ testsuccessequal '2' grep -c "^Package: compiz-core-${PKG}\$" "$APT_EDSP_DUMP_FILENAME"
+ mv rootdir/etc/apt/sources.list.d/apt-test-stable-deb.list rootdir/etc/apt/sources.list.d/apt-test-stable-deb.disabled
+ testfailure aptget purge compiz-core-${PKG} -y "$@" -s --solver dump
+ testsuccessequal '1' grep -c "^Package: compiz-core-${PKG}\$" "$APT_EDSP_DUMP_FILENAME"
+ mv rootdir/etc/apt/sources.list.d/apt-test-stable-deb.disabled rootdir/etc/apt/sources.list.d/apt-test-stable-deb.list
+
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+Execute external solver...
+The following packages will be REMOVED:
+ compiz-core-${PKG}*
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Purg compiz-core-${PKG}" aptget purge compiz-core-${PKG} -s "$@"
+ fi
+ testsuccess aptget purge compiz-core-${PKG} -y "$@" -o Debug::pkgDpkgPm=1
+ testfailure grep -- '--force-remove-essential' rootdir/tmp/testsuccess.output
+ testsuccess aptget purge compiz-core-${PKG} -y "$@"
+ echo -n '' > rootdir/var/lib/dpkg/available # dpkg -l < 1.16.2 reads the available file by default, where the package can be found
+ testequalor2 "dpkg-query: no packages found matching compiz-core-${PKG}" "No packages found matching compiz-core-${PKG}." dpkg -l compiz-core-${PKG}
+}
+runtestround() {
+ runtests 'native' 'unstable' "$@"
+ runtests 'all' 'unstable' "$@"
+ runtests 'native' 'stable' "$@"
+ runtests 'all' 'stable' "$@"
+}
+testround() {
+ msgmsg 'Test in multi arch environment' "$@"
+ configarchitecture 'amd64' 'i386'
+ runtestround "$@"
+
+ msgmsg 'Test in single arch environment' "$@"
+ configarchitecture 'amd64'
+ runtestround "$@"
+}
+testround
+testround --solver apt
diff --git a/test/integration/test-ubuntu-bug-784473-InRelease-one-message-only b/test/integration/test-ubuntu-bug-784473-InRelease-one-message-only
new file mode 100755
index 0000000..fe42ba8
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-784473-InRelease-one-message-only
@@ -0,0 +1,36 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'apt' 'i386' '0.8.11'
+
+export APT_DONT_SIGN='Release.gpg'
+setupaptarchive --no-update
+
+find aptarchive/ -name 'InRelease' -exec cp {} {}.old \;
+
+for RELEASE in $(find aptarchive/ -name 'InRelease'); do
+ (echo 'Origin: Marvin
+Label: Marvin
+Suite: experimental
+Codename: experimental
+MD5Sum:
+ 65fd410587b6978de2277f2912523f09 9360 Packages
+ d27b294ed172a1fa9dd5a53949914c5d 4076 Packages.bz2
+ 2182897e0a2a0c09e760beaae117a015 2023 Packages.diff/Index
+ 1b895931853981ad8204d2439821b999 4144 Packages.gz'; echo; cat ${RELEASE}.old;) > ${RELEASE}
+done
+
+testfailure aptget update
+testsuccess grep '^E:.*Clearsigned file .*NOSPLIT.*' rootdir/tmp/testfailure.output
+
+
+ROOTDIR="$(readlink -f .)"
+testsuccessequal "Package files:
+ 100 ${ROOTDIR}/rootdir/var/lib/dpkg/status
+ release a=now
+Pinned packages:" aptcache policy
diff --git a/test/integration/test-ubuntu-bug-802901-multiarch-early-remove b/test/integration/test-ubuntu-bug-802901-multiarch-early-remove
new file mode 100755
index 0000000..d9587d9
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-802901-multiarch-early-remove
@@ -0,0 +1,24 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'libgl1-mesa-glx' 'amd64' '2.0' 'Multi-Arch: same
+Provides: libgl1
+Conflicts: libgl1'
+insertpackage 'unstable' 'libgl1-mesa-glx' 'i386,amd64' '2.0' 'Multi-Arch: same
+Provides: libgl1
+Conflicts: libgl1'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ libgl1-mesa-glx:i386
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libgl1-mesa-glx:i386 (2.0 unstable [i386])
+Conf libgl1-mesa-glx:i386 (2.0 unstable [i386])' aptget install libgl1-mesa-glx:i386 -s
diff --git a/test/integration/test-ubuntu-bug-806274-install-suggests b/test/integration/test-ubuntu-bug-806274-install-suggests
new file mode 100755
index 0000000..b73a6f7
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-806274-install-suggests
@@ -0,0 +1,81 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'apt' 'i386' '0.8.15' 'Depends: foo
+Recommends: bar
+Suggests: baz'
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+insertpackage 'unstable' 'bar' 'i386' '1.0'
+insertpackage 'unstable' 'baz' 'i386' '1.0'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ bar foo
+Suggested packages:
+ baz
+The following NEW packages will be installed:
+ apt bar foo
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [i386])
+Conf foo (1.0 unstable [i386])
+Inst apt (0.8.15 unstable [i386])
+Conf apt (0.8.15 unstable [i386])
+Inst bar (1.0 unstable [i386])
+Conf bar (1.0 unstable [i386])' aptget install apt -s --install-recommends --no-install-suggests
+
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ bar baz foo
+The following NEW packages will be installed:
+ apt bar baz foo
+0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [i386])
+Conf foo (1.0 unstable [i386])
+Inst apt (0.8.15 unstable [i386])
+Conf apt (0.8.15 unstable [i386])
+Inst bar (1.0 unstable [i386])
+Inst baz (1.0 unstable [i386])
+Conf bar (1.0 unstable [i386])
+Conf baz (1.0 unstable [i386])' aptget install apt -s --install-recommends --install-suggests
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ foo
+Suggested packages:
+ baz
+Recommended packages:
+ bar
+The following NEW packages will be installed:
+ apt foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [i386])
+Conf foo (1.0 unstable [i386])
+Inst apt (0.8.15 unstable [i386])
+Conf apt (0.8.15 unstable [i386])' aptget install apt -s --no-install-recommends --no-install-suggests
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ baz foo
+Recommended packages:
+ bar
+The following NEW packages will be installed:
+ apt baz foo
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [i386])
+Conf foo (1.0 unstable [i386])
+Inst apt (0.8.15 unstable [i386])
+Conf apt (0.8.15 unstable [i386])
+Inst baz (1.0 unstable [i386])
+Conf baz (1.0 unstable [i386])' aptget install apt -s --no-install-recommends --install-suggests
diff --git a/test/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first b/test/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first
new file mode 100755
index 0000000..5a3e276
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-835625-multiarch-lockstep-installed-first
@@ -0,0 +1,45 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'libsame' 'i386' '1'
+insertinstalledpackage 'apt' 'i386' '1' 'Depends: libsame (= 1)'
+
+insertpackage 'unstable' 'libsame' 'i386,amd64' '2' 'Multi-Arch: same'
+insertpackage 'unstable' 'apt' 'i386' '2' 'Depends: libsame (= 2)'
+
+setupaptarchive
+
+testequalor2 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ apt:i386 libsame:i386
+The following NEW packages will be installed:
+ libsame
+The following packages will be upgraded:
+ apt:i386 libsame:i386
+2 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame:i386 [1] (2 unstable [i386]) [apt:i386 ]
+Inst libsame (2 unstable [amd64]) [apt:i386 ]
+Conf libsame:i386 (2 unstable [i386]) [apt:i386 ]
+Conf libsame (2 unstable [amd64]) [apt:i386 ]
+Inst apt:i386 [1] (2 unstable [i386])
+Conf apt:i386 (2 unstable [i386])' 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ apt:i386 libsame:i386
+The following NEW packages will be installed:
+ libsame
+The following packages will be upgraded:
+ apt:i386 libsame:i386
+2 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst apt:i386 [1] (2 unstable [i386]) []
+Inst libsame:i386 [1] (2 unstable [i386])
+Inst libsame (2 unstable [amd64])
+Conf libsame:i386 (2 unstable [i386])
+Conf libsame (2 unstable [amd64])
+Conf apt:i386 (2 unstable [i386])' aptget install libsame:amd64 -s
diff --git a/test/integration/test-ubuntu-bug-859188-multiarch-reinstall b/test/integration/test-ubuntu-bug-859188-multiarch-reinstall
new file mode 100755
index 0000000..5fdb98d
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-859188-multiarch-reinstall
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386' 'armel'
+
+buildsimplenativepackage 'libsame' 'amd64,i386,armel' '1.0' 'unstable' 'Multi-Arch: same'
+
+setupaptarchive
+
+testsuccess aptget install libsame libsame:i386
+
+REINSTALL='Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded.
+Inst libsame [1.0] (1.0 unstable [amd64])
+Inst libsame:i386 [1.0] (1.0 unstable [i386])
+Conf libsame (1.0 unstable [amd64])
+Conf libsame:i386 (1.0 unstable [i386])'
+
+testsuccessequal "$REINSTALL" aptget install --reinstall libsame -s
+testsuccessequal "$REINSTALL" aptget install --reinstall libsame:amd64 -s
+testsuccessequal "$REINSTALL" aptget install --reinstall libsame:i386 -s
+testsuccessequal "$REINSTALL" aptget install --reinstall libsame:amd64 libsame:i386 -s
diff --git a/test/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering b/test/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering
new file mode 100755
index 0000000..bd5be9e
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-985852-pre-depends-or-group-ordering
@@ -0,0 +1,22 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'custom' 'amd64' '1.0' 'Pre-Depends: grub-pc | grub'
+insertinstalledpackage 'grub' 'amd64' '1.0'
+insertpackage 'unstable' 'custom' 'amd64' '2.0' 'Pre-Depends: grub-pc | grub'
+
+setupaptarchive
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ custom
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst custom [1.0] (2.0 unstable [amd64])
+Conf custom (2.0 unstable [amd64])' aptget dist-upgrade -s
diff --git a/test/integration/test-unpack-different-version-unpacked b/test/integration/test-unpack-different-version-unpacked
new file mode 100755
index 0000000..bcb4836
--- /dev/null
+++ b/test/integration/test-unpack-different-version-unpacked
@@ -0,0 +1,121 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable' 'libqtcore4' 'i386,amd64' '2' 'Multi-Arch: same'
+setupaptarchive
+
+DPKGSTATUS='rootdir/var/lib/dpkg/status'
+cp $DPKGSTATUS dpkg.status
+
+cleanstatus() {
+ cp dpkg.status $DPKGSTATUS
+ rm rootdir/var/cache/apt/*.bin
+}
+
+#FIXME: the reported version is wrong, it should be 1, not 2
+insertinstalledpackage 'libqtcore4' 'i386,amd64' '1' 'Multi-Arch: same' '' 'install ok unpacked'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
+2 not fully installed or removed.
+Conf libqtcore4 (2 unstable [amd64])
+Conf libqtcore4:i386 (2 unstable [i386])' aptget install -s -f
+
+cleanstatus
+insertinstalledpackage 'libqtcore4' 'amd64' '2' 'Multi-Arch: same' '' 'install ok unpacked'
+insertinstalledpackage 'libqtcore4' 'i386' '1' 'Multi-Arch: same' '' 'install ok unpacked'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Correcting dependencies... Done
+The following additional packages will be installed:
+ libqtcore4:i386
+The following packages will be upgraded:
+ libqtcore4:i386
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+2 not fully installed or removed.
+Inst libqtcore4:i386 [1] (2 unstable [i386])
+Conf libqtcore4:i386 (2 unstable [i386])
+Conf libqtcore4 (2 unstable [amd64])' aptget install -s -f
+
+cleanstatus
+insertinstalledpackage 'libqtcore4' 'i386' '2' 'Multi-Arch: same' '' 'install ok unpacked'
+insertinstalledpackage 'libqtcore4' 'amd64' '1' 'Multi-Arch: same' '' 'install ok unpacked'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Correcting dependencies... Done
+The following additional packages will be installed:
+ libqtcore4
+The following packages will be upgraded:
+ libqtcore4
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+2 not fully installed or removed.
+Inst libqtcore4 [1] (2 unstable [amd64])
+Conf libqtcore4 (2 unstable [amd64])
+Conf libqtcore4:i386 (2 unstable [i386])' aptget install -s -f
+
+cleanstatus
+insertinstalledpackage 'libqtcore4' 'amd64' '2' 'Multi-Arch: same' '' 'install ok unpacked'
+insertinstalledpackage 'libqtcore4' 'i386' '1' 'Multi-Arch: same'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Correcting dependencies... Done
+The following additional packages will be installed:
+ libqtcore4:i386
+The following packages will be upgraded:
+ libqtcore4:i386
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+1 not fully installed or removed.
+Inst libqtcore4:i386 [1] (2 unstable [i386])
+Conf libqtcore4:i386 (2 unstable [i386])
+Conf libqtcore4 (2 unstable [amd64])' aptget install -s -f
+
+cleanstatus
+insertinstalledpackage 'libqtcore4' 'i386' '2' 'Multi-Arch: same' '' 'install ok unpacked'
+insertinstalledpackage 'libqtcore4' 'amd64' '1' 'Multi-Arch: same'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Correcting dependencies... Done
+The following additional packages will be installed:
+ libqtcore4
+The following packages will be upgraded:
+ libqtcore4
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+1 not fully installed or removed.
+Inst libqtcore4 [1] (2 unstable [amd64])
+Conf libqtcore4 (2 unstable [amd64])
+Conf libqtcore4:i386 (2 unstable [i386])' aptget install -s -f
+
+cleanstatus
+insertinstalledpackage 'libqtcore4' 'amd64' '2' 'Multi-Arch: same'
+insertinstalledpackage 'libqtcore4' 'i386' '1' 'Multi-Arch: same' '' 'install ok unpacked'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Correcting dependencies... Done
+The following additional packages will be installed:
+ libqtcore4:i386
+The following packages will be upgraded:
+ libqtcore4:i386
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+1 not fully installed or removed.
+Inst libqtcore4:i386 [1] (2 unstable [i386])
+Conf libqtcore4:i386 (2 unstable [i386])' aptget install -s -f
+
+cleanstatus
+insertinstalledpackage 'libqtcore4' 'i386' '2' 'Multi-Arch: same'
+insertinstalledpackage 'libqtcore4' 'amd64' '1' 'Multi-Arch: same' '' 'install ok unpacked'
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Correcting dependencies... Done
+The following additional packages will be installed:
+ libqtcore4
+The following packages will be upgraded:
+ libqtcore4
+1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+1 not fully installed or removed.
+Inst libqtcore4 [1] (2 unstable [amd64])
+Conf libqtcore4 (2 unstable [amd64])' aptget install -s -f
diff --git a/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages b/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages
new file mode 100755
index 0000000..09953e9
--- /dev/null
+++ b/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages
@@ -0,0 +1,63 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+# the difference between version 3 and 4 is the new package 'ure' which
+# we have to unpack before we start configuring parts of the loop
+insertinstalledpackage 'libreoffice' 'amd64' '3' 'Depends: libreoffice-core (= 3)'
+insertinstalledpackage 'libreoffice-core' 'amd64' '3' 'Depends: libreoffice-common (>= 3)'
+insertinstalledpackage 'libreoffice-common' 'all' '3' 'Depends: libreoffice-style
+Breaks: libreoffice-core (>= 3+), libreoffice-core (<= 3~), libreoffice-style-galaxy (>= 3+), libreoffice-style-galaxy (<= 3~)'
+insertinstalledpackage 'libreoffice-style-galaxy' 'amd64' '3' 'Depends: libreoffice-core
+Provides: libreoffice-style'
+
+insertpackage 'sid' 'libreoffice' 'amd64' '4' 'Depends: libreoffice-core (= 4)'
+insertpackage 'sid' 'libreoffice-core' 'amd64' '4' 'Depends: libreoffice-common (>= 4)
+Breaks: libreoffice-common (<< 4), libreoffice-style-galaxy (<< 4)'
+insertpackage 'sid' 'libreoffice-common' 'all' '4' 'Depends: libreoffice-style, ure
+Breaks: libreoffice-core (>= 4+), libreoffice-core (<= 4~), libreoffice-style-galaxy (>= 4+), libreoffice-style-galaxy (<= 4~)'
+insertpackage 'sid' 'libreoffice-style-galaxy' 'amd64' '4' 'Depends: libreoffice-core
+Provides: libreoffice-style'
+insertpackage 'sid' 'ure' 'amd64' '4'
+
+setupaptarchive
+
+testequalor2 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ ure
+The following packages will be upgraded:
+ libreoffice libreoffice-common libreoffice-core libreoffice-style-galaxy
+4 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libreoffice [3] (4 sid [amd64]) []
+Inst libreoffice-style-galaxy [3] (4 sid [amd64]) [libreoffice-common:amd64 on libreoffice-style-galaxy:amd64] [libreoffice-common:amd64 ]
+Inst libreoffice-core [3] (4 sid [amd64]) [libreoffice-core:amd64 on libreoffice-common:amd64] [libreoffice-common:amd64 on libreoffice-core:amd64] [libreoffice-common:amd64 on libreoffice-style-galaxy:amd64] [libreoffice-common:amd64 ]
+Inst libreoffice-common [3] (4 sid [all]) []
+Inst ure (4 sid [amd64])
+Conf libreoffice (4 sid [amd64])
+Conf libreoffice-style-galaxy (4 sid [amd64])
+Conf libreoffice-core (4 sid [amd64])
+Conf libreoffice-common (4 sid [all])
+Conf ure (4 sid [amd64])' 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following NEW packages will be installed:
+ ure
+The following packages will be upgraded:
+ libreoffice libreoffice-common libreoffice-core libreoffice-style-galaxy
+4 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst libreoffice [3] (4 sid [amd64]) []
+Inst libreoffice-style-galaxy [3] (4 sid [amd64]) [libreoffice-common:amd64 on libreoffice-style-galaxy:amd64] [libreoffice-common:amd64 ]
+Inst libreoffice-core [3] (4 sid [amd64]) [libreoffice-common:amd64 on libreoffice-core:amd64] [libreoffice-common:amd64 on libreoffice-style-galaxy:amd64] [libreoffice-core:amd64 on libreoffice-common:amd64] [libreoffice-common:amd64 ]
+Inst libreoffice-common [3] (4 sid [all]) []
+Inst ure (4 sid [amd64])
+Conf libreoffice (4 sid [amd64])
+Conf libreoffice-style-galaxy (4 sid [amd64])
+Conf libreoffice-core (4 sid [amd64])
+Conf libreoffice-common (4 sid [all])
+Conf ure (4 sid [amd64])' aptget dist-upgrade -s
diff --git a/test/integration/test-xorg-break-providers b/test/integration/test-xorg-break-providers
new file mode 100755
index 0000000..59b564a
--- /dev/null
+++ b/test/integration/test-xorg-break-providers
@@ -0,0 +1,45 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+# the new xserver-xorg-core breaks xserver-xorg-video-6
+# which both -intel (installed) and -vesa (not installed)
+# provided in their old version.
+# The test ensures that only -intel will be upgraded
+# (together with -core of course) and -vesa not touched.
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ xserver-xorg-video-intel
+The following packages will be upgraded:
+ xserver-xorg-core xserver-xorg-video-intel
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Need to get 0 B/2992 kB of archives.
+After this operation, 24.6 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget install xserver-xorg-core --trivial-only
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ xserver-xorg-core xserver-xorg-video-intel
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Need to get 0 B/2992 kB of archives.
+After this operation, 24.6 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget upgrade --trivial-only
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+Calculating upgrade...
+The following packages will be upgraded:
+ xserver-xorg-core xserver-xorg-video-intel
+2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Need to get 0 B/2992 kB of archives.
+After this operation, 24.6 kB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only
diff --git a/test/interactive-helper/CMakeLists.txt b/test/interactive-helper/CMakeLists.txt
new file mode 100644
index 0000000..0de7d9c
--- /dev/null
+++ b/test/interactive-helper/CMakeLists.txt
@@ -0,0 +1,17 @@
+add_executable(mthdcat mthdcat.cc)
+target_link_libraries(mthdcat apt-pkg)
+add_executable(testdeb testdeb.cc)
+target_link_libraries(testdeb apt-pkg apt-inst)
+add_executable(extract-control extract-control.cc)
+target_link_libraries(extract-control apt-pkg apt-inst)
+add_executable(aptwebserver aptwebserver.cc)
+target_link_libraries(aptwebserver apt-pkg ${CMAKE_THREAD_LIBS_INIT})
+add_executable(aptdropprivs aptdropprivs.cc)
+target_link_libraries(aptdropprivs apt-pkg)
+add_executable(test_fileutl test_fileutl.cc)
+target_link_libraries(test_fileutl apt-pkg)
+add_executable(createdeb-cve-2020-27350 createdeb-cve-2020-27350.cc)
+
+
+add_library(noprofile SHARED libnoprofile.c)
+target_link_libraries(noprofile ${CMAKE_DL_LIBS})
diff --git a/test/interactive-helper/aptdropprivs.cc b/test/interactive-helper/aptdropprivs.cc
new file mode 100644
index 0000000..1cc04f3
--- /dev/null
+++ b/test/interactive-helper/aptdropprivs.cc
@@ -0,0 +1,27 @@
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <unistd.h>
+
+int main(int const argc, const char * argv[])
+{
+ CommandLine::Args Args[] = {
+ {'c',"config-file",0,CommandLine::ConfigFile},
+ {'o',"option",0,CommandLine::ArbItem},
+ {0, "user", "APT::Sandbox::User", CommandLine::HasArg},
+ {0,0,0,0}
+ };
+
+ CommandLine CmdL(Args, _config);
+ if(CmdL.Parse(argc,argv) == false || DropPrivileges() == false)
+ {
+ _error->DumpErrors(std::cerr, GlobalError::DEBUG);
+ return 42;
+ }
+
+ return execv(CmdL.FileList[0], const_cast<char**>(CmdL.FileList));
+}
diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc
new file mode 100644
index 0000000..2243cce
--- /dev/null
+++ b/test/interactive-helper/aptwebserver.cc
@@ -0,0 +1,1083 @@
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include "teestream.h"
+
+#include <dirent.h>
+#include <errno.h>
+#include <netinet/in.h>
+#include <regex.h>
+#include <signal.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <list>
+#include <sstream>
+#include <string>
+#include <thread>
+#include <unordered_map>
+#include <vector>
+
+static std::string HTMLEncode(std::string encode) /*{{{*/
+{
+ constexpr std::array<std::array<char const *,2>,6> htmlencode = {{
+ {{ "&", "&amp;" }},
+ {{ "<", "&lt;" }},
+ {{ ">", "&gt;" }},
+ {{ "\"", "&quot;" }},
+ {{ "'", "&#x27;" }},
+ {{ "/", "&#x2F;" }},
+ }};
+ for (auto &&h: htmlencode)
+ encode = SubstVar(encode, h[0], h[1]);
+ return encode;
+}
+ /*}}}*/
+static std::string httpcodeToStr(int const httpcode) /*{{{*/
+{
+ switch (httpcode)
+ {
+ // Informational 1xx
+ case 100: return _config->Find("aptwebserver::httpcode::100", "100 Continue");
+ case 101: return _config->Find("aptwebserver::httpcode::101", "101 Switching Protocols");
+ // Successful 2xx
+ case 200: return _config->Find("aptwebserver::httpcode::200", "200 OK");
+ case 201: return _config->Find("aptwebserver::httpcode::201", "201 Created");
+ case 202: return _config->Find("aptwebserver::httpcode::202", "202 Accepted");
+ case 203: return _config->Find("aptwebserver::httpcode::203", "203 Non-Authoritative Information");
+ case 204: return _config->Find("aptwebserver::httpcode::204", "204 No Content");
+ case 205: return _config->Find("aptwebserver::httpcode::205", "205 Reset Content");
+ case 206: return _config->Find("aptwebserver::httpcode::206", "206 Partial Content");
+ // Redirections 3xx
+ case 300: return _config->Find("aptwebserver::httpcode::300", "300 Multiple Choices");
+ case 301: return _config->Find("aptwebserver::httpcode::301", "301 Moved Permanently");
+ case 302: return _config->Find("aptwebserver::httpcode::302", "302 Found");
+ case 303: return _config->Find("aptwebserver::httpcode::303", "303 See Other");
+ case 304: return _config->Find("aptwebserver::httpcode::304", "304 Not Modified");
+ case 305: return _config->Find("aptwebserver::httpcode::305", "305 Use Proxy");
+ case 307: return _config->Find("aptwebserver::httpcode::307", "307 Temporary Redirect");
+ case 308: return _config->Find("aptwebserver::httpcode::308", "308 Permanent Redirect");
+ // Client errors 4xx
+ case 400: return _config->Find("aptwebserver::httpcode::400", "400 Bad Request");
+ case 401: return _config->Find("aptwebserver::httpcode::401", "401 Unauthorized");
+ case 402: return _config->Find("aptwebserver::httpcode::402", "402 Payment Required");
+ case 403: return _config->Find("aptwebserver::httpcode::403", "403 Forbidden");
+ case 404: return _config->Find("aptwebserver::httpcode::404", "404 Not Found");
+ case 405: return _config->Find("aptwebserver::httpcode::405", "405 Method Not Allowed");
+ case 406: return _config->Find("aptwebserver::httpcode::406", "406 Not Acceptable");
+ case 407: return _config->Find("aptwebserver::httpcode::407", "407 Proxy Authentication Required");
+ case 408: return _config->Find("aptwebserver::httpcode::408", "408 Request Time-out");
+ case 409: return _config->Find("aptwebserver::httpcode::409", "409 Conflict");
+ case 410: return _config->Find("aptwebserver::httpcode::410", "410 Gone");
+ case 411: return _config->Find("aptwebserver::httpcode::411", "411 Length Required");
+ case 412: return _config->Find("aptwebserver::httpcode::412", "412 Precondition Failed");
+ case 413: return _config->Find("aptwebserver::httpcode::413", "413 Request Entity Too Large");
+ case 414: return _config->Find("aptwebserver::httpcode::414", "414 Request-URI Too Large");
+ case 415: return _config->Find("aptwebserver::httpcode::415", "415 Unsupported Media Type");
+ case 416: return _config->Find("aptwebserver::httpcode::416", "416 Requested range not satisfiable");
+ case 417: return _config->Find("aptwebserver::httpcode::417", "417 Expectation Failed");
+ case 418: return _config->Find("aptwebserver::httpcode::418", "418 I'm a teapot");
+ // Server error 5xx
+ case 500: return _config->Find("aptwebserver::httpcode::500", "500 Internal Server Error");
+ case 501: return _config->Find("aptwebserver::httpcode::501", "501 Not Implemented");
+ case 502: return _config->Find("aptwebserver::httpcode::502", "502 Bad Gateway");
+ case 503: return _config->Find("aptwebserver::httpcode::503", "503 Service Unavailable");
+ case 504: return _config->Find("aptwebserver::httpcode::504", "504 Gateway Time-out");
+ case 505: return _config->Find("aptwebserver::httpcode::505", "505 HTTP Version not supported");
+ }
+ std::string codeconf, code;
+ strprintf(codeconf, "aptwebserver::httpcode::%i", httpcode);
+ strprintf(code, "%i Unknown HTTP code", httpcode);
+ return _config->Find(codeconf, code);
+}
+ /*}}}*/
+static bool chunkedTransferEncoding(std::list<std::string> const &headers)/*{{{*/
+{
+ if (std::find(headers.begin(), headers.end(), "Transfer-Encoding: chunked") != headers.end())
+ return true;
+ if (_config->FindB("aptwebserver::chunked-transfer-encoding", false) == true)
+ return true;
+ return false;
+}
+ /*}}}*/
+static bool contentTypeSet(std::list<std::string> const &headers) /*{{{*/
+{
+ return std::any_of(headers.begin(), headers.end(), [](std::string const &h) { return APT::String::Startswith(h, "Content-Type:"); });
+}
+ /*}}}*/
+// contentTypeFromExtension /*{{{*/
+static std::string contentTypeFromExtension(std::string const &ext)
+{
+ auto t = _config->Find(std::string("aptwebserver::content-type::by-extension::").append(ext));
+ if (APT::String::Startswith(t, "text/"))
+ return t.append("; charset=utf-8");
+ return t;
+}
+ /*}}}*/
+static void addFileHeaders(std::list<std::string> &headers, FileFd &data)/*{{{*/
+{
+ if (chunkedTransferEncoding(headers) == false)
+ {
+ std::ostringstream contentlength;
+ contentlength << "Content-Length: " << data.FileSize();
+ headers.push_back(contentlength.str());
+ }
+ if (_config->FindB("aptwebserver::support::last-modified", true) == true)
+ {
+ std::string lastmodified("Last-Modified: ");
+ lastmodified.append(TimeRFC1123(data.ModificationTime(), false));
+ headers.push_back(lastmodified);
+ }
+ if (_config->FindB("aptwebserver::content-type::guess", true) &&
+ data.FileSize() != 0 &&
+ contentTypeSet(headers) == false)
+ {
+ std::string const name = data.Name();
+ std::string ext = flExtension(name);
+ if (name.empty() == false && ext.empty() == false && name != ext)
+ {
+ std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
+ auto const type = contentTypeFromExtension(ext);
+ if (type.empty() == false)
+ headers.push_back(std::string("Content-Type: ").append(type));
+ }
+ }
+}
+ /*}}}*/
+static void addDataHeaders(std::list<std::string> &headers, std::string &data)/*{{{*/
+{
+ if (chunkedTransferEncoding(headers) == false)
+ {
+ std::ostringstream contentlength;
+ contentlength << "Content-Length: " << data.size();
+ headers.push_back(contentlength.str());
+ }
+}
+ /*}}}*/
+static bool sendHead(std::ostream &log, int const client, int const httpcode, std::list<std::string> &headers)/*{{{*/
+{
+ std::string response("HTTP/1.1 ");
+ response.append(httpcodeToStr(httpcode));
+ headers.push_front(response);
+ _config->Set("APTWebserver::Last-Status-Code", httpcode);
+
+ std::stringstream buffer;
+ auto const empties = _config->FindVector("aptwebserver::empty-response-header");
+ for (auto const &e: empties)
+ buffer << e << ":" << std::endl;
+ _config->Dump(buffer, "aptwebserver::response-header", "%t: %v%n", false);
+ std::vector<std::string> addheaders = VectorizeString(buffer.str(), '\n');
+ for (std::vector<std::string>::const_iterator h = addheaders.begin(); h != addheaders.end(); ++h)
+ headers.push_back(*h);
+
+ std::string date("Date: ");
+ date.append(TimeRFC1123(time(NULL), false));
+ headers.push_back(date);
+
+ if (chunkedTransferEncoding(headers) == true)
+ headers.push_back("Transfer-Encoding: chunked");
+
+ log << ">>> RESPONSE to " << client << " >>>" << std::endl;
+ bool Success = true;
+ for (std::list<std::string>::const_iterator h = headers.begin();
+ Success == true && h != headers.end(); ++h)
+ {
+ Success &= FileFd::Write(client, h->c_str(), h->size());
+ if (Success == true)
+ Success &= FileFd::Write(client, "\r\n", 2);
+ log << *h << std::endl;
+ }
+ if (Success == true)
+ Success &= FileFd::Write(client, "\r\n", 2);
+ log << "<<<<<<<<<<<<<<<<" << std::endl;
+ return Success;
+}
+ /*}}}*/
+static bool sendFile(int const client, std::list<std::string> const &headers, FileFd &data)/*{{{*/
+{
+ bool Success = true;
+ bool const chunked = chunkedTransferEncoding(headers);
+ char buffer[500];
+ unsigned long long actual = 0;
+ while ((Success &= data.Read(buffer, sizeof(buffer), &actual)) == true)
+ {
+ if (actual == 0)
+ break;
+
+ if (chunked == true)
+ {
+ std::string size;
+ strprintf(size, "%llX\r\n", actual);
+ Success &= FileFd::Write(client, size.c_str(), size.size());
+ Success &= FileFd::Write(client, buffer, actual);
+ Success &= FileFd::Write(client, "\r\n", strlen("\r\n"));
+ }
+ else
+ Success &= FileFd::Write(client, buffer, actual);
+ }
+ if (chunked == true)
+ {
+ char const * const finish = "0\r\n\r\n";
+ Success &= FileFd::Write(client, finish, strlen(finish));
+ }
+ if (Success == false)
+ std::cerr << "SENDFILE:" << (chunked ? " CHUNKED" : "") << " READ/WRITE ERROR to " << client << std::endl;
+ return Success;
+}
+ /*}}}*/
+static bool sendData(int const client, std::list<std::string> const &headers, std::string const &data)/*{{{*/
+{
+ if (chunkedTransferEncoding(headers) == true)
+ {
+ unsigned long long const ullsize = data.length();
+ std::string size;
+ strprintf(size, "%llX\r\n", ullsize);
+ char const * const finish = "\r\n0\r\n\r\n";
+ if (FileFd::Write(client, size.c_str(), size.length()) == false ||
+ FileFd::Write(client, data.c_str(), ullsize) == false ||
+ FileFd::Write(client, finish, strlen(finish)) == false)
+ {
+ std::cerr << "SENDDATA: CHUNK WRITE ERROR to " << client << std::endl;
+ return false;
+ }
+ }
+ else if (FileFd::Write(client, data.c_str(), data.size()) == false)
+ {
+ std::cerr << "SENDDATA: WRITE ERROR to " << client << std::endl;
+ return false;
+ }
+ return true;
+}
+ /*}}}*/
+static void sendError(std::ostream &log, int const client, int const httpcode, std::string const &request,/*{{{*/
+ bool const content, std::string const &error, std::list<std::string> &headers)
+{
+ auto const quotedCode = HTMLEncode(httpcodeToStr(httpcode));
+ std::string response("<!doctype html><html><head><title>");
+ response.append(quotedCode).append("</title><meta charset=\"utf-8\" /></head>");
+ response.append("<body><h1>").append(quotedCode).append("</h1>");
+ if (httpcode != 200)
+ response.append("<p><em>Error</em>: ");
+ else
+ response.append("<p><em>Success</em>: ");
+ if (error.empty() == false)
+ response.append(HTMLEncode(error));
+ else
+ response.append(quotedCode);
+ if (httpcode != 200)
+ response.append("</p>This error is a result of the request: <pre>");
+ else
+ response.append("The successfully executed operation was requested by: <pre>");
+ response.append(HTMLEncode(request)).append("</pre></body></html>");
+ if (httpcode != 200)
+ {
+ if (_config->FindB("aptwebserver::closeOnError", false) == true)
+ headers.push_back("Connection: close");
+ }
+ addDataHeaders(headers, response);
+
+ if (contentTypeSet(headers) == false)
+ headers.push_back("Content-Type: text/html; charset=utf-8");
+
+ sendHead(log, client, httpcode, headers);
+ if (content == true)
+ sendData(client, headers, response);
+}
+static void sendSuccess(std::ostream &log, int const client, std::string const &request,
+ bool const content, std::string const &error, std::list<std::string> &headers)
+{
+ sendError(log, client, 200, request, content, error, headers);
+}
+ /*}}}*/
+static void sendRedirect(std::ostream &log, int const client, int const httpcode,/*{{{*/
+ std::string const &uri, std::string const &request, bool content)
+{
+ std::list<std::string> headers;
+ auto const quotedCode = HTMLEncode(httpcodeToStr(httpcode));
+ std::string response("<!doctype html><html><head><title>");
+ response.append(quotedCode).append("</title><meta charset=\"utf-8\" /></head>");
+ response.append("<body><h1>").append(quotedCode).append("</h1");
+ response.append("<p>You should be redirected to <em>").append(HTMLEncode(uri)).append("</em></p>");
+ response.append("This page is a result of the request: <pre>");
+ response.append(HTMLEncode(request)).append("</pre></body></html>");
+ addDataHeaders(headers, response);
+ std::string location("Location: ");
+ if (strncmp(uri.c_str(), "http://", 7) != 0 && strncmp(uri.c_str(), "https://", 8) != 0)
+ {
+ std::string const host = LookupTag(request, "Host");
+ unsigned int const httpsport = _config->FindI("aptwebserver::port::https", 4433);
+ std::string hosthttpsport;
+ strprintf(hosthttpsport, ":%u", httpsport);
+ if (host.find(hosthttpsport) != std::string::npos)
+ location.append("https://");
+ else
+ location.append("http://");
+ location.append(host).append("/");
+ if (strncmp("/home/", uri.c_str(), strlen("/home/")) == 0 && uri.find("/public_html/") != std::string::npos)
+ {
+ std::string homeuri = SubstVar(uri, "/home/", "~");
+ homeuri = SubstVar(homeuri, "/public_html/", "/");
+ location.append(homeuri);
+ }
+ else
+ location.append(uri);
+ }
+ else
+ location.append(uri);
+ headers.push_back(location);
+
+ if (contentTypeSet(headers) == false)
+ headers.push_back("Content-Type: text/html; charset=utf-8");
+
+ sendHead(log, client, httpcode, headers);
+ if (content == true)
+ sendData(client, headers, response);
+}
+ /*}}}*/
+static int filter_hidden_files(const struct dirent *a) /*{{{*/
+{
+ if (a->d_name[0] == '.')
+ return 0;
+#ifdef _DIRENT_HAVE_D_TYPE
+ // if we have the d_type check that only files and dirs will be included
+ if (a->d_type != DT_UNKNOWN &&
+ a->d_type != DT_REG &&
+ a->d_type != DT_LNK && // this includes links to regular files
+ a->d_type != DT_DIR)
+ return 0;
+#endif
+ return 1;
+}
+static int grouped_alpha_case_sort(const struct dirent **a, const struct dirent **b) {
+#ifdef _DIRENT_HAVE_D_TYPE
+ if ((*a)->d_type == DT_DIR && (*b)->d_type == DT_DIR);
+ else if ((*a)->d_type == DT_DIR && (*b)->d_type == DT_REG)
+ return -1;
+ else if ((*b)->d_type == DT_DIR && (*a)->d_type == DT_REG)
+ return 1;
+ else
+#endif
+ {
+ struct stat f_prop; //File's property
+ stat((*a)->d_name, &f_prop);
+ int const amode = f_prop.st_mode;
+ stat((*b)->d_name, &f_prop);
+ int const bmode = f_prop.st_mode;
+ if (S_ISDIR(amode) && S_ISDIR(bmode));
+ else if (S_ISDIR(amode))
+ return -1;
+ else if (S_ISDIR(bmode))
+ return 1;
+ }
+ return strcasecmp((*a)->d_name, (*b)->d_name);
+}
+ /*}}}*/
+static void sendDirectoryListing(std::ostream &log, int const client, std::string const &dir,/*{{{*/
+ std::string const &request, bool content, std::list<std::string> &headers)
+{
+ struct dirent **namelist;
+ int const counter = scandir(dir.c_str(), &namelist, filter_hidden_files, grouped_alpha_case_sort);
+ if (counter == -1)
+ {
+ sendError(log, client, 500, request, content, "scandir failed", headers);
+ return;
+ }
+
+ std::ostringstream listing;
+ std::string const quotedDir = HTMLEncode(dir);
+ listing << "<!doctype html><html><head><title>Index of " << quotedDir << "</title><meta charset=\"utf-8\" />"
+ << "<style type=\"text/css\"><!-- td {padding: 0.02em 0.5em 0.02em 0.5em;}"
+ << "tr:nth-child(even){background-color:#dfdfdf;}"
+ << "h1, td:nth-child(3){text-align:center;}"
+ << "table {margin-left:auto;margin-right:auto;} --></style>"
+ << "</head>" << std::endl
+ << "<body><h1>Index of " << quotedDir << "</h1>" << std::endl
+ << "<table><tr><th>#</th><th>Name</th><th>Size</th><th>Last-Modified</th></tr>" << std::endl;
+ if (dir != "./")
+ listing << "<tr><td>d</td><td><a href=\"..\">Parent Directory</a></td><td>-</td><td>-</td></tr>";
+ for (int i = 0; i < counter; ++i) {
+ struct stat fs;
+ std::string filename(dir);
+ filename.append("/").append(namelist[i]->d_name);
+ stat(filename.c_str(), &fs);
+ std::string const quotedHref = QuoteString(namelist[i]->d_name, "\"\\/#?");
+ std::string const quotedName = HTMLEncode(namelist[i]->d_name);
+ bool const isDir = S_ISDIR(fs.st_mode);
+ listing << "<tr><td>" << (isDir ? 'd' : 'f') << "</td>"
+ << "<td><a href=\"./" << quotedHref << (isDir ? "/" : "") <<"\">" << quotedName << "</a></td>"
+ << "<td>" << (isDir ? "-" : SizeToStr(fs.st_size).append("B")) << "</td>"
+ << "<td>" << TimeRFC1123(fs.st_mtime, true) << "</td></tr>\n";
+ }
+ listing << "</table></body></html>" << std::endl;
+
+ if (contentTypeSet(headers) == false)
+ headers.push_back("Content-Type: text/html; charset=utf-8");
+
+ std::string response(listing.str());
+ addDataHeaders(headers, response);
+ sendHead(log, client, 200, headers);
+ if (content == true)
+ sendData(client, headers, response);
+}
+ /*}}}*/
+static bool parseFirstLine(std::ostream &log, int const client, std::string const &request,/*{{{*/
+ std::string &filename, std::string &params, bool &sendContent,
+ bool &closeConnection, std::list<std::string> &headers)
+{
+ if (strncmp(request.c_str(), "HEAD ", 5) == 0)
+ sendContent = false;
+ if (strncmp(request.c_str(), "GET ", 4) != 0)
+ {
+ sendError(log, client, 501, request, true, "", headers);
+ return false;
+ }
+
+ size_t const lineend = request.find('\n');
+ size_t filestart = request.find(' ');
+ for (; request[filestart] == ' '; ++filestart);
+ size_t fileend = request.rfind(' ', lineend);
+ if (lineend == std::string::npos || filestart == std::string::npos ||
+ fileend == std::string::npos || filestart == fileend)
+ {
+ sendError(log, client, 500, request, sendContent, "Filename can't be extracted", headers);
+ return false;
+ }
+
+ size_t httpstart = fileend;
+ for (; request[httpstart] == ' '; ++httpstart);
+ if (strncmp(request.c_str() + httpstart, "HTTP/1.1\r", 9) == 0)
+ closeConnection = strcasecmp(LookupTag(request, "Connection", "Keep-Alive").c_str(), "Keep-Alive") != 0;
+ else if (strncmp(request.c_str() + httpstart, "HTTP/1.0\r", 9) == 0)
+ closeConnection = strcasecmp(LookupTag(request, "Connection", "Keep-Alive").c_str(), "close") == 0;
+ else
+ {
+ sendError(log, client, 500, request, sendContent, "Not an HTTP/1.{0,1} request", headers);
+ return false;
+ }
+
+ filename = request.substr(filestart, fileend - filestart);
+ if (filename.find(' ') != std::string::npos)
+ {
+ sendError(log, client, 500, request, sendContent, "Filename contains an unencoded space", headers);
+ return false;
+ }
+
+ std::string host = LookupTag(request, "Host", "");
+ if (host.empty() == true)
+ {
+ // RFC 2616 §14.23 requires Host
+ sendError(log, client, 400, request, sendContent, "Host header is required", headers);
+ return false;
+ }
+ host = "http://" + host;
+
+ // Proxies require absolute uris, so this is a simple proxy-fake option
+ std::string const absolute = _config->Find("aptwebserver::request::absolute", "uri,path");
+ if (strncmp(host.c_str(), filename.c_str(), host.length()) == 0 && APT::String::Startswith(filename, "/_config/") == false)
+ {
+ if (absolute.find("uri") == std::string::npos)
+ {
+ sendError(log, client, 400, request, sendContent, "Request is absoluteURI, but configured to not accept that", headers);
+ return false;
+ }
+
+ // strip the host from the request to make it an absolute path
+ filename.erase(0, host.length());
+
+ std::string const authConf = _config->Find("aptwebserver::proxy-authorization", "");
+ std::string auth = LookupTag(request, "Proxy-Authorization", "");
+ if (authConf.empty() != auth.empty())
+ {
+ if (auth.empty())
+ sendError(log, client, 407, request, sendContent, "Proxy requires authentication", headers);
+ else
+ sendError(log, client, 407, request, sendContent, "Client wants to authenticate to proxy, but proxy doesn't need it", headers);
+ return false;
+ }
+ if (authConf.empty() == false)
+ {
+ char const * const basic = "Basic ";
+ if (strncmp(auth.c_str(), basic, strlen(basic)) == 0)
+ {
+ auth.erase(0, strlen(basic));
+ if (auth != authConf)
+ {
+ sendError(log, client, 407, request, sendContent, "Proxy-Authentication doesn't match", headers);
+ return false;
+ }
+ }
+ else
+ {
+ std::list<std::string> headers;
+ headers.push_back("Proxy-Authenticate: Basic");
+ sendError(log, client, 407, request, sendContent, "Unsupported Proxy-Authentication Scheme", headers);
+ return false;
+ }
+ }
+ }
+ else if (absolute.find("path") == std::string::npos && APT::String::Startswith(filename, "/_config/") == false)
+ {
+ sendError(log, client, 400, request, sendContent, "Request is absolutePath, but configured to not accept that", headers);
+ return false;
+ }
+
+ if (APT::String::Startswith(filename, "/_config/") == false)
+ {
+ std::string const authConf = _config->Find("aptwebserver::authorization", "");
+ std::string auth = LookupTag(request, "Authorization", "");
+ if (authConf.empty() != auth.empty())
+ {
+ if (auth.empty())
+ sendError(log, client, 401, request, sendContent, "Server requires authentication", headers);
+ else
+ sendError(log, client, 401, request, sendContent, "Client wants to authenticate to server, but server doesn't need it", headers);
+ return false;
+ }
+ if (authConf.empty() == false)
+ {
+ char const * const basic = "Basic ";
+ if (strncmp(auth.c_str(), basic, strlen(basic)) == 0)
+ {
+ auth.erase(0, strlen(basic));
+ if (auth != authConf)
+ {
+ sendError(log, client, 401, request, sendContent, "Authentication doesn't match", headers);
+ return false;
+ }
+ }
+ else
+ {
+ headers.push_back("WWW-Authenticate: Basic");
+ sendError(log, client, 401, request, sendContent, "Unsupported Authentication Scheme", headers);
+ return false;
+ }
+ }
+ }
+
+ size_t paramspos = filename.find('?');
+ if (paramspos != std::string::npos)
+ {
+ params = filename.substr(paramspos + 1);
+ filename.erase(paramspos);
+ }
+
+ filename = DeQuoteString(filename);
+
+ // this is not a secure server, but at least prevent the obvious …
+ if (filename.empty() == true || filename[0] != '/' ||
+ strncmp(filename.c_str(), "//", 2) == 0 ||
+ filename.find_first_of("\r\n\t\f\v") != std::string::npos ||
+ filename.find("/../") != std::string::npos)
+ {
+ std::list<std::string> headers;
+ sendError(log, client, 400, request, sendContent, "Filename contains illegal character (sequence)", headers);
+ return false;
+ }
+
+ // nuke the first character which is a / as we assured above
+ filename.erase(0, 1);
+ if (filename.empty() == true)
+ filename = "./";
+ // support ~user/ uris to refer to /home/user/public_html/ as a kind-of special directory
+ else if (filename[0] == '~')
+ {
+ // /home/user is actually not entirely correct, but good enough for now
+ size_t dashpos = filename.find('/');
+ if (dashpos != std::string::npos)
+ {
+ std::string home = filename.substr(1, filename.find('/') - 1);
+ std::string pubhtml = filename.substr(filename.find('/') + 1);
+ filename = "/home/" + home + "/public_html/" + pubhtml;
+ }
+ else
+ filename = "/home/" + filename.substr(1) + "/public_html/";
+ }
+
+ // if no filename is given, but a valid directory see if we can use an index or
+ // have to resort to a autogenerated directory listing later on
+ if (DirectoryExists(filename) == true)
+ {
+ std::string const directoryIndex = _config->Find("aptwebserver::directoryindex");
+ if (directoryIndex.empty() == false && directoryIndex == flNotDir(directoryIndex) &&
+ RealFileExists(filename + directoryIndex) == true)
+ filename += directoryIndex;
+ }
+
+ return true;
+}
+ /*}}}*/
+static bool handleOnTheFlyReconfiguration(std::ostream &log, int const client,/*{{{*/
+ std::string const &request, std::vector<std::string> parts, std::list<std::string> &headers)
+{
+ size_t const pcount = parts.size();
+ for (size_t i = 0; i < pcount; ++i)
+ parts[i] = DeQuoteString(parts[i]);
+ if (pcount == 4 && parts[1] == "set")
+ {
+ _config->Set(parts[2], parts[3]);
+ sendSuccess(log, client, request, true, "Option '" + parts[2] + "' was set to '" + parts[3] + "'!", headers);
+ return true;
+ }
+ else if (pcount == 4 && parts[1] == "find")
+ {
+ std::string response = _config->Find(parts[2], parts[3]);
+ addDataHeaders(headers, response);
+ if (contentTypeSet(headers) == false)
+ headers.push_back("Content-Type: text/plain; charset=utf-8");
+ sendHead(log, client, 200, headers);
+ sendData(client, headers, response);
+ return true;
+ }
+ else if (pcount == 3 && parts[1] == "find")
+ {
+ if (_config->Exists(parts[2]) == true)
+ {
+ std::string response = _config->Find(parts[2]);
+ addDataHeaders(headers, response);
+ if (contentTypeSet(headers) == false)
+ headers.push_back("Content-Type: text/plain; charset=utf-8");
+ sendHead(log, client, 200, headers);
+ sendData(client, headers, response);
+ return true;
+ }
+ sendError(log, client, 404, request, true, "Requested Configuration option doesn't exist", headers);
+ return false;
+ }
+ else if (pcount == 3 && parts[1] == "clear")
+ {
+ _config->Clear(parts[2]);
+ sendSuccess(log, client, request, true, "Option '" + parts[2] + "' was cleared.", headers);
+ return true;
+ }
+
+ sendError(log, client, 400, request, true, "Unknown on-the-fly configuration request", headers);
+ return false;
+}
+ /*}}}*/
+static void * handleClient(int const client, size_t const id) /*{{{*/
+{
+ auto logfilepath = _config->FindFile("aptwebserver::logfiles");
+ if (logfilepath.empty() == false)
+ strprintf(logfilepath, "%s.client-%lu.log", logfilepath.c_str(), id);
+ else
+ logfilepath = "/dev/null";
+ std::ofstream logfile(logfilepath);
+ basic_teeostream<char> log(std::clog, logfile);
+
+ log << "ACCEPT client " << client << std::endl;
+ bool closeConnection = false;
+ while (closeConnection == false)
+ {
+ std::vector<std::string> messages;
+ if (ReadMessages(client, messages) == false)
+ break;
+
+ std::list<std::string> headers;
+ for (std::vector<std::string>::const_iterator m = messages.begin();
+ m != messages.end() && closeConnection == false; ++m) {
+ // if we announced a closing in previous response, do the close now
+ if (std::find(headers.begin(), headers.end(), std::string("Connection: close")) != headers.end())
+ {
+ closeConnection = true;
+ break;
+ }
+ headers.clear();
+
+ log << ">>> REQUEST from " << client << " >>>" << std::endl << *m
+ << std::endl << "<<<<<<<<<<<<<<<<" << std::endl;
+ std::string filename;
+ std::string params;
+ bool sendContent = true;
+ if (parseFirstLine(log, client, *m, filename, params, sendContent, closeConnection, headers) == false)
+ continue;
+
+ // special webserver command request
+ if (filename.length() > 1 && filename[0] == '_')
+ {
+ std::vector<std::string> parts = VectorizeString(filename, '/');
+ if (parts[0] == "_config")
+ {
+ handleOnTheFlyReconfiguration(log, client, *m, parts, headers);
+ continue;
+ }
+ }
+
+ // string replacements in the requested filename
+ ::Configuration::Item const *Replaces = _config->Tree("aptwebserver::redirect::replace");
+ if (Replaces != NULL)
+ {
+ std::string redirect = "/" + filename;
+ for (::Configuration::Item *I = Replaces->Child; I != NULL; I = I->Next)
+ redirect = SubstVar(redirect, I->Tag, I->Value);
+ if (redirect.empty() == false && redirect[0] == '/')
+ redirect.erase(0,1);
+ if (redirect != filename)
+ {
+ sendRedirect(log, client, _config->FindI("aptwebserver::redirect::httpcode", 301), redirect, *m, sendContent);
+ continue;
+ }
+ }
+
+ ::Configuration::Item const *Overwrite = _config->Tree("aptwebserver::overwrite");
+ if (Overwrite != NULL)
+ {
+ for (::Configuration::Item *I = Overwrite->Child; I != NULL; I = I->Next)
+ {
+ regex_t *pattern = new regex_t;
+ int const res = regcomp(pattern, I->Tag.c_str(), REG_EXTENDED | REG_ICASE | REG_NOSUB);
+ if (res != 0)
+ {
+ char error[300];
+ regerror(res, pattern, error, sizeof(error));
+ sendError(log, client, 500, *m, sendContent, error, headers);
+ continue;
+ }
+ if (regexec(pattern, filename.c_str(), 0, 0, 0) == 0)
+ {
+ filename = _config->Find("aptwebserver::overwrite::" + I->Tag + "::filename", flNotDir(filename));
+ if (filename.find("/") == std::string::npos)
+ {
+ auto directory = _config->Find("aptwebserver::overwrite::" + I->Tag + "::directory", flNotFile(filename));
+ filename = flCombine(directory, filename);
+ }
+ if (filename.empty() == false && filename[0] == '/')
+ filename.erase(0,1);
+ if (filename.empty())
+ filename = "./";
+ regfree(pattern);
+ break;
+ }
+ regfree(pattern);
+ }
+ }
+
+ // automatic retry can be tested with this
+ {
+ int failrequests = _config->FindI("aptwebserver::failrequest::" + filename, 0);
+ if (failrequests != 0)
+ {
+ --failrequests;
+ _config->Set(("aptwebserver::failrequest::" + filename).c_str(), failrequests);
+ sendError(log, client, _config->FindI("aptwebserver::failrequest", 400), *m, sendContent, "Server is configured to fail this file.", headers);
+ continue;
+ }
+ }
+
+ // deal with the request
+ unsigned int const httpsport = _config->FindI("aptwebserver::port::https", 4433);
+ std::string hosthttpsport;
+ strprintf(hosthttpsport, ":%u", httpsport);
+ if (_config->FindB("aptwebserver::support::http", true) == false &&
+ LookupTag(*m, "Host").find(hosthttpsport) == std::string::npos)
+ {
+ sendError(log, client, 400, *m, sendContent, "HTTP disabled, all requests must be HTTPS", headers);
+ continue;
+ }
+ else if (RealFileExists(filename) == true)
+ {
+ FileFd data(filename, FileFd::ReadOnly);
+ std::string condition = LookupTag(*m, "If-Modified-Since", "");
+ if (_config->FindB("aptwebserver::support::modified-since", true) == true && condition.empty() == false)
+ {
+ time_t cache;
+ if (RFC1123StrToTime(condition.c_str(), cache) == true &&
+ cache >= data.ModificationTime())
+ {
+ sendHead(log, client, 304, headers);
+ continue;
+ }
+ }
+
+ if (_config->FindB("aptwebserver::support::range", true) == true)
+ condition = LookupTag(*m, "Range", "");
+ else
+ condition.clear();
+ if (condition.empty() == false && strncmp(condition.c_str(), "bytes=", 6) == 0)
+ {
+ std::string ranges = ',' + _config->Find("aptwebserver::response-header::Accept-Ranges") + ',';
+ ranges.erase(std::remove(ranges.begin(), ranges.end(), ' '), ranges.end());
+ if (ranges.find(",bytes,") == std::string::npos)
+ {
+ // we handle it as an error here because we are a test server - a real one should just ignore it
+ sendError(log, client, 400, *m, sendContent, "Client does range requests we don't support", headers);
+ continue;
+ }
+
+ time_t cache;
+ std::string ifrange;
+ if (_config->FindB("aptwebserver::support::if-range", true) == true)
+ ifrange = LookupTag(*m, "If-Range", "");
+ bool validrange = (ifrange.empty() == true ||
+ (RFC1123StrToTime(ifrange.c_str(), cache) == true &&
+ cache <= data.ModificationTime()));
+
+ // FIXME: support multiple byte-ranges (APT clients do not do this)
+ if (condition.find(',') == std::string::npos)
+ {
+ size_t start = 6;
+ unsigned long long filestart = strtoull(condition.c_str() + start, NULL, 10);
+ // FIXME: no support for last-byte-pos being not the end of the file (APT clients do not do this)
+ size_t dash = condition.find('-') + 1;
+ unsigned long long fileend = strtoull(condition.c_str() + dash, NULL, 10);
+ unsigned long long filesize = data.FileSize();
+ if ((fileend == 0 || (fileend == filesize && fileend >= filestart)) &&
+ validrange == true)
+ {
+ if (filesize > filestart)
+ {
+ data.Skip(filestart);
+ // make sure to send content-range before conent-length
+ // as regression test for LP: #1445239
+ std::ostringstream contentrange;
+ contentrange << "Content-Range: bytes " << filestart << "-"
+ << filesize - 1 << "/" << filesize;
+ headers.push_back(contentrange.str());
+ std::ostringstream contentlength;
+ contentlength << "Content-Length: " << (filesize - filestart);
+ headers.push_back(contentlength.str());
+ sendHead(log, client, 206, headers);
+ if (sendContent == true)
+ sendFile(client, headers, data);
+ continue;
+ }
+ else
+ {
+ if (_config->FindB("aptwebserver::support::content-range", true) == true)
+ {
+ std::ostringstream contentrange;
+ contentrange << "Content-Range: bytes */" << filesize;
+ headers.push_back(contentrange.str());
+ }
+ sendError(log, client, 416, *m, sendContent, "", headers);
+ continue;
+ }
+ }
+ }
+ }
+
+ addFileHeaders(headers, data);
+ sendHead(log, client, 200, headers);
+ if (sendContent == true)
+ sendFile(client, headers, data);
+ }
+ else if (DirectoryExists(filename) == true)
+ {
+ if (filename[filename.length()-1] == '/')
+ sendDirectoryListing(log, client, filename, *m, sendContent, headers);
+ else
+ sendRedirect(log, client, 301, filename.append("/"), *m, sendContent);
+ }
+ else
+ sendError(log, client, 404, *m, sendContent, "", headers);
+ }
+
+ // if we announced a closing in the last response, do the close now
+ if (std::find(headers.begin(), headers.end(), std::string("Connection: close")) != headers.end())
+ closeConnection = true;
+
+ if (_error->PendingError() == true)
+ break;
+ _error->DumpErrors(std::cerr);
+ }
+ _error->DumpErrors(std::cerr);
+ close(client);
+ log << "CLOSE client " << client << std::endl;
+ return NULL;
+}
+ /*}}}*/
+static void loadMimeTypesFile(std::string const &filename) /*{{{*/
+{
+ if (FileExists(filename) == false)
+ return;
+
+ std::string line;
+ FileFd mimetypes(filename, FileFd::ReadOnly);
+ while (mimetypes.ReadLine(line))
+ {
+ if (line.empty() || line[0] == '#' || line.find_first_not_of(" \t\r") == std::string::npos)
+ continue;
+ std::transform(line.begin(), line.end(), line.begin(), [](char const c) { return c == ' ' ? '\t' : c; });
+ auto l = VectorizeString(line, '\t');
+ l.erase(std::remove_if(l.begin(), l.end(), [](std::string const &f) { return f.empty(); }), l.end());
+ if (l.size() < 2)
+ continue;
+ for (size_t i = 1; i < l.size(); ++i)
+ if (l[i].empty() == false)
+ _config->CndSet(std::string("aptwebserver::content-type::by-extension::").append(l[i]).c_str(), l[0]);
+ }
+}
+ /*}}}*/
+
+int main(int const argc, const char * argv[])
+{
+ CommandLine::Args Args[] = {
+ {'p', "port", "aptwebserver::port", CommandLine::HasArg},
+ {0, "request-absolute", "aptwebserver::request::absolute", CommandLine::HasArg},
+ {0, "authorization", "aptwebserver::authorization", CommandLine::HasArg},
+ {0, "proxy-authorization", "aptwebserver::proxy-authorization", CommandLine::HasArg},
+ {0, "logfiles", "aptwebserver::logfiles", CommandLine::HasArg},
+ {'c',"config-file",0,CommandLine::ConfigFile},
+ {'o',"option",0,CommandLine::ArbItem},
+ {0,0,0,0}
+ };
+
+ CommandLine CmdL(Args, _config);
+ if(CmdL.Parse(argc,argv) == false)
+ {
+ _error->DumpErrors();
+ exit(1);
+ }
+
+ if (_config->FindB("aptwebserver::content-type::mime.types", true))
+ {
+ if (_config->FindB("aptwebserver::content-type::mime.types::apt", true))
+ loadMimeTypesFile("/etc/apt/mime.types");
+
+ if (_config->FindB("aptwebserver::content-type::mime.types::home", true))
+ {
+ auto const home = getenv("HOME");
+ if (home != nullptr)
+ loadMimeTypesFile(flCombine(home, ".mime.types"));
+ }
+
+ if (_config->FindB("aptwebserver::content-type::mime.types::etc", true))
+ loadMimeTypesFile("/etc/mime.types");
+ }
+
+ // create socket, bind and listen to it {{{
+ // ignore SIGPIPE, this can happen on write() if the socket closes connection
+ signal(SIGPIPE, SIG_IGN);
+ // we don't care for our slaves, so ignore their death
+ signal(SIGCHLD, SIG_IGN);
+
+ int sock = socket(AF_INET6, SOCK_STREAM, 0);
+ if(sock < 0)
+ {
+ _error->Errno("aptwerbserver", "Couldn't create socket");
+ _error->DumpErrors(std::cerr);
+ return 1;
+ }
+
+ int port = _config->FindI("aptwebserver::port", 8080);
+
+ // ensure that we accept all connections: v4 or v6
+ int const iponly = 0;
+ setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &iponly, sizeof(iponly));
+ // to not linger on an address
+ int const enable = 1;
+ setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable));
+
+ struct sockaddr_in6 locAddr;
+ memset(&locAddr, 0, sizeof(locAddr));
+ locAddr.sin6_family = AF_INET6;
+ locAddr.sin6_port = htons(port);
+ locAddr.sin6_addr = in6addr_any;
+
+ if (bind(sock, (struct sockaddr*) &locAddr, sizeof(locAddr)) < 0)
+ {
+ _error->Errno("aptwerbserver", "Couldn't bind");
+ _error->DumpErrors(std::cerr);
+ return 2;
+ }
+
+ if (port == 0)
+ {
+ struct sockaddr_in6 addr;
+ socklen_t addrlen = sizeof(sockaddr_in6);
+ if (getsockname(sock, (struct sockaddr*) &addr, &addrlen) != 0)
+ _error->Errno("getsockname", "Could not get chosen port number");
+ else
+ port = ntohs(addr.sin6_port);
+ }
+ std::string const portfilename = _config->Find("aptwebserver::portfile", "");
+ if (portfilename.empty() == false)
+ {
+ FileFd portfile(portfilename, FileFd::WriteOnly | FileFd::Create | FileFd::Empty);
+ std::string portcontent;
+ strprintf(portcontent, "%d", port);
+ portfile.Write(portcontent.c_str(), portcontent.size());
+ portfile.Sync();
+ }
+ _config->Set("aptwebserver::port::http", port);
+
+ FileFd pidfile;
+ if (_config->FindB("aptwebserver::fork", false) == true)
+ {
+ std::string const pidfilename = _config->Find("aptwebserver::pidfile", "aptwebserver.pid");
+ int const pidfilefd = GetLock(pidfilename);
+ if (pidfilefd < 0 || pidfile.OpenDescriptor(pidfilefd, FileFd::WriteOnly) == false)
+ {
+ _error->Errno("aptwebserver", "Couldn't acquire lock on pidfile '%s'", pidfilename.c_str());
+ _error->DumpErrors(std::cerr);
+ return 3;
+ }
+
+ pid_t child = fork();
+ if (child < 0)
+ {
+ _error->Errno("aptwebserver", "Forking failed");
+ _error->DumpErrors(std::cerr);
+ return 4;
+ }
+ else if (child != 0)
+ {
+ // successfully forked: ready to serve!
+ std::string pidcontent;
+ strprintf(pidcontent, "%d", child);
+ pidfile.Write(pidcontent.c_str(), pidcontent.size());
+ pidfile.Sync();
+ if (_error->PendingError() == true)
+ {
+ _error->DumpErrors(std::cerr);
+ return 5;
+ }
+ std::cout << "Successfully forked as " << child << std::endl;
+ return 0;
+ }
+ }
+
+ std::clog << "Serving ANY file on port: " << port << std::endl;
+
+ int const slaves = _config->FindI("aptwebserver::slaves", SOMAXCONN);
+ std::cerr << "SLAVES: " << slaves << std::endl;
+ listen(sock, slaves);
+ /*}}}*/
+
+ _config->CndSet("aptwebserver::response-header::Server", "APT webserver");
+ _config->CndSet("aptwebserver::response-header::Accept-Ranges", "bytes");
+ _config->CndSet("aptwebserver::directoryindex", "index.html");
+ APT::Configuration::getCompressors();
+
+ size_t id = 0;
+ while (true)
+ {
+ int client = accept(sock, NULL, NULL);
+ if (client == -1)
+ {
+ if (errno == EINTR)
+ continue;
+ _error->Errno("accept", "Couldn't accept client on socket %d", sock);
+ _error->DumpErrors(std::cerr);
+ return 6;
+ }
+
+ std::thread t(handleClient, client, ++id);
+ t.detach();
+ }
+ pidfile.Close();
+
+ return 0;
+}
diff --git a/test/interactive-helper/createdeb-cve-2020-27350.cc b/test/interactive-helper/createdeb-cve-2020-27350.cc
new file mode 100644
index 0000000..8b96194
--- /dev/null
+++ b/test/interactive-helper/createdeb-cve-2020-27350.cc
@@ -0,0 +1,325 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+struct Header
+{
+ char Name[16];
+ char MTime[12];
+ char UID[6];
+ char GID[6];
+ char Mode[8];
+ char Size[10];
+ char Magic[2];
+};
+
+struct TarHeader
+{
+ char Name[100];
+ char Mode[8];
+ char UserID[8];
+ char GroupID[8];
+ char Size[12];
+ char MTime[12];
+ char Checksum[8];
+ char LinkFlag;
+ char LinkName[100];
+ char MagicNumber[8];
+ char UserName[32];
+ char GroupName[32];
+ char Major[8];
+ char Minor[8];
+};
+
+// Call `write` and check the result.
+static void write_chk(int fd, const void *buf, size_t count)
+{
+ const ssize_t wr = write(fd, buf, count);
+ if (wr < 0)
+ {
+ const int err = errno;
+ fprintf(stderr, "Write failed: %s\n", strerror(err));
+ exit(EXIT_FAILURE);
+ }
+ if ((size_t)wr != count)
+ {
+ fprintf(stderr, "Incomplete write.\n");
+ exit(EXIT_FAILURE);
+ }
+}
+
+// Triggers a negative integer overflow at https://git.launchpad.net/ubuntu/+source/apt/tree/apt-pkg/contrib/arfile.cc?h=applied/ubuntu/focal-updates&id=4c264e60b524855b211751e1632ba48526f6b44d#n116:
+//
+// Memb->Size -= Len;
+//
+// Due to the integer overflow, the value of Memb->Size is 0xFFFFFFFFFFFFFFFF.
+// This leads to an out-of-memory error at https://git.launchpad.net/ubuntu/+source/python-apt/tree/python/arfile.cc?h=applied/ubuntu/focal-updates&id=0f7cc93acdb51d943114f1cd79002288c4ca4d24#n602:
+//
+// char* value = new char[member->Size];
+//
+// The out-of-memory error causes aptd to crash.
+static void createdeb_crash(const int fd)
+{
+ // Magic number
+ static const char *magic = "!<arch>\n";
+ write_chk(fd, magic, strlen(magic));
+
+ struct Header h;
+ memset(&h, 0, sizeof(h));
+
+ memcpy(h.Name, "control.tar ", sizeof(h.Name));
+ write_chk(fd, &h, sizeof(h));
+
+ memset(&h, 0, sizeof(h));
+ memcpy(h.Name, "data.tar ", sizeof(h.Name));
+ write_chk(fd, &h, sizeof(h));
+
+ memset(&h, 0, sizeof(h));
+ memcpy(h.Name, "#1/13 ", sizeof(h.Name));
+ strcpy(h.Size, "12");
+ write_chk(fd, &h, sizeof(h));
+ write_chk(fd, "debian-binary", 13);
+}
+
+// Triggers an infinite loop in `ARArchive::LoadHeaders()`.
+// The bug is due to the use of `strtoul` at https://git.launchpad.net/ubuntu/+source/apt/tree/apt-pkg/contrib/strutl.cc?h=applied/ubuntu/focal-updates&id=4c264e60b524855b211751e1632ba48526f6b44d#n1169:
+//
+// Res = strtoul(S,&End,Base);
+//
+// The problem is that `strtoul` accepts negative numbers. We exploit that here by setting the size string to "-60".
+static void createdeb_loop(const int fd)
+{
+ // Magic number
+ static const char *magic = "!<arch>\n";
+ write_chk(fd, magic, strlen(magic));
+
+ struct Header h;
+ memset(&h, 0, sizeof(h));
+
+ memcpy(h.Name, "#1/20 ", sizeof(h.Name));
+ strcpy(h.Size, "-60");
+ write_chk(fd, &h, sizeof(h));
+
+ char buf[20];
+ memset(buf, 0, sizeof(buf));
+ write_chk(fd, buf, sizeof(buf));
+}
+
+// Leaks a file descriptor in `debfile_new()`:
+//
+// https://git.launchpad.net/python-apt/tree/python/arfile.cc?h=2.0.0#n588
+//
+// If the .deb file is invalid then the function returns without deleting
+// `self`, which means that the file descriptor isn't closed.
+static void createdeb_leakfd(const int fd)
+{
+ // Magic number
+ static const char *magic = "!<arch>\n";
+ write_chk(fd, magic, strlen(magic));
+
+ struct Header h;
+ memset(&h, 0, sizeof(h));
+
+ memset(&h, 0, sizeof(h));
+ memcpy(h.Name, "data.tar ", sizeof(h.Name));
+ write_chk(fd, &h, sizeof(h));
+}
+
+static void set_checksum(unsigned char block[512])
+{
+ struct TarHeader *tar = (struct TarHeader *)&block[0];
+ memset(tar->Checksum, ' ', sizeof(tar->Checksum));
+ uint32_t sum = 0;
+ for (int i = 0; i < 512; i++)
+ {
+ sum += block[i];
+ }
+ snprintf(tar->Checksum, sizeof(tar->Checksum), "%o", sum);
+}
+static void base256_encode(char *Str, unsigned long long Num, unsigned int Len)
+{
+ Str += Len;
+ while (Len-- > 0) {
+ *--Str = static_cast<char>(Num & 0xff);
+ Num >>= 8;
+ }
+
+ *Str |= 0x80; // mark as base256
+}
+
+// Create a deb with a control.tar that contains a too large file or link name (GNU extension)
+static void createdeb_bigtarfilelength(const int fd, int flag, unsigned long long size = 64llu * 1024 * 1024 + 1)
+{
+ // Magic number
+ static const char *magic = "!<arch>\n";
+ write_chk(fd, magic, strlen(magic));
+
+ struct Header h;
+ memset(&h, ' ', sizeof(h));
+ memcpy(h.Name, "debian-binary/ ", sizeof(h.Name));
+ h.MTime[0] = '0';
+ h.UID[0] = '0';
+ h.GID[0] = '0';
+ memcpy(h.Mode, "644", 3);
+ h.Size[0] = '0';
+ memcpy(h.Magic, "`\n", 2);
+
+ write_chk(fd, &h, sizeof(h));
+
+ memset(&h, ' ', sizeof(h));
+ memcpy(h.Name, "data.tar/ ", sizeof(h.Name));
+ h.MTime[0] = '0';
+ h.UID[0] = '0';
+ h.GID[0] = '0';
+ memcpy(h.Mode, "644", 3);
+ h.Size[0] = '0';
+ memcpy(h.Magic, "`\n", 2);
+
+ write_chk(fd, &h, sizeof(h));
+
+ memset(&h, ' ', sizeof(h));
+ memcpy(h.Name, "control.tar/ ", sizeof(h.Name));
+ h.MTime[0] = '0';
+ h.UID[0] = '0';
+ h.GID[0] = '0';
+ memcpy(h.Mode, "644", 3);
+ memcpy(h.Size, "512", 3);
+ memcpy(h.Magic, "`\n", 2);
+
+ write_chk(fd, &h, sizeof(h));
+ union
+ {
+ struct TarHeader t;
+ unsigned char buf[512];
+ } t;
+ for (unsigned int i = 0; i < sizeof(t.buf); i++)
+ t.buf[i] = '7';
+ memcpy(t.t.Name, "control\0 ", 16);
+ memcpy(t.t.UserName, "userName", 8);
+ memcpy(t.t.GroupName, "thisIsAGroupNamethisIsAGroupName", 32);
+ t.t.LinkFlag = flag;
+ base256_encode(t.t.Size, size, sizeof(t.t.Size));
+ memset(t.t.Checksum, ' ', sizeof(t.t.Checksum));
+
+ unsigned long sum = 0;
+ for (unsigned int i = 0; i < sizeof(t.buf); i++)
+ sum += t.buf[i];
+
+ int written = sprintf(t.t.Checksum, "%lo", sum);
+ for (unsigned int i = written; i < sizeof(t.t.Checksum); i++)
+ t.t.Checksum[i] = ' ';
+
+ write_chk(fd, t.buf, sizeof(t.buf));
+}
+
+static void createdeb_test(const int fd)
+{
+ // Magic number
+ static const char *magic = "!<arch>\n";
+ write_chk(fd, magic, strlen(magic));
+
+ struct Header h;
+
+ memset(&h, 0, sizeof(h));
+ memcpy(h.Name, "data.tar ", sizeof(h.Name));
+ write_chk(fd, &h, sizeof(h));
+
+ memset(&h, 0, sizeof(h));
+ memcpy(h.Name, "debian-binary ", sizeof(h.Name));
+ strcpy(h.Size, "4");
+ write_chk(fd, &h, sizeof(h));
+ static const char *debian_binary = "2.0\n";
+ write_chk(fd, debian_binary, strlen(debian_binary));
+
+ static const char *control =
+ "Architecture: all\n"
+ "Package: kevsh\n\n";
+ memset(&h, 0, sizeof(h));
+ memcpy(h.Name, "control.tar ", sizeof(h.Name));
+ snprintf(h.Size, sizeof(h.Size), "%ld", (size_t)512 + 512);
+ write_chk(fd, &h, sizeof(h));
+
+ unsigned char block[512];
+ memset(block, 0, sizeof(block));
+ struct TarHeader *tar = (struct TarHeader *)&block[0];
+ strcpy(tar->Name, "control");
+ strcpy(tar->Mode, "644");
+ snprintf(tar->Size, sizeof(tar->Size), "%lo", strlen(control));
+ set_checksum(block);
+ write_chk(fd, block, sizeof(block));
+
+ memset(block, 0, sizeof(block));
+ strcpy((char *)block, control);
+ write_chk(fd, block, sizeof(block));
+}
+
+int main(int argc, char *argv[])
+{
+ if (argc != 3)
+ {
+ const char *progname = argc > 0 ? argv[0] : "a.out";
+ fprintf(
+ stderr,
+ "usage: %s <mode> <filename>\n"
+ "modes: loop, segv, leakfd\n",
+ progname);
+ return EXIT_FAILURE;
+ }
+
+ const char *mode = argv[1];
+ const char *filename = argv[2];
+
+ const int fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 00644);
+ if (fd < 0)
+ {
+ const int err = errno;
+ fprintf(stderr, "Could not open %s: %s\n", filename, strerror(err));
+ return EXIT_FAILURE;
+ }
+
+ if (strcmp(mode, "crash") == 0)
+ {
+ createdeb_crash(fd);
+ }
+ else if (strcmp(mode, "loop") == 0)
+ {
+ createdeb_loop(fd);
+ }
+ else if (strcmp(mode, "leakfd") == 0)
+ {
+ createdeb_leakfd(fd);
+ }
+ else if (strcmp(mode, "long-name") == 0)
+ {
+ createdeb_bigtarfilelength(fd, 'L');
+ }
+ else if (strcmp(mode, "long-link") == 0)
+ {
+ createdeb_bigtarfilelength(fd, 'K');
+ }
+ else if (strcmp(mode, "long-control") == 0)
+ {
+ createdeb_bigtarfilelength(fd, '0');
+ }
+ else if (strcmp(mode, "too-long-control") == 0)
+ {
+ createdeb_bigtarfilelength(fd, '0', 128llu * 1024 * 1024 * 1024 + 1);
+ }
+ else if (strcmp(mode, "test") == 0)
+ {
+ createdeb_test(fd);
+ }
+ else
+ {
+ fprintf(stderr, "Mode not recognized: %s\n", mode);
+ }
+
+ close(fd);
+ return EXIT_SUCCESS;
+}
diff --git a/test/interactive-helper/extract-control.cc b/test/interactive-helper/extract-control.cc
new file mode 100644
index 0000000..a19e038
--- /dev/null
+++ b/test/interactive-helper/extract-control.cc
@@ -0,0 +1,45 @@
+#include <config.h>
+
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <iostream>
+#include <string>
+#include <unistd.h>
+
+using namespace std;
+
+static bool ExtractMember(const char *File,const char *Member)
+{
+ FileFd Fd(File,FileFd::ReadOnly);
+ debDebFile Deb(Fd);
+ if(_error->PendingError() == true)
+ return false;
+
+ debDebFile::MemControlExtract Extract(Member);
+ if (Extract.Read(Deb) == false)
+ return false;
+
+ if (Extract.Control == 0)
+ return true;
+
+ return write(STDOUT_FILENO,Extract.Control,Extract.Length) != -1;
+}
+
+int main(int argc, const char *argv[])
+{
+ if (argc < 2)
+ {
+ cerr << "Need two arguments, a .deb and the control member" << endl;
+ return 100;
+ }
+
+ if (ExtractMember(argv[1],argv[2]) == false)
+ {
+ _error->DumpErrors();
+ return 100;
+ }
+
+ return 0;
+}
diff --git a/test/interactive-helper/libnoprofile.c b/test/interactive-helper/libnoprofile.c
new file mode 100644
index 0000000..f11b898
--- /dev/null
+++ b/test/interactive-helper/libnoprofile.c
@@ -0,0 +1,44 @@
+#define _GNU_SOURCE
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdio.h>
+
+int vprintf(const char *format, va_list ap) {
+ if (strncmp(format, "profiling:", strlen("profiling:")) == 0)
+ return 0;
+
+ static int (*func_fprintf)(const char *format, va_list ap) = NULL;
+ if (func_fprintf == NULL)
+ func_fprintf = (int (*)(const char *format, va_list ap))dlsym(RTLD_NEXT, "vprintf");
+
+ return func_fprintf(format, ap);
+}
+int printf(const char *format, ...) {
+ va_list ap;
+ va_start(ap, format);
+ int res = vprintf(format, ap);
+ va_end(ap);
+ return res;
+}
+
+int vfprintf(FILE *stream, const char *format, va_list ap) {
+ if (strncmp(format, "profiling:", strlen("profiling:")) == 0)
+ return 0;
+
+ static int (*func_vfprintf)(FILE * stream, const char *format, va_list ap) = NULL;
+ if (func_vfprintf == NULL)
+ func_vfprintf = (int (*)(FILE * stream, const char *format, va_list ap))dlsym(RTLD_NEXT, "vfprintf");
+
+ return func_vfprintf(stream, format, ap);
+}
+
+int fprintf(FILE *stream, const char *format, ...) {
+ va_list ap;
+ va_start(ap, format);
+ int res = vfprintf(stream, format, ap);
+ va_end(ap);
+ return res;
+}
diff --git a/test/interactive-helper/mthdcat.cc b/test/interactive-helper/mthdcat.cc
new file mode 100644
index 0000000..2961b20
--- /dev/null
+++ b/test/interactive-helper/mthdcat.cc
@@ -0,0 +1,22 @@
+/* Usage, mthdcat < cmds | methods/mthd
+ All this does is cat a file into the method without closing the FD when
+ the file ends */
+
+#include <config.h>
+
+#include <unistd.h>
+
+int main()
+{
+ char Buffer[4096];
+
+ while (1)
+ {
+ int Res = read(STDIN_FILENO,Buffer,sizeof(Buffer));
+ if (Res <= 0)
+ while (1) sleep(100);
+ if (write(STDOUT_FILENO,Buffer,Res) != Res)
+ break;
+ }
+ return 0;
+}
diff --git a/test/interactive-helper/networkless-install-fixes/README b/test/interactive-helper/networkless-install-fixes/README
new file mode 100644
index 0000000..e7ee2b0
--- /dev/null
+++ b/test/interactive-helper/networkless-install-fixes/README
@@ -0,0 +1,5 @@
+
+Those tests aim at making the networkless install timeout
+quicker, see
+https://wiki.ubuntu.com/NetworklessInstallationFixes
+for details
diff --git a/test/interactive-helper/networkless-install-fixes/sources.test.list b/test/interactive-helper/networkless-install-fixes/sources.test.list
new file mode 100644
index 0000000..380e180
--- /dev/null
+++ b/test/interactive-helper/networkless-install-fixes/sources.test.list
@@ -0,0 +1,25 @@
+
+# archive.ubuntu.com
+deb http://archive.ubuntu.com/ubuntu/ hardy main restricted
+deb-src http://archive.ubuntu.com/ubuntu/ hardy main restricted
+
+deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted
+deb-src http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted
+
+deb http://archive.ubuntu.com/ubuntu/ hardy universe
+deb-src http://archive.ubuntu.com/ubuntu/ hardy universe
+
+deb http://archive.ubuntu.com/ubuntu/ hardy-updates universe
+deb-src http://archive.ubuntu.com/ubuntu/ hardy-updates universe
+
+# security.ubuntu.com
+deb http://security.ubuntu.com/ubuntu/ hardy-security main restricted
+deb-src http://security.ubuntu.com/ubuntu/ hardy-security main restricted
+
+deb http://security.ubuntu.com/ubuntu/ hardy-security universe
+deb-src http://security.ubuntu.com/ubuntu/ hardy-security universe
+
+
+# archive.canonical.com
+deb http://archive.canonical.com/ubuntu/ hardy-partner universe
+deb-src http://archive.canonical.com/ubuntu/ hardy-partner universe
diff --git a/test/interactive-helper/networkless-install-fixes/test.sh b/test/interactive-helper/networkless-install-fixes/test.sh
new file mode 100755
index 0000000..809d467
--- /dev/null
+++ b/test/interactive-helper/networkless-install-fixes/test.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+OPTS="-o Dir::Etc::sourcelist=./sources.test.list -o Acquire::http::timeout=20"
+
+# setup
+unset http_proxy
+iptables --flush
+
+echo "No network at all"
+ifdown eth0
+time apt-get update $OPTS 2>&1 |grep system
+ifup eth0
+echo ""
+
+echo "no working DNS (port 53 DROP)"
+iptables -A OUTPUT -p udp --dport 53 -j DROP
+time apt-get update $OPTS 2>&1 |grep system
+iptables --flush
+echo ""
+
+echo "DNS but no access to archive.ubuntu.com (port 80 DROP)"
+iptables -A OUTPUT -p tcp --dport 80 -j DROP
+time apt-get update $OPTS 2>&1 |grep system
+iptables --flush
+echo ""
diff --git a/test/interactive-helper/rpmver.cc b/test/interactive-helper/rpmver.cc
new file mode 100644
index 0000000..b23ba28
--- /dev/null
+++ b/test/interactive-helper/rpmver.cc
@@ -0,0 +1,118 @@
+#include <config.h>
+
+#include <apt-pkg/debversion.h>
+#include <ctype.h>
+#include <rpm/misc.h>
+#include <rpm/rpmio.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define xisdigit(x) isdigit(x)
+#define xisalpha(x) isalpha(x)
+#define xisalnum(x) (isdigit(x) || isalpha(x))
+
+using namespace std;
+
+int rpmvercmp(const char * a, const char * b)
+{
+ char * str1, * str2;
+ char * one, * two;
+ int isnum;
+
+ /* easy comparison to see if versions are identical */
+ if (!strcmp(a, b)) return 0;
+
+ str1 = (char *)alloca(strlen(a) + 1);
+ str2 = (char *)alloca(strlen(b) + 1);
+
+ strcpy(str1, a);
+ strcpy(str2, b);
+
+ one = str1;
+ two = str2;
+
+ /* loop through each version segment of str1 and str2 and compare them */
+ while (*one && *two) {
+ while (*one && !xisalnum(*one)) one++;
+ while (*two && !xisalnum(*two)) two++;
+
+ str1 = one;
+ str2 = two;
+
+ /* grab first completely alpha or completely numeric segment */
+ /* leave one and two pointing to the start of the alpha or numeric */
+ /* segment and walk str1 and str2 to end of segment */
+ if (xisdigit(*str1)) {
+ while (*str1 && xisdigit(*str1)) str1++;
+ while (*str2 && xisdigit(*str2)) str2++;
+ isnum = 1;
+ } else {
+ while (*str1 && xisalpha(*str1)) str1++;
+ while (*str2 && xisalpha(*str2)) str2++;
+ isnum = 0;
+ }
+
+ /* save character at the end of the alpha or numeric segment */
+ /* so that they can be restored after the comparison */
+ char oldch1 = *str1;
+ *str1 = '\0';
+ char oldch2 = *str2;
+ *str2 = '\0';
+
+ /* take care of the case where the two version segments are */
+ /* different types: one numeric, the other alpha (i.e. empty) */
+ if (one == str1) return -1; /* arbitrary */
+ if (two == str2) return 1;
+
+ if (isnum) {
+ /* this used to be done by converting the digit segments */
+ /* to ints using atoi() - it's changed because long */
+ /* digit segments can overflow an int - this should fix that. */
+
+ /* throw away any leading zeros - it's a number, right? */
+ while (*one == '0') one++;
+ while (*two == '0') two++;
+
+ /* whichever number has more digits wins */
+ if (strlen(one) > strlen(two)) return 1;
+ if (strlen(two) > strlen(one)) return -1;
+ }
+
+ /* strcmp will return which one is greater - even if the two */
+ /* segments are alpha or if they are numeric. don't return */
+ /* if they are equal because there might be more segments to */
+ /* compare */
+ int rc = strcmp(one, two);
+ if (rc) return rc;
+
+ /* restore character that was replaced by null above */
+ *str1 = oldch1;
+ one = str1;
+ *str2 = oldch2;
+ two = str2;
+ }
+
+ /* this catches the case where all numeric and alpha segments have */
+ /* compared identically but the segment sepparating characters were */
+ /* different */
+ if ((!*one) && (!*two)) return 0;
+
+ /* whichever version still has characters left over wins */
+ if (!*one) return -1; else return 1;
+}
+
+int main(int argc,const char *argv[])
+{
+ printf("%i\n",strcmp(argv[1],argv[2]));
+
+ printf("'%s' <> '%s': ",argv[1],argv[2]);
+ printf("rpm: %i deb: %i\n",rpmvercmp(argv[1],argv[2]),
+ debVS.CmpFragment(argv[1],argv[1]+strlen(argv[1]),
+ argv[2],argv[2]+strlen(argv[2])));
+
+ printf("'%s' <> '%s': ",argv[2],argv[1]);
+ printf("rpm: %i deb: %i\n",rpmvercmp(argv[2],argv[1]),
+ debVS.CmpFragment(argv[2],argv[2]+strlen(argv[2]),
+ argv[1],argv[1]+strlen(argv[1])));
+ return 0;
+}
diff --git a/test/interactive-helper/teestream.h b/test/interactive-helper/teestream.h
new file mode 100644
index 0000000..058717a
--- /dev/null
+++ b/test/interactive-helper/teestream.h
@@ -0,0 +1,62 @@
+#ifndef APT_HELPER_TEESTREAM_H
+#define APT_HELPER_TEESTREAM_H
+
+/* 'basic' implementation of a streambuf which passes the output
+ to two 'real' streambufs emulating '| tee' on the shell
+
+ The main use is streaming debug output to std::clog as well as
+ a logfile easily, so don't expect that to be a bulletproof
+ implementation. */
+
+#include <apt-pkg/macros.h>
+#include <iostream>
+
+template <typename CharT, typename Traits = std::char_traits<CharT>
+> class basic_teebuf: public std::basic_streambuf<CharT, Traits>
+{
+public:
+ basic_teebuf(std::basic_streambuf<CharT, Traits> * const sb1,
+ std::basic_streambuf<CharT, Traits> * const sb2)
+ : s1(sb1), s2(sb2) {}
+protected:
+ virtual std::streamsize xsputn(const CharT* s, std::streamsize c) APT_OVERRIDE
+ {
+ return s2->sputn(s, s1->sputn(s, c));
+ }
+ // overflow is the fallback of sputc which is non-virtual
+ typedef typename Traits::int_type int_type;
+ virtual int_type overflow(int_type ch = Traits::eof()) APT_OVERRIDE
+ {
+ auto const eof = Traits::eof();
+ if (Traits::eq_int_type(ch, Traits::eof()) == true)
+ return eof;
+
+ auto const r1 = s1->sputc(Traits::to_char_type(ch));
+ auto const r2 = s2->sputc(Traits::to_char_type(ch));
+ return Traits::eq_int_type(r1, eof) ? r1: r2;
+ }
+ virtual void imbue(const std::locale& loc) APT_OVERRIDE
+ {
+ s1->pubimbue(loc);
+ s2->pubimbue(loc);
+ }
+ virtual int sync() APT_OVERRIDE
+ {
+ auto const r1 = s1->pubsync();
+ auto const r2 = s2->pubsync();
+ return r1 == 0 ? r2 : r1;
+ }
+private:
+ std::basic_streambuf<CharT, Traits> * const s1;
+ std::basic_streambuf<CharT, Traits> * const s2;
+};
+template <typename CharT, typename Traits = std::char_traits<CharT>
+> class basic_teeostream: public std::basic_ostream<CharT, Traits>
+{
+public:
+ basic_teeostream(std::basic_ostream<CharT, Traits> &o1, std::basic_ostream<CharT, Traits> &o2) :
+ std::basic_ostream<CharT, Traits>(&tbuf), tbuf(o1.rdbuf(), o2.rdbuf()) {}
+private:
+ basic_teebuf<CharT, Traits> tbuf;
+};
+#endif
diff --git a/test/interactive-helper/test_fileutl.cc b/test/interactive-helper/test_fileutl.cc
new file mode 100644
index 0000000..6c29b74
--- /dev/null
+++ b/test/interactive-helper/test_fileutl.cc
@@ -0,0 +1,44 @@
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <iostream>
+#include <string>
+
+static void callsystem(std::string const &call)
+{
+ auto ret = system(call.c_str());
+ if (WIFEXITED(ret) == false || WEXITSTATUS(ret) != 0)
+ _error->Error("Calling %s failed!", call.c_str());
+}
+
+int main(int, char ** argv)
+{
+ auto const pid = getpid();
+ std::string ls;
+ strprintf(ls, "ls -l /proc/%d/fd", pid);
+ callsystem(ls);
+ FileFd t;
+ t.Open(argv[1], FileFd::ReadOnly, FileFd::Extension);
+ callsystem(ls);
+ char buf[1024];
+ unsigned long long act;
+ while (t.Read(buf, sizeof(buf), &act))
+ if (act == 0)
+ break;
+ callsystem(ls);
+ t.Seek(5);
+ callsystem(ls);
+ t.Close();
+ callsystem(ls);
+ auto const ret = _error->PendingError();
+ _error->DumpErrors();
+ return ret;
+}
diff --git a/test/interactive-helper/test_udevcdrom.cc b/test/interactive-helper/test_udevcdrom.cc
new file mode 100644
index 0000000..2355186
--- /dev/null
+++ b/test/interactive-helper/test_udevcdrom.cc
@@ -0,0 +1,23 @@
+#include <config.h>
+
+#include <apt-pkg/cdrom.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <assert.h>
+#include <stddef.h>
+
+int main()
+{
+ pkgUdevCdromDevices c;
+ assert(c.Dlopen());
+
+ std::vector<CdromDevice> l;
+ l = c.Scan();
+ assert(l.empty() == false);
+ for (size_t i = 0; i < l.size(); ++i)
+ std::cerr << l[i].DeviceName << " "
+ << l[i].Mounted << " "
+ << l[i].MountPath << std::endl;
+}
diff --git a/test/interactive-helper/testdeb.cc b/test/interactive-helper/testdeb.cc
new file mode 100644
index 0000000..0bb24a5
--- /dev/null
+++ b/test/interactive-helper/testdeb.cc
@@ -0,0 +1,51 @@
+#include <config.h>
+
+#include <apt-pkg/arfile.h>
+#include <apt-pkg/debfile.h>
+#include <apt-pkg/dirstream.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/extracttar.h>
+#include <apt-pkg/fileutl.h>
+
+#include <iostream>
+#include <string>
+
+class NullStream : public pkgDirStream
+{
+ public:
+ virtual bool DoItem(Item &/*Itm*/, int &/*Fd*/) APT_OVERRIDE {return true;};
+};
+
+static bool Test(const char *File)
+{
+ FileFd Fd(File,FileFd::ReadOnly);
+ debDebFile Deb(Fd);
+
+ if (_error->PendingError() == true)
+ return false;
+
+ // Get the archive member and positition the file
+ const ARArchive::Member *Member = Deb.GotoMember("data.tar.gz");
+ if (Member == 0)
+ return false;
+
+ // Extract it.
+ ExtractTar Tar(Deb.GetFile(),Member->Size, "gzip");
+ NullStream Dir;
+ if (Tar.Go(Dir) == false)
+ return false;
+
+ return true;
+}
+
+int main(int argc, const char *argv[])
+{
+ if (argc != 2) {
+ std::cout << "One parameter expected - given " << argc << std::endl;
+ return 100;
+ }
+
+ Test(argv[1]);
+ _error->DumpErrors();
+ return 0;
+}
diff --git a/test/libapt/CMakeLists.txt b/test/libapt/CMakeLists.txt
new file mode 100644
index 0000000..035ff07
--- /dev/null
+++ b/test/libapt/CMakeLists.txt
@@ -0,0 +1,44 @@
+set(PROJECT_TEST_LIBRARIES apt-private apt-inst)
+find_path(GTEST_ROOT src/gtest.cc
+ /usr/src/googletest/googletest
+ /usr/src/gtest
+)
+find_package(GTest)
+set(GTEST_DEPENDENCIES)
+
+if(NOT GTEST_FOUND AND EXISTS ${GTEST_ROOT})
+ include(ExternalProject)
+ ExternalProject_Add(gtest PREFIX ./gtest
+ SOURCE_DIR ${GTEST_ROOT}
+ INSTALL_COMMAND true)
+
+ link_directories(${CMAKE_CURRENT_BINARY_DIR}/gtest/src/gtest-build)
+
+ set(GTEST_LIBRARIES "-lgtest")
+ set(GTEST_DEPENDENCIES "gtest")
+ set(GTEST_FOUND TRUE)
+ find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS ${GTEST_ROOT}/include)
+
+ message(STATUS "Found GTest at ${GTEST_ROOT}, headers at ${GTEST_INCLUDE_DIRS}")
+endif()
+
+if(GTEST_FOUND)
+ # gtest produces some warnings with the set of warnings we activate,
+ # so disable the offending warnings while compiling tests for now
+ add_optional_compile_options(Wno-undef)
+ add_optional_compile_options(Wno-ctor-dtor-privacy)
+
+ # Definition of the C++ files used to build the test binary - note that this
+ # is expanded at CMake time, so you have to rerun cmake if you add or remove
+ # a file (you can just run cmake . in the build directory)
+ file(GLOB files gtest_runner.cc *-helpers.cc *_test.cc)
+ add_executable(lib${PROJECT_NAME}_test ${files})
+ target_include_directories(lib${PROJECT_NAME}_test PRIVATE ${GTEST_INCLUDE_DIRS})
+ target_link_libraries(lib${PROJECT_NAME}_test ${GTEST_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${PROJECT_TEST_LIBRARIES})
+ if (GTEST_DEPENDENCIES)
+ add_dependencies(lib${PROJECT_NAME}_test ${GTEST_DEPENDENCIES})
+ endif()
+ add_test(NAME ${PROJECT_NAME}Tests
+ COMMAND lib${PROJECT_NAME}_test
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+endif()
diff --git a/test/libapt/acqprogress_test.cc b/test/libapt/acqprogress_test.cc
new file mode 100644
index 0000000..d4596c8
--- /dev/null
+++ b/test/libapt/acqprogress_test.cc
@@ -0,0 +1,178 @@
+#include <config.h>
+#include <apt-pkg/acquire-item.h>
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/hashes.h>
+#include <apt-private/acqprogress.h>
+#include <gtest/gtest.h>
+#include <sstream>
+#include <string>
+
+class TestItem: public pkgAcquire::Item
+{
+public:
+ explicit TestItem(pkgAcquire * const Acq) : pkgAcquire::Item(Acq) {}
+
+ virtual std::string DescURI() const APT_OVERRIDE { return ""; }
+ virtual HashStringList GetExpectedHashes() const APT_OVERRIDE { return HashStringList(); }
+
+};
+
+TEST(AcqProgress, IMSHit)
+{
+ std::ostringstream out;
+ unsigned int width = 80;
+ AcqTextStatus Stat(out, width, 0);
+ Stat.Start();
+
+ pkgAcquire Acq(&Stat);
+ pkgAcquire::ItemDesc hit;
+ hit.URI = "http://example.org/file";
+ hit.Description = "Example File from example.org";
+ hit.ShortDesc = "Example File";
+ TestItem hitO(&Acq);
+ hit.Owner = &hitO;
+
+ EXPECT_EQ("", out.str());
+ Stat.IMSHit(hit);
+ EXPECT_EQ("Hit:1 Example File from example.org\n", out.str());
+ Stat.IMSHit(hit);
+ EXPECT_EQ("Hit:1 Example File from example.org\n"
+ "Hit:1 Example File from example.org\n", out.str());
+ Stat.Stop();
+ EXPECT_EQ("Hit:1 Example File from example.org\n"
+ "Hit:1 Example File from example.org\n", out.str());
+}
+TEST(AcqProgress, FetchNoFileSize)
+{
+ std::ostringstream out;
+ unsigned int width = 80;
+ AcqTextStatus Stat(out, width, 0);
+ Stat.Start();
+
+ pkgAcquire Acq(&Stat);
+ pkgAcquire::ItemDesc fetch;
+ fetch.URI = "http://example.org/file";
+ fetch.Description = "Example File from example.org";
+ fetch.ShortDesc = "Example File";
+ TestItem fetchO(&Acq);
+ fetch.Owner = &fetchO;
+
+ EXPECT_EQ("", out.str());
+ Stat.Fetch(fetch);
+ EXPECT_EQ("Get:1 Example File from example.org\n", out.str());
+ Stat.Fetch(fetch);
+ EXPECT_EQ("Get:1 Example File from example.org\n"
+ "Get:1 Example File from example.org\n", out.str());
+ Stat.Stop();
+ EXPECT_EQ("Get:1 Example File from example.org\n"
+ "Get:1 Example File from example.org\n", out.str());
+}
+TEST(AcqProgress, FetchFileSize)
+{
+ std::ostringstream out;
+ unsigned int width = 80;
+ AcqTextStatus Stat(out, width, 0);
+ Stat.Start();
+
+ pkgAcquire Acq(&Stat);
+ pkgAcquire::ItemDesc fetch;
+ fetch.URI = "http://example.org/file";
+ fetch.Description = "Example File from example.org";
+ fetch.ShortDesc = "Example File";
+ TestItem fetchO(&Acq);
+ fetchO.FileSize = 100;
+ fetch.Owner = &fetchO;
+
+ EXPECT_EQ("", out.str());
+ Stat.Fetch(fetch);
+ EXPECT_EQ("Get:1 Example File from example.org [100 B]\n", out.str());
+ fetchO.FileSize = 42;
+ Stat.Fetch(fetch);
+ EXPECT_EQ("Get:1 Example File from example.org [100 B]\n"
+ "Get:1 Example File from example.org [42 B]\n", out.str());
+ Stat.Stop();
+ EXPECT_EQ("Get:1 Example File from example.org [100 B]\n"
+ "Get:1 Example File from example.org [42 B]\n", out.str());
+}
+TEST(AcqProgress, Fail)
+{
+ std::ostringstream out;
+ unsigned int width = 80;
+ AcqTextStatus Stat(out, width, 0);
+ Stat.Start();
+
+ pkgAcquire Acq(&Stat);
+ pkgAcquire::ItemDesc fetch;
+ fetch.URI = "http://example.org/file";
+ fetch.Description = "Example File from example.org";
+ fetch.ShortDesc = "Example File";
+ TestItem fetchO(&Acq);
+ fetchO.FileSize = 100;
+ fetchO.Status = pkgAcquire::Item::StatIdle;
+ fetch.Owner = &fetchO;
+
+ EXPECT_EQ("", out.str());
+ Stat.Fail(fetch);
+ EXPECT_EQ("Ign:1 Example File from example.org\n", out.str());
+ fetchO.Status = pkgAcquire::Item::StatDone;
+ Stat.Fail(fetch);
+ EXPECT_EQ("Ign:1 Example File from example.org\n"
+ "Ign:1 Example File from example.org\n", out.str());
+ fetchO.Status = pkgAcquire::Item::StatError;
+ fetchO.ErrorText = "An error test!";
+ Stat.Fail(fetch);
+ EXPECT_EQ("Ign:1 Example File from example.org\n"
+ "Ign:1 Example File from example.org\n"
+ "Err:1 Example File from example.org\n"
+ " An error test!\n", out.str());
+ _config->Set("Acquire::Progress::Ignore::ShowErrorText", true);
+ fetchO.Status = pkgAcquire::Item::StatDone;
+ Stat.Fail(fetch);
+ EXPECT_EQ("Ign:1 Example File from example.org\n"
+ "Ign:1 Example File from example.org\n"
+ "Err:1 Example File from example.org\n"
+ " An error test!\n"
+ "Ign:1 Example File from example.org\n"
+ " An error test!\n", out.str());
+ _config->Set("Acquire::Progress::Ignore::ShowErrorText", true);
+ Stat.Stop();
+ EXPECT_EQ("Ign:1 Example File from example.org\n"
+ "Ign:1 Example File from example.org\n"
+ "Err:1 Example File from example.org\n"
+ " An error test!\n"
+ "Ign:1 Example File from example.org\n"
+ " An error test!\n", out.str());
+}
+TEST(AcqProgress, Pulse)
+{
+ std::ostringstream out;
+ unsigned int width = 80;
+ AcqTextStatus Stat(out, width, 0);
+ _config->Set("APT::Sandbox::User", ""); // ensure we aren't sandboxing
+
+ pkgAcquire Acq(&Stat);
+ pkgAcquire::ItemDesc fetch;
+ fetch.URI = "http://example.org/file";
+ fetch.Description = "Example File from example.org";
+ fetch.ShortDesc = "Example File";
+ TestItem fetchO(&Acq);
+ fetchO.FileSize = 100;
+ fetchO.Status = pkgAcquire::Item::StatFetching;
+ fetch.Owner = &fetchO;
+
+ // make screen smaller and bigger again while running
+ EXPECT_TRUE(Stat.Pulse(&Acq));
+ EXPECT_EQ("\r0% [Working]", out.str());
+ width = 8;
+ EXPECT_TRUE(Stat.Pulse(&Acq));
+ EXPECT_EQ("\r0% [Working]"
+ "\r "
+ "\r0% [Work", out.str());
+ width = 80;
+ EXPECT_TRUE(Stat.Pulse(&Acq));
+ EXPECT_EQ("\r0% [Working]"
+ "\r "
+ "\r0% [Work"
+ "\r0% [Working]", out.str());
+}
diff --git a/test/libapt/apt-proxy-script b/test/libapt/apt-proxy-script
new file mode 100755
index 0000000..41cfdc3
--- /dev/null
+++ b/test/libapt/apt-proxy-script
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if [ $1 = "http://www.debian.org:90/temp/test" ]; then
+ echo "http://example.com"
+fi
+if [ $1 = "http://www.debian.org:91/temp/test" ]; then
+ echo "This works" >&2
+ echo "http://example.com/foo"
+fi
diff --git a/test/libapt/authconf_test.cc b/test/libapt/authconf_test.cc
new file mode 100644
index 0000000..a7b2f2c
--- /dev/null
+++ b/test/libapt/authconf_test.cc
@@ -0,0 +1,223 @@
+#include <config.h>
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/netrc.h>
+#include <apt-pkg/strutl.h>
+
+#include <string>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+TEST(NetRCTest, Parsing)
+{
+ FileFd fd;
+ URI U("http://file.not/open");
+ EXPECT_FALSE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+ EXPECT_EQ("file.not", U.Host);
+ EXPECT_EQ("/open", U.Path);
+
+ createTemporaryFile("doublesignedfile", fd, nullptr, R"apt(
+machine example.netter login bar password foo
+machine example.net login foo password bar
+
+machine example.org:90 login apt password apt
+machine example.org:8080
+login
+example password foobar
+
+machine example.org
+login anonymous
+password pass
+
+machine example.com/foo login user1 unknown token password pass1
+machine example.com/bar password pass2 login user2
+ unknown token
+machine example.com/user login user
+machine example.netter login unused password firstentry
+machine example.last/debian login debian password rules)apt");
+ U = URI("http://example.net/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo", U.User);
+ EXPECT_EQ("bar", U.Password);
+ EXPECT_EQ("example.net", U.Host);
+ EXPECT_EQ("/foo", U.Path);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://user:pass@example.net/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("user", U.User);
+ EXPECT_EQ("pass", U.Password);
+ EXPECT_EQ("example.net", U.Host);
+ EXPECT_EQ("/foo", U.Path);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.org:90/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("apt", U.User);
+ EXPECT_EQ("apt", U.Password);
+ EXPECT_EQ("example.org", U.Host);
+ EXPECT_EQ(90u, U.Port);
+ EXPECT_EQ("/foo", U.Path);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.org:8080/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("example", U.User);
+ EXPECT_EQ("foobar", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.net:42/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo", U.User);
+ EXPECT_EQ("bar", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.org/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("anonymous", U.User);
+ EXPECT_EQ("pass", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.com/apt");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.com/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("user1", U.User);
+ EXPECT_EQ("pass1", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.com/fooo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("user1", U.User);
+ EXPECT_EQ("pass1", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.com/fo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.com/bar");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("user2", U.User);
+ EXPECT_EQ("pass2", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.com/user");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("user", U.User);
+ EXPECT_TRUE(U.Password.empty());
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("socks5h://example.last/debian");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("debian", U.User);
+ EXPECT_EQ("rules", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("socks5h://example.debian/");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("socks5h://user:pass@example.debian/");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("user", U.User);
+ EXPECT_EQ("pass", U.Password);
+}
+TEST(NetRCTest, BadFileNoMachine)
+{
+ FileFd fd;
+ createTemporaryFile("doublesignedfile", fd, nullptr, R"apt(
+foo example.org login foo1 password bar
+machin example.org login foo2 password bar
+machine2 example.org login foo3 password bar
+)apt");
+
+ URI U("http://example.org/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+}
+TEST(NetRCTest, BadFileEndsMachine)
+{
+ FileFd fd;
+ createTemporaryFile("doublesignedfile", fd, nullptr, R"apt(
+machine example.org login foo1 password bar
+machine)apt");
+
+ URI U("http://example.org/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo1", U.User);
+ EXPECT_EQ("bar", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.net/foo");
+ EXPECT_FALSE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://foo:bar@example.net/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo", U.User);
+ EXPECT_EQ("bar", U.Password);
+}
+TEST(NetRCTest, BadFileEndsLogin)
+{
+ FileFd fd;
+ createTemporaryFile("doublesignedfile", fd, nullptr, R"apt(
+machine example.org login foo1 password bar
+machine example.net login)apt");
+
+ URI U("http://example.org/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo1", U.User);
+ EXPECT_EQ("bar", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.net/foo");
+ EXPECT_FALSE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://foo:bar@example.net/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo", U.User);
+ EXPECT_EQ("bar", U.Password);
+}
+TEST(NetRCTest, BadFileEndsPassword)
+{
+ FileFd fd;
+ createTemporaryFile("doublesignedfile", fd, nullptr, R"apt(
+machine example.org login foo1 password bar
+machine example.net password)apt");
+
+ URI U("http://example.org/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo1", U.User);
+ EXPECT_EQ("bar", U.Password);
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://example.net/foo");
+ EXPECT_FALSE(MaybeAddAuth(fd, U));
+ EXPECT_TRUE(U.User.empty());
+ EXPECT_TRUE(U.Password.empty());
+
+ EXPECT_TRUE(fd.Seek(0));
+ U = URI("http://foo:bar@example.net/foo");
+ EXPECT_TRUE(MaybeAddAuth(fd, U));
+ EXPECT_EQ("foo", U.User);
+ EXPECT_EQ("bar", U.Password);
+}
diff --git a/test/libapt/cachefilter_test.cc b/test/libapt/cachefilter_test.cc
new file mode 100644
index 0000000..08812e0
--- /dev/null
+++ b/test/libapt/cachefilter_test.cc
@@ -0,0 +1,119 @@
+#include <config.h>
+
+#include <apt-pkg/cachefilter.h>
+#include <apt-pkg/fileutl.h>
+
+#include <string>
+
+#include <gtest/gtest.h>
+
+TEST(CacheFilterTest, ArchitectureSpecification)
+{
+ {
+ SCOPED_TRACE("Pattern is *");
+ // * should be treated like any
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("*");
+ EXPECT_TRUE(ams("sparc"));
+ EXPECT_TRUE(ams("amd64"));
+ EXPECT_TRUE(ams("kfreebsd-amd64"));
+ }
+ {
+ SCOPED_TRACE("Pattern is any-i386");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("any-i386");
+ EXPECT_TRUE(ams("i386"));
+ EXPECT_FALSE(ams("amd64"));
+ EXPECT_TRUE(ams("linux-i386"));
+ EXPECT_FALSE(ams("linux-amd64"));
+ EXPECT_TRUE(ams("kfreebsd-i386"));
+ EXPECT_TRUE(ams("musl-linux-i386"));
+ }
+ {
+ SCOPED_TRACE("Pattern is linux-any");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("linux-any");
+ EXPECT_TRUE(ams("armhf"));
+ EXPECT_TRUE(ams("armel"));
+ EXPECT_TRUE(ams("linux-armhf"));
+ EXPECT_TRUE(ams("linux-armel"));
+ EXPECT_FALSE(ams("kfreebsd-armhf"));
+ EXPECT_TRUE(ams("musl-linux-armhf"));
+ }
+ if (FileExists(DPKG_DATADIR "/tupletable"))
+ {
+ SCOPED_TRACE("Pattern is gnu-any-any");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("gnu-any-any"); //really?
+ EXPECT_TRUE(ams("armhf"));
+ EXPECT_TRUE(ams("armel"));
+ EXPECT_TRUE(ams("linux-armhf"));
+ EXPECT_TRUE(ams("linux-armel"));
+ EXPECT_TRUE(ams("kfreebsd-armhf"));
+ EXPECT_FALSE(ams("musl-linux-armhf"));
+ }
+ if (FileExists(DPKG_DATADIR "/triplettable"))
+ {
+ SCOPED_TRACE("Pattern is gnueabi-any-any");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("gnueabi-any-any"); //really?
+ EXPECT_TRUE(ams("linux-armel"));
+ EXPECT_TRUE(ams("armel"));
+ EXPECT_FALSE(ams("armhf"));
+ EXPECT_FALSE(ams("linux-armhf"));
+ EXPECT_FALSE(ams("musleabihf-linux-armhf"));
+ }
+ if (FileExists(DPKG_DATADIR "/triplettable"))
+ {
+ SCOPED_TRACE("Pattern is gnueabihf-any-any");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("gnueabihf-any-any"); //really?
+ EXPECT_FALSE(ams("linux-armel"));
+ EXPECT_FALSE(ams("armel"));
+ EXPECT_TRUE(ams("armhf"));
+ EXPECT_TRUE(ams("linux-armhf"));
+ EXPECT_FALSE(ams("musleabihf-linux-armhf"));
+ }
+
+ // Weird ones - armhf's tuple is actually eabihf-gnu-linux-arm
+ // armel's tuple is actually eabi-gnu-linux-arm
+ // x32's tuple is actually x32-gnu-linux-amd64
+ {
+ SCOPED_TRACE("Architecture is armhf");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("armhf", false);
+ EXPECT_TRUE(ams("armhf"));
+ EXPECT_FALSE(ams("armel"));
+ EXPECT_TRUE(ams("linux-any"));
+ EXPECT_FALSE(ams("kfreebsd-any"));
+ EXPECT_TRUE(ams("any-arm"));
+ EXPECT_TRUE(ams("linux-armhf"));
+ EXPECT_FALSE(ams("kfreebsd-armhf"));
+ EXPECT_FALSE(ams("musl-linux-armhf"));
+ }
+ {
+ SCOPED_TRACE("Pattern is any-arm");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("any-arm");
+ EXPECT_TRUE(ams("armhf"));
+ EXPECT_TRUE(ams("armel"));
+ EXPECT_TRUE(ams("linux-armhf"));
+ EXPECT_TRUE(ams("linux-armel"));
+ EXPECT_TRUE(ams("musl-linux-armhf"));
+ EXPECT_TRUE(ams("uclibc-linux-armel"));
+
+ EXPECT_FALSE(ams("arm64"));
+ EXPECT_FALSE(ams("linux-arm64"));
+ EXPECT_FALSE(ams("kfreebsd-arm64"));
+ EXPECT_FALSE(ams("musl-linux-arm64"));
+ }
+ {
+ SCOPED_TRACE("Pattern is any-amd64");
+ APT::CacheFilter::PackageArchitectureMatchesSpecification ams("any-amd64");
+ EXPECT_TRUE(ams("amd64"));
+ EXPECT_TRUE(ams("x32"));
+ EXPECT_TRUE(ams("linux-amd64"));
+ EXPECT_TRUE(ams("linux-x32"));
+ EXPECT_TRUE(ams("kfreebsd-amd64"));
+ EXPECT_TRUE(ams("musl-linux-amd64"));
+ EXPECT_TRUE(ams("uclibc-linux-amd64"));
+
+ EXPECT_FALSE(ams("i386"));
+ EXPECT_FALSE(ams("linux-i386"));
+ EXPECT_FALSE(ams("kfreebsd-i386"));
+ EXPECT_FALSE(ams("musl-linux-i386"));
+ EXPECT_FALSE(ams("uclibc-linux-i386"));
+ }
+}
diff --git a/test/libapt/cdrom_test.cc b/test/libapt/cdrom_test.cc
new file mode 100644
index 0000000..b21492c
--- /dev/null
+++ b/test/libapt/cdrom_test.cc
@@ -0,0 +1,114 @@
+#include <config.h>
+
+#include <apt-pkg/cdrom.h>
+#include <apt-pkg/cdromutl.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/fileutl.h>
+
+#include <string>
+#include <vector>
+#include <string.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+class Cdrom : public pkgCdrom {
+public:
+ std::vector<std::string> ReduceSourcelist(std::string CD,std::vector<std::string> List) {
+ pkgCdrom::ReduceSourcelist(CD, List);
+ return List;
+ }
+};
+
+TEST(CDROMTest,ReduceSourcelist)
+{
+ Cdrom cd;
+ std::vector<std::string> List;
+ std::string CD("/media/cdrom/");
+
+ std::vector<std::string> R = cd.ReduceSourcelist(CD, List);
+ EXPECT_TRUE(R.empty());
+
+ List.push_back(" wheezy main");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(1u, R.size());
+ EXPECT_EQ(" wheezy main", R[0]);
+
+ List.push_back(" wheezy main");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(1u, R.size());
+ EXPECT_EQ(" wheezy main", R[0]);
+
+ List.push_back(" wheezy contrib");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(1u, R.size());
+ EXPECT_EQ(" wheezy contrib main", R[0]);
+
+ List.push_back(" wheezy-update contrib");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(2u, R.size());
+ EXPECT_EQ(" wheezy contrib main", R[0]);
+ EXPECT_EQ(" wheezy-update contrib", R[1]);
+
+ List.push_back(" wheezy-update contrib");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(2u, R.size());
+ EXPECT_EQ(" wheezy contrib main", R[0]);
+ EXPECT_EQ(" wheezy-update contrib", R[1]);
+
+ List.push_back(" wheezy-update non-free");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(2u, R.size());
+ EXPECT_EQ(" wheezy contrib main", R[0]);
+ EXPECT_EQ(" wheezy-update contrib non-free", R[1]);
+
+ List.push_back(" wheezy-update main");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(2u, R.size());
+ EXPECT_EQ(" wheezy contrib main", R[0]);
+ EXPECT_EQ(" wheezy-update contrib main non-free", R[1]);
+
+ List.push_back(" wheezy non-free");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(2u, R.size());
+ EXPECT_EQ(" wheezy contrib main non-free", R[0]);
+ EXPECT_EQ(" wheezy-update contrib main non-free", R[1]);
+
+ List.push_back(" sid main");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(3u, R.size());
+ EXPECT_EQ(" sid main", R[0]);
+ EXPECT_EQ(" wheezy contrib main non-free", R[1]);
+ EXPECT_EQ(" wheezy-update contrib main non-free", R[2]);
+
+ List.push_back(" sid main-reduce");
+ R = cd.ReduceSourcelist(CD, List);
+ ASSERT_EQ(3u, R.size());
+ EXPECT_EQ(" sid main main-reduce", R[0]);
+ EXPECT_EQ(" wheezy contrib main non-free", R[1]);
+ EXPECT_EQ(" wheezy-update contrib main non-free", R[2]);
+}
+TEST(CDROMTest, FindMountPointForDevice)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("mountpoints", fd, &tempfile,
+ "rootfs / rootfs rw 0 0\n"
+ "sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0\n"
+ "sysfs0 /sys0 sysfs rw,nosuid,nodev,noexec,relatime 0 0\n"
+ "/dev/disk/by-uuid/fadcbc52-6284-4874-aaaa-dcee1f05fe21 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0\n"
+ "/dev/sda1 /boot/efi vfat rw,nosuid,nodev,noexec,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=utf8,shortname=lower,quiet,utf8,errors=remount-ro,rw,nosuid,nodev,noexec,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=utf8,shortname=lower,quiet,utf8,errors=remount-ro,rw,nosuid,nodev,noexec,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=utf8,shortname=lower,quiet,utf8,errors=remount-ro,rw,nosuid,nodev,noexec,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=utf8,shortname=lower,quiet,utf8,errors=remount-ro 0 0\n"
+ "tmpfs /tmp tmpfs rw,nosuid,nodev,relatime 0 0\n");
+ _config->Set("Dir::state::Mountpoints", tempfile);
+
+ EXPECT_EQ("/", FindMountPointForDevice("rootfs"));
+ EXPECT_EQ("/", FindMountPointForDevice("/dev/disk/by-uuid/fadcbc52-6284-4874-aaaa-dcee1f05fe21"));
+ EXPECT_EQ("/sys", FindMountPointForDevice("sysfs"));
+ EXPECT_EQ("/sys0", FindMountPointForDevice("sysfs0"));
+ EXPECT_EQ("/boot/efi", FindMountPointForDevice("/dev/sda1"));
+ EXPECT_EQ("/tmp", FindMountPointForDevice("tmpfs"));
+
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+}
diff --git a/test/libapt/cdromfindpackages_test.cc b/test/libapt/cdromfindpackages_test.cc
new file mode 100644
index 0000000..cffa7aa
--- /dev/null
+++ b/test/libapt/cdromfindpackages_test.cc
@@ -0,0 +1,125 @@
+#include <config.h>
+
+#include <apt-pkg/cdrom.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <algorithm>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <stddef.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+class Cdrom : public pkgCdrom {
+ public:
+ bool FindPackages(std::string const &CD,
+ std::vector<std::string> &List,
+ std::vector<std::string> &SList,
+ std::vector<std::string> &SigList,
+ std::vector<std::string> &TransList,
+ std::string &InfoDir) {
+ std::string const startdir = SafeGetCWD();
+ EXPECT_FALSE(startdir.empty());
+ EXPECT_TRUE(InfoDir.empty());
+ bool const result = pkgCdrom::FindPackages(CD, List, SList, SigList, TransList, InfoDir, NULL, 0);
+ EXPECT_FALSE(InfoDir.empty());
+ std::sort(List.begin(), List.end());
+ std::sort(SList.begin(), SList.end());
+ std::sort(SigList.begin(), SigList.end());
+ std::sort(TransList.begin(), TransList.end());
+ EXPECT_EQ(0, chdir(startdir.c_str()));
+ return result;
+ }
+
+ using pkgCdrom::DropRepeats;
+};
+
+TEST(CDROMTest,FindPackages)
+{
+ std::string path;
+ createTemporaryDirectory("findpackage", path);
+
+ createDirectory(path, ".disk");
+ createDirectory(path, "pool");
+ createDirectory(path, "dists/stable/main/binary-i386");
+ createDirectory(path, "dists/stable/main/source");
+ createDirectory(path, "dists/stable/contrib/binary-amd64");
+ createDirectory(path, "dists/stable/non-free/binary-all");
+ createDirectory(path, "dists/unstable/main/binary-i386");
+ createDirectory(path, "dists/unstable/main/i18n");
+ createDirectory(path, "dists/unstable/main/source");
+ createDirectory(path, "dists/broken/non-free/source");
+ createFile(path, "dists/broken/.aptignr");
+ createFile(path, "dists/stable/main/binary-i386/Packages");
+ createFile(path, "dists/stable/main/binary-i386/Packages.bz2");
+ createFile(path, "dists/stable/main/source/Sources.xz");
+ createFile(path, "dists/stable/contrib/binary-amd64/Packages");
+ createFile(path, "dists/stable/contrib/binary-amd64/Packages.gz");
+ createFile(path, "dists/stable/non-free/binary-all/Packages");
+ createFile(path, "dists/unstable/main/binary-i386/Packages.xz");
+ createFile(path, "dists/unstable/main/binary-i386/Packages.lzma");
+ createFile(path, "dists/unstable/main/i18n/Translation-en");
+ createFile(path, "dists/unstable/main/i18n/Translation-de.bz2");
+ createFile(path, "dists/unstable/main/source/Sources.xz");
+ createFile(path, "dists/broken/non-free/source/Sources.gz");
+ createFile(path, "dists/stable/Release.gpg");
+ createFile(path, "dists/stable/Release");
+ createFile(path, "dists/unstable/InRelease");
+ createFile(path, "dists/broken/Release.gpg");
+ createLink(path, "dists/unstable", "dists/sid");
+
+ Cdrom cd;
+ std::vector<std::string> Packages, Sources, Signatur, Translation;
+ std::string InfoDir;
+ EXPECT_TRUE(cd.FindPackages(path, Packages, Sources, Signatur, Translation, InfoDir));
+ EXPECT_EQ(5u, Packages.size());
+ EXPECT_EQ(path + "/dists/sid/main/binary-i386/", Packages[0]);
+ EXPECT_EQ(path + "/dists/stable/contrib/binary-amd64/", Packages[1]);
+ EXPECT_EQ(path + "/dists/stable/main/binary-i386/", Packages[2]);
+ EXPECT_EQ(path + "/dists/stable/non-free/binary-all/", Packages[3]);
+ EXPECT_EQ(path + "/dists/unstable/main/binary-i386/", Packages[4]);
+ EXPECT_EQ(3u, Sources.size());
+ EXPECT_EQ(path + "/dists/sid/main/source/", Sources[0]);
+ EXPECT_EQ(path + "/dists/stable/main/source/", Sources[1]);
+ EXPECT_EQ(path + "/dists/unstable/main/source/", Sources[2]);
+ EXPECT_EQ(3u, Signatur.size());
+ EXPECT_EQ(path + "/dists/sid/", Signatur[0]);
+ EXPECT_EQ(path + "/dists/stable/", Signatur[1]);
+ EXPECT_EQ(path + "/dists/unstable/", Signatur[2]);
+ EXPECT_EQ(4u, Translation.size());
+ EXPECT_EQ(path + "/dists/sid/main/i18n/Translation-de", Translation[0]);
+ EXPECT_EQ(path + "/dists/sid/main/i18n/Translation-en", Translation[1]);
+ EXPECT_EQ(path + "/dists/unstable/main/i18n/Translation-de", Translation[2]);
+ EXPECT_EQ(path + "/dists/unstable/main/i18n/Translation-en", Translation[3]);
+ EXPECT_EQ(path + "/.disk/", InfoDir);
+
+ cd.DropRepeats(Packages, "Packages");
+ cd.DropRepeats(Sources, "Sources");
+ _error->PushToStack();
+ cd.DropRepeats(Signatur, "InRelease");
+ cd.DropRepeats(Signatur, "Release.gpg");
+ _error->RevertToStack();
+ _error->DumpErrors();
+ cd.DropRepeats(Translation, "");
+
+ EXPECT_EQ(4u, Packages.size());
+ EXPECT_EQ(path + "/dists/stable/contrib/binary-amd64/", Packages[0]);
+ EXPECT_EQ(path + "/dists/stable/main/binary-i386/", Packages[1]);
+ EXPECT_EQ(path + "/dists/stable/non-free/binary-all/", Packages[2]);
+ EXPECT_EQ(path + "/dists/unstable/main/binary-i386/", Packages[3]);
+ EXPECT_EQ(2u, Sources.size());
+ EXPECT_EQ(path + "/dists/stable/main/source/", Sources[0]);
+ EXPECT_EQ(path + "/dists/unstable/main/source/", Sources[1]);
+ EXPECT_EQ(2u, Signatur.size());
+ EXPECT_EQ(path + "/dists/stable/", Signatur[0]);
+ EXPECT_EQ(path + "/dists/unstable/", Signatur[1]);
+ EXPECT_EQ(2u, Translation.size());
+ EXPECT_EQ(path + "/dists/unstable/main/i18n/Translation-de", Translation[0]);
+ EXPECT_EQ(path + "/dists/unstable/main/i18n/Translation-en", Translation[1]);
+
+ removeDirectory(path);
+}
diff --git a/test/libapt/commandline_test.cc b/test/libapt/commandline_test.cc
new file mode 100644
index 0000000..cde80b4
--- /dev/null
+++ b/test/libapt/commandline_test.cc
@@ -0,0 +1,238 @@
+#include <config.h>
+
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/configuration.h>
+#include <apt-private/private-cmndline.h>
+
+#include <gtest/gtest.h>
+
+class CLT: public CommandLine {
+ public:
+ std::string static AsString(const char * const * const argv,
+ unsigned int const argc) {
+ std::string const static conf = "Commandline::AsString";
+ _config->Clear(conf);
+ SaveInConfig(argc, argv);
+ return _config->Find(conf);
+ }
+};
+
+TEST(CommandLineTest,SaveInConfig)
+{
+#define APT_EXPECT_CMD(x, ...) { const char * const argv[] = { __VA_ARGS__ }; EXPECT_EQ(x, CLT::AsString(argv, sizeof(argv)/sizeof(argv[0]))); }
+ APT_EXPECT_CMD("apt-get install -sf",
+ "apt-get", "install", "-sf");
+ APT_EXPECT_CMD("apt-cache -s apt -so Debug::test=Test",
+ "apt-cache", "-s", "apt", "-so", "Debug::test=Test");
+ APT_EXPECT_CMD("apt-cache -s apt -so Debug::test='Das ist ein Test'",
+ "apt-cache", "-s", "apt", "-so", "Debug::test=Das ist ein Test");
+ APT_EXPECT_CMD("apt-cache -s apt -so Debug::test='Das ist ein Test'",
+ "apt-cache", "-s", "apt", "-so", "Debug::test=\"Das ist ein Test\"");
+ APT_EXPECT_CMD("apt-cache -s apt -so Debug::test='Das ist ein Test' foo",
+ "apt-cache", "-s", "apt", "-so", "\"Debug::test=Das ist ein Test\"", "foo");
+ APT_EXPECT_CMD("apt-cache -s apt -so Debug::test='Das ist ein Test' foo",
+ "apt-cache", "-s", "apt", "-so", "\'Debug::test=Das ist ein Test\'", "foo");
+ APT_EXPECT_CMD("apt-cache -s apt -so Debug::test='That is crazy!' foo",
+ "apt-cache", "-s", "apt", "-so", "\'Debug::test=That \ris\n crazy!\'", "foo");
+ APT_EXPECT_CMD("apt-cache -s apt --hallo test=1.0",
+ "apt-cache", "-s", "apt", "--hallo", "test=1.0");
+#undef APT_EXPECT_CMD
+}
+TEST(CommandLineTest,Parsing)
+{
+ CommandLine::Args Args[] = {
+ { 't', 0, "Test::Worked", 0 },
+ { 'T', "testing", "Test::Worked", CommandLine::HasArg },
+ { 'z', "zero", "Test::Zero", 0 },
+ { 'o', "option", 0, CommandLine::ArbItem },
+ {0,0,0,0}
+ };
+ ::Configuration c;
+ CommandLine CmdL(Args, &c);
+
+ char const * argv[] = { "test", "--zero", "-t" };
+ CmdL.Parse(3 , argv);
+ EXPECT_TRUE(c.FindB("Test::Worked", false));
+ EXPECT_TRUE(c.FindB("Test::Zero", false));
+
+ c.Clear("Test");
+ EXPECT_FALSE(c.FindB("Test::Worked", false));
+ EXPECT_FALSE(c.FindB("Test::Zero", false));
+
+ c.Set("Test::Zero", true);
+ EXPECT_TRUE(c.FindB("Test::Zero", false));
+
+ char const * argv2[] = { "test", "--no-zero", "-t" };
+ CmdL.Parse(3 , argv2);
+ EXPECT_TRUE(c.FindB("Test::Worked", false));
+ EXPECT_FALSE(c.FindB("Test::Zero", false));
+
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "-T", "yes" };
+ CmdL.Parse(3 , argv);
+ EXPECT_TRUE(c.FindB("Test::Worked", false));
+ EXPECT_EQ("yes", c.Find("Test::Worked", "no"));
+ EXPECT_EQ(0u, CmdL.FileSize());
+ }
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "-T=yes" };
+ CmdL.Parse(2 , argv);
+ EXPECT_TRUE(c.Exists("Test::Worked"));
+ EXPECT_EQ("yes", c.Find("Test::Worked", "no"));
+ EXPECT_EQ(0u, CmdL.FileSize());
+ }
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "-T=", "yes" };
+ CmdL.Parse(3 , argv);
+ EXPECT_TRUE(c.Exists("Test::Worked"));
+ EXPECT_EQ("no", c.Find("Test::Worked", "no"));
+ EXPECT_EQ(1u, CmdL.FileSize());
+ }
+
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "--testing", "yes" };
+ CmdL.Parse(3 , argv);
+ EXPECT_TRUE(c.FindB("Test::Worked", false));
+ EXPECT_EQ("yes", c.Find("Test::Worked", "no"));
+ EXPECT_EQ(0u, CmdL.FileSize());
+ }
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "--testing=yes" };
+ CmdL.Parse(2 , argv);
+ EXPECT_TRUE(c.Exists("Test::Worked"));
+ EXPECT_EQ("yes", c.Find("Test::Worked", "no"));
+ EXPECT_EQ(0u, CmdL.FileSize());
+ }
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "--testing=", "yes" };
+ CmdL.Parse(3 , argv);
+ EXPECT_TRUE(c.Exists("Test::Worked"));
+ EXPECT_EQ("no", c.Find("Test::Worked", "no"));
+ EXPECT_EQ(1u, CmdL.FileSize());
+ }
+
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "-o", "test::worked=yes" };
+ CmdL.Parse(3 , argv);
+ EXPECT_TRUE(c.FindB("Test::Worked", false));
+ EXPECT_EQ("yes", c.Find("Test::Worked", "no"));
+ }
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "-o", "test::worked=" };
+ CmdL.Parse(3 , argv);
+ EXPECT_TRUE(c.Exists("Test::Worked"));
+ EXPECT_EQ("no", c.Find("Test::Worked", "no"));
+ }
+ c.Clear("Test");
+ {
+ char const * argv[] = { "test", "-o", "test::worked=", "yes" };
+ CmdL.Parse(4 , argv);
+ EXPECT_TRUE(c.Exists("Test::Worked"));
+ EXPECT_EQ("no", c.Find("Test::Worked", "no"));
+ }
+ c.Clear("Test");
+}
+
+TEST(CommandLineTest, BoolParsing)
+{
+ CommandLine::Args Args[] = {
+ { 't', 0, "Test::Worked", 0 },
+ {0,0,0,0}
+ };
+ ::Configuration c;
+ CommandLine CmdL(Args, &c);
+
+ // the commandline parser used to use strtol() on the argument
+ // to check if the argument is a boolean expression - that
+ // stopped after the "0". this test ensures that we always check
+ // that the entire string was consumed by strtol
+ {
+ char const * argv[] = { "show", "-t", "0ad" };
+ bool res = CmdL.Parse(sizeof(argv)/sizeof(char*), argv);
+ EXPECT_TRUE(res);
+ ASSERT_EQ(std::string(CmdL.FileList[0]), "0ad");
+ }
+
+ {
+ char const * argv[] = { "show", "-t", "0", "ad" };
+ bool res = CmdL.Parse(sizeof(argv)/sizeof(char*), argv);
+ EXPECT_TRUE(res);
+ ASSERT_EQ(std::string(CmdL.FileList[0]), "ad");
+ }
+
+}
+
+static bool DoVoid(CommandLine &) { return false; }
+
+TEST(CommandLineTest,GetCommand)
+{
+ CommandLine::Dispatch Cmds[] = { {"install",&DoVoid}, {"remove", &DoVoid}, {0,0} };
+ {
+ char const * argv[] = { "apt-get", "-t", "unstable", "remove", "-d", "foo" };
+ char const * com = CommandLine::GetCommand(Cmds, sizeof(argv)/sizeof(argv[0]), argv);
+ EXPECT_STREQ("remove", com);
+ std::vector<CommandLine::Args> Args = getCommandArgs(APT_CMD::APT_GET, com);
+ ::Configuration c;
+ CommandLine CmdL(Args.data(), &c);
+ ASSERT_TRUE(CmdL.Parse(sizeof(argv)/sizeof(argv[0]), argv));
+ EXPECT_EQ(c.Find("APT::Default-Release"), "unstable");
+ EXPECT_TRUE(c.FindB("APT::Get::Download-Only"));
+ ASSERT_EQ(2u, CmdL.FileSize());
+ EXPECT_EQ(std::string(CmdL.FileList[0]), "remove");
+ EXPECT_EQ(std::string(CmdL.FileList[1]), "foo");
+ }
+ {
+ char const * argv[] = {"apt-get", "-t", "unstable", "remove", "--", "-d", "foo" };
+ char const * com = CommandLine::GetCommand(Cmds, sizeof(argv)/sizeof(argv[0]), argv);
+ EXPECT_STREQ("remove", com);
+ std::vector<CommandLine::Args> Args = getCommandArgs(APT_CMD::APT_GET, com);
+ ::Configuration c;
+ CommandLine CmdL(Args.data(), &c);
+ ASSERT_TRUE(CmdL.Parse(sizeof(argv)/sizeof(argv[0]), argv));
+ EXPECT_EQ(c.Find("APT::Default-Release"), "unstable");
+ EXPECT_FALSE(c.FindB("APT::Get::Download-Only"));
+ ASSERT_EQ(3u, CmdL.FileSize());
+ EXPECT_EQ(std::string(CmdL.FileList[0]), "remove");
+ EXPECT_EQ(std::string(CmdL.FileList[1]), "-d");
+ EXPECT_EQ(std::string(CmdL.FileList[2]), "foo");
+ }
+ {
+ char const * argv[] = {"apt-get", "-t", "unstable", "--", "remove", "-d", "foo" };
+ char const * com = CommandLine::GetCommand(Cmds, sizeof(argv)/sizeof(argv[0]), argv);
+ EXPECT_STREQ("remove", com);
+ std::vector<CommandLine::Args> Args = getCommandArgs(APT_CMD::APT_GET, com);
+ ::Configuration c;
+ CommandLine CmdL(Args.data(), &c);
+ ASSERT_TRUE(CmdL.Parse(sizeof(argv)/sizeof(argv[0]), argv));
+ EXPECT_EQ(c.Find("APT::Default-Release"), "unstable");
+ EXPECT_FALSE(c.FindB("APT::Get::Download-Only"));
+ ASSERT_EQ(3u, CmdL.FileSize());
+ EXPECT_EQ(std::string(CmdL.FileList[0]), "remove");
+ EXPECT_EQ(std::string(CmdL.FileList[1]), "-d");
+ EXPECT_EQ(std::string(CmdL.FileList[2]), "foo");
+ }
+ {
+ char const * argv[] = {"apt-get", "install", "-t", "unstable", "--", "remove", "-d", "foo" };
+ char const * com = CommandLine::GetCommand(Cmds, sizeof(argv)/sizeof(argv[0]), argv);
+ EXPECT_STREQ("install", com);
+ std::vector<CommandLine::Args> Args = getCommandArgs(APT_CMD::APT_GET, com);
+ ::Configuration c;
+ CommandLine CmdL(Args.data(), &c);
+ ASSERT_TRUE(CmdL.Parse(sizeof(argv)/sizeof(argv[0]), argv));
+ EXPECT_EQ(c.Find("APT::Default-Release"), "unstable");
+ EXPECT_FALSE(c.FindB("APT::Get::Download-Only"));
+ ASSERT_EQ(4u, CmdL.FileSize());
+ EXPECT_EQ(std::string(CmdL.FileList[0]), "install");
+ EXPECT_EQ(std::string(CmdL.FileList[1]), "remove");
+ EXPECT_EQ(std::string(CmdL.FileList[2]), "-d");
+ EXPECT_EQ(std::string(CmdL.FileList[3]), "foo");
+ }
+}
diff --git a/test/libapt/compareversion_test.cc b/test/libapt/compareversion_test.cc
new file mode 100644
index 0000000..0129322
--- /dev/null
+++ b/test/libapt/compareversion_test.cc
@@ -0,0 +1,182 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Version Test - Simple program to run through a file and comare versions.
+
+ Each version is compared and the result is checked against an expected
+ result in the file. The format of the file is
+ a b Res
+ Where Res is -1, 1, 0. dpkg -D=1 --compare-versions a "<" b can be
+ used to determine what Res should be. # at the start of the line
+ is a comment and blank lines are skipped
+
+ The runner will also call dpkg --compare-versions to check if APT and
+ dpkg have (still) the same idea.
+
+ ##################################################################### */
+ /*}}}*/
+#include <config.h>
+
+#include <apt-pkg/debversion.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <fstream>
+#include <string>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <gtest/gtest.h>
+
+using namespace std;
+
+static bool callDPKG(const char * const val, const char * const ref, char const * const op) {
+ pid_t Process = ExecFork();
+ if (Process == 0)
+ {
+ const char * args[] = {
+ "dpkg",
+ "--compare-versions",
+ val,
+ op,
+ ref,
+ nullptr
+ };
+ execvp(args[0], (char**) args);
+ exit(1);
+ }
+ int Ret;
+ waitpid(Process, &Ret, 0);
+ EXPECT_TRUE(WIFEXITED(Ret));
+ return WEXITSTATUS(Ret) == 0;
+}
+
+
+#define EXPECT_VERSION_PART(A, compare, B) \
+{ \
+ int Res = debVS.CmpVersion(A, B); \
+ Res = (Res < 0) ? -1 : ( (Res > 0) ? 1 : Res); \
+ EXPECT_EQ(compare, Res) << "APT: A: »" << A << "« B: »" << B << "«"; \
+ EXPECT_PRED3(callDPKG, A, B, ((compare == 1) ? ">>" : ( (compare == 0) ? "=" : "<<"))); \
+}
+#define EXPECT_VERSION(A, compare, B) \
+ EXPECT_VERSION_PART(A, compare, B); \
+ EXPECT_VERSION_PART(B, compare * -1, A)
+
+// History-Remark: The versions used to be specified in a versions.lst file
+
+enum CompareVersionType { LESS = -1, GREATER = 1, EQUAL = 0 };
+
+TEST(CompareVersionTest,Basic)
+{
+ EXPECT_VERSION("7.6p2-4", GREATER, "7.6-0");
+ EXPECT_VERSION("1.0.3-3", GREATER, "1.0-1");
+ EXPECT_VERSION("1.3", GREATER, "1.2.2-2");
+ EXPECT_VERSION("1.3", GREATER, "1.2.2");
+
+ /* disabled as dpkg doesn't like them… (versions have to start with a number)
+ EXPECT_VERSION("-", LESS, ".");
+ EXPECT_VERSION("p", LESS, "-");
+ EXPECT_VERSION("a", LESS, "-");
+ EXPECT_VERSION("z", LESS, "-");
+ EXPECT_VERSION("a", LESS, ".");
+ EXPECT_VERSION("z", LESS, ".");
+ // */
+
+ /* disabled as dpkg doesn't like them… (versions have to start with a number)
+ EXPECT_VERSION("III-alpha9.8", LESS, "III-alpha9.8-1.5");
+ // */
+
+ // Test some properties of text strings
+ EXPECT_VERSION("0-pre", EQUAL, "0-pre");
+ EXPECT_VERSION("0-pre", LESS, "0-pree");
+
+ EXPECT_VERSION("1.1.6r2-2", GREATER, "1.1.6r-1");
+ EXPECT_VERSION("2.6b2-1", GREATER, "2.6b-2");
+
+ EXPECT_VERSION("98.1p5-1", LESS, "98.1-pre2-b6-2");
+ EXPECT_VERSION("0.4a6-2", GREATER, "0.4-1");
+
+ EXPECT_VERSION("1:3.0.5-2", LESS, "1:3.0.5.1");
+}
+TEST(CompareVersionTest,Epochs)
+{
+ EXPECT_VERSION("1:0.4", GREATER, "10.3");
+ EXPECT_VERSION("1:1.25-4", LESS, "1:1.25-8");
+ EXPECT_VERSION("0:1.18.36", EQUAL, "1.18.36");
+
+ EXPECT_VERSION("1.18.36", GREATER, "1.18.35");
+ EXPECT_VERSION("0:1.18.36", GREATER, "1.18.35");
+}
+TEST(CompareVersionTest,Strangeness)
+{
+ // Funky, but allowed, characters in upstream version
+ EXPECT_VERSION("9:1.18.36:5.4-20", LESS, "10:0.5.1-22");
+ EXPECT_VERSION("9:1.18.36:5.4-20", LESS, "9:1.18.36:5.5-1");
+ EXPECT_VERSION("9:1.18.36:5.4-20", LESS, " 9:1.18.37:4.3-22");
+ EXPECT_VERSION("1.18.36-0.17.35-18", GREATER, "1.18.36-19");
+
+ // Junk
+ EXPECT_VERSION("1:1.2.13-3", LESS, "1:1.2.13-3.1");
+ EXPECT_VERSION("2.0.7pre1-4", LESS, "2.0.7r-1");
+
+ // if a version includes a dash, it should be the debrev dash - policy says so…
+ EXPECT_VERSION("0:0-0-0", GREATER, "0-0");
+
+ // do we like strange versions? Yes we like strange versions…
+ EXPECT_VERSION("0", EQUAL, "0");
+ EXPECT_VERSION("0", EQUAL, "00");
+}
+TEST(CompareVersionTest,DebianBug)
+{
+ // #205960
+ EXPECT_VERSION("3.0~rc1-1", LESS, "3.0-1");
+ // #573592 - debian policy 5.6.12
+ EXPECT_VERSION("1.0", EQUAL, "1.0-0");
+ EXPECT_VERSION("0.2", LESS, "1.0-0");
+ EXPECT_VERSION("1.0", LESS, "1.0-0+b1");
+ EXPECT_VERSION("1.0", GREATER, "1.0-0~");
+}
+TEST(CompareVersionTest,CuptTests)
+{
+ // "steal" the testcases from (old perl) cupt
+ EXPECT_VERSION("1.2.3", EQUAL, "1.2.3"); // identical
+ EXPECT_VERSION("4.4.3-2", EQUAL, "4.4.3-2"); // identical
+ EXPECT_VERSION("1:2ab:5", EQUAL, "1:2ab:5"); // this is correct...
+ EXPECT_VERSION("7:1-a:b-5", EQUAL, "7:1-a:b-5"); // and this
+ EXPECT_VERSION("57:1.2.3abYZ+~-4-5", EQUAL, "57:1.2.3abYZ+~-4-5"); // and those too
+ EXPECT_VERSION("1.2.3", EQUAL, "0:1.2.3"); // zero epoch
+ EXPECT_VERSION("1.2.3", EQUAL, "1.2.3-0"); // zero revision
+ EXPECT_VERSION("009", EQUAL, "9"); // zeroes…
+ EXPECT_VERSION("009ab5", EQUAL, "9ab5"); // there as well
+ EXPECT_VERSION("1.2.3", LESS, "1.2.3-1"); // added non-zero revision
+ EXPECT_VERSION("1.2.3", LESS, "1.2.4"); // just bigger
+ EXPECT_VERSION("1.2.4", GREATER, "1.2.3"); // order doesn't matter
+ EXPECT_VERSION("1.2.24", GREATER, "1.2.3"); // bigger, eh?
+ EXPECT_VERSION("0.10.0", GREATER, "0.8.7"); // bigger, eh?
+ EXPECT_VERSION("3.2", GREATER, "2.3"); // major number rocks
+ EXPECT_VERSION("1.3.2a", GREATER, "1.3.2"); // letters rock
+ EXPECT_VERSION("0.5.0~git", LESS, "0.5.0~git2"); // numbers rock
+ EXPECT_VERSION("2a", LESS, "21"); // but not in all places
+ EXPECT_VERSION("1.3.2a", LESS, "1.3.2b"); // but there is another letter
+ EXPECT_VERSION("1:1.2.3", GREATER, "1.2.4"); // epoch rocks
+ EXPECT_VERSION("1:1.2.3", LESS, "1:1.2.4"); // bigger anyway
+ EXPECT_VERSION("1.2a+~bCd3", LESS, "1.2a++"); // tilde doesn't rock
+ EXPECT_VERSION("1.2a+~bCd3", GREATER, "1.2a+~"); // but first is longer!
+ EXPECT_VERSION("5:2", GREATER, "304-2"); // epoch rocks
+ EXPECT_VERSION("5:2", LESS, "304:2"); // so big epoch?
+ EXPECT_VERSION("25:2", GREATER, "3:2"); // 25 > 3, obviously
+ EXPECT_VERSION("1:2:123", LESS, "1:12:3"); // 12 > 2
+ EXPECT_VERSION("1.2-5", LESS, "1.2-3-5"); // 1.2 < 1.2-3
+ EXPECT_VERSION("5.10.0", GREATER, "5.005"); // preceding zeroes don't matters
+ EXPECT_VERSION("3a9.8", LESS, "3.10.2"); // letters are before all letter symbols
+ EXPECT_VERSION("3a9.8", GREATER, "3~10"); // but after the tilde
+ EXPECT_VERSION("1.4+OOo3.0.0~", LESS, "1.4+OOo3.0.0-4"); // another tilde check
+ EXPECT_VERSION("2.4.7-1", LESS, "2.4.7-z"); // revision comparing
+ EXPECT_VERSION("1.002-1+b2", GREATER, "1.00"); // whatever...
+ /* disabled as dpkg doesn't like them… (versions with illegal char)
+ EXPECT_VERSION("2.2.4-47978_Debian_lenny", EQUAL, "2.2.4-47978_Debian_lenny"); // and underscore...
+ // */
+}
diff --git a/test/libapt/configuration_test.cc b/test/libapt/configuration_test.cc
new file mode 100644
index 0000000..8d6c404
--- /dev/null
+++ b/test/libapt/configuration_test.cc
@@ -0,0 +1,234 @@
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/fileutl.h>
+
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+TEST(ConfigurationTest,Lists)
+{
+ Configuration Cnf;
+
+ Cnf.Set("APT::Keep-Fds::",28);
+ Cnf.Set("APT::Keep-Fds::",17);
+ Cnf.Set("APT::Keep-Fds::2",47);
+ Cnf.Set("APT::Keep-Fds::","broken");
+ std::vector<std::string> fds = Cnf.FindVector("APT::Keep-Fds");
+ ASSERT_EQ(4u, fds.size());
+ EXPECT_EQ("28", fds[0]);
+ EXPECT_EQ("17", fds[1]);
+ EXPECT_EQ("47", fds[2]);
+ EXPECT_EQ("broken", fds[3]);
+
+ EXPECT_TRUE(Cnf.Exists("APT::Keep-Fds::2"));
+ EXPECT_EQ("47", Cnf.Find("APT::Keep-Fds::2"));
+ EXPECT_EQ(47, Cnf.FindI("APT::Keep-Fds::2"));
+ EXPECT_FALSE(Cnf.Exists("APT::Keep-Fds::3"));
+ EXPECT_EQ("", Cnf.Find("APT::Keep-Fds::3"));
+ EXPECT_EQ(56, Cnf.FindI("APT::Keep-Fds::3", 56));
+ EXPECT_EQ("not-set", Cnf.Find("APT::Keep-Fds::3", "not-set"));
+
+ Cnf.Clear("APT::Keep-Fds::2");
+ EXPECT_TRUE(Cnf.Exists("APT::Keep-Fds::2"));
+ fds = Cnf.FindVector("APT::Keep-Fds");
+ ASSERT_EQ(4u, fds.size());
+ EXPECT_EQ("28", fds[0]);
+ EXPECT_EQ("17", fds[1]);
+ EXPECT_EQ("", fds[2]);
+ EXPECT_EQ("broken", fds[3]);
+
+ Cnf.Clear("APT::Keep-Fds",28);
+ fds = Cnf.FindVector("APT::Keep-Fds");
+ ASSERT_EQ(3u, fds.size());
+ EXPECT_EQ("17", fds[0]);
+ EXPECT_EQ("", fds[1]);
+ EXPECT_EQ("broken", fds[2]);
+
+ Cnf.Clear("APT::Keep-Fds","");
+ EXPECT_FALSE(Cnf.Exists("APT::Keep-Fds::2"));
+
+ Cnf.Clear("APT::Keep-Fds",17);
+ Cnf.Clear("APT::Keep-Fds","broken");
+ fds = Cnf.FindVector("APT::Keep-Fds");
+ EXPECT_TRUE(fds.empty());
+
+ Cnf.Set("APT::Keep-Fds::",21);
+ Cnf.Set("APT::Keep-Fds::",42);
+ fds = Cnf.FindVector("APT::Keep-Fds");
+ ASSERT_EQ(2u, fds.size());
+ EXPECT_EQ("21", fds[0]);
+ EXPECT_EQ("42", fds[1]);
+
+ Cnf.Clear("APT::Keep-Fds");
+ fds = Cnf.FindVector("APT::Keep-Fds");
+ EXPECT_TRUE(fds.empty());
+}
+TEST(ConfigurationTest,Integers)
+{
+ Configuration Cnf;
+
+ Cnf.CndSet("APT::Version", 42);
+ Cnf.CndSet("APT::Version", "66");
+ EXPECT_EQ("42", Cnf.Find("APT::Version"));
+ EXPECT_EQ(42, Cnf.FindI("APT::Version"));
+ EXPECT_EQ("42", Cnf.Find("APT::Version", "33"));
+ EXPECT_EQ(42, Cnf.FindI("APT::Version", 33));
+ EXPECT_EQ("33", Cnf.Find("APT2::Version", "33"));
+ EXPECT_EQ(33, Cnf.FindI("APT2::Version", 33));
+}
+TEST(ConfigurationTest,DirsAndFiles)
+{
+ Configuration Cnf;
+
+ EXPECT_EQ("", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("", Cnf.FindFile("Dir::Aptitude::State"));
+ Cnf.Set("Dir", "/srv/sid");
+ EXPECT_EQ("", Cnf.FindFile("Dir::State"));
+ Cnf.Set("Dir::State", "var/lib/apt");
+ Cnf.Set("Dir::Aptitude::State", "var/lib/aptitude");
+ EXPECT_EQ("/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
+
+ Cnf.Set("RootDir", "/");
+ EXPECT_EQ("/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
+ Cnf.Set("RootDir", "//./////.////");
+ EXPECT_EQ("/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
+ Cnf.Set("RootDir", "/rootdir");
+ EXPECT_EQ("/rootdir/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/rootdir/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
+ Cnf.Set("RootDir", "/rootdir/");
+ EXPECT_EQ("/rootdir/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/rootdir/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
+
+ Cnf.Set("Dir::State", "/dev/null");
+ Cnf.Set("Dir::State::lists", "lists/");
+ EXPECT_EQ("/rootdir/dev/null", Cnf.FindDir("Dir::State"));
+ EXPECT_EQ("/rootdir/dev/null", Cnf.FindDir("Dir::State::lists"));
+}
+TEST(ConfigurationTest,DevNullInPaths)
+{
+ Configuration Cnf;
+ EXPECT_EQ("", Cnf.FindFile("Dir"));
+ EXPECT_EQ("", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("", Cnf.FindFile("Dir::State::status"));
+ Cnf.Set("Dir::State", "/dev/null");
+ EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State"));
+ Cnf.Set("Dir", "/");
+ Cnf.Set("Dir::State::status", "status");
+ EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State::status"));
+ Cnf.Set("Dir::State", "");
+ EXPECT_EQ("", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/status", Cnf.FindFile("Dir::State::status"));
+ Cnf.Set("Dir", "/dev/null");
+ EXPECT_EQ("/dev/null", Cnf.FindFile("Dir"));
+ EXPECT_EQ("", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State::status"));
+ Cnf.Set("Dir", "/rootdir");
+ EXPECT_EQ("/rootdir", Cnf.FindFile("Dir"));
+ EXPECT_EQ("", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/rootdir/status", Cnf.FindFile("Dir::State::status"));
+ Cnf.Set("Dir::State::status", "/foo/status");
+ EXPECT_EQ("/rootdir", Cnf.FindFile("Dir"));
+ EXPECT_EQ("", Cnf.FindFile("Dir::State"));
+ EXPECT_EQ("/foo/status", Cnf.FindFile("Dir::State::status"));
+}
+TEST(ConfigurationTest,Vector)
+{
+ Configuration Cnf;
+
+ std::vector<std::string> vec = Cnf.FindVector("Test::Vector", "");
+ EXPECT_EQ(0u, vec.size());
+ vec = Cnf.FindVector("Test::Vector", "foo");
+ ASSERT_EQ(1u, vec.size());
+ EXPECT_EQ("foo", vec[0]);
+ vec = Cnf.FindVector("Test::Vector", "foo,bar");
+ EXPECT_EQ(2u, vec.size());
+ EXPECT_EQ("foo", vec[0]);
+ EXPECT_EQ("bar", vec[1]);
+ Cnf.Set("Test::Vector::", "baz");
+ Cnf.Set("Test::Vector::", "bob");
+ Cnf.Set("Test::Vector::", "dob");
+ vec = Cnf.FindVector("Test::Vector");
+ ASSERT_EQ(3u, vec.size());
+ EXPECT_EQ("baz", vec[0]);
+ EXPECT_EQ("bob", vec[1]);
+ EXPECT_EQ("dob", vec[2]);
+ vec = Cnf.FindVector("Test::Vector", "foo,bar");
+ ASSERT_EQ(3u, vec.size());
+ EXPECT_EQ("baz", vec[0]);
+ EXPECT_EQ("bob", vec[1]);
+ EXPECT_EQ("dob", vec[2]);
+ Cnf.Set("Test::Vector", "abel,bravo");
+ vec = Cnf.FindVector("Test::Vector", "foo,bar");
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("abel", vec[0]);
+ EXPECT_EQ("bravo", vec[1]);
+}
+TEST(ConfigurationTest,Merge)
+{
+ Configuration Cnf;
+ Cnf.Set("Binary::apt::option::foo", "bar");
+ Cnf.Set("Binary::apt::option::empty", "");
+ Cnf.Set("option::foo", "foo");
+
+ Cnf.MoveSubTree("Binary::apt", "Binary::apt2");
+ EXPECT_FALSE(Cnf.Exists("Binary::apt::option"));
+ EXPECT_TRUE(Cnf.Exists("option"));
+ EXPECT_EQ("foo", Cnf.Find("option::foo"));
+ EXPECT_EQ("bar", Cnf.Find("Binary::apt2::option::foo"));
+
+ EXPECT_FALSE(Cnf.Exists("option::empty"));
+ EXPECT_TRUE(Cnf.Exists("Binary::apt2::option::empty"));
+ Cnf.Set("option::empty", "not");
+
+ Cnf.MoveSubTree("Binary::apt2", NULL);
+ EXPECT_FALSE(Cnf.Exists("Binary::apt2::option"));
+ EXPECT_TRUE(Cnf.Exists("option"));
+ EXPECT_EQ("bar", Cnf.Find("option::foo"));
+ EXPECT_EQ("", Cnf.Find("option::empty"));
+}
+TEST(ConfigurationTest, Parsing)
+{
+ Configuration Cnf;
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("doublesignedfile", fd, &tempfile, R"apt(
+SimpleOption "true";
+/* SimpleOption "false"; */
+Answer::Simple "42";
+# This is a comment
+List::Option { "In"; "One"; "Line"; };
+// this a comment as well
+List::Option2 { "Multi";
+"Line"; # inline comment
+ "Options";
+}; Trailing "true";
+/* Commented::Out "true"; */
+)apt");
+ EXPECT_TRUE(ReadConfigFile(Cnf, tempfile));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(Cnf.FindB("SimpleOption"));
+ EXPECT_EQ(42, Cnf.FindI("Answer::Simple"));
+ EXPECT_TRUE(Cnf.Exists("List::Option"));
+ auto const singleline = Cnf.FindVector("List::Option");
+ EXPECT_EQ(3u, singleline.size());
+ EXPECT_EQ("In", singleline[0]);
+ EXPECT_EQ("One", singleline[1]);
+ EXPECT_EQ("Line", singleline[2]);
+ auto const multiline = Cnf.FindVector("List::Option2");
+ EXPECT_EQ(3u, multiline.size());
+ EXPECT_EQ("Multi", multiline[0]);
+ EXPECT_EQ("Line", multiline[1]);
+ EXPECT_EQ("Options", multiline[2]);
+ EXPECT_TRUE(Cnf.FindB("Trailing"));
+ EXPECT_FALSE(Cnf.Exists("Commented::Out"));
+}
diff --git a/test/libapt/extracttar_test.cc b/test/libapt/extracttar_test.cc
new file mode 100644
index 0000000..3093414
--- /dev/null
+++ b/test/libapt/extracttar_test.cc
@@ -0,0 +1,41 @@
+#include <apt-pkg/error.h>
+#include <apt-pkg/extracttar.h>
+#include <iostream>
+#include <stdlib.h>
+
+#include "assert.h"
+#include <gtest/gtest.h>
+
+class Stream : public pkgDirStream
+{
+ public:
+ int count;
+ Stream () { count = 0; }
+ virtual bool DoItem(Item &Itm,int &Fd) { (void)Itm; (void)Fd; count++; return true; }
+ virtual bool Fail(Item &Itm,int Fd) { (void)Itm; (void)Fd; return true; }
+ virtual bool FinishedFile(Item &Itm,int Fd) { (void)Itm; (void)Fd; return true; }
+ virtual bool Process(Item &Itm,const unsigned char * Data, unsigned long Size,unsigned long Pos) { (void)Itm; (void) Data; (void) Size; (void) Pos; return true; }
+ virtual ~Stream() {}
+};
+
+TEST(ExtractTar, ExtractTar)
+{
+ EXPECT_EQ(system("tar c /etc/passwd 2>/dev/null | gzip > tar.tgz"), 0);
+
+ FileFd fd("tar.tgz", FileFd::ReadOnly);
+ unlink("tar.tgz");
+ ExtractTar tar(fd, -1, "gzip");
+
+ // Run multiple times, because we want to check not only that extraction
+ // works, but also that it works multiple times (important for python-apt)
+ for (int i = 0; i < 5; i++) {
+ Stream stream;
+ fd.Seek(0);
+ tar.Go(stream);
+ if (_error->PendingError()) {
+ _error->DumpErrors();
+ EXPECT_FALSE(true);
+ }
+ EXPECT_EQ(stream.count, 1);
+ }
+}
diff --git a/test/libapt/file-helpers.cc b/test/libapt/file-helpers.cc
new file mode 100644
index 0000000..aa16a2e
--- /dev/null
+++ b/test/libapt/file-helpers.cc
@@ -0,0 +1,83 @@
+#include <apt-pkg/fileutl.h>
+
+#include <string>
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+void helperCreateTemporaryDirectory(std::string const &id, std::string &dir)
+{
+ std::string const strtempdir = GetTempDir().append("/apt-tests-").append(id).append(".XXXXXX");
+ char * tempdir = strdup(strtempdir.c_str());
+ ASSERT_STREQ(tempdir, mkdtemp(tempdir));
+ dir = tempdir;
+ free(tempdir);
+}
+void helperRemoveDirectory(std::string const &dir)
+{
+ // basic sanity check to avoid removing random directories based on earlier failures
+ if (dir.find("/apt-tests-") == std::string::npos || dir.find_first_of("*?") != std::string::npos)
+ FAIL() << "Directory '" << dir << "' seems invalid. It is therefore not removed!";
+ else
+ ASSERT_EQ(0, system(std::string("rm -rf ").append(dir).c_str()));
+}
+void helperCreateFile(std::string const &dir, std::string const &name)
+{
+ std::string file = dir;
+ file.append("/");
+ file.append(name);
+ int const fd = creat(file.c_str(), 0600);
+ ASSERT_NE(-1, fd);
+ close(fd);
+}
+void helperCreateDirectory(std::string const &dir, std::string const &name)
+{
+ std::string file = dir;
+ file.append("/");
+ file.append(name);
+ ASSERT_TRUE(CreateDirectory(dir, file));
+}
+void helperCreateLink(std::string const &dir, std::string const &targetname, std::string const &linkname)
+{
+ std::string target = dir;
+ target.append("/");
+ target.append(targetname);
+ std::string link = dir;
+ link.append("/");
+ link.append(linkname);
+ ASSERT_EQ(0, symlink(target.c_str(), link.c_str()));
+}
+void helperCreateTemporaryFile(std::string const &id, FileFd &fd, std::string * const filename, char const * const content)
+{
+ std::string name("apt-test-");
+ name.append(id);
+ size_t const giventmp = name.find(".XXXXXX.");
+ if (giventmp == std::string::npos)
+ name.append(".XXXXXX");
+ char * tempfile = strdup(name.c_str());
+ ASSERT_STRNE(NULL, tempfile);
+ int tempfile_fd;
+ if (giventmp == std::string::npos)
+ tempfile_fd = mkstemp(tempfile);
+ else
+ tempfile_fd = mkstemps(tempfile, name.length() - (giventmp + 7));
+ ASSERT_NE(-1, tempfile_fd);
+ if (filename != NULL)
+ *filename = tempfile;
+ else
+ unlink(tempfile);
+ free(tempfile);
+
+ EXPECT_TRUE(fd.OpenDescriptor(tempfile_fd, FileFd::ReadWrite, true));
+ if (content != NULL)
+ {
+ ASSERT_TRUE(fd.Write(content, strlen(content)));
+ fd.Seek(0);
+ }
+}
diff --git a/test/libapt/file-helpers.h b/test/libapt/file-helpers.h
new file mode 100644
index 0000000..f639c1c
--- /dev/null
+++ b/test/libapt/file-helpers.h
@@ -0,0 +1,29 @@
+#ifndef APT_TESTS_FILE_HELPERS
+#define APT_TESTS_FILE_HELPERS
+
+#include <string>
+
+#include <gtest/gtest.h>
+
+class FileFd;
+
+#define createTemporaryDirectory(id, dir) \
+ ASSERT_NO_FATAL_FAILURE(helperCreateTemporaryDirectory(id, dir))
+void helperCreateTemporaryDirectory(std::string const &id, std::string &dir);
+#define removeDirectory(dir) \
+ ASSERT_NO_FATAL_FAILURE(helperRemoveDirectory(dir))
+void helperRemoveDirectory(std::string const &dir);
+#define createFile(dir, name) \
+ ASSERT_NO_FATAL_FAILURE(helperCreateFile(dir, name))
+void helperCreateFile(std::string const &dir, std::string const &name);
+#define createDirectory(dir, name) \
+ ASSERT_NO_FATAL_FAILURE(helperCreateDirectory(dir, name))
+void helperCreateDirectory(std::string const &dir, std::string const &name);
+#define createLink(dir, targetname, linkname) \
+ ASSERT_NO_FATAL_FAILURE(helperCreateLink(dir, targetname, linkname))
+void helperCreateLink(std::string const &dir, std::string const &targetname, std::string const &linkname);
+#define createTemporaryFile(id, fd, filename, content) \
+ ASSERT_NO_FATAL_FAILURE(helperCreateTemporaryFile(id, fd, filename, content))
+void helperCreateTemporaryFile(std::string const &id, FileFd &fd, std::string * const filename, char const * const content);
+
+#endif
diff --git a/test/libapt/fileutl_test.cc b/test/libapt/fileutl_test.cc
new file mode 100644
index 0000000..788ab76
--- /dev/null
+++ b/test/libapt/fileutl_test.cc
@@ -0,0 +1,408 @@
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <stdlib.h>
+#include <string.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+static void TestFileFd(mode_t const a_umask, mode_t const ExpectedFilePermission,
+ unsigned int const filemode, APT::Configuration::Compressor const &compressor)
+{
+ std::string trace;
+ strprintf(trace, "TestFileFd: Compressor: %s umask: %#o permission: %#o mode: %d", compressor.Name.c_str(), a_umask, ExpectedFilePermission, filemode);
+ SCOPED_TRACE(trace);
+
+ static const char* fname = "apt-filefd-test.txt";
+ if (FileExists(fname) == true)
+ {
+ EXPECT_EQ(0, unlink(fname));
+ }
+
+ FileFd f;
+ umask(a_umask);
+ EXPECT_TRUE(f.Open(fname, filemode, compressor));
+ EXPECT_TRUE(f.IsOpen());
+ EXPECT_FALSE(f.Failed());
+ EXPECT_EQ(umask(a_umask), a_umask);
+
+ std::string test = "This is a test!\n";
+ EXPECT_TRUE(f.Write(test.c_str(), test.size()));
+ EXPECT_TRUE(f.IsOpen());
+ EXPECT_FALSE(f.Failed());
+
+ f.Close();
+ EXPECT_FALSE(f.IsOpen());
+ EXPECT_FALSE(f.Failed());
+
+ EXPECT_TRUE(f.Open(fname, FileFd::ReadOnly, compressor));
+ EXPECT_TRUE(f.IsOpen());
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_NE(0u, f.FileSize());
+ EXPECT_FALSE(f.Failed());
+ EXPECT_NE(0, f.ModificationTime());
+ EXPECT_FALSE(f.Failed());
+
+ // ensure the memory is as predictably messed up
+#define APT_INIT_READBACK \
+ char readback[20]; \
+ memset(readback, 'D', sizeof(readback)*sizeof(readback[0])); \
+ readback[19] = '\0';
+#define EXPECT_N_STR(expect, actual) \
+ EXPECT_EQ(0, strncmp(expect, actual, strlen(expect)));
+ {
+ APT_INIT_READBACK
+ char const * const expect = "DDDDDDDDDDDDDDDDDDD";
+ EXPECT_STREQ(expect,readback);
+ EXPECT_N_STR(expect, readback);
+ }
+ {
+ APT_INIT_READBACK
+ char const * const expect = "This";
+ EXPECT_TRUE(f.Read(readback, strlen(expect)));
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_N_STR(expect, readback);
+ EXPECT_EQ(strlen(expect), f.Tell());
+ }
+ {
+ APT_INIT_READBACK
+ char const * const expect = "test!\n";
+ EXPECT_TRUE(f.Skip((test.size() - f.Tell()) - strlen(expect)));
+ EXPECT_TRUE(f.Read(readback, strlen(expect)));
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_N_STR(expect, readback);
+ EXPECT_EQ(test.size(), f.Tell());
+ }
+ // Non-zero backwards seek
+ {
+ APT_INIT_READBACK
+ char const * const expect = "is";
+ EXPECT_EQ(test.size(), f.Tell());
+ EXPECT_TRUE(f.Seek(5));
+ EXPECT_TRUE(f.Read(readback, strlen(expect)));
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_N_STR(expect, readback);
+ EXPECT_EQ(7u, f.Tell());
+ }
+ {
+ APT_INIT_READBACK
+ EXPECT_TRUE(f.Seek(0));
+ EXPECT_FALSE(f.Eof());
+ EXPECT_TRUE(f.Read(readback, 20, true));
+ EXPECT_FALSE(f.Failed());
+ EXPECT_TRUE(f.Eof());
+ EXPECT_N_STR(test.c_str(), readback);
+ EXPECT_EQ(f.Size(), f.Tell());
+ }
+ {
+ APT_INIT_READBACK
+ EXPECT_TRUE(f.Seek(0));
+ EXPECT_FALSE(f.Eof());
+ EXPECT_TRUE(f.Read(readback, test.size(), true));
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_N_STR(test.c_str(), readback);
+ EXPECT_EQ(f.Size(), f.Tell());
+ }
+ {
+ APT_INIT_READBACK
+ EXPECT_TRUE(f.Seek(0));
+ EXPECT_FALSE(f.Eof());
+ unsigned long long actual;
+ EXPECT_TRUE(f.Read(readback, 20, &actual));
+ EXPECT_FALSE(f.Failed());
+ EXPECT_TRUE(f.Eof());
+ EXPECT_EQ(test.size(), actual);
+ EXPECT_N_STR(test.c_str(), readback);
+ EXPECT_EQ(f.Size(), f.Tell());
+ }
+ {
+ APT_INIT_READBACK
+ EXPECT_TRUE(f.Seek(0));
+ EXPECT_FALSE(f.Eof());
+ f.ReadLine(readback, 20);
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_EQ(test, readback);
+ EXPECT_EQ(f.Size(), f.Tell());
+ }
+ {
+ APT_INIT_READBACK
+ EXPECT_TRUE(f.Seek(0));
+ EXPECT_FALSE(f.Eof());
+ char const * const expect = "This";
+ f.ReadLine(readback, strlen(expect) + 1);
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_N_STR(expect, readback);
+ EXPECT_EQ(strlen(expect), f.Tell());
+ }
+#undef APT_INIT_READBACK
+ {
+ test.erase(test.length() - 1);
+ EXPECT_TRUE(f.Seek(0));
+ EXPECT_FALSE(f.Eof());
+ std::string line;
+ EXPECT_TRUE(f.ReadLine(line));
+ EXPECT_FALSE(f.Failed());
+ EXPECT_FALSE(f.Eof());
+ EXPECT_EQ(line.length(), test.length());
+ EXPECT_EQ(line.length() + 1, f.Tell());
+ EXPECT_EQ(f.Size(), f.Tell());
+ EXPECT_EQ(line, test);
+ }
+
+ f.Close();
+ EXPECT_FALSE(f.IsOpen());
+ EXPECT_FALSE(f.Failed());
+
+ // regression test for permission bug LP: #1304657
+ struct stat buf;
+ EXPECT_EQ(0, stat(fname, &buf));
+ EXPECT_EQ(0, unlink(fname));
+ EXPECT_EQ(ExpectedFilePermission, buf.st_mode & 0777);
+}
+
+static void TestFileFd(unsigned int const filemode)
+{
+ auto const compressors = APT::Configuration::getCompressors();
+ EXPECT_EQ(8u, compressors.size());
+ bool atLeastOneWasTested = false;
+ for (auto const &c: compressors)
+ {
+ if ((filemode & FileFd::ReadWrite) == FileFd::ReadWrite &&
+ (c.Name.empty() != true && c.Binary.empty() != true))
+ continue;
+ atLeastOneWasTested = true;
+ TestFileFd(0002, 0664, filemode, c);
+ TestFileFd(0022, 0644, filemode, c);
+ TestFileFd(0077, 0600, filemode, c);
+ TestFileFd(0026, 0640, filemode, c);
+ }
+ EXPECT_TRUE(atLeastOneWasTested);
+}
+
+TEST(FileUtlTest, FileFD)
+{
+ // testing the (un)compress via pipe, as the 'real' compressors are usually built in via libraries
+ _config->Set("APT::Compressor::rev::Name", "rev");
+ _config->Set("APT::Compressor::rev::Extension", ".reversed");
+ _config->Set("APT::Compressor::rev::Binary", "rev");
+ _config->Set("APT::Compressor::rev::Cost", 10);
+ auto const compressors = APT::Configuration::getCompressors(false);
+ EXPECT_EQ(8u, compressors.size());
+ EXPECT_TRUE(std::any_of(compressors.begin(), compressors.end(), [](APT::Configuration::Compressor const &c) { return c.Name == "rev"; }));
+
+ std::string const startdir = SafeGetCWD();
+ EXPECT_FALSE(startdir.empty());
+ std::string tempdir;
+ createTemporaryDirectory("filefd", tempdir);
+ EXPECT_EQ(0, chdir(tempdir.c_str()));
+
+ TestFileFd(FileFd::WriteOnly | FileFd::Create);
+ TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Empty);
+ TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive);
+ TestFileFd(FileFd::WriteOnly | FileFd::Atomic);
+ TestFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Atomic);
+ // short-hands for ReadWrite with these modes
+ TestFileFd(FileFd::WriteEmpty);
+ TestFileFd(FileFd::WriteAny);
+ TestFileFd(FileFd::WriteTemp);
+ TestFileFd(FileFd::WriteAtomic);
+
+ EXPECT_EQ(0, chdir(startdir.c_str()));
+ removeDirectory(tempdir);
+}
+TEST(FileUtlTest, Glob)
+{
+ std::vector<std::string> files;
+ // normal match
+ files = Glob("*MakeLists.txt");
+ EXPECT_EQ(1u, files.size());
+
+ // not there
+ files = Glob("xxxyyyzzz");
+ EXPECT_TRUE(files.empty());
+ EXPECT_FALSE(_error->PendingError());
+
+ // many matches (number is a bit random)
+ files = Glob("*.cc");
+ EXPECT_LT(10u, files.size());
+}
+TEST(FileUtlTest, GetTempDir)
+{
+ char const * const envtmp = getenv("TMPDIR");
+ std::string old_tmpdir;
+ if (envtmp != NULL)
+ old_tmpdir = envtmp;
+
+ unsetenv("TMPDIR");
+ EXPECT_EQ("/tmp", GetTempDir());
+
+ setenv("TMPDIR", "", 1);
+ EXPECT_EQ("/tmp", GetTempDir());
+
+ setenv("TMPDIR", "/not-there-no-really-not", 1);
+ EXPECT_EQ("/tmp", GetTempDir());
+
+ // root can access everything, so /usr will be accepted
+ if (geteuid() != 0)
+ {
+ // here but not accessible for non-roots
+ setenv("TMPDIR", "/usr", 1);
+ EXPECT_EQ("/tmp", GetTempDir());
+ }
+
+ // files are no good for tmpdirs, too
+ setenv("TMPDIR", "/dev/null", 1);
+ EXPECT_EQ("/tmp", GetTempDir());
+
+ setenv("TMPDIR", "/var/tmp", 1);
+ EXPECT_EQ("/var/tmp", GetTempDir());
+
+ unsetenv("TMPDIR");
+ if (old_tmpdir.empty() == false)
+ setenv("TMPDIR", old_tmpdir.c_str(), 1);
+}
+TEST(FileUtlTest, Popen)
+{
+ FileFd Fd;
+ pid_t Child;
+ char buf[1024];
+ std::string s;
+ unsigned long long n = 0;
+ std::vector<std::string> OpenFds;
+
+ // count Fds to ensure we don't have a resource leak
+ if(FileExists("/proc/self/fd"))
+ OpenFds = Glob("/proc/self/fd/*");
+
+ // output something
+ const char* Args[10] = {"/bin/echo", "meepmeep", NULL};
+ EXPECT_TRUE(Popen(Args, Fd, Child, FileFd::ReadOnly));
+ EXPECT_TRUE(Fd.Read(buf, sizeof(buf)-1, &n));
+ buf[n] = 0;
+ EXPECT_NE(n, 0u);
+ EXPECT_STREQ(buf, "meepmeep\n");
+
+ // wait for the child to exit and cleanup
+ EXPECT_TRUE(ExecWait(Child, "PopenRead"));
+ EXPECT_TRUE(Fd.Close());
+
+ // ensure that after a close all is good again
+ if(FileExists("/proc/self/fd"))
+ {
+ EXPECT_EQ(Glob("/proc/self/fd/*").size(), OpenFds.size());
+ }
+
+ // ReadWrite is not supported
+ _error->PushToStack();
+ EXPECT_FALSE(Popen(Args, Fd, Child, FileFd::ReadWrite));
+ EXPECT_FALSE(Fd.IsOpen());
+ EXPECT_FALSE(Fd.Failed());
+ EXPECT_TRUE(_error->PendingError());
+ _error->RevertToStack();
+
+ // write something
+ Args[0] = "/bin/bash";
+ Args[1] = "-c";
+ Args[2] = "read";
+ Args[3] = NULL;
+ EXPECT_TRUE(Popen(Args, Fd, Child, FileFd::WriteOnly));
+ s = "\n";
+ EXPECT_TRUE(Fd.Write(s.c_str(), s.length()));
+ EXPECT_TRUE(Fd.Close());
+ EXPECT_FALSE(Fd.IsOpen());
+ EXPECT_FALSE(Fd.Failed());
+ EXPECT_TRUE(ExecWait(Child, "PopenWrite"));
+}
+TEST(FileUtlTest, flAbsPath)
+{
+ std::string cwd = SafeGetCWD();
+ int res = chdir("/etc/");
+ EXPECT_EQ(res, 0);
+ std::string p = flAbsPath("passwd");
+ EXPECT_EQ(p, "/etc/passwd");
+
+ res = chdir(cwd.c_str());
+ EXPECT_EQ(res, 0);
+}
+
+static void TestDevNullFileFd(unsigned int const filemode)
+{
+ SCOPED_TRACE(filemode);
+ FileFd f("/dev/null", filemode);
+ EXPECT_FALSE(f.Failed());
+ EXPECT_TRUE(f.IsOpen());
+ EXPECT_TRUE(f.IsOpen());
+
+ std::string test = "This is a test!\n";
+ EXPECT_TRUE(f.Write(test.c_str(), test.size()));
+ EXPECT_TRUE(f.IsOpen());
+ EXPECT_FALSE(f.Failed());
+
+ f.Close();
+ EXPECT_FALSE(f.IsOpen());
+ EXPECT_FALSE(f.Failed());
+}
+TEST(FileUtlTest, WorkingWithDevNull)
+{
+ TestDevNullFileFd(FileFd::WriteOnly | FileFd::Create);
+ TestDevNullFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Empty);
+ TestDevNullFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Exclusive);
+ TestDevNullFileFd(FileFd::WriteOnly | FileFd::Atomic);
+ TestDevNullFileFd(FileFd::WriteOnly | FileFd::Create | FileFd::Atomic);
+ // short-hands for ReadWrite with these modes
+ TestDevNullFileFd(FileFd::WriteEmpty);
+ TestDevNullFileFd(FileFd::WriteAny);
+ TestDevNullFileFd(FileFd::WriteTemp);
+ TestDevNullFileFd(FileFd::WriteAtomic);
+}
+constexpr char const * const TESTSTRING = "This is a test";
+static void TestFailingAtomicKeepsFile(char const * const label, std::string const &filename)
+{
+ SCOPED_TRACE(label);
+ EXPECT_TRUE(FileExists(filename));
+ FileFd fd;
+ EXPECT_TRUE(fd.Open(filename, FileFd::ReadOnly));
+ char buffer[50];
+ EXPECT_NE(nullptr, fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(TESTSTRING, buffer);
+}
+TEST(FileUtlTest, FailingAtomic)
+{
+ FileFd fd;
+ std::string filename;
+ createTemporaryFile("failingatomic", fd, &filename, TESTSTRING);
+ TestFailingAtomicKeepsFile("init", filename);
+
+ FileFd f;
+ EXPECT_TRUE(f.Open(filename, FileFd::ReadWrite | FileFd::Atomic));
+ f.EraseOnFailure();
+ EXPECT_FALSE(f.Failed());
+ EXPECT_TRUE(f.IsOpen());
+ TestFailingAtomicKeepsFile("before-fail", filename);
+ EXPECT_TRUE(f.Write("Bad file write", 10));
+ f.OpFail();
+ EXPECT_TRUE(f.Failed());
+ TestFailingAtomicKeepsFile("after-fail", filename);
+ EXPECT_TRUE(f.Close());
+ TestFailingAtomicKeepsFile("closed", filename);
+
+ if (filename.empty() == false)
+ unlink(filename.c_str());
+}
diff --git a/test/libapt/getarchitectures_test.cc b/test/libapt/getarchitectures_test.cc
new file mode 100644
index 0000000..57e9a5f
--- /dev/null
+++ b/test/libapt/getarchitectures_test.cc
@@ -0,0 +1,77 @@
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+TEST(ArchitecturesTest,SimpleLists)
+{
+ _config->Clear();
+ std::vector<std::string> vec;
+
+ _config->Set("APT::Architectures::1", "i386");
+ _config->Set("APT::Architectures::2", "amd64");
+ vec = APT::Configuration::getArchitectures(false);
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("i386", vec[0]);
+ EXPECT_EQ("amd64", vec[1]);
+
+ _config->Set("APT::Architecture", "i386");
+ vec = APT::Configuration::getArchitectures(false);
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("i386", vec[0]);
+ EXPECT_EQ("amd64", vec[1]);
+
+ _config->Set("APT::Architectures::2", "");
+ vec = APT::Configuration::getArchitectures(false);
+ ASSERT_EQ(1u, vec.size());
+ EXPECT_EQ("i386", vec[0]);
+
+ _config->Set("APT::Architecture", "armel");
+ vec = APT::Configuration::getArchitectures(false);
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("armel", vec[0]);
+ EXPECT_EQ("i386", vec[1]);
+
+ _config->Set("APT::Architectures::2", "armel");
+ vec = APT::Configuration::getArchitectures(false);
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("i386", vec[0]);
+ EXPECT_EQ("armel", vec[1]);
+
+ _config->Set("APT::Architectures", "armel,armhf");
+ vec = APT::Configuration::getArchitectures(false);
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("armel", vec[0]);
+ EXPECT_EQ("armhf", vec[1]);
+ _config->Clear();
+}
+TEST(ArchitecturesTest,Duplicates)
+{
+ _config->Clear();
+
+ _config->Set("APT::Architecture", "armel");
+ _config->Set("APT::Architectures::", "i386");
+ _config->Set("APT::Architectures::", "amd64");
+ _config->Set("APT::Architectures::", "i386");
+ _config->Set("APT::Architectures::", "armel");
+ _config->Set("APT::Architectures::", "i386");
+ _config->Set("APT::Architectures::", "amd64");
+ _config->Set("APT::Architectures::", "armel");
+ _config->Set("APT::Architectures::", "armel");
+ _config->Set("APT::Architectures::", "amd64");
+ _config->Set("APT::Architectures::", "amd64");
+ std::vector<std::string> vec = _config->FindVector("APT::Architectures");
+ ASSERT_EQ(10u, vec.size());
+ vec = APT::Configuration::getArchitectures(false);
+ ASSERT_EQ(3u, vec.size());
+ EXPECT_EQ("i386", vec[0]);
+ EXPECT_EQ("amd64", vec[1]);
+ EXPECT_EQ("armel", vec[2]);
+
+ _config->Clear();
+}
diff --git a/test/libapt/getlanguages_test.cc b/test/libapt/getlanguages_test.cc
new file mode 100644
index 0000000..7146c5a
--- /dev/null
+++ b/test/libapt/getlanguages_test.cc
@@ -0,0 +1,241 @@
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <algorithm>
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+TEST(LanguagesTest,Environment)
+{
+ _config->Clear();
+
+ char const* env[2];
+ env[0] = "de_DE.UTF-8";
+ env[1] = "";
+
+ std::vector<std::string> vec = APT::Configuration::getLanguages(false, false, env);
+ ASSERT_EQ(3u, vec.size());
+ EXPECT_EQ("de_DE", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+
+ // Special: Check if the cache is actually in use
+ env[0] = "en_GB.UTF-8";
+ vec = APT::Configuration::getLanguages(false, true, env);
+ ASSERT_EQ(3u, vec.size());
+ EXPECT_EQ("de_DE", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+
+ env[0] = "en_GB.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("en_GB", vec[0]);
+ EXPECT_EQ("en", vec[1]);
+
+ // esperanto
+ env[0] = "eo.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ ASSERT_EQ(2u, vec.size());
+ EXPECT_EQ("eo", vec[0]);
+ EXPECT_EQ("en", vec[1]);
+
+ env[0] = "tr_DE@euro";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(3u, vec.size());
+ EXPECT_EQ("tr_DE", vec[0]);
+ EXPECT_EQ("tr", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+
+ env[0] = "de_NO";
+ env[1] = "de_NO:en_GB:nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(6u, vec.size());
+ EXPECT_EQ("de_NO", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+ EXPECT_EQ("en_GB", vec[2]);
+ EXPECT_EQ("nb_NO", vec[3]);
+ EXPECT_EQ("nb", vec[4]);
+ EXPECT_EQ("en", vec[5]);
+
+ env[0] = "pt_PR.UTF-8";
+ env[1] = "";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(3u, vec.size());
+ EXPECT_EQ("pt_PR", vec[0]);
+ EXPECT_EQ("pt", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+
+ env[0] = "ast_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env); // bogus, but syntactical correct
+ EXPECT_EQ(3u, vec.size());
+ EXPECT_EQ("ast_DE", vec[0]);
+ EXPECT_EQ("ast", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+
+ env[0] = "C";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("en", vec[0]);
+
+ _config->Set("Acquire::Languages", "none");
+ env[0] = "C";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_TRUE(vec.empty());
+
+ _config->Set("Acquire::Languages", "environment");
+ env[0] = "C";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("en", vec[0]);
+
+ _config->Set("Acquire::Languages", "de");
+ env[0] = "C";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("de", vec[0]);
+
+ _config->Set("Acquire::Languages", "fr");
+ env[0] = "ast_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("fr", vec[0]);
+
+ _config->Set("Acquire::Languages", "environment,en");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(3u, vec.size());
+ EXPECT_EQ("de_DE", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+ _config->Set("Acquire::Languages", "");
+
+ _config->Set("Acquire::Languages::1", "environment");
+ _config->Set("Acquire::Languages::2", "en");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(3u, vec.size());
+ EXPECT_EQ("de_DE", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+
+ _config->Set("Acquire::Languages::3", "de");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(3u, vec.size());
+ EXPECT_EQ("de_DE", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+
+ _config->Clear();
+}
+
+TEST(LanguagesTest,TranslationFiles)
+{
+ _config->Clear();
+ _config->Set("Acquire::Languages::1", "environment");
+ _config->Set("Acquire::Languages::2", "en");
+ _config->Set("Acquire::Languages::3", "de");
+
+ char const* env[2];
+ env[0] = "de_DE.UTF-8";
+ env[1] = "";
+
+ std::string tempdir;
+ createTemporaryDirectory("languages", tempdir);
+
+#define createTranslation(lang) \
+ createFile(tempdir, std::string("/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-").append(lang));
+
+ createTranslation("tr");
+ createTranslation("pt");
+ createTranslation("se~");
+ createTranslation("st.bak");
+ createTranslation("ast_DE");
+ createTranslation("tlh%5fDE");
+
+ _config->Set("Dir::State::lists", tempdir);
+ std::vector<std::string> vec = APT::Configuration::getLanguages(true, false, env);
+ EXPECT_EQ(8u, vec.size());
+ EXPECT_EQ("de_DE", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+ EXPECT_EQ("en", vec[2]);
+ EXPECT_EQ("none", vec[3]);
+ EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "pt"));
+ EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "tr"));
+ EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "ast_DE"));
+ EXPECT_NE(vec.end(), std::find(vec.begin(), vec.end(), "tlh_DE"));
+ EXPECT_NE(vec[4], vec[5]);
+ EXPECT_NE(vec[4], vec[6]);
+ EXPECT_NE(vec[4], vec[7]);
+ EXPECT_NE(vec[5], vec[6]);
+ EXPECT_NE(vec[5], vec[7]);
+ EXPECT_NE(vec[6], vec[7]);
+
+ _config->Set("Acquire::Languages", "none");
+ vec = APT::Configuration::getLanguages(true, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("none", vec[0]);
+ _config->Set("Acquire::Languages", "");
+
+ _config->Set("Dir::State::lists", "/non-existing-dir");
+ _config->Set("Acquire::Languages::1", "none");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_TRUE(vec.empty());
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(true, false, env);
+ EXPECT_EQ(2u, vec.size());
+ EXPECT_EQ("en", vec[0]);
+ EXPECT_EQ("de", vec[1]);
+
+ _config->Set("Acquire::Languages::1", "fr");
+ _config->Set("Acquire::Languages", "de_DE");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(false, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("de_DE", vec[0]);
+
+ _config->Set("Acquire::Languages", "none");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(true, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("none", vec[0]);
+
+ _error->PushToStack();
+ _config->Set("Acquire::Languages", "");
+ //FIXME: Remove support for this deprecated setting
+ _config->Set("APT::Acquire::Translation", "ast_DE");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(true, false, env);
+ EXPECT_EQ(2u, vec.size());
+ EXPECT_EQ("ast_DE", vec[0]);
+ EXPECT_EQ("en", vec[1]);
+ _config->Set("APT::Acquire::Translation", "none");
+ env[0] = "de_DE.UTF-8";
+ vec = APT::Configuration::getLanguages(true, false, env);
+ EXPECT_EQ(1u, vec.size());
+ EXPECT_EQ("en", vec[0]);
+
+ // discard the deprecation warning for APT::Acquire::Translation
+ if (_error->PendingError())
+ _error->MergeWithStack();
+ else
+ _error->RevertToStack();
+
+ EXPECT_EQ(0, system(std::string("rm -rf ").append(tempdir).c_str()));
+ _config->Clear();
+}
diff --git a/test/libapt/getlistoffilesindir_test.cc b/test/libapt/getlistoffilesindir_test.cc
new file mode 100644
index 0000000..f002355
--- /dev/null
+++ b/test/libapt/getlistoffilesindir_test.cc
@@ -0,0 +1,114 @@
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+#define P(x) tempdir + "/" + x
+
+TEST(FileUtlTest,GetListOfFilesInDir)
+{
+ std::string tempdir;
+ createTemporaryDirectory("getlistoffiles", tempdir);
+
+ createFile(tempdir, "anormalfile");
+ createFile(tempdir, "01yet-anothernormalfile");
+ createFile(tempdir, "anormalapt.conf");
+ createFile(tempdir, "01yet-anotherapt.conf");
+ createFile(tempdir, "anormalapt.list");
+ createFile(tempdir, "01yet-anotherapt.list");
+ createFile(tempdir, "wrongextension.wron");
+ createFile(tempdir, "wrong-extension.wron");
+ createFile(tempdir, "strangefile.");
+ createFile(tempdir, "s.t.r.a.n.g.e.f.i.l.e");
+ createFile(tempdir, ".hiddenfile");
+ createFile(tempdir, ".hiddenfile.conf");
+ createFile(tempdir, ".hiddenfile.list");
+ createFile(tempdir, "multi..dot");
+ createFile(tempdir, "multi.dot.conf");
+ createFile(tempdir, "multi.dot.list");
+ createFile(tempdir, "disabledfile.disabled");
+ createFile(tempdir, "disabledfile.conf.disabled");
+ createFile(tempdir, "disabledfile.list.disabled");
+ createFile(tempdir, "invälid.conf");
+ createFile(tempdir, "invalíd");
+ createFile(tempdir, "01invalíd");
+ createDirectory(tempdir, "invaliddir");
+ createDirectory(tempdir, "directory.conf");
+ createDirectory(tempdir, "directory.list");
+ createDirectory(tempdir, "directory.wron");
+ createDirectory(tempdir, "directory.list.disabled");
+ createLink(tempdir, "anormalfile", "linkedfile.list");
+ createLink(tempdir, "invaliddir", "linkeddir.list");
+ createLink(tempdir, "non-existing-file", "brokenlink.list");
+
+ // Files with no extension
+ _error->PushToStack();
+ std::vector<std::string> files = GetListOfFilesInDir(tempdir, "", true);
+ ASSERT_EQ(2u, files.size());
+ EXPECT_EQ(P("01yet-anothernormalfile"), files[0]);
+ EXPECT_EQ(P("anormalfile"), files[1]);
+
+ // Files with no extension - should be the same as above
+ files = GetListOfFilesInDir(tempdir, "", true, true);
+ ASSERT_EQ(2u, files.size());
+ EXPECT_EQ(P("01yet-anothernormalfile"), files[0]);
+ EXPECT_EQ(P("anormalfile"), files[1]);
+
+ // Files with impossible extension
+ files = GetListOfFilesInDir(tempdir, "impossible", true);
+ EXPECT_TRUE(files.empty());
+
+ // Files with impossible or no extension
+ files = GetListOfFilesInDir(tempdir, "impossible", true, true);
+ ASSERT_EQ(2u, files.size());
+ EXPECT_EQ(P("01yet-anothernormalfile"), files[0]);
+ EXPECT_EQ(P("anormalfile"), files[1]);
+
+ // Files with list extension - nothing more
+ files = GetListOfFilesInDir(tempdir, "list", true);
+ ASSERT_EQ(4u, files.size());
+ EXPECT_EQ(P("01yet-anotherapt.list"), files[0]);
+ EXPECT_EQ(P("anormalapt.list"), files[1]);
+ EXPECT_EQ(P("linkedfile.list"), files[2]);
+ EXPECT_EQ(P("multi.dot.list"), files[3]);
+
+ // Files with conf or no extension
+ files = GetListOfFilesInDir(tempdir, "conf", true, true);
+ ASSERT_EQ(5u, files.size());
+ EXPECT_EQ(P("01yet-anotherapt.conf"), files[0]);
+ EXPECT_EQ(P("01yet-anothernormalfile"), files[1]);
+ EXPECT_EQ(P("anormalapt.conf"), files[2]);
+ EXPECT_EQ(P("anormalfile"), files[3]);
+ EXPECT_EQ(P("multi.dot.conf"), files[4]);
+
+ // Files with disabled extension - nothing more
+ files = GetListOfFilesInDir(tempdir, "disabled", true);
+ ASSERT_EQ(3u, files.size());
+ EXPECT_EQ(P("disabledfile.conf.disabled"), files[0]);
+ EXPECT_EQ(P("disabledfile.disabled"), files[1]);
+ EXPECT_EQ(P("disabledfile.list.disabled"), files[2]);
+
+ // Files with disabled or no extension
+ files = GetListOfFilesInDir(tempdir, "disabled", true, true);
+ ASSERT_EQ(5u, files.size());
+ EXPECT_EQ(P("01yet-anothernormalfile"), files[0]);
+ EXPECT_EQ(P("anormalfile"), files[1]);
+ EXPECT_EQ(P("disabledfile.conf.disabled"), files[2]);
+ EXPECT_EQ(P("disabledfile.disabled"), files[3]);
+ EXPECT_EQ(P("disabledfile.list.disabled"), files[4]);
+
+ // discard the unknown file extension messages
+ if (_error->PendingError())
+ _error->MergeWithStack();
+ else
+ _error->RevertToStack();
+ removeDirectory(tempdir);
+}
diff --git a/test/libapt/globalerror_test.cc b/test/libapt/globalerror_test.cc
new file mode 100644
index 0000000..ff14d46
--- /dev/null
+++ b/test/libapt/globalerror_test.cc
@@ -0,0 +1,169 @@
+#include <config.h>
+
+#include <apt-pkg/error.h>
+
+#include <string>
+#include <errno.h>
+#include <stddef.h>
+#include <string.h>
+
+#include <gtest/gtest.h>
+
+TEST(GlobalErrorTest,BasicDiscard)
+{
+ GlobalError e;
+ EXPECT_TRUE(e.empty());
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_FALSE(e.Notice("%s Notice", "A"));
+ EXPECT_TRUE(e.empty());
+ EXPECT_FALSE(e.empty(GlobalError::DEBUG));
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
+ EXPECT_TRUE(e.PendingError());
+
+ std::string text;
+ EXPECT_FALSE(e.PopMessage(text));
+ EXPECT_TRUE(e.PendingError());
+ EXPECT_EQ("A Notice", text);
+ EXPECT_TRUE(e.PopMessage(text));
+ EXPECT_EQ("Something horrible happened 2 times", text);
+ EXPECT_TRUE(e.empty(GlobalError::DEBUG));
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
+ EXPECT_TRUE(e.PendingError());
+ EXPECT_FALSE(e.empty(GlobalError::FATAL));
+ e.Discard();
+
+ EXPECT_TRUE(e.empty());
+ EXPECT_FALSE(e.PendingError());
+}
+TEST(GlobalErrorTest,StackPushing)
+{
+ GlobalError e;
+ EXPECT_FALSE(e.Notice("%s Notice", "A"));
+ EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
+ EXPECT_TRUE(e.PendingError());
+ EXPECT_FALSE(e.empty(GlobalError::NOTICE));
+ e.PushToStack();
+ EXPECT_TRUE(e.empty(GlobalError::NOTICE));
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_FALSE(e.Warning("%s Warning", "A"));
+ EXPECT_TRUE(e.empty(GlobalError::ERROR));
+ EXPECT_FALSE(e.PendingError());
+ e.RevertToStack();
+ EXPECT_FALSE(e.empty(GlobalError::ERROR));
+ EXPECT_TRUE(e.PendingError());
+
+ std::string text;
+ EXPECT_FALSE(e.PopMessage(text));
+ EXPECT_TRUE(e.PendingError());
+ EXPECT_EQ("A Notice", text);
+ EXPECT_TRUE(e.PopMessage(text));
+ EXPECT_EQ("Something horrible happened 2 times", text);
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_TRUE(e.empty());
+
+ EXPECT_FALSE(e.Notice("%s Notice", "A"));
+ EXPECT_FALSE(e.Error("%s horrible %s %d times", "Something", "happened", 2));
+ EXPECT_TRUE(e.PendingError());
+ EXPECT_FALSE(e.empty(GlobalError::NOTICE));
+ e.PushToStack();
+ EXPECT_TRUE(e.empty(GlobalError::NOTICE));
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_FALSE(e.Warning("%s Warning", "A"));
+ EXPECT_TRUE(e.empty(GlobalError::ERROR));
+ EXPECT_FALSE(e.PendingError());
+ e.MergeWithStack();
+ EXPECT_FALSE(e.empty(GlobalError::ERROR));
+ EXPECT_TRUE(e.PendingError());
+ EXPECT_FALSE(e.PopMessage(text));
+ EXPECT_TRUE(e.PendingError());
+ EXPECT_EQ("A Notice", text);
+ EXPECT_TRUE(e.PopMessage(text));
+ EXPECT_EQ("Something horrible happened 2 times", text);
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_FALSE(e.empty());
+ EXPECT_FALSE(e.PopMessage(text));
+ EXPECT_EQ("A Warning", text);
+ EXPECT_TRUE(e.empty());
+}
+TEST(GlobalErrorTest,Errno)
+{
+ GlobalError e;
+ std::string const textOfErrnoZero(strerror(0));
+ errno = 0;
+ EXPECT_FALSE(e.Errno("errno", "%s horrible %s %d times", "Something", "happened", 2));
+ EXPECT_FALSE(e.empty());
+ EXPECT_TRUE(e.PendingError());
+ std::string text;
+ EXPECT_TRUE(e.PopMessage(text));
+ EXPECT_FALSE(e.PendingError());
+ EXPECT_EQ(std::string("Something horrible happened 2 times - errno (0: ").append(textOfErrnoZero).append(")"), text);
+ EXPECT_TRUE(e.empty());
+}
+TEST(GlobalErrorTest,LongMessage)
+{
+ GlobalError e;
+ std::string const textOfErrnoZero(strerror(0));
+ errno = 0;
+ std::string text, longText;
+ for (size_t i = 0; i < 500; ++i)
+ longText.append("a");
+ EXPECT_FALSE(e.Error("%s horrible %s %d times", longText.c_str(), "happened", 2));
+ EXPECT_TRUE(e.PopMessage(text));
+ EXPECT_EQ(longText + " horrible happened 2 times", text);
+
+ EXPECT_FALSE(e.Errno("errno", "%s horrible %s %d times", longText.c_str(), "happened", 2));
+ EXPECT_TRUE(e.PopMessage(text));
+ EXPECT_EQ(longText + " horrible happened 2 times - errno (0: " + textOfErrnoZero + ")", text);
+
+ EXPECT_FALSE(e.Error("%s horrible %s %d times", longText.c_str(), "happened", 2));
+ std::ostringstream out;
+ e.DumpErrors(out);
+ EXPECT_EQ(std::string("E: ").append(longText).append(" horrible happened 2 times\n"), out.str());
+
+ EXPECT_FALSE(e.Errno("errno", "%s horrible %s %d times", longText.c_str(), "happened", 2));
+ std::ostringstream out2;
+ e.DumpErrors(out2);
+ EXPECT_EQ(std::string("E: ").append(longText).append(" horrible happened 2 times - errno (0: ").append(textOfErrnoZero).append(")\n"), out2.str());
+}
+TEST(GlobalErrorTest,UTF8Message)
+{
+ GlobalError e;
+ std::string text;
+
+ EXPECT_FALSE(e.Warning("Репозиторий не обновлён и будут %d %s", 4, "test"));
+ EXPECT_FALSE(e.PopMessage(text));
+ EXPECT_EQ("Репозиторий не обновлён и будут 4 test", text);
+
+ EXPECT_FALSE(e.Warning("Репозиторий не обновлён и будут %d %s", 4, "test"));
+ std::ostringstream out;
+ e.DumpErrors(out);
+ EXPECT_EQ("W: Репозиторий не обновлён и будут 4 test\n", out.str());
+
+ std::string longText;
+ for (size_t i = 0; i < 50; ++i)
+ longText.append("РезийбёбAZ");
+ EXPECT_FALSE(e.Warning("%s", longText.c_str()));
+ EXPECT_FALSE(e.PopMessage(text));
+ EXPECT_EQ(longText, text);
+}
+TEST(GlobalErrorTest,MultiLineMessage)
+{
+ GlobalError e;
+ std::string text;
+
+ EXPECT_FALSE(e.Warning("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\n%s?\rGood because I don't.", "Right"));
+ EXPECT_FALSE(e.PopMessage(text));
+ EXPECT_EQ("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\nRight?\rGood because I don't.", text);
+
+ EXPECT_FALSE(e.Warning("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\n%s?\rGood because I don't.", "Right"));
+ std::ostringstream out;
+ e.DumpErrors(out);
+ EXPECT_EQ("W: Sometimes one line isn't enough.\n You do know what I mean, right?\n Right?\n Good because I don't.\n", out.str());
+
+ EXPECT_FALSE(e.Warning("Sometimes one line isn't enough.\nYou do know what I mean, right?\r\n%s?\rGood because I don't.\n", "Right"));
+ std::ostringstream out2;
+ e.DumpErrors(out2);
+ EXPECT_EQ("W: Sometimes one line isn't enough.\n You do know what I mean, right?\n Right?\n Good because I don't.\n", out2.str());
+}
diff --git a/test/libapt/gtest_runner.cc b/test/libapt/gtest_runner.cc
new file mode 100644
index 0000000..5620aa0
--- /dev/null
+++ b/test/libapt/gtest_runner.cc
@@ -0,0 +1,26 @@
+#include <gtest/gtest.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/pkgsystem.h>
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ if (pkgInitSystem(*_config, _system) == false)
+ return 42;
+ int const result = RUN_ALL_TESTS();
+ if (_error->empty() == false)
+ {
+ std::cerr << "The test generated the following global messages:" << std::endl;
+ _error->DumpErrors(std::cerr);
+ // messages on the stack can't be right, error out
+ // even if we have no idea where this message came from
+ if (result == 0)
+ {
+ std::cerr << "All tests successful, but messages were generated, so still a failure!" << std::endl;
+ return 29;
+ }
+ }
+ return result;
+}
diff --git a/test/libapt/hashsums_test.cc b/test/libapt/hashsums_test.cc
new file mode 100644
index 0000000..eede213
--- /dev/null
+++ b/test/libapt/hashsums_test.cc
@@ -0,0 +1,392 @@
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/sha2.h>
+#include <apt-pkg/strutl.h>
+
+#include <iostream>
+#include <string>
+#include <stdlib.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+template <class T> void Test(const char *In,const char *Out)
+{
+ T Sum;
+ Sum.Add(In);
+ equals(Sum.Result().Value(), Out);
+}
+
+
+
+TEST(HashSumsTest,SummationStrings)
+{
+#define EXPECT_SUM(Summation, In, Out) \
+ { \
+ Summation Sum; \
+ Sum.Add(In); \
+ EXPECT_EQ(Sum.Result().Value(), Out) << #Summation << " for '" << In << "'"; \
+ }
+
+ // From FIPS PUB 180-1
+ EXPECT_SUM(SHA1Summation, "","da39a3ee5e6b4b0d3255bfef95601890afd80709");
+ EXPECT_SUM(SHA1Summation, "abc","a9993e364706816aba3e25717850c26c9cd0d89d");
+ EXPECT_SUM(SHA1Summation, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ "84983e441c3bd26ebaae4aa1f95129e5e54670f1");
+
+ // MD5 tests from RFC 1321
+ EXPECT_SUM(MD5Summation, "","d41d8cd98f00b204e9800998ecf8427e");
+ EXPECT_SUM(MD5Summation, "a","0cc175b9c0f1b6a831c399e269772661");
+ EXPECT_SUM(MD5Summation, "abc","900150983cd24fb0d6963f7d28e17f72");
+ EXPECT_SUM(MD5Summation, "message digest","f96b697d7cb7938d525a2f31aaf161d0");
+ EXPECT_SUM(MD5Summation, "abcdefghijklmnopqrstuvwxyz","c3fcd3d76192e4007dfb496cca67e13b");
+ EXPECT_SUM(MD5Summation, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
+ "d174ab98d277d9f5a5611c2c9f419d9f");
+ EXPECT_SUM(MD5Summation, "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
+ "57edf4a22be3c955ac49da2e2107b67a");
+
+ // SHA-256, From FIPS 180-2
+ EXPECT_SUM(SHA256Summation, "", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
+ EXPECT_SUM(SHA256Summation, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
+
+ // SHA-512
+ EXPECT_SUM(SHA512Summation, "",
+ "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce"
+ "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e");
+ EXPECT_SUM(SHA512Summation, "abc",
+ "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"
+ "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f");
+
+
+ EXPECT_SUM(MD5Summation, "The quick brown fox jumps over the lazy dog", "9e107d9d372bb6826bd81d3542a419d6");
+ EXPECT_SUM(MD5Summation, "The quick brown fox jumps over the lazy dog.", "e4d909c290d0fb1ca068ffaddf22cbd0");
+ EXPECT_SUM(SHA1Summation, "The quick brown fox jumps over the lazy dog", "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12");
+ EXPECT_SUM(SHA1Summation, "The quick brown fox jumps over the lazy cog", "de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3");
+ EXPECT_SUM(SHA256Summation, "The quick brown fox jumps over the lazy dog", "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592");
+ EXPECT_SUM(SHA256Summation, "The quick brown fox jumps over the lazy dog.", "ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c");
+ EXPECT_SUM(SHA512Summation, "The quick brown fox jumps over the lazy dog", "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb64"
+ "2e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6");
+ EXPECT_SUM(SHA512Summation, "The quick brown fox jumps over the lazy dog.", "91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bb"
+ "c6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed");
+
+#undef EXPECT_SUM
+}
+TEST(HashSumsTest, Mill)
+{
+ SHA1Summation Sum1;
+
+ const unsigned char As[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ size_t const AsCount = sizeof(As)/sizeof(As[0]) - 1;
+ size_t Count = 1000000;
+ while (Count != 0)
+ {
+ if (Count >= AsCount)
+ {
+ Sum1.Add(As, AsCount);
+ Count -= AsCount;
+ }
+ else
+ {
+ Sum1.Add(As,Count);
+ Count = 0;
+ }
+ }
+
+ EXPECT_EQ("34aa973cd4c4daa4f61eeb2bdbad27316534016f", Sum1.Result().Value());
+}
+
+static void getSummationString(char const * const type, std::string &sum)
+{
+ /* to compare our result with an independent source we call the specific binaries
+ and read their result back. We do this with a little trick by claiming that the
+ summation is a compressor – and open the 'compressed' file later on directly to
+ read out the summation sum calculated by it */
+ APT::Configuration::Compressor compress(type, ".ext", type, NULL, NULL, 99);
+ std::string name("apt-test-");
+ name.append("hashsums").append(".XXXXXX");
+ char * tempfile = strdup(name.c_str());
+ int tempfile_fd = mkstemp(tempfile);
+ close(tempfile_fd);
+ ASSERT_NE(-1, tempfile_fd);
+
+ FileFd fd;
+ ASSERT_TRUE(fd.Open(tempfile, FileFd::WriteOnly | FileFd::Empty, compress));
+ ASSERT_TRUE(fd.IsOpen());
+ FileFd input("/etc/os-release", FileFd::ReadOnly);
+ ASSERT_TRUE(input.IsOpen());
+ ASSERT_NE(0u, input.FileSize());
+ ASSERT_TRUE(CopyFile(input, fd));
+ ASSERT_TRUE(input.IsOpen());
+ ASSERT_TRUE(fd.IsOpen());
+ ASSERT_FALSE(fd.Failed());
+ input.Close();
+ fd.Close();
+ ASSERT_TRUE(fd.Open(tempfile, FileFd::ReadOnly, FileFd::None));
+ ASSERT_TRUE(fd.IsOpen());
+ ASSERT_NE(0u, fd.FileSize());
+ ASSERT_FALSE(fd.Failed());
+ unlink(tempfile);
+ free(tempfile);
+ char readback[2000];
+ unsigned long long actual;
+ ASSERT_TRUE(fd.Read(readback, sizeof(readback)/sizeof(readback[0]), &actual));
+ actual -= 4;
+ readback[actual] = '\0';
+ sum = readback;
+}
+TEST(HashSumsTest, FileBased)
+{
+ std::string summation;
+
+ getSummationString("md5sum", summation);
+ MD5SumValue md5(summation);
+ EXPECT_EQ(md5.Value(), summation);
+
+ getSummationString("sha1sum", summation);
+ SHA1SumValue sha1(summation);
+ EXPECT_EQ(sha1.Value(), summation);
+
+ getSummationString("sha256sum", summation);
+ SHA256SumValue sha256(summation);
+ EXPECT_EQ(sha256.Value(), summation);
+
+ getSummationString("sha512sum", summation);
+ SHA512SumValue sha512(summation);
+ EXPECT_EQ(sha512.Value(), summation);
+
+ FileFd fd("/etc/os-release", FileFd::ReadOnly);
+ EXPECT_TRUE(fd.IsOpen());
+ std::string FileSize;
+ strprintf(FileSize, "%llu", fd.FileSize());
+
+ {
+ Hashes hashes;
+ hashes.AddFD(fd.Fd());
+ HashStringList list = hashes.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_EQ(5u, list.size());
+ EXPECT_EQ(md5.Value(), list.find("MD5Sum")->HashValue());
+ EXPECT_EQ(sha1.Value(), list.find("SHA1")->HashValue());
+ EXPECT_EQ(sha256.Value(), list.find("SHA256")->HashValue());
+ EXPECT_EQ(sha512.Value(), list.find("SHA512")->HashValue());
+ EXPECT_EQ(FileSize, list.find("Checksum-FileSize")->HashValue());
+ }
+ unsigned long long sz = fd.FileSize();
+ fd.Seek(0);
+ {
+ Hashes hashes;
+ hashes.AddFD(fd.Fd(), sz);
+ HashStringList list = hashes.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_EQ(5u, list.size());
+ EXPECT_EQ(md5.Value(), list.find("MD5Sum")->HashValue());
+ EXPECT_EQ(sha1.Value(), list.find("SHA1")->HashValue());
+ EXPECT_EQ(sha256.Value(), list.find("SHA256")->HashValue());
+ EXPECT_EQ(sha512.Value(), list.find("SHA512")->HashValue());
+ EXPECT_EQ(FileSize, list.find("Checksum-FileSize")->HashValue());
+ }
+ fd.Seek(0);
+ {
+ Hashes hashes(Hashes::MD5SUM | Hashes::SHA512SUM);
+ hashes.AddFD(fd);
+ HashStringList list = hashes.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_EQ(3u, list.size());
+ EXPECT_EQ(md5.Value(), list.find("MD5Sum")->HashValue());
+ EXPECT_EQ(NULL, list.find("SHA1"));
+ EXPECT_EQ(NULL, list.find("SHA256"));
+ EXPECT_EQ(sha512.Value(), list.find("SHA512")->HashValue());
+ EXPECT_EQ(FileSize, list.find("Checksum-FileSize")->HashValue());
+ fd.Seek(0);
+ Hashes hashes2(list);
+ hashes2.AddFD(fd);
+ list = hashes2.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_EQ(3u, list.size());
+ EXPECT_EQ(md5.Value(), list.find("MD5Sum")->HashValue());
+ EXPECT_EQ(NULL, list.find("SHA1"));
+ EXPECT_EQ(NULL, list.find("SHA256"));
+ EXPECT_EQ(sha512.Value(), list.find("SHA512")->HashValue());
+ EXPECT_EQ(FileSize, list.find("Checksum-FileSize")->HashValue());
+ }
+ fd.Seek(0);
+ {
+ MD5Summation MD5;
+ MD5.AddFD(fd.Fd());
+ EXPECT_EQ(md5.Value(), MD5.Result().Value());
+ }
+ fd.Seek(0);
+ {
+ SHA1Summation SHA1;
+ SHA1.AddFD(fd.Fd());
+ EXPECT_EQ(sha1.Value(), SHA1.Result().Value());
+ }
+ fd.Seek(0);
+ {
+ SHA256Summation SHA2;
+ SHA2.AddFD(fd.Fd());
+ EXPECT_EQ(sha256.Value(), SHA2.Result().Value());
+ }
+ fd.Seek(0);
+ {
+ SHA512Summation SHA2;
+ SHA2.AddFD(fd.Fd());
+ EXPECT_EQ(sha512.Value(), SHA2.Result().Value());
+ }
+ fd.Close();
+
+ HashString sha2file("SHA512", sha512.Value());
+ EXPECT_TRUE(sha2file.VerifyFile("/etc/os-release"));
+ HashString sha2wrong("SHA512", "00000000000");
+ EXPECT_FALSE(sha2wrong.VerifyFile("/etc/os-release"));
+ EXPECT_EQ(sha2file, sha2file);
+ EXPECT_TRUE(sha2file == sha2file);
+ EXPECT_NE(sha2file, sha2wrong);
+ EXPECT_TRUE(sha2file != sha2wrong);
+
+ HashString sha2big("SHA256", sha256.Value());
+ EXPECT_TRUE(sha2big.VerifyFile("/etc/os-release"));
+ HashString sha2small("sha256:" + sha256.Value());
+ EXPECT_TRUE(sha2small.VerifyFile("/etc/os-release"));
+ EXPECT_EQ(sha2big, sha2small);
+ EXPECT_TRUE(sha2big == sha2small);
+ EXPECT_FALSE(sha2big != sha2small);
+
+ HashStringList hashes;
+ EXPECT_TRUE(hashes.empty());
+ EXPECT_TRUE(hashes.push_back(sha2file));
+ EXPECT_FALSE(hashes.empty());
+ EXPECT_EQ(1u, hashes.size());
+
+ HashStringList wrong;
+ EXPECT_TRUE(wrong.push_back(sha2wrong));
+ EXPECT_NE(wrong, hashes);
+ EXPECT_FALSE(wrong == hashes);
+ EXPECT_TRUE(wrong != hashes);
+
+ HashStringList similar;
+ EXPECT_TRUE(similar.push_back(sha2big));
+ EXPECT_NE(similar, hashes);
+ EXPECT_FALSE(similar == hashes);
+ EXPECT_TRUE(similar != hashes);
+
+ EXPECT_TRUE(hashes.push_back(sha2big));
+ EXPECT_EQ(2u, hashes.size());
+ EXPECT_TRUE(hashes.push_back(sha2small));
+ EXPECT_EQ(2u, hashes.size());
+ EXPECT_FALSE(hashes.push_back(sha2wrong));
+ EXPECT_EQ(2u, hashes.size());
+ EXPECT_TRUE(hashes.VerifyFile("/etc/os-release"));
+
+ EXPECT_EQ(similar, hashes);
+ EXPECT_TRUE(similar == hashes);
+ EXPECT_FALSE(similar != hashes);
+ similar.clear();
+ EXPECT_TRUE(similar.empty());
+ EXPECT_EQ(0u, similar.size());
+ EXPECT_NE(similar, hashes);
+ EXPECT_FALSE(similar == hashes);
+ EXPECT_TRUE(similar != hashes);
+}
+TEST(HashSumsTest, HashStringList)
+{
+ _config->Clear("Acquire::ForceHash");
+
+ HashStringList list;
+ EXPECT_TRUE(list.empty());
+ EXPECT_FALSE(list.usable());
+ EXPECT_EQ(0u, list.size());
+ EXPECT_EQ(NULL, list.find(NULL));
+ EXPECT_EQ(NULL, list.find(""));
+ EXPECT_EQ(NULL, list.find("MD5Sum"));
+ EXPECT_EQ(NULL, list.find("ROT26"));
+ EXPECT_EQ(NULL, list.find("SHA1"));
+ EXPECT_EQ(0u, list.FileSize());
+
+ // empty lists aren't equal
+ HashStringList list2;
+ EXPECT_FALSE(list == list2);
+ EXPECT_TRUE(list != list2);
+
+ // some hashes don't really contribute to usability
+ list.push_back(HashString("Checksum-FileSize", "29"));
+ EXPECT_FALSE(list.empty());
+ EXPECT_FALSE(list.usable());
+ EXPECT_EQ(1u, list.size());
+ EXPECT_EQ(29u, list.FileSize());
+ list.push_back(HashString("MD5Sum", "d41d8cd98f00b204e9800998ecf8427e"));
+ EXPECT_FALSE(list.empty());
+ EXPECT_FALSE(list.usable());
+ EXPECT_EQ(2u, list.size());
+ EXPECT_EQ(29u, list.FileSize());
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ list.push_back(HashString("SHA1", "cacecbd74968bc90ea3342767e6b94f46ddbcafc"));
+ EXPECT_FALSE(list.usable());
+ EXPECT_EQ(3u, list.size());
+ EXPECT_EQ(29u, list.FileSize());
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL != list.find("SHA1"));
+ list.push_back(HashString("SHA256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"));
+ EXPECT_TRUE(list.usable());
+ EXPECT_EQ(4u, list.size());
+ EXPECT_EQ(29u, list.FileSize());
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL != list.find("SHA1"));
+ EXPECT_TRUE(NULL != list.find("SHA256"));
+
+ Hashes hashes;
+ hashes.Add("The quick brown fox jumps over the lazy dog");
+ list = hashes.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_TRUE(list.usable());
+ EXPECT_EQ(5u, list.size());
+ EXPECT_TRUE(NULL != list.find(NULL));
+ EXPECT_TRUE(NULL != list.find(""));
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL != list.find("Checksum-FileSize"));
+ EXPECT_TRUE(NULL == list.find("ROT26"));
+
+ _config->Set("Acquire::ForceHash", "MD5Sum");
+ EXPECT_FALSE(list.empty());
+ EXPECT_TRUE(list.usable());
+ EXPECT_EQ(5u, list.size());
+ EXPECT_TRUE(NULL != list.find(NULL));
+ EXPECT_TRUE(NULL != list.find(""));
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL != list.find("Checksum-FileSize"));
+ EXPECT_TRUE(NULL == list.find("ROT26"));
+
+ _config->Set("Acquire::ForceHash", "ROT26");
+ EXPECT_FALSE(list.empty());
+ EXPECT_FALSE(list.usable());
+ EXPECT_EQ(5u, list.size());
+ EXPECT_TRUE(NULL == list.find(NULL));
+ EXPECT_TRUE(NULL == list.find(""));
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL != list.find("Checksum-FileSize"));
+ EXPECT_TRUE(NULL == list.find("ROT26"));
+
+ _config->Clear("Acquire::ForceHash");
+
+ list2.push_back(*list.find("MD5Sum"));
+ EXPECT_TRUE(list == list2);
+ EXPECT_FALSE(list != list2);
+
+ // introduce a mismatch to the list
+ list2.push_back(HashString("SHA1", "cacecbd74968bc90ea3342767e6b94f46ddbcafc"));
+ EXPECT_FALSE(list == list2);
+ EXPECT_TRUE(list != list2);
+
+ _config->Set("Acquire::ForceHash", "MD5Sum");
+ EXPECT_TRUE(list == list2);
+ EXPECT_FALSE(list != list2);
+
+ _config->Clear("Acquire::ForceHash");
+}
diff --git a/test/libapt/indexcopytosourcelist_test.cc b/test/libapt/indexcopytosourcelist_test.cc
new file mode 100644
index 0000000..b0bfeb4
--- /dev/null
+++ b/test/libapt/indexcopytosourcelist_test.cc
@@ -0,0 +1,109 @@
+#include <config.h>
+
+#include <apt-pkg/aptconfiguration.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/indexcopy.h>
+
+#include <string>
+#include <stdio.h>
+
+#include <gtest/gtest.h>
+
+class NoCopy : private IndexCopy {
+ public:
+ std::string ConvertToSourceList(std::string const &CD,std::string &&Path) {
+ IndexCopy::ConvertToSourceList(CD, Path);
+ return Path;
+ }
+ bool GetFile(std::string &/*Filename*/, unsigned long long &/*Size*/) APT_OVERRIDE { return false; }
+ bool RewriteEntry(FileFd & /*Target*/, std::string const &/*File*/) APT_OVERRIDE { return false; }
+ const char *GetFileName() APT_OVERRIDE { return NULL; }
+ const char *Type() APT_OVERRIDE { return NULL; }
+
+};
+
+TEST(IndexCopyTest, ConvertToSourceList)
+{
+ NoCopy ic;
+ std::string const CD("/media/cdrom/");
+
+ char const * Releases[] = { "unstable", "wheezy-updates", NULL };
+ char const * Components[] = { "main", "non-free", NULL };
+
+ for (char const ** Release = Releases; *Release != NULL; ++Release)
+ {
+ SCOPED_TRACE(std::string("Release ") + *Release);
+ for (char const ** Component = Components; *Component != NULL; ++Component)
+ {
+ SCOPED_TRACE(std::string("Component ") + *Component);
+ std::string const Path = std::string("dists/") + *Release + "/" + *Component + "/";
+ std::string const Binary = Path + "binary-";
+ std::string const A = Binary + "armel/";
+ std::string const B = Binary + "mips/";
+ std::string const C = Binary + "kfreebsd-mips/";
+ std::string const S = Path + "source/";
+ std::string const List = std::string(*Release) + " " + *Component;
+
+ {
+ SCOPED_TRACE("no archs configured");
+ _config->Clear("APT");
+ _config->Set("APT::Architecture", "all");
+ _config->Set("APT::Architectures::", "all");
+ APT::Configuration::getArchitectures(false);
+ EXPECT_EQ(A, ic.ConvertToSourceList("/media/cdrom/", CD + A));
+ EXPECT_EQ(B, ic.ConvertToSourceList("/media/cdrom/", CD + B));
+ EXPECT_EQ(C, ic.ConvertToSourceList("/media/cdrom/", CD + C));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + S));
+ }
+
+ {
+ SCOPED_TRACE("mips configured");
+ _config->Clear("APT");
+ _config->Set("APT::Architecture", "mips");
+ _config->Set("APT::Architectures::", "mips");
+ APT::Configuration::getArchitectures(false);
+ EXPECT_EQ(A, ic.ConvertToSourceList("/media/cdrom/", CD + A));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + B));
+ EXPECT_EQ(C, ic.ConvertToSourceList("/media/cdrom/", CD + C));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + S));
+ }
+
+ {
+ SCOPED_TRACE("kfreebsd-mips configured");
+ _config->Clear("APT");
+ _config->Set("APT::Architecture", "kfreebsd-mips");
+ _config->Set("APT::Architectures::", "kfreebsd-mips");
+ APT::Configuration::getArchitectures(false);
+ EXPECT_EQ(A, ic.ConvertToSourceList("/media/cdrom/", CD + A));
+ EXPECT_EQ(B, ic.ConvertToSourceList("/media/cdrom/", CD + B));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + C));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + S));
+ }
+
+ {
+ SCOPED_TRACE("armel configured");
+ _config->Clear("APT");
+ _config->Set("APT::Architecture", "armel");
+ _config->Set("APT::Architectures::", "armel");
+ APT::Configuration::getArchitectures(false);
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + A));
+ EXPECT_EQ(B, ic.ConvertToSourceList("/media/cdrom/", CD + B));
+ EXPECT_EQ(C, ic.ConvertToSourceList("/media/cdrom/", CD + C));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + S));
+ }
+
+ {
+ SCOPED_TRACE("armel+mips configured");
+ _config->Clear("APT");
+ _config->Set("APT::Architecture", "armel");
+ _config->Set("APT::Architectures::", "armel");
+ _config->Set("APT::Architectures::", "mips");
+ APT::Configuration::getArchitectures(false);
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + A));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + B));
+ EXPECT_EQ(C, ic.ConvertToSourceList("/media/cdrom/", CD + C));
+ EXPECT_EQ(List, ic.ConvertToSourceList("/media/cdrom/", CD + S));
+ }
+ }
+ }
+}
diff --git a/test/libapt/install_progress_test.cc b/test/libapt/install_progress_test.cc
new file mode 100644
index 0000000..68101af
--- /dev/null
+++ b/test/libapt/install_progress_test.cc
@@ -0,0 +1,25 @@
+#include <config.h>
+
+#include <apt-pkg/install-progress.h>
+
+#include <string>
+
+#include <gtest/gtest.h>
+
+TEST(InstallProgressTest, FancyGetTextProgressStr)
+{
+ APT::Progress::PackageManagerFancy p;
+
+ EXPECT_EQ(60u, p.GetTextProgressStr(0.5, 60).size());
+ EXPECT_EQ("[#.]", p.GetTextProgressStr(0.5, 4));
+ EXPECT_EQ("[..........]", p.GetTextProgressStr(0.0, 12));
+ EXPECT_EQ("[#.........]", p.GetTextProgressStr(0.1, 12));
+ EXPECT_EQ("[####......]", p.GetTextProgressStr(0.4999, 12));
+ EXPECT_EQ("[#####.....]", p.GetTextProgressStr(0.5001, 12));
+ EXPECT_EQ("[#########.]", p.GetTextProgressStr(0.9001, 12));
+ EXPECT_EQ("[##########]", p.GetTextProgressStr(1.0, 12));
+
+ // deal with incorrect inputs gracefully (or should we die instead?)
+ EXPECT_EQ("[..........]", p.GetTextProgressStr(-1.0, 12));
+ EXPECT_EQ("[##########]", p.GetTextProgressStr(2.0, 12));
+}
diff --git a/test/libapt/openmaybeclearsignedfile_test.cc b/test/libapt/openmaybeclearsignedfile_test.cc
new file mode 100644
index 0000000..0a4d443
--- /dev/null
+++ b/test/libapt/openmaybeclearsignedfile_test.cc
@@ -0,0 +1,485 @@
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/gpgv.h>
+
+#include <string>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+/* The test files are created with the 'Joe Sixpack' and 'Marvin Paranoid'
+ test key included in the integration testing framework */
+
+TEST(OpenMaybeClearSignedFileTest,SimpleSignedFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ // Using c++11 raw-strings would be nifty, but travis doesn't support it…
+ createTemporaryFile("simplesignedfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(fd.IsOpen());
+ char buffer[100];
+ EXPECT_TRUE(fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(buffer, "Test");
+ EXPECT_TRUE(fd.Eof());
+}
+
+TEST(OpenMaybeClearSignedFileTest,WhitespaceSignedFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ // no raw-string here to protect the whitespace from cleanup
+ createTemporaryFile("simplesignedfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE----- \t \n"
+"Hash: SHA512 \n"
+" \n"
+"Test \n"
+"-----BEGIN PGP SIGNATURE----- \n"
+" \n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt \n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l \n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg \n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k \n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx \n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns \n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq \n"
+"=TB1F \n"
+"-----END PGP SIGNATURE-----");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(fd.IsOpen());
+ char buffer[100];
+ EXPECT_TRUE(fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(buffer, "Test");
+ EXPECT_TRUE(fd.Eof());
+}
+
+TEST(OpenMaybeClearSignedFileTest,SignedFileWithContentHeaders)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("headerssignedfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Version: 0.8.15~exp1\n"
+"Hash: SHA512\n"
+"Comment: I love you!\n"
+"X-Expires: never\n"
+"Multilines: no\n"
+" yes\n"
+" maybe\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(fd.IsOpen());
+ char buffer[100];
+ EXPECT_TRUE(fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(buffer, "Test");
+ EXPECT_TRUE(fd.Eof());
+}
+
+TEST(OpenMaybeClearSignedFileTest,SignedFileWithTwoSignatures)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("doublesignedfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFHBAEBCgAxFiEE3mauypFRr6GHfsMd6FJdR1KBROIFAlhT/yYTHG1hcnZpbkBl\n"
+"eGFtcGxlLm9yZwAKCRDoUl1HUoFE4qq3B/459MSk3xCW30wc5+ul5ZxTSg6eLYPJ\n"
+"tfVNYi90/ZxRrYQAN+EWozEIZcxoMYp8Ans3++irkjPbHs4NsesmFKt2W5meFl4V\n"
+"oUzYrOh5y5GlDeF7ok5g9atQe8BojjBics+g1IBYcnaMU+ywONmlixa03IPGfxV5\n"
+"oTx02Xvlns20i6HRc0WFtft5q1hXo4EIlVc9O0u902SVEEkeuHF3+bCcXrNLPBJA\n"
+"+8dxmH5+i89f/kVqURrdHdEuA1tsTNyb2C+lvRONh21H8QRRTU/iUQSzV6vZvof5\n"
+"ASc9hsAZRG0xHuRU0F94V/XrkWw8QYAobJ/yxvs4L0EuA4optbSqawDB\n"
+"=CP8j\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(fd.IsOpen());
+ char buffer[100];
+ EXPECT_TRUE(fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(buffer, "Test");
+ EXPECT_TRUE(fd.Eof());
+}
+
+TEST(OpenMaybeClearSignedFileTest,TwoSimpleSignedFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ // read only the first message
+ createTemporaryFile("twosimplesignedfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n"
+"-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----");
+ EXPECT_TRUE(_error->empty());
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(_error->empty());
+ EXPECT_FALSE(fd.IsOpen());
+
+ // technically they are signed, but we just want one message
+ EXPECT_TRUE(_error->PendingError());
+ std::string msg;
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Clearsigned file '" + tempfile + "' contains unsigned lines.", msg);
+}
+
+TEST(OpenMaybeClearSignedFileTest,UnsignedFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("unsignedfile", fd, &tempfile, "Test");
+ EXPECT_FALSE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(fd.IsOpen());
+ char buffer[100];
+ EXPECT_TRUE(fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(buffer, "Test");
+ EXPECT_TRUE(fd.Eof());
+}
+
+TEST(OpenMaybeClearSignedFileTest,GarbageTop)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("garbagetop", fd, &tempfile, "Garbage\n"
+"-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_FALSE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(_error->empty());
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(fd.IsOpen());
+ ASSERT_FALSE(_error->empty());
+ ASSERT_TRUE(_error->PendingError());
+
+ std::string msg;
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Clearsigned file '" + tempfile + "' does not start with a signed message block.", msg);
+}
+
+TEST(OpenMaybeClearSignedFileTest,GarbageHeader)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("garbageheader", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE----- Garbage\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_FALSE(StartsWithGPGClearTextSignature(tempfile));
+ // beware: the file will be successfully opened as unsigned file
+ EXPECT_TRUE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(fd.IsOpen());
+ char buffer[100];
+ EXPECT_TRUE(fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(buffer, "-----BEGIN PGP SIGNED MESSAGE----- Garbage\n");
+ EXPECT_FALSE(fd.Eof());
+}
+
+TEST(OpenMaybeClearSignedFileTest,GarbageBottom)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("garbagebottom", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n"
+"Garbage");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(_error->empty());
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(fd.IsOpen());
+ ASSERT_FALSE(_error->empty());
+ ASSERT_TRUE(_error->PendingError());
+
+ std::string msg;
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Clearsigned file '" + tempfile + "' contains unsigned lines.", msg);
+}
+
+TEST(OpenMaybeClearSignedFileTest,BogusNoSig)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("bogusnosig", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(_error->empty());
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(_error->empty());
+ EXPECT_FALSE(fd.IsOpen());
+
+ std::string msg;
+ _error->PopMessage(msg);
+ EXPECT_EQ("Splitting of clearsigned file " + tempfile + " failed as it doesn't contain all expected parts", msg);
+}
+
+TEST(OpenMaybeClearSignedFileTest,BogusSigStart)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("bogusnosig", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(_error->empty());
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(_error->empty());
+ EXPECT_FALSE(fd.IsOpen());
+
+ std::string msg;
+ _error->PopMessage(msg);
+ EXPECT_EQ("Signature in file " + tempfile + " wasn't closed", msg);
+}
+
+TEST(OpenMaybeClearSignedFileTest,DashedSignedFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("dashedsignedfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"- Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_TRUE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_TRUE(fd.IsOpen());
+ char buffer[100];
+ EXPECT_TRUE(fd.ReadLine(buffer, sizeof(buffer)));
+ EXPECT_STREQ(buffer, "Test");
+ EXPECT_TRUE(fd.Eof());
+}
+TEST(OpenMaybeClearSignedFileTest,StrangeDashArmorFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("strangedashfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"-Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(_error->empty());
+ EXPECT_FALSE(fd.IsOpen());
+
+ std::string msg;
+ EXPECT_TRUE(_error->PendingError());
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Clearsigned file '" + tempfile + "' contains unexpected line starting with a dash (armor)", msg);
+}
+TEST(OpenMaybeClearSignedFileTest,StrangeDashMsgFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("strangedashfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"-Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"X/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(_error->empty());
+ EXPECT_FALSE(fd.IsOpen());
+
+ std::string msg;
+ EXPECT_TRUE(_error->PendingError());
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Clearsigned file '" + tempfile + "' contains unexpected line starting with a dash (msg)", msg);
+}
+TEST(OpenMaybeClearSignedFileTest,StrangeDashSigFile)
+{
+ std::string tempfile;
+ FileFd fd;
+ createTemporaryFile("strangedashfile", fd, &tempfile, "-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+"\n"
+"Test\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQFEBAEBCgAuFiEENKjp0Y2zIPNn6OqgWpDRQdusja4FAlhT7+kQHGpvZUBleGFt\n"
+"cGxlLm9yZwAKCRBakNFB26yNrjvEB/9/e3jA1l0fvPafx9LEXcH8CLpUFQK7ra9l\n"
+"3M4YAH4JKQlTG1be7ixruBRlCTh3YiSs66fKMeJeUYoxA2HPhvbGFEjQFAxunEYg\n"
+"-/LBKv1mQWa+Q34P5GBjK8kQdLCN+yJAiUErmWNQG3GPninrxsC9tY5jcWvHeP1k\n"
+"V7N3MLnNqzXaCJM24mnKidC5IDadUdQ8qC8c3rjUexQ8vBz0eucH56jbqV5oOcvx\n"
+"pjlW965dCPIf3OI8q6J7bIOjyY+u/PTcVlqPq3TUz/ti6RkVbKpLH0D4ll3lUTns\n"
+"JQt/+gJCPxHUJphy8sccBKhW29CLELJIIafvU30E1nWn9szh2Xjq\n"
+"=TB1F\n"
+"-----END PGP SIGNATURE-----\n");
+ EXPECT_TRUE(StartsWithGPGClearTextSignature(tempfile));
+ EXPECT_FALSE(OpenMaybeClearSignedFile(tempfile, fd));
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+ EXPECT_FALSE(_error->empty());
+ EXPECT_FALSE(fd.IsOpen());
+
+ std::string msg;
+ EXPECT_TRUE(_error->PendingError());
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Clearsigned file '" + tempfile + "' contains unexpected line starting with a dash (sig)", msg);
+}
diff --git a/test/libapt/parsedepends_test.cc b/test/libapt/parsedepends_test.cc
new file mode 100644
index 0000000..ed849f7
--- /dev/null
+++ b/test/libapt/parsedepends_test.cc
@@ -0,0 +1,280 @@
+#include <config.h>
+
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+#include <string.h>
+
+#include <gtest/gtest.h>
+
+static void parseDependency(bool const StripMultiArch, bool const ParseArchFlags, bool const ParseRestrictionsList, std::string Arch)
+{
+ std::string Package;
+ std::string Version;
+ unsigned int Op = 5;
+ unsigned int Null = 0;
+ // The tests are made for amd64. Specify a different arch here to check if
+ // they still work.
+ _config->Set("APT::Architecture",Arch);
+ _config->Set("APT::Build-Profiles","stage1");
+
+ const char* Depends =
+ "debhelper:any (>= 5.0), "
+ "libdb-dev:any, "
+ "gettext:native (<= 0.12), "
+ "libcurl4-gnutls-dev:native | libcurl3-gnutls-dev (>> 7.15.5), "
+ "docbook-xml, "
+ "apt (>= 0.7.25), "
+ "not-for-me [ !amd64 ], "
+ "only-for-me [ amd64 ], "
+ "any-for-me [ any ], "
+ "not-for-darwin [ !darwin-any ], "
+ "cpu-for-me [ any-amd64 ], "
+ "os-for-me [ linux-any ], "
+ "libc-for-me [ gnu-linux-any ], "
+ "libc-not-for-me [ musl-linux-any ], "
+ "cpu-not-for-me [ any-armel ], "
+ "os-not-for-me [ kfreebsd-any ], "
+ "not-in-stage1 <!stage1>, "
+ "not-stage1-and-not-nodoc <!nodoc !stage1>, "
+ "not-stage1-or-not-nodoc <!nodoc> <!stage1>, "
+ "unknown-profile <unknown stage1>, "
+ "overlord-dev:any (= 7.15.3~) | overlord-dev:native (>> 7.15.5), "
+ ;
+
+ // Stripping MultiArch is currently the default setting to not confuse
+ // non-MultiArch capable users of the library with "strange" extensions.
+ const char* Start = Depends;
+ const char* End = Depends + strlen(Depends);
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ if (StripMultiArch == true)
+ EXPECT_EQ("debhelper", Package);
+ else
+ EXPECT_EQ("debhelper:any", Package);
+ EXPECT_EQ("5.0", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::GreaterEq, Op);
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ if (StripMultiArch == true)
+ EXPECT_EQ("libdb-dev", Package);
+ else
+ EXPECT_EQ("libdb-dev:any", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ if (StripMultiArch == true)
+ EXPECT_EQ("gettext", Package);
+ else
+ EXPECT_EQ("gettext:native", Package);
+ EXPECT_EQ("0.12", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::LessEq, Op);
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ if (StripMultiArch == true)
+ EXPECT_EQ("libcurl4-gnutls-dev", Package);
+ else
+ EXPECT_EQ("libcurl4-gnutls-dev:native", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::Or, Op);
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("libcurl3-gnutls-dev", Package);
+ EXPECT_EQ("7.15.5", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::Greater, Op);
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("docbook-xml", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("apt", Package);
+ EXPECT_EQ("0.7.25", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::GreaterEq, Op);
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("", Package); // not-for-me
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("only-for-me", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("any-for-me", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("not-for-darwin", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("cpu-for-me", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("os-for-me", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("libc-for-me", Package);
+ EXPECT_EQ("", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::NoOp, Op);
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("", Package); // libc-not-for-me
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("", Package); // cpu-not-for-me
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseArchFlags == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("", Package); // os-not-for-me
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseRestrictionsList == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("", Package); // not-in-stage1
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseRestrictionsList == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("", Package); // not-stage1-and-not-nodoc
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseRestrictionsList == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("not-stage1-or-not-nodoc", Package);
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ if (ParseRestrictionsList == true) {
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ EXPECT_EQ("", Package); // unknown-profile
+ } else {
+ EXPECT_EQ(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64"));
+ Start = strstr(Start, ",");
+ Start++;
+ }
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ if (StripMultiArch == true)
+ EXPECT_EQ("overlord-dev", Package);
+ else
+ EXPECT_EQ("overlord-dev:any", Package);
+ EXPECT_EQ("7.15.3~", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::Equals | pkgCache::Dep::Or, Op);
+
+ debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch, ParseRestrictionsList, "amd64");
+ if (StripMultiArch == true)
+ EXPECT_EQ("overlord-dev", Package);
+ else
+ EXPECT_EQ("overlord-dev:native", Package);
+ EXPECT_EQ("7.15.5", Version);
+ EXPECT_EQ(Null | pkgCache::Dep::Greater, Op);
+}
+
+// FIXME: This testcase is too big/complex
+TEST(ParseDependsTest, Everything)
+{
+ bool StripMultiArch = true;
+ bool ParseArchFlags = false;
+ bool ParseRestrictionsList = false;
+ unsigned short runner = 0;
+
+test:
+ {
+ SCOPED_TRACE(std::string("StripMultiArch: ") + (StripMultiArch ? "true" : "false"));
+ SCOPED_TRACE(std::string("ParseArchFlags: ") + (ParseArchFlags ? "true" : "false"));
+ SCOPED_TRACE(std::string("ParseRestrictionsList: ") + (ParseRestrictionsList ? "true" : "false"));
+ parseDependency(StripMultiArch, ParseArchFlags, ParseRestrictionsList, "kfreebsd-i386");
+ parseDependency(StripMultiArch, ParseArchFlags, ParseRestrictionsList, "amd64");
+ }
+ if (StripMultiArch == false) {
+ if (ParseArchFlags == false)
+ ParseRestrictionsList = !ParseRestrictionsList;
+ ParseArchFlags = !ParseArchFlags;
+ }
+ StripMultiArch = !StripMultiArch;
+
+ runner++;
+ if (runner < 8)
+ goto test; // this is the prove: tests are really evil ;)
+}
diff --git a/test/libapt/priority_test.cc b/test/libapt/priority_test.cc
new file mode 100644
index 0000000..af7932a
--- /dev/null
+++ b/test/libapt/priority_test.cc
@@ -0,0 +1,16 @@
+#include <config.h>
+#include <apt-pkg/pkgcache.h>
+#include <gtest/gtest.h>
+#include <string>
+
+using std::string;
+
+// Tests for Bug#807523
+TEST(PriorityTest, PriorityPrinting)
+{
+ EXPECT_EQ("required", string(pkgCache::Priority(pkgCache::State::Required)));
+ EXPECT_EQ("important", string(pkgCache::Priority(pkgCache::State::Important)));
+ EXPECT_EQ("standard", string(pkgCache::Priority(pkgCache::State::Standard)));
+ EXPECT_EQ("optional", string(pkgCache::Priority(pkgCache::State::Optional)));
+ EXPECT_EQ("extra", string(pkgCache::Priority(pkgCache::State::Extra)));
+}
diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc
new file mode 100644
index 0000000..9441f56
--- /dev/null
+++ b/test/libapt/sourcelist_test.cc
@@ -0,0 +1,39 @@
+#include <config.h>
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/sourcelist.h>
+
+#include <string>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+TEST(SourceListTest,ParseFileDeb822)
+{
+ FileFd fd;
+ std::string tempfile;
+ createTemporaryFile("parsefiledeb822.XXXXXX.sources", fd, &tempfile,
+ "Types: deb\n"
+ "URIs: http://ftp.debian.org/debian\n"
+ "Suites: stable\n"
+ "Components: main\n"
+ "Description: short\n"
+ " long description that can be very long\n"
+ "\n"
+ "Types: deb\n"
+ "URIs: http://ftp.debian.org/debian\n"
+ "Suites: unstable\n"
+ "Components: main non-free\n");
+ fd.Close();
+
+ pkgSourceList sources;
+ EXPECT_EQ(true, sources.Read(tempfile));
+ EXPECT_EQ(2u, sources.size());
+
+ if (tempfile.empty() == false)
+ unlink(tempfile.c_str());
+}
diff --git a/test/libapt/srvrecs_test.cc b/test/libapt/srvrecs_test.cc
new file mode 100644
index 0000000..f042579
--- /dev/null
+++ b/test/libapt/srvrecs_test.cc
@@ -0,0 +1,85 @@
+#include <config.h>
+
+#include <apt-pkg/srvrec.h>
+#include <apt-pkg/strutl.h>
+
+#include <algorithm>
+#include <iostream>
+#include <string>
+
+#include <gtest/gtest.h>
+
+TEST(SrvRecTest, PopFromSrvRecs)
+{
+ std::vector<SrvRec> Meep;
+ Meep.emplace_back("foo", 20, 0, 80);
+ Meep.emplace_back("bar", 20, 0, 80);
+ Meep.emplace_back("baz", 30, 0, 80);
+
+ EXPECT_EQ(Meep.size(), 3u);
+ SrvRec const result = PopFromSrvRecs(Meep);
+ // ensure that pop removed one element
+ EXPECT_EQ(Meep.size(), 2u);
+ EXPECT_NE(result.target, "baz");
+
+ SrvRec const result2 = PopFromSrvRecs(Meep);
+ EXPECT_NE(result.target, result2.target);
+ EXPECT_NE(result2.target, "baz");
+ EXPECT_EQ(Meep.size(), 1u);
+
+ SrvRec const result3 = PopFromSrvRecs(Meep);
+ EXPECT_EQ(result3.target, "baz");
+ EXPECT_TRUE(Meep.empty());
+}
+
+TEST(SrvRecTest,Randomness)
+{
+ constexpr unsigned int testLength = 100;
+ std::vector<SrvRec> base1;
+ std::vector<SrvRec> base2;
+ std::vector<SrvRec> base3;
+ for (unsigned int i = 0; i < testLength; ++i)
+ {
+ std::string name;
+ strprintf(name, "foo%d", i);
+ base1.emplace_back(name, 20, 0, 80);
+ base2.emplace_back(name, 20, 0, 80);
+ base3.emplace_back(name, 30, 0, 80);
+ }
+ EXPECT_EQ(testLength, base1.size());
+ EXPECT_EQ(testLength, base2.size());
+ EXPECT_EQ(testLength, base3.size());
+ std::move(base3.begin(), base3.end(), std::back_inserter(base2));
+ EXPECT_EQ(testLength*2, base2.size());
+
+ std::vector<SrvRec> first_pull;
+ auto const startingClock = clock();
+ for (unsigned int i = 0; i < testLength; ++i)
+ first_pull.push_back(PopFromSrvRecs(base1));
+ EXPECT_TRUE(base1.empty());
+ EXPECT_FALSE(first_pull.empty());
+ EXPECT_EQ(testLength, first_pull.size());
+
+ // busy-wait for a cpu-clock change as we use it as "random" value
+ if (startingClock != -1)
+ for (int i = 0; i < 100000; ++i)
+ if (startingClock != clock())
+ break;
+
+ std::vector<SrvRec> second_pull;
+ for (unsigned int i = 0; i < testLength; ++i)
+ second_pull.push_back(PopFromSrvRecs(base2));
+ EXPECT_FALSE(base2.empty());
+ EXPECT_FALSE(second_pull.empty());
+ EXPECT_EQ(testLength, second_pull.size());
+
+ EXPECT_EQ(first_pull.size(), second_pull.size());
+ EXPECT_TRUE(std::all_of(first_pull.begin(), first_pull.end(), [](SrvRec const &R) { return R.priority == 20; }));
+ EXPECT_TRUE(std::all_of(second_pull.begin(), second_pull.end(), [](SrvRec const &R) { return R.priority == 20; }));
+ if (startingClock != -1 && startingClock != clock())
+ {
+ EXPECT_FALSE(std::equal(first_pull.begin(), first_pull.end(), second_pull.begin()));
+ }
+
+ EXPECT_TRUE(std::all_of(base2.begin(), base2.end(), [](SrvRec const &R) { return R.priority == 30; }));
+}
diff --git a/test/libapt/stringview_test.cc b/test/libapt/stringview_test.cc
new file mode 100644
index 0000000..95fbe89
--- /dev/null
+++ b/test/libapt/stringview_test.cc
@@ -0,0 +1,90 @@
+#if !(defined APT_PKG_EXPOSE_STRING_VIEW)
+ #define APT_PKG_EXPOSE_STRING_VIEW
+#endif
+
+#include <config.h>
+#include <apt-pkg/string_view.h>
+#include <string>
+
+#include <type_traits>
+
+#include <gtest/gtest.h>
+
+TEST(StringViewTest,EmptyString)
+{
+ constexpr APT::StringView defString;
+ static_assert( 0 == defString.length(), "def right size");
+
+ APT::StringView strString{std::string{}};
+ EXPECT_EQ(0u, strString.length());
+
+ constexpr char const * const charp = "";
+ constexpr APT::StringView charpString{charp, 0};
+ static_assert( 0 == charpString.length(), "charp right size");
+
+ APT::StringView charp2String{charp};
+ EXPECT_EQ(0u, strString.length());
+
+ const APT::StringView charaString{""};
+ EXPECT_EQ(0u, charaString.length());
+
+ EXPECT_TRUE(APT::StringView("") == "");
+ EXPECT_FALSE(APT::StringView("") != "");
+}
+
+TEST(StringViewTest,FooString)
+{
+ constexpr APT::StringView defString("fooGARBAGE", 3);
+ static_assert( 3 == defString.length(), "def right size");
+ EXPECT_EQ(0, defString.to_string().compare(0, defString.length(), defString.data(), 3));
+
+ APT::StringView strString{std::string{"foo"}};
+ EXPECT_EQ(3u, strString.length());
+ EXPECT_EQ(0, strString.to_string().compare(0, strString.length(), strString.data(), 3));
+
+ constexpr char const * const charp = "fooGARBAGE";
+ constexpr APT::StringView charpString{charp, 3};
+ EXPECT_EQ(3u, charpString.length());
+ EXPECT_EQ(0, charpString.to_string().compare(0, charpString.length(), charpString.data(), 3));
+
+ char * charp2 = strdup("foo");
+ APT::StringView charp2String{charp2};
+ EXPECT_EQ(3u, charp2String.length());
+ EXPECT_EQ(0, charp2String.to_string().compare(0, charp2String.length(), charp2String.data(), 3));
+ free(charp2);
+
+ const APT::StringView charaString{"foo"};
+ EXPECT_EQ(3u, charaString.length());
+ EXPECT_EQ(0, charaString.to_string().compare(0, charaString.length(), charaString.data(), 3));
+
+ EXPECT_TRUE(APT::StringView("foo") == "foo");
+ EXPECT_FALSE(APT::StringView("foo") != "foo");
+}
+
+TEST(StringViewTest,SubStr)
+{
+ const APT::StringView defString("Hello World!");
+ EXPECT_EQ(defString.to_string().substr(6), defString.substr(6).to_string());
+ EXPECT_EQ(defString.to_string().substr(0,5), defString.substr(0,5).to_string());
+ EXPECT_EQ(defString.to_string().substr(6,5), defString.substr(6,5).to_string());
+}
+
+TEST(StringViewTest,Find)
+{
+ const APT::StringView defString("Hello World!");
+ EXPECT_EQ(defString.to_string().find('l'), defString.find('l'));
+ EXPECT_EQ(defString.to_string().find('X'), defString.find('X'));
+ EXPECT_EQ(defString.to_string().find('e',3), defString.find('e',3));
+ EXPECT_EQ(defString.to_string().find('l',6), defString.find('l',6));
+ EXPECT_EQ(defString.to_string().find('l',11), defString.find('l',11));
+}
+
+TEST(StringViewTest,RFind)
+{
+ const APT::StringView defString("Hello World!");
+ EXPECT_EQ(defString.to_string().rfind('l'), defString.rfind('l'));
+ EXPECT_EQ(defString.to_string().rfind('X'), defString.rfind('X'));
+ EXPECT_EQ(defString.to_string().rfind('e',3), defString.rfind('e',3));
+ EXPECT_EQ(defString.to_string().rfind('l',6), defString.rfind('l',6));
+ EXPECT_EQ(defString.to_string().rfind('l',11), defString.rfind('l',11));
+}
diff --git a/test/libapt/strutil_test.cc b/test/libapt/strutil_test.cc
new file mode 100644
index 0000000..5cb6cb9
--- /dev/null
+++ b/test/libapt/strutil_test.cc
@@ -0,0 +1,363 @@
+#include <config.h>
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+TEST(StrUtilTest,DeEscapeString)
+{
+ // nothing special
+ EXPECT_EQ("", DeEscapeString(""));
+ EXPECT_EQ("foobar", DeEscapeString("foobar"));
+ // hex and octal
+ EXPECT_EQ("foo bar\nbaz", DeEscapeString("foo\\040bar\\x0abaz"));
+ EXPECT_EQ("foo ", DeEscapeString("foo\\040"));
+ EXPECT_EQ("\nbaz", DeEscapeString("\\x0abaz"));
+ EXPECT_EQ("/media/Ubuntu 11.04 amd64", DeEscapeString("/media/Ubuntu\\04011.04\\040amd64"));
+ // double slashes
+ EXPECT_EQ("foo\\ x", DeEscapeString("foo\\\\ x"));
+ EXPECT_EQ("\\foo\\", DeEscapeString("\\\\foo\\\\"));
+}
+TEST(StrUtilTest,StringStrip)
+{
+ EXPECT_EQ("", APT::String::Strip(""));
+ EXPECT_EQ("foobar", APT::String::Strip("foobar"));
+ EXPECT_EQ("foo bar", APT::String::Strip("foo bar"));
+
+ EXPECT_EQ("", APT::String::Strip(" "));
+ EXPECT_EQ("", APT::String::Strip(" \r\n \t "));
+
+ EXPECT_EQ("foo bar", APT::String::Strip("foo bar "));
+ EXPECT_EQ("foo bar", APT::String::Strip("foo bar \r\n \t "));
+ EXPECT_EQ("foo bar", APT::String::Strip("\r\n \t foo bar"));
+ EXPECT_EQ("bar foo", APT::String::Strip("\r\n \t bar foo \r\n \t "));
+ EXPECT_EQ("bar \t\r\n foo", APT::String::Strip("\r\n \t bar \t\r\n foo \r\n \t "));
+}
+TEST(StrUtilTest,StringSplitBasic)
+{
+ std::vector<std::string> result = StringSplit("", "");
+ EXPECT_TRUE(result.empty());
+
+ result = StringSplit("abc", "");
+ EXPECT_TRUE(result.empty());
+
+ result = StringSplit("", "abc");
+ EXPECT_EQ(result.size(), 1u);
+
+ result = StringSplit("abc", "b");
+ ASSERT_EQ(result.size(), 2u);
+ EXPECT_EQ(result[0], "a");
+ EXPECT_EQ(result[1], "c");
+
+ result = StringSplit("abc", "abc");
+ ASSERT_EQ(result.size(), 2u);
+ EXPECT_EQ(result[0], "");
+ EXPECT_EQ(result[1], "");
+}
+TEST(StrUtilTest,StringSplitDpkgStatus)
+{
+ std::string const input = "status: libnet1:amd64: unpacked";
+ std::vector<std::string> result = StringSplit(input, "xxx");
+ ASSERT_EQ(result.size(), 1u);
+ EXPECT_EQ(result[0], input);
+
+ result = StringSplit(input, "");
+ EXPECT_TRUE(result.empty());
+
+ result = StringSplit(input, ": ");
+ ASSERT_EQ(result.size(), 3u);
+ EXPECT_EQ(result[0], "status");
+ EXPECT_EQ(result[1], "libnet1:amd64");
+ EXPECT_EQ(result[2], "unpacked");
+
+ result = StringSplit("x:y:z", ":", 2);
+ ASSERT_EQ(result.size(), 2u);
+ EXPECT_EQ(result[0], "x");
+ EXPECT_EQ(result[1], "y:z");
+}
+TEST(StrUtilTest,EndsWith)
+{
+ using APT::String::Endswith;
+ EXPECT_TRUE(Endswith("abcd", "d"));
+ EXPECT_TRUE(Endswith("abcd", "cd"));
+ EXPECT_TRUE(Endswith("abcd", "abcd"));
+ EXPECT_FALSE(Endswith("abcd", "x"));
+ EXPECT_FALSE(Endswith("abcd", "abcndefg"));
+}
+TEST(StrUtilTest,StartsWith)
+{
+ using APT::String::Startswith;
+ EXPECT_TRUE(Startswith("abcd", "a"));
+ EXPECT_TRUE(Startswith("abcd", "ab"));
+ EXPECT_TRUE(Startswith("abcd", "abcd"));
+ EXPECT_FALSE(Startswith("abcd", "x"));
+ EXPECT_FALSE(Startswith("abcd", "abcndefg"));
+}
+TEST(StrUtilTest,TimeToStr)
+{
+ EXPECT_EQ("0s", TimeToStr(0));
+ EXPECT_EQ("42s", TimeToStr(42));
+ EXPECT_EQ("9min 21s", TimeToStr((9*60) + 21));
+ EXPECT_EQ("20min 42s", TimeToStr((20*60) + 42));
+ EXPECT_EQ("10h 42min 21s", TimeToStr((10*3600) + (42*60) + 21));
+ EXPECT_EQ("10h 42min 21s", TimeToStr((10*3600) + (42*60) + 21));
+ EXPECT_EQ("1988d 3h 29min 7s", TimeToStr((1988*86400) + (3*3600) + (29*60) + 7));
+
+ EXPECT_EQ("59s", TimeToStr(59));
+ EXPECT_EQ("60s", TimeToStr(60));
+ EXPECT_EQ("1min 1s", TimeToStr(61));
+ EXPECT_EQ("59min 59s", TimeToStr(3599));
+ EXPECT_EQ("60min 0s", TimeToStr(3600));
+ EXPECT_EQ("1h 0min 1s", TimeToStr(3601));
+ EXPECT_EQ("1h 1min 0s", TimeToStr(3660));
+ EXPECT_EQ("23h 59min 59s", TimeToStr(86399));
+ EXPECT_EQ("24h 0min 0s", TimeToStr(86400));
+ EXPECT_EQ("1d 0h 0min 1s", TimeToStr(86401));
+ EXPECT_EQ("1d 0h 1min 0s", TimeToStr(86460));
+}
+TEST(StrUtilTest,SubstVar)
+{
+ EXPECT_EQ("", SubstVar("", "fails", "passes"));
+ EXPECT_EQ("test ", SubstVar("test fails", "fails", ""));
+ EXPECT_EQ("test passes", SubstVar("test passes", "", "fails"));
+
+ EXPECT_EQ("test passes", SubstVar("test passes", "fails", "passes"));
+ EXPECT_EQ("test passes", SubstVar("test fails", "fails", "passes"));
+
+ EXPECT_EQ("starts with", SubstVar("beginnt with", "beginnt", "starts"));
+ EXPECT_EQ("beginnt with", SubstVar("starts with", "starts", "beginnt"));
+ EXPECT_EQ("is in middle", SubstVar("is in der middle", "in der", "in"));
+ EXPECT_EQ("is in der middle", SubstVar("is in middle", "in", "in der"));
+ EXPECT_EQ("does end", SubstVar("does enden", "enden", "end"));
+ EXPECT_EQ("does enden", SubstVar("does end", "end", "enden"));
+
+ EXPECT_EQ("abc", SubstVar("abc", "d", "a"));
+ EXPECT_EQ("abc", SubstVar("abd", "d", "c"));
+ EXPECT_EQ("abc", SubstVar("adc", "d", "b"));
+ EXPECT_EQ("abc", SubstVar("dbc", "d", "a"));
+
+ EXPECT_EQ("b", SubstVar("b", "aa", "a"));
+ EXPECT_EQ("bb", SubstVar("bb", "aa", "a"));
+ EXPECT_EQ("bbb", SubstVar("bbb", "aa", "a"));
+
+ EXPECT_EQ("aa", SubstVar("aaaa", "aa", "a"));
+ EXPECT_EQ("aaaa", SubstVar("aa", "a", "aa"));
+ EXPECT_EQ("aaaa", SubstVar("aaaa", "a", "a"));
+ EXPECT_EQ("a a a a ", SubstVar("aaaa", "a", "a "));
+
+ EXPECT_EQ(" bb bb bb bb ", SubstVar(" a a a a ", "a", "bb"));
+ EXPECT_EQ(" bb bb bb bb ", SubstVar(" aaa aaa aaa aaa ", "aaa", "bb"));
+ EXPECT_EQ(" bb a bb a bb a bb ", SubstVar(" aaa a aaa a aaa a aaa ", "aaa", "bb"));
+
+}
+TEST(StrUtilTest,Base64Encode)
+{
+ EXPECT_EQ("QWxhZGRpbjpvcGVuIHNlc2FtZQ==", Base64Encode("Aladdin:open sesame"));
+ EXPECT_EQ("cGxlYXN1cmUu", Base64Encode("pleasure."));
+ EXPECT_EQ("bGVhc3VyZS4=", Base64Encode("leasure."));
+ EXPECT_EQ("ZWFzdXJlLg==", Base64Encode("easure."));
+ EXPECT_EQ("YXN1cmUu", Base64Encode("asure."));
+ EXPECT_EQ("c3VyZS4=", Base64Encode("sure."));
+ EXPECT_EQ("dXJlLg==", Base64Encode("ure."));
+ EXPECT_EQ("cmUu", Base64Encode("re."));
+ EXPECT_EQ("ZS4=", Base64Encode("e."));
+ EXPECT_EQ("Lg==", Base64Encode("."));
+ EXPECT_EQ("", Base64Encode(""));
+}
+static void ReadMessagesTestWithNewLine(char const * const nl, char const * const ab)
+{
+ SCOPED_TRACE(SubstVar(SubstVar(nl, "\n", "n"), "\r", "r") + " # " + ab);
+ FileFd fd;
+ std::string pkgA = "Package: pkgA\n"
+ "Version: 1\n"
+ "Size: 100\n"
+ "Description: aaa\n"
+ " aaa";
+ std::string pkgB = "Package: pkgB\n"
+ "Version: 1\n"
+ "Flag: no\n"
+ "Description: bbb";
+ std::string pkgC = "Package: pkgC\n"
+ "Version: 2\n"
+ "Flag: yes\n"
+ "Description:\n"
+ " ccc";
+
+ createTemporaryFile("readmessage", fd, NULL, (pkgA + nl + pkgB + nl + pkgC + nl).c_str());
+ std::vector<std::string> list;
+ EXPECT_TRUE(ReadMessages(fd.Fd(), list));
+ EXPECT_EQ(3u, list.size());
+ EXPECT_EQ(pkgA, list[0]);
+ EXPECT_EQ(pkgB, list[1]);
+ EXPECT_EQ(pkgC, list[2]);
+
+ size_t const msgsize = 63990;
+ createTemporaryFile("readmessage", fd, NULL, NULL);
+ for (size_t j = 0; j < msgsize; ++j)
+ fd.Write(ab, strlen(ab));
+ for (size_t i = 0; i < 21; ++i)
+ {
+ std::string msg;
+ strprintf(msg, "msgsize=%zu i=%zu", msgsize, i);
+ SCOPED_TRACE(msg);
+ fd.Seek((msgsize + (i - 1)) * strlen(ab));
+ fd.Write(ab, strlen(ab));
+ fd.Write(nl, strlen(nl));
+ fd.Seek(0);
+ list.clear();
+ EXPECT_TRUE(ReadMessages(fd.Fd(), list));
+ EXPECT_EQ(1u, list.size());
+ EXPECT_EQ((msgsize + i) * strlen(ab), list[0].length());
+ EXPECT_EQ(std::string::npos, list[0].find_first_not_of(ab));
+ }
+
+ list.clear();
+ fd.Write(pkgA.c_str(), pkgA.length());
+ fd.Write(nl, strlen(nl));
+ fd.Seek(0);
+ EXPECT_TRUE(ReadMessages(fd.Fd(), list));
+ EXPECT_EQ(2u, list.size());
+ EXPECT_EQ((msgsize + 20) * strlen(ab), list[0].length());
+ EXPECT_EQ(std::string::npos, list[0].find_first_not_of(ab));
+ EXPECT_EQ(pkgA, list[1]);
+
+
+ fd.Close();
+}
+TEST(StrUtilTest,ReadMessages)
+{
+ ReadMessagesTestWithNewLine("\n\n", "a");
+ ReadMessagesTestWithNewLine("\r\n\r\n", "a");
+ ReadMessagesTestWithNewLine("\n\n", "ab");
+ ReadMessagesTestWithNewLine("\r\n\r\n", "ab");
+}
+TEST(StrUtilTest,QuoteString)
+{
+ EXPECT_EQ("", QuoteString("", ""));
+ EXPECT_EQ("K%c3%b6ln", QuoteString("Köln", ""));
+ EXPECT_EQ("Köln", DeQuoteString(QuoteString("Köln", "")));
+ EXPECT_EQ("Köln", DeQuoteString(DeQuoteString(QuoteString(QuoteString("Köln", ""), ""))));
+ EXPECT_EQ("~-_$#|u%c3%a4%c3%b6%c5%a6%e2%84%a2%e2%85%9e%c2%b1%c3%86%e1%ba%9e%c2%aa%c3%9f", QuoteString("~-_$#|uäöŦ™⅞±Æẞªß", ""));
+ EXPECT_EQ("~-_$#|uäöŦ™⅞±Æẞªß", DeQuoteString(QuoteString("~-_$#|uäöŦ™⅞±Æẞªß", "")));
+ EXPECT_EQ("%45ltvill%65%2d%45rbach", QuoteString("Eltville-Erbach", "E-Ae"));
+ EXPECT_EQ("Eltville-Erbach", DeQuoteString(QuoteString("Eltville-Erbach", "")));
+}
+
+TEST(StrUtilTest,RFC1123StrToTime)
+{
+ {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun, 06 Nov 1994 08:49:37 GMT", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun, 6 Nov 1994 08:49:37 UTC", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun, 6 Nov 1994 08:49:37 UTC", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun, 06 Nov 1994 8:49:37 UTC", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun, 06 Nov 1994 08:49:37 UTC", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun, 06 Nov 1994 08:49:37 -0000", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun, 06 Nov 1994 08:49:37 +0000", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sunday, 06-Nov-94 08:49:37 GMT", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sunday, 6-Nov-94 08:49:37 GMT", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sunday, 06-Nov-94 8:49:37 GMT", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun Nov 6 08:49:37 1994", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun Nov 06 08:49:37 1994", t));
+ EXPECT_EQ(784111777, t);
+ } {
+ time_t t;
+ EXPECT_TRUE(RFC1123StrToTime("Sun Nov 6 8:49:37 1994", t));
+ EXPECT_EQ(784111777, t);
+ }
+ time_t t;
+ EXPECT_FALSE(RFC1123StrToTime("So, 06 Nov 1994 08:49:37 UTC", t));
+ EXPECT_FALSE(RFC1123StrToTime(", 06 Nov 1994 08:49:37 UTC", t));
+ EXPECT_FALSE(RFC1123StrToTime("Son, 06 Nov 1994 08:49:37 UTC", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sun: 06 Nov 1994 08:49:37 UTC", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sun, 06 Nov 1994 08:49:37", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sun, 06 Nov 1994 08:49:37 GMT+1", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sun, 06 Nov 1994 GMT", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sunday, 06 Nov 1994 GMT", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sonntag, 06 Nov 1994 08:49:37 GMT", t));
+ EXPECT_FALSE(RFC1123StrToTime("domingo Nov 6 08:49:37 1994", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sunday: 06-Nov-94 08:49:37 GMT", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sunday, 06-Nov-94 08:49:37 GMT+1", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sunday, 06-Nov-94 08:49:37 EDT", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sunday, 06-Nov-94 08:49:37 -0100", t));
+ EXPECT_FALSE(RFC1123StrToTime("Sunday, 06-Nov-94 08:49:37 -0.1", t));
+}
+TEST(StrUtilTest, LookupTag)
+{
+ EXPECT_EQ("", LookupTag("", "Field", ""));
+ EXPECT_EQ("", LookupTag("", "Field", nullptr));
+ EXPECT_EQ("default", LookupTag("", "Field", "default"));
+ EXPECT_EQ("default", LookupTag("Field1: yes", "Field", "default"));
+ EXPECT_EQ("default", LookupTag("Fiel: yes", "Field", "default"));
+ EXPECT_EQ("default", LookupTag("Fiel d: yes", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("Field: foo", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("Field: foo\n", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("\nField: foo\n", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("Field:foo", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("Field:foo\n", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("\nField:foo\n", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("Field:\tfoo\n", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("Field: foo \t", "Field", "default"));
+ EXPECT_EQ("foo", LookupTag("Field: foo \t\n", "Field", "default"));
+ EXPECT_EQ("Field : yes", LookupTag("Field: Field : yes \t\n", "Field", "default"));
+ EXPECT_EQ("Field : yes", LookupTag("Field:\n Field : yes \t\n", "Field", "default"));
+ EXPECT_EQ("Field : yes", LookupTag("Foo: bar\nField: Field : yes \t\n", "Field", "default"));
+ EXPECT_EQ("line1\nline2", LookupTag("Multi: line1\n line2", "Multi", "default"));
+ EXPECT_EQ("line1\nline2", LookupTag("Multi: line1\n line2\n", "Multi", "default"));
+ EXPECT_EQ("line1\nline2", LookupTag("Multi:\n line1\n line2\n", "Multi", "default"));
+ EXPECT_EQ("line1\n\nline2", LookupTag("Multi:\n line1\n .\n line2\n", "Multi", "default"));
+ EXPECT_EQ("line1\na\nline2", LookupTag("Multi:\n line1\n a\n line2\n", "Multi", "default"));
+ EXPECT_EQ("line1\nfoo\nline2", LookupTag("Multi:\n line1\n foo\n line2\n", "Multi", "default"));
+ EXPECT_EQ("line1\n line2", LookupTag("Multi: line1\n line2", "Multi", "default"));
+ EXPECT_EQ(" line1\n \t line2", LookupTag("Multi:\t \n line1\n \t line2\n", "Multi", "default"));
+ EXPECT_EQ(" line1\n\n\n \t line2", LookupTag("Multi:\t \n line1\n .\n . \n \t line2\n", "Multi", "default"));
+
+ std::string const msg =
+ "Field1: Value1\nField2:Value2\nField3:\t Value3\n"
+ "Multi-Field1: Line1\n Line2\nMulti-Field2:\n Line1\n Line2\n"
+ "Field4: Value4\nField5:Value5";
+ EXPECT_EQ("Value1", LookupTag(msg, "Field1", ""));
+ EXPECT_EQ("Value2", LookupTag(msg, "Field2", ""));
+ EXPECT_EQ("Value3", LookupTag(msg, "Field3", ""));
+ EXPECT_EQ("Line1\nLine2", LookupTag(msg, "Multi-Field1", ""));
+ EXPECT_EQ("Line1\nLine2", LookupTag(msg, "Multi-Field2", ""));
+ EXPECT_EQ("Value4", LookupTag(msg, "Field4", ""));
+ EXPECT_EQ("Value5", LookupTag(msg, "Field5", ""));
+}
diff --git a/test/libapt/tagfile_test.cc b/test/libapt/tagfile_test.cc
new file mode 100644
index 0000000..8823ff7
--- /dev/null
+++ b/test/libapt/tagfile_test.cc
@@ -0,0 +1,287 @@
+#include <config.h>
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <sstream>
+#include <string>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+TEST(TagFileTest,SingleField)
+{
+ FileFd fd;
+ createTemporaryFile("singlefield", fd, NULL, "FieldA-12345678: the value of the field");
+
+ pkgTagFile tfile(&fd);
+ pkgTagSection section;
+ ASSERT_TRUE(tfile.Step(section));
+
+ // It has one field
+ EXPECT_EQ(1u, section.Count());
+ // ... and it is called FieldA-12345678
+ EXPECT_TRUE(section.Exists("FieldA-12345678"));
+ // its value is correct
+ EXPECT_EQ("the value of the field", section.FindS("FieldA-12345678"));
+ // A non-existent field has an empty string as value
+ EXPECT_EQ("", section.FindS("FieldB-12345678"));
+ // ... and Exists does not lie about missing fields...
+ EXPECT_FALSE(section.Exists("FieldB-12345678"));
+ // There is only one section in this tag file
+ EXPECT_FALSE(tfile.Step(section));
+
+ // Now we scan an empty section to test reset
+ ASSERT_TRUE(section.Scan("\n\n", 2, true));
+ EXPECT_EQ(0u, section.Count());
+ EXPECT_FALSE(section.Exists("FieldA-12345678"));
+ EXPECT_FALSE(section.Exists("FieldB-12345678"));
+
+ createTemporaryFile("emptyfile", fd, NULL, NULL);
+ ASSERT_FALSE(tfile.Step(section));
+ EXPECT_EQ(0u, section.Count());
+}
+
+TEST(TagFileTest,MultipleSections)
+{
+ FileFd fd;
+ createTemporaryFile("bigsection", fd, NULL, "Package: pkgA\n"
+ "Version: 1\n"
+ "Size: 100\n"
+ "Description: aaa\n"
+ " aaa\n"
+ "\n"
+ "Package: pkgB\n"
+ "Version: 1\n"
+ "Flag: no\n"
+ "Description: bbb\n"
+ "\n"
+ "Package: pkgC\n"
+ "Version: 2\n"
+ "Flag: yes\n"
+ "Description:\n"
+ " ccc\n"
+ );
+
+ pkgTagFile tfile(&fd);
+ pkgTagSection section;
+ EXPECT_FALSE(section.Exists("Version"));
+
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_EQ(4u, section.Count());
+ EXPECT_TRUE(section.Exists("Version"));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("Size"));
+ EXPECT_FALSE(section.Exists("Flag"));
+ EXPECT_TRUE(section.Exists("Description"));
+ EXPECT_EQ("pkgA", section.FindS("Package"));
+ EXPECT_EQ("1", section.FindS("Version"));
+ EXPECT_EQ(1u, section.FindULL("Version"));
+ EXPECT_EQ(100u, section.FindULL("Size"));
+ unsigned long Flags = 1;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(1u, Flags);
+ Flags = 0;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(0u, Flags);
+ EXPECT_EQ("aaa\n aaa", section.FindS("Description"));
+
+
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_EQ(4u, section.Count());
+ EXPECT_TRUE(section.Exists("Version"));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("Size"));
+ EXPECT_TRUE(section.Exists("Flag"));
+ EXPECT_TRUE(section.Exists("Description"));
+ EXPECT_EQ("pkgB", section.FindS("Package"));
+ EXPECT_EQ("1", section.FindS("Version"));
+ EXPECT_EQ(1u, section.FindULL("Version"));
+ EXPECT_EQ(0u, section.FindULL("Size"));
+ Flags = 1;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(0u, Flags);
+ Flags = 0;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(0u, Flags);
+ EXPECT_EQ("bbb", section.FindS("Description"));
+
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_EQ(4u, section.Count());
+ EXPECT_TRUE(section.Exists("Version"));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("Size"));
+ EXPECT_TRUE(section.Exists("Flag"));
+ EXPECT_TRUE(section.Exists("Description"));
+ EXPECT_EQ("pkgC", section.FindS("Package"));
+ EXPECT_EQ("2", section.FindS("Version"));
+ EXPECT_EQ(2u, section.FindULL("Version"));
+ Flags = 0;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(1u, Flags);
+ Flags = 1;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(1u, Flags);
+ EXPECT_EQ("ccc", section.FindS("Description"));
+
+ // There is no section left in this tag file
+ EXPECT_FALSE(tfile.Step(section));
+}
+
+TEST(TagFileTest,BigSection)
+{
+ size_t const count = 500;
+ std::stringstream content;
+ for (size_t i = 0; i < count; ++i)
+ content << "Field-" << i << ": " << (2000 + i) << std::endl;
+
+ FileFd fd;
+ createTemporaryFile("bigsection", fd, NULL, content.str().c_str());
+
+ pkgTagFile tfile(&fd);
+ pkgTagSection section;
+ EXPECT_TRUE(tfile.Step(section));
+
+ EXPECT_EQ(count, section.Count());
+ for (size_t i = 0; i < count; ++i)
+ {
+ std::stringstream name;
+ name << "Field-" << i;
+ EXPECT_TRUE(section.Exists(name.str().c_str())) << name.str() << " does not exist";
+ EXPECT_EQ((i + 2000), section.FindULL(name.str().c_str()));
+ }
+
+ // There is only one section in this tag file
+ EXPECT_FALSE(tfile.Step(section));
+}
+
+TEST(TagFileTest, PickedUpFromPreviousCall)
+{
+ size_t const count = 500;
+ std::stringstream contentstream;
+ for (size_t i = 0; i < count; ++i)
+ contentstream << "Field-" << i << ": " << (2000 + i) << std::endl;
+ contentstream << std::endl << std::endl;
+ std::string content = contentstream.str();
+
+ pkgTagSection section;
+ EXPECT_FALSE(section.Scan(content.c_str(), content.size()/2));
+ EXPECT_NE(0u, section.Count());
+ EXPECT_NE(count, section.Count());
+ EXPECT_TRUE(section.Scan(content.c_str(), content.size(), false));
+ EXPECT_EQ(count, section.Count());
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ std::stringstream name;
+ name << "Field-" << i;
+ EXPECT_TRUE(section.Exists(name.str().c_str())) << name.str() << " does not exist";
+ EXPECT_EQ((i + 2000), section.FindULL(name.str().c_str()));
+ }
+}
+
+TEST(TagFileTest, SpacesEverywhere)
+{
+ std::string content =
+ "Package: pkgA\n"
+ "Package: pkgB\n"
+ "NoSpaces:yes\n"
+ "NoValue:\n"
+ "TagSpaces\t :yes\n"
+ "ValueSpaces: \tyes\n"
+ "BothSpaces \t:\t yes\n"
+ "TrailingSpaces: yes\t \n"
+ "Naming Space: yes\n"
+ "Naming Spaces: yes\n"
+ "Package : pkgC \n"
+ "Multi-Colon::yes:\n"
+ "\n\n";
+
+ pkgTagSection section;
+ EXPECT_TRUE(section.Scan(content.c_str(), content.size()));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("NoSpaces"));
+ EXPECT_TRUE(section.Exists("NoValue"));
+ EXPECT_TRUE(section.Exists("TagSpaces"));
+ EXPECT_TRUE(section.Exists("ValueSpaces"));
+ EXPECT_TRUE(section.Exists("BothSpaces"));
+ EXPECT_TRUE(section.Exists("TrailingSpaces"));
+ EXPECT_TRUE(section.Exists("Naming Space"));
+ EXPECT_TRUE(section.Exists("Naming Spaces"));
+ EXPECT_TRUE(section.Exists("Multi-Colon"));
+ EXPECT_EQ("pkgC", section.FindS("Package"));
+ EXPECT_EQ("yes", section.FindS("NoSpaces"));
+ EXPECT_EQ("", section.FindS("NoValue"));
+ EXPECT_EQ("yes", section.FindS("TagSpaces"));
+ EXPECT_EQ("yes", section.FindS("ValueSpaces"));
+ EXPECT_EQ("yes", section.FindS("BothSpaces"));
+ EXPECT_EQ("yes", section.FindS("TrailingSpaces"));
+ EXPECT_EQ("yes", section.FindS("Naming Space"));
+ EXPECT_EQ("yes", section.FindS("Naming Spaces"));
+ EXPECT_EQ(":yes:", section.FindS("Multi-Colon"));
+ // overridden values are still present, but not really accessible
+ EXPECT_EQ(12u, section.Count());
+}
+
+TEST(TagFileTest, Comments)
+{
+ FileFd fd;
+ createTemporaryFile("commentfile", fd, NULL, "# Leading comments should be ignored.\n"
+"\n"
+"# A wild second comment appears!\n"
+"\n"
+"Source: foo\n"
+"#Package: foo\n"
+"Section: bar\n"
+"#Section: overridden\n"
+"Priority: optional\n"
+"Build-Depends: debhelper,\n"
+"# apt-utils, (temporarily disabled)\n"
+" apt\n"
+"\n"
+"# Comments in the middle shouldn't result in extra blank paragraphs either.\n"
+"\n"
+"# Ditto.\n"
+"\n"
+"# A comment at the top of a paragraph should be ignored.\n"
+"Package: foo\n"
+"Architecture: any\n"
+"Description: An awesome package\n"
+" # This should still appear in the result.\n"
+"# this one shouldn't\n"
+" Blah, blah, blah. # but this again.\n"
+"# A comment at the end of a paragraph should be ignored.\n"
+"\n"
+"# Trailing comments shouldn't cause extra blank paragraphs."
+ );
+
+ pkgTagFile tfile(&fd, pkgTagFile::SUPPORT_COMMENTS, 1);
+ pkgTagSection section;
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_FALSE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("Source"));
+ EXPECT_EQ("foo", section.FindS("Source"));
+ EXPECT_TRUE(section.Exists("Section"));
+ EXPECT_EQ("bar", section.FindS("Section"));
+ EXPECT_TRUE(section.Exists("Priority"));
+ EXPECT_EQ("optional", section.FindS("Priority"));
+ EXPECT_TRUE(section.Exists("Build-Depends"));
+ EXPECT_EQ("debhelper,\n apt", section.FindS("Build-Depends"));
+
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_FALSE(section.Exists("Source"));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_EQ("foo", section.FindS("Package"));
+ EXPECT_FALSE(section.Exists("Section"));
+ EXPECT_TRUE(section.Exists("Architecture"));
+ EXPECT_EQ("any", section.FindS("Architecture"));
+ EXPECT_FALSE(section.Exists("Build-Depends"));
+ EXPECT_TRUE(section.Exists("Description"));
+ EXPECT_EQ("An awesome package\n # This should still appear in the result.\n Blah, blah, blah. # but this again.", section.FindS("Description"));
+
+ EXPECT_FALSE(tfile.Step(section));
+}
diff --git a/test/libapt/tagsection_test.cc b/test/libapt/tagsection_test.cc
new file mode 100644
index 0000000..3f170b2
--- /dev/null
+++ b/test/libapt/tagsection_test.cc
@@ -0,0 +1,270 @@
+#include <config.h>
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/tagfile.h>
+
+#include <sstream>
+#include <string>
+
+#include <gtest/gtest.h>
+
+#include "file-helpers.h"
+
+std::string packageValue = "aaaa";
+std::string typoValue = "aa\n"
+ " .\n"
+ " cc";
+std::string typoRawValue = "\n " + typoValue;
+std::string overrideValue = "1";
+/*
+ std::cerr << "FILECONTENT: »";
+ char buffer[3000];
+ while (fd.ReadLine(buffer, sizeof(buffer)))
+ std::cerr << buffer;
+ std::cerr << "«" << std::endl;;
+*/
+
+static void setupTestcaseStart(FileFd &fd, pkgTagSection &section, std::string &content)
+{
+ createTemporaryFile("writesection", fd, NULL, NULL);
+ content = "Package: " + packageValue + "\n"
+ "TypoA:\n " + typoValue + "\n"
+ "Override: " + overrideValue + "\n"
+ "Override-Backup: " + overrideValue + "\n"
+ "\n";
+ EXPECT_TRUE(section.Scan(content.c_str(), content.length(), true));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("TypoA"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(typoValue, section.FindS("TypoA"));
+ EXPECT_EQ(typoRawValue, section.FindRawS("TypoA"));
+ EXPECT_EQ(1, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteUnmodified)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ EXPECT_TRUE(section.Write(fd));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("TypoA"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(typoValue, section.FindS("TypoA"));
+ EXPECT_EQ(1, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteUnmodifiedOrder)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ char const * const order[] = { "Package", "TypoA", "Override", NULL };
+ EXPECT_TRUE(section.Write(fd, order));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("TypoA"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(typoValue, section.FindS("TypoA"));
+ EXPECT_EQ(1, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteUnmodifiedOrderReversed)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ char const * const order[] = { "Override", "TypoA", "Package", NULL };
+ EXPECT_TRUE(section.Write(fd, order));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("TypoA"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(typoValue, section.FindS("TypoA"));
+ EXPECT_EQ(1, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteUnmodifiedOrderNotAll)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ char const * const order[] = { "Override", NULL };
+ EXPECT_TRUE(section.Write(fd, order));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("TypoA"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(typoValue, section.FindS("TypoA"));
+ EXPECT_EQ(1, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteNoOrderRename)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ std::vector<pkgTagSection::Tag> rewrite;
+ rewrite.push_back(pkgTagSection::Tag::Rename("TypoA", "TypoB"));
+ EXPECT_TRUE(section.Write(fd, NULL, rewrite));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("TypoA"));
+ EXPECT_TRUE(section.Exists("TypoB"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(typoValue, section.FindS("TypoB"));
+ EXPECT_EQ(1, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteNoOrderRemove)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ std::vector<pkgTagSection::Tag> rewrite;
+ rewrite.push_back(pkgTagSection::Tag::Remove("TypoA"));
+ rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", ""));
+ EXPECT_TRUE(section.Write(fd, NULL, rewrite));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("TypoA"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_FALSE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(2u, section.Count());
+}
+TEST(TagSectionTest,WriteNoOrderRewrite)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ std::vector<pkgTagSection::Tag> rewrite;
+ rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", "42"));
+ EXPECT_TRUE(section.Write(fd, NULL, rewrite));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("TypoA"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(42, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteOrderRename)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ std::vector<pkgTagSection::Tag> rewrite;
+ rewrite.push_back(pkgTagSection::Tag::Rename("TypoA", "TypoB"));
+ char const * const order[] = { "Package", "TypoA", "Override", NULL };
+ EXPECT_TRUE(section.Write(fd, order, rewrite));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("TypoA"));
+ EXPECT_TRUE(section.Exists("TypoB"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(typoValue, section.FindS("TypoB"));
+ EXPECT_EQ(1, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
+TEST(TagSectionTest,WriteOrderRemove)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ std::vector<pkgTagSection::Tag> rewrite;
+ rewrite.push_back(pkgTagSection::Tag::Remove("TypoA"));
+ rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", ""));
+ char const * const order[] = { "Package", "TypoA", "Override", NULL };
+ EXPECT_TRUE(section.Write(fd, order, rewrite));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("TypoA"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_FALSE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(2u, section.Count());
+}
+TEST(TagSectionTest,WriteOrderRewrite)
+{
+ FileFd fd;
+ pkgTagSection section;
+ std::string content;
+ setupTestcaseStart(fd, section, content);
+ std::vector<pkgTagSection::Tag> rewrite;
+ rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", "42"));
+ char const * const order[] = { "Package", "TypoA", "Override", NULL };
+ EXPECT_TRUE(section.Write(fd, order, rewrite));
+ EXPECT_TRUE(fd.Seek(0));
+ pkgTagFile tfile(&fd);
+ ASSERT_TRUE(tfile.Step(section));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("TypoA"));
+ EXPECT_FALSE(section.Exists("TypoB"));
+ EXPECT_TRUE(section.Exists("Override"));
+ EXPECT_TRUE(section.Exists("Override-Backup"));
+ EXPECT_EQ(packageValue, section.FindS("Package"));
+ EXPECT_EQ(42, section.FindI("Override"));
+ EXPECT_EQ(1, section.FindI("Override-Backup"));
+ EXPECT_EQ(4u, section.Count());
+}
diff --git a/test/libapt/teestream_test.cc b/test/libapt/teestream_test.cc
new file mode 100644
index 0000000..a897e08
--- /dev/null
+++ b/test/libapt/teestream_test.cc
@@ -0,0 +1,39 @@
+#include <config.h>
+
+#include "../interactive-helper/teestream.h"
+#include <fstream>
+#include <sstream>
+#include <string>
+
+#include <gtest/gtest.h>
+
+TEST(TeeStreamTest,TwoStringSinks)
+{
+ std::ostringstream one, two;
+ basic_teeostream<char> tee(one, two);
+ tee << "This is the " << 1 << '.' << " Test, we expect: " << std::boolalpha << true << "\n";
+ std::string okay("This is the 1. Test, we expect: true\n");
+ EXPECT_EQ(okay, one.str());
+ EXPECT_EQ(okay, two.str());
+ EXPECT_EQ(one.str(), two.str());
+}
+
+TEST(TeeStreamTest,DevNullSink1)
+{
+ std::ostringstream one;
+ std::fstream two("/dev/null");
+ basic_teeostream<char> tee(one, two);
+ tee << "This is the " << 2 << '.' << " Test, we expect: " << std::boolalpha << false << "\n";
+ std::string okay("This is the 2. Test, we expect: false\n");
+ EXPECT_EQ(okay, one.str());
+}
+
+TEST(TeeStreamTest,DevNullSink2)
+{
+ std::ostringstream one;
+ std::fstream two("/dev/null");
+ basic_teeostream<char> tee(two, one);
+ tee << "This is the " << 3 << '.' << " Test, we expect: " << std::boolalpha << false << "\n";
+ std::string okay("This is the 3. Test, we expect: false\n");
+ EXPECT_EQ(okay, one.str());
+}
diff --git a/test/libapt/uri_test.cc b/test/libapt/uri_test.cc
new file mode 100644
index 0000000..519de49
--- /dev/null
+++ b/test/libapt/uri_test.cc
@@ -0,0 +1,216 @@
+#include <config.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/proxy.h>
+#include <apt-pkg/strutl.h>
+#include <gtest/gtest.h>
+#include <string>
+
+TEST(URITest, BasicHTTP)
+{
+ URI U("http://www.debian.org:90/temp/test");
+ EXPECT_EQ("http", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(90u, U.Port);
+ EXPECT_EQ("www.debian.org", U.Host);
+ EXPECT_EQ("/temp/test", U.Path);
+ EXPECT_EQ("http://www.debian.org:90/temp/test", (std::string)U);
+ EXPECT_EQ("http://www.debian.org:90", URI::SiteOnly(U));
+ EXPECT_EQ("http://www.debian.org:90/temp/test", URI::ArchiveOnly(U));
+ EXPECT_EQ("http://www.debian.org:90/temp/test", URI::NoUserPassword(U));
+ // Login data
+ U = URI("http://jgg:foo@ualberta.ca/blah");
+ EXPECT_EQ("http", U.Access);
+ EXPECT_EQ("jgg", U.User);
+ EXPECT_EQ("foo", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("ualberta.ca", U.Host);
+ EXPECT_EQ("/blah", U.Path);
+ EXPECT_EQ("http://jgg:foo@ualberta.ca/blah", (std::string)U);
+ EXPECT_EQ("http://ualberta.ca", URI::SiteOnly(U));
+ EXPECT_EQ("http://ualberta.ca/blah", URI::ArchiveOnly(U));
+ EXPECT_EQ("http://ualberta.ca/blah", URI::NoUserPassword(U));
+ // just a user
+ U = URI("https://apt@example.org/blah");
+ EXPECT_EQ("https", U.Access);
+ EXPECT_EQ("apt", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("example.org", U.Host);
+ EXPECT_EQ("/blah", U.Path);
+ EXPECT_EQ("https://apt@example.org/blah", (std::string)U);
+ EXPECT_EQ("https://example.org", URI::SiteOnly(U));
+ EXPECT_EQ("https://example.org/blah", URI::ArchiveOnly(U));
+ EXPECT_EQ("https://example.org/blah", URI::NoUserPassword(U));
+}
+TEST(URITest, SingeSlashFile)
+{
+ URI U("file:/usr/bin/foo");
+ EXPECT_EQ("file", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("", U.Host);
+ EXPECT_EQ("/usr/bin/foo", U.Path);
+ EXPECT_EQ("file:/usr/bin/foo", (std::string)U);
+ EXPECT_EQ("file:", URI::SiteOnly(U));
+ EXPECT_EQ("file:/usr/bin/foo", URI::ArchiveOnly(U));
+ EXPECT_EQ("file:/usr/bin/foo", URI::NoUserPassword(U));
+}
+TEST(URITest, BasicCDROM)
+{
+ URI U("cdrom:Moo Cow Rom:/debian");
+ EXPECT_EQ("cdrom", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("Moo Cow Rom", U.Host);
+ EXPECT_EQ("/debian", U.Path);
+ EXPECT_EQ("cdrom://Moo Cow Rom/debian", (std::string)U);
+ EXPECT_EQ("cdrom://Moo Cow Rom", URI::SiteOnly(U));
+ EXPECT_EQ("cdrom://Moo Cow Rom/debian", URI::ArchiveOnly(U));
+ EXPECT_EQ("cdrom://Moo Cow Rom/debian", URI::NoUserPassword(U));
+}
+TEST(URITest, RelativeGzip)
+{
+ URI U("gzip:./bar/cow");
+ EXPECT_EQ("gzip", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ(".", U.Host);
+ EXPECT_EQ("/bar/cow", U.Path);
+ EXPECT_EQ("gzip://./bar/cow", (std::string)U);
+ EXPECT_EQ("gzip://.", URI::SiteOnly(U));
+ EXPECT_EQ("gzip://./bar/cow", URI::ArchiveOnly(U));
+ EXPECT_EQ("gzip://./bar/cow", URI::NoUserPassword(U));
+}
+TEST(URITest, NoSlashFTP)
+{
+ URI U("ftp:ftp.fr.debian.org/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb");
+ EXPECT_EQ("ftp", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("ftp.fr.debian.org", U.Host);
+ EXPECT_EQ("/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", U.Path);
+ EXPECT_EQ("ftp://ftp.fr.debian.org/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", (std::string)U);
+ EXPECT_EQ("ftp://ftp.fr.debian.org", URI::SiteOnly(U));
+ EXPECT_EQ("ftp://ftp.fr.debian.org/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", URI::ArchiveOnly(U));
+ EXPECT_EQ("ftp://ftp.fr.debian.org/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", URI::NoUserPassword(U));
+}
+TEST(URITest, RFC2732)
+{
+ URI U("http://[1080::8:800:200C:417A]/foo");
+ EXPECT_EQ("http", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("1080::8:800:200C:417A", U.Host);
+ EXPECT_EQ("/foo", U.Path);
+ EXPECT_EQ("http://[1080::8:800:200C:417A]/foo", (std::string)U);
+ EXPECT_EQ("http://[1080::8:800:200C:417A]", URI::SiteOnly(U));
+ EXPECT_EQ("http://[1080::8:800:200C:417A]/foo", URI::ArchiveOnly(U));
+ EXPECT_EQ("http://[1080::8:800:200C:417A]/foo", URI::NoUserPassword(U));
+ // with port
+ U = URI("http://[::FFFF:129.144.52.38]:80/index.html");
+ EXPECT_EQ("http", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(80u, U.Port);
+ EXPECT_EQ("::FFFF:129.144.52.38", U.Host);
+ EXPECT_EQ("/index.html", U.Path);
+ EXPECT_EQ("http://[::FFFF:129.144.52.38]:80/index.html", (std::string)U);
+ EXPECT_EQ("http://[::FFFF:129.144.52.38]:80", URI::SiteOnly(U));
+ EXPECT_EQ("http://[::FFFF:129.144.52.38]:80/index.html", URI::ArchiveOnly(U));
+ EXPECT_EQ("http://[::FFFF:129.144.52.38]:80/index.html", URI::NoUserPassword(U));
+ // extra colon
+ U = URI("http://[::FFFF:129.144.52.38:]:80/index.html");
+ EXPECT_EQ("http", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(80u, U.Port);
+ EXPECT_EQ("::FFFF:129.144.52.38:", U.Host);
+ EXPECT_EQ("/index.html", U.Path);
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80/index.html", (std::string)U);
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80", URI::SiteOnly(U));
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80/index.html", URI::ArchiveOnly(U));
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80/index.html", URI::NoUserPassword(U));
+ // extra colon port
+ U = URI("http://[::FFFF:129.144.52.38:]/index.html");
+ EXPECT_EQ("http", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("::FFFF:129.144.52.38:", U.Host);
+ EXPECT_EQ("/index.html", U.Path);
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]/index.html", (std::string)U);
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]", URI::SiteOnly(U));
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]/index.html", URI::ArchiveOnly(U));
+ EXPECT_EQ("http://[::FFFF:129.144.52.38:]/index.html", URI::NoUserPassword(U));
+ // My Evil Corruption of RFC 2732 to handle CDROM names!
+ // Fun for the whole family! */
+ U = URI("cdrom:[The Debian 1.2 disk, 1/2 R1:6]/debian/");
+ EXPECT_EQ("cdrom", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("The Debian 1.2 disk, 1/2 R1:6", U.Host);
+ EXPECT_EQ("/debian/", U.Path);
+ EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]/debian/", (std::string)U);
+ EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]", URI::SiteOnly(U));
+ EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]/debian", URI::ArchiveOnly(U));
+ EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]/debian/", URI::NoUserPassword(U));
+ // no brackets
+ U = URI("cdrom:Foo Bar Cow/debian/");
+ EXPECT_EQ("cdrom", U.Access);
+ EXPECT_EQ("", U.User);
+ EXPECT_EQ("", U.Password);
+ EXPECT_EQ(0u, U.Port);
+ EXPECT_EQ("Foo Bar Cow", U.Host);
+ EXPECT_EQ("/debian/", U.Path);
+ EXPECT_EQ("cdrom://Foo Bar Cow/debian/", (std::string)U);
+ EXPECT_EQ("cdrom://Foo Bar Cow", URI::SiteOnly(U));
+ EXPECT_EQ("cdrom://Foo Bar Cow/debian", URI::ArchiveOnly(U));
+ EXPECT_EQ("cdrom://Foo Bar Cow/debian/", URI::NoUserPassword(U));
+ // percent encoded password
+ U = URI("ftp://foo:b%40r@example.org");
+ EXPECT_EQ("foo", U.User);
+ EXPECT_EQ("b@r", U.Password);
+ EXPECT_EQ("ftp://foo:b%40r@example.org/", (std::string) U);
+ EXPECT_EQ("ftp://example.org", URI::SiteOnly(U));
+ EXPECT_EQ("ftp://example.org", URI::ArchiveOnly(U));
+ EXPECT_EQ("ftp://example.org/", URI::NoUserPassword(U));
+ // percent encoded user
+ U = URI("ftp://f%40o:bar@example.org");
+ EXPECT_EQ("f@o", U.User);
+ EXPECT_EQ("bar", U.Password);
+ EXPECT_EQ("ftp://f%40o:bar@example.org/", (std::string) U);
+ EXPECT_EQ("ftp://example.org", URI::SiteOnly(U));
+ EXPECT_EQ("ftp://example.org", URI::ArchiveOnly(U));
+ EXPECT_EQ("ftp://example.org/", URI::NoUserPassword(U));
+}
+TEST(URITest, AutoProxyTest)
+{
+ URI u0("http://www.debian.org:90/temp/test");
+ URI u1("http://www.debian.org:91/temp/test");
+
+ _config->Set("Acquire::http::Proxy-Auto-Detect", "./apt-proxy-script");
+
+ // Scenario 0: Autodetecting a simple proxy
+ AutoDetectProxy(u0);
+ EXPECT_EQ(_config->Find("Acquire::http::proxy::www.debian.org", ""), "http://example.com");
+
+ // Scenario 1: Proxy stays the same if it is already set
+ AutoDetectProxy(u1);
+ EXPECT_EQ(_config->Find("Acquire::http::proxy::www.debian.org", ""), "http://example.com");
+
+ // Scenario 2: Reading with stderr output works fine
+ _config->Clear("Acquire::http::proxy::www.debian.org");
+ AutoDetectProxy(u1);
+ EXPECT_EQ(_config->Find("Acquire::http::proxy::www.debian.org", ""), "http://example.com/foo");
+
+ // Scenario 1 again: Proxy stays the same if it is already set
+ AutoDetectProxy(u0);
+ EXPECT_EQ(_config->Find("Acquire::http::proxy::www.debian.org", ""), "http://example.com/foo");
+}
diff --git a/test/thread-safety/not-thread-safe.sh b/test/thread-safety/not-thread-safe.sh
new file mode 100755
index 0000000..f86ef39
--- /dev/null
+++ b/test/thread-safety/not-thread-safe.sh
@@ -0,0 +1,7 @@
+git grep -p --color -n -E "$(grep -v ^# test/thread-safety/thread-check.txt | sed 's/(.*/\\\\ *\\\\(/' | xargs | tr ' ' '|')" \
+ apt-inst/ apt-pkg/ | ansi2html | ssh alioth.debian.org 'cat > /home/groups/apt/htdocs/not-thread-safe/index.html'
+git grep -p --color -n -E "$(grep ^# test/thread-safety/thread-check.txt | cut -f2 -d# | sed 's/(.*/\\\\ *\\\\(/' | xargs | tr ' ' '|')" \
+ apt-inst/ apt-pkg/ | ansi2html | ssh alioth.debian.org 'cat > /home/groups/apt/htdocs/not-thread-safe/portable.html'
+
+git grep -p --color -n -E "$(grep -v ^# test/thread-safety/thread-check-internal.txt | sed 's/(.*/\\\\ *\\\\(/' | xargs | tr ' ' '|')" \
+ apt-inst/ apt-pkg/ | ansi2html | ssh alioth.debian.org 'cat > /home/groups/apt/htdocs/not-thread-safe/internal.html'
diff --git a/test/thread-safety/thread-check-internal.txt b/test/thread-safety/thread-check-internal.txt
new file mode 100644
index 0000000..c55985f
--- /dev/null
+++ b/test/thread-safety/thread-check-internal.txt
@@ -0,0 +1,3 @@
+CndSet()
+Set()
+Clear()
diff --git a/test/thread-safety/thread-check.txt b/test/thread-safety/thread-check.txt
new file mode 100644
index 0000000..ed00965
--- /dev/null
+++ b/test/thread-safety/thread-check.txt
@@ -0,0 +1,91 @@
+asctime()
+basename()
+catgets()
+crypt()
+ctermid() if passed a non-NULL argument
+ctime()
+dbm_clearerr()
+dbm_close()
+dbm_delete()
+dbm_error()
+dbm_fetch()
+dbm_firstkey()
+dbm_nextkey()
+dbm_open()
+dbm_store()
+dirname()
+dlerror()
+drand48()
+ecvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
+encrypt()
+endgrent()
+endpwent()
+endutxent()
+fcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
+ftw()
+gcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
+getc_unlocked()
+getchar_unlocked()
+getdate()
+#getenv()
+getgrent()
+getgrgid()
+getgrnam()
+gethostbyaddr() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
+gethostbyname() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
+gethostent()
+getlogin()
+getnetbyaddr()
+getnetbyname()
+getnetent()
+getopt()
+getprotobyname()
+getprotobynumber()
+getprotoent()
+getpwent()
+getpwnam()
+getpwuid()
+getservbyname()
+getservbyport()
+getservent()
+getutxent()
+getutxid()
+getutxline()
+gmtime()
+hcreate()
+hdestroy()
+hsearch()
+inet_ntoa()
+l64a()
+lgamma()
+lgammaf()
+lgammal()
+localeconv()
+localtime()
+lrand48()
+mrand48()
+nftw()
+#nl_langinfo()
+ptsname()
+putc_unlocked()
+putchar_unlocked()
+putenv()
+pututxline()
+rand()
+#readdir()
+setenv()
+setgrent()
+setkey()
+setpwent()
+setutxent()
+#strerror()
+strsignal() [Added in POSIX.1-2008]
+strtok()
+#system() [Added in POSIX.1-2008]
+tmpnam() if passed a non-NULL argument
+ttyname()
+unsetenv()
+wcrtomb() if its final argument is NULL
+wcsrtombs() if its final argument is NULL
+wcstombs()
+wctomb()
diff --git a/triehash/.travis.yml b/triehash/.travis.yml
new file mode 100644
index 0000000..c66ea96
--- /dev/null
+++ b/triehash/.travis.yml
@@ -0,0 +1,14 @@
+language: perl
+perl:
+ - "5.24"
+ - "5.22"
+ - "5.20"
+ - "5.18"
+ - "5.16"
+ - "5.14"
+install:
+ - cpanm --quiet --notest --skip-satisfied Devel::Cover Devel::Cover::Report::Codecov
+script:
+ - ./tests/run-tests.sh
+after_script:
+ - cover -report codecov
diff --git a/triehash/LICENSE.md b/triehash/LICENSE.md
new file mode 100644
index 0000000..89de354
--- /dev/null
+++ b/triehash/LICENSE.md
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/triehash/README.md b/triehash/README.md
new file mode 100644
index 0000000..d6f6e7f
--- /dev/null
+++ b/triehash/README.md
@@ -0,0 +1,58 @@
+# Order-preserving minimal perfect hash function generator
+
+Build order-preserving minimal perfect hash functions.
+
+[![codecov](https://codecov.io/gh/julian-klode/triehash/branch/master/graph/badge.svg)](https://codecov.io/gh/julian-klode/triehash)
+[![Build Status](https://travis-ci.org/julian-klode/triehash.svg?branch=master)](https://travis-ci.org/julian-klode/triehash)
+
+## Performance
+
+Performance was evaluated against other hash functions. As an input set, the
+fields of Debian Packages and Sources files was used, and each hash function
+was run 1,000,000 times for each word. The byte count of the words were then
+summed up and divided by the total number of nanoseconds each function ran, so
+all speeds below are given in bytes per nanosecond, AKA gigabyte per second.
+
+arch/function|jak-x230 (amd64)|backup (amd64)|asachi.d.o (arm64)|asachi.d.o (armel)|asachi.d.o (armhf)|plummer.d.o (ppc64el)|eller.d.o (mipsel)
+-------------|----------------|--------------|------------------|------------------|------------------|---------------------|------------------
+Trie | 2.4 | 1.9 | 1.2 | 0.9 | 0.8 | 2.0 | 0.2
+Trie (*) | 2.2 | 1.7 | 0.8 | 0.7 | 0.7 | 1.8 | 0.2
+re2c | 1.7 | 1.3 | 0.9 | 0.9 | 0.7 | 1.6 | 0.2
+re2c (*) | 1.2 | 0.9 | 0.6 | 0.6 | 0.5 | 1.1 | 0.1
+gperf (*) | 0.7 | 0.5 | 0.2 | 0.2 | 0.2 | 0.5 | 0.1
+gperf | 1.3 | 0.9 | 0.3 | 0.3 | 0.2 | 0.4 | 0.1
+djb (*) | 0.7 | 0.5 | 0.3 | 0.3 | 0.3 | 0.5 | 0.1
+djb (**) | 1.0 | 0.7 | 0.4 | 0.5 | 0.5 | 0.6 | 0.2
+djb | 0.9 | 0.7 | 0.5 | 0.5 | 0.5 | 0.7 | 0.2
+apt (*) | 1.2 | 0.9 | 0.7 | 0.7 | 0.7 | 1.1 | 0.2
+apt (**) | 2.3 | 1.7 | 0.7 | 0.9 | 0.8 | 1.9 | 0.2
+
+And transposed:
+
+function/arch |Trie |Trie (*) |re2c |re2c (*) |gperf (*)|gperf |djb (*) |djb (**) |djb |apt (*) |apt (**)
+---------------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------
+jak-x230 (amd64) | 2.4| 2.2| 1.7| 1.2| 0.7| 1.3| 0.7| 1.0| 0.9| 1.2| 2.3
+backup (amd64) | 1.9| 1.7| 1.3| 0.9| 0.5| 0.9| 0.5| 0.7| 0.7| 0.9| 1.7
+asachi.d.o (arm64) | 1.2| 0.8| 0.9| 0.6| 0.2| 0.3| 0.3| 0.4| 0.5| 0.7| 0.7
+asachi.d.o (armel) | 0.9| 0.7| 0.9| 0.6| 0.2| 0.3| 0.3| 0.5| 0.5| 0.7| 0.9
+asachi.d.o (armhf) | 0.8| 0.7| 0.7| 0.5| 0.2| 0.2| 0.3| 0.5| 0.5| 0.7| 0.8
+plummer.d.o (ppc64el)| 2.0| 1.8| 1.6| 1.1| 0.5| 0.4| 0.5| 0.6| 0.7| 1.1| 1.9
+eller.d.o (mipsel) | 0.2| 0.2| 0.2| 0.1| 0.1| 0.1| 0.1| 0.2| 0.2| 0.2| 0.2
+
+
+Legend:
+
+* The (*) variants are case-insensitive, (**) are more optimised versions
+ of the (*) versions.
+* DJB (*) is a DJB Hash with naive lowercase conversion, DJB (**) just ORs one
+ bit into each value to get alphabetical characters to be lowercase
+* APT (*) is the AlphaHash function from APT which hashes the last 8 bytes in a
+ word in a case-insensitive manner. APT (**) is the same function unrolled.
+* All hosts except the x230 are Debian porterboxes. The x230 has a Core i5-3320M,
+ barriere has an Opteron 23xx.
+
+Notes:
+
+* The overhead is larger than needed on some platforms due to gcc inserting
+ unneeded zero extend instructions, see:
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77729
diff --git a/triehash/tests/framework.sh b/triehash/tests/framework.sh
new file mode 100644
index 0000000..51d4580
--- /dev/null
+++ b/triehash/tests/framework.sh
@@ -0,0 +1,84 @@
+#!/bin/sh
+# Simple integration test framework
+
+set -e
+
+
+cleanup() {
+ rm -f test.output test.c test.h test.tree
+}
+
+dumpone() {
+ if [ -e "$@" ]; then
+ echo "Content of $@:"
+ cat "$@" | sed "s#^#\t#g"
+ fi
+
+}
+
+dump() {
+ dumpone test.output
+ dumpone test.c
+ dumpone test.h
+ dumpone test.tree
+ return 1
+}
+
+testsuccess() {
+ [ "$INNER" ] || cleanup
+ [ "$INNER" ] || echo "Testing success of $@"
+ if ! "$@" > test.output 2>&1; then
+ echo "ERROR: Running $@ failed with error $?, messages were:" >&2
+ dump
+ return 1
+ fi
+}
+
+testfailure() {
+ [ "$INNER" ] || cleanup
+ [ "$INNER" ] || echo "Testing failure of $@"
+ if "$@" > test.output 2>&1; then
+ echo "ERROR: Running $@ unexpectedly succeeded, messages were:" >&2
+ dump
+ return 1
+ fi
+}
+
+testfileequal() {
+ [ "$INNER" ] || echo "Testing output of $2"
+ printf "%b\n" "$1" > expected
+ if ! diff -u "expected" "$2" > test.diff; then
+ echo "ERROR: Differences between expected output and and $2:" >&2
+ cat test.diff | sed "s#^#\t#g"
+ dump
+ return 1
+ fi
+}
+
+testgrep() {
+ [ "$INNER" ] || echo "Testing grep $@"
+ INNER=1 testsuccess grep "$@"
+ unset INNER
+}
+
+testsuccessequal() {
+ expect="$1"
+ shift
+ cleanup
+ echo "Testing success and output of $@"
+ INNER=1 testsuccess "$@"
+ INNER=1 testfileequal "$expect" test.output
+ unset INNER
+}
+
+
+WORDS="Word-_0
+Word = 42
+VeryLongWord
+Label ~ Word2
+= -9"
+
+triehash() {
+ printf "%b\n" "$WORDS" | perl -MDevel::Cover=-summary,0,-silent,1 $(dirname $(dirname $(readlink -f $0)))/triehash.pl "$@" || return $?
+ return $?
+}
diff --git a/triehash/tests/run-tests.sh b/triehash/tests/run-tests.sh
new file mode 100755
index 0000000..b9c1ec3
--- /dev/null
+++ b/triehash/tests/run-tests.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+DIR=$(dirname $(readlink -f $0))
+
+# Let's go into triehash.pl's dir
+cd $(dirname "$DIR")
+
+rm -rf cover_db
+
+count=$(cd "$DIR" && echo test-* | wc -w)
+i=1
+
+for test in $DIR/test-*; do
+ echo "[$i/$count] Running testcase $test"
+ if ! $test > test.summary 2>&1; then
+ cat test.summary
+ exit 1
+ fi
+ i=$((i + 1))
+done
+
+
+cover
diff --git a/triehash/tests/test-basic b/triehash/tests/test-basic
new file mode 100755
index 0000000..19cb086
--- /dev/null
+++ b/triehash/tests/test-basic
@@ -0,0 +1,245 @@
+#!/bin/sh
+. $(dirname $(readlink -f $0))/framework.sh
+
+# Check for non-existing files
+testfailure triehash -C /does/not/exist1 -H /does/not/exist1 /does/not/exist/input
+
+# Check that we can specify - for -C and -H
+testsuccessequal "#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+enum PerfectKey {
+ Unknown = -1,
+};
+static enum PerfectKey PerfectHash(const char *string, size_t length);
+static enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ default:
+ return Unknown;
+ }
+}
+#endif /* TRIE_HASH_PerfectHash */" triehash --multi-byte=0 -C - -H -
+
+# Check that split files work
+testsuccess triehash -C test.c -H test.h --multi-byte=0
+testfileequal "#include \"test.h\"
+ enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ default:
+ return Unknown;
+ }
+}" test.c
+testfileequal "#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+enum PerfectKey {
+ Unknown = -1,
+};
+ enum PerfectKey PerfectHash(const char *string, size_t length);
+#endif /* TRIE_HASH_PerfectHash */" test.h
+
+
+# Check the C code generator
+testsuccess triehash -C test.c -H test.c /dev/stdin
+testfileequal "#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+enum PerfectKey {
+ VeryLongWord = 43,
+ Word = 42,
+ Word___0 = 0,
+ Label = 44,
+ Unknown = -9,
+};
+static enum PerfectKey PerfectHash(const char *string, size_t length);
+#ifdef __GNUC__
+typedef uint16_t __attribute__((aligned (1))) triehash_uu16;
+typedef char static_assert16[__alignof__(triehash_uu16) == 1 ? 1 : -1];
+typedef uint32_t __attribute__((aligned (1))) triehash_uu32;
+typedef char static_assert32[__alignof__(triehash_uu32) == 1 ? 1 : -1];
+typedef uint64_t __attribute__((aligned (1))) triehash_uu64;
+typedef char static_assert64[__alignof__(triehash_uu64) == 1 ? 1 : -1];
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define onechar(c, s, l) (((uint64_t)(c)) << (s))
+#else
+#define onechar(c, s, l) (((uint64_t)(c)) << (l-8-s))
+#endif
+#if (!defined(__ARM_ARCH) || defined(__ARM_FEATURE_UNALIGNED)) && !defined(TRIE_HASH_NO_MULTI_BYTE)
+#define TRIE_HASH_MULTI_BYTE
+#endif
+#endif /*GNUC */
+#ifdef TRIE_HASH_MULTI_BYTE
+static enum PerfectKey PerfectHash4(const char *string)
+{
+ switch(*((triehash_uu32*) &string[0])) {
+ case 0| onechar('W', 0, 32)| onechar('o', 8, 32)| onechar('r', 16, 32)| onechar('d', 24, 32):
+ return Word;
+ }
+ return Unknown;
+}
+static enum PerfectKey PerfectHash5(const char *string)
+{
+ switch(*((triehash_uu32*) &string[0])) {
+ case 0| onechar('W', 0, 32)| onechar('o', 8, 32)| onechar('r', 16, 32)| onechar('d', 24, 32):
+ switch(string[4]) {
+ case 0| onechar('2', 0, 8):
+ return Label;
+ }
+ }
+ return Unknown;
+}
+static enum PerfectKey PerfectHash7(const char *string)
+{
+ switch(*((triehash_uu32*) &string[0])) {
+ case 0| onechar('W', 0, 32)| onechar('o', 8, 32)| onechar('r', 16, 32)| onechar('d', 24, 32):
+ switch(string[4]) {
+ case 0| onechar('-', 0, 8):
+ switch(string[5]) {
+ case 0| onechar('_', 0, 8):
+ switch(string[6]) {
+ case 0| onechar('0', 0, 8):
+ return Word___0;
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+static enum PerfectKey PerfectHash12(const char *string)
+{
+ switch(*((triehash_uu64*) &string[0])) {
+ case 0| onechar('V', 0, 64)| onechar('e', 8, 64)| onechar('r', 16, 64)| onechar('y', 24, 64)| onechar('L', 32, 64)| onechar('o', 40, 64)| onechar('n', 48, 64)| onechar('g', 56, 64):
+ switch(*((triehash_uu32*) &string[8])) {
+ case 0| onechar('W', 0, 32)| onechar('o', 8, 32)| onechar('r', 16, 32)| onechar('d', 24, 32):
+ return VeryLongWord;
+ }
+ }
+ return Unknown;
+}
+#else
+static enum PerfectKey PerfectHash4(const char *string)
+{
+ switch(string[0]) {
+ case 'W':
+ switch(string[1]) {
+ case 'o':
+ switch(string[2]) {
+ case 'r':
+ switch(string[3]) {
+ case 'd':
+ return Word;
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+static enum PerfectKey PerfectHash5(const char *string)
+{
+ switch(string[0]) {
+ case 'W':
+ switch(string[1]) {
+ case 'o':
+ switch(string[2]) {
+ case 'r':
+ switch(string[3]) {
+ case 'd':
+ switch(string[4]) {
+ case '2':
+ return Label;
+ }
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+static enum PerfectKey PerfectHash7(const char *string)
+{
+ switch(string[0]) {
+ case 'W':
+ switch(string[1]) {
+ case 'o':
+ switch(string[2]) {
+ case 'r':
+ switch(string[3]) {
+ case 'd':
+ switch(string[4]) {
+ case '-':
+ switch(string[5]) {
+ case '_':
+ switch(string[6]) {
+ case '0':
+ return Word___0;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+static enum PerfectKey PerfectHash12(const char *string)
+{
+ switch(string[0]) {
+ case 'V':
+ switch(string[1]) {
+ case 'e':
+ switch(string[2]) {
+ case 'r':
+ switch(string[3]) {
+ case 'y':
+ switch(string[4]) {
+ case 'L':
+ switch(string[5]) {
+ case 'o':
+ switch(string[6]) {
+ case 'n':
+ switch(string[7]) {
+ case 'g':
+ switch(string[8]) {
+ case 'W':
+ switch(string[9]) {
+ case 'o':
+ switch(string[10]) {
+ case 'r':
+ switch(string[11]) {
+ case 'd':
+ return VeryLongWord;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+#endif /* TRIE_HASH_MULTI_BYTE */
+static enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ case 4:
+ return PerfectHash4(string);
+ case 5:
+ return PerfectHash5(string);
+ case 7:
+ return PerfectHash7(string);
+ case 12:
+ return PerfectHash12(string);
+ default:
+ return Unknown;
+ }
+}
+#endif /* TRIE_HASH_PerfectHash */" test.c
diff --git a/triehash/tests/test-case-insensitive b/triehash/tests/test-case-insensitive
new file mode 100755
index 0000000..25ab2dd
--- /dev/null
+++ b/triehash/tests/test-case-insensitive
@@ -0,0 +1,109 @@
+#!/bin/sh
+. $(dirname $(readlink -f $0))/framework.sh
+
+WORDS="Halllo\nH-lllo\nHalll1"
+
+# Case-insensitive test
+testsuccessequal "#include \"/dev/null\"
+#ifdef __GNUC__
+typedef uint16_t __attribute__((aligned (1))) triehash_uu16;
+typedef char static_assert16[__alignof__(triehash_uu16) == 1 ? 1 : -1];
+typedef uint32_t __attribute__((aligned (1))) triehash_uu32;
+typedef char static_assert32[__alignof__(triehash_uu32) == 1 ? 1 : -1];
+typedef uint64_t __attribute__((aligned (1))) triehash_uu64;
+typedef char static_assert64[__alignof__(triehash_uu64) == 1 ? 1 : -1];
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define onechar(c, s, l) (((uint64_t)(c)) << (s))
+#else
+#define onechar(c, s, l) (((uint64_t)(c)) << (l-8-s))
+#endif
+#if (!defined(__ARM_ARCH) || defined(__ARM_FEATURE_UNALIGNED)) && !defined(TRIE_HASH_NO_MULTI_BYTE)
+#define TRIE_HASH_MULTI_BYTE
+#endif
+#endif /*GNUC */
+#ifdef TRIE_HASH_MULTI_BYTE
+static enum PerfectKey PerfectHash6(const char *string)
+{
+ switch(string[0] | 0x20) {
+ case 0| onechar('h', 0, 8):
+ switch(string[1]) {
+ case 0| onechar('-', 0, 8):
+ switch(*((triehash_uu32*) &string[2]) | 0x20202020) {
+ case 0| onechar('l', 0, 32)| onechar('l', 8, 32)| onechar('l', 16, 32)| onechar('o', 24, 32):
+ return H_lllo;
+ }
+ break;
+ case 0| onechar('a', 0, 8):
+ case 0| onechar('A', 0, 8):
+ switch(*((triehash_uu16*) &string[2]) | 0x2020) {
+ case 0| onechar('l', 0, 16)| onechar('l', 8, 16):
+ switch(string[4] | 0x20) {
+ case 0| onechar('l', 0, 8):
+ switch(string[5]) {
+ case 0| onechar('1', 0, 8):
+ return Halll1;
+ break;
+ case 0| onechar('o', 0, 8):
+ case 0| onechar('O', 0, 8):
+ return Halllo;
+ }
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+#else
+static enum PerfectKey PerfectHash6(const char *string)
+{
+ switch(string[0] | 0x20) {
+ case 'h':
+ switch(string[1]) {
+ case '-':
+ switch(string[2] | 0x20) {
+ case 'l':
+ switch(string[3] | 0x20) {
+ case 'l':
+ switch(string[4] | 0x20) {
+ case 'l':
+ switch(string[5] | 0x20) {
+ case 'o':
+ return H_lllo;
+ }
+ }
+ }
+ }
+ break;
+ case 'a':
+ case 'A':
+ switch(string[2] | 0x20) {
+ case 'l':
+ switch(string[3] | 0x20) {
+ case 'l':
+ switch(string[4] | 0x20) {
+ case 'l':
+ switch(string[5]) {
+ case '1':
+ return Halll1;
+ break;
+ case 'o':
+ case 'O':
+ return Halllo;
+ }
+ }
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+#endif /* TRIE_HASH_MULTI_BYTE */
+ enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ case 6:
+ return PerfectHash6(string);
+ default:
+ return Unknown;
+ }
+}" triehash --multi-byte=3210 --ignore-case -H /dev/null /dev/stdin
diff --git a/triehash/tests/test-enum-include-name-flags b/triehash/tests/test-enum-include-name-flags
new file mode 100755
index 0000000..33bd97c
--- /dev/null
+++ b/triehash/tests/test-enum-include-name-flags
@@ -0,0 +1,129 @@
+#!/bin/sh
+. $(dirname $(readlink -f $0))/framework.sh
+
+# Need a short word, we really just need to check if the labels work
+WORDS=w
+
+testsuccessequal "\
+#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+#include <foo.h>
+enum PerfectKey {
+ w = 0,
+ Unknown = -1,
+};
+ enum PerfectKey PerfectHash(const char *string, size_t length);
+#endif /* TRIE_HASH_PerfectHash */" triehash --multi-byte=0 -C /dev/null --include="<foo.h>" /dev/stdin
+
+# Check for --enum-class support
+testsuccessequal "\
+#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+enum class PerfectKey {
+ w = 0,
+ Unknown = -1,
+};
+static enum PerfectKey PerfectHash(const char *string, size_t length);
+static enum PerfectKey PerfectHash1(const char *string)
+{
+ switch(string[0]) {
+ case 'w':
+ return PerfectKey::w;
+ }
+ return PerfectKey::Unknown;
+}
+static enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ case 1:
+ return PerfectHash1(string);
+ default:
+ return PerfectKey::Unknown;
+ }
+}
+#endif /* TRIE_HASH_PerfectHash */" triehash --multi-byte=0 --enum-class /dev/stdin
+
+# Check for --enum-name support
+testsuccessequal "\
+#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+enum Foo {
+ Unknown = -1,
+};
+static enum Foo PerfectHash(const char *string, size_t length);
+static enum Foo PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ default:
+ return Unknown;
+ }
+}
+#endif /* TRIE_HASH_PerfectHash */\
+" triehash --multi-byte=0 --enum-name="Foo"
+
+# Check for --enum-class support
+testsuccessequal "\
+#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+enum class Foo::Bar {
+ Unknown = -1,
+};
+static enum Foo::Bar PerfectHash(const char *string, size_t length);
+static enum Foo::Bar PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ default:
+ return Foo::Bar::Unknown;
+ }
+}
+#endif /* TRIE_HASH_PerfectHash */\
+" triehash --multi-byte=0 --enum-class --enum-name="Foo::Bar"
+
+# Check for --function-name support
+testsuccessequal "\
+#ifndef TRIE_HASH_NonSense
+#define TRIE_HASH_NonSense
+#include <stddef.h>
+#include <stdint.h>
+enum PerfectKey {
+ Unknown = -1,
+};
+static enum PerfectKey NonSense(const char *string, size_t length);
+static enum PerfectKey NonSense(const char *string, size_t length)
+{
+ switch (length) {
+ default:
+ return Unknown;
+ }
+}
+#endif /* TRIE_HASH_NonSense */\
+" triehash --multi-byte=0 --function-name="NonSense"
+
+# Check for --counter-name support
+testsuccessequal "\
+#ifndef TRIE_HASH_PerfectHash
+#define TRIE_HASH_PerfectHash
+#include <stddef.h>
+#include <stdint.h>
+enum { MyCounter = 0 };
+enum PerfectKey {
+ Unknown = -1,
+};
+static enum PerfectKey PerfectHash(const char *string, size_t length);
+static enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ default:
+ return Unknown;
+ }
+}
+#endif /* TRIE_HASH_PerfectHash */\
+" triehash --multi-byte=0 --counter-name="MyCounter"
diff --git a/triehash/tests/test-multi-byte-level b/triehash/tests/test-multi-byte-level
new file mode 100755
index 0000000..ddfb8cd
--- /dev/null
+++ b/triehash/tests/test-multi-byte-level
@@ -0,0 +1,427 @@
+#!/bin/sh
+. $(dirname $(readlink -f $0))/framework.sh
+
+# Check that building a single-byte trie works
+testsuccessequal "\
+┌────────────────────────────────────────────────────┐
+│ Initial trie │
+└────────────────────────────────────────────────────┘
+
+├── V
+│ ├── e
+│ │ ├── r
+│ │ │ ├── y
+│ │ │ │ ├── L
+│ │ │ │ │ ├── o
+│ │ │ │ │ │ ├── n
+│ │ │ │ │ │ │ ├── g
+│ │ │ │ │ │ │ │ ├── W
+│ │ │ │ │ │ │ │ │ ├── o
+│ │ │ │ │ │ │ │ │ │ ├── r
+│ │ │ │ │ │ │ │ │ │ │ ├── d → VeryLongWord
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d → Word
+│ │ │ │ ├── -
+│ │ │ │ │ ├── _
+│ │ │ │ │ │ ├── 0 → Word-_0
+│ │ │ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Rebuilt trie │
+└────────────────────────────────────────────────────┘
+
+├── V
+│ ├── e
+│ │ ├── r
+│ │ │ ├── y
+│ │ │ │ ├── L
+│ │ │ │ │ ├── o
+│ │ │ │ │ │ ├── n
+│ │ │ │ │ │ │ ├── g
+│ │ │ │ │ │ │ │ ├── W
+│ │ │ │ │ │ │ │ │ ├── o
+│ │ │ │ │ │ │ │ │ │ ├── r
+│ │ │ │ │ │ │ │ │ │ │ ├── d → VeryLongWord
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d → Word
+│ │ │ │ ├── -
+│ │ │ │ │ ├── _
+│ │ │ │ │ │ ├── 0 → Word-_0
+│ │ │ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 4 │
+└────────────────────────────────────────────────────┘
+
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d → Word
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 5 │
+└────────────────────────────────────────────────────┘
+
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d
+│ │ │ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 7 │
+└────────────────────────────────────────────────────┘
+
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d
+│ │ │ │ ├── -
+│ │ │ │ │ ├── _
+│ │ │ │ │ │ ├── 0 → Word-_0
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 12 │
+└────────────────────────────────────────────────────┘
+
+├── V
+│ ├── e
+│ │ ├── r
+│ │ │ ├── y
+│ │ │ │ ├── L
+│ │ │ │ │ ├── o
+│ │ │ │ │ │ ├── n
+│ │ │ │ │ │ │ ├── g
+│ │ │ │ │ │ │ │ ├── W
+│ │ │ │ │ │ │ │ │ ├── o
+│ │ │ │ │ │ │ │ │ │ ├── r
+│ │ │ │ │ │ │ │ │ │ │ ├── d → VeryLongWord" triehash --multi-byte=0 -l tree /dev/stdin
+
+# Two byte optimization
+testsuccessequal "\
+┌────────────────────────────────────────────────────┐
+│ Initial trie │
+└────────────────────────────────────────────────────┘
+
+├── Ve
+│ ├── ry
+│ │ ├── Lo
+│ │ │ ├── ng
+│ │ │ │ ├── Wo
+│ │ │ │ │ ├── rd → VeryLongWord
+├── Wo
+│ ├── rd → Word
+│ │ ├── -_
+│ │ │ ├── 0 → Word-_0
+│ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Rebuilt trie │
+└────────────────────────────────────────────────────┘
+
+├── Ve
+│ ├── ry
+│ │ ├── Lo
+│ │ │ ├── ng
+│ │ │ │ ├── Wo
+│ │ │ │ │ ├── rd → VeryLongWord
+├── Wo
+│ ├── rd → Word
+│ │ ├── -
+│ │ │ ├── _0 → Word-_0
+│ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 4 │
+└────────────────────────────────────────────────────┘
+
+├── Wo
+│ ├── rd → Word
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 5 │
+└────────────────────────────────────────────────────┘
+
+├── Wo
+│ ├── rd
+│ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 7 │
+└────────────────────────────────────────────────────┘
+
+├── Wo
+│ ├── rd
+│ │ ├── -_
+│ │ │ ├── 0 → Word-_0
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 12 │
+└────────────────────────────────────────────────────┘
+
+├── Ve
+│ ├── ry
+│ │ ├── Lo
+│ │ │ ├── ng
+│ │ │ │ ├── Wo
+│ │ │ │ │ ├── rd → VeryLongWord" triehash --multi-byte=1 -l tree /dev/stdin
+# Four byte optimization
+testsuccessequal "\
+┌────────────────────────────────────────────────────┐
+│ Initial trie │
+└────────────────────────────────────────────────────┘
+
+├── Very
+│ ├── Long
+│ │ ├── Word → VeryLongWord
+├── Word → Word
+│ ├── -
+│ │ ├── _
+│ │ │ ├── 0 → Word-_0
+│ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Rebuilt trie │
+└────────────────────────────────────────────────────┘
+
+├── Very
+│ ├── Long
+│ │ ├── Word → VeryLongWord
+├── Word → Word
+│ ├── -
+│ │ ├── _
+│ │ │ ├── 0 → Word-_0
+│ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 4 │
+└────────────────────────────────────────────────────┘
+
+├── Word → Word
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 5 │
+└────────────────────────────────────────────────────┘
+
+├── Word
+│ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 7 │
+└────────────────────────────────────────────────────┘
+
+├── Word
+│ ├── -
+│ │ ├── _
+│ │ │ ├── 0 → Word-_0
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 12 │
+└────────────────────────────────────────────────────┘
+
+├── Very
+│ ├── Long
+│ │ ├── Word → VeryLongWord" triehash --multi-byte=2 -l tree /dev/stdin
+# Eigh byte optimization
+testsuccessequal "\
+┌────────────────────────────────────────────────────┐
+│ Initial trie │
+└────────────────────────────────────────────────────┘
+
+├── VeryLong
+│ ├── W
+│ │ ├── o
+│ │ │ ├── r
+│ │ │ │ ├── d → VeryLongWord
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d → Word
+│ │ │ │ ├── -
+│ │ │ │ │ ├── _
+│ │ │ │ │ │ ├── 0 → Word-_0
+│ │ │ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Rebuilt trie │
+└────────────────────────────────────────────────────┘
+
+├── V
+│ ├── eryLongW
+│ │ ├── o
+│ │ │ ├── r
+│ │ │ │ ├── d → VeryLongWord
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d → Word
+│ │ │ │ ├── -
+│ │ │ │ │ ├── _
+│ │ │ │ │ │ ├── 0 → Word-_0
+│ │ │ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 4 │
+└────────────────────────────────────────────────────┘
+
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d → Word
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 5 │
+└────────────────────────────────────────────────────┘
+
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d
+│ │ │ │ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 7 │
+└────────────────────────────────────────────────────┘
+
+├── W
+│ ├── o
+│ │ ├── r
+│ │ │ ├── d
+│ │ │ │ ├── -
+│ │ │ │ │ ├── _
+│ │ │ │ │ │ ├── 0 → Word-_0
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 12 │
+└────────────────────────────────────────────────────┘
+
+├── VeryLong
+│ ├── W
+│ │ ├── o
+│ │ │ ├── r
+│ │ │ │ ├── d → VeryLongWord" triehash --multi-byte=3 -l tree /dev/stdin
+
+
+# Check that building a multi-byte trie works
+testsuccessequal "\
+┌────────────────────────────────────────────────────┐
+│ Initial trie │
+└────────────────────────────────────────────────────┘
+
+├── VeryLong
+│ ├── Word → VeryLongWord
+├── Word → Word
+│ ├── -
+│ │ ├── _
+│ │ │ ├── 0 → Word-_0
+│ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Rebuilt trie │
+└────────────────────────────────────────────────────┘
+
+├── Very
+│ ├── LongWord → VeryLongWord
+├── Word → Word
+│ ├── -
+│ │ ├── _
+│ │ │ ├── 0 → Word-_0
+│ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 4 │
+└────────────────────────────────────────────────────┘
+
+├── Word → Word
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 5 │
+└────────────────────────────────────────────────────┘
+
+├── Word
+│ ├── 2 → Label
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 7 │
+└────────────────────────────────────────────────────┘
+
+├── Word
+│ ├── -
+│ │ ├── _
+│ │ │ ├── 0 → Word-_0
+┌────────────────────────────────────────────────────┐
+│ Trie for words of length 12 │
+└────────────────────────────────────────────────────┘
+
+├── VeryLong
+│ ├── Word → VeryLongWord" triehash -l tree /dev/stdin
+
+
+###### CHANGE THE WORDS FOR THE FOLLOWING TESTS #######
+WORDS="Word"
+
+# Check that we are generating the proper multi-byte and fallback sessions
+testsuccessequal "#include \"/dev/null\"
+#ifdef __GNUC__
+typedef uint16_t __attribute__((aligned (1))) triehash_uu16;
+typedef char static_assert16[__alignof__(triehash_uu16) == 1 ? 1 : -1];
+typedef uint32_t __attribute__((aligned (1))) triehash_uu32;
+typedef char static_assert32[__alignof__(triehash_uu32) == 1 ? 1 : -1];
+typedef uint64_t __attribute__((aligned (1))) triehash_uu64;
+typedef char static_assert64[__alignof__(triehash_uu64) == 1 ? 1 : -1];
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define onechar(c, s, l) (((uint64_t)(c)) << (s))
+#else
+#define onechar(c, s, l) (((uint64_t)(c)) << (l-8-s))
+#endif
+#if (!defined(__ARM_ARCH) || defined(__ARM_FEATURE_UNALIGNED)) && !defined(TRIE_HASH_NO_MULTI_BYTE)
+#define TRIE_HASH_MULTI_BYTE
+#endif
+#endif /*GNUC */
+#ifdef TRIE_HASH_MULTI_BYTE
+static enum PerfectKey PerfectHash4(const char *string)
+{
+ switch(*((triehash_uu32*) &string[0])) {
+ case 0| onechar('W', 0, 32)| onechar('o', 8, 32)| onechar('r', 16, 32)| onechar('d', 24, 32):
+ return Word;
+ }
+ return Unknown;
+}
+#else
+static enum PerfectKey PerfectHash4(const char *string)
+{
+ switch(string[0]) {
+ case 'W':
+ switch(string[1]) {
+ case 'o':
+ switch(string[2]) {
+ case 'r':
+ switch(string[3]) {
+ case 'd':
+ return Word;
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+#endif /* TRIE_HASH_MULTI_BYTE */
+ enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ case 4:
+ return PerfectHash4(string);
+ default:
+ return Unknown;
+ }
+}" triehash -H /dev/null /dev/stdin
+
+
+# Check that we are generating no multi-byte session
+testsuccessequal "#include \"/dev/null\"
+static enum PerfectKey PerfectHash4(const char *string)
+{
+ switch(string[0]) {
+ case 'W':
+ switch(string[1]) {
+ case 'o':
+ switch(string[2]) {
+ case 'r':
+ switch(string[3]) {
+ case 'd':
+ return Word;
+ }
+ }
+ }
+ }
+ return Unknown;
+}
+ enum PerfectKey PerfectHash(const char *string, size_t length)
+{
+ switch (length) {
+ case 4:
+ return PerfectHash4(string);
+ default:
+ return Unknown;
+ }
+}" triehash --multi-byte=0 -H /dev/null /dev/stdin
diff --git a/triehash/triehash.pl b/triehash/triehash.pl
new file mode 100755
index 0000000..841c0e7
--- /dev/null
+++ b/triehash/triehash.pl
@@ -0,0 +1,691 @@
+#!/usr/bin/perl -w
+#
+# Copyright (C) 2016 Julian Andres Klode <jak@jak-linux.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+
+=head1 NAME
+
+triehash - Generate a perfect hash function derived from a trie.
+
+=cut
+
+use strict;
+use warnings;
+use Getopt::Long;
+
+=head1 SYNOPSIS
+
+B<triehash> [S<I<option>>] [S<I<input file>>]
+
+=head1 DESCRIPTION
+
+triehash takes a list of words in input file and generates a function and
+an enumeration to describe the word
+
+=head1 INPUT FILE FORMAT
+
+The file consists of multiple lines of the form:
+
+ [label ~ ] word [= value]
+
+This maps word to value, and generates an enumeration with entries of the form:
+
+ label = value
+
+If I<label> is undefined, the word will be used, the minus character will be
+replaced by an underscore. If value is undefined it is counted upwards from
+the last value.
+
+There may also be one line of the format
+
+ [ label ~] = value
+
+Which defines the value to be used for non-existing keys. Note that this also
+changes default value for other keys, as for normal entries. So if you place
+
+ = 0
+
+at the beginning of the file, unknown strings map to 0, and the other strings
+map to values starting with 1. If label is not specified, the default is
+I<Unknown>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-C>I<.c file> B<--code>=I<.c file>
+
+Generate code in the given file.
+
+=item B<-H>I<header file> B<--header>=I<header file>
+
+Generate a header in the given file, containing a declaration of the hash
+function and an enumeration.
+
+=item B<--enum-name=>I<word>
+
+The name of the enumeration.
+
+=item B<--function-name=>I<word>
+
+The name of the function.
+
+=item B<--namespace=>I<name>
+
+Put the function and enum into a namespace (C++)
+
+=item B<--class=>I<name>
+
+Put the function and enum into a class (C++)
+
+=item B<--enum-class>
+
+Generate an enum class instead of an enum (C++)
+
+=item B<--counter-name=>I<name>
+
+Use I<name> for a counter that is set to the latest entry in the enumeration
++ 1. This can be useful for defining array sizes.
+
+=item B<--extern-c>
+
+Wrap everything into an extern "C" block. Not compatible with the C++
+options, as a header with namespaces, classes, or enum classes is not
+valid C.
+
+=item B<--multi-byte>=I<value>
+
+Generate code reading multiple bytes at once. The value is a string of power
+of twos to enable. The default value is 320 meaning that 8, 4, and single byte
+reads are enabled. Specify 0 to disable multi-byte completely, or add 2 if you
+also want to allow 2-byte reads. 2-byte reads are disabled by default because
+they negatively affect performance on older Intel architectures.
+
+This generates code for both multiple bytes and single byte reads, but only
+enables the multiple byte reads of GNU C compatible compilers, as the following
+extensions are used:
+
+=over 8
+
+=item Byte-aligned integers
+
+We must be able to generate integers that are aligned to a single byte using:
+
+ typedef uint64_t __attribute__((aligned (1))) triehash_uu64;
+
+=item Byte-order
+
+The macros __BYTE_ORDER__ and __ORDER_LITTLE_ENDIAN__ must be defined.
+
+=back
+
+We forcefully disable multi-byte reads on platforms where the variable
+I<__ARM_ARCH> is defined and I<__ARM_FEATURE_UNALIGNED> is not defined,
+as there is a measurable overhead from emulating the unaligned reads on
+ARM.
+
+=item B<--language=>I<language>
+
+Generate a file in the specified language. Currently known are 'C' and 'tree',
+the latter generating a tree.
+
+=item B<--include=>I<header>
+
+Add the header to the include statements of the header file. The value must
+be surrounded by quotes or angle brackets for C code. May be specified multiple
+times.
+
+=back
+
+=cut
+
+my $unknown = -1;
+my $unknown_label = "Unknown";
+my $counter_start = 0;
+my $enum_name = "PerfectKey";
+my $function_name = "PerfectHash";
+my $enum_class = 0;
+
+my $code_name = "-";
+my $header_name = "-";
+my $code;
+my $header;
+my $ignore_case = 0;
+my $multi_byte = "320";
+my $language = 'C';
+my $counter_name = undef;
+my @includes = ();
+
+
+Getopt::Long::config('default',
+ 'bundling',
+ 'no_getopt_compat',
+ 'no_auto_abbrev',
+ 'permute',
+ 'auto_help');
+
+GetOptions ("code|C=s" => \$code_name,
+ "header|H=s" => \$header_name,
+ "function-name=s" => \$function_name,
+ "ignore-case" => \$ignore_case,
+ "enum-name=s" => \$enum_name,
+ "language|l=s" => \$language,
+ "multi-byte=s" => \$multi_byte,
+ "enum-class" => \$enum_class,
+ "include=s" => \@includes,
+ "counter-name=s" => \$counter_name)
+ or die("Could not parse options!");
+
+
+# This implements a simple trie. Each node has three attributes:
+#
+# children - A hash of keys to other nodes
+# value - The value to be stored here
+# label - A named representation of the value.
+#
+# The key at each level of the trie can consist of one or more bytes, and the
+# trie can be normalized to a form where all keys at a level have the same
+# length using rebuild_tree().
+package Trie {
+
+ sub new {
+ my $class = shift;
+ my $self = {};
+ bless $self, $class;
+
+ $self->{children} = {};
+ $self->{value} = undef;
+ $self->{label} = undef;
+
+ return $self;
+ }
+
+ # Return the largest power of 2 smaller or equal to the argument
+ sub alignpower2 {
+ my ($self, $length) = @_;
+
+ return 8 if ($length >= 8 && $multi_byte =~ /3/);
+ return 4 if ($length >= 4 && $multi_byte =~ /2/);
+ return 2 if ($length >= 2 && $multi_byte =~ /1/);
+
+ return 1;
+ }
+
+ # Split the key into a head block and a tail
+ sub split_key {
+ my ($self, $key) = @_;
+ my $length = length $key;
+ my $split = $self->alignpower2($length);
+
+ return (substr($key, 0, $split), substr($key, $split));
+ }
+
+ # Given a key, a label, and a value, insert that into the tree, possibly
+ # replacing an existing node.
+ sub insert {
+ my ($self, $key, $label, $value) = @_;
+
+ if (length($key) == 0) {
+ $self->{label} = $label;
+ $self->{value} = $value;
+ return;
+ }
+
+ my ($child, $tail) = $self->split_key($key);
+
+ $self->{children}{$child} = Trie->new if (!defined($self->{children}{$child}));
+
+ $self->{children}{$child}->insert($tail, $label, $value);
+ }
+
+ # Construct a new trie that only contains words of a given length. This
+ # is used to split up the common trie after knowing all words, so we can
+ # switch on the expected word length first, and have the per-trie function
+ # implement simple longest prefix matching.
+ sub filter_depth {
+ my ($self, $togo) = @_;
+
+ my $new = Trie->new;
+
+ if ($togo != 0) {
+ my $found = 0;
+ foreach my $key (sort keys %{$self->{children}}) {
+ if ($togo > length($key) || defined $self->{children}{$key}->{value}) {
+ my $child = $self->{children}{$key}->filter_depth($togo - length($key));
+
+ $new->{children}{$key}= $child if defined $child;
+ $found = 1 if defined $child;
+ }
+ }
+ return undef if (!$found);
+ } else {
+ $new->{value} = $self->{value};
+ $new->{label} = $self->{label};
+ }
+
+ return $new;
+ }
+
+ # (helper for rebuild_tree)
+ # Reinsert all value nodes into the specified $trie, prepending $prefix
+ # to their $paths.
+ sub reinsert_value_nodes_into {
+ my ($self, $trie, $prefix) = @_;
+
+ $trie->insert($prefix, $self->{label}, $self->{value}) if (defined $self->{value});
+
+ foreach my $key (sort keys %{$self->{children}}) {
+ $self->{children}{$key}->reinsert_value_nodes_into($trie, $prefix . $key);
+ }
+ }
+
+ # (helper for rebuild_tree)
+ # Find the earliest point to split a key. Normally, we split at the maximum
+ # power of 2 that is greater or equal than the length of the key. When we
+ # are building an ASCII-optimised case-insensitive trie that simply ORs
+ # each byte with 0x20, we need to split at the first ambiguous character:
+ #
+ # For example, the words a-bc and a\rbc are identical in such a situation:
+ # '-' | 0x20 == '-' == '\r' | 0x20
+ # We cannot simply switch on all 4 bytes at once, but need to split before
+ # the ambiguous character so we can process the ambiguous character on its
+ # own.
+ sub find_ealier_split {
+ my ($self, $key) = @_;
+
+ if ($ignore_case) {
+ for my $i (0..length($key)-1) {
+ # If the key starts with an ambiguous character, we need to
+ # take only it. Otherwise, we need to take everything
+ # before the character.
+ return $self->alignpower2($i || 1) if (main::ambiguous(substr($key, $i, 1)));
+ }
+ }
+ return $self->alignpower2(length $key);
+ }
+
+ # This rebuilds the trie, splitting each key before ambiguous characters
+ # as explained in find_earlier_split(), and then chooses the smallest
+ # such split at each level, so that all keys at all levels have the same
+ # length (so we can use a multi-byte switch).
+ sub rebuild_tree {
+ my $self = shift;
+ # Determine if/where we need to split before an ambiguous character
+ my $new_split = 99999999999999999;
+ foreach my $key (sort keys %{$self->{children}}) {
+ my $special_length = $self->find_ealier_split($key);
+ $new_split = $special_length if ($special_length < $new_split);
+ }
+
+ # Start building a new uniform trie
+ my $newself = Trie->new;
+ $newself->{label} = $self->{label};
+ $newself->{value} = $self->{value};
+ $newself->{children} = {};
+
+ foreach my $key (sort keys %{$self->{children}}) {
+ my $head = substr($key, 0, $new_split);
+ my $tail = substr($key, $new_split);
+ # Rebuild the child node at $head, pushing $tail downwards
+ $newself->{children}{$head} //= Trie->new;
+ $self->{children}{$key}->reinsert_value_nodes_into($newself->{children}{$head}, $tail);
+ # We took up to one special character of each key label. There might
+ # be more, so we need to rebuild recursively.
+ $newself->{children}{$head} = $newself->{children}{$head}->rebuild_tree();
+ }
+
+ return $newself;
+ }
+}
+
+# Code generator for C and C++
+package CCodeGen {
+ my $static = ($code_name eq $header_name) ? "static" : "";
+ my $enum_specifier = $enum_class ? "enum class" : "enum";
+
+ sub new {
+ my $class = shift;
+ my $self = {};
+ bless $self, $class;
+
+ return $self;
+ }
+
+ sub open_output {
+ my $self = shift;
+ if ($code_name ne "-") {
+ open($code, '>', $code_name) or die "Cannot open $code_name: $!" ;
+ } else {
+ $code = *STDOUT;
+ }
+ if($code_name eq $header_name) {
+ $header = $code;
+ } elsif ($header_name ne "-") {
+ open($header, '>', $header_name) or die "Cannot open $header_name: $!" ;
+ } else {
+ $header = *STDOUT;
+ }
+ }
+
+ sub word_to_label {
+ my ($class, $word) = @_;
+
+ $word =~ s/_/__/g;
+ $word =~ s/-/_/g;
+ return $word;
+ }
+
+ # Return a case label, by shifting and or-ing bytes in the word
+ sub case_label {
+ my ($self, $key) = @_;
+
+ return sprintf("'%s'", substr($key, 0, 1)) if not $multi_byte;
+
+ my $output = '0';
+
+ for my $i (0..length($key)-1) {
+ $output .= sprintf("| onechar('%s', %d, %d)", substr($key, $i, 1), 8 * $i, 8*length($key));
+ }
+
+ return $output;
+ }
+
+ # Return an appropriate read instruction for $length bytes from $offset
+ sub switch_key {
+ my ($self, $offset, $length) = @_;
+
+ return "string[$offset]" if $length == 1;
+ return sprintf("*((triehash_uu%s*) &string[$offset])", $length * 8);
+ }
+
+ # Render the trie so that it matches the longest prefix.
+ sub print_table {
+ my ($self, $trie, $fh, $indent, $index) = @_;
+ $indent //= 0;
+ $index //= 0;
+
+ # If we have children, try to match them.
+ if (%{$trie->{children}}) {
+ # The difference between lowercase and uppercase alphabetical characters
+ # is that they have one bit flipped. If we have alphabetical characters
+ # in the search space, and the entire search space works fine if we
+ # always turn on the flip, just OR the character we are switching over
+ # with the bit.
+ my $want_use_bit = 0;
+ my $can_use_bit = 1;
+ my $key_length = 0;
+ foreach my $key (sort keys %{$trie->{children}}) {
+ $can_use_bit &= not main::ambiguous($key);
+ $want_use_bit |= ($key =~ /^[a-zA-Z]+$/);
+ $key_length = length($key);
+ }
+
+ if ($ignore_case && $can_use_bit && $want_use_bit) {
+ printf $fh ((" " x $indent) . "switch(%s | 0x%s) {\n", $self->switch_key($index, $key_length), "20" x $key_length);
+ } else {
+ printf $fh ((" " x $indent) . "switch(%s) {\n", $self->switch_key($index, $key_length));
+ }
+
+ my $notfirst = 0;
+ foreach my $key (sort keys %{$trie->{children}}) {
+ if ($notfirst) {
+ printf $fh (" " x $indent . " break;\n");
+ }
+ if ($ignore_case) {
+ printf $fh (" " x $indent . "case %s:\n", $self->case_label(lc($key)));
+ printf $fh (" " x $indent . "case %s:\n", $self->case_label(uc($key))) if lc($key) ne uc($key) && !($can_use_bit && $want_use_bit);
+ } else {
+ printf $fh (" " x $indent . "case %s:\n", $self->case_label($key));
+ }
+
+ $self->print_table($trie->{children}{$key}, $fh, $indent + 1, $index + length($key));
+
+ $notfirst=1;
+ }
+
+ printf $fh (" " x $indent . "}\n");
+ }
+
+
+ # This node has a value, so it is a possible end point. If no children
+ # matched, we have found our longest prefix.
+ if (defined $trie->{value}) {
+ printf $fh (" " x $indent . "return %s;\n", ($enum_class ? "${enum_name}::" : "").$trie->{label});
+ }
+
+ }
+
+ sub print_words {
+ my ($self, $trie, $fh, $indent, $sofar) = @_;
+
+ $indent //= 0;
+ $sofar //= "";
+
+
+ printf $fh (" " x $indent."%s = %s,\n", $trie->{label}, $trie->{value}) if defined $trie->{value};
+
+ foreach my $key (sort keys %{$trie->{children}}) {
+ $self->print_words($trie->{children}{$key}, $fh, $indent, $sofar . $key);
+ }
+ }
+
+ sub print_functions {
+ my ($self, $trie, %lengths) = @_;
+ foreach my $local_length (sort { $a <=> $b } (keys %lengths)) {
+ print $code ("static enum ${enum_name} ${function_name}${local_length}(const char *string)\n");
+ print $code ("{\n");
+ $self->print_table($trie->filter_depth($local_length)->rebuild_tree(), $code, 1);
+ printf $code (" return %s$unknown_label;\n", ($enum_class ? "${enum_name}::" : ""));
+ print $code ("}\n");
+ }
+ }
+
+ sub main {
+ my ($self, $trie, $num_values, %lengths) = @_;
+ print $header ("#ifndef TRIE_HASH_${function_name}\n");
+ print $header ("#define TRIE_HASH_${function_name}\n");
+ print $header ("#include <stddef.h>\n");
+ print $header ("#include <stdint.h>\n");
+ foreach my $include (@includes) {
+ print $header ("#include $include\n");
+ }
+ printf $header ("enum { $counter_name = $num_values };\n") if (defined($counter_name));
+ print $header ("${enum_specifier} ${enum_name} {\n");
+ $self->print_words($trie, $header, 1);
+ printf $header (" $unknown_label = $unknown,\n");
+ print $header ("};\n");
+ print $header ("$static enum ${enum_name} ${function_name}(const char *string, size_t length);\n");
+
+ print $code ("#include \"$header_name\"\n") if ($header_name ne $code_name);
+
+ if ($multi_byte) {
+ print $code ("#ifdef __GNUC__\n");
+ for (my $i=16; $i <= 64; $i *= 2) {
+ print $code ("typedef uint${i}_t __attribute__((aligned (1))) triehash_uu${i};\n");
+ print $code ("typedef char static_assert${i}[__alignof__(triehash_uu${i}) == 1 ? 1 : -1];\n");
+ }
+
+ print $code ("#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__\n");
+ print $code ("#define onechar(c, s, l) (((uint64_t)(c)) << (s))\n");
+ print $code ("#else\n");
+ print $code ("#define onechar(c, s, l) (((uint64_t)(c)) << (l-8-s))\n");
+ print $code ("#endif\n");
+ print $code ("#if (!defined(__ARM_ARCH) || defined(__ARM_FEATURE_UNALIGNED)) && !defined(TRIE_HASH_NO_MULTI_BYTE)\n");
+ print $code ("#define TRIE_HASH_MULTI_BYTE\n");
+ print $code ("#endif\n");
+ print $code ("#endif /*GNUC */\n");
+
+ print $code ("#ifdef TRIE_HASH_MULTI_BYTE\n");
+ $self->print_functions($trie, %lengths);
+ $multi_byte = 0;
+ print $code ("#else\n");
+ $self->print_functions($trie, %lengths);
+ print $code ("#endif /* TRIE_HASH_MULTI_BYTE */\n");
+ } else {
+ $self->print_functions($trie, %lengths);
+ }
+
+ print $code ("$static enum ${enum_name} ${function_name}(const char *string, size_t length)\n");
+ print $code ("{\n");
+ print $code (" switch (length) {\n");
+ foreach my $local_length (sort { $a <=> $b } (keys %lengths)) {
+ print $code (" case $local_length:\n");
+ print $code (" return ${function_name}${local_length}(string);\n");
+ }
+ print $code (" default:\n");
+ printf $code (" return %s$unknown_label;\n", ($enum_class ? "${enum_name}::" : ""));
+ print $code (" }\n");
+ print $code ("}\n");
+
+ # Print end of header here, in case header and code point to the same file
+ print $header ("#endif /* TRIE_HASH_${function_name} */\n");
+ }
+}
+
+# A character is ambiguous if the 1<<5 (0x20) bit does not correspond to the
+# lower case bit. A word is ambiguous if any character is. This definition is
+# used to check if we can perform the |0x20 optimization when building a case-
+# insensitive trie.
+sub ambiguous {
+ my $word = shift;
+
+ foreach my $char (split //, $word) {
+ # If 0x20 does not solely indicate lowercase, it is ambiguous
+ return 1 if ord(lc($char)) != (ord($char) | 0x20);
+ return 1 if ord(uc($char)) != (ord($char) & ~0x20);
+ }
+
+ return 0;
+}
+
+sub build_trie {
+ my $codegen = shift;
+ my $trie = Trie->new;
+
+ my $counter = $counter_start;
+ my %lengths;
+
+ open(my $input, '<', $ARGV[0]) or die "Cannot open ".$ARGV[0].": $!";
+ while (my $line = <$input>) {
+ my ($label, $word, $value) = $line =~/\s*(?:([^~\s]+)\s*~)?(?:\s*([^~=\s]+)\s*)?(?:=\s*([^\s]+)\s+)?\s*/;
+
+ if (defined $word) {
+ $counter = $value if defined($value);
+ $label //= $codegen->word_to_label($word);
+
+ $trie->insert($word, $label, $counter);
+ $lengths{length($word)} = 1;
+ $counter++;
+ } elsif (defined $value) {
+ $unknown = $value;
+ $unknown_label = $label if defined($label);
+ $counter = $value + 1;
+ } else {
+ die "Invalid line: $line";
+ }
+ }
+
+ return ($trie, $counter, %lengths);
+}
+
+# Generates an ASCII art tree
+package TreeCodeGen {
+
+ sub new {
+ my $class = shift;
+ my $self = {};
+ bless $self, $class;
+
+ return $self;
+ }
+
+ sub word_to_label {
+ my ($self, $word) = @_;
+ return $word;
+ }
+
+ sub main {
+ my ($self, $trie, $counter, %lengths) = @_;
+ printf $code ("┌────────────────────────────────────────────────────┐\n");
+ printf $code ("│ Initial trie │\n");
+ printf $code ("└────────────────────────────────────────────────────┘\n");
+ $self->print($trie);
+ printf $code ("┌────────────────────────────────────────────────────┐\n");
+ printf $code ("│ Rebuilt trie │\n");
+ printf $code ("└────────────────────────────────────────────────────┘\n");
+ $self->print($trie->rebuild_tree());
+
+ foreach my $local_length (sort { $a <=> $b } (keys %lengths)) {
+ printf $code ("┌────────────────────────────────────────────────────┐\n");
+ printf $code ("│ Trie for words of length %-4d │\n", $local_length);
+ printf $code ("└────────────────────────────────────────────────────┘\n");
+ $self->print($trie->filter_depth($local_length)->rebuild_tree());
+ }
+ }
+
+ sub open_output {
+ my $self = shift;
+ if ($code_name ne "-") {
+ open($code, '>', $code_name) or die "Cannot open ".$ARGV[0].": $!" ;
+ } else {
+ $code = *STDOUT;
+ }
+ }
+
+ # Print a trie
+ sub print {
+ my ($self, $trie, $depth) = @_;
+ $depth //= 0;
+
+ print $code (" → ") if defined($trie->{label});
+ print $code ($trie->{label} // "", "\n");
+ foreach my $key (sort keys %{$trie->{children}}) {
+ print $code ("│ " x ($depth), "├── $key");
+ $self->print($trie->{children}{$key}, $depth + 1);
+ }
+ }
+}
+
+my %codegens = (
+ C => "CCodeGen",
+ tree => "TreeCodeGen",
+);
+
+
+defined($codegens{$language}) or die "Unknown language $language. Valid choices: ", join(", ", keys %codegens);
+my $codegen = $codegens{$language}->new();
+my ($trie, $counter, %lengths) = build_trie($codegen);
+
+$codegen->open_output();
+$codegen->main($trie, $counter, %lengths);
+
+
+=head1 LICENSE
+
+triehash is available under the MIT/Expat license, see the source code
+for more information.
+
+=head1 AUTHOR
+
+Julian Andres Klode <jak@jak-linux.org>
+
+=cut
+
diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt
new file mode 100644
index 0000000..8246c72
--- /dev/null
+++ b/vendor/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Determine the current vendor, export to CURRENT_VENDOR
+if (NOT DEFINED CURRENT_VENDOR)
+ execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/getinfo current
+ OUTPUT_VARIABLE CURRENT_VENDOR_OUT OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ set(CURRENT_VENDOR "${CURRENT_VENDOR_OUT}" CACHE STRING "Select the system vendor")
+ message(STATUS "Detected vendor: ${CURRENT_VENDOR_OUT}")
+else()
+ message(STATUS "Detected vendor: ${CURRENT_VENDOR} (cached)")
+endif()
+
+# Handle sources.list example
+add_vendor_file(OUTPUT sources.list
+ INPUT "${CURRENT_VENDOR}/sources.list.in"
+ MODE 644
+ VARIABLES sourceslist-list-format
+ debian-stable-codename
+ debian-oldstable-codename
+ debian-testing-codename
+ ubuntu-codename
+ current-codename)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/sources.list
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples)
+
+# Handle apt.conf snippets
+file(GLOB conffiles ${CURRENT_VENDOR}/apt.conf-*)
+foreach(file ${conffiles})
+ file(RELATIVE_PATH confname ${CMAKE_CURRENT_SOURCE_DIR}/${CURRENT_VENDOR}/ ${file})
+ string(REPLACE "apt.conf-" "" confname "${confname}")
+ install(FILES "${file}"
+ DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}/apt/apt.conf.d/"
+ RENAME "${confname}")
+endforeach()
+
+if (EXISTS "${CURRENT_VENDOR}/CMakeLists.txt")
+ add_subdirectory(${CURRENT_VENDOR})
+endif()
diff --git a/vendor/README b/vendor/README
new file mode 100644
index 0000000..6846c84
--- /dev/null
+++ b/vendor/README
@@ -0,0 +1,72 @@
+The vendor system in APT is an experiment to help distributions ship a stock
+apt release instead of applying documentation patches to it, increasing
+maintenance burden for everyone and hiding 'interesting' patches in the mix.
+
+The provided information is used in the apt-key script and in documentation
+like manpages and example configuration files. If you have patches modifying
+additional bits and pieces currently not covered by this system please
+contact us so we can change this!
+
+
+== Adding a new vendor
+
+In the same directory you found this README in you should create a new
+directory with the name of your distribution (as defined by dpkg-vendor,
+ e.g. via "dpkg-vendor --query Vendor"). The name is case-insensitive,
+but ensure that the name is otherwise correct and the other fields in
+your deb-origin(5) file are correct as well as our buildsystem relies on
+this information.
+
+If no information is found for the current vendor at buildtime, the system
+looks for a vendor the current vendor is a derivative of, falling back to
+Debian if all else fails.
+
+The directory should include 2 files at the moment. It is best to look
+at the files of other distributions to understand what values are to be
+expected. Some additional notes about them can be found below.
+
+If we happen to include new fields/files in this system, we will opt for
+using a sensible default rather than failing the build or similar, so
+you are recommend to watch this space.
+Ensure also that your information is up-to-date!
+
+Contributing a new vendor as well as updating a existing one is best done
+by opening a bug in the Debian BTS against apt with a patch attached.
+
+
+== apt-vendor.ent
+
+The format used is the one DocBook XML uses. The file is included as an
+entity file in the manpages xml source, so the syntax has to be valid!
+
+The keyring-* settings are additionally used also in the creation of the
+apt-key script and the keyring-package in particular as a dependency for apt.
+
+The field current-codename is optional and can be used in sources.list.in.
+
+The fields sourceslist-list-format and sourceslist-sources-format are used as
+examples in the sources.list manpage and the first one is additionally
+available in the sources.list.in template.
+They should in general reflect the default sources of your distro.
+
+== sources.list.in
+
+An example for a sources.list which will be shipped in /usr/share/doc.
+This file will NOT be installed in /etc or otherwise used by apt.
+
+You can use some placeholders in this file, namely:
+* &debian-stable-codename;
+* &debian-oldstable-codename;
+* &debian-testing-codename;
+* &ubuntu-codename;
+* &sourceslist-list-format;
+with the value you would expect based on the name.
+
+The placeholder &current-codename; is yours and can be set in apt-vendor.ent
+
+
+== apt.conf-*
+
+Files in your vendor directory following this naming scheme will be picked up
+by the debian/rules file and installed in /etc/apt/apt.conf.d/ directory, with
+"apt.conf-" removed from the beginning of the filename.
diff --git a/vendor/blankon/apt-vendor.ent b/vendor/blankon/apt-vendor.ent
new file mode 100644
index 0000000..ea7625f
--- /dev/null
+++ b/vendor/blankon/apt-vendor.ent
@@ -0,0 +1,17 @@
+<!-- details about the keys used by the distribution -->
+<!ENTITY keyring-distro "BlankOn">
+<!ENTITY keyring-package "<package>blankon-keyring</package>">
+<!ENTITY keyring-filename "<filename>/usr/share/keyrings/blankon-archive-keyring.gpg</filename>">
+<!ENTITY keyring-removed-filename "<filename>/usr/share/keyrings/blankon-archive-removed-keys.gpg</filename>">
+<!ENTITY keyring-master-filename "/usr/share/keyrings/blankon-master-keyring.gpg">
+<!ENTITY keyring-uri "http://arsip.blankonlinux.or.id/blankon/project/blankon-archive-keyring.gpg">
+<!ENTITY current-codename "tambora">
+
+<!ENTITY sourceslist-list-format "deb http://arsip.blankonlinux.or.id/blankon &current-codename; main restricted
+deb http://arsip.blankonlinux.or.id/blankon &current-codename;-security main restricted
+deb http://arsip.blankonlinux.or.id/blankon &current-codename;-updates main restricted">
+
+<!ENTITY sourceslist-sources-format "Types: deb
+URIs: http://arsip.blankonlinux.or.id/blankon
+Suites: &current-codename; &current-codename;-security &current-codename;-updates
+Components: main restricted">
diff --git a/vendor/blankon/sources.list.in b/vendor/blankon/sources.list.in
new file mode 100644
index 0000000..2322e97
--- /dev/null
+++ b/vendor/blankon/sources.list.in
@@ -0,0 +1,10 @@
+# See sources.list(5) manpage for more information
+# Remember that CD-ROMs, DVDs and such are managed through the apt-cdrom tool.
+deb http://arsip.blankonlinux.or.id/blankon &current-codename; main restricted
+deb-src http://arsip.blankonlinux.or.id/blankon &current-codename; main restricted
+
+deb http://arsip.blankonlinux.or.id/blankon &current-codename;-security main restricted
+deb-src http://arsip.blankonlinux.or.id/blankon &current-codename;-security main restricted
+
+deb http://arsip.blankonlinux.or.id/blankon &current-codename;-updates main restricted
+deb-src http://arsip.blankonlinux.or.id/blankon &current-codename;-updates main restricted
diff --git a/vendor/debian/apt-vendor.ent b/vendor/debian/apt-vendor.ent
new file mode 100644
index 0000000..41484c4
--- /dev/null
+++ b/vendor/debian/apt-vendor.ent
@@ -0,0 +1,19 @@
+<!-- details about the keys used by the distribution -->
+<!ENTITY keyring-distro "Debian">
+<!ENTITY keyring-package "<package>debian-archive-keyring</package>">
+<!ENTITY keyring-filename "">
+<!ENTITY keyring-removed-filename "">
+<!ENTITY keyring-master-filename "">
+<!ENTITY keyring-uri "">
+
+<!ENTITY sourceslist-list-format "deb http://deb.debian.org/debian &debian-stable-codename; main contrib non-free
+deb http://security.debian.org &debian-stable-codename;/updates main contrib non-free">
+<!ENTITY sourceslist-sources-format "Types: deb
+URIs: http://deb.debian.org/debian
+Suites: &debian-stable-codename;
+Components: main contrib non-free
+
+Types: deb
+URIs: http://security.debian.org
+Suites: &debian-stable-codename;/updates
+Components: main contrib non-free">
diff --git a/vendor/debian/sources.list.in b/vendor/debian/sources.list.in
new file mode 100644
index 0000000..73a2ec9
--- /dev/null
+++ b/vendor/debian/sources.list.in
@@ -0,0 +1,7 @@
+# See sources.list(5) manpage for more information
+# Remember that CD-ROMs, DVDs and such are managed through the apt-cdrom tool.
+&sourceslist-list-format;
+
+# Uncomment if you want the apt-get source function to work
+#deb-src http://deb.debian.org/debian &debian-stable-codename; main contrib non-free
+#deb-src http://security.debian.org &debian-stable-codename;/updates main contrib non-free
diff --git a/vendor/getinfo b/vendor/getinfo
new file mode 100755
index 0000000..37eb74c
--- /dev/null
+++ b/vendor/getinfo
@@ -0,0 +1,83 @@
+#!/bin/sh
+# small helper to extract information form *.ent files
+
+BASEDIR="$(readlink -f "$(dirname $0)")"
+
+getcurrent() {
+ # search for an exact match to use the correct sources.list example
+ cd $BASEDIR
+ DISTROS="$(find . -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 2)"
+ for DISTRO in $DISTROS; do
+ if dpkg-vendor --is $DISTRO; then
+ echo $DISTRO
+ return 0
+ fi
+ done
+
+ # if we haven't found a specific, look for a deriving
+ # we do ubuntu and debian last as those are the biggest families
+ # and would therefore potentially 'shadow' smaller families
+ # (especially debian as it sorts quiet early)
+ for DISTRO in $DISTROS; do
+ if [ "$DISTRO" = 'debian' -o "$DISTRO" = 'ubuntu' ]; then continue; fi
+ if dpkg-vendor --derives-from $DISTRO; then
+ echo $DISTRO
+ return 0
+ fi
+ done
+
+ # Do the ubuntu/debian dance we talked about
+ if dpkg-vendor --derives-from ubuntu; then
+ echo $DISTRO
+ return 0
+ fi
+
+ echo debian
+ return 0
+}
+
+if [ "$1" = "--vendor" ]; then
+ CURRENT_VENDOR="$2"
+ shift 2
+else
+ CURRENT_VENDOR=$(getcurrent)
+fi
+INFO="$(readlink -f "${BASEDIR}/$CURRENT_VENDOR/apt-vendor.ent")"
+VERBATIM="${BASEDIR}/../doc/apt-verbatim.ent"
+
+if [ -z "$INFO" ] || [ ! -e "$INFO" ]; then
+ echo >&2 'The current vendor is not valid or not chosen by the buildsystem yet.'
+ exit 1
+fi
+
+getrawfield() {
+ awk "/<!ENTITY $1/ {f=NR} f && NR-1==f { print; exit 0 }" RS='"' "${2:-$INFO}"
+}
+
+getfield() {
+ local FIELD="$(getrawfield "$@")"
+ FIELD="${FIELD#*>}"
+ echo "${FIELD%<*}"
+}
+
+case "$1" in
+debian-stable-codename|debian-oldstable-codename|debian-testing-codename|ubuntu-codename)
+ getrawfield "$1" "$VERBATIM"
+ ;;
+sourceslist-list-format|keyring-package|keyring-filename|keyring-master-filename|keyring-removed-filename|keyring-uri|current-codename)
+ exec $0 --vendor $CURRENT_VENDOR 'vendor' "$@"
+ ;;
+vendor)
+ getfield "$2"
+ ;;
+verbatim)
+ getfield "$2" "$VERBATIM"
+ ;;
+current)
+ echo $CURRENT_VENDOR
+ ;;
+*)
+ echo >&2 "Unknown data field $1 requested"
+ exit 2
+ ;;
+esac
diff --git a/vendor/raspbian/apt-vendor.ent b/vendor/raspbian/apt-vendor.ent
new file mode 100644
index 0000000..96d9fb7
--- /dev/null
+++ b/vendor/raspbian/apt-vendor.ent
@@ -0,0 +1,13 @@
+<!-- details about the keys used by the distribution -->
+<!ENTITY keyring-distro "Raspbian">
+<!ENTITY keyring-package "<package>raspbian-archive-keyring</package>">
+<!ENTITY keyring-filename "<filename>/usr/share/keyrings/raspbian-archive-keyring.gpg</filename>">
+<!ENTITY keyring-removed-filename "<filename>/usr/share/keyrings/raspbian-archive-removed-keys.gpg</filename>">
+<!ENTITY keyring-master-filename "">
+<!ENTITY keyring-uri "">
+
+<!ENTITY sourceslist-list-format "deb http://mirrordirector.raspbian.org/raspbian &debian-stable-codename; main contrib non-free">
+<!ENTITY sourceslist-sources-format "Types: deb
+URIs: http://mirrordirector.raspbian.org/raspbian
+Suites: &debian-stable-codename;
+Components: main contrib non-free">
diff --git a/vendor/raspbian/sources.list.in b/vendor/raspbian/sources.list.in
new file mode 100644
index 0000000..ea4ee60
--- /dev/null
+++ b/vendor/raspbian/sources.list.in
@@ -0,0 +1,6 @@
+# See sources.list(5) manpage for more information
+# Remember that CD-ROMs, DVDs and such are managed through the apt-cdrom tool.
+&sourceslist-list-format;
+
+# Uncomment if you want the apt-get source function to work
+#deb-src http://mirrordirector.raspbian.org/raspbian &debian-stable-codename; main contrib non-free
diff --git a/vendor/steamos/apt-vendor.ent b/vendor/steamos/apt-vendor.ent
new file mode 100644
index 0000000..7cf100f
--- /dev/null
+++ b/vendor/steamos/apt-vendor.ent
@@ -0,0 +1,15 @@
+<!-- details about the keys used by the distribution -->
+<!ENTITY keyring-distro "SteamOS">
+<!ENTITY keyring-package "<package>valve-archive-keyring</package>">
+<!ENTITY keyring-filename "<filename>/usr/share/keyrings/valve-archive-keyring.gpg</filename>">
+<!ENTITY keyring-removed-filename "<filename>/usr/share/keyrings/valve-archive-removed-keys.gpg</filename>">
+<!ENTITY keyring-master-filename "">
+<!ENTITY keyring-uri "">
+<!ENTITY current-codename "alchemist">
+
+<!ENTITY sourceslist-list-format "deb http://repo.steampowered.com/steamos &current-codename; main contrib non-free
+deb-src http://repo.steampowered.com/steamos &current-codename; main contrib non-free">
+<!ENTITY sourceslist-sources-format "Types: deb deb-src
+URIs: http://repo.steampowered.com/steamos
+Suites: &current-codename;
+Components: main contrib non-free">
diff --git a/vendor/steamos/sources.list.in b/vendor/steamos/sources.list.in
new file mode 100644
index 0000000..246d2e3
--- /dev/null
+++ b/vendor/steamos/sources.list.in
@@ -0,0 +1,3 @@
+# See sources.list(5) manpage for more information
+# Remember that CD-ROMs, DVDs and such are managed through the apt-cdrom tool.
+&sourceslist-list-format;
diff --git a/vendor/ubuntu/apt-vendor.ent b/vendor/ubuntu/apt-vendor.ent
new file mode 100644
index 0000000..dcebc92
--- /dev/null
+++ b/vendor/ubuntu/apt-vendor.ent
@@ -0,0 +1,20 @@
+<!-- details about the keys used by the distribution -->
+<!ENTITY keyring-distro "Ubuntu">
+<!ENTITY keyring-package "<package>ubuntu-keyring</package>">
+<!ENTITY keyring-filename "<filename>/usr/share/keyrings/ubuntu-archive-keyring.gpg</filename>">
+<!ENTITY keyring-removed-filename "<filename>/usr/share/keyrings/ubuntu-archive-removed-keys.gpg</filename>">
+<!ENTITY keyring-master-filename "/usr/share/keyrings/ubuntu-master-keyring.gpg">
+<!ENTITY keyring-uri "http://archive.ubuntu.com/ubuntu/project/ubuntu-archive-keyring.gpg">
+
+<!ENTITY sourceslist-list-format "deb http://us.archive.ubuntu.com/ubuntu &ubuntu-codename; main restricted
+deb http://security.ubuntu.com/ubuntu &ubuntu-codename;-security main restricted
+deb http://us.archive.ubuntu.com/ubuntu &ubuntu-codename;-updates main restricted">
+<!ENTITY sourceslist-sources-format "Types: deb
+URIs: http://us.archive.ubuntu.com/ubuntu
+Suites: &ubuntu-codename; &ubuntu-codename;-updates
+Components: main restricted
+
+Types: deb
+URIs: http://security.ubuntu.com/ubuntu
+Suites: &ubuntu-codename;-security
+Components: main restricted">
diff --git a/vendor/ubuntu/apt.conf-01-vendor-ubuntu b/vendor/ubuntu/apt.conf-01-vendor-ubuntu
new file mode 100644
index 0000000..44e6847
--- /dev/null
+++ b/vendor/ubuntu/apt.conf-01-vendor-ubuntu
@@ -0,0 +1 @@
+Acquire::Changelogs::AlwaysOnline "true";
diff --git a/vendor/ubuntu/sources.list.in b/vendor/ubuntu/sources.list.in
new file mode 100644
index 0000000..00db2f8
--- /dev/null
+++ b/vendor/ubuntu/sources.list.in
@@ -0,0 +1,10 @@
+# See sources.list(5) manpage for more information
+# Remember that CD-ROMs, DVDs and such are managed through the apt-cdrom tool.
+deb http://us.archive.ubuntu.com/ubuntu &ubuntu-codename; main restricted
+deb-src http://us.archive.ubuntu.com/ubuntu &ubuntu-codename; main restricted
+
+deb http://security.ubuntu.com/ubuntu &ubuntu-codename;-security main restricted
+deb-src http://security.ubuntu.com/ubuntu &ubuntu-codename;-security main restricted
+
+deb http://us.archive.ubuntu.com/ubuntu &ubuntu-codename;-updates main restricted
+deb-src http://us.archive.ubuntu.com/ubuntu &ubuntu-codename;-updates main restricted